@filteringdev/namulink 18.1.1 → 18.1.2
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/NamuLink.user.js +2 -2
- package/dist/interface.js +1 -1
- package/dist/interface.js.map +2 -2
- package/package.json +1 -1
package/dist/NamuLink.user.js
CHANGED
|
@@ -8,7 +8,7 @@
|
|
|
8
8
|
// @downloadURL https://cdn.jsdelivr.net/npm/@filteringdev/namulink@latest/dist/NamuLink.user.js
|
|
9
9
|
// @license MIT
|
|
10
10
|
//
|
|
11
|
-
// @version 18.1.
|
|
11
|
+
// @version 18.1.2
|
|
12
12
|
// @author PiQuark6046 and contributors
|
|
13
13
|
//
|
|
14
14
|
// @match https://namu.wiki/*
|
|
@@ -28,7 +28,7 @@ self.onmessage = (e) => {
|
|
|
28
28
|
entries.sort((a, b) => b[1] - a[1]);
|
|
29
29
|
self.postMessage({ jobId, sorted: entries });
|
|
30
30
|
};
|
|
31
|
-
`;return URL.createObjectURL(new Blob([t],{type:"text/javascript"}))}function W(t){let e=T(),p=Array.from({length:t},()=>new Worker(e));return{Workers:p,dispose(){p.forEach(f=>f.terminate()),URL.revokeObjectURL(e)}}}function M(t=document){let e=Object.create(null),p=t.createTreeWalker(t.documentElement||t,NodeFilter.SHOW_ELEMENT),f=p.currentNode;for(;f;){if(f instanceof Element)for(let g of f.attributes){let u=g.name;u.startsWith("data-v-")&&(e[u]=(e[u]||0)+1)}f=p.nextNode()}return e}function k(t){let e=[];function p(u){e.push(u);let a=e.length-1;for(;a>0;){let n=a-1>>1;if(e[n].count>=e[a].count)break;[e[n],e[a]]=[e[a],e[n]],a=n}}function f(){let u=e[0],a=e.pop();if(e.length){e[0]=a;let n=0;for(;;){let r=n*2+1,d=r+1,i=n;if(r<e.length&&e[r].count>e[i].count&&(i=r),d<e.length&&e[d].count>e[i].count&&(i=d),i===n)break;[e[n],e[i]]=[e[i],e[n]],n=i}}return u}for(let u=0;u<t.length;u++){let a=t[u];if(a&&a.length){let[n,r]=a[0];p({Count:r,Attr:n,ChunkIndex:u,IndexInChunk:0})}}let g=[];for(;e.length;){let{Attr:u,Count:a,ChunkIndex:n,IndexInChunk:r}=f();g.push([u,a]);let d=r+1,i=t[n];if(d<i.length){let[s,c]=i[d];p({Count:c,Attr:s,ChunkIndex:n,IndexInChunk:d})}}return g}async function R(t){let e=Object.entries(t),p=Math.max(1,navigator.hardwareConcurrency||1),f=Math.min(8,Math.max(1,p-1)),u=e.length>=5e3&&f>1?f:1,a=W(u);try{let n=Array.from({length:u},()=>[]);for(let i=0;i<e.length;i++)n[i%u].push(e[i]);let r=await Promise.all(n.map((i,s)=>new Promise((c,o)=>{let l=a.Workers[s],S=s+":"+Date.now(),h=b=>{b.data?.jobId===S&&(l.removeEventListener("message",h),l.removeEventListener("error",m),c(b.data.sorted))},m=b=>{l.removeEventListener("message",h),l.removeEventListener("error",m),o(b)};l.addEventListener("message",h),l.addEventListener("error",m),l.postMessage({entries:i,jobId:S})}))),d=r.length===1?r[0]:k(r);return{Result:d,TotalKeys:d.length,WorkerCount:u,HardwareConcurrency:p}}finally{a.dispose()}}var I=typeof unsafeWindow<"u"?unsafeWindow:window;function L(t,e="NamuLink"){let p=t.Function.prototype.toString,f=[[/for *\( *; *; *\) *switch *\( *_[a-z0-9]+\[_[a-z0-9]+\([a-z0-9]+\)\] *=_[a-z0-9]+/,/_[a-z0-9]+\[('|")[A-Z]+('|")\]\)\(\[ *\]\)/,/0x[a-z0-9]+ *\) *; *case/],[/; *return *this\[_0x[a-z0-9]+\( *0x[0-9a-z]+ *\)/,/; *if *\( *_0x[a-z0-9]+ *&& *\( *_0x[a-z0-9]+ *= *_0x[a-z0-9]+/,/\) *, *void *\( *this *\[ *_0x[a-z0-9]+\( *0x[0-9a-z]+ *\) *\] *= *_0x[a-z0-9]+ *\[/]];t.Function.prototype.bind=new Proxy(t.Function.prototype.bind,{apply(a,n,r){let d=Reflect.apply(p,n,r);return f.filter(i=>i.filter(s=>s.test(d)).length>=3).length===1?(console.debug(`[${e}]: Function.prototype.bind:`,n),Reflect.apply(a,()=>{},[])):Reflect.apply(a,n,r)}});let g=[[/\( *\) *=> *{ *var *_0x[0-9a-z]+ *= *a0_0x[0-9a-f]+ *; *this\[ *_0x[a-z0-9]+\( *0x[0-9a-f]+ *\) *\]\(\); *}/,/\( *\) *=> *{ *var *_0x[0-9a-z]+ *= *a0_0x[0-9a-f]+ *; *this\[ *_0x[a-z0-9]+\( *0x[0-9a-f]+ *\) *\]\(\); *}/],[/\( *\) *=> *{ *var _0x[a-z0-9]+ *= *_0x[a-z0-9]+ *; *if *\( *this\[ *_0x[a-z0-9]+ *\( *0x[0-9a-f]+ *\) *\] *\) *return *clearTimeout/,/\( *0x[0-9a-f]+ *\) *\] *\) *, *void *\( *this\[ *_0x[a-z0-9]+\( *0x[0-9a-f]+ *\) *\] *= *void *\([x0-9a-f*+-]+ *\) *\) *; *this\[_0x[a-z0-9]+\( *0x[0-9a-f]+ *\) *\] *\(\) *;/]];t.setTimeout=new Proxy(t.setTimeout,{apply(a,n,r){let d=Reflect.apply(p,r[0],r);if(g.filter(i=>i.filter(s=>s.test(d)).length>=1).length===1){console.debug(`[${e}]: setTimeout:`,r[0]);return}return Reflect.apply(a,n,r)}}),document.readyState==="loading"?window.addEventListener("DOMContentLoaded",()=>{w({Root:()=>document.getElementById("#app"),StableForMs:900,SampleWindowMs:900,Threshold:3,TimeoutMs:12e3,IgnoreMutation:y,WatchHashChange:!0})}):window.addEventListener("DOMContentLoaded",()=>{w({Root:()=>document.getElementById("#app"),StableForMs:900,SampleWindowMs:900,Threshold:3,TimeoutMs:12e3,IgnoreMutation:y,WatchHashChange:!0})});let u=async()=>{let a=M(document),{Result:n,TotalKeys:r,WorkerCount:d,HardwareConcurrency:i}=await R(a),s=[];n.filter(([,c])=>c<=30).forEach(([c,o])=>{s.push(...[...document.querySelectorAll(`[${c}]`)].filter(l=>l instanceof HTMLElement))}),s=s.filter(c=>getComputedStyle(c).getPropertyValue("display")==="flex"),s=s.filter(c=>[...c.querySelectorAll("*")].some(o=>o instanceof HTMLElement&&typeof o.click=="function")),s=s.filter(c=>[...c.querySelectorAll("*")].filter(o=>o instanceof HTMLElement&&o.getBoundingClientRect().bottom-o.getBoundingClientRect().top>100&&o.getBoundingClientRect().right-o.getBoundingClientRect().left>100).length<=50),s=s.filter(c=>{let o=[...c.querySelectorAll("*")].filter(l=>l.getBoundingClientRect().bottom-l.getBoundingClientRect().top>25&&l.getBoundingClientRect().right-l.getBoundingClientRect().left>25&&l instanceof SVGPathElement&&l.getAttribute("d")!==null||l instanceof HTMLImageElement&&l.src.includes("//i.namu.wiki/i/")).length;return 1<=o&&o<=6}),s=s.filter(c=>[...c.querySelectorAll("*")].some(o=>o instanceof HTMLElement&&getComputedStyle(o,"::after").getPropertyValue("content").includes(":")&&o.getBoundingClientRect().right-o.getBoundingClientRect().left>
|
|
31
|
+
`;return URL.createObjectURL(new Blob([t],{type:"text/javascript"}))}function W(t){let e=T(),p=Array.from({length:t},()=>new Worker(e));return{Workers:p,dispose(){p.forEach(f=>f.terminate()),URL.revokeObjectURL(e)}}}function M(t=document){let e=Object.create(null),p=t.createTreeWalker(t.documentElement||t,NodeFilter.SHOW_ELEMENT),f=p.currentNode;for(;f;){if(f instanceof Element)for(let g of f.attributes){let u=g.name;u.startsWith("data-v-")&&(e[u]=(e[u]||0)+1)}f=p.nextNode()}return e}function k(t){let e=[];function p(u){e.push(u);let a=e.length-1;for(;a>0;){let n=a-1>>1;if(e[n].count>=e[a].count)break;[e[n],e[a]]=[e[a],e[n]],a=n}}function f(){let u=e[0],a=e.pop();if(e.length){e[0]=a;let n=0;for(;;){let r=n*2+1,d=r+1,i=n;if(r<e.length&&e[r].count>e[i].count&&(i=r),d<e.length&&e[d].count>e[i].count&&(i=d),i===n)break;[e[n],e[i]]=[e[i],e[n]],n=i}}return u}for(let u=0;u<t.length;u++){let a=t[u];if(a&&a.length){let[n,r]=a[0];p({Count:r,Attr:n,ChunkIndex:u,IndexInChunk:0})}}let g=[];for(;e.length;){let{Attr:u,Count:a,ChunkIndex:n,IndexInChunk:r}=f();g.push([u,a]);let d=r+1,i=t[n];if(d<i.length){let[s,c]=i[d];p({Count:c,Attr:s,ChunkIndex:n,IndexInChunk:d})}}return g}async function R(t){let e=Object.entries(t),p=Math.max(1,navigator.hardwareConcurrency||1),f=Math.min(8,Math.max(1,p-1)),u=e.length>=5e3&&f>1?f:1,a=W(u);try{let n=Array.from({length:u},()=>[]);for(let i=0;i<e.length;i++)n[i%u].push(e[i]);let r=await Promise.all(n.map((i,s)=>new Promise((c,o)=>{let l=a.Workers[s],S=s+":"+Date.now(),h=b=>{b.data?.jobId===S&&(l.removeEventListener("message",h),l.removeEventListener("error",m),c(b.data.sorted))},m=b=>{l.removeEventListener("message",h),l.removeEventListener("error",m),o(b)};l.addEventListener("message",h),l.addEventListener("error",m),l.postMessage({entries:i,jobId:S})}))),d=r.length===1?r[0]:k(r);return{Result:d,TotalKeys:d.length,WorkerCount:u,HardwareConcurrency:p}}finally{a.dispose()}}var I=typeof unsafeWindow<"u"?unsafeWindow:window;function L(t,e="NamuLink"){let p=t.Function.prototype.toString,f=[[/for *\( *; *; *\) *switch *\( *_[a-z0-9]+\[_[a-z0-9]+\([a-z0-9]+\)\] *=_[a-z0-9]+/,/_[a-z0-9]+\[('|")[A-Z]+('|")\]\)\(\[ *\]\)/,/0x[a-z0-9]+ *\) *; *case/],[/; *return *this\[_0x[a-z0-9]+\( *0x[0-9a-z]+ *\)/,/; *if *\( *_0x[a-z0-9]+ *&& *\( *_0x[a-z0-9]+ *= *_0x[a-z0-9]+/,/\) *, *void *\( *this *\[ *_0x[a-z0-9]+\( *0x[0-9a-z]+ *\) *\] *= *_0x[a-z0-9]+ *\[/]];t.Function.prototype.bind=new Proxy(t.Function.prototype.bind,{apply(a,n,r){let d=Reflect.apply(p,n,r);return f.filter(i=>i.filter(s=>s.test(d)).length>=3).length===1?(console.debug(`[${e}]: Function.prototype.bind:`,n),Reflect.apply(a,()=>{},[])):Reflect.apply(a,n,r)}});let g=[[/\( *\) *=> *{ *var *_0x[0-9a-z]+ *= *a0_0x[0-9a-f]+ *; *this\[ *_0x[a-z0-9]+\( *0x[0-9a-f]+ *\) *\]\(\); *}/,/\( *\) *=> *{ *var *_0x[0-9a-z]+ *= *a0_0x[0-9a-f]+ *; *this\[ *_0x[a-z0-9]+\( *0x[0-9a-f]+ *\) *\]\(\); *}/],[/\( *\) *=> *{ *var _0x[a-z0-9]+ *= *_0x[a-z0-9]+ *; *if *\( *this\[ *_0x[a-z0-9]+ *\( *0x[0-9a-f]+ *\) *\] *\) *return *clearTimeout/,/\( *0x[0-9a-f]+ *\) *\] *\) *, *void *\( *this\[ *_0x[a-z0-9]+\( *0x[0-9a-f]+ *\) *\] *= *void *\([x0-9a-f*+-]+ *\) *\) *; *this\[_0x[a-z0-9]+\( *0x[0-9a-f]+ *\) *\] *\(\) *;/]];t.setTimeout=new Proxy(t.setTimeout,{apply(a,n,r){let d=Reflect.apply(p,r[0],r);if(g.filter(i=>i.filter(s=>s.test(d)).length>=1).length===1){console.debug(`[${e}]: setTimeout:`,r[0]);return}return Reflect.apply(a,n,r)}}),document.readyState==="loading"?window.addEventListener("DOMContentLoaded",()=>{w({Root:()=>document.getElementById("#app"),StableForMs:900,SampleWindowMs:900,Threshold:3,TimeoutMs:12e3,IgnoreMutation:y,WatchHashChange:!0})}):window.addEventListener("DOMContentLoaded",()=>{w({Root:()=>document.getElementById("#app"),StableForMs:900,SampleWindowMs:900,Threshold:3,TimeoutMs:12e3,IgnoreMutation:y,WatchHashChange:!0})});let u=async()=>{let a=M(document),{Result:n,TotalKeys:r,WorkerCount:d,HardwareConcurrency:i}=await R(a),s=[];n.filter(([,c])=>c<=30).forEach(([c,o])=>{s.push(...[...document.querySelectorAll(`[${c}]`)].filter(l=>l instanceof HTMLElement))}),s=s.filter(c=>getComputedStyle(c).getPropertyValue("display")==="flex"),s=s.filter(c=>[...c.querySelectorAll("*")].some(o=>o instanceof HTMLElement&&typeof o.click=="function")),s=s.filter(c=>[...c.querySelectorAll("*")].filter(o=>o instanceof HTMLElement&&o.getBoundingClientRect().bottom-o.getBoundingClientRect().top>100&&o.getBoundingClientRect().right-o.getBoundingClientRect().left>100).length<=50),s=s.filter(c=>{let o=[...c.querySelectorAll("*")].filter(l=>l.getBoundingClientRect().bottom-l.getBoundingClientRect().top>25&&l.getBoundingClientRect().right-l.getBoundingClientRect().left>25&&l instanceof SVGPathElement&&l.getAttribute("d")!==null||l instanceof HTMLImageElement&&l.src.includes("//i.namu.wiki/i/")).length;return 1<=o&&o<=6}),s=s.filter(c=>[...c.querySelectorAll("*")].some(o=>o instanceof HTMLElement&&getComputedStyle(o,"::after").getPropertyValue("content").includes(":")&&o.getBoundingClientRect().right-o.getBoundingClientRect().left>20)===!1),console.debug(`[${e}]`,s),s.forEach(c=>{setInterval(()=>{c.setAttribute("style","display: none !important; visibility: hidden !important;")},250)})};window.addEventListener("SpaRendered",()=>setTimeout(u,2500)),window.addEventListener("SpaRendered",u)}L(I);})();
|
|
32
32
|
/*!
|
|
33
33
|
* @license MPL-2.0
|
|
34
34
|
* This Source Code Form is subject to the terms of the Mozilla Public
|
package/dist/interface.js
CHANGED
|
@@ -374,7 +374,7 @@ function RunNamuLinkUserscript(BrowserWindow, UserscriptName = "NamuLink") {
|
|
|
374
374
|
let Count = [...El.querySelectorAll("*")].filter((Child) => Child.getBoundingClientRect().bottom - Child.getBoundingClientRect().top > 25 && Child.getBoundingClientRect().right - Child.getBoundingClientRect().left > 25 && (Child instanceof SVGPathElement && Child.getAttribute("d") !== null) || Child instanceof HTMLImageElement && Child.src.includes("//i.namu.wiki/i/")).length;
|
|
375
375
|
return 1 <= Count && Count <= 6;
|
|
376
376
|
});
|
|
377
|
-
TargetedAttrsDOMs = TargetedAttrsDOMs.filter((El) => [...El.querySelectorAll("*")].some((Child) => Child instanceof HTMLElement && getComputedStyle(Child, "::after").getPropertyValue("content").includes(":") && Child.getBoundingClientRect().right - Child.getBoundingClientRect().left >
|
|
377
|
+
TargetedAttrsDOMs = TargetedAttrsDOMs.filter((El) => [...El.querySelectorAll("*")].some((Child) => Child instanceof HTMLElement && getComputedStyle(Child, "::after").getPropertyValue("content").includes(":") && Child.getBoundingClientRect().right - Child.getBoundingClientRect().left > 20) === false);
|
|
378
378
|
console.debug(`[${UserscriptName}]`, TargetedAttrsDOMs);
|
|
379
379
|
TargetedAttrsDOMs.forEach((El) => {
|
|
380
380
|
setInterval(() => {
|
package/dist/interface.js.map
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../sources/src/spa.ts", "../sources/src/sort.ts", "../sources/src/index.ts"],
|
|
4
|
-
"sourcesContent": ["/*!\n * @license MPL-2.0\n * This Source Code Form is subject to the terms of the Mozilla Public\n * License, v. 2.0. If a copy of the MPL was not distributed with this\n * file, You can obtain one at https://mozilla.org/MPL/2.0/.\n *\n * Contributors:\n * - See Git history at https://github.com/FilteringDev/tinyShield for detailed authorship information.\n */\n\ntype SpaNavigateCause =\n | 'init'\n | 'pushState'\n | 'replaceState'\n | 'popstate'\n | 'hashchange'\n\nexport type SpaNavigateDetail = {\n Seq: number\n From: string | null\n To: string\n Cause: SpaNavigateCause\n}\n\nexport type SpaRenderedDetail = {\n Seq: number\n Url: string\n Ok: boolean\n}\n\nexport type IgnoreMutation = (Mutation: MutationRecord) => boolean\n\nexport type SpaBridgeOptions = {\n Root?: () => Node | null\n StableForMs?: number\n SampleWindowMs?: number\n Threshold?: number\n TimeoutMs?: number\n IgnoreMutation?: IgnoreMutation\n WatchHashChange?: boolean\n Events?: {\n Navigate?: 'SpaNavigate'\n Rendered?: 'SpaRendered'\n }\n}\n\ntype WaitStableOptions = {\n Root: Node\n StableForMs: number\n SampleWindowMs: number\n Threshold: number\n TimeoutMs: number\n Ignore?: IgnoreMutation\n}\n\n/**\n * SPA \uB77C\uC6B0\uD305(URL \uBCC0\uACBD)\uC744 \uAC10\uC9C0\uD574 \uCEE4\uC2A4\uD140 \uC774\uBCA4\uD2B8\uB97C \uBC1C\uD589\uD558\uACE0,\n * DOM\uC774 \uCDA9\uBD84\uD788 \uC548\uC815\uD654\uB418\uBA74 'Rendered' \uC774\uBCA4\uD2B8\uAE4C\uC9C0 \uBC1C\uD589\uD558\uB294 \uBE0C\uB9BF\uC9C0\n *\n * Events (PascalCase):\n * - 'SpaNavigate' => CustomEvent<SpaNavigateDetail>\n * - 'SpaRendered' => CustomEvent<SpaRenderedDetail>\n */\nexport function InstallSpaNavigationBridge(Options: SpaBridgeOptions = {}): () => void {\n\n const Opts = NormalizeOptions(Options)\n\n const EventNavigate = Opts.Events.Navigate\n const EventRendered = Opts.Events.Rendered\n\n const FireNavigate = (Detail: SpaNavigateDetail) => {\n window.dispatchEvent(new CustomEvent<SpaNavigateDetail>(EventNavigate, { detail: Detail }))\n }\n\n const FireRendered = (Detail: SpaRenderedDetail) => {\n window.dispatchEvent(new CustomEvent<SpaRenderedDetail>(EventRendered, { detail: Detail }))\n }\n\n let LastUrl = window.location.href\n let NavSeq = 0\n let Disposed = false\n\n const OnUrlMaybeChanged = (Cause: SpaNavigateCause) => {\n if (Disposed) return\n\n const Url = window.location.href\n if (Url === LastUrl) return\n\n const From = LastUrl\n LastUrl = Url\n\n const Seq = ++NavSeq\n FireNavigate({ Seq, From, To: Url, Cause })\n\n void (async () => {\n const Root = Opts.Root()\n if (!Root) {\n if (Seq !== NavSeq || Disposed) return\n FireRendered({ Seq, Url, Ok: true })\n return\n }\n\n const Ok = await WaitForDomMostlyStable({\n Root: Root,\n StableForMs: Opts.StableForMs,\n SampleWindowMs: Opts.SampleWindowMs,\n Threshold: Opts.Threshold,\n TimeoutMs: Opts.TimeoutMs,\n Ignore: Opts.IgnoreMutation,\n })\n\n if (Seq !== NavSeq || Disposed) return\n FireRendered({ Seq, Url, Ok })\n })()\n }\n\n const PatchHistory = (MethodName: 'pushState' | 'replaceState') => {\n const Original = history[MethodName].bind(history)\n\n const Patched = (...Args: Parameters<History['pushState']>): ReturnType<History['pushState']> => {\n const Ret = Original(...Args)\n queueMicrotask(() => OnUrlMaybeChanged(MethodName))\n return Ret\n }\n\n Object.defineProperty(history, MethodName, {\n value: Patched,\n configurable: true,\n writable: true,\n })\n }\n\n PatchHistory('pushState')\n PatchHistory('replaceState')\n\n const OnPopState = () => OnUrlMaybeChanged('popstate')\n window.addEventListener('popstate', OnPopState)\n\n const OnHashChange = () => OnUrlMaybeChanged('hashchange')\n if (Opts.WatchHashChange) window.addEventListener('hashchange', OnHashChange)\n\n queueMicrotask(() => {\n if (Disposed) return\n\n const Seq = ++NavSeq\n FireNavigate({ Seq, From: null, To: window.location.href, Cause: 'init' })\n\n void (async () => {\n const Root = Opts.Root()\n if (!Root) {\n if (Seq !== NavSeq || Disposed) return\n FireRendered({ Seq, Url: window.location.href, Ok: true })\n return\n }\n\n const Ok = await WaitForDomMostlyStable({\n Root: Root,\n StableForMs: Opts.StableForMs,\n SampleWindowMs: Opts.SampleWindowMs,\n Threshold: Opts.Threshold,\n TimeoutMs: Opts.TimeoutMs,\n Ignore: Opts.IgnoreMutation,\n })\n\n if (Seq !== NavSeq || Disposed) return\n FireRendered({ Seq, Url: window.location.href, Ok: Ok })\n })()\n })\n\n return () => {\n Disposed = true\n window.removeEventListener('popstate', OnPopState)\n if (Opts.WatchHashChange) window.removeEventListener('hashchange', OnHashChange)\n }\n}\n\nexport function DefaultIgnoreMutation(Mutation: MutationRecord): boolean {\n if (Mutation.type === 'attributes') {\n const Name = Mutation.attributeName ?? ''\n if (Name === 'class' || Name === 'style') return true\n if (Name.startsWith('aria-') || Name.startsWith('data-')) return true\n }\n return false\n}\n\nfunction NormalizeOptions(Options: SpaBridgeOptions) {\n return {\n Root: Options.Root ?? (() => document.querySelector('#app') ?? document.body),\n StableForMs: Options.StableForMs ?? 900,\n SampleWindowMs: Options.SampleWindowMs ?? 900,\n Threshold: Options.Threshold ?? 3,\n TimeoutMs: Options.TimeoutMs ?? 12000,\n IgnoreMutation: Options.IgnoreMutation ?? DefaultIgnoreMutation,\n WatchHashChange: Options.WatchHashChange ?? true,\n Events: {\n Navigate: Options.Events?.Navigate ?? 'SpaNavigate',\n Rendered: Options.Events?.Rendered ?? 'SpaRendered',\n },\n }\n}\n\nasync function WaitForDomMostlyStable(Opts: WaitStableOptions): Promise<boolean> {\n const Events: Array<{ T: number; Score: number }> = []\n let LastAboveAt = performance.now()\n let Done = false\n\n const Observer = new MutationObserver((List) => {\n const Now = performance.now()\n\n for (const M of List) {\n if (Opts.Ignore?.(M)) continue\n\n let Score = 1\n if (M.type === 'childList') Score = 2\n Events.push({ T: Now, Score })\n }\n\n const Cutoff = Now - Opts.SampleWindowMs\n while (Events.length && Events[0].T < Cutoff) Events.shift()\n\n const WindowScore = Events.reduce((Sum, E) => Sum + E.Score, 0)\n if (WindowScore > Opts.Threshold) LastAboveAt = Now\n })\n\n Observer.observe(Opts.Root, {\n subtree: true,\n childList: true,\n attributes: true,\n characterData: true,\n })\n\n const Start = performance.now()\n\n return await new Promise<boolean>((Resolve) => {\n const Tick = () => {\n if (Done) return\n\n const Now = performance.now()\n\n if (Now - LastAboveAt >= Opts.StableForMs) {\n Done = true\n Observer.disconnect()\n Resolve(true)\n return\n }\n\n if (Now - Start >= Opts.TimeoutMs) {\n Done = true\n Observer.disconnect()\n Resolve(false)\n return\n }\n\n setTimeout(Tick, 100)\n }\n\n setTimeout(Tick, 0)\n })\n}", "export function CreateSortWorkerURL() {\n const WorkerCode = `\nself.onmessage = (e) => {\n const { entries, jobId } = e.data;\n // entries: Array<[string, number]>\n // \uB0B4\uB9BC\uCC28\uC21C \uC815\uB82C\n entries.sort((a, b) => b[1] - a[1]);\n self.postMessage({ jobId, sorted: entries });\n};\n`\n return URL.createObjectURL(new Blob([WorkerCode], { type: 'text/javascript' }))\n}\n\nexport function MakeWorkerPool(Size: number) {\n const Url = CreateSortWorkerURL()\n const Workers = Array.from({ length: Size }, () => new Worker(Url))\n return {\n Workers,\n dispose() {\n Workers.forEach(W => W.terminate())\n URL.revokeObjectURL(Url)\n }\n }\n}\n\nexport function CollectDataVAttributes(Root = document): Record<string, number> {\n const Counts = Object.create(null)\n\n const Walker = Root.createTreeWalker(\n Root.documentElement || Root,\n NodeFilter.SHOW_ELEMENT\n )\n\n let Node = Walker.currentNode\n while (Node) {\n if (Node instanceof Element) {\n for (const Attr of Node.attributes) {\n const Name = Attr.name\n if (Name.startsWith('data-v-')) {\n Counts[Name] = (Counts[Name] || 0) + 1\n }\n }\n }\n Node = Walker.nextNode()\n }\n return Counts\n}\n\nexport function MergeSortedChunks(Chunks: Array<Array<[string, number]>>): Array<[string, number]> {\n // chunks: Array<Array<[string, number]>> \uAC01\uAC01 \uB0B4\uB9BC\uCC28\uC21C\n // \uACB0\uACFC: \uC804\uCCB4 \uB0B4\uB9BC\uCC28\uC21C\n\n // \uAC04\uB2E8\uD55C max-heap (count \uAE30\uC900)\n const Heap = []\n function Push(Item) {\n Heap.push(Item)\n let I = Heap.length - 1\n while (I > 0) {\n const P = (I - 1) >> 1\n if (Heap[P].count >= Heap[I].count) break\n [Heap[P], Heap[I]] = [Heap[I], Heap[P]]\n I = P\n }\n };\n function Pop() {\n const Top = Heap[0]\n const Last = Heap.pop()\n if (Heap.length) {\n Heap[0] = Last\n let I = 0\n while (true) {\n const L = I * 2 + 1\n const R = L + 1\n let M = I\n if (L < Heap.length && Heap[L].count > Heap[M].count) M = L\n if (R < Heap.length && Heap[R].count > Heap[M].count) M = R\n if (M === I) break\n [Heap[I], Heap[M]] = [Heap[M], Heap[I]]\n I = M\n }\n }\n return Top\n }\n\n for (let C = 0; C < Chunks.length; C++) {\n const Arr = Chunks[C]\n if (Arr && Arr.length) {\n const [Attr, Count] = Arr[0]\n Push({ Count, Attr, ChunkIndex: C, IndexInChunk: 0 })\n }\n }\n\n const Out = []\n while (Heap.length) {\n const { Attr, Count, ChunkIndex, IndexInChunk } = Pop()\n Out.push([Attr, Count])\n\n const NextIndex = IndexInChunk + 1\n const Arr = Chunks[ChunkIndex]\n if (NextIndex < Arr.length) {\n const [NAttr, NCount] = Arr[NextIndex]\n Push({ Count: NCount, Attr: NAttr, ChunkIndex, IndexInChunk: NextIndex })\n }\n }\n\n return Out\n}\n\nexport async function RankCountsWithWorkersParallel(Counts: Record<string, number>) {\n const Entries = Object.entries(Counts) // [attr, count][]\n\n // \uB17C\uB9AC \uCF54\uC5B4 \uC218 \uAE30\uBC18 \uC6CC\uCEE4 \uAC1C\uC218 \uACB0\uC815\n // - \uB108\uBB34 \uB9CE\uC774 \uB9CC\uB4E4\uBA74 \uC624\uD788\uB824 \uC5ED\uD6A8\uACFC\uB77C \uC0C1\uD55C\uC744 \uB460\n const Hc = Math.max(1, navigator.hardwareConcurrency || 1)\n const WorkerCount = Math.min(8, Math.max(1, Hc - 1))\n\n // entries\uAC00 \uC801\uC73C\uBA74 \uBCD1\uB82C\uD654 \uC774\uB4DD\uC774 \uAC70\uC758 \uC5C6\uC74C \u2192 1\uAC1C\uB85C\n const ShouldParallel = Entries.length >= 5000 && WorkerCount > 1\n const ActualWorkers = ShouldParallel ? WorkerCount : 1\n const Pool = MakeWorkerPool(ActualWorkers)\n\n try {\n // chunks \uBD84\uD560\n const Chunks = Array.from({ length: ActualWorkers }, () => [])\n for (let I = 0; I < Entries.length; I++) {\n Chunks[I % ActualWorkers].push(Entries[I])\n }\n\n // \uAC01 \uC6CC\uCEE4\uC5D0 \uC815\uB82C \uC694\uCCAD\n const SortedChunks = await Promise.all(\n Chunks.map((ChunkEntries, Idx) => {\n return new Promise<Array<[string, number]>>((Resolve, Reject) => {\n const Worker = Pool.Workers[Idx]\n const JobId = Idx + ':' + Date.now()\n\n const OnMsg = (E) => {\n if (E.data?.jobId !== JobId) return\n Worker.removeEventListener('message', OnMsg)\n Worker.removeEventListener('error', OnErr)\n Resolve(E.data.sorted)\n }\n const OnErr = (Err) => {\n Worker.removeEventListener('message', OnMsg)\n Worker.removeEventListener('error', OnErr)\n Reject(Err)\n }\n\n Worker.addEventListener('message', OnMsg)\n Worker.addEventListener('error', OnErr)\n Worker.postMessage({ entries: ChunkEntries, jobId: JobId })\n })\n })\n )\n // \uBCD1\uD569\uD574\uC11C \uC804\uCCB4 \uC21C\uC704 \uC0DD\uC131\n const Merged = (SortedChunks.length === 1)\n ? SortedChunks[0]\n : MergeSortedChunks(SortedChunks)\n\n return { Result: Merged, TotalKeys: Merged.length, WorkerCount: ActualWorkers, HardwareConcurrency: Hc }\n } finally {\n Pool.dispose()\n }\n}", "/*!\n * @license MPL-2.0\n * This Source Code Form is subject to the terms of the Mozilla Public\n * License, v. 2.0. If a copy of the MPL was not distributed with this\n * file, You can obtain one at https://mozilla.org/MPL/2.0/.\n *\n * Contributors:\n * - See Git history at https://github.com/FilteringDev/tinyShield for detailed authorship information.\n */\n\ntype unsafeWindow = typeof window\n// eslint-disable-next-line @typescript-eslint/naming-convention\ndeclare const unsafeWindow: unsafeWindow\nimport * as SPA from './spa.js'\nimport * as Sort from './sort.js'\n\nconst Win = typeof unsafeWindow !== 'undefined' ? unsafeWindow : window\n\nexport function RunNamuLinkUserscript(BrowserWindow: typeof window, UserscriptName: string = 'NamuLink'): void {\n const ProtectedFunctionPrototypeToString = BrowserWindow.Function.prototype.toString\n\n let PowerLinkGenerationPositiveRegExps: RegExp[][] = [[\n /for *\\( *; *; *\\) *switch *\\( *_[a-z0-9]+\\[_[a-z0-9]+\\([a-z0-9]+\\)\\] *=_[a-z0-9]+/,\n /_[a-z0-9]+\\[('|\")[A-Z]+('|\")\\]\\)\\(\\[ *\\]\\)/,\n /0x[a-z0-9]+ *\\) *; *case/\n ], [\n /; *return *this\\[_0x[a-z0-9]+\\( *0x[0-9a-z]+ *\\)/,\n /; *if *\\( *_0x[a-z0-9]+ *&& *\\( *_0x[a-z0-9]+ *= *_0x[a-z0-9]+/,\n /\\) *, *void *\\( *this *\\[ *_0x[a-z0-9]+\\( *0x[0-9a-z]+ *\\) *\\] *= *_0x[a-z0-9]+ *\\[/\n ]]\n\n BrowserWindow.Function.prototype.bind = new Proxy(BrowserWindow.Function.prototype.bind, {\n // eslint-disable-next-line @typescript-eslint/no-unsafe-function-type\n apply(Target: typeof Function.prototype.bind, ThisArg: Function, Args: Parameters<typeof Function.prototype.bind>) {\n let StringifiedFunc = Reflect.apply(ProtectedFunctionPrototypeToString, ThisArg, Args) as string\n if (PowerLinkGenerationPositiveRegExps.filter(PowerLinkGenerationPositiveRegExp => PowerLinkGenerationPositiveRegExp.filter(Index => Index.test(StringifiedFunc)).length >= 3).length === 1) {\n console.debug(`[${UserscriptName}]: Function.prototype.bind:`, ThisArg)\n return Reflect.apply(Target, () => {}, [])\n }\n return Reflect.apply(Target, ThisArg, Args)\n }\n })\n\n let PowerLinkGenerationSkeletionPositiveRegExps: RegExp[][] = [[\n /\\( *\\) *=> *{ *var *_0x[0-9a-z]+ *= *a0_0x[0-9a-f]+ *; *this\\[ *_0x[a-z0-9]+\\( *0x[0-9a-f]+ *\\) *\\]\\(\\); *}/,\n /\\( *\\) *=> *{ *var *_0x[0-9a-z]+ *= *a0_0x[0-9a-f]+ *; *this\\[ *_0x[a-z0-9]+\\( *0x[0-9a-f]+ *\\) *\\]\\(\\); *}/\n ], [\n /\\( *\\) *=> *{ *var _0x[a-z0-9]+ *= *_0x[a-z0-9]+ *; *if *\\( *this\\[ *_0x[a-z0-9]+ *\\( *0x[0-9a-f]+ *\\) *\\] *\\) *return *clearTimeout/,\n /\\( *0x[0-9a-f]+ *\\) *\\] *\\) *, *void *\\( *this\\[ *_0x[a-z0-9]+\\( *0x[0-9a-f]+ *\\) *\\] *= *void *\\([x0-9a-f*+-]+ *\\) *\\) *; *this\\[_0x[a-z0-9]+\\( *0x[0-9a-f]+ *\\) *\\] *\\(\\) *;/\n ]]\n\n BrowserWindow.setTimeout = new Proxy(BrowserWindow.setTimeout, {\n apply(Target: typeof setTimeout, ThisArg: undefined, Args: Parameters<typeof setTimeout>) {\n let StringifiedFunc = Reflect.apply(ProtectedFunctionPrototypeToString, Args[0], Args) as string\n if (PowerLinkGenerationSkeletionPositiveRegExps.filter(PowerLinkGenerationSkeletionPositiveRegExp => PowerLinkGenerationSkeletionPositiveRegExp.filter(Index => Index.test(StringifiedFunc)).length >= 1).length === 1) {\n console.debug(`[${UserscriptName}]: setTimeout:`, Args[0])\n return\n }\n\n return Reflect.apply(Target, ThisArg, Args)\n }\n })\n\n if (document.readyState === 'loading') {\n window.addEventListener('DOMContentLoaded', () => {\n SPA.InstallSpaNavigationBridge({\n Root: () => document.getElementById('#app'),\n StableForMs: 900,\n SampleWindowMs: 900,\n Threshold: 3,\n TimeoutMs: 12000,\n IgnoreMutation: SPA.DefaultIgnoreMutation,\n WatchHashChange: true\n })\n })\n } else {\n // \uC774\uBBF8 DOMContentLoaded \uC774\uD6C4\n window.addEventListener('DOMContentLoaded', () => {\n SPA.InstallSpaNavigationBridge({\n Root: () => document.getElementById('#app'),\n StableForMs: 900,\n SampleWindowMs: 900,\n Threshold: 3,\n TimeoutMs: 12000,\n IgnoreMutation: SPA.DefaultIgnoreMutation,\n WatchHashChange: true\n })\n })\n }\n\n const Handler = async () => {\n let HTMLEle = Sort.CollectDataVAttributes(document)\n const { Result, TotalKeys, WorkerCount, HardwareConcurrency } = await Sort.RankCountsWithWorkersParallel(HTMLEle)\n let TargetedAttrsDOMs: HTMLElement[] = []\n Result.filter(([, Count]) => Count <= 30).forEach(([Attr, Count]) => {\n TargetedAttrsDOMs.push(...[...document.querySelectorAll(`[${Attr}]`)].filter((El) => El instanceof HTMLElement))\n })\n TargetedAttrsDOMs = TargetedAttrsDOMs.filter(El => getComputedStyle(El).getPropertyValue('display') === 'flex')\n TargetedAttrsDOMs = TargetedAttrsDOMs.filter(El => [...El.querySelectorAll('*')].some(Child => Child instanceof HTMLElement && typeof Child.click === 'function'))\n TargetedAttrsDOMs = TargetedAttrsDOMs.filter(El => [...El.querySelectorAll('*')].filter(Child => Child instanceof HTMLElement && Child.getBoundingClientRect().bottom - Child.getBoundingClientRect().top > 100 && Child.getBoundingClientRect().right - Child.getBoundingClientRect().left > 100).length <= 50)\n TargetedAttrsDOMs = TargetedAttrsDOMs.filter(El => {\n let Count = [...El.querySelectorAll('*')].filter(Child => (Child.getBoundingClientRect().bottom - Child.getBoundingClientRect().top > 25 && Child.getBoundingClientRect().right - Child.getBoundingClientRect().left > 25 && (Child instanceof SVGPathElement && Child.getAttribute('d') !== null) || (Child instanceof HTMLImageElement && Child.src.includes('//i.namu.wiki/i/')))).length\n return 1 <= Count && Count <= 6\n })\n TargetedAttrsDOMs = TargetedAttrsDOMs.filter(El => [...El.querySelectorAll('*')].some(Child => Child instanceof HTMLElement && getComputedStyle(Child, '::after').getPropertyValue('content').includes(':') && Child.getBoundingClientRect().right - Child.getBoundingClientRect().left > 100) === false)\n console.debug(`[${UserscriptName}]`, TargetedAttrsDOMs)\n TargetedAttrsDOMs.forEach(El => {\n setInterval(() => {\n El.setAttribute('style', 'display: none !important; visibility: hidden !important;')\n }, 250)\n })\n }\n\n window.addEventListener('SpaRendered', () => setTimeout(Handler, 2500))\n window.addEventListener('SpaRendered', Handler)\n}\n\nRunNamuLinkUserscript(Win)"],
|
|
5
|
-
"mappings": "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
|
|
4
|
+
"sourcesContent": ["/*!\n * @license MPL-2.0\n * This Source Code Form is subject to the terms of the Mozilla Public\n * License, v. 2.0. If a copy of the MPL was not distributed with this\n * file, You can obtain one at https://mozilla.org/MPL/2.0/.\n *\n * Contributors:\n * - See Git history at https://github.com/FilteringDev/tinyShield for detailed authorship information.\n */\n\ntype SpaNavigateCause =\n | 'init'\n | 'pushState'\n | 'replaceState'\n | 'popstate'\n | 'hashchange'\n\nexport type SpaNavigateDetail = {\n Seq: number\n From: string | null\n To: string\n Cause: SpaNavigateCause\n}\n\nexport type SpaRenderedDetail = {\n Seq: number\n Url: string\n Ok: boolean\n}\n\nexport type IgnoreMutation = (Mutation: MutationRecord) => boolean\n\nexport type SpaBridgeOptions = {\n Root?: () => Node | null\n StableForMs?: number\n SampleWindowMs?: number\n Threshold?: number\n TimeoutMs?: number\n IgnoreMutation?: IgnoreMutation\n WatchHashChange?: boolean\n Events?: {\n Navigate?: 'SpaNavigate'\n Rendered?: 'SpaRendered'\n }\n}\n\ntype WaitStableOptions = {\n Root: Node\n StableForMs: number\n SampleWindowMs: number\n Threshold: number\n TimeoutMs: number\n Ignore?: IgnoreMutation\n}\n\n/**\n * SPA \uB77C\uC6B0\uD305(URL \uBCC0\uACBD)\uC744 \uAC10\uC9C0\uD574 \uCEE4\uC2A4\uD140 \uC774\uBCA4\uD2B8\uB97C \uBC1C\uD589\uD558\uACE0,\n * DOM\uC774 \uCDA9\uBD84\uD788 \uC548\uC815\uD654\uB418\uBA74 'Rendered' \uC774\uBCA4\uD2B8\uAE4C\uC9C0 \uBC1C\uD589\uD558\uB294 \uBE0C\uB9BF\uC9C0\n *\n * Events (PascalCase):\n * - 'SpaNavigate' => CustomEvent<SpaNavigateDetail>\n * - 'SpaRendered' => CustomEvent<SpaRenderedDetail>\n */\nexport function InstallSpaNavigationBridge(Options: SpaBridgeOptions = {}): () => void {\n\n const Opts = NormalizeOptions(Options)\n\n const EventNavigate = Opts.Events.Navigate\n const EventRendered = Opts.Events.Rendered\n\n const FireNavigate = (Detail: SpaNavigateDetail) => {\n window.dispatchEvent(new CustomEvent<SpaNavigateDetail>(EventNavigate, { detail: Detail }))\n }\n\n const FireRendered = (Detail: SpaRenderedDetail) => {\n window.dispatchEvent(new CustomEvent<SpaRenderedDetail>(EventRendered, { detail: Detail }))\n }\n\n let LastUrl = window.location.href\n let NavSeq = 0\n let Disposed = false\n\n const OnUrlMaybeChanged = (Cause: SpaNavigateCause) => {\n if (Disposed) return\n\n const Url = window.location.href\n if (Url === LastUrl) return\n\n const From = LastUrl\n LastUrl = Url\n\n const Seq = ++NavSeq\n FireNavigate({ Seq, From, To: Url, Cause })\n\n void (async () => {\n const Root = Opts.Root()\n if (!Root) {\n if (Seq !== NavSeq || Disposed) return\n FireRendered({ Seq, Url, Ok: true })\n return\n }\n\n const Ok = await WaitForDomMostlyStable({\n Root: Root,\n StableForMs: Opts.StableForMs,\n SampleWindowMs: Opts.SampleWindowMs,\n Threshold: Opts.Threshold,\n TimeoutMs: Opts.TimeoutMs,\n Ignore: Opts.IgnoreMutation,\n })\n\n if (Seq !== NavSeq || Disposed) return\n FireRendered({ Seq, Url, Ok })\n })()\n }\n\n const PatchHistory = (MethodName: 'pushState' | 'replaceState') => {\n const Original = history[MethodName].bind(history)\n\n const Patched = (...Args: Parameters<History['pushState']>): ReturnType<History['pushState']> => {\n const Ret = Original(...Args)\n queueMicrotask(() => OnUrlMaybeChanged(MethodName))\n return Ret\n }\n\n Object.defineProperty(history, MethodName, {\n value: Patched,\n configurable: true,\n writable: true,\n })\n }\n\n PatchHistory('pushState')\n PatchHistory('replaceState')\n\n const OnPopState = () => OnUrlMaybeChanged('popstate')\n window.addEventListener('popstate', OnPopState)\n\n const OnHashChange = () => OnUrlMaybeChanged('hashchange')\n if (Opts.WatchHashChange) window.addEventListener('hashchange', OnHashChange)\n\n queueMicrotask(() => {\n if (Disposed) return\n\n const Seq = ++NavSeq\n FireNavigate({ Seq, From: null, To: window.location.href, Cause: 'init' })\n\n void (async () => {\n const Root = Opts.Root()\n if (!Root) {\n if (Seq !== NavSeq || Disposed) return\n FireRendered({ Seq, Url: window.location.href, Ok: true })\n return\n }\n\n const Ok = await WaitForDomMostlyStable({\n Root: Root,\n StableForMs: Opts.StableForMs,\n SampleWindowMs: Opts.SampleWindowMs,\n Threshold: Opts.Threshold,\n TimeoutMs: Opts.TimeoutMs,\n Ignore: Opts.IgnoreMutation,\n })\n\n if (Seq !== NavSeq || Disposed) return\n FireRendered({ Seq, Url: window.location.href, Ok: Ok })\n })()\n })\n\n return () => {\n Disposed = true\n window.removeEventListener('popstate', OnPopState)\n if (Opts.WatchHashChange) window.removeEventListener('hashchange', OnHashChange)\n }\n}\n\nexport function DefaultIgnoreMutation(Mutation: MutationRecord): boolean {\n if (Mutation.type === 'attributes') {\n const Name = Mutation.attributeName ?? ''\n if (Name === 'class' || Name === 'style') return true\n if (Name.startsWith('aria-') || Name.startsWith('data-')) return true\n }\n return false\n}\n\nfunction NormalizeOptions(Options: SpaBridgeOptions) {\n return {\n Root: Options.Root ?? (() => document.querySelector('#app') ?? document.body),\n StableForMs: Options.StableForMs ?? 900,\n SampleWindowMs: Options.SampleWindowMs ?? 900,\n Threshold: Options.Threshold ?? 3,\n TimeoutMs: Options.TimeoutMs ?? 12000,\n IgnoreMutation: Options.IgnoreMutation ?? DefaultIgnoreMutation,\n WatchHashChange: Options.WatchHashChange ?? true,\n Events: {\n Navigate: Options.Events?.Navigate ?? 'SpaNavigate',\n Rendered: Options.Events?.Rendered ?? 'SpaRendered',\n },\n }\n}\n\nasync function WaitForDomMostlyStable(Opts: WaitStableOptions): Promise<boolean> {\n const Events: Array<{ T: number; Score: number }> = []\n let LastAboveAt = performance.now()\n let Done = false\n\n const Observer = new MutationObserver((List) => {\n const Now = performance.now()\n\n for (const M of List) {\n if (Opts.Ignore?.(M)) continue\n\n let Score = 1\n if (M.type === 'childList') Score = 2\n Events.push({ T: Now, Score })\n }\n\n const Cutoff = Now - Opts.SampleWindowMs\n while (Events.length && Events[0].T < Cutoff) Events.shift()\n\n const WindowScore = Events.reduce((Sum, E) => Sum + E.Score, 0)\n if (WindowScore > Opts.Threshold) LastAboveAt = Now\n })\n\n Observer.observe(Opts.Root, {\n subtree: true,\n childList: true,\n attributes: true,\n characterData: true,\n })\n\n const Start = performance.now()\n\n return await new Promise<boolean>((Resolve) => {\n const Tick = () => {\n if (Done) return\n\n const Now = performance.now()\n\n if (Now - LastAboveAt >= Opts.StableForMs) {\n Done = true\n Observer.disconnect()\n Resolve(true)\n return\n }\n\n if (Now - Start >= Opts.TimeoutMs) {\n Done = true\n Observer.disconnect()\n Resolve(false)\n return\n }\n\n setTimeout(Tick, 100)\n }\n\n setTimeout(Tick, 0)\n })\n}", "export function CreateSortWorkerURL() {\n const WorkerCode = `\nself.onmessage = (e) => {\n const { entries, jobId } = e.data;\n // entries: Array<[string, number]>\n // \uB0B4\uB9BC\uCC28\uC21C \uC815\uB82C\n entries.sort((a, b) => b[1] - a[1]);\n self.postMessage({ jobId, sorted: entries });\n};\n`\n return URL.createObjectURL(new Blob([WorkerCode], { type: 'text/javascript' }))\n}\n\nexport function MakeWorkerPool(Size: number) {\n const Url = CreateSortWorkerURL()\n const Workers = Array.from({ length: Size }, () => new Worker(Url))\n return {\n Workers,\n dispose() {\n Workers.forEach(W => W.terminate())\n URL.revokeObjectURL(Url)\n }\n }\n}\n\nexport function CollectDataVAttributes(Root = document): Record<string, number> {\n const Counts = Object.create(null)\n\n const Walker = Root.createTreeWalker(\n Root.documentElement || Root,\n NodeFilter.SHOW_ELEMENT\n )\n\n let Node = Walker.currentNode\n while (Node) {\n if (Node instanceof Element) {\n for (const Attr of Node.attributes) {\n const Name = Attr.name\n if (Name.startsWith('data-v-')) {\n Counts[Name] = (Counts[Name] || 0) + 1\n }\n }\n }\n Node = Walker.nextNode()\n }\n return Counts\n}\n\nexport function MergeSortedChunks(Chunks: Array<Array<[string, number]>>): Array<[string, number]> {\n // chunks: Array<Array<[string, number]>> \uAC01\uAC01 \uB0B4\uB9BC\uCC28\uC21C\n // \uACB0\uACFC: \uC804\uCCB4 \uB0B4\uB9BC\uCC28\uC21C\n\n // \uAC04\uB2E8\uD55C max-heap (count \uAE30\uC900)\n const Heap = []\n function Push(Item) {\n Heap.push(Item)\n let I = Heap.length - 1\n while (I > 0) {\n const P = (I - 1) >> 1\n if (Heap[P].count >= Heap[I].count) break\n [Heap[P], Heap[I]] = [Heap[I], Heap[P]]\n I = P\n }\n };\n function Pop() {\n const Top = Heap[0]\n const Last = Heap.pop()\n if (Heap.length) {\n Heap[0] = Last\n let I = 0\n while (true) {\n const L = I * 2 + 1\n const R = L + 1\n let M = I\n if (L < Heap.length && Heap[L].count > Heap[M].count) M = L\n if (R < Heap.length && Heap[R].count > Heap[M].count) M = R\n if (M === I) break\n [Heap[I], Heap[M]] = [Heap[M], Heap[I]]\n I = M\n }\n }\n return Top\n }\n\n for (let C = 0; C < Chunks.length; C++) {\n const Arr = Chunks[C]\n if (Arr && Arr.length) {\n const [Attr, Count] = Arr[0]\n Push({ Count, Attr, ChunkIndex: C, IndexInChunk: 0 })\n }\n }\n\n const Out = []\n while (Heap.length) {\n const { Attr, Count, ChunkIndex, IndexInChunk } = Pop()\n Out.push([Attr, Count])\n\n const NextIndex = IndexInChunk + 1\n const Arr = Chunks[ChunkIndex]\n if (NextIndex < Arr.length) {\n const [NAttr, NCount] = Arr[NextIndex]\n Push({ Count: NCount, Attr: NAttr, ChunkIndex, IndexInChunk: NextIndex })\n }\n }\n\n return Out\n}\n\nexport async function RankCountsWithWorkersParallel(Counts: Record<string, number>) {\n const Entries = Object.entries(Counts) // [attr, count][]\n\n // \uB17C\uB9AC \uCF54\uC5B4 \uC218 \uAE30\uBC18 \uC6CC\uCEE4 \uAC1C\uC218 \uACB0\uC815\n // - \uB108\uBB34 \uB9CE\uC774 \uB9CC\uB4E4\uBA74 \uC624\uD788\uB824 \uC5ED\uD6A8\uACFC\uB77C \uC0C1\uD55C\uC744 \uB460\n const Hc = Math.max(1, navigator.hardwareConcurrency || 1)\n const WorkerCount = Math.min(8, Math.max(1, Hc - 1))\n\n // entries\uAC00 \uC801\uC73C\uBA74 \uBCD1\uB82C\uD654 \uC774\uB4DD\uC774 \uAC70\uC758 \uC5C6\uC74C \u2192 1\uAC1C\uB85C\n const ShouldParallel = Entries.length >= 5000 && WorkerCount > 1\n const ActualWorkers = ShouldParallel ? WorkerCount : 1\n const Pool = MakeWorkerPool(ActualWorkers)\n\n try {\n // chunks \uBD84\uD560\n const Chunks = Array.from({ length: ActualWorkers }, () => [])\n for (let I = 0; I < Entries.length; I++) {\n Chunks[I % ActualWorkers].push(Entries[I])\n }\n\n // \uAC01 \uC6CC\uCEE4\uC5D0 \uC815\uB82C \uC694\uCCAD\n const SortedChunks = await Promise.all(\n Chunks.map((ChunkEntries, Idx) => {\n return new Promise<Array<[string, number]>>((Resolve, Reject) => {\n const Worker = Pool.Workers[Idx]\n const JobId = Idx + ':' + Date.now()\n\n const OnMsg = (E) => {\n if (E.data?.jobId !== JobId) return\n Worker.removeEventListener('message', OnMsg)\n Worker.removeEventListener('error', OnErr)\n Resolve(E.data.sorted)\n }\n const OnErr = (Err) => {\n Worker.removeEventListener('message', OnMsg)\n Worker.removeEventListener('error', OnErr)\n Reject(Err)\n }\n\n Worker.addEventListener('message', OnMsg)\n Worker.addEventListener('error', OnErr)\n Worker.postMessage({ entries: ChunkEntries, jobId: JobId })\n })\n })\n )\n // \uBCD1\uD569\uD574\uC11C \uC804\uCCB4 \uC21C\uC704 \uC0DD\uC131\n const Merged = (SortedChunks.length === 1)\n ? SortedChunks[0]\n : MergeSortedChunks(SortedChunks)\n\n return { Result: Merged, TotalKeys: Merged.length, WorkerCount: ActualWorkers, HardwareConcurrency: Hc }\n } finally {\n Pool.dispose()\n }\n}", "/*!\n * @license MPL-2.0\n * This Source Code Form is subject to the terms of the Mozilla Public\n * License, v. 2.0. If a copy of the MPL was not distributed with this\n * file, You can obtain one at https://mozilla.org/MPL/2.0/.\n *\n * Contributors:\n * - See Git history at https://github.com/FilteringDev/tinyShield for detailed authorship information.\n */\n\ntype unsafeWindow = typeof window\n// eslint-disable-next-line @typescript-eslint/naming-convention\ndeclare const unsafeWindow: unsafeWindow\nimport * as SPA from './spa.js'\nimport * as Sort from './sort.js'\n\nconst Win = typeof unsafeWindow !== 'undefined' ? unsafeWindow : window\n\nexport function RunNamuLinkUserscript(BrowserWindow: typeof window, UserscriptName: string = 'NamuLink'): void {\n const ProtectedFunctionPrototypeToString = BrowserWindow.Function.prototype.toString\n\n let PowerLinkGenerationPositiveRegExps: RegExp[][] = [[\n /for *\\( *; *; *\\) *switch *\\( *_[a-z0-9]+\\[_[a-z0-9]+\\([a-z0-9]+\\)\\] *=_[a-z0-9]+/,\n /_[a-z0-9]+\\[('|\")[A-Z]+('|\")\\]\\)\\(\\[ *\\]\\)/,\n /0x[a-z0-9]+ *\\) *; *case/\n ], [\n /; *return *this\\[_0x[a-z0-9]+\\( *0x[0-9a-z]+ *\\)/,\n /; *if *\\( *_0x[a-z0-9]+ *&& *\\( *_0x[a-z0-9]+ *= *_0x[a-z0-9]+/,\n /\\) *, *void *\\( *this *\\[ *_0x[a-z0-9]+\\( *0x[0-9a-z]+ *\\) *\\] *= *_0x[a-z0-9]+ *\\[/\n ]]\n\n BrowserWindow.Function.prototype.bind = new Proxy(BrowserWindow.Function.prototype.bind, {\n // eslint-disable-next-line @typescript-eslint/no-unsafe-function-type\n apply(Target: typeof Function.prototype.bind, ThisArg: Function, Args: Parameters<typeof Function.prototype.bind>) {\n let StringifiedFunc = Reflect.apply(ProtectedFunctionPrototypeToString, ThisArg, Args) as string\n if (PowerLinkGenerationPositiveRegExps.filter(PowerLinkGenerationPositiveRegExp => PowerLinkGenerationPositiveRegExp.filter(Index => Index.test(StringifiedFunc)).length >= 3).length === 1) {\n console.debug(`[${UserscriptName}]: Function.prototype.bind:`, ThisArg)\n return Reflect.apply(Target, () => {}, [])\n }\n return Reflect.apply(Target, ThisArg, Args)\n }\n })\n\n let PowerLinkGenerationSkeletionPositiveRegExps: RegExp[][] = [[\n /\\( *\\) *=> *{ *var *_0x[0-9a-z]+ *= *a0_0x[0-9a-f]+ *; *this\\[ *_0x[a-z0-9]+\\( *0x[0-9a-f]+ *\\) *\\]\\(\\); *}/,\n /\\( *\\) *=> *{ *var *_0x[0-9a-z]+ *= *a0_0x[0-9a-f]+ *; *this\\[ *_0x[a-z0-9]+\\( *0x[0-9a-f]+ *\\) *\\]\\(\\); *}/\n ], [\n /\\( *\\) *=> *{ *var _0x[a-z0-9]+ *= *_0x[a-z0-9]+ *; *if *\\( *this\\[ *_0x[a-z0-9]+ *\\( *0x[0-9a-f]+ *\\) *\\] *\\) *return *clearTimeout/,\n /\\( *0x[0-9a-f]+ *\\) *\\] *\\) *, *void *\\( *this\\[ *_0x[a-z0-9]+\\( *0x[0-9a-f]+ *\\) *\\] *= *void *\\([x0-9a-f*+-]+ *\\) *\\) *; *this\\[_0x[a-z0-9]+\\( *0x[0-9a-f]+ *\\) *\\] *\\(\\) *;/\n ]]\n\n BrowserWindow.setTimeout = new Proxy(BrowserWindow.setTimeout, {\n apply(Target: typeof setTimeout, ThisArg: undefined, Args: Parameters<typeof setTimeout>) {\n let StringifiedFunc = Reflect.apply(ProtectedFunctionPrototypeToString, Args[0], Args) as string\n if (PowerLinkGenerationSkeletionPositiveRegExps.filter(PowerLinkGenerationSkeletionPositiveRegExp => PowerLinkGenerationSkeletionPositiveRegExp.filter(Index => Index.test(StringifiedFunc)).length >= 1).length === 1) {\n console.debug(`[${UserscriptName}]: setTimeout:`, Args[0])\n return\n }\n\n return Reflect.apply(Target, ThisArg, Args)\n }\n })\n\n if (document.readyState === 'loading') {\n window.addEventListener('DOMContentLoaded', () => {\n SPA.InstallSpaNavigationBridge({\n Root: () => document.getElementById('#app'),\n StableForMs: 900,\n SampleWindowMs: 900,\n Threshold: 3,\n TimeoutMs: 12000,\n IgnoreMutation: SPA.DefaultIgnoreMutation,\n WatchHashChange: true\n })\n })\n } else {\n // \uC774\uBBF8 DOMContentLoaded \uC774\uD6C4\n window.addEventListener('DOMContentLoaded', () => {\n SPA.InstallSpaNavigationBridge({\n Root: () => document.getElementById('#app'),\n StableForMs: 900,\n SampleWindowMs: 900,\n Threshold: 3,\n TimeoutMs: 12000,\n IgnoreMutation: SPA.DefaultIgnoreMutation,\n WatchHashChange: true\n })\n })\n }\n\n const Handler = async () => {\n let HTMLEle = Sort.CollectDataVAttributes(document)\n const { Result, TotalKeys, WorkerCount, HardwareConcurrency } = await Sort.RankCountsWithWorkersParallel(HTMLEle)\n let TargetedAttrsDOMs: HTMLElement[] = []\n Result.filter(([, Count]) => Count <= 30).forEach(([Attr, Count]) => {\n TargetedAttrsDOMs.push(...[...document.querySelectorAll(`[${Attr}]`)].filter((El) => El instanceof HTMLElement))\n })\n TargetedAttrsDOMs = TargetedAttrsDOMs.filter(El => getComputedStyle(El).getPropertyValue('display') === 'flex')\n TargetedAttrsDOMs = TargetedAttrsDOMs.filter(El => [...El.querySelectorAll('*')].some(Child => Child instanceof HTMLElement && typeof Child.click === 'function'))\n TargetedAttrsDOMs = TargetedAttrsDOMs.filter(El => [...El.querySelectorAll('*')].filter(Child => Child instanceof HTMLElement && Child.getBoundingClientRect().bottom - Child.getBoundingClientRect().top > 100 && Child.getBoundingClientRect().right - Child.getBoundingClientRect().left > 100).length <= 50)\n TargetedAttrsDOMs = TargetedAttrsDOMs.filter(El => {\n let Count = [...El.querySelectorAll('*')].filter(Child => (Child.getBoundingClientRect().bottom - Child.getBoundingClientRect().top > 25 && Child.getBoundingClientRect().right - Child.getBoundingClientRect().left > 25 && (Child instanceof SVGPathElement && Child.getAttribute('d') !== null) || (Child instanceof HTMLImageElement && Child.src.includes('//i.namu.wiki/i/')))).length\n return 1 <= Count && Count <= 6\n })\n TargetedAttrsDOMs = TargetedAttrsDOMs.filter(El => [...El.querySelectorAll('*')].some(Child => Child instanceof HTMLElement && getComputedStyle(Child, '::after').getPropertyValue('content').includes(':') && Child.getBoundingClientRect().right - Child.getBoundingClientRect().left > 20) === false)\n console.debug(`[${UserscriptName}]`, TargetedAttrsDOMs)\n TargetedAttrsDOMs.forEach(El => {\n setInterval(() => {\n El.setAttribute('style', 'display: none !important; visibility: hidden !important;')\n }, 250)\n })\n }\n\n window.addEventListener('SpaRendered', () => setTimeout(Handler, 2500))\n window.addEventListener('SpaRendered', Handler)\n}\n\nRunNamuLinkUserscript(Win)"],
|
|
5
|
+
"mappings": ";AA+DO,SAAS,2BAA2B,UAA4B,CAAC,GAAe;AAErF,QAAM,OAAO,iBAAiB,OAAO;AAErC,QAAM,gBAAgB,KAAK,OAAO;AAClC,QAAM,gBAAgB,KAAK,OAAO;AAElC,QAAM,eAAe,CAAC,WAA8B;AAClD,WAAO,cAAc,IAAI,YAA+B,eAAe,EAAE,QAAQ,OAAO,CAAC,CAAC;AAAA,EAC5F;AAEA,QAAM,eAAe,CAAC,WAA8B;AAClD,WAAO,cAAc,IAAI,YAA+B,eAAe,EAAE,QAAQ,OAAO,CAAC,CAAC;AAAA,EAC5F;AAEA,MAAI,UAAU,OAAO,SAAS;AAC9B,MAAI,SAAS;AACb,MAAI,WAAW;AAEf,QAAM,oBAAoB,CAAC,UAA4B;AACrD,QAAI,SAAU;AAEd,UAAM,MAAM,OAAO,SAAS;AAC5B,QAAI,QAAQ,QAAS;AAErB,UAAM,OAAO;AACb,cAAU;AAEV,UAAM,MAAM,EAAE;AACd,iBAAa,EAAE,KAAK,MAAM,IAAI,KAAK,MAAM,CAAC;AAE1C,UAAM,YAAY;AAChB,YAAM,OAAO,KAAK,KAAK;AACvB,UAAI,CAAC,MAAM;AACT,YAAI,QAAQ,UAAU,SAAU;AAChC,qBAAa,EAAE,KAAK,KAAK,IAAI,KAAK,CAAC;AACnC;AAAA,MACF;AAEA,YAAM,KAAK,MAAM,uBAAuB;AAAA,QACtC;AAAA,QACA,aAAa,KAAK;AAAA,QAClB,gBAAgB,KAAK;AAAA,QACrB,WAAW,KAAK;AAAA,QAChB,WAAW,KAAK;AAAA,QAChB,QAAQ,KAAK;AAAA,MACf,CAAC;AAED,UAAI,QAAQ,UAAU,SAAU;AAChC,mBAAa,EAAE,KAAK,KAAK,GAAG,CAAC;AAAA,IAC/B,GAAG;AAAA,EACL;AAEA,QAAM,eAAe,CAAC,eAA6C;AACjE,UAAM,WAAW,QAAQ,UAAU,EAAE,KAAK,OAAO;AAEjD,UAAM,UAAU,IAAI,SAA6E;AAC/F,YAAM,MAAM,SAAS,GAAG,IAAI;AAC5B,qBAAe,MAAM,kBAAkB,UAAU,CAAC;AAClD,aAAO;AAAA,IACT;AAEA,WAAO,eAAe,SAAS,YAAY;AAAA,MACzC,OAAO;AAAA,MACP,cAAc;AAAA,MACd,UAAU;AAAA,IACZ,CAAC;AAAA,EACH;AAEA,eAAa,WAAW;AACxB,eAAa,cAAc;AAE3B,QAAM,aAAa,MAAM,kBAAkB,UAAU;AACrD,SAAO,iBAAiB,YAAY,UAAU;AAE9C,QAAM,eAAe,MAAM,kBAAkB,YAAY;AACzD,MAAI,KAAK,gBAAiB,QAAO,iBAAiB,cAAc,YAAY;AAE5E,iBAAe,MAAM;AACnB,QAAI,SAAU;AAEd,UAAM,MAAM,EAAE;AACd,iBAAa,EAAE,KAAK,MAAM,MAAM,IAAI,OAAO,SAAS,MAAM,OAAO,OAAO,CAAC;AAEzE,UAAM,YAAY;AAChB,YAAM,OAAO,KAAK,KAAK;AACvB,UAAI,CAAC,MAAM;AACT,YAAI,QAAQ,UAAU,SAAU;AAChC,qBAAa,EAAE,KAAK,KAAK,OAAO,SAAS,MAAM,IAAI,KAAK,CAAC;AACzD;AAAA,MACF;AAEA,YAAM,KAAK,MAAM,uBAAuB;AAAA,QACtC;AAAA,QACA,aAAa,KAAK;AAAA,QAClB,gBAAgB,KAAK;AAAA,QACrB,WAAW,KAAK;AAAA,QAChB,WAAW,KAAK;AAAA,QAChB,QAAQ,KAAK;AAAA,MACf,CAAC;AAED,UAAI,QAAQ,UAAU,SAAU;AAChC,mBAAa,EAAE,KAAK,KAAK,OAAO,SAAS,MAAM,GAAO,CAAC;AAAA,IACzD,GAAG;AAAA,EACL,CAAC;AAED,SAAO,MAAM;AACX,eAAW;AACX,WAAO,oBAAoB,YAAY,UAAU;AACjD,QAAI,KAAK,gBAAiB,QAAO,oBAAoB,cAAc,YAAY;AAAA,EACjF;AACF;AAEO,SAAS,sBAAsB,UAAmC;AACvE,MAAI,SAAS,SAAS,cAAc;AAClC,UAAM,OAAO,SAAS,iBAAiB;AACvC,QAAI,SAAS,WAAW,SAAS,QAAS,QAAO;AACjD,QAAI,KAAK,WAAW,OAAO,KAAK,KAAK,WAAW,OAAO,EAAG,QAAO;AAAA,EACnE;AACA,SAAO;AACT;AAEA,SAAS,iBAAiB,SAA2B;AACnD,SAAO;AAAA,IACL,MAAM,QAAQ,SAAS,MAAM,SAAS,cAAc,MAAM,KAAK,SAAS;AAAA,IACxE,aAAa,QAAQ,eAAe;AAAA,IACpC,gBAAgB,QAAQ,kBAAkB;AAAA,IAC1C,WAAW,QAAQ,aAAa;AAAA,IAChC,WAAW,QAAQ,aAAa;AAAA,IAChC,gBAAgB,QAAQ,kBAAkB;AAAA,IAC1C,iBAAiB,QAAQ,mBAAmB;AAAA,IAC5C,QAAQ;AAAA,MACN,UAAU,QAAQ,QAAQ,YAAY;AAAA,MACtC,UAAU,QAAQ,QAAQ,YAAY;AAAA,IACxC;AAAA,EACF;AACF;AAEA,eAAe,uBAAuB,MAA2C;AAC/E,QAAM,SAA8C,CAAC;AACrD,MAAI,cAAc,YAAY,IAAI;AAClC,MAAI,OAAO;AAEX,QAAM,WAAW,IAAI,iBAAiB,CAAC,SAAS;AAC9C,UAAM,MAAM,YAAY,IAAI;AAE5B,eAAW,KAAK,MAAM;AACpB,UAAI,KAAK,SAAS,CAAC,EAAG;AAEtB,UAAI,QAAQ;AACZ,UAAI,EAAE,SAAS,YAAa,SAAQ;AACpC,aAAO,KAAK,EAAE,GAAG,KAAK,MAAM,CAAC;AAAA,IAC/B;AAEA,UAAM,SAAS,MAAM,KAAK;AAC1B,WAAO,OAAO,UAAU,OAAO,CAAC,EAAE,IAAI,OAAQ,QAAO,MAAM;AAE3D,UAAM,cAAc,OAAO,OAAO,CAAC,KAAK,MAAM,MAAM,EAAE,OAAO,CAAC;AAC9D,QAAI,cAAc,KAAK,UAAW,eAAc;AAAA,EAClD,CAAC;AAED,WAAS,QAAQ,KAAK,MAAM;AAAA,IAC1B,SAAS;AAAA,IACT,WAAW;AAAA,IACX,YAAY;AAAA,IACZ,eAAe;AAAA,EACjB,CAAC;AAED,QAAM,QAAQ,YAAY,IAAI;AAE9B,SAAO,MAAM,IAAI,QAAiB,CAAC,YAAY;AAC7C,UAAM,OAAO,MAAM;AACjB,UAAI,KAAM;AAEV,YAAM,MAAM,YAAY,IAAI;AAE5B,UAAI,MAAM,eAAe,KAAK,aAAa;AACzC,eAAO;AACP,iBAAS,WAAW;AACpB,gBAAQ,IAAI;AACZ;AAAA,MACF;AAEA,UAAI,MAAM,SAAS,KAAK,WAAW;AACjC,eAAO;AACP,iBAAS,WAAW;AACpB,gBAAQ,KAAK;AACb;AAAA,MACF;AAEA,iBAAW,MAAM,GAAG;AAAA,IACtB;AAEA,eAAW,MAAM,CAAC;AAAA,EACpB,CAAC;AACH;;;AClQO,SAAS,sBAAsB;AACpC,QAAM,aAAa;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AASnB,SAAO,IAAI,gBAAgB,IAAI,KAAK,CAAC,UAAU,GAAG,EAAE,MAAM,kBAAkB,CAAC,CAAC;AAChF;AAEO,SAAS,eAAe,MAAc;AAC3C,QAAM,MAAM,oBAAoB;AAChC,QAAM,UAAU,MAAM,KAAK,EAAE,QAAQ,KAAK,GAAG,MAAM,IAAI,OAAO,GAAG,CAAC;AAClE,SAAO;AAAA,IACL;AAAA,IACA,UAAU;AACR,cAAQ,QAAQ,OAAK,EAAE,UAAU,CAAC;AAClC,UAAI,gBAAgB,GAAG;AAAA,IACzB;AAAA,EACF;AACF;AAEO,SAAS,uBAAuB,OAAO,UAAkC;AAC9E,QAAM,SAAS,uBAAO,OAAO,IAAI;AAEjC,QAAM,SAAS,KAAK;AAAA,IAClB,KAAK,mBAAmB;AAAA,IACxB,WAAW;AAAA,EACb;AAEA,MAAI,OAAO,OAAO;AAClB,SAAO,MAAM;AACX,QAAI,gBAAgB,SAAS;AAC3B,iBAAW,QAAQ,KAAK,YAAY;AAClC,cAAM,OAAO,KAAK;AAClB,YAAI,KAAK,WAAW,SAAS,GAAG;AAC9B,iBAAO,IAAI,KAAK,OAAO,IAAI,KAAK,KAAK;AAAA,QACvC;AAAA,MACF;AAAA,IACF;AACA,WAAO,OAAO,SAAS;AAAA,EACzB;AACA,SAAO;AACT;AAEO,SAAS,kBAAkB,QAAiE;AAKjG,QAAM,OAAO,CAAC;AACd,WAAS,KAAK,MAAM;AAClB,SAAK,KAAK,IAAI;AACd,QAAI,IAAI,KAAK,SAAS;AACtB,WAAO,IAAI,GAAG;AACZ,YAAM,IAAK,IAAI,KAAM;AACrB,UAAI,KAAK,CAAC,EAAE,SAAS,KAAK,CAAC,EAAE,MAAO;AACpC,OAAC,KAAK,CAAC,GAAG,KAAK,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,KAAK,CAAC,CAAC;AACtC,UAAI;AAAA,IACN;AAAA,EACF;AAAC;AACD,WAAS,MAAM;AACb,UAAM,MAAM,KAAK,CAAC;AAClB,UAAM,OAAO,KAAK,IAAI;AACtB,QAAI,KAAK,QAAQ;AACf,WAAK,CAAC,IAAI;AACV,UAAI,IAAI;AACR,aAAO,MAAM;AACX,cAAM,IAAI,IAAI,IAAI;AAClB,cAAM,IAAI,IAAI;AACd,YAAI,IAAI;AACR,YAAI,IAAI,KAAK,UAAU,KAAK,CAAC,EAAE,QAAQ,KAAK,CAAC,EAAE,MAAO,KAAI;AAC1D,YAAI,IAAI,KAAK,UAAU,KAAK,CAAC,EAAE,QAAQ,KAAK,CAAC,EAAE,MAAO,KAAI;AAC1D,YAAI,MAAM,EAAG;AACb,SAAC,KAAK,CAAC,GAAG,KAAK,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,KAAK,CAAC,CAAC;AACtC,YAAI;AAAA,MACN;AAAA,IACF;AACA,WAAO;AAAA,EACT;AAEA,WAAS,IAAI,GAAG,IAAI,OAAO,QAAQ,KAAK;AACtC,UAAM,MAAM,OAAO,CAAC;AACpB,QAAI,OAAO,IAAI,QAAQ;AACrB,YAAM,CAAC,MAAM,KAAK,IAAI,IAAI,CAAC;AAC3B,WAAK,EAAE,OAAO,MAAM,YAAY,GAAG,cAAc,EAAE,CAAC;AAAA,IACtD;AAAA,EACF;AAEA,QAAM,MAAM,CAAC;AACb,SAAO,KAAK,QAAQ;AAClB,UAAM,EAAE,MAAM,OAAO,YAAY,aAAa,IAAI,IAAI;AACtD,QAAI,KAAK,CAAC,MAAM,KAAK,CAAC;AAEtB,UAAM,YAAY,eAAe;AACjC,UAAM,MAAM,OAAO,UAAU;AAC7B,QAAI,YAAY,IAAI,QAAQ;AAC1B,YAAM,CAAC,OAAO,MAAM,IAAI,IAAI,SAAS;AACrC,WAAK,EAAE,OAAO,QAAQ,MAAM,OAAO,YAAY,cAAc,UAAU,CAAC;AAAA,IAC1E;AAAA,EACF;AAEA,SAAO;AACT;AAEA,eAAsB,8BAA8B,QAAgC;AAClF,QAAM,UAAU,OAAO,QAAQ,MAAM;AAIrC,QAAM,KAAK,KAAK,IAAI,GAAG,UAAU,uBAAuB,CAAC;AACzD,QAAM,cAAc,KAAK,IAAI,GAAG,KAAK,IAAI,GAAG,KAAK,CAAC,CAAC;AAGnD,QAAM,iBAAiB,QAAQ,UAAU,OAAQ,cAAc;AAC/D,QAAM,gBAAgB,iBAAiB,cAAc;AACrD,QAAM,OAAO,eAAe,aAAa;AAEzC,MAAI;AAEF,UAAM,SAAS,MAAM,KAAK,EAAE,QAAQ,cAAc,GAAG,MAAM,CAAC,CAAC;AAC7D,aAAS,IAAI,GAAG,IAAI,QAAQ,QAAQ,KAAK;AACvC,aAAO,IAAI,aAAa,EAAE,KAAK,QAAQ,CAAC,CAAC;AAAA,IAC3C;AAGA,UAAM,eAAe,MAAM,QAAQ;AAAA,MACjC,OAAO,IAAI,CAAC,cAAc,QAAQ;AAChC,eAAO,IAAI,QAAiC,CAAC,SAAS,WAAW;AAC/D,gBAAMA,UAAS,KAAK,QAAQ,GAAG;AAC/B,gBAAM,QAAQ,MAAM,MAAM,KAAK,IAAI;AAEnC,gBAAM,QAAQ,CAAC,MAAM;AACnB,gBAAI,EAAE,MAAM,UAAU,MAAO;AAC7B,YAAAA,QAAO,oBAAoB,WAAW,KAAK;AAC3C,YAAAA,QAAO,oBAAoB,SAAS,KAAK;AACzC,oBAAQ,EAAE,KAAK,MAAM;AAAA,UACvB;AACA,gBAAM,QAAQ,CAAC,QAAQ;AACrB,YAAAA,QAAO,oBAAoB,WAAW,KAAK;AAC3C,YAAAA,QAAO,oBAAoB,SAAS,KAAK;AACzC,mBAAO,GAAG;AAAA,UACZ;AAEA,UAAAA,QAAO,iBAAiB,WAAW,KAAK;AACxC,UAAAA,QAAO,iBAAiB,SAAS,KAAK;AACtC,UAAAA,QAAO,YAAY,EAAE,SAAS,cAAc,OAAO,MAAM,CAAC;AAAA,QAC5D,CAAC;AAAA,MACH,CAAC;AAAA,IACH;AAEA,UAAM,SAAU,aAAa,WAAW,IACpC,aAAa,CAAC,IACd,kBAAkB,YAAY;AAElC,WAAO,EAAE,QAAQ,QAAQ,WAAW,OAAO,QAAQ,aAAa,eAAe,qBAAqB,GAAG;AAAA,EACzG,UAAE;AACA,SAAK,QAAQ;AAAA,EACf;AACF;;;AClJA,IAAM,MAAM,OAAO,iBAAiB,cAAc,eAAe;AAE1D,SAAS,sBAAsB,eAA8B,iBAAyB,YAAkB;AAC7G,QAAM,qCAAqC,cAAc,SAAS,UAAU;AAE5E,MAAI,qCAAiD,CAAC;AAAA,IACpD;AAAA,IACA;AAAA,IACA;AAAA,EACF,GAAG;AAAA,IACD;AAAA,IACA;AAAA,IACA;AAAA,EACF,CAAC;AAED,gBAAc,SAAS,UAAU,OAAO,IAAI,MAAM,cAAc,SAAS,UAAU,MAAM;AAAA;AAAA,IAErF,MAAM,QAAwC,SAAmB,MAAkD;AACjH,UAAI,kBAAkB,QAAQ,MAAM,oCAAoC,SAAS,IAAI;AACrF,UAAI,mCAAmC,OAAO,uCAAqC,kCAAkC,OAAO,WAAS,MAAM,KAAK,eAAe,CAAC,EAAE,UAAU,CAAC,EAAE,WAAW,GAAG;AAC3L,gBAAQ,MAAM,IAAI,cAAc,+BAA+B,OAAO;AACtE,eAAO,QAAQ,MAAM,QAAQ,MAAM;AAAA,QAAC,GAAG,CAAC,CAAC;AAAA,MAC3C;AACA,aAAO,QAAQ,MAAM,QAAQ,SAAS,IAAI;AAAA,IAC5C;AAAA,EACF,CAAC;AAEH,MAAI,8CAA0D,CAAC;AAAA,IAC7D;AAAA,IACA;AAAA,EACF,GAAG;AAAA,IACD;AAAA,IACA;AAAA,EACF,CAAC;AAED,gBAAc,aAAa,IAAI,MAAM,cAAc,YAAY;AAAA,IAC7D,MAAM,QAA2B,SAAoB,MAAqC;AACxF,UAAI,kBAAkB,QAAQ,MAAM,oCAAoC,KAAK,CAAC,GAAG,IAAI;AACrF,UAAI,4CAA4C,OAAO,gDAA8C,2CAA2C,OAAO,WAAS,MAAM,KAAK,eAAe,CAAC,EAAE,UAAU,CAAC,EAAE,WAAW,GAAG;AACtN,gBAAQ,MAAM,IAAI,cAAc,kBAAkB,KAAK,CAAC,CAAC;AACzD;AAAA,MACF;AAEA,aAAO,QAAQ,MAAM,QAAQ,SAAS,IAAI;AAAA,IAC5C;AAAA,EACF,CAAC;AAED,MAAI,SAAS,eAAe,WAAW;AACrC,WAAO,iBAAiB,oBAAoB,MAAM;AAChD,MAAI,2BAA2B;AAAA,QAC/B,MAAM,MAAM,SAAS,eAAe,MAAM;AAAA,QAC1C,aAAa;AAAA,QACb,gBAAgB;AAAA,QAChB,WAAW;AAAA,QACX,WAAW;AAAA,QACX,gBAAoB;AAAA,QACpB,iBAAiB;AAAA,MACnB,CAAC;AAAA,IACH,CAAC;AAAA,EACD,OAAO;AAEL,WAAO,iBAAiB,oBAAoB,MAAM;AAChD,MAAI,2BAA2B;AAAA,QAC/B,MAAM,MAAM,SAAS,eAAe,MAAM;AAAA,QAC1C,aAAa;AAAA,QACb,gBAAgB;AAAA,QAChB,WAAW;AAAA,QACX,WAAW;AAAA,QACX,gBAAoB;AAAA,QACpB,iBAAiB;AAAA,MACjB,CAAC;AAAA,IACH,CAAC;AAAA,EACH;AAEA,QAAM,UAAU,YAAY;AAC1B,QAAI,UAAe,uBAAuB,QAAQ;AAClD,UAAM,EAAE,QAAQ,WAAW,aAAa,oBAAoB,IAAI,MAAW,8BAA8B,OAAO;AAChH,QAAI,oBAAmC,CAAC;AACxC,WAAO,OAAO,CAAC,CAAC,EAAE,KAAK,MAAM,SAAS,EAAE,EAAE,QAAQ,CAAC,CAAC,MAAM,KAAK,MAAM;AACnE,wBAAkB,KAAK,GAAG,CAAC,GAAG,SAAS,iBAAiB,IAAI,IAAI,GAAG,CAAC,EAAE,OAAO,CAAC,OAAO,cAAc,WAAW,CAAC;AAAA,IACjH,CAAC;AACD,wBAAoB,kBAAkB,OAAO,QAAM,iBAAiB,EAAE,EAAE,iBAAiB,SAAS,MAAM,MAAM;AAC9G,wBAAoB,kBAAkB,OAAO,QAAM,CAAC,GAAG,GAAG,iBAAiB,GAAG,CAAC,EAAE,KAAK,WAAS,iBAAiB,eAAe,OAAO,MAAM,UAAU,UAAU,CAAC;AACjK,wBAAoB,kBAAkB,OAAO,QAAM,CAAC,GAAG,GAAG,iBAAiB,GAAG,CAAC,EAAE,OAAO,WAAS,iBAAiB,eAAe,MAAM,sBAAsB,EAAE,SAAS,MAAM,sBAAsB,EAAE,MAAM,OAAO,MAAM,sBAAsB,EAAE,QAAQ,MAAM,sBAAsB,EAAE,OAAO,GAAG,EAAE,UAAU,EAAE;AAC/S,wBAAoB,kBAAkB,OAAO,QAAM;AACjD,UAAI,QAAQ,CAAC,GAAG,GAAG,iBAAiB,GAAG,CAAC,EAAE,OAAO,WAAU,MAAM,sBAAsB,EAAE,SAAS,MAAM,sBAAsB,EAAE,MAAM,MAAM,MAAM,sBAAsB,EAAE,QAAQ,MAAM,sBAAsB,EAAE,OAAO,OAAO,iBAAiB,kBAAkB,MAAM,aAAa,GAAG,MAAM,SAAU,iBAAiB,oBAAoB,MAAM,IAAI,SAAS,kBAAkB,CAAG,EAAE;AACtX,aAAO,KAAK,SAAS,SAAS;AAAA,IAChC,CAAC;AACD,wBAAoB,kBAAkB,OAAO,QAAM,CAAC,GAAG,GAAG,iBAAiB,GAAG,CAAC,EAAE,KAAK,WAAS,iBAAiB,eAAe,iBAAiB,OAAO,SAAS,EAAE,iBAAiB,SAAS,EAAE,SAAS,GAAG,KAAK,MAAM,sBAAsB,EAAE,QAAQ,MAAM,sBAAsB,EAAE,OAAO,EAAE,MAAM,KAAK;AACvS,YAAQ,MAAM,IAAI,cAAc,KAAK,iBAAiB;AACtD,sBAAkB,QAAQ,QAAM;AAC9B,kBAAY,MAAM;AAChB,WAAG,aAAa,SAAS,0DAA0D;AAAA,MACrF,GAAG,GAAG;AAAA,IACR,CAAC;AAAA,EACH;AAEA,SAAO,iBAAiB,eAAe,MAAM,WAAW,SAAS,IAAI,CAAC;AACtE,SAAO,iBAAiB,eAAe,OAAO;AAChD;AAEA,sBAAsB,GAAG;",
|
|
6
6
|
"names": ["Worker"]
|
|
7
7
|
}
|