@filteringdev/tinyshield 3.4.2 → 3.5.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/as-weakmap.js +28 -0
- package/dist/index.js +104 -0
- package/dist/interface.js +1 -122
- package/dist/tinyShield.user.js +77 -29
- package/dist/utils.js +14 -0
- package/package.json +4 -5
- package/dist/interface.js.map +0 -7
- /package/dist/{types/as-weakmap.d.ts → as-weakmap.d.ts} +0 -0
- /package/dist/{types/index.d.ts → index.d.ts} +0 -0
- /package/dist/{types/interface.d.ts → interface.d.ts} +0 -0
- /package/dist/{types/utils.d.ts → utils.d.ts} +0 -0
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
/*!
|
|
2
|
+
* @license MPL-2.0
|
|
3
|
+
* This Source Code Form is subject to the terms of the Mozilla Public
|
|
4
|
+
* License, v. 2.0. If a copy of the MPL was not distributed with this
|
|
5
|
+
* file, You can obtain one at https://mozilla.org/MPL/2.0/.
|
|
6
|
+
*
|
|
7
|
+
* Contributors:
|
|
8
|
+
* - See Git history at https://github.com/FilteringDev/tinyShield for detailed authorship information.
|
|
9
|
+
*/
|
|
10
|
+
import * as Utils from './utils.js';
|
|
11
|
+
import { OriginalRegExpTest } from './index.js';
|
|
12
|
+
export function CheckDepthInASWeakMap(Args) {
|
|
13
|
+
if (typeof Args[0] !== 'object') {
|
|
14
|
+
return false;
|
|
15
|
+
}
|
|
16
|
+
if (Utils.CountCommonStrings(['device', 'id', 'imp', 'regs', 'site', 'source'], Object.keys(Args[0])) < 5) {
|
|
17
|
+
return false;
|
|
18
|
+
}
|
|
19
|
+
let ASBannerFrameIdRegExp = /^[0-9]+\/[a-zA-Z0-9]+\/[a-zA-Z0-9]+\/[a-z0-9-\(\)]+\/[a-zA-Z0-9_]+_slot[0-9]+_+/;
|
|
20
|
+
let ASBannerFrameKey = Object.keys(Args[0]).find(Arg => typeof Args[0][Arg] === 'object' && Array.isArray(Args[0][Arg]) &&
|
|
21
|
+
Args[0][Arg].filter(SubArg => typeof SubArg === 'object' && Object.keys(SubArg).filter(InnerArg => {
|
|
22
|
+
return typeof InnerArg === 'string' && OriginalRegExpTest.call(ASBannerFrameIdRegExp, InnerArg);
|
|
23
|
+
})).length >= 1);
|
|
24
|
+
if (typeof ASBannerFrameKey === 'undefined') {
|
|
25
|
+
return false;
|
|
26
|
+
}
|
|
27
|
+
return true;
|
|
28
|
+
}
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,104 @@
|
|
|
1
|
+
/*!
|
|
2
|
+
* @license MPL-2.0
|
|
3
|
+
* This Source Code Form is subject to the terms of the Mozilla Public
|
|
4
|
+
* License, v. 2.0. If a copy of the MPL was not distributed with this
|
|
5
|
+
* file, You can obtain one at https://mozilla.org/MPL/2.0/.
|
|
6
|
+
*
|
|
7
|
+
* Contributors:
|
|
8
|
+
* - See Git history at https://github.com/FilteringDev/tinyShield for detailed authorship information.
|
|
9
|
+
*/
|
|
10
|
+
const Win = typeof unsafeWindow !== 'undefined' ? unsafeWindow : window;
|
|
11
|
+
import { CheckDepthInASWeakMap } from './as-weakmap.js';
|
|
12
|
+
export const OriginalRegExpTest = Win.RegExp.prototype.test;
|
|
13
|
+
export function RunTinyShieldUserscript(BrowserWindow, UserscriptName = 'tinyShield') {
|
|
14
|
+
const OriginalArrayToString = BrowserWindow.Array.prototype.toString;
|
|
15
|
+
const OriginalRegExpTest = BrowserWindow.RegExp.prototype.test;
|
|
16
|
+
const ProtectedFunctionStrings = ['toString', 'get', 'set'];
|
|
17
|
+
BrowserWindow.Function.prototype.toString = new Proxy(BrowserWindow.Function.prototype.toString, {
|
|
18
|
+
// eslint-disable-next-line @typescript-eslint/no-unsafe-function-type
|
|
19
|
+
apply(Target, ThisArg, Args) {
|
|
20
|
+
if (ProtectedFunctionStrings.includes(ThisArg.name)) {
|
|
21
|
+
return `function ${ThisArg.name}() { [native code] }`;
|
|
22
|
+
}
|
|
23
|
+
else {
|
|
24
|
+
return Reflect.apply(Target, ThisArg, Args);
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
});
|
|
28
|
+
const ASInitPositiveRegExps = [[
|
|
29
|
+
/[a-zA-Z0-9]+ *=> *{ *const *[a-zA-Z0-9]+ *= *[a-zA-Z0-9]+ *; *if/,
|
|
30
|
+
/===? *[a-zA-Z0-9]+ *\[ *[a-zA-Z0-9]+\( *[0-9a-z]+ *\) *\] *\) *return *[a-zA-Z0-9]+ *\( *{ *('|")?inventoryId('|")? *:/,
|
|
31
|
+
/{ *('|")?inventoryId('|")? *: *this *\[[a-zA-Z0-9]+ *\( *[0-9a-z]+ *\) *\] *, *\.\.\. *[a-zA-Z0-9]+ *\[ *[a-zA-Z0-9]+ *\( *[0-9a-z]+ * *\) *\] *} *\)/
|
|
32
|
+
]];
|
|
33
|
+
BrowserWindow.Map.prototype.get = new Proxy(BrowserWindow.Map.prototype.get, {
|
|
34
|
+
apply(Target, ThisArg, Args) {
|
|
35
|
+
if (Args.length > 0 && typeof Args[0] !== 'function') {
|
|
36
|
+
return Reflect.apply(Target, ThisArg, Args);
|
|
37
|
+
}
|
|
38
|
+
let ArgText = OriginalArrayToString.call(Args);
|
|
39
|
+
if (ASInitPositiveRegExps.filter(ASInitPositiveRegExp => ASInitPositiveRegExp.filter(Index => OriginalRegExpTest.call(Index, ArgText)).length >= 2).length === 1) {
|
|
40
|
+
console.debug(`[${UserscriptName}]: Map.prototype.get:`, ThisArg, Args);
|
|
41
|
+
throw new Error();
|
|
42
|
+
}
|
|
43
|
+
return Reflect.apply(Target, ThisArg, Args);
|
|
44
|
+
}
|
|
45
|
+
});
|
|
46
|
+
const ASReinsertedAdvInvenPositiveRegExps = [[
|
|
47
|
+
/inventory_id,[a-zA-Z0-9-]+\/[a-zA-Z0-9]+\/[a-zA-Z0-9]+/,
|
|
48
|
+
/inventory_id,[a-zA-Z0-9-]+\/[a-zA-Z0-9]+\/[a-zA-Z0-9]+/,
|
|
49
|
+
/inventory_id,[a-zA-Z0-9-]+\/[a-zA-Z0-9]+\/[a-zA-Z0-9]+/
|
|
50
|
+
], [
|
|
51
|
+
/[a-z0-9A-Z]+\.setAttribute\( *('|")onload('|") *, *('|")! *async *function\( *\) *\{ *let */,
|
|
52
|
+
/confirm\( *[A-Za-z0-9]+ *\) *\) *{ *const *[A-Za-z0-9]+ *= *new *[A-Za-z0-9]+\.URL\(('|")https:\/\/report\.error-report\.com\//,
|
|
53
|
+
/\.forEach *\( *\( *[A-Za-z0-9]+ *=> *[A-Za-z0-9]+\.remove *\( *\) *\) *\) *\) *, *[0-9a-f]+ *\) *; *const *[A-Za-z0-9]+ *= *await *\( *await *fetch *\(/
|
|
54
|
+
]];
|
|
55
|
+
BrowserWindow.Map.prototype.set = new Proxy(BrowserWindow.Map.prototype.set, {
|
|
56
|
+
apply(Target, ThisArg, Args) {
|
|
57
|
+
let ArgText = '';
|
|
58
|
+
try {
|
|
59
|
+
ArgText = OriginalArrayToString.call(Args);
|
|
60
|
+
}
|
|
61
|
+
catch {
|
|
62
|
+
console.warn(`[${UserscriptName}]: Map.prototype.set:`, ThisArg, Args);
|
|
63
|
+
}
|
|
64
|
+
if (ASReinsertedAdvInvenPositiveRegExps.filter(ASReinsertedAdvInvenPositiveRegExp => ASReinsertedAdvInvenPositiveRegExp.filter(Index => OriginalRegExpTest.call(Index, ArgText)).length >= 3).length === 1) {
|
|
65
|
+
console.debug(`[${UserscriptName}]: Map.prototype.set:`, ThisArg, Args);
|
|
66
|
+
throw new Error();
|
|
67
|
+
}
|
|
68
|
+
return Reflect.apply(Target, ThisArg, Args);
|
|
69
|
+
}
|
|
70
|
+
});
|
|
71
|
+
BrowserWindow.WeakMap.prototype.set = new Proxy(BrowserWindow.WeakMap.prototype.set, {
|
|
72
|
+
apply(Target, ThisArg, Args) {
|
|
73
|
+
if (CheckDepthInASWeakMap(Args)) {
|
|
74
|
+
console.debug(`[${UserscriptName}]: WeakMap.prototype.set:`, ThisArg, Args);
|
|
75
|
+
throw new Error();
|
|
76
|
+
}
|
|
77
|
+
return Reflect.apply(Target, ThisArg, Args);
|
|
78
|
+
}
|
|
79
|
+
});
|
|
80
|
+
let ASTimerRegExps = [[
|
|
81
|
+
/async *\( *\) *=> *{ *const *[A-Za-z0-9]+ *= *[A-Za-z0-9]+ *; *await *[A-Za-z0-9]+ *\( *\)/,
|
|
82
|
+
/; *await *[A-Za-z0-9]+ *\( *\) *, *[A-Za-z0-9]+ *\( *! *1 *, *new *Error *\( *[A-Za-z0-9]+ *\( *[0-9a-f]+ *\) *\) *\) *}/,
|
|
83
|
+
/ *\) *\) *\) *}/
|
|
84
|
+
]];
|
|
85
|
+
BrowserWindow.setTimeout = new Proxy(BrowserWindow.setTimeout, {
|
|
86
|
+
apply(Target, ThisArg, Args) {
|
|
87
|
+
if (ASTimerRegExps.filter(ASTimerRegExp => ASTimerRegExp.filter(Index => Index.test(Args[0].toString())).length >= 3).length === 1) {
|
|
88
|
+
console.debug(`[${UserscriptName}]: setTimeout:`, Args);
|
|
89
|
+
return;
|
|
90
|
+
}
|
|
91
|
+
return Reflect.apply(Target, ThisArg, Args);
|
|
92
|
+
}
|
|
93
|
+
});
|
|
94
|
+
BrowserWindow.setInterval = new Proxy(BrowserWindow.setInterval, {
|
|
95
|
+
apply(Target, ThisArg, Args) {
|
|
96
|
+
if (ASTimerRegExps.filter(ASTimerRegExp => ASTimerRegExp.filter(Index => Index.test(Args[0].toString())).length >= 3).length === 1) {
|
|
97
|
+
console.debug(`[${UserscriptName}]: setInterval:`, Args);
|
|
98
|
+
return;
|
|
99
|
+
}
|
|
100
|
+
return Reflect.apply(Target, ThisArg, Args);
|
|
101
|
+
}
|
|
102
|
+
});
|
|
103
|
+
}
|
|
104
|
+
RunTinyShieldUserscript(Win);
|
package/dist/interface.js
CHANGED
|
@@ -1,124 +1,3 @@
|
|
|
1
|
-
// userscript/source/utils.ts
|
|
2
|
-
function CountCommonStrings(ArrayA, ArrayB) {
|
|
3
|
-
let SetB = new Set(ArrayB);
|
|
4
|
-
const Common = new Set(ArrayA.filter((Item) => SetB.has(Item)));
|
|
5
|
-
return Common.size;
|
|
6
|
-
}
|
|
7
|
-
|
|
8
|
-
// userscript/source/as-weakmap.ts
|
|
9
|
-
function CheckDepthInASWeakMap(Args) {
|
|
10
|
-
if (typeof Args[0] !== "object") {
|
|
11
|
-
return false;
|
|
12
|
-
}
|
|
13
|
-
if (CountCommonStrings(["device", "id", "imp", "regs", "site", "source"], Object.keys(Args[0])) < 5) {
|
|
14
|
-
return false;
|
|
15
|
-
}
|
|
16
|
-
let ASBannerFrameIdRegExp = /^[0-9]+\/[a-zA-Z0-9]+\/[a-zA-Z0-9]+\/[a-z0-9-\(\)]+\/[a-zA-Z0-9_]+_slot[0-9]+_+/;
|
|
17
|
-
let ASBannerFrameKey = Object.keys(Args[0]).find((Arg) => typeof Args[0][Arg] === "object" && Array.isArray(Args[0][Arg]) && Args[0][Arg].filter((SubArg) => typeof SubArg === "object" && Object.keys(SubArg).filter((InnerArg) => {
|
|
18
|
-
return typeof InnerArg === "string" && OriginalRegExpTest.call(ASBannerFrameIdRegExp, InnerArg);
|
|
19
|
-
})).length >= 1);
|
|
20
|
-
if (typeof ASBannerFrameKey === "undefined") {
|
|
21
|
-
return false;
|
|
22
|
-
}
|
|
23
|
-
return true;
|
|
24
|
-
}
|
|
25
|
-
|
|
26
|
-
// userscript/source/index.ts
|
|
27
|
-
var Win = typeof unsafeWindow !== "undefined" ? unsafeWindow : window;
|
|
28
|
-
var OriginalRegExpTest = Win.RegExp.prototype.test;
|
|
29
|
-
function RunTinyShieldUserscript(BrowserWindow, UserscriptName = "tinyShield") {
|
|
30
|
-
const OriginalArrayToString = BrowserWindow.Array.prototype.toString;
|
|
31
|
-
const OriginalRegExpTest2 = BrowserWindow.RegExp.prototype.test;
|
|
32
|
-
const ProtectedFunctionStrings = ["toString", "get", "set"];
|
|
33
|
-
BrowserWindow.Function.prototype.toString = new Proxy(BrowserWindow.Function.prototype.toString, {
|
|
34
|
-
// eslint-disable-next-line @typescript-eslint/no-unsafe-function-type
|
|
35
|
-
apply(Target, ThisArg, Args) {
|
|
36
|
-
if (ProtectedFunctionStrings.includes(ThisArg.name)) {
|
|
37
|
-
return `function ${ThisArg.name}() { [native code] }`;
|
|
38
|
-
} else {
|
|
39
|
-
return Reflect.apply(Target, ThisArg, Args);
|
|
40
|
-
}
|
|
41
|
-
}
|
|
42
|
-
});
|
|
43
|
-
const ASInitPositiveRegExps = [[
|
|
44
|
-
/[a-zA-Z0-9]+ *=> *{ *const *[a-zA-Z0-9]+ *= *[a-zA-Z0-9]+ *; *if/,
|
|
45
|
-
/===? *[a-zA-Z0-9]+ *\[ *[a-zA-Z0-9]+\( *[0-9a-z]+ *\) *\] *\) *return *[a-zA-Z0-9]+ *\( *{ *('|")?inventoryId('|")? *:/,
|
|
46
|
-
/{ *('|")?inventoryId('|")? *: *this *\[[a-zA-Z0-9]+ *\( *[0-9a-z]+ *\) *\] *, *\.\.\. *[a-zA-Z0-9]+ *\[ *[a-zA-Z0-9]+ *\( *[0-9a-z]+ * *\) *\] *} *\)/
|
|
47
|
-
]];
|
|
48
|
-
BrowserWindow.Map.prototype.get = new Proxy(BrowserWindow.Map.prototype.get, {
|
|
49
|
-
apply(Target, ThisArg, Args) {
|
|
50
|
-
if (Args.length > 0 && typeof Args[0] !== "function") {
|
|
51
|
-
return Reflect.apply(Target, ThisArg, Args);
|
|
52
|
-
}
|
|
53
|
-
let ArgText = OriginalArrayToString.call(Args);
|
|
54
|
-
if (ASInitPositiveRegExps.filter((ASInitPositiveRegExp) => ASInitPositiveRegExp.filter((Index) => OriginalRegExpTest2.call(Index, ArgText)).length >= 2).length === 1) {
|
|
55
|
-
console.debug(`[${UserscriptName}]: Map.prototype.get:`, ThisArg, Args);
|
|
56
|
-
throw new Error();
|
|
57
|
-
}
|
|
58
|
-
return Reflect.apply(Target, ThisArg, Args);
|
|
59
|
-
}
|
|
60
|
-
});
|
|
61
|
-
const ASReinsertedAdvInvenPositiveRegExps = [[
|
|
62
|
-
/inventory_id,[a-zA-Z0-9-]+\/[a-zA-Z0-9]+\/[a-zA-Z0-9]+/,
|
|
63
|
-
/inventory_id,[a-zA-Z0-9-]+\/[a-zA-Z0-9]+\/[a-zA-Z0-9]+/,
|
|
64
|
-
/inventory_id,[a-zA-Z0-9-]+\/[a-zA-Z0-9]+\/[a-zA-Z0-9]+/
|
|
65
|
-
], [
|
|
66
|
-
/[a-z0-9A-Z]+\.setAttribute\( *('|")onload('|") *, *('|")! *async *function\( *\) *\{ *let */,
|
|
67
|
-
/confirm\( *[A-Za-z0-9]+ *\) *\) *{ *const *[A-Za-z0-9]+ *= *new *[A-Za-z0-9]+\.URL\(('|")https:\/\/report\.error-report\.com\//,
|
|
68
|
-
/\.forEach *\( *\( *[A-Za-z0-9]+ *=> *[A-Za-z0-9]+\.remove *\( *\) *\) *\) *\) *, *[0-9a-f]+ *\) *; *const *[A-Za-z0-9]+ *= *await *\( *await *fetch *\(/
|
|
69
|
-
]];
|
|
70
|
-
BrowserWindow.Map.prototype.set = new Proxy(BrowserWindow.Map.prototype.set, {
|
|
71
|
-
apply(Target, ThisArg, Args) {
|
|
72
|
-
let ArgText = "";
|
|
73
|
-
try {
|
|
74
|
-
ArgText = OriginalArrayToString.call(Args);
|
|
75
|
-
} catch {
|
|
76
|
-
console.warn(`[${UserscriptName}]: Map.prototype.set:`, ThisArg, Args);
|
|
77
|
-
}
|
|
78
|
-
if (ASReinsertedAdvInvenPositiveRegExps.filter((ASReinsertedAdvInvenPositiveRegExp) => ASReinsertedAdvInvenPositiveRegExp.filter((Index) => OriginalRegExpTest2.call(Index, ArgText)).length >= 3).length === 1) {
|
|
79
|
-
console.debug(`[${UserscriptName}]: Map.prototype.set:`, ThisArg, Args);
|
|
80
|
-
throw new Error();
|
|
81
|
-
}
|
|
82
|
-
return Reflect.apply(Target, ThisArg, Args);
|
|
83
|
-
}
|
|
84
|
-
});
|
|
85
|
-
BrowserWindow.WeakMap.prototype.set = new Proxy(BrowserWindow.WeakMap.prototype.set, {
|
|
86
|
-
apply(Target, ThisArg, Args) {
|
|
87
|
-
if (CheckDepthInASWeakMap(Args)) {
|
|
88
|
-
console.debug(`[${UserscriptName}]: WeakMap.prototype.set:`, ThisArg, Args);
|
|
89
|
-
throw new Error();
|
|
90
|
-
}
|
|
91
|
-
return Reflect.apply(Target, ThisArg, Args);
|
|
92
|
-
}
|
|
93
|
-
});
|
|
94
|
-
let ASTimerRegExps = [[
|
|
95
|
-
/async *\( *\) *=> *{ *const *[A-Za-z0-9]+ *= *[A-Za-z0-9]+ *; *await *[A-Za-z0-9]+ *\( *\)/,
|
|
96
|
-
/; *await *[A-Za-z0-9]+ *\( *\) *, *[A-Za-z0-9]+ *\( *! *1 *, *new *Error *\( *[A-Za-z0-9]+ *\( *[0-9a-f]+ *\) *\) *\) *}/,
|
|
97
|
-
/ *\) *\) *\) *}/
|
|
98
|
-
]];
|
|
99
|
-
BrowserWindow.setTimeout = new Proxy(BrowserWindow.setTimeout, {
|
|
100
|
-
apply(Target, ThisArg, Args) {
|
|
101
|
-
if (ASTimerRegExps.filter((ASTimerRegExp) => ASTimerRegExp.filter((Index) => Index.test(Args[0].toString())).length >= 3).length === 1) {
|
|
102
|
-
console.debug(`[${UserscriptName}]: setTimeout:`, Args);
|
|
103
|
-
return;
|
|
104
|
-
}
|
|
105
|
-
return Reflect.apply(Target, ThisArg, Args);
|
|
106
|
-
}
|
|
107
|
-
});
|
|
108
|
-
BrowserWindow.setInterval = new Proxy(BrowserWindow.setInterval, {
|
|
109
|
-
apply(Target, ThisArg, Args) {
|
|
110
|
-
if (ASTimerRegExps.filter((ASTimerRegExp) => ASTimerRegExp.filter((Index) => Index.test(Args[0].toString())).length >= 3).length === 1) {
|
|
111
|
-
console.debug(`[${UserscriptName}]: setInterval:`, Args);
|
|
112
|
-
return;
|
|
113
|
-
}
|
|
114
|
-
return Reflect.apply(Target, ThisArg, Args);
|
|
115
|
-
}
|
|
116
|
-
});
|
|
117
|
-
}
|
|
118
|
-
RunTinyShieldUserscript(Win);
|
|
119
|
-
export {
|
|
120
|
-
RunTinyShieldUserscript
|
|
121
|
-
};
|
|
122
1
|
/*!
|
|
123
2
|
* @license MPL-2.0
|
|
124
3
|
* This Source Code Form is subject to the terms of the Mozilla Public
|
|
@@ -128,4 +7,4 @@ export {
|
|
|
128
7
|
* Contributors:
|
|
129
8
|
* - See Git history at https://github.com/FilteringDev/tinyShield for detailed authorship information.
|
|
130
9
|
*/
|
|
131
|
-
|
|
10
|
+
export { RunTinyShieldUserscript } from './index.js';
|
package/dist/tinyShield.user.js
CHANGED
|
@@ -8,7 +8,7 @@
|
|
|
8
8
|
// @downloadURL https://cdn.jsdelivr.net/npm/@filteringdev/tinyshield@latest/dist/tinyShield.user.js
|
|
9
9
|
// @license MPL-2.0
|
|
10
10
|
//
|
|
11
|
-
// @version 3.
|
|
11
|
+
// @version 3.5.1
|
|
12
12
|
// @author PiQuark6046 and contributors
|
|
13
13
|
//
|
|
14
14
|
// @grant unsafeWindow
|
|
@@ -3350,6 +3350,8 @@
|
|
|
3350
3350
|
// @match *://*.easyfamilyrecipes.com/*
|
|
3351
3351
|
// @match *://thenerdstash.com/*
|
|
3352
3352
|
// @match *://*.thenerdstash.com/*
|
|
3353
|
+
// @match *://aspicyperspective.com/*
|
|
3354
|
+
// @match *://*.aspicyperspective.com/*
|
|
3353
3355
|
// @match *://fictionhorizon.com/*
|
|
3354
3356
|
// @match *://*.fictionhorizon.com/*
|
|
3355
3357
|
// @match *://southernbite.com/*
|
|
@@ -3798,6 +3800,8 @@
|
|
|
3798
3800
|
// @match *://*.ihearteating.com/*
|
|
3799
3801
|
// @match *://foxyfolksy.com/*
|
|
3800
3802
|
// @match *://*.foxyfolksy.com/*
|
|
3803
|
+
// @match *://pressurecookrecipes.com/*
|
|
3804
|
+
// @match *://*.pressurecookrecipes.com/*
|
|
3801
3805
|
// @match *://techwiser.com/*
|
|
3802
3806
|
// @match *://*.techwiser.com/*
|
|
3803
3807
|
// @match *://asimplepalate.com/*
|
|
@@ -4312,6 +4316,8 @@
|
|
|
4312
4316
|
// @match *://*.deliciouslysprinkled.com/*
|
|
4313
4317
|
// @match *://madden-school.com/*
|
|
4314
4318
|
// @match *://*.madden-school.com/*
|
|
4319
|
+
// @match *://addictedtodates.com/*
|
|
4320
|
+
// @match *://*.addictedtodates.com/*
|
|
4315
4321
|
// @match *://simplyhomecooked.com/*
|
|
4316
4322
|
// @match *://*.simplyhomecooked.com/*
|
|
4317
4323
|
// @match *://loveyourcat.com/*
|
|
@@ -4576,6 +4582,8 @@
|
|
|
4576
4582
|
// @match *://*.forkknifeswoon.com/*
|
|
4577
4583
|
// @match *://healthylittlepeach.com/*
|
|
4578
4584
|
// @match *://*.healthylittlepeach.com/*
|
|
4585
|
+
// @match *://top40weekly.com/*
|
|
4586
|
+
// @match *://*.top40weekly.com/*
|
|
4579
4587
|
// @match *://growagoodlife.com/*
|
|
4580
4588
|
// @match *://*.growagoodlife.com/*
|
|
4581
4589
|
// @match *://supercars.net/*
|
|
@@ -4716,10 +4724,14 @@
|
|
|
4716
4724
|
// @match *://*.myeverydaytable.com/*
|
|
4717
4725
|
// @match *://mygorgeousrecipes.com/*
|
|
4718
4726
|
// @match *://*.mygorgeousrecipes.com/*
|
|
4727
|
+
// @match *://homesteadingfamily.com/*
|
|
4728
|
+
// @match *://*.homesteadingfamily.com/*
|
|
4719
4729
|
// @match *://pipandebby.com/*
|
|
4720
4730
|
// @match *://*.pipandebby.com/*
|
|
4721
4731
|
// @match *://sugarandcharm.com/*
|
|
4722
4732
|
// @match *://*.sugarandcharm.com/*
|
|
4733
|
+
// @match *://myheartbeets.com/*
|
|
4734
|
+
// @match *://*.myheartbeets.com/*
|
|
4723
4735
|
// @match *://thenicolechase.com/*
|
|
4724
4736
|
// @match *://*.thenicolechase.com/*
|
|
4725
4737
|
// @match *://savoringitaly.com/*
|
|
@@ -7230,6 +7242,8 @@
|
|
|
7230
7242
|
// @match *://*.dailydishrecipes.com/*
|
|
7231
7243
|
// @match *://onepotrecipes.com/*
|
|
7232
7244
|
// @match *://*.onepotrecipes.com/*
|
|
7245
|
+
// @match *://birdwatchingdaily.com/*
|
|
7246
|
+
// @match *://*.birdwatchingdaily.com/*
|
|
7233
7247
|
// @match *://giftofcuriosity.com/*
|
|
7234
7248
|
// @match *://*.giftofcuriosity.com/*
|
|
7235
7249
|
// @match *://moralfibres.co.uk/*
|
|
@@ -11800,6 +11814,22 @@
|
|
|
11800
11814
|
// @match *://*.learnreligions.com/*
|
|
11801
11815
|
// @match *://verywellhealth.com/*
|
|
11802
11816
|
// @match *://*.verywellhealth.com/*
|
|
11817
|
+
// @match *://egolf.jp/*
|
|
11818
|
+
// @match *://*.egolf.jp/*
|
|
11819
|
+
// @match *://otonanswer.jp/*
|
|
11820
|
+
// @match *://*.otonanswer.jp/*
|
|
11821
|
+
// @match *://vague.style/*
|
|
11822
|
+
// @match *://*.vague.style/*
|
|
11823
|
+
// @match *://magmix.jp/*
|
|
11824
|
+
// @match *://*.magmix.jp/*
|
|
11825
|
+
// @match *://trafficnews.jp/*
|
|
11826
|
+
// @match *://*.trafficnews.jp/*
|
|
11827
|
+
// @match *://parents.com/*
|
|
11828
|
+
// @match *://*.parents.com/*
|
|
11829
|
+
// @match *://merinfo.se/*
|
|
11830
|
+
// @match *://*.merinfo.se/*
|
|
11831
|
+
// @match *://petbook.de/*
|
|
11832
|
+
// @match *://*.petbook.de/*
|
|
11803
11833
|
// @match *://egitim.net.tr/*
|
|
11804
11834
|
// @match *://*.egitim.net.tr/*
|
|
11805
11835
|
// @match *://manchesterworld.uk/*
|
|
@@ -11872,8 +11902,6 @@
|
|
|
11872
11902
|
// @match *://*.autobild.de/*
|
|
11873
11903
|
// @match *://toyokeizai.net/*
|
|
11874
11904
|
// @match *://*.toyokeizai.net/*
|
|
11875
|
-
// @match *://newatlas.com/*
|
|
11876
|
-
// @match *://*.newatlas.com/*
|
|
11877
11905
|
// @match *://usaudiomart.com/*
|
|
11878
11906
|
// @match *://*.usaudiomart.com/*
|
|
11879
11907
|
// @match *://slideshare.net/*
|
|
@@ -11884,6 +11912,8 @@
|
|
|
11884
11912
|
// @match *://*.sportlerfrage.net/*
|
|
11885
11913
|
// @match *://reisefrage.net/*
|
|
11886
11914
|
// @match *://*.reisefrage.net/*
|
|
11915
|
+
// @match *://newatlas.com/*
|
|
11916
|
+
// @match *://*.newatlas.com/*
|
|
11887
11917
|
// @match *://fossbytes.com/*
|
|
11888
11918
|
// @match *://*.fossbytes.com/*
|
|
11889
11919
|
// @match *://perezhilton.com/*
|
|
@@ -11968,6 +11998,8 @@
|
|
|
11968
11998
|
// @match *://*.heraldm.com/*
|
|
11969
11999
|
// @match *://razzball.com/*
|
|
11970
12000
|
// @match *://*.razzball.com/*
|
|
12001
|
+
// @match *://freeconvert.com/*
|
|
12002
|
+
// @match *://*.freeconvert.com/*
|
|
11971
12003
|
// @match *://pcgamebenchmark.com/*
|
|
11972
12004
|
// @match *://*.pcgamebenchmark.com/*
|
|
11973
12005
|
// @match *://flagle.io/*
|
|
@@ -13028,6 +13060,46 @@
|
|
|
13028
13060
|
// @match *://*.prydwen.gg/*
|
|
13029
13061
|
// @match *://stardb.gg/*
|
|
13030
13062
|
// @match *://*.stardb.gg/*
|
|
13063
|
+
// @match *://ew.com/*
|
|
13064
|
+
// @match *://*.ew.com/*
|
|
13065
|
+
// @match *://peopleenespanol.com/*
|
|
13066
|
+
// @match *://*.peopleenespanol.com/*
|
|
13067
|
+
// @match *://tripsavvy.com/*
|
|
13068
|
+
// @match *://*.tripsavvy.com/*
|
|
13069
|
+
// @match *://shape.com/*
|
|
13070
|
+
// @match *://*.shape.com/*
|
|
13071
|
+
// @match *://instyle.com/*
|
|
13072
|
+
// @match *://*.instyle.com/*
|
|
13073
|
+
// @match *://brides.com/*
|
|
13074
|
+
// @match *://*.brides.com/*
|
|
13075
|
+
// @match *://byrdie.com/*
|
|
13076
|
+
// @match *://*.byrdie.com/*
|
|
13077
|
+
// @match *://thesprucepets.com/*
|
|
13078
|
+
// @match *://*.thesprucepets.com/*
|
|
13079
|
+
// @match *://thespruce.com/*
|
|
13080
|
+
// @match *://*.thespruce.com/*
|
|
13081
|
+
// @match *://southernliving.com/*
|
|
13082
|
+
// @match *://*.southernliving.com/*
|
|
13083
|
+
// @match *://realsimple.com/*
|
|
13084
|
+
// @match *://*.realsimple.com/*
|
|
13085
|
+
// @match *://mydomaine.com/*
|
|
13086
|
+
// @match *://*.mydomaine.com/*
|
|
13087
|
+
// @match *://dailypaws.com/*
|
|
13088
|
+
// @match *://*.dailypaws.com/*
|
|
13089
|
+
// @match *://bhg.com/*
|
|
13090
|
+
// @match *://*.bhg.com/*
|
|
13091
|
+
// @match *://allrecipes.com/*
|
|
13092
|
+
// @match *://*.allrecipes.com/*
|
|
13093
|
+
// @match *://thebalancemoney.com/*
|
|
13094
|
+
// @match *://*.thebalancemoney.com/*
|
|
13095
|
+
// @match *://health.com/*
|
|
13096
|
+
// @match *://*.health.com/*
|
|
13097
|
+
// @match *://verywellfit.com/*
|
|
13098
|
+
// @match *://*.verywellfit.com/*
|
|
13099
|
+
// @match *://verywellmind.com/*
|
|
13100
|
+
// @match *://*.verywellmind.com/*
|
|
13101
|
+
// @match *://investopedia.com/*
|
|
13102
|
+
// @match *://*.investopedia.com/*
|
|
13031
13103
|
// @match *://kurir.rs/*
|
|
13032
13104
|
// @match *://*.kurir.rs/*
|
|
13033
13105
|
// @match *://pics-view.com/*
|
|
@@ -13186,34 +13258,8 @@
|
|
|
13186
13258
|
// @match *://*.vancouversun.com/*
|
|
13187
13259
|
// @match *://imas-cg.net/*
|
|
13188
13260
|
// @match *://*.imas-cg.net/*
|
|
13189
|
-
// @match *://allrecipes.com/*
|
|
13190
|
-
// @match *://*.allrecipes.com/*
|
|
13191
|
-
// @match *://bhg.com/*
|
|
13192
|
-
// @match *://*.bhg.com/*
|
|
13193
|
-
// @match *://brides.com/*
|
|
13194
|
-
// @match *://*.brides.com/*
|
|
13195
|
-
// @match *://byrdie.com/*
|
|
13196
|
-
// @match *://*.byrdie.com/*
|
|
13197
|
-
// @match *://ew.com/*
|
|
13198
|
-
// @match *://*.ew.com/*
|
|
13199
|
-
// @match *://investopedia.com/*
|
|
13200
|
-
// @match *://*.investopedia.com/*
|
|
13201
|
-
// @match *://parents.com/*
|
|
13202
|
-
// @match *://*.parents.com/*
|
|
13203
13261
|
// @match *://people.com/*
|
|
13204
13262
|
// @match *://*.people.com/*
|
|
13205
|
-
// @match *://peopleenespanol.com/*
|
|
13206
|
-
// @match *://*.peopleenespanol.com/*
|
|
13207
|
-
// @match *://realsimple.com/*
|
|
13208
|
-
// @match *://*.realsimple.com/*
|
|
13209
|
-
// @match *://shape.com/*
|
|
13210
|
-
// @match *://*.shape.com/*
|
|
13211
|
-
// @match *://southernliving.com/*
|
|
13212
|
-
// @match *://*.southernliving.com/*
|
|
13213
|
-
// @match *://thespruce.com/*
|
|
13214
|
-
// @match *://*.thespruce.com/*
|
|
13215
|
-
// @match *://thesprucepets.com/*
|
|
13216
|
-
// @match *://*.thesprucepets.com/*
|
|
13217
13263
|
// @match *://woodmagazine.com/*
|
|
13218
13264
|
// @match *://*.woodmagazine.com/*
|
|
13219
13265
|
// @match *://woxikon.bg/*
|
|
@@ -13288,6 +13334,8 @@
|
|
|
13288
13334
|
// @match *://*.soxprospects.com/*
|
|
13289
13335
|
// @match *://kio.ac/*
|
|
13290
13336
|
// @match *://*.kio.ac/*
|
|
13337
|
+
// @match *://nicovideo.jp/*
|
|
13338
|
+
// @match *://*.nicovideo.jp/*
|
|
13291
13339
|
// @match *://notebookcheck.co/*
|
|
13292
13340
|
// @match *://*.notebookcheck.co/*
|
|
13293
13341
|
// @match *://notebookcheck.de/*
|
package/dist/utils.js
ADDED
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
/*!
|
|
2
|
+
* @license MPL-2.0
|
|
3
|
+
* This Source Code Form is subject to the terms of the Mozilla Public
|
|
4
|
+
* License, v. 2.0. If a copy of the MPL was not distributed with this
|
|
5
|
+
* file, You can obtain one at https://mozilla.org/MPL/2.0/.
|
|
6
|
+
*
|
|
7
|
+
* Contributors:
|
|
8
|
+
* - See Git history at https://github.com/FilteringDev/tinyShield for detailed authorship information.
|
|
9
|
+
*/
|
|
10
|
+
export function CountCommonStrings(ArrayA, ArrayB) {
|
|
11
|
+
let SetB = new Set(ArrayB);
|
|
12
|
+
const Common = new Set(ArrayA.filter(Item => SetB.has(Item)));
|
|
13
|
+
return Common.size;
|
|
14
|
+
}
|
package/package.json
CHANGED
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@filteringdev/tinyshield",
|
|
3
|
-
"version": "3.
|
|
3
|
+
"version": "3.5.1",
|
|
4
4
|
"description": "",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"scripts": {
|
|
7
|
-
"build:interface": "
|
|
7
|
+
"build:interface": "tsc -p userscript/tsconfig.json",
|
|
8
8
|
"build:userscript": "npm run build -w builder -- --minify true --use-cache false --build-type production --SubscriptionUrl https://cdn.jsdelivr.net/npm/@filteringdev/tinyshield@latest/dist/tinyShield.user.js",
|
|
9
9
|
"build": "npm run build:interface && npm run build:userscript",
|
|
10
10
|
"debug": "npm run debug -w builder",
|
|
@@ -18,11 +18,10 @@
|
|
|
18
18
|
],
|
|
19
19
|
"exports": {
|
|
20
20
|
".": {
|
|
21
|
-
"import": "./dist/
|
|
22
|
-
"types": "./dist/
|
|
21
|
+
"import": "./dist/index.js",
|
|
22
|
+
"types": "./dist/index.d.ts"
|
|
23
23
|
}
|
|
24
24
|
},
|
|
25
|
-
"types": "./dist/types/interface.d.ts",
|
|
26
25
|
"repository": {
|
|
27
26
|
"type": "git",
|
|
28
27
|
"url": "git+https://github.com/FilteringDev/tinyShield.git"
|
package/dist/interface.js.map
DELETED
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"version": 3,
|
|
3
|
-
"sources": ["../userscript/source/utils.ts", "../userscript/source/as-weakmap.ts", "../userscript/source/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\nexport function CountCommonStrings(ArrayA: string[], ArrayB: string[]): number {\n let SetB = new Set(ArrayB)\n const Common = new Set(ArrayA.filter(Item => SetB.has(Item)))\n return Common.size\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\nimport * as Utils from './utils.js'\nimport { OriginalRegExpTest } from './index.js'\n\nexport function CheckDepthInASWeakMap(Args: [object, unknown]) {\n if (typeof Args[0] !== 'object') {\n return false\n }\n if (Utils.CountCommonStrings(['device', 'id', 'imp', 'regs', 'site', 'source'], Object.keys(Args[0])) < 5) {\n return false\n }\n\n let ASBannerFrameIdRegExp = /^[0-9]+\\/[a-zA-Z0-9]+\\/[a-zA-Z0-9]+\\/[a-z0-9-\\(\\)]+\\/[a-zA-Z0-9_]+_slot[0-9]+_+/\n let ASBannerFrameKey: string = Object.keys(Args[0]).find(Arg => typeof Args[0][Arg] === 'object' && Array.isArray(Args[0][Arg]) &&\n Args[0][Arg].filter(SubArg => typeof SubArg === 'object' && Object.keys(SubArg).filter(InnerArg => {\n return typeof InnerArg === 'string' && OriginalRegExpTest.call(ASBannerFrameIdRegExp, InnerArg) as boolean\n })).length >= 1)\n if (typeof ASBannerFrameKey === 'undefined') {\n return false\n }\n\n return true\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\n\nconst Win = typeof unsafeWindow !== 'undefined' ? unsafeWindow : window\n\nimport { CheckDepthInASWeakMap } from './as-weakmap.js'\n\nexport const OriginalRegExpTest = Win.RegExp.prototype.test\n\nexport function RunTinyShieldUserscript(BrowserWindow: typeof window, UserscriptName: string = 'tinyShield'): void {\n const OriginalArrayToString = BrowserWindow.Array.prototype.toString\n const OriginalRegExpTest = BrowserWindow.RegExp.prototype.test\n\n const ProtectedFunctionStrings = ['toString', 'get', 'set']\n\n BrowserWindow.Function.prototype.toString = new Proxy(BrowserWindow.Function.prototype.toString, {\n // eslint-disable-next-line @typescript-eslint/no-unsafe-function-type\n apply(Target: () => string, ThisArg: Function, Args: null) {\n if (ProtectedFunctionStrings.includes(ThisArg.name)) {\n return `function ${ThisArg.name}() { [native code] }`\n } else {\n return Reflect.apply(Target, ThisArg, Args)\n }\n }\n })\n\n const ASInitPositiveRegExps: RegExp[][] = [[\n /[a-zA-Z0-9]+ *=> *{ *const *[a-zA-Z0-9]+ *= *[a-zA-Z0-9]+ *; *if/,\n /===? *[a-zA-Z0-9]+ *\\[ *[a-zA-Z0-9]+\\( *[0-9a-z]+ *\\) *\\] *\\) *return *[a-zA-Z0-9]+ *\\( *{ *('|\")?inventoryId('|\")? *:/,\n /{ *('|\")?inventoryId('|\")? *: *this *\\[[a-zA-Z0-9]+ *\\( *[0-9a-z]+ *\\) *\\] *, *\\.\\.\\. *[a-zA-Z0-9]+ *\\[ *[a-zA-Z0-9]+ *\\( *[0-9a-z]+ * *\\) *\\] *} *\\)/\n ]]\n BrowserWindow.Map.prototype.get = new Proxy(BrowserWindow.Map.prototype.get, {\n apply(Target: (key: unknown) => unknown, ThisArg: Map<unknown, unknown>, Args: [unknown]) {\n if (Args.length > 0 && typeof Args[0] !== 'function') {\n return Reflect.apply(Target, ThisArg, Args)\n }\n\n let ArgText = OriginalArrayToString.call(Args) as string\n if (ASInitPositiveRegExps.filter(ASInitPositiveRegExp => ASInitPositiveRegExp.filter(Index => OriginalRegExpTest.call(Index, ArgText) as boolean).length >= 2).length === 1) {\n console.debug(`[${UserscriptName}]: Map.prototype.get:`, ThisArg, Args)\n throw new Error()\n }\n\n return Reflect.apply(Target, ThisArg, Args)\n }\n })\n\n const ASReinsertedAdvInvenPositiveRegExps: RegExp[][] = [[\n /inventory_id,[a-zA-Z0-9-]+\\/[a-zA-Z0-9]+\\/[a-zA-Z0-9]+/,\n /inventory_id,[a-zA-Z0-9-]+\\/[a-zA-Z0-9]+\\/[a-zA-Z0-9]+/,\n /inventory_id,[a-zA-Z0-9-]+\\/[a-zA-Z0-9]+\\/[a-zA-Z0-9]+/\n ], [\n /[a-z0-9A-Z]+\\.setAttribute\\( *('|\")onload('|\") *, *('|\")! *async *function\\( *\\) *\\{ *let */,\n /confirm\\( *[A-Za-z0-9]+ *\\) *\\) *{ *const *[A-Za-z0-9]+ *= *new *[A-Za-z0-9]+\\.URL\\(('|\")https:\\/\\/report\\.error-report\\.com\\//,\n /\\.forEach *\\( *\\( *[A-Za-z0-9]+ *=> *[A-Za-z0-9]+\\.remove *\\( *\\) *\\) *\\) *\\) *, *[0-9a-f]+ *\\) *; *const *[A-Za-z0-9]+ *= *await *\\( *await *fetch *\\(/\n ]]\n BrowserWindow.Map.prototype.set = new Proxy(BrowserWindow.Map.prototype.set, {\n apply(Target: (key: unknown, value: unknown) => Map<unknown, unknown>, ThisArg: Map<unknown, unknown>, Args: [unknown, unknown]) {\n let ArgText = ''\n try {\n ArgText = OriginalArrayToString.call(Args) as string\n } catch {\n console.warn(`[${UserscriptName}]: Map.prototype.set:`, ThisArg, Args)\n }\n if (ASReinsertedAdvInvenPositiveRegExps.filter(ASReinsertedAdvInvenPositiveRegExp => ASReinsertedAdvInvenPositiveRegExp.filter(Index => OriginalRegExpTest.call(Index, ArgText) as boolean).length >= 3).length === 1) {\n console.debug(`[${UserscriptName}]: Map.prototype.set:`, ThisArg, Args)\n throw new Error()\n }\n return Reflect.apply(Target, ThisArg, Args)\n }\n })\n\n BrowserWindow.WeakMap.prototype.set = new Proxy(BrowserWindow.WeakMap.prototype.set, {\n apply(Target: (key: object, value: unknown) => WeakMap<object, unknown>, ThisArg: WeakMap<object, unknown>, Args: [object, unknown]) {\n if (CheckDepthInASWeakMap(Args)) {\n console.debug(`[${UserscriptName}]: WeakMap.prototype.set:`, ThisArg, Args)\n throw new Error()\n }\n\n return Reflect.apply(Target, ThisArg, Args)\n }\n })\n\n let ASTimerRegExps: RegExp[][] = [[\n /async *\\( *\\) *=> *{ *const *[A-Za-z0-9]+ *= *[A-Za-z0-9]+ *; *await *[A-Za-z0-9]+ *\\( *\\)/,\n /; *await *[A-Za-z0-9]+ *\\( *\\) *, *[A-Za-z0-9]+ *\\( *! *1 *, *new *Error *\\( *[A-Za-z0-9]+ *\\( *[0-9a-f]+ *\\) *\\) *\\) *}/,\n / *\\) *\\) *\\) *}/\n ]]\n BrowserWindow.setTimeout = new Proxy(BrowserWindow.setTimeout, {\n apply(Target: typeof BrowserWindow.setTimeout, ThisArg: undefined, Args: Parameters<typeof setTimeout>) {\n if (ASTimerRegExps.filter(ASTimerRegExp => ASTimerRegExp.filter(Index => Index.test(Args[0].toString())).length >= 3).length === 1) {\n console.debug(`[${UserscriptName}]: setTimeout:`, Args)\n return\n }\n return Reflect.apply(Target, ThisArg, Args)\n }\n })\n BrowserWindow.setInterval = new Proxy(BrowserWindow.setInterval, {\n apply(Target: typeof BrowserWindow.setInterval, ThisArg: undefined, Args: Parameters<typeof setInterval>) {\n if (ASTimerRegExps.filter(ASTimerRegExp => ASTimerRegExp.filter(Index => Index.test(Args[0].toString())).length >= 3).length === 1) {\n console.debug(`[${UserscriptName}]: setInterval:`, Args)\n return\n }\n return Reflect.apply(Target, ThisArg, Args)\n }\n })\n}\n\nRunTinyShieldUserscript(Win)"],
|
|
5
|
-
"mappings": ";AAUO,SAAS,mBAAmB,QAAkB,QAA0B;AAC7E,MAAI,OAAO,IAAI,IAAI,MAAM;AACzB,QAAM,SAAS,IAAI,IAAI,OAAO,OAAO,UAAQ,KAAK,IAAI,IAAI,CAAC,CAAC;AAC5D,SAAO,OAAO;AAChB;;;ACDO,SAAS,sBAAsB,MAAyB;AAC7D,MAAI,OAAO,KAAK,CAAC,MAAM,UAAU;AAC/B,WAAO;AAAA,EACT;AACA,MAAU,mBAAmB,CAAC,UAAU,MAAM,OAAO,QAAQ,QAAQ,QAAQ,GAAG,OAAO,KAAK,KAAK,CAAC,CAAC,CAAC,IAAI,GAAG;AACzG,WAAO;AAAA,EACT;AAEA,MAAI,wBAAwB;AAC5B,MAAI,mBAA2B,OAAO,KAAK,KAAK,CAAC,CAAC,EAAE,KAAK,SAAO,OAAO,KAAK,CAAC,EAAE,GAAG,MAAM,YAAY,MAAM,QAAQ,KAAK,CAAC,EAAE,GAAG,CAAC,KAC5H,KAAK,CAAC,EAAE,GAAG,EAAE,OAAO,YAAU,OAAO,WAAW,YAAY,OAAO,KAAK,MAAM,EAAE,OAAO,cAAY;AACjG,WAAO,OAAO,aAAa,YAAY,mBAAmB,KAAK,uBAAuB,QAAQ;AAAA,EAChG,CAAC,CAAC,EAAE,UAAU,CAAC;AACjB,MAAI,OAAO,qBAAqB,aAAa;AAC3C,WAAO;AAAA,EACT;AAEA,SAAO;AACT;;;ACjBA,IAAM,MAAM,OAAO,iBAAiB,cAAc,eAAe;AAI1D,IAAM,qBAAqB,IAAI,OAAO,UAAU;AAEhD,SAAS,wBAAwB,eAA8B,iBAAyB,cAAoB;AACjH,QAAM,wBAAwB,cAAc,MAAM,UAAU;AAC5D,QAAMA,sBAAqB,cAAc,OAAO,UAAU;AAE1D,QAAM,2BAA2B,CAAC,YAAY,OAAO,KAAK;AAE1D,gBAAc,SAAS,UAAU,WAAW,IAAI,MAAM,cAAc,SAAS,UAAU,UAAU;AAAA;AAAA,IAE/F,MAAM,QAAsB,SAAmB,MAAY;AACzD,UAAI,yBAAyB,SAAS,QAAQ,IAAI,GAAG;AACnD,eAAO,YAAY,QAAQ,IAAI;AAAA,MACjC,OAAO;AACL,eAAO,QAAQ,MAAM,QAAQ,SAAS,IAAI;AAAA,MAC5C;AAAA,IACF;AAAA,EACF,CAAC;AAED,QAAM,wBAAoC,CAAC;AAAA,IACzC;AAAA,IACA;AAAA,IACA;AAAA,EACF,CAAC;AACD,gBAAc,IAAI,UAAU,MAAM,IAAI,MAAM,cAAc,IAAI,UAAU,KAAK;AAAA,IAC3E,MAAM,QAAmC,SAAgC,MAAiB;AACxF,UAAI,KAAK,SAAS,KAAK,OAAO,KAAK,CAAC,MAAM,YAAY;AACpD,eAAO,QAAQ,MAAM,QAAQ,SAAS,IAAI;AAAA,MAC5C;AAEA,UAAI,UAAU,sBAAsB,KAAK,IAAI;AAC7C,UAAI,sBAAsB,OAAO,0BAAwB,qBAAqB,OAAO,WAASA,oBAAmB,KAAK,OAAO,OAAO,CAAY,EAAE,UAAU,CAAC,EAAE,WAAW,GAAG;AAC3K,gBAAQ,MAAM,IAAI,cAAc,yBAAyB,SAAS,IAAI;AACtE,cAAM,IAAI,MAAM;AAAA,MAClB;AAEA,aAAO,QAAQ,MAAM,QAAQ,SAAS,IAAI;AAAA,IAC5C;AAAA,EACF,CAAC;AAED,QAAM,sCAAkD,CAAC;AAAA,IACvD;AAAA,IACA;AAAA,IACA;AAAA,EACF,GAAG;AAAA,IACD;AAAA,IACA;AAAA,IACA;AAAA,EACF,CAAC;AACD,gBAAc,IAAI,UAAU,MAAM,IAAI,MAAM,cAAc,IAAI,UAAU,KAAK;AAAA,IAC3E,MAAM,QAAiE,SAAgC,MAA0B;AAC/H,UAAI,UAAU;AACd,UAAI;AACF,kBAAU,sBAAsB,KAAK,IAAI;AAAA,MAC3C,QAAQ;AACN,gBAAQ,KAAK,IAAI,cAAc,yBAAyB,SAAS,IAAI;AAAA,MACvE;AACA,UAAI,oCAAoC,OAAO,wCAAsC,mCAAmC,OAAO,WAASA,oBAAmB,KAAK,OAAO,OAAO,CAAY,EAAE,UAAU,CAAC,EAAE,WAAW,GAAG;AACrN,gBAAQ,MAAM,IAAI,cAAc,yBAAyB,SAAS,IAAI;AACtE,cAAM,IAAI,MAAM;AAAA,MAClB;AACA,aAAO,QAAQ,MAAM,QAAQ,SAAS,IAAI;AAAA,IAC5C;AAAA,EACF,CAAC;AAED,gBAAc,QAAQ,UAAU,MAAM,IAAI,MAAM,cAAc,QAAQ,UAAU,KAAK;AAAA,IACnF,MAAM,QAAmE,SAAmC,MAAyB;AACnI,UAAI,sBAAsB,IAAI,GAAG;AAC/B,gBAAQ,MAAM,IAAI,cAAc,6BAA6B,SAAS,IAAI;AAC1E,cAAM,IAAI,MAAM;AAAA,MAClB;AAEA,aAAO,QAAQ,MAAM,QAAQ,SAAS,IAAI;AAAA,IAC5C;AAAA,EACF,CAAC;AAED,MAAI,iBAA6B,CAAC;AAAA,IAChC;AAAA,IACA;AAAA,IACA;AAAA,EACF,CAAC;AACD,gBAAc,aAAa,IAAI,MAAM,cAAc,YAAY;AAAA,IAC7D,MAAM,QAAyC,SAAoB,MAAqC;AACtG,UAAI,eAAe,OAAO,mBAAiB,cAAc,OAAO,WAAS,MAAM,KAAK,KAAK,CAAC,EAAE,SAAS,CAAC,CAAC,EAAE,UAAU,CAAC,EAAE,WAAW,GAAG;AAClI,gBAAQ,MAAM,IAAI,cAAc,kBAAkB,IAAI;AACtD;AAAA,MACF;AACA,aAAO,QAAQ,MAAM,QAAQ,SAAS,IAAI;AAAA,IAC5C;AAAA,EACF,CAAC;AACD,gBAAc,cAAc,IAAI,MAAM,cAAc,aAAa;AAAA,IAC/D,MAAM,QAA0C,SAAoB,MAAsC;AACxG,UAAI,eAAe,OAAO,mBAAiB,cAAc,OAAO,WAAS,MAAM,KAAK,KAAK,CAAC,EAAE,SAAS,CAAC,CAAC,EAAE,UAAU,CAAC,EAAE,WAAW,GAAG;AAClI,gBAAQ,MAAM,IAAI,cAAc,mBAAmB,IAAI;AACvD;AAAA,MACF;AACA,aAAO,QAAQ,MAAM,QAAQ,SAAS,IAAI;AAAA,IAC5C;AAAA,EACF,CAAC;AACH;AAEA,wBAAwB,GAAG;",
|
|
6
|
-
"names": ["OriginalRegExpTest"]
|
|
7
|
-
}
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|