diff --git a/.eslintrc b/.eslintrc
deleted file mode 100644
index d997e1b5..00000000
--- a/.eslintrc
+++ /dev/null
@@ -1,23 +0,0 @@
-{
- "extends": ["airbnb-base"],
- "parser": "@babel/eslint-parser",
- "parserOptions": {
- "babelOptions": {
- "rootMode": "upward"
- }
- },
- "env": {
- "browser": true,
- "qunit": true
- },
- "rules": {
- "indent": ["error", 4, { "SwitchCase": 1}],
- "no-param-reassign": 0,
- "no-shadow": 0,
- "import/prefer-default-export": 0,
- "arrow-body-style": 0,
- "import/no-extraneous-dependencies": 0,
- "no-await-in-loop": 0,
- "no-restricted-syntax": 0
- }
-}
diff --git a/.eslintrc.js b/.eslintrc.js
new file mode 100644
index 00000000..de4697c8
--- /dev/null
+++ b/.eslintrc.js
@@ -0,0 +1,48 @@
+module.exports = {
+ extends: [
+ 'airbnb-base',
+ 'plugin:jsdoc/recommended',
+ ],
+ parser: '@babel/eslint-parser',
+ parserOptions: {
+ babelOptions: {
+ rootMode: 'upward',
+ },
+ },
+ env: {
+ browser: true,
+ qunit: true,
+ },
+ rules: {
+ 'max-len': [
+ 'error',
+ {
+ code: 120,
+ ignoreUrls: true,
+ },
+ ],
+ indent: ['error', 4, { SwitchCase: 1 }],
+ 'no-param-reassign': 0,
+ 'no-shadow': 0,
+ 'import/prefer-default-export': 0,
+ 'arrow-body-style': 0,
+ 'import/no-extraneous-dependencies': 0,
+ 'no-await-in-loop': 0,
+ 'no-restricted-syntax': 0,
+ // jsdoc rules
+ 'jsdoc/check-tag-names': ['error', { definedTags: ['scriptlet', 'trustedScriptlet', 'redirect'] }],
+ 'jsdoc/require-jsdoc': 0,
+ 'jsdoc/require-param': 0,
+ 'jsdoc/valid-types': 0,
+ 'jsdoc/no-undefined-types': 0,
+ 'jsdoc/require-param-description': 0,
+ 'jsdoc/require-returns-description': 0,
+ },
+ settings: {
+ jsdoc: {
+ preferredTypes: {
+ object: 'Object',
+ },
+ },
+ },
+};
diff --git a/.husky/pre-commit b/.husky/pre-commit
new file mode 100755
index 00000000..be358538
--- /dev/null
+++ b/.husky/pre-commit
@@ -0,0 +1,5 @@
+#!/usr/bin/env sh
+. "$(dirname -- "$0")/_/husky.sh"
+
+yarn lint-staged
+yarn test
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 6d16ec67..ac3bb239 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,28 +1,91 @@
# Scriptlets and Redirect Resources Changelog
+## v1.8.1
+
+### Added
+- new `trusted-set-constant` scriptlet [#137](https://github.com/AdguardTeam/Scriptlets/issues/137)
+- new `inject-css-in-shadow-dom` scriptlet [#267](https://github.com/AdguardTeam/Scriptlets/issues/267)
+- `throwFunc` and `noopCallbackFunc` prop values for `set-constant` scriptlet
+- `recreateIframeForSlot` method mock to `googletagservices-gpt` redirect [#259](https://github.com/AdguardTeam/Scriptlets/issues/259)
+
+### Changed
+
+- add decimal delay matching for `prevent-setInterval` and `prevent-setTimeout` [#247](https://github.com/AdguardTeam/Scriptlets/issues/247)
+- debug logging to include rule text when available
+- `getScriptletFunction` calls to throw error on unknown scriptlet names
+
+### Fixed
+
+- `prevent-xhr` and `trusted-replace-xhr-response` closure bug on multiple requests [#261](https://github.com/AdguardTeam/Scriptlets/issues/261)
+- missing `googletagmanager-gtm` in compatibility table
+
+## v1.7.20
+
+### Added
+
+- `isBlocking()` method for Redirects class
+- `file` field for redirect type
+
+### Fixed
+
+- Redirects types.
+
+## v1.7.19
+
+### Fixed
+
+- `prevent-addEventListener` and `log-addEventListener` loosing context when encountering already bound `.addEventListener`
+- `google-ima3` conversion
+
+## v1.7.14
+
+### Added
+
+* `set-constant` ADG→UBO conversion for [`emptyArr` and `emptyObj`](https://github.com/uBlockOrigin/uBlock-issues/issues/2411)
+
+
+## v1.7.13
+
+### Fixed
+
+* `isEmptyObject` helper not counting `prototype` as an object property
+
+## v1.7.10
+
+### Added
+
+- new scriptlet `trusted-set-cookie-reload`
+
+### Fixed
+
+- `set-cookie-reload` infinite page reloading [#265](https://github.com/AdguardTeam/Scriptlets/issues/265)
+- breakage of `prevent-element-src-loading` due to `window` getting into `apply` wrapper [#264](https://github.com/AdguardTeam/Scriptlets/issues/264)
+- spread of args bug at `getXhrData` call for `trusted-replace-xhr-response`
+- request properties array not being served to `getRequestData` and `parseMatchProps` helpers
+
## v1.7.3
### Added
-* [Trusted scriptlets](./README.md#trusted-scriptlets) with extended capabilities:
- * trusted-click-element [#23](https://github.com/AdguardTeam/Scriptlets/issues/23)
- * trusted-replace-xhr-response [#202](https://github.com/AdguardTeam/Scriptlets/issues/202)
- * trusted-replace-fetch-response
- * trusted-set-local-storage-item
- * trusted-set-cookie
-
-* Scriptlets:
- * xml-prune [#249](https://github.com/AdguardTeam/Scriptlets/issues/249)
-
-### Improved
-
-* Scriptlets:
- * prevent-element-src-loading [#228](https://github.com/AdguardTeam/Scriptlets/issues/228)
- * prevent-fetch [#216](https://github.com/AdguardTeam/Scriptlets/issues/216)
- * abort-on-stack-trace [#201](https://github.com/AdguardTeam/Scriptlets/issues/201)
- * abort-current-inline-script [#251](https://github.com/AdguardTeam/Scriptlets/issues/251)
- * set-cookie & set-cookie-reload
-* Redirects:
- * google-ima3 [#255](https://github.com/AdguardTeam/Scriptlets/issues/255)
- * metrika-yandex-tag [#254](https://github.com/AdguardTeam/Scriptlets/issues/254)
- * googlesyndication-adsbygoogle [#252](https://github.com/AdguardTeam/Scriptlets/issues/252)
+- [Trusted scriptlets](./README.md#trusted-scriptlets) with extended capabilities:
+ - `trusted-click-element` [#23](https://github.com/AdguardTeam/Scriptlets/issues/23)
+ - `trusted-replace-xhr-response` [#202](https://github.com/AdguardTeam/Scriptlets/issues/202)
+ - `trusted-replace-fetch-response`
+ - `trusted-set-local-storage-item`
+ - `trusted-set-cookie`
+
+- Scriptlets:
+ - `xml-prune` [#249](https://github.com/AdguardTeam/Scriptlets/issues/249)
+
+### Changed
+
+- Scriptlets:
+ - `prevent-element-src-loading` [#228](https://github.com/AdguardTeam/Scriptlets/issues/228)
+ - `prevent-fetch` [#216](https://github.com/AdguardTeam/Scriptlets/issues/216)
+ - `abort-on-stack-trace` [#201](https://github.com/AdguardTeam/Scriptlets/issues/201)
+ - `abort-current-inline-script` [#251](https://github.com/AdguardTeam/Scriptlets/issues/251)
+ - `set-cookie` & `set-cookie-reload`
+- Redirects:
+ - `google-ima3` [#255](https://github.com/AdguardTeam/Scriptlets/issues/255)
+ - `metrika-yandex-tag` [#254](https://github.com/AdguardTeam/Scriptlets/issues/254)
+ - `googlesyndication-adsbygoogle` [#252](https://github.com/AdguardTeam/Scriptlets/issues/252)
diff --git a/README.md b/README.md
index af622964..e253e4d0 100644
--- a/README.md
+++ b/README.md
@@ -1,4 +1,4 @@
-# AdGuard Scriptlets and Redirect resources
+# AdGuard Scriptlets and Redirect Resources
AdGuard's Scriptlets and Redirect resources library which provides extended capabilities for content blocking.
@@ -161,9 +161,10 @@ And also there is a module at `dist/scriptlets.js` which has been exported to a
```javascript
/**
- * Returns scriptlet code
+ * Returns scriptlet code by param
* @param {Source} source
- * @returns {string}
+ * @returns {string|null} scriptlet code
+ * @throws on unknown scriptlet name
*/
scriptlets.invoke(source);
```
@@ -426,6 +427,11 @@ const redirects = new Redirects(rawYaml)
*/
const redirect = redirect.getRedirect('noopjs');
+/**
+ * Check if redirect is blocking, e.g. click2load.html
+ */
+const isBlocking = redirect.isBlocking('click2load.html');
+
/**
* Redirect - object with following props
* {
@@ -509,9 +515,14 @@ There are two scripts to update wiki:
2. `yarn wiki:build-docs` — updates wiki pages `about-scriptlets.md` and `about-redirects.md`. They are being generated from JSDoc-type comments of corresponding scriptlets and redirects source files due to `@scriptlet`/`@redirect` and `@description` tags. Runs automatically while the release build.
## Browser Compatibility
-| Chrome | Edge | Firefox | IE | Opera | Safari |
-| ------ | ---- | ------- | --- | ----- | ------ |
-| 55 | 15 | 52 | 11 | 42 | 10 |
+| Browser | Version |
+|-----------------------|:----------|
+| Chrome | ✅ 55 |
+| Firefox | ✅ 52 |
+| Edge | ✅ 15 |
+| Opera | ✅ 42 |
+| Safari | ✅ 11 |
+| Internet Explorer | ❌ |
## Projects using Scriptlets
* [CoreLibs](https://github.com/AdguardTeam/CoreLibs) (updates automatically)
diff --git a/babel.config.js b/babel.config.js
index b35ecc35..dcff3bfa 100644
--- a/babel.config.js
+++ b/babel.config.js
@@ -3,17 +3,31 @@ module.exports = (api) => {
const config = {
presets: [
[
- '@babel/env',
+ '@babel/preset-env',
{
- exclude: ['transform-typeof-symbol'],
+ exclude: [
+ '@babel/plugin-transform-async-to-generator',
+ '@babel/plugin-transform-regenerator',
+ '@babel/plugin-transform-typeof-symbol',
+ '@babel/plugin-transform-computed-properties',
+ ],
+ targets: [
+ 'last 1 version',
+ '> 1%',
+ // ie 11 is dead and no longer supported
+ 'not dead',
+ 'chrome >= 55',
+ 'firefox >= 52',
+ 'edge >= 15',
+ 'opera >= 42',
+ 'safari >= 11',
+ ],
},
],
],
plugins: [
- '@babel/plugin-transform-regenerator',
'@babel/plugin-transform-runtime',
- '@babel/plugin-proposal-class-properties',
- '@babel/plugin-proposal-private-methods',
+ '@babel/plugin-transform-arrow-functions',
],
};
diff --git a/dist/build.txt b/dist/build.txt
index 23f2750c..6492cbe8 100644
--- a/dist/build.txt
+++ b/dist/build.txt
@@ -1 +1 @@
-version=1.7.3
\ No newline at end of file
+version=1.7.20
\ No newline at end of file
diff --git a/dist/redirect-files/amazon-apstag.js b/dist/redirect-files/amazon-apstag.js
index f8f63b3e..fa49dfcf 100644
--- a/dist/redirect-files/amazon-apstag.js
+++ b/dist/redirect-files/amazon-apstag.js
@@ -13,7 +13,7 @@
window.apstag = apstagWrapper;
hit(source);
}
- function hit(source, message) {
+ function hit(source) {
if (source.verbose !== true) {
return;
}
@@ -33,14 +33,6 @@
var rulePart = source.ruleText.slice(ruleStartIndex);
prefix = "".concat(source.domainName).concat(rulePart);
}
- var LOG_MARKER = "log: ";
- if (message) {
- if (message.indexOf(LOG_MARKER) === -1) {
- log("".concat(prefix, " message:\n").concat(message));
- } else {
- log(message.slice(LOG_MARKER.length));
- }
- }
log("".concat(prefix, " trace start"));
if (trace) {
trace();
diff --git a/dist/redirect-files/ati-smarttag.js b/dist/redirect-files/ati-smarttag.js
index 445fb960..0f88cb30 100644
--- a/dist/redirect-files/ati-smarttag.js
+++ b/dist/redirect-files/ati-smarttag.js
@@ -75,7 +75,7 @@
window.ATInternet = smartTagWrapper;
hit(source);
}
- function hit(source, message) {
+ function hit(source) {
if (source.verbose !== true) {
return;
}
@@ -95,14 +95,6 @@
var rulePart = source.ruleText.slice(ruleStartIndex);
prefix = "".concat(source.domainName).concat(rulePart);
}
- var LOG_MARKER = "log: ";
- if (message) {
- if (message.indexOf(LOG_MARKER) === -1) {
- log("".concat(prefix, " message:\n").concat(message));
- } else {
- log(message.slice(LOG_MARKER.length));
- }
- }
log("".concat(prefix, " trace start"));
if (trace) {
trace();
diff --git a/dist/redirect-files/didomi-loader.js b/dist/redirect-files/didomi-loader.js
index 940e14d5..0ba27726 100644
--- a/dist/redirect-files/didomi-loader.js
+++ b/dist/redirect-files/didomi-loader.js
@@ -112,7 +112,7 @@
}
hit(source);
}
- function hit(source, message) {
+ function hit(source) {
if (source.verbose !== true) {
return;
}
@@ -132,14 +132,6 @@
var rulePart = source.ruleText.slice(ruleStartIndex);
prefix = "".concat(source.domainName).concat(rulePart);
}
- var LOG_MARKER = "log: ";
- if (message) {
- if (message.indexOf(LOG_MARKER) === -1) {
- log("".concat(prefix, " message:\n").concat(message));
- } else {
- log(message.slice(LOG_MARKER.length));
- }
- }
log("".concat(prefix, " trace start"));
if (trace) {
trace();
diff --git a/dist/redirect-files/fingerprintjs2.js b/dist/redirect-files/fingerprintjs2.js
index 7cbbc306..429611aa 100644
--- a/dist/redirect-files/fingerprintjs2.js
+++ b/dist/redirect-files/fingerprintjs2.js
@@ -21,7 +21,7 @@
window.Fingerprint2 = Fingerprint2;
hit(source);
}
- function hit(source, message) {
+ function hit(source) {
if (source.verbose !== true) {
return;
}
@@ -41,14 +41,6 @@
var rulePart = source.ruleText.slice(ruleStartIndex);
prefix = "".concat(source.domainName).concat(rulePart);
}
- var LOG_MARKER = "log: ";
- if (message) {
- if (message.indexOf(LOG_MARKER) === -1) {
- log("".concat(prefix, " message:\n").concat(message));
- } else {
- log(message.slice(LOG_MARKER.length));
- }
- }
log("".concat(prefix, " trace start"));
if (trace) {
trace();
diff --git a/dist/redirect-files/fingerprintjs3.js b/dist/redirect-files/fingerprintjs3.js
index 339857c1..49f1109c 100644
--- a/dist/redirect-files/fingerprintjs3.js
+++ b/dist/redirect-files/fingerprintjs3.js
@@ -22,7 +22,7 @@
window.FingerprintJS = new FingerprintJS;
hit(source);
}
- function hit(source, message) {
+ function hit(source) {
if (source.verbose !== true) {
return;
}
@@ -42,14 +42,6 @@
var rulePart = source.ruleText.slice(ruleStartIndex);
prefix = "".concat(source.domainName).concat(rulePart);
}
- var LOG_MARKER = "log: ";
- if (message) {
- if (message.indexOf(LOG_MARKER) === -1) {
- log("".concat(prefix, " message:\n").concat(message));
- } else {
- log(message.slice(LOG_MARKER.length));
- }
- }
log("".concat(prefix, " trace start"));
if (trace) {
trace();
diff --git a/dist/redirect-files/gemius.js b/dist/redirect-files/gemius.js
index 51dc632d..b5d2e3f2 100644
--- a/dist/redirect-files/gemius.js
+++ b/dist/redirect-files/gemius.js
@@ -11,7 +11,7 @@
window.GemiusPlayer = GemiusPlayer;
hit(source);
}
- function hit(source, message) {
+ function hit(source) {
if (source.verbose !== true) {
return;
}
@@ -31,14 +31,6 @@
var rulePart = source.ruleText.slice(ruleStartIndex);
prefix = "".concat(source.domainName).concat(rulePart);
}
- var LOG_MARKER = "log: ";
- if (message) {
- if (message.indexOf(LOG_MARKER) === -1) {
- log("".concat(prefix, " message:\n").concat(message));
- } else {
- log(message.slice(LOG_MARKER.length));
- }
- }
log("".concat(prefix, " trace start"));
if (trace) {
trace();
diff --git a/dist/redirect-files/google-analytics-ga.js b/dist/redirect-files/google-analytics-ga.js
index 9248937f..d8ff0bdf 100644
--- a/dist/redirect-files/google-analytics-ga.js
+++ b/dist/redirect-files/google-analytics-ga.js
@@ -73,7 +73,7 @@
window._gat = gat;
hit(source);
}
- function hit(source, message) {
+ function hit(source) {
if (source.verbose !== true) {
return;
}
@@ -93,14 +93,6 @@
var rulePart = source.ruleText.slice(ruleStartIndex);
prefix = "".concat(source.domainName).concat(rulePart);
}
- var LOG_MARKER = "log: ";
- if (message) {
- if (message.indexOf(LOG_MARKER) === -1) {
- log("".concat(prefix, " message:\n").concat(message));
- } else {
- log(message.slice(LOG_MARKER.length));
- }
- }
log("".concat(prefix, " trace start"));
if (trace) {
trace();
diff --git a/dist/redirect-files/google-analytics.js b/dist/redirect-files/google-analytics.js
index 3b94ad51..a2eaf31a 100644
--- a/dist/redirect-files/google-analytics.js
+++ b/dist/redirect-files/google-analytics.js
@@ -75,7 +75,7 @@
}
hit(source);
}
- function hit(source, message) {
+ function hit(source) {
if (source.verbose !== true) {
return;
}
@@ -95,14 +95,6 @@
var rulePart = source.ruleText.slice(ruleStartIndex);
prefix = "".concat(source.domainName).concat(rulePart);
}
- var LOG_MARKER = "log: ";
- if (message) {
- if (message.indexOf(LOG_MARKER) === -1) {
- log("".concat(prefix, " message:\n").concat(message));
- } else {
- log(message.slice(LOG_MARKER.length));
- }
- }
log("".concat(prefix, " trace start"));
if (trace) {
trace();
diff --git a/dist/redirect-files/google-ima3.js b/dist/redirect-files/google-ima3.js
index d2e0a677..f762c580 100644
--- a/dist/redirect-files/google-ima3.js
+++ b/dist/redirect-files/google-ima3.js
@@ -545,7 +545,7 @@
window.google.ima = ima;
hit(source);
}
- function hit(source, message) {
+ function hit(source) {
if (source.verbose !== true) {
return;
}
@@ -565,14 +565,6 @@
var rulePart = source.ruleText.slice(ruleStartIndex);
prefix = "".concat(source.domainName).concat(rulePart);
}
- var LOG_MARKER = "log: ";
- if (message) {
- if (message.indexOf(LOG_MARKER) === -1) {
- log("".concat(prefix, " message:\n").concat(message));
- } else {
- log(message.slice(LOG_MARKER.length));
- }
- }
log("".concat(prefix, " trace start"));
if (trace) {
trace();
diff --git a/dist/redirect-files/googlesyndication-adsbygoogle.js b/dist/redirect-files/googlesyndication-adsbygoogle.js
index 425dbb33..f455f86a 100644
--- a/dist/redirect-files/googlesyndication-adsbygoogle.js
+++ b/dist/redirect-files/googlesyndication-adsbygoogle.js
@@ -53,7 +53,7 @@
hit(source);
}
}
- function hit(source, message) {
+ function hit(source) {
if (source.verbose !== true) {
return;
}
@@ -73,14 +73,6 @@
var rulePart = source.ruleText.slice(ruleStartIndex);
prefix = "".concat(source.domainName).concat(rulePart);
}
- var LOG_MARKER = "log: ";
- if (message) {
- if (message.indexOf(LOG_MARKER) === -1) {
- log("".concat(prefix, " message:\n").concat(message));
- } else {
- log(message.slice(LOG_MARKER.length));
- }
- }
log("".concat(prefix, " trace start"));
if (trace) {
trace();
diff --git a/dist/redirect-files/googletagservices-gpt.js b/dist/redirect-files/googletagservices-gpt.js
index 8c005edb..929d5616 100644
--- a/dist/redirect-files/googletagservices-gpt.js
+++ b/dist/redirect-files/googletagservices-gpt.js
@@ -205,7 +205,7 @@
}
hit(source);
}
- function hit(source, message) {
+ function hit(source) {
if (source.verbose !== true) {
return;
}
@@ -225,14 +225,6 @@
var rulePart = source.ruleText.slice(ruleStartIndex);
prefix = "".concat(source.domainName).concat(rulePart);
}
- var LOG_MARKER = "log: ";
- if (message) {
- if (message.indexOf(LOG_MARKER) === -1) {
- log("".concat(prefix, " message:\n").concat(message));
- } else {
- log(message.slice(LOG_MARKER.length));
- }
- }
log("".concat(prefix, " trace start"));
if (trace) {
trace();
diff --git a/dist/redirect-files/matomo.js b/dist/redirect-files/matomo.js
index ecdb78af..9642ecee 100644
--- a/dist/redirect-files/matomo.js
+++ b/dist/redirect-files/matomo.js
@@ -18,7 +18,7 @@
window.Piwik = matomoWrapper;
hit(source);
}
- function hit(source, message) {
+ function hit(source) {
if (source.verbose !== true) {
return;
}
@@ -38,14 +38,6 @@
var rulePart = source.ruleText.slice(ruleStartIndex);
prefix = "".concat(source.domainName).concat(rulePart);
}
- var LOG_MARKER = "log: ";
- if (message) {
- if (message.indexOf(LOG_MARKER) === -1) {
- log("".concat(prefix, " message:\n").concat(message));
- } else {
- log(message.slice(LOG_MARKER.length));
- }
- }
log("".concat(prefix, " trace start"));
if (trace) {
trace();
diff --git a/dist/redirect-files/metrika-yandex-tag.js b/dist/redirect-files/metrika-yandex-tag.js
index 1dbf3c3c..917edded 100644
--- a/dist/redirect-files/metrika-yandex-tag.js
+++ b/dist/redirect-files/metrika-yandex-tag.js
@@ -68,7 +68,7 @@
}
hit(source);
}
- function hit(source, message) {
+ function hit(source) {
if (source.verbose !== true) {
return;
}
@@ -88,14 +88,6 @@
var rulePart = source.ruleText.slice(ruleStartIndex);
prefix = "".concat(source.domainName).concat(rulePart);
}
- var LOG_MARKER = "log: ";
- if (message) {
- if (message.indexOf(LOG_MARKER) === -1) {
- log("".concat(prefix, " message:\n").concat(message));
- } else {
- log(message.slice(LOG_MARKER.length));
- }
- }
log("".concat(prefix, " trace start"));
if (trace) {
trace();
diff --git a/dist/redirect-files/metrika-yandex-watch.js b/dist/redirect-files/metrika-yandex-watch.js
index e62fbf40..a2871f18 100644
--- a/dist/redirect-files/metrika-yandex-watch.js
+++ b/dist/redirect-files/metrika-yandex-watch.js
@@ -52,7 +52,7 @@
}
hit(source);
}
- function hit(source, message) {
+ function hit(source) {
if (source.verbose !== true) {
return;
}
@@ -72,14 +72,6 @@
var rulePart = source.ruleText.slice(ruleStartIndex);
prefix = "".concat(source.domainName).concat(rulePart);
}
- var LOG_MARKER = "log: ";
- if (message) {
- if (message.indexOf(LOG_MARKER) === -1) {
- log("".concat(prefix, " message:\n").concat(message));
- } else {
- log(message.slice(LOG_MARKER.length));
- }
- }
log("".concat(prefix, " trace start"));
if (trace) {
trace();
diff --git a/dist/redirect-files/naver-wcslog.js b/dist/redirect-files/naver-wcslog.js
index c449be8b..5c649ebe 100644
--- a/dist/redirect-files/naver-wcslog.js
+++ b/dist/redirect-files/naver-wcslog.js
@@ -7,7 +7,7 @@
};
hit(source);
}
- function hit(source, message) {
+ function hit(source) {
if (source.verbose !== true) {
return;
}
@@ -27,14 +27,6 @@
var rulePart = source.ruleText.slice(ruleStartIndex);
prefix = "".concat(source.domainName).concat(rulePart);
}
- var LOG_MARKER = "log: ";
- if (message) {
- if (message.indexOf(LOG_MARKER) === -1) {
- log("".concat(prefix, " message:\n").concat(message));
- } else {
- log(message.slice(LOG_MARKER.length));
- }
- }
log("".concat(prefix, " trace start"));
if (trace) {
trace();
diff --git a/dist/redirect-files/noeval.js b/dist/redirect-files/noeval.js
index 3f298542..5d75ad3a 100644
--- a/dist/redirect-files/noeval.js
+++ b/dist/redirect-files/noeval.js
@@ -1,10 +1,11 @@
(function(source, args) {
function noeval(source) {
window.eval = function evalWrapper(s) {
- hit(source, "AdGuard has prevented eval:\n".concat(s));
+ hit(source);
+ logMessage(source, "AdGuard has prevented eval:\n".concat(s), true);
}.bind();
}
- function hit(source, message) {
+ function hit(source) {
if (source.verbose !== true) {
return;
}
@@ -24,14 +25,6 @@
var rulePart = source.ruleText.slice(ruleStartIndex);
prefix = "".concat(source.domainName).concat(rulePart);
}
- var LOG_MARKER = "log: ";
- if (message) {
- if (message.indexOf(LOG_MARKER) === -1) {
- log("".concat(prefix, " message:\n").concat(message));
- } else {
- log(message.slice(LOG_MARKER.length));
- }
- }
log("".concat(prefix, " trace start"));
if (trace) {
trace();
@@ -42,6 +35,12 @@
window.__debug(source);
}
}
+ function logMessage(source, message) {
+ var forced = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;
+ if (forced || source.verbose) {
+ console.log("".concat(source.name, ": ").concat(message));
+ }
+ }
const updatedArgs = args ? [].concat(source).concat(args) : [ source ];
try {
noeval.apply(this, updatedArgs);
diff --git a/dist/redirect-files/pardot-1.0.js b/dist/redirect-files/pardot-1.0.js
index 135cf6ac..1ea1a97b 100644
--- a/dist/redirect-files/pardot-1.0.js
+++ b/dist/redirect-files/pardot-1.0.js
@@ -24,7 +24,7 @@
piTracker();
hit(source);
}
- function hit(source, message) {
+ function hit(source) {
if (source.verbose !== true) {
return;
}
@@ -44,14 +44,6 @@
var rulePart = source.ruleText.slice(ruleStartIndex);
prefix = "".concat(source.domainName).concat(rulePart);
}
- var LOG_MARKER = "log: ";
- if (message) {
- if (message.indexOf(LOG_MARKER) === -1) {
- log("".concat(prefix, " message:\n").concat(message));
- } else {
- log(message.slice(LOG_MARKER.length));
- }
- }
log("".concat(prefix, " trace start"));
if (trace) {
trace();
diff --git a/dist/redirect-files/prebid-ads.js b/dist/redirect-files/prebid-ads.js
index eb673bbc..ec9a7397 100644
--- a/dist/redirect-files/prebid-ads.js
+++ b/dist/redirect-files/prebid-ads.js
@@ -4,7 +4,7 @@
window.isAdBlockActive = false;
hit(source);
}
- function hit(source, message) {
+ function hit(source) {
if (source.verbose !== true) {
return;
}
@@ -24,14 +24,6 @@
var rulePart = source.ruleText.slice(ruleStartIndex);
prefix = "".concat(source.domainName).concat(rulePart);
}
- var LOG_MARKER = "log: ";
- if (message) {
- if (message.indexOf(LOG_MARKER) === -1) {
- log("".concat(prefix, " message:\n").concat(message));
- } else {
- log(message.slice(LOG_MARKER.length));
- }
- }
log("".concat(prefix, " trace start"));
if (trace) {
trace();
diff --git a/dist/redirect-files/prebid.js b/dist/redirect-files/prebid.js
index 31ab409b..f6ed6b1a 100644
--- a/dist/redirect-files/prebid.js
+++ b/dist/redirect-files/prebid.js
@@ -38,7 +38,7 @@
window.pbjs = pbjsWrapper;
hit(source);
}
- function hit(source, message) {
+ function hit(source) {
if (source.verbose !== true) {
return;
}
@@ -58,14 +58,6 @@
var rulePart = source.ruleText.slice(ruleStartIndex);
prefix = "".concat(source.domainName).concat(rulePart);
}
- var LOG_MARKER = "log: ";
- if (message) {
- if (message.indexOf(LOG_MARKER) === -1) {
- log("".concat(prefix, " message:\n").concat(message));
- } else {
- log(message.slice(LOG_MARKER.length));
- }
- }
log("".concat(prefix, " trace start"));
if (trace) {
trace();
diff --git a/dist/redirect-files/prevent-bab.js b/dist/redirect-files/prevent-bab.js
index 06eb7173..1ff360c6 100644
--- a/dist/redirect-files/prevent-bab.js
+++ b/dist/redirect-files/prevent-bab.js
@@ -1,5 +1,5 @@
(function(source, args) {
- function preventBab(source) {
+ function preventBab$1(source) {
var nativeSetTimeout = window.setTimeout;
var babRegex = /\.bab_elementid.$/;
var timeoutWrapper = function timeoutWrapper(callback) {
@@ -50,7 +50,7 @@
};
window.eval = evalWrapper.bind(window);
}
- function hit(source, message) {
+ function hit(source) {
if (source.verbose !== true) {
return;
}
@@ -70,14 +70,6 @@
var rulePart = source.ruleText.slice(ruleStartIndex);
prefix = "".concat(source.domainName).concat(rulePart);
}
- var LOG_MARKER = "log: ";
- if (message) {
- if (message.indexOf(LOG_MARKER) === -1) {
- log("".concat(prefix, " message:\n").concat(message));
- } else {
- log(message.slice(LOG_MARKER.length));
- }
- }
log("".concat(prefix, " trace start"));
if (trace) {
trace();
@@ -90,7 +82,7 @@
}
const updatedArgs = args ? [].concat(source).concat(args) : [ source ];
try {
- preventBab.apply(this, updatedArgs);
+ preventBab$1.apply(this, updatedArgs);
} catch (e) {
console.log(e);
}
diff --git a/dist/redirect-files/prevent-bab2.js b/dist/redirect-files/prevent-bab2.js
index c259f6f3..ec9827bf 100644
--- a/dist/redirect-files/prevent-bab2.js
+++ b/dist/redirect-files/prevent-bab2.js
@@ -17,7 +17,7 @@
window.nH7eXzOsG = 858;
hit(source);
}
- function hit(source, message) {
+ function hit(source) {
if (source.verbose !== true) {
return;
}
@@ -37,14 +37,6 @@
var rulePart = source.ruleText.slice(ruleStartIndex);
prefix = "".concat(source.domainName).concat(rulePart);
}
- var LOG_MARKER = "log: ";
- if (message) {
- if (message.indexOf(LOG_MARKER) === -1) {
- log("".concat(prefix, " message:\n").concat(message));
- } else {
- log(message.slice(LOG_MARKER.length));
- }
- }
log("".concat(prefix, " trace start"));
if (trace) {
trace();
diff --git a/dist/redirect-files/prevent-fab-3.2.0.js b/dist/redirect-files/prevent-fab-3.2.0.js
index 9666eb37..dea370bb 100644
--- a/dist/redirect-files/prevent-fab-3.2.0.js
+++ b/dist/redirect-files/prevent-fab-3.2.0.js
@@ -65,7 +65,7 @@
Object.defineProperty(window, "sniffAdBlock", getsetfab);
}
}
- function hit(source, message) {
+ function hit(source) {
if (source.verbose !== true) {
return;
}
@@ -85,14 +85,6 @@
var rulePart = source.ruleText.slice(ruleStartIndex);
prefix = "".concat(source.domainName).concat(rulePart);
}
- var LOG_MARKER = "log: ";
- if (message) {
- if (message.indexOf(LOG_MARKER) === -1) {
- log("".concat(prefix, " message:\n").concat(message));
- } else {
- log(message.slice(LOG_MARKER.length));
- }
- }
log("".concat(prefix, " trace start"));
if (trace) {
trace();
diff --git a/dist/redirect-files/prevent-popads-net.js b/dist/redirect-files/prevent-popads-net.js
index d5cb66e5..d42129f8 100644
--- a/dist/redirect-files/prevent-popads-net.js
+++ b/dist/redirect-files/prevent-popads-net.js
@@ -33,9 +33,9 @@
};
}
function randomId() {
- return Math.random().toString(36).substr(2, 9);
+ return Math.random().toString(36).slice(2, 9);
}
- function hit(source, message) {
+ function hit(source) {
if (source.verbose !== true) {
return;
}
@@ -55,14 +55,6 @@
var rulePart = source.ruleText.slice(ruleStartIndex);
prefix = "".concat(source.domainName).concat(rulePart);
}
- var LOG_MARKER = "log: ";
- if (message) {
- if (message.indexOf(LOG_MARKER) === -1) {
- log("".concat(prefix, " message:\n").concat(message));
- } else {
- log(message.slice(LOG_MARKER.length));
- }
- }
log("".concat(prefix, " trace start"));
if (trace) {
trace();
diff --git a/dist/redirect-files/scorecardresearch-beacon.js b/dist/redirect-files/scorecardresearch-beacon.js
index 2d784439..42f96716 100644
--- a/dist/redirect-files/scorecardresearch-beacon.js
+++ b/dist/redirect-files/scorecardresearch-beacon.js
@@ -8,7 +8,7 @@
};
hit(source);
}
- function hit(source, message) {
+ function hit(source) {
if (source.verbose !== true) {
return;
}
@@ -28,14 +28,6 @@
var rulePart = source.ruleText.slice(ruleStartIndex);
prefix = "".concat(source.domainName).concat(rulePart);
}
- var LOG_MARKER = "log: ";
- if (message) {
- if (message.indexOf(LOG_MARKER) === -1) {
- log("".concat(prefix, " message:\n").concat(message));
- } else {
- log(message.slice(LOG_MARKER.length));
- }
- }
log("".concat(prefix, " trace start"));
if (trace) {
trace();
diff --git a/dist/redirect-files/set-popads-dummy.js b/dist/redirect-files/set-popads-dummy.js
index 4e027d2c..ae437e9c 100644
--- a/dist/redirect-files/set-popads-dummy.js
+++ b/dist/redirect-files/set-popads-dummy.js
@@ -17,7 +17,7 @@
}
});
}
- function hit(source, message) {
+ function hit(source) {
if (source.verbose !== true) {
return;
}
@@ -37,14 +37,6 @@
var rulePart = source.ruleText.slice(ruleStartIndex);
prefix = "".concat(source.domainName).concat(rulePart);
}
- var LOG_MARKER = "log: ";
- if (message) {
- if (message.indexOf(LOG_MARKER) === -1) {
- log("".concat(prefix, " message:\n").concat(message));
- } else {
- log(message.slice(LOG_MARKER.length));
- }
- }
log("".concat(prefix, " trace start"));
if (trace) {
trace();
diff --git a/dist/redirects.json b/dist/redirects.json
index ebdc72c8..cc277e50 100644
--- a/dist/redirects.json
+++ b/dist/redirects.json
@@ -158,21 +158,21 @@
],
"isBlocking": false,
"contentType": "application/javascript;base64",
- "content": "IWZ1bmN0aW9uKHNvdXJjZSxhcmdzKXtmdW5jdGlvbiBub29wRnVuYygpe31jb25zdCB1cGRhdGVkQXJncz1hcmdzP1tdLmNvbmNhdChzb3VyY2UpLmNvbmNhdChhcmdzKTpbc291cmNlXTt0cnl7KGZ1bmN0aW9uKHNvdXJjZSl7dmFyIGFwc3RhZ1dyYXBwZXI9e2ZldGNoQmlkczpmdW5jdGlvbihhLGIpeyJmdW5jdGlvbiI9PXR5cGVvZiBiJiZiKFtdKX0saW5pdDpub29wRnVuYyxzZXREaXNwbGF5Qmlkczpub29wRnVuYyx0YXJnZXRpbmdLZXlzOm5vb3BGdW5jfTt3aW5kb3cuYXBzdGFnPWFwc3RhZ1dyYXBwZXIsZnVuY3Rpb24oc291cmNlLG1lc3NhZ2Upe2lmKCEwPT09c291cmNlLnZlcmJvc2Upe3RyeXt2YXIgbG9nPWNvbnNvbGUubG9nLmJpbmQoY29uc29sZSksdHJhY2U9Y29uc29sZS50cmFjZS5iaW5kKGNvbnNvbGUpLHByZWZpeD1zb3VyY2UucnVsZVRleHR8fCIiO2lmKHNvdXJjZS5kb21haW5OYW1lKXt2YXIgcnVsZVN0YXJ0SW5kZXgsQUdfU0NSSVBUTEVUX01BUktFUj0iIyUjLy8iLFVCT19TQ1JJUFRMRVRfTUFSS0VSPSIjIytqcyI7c291cmNlLnJ1bGVUZXh0LmluZGV4T2YoQUdfU0NSSVBUTEVUX01BUktFUik+LTE/cnVsZVN0YXJ0SW5kZXg9c291cmNlLnJ1bGVUZXh0LmluZGV4T2YoQUdfU0NSSVBUTEVUX01BUktFUik6c291cmNlLnJ1bGVUZXh0LmluZGV4T2YoVUJPX1NDUklQVExFVF9NQVJLRVIpPi0xJiYocnVsZVN0YXJ0SW5kZXg9c291cmNlLnJ1bGVUZXh0LmluZGV4T2YoVUJPX1NDUklQVExFVF9NQVJLRVIpKTt2YXIgcnVsZVBhcnQ9c291cmNlLnJ1bGVUZXh0LnNsaWNlKHJ1bGVTdGFydEluZGV4KTtwcmVmaXg9IiIuY29uY2F0KHNvdXJjZS5kb21haW5OYW1lKS5jb25jYXQocnVsZVBhcnQpfXZhciBMT0dfTUFSS0VSPSJsb2c6ICI7bWVzc2FnZSYmKC0xPT09bWVzc2FnZS5pbmRleE9mKExPR19NQVJLRVIpP2xvZygiIi5jb25jYXQocHJlZml4LCIgbWVzc2FnZTpcbiIpLmNvbmNhdChtZXNzYWdlKSk6bG9nKG1lc3NhZ2Uuc2xpY2UoTE9HX01BUktFUi5sZW5ndGgpKSksbG9nKCIiLmNvbmNhdChwcmVmaXgsIiB0cmFjZSBzdGFydCIpKSx0cmFjZSYmdHJhY2UoKSxsb2coIiIuY29uY2F0KHByZWZpeCwiIHRyYWNlIGVuZCIpKX1jYXRjaChlKXt9ImZ1bmN0aW9uIj09dHlwZW9mIHdpbmRvdy5fX2RlYnVnJiZ3aW5kb3cuX19kZWJ1Zyhzb3VyY2UpfX0oc291cmNlKX0pLmFwcGx5KHRoaXMsdXBkYXRlZEFyZ3MpfWNhdGNoKGUpe2NvbnNvbGUubG9nKGUpfX0oe25hbWU6ImFtYXpvbi1hcHN0YWciLGFyZ3M6W119LFtdKTs="
+ "content": "IWZ1bmN0aW9uKHNvdXJjZSxhcmdzKXtmdW5jdGlvbiBub29wRnVuYygpe31jb25zdCB1cGRhdGVkQXJncz1hcmdzP1tdLmNvbmNhdChzb3VyY2UpLmNvbmNhdChhcmdzKTpbc291cmNlXTt0cnl7KGZ1bmN0aW9uKHNvdXJjZSl7dmFyIGFwc3RhZ1dyYXBwZXI9e2ZldGNoQmlkczpmdW5jdGlvbihhLGIpeyJmdW5jdGlvbiI9PXR5cGVvZiBiJiZiKFtdKX0saW5pdDpub29wRnVuYyxzZXREaXNwbGF5Qmlkczpub29wRnVuYyx0YXJnZXRpbmdLZXlzOm5vb3BGdW5jfTt3aW5kb3cuYXBzdGFnPWFwc3RhZ1dyYXBwZXIsZnVuY3Rpb24oc291cmNlKXtpZighMD09PXNvdXJjZS52ZXJib3NlKXt0cnl7dmFyIGxvZz1jb25zb2xlLmxvZy5iaW5kKGNvbnNvbGUpLHRyYWNlPWNvbnNvbGUudHJhY2UuYmluZChjb25zb2xlKSxwcmVmaXg9c291cmNlLnJ1bGVUZXh0fHwiIjtpZihzb3VyY2UuZG9tYWluTmFtZSl7dmFyIHJ1bGVTdGFydEluZGV4LEFHX1NDUklQVExFVF9NQVJLRVI9IiMlIy8vIixVQk9fU0NSSVBUTEVUX01BUktFUj0iIyMranMiO3NvdXJjZS5ydWxlVGV4dC5pbmRleE9mKEFHX1NDUklQVExFVF9NQVJLRVIpPi0xP3J1bGVTdGFydEluZGV4PXNvdXJjZS5ydWxlVGV4dC5pbmRleE9mKEFHX1NDUklQVExFVF9NQVJLRVIpOnNvdXJjZS5ydWxlVGV4dC5pbmRleE9mKFVCT19TQ1JJUFRMRVRfTUFSS0VSKT4tMSYmKHJ1bGVTdGFydEluZGV4PXNvdXJjZS5ydWxlVGV4dC5pbmRleE9mKFVCT19TQ1JJUFRMRVRfTUFSS0VSKSk7dmFyIHJ1bGVQYXJ0PXNvdXJjZS5ydWxlVGV4dC5zbGljZShydWxlU3RhcnRJbmRleCk7cHJlZml4PSIiLmNvbmNhdChzb3VyY2UuZG9tYWluTmFtZSkuY29uY2F0KHJ1bGVQYXJ0KX1sb2coIiIuY29uY2F0KHByZWZpeCwiIHRyYWNlIHN0YXJ0IikpLHRyYWNlJiZ0cmFjZSgpLGxvZygiIi5jb25jYXQocHJlZml4LCIgdHJhY2UgZW5kIikpfWNhdGNoKGUpe30iZnVuY3Rpb24iPT10eXBlb2Ygd2luZG93Ll9fZGVidWcmJndpbmRvdy5fX2RlYnVnKHNvdXJjZSl9fShzb3VyY2UpfSkuYXBwbHkodGhpcyx1cGRhdGVkQXJncyl9Y2F0Y2goZSl7Y29uc29sZS5sb2coZSl9fSh7bmFtZToiYW1hem9uLWFwc3RhZyIsYXJnczpbXX0sW10pOw=="
},
{
"title": "ati-smarttag",
"aliases": [],
"isBlocking": false,
"contentType": "application/javascript;base64",
- "content": "IWZ1bmN0aW9uKHNvdXJjZSxhcmdzKXtmdW5jdGlvbiBub29wRnVuYygpe31jb25zdCB1cGRhdGVkQXJncz1hcmdzP1tdLmNvbmNhdChzb3VyY2UpLmNvbmNhdChhcmdzKTpbc291cmNlXTt0cnl7KGZ1bmN0aW9uKHNvdXJjZSl7dmFyIHNldE5vb3BGdW5jV3JhcHBlcj17c2V0Om5vb3BGdW5jfSxzZW5kTm9vcEZ1bmNXcmFwcGVyPXtzZW5kOm5vb3BGdW5jfSx0YWc9ZnVuY3Rpb24oKXt9O3RhZy5wcm90b3R5cGU9e3NldENvbmZpZzpub29wRnVuYyxzZXRQYXJhbTpub29wRnVuYyxkaXNwYXRjaDpub29wRnVuYyxjdXN0b21WYXJzOnNldE5vb3BGdW5jV3JhcHBlcixwdWJsaXNoZXI6c2V0Tm9vcEZ1bmNXcmFwcGVyLG9yZGVyOnNldE5vb3BGdW5jV3JhcHBlcixjbGljazpzZW5kTm9vcEZ1bmNXcmFwcGVyLGNsaWNrTGlzdGVuZXI6c2VuZE5vb3BGdW5jV3JhcHBlcixpbnRlcm5hbFNlYXJjaDp7c2V0Om5vb3BGdW5jLHNlbmQ6bm9vcEZ1bmN9LGVjb21tZXJjZTp7ZGlzcGxheUNhcnQ6e3Byb2R1Y3RzOnNldE5vb3BGdW5jV3JhcHBlcixjYXJ0OnNldE5vb3BGdW5jV3JhcHBlcn0sdXBkYXRlQ2FydDp7Y2FydDpzZXROb29wRnVuY1dyYXBwZXJ9LGRpc3BsYXlQcm9kdWN0Ontwcm9kdWN0czpzZXROb29wRnVuY1dyYXBwZXJ9LGRpc3BsYXlQYWdlUHJvZHVjdDp7cHJvZHVjdHM6c2V0Tm9vcEZ1bmNXcmFwcGVyfSxhZGRQcm9kdWN0Ontwcm9kdWN0czpzZXROb29wRnVuY1dyYXBwZXJ9LHJlbW92ZVByb2R1Y3Q6e3Byb2R1Y3RzOnNldE5vb3BGdW5jV3JhcHBlcn19LGlkZW50aWZpZWRWaXNpdG9yOnt1bnNldDpub29wRnVuY30scGFnZTp7c2V0Om5vb3BGdW5jLHNlbmQ6bm9vcEZ1bmN9LHNlbGZQcm9tb3Rpb246e2FkZDpub29wRnVuYyxzZW5kOm5vb3BGdW5jfSxwcml2YWN5OntzZXRWaXNpdG9yTW9kZTpub29wRnVuYyxnZXRWaXNpdG9yTW9kZTpub29wRnVuYyxoaXQ6bm9vcEZ1bmN9LHJpY2hNZWRpYTp7YWRkOm5vb3BGdW5jLHNlbmQ6bm9vcEZ1bmMscmVtb3ZlOm5vb3BGdW5jLHJlbW92ZUFsbDpub29wRnVuY319O3ZhciBzbWFydFRhZ1dyYXBwZXI9e1RyYWNrZXI6e1RhZzpmdW5jdGlvbigpe3JldHVybiBuZXcgdGFnfX19O3dpbmRvdy5BVEludGVybmV0PXNtYXJ0VGFnV3JhcHBlcixmdW5jdGlvbihzb3VyY2UsbWVzc2FnZSl7aWYoITA9PT1zb3VyY2UudmVyYm9zZSl7dHJ5e3ZhciBsb2c9Y29uc29sZS5sb2cuYmluZChjb25zb2xlKSx0cmFjZT1jb25zb2xlLnRyYWNlLmJpbmQoY29uc29sZSkscHJlZml4PXNvdXJjZS5ydWxlVGV4dHx8IiI7aWYoc291cmNlLmRvbWFpbk5hbWUpe3ZhciBydWxlU3RhcnRJbmRleCxBR19TQ1JJUFRMRVRfTUFSS0VSPSIjJSMvLyIsVUJPX1NDUklQVExFVF9NQVJLRVI9IiMjK2pzIjtzb3VyY2UucnVsZVRleHQuaW5kZXhPZihBR19TQ1JJUFRMRVRfTUFSS0VSKT4tMT9ydWxlU3RhcnRJbmRleD1zb3VyY2UucnVsZVRleHQuaW5kZXhPZihBR19TQ1JJUFRMRVRfTUFSS0VSKTpzb3VyY2UucnVsZVRleHQuaW5kZXhPZihVQk9fU0NSSVBUTEVUX01BUktFUik+LTEmJihydWxlU3RhcnRJbmRleD1zb3VyY2UucnVsZVRleHQuaW5kZXhPZihVQk9fU0NSSVBUTEVUX01BUktFUikpO3ZhciBydWxlUGFydD1zb3VyY2UucnVsZVRleHQuc2xpY2UocnVsZVN0YXJ0SW5kZXgpO3ByZWZpeD0iIi5jb25jYXQoc291cmNlLmRvbWFpbk5hbWUpLmNvbmNhdChydWxlUGFydCl9dmFyIExPR19NQVJLRVI9ImxvZzogIjttZXNzYWdlJiYoLTE9PT1tZXNzYWdlLmluZGV4T2YoTE9HX01BUktFUik/bG9nKCIiLmNvbmNhdChwcmVmaXgsIiBtZXNzYWdlOlxuIikuY29uY2F0KG1lc3NhZ2UpKTpsb2cobWVzc2FnZS5zbGljZShMT0dfTUFSS0VSLmxlbmd0aCkpKSxsb2coIiIuY29uY2F0KHByZWZpeCwiIHRyYWNlIHN0YXJ0IikpLHRyYWNlJiZ0cmFjZSgpLGxvZygiIi5jb25jYXQocHJlZml4LCIgdHJhY2UgZW5kIikpfWNhdGNoKGUpe30iZnVuY3Rpb24iPT10eXBlb2Ygd2luZG93Ll9fZGVidWcmJndpbmRvdy5fX2RlYnVnKHNvdXJjZSl9fShzb3VyY2UpfSkuYXBwbHkodGhpcyx1cGRhdGVkQXJncyl9Y2F0Y2goZSl7Y29uc29sZS5sb2coZSl9fSh7bmFtZToiYXRpLXNtYXJ0dGFnIixhcmdzOltdfSxbXSk7"
+ "content": "IWZ1bmN0aW9uKHNvdXJjZSxhcmdzKXtmdW5jdGlvbiBub29wRnVuYygpe31jb25zdCB1cGRhdGVkQXJncz1hcmdzP1tdLmNvbmNhdChzb3VyY2UpLmNvbmNhdChhcmdzKTpbc291cmNlXTt0cnl7KGZ1bmN0aW9uKHNvdXJjZSl7dmFyIHNldE5vb3BGdW5jV3JhcHBlcj17c2V0Om5vb3BGdW5jfSxzZW5kTm9vcEZ1bmNXcmFwcGVyPXtzZW5kOm5vb3BGdW5jfSx0YWc9ZnVuY3Rpb24oKXt9O3RhZy5wcm90b3R5cGU9e3NldENvbmZpZzpub29wRnVuYyxzZXRQYXJhbTpub29wRnVuYyxkaXNwYXRjaDpub29wRnVuYyxjdXN0b21WYXJzOnNldE5vb3BGdW5jV3JhcHBlcixwdWJsaXNoZXI6c2V0Tm9vcEZ1bmNXcmFwcGVyLG9yZGVyOnNldE5vb3BGdW5jV3JhcHBlcixjbGljazpzZW5kTm9vcEZ1bmNXcmFwcGVyLGNsaWNrTGlzdGVuZXI6c2VuZE5vb3BGdW5jV3JhcHBlcixpbnRlcm5hbFNlYXJjaDp7c2V0Om5vb3BGdW5jLHNlbmQ6bm9vcEZ1bmN9LGVjb21tZXJjZTp7ZGlzcGxheUNhcnQ6e3Byb2R1Y3RzOnNldE5vb3BGdW5jV3JhcHBlcixjYXJ0OnNldE5vb3BGdW5jV3JhcHBlcn0sdXBkYXRlQ2FydDp7Y2FydDpzZXROb29wRnVuY1dyYXBwZXJ9LGRpc3BsYXlQcm9kdWN0Ontwcm9kdWN0czpzZXROb29wRnVuY1dyYXBwZXJ9LGRpc3BsYXlQYWdlUHJvZHVjdDp7cHJvZHVjdHM6c2V0Tm9vcEZ1bmNXcmFwcGVyfSxhZGRQcm9kdWN0Ontwcm9kdWN0czpzZXROb29wRnVuY1dyYXBwZXJ9LHJlbW92ZVByb2R1Y3Q6e3Byb2R1Y3RzOnNldE5vb3BGdW5jV3JhcHBlcn19LGlkZW50aWZpZWRWaXNpdG9yOnt1bnNldDpub29wRnVuY30scGFnZTp7c2V0Om5vb3BGdW5jLHNlbmQ6bm9vcEZ1bmN9LHNlbGZQcm9tb3Rpb246e2FkZDpub29wRnVuYyxzZW5kOm5vb3BGdW5jfSxwcml2YWN5OntzZXRWaXNpdG9yTW9kZTpub29wRnVuYyxnZXRWaXNpdG9yTW9kZTpub29wRnVuYyxoaXQ6bm9vcEZ1bmN9LHJpY2hNZWRpYTp7YWRkOm5vb3BGdW5jLHNlbmQ6bm9vcEZ1bmMscmVtb3ZlOm5vb3BGdW5jLHJlbW92ZUFsbDpub29wRnVuY319O3ZhciBzbWFydFRhZ1dyYXBwZXI9e1RyYWNrZXI6e1RhZzpmdW5jdGlvbigpe3JldHVybiBuZXcgdGFnfX19O3dpbmRvdy5BVEludGVybmV0PXNtYXJ0VGFnV3JhcHBlcixmdW5jdGlvbihzb3VyY2Upe2lmKCEwPT09c291cmNlLnZlcmJvc2Upe3RyeXt2YXIgbG9nPWNvbnNvbGUubG9nLmJpbmQoY29uc29sZSksdHJhY2U9Y29uc29sZS50cmFjZS5iaW5kKGNvbnNvbGUpLHByZWZpeD1zb3VyY2UucnVsZVRleHR8fCIiO2lmKHNvdXJjZS5kb21haW5OYW1lKXt2YXIgcnVsZVN0YXJ0SW5kZXgsQUdfU0NSSVBUTEVUX01BUktFUj0iIyUjLy8iLFVCT19TQ1JJUFRMRVRfTUFSS0VSPSIjIytqcyI7c291cmNlLnJ1bGVUZXh0LmluZGV4T2YoQUdfU0NSSVBUTEVUX01BUktFUik+LTE/cnVsZVN0YXJ0SW5kZXg9c291cmNlLnJ1bGVUZXh0LmluZGV4T2YoQUdfU0NSSVBUTEVUX01BUktFUik6c291cmNlLnJ1bGVUZXh0LmluZGV4T2YoVUJPX1NDUklQVExFVF9NQVJLRVIpPi0xJiYocnVsZVN0YXJ0SW5kZXg9c291cmNlLnJ1bGVUZXh0LmluZGV4T2YoVUJPX1NDUklQVExFVF9NQVJLRVIpKTt2YXIgcnVsZVBhcnQ9c291cmNlLnJ1bGVUZXh0LnNsaWNlKHJ1bGVTdGFydEluZGV4KTtwcmVmaXg9IiIuY29uY2F0KHNvdXJjZS5kb21haW5OYW1lKS5jb25jYXQocnVsZVBhcnQpfWxvZygiIi5jb25jYXQocHJlZml4LCIgdHJhY2Ugc3RhcnQiKSksdHJhY2UmJnRyYWNlKCksbG9nKCIiLmNvbmNhdChwcmVmaXgsIiB0cmFjZSBlbmQiKSl9Y2F0Y2goZSl7fSJmdW5jdGlvbiI9PXR5cGVvZiB3aW5kb3cuX19kZWJ1ZyYmd2luZG93Ll9fZGVidWcoc291cmNlKX19KHNvdXJjZSl9KS5hcHBseSh0aGlzLHVwZGF0ZWRBcmdzKX1jYXRjaChlKXtjb25zb2xlLmxvZyhlKX19KHtuYW1lOiJhdGktc21hcnR0YWciLGFyZ3M6W119LFtdKTs="
},
{
"title": "didomi-loader",
"aliases": [],
"isBlocking": false,
"contentType": "application/javascript;base64",
- "content": "IWZ1bmN0aW9uKHNvdXJjZSxhcmdzKXtmdW5jdGlvbiBub29wRnVuYygpe31mdW5jdGlvbiBub29wQXJyYXkoKXtyZXR1cm5bXX1mdW5jdGlvbiB0cnVlRnVuYygpe3JldHVybiEwfWZ1bmN0aW9uIGZhbHNlRnVuYygpe3JldHVybiExfWNvbnN0IHVwZGF0ZWRBcmdzPWFyZ3M/W10uY29uY2F0KHNvdXJjZSkuY29uY2F0KGFyZ3MpOltzb3VyY2VdO3RyeXsoZnVuY3Rpb24oc291cmNlKXtmdW5jdGlvbiBVc2VyQ29uc2VudFN0YXR1c0ZvclZlbmRvclN1YnNjcmliZSgpe31mdW5jdGlvbiBVc2VyQ29uc2VudFN0YXR1c0ZvclZlbmRvcigpe31Vc2VyQ29uc2VudFN0YXR1c0ZvclZlbmRvclN1YnNjcmliZS5wcm90b3R5cGUuZmlsdGVyPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBVc2VyQ29uc2VudFN0YXR1c0ZvclZlbmRvclN1YnNjcmliZX0sVXNlckNvbnNlbnRTdGF0dXNGb3JWZW5kb3JTdWJzY3JpYmUucHJvdG90eXBlLnN1YnNjcmliZT1ub29wRnVuYyxVc2VyQ29uc2VudFN0YXR1c0ZvclZlbmRvci5wcm90b3R5cGUuZmlyc3Q9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IFVzZXJDb25zZW50U3RhdHVzRm9yVmVuZG9yU3Vic2NyaWJlfSxVc2VyQ29uc2VudFN0YXR1c0ZvclZlbmRvci5wcm90b3R5cGUuZmlsdGVyPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBVc2VyQ29uc2VudFN0YXR1c0ZvclZlbmRvclN1YnNjcmliZX0sVXNlckNvbnNlbnRTdGF0dXNGb3JWZW5kb3IucHJvdG90eXBlLnN1YnNjcmliZT1ub29wRnVuYzt2YXIgRGlkb21pV3JhcHBlcj17aXNDb25zZW50UmVxdWlyZWQ6ZmFsc2VGdW5jLGdldFVzZXJDb25zZW50U3RhdHVzRm9yUHVycG9zZTp0cnVlRnVuYyxnZXRVc2VyQ29uc2VudFN0YXR1czp0cnVlRnVuYyxnZXRVc2VyU3RhdHVzOm5vb3BGdW5jLGdldFJlcXVpcmVkUHVycG9zZXM6bm9vcEFycmF5LGdldFVzZXJDb25zZW50U3RhdHVzRm9yVmVuZG9yOnRydWVGdW5jLFB1cnBvc2VzOntDb29raWVzOiJjb29raWVzIn0sbm90aWNlOntjb25maWd1cmU6bm9vcEZ1bmMsaGlkZTpub29wRnVuYyxpc1Zpc2libGU6ZmFsc2VGdW5jLHNob3c6bm9vcEZ1bmMsc2hvd0RhdGFQcm9jZXNzaW5nOnRydWVGdW5jfSxpc1VzZXJDb25zZW50U3RhdHVzUGFydGlhbDpmYWxzZUZ1bmMsb246ZnVuY3Rpb24oKXtyZXR1cm57YWN0aW9uczp7fSxlbWl0dGVyOnt9LHNlcnZpY2VzOnt9LHN0b3JlOnt9fX0sc2hvdWxkQ29uc2VudEJlQ29sbGVjdGVkOmZhbHNlRnVuYyxnZXRVc2VyQ29uc2VudFN0YXR1c0ZvckFsbDpub29wRnVuYyxnZXRPYnNlcnZhYmxlT25Vc2VyQ29uc2VudFN0YXR1c0ZvclZlbmRvcjpmdW5jdGlvbigpe3JldHVybiBuZXcgVXNlckNvbnNlbnRTdGF0dXNGb3JWZW5kb3J9fTt3aW5kb3cuRGlkb21pPURpZG9taVdyYXBwZXIsd2luZG93LmRpZG9taVN0YXRlPXtkaWRvbWlFeHBlcmltZW50SWQ6IiIsZGlkb21pRXhwZXJpbWVudFVzZXJHcm91cDoiIixkaWRvbWlHRFBSQXBwbGllczoxLGRpZG9taUlBQkNvbnNlbnQ6IiIsZGlkb21pUHVycG9zZXNDb25zZW50OiIiLGRpZG9taVB1cnBvc2VzQ29uc2VudERlbmllZDoiIixkaWRvbWlQdXJwb3Nlc0NvbnNlbnRVbmtub3duOiIiLGRpZG9taVZlbmRvcnNDb25zZW50OiIiLGRpZG9taVZlbmRvcnNDb25zZW50RGVuaWVkOiIiLGRpZG9taVZlbmRvcnNDb25zZW50VW5rbm93bjoiIixkaWRvbWlWZW5kb3JzUmF3Q29uc2VudDoiIixkaWRvbWlWZW5kb3JzUmF3Q29uc2VudERlbmllZDoiIixkaWRvbWlWZW5kb3JzUmF3Q29uc2VudFVua25vd246IiJ9O3ZhciB0Y0RhdGE9e2V2ZW50U3RhdHVzOiJ0Y2xvYWRlZCIsZ2RwckFwcGxpZXM6ITEsbGlzdGVuZXJJZDpub29wRnVuYyx2ZW5kb3I6e2NvbnNlbnRzOltdfSxwdXJwb3NlOntjb25zZW50czpbXX19O3dpbmRvdy5fX3RjZmFwaT1mdW5jdGlvbihjb21tYW5kLHZlcnNpb24sY2FsbGJhY2speyJmdW5jdGlvbiI9PXR5cGVvZiBjYWxsYmFjayYmInJlbW92ZUV2ZW50TGlzdGVuZXIiIT09Y29tbWFuZCYmY2FsbGJhY2sodGNEYXRhLCEwKX07dmFyIGRpZG9taUV2ZW50TGlzdGVuZXJzV3JhcHBlcj17c3R1YjohMCxwdXNoOm5vb3BGdW5jfTt3aW5kb3cuZGlkb21pRXZlbnRMaXN0ZW5lcnM9ZGlkb21pRXZlbnRMaXN0ZW5lcnNXcmFwcGVyO3ZhciBkaWRvbWlPblJlYWR5V3JhcHBlcj17c3R1YjohMCxwdXNoOmZ1bmN0aW9uKGFyZyl7ImZ1bmN0aW9uIj09dHlwZW9mIGFyZyYmKCJjb21wbGV0ZSIhPT1kb2N1bWVudC5yZWFkeVN0YXRlP3dpbmRvdy5hZGRFdmVudExpc3RlbmVyKCJsb2FkIiwoZnVuY3Rpb24oKXtzZXRUaW1lb3V0KGFyZyh3aW5kb3cuRGlkb21pKSl9KSk6c2V0VGltZW91dChhcmcod2luZG93LkRpZG9taSkpKX19O3dpbmRvdy5kaWRvbWlPblJlYWR5PXdpbmRvdy5kaWRvbWlPblJlYWR5fHxkaWRvbWlPblJlYWR5V3JhcHBlcixBcnJheS5pc0FycmF5KHdpbmRvdy5kaWRvbWlPblJlYWR5KSYmd2luZG93LmRpZG9taU9uUmVhZHkuZm9yRWFjaCgoZnVuY3Rpb24oYXJnKXtpZigiZnVuY3Rpb24iPT10eXBlb2YgYXJnKXRyeXtzZXRUaW1lb3V0KGFyZyh3aW5kb3cuRGlkb21pKSl9Y2F0Y2goZSl7fX0pKSxmdW5jdGlvbihzb3VyY2UsbWVzc2FnZSl7aWYoITA9PT1zb3VyY2UudmVyYm9zZSl7dHJ5e3ZhciBsb2c9Y29uc29sZS5sb2cuYmluZChjb25zb2xlKSx0cmFjZT1jb25zb2xlLnRyYWNlLmJpbmQoY29uc29sZSkscHJlZml4PXNvdXJjZS5ydWxlVGV4dHx8IiI7aWYoc291cmNlLmRvbWFpbk5hbWUpe3ZhciBydWxlU3RhcnRJbmRleCxBR19TQ1JJUFRMRVRfTUFSS0VSPSIjJSMvLyIsVUJPX1NDUklQVExFVF9NQVJLRVI9IiMjK2pzIjtzb3VyY2UucnVsZVRleHQuaW5kZXhPZihBR19TQ1JJUFRMRVRfTUFSS0VSKT4tMT9ydWxlU3RhcnRJbmRleD1zb3VyY2UucnVsZVRleHQuaW5kZXhPZihBR19TQ1JJUFRMRVRfTUFSS0VSKTpzb3VyY2UucnVsZVRleHQuaW5kZXhPZihVQk9fU0NSSVBUTEVUX01BUktFUik+LTEmJihydWxlU3RhcnRJbmRleD1zb3VyY2UucnVsZVRleHQuaW5kZXhPZihVQk9fU0NSSVBUTEVUX01BUktFUikpO3ZhciBydWxlUGFydD1zb3VyY2UucnVsZVRleHQuc2xpY2UocnVsZVN0YXJ0SW5kZXgpO3ByZWZpeD0iIi5jb25jYXQoc291cmNlLmRvbWFpbk5hbWUpLmNvbmNhdChydWxlUGFydCl9dmFyIExPR19NQVJLRVI9ImxvZzogIjttZXNzYWdlJiYoLTE9PT1tZXNzYWdlLmluZGV4T2YoTE9HX01BUktFUik/bG9nKCIiLmNvbmNhdChwcmVmaXgsIiBtZXNzYWdlOlxuIikuY29uY2F0KG1lc3NhZ2UpKTpsb2cobWVzc2FnZS5zbGljZShMT0dfTUFSS0VSLmxlbmd0aCkpKSxsb2coIiIuY29uY2F0KHByZWZpeCwiIHRyYWNlIHN0YXJ0IikpLHRyYWNlJiZ0cmFjZSgpLGxvZygiIi5jb25jYXQocHJlZml4LCIgdHJhY2UgZW5kIikpfWNhdGNoKGUpe30iZnVuY3Rpb24iPT10eXBlb2Ygd2luZG93Ll9fZGVidWcmJndpbmRvdy5fX2RlYnVnKHNvdXJjZSl9fShzb3VyY2UpfSkuYXBwbHkodGhpcyx1cGRhdGVkQXJncyl9Y2F0Y2goZSl7Y29uc29sZS5sb2coZSl9fSh7bmFtZToiZGlkb21pLWxvYWRlciIsYXJnczpbXX0sW10pOw=="
+ "content": "IWZ1bmN0aW9uKHNvdXJjZSxhcmdzKXtmdW5jdGlvbiBub29wRnVuYygpe31mdW5jdGlvbiBub29wQXJyYXkoKXtyZXR1cm5bXX1mdW5jdGlvbiB0cnVlRnVuYygpe3JldHVybiEwfWZ1bmN0aW9uIGZhbHNlRnVuYygpe3JldHVybiExfWNvbnN0IHVwZGF0ZWRBcmdzPWFyZ3M/W10uY29uY2F0KHNvdXJjZSkuY29uY2F0KGFyZ3MpOltzb3VyY2VdO3RyeXsoZnVuY3Rpb24oc291cmNlKXtmdW5jdGlvbiBVc2VyQ29uc2VudFN0YXR1c0ZvclZlbmRvclN1YnNjcmliZSgpe31mdW5jdGlvbiBVc2VyQ29uc2VudFN0YXR1c0ZvclZlbmRvcigpe31Vc2VyQ29uc2VudFN0YXR1c0ZvclZlbmRvclN1YnNjcmliZS5wcm90b3R5cGUuZmlsdGVyPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBVc2VyQ29uc2VudFN0YXR1c0ZvclZlbmRvclN1YnNjcmliZX0sVXNlckNvbnNlbnRTdGF0dXNGb3JWZW5kb3JTdWJzY3JpYmUucHJvdG90eXBlLnN1YnNjcmliZT1ub29wRnVuYyxVc2VyQ29uc2VudFN0YXR1c0ZvclZlbmRvci5wcm90b3R5cGUuZmlyc3Q9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IFVzZXJDb25zZW50U3RhdHVzRm9yVmVuZG9yU3Vic2NyaWJlfSxVc2VyQ29uc2VudFN0YXR1c0ZvclZlbmRvci5wcm90b3R5cGUuZmlsdGVyPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBVc2VyQ29uc2VudFN0YXR1c0ZvclZlbmRvclN1YnNjcmliZX0sVXNlckNvbnNlbnRTdGF0dXNGb3JWZW5kb3IucHJvdG90eXBlLnN1YnNjcmliZT1ub29wRnVuYzt2YXIgRGlkb21pV3JhcHBlcj17aXNDb25zZW50UmVxdWlyZWQ6ZmFsc2VGdW5jLGdldFVzZXJDb25zZW50U3RhdHVzRm9yUHVycG9zZTp0cnVlRnVuYyxnZXRVc2VyQ29uc2VudFN0YXR1czp0cnVlRnVuYyxnZXRVc2VyU3RhdHVzOm5vb3BGdW5jLGdldFJlcXVpcmVkUHVycG9zZXM6bm9vcEFycmF5LGdldFVzZXJDb25zZW50U3RhdHVzRm9yVmVuZG9yOnRydWVGdW5jLFB1cnBvc2VzOntDb29raWVzOiJjb29raWVzIn0sbm90aWNlOntjb25maWd1cmU6bm9vcEZ1bmMsaGlkZTpub29wRnVuYyxpc1Zpc2libGU6ZmFsc2VGdW5jLHNob3c6bm9vcEZ1bmMsc2hvd0RhdGFQcm9jZXNzaW5nOnRydWVGdW5jfSxpc1VzZXJDb25zZW50U3RhdHVzUGFydGlhbDpmYWxzZUZ1bmMsb246ZnVuY3Rpb24oKXtyZXR1cm57YWN0aW9uczp7fSxlbWl0dGVyOnt9LHNlcnZpY2VzOnt9LHN0b3JlOnt9fX0sc2hvdWxkQ29uc2VudEJlQ29sbGVjdGVkOmZhbHNlRnVuYyxnZXRVc2VyQ29uc2VudFN0YXR1c0ZvckFsbDpub29wRnVuYyxnZXRPYnNlcnZhYmxlT25Vc2VyQ29uc2VudFN0YXR1c0ZvclZlbmRvcjpmdW5jdGlvbigpe3JldHVybiBuZXcgVXNlckNvbnNlbnRTdGF0dXNGb3JWZW5kb3J9fTt3aW5kb3cuRGlkb21pPURpZG9taVdyYXBwZXIsd2luZG93LmRpZG9taVN0YXRlPXtkaWRvbWlFeHBlcmltZW50SWQ6IiIsZGlkb21pRXhwZXJpbWVudFVzZXJHcm91cDoiIixkaWRvbWlHRFBSQXBwbGllczoxLGRpZG9taUlBQkNvbnNlbnQ6IiIsZGlkb21pUHVycG9zZXNDb25zZW50OiIiLGRpZG9taVB1cnBvc2VzQ29uc2VudERlbmllZDoiIixkaWRvbWlQdXJwb3Nlc0NvbnNlbnRVbmtub3duOiIiLGRpZG9taVZlbmRvcnNDb25zZW50OiIiLGRpZG9taVZlbmRvcnNDb25zZW50RGVuaWVkOiIiLGRpZG9taVZlbmRvcnNDb25zZW50VW5rbm93bjoiIixkaWRvbWlWZW5kb3JzUmF3Q29uc2VudDoiIixkaWRvbWlWZW5kb3JzUmF3Q29uc2VudERlbmllZDoiIixkaWRvbWlWZW5kb3JzUmF3Q29uc2VudFVua25vd246IiJ9O3ZhciB0Y0RhdGE9e2V2ZW50U3RhdHVzOiJ0Y2xvYWRlZCIsZ2RwckFwcGxpZXM6ITEsbGlzdGVuZXJJZDpub29wRnVuYyx2ZW5kb3I6e2NvbnNlbnRzOltdfSxwdXJwb3NlOntjb25zZW50czpbXX19O3dpbmRvdy5fX3RjZmFwaT1mdW5jdGlvbihjb21tYW5kLHZlcnNpb24sY2FsbGJhY2speyJmdW5jdGlvbiI9PXR5cGVvZiBjYWxsYmFjayYmInJlbW92ZUV2ZW50TGlzdGVuZXIiIT09Y29tbWFuZCYmY2FsbGJhY2sodGNEYXRhLCEwKX07dmFyIGRpZG9taUV2ZW50TGlzdGVuZXJzV3JhcHBlcj17c3R1YjohMCxwdXNoOm5vb3BGdW5jfTt3aW5kb3cuZGlkb21pRXZlbnRMaXN0ZW5lcnM9ZGlkb21pRXZlbnRMaXN0ZW5lcnNXcmFwcGVyO3ZhciBkaWRvbWlPblJlYWR5V3JhcHBlcj17c3R1YjohMCxwdXNoOmZ1bmN0aW9uKGFyZyl7ImZ1bmN0aW9uIj09dHlwZW9mIGFyZyYmKCJjb21wbGV0ZSIhPT1kb2N1bWVudC5yZWFkeVN0YXRlP3dpbmRvdy5hZGRFdmVudExpc3RlbmVyKCJsb2FkIiwoZnVuY3Rpb24oKXtzZXRUaW1lb3V0KGFyZyh3aW5kb3cuRGlkb21pKSl9KSk6c2V0VGltZW91dChhcmcod2luZG93LkRpZG9taSkpKX19O3dpbmRvdy5kaWRvbWlPblJlYWR5PXdpbmRvdy5kaWRvbWlPblJlYWR5fHxkaWRvbWlPblJlYWR5V3JhcHBlcixBcnJheS5pc0FycmF5KHdpbmRvdy5kaWRvbWlPblJlYWR5KSYmd2luZG93LmRpZG9taU9uUmVhZHkuZm9yRWFjaCgoZnVuY3Rpb24oYXJnKXtpZigiZnVuY3Rpb24iPT10eXBlb2YgYXJnKXRyeXtzZXRUaW1lb3V0KGFyZyh3aW5kb3cuRGlkb21pKSl9Y2F0Y2goZSl7fX0pKSxmdW5jdGlvbihzb3VyY2Upe2lmKCEwPT09c291cmNlLnZlcmJvc2Upe3RyeXt2YXIgbG9nPWNvbnNvbGUubG9nLmJpbmQoY29uc29sZSksdHJhY2U9Y29uc29sZS50cmFjZS5iaW5kKGNvbnNvbGUpLHByZWZpeD1zb3VyY2UucnVsZVRleHR8fCIiO2lmKHNvdXJjZS5kb21haW5OYW1lKXt2YXIgcnVsZVN0YXJ0SW5kZXgsQUdfU0NSSVBUTEVUX01BUktFUj0iIyUjLy8iLFVCT19TQ1JJUFRMRVRfTUFSS0VSPSIjIytqcyI7c291cmNlLnJ1bGVUZXh0LmluZGV4T2YoQUdfU0NSSVBUTEVUX01BUktFUik+LTE/cnVsZVN0YXJ0SW5kZXg9c291cmNlLnJ1bGVUZXh0LmluZGV4T2YoQUdfU0NSSVBUTEVUX01BUktFUik6c291cmNlLnJ1bGVUZXh0LmluZGV4T2YoVUJPX1NDUklQVExFVF9NQVJLRVIpPi0xJiYocnVsZVN0YXJ0SW5kZXg9c291cmNlLnJ1bGVUZXh0LmluZGV4T2YoVUJPX1NDUklQVExFVF9NQVJLRVIpKTt2YXIgcnVsZVBhcnQ9c291cmNlLnJ1bGVUZXh0LnNsaWNlKHJ1bGVTdGFydEluZGV4KTtwcmVmaXg9IiIuY29uY2F0KHNvdXJjZS5kb21haW5OYW1lKS5jb25jYXQocnVsZVBhcnQpfWxvZygiIi5jb25jYXQocHJlZml4LCIgdHJhY2Ugc3RhcnQiKSksdHJhY2UmJnRyYWNlKCksbG9nKCIiLmNvbmNhdChwcmVmaXgsIiB0cmFjZSBlbmQiKSl9Y2F0Y2goZSl7fSJmdW5jdGlvbiI9PXR5cGVvZiB3aW5kb3cuX19kZWJ1ZyYmd2luZG93Ll9fZGVidWcoc291cmNlKX19KHNvdXJjZSl9KS5hcHBseSh0aGlzLHVwZGF0ZWRBcmdzKX1jYXRjaChlKXtjb25zb2xlLmxvZyhlKX19KHtuYW1lOiJkaWRvbWktbG9hZGVyIixhcmdzOltdfSxbXSk7"
},
{
"title": "fingerprintjs2",
@@ -182,7 +182,7 @@
],
"isBlocking": false,
"contentType": "application/javascript;base64",
- "content": "IWZ1bmN0aW9uKHNvdXJjZSxhcmdzKXtjb25zdCB1cGRhdGVkQXJncz1hcmdzP1tdLmNvbmNhdChzb3VyY2UpLmNvbmNhdChhcmdzKTpbc291cmNlXTt0cnl7KGZ1bmN0aW9uKHNvdXJjZSl7Zm9yKHZhciBicm93c2VySWQ9IiIsaT0wO2k8ODtpKz0xKWJyb3dzZXJJZCs9KDY1NTM2Kk1hdGgucmFuZG9tKCkrNDA5NikudG9TdHJpbmcoMTYpLnNsaWNlKC00KTt2YXIgRmluZ2VycHJpbnQyPWZ1bmN0aW9uKCl7fTtGaW5nZXJwcmludDIucHJvdG90eXBlPXtnZXQ6RmluZ2VycHJpbnQyLmdldD1mdW5jdGlvbihvcHRpb25zLGNhbGxiYWNrKXtjYWxsYmFja3x8KGNhbGxiYWNrPW9wdGlvbnMpLHNldFRpbWVvdXQoKGZ1bmN0aW9uKCl7Y2FsbGJhY2smJmNhbGxiYWNrKGJyb3dzZXJJZCxbXSl9KSwxKX19LHdpbmRvdy5GaW5nZXJwcmludDI9RmluZ2VycHJpbnQyLGZ1bmN0aW9uKHNvdXJjZSxtZXNzYWdlKXtpZighMD09PXNvdXJjZS52ZXJib3NlKXt0cnl7dmFyIGxvZz1jb25zb2xlLmxvZy5iaW5kKGNvbnNvbGUpLHRyYWNlPWNvbnNvbGUudHJhY2UuYmluZChjb25zb2xlKSxwcmVmaXg9c291cmNlLnJ1bGVUZXh0fHwiIjtpZihzb3VyY2UuZG9tYWluTmFtZSl7dmFyIHJ1bGVTdGFydEluZGV4LEFHX1NDUklQVExFVF9NQVJLRVI9IiMlIy8vIixVQk9fU0NSSVBUTEVUX01BUktFUj0iIyMranMiO3NvdXJjZS5ydWxlVGV4dC5pbmRleE9mKEFHX1NDUklQVExFVF9NQVJLRVIpPi0xP3J1bGVTdGFydEluZGV4PXNvdXJjZS5ydWxlVGV4dC5pbmRleE9mKEFHX1NDUklQVExFVF9NQVJLRVIpOnNvdXJjZS5ydWxlVGV4dC5pbmRleE9mKFVCT19TQ1JJUFRMRVRfTUFSS0VSKT4tMSYmKHJ1bGVTdGFydEluZGV4PXNvdXJjZS5ydWxlVGV4dC5pbmRleE9mKFVCT19TQ1JJUFRMRVRfTUFSS0VSKSk7dmFyIHJ1bGVQYXJ0PXNvdXJjZS5ydWxlVGV4dC5zbGljZShydWxlU3RhcnRJbmRleCk7cHJlZml4PSIiLmNvbmNhdChzb3VyY2UuZG9tYWluTmFtZSkuY29uY2F0KHJ1bGVQYXJ0KX12YXIgTE9HX01BUktFUj0ibG9nOiAiO21lc3NhZ2UmJigtMT09PW1lc3NhZ2UuaW5kZXhPZihMT0dfTUFSS0VSKT9sb2coIiIuY29uY2F0KHByZWZpeCwiIG1lc3NhZ2U6XG4iKS5jb25jYXQobWVzc2FnZSkpOmxvZyhtZXNzYWdlLnNsaWNlKExPR19NQVJLRVIubGVuZ3RoKSkpLGxvZygiIi5jb25jYXQocHJlZml4LCIgdHJhY2Ugc3RhcnQiKSksdHJhY2UmJnRyYWNlKCksbG9nKCIiLmNvbmNhdChwcmVmaXgsIiB0cmFjZSBlbmQiKSl9Y2F0Y2goZSl7fSJmdW5jdGlvbiI9PXR5cGVvZiB3aW5kb3cuX19kZWJ1ZyYmd2luZG93Ll9fZGVidWcoc291cmNlKX19KHNvdXJjZSl9KS5hcHBseSh0aGlzLHVwZGF0ZWRBcmdzKX1jYXRjaChlKXtjb25zb2xlLmxvZyhlKX19KHtuYW1lOiJmaW5nZXJwcmludGpzMiIsYXJnczpbXX0sW10pOw=="
+ "content": "IWZ1bmN0aW9uKHNvdXJjZSxhcmdzKXtjb25zdCB1cGRhdGVkQXJncz1hcmdzP1tdLmNvbmNhdChzb3VyY2UpLmNvbmNhdChhcmdzKTpbc291cmNlXTt0cnl7KGZ1bmN0aW9uKHNvdXJjZSl7Zm9yKHZhciBicm93c2VySWQ9IiIsaT0wO2k8ODtpKz0xKWJyb3dzZXJJZCs9KDY1NTM2Kk1hdGgucmFuZG9tKCkrNDA5NikudG9TdHJpbmcoMTYpLnNsaWNlKC00KTt2YXIgRmluZ2VycHJpbnQyPWZ1bmN0aW9uKCl7fTtGaW5nZXJwcmludDIucHJvdG90eXBlPXtnZXQ6RmluZ2VycHJpbnQyLmdldD1mdW5jdGlvbihvcHRpb25zLGNhbGxiYWNrKXtjYWxsYmFja3x8KGNhbGxiYWNrPW9wdGlvbnMpLHNldFRpbWVvdXQoKGZ1bmN0aW9uKCl7Y2FsbGJhY2smJmNhbGxiYWNrKGJyb3dzZXJJZCxbXSl9KSwxKX19LHdpbmRvdy5GaW5nZXJwcmludDI9RmluZ2VycHJpbnQyLGZ1bmN0aW9uKHNvdXJjZSl7aWYoITA9PT1zb3VyY2UudmVyYm9zZSl7dHJ5e3ZhciBsb2c9Y29uc29sZS5sb2cuYmluZChjb25zb2xlKSx0cmFjZT1jb25zb2xlLnRyYWNlLmJpbmQoY29uc29sZSkscHJlZml4PXNvdXJjZS5ydWxlVGV4dHx8IiI7aWYoc291cmNlLmRvbWFpbk5hbWUpe3ZhciBydWxlU3RhcnRJbmRleCxBR19TQ1JJUFRMRVRfTUFSS0VSPSIjJSMvLyIsVUJPX1NDUklQVExFVF9NQVJLRVI9IiMjK2pzIjtzb3VyY2UucnVsZVRleHQuaW5kZXhPZihBR19TQ1JJUFRMRVRfTUFSS0VSKT4tMT9ydWxlU3RhcnRJbmRleD1zb3VyY2UucnVsZVRleHQuaW5kZXhPZihBR19TQ1JJUFRMRVRfTUFSS0VSKTpzb3VyY2UucnVsZVRleHQuaW5kZXhPZihVQk9fU0NSSVBUTEVUX01BUktFUik+LTEmJihydWxlU3RhcnRJbmRleD1zb3VyY2UucnVsZVRleHQuaW5kZXhPZihVQk9fU0NSSVBUTEVUX01BUktFUikpO3ZhciBydWxlUGFydD1zb3VyY2UucnVsZVRleHQuc2xpY2UocnVsZVN0YXJ0SW5kZXgpO3ByZWZpeD0iIi5jb25jYXQoc291cmNlLmRvbWFpbk5hbWUpLmNvbmNhdChydWxlUGFydCl9bG9nKCIiLmNvbmNhdChwcmVmaXgsIiB0cmFjZSBzdGFydCIpKSx0cmFjZSYmdHJhY2UoKSxsb2coIiIuY29uY2F0KHByZWZpeCwiIHRyYWNlIGVuZCIpKX1jYXRjaChlKXt9ImZ1bmN0aW9uIj09dHlwZW9mIHdpbmRvdy5fX2RlYnVnJiZ3aW5kb3cuX19kZWJ1Zyhzb3VyY2UpfX0oc291cmNlKX0pLmFwcGx5KHRoaXMsdXBkYXRlZEFyZ3MpfWNhdGNoKGUpe2NvbnNvbGUubG9nKGUpfX0oe25hbWU6ImZpbmdlcnByaW50anMyIixhcmdzOltdfSxbXSk7"
},
{
"title": "fingerprintjs3",
@@ -192,14 +192,14 @@
],
"isBlocking": false,
"contentType": "application/javascript;base64",
- "content": "IWZ1bmN0aW9uKHNvdXJjZSxhcmdzKXtmdW5jdGlvbiBub29wU3RyKCl7cmV0dXJuIiJ9Y29uc3QgdXBkYXRlZEFyZ3M9YXJncz9bXS5jb25jYXQoc291cmNlKS5jb25jYXQoYXJncyk6W3NvdXJjZV07dHJ5eyhmdW5jdGlvbihzb3VyY2Upe3ZhciB2aXNpdG9ySWQ9ZnVuY3Rpb24oKXtmb3IodmFyIGlkPSIiLGk9MDtpPDg7aSs9MSlpZCs9KDY1NTM2Kk1hdGgucmFuZG9tKCkrNDA5NikudG9TdHJpbmcoMTYpLnNsaWNlKC00KTtyZXR1cm4gaWR9KCksRmluZ2VycHJpbnRKUz1mdW5jdGlvbigpe307RmluZ2VycHJpbnRKUy5wcm90b3R5cGU9e2xvYWQ6ZnVuY3Rpb24oKXtyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKG5ldyBGaW5nZXJwcmludEpTKX0sZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIFByb21pc2UucmVzb2x2ZSh7dmlzaXRvcklkOnZpc2l0b3JJZH0pfSxoYXNoQ29tcG9uZW50czpub29wU3RyfSx3aW5kb3cuRmluZ2VycHJpbnRKUz1uZXcgRmluZ2VycHJpbnRKUyxmdW5jdGlvbihzb3VyY2UsbWVzc2FnZSl7aWYoITA9PT1zb3VyY2UudmVyYm9zZSl7dHJ5e3ZhciBsb2c9Y29uc29sZS5sb2cuYmluZChjb25zb2xlKSx0cmFjZT1jb25zb2xlLnRyYWNlLmJpbmQoY29uc29sZSkscHJlZml4PXNvdXJjZS5ydWxlVGV4dHx8IiI7aWYoc291cmNlLmRvbWFpbk5hbWUpe3ZhciBydWxlU3RhcnRJbmRleCxBR19TQ1JJUFRMRVRfTUFSS0VSPSIjJSMvLyIsVUJPX1NDUklQVExFVF9NQVJLRVI9IiMjK2pzIjtzb3VyY2UucnVsZVRleHQuaW5kZXhPZihBR19TQ1JJUFRMRVRfTUFSS0VSKT4tMT9ydWxlU3RhcnRJbmRleD1zb3VyY2UucnVsZVRleHQuaW5kZXhPZihBR19TQ1JJUFRMRVRfTUFSS0VSKTpzb3VyY2UucnVsZVRleHQuaW5kZXhPZihVQk9fU0NSSVBUTEVUX01BUktFUik+LTEmJihydWxlU3RhcnRJbmRleD1zb3VyY2UucnVsZVRleHQuaW5kZXhPZihVQk9fU0NSSVBUTEVUX01BUktFUikpO3ZhciBydWxlUGFydD1zb3VyY2UucnVsZVRleHQuc2xpY2UocnVsZVN0YXJ0SW5kZXgpO3ByZWZpeD0iIi5jb25jYXQoc291cmNlLmRvbWFpbk5hbWUpLmNvbmNhdChydWxlUGFydCl9dmFyIExPR19NQVJLRVI9ImxvZzogIjttZXNzYWdlJiYoLTE9PT1tZXNzYWdlLmluZGV4T2YoTE9HX01BUktFUik/bG9nKCIiLmNvbmNhdChwcmVmaXgsIiBtZXNzYWdlOlxuIikuY29uY2F0KG1lc3NhZ2UpKTpsb2cobWVzc2FnZS5zbGljZShMT0dfTUFSS0VSLmxlbmd0aCkpKSxsb2coIiIuY29uY2F0KHByZWZpeCwiIHRyYWNlIHN0YXJ0IikpLHRyYWNlJiZ0cmFjZSgpLGxvZygiIi5jb25jYXQocHJlZml4LCIgdHJhY2UgZW5kIikpfWNhdGNoKGUpe30iZnVuY3Rpb24iPT10eXBlb2Ygd2luZG93Ll9fZGVidWcmJndpbmRvdy5fX2RlYnVnKHNvdXJjZSl9fShzb3VyY2UpfSkuYXBwbHkodGhpcyx1cGRhdGVkQXJncyl9Y2F0Y2goZSl7Y29uc29sZS5sb2coZSl9fSh7bmFtZToiZmluZ2VycHJpbnRqczMiLGFyZ3M6W119LFtdKTs="
+ "content": "IWZ1bmN0aW9uKHNvdXJjZSxhcmdzKXtmdW5jdGlvbiBub29wU3RyKCl7cmV0dXJuIiJ9Y29uc3QgdXBkYXRlZEFyZ3M9YXJncz9bXS5jb25jYXQoc291cmNlKS5jb25jYXQoYXJncyk6W3NvdXJjZV07dHJ5eyhmdW5jdGlvbihzb3VyY2Upe3ZhciB2aXNpdG9ySWQ9ZnVuY3Rpb24oKXtmb3IodmFyIGlkPSIiLGk9MDtpPDg7aSs9MSlpZCs9KDY1NTM2Kk1hdGgucmFuZG9tKCkrNDA5NikudG9TdHJpbmcoMTYpLnNsaWNlKC00KTtyZXR1cm4gaWR9KCksRmluZ2VycHJpbnRKUz1mdW5jdGlvbigpe307RmluZ2VycHJpbnRKUy5wcm90b3R5cGU9e2xvYWQ6ZnVuY3Rpb24oKXtyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKG5ldyBGaW5nZXJwcmludEpTKX0sZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIFByb21pc2UucmVzb2x2ZSh7dmlzaXRvcklkOnZpc2l0b3JJZH0pfSxoYXNoQ29tcG9uZW50czpub29wU3RyfSx3aW5kb3cuRmluZ2VycHJpbnRKUz1uZXcgRmluZ2VycHJpbnRKUyxmdW5jdGlvbihzb3VyY2Upe2lmKCEwPT09c291cmNlLnZlcmJvc2Upe3RyeXt2YXIgbG9nPWNvbnNvbGUubG9nLmJpbmQoY29uc29sZSksdHJhY2U9Y29uc29sZS50cmFjZS5iaW5kKGNvbnNvbGUpLHByZWZpeD1zb3VyY2UucnVsZVRleHR8fCIiO2lmKHNvdXJjZS5kb21haW5OYW1lKXt2YXIgcnVsZVN0YXJ0SW5kZXgsQUdfU0NSSVBUTEVUX01BUktFUj0iIyUjLy8iLFVCT19TQ1JJUFRMRVRfTUFSS0VSPSIjIytqcyI7c291cmNlLnJ1bGVUZXh0LmluZGV4T2YoQUdfU0NSSVBUTEVUX01BUktFUik+LTE/cnVsZVN0YXJ0SW5kZXg9c291cmNlLnJ1bGVUZXh0LmluZGV4T2YoQUdfU0NSSVBUTEVUX01BUktFUik6c291cmNlLnJ1bGVUZXh0LmluZGV4T2YoVUJPX1NDUklQVExFVF9NQVJLRVIpPi0xJiYocnVsZVN0YXJ0SW5kZXg9c291cmNlLnJ1bGVUZXh0LmluZGV4T2YoVUJPX1NDUklQVExFVF9NQVJLRVIpKTt2YXIgcnVsZVBhcnQ9c291cmNlLnJ1bGVUZXh0LnNsaWNlKHJ1bGVTdGFydEluZGV4KTtwcmVmaXg9IiIuY29uY2F0KHNvdXJjZS5kb21haW5OYW1lKS5jb25jYXQocnVsZVBhcnQpfWxvZygiIi5jb25jYXQocHJlZml4LCIgdHJhY2Ugc3RhcnQiKSksdHJhY2UmJnRyYWNlKCksbG9nKCIiLmNvbmNhdChwcmVmaXgsIiB0cmFjZSBlbmQiKSl9Y2F0Y2goZSl7fSJmdW5jdGlvbiI9PXR5cGVvZiB3aW5kb3cuX19kZWJ1ZyYmd2luZG93Ll9fZGVidWcoc291cmNlKX19KHNvdXJjZSl9KS5hcHBseSh0aGlzLHVwZGF0ZWRBcmdzKX1jYXRjaChlKXtjb25zb2xlLmxvZyhlKX19KHtuYW1lOiJmaW5nZXJwcmludGpzMyIsYXJnczpbXX0sW10pOw=="
},
{
"title": "gemius",
"aliases": [],
"isBlocking": false,
"contentType": "application/javascript;base64",
- "content": "IWZ1bmN0aW9uKHNvdXJjZSxhcmdzKXtmdW5jdGlvbiBub29wRnVuYygpe31jb25zdCB1cGRhdGVkQXJncz1hcmdzP1tdLmNvbmNhdChzb3VyY2UpLmNvbmNhdChhcmdzKTpbc291cmNlXTt0cnl7KGZ1bmN0aW9uKHNvdXJjZSl7dmFyIEdlbWl1c1BsYXllcj1mdW5jdGlvbigpe307R2VtaXVzUGxheWVyLnByb3RvdHlwZT17c2V0VmlkZW9PYmplY3Q6bm9vcEZ1bmMsbmV3UHJvZ3JhbTpub29wRnVuYyxwcm9ncmFtRXZlbnQ6bm9vcEZ1bmMsbmV3QWQ6bm9vcEZ1bmMsYWRFdmVudDpub29wRnVuY30sd2luZG93LkdlbWl1c1BsYXllcj1HZW1pdXNQbGF5ZXIsZnVuY3Rpb24oc291cmNlLG1lc3NhZ2Upe2lmKCEwPT09c291cmNlLnZlcmJvc2Upe3RyeXt2YXIgbG9nPWNvbnNvbGUubG9nLmJpbmQoY29uc29sZSksdHJhY2U9Y29uc29sZS50cmFjZS5iaW5kKGNvbnNvbGUpLHByZWZpeD1zb3VyY2UucnVsZVRleHR8fCIiO2lmKHNvdXJjZS5kb21haW5OYW1lKXt2YXIgcnVsZVN0YXJ0SW5kZXgsQUdfU0NSSVBUTEVUX01BUktFUj0iIyUjLy8iLFVCT19TQ1JJUFRMRVRfTUFSS0VSPSIjIytqcyI7c291cmNlLnJ1bGVUZXh0LmluZGV4T2YoQUdfU0NSSVBUTEVUX01BUktFUik+LTE/cnVsZVN0YXJ0SW5kZXg9c291cmNlLnJ1bGVUZXh0LmluZGV4T2YoQUdfU0NSSVBUTEVUX01BUktFUik6c291cmNlLnJ1bGVUZXh0LmluZGV4T2YoVUJPX1NDUklQVExFVF9NQVJLRVIpPi0xJiYocnVsZVN0YXJ0SW5kZXg9c291cmNlLnJ1bGVUZXh0LmluZGV4T2YoVUJPX1NDUklQVExFVF9NQVJLRVIpKTt2YXIgcnVsZVBhcnQ9c291cmNlLnJ1bGVUZXh0LnNsaWNlKHJ1bGVTdGFydEluZGV4KTtwcmVmaXg9IiIuY29uY2F0KHNvdXJjZS5kb21haW5OYW1lKS5jb25jYXQocnVsZVBhcnQpfXZhciBMT0dfTUFSS0VSPSJsb2c6ICI7bWVzc2FnZSYmKC0xPT09bWVzc2FnZS5pbmRleE9mKExPR19NQVJLRVIpP2xvZygiIi5jb25jYXQocHJlZml4LCIgbWVzc2FnZTpcbiIpLmNvbmNhdChtZXNzYWdlKSk6bG9nKG1lc3NhZ2Uuc2xpY2UoTE9HX01BUktFUi5sZW5ndGgpKSksbG9nKCIiLmNvbmNhdChwcmVmaXgsIiB0cmFjZSBzdGFydCIpKSx0cmFjZSYmdHJhY2UoKSxsb2coIiIuY29uY2F0KHByZWZpeCwiIHRyYWNlIGVuZCIpKX1jYXRjaChlKXt9ImZ1bmN0aW9uIj09dHlwZW9mIHdpbmRvdy5fX2RlYnVnJiZ3aW5kb3cuX19kZWJ1Zyhzb3VyY2UpfX0oc291cmNlKX0pLmFwcGx5KHRoaXMsdXBkYXRlZEFyZ3MpfWNhdGNoKGUpe2NvbnNvbGUubG9nKGUpfX0oe25hbWU6ImdlbWl1cyIsYXJnczpbXX0sW10pOw=="
+ "content": "IWZ1bmN0aW9uKHNvdXJjZSxhcmdzKXtmdW5jdGlvbiBub29wRnVuYygpe31jb25zdCB1cGRhdGVkQXJncz1hcmdzP1tdLmNvbmNhdChzb3VyY2UpLmNvbmNhdChhcmdzKTpbc291cmNlXTt0cnl7KGZ1bmN0aW9uKHNvdXJjZSl7dmFyIEdlbWl1c1BsYXllcj1mdW5jdGlvbigpe307R2VtaXVzUGxheWVyLnByb3RvdHlwZT17c2V0VmlkZW9PYmplY3Q6bm9vcEZ1bmMsbmV3UHJvZ3JhbTpub29wRnVuYyxwcm9ncmFtRXZlbnQ6bm9vcEZ1bmMsbmV3QWQ6bm9vcEZ1bmMsYWRFdmVudDpub29wRnVuY30sd2luZG93LkdlbWl1c1BsYXllcj1HZW1pdXNQbGF5ZXIsZnVuY3Rpb24oc291cmNlKXtpZighMD09PXNvdXJjZS52ZXJib3NlKXt0cnl7dmFyIGxvZz1jb25zb2xlLmxvZy5iaW5kKGNvbnNvbGUpLHRyYWNlPWNvbnNvbGUudHJhY2UuYmluZChjb25zb2xlKSxwcmVmaXg9c291cmNlLnJ1bGVUZXh0fHwiIjtpZihzb3VyY2UuZG9tYWluTmFtZSl7dmFyIHJ1bGVTdGFydEluZGV4LEFHX1NDUklQVExFVF9NQVJLRVI9IiMlIy8vIixVQk9fU0NSSVBUTEVUX01BUktFUj0iIyMranMiO3NvdXJjZS5ydWxlVGV4dC5pbmRleE9mKEFHX1NDUklQVExFVF9NQVJLRVIpPi0xP3J1bGVTdGFydEluZGV4PXNvdXJjZS5ydWxlVGV4dC5pbmRleE9mKEFHX1NDUklQVExFVF9NQVJLRVIpOnNvdXJjZS5ydWxlVGV4dC5pbmRleE9mKFVCT19TQ1JJUFRMRVRfTUFSS0VSKT4tMSYmKHJ1bGVTdGFydEluZGV4PXNvdXJjZS5ydWxlVGV4dC5pbmRleE9mKFVCT19TQ1JJUFRMRVRfTUFSS0VSKSk7dmFyIHJ1bGVQYXJ0PXNvdXJjZS5ydWxlVGV4dC5zbGljZShydWxlU3RhcnRJbmRleCk7cHJlZml4PSIiLmNvbmNhdChzb3VyY2UuZG9tYWluTmFtZSkuY29uY2F0KHJ1bGVQYXJ0KX1sb2coIiIuY29uY2F0KHByZWZpeCwiIHRyYWNlIHN0YXJ0IikpLHRyYWNlJiZ0cmFjZSgpLGxvZygiIi5jb25jYXQocHJlZml4LCIgdHJhY2UgZW5kIikpfWNhdGNoKGUpe30iZnVuY3Rpb24iPT10eXBlb2Ygd2luZG93Ll9fZGVidWcmJndpbmRvdy5fX2RlYnVnKHNvdXJjZSl9fShzb3VyY2UpfSkuYXBwbHkodGhpcyx1cGRhdGVkQXJncyl9Y2F0Y2goZSl7Y29uc29sZS5sb2coZSl9fSh7bmFtZToiZ2VtaXVzIixhcmdzOltdfSxbXSk7"
},
{
"title": "google-analytics-ga",
@@ -209,7 +209,7 @@
],
"isBlocking": false,
"contentType": "application/javascript;base64",
- "content": "IWZ1bmN0aW9uKHNvdXJjZSxhcmdzKXtmdW5jdGlvbiBub29wRnVuYygpe31jb25zdCB1cGRhdGVkQXJncz1hcmdzP1tdLmNvbmNhdChzb3VyY2UpLmNvbmNhdChhcmdzKTpbc291cmNlXTt0cnl7KGZ1bmN0aW9uKHNvdXJjZSl7ZnVuY3Rpb24gR2FxKCl7fUdhcS5wcm90b3R5cGUuTmE9bm9vcEZ1bmMsR2FxLnByb3RvdHlwZS5PPW5vb3BGdW5jLEdhcS5wcm90b3R5cGUuU2E9bm9vcEZ1bmMsR2FxLnByb3RvdHlwZS5UYT1ub29wRnVuYyxHYXEucHJvdG90eXBlLlZhPW5vb3BGdW5jLEdhcS5wcm90b3R5cGUuX2NyZWF0ZUFzeW5jVHJhY2tlcj1ub29wRnVuYyxHYXEucHJvdG90eXBlLl9nZXRBc3luY1RyYWNrZXI9bm9vcEZ1bmMsR2FxLnByb3RvdHlwZS5fZ2V0UGx1Z2luPW5vb3BGdW5jLEdhcS5wcm90b3R5cGUucHVzaD1mdW5jdGlvbihkYXRhKXsiZnVuY3Rpb24iIT10eXBlb2YgZGF0YT8hMSE9PUFycmF5LmlzQXJyYXkoZGF0YSkmJigic3RyaW5nIj09dHlwZW9mIGRhdGFbMF0mJi8oXnxcLilfbGluayQvLnRlc3QoZGF0YVswXSkmJiJzdHJpbmciPT10eXBlb2YgZGF0YVsxXSYmd2luZG93LmxvY2F0aW9uLmFzc2lnbihkYXRhWzFdKSwiX3NldCI9PT1kYXRhWzBdJiYiaGl0Q2FsbGJhY2siPT09ZGF0YVsxXSYmImZ1bmN0aW9uIj09dHlwZW9mIGRhdGFbMl0mJmRhdGFbMl0oKSk6ZGF0YSgpfTt2YXIgZ2FxPW5ldyBHYXEsYXN5bmNUcmFja2Vycz13aW5kb3cuX2dhcXx8W107aWYoQXJyYXkuaXNBcnJheShhc3luY1RyYWNrZXJzKSlmb3IoO2FzeW5jVHJhY2tlcnNbMF07KWdhcS5wdXNoKGFzeW5jVHJhY2tlcnMuc2hpZnQoKSk7ZnVuY3Rpb24gR2F0KCl7fXdpbmRvdy5fZ2FxPWdhcS5xZj1nYXE7dmFyIHRyYWNrZXI9WyJfYWRkSWdub3JlZE9yZ2FuaWMiLCJfYWRkSWdub3JlZFJlZiIsIl9hZGRJdGVtIiwiX2FkZE9yZ2FuaWMiLCJfYWRkVHJhbnMiLCJfY2xlYXJJZ25vcmVkT3JnYW5pYyIsIl9jbGVhcklnbm9yZWRSZWYiLCJfY2xlYXJPcmdhbmljIiwiX2Nvb2tpZVBhdGhDb3B5IiwiX2RlbGV0ZUN1c3RvbVZhciIsIl9nZXROYW1lIiwiX3NldEFjY291bnQiLCJfZ2V0QWNjb3VudCIsIl9nZXRDbGllbnRJbmZvIiwiX2dldERldGVjdEZsYXNoIiwiX2dldERldGVjdFRpdGxlIiwiX2dldExpbmtlclVybCIsIl9nZXRMb2NhbEdpZlBhdGgiLCJfZ2V0U2VydmljZU1vZGUiLCJfZ2V0VmVyc2lvbiIsIl9nZXRWaXNpdG9yQ3VzdG9tVmFyIiwiX2luaXREYXRhIiwiX2xpbmsiLCJfbGlua0J5UG9zdCIsIl9zZXRBbGxvd0FuY2hvciIsIl9zZXRBbGxvd0hhc2giLCJfc2V0QWxsb3dMaW5rZXIiLCJfc2V0Q2FtcENvbnRlbnRLZXkiLCJfc2V0Q2FtcE1lZGl1bUtleSIsIl9zZXRDYW1wTmFtZUtleSIsIl9zZXRDYW1wTk9LZXkiLCJfc2V0Q2FtcFNvdXJjZUtleSIsIl9zZXRDYW1wVGVybUtleSIsIl9zZXRDYW1wYWlnbkNvb2tpZVRpbWVvdXQiLCJfc2V0Q2FtcGFpZ25UcmFjayIsIl9zZXRDbGllbnRJbmZvIiwiX3NldENvb2tpZVBhdGgiLCJfc2V0Q29va2llUGVyc2lzdGVuY2UiLCJfc2V0Q29va2llVGltZW91dCIsIl9zZXRDdXN0b21WYXIiLCJfc2V0RGV0ZWN0Rmxhc2giLCJfc2V0RGV0ZWN0VGl0bGUiLCJfc2V0RG9tYWluTmFtZSIsIl9zZXRMb2NhbEdpZlBhdGgiLCJfc2V0TG9jYWxSZW1vdGVTZXJ2ZXJNb2RlIiwiX3NldExvY2FsU2VydmVyTW9kZSIsIl9zZXRSZWZlcnJlck92ZXJyaWRlIiwiX3NldFJlbW90ZVNlcnZlck1vZGUiLCJfc2V0U2FtcGxlUmF0ZSIsIl9zZXRTZXNzaW9uVGltZW91dCIsIl9zZXRTaXRlU3BlZWRTYW1wbGVSYXRlIiwiX3NldFNlc3Npb25Db29raWVUaW1lb3V0IiwiX3NldFZhciIsIl9zZXRWaXNpdG9yQ29va2llVGltZW91dCIsIl90cmFja0V2ZW50IiwiX3RyYWNrUGFnZUxvYWRUaW1lIiwiX3RyYWNrUGFnZXZpZXciLCJfdHJhY2tTb2NpYWwiLCJfdHJhY2tUaW1pbmciLCJfdHJhY2tUcmFucyIsIl92aXNpdENvZGUiXS5yZWR1Y2UoKGZ1bmN0aW9uKHJlcyxmdW5jTmFtZSl7cmV0dXJuIHJlc1tmdW5jTmFtZV09bm9vcEZ1bmMscmVzfSkse30pO3RyYWNrZXIuX2dldExpbmtlclVybD1mdW5jdGlvbihhKXtyZXR1cm4gYX0sdHJhY2tlci5fbGluaz1mdW5jdGlvbih1cmwpe2lmKCJzdHJpbmciPT10eXBlb2YgdXJsKXRyeXt3aW5kb3cubG9jYXRpb24uYXNzaWduKHVybCl9Y2F0Y2goZSl7IWZ1bmN0aW9uKHNvdXJjZSxtZXNzYWdlKXsoYXJndW1lbnRzLmxlbmd0aD4yJiZ2b2lkIDAhPT1hcmd1bWVudHNbMl0mJmFyZ3VtZW50c1syXXx8c291cmNlLnZlcmJvc2UpJiZjb25zb2xlLmxvZygiIi5jb25jYXQoc291cmNlLm5hbWUsIjogIikuY29uY2F0KG1lc3NhZ2UpKX0oc291cmNlLGUpfX0sR2F0LnByb3RvdHlwZS5fYW5vbnltaXplSVA9bm9vcEZ1bmMsR2F0LnByb3RvdHlwZS5fY3JlYXRlVHJhY2tlcj1ub29wRnVuYyxHYXQucHJvdG90eXBlLl9mb3JjZVNTTD1ub29wRnVuYyxHYXQucHJvdG90eXBlLl9nZXRQbHVnaW49bm9vcEZ1bmMsR2F0LnByb3RvdHlwZS5fZ2V0VHJhY2tlcj1mdW5jdGlvbigpe3JldHVybiB0cmFja2VyfSxHYXQucHJvdG90eXBlLl9nZXRUcmFja2VyQnlOYW1lPWZ1bmN0aW9uKCl7cmV0dXJuIHRyYWNrZXJ9LEdhdC5wcm90b3R5cGUuX2dldFRyYWNrZXJzPW5vb3BGdW5jLEdhdC5wcm90b3R5cGUuYWE9bm9vcEZ1bmMsR2F0LnByb3RvdHlwZS5hYj1ub29wRnVuYyxHYXQucHJvdG90eXBlLmhiPW5vb3BGdW5jLEdhdC5wcm90b3R5cGUubGE9bm9vcEZ1bmMsR2F0LnByb3RvdHlwZS5vYT1ub29wRnVuYyxHYXQucHJvdG90eXBlLnBhPW5vb3BGdW5jLEdhdC5wcm90b3R5cGUudT1ub29wRnVuYzt2YXIgZ2F0PW5ldyBHYXQ7d2luZG93Ll9nYXQ9Z2F0LGZ1bmN0aW9uKHNvdXJjZSxtZXNzYWdlKXtpZighMD09PXNvdXJjZS52ZXJib3NlKXt0cnl7dmFyIGxvZz1jb25zb2xlLmxvZy5iaW5kKGNvbnNvbGUpLHRyYWNlPWNvbnNvbGUudHJhY2UuYmluZChjb25zb2xlKSxwcmVmaXg9c291cmNlLnJ1bGVUZXh0fHwiIjtpZihzb3VyY2UuZG9tYWluTmFtZSl7dmFyIHJ1bGVTdGFydEluZGV4LEFHX1NDUklQVExFVF9NQVJLRVI9IiMlIy8vIixVQk9fU0NSSVBUTEVUX01BUktFUj0iIyMranMiO3NvdXJjZS5ydWxlVGV4dC5pbmRleE9mKEFHX1NDUklQVExFVF9NQVJLRVIpPi0xP3J1bGVTdGFydEluZGV4PXNvdXJjZS5ydWxlVGV4dC5pbmRleE9mKEFHX1NDUklQVExFVF9NQVJLRVIpOnNvdXJjZS5ydWxlVGV4dC5pbmRleE9mKFVCT19TQ1JJUFRMRVRfTUFSS0VSKT4tMSYmKHJ1bGVTdGFydEluZGV4PXNvdXJjZS5ydWxlVGV4dC5pbmRleE9mKFVCT19TQ1JJUFRMRVRfTUFSS0VSKSk7dmFyIHJ1bGVQYXJ0PXNvdXJjZS5ydWxlVGV4dC5zbGljZShydWxlU3RhcnRJbmRleCk7cHJlZml4PSIiLmNvbmNhdChzb3VyY2UuZG9tYWluTmFtZSkuY29uY2F0KHJ1bGVQYXJ0KX12YXIgTE9HX01BUktFUj0ibG9nOiAiO21lc3NhZ2UmJigtMT09PW1lc3NhZ2UuaW5kZXhPZihMT0dfTUFSS0VSKT9sb2coIiIuY29uY2F0KHByZWZpeCwiIG1lc3NhZ2U6XG4iKS5jb25jYXQobWVzc2FnZSkpOmxvZyhtZXNzYWdlLnNsaWNlKExPR19NQVJLRVIubGVuZ3RoKSkpLGxvZygiIi5jb25jYXQocHJlZml4LCIgdHJhY2Ugc3RhcnQiKSksdHJhY2UmJnRyYWNlKCksbG9nKCIiLmNvbmNhdChwcmVmaXgsIiB0cmFjZSBlbmQiKSl9Y2F0Y2goZSl7fSJmdW5jdGlvbiI9PXR5cGVvZiB3aW5kb3cuX19kZWJ1ZyYmd2luZG93Ll9fZGVidWcoc291cmNlKX19KHNvdXJjZSl9KS5hcHBseSh0aGlzLHVwZGF0ZWRBcmdzKX1jYXRjaChlKXtjb25zb2xlLmxvZyhlKX19KHtuYW1lOiJnb29nbGUtYW5hbHl0aWNzLWdhIixhcmdzOltdfSxbXSk7"
+ "content": "IWZ1bmN0aW9uKHNvdXJjZSxhcmdzKXtmdW5jdGlvbiBub29wRnVuYygpe31jb25zdCB1cGRhdGVkQXJncz1hcmdzP1tdLmNvbmNhdChzb3VyY2UpLmNvbmNhdChhcmdzKTpbc291cmNlXTt0cnl7KGZ1bmN0aW9uKHNvdXJjZSl7ZnVuY3Rpb24gR2FxKCl7fUdhcS5wcm90b3R5cGUuTmE9bm9vcEZ1bmMsR2FxLnByb3RvdHlwZS5PPW5vb3BGdW5jLEdhcS5wcm90b3R5cGUuU2E9bm9vcEZ1bmMsR2FxLnByb3RvdHlwZS5UYT1ub29wRnVuYyxHYXEucHJvdG90eXBlLlZhPW5vb3BGdW5jLEdhcS5wcm90b3R5cGUuX2NyZWF0ZUFzeW5jVHJhY2tlcj1ub29wRnVuYyxHYXEucHJvdG90eXBlLl9nZXRBc3luY1RyYWNrZXI9bm9vcEZ1bmMsR2FxLnByb3RvdHlwZS5fZ2V0UGx1Z2luPW5vb3BGdW5jLEdhcS5wcm90b3R5cGUucHVzaD1mdW5jdGlvbihkYXRhKXsiZnVuY3Rpb24iIT10eXBlb2YgZGF0YT8hMSE9PUFycmF5LmlzQXJyYXkoZGF0YSkmJigic3RyaW5nIj09dHlwZW9mIGRhdGFbMF0mJi8oXnxcLilfbGluayQvLnRlc3QoZGF0YVswXSkmJiJzdHJpbmciPT10eXBlb2YgZGF0YVsxXSYmd2luZG93LmxvY2F0aW9uLmFzc2lnbihkYXRhWzFdKSwiX3NldCI9PT1kYXRhWzBdJiYiaGl0Q2FsbGJhY2siPT09ZGF0YVsxXSYmImZ1bmN0aW9uIj09dHlwZW9mIGRhdGFbMl0mJmRhdGFbMl0oKSk6ZGF0YSgpfTt2YXIgZ2FxPW5ldyBHYXEsYXN5bmNUcmFja2Vycz13aW5kb3cuX2dhcXx8W107aWYoQXJyYXkuaXNBcnJheShhc3luY1RyYWNrZXJzKSlmb3IoO2FzeW5jVHJhY2tlcnNbMF07KWdhcS5wdXNoKGFzeW5jVHJhY2tlcnMuc2hpZnQoKSk7ZnVuY3Rpb24gR2F0KCl7fXdpbmRvdy5fZ2FxPWdhcS5xZj1nYXE7dmFyIHRyYWNrZXI9WyJfYWRkSWdub3JlZE9yZ2FuaWMiLCJfYWRkSWdub3JlZFJlZiIsIl9hZGRJdGVtIiwiX2FkZE9yZ2FuaWMiLCJfYWRkVHJhbnMiLCJfY2xlYXJJZ25vcmVkT3JnYW5pYyIsIl9jbGVhcklnbm9yZWRSZWYiLCJfY2xlYXJPcmdhbmljIiwiX2Nvb2tpZVBhdGhDb3B5IiwiX2RlbGV0ZUN1c3RvbVZhciIsIl9nZXROYW1lIiwiX3NldEFjY291bnQiLCJfZ2V0QWNjb3VudCIsIl9nZXRDbGllbnRJbmZvIiwiX2dldERldGVjdEZsYXNoIiwiX2dldERldGVjdFRpdGxlIiwiX2dldExpbmtlclVybCIsIl9nZXRMb2NhbEdpZlBhdGgiLCJfZ2V0U2VydmljZU1vZGUiLCJfZ2V0VmVyc2lvbiIsIl9nZXRWaXNpdG9yQ3VzdG9tVmFyIiwiX2luaXREYXRhIiwiX2xpbmsiLCJfbGlua0J5UG9zdCIsIl9zZXRBbGxvd0FuY2hvciIsIl9zZXRBbGxvd0hhc2giLCJfc2V0QWxsb3dMaW5rZXIiLCJfc2V0Q2FtcENvbnRlbnRLZXkiLCJfc2V0Q2FtcE1lZGl1bUtleSIsIl9zZXRDYW1wTmFtZUtleSIsIl9zZXRDYW1wTk9LZXkiLCJfc2V0Q2FtcFNvdXJjZUtleSIsIl9zZXRDYW1wVGVybUtleSIsIl9zZXRDYW1wYWlnbkNvb2tpZVRpbWVvdXQiLCJfc2V0Q2FtcGFpZ25UcmFjayIsIl9zZXRDbGllbnRJbmZvIiwiX3NldENvb2tpZVBhdGgiLCJfc2V0Q29va2llUGVyc2lzdGVuY2UiLCJfc2V0Q29va2llVGltZW91dCIsIl9zZXRDdXN0b21WYXIiLCJfc2V0RGV0ZWN0Rmxhc2giLCJfc2V0RGV0ZWN0VGl0bGUiLCJfc2V0RG9tYWluTmFtZSIsIl9zZXRMb2NhbEdpZlBhdGgiLCJfc2V0TG9jYWxSZW1vdGVTZXJ2ZXJNb2RlIiwiX3NldExvY2FsU2VydmVyTW9kZSIsIl9zZXRSZWZlcnJlck92ZXJyaWRlIiwiX3NldFJlbW90ZVNlcnZlck1vZGUiLCJfc2V0U2FtcGxlUmF0ZSIsIl9zZXRTZXNzaW9uVGltZW91dCIsIl9zZXRTaXRlU3BlZWRTYW1wbGVSYXRlIiwiX3NldFNlc3Npb25Db29raWVUaW1lb3V0IiwiX3NldFZhciIsIl9zZXRWaXNpdG9yQ29va2llVGltZW91dCIsIl90cmFja0V2ZW50IiwiX3RyYWNrUGFnZUxvYWRUaW1lIiwiX3RyYWNrUGFnZXZpZXciLCJfdHJhY2tTb2NpYWwiLCJfdHJhY2tUaW1pbmciLCJfdHJhY2tUcmFucyIsIl92aXNpdENvZGUiXS5yZWR1Y2UoKGZ1bmN0aW9uKHJlcyxmdW5jTmFtZSl7cmV0dXJuIHJlc1tmdW5jTmFtZV09bm9vcEZ1bmMscmVzfSkse30pO3RyYWNrZXIuX2dldExpbmtlclVybD1mdW5jdGlvbihhKXtyZXR1cm4gYX0sdHJhY2tlci5fbGluaz1mdW5jdGlvbih1cmwpe2lmKCJzdHJpbmciPT10eXBlb2YgdXJsKXRyeXt3aW5kb3cubG9jYXRpb24uYXNzaWduKHVybCl9Y2F0Y2goZSl7IWZ1bmN0aW9uKHNvdXJjZSxtZXNzYWdlKXsoYXJndW1lbnRzLmxlbmd0aD4yJiZ2b2lkIDAhPT1hcmd1bWVudHNbMl0mJmFyZ3VtZW50c1syXXx8c291cmNlLnZlcmJvc2UpJiZjb25zb2xlLmxvZygiIi5jb25jYXQoc291cmNlLm5hbWUsIjogIikuY29uY2F0KG1lc3NhZ2UpKX0oc291cmNlLGUpfX0sR2F0LnByb3RvdHlwZS5fYW5vbnltaXplSVA9bm9vcEZ1bmMsR2F0LnByb3RvdHlwZS5fY3JlYXRlVHJhY2tlcj1ub29wRnVuYyxHYXQucHJvdG90eXBlLl9mb3JjZVNTTD1ub29wRnVuYyxHYXQucHJvdG90eXBlLl9nZXRQbHVnaW49bm9vcEZ1bmMsR2F0LnByb3RvdHlwZS5fZ2V0VHJhY2tlcj1mdW5jdGlvbigpe3JldHVybiB0cmFja2VyfSxHYXQucHJvdG90eXBlLl9nZXRUcmFja2VyQnlOYW1lPWZ1bmN0aW9uKCl7cmV0dXJuIHRyYWNrZXJ9LEdhdC5wcm90b3R5cGUuX2dldFRyYWNrZXJzPW5vb3BGdW5jLEdhdC5wcm90b3R5cGUuYWE9bm9vcEZ1bmMsR2F0LnByb3RvdHlwZS5hYj1ub29wRnVuYyxHYXQucHJvdG90eXBlLmhiPW5vb3BGdW5jLEdhdC5wcm90b3R5cGUubGE9bm9vcEZ1bmMsR2F0LnByb3RvdHlwZS5vYT1ub29wRnVuYyxHYXQucHJvdG90eXBlLnBhPW5vb3BGdW5jLEdhdC5wcm90b3R5cGUudT1ub29wRnVuYzt2YXIgZ2F0PW5ldyBHYXQ7d2luZG93Ll9nYXQ9Z2F0LGZ1bmN0aW9uKHNvdXJjZSl7aWYoITA9PT1zb3VyY2UudmVyYm9zZSl7dHJ5e3ZhciBsb2c9Y29uc29sZS5sb2cuYmluZChjb25zb2xlKSx0cmFjZT1jb25zb2xlLnRyYWNlLmJpbmQoY29uc29sZSkscHJlZml4PXNvdXJjZS5ydWxlVGV4dHx8IiI7aWYoc291cmNlLmRvbWFpbk5hbWUpe3ZhciBydWxlU3RhcnRJbmRleCxBR19TQ1JJUFRMRVRfTUFSS0VSPSIjJSMvLyIsVUJPX1NDUklQVExFVF9NQVJLRVI9IiMjK2pzIjtzb3VyY2UucnVsZVRleHQuaW5kZXhPZihBR19TQ1JJUFRMRVRfTUFSS0VSKT4tMT9ydWxlU3RhcnRJbmRleD1zb3VyY2UucnVsZVRleHQuaW5kZXhPZihBR19TQ1JJUFRMRVRfTUFSS0VSKTpzb3VyY2UucnVsZVRleHQuaW5kZXhPZihVQk9fU0NSSVBUTEVUX01BUktFUik+LTEmJihydWxlU3RhcnRJbmRleD1zb3VyY2UucnVsZVRleHQuaW5kZXhPZihVQk9fU0NSSVBUTEVUX01BUktFUikpO3ZhciBydWxlUGFydD1zb3VyY2UucnVsZVRleHQuc2xpY2UocnVsZVN0YXJ0SW5kZXgpO3ByZWZpeD0iIi5jb25jYXQoc291cmNlLmRvbWFpbk5hbWUpLmNvbmNhdChydWxlUGFydCl9bG9nKCIiLmNvbmNhdChwcmVmaXgsIiB0cmFjZSBzdGFydCIpKSx0cmFjZSYmdHJhY2UoKSxsb2coIiIuY29uY2F0KHByZWZpeCwiIHRyYWNlIGVuZCIpKX1jYXRjaChlKXt9ImZ1bmN0aW9uIj09dHlwZW9mIHdpbmRvdy5fX2RlYnVnJiZ3aW5kb3cuX19kZWJ1Zyhzb3VyY2UpfX0oc291cmNlKX0pLmFwcGx5KHRoaXMsdXBkYXRlZEFyZ3MpfWNhdGNoKGUpe2NvbnNvbGUubG9nKGUpfX0oe25hbWU6Imdvb2dsZS1hbmFseXRpY3MtZ2EiLGFyZ3M6W119LFtdKTs="
},
{
"title": "google-analytics",
@@ -222,14 +222,17 @@
],
"isBlocking": false,
"contentType": "application/javascript;base64",
- "content": "IWZ1bmN0aW9uKHNvdXJjZSxhcmdzKXtmdW5jdGlvbiBub29wRnVuYygpe31jb25zdCB1cGRhdGVkQXJncz1hcmdzP1tdLmNvbmNhdChzb3VyY2UpLmNvbmNhdChhcmdzKTpbc291cmNlXTt0cnl7KGZ1bmN0aW9uKHNvdXJjZSl7dmFyIFRyYWNrZXI9ZnVuY3Rpb24oKXt9LHByb3RvPVRyYWNrZXIucHJvdG90eXBlO3Byb3RvLmdldD1ub29wRnVuYyxwcm90by5zZXQ9bm9vcEZ1bmMscHJvdG8uc2VuZD1ub29wRnVuYzt2YXIgZ29vZ2xlQW5hbHl0aWNzTmFtZT13aW5kb3cuR29vZ2xlQW5hbHl0aWNzT2JqZWN0fHwiZ2EiO2Z1bmN0aW9uIGdhKGEpe3ZhciBsZW49YXJndW1lbnRzLmxlbmd0aDtpZigwIT09bGVuKXt2YXIgcmVwbGFjZXIsbGFzdEFyZz1hcmd1bWVudHNbbGVuLTFdO2xhc3RBcmcgaW5zdGFuY2VvZiBPYmplY3QmJm51bGwhPT1sYXN0QXJnJiYiZnVuY3Rpb24iPT10eXBlb2YgbGFzdEFyZy5oaXRDYWxsYmFjaz9yZXBsYWNlcj1sYXN0QXJnLmhpdENhbGxiYWNrOiJmdW5jdGlvbiI9PXR5cGVvZiBsYXN0QXJnJiYocmVwbGFjZXI9ZnVuY3Rpb24oKXtsYXN0QXJnKGdhLmNyZWF0ZSgpKX0pO3RyeXtzZXRUaW1lb3V0KHJlcGxhY2VyLDEpfWNhdGNoKGV4KXt9fX1nYS5jcmVhdGU9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IFRyYWNrZXJ9LGdhLmdldEJ5TmFtZT1mdW5jdGlvbigpe3JldHVybiBuZXcgVHJhY2tlcn0sZ2EuZ2V0QWxsPWZ1bmN0aW9uKCl7cmV0dXJuW25ldyBUcmFja2VyXX0sZ2EucmVtb3ZlPW5vb3BGdW5jLGdhLmxvYWRlZD0hMCx3aW5kb3dbZ29vZ2xlQW5hbHl0aWNzTmFtZV09Z2E7dmFyIF93aW5kb3c9d2luZG93LGRhdGFMYXllcj1fd2luZG93LmRhdGFMYXllcixnb29nbGVfb3B0aW1pemU9X3dpbmRvdy5nb29nbGVfb3B0aW1pemU7aWYoZGF0YUxheWVyIGluc3RhbmNlb2YgT2JqZWN0IT0wKXtkYXRhTGF5ZXIuaGlkZSBpbnN0YW5jZW9mIE9iamVjdCYmImZ1bmN0aW9uIj09dHlwZW9mIGRhdGFMYXllci5oaWRlLmVuZCYmZGF0YUxheWVyLmhpZGUuZW5kKCk7dmFyIGhhbmRsZUNhbGxiYWNrPWZ1bmN0aW9uKGRhdGFPYmosZnVuY05hbWUpe2RhdGFPYmomJiJmdW5jdGlvbiI9PXR5cGVvZiBkYXRhT2JqW2Z1bmNOYW1lXSYmc2V0VGltZW91dChkYXRhT2JqW2Z1bmNOYW1lXSl9O2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBkYXRhTGF5ZXIucHVzaCYmKGRhdGFMYXllci5wdXNoPWZ1bmN0aW9uKGRhdGEpe2lmKGRhdGEgaW5zdGFuY2VvZiBPYmplY3Qpe2Zvcih2YXIga2V5IGluIGhhbmRsZUNhbGxiYWNrKGRhdGEsImV2ZW50Q2FsbGJhY2siKSxkYXRhKWhhbmRsZUNhbGxiYWNrKGRhdGFba2V5XSwiZXZlbnRfY2FsbGJhY2siKTtkYXRhLmhhc093blByb3BlcnR5KCJldmVudENhbGxiYWNrIil8fGRhdGEuaGFzT3duUHJvcGVydHkoImV2ZW50Q2FsbGJhY2siKXx8W10ucHVzaC5jYWxsKHdpbmRvdy5kYXRhTGF5ZXIsZGF0YSl9cmV0dXJuIEFycmF5LmlzQXJyYXkoZGF0YSkmJmRhdGEuZm9yRWFjaCgoZnVuY3Rpb24oYXJnKXtoYW5kbGVDYWxsYmFjayhhcmcsImNhbGxiYWNrIil9KSksbm9vcEZ1bmN9KSxnb29nbGVfb3B0aW1pemUgaW5zdGFuY2VvZiBPYmplY3QmJiJmdW5jdGlvbiI9PXR5cGVvZiBnb29nbGVfb3B0aW1pemUuZ2V0KXt2YXIgZ29vZ2xlT3B0aW1pemVXcmFwcGVyPXtnZXQ6bm9vcEZ1bmN9O3dpbmRvdy5nb29nbGVfb3B0aW1pemU9Z29vZ2xlT3B0aW1pemVXcmFwcGVyfSFmdW5jdGlvbihzb3VyY2UsbWVzc2FnZSl7aWYoITA9PT1zb3VyY2UudmVyYm9zZSl7dHJ5e3ZhciBsb2c9Y29uc29sZS5sb2cuYmluZChjb25zb2xlKSx0cmFjZT1jb25zb2xlLnRyYWNlLmJpbmQoY29uc29sZSkscHJlZml4PXNvdXJjZS5ydWxlVGV4dHx8IiI7aWYoc291cmNlLmRvbWFpbk5hbWUpe3ZhciBydWxlU3RhcnRJbmRleCxBR19TQ1JJUFRMRVRfTUFSS0VSPSIjJSMvLyIsVUJPX1NDUklQVExFVF9NQVJLRVI9IiMjK2pzIjtzb3VyY2UucnVsZVRleHQuaW5kZXhPZihBR19TQ1JJUFRMRVRfTUFSS0VSKT4tMT9ydWxlU3RhcnRJbmRleD1zb3VyY2UucnVsZVRleHQuaW5kZXhPZihBR19TQ1JJUFRMRVRfTUFSS0VSKTpzb3VyY2UucnVsZVRleHQuaW5kZXhPZihVQk9fU0NSSVBUTEVUX01BUktFUik+LTEmJihydWxlU3RhcnRJbmRleD1zb3VyY2UucnVsZVRleHQuaW5kZXhPZihVQk9fU0NSSVBUTEVUX01BUktFUikpO3ZhciBydWxlUGFydD1zb3VyY2UucnVsZVRleHQuc2xpY2UocnVsZVN0YXJ0SW5kZXgpO3ByZWZpeD0iIi5jb25jYXQoc291cmNlLmRvbWFpbk5hbWUpLmNvbmNhdChydWxlUGFydCl9dmFyIExPR19NQVJLRVI9ImxvZzogIjttZXNzYWdlJiYoLTE9PT1tZXNzYWdlLmluZGV4T2YoTE9HX01BUktFUik/bG9nKCIiLmNvbmNhdChwcmVmaXgsIiBtZXNzYWdlOlxuIikuY29uY2F0KG1lc3NhZ2UpKTpsb2cobWVzc2FnZS5zbGljZShMT0dfTUFSS0VSLmxlbmd0aCkpKSxsb2coIiIuY29uY2F0KHByZWZpeCwiIHRyYWNlIHN0YXJ0IikpLHRyYWNlJiZ0cmFjZSgpLGxvZygiIi5jb25jYXQocHJlZml4LCIgdHJhY2UgZW5kIikpfWNhdGNoKGUpe30iZnVuY3Rpb24iPT10eXBlb2Ygd2luZG93Ll9fZGVidWcmJndpbmRvdy5fX2RlYnVnKHNvdXJjZSl9fShzb3VyY2UpfX0pLmFwcGx5KHRoaXMsdXBkYXRlZEFyZ3MpfWNhdGNoKGUpe2NvbnNvbGUubG9nKGUpfX0oe25hbWU6Imdvb2dsZS1hbmFseXRpY3MiLGFyZ3M6W119LFtdKTs="
+ "content": "IWZ1bmN0aW9uKHNvdXJjZSxhcmdzKXtmdW5jdGlvbiBub29wRnVuYygpe31jb25zdCB1cGRhdGVkQXJncz1hcmdzP1tdLmNvbmNhdChzb3VyY2UpLmNvbmNhdChhcmdzKTpbc291cmNlXTt0cnl7KGZ1bmN0aW9uKHNvdXJjZSl7dmFyIFRyYWNrZXI9ZnVuY3Rpb24oKXt9LHByb3RvPVRyYWNrZXIucHJvdG90eXBlO3Byb3RvLmdldD1ub29wRnVuYyxwcm90by5zZXQ9bm9vcEZ1bmMscHJvdG8uc2VuZD1ub29wRnVuYzt2YXIgZ29vZ2xlQW5hbHl0aWNzTmFtZT13aW5kb3cuR29vZ2xlQW5hbHl0aWNzT2JqZWN0fHwiZ2EiO2Z1bmN0aW9uIGdhKGEpe3ZhciBsZW49YXJndW1lbnRzLmxlbmd0aDtpZigwIT09bGVuKXt2YXIgcmVwbGFjZXIsbGFzdEFyZz1hcmd1bWVudHNbbGVuLTFdO2xhc3RBcmcgaW5zdGFuY2VvZiBPYmplY3QmJm51bGwhPT1sYXN0QXJnJiYiZnVuY3Rpb24iPT10eXBlb2YgbGFzdEFyZy5oaXRDYWxsYmFjaz9yZXBsYWNlcj1sYXN0QXJnLmhpdENhbGxiYWNrOiJmdW5jdGlvbiI9PXR5cGVvZiBsYXN0QXJnJiYocmVwbGFjZXI9ZnVuY3Rpb24oKXtsYXN0QXJnKGdhLmNyZWF0ZSgpKX0pO3RyeXtzZXRUaW1lb3V0KHJlcGxhY2VyLDEpfWNhdGNoKGV4KXt9fX1nYS5jcmVhdGU9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IFRyYWNrZXJ9LGdhLmdldEJ5TmFtZT1mdW5jdGlvbigpe3JldHVybiBuZXcgVHJhY2tlcn0sZ2EuZ2V0QWxsPWZ1bmN0aW9uKCl7cmV0dXJuW25ldyBUcmFja2VyXX0sZ2EucmVtb3ZlPW5vb3BGdW5jLGdhLmxvYWRlZD0hMCx3aW5kb3dbZ29vZ2xlQW5hbHl0aWNzTmFtZV09Z2E7dmFyIF93aW5kb3c9d2luZG93LGRhdGFMYXllcj1fd2luZG93LmRhdGFMYXllcixnb29nbGVfb3B0aW1pemU9X3dpbmRvdy5nb29nbGVfb3B0aW1pemU7aWYoZGF0YUxheWVyIGluc3RhbmNlb2YgT2JqZWN0IT0wKXtkYXRhTGF5ZXIuaGlkZSBpbnN0YW5jZW9mIE9iamVjdCYmImZ1bmN0aW9uIj09dHlwZW9mIGRhdGFMYXllci5oaWRlLmVuZCYmZGF0YUxheWVyLmhpZGUuZW5kKCk7dmFyIGhhbmRsZUNhbGxiYWNrPWZ1bmN0aW9uKGRhdGFPYmosZnVuY05hbWUpe2RhdGFPYmomJiJmdW5jdGlvbiI9PXR5cGVvZiBkYXRhT2JqW2Z1bmNOYW1lXSYmc2V0VGltZW91dChkYXRhT2JqW2Z1bmNOYW1lXSl9O2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBkYXRhTGF5ZXIucHVzaCYmKGRhdGFMYXllci5wdXNoPWZ1bmN0aW9uKGRhdGEpe2lmKGRhdGEgaW5zdGFuY2VvZiBPYmplY3Qpe2Zvcih2YXIga2V5IGluIGhhbmRsZUNhbGxiYWNrKGRhdGEsImV2ZW50Q2FsbGJhY2siKSxkYXRhKWhhbmRsZUNhbGxiYWNrKGRhdGFba2V5XSwiZXZlbnRfY2FsbGJhY2siKTtkYXRhLmhhc093blByb3BlcnR5KCJldmVudENhbGxiYWNrIil8fGRhdGEuaGFzT3duUHJvcGVydHkoImV2ZW50Q2FsbGJhY2siKXx8W10ucHVzaC5jYWxsKHdpbmRvdy5kYXRhTGF5ZXIsZGF0YSl9cmV0dXJuIEFycmF5LmlzQXJyYXkoZGF0YSkmJmRhdGEuZm9yRWFjaCgoZnVuY3Rpb24oYXJnKXtoYW5kbGVDYWxsYmFjayhhcmcsImNhbGxiYWNrIil9KSksbm9vcEZ1bmN9KSxnb29nbGVfb3B0aW1pemUgaW5zdGFuY2VvZiBPYmplY3QmJiJmdW5jdGlvbiI9PXR5cGVvZiBnb29nbGVfb3B0aW1pemUuZ2V0KXt2YXIgZ29vZ2xlT3B0aW1pemVXcmFwcGVyPXtnZXQ6bm9vcEZ1bmN9O3dpbmRvdy5nb29nbGVfb3B0aW1pemU9Z29vZ2xlT3B0aW1pemVXcmFwcGVyfSFmdW5jdGlvbihzb3VyY2Upe2lmKCEwPT09c291cmNlLnZlcmJvc2Upe3RyeXt2YXIgbG9nPWNvbnNvbGUubG9nLmJpbmQoY29uc29sZSksdHJhY2U9Y29uc29sZS50cmFjZS5iaW5kKGNvbnNvbGUpLHByZWZpeD1zb3VyY2UucnVsZVRleHR8fCIiO2lmKHNvdXJjZS5kb21haW5OYW1lKXt2YXIgcnVsZVN0YXJ0SW5kZXgsQUdfU0NSSVBUTEVUX01BUktFUj0iIyUjLy8iLFVCT19TQ1JJUFRMRVRfTUFSS0VSPSIjIytqcyI7c291cmNlLnJ1bGVUZXh0LmluZGV4T2YoQUdfU0NSSVBUTEVUX01BUktFUik+LTE/cnVsZVN0YXJ0SW5kZXg9c291cmNlLnJ1bGVUZXh0LmluZGV4T2YoQUdfU0NSSVBUTEVUX01BUktFUik6c291cmNlLnJ1bGVUZXh0LmluZGV4T2YoVUJPX1NDUklQVExFVF9NQVJLRVIpPi0xJiYocnVsZVN0YXJ0SW5kZXg9c291cmNlLnJ1bGVUZXh0LmluZGV4T2YoVUJPX1NDUklQVExFVF9NQVJLRVIpKTt2YXIgcnVsZVBhcnQ9c291cmNlLnJ1bGVUZXh0LnNsaWNlKHJ1bGVTdGFydEluZGV4KTtwcmVmaXg9IiIuY29uY2F0KHNvdXJjZS5kb21haW5OYW1lKS5jb25jYXQocnVsZVBhcnQpfWxvZygiIi5jb25jYXQocHJlZml4LCIgdHJhY2Ugc3RhcnQiKSksdHJhY2UmJnRyYWNlKCksbG9nKCIiLmNvbmNhdChwcmVmaXgsIiB0cmFjZSBlbmQiKSl9Y2F0Y2goZSl7fSJmdW5jdGlvbiI9PXR5cGVvZiB3aW5kb3cuX19kZWJ1ZyYmd2luZG93Ll9fZGVidWcoc291cmNlKX19KHNvdXJjZSl9fSkuYXBwbHkodGhpcyx1cGRhdGVkQXJncyl9Y2F0Y2goZSl7Y29uc29sZS5sb2coZSl9fSh7bmFtZToiZ29vZ2xlLWFuYWx5dGljcyIsYXJnczpbXX0sW10pOw=="
},
{
"title": "google-ima3",
- "aliases": [],
+ "aliases": [
+ "ubo-google-ima.js",
+ "google-ima.js"
+ ],
"isBlocking": false,
"contentType": "application/javascript;base64",
- "content": "IWZ1bmN0aW9uKHNvdXJjZSxhcmdzKXtmdW5jdGlvbiBub29wRnVuYygpe31mdW5jdGlvbiBsb2dNZXNzYWdlKHNvdXJjZSxtZXNzYWdlKXt2YXIgZm9yY2VkPWFyZ3VtZW50cy5sZW5ndGg+MiYmdm9pZCAwIT09YXJndW1lbnRzWzJdJiZhcmd1bWVudHNbMl07KGZvcmNlZHx8c291cmNlLnZlcmJvc2UpJiZjb25zb2xlLmxvZygiIi5jb25jYXQoc291cmNlLm5hbWUsIjogIikuY29uY2F0KG1lc3NhZ2UpKX1jb25zdCB1cGRhdGVkQXJncz1hcmdzP1tdLmNvbmNhdChzb3VyY2UpLmNvbmNhdChhcmdzKTpbc291cmNlXTt0cnl7KGZ1bmN0aW9uKHNvdXJjZSl7dmFyIGltYT17fSxBZERpc3BsYXlDb250YWluZXI9ZnVuY3Rpb24oKXt9O0FkRGlzcGxheUNvbnRhaW5lci5wcm90b3R5cGUuZGVzdHJveT1ub29wRnVuYyxBZERpc3BsYXlDb250YWluZXIucHJvdG90eXBlLmluaXRpYWxpemU9bm9vcEZ1bmM7dmFyIEltYVNka1NldHRpbmdzPWZ1bmN0aW9uKCl7fTtJbWFTZGtTZXR0aW5ncy5Db21wYW5pb25CYWNrZmlsbE1vZGU9e0FMV0FZUzoiYWx3YXlzIixPTl9NQVNURVJfQUQ6Im9uX21hc3Rlcl9hZCJ9LEltYVNka1NldHRpbmdzLlZwYWlkTW9kZT17RElTQUJMRUQ6MCxFTkFCTEVEOjEsSU5TRUNVUkU6Mn0sSW1hU2RrU2V0dGluZ3MucHJvdG90eXBlPXtjOiEwLGY6e30saTohMSxsOiIiLHA6IiIscjowLHQ6IiIsdjoiIixnZXRDb21wYW5pb25CYWNrZmlsbDpub29wRnVuYyxnZXREaXNhYmxlQ3VzdG9tUGxheWJhY2tGb3JJT1MxMFBsdXM6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5pfSxnZXREaXNhYmxlZEZsYXNoQWRzOmZ1bmN0aW9uKCl7cmV0dXJuITB9LGdldEZlYXR1cmVGbGFnczpmdW5jdGlvbigpe3JldHVybiB0aGlzLmZ9LGdldExvY2FsZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLmx9LGdldE51bVJlZGlyZWN0czpmdW5jdGlvbigpe3JldHVybiB0aGlzLnJ9LGdldFBsYXllclR5cGU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy50fSxnZXRQbGF5ZXJWZXJzaW9uOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMudn0sZ2V0UHBpZDpmdW5jdGlvbigpe3JldHVybiB0aGlzLnB9LGdldFZwYWlkTW9kZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLkN9LGlzQ29va2llc0VuYWJsZWQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jfSxpc1ZwYWlkQWRhcHRlcjpmdW5jdGlvbigpe3JldHVybiB0aGlzLk19LHNldENvbXBhbmlvbkJhY2tmaWxsOm5vb3BGdW5jLHNldEF1dG9QbGF5QWRCcmVha3M6ZnVuY3Rpb24oYSl7dGhpcy5LPWF9LHNldENvb2tpZXNFbmFibGVkOmZ1bmN0aW9uKGMpe3RoaXMuYz0hIWN9LHNldERpc2FibGVDdXN0b21QbGF5YmFja0ZvcklPUzEwUGx1czpmdW5jdGlvbihpKXt0aGlzLmk9ISFpfSxzZXREaXNhYmxlRmxhc2hBZHM6bm9vcEZ1bmMsc2V0RmVhdHVyZUZsYWdzOmZ1bmN0aW9uKGYpe3RoaXMuZj0hIWZ9LHNldElzVnBhaWRBZGFwdGVyOmZ1bmN0aW9uKGEpe3RoaXMuTT1hfSxzZXRMb2NhbGU6ZnVuY3Rpb24obCl7dGhpcy5sPSEhbH0sc2V0TnVtUmVkaXJlY3RzOmZ1bmN0aW9uKHIpe3RoaXMucj0hIXJ9LHNldFBhZ2VDb3JyZWxhdG9yOmZ1bmN0aW9uKGEpe3RoaXMuUj1hfSxzZXRQbGF5ZXJUeXBlOmZ1bmN0aW9uKHQpe3RoaXMudD0hIXR9LHNldFBsYXllclZlcnNpb246ZnVuY3Rpb24odil7dGhpcy52PSEhdn0sc2V0UHBpZDpmdW5jdGlvbihwKXt0aGlzLnA9ISFwfSxzZXRWcGFpZE1vZGU6ZnVuY3Rpb24oYSl7dGhpcy5DPWF9LHNldFNlc3Npb25JZDpub29wRnVuYyxzZXRTdHJlYW1Db3JyZWxhdG9yOm5vb3BGdW5jLHNldFZwYWlkQWxsb3dlZDpub29wRnVuYyxDb21wYW5pb25CYWNrZmlsbE1vZGU6e0FMV0FZUzoiYWx3YXlzIixPTl9NQVNURVJfQUQ6Im9uX21hc3Rlcl9hZCJ9LFZwYWlkTW9kZTp7RElTQUJMRUQ6MCxFTkFCTEVEOjEsSU5TRUNVUkU6Mn19O3ZhciBFdmVudEhhbmRsZXI9ZnVuY3Rpb24oKXt0aGlzLmxpc3RlbmVycz1uZXcgTWFwLHRoaXMuX2Rpc3BhdGNoPWZ1bmN0aW9uKGUpe2Zvcih2YXIgbGlzdGVuZXJzPXRoaXMubGlzdGVuZXJzLmdldChlLnR5cGUpfHxbXSxfaT0wLF9BcnJheSRmcm9tPUFycmF5LmZyb20obGlzdGVuZXJzKTtfaTxfQXJyYXkkZnJvbS5sZW5ndGg7X2krKyl7dmFyIGxpc3RlbmVyPV9BcnJheSRmcm9tW19pXTt0cnl7bGlzdGVuZXIoZSl9Y2F0Y2gocil7bG9nTWVzc2FnZShzb3VyY2Uscil9fX0sdGhpcy5hZGRFdmVudExpc3RlbmVyPWZ1bmN0aW9uKHQsYyl7dGhpcy5saXN0ZW5lcnMuaGFzKHQpfHx0aGlzLmxpc3RlbmVycy5zZXQodCxuZXcgU2V0KSx0aGlzLmxpc3RlbmVycy5nZXQodCkuYWRkKGMpfSx0aGlzLnJlbW92ZUV2ZW50TGlzdGVuZXI9ZnVuY3Rpb24odCxjKXt2YXIgX3RoaXMkbGlzdGVuZXJzJGdldDtudWxsPT09KF90aGlzJGxpc3RlbmVycyRnZXQ9dGhpcy5saXN0ZW5lcnMuZ2V0KHQpKXx8dm9pZCAwPT09X3RoaXMkbGlzdGVuZXJzJGdldHx8X3RoaXMkbGlzdGVuZXJzJGdldC5kZWxldGUoYyl9fSxBZHNNYW5hZ2VyPW5ldyBFdmVudEhhbmRsZXI7QWRzTWFuYWdlci52b2x1bWU9MSxBZHNNYW5hZ2VyLmNvbGxhcHNlPW5vb3BGdW5jLEFkc01hbmFnZXIuY29uZmlndXJlQWRzTWFuYWdlcj1ub29wRnVuYyxBZHNNYW5hZ2VyLmRlc3Ryb3k9bm9vcEZ1bmMsQWRzTWFuYWdlci5kaXNjYXJkQWRCcmVhaz1ub29wRnVuYyxBZHNNYW5hZ2VyLmV4cGFuZD1ub29wRnVuYyxBZHNNYW5hZ2VyLmZvY3VzPW5vb3BGdW5jLEFkc01hbmFnZXIuZ2V0QWRTa2lwcGFibGVTdGF0ZT1mdW5jdGlvbigpe3JldHVybiExfSxBZHNNYW5hZ2VyLmdldEN1ZVBvaW50cz1mdW5jdGlvbigpe3JldHVyblswXX0sQWRzTWFuYWdlci5nZXRDdXJyZW50QWQ9ZnVuY3Rpb24oKXtyZXR1cm4gY3VycmVudEFkfSxBZHNNYW5hZ2VyLmdldEN1cnJlbnRBZEN1ZVBvaW50cz1mdW5jdGlvbigpe3JldHVybltdfSxBZHNNYW5hZ2VyLmdldFJlbWFpbmluZ1RpbWU9ZnVuY3Rpb24oKXtyZXR1cm4gMH0sQWRzTWFuYWdlci5nZXRWb2x1bWU9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy52b2x1bWV9LEFkc01hbmFnZXIuaW5pdD1ub29wRnVuYyxBZHNNYW5hZ2VyLmlzQ3VzdG9tQ2xpY2tUcmFja2luZ1VzZWQ9ZnVuY3Rpb24oKXtyZXR1cm4hMX0sQWRzTWFuYWdlci5pc0N1c3RvbVBsYXliYWNrVXNlZD1mdW5jdGlvbigpe3JldHVybiExfSxBZHNNYW5hZ2VyLnBhdXNlPW5vb3BGdW5jLEFkc01hbmFnZXIucmVxdWVzdE5leHRBZEJyZWFrPW5vb3BGdW5jLEFkc01hbmFnZXIucmVzaXplPW5vb3BGdW5jLEFkc01hbmFnZXIucmVzdW1lPW5vb3BGdW5jLEFkc01hbmFnZXIuc2V0Vm9sdW1lPWZ1bmN0aW9uKHYpe3RoaXMudm9sdW1lPXZ9LEFkc01hbmFnZXIuc2tpcD1ub29wRnVuYyxBZHNNYW5hZ2VyLnN0YXJ0PWZ1bmN0aW9uKCl7Zm9yKHZhciBfaTI9MCxfYXJyPVtBZEV2ZW50LlR5cGUuQUxMX0FEU19DT01QTEVURUQsQWRFdmVudC5UeXBlLkNPTlRFTlRfUkVTVU1FX1JFUVVFU1RFRF07X2kyPF9hcnIubGVuZ3RoO19pMisrKXt2YXIgdHlwZT1fYXJyW19pMl07dHJ5e3RoaXMuX2Rpc3BhdGNoKG5ldyBpbWEuQWRFdmVudCh0eXBlKSl9Y2F0Y2goZSl7bG9nTWVzc2FnZShzb3VyY2UsZSl9fX0sQWRzTWFuYWdlci5zdG9wPW5vb3BGdW5jLEFkc01hbmFnZXIudXBkYXRlQWRzUmVuZGVyaW5nU2V0dGluZ3M9bm9vcEZ1bmM7dmFyIG1hbmFnZXI9T2JqZWN0LmNyZWF0ZShBZHNNYW5hZ2VyKSxBZHNNYW5hZ2VyTG9hZGVkRXZlbnQ9ZnVuY3Rpb24odHlwZSxhZHNSZXF1ZXN0LHVzZXJSZXF1ZXN0Q29udGV4dCl7dGhpcy50eXBlPXR5cGUsdGhpcy5hZHNSZXF1ZXN0PWFkc1JlcXVlc3QsdGhpcy51c2VyUmVxdWVzdENvbnRleHQ9dXNlclJlcXVlc3RDb250ZXh0fTtBZHNNYW5hZ2VyTG9hZGVkRXZlbnQucHJvdG90eXBlPXtnZXRBZHNNYW5hZ2VyOmZ1bmN0aW9uKCl7cmV0dXJuIG1hbmFnZXJ9LGdldFVzZXJSZXF1ZXN0Q29udGV4dDpmdW5jdGlvbigpe3JldHVybiB0aGlzLnVzZXJSZXF1ZXN0Q29udGV4dD90aGlzLnVzZXJSZXF1ZXN0Q29udGV4dDp7fX19LEFkc01hbmFnZXJMb2FkZWRFdmVudC5UeXBlPXtBRFNfTUFOQUdFUl9MT0FERUQ6ImFkc01hbmFnZXJMb2FkZWQifTt2YXIgQWRzTG9hZGVyPUV2ZW50SGFuZGxlcjtBZHNMb2FkZXIucHJvdG90eXBlLnNldHRpbmdzPW5ldyBJbWFTZGtTZXR0aW5ncyxBZHNMb2FkZXIucHJvdG90eXBlLmNvbnRlbnRDb21wbGV0ZT1ub29wRnVuYyxBZHNMb2FkZXIucHJvdG90eXBlLmRlc3Ryb3k9bm9vcEZ1bmMsQWRzTG9hZGVyLnByb3RvdHlwZS5nZXRTZXR0aW5ncz1mdW5jdGlvbigpe3JldHVybiB0aGlzLnNldHRpbmdzfSxBZHNMb2FkZXIucHJvdG90eXBlLmdldFZlcnNpb249ZnVuY3Rpb24oKXtyZXR1cm4iMy40NTMuMCJ9LEFkc0xvYWRlci5wcm90b3R5cGUucmVxdWVzdEFkcz1mdW5jdGlvbihhZHNSZXF1ZXN0LHVzZXJSZXF1ZXN0Q29udGV4dCl7dmFyIF90aGlzPXRoaXM7cmVxdWVzdEFuaW1hdGlvbkZyYW1lKChmdW5jdGlvbigpe3ZhciBBRFNfTUFOQUdFUl9MT0FERUQ9QWRzTWFuYWdlckxvYWRlZEV2ZW50LlR5cGUuQURTX01BTkFHRVJfTE9BREVELGV2ZW50PW5ldyBpbWEuQWRzTWFuYWdlckxvYWRlZEV2ZW50KEFEU19NQU5BR0VSX0xPQURFRCxhZHNSZXF1ZXN0LHVzZXJSZXF1ZXN0Q29udGV4dCk7X3RoaXMuX2Rpc3BhdGNoKGV2ZW50KX0pKTt2YXIgZT1uZXcgaW1hLkFkRXJyb3IoImFkUGxheUVycm9yIiwxMjA1LDEyMDUsIlRoZSBicm93c2VyIHByZXZlbnRlZCBwbGF5YmFjayBpbml0aWF0ZWQgd2l0aG91dCB1c2VyIGludGVyYWN0aW9uLiIsYWRzUmVxdWVzdCx1c2VyUmVxdWVzdENvbnRleHQpO3JlcXVlc3RBbmltYXRpb25GcmFtZSgoZnVuY3Rpb24oKXtfdGhpcy5fZGlzcGF0Y2gobmV3IGltYS5BZEVycm9yRXZlbnQoZSkpfSkpfTt2YXIgQWRzUmVuZGVyaW5nU2V0dGluZ3M9bm9vcEZ1bmMsQWRzUmVxdWVzdD1mdW5jdGlvbigpe307QWRzUmVxdWVzdC5wcm90b3R5cGU9e3NldEFkV2lsbEF1dG9QbGF5Om5vb3BGdW5jLHNldEFkV2lsbFBsYXlNdXRlZDpub29wRnVuYyxzZXRDb250aW51b3VzUGxheWJhY2s6bm9vcEZ1bmN9O3ZhciBBZFBvZEluZm89ZnVuY3Rpb24oKXt9O0FkUG9kSW5mby5wcm90b3R5cGU9e2dldEFkUG9zaXRpb246ZnVuY3Rpb24oKXtyZXR1cm4gMX0sZ2V0SXNCdW1wZXI6ZnVuY3Rpb24oKXtyZXR1cm4hMX0sZ2V0TWF4RHVyYXRpb246ZnVuY3Rpb24oKXtyZXR1cm4tMX0sZ2V0UG9kSW5kZXg6ZnVuY3Rpb24oKXtyZXR1cm4gMX0sZ2V0VGltZU9mZnNldDpmdW5jdGlvbigpe3JldHVybiAwfSxnZXRUb3RhbEFkczpmdW5jdGlvbigpe3JldHVybiAxfX07dmFyIEFkPWZ1bmN0aW9uKCl7fTtBZC5wcm90b3R5cGU9e3BpOm5ldyBBZFBvZEluZm8sZ2V0QWRJZDpmdW5jdGlvbigpe3JldHVybiIifSxnZXRBZFBvZEluZm86ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5waX0sZ2V0QWRTeXN0ZW06ZnVuY3Rpb24oKXtyZXR1cm4iIn0sZ2V0QWR2ZXJ0aXNlck5hbWU6ZnVuY3Rpb24oKXtyZXR1cm4iIn0sZ2V0QXBpRnJhbWV3b3JrOmZ1bmN0aW9uKCl7cmV0dXJuIG51bGx9LGdldENvbXBhbmlvbkFkczpmdW5jdGlvbigpe3JldHVybltdfSxnZXRDb250ZW50VHlwZTpmdW5jdGlvbigpe3JldHVybiIifSxnZXRDcmVhdGl2ZUFkSWQ6ZnVuY3Rpb24oKXtyZXR1cm4iIn0sZ2V0RGVhbElkOmZ1bmN0aW9uKCl7cmV0dXJuIiJ9LGdldERlc2NyaXB0aW9uOmZ1bmN0aW9uKCl7cmV0dXJuIiJ9LGdldER1cmF0aW9uOmZ1bmN0aW9uKCl7cmV0dXJuIDguNX0sZ2V0SGVpZ2h0OmZ1bmN0aW9uKCl7cmV0dXJuIDB9LGdldE1lZGlhVXJsOmZ1bmN0aW9uKCl7cmV0dXJuIG51bGx9LGdldE1pblN1Z2dlc3RlZER1cmF0aW9uOmZ1bmN0aW9uKCl7cmV0dXJuLTJ9LGdldFNraXBUaW1lT2Zmc2V0OmZ1bmN0aW9uKCl7cmV0dXJuLTF9LGdldFN1cnZleVVybDpmdW5jdGlvbigpe3JldHVybiBudWxsfSxnZXRUaXRsZTpmdW5jdGlvbigpe3JldHVybiIifSxnZXRUcmFmZmlja2luZ1BhcmFtZXRlcnNTdHJpbmc6ZnVuY3Rpb24oKXtyZXR1cm4iIn0sZ2V0VWlFbGVtZW50czpmdW5jdGlvbigpe3JldHVyblsiIl19LGdldFVuaXZlcnNhbEFkSWRSZWdpc3RyeTpmdW5jdGlvbigpe3JldHVybiJ1bmtub3duIn0sZ2V0VW5pdmVyc2FsQWRJZHM6ZnVuY3Rpb24oKXtyZXR1cm5bIiJdfSxnZXRVbml2ZXJzYWxBZElkVmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4idW5rbm93biJ9LGdldFZhc3RNZWRpYUJpdHJhdGU6ZnVuY3Rpb24oKXtyZXR1cm4gMH0sZ2V0VmFzdE1lZGlhSGVpZ2h0OmZ1bmN0aW9uKCl7cmV0dXJuIDB9LGdldFZhc3RNZWRpYVdpZHRoOmZ1bmN0aW9uKCl7cmV0dXJuIDB9LGdldFdpZHRoOmZ1bmN0aW9uKCl7cmV0dXJuIDB9LGdldFdyYXBwZXJBZElkczpmdW5jdGlvbigpe3JldHVyblsiIl19LGdldFdyYXBwZXJBZFN5c3RlbXM6ZnVuY3Rpb24oKXtyZXR1cm5bIiJdfSxnZXRXcmFwcGVyQ3JlYXRpdmVJZHM6ZnVuY3Rpb24oKXtyZXR1cm5bIiJdfSxpc0xpbmVhcjpmdW5jdGlvbigpe3JldHVybiEwfSxpc1NraXBwYWJsZTpmdW5jdGlvbigpe3JldHVybiEwfX07dmFyIENvbXBhbmlvbkFkPWZ1bmN0aW9uKCl7fTtDb21wYW5pb25BZC5wcm90b3R5cGU9e2dldEFkU2xvdElkOmZ1bmN0aW9uKCl7cmV0dXJuIiJ9LGdldENvbnRlbnQ6ZnVuY3Rpb24oKXtyZXR1cm4iIn0sZ2V0Q29udGVudFR5cGU6ZnVuY3Rpb24oKXtyZXR1cm4iIn0sZ2V0SGVpZ2h0OmZ1bmN0aW9uKCl7cmV0dXJuIDF9LGdldFdpZHRoOmZ1bmN0aW9uKCl7cmV0dXJuIDF9fTt2YXIgQWRFcnJvcj1mdW5jdGlvbih0eXBlLGNvZGUsdmFzdCxtZXNzYWdlLGFkc1JlcXVlc3QsdXNlclJlcXVlc3RDb250ZXh0KXt0aGlzLmVycm9yQ29kZT1jb2RlLHRoaXMubWVzc2FnZT1tZXNzYWdlLHRoaXMudHlwZT10eXBlLHRoaXMuYWRzUmVxdWVzdD1hZHNSZXF1ZXN0LHRoaXMudXNlclJlcXVlc3RDb250ZXh0PXVzZXJSZXF1ZXN0Q29udGV4dCx0aGlzLmdldEVycm9yQ29kZT1mdW5jdGlvbigpe3JldHVybiB0aGlzLmVycm9yQ29kZX0sdGhpcy5nZXRJbm5lckVycm9yPWZ1bmN0aW9uKCl7fSx0aGlzLmdldE1lc3NhZ2U9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5tZXNzYWdlfSx0aGlzLmdldFR5cGU9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy50eXBlfSx0aGlzLmdldFZhc3RFcnJvckNvZGU9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy52YXN0RXJyb3JDb2RlfSx0aGlzLnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIkFkRXJyb3IgIi5jb25jYXQodGhpcy5lcnJvckNvZGUsIjogIikuY29uY2F0KHRoaXMubWVzc2FnZSl9fTtBZEVycm9yLkVycm9yQ29kZT17fSxBZEVycm9yLlR5cGU9e307dmFyIGN1cnJlbnRBZD1mdW5jdGlvbigpe3RyeXtmb3IodmFyIF9pMz0wLF9PYmplY3QkdmFsdWVzPU9iamVjdC52YWx1ZXMod2luZG93LnZpZGlibGUuX2dldENvbnRleHRzKCkpO19pMzxfT2JqZWN0JHZhbHVlcy5sZW5ndGg7X2kzKyspe3ZhciBfY3R4JGdldFBsYXllcixfY3R4JGdldFBsYXllciRkaXY7aWYobnVsbCE9PShfY3R4JGdldFBsYXllcj1fT2JqZWN0JHZhbHVlc1tfaTNdLmdldFBsYXllcigpKSYmdm9pZCAwIT09X2N0eCRnZXRQbGF5ZXImJm51bGwhPT0oX2N0eCRnZXRQbGF5ZXIkZGl2PV9jdHgkZ2V0UGxheWVyLmRpdikmJnZvaWQgMCE9PV9jdHgkZ2V0UGxheWVyJGRpdiYmX2N0eCRnZXRQbGF5ZXIkZGl2LmlubmVySFRNTC5pbmNsdWRlcygid3d3LmVuZ2FkZ2V0LmNvbSIpKXJldHVybiEwfX1jYXRjaChlKXt9cmV0dXJuITF9KCk/dm9pZCAwOm5ldyBBZCxBZEV2ZW50PWZ1bmN0aW9uKHR5cGUpe3RoaXMudHlwZT10eXBlfTtBZEV2ZW50LnByb3RvdHlwZT17Z2V0QWQ6ZnVuY3Rpb24oKXtyZXR1cm4gY3VycmVudEFkfSxnZXRBZERhdGE6ZnVuY3Rpb24oKXt9fSxBZEV2ZW50LlR5cGU9e0FEX0JSRUFLX1JFQURZOiJhZEJyZWFrUmVhZHkiLEFEX0JVRkZFUklORzoiYWRCdWZmZXJpbmciLEFEX0NBTl9QTEFZOiJhZENhblBsYXkiLEFEX01FVEFEQVRBOiJhZE1ldGFkYXRhIixBRF9QUk9HUkVTUzoiYWRQcm9ncmVzcyIsQUxMX0FEU19DT01QTEVURUQ6ImFsbEFkc0NvbXBsZXRlZCIsQ0xJQ0s6ImNsaWNrIixDT01QTEVURToiY29tcGxldGUiLENPTlRFTlRfUEFVU0VfUkVRVUVTVEVEOiJjb250ZW50UGF1c2VSZXF1ZXN0ZWQiLENPTlRFTlRfUkVTVU1FX1JFUVVFU1RFRDoiY29udGVudFJlc3VtZVJlcXVlc3RlZCIsRFVSQVRJT05fQ0hBTkdFOiJkdXJhdGlvbkNoYW5nZSIsRVhQQU5ERURfQ0hBTkdFRDoiZXhwYW5kZWRDaGFuZ2VkIixGSVJTVF9RVUFSVElMRToiZmlyc3RRdWFydGlsZSIsSU1QUkVTU0lPTjoiaW1wcmVzc2lvbiIsSU5URVJBQ1RJT046ImludGVyYWN0aW9uIixMSU5FQVJfQ0hBTkdFOiJsaW5lYXJDaGFuZ2UiLExJTkVBUl9DSEFOR0VEOiJsaW5lYXJDaGFuZ2VkIixMT0FERUQ6ImxvYWRlZCIsTE9HOiJsb2ciLE1JRFBPSU5UOiJtaWRwb2ludCIsUEFVU0VEOiJwYXVzZSIsUkVTVU1FRDoicmVzdW1lIixTS0lQUEFCTEVfU1RBVEVfQ0hBTkdFRDoic2tpcHBhYmxlU3RhdGVDaGFuZ2VkIixTS0lQUEVEOiJza2lwIixTVEFSVEVEOiJzdGFydCIsVEhJUkRfUVVBUlRJTEU6InRoaXJkUXVhcnRpbGUiLFVTRVJfQ0xPU0U6InVzZXJDbG9zZSIsVklERU9fQ0xJQ0tFRDoidmlkZW9DbGlja2VkIixWSURFT19JQ09OX0NMSUNLRUQ6InZpZGVvSWNvbkNsaWNrZWQiLFZJRVdBQkxFX0lNUFJFU1NJT046InZpZXdhYmxlX2ltcHJlc3Npb24iLFZPTFVNRV9DSEFOR0VEOiJ2b2x1bWVDaGFuZ2UiLFZPTFVNRV9NVVRFRDoibXV0ZSJ9O3ZhciBBZEVycm9yRXZlbnQ9ZnVuY3Rpb24oZXJyb3Ipe3RoaXMuZXJyb3I9ZXJyb3IsdGhpcy50eXBlPSJhZEVycm9yIix0aGlzLmdldEVycm9yPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZXJyb3J9LHRoaXMuZ2V0VXNlclJlcXVlc3RDb250ZXh0PWZ1bmN0aW9uKCl7dmFyIF90aGlzJGVycm9yO3JldHVybiBudWxsIT09KF90aGlzJGVycm9yPXRoaXMuZXJyb3IpJiZ2b2lkIDAhPT1fdGhpcyRlcnJvciYmX3RoaXMkZXJyb3IudXNlclJlcXVlc3RDb250ZXh0P3RoaXMuZXJyb3IudXNlclJlcXVlc3RDb250ZXh0Ont9fX07QWRFcnJvckV2ZW50LlR5cGU9e0FEX0VSUk9SOiJhZEVycm9yIn07dmFyIEN1c3RvbUNvbnRlbnRMb2FkZWRFdmVudD1mdW5jdGlvbigpe307Q3VzdG9tQ29udGVudExvYWRlZEV2ZW50LlR5cGU9e0NVU1RPTV9DT05URU5UX0xPQURFRDoiZGVwcmVjYXRlZC1ldmVudCJ9O3ZhciBDb21wYW5pb25BZFNlbGVjdGlvblNldHRpbmdzPWZ1bmN0aW9uKCl7fTtDb21wYW5pb25BZFNlbGVjdGlvblNldHRpbmdzLkNyZWF0aXZlVHlwZT17QUxMOiJBbGwiLEZMQVNIOiJGbGFzaCIsSU1BR0U6IkltYWdlIn0sQ29tcGFuaW9uQWRTZWxlY3Rpb25TZXR0aW5ncy5SZXNvdXJjZVR5cGU9e0FMTDoiQWxsIixIVE1MOiJIdG1sIixJRlJBTUU6IklGcmFtZSIsU1RBVElDOiJTdGF0aWMifSxDb21wYW5pb25BZFNlbGVjdGlvblNldHRpbmdzLlNpemVDcml0ZXJpYT17SUdOT1JFOiJJZ25vcmVTaXplIixTRUxFQ1RfRVhBQ1RfTUFUQ0g6IlNlbGVjdEV4YWN0TWF0Y2giLFNFTEVDVF9ORUFSX01BVENIOiJTZWxlY3ROZWFyTWF0Y2gifTt2YXIgQWRDdWVQb2ludHM9ZnVuY3Rpb24oKXt9O0FkQ3VlUG9pbnRzLnByb3RvdHlwZT17Z2V0Q3VlUG9pbnRzOmZ1bmN0aW9uKCl7cmV0dXJuW119LGdldEFkSWRSZWdpc3RyeTpmdW5jdGlvbigpe3JldHVybiIifSxnZXRBZElzVmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4iIn19O3ZhciBBZFByb2dyZXNzRGF0YT1ub29wRnVuYztPYmplY3QuYXNzaWduKGltYSx7QWRDdWVQb2ludHM6QWRDdWVQb2ludHMsQWREaXNwbGF5Q29udGFpbmVyOkFkRGlzcGxheUNvbnRhaW5lcixBZEVycm9yOkFkRXJyb3IsQWRFcnJvckV2ZW50OkFkRXJyb3JFdmVudCxBZEV2ZW50OkFkRXZlbnQsQWRQb2RJbmZvOkFkUG9kSW5mbyxBZFByb2dyZXNzRGF0YTpBZFByb2dyZXNzRGF0YSxBZHNMb2FkZXI6QWRzTG9hZGVyLEFkc01hbmFnZXI6bWFuYWdlcixBZHNNYW5hZ2VyTG9hZGVkRXZlbnQ6QWRzTWFuYWdlckxvYWRlZEV2ZW50LEFkc1JlbmRlcmluZ1NldHRpbmdzOkFkc1JlbmRlcmluZ1NldHRpbmdzLEFkc1JlcXVlc3Q6QWRzUmVxdWVzdCxDb21wYW5pb25BZDpDb21wYW5pb25BZCxDb21wYW5pb25BZFNlbGVjdGlvblNldHRpbmdzOkNvbXBhbmlvbkFkU2VsZWN0aW9uU2V0dGluZ3MsQ3VzdG9tQ29udGVudExvYWRlZEV2ZW50OkN1c3RvbUNvbnRlbnRMb2FkZWRFdmVudCxncHRQcm94eUluc3RhbmNlOnt9LEltYVNka1NldHRpbmdzOkltYVNka1NldHRpbmdzLE9taWRBY2Nlc3NNb2RlOntET01BSU46ImRvbWFpbiIsRlVMTDoiZnVsbCIsTElNSVRFRDoibGltaXRlZCJ9LHNldHRpbmdzOm5ldyBJbWFTZGtTZXR0aW5ncyxVaUVsZW1lbnRzOntBRF9BVFRSSUJVVElPTjoiYWRBdHRyaWJ1dGlvbiIsQ09VTlRET1dOOiJjb3VudGRvd24ifSxVbml2ZXJzYWxBZElkSW5mbzpmdW5jdGlvbigpe30sVkVSU0lPTjoiMy40NTMuMCIsVmlld01vZGU6e0ZVTExTQ1JFRU46ImZ1bGxzY3JlZW4iLE5PUk1BTDoibm9ybWFsIn19KSx3aW5kb3cuZ29vZ2xlfHwod2luZG93Lmdvb2dsZT17fSksd2luZG93Lmdvb2dsZS5pbWE9aW1hLGZ1bmN0aW9uKHNvdXJjZSxtZXNzYWdlKXtpZighMD09PXNvdXJjZS52ZXJib3NlKXt0cnl7dmFyIGxvZz1jb25zb2xlLmxvZy5iaW5kKGNvbnNvbGUpLHRyYWNlPWNvbnNvbGUudHJhY2UuYmluZChjb25zb2xlKSxwcmVmaXg9c291cmNlLnJ1bGVUZXh0fHwiIjtpZihzb3VyY2UuZG9tYWluTmFtZSl7dmFyIHJ1bGVTdGFydEluZGV4LEFHX1NDUklQVExFVF9NQVJLRVI9IiMlIy8vIixVQk9fU0NSSVBUTEVUX01BUktFUj0iIyMranMiO3NvdXJjZS5ydWxlVGV4dC5pbmRleE9mKEFHX1NDUklQVExFVF9NQVJLRVIpPi0xP3J1bGVTdGFydEluZGV4PXNvdXJjZS5ydWxlVGV4dC5pbmRleE9mKEFHX1NDUklQVExFVF9NQVJLRVIpOnNvdXJjZS5ydWxlVGV4dC5pbmRleE9mKFVCT19TQ1JJUFRMRVRfTUFSS0VSKT4tMSYmKHJ1bGVTdGFydEluZGV4PXNvdXJjZS5ydWxlVGV4dC5pbmRleE9mKFVCT19TQ1JJUFRMRVRfTUFSS0VSKSk7dmFyIHJ1bGVQYXJ0PXNvdXJjZS5ydWxlVGV4dC5zbGljZShydWxlU3RhcnRJbmRleCk7cHJlZml4PSIiLmNvbmNhdChzb3VyY2UuZG9tYWluTmFtZSkuY29uY2F0KHJ1bGVQYXJ0KX12YXIgTE9HX01BUktFUj0ibG9nOiAiO21lc3NhZ2UmJigtMT09PW1lc3NhZ2UuaW5kZXhPZihMT0dfTUFSS0VSKT9sb2coIiIuY29uY2F0KHByZWZpeCwiIG1lc3NhZ2U6XG4iKS5jb25jYXQobWVzc2FnZSkpOmxvZyhtZXNzYWdlLnNsaWNlKExPR19NQVJLRVIubGVuZ3RoKSkpLGxvZygiIi5jb25jYXQocHJlZml4LCIgdHJhY2Ugc3RhcnQiKSksdHJhY2UmJnRyYWNlKCksbG9nKCIiLmNvbmNhdChwcmVmaXgsIiB0cmFjZSBlbmQiKSl9Y2F0Y2goZSl7fSJmdW5jdGlvbiI9PXR5cGVvZiB3aW5kb3cuX19kZWJ1ZyYmd2luZG93Ll9fZGVidWcoc291cmNlKX19KHNvdXJjZSl9KS5hcHBseSh0aGlzLHVwZGF0ZWRBcmdzKX1jYXRjaChlKXtjb25zb2xlLmxvZyhlKX19KHtuYW1lOiJnb29nbGUtaW1hMyIsYXJnczpbXX0sW10pOw=="
+ "content": "IWZ1bmN0aW9uKHNvdXJjZSxhcmdzKXtmdW5jdGlvbiBub29wRnVuYygpe31mdW5jdGlvbiBsb2dNZXNzYWdlKHNvdXJjZSxtZXNzYWdlKXt2YXIgZm9yY2VkPWFyZ3VtZW50cy5sZW5ndGg+MiYmdm9pZCAwIT09YXJndW1lbnRzWzJdJiZhcmd1bWVudHNbMl07KGZvcmNlZHx8c291cmNlLnZlcmJvc2UpJiZjb25zb2xlLmxvZygiIi5jb25jYXQoc291cmNlLm5hbWUsIjogIikuY29uY2F0KG1lc3NhZ2UpKX1jb25zdCB1cGRhdGVkQXJncz1hcmdzP1tdLmNvbmNhdChzb3VyY2UpLmNvbmNhdChhcmdzKTpbc291cmNlXTt0cnl7KGZ1bmN0aW9uKHNvdXJjZSl7dmFyIGltYT17fSxBZERpc3BsYXlDb250YWluZXI9ZnVuY3Rpb24oKXt9O0FkRGlzcGxheUNvbnRhaW5lci5wcm90b3R5cGUuZGVzdHJveT1ub29wRnVuYyxBZERpc3BsYXlDb250YWluZXIucHJvdG90eXBlLmluaXRpYWxpemU9bm9vcEZ1bmM7dmFyIEltYVNka1NldHRpbmdzPWZ1bmN0aW9uKCl7fTtJbWFTZGtTZXR0aW5ncy5Db21wYW5pb25CYWNrZmlsbE1vZGU9e0FMV0FZUzoiYWx3YXlzIixPTl9NQVNURVJfQUQ6Im9uX21hc3Rlcl9hZCJ9LEltYVNka1NldHRpbmdzLlZwYWlkTW9kZT17RElTQUJMRUQ6MCxFTkFCTEVEOjEsSU5TRUNVUkU6Mn0sSW1hU2RrU2V0dGluZ3MucHJvdG90eXBlPXtjOiEwLGY6e30saTohMSxsOiIiLHA6IiIscjowLHQ6IiIsdjoiIixnZXRDb21wYW5pb25CYWNrZmlsbDpub29wRnVuYyxnZXREaXNhYmxlQ3VzdG9tUGxheWJhY2tGb3JJT1MxMFBsdXM6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5pfSxnZXREaXNhYmxlZEZsYXNoQWRzOmZ1bmN0aW9uKCl7cmV0dXJuITB9LGdldEZlYXR1cmVGbGFnczpmdW5jdGlvbigpe3JldHVybiB0aGlzLmZ9LGdldExvY2FsZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLmx9LGdldE51bVJlZGlyZWN0czpmdW5jdGlvbigpe3JldHVybiB0aGlzLnJ9LGdldFBsYXllclR5cGU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy50fSxnZXRQbGF5ZXJWZXJzaW9uOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMudn0sZ2V0UHBpZDpmdW5jdGlvbigpe3JldHVybiB0aGlzLnB9LGdldFZwYWlkTW9kZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLkN9LGlzQ29va2llc0VuYWJsZWQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jfSxpc1ZwYWlkQWRhcHRlcjpmdW5jdGlvbigpe3JldHVybiB0aGlzLk19LHNldENvbXBhbmlvbkJhY2tmaWxsOm5vb3BGdW5jLHNldEF1dG9QbGF5QWRCcmVha3M6ZnVuY3Rpb24oYSl7dGhpcy5LPWF9LHNldENvb2tpZXNFbmFibGVkOmZ1bmN0aW9uKGMpe3RoaXMuYz0hIWN9LHNldERpc2FibGVDdXN0b21QbGF5YmFja0ZvcklPUzEwUGx1czpmdW5jdGlvbihpKXt0aGlzLmk9ISFpfSxzZXREaXNhYmxlRmxhc2hBZHM6bm9vcEZ1bmMsc2V0RmVhdHVyZUZsYWdzOmZ1bmN0aW9uKGYpe3RoaXMuZj0hIWZ9LHNldElzVnBhaWRBZGFwdGVyOmZ1bmN0aW9uKGEpe3RoaXMuTT1hfSxzZXRMb2NhbGU6ZnVuY3Rpb24obCl7dGhpcy5sPSEhbH0sc2V0TnVtUmVkaXJlY3RzOmZ1bmN0aW9uKHIpe3RoaXMucj0hIXJ9LHNldFBhZ2VDb3JyZWxhdG9yOmZ1bmN0aW9uKGEpe3RoaXMuUj1hfSxzZXRQbGF5ZXJUeXBlOmZ1bmN0aW9uKHQpe3RoaXMudD0hIXR9LHNldFBsYXllclZlcnNpb246ZnVuY3Rpb24odil7dGhpcy52PSEhdn0sc2V0UHBpZDpmdW5jdGlvbihwKXt0aGlzLnA9ISFwfSxzZXRWcGFpZE1vZGU6ZnVuY3Rpb24oYSl7dGhpcy5DPWF9LHNldFNlc3Npb25JZDpub29wRnVuYyxzZXRTdHJlYW1Db3JyZWxhdG9yOm5vb3BGdW5jLHNldFZwYWlkQWxsb3dlZDpub29wRnVuYyxDb21wYW5pb25CYWNrZmlsbE1vZGU6e0FMV0FZUzoiYWx3YXlzIixPTl9NQVNURVJfQUQ6Im9uX21hc3Rlcl9hZCJ9LFZwYWlkTW9kZTp7RElTQUJMRUQ6MCxFTkFCTEVEOjEsSU5TRUNVUkU6Mn19O3ZhciBFdmVudEhhbmRsZXI9ZnVuY3Rpb24oKXt0aGlzLmxpc3RlbmVycz1uZXcgTWFwLHRoaXMuX2Rpc3BhdGNoPWZ1bmN0aW9uKGUpe2Zvcih2YXIgbGlzdGVuZXJzPXRoaXMubGlzdGVuZXJzLmdldChlLnR5cGUpfHxbXSxfaT0wLF9BcnJheSRmcm9tPUFycmF5LmZyb20obGlzdGVuZXJzKTtfaTxfQXJyYXkkZnJvbS5sZW5ndGg7X2krKyl7dmFyIGxpc3RlbmVyPV9BcnJheSRmcm9tW19pXTt0cnl7bGlzdGVuZXIoZSl9Y2F0Y2gocil7bG9nTWVzc2FnZShzb3VyY2Uscil9fX0sdGhpcy5hZGRFdmVudExpc3RlbmVyPWZ1bmN0aW9uKHQsYyl7dGhpcy5saXN0ZW5lcnMuaGFzKHQpfHx0aGlzLmxpc3RlbmVycy5zZXQodCxuZXcgU2V0KSx0aGlzLmxpc3RlbmVycy5nZXQodCkuYWRkKGMpfSx0aGlzLnJlbW92ZUV2ZW50TGlzdGVuZXI9ZnVuY3Rpb24odCxjKXt2YXIgX3RoaXMkbGlzdGVuZXJzJGdldDtudWxsPT09KF90aGlzJGxpc3RlbmVycyRnZXQ9dGhpcy5saXN0ZW5lcnMuZ2V0KHQpKXx8dm9pZCAwPT09X3RoaXMkbGlzdGVuZXJzJGdldHx8X3RoaXMkbGlzdGVuZXJzJGdldC5kZWxldGUoYyl9fSxBZHNNYW5hZ2VyPW5ldyBFdmVudEhhbmRsZXI7QWRzTWFuYWdlci52b2x1bWU9MSxBZHNNYW5hZ2VyLmNvbGxhcHNlPW5vb3BGdW5jLEFkc01hbmFnZXIuY29uZmlndXJlQWRzTWFuYWdlcj1ub29wRnVuYyxBZHNNYW5hZ2VyLmRlc3Ryb3k9bm9vcEZ1bmMsQWRzTWFuYWdlci5kaXNjYXJkQWRCcmVhaz1ub29wRnVuYyxBZHNNYW5hZ2VyLmV4cGFuZD1ub29wRnVuYyxBZHNNYW5hZ2VyLmZvY3VzPW5vb3BGdW5jLEFkc01hbmFnZXIuZ2V0QWRTa2lwcGFibGVTdGF0ZT1mdW5jdGlvbigpe3JldHVybiExfSxBZHNNYW5hZ2VyLmdldEN1ZVBvaW50cz1mdW5jdGlvbigpe3JldHVyblswXX0sQWRzTWFuYWdlci5nZXRDdXJyZW50QWQ9ZnVuY3Rpb24oKXtyZXR1cm4gY3VycmVudEFkfSxBZHNNYW5hZ2VyLmdldEN1cnJlbnRBZEN1ZVBvaW50cz1mdW5jdGlvbigpe3JldHVybltdfSxBZHNNYW5hZ2VyLmdldFJlbWFpbmluZ1RpbWU9ZnVuY3Rpb24oKXtyZXR1cm4gMH0sQWRzTWFuYWdlci5nZXRWb2x1bWU9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy52b2x1bWV9LEFkc01hbmFnZXIuaW5pdD1ub29wRnVuYyxBZHNNYW5hZ2VyLmlzQ3VzdG9tQ2xpY2tUcmFja2luZ1VzZWQ9ZnVuY3Rpb24oKXtyZXR1cm4hMX0sQWRzTWFuYWdlci5pc0N1c3RvbVBsYXliYWNrVXNlZD1mdW5jdGlvbigpe3JldHVybiExfSxBZHNNYW5hZ2VyLnBhdXNlPW5vb3BGdW5jLEFkc01hbmFnZXIucmVxdWVzdE5leHRBZEJyZWFrPW5vb3BGdW5jLEFkc01hbmFnZXIucmVzaXplPW5vb3BGdW5jLEFkc01hbmFnZXIucmVzdW1lPW5vb3BGdW5jLEFkc01hbmFnZXIuc2V0Vm9sdW1lPWZ1bmN0aW9uKHYpe3RoaXMudm9sdW1lPXZ9LEFkc01hbmFnZXIuc2tpcD1ub29wRnVuYyxBZHNNYW5hZ2VyLnN0YXJ0PWZ1bmN0aW9uKCl7Zm9yKHZhciBfaTI9MCxfYXJyPVtBZEV2ZW50LlR5cGUuQUxMX0FEU19DT01QTEVURUQsQWRFdmVudC5UeXBlLkNPTlRFTlRfUkVTVU1FX1JFUVVFU1RFRF07X2kyPF9hcnIubGVuZ3RoO19pMisrKXt2YXIgdHlwZT1fYXJyW19pMl07dHJ5e3RoaXMuX2Rpc3BhdGNoKG5ldyBpbWEuQWRFdmVudCh0eXBlKSl9Y2F0Y2goZSl7bG9nTWVzc2FnZShzb3VyY2UsZSl9fX0sQWRzTWFuYWdlci5zdG9wPW5vb3BGdW5jLEFkc01hbmFnZXIudXBkYXRlQWRzUmVuZGVyaW5nU2V0dGluZ3M9bm9vcEZ1bmM7dmFyIG1hbmFnZXI9T2JqZWN0LmNyZWF0ZShBZHNNYW5hZ2VyKSxBZHNNYW5hZ2VyTG9hZGVkRXZlbnQ9ZnVuY3Rpb24odHlwZSxhZHNSZXF1ZXN0LHVzZXJSZXF1ZXN0Q29udGV4dCl7dGhpcy50eXBlPXR5cGUsdGhpcy5hZHNSZXF1ZXN0PWFkc1JlcXVlc3QsdGhpcy51c2VyUmVxdWVzdENvbnRleHQ9dXNlclJlcXVlc3RDb250ZXh0fTtBZHNNYW5hZ2VyTG9hZGVkRXZlbnQucHJvdG90eXBlPXtnZXRBZHNNYW5hZ2VyOmZ1bmN0aW9uKCl7cmV0dXJuIG1hbmFnZXJ9LGdldFVzZXJSZXF1ZXN0Q29udGV4dDpmdW5jdGlvbigpe3JldHVybiB0aGlzLnVzZXJSZXF1ZXN0Q29udGV4dD90aGlzLnVzZXJSZXF1ZXN0Q29udGV4dDp7fX19LEFkc01hbmFnZXJMb2FkZWRFdmVudC5UeXBlPXtBRFNfTUFOQUdFUl9MT0FERUQ6ImFkc01hbmFnZXJMb2FkZWQifTt2YXIgQWRzTG9hZGVyPUV2ZW50SGFuZGxlcjtBZHNMb2FkZXIucHJvdG90eXBlLnNldHRpbmdzPW5ldyBJbWFTZGtTZXR0aW5ncyxBZHNMb2FkZXIucHJvdG90eXBlLmNvbnRlbnRDb21wbGV0ZT1ub29wRnVuYyxBZHNMb2FkZXIucHJvdG90eXBlLmRlc3Ryb3k9bm9vcEZ1bmMsQWRzTG9hZGVyLnByb3RvdHlwZS5nZXRTZXR0aW5ncz1mdW5jdGlvbigpe3JldHVybiB0aGlzLnNldHRpbmdzfSxBZHNMb2FkZXIucHJvdG90eXBlLmdldFZlcnNpb249ZnVuY3Rpb24oKXtyZXR1cm4iMy40NTMuMCJ9LEFkc0xvYWRlci5wcm90b3R5cGUucmVxdWVzdEFkcz1mdW5jdGlvbihhZHNSZXF1ZXN0LHVzZXJSZXF1ZXN0Q29udGV4dCl7dmFyIF90aGlzPXRoaXM7cmVxdWVzdEFuaW1hdGlvbkZyYW1lKChmdW5jdGlvbigpe3ZhciBBRFNfTUFOQUdFUl9MT0FERUQ9QWRzTWFuYWdlckxvYWRlZEV2ZW50LlR5cGUuQURTX01BTkFHRVJfTE9BREVELGV2ZW50PW5ldyBpbWEuQWRzTWFuYWdlckxvYWRlZEV2ZW50KEFEU19NQU5BR0VSX0xPQURFRCxhZHNSZXF1ZXN0LHVzZXJSZXF1ZXN0Q29udGV4dCk7X3RoaXMuX2Rpc3BhdGNoKGV2ZW50KX0pKTt2YXIgZT1uZXcgaW1hLkFkRXJyb3IoImFkUGxheUVycm9yIiwxMjA1LDEyMDUsIlRoZSBicm93c2VyIHByZXZlbnRlZCBwbGF5YmFjayBpbml0aWF0ZWQgd2l0aG91dCB1c2VyIGludGVyYWN0aW9uLiIsYWRzUmVxdWVzdCx1c2VyUmVxdWVzdENvbnRleHQpO3JlcXVlc3RBbmltYXRpb25GcmFtZSgoZnVuY3Rpb24oKXtfdGhpcy5fZGlzcGF0Y2gobmV3IGltYS5BZEVycm9yRXZlbnQoZSkpfSkpfTt2YXIgQWRzUmVuZGVyaW5nU2V0dGluZ3M9bm9vcEZ1bmMsQWRzUmVxdWVzdD1mdW5jdGlvbigpe307QWRzUmVxdWVzdC5wcm90b3R5cGU9e3NldEFkV2lsbEF1dG9QbGF5Om5vb3BGdW5jLHNldEFkV2lsbFBsYXlNdXRlZDpub29wRnVuYyxzZXRDb250aW51b3VzUGxheWJhY2s6bm9vcEZ1bmN9O3ZhciBBZFBvZEluZm89ZnVuY3Rpb24oKXt9O0FkUG9kSW5mby5wcm90b3R5cGU9e2dldEFkUG9zaXRpb246ZnVuY3Rpb24oKXtyZXR1cm4gMX0sZ2V0SXNCdW1wZXI6ZnVuY3Rpb24oKXtyZXR1cm4hMX0sZ2V0TWF4RHVyYXRpb246ZnVuY3Rpb24oKXtyZXR1cm4tMX0sZ2V0UG9kSW5kZXg6ZnVuY3Rpb24oKXtyZXR1cm4gMX0sZ2V0VGltZU9mZnNldDpmdW5jdGlvbigpe3JldHVybiAwfSxnZXRUb3RhbEFkczpmdW5jdGlvbigpe3JldHVybiAxfX07dmFyIEFkPWZ1bmN0aW9uKCl7fTtBZC5wcm90b3R5cGU9e3BpOm5ldyBBZFBvZEluZm8sZ2V0QWRJZDpmdW5jdGlvbigpe3JldHVybiIifSxnZXRBZFBvZEluZm86ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5waX0sZ2V0QWRTeXN0ZW06ZnVuY3Rpb24oKXtyZXR1cm4iIn0sZ2V0QWR2ZXJ0aXNlck5hbWU6ZnVuY3Rpb24oKXtyZXR1cm4iIn0sZ2V0QXBpRnJhbWV3b3JrOmZ1bmN0aW9uKCl7cmV0dXJuIG51bGx9LGdldENvbXBhbmlvbkFkczpmdW5jdGlvbigpe3JldHVybltdfSxnZXRDb250ZW50VHlwZTpmdW5jdGlvbigpe3JldHVybiIifSxnZXRDcmVhdGl2ZUFkSWQ6ZnVuY3Rpb24oKXtyZXR1cm4iIn0sZ2V0RGVhbElkOmZ1bmN0aW9uKCl7cmV0dXJuIiJ9LGdldERlc2NyaXB0aW9uOmZ1bmN0aW9uKCl7cmV0dXJuIiJ9LGdldER1cmF0aW9uOmZ1bmN0aW9uKCl7cmV0dXJuIDguNX0sZ2V0SGVpZ2h0OmZ1bmN0aW9uKCl7cmV0dXJuIDB9LGdldE1lZGlhVXJsOmZ1bmN0aW9uKCl7cmV0dXJuIG51bGx9LGdldE1pblN1Z2dlc3RlZER1cmF0aW9uOmZ1bmN0aW9uKCl7cmV0dXJuLTJ9LGdldFNraXBUaW1lT2Zmc2V0OmZ1bmN0aW9uKCl7cmV0dXJuLTF9LGdldFN1cnZleVVybDpmdW5jdGlvbigpe3JldHVybiBudWxsfSxnZXRUaXRsZTpmdW5jdGlvbigpe3JldHVybiIifSxnZXRUcmFmZmlja2luZ1BhcmFtZXRlcnNTdHJpbmc6ZnVuY3Rpb24oKXtyZXR1cm4iIn0sZ2V0VWlFbGVtZW50czpmdW5jdGlvbigpe3JldHVyblsiIl19LGdldFVuaXZlcnNhbEFkSWRSZWdpc3RyeTpmdW5jdGlvbigpe3JldHVybiJ1bmtub3duIn0sZ2V0VW5pdmVyc2FsQWRJZHM6ZnVuY3Rpb24oKXtyZXR1cm5bIiJdfSxnZXRVbml2ZXJzYWxBZElkVmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4idW5rbm93biJ9LGdldFZhc3RNZWRpYUJpdHJhdGU6ZnVuY3Rpb24oKXtyZXR1cm4gMH0sZ2V0VmFzdE1lZGlhSGVpZ2h0OmZ1bmN0aW9uKCl7cmV0dXJuIDB9LGdldFZhc3RNZWRpYVdpZHRoOmZ1bmN0aW9uKCl7cmV0dXJuIDB9LGdldFdpZHRoOmZ1bmN0aW9uKCl7cmV0dXJuIDB9LGdldFdyYXBwZXJBZElkczpmdW5jdGlvbigpe3JldHVyblsiIl19LGdldFdyYXBwZXJBZFN5c3RlbXM6ZnVuY3Rpb24oKXtyZXR1cm5bIiJdfSxnZXRXcmFwcGVyQ3JlYXRpdmVJZHM6ZnVuY3Rpb24oKXtyZXR1cm5bIiJdfSxpc0xpbmVhcjpmdW5jdGlvbigpe3JldHVybiEwfSxpc1NraXBwYWJsZTpmdW5jdGlvbigpe3JldHVybiEwfX07dmFyIENvbXBhbmlvbkFkPWZ1bmN0aW9uKCl7fTtDb21wYW5pb25BZC5wcm90b3R5cGU9e2dldEFkU2xvdElkOmZ1bmN0aW9uKCl7cmV0dXJuIiJ9LGdldENvbnRlbnQ6ZnVuY3Rpb24oKXtyZXR1cm4iIn0sZ2V0Q29udGVudFR5cGU6ZnVuY3Rpb24oKXtyZXR1cm4iIn0sZ2V0SGVpZ2h0OmZ1bmN0aW9uKCl7cmV0dXJuIDF9LGdldFdpZHRoOmZ1bmN0aW9uKCl7cmV0dXJuIDF9fTt2YXIgQWRFcnJvcj1mdW5jdGlvbih0eXBlLGNvZGUsdmFzdCxtZXNzYWdlLGFkc1JlcXVlc3QsdXNlclJlcXVlc3RDb250ZXh0KXt0aGlzLmVycm9yQ29kZT1jb2RlLHRoaXMubWVzc2FnZT1tZXNzYWdlLHRoaXMudHlwZT10eXBlLHRoaXMuYWRzUmVxdWVzdD1hZHNSZXF1ZXN0LHRoaXMudXNlclJlcXVlc3RDb250ZXh0PXVzZXJSZXF1ZXN0Q29udGV4dCx0aGlzLmdldEVycm9yQ29kZT1mdW5jdGlvbigpe3JldHVybiB0aGlzLmVycm9yQ29kZX0sdGhpcy5nZXRJbm5lckVycm9yPWZ1bmN0aW9uKCl7fSx0aGlzLmdldE1lc3NhZ2U9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5tZXNzYWdlfSx0aGlzLmdldFR5cGU9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy50eXBlfSx0aGlzLmdldFZhc3RFcnJvckNvZGU9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy52YXN0RXJyb3JDb2RlfSx0aGlzLnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIkFkRXJyb3IgIi5jb25jYXQodGhpcy5lcnJvckNvZGUsIjogIikuY29uY2F0KHRoaXMubWVzc2FnZSl9fTtBZEVycm9yLkVycm9yQ29kZT17fSxBZEVycm9yLlR5cGU9e307dmFyIGN1cnJlbnRBZD1mdW5jdGlvbigpe3RyeXtmb3IodmFyIF9pMz0wLF9PYmplY3QkdmFsdWVzPU9iamVjdC52YWx1ZXMod2luZG93LnZpZGlibGUuX2dldENvbnRleHRzKCkpO19pMzxfT2JqZWN0JHZhbHVlcy5sZW5ndGg7X2kzKyspe3ZhciBfY3R4JGdldFBsYXllcixfY3R4JGdldFBsYXllciRkaXY7aWYobnVsbCE9PShfY3R4JGdldFBsYXllcj1fT2JqZWN0JHZhbHVlc1tfaTNdLmdldFBsYXllcigpKSYmdm9pZCAwIT09X2N0eCRnZXRQbGF5ZXImJm51bGwhPT0oX2N0eCRnZXRQbGF5ZXIkZGl2PV9jdHgkZ2V0UGxheWVyLmRpdikmJnZvaWQgMCE9PV9jdHgkZ2V0UGxheWVyJGRpdiYmX2N0eCRnZXRQbGF5ZXIkZGl2LmlubmVySFRNTC5pbmNsdWRlcygid3d3LmVuZ2FkZ2V0LmNvbSIpKXJldHVybiEwfX1jYXRjaChlKXt9cmV0dXJuITF9KCk/dm9pZCAwOm5ldyBBZCxBZEV2ZW50PWZ1bmN0aW9uKHR5cGUpe3RoaXMudHlwZT10eXBlfTtBZEV2ZW50LnByb3RvdHlwZT17Z2V0QWQ6ZnVuY3Rpb24oKXtyZXR1cm4gY3VycmVudEFkfSxnZXRBZERhdGE6ZnVuY3Rpb24oKXt9fSxBZEV2ZW50LlR5cGU9e0FEX0JSRUFLX1JFQURZOiJhZEJyZWFrUmVhZHkiLEFEX0JVRkZFUklORzoiYWRCdWZmZXJpbmciLEFEX0NBTl9QTEFZOiJhZENhblBsYXkiLEFEX01FVEFEQVRBOiJhZE1ldGFkYXRhIixBRF9QUk9HUkVTUzoiYWRQcm9ncmVzcyIsQUxMX0FEU19DT01QTEVURUQ6ImFsbEFkc0NvbXBsZXRlZCIsQ0xJQ0s6ImNsaWNrIixDT01QTEVURToiY29tcGxldGUiLENPTlRFTlRfUEFVU0VfUkVRVUVTVEVEOiJjb250ZW50UGF1c2VSZXF1ZXN0ZWQiLENPTlRFTlRfUkVTVU1FX1JFUVVFU1RFRDoiY29udGVudFJlc3VtZVJlcXVlc3RlZCIsRFVSQVRJT05fQ0hBTkdFOiJkdXJhdGlvbkNoYW5nZSIsRVhQQU5ERURfQ0hBTkdFRDoiZXhwYW5kZWRDaGFuZ2VkIixGSVJTVF9RVUFSVElMRToiZmlyc3RRdWFydGlsZSIsSU1QUkVTU0lPTjoiaW1wcmVzc2lvbiIsSU5URVJBQ1RJT046ImludGVyYWN0aW9uIixMSU5FQVJfQ0hBTkdFOiJsaW5lYXJDaGFuZ2UiLExJTkVBUl9DSEFOR0VEOiJsaW5lYXJDaGFuZ2VkIixMT0FERUQ6ImxvYWRlZCIsTE9HOiJsb2ciLE1JRFBPSU5UOiJtaWRwb2ludCIsUEFVU0VEOiJwYXVzZSIsUkVTVU1FRDoicmVzdW1lIixTS0lQUEFCTEVfU1RBVEVfQ0hBTkdFRDoic2tpcHBhYmxlU3RhdGVDaGFuZ2VkIixTS0lQUEVEOiJza2lwIixTVEFSVEVEOiJzdGFydCIsVEhJUkRfUVVBUlRJTEU6InRoaXJkUXVhcnRpbGUiLFVTRVJfQ0xPU0U6InVzZXJDbG9zZSIsVklERU9fQ0xJQ0tFRDoidmlkZW9DbGlja2VkIixWSURFT19JQ09OX0NMSUNLRUQ6InZpZGVvSWNvbkNsaWNrZWQiLFZJRVdBQkxFX0lNUFJFU1NJT046InZpZXdhYmxlX2ltcHJlc3Npb24iLFZPTFVNRV9DSEFOR0VEOiJ2b2x1bWVDaGFuZ2UiLFZPTFVNRV9NVVRFRDoibXV0ZSJ9O3ZhciBBZEVycm9yRXZlbnQ9ZnVuY3Rpb24oZXJyb3Ipe3RoaXMuZXJyb3I9ZXJyb3IsdGhpcy50eXBlPSJhZEVycm9yIix0aGlzLmdldEVycm9yPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZXJyb3J9LHRoaXMuZ2V0VXNlclJlcXVlc3RDb250ZXh0PWZ1bmN0aW9uKCl7dmFyIF90aGlzJGVycm9yO3JldHVybiBudWxsIT09KF90aGlzJGVycm9yPXRoaXMuZXJyb3IpJiZ2b2lkIDAhPT1fdGhpcyRlcnJvciYmX3RoaXMkZXJyb3IudXNlclJlcXVlc3RDb250ZXh0P3RoaXMuZXJyb3IudXNlclJlcXVlc3RDb250ZXh0Ont9fX07QWRFcnJvckV2ZW50LlR5cGU9e0FEX0VSUk9SOiJhZEVycm9yIn07dmFyIEN1c3RvbUNvbnRlbnRMb2FkZWRFdmVudD1mdW5jdGlvbigpe307Q3VzdG9tQ29udGVudExvYWRlZEV2ZW50LlR5cGU9e0NVU1RPTV9DT05URU5UX0xPQURFRDoiZGVwcmVjYXRlZC1ldmVudCJ9O3ZhciBDb21wYW5pb25BZFNlbGVjdGlvblNldHRpbmdzPWZ1bmN0aW9uKCl7fTtDb21wYW5pb25BZFNlbGVjdGlvblNldHRpbmdzLkNyZWF0aXZlVHlwZT17QUxMOiJBbGwiLEZMQVNIOiJGbGFzaCIsSU1BR0U6IkltYWdlIn0sQ29tcGFuaW9uQWRTZWxlY3Rpb25TZXR0aW5ncy5SZXNvdXJjZVR5cGU9e0FMTDoiQWxsIixIVE1MOiJIdG1sIixJRlJBTUU6IklGcmFtZSIsU1RBVElDOiJTdGF0aWMifSxDb21wYW5pb25BZFNlbGVjdGlvblNldHRpbmdzLlNpemVDcml0ZXJpYT17SUdOT1JFOiJJZ25vcmVTaXplIixTRUxFQ1RfRVhBQ1RfTUFUQ0g6IlNlbGVjdEV4YWN0TWF0Y2giLFNFTEVDVF9ORUFSX01BVENIOiJTZWxlY3ROZWFyTWF0Y2gifTt2YXIgQWRDdWVQb2ludHM9ZnVuY3Rpb24oKXt9O0FkQ3VlUG9pbnRzLnByb3RvdHlwZT17Z2V0Q3VlUG9pbnRzOmZ1bmN0aW9uKCl7cmV0dXJuW119LGdldEFkSWRSZWdpc3RyeTpmdW5jdGlvbigpe3JldHVybiIifSxnZXRBZElzVmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4iIn19O3ZhciBBZFByb2dyZXNzRGF0YT1ub29wRnVuYztPYmplY3QuYXNzaWduKGltYSx7QWRDdWVQb2ludHM6QWRDdWVQb2ludHMsQWREaXNwbGF5Q29udGFpbmVyOkFkRGlzcGxheUNvbnRhaW5lcixBZEVycm9yOkFkRXJyb3IsQWRFcnJvckV2ZW50OkFkRXJyb3JFdmVudCxBZEV2ZW50OkFkRXZlbnQsQWRQb2RJbmZvOkFkUG9kSW5mbyxBZFByb2dyZXNzRGF0YTpBZFByb2dyZXNzRGF0YSxBZHNMb2FkZXI6QWRzTG9hZGVyLEFkc01hbmFnZXI6bWFuYWdlcixBZHNNYW5hZ2VyTG9hZGVkRXZlbnQ6QWRzTWFuYWdlckxvYWRlZEV2ZW50LEFkc1JlbmRlcmluZ1NldHRpbmdzOkFkc1JlbmRlcmluZ1NldHRpbmdzLEFkc1JlcXVlc3Q6QWRzUmVxdWVzdCxDb21wYW5pb25BZDpDb21wYW5pb25BZCxDb21wYW5pb25BZFNlbGVjdGlvblNldHRpbmdzOkNvbXBhbmlvbkFkU2VsZWN0aW9uU2V0dGluZ3MsQ3VzdG9tQ29udGVudExvYWRlZEV2ZW50OkN1c3RvbUNvbnRlbnRMb2FkZWRFdmVudCxncHRQcm94eUluc3RhbmNlOnt9LEltYVNka1NldHRpbmdzOkltYVNka1NldHRpbmdzLE9taWRBY2Nlc3NNb2RlOntET01BSU46ImRvbWFpbiIsRlVMTDoiZnVsbCIsTElNSVRFRDoibGltaXRlZCJ9LHNldHRpbmdzOm5ldyBJbWFTZGtTZXR0aW5ncyxVaUVsZW1lbnRzOntBRF9BVFRSSUJVVElPTjoiYWRBdHRyaWJ1dGlvbiIsQ09VTlRET1dOOiJjb3VudGRvd24ifSxVbml2ZXJzYWxBZElkSW5mbzpmdW5jdGlvbigpe30sVkVSU0lPTjoiMy40NTMuMCIsVmlld01vZGU6e0ZVTExTQ1JFRU46ImZ1bGxzY3JlZW4iLE5PUk1BTDoibm9ybWFsIn19KSx3aW5kb3cuZ29vZ2xlfHwod2luZG93Lmdvb2dsZT17fSksd2luZG93Lmdvb2dsZS5pbWE9aW1hLGZ1bmN0aW9uKHNvdXJjZSl7aWYoITA9PT1zb3VyY2UudmVyYm9zZSl7dHJ5e3ZhciBsb2c9Y29uc29sZS5sb2cuYmluZChjb25zb2xlKSx0cmFjZT1jb25zb2xlLnRyYWNlLmJpbmQoY29uc29sZSkscHJlZml4PXNvdXJjZS5ydWxlVGV4dHx8IiI7aWYoc291cmNlLmRvbWFpbk5hbWUpe3ZhciBydWxlU3RhcnRJbmRleCxBR19TQ1JJUFRMRVRfTUFSS0VSPSIjJSMvLyIsVUJPX1NDUklQVExFVF9NQVJLRVI9IiMjK2pzIjtzb3VyY2UucnVsZVRleHQuaW5kZXhPZihBR19TQ1JJUFRMRVRfTUFSS0VSKT4tMT9ydWxlU3RhcnRJbmRleD1zb3VyY2UucnVsZVRleHQuaW5kZXhPZihBR19TQ1JJUFRMRVRfTUFSS0VSKTpzb3VyY2UucnVsZVRleHQuaW5kZXhPZihVQk9fU0NSSVBUTEVUX01BUktFUik+LTEmJihydWxlU3RhcnRJbmRleD1zb3VyY2UucnVsZVRleHQuaW5kZXhPZihVQk9fU0NSSVBUTEVUX01BUktFUikpO3ZhciBydWxlUGFydD1zb3VyY2UucnVsZVRleHQuc2xpY2UocnVsZVN0YXJ0SW5kZXgpO3ByZWZpeD0iIi5jb25jYXQoc291cmNlLmRvbWFpbk5hbWUpLmNvbmNhdChydWxlUGFydCl9bG9nKCIiLmNvbmNhdChwcmVmaXgsIiB0cmFjZSBzdGFydCIpKSx0cmFjZSYmdHJhY2UoKSxsb2coIiIuY29uY2F0KHByZWZpeCwiIHRyYWNlIGVuZCIpKX1jYXRjaChlKXt9ImZ1bmN0aW9uIj09dHlwZW9mIHdpbmRvdy5fX2RlYnVnJiZ3aW5kb3cuX19kZWJ1Zyhzb3VyY2UpfX0oc291cmNlKX0pLmFwcGx5KHRoaXMsdXBkYXRlZEFyZ3MpfWNhdGNoKGUpe2NvbnNvbGUubG9nKGUpfX0oe25hbWU6Imdvb2dsZS1pbWEzIixhcmdzOltdfSxbXSk7"
},
{
"title": "googlesyndication-adsbygoogle",
@@ -239,7 +242,7 @@
],
"isBlocking": false,
"contentType": "application/javascript;base64",
- "content": "IWZ1bmN0aW9uKHNvdXJjZSxhcmdzKXtjb25zdCB1cGRhdGVkQXJncz1hcmdzP1tdLmNvbmNhdChzb3VyY2UpLmNvbmNhdChhcmdzKTpbc291cmNlXTt0cnl7KGZ1bmN0aW9uKHNvdXJjZSl7d2luZG93LmFkc2J5Z29vZ2xlPXtsb2FkZWQ6ITAscHVzaDpmdW5jdGlvbihhcmcpe2lmKHZvaWQgMD09PXRoaXMubGVuZ3RoJiYodGhpcy5sZW5ndGg9MCx0aGlzLmxlbmd0aCs9MSksbnVsbCE9PWFyZyYmYXJnIGluc3RhbmNlb2YgT2JqZWN0JiYiT2JqZWN0Ij09PWFyZy5jb25zdHJ1Y3Rvci5uYW1lKWZvcih2YXIgX2k9MCxfT2JqZWN0JGtleXM9T2JqZWN0LmtleXMoYXJnKTtfaTxfT2JqZWN0JGtleXMubGVuZ3RoO19pKyspe3ZhciBrZXk9X09iamVjdCRrZXlzW19pXTtpZigiZnVuY3Rpb24iPT10eXBlb2YgYXJnW2tleV0pdHJ5e2FyZ1trZXldLmNhbGwodGhpcyx7fSl9Y2F0Y2goX3VudXNlZCl7fX19fTtmb3IodmFyIGFkRWxlbXM9ZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgiLmFkc2J5Z29vZ2xlIiksY3NzPSJoZWlnaHQ6MXB4IWltcG9ydGFudDttYXgtaGVpZ2h0OjFweCFpbXBvcnRhbnQ7bWF4LXdpZHRoOjFweCFpbXBvcnRhbnQ7d2lkdGg6MXB4IWltcG9ydGFudDsiLGV4ZWN1dGVkPSExLGk9MDtpPGFkRWxlbXMubGVuZ3RoO2krPTEpe3ZhciBhZEVsZW1DaGlsZE5vZGVzPWFkRWxlbXNbaV0uY2hpbGROb2RlcyxjaGlsZE5vZGVzUXVhbnRpdHk9YWRFbGVtQ2hpbGROb2Rlcy5sZW5ndGgsYXJlSWZyYW1lc0RlZmluZWQ9ITE7aWYoY2hpbGROb2Rlc1F1YW50aXR5PjAmJihhcmVJZnJhbWVzRGVmaW5lZD0yPT09Y2hpbGROb2Rlc1F1YW50aXR5JiYiaWZyYW1lIj09PWFkRWxlbUNoaWxkTm9kZXNbMF0ubm9kZU5hbWUudG9Mb3dlckNhc2UoKSYmYWRFbGVtQ2hpbGROb2Rlc1swXS5pZC5pbmRleE9mKCJhc3dpZnRfIik+LTEmJiJpZnJhbWUiPT09YWRFbGVtQ2hpbGROb2Rlc1sxXS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpJiZhZEVsZW1DaGlsZE5vZGVzWzFdLmlkLmluZGV4T2YoImdvb2dsZV9hZHNfaWZyYW1lXyIpPi0xKSwhYXJlSWZyYW1lc0RlZmluZWQpe2FkRWxlbXNbaV0uc2V0QXR0cmlidXRlKCJkYXRhLWFkc2J5Z29vZ2xlLXN0YXR1cyIsImRvbmUiKTt2YXIgYXN3aWZ0SWZyYW1lPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImlmcmFtZSIpO2Fzd2lmdElmcmFtZS5pZD0iIi5jb25jYXQoImFzd2lmdF8iKS5jb25jYXQoaSksYXN3aWZ0SWZyYW1lLnN0eWxlPWNzcyxhZEVsZW1zW2ldLmFwcGVuZENoaWxkKGFzd2lmdElmcmFtZSk7dmFyIGlubmVyQXN3aWZ0SWZyYW1lPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImlmcmFtZSIpO2Fzd2lmdElmcmFtZS5jb250ZW50V2luZG93LmRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoaW5uZXJBc3dpZnRJZnJhbWUpO3ZhciBnb29nbGVhZHNJZnJhbWU9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiaWZyYW1lIik7Z29vZ2xlYWRzSWZyYW1lLmlkPSIiLmNvbmNhdCgiZ29vZ2xlX2Fkc19pZnJhbWVfIikuY29uY2F0KGkpLGdvb2dsZWFkc0lmcmFtZS5zdHlsZT1jc3MsYWRFbGVtc1tpXS5hcHBlbmRDaGlsZChnb29nbGVhZHNJZnJhbWUpO3ZhciBpbm5lckdvb2dsZWFkc0lmcmFtZT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJpZnJhbWUiKTtnb29nbGVhZHNJZnJhbWUuY29udGVudFdpbmRvdy5kb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKGlubmVyR29vZ2xlYWRzSWZyYW1lKSxleGVjdXRlZD0hMH19ZXhlY3V0ZWQmJmZ1bmN0aW9uKHNvdXJjZSxtZXNzYWdlKXtpZighMD09PXNvdXJjZS52ZXJib3NlKXt0cnl7dmFyIGxvZz1jb25zb2xlLmxvZy5iaW5kKGNvbnNvbGUpLHRyYWNlPWNvbnNvbGUudHJhY2UuYmluZChjb25zb2xlKSxwcmVmaXg9c291cmNlLnJ1bGVUZXh0fHwiIjtpZihzb3VyY2UuZG9tYWluTmFtZSl7dmFyIHJ1bGVTdGFydEluZGV4LEFHX1NDUklQVExFVF9NQVJLRVI9IiMlIy8vIixVQk9fU0NSSVBUTEVUX01BUktFUj0iIyMranMiO3NvdXJjZS5ydWxlVGV4dC5pbmRleE9mKEFHX1NDUklQVExFVF9NQVJLRVIpPi0xP3J1bGVTdGFydEluZGV4PXNvdXJjZS5ydWxlVGV4dC5pbmRleE9mKEFHX1NDUklQVExFVF9NQVJLRVIpOnNvdXJjZS5ydWxlVGV4dC5pbmRleE9mKFVCT19TQ1JJUFRMRVRfTUFSS0VSKT4tMSYmKHJ1bGVTdGFydEluZGV4PXNvdXJjZS5ydWxlVGV4dC5pbmRleE9mKFVCT19TQ1JJUFRMRVRfTUFSS0VSKSk7dmFyIHJ1bGVQYXJ0PXNvdXJjZS5ydWxlVGV4dC5zbGljZShydWxlU3RhcnRJbmRleCk7cHJlZml4PSIiLmNvbmNhdChzb3VyY2UuZG9tYWluTmFtZSkuY29uY2F0KHJ1bGVQYXJ0KX12YXIgTE9HX01BUktFUj0ibG9nOiAiO21lc3NhZ2UmJigtMT09PW1lc3NhZ2UuaW5kZXhPZihMT0dfTUFSS0VSKT9sb2coIiIuY29uY2F0KHByZWZpeCwiIG1lc3NhZ2U6XG4iKS5jb25jYXQobWVzc2FnZSkpOmxvZyhtZXNzYWdlLnNsaWNlKExPR19NQVJLRVIubGVuZ3RoKSkpLGxvZygiIi5jb25jYXQocHJlZml4LCIgdHJhY2Ugc3RhcnQiKSksdHJhY2UmJnRyYWNlKCksbG9nKCIiLmNvbmNhdChwcmVmaXgsIiB0cmFjZSBlbmQiKSl9Y2F0Y2goZSl7fSJmdW5jdGlvbiI9PXR5cGVvZiB3aW5kb3cuX19kZWJ1ZyYmd2luZG93Ll9fZGVidWcoc291cmNlKX19KHNvdXJjZSl9KS5hcHBseSh0aGlzLHVwZGF0ZWRBcmdzKX1jYXRjaChlKXtjb25zb2xlLmxvZyhlKX19KHtuYW1lOiJnb29nbGVzeW5kaWNhdGlvbi1hZHNieWdvb2dsZSIsYXJnczpbXX0sW10pOw=="
+ "content": "IWZ1bmN0aW9uKHNvdXJjZSxhcmdzKXtjb25zdCB1cGRhdGVkQXJncz1hcmdzP1tdLmNvbmNhdChzb3VyY2UpLmNvbmNhdChhcmdzKTpbc291cmNlXTt0cnl7KGZ1bmN0aW9uKHNvdXJjZSl7d2luZG93LmFkc2J5Z29vZ2xlPXtsb2FkZWQ6ITAscHVzaDpmdW5jdGlvbihhcmcpe2lmKHZvaWQgMD09PXRoaXMubGVuZ3RoJiYodGhpcy5sZW5ndGg9MCx0aGlzLmxlbmd0aCs9MSksbnVsbCE9PWFyZyYmYXJnIGluc3RhbmNlb2YgT2JqZWN0JiYiT2JqZWN0Ij09PWFyZy5jb25zdHJ1Y3Rvci5uYW1lKWZvcih2YXIgX2k9MCxfT2JqZWN0JGtleXM9T2JqZWN0LmtleXMoYXJnKTtfaTxfT2JqZWN0JGtleXMubGVuZ3RoO19pKyspe3ZhciBrZXk9X09iamVjdCRrZXlzW19pXTtpZigiZnVuY3Rpb24iPT10eXBlb2YgYXJnW2tleV0pdHJ5e2FyZ1trZXldLmNhbGwodGhpcyx7fSl9Y2F0Y2goX3VudXNlZCl7fX19fTtmb3IodmFyIGFkRWxlbXM9ZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgiLmFkc2J5Z29vZ2xlIiksY3NzPSJoZWlnaHQ6MXB4IWltcG9ydGFudDttYXgtaGVpZ2h0OjFweCFpbXBvcnRhbnQ7bWF4LXdpZHRoOjFweCFpbXBvcnRhbnQ7d2lkdGg6MXB4IWltcG9ydGFudDsiLGV4ZWN1dGVkPSExLGk9MDtpPGFkRWxlbXMubGVuZ3RoO2krPTEpe3ZhciBhZEVsZW1DaGlsZE5vZGVzPWFkRWxlbXNbaV0uY2hpbGROb2RlcyxjaGlsZE5vZGVzUXVhbnRpdHk9YWRFbGVtQ2hpbGROb2Rlcy5sZW5ndGgsYXJlSWZyYW1lc0RlZmluZWQ9ITE7aWYoY2hpbGROb2Rlc1F1YW50aXR5PjAmJihhcmVJZnJhbWVzRGVmaW5lZD0yPT09Y2hpbGROb2Rlc1F1YW50aXR5JiYiaWZyYW1lIj09PWFkRWxlbUNoaWxkTm9kZXNbMF0ubm9kZU5hbWUudG9Mb3dlckNhc2UoKSYmYWRFbGVtQ2hpbGROb2Rlc1swXS5pZC5pbmRleE9mKCJhc3dpZnRfIik+LTEmJiJpZnJhbWUiPT09YWRFbGVtQ2hpbGROb2Rlc1sxXS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpJiZhZEVsZW1DaGlsZE5vZGVzWzFdLmlkLmluZGV4T2YoImdvb2dsZV9hZHNfaWZyYW1lXyIpPi0xKSwhYXJlSWZyYW1lc0RlZmluZWQpe2FkRWxlbXNbaV0uc2V0QXR0cmlidXRlKCJkYXRhLWFkc2J5Z29vZ2xlLXN0YXR1cyIsImRvbmUiKTt2YXIgYXN3aWZ0SWZyYW1lPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImlmcmFtZSIpO2Fzd2lmdElmcmFtZS5pZD0iIi5jb25jYXQoImFzd2lmdF8iKS5jb25jYXQoaSksYXN3aWZ0SWZyYW1lLnN0eWxlPWNzcyxhZEVsZW1zW2ldLmFwcGVuZENoaWxkKGFzd2lmdElmcmFtZSk7dmFyIGlubmVyQXN3aWZ0SWZyYW1lPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImlmcmFtZSIpO2Fzd2lmdElmcmFtZS5jb250ZW50V2luZG93LmRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoaW5uZXJBc3dpZnRJZnJhbWUpO3ZhciBnb29nbGVhZHNJZnJhbWU9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiaWZyYW1lIik7Z29vZ2xlYWRzSWZyYW1lLmlkPSIiLmNvbmNhdCgiZ29vZ2xlX2Fkc19pZnJhbWVfIikuY29uY2F0KGkpLGdvb2dsZWFkc0lmcmFtZS5zdHlsZT1jc3MsYWRFbGVtc1tpXS5hcHBlbmRDaGlsZChnb29nbGVhZHNJZnJhbWUpO3ZhciBpbm5lckdvb2dsZWFkc0lmcmFtZT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJpZnJhbWUiKTtnb29nbGVhZHNJZnJhbWUuY29udGVudFdpbmRvdy5kb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKGlubmVyR29vZ2xlYWRzSWZyYW1lKSxleGVjdXRlZD0hMH19ZXhlY3V0ZWQmJmZ1bmN0aW9uKHNvdXJjZSl7aWYoITA9PT1zb3VyY2UudmVyYm9zZSl7dHJ5e3ZhciBsb2c9Y29uc29sZS5sb2cuYmluZChjb25zb2xlKSx0cmFjZT1jb25zb2xlLnRyYWNlLmJpbmQoY29uc29sZSkscHJlZml4PXNvdXJjZS5ydWxlVGV4dHx8IiI7aWYoc291cmNlLmRvbWFpbk5hbWUpe3ZhciBydWxlU3RhcnRJbmRleCxBR19TQ1JJUFRMRVRfTUFSS0VSPSIjJSMvLyIsVUJPX1NDUklQVExFVF9NQVJLRVI9IiMjK2pzIjtzb3VyY2UucnVsZVRleHQuaW5kZXhPZihBR19TQ1JJUFRMRVRfTUFSS0VSKT4tMT9ydWxlU3RhcnRJbmRleD1zb3VyY2UucnVsZVRleHQuaW5kZXhPZihBR19TQ1JJUFRMRVRfTUFSS0VSKTpzb3VyY2UucnVsZVRleHQuaW5kZXhPZihVQk9fU0NSSVBUTEVUX01BUktFUik+LTEmJihydWxlU3RhcnRJbmRleD1zb3VyY2UucnVsZVRleHQuaW5kZXhPZihVQk9fU0NSSVBUTEVUX01BUktFUikpO3ZhciBydWxlUGFydD1zb3VyY2UucnVsZVRleHQuc2xpY2UocnVsZVN0YXJ0SW5kZXgpO3ByZWZpeD0iIi5jb25jYXQoc291cmNlLmRvbWFpbk5hbWUpLmNvbmNhdChydWxlUGFydCl9bG9nKCIiLmNvbmNhdChwcmVmaXgsIiB0cmFjZSBzdGFydCIpKSx0cmFjZSYmdHJhY2UoKSxsb2coIiIuY29uY2F0KHByZWZpeCwiIHRyYWNlIGVuZCIpKX1jYXRjaChlKXt9ImZ1bmN0aW9uIj09dHlwZW9mIHdpbmRvdy5fX2RlYnVnJiZ3aW5kb3cuX19kZWJ1Zyhzb3VyY2UpfX0oc291cmNlKX0pLmFwcGx5KHRoaXMsdXBkYXRlZEFyZ3MpfWNhdGNoKGUpe2NvbnNvbGUubG9nKGUpfX0oe25hbWU6Imdvb2dsZXN5bmRpY2F0aW9uLWFkc2J5Z29vZ2xlIixhcmdzOltdfSxbXSk7"
},
{
"title": "googletagservices-gpt",
@@ -249,35 +252,35 @@
],
"isBlocking": false,
"contentType": "application/javascript;base64",
- "content": "IWZ1bmN0aW9uKHNvdXJjZSxhcmdzKXtmdW5jdGlvbiBub29wRnVuYygpe31mdW5jdGlvbiBub29wVGhpcygpe3JldHVybiB0aGlzfWZ1bmN0aW9uIG5vb3BOdWxsKCl7cmV0dXJuIG51bGx9ZnVuY3Rpb24gbm9vcEFycmF5KCl7cmV0dXJuW119ZnVuY3Rpb24gbm9vcFN0cigpe3JldHVybiIifWZ1bmN0aW9uIHRydWVGdW5jKCl7cmV0dXJuITB9Y29uc3QgdXBkYXRlZEFyZ3M9YXJncz9bXS5jb25jYXQoc291cmNlKS5jb25jYXQoYXJncyk6W3NvdXJjZV07dHJ5eyhmdW5jdGlvbihzb3VyY2Upe3ZhciBzbG90cz1uZXcgTWFwLHNsb3RzQnlJZD1uZXcgTWFwLGV2ZW50Q2FsbGJhY2tzPW5ldyBNYXAsYWRkRXZlbnRMaXN0ZW5lcj1mdW5jdGlvbihuYW1lLGxpc3RlbmVyKXtyZXR1cm4gZXZlbnRDYWxsYmFja3MuaGFzKG5hbWUpfHxldmVudENhbGxiYWNrcy5zZXQobmFtZSxuZXcgU2V0KSxldmVudENhbGxiYWNrcy5nZXQobmFtZSkuYWRkKGxpc3RlbmVyKSx0aGlzfSxyZW1vdmVFdmVudExpc3RlbmVyPWZ1bmN0aW9uKG5hbWUsbGlzdGVuZXIpe3JldHVybiEhZXZlbnRDYWxsYmFja3MuaGFzKG5hbWUpJiZldmVudENhbGxiYWNrcy5nZXQobmFtZSkuZGVsZXRlKGxpc3RlbmVyKX0sZmlyZVNsb3RFdmVudD1mdW5jdGlvbihuYW1lLHNsb3Qpe3JldHVybiBuZXcgUHJvbWlzZSgoZnVuY3Rpb24ocmVzb2x2ZSl7cmVxdWVzdEFuaW1hdGlvbkZyYW1lKChmdW5jdGlvbigpe2Zvcih2YXIgc2l6ZT1bMCwwXSxjYWxsYmFja3NTZXQ9ZXZlbnRDYWxsYmFja3MuZ2V0KG5hbWUpfHxbXSxjYWxsYmFja0FycmF5PUFycmF5LmZyb20oY2FsbGJhY2tzU2V0KSxpPTA7aTxjYWxsYmFja0FycmF5Lmxlbmd0aDtpKz0xKWNhbGxiYWNrQXJyYXlbaV0oe2lzRW1wdHk6ITAsc2l6ZTpzaXplLHNsb3Q6c2xvdH0pO3Jlc29sdmUoKX0pKX0pKX0sY29tcGFuaW9uQWRzU2VydmljZT17YWRkRXZlbnRMaXN0ZW5lcjphZGRFdmVudExpc3RlbmVyLHJlbW92ZUV2ZW50TGlzdGVuZXI6cmVtb3ZlRXZlbnRMaXN0ZW5lcixlbmFibGVTeW5jTG9hZGluZzpub29wRnVuYyxzZXRSZWZyZXNoVW5maWxsZWRTbG90czpub29wRnVuYyxnZXRTbG90czpub29wQXJyYXl9LGNvbnRlbnRTZXJ2aWNlPXthZGRFdmVudExpc3RlbmVyOmFkZEV2ZW50TGlzdGVuZXIscmVtb3ZlRXZlbnRMaXN0ZW5lcjpyZW1vdmVFdmVudExpc3RlbmVyLHNldENvbnRlbnQ6bm9vcEZ1bmN9O2Z1bmN0aW9uIFBhc3NiYWNrU2xvdCgpe31mdW5jdGlvbiBTaXplTWFwcGluZ0J1aWxkZXIoKXt9ZnVuY3Rpb24gU2xvdChhZFVuaXRQYXRoLGNyZWF0aXZlcyxvcHREaXYpe3ZhciBfZG9jdW1lbnQkZ2V0RWxlbWVudEI7aWYodGhpcy5hZFVuaXRQYXRoPWFkVW5pdFBhdGgsdGhpcy5jcmVhdGl2ZXM9Y3JlYXRpdmVzLHRoaXMub3B0RGl2PW9wdERpdixzbG90c0J5SWQuaGFzKG9wdERpdikpcmV0dXJuIG51bGw9PT0oX2RvY3VtZW50JGdldEVsZW1lbnRCPWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKG9wdERpdikpfHx2b2lkIDA9PT1fZG9jdW1lbnQkZ2V0RWxlbWVudEJ8fF9kb2N1bWVudCRnZXRFbGVtZW50Qi5yZW1vdmUoKSxzbG90c0J5SWQuZ2V0KG9wdERpdik7c2xvdHNCeUlkLnNldChvcHREaXYsdGhpcyl9UGFzc2JhY2tTbG90LnByb3RvdHlwZS5kaXNwbGF5PW5vb3BGdW5jLFBhc3NiYWNrU2xvdC5wcm90b3R5cGUuZ2V0PW5vb3BOdWxsLFBhc3NiYWNrU2xvdC5wcm90b3R5cGUuc2V0PW5vb3BUaGlzLFBhc3NiYWNrU2xvdC5wcm90b3R5cGUuc2V0Q2xpY2tVcmw9bm9vcFRoaXMsUGFzc2JhY2tTbG90LnByb3RvdHlwZS5zZXRUYWdGb3JDaGlsZERpcmVjdGVkVHJlYXRtZW50PW5vb3BUaGlzLFBhc3NiYWNrU2xvdC5wcm90b3R5cGUuc2V0VGFyZ2V0aW5nPW5vb3BUaGlzLFBhc3NiYWNrU2xvdC5wcm90b3R5cGUudXBkYXRlVGFyZ2V0aW5nRnJvbU1hcD1ub29wVGhpcyxTaXplTWFwcGluZ0J1aWxkZXIucHJvdG90eXBlLmFkZFNpemU9bm9vcFRoaXMsU2l6ZU1hcHBpbmdCdWlsZGVyLnByb3RvdHlwZS5idWlsZD1ub29wTnVsbCxTbG90LnByb3RvdHlwZS5hZGRTZXJ2aWNlPW5vb3BUaGlzLFNsb3QucHJvdG90eXBlLmNsZWFyQ2F0ZWdvcnlFeGNsdXNpb25zPW5vb3BUaGlzLFNsb3QucHJvdG90eXBlLmNsZWFyVGFyZ2V0aW5nPW5vb3BUaGlzLFNsb3QucHJvdG90eXBlLmRlZmluZVNpemVNYXBwaW5nPW5vb3BUaGlzLFNsb3QucHJvdG90eXBlLmdldD1ub29wTnVsbCxTbG90LnByb3RvdHlwZS5nZXRBZFVuaXRQYXRoPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYWRVbml0UGF0aH0sU2xvdC5wcm90b3R5cGUuZ2V0QXR0cmlidXRlS2V5cz1ub29wQXJyYXksU2xvdC5wcm90b3R5cGUuZ2V0Q2F0ZWdvcnlFeGNsdXNpb25zPW5vb3BBcnJheSxTbG90LnByb3RvdHlwZS5nZXREb21JZD1mdW5jdGlvbigpe3JldHVybiB0aGlzLm9wdERpdn0sU2xvdC5wcm90b3R5cGUuZ2V0U2xvdEVsZW1lbnRJZD1mdW5jdGlvbigpe3JldHVybiB0aGlzLm9wdERpdn0sU2xvdC5wcm90b3R5cGUuZ2V0U2xvdElkPW5vb3BUaGlzLFNsb3QucHJvdG90eXBlLmdldFNpemVzPW5vb3BBcnJheSxTbG90LnByb3RvdHlwZS5nZXRUYXJnZXRpbmc9bm9vcEFycmF5LFNsb3QucHJvdG90eXBlLmdldFRhcmdldGluZ0tleXM9bm9vcEFycmF5LFNsb3QucHJvdG90eXBlLnNldD1ub29wVGhpcyxTbG90LnByb3RvdHlwZS5zZXRDYXRlZ29yeUV4Y2x1c2lvbj1ub29wVGhpcyxTbG90LnByb3RvdHlwZS5zZXRDbGlja1VybD1ub29wVGhpcyxTbG90LnByb3RvdHlwZS5zZXRDb2xsYXBzZUVtcHR5RGl2PW5vb3BUaGlzLFNsb3QucHJvdG90eXBlLnNldFRhcmdldGluZz1ub29wVGhpczt2YXIgcHViQWRzU2VydmljZT17YWRkRXZlbnRMaXN0ZW5lcjphZGRFdmVudExpc3RlbmVyLHJlbW92ZUV2ZW50TGlzdGVuZXI6cmVtb3ZlRXZlbnRMaXN0ZW5lcixjbGVhcjpub29wRnVuYyxjbGVhckNhdGVnb3J5RXhjbHVzaW9uczpub29wVGhpcyxjbGVhclRhZ0ZvckNoaWxkRGlyZWN0ZWRUcmVhdG1lbnQ6bm9vcFRoaXMsY2xlYXJUYXJnZXRpbmc6bm9vcFRoaXMsY29sbGFwc2VFbXB0eURpdnM6bm9vcEZ1bmMsZGVmaW5lT3V0T2ZQYWdlUGFzc2JhY2s6ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IFBhc3NiYWNrU2xvdH0sZGVmaW5lUGFzc2JhY2s6ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IFBhc3NiYWNrU2xvdH0sZGlzYWJsZUluaXRpYWxMb2FkOm5vb3BGdW5jLGRpc3BsYXk6bm9vcEZ1bmMsZW5hYmxlQXN5bmNSZW5kZXJpbmc6bm9vcEZ1bmMsZW5hYmxlTGF6eUxvYWQ6bm9vcEZ1bmMsZW5hYmxlU2luZ2xlUmVxdWVzdDpub29wRnVuYyxlbmFibGVTeW5jUmVuZGVyaW5nOm5vb3BGdW5jLGVuYWJsZVZpZGVvQWRzOm5vb3BGdW5jLGdldDpub29wTnVsbCxnZXRBdHRyaWJ1dGVLZXlzOm5vb3BBcnJheSxnZXRUYXJnZXRpbmc6bm9vcEFycmF5LGdldFRhcmdldGluZ0tleXM6bm9vcEFycmF5LGdldFNsb3RzOm5vb3BBcnJheSxpc0luaXRpYWxMb2FkRGlzYWJsZWQ6dHJ1ZUZ1bmMscmVmcmVzaDpub29wRnVuYyxzZXQ6bm9vcFRoaXMsc2V0Q2F0ZWdvcnlFeGNsdXNpb246bm9vcFRoaXMsc2V0Q2VudGVyaW5nOm5vb3BGdW5jLHNldENvb2tpZU9wdGlvbnM6bm9vcFRoaXMsc2V0Rm9yY2VTYWZlRnJhbWU6bm9vcFRoaXMsc2V0TG9jYXRpb246bm9vcFRoaXMsc2V0UHVibGlzaGVyUHJvdmlkZWRJZDpub29wVGhpcyxzZXRSZXF1ZXN0Tm9uUGVyc29uYWxpemVkQWRzOm5vb3BUaGlzLHNldFNhZmVGcmFtZUNvbmZpZzpub29wVGhpcyxzZXRUYWdGb3JDaGlsZERpcmVjdGVkVHJlYXRtZW50Om5vb3BUaGlzLHNldFRhcmdldGluZzpub29wVGhpcyxzZXRWaWRlb0NvbnRlbnQ6bm9vcFRoaXMsdXBkYXRlQ29ycmVsYXRvcjpub29wRnVuY30sZ2V0TmV3U2xvdD1mdW5jdGlvbihhZFVuaXRQYXRoLGNyZWF0aXZlcyxvcHREaXYpe3JldHVybiBuZXcgU2xvdChhZFVuaXRQYXRoLGNyZWF0aXZlcyxvcHREaXYpfSxfd2luZG93JGdvb2dsZXRhZz13aW5kb3cuZ29vZ2xldGFnLGdvb2dsZXRhZz12b2lkIDA9PT1fd2luZG93JGdvb2dsZXRhZz97fTpfd2luZG93JGdvb2dsZXRhZyxfZ29vZ2xldGFnJGNtZD1nb29nbGV0YWcuY21kLGNtZD12b2lkIDA9PT1fZ29vZ2xldGFnJGNtZD9bXTpfZ29vZ2xldGFnJGNtZDtmb3IoZ29vZ2xldGFnLmFwaVJlYWR5PSEwLGdvb2dsZXRhZy5jbWQ9W10sZ29vZ2xldGFnLmNtZC5wdXNoPWZ1bmN0aW9uKGEpe3RyeXthKCl9Y2F0Y2goZXgpe31yZXR1cm4gMX0sZ29vZ2xldGFnLmNvbXBhbmlvbkFkcz1mdW5jdGlvbigpe3JldHVybiBjb21wYW5pb25BZHNTZXJ2aWNlfSxnb29nbGV0YWcuY29udGVudD1mdW5jdGlvbigpe3JldHVybiBjb250ZW50U2VydmljZX0sZ29vZ2xldGFnLmRlZmluZU91dE9mUGFnZVNsb3Q9Z2V0TmV3U2xvdCxnb29nbGV0YWcuZGVmaW5lU2xvdD1nZXROZXdTbG90LGdvb2dsZXRhZy5kZXN0cm95U2xvdHM9ZnVuY3Rpb24oKXtzbG90cy5jbGVhcigpLHNsb3RzQnlJZC5jbGVhcigpfSxnb29nbGV0YWcuZGlzYWJsZVB1Ymxpc2hlckNvbnNvbGU9bm9vcEZ1bmMsZ29vZ2xldGFnLmRpc3BsYXk9ZnVuY3Rpb24oYXJnKXt2YXIgaWQ7aWQ9bnVsbCE9YXJnJiZhcmcuZ2V0U2xvdEVsZW1lbnRJZD9hcmcuZ2V0U2xvdEVsZW1lbnRJZCgpOm51bGwhPWFyZyYmYXJnLm5vZGVUeXBlP2FyZy5pZDpTdHJpbmcoYXJnKSxmdW5jdGlvbihzbG90KXtpZihzbG90KXt2YXIgaWQ9c2xvdC5nZXRTbG90RWxlbWVudElkKCk7aWYoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoaWQpKXt2YXIgcGFyZW50PWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGlkKTtwYXJlbnQmJnBhcmVudC5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKSksZmlyZVNsb3RFdmVudCgic2xvdFJlbmRlckVuZGVkIixzbG90KSxmaXJlU2xvdEV2ZW50KCJzbG90UmVxdWVzdGVkIixzbG90KSxmaXJlU2xvdEV2ZW50KCJzbG90UmVzcG9uc2VSZWNlaXZlZCIsc2xvdCksZmlyZVNsb3RFdmVudCgic2xvdE9ubG9hZCIsc2xvdCksZmlyZVNsb3RFdmVudCgiaW1wcmVzc2lvblZpZXdhYmxlIixzbG90KX19fShzbG90c0J5SWQuZ2V0KGlkKSl9LGdvb2dsZXRhZy5lbmFibGVTZXJ2aWNlcz1ub29wRnVuYyxnb29nbGV0YWcuZ2V0VmVyc2lvbj1ub29wU3RyLGdvb2dsZXRhZy5wdWJhZHM9ZnVuY3Rpb24oKXtyZXR1cm4gcHViQWRzU2VydmljZX0sZ29vZ2xldGFnLnB1YmFkc1JlYWR5PSEwLGdvb2dsZXRhZy5zZXRBZElmcmFtZVRpdGxlPW5vb3BGdW5jLGdvb2dsZXRhZy5zaXplTWFwcGluZz1mdW5jdGlvbigpe3JldHVybiBuZXcgU2l6ZU1hcHBpbmdCdWlsZGVyfSx3aW5kb3cuZ29vZ2xldGFnPWdvb2dsZXRhZzswIT09Y21kLmxlbmd0aDspZ29vZ2xldGFnLmNtZC5wdXNoKGNtZC5zaGlmdCgpKTshZnVuY3Rpb24oc291cmNlLG1lc3NhZ2Upe2lmKCEwPT09c291cmNlLnZlcmJvc2Upe3RyeXt2YXIgbG9nPWNvbnNvbGUubG9nLmJpbmQoY29uc29sZSksdHJhY2U9Y29uc29sZS50cmFjZS5iaW5kKGNvbnNvbGUpLHByZWZpeD1zb3VyY2UucnVsZVRleHR8fCIiO2lmKHNvdXJjZS5kb21haW5OYW1lKXt2YXIgcnVsZVN0YXJ0SW5kZXgsQUdfU0NSSVBUTEVUX01BUktFUj0iIyUjLy8iLFVCT19TQ1JJUFRMRVRfTUFSS0VSPSIjIytqcyI7c291cmNlLnJ1bGVUZXh0LmluZGV4T2YoQUdfU0NSSVBUTEVUX01BUktFUik+LTE/cnVsZVN0YXJ0SW5kZXg9c291cmNlLnJ1bGVUZXh0LmluZGV4T2YoQUdfU0NSSVBUTEVUX01BUktFUik6c291cmNlLnJ1bGVUZXh0LmluZGV4T2YoVUJPX1NDUklQVExFVF9NQVJLRVIpPi0xJiYocnVsZVN0YXJ0SW5kZXg9c291cmNlLnJ1bGVUZXh0LmluZGV4T2YoVUJPX1NDUklQVExFVF9NQVJLRVIpKTt2YXIgcnVsZVBhcnQ9c291cmNlLnJ1bGVUZXh0LnNsaWNlKHJ1bGVTdGFydEluZGV4KTtwcmVmaXg9IiIuY29uY2F0KHNvdXJjZS5kb21haW5OYW1lKS5jb25jYXQocnVsZVBhcnQpfXZhciBMT0dfTUFSS0VSPSJsb2c6ICI7bWVzc2FnZSYmKC0xPT09bWVzc2FnZS5pbmRleE9mKExPR19NQVJLRVIpP2xvZygiIi5jb25jYXQocHJlZml4LCIgbWVzc2FnZTpcbiIpLmNvbmNhdChtZXNzYWdlKSk6bG9nKG1lc3NhZ2Uuc2xpY2UoTE9HX01BUktFUi5sZW5ndGgpKSksbG9nKCIiLmNvbmNhdChwcmVmaXgsIiB0cmFjZSBzdGFydCIpKSx0cmFjZSYmdHJhY2UoKSxsb2coIiIuY29uY2F0KHByZWZpeCwiIHRyYWNlIGVuZCIpKX1jYXRjaChlKXt9ImZ1bmN0aW9uIj09dHlwZW9mIHdpbmRvdy5fX2RlYnVnJiZ3aW5kb3cuX19kZWJ1Zyhzb3VyY2UpfX0oc291cmNlKX0pLmFwcGx5KHRoaXMsdXBkYXRlZEFyZ3MpfWNhdGNoKGUpe2NvbnNvbGUubG9nKGUpfX0oe25hbWU6Imdvb2dsZXRhZ3NlcnZpY2VzLWdwdCIsYXJnczpbXX0sW10pOw=="
+ "content": "IWZ1bmN0aW9uKHNvdXJjZSxhcmdzKXtmdW5jdGlvbiBub29wRnVuYygpe31mdW5jdGlvbiBub29wVGhpcygpe3JldHVybiB0aGlzfWZ1bmN0aW9uIG5vb3BOdWxsKCl7cmV0dXJuIG51bGx9ZnVuY3Rpb24gbm9vcEFycmF5KCl7cmV0dXJuW119ZnVuY3Rpb24gbm9vcFN0cigpe3JldHVybiIifWZ1bmN0aW9uIHRydWVGdW5jKCl7cmV0dXJuITB9Y29uc3QgdXBkYXRlZEFyZ3M9YXJncz9bXS5jb25jYXQoc291cmNlKS5jb25jYXQoYXJncyk6W3NvdXJjZV07dHJ5eyhmdW5jdGlvbihzb3VyY2Upe3ZhciBzbG90cz1uZXcgTWFwLHNsb3RzQnlJZD1uZXcgTWFwLGV2ZW50Q2FsbGJhY2tzPW5ldyBNYXAsYWRkRXZlbnRMaXN0ZW5lcj1mdW5jdGlvbihuYW1lLGxpc3RlbmVyKXtyZXR1cm4gZXZlbnRDYWxsYmFja3MuaGFzKG5hbWUpfHxldmVudENhbGxiYWNrcy5zZXQobmFtZSxuZXcgU2V0KSxldmVudENhbGxiYWNrcy5nZXQobmFtZSkuYWRkKGxpc3RlbmVyKSx0aGlzfSxyZW1vdmVFdmVudExpc3RlbmVyPWZ1bmN0aW9uKG5hbWUsbGlzdGVuZXIpe3JldHVybiEhZXZlbnRDYWxsYmFja3MuaGFzKG5hbWUpJiZldmVudENhbGxiYWNrcy5nZXQobmFtZSkuZGVsZXRlKGxpc3RlbmVyKX0sZmlyZVNsb3RFdmVudD1mdW5jdGlvbihuYW1lLHNsb3Qpe3JldHVybiBuZXcgUHJvbWlzZSgoZnVuY3Rpb24ocmVzb2x2ZSl7cmVxdWVzdEFuaW1hdGlvbkZyYW1lKChmdW5jdGlvbigpe2Zvcih2YXIgc2l6ZT1bMCwwXSxjYWxsYmFja3NTZXQ9ZXZlbnRDYWxsYmFja3MuZ2V0KG5hbWUpfHxbXSxjYWxsYmFja0FycmF5PUFycmF5LmZyb20oY2FsbGJhY2tzU2V0KSxpPTA7aTxjYWxsYmFja0FycmF5Lmxlbmd0aDtpKz0xKWNhbGxiYWNrQXJyYXlbaV0oe2lzRW1wdHk6ITAsc2l6ZTpzaXplLHNsb3Q6c2xvdH0pO3Jlc29sdmUoKX0pKX0pKX0sY29tcGFuaW9uQWRzU2VydmljZT17YWRkRXZlbnRMaXN0ZW5lcjphZGRFdmVudExpc3RlbmVyLHJlbW92ZUV2ZW50TGlzdGVuZXI6cmVtb3ZlRXZlbnRMaXN0ZW5lcixlbmFibGVTeW5jTG9hZGluZzpub29wRnVuYyxzZXRSZWZyZXNoVW5maWxsZWRTbG90czpub29wRnVuYyxnZXRTbG90czpub29wQXJyYXl9LGNvbnRlbnRTZXJ2aWNlPXthZGRFdmVudExpc3RlbmVyOmFkZEV2ZW50TGlzdGVuZXIscmVtb3ZlRXZlbnRMaXN0ZW5lcjpyZW1vdmVFdmVudExpc3RlbmVyLHNldENvbnRlbnQ6bm9vcEZ1bmN9O2Z1bmN0aW9uIFBhc3NiYWNrU2xvdCgpe31mdW5jdGlvbiBTaXplTWFwcGluZ0J1aWxkZXIoKXt9ZnVuY3Rpb24gU2xvdChhZFVuaXRQYXRoLGNyZWF0aXZlcyxvcHREaXYpe3ZhciBfZG9jdW1lbnQkZ2V0RWxlbWVudEI7aWYodGhpcy5hZFVuaXRQYXRoPWFkVW5pdFBhdGgsdGhpcy5jcmVhdGl2ZXM9Y3JlYXRpdmVzLHRoaXMub3B0RGl2PW9wdERpdixzbG90c0J5SWQuaGFzKG9wdERpdikpcmV0dXJuIG51bGw9PT0oX2RvY3VtZW50JGdldEVsZW1lbnRCPWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKG9wdERpdikpfHx2b2lkIDA9PT1fZG9jdW1lbnQkZ2V0RWxlbWVudEJ8fF9kb2N1bWVudCRnZXRFbGVtZW50Qi5yZW1vdmUoKSxzbG90c0J5SWQuZ2V0KG9wdERpdik7c2xvdHNCeUlkLnNldChvcHREaXYsdGhpcyl9UGFzc2JhY2tTbG90LnByb3RvdHlwZS5kaXNwbGF5PW5vb3BGdW5jLFBhc3NiYWNrU2xvdC5wcm90b3R5cGUuZ2V0PW5vb3BOdWxsLFBhc3NiYWNrU2xvdC5wcm90b3R5cGUuc2V0PW5vb3BUaGlzLFBhc3NiYWNrU2xvdC5wcm90b3R5cGUuc2V0Q2xpY2tVcmw9bm9vcFRoaXMsUGFzc2JhY2tTbG90LnByb3RvdHlwZS5zZXRUYWdGb3JDaGlsZERpcmVjdGVkVHJlYXRtZW50PW5vb3BUaGlzLFBhc3NiYWNrU2xvdC5wcm90b3R5cGUuc2V0VGFyZ2V0aW5nPW5vb3BUaGlzLFBhc3NiYWNrU2xvdC5wcm90b3R5cGUudXBkYXRlVGFyZ2V0aW5nRnJvbU1hcD1ub29wVGhpcyxTaXplTWFwcGluZ0J1aWxkZXIucHJvdG90eXBlLmFkZFNpemU9bm9vcFRoaXMsU2l6ZU1hcHBpbmdCdWlsZGVyLnByb3RvdHlwZS5idWlsZD1ub29wTnVsbCxTbG90LnByb3RvdHlwZS5hZGRTZXJ2aWNlPW5vb3BUaGlzLFNsb3QucHJvdG90eXBlLmNsZWFyQ2F0ZWdvcnlFeGNsdXNpb25zPW5vb3BUaGlzLFNsb3QucHJvdG90eXBlLmNsZWFyVGFyZ2V0aW5nPW5vb3BUaGlzLFNsb3QucHJvdG90eXBlLmRlZmluZVNpemVNYXBwaW5nPW5vb3BUaGlzLFNsb3QucHJvdG90eXBlLmdldD1ub29wTnVsbCxTbG90LnByb3RvdHlwZS5nZXRBZFVuaXRQYXRoPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYWRVbml0UGF0aH0sU2xvdC5wcm90b3R5cGUuZ2V0QXR0cmlidXRlS2V5cz1ub29wQXJyYXksU2xvdC5wcm90b3R5cGUuZ2V0Q2F0ZWdvcnlFeGNsdXNpb25zPW5vb3BBcnJheSxTbG90LnByb3RvdHlwZS5nZXREb21JZD1mdW5jdGlvbigpe3JldHVybiB0aGlzLm9wdERpdn0sU2xvdC5wcm90b3R5cGUuZ2V0U2xvdEVsZW1lbnRJZD1mdW5jdGlvbigpe3JldHVybiB0aGlzLm9wdERpdn0sU2xvdC5wcm90b3R5cGUuZ2V0U2xvdElkPW5vb3BUaGlzLFNsb3QucHJvdG90eXBlLmdldFNpemVzPW5vb3BBcnJheSxTbG90LnByb3RvdHlwZS5nZXRUYXJnZXRpbmc9bm9vcEFycmF5LFNsb3QucHJvdG90eXBlLmdldFRhcmdldGluZ0tleXM9bm9vcEFycmF5LFNsb3QucHJvdG90eXBlLnNldD1ub29wVGhpcyxTbG90LnByb3RvdHlwZS5zZXRDYXRlZ29yeUV4Y2x1c2lvbj1ub29wVGhpcyxTbG90LnByb3RvdHlwZS5zZXRDbGlja1VybD1ub29wVGhpcyxTbG90LnByb3RvdHlwZS5zZXRDb2xsYXBzZUVtcHR5RGl2PW5vb3BUaGlzLFNsb3QucHJvdG90eXBlLnNldFRhcmdldGluZz1ub29wVGhpczt2YXIgcHViQWRzU2VydmljZT17YWRkRXZlbnRMaXN0ZW5lcjphZGRFdmVudExpc3RlbmVyLHJlbW92ZUV2ZW50TGlzdGVuZXI6cmVtb3ZlRXZlbnRMaXN0ZW5lcixjbGVhcjpub29wRnVuYyxjbGVhckNhdGVnb3J5RXhjbHVzaW9uczpub29wVGhpcyxjbGVhclRhZ0ZvckNoaWxkRGlyZWN0ZWRUcmVhdG1lbnQ6bm9vcFRoaXMsY2xlYXJUYXJnZXRpbmc6bm9vcFRoaXMsY29sbGFwc2VFbXB0eURpdnM6bm9vcEZ1bmMsZGVmaW5lT3V0T2ZQYWdlUGFzc2JhY2s6ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IFBhc3NiYWNrU2xvdH0sZGVmaW5lUGFzc2JhY2s6ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IFBhc3NiYWNrU2xvdH0sZGlzYWJsZUluaXRpYWxMb2FkOm5vb3BGdW5jLGRpc3BsYXk6bm9vcEZ1bmMsZW5hYmxlQXN5bmNSZW5kZXJpbmc6bm9vcEZ1bmMsZW5hYmxlTGF6eUxvYWQ6bm9vcEZ1bmMsZW5hYmxlU2luZ2xlUmVxdWVzdDpub29wRnVuYyxlbmFibGVTeW5jUmVuZGVyaW5nOm5vb3BGdW5jLGVuYWJsZVZpZGVvQWRzOm5vb3BGdW5jLGdldDpub29wTnVsbCxnZXRBdHRyaWJ1dGVLZXlzOm5vb3BBcnJheSxnZXRUYXJnZXRpbmc6bm9vcEFycmF5LGdldFRhcmdldGluZ0tleXM6bm9vcEFycmF5LGdldFNsb3RzOm5vb3BBcnJheSxpc0luaXRpYWxMb2FkRGlzYWJsZWQ6dHJ1ZUZ1bmMscmVmcmVzaDpub29wRnVuYyxzZXQ6bm9vcFRoaXMsc2V0Q2F0ZWdvcnlFeGNsdXNpb246bm9vcFRoaXMsc2V0Q2VudGVyaW5nOm5vb3BGdW5jLHNldENvb2tpZU9wdGlvbnM6bm9vcFRoaXMsc2V0Rm9yY2VTYWZlRnJhbWU6bm9vcFRoaXMsc2V0TG9jYXRpb246bm9vcFRoaXMsc2V0UHVibGlzaGVyUHJvdmlkZWRJZDpub29wVGhpcyxzZXRSZXF1ZXN0Tm9uUGVyc29uYWxpemVkQWRzOm5vb3BUaGlzLHNldFNhZmVGcmFtZUNvbmZpZzpub29wVGhpcyxzZXRUYWdGb3JDaGlsZERpcmVjdGVkVHJlYXRtZW50Om5vb3BUaGlzLHNldFRhcmdldGluZzpub29wVGhpcyxzZXRWaWRlb0NvbnRlbnQ6bm9vcFRoaXMsdXBkYXRlQ29ycmVsYXRvcjpub29wRnVuY30sZ2V0TmV3U2xvdD1mdW5jdGlvbihhZFVuaXRQYXRoLGNyZWF0aXZlcyxvcHREaXYpe3JldHVybiBuZXcgU2xvdChhZFVuaXRQYXRoLGNyZWF0aXZlcyxvcHREaXYpfSxfd2luZG93JGdvb2dsZXRhZz13aW5kb3cuZ29vZ2xldGFnLGdvb2dsZXRhZz12b2lkIDA9PT1fd2luZG93JGdvb2dsZXRhZz97fTpfd2luZG93JGdvb2dsZXRhZyxfZ29vZ2xldGFnJGNtZD1nb29nbGV0YWcuY21kLGNtZD12b2lkIDA9PT1fZ29vZ2xldGFnJGNtZD9bXTpfZ29vZ2xldGFnJGNtZDtmb3IoZ29vZ2xldGFnLmFwaVJlYWR5PSEwLGdvb2dsZXRhZy5jbWQ9W10sZ29vZ2xldGFnLmNtZC5wdXNoPWZ1bmN0aW9uKGEpe3RyeXthKCl9Y2F0Y2goZXgpe31yZXR1cm4gMX0sZ29vZ2xldGFnLmNvbXBhbmlvbkFkcz1mdW5jdGlvbigpe3JldHVybiBjb21wYW5pb25BZHNTZXJ2aWNlfSxnb29nbGV0YWcuY29udGVudD1mdW5jdGlvbigpe3JldHVybiBjb250ZW50U2VydmljZX0sZ29vZ2xldGFnLmRlZmluZU91dE9mUGFnZVNsb3Q9Z2V0TmV3U2xvdCxnb29nbGV0YWcuZGVmaW5lU2xvdD1nZXROZXdTbG90LGdvb2dsZXRhZy5kZXN0cm95U2xvdHM9ZnVuY3Rpb24oKXtzbG90cy5jbGVhcigpLHNsb3RzQnlJZC5jbGVhcigpfSxnb29nbGV0YWcuZGlzYWJsZVB1Ymxpc2hlckNvbnNvbGU9bm9vcEZ1bmMsZ29vZ2xldGFnLmRpc3BsYXk9ZnVuY3Rpb24oYXJnKXt2YXIgaWQ7aWQ9bnVsbCE9YXJnJiZhcmcuZ2V0U2xvdEVsZW1lbnRJZD9hcmcuZ2V0U2xvdEVsZW1lbnRJZCgpOm51bGwhPWFyZyYmYXJnLm5vZGVUeXBlP2FyZy5pZDpTdHJpbmcoYXJnKSxmdW5jdGlvbihzbG90KXtpZihzbG90KXt2YXIgaWQ9c2xvdC5nZXRTbG90RWxlbWVudElkKCk7aWYoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoaWQpKXt2YXIgcGFyZW50PWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGlkKTtwYXJlbnQmJnBhcmVudC5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKSksZmlyZVNsb3RFdmVudCgic2xvdFJlbmRlckVuZGVkIixzbG90KSxmaXJlU2xvdEV2ZW50KCJzbG90UmVxdWVzdGVkIixzbG90KSxmaXJlU2xvdEV2ZW50KCJzbG90UmVzcG9uc2VSZWNlaXZlZCIsc2xvdCksZmlyZVNsb3RFdmVudCgic2xvdE9ubG9hZCIsc2xvdCksZmlyZVNsb3RFdmVudCgiaW1wcmVzc2lvblZpZXdhYmxlIixzbG90KX19fShzbG90c0J5SWQuZ2V0KGlkKSl9LGdvb2dsZXRhZy5lbmFibGVTZXJ2aWNlcz1ub29wRnVuYyxnb29nbGV0YWcuZ2V0VmVyc2lvbj1ub29wU3RyLGdvb2dsZXRhZy5wdWJhZHM9ZnVuY3Rpb24oKXtyZXR1cm4gcHViQWRzU2VydmljZX0sZ29vZ2xldGFnLnB1YmFkc1JlYWR5PSEwLGdvb2dsZXRhZy5zZXRBZElmcmFtZVRpdGxlPW5vb3BGdW5jLGdvb2dsZXRhZy5zaXplTWFwcGluZz1mdW5jdGlvbigpe3JldHVybiBuZXcgU2l6ZU1hcHBpbmdCdWlsZGVyfSx3aW5kb3cuZ29vZ2xldGFnPWdvb2dsZXRhZzswIT09Y21kLmxlbmd0aDspZ29vZ2xldGFnLmNtZC5wdXNoKGNtZC5zaGlmdCgpKTshZnVuY3Rpb24oc291cmNlKXtpZighMD09PXNvdXJjZS52ZXJib3NlKXt0cnl7dmFyIGxvZz1jb25zb2xlLmxvZy5iaW5kKGNvbnNvbGUpLHRyYWNlPWNvbnNvbGUudHJhY2UuYmluZChjb25zb2xlKSxwcmVmaXg9c291cmNlLnJ1bGVUZXh0fHwiIjtpZihzb3VyY2UuZG9tYWluTmFtZSl7dmFyIHJ1bGVTdGFydEluZGV4LEFHX1NDUklQVExFVF9NQVJLRVI9IiMlIy8vIixVQk9fU0NSSVBUTEVUX01BUktFUj0iIyMranMiO3NvdXJjZS5ydWxlVGV4dC5pbmRleE9mKEFHX1NDUklQVExFVF9NQVJLRVIpPi0xP3J1bGVTdGFydEluZGV4PXNvdXJjZS5ydWxlVGV4dC5pbmRleE9mKEFHX1NDUklQVExFVF9NQVJLRVIpOnNvdXJjZS5ydWxlVGV4dC5pbmRleE9mKFVCT19TQ1JJUFRMRVRfTUFSS0VSKT4tMSYmKHJ1bGVTdGFydEluZGV4PXNvdXJjZS5ydWxlVGV4dC5pbmRleE9mKFVCT19TQ1JJUFRMRVRfTUFSS0VSKSk7dmFyIHJ1bGVQYXJ0PXNvdXJjZS5ydWxlVGV4dC5zbGljZShydWxlU3RhcnRJbmRleCk7cHJlZml4PSIiLmNvbmNhdChzb3VyY2UuZG9tYWluTmFtZSkuY29uY2F0KHJ1bGVQYXJ0KX1sb2coIiIuY29uY2F0KHByZWZpeCwiIHRyYWNlIHN0YXJ0IikpLHRyYWNlJiZ0cmFjZSgpLGxvZygiIi5jb25jYXQocHJlZml4LCIgdHJhY2UgZW5kIikpfWNhdGNoKGUpe30iZnVuY3Rpb24iPT10eXBlb2Ygd2luZG93Ll9fZGVidWcmJndpbmRvdy5fX2RlYnVnKHNvdXJjZSl9fShzb3VyY2UpfSkuYXBwbHkodGhpcyx1cGRhdGVkQXJncyl9Y2F0Y2goZSl7Y29uc29sZS5sb2coZSl9fSh7bmFtZToiZ29vZ2xldGFnc2VydmljZXMtZ3B0IixhcmdzOltdfSxbXSk7"
},
{
"title": "matomo",
"aliases": [],
"isBlocking": false,
"contentType": "application/javascript;base64",
- "content": "IWZ1bmN0aW9uKHNvdXJjZSxhcmdzKXtmdW5jdGlvbiBub29wRnVuYygpe31jb25zdCB1cGRhdGVkQXJncz1hcmdzP1tdLmNvbmNhdChzb3VyY2UpLmNvbmNhdChhcmdzKTpbc291cmNlXTt0cnl7KGZ1bmN0aW9uKHNvdXJjZSl7dmFyIFRyYWNrZXI9ZnVuY3Rpb24oKXt9O1RyYWNrZXIucHJvdG90eXBlLnNldERvTm90VHJhY2s9bm9vcEZ1bmMsVHJhY2tlci5wcm90b3R5cGUuc2V0RG9tYWlucz1ub29wRnVuYyxUcmFja2VyLnByb3RvdHlwZS5zZXRDdXN0b21EaW1lbnNpb249bm9vcEZ1bmMsVHJhY2tlci5wcm90b3R5cGUudHJhY2tQYWdlVmlldz1ub29wRnVuYzt2YXIgQXN5bmNUcmFja2VyPWZ1bmN0aW9uKCl7fTtBc3luY1RyYWNrZXIucHJvdG90eXBlLmFkZExpc3RlbmVyPW5vb3BGdW5jO3ZhciBtYXRvbW9XcmFwcGVyPXtnZXRUcmFja2VyOmZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBUcmFja2VyfSxnZXRBc3luY1RyYWNrZXI6ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IEFzeW5jVHJhY2tlcn19O3dpbmRvdy5QaXdpaz1tYXRvbW9XcmFwcGVyLGZ1bmN0aW9uKHNvdXJjZSxtZXNzYWdlKXtpZighMD09PXNvdXJjZS52ZXJib3NlKXt0cnl7dmFyIGxvZz1jb25zb2xlLmxvZy5iaW5kKGNvbnNvbGUpLHRyYWNlPWNvbnNvbGUudHJhY2UuYmluZChjb25zb2xlKSxwcmVmaXg9c291cmNlLnJ1bGVUZXh0fHwiIjtpZihzb3VyY2UuZG9tYWluTmFtZSl7dmFyIHJ1bGVTdGFydEluZGV4LEFHX1NDUklQVExFVF9NQVJLRVI9IiMlIy8vIixVQk9fU0NSSVBUTEVUX01BUktFUj0iIyMranMiO3NvdXJjZS5ydWxlVGV4dC5pbmRleE9mKEFHX1NDUklQVExFVF9NQVJLRVIpPi0xP3J1bGVTdGFydEluZGV4PXNvdXJjZS5ydWxlVGV4dC5pbmRleE9mKEFHX1NDUklQVExFVF9NQVJLRVIpOnNvdXJjZS5ydWxlVGV4dC5pbmRleE9mKFVCT19TQ1JJUFRMRVRfTUFSS0VSKT4tMSYmKHJ1bGVTdGFydEluZGV4PXNvdXJjZS5ydWxlVGV4dC5pbmRleE9mKFVCT19TQ1JJUFRMRVRfTUFSS0VSKSk7dmFyIHJ1bGVQYXJ0PXNvdXJjZS5ydWxlVGV4dC5zbGljZShydWxlU3RhcnRJbmRleCk7cHJlZml4PSIiLmNvbmNhdChzb3VyY2UuZG9tYWluTmFtZSkuY29uY2F0KHJ1bGVQYXJ0KX12YXIgTE9HX01BUktFUj0ibG9nOiAiO21lc3NhZ2UmJigtMT09PW1lc3NhZ2UuaW5kZXhPZihMT0dfTUFSS0VSKT9sb2coIiIuY29uY2F0KHByZWZpeCwiIG1lc3NhZ2U6XG4iKS5jb25jYXQobWVzc2FnZSkpOmxvZyhtZXNzYWdlLnNsaWNlKExPR19NQVJLRVIubGVuZ3RoKSkpLGxvZygiIi5jb25jYXQocHJlZml4LCIgdHJhY2Ugc3RhcnQiKSksdHJhY2UmJnRyYWNlKCksbG9nKCIiLmNvbmNhdChwcmVmaXgsIiB0cmFjZSBlbmQiKSl9Y2F0Y2goZSl7fSJmdW5jdGlvbiI9PXR5cGVvZiB3aW5kb3cuX19kZWJ1ZyYmd2luZG93Ll9fZGVidWcoc291cmNlKX19KHNvdXJjZSl9KS5hcHBseSh0aGlzLHVwZGF0ZWRBcmdzKX1jYXRjaChlKXtjb25zb2xlLmxvZyhlKX19KHtuYW1lOiJtYXRvbW8iLGFyZ3M6W119LFtdKTs="
+ "content": "IWZ1bmN0aW9uKHNvdXJjZSxhcmdzKXtmdW5jdGlvbiBub29wRnVuYygpe31jb25zdCB1cGRhdGVkQXJncz1hcmdzP1tdLmNvbmNhdChzb3VyY2UpLmNvbmNhdChhcmdzKTpbc291cmNlXTt0cnl7KGZ1bmN0aW9uKHNvdXJjZSl7dmFyIFRyYWNrZXI9ZnVuY3Rpb24oKXt9O1RyYWNrZXIucHJvdG90eXBlLnNldERvTm90VHJhY2s9bm9vcEZ1bmMsVHJhY2tlci5wcm90b3R5cGUuc2V0RG9tYWlucz1ub29wRnVuYyxUcmFja2VyLnByb3RvdHlwZS5zZXRDdXN0b21EaW1lbnNpb249bm9vcEZ1bmMsVHJhY2tlci5wcm90b3R5cGUudHJhY2tQYWdlVmlldz1ub29wRnVuYzt2YXIgQXN5bmNUcmFja2VyPWZ1bmN0aW9uKCl7fTtBc3luY1RyYWNrZXIucHJvdG90eXBlLmFkZExpc3RlbmVyPW5vb3BGdW5jO3ZhciBtYXRvbW9XcmFwcGVyPXtnZXRUcmFja2VyOmZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBUcmFja2VyfSxnZXRBc3luY1RyYWNrZXI6ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IEFzeW5jVHJhY2tlcn19O3dpbmRvdy5QaXdpaz1tYXRvbW9XcmFwcGVyLGZ1bmN0aW9uKHNvdXJjZSl7aWYoITA9PT1zb3VyY2UudmVyYm9zZSl7dHJ5e3ZhciBsb2c9Y29uc29sZS5sb2cuYmluZChjb25zb2xlKSx0cmFjZT1jb25zb2xlLnRyYWNlLmJpbmQoY29uc29sZSkscHJlZml4PXNvdXJjZS5ydWxlVGV4dHx8IiI7aWYoc291cmNlLmRvbWFpbk5hbWUpe3ZhciBydWxlU3RhcnRJbmRleCxBR19TQ1JJUFRMRVRfTUFSS0VSPSIjJSMvLyIsVUJPX1NDUklQVExFVF9NQVJLRVI9IiMjK2pzIjtzb3VyY2UucnVsZVRleHQuaW5kZXhPZihBR19TQ1JJUFRMRVRfTUFSS0VSKT4tMT9ydWxlU3RhcnRJbmRleD1zb3VyY2UucnVsZVRleHQuaW5kZXhPZihBR19TQ1JJUFRMRVRfTUFSS0VSKTpzb3VyY2UucnVsZVRleHQuaW5kZXhPZihVQk9fU0NSSVBUTEVUX01BUktFUik+LTEmJihydWxlU3RhcnRJbmRleD1zb3VyY2UucnVsZVRleHQuaW5kZXhPZihVQk9fU0NSSVBUTEVUX01BUktFUikpO3ZhciBydWxlUGFydD1zb3VyY2UucnVsZVRleHQuc2xpY2UocnVsZVN0YXJ0SW5kZXgpO3ByZWZpeD0iIi5jb25jYXQoc291cmNlLmRvbWFpbk5hbWUpLmNvbmNhdChydWxlUGFydCl9bG9nKCIiLmNvbmNhdChwcmVmaXgsIiB0cmFjZSBzdGFydCIpKSx0cmFjZSYmdHJhY2UoKSxsb2coIiIuY29uY2F0KHByZWZpeCwiIHRyYWNlIGVuZCIpKX1jYXRjaChlKXt9ImZ1bmN0aW9uIj09dHlwZW9mIHdpbmRvdy5fX2RlYnVnJiZ3aW5kb3cuX19kZWJ1Zyhzb3VyY2UpfX0oc291cmNlKX0pLmFwcGx5KHRoaXMsdXBkYXRlZEFyZ3MpfWNhdGNoKGUpe2NvbnNvbGUubG9nKGUpfX0oe25hbWU6Im1hdG9tbyIsYXJnczpbXX0sW10pOw=="
},
{
"title": "metrika-yandex-tag",
"aliases": [],
"isBlocking": false,
"contentType": "application/javascript;base64",
- "content": "IWZ1bmN0aW9uKHNvdXJjZSxhcmdzKXtmdW5jdGlvbiBub29wRnVuYygpe31jb25zdCB1cGRhdGVkQXJncz1hcmdzP1tdLmNvbmNhdChzb3VyY2UpLmNvbmNhdChhcmdzKTpbc291cmNlXTt0cnl7KGZ1bmN0aW9uKHNvdXJjZSl7dmFyIGFzeW5jQ2FsbGJhY2tGcm9tT3B0aW9ucz1mdW5jdGlvbihpZCxwYXJhbSl7dmFyIG9wdGlvbnM9YXJndW1lbnRzLmxlbmd0aD4yJiZ2b2lkIDAhPT1hcmd1bWVudHNbMl0/YXJndW1lbnRzWzJdOnt9LGNhbGxiYWNrPW9wdGlvbnMuY2FsbGJhY2ssY3R4PW9wdGlvbnMuY3R4OyJmdW5jdGlvbiI9PXR5cGVvZiBjYWxsYmFjayYmKGNhbGxiYWNrPXZvaWQgMCE9PWN0eD9jYWxsYmFjay5iaW5kKGN0eCk6Y2FsbGJhY2ssc2V0VGltZW91dCgoZnVuY3Rpb24oKXtyZXR1cm4gY2FsbGJhY2soKX0pKSl9LGFwaT17YWRkRmlsZUV4dGVuc2lvbjpub29wRnVuYyxleHRMaW5rOmFzeW5jQ2FsbGJhY2tGcm9tT3B0aW9ucyxmaWxlOmFzeW5jQ2FsbGJhY2tGcm9tT3B0aW9ucyxnZXRDbGllbnRJRDpmdW5jdGlvbihpZCxjYil7Y2ImJnNldFRpbWVvdXQoY2IobnVsbCkpfSxoaXQ6YXN5bmNDYWxsYmFja0Zyb21PcHRpb25zLG5vdEJvdW5jZTphc3luY0NhbGxiYWNrRnJvbU9wdGlvbnMscGFyYW1zOm5vb3BGdW5jLHJlYWNoR29hbDpmdW5jdGlvbihpZCx0YXJnZXQscGFyYW1zLGNhbGxiYWNrLGN0eCl7YXN5bmNDYWxsYmFja0Zyb21PcHRpb25zKG51bGwsbnVsbCx7Y2FsbGJhY2s6Y2FsbGJhY2ssY3R4OmN0eH0pfSxzZXRVc2VySUQ6bm9vcEZ1bmMsdXNlclBhcmFtczpub29wRnVuYyxkZXN0cnVjdDpub29wRnVuY307ZnVuY3Rpb24geW0oaWQsZnVuY05hbWUpe2Zvcih2YXIgX2xlbj1hcmd1bWVudHMubGVuZ3RoLGFyZ3M9bmV3IEFycmF5KF9sZW4+Mj9fbGVuLTI6MCksX2tleT0yO19rZXk8X2xlbjtfa2V5KyspYXJnc1tfa2V5LTJdPWFyZ3VtZW50c1tfa2V5XTtyZXR1cm4gYXBpW2Z1bmNOYW1lXSYmYXBpW2Z1bmNOYW1lXS5hcHBseShhcGksW2lkXS5jb25jYXQoYXJncykpfXZvaWQgMD09PXdpbmRvdy55bT8od2luZG93LnltPXltLHltLmE9W10pOndpbmRvdy55bSYmd2luZG93LnltLmEmJih5bS5hPXdpbmRvdy55bS5hLHdpbmRvdy55bT15bSx3aW5kb3cueW0uYS5mb3JFYWNoKChmdW5jdGlvbihwYXJhbXMpe3ZhciBpZDtpZD1wYXJhbXNbMF0sd2luZG93WyJ5YUNvdW50ZXIiLmNvbmNhdChpZCldPWFwaSxkb2N1bWVudC5kaXNwYXRjaEV2ZW50KG5ldyBFdmVudCgieWFjb3VudGVyIi5jb25jYXQoaWQsImluaXRlZCIpKSl9KSkpLGZ1bmN0aW9uKHNvdXJjZSxtZXNzYWdlKXtpZighMD09PXNvdXJjZS52ZXJib3NlKXt0cnl7dmFyIGxvZz1jb25zb2xlLmxvZy5iaW5kKGNvbnNvbGUpLHRyYWNlPWNvbnNvbGUudHJhY2UuYmluZChjb25zb2xlKSxwcmVmaXg9c291cmNlLnJ1bGVUZXh0fHwiIjtpZihzb3VyY2UuZG9tYWluTmFtZSl7dmFyIHJ1bGVTdGFydEluZGV4LEFHX1NDUklQVExFVF9NQVJLRVI9IiMlIy8vIixVQk9fU0NSSVBUTEVUX01BUktFUj0iIyMranMiO3NvdXJjZS5ydWxlVGV4dC5pbmRleE9mKEFHX1NDUklQVExFVF9NQVJLRVIpPi0xP3J1bGVTdGFydEluZGV4PXNvdXJjZS5ydWxlVGV4dC5pbmRleE9mKEFHX1NDUklQVExFVF9NQVJLRVIpOnNvdXJjZS5ydWxlVGV4dC5pbmRleE9mKFVCT19TQ1JJUFRMRVRfTUFSS0VSKT4tMSYmKHJ1bGVTdGFydEluZGV4PXNvdXJjZS5ydWxlVGV4dC5pbmRleE9mKFVCT19TQ1JJUFRMRVRfTUFSS0VSKSk7dmFyIHJ1bGVQYXJ0PXNvdXJjZS5ydWxlVGV4dC5zbGljZShydWxlU3RhcnRJbmRleCk7cHJlZml4PSIiLmNvbmNhdChzb3VyY2UuZG9tYWluTmFtZSkuY29uY2F0KHJ1bGVQYXJ0KX12YXIgTE9HX01BUktFUj0ibG9nOiAiO21lc3NhZ2UmJigtMT09PW1lc3NhZ2UuaW5kZXhPZihMT0dfTUFSS0VSKT9sb2coIiIuY29uY2F0KHByZWZpeCwiIG1lc3NhZ2U6XG4iKS5jb25jYXQobWVzc2FnZSkpOmxvZyhtZXNzYWdlLnNsaWNlKExPR19NQVJLRVIubGVuZ3RoKSkpLGxvZygiIi5jb25jYXQocHJlZml4LCIgdHJhY2Ugc3RhcnQiKSksdHJhY2UmJnRyYWNlKCksbG9nKCIiLmNvbmNhdChwcmVmaXgsIiB0cmFjZSBlbmQiKSl9Y2F0Y2goZSl7fSJmdW5jdGlvbiI9PXR5cGVvZiB3aW5kb3cuX19kZWJ1ZyYmd2luZG93Ll9fZGVidWcoc291cmNlKX19KHNvdXJjZSl9KS5hcHBseSh0aGlzLHVwZGF0ZWRBcmdzKX1jYXRjaChlKXtjb25zb2xlLmxvZyhlKX19KHtuYW1lOiJtZXRyaWthLXlhbmRleC10YWciLGFyZ3M6W119LFtdKTs="
+ "content": "IWZ1bmN0aW9uKHNvdXJjZSxhcmdzKXtmdW5jdGlvbiBub29wRnVuYygpe31jb25zdCB1cGRhdGVkQXJncz1hcmdzP1tdLmNvbmNhdChzb3VyY2UpLmNvbmNhdChhcmdzKTpbc291cmNlXTt0cnl7KGZ1bmN0aW9uKHNvdXJjZSl7dmFyIGFzeW5jQ2FsbGJhY2tGcm9tT3B0aW9ucz1mdW5jdGlvbihpZCxwYXJhbSl7dmFyIG9wdGlvbnM9YXJndW1lbnRzLmxlbmd0aD4yJiZ2b2lkIDAhPT1hcmd1bWVudHNbMl0/YXJndW1lbnRzWzJdOnt9LGNhbGxiYWNrPW9wdGlvbnMuY2FsbGJhY2ssY3R4PW9wdGlvbnMuY3R4OyJmdW5jdGlvbiI9PXR5cGVvZiBjYWxsYmFjayYmKGNhbGxiYWNrPXZvaWQgMCE9PWN0eD9jYWxsYmFjay5iaW5kKGN0eCk6Y2FsbGJhY2ssc2V0VGltZW91dCgoZnVuY3Rpb24oKXtyZXR1cm4gY2FsbGJhY2soKX0pKSl9LGFwaT17YWRkRmlsZUV4dGVuc2lvbjpub29wRnVuYyxleHRMaW5rOmFzeW5jQ2FsbGJhY2tGcm9tT3B0aW9ucyxmaWxlOmFzeW5jQ2FsbGJhY2tGcm9tT3B0aW9ucyxnZXRDbGllbnRJRDpmdW5jdGlvbihpZCxjYil7Y2ImJnNldFRpbWVvdXQoY2IobnVsbCkpfSxoaXQ6YXN5bmNDYWxsYmFja0Zyb21PcHRpb25zLG5vdEJvdW5jZTphc3luY0NhbGxiYWNrRnJvbU9wdGlvbnMscGFyYW1zOm5vb3BGdW5jLHJlYWNoR29hbDpmdW5jdGlvbihpZCx0YXJnZXQscGFyYW1zLGNhbGxiYWNrLGN0eCl7YXN5bmNDYWxsYmFja0Zyb21PcHRpb25zKG51bGwsbnVsbCx7Y2FsbGJhY2s6Y2FsbGJhY2ssY3R4OmN0eH0pfSxzZXRVc2VySUQ6bm9vcEZ1bmMsdXNlclBhcmFtczpub29wRnVuYyxkZXN0cnVjdDpub29wRnVuY307ZnVuY3Rpb24geW0oaWQsZnVuY05hbWUpe2Zvcih2YXIgX2xlbj1hcmd1bWVudHMubGVuZ3RoLGFyZ3M9bmV3IEFycmF5KF9sZW4+Mj9fbGVuLTI6MCksX2tleT0yO19rZXk8X2xlbjtfa2V5KyspYXJnc1tfa2V5LTJdPWFyZ3VtZW50c1tfa2V5XTtyZXR1cm4gYXBpW2Z1bmNOYW1lXSYmYXBpW2Z1bmNOYW1lXS5hcHBseShhcGksW2lkXS5jb25jYXQoYXJncykpfXZvaWQgMD09PXdpbmRvdy55bT8od2luZG93LnltPXltLHltLmE9W10pOndpbmRvdy55bSYmd2luZG93LnltLmEmJih5bS5hPXdpbmRvdy55bS5hLHdpbmRvdy55bT15bSx3aW5kb3cueW0uYS5mb3JFYWNoKChmdW5jdGlvbihwYXJhbXMpe3ZhciBpZDtpZD1wYXJhbXNbMF0sd2luZG93WyJ5YUNvdW50ZXIiLmNvbmNhdChpZCldPWFwaSxkb2N1bWVudC5kaXNwYXRjaEV2ZW50KG5ldyBFdmVudCgieWFjb3VudGVyIi5jb25jYXQoaWQsImluaXRlZCIpKSl9KSkpLGZ1bmN0aW9uKHNvdXJjZSl7aWYoITA9PT1zb3VyY2UudmVyYm9zZSl7dHJ5e3ZhciBsb2c9Y29uc29sZS5sb2cuYmluZChjb25zb2xlKSx0cmFjZT1jb25zb2xlLnRyYWNlLmJpbmQoY29uc29sZSkscHJlZml4PXNvdXJjZS5ydWxlVGV4dHx8IiI7aWYoc291cmNlLmRvbWFpbk5hbWUpe3ZhciBydWxlU3RhcnRJbmRleCxBR19TQ1JJUFRMRVRfTUFSS0VSPSIjJSMvLyIsVUJPX1NDUklQVExFVF9NQVJLRVI9IiMjK2pzIjtzb3VyY2UucnVsZVRleHQuaW5kZXhPZihBR19TQ1JJUFRMRVRfTUFSS0VSKT4tMT9ydWxlU3RhcnRJbmRleD1zb3VyY2UucnVsZVRleHQuaW5kZXhPZihBR19TQ1JJUFRMRVRfTUFSS0VSKTpzb3VyY2UucnVsZVRleHQuaW5kZXhPZihVQk9fU0NSSVBUTEVUX01BUktFUik+LTEmJihydWxlU3RhcnRJbmRleD1zb3VyY2UucnVsZVRleHQuaW5kZXhPZihVQk9fU0NSSVBUTEVUX01BUktFUikpO3ZhciBydWxlUGFydD1zb3VyY2UucnVsZVRleHQuc2xpY2UocnVsZVN0YXJ0SW5kZXgpO3ByZWZpeD0iIi5jb25jYXQoc291cmNlLmRvbWFpbk5hbWUpLmNvbmNhdChydWxlUGFydCl9bG9nKCIiLmNvbmNhdChwcmVmaXgsIiB0cmFjZSBzdGFydCIpKSx0cmFjZSYmdHJhY2UoKSxsb2coIiIuY29uY2F0KHByZWZpeCwiIHRyYWNlIGVuZCIpKX1jYXRjaChlKXt9ImZ1bmN0aW9uIj09dHlwZW9mIHdpbmRvdy5fX2RlYnVnJiZ3aW5kb3cuX19kZWJ1Zyhzb3VyY2UpfX0oc291cmNlKX0pLmFwcGx5KHRoaXMsdXBkYXRlZEFyZ3MpfWNhdGNoKGUpe2NvbnNvbGUubG9nKGUpfX0oe25hbWU6Im1ldHJpa2EteWFuZGV4LXRhZyIsYXJnczpbXX0sW10pOw=="
},
{
"title": "metrika-yandex-watch",
"aliases": [],
"isBlocking": false,
"contentType": "application/javascript;base64",
- "content": "IWZ1bmN0aW9uKHNvdXJjZSxhcmdzKXtmdW5jdGlvbiBub29wRnVuYygpe31mdW5jdGlvbiBub29wQXJyYXkoKXtyZXR1cm5bXX1jb25zdCB1cGRhdGVkQXJncz1hcmdzP1tdLmNvbmNhdChzb3VyY2UpLmNvbmNhdChhcmdzKTpbc291cmNlXTt0cnl7KGZ1bmN0aW9uKHNvdXJjZSl7dmFyIGNiTmFtZT0ieWFuZGV4X21ldHJpa2FfY2FsbGJhY2tzIixhc3luY0NhbGxiYWNrRnJvbU9wdGlvbnM9ZnVuY3Rpb24oKXt2YXIgb3B0aW9ucz1hcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXT9hcmd1bWVudHNbMF06e30sY2FsbGJhY2s9b3B0aW9ucy5jYWxsYmFjayxjdHg9b3B0aW9ucy5jdHg7ImZ1bmN0aW9uIj09dHlwZW9mIGNhbGxiYWNrJiYoY2FsbGJhY2s9dm9pZCAwIT09Y3R4P2NhbGxiYWNrLmJpbmQoY3R4KTpjYWxsYmFjayxzZXRUaW1lb3V0KChmdW5jdGlvbigpe3JldHVybiBjYWxsYmFjaygpfSkpKX07ZnVuY3Rpb24gTWV0cmlrYSgpe31NZXRyaWthLmNvdW50ZXJzPW5vb3BBcnJheSxNZXRyaWthLnByb3RvdHlwZS5hZGRGaWxlRXh0ZW5zaW9uPW5vb3BGdW5jLE1ldHJpa2EucHJvdG90eXBlLmdldENsaWVudElEPW5vb3BGdW5jLE1ldHJpa2EucHJvdG90eXBlLnNldFVzZXJJRD1ub29wRnVuYyxNZXRyaWthLnByb3RvdHlwZS51c2VyUGFyYW1zPW5vb3BGdW5jLE1ldHJpa2EucHJvdG90eXBlLnBhcmFtcz1ub29wRnVuYyxNZXRyaWthLnByb3RvdHlwZS5jb3VudGVycz1ub29wQXJyYXksTWV0cmlrYS5wcm90b3R5cGUuZXh0TGluaz1mdW5jdGlvbih1cmwsb3B0aW9ucyl7YXN5bmNDYWxsYmFja0Zyb21PcHRpb25zKG9wdGlvbnMpfSxNZXRyaWthLnByb3RvdHlwZS5maWxlPWZ1bmN0aW9uKHVybCxvcHRpb25zKXthc3luY0NhbGxiYWNrRnJvbU9wdGlvbnMob3B0aW9ucyl9LE1ldHJpa2EucHJvdG90eXBlLmhpdD1mdW5jdGlvbih1cmwsb3B0aW9ucyl7YXN5bmNDYWxsYmFja0Zyb21PcHRpb25zKG9wdGlvbnMpfSxNZXRyaWthLnByb3RvdHlwZS5yZWFjaEdvYWw9ZnVuY3Rpb24odGFyZ2V0LHBhcmFtcyxjYixjdHgpe2FzeW5jQ2FsbGJhY2tGcm9tT3B0aW9ucyh7Y2FsbGJhY2s6Y2IsY3R4OmN0eH0pfSxNZXRyaWthLnByb3RvdHlwZS5ub3RCb3VuY2U9YXN5bmNDYWxsYmFja0Zyb21PcHRpb25zLHdpbmRvdy5ZYT93aW5kb3cuWWEuTWV0cmlrYT1NZXRyaWthOndpbmRvdy5ZYT17TWV0cmlrYTpNZXRyaWthfSx3aW5kb3dbY2JOYW1lXSYmQXJyYXkuaXNBcnJheSh3aW5kb3dbY2JOYW1lXSkmJndpbmRvd1tjYk5hbWVdLmZvckVhY2goKGZ1bmN0aW9uKGZ1bmMpeyJmdW5jdGlvbiI9PXR5cGVvZiBmdW5jJiZmdW5jKCl9KSksZnVuY3Rpb24oc291cmNlLG1lc3NhZ2Upe2lmKCEwPT09c291cmNlLnZlcmJvc2Upe3RyeXt2YXIgbG9nPWNvbnNvbGUubG9nLmJpbmQoY29uc29sZSksdHJhY2U9Y29uc29sZS50cmFjZS5iaW5kKGNvbnNvbGUpLHByZWZpeD1zb3VyY2UucnVsZVRleHR8fCIiO2lmKHNvdXJjZS5kb21haW5OYW1lKXt2YXIgcnVsZVN0YXJ0SW5kZXgsQUdfU0NSSVBUTEVUX01BUktFUj0iIyUjLy8iLFVCT19TQ1JJUFRMRVRfTUFSS0VSPSIjIytqcyI7c291cmNlLnJ1bGVUZXh0LmluZGV4T2YoQUdfU0NSSVBUTEVUX01BUktFUik+LTE/cnVsZVN0YXJ0SW5kZXg9c291cmNlLnJ1bGVUZXh0LmluZGV4T2YoQUdfU0NSSVBUTEVUX01BUktFUik6c291cmNlLnJ1bGVUZXh0LmluZGV4T2YoVUJPX1NDUklQVExFVF9NQVJLRVIpPi0xJiYocnVsZVN0YXJ0SW5kZXg9c291cmNlLnJ1bGVUZXh0LmluZGV4T2YoVUJPX1NDUklQVExFVF9NQVJLRVIpKTt2YXIgcnVsZVBhcnQ9c291cmNlLnJ1bGVUZXh0LnNsaWNlKHJ1bGVTdGFydEluZGV4KTtwcmVmaXg9IiIuY29uY2F0KHNvdXJjZS5kb21haW5OYW1lKS5jb25jYXQocnVsZVBhcnQpfXZhciBMT0dfTUFSS0VSPSJsb2c6ICI7bWVzc2FnZSYmKC0xPT09bWVzc2FnZS5pbmRleE9mKExPR19NQVJLRVIpP2xvZygiIi5jb25jYXQocHJlZml4LCIgbWVzc2FnZTpcbiIpLmNvbmNhdChtZXNzYWdlKSk6bG9nKG1lc3NhZ2Uuc2xpY2UoTE9HX01BUktFUi5sZW5ndGgpKSksbG9nKCIiLmNvbmNhdChwcmVmaXgsIiB0cmFjZSBzdGFydCIpKSx0cmFjZSYmdHJhY2UoKSxsb2coIiIuY29uY2F0KHByZWZpeCwiIHRyYWNlIGVuZCIpKX1jYXRjaChlKXt9ImZ1bmN0aW9uIj09dHlwZW9mIHdpbmRvdy5fX2RlYnVnJiZ3aW5kb3cuX19kZWJ1Zyhzb3VyY2UpfX0oc291cmNlKX0pLmFwcGx5KHRoaXMsdXBkYXRlZEFyZ3MpfWNhdGNoKGUpe2NvbnNvbGUubG9nKGUpfX0oe25hbWU6Im1ldHJpa2EteWFuZGV4LXdhdGNoIixhcmdzOltdfSxbXSk7"
+ "content": "IWZ1bmN0aW9uKHNvdXJjZSxhcmdzKXtmdW5jdGlvbiBub29wRnVuYygpe31mdW5jdGlvbiBub29wQXJyYXkoKXtyZXR1cm5bXX1jb25zdCB1cGRhdGVkQXJncz1hcmdzP1tdLmNvbmNhdChzb3VyY2UpLmNvbmNhdChhcmdzKTpbc291cmNlXTt0cnl7KGZ1bmN0aW9uKHNvdXJjZSl7dmFyIGNiTmFtZT0ieWFuZGV4X21ldHJpa2FfY2FsbGJhY2tzIixhc3luY0NhbGxiYWNrRnJvbU9wdGlvbnM9ZnVuY3Rpb24oKXt2YXIgb3B0aW9ucz1hcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXT9hcmd1bWVudHNbMF06e30sY2FsbGJhY2s9b3B0aW9ucy5jYWxsYmFjayxjdHg9b3B0aW9ucy5jdHg7ImZ1bmN0aW9uIj09dHlwZW9mIGNhbGxiYWNrJiYoY2FsbGJhY2s9dm9pZCAwIT09Y3R4P2NhbGxiYWNrLmJpbmQoY3R4KTpjYWxsYmFjayxzZXRUaW1lb3V0KChmdW5jdGlvbigpe3JldHVybiBjYWxsYmFjaygpfSkpKX07ZnVuY3Rpb24gTWV0cmlrYSgpe31NZXRyaWthLmNvdW50ZXJzPW5vb3BBcnJheSxNZXRyaWthLnByb3RvdHlwZS5hZGRGaWxlRXh0ZW5zaW9uPW5vb3BGdW5jLE1ldHJpa2EucHJvdG90eXBlLmdldENsaWVudElEPW5vb3BGdW5jLE1ldHJpa2EucHJvdG90eXBlLnNldFVzZXJJRD1ub29wRnVuYyxNZXRyaWthLnByb3RvdHlwZS51c2VyUGFyYW1zPW5vb3BGdW5jLE1ldHJpa2EucHJvdG90eXBlLnBhcmFtcz1ub29wRnVuYyxNZXRyaWthLnByb3RvdHlwZS5jb3VudGVycz1ub29wQXJyYXksTWV0cmlrYS5wcm90b3R5cGUuZXh0TGluaz1mdW5jdGlvbih1cmwsb3B0aW9ucyl7YXN5bmNDYWxsYmFja0Zyb21PcHRpb25zKG9wdGlvbnMpfSxNZXRyaWthLnByb3RvdHlwZS5maWxlPWZ1bmN0aW9uKHVybCxvcHRpb25zKXthc3luY0NhbGxiYWNrRnJvbU9wdGlvbnMob3B0aW9ucyl9LE1ldHJpa2EucHJvdG90eXBlLmhpdD1mdW5jdGlvbih1cmwsb3B0aW9ucyl7YXN5bmNDYWxsYmFja0Zyb21PcHRpb25zKG9wdGlvbnMpfSxNZXRyaWthLnByb3RvdHlwZS5yZWFjaEdvYWw9ZnVuY3Rpb24odGFyZ2V0LHBhcmFtcyxjYixjdHgpe2FzeW5jQ2FsbGJhY2tGcm9tT3B0aW9ucyh7Y2FsbGJhY2s6Y2IsY3R4OmN0eH0pfSxNZXRyaWthLnByb3RvdHlwZS5ub3RCb3VuY2U9YXN5bmNDYWxsYmFja0Zyb21PcHRpb25zLHdpbmRvdy5ZYT93aW5kb3cuWWEuTWV0cmlrYT1NZXRyaWthOndpbmRvdy5ZYT17TWV0cmlrYTpNZXRyaWthfSx3aW5kb3dbY2JOYW1lXSYmQXJyYXkuaXNBcnJheSh3aW5kb3dbY2JOYW1lXSkmJndpbmRvd1tjYk5hbWVdLmZvckVhY2goKGZ1bmN0aW9uKGZ1bmMpeyJmdW5jdGlvbiI9PXR5cGVvZiBmdW5jJiZmdW5jKCl9KSksZnVuY3Rpb24oc291cmNlKXtpZighMD09PXNvdXJjZS52ZXJib3NlKXt0cnl7dmFyIGxvZz1jb25zb2xlLmxvZy5iaW5kKGNvbnNvbGUpLHRyYWNlPWNvbnNvbGUudHJhY2UuYmluZChjb25zb2xlKSxwcmVmaXg9c291cmNlLnJ1bGVUZXh0fHwiIjtpZihzb3VyY2UuZG9tYWluTmFtZSl7dmFyIHJ1bGVTdGFydEluZGV4LEFHX1NDUklQVExFVF9NQVJLRVI9IiMlIy8vIixVQk9fU0NSSVBUTEVUX01BUktFUj0iIyMranMiO3NvdXJjZS5ydWxlVGV4dC5pbmRleE9mKEFHX1NDUklQVExFVF9NQVJLRVIpPi0xP3J1bGVTdGFydEluZGV4PXNvdXJjZS5ydWxlVGV4dC5pbmRleE9mKEFHX1NDUklQVExFVF9NQVJLRVIpOnNvdXJjZS5ydWxlVGV4dC5pbmRleE9mKFVCT19TQ1JJUFRMRVRfTUFSS0VSKT4tMSYmKHJ1bGVTdGFydEluZGV4PXNvdXJjZS5ydWxlVGV4dC5pbmRleE9mKFVCT19TQ1JJUFRMRVRfTUFSS0VSKSk7dmFyIHJ1bGVQYXJ0PXNvdXJjZS5ydWxlVGV4dC5zbGljZShydWxlU3RhcnRJbmRleCk7cHJlZml4PSIiLmNvbmNhdChzb3VyY2UuZG9tYWluTmFtZSkuY29uY2F0KHJ1bGVQYXJ0KX1sb2coIiIuY29uY2F0KHByZWZpeCwiIHRyYWNlIHN0YXJ0IikpLHRyYWNlJiZ0cmFjZSgpLGxvZygiIi5jb25jYXQocHJlZml4LCIgdHJhY2UgZW5kIikpfWNhdGNoKGUpe30iZnVuY3Rpb24iPT10eXBlb2Ygd2luZG93Ll9fZGVidWcmJndpbmRvdy5fX2RlYnVnKHNvdXJjZSl9fShzb3VyY2UpfSkuYXBwbHkodGhpcyx1cGRhdGVkQXJncyl9Y2F0Y2goZSl7Y29uc29sZS5sb2coZSl9fSh7bmFtZToibWV0cmlrYS15YW5kZXgtd2F0Y2giLGFyZ3M6W119LFtdKTs="
},
{
"title": "naver-wcslog",
"aliases": [],
"isBlocking": false,
"contentType": "application/javascript;base64",
- "content": "IWZ1bmN0aW9uKHNvdXJjZSxhcmdzKXtmdW5jdGlvbiBub29wRnVuYygpe31jb25zdCB1cGRhdGVkQXJncz1hcmdzP1tdLmNvbmNhdChzb3VyY2UpLmNvbmNhdChhcmdzKTpbc291cmNlXTt0cnl7KGZ1bmN0aW9uKHNvdXJjZSl7d2luZG93Lndjc19hZGQ9e30sd2luZG93Lndjc19kbz1ub29wRnVuYyx3aW5kb3cud2NzPXtpbmZsb3c6bm9vcEZ1bmN9LGZ1bmN0aW9uKHNvdXJjZSxtZXNzYWdlKXtpZighMD09PXNvdXJjZS52ZXJib3NlKXt0cnl7dmFyIGxvZz1jb25zb2xlLmxvZy5iaW5kKGNvbnNvbGUpLHRyYWNlPWNvbnNvbGUudHJhY2UuYmluZChjb25zb2xlKSxwcmVmaXg9c291cmNlLnJ1bGVUZXh0fHwiIjtpZihzb3VyY2UuZG9tYWluTmFtZSl7dmFyIHJ1bGVTdGFydEluZGV4LEFHX1NDUklQVExFVF9NQVJLRVI9IiMlIy8vIixVQk9fU0NSSVBUTEVUX01BUktFUj0iIyMranMiO3NvdXJjZS5ydWxlVGV4dC5pbmRleE9mKEFHX1NDUklQVExFVF9NQVJLRVIpPi0xP3J1bGVTdGFydEluZGV4PXNvdXJjZS5ydWxlVGV4dC5pbmRleE9mKEFHX1NDUklQVExFVF9NQVJLRVIpOnNvdXJjZS5ydWxlVGV4dC5pbmRleE9mKFVCT19TQ1JJUFRMRVRfTUFSS0VSKT4tMSYmKHJ1bGVTdGFydEluZGV4PXNvdXJjZS5ydWxlVGV4dC5pbmRleE9mKFVCT19TQ1JJUFRMRVRfTUFSS0VSKSk7dmFyIHJ1bGVQYXJ0PXNvdXJjZS5ydWxlVGV4dC5zbGljZShydWxlU3RhcnRJbmRleCk7cHJlZml4PSIiLmNvbmNhdChzb3VyY2UuZG9tYWluTmFtZSkuY29uY2F0KHJ1bGVQYXJ0KX12YXIgTE9HX01BUktFUj0ibG9nOiAiO21lc3NhZ2UmJigtMT09PW1lc3NhZ2UuaW5kZXhPZihMT0dfTUFSS0VSKT9sb2coIiIuY29uY2F0KHByZWZpeCwiIG1lc3NhZ2U6XG4iKS5jb25jYXQobWVzc2FnZSkpOmxvZyhtZXNzYWdlLnNsaWNlKExPR19NQVJLRVIubGVuZ3RoKSkpLGxvZygiIi5jb25jYXQocHJlZml4LCIgdHJhY2Ugc3RhcnQiKSksdHJhY2UmJnRyYWNlKCksbG9nKCIiLmNvbmNhdChwcmVmaXgsIiB0cmFjZSBlbmQiKSl9Y2F0Y2goZSl7fSJmdW5jdGlvbiI9PXR5cGVvZiB3aW5kb3cuX19kZWJ1ZyYmd2luZG93Ll9fZGVidWcoc291cmNlKX19KHNvdXJjZSl9KS5hcHBseSh0aGlzLHVwZGF0ZWRBcmdzKX1jYXRjaChlKXtjb25zb2xlLmxvZyhlKX19KHtuYW1lOiJuYXZlci13Y3Nsb2ciLGFyZ3M6W119LFtdKTs="
+ "content": "IWZ1bmN0aW9uKHNvdXJjZSxhcmdzKXtmdW5jdGlvbiBub29wRnVuYygpe31jb25zdCB1cGRhdGVkQXJncz1hcmdzP1tdLmNvbmNhdChzb3VyY2UpLmNvbmNhdChhcmdzKTpbc291cmNlXTt0cnl7KGZ1bmN0aW9uKHNvdXJjZSl7d2luZG93Lndjc19hZGQ9e30sd2luZG93Lndjc19kbz1ub29wRnVuYyx3aW5kb3cud2NzPXtpbmZsb3c6bm9vcEZ1bmN9LGZ1bmN0aW9uKHNvdXJjZSl7aWYoITA9PT1zb3VyY2UudmVyYm9zZSl7dHJ5e3ZhciBsb2c9Y29uc29sZS5sb2cuYmluZChjb25zb2xlKSx0cmFjZT1jb25zb2xlLnRyYWNlLmJpbmQoY29uc29sZSkscHJlZml4PXNvdXJjZS5ydWxlVGV4dHx8IiI7aWYoc291cmNlLmRvbWFpbk5hbWUpe3ZhciBydWxlU3RhcnRJbmRleCxBR19TQ1JJUFRMRVRfTUFSS0VSPSIjJSMvLyIsVUJPX1NDUklQVExFVF9NQVJLRVI9IiMjK2pzIjtzb3VyY2UucnVsZVRleHQuaW5kZXhPZihBR19TQ1JJUFRMRVRfTUFSS0VSKT4tMT9ydWxlU3RhcnRJbmRleD1zb3VyY2UucnVsZVRleHQuaW5kZXhPZihBR19TQ1JJUFRMRVRfTUFSS0VSKTpzb3VyY2UucnVsZVRleHQuaW5kZXhPZihVQk9fU0NSSVBUTEVUX01BUktFUik+LTEmJihydWxlU3RhcnRJbmRleD1zb3VyY2UucnVsZVRleHQuaW5kZXhPZihVQk9fU0NSSVBUTEVUX01BUktFUikpO3ZhciBydWxlUGFydD1zb3VyY2UucnVsZVRleHQuc2xpY2UocnVsZVN0YXJ0SW5kZXgpO3ByZWZpeD0iIi5jb25jYXQoc291cmNlLmRvbWFpbk5hbWUpLmNvbmNhdChydWxlUGFydCl9bG9nKCIiLmNvbmNhdChwcmVmaXgsIiB0cmFjZSBzdGFydCIpKSx0cmFjZSYmdHJhY2UoKSxsb2coIiIuY29uY2F0KHByZWZpeCwiIHRyYWNlIGVuZCIpKX1jYXRjaChlKXt9ImZ1bmN0aW9uIj09dHlwZW9mIHdpbmRvdy5fX2RlYnVnJiZ3aW5kb3cuX19kZWJ1Zyhzb3VyY2UpfX0oc291cmNlKX0pLmFwcGx5KHRoaXMsdXBkYXRlZEFyZ3MpfWNhdGNoKGUpe2NvbnNvbGUubG9nKGUpfX0oe25hbWU6Im5hdmVyLXdjc2xvZyIsYXJnczpbXX0sW10pOw=="
},
{
"title": "noeval",
@@ -291,14 +294,14 @@
],
"isBlocking": false,
"contentType": "application/javascript;base64",
- "content": "IWZ1bmN0aW9uKHNvdXJjZSxhcmdzKXtjb25zdCB1cGRhdGVkQXJncz1hcmdzP1tdLmNvbmNhdChzb3VyY2UpLmNvbmNhdChhcmdzKTpbc291cmNlXTt0cnl7KGZ1bmN0aW9uKHNvdXJjZSl7d2luZG93LmV2YWw9ZnVuY3Rpb24ocyl7IWZ1bmN0aW9uKHNvdXJjZSxtZXNzYWdlKXtpZighMD09PXNvdXJjZS52ZXJib3NlKXt0cnl7dmFyIGxvZz1jb25zb2xlLmxvZy5iaW5kKGNvbnNvbGUpLHRyYWNlPWNvbnNvbGUudHJhY2UuYmluZChjb25zb2xlKSxwcmVmaXg9c291cmNlLnJ1bGVUZXh0fHwiIjtpZihzb3VyY2UuZG9tYWluTmFtZSl7dmFyIHJ1bGVTdGFydEluZGV4LEFHX1NDUklQVExFVF9NQVJLRVI9IiMlIy8vIixVQk9fU0NSSVBUTEVUX01BUktFUj0iIyMranMiO3NvdXJjZS5ydWxlVGV4dC5pbmRleE9mKEFHX1NDUklQVExFVF9NQVJLRVIpPi0xP3J1bGVTdGFydEluZGV4PXNvdXJjZS5ydWxlVGV4dC5pbmRleE9mKEFHX1NDUklQVExFVF9NQVJLRVIpOnNvdXJjZS5ydWxlVGV4dC5pbmRleE9mKFVCT19TQ1JJUFRMRVRfTUFSS0VSKT4tMSYmKHJ1bGVTdGFydEluZGV4PXNvdXJjZS5ydWxlVGV4dC5pbmRleE9mKFVCT19TQ1JJUFRMRVRfTUFSS0VSKSk7dmFyIHJ1bGVQYXJ0PXNvdXJjZS5ydWxlVGV4dC5zbGljZShydWxlU3RhcnRJbmRleCk7cHJlZml4PSIiLmNvbmNhdChzb3VyY2UuZG9tYWluTmFtZSkuY29uY2F0KHJ1bGVQYXJ0KX12YXIgTE9HX01BUktFUj0ibG9nOiAiO21lc3NhZ2UmJigtMT09PW1lc3NhZ2UuaW5kZXhPZihMT0dfTUFSS0VSKT9sb2coIiIuY29uY2F0KHByZWZpeCwiIG1lc3NhZ2U6XG4iKS5jb25jYXQobWVzc2FnZSkpOmxvZyhtZXNzYWdlLnNsaWNlKExPR19NQVJLRVIubGVuZ3RoKSkpLGxvZygiIi5jb25jYXQocHJlZml4LCIgdHJhY2Ugc3RhcnQiKSksdHJhY2UmJnRyYWNlKCksbG9nKCIiLmNvbmNhdChwcmVmaXgsIiB0cmFjZSBlbmQiKSl9Y2F0Y2goZSl7fSJmdW5jdGlvbiI9PXR5cGVvZiB3aW5kb3cuX19kZWJ1ZyYmd2luZG93Ll9fZGVidWcoc291cmNlKX19KHNvdXJjZSwiQWRHdWFyZCBoYXMgcHJldmVudGVkIGV2YWw6XG4iLmNvbmNhdChzKSl9LmJpbmQoKX0pLmFwcGx5KHRoaXMsdXBkYXRlZEFyZ3MpfWNhdGNoKGUpe2NvbnNvbGUubG9nKGUpfX0oe25hbWU6Im5vZXZhbCIsYXJnczpbXX0sW10pOw=="
+ "content": "IWZ1bmN0aW9uKHNvdXJjZSxhcmdzKXtjb25zdCB1cGRhdGVkQXJncz1hcmdzP1tdLmNvbmNhdChzb3VyY2UpLmNvbmNhdChhcmdzKTpbc291cmNlXTt0cnl7KGZ1bmN0aW9uKHNvdXJjZSl7d2luZG93LmV2YWw9ZnVuY3Rpb24ocyl7IWZ1bmN0aW9uKHNvdXJjZSl7aWYoITA9PT1zb3VyY2UudmVyYm9zZSl7dHJ5e3ZhciBsb2c9Y29uc29sZS5sb2cuYmluZChjb25zb2xlKSx0cmFjZT1jb25zb2xlLnRyYWNlLmJpbmQoY29uc29sZSkscHJlZml4PXNvdXJjZS5ydWxlVGV4dHx8IiI7aWYoc291cmNlLmRvbWFpbk5hbWUpe3ZhciBydWxlU3RhcnRJbmRleCxBR19TQ1JJUFRMRVRfTUFSS0VSPSIjJSMvLyIsVUJPX1NDUklQVExFVF9NQVJLRVI9IiMjK2pzIjtzb3VyY2UucnVsZVRleHQuaW5kZXhPZihBR19TQ1JJUFRMRVRfTUFSS0VSKT4tMT9ydWxlU3RhcnRJbmRleD1zb3VyY2UucnVsZVRleHQuaW5kZXhPZihBR19TQ1JJUFRMRVRfTUFSS0VSKTpzb3VyY2UucnVsZVRleHQuaW5kZXhPZihVQk9fU0NSSVBUTEVUX01BUktFUik+LTEmJihydWxlU3RhcnRJbmRleD1zb3VyY2UucnVsZVRleHQuaW5kZXhPZihVQk9fU0NSSVBUTEVUX01BUktFUikpO3ZhciBydWxlUGFydD1zb3VyY2UucnVsZVRleHQuc2xpY2UocnVsZVN0YXJ0SW5kZXgpO3ByZWZpeD0iIi5jb25jYXQoc291cmNlLmRvbWFpbk5hbWUpLmNvbmNhdChydWxlUGFydCl9bG9nKCIiLmNvbmNhdChwcmVmaXgsIiB0cmFjZSBzdGFydCIpKSx0cmFjZSYmdHJhY2UoKSxsb2coIiIuY29uY2F0KHByZWZpeCwiIHRyYWNlIGVuZCIpKX1jYXRjaChlKXt9ImZ1bmN0aW9uIj09dHlwZW9mIHdpbmRvdy5fX2RlYnVnJiZ3aW5kb3cuX19kZWJ1Zyhzb3VyY2UpfX0oc291cmNlKSxmdW5jdGlvbihzb3VyY2UsbWVzc2FnZSl7KGFyZ3VtZW50cy5sZW5ndGg+MiYmdm9pZCAwIT09YXJndW1lbnRzWzJdJiZhcmd1bWVudHNbMl18fHNvdXJjZS52ZXJib3NlKSYmY29uc29sZS5sb2coIiIuY29uY2F0KHNvdXJjZS5uYW1lLCI6ICIpLmNvbmNhdChtZXNzYWdlKSl9KHNvdXJjZSwiQWRHdWFyZCBoYXMgcHJldmVudGVkIGV2YWw6XG4iLmNvbmNhdChzKSwhMCl9LmJpbmQoKX0pLmFwcGx5KHRoaXMsdXBkYXRlZEFyZ3MpfWNhdGNoKGUpe2NvbnNvbGUubG9nKGUpfX0oe25hbWU6Im5vZXZhbCIsYXJnczpbXX0sW10pOw=="
},
{
"title": "pardot-1.0",
"aliases": [],
"isBlocking": false,
"contentType": "application/javascript;base64",
- "content": "IWZ1bmN0aW9uKHNvdXJjZSxhcmdzKXtmdW5jdGlvbiBub29wRnVuYygpe31mdW5jdGlvbiBub29wU3RyKCl7cmV0dXJuIiJ9ZnVuY3Rpb24gbm9vcE51bGwoKXtyZXR1cm4gbnVsbH1jb25zdCB1cGRhdGVkQXJncz1hcmdzP1tdLmNvbmNhdChzb3VyY2UpLmNvbmNhdChhcmdzKTpbc291cmNlXTt0cnl7KGZ1bmN0aW9uKHNvdXJjZSl7ZnVuY3Rpb24gcGlUcmFja2VyKCl7d2luZG93LnBpPXt0cmFja2VyOnt2aXNpdG9yX2lkOiIiLHZpc2l0b3JfaWRfc2lnbjoiIixwaV9vcHRfaW46IiIsY2FtcGFpZ25faWQ6IiJ9fSx3aW5kb3cucGlTY3JpcHROdW0rPTF9d2luZG93LnBpVmVyc2lvbj0iMS4wLjIiLHdpbmRvdy5waVNjcmlwdE51bT0wLHdpbmRvdy5waVNjcmlwdE9iaj1bXSx3aW5kb3cuY2hlY2tOYW1lc3BhY2U9bm9vcEZ1bmMsd2luZG93LmdldFBhcmRvdFVybD1ub29wU3RyLHdpbmRvdy5waUdldFBhcmFtZXRlcj1ub29wTnVsbCx3aW5kb3cucGlTZXRDb29raWU9bm9vcEZ1bmMsd2luZG93LnBpR2V0Q29va2llPW5vb3BTdHIsd2luZG93LnBpUmVzcG9uc2U9bm9vcEZ1bmMsd2luZG93LnBpVHJhY2tlcj1waVRyYWNrZXIscGlUcmFja2VyKCksZnVuY3Rpb24oc291cmNlLG1lc3NhZ2Upe2lmKCEwPT09c291cmNlLnZlcmJvc2Upe3RyeXt2YXIgbG9nPWNvbnNvbGUubG9nLmJpbmQoY29uc29sZSksdHJhY2U9Y29uc29sZS50cmFjZS5iaW5kKGNvbnNvbGUpLHByZWZpeD1zb3VyY2UucnVsZVRleHR8fCIiO2lmKHNvdXJjZS5kb21haW5OYW1lKXt2YXIgcnVsZVN0YXJ0SW5kZXgsQUdfU0NSSVBUTEVUX01BUktFUj0iIyUjLy8iLFVCT19TQ1JJUFRMRVRfTUFSS0VSPSIjIytqcyI7c291cmNlLnJ1bGVUZXh0LmluZGV4T2YoQUdfU0NSSVBUTEVUX01BUktFUik+LTE/cnVsZVN0YXJ0SW5kZXg9c291cmNlLnJ1bGVUZXh0LmluZGV4T2YoQUdfU0NSSVBUTEVUX01BUktFUik6c291cmNlLnJ1bGVUZXh0LmluZGV4T2YoVUJPX1NDUklQVExFVF9NQVJLRVIpPi0xJiYocnVsZVN0YXJ0SW5kZXg9c291cmNlLnJ1bGVUZXh0LmluZGV4T2YoVUJPX1NDUklQVExFVF9NQVJLRVIpKTt2YXIgcnVsZVBhcnQ9c291cmNlLnJ1bGVUZXh0LnNsaWNlKHJ1bGVTdGFydEluZGV4KTtwcmVmaXg9IiIuY29uY2F0KHNvdXJjZS5kb21haW5OYW1lKS5jb25jYXQocnVsZVBhcnQpfXZhciBMT0dfTUFSS0VSPSJsb2c6ICI7bWVzc2FnZSYmKC0xPT09bWVzc2FnZS5pbmRleE9mKExPR19NQVJLRVIpP2xvZygiIi5jb25jYXQocHJlZml4LCIgbWVzc2FnZTpcbiIpLmNvbmNhdChtZXNzYWdlKSk6bG9nKG1lc3NhZ2Uuc2xpY2UoTE9HX01BUktFUi5sZW5ndGgpKSksbG9nKCIiLmNvbmNhdChwcmVmaXgsIiB0cmFjZSBzdGFydCIpKSx0cmFjZSYmdHJhY2UoKSxsb2coIiIuY29uY2F0KHByZWZpeCwiIHRyYWNlIGVuZCIpKX1jYXRjaChlKXt9ImZ1bmN0aW9uIj09dHlwZW9mIHdpbmRvdy5fX2RlYnVnJiZ3aW5kb3cuX19kZWJ1Zyhzb3VyY2UpfX0oc291cmNlKX0pLmFwcGx5KHRoaXMsdXBkYXRlZEFyZ3MpfWNhdGNoKGUpe2NvbnNvbGUubG9nKGUpfX0oe25hbWU6InBhcmRvdC0xLjAiLGFyZ3M6W119LFtdKTs="
+ "content": "IWZ1bmN0aW9uKHNvdXJjZSxhcmdzKXtmdW5jdGlvbiBub29wRnVuYygpe31mdW5jdGlvbiBub29wU3RyKCl7cmV0dXJuIiJ9ZnVuY3Rpb24gbm9vcE51bGwoKXtyZXR1cm4gbnVsbH1jb25zdCB1cGRhdGVkQXJncz1hcmdzP1tdLmNvbmNhdChzb3VyY2UpLmNvbmNhdChhcmdzKTpbc291cmNlXTt0cnl7KGZ1bmN0aW9uKHNvdXJjZSl7ZnVuY3Rpb24gcGlUcmFja2VyKCl7d2luZG93LnBpPXt0cmFja2VyOnt2aXNpdG9yX2lkOiIiLHZpc2l0b3JfaWRfc2lnbjoiIixwaV9vcHRfaW46IiIsY2FtcGFpZ25faWQ6IiJ9fSx3aW5kb3cucGlTY3JpcHROdW0rPTF9d2luZG93LnBpVmVyc2lvbj0iMS4wLjIiLHdpbmRvdy5waVNjcmlwdE51bT0wLHdpbmRvdy5waVNjcmlwdE9iaj1bXSx3aW5kb3cuY2hlY2tOYW1lc3BhY2U9bm9vcEZ1bmMsd2luZG93LmdldFBhcmRvdFVybD1ub29wU3RyLHdpbmRvdy5waUdldFBhcmFtZXRlcj1ub29wTnVsbCx3aW5kb3cucGlTZXRDb29raWU9bm9vcEZ1bmMsd2luZG93LnBpR2V0Q29va2llPW5vb3BTdHIsd2luZG93LnBpUmVzcG9uc2U9bm9vcEZ1bmMsd2luZG93LnBpVHJhY2tlcj1waVRyYWNrZXIscGlUcmFja2VyKCksZnVuY3Rpb24oc291cmNlKXtpZighMD09PXNvdXJjZS52ZXJib3NlKXt0cnl7dmFyIGxvZz1jb25zb2xlLmxvZy5iaW5kKGNvbnNvbGUpLHRyYWNlPWNvbnNvbGUudHJhY2UuYmluZChjb25zb2xlKSxwcmVmaXg9c291cmNlLnJ1bGVUZXh0fHwiIjtpZihzb3VyY2UuZG9tYWluTmFtZSl7dmFyIHJ1bGVTdGFydEluZGV4LEFHX1NDUklQVExFVF9NQVJLRVI9IiMlIy8vIixVQk9fU0NSSVBUTEVUX01BUktFUj0iIyMranMiO3NvdXJjZS5ydWxlVGV4dC5pbmRleE9mKEFHX1NDUklQVExFVF9NQVJLRVIpPi0xP3J1bGVTdGFydEluZGV4PXNvdXJjZS5ydWxlVGV4dC5pbmRleE9mKEFHX1NDUklQVExFVF9NQVJLRVIpOnNvdXJjZS5ydWxlVGV4dC5pbmRleE9mKFVCT19TQ1JJUFRMRVRfTUFSS0VSKT4tMSYmKHJ1bGVTdGFydEluZGV4PXNvdXJjZS5ydWxlVGV4dC5pbmRleE9mKFVCT19TQ1JJUFRMRVRfTUFSS0VSKSk7dmFyIHJ1bGVQYXJ0PXNvdXJjZS5ydWxlVGV4dC5zbGljZShydWxlU3RhcnRJbmRleCk7cHJlZml4PSIiLmNvbmNhdChzb3VyY2UuZG9tYWluTmFtZSkuY29uY2F0KHJ1bGVQYXJ0KX1sb2coIiIuY29uY2F0KHByZWZpeCwiIHRyYWNlIHN0YXJ0IikpLHRyYWNlJiZ0cmFjZSgpLGxvZygiIi5jb25jYXQocHJlZml4LCIgdHJhY2UgZW5kIikpfWNhdGNoKGUpe30iZnVuY3Rpb24iPT10eXBlb2Ygd2luZG93Ll9fZGVidWcmJndpbmRvdy5fX2RlYnVnKHNvdXJjZSl9fShzb3VyY2UpfSkuYXBwbHkodGhpcyx1cGRhdGVkQXJncyl9Y2F0Y2goZSl7Y29uc29sZS5sb2coZSl9fSh7bmFtZToicGFyZG90LTEuMCIsYXJnczpbXX0sW10pOw=="
},
{
"title": "prebid-ads",
@@ -308,14 +311,14 @@
],
"isBlocking": false,
"contentType": "application/javascript;base64",
- "content": "IWZ1bmN0aW9uKHNvdXJjZSxhcmdzKXtjb25zdCB1cGRhdGVkQXJncz1hcmdzP1tdLmNvbmNhdChzb3VyY2UpLmNvbmNhdChhcmdzKTpbc291cmNlXTt0cnl7KGZ1bmN0aW9uKHNvdXJjZSl7d2luZG93LmNhblJ1bkFkcz0hMCx3aW5kb3cuaXNBZEJsb2NrQWN0aXZlPSExLGZ1bmN0aW9uKHNvdXJjZSxtZXNzYWdlKXtpZighMD09PXNvdXJjZS52ZXJib3NlKXt0cnl7dmFyIGxvZz1jb25zb2xlLmxvZy5iaW5kKGNvbnNvbGUpLHRyYWNlPWNvbnNvbGUudHJhY2UuYmluZChjb25zb2xlKSxwcmVmaXg9c291cmNlLnJ1bGVUZXh0fHwiIjtpZihzb3VyY2UuZG9tYWluTmFtZSl7dmFyIHJ1bGVTdGFydEluZGV4LEFHX1NDUklQVExFVF9NQVJLRVI9IiMlIy8vIixVQk9fU0NSSVBUTEVUX01BUktFUj0iIyMranMiO3NvdXJjZS5ydWxlVGV4dC5pbmRleE9mKEFHX1NDUklQVExFVF9NQVJLRVIpPi0xP3J1bGVTdGFydEluZGV4PXNvdXJjZS5ydWxlVGV4dC5pbmRleE9mKEFHX1NDUklQVExFVF9NQVJLRVIpOnNvdXJjZS5ydWxlVGV4dC5pbmRleE9mKFVCT19TQ1JJUFRMRVRfTUFSS0VSKT4tMSYmKHJ1bGVTdGFydEluZGV4PXNvdXJjZS5ydWxlVGV4dC5pbmRleE9mKFVCT19TQ1JJUFRMRVRfTUFSS0VSKSk7dmFyIHJ1bGVQYXJ0PXNvdXJjZS5ydWxlVGV4dC5zbGljZShydWxlU3RhcnRJbmRleCk7cHJlZml4PSIiLmNvbmNhdChzb3VyY2UuZG9tYWluTmFtZSkuY29uY2F0KHJ1bGVQYXJ0KX12YXIgTE9HX01BUktFUj0ibG9nOiAiO21lc3NhZ2UmJigtMT09PW1lc3NhZ2UuaW5kZXhPZihMT0dfTUFSS0VSKT9sb2coIiIuY29uY2F0KHByZWZpeCwiIG1lc3NhZ2U6XG4iKS5jb25jYXQobWVzc2FnZSkpOmxvZyhtZXNzYWdlLnNsaWNlKExPR19NQVJLRVIubGVuZ3RoKSkpLGxvZygiIi5jb25jYXQocHJlZml4LCIgdHJhY2Ugc3RhcnQiKSksdHJhY2UmJnRyYWNlKCksbG9nKCIiLmNvbmNhdChwcmVmaXgsIiB0cmFjZSBlbmQiKSl9Y2F0Y2goZSl7fSJmdW5jdGlvbiI9PXR5cGVvZiB3aW5kb3cuX19kZWJ1ZyYmd2luZG93Ll9fZGVidWcoc291cmNlKX19KHNvdXJjZSl9KS5hcHBseSh0aGlzLHVwZGF0ZWRBcmdzKX1jYXRjaChlKXtjb25zb2xlLmxvZyhlKX19KHtuYW1lOiJwcmViaWQtYWRzIixhcmdzOltdfSxbXSk7"
+ "content": "IWZ1bmN0aW9uKHNvdXJjZSxhcmdzKXtjb25zdCB1cGRhdGVkQXJncz1hcmdzP1tdLmNvbmNhdChzb3VyY2UpLmNvbmNhdChhcmdzKTpbc291cmNlXTt0cnl7KGZ1bmN0aW9uKHNvdXJjZSl7d2luZG93LmNhblJ1bkFkcz0hMCx3aW5kb3cuaXNBZEJsb2NrQWN0aXZlPSExLGZ1bmN0aW9uKHNvdXJjZSl7aWYoITA9PT1zb3VyY2UudmVyYm9zZSl7dHJ5e3ZhciBsb2c9Y29uc29sZS5sb2cuYmluZChjb25zb2xlKSx0cmFjZT1jb25zb2xlLnRyYWNlLmJpbmQoY29uc29sZSkscHJlZml4PXNvdXJjZS5ydWxlVGV4dHx8IiI7aWYoc291cmNlLmRvbWFpbk5hbWUpe3ZhciBydWxlU3RhcnRJbmRleCxBR19TQ1JJUFRMRVRfTUFSS0VSPSIjJSMvLyIsVUJPX1NDUklQVExFVF9NQVJLRVI9IiMjK2pzIjtzb3VyY2UucnVsZVRleHQuaW5kZXhPZihBR19TQ1JJUFRMRVRfTUFSS0VSKT4tMT9ydWxlU3RhcnRJbmRleD1zb3VyY2UucnVsZVRleHQuaW5kZXhPZihBR19TQ1JJUFRMRVRfTUFSS0VSKTpzb3VyY2UucnVsZVRleHQuaW5kZXhPZihVQk9fU0NSSVBUTEVUX01BUktFUik+LTEmJihydWxlU3RhcnRJbmRleD1zb3VyY2UucnVsZVRleHQuaW5kZXhPZihVQk9fU0NSSVBUTEVUX01BUktFUikpO3ZhciBydWxlUGFydD1zb3VyY2UucnVsZVRleHQuc2xpY2UocnVsZVN0YXJ0SW5kZXgpO3ByZWZpeD0iIi5jb25jYXQoc291cmNlLmRvbWFpbk5hbWUpLmNvbmNhdChydWxlUGFydCl9bG9nKCIiLmNvbmNhdChwcmVmaXgsIiB0cmFjZSBzdGFydCIpKSx0cmFjZSYmdHJhY2UoKSxsb2coIiIuY29uY2F0KHByZWZpeCwiIHRyYWNlIGVuZCIpKX1jYXRjaChlKXt9ImZ1bmN0aW9uIj09dHlwZW9mIHdpbmRvdy5fX2RlYnVnJiZ3aW5kb3cuX19kZWJ1Zyhzb3VyY2UpfX0oc291cmNlKX0pLmFwcGx5KHRoaXMsdXBkYXRlZEFyZ3MpfWNhdGNoKGUpe2NvbnNvbGUubG9nKGUpfX0oe25hbWU6InByZWJpZC1hZHMiLGFyZ3M6W119LFtdKTs="
},
{
"title": "prebid",
"aliases": [],
"isBlocking": false,
"contentType": "application/javascript;base64",
- "content": "IWZ1bmN0aW9uKHNvdXJjZSxhcmdzKXtmdW5jdGlvbiBub29wU3RyKCl7cmV0dXJuIiJ9ZnVuY3Rpb24gbm9vcEFycmF5KCl7cmV0dXJuW119Y29uc3QgdXBkYXRlZEFyZ3M9YXJncz9bXS5jb25jYXQoc291cmNlKS5jb25jYXQoYXJncyk6W3NvdXJjZV07dHJ5eyhmdW5jdGlvbihzb3VyY2Upe3ZhciBwdXNoRnVuY3Rpb249ZnVuY3Rpb24oYXJnKXtpZigiZnVuY3Rpb24iPT10eXBlb2YgYXJnKXRyeXthcmcuY2FsbCgpfWNhdGNoKGV4KXt9fSxwYmpzV3JhcHBlcj17YWRkQWRVbml0czpmdW5jdGlvbigpe30sYWRTZXJ2ZXJzOntkZnA6e2J1aWxkVmlkZW9Vcmw6bm9vcFN0cn19LGFkVW5pdHM6W10sYWxpYXNCaWRkZXI6ZnVuY3Rpb24oKXt9LGNtZDpbXSxlbmFibGVBbmFseXRpY3M6ZnVuY3Rpb24oKXt9LGdldEhpZ2hlc3RDcG1CaWRzOm5vb3BBcnJheSxsaWJMb2FkZWQ6ITAscXVlOltdLHJlcXVlc3RCaWRzOmZ1bmN0aW9uKGFyZyl7aWYoYXJnIGluc3RhbmNlb2YgT2JqZWN0JiZhcmcuYmlkc0JhY2tIYW5kbGVyKXRyeXthcmcuYmlkc0JhY2tIYW5kbGVyLmNhbGwoKX1jYXRjaChleCl7fX0scmVtb3ZlQWRVbml0OmZ1bmN0aW9uKCl7fSxzZXRCaWRkZXJDb25maWc6ZnVuY3Rpb24oKXt9LHNldENvbmZpZzpmdW5jdGlvbigpe30sc2V0VGFyZ2V0aW5nRm9yR1BUQXN5bmM6ZnVuY3Rpb24oKXt9fTtwYmpzV3JhcHBlci5jbWQucHVzaD1wdXNoRnVuY3Rpb24scGJqc1dyYXBwZXIucXVlLnB1c2g9cHVzaEZ1bmN0aW9uLHdpbmRvdy5wYmpzPXBianNXcmFwcGVyLGZ1bmN0aW9uKHNvdXJjZSxtZXNzYWdlKXtpZighMD09PXNvdXJjZS52ZXJib3NlKXt0cnl7dmFyIGxvZz1jb25zb2xlLmxvZy5iaW5kKGNvbnNvbGUpLHRyYWNlPWNvbnNvbGUudHJhY2UuYmluZChjb25zb2xlKSxwcmVmaXg9c291cmNlLnJ1bGVUZXh0fHwiIjtpZihzb3VyY2UuZG9tYWluTmFtZSl7dmFyIHJ1bGVTdGFydEluZGV4LEFHX1NDUklQVExFVF9NQVJLRVI9IiMlIy8vIixVQk9fU0NSSVBUTEVUX01BUktFUj0iIyMranMiO3NvdXJjZS5ydWxlVGV4dC5pbmRleE9mKEFHX1NDUklQVExFVF9NQVJLRVIpPi0xP3J1bGVTdGFydEluZGV4PXNvdXJjZS5ydWxlVGV4dC5pbmRleE9mKEFHX1NDUklQVExFVF9NQVJLRVIpOnNvdXJjZS5ydWxlVGV4dC5pbmRleE9mKFVCT19TQ1JJUFRMRVRfTUFSS0VSKT4tMSYmKHJ1bGVTdGFydEluZGV4PXNvdXJjZS5ydWxlVGV4dC5pbmRleE9mKFVCT19TQ1JJUFRMRVRfTUFSS0VSKSk7dmFyIHJ1bGVQYXJ0PXNvdXJjZS5ydWxlVGV4dC5zbGljZShydWxlU3RhcnRJbmRleCk7cHJlZml4PSIiLmNvbmNhdChzb3VyY2UuZG9tYWluTmFtZSkuY29uY2F0KHJ1bGVQYXJ0KX12YXIgTE9HX01BUktFUj0ibG9nOiAiO21lc3NhZ2UmJigtMT09PW1lc3NhZ2UuaW5kZXhPZihMT0dfTUFSS0VSKT9sb2coIiIuY29uY2F0KHByZWZpeCwiIG1lc3NhZ2U6XG4iKS5jb25jYXQobWVzc2FnZSkpOmxvZyhtZXNzYWdlLnNsaWNlKExPR19NQVJLRVIubGVuZ3RoKSkpLGxvZygiIi5jb25jYXQocHJlZml4LCIgdHJhY2Ugc3RhcnQiKSksdHJhY2UmJnRyYWNlKCksbG9nKCIiLmNvbmNhdChwcmVmaXgsIiB0cmFjZSBlbmQiKSl9Y2F0Y2goZSl7fSJmdW5jdGlvbiI9PXR5cGVvZiB3aW5kb3cuX19kZWJ1ZyYmd2luZG93Ll9fZGVidWcoc291cmNlKX19KHNvdXJjZSl9KS5hcHBseSh0aGlzLHVwZGF0ZWRBcmdzKX1jYXRjaChlKXtjb25zb2xlLmxvZyhlKX19KHtuYW1lOiJwcmViaWQiLGFyZ3M6W119LFtdKTs="
+ "content": "IWZ1bmN0aW9uKHNvdXJjZSxhcmdzKXtmdW5jdGlvbiBub29wU3RyKCl7cmV0dXJuIiJ9ZnVuY3Rpb24gbm9vcEFycmF5KCl7cmV0dXJuW119Y29uc3QgdXBkYXRlZEFyZ3M9YXJncz9bXS5jb25jYXQoc291cmNlKS5jb25jYXQoYXJncyk6W3NvdXJjZV07dHJ5eyhmdW5jdGlvbihzb3VyY2Upe3ZhciBwdXNoRnVuY3Rpb249ZnVuY3Rpb24oYXJnKXtpZigiZnVuY3Rpb24iPT10eXBlb2YgYXJnKXRyeXthcmcuY2FsbCgpfWNhdGNoKGV4KXt9fSxwYmpzV3JhcHBlcj17YWRkQWRVbml0czpmdW5jdGlvbigpe30sYWRTZXJ2ZXJzOntkZnA6e2J1aWxkVmlkZW9Vcmw6bm9vcFN0cn19LGFkVW5pdHM6W10sYWxpYXNCaWRkZXI6ZnVuY3Rpb24oKXt9LGNtZDpbXSxlbmFibGVBbmFseXRpY3M6ZnVuY3Rpb24oKXt9LGdldEhpZ2hlc3RDcG1CaWRzOm5vb3BBcnJheSxsaWJMb2FkZWQ6ITAscXVlOltdLHJlcXVlc3RCaWRzOmZ1bmN0aW9uKGFyZyl7aWYoYXJnIGluc3RhbmNlb2YgT2JqZWN0JiZhcmcuYmlkc0JhY2tIYW5kbGVyKXRyeXthcmcuYmlkc0JhY2tIYW5kbGVyLmNhbGwoKX1jYXRjaChleCl7fX0scmVtb3ZlQWRVbml0OmZ1bmN0aW9uKCl7fSxzZXRCaWRkZXJDb25maWc6ZnVuY3Rpb24oKXt9LHNldENvbmZpZzpmdW5jdGlvbigpe30sc2V0VGFyZ2V0aW5nRm9yR1BUQXN5bmM6ZnVuY3Rpb24oKXt9fTtwYmpzV3JhcHBlci5jbWQucHVzaD1wdXNoRnVuY3Rpb24scGJqc1dyYXBwZXIucXVlLnB1c2g9cHVzaEZ1bmN0aW9uLHdpbmRvdy5wYmpzPXBianNXcmFwcGVyLGZ1bmN0aW9uKHNvdXJjZSl7aWYoITA9PT1zb3VyY2UudmVyYm9zZSl7dHJ5e3ZhciBsb2c9Y29uc29sZS5sb2cuYmluZChjb25zb2xlKSx0cmFjZT1jb25zb2xlLnRyYWNlLmJpbmQoY29uc29sZSkscHJlZml4PXNvdXJjZS5ydWxlVGV4dHx8IiI7aWYoc291cmNlLmRvbWFpbk5hbWUpe3ZhciBydWxlU3RhcnRJbmRleCxBR19TQ1JJUFRMRVRfTUFSS0VSPSIjJSMvLyIsVUJPX1NDUklQVExFVF9NQVJLRVI9IiMjK2pzIjtzb3VyY2UucnVsZVRleHQuaW5kZXhPZihBR19TQ1JJUFRMRVRfTUFSS0VSKT4tMT9ydWxlU3RhcnRJbmRleD1zb3VyY2UucnVsZVRleHQuaW5kZXhPZihBR19TQ1JJUFRMRVRfTUFSS0VSKTpzb3VyY2UucnVsZVRleHQuaW5kZXhPZihVQk9fU0NSSVBUTEVUX01BUktFUik+LTEmJihydWxlU3RhcnRJbmRleD1zb3VyY2UucnVsZVRleHQuaW5kZXhPZihVQk9fU0NSSVBUTEVUX01BUktFUikpO3ZhciBydWxlUGFydD1zb3VyY2UucnVsZVRleHQuc2xpY2UocnVsZVN0YXJ0SW5kZXgpO3ByZWZpeD0iIi5jb25jYXQoc291cmNlLmRvbWFpbk5hbWUpLmNvbmNhdChydWxlUGFydCl9bG9nKCIiLmNvbmNhdChwcmVmaXgsIiB0cmFjZSBzdGFydCIpKSx0cmFjZSYmdHJhY2UoKSxsb2coIiIuY29uY2F0KHByZWZpeCwiIHRyYWNlIGVuZCIpKX1jYXRjaChlKXt9ImZ1bmN0aW9uIj09dHlwZW9mIHdpbmRvdy5fX2RlYnVnJiZ3aW5kb3cuX19kZWJ1Zyhzb3VyY2UpfX0oc291cmNlKX0pLmFwcGx5KHRoaXMsdXBkYXRlZEFyZ3MpfWNhdGNoKGUpe2NvbnNvbGUubG9nKGUpfX0oe25hbWU6InByZWJpZCIsYXJnczpbXX0sW10pOw=="
},
{
"title": "prevent-bab",
@@ -329,7 +332,7 @@
],
"isBlocking": false,
"contentType": "application/javascript;base64",
- "content": "IWZ1bmN0aW9uKHNvdXJjZSxhcmdzKXtmdW5jdGlvbiBoaXQoc291cmNlLG1lc3NhZ2Upe2lmKCEwPT09c291cmNlLnZlcmJvc2Upe3RyeXt2YXIgbG9nPWNvbnNvbGUubG9nLmJpbmQoY29uc29sZSksdHJhY2U9Y29uc29sZS50cmFjZS5iaW5kKGNvbnNvbGUpLHByZWZpeD1zb3VyY2UucnVsZVRleHR8fCIiO2lmKHNvdXJjZS5kb21haW5OYW1lKXt2YXIgcnVsZVN0YXJ0SW5kZXg7c291cmNlLnJ1bGVUZXh0LmluZGV4T2YoIiMlIy8vIik+LTE/cnVsZVN0YXJ0SW5kZXg9c291cmNlLnJ1bGVUZXh0LmluZGV4T2YoIiMlIy8vIik6c291cmNlLnJ1bGVUZXh0LmluZGV4T2YoIiMjK2pzIik+LTEmJihydWxlU3RhcnRJbmRleD1zb3VyY2UucnVsZVRleHQuaW5kZXhPZigiIyMranMiKSk7dmFyIHJ1bGVQYXJ0PXNvdXJjZS5ydWxlVGV4dC5zbGljZShydWxlU3RhcnRJbmRleCk7cHJlZml4PSIiLmNvbmNhdChzb3VyY2UuZG9tYWluTmFtZSkuY29uY2F0KHJ1bGVQYXJ0KX1tZXNzYWdlJiYoLTE9PT1tZXNzYWdlLmluZGV4T2YoImxvZzogIik/bG9nKCIiLmNvbmNhdChwcmVmaXgsIiBtZXNzYWdlOlxuIikuY29uY2F0KG1lc3NhZ2UpKTpsb2cobWVzc2FnZS5zbGljZSgibG9nOiAiLmxlbmd0aCkpKSxsb2coIiIuY29uY2F0KHByZWZpeCwiIHRyYWNlIHN0YXJ0IikpLHRyYWNlJiZ0cmFjZSgpLGxvZygiIi5jb25jYXQocHJlZml4LCIgdHJhY2UgZW5kIikpfWNhdGNoKGUpe30iZnVuY3Rpb24iPT10eXBlb2Ygd2luZG93Ll9fZGVidWcmJndpbmRvdy5fX2RlYnVnKHNvdXJjZSl9fWNvbnN0IHVwZGF0ZWRBcmdzPWFyZ3M/W10uY29uY2F0KHNvdXJjZSkuY29uY2F0KGFyZ3MpOltzb3VyY2VdO3RyeXsoZnVuY3Rpb24oc291cmNlKXt2YXIgbmF0aXZlU2V0VGltZW91dD13aW5kb3cuc2V0VGltZW91dCxiYWJSZWdleD0vXC5iYWJfZWxlbWVudGlkLiQvO3dpbmRvdy5zZXRUaW1lb3V0PWZ1bmN0aW9uKGNhbGxiYWNrKXtpZigic3RyaW5nIiE9dHlwZW9mIGNhbGxiYWNrfHwhYmFiUmVnZXgudGVzdChjYWxsYmFjaykpe2Zvcih2YXIgX2xlbj1hcmd1bWVudHMubGVuZ3RoLGFyZ3M9bmV3IEFycmF5KF9sZW4+MT9fbGVuLTE6MCksX2tleT0xO19rZXk8X2xlbjtfa2V5KyspYXJnc1tfa2V5LTFdPWFyZ3VtZW50c1tfa2V5XTtyZXR1cm4gbmF0aXZlU2V0VGltZW91dC5hcHBseSh3aW5kb3csW2NhbGxiYWNrXS5jb25jYXQoYXJncykpfWhpdChzb3VyY2UpfTt2YXIgc2lnbmF0dXJlcz1bWyJibG9ja2FkYmxvY2siXSxbImJhYmFzYm0iXSxbL2dldEl0ZW1cKCdiYWJuJ1wpL10sWyJnZXRFbGVtZW50QnlJZCIsIlN0cmluZy5mcm9tQ2hhckNvZGUiLCJBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6MDEyMzQ1Njc4OSIsImNoYXJBdCIsIkRPTUNvbnRlbnRMb2FkZWQiLCJBZEJsb2NrIiwiYWRkRXZlbnRMaXN0ZW5lciIsImRvU2Nyb2xsIiwiZnJvbUNoYXJDb2RlIiwiPDwyfHI+PjQiLCJzZXNzaW9uU3RvcmFnZSIsImNsaWVudFdpZHRoIiwibG9jYWxTdG9yYWdlIiwiTWF0aCIsInJhbmRvbSJdXSxuYXRpdmVFdmFsPXdpbmRvdy5ldmFsO3dpbmRvdy5ldmFsPWZ1bmN0aW9uKHN0cil7aWYoIWZ1bmN0aW9uKHN0cil7aWYoInN0cmluZyIhPXR5cGVvZiBzdHIpcmV0dXJuITE7Zm9yKHZhciBpPTA7aTxzaWduYXR1cmVzLmxlbmd0aDtpKz0xKXtmb3IodmFyIHRva2Vucz1zaWduYXR1cmVzW2ldLG1hdGNoPTAsaj0wO2o8dG9rZW5zLmxlbmd0aDtqKz0xKXt2YXIgdG9rZW49dG9rZW5zW2pdOyh0b2tlbiBpbnN0YW5jZW9mIFJlZ0V4cD90b2tlbi50ZXN0KHN0cik6c3RyLmluZGV4T2YodG9rZW4pPi0xKSYmKG1hdGNoKz0xKX1pZihtYXRjaC90b2tlbnMubGVuZ3RoPj0uOClyZXR1cm4hMH1yZXR1cm4hMX0oc3RyKSlyZXR1cm4gbmF0aXZlRXZhbChzdHIpO2hpdChzb3VyY2UpO3ZhciBib2R5RWw9ZG9jdW1lbnQuYm9keTtib2R5RWwmJmJvZHlFbC5zdHlsZS5yZW1vdmVQcm9wZXJ0eSgidmlzaWJpbGl0eSIpO3ZhciBlbD1kb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiYmFiYXNibXNneCIpO2VsJiZlbC5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKGVsKX0uYmluZCh3aW5kb3cpfSkuYXBwbHkodGhpcyx1cGRhdGVkQXJncyl9Y2F0Y2goZSl7Y29uc29sZS5sb2coZSl9fSh7bmFtZToicHJldmVudC1iYWIiLGFyZ3M6W119LFtdKTs="
+ "content": "IWZ1bmN0aW9uKHNvdXJjZSxhcmdzKXtmdW5jdGlvbiBoaXQoc291cmNlKXtpZighMD09PXNvdXJjZS52ZXJib3NlKXt0cnl7dmFyIGxvZz1jb25zb2xlLmxvZy5iaW5kKGNvbnNvbGUpLHRyYWNlPWNvbnNvbGUudHJhY2UuYmluZChjb25zb2xlKSxwcmVmaXg9c291cmNlLnJ1bGVUZXh0fHwiIjtpZihzb3VyY2UuZG9tYWluTmFtZSl7dmFyIHJ1bGVTdGFydEluZGV4O3NvdXJjZS5ydWxlVGV4dC5pbmRleE9mKCIjJSMvLyIpPi0xP3J1bGVTdGFydEluZGV4PXNvdXJjZS5ydWxlVGV4dC5pbmRleE9mKCIjJSMvLyIpOnNvdXJjZS5ydWxlVGV4dC5pbmRleE9mKCIjIytqcyIpPi0xJiYocnVsZVN0YXJ0SW5kZXg9c291cmNlLnJ1bGVUZXh0LmluZGV4T2YoIiMjK2pzIikpO3ZhciBydWxlUGFydD1zb3VyY2UucnVsZVRleHQuc2xpY2UocnVsZVN0YXJ0SW5kZXgpO3ByZWZpeD0iIi5jb25jYXQoc291cmNlLmRvbWFpbk5hbWUpLmNvbmNhdChydWxlUGFydCl9bG9nKCIiLmNvbmNhdChwcmVmaXgsIiB0cmFjZSBzdGFydCIpKSx0cmFjZSYmdHJhY2UoKSxsb2coIiIuY29uY2F0KHByZWZpeCwiIHRyYWNlIGVuZCIpKX1jYXRjaChlKXt9ImZ1bmN0aW9uIj09dHlwZW9mIHdpbmRvdy5fX2RlYnVnJiZ3aW5kb3cuX19kZWJ1Zyhzb3VyY2UpfX1jb25zdCB1cGRhdGVkQXJncz1hcmdzP1tdLmNvbmNhdChzb3VyY2UpLmNvbmNhdChhcmdzKTpbc291cmNlXTt0cnl7KGZ1bmN0aW9uKHNvdXJjZSl7dmFyIG5hdGl2ZVNldFRpbWVvdXQ9d2luZG93LnNldFRpbWVvdXQsYmFiUmVnZXg9L1wuYmFiX2VsZW1lbnRpZC4kLzt3aW5kb3cuc2V0VGltZW91dD1mdW5jdGlvbihjYWxsYmFjayl7aWYoInN0cmluZyIhPXR5cGVvZiBjYWxsYmFja3x8IWJhYlJlZ2V4LnRlc3QoY2FsbGJhY2spKXtmb3IodmFyIF9sZW49YXJndW1lbnRzLmxlbmd0aCxhcmdzPW5ldyBBcnJheShfbGVuPjE/X2xlbi0xOjApLF9rZXk9MTtfa2V5PF9sZW47X2tleSsrKWFyZ3NbX2tleS0xXT1hcmd1bWVudHNbX2tleV07cmV0dXJuIG5hdGl2ZVNldFRpbWVvdXQuYXBwbHkod2luZG93LFtjYWxsYmFja10uY29uY2F0KGFyZ3MpKX1oaXQoc291cmNlKX07dmFyIHNpZ25hdHVyZXM9W1siYmxvY2thZGJsb2NrIl0sWyJiYWJhc2JtIl0sWy9nZXRJdGVtXCgnYmFibidcKS9dLFsiZ2V0RWxlbWVudEJ5SWQiLCJTdHJpbmcuZnJvbUNoYXJDb2RlIiwiQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVphYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ejAxMjM0NTY3ODkiLCJjaGFyQXQiLCJET01Db250ZW50TG9hZGVkIiwiQWRCbG9jayIsImFkZEV2ZW50TGlzdGVuZXIiLCJkb1Njcm9sbCIsImZyb21DaGFyQ29kZSIsIjw8MnxyPj40Iiwic2Vzc2lvblN0b3JhZ2UiLCJjbGllbnRXaWR0aCIsImxvY2FsU3RvcmFnZSIsIk1hdGgiLCJyYW5kb20iXV0sbmF0aXZlRXZhbD13aW5kb3cuZXZhbDt3aW5kb3cuZXZhbD1mdW5jdGlvbihzdHIpe2lmKCFmdW5jdGlvbihzdHIpe2lmKCJzdHJpbmciIT10eXBlb2Ygc3RyKXJldHVybiExO2Zvcih2YXIgaT0wO2k8c2lnbmF0dXJlcy5sZW5ndGg7aSs9MSl7Zm9yKHZhciB0b2tlbnM9c2lnbmF0dXJlc1tpXSxtYXRjaD0wLGo9MDtqPHRva2Vucy5sZW5ndGg7ais9MSl7dmFyIHRva2VuPXRva2Vuc1tqXTsodG9rZW4gaW5zdGFuY2VvZiBSZWdFeHA/dG9rZW4udGVzdChzdHIpOnN0ci5pbmRleE9mKHRva2VuKT4tMSkmJihtYXRjaCs9MSl9aWYobWF0Y2gvdG9rZW5zLmxlbmd0aD49LjgpcmV0dXJuITB9cmV0dXJuITF9KHN0cikpcmV0dXJuIG5hdGl2ZUV2YWwoc3RyKTtoaXQoc291cmNlKTt2YXIgYm9keUVsPWRvY3VtZW50LmJvZHk7Ym9keUVsJiZib2R5RWwuc3R5bGUucmVtb3ZlUHJvcGVydHkoInZpc2liaWxpdHkiKTt2YXIgZWw9ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImJhYmFzYm1zZ3giKTtlbCYmZWwucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChlbCl9LmJpbmQod2luZG93KX0pLmFwcGx5KHRoaXMsdXBkYXRlZEFyZ3MpfWNhdGNoKGUpe2NvbnNvbGUubG9nKGUpfX0oe25hbWU6InByZXZlbnQtYmFiIixhcmdzOltdfSxbXSk7"
},
{
"title": "prevent-bab2",
@@ -338,7 +341,7 @@
],
"isBlocking": false,
"contentType": "application/javascript;base64",
- "content": "IWZ1bmN0aW9uKHNvdXJjZSxhcmdzKXtjb25zdCB1cGRhdGVkQXJncz1hcmdzP1tdLmNvbmNhdChzb3VyY2UpLmNvbmNhdChhcmdzKTpbc291cmNlXTt0cnl7KGZ1bmN0aW9uKHNvdXJjZSl7dmFyIHNjcmlwdD1kb2N1bWVudC5jdXJyZW50U2NyaXB0O2lmKG51bGwhPT1zY3JpcHQpe3ZhciB1cmw9c2NyaXB0LnNyYztpZigic3RyaW5nIj09dHlwZW9mIHVybCl7dmFyIGRvbWFpbnNTdHI9WyJhZGNsaXh4XFwubmV0IiwiYWRuZXRhc2lhXFwuY29tIiwiYWR0cmFja2Vyc1xcLm5ldCIsImJhbm5lcnRyYWNrXFwubmV0Il0uam9pbigifCIpLG1hdGNoU3RyPSJeaHR0cHM/Oi8vW1xcdy1dK1xcLigiLmNvbmNhdChkb21haW5zU3RyLCIpLy4iKTshMSE9PW5ldyBSZWdFeHAobWF0Y2hTdHIpLnRlc3QodXJsKSYmKHdpbmRvdy5uSDdlWHpPc0c9ODU4LGZ1bmN0aW9uKHNvdXJjZSxtZXNzYWdlKXtpZighMD09PXNvdXJjZS52ZXJib3NlKXt0cnl7dmFyIGxvZz1jb25zb2xlLmxvZy5iaW5kKGNvbnNvbGUpLHRyYWNlPWNvbnNvbGUudHJhY2UuYmluZChjb25zb2xlKSxwcmVmaXg9c291cmNlLnJ1bGVUZXh0fHwiIjtpZihzb3VyY2UuZG9tYWluTmFtZSl7dmFyIHJ1bGVTdGFydEluZGV4LEFHX1NDUklQVExFVF9NQVJLRVI9IiMlIy8vIixVQk9fU0NSSVBUTEVUX01BUktFUj0iIyMranMiO3NvdXJjZS5ydWxlVGV4dC5pbmRleE9mKEFHX1NDUklQVExFVF9NQVJLRVIpPi0xP3J1bGVTdGFydEluZGV4PXNvdXJjZS5ydWxlVGV4dC5pbmRleE9mKEFHX1NDUklQVExFVF9NQVJLRVIpOnNvdXJjZS5ydWxlVGV4dC5pbmRleE9mKFVCT19TQ1JJUFRMRVRfTUFSS0VSKT4tMSYmKHJ1bGVTdGFydEluZGV4PXNvdXJjZS5ydWxlVGV4dC5pbmRleE9mKFVCT19TQ1JJUFRMRVRfTUFSS0VSKSk7dmFyIHJ1bGVQYXJ0PXNvdXJjZS5ydWxlVGV4dC5zbGljZShydWxlU3RhcnRJbmRleCk7cHJlZml4PSIiLmNvbmNhdChzb3VyY2UuZG9tYWluTmFtZSkuY29uY2F0KHJ1bGVQYXJ0KX12YXIgTE9HX01BUktFUj0ibG9nOiAiO21lc3NhZ2UmJigtMT09PW1lc3NhZ2UuaW5kZXhPZihMT0dfTUFSS0VSKT9sb2coIiIuY29uY2F0KHByZWZpeCwiIG1lc3NhZ2U6XG4iKS5jb25jYXQobWVzc2FnZSkpOmxvZyhtZXNzYWdlLnNsaWNlKExPR19NQVJLRVIubGVuZ3RoKSkpLGxvZygiIi5jb25jYXQocHJlZml4LCIgdHJhY2Ugc3RhcnQiKSksdHJhY2UmJnRyYWNlKCksbG9nKCIiLmNvbmNhdChwcmVmaXgsIiB0cmFjZSBlbmQiKSl9Y2F0Y2goZSl7fSJmdW5jdGlvbiI9PXR5cGVvZiB3aW5kb3cuX19kZWJ1ZyYmd2luZG93Ll9fZGVidWcoc291cmNlKX19KHNvdXJjZSkpfX19KS5hcHBseSh0aGlzLHVwZGF0ZWRBcmdzKX1jYXRjaChlKXtjb25zb2xlLmxvZyhlKX19KHtuYW1lOiJwcmV2ZW50LWJhYjIiLGFyZ3M6W119LFtdKTs="
+ "content": "IWZ1bmN0aW9uKHNvdXJjZSxhcmdzKXtjb25zdCB1cGRhdGVkQXJncz1hcmdzP1tdLmNvbmNhdChzb3VyY2UpLmNvbmNhdChhcmdzKTpbc291cmNlXTt0cnl7KGZ1bmN0aW9uKHNvdXJjZSl7dmFyIHNjcmlwdD1kb2N1bWVudC5jdXJyZW50U2NyaXB0O2lmKG51bGwhPT1zY3JpcHQpe3ZhciB1cmw9c2NyaXB0LnNyYztpZigic3RyaW5nIj09dHlwZW9mIHVybCl7dmFyIGRvbWFpbnNTdHI9WyJhZGNsaXh4XFwubmV0IiwiYWRuZXRhc2lhXFwuY29tIiwiYWR0cmFja2Vyc1xcLm5ldCIsImJhbm5lcnRyYWNrXFwubmV0Il0uam9pbigifCIpLG1hdGNoU3RyPSJeaHR0cHM/Oi8vW1xcdy1dK1xcLigiLmNvbmNhdChkb21haW5zU3RyLCIpLy4iKTshMSE9PW5ldyBSZWdFeHAobWF0Y2hTdHIpLnRlc3QodXJsKSYmKHdpbmRvdy5uSDdlWHpPc0c9ODU4LGZ1bmN0aW9uKHNvdXJjZSl7aWYoITA9PT1zb3VyY2UudmVyYm9zZSl7dHJ5e3ZhciBsb2c9Y29uc29sZS5sb2cuYmluZChjb25zb2xlKSx0cmFjZT1jb25zb2xlLnRyYWNlLmJpbmQoY29uc29sZSkscHJlZml4PXNvdXJjZS5ydWxlVGV4dHx8IiI7aWYoc291cmNlLmRvbWFpbk5hbWUpe3ZhciBydWxlU3RhcnRJbmRleCxBR19TQ1JJUFRMRVRfTUFSS0VSPSIjJSMvLyIsVUJPX1NDUklQVExFVF9NQVJLRVI9IiMjK2pzIjtzb3VyY2UucnVsZVRleHQuaW5kZXhPZihBR19TQ1JJUFRMRVRfTUFSS0VSKT4tMT9ydWxlU3RhcnRJbmRleD1zb3VyY2UucnVsZVRleHQuaW5kZXhPZihBR19TQ1JJUFRMRVRfTUFSS0VSKTpzb3VyY2UucnVsZVRleHQuaW5kZXhPZihVQk9fU0NSSVBUTEVUX01BUktFUik+LTEmJihydWxlU3RhcnRJbmRleD1zb3VyY2UucnVsZVRleHQuaW5kZXhPZihVQk9fU0NSSVBUTEVUX01BUktFUikpO3ZhciBydWxlUGFydD1zb3VyY2UucnVsZVRleHQuc2xpY2UocnVsZVN0YXJ0SW5kZXgpO3ByZWZpeD0iIi5jb25jYXQoc291cmNlLmRvbWFpbk5hbWUpLmNvbmNhdChydWxlUGFydCl9bG9nKCIiLmNvbmNhdChwcmVmaXgsIiB0cmFjZSBzdGFydCIpKSx0cmFjZSYmdHJhY2UoKSxsb2coIiIuY29uY2F0KHByZWZpeCwiIHRyYWNlIGVuZCIpKX1jYXRjaChlKXt9ImZ1bmN0aW9uIj09dHlwZW9mIHdpbmRvdy5fX2RlYnVnJiZ3aW5kb3cuX19kZWJ1Zyhzb3VyY2UpfX0oc291cmNlKSl9fX0pLmFwcGx5KHRoaXMsdXBkYXRlZEFyZ3MpfWNhdGNoKGUpe2NvbnNvbGUubG9nKGUpfX0oe25hbWU6InByZXZlbnQtYmFiMiIsYXJnczpbXX0sW10pOw=="
},
{
"title": "prevent-fab-3.2.0",
@@ -351,7 +354,7 @@
],
"isBlocking": false,
"contentType": "application/javascript;base64",
- "content": "IWZ1bmN0aW9uKHNvdXJjZSxhcmdzKXtmdW5jdGlvbiBub29wRnVuYygpe31mdW5jdGlvbiBub29wVGhpcygpe3JldHVybiB0aGlzfWNvbnN0IHVwZGF0ZWRBcmdzPWFyZ3M/W10uY29uY2F0KHNvdXJjZSkuY29uY2F0KGFyZ3MpOltzb3VyY2VdO3RyeXsoZnVuY3Rpb24oc291cmNlKXshZnVuY3Rpb24oc291cmNlLG1lc3NhZ2Upe2lmKCEwPT09c291cmNlLnZlcmJvc2Upe3RyeXt2YXIgbG9nPWNvbnNvbGUubG9nLmJpbmQoY29uc29sZSksdHJhY2U9Y29uc29sZS50cmFjZS5iaW5kKGNvbnNvbGUpLHByZWZpeD1zb3VyY2UucnVsZVRleHR8fCIiO2lmKHNvdXJjZS5kb21haW5OYW1lKXt2YXIgcnVsZVN0YXJ0SW5kZXgsQUdfU0NSSVBUTEVUX01BUktFUj0iIyUjLy8iLFVCT19TQ1JJUFRMRVRfTUFSS0VSPSIjIytqcyI7c291cmNlLnJ1bGVUZXh0LmluZGV4T2YoQUdfU0NSSVBUTEVUX01BUktFUik+LTE/cnVsZVN0YXJ0SW5kZXg9c291cmNlLnJ1bGVUZXh0LmluZGV4T2YoQUdfU0NSSVBUTEVUX01BUktFUik6c291cmNlLnJ1bGVUZXh0LmluZGV4T2YoVUJPX1NDUklQVExFVF9NQVJLRVIpPi0xJiYocnVsZVN0YXJ0SW5kZXg9c291cmNlLnJ1bGVUZXh0LmluZGV4T2YoVUJPX1NDUklQVExFVF9NQVJLRVIpKTt2YXIgcnVsZVBhcnQ9c291cmNlLnJ1bGVUZXh0LnNsaWNlKHJ1bGVTdGFydEluZGV4KTtwcmVmaXg9IiIuY29uY2F0KHNvdXJjZS5kb21haW5OYW1lKS5jb25jYXQocnVsZVBhcnQpfXZhciBMT0dfTUFSS0VSPSJsb2c6ICI7bWVzc2FnZSYmKC0xPT09bWVzc2FnZS5pbmRleE9mKExPR19NQVJLRVIpP2xvZygiIi5jb25jYXQocHJlZml4LCIgbWVzc2FnZTpcbiIpLmNvbmNhdChtZXNzYWdlKSk6bG9nKG1lc3NhZ2Uuc2xpY2UoTE9HX01BUktFUi5sZW5ndGgpKSksbG9nKCIiLmNvbmNhdChwcmVmaXgsIiB0cmFjZSBzdGFydCIpKSx0cmFjZSYmdHJhY2UoKSxsb2coIiIuY29uY2F0KHByZWZpeCwiIHRyYWNlIGVuZCIpKX1jYXRjaChlKXt9ImZ1bmN0aW9uIj09dHlwZW9mIHdpbmRvdy5fX2RlYnVnJiZ3aW5kb3cuX19kZWJ1Zyhzb3VyY2UpfX0oc291cmNlKTt2YXIgRmFiPWZ1bmN0aW9uKCl7fTtGYWIucHJvdG90eXBlLmNoZWNrPW5vb3BGdW5jLEZhYi5wcm90b3R5cGUuY2xlYXJFdmVudD1ub29wRnVuYyxGYWIucHJvdG90eXBlLmVtaXRFdmVudD1ub29wRnVuYyxGYWIucHJvdG90eXBlLm9uPWZ1bmN0aW9uKGEsYil7cmV0dXJuIGF8fGIoKSx0aGlzfSxGYWIucHJvdG90eXBlLm9uRGV0ZWN0ZWQ9bm9vcFRoaXMsRmFiLnByb3RvdHlwZS5vbk5vdERldGVjdGVkPWZ1bmN0aW9uKGEpe3JldHVybiBhKCksdGhpc30sRmFiLnByb3RvdHlwZS5zZXRPcHRpb249bm9vcEZ1bmMsRmFiLnByb3RvdHlwZS5vcHRpb25zPXtzZXQ6bm9vcEZ1bmMsZ2V0Om5vb3BGdW5jfTt2YXIgZmFiPW5ldyBGYWIsZ2V0U2V0RmFiPXtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gRmFifSxzZXQ6ZnVuY3Rpb24oKXt9fSxnZXRzZXRmYWI9e2dldDpmdW5jdGlvbigpe3JldHVybiBmYWJ9LHNldDpmdW5jdGlvbigpe319O09iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh3aW5kb3csIkZ1Y2tBZEJsb2NrIik/d2luZG93LkZ1Y2tBZEJsb2NrPUZhYjpPYmplY3QuZGVmaW5lUHJvcGVydHkod2luZG93LCJGdWNrQWRCbG9jayIsZ2V0U2V0RmFiKSxPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwod2luZG93LCJCbG9ja0FkQmxvY2siKT93aW5kb3cuQmxvY2tBZEJsb2NrPUZhYjpPYmplY3QuZGVmaW5lUHJvcGVydHkod2luZG93LCJCbG9ja0FkQmxvY2siLGdldFNldEZhYiksT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHdpbmRvdywiU25pZmZBZEJsb2NrIik/d2luZG93LlNuaWZmQWRCbG9jaz1GYWI6T2JqZWN0LmRlZmluZVByb3BlcnR5KHdpbmRvdywiU25pZmZBZEJsb2NrIixnZXRTZXRGYWIpLE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh3aW5kb3csImZ1Y2tBZEJsb2NrIik/d2luZG93LmZ1Y2tBZEJsb2NrPWZhYjpPYmplY3QuZGVmaW5lUHJvcGVydHkod2luZG93LCJmdWNrQWRCbG9jayIsZ2V0c2V0ZmFiKSxPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwod2luZG93LCJibG9ja0FkQmxvY2siKT93aW5kb3cuYmxvY2tBZEJsb2NrPWZhYjpPYmplY3QuZGVmaW5lUHJvcGVydHkod2luZG93LCJibG9ja0FkQmxvY2siLGdldHNldGZhYiksT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHdpbmRvdywic25pZmZBZEJsb2NrIik/d2luZG93LnNuaWZmQWRCbG9jaz1mYWI6T2JqZWN0LmRlZmluZVByb3BlcnR5KHdpbmRvdywic25pZmZBZEJsb2NrIixnZXRzZXRmYWIpfSkuYXBwbHkodGhpcyx1cGRhdGVkQXJncyl9Y2F0Y2goZSl7Y29uc29sZS5sb2coZSl9fSh7bmFtZToicHJldmVudC1mYWItMy4yLjAiLGFyZ3M6W119LFtdKTs="
+ "content": "IWZ1bmN0aW9uKHNvdXJjZSxhcmdzKXtmdW5jdGlvbiBub29wRnVuYygpe31mdW5jdGlvbiBub29wVGhpcygpe3JldHVybiB0aGlzfWNvbnN0IHVwZGF0ZWRBcmdzPWFyZ3M/W10uY29uY2F0KHNvdXJjZSkuY29uY2F0KGFyZ3MpOltzb3VyY2VdO3RyeXsoZnVuY3Rpb24oc291cmNlKXshZnVuY3Rpb24oc291cmNlKXtpZighMD09PXNvdXJjZS52ZXJib3NlKXt0cnl7dmFyIGxvZz1jb25zb2xlLmxvZy5iaW5kKGNvbnNvbGUpLHRyYWNlPWNvbnNvbGUudHJhY2UuYmluZChjb25zb2xlKSxwcmVmaXg9c291cmNlLnJ1bGVUZXh0fHwiIjtpZihzb3VyY2UuZG9tYWluTmFtZSl7dmFyIHJ1bGVTdGFydEluZGV4LEFHX1NDUklQVExFVF9NQVJLRVI9IiMlIy8vIixVQk9fU0NSSVBUTEVUX01BUktFUj0iIyMranMiO3NvdXJjZS5ydWxlVGV4dC5pbmRleE9mKEFHX1NDUklQVExFVF9NQVJLRVIpPi0xP3J1bGVTdGFydEluZGV4PXNvdXJjZS5ydWxlVGV4dC5pbmRleE9mKEFHX1NDUklQVExFVF9NQVJLRVIpOnNvdXJjZS5ydWxlVGV4dC5pbmRleE9mKFVCT19TQ1JJUFRMRVRfTUFSS0VSKT4tMSYmKHJ1bGVTdGFydEluZGV4PXNvdXJjZS5ydWxlVGV4dC5pbmRleE9mKFVCT19TQ1JJUFRMRVRfTUFSS0VSKSk7dmFyIHJ1bGVQYXJ0PXNvdXJjZS5ydWxlVGV4dC5zbGljZShydWxlU3RhcnRJbmRleCk7cHJlZml4PSIiLmNvbmNhdChzb3VyY2UuZG9tYWluTmFtZSkuY29uY2F0KHJ1bGVQYXJ0KX1sb2coIiIuY29uY2F0KHByZWZpeCwiIHRyYWNlIHN0YXJ0IikpLHRyYWNlJiZ0cmFjZSgpLGxvZygiIi5jb25jYXQocHJlZml4LCIgdHJhY2UgZW5kIikpfWNhdGNoKGUpe30iZnVuY3Rpb24iPT10eXBlb2Ygd2luZG93Ll9fZGVidWcmJndpbmRvdy5fX2RlYnVnKHNvdXJjZSl9fShzb3VyY2UpO3ZhciBGYWI9ZnVuY3Rpb24oKXt9O0ZhYi5wcm90b3R5cGUuY2hlY2s9bm9vcEZ1bmMsRmFiLnByb3RvdHlwZS5jbGVhckV2ZW50PW5vb3BGdW5jLEZhYi5wcm90b3R5cGUuZW1pdEV2ZW50PW5vb3BGdW5jLEZhYi5wcm90b3R5cGUub249ZnVuY3Rpb24oYSxiKXtyZXR1cm4gYXx8YigpLHRoaXN9LEZhYi5wcm90b3R5cGUub25EZXRlY3RlZD1ub29wVGhpcyxGYWIucHJvdG90eXBlLm9uTm90RGV0ZWN0ZWQ9ZnVuY3Rpb24oYSl7cmV0dXJuIGEoKSx0aGlzfSxGYWIucHJvdG90eXBlLnNldE9wdGlvbj1ub29wRnVuYyxGYWIucHJvdG90eXBlLm9wdGlvbnM9e3NldDpub29wRnVuYyxnZXQ6bm9vcEZ1bmN9O3ZhciBmYWI9bmV3IEZhYixnZXRTZXRGYWI9e2dldDpmdW5jdGlvbigpe3JldHVybiBGYWJ9LHNldDpmdW5jdGlvbigpe319LGdldHNldGZhYj17Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGZhYn0sc2V0OmZ1bmN0aW9uKCl7fX07T2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHdpbmRvdywiRnVja0FkQmxvY2siKT93aW5kb3cuRnVja0FkQmxvY2s9RmFiOk9iamVjdC5kZWZpbmVQcm9wZXJ0eSh3aW5kb3csIkZ1Y2tBZEJsb2NrIixnZXRTZXRGYWIpLE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh3aW5kb3csIkJsb2NrQWRCbG9jayIpP3dpbmRvdy5CbG9ja0FkQmxvY2s9RmFiOk9iamVjdC5kZWZpbmVQcm9wZXJ0eSh3aW5kb3csIkJsb2NrQWRCbG9jayIsZ2V0U2V0RmFiKSxPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwod2luZG93LCJTbmlmZkFkQmxvY2siKT93aW5kb3cuU25pZmZBZEJsb2NrPUZhYjpPYmplY3QuZGVmaW5lUHJvcGVydHkod2luZG93LCJTbmlmZkFkQmxvY2siLGdldFNldEZhYiksT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHdpbmRvdywiZnVja0FkQmxvY2siKT93aW5kb3cuZnVja0FkQmxvY2s9ZmFiOk9iamVjdC5kZWZpbmVQcm9wZXJ0eSh3aW5kb3csImZ1Y2tBZEJsb2NrIixnZXRzZXRmYWIpLE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh3aW5kb3csImJsb2NrQWRCbG9jayIpP3dpbmRvdy5ibG9ja0FkQmxvY2s9ZmFiOk9iamVjdC5kZWZpbmVQcm9wZXJ0eSh3aW5kb3csImJsb2NrQWRCbG9jayIsZ2V0c2V0ZmFiKSxPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwod2luZG93LCJzbmlmZkFkQmxvY2siKT93aW5kb3cuc25pZmZBZEJsb2NrPWZhYjpPYmplY3QuZGVmaW5lUHJvcGVydHkod2luZG93LCJzbmlmZkFkQmxvY2siLGdldHNldGZhYil9KS5hcHBseSh0aGlzLHVwZGF0ZWRBcmdzKX1jYXRjaChlKXtjb25zb2xlLmxvZyhlKX19KHtuYW1lOiJwcmV2ZW50LWZhYi0zLjIuMCIsYXJnczpbXX0sW10pOw=="
},
{
"title": "prevent-popads-net",
@@ -362,7 +365,7 @@
],
"isBlocking": false,
"contentType": "application/javascript;base64",
- "content": "IWZ1bmN0aW9uKHNvdXJjZSxhcmdzKXtjb25zdCB1cGRhdGVkQXJncz1hcmdzP1tdLmNvbmNhdChzb3VyY2UpLmNvbmNhdChhcmdzKTpbc291cmNlXTt0cnl7KGZ1bmN0aW9uKHNvdXJjZSl7dmFyIHJpZD1NYXRoLnJhbmRvbSgpLnRvU3RyaW5nKDM2KS5zdWJzdHIoMiw5KSx0aHJvd0Vycm9yPWZ1bmN0aW9uKCl7dGhyb3cgbmV3IFJlZmVyZW5jZUVycm9yKHJpZCl9O2RlbGV0ZSB3aW5kb3cuUG9wQWRzLGRlbGV0ZSB3aW5kb3cucG9wbnMsT2JqZWN0LmRlZmluZVByb3BlcnRpZXMod2luZG93LHtQb3BBZHM6e3NldDp0aHJvd0Vycm9yfSxwb3Buczp7c2V0OnRocm93RXJyb3J9fSksd2luZG93Lm9uZXJyb3I9ZnVuY3Rpb24ocmlkKXt2YXIgbmF0aXZlT25FcnJvcj13aW5kb3cub25lcnJvcjtyZXR1cm4gZnVuY3Rpb24oZXJyb3Ipe2lmKCJzdHJpbmciPT10eXBlb2YgZXJyb3ImJi0xIT09ZXJyb3IuaW5kZXhPZihyaWQpKXJldHVybiEwO2lmKG5hdGl2ZU9uRXJyb3IgaW5zdGFuY2VvZiBGdW5jdGlvbil7Zm9yKHZhciBfbGVuPWFyZ3VtZW50cy5sZW5ndGgsYXJncz1uZXcgQXJyYXkoX2xlbj4xP19sZW4tMTowKSxfa2V5PTE7X2tleTxfbGVuO19rZXkrKylhcmdzW19rZXktMV09YXJndW1lbnRzW19rZXldO3JldHVybiBuYXRpdmVPbkVycm9yLmFwcGx5KHRoaXMsW2Vycm9yXS5jb25jYXQoYXJncykpfXJldHVybiExfX0ocmlkKS5iaW5kKCksZnVuY3Rpb24oc291cmNlLG1lc3NhZ2Upe2lmKCEwPT09c291cmNlLnZlcmJvc2Upe3RyeXt2YXIgbG9nPWNvbnNvbGUubG9nLmJpbmQoY29uc29sZSksdHJhY2U9Y29uc29sZS50cmFjZS5iaW5kKGNvbnNvbGUpLHByZWZpeD1zb3VyY2UucnVsZVRleHR8fCIiO2lmKHNvdXJjZS5kb21haW5OYW1lKXt2YXIgcnVsZVN0YXJ0SW5kZXgsQUdfU0NSSVBUTEVUX01BUktFUj0iIyUjLy8iLFVCT19TQ1JJUFRMRVRfTUFSS0VSPSIjIytqcyI7c291cmNlLnJ1bGVUZXh0LmluZGV4T2YoQUdfU0NSSVBUTEVUX01BUktFUik+LTE/cnVsZVN0YXJ0SW5kZXg9c291cmNlLnJ1bGVUZXh0LmluZGV4T2YoQUdfU0NSSVBUTEVUX01BUktFUik6c291cmNlLnJ1bGVUZXh0LmluZGV4T2YoVUJPX1NDUklQVExFVF9NQVJLRVIpPi0xJiYocnVsZVN0YXJ0SW5kZXg9c291cmNlLnJ1bGVUZXh0LmluZGV4T2YoVUJPX1NDUklQVExFVF9NQVJLRVIpKTt2YXIgcnVsZVBhcnQ9c291cmNlLnJ1bGVUZXh0LnNsaWNlKHJ1bGVTdGFydEluZGV4KTtwcmVmaXg9IiIuY29uY2F0KHNvdXJjZS5kb21haW5OYW1lKS5jb25jYXQocnVsZVBhcnQpfXZhciBMT0dfTUFSS0VSPSJsb2c6ICI7bWVzc2FnZSYmKC0xPT09bWVzc2FnZS5pbmRleE9mKExPR19NQVJLRVIpP2xvZygiIi5jb25jYXQocHJlZml4LCIgbWVzc2FnZTpcbiIpLmNvbmNhdChtZXNzYWdlKSk6bG9nKG1lc3NhZ2Uuc2xpY2UoTE9HX01BUktFUi5sZW5ndGgpKSksbG9nKCIiLmNvbmNhdChwcmVmaXgsIiB0cmFjZSBzdGFydCIpKSx0cmFjZSYmdHJhY2UoKSxsb2coIiIuY29uY2F0KHByZWZpeCwiIHRyYWNlIGVuZCIpKX1jYXRjaChlKXt9ImZ1bmN0aW9uIj09dHlwZW9mIHdpbmRvdy5fX2RlYnVnJiZ3aW5kb3cuX19kZWJ1Zyhzb3VyY2UpfX0oc291cmNlKX0pLmFwcGx5KHRoaXMsdXBkYXRlZEFyZ3MpfWNhdGNoKGUpe2NvbnNvbGUubG9nKGUpfX0oe25hbWU6InByZXZlbnQtcG9wYWRzLW5ldCIsYXJnczpbXX0sW10pOw=="
+ "content": "IWZ1bmN0aW9uKHNvdXJjZSxhcmdzKXtjb25zdCB1cGRhdGVkQXJncz1hcmdzP1tdLmNvbmNhdChzb3VyY2UpLmNvbmNhdChhcmdzKTpbc291cmNlXTt0cnl7KGZ1bmN0aW9uKHNvdXJjZSl7dmFyIHJpZD1NYXRoLnJhbmRvbSgpLnRvU3RyaW5nKDM2KS5zbGljZSgyLDkpLHRocm93RXJyb3I9ZnVuY3Rpb24oKXt0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3IocmlkKX07ZGVsZXRlIHdpbmRvdy5Qb3BBZHMsZGVsZXRlIHdpbmRvdy5wb3BucyxPYmplY3QuZGVmaW5lUHJvcGVydGllcyh3aW5kb3cse1BvcEFkczp7c2V0OnRocm93RXJyb3J9LHBvcG5zOntzZXQ6dGhyb3dFcnJvcn19KSx3aW5kb3cub25lcnJvcj1mdW5jdGlvbihyaWQpe3ZhciBuYXRpdmVPbkVycm9yPXdpbmRvdy5vbmVycm9yO3JldHVybiBmdW5jdGlvbihlcnJvcil7aWYoInN0cmluZyI9PXR5cGVvZiBlcnJvciYmLTEhPT1lcnJvci5pbmRleE9mKHJpZCkpcmV0dXJuITA7aWYobmF0aXZlT25FcnJvciBpbnN0YW5jZW9mIEZ1bmN0aW9uKXtmb3IodmFyIF9sZW49YXJndW1lbnRzLmxlbmd0aCxhcmdzPW5ldyBBcnJheShfbGVuPjE/X2xlbi0xOjApLF9rZXk9MTtfa2V5PF9sZW47X2tleSsrKWFyZ3NbX2tleS0xXT1hcmd1bWVudHNbX2tleV07cmV0dXJuIG5hdGl2ZU9uRXJyb3IuYXBwbHkodGhpcyxbZXJyb3JdLmNvbmNhdChhcmdzKSl9cmV0dXJuITF9fShyaWQpLmJpbmQoKSxmdW5jdGlvbihzb3VyY2Upe2lmKCEwPT09c291cmNlLnZlcmJvc2Upe3RyeXt2YXIgbG9nPWNvbnNvbGUubG9nLmJpbmQoY29uc29sZSksdHJhY2U9Y29uc29sZS50cmFjZS5iaW5kKGNvbnNvbGUpLHByZWZpeD1zb3VyY2UucnVsZVRleHR8fCIiO2lmKHNvdXJjZS5kb21haW5OYW1lKXt2YXIgcnVsZVN0YXJ0SW5kZXgsQUdfU0NSSVBUTEVUX01BUktFUj0iIyUjLy8iLFVCT19TQ1JJUFRMRVRfTUFSS0VSPSIjIytqcyI7c291cmNlLnJ1bGVUZXh0LmluZGV4T2YoQUdfU0NSSVBUTEVUX01BUktFUik+LTE/cnVsZVN0YXJ0SW5kZXg9c291cmNlLnJ1bGVUZXh0LmluZGV4T2YoQUdfU0NSSVBUTEVUX01BUktFUik6c291cmNlLnJ1bGVUZXh0LmluZGV4T2YoVUJPX1NDUklQVExFVF9NQVJLRVIpPi0xJiYocnVsZVN0YXJ0SW5kZXg9c291cmNlLnJ1bGVUZXh0LmluZGV4T2YoVUJPX1NDUklQVExFVF9NQVJLRVIpKTt2YXIgcnVsZVBhcnQ9c291cmNlLnJ1bGVUZXh0LnNsaWNlKHJ1bGVTdGFydEluZGV4KTtwcmVmaXg9IiIuY29uY2F0KHNvdXJjZS5kb21haW5OYW1lKS5jb25jYXQocnVsZVBhcnQpfWxvZygiIi5jb25jYXQocHJlZml4LCIgdHJhY2Ugc3RhcnQiKSksdHJhY2UmJnRyYWNlKCksbG9nKCIiLmNvbmNhdChwcmVmaXgsIiB0cmFjZSBlbmQiKSl9Y2F0Y2goZSl7fSJmdW5jdGlvbiI9PXR5cGVvZiB3aW5kb3cuX19kZWJ1ZyYmd2luZG93Ll9fZGVidWcoc291cmNlKX19KHNvdXJjZSl9KS5hcHBseSh0aGlzLHVwZGF0ZWRBcmdzKX1jYXRjaChlKXtjb25zb2xlLmxvZyhlKX19KHtuYW1lOiJwcmV2ZW50LXBvcGFkcy1uZXQiLGFyZ3M6W119LFtdKTs="
},
{
"title": "scorecardresearch-beacon",
@@ -372,7 +375,7 @@
],
"isBlocking": false,
"contentType": "application/javascript;base64",
- "content": "IWZ1bmN0aW9uKHNvdXJjZSxhcmdzKXtjb25zdCB1cGRhdGVkQXJncz1hcmdzP1tdLmNvbmNhdChzb3VyY2UpLmNvbmNhdChhcmdzKTpbc291cmNlXTt0cnl7KGZ1bmN0aW9uKHNvdXJjZSl7d2luZG93LkNPTVNDT1JFPXtwdXJnZTpmdW5jdGlvbigpe3dpbmRvdy5fY29tc2NvcmU9W119LGJlYWNvbjpmdW5jdGlvbigpe319LGZ1bmN0aW9uKHNvdXJjZSxtZXNzYWdlKXtpZighMD09PXNvdXJjZS52ZXJib3NlKXt0cnl7dmFyIGxvZz1jb25zb2xlLmxvZy5iaW5kKGNvbnNvbGUpLHRyYWNlPWNvbnNvbGUudHJhY2UuYmluZChjb25zb2xlKSxwcmVmaXg9c291cmNlLnJ1bGVUZXh0fHwiIjtpZihzb3VyY2UuZG9tYWluTmFtZSl7dmFyIHJ1bGVTdGFydEluZGV4LEFHX1NDUklQVExFVF9NQVJLRVI9IiMlIy8vIixVQk9fU0NSSVBUTEVUX01BUktFUj0iIyMranMiO3NvdXJjZS5ydWxlVGV4dC5pbmRleE9mKEFHX1NDUklQVExFVF9NQVJLRVIpPi0xP3J1bGVTdGFydEluZGV4PXNvdXJjZS5ydWxlVGV4dC5pbmRleE9mKEFHX1NDUklQVExFVF9NQVJLRVIpOnNvdXJjZS5ydWxlVGV4dC5pbmRleE9mKFVCT19TQ1JJUFRMRVRfTUFSS0VSKT4tMSYmKHJ1bGVTdGFydEluZGV4PXNvdXJjZS5ydWxlVGV4dC5pbmRleE9mKFVCT19TQ1JJUFRMRVRfTUFSS0VSKSk7dmFyIHJ1bGVQYXJ0PXNvdXJjZS5ydWxlVGV4dC5zbGljZShydWxlU3RhcnRJbmRleCk7cHJlZml4PSIiLmNvbmNhdChzb3VyY2UuZG9tYWluTmFtZSkuY29uY2F0KHJ1bGVQYXJ0KX12YXIgTE9HX01BUktFUj0ibG9nOiAiO21lc3NhZ2UmJigtMT09PW1lc3NhZ2UuaW5kZXhPZihMT0dfTUFSS0VSKT9sb2coIiIuY29uY2F0KHByZWZpeCwiIG1lc3NhZ2U6XG4iKS5jb25jYXQobWVzc2FnZSkpOmxvZyhtZXNzYWdlLnNsaWNlKExPR19NQVJLRVIubGVuZ3RoKSkpLGxvZygiIi5jb25jYXQocHJlZml4LCIgdHJhY2Ugc3RhcnQiKSksdHJhY2UmJnRyYWNlKCksbG9nKCIiLmNvbmNhdChwcmVmaXgsIiB0cmFjZSBlbmQiKSl9Y2F0Y2goZSl7fSJmdW5jdGlvbiI9PXR5cGVvZiB3aW5kb3cuX19kZWJ1ZyYmd2luZG93Ll9fZGVidWcoc291cmNlKX19KHNvdXJjZSl9KS5hcHBseSh0aGlzLHVwZGF0ZWRBcmdzKX1jYXRjaChlKXtjb25zb2xlLmxvZyhlKX19KHtuYW1lOiJzY29yZWNhcmRyZXNlYXJjaC1iZWFjb24iLGFyZ3M6W119LFtdKTs="
+ "content": "IWZ1bmN0aW9uKHNvdXJjZSxhcmdzKXtjb25zdCB1cGRhdGVkQXJncz1hcmdzP1tdLmNvbmNhdChzb3VyY2UpLmNvbmNhdChhcmdzKTpbc291cmNlXTt0cnl7KGZ1bmN0aW9uKHNvdXJjZSl7d2luZG93LkNPTVNDT1JFPXtwdXJnZTpmdW5jdGlvbigpe3dpbmRvdy5fY29tc2NvcmU9W119LGJlYWNvbjpmdW5jdGlvbigpe319LGZ1bmN0aW9uKHNvdXJjZSl7aWYoITA9PT1zb3VyY2UudmVyYm9zZSl7dHJ5e3ZhciBsb2c9Y29uc29sZS5sb2cuYmluZChjb25zb2xlKSx0cmFjZT1jb25zb2xlLnRyYWNlLmJpbmQoY29uc29sZSkscHJlZml4PXNvdXJjZS5ydWxlVGV4dHx8IiI7aWYoc291cmNlLmRvbWFpbk5hbWUpe3ZhciBydWxlU3RhcnRJbmRleCxBR19TQ1JJUFRMRVRfTUFSS0VSPSIjJSMvLyIsVUJPX1NDUklQVExFVF9NQVJLRVI9IiMjK2pzIjtzb3VyY2UucnVsZVRleHQuaW5kZXhPZihBR19TQ1JJUFRMRVRfTUFSS0VSKT4tMT9ydWxlU3RhcnRJbmRleD1zb3VyY2UucnVsZVRleHQuaW5kZXhPZihBR19TQ1JJUFRMRVRfTUFSS0VSKTpzb3VyY2UucnVsZVRleHQuaW5kZXhPZihVQk9fU0NSSVBUTEVUX01BUktFUik+LTEmJihydWxlU3RhcnRJbmRleD1zb3VyY2UucnVsZVRleHQuaW5kZXhPZihVQk9fU0NSSVBUTEVUX01BUktFUikpO3ZhciBydWxlUGFydD1zb3VyY2UucnVsZVRleHQuc2xpY2UocnVsZVN0YXJ0SW5kZXgpO3ByZWZpeD0iIi5jb25jYXQoc291cmNlLmRvbWFpbk5hbWUpLmNvbmNhdChydWxlUGFydCl9bG9nKCIiLmNvbmNhdChwcmVmaXgsIiB0cmFjZSBzdGFydCIpKSx0cmFjZSYmdHJhY2UoKSxsb2coIiIuY29uY2F0KHByZWZpeCwiIHRyYWNlIGVuZCIpKX1jYXRjaChlKXt9ImZ1bmN0aW9uIj09dHlwZW9mIHdpbmRvdy5fX2RlYnVnJiZ3aW5kb3cuX19kZWJ1Zyhzb3VyY2UpfX0oc291cmNlKX0pLmFwcGx5KHRoaXMsdXBkYXRlZEFyZ3MpfWNhdGNoKGUpe2NvbnNvbGUubG9nKGUpfX0oe25hbWU6InNjb3JlY2FyZHJlc2VhcmNoLWJlYWNvbiIsYXJnczpbXX0sW10pOw=="
},
{
"title": "set-popads-dummy",
@@ -383,6 +386,6 @@
],
"isBlocking": false,
"contentType": "application/javascript;base64",
- "content": "IWZ1bmN0aW9uKHNvdXJjZSxhcmdzKXtmdW5jdGlvbiBoaXQoc291cmNlLG1lc3NhZ2Upe2lmKCEwPT09c291cmNlLnZlcmJvc2Upe3RyeXt2YXIgbG9nPWNvbnNvbGUubG9nLmJpbmQoY29uc29sZSksdHJhY2U9Y29uc29sZS50cmFjZS5iaW5kKGNvbnNvbGUpLHByZWZpeD1zb3VyY2UucnVsZVRleHR8fCIiO2lmKHNvdXJjZS5kb21haW5OYW1lKXt2YXIgcnVsZVN0YXJ0SW5kZXg7c291cmNlLnJ1bGVUZXh0LmluZGV4T2YoIiMlIy8vIik+LTE/cnVsZVN0YXJ0SW5kZXg9c291cmNlLnJ1bGVUZXh0LmluZGV4T2YoIiMlIy8vIik6c291cmNlLnJ1bGVUZXh0LmluZGV4T2YoIiMjK2pzIik+LTEmJihydWxlU3RhcnRJbmRleD1zb3VyY2UucnVsZVRleHQuaW5kZXhPZigiIyMranMiKSk7dmFyIHJ1bGVQYXJ0PXNvdXJjZS5ydWxlVGV4dC5zbGljZShydWxlU3RhcnRJbmRleCk7cHJlZml4PSIiLmNvbmNhdChzb3VyY2UuZG9tYWluTmFtZSkuY29uY2F0KHJ1bGVQYXJ0KX1tZXNzYWdlJiYoLTE9PT1tZXNzYWdlLmluZGV4T2YoImxvZzogIik/bG9nKCIiLmNvbmNhdChwcmVmaXgsIiBtZXNzYWdlOlxuIikuY29uY2F0KG1lc3NhZ2UpKTpsb2cobWVzc2FnZS5zbGljZSgibG9nOiAiLmxlbmd0aCkpKSxsb2coIiIuY29uY2F0KHByZWZpeCwiIHRyYWNlIHN0YXJ0IikpLHRyYWNlJiZ0cmFjZSgpLGxvZygiIi5jb25jYXQocHJlZml4LCIgdHJhY2UgZW5kIikpfWNhdGNoKGUpe30iZnVuY3Rpb24iPT10eXBlb2Ygd2luZG93Ll9fZGVidWcmJndpbmRvdy5fX2RlYnVnKHNvdXJjZSl9fWNvbnN0IHVwZGF0ZWRBcmdzPWFyZ3M/W10uY29uY2F0KHNvdXJjZSkuY29uY2F0KGFyZ3MpOltzb3VyY2VdO3RyeXsoZnVuY3Rpb24oc291cmNlKXtkZWxldGUgd2luZG93LlBvcEFkcyxkZWxldGUgd2luZG93LnBvcG5zLE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKHdpbmRvdyx7UG9wQWRzOntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gaGl0KHNvdXJjZSkse319fSxwb3Buczp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGhpdChzb3VyY2UpLHt9fX19KX0pLmFwcGx5KHRoaXMsdXBkYXRlZEFyZ3MpfWNhdGNoKGUpe2NvbnNvbGUubG9nKGUpfX0oe25hbWU6InNldC1wb3BhZHMtZHVtbXkiLGFyZ3M6W119LFtdKTs="
+ "content": "IWZ1bmN0aW9uKHNvdXJjZSxhcmdzKXtmdW5jdGlvbiBoaXQoc291cmNlKXtpZighMD09PXNvdXJjZS52ZXJib3NlKXt0cnl7dmFyIGxvZz1jb25zb2xlLmxvZy5iaW5kKGNvbnNvbGUpLHRyYWNlPWNvbnNvbGUudHJhY2UuYmluZChjb25zb2xlKSxwcmVmaXg9c291cmNlLnJ1bGVUZXh0fHwiIjtpZihzb3VyY2UuZG9tYWluTmFtZSl7dmFyIHJ1bGVTdGFydEluZGV4O3NvdXJjZS5ydWxlVGV4dC5pbmRleE9mKCIjJSMvLyIpPi0xP3J1bGVTdGFydEluZGV4PXNvdXJjZS5ydWxlVGV4dC5pbmRleE9mKCIjJSMvLyIpOnNvdXJjZS5ydWxlVGV4dC5pbmRleE9mKCIjIytqcyIpPi0xJiYocnVsZVN0YXJ0SW5kZXg9c291cmNlLnJ1bGVUZXh0LmluZGV4T2YoIiMjK2pzIikpO3ZhciBydWxlUGFydD1zb3VyY2UucnVsZVRleHQuc2xpY2UocnVsZVN0YXJ0SW5kZXgpO3ByZWZpeD0iIi5jb25jYXQoc291cmNlLmRvbWFpbk5hbWUpLmNvbmNhdChydWxlUGFydCl9bG9nKCIiLmNvbmNhdChwcmVmaXgsIiB0cmFjZSBzdGFydCIpKSx0cmFjZSYmdHJhY2UoKSxsb2coIiIuY29uY2F0KHByZWZpeCwiIHRyYWNlIGVuZCIpKX1jYXRjaChlKXt9ImZ1bmN0aW9uIj09dHlwZW9mIHdpbmRvdy5fX2RlYnVnJiZ3aW5kb3cuX19kZWJ1Zyhzb3VyY2UpfX1jb25zdCB1cGRhdGVkQXJncz1hcmdzP1tdLmNvbmNhdChzb3VyY2UpLmNvbmNhdChhcmdzKTpbc291cmNlXTt0cnl7KGZ1bmN0aW9uKHNvdXJjZSl7ZGVsZXRlIHdpbmRvdy5Qb3BBZHMsZGVsZXRlIHdpbmRvdy5wb3BucyxPYmplY3QuZGVmaW5lUHJvcGVydGllcyh3aW5kb3cse1BvcEFkczp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGhpdChzb3VyY2UpLHt9fX0scG9wbnM6e2dldDpmdW5jdGlvbigpe3JldHVybiBoaXQoc291cmNlKSx7fX19fSl9KS5hcHBseSh0aGlzLHVwZGF0ZWRBcmdzKX1jYXRjaChlKXtjb25zb2xlLmxvZyhlKX19KHtuYW1lOiJzZXQtcG9wYWRzLWR1bW15IixhcmdzOltdfSxbXSk7"
}
]
\ No newline at end of file
diff --git a/dist/redirects.yml b/dist/redirects.yml
index 21a7e86d..bfbc24ef 100644
--- a/dist/redirects.yml
+++ b/dist/redirects.yml
@@ -1,6 +1,6 @@
#
# AdGuard Scriptlets (Redirects Source)
-# Version 1.7.3
+# Version 1.7.20
#
- title: 1x1-transparent.gif
description: |-
@@ -611,7 +611,7 @@
window.apstag = apstagWrapper;
hit(source);
}
- function hit(source, message) {
+ function hit(source) {
if (source.verbose !== true) {
return;
}
@@ -631,14 +631,6 @@
var rulePart = source.ruleText.slice(ruleStartIndex);
prefix = "".concat(source.domainName).concat(rulePart);
}
- var LOG_MARKER = "log: ";
- if (message) {
- if (message.indexOf(LOG_MARKER) === -1) {
- log("".concat(prefix, " message:\n").concat(message));
- } else {
- log(message.slice(LOG_MARKER.length));
- }
- }
log("".concat(prefix, " trace start"));
if (trace) {
trace();
@@ -744,7 +736,7 @@
window.ATInternet = smartTagWrapper;
hit(source);
}
- function hit(source, message) {
+ function hit(source) {
if (source.verbose !== true) {
return;
}
@@ -764,14 +756,6 @@
var rulePart = source.ruleText.slice(ruleStartIndex);
prefix = "".concat(source.domainName).concat(rulePart);
}
- var LOG_MARKER = "log: ";
- if (message) {
- if (message.indexOf(LOG_MARKER) === -1) {
- log("".concat(prefix, " message:\n").concat(message));
- } else {
- log(message.slice(LOG_MARKER.length));
- }
- }
log("".concat(prefix, " trace start"));
if (trace) {
trace();
@@ -914,7 +898,7 @@
}
hit(source);
}
- function hit(source, message) {
+ function hit(source) {
if (source.verbose !== true) {
return;
}
@@ -934,14 +918,6 @@
var rulePart = source.ruleText.slice(ruleStartIndex);
prefix = "".concat(source.domainName).concat(rulePart);
}
- var LOG_MARKER = "log: ";
- if (message) {
- if (message.indexOf(LOG_MARKER) === -1) {
- log("".concat(prefix, " message:\n").concat(message));
- } else {
- log(message.slice(LOG_MARKER.length));
- }
- }
log("".concat(prefix, " trace start"));
if (trace) {
trace();
@@ -1004,7 +980,7 @@
window.Fingerprint2 = Fingerprint2;
hit(source);
}
- function hit(source, message) {
+ function hit(source) {
if (source.verbose !== true) {
return;
}
@@ -1024,14 +1000,6 @@
var rulePart = source.ruleText.slice(ruleStartIndex);
prefix = "".concat(source.domainName).concat(rulePart);
}
- var LOG_MARKER = "log: ";
- if (message) {
- if (message.indexOf(LOG_MARKER) === -1) {
- log("".concat(prefix, " message:\n").concat(message));
- } else {
- log(message.slice(LOG_MARKER.length));
- }
- }
log("".concat(prefix, " trace start"));
if (trace) {
trace();
@@ -1085,7 +1053,7 @@
window.FingerprintJS = new FingerprintJS;
hit(source);
}
- function hit(source, message) {
+ function hit(source) {
if (source.verbose !== true) {
return;
}
@@ -1105,14 +1073,6 @@
var rulePart = source.ruleText.slice(ruleStartIndex);
prefix = "".concat(source.domainName).concat(rulePart);
}
- var LOG_MARKER = "log: ";
- if (message) {
- if (message.indexOf(LOG_MARKER) === -1) {
- log("".concat(prefix, " message:\n").concat(message));
- } else {
- log(message.slice(LOG_MARKER.length));
- }
- }
log("".concat(prefix, " trace start"));
if (trace) {
trace();
@@ -1156,7 +1116,7 @@
window.GemiusPlayer = GemiusPlayer;
hit(source);
}
- function hit(source, message) {
+ function hit(source) {
if (source.verbose !== true) {
return;
}
@@ -1176,14 +1136,6 @@
var rulePart = source.ruleText.slice(ruleStartIndex);
prefix = "".concat(source.domainName).concat(rulePart);
}
- var LOG_MARKER = "log: ";
- if (message) {
- if (message.indexOf(LOG_MARKER) === -1) {
- log("".concat(prefix, " message:\n").concat(message));
- } else {
- log(message.slice(LOG_MARKER.length));
- }
- }
log("".concat(prefix, " trace start"));
if (trace) {
trace();
@@ -1289,7 +1241,7 @@
window._gat = gat;
hit(source);
}
- function hit(source, message) {
+ function hit(source) {
if (source.verbose !== true) {
return;
}
@@ -1309,14 +1261,6 @@
var rulePart = source.ruleText.slice(ruleStartIndex);
prefix = "".concat(source.domainName).concat(rulePart);
}
- var LOG_MARKER = "log: ";
- if (message) {
- if (message.indexOf(LOG_MARKER) === -1) {
- log("".concat(prefix, " message:\n").concat(message));
- } else {
- log(message.slice(LOG_MARKER.length));
- }
- }
log("".concat(prefix, " trace start"));
if (trace) {
trace();
@@ -1433,7 +1377,7 @@
}
hit(source);
}
- function hit(source, message) {
+ function hit(source) {
if (source.verbose !== true) {
return;
}
@@ -1453,14 +1397,6 @@
var rulePart = source.ruleText.slice(ruleStartIndex);
prefix = "".concat(source.domainName).concat(rulePart);
}
- var LOG_MARKER = "log: ";
- if (message) {
- if (message.indexOf(LOG_MARKER) === -1) {
- log("".concat(prefix, " message:\n").concat(message));
- } else {
- log(message.slice(LOG_MARKER.length));
- }
- }
log("".concat(prefix, " trace start"));
if (trace) {
trace();
@@ -1492,7 +1428,9 @@
- title: google-ima3
comment: Mocks the IMA SDK of Google.
- aliases: []
+ aliases:
+ - ubo-google-ima.js
+ - google-ima.js
contentType: application/javascript
content: |-
(function(source, args) {
@@ -2042,7 +1980,7 @@
window.google.ima = ima;
hit(source);
}
- function hit(source, message) {
+ function hit(source) {
if (source.verbose !== true) {
return;
}
@@ -2062,14 +2000,6 @@
var rulePart = source.ruleText.slice(ruleStartIndex);
prefix = "".concat(source.domainName).concat(rulePart);
}
- var LOG_MARKER = "log: ";
- if (message) {
- if (message.indexOf(LOG_MARKER) === -1) {
- log("".concat(prefix, " message:\n").concat(message));
- } else {
- log(message.slice(LOG_MARKER.length));
- }
- }
log("".concat(prefix, " trace start"));
if (trace) {
trace();
@@ -2161,7 +2091,7 @@
hit(source);
}
}
- function hit(source, message) {
+ function hit(source) {
if (source.verbose !== true) {
return;
}
@@ -2181,14 +2111,6 @@
var rulePart = source.ruleText.slice(ruleStartIndex);
prefix = "".concat(source.domainName).concat(rulePart);
}
- var LOG_MARKER = "log: ";
- if (message) {
- if (message.indexOf(LOG_MARKER) === -1) {
- log("".concat(prefix, " message:\n").concat(message));
- } else {
- log(message.slice(LOG_MARKER.length));
- }
- }
log("".concat(prefix, " trace start"));
if (trace) {
trace();
@@ -2425,7 +2347,7 @@
}
hit(source);
}
- function hit(source, message) {
+ function hit(source) {
if (source.verbose !== true) {
return;
}
@@ -2445,14 +2367,6 @@
var rulePart = source.ruleText.slice(ruleStartIndex);
prefix = "".concat(source.domainName).concat(rulePart);
}
- var LOG_MARKER = "log: ";
- if (message) {
- if (message.indexOf(LOG_MARKER) === -1) {
- log("".concat(prefix, " message:\n").concat(message));
- } else {
- log(message.slice(LOG_MARKER.length));
- }
- }
log("".concat(prefix, " trace start"));
if (trace) {
trace();
@@ -2516,7 +2430,7 @@
window.Piwik = matomoWrapper;
hit(source);
}
- function hit(source, message) {
+ function hit(source) {
if (source.verbose !== true) {
return;
}
@@ -2536,14 +2450,6 @@
var rulePart = source.ruleText.slice(ruleStartIndex);
prefix = "".concat(source.domainName).concat(rulePart);
}
- var LOG_MARKER = "log: ";
- if (message) {
- if (message.indexOf(LOG_MARKER) === -1) {
- log("".concat(prefix, " message:\n").concat(message));
- } else {
- log(message.slice(LOG_MARKER.length));
- }
- }
log("".concat(prefix, " trace start"));
if (trace) {
trace();
@@ -2642,7 +2548,7 @@
}
hit(source);
}
- function hit(source, message) {
+ function hit(source) {
if (source.verbose !== true) {
return;
}
@@ -2662,14 +2568,6 @@
var rulePart = source.ruleText.slice(ruleStartIndex);
prefix = "".concat(source.domainName).concat(rulePart);
}
- var LOG_MARKER = "log: ";
- if (message) {
- if (message.indexOf(LOG_MARKER) === -1) {
- log("".concat(prefix, " message:\n").concat(message));
- } else {
- log(message.slice(LOG_MARKER.length));
- }
- }
log("".concat(prefix, " trace start"));
if (trace) {
trace();
@@ -2752,7 +2650,7 @@
}
hit(source);
}
- function hit(source, message) {
+ function hit(source) {
if (source.verbose !== true) {
return;
}
@@ -2772,14 +2670,6 @@
var rulePart = source.ruleText.slice(ruleStartIndex);
prefix = "".concat(source.domainName).concat(rulePart);
}
- var LOG_MARKER = "log: ";
- if (message) {
- if (message.indexOf(LOG_MARKER) === -1) {
- log("".concat(prefix, " message:\n").concat(message));
- } else {
- log(message.slice(LOG_MARKER.length));
- }
- }
log("".concat(prefix, " trace start"));
if (trace) {
trace();
@@ -2820,7 +2710,7 @@
};
hit(source);
}
- function hit(source, message) {
+ function hit(source) {
if (source.verbose !== true) {
return;
}
@@ -2840,14 +2730,6 @@
var rulePart = source.ruleText.slice(ruleStartIndex);
prefix = "".concat(source.domainName).concat(rulePart);
}
- var LOG_MARKER = "log: ";
- if (message) {
- if (message.indexOf(LOG_MARKER) === -1) {
- log("".concat(prefix, " message:\n").concat(message));
- } else {
- log(message.slice(LOG_MARKER.length));
- }
- }
log("".concat(prefix, " trace start"));
if (trace) {
trace();
@@ -2887,10 +2769,11 @@
(function(source, args) {
function noeval(source) {
window.eval = function evalWrapper(s) {
- hit(source, "AdGuard has prevented eval:\n".concat(s));
+ hit(source);
+ logMessage(source, "AdGuard has prevented eval:\n".concat(s), true);
}.bind();
}
- function hit(source, message) {
+ function hit(source) {
if (source.verbose !== true) {
return;
}
@@ -2910,14 +2793,6 @@
var rulePart = source.ruleText.slice(ruleStartIndex);
prefix = "".concat(source.domainName).concat(rulePart);
}
- var LOG_MARKER = "log: ";
- if (message) {
- if (message.indexOf(LOG_MARKER) === -1) {
- log("".concat(prefix, " message:\n").concat(message));
- } else {
- log(message.slice(LOG_MARKER.length));
- }
- }
log("".concat(prefix, " trace start"));
if (trace) {
trace();
@@ -2928,6 +2803,12 @@
window.__debug(source);
}
}
+ function logMessage(source, message) {
+ var forced = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;
+ if (forced || source.verbose) {
+ console.log("".concat(source.name, ": ").concat(message));
+ }
+ }
const updatedArgs = args ? [].concat(source).concat(args) : [ source ];
try {
noeval.apply(this, updatedArgs);
@@ -2971,7 +2852,7 @@
piTracker();
hit(source);
}
- function hit(source, message) {
+ function hit(source) {
if (source.verbose !== true) {
return;
}
@@ -2991,14 +2872,6 @@
var rulePart = source.ruleText.slice(ruleStartIndex);
prefix = "".concat(source.domainName).concat(rulePart);
}
- var LOG_MARKER = "log: ";
- if (message) {
- if (message.indexOf(LOG_MARKER) === -1) {
- log("".concat(prefix, " message:\n").concat(message));
- } else {
- log(message.slice(LOG_MARKER.length));
- }
- }
log("".concat(prefix, " trace start"));
if (trace) {
trace();
@@ -3041,7 +2914,7 @@
window.isAdBlockActive = false;
hit(source);
}
- function hit(source, message) {
+ function hit(source) {
if (source.verbose !== true) {
return;
}
@@ -3061,14 +2934,6 @@
var rulePart = source.ruleText.slice(ruleStartIndex);
prefix = "".concat(source.domainName).concat(rulePart);
}
- var LOG_MARKER = "log: ";
- if (message) {
- if (message.indexOf(LOG_MARKER) === -1) {
- log("".concat(prefix, " message:\n").concat(message));
- } else {
- log(message.slice(LOG_MARKER.length));
- }
- }
log("".concat(prefix, " trace start"));
if (trace) {
trace();
@@ -3136,7 +3001,7 @@
window.pbjs = pbjsWrapper;
hit(source);
}
- function hit(source, message) {
+ function hit(source) {
if (source.verbose !== true) {
return;
}
@@ -3156,14 +3021,6 @@
var rulePart = source.ruleText.slice(ruleStartIndex);
prefix = "".concat(source.domainName).concat(rulePart);
}
- var LOG_MARKER = "log: ";
- if (message) {
- if (message.indexOf(LOG_MARKER) === -1) {
- log("".concat(prefix, " message:\n").concat(message));
- } else {
- log(message.slice(LOG_MARKER.length));
- }
- }
log("".concat(prefix, " trace start"));
if (trace) {
trace();
@@ -3205,7 +3062,7 @@
contentType: application/javascript
content: |-
(function(source, args) {
- function preventBab(source) {
+ function preventBab$1(source) {
var nativeSetTimeout = window.setTimeout;
var babRegex = /\.bab_elementid.$/;
var timeoutWrapper = function timeoutWrapper(callback) {
@@ -3256,7 +3113,7 @@
};
window.eval = evalWrapper.bind(window);
}
- function hit(source, message) {
+ function hit(source) {
if (source.verbose !== true) {
return;
}
@@ -3276,14 +3133,6 @@
var rulePart = source.ruleText.slice(ruleStartIndex);
prefix = "".concat(source.domainName).concat(rulePart);
}
- var LOG_MARKER = "log: ";
- if (message) {
- if (message.indexOf(LOG_MARKER) === -1) {
- log("".concat(prefix, " message:\n").concat(message));
- } else {
- log(message.slice(LOG_MARKER.length));
- }
- }
log("".concat(prefix, " trace start"));
if (trace) {
trace();
@@ -3296,7 +3145,7 @@
}
const updatedArgs = args ? [].concat(source).concat(args) : [ source ];
try {
- preventBab.apply(this, updatedArgs);
+ preventBab$1.apply(this, updatedArgs);
} catch (e) {
console.log(e);
}
@@ -3331,7 +3180,7 @@
window.nH7eXzOsG = 858;
hit(source);
}
- function hit(source, message) {
+ function hit(source) {
if (source.verbose !== true) {
return;
}
@@ -3351,14 +3200,6 @@
var rulePart = source.ruleText.slice(ruleStartIndex);
prefix = "".concat(source.domainName).concat(rulePart);
}
- var LOG_MARKER = "log: ";
- if (message) {
- if (message.indexOf(LOG_MARKER) === -1) {
- log("".concat(prefix, " message:\n").concat(message));
- } else {
- log(message.slice(LOG_MARKER.length));
- }
- }
log("".concat(prefix, " trace start"));
if (trace) {
trace();
@@ -3458,7 +3299,7 @@
Object.defineProperty(window, "sniffAdBlock", getsetfab);
}
}
- function hit(source, message) {
+ function hit(source) {
if (source.verbose !== true) {
return;
}
@@ -3478,14 +3319,6 @@
var rulePart = source.ruleText.slice(ruleStartIndex);
prefix = "".concat(source.domainName).concat(rulePart);
}
- var LOG_MARKER = "log: ";
- if (message) {
- if (message.indexOf(LOG_MARKER) === -1) {
- log("".concat(prefix, " message:\n").concat(message));
- } else {
- log(message.slice(LOG_MARKER.length));
- }
- }
log("".concat(prefix, " trace start"));
if (trace) {
trace();
@@ -3557,9 +3390,9 @@
};
}
function randomId() {
- return Math.random().toString(36).substr(2, 9);
+ return Math.random().toString(36).slice(2, 9);
}
- function hit(source, message) {
+ function hit(source) {
if (source.verbose !== true) {
return;
}
@@ -3579,14 +3412,6 @@
var rulePart = source.ruleText.slice(ruleStartIndex);
prefix = "".concat(source.domainName).concat(rulePart);
}
- var LOG_MARKER = "log: ";
- if (message) {
- if (message.indexOf(LOG_MARKER) === -1) {
- log("".concat(prefix, " message:\n").concat(message));
- } else {
- log(message.slice(LOG_MARKER.length));
- }
- }
log("".concat(prefix, " trace start"));
if (trace) {
trace();
@@ -3626,7 +3451,7 @@
};
hit(source);
}
- function hit(source, message) {
+ function hit(source) {
if (source.verbose !== true) {
return;
}
@@ -3646,14 +3471,6 @@
var rulePart = source.ruleText.slice(ruleStartIndex);
prefix = "".concat(source.domainName).concat(rulePart);
}
- var LOG_MARKER = "log: ";
- if (message) {
- if (message.indexOf(LOG_MARKER) === -1) {
- log("".concat(prefix, " message:\n").concat(message));
- } else {
- log(message.slice(LOG_MARKER.length));
- }
- }
log("".concat(prefix, " trace start"));
if (trace) {
trace();
@@ -3705,7 +3522,7 @@
}
});
}
- function hit(source, message) {
+ function hit(source) {
if (source.verbose !== true) {
return;
}
@@ -3725,14 +3542,6 @@
var rulePart = source.ruleText.slice(ruleStartIndex);
prefix = "".concat(source.domainName).concat(rulePart);
}
- var LOG_MARKER = "log: ";
- if (message) {
- if (message.indexOf(LOG_MARKER) === -1) {
- log("".concat(prefix, " message:\n").concat(message));
- } else {
- log(message.slice(LOG_MARKER.length));
- }
- }
log("".concat(prefix, " trace start"));
if (trace) {
trace();
diff --git a/dist/scriptlets.corelibs.json b/dist/scriptlets.corelibs.json
index 7ca94c06..c3b96d01 100644
--- a/dist/scriptlets.corelibs.json
+++ b/dist/scriptlets.corelibs.json
@@ -1,11 +1,11 @@
{
- "version": "1.7.3",
+ "version": "1.7.20",
"scriptlets": [
{
"names": [
"trusted-click-element"
],
- "scriptlet": "function trustedClickElement(source,args){function hit(source,message){if(!0===source.verbose){try{var log=console.log.bind(console),trace=console.trace.bind(console),prefix=source.ruleText||\"\";if(source.domainName){var ruleStartIndex;source.ruleText.indexOf(\"#%#//\")>-1?ruleStartIndex=source.ruleText.indexOf(\"#%#//\"):source.ruleText.indexOf(\"##+js\")>-1&&(ruleStartIndex=source.ruleText.indexOf(\"##+js\"));var rulePart=source.ruleText.slice(ruleStartIndex);prefix=\"\".concat(source.domainName).concat(rulePart)}message&&(-1===message.indexOf(\"log: \")?log(\"\".concat(prefix,\" message:\\n\").concat(message)):log(message.slice(\"log: \".length))),log(\"\".concat(prefix,\" trace start\")),trace&&trace(),log(\"\".concat(prefix,\" trace end\"))}catch(e){}\"function\"==typeof window.__debug&&window.__debug(source)}}function toRegExp(){var input=arguments.length>0&&void 0!==arguments[0]?arguments[0]:\"\",DEFAULT_VALUE=\".?\",FORWARD_SLASH=\"/\";if(\"\"===input)return new RegExp(DEFAULT_VALUE);if(input[0]===FORWARD_SLASH&&input[input.length-1]===FORWARD_SLASH)return new RegExp(input.slice(1,-1));var escaped=input.replace(/[.*+?^${}()|[\\]\\\\]/g,\"\\\\$&\");return new RegExp(escaped)}function parseCookieString(cookieString){var cookieChunks=cookieString.split(\";\"),cookieData={};return cookieChunks.forEach((function(singleCookie){var cookieKey,cookieValue,delimiterIndex=singleCookie.indexOf(\"=\");-1===delimiterIndex?cookieKey=singleCookie.trim():(cookieKey=singleCookie.slice(0,delimiterIndex).trim(),cookieValue=singleCookie.slice(delimiterIndex+1)),cookieData[cookieKey]=cookieValue||null})),cookieData}function throttle(cb,delay){var savedArgs,wait=!1;return function wrapper(){for(var _len=arguments.length,args=new Array(_len),_key=0;_key<_len;_key++)args[_key]=arguments[_key];wait?savedArgs=args:(cb.apply(void 0,args),wait=!0,setTimeout((function(){wait=!1,savedArgs&&(wrapper(savedArgs),savedArgs=null)}),delay))}}function logMessage(source,message){var forced=arguments.length>2&&void 0!==arguments[2]&&arguments[2];(forced||source.verbose)&&console.log(\"\".concat(source.name,\": \").concat(message))}var updatedArgs=args?[].concat(source).concat(args):[source];try{(function(source,selectors){var extraMatch=arguments.length>2&&void 0!==arguments[2]?arguments[2]:\"\",delay=arguments.length>3&&void 0!==arguments[3]?arguments[3]:NaN;if(selectors){var parsedDelay,OBSERVER_TIMEOUT_MS=1e4,THROTTLE_DELAY_MS=20,COOKIE_MATCH_MARKER=\"cookie:\",LOCAL_STORAGE_MATCH_MARKER=\"localStorage:\",SELECTORS_DELIMITER=\",\",COOKIE_STRING_DELIMITER=\";\",EXTRA_MATCH_DELIMITER=/(,\\s*){1}(?=cookie:|localStorage:)/;if(delay)if(parsedDelay=parseInt(delay,10),!(!Number.isNaN(parsedDelay)||parsedDelay-1){var cookieMatch=matchStr.replace(COOKIE_MATCH_MARKER,\"\");cookieMatches.push(cookieMatch)}if(matchStr.indexOf(LOCAL_STORAGE_MATCH_MARKER)>-1){var localStorageMatch=matchStr.replace(LOCAL_STORAGE_MATCH_MARKER,\"\");localStorageMatches.push(localStorageMatch)}}));if(cookieMatches.length>0){var parsedCookieMatches=parseCookieString(cookieMatches.join(COOKIE_STRING_DELIMITER)),parsedCookies=parseCookieString(document.cookie),cookieKeys=Object.keys(parsedCookies);if(0===cookieKeys.length)return;if(!Object.keys(parsedCookieMatches).every((function(key){var valueMatch=parsedCookieMatches[key]?toRegExp(parsedCookieMatches[key]):null,keyMatch=toRegExp(key);return cookieKeys.some((function(key){return!!keyMatch.test(key)&&(!valueMatch||valueMatch.test(parsedCookies[key]))}))})))return}if(localStorageMatches.length>0)if(!localStorageMatches.every((function(str){var itemValue=window.localStorage.getItem(str);return itemValue||\"\"===itemValue})))return;var selectorsSequence=selectors.split(SELECTORS_DELIMITER).map((function(selector){return selector.trim()})),createElementObj=function(element){return{element:element||null,clicked:!1}},elementsSequence=Array(selectorsSequence.length).fill(createElementObj()),clickElementsBySequence=function(){for(var i=0;i-1?ruleStartIndex=source.ruleText.indexOf(\"#%#//\"):source.ruleText.indexOf(\"##+js\")>-1&&(ruleStartIndex=source.ruleText.indexOf(\"##+js\"));var rulePart=source.ruleText.slice(ruleStartIndex);prefix=\"\".concat(source.domainName).concat(rulePart)}log(\"\".concat(prefix,\" trace start\")),trace&&trace(),log(\"\".concat(prefix,\" trace end\"))}catch(e){}\"function\"==typeof window.__debug&&window.__debug(source)}}function toRegExp(){var input=arguments.length>0&&void 0!==arguments[0]?arguments[0]:\"\",DEFAULT_VALUE=\".?\",FORWARD_SLASH=\"/\";if(\"\"===input)return new RegExp(DEFAULT_VALUE);if(input[0]===FORWARD_SLASH&&input[input.length-1]===FORWARD_SLASH)return new RegExp(input.slice(1,-1));var escaped=input.replace(/[.*+?^${}()|[\\]\\\\]/g,\"\\\\$&\");return new RegExp(escaped)}function parseCookieString(cookieString){var cookieChunks=cookieString.split(\";\"),cookieData={};return cookieChunks.forEach((function(singleCookie){var cookieKey,cookieValue,delimiterIndex=singleCookie.indexOf(\"=\");-1===delimiterIndex?cookieKey=singleCookie.trim():(cookieKey=singleCookie.slice(0,delimiterIndex).trim(),cookieValue=singleCookie.slice(delimiterIndex+1)),cookieData[cookieKey]=cookieValue||null})),cookieData}function throttle(cb,delay){var savedArgs,wait=!1;return function wrapper(){for(var _len=arguments.length,args=new Array(_len),_key=0;_key<_len;_key++)args[_key]=arguments[_key];wait?savedArgs=args:(cb.apply(void 0,args),wait=!0,setTimeout((function(){wait=!1,savedArgs&&(wrapper(savedArgs),savedArgs=null)}),delay))}}function logMessage(source,message){var forced=arguments.length>2&&void 0!==arguments[2]&&arguments[2];(forced||source.verbose)&&console.log(\"\".concat(source.name,\": \").concat(message))}var updatedArgs=args?[].concat(source).concat(args):[source];try{(function(source,selectors){var extraMatch=arguments.length>2&&void 0!==arguments[2]?arguments[2]:\"\",delay=arguments.length>3&&void 0!==arguments[3]?arguments[3]:NaN;if(selectors){var parsedDelay,OBSERVER_TIMEOUT_MS=1e4,THROTTLE_DELAY_MS=20,COOKIE_MATCH_MARKER=\"cookie:\",LOCAL_STORAGE_MATCH_MARKER=\"localStorage:\",SELECTORS_DELIMITER=\",\",COOKIE_STRING_DELIMITER=\";\",EXTRA_MATCH_DELIMITER=/(,\\s*){1}(?=cookie:|localStorage:)/;if(delay)if(parsedDelay=parseInt(delay,10),!(!Number.isNaN(parsedDelay)||parsedDelay-1){var cookieMatch=matchStr.replace(COOKIE_MATCH_MARKER,\"\");cookieMatches.push(cookieMatch)}if(matchStr.indexOf(LOCAL_STORAGE_MATCH_MARKER)>-1){var localStorageMatch=matchStr.replace(LOCAL_STORAGE_MATCH_MARKER,\"\");localStorageMatches.push(localStorageMatch)}}));if(cookieMatches.length>0){var parsedCookieMatches=parseCookieString(cookieMatches.join(COOKIE_STRING_DELIMITER)),parsedCookies=parseCookieString(document.cookie),cookieKeys=Object.keys(parsedCookies);if(0===cookieKeys.length)return;if(!Object.keys(parsedCookieMatches).every((function(key){var valueMatch=parsedCookieMatches[key]?toRegExp(parsedCookieMatches[key]):null,keyMatch=toRegExp(key);return cookieKeys.some((function(key){return!!keyMatch.test(key)&&(!valueMatch||valueMatch.test(parsedCookies[key]))}))})))return}if(localStorageMatches.length>0)if(!localStorageMatches.every((function(str){var itemValue=window.localStorage.getItem(str);return itemValue||\"\"===itemValue})))return;var selectorsSequence=selectors.split(SELECTORS_DELIMITER).map((function(selector){return selector.trim()})),createElementObj=function(element){return{element:element||null,clicked:!1}},elementsSequence=Array(selectorsSequence.length).fill(createElementObj()),clickElementsBySequence=function(){for(var i=0;i-1?ruleStartIndex=source.ruleText.indexOf(AG_SCRIPTLET_MARKER):source.ruleText.indexOf(UBO_SCRIPTLET_MARKER)>-1&&(ruleStartIndex=source.ruleText.indexOf(UBO_SCRIPTLET_MARKER));var rulePart=source.ruleText.slice(ruleStartIndex);prefix=\"\".concat(source.domainName).concat(rulePart)}var LOG_MARKER=\"log: \";message&&(-1===message.indexOf(LOG_MARKER)?log(\"\".concat(prefix,\" message:\\n\").concat(message)):log(message.slice(LOG_MARKER.length))),log(\"\".concat(prefix,\" trace start\")),trace&&trace(),log(\"\".concat(prefix,\" trace end\"))}catch(e){}\"function\"==typeof window.__debug&&window.__debug(source)}}(source),new ReferenceError(rid)};!function setChainPropAccess(owner,property){var chainInfo=getPropertyInChain(owner,property),base=chainInfo.base,prop=chainInfo.prop,chain=chainInfo.chain;chain?Object.defineProperty(owner,prop,{get:function(){return base},set:function(a){base=a,a instanceof Object&&setChainPropAccess(a,chain)}}):function(object,property,descriptor){var currentDescriptor=Object.getOwnPropertyDescriptor(object,property);if(currentDescriptor&&!currentDescriptor.configurable)return!1;Object.defineProperty(object,property,descriptor)}(base,prop,{get:abort,set:function(){}})}(window,property),window.onerror=function(rid){var nativeOnError=window.onerror;return function(error){if(\"string\"==typeof error&&-1!==error.indexOf(rid))return!0;if(nativeOnError instanceof Function){for(var _len=arguments.length,args=new Array(_len>1?_len-1:0),_key=1;_key<_len;_key++)args[_key-1]=arguments[_key];return nativeOnError.apply(this,[error].concat(args))}return!1}}(rid).bind()}}).apply(this,updatedArgs)}catch(e){console.log(e)}}"
+ "scriptlet": "function abortOnPropertyRead(source,args){function getPropertyInChain(base,chain){var pos=chain.indexOf(\".\");if(-1===pos)return{base:base,prop:chain};var prop=chain.slice(0,pos);if(null===base)return{base:base,prop:prop,chain:chain};var obj,nextBase=base[prop];return chain=chain.slice(pos+1),(base instanceof Object||\"object\"==typeof base)&&(obj=base,0===Object.keys(obj).length&&!obj.prototype)||null===nextBase?{base:base,prop:prop,chain:chain}:void 0!==nextBase?getPropertyInChain(nextBase,chain):(Object.defineProperty(base,prop,{configurable:!0}),{base:base,prop:prop,chain:chain})}var updatedArgs=args?[].concat(source).concat(args):[source];try{(function(source,property){if(property){var rid=Math.random().toString(36).slice(2,9),abort=function(){throw function(source){if(!0===source.verbose){try{var log=console.log.bind(console),trace=console.trace.bind(console),prefix=source.ruleText||\"\";if(source.domainName){var ruleStartIndex,AG_SCRIPTLET_MARKER=\"#%#//\",UBO_SCRIPTLET_MARKER=\"##+js\";source.ruleText.indexOf(AG_SCRIPTLET_MARKER)>-1?ruleStartIndex=source.ruleText.indexOf(AG_SCRIPTLET_MARKER):source.ruleText.indexOf(UBO_SCRIPTLET_MARKER)>-1&&(ruleStartIndex=source.ruleText.indexOf(UBO_SCRIPTLET_MARKER));var rulePart=source.ruleText.slice(ruleStartIndex);prefix=\"\".concat(source.domainName).concat(rulePart)}log(\"\".concat(prefix,\" trace start\")),trace&&trace(),log(\"\".concat(prefix,\" trace end\"))}catch(e){}\"function\"==typeof window.__debug&&window.__debug(source)}}(source),new ReferenceError(rid)};!function setChainPropAccess(owner,property){var chainInfo=getPropertyInChain(owner,property),base=chainInfo.base,prop=chainInfo.prop,chain=chainInfo.chain;chain?Object.defineProperty(owner,prop,{get:function(){return base},set:function(a){base=a,a instanceof Object&&setChainPropAccess(a,chain)}}):function(object,property,descriptor){var currentDescriptor=Object.getOwnPropertyDescriptor(object,property);if(currentDescriptor&&!currentDescriptor.configurable)return!1;Object.defineProperty(object,property,descriptor)}(base,prop,{get:abort,set:function(){}})}(window,property),window.onerror=function(rid){var nativeOnError=window.onerror;return function(error){if(\"string\"==typeof error&&-1!==error.indexOf(rid))return!0;if(nativeOnError instanceof Function){for(var _len=arguments.length,args=new Array(_len>1?_len-1:0),_key=1;_key<_len;_key++)args[_key-1]=arguments[_key];return nativeOnError.apply(this,[error].concat(args))}return!1}}(rid).bind()}}).apply(this,updatedArgs)}catch(e){console.log(e)}}"
},
{
"names": [
@@ -31,7 +31,7 @@
"ubo-aopw",
"abp-abort-on-property-write"
],
- "scriptlet": "function abortOnPropertyWrite(source,args){function getPropertyInChain(base,chain){var pos=chain.indexOf(\".\");if(-1===pos)return{base:base,prop:chain};var prop=chain.slice(0,pos);if(null===base)return{base:base,prop:prop,chain:chain};var obj,nextBase=base[prop];return chain=chain.slice(pos+1),(base instanceof Object||\"object\"==typeof base)&&(obj=base,0===Object.keys(obj).length)||null===nextBase?{base:base,prop:prop,chain:chain}:void 0!==nextBase?getPropertyInChain(nextBase,chain):(Object.defineProperty(base,prop,{configurable:!0}),{base:base,prop:prop,chain:chain})}var updatedArgs=args?[].concat(source).concat(args):[source];try{(function(source,property){if(property){var rid=Math.random().toString(36).substr(2,9),abort=function(){throw function(source,message){if(!0===source.verbose){try{var log=console.log.bind(console),trace=console.trace.bind(console),prefix=source.ruleText||\"\";if(source.domainName){var ruleStartIndex,AG_SCRIPTLET_MARKER=\"#%#//\",UBO_SCRIPTLET_MARKER=\"##+js\";source.ruleText.indexOf(AG_SCRIPTLET_MARKER)>-1?ruleStartIndex=source.ruleText.indexOf(AG_SCRIPTLET_MARKER):source.ruleText.indexOf(UBO_SCRIPTLET_MARKER)>-1&&(ruleStartIndex=source.ruleText.indexOf(UBO_SCRIPTLET_MARKER));var rulePart=source.ruleText.slice(ruleStartIndex);prefix=\"\".concat(source.domainName).concat(rulePart)}var LOG_MARKER=\"log: \";message&&(-1===message.indexOf(LOG_MARKER)?log(\"\".concat(prefix,\" message:\\n\").concat(message)):log(message.slice(LOG_MARKER.length))),log(\"\".concat(prefix,\" trace start\")),trace&&trace(),log(\"\".concat(prefix,\" trace end\"))}catch(e){}\"function\"==typeof window.__debug&&window.__debug(source)}}(source),new ReferenceError(rid)};!function setChainPropAccess(owner,property){var chainInfo=getPropertyInChain(owner,property),base=chainInfo.base,prop=chainInfo.prop,chain=chainInfo.chain;chain?Object.defineProperty(owner,prop,{get:function(){return base},set:function(a){base=a,a instanceof Object&&setChainPropAccess(a,chain)}}):function(object,property,descriptor){var currentDescriptor=Object.getOwnPropertyDescriptor(object,property);if(currentDescriptor&&!currentDescriptor.configurable)return!1;Object.defineProperty(object,property,descriptor)}(base,prop,{set:abort})}(window,property),window.onerror=function(rid){var nativeOnError=window.onerror;return function(error){if(\"string\"==typeof error&&-1!==error.indexOf(rid))return!0;if(nativeOnError instanceof Function){for(var _len=arguments.length,args=new Array(_len>1?_len-1:0),_key=1;_key<_len;_key++)args[_key-1]=arguments[_key];return nativeOnError.apply(this,[error].concat(args))}return!1}}(rid).bind()}}).apply(this,updatedArgs)}catch(e){console.log(e)}}"
+ "scriptlet": "function abortOnPropertyWrite(source,args){function getPropertyInChain(base,chain){var pos=chain.indexOf(\".\");if(-1===pos)return{base:base,prop:chain};var prop=chain.slice(0,pos);if(null===base)return{base:base,prop:prop,chain:chain};var obj,nextBase=base[prop];return chain=chain.slice(pos+1),(base instanceof Object||\"object\"==typeof base)&&(obj=base,0===Object.keys(obj).length&&!obj.prototype)||null===nextBase?{base:base,prop:prop,chain:chain}:void 0!==nextBase?getPropertyInChain(nextBase,chain):(Object.defineProperty(base,prop,{configurable:!0}),{base:base,prop:prop,chain:chain})}var updatedArgs=args?[].concat(source).concat(args):[source];try{(function(source,property){if(property){var rid=Math.random().toString(36).slice(2,9),abort=function(){throw function(source){if(!0===source.verbose){try{var log=console.log.bind(console),trace=console.trace.bind(console),prefix=source.ruleText||\"\";if(source.domainName){var ruleStartIndex,AG_SCRIPTLET_MARKER=\"#%#//\",UBO_SCRIPTLET_MARKER=\"##+js\";source.ruleText.indexOf(AG_SCRIPTLET_MARKER)>-1?ruleStartIndex=source.ruleText.indexOf(AG_SCRIPTLET_MARKER):source.ruleText.indexOf(UBO_SCRIPTLET_MARKER)>-1&&(ruleStartIndex=source.ruleText.indexOf(UBO_SCRIPTLET_MARKER));var rulePart=source.ruleText.slice(ruleStartIndex);prefix=\"\".concat(source.domainName).concat(rulePart)}log(\"\".concat(prefix,\" trace start\")),trace&&trace(),log(\"\".concat(prefix,\" trace end\"))}catch(e){}\"function\"==typeof window.__debug&&window.__debug(source)}}(source),new ReferenceError(rid)};!function setChainPropAccess(owner,property){var chainInfo=getPropertyInChain(owner,property),base=chainInfo.base,prop=chainInfo.prop,chain=chainInfo.chain;chain?Object.defineProperty(owner,prop,{get:function(){return base},set:function(a){base=a,a instanceof Object&&setChainPropAccess(a,chain)}}):function(object,property,descriptor){var currentDescriptor=Object.getOwnPropertyDescriptor(object,property);if(currentDescriptor&&!currentDescriptor.configurable)return!1;Object.defineProperty(object,property,descriptor)}(base,prop,{set:abort})}(window,property),window.onerror=function(rid){var nativeOnError=window.onerror;return function(error){if(\"string\"==typeof error&&-1!==error.indexOf(rid))return!0;if(nativeOnError instanceof Function){for(var _len=arguments.length,args=new Array(_len>1?_len-1:0),_key=1;_key<_len;_key++)args[_key-1]=arguments[_key];return nativeOnError.apply(this,[error].concat(args))}return!1}}(rid).bind()}}).apply(this,updatedArgs)}catch(e){console.log(e)}}"
},
{
"names": [
@@ -49,7 +49,7 @@
"ubo-std.js",
"ubo-std"
],
- "scriptlet": "function preventSetTimeout(source,args){function hit(source,message){if(!0===source.verbose){try{var log=console.log.bind(console),trace=console.trace.bind(console),prefix=source.ruleText||\"\";if(source.domainName){var ruleStartIndex;source.ruleText.indexOf(\"#%#//\")>-1?ruleStartIndex=source.ruleText.indexOf(\"#%#//\"):source.ruleText.indexOf(\"##+js\")>-1&&(ruleStartIndex=source.ruleText.indexOf(\"##+js\"));var rulePart=source.ruleText.slice(ruleStartIndex);prefix=\"\".concat(source.domainName).concat(rulePart)}message&&(-1===message.indexOf(\"log: \")?log(\"\".concat(prefix,\" message:\\n\").concat(message)):log(message.slice(\"log: \".length))),log(\"\".concat(prefix,\" trace start\")),trace&&trace(),log(\"\".concat(prefix,\" trace end\"))}catch(e){}\"function\"==typeof window.__debug&&window.__debug(source)}}function noopFunc(){}function isPreventionNeeded(_ref){var callback=_ref.callback,delay=_ref.delay,matchCallback=_ref.matchCallback,matchDelay=_ref.matchDelay;if(!function(callback){return callback instanceof Function||\"string\"==typeof callback}(callback))return!1;if(!function(match){var str=match;startsWith(match,\"!\")&&(str=match.slice(1));return function(input){var isValid,FORWARD_SLASH=\"/\",str=function(str){return str.replace(/[.*+?^${}()|[\\]\\\\]/g,\"\\\\$&\")}(input);input[0]===FORWARD_SLASH&&input[input.length-1]===FORWARD_SLASH&&(str=input.slice(1,-1));try{isValid=new RegExp(str),isValid=!0}catch(e){isValid=!1}return isValid}(str)}(matchCallback)||matchDelay&&!function(match){var str=match;startsWith(match,\"!\")&&(str=match.slice(1));var num=parseFloat(str);return!nativeIsNaN(num)&&function(num){return(Number.isFinite||window.isFinite)(num)}(num)}(matchDelay))return!1;var _parseMatchArg=function(match){var isInvertedMatch=startsWith(match,\"!\"),matchRegexp=function(){var input=arguments.length>0&&void 0!==arguments[0]?arguments[0]:\"\",DEFAULT_VALUE=\".?\",FORWARD_SLASH=\"/\";if(\"\"===input)return new RegExp(DEFAULT_VALUE);if(input[0]===FORWARD_SLASH&&input[input.length-1]===FORWARD_SLASH)return new RegExp(input.slice(1,-1));var escaped=input.replace(/[.*+?^${}()|[\\]\\\\]/g,\"\\\\$&\");return new RegExp(escaped)}(isInvertedMatch?match.slice(1):match);return{isInvertedMatch:isInvertedMatch,matchRegexp:matchRegexp}}(matchCallback),isInvertedMatch=_parseMatchArg.isInvertedMatch,matchRegexp=_parseMatchArg.matchRegexp,_parseDelayArg=function(delay){var isInvertedDelayMatch=startsWith(delay,\"!\"),delayValue=isInvertedDelayMatch?delay.slice(1):delay,delayMatch=nativeIsNaN(delayValue=parseInt(delayValue,10))?null:delayValue;return{isInvertedDelayMatch:isInvertedDelayMatch,delayMatch:delayMatch}}(matchDelay),isInvertedDelayMatch=_parseDelayArg.isInvertedDelayMatch,delayMatch=_parseDelayArg.delayMatch,callbackStr=String(callback);return null===delayMatch?matchRegexp.test(callbackStr)!==isInvertedMatch:matchCallback?matchRegexp.test(callbackStr)!==isInvertedMatch&&delay===delayMatch!==isInvertedDelayMatch:delay===delayMatch!==isInvertedDelayMatch}function logMessage(source,message){var forced=arguments.length>2&&void 0!==arguments[2]&&arguments[2];(forced||source.verbose)&&console.log(\"\".concat(source.name,\": \").concat(message))}function startsWith(str,prefix){return!!str&&0===str.indexOf(prefix)}function nativeIsNaN(num){return(Number.isNaN||window.isNaN)(num)}var updatedArgs=args?[].concat(source).concat(args):[source];try{(function(source,matchCallback,matchDelay){var isProxySupported=\"undefined\"!=typeof Proxy,nativeTimeout=window.setTimeout,shouldLog=void 0===matchCallback&&void 0===matchDelay,setTimeoutHandler={apply:function(target,thisArg,args){var callback=args[0],delay=args[1],shouldPrevent=!1;return shouldLog?(hit(source),logMessage(source,\"setTimeout(\".concat(String(callback),\", \").concat(delay,\")\"),!0)):shouldPrevent=isPreventionNeeded({callback:callback,delay:delay,matchCallback:matchCallback,matchDelay:matchDelay}),shouldPrevent&&(hit(source),args[0]=noopFunc),target.apply(thisArg,args)}};window.setTimeout=isProxySupported?new Proxy(window.setTimeout,setTimeoutHandler):function(callback,delay){var shouldPrevent=!1;if(shouldLog?(hit(source),logMessage(source,\"setTimeout(\".concat(String(callback),\", \").concat(delay,\")\"),!0)):shouldPrevent=isPreventionNeeded({callback:callback,delay:delay,matchCallback:matchCallback,matchDelay:matchDelay}),shouldPrevent)return hit(source),nativeTimeout(noopFunc,delay);for(var _len=arguments.length,args=new Array(_len>2?_len-2:0),_key=2;_key<_len;_key++)args[_key-2]=arguments[_key];return nativeTimeout.apply(window,[callback,delay].concat(args))}}).apply(this,updatedArgs)}catch(e){console.log(e)}}"
+ "scriptlet": "function preventSetTimeout(source,args){function hit(source){if(!0===source.verbose){try{var log=console.log.bind(console),trace=console.trace.bind(console),prefix=source.ruleText||\"\";if(source.domainName){var ruleStartIndex;source.ruleText.indexOf(\"#%#//\")>-1?ruleStartIndex=source.ruleText.indexOf(\"#%#//\"):source.ruleText.indexOf(\"##+js\")>-1&&(ruleStartIndex=source.ruleText.indexOf(\"##+js\"));var rulePart=source.ruleText.slice(ruleStartIndex);prefix=\"\".concat(source.domainName).concat(rulePart)}log(\"\".concat(prefix,\" trace start\")),trace&&trace(),log(\"\".concat(prefix,\" trace end\"))}catch(e){}\"function\"==typeof window.__debug&&window.__debug(source)}}function noopFunc(){}function isPreventionNeeded(_ref){var callback=_ref.callback,delay=_ref.delay,matchCallback=_ref.matchCallback,matchDelay=_ref.matchDelay;if(!function(callback){return callback instanceof Function||\"string\"==typeof callback}(callback))return!1;if(!function(match){var str=match;startsWith(match,\"!\")&&(str=match.slice(1));return function(input){var isValid,FORWARD_SLASH=\"/\",str=function(str){return str.replace(/[.*+?^${}()|[\\]\\\\]/g,\"\\\\$&\")}(input);input[0]===FORWARD_SLASH&&input[input.length-1]===FORWARD_SLASH&&(str=input.slice(1,-1));try{isValid=new RegExp(str),isValid=!0}catch(e){isValid=!1}return isValid}(str)}(matchCallback)||matchDelay&&!function(match){var str=match;startsWith(match,\"!\")&&(str=match.slice(1));var num=parseFloat(str);return!nativeIsNaN(num)&&function(num){return(Number.isFinite||window.isFinite)(num)}(num)}(matchDelay))return!1;var _parseMatchArg=function(match){var isInvertedMatch=startsWith(match,\"!\"),matchValue=isInvertedMatch?match.slice(1):match,matchRegexp=function(){var input=arguments.length>0&&void 0!==arguments[0]?arguments[0]:\"\",DEFAULT_VALUE=\".?\",FORWARD_SLASH=\"/\";if(\"\"===input)return new RegExp(DEFAULT_VALUE);if(input[0]===FORWARD_SLASH&&input[input.length-1]===FORWARD_SLASH)return new RegExp(input.slice(1,-1));var escaped=input.replace(/[.*+?^${}()|[\\]\\\\]/g,\"\\\\$&\");return new RegExp(escaped)}(matchValue);return{isInvertedMatch:isInvertedMatch,matchRegexp:matchRegexp}}(matchCallback),isInvertedMatch=_parseMatchArg.isInvertedMatch,matchRegexp=_parseMatchArg.matchRegexp,_parseDelayArg=function(delay){var isInvertedDelayMatch=startsWith(delay,\"!\"),delayValue=isInvertedDelayMatch?delay.slice(1):delay,delayMatch=nativeIsNaN(delayValue=parseInt(delayValue,10))?null:delayValue;return{isInvertedDelayMatch:isInvertedDelayMatch,delayMatch:delayMatch}}(matchDelay),isInvertedDelayMatch=_parseDelayArg.isInvertedDelayMatch,delayMatch=_parseDelayArg.delayMatch,callbackStr=String(callback);return null===delayMatch?matchRegexp.test(callbackStr)!==isInvertedMatch:matchCallback?matchRegexp.test(callbackStr)!==isInvertedMatch&&delay===delayMatch!==isInvertedDelayMatch:delay===delayMatch!==isInvertedDelayMatch}function logMessage(source,message){var forced=arguments.length>2&&void 0!==arguments[2]&&arguments[2];(forced||source.verbose)&&console.log(\"\".concat(source.name,\": \").concat(message))}function startsWith(str,prefix){return!!str&&0===str.indexOf(prefix)}function nativeIsNaN(num){return(Number.isNaN||window.isNaN)(num)}var updatedArgs=args?[].concat(source).concat(args):[source];try{(function(source,matchCallback,matchDelay){var isProxySupported=\"undefined\"!=typeof Proxy,nativeTimeout=window.setTimeout,shouldLog=void 0===matchCallback&&void 0===matchDelay,setTimeoutHandler={apply:function(target,thisArg,args){var callback=args[0],delay=args[1],shouldPrevent=!1;return shouldLog?(hit(source),logMessage(source,\"setTimeout(\".concat(String(callback),\", \").concat(delay,\")\"),!0)):shouldPrevent=isPreventionNeeded({callback:callback,delay:delay,matchCallback:matchCallback,matchDelay:matchDelay}),shouldPrevent&&(hit(source),args[0]=noopFunc),target.apply(thisArg,args)}};window.setTimeout=isProxySupported?new Proxy(window.setTimeout,setTimeoutHandler):function(callback,delay){var shouldPrevent=!1;if(shouldLog?(hit(source),logMessage(source,\"setTimeout(\".concat(String(callback),\", \").concat(delay,\")\"),!0)):shouldPrevent=isPreventionNeeded({callback:callback,delay:delay,matchCallback:matchCallback,matchDelay:matchDelay}),shouldPrevent)return hit(source),nativeTimeout(noopFunc,delay);for(var _len=arguments.length,args=new Array(_len>2?_len-2:0),_key=2;_key<_len;_key++)args[_key-2]=arguments[_key];return nativeTimeout.apply(window,[callback,delay].concat(args))}}).apply(this,updatedArgs)}catch(e){console.log(e)}}"
},
{
"names": [
@@ -67,7 +67,7 @@
"ubo-nosiif",
"ubo-sid"
],
- "scriptlet": "function preventSetInterval(source,args){function hit(source,message){if(!0===source.verbose){try{var log=console.log.bind(console),trace=console.trace.bind(console),prefix=source.ruleText||\"\";if(source.domainName){var ruleStartIndex;source.ruleText.indexOf(\"#%#//\")>-1?ruleStartIndex=source.ruleText.indexOf(\"#%#//\"):source.ruleText.indexOf(\"##+js\")>-1&&(ruleStartIndex=source.ruleText.indexOf(\"##+js\"));var rulePart=source.ruleText.slice(ruleStartIndex);prefix=\"\".concat(source.domainName).concat(rulePart)}message&&(-1===message.indexOf(\"log: \")?log(\"\".concat(prefix,\" message:\\n\").concat(message)):log(message.slice(\"log: \".length))),log(\"\".concat(prefix,\" trace start\")),trace&&trace(),log(\"\".concat(prefix,\" trace end\"))}catch(e){}\"function\"==typeof window.__debug&&window.__debug(source)}}function noopFunc(){}function isPreventionNeeded(_ref){var callback=_ref.callback,delay=_ref.delay,matchCallback=_ref.matchCallback,matchDelay=_ref.matchDelay;if(!function(callback){return callback instanceof Function||\"string\"==typeof callback}(callback))return!1;if(!function(match){var str=match;startsWith(match,\"!\")&&(str=match.slice(1));return function(input){var isValid,FORWARD_SLASH=\"/\",str=function(str){return str.replace(/[.*+?^${}()|[\\]\\\\]/g,\"\\\\$&\")}(input);input[0]===FORWARD_SLASH&&input[input.length-1]===FORWARD_SLASH&&(str=input.slice(1,-1));try{isValid=new RegExp(str),isValid=!0}catch(e){isValid=!1}return isValid}(str)}(matchCallback)||matchDelay&&!function(match){var str=match;startsWith(match,\"!\")&&(str=match.slice(1));var num=parseFloat(str);return!nativeIsNaN(num)&&function(num){return(Number.isFinite||window.isFinite)(num)}(num)}(matchDelay))return!1;var _parseMatchArg=function(match){var isInvertedMatch=startsWith(match,\"!\"),matchRegexp=function(){var input=arguments.length>0&&void 0!==arguments[0]?arguments[0]:\"\",DEFAULT_VALUE=\".?\",FORWARD_SLASH=\"/\";if(\"\"===input)return new RegExp(DEFAULT_VALUE);if(input[0]===FORWARD_SLASH&&input[input.length-1]===FORWARD_SLASH)return new RegExp(input.slice(1,-1));var escaped=input.replace(/[.*+?^${}()|[\\]\\\\]/g,\"\\\\$&\");return new RegExp(escaped)}(isInvertedMatch?match.slice(1):match);return{isInvertedMatch:isInvertedMatch,matchRegexp:matchRegexp}}(matchCallback),isInvertedMatch=_parseMatchArg.isInvertedMatch,matchRegexp=_parseMatchArg.matchRegexp,_parseDelayArg=function(delay){var isInvertedDelayMatch=startsWith(delay,\"!\"),delayValue=isInvertedDelayMatch?delay.slice(1):delay,delayMatch=nativeIsNaN(delayValue=parseInt(delayValue,10))?null:delayValue;return{isInvertedDelayMatch:isInvertedDelayMatch,delayMatch:delayMatch}}(matchDelay),isInvertedDelayMatch=_parseDelayArg.isInvertedDelayMatch,delayMatch=_parseDelayArg.delayMatch,callbackStr=String(callback);return null===delayMatch?matchRegexp.test(callbackStr)!==isInvertedMatch:matchCallback?matchRegexp.test(callbackStr)!==isInvertedMatch&&delay===delayMatch!==isInvertedDelayMatch:delay===delayMatch!==isInvertedDelayMatch}function logMessage(source,message){var forced=arguments.length>2&&void 0!==arguments[2]&&arguments[2];(forced||source.verbose)&&console.log(\"\".concat(source.name,\": \").concat(message))}function startsWith(str,prefix){return!!str&&0===str.indexOf(prefix)}function nativeIsNaN(num){return(Number.isNaN||window.isNaN)(num)}var updatedArgs=args?[].concat(source).concat(args):[source];try{(function(source,matchCallback,matchDelay){var isProxySupported=\"undefined\"!=typeof Proxy,nativeInterval=window.setInterval,shouldLog=void 0===matchCallback&&void 0===matchDelay,setIntervalHandler={apply:function(target,thisArg,args){var callback=args[0],delay=args[1],shouldPrevent=!1;return shouldLog?(hit(source),logMessage(source,\"setInterval(\".concat(String(callback),\", \").concat(delay,\")\"),!0)):shouldPrevent=isPreventionNeeded({callback:callback,delay:delay,matchCallback:matchCallback,matchDelay:matchDelay}),shouldPrevent&&(hit(source),args[0]=noopFunc),target.apply(thisArg,args)}};window.setInterval=isProxySupported?new Proxy(window.setInterval,setIntervalHandler):function(callback,delay){var shouldPrevent=!1;if(shouldLog?(hit(source),logMessage(source,\"setInterval(\".concat(String(callback),\", \").concat(delay,\")\"),!0)):shouldPrevent=isPreventionNeeded({callback:callback,delay:delay,matchCallback:matchCallback,matchDelay:matchDelay}),shouldPrevent)return hit(source),nativeInterval(noopFunc,delay);for(var _len=arguments.length,args=new Array(_len>2?_len-2:0),_key=2;_key<_len;_key++)args[_key-2]=arguments[_key];return nativeInterval.apply(window,[callback,delay].concat(args))}}).apply(this,updatedArgs)}catch(e){console.log(e)}}"
+ "scriptlet": "function preventSetInterval(source,args){function hit(source){if(!0===source.verbose){try{var log=console.log.bind(console),trace=console.trace.bind(console),prefix=source.ruleText||\"\";if(source.domainName){var ruleStartIndex;source.ruleText.indexOf(\"#%#//\")>-1?ruleStartIndex=source.ruleText.indexOf(\"#%#//\"):source.ruleText.indexOf(\"##+js\")>-1&&(ruleStartIndex=source.ruleText.indexOf(\"##+js\"));var rulePart=source.ruleText.slice(ruleStartIndex);prefix=\"\".concat(source.domainName).concat(rulePart)}log(\"\".concat(prefix,\" trace start\")),trace&&trace(),log(\"\".concat(prefix,\" trace end\"))}catch(e){}\"function\"==typeof window.__debug&&window.__debug(source)}}function noopFunc(){}function isPreventionNeeded(_ref){var callback=_ref.callback,delay=_ref.delay,matchCallback=_ref.matchCallback,matchDelay=_ref.matchDelay;if(!function(callback){return callback instanceof Function||\"string\"==typeof callback}(callback))return!1;if(!function(match){var str=match;startsWith(match,\"!\")&&(str=match.slice(1));return function(input){var isValid,FORWARD_SLASH=\"/\",str=function(str){return str.replace(/[.*+?^${}()|[\\]\\\\]/g,\"\\\\$&\")}(input);input[0]===FORWARD_SLASH&&input[input.length-1]===FORWARD_SLASH&&(str=input.slice(1,-1));try{isValid=new RegExp(str),isValid=!0}catch(e){isValid=!1}return isValid}(str)}(matchCallback)||matchDelay&&!function(match){var str=match;startsWith(match,\"!\")&&(str=match.slice(1));var num=parseFloat(str);return!nativeIsNaN(num)&&function(num){return(Number.isFinite||window.isFinite)(num)}(num)}(matchDelay))return!1;var _parseMatchArg=function(match){var isInvertedMatch=startsWith(match,\"!\"),matchValue=isInvertedMatch?match.slice(1):match,matchRegexp=function(){var input=arguments.length>0&&void 0!==arguments[0]?arguments[0]:\"\",DEFAULT_VALUE=\".?\",FORWARD_SLASH=\"/\";if(\"\"===input)return new RegExp(DEFAULT_VALUE);if(input[0]===FORWARD_SLASH&&input[input.length-1]===FORWARD_SLASH)return new RegExp(input.slice(1,-1));var escaped=input.replace(/[.*+?^${}()|[\\]\\\\]/g,\"\\\\$&\");return new RegExp(escaped)}(matchValue);return{isInvertedMatch:isInvertedMatch,matchRegexp:matchRegexp}}(matchCallback),isInvertedMatch=_parseMatchArg.isInvertedMatch,matchRegexp=_parseMatchArg.matchRegexp,_parseDelayArg=function(delay){var isInvertedDelayMatch=startsWith(delay,\"!\"),delayValue=isInvertedDelayMatch?delay.slice(1):delay,delayMatch=nativeIsNaN(delayValue=parseInt(delayValue,10))?null:delayValue;return{isInvertedDelayMatch:isInvertedDelayMatch,delayMatch:delayMatch}}(matchDelay),isInvertedDelayMatch=_parseDelayArg.isInvertedDelayMatch,delayMatch=_parseDelayArg.delayMatch,callbackStr=String(callback);return null===delayMatch?matchRegexp.test(callbackStr)!==isInvertedMatch:matchCallback?matchRegexp.test(callbackStr)!==isInvertedMatch&&delay===delayMatch!==isInvertedDelayMatch:delay===delayMatch!==isInvertedDelayMatch}function logMessage(source,message){var forced=arguments.length>2&&void 0!==arguments[2]&&arguments[2];(forced||source.verbose)&&console.log(\"\".concat(source.name,\": \").concat(message))}function startsWith(str,prefix){return!!str&&0===str.indexOf(prefix)}function nativeIsNaN(num){return(Number.isNaN||window.isNaN)(num)}var updatedArgs=args?[].concat(source).concat(args):[source];try{(function(source,matchCallback,matchDelay){var isProxySupported=\"undefined\"!=typeof Proxy,nativeInterval=window.setInterval,shouldLog=void 0===matchCallback&&void 0===matchDelay,setIntervalHandler={apply:function(target,thisArg,args){var callback=args[0],delay=args[1],shouldPrevent=!1;return shouldLog?(hit(source),logMessage(source,\"setInterval(\".concat(String(callback),\", \").concat(delay,\")\"),!0)):shouldPrevent=isPreventionNeeded({callback:callback,delay:delay,matchCallback:matchCallback,matchDelay:matchDelay}),shouldPrevent&&(hit(source),args[0]=noopFunc),target.apply(thisArg,args)}};window.setInterval=isProxySupported?new Proxy(window.setInterval,setIntervalHandler):function(callback,delay){var shouldPrevent=!1;if(shouldLog?(hit(source),logMessage(source,\"setInterval(\".concat(String(callback),\", \").concat(delay,\")\"),!0)):shouldPrevent=isPreventionNeeded({callback:callback,delay:delay,matchCallback:matchCallback,matchDelay:matchDelay}),shouldPrevent)return hit(source),nativeInterval(noopFunc,delay);for(var _len=arguments.length,args=new Array(_len>2?_len-2:0),_key=2;_key<_len;_key++)args[_key-2]=arguments[_key];return nativeInterval.apply(window,[callback,delay].concat(args))}}).apply(this,updatedArgs)}catch(e){console.log(e)}}"
},
{
"names": [
@@ -79,7 +79,7 @@
"ubo-nowoif.js",
"ubo-nowoif"
],
- "scriptlet": "function preventWindowOpen(source,args){function hit(source,message){if(!0===source.verbose){try{var log=console.log.bind(console),trace=console.trace.bind(console),prefix=source.ruleText||\"\";if(source.domainName){var ruleStartIndex;source.ruleText.indexOf(\"#%#//\")>-1?ruleStartIndex=source.ruleText.indexOf(\"#%#//\"):source.ruleText.indexOf(\"##+js\")>-1&&(ruleStartIndex=source.ruleText.indexOf(\"##+js\"));var rulePart=source.ruleText.slice(ruleStartIndex);prefix=\"\".concat(source.domainName).concat(rulePart)}message&&(-1===message.indexOf(\"log: \")?log(\"\".concat(prefix,\" message:\\n\").concat(message)):log(message.slice(\"log: \".length))),log(\"\".concat(prefix,\" trace start\")),trace&&trace(),log(\"\".concat(prefix,\" trace end\"))}catch(e){}\"function\"==typeof window.__debug&&window.__debug(source)}}function isValidStrPattern(input){var isValid,str=function(str){return str.replace(/[.*+?^${}()|[\\]\\\\]/g,\"\\\\$&\")}(input);\"/\"===input[0]&&\"/\"===input[input.length-1]&&(str=input.slice(1,-1));try{isValid=new RegExp(str),isValid=!0}catch(e){isValid=!1}return isValid}function isValidMatchStr(match){var str=match;return startsWith(match,\"!\")&&(str=match.slice(1)),isValidStrPattern(str)}function toRegExp(){var input=arguments.length>0&&void 0!==arguments[0]?arguments[0]:\"\",DEFAULT_VALUE=\".?\",FORWARD_SLASH=\"/\";if(\"\"===input)return new RegExp(DEFAULT_VALUE);if(input[0]===FORWARD_SLASH&&input[input.length-1]===FORWARD_SLASH)return new RegExp(input.slice(1,-1));var escaped=input.replace(/[.*+?^${}()|[\\]\\\\]/g,\"\\\\$&\");return new RegExp(escaped)}function nativeIsNaN(num){return(Number.isNaN||window.isNaN)(num)}function parseMatchArg(match){var isInvertedMatch=startsWith(match,\"!\");return{isInvertedMatch:isInvertedMatch,matchRegexp:toRegExp(isInvertedMatch?match.slice(1):match)}}function handleOldReplacement(replacement){var result,str,ending;if(replacement){if(\"trueFunc\"===replacement)result=trueFunc;else if(replacement.indexOf(\"=\")>-1){if(startsWith(replacement,\"{\")&&(ending=\"}\",!!(str=replacement)&&str.lastIndexOf(ending)===str.length-ending.length)){var propertyPart=replacement.slice(1,-1),propertyName=function(str,separator){if(!str||!separator)return str;var index=str.indexOf(separator);return index<0?str:str.substring(0,index)}(propertyPart,\"=\"),propertyValue=function(str,separator){if(!str)return str;var index=str.indexOf(separator);return index<0?\"\":str.substring(index+separator.length)}(propertyPart,\"=\");\"noopFunc\"===propertyValue&&((result={})[propertyName]=noopFunc)}}}else result=noopFunc;return result}function createDecoy(args){var tag,urlProp,replacement=args.replacement,url=args.url,delay=args.delay;\"obj\"===replacement?(tag=\"object\",urlProp=\"data\"):(tag=\"iframe\",urlProp=\"src\");var decoy=document.createElement(tag);return decoy[urlProp]=url,decoy.style.setProperty(\"height\",\"1px\",\"important\"),decoy.style.setProperty(\"position\",\"fixed\",\"important\"),decoy.style.setProperty(\"top\",\"-1px\",\"important\"),decoy.style.setProperty(\"width\",\"1px\",\"important\"),document.body.appendChild(decoy),setTimeout((function(){return decoy.remove()}),1e3*delay),decoy}function getPreventGetter(nativeGetter){return function(target,prop){return(!prop||\"closed\"!==prop)&&(\"function\"==typeof nativeGetter?noopFunc:prop&&target[prop])}}function logMessage(source,message){var forced=arguments.length>2&&void 0!==arguments[2]&&arguments[2];(forced||source.verbose)&&console.log(\"\".concat(source.name,\": \").concat(message))}function noopFunc(){}function trueFunc(){return!0}function startsWith(str,prefix){return!!str&&0===str.indexOf(prefix)}var updatedArgs=args?[].concat(source).concat(args):[source];try{(function(source){var match=arguments.length>1&&void 0!==arguments[1]?arguments[1]:\"*\",delay=arguments.length>2?arguments[2]:void 0,replacement=arguments.length>3?arguments[3]:void 0,nativeOpen=window.open,isNewSyntax=\"0\"!==match&&\"1\"!==match,oldOpenWrapper=function(str){match=Number(match)>0;for(var _len=arguments.length,args=new Array(_len>1?_len-1:0),_key=1;_key<_len;_key++)args[_key-1]=arguments[_key];if(!isValidStrPattern(delay))return logMessage(source,\"Invalid parameter: \".concat(delay)),nativeOpen.apply(window,[str].concat(args));var searchRegexp=toRegExp(delay);return match!==searchRegexp.test(str)?nativeOpen.apply(window,[str].concat(args)):(hit(source),handleOldReplacement(replacement))},newOpenWrapper=function(url){for(var shouldLog=replacement&&replacement.indexOf(\"log\")>-1,_len2=arguments.length,args=new Array(_len2>1?_len2-1:0),_key2=1;_key2<_len2;_key2++)args[_key2-1]=arguments[_key2];if(shouldLog){var argsStr=args&&args.length>0?\", \".concat(args.join(\", \")):\"\",message=\"window-open: \".concat(url).concat(argsStr);logMessage(source,message,!0),hit(source)}var shouldPrevent=!1;if(\"*\"===match)shouldPrevent=!0;else if(isValidMatchStr(match)){var _parseMatchArg=parseMatchArg(match),isInvertedMatch=_parseMatchArg.isInvertedMatch;shouldPrevent=_parseMatchArg.matchRegexp.test(url)!==isInvertedMatch}else logMessage(source,\"Invalid parameter: \".concat(match)),shouldPrevent=!1;if(shouldPrevent){var result,parsedDelay=parseInt(delay,10);if(nativeIsNaN(parsedDelay))result=null;else{var decoy=createDecoy({replacement:replacement,url:url,delay:parsedDelay}),popup=decoy.contentWindow;if(\"object\"==typeof popup&&null!==popup)Object.defineProperty(popup,\"closed\",{value:!1}),Object.defineProperty(popup,\"opener\",{value:window}),Object.defineProperty(popup,\"frameElement\",{value:null});else{var nativeGetter=decoy.contentWindow&&decoy.contentWindow.get;Object.defineProperty(decoy,\"contentWindow\",{get:getPreventGetter(nativeGetter)}),popup=decoy.contentWindow}result=popup}return hit(source),result}return nativeOpen.apply(window,[url].concat(args))};window.open=isNewSyntax?newOpenWrapper:oldOpenWrapper,window.open.toString=nativeOpen.toString.bind(nativeOpen)}).apply(this,updatedArgs)}catch(e){console.log(e)}}"
+ "scriptlet": "function preventWindowOpen(source,args){function hit(source){if(!0===source.verbose){try{var log=console.log.bind(console),trace=console.trace.bind(console),prefix=source.ruleText||\"\";if(source.domainName){var ruleStartIndex;source.ruleText.indexOf(\"#%#//\")>-1?ruleStartIndex=source.ruleText.indexOf(\"#%#//\"):source.ruleText.indexOf(\"##+js\")>-1&&(ruleStartIndex=source.ruleText.indexOf(\"##+js\"));var rulePart=source.ruleText.slice(ruleStartIndex);prefix=\"\".concat(source.domainName).concat(rulePart)}log(\"\".concat(prefix,\" trace start\")),trace&&trace(),log(\"\".concat(prefix,\" trace end\"))}catch(e){}\"function\"==typeof window.__debug&&window.__debug(source)}}function isValidStrPattern(input){var isValid,str=function(str){return str.replace(/[.*+?^${}()|[\\]\\\\]/g,\"\\\\$&\")}(input);\"/\"===input[0]&&\"/\"===input[input.length-1]&&(str=input.slice(1,-1));try{isValid=new RegExp(str),isValid=!0}catch(e){isValid=!1}return isValid}function isValidMatchStr(match){var str=match;return startsWith(match,\"!\")&&(str=match.slice(1)),isValidStrPattern(str)}function toRegExp(){var input=arguments.length>0&&void 0!==arguments[0]?arguments[0]:\"\",DEFAULT_VALUE=\".?\",FORWARD_SLASH=\"/\";if(\"\"===input)return new RegExp(DEFAULT_VALUE);if(input[0]===FORWARD_SLASH&&input[input.length-1]===FORWARD_SLASH)return new RegExp(input.slice(1,-1));var escaped=input.replace(/[.*+?^${}()|[\\]\\\\]/g,\"\\\\$&\");return new RegExp(escaped)}function nativeIsNaN(num){return(Number.isNaN||window.isNaN)(num)}function parseMatchArg(match){var isInvertedMatch=startsWith(match,\"!\");return{isInvertedMatch:isInvertedMatch,matchRegexp:toRegExp(isInvertedMatch?match.slice(1):match)}}function handleOldReplacement(replacement){var result,str,ending;if(replacement){if(\"trueFunc\"===replacement)result=trueFunc;else if(replacement.indexOf(\"=\")>-1){if(startsWith(replacement,\"{\")&&(ending=\"}\",!!(str=replacement)&&str.lastIndexOf(ending)===str.length-ending.length)){var propertyPart=replacement.slice(1,-1),propertyName=function(str,separator){if(!str||!separator)return str;var index=str.indexOf(separator);return index<0?str:str.substring(0,index)}(propertyPart,\"=\"),propertyValue=function(str,separator){if(!str)return str;var index=str.indexOf(separator);return index<0?\"\":str.substring(index+separator.length)}(propertyPart,\"=\");\"noopFunc\"===propertyValue&&((result={})[propertyName]=noopFunc)}}}else result=noopFunc;return result}function createDecoy(args){var tag,urlProp,replacement=args.replacement,url=args.url,delay=args.delay;\"obj\"===replacement?(tag=\"object\",urlProp=\"data\"):(tag=\"iframe\",urlProp=\"src\");var decoy=document.createElement(tag);return decoy[urlProp]=url,decoy.style.setProperty(\"height\",\"1px\",\"important\"),decoy.style.setProperty(\"position\",\"fixed\",\"important\"),decoy.style.setProperty(\"top\",\"-1px\",\"important\"),decoy.style.setProperty(\"width\",\"1px\",\"important\"),document.body.appendChild(decoy),setTimeout((function(){return decoy.remove()}),1e3*delay),decoy}function getPreventGetter(nativeGetter){return function(target,prop){return(!prop||\"closed\"!==prop)&&(\"function\"==typeof nativeGetter?noopFunc:prop&&target[prop])}}function logMessage(source,message){var forced=arguments.length>2&&void 0!==arguments[2]&&arguments[2];(forced||source.verbose)&&console.log(\"\".concat(source.name,\": \").concat(message))}function noopFunc(){}function trueFunc(){return!0}function startsWith(str,prefix){return!!str&&0===str.indexOf(prefix)}var updatedArgs=args?[].concat(source).concat(args):[source];try{(function(source){var match=arguments.length>1&&void 0!==arguments[1]?arguments[1]:\"*\",delay=arguments.length>2?arguments[2]:void 0,replacement=arguments.length>3?arguments[3]:void 0,nativeOpen=window.open,isNewSyntax=\"0\"!==match&&\"1\"!==match,oldOpenWrapper=function(str){match=Number(match)>0;for(var _len=arguments.length,args=new Array(_len>1?_len-1:0),_key=1;_key<_len;_key++)args[_key-1]=arguments[_key];if(!isValidStrPattern(delay))return logMessage(source,\"Invalid parameter: \".concat(delay)),nativeOpen.apply(window,[str].concat(args));var searchRegexp=toRegExp(delay);return match!==searchRegexp.test(str)?nativeOpen.apply(window,[str].concat(args)):(hit(source),handleOldReplacement(replacement))},newOpenWrapper=function(url){for(var shouldLog=replacement&&replacement.indexOf(\"log\")>-1,_len2=arguments.length,args=new Array(_len2>1?_len2-1:0),_key2=1;_key2<_len2;_key2++)args[_key2-1]=arguments[_key2];if(shouldLog){var argsStr=args&&args.length>0?\", \".concat(args.join(\", \")):\"\",message=\"\".concat(url).concat(argsStr);logMessage(source,message,!0),hit(source)}var shouldPrevent=!1;if(\"*\"===match)shouldPrevent=!0;else if(isValidMatchStr(match)){var _parseMatchArg=parseMatchArg(match),isInvertedMatch=_parseMatchArg.isInvertedMatch;shouldPrevent=_parseMatchArg.matchRegexp.test(url)!==isInvertedMatch}else logMessage(source,\"Invalid parameter: \".concat(match)),shouldPrevent=!1;if(shouldPrevent){var result,parsedDelay=parseInt(delay,10);if(nativeIsNaN(parsedDelay))result=null;else{var decoy=createDecoy({replacement:replacement,url:url,delay:parsedDelay}),popup=decoy.contentWindow;if(\"object\"==typeof popup&&null!==popup)Object.defineProperty(popup,\"closed\",{value:!1}),Object.defineProperty(popup,\"opener\",{value:window}),Object.defineProperty(popup,\"frameElement\",{value:null});else{var nativeGetter=decoy.contentWindow&&decoy.contentWindow.get;Object.defineProperty(decoy,\"contentWindow\",{get:getPreventGetter(nativeGetter)}),popup=decoy.contentWindow}result=popup}return hit(source),result}return nativeOpen.apply(window,[url].concat(args))};window.open=isNewSyntax?newOpenWrapper:oldOpenWrapper,window.open.toString=nativeOpen.toString.bind(nativeOpen)}).apply(this,updatedArgs)}catch(e){console.log(e)}}"
},
{
"names": [
@@ -98,7 +98,7 @@
"ubo-acis",
"abp-abort-current-inline-script"
],
- "scriptlet": "function abortCurrentInlineScript(source,args){function randomId(){return Math.random().toString(36).substr(2,9)}function getPropertyInChain(base,chain){var pos=chain.indexOf(\".\");if(-1===pos)return{base:base,prop:chain};var prop=chain.slice(0,pos);if(null===base)return{base:base,prop:prop,chain:chain};var obj,nextBase=base[prop];return chain=chain.slice(pos+1),(base instanceof Object||\"object\"==typeof base)&&(obj=base,0===Object.keys(obj).length)||null===nextBase?{base:base,prop:prop,chain:chain}:void 0!==nextBase?getPropertyInChain(nextBase,chain):(Object.defineProperty(base,prop,{configurable:!0}),{base:base,prop:prop,chain:chain})}var updatedArgs=args?[].concat(source).concat(args):[source];try{(function(source,property,search){var searchRegexp=function(){var input=arguments.length>0&&void 0!==arguments[0]?arguments[0]:\"\",FORWARD_SLASH=\"/\";if(\"\"===input)return new RegExp(\".?\");if(input[0]===FORWARD_SLASH&&input[input.length-1]===FORWARD_SLASH)return new RegExp(input.slice(1,-1));var escaped=input.replace(/[.*+?^${}()|[\\]\\\\]/g,\"\\\\$&\");return new RegExp(escaped)}(search),rid=randomId(),getCurrentScript=function(){if(\"currentScript\"in document)return document.currentScript;var scripts=document.getElementsByTagName(\"script\");return scripts[scripts.length-1]},ourScript=getCurrentScript(),abort=function(){var scriptEl=getCurrentScript();if(scriptEl){var str,prefix,content=scriptEl.textContent;try{content=Object.getOwnPropertyDescriptor(Node.prototype,\"textContent\").get.call(scriptEl)}catch(e){}if(0===content.length&&void 0!==scriptEl.src&&(prefix=\"data:text/javascript;base64,\",(str=scriptEl.src)&&0===str.indexOf(prefix))){var encodedContent=scriptEl.src.slice(\"data:text/javascript;base64,\".length);content=window.atob(encodedContent)}if(scriptEl instanceof HTMLScriptElement&&content.length>0&&scriptEl!==ourScript&&searchRegexp.test(content))throw function(source,message){if(!0===source.verbose){try{var log=console.log.bind(console),trace=console.trace.bind(console),prefix=source.ruleText||\"\";if(source.domainName){var ruleStartIndex,AG_SCRIPTLET_MARKER=\"#%#//\",UBO_SCRIPTLET_MARKER=\"##+js\";source.ruleText.indexOf(AG_SCRIPTLET_MARKER)>-1?ruleStartIndex=source.ruleText.indexOf(AG_SCRIPTLET_MARKER):source.ruleText.indexOf(UBO_SCRIPTLET_MARKER)>-1&&(ruleStartIndex=source.ruleText.indexOf(UBO_SCRIPTLET_MARKER));var rulePart=source.ruleText.slice(ruleStartIndex);prefix=\"\".concat(source.domainName).concat(rulePart)}var LOG_MARKER=\"log: \";message&&(-1===message.indexOf(LOG_MARKER)?log(\"\".concat(prefix,\" message:\\n\").concat(message)):log(message.slice(LOG_MARKER.length))),log(\"\".concat(prefix,\" trace start\")),trace&&trace(),log(\"\".concat(prefix,\" trace end\"))}catch(e){}\"function\"==typeof window.__debug&&window.__debug(source)}}(source),new ReferenceError(rid)}};!function setChainPropAccess(owner,property){var chainInfo=getPropertyInChain(owner,property),base=chainInfo.base,prop=chainInfo.prop,chain=chainInfo.chain;if(base instanceof Object!=0||null!==base)if(chain)Object.defineProperty(owner,prop,{get:function(){return base},set:function(a){base=a,a instanceof Object&&setChainPropAccess(a,chain)}});else{var currentValue=base[prop],origDescriptor=Object.getOwnPropertyDescriptor(base,prop);origDescriptor instanceof Object!=0&&origDescriptor.get instanceof Function!=0||(currentValue=base[prop],origDescriptor=void 0);var descriptorWrapper=Object.assign({isAbortingSuspended:!1,isolateCallback:function(cb){this.isAbortingSuspended=!0;try{for(var _len=arguments.length,args=new Array(_len>1?_len-1:0),_key=1;_key<_len;_key++)args[_key-1]=arguments[_key];var result=cb.apply(void 0,args);return this.isAbortingSuspended=!1,result}catch(_unused){var rid=randomId();throw this.isAbortingSuspended=!1,new ReferenceError(rid)}}},{currentValue:currentValue,get:function(){return this.isAbortingSuspended||this.isolateCallback(abort),origDescriptor instanceof Object?origDescriptor.get.call(base):this.currentValue},set:function(newValue){this.isAbortingSuspended||this.isolateCallback(abort),origDescriptor instanceof Object?origDescriptor.set.call(base,newValue):this.currentValue=newValue}});!function(object,property,descriptor){var currentDescriptor=Object.getOwnPropertyDescriptor(object,property);if(currentDescriptor&&!currentDescriptor.configurable)return!1;Object.defineProperty(object,property,descriptor)}(base,prop,{get:function(){return descriptorWrapper.get.call(descriptorWrapper)},set:function(newValue){descriptorWrapper.set.call(descriptorWrapper,newValue)}})}else{var props=property.split(\".\"),propIndex=props.indexOf(prop),baseName=props[propIndex-1],message=\"The scriptlet had been executed before the \".concat(baseName,\" was loaded.\");!function(source,message){(arguments.length>2&&void 0!==arguments[2]&&arguments[2]||source.verbose)&&console.log(\"\".concat(source.name,\": \").concat(message))}(source,message)}}(window,property),window.onerror=function(rid){var nativeOnError=window.onerror;return function(error){if(\"string\"==typeof error&&-1!==error.indexOf(rid))return!0;if(nativeOnError instanceof Function){for(var _len=arguments.length,args=new Array(_len>1?_len-1:0),_key=1;_key<_len;_key++)args[_key-1]=arguments[_key];return nativeOnError.apply(this,[error].concat(args))}return!1}}(rid).bind()}).apply(this,updatedArgs)}catch(e){console.log(e)}}"
+ "scriptlet": "function abortCurrentInlineScript(source,args){function randomId(){return Math.random().toString(36).slice(2,9)}function getPropertyInChain(base,chain){var pos=chain.indexOf(\".\");if(-1===pos)return{base:base,prop:chain};var prop=chain.slice(0,pos);if(null===base)return{base:base,prop:prop,chain:chain};var obj,nextBase=base[prop];return chain=chain.slice(pos+1),(base instanceof Object||\"object\"==typeof base)&&(obj=base,0===Object.keys(obj).length&&!obj.prototype)||null===nextBase?{base:base,prop:prop,chain:chain}:void 0!==nextBase?getPropertyInChain(nextBase,chain):(Object.defineProperty(base,prop,{configurable:!0}),{base:base,prop:prop,chain:chain})}var updatedArgs=args?[].concat(source).concat(args):[source];try{(function(source,property,search){var searchRegexp=function(){var input=arguments.length>0&&void 0!==arguments[0]?arguments[0]:\"\",FORWARD_SLASH=\"/\";if(\"\"===input)return new RegExp(\".?\");if(input[0]===FORWARD_SLASH&&input[input.length-1]===FORWARD_SLASH)return new RegExp(input.slice(1,-1));var escaped=input.replace(/[.*+?^${}()|[\\]\\\\]/g,\"\\\\$&\");return new RegExp(escaped)}(search),rid=randomId(),getCurrentScript=function(){if(\"currentScript\"in document)return document.currentScript;var scripts=document.getElementsByTagName(\"script\");return scripts[scripts.length-1]},ourScript=getCurrentScript(),abort=function(){var scriptEl=getCurrentScript();if(scriptEl){var str,prefix,content=scriptEl.textContent;try{content=Object.getOwnPropertyDescriptor(Node.prototype,\"textContent\").get.call(scriptEl)}catch(e){}if(0===content.length&&void 0!==scriptEl.src&&(prefix=\"data:text/javascript;base64,\",(str=scriptEl.src)&&0===str.indexOf(prefix))){var encodedContent=scriptEl.src.slice(\"data:text/javascript;base64,\".length);content=window.atob(encodedContent)}if(scriptEl instanceof HTMLScriptElement&&content.length>0&&scriptEl!==ourScript&&searchRegexp.test(content))throw function(source){if(!0===source.verbose){try{var log=console.log.bind(console),trace=console.trace.bind(console),prefix=source.ruleText||\"\";if(source.domainName){var ruleStartIndex,AG_SCRIPTLET_MARKER=\"#%#//\",UBO_SCRIPTLET_MARKER=\"##+js\";source.ruleText.indexOf(AG_SCRIPTLET_MARKER)>-1?ruleStartIndex=source.ruleText.indexOf(AG_SCRIPTLET_MARKER):source.ruleText.indexOf(UBO_SCRIPTLET_MARKER)>-1&&(ruleStartIndex=source.ruleText.indexOf(UBO_SCRIPTLET_MARKER));var rulePart=source.ruleText.slice(ruleStartIndex);prefix=\"\".concat(source.domainName).concat(rulePart)}log(\"\".concat(prefix,\" trace start\")),trace&&trace(),log(\"\".concat(prefix,\" trace end\"))}catch(e){}\"function\"==typeof window.__debug&&window.__debug(source)}}(source),new ReferenceError(rid)}};!function setChainPropAccess(owner,property){var chainInfo=getPropertyInChain(owner,property),base=chainInfo.base,prop=chainInfo.prop,chain=chainInfo.chain;if(base instanceof Object!=0||null!==base)if(chain)Object.defineProperty(owner,prop,{get:function(){return base},set:function(a){base=a,a instanceof Object&&setChainPropAccess(a,chain)}});else{var currentValue=base[prop],origDescriptor=Object.getOwnPropertyDescriptor(base,prop);origDescriptor instanceof Object!=0&&origDescriptor.get instanceof Function!=0||(currentValue=base[prop],origDescriptor=void 0);var descriptorWrapper=Object.assign({isAbortingSuspended:!1,isolateCallback:function(cb){this.isAbortingSuspended=!0;try{for(var _len=arguments.length,args=new Array(_len>1?_len-1:0),_key=1;_key<_len;_key++)args[_key-1]=arguments[_key];var result=cb.apply(void 0,args);return this.isAbortingSuspended=!1,result}catch(_unused){var rid=randomId();throw this.isAbortingSuspended=!1,new ReferenceError(rid)}}},{currentValue:currentValue,get:function(){return this.isAbortingSuspended||this.isolateCallback(abort),origDescriptor instanceof Object?origDescriptor.get.call(base):this.currentValue},set:function(newValue){this.isAbortingSuspended||this.isolateCallback(abort),origDescriptor instanceof Object?origDescriptor.set.call(base,newValue):this.currentValue=newValue}});!function(object,property,descriptor){var currentDescriptor=Object.getOwnPropertyDescriptor(object,property);if(currentDescriptor&&!currentDescriptor.configurable)return!1;Object.defineProperty(object,property,descriptor)}(base,prop,{get:function(){return descriptorWrapper.get.call(descriptorWrapper)},set:function(newValue){descriptorWrapper.set.call(descriptorWrapper,newValue)}})}else{var props=property.split(\".\"),propIndex=props.indexOf(prop),baseName=props[propIndex-1],message=\"The scriptlet had been executed before the \".concat(baseName,\" was loaded.\");!function(source,message){(arguments.length>2&&void 0!==arguments[2]&&arguments[2]||source.verbose)&&console.log(\"\".concat(source.name,\": \").concat(message))}(source,message)}}(window,property),window.onerror=function(rid){var nativeOnError=window.onerror;return function(error){if(\"string\"==typeof error&&-1!==error.indexOf(rid))return!0;if(nativeOnError instanceof Function){for(var _len=arguments.length,args=new Array(_len>1?_len-1:0),_key=1;_key<_len;_key++)args[_key-1]=arguments[_key];return nativeOnError.apply(this,[error].concat(args))}return!1}}(rid).bind()}).apply(this,updatedArgs)}catch(e){console.log(e)}}"
},
{
"names": [
@@ -111,7 +111,7 @@
"ubo-set",
"abp-override-property-read"
],
- "scriptlet": "function setConstant(source,args){function noopFunc(){}function trueFunc(){return!0}function falseFunc(){return!1}function noopPromiseReject(){return Promise.reject()}function noopPromiseResolve(){var responseBody=arguments.length>0&&void 0!==arguments[0]?arguments[0]:\"{}\",responseUrl=arguments.length>1&&void 0!==arguments[1]?arguments[1]:\"\",responseType=arguments.length>2&&void 0!==arguments[2]?arguments[2]:\"default\";if(\"undefined\"!=typeof Response){var response=new Response(responseBody,{status:200,statusText:\"OK\"});return Object.defineProperties(response,{url:{value:responseUrl},type:{value:responseType}}),Promise.resolve(response)}}function getPropertyInChain(base,chain){var pos=chain.indexOf(\".\");if(-1===pos)return{base:base,prop:chain};var prop=chain.slice(0,pos);if(null===base)return{base:base,prop:prop,chain:chain};var nextBase=base[prop];return chain=chain.slice(pos+1),(base instanceof Object||\"object\"==typeof base)&&isEmptyObject(base)||null===nextBase?{base:base,prop:prop,chain:chain}:void 0!==nextBase?getPropertyInChain(nextBase,chain):(Object.defineProperty(base,prop,{configurable:!0}),{base:base,prop:prop,chain:chain})}function isEmptyObject(obj){return 0===Object.keys(obj).length}var updatedArgs=args?[].concat(source).concat(args):[source];try{(function(source,property,value,stack){if(property&&function(stackMatch,stackTrace){if(!stackMatch||\"\"===stackMatch)return!0;if(shouldAbortInlineOrInjectedScript(stackMatch,stackTrace))return!0;var stackRegexp=function(){var input=arguments.length>0&&void 0!==arguments[0]?arguments[0]:\"\",FORWARD_SLASH=\"/\";if(\"\"===input)return new RegExp(\".?\");if(input[0]===FORWARD_SLASH&&input[input.length-1]===FORWARD_SLASH)return new RegExp(input.slice(1,-1));var escaped=input.replace(/[.*+?^${}()|[\\]\\\\]/g,\"\\\\$&\");return new RegExp(escaped)}(stackMatch),refinedStackTrace=stackTrace.split(\"\\n\").slice(2).map((function(line){return line.trim()})).join(\"\\n\");return Object.getOwnPropertyDescriptor(RegExp.prototype,\"test\").value.call(stackRegexp,refinedStackTrace)}(stack,(new Error).stack)){var constantValue,num;if(\"undefined\"===value)constantValue=void 0;else if(\"false\"===value)constantValue=!1;else if(\"true\"===value)constantValue=!0;else if(\"null\"===value)constantValue=null;else if(\"emptyArr\"===value)constantValue=[];else if(\"emptyObj\"===value)constantValue={};else if(\"noopFunc\"===value)constantValue=noopFunc;else if(\"trueFunc\"===value)constantValue=trueFunc;else if(\"falseFunc\"===value)constantValue=falseFunc;else if(\"noopPromiseResolve\"===value)constantValue=noopPromiseResolve;else if(\"noopPromiseReject\"===value)constantValue=noopPromiseReject;else if(/^\\d+$/.test(value)){if(num=constantValue=parseFloat(value),(Number.isNaN||window.isNaN)(num))return;if(Math.abs(constantValue)>32767)return}else if(\"-1\"===value)constantValue=-1;else if(\"\"===value)constantValue=\"\";else if(\"yes\"===value)constantValue=\"yes\";else{if(\"no\"!==value)return;constantValue=\"no\"}var canceled=!1,mustCancel=function(value){return canceled||(canceled=void 0!==value&&void 0!==constantValue&&typeof value!=typeof constantValue&&null!==value)},trapProp=function(base,prop,configurable,handler){if(!handler.init(base[prop]))return!1;var prevSetter,origDescriptor=Object.getOwnPropertyDescriptor(base,prop);if(origDescriptor instanceof Object){if(!origDescriptor.configurable){var message=\"set-constant: property '\".concat(prop,\"' is not configurable\");return function(source,message){(arguments.length>2&&void 0!==arguments[2]&&arguments[2]||source.verbose)&&console.log(\"\".concat(source.name,\": \").concat(message))}(source,message),!1}base[prop]=constantValue,origDescriptor.set instanceof Function&&(prevSetter=origDescriptor.set)}return Object.defineProperty(base,prop,{configurable:configurable,get:function(){return handler.get()},set:function(a){void 0!==prevSetter&&prevSetter(a),handler.set(a)}}),!0};!function setChainPropAccess(owner,property){var chainInfo=getPropertyInChain(owner,property),base=chainInfo.base,prop=chainInfo.prop,chain=chainInfo.chain,inChainPropHandler={factValue:void 0,init:function(a){return this.factValue=a,!0},get:function(){return this.factValue},set:function(a){this.factValue!==a&&(this.factValue=a,a instanceof Object&&setChainPropAccess(a,chain))}},endPropHandler={init:function(a){return!mustCancel(a)},get:function(){return constantValue},set:function(a){mustCancel(a)&&(constantValue=a)}};if(chain)if(void 0===base||null!==base[prop]){(base instanceof Object||\"object\"==typeof base)&&isEmptyObject(base)&&trapProp(base,prop,!0,inChainPropHandler);var propValue=owner[prop];(propValue instanceof Object||\"object\"==typeof propValue&&null!==propValue)&&setChainPropAccess(propValue,chain),trapProp(base,prop,!0,inChainPropHandler)}else trapProp(base,prop,!0,inChainPropHandler);else trapProp(base,prop,!1,endPropHandler)&&function(source,message){if(!0===source.verbose){try{var log=console.log.bind(console),trace=console.trace.bind(console),prefix=source.ruleText||\"\";if(source.domainName){var ruleStartIndex,AG_SCRIPTLET_MARKER=\"#%#//\",UBO_SCRIPTLET_MARKER=\"##+js\";source.ruleText.indexOf(AG_SCRIPTLET_MARKER)>-1?ruleStartIndex=source.ruleText.indexOf(AG_SCRIPTLET_MARKER):source.ruleText.indexOf(UBO_SCRIPTLET_MARKER)>-1&&(ruleStartIndex=source.ruleText.indexOf(UBO_SCRIPTLET_MARKER));var rulePart=source.ruleText.slice(ruleStartIndex);prefix=\"\".concat(source.domainName).concat(rulePart)}var LOG_MARKER=\"log: \";message&&(-1===message.indexOf(LOG_MARKER)?log(\"\".concat(prefix,\" message:\\n\").concat(message)):log(message.slice(LOG_MARKER.length))),log(\"\".concat(prefix,\" trace start\")),trace&&trace(),log(\"\".concat(prefix,\" trace end\"))}catch(e){}\"function\"==typeof window.__debug&&window.__debug(source)}}(source)}(window,property)}}).apply(this,updatedArgs)}catch(e){console.log(e)}}"
+ "scriptlet": "function setConstant(source,args){function noopFunc(){}function trueFunc(){return!0}function falseFunc(){return!1}function noopPromiseReject(){return Promise.reject()}function noopPromiseResolve(){var responseBody=arguments.length>0&&void 0!==arguments[0]?arguments[0]:\"{}\",responseUrl=arguments.length>1&&void 0!==arguments[1]?arguments[1]:\"\",responseType=arguments.length>2&&void 0!==arguments[2]?arguments[2]:\"default\";if(\"undefined\"!=typeof Response){var response=new Response(responseBody,{status:200,statusText:\"OK\"});return Object.defineProperties(response,{url:{value:responseUrl},type:{value:responseType}}),Promise.resolve(response)}}function getPropertyInChain(base,chain){var pos=chain.indexOf(\".\");if(-1===pos)return{base:base,prop:chain};var prop=chain.slice(0,pos);if(null===base)return{base:base,prop:prop,chain:chain};var nextBase=base[prop];return chain=chain.slice(pos+1),(base instanceof Object||\"object\"==typeof base)&&isEmptyObject(base)||null===nextBase?{base:base,prop:prop,chain:chain}:void 0!==nextBase?getPropertyInChain(nextBase,chain):(Object.defineProperty(base,prop,{configurable:!0}),{base:base,prop:prop,chain:chain})}function isEmptyObject(obj){return 0===Object.keys(obj).length&&!obj.prototype}var updatedArgs=args?[].concat(source).concat(args):[source];try{(function(source,property,value,stack){if(property&&function(stackMatch,stackTrace){if(!stackMatch||\"\"===stackMatch)return!0;if(function(stackMatch,stackTrace){var INLINE_SCRIPT_STRING=\"inlineScript\",INJECTED_SCRIPT_STRING=\"injectedScript\",INJECTED_SCRIPT_MARKER=\"\",isInlineScript=function(stackMatch){return stackMatch.indexOf(INLINE_SCRIPT_STRING)>-1},isInjectedScript=function(stackMatch){return stackMatch.indexOf(INJECTED_SCRIPT_STRING)>-1};if(!isInlineScript(stackMatch)&&!isInjectedScript(stackMatch))return!1;var documentURL=window.location.href,pos=documentURL.indexOf(\"#\");-1!==pos&&(documentURL=documentURL.slice(0,pos));var stackLines=stackTrace.split(\"\\n\").slice(2).map((function(line){return line.trim()})).map((function(line){var stack,getStackTraceURL=/(.*?@)?(\\S+)(:\\d+):\\d+\\)?$/.exec(line);if(getStackTraceURL){var stackURL=getStackTraceURL[2];if(startsWith(stackURL,\"(\")&&(stackURL=stackURL.slice(1)),startsWith(stackURL,INJECTED_SCRIPT_MARKER)){stackURL=INJECTED_SCRIPT_STRING;var stackFunction=void 0!==getStackTraceURL[1]?getStackTraceURL[1].slice(0,-1):line.slice(0,getStackTraceURL.index).trim();startsWith(stackFunction,\"at\")&&(stackFunction=stackFunction.slice(2).trim()),stack=\"\".concat(stackFunction,\" \").concat(stackURL).trim()}else stack=stackURL}else stack=line;return stack}));if(stackLines)for(var index=0;index0&&void 0!==arguments[0]?arguments[0]:\"\",FORWARD_SLASH=\"/\";if(\"\"===input)return new RegExp(\".?\");if(input[0]===FORWARD_SLASH&&input[input.length-1]===FORWARD_SLASH)return new RegExp(input.slice(1,-1));var escaped=input.replace(/[.*+?^${}()|[\\]\\\\]/g,\"\\\\$&\");return new RegExp(escaped)}(stackMatch),refinedStackTrace=stackTrace.split(\"\\n\").slice(2).map((function(line){return line.trim()})).join(\"\\n\");return Object.getOwnPropertyDescriptor(RegExp.prototype,\"test\").value.call(stackRegexp,refinedStackTrace)}(stack,(new Error).stack)){var constantValue,num;if(\"undefined\"===value)constantValue=void 0;else if(\"false\"===value)constantValue=!1;else if(\"true\"===value)constantValue=!0;else if(\"null\"===value)constantValue=null;else if(\"emptyArr\"===value)constantValue=[];else if(\"emptyObj\"===value)constantValue={};else if(\"noopFunc\"===value)constantValue=noopFunc;else if(\"trueFunc\"===value)constantValue=trueFunc;else if(\"falseFunc\"===value)constantValue=falseFunc;else if(\"noopPromiseResolve\"===value)constantValue=noopPromiseResolve;else if(\"noopPromiseReject\"===value)constantValue=noopPromiseReject;else if(/^\\d+$/.test(value)){if(num=constantValue=parseFloat(value),(Number.isNaN||window.isNaN)(num))return;if(Math.abs(constantValue)>32767)return}else if(\"-1\"===value)constantValue=-1;else if(\"\"===value)constantValue=\"\";else if(\"yes\"===value)constantValue=\"yes\";else{if(\"no\"!==value)return;constantValue=\"no\"}var canceled=!1,mustCancel=function(value){return canceled||(canceled=void 0!==value&&void 0!==constantValue&&typeof value!=typeof constantValue&&null!==value)},trapProp=function(base,prop,configurable,handler){if(!handler.init(base[prop]))return!1;var prevSetter,origDescriptor=Object.getOwnPropertyDescriptor(base,prop);if(origDescriptor instanceof Object){if(!origDescriptor.configurable){var message=\"Property '\".concat(prop,\"' is not configurable\");return function(source,message){(arguments.length>2&&void 0!==arguments[2]&&arguments[2]||source.verbose)&&console.log(\"\".concat(source.name,\": \").concat(message))}(source,message),!1}base[prop]=constantValue,origDescriptor.set instanceof Function&&(prevSetter=origDescriptor.set)}return Object.defineProperty(base,prop,{configurable:configurable,get:function(){return handler.get()},set:function(a){void 0!==prevSetter&&prevSetter(a),handler.set(a)}}),!0};!function setChainPropAccess(owner,property){var chainInfo=getPropertyInChain(owner,property),base=chainInfo.base,prop=chainInfo.prop,chain=chainInfo.chain,inChainPropHandler={factValue:void 0,init:function(a){return this.factValue=a,!0},get:function(){return this.factValue},set:function(a){this.factValue!==a&&(this.factValue=a,a instanceof Object&&setChainPropAccess(a,chain))}},endPropHandler={init:function(a){return!mustCancel(a)},get:function(){return constantValue},set:function(a){mustCancel(a)&&(constantValue=a)}};if(chain)if(void 0===base||null!==base[prop]){(base instanceof Object||\"object\"==typeof base)&&isEmptyObject(base)&&trapProp(base,prop,!0,inChainPropHandler);var propValue=owner[prop];(propValue instanceof Object||\"object\"==typeof propValue&&null!==propValue)&&setChainPropAccess(propValue,chain),trapProp(base,prop,!0,inChainPropHandler)}else trapProp(base,prop,!0,inChainPropHandler);else trapProp(base,prop,!1,endPropHandler)&&function(source){if(!0===source.verbose){try{var log=console.log.bind(console),trace=console.trace.bind(console),prefix=source.ruleText||\"\";if(source.domainName){var ruleStartIndex,AG_SCRIPTLET_MARKER=\"#%#//\",UBO_SCRIPTLET_MARKER=\"##+js\";source.ruleText.indexOf(AG_SCRIPTLET_MARKER)>-1?ruleStartIndex=source.ruleText.indexOf(AG_SCRIPTLET_MARKER):source.ruleText.indexOf(UBO_SCRIPTLET_MARKER)>-1&&(ruleStartIndex=source.ruleText.indexOf(UBO_SCRIPTLET_MARKER));var rulePart=source.ruleText.slice(ruleStartIndex);prefix=\"\".concat(source.domainName).concat(rulePart)}log(\"\".concat(prefix,\" trace start\")),trace&&trace(),log(\"\".concat(prefix,\" trace end\"))}catch(e){}\"function\"==typeof window.__debug&&window.__debug(source)}}(source)}(window,property)}}).apply(this,updatedArgs)}catch(e){console.log(e)}}"
},
{
"names": [
@@ -120,7 +120,7 @@
"ubo-cookie-remover.js",
"ubo-cookie-remover"
],
- "scriptlet": "function removeCookie(source,args){var updatedArgs=args?[].concat(source).concat(args):[source];try{(function(source,match){var matchRegexp=function(){var input=arguments.length>0&&void 0!==arguments[0]?arguments[0]:\"\",FORWARD_SLASH=\"/\";if(\"\"===input)return new RegExp(\".?\");if(input[0]===FORWARD_SLASH&&input[input.length-1]===FORWARD_SLASH)return new RegExp(input.slice(1,-1));var escaped=input.replace(/[.*+?^${}()|[\\]\\\\]/g,\"\\\\$&\");return new RegExp(escaped)}(match),removeCookieFromHost=function(cookieName,hostName){var cookieSpec=\"\".concat(cookieName,\"=\"),domain1=\"; domain=\".concat(hostName),domain2=\"; domain=.\".concat(hostName),path=\"; path=/\",expiration=\"; expires=Thu, 01 Jan 1970 00:00:00 GMT\";document.cookie=cookieSpec+expiration,document.cookie=cookieSpec+domain1+expiration,document.cookie=cookieSpec+domain2+expiration,document.cookie=cookieSpec+path+expiration,document.cookie=cookieSpec+domain1+path+expiration,document.cookie=cookieSpec+domain2+path+expiration,function(source,message){if(!0===source.verbose){try{var log=console.log.bind(console),trace=console.trace.bind(console),prefix=source.ruleText||\"\";if(source.domainName){var ruleStartIndex,AG_SCRIPTLET_MARKER=\"#%#//\",UBO_SCRIPTLET_MARKER=\"##+js\";source.ruleText.indexOf(AG_SCRIPTLET_MARKER)>-1?ruleStartIndex=source.ruleText.indexOf(AG_SCRIPTLET_MARKER):source.ruleText.indexOf(UBO_SCRIPTLET_MARKER)>-1&&(ruleStartIndex=source.ruleText.indexOf(UBO_SCRIPTLET_MARKER));var rulePart=source.ruleText.slice(ruleStartIndex);prefix=\"\".concat(source.domainName).concat(rulePart)}var LOG_MARKER=\"log: \";message&&(-1===message.indexOf(LOG_MARKER)?log(\"\".concat(prefix,\" message:\\n\").concat(message)):log(message.slice(LOG_MARKER.length))),log(\"\".concat(prefix,\" trace start\")),trace&&trace(),log(\"\".concat(prefix,\" trace end\"))}catch(e){}\"function\"==typeof window.__debug&&window.__debug(source)}}(source)},rmCookie=function(){document.cookie.split(\";\").forEach((function(cookieStr){var pos=cookieStr.indexOf(\"=\");if(-1!==pos){var cookieName=cookieStr.slice(0,pos).trim();if(matchRegexp.test(cookieName))for(var hostParts=document.location.hostname.split(\".\"),i=0;i<=hostParts.length-1;i+=1){var hostName=hostParts.slice(i).join(\".\");hostName&&removeCookieFromHost(cookieName,hostName)}}}))};rmCookie(),window.addEventListener(\"beforeunload\",rmCookie)}).apply(this,updatedArgs)}catch(e){console.log(e)}}"
+ "scriptlet": "function removeCookie(source,args){var updatedArgs=args?[].concat(source).concat(args):[source];try{(function(source,match){var matchRegexp=function(){var input=arguments.length>0&&void 0!==arguments[0]?arguments[0]:\"\",FORWARD_SLASH=\"/\";if(\"\"===input)return new RegExp(\".?\");if(input[0]===FORWARD_SLASH&&input[input.length-1]===FORWARD_SLASH)return new RegExp(input.slice(1,-1));var escaped=input.replace(/[.*+?^${}()|[\\]\\\\]/g,\"\\\\$&\");return new RegExp(escaped)}(match),removeCookieFromHost=function(cookieName,hostName){var cookieSpec=\"\".concat(cookieName,\"=\"),domain1=\"; domain=\".concat(hostName),domain2=\"; domain=.\".concat(hostName),path=\"; path=/\",expiration=\"; expires=Thu, 01 Jan 1970 00:00:00 GMT\";document.cookie=cookieSpec+expiration,document.cookie=cookieSpec+domain1+expiration,document.cookie=cookieSpec+domain2+expiration,document.cookie=cookieSpec+path+expiration,document.cookie=cookieSpec+domain1+path+expiration,document.cookie=cookieSpec+domain2+path+expiration,function(source){if(!0===source.verbose){try{var log=console.log.bind(console),trace=console.trace.bind(console),prefix=source.ruleText||\"\";if(source.domainName){var ruleStartIndex,AG_SCRIPTLET_MARKER=\"#%#//\",UBO_SCRIPTLET_MARKER=\"##+js\";source.ruleText.indexOf(AG_SCRIPTLET_MARKER)>-1?ruleStartIndex=source.ruleText.indexOf(AG_SCRIPTLET_MARKER):source.ruleText.indexOf(UBO_SCRIPTLET_MARKER)>-1&&(ruleStartIndex=source.ruleText.indexOf(UBO_SCRIPTLET_MARKER));var rulePart=source.ruleText.slice(ruleStartIndex);prefix=\"\".concat(source.domainName).concat(rulePart)}log(\"\".concat(prefix,\" trace start\")),trace&&trace(),log(\"\".concat(prefix,\" trace end\"))}catch(e){}\"function\"==typeof window.__debug&&window.__debug(source)}}(source)},rmCookie=function(){document.cookie.split(\";\").forEach((function(cookieStr){var pos=cookieStr.indexOf(\"=\");if(-1!==pos){var cookieName=cookieStr.slice(0,pos).trim();if(matchRegexp.test(cookieName))for(var hostParts=document.location.hostname.split(\".\"),i=0;i<=hostParts.length-1;i+=1){var hostName=hostParts.slice(i).join(\".\");hostName&&removeCookieFromHost(cookieName,hostName)}}}))};rmCookie(),window.addEventListener(\"beforeunload\",rmCookie)}).apply(this,updatedArgs)}catch(e){console.log(e)}}"
},
{
"names": [
@@ -132,7 +132,7 @@
"ubo-addEventListener-defuser",
"ubo-aeld"
],
- "scriptlet": "function preventAddEventListener(source,args){function hit(source,message){if(!0===source.verbose){try{var log=console.log.bind(console),trace=console.trace.bind(console),prefix=source.ruleText||\"\";if(source.domainName){var ruleStartIndex;source.ruleText.indexOf(\"#%#//\")>-1?ruleStartIndex=source.ruleText.indexOf(\"#%#//\"):source.ruleText.indexOf(\"##+js\")>-1&&(ruleStartIndex=source.ruleText.indexOf(\"##+js\"));var rulePart=source.ruleText.slice(ruleStartIndex);prefix=\"\".concat(source.domainName).concat(rulePart)}message&&(-1===message.indexOf(\"log: \")?log(\"\".concat(prefix,\" message:\\n\").concat(message)):log(message.slice(\"log: \".length))),log(\"\".concat(prefix,\" trace start\")),trace&&trace(),log(\"\".concat(prefix,\" trace end\"))}catch(e){}\"function\"==typeof window.__debug&&window.__debug(source)}}function toRegExp(){var input=arguments.length>0&&void 0!==arguments[0]?arguments[0]:\"\",DEFAULT_VALUE=\".?\",FORWARD_SLASH=\"/\";if(\"\"===input)return new RegExp(DEFAULT_VALUE);if(input[0]===FORWARD_SLASH&&input[input.length-1]===FORWARD_SLASH)return new RegExp(input.slice(1,-1));var escaped=input.replace(/[.*+?^${}()|[\\]\\\\]/g,\"\\\\$&\");return new RegExp(escaped)}function validateType(type){return void 0!==type}function validateListener(listener){return void 0!==listener&&(\"function\"==typeof listener||\"object\"==typeof listener&&null!==listener&&\"function\"==typeof listener.handleEvent)}function listenerToString(listener){return\"function\"==typeof listener?listener.toString():listener.handleEvent.toString()}var updatedArgs=args?[].concat(source).concat(args):[source];try{(function(source,typeSearch,listenerSearch){var typeSearchRegexp=toRegExp(typeSearch),listenerSearchRegexp=toRegExp(listenerSearch),nativeAddEventListener=window.EventTarget.prototype.addEventListener;function addEventListenerWrapper(type,listener){var shouldPrevent=!1;if(validateType(type)&&validateListener(listener)&&(shouldPrevent=typeSearchRegexp.test(type.toString())&&listenerSearchRegexp.test(listenerToString(listener))),!shouldPrevent){for(var _len=arguments.length,args=new Array(_len>2?_len-2:0),_key=2;_key<_len;_key++)args[_key-2]=arguments[_key];return nativeAddEventListener.apply(this,[type,listener].concat(args))}hit(source)}var descriptor={configurable:!0,set:function(){},get:function(){return addEventListenerWrapper}};Object.defineProperty(window.EventTarget.prototype,\"addEventListener\",descriptor),Object.defineProperty(window,\"addEventListener\",descriptor),Object.defineProperty(document,\"addEventListener\",descriptor)}).apply(this,updatedArgs)}catch(e){console.log(e)}}"
+ "scriptlet": "function preventAddEventListener(source,args){function hit(source){if(!0===source.verbose){try{var log=console.log.bind(console),trace=console.trace.bind(console),prefix=source.ruleText||\"\";if(source.domainName){var ruleStartIndex;source.ruleText.indexOf(\"#%#//\")>-1?ruleStartIndex=source.ruleText.indexOf(\"#%#//\"):source.ruleText.indexOf(\"##+js\")>-1&&(ruleStartIndex=source.ruleText.indexOf(\"##+js\"));var rulePart=source.ruleText.slice(ruleStartIndex);prefix=\"\".concat(source.domainName).concat(rulePart)}log(\"\".concat(prefix,\" trace start\")),trace&&trace(),log(\"\".concat(prefix,\" trace end\"))}catch(e){}\"function\"==typeof window.__debug&&window.__debug(source)}}function toRegExp(){var input=arguments.length>0&&void 0!==arguments[0]?arguments[0]:\"\",DEFAULT_VALUE=\".?\",FORWARD_SLASH=\"/\";if(\"\"===input)return new RegExp(DEFAULT_VALUE);if(input[0]===FORWARD_SLASH&&input[input.length-1]===FORWARD_SLASH)return new RegExp(input.slice(1,-1));var escaped=input.replace(/[.*+?^${}()|[\\]\\\\]/g,\"\\\\$&\");return new RegExp(escaped)}function validateType(type){return void 0!==type}function validateListener(listener){return void 0!==listener&&(\"function\"==typeof listener||\"object\"==typeof listener&&null!==listener&&\"function\"==typeof listener.handleEvent)}function listenerToString(listener){return\"function\"==typeof listener?listener.toString():listener.handleEvent.toString()}var updatedArgs=args?[].concat(source).concat(args):[source];try{(function(source,typeSearch,listenerSearch){var typeSearchRegexp=toRegExp(typeSearch),listenerSearchRegexp=toRegExp(listenerSearch),nativeAddEventListener=window.EventTarget.prototype.addEventListener;function addEventListenerWrapper(type,listener){var _this$constructor,shouldPrevent=!1;if(validateType(type)&&validateListener(listener)&&(shouldPrevent=typeSearchRegexp.test(type.toString())&&listenerSearchRegexp.test(listenerToString(listener))),!shouldPrevent){var context=this;this&&\"Window\"===(null===(_this$constructor=this.constructor)||void 0===_this$constructor?void 0:_this$constructor.name)&&this!==window&&(context=window);for(var _len=arguments.length,args=new Array(_len>2?_len-2:0),_key=2;_key<_len;_key++)args[_key-2]=arguments[_key];return nativeAddEventListener.apply(context,[type,listener].concat(args))}hit(source)}var descriptor={configurable:!0,set:function(){},get:function(){return addEventListenerWrapper}};Object.defineProperty(window.EventTarget.prototype,\"addEventListener\",descriptor),Object.defineProperty(window,\"addEventListener\",descriptor),Object.defineProperty(document,\"addEventListener\",descriptor)}).apply(this,updatedArgs)}catch(e){console.log(e)}}"
},
{
"names": [
@@ -144,7 +144,7 @@
"ubo-nobab",
"ubo-bab-defuser"
],
- "scriptlet": "function preventBab(source,args){function hit(source,message){if(!0===source.verbose){try{var log=console.log.bind(console),trace=console.trace.bind(console),prefix=source.ruleText||\"\";if(source.domainName){var ruleStartIndex;source.ruleText.indexOf(\"#%#//\")>-1?ruleStartIndex=source.ruleText.indexOf(\"#%#//\"):source.ruleText.indexOf(\"##+js\")>-1&&(ruleStartIndex=source.ruleText.indexOf(\"##+js\"));var rulePart=source.ruleText.slice(ruleStartIndex);prefix=\"\".concat(source.domainName).concat(rulePart)}message&&(-1===message.indexOf(\"log: \")?log(\"\".concat(prefix,\" message:\\n\").concat(message)):log(message.slice(\"log: \".length))),log(\"\".concat(prefix,\" trace start\")),trace&&trace(),log(\"\".concat(prefix,\" trace end\"))}catch(e){}\"function\"==typeof window.__debug&&window.__debug(source)}}var updatedArgs=args?[].concat(source).concat(args):[source];try{(function(source){var nativeSetTimeout=window.setTimeout,babRegex=/\\.bab_elementid.$/;window.setTimeout=function(callback){if(\"string\"!=typeof callback||!babRegex.test(callback)){for(var _len=arguments.length,args=new Array(_len>1?_len-1:0),_key=1;_key<_len;_key++)args[_key-1]=arguments[_key];return nativeSetTimeout.apply(window,[callback].concat(args))}hit(source)};var signatures=[[\"blockadblock\"],[\"babasbm\"],[/getItem\\('babn'\\)/],[\"getElementById\",\"String.fromCharCode\",\"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789\",\"charAt\",\"DOMContentLoaded\",\"AdBlock\",\"addEventListener\",\"doScroll\",\"fromCharCode\",\"<<2|r>>4\",\"sessionStorage\",\"clientWidth\",\"localStorage\",\"Math\",\"random\"]],nativeEval=window.eval;window.eval=function(str){if(!function(str){if(\"string\"!=typeof str)return!1;for(var i=0;i-1)&&(match+=1)}if(match/tokens.length>=.8)return!0}return!1}(str))return nativeEval(str);hit(source);var bodyEl=document.body;bodyEl&&bodyEl.style.removeProperty(\"visibility\");var el=document.getElementById(\"babasbmsgx\");el&&el.parentNode.removeChild(el)}.bind(window)}).apply(this,updatedArgs)}catch(e){console.log(e)}}"
+ "scriptlet": "function preventBab(source,args){function hit(source){if(!0===source.verbose){try{var log=console.log.bind(console),trace=console.trace.bind(console),prefix=source.ruleText||\"\";if(source.domainName){var ruleStartIndex;source.ruleText.indexOf(\"#%#//\")>-1?ruleStartIndex=source.ruleText.indexOf(\"#%#//\"):source.ruleText.indexOf(\"##+js\")>-1&&(ruleStartIndex=source.ruleText.indexOf(\"##+js\"));var rulePart=source.ruleText.slice(ruleStartIndex);prefix=\"\".concat(source.domainName).concat(rulePart)}log(\"\".concat(prefix,\" trace start\")),trace&&trace(),log(\"\".concat(prefix,\" trace end\"))}catch(e){}\"function\"==typeof window.__debug&&window.__debug(source)}}var updatedArgs=args?[].concat(source).concat(args):[source];try{(function(source){var nativeSetTimeout=window.setTimeout,babRegex=/\\.bab_elementid.$/;window.setTimeout=function(callback){if(\"string\"!=typeof callback||!babRegex.test(callback)){for(var _len=arguments.length,args=new Array(_len>1?_len-1:0),_key=1;_key<_len;_key++)args[_key-1]=arguments[_key];return nativeSetTimeout.apply(window,[callback].concat(args))}hit(source)};var signatures=[[\"blockadblock\"],[\"babasbm\"],[/getItem\\('babn'\\)/],[\"getElementById\",\"String.fromCharCode\",\"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789\",\"charAt\",\"DOMContentLoaded\",\"AdBlock\",\"addEventListener\",\"doScroll\",\"fromCharCode\",\"<<2|r>>4\",\"sessionStorage\",\"clientWidth\",\"localStorage\",\"Math\",\"random\"]],nativeEval=window.eval;window.eval=function(str){if(!function(str){if(\"string\"!=typeof str)return!1;for(var i=0;i-1)&&(match+=1)}if(match/tokens.length>=.8)return!0}return!1}(str))return nativeEval(str);hit(source);var bodyEl=document.body;bodyEl&&bodyEl.style.removeProperty(\"visibility\");var el=document.getElementById(\"babasbmsgx\");el&&el.parentNode.removeChild(el)}.bind(window)}).apply(this,updatedArgs)}catch(e){console.log(e)}}"
},
{
"names": [
@@ -153,7 +153,7 @@
"ubo-nowebrtc.js",
"ubo-nowebrtc"
],
- "scriptlet": "function nowebrtc(source,args){function noopFunc(){}var updatedArgs=args?[].concat(source).concat(args):[source];try{(function(source){var propertyName=\"\";if(window.RTCPeerConnection?propertyName=\"RTCPeerConnection\":window.webkitRTCPeerConnection&&(propertyName=\"webkitRTCPeerConnection\"),\"\"!==propertyName){var rtcReplacement=function(config){var message=\"Document tried to create an RTCPeerConnection: \".concat(function(config){var str=\"undefined\";if(null===config)str=\"null\";else if(config instanceof Object){var SERVERS_PROP_NAME=\"iceServers\",URLS_PROP_NAME=\"urls\";Object.prototype.hasOwnProperty.call(config,SERVERS_PROP_NAME)&&Object.prototype.hasOwnProperty.call(config[SERVERS_PROP_NAME][0],URLS_PROP_NAME)&&config[SERVERS_PROP_NAME][0][URLS_PROP_NAME]&&(str=config[SERVERS_PROP_NAME][0][URLS_PROP_NAME].toString())}return str}(config));!function(source,message){(arguments.length>2&&void 0!==arguments[2]&&arguments[2]||source.verbose)&&console.log(\"\".concat(source.name,\": \").concat(message))}(source,message),function(source,message){if(!0===source.verbose){try{var log=console.log.bind(console),trace=console.trace.bind(console),prefix=source.ruleText||\"\";if(source.domainName){var ruleStartIndex,AG_SCRIPTLET_MARKER=\"#%#//\",UBO_SCRIPTLET_MARKER=\"##+js\";source.ruleText.indexOf(AG_SCRIPTLET_MARKER)>-1?ruleStartIndex=source.ruleText.indexOf(AG_SCRIPTLET_MARKER):source.ruleText.indexOf(UBO_SCRIPTLET_MARKER)>-1&&(ruleStartIndex=source.ruleText.indexOf(UBO_SCRIPTLET_MARKER));var rulePart=source.ruleText.slice(ruleStartIndex);prefix=\"\".concat(source.domainName).concat(rulePart)}var LOG_MARKER=\"log: \";message&&(-1===message.indexOf(LOG_MARKER)?log(\"\".concat(prefix,\" message:\\n\").concat(message)):log(message.slice(LOG_MARKER.length))),log(\"\".concat(prefix,\" trace start\")),trace&&trace(),log(\"\".concat(prefix,\" trace end\"))}catch(e){}\"function\"==typeof window.__debug&&window.__debug(source)}}(source)};rtcReplacement.prototype={close:noopFunc,createDataChannel:noopFunc,createOffer:noopFunc,setRemoteDescription:noopFunc};var rtc=window[propertyName];window[propertyName]=rtcReplacement,rtc.prototype&&(rtc.prototype.createDataChannel=function(a,b){return{close:noopFunc,send:noopFunc}}.bind(null))}}).apply(this,updatedArgs)}catch(e){console.log(e)}}"
+ "scriptlet": "function nowebrtc(source,args){function noopFunc(){}var updatedArgs=args?[].concat(source).concat(args):[source];try{(function(source){var propertyName=\"\";if(window.RTCPeerConnection?propertyName=\"RTCPeerConnection\":window.webkitRTCPeerConnection&&(propertyName=\"webkitRTCPeerConnection\"),\"\"!==propertyName){var rtcReplacement=function(config){var message=\"Document tried to create an RTCPeerConnection: \".concat(function(config){var str=\"undefined\";if(null===config)str=\"null\";else if(config instanceof Object){var SERVERS_PROP_NAME=\"iceServers\",URLS_PROP_NAME=\"urls\";Object.prototype.hasOwnProperty.call(config,SERVERS_PROP_NAME)&&Object.prototype.hasOwnProperty.call(config[SERVERS_PROP_NAME][0],URLS_PROP_NAME)&&config[SERVERS_PROP_NAME][0][URLS_PROP_NAME]&&(str=config[SERVERS_PROP_NAME][0][URLS_PROP_NAME].toString())}return str}(config));!function(source,message){(arguments.length>2&&void 0!==arguments[2]&&arguments[2]||source.verbose)&&console.log(\"\".concat(source.name,\": \").concat(message))}(source,message),function(source){if(!0===source.verbose){try{var log=console.log.bind(console),trace=console.trace.bind(console),prefix=source.ruleText||\"\";if(source.domainName){var ruleStartIndex,AG_SCRIPTLET_MARKER=\"#%#//\",UBO_SCRIPTLET_MARKER=\"##+js\";source.ruleText.indexOf(AG_SCRIPTLET_MARKER)>-1?ruleStartIndex=source.ruleText.indexOf(AG_SCRIPTLET_MARKER):source.ruleText.indexOf(UBO_SCRIPTLET_MARKER)>-1&&(ruleStartIndex=source.ruleText.indexOf(UBO_SCRIPTLET_MARKER));var rulePart=source.ruleText.slice(ruleStartIndex);prefix=\"\".concat(source.domainName).concat(rulePart)}log(\"\".concat(prefix,\" trace start\")),trace&&trace(),log(\"\".concat(prefix,\" trace end\"))}catch(e){}\"function\"==typeof window.__debug&&window.__debug(source)}}(source)};rtcReplacement.prototype={close:noopFunc,createDataChannel:noopFunc,createOffer:noopFunc,setRemoteDescription:noopFunc};var rtc=window[propertyName];window[propertyName]=rtcReplacement,rtc.prototype&&(rtc.prototype.createDataChannel=function(a,b){return{close:noopFunc,send:noopFunc}}.bind(null))}}).apply(this,updatedArgs)}catch(e){console.log(e)}}"
},
{
"names": [
@@ -165,13 +165,13 @@
"ubo-addEventListener-logger",
"ubo-aell"
],
- "scriptlet": "function logAddEventListener(source,args){function hit(source,message){if(!0===source.verbose){try{var log=console.log.bind(console),trace=console.trace.bind(console),prefix=source.ruleText||\"\";if(source.domainName){var ruleStartIndex;source.ruleText.indexOf(\"#%#//\")>-1?ruleStartIndex=source.ruleText.indexOf(\"#%#//\"):source.ruleText.indexOf(\"##+js\")>-1&&(ruleStartIndex=source.ruleText.indexOf(\"##+js\"));var rulePart=source.ruleText.slice(ruleStartIndex);prefix=\"\".concat(source.domainName).concat(rulePart)}message&&(-1===message.indexOf(\"log: \")?log(\"\".concat(prefix,\" message:\\n\").concat(message)):log(message.slice(\"log: \".length))),log(\"\".concat(prefix,\" trace start\")),trace&&trace(),log(\"\".concat(prefix,\" trace end\"))}catch(e){}\"function\"==typeof window.__debug&&window.__debug(source)}}function validateType(type){return void 0!==type}function validateListener(listener){return void 0!==listener&&(\"function\"==typeof listener||\"object\"==typeof listener&&null!==listener&&\"function\"==typeof listener.handleEvent)}function listenerToString(listener){return\"function\"==typeof listener?listener.toString():listener.handleEvent.toString()}function convertTypeToString(value){return void 0===value?\"undefined\":\"object\"==typeof value?null===value?\"null\":objectToString(value):value.toString()}function logMessage(source,message){var forced=arguments.length>2&&void 0!==arguments[2]&&arguments[2];(forced||source.verbose)&&console.log(\"\".concat(source.name,\": \").concat(message))}function objectToString(obj){return function(obj){return 0===Object.keys(obj).length}(obj)?\"{}\":(object=obj,keys=Object.keys(object),entries=[],keys.forEach((function(key){return entries.push([key,object[key]])})),entries).map((function(pair){var key=pair[0],value=pair[1],recordValueStr=value;return value instanceof Object&&(recordValueStr=\"{ \".concat(objectToString(value),\" }\")),\"\".concat(key,':\"').concat(recordValueStr,'\"')})).join(\" \");var object,keys,entries}var updatedArgs=args?[].concat(source).concat(args):[source];try{(function(source){var nativeAddEventListener=window.EventTarget.prototype.addEventListener;function addEventListenerWrapper(type,listener){if(validateType(type)&&validateListener(listener)){var _message='addEventListener(\"'.concat(type,'\", ').concat(listenerToString(listener),\")\");logMessage(source,_message,!0),hit(source)}var message=\"Invalid event type or listener passed to addEventListener:\\ntype: \".concat(convertTypeToString(type),\"\\nlistener: \").concat(convertTypeToString(listener));logMessage(source,message,!0);for(var _len=arguments.length,args=new Array(_len>2?_len-2:0),_key=2;_key<_len;_key++)args[_key-2]=arguments[_key];return nativeAddEventListener.apply(this,[type,listener].concat(args))}var descriptor={configurable:!0,set:function(){},get:function(){return addEventListenerWrapper}};Object.defineProperty(window.EventTarget.prototype,\"addEventListener\",descriptor),Object.defineProperty(window,\"addEventListener\",descriptor),Object.defineProperty(document,\"addEventListener\",descriptor)}).apply(this,updatedArgs)}catch(e){console.log(e)}}"
+ "scriptlet": "function logAddEventListener(source,args){function hit(source){if(!0===source.verbose){try{var log=console.log.bind(console),trace=console.trace.bind(console),prefix=source.ruleText||\"\";if(source.domainName){var ruleStartIndex;source.ruleText.indexOf(\"#%#//\")>-1?ruleStartIndex=source.ruleText.indexOf(\"#%#//\"):source.ruleText.indexOf(\"##+js\")>-1&&(ruleStartIndex=source.ruleText.indexOf(\"##+js\"));var rulePart=source.ruleText.slice(ruleStartIndex);prefix=\"\".concat(source.domainName).concat(rulePart)}log(\"\".concat(prefix,\" trace start\")),trace&&trace(),log(\"\".concat(prefix,\" trace end\"))}catch(e){}\"function\"==typeof window.__debug&&window.__debug(source)}}function validateType(type){return void 0!==type}function validateListener(listener){return void 0!==listener&&(\"function\"==typeof listener||\"object\"==typeof listener&&null!==listener&&\"function\"==typeof listener.handleEvent)}function listenerToString(listener){return\"function\"==typeof listener?listener.toString():listener.handleEvent.toString()}function convertTypeToString(value){return void 0===value?\"undefined\":\"object\"==typeof value?null===value?\"null\":objectToString(value):value.toString()}function logMessage(source,message){var forced=arguments.length>2&&void 0!==arguments[2]&&arguments[2];(forced||source.verbose)&&console.log(\"\".concat(source.name,\": \").concat(message))}function objectToString(obj){return function(obj){return 0===Object.keys(obj).length&&!obj.prototype}(obj)?\"{}\":(object=obj,keys=Object.keys(object),entries=[],keys.forEach((function(key){return entries.push([key,object[key]])})),entries).map((function(pair){var key=pair[0],value=pair[1],recordValueStr=value;return value instanceof Object&&(recordValueStr=\"{ \".concat(objectToString(value),\" }\")),\"\".concat(key,':\"').concat(recordValueStr,'\"')})).join(\" \");var object,keys,entries}var updatedArgs=args?[].concat(source).concat(args):[source];try{(function(source){var nativeAddEventListener=window.EventTarget.prototype.addEventListener;function addEventListenerWrapper(type,listener){var _this$constructor;if(validateType(type)&&validateListener(listener)){var _message='addEventListener(\"'.concat(type,'\", ').concat(listenerToString(listener),\")\");logMessage(source,_message,!0),hit(source)}var message=\"Invalid event type or listener passed to addEventListener:\\ntype: \".concat(convertTypeToString(type),\"\\nlistener: \").concat(convertTypeToString(listener));logMessage(source,message,!0);var context=this;this&&\"Window\"===(null===(_this$constructor=this.constructor)||void 0===_this$constructor?void 0:_this$constructor.name)&&this!==window&&(context=window);for(var _len=arguments.length,args=new Array(_len>2?_len-2:0),_key=2;_key<_len;_key++)args[_key-2]=arguments[_key];return nativeAddEventListener.apply(context,[type,listener].concat(args))}var descriptor={configurable:!0,set:function(){},get:function(){return addEventListenerWrapper}};Object.defineProperty(window.EventTarget.prototype,\"addEventListener\",descriptor),Object.defineProperty(window,\"addEventListener\",descriptor),Object.defineProperty(document,\"addEventListener\",descriptor)}).apply(this,updatedArgs)}catch(e){console.log(e)}}"
},
{
"names": [
"log-eval"
],
- "scriptlet": "function logEval(source,args){function hit(source,message){if(!0===source.verbose){try{var log=console.log.bind(console),trace=console.trace.bind(console),prefix=source.ruleText||\"\";if(source.domainName){var ruleStartIndex;source.ruleText.indexOf(\"#%#//\")>-1?ruleStartIndex=source.ruleText.indexOf(\"#%#//\"):source.ruleText.indexOf(\"##+js\")>-1&&(ruleStartIndex=source.ruleText.indexOf(\"##+js\"));var rulePart=source.ruleText.slice(ruleStartIndex);prefix=\"\".concat(source.domainName).concat(rulePart)}message&&(-1===message.indexOf(\"log: \")?log(\"\".concat(prefix,\" message:\\n\").concat(message)):log(message.slice(\"log: \".length))),log(\"\".concat(prefix,\" trace start\")),trace&&trace(),log(\"\".concat(prefix,\" trace end\"))}catch(e){}\"function\"==typeof window.__debug&&window.__debug(source)}}function logMessage(source,message){var forced=arguments.length>2&&void 0!==arguments[2]&&arguments[2];(forced||source.verbose)&&console.log(\"\".concat(source.name,\": \").concat(message))}var updatedArgs=args?[].concat(source).concat(args):[source];try{(function(source){var nativeEval=window.eval;window.eval=function(str){return hit(source),logMessage(source,'eval(\"'.concat(str,'\")'),!0),nativeEval(str)};var nativeFunction=window.Function;function FunctionWrapper(){hit(source);for(var _len=arguments.length,args=new Array(_len),_key=0;_key<_len;_key++)args[_key]=arguments[_key];return logMessage(source,\"new Function(\".concat(args.join(\", \"),\")\"),!0),nativeFunction.apply(this,[].concat(args))}FunctionWrapper.prototype=Object.create(nativeFunction.prototype),FunctionWrapper.prototype.constructor=FunctionWrapper,window.Function=FunctionWrapper}).apply(this,updatedArgs)}catch(e){console.log(e)}}"
+ "scriptlet": "function logEval(source,args){function hit(source){if(!0===source.verbose){try{var log=console.log.bind(console),trace=console.trace.bind(console),prefix=source.ruleText||\"\";if(source.domainName){var ruleStartIndex;source.ruleText.indexOf(\"#%#//\")>-1?ruleStartIndex=source.ruleText.indexOf(\"#%#//\"):source.ruleText.indexOf(\"##+js\")>-1&&(ruleStartIndex=source.ruleText.indexOf(\"##+js\"));var rulePart=source.ruleText.slice(ruleStartIndex);prefix=\"\".concat(source.domainName).concat(rulePart)}log(\"\".concat(prefix,\" trace start\")),trace&&trace(),log(\"\".concat(prefix,\" trace end\"))}catch(e){}\"function\"==typeof window.__debug&&window.__debug(source)}}function logMessage(source,message){var forced=arguments.length>2&&void 0!==arguments[2]&&arguments[2];(forced||source.verbose)&&console.log(\"\".concat(source.name,\": \").concat(message))}var updatedArgs=args?[].concat(source).concat(args):[source];try{(function(source){var nativeEval=window.eval;window.eval=function(str){return hit(source),logMessage(source,'eval(\"'.concat(str,'\")'),!0),nativeEval(str)};var nativeFunction=window.Function;function FunctionWrapper(){hit(source);for(var _len=arguments.length,args=new Array(_len),_key=0;_key<_len;_key++)args[_key]=arguments[_key];return logMessage(source,\"new Function(\".concat(args.join(\", \"),\")\"),!0),nativeFunction.apply(this,[].concat(args))}FunctionWrapper.prototype=Object.create(nativeFunction.prototype),FunctionWrapper.prototype.constructor=FunctionWrapper,window.Function=FunctionWrapper}).apply(this,updatedArgs)}catch(e){console.log(e)}}"
},
{
"names": [
@@ -189,7 +189,7 @@
"ubo-noeval",
"ubo-silent-noeval"
],
- "scriptlet": "function noeval(source,args){var updatedArgs=args?[].concat(source).concat(args):[source];try{(function(source){window.eval=function(s){!function(source,message){if(!0===source.verbose){try{var log=console.log.bind(console),trace=console.trace.bind(console),prefix=source.ruleText||\"\";if(source.domainName){var ruleStartIndex,AG_SCRIPTLET_MARKER=\"#%#//\",UBO_SCRIPTLET_MARKER=\"##+js\";source.ruleText.indexOf(AG_SCRIPTLET_MARKER)>-1?ruleStartIndex=source.ruleText.indexOf(AG_SCRIPTLET_MARKER):source.ruleText.indexOf(UBO_SCRIPTLET_MARKER)>-1&&(ruleStartIndex=source.ruleText.indexOf(UBO_SCRIPTLET_MARKER));var rulePart=source.ruleText.slice(ruleStartIndex);prefix=\"\".concat(source.domainName).concat(rulePart)}var LOG_MARKER=\"log: \";message&&(-1===message.indexOf(LOG_MARKER)?log(\"\".concat(prefix,\" message:\\n\").concat(message)):log(message.slice(LOG_MARKER.length))),log(\"\".concat(prefix,\" trace start\")),trace&&trace(),log(\"\".concat(prefix,\" trace end\"))}catch(e){}\"function\"==typeof window.__debug&&window.__debug(source)}}(source,\"AdGuard has prevented eval:\\n\".concat(s))}.bind()}).apply(this,updatedArgs)}catch(e){console.log(e)}}"
+ "scriptlet": "function noeval(source,args){var updatedArgs=args?[].concat(source).concat(args):[source];try{(function(source){window.eval=function(s){!function(source){if(!0===source.verbose){try{var log=console.log.bind(console),trace=console.trace.bind(console),prefix=source.ruleText||\"\";if(source.domainName){var ruleStartIndex,AG_SCRIPTLET_MARKER=\"#%#//\",UBO_SCRIPTLET_MARKER=\"##+js\";source.ruleText.indexOf(AG_SCRIPTLET_MARKER)>-1?ruleStartIndex=source.ruleText.indexOf(AG_SCRIPTLET_MARKER):source.ruleText.indexOf(UBO_SCRIPTLET_MARKER)>-1&&(ruleStartIndex=source.ruleText.indexOf(UBO_SCRIPTLET_MARKER));var rulePart=source.ruleText.slice(ruleStartIndex);prefix=\"\".concat(source.domainName).concat(rulePart)}log(\"\".concat(prefix,\" trace start\")),trace&&trace(),log(\"\".concat(prefix,\" trace end\"))}catch(e){}\"function\"==typeof window.__debug&&window.__debug(source)}}(source),function(source,message){(arguments.length>2&&void 0!==arguments[2]&&arguments[2]||source.verbose)&&console.log(\"\".concat(source.name,\": \").concat(message))}(source,\"AdGuard has prevented eval:\\n\".concat(s),!0)}.bind()}).apply(this,updatedArgs)}catch(e){console.log(e)}}"
},
{
"names": [
@@ -198,7 +198,7 @@
"ubo-noeval-if.js",
"ubo-noeval-if"
],
- "scriptlet": "function preventEvalIf(source,args){var updatedArgs=args?[].concat(source).concat(args):[source];try{(function(source,search){var searchRegexp=function(){var input=arguments.length>0&&void 0!==arguments[0]?arguments[0]:\"\",FORWARD_SLASH=\"/\";if(\"\"===input)return new RegExp(\".?\");if(input[0]===FORWARD_SLASH&&input[input.length-1]===FORWARD_SLASH)return new RegExp(input.slice(1,-1));var escaped=input.replace(/[.*+?^${}()|[\\]\\\\]/g,\"\\\\$&\");return new RegExp(escaped)}(search),nativeEval=window.eval;window.eval=function(payload){if(!searchRegexp.test(payload.toString()))return nativeEval.call(window,payload);!function(source,message){if(!0===source.verbose){try{var log=console.log.bind(console),trace=console.trace.bind(console),prefix=source.ruleText||\"\";if(source.domainName){var ruleStartIndex,AG_SCRIPTLET_MARKER=\"#%#//\",UBO_SCRIPTLET_MARKER=\"##+js\";source.ruleText.indexOf(AG_SCRIPTLET_MARKER)>-1?ruleStartIndex=source.ruleText.indexOf(AG_SCRIPTLET_MARKER):source.ruleText.indexOf(UBO_SCRIPTLET_MARKER)>-1&&(ruleStartIndex=source.ruleText.indexOf(UBO_SCRIPTLET_MARKER));var rulePart=source.ruleText.slice(ruleStartIndex);prefix=\"\".concat(source.domainName).concat(rulePart)}var LOG_MARKER=\"log: \";message&&(-1===message.indexOf(LOG_MARKER)?log(\"\".concat(prefix,\" message:\\n\").concat(message)):log(message.slice(LOG_MARKER.length))),log(\"\".concat(prefix,\" trace start\")),trace&&trace(),log(\"\".concat(prefix,\" trace end\"))}catch(e){}\"function\"==typeof window.__debug&&window.__debug(source)}}(source,payload)}.bind(window)}).apply(this,updatedArgs)}catch(e){console.log(e)}}"
+ "scriptlet": "function preventEvalIf(source,args){var updatedArgs=args?[].concat(source).concat(args):[source];try{(function(source,search){var searchRegexp=function(){var input=arguments.length>0&&void 0!==arguments[0]?arguments[0]:\"\",FORWARD_SLASH=\"/\";if(\"\"===input)return new RegExp(\".?\");if(input[0]===FORWARD_SLASH&&input[input.length-1]===FORWARD_SLASH)return new RegExp(input.slice(1,-1));var escaped=input.replace(/[.*+?^${}()|[\\]\\\\]/g,\"\\\\$&\");return new RegExp(escaped)}(search),nativeEval=window.eval;window.eval=function(payload){if(!searchRegexp.test(payload.toString()))return nativeEval.call(window,payload);!function(source){if(!0===source.verbose){try{var log=console.log.bind(console),trace=console.trace.bind(console),prefix=source.ruleText||\"\";if(source.domainName){var ruleStartIndex,AG_SCRIPTLET_MARKER=\"#%#//\",UBO_SCRIPTLET_MARKER=\"##+js\";source.ruleText.indexOf(AG_SCRIPTLET_MARKER)>-1?ruleStartIndex=source.ruleText.indexOf(AG_SCRIPTLET_MARKER):source.ruleText.indexOf(UBO_SCRIPTLET_MARKER)>-1&&(ruleStartIndex=source.ruleText.indexOf(UBO_SCRIPTLET_MARKER));var rulePart=source.ruleText.slice(ruleStartIndex);prefix=\"\".concat(source.domainName).concat(rulePart)}log(\"\".concat(prefix,\" trace start\")),trace&&trace(),log(\"\".concat(prefix,\" trace end\"))}catch(e){}\"function\"==typeof window.__debug&&window.__debug(source)}}(source)}.bind(window)}).apply(this,updatedArgs)}catch(e){console.log(e)}}"
},
{
"names": [
@@ -209,7 +209,7 @@
"ubo-fuckadblock.js-3.2.0",
"ubo-nofab"
],
- "scriptlet": "function preventFab(source,args){function noopFunc(){}function noopThis(){return this}var updatedArgs=args?[].concat(source).concat(args):[source];try{(function(source){!function(source,message){if(!0===source.verbose){try{var log=console.log.bind(console),trace=console.trace.bind(console),prefix=source.ruleText||\"\";if(source.domainName){var ruleStartIndex,AG_SCRIPTLET_MARKER=\"#%#//\",UBO_SCRIPTLET_MARKER=\"##+js\";source.ruleText.indexOf(AG_SCRIPTLET_MARKER)>-1?ruleStartIndex=source.ruleText.indexOf(AG_SCRIPTLET_MARKER):source.ruleText.indexOf(UBO_SCRIPTLET_MARKER)>-1&&(ruleStartIndex=source.ruleText.indexOf(UBO_SCRIPTLET_MARKER));var rulePart=source.ruleText.slice(ruleStartIndex);prefix=\"\".concat(source.domainName).concat(rulePart)}var LOG_MARKER=\"log: \";message&&(-1===message.indexOf(LOG_MARKER)?log(\"\".concat(prefix,\" message:\\n\").concat(message)):log(message.slice(LOG_MARKER.length))),log(\"\".concat(prefix,\" trace start\")),trace&&trace(),log(\"\".concat(prefix,\" trace end\"))}catch(e){}\"function\"==typeof window.__debug&&window.__debug(source)}}(source);var Fab=function(){};Fab.prototype.check=noopFunc,Fab.prototype.clearEvent=noopFunc,Fab.prototype.emitEvent=noopFunc,Fab.prototype.on=function(a,b){return a||b(),this},Fab.prototype.onDetected=noopThis,Fab.prototype.onNotDetected=function(a){return a(),this},Fab.prototype.setOption=noopFunc,Fab.prototype.options={set:noopFunc,get:noopFunc};var fab=new Fab,getSetFab={get:function(){return Fab},set:function(){}},getsetfab={get:function(){return fab},set:function(){}};Object.prototype.hasOwnProperty.call(window,\"FuckAdBlock\")?window.FuckAdBlock=Fab:Object.defineProperty(window,\"FuckAdBlock\",getSetFab),Object.prototype.hasOwnProperty.call(window,\"BlockAdBlock\")?window.BlockAdBlock=Fab:Object.defineProperty(window,\"BlockAdBlock\",getSetFab),Object.prototype.hasOwnProperty.call(window,\"SniffAdBlock\")?window.SniffAdBlock=Fab:Object.defineProperty(window,\"SniffAdBlock\",getSetFab),Object.prototype.hasOwnProperty.call(window,\"fuckAdBlock\")?window.fuckAdBlock=fab:Object.defineProperty(window,\"fuckAdBlock\",getsetfab),Object.prototype.hasOwnProperty.call(window,\"blockAdBlock\")?window.blockAdBlock=fab:Object.defineProperty(window,\"blockAdBlock\",getsetfab),Object.prototype.hasOwnProperty.call(window,\"sniffAdBlock\")?window.sniffAdBlock=fab:Object.defineProperty(window,\"sniffAdBlock\",getsetfab)}).apply(this,updatedArgs)}catch(e){console.log(e)}}"
+ "scriptlet": "function preventFab(source,args){function noopFunc(){}function noopThis(){return this}var updatedArgs=args?[].concat(source).concat(args):[source];try{(function(source){!function(source){if(!0===source.verbose){try{var log=console.log.bind(console),trace=console.trace.bind(console),prefix=source.ruleText||\"\";if(source.domainName){var ruleStartIndex,AG_SCRIPTLET_MARKER=\"#%#//\",UBO_SCRIPTLET_MARKER=\"##+js\";source.ruleText.indexOf(AG_SCRIPTLET_MARKER)>-1?ruleStartIndex=source.ruleText.indexOf(AG_SCRIPTLET_MARKER):source.ruleText.indexOf(UBO_SCRIPTLET_MARKER)>-1&&(ruleStartIndex=source.ruleText.indexOf(UBO_SCRIPTLET_MARKER));var rulePart=source.ruleText.slice(ruleStartIndex);prefix=\"\".concat(source.domainName).concat(rulePart)}log(\"\".concat(prefix,\" trace start\")),trace&&trace(),log(\"\".concat(prefix,\" trace end\"))}catch(e){}\"function\"==typeof window.__debug&&window.__debug(source)}}(source);var Fab=function(){};Fab.prototype.check=noopFunc,Fab.prototype.clearEvent=noopFunc,Fab.prototype.emitEvent=noopFunc,Fab.prototype.on=function(a,b){return a||b(),this},Fab.prototype.onDetected=noopThis,Fab.prototype.onNotDetected=function(a){return a(),this},Fab.prototype.setOption=noopFunc,Fab.prototype.options={set:noopFunc,get:noopFunc};var fab=new Fab,getSetFab={get:function(){return Fab},set:function(){}},getsetfab={get:function(){return fab},set:function(){}};Object.prototype.hasOwnProperty.call(window,\"FuckAdBlock\")?window.FuckAdBlock=Fab:Object.defineProperty(window,\"FuckAdBlock\",getSetFab),Object.prototype.hasOwnProperty.call(window,\"BlockAdBlock\")?window.BlockAdBlock=Fab:Object.defineProperty(window,\"BlockAdBlock\",getSetFab),Object.prototype.hasOwnProperty.call(window,\"SniffAdBlock\")?window.SniffAdBlock=Fab:Object.defineProperty(window,\"SniffAdBlock\",getSetFab),Object.prototype.hasOwnProperty.call(window,\"fuckAdBlock\")?window.fuckAdBlock=fab:Object.defineProperty(window,\"fuckAdBlock\",getsetfab),Object.prototype.hasOwnProperty.call(window,\"blockAdBlock\")?window.blockAdBlock=fab:Object.defineProperty(window,\"blockAdBlock\",getsetfab),Object.prototype.hasOwnProperty.call(window,\"sniffAdBlock\")?window.sniffAdBlock=fab:Object.defineProperty(window,\"sniffAdBlock\",getsetfab)}).apply(this,updatedArgs)}catch(e){console.log(e)}}"
},
{
"names": [
@@ -218,7 +218,7 @@
"ubo-popads-dummy.js",
"ubo-popads-dummy"
],
- "scriptlet": "function setPopadsDummy(source,args){function hit(source,message){if(!0===source.verbose){try{var log=console.log.bind(console),trace=console.trace.bind(console),prefix=source.ruleText||\"\";if(source.domainName){var ruleStartIndex;source.ruleText.indexOf(\"#%#//\")>-1?ruleStartIndex=source.ruleText.indexOf(\"#%#//\"):source.ruleText.indexOf(\"##+js\")>-1&&(ruleStartIndex=source.ruleText.indexOf(\"##+js\"));var rulePart=source.ruleText.slice(ruleStartIndex);prefix=\"\".concat(source.domainName).concat(rulePart)}message&&(-1===message.indexOf(\"log: \")?log(\"\".concat(prefix,\" message:\\n\").concat(message)):log(message.slice(\"log: \".length))),log(\"\".concat(prefix,\" trace start\")),trace&&trace(),log(\"\".concat(prefix,\" trace end\"))}catch(e){}\"function\"==typeof window.__debug&&window.__debug(source)}}var updatedArgs=args?[].concat(source).concat(args):[source];try{(function(source){delete window.PopAds,delete window.popns,Object.defineProperties(window,{PopAds:{get:function(){return hit(source),{}}},popns:{get:function(){return hit(source),{}}}})}).apply(this,updatedArgs)}catch(e){console.log(e)}}"
+ "scriptlet": "function setPopadsDummy(source,args){function hit(source){if(!0===source.verbose){try{var log=console.log.bind(console),trace=console.trace.bind(console),prefix=source.ruleText||\"\";if(source.domainName){var ruleStartIndex;source.ruleText.indexOf(\"#%#//\")>-1?ruleStartIndex=source.ruleText.indexOf(\"#%#//\"):source.ruleText.indexOf(\"##+js\")>-1&&(ruleStartIndex=source.ruleText.indexOf(\"##+js\"));var rulePart=source.ruleText.slice(ruleStartIndex);prefix=\"\".concat(source.domainName).concat(rulePart)}log(\"\".concat(prefix,\" trace start\")),trace&&trace(),log(\"\".concat(prefix,\" trace end\"))}catch(e){}\"function\"==typeof window.__debug&&window.__debug(source)}}var updatedArgs=args?[].concat(source).concat(args):[source];try{(function(source){delete window.PopAds,delete window.popns,Object.defineProperties(window,{PopAds:{get:function(){return hit(source),{}}},popns:{get:function(){return hit(source),{}}}})}).apply(this,updatedArgs)}catch(e){console.log(e)}}"
},
{
"names": [
@@ -227,7 +227,7 @@
"ubo-popads.net.js",
"ubo-popads.net"
],
- "scriptlet": "function preventPopadsNet(source,args){var updatedArgs=args?[].concat(source).concat(args):[source];try{(function(source){var rid=Math.random().toString(36).substr(2,9),throwError=function(){throw new ReferenceError(rid)};delete window.PopAds,delete window.popns,Object.defineProperties(window,{PopAds:{set:throwError},popns:{set:throwError}}),window.onerror=function(rid){var nativeOnError=window.onerror;return function(error){if(\"string\"==typeof error&&-1!==error.indexOf(rid))return!0;if(nativeOnError instanceof Function){for(var _len=arguments.length,args=new Array(_len>1?_len-1:0),_key=1;_key<_len;_key++)args[_key-1]=arguments[_key];return nativeOnError.apply(this,[error].concat(args))}return!1}}(rid).bind(),function(source,message){if(!0===source.verbose){try{var log=console.log.bind(console),trace=console.trace.bind(console),prefix=source.ruleText||\"\";if(source.domainName){var ruleStartIndex,AG_SCRIPTLET_MARKER=\"#%#//\",UBO_SCRIPTLET_MARKER=\"##+js\";source.ruleText.indexOf(AG_SCRIPTLET_MARKER)>-1?ruleStartIndex=source.ruleText.indexOf(AG_SCRIPTLET_MARKER):source.ruleText.indexOf(UBO_SCRIPTLET_MARKER)>-1&&(ruleStartIndex=source.ruleText.indexOf(UBO_SCRIPTLET_MARKER));var rulePart=source.ruleText.slice(ruleStartIndex);prefix=\"\".concat(source.domainName).concat(rulePart)}var LOG_MARKER=\"log: \";message&&(-1===message.indexOf(LOG_MARKER)?log(\"\".concat(prefix,\" message:\\n\").concat(message)):log(message.slice(LOG_MARKER.length))),log(\"\".concat(prefix,\" trace start\")),trace&&trace(),log(\"\".concat(prefix,\" trace end\"))}catch(e){}\"function\"==typeof window.__debug&&window.__debug(source)}}(source)}).apply(this,updatedArgs)}catch(e){console.log(e)}}"
+ "scriptlet": "function preventPopadsNet(source,args){var updatedArgs=args?[].concat(source).concat(args):[source];try{(function(source){var rid=Math.random().toString(36).slice(2,9),throwError=function(){throw new ReferenceError(rid)};delete window.PopAds,delete window.popns,Object.defineProperties(window,{PopAds:{set:throwError},popns:{set:throwError}}),window.onerror=function(rid){var nativeOnError=window.onerror;return function(error){if(\"string\"==typeof error&&-1!==error.indexOf(rid))return!0;if(nativeOnError instanceof Function){for(var _len=arguments.length,args=new Array(_len>1?_len-1:0),_key=1;_key<_len;_key++)args[_key-1]=arguments[_key];return nativeOnError.apply(this,[error].concat(args))}return!1}}(rid).bind(),function(source){if(!0===source.verbose){try{var log=console.log.bind(console),trace=console.trace.bind(console),prefix=source.ruleText||\"\";if(source.domainName){var ruleStartIndex,AG_SCRIPTLET_MARKER=\"#%#//\",UBO_SCRIPTLET_MARKER=\"##+js\";source.ruleText.indexOf(AG_SCRIPTLET_MARKER)>-1?ruleStartIndex=source.ruleText.indexOf(AG_SCRIPTLET_MARKER):source.ruleText.indexOf(UBO_SCRIPTLET_MARKER)>-1&&(ruleStartIndex=source.ruleText.indexOf(UBO_SCRIPTLET_MARKER));var rulePart=source.ruleText.slice(ruleStartIndex);prefix=\"\".concat(source.domainName).concat(rulePart)}log(\"\".concat(prefix,\" trace start\")),trace&&trace(),log(\"\".concat(prefix,\" trace end\"))}catch(e){}\"function\"==typeof window.__debug&&window.__debug(source)}}(source)}).apply(this,updatedArgs)}catch(e){console.log(e)}}"
},
{
"names": [
@@ -236,25 +236,25 @@
"ubo-adfly-defuser.js",
"ubo-adfly-defuser"
],
- "scriptlet": "function preventAdfly(source,args){var updatedArgs=args?[].concat(source).concat(args):[source];try{(function(source){var val,isDigit=function(data){return/^\\d$/.test(data)},applyHandler=!0;object=window,property=\"ysmm\",descriptor={configurable:!1,set:function(value){if(applyHandler){applyHandler=!1;try{\"string\"==typeof value&&function(encodedURL){for(var evenChars=\"\",oddChars=\"\",i=0;i2&&void 0!==arguments[2]&&arguments[2]||source.verbose)&&console.log(\"\".concat(source.name,\": \").concat(message))}(source,\"Failed to set up prevent-adfly scriptlet\"):function(source,message){if(!0===source.verbose){try{var log=console.log.bind(console),trace=console.trace.bind(console),prefix=source.ruleText||\"\";if(source.domainName){var ruleStartIndex,AG_SCRIPTLET_MARKER=\"#%#//\",UBO_SCRIPTLET_MARKER=\"##+js\";source.ruleText.indexOf(AG_SCRIPTLET_MARKER)>-1?ruleStartIndex=source.ruleText.indexOf(AG_SCRIPTLET_MARKER):source.ruleText.indexOf(UBO_SCRIPTLET_MARKER)>-1&&(ruleStartIndex=source.ruleText.indexOf(UBO_SCRIPTLET_MARKER));var rulePart=source.ruleText.slice(ruleStartIndex);prefix=\"\".concat(source.domainName).concat(rulePart)}var LOG_MARKER=\"log: \";message&&(-1===message.indexOf(LOG_MARKER)?log(\"\".concat(prefix,\" message:\\n\").concat(message)):log(message.slice(LOG_MARKER.length))),log(\"\".concat(prefix,\" trace start\")),trace&&trace(),log(\"\".concat(prefix,\" trace end\"))}catch(e){}\"function\"==typeof window.__debug&&window.__debug(source)}}(source);var object,property,descriptor,currentDescriptor}).apply(this,updatedArgs)}catch(e){console.log(e)}}"
+ "scriptlet": "function preventAdfly(source,args){var updatedArgs=args?[].concat(source).concat(args):[source];try{(function(source){var val,isDigit=function(data){return/^\\d$/.test(data)},applyHandler=!0;object=window,property=\"ysmm\",descriptor={configurable:!1,set:function(value){if(applyHandler){applyHandler=!1;try{\"string\"==typeof value&&function(encodedURL){for(var evenChars=\"\",oddChars=\"\",i=0;i2&&void 0!==arguments[2]&&arguments[2]||source.verbose)&&console.log(\"\".concat(source.name,\": \").concat(message))}(source,\"Failed to set up prevent-adfly scriptlet\"):function(source){if(!0===source.verbose){try{var log=console.log.bind(console),trace=console.trace.bind(console),prefix=source.ruleText||\"\";if(source.domainName){var ruleStartIndex,AG_SCRIPTLET_MARKER=\"#%#//\",UBO_SCRIPTLET_MARKER=\"##+js\";source.ruleText.indexOf(AG_SCRIPTLET_MARKER)>-1?ruleStartIndex=source.ruleText.indexOf(AG_SCRIPTLET_MARKER):source.ruleText.indexOf(UBO_SCRIPTLET_MARKER)>-1&&(ruleStartIndex=source.ruleText.indexOf(UBO_SCRIPTLET_MARKER));var rulePart=source.ruleText.slice(ruleStartIndex);prefix=\"\".concat(source.domainName).concat(rulePart)}log(\"\".concat(prefix,\" trace start\")),trace&&trace(),log(\"\".concat(prefix,\" trace end\"))}catch(e){}\"function\"==typeof window.__debug&&window.__debug(source)}}(source);var object,property,descriptor,currentDescriptor}).apply(this,updatedArgs)}catch(e){console.log(e)}}"
},
{
"names": [
"debug-on-property-read"
],
- "scriptlet": "function debugOnPropertyRead(source,args){function getPropertyInChain(base,chain){var pos=chain.indexOf(\".\");if(-1===pos)return{base:base,prop:chain};var prop=chain.slice(0,pos);if(null===base)return{base:base,prop:prop,chain:chain};var obj,nextBase=base[prop];return chain=chain.slice(pos+1),(base instanceof Object||\"object\"==typeof base)&&(obj=base,0===Object.keys(obj).length)||null===nextBase?{base:base,prop:prop,chain:chain}:void 0!==nextBase?getPropertyInChain(nextBase,chain):(Object.defineProperty(base,prop,{configurable:!0}),{base:base,prop:prop,chain:chain})}function noopFunc(){}var updatedArgs=args?[].concat(source).concat(args):[source];try{(function(source,property){if(property){var rid=Math.random().toString(36).substr(2,9),abort=function(){!function(source,message){if(!0===source.verbose){try{var log=console.log.bind(console),trace=console.trace.bind(console),prefix=source.ruleText||\"\";if(source.domainName){var ruleStartIndex,AG_SCRIPTLET_MARKER=\"#%#//\",UBO_SCRIPTLET_MARKER=\"##+js\";source.ruleText.indexOf(AG_SCRIPTLET_MARKER)>-1?ruleStartIndex=source.ruleText.indexOf(AG_SCRIPTLET_MARKER):source.ruleText.indexOf(UBO_SCRIPTLET_MARKER)>-1&&(ruleStartIndex=source.ruleText.indexOf(UBO_SCRIPTLET_MARKER));var rulePart=source.ruleText.slice(ruleStartIndex);prefix=\"\".concat(source.domainName).concat(rulePart)}var LOG_MARKER=\"log: \";message&&(-1===message.indexOf(LOG_MARKER)?log(\"\".concat(prefix,\" message:\\n\").concat(message)):log(message.slice(LOG_MARKER.length))),log(\"\".concat(prefix,\" trace start\")),trace&&trace(),log(\"\".concat(prefix,\" trace end\"))}catch(e){}\"function\"==typeof window.__debug&&window.__debug(source)}}(source);debugger};!function setChainPropAccess(owner,property){var chainInfo=getPropertyInChain(owner,property),base=chainInfo.base,prop=chainInfo.prop,chain=chainInfo.chain;chain?Object.defineProperty(owner,prop,{get:function(){return base},set:function(a){base=a,a instanceof Object&&setChainPropAccess(a,chain)}}):function(object,property,descriptor){var currentDescriptor=Object.getOwnPropertyDescriptor(object,property);if(currentDescriptor&&!currentDescriptor.configurable)return!1;Object.defineProperty(object,property,descriptor)}(base,prop,{get:abort,set:noopFunc})}(window,property),window.onerror=function(rid){var nativeOnError=window.onerror;return function(error){if(\"string\"==typeof error&&-1!==error.indexOf(rid))return!0;if(nativeOnError instanceof Function){for(var _len=arguments.length,args=new Array(_len>1?_len-1:0),_key=1;_key<_len;_key++)args[_key-1]=arguments[_key];return nativeOnError.apply(this,[error].concat(args))}return!1}}(rid).bind()}}).apply(this,updatedArgs)}catch(e){console.log(e)}}"
+ "scriptlet": "function debugOnPropertyRead(source,args){function getPropertyInChain(base,chain){var pos=chain.indexOf(\".\");if(-1===pos)return{base:base,prop:chain};var prop=chain.slice(0,pos);if(null===base)return{base:base,prop:prop,chain:chain};var obj,nextBase=base[prop];return chain=chain.slice(pos+1),(base instanceof Object||\"object\"==typeof base)&&(obj=base,0===Object.keys(obj).length&&!obj.prototype)||null===nextBase?{base:base,prop:prop,chain:chain}:void 0!==nextBase?getPropertyInChain(nextBase,chain):(Object.defineProperty(base,prop,{configurable:!0}),{base:base,prop:prop,chain:chain})}function noopFunc(){}var updatedArgs=args?[].concat(source).concat(args):[source];try{(function(source,property){if(property){var rid=Math.random().toString(36).slice(2,9),abort=function(){!function(source){if(!0===source.verbose){try{var log=console.log.bind(console),trace=console.trace.bind(console),prefix=source.ruleText||\"\";if(source.domainName){var ruleStartIndex,AG_SCRIPTLET_MARKER=\"#%#//\",UBO_SCRIPTLET_MARKER=\"##+js\";source.ruleText.indexOf(AG_SCRIPTLET_MARKER)>-1?ruleStartIndex=source.ruleText.indexOf(AG_SCRIPTLET_MARKER):source.ruleText.indexOf(UBO_SCRIPTLET_MARKER)>-1&&(ruleStartIndex=source.ruleText.indexOf(UBO_SCRIPTLET_MARKER));var rulePart=source.ruleText.slice(ruleStartIndex);prefix=\"\".concat(source.domainName).concat(rulePart)}log(\"\".concat(prefix,\" trace start\")),trace&&trace(),log(\"\".concat(prefix,\" trace end\"))}catch(e){}\"function\"==typeof window.__debug&&window.__debug(source)}}(source);debugger};!function setChainPropAccess(owner,property){var chainInfo=getPropertyInChain(owner,property),base=chainInfo.base,prop=chainInfo.prop,chain=chainInfo.chain;chain?Object.defineProperty(owner,prop,{get:function(){return base},set:function(a){base=a,a instanceof Object&&setChainPropAccess(a,chain)}}):function(object,property,descriptor){var currentDescriptor=Object.getOwnPropertyDescriptor(object,property);if(currentDescriptor&&!currentDescriptor.configurable)return!1;Object.defineProperty(object,property,descriptor)}(base,prop,{get:abort,set:noopFunc})}(window,property),window.onerror=function(rid){var nativeOnError=window.onerror;return function(error){if(\"string\"==typeof error&&-1!==error.indexOf(rid))return!0;if(nativeOnError instanceof Function){for(var _len=arguments.length,args=new Array(_len>1?_len-1:0),_key=1;_key<_len;_key++)args[_key-1]=arguments[_key];return nativeOnError.apply(this,[error].concat(args))}return!1}}(rid).bind()}}).apply(this,updatedArgs)}catch(e){console.log(e)}}"
},
{
"names": [
"debug-on-property-write"
],
- "scriptlet": "function debugOnPropertyWrite(source,args){function getPropertyInChain(base,chain){var pos=chain.indexOf(\".\");if(-1===pos)return{base:base,prop:chain};var prop=chain.slice(0,pos);if(null===base)return{base:base,prop:prop,chain:chain};var obj,nextBase=base[prop];return chain=chain.slice(pos+1),(base instanceof Object||\"object\"==typeof base)&&(obj=base,0===Object.keys(obj).length)||null===nextBase?{base:base,prop:prop,chain:chain}:void 0!==nextBase?getPropertyInChain(nextBase,chain):(Object.defineProperty(base,prop,{configurable:!0}),{base:base,prop:prop,chain:chain})}var updatedArgs=args?[].concat(source).concat(args):[source];try{(function(source,property){if(property){var rid=Math.random().toString(36).substr(2,9),abort=function(){!function(source,message){if(!0===source.verbose){try{var log=console.log.bind(console),trace=console.trace.bind(console),prefix=source.ruleText||\"\";if(source.domainName){var ruleStartIndex,AG_SCRIPTLET_MARKER=\"#%#//\",UBO_SCRIPTLET_MARKER=\"##+js\";source.ruleText.indexOf(AG_SCRIPTLET_MARKER)>-1?ruleStartIndex=source.ruleText.indexOf(AG_SCRIPTLET_MARKER):source.ruleText.indexOf(UBO_SCRIPTLET_MARKER)>-1&&(ruleStartIndex=source.ruleText.indexOf(UBO_SCRIPTLET_MARKER));var rulePart=source.ruleText.slice(ruleStartIndex);prefix=\"\".concat(source.domainName).concat(rulePart)}var LOG_MARKER=\"log: \";message&&(-1===message.indexOf(LOG_MARKER)?log(\"\".concat(prefix,\" message:\\n\").concat(message)):log(message.slice(LOG_MARKER.length))),log(\"\".concat(prefix,\" trace start\")),trace&&trace(),log(\"\".concat(prefix,\" trace end\"))}catch(e){}\"function\"==typeof window.__debug&&window.__debug(source)}}(source);debugger};!function setChainPropAccess(owner,property){var chainInfo=getPropertyInChain(owner,property),base=chainInfo.base,prop=chainInfo.prop,chain=chainInfo.chain;chain?Object.defineProperty(owner,prop,{get:function(){return base},set:function(a){base=a,a instanceof Object&&setChainPropAccess(a,chain)}}):function(object,property,descriptor){var currentDescriptor=Object.getOwnPropertyDescriptor(object,property);if(currentDescriptor&&!currentDescriptor.configurable)return!1;Object.defineProperty(object,property,descriptor)}(base,prop,{set:abort})}(window,property),window.onerror=function(rid){var nativeOnError=window.onerror;return function(error){if(\"string\"==typeof error&&-1!==error.indexOf(rid))return!0;if(nativeOnError instanceof Function){for(var _len=arguments.length,args=new Array(_len>1?_len-1:0),_key=1;_key<_len;_key++)args[_key-1]=arguments[_key];return nativeOnError.apply(this,[error].concat(args))}return!1}}(rid).bind()}}).apply(this,updatedArgs)}catch(e){console.log(e)}}"
+ "scriptlet": "function debugOnPropertyWrite(source,args){function getPropertyInChain(base,chain){var pos=chain.indexOf(\".\");if(-1===pos)return{base:base,prop:chain};var prop=chain.slice(0,pos);if(null===base)return{base:base,prop:prop,chain:chain};var obj,nextBase=base[prop];return chain=chain.slice(pos+1),(base instanceof Object||\"object\"==typeof base)&&(obj=base,0===Object.keys(obj).length&&!obj.prototype)||null===nextBase?{base:base,prop:prop,chain:chain}:void 0!==nextBase?getPropertyInChain(nextBase,chain):(Object.defineProperty(base,prop,{configurable:!0}),{base:base,prop:prop,chain:chain})}var updatedArgs=args?[].concat(source).concat(args):[source];try{(function(source,property){if(property){var rid=Math.random().toString(36).slice(2,9),abort=function(){!function(source){if(!0===source.verbose){try{var log=console.log.bind(console),trace=console.trace.bind(console),prefix=source.ruleText||\"\";if(source.domainName){var ruleStartIndex,AG_SCRIPTLET_MARKER=\"#%#//\",UBO_SCRIPTLET_MARKER=\"##+js\";source.ruleText.indexOf(AG_SCRIPTLET_MARKER)>-1?ruleStartIndex=source.ruleText.indexOf(AG_SCRIPTLET_MARKER):source.ruleText.indexOf(UBO_SCRIPTLET_MARKER)>-1&&(ruleStartIndex=source.ruleText.indexOf(UBO_SCRIPTLET_MARKER));var rulePart=source.ruleText.slice(ruleStartIndex);prefix=\"\".concat(source.domainName).concat(rulePart)}log(\"\".concat(prefix,\" trace start\")),trace&&trace(),log(\"\".concat(prefix,\" trace end\"))}catch(e){}\"function\"==typeof window.__debug&&window.__debug(source)}}(source);debugger};!function setChainPropAccess(owner,property){var chainInfo=getPropertyInChain(owner,property),base=chainInfo.base,prop=chainInfo.prop,chain=chainInfo.chain;chain?Object.defineProperty(owner,prop,{get:function(){return base},set:function(a){base=a,a instanceof Object&&setChainPropAccess(a,chain)}}):function(object,property,descriptor){var currentDescriptor=Object.getOwnPropertyDescriptor(object,property);if(currentDescriptor&&!currentDescriptor.configurable)return!1;Object.defineProperty(object,property,descriptor)}(base,prop,{set:abort})}(window,property),window.onerror=function(rid){var nativeOnError=window.onerror;return function(error){if(\"string\"==typeof error&&-1!==error.indexOf(rid))return!0;if(nativeOnError instanceof Function){for(var _len=arguments.length,args=new Array(_len>1?_len-1:0),_key=1;_key<_len;_key++)args[_key-1]=arguments[_key];return nativeOnError.apply(this,[error].concat(args))}return!1}}(rid).bind()}}).apply(this,updatedArgs)}catch(e){console.log(e)}}"
},
{
"names": [
"debug-current-inline-script"
],
- "scriptlet": "function debugCurrentInlineScript(source,args){function getPropertyInChain(base,chain){var pos=chain.indexOf(\".\");if(-1===pos)return{base:base,prop:chain};var prop=chain.slice(0,pos);if(null===base)return{base:base,prop:prop,chain:chain};var obj,nextBase=base[prop];return chain=chain.slice(pos+1),(base instanceof Object||\"object\"==typeof base)&&(obj=base,0===Object.keys(obj).length)||null===nextBase?{base:base,prop:prop,chain:chain}:void 0!==nextBase?getPropertyInChain(nextBase,chain):(Object.defineProperty(base,prop,{configurable:!0}),{base:base,prop:prop,chain:chain})}var updatedArgs=args?[].concat(source).concat(args):[source];try{(function(source,property,search){var searchRegexp=function(){var input=arguments.length>0&&void 0!==arguments[0]?arguments[0]:\"\",FORWARD_SLASH=\"/\";if(\"\"===input)return new RegExp(\".?\");if(input[0]===FORWARD_SLASH&&input[input.length-1]===FORWARD_SLASH)return new RegExp(input.slice(1,-1));var escaped=input.replace(/[.*+?^${}()|[\\]\\\\]/g,\"\\\\$&\");return new RegExp(escaped)}(search),rid=Math.random().toString(36).substr(2,9),getCurrentScript=function(){if(\"currentScript\"in document)return document.currentScript;var scripts=document.getElementsByTagName(\"script\");return scripts[scripts.length-1]},ourScript=getCurrentScript(),abort=function(){var scriptEl=getCurrentScript();if(scriptEl){var content=scriptEl.textContent;try{content=Object.getOwnPropertyDescriptor(Node.prototype,\"textContent\").get.call(scriptEl)}catch(e){}if(scriptEl instanceof HTMLScriptElement&&content.length>0&&scriptEl!==ourScript&&searchRegexp.test(content)){!function(source,message){if(!0===source.verbose){try{var log=console.log.bind(console),trace=console.trace.bind(console),prefix=source.ruleText||\"\";if(source.domainName){var ruleStartIndex,AG_SCRIPTLET_MARKER=\"#%#//\",UBO_SCRIPTLET_MARKER=\"##+js\";source.ruleText.indexOf(AG_SCRIPTLET_MARKER)>-1?ruleStartIndex=source.ruleText.indexOf(AG_SCRIPTLET_MARKER):source.ruleText.indexOf(UBO_SCRIPTLET_MARKER)>-1&&(ruleStartIndex=source.ruleText.indexOf(UBO_SCRIPTLET_MARKER));var rulePart=source.ruleText.slice(ruleStartIndex);prefix=\"\".concat(source.domainName).concat(rulePart)}var LOG_MARKER=\"log: \";message&&(-1===message.indexOf(LOG_MARKER)?log(\"\".concat(prefix,\" message:\\n\").concat(message)):log(message.slice(LOG_MARKER.length))),log(\"\".concat(prefix,\" trace start\")),trace&&trace(),log(\"\".concat(prefix,\" trace end\"))}catch(e){}\"function\"==typeof window.__debug&&window.__debug(source)}}(source);debugger}}};!function setChainPropAccess(owner,property){var chainInfo=getPropertyInChain(owner,property),base=chainInfo.base,prop=chainInfo.prop,chain=chainInfo.chain;if(base instanceof Object!=0||null!==base)if(chain)Object.defineProperty(owner,prop,{get:function(){return base},set:function(a){base=a,a instanceof Object&&setChainPropAccess(a,chain)}});else{var currentValue=base[prop];!function(object,property,descriptor){var currentDescriptor=Object.getOwnPropertyDescriptor(object,property);if(currentDescriptor&&!currentDescriptor.configurable)return!1;Object.defineProperty(object,property,descriptor)}(base,prop,{set:function(value){abort(),currentValue=value},get:function(){return abort(),currentValue}})}else{var props=property.split(\".\"),propIndex=props.indexOf(prop),baseName=props[propIndex-1];!function(source,message){(arguments.length>2&&void 0!==arguments[2]&&arguments[2]||source.verbose)&&console.log(\"\".concat(source.name,\": \").concat(message))}(\"The scriptlet had been executed before the \".concat(baseName,\" was loaded.\"),source.verbose)}}(window,property),window.onerror=function(rid){var nativeOnError=window.onerror;return function(error){if(\"string\"==typeof error&&-1!==error.indexOf(rid))return!0;if(nativeOnError instanceof Function){for(var _len=arguments.length,args=new Array(_len>1?_len-1:0),_key=1;_key<_len;_key++)args[_key-1]=arguments[_key];return nativeOnError.apply(this,[error].concat(args))}return!1}}(rid).bind()}).apply(this,updatedArgs)}catch(e){console.log(e)}}"
+ "scriptlet": "function debugCurrentInlineScript(source,args){function getPropertyInChain(base,chain){var pos=chain.indexOf(\".\");if(-1===pos)return{base:base,prop:chain};var prop=chain.slice(0,pos);if(null===base)return{base:base,prop:prop,chain:chain};var obj,nextBase=base[prop];return chain=chain.slice(pos+1),(base instanceof Object||\"object\"==typeof base)&&(obj=base,0===Object.keys(obj).length&&!obj.prototype)||null===nextBase?{base:base,prop:prop,chain:chain}:void 0!==nextBase?getPropertyInChain(nextBase,chain):(Object.defineProperty(base,prop,{configurable:!0}),{base:base,prop:prop,chain:chain})}var updatedArgs=args?[].concat(source).concat(args):[source];try{(function(source,property,search){var searchRegexp=function(){var input=arguments.length>0&&void 0!==arguments[0]?arguments[0]:\"\",FORWARD_SLASH=\"/\";if(\"\"===input)return new RegExp(\".?\");if(input[0]===FORWARD_SLASH&&input[input.length-1]===FORWARD_SLASH)return new RegExp(input.slice(1,-1));var escaped=input.replace(/[.*+?^${}()|[\\]\\\\]/g,\"\\\\$&\");return new RegExp(escaped)}(search),rid=Math.random().toString(36).slice(2,9),getCurrentScript=function(){if(\"currentScript\"in document)return document.currentScript;var scripts=document.getElementsByTagName(\"script\");return scripts[scripts.length-1]},ourScript=getCurrentScript(),abort=function(){var scriptEl=getCurrentScript();if(scriptEl){var content=scriptEl.textContent;try{content=Object.getOwnPropertyDescriptor(Node.prototype,\"textContent\").get.call(scriptEl)}catch(e){}if(scriptEl instanceof HTMLScriptElement&&content.length>0&&scriptEl!==ourScript&&searchRegexp.test(content)){!function(source){if(!0===source.verbose){try{var log=console.log.bind(console),trace=console.trace.bind(console),prefix=source.ruleText||\"\";if(source.domainName){var ruleStartIndex,AG_SCRIPTLET_MARKER=\"#%#//\",UBO_SCRIPTLET_MARKER=\"##+js\";source.ruleText.indexOf(AG_SCRIPTLET_MARKER)>-1?ruleStartIndex=source.ruleText.indexOf(AG_SCRIPTLET_MARKER):source.ruleText.indexOf(UBO_SCRIPTLET_MARKER)>-1&&(ruleStartIndex=source.ruleText.indexOf(UBO_SCRIPTLET_MARKER));var rulePart=source.ruleText.slice(ruleStartIndex);prefix=\"\".concat(source.domainName).concat(rulePart)}log(\"\".concat(prefix,\" trace start\")),trace&&trace(),log(\"\".concat(prefix,\" trace end\"))}catch(e){}\"function\"==typeof window.__debug&&window.__debug(source)}}(source);debugger}}};!function setChainPropAccess(owner,property){var chainInfo=getPropertyInChain(owner,property),base=chainInfo.base,prop=chainInfo.prop,chain=chainInfo.chain;if(base instanceof Object!=0||null!==base)if(chain)Object.defineProperty(owner,prop,{get:function(){return base},set:function(a){base=a,a instanceof Object&&setChainPropAccess(a,chain)}});else{var currentValue=base[prop];!function(object,property,descriptor){var currentDescriptor=Object.getOwnPropertyDescriptor(object,property);if(currentDescriptor&&!currentDescriptor.configurable)return!1;Object.defineProperty(object,property,descriptor)}(base,prop,{set:function(value){abort(),currentValue=value},get:function(){return abort(),currentValue}})}else{var props=property.split(\".\"),propIndex=props.indexOf(prop),baseName=props[propIndex-1];!function(source,message){(arguments.length>2&&void 0!==arguments[2]&&arguments[2]||source.verbose)&&console.log(\"\".concat(source.name,\": \").concat(message))}(\"The scriptlet had been executed before the \".concat(baseName,\" was loaded.\"),source.verbose)}}(window,property),window.onerror=function(rid){var nativeOnError=window.onerror;return function(error){if(\"string\"==typeof error&&-1!==error.indexOf(rid))return!0;if(nativeOnError instanceof Function){for(var _len=arguments.length,args=new Array(_len>1?_len-1:0),_key=1;_key<_len;_key++)args[_key-1]=arguments[_key];return nativeOnError.apply(this,[error].concat(args))}return!1}}(rid).bind()}).apply(this,updatedArgs)}catch(e){console.log(e)}}"
},
{
"names": [
@@ -266,13 +266,13 @@
"ubo-remove-attr",
"ubo-ra"
],
- "scriptlet": "function removeAttr(source,args){function hit(source,message){if(!0===source.verbose){try{var log=console.log.bind(console),trace=console.trace.bind(console),prefix=source.ruleText||\"\";if(source.domainName){var ruleStartIndex;source.ruleText.indexOf(\"#%#//\")>-1?ruleStartIndex=source.ruleText.indexOf(\"#%#//\"):source.ruleText.indexOf(\"##+js\")>-1&&(ruleStartIndex=source.ruleText.indexOf(\"##+js\"));var rulePart=source.ruleText.slice(ruleStartIndex);prefix=\"\".concat(source.domainName).concat(rulePart)}message&&(-1===message.indexOf(\"log: \")?log(\"\".concat(prefix,\" message:\\n\").concat(message)):log(message.slice(\"log: \".length))),log(\"\".concat(prefix,\" trace start\")),trace&&trace(),log(\"\".concat(prefix,\" trace end\"))}catch(e){}\"function\"==typeof window.__debug&&window.__debug(source)}}function observeDOMChanges(callback){var observeAttrs=arguments.length>1&&void 0!==arguments[1]&&arguments[1],attrsToObserve=arguments.length>2&&void 0!==arguments[2]?arguments[2]:[],THROTTLE_DELAY_MS=20,observer=new MutationObserver(throttle(callbackWrapper,THROTTLE_DELAY_MS)),connect=function(){attrsToObserve.length>0?observer.observe(document.documentElement,{childList:!0,subtree:!0,attributes:observeAttrs,attributeFilter:attrsToObserve}):observer.observe(document.documentElement,{childList:!0,subtree:!0,attributes:observeAttrs})},disconnect=function(){observer.disconnect()};function callbackWrapper(){disconnect(),callback(),connect()}connect()}function parseFlags(flags){var VALID_FLAGS=[\"stay\",\"asap\",\"complete\"],passedFlags=flags.trim().split(\" \").filter((function(f){return-1!==VALID_FLAGS.indexOf(f)}));return{ASAP:\"asap\",COMPLETE:\"complete\",STAY:\"stay\",hasFlag:function(flag){return-1!==passedFlags.indexOf(flag)}}}function logMessage(source,message){var forced=arguments.length>2&&void 0!==arguments[2]&&arguments[2];(forced||source.verbose)&&console.log(\"\".concat(source.name,\": \").concat(message))}function throttle(cb,delay){var savedArgs,wait=!1;return function wrapper(){for(var _len=arguments.length,args=new Array(_len),_key=0;_key<_len;_key++)args[_key]=arguments[_key];wait?savedArgs=args:(cb.apply(void 0,args),wait=!0,setTimeout((function(){wait=!1,savedArgs&&(wrapper(savedArgs),savedArgs=null)}),delay))}}var updatedArgs=args?[].concat(source).concat(args):[source];try{(function(source,attrs,selector){var applying=arguments.length>3&&void 0!==arguments[3]?arguments[3]:\"asap stay\";if(attrs){attrs=attrs.split(/\\s*\\|\\s*/),selector||(selector=\"[\".concat(attrs.join(\"],[\"),\"]\"));var rmattr=function(){var nodes=[];try{nodes=[].slice.call(document.querySelectorAll(selector))}catch(e){logMessage(source,\"Invalid selector arg: '\".concat(selector,\"'\"))}var removed=!1;nodes.forEach((function(node){attrs.forEach((function(attr){node.removeAttribute(attr),removed=!0}))})),removed&&hit(source)},flags=parseFlags(applying),run=function(){rmattr(),flags.hasFlag(flags.STAY)&&observeDOMChanges(rmattr,!0)};flags.hasFlag(flags.ASAP)&&(\"loading\"===document.readyState?window.addEventListener(\"DOMContentLoaded\",rmattr,{once:!0}):rmattr()),\"complete\"!==document.readyState&&flags.hasFlag(flags.COMPLETE)?window.addEventListener(\"load\",run,{once:!0}):flags.hasFlag(flags.STAY)&&(-1!==!applying.indexOf(\" \")&&rmattr(),observeDOMChanges(rmattr,!0))}}).apply(this,updatedArgs)}catch(e){console.log(e)}}"
+ "scriptlet": "function removeAttr(source,args){function hit(source){if(!0===source.verbose){try{var log=console.log.bind(console),trace=console.trace.bind(console),prefix=source.ruleText||\"\";if(source.domainName){var ruleStartIndex;source.ruleText.indexOf(\"#%#//\")>-1?ruleStartIndex=source.ruleText.indexOf(\"#%#//\"):source.ruleText.indexOf(\"##+js\")>-1&&(ruleStartIndex=source.ruleText.indexOf(\"##+js\"));var rulePart=source.ruleText.slice(ruleStartIndex);prefix=\"\".concat(source.domainName).concat(rulePart)}log(\"\".concat(prefix,\" trace start\")),trace&&trace(),log(\"\".concat(prefix,\" trace end\"))}catch(e){}\"function\"==typeof window.__debug&&window.__debug(source)}}function observeDOMChanges(callback){var observeAttrs=arguments.length>1&&void 0!==arguments[1]&&arguments[1],attrsToObserve=arguments.length>2&&void 0!==arguments[2]?arguments[2]:[],THROTTLE_DELAY_MS=20,observer=new MutationObserver(throttle(callbackWrapper,THROTTLE_DELAY_MS)),connect=function(){attrsToObserve.length>0?observer.observe(document.documentElement,{childList:!0,subtree:!0,attributes:observeAttrs,attributeFilter:attrsToObserve}):observer.observe(document.documentElement,{childList:!0,subtree:!0,attributes:observeAttrs})},disconnect=function(){observer.disconnect()};function callbackWrapper(){disconnect(),callback(),connect()}connect()}function parseFlags(flags){var VALID_FLAGS=[\"stay\",\"asap\",\"complete\"],passedFlags=flags.trim().split(\" \").filter((function(f){return-1!==VALID_FLAGS.indexOf(f)}));return{ASAP:\"asap\",COMPLETE:\"complete\",STAY:\"stay\",hasFlag:function(flag){return-1!==passedFlags.indexOf(flag)}}}function logMessage(source,message){var forced=arguments.length>2&&void 0!==arguments[2]&&arguments[2];(forced||source.verbose)&&console.log(\"\".concat(source.name,\": \").concat(message))}function throttle(cb,delay){var savedArgs,wait=!1;return function wrapper(){for(var _len=arguments.length,args=new Array(_len),_key=0;_key<_len;_key++)args[_key]=arguments[_key];wait?savedArgs=args:(cb.apply(void 0,args),wait=!0,setTimeout((function(){wait=!1,savedArgs&&(wrapper(savedArgs),savedArgs=null)}),delay))}}var updatedArgs=args?[].concat(source).concat(args):[source];try{(function(source,attrs,selector){var applying=arguments.length>3&&void 0!==arguments[3]?arguments[3]:\"asap stay\";if(attrs){attrs=attrs.split(/\\s*\\|\\s*/),selector||(selector=\"[\".concat(attrs.join(\"],[\"),\"]\"));var rmattr=function(){var nodes=[];try{nodes=[].slice.call(document.querySelectorAll(selector))}catch(e){logMessage(source,\"Invalid selector arg: '\".concat(selector,\"'\"))}var removed=!1;nodes.forEach((function(node){attrs.forEach((function(attr){node.removeAttribute(attr),removed=!0}))})),removed&&hit(source)},flags=parseFlags(applying),run=function(){rmattr(),flags.hasFlag(flags.STAY)&&observeDOMChanges(rmattr,!0)};flags.hasFlag(flags.ASAP)&&(\"loading\"===document.readyState?window.addEventListener(\"DOMContentLoaded\",rmattr,{once:!0}):rmattr()),\"complete\"!==document.readyState&&flags.hasFlag(flags.COMPLETE)?window.addEventListener(\"load\",run,{once:!0}):flags.hasFlag(flags.STAY)&&(-1!==!applying.indexOf(\" \")&&rmattr(),observeDOMChanges(rmattr,!0))}}).apply(this,updatedArgs)}catch(e){console.log(e)}}"
},
{
"names": [
"set-attr"
],
- "scriptlet": "function setAttr(source,args){function hit(source,message){if(!0===source.verbose){try{var log=console.log.bind(console),trace=console.trace.bind(console),prefix=source.ruleText||\"\";if(source.domainName){var ruleStartIndex;source.ruleText.indexOf(\"#%#//\")>-1?ruleStartIndex=source.ruleText.indexOf(\"#%#//\"):source.ruleText.indexOf(\"##+js\")>-1&&(ruleStartIndex=source.ruleText.indexOf(\"##+js\"));var rulePart=source.ruleText.slice(ruleStartIndex);prefix=\"\".concat(source.domainName).concat(rulePart)}message&&(-1===message.indexOf(\"log: \")?log(\"\".concat(prefix,\" message:\\n\").concat(message)):log(message.slice(\"log: \".length))),log(\"\".concat(prefix,\" trace start\")),trace&&trace(),log(\"\".concat(prefix,\" trace end\"))}catch(e){}\"function\"==typeof window.__debug&&window.__debug(source)}}function observeDOMChanges(callback){var observeAttrs=arguments.length>1&&void 0!==arguments[1]&&arguments[1],attrsToObserve=arguments.length>2&&void 0!==arguments[2]?arguments[2]:[],THROTTLE_DELAY_MS=20,observer=new MutationObserver(throttle(callbackWrapper,THROTTLE_DELAY_MS)),connect=function(){attrsToObserve.length>0?observer.observe(document.documentElement,{childList:!0,subtree:!0,attributes:observeAttrs,attributeFilter:attrsToObserve}):observer.observe(document.documentElement,{childList:!0,subtree:!0,attributes:observeAttrs})},disconnect=function(){observer.disconnect()};function callbackWrapper(){disconnect(),callback(),connect()}connect()}function nativeIsNaN(num){return(Number.isNaN||window.isNaN)(num)}function throttle(cb,delay){var savedArgs,wait=!1;return function wrapper(){for(var _len=arguments.length,args=new Array(_len),_key=0;_key<_len;_key++)args[_key]=arguments[_key];wait?savedArgs=args:(cb.apply(void 0,args),wait=!0,setTimeout((function(){wait=!1,savedArgs&&(wrapper(savedArgs),savedArgs=null)}),delay))}}var updatedArgs=args?[].concat(source).concat(args):[source];try{(function(source,selector,attr){var value=arguments.length>3&&void 0!==arguments[3]?arguments[3]:\"\";if(selector&&attr&&(0===value.length||!(nativeIsNaN(parseInt(value,10))||parseInt(value,10)<0||parseInt(value,10)>32767))){var setAttr=function(){var nodes=[].slice.call(document.querySelectorAll(selector)),set=!1;nodes.forEach((function(node){node.setAttribute(attr,value),set=!0})),set&&hit(source)};setAttr(),observeDOMChanges(setAttr,!0)}}).apply(this,updatedArgs)}catch(e){console.log(e)}}"
+ "scriptlet": "function setAttr(source,args){function hit(source){if(!0===source.verbose){try{var log=console.log.bind(console),trace=console.trace.bind(console),prefix=source.ruleText||\"\";if(source.domainName){var ruleStartIndex;source.ruleText.indexOf(\"#%#//\")>-1?ruleStartIndex=source.ruleText.indexOf(\"#%#//\"):source.ruleText.indexOf(\"##+js\")>-1&&(ruleStartIndex=source.ruleText.indexOf(\"##+js\"));var rulePart=source.ruleText.slice(ruleStartIndex);prefix=\"\".concat(source.domainName).concat(rulePart)}log(\"\".concat(prefix,\" trace start\")),trace&&trace(),log(\"\".concat(prefix,\" trace end\"))}catch(e){}\"function\"==typeof window.__debug&&window.__debug(source)}}function observeDOMChanges(callback){var observeAttrs=arguments.length>1&&void 0!==arguments[1]&&arguments[1],attrsToObserve=arguments.length>2&&void 0!==arguments[2]?arguments[2]:[],THROTTLE_DELAY_MS=20,observer=new MutationObserver(throttle(callbackWrapper,THROTTLE_DELAY_MS)),connect=function(){attrsToObserve.length>0?observer.observe(document.documentElement,{childList:!0,subtree:!0,attributes:observeAttrs,attributeFilter:attrsToObserve}):observer.observe(document.documentElement,{childList:!0,subtree:!0,attributes:observeAttrs})},disconnect=function(){observer.disconnect()};function callbackWrapper(){disconnect(),callback(),connect()}connect()}function nativeIsNaN(num){return(Number.isNaN||window.isNaN)(num)}function throttle(cb,delay){var savedArgs,wait=!1;return function wrapper(){for(var _len=arguments.length,args=new Array(_len),_key=0;_key<_len;_key++)args[_key]=arguments[_key];wait?savedArgs=args:(cb.apply(void 0,args),wait=!0,setTimeout((function(){wait=!1,savedArgs&&(wrapper(savedArgs),savedArgs=null)}),delay))}}var updatedArgs=args?[].concat(source).concat(args):[source];try{(function(source,selector,attr){var value=arguments.length>3&&void 0!==arguments[3]?arguments[3]:\"\";if(selector&&attr&&(0===value.length||!(nativeIsNaN(parseInt(value,10))||parseInt(value,10)<0||parseInt(value,10)>32767))){var setAttr=function(){var nodes=[].slice.call(document.querySelectorAll(selector)),set=!1;nodes.forEach((function(node){node.setAttribute(attr,value),set=!0})),set&&hit(source)};setAttr(),observeDOMChanges(setAttr,!0)}}).apply(this,updatedArgs)}catch(e){console.log(e)}}"
},
{
"names": [
@@ -284,7 +284,7 @@
"ubo-remove-class",
"ubo-rc"
],
- "scriptlet": "function removeClass(source,args){function hit(source,message){if(!0===source.verbose){try{var log=console.log.bind(console),trace=console.trace.bind(console),prefix=source.ruleText||\"\";if(source.domainName){var ruleStartIndex;source.ruleText.indexOf(\"#%#//\")>-1?ruleStartIndex=source.ruleText.indexOf(\"#%#//\"):source.ruleText.indexOf(\"##+js\")>-1&&(ruleStartIndex=source.ruleText.indexOf(\"##+js\"));var rulePart=source.ruleText.slice(ruleStartIndex);prefix=\"\".concat(source.domainName).concat(rulePart)}message&&(-1===message.indexOf(\"log: \")?log(\"\".concat(prefix,\" message:\\n\").concat(message)):log(message.slice(\"log: \".length))),log(\"\".concat(prefix,\" trace start\")),trace&&trace(),log(\"\".concat(prefix,\" trace end\"))}catch(e){}\"function\"==typeof window.__debug&&window.__debug(source)}}function logMessage(source,message){var forced=arguments.length>2&&void 0!==arguments[2]&&arguments[2];(forced||source.verbose)&&console.log(\"\".concat(source.name,\": \").concat(message))}function observeDOMChanges(callback){var observeAttrs=arguments.length>1&&void 0!==arguments[1]&&arguments[1],attrsToObserve=arguments.length>2&&void 0!==arguments[2]?arguments[2]:[],THROTTLE_DELAY_MS=20,observer=new MutationObserver(throttle(callbackWrapper,THROTTLE_DELAY_MS)),connect=function(){attrsToObserve.length>0?observer.observe(document.documentElement,{childList:!0,subtree:!0,attributes:observeAttrs,attributeFilter:attrsToObserve}):observer.observe(document.documentElement,{childList:!0,subtree:!0,attributes:observeAttrs})},disconnect=function(){observer.disconnect()};function callbackWrapper(){disconnect(),callback(),connect()}connect()}function parseFlags(flags){var VALID_FLAGS=[\"stay\",\"asap\",\"complete\"],passedFlags=flags.trim().split(\" \").filter((function(f){return-1!==VALID_FLAGS.indexOf(f)}));return{ASAP:\"asap\",COMPLETE:\"complete\",STAY:\"stay\",hasFlag:function(flag){return-1!==passedFlags.indexOf(flag)}}}function throttle(cb,delay){var savedArgs,wait=!1;return function wrapper(){for(var _len=arguments.length,args=new Array(_len),_key=0;_key<_len;_key++)args[_key]=arguments[_key];wait?savedArgs=args:(cb.apply(void 0,args),wait=!0,setTimeout((function(){wait=!1,savedArgs&&(wrapper(savedArgs),savedArgs=null)}),delay))}}var updatedArgs=args?[].concat(source).concat(args):[source];try{(function(source,classNames,selector){var applying=arguments.length>3&&void 0!==arguments[3]?arguments[3]:\"asap stay\";if(classNames){classNames=classNames.split(/\\s*\\|\\s*/);var selectors=[];selector||(selectors=classNames.map((function(className){return\".\".concat(className)})));var removeClassHandler=function(){var nodes=new Set;if(selector){var foundNodes=[];try{foundNodes=[].slice.call(document.querySelectorAll(selector))}catch(e){logMessage(source,\"Invalid selector arg: '\".concat(selector,\"'\"))}foundNodes.forEach((function(n){return nodes.add(n)}))}else selectors.length>0&&selectors.forEach((function(s){for(var elements=document.querySelectorAll(s),i=0;i-1?ruleStartIndex=source.ruleText.indexOf(\"#%#//\"):source.ruleText.indexOf(\"##+js\")>-1&&(ruleStartIndex=source.ruleText.indexOf(\"##+js\"));var rulePart=source.ruleText.slice(ruleStartIndex);prefix=\"\".concat(source.domainName).concat(rulePart)}log(\"\".concat(prefix,\" trace start\")),trace&&trace(),log(\"\".concat(prefix,\" trace end\"))}catch(e){}\"function\"==typeof window.__debug&&window.__debug(source)}}function logMessage(source,message){var forced=arguments.length>2&&void 0!==arguments[2]&&arguments[2];(forced||source.verbose)&&console.log(\"\".concat(source.name,\": \").concat(message))}function observeDOMChanges(callback){var observeAttrs=arguments.length>1&&void 0!==arguments[1]&&arguments[1],attrsToObserve=arguments.length>2&&void 0!==arguments[2]?arguments[2]:[],THROTTLE_DELAY_MS=20,observer=new MutationObserver(throttle(callbackWrapper,THROTTLE_DELAY_MS)),connect=function(){attrsToObserve.length>0?observer.observe(document.documentElement,{childList:!0,subtree:!0,attributes:observeAttrs,attributeFilter:attrsToObserve}):observer.observe(document.documentElement,{childList:!0,subtree:!0,attributes:observeAttrs})},disconnect=function(){observer.disconnect()};function callbackWrapper(){disconnect(),callback(),connect()}connect()}function parseFlags(flags){var VALID_FLAGS=[\"stay\",\"asap\",\"complete\"],passedFlags=flags.trim().split(\" \").filter((function(f){return-1!==VALID_FLAGS.indexOf(f)}));return{ASAP:\"asap\",COMPLETE:\"complete\",STAY:\"stay\",hasFlag:function(flag){return-1!==passedFlags.indexOf(flag)}}}function throttle(cb,delay){var savedArgs,wait=!1;return function wrapper(){for(var _len=arguments.length,args=new Array(_len),_key=0;_key<_len;_key++)args[_key]=arguments[_key];wait?savedArgs=args:(cb.apply(void 0,args),wait=!0,setTimeout((function(){wait=!1,savedArgs&&(wrapper(savedArgs),savedArgs=null)}),delay))}}var updatedArgs=args?[].concat(source).concat(args):[source];try{(function(source,classNames,selector){var applying=arguments.length>3&&void 0!==arguments[3]?arguments[3]:\"asap stay\";if(classNames){classNames=classNames.split(/\\s*\\|\\s*/);var selectors=[];selector||(selectors=classNames.map((function(className){return\".\".concat(className)})));var removeClassHandler=function(){var nodes=new Set;if(selector){var foundNodes=[];try{foundNodes=[].slice.call(document.querySelectorAll(selector))}catch(e){logMessage(source,\"Invalid selector arg: '\".concat(selector,\"'\"))}foundNodes.forEach((function(n){return nodes.add(n)}))}else selectors.length>0&&selectors.forEach((function(s){for(var elements=document.querySelectorAll(s),i=0;i-1?ruleStartIndex=source.ruleText.indexOf(\"#%#//\"):source.ruleText.indexOf(\"##+js\")>-1&&(ruleStartIndex=source.ruleText.indexOf(\"##+js\"));var rulePart=source.ruleText.slice(ruleStartIndex);prefix=\"\".concat(source.domainName).concat(rulePart)}message&&(-1===message.indexOf(\"log: \")?log(\"\".concat(prefix,\" message:\\n\").concat(message)):log(message.slice(\"log: \".length))),log(\"\".concat(prefix,\" trace start\")),trace&&trace(),log(\"\".concat(prefix,\" trace end\"))}catch(e){}\"function\"==typeof window.__debug&&window.__debug(source)}}var updatedArgs=args?[].concat(source).concat(args):[source];try{(function(source){document.addEventListener(\"click\",(function(ev){for(var target=ev.target;null!==target;){if(\"a\"===target.localName&&target.hasAttribute(\"target\")){ev.stopPropagation(),ev.preventDefault(),hit(source);break}target=target.parentNode}}))}).apply(this,updatedArgs)}catch(e){console.log(e)}}"
+ "scriptlet": "function disableNewtabLinks(source,args){function hit(source){if(!0===source.verbose){try{var log=console.log.bind(console),trace=console.trace.bind(console),prefix=source.ruleText||\"\";if(source.domainName){var ruleStartIndex;source.ruleText.indexOf(\"#%#//\")>-1?ruleStartIndex=source.ruleText.indexOf(\"#%#//\"):source.ruleText.indexOf(\"##+js\")>-1&&(ruleStartIndex=source.ruleText.indexOf(\"##+js\"));var rulePart=source.ruleText.slice(ruleStartIndex);prefix=\"\".concat(source.domainName).concat(rulePart)}log(\"\".concat(prefix,\" trace start\")),trace&&trace(),log(\"\".concat(prefix,\" trace end\"))}catch(e){}\"function\"==typeof window.__debug&&window.__debug(source)}}var updatedArgs=args?[].concat(source).concat(args):[source];try{(function(source){document.addEventListener(\"click\",(function(ev){for(var target=ev.target;null!==target;){if(\"a\"===target.localName&&target.hasAttribute(\"target\")){ev.stopPropagation(),ev.preventDefault(),hit(source);break}target=target.parentNode}}))}).apply(this,updatedArgs)}catch(e){console.log(e)}}"
},
{
"names": [
@@ -305,7 +305,7 @@
"ubo-nano-setInterval-booster",
"ubo-nano-sib"
],
- "scriptlet": "function adjustSetInterval(source,args){function hit(source,message){if(!0===source.verbose){try{var log=console.log.bind(console),trace=console.trace.bind(console),prefix=source.ruleText||\"\";if(source.domainName){var ruleStartIndex;source.ruleText.indexOf(\"#%#//\")>-1?ruleStartIndex=source.ruleText.indexOf(\"#%#//\"):source.ruleText.indexOf(\"##+js\")>-1&&(ruleStartIndex=source.ruleText.indexOf(\"##+js\"));var rulePart=source.ruleText.slice(ruleStartIndex);prefix=\"\".concat(source.domainName).concat(rulePart)}message&&(-1===message.indexOf(\"log: \")?log(\"\".concat(prefix,\" message:\\n\").concat(message)):log(message.slice(\"log: \".length))),log(\"\".concat(prefix,\" trace start\")),trace&&trace(),log(\"\".concat(prefix,\" trace end\"))}catch(e){}\"function\"==typeof window.__debug&&window.__debug(source)}}function isValidCallback(callback){return callback instanceof Function||\"string\"==typeof callback}function getBoostMultiplier(boost){var num,parsedBoost=parseFloat(boost),boostMultiplier=nativeIsNaN(parsedBoost)||(num=parsedBoost,!(Number.isFinite||window.isFinite)(num))?.05:parsedBoost;return boostMultiplier<.02&&(boostMultiplier=.02),boostMultiplier>50&&(boostMultiplier=50),boostMultiplier}function isDelayMatched(inputDelay,realDelay){return\"*\"===inputDelay||realDelay===function(delay){var DEFAULT_DELAY=1e3,parsedDelay=parseInt(delay,10);return nativeIsNaN(parsedDelay)?DEFAULT_DELAY:parsedDelay}(inputDelay)}function logMessage(source,message){var forced=arguments.length>2&&void 0!==arguments[2]&&arguments[2];(forced||source.verbose)&&console.log(\"\".concat(source.name,\": \").concat(message))}function nativeIsNaN(num){return(Number.isNaN||window.isNaN)(num)}var updatedArgs=args?[].concat(source).concat(args):[source];try{(function(source,matchCallback,matchDelay,boost){var nativeSetInterval=window.setInterval,matchRegexp=function(){var input=arguments.length>0&&void 0!==arguments[0]?arguments[0]:\"\",FORWARD_SLASH=\"/\";if(\"\"===input)return new RegExp(\".?\");if(input[0]===FORWARD_SLASH&&input[input.length-1]===FORWARD_SLASH)return new RegExp(input.slice(1,-1));var escaped=input.replace(/[.*+?^${}()|[\\]\\\\]/g,\"\\\\$&\");return new RegExp(escaped)}(matchCallback);window.setInterval=function(callback,delay){if(isValidCallback(callback))matchRegexp.test(callback.toString())&&isDelayMatched(matchDelay,delay)&&(delay*=getBoostMultiplier(boost),hit(source));else{var message=\"Scriptlet can't be applied because of invalid callback: '\".concat(String(callback),\"'.\");logMessage(source,message)}for(var _len=arguments.length,args=new Array(_len>2?_len-2:0),_key=2;_key<_len;_key++)args[_key-2]=arguments[_key];return nativeSetInterval.apply(window,[callback,delay].concat(args))}}).apply(this,updatedArgs)}catch(e){console.log(e)}}"
+ "scriptlet": "function adjustSetInterval(source,args){function hit(source){if(!0===source.verbose){try{var log=console.log.bind(console),trace=console.trace.bind(console),prefix=source.ruleText||\"\";if(source.domainName){var ruleStartIndex;source.ruleText.indexOf(\"#%#//\")>-1?ruleStartIndex=source.ruleText.indexOf(\"#%#//\"):source.ruleText.indexOf(\"##+js\")>-1&&(ruleStartIndex=source.ruleText.indexOf(\"##+js\"));var rulePart=source.ruleText.slice(ruleStartIndex);prefix=\"\".concat(source.domainName).concat(rulePart)}log(\"\".concat(prefix,\" trace start\")),trace&&trace(),log(\"\".concat(prefix,\" trace end\"))}catch(e){}\"function\"==typeof window.__debug&&window.__debug(source)}}function isValidCallback(callback){return callback instanceof Function||\"string\"==typeof callback}function getBoostMultiplier(boost){var num,parsedBoost=parseFloat(boost),boostMultiplier=nativeIsNaN(parsedBoost)||(num=parsedBoost,!(Number.isFinite||window.isFinite)(num))?.05:parsedBoost;return boostMultiplier<.02&&(boostMultiplier=.02),boostMultiplier>50&&(boostMultiplier=50),boostMultiplier}function isDelayMatched(inputDelay,realDelay){return\"*\"===inputDelay||realDelay===function(delay){var DEFAULT_DELAY=1e3,parsedDelay=parseInt(delay,10);return nativeIsNaN(parsedDelay)?DEFAULT_DELAY:parsedDelay}(inputDelay)}function logMessage(source,message){var forced=arguments.length>2&&void 0!==arguments[2]&&arguments[2];(forced||source.verbose)&&console.log(\"\".concat(source.name,\": \").concat(message))}function nativeIsNaN(num){return(Number.isNaN||window.isNaN)(num)}var updatedArgs=args?[].concat(source).concat(args):[source];try{(function(source,matchCallback,matchDelay,boost){var nativeSetInterval=window.setInterval,matchRegexp=function(){var input=arguments.length>0&&void 0!==arguments[0]?arguments[0]:\"\",FORWARD_SLASH=\"/\";if(\"\"===input)return new RegExp(\".?\");if(input[0]===FORWARD_SLASH&&input[input.length-1]===FORWARD_SLASH)return new RegExp(input.slice(1,-1));var escaped=input.replace(/[.*+?^${}()|[\\]\\\\]/g,\"\\\\$&\");return new RegExp(escaped)}(matchCallback);window.setInterval=function(callback,delay){if(isValidCallback(callback))matchRegexp.test(callback.toString())&&isDelayMatched(matchDelay,delay)&&(delay*=getBoostMultiplier(boost),hit(source));else{var message=\"Scriptlet can't be applied because of invalid callback: '\".concat(String(callback),\"'.\");logMessage(source,message)}for(var _len=arguments.length,args=new Array(_len>2?_len-2:0),_key=2;_key<_len;_key++)args[_key-2]=arguments[_key];return nativeSetInterval.apply(window,[callback,delay].concat(args))}}).apply(this,updatedArgs)}catch(e){console.log(e)}}"
},
{
"names": [
@@ -317,14 +317,14 @@
"ubo-nano-setTimeout-booster",
"ubo-nano-stb"
],
- "scriptlet": "function adjustSetTimeout(source,args){function hit(source,message){if(!0===source.verbose){try{var log=console.log.bind(console),trace=console.trace.bind(console),prefix=source.ruleText||\"\";if(source.domainName){var ruleStartIndex;source.ruleText.indexOf(\"#%#//\")>-1?ruleStartIndex=source.ruleText.indexOf(\"#%#//\"):source.ruleText.indexOf(\"##+js\")>-1&&(ruleStartIndex=source.ruleText.indexOf(\"##+js\"));var rulePart=source.ruleText.slice(ruleStartIndex);prefix=\"\".concat(source.domainName).concat(rulePart)}message&&(-1===message.indexOf(\"log: \")?log(\"\".concat(prefix,\" message:\\n\").concat(message)):log(message.slice(\"log: \".length))),log(\"\".concat(prefix,\" trace start\")),trace&&trace(),log(\"\".concat(prefix,\" trace end\"))}catch(e){}\"function\"==typeof window.__debug&&window.__debug(source)}}function isValidCallback(callback){return callback instanceof Function||\"string\"==typeof callback}function getBoostMultiplier(boost){var num,parsedBoost=parseFloat(boost),boostMultiplier=nativeIsNaN(parsedBoost)||(num=parsedBoost,!(Number.isFinite||window.isFinite)(num))?.05:parsedBoost;return boostMultiplier<.02&&(boostMultiplier=.02),boostMultiplier>50&&(boostMultiplier=50),boostMultiplier}function isDelayMatched(inputDelay,realDelay){return\"*\"===inputDelay||realDelay===function(delay){var DEFAULT_DELAY=1e3,parsedDelay=parseInt(delay,10);return nativeIsNaN(parsedDelay)?DEFAULT_DELAY:parsedDelay}(inputDelay)}function logMessage(source,message){var forced=arguments.length>2&&void 0!==arguments[2]&&arguments[2];(forced||source.verbose)&&console.log(\"\".concat(source.name,\": \").concat(message))}function nativeIsNaN(num){return(Number.isNaN||window.isNaN)(num)}var updatedArgs=args?[].concat(source).concat(args):[source];try{(function(source,matchCallback,matchDelay,boost){var nativeSetTimeout=window.setTimeout,matchRegexp=function(){var input=arguments.length>0&&void 0!==arguments[0]?arguments[0]:\"\",FORWARD_SLASH=\"/\";if(\"\"===input)return new RegExp(\".?\");if(input[0]===FORWARD_SLASH&&input[input.length-1]===FORWARD_SLASH)return new RegExp(input.slice(1,-1));var escaped=input.replace(/[.*+?^${}()|[\\]\\\\]/g,\"\\\\$&\");return new RegExp(escaped)}(matchCallback);window.setTimeout=function(callback,delay){if(isValidCallback(callback))matchRegexp.test(callback.toString())&&isDelayMatched(matchDelay,delay)&&(delay*=getBoostMultiplier(boost),hit(source));else{var message=\"Scriptlet can't be applied because of invalid callback: '\".concat(String(callback),\"'.\");logMessage(source,message)}for(var _len=arguments.length,args=new Array(_len>2?_len-2:0),_key=2;_key<_len;_key++)args[_key-2]=arguments[_key];return nativeSetTimeout.apply(window,[callback,delay].concat(args))}}).apply(this,updatedArgs)}catch(e){console.log(e)}}"
+ "scriptlet": "function adjustSetTimeout(source,args){function hit(source){if(!0===source.verbose){try{var log=console.log.bind(console),trace=console.trace.bind(console),prefix=source.ruleText||\"\";if(source.domainName){var ruleStartIndex;source.ruleText.indexOf(\"#%#//\")>-1?ruleStartIndex=source.ruleText.indexOf(\"#%#//\"):source.ruleText.indexOf(\"##+js\")>-1&&(ruleStartIndex=source.ruleText.indexOf(\"##+js\"));var rulePart=source.ruleText.slice(ruleStartIndex);prefix=\"\".concat(source.domainName).concat(rulePart)}log(\"\".concat(prefix,\" trace start\")),trace&&trace(),log(\"\".concat(prefix,\" trace end\"))}catch(e){}\"function\"==typeof window.__debug&&window.__debug(source)}}function isValidCallback(callback){return callback instanceof Function||\"string\"==typeof callback}function getBoostMultiplier(boost){var num,parsedBoost=parseFloat(boost),boostMultiplier=nativeIsNaN(parsedBoost)||(num=parsedBoost,!(Number.isFinite||window.isFinite)(num))?.05:parsedBoost;return boostMultiplier<.02&&(boostMultiplier=.02),boostMultiplier>50&&(boostMultiplier=50),boostMultiplier}function isDelayMatched(inputDelay,realDelay){return\"*\"===inputDelay||realDelay===function(delay){var DEFAULT_DELAY=1e3,parsedDelay=parseInt(delay,10);return nativeIsNaN(parsedDelay)?DEFAULT_DELAY:parsedDelay}(inputDelay)}function logMessage(source,message){var forced=arguments.length>2&&void 0!==arguments[2]&&arguments[2];(forced||source.verbose)&&console.log(\"\".concat(source.name,\": \").concat(message))}function nativeIsNaN(num){return(Number.isNaN||window.isNaN)(num)}var updatedArgs=args?[].concat(source).concat(args):[source];try{(function(source,matchCallback,matchDelay,boost){var nativeSetTimeout=window.setTimeout,matchRegexp=function(){var input=arguments.length>0&&void 0!==arguments[0]?arguments[0]:\"\",FORWARD_SLASH=\"/\";if(\"\"===input)return new RegExp(\".?\");if(input[0]===FORWARD_SLASH&&input[input.length-1]===FORWARD_SLASH)return new RegExp(input.slice(1,-1));var escaped=input.replace(/[.*+?^${}()|[\\]\\\\]/g,\"\\\\$&\");return new RegExp(escaped)}(matchCallback);window.setTimeout=function(callback,delay){if(isValidCallback(callback))matchRegexp.test(callback.toString())&&isDelayMatched(matchDelay,delay)&&(delay*=getBoostMultiplier(boost),hit(source));else{var message=\"Scriptlet can't be applied because of invalid callback: '\".concat(String(callback),\"'.\");logMessage(source,message)}for(var _len=arguments.length,args=new Array(_len>2?_len-2:0),_key=2;_key<_len;_key++)args[_key-2]=arguments[_key];return nativeSetTimeout.apply(window,[callback,delay].concat(args))}}).apply(this,updatedArgs)}catch(e){console.log(e)}}"
},
{
"names": [
"dir-string",
"abp-dir-string"
],
- "scriptlet": "function dirString(source,args){var updatedArgs=args?[].concat(source).concat(args):[source];try{(function(source,times){var dir=console.dir;times=parseInt(times,10),console.dir=function(object){for(var temp,i=0;i-1?ruleStartIndex=source.ruleText.indexOf(AG_SCRIPTLET_MARKER):source.ruleText.indexOf(UBO_SCRIPTLET_MARKER)>-1&&(ruleStartIndex=source.ruleText.indexOf(UBO_SCRIPTLET_MARKER));var rulePart=source.ruleText.slice(ruleStartIndex);prefix=\"\".concat(source.domainName).concat(rulePart)}var LOG_MARKER=\"log: \";message&&(-1===message.indexOf(LOG_MARKER)?log(\"\".concat(prefix,\" message:\\n\").concat(message)):log(message.slice(LOG_MARKER.length))),log(\"\".concat(prefix,\" trace start\")),trace&&trace(),log(\"\".concat(prefix,\" trace end\"))}catch(e){}\"function\"==typeof window.__debug&&window.__debug(source)}}(source,temp)}}).apply(this,updatedArgs)}catch(e){console.log(e)}}"
+ "scriptlet": "function dirString(source,args){var updatedArgs=args?[].concat(source).concat(args):[source];try{(function(source,times){var dir=console.dir;console.dir=function(object){\"function\"==typeof dir&&dir.call(this,object),function(source){if(!0===source.verbose){try{var log=console.log.bind(console),trace=console.trace.bind(console),prefix=source.ruleText||\"\";if(source.domainName){var ruleStartIndex,AG_SCRIPTLET_MARKER=\"#%#//\",UBO_SCRIPTLET_MARKER=\"##+js\";source.ruleText.indexOf(AG_SCRIPTLET_MARKER)>-1?ruleStartIndex=source.ruleText.indexOf(AG_SCRIPTLET_MARKER):source.ruleText.indexOf(UBO_SCRIPTLET_MARKER)>-1&&(ruleStartIndex=source.ruleText.indexOf(UBO_SCRIPTLET_MARKER));var rulePart=source.ruleText.slice(ruleStartIndex);prefix=\"\".concat(source.domainName).concat(rulePart)}log(\"\".concat(prefix,\" trace start\")),trace&&trace(),log(\"\".concat(prefix,\" trace end\"))}catch(e){}\"function\"==typeof window.__debug&&window.__debug(source)}}(source)}}).apply(this,updatedArgs)}catch(e){console.log(e)}}"
},
{
"names": [
@@ -334,7 +334,7 @@
"ubo-json-prune",
"abp-json-prune"
],
- "scriptlet": "function jsonPrune(source,args){function getWildcardPropertyInChain(base,chain){var lookThrough=arguments.length>2&&void 0!==arguments[2]&&arguments[2],output=arguments.length>3&&void 0!==arguments[3]?arguments[3]:[],pos=chain.indexOf(\".\");if(-1===pos){if(\"*\"===chain||\"[]\"===chain)for(var key in base)Object.prototype.hasOwnProperty.call(base,key)&&output.push({base:base,prop:key});else output.push({base:base,prop:chain});return output}var prop=chain.slice(0,pos),shouldLookThrough=\"[]\"===prop&&Array.isArray(base)||\"*\"===prop&&base instanceof Object;if(shouldLookThrough){var nextProp=chain.slice(pos+1),baseKeys=Object.keys(base);baseKeys.forEach((function(key){getWildcardPropertyInChain(base[key],nextProp,lookThrough,output)}))}var nextBase=base[prop];return chain=chain.slice(pos+1),void 0!==nextBase&&getWildcardPropertyInChain(nextBase,chain,lookThrough,output),output}function logMessage(source,message){var forced=arguments.length>2&&void 0!==arguments[2]&&arguments[2];(forced||source.verbose)&&console.log(\"\".concat(source.name,\": \").concat(message))}function toRegExp(){var input=arguments.length>0&&void 0!==arguments[0]?arguments[0]:\"\",DEFAULT_VALUE=\".?\",FORWARD_SLASH=\"/\";if(\"\"===input)return new RegExp(DEFAULT_VALUE);if(input[0]===FORWARD_SLASH&&input[input.length-1]===FORWARD_SLASH)return new RegExp(input.slice(1,-1));var escaped=input.replace(/[.*+?^${}()|[\\]\\\\]/g,\"\\\\$&\");return new RegExp(escaped)}var updatedArgs=args?[].concat(source).concat(args):[source];try{(function(source,propsToRemove,requiredInitialProps,stack){if(!stack||function(stackMatch,stackTrace){if(!stackMatch||\"\"===stackMatch)return!0;if(shouldAbortInlineOrInjectedScript(stackMatch,stackTrace))return!0;var stackRegexp=toRegExp(stackMatch),refinedStackTrace=stackTrace.split(\"\\n\").slice(2).map((function(line){return line.trim()})).join(\"\\n\");return Object.getOwnPropertyDescriptor(RegExp.prototype,\"test\").value.call(stackRegexp,refinedStackTrace)}(stack,(new Error).stack)){var prunePaths=void 0!==propsToRemove&&\"\"!==propsToRemove?propsToRemove.split(/ +/):[],requiredPaths=void 0!==requiredInitialProps&&\"\"!==requiredInitialProps?requiredInitialProps.split(/ +/):[],jsonPruner=function(root){if(0===prunePaths.length&&0===requiredPaths.length)return logMessage(source,\"\".concat(window.location.hostname,\" \").concat(root),!0),root;try{if(!1===function(root){if(!root)return!1;var shouldProcess;if(0===prunePaths.length&&requiredPaths.length>0){var rootString=JSON.stringify(root);if(toRegExp(requiredPaths.join(\"\")).test(rootString))return logMessage(source,\"\".concat(window.location.hostname,\" \").concat(root),!0),!1}for(var i=0;i-1||requiredPath.indexOf(\"*.\")>-1||requiredPath.indexOf(\".*\")>-1||requiredPath.indexOf(\".[].\")>-1||requiredPath.indexOf(\"[].\")>-1||requiredPath.indexOf(\".[]\")>-1,details=getWildcardPropertyInChain(root,requiredPath,hasWildcard);shouldProcess=!hasWildcard;for(var _i=0;_i-1?ruleStartIndex=source.ruleText.indexOf(AG_SCRIPTLET_MARKER):source.ruleText.indexOf(UBO_SCRIPTLET_MARKER)>-1&&(ruleStartIndex=source.ruleText.indexOf(UBO_SCRIPTLET_MARKER));var rulePart=source.ruleText.slice(ruleStartIndex);prefix=\"\".concat(source.domainName).concat(rulePart)}var LOG_MARKER=\"log: \";message&&(-1===message.indexOf(LOG_MARKER)?log(\"\".concat(prefix,\" message:\\n\").concat(message)):log(message.slice(LOG_MARKER.length))),log(\"\".concat(prefix,\" trace start\")),trace&&trace(),log(\"\".concat(prefix,\" trace end\"))}catch(e){}\"function\"==typeof window.__debug&&window.__debug(source)}}(source))}))}))}catch(e){logMessage(source,e)}return root},nativeJSONParse=JSON.parse,jsonParseWrapper=function(){for(var _len=arguments.length,args=new Array(_len),_key=0;_key<_len;_key++)args[_key]=arguments[_key];var root=nativeJSONParse.apply(JSON,args);return jsonPruner(root)};jsonParseWrapper.toString=nativeJSONParse.toString.bind(nativeJSONParse),JSON.parse=jsonParseWrapper;var nativeResponseJson=Response.prototype.json;\"undefined\"!=typeof Response&&(Response.prototype.json=function(){return nativeResponseJson.apply(this).then((function(obj){return jsonPruner(obj)}))})}}).apply(this,updatedArgs)}catch(e){console.log(e)}}"
+ "scriptlet": "function jsonPrune(source,args){function getWildcardPropertyInChain(base,chain){var lookThrough=arguments.length>2&&void 0!==arguments[2]&&arguments[2],output=arguments.length>3&&void 0!==arguments[3]?arguments[3]:[],pos=chain.indexOf(\".\");if(-1===pos){if(\"*\"===chain||\"[]\"===chain)for(var key in base)Object.prototype.hasOwnProperty.call(base,key)&&output.push({base:base,prop:key});else output.push({base:base,prop:chain});return output}var prop=chain.slice(0,pos),shouldLookThrough=\"[]\"===prop&&Array.isArray(base)||\"*\"===prop&&base instanceof Object;if(shouldLookThrough){var nextProp=chain.slice(pos+1),baseKeys=Object.keys(base);baseKeys.forEach((function(key){getWildcardPropertyInChain(base[key],nextProp,lookThrough,output)}))}var nextBase=base[prop];return chain=chain.slice(pos+1),void 0!==nextBase&&getWildcardPropertyInChain(nextBase,chain,lookThrough,output),output}function logMessage(source,message){var forced=arguments.length>2&&void 0!==arguments[2]&&arguments[2];(forced||source.verbose)&&console.log(\"\".concat(source.name,\": \").concat(message))}function objectToString(obj){return function(obj){return 0===Object.keys(obj).length&&!obj.prototype}(obj)?\"{}\":(object=obj,keys=Object.keys(object),entries=[],keys.forEach((function(key){return entries.push([key,object[key]])})),entries).map((function(pair){var key=pair[0],value=pair[1],recordValueStr=value;return value instanceof Object&&(recordValueStr=\"{ \".concat(objectToString(value),\" }\")),\"\".concat(key,':\"').concat(recordValueStr,'\"')})).join(\" \");var object,keys,entries}function toRegExp(){var input=arguments.length>0&&void 0!==arguments[0]?arguments[0]:\"\",DEFAULT_VALUE=\".?\",FORWARD_SLASH=\"/\";if(\"\"===input)return new RegExp(DEFAULT_VALUE);if(input[0]===FORWARD_SLASH&&input[input.length-1]===FORWARD_SLASH)return new RegExp(input.slice(1,-1));var escaped=input.replace(/[.*+?^${}()|[\\]\\\\]/g,\"\\\\$&\");return new RegExp(escaped)}var updatedArgs=args?[].concat(source).concat(args):[source];try{(function(source,propsToRemove,requiredInitialProps,stack){if(!stack||function(stackMatch,stackTrace){if(!stackMatch||\"\"===stackMatch)return!0;if(function(stackMatch,stackTrace){var INLINE_SCRIPT_STRING=\"inlineScript\",INJECTED_SCRIPT_STRING=\"injectedScript\",INJECTED_SCRIPT_MARKER=\"\",isInlineScript=function(stackMatch){return stackMatch.indexOf(INLINE_SCRIPT_STRING)>-1},isInjectedScript=function(stackMatch){return stackMatch.indexOf(INJECTED_SCRIPT_STRING)>-1};if(!isInlineScript(stackMatch)&&!isInjectedScript(stackMatch))return!1;var documentURL=window.location.href,pos=documentURL.indexOf(\"#\");-1!==pos&&(documentURL=documentURL.slice(0,pos));var stackLines=stackTrace.split(\"\\n\").slice(2).map((function(line){return line.trim()})).map((function(line){var stack,getStackTraceURL=/(.*?@)?(\\S+)(:\\d+):\\d+\\)?$/.exec(line);if(getStackTraceURL){var stackURL=getStackTraceURL[2];if(startsWith(stackURL,\"(\")&&(stackURL=stackURL.slice(1)),startsWith(stackURL,INJECTED_SCRIPT_MARKER)){stackURL=INJECTED_SCRIPT_STRING;var stackFunction=void 0!==getStackTraceURL[1]?getStackTraceURL[1].slice(0,-1):line.slice(0,getStackTraceURL.index).trim();startsWith(stackFunction,\"at\")&&(stackFunction=stackFunction.slice(2).trim()),stack=\"\".concat(stackFunction,\" \").concat(stackURL).trim()}else stack=stackURL}else stack=line;return stack}));if(stackLines)for(var index=0;index0){var rootString=JSON.stringify(root);if(toRegExp(requiredPaths.join(\"\")).test(rootString))return logMessage(source,\"\".concat(window.location.hostname,\" \").concat(objectToString(root)),!0),!1}for(var i=0;i-1||requiredPath.indexOf(\"*.\")>-1||requiredPath.indexOf(\".*\")>-1||requiredPath.indexOf(\".[].\")>-1||requiredPath.indexOf(\"[].\")>-1||requiredPath.indexOf(\".[]\")>-1,details=getWildcardPropertyInChain(root,requiredPath,hasWildcard);shouldProcess=!hasWildcard;for(var _i=0;_i-1?ruleStartIndex=source.ruleText.indexOf(AG_SCRIPTLET_MARKER):source.ruleText.indexOf(UBO_SCRIPTLET_MARKER)>-1&&(ruleStartIndex=source.ruleText.indexOf(UBO_SCRIPTLET_MARKER));var rulePart=source.ruleText.slice(ruleStartIndex);prefix=\"\".concat(source.domainName).concat(rulePart)}log(\"\".concat(prefix,\" trace start\")),trace&&trace(),log(\"\".concat(prefix,\" trace end\"))}catch(e){}\"function\"==typeof window.__debug&&window.__debug(source)}}(source))}))}))}catch(e){logMessage(source,e)}return root},nativeJSONParse=JSON.parse,jsonParseWrapper=function(){for(var _len=arguments.length,args=new Array(_len),_key=0;_key<_len;_key++)args[_key]=arguments[_key];var root=nativeJSONParse.apply(JSON,args);return jsonPruner(root)};jsonParseWrapper.toString=nativeJSONParse.toString.bind(nativeJSONParse),JSON.parse=jsonParseWrapper;var nativeResponseJson=Response.prototype.json;\"undefined\"!=typeof Response&&(Response.prototype.json=function(){return nativeResponseJson.apply(this).then((function(obj){return jsonPruner(obj)}))})}}).apply(this,updatedArgs)}catch(e){console.log(e)}}"
},
{
"names": [
@@ -346,31 +346,31 @@
"ubo-no-requestAnimationFrame-if",
"ubo-norafif"
],
- "scriptlet": "function preventRequestAnimationFrame(source,args){function hit(source,message){if(!0===source.verbose){try{var log=console.log.bind(console),trace=console.trace.bind(console),prefix=source.ruleText||\"\";if(source.domainName){var ruleStartIndex;source.ruleText.indexOf(\"#%#//\")>-1?ruleStartIndex=source.ruleText.indexOf(\"#%#//\"):source.ruleText.indexOf(\"##+js\")>-1&&(ruleStartIndex=source.ruleText.indexOf(\"##+js\"));var rulePart=source.ruleText.slice(ruleStartIndex);prefix=\"\".concat(source.domainName).concat(rulePart)}message&&(-1===message.indexOf(\"log: \")?log(\"\".concat(prefix,\" message:\\n\").concat(message)):log(message.slice(\"log: \".length))),log(\"\".concat(prefix,\" trace start\")),trace&&trace(),log(\"\".concat(prefix,\" trace end\"))}catch(e){}\"function\"==typeof window.__debug&&window.__debug(source)}}function noopFunc(){}function isValidStrPattern(input){var isValid,str=function(str){return str.replace(/[.*+?^${}()|[\\]\\\\]/g,\"\\\\$&\")}(input);\"/\"===input[0]&&\"/\"===input[input.length-1]&&(str=input.slice(1,-1));try{isValid=new RegExp(str),isValid=!0}catch(e){isValid=!1}return isValid}function isValidCallback(callback){return callback instanceof Function||\"string\"==typeof callback}function logMessage(source,message){var forced=arguments.length>2&&void 0!==arguments[2]&&arguments[2];(forced||source.verbose)&&console.log(\"\".concat(source.name,\": \").concat(message))}var updatedArgs=args?[].concat(source).concat(args):[source];try{(function(source,match){var nativeRequestAnimationFrame=window.requestAnimationFrame,shouldLog=void 0===match,_parseMatchArg=function(match){var str,prefix,isInvertedMatch=(prefix=\"!\",!!(str=match)&&0===str.indexOf(prefix)),matchRegexp=function(){var input=arguments.length>0&&void 0!==arguments[0]?arguments[0]:\"\",FORWARD_SLASH=\"/\";if(\"\"===input)return new RegExp(\".?\");if(input[0]===FORWARD_SLASH&&input[input.length-1]===FORWARD_SLASH)return new RegExp(input.slice(1,-1));var escaped=input.replace(/[.*+?^${}()|[\\]\\\\]/g,\"\\\\$&\");return new RegExp(escaped)}(isInvertedMatch?match.slice(1):match);return{isInvertedMatch:isInvertedMatch,matchRegexp:matchRegexp}}(match),isInvertedMatch=_parseMatchArg.isInvertedMatch,matchRegexp=_parseMatchArg.matchRegexp;window.requestAnimationFrame=function(callback){var shouldPrevent=!1;if(shouldLog?(hit(source),logMessage(source,\"requestAnimationFrame(\".concat(String(callback),\")\"),!0)):isValidCallback(callback)&&isValidStrPattern(match)&&(shouldPrevent=matchRegexp.test(callback.toString())!==isInvertedMatch),shouldPrevent)return hit(source),nativeRequestAnimationFrame(noopFunc);for(var _len=arguments.length,args=new Array(_len>1?_len-1:0),_key=1;_key<_len;_key++)args[_key-1]=arguments[_key];return nativeRequestAnimationFrame.apply(window,[callback].concat(args))}}).apply(this,updatedArgs)}catch(e){console.log(e)}}"
+ "scriptlet": "function preventRequestAnimationFrame(source,args){function hit(source){if(!0===source.verbose){try{var log=console.log.bind(console),trace=console.trace.bind(console),prefix=source.ruleText||\"\";if(source.domainName){var ruleStartIndex;source.ruleText.indexOf(\"#%#//\")>-1?ruleStartIndex=source.ruleText.indexOf(\"#%#//\"):source.ruleText.indexOf(\"##+js\")>-1&&(ruleStartIndex=source.ruleText.indexOf(\"##+js\"));var rulePart=source.ruleText.slice(ruleStartIndex);prefix=\"\".concat(source.domainName).concat(rulePart)}log(\"\".concat(prefix,\" trace start\")),trace&&trace(),log(\"\".concat(prefix,\" trace end\"))}catch(e){}\"function\"==typeof window.__debug&&window.__debug(source)}}function noopFunc(){}function isValidStrPattern(input){var isValid,str=function(str){return str.replace(/[.*+?^${}()|[\\]\\\\]/g,\"\\\\$&\")}(input);\"/\"===input[0]&&\"/\"===input[input.length-1]&&(str=input.slice(1,-1));try{isValid=new RegExp(str),isValid=!0}catch(e){isValid=!1}return isValid}function isValidCallback(callback){return callback instanceof Function||\"string\"==typeof callback}function logMessage(source,message){var forced=arguments.length>2&&void 0!==arguments[2]&&arguments[2];(forced||source.verbose)&&console.log(\"\".concat(source.name,\": \").concat(message))}var updatedArgs=args?[].concat(source).concat(args):[source];try{(function(source,match){var nativeRequestAnimationFrame=window.requestAnimationFrame,shouldLog=void 0===match,_parseMatchArg=function(match){var str,prefix,isInvertedMatch=(prefix=\"!\",!!(str=match)&&0===str.indexOf(prefix)),matchRegexp=function(){var input=arguments.length>0&&void 0!==arguments[0]?arguments[0]:\"\",FORWARD_SLASH=\"/\";if(\"\"===input)return new RegExp(\".?\");if(input[0]===FORWARD_SLASH&&input[input.length-1]===FORWARD_SLASH)return new RegExp(input.slice(1,-1));var escaped=input.replace(/[.*+?^${}()|[\\]\\\\]/g,\"\\\\$&\");return new RegExp(escaped)}(isInvertedMatch?match.slice(1):match);return{isInvertedMatch:isInvertedMatch,matchRegexp:matchRegexp}}(match),isInvertedMatch=_parseMatchArg.isInvertedMatch,matchRegexp=_parseMatchArg.matchRegexp;window.requestAnimationFrame=function(callback){var shouldPrevent=!1;if(shouldLog?(hit(source),logMessage(source,\"requestAnimationFrame(\".concat(String(callback),\")\"),!0)):isValidCallback(callback)&&isValidStrPattern(match)&&(shouldPrevent=matchRegexp.test(callback.toString())!==isInvertedMatch),shouldPrevent)return hit(source),nativeRequestAnimationFrame(noopFunc);for(var _len=arguments.length,args=new Array(_len>1?_len-1:0),_key=1;_key<_len;_key++)args[_key-1]=arguments[_key];return nativeRequestAnimationFrame.apply(window,[callback].concat(args))}}).apply(this,updatedArgs)}catch(e){console.log(e)}}"
},
{
"names": [
"set-cookie"
],
- "scriptlet": "function setCookie(source,args){function hit(source,message){if(!0===source.verbose){try{var log=console.log.bind(console),trace=console.trace.bind(console),prefix=source.ruleText||\"\";if(source.domainName){var ruleStartIndex;source.ruleText.indexOf(\"#%#//\")>-1?ruleStartIndex=source.ruleText.indexOf(\"#%#//\"):source.ruleText.indexOf(\"##+js\")>-1&&(ruleStartIndex=source.ruleText.indexOf(\"##+js\"));var rulePart=source.ruleText.slice(ruleStartIndex);prefix=\"\".concat(source.domainName).concat(rulePart)}message&&(-1===message.indexOf(\"log: \")?log(\"\".concat(prefix,\" message:\\n\").concat(message)):log(message.slice(\"log: \".length))),log(\"\".concat(prefix,\" trace start\")),trace&&trace(),log(\"\".concat(prefix,\" trace end\"))}catch(e){}\"function\"==typeof window.__debug&&window.__debug(source)}}function logMessage(source,message){var forced=arguments.length>2&&void 0!==arguments[2]&&arguments[2];(forced||source.verbose)&&console.log(\"\".concat(source.name,\": \").concat(message))}function getLimitedCookieValue(source,value){if(!value)return null;var validValue,num;if(\"true\"===value)validValue=\"true\";else if(\"True\"===value)validValue=\"True\";else if(\"false\"===value)validValue=\"false\";else if(\"False\"===value)validValue=\"False\";else if(\"yes\"===value)validValue=\"yes\";else if(\"Yes\"===value)validValue=\"Yes\";else if(\"Y\"===value)validValue=\"Y\";else if(\"no\"===value)validValue=\"no\";else if(\"ok\"===value)validValue=\"ok\";else if(\"OK\"===value)validValue=\"OK\";else{if(!/^\\d+$/.test(value))return null;if(validValue=parseFloat(value),num=validValue,(Number.isNaN||window.isNaN)(num))return logMessage(source,\"Invalid cookie value: '\".concat(value,\"'\")),null;if(Math.abs(validValue)<0||Math.abs(validValue)>15)return logMessage(source,\"Invalid cookie value: '\".concat(value,\"'\")),null}return validValue}function concatCookieNameValuePath(source,rawName,rawValue,rawPath){return function(rawPath){return\"/\"===rawPath||\"none\"===rawPath}(rawPath)?\"\".concat(encodeURIComponent(rawName),\"=\").concat(encodeURIComponent(rawValue),\"; \").concat(function(rawPath){if(\"/\"===rawPath)return\"path=/\";return\"\"}(rawPath)):(logMessage(source,\"Invalid cookie path: '\".concat(rawPath,\"'\")),null)}var updatedArgs=args?[].concat(source).concat(args):[source];try{(function(source,name,value){var path=arguments.length>3&&void 0!==arguments[3]?arguments[3]:\"/\",validValue=getLimitedCookieValue(source,value);if(null!==validValue){var cookieData=concatCookieNameValuePath(source,name,validValue,path);cookieData&&(hit(source),document.cookie=cookieData)}else logMessage(source,\"Invalid cookie value: '\".concat(validValue,\"'\"))}).apply(this,updatedArgs)}catch(e){console.log(e)}}"
+ "scriptlet": "function setCookie(source,args){function hit(source){if(!0===source.verbose){try{var log=console.log.bind(console),trace=console.trace.bind(console),prefix=source.ruleText||\"\";if(source.domainName){var ruleStartIndex;source.ruleText.indexOf(\"#%#//\")>-1?ruleStartIndex=source.ruleText.indexOf(\"#%#//\"):source.ruleText.indexOf(\"##+js\")>-1&&(ruleStartIndex=source.ruleText.indexOf(\"##+js\"));var rulePart=source.ruleText.slice(ruleStartIndex);prefix=\"\".concat(source.domainName).concat(rulePart)}log(\"\".concat(prefix,\" trace start\")),trace&&trace(),log(\"\".concat(prefix,\" trace end\"))}catch(e){}\"function\"==typeof window.__debug&&window.__debug(source)}}function logMessage(source,message){var forced=arguments.length>2&&void 0!==arguments[2]&&arguments[2];(forced||source.verbose)&&console.log(\"\".concat(source.name,\": \").concat(message))}function getLimitedCookieValue(value){if(!value)return null;var validValue,num;if(\"true\"===value)validValue=\"true\";else if(\"True\"===value)validValue=\"True\";else if(\"false\"===value)validValue=\"false\";else if(\"False\"===value)validValue=\"False\";else if(\"yes\"===value)validValue=\"yes\";else if(\"Yes\"===value)validValue=\"Yes\";else if(\"Y\"===value)validValue=\"Y\";else if(\"no\"===value)validValue=\"no\";else if(\"ok\"===value)validValue=\"ok\";else if(\"OK\"===value)validValue=\"OK\";else{if(!/^\\d+$/.test(value))return null;if(validValue=parseFloat(value),num=validValue,(Number.isNaN||window.isNaN)(num))return null;if(Math.abs(validValue)<0||Math.abs(validValue)>15)return null}return validValue}function concatCookieNameValuePath(rawName,rawValue,rawPath){return\"\".concat(encodeURIComponent(rawName),\"=\").concat(encodeURIComponent(rawValue),\"; \").concat(function(rawPath){if(\"/\"===rawPath)return\"path=/\";return\"\"}(rawPath),\";\")}function isValidCookiePath(rawPath){return\"/\"===rawPath||\"none\"===rawPath}var updatedArgs=args?[].concat(source).concat(args):[source];try{(function(source,name,value){var path=arguments.length>3&&void 0!==arguments[3]?arguments[3]:\"/\",validValue=getLimitedCookieValue(value);if(null!==validValue)if(isValidCookiePath(path)){var cookieToSet=concatCookieNameValuePath(name,validValue,path);cookieToSet&&(hit(source),document.cookie=cookieToSet)}else logMessage(source,\"Invalid cookie path: '\".concat(path,\"'\"));else logMessage(source,\"Invalid cookie value: '\".concat(validValue,\"'\"))}).apply(this,updatedArgs)}catch(e){console.log(e)}}"
},
{
"names": [
"set-cookie-reload"
],
- "scriptlet": "function setCookieReload(source,args){function hit(source,message){if(!0===source.verbose){try{var log=console.log.bind(console),trace=console.trace.bind(console),prefix=source.ruleText||\"\";if(source.domainName){var ruleStartIndex;source.ruleText.indexOf(\"#%#//\")>-1?ruleStartIndex=source.ruleText.indexOf(\"#%#//\"):source.ruleText.indexOf(\"##+js\")>-1&&(ruleStartIndex=source.ruleText.indexOf(\"##+js\"));var rulePart=source.ruleText.slice(ruleStartIndex);prefix=\"\".concat(source.domainName).concat(rulePart)}message&&(-1===message.indexOf(\"log: \")?log(\"\".concat(prefix,\" message:\\n\").concat(message)):log(message.slice(\"log: \".length))),log(\"\".concat(prefix,\" trace start\")),trace&&trace(),log(\"\".concat(prefix,\" trace end\"))}catch(e){}\"function\"==typeof window.__debug&&window.__debug(source)}}function logMessage(source,message){var forced=arguments.length>2&&void 0!==arguments[2]&&arguments[2];(forced||source.verbose)&&console.log(\"\".concat(source.name,\": \").concat(message))}function isCookieSetWithValue(cookieString,name,value){return cookieString.split(\";\").some((function(cookieStr){var pos=cookieStr.indexOf(\"=\");if(-1===pos)return!1;var cookieName=cookieStr.slice(0,pos).trim(),cookieValue=cookieStr.slice(pos+1).trim();return name===cookieName&&value===cookieValue}))}function getLimitedCookieValue(source,value){if(!value)return null;var validValue,num;if(\"true\"===value)validValue=\"true\";else if(\"True\"===value)validValue=\"True\";else if(\"false\"===value)validValue=\"false\";else if(\"False\"===value)validValue=\"False\";else if(\"yes\"===value)validValue=\"yes\";else if(\"Yes\"===value)validValue=\"Yes\";else if(\"Y\"===value)validValue=\"Y\";else if(\"no\"===value)validValue=\"no\";else if(\"ok\"===value)validValue=\"ok\";else if(\"OK\"===value)validValue=\"OK\";else{if(!/^\\d+$/.test(value))return null;if(validValue=parseFloat(value),num=validValue,(Number.isNaN||window.isNaN)(num))return logMessage(source,\"Invalid cookie value: '\".concat(value,\"'\")),null;if(Math.abs(validValue)<0||Math.abs(validValue)>15)return logMessage(source,\"Invalid cookie value: '\".concat(value,\"'\")),null}return validValue}function concatCookieNameValuePath(source,rawName,rawValue,rawPath){return function(rawPath){return\"/\"===rawPath||\"none\"===rawPath}(rawPath)?\"\".concat(encodeURIComponent(rawName),\"=\").concat(encodeURIComponent(rawValue),\"; \").concat(function(rawPath){if(\"/\"===rawPath)return\"path=/\";return\"\"}(rawPath)):(logMessage(source,\"Invalid cookie path: '\".concat(rawPath,\"'\")),null)}var updatedArgs=args?[].concat(source).concat(args):[source];try{(function(source,name,value){var path=arguments.length>3&&void 0!==arguments[3]?arguments[3]:\"/\";if(!isCookieSetWithValue(name,value)){var validValue=getLimitedCookieValue(source,value);if(null!==validValue){var cookieData=concatCookieNameValuePath(source,name,validValue,path);cookieData&&(document.cookie=cookieData,hit(source),isCookieSetWithValue(document.cookie,name,value)&&window.location.reload())}else logMessage(source,\"Invalid cookie value: '\".concat(validValue,\"'\"))}}).apply(this,updatedArgs)}catch(e){console.log(e)}}"
+ "scriptlet": "function setCookieReload(source,args){function hit(source){if(!0===source.verbose){try{var log=console.log.bind(console),trace=console.trace.bind(console),prefix=source.ruleText||\"\";if(source.domainName){var ruleStartIndex;source.ruleText.indexOf(\"#%#//\")>-1?ruleStartIndex=source.ruleText.indexOf(\"#%#//\"):source.ruleText.indexOf(\"##+js\")>-1&&(ruleStartIndex=source.ruleText.indexOf(\"##+js\"));var rulePart=source.ruleText.slice(ruleStartIndex);prefix=\"\".concat(source.domainName).concat(rulePart)}log(\"\".concat(prefix,\" trace start\")),trace&&trace(),log(\"\".concat(prefix,\" trace end\"))}catch(e){}\"function\"==typeof window.__debug&&window.__debug(source)}}function logMessage(source,message){var forced=arguments.length>2&&void 0!==arguments[2]&&arguments[2];(forced||source.verbose)&&console.log(\"\".concat(source.name,\": \").concat(message))}function isCookieSetWithValue(cookieString,name,value){return cookieString.split(\";\").some((function(cookieStr){var pos=cookieStr.indexOf(\"=\");if(-1===pos)return!1;var cookieName=cookieStr.slice(0,pos).trim(),cookieValue=cookieStr.slice(pos+1).trim();return name===cookieName&&value===cookieValue}))}function getLimitedCookieValue(value){if(!value)return null;var validValue,num;if(\"true\"===value)validValue=\"true\";else if(\"True\"===value)validValue=\"True\";else if(\"false\"===value)validValue=\"false\";else if(\"False\"===value)validValue=\"False\";else if(\"yes\"===value)validValue=\"yes\";else if(\"Yes\"===value)validValue=\"Yes\";else if(\"Y\"===value)validValue=\"Y\";else if(\"no\"===value)validValue=\"no\";else if(\"ok\"===value)validValue=\"ok\";else if(\"OK\"===value)validValue=\"OK\";else{if(!/^\\d+$/.test(value))return null;if(validValue=parseFloat(value),num=validValue,(Number.isNaN||window.isNaN)(num))return null;if(Math.abs(validValue)<0||Math.abs(validValue)>15)return null}return validValue}function concatCookieNameValuePath(rawName,rawValue,rawPath){return\"\".concat(encodeURIComponent(rawName),\"=\").concat(encodeURIComponent(rawValue),\"; \").concat(function(rawPath){if(\"/\"===rawPath)return\"path=/\";return\"\"}(rawPath),\";\")}function isValidCookiePath(rawPath){return\"/\"===rawPath||\"none\"===rawPath}var updatedArgs=args?[].concat(source).concat(args):[source];try{(function(source,name,value){var path=arguments.length>3&&void 0!==arguments[3]?arguments[3]:\"/\";if(!isCookieSetWithValue(document.cookie,name,value)){var validValue=getLimitedCookieValue(value);if(null!==validValue)if(isValidCookiePath(path)){var cookieToSet=concatCookieNameValuePath(name,validValue,path);cookieToSet&&(document.cookie=cookieToSet,hit(source),isCookieSetWithValue(document.cookie,name,value)&&window.location.reload())}else logMessage(source,\"Invalid cookie path: '\".concat(path,\"'\"));else logMessage(source,\"Invalid cookie value: '\".concat(value,\"'\"))}}).apply(this,updatedArgs)}catch(e){console.log(e)}}"
},
{
"names": [
"hide-in-shadow-dom"
],
- "scriptlet": "function hideInShadowDom(source,args){function hit(source,message){if(!0===source.verbose){try{var log=console.log.bind(console),trace=console.trace.bind(console),prefix=source.ruleText||\"\";if(source.domainName){var ruleStartIndex;source.ruleText.indexOf(\"#%#//\")>-1?ruleStartIndex=source.ruleText.indexOf(\"#%#//\"):source.ruleText.indexOf(\"##+js\")>-1&&(ruleStartIndex=source.ruleText.indexOf(\"##+js\"));var rulePart=source.ruleText.slice(ruleStartIndex);prefix=\"\".concat(source.domainName).concat(rulePart)}message&&(-1===message.indexOf(\"log: \")?log(\"\".concat(prefix,\" message:\\n\").concat(message)):log(message.slice(\"log: \".length))),log(\"\".concat(prefix,\" trace start\")),trace&&trace(),log(\"\".concat(prefix,\" trace end\"))}catch(e){}\"function\"==typeof window.__debug&&window.__debug(source)}}function findHostElements(rootElement){var hosts=[];return rootElement.querySelectorAll(\"*\").forEach((function(el){el.shadowRoot&&hosts.push(el)})),hosts}function pierceShadowDom(selector,hostElements){var targets=[],innerHostsAcc=[];hostElements.forEach((function(host){var simpleElems=host.querySelectorAll(selector);targets=targets.concat([].slice.call(simpleElems));var shadowRootElem=host.shadowRoot,shadowChildren=shadowRootElem.querySelectorAll(selector);targets=targets.concat([].slice.call(shadowChildren)),innerHostsAcc.push(findHostElements(shadowRootElem))}));var innerHosts=function(input){var stack=[];input.forEach((function(el){return stack.push(el)}));var res=[];for(;stack.length;){var next=stack.pop();Array.isArray(next)?next.forEach((function(el){return stack.push(el)})):res.push(next)}return res.reverse()}(innerHostsAcc);return{targets:targets,innerHosts:innerHosts}}function throttle(cb,delay){var savedArgs,wait=!1;return function wrapper(){for(var _len=arguments.length,args=new Array(_len),_key=0;_key<_len;_key++)args[_key]=arguments[_key];wait?savedArgs=args:(cb.apply(void 0,args),wait=!0,setTimeout((function(){wait=!1,savedArgs&&(wrapper(savedArgs),savedArgs=null)}),delay))}}var updatedArgs=args?[].concat(source).concat(args):[source];try{(function(source,selector,baseSelector){if(Element.prototype.attachShadow){var hideHandler=function(){for(var hostElements=baseSelector?document.querySelectorAll(baseSelector):findHostElements(document.documentElement);0!==hostElements.length;){var isHidden=!1,_pierceShadowDom=pierceShadowDom(selector,hostElements),targets=_pierceShadowDom.targets,innerHosts=_pierceShadowDom.innerHosts;targets.forEach((function(targetEl){targetEl.style.cssText=\"display:none!important;\",isHidden=!0})),isHidden&&hit(source),hostElements=innerHosts}};hideHandler(),function(callback){var observeAttrs=arguments.length>1&&void 0!==arguments[1]&&arguments[1],attrsToObserve=arguments.length>2&&void 0!==arguments[2]?arguments[2]:[],observer=new MutationObserver(throttle(callbackWrapper,20)),connect=function(){attrsToObserve.length>0?observer.observe(document.documentElement,{childList:!0,subtree:!0,attributes:observeAttrs,attributeFilter:attrsToObserve}):observer.observe(document.documentElement,{childList:!0,subtree:!0,attributes:observeAttrs})},disconnect=function(){observer.disconnect()};function callbackWrapper(){disconnect(),callback(),connect()}connect()}(hideHandler,!0)}}).apply(this,updatedArgs)}catch(e){console.log(e)}}"
+ "scriptlet": "function hideInShadowDom(source,args){function hit(source){if(!0===source.verbose){try{var log=console.log.bind(console),trace=console.trace.bind(console),prefix=source.ruleText||\"\";if(source.domainName){var ruleStartIndex;source.ruleText.indexOf(\"#%#//\")>-1?ruleStartIndex=source.ruleText.indexOf(\"#%#//\"):source.ruleText.indexOf(\"##+js\")>-1&&(ruleStartIndex=source.ruleText.indexOf(\"##+js\"));var rulePart=source.ruleText.slice(ruleStartIndex);prefix=\"\".concat(source.domainName).concat(rulePart)}log(\"\".concat(prefix,\" trace start\")),trace&&trace(),log(\"\".concat(prefix,\" trace end\"))}catch(e){}\"function\"==typeof window.__debug&&window.__debug(source)}}function findHostElements(rootElement){var hosts=[];return rootElement.querySelectorAll(\"*\").forEach((function(el){el.shadowRoot&&hosts.push(el)})),hosts}function pierceShadowDom(selector,hostElements){var targets=[],innerHostsAcc=[];hostElements.forEach((function(host){var simpleElems=host.querySelectorAll(selector);targets=targets.concat([].slice.call(simpleElems));var shadowRootElem=host.shadowRoot,shadowChildren=shadowRootElem.querySelectorAll(selector);targets=targets.concat([].slice.call(shadowChildren)),innerHostsAcc.push(findHostElements(shadowRootElem))}));var innerHosts=function(input){var stack=[];input.forEach((function(el){return stack.push(el)}));var res=[];for(;stack.length;){var next=stack.pop();Array.isArray(next)?next.forEach((function(el){return stack.push(el)})):res.push(next)}return res.reverse()}(innerHostsAcc);return{targets:targets,innerHosts:innerHosts}}function throttle(cb,delay){var savedArgs,wait=!1;return function wrapper(){for(var _len=arguments.length,args=new Array(_len),_key=0;_key<_len;_key++)args[_key]=arguments[_key];wait?savedArgs=args:(cb.apply(void 0,args),wait=!0,setTimeout((function(){wait=!1,savedArgs&&(wrapper(savedArgs),savedArgs=null)}),delay))}}var updatedArgs=args?[].concat(source).concat(args):[source];try{(function(source,selector,baseSelector){if(Element.prototype.attachShadow){var hideHandler=function(){for(var hostElements=baseSelector?document.querySelectorAll(baseSelector):findHostElements(document.documentElement);0!==hostElements.length;){var isHidden=!1,_pierceShadowDom=pierceShadowDom(selector,hostElements),targets=_pierceShadowDom.targets,innerHosts=_pierceShadowDom.innerHosts;targets.forEach((function(targetEl){targetEl.style.cssText=\"display:none!important;\",isHidden=!0})),isHidden&&hit(source),hostElements=innerHosts}};hideHandler(),function(callback){var observeAttrs=arguments.length>1&&void 0!==arguments[1]&&arguments[1],attrsToObserve=arguments.length>2&&void 0!==arguments[2]?arguments[2]:[],observer=new MutationObserver(throttle(callbackWrapper,20)),connect=function(){attrsToObserve.length>0?observer.observe(document.documentElement,{childList:!0,subtree:!0,attributes:observeAttrs,attributeFilter:attrsToObserve}):observer.observe(document.documentElement,{childList:!0,subtree:!0,attributes:observeAttrs})},disconnect=function(){observer.disconnect()};function callbackWrapper(){disconnect(),callback(),connect()}connect()}(hideHandler,!0)}}).apply(this,updatedArgs)}catch(e){console.log(e)}}"
},
{
"names": [
"remove-in-shadow-dom"
],
- "scriptlet": "function removeInShadowDom(source,args){function hit(source,message){if(!0===source.verbose){try{var log=console.log.bind(console),trace=console.trace.bind(console),prefix=source.ruleText||\"\";if(source.domainName){var ruleStartIndex;source.ruleText.indexOf(\"#%#//\")>-1?ruleStartIndex=source.ruleText.indexOf(\"#%#//\"):source.ruleText.indexOf(\"##+js\")>-1&&(ruleStartIndex=source.ruleText.indexOf(\"##+js\"));var rulePart=source.ruleText.slice(ruleStartIndex);prefix=\"\".concat(source.domainName).concat(rulePart)}message&&(-1===message.indexOf(\"log: \")?log(\"\".concat(prefix,\" message:\\n\").concat(message)):log(message.slice(\"log: \".length))),log(\"\".concat(prefix,\" trace start\")),trace&&trace(),log(\"\".concat(prefix,\" trace end\"))}catch(e){}\"function\"==typeof window.__debug&&window.__debug(source)}}function findHostElements(rootElement){var hosts=[];return rootElement.querySelectorAll(\"*\").forEach((function(el){el.shadowRoot&&hosts.push(el)})),hosts}function pierceShadowDom(selector,hostElements){var targets=[],innerHostsAcc=[];hostElements.forEach((function(host){var simpleElems=host.querySelectorAll(selector);targets=targets.concat([].slice.call(simpleElems));var shadowRootElem=host.shadowRoot,shadowChildren=shadowRootElem.querySelectorAll(selector);targets=targets.concat([].slice.call(shadowChildren)),innerHostsAcc.push(findHostElements(shadowRootElem))}));var innerHosts=function(input){var stack=[];input.forEach((function(el){return stack.push(el)}));var res=[];for(;stack.length;){var next=stack.pop();Array.isArray(next)?next.forEach((function(el){return stack.push(el)})):res.push(next)}return res.reverse()}(innerHostsAcc);return{targets:targets,innerHosts:innerHosts}}function throttle(cb,delay){var savedArgs,wait=!1;return function wrapper(){for(var _len=arguments.length,args=new Array(_len),_key=0;_key<_len;_key++)args[_key]=arguments[_key];wait?savedArgs=args:(cb.apply(void 0,args),wait=!0,setTimeout((function(){wait=!1,savedArgs&&(wrapper(savedArgs),savedArgs=null)}),delay))}}var updatedArgs=args?[].concat(source).concat(args):[source];try{(function(source,selector,baseSelector){if(Element.prototype.attachShadow){var removeHandler=function(){for(var hostElements=baseSelector?document.querySelectorAll(baseSelector):findHostElements(document.documentElement);0!==hostElements.length;){var isRemoved=!1,_pierceShadowDom=pierceShadowDom(selector,hostElements),targets=_pierceShadowDom.targets,innerHosts=_pierceShadowDom.innerHosts;targets.forEach((function(targetEl){targetEl.remove(),isRemoved=!0})),isRemoved&&hit(source),hostElements=innerHosts}};removeHandler(),function(callback){var observeAttrs=arguments.length>1&&void 0!==arguments[1]&&arguments[1],attrsToObserve=arguments.length>2&&void 0!==arguments[2]?arguments[2]:[],observer=new MutationObserver(throttle(callbackWrapper,20)),connect=function(){attrsToObserve.length>0?observer.observe(document.documentElement,{childList:!0,subtree:!0,attributes:observeAttrs,attributeFilter:attrsToObserve}):observer.observe(document.documentElement,{childList:!0,subtree:!0,attributes:observeAttrs})},disconnect=function(){observer.disconnect()};function callbackWrapper(){disconnect(),callback(),connect()}connect()}(removeHandler,!0)}}).apply(this,updatedArgs)}catch(e){console.log(e)}}"
+ "scriptlet": "function removeInShadowDom(source,args){function hit(source){if(!0===source.verbose){try{var log=console.log.bind(console),trace=console.trace.bind(console),prefix=source.ruleText||\"\";if(source.domainName){var ruleStartIndex;source.ruleText.indexOf(\"#%#//\")>-1?ruleStartIndex=source.ruleText.indexOf(\"#%#//\"):source.ruleText.indexOf(\"##+js\")>-1&&(ruleStartIndex=source.ruleText.indexOf(\"##+js\"));var rulePart=source.ruleText.slice(ruleStartIndex);prefix=\"\".concat(source.domainName).concat(rulePart)}log(\"\".concat(prefix,\" trace start\")),trace&&trace(),log(\"\".concat(prefix,\" trace end\"))}catch(e){}\"function\"==typeof window.__debug&&window.__debug(source)}}function findHostElements(rootElement){var hosts=[];return rootElement.querySelectorAll(\"*\").forEach((function(el){el.shadowRoot&&hosts.push(el)})),hosts}function pierceShadowDom(selector,hostElements){var targets=[],innerHostsAcc=[];hostElements.forEach((function(host){var simpleElems=host.querySelectorAll(selector);targets=targets.concat([].slice.call(simpleElems));var shadowRootElem=host.shadowRoot,shadowChildren=shadowRootElem.querySelectorAll(selector);targets=targets.concat([].slice.call(shadowChildren)),innerHostsAcc.push(findHostElements(shadowRootElem))}));var innerHosts=function(input){var stack=[];input.forEach((function(el){return stack.push(el)}));var res=[];for(;stack.length;){var next=stack.pop();Array.isArray(next)?next.forEach((function(el){return stack.push(el)})):res.push(next)}return res.reverse()}(innerHostsAcc);return{targets:targets,innerHosts:innerHosts}}function throttle(cb,delay){var savedArgs,wait=!1;return function wrapper(){for(var _len=arguments.length,args=new Array(_len),_key=0;_key<_len;_key++)args[_key]=arguments[_key];wait?savedArgs=args:(cb.apply(void 0,args),wait=!0,setTimeout((function(){wait=!1,savedArgs&&(wrapper(savedArgs),savedArgs=null)}),delay))}}var updatedArgs=args?[].concat(source).concat(args):[source];try{(function(source,selector,baseSelector){if(Element.prototype.attachShadow){var removeHandler=function(){for(var hostElements=baseSelector?document.querySelectorAll(baseSelector):findHostElements(document.documentElement);0!==hostElements.length;){var isRemoved=!1,_pierceShadowDom=pierceShadowDom(selector,hostElements),targets=_pierceShadowDom.targets,innerHosts=_pierceShadowDom.innerHosts;targets.forEach((function(targetEl){targetEl.remove(),isRemoved=!0})),isRemoved&&hit(source),hostElements=innerHosts}};removeHandler(),function(callback){var observeAttrs=arguments.length>1&&void 0!==arguments[1]&&arguments[1],attrsToObserve=arguments.length>2&&void 0!==arguments[2]?arguments[2]:[],observer=new MutationObserver(throttle(callbackWrapper,20)),connect=function(){attrsToObserve.length>0?observer.observe(document.documentElement,{childList:!0,subtree:!0,attributes:observeAttrs,attributeFilter:attrsToObserve}):observer.observe(document.documentElement,{childList:!0,subtree:!0,attributes:observeAttrs})},disconnect=function(){observer.disconnect()};function callbackWrapper(){disconnect(),callback(),connect()}connect()}(removeHandler,!0)}}).apply(this,updatedArgs)}catch(e){console.log(e)}}"
},
{
"names": [
@@ -379,19 +379,19 @@
"ubo-no-fetch-if.js",
"ubo-no-fetch-if"
],
- "scriptlet": "function preventFetch(source,args){function hit(source,message){if(!0===source.verbose){try{var log=console.log.bind(console),trace=console.trace.bind(console),prefix=source.ruleText||\"\";if(source.domainName){var ruleStartIndex;source.ruleText.indexOf(\"#%#//\")>-1?ruleStartIndex=source.ruleText.indexOf(\"#%#//\"):source.ruleText.indexOf(\"##+js\")>-1&&(ruleStartIndex=source.ruleText.indexOf(\"##+js\"));var rulePart=source.ruleText.slice(ruleStartIndex);prefix=\"\".concat(source.domainName).concat(rulePart)}message&&(-1===message.indexOf(\"log: \")?log(\"\".concat(prefix,\" message:\\n\").concat(message)):log(message.slice(\"log: \".length))),log(\"\".concat(prefix,\" trace start\")),trace&&trace(),log(\"\".concat(prefix,\" trace end\"))}catch(e){}\"function\"==typeof window.__debug&&window.__debug(source)}}function getFetchData(args){var fetchUrl,fetchInit,request,fetchPropsObj={};if(args[0]instanceof Request){var requestData=(request=args[0],getRequestProps().map((function(key){return[key,request[key]]})).reduce((function(acc,el){var key=el[0],value=el[1];return acc[key]=value,acc}),{}));fetchUrl=requestData.url,fetchInit=requestData}else fetchUrl=args[0],fetchInit=args[1];return fetchPropsObj.url=fetchUrl,fetchInit instanceof Object&&Object.keys(fetchInit).forEach((function(prop){fetchPropsObj[prop]=fetchInit[prop]})),fetchPropsObj}function objectToString(obj){return function(obj){return 0===Object.keys(obj).length}(obj)?\"{}\":(object=obj,keys=Object.keys(object),entries=[],keys.forEach((function(key){return entries.push([key,object[key]])})),entries).map((function(pair){var key=pair[0],value=pair[1],recordValueStr=value;return value instanceof Object&&(recordValueStr=\"{ \".concat(objectToString(value),\" }\")),\"\".concat(key,':\"').concat(recordValueStr,'\"')})).join(\" \");var object,keys,entries}function noopPromiseResolve(){var responseBody=arguments.length>0&&void 0!==arguments[0]?arguments[0]:\"{}\",responseUrl=arguments.length>1&&void 0!==arguments[1]?arguments[1]:\"\",responseType=arguments.length>2&&void 0!==arguments[2]?arguments[2]:\"default\";if(\"undefined\"!=typeof Response){var response=new Response(responseBody,{status:200,statusText:\"OK\"});return Object.defineProperties(response,{url:{value:responseUrl},type:{value:responseType}}),Promise.resolve(response)}}function matchRequestProps(source,propsToMatch,requestData){if(\"\"===propsToMatch||\"*\"===propsToMatch)return!0;var isMatched,propsToMatchStr,PROPS_DIVIDER,PAIRS_MARKER,LEGAL_MATCH_PROPS,propsObj,data,parsedData=(propsToMatchStr=propsToMatch,PROPS_DIVIDER=\" \",PAIRS_MARKER=\":\",LEGAL_MATCH_PROPS=getRequestProps(),propsObj={},propsToMatchStr.split(PROPS_DIVIDER).forEach((function(prop){var dividerInd=prop.indexOf(PAIRS_MARKER),key=prop.slice(0,dividerInd);if(-1!==LEGAL_MATCH_PROPS.indexOf(key)){var value=prop.slice(dividerInd+1);propsObj[key]=value}else propsObj.url=prop})),propsObj);if(data=parsedData,Object.values(data).every((function(value){return function(input){var isValid,FORWARD_SLASH=\"/\",str=function(str){return str.replace(/[.*+?^${}()|[\\]\\\\]/g,\"\\\\$&\")}(input);input[0]===FORWARD_SLASH&&input[input.length-1]===FORWARD_SLASH&&(str=input.slice(1,-1));try{isValid=new RegExp(str),isValid=!0}catch(e){isValid=!1}return isValid}(value)}))){var matchData=function(data){var matchData={};return Object.keys(data).forEach((function(key){matchData[key]=function(){var input=arguments.length>0&&void 0!==arguments[0]?arguments[0]:\"\",DEFAULT_VALUE=\".?\",FORWARD_SLASH=\"/\";if(\"\"===input)return new RegExp(DEFAULT_VALUE);if(input[0]===FORWARD_SLASH&&input[input.length-1]===FORWARD_SLASH)return new RegExp(input.slice(1,-1));var escaped=input.replace(/[.*+?^${}()|[\\]\\\\]/g,\"\\\\$&\");return new RegExp(escaped)}(data[key])})),matchData}(parsedData);isMatched=Object.keys(matchData).every((function(matchKey){var matchValue=matchData[matchKey];return Object.prototype.hasOwnProperty.call(requestData,matchKey)&&matchValue.test(requestData[matchKey])}))}else logMessage(source,\"Invalid parameter: \".concat(propsToMatch)),isMatched=!1;return isMatched}function logMessage(source,message){var forced=arguments.length>2&&void 0!==arguments[2]&&arguments[2];(forced||source.verbose)&&console.log(\"\".concat(source.name,\": \").concat(message))}var updatedArgs=args?[].concat(source).concat(args):[source];try{(function(source,propsToMatch){var responseBody=arguments.length>2&&void 0!==arguments[2]?arguments[2]:\"emptyObj\",responseType=arguments.length>3&&void 0!==arguments[3]?arguments[3]:\"default\";if(\"undefined\"!=typeof fetch&&\"undefined\"!=typeof Proxy&&\"undefined\"!=typeof Response){var strResponseBody;if(\"emptyObj\"===responseBody)strResponseBody=\"{}\";else{if(\"emptyArr\"!==responseBody)return;strResponseBody=\"[]\"}if(\"default\"===responseType||\"opaque\"===responseType){var handlerWrapper=function(target,thisArg,args){var fetchData=getFetchData(args);return void 0===propsToMatch?(logMessage(source,\"fetch( \".concat(objectToString(fetchData),\" )\"),!0),hit(source),Reflect.apply(target,thisArg,args)):matchRequestProps(source,propsToMatch,fetchData)?(hit(source),noopPromiseResolve(strResponseBody,fetchData.url,responseType)):Reflect.apply(target,thisArg,args)};fetch=new Proxy(fetch,{apply:handlerWrapper})}else logMessage(source,\"Invalid parameter: \".concat(responseType))}}).apply(this,updatedArgs)}catch(e){console.log(e)}}"
+ "scriptlet": "function preventFetch(source,args){function hit(source){if(!0===source.verbose){try{var log=console.log.bind(console),trace=console.trace.bind(console),prefix=source.ruleText||\"\";if(source.domainName){var ruleStartIndex;source.ruleText.indexOf(\"#%#//\")>-1?ruleStartIndex=source.ruleText.indexOf(\"#%#//\"):source.ruleText.indexOf(\"##+js\")>-1&&(ruleStartIndex=source.ruleText.indexOf(\"##+js\"));var rulePart=source.ruleText.slice(ruleStartIndex);prefix=\"\".concat(source.domainName).concat(rulePart)}log(\"\".concat(prefix,\" trace start\")),trace&&trace(),log(\"\".concat(prefix,\" trace end\"))}catch(e){}\"function\"==typeof window.__debug&&window.__debug(source)}}function getFetchData(args){var fetchUrl,fetchInit,entries,request,fetchPropsObj={};if(args[0]instanceof Request){var requestData=(request=args[0],entries=[\"url\",\"method\",\"headers\",\"body\",\"mode\",\"credentials\",\"cache\",\"redirect\",\"referrer\",\"referrerPolicy\",\"integrity\",\"keepalive\",\"signal\"].map((function(key){return[key,request[key]]})),entries.reduce((function(acc,el){var key=el[0],value=el[1];return acc[key]=value,acc}),{}));fetchUrl=requestData.url,fetchInit=requestData}else fetchUrl=args[0],fetchInit=args[1];return fetchPropsObj.url=fetchUrl,fetchInit instanceof Object&&Object.keys(fetchInit).forEach((function(prop){fetchPropsObj[prop]=fetchInit[prop]})),fetchPropsObj}function objectToString(obj){return function(obj){return 0===Object.keys(obj).length&&!obj.prototype}(obj)?\"{}\":(object=obj,keys=Object.keys(object),entries=[],keys.forEach((function(key){return entries.push([key,object[key]])})),entries).map((function(pair){var key=pair[0],value=pair[1],recordValueStr=value;return value instanceof Object&&(recordValueStr=\"{ \".concat(objectToString(value),\" }\")),\"\".concat(key,':\"').concat(recordValueStr,'\"')})).join(\" \");var object,keys,entries}function noopPromiseResolve(){var responseBody=arguments.length>0&&void 0!==arguments[0]?arguments[0]:\"{}\",responseUrl=arguments.length>1&&void 0!==arguments[1]?arguments[1]:\"\",responseType=arguments.length>2&&void 0!==arguments[2]?arguments[2]:\"default\";if(\"undefined\"!=typeof Response){var response=new Response(responseBody,{status:200,statusText:\"OK\"});return Object.defineProperties(response,{url:{value:responseUrl},type:{value:responseType}}),Promise.resolve(response)}}function matchRequestProps(source,propsToMatch,requestData){if(\"\"===propsToMatch||\"*\"===propsToMatch)return!0;var isMatched,PROPS_DIVIDER,PAIRS_MARKER,LEGAL_MATCH_PROPS,propsObj,data,parsedData=(PROPS_DIVIDER=\" \",PAIRS_MARKER=\":\",LEGAL_MATCH_PROPS=[\"url\",\"method\",\"headers\",\"body\",\"mode\",\"credentials\",\"cache\",\"redirect\",\"referrer\",\"referrerPolicy\",\"integrity\",\"keepalive\",\"signal\"],propsObj={},propsToMatch.split(PROPS_DIVIDER).forEach((function(prop){var dividerInd=prop.indexOf(PAIRS_MARKER),key=prop.slice(0,dividerInd);if(-1!==LEGAL_MATCH_PROPS.indexOf(key)){var value=prop.slice(dividerInd+1);propsObj[key]=value}else propsObj.url=prop})),propsObj);if(data=parsedData,Object.values(data).every((function(value){return function(input){var isValid,FORWARD_SLASH=\"/\",str=function(str){return str.replace(/[.*+?^${}()|[\\]\\\\]/g,\"\\\\$&\")}(input);input[0]===FORWARD_SLASH&&input[input.length-1]===FORWARD_SLASH&&(str=input.slice(1,-1));try{isValid=new RegExp(str),isValid=!0}catch(e){isValid=!1}return isValid}(value)}))){var matchData=function(data){var matchData={};return Object.keys(data).forEach((function(key){matchData[key]=function(){var input=arguments.length>0&&void 0!==arguments[0]?arguments[0]:\"\",DEFAULT_VALUE=\".?\",FORWARD_SLASH=\"/\";if(\"\"===input)return new RegExp(DEFAULT_VALUE);if(input[0]===FORWARD_SLASH&&input[input.length-1]===FORWARD_SLASH)return new RegExp(input.slice(1,-1));var escaped=input.replace(/[.*+?^${}()|[\\]\\\\]/g,\"\\\\$&\");return new RegExp(escaped)}(data[key])})),matchData}(parsedData);isMatched=Object.keys(matchData).every((function(matchKey){var matchValue=matchData[matchKey];return Object.prototype.hasOwnProperty.call(requestData,matchKey)&&matchValue.test(requestData[matchKey])}))}else logMessage(source,\"Invalid parameter: \".concat(propsToMatch)),isMatched=!1;return isMatched}function logMessage(source,message){var forced=arguments.length>2&&void 0!==arguments[2]&&arguments[2];(forced||source.verbose)&&console.log(\"\".concat(source.name,\": \").concat(message))}var updatedArgs=args?[].concat(source).concat(args):[source];try{(function(source,propsToMatch){var responseBody=arguments.length>2&&void 0!==arguments[2]?arguments[2]:\"emptyObj\",responseType=arguments.length>3&&void 0!==arguments[3]?arguments[3]:\"default\";if(\"undefined\"!=typeof fetch&&\"undefined\"!=typeof Proxy&&\"undefined\"!=typeof Response){var strResponseBody;if(\"\"===responseBody||\"emptyObj\"===responseBody)strResponseBody=\"{}\";else{if(\"emptyArr\"!==responseBody)return;strResponseBody=\"[]\"}if(\"default\"===responseType||\"opaque\"===responseType){var handlerWrapper=function(target,thisArg,args){var fetchData=getFetchData(args);return void 0===propsToMatch?(logMessage(source,\"fetch( \".concat(objectToString(fetchData),\" )\"),!0),hit(source),Reflect.apply(target,thisArg,args)):matchRequestProps(source,propsToMatch,fetchData)?(hit(source),noopPromiseResolve(strResponseBody,fetchData.url,responseType)):Reflect.apply(target,thisArg,args)};fetch=new Proxy(fetch,{apply:handlerWrapper})}else logMessage(source,\"Invalid parameter: \".concat(responseType))}}).apply(this,updatedArgs)}catch(e){console.log(e)}}"
},
{
"names": [
"set-local-storage-item"
],
- "scriptlet": "function setLocalStorageItem(source,args){function logMessage(source,message){var forced=arguments.length>2&&void 0!==arguments[2]&&arguments[2];(forced||source.verbose)&&console.log(\"\".concat(source.name,\": \").concat(message))}var updatedArgs=args?[].concat(source).concat(args):[source];try{(function(source,key,value){if(void 0!==key){var validValue=function(source,value){if(!value)return null;var validValue,num;if(\"undefined\"===value)validValue=void 0;else if(\"false\"===value)validValue=!1;else if(\"true\"===value)validValue=!0;else if(\"null\"===value)validValue=null;else if(\"emptyArr\"===value)validValue=\"[]\";else if(\"emptyObj\"===value)validValue=\"{}\";else if(\"\"===value)validValue=\"\";else if(/^\\d+$/.test(value)){if(num=validValue=parseFloat(value),(Number.isNaN||window.isNaN)(num))return logMessage(source,\"Invalid storage item value: '\".concat(value,\"'\")),null;if(Math.abs(validValue)>32767)return logMessage(source,\"Invalid storage item value: '\".concat(value,\"'\")),null}else if(\"yes\"===value)validValue=\"yes\";else{if(\"no\"!==value)return null;validValue=\"no\"}return validValue}(source,value);null!==validValue?(function(source,storage,key,value){try{storage.setItem(key,value)}catch(e){logMessage(source,\"Unable to set sessionStorage item due to: \".concat(e.message))}}(source,window.localStorage,key,validValue),function(source,message){if(!0===source.verbose){try{var log=console.log.bind(console),trace=console.trace.bind(console),prefix=source.ruleText||\"\";if(source.domainName){var ruleStartIndex,AG_SCRIPTLET_MARKER=\"#%#//\",UBO_SCRIPTLET_MARKER=\"##+js\";source.ruleText.indexOf(AG_SCRIPTLET_MARKER)>-1?ruleStartIndex=source.ruleText.indexOf(AG_SCRIPTLET_MARKER):source.ruleText.indexOf(UBO_SCRIPTLET_MARKER)>-1&&(ruleStartIndex=source.ruleText.indexOf(UBO_SCRIPTLET_MARKER));var rulePart=source.ruleText.slice(ruleStartIndex);prefix=\"\".concat(source.domainName).concat(rulePart)}var LOG_MARKER=\"log: \";message&&(-1===message.indexOf(LOG_MARKER)?log(\"\".concat(prefix,\" message:\\n\").concat(message)):log(message.slice(LOG_MARKER.length))),log(\"\".concat(prefix,\" trace start\")),trace&&trace(),log(\"\".concat(prefix,\" trace end\"))}catch(e){}\"function\"==typeof window.__debug&&window.__debug(source)}}(source)):logMessage(source,\"Invalid cookie value: '\".concat(validValue,\"'\"))}else logMessage(source,\"Item key should be specified.\")}).apply(this,updatedArgs)}catch(e){console.log(e)}}"
+ "scriptlet": "function setLocalStorageItem(source,args){function logMessage(source,message){var forced=arguments.length>2&&void 0!==arguments[2]&&arguments[2];(forced||source.verbose)&&console.log(\"\".concat(source.name,\": \").concat(message))}var updatedArgs=args?[].concat(source).concat(args):[source];try{(function(source,key,value){if(void 0!==key){var validValue;try{validValue=function(value){if(\"string\"!=typeof value)throw new Error(\"Invalid value\");var validValue,num;if(\"undefined\"===value)validValue=void 0;else if(\"false\"===value)validValue=!1;else if(\"true\"===value)validValue=!0;else if(\"null\"===value)validValue=null;else if(\"emptyArr\"===value)validValue=\"[]\";else if(\"emptyObj\"===value)validValue=\"{}\";else if(\"\"===value)validValue=\"\";else if(/^\\d+$/.test(value)){if(num=validValue=parseFloat(value),(Number.isNaN||window.isNaN)(num))throw new Error(\"Invalid value\");if(Math.abs(validValue)>32767)throw new Error(\"Invalid value\")}else if(\"yes\"===value)validValue=\"yes\";else{if(\"no\"!==value)throw new Error(\"Invalid value\");validValue=\"no\"}return validValue}(value)}catch(_unused){return void logMessage(source,\"Invalid storage item value: '\".concat(value,\"'\"))}!function(source,storage,key,value){try{storage.setItem(key,value)}catch(e){logMessage(source,\"Unable to set sessionStorage item due to: \".concat(e.message))}}(source,window.localStorage,key,validValue),function(source){if(!0===source.verbose){try{var log=console.log.bind(console),trace=console.trace.bind(console),prefix=source.ruleText||\"\";if(source.domainName){var ruleStartIndex,AG_SCRIPTLET_MARKER=\"#%#//\",UBO_SCRIPTLET_MARKER=\"##+js\";source.ruleText.indexOf(AG_SCRIPTLET_MARKER)>-1?ruleStartIndex=source.ruleText.indexOf(AG_SCRIPTLET_MARKER):source.ruleText.indexOf(UBO_SCRIPTLET_MARKER)>-1&&(ruleStartIndex=source.ruleText.indexOf(UBO_SCRIPTLET_MARKER));var rulePart=source.ruleText.slice(ruleStartIndex);prefix=\"\".concat(source.domainName).concat(rulePart)}log(\"\".concat(prefix,\" trace start\")),trace&&trace(),log(\"\".concat(prefix,\" trace end\"))}catch(e){}\"function\"==typeof window.__debug&&window.__debug(source)}}(source)}else logMessage(source,\"Item key should be specified.\")}).apply(this,updatedArgs)}catch(e){console.log(e)}}"
},
{
"names": [
"set-session-storage-item"
],
- "scriptlet": "function setSessionStorageItem(source,args){function logMessage(source,message){var forced=arguments.length>2&&void 0!==arguments[2]&&arguments[2];(forced||source.verbose)&&console.log(\"\".concat(source.name,\": \").concat(message))}var updatedArgs=args?[].concat(source).concat(args):[source];try{(function(source,key,value){if(void 0!==key){var validValue=function(source,value){if(!value)return null;var validValue,num;if(\"undefined\"===value)validValue=void 0;else if(\"false\"===value)validValue=!1;else if(\"true\"===value)validValue=!0;else if(\"null\"===value)validValue=null;else if(\"emptyArr\"===value)validValue=\"[]\";else if(\"emptyObj\"===value)validValue=\"{}\";else if(\"\"===value)validValue=\"\";else if(/^\\d+$/.test(value)){if(num=validValue=parseFloat(value),(Number.isNaN||window.isNaN)(num))return logMessage(source,\"Invalid storage item value: '\".concat(value,\"'\")),null;if(Math.abs(validValue)>32767)return logMessage(source,\"Invalid storage item value: '\".concat(value,\"'\")),null}else if(\"yes\"===value)validValue=\"yes\";else{if(\"no\"!==value)return null;validValue=\"no\"}return validValue}(source,value);null!==validValue?function(source,storage,key,value){try{storage.setItem(key,value)}catch(e){logMessage(source,\"Unable to set sessionStorage item due to: \".concat(e.message))}}(source,window.sessionStorage,key,validValue):logMessage(source,\"Invalid cookie value: '\".concat(validValue,\"'\"))}else logMessage(source,\"Item key should be specified.\")}).apply(this,updatedArgs)}catch(e){console.log(e)}}"
+ "scriptlet": "function setSessionStorageItem(source,args){function logMessage(source,message){var forced=arguments.length>2&&void 0!==arguments[2]&&arguments[2];(forced||source.verbose)&&console.log(\"\".concat(source.name,\": \").concat(message))}var updatedArgs=args?[].concat(source).concat(args):[source];try{(function(source,key,value){if(void 0!==key){var validValue;try{validValue=function(value){if(\"string\"!=typeof value)throw new Error(\"Invalid value\");var validValue,num;if(\"undefined\"===value)validValue=void 0;else if(\"false\"===value)validValue=!1;else if(\"true\"===value)validValue=!0;else if(\"null\"===value)validValue=null;else if(\"emptyArr\"===value)validValue=\"[]\";else if(\"emptyObj\"===value)validValue=\"{}\";else if(\"\"===value)validValue=\"\";else if(/^\\d+$/.test(value)){if(num=validValue=parseFloat(value),(Number.isNaN||window.isNaN)(num))throw new Error(\"Invalid value\");if(Math.abs(validValue)>32767)throw new Error(\"Invalid value\")}else if(\"yes\"===value)validValue=\"yes\";else{if(\"no\"!==value)throw new Error(\"Invalid value\");validValue=\"no\"}return validValue}(value)}catch(_unused){return void logMessage(source,\"Invalid storage item value: '\".concat(value,\"'\"))}!function(source,storage,key,value){try{storage.setItem(key,value)}catch(e){logMessage(source,\"Unable to set sessionStorage item due to: \".concat(e.message))}}(source,window.sessionStorage,key,validValue),function(source){if(!0===source.verbose){try{var log=console.log.bind(console),trace=console.trace.bind(console),prefix=source.ruleText||\"\";if(source.domainName){var ruleStartIndex,AG_SCRIPTLET_MARKER=\"#%#//\",UBO_SCRIPTLET_MARKER=\"##+js\";source.ruleText.indexOf(AG_SCRIPTLET_MARKER)>-1?ruleStartIndex=source.ruleText.indexOf(AG_SCRIPTLET_MARKER):source.ruleText.indexOf(UBO_SCRIPTLET_MARKER)>-1&&(ruleStartIndex=source.ruleText.indexOf(UBO_SCRIPTLET_MARKER));var rulePart=source.ruleText.slice(ruleStartIndex);prefix=\"\".concat(source.domainName).concat(rulePart)}log(\"\".concat(prefix,\" trace start\")),trace&&trace(),log(\"\".concat(prefix,\" trace end\"))}catch(e){}\"function\"==typeof window.__debug&&window.__debug(source)}}(source)}else logMessage(source,\"Item key should be specified.\")}).apply(this,updatedArgs)}catch(e){console.log(e)}}"
},
{
"names": [
@@ -404,13 +404,13 @@
"ubo-aost",
"abp-abort-on-stack-trace"
],
- "scriptlet": "function abortOnStackTrace(source,args){function randomId(){return Math.random().toString(36).substr(2,9)}function getPropertyInChain(base,chain){var pos=chain.indexOf(\".\");if(-1===pos)return{base:base,prop:chain};var prop=chain.slice(0,pos);if(null===base)return{base:base,prop:prop,chain:chain};var obj,nextBase=base[prop];return chain=chain.slice(pos+1),(base instanceof Object||\"object\"==typeof base)&&(obj=base,0===Object.keys(obj).length)||null===nextBase?{base:base,prop:prop,chain:chain}:void 0!==nextBase?getPropertyInChain(nextBase,chain):(Object.defineProperty(base,prop,{configurable:!0}),{base:base,prop:prop,chain:chain})}function matchStackTrace(stackMatch,stackTrace){if(!stackMatch||\"\"===stackMatch)return!0;if(function(stackMatch,stackTrace){var INLINE_SCRIPT_STRING=\"inlineScript\",INJECTED_SCRIPT_STRING=\"injectedScript\",INJECTED_SCRIPT_MARKER=\"\",isInlineScript=function(stackMatch){return stackMatch.indexOf(INLINE_SCRIPT_STRING)>-1},isInjectedScript=function(stackMatch){return stackMatch.indexOf(INJECTED_SCRIPT_STRING)>-1};if(!isInlineScript(stackMatch)&&!isInjectedScript(stackMatch))return!1;var documentURL=window.location.href,pos=documentURL.indexOf(\"#\");-1!==pos&&(documentURL=documentURL.slice(0,pos));var stackLines=stackTrace.split(\"\\n\").slice(2).map((function(line){return line.trim()})).map((function(line){var stack,getStackTraceURL=/(.*?@)?(\\S+)(:\\d+):\\d+\\)?$/.exec(line);if(getStackTraceURL){var stackURL=getStackTraceURL[2];if(startsWith(stackURL,\"(\")&&(stackURL=stackURL.slice(1)),startsWith(stackURL,INJECTED_SCRIPT_MARKER)){stackURL=INJECTED_SCRIPT_STRING;var stackFunction=void 0!==getStackTraceURL[1]?getStackTraceURL[1].slice(0,-1):line.slice(0,getStackTraceURL.index).trim();startsWith(stackFunction,\"at\")&&(stackFunction=stackFunction.slice(2).trim()),stack=\"\".concat(stackFunction,\" \").concat(stackURL).trim()}else stack=stackURL}else stack=line;return stack}));if(stackLines)for(var index=0;index0&&void 0!==arguments[0]?arguments[0]:\"\",DEFAULT_VALUE=\".?\",FORWARD_SLASH=\"/\";if(\"\"===input)return new RegExp(DEFAULT_VALUE);if(input[0]===FORWARD_SLASH&&input[input.length-1]===FORWARD_SLASH)return new RegExp(input.slice(1,-1));var escaped=input.replace(/[.*+?^${}()|[\\]\\\\]/g,\"\\\\$&\");return new RegExp(escaped)}(stackMatch),refinedStackTrace=stackTrace.split(\"\\n\").slice(2).map((function(line){return line.trim()})).join(\"\\n\");return Object.getOwnPropertyDescriptor(RegExp.prototype,\"test\").value.call(stackRegexp,refinedStackTrace)}function startsWith(str,prefix){return!!str&&0===str.indexOf(prefix)}var updatedArgs=args?[].concat(source).concat(args):[source];try{(function(source,property,stack){if(property&&stack){var rid=randomId(),abort=function(){throw function(source,message){if(!0===source.verbose){try{var log=console.log.bind(console),trace=console.trace.bind(console),prefix=source.ruleText||\"\";if(source.domainName){var ruleStartIndex,AG_SCRIPTLET_MARKER=\"#%#//\",UBO_SCRIPTLET_MARKER=\"##+js\";source.ruleText.indexOf(AG_SCRIPTLET_MARKER)>-1?ruleStartIndex=source.ruleText.indexOf(AG_SCRIPTLET_MARKER):source.ruleText.indexOf(UBO_SCRIPTLET_MARKER)>-1&&(ruleStartIndex=source.ruleText.indexOf(UBO_SCRIPTLET_MARKER));var rulePart=source.ruleText.slice(ruleStartIndex);prefix=\"\".concat(source.domainName).concat(rulePart)}var LOG_MARKER=\"log: \";message&&(-1===message.indexOf(LOG_MARKER)?log(\"\".concat(prefix,\" message:\\n\").concat(message)):log(message.slice(LOG_MARKER.length))),log(\"\".concat(prefix,\" trace start\")),trace&&trace(),log(\"\".concat(prefix,\" trace end\"))}catch(e){}\"function\"==typeof window.__debug&&window.__debug(source)}}(source),new ReferenceError(rid)};!function setChainPropAccess(owner,property){var chainInfo=getPropertyInChain(owner,property),base=chainInfo.base,prop=chainInfo.prop,chain=chainInfo.chain;if(chain)Object.defineProperty(owner,prop,{get:function(){return base},set:function(a){base=a,a instanceof Object&&setChainPropAccess(a,chain)}});else if(stack.match(/^(inlineScript|injectedScript)$/)||function(input){var isValid,FORWARD_SLASH=\"/\",str=function(str){return str.replace(/[.*+?^${}()|[\\]\\\\]/g,\"\\\\$&\")}(input);input[0]===FORWARD_SLASH&&input[input.length-1]===FORWARD_SLASH&&(str=input.slice(1,-1));try{isValid=new RegExp(str),isValid=!0}catch(e){isValid=!1}return isValid}(stack)){var descriptorWrapper=Object.assign({isAbortingSuspended:!1,isolateCallback:function(cb){this.isAbortingSuspended=!0;try{for(var _len=arguments.length,args=new Array(_len>1?_len-1:0),_key=1;_key<_len;_key++)args[_key-1]=arguments[_key];var result=cb.apply(void 0,args);return this.isAbortingSuspended=!1,result}catch(_unused){var rid=randomId();throw this.isAbortingSuspended=!1,new ReferenceError(rid)}}},{value:base[prop],get:function(){return!this.isAbortingSuspended&&this.isolateCallback(matchStackTrace,stack,(new Error).stack)&&abort(),this.value},set:function(newValue){!this.isAbortingSuspended&&this.isolateCallback(matchStackTrace,stack,(new Error).stack)&&abort(),this.value=newValue}});!function(object,property,descriptor){var currentDescriptor=Object.getOwnPropertyDescriptor(object,property);if(currentDescriptor&&!currentDescriptor.configurable)return!1;Object.defineProperty(object,property,descriptor)}(base,prop,{get:function(){return descriptorWrapper.get.call(descriptorWrapper)},set:function(newValue){descriptorWrapper.set.call(descriptorWrapper,newValue)}})}else!function(source,message){(arguments.length>2&&void 0!==arguments[2]&&arguments[2]||source.verbose)&&console.log(\"\".concat(source.name,\": \").concat(message))}(source,\"Invalid parameter: \".concat(stack))}(window,property),window.onerror=function(rid){var nativeOnError=window.onerror;return function(error){if(\"string\"==typeof error&&-1!==error.indexOf(rid))return!0;if(nativeOnError instanceof Function){for(var _len=arguments.length,args=new Array(_len>1?_len-1:0),_key=1;_key<_len;_key++)args[_key-1]=arguments[_key];return nativeOnError.apply(this,[error].concat(args))}return!1}}(rid).bind()}}).apply(this,updatedArgs)}catch(e){console.log(e)}}"
+ "scriptlet": "function abortOnStackTrace(source,args){function randomId(){return Math.random().toString(36).slice(2,9)}function getPropertyInChain(base,chain){var pos=chain.indexOf(\".\");if(-1===pos)return{base:base,prop:chain};var prop=chain.slice(0,pos);if(null===base)return{base:base,prop:prop,chain:chain};var obj,nextBase=base[prop];return chain=chain.slice(pos+1),(base instanceof Object||\"object\"==typeof base)&&(obj=base,0===Object.keys(obj).length&&!obj.prototype)||null===nextBase?{base:base,prop:prop,chain:chain}:void 0!==nextBase?getPropertyInChain(nextBase,chain):(Object.defineProperty(base,prop,{configurable:!0}),{base:base,prop:prop,chain:chain})}function matchStackTrace(stackMatch,stackTrace){if(!stackMatch||\"\"===stackMatch)return!0;if(function(stackMatch,stackTrace){var INLINE_SCRIPT_STRING=\"inlineScript\",INJECTED_SCRIPT_STRING=\"injectedScript\",INJECTED_SCRIPT_MARKER=\"\",isInlineScript=function(stackMatch){return stackMatch.indexOf(INLINE_SCRIPT_STRING)>-1},isInjectedScript=function(stackMatch){return stackMatch.indexOf(INJECTED_SCRIPT_STRING)>-1};if(!isInlineScript(stackMatch)&&!isInjectedScript(stackMatch))return!1;var documentURL=window.location.href,pos=documentURL.indexOf(\"#\");-1!==pos&&(documentURL=documentURL.slice(0,pos));var stackSteps=stackTrace.split(\"\\n\").slice(2).map((function(line){return line.trim()})),stackLines=stackSteps.map((function(line){var stack,getStackTraceURL=/(.*?@)?(\\S+)(:\\d+):\\d+\\)?$/.exec(line);if(getStackTraceURL){var stackURL=getStackTraceURL[2];if(startsWith(stackURL,\"(\")&&(stackURL=stackURL.slice(1)),startsWith(stackURL,INJECTED_SCRIPT_MARKER)){stackURL=INJECTED_SCRIPT_STRING;var stackFunction=void 0!==getStackTraceURL[1]?getStackTraceURL[1].slice(0,-1):line.slice(0,getStackTraceURL.index).trim();startsWith(stackFunction,\"at\")&&(stackFunction=stackFunction.slice(2).trim()),stack=\"\".concat(stackFunction,\" \").concat(stackURL).trim()}else stack=stackURL}else stack=line;return stack}));if(stackLines)for(var index=0;index0&&void 0!==arguments[0]?arguments[0]:\"\",DEFAULT_VALUE=\".?\",FORWARD_SLASH=\"/\";if(\"\"===input)return new RegExp(DEFAULT_VALUE);if(input[0]===FORWARD_SLASH&&input[input.length-1]===FORWARD_SLASH)return new RegExp(input.slice(1,-1));var escaped=input.replace(/[.*+?^${}()|[\\]\\\\]/g,\"\\\\$&\");return new RegExp(escaped)}(stackMatch),refinedStackTrace=stackTrace.split(\"\\n\").slice(2).map((function(line){return line.trim()})).join(\"\\n\");return Object.getOwnPropertyDescriptor(RegExp.prototype,\"test\").value.call(stackRegexp,refinedStackTrace)}function startsWith(str,prefix){return!!str&&0===str.indexOf(prefix)}var updatedArgs=args?[].concat(source).concat(args):[source];try{(function(source,property,stack){if(property&&stack){var rid=randomId(),abort=function(){throw function(source){if(!0===source.verbose){try{var log=console.log.bind(console),trace=console.trace.bind(console),prefix=source.ruleText||\"\";if(source.domainName){var ruleStartIndex,AG_SCRIPTLET_MARKER=\"#%#//\",UBO_SCRIPTLET_MARKER=\"##+js\";source.ruleText.indexOf(AG_SCRIPTLET_MARKER)>-1?ruleStartIndex=source.ruleText.indexOf(AG_SCRIPTLET_MARKER):source.ruleText.indexOf(UBO_SCRIPTLET_MARKER)>-1&&(ruleStartIndex=source.ruleText.indexOf(UBO_SCRIPTLET_MARKER));var rulePart=source.ruleText.slice(ruleStartIndex);prefix=\"\".concat(source.domainName).concat(rulePart)}log(\"\".concat(prefix,\" trace start\")),trace&&trace(),log(\"\".concat(prefix,\" trace end\"))}catch(e){}\"function\"==typeof window.__debug&&window.__debug(source)}}(source),new ReferenceError(rid)};!function setChainPropAccess(owner,property){var chainInfo=getPropertyInChain(owner,property),base=chainInfo.base,prop=chainInfo.prop,chain=chainInfo.chain;if(chain)Object.defineProperty(owner,prop,{get:function(){return base},set:function(a){base=a,a instanceof Object&&setChainPropAccess(a,chain)}});else if(stack.match(/^(inlineScript|injectedScript)$/)||function(input){var isValid,FORWARD_SLASH=\"/\",str=function(str){return str.replace(/[.*+?^${}()|[\\]\\\\]/g,\"\\\\$&\")}(input);input[0]===FORWARD_SLASH&&input[input.length-1]===FORWARD_SLASH&&(str=input.slice(1,-1));try{isValid=new RegExp(str),isValid=!0}catch(e){isValid=!1}return isValid}(stack)){var descriptorWrapper=Object.assign({isAbortingSuspended:!1,isolateCallback:function(cb){this.isAbortingSuspended=!0;try{for(var _len=arguments.length,args=new Array(_len>1?_len-1:0),_key=1;_key<_len;_key++)args[_key-1]=arguments[_key];var result=cb.apply(void 0,args);return this.isAbortingSuspended=!1,result}catch(_unused){var rid=randomId();throw this.isAbortingSuspended=!1,new ReferenceError(rid)}}},{value:base[prop],get:function(){return!this.isAbortingSuspended&&this.isolateCallback(matchStackTrace,stack,(new Error).stack)&&abort(),this.value},set:function(newValue){!this.isAbortingSuspended&&this.isolateCallback(matchStackTrace,stack,(new Error).stack)&&abort(),this.value=newValue}});!function(object,property,descriptor){var currentDescriptor=Object.getOwnPropertyDescriptor(object,property);if(currentDescriptor&&!currentDescriptor.configurable)return!1;Object.defineProperty(object,property,descriptor)}(base,prop,{get:function(){return descriptorWrapper.get.call(descriptorWrapper)},set:function(newValue){descriptorWrapper.set.call(descriptorWrapper,newValue)}})}else!function(source,message){(arguments.length>2&&void 0!==arguments[2]&&arguments[2]||source.verbose)&&console.log(\"\".concat(source.name,\": \").concat(message))}(source,\"Invalid parameter: \".concat(stack))}(window,property),window.onerror=function(rid){var nativeOnError=window.onerror;return function(error){if(\"string\"==typeof error&&-1!==error.indexOf(rid))return!0;if(nativeOnError instanceof Function){for(var _len=arguments.length,args=new Array(_len>1?_len-1:0),_key=1;_key<_len;_key++)args[_key-1]=arguments[_key];return nativeOnError.apply(this,[error].concat(args))}return!1}}(rid).bind()}}).apply(this,updatedArgs)}catch(e){console.log(e)}}"
},
{
"names": [
"log-on-stack-trace"
],
- "scriptlet": "function logOnStacktrace(source,args){function getPropertyInChain(base,chain){var pos=chain.indexOf(\".\");if(-1===pos)return{base:base,prop:chain};var prop=chain.slice(0,pos);if(null===base)return{base:base,prop:prop,chain:chain};var obj,nextBase=base[prop];return chain=chain.slice(pos+1),(base instanceof Object||\"object\"==typeof base)&&(obj=base,0===Object.keys(obj).length)||null===nextBase?{base:base,prop:prop,chain:chain}:void 0!==nextBase?getPropertyInChain(nextBase,chain):(Object.defineProperty(base,prop,{configurable:!0}),{base:base,prop:prop,chain:chain})}function hit(source,message){if(!0===source.verbose){try{var log=console.log.bind(console),trace=console.trace.bind(console),prefix=source.ruleText||\"\";if(source.domainName){var ruleStartIndex;source.ruleText.indexOf(\"#%#//\")>-1?ruleStartIndex=source.ruleText.indexOf(\"#%#//\"):source.ruleText.indexOf(\"##+js\")>-1&&(ruleStartIndex=source.ruleText.indexOf(\"##+js\"));var rulePart=source.ruleText.slice(ruleStartIndex);prefix=\"\".concat(source.domainName).concat(rulePart)}message&&(-1===message.indexOf(\"log: \")?log(\"\".concat(prefix,\" message:\\n\").concat(message)):log(message.slice(\"log: \".length))),log(\"\".concat(prefix,\" trace start\")),trace&&trace(),log(\"\".concat(prefix,\" trace end\"))}catch(e){}\"function\"==typeof window.__debug&&window.__debug(source)}}function logMessage(source,message){var forced=arguments.length>2&&void 0!==arguments[2]&&arguments[2];(forced||source.verbose)&&console.log(\"\".concat(source.name,\": \").concat(message))}var updatedArgs=args?[].concat(source).concat(args):[source];try{(function(source,property){if(property){var refineStackTrace=function(stackString){var logInfoArray=stackString.split(\"\\n\").slice(2).map((function(line){return line.replace(/ {4}at /,\"\")})).map((function(line){var funcName,funcFullPath,reg=/\\(([^\\)]+)\\)/,regFirefox=/(.*?@)(\\S+)(:\\d+):\\d+\\)?$/;return line.match(reg)?(funcName=line.split(\" \").slice(0,-1).join(\" \"),funcFullPath=line.match(reg)[1]):line.match(regFirefox)?(funcName=line.split(\"@\").slice(0,-1).join(\" \"),funcFullPath=line.match(regFirefox)[2]):(funcName=\"function name is not available\",funcFullPath=line),[funcName,funcFullPath]})),logInfoObject={};return logInfoArray.forEach((function(pair){logInfoObject[pair[0]]=pair[1]})),logInfoObject};!function setChainPropAccess(owner,property){var chainInfo=getPropertyInChain(owner,property),base=chainInfo.base,prop=chainInfo.prop,chain=chainInfo.chain;if(chain)Object.defineProperty(owner,prop,{get:function(){return base},set:function(a){base=a,a instanceof Object&&setChainPropAccess(a,chain)}});else{var value=base[prop];!function(object,property,descriptor){var currentDescriptor=Object.getOwnPropertyDescriptor(object,property);if(currentDescriptor&&!currentDescriptor.configurable)return!1;Object.defineProperty(object,property,descriptor)}(base,prop,{get:function(){return hit(source),logMessage(source,\"Get \".concat(prop),!0),console.table(refineStackTrace((new Error).stack)),value},set:function(newValue){hit(source),logMessage(source,\"Set \".concat(prop),!0),console.table(refineStackTrace((new Error).stack)),value=newValue}})}}(window,property)}}).apply(this,updatedArgs)}catch(e){console.log(e)}}"
+ "scriptlet": "function logOnStacktrace(source,args){function getPropertyInChain(base,chain){var pos=chain.indexOf(\".\");if(-1===pos)return{base:base,prop:chain};var prop=chain.slice(0,pos);if(null===base)return{base:base,prop:prop,chain:chain};var obj,nextBase=base[prop];return chain=chain.slice(pos+1),(base instanceof Object||\"object\"==typeof base)&&(obj=base,0===Object.keys(obj).length&&!obj.prototype)||null===nextBase?{base:base,prop:prop,chain:chain}:void 0!==nextBase?getPropertyInChain(nextBase,chain):(Object.defineProperty(base,prop,{configurable:!0}),{base:base,prop:prop,chain:chain})}function hit(source){if(!0===source.verbose){try{var log=console.log.bind(console),trace=console.trace.bind(console),prefix=source.ruleText||\"\";if(source.domainName){var ruleStartIndex;source.ruleText.indexOf(\"#%#//\")>-1?ruleStartIndex=source.ruleText.indexOf(\"#%#//\"):source.ruleText.indexOf(\"##+js\")>-1&&(ruleStartIndex=source.ruleText.indexOf(\"##+js\"));var rulePart=source.ruleText.slice(ruleStartIndex);prefix=\"\".concat(source.domainName).concat(rulePart)}log(\"\".concat(prefix,\" trace start\")),trace&&trace(),log(\"\".concat(prefix,\" trace end\"))}catch(e){}\"function\"==typeof window.__debug&&window.__debug(source)}}function logMessage(source,message){var forced=arguments.length>2&&void 0!==arguments[2]&&arguments[2];(forced||source.verbose)&&console.log(\"\".concat(source.name,\": \").concat(message))}var updatedArgs=args?[].concat(source).concat(args):[source];try{(function(source,property){if(property){var refineStackTrace=function(stackString){var logInfoArray=stackString.split(\"\\n\").slice(2).map((function(line){return line.replace(/ {4}at /,\"\")})).map((function(line){var funcName,funcFullPath,reg=/\\(([^\\)]+)\\)/,regFirefox=/(.*?@)(\\S+)(:\\d+):\\d+\\)?$/;return line.match(reg)?(funcName=line.split(\" \").slice(0,-1).join(\" \"),funcFullPath=line.match(reg)[1]):line.match(regFirefox)?(funcName=line.split(\"@\").slice(0,-1).join(\" \"),funcFullPath=line.match(regFirefox)[2]):(funcName=\"function name is not available\",funcFullPath=line),[funcName,funcFullPath]})),logInfoObject={};return logInfoArray.forEach((function(pair){logInfoObject[pair[0]]=pair[1]})),logInfoObject};!function setChainPropAccess(owner,property){var chainInfo=getPropertyInChain(owner,property),base=chainInfo.base,prop=chainInfo.prop,chain=chainInfo.chain;if(chain)Object.defineProperty(owner,prop,{get:function(){return base},set:function(a){base=a,a instanceof Object&&setChainPropAccess(a,chain)}});else{var value=base[prop];!function(object,property,descriptor){var currentDescriptor=Object.getOwnPropertyDescriptor(object,property);if(currentDescriptor&&!currentDescriptor.configurable)return!1;Object.defineProperty(object,property,descriptor)}(base,prop,{get:function(){return hit(source),logMessage(source,\"Get \".concat(prop),!0),console.table(refineStackTrace((new Error).stack)),value},set:function(newValue){hit(source),logMessage(source,\"Set \".concat(prop),!0),console.table(refineStackTrace((new Error).stack)),value=newValue}})}}(window,property)}}).apply(this,updatedArgs)}catch(e){console.log(e)}}"
},
{
"names": [
@@ -419,7 +419,7 @@
"ubo-no-xhr-if.js",
"ubo-no-xhr-if"
],
- "scriptlet": "function preventXHR(source,args){function hit(source,message){if(!0===source.verbose){try{var log=console.log.bind(console),trace=console.trace.bind(console),prefix=source.ruleText||\"\";if(source.domainName){var ruleStartIndex;source.ruleText.indexOf(\"#%#//\")>-1?ruleStartIndex=source.ruleText.indexOf(\"#%#//\"):source.ruleText.indexOf(\"##+js\")>-1&&(ruleStartIndex=source.ruleText.indexOf(\"##+js\"));var rulePart=source.ruleText.slice(ruleStartIndex);prefix=\"\".concat(source.domainName).concat(rulePart)}message&&(-1===message.indexOf(\"log: \")?log(\"\".concat(prefix,\" message:\\n\").concat(message)):log(message.slice(\"log: \".length))),log(\"\".concat(prefix,\" trace start\")),trace&&trace(),log(\"\".concat(prefix,\" trace end\"))}catch(e){}\"function\"==typeof window.__debug&&window.__debug(source)}}function logMessage(source,message){var forced=arguments.length>2&&void 0!==arguments[2]&&arguments[2];(forced||source.verbose)&&console.log(\"\".concat(source.name,\": \").concat(message))}function objectToString(obj){return function(obj){return 0===Object.keys(obj).length}(obj)?\"{}\":(object=obj,keys=Object.keys(object),entries=[],keys.forEach((function(key){return entries.push([key,object[key]])})),entries).map((function(pair){var key=pair[0],value=pair[1],recordValueStr=value;return value instanceof Object&&(recordValueStr=\"{ \".concat(objectToString(value),\" }\")),\"\".concat(key,':\"').concat(recordValueStr,'\"')})).join(\" \");var object,keys,entries}function getNumberFromString(rawString){var num,parsedDelay=parseInt(rawString,10);return num=parsedDelay,(Number.isNaN||window.isNaN)(num)?null:parsedDelay}function nativeIsFinite(num){return(Number.isFinite||window.isFinite)(num)}var updatedArgs=args?[].concat(source).concat(args):[source];try{(function(source,propsToMatch,customResponseText){if(\"undefined\"!=typeof Proxy){var responseUrl,shouldPrevent=!1,response=\"\",responseText=\"\",openHandler={apply:function(target,thisArg,args){var xhrData={method:args[0],url:args[1]};return responseUrl=xhrData.url,void 0===propsToMatch?(logMessage(source,\"xhr( \".concat(objectToString(xhrData),\" )\"),!0),hit(source)):shouldPrevent=function(source,propsToMatch,requestData){if(\"\"===propsToMatch||\"*\"===propsToMatch)return!0;var isMatched,propsToMatchStr,PROPS_DIVIDER,PAIRS_MARKER,LEGAL_MATCH_PROPS,propsObj,data,parsedData=(propsToMatchStr=propsToMatch,PROPS_DIVIDER=\" \",PAIRS_MARKER=\":\",LEGAL_MATCH_PROPS=getRequestProps(),propsObj={},propsToMatchStr.split(PROPS_DIVIDER).forEach((function(prop){var dividerInd=prop.indexOf(PAIRS_MARKER),key=prop.slice(0,dividerInd);if(-1!==LEGAL_MATCH_PROPS.indexOf(key)){var value=prop.slice(dividerInd+1);propsObj[key]=value}else propsObj.url=prop})),propsObj);if(data=parsedData,Object.values(data).every((function(value){return function(input){var isValid,FORWARD_SLASH=\"/\",str=function(str){return str.replace(/[.*+?^${}()|[\\]\\\\]/g,\"\\\\$&\")}(input);input[0]===FORWARD_SLASH&&input[input.length-1]===FORWARD_SLASH&&(str=input.slice(1,-1));try{isValid=new RegExp(str),isValid=!0}catch(e){isValid=!1}return isValid}(value)}))){var matchData=function(data){var matchData={};return Object.keys(data).forEach((function(key){matchData[key]=function(){var input=arguments.length>0&&void 0!==arguments[0]?arguments[0]:\"\",FORWARD_SLASH=\"/\";if(\"\"===input)return new RegExp(\".?\");if(input[0]===FORWARD_SLASH&&input[input.length-1]===FORWARD_SLASH)return new RegExp(input.slice(1,-1));var escaped=input.replace(/[.*+?^${}()|[\\]\\\\]/g,\"\\\\$&\");return new RegExp(escaped)}(data[key])})),matchData}(parsedData);isMatched=Object.keys(matchData).every((function(matchKey){var matchValue=matchData[matchKey];return Object.prototype.hasOwnProperty.call(requestData,matchKey)&&matchValue.test(requestData[matchKey])}))}else logMessage(source,\"Invalid parameter: \".concat(propsToMatch)),isMatched=!1;return isMatched}(source,propsToMatch,xhrData),Reflect.apply(target,thisArg,args)}},sendHandler={apply:function(target,thisArg,args){if(!shouldPrevent)return Reflect.apply(target,thisArg,args);if(\"blob\"===thisArg.responseType&&(response=new Blob),\"arraybuffer\"===thisArg.responseType&&(response=new ArrayBuffer),customResponseText){var randomText=function(customResponseText){var customResponse=customResponseText;if(\"true\"===customResponse)return Math.random().toString(36).slice(-10);if(customResponse=customResponse.replace(\"length:\",\"\"),!/^\\d+-\\d+$/.test(customResponse))return null;var min,max,rangeMin=getNumberFromString(customResponse.split(\"-\")[0]),rangeMax=getNumberFromString(customResponse.split(\"-\")[1]);if(!nativeIsFinite(rangeMin)||!nativeIsFinite(rangeMax))return null;if(rangeMin>rangeMax){var temp=rangeMin;rangeMin=rangeMax,rangeMax=temp}return rangeMax>5e5?null:(customResponse=function(length){for(var result=\"\",characters=\"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789!@#$%^&*()_+=~\",charactersLength=characters.length,i=0;i-1?ruleStartIndex=source.ruleText.indexOf(\"#%#//\"):source.ruleText.indexOf(\"##+js\")>-1&&(ruleStartIndex=source.ruleText.indexOf(\"##+js\"));var rulePart=source.ruleText.slice(ruleStartIndex);prefix=\"\".concat(source.domainName).concat(rulePart)}log(\"\".concat(prefix,\" trace start\")),trace&&trace(),log(\"\".concat(prefix,\" trace end\"))}catch(e){}\"function\"==typeof window.__debug&&window.__debug(source)}}function logMessage(source,message){var forced=arguments.length>2&&void 0!==arguments[2]&&arguments[2];(forced||source.verbose)&&console.log(\"\".concat(source.name,\": \").concat(message))}function objectToString(obj){return function(obj){return 0===Object.keys(obj).length&&!obj.prototype}(obj)?\"{}\":(object=obj,keys=Object.keys(object),entries=[],keys.forEach((function(key){return entries.push([key,object[key]])})),entries).map((function(pair){var key=pair[0],value=pair[1],recordValueStr=value;return value instanceof Object&&(recordValueStr=\"{ \".concat(objectToString(value),\" }\")),\"\".concat(key,':\"').concat(recordValueStr,'\"')})).join(\" \");var object,keys,entries}function getNumberFromString(rawString){var num,parsedDelay=parseInt(rawString,10);return num=parsedDelay,(Number.isNaN||window.isNaN)(num)?null:parsedDelay}function nativeIsFinite(num){return(Number.isFinite||window.isFinite)(num)}var updatedArgs=args?[].concat(source).concat(args):[source];try{(function(source,propsToMatch,customResponseText){if(\"undefined\"!=typeof Proxy){var responseUrl,shouldPrevent=!1,response=\"\",responseText=\"\",openHandler={apply:function(target,thisArg,args){var xhrData={method:args[0],url:args[1]};return responseUrl=xhrData.url,void 0===propsToMatch?(logMessage(source,\"xhr( \".concat(objectToString(xhrData),\" )\"),!0),hit(source)):shouldPrevent=function(source,propsToMatch,requestData){if(\"\"===propsToMatch||\"*\"===propsToMatch)return!0;var isMatched,PROPS_DIVIDER,PAIRS_MARKER,LEGAL_MATCH_PROPS,propsObj,data,parsedData=(PROPS_DIVIDER=\" \",PAIRS_MARKER=\":\",LEGAL_MATCH_PROPS=[\"url\",\"method\",\"headers\",\"body\",\"mode\",\"credentials\",\"cache\",\"redirect\",\"referrer\",\"referrerPolicy\",\"integrity\",\"keepalive\",\"signal\"],propsObj={},propsToMatch.split(PROPS_DIVIDER).forEach((function(prop){var dividerInd=prop.indexOf(PAIRS_MARKER),key=prop.slice(0,dividerInd);if(-1!==LEGAL_MATCH_PROPS.indexOf(key)){var value=prop.slice(dividerInd+1);propsObj[key]=value}else propsObj.url=prop})),propsObj);if(data=parsedData,Object.values(data).every((function(value){return function(input){var isValid,FORWARD_SLASH=\"/\",str=function(str){return str.replace(/[.*+?^${}()|[\\]\\\\]/g,\"\\\\$&\")}(input);input[0]===FORWARD_SLASH&&input[input.length-1]===FORWARD_SLASH&&(str=input.slice(1,-1));try{isValid=new RegExp(str),isValid=!0}catch(e){isValid=!1}return isValid}(value)}))){var matchData=function(data){var matchData={};return Object.keys(data).forEach((function(key){matchData[key]=function(){var input=arguments.length>0&&void 0!==arguments[0]?arguments[0]:\"\",FORWARD_SLASH=\"/\";if(\"\"===input)return new RegExp(\".?\");if(input[0]===FORWARD_SLASH&&input[input.length-1]===FORWARD_SLASH)return new RegExp(input.slice(1,-1));var escaped=input.replace(/[.*+?^${}()|[\\]\\\\]/g,\"\\\\$&\");return new RegExp(escaped)}(data[key])})),matchData}(parsedData);isMatched=Object.keys(matchData).every((function(matchKey){var matchValue=matchData[matchKey];return Object.prototype.hasOwnProperty.call(requestData,matchKey)&&matchValue.test(requestData[matchKey])}))}else logMessage(source,\"Invalid parameter: \".concat(propsToMatch)),isMatched=!1;return isMatched}(source,propsToMatch,xhrData),Reflect.apply(target,thisArg,args)}},sendHandler={apply:function(target,thisArg,args){if(!shouldPrevent)return Reflect.apply(target,thisArg,args);if(\"blob\"===thisArg.responseType&&(response=new Blob),\"arraybuffer\"===thisArg.responseType&&(response=new ArrayBuffer),customResponseText){var randomText=function(customResponseText){var customResponse=customResponseText;if(\"true\"===customResponse)return Math.random().toString(36).slice(-10);if(customResponse=customResponse.replace(\"length:\",\"\"),!/^\\d+-\\d+$/.test(customResponse))return null;var min,max,rangeMin=getNumberFromString(customResponse.split(\"-\")[0]),rangeMax=getNumberFromString(customResponse.split(\"-\")[1]);if(!nativeIsFinite(rangeMin)||!nativeIsFinite(rangeMax))return null;if(rangeMin>rangeMax){var temp=rangeMin;rangeMin=rangeMax,rangeMax=temp}return rangeMax>5e5?null:function(length){for(var result=\"\",characters=\"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789!@#$%^&*()_+=~\",charactersLength=characters.length,i=0;i-1?ruleStartIndex=source.ruleText.indexOf(\"#%#//\"):source.ruleText.indexOf(\"##+js\")>-1&&(ruleStartIndex=source.ruleText.indexOf(\"##+js\"));var rulePart=source.ruleText.slice(ruleStartIndex);prefix=\"\".concat(source.domainName).concat(rulePart)}message&&(-1===message.indexOf(\"log: \")?log(\"\".concat(prefix,\" message:\\n\").concat(message)):log(message.slice(\"log: \".length))),log(\"\".concat(prefix,\" trace start\")),trace&&trace(),log(\"\".concat(prefix,\" trace end\"))}catch(e){}\"function\"==typeof window.__debug&&window.__debug(source)}}function toRegExp(){var input=arguments.length>0&&void 0!==arguments[0]?arguments[0]:\"\",DEFAULT_VALUE=\".?\",FORWARD_SLASH=\"/\";if(\"\"===input)return new RegExp(DEFAULT_VALUE);if(input[0]===FORWARD_SLASH&&input[input.length-1]===FORWARD_SLASH)return new RegExp(input.slice(1,-1));var escaped=input.replace(/[.*+?^${}()|[\\]\\\\]/g,\"\\\\$&\");return new RegExp(escaped)}function logMessage(source,message){var forced=arguments.length>2&&void 0!==arguments[2]&&arguments[2];(forced||source.verbose)&&console.log(\"\".concat(source.name,\": \").concat(message))}var updatedArgs=args?[].concat(source).concat(args):[source];try{(function(source){var path=arguments.length>1&&void 0!==arguments[1]?arguments[1]:\"\";if(\"function\"!=typeof window.close){logMessage(source,\"window.close() is not a function so 'close-window' scriptlet is unavailable\")}var closeImmediately=function(){try{hit(source),window.close()}catch(e){logMessage(source,e)}},closeByExtension=function(){var extCall=function(){dispatchEvent(new Event(\"adguard:scriptlet-close-window\"))};window.addEventListener(\"adguard:subscribed-to-close-window\",extCall,{once:!0}),setTimeout((function(){window.removeEventListener(\"adguard:subscribed-to-close-window\",extCall,{once:!0})}),5e3)};(function(){if(\"\"===path)return!0;var pathRegexp=toRegExp(path),currentPath=\"\".concat(window.location.pathname).concat(window.location.search);return pathRegexp.test(currentPath)})()&&(closeImmediately(),navigator.userAgent.indexOf(\"Chrome\")>-1&&closeByExtension())}).apply(this,updatedArgs)}catch(e){console.log(e)}}"
+ "scriptlet": "function forceWindowClose(source,args){function hit(source){if(!0===source.verbose){try{var log=console.log.bind(console),trace=console.trace.bind(console),prefix=source.ruleText||\"\";if(source.domainName){var ruleStartIndex;source.ruleText.indexOf(\"#%#//\")>-1?ruleStartIndex=source.ruleText.indexOf(\"#%#//\"):source.ruleText.indexOf(\"##+js\")>-1&&(ruleStartIndex=source.ruleText.indexOf(\"##+js\"));var rulePart=source.ruleText.slice(ruleStartIndex);prefix=\"\".concat(source.domainName).concat(rulePart)}log(\"\".concat(prefix,\" trace start\")),trace&&trace(),log(\"\".concat(prefix,\" trace end\"))}catch(e){}\"function\"==typeof window.__debug&&window.__debug(source)}}function toRegExp(){var input=arguments.length>0&&void 0!==arguments[0]?arguments[0]:\"\",DEFAULT_VALUE=\".?\",FORWARD_SLASH=\"/\";if(\"\"===input)return new RegExp(DEFAULT_VALUE);if(input[0]===FORWARD_SLASH&&input[input.length-1]===FORWARD_SLASH)return new RegExp(input.slice(1,-1));var escaped=input.replace(/[.*+?^${}()|[\\]\\\\]/g,\"\\\\$&\");return new RegExp(escaped)}function logMessage(source,message){var forced=arguments.length>2&&void 0!==arguments[2]&&arguments[2];(forced||source.verbose)&&console.log(\"\".concat(source.name,\": \").concat(message))}var updatedArgs=args?[].concat(source).concat(args):[source];try{(function(source){var path=arguments.length>1&&void 0!==arguments[1]?arguments[1]:\"\";if(\"function\"==typeof window.close){var closeImmediately=function(){try{hit(source),window.close()}catch(e){logMessage(source,e)}},closeByExtension=function(){var extCall=function(){dispatchEvent(new Event(\"adguard:scriptlet-close-window\"))};window.addEventListener(\"adguard:subscribed-to-close-window\",extCall,{once:!0}),setTimeout((function(){window.removeEventListener(\"adguard:subscribed-to-close-window\",extCall,{once:!0})}),5e3)};(function(){if(\"\"===path)return!0;var pathRegexp=toRegExp(path),currentPath=\"\".concat(window.location.pathname).concat(window.location.search);return pathRegexp.test(currentPath)})()&&(closeImmediately(),navigator.userAgent.indexOf(\"Chrome\")>-1&&closeByExtension())}else{logMessage(source,\"window.close() is not a function so 'close-window' scriptlet is unavailable\")}}).apply(this,updatedArgs)}catch(e){console.log(e)}}"
},
{
"names": [
@@ -438,25 +438,25 @@
"ubo-refresh-defuser.js",
"ubo-refresh-defuser"
],
- "scriptlet": "function preventRefresh(source,args){function getNumberFromString(rawString){var num,parsedDelay=parseInt(rawString,10);return num=parsedDelay,(Number.isNaN||window.isNaN)(num)?null:parsedDelay}var updatedArgs=args?[].concat(source).concat(args):[source];try{(function(source,delaySec){var getMetaElements=function(){var metaNodes=[];try{metaNodes=document.querySelectorAll('meta[http-equiv=\"refresh\" i][content]')}catch(e){try{metaNodes=document.querySelectorAll('meta[http-equiv=\"refresh\"][content]')}catch(e){!function(source,message){(arguments.length>2&&void 0!==arguments[2]&&arguments[2]||source.verbose)&&console.log(\"\".concat(source.name,\": \").concat(message))}(source,e)}}return Array.from(metaNodes)},stop=function(){var metaElements=getMetaElements();if(0!==metaElements.length){var secondsToRun=getNumberFromString(delaySec);null===secondsToRun&&(secondsToRun=function(metaElements){var delays=metaElements.map((function(meta){var contentString=meta.getAttribute(\"content\");if(0===contentString.length)return null;var limiterIndex=contentString.indexOf(\";\");return getNumberFromString(-1!==limiterIndex?contentString.substring(0,limiterIndex):contentString)})).filter((function(delay){return null!==delay}));return delays.length?delays.reduce((function(a,b){return Math.min(a,b)})):null}(metaElements)),null!==secondsToRun&&setTimeout((function(){window.stop(),function(source,message){if(!0===source.verbose){try{var log=console.log.bind(console),trace=console.trace.bind(console),prefix=source.ruleText||\"\";if(source.domainName){var ruleStartIndex,AG_SCRIPTLET_MARKER=\"#%#//\",UBO_SCRIPTLET_MARKER=\"##+js\";source.ruleText.indexOf(AG_SCRIPTLET_MARKER)>-1?ruleStartIndex=source.ruleText.indexOf(AG_SCRIPTLET_MARKER):source.ruleText.indexOf(UBO_SCRIPTLET_MARKER)>-1&&(ruleStartIndex=source.ruleText.indexOf(UBO_SCRIPTLET_MARKER));var rulePart=source.ruleText.slice(ruleStartIndex);prefix=\"\".concat(source.domainName).concat(rulePart)}var LOG_MARKER=\"log: \";message&&(-1===message.indexOf(LOG_MARKER)?log(\"\".concat(prefix,\" message:\\n\").concat(message)):log(message.slice(LOG_MARKER.length))),log(\"\".concat(prefix,\" trace start\")),trace&&trace(),log(\"\".concat(prefix,\" trace end\"))}catch(e){}\"function\"==typeof window.__debug&&window.__debug(source)}}(source)}),1e3*secondsToRun)}};\"loading\"===document.readyState?document.addEventListener(\"DOMContentLoaded\",stop,{once:!0}):stop()}).apply(this,updatedArgs)}catch(e){console.log(e)}}"
+ "scriptlet": "function preventRefresh(source,args){function getNumberFromString(rawString){var num,parsedDelay=parseInt(rawString,10);return num=parsedDelay,(Number.isNaN||window.isNaN)(num)?null:parsedDelay}var updatedArgs=args?[].concat(source).concat(args):[source];try{(function(source,delaySec){var getMetaElements=function(){var metaNodes=[];try{metaNodes=document.querySelectorAll('meta[http-equiv=\"refresh\" i][content]')}catch(e){try{metaNodes=document.querySelectorAll('meta[http-equiv=\"refresh\"][content]')}catch(e){!function(source,message){(arguments.length>2&&void 0!==arguments[2]&&arguments[2]||source.verbose)&&console.log(\"\".concat(source.name,\": \").concat(message))}(source,e)}}return Array.from(metaNodes)},stop=function(){var metaElements=getMetaElements();if(0!==metaElements.length){var secondsToRun=getNumberFromString(delaySec);null===secondsToRun&&(secondsToRun=function(metaElements){var delays=metaElements.map((function(meta){var contentString=meta.getAttribute(\"content\");if(0===contentString.length)return null;var limiterIndex=contentString.indexOf(\";\");return getNumberFromString(-1!==limiterIndex?contentString.substring(0,limiterIndex):contentString)})).filter((function(delay){return null!==delay}));return delays.length?delays.reduce((function(a,b){return Math.min(a,b)})):null}(metaElements)),null!==secondsToRun&&setTimeout((function(){window.stop(),function(source){if(!0===source.verbose){try{var log=console.log.bind(console),trace=console.trace.bind(console),prefix=source.ruleText||\"\";if(source.domainName){var ruleStartIndex,AG_SCRIPTLET_MARKER=\"#%#//\",UBO_SCRIPTLET_MARKER=\"##+js\";source.ruleText.indexOf(AG_SCRIPTLET_MARKER)>-1?ruleStartIndex=source.ruleText.indexOf(AG_SCRIPTLET_MARKER):source.ruleText.indexOf(UBO_SCRIPTLET_MARKER)>-1&&(ruleStartIndex=source.ruleText.indexOf(UBO_SCRIPTLET_MARKER));var rulePart=source.ruleText.slice(ruleStartIndex);prefix=\"\".concat(source.domainName).concat(rulePart)}log(\"\".concat(prefix,\" trace start\")),trace&&trace(),log(\"\".concat(prefix,\" trace end\"))}catch(e){}\"function\"==typeof window.__debug&&window.__debug(source)}}(source)}),1e3*secondsToRun)}};\"loading\"===document.readyState?document.addEventListener(\"DOMContentLoaded\",stop,{once:!0}):stop()}).apply(this,updatedArgs)}catch(e){console.log(e)}}"
},
{
"names": [
"prevent-element-src-loading"
],
- "scriptlet": "function preventElementSrcLoading(source,args){function hit(source,message){if(!0===source.verbose){try{var log=console.log.bind(console),trace=console.trace.bind(console),prefix=source.ruleText||\"\";if(source.domainName){var ruleStartIndex;source.ruleText.indexOf(\"#%#//\")>-1?ruleStartIndex=source.ruleText.indexOf(\"#%#//\"):source.ruleText.indexOf(\"##+js\")>-1&&(ruleStartIndex=source.ruleText.indexOf(\"##+js\"));var rulePart=source.ruleText.slice(ruleStartIndex);prefix=\"\".concat(source.domainName).concat(rulePart)}message&&(-1===message.indexOf(\"log: \")?log(\"\".concat(prefix,\" message:\\n\").concat(message)):log(message.slice(\"log: \".length))),log(\"\".concat(prefix,\" trace start\")),trace&&trace(),log(\"\".concat(prefix,\" trace end\"))}catch(e){}\"function\"==typeof window.__debug&&window.__debug(source)}}function safeGetDescriptor(obj,prop){var descriptor=Object.getOwnPropertyDescriptor(obj,prop);return descriptor&&descriptor.configurable?descriptor:null}function noopFunc(){}var updatedArgs=args?[].concat(source).concat(args):[source];try{(function(source,tagName,match){if(\"undefined\"!=typeof Proxy&&\"undefined\"!=typeof Reflect){var instance,policy,srcMockData={script:\"data:text/javascript;base64,KCk9Pnt9\",img:\"data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==\",iframe:\"data:text/html;base64, PGRpdj48L2Rpdj4=\"};if(\"script\"===tagName)instance=HTMLScriptElement;else if(\"img\"===tagName)instance=HTMLImageElement;else{if(\"iframe\"!==tagName)return;instance=HTMLIFrameElement}window.trustedTypes&&\"function\"==typeof window.trustedTypes.createPolicy&&(policy=window.trustedTypes.createPolicy(\"mock\",{createScriptURL:function(arg){return arg}}));var searchRegexp=function(){var input=arguments.length>0&&void 0!==arguments[0]?arguments[0]:\"\",FORWARD_SLASH=\"/\";if(\"\"===input)return new RegExp(\".?\");if(input[0]===FORWARD_SLASH&&input[input.length-1]===FORWARD_SLASH)return new RegExp(input.slice(1,-1));var escaped=input.replace(/[.*+?^${}()|[\\]\\\\]/g,\"\\\\$&\");return new RegExp(escaped)}(match),setMatchedAttribute=function(elem){return elem.setAttribute(source.name,\"matched\")},setAttributeHandler={apply:function(target,thisArg,args){if(!args[0]||!args[1])return Reflect.apply(target,thisArg,args);var nodeName=thisArg.nodeName.toLowerCase(),attrName=args[0].toLowerCase(),attrValue=args[1];return\"src\"===attrName&&tagName.toLowerCase()===nodeName&&srcMockData[nodeName]&&searchRegexp.test(attrValue)?(hit(source),setMatchedAttribute(thisArg),Reflect.apply(target,thisArg,[attrName,srcMockData[nodeName]])):Reflect.apply(target,thisArg,args)}};instance.prototype.setAttribute=new Proxy(Element.prototype.setAttribute,setAttributeHandler);var origSrcDescriptor=safeGetDescriptor(instance.prototype,\"src\");if(origSrcDescriptor){Object.defineProperty(instance.prototype,\"src\",{enumerable:!0,configurable:!0,get:function(){return origSrcDescriptor.get.call(this)},set:function(urlValue){var nodeName=this.nodeName.toLowerCase();if(tagName.toLowerCase()!==nodeName||!srcMockData[nodeName]||!searchRegexp.test(urlValue))return origSrcDescriptor.set.call(this,urlValue),!0;if(policy&&urlValue instanceof TrustedScriptURL){var trustedSrc=policy.createScriptURL(urlValue);return origSrcDescriptor.set.call(this,trustedSrc),void hit(source)}setMatchedAttribute(this),origSrcDescriptor.set.call(this,srcMockData[nodeName]),hit(source)}});var origOnerrorDescriptor=safeGetDescriptor(HTMLElement.prototype,\"onerror\");if(origOnerrorDescriptor){Object.defineProperty(HTMLElement.prototype,\"onerror\",{enumerable:!0,configurable:!0,get:function(){return origOnerrorDescriptor.get.call(this)},set:function(cb){return\"matched\"===this.getAttribute(source.name)?(origOnerrorDescriptor.set.call(this,noopFunc),!0):(origOnerrorDescriptor.set.call(this,cb),!0)}});var addEventListenerHandler={apply:function(target,thisArg,args){if(!args[0]||!args[1])return Reflect.apply(target,thisArg,args);var eventName=args[0];return\"matched\"===thisArg.getAttribute(source.name)&&\"error\"===eventName?Reflect.apply(target,thisArg,[eventName,noopFunc]):Reflect.apply(target,thisArg,args)}};EventTarget.prototype.addEventListener=new Proxy(EventTarget.prototype.addEventListener,addEventListenerHandler)}}}}).apply(this,updatedArgs)}catch(e){console.log(e)}}"
+ "scriptlet": "function preventElementSrcLoading(source,args){function hit(source){if(!0===source.verbose){try{var log=console.log.bind(console),trace=console.trace.bind(console),prefix=source.ruleText||\"\";if(source.domainName){var ruleStartIndex;source.ruleText.indexOf(\"#%#//\")>-1?ruleStartIndex=source.ruleText.indexOf(\"#%#//\"):source.ruleText.indexOf(\"##+js\")>-1&&(ruleStartIndex=source.ruleText.indexOf(\"##+js\"));var rulePart=source.ruleText.slice(ruleStartIndex);prefix=\"\".concat(source.domainName).concat(rulePart)}log(\"\".concat(prefix,\" trace start\")),trace&&trace(),log(\"\".concat(prefix,\" trace end\"))}catch(e){}\"function\"==typeof window.__debug&&window.__debug(source)}}function safeGetDescriptor(obj,prop){var descriptor=Object.getOwnPropertyDescriptor(obj,prop);return descriptor&&descriptor.configurable?descriptor:null}function noopFunc(){}var updatedArgs=args?[].concat(source).concat(args):[source];try{(function(source,tagName,match){if(\"undefined\"!=typeof Proxy&&\"undefined\"!=typeof Reflect){var instance,policy,srcMockData={script:\"data:text/javascript;base64,KCk9Pnt9\",img:\"data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==\",iframe:\"data:text/html;base64, PGRpdj48L2Rpdj4=\"};if(\"script\"===tagName)instance=HTMLScriptElement;else if(\"img\"===tagName)instance=HTMLImageElement;else{if(\"iframe\"!==tagName)return;instance=HTMLIFrameElement}window.trustedTypes&&\"function\"==typeof window.trustedTypes.createPolicy&&(policy=window.trustedTypes.createPolicy(\"AGPolicy\",{createScriptURL:function(arg){return arg}}));var searchRegexp=function(){var input=arguments.length>0&&void 0!==arguments[0]?arguments[0]:\"\",FORWARD_SLASH=\"/\";if(\"\"===input)return new RegExp(\".?\");if(input[0]===FORWARD_SLASH&&input[input.length-1]===FORWARD_SLASH)return new RegExp(input.slice(1,-1));var escaped=input.replace(/[.*+?^${}()|[\\]\\\\]/g,\"\\\\$&\");return new RegExp(escaped)}(match),setMatchedAttribute=function(elem){return elem.setAttribute(source.name,\"matched\")},setAttributeHandler={apply:function(target,thisArg,args){if(!args[0]||!args[1])return Reflect.apply(target,thisArg,args);var nodeName=thisArg.nodeName.toLowerCase(),attrName=args[0].toLowerCase(),attrValue=args[1];return\"src\"===attrName&&tagName.toLowerCase()===nodeName&&srcMockData[nodeName]&&searchRegexp.test(attrValue)?(hit(source),setMatchedAttribute(thisArg),Reflect.apply(target,thisArg,[attrName,srcMockData[nodeName]])):Reflect.apply(target,thisArg,args)}};instance.prototype.setAttribute=new Proxy(Element.prototype.setAttribute,setAttributeHandler);var origSrcDescriptor=safeGetDescriptor(instance.prototype,\"src\");if(origSrcDescriptor){Object.defineProperty(instance.prototype,\"src\",{enumerable:!0,configurable:!0,get:function(){return origSrcDescriptor.get.call(this)},set:function(urlValue){var nodeName=this.nodeName.toLowerCase();if(tagName.toLowerCase()!==nodeName||!srcMockData[nodeName]||!searchRegexp.test(urlValue))return origSrcDescriptor.set.call(this,urlValue),!0;if(policy&&urlValue instanceof TrustedScriptURL){var trustedSrc=policy.createScriptURL(urlValue);return origSrcDescriptor.set.call(this,trustedSrc),void hit(source)}setMatchedAttribute(this),origSrcDescriptor.set.call(this,srcMockData[nodeName]),hit(source)}});var origOnerrorDescriptor=safeGetDescriptor(HTMLElement.prototype,\"onerror\");if(origOnerrorDescriptor){Object.defineProperty(HTMLElement.prototype,\"onerror\",{enumerable:!0,configurable:!0,get:function(){return origOnerrorDescriptor.get.call(this)},set:function(cb){return\"matched\"===this.getAttribute(source.name)?(origOnerrorDescriptor.set.call(this,noopFunc),!0):(origOnerrorDescriptor.set.call(this,cb),!0)}});var addEventListenerHandler={apply:function(target,thisArg,args){if(!args[0]||!args[1])return Reflect.apply(target,thisArg,args);var eventName=args[0];return\"function\"==typeof thisArg.getAttribute&&\"matched\"===thisArg.getAttribute(source.name)&&\"error\"===eventName?Reflect.apply(target,thisArg,[eventName,noopFunc]):Reflect.apply(target,thisArg,args)}};EventTarget.prototype.addEventListener=new Proxy(EventTarget.prototype.addEventListener,addEventListenerHandler)}}}}).apply(this,updatedArgs)}catch(e){console.log(e)}}"
},
{
"names": [
"no-topics"
],
- "scriptlet": "function noTopics(source,args){var updatedArgs=args?[].concat(source).concat(args):[source];try{(function(source){Document instanceof Object!=0&&Object.prototype.hasOwnProperty.call(Document.prototype,\"browsingTopics\")&&Document.prototype.browsingTopics instanceof Function!=0&&(Document.prototype.browsingTopics=function(){return function(){var responseUrl=arguments.length>1&&void 0!==arguments[1]?arguments[1]:\"\",responseType=arguments.length>2&&void 0!==arguments[2]?arguments[2]:\"default\";if(\"undefined\"!=typeof Response){var response=new Response(arguments.length>0&&void 0!==arguments[0]?arguments[0]:\"{}\",{status:200,statusText:\"OK\"});return Object.defineProperties(response,{url:{value:responseUrl},type:{value:responseType}}),Promise.resolve(response)}}(\"[]\")},function(source,message){if(!0===source.verbose){try{var log=console.log.bind(console),trace=console.trace.bind(console),prefix=source.ruleText||\"\";if(source.domainName){var ruleStartIndex,AG_SCRIPTLET_MARKER=\"#%#//\",UBO_SCRIPTLET_MARKER=\"##+js\";source.ruleText.indexOf(AG_SCRIPTLET_MARKER)>-1?ruleStartIndex=source.ruleText.indexOf(AG_SCRIPTLET_MARKER):source.ruleText.indexOf(UBO_SCRIPTLET_MARKER)>-1&&(ruleStartIndex=source.ruleText.indexOf(UBO_SCRIPTLET_MARKER));var rulePart=source.ruleText.slice(ruleStartIndex);prefix=\"\".concat(source.domainName).concat(rulePart)}var LOG_MARKER=\"log: \";message&&(-1===message.indexOf(LOG_MARKER)?log(\"\".concat(prefix,\" message:\\n\").concat(message)):log(message.slice(LOG_MARKER.length))),log(\"\".concat(prefix,\" trace start\")),trace&&trace(),log(\"\".concat(prefix,\" trace end\"))}catch(e){}\"function\"==typeof window.__debug&&window.__debug(source)}}(source))}).apply(this,updatedArgs)}catch(e){console.log(e)}}"
+ "scriptlet": "function noTopics(source,args){var updatedArgs=args?[].concat(source).concat(args):[source];try{(function(source){Document instanceof Object!=0&&Object.prototype.hasOwnProperty.call(Document.prototype,\"browsingTopics\")&&Document.prototype.browsingTopics instanceof Function!=0&&(Document.prototype.browsingTopics=function(){return function(){var responseUrl=arguments.length>1&&void 0!==arguments[1]?arguments[1]:\"\",responseType=arguments.length>2&&void 0!==arguments[2]?arguments[2]:\"default\";if(\"undefined\"!=typeof Response){var response=new Response(arguments.length>0&&void 0!==arguments[0]?arguments[0]:\"{}\",{status:200,statusText:\"OK\"});return Object.defineProperties(response,{url:{value:responseUrl},type:{value:responseType}}),Promise.resolve(response)}}(\"[]\")},function(source){if(!0===source.verbose){try{var log=console.log.bind(console),trace=console.trace.bind(console),prefix=source.ruleText||\"\";if(source.domainName){var ruleStartIndex,AG_SCRIPTLET_MARKER=\"#%#//\",UBO_SCRIPTLET_MARKER=\"##+js\";source.ruleText.indexOf(AG_SCRIPTLET_MARKER)>-1?ruleStartIndex=source.ruleText.indexOf(AG_SCRIPTLET_MARKER):source.ruleText.indexOf(UBO_SCRIPTLET_MARKER)>-1&&(ruleStartIndex=source.ruleText.indexOf(UBO_SCRIPTLET_MARKER));var rulePart=source.ruleText.slice(ruleStartIndex);prefix=\"\".concat(source.domainName).concat(rulePart)}log(\"\".concat(prefix,\" trace start\")),trace&&trace(),log(\"\".concat(prefix,\" trace end\"))}catch(e){}\"function\"==typeof window.__debug&&window.__debug(source)}}(source))}).apply(this,updatedArgs)}catch(e){console.log(e)}}"
},
{
"names": [
"trusted-replace-xhr-response"
],
- "scriptlet": "function trustedReplaceXhrResponse(source,args){function hit(source,message){if(!0===source.verbose){try{var log=console.log.bind(console),trace=console.trace.bind(console),prefix=source.ruleText||\"\";if(source.domainName){var ruleStartIndex;source.ruleText.indexOf(\"#%#//\")>-1?ruleStartIndex=source.ruleText.indexOf(\"#%#//\"):source.ruleText.indexOf(\"##+js\")>-1&&(ruleStartIndex=source.ruleText.indexOf(\"##+js\"));var rulePart=source.ruleText.slice(ruleStartIndex);prefix=\"\".concat(source.domainName).concat(rulePart)}message&&(-1===message.indexOf(\"log: \")?log(\"\".concat(prefix,\" message:\\n\").concat(message)):log(message.slice(\"log: \".length))),log(\"\".concat(prefix,\" trace start\")),trace&&trace(),log(\"\".concat(prefix,\" trace end\"))}catch(e){}\"function\"==typeof window.__debug&&window.__debug(source)}}function logMessage(source,message){var forced=arguments.length>2&&void 0!==arguments[2]&&arguments[2];(forced||source.verbose)&&console.log(\"\".concat(source.name,\": \").concat(message))}function toRegExp(){var input=arguments.length>0&&void 0!==arguments[0]?arguments[0]:\"\",DEFAULT_VALUE=\".?\",FORWARD_SLASH=\"/\";if(\"\"===input)return new RegExp(DEFAULT_VALUE);if(input[0]===FORWARD_SLASH&&input[input.length-1]===FORWARD_SLASH)return new RegExp(input.slice(1,-1));var escaped=input.replace(/[.*+?^${}()|[\\]\\\\]/g,\"\\\\$&\");return new RegExp(escaped)}function objectToString(obj){return function(obj){return 0===Object.keys(obj).length}(obj)?\"{}\":(object=obj,keys=Object.keys(object),entries=[],keys.forEach((function(key){return entries.push([key,object[key]])})),entries).map((function(pair){var key=pair[0],value=pair[1],recordValueStr=value;return value instanceof Object&&(recordValueStr=\"{ \".concat(objectToString(value),\" }\")),\"\".concat(key,':\"').concat(recordValueStr,'\"')})).join(\" \");var object,keys,entries}function matchRequestProps(source,propsToMatch,requestData){if(\"\"===propsToMatch||\"*\"===propsToMatch)return!0;var isMatched,propsToMatchStr,PROPS_DIVIDER,PAIRS_MARKER,LEGAL_MATCH_PROPS,propsObj,data,parsedData=(propsToMatchStr=propsToMatch,PROPS_DIVIDER=\" \",PAIRS_MARKER=\":\",LEGAL_MATCH_PROPS=getRequestProps(),propsObj={},propsToMatchStr.split(PROPS_DIVIDER).forEach((function(prop){var dividerInd=prop.indexOf(PAIRS_MARKER),key=prop.slice(0,dividerInd);if(-1!==LEGAL_MATCH_PROPS.indexOf(key)){var value=prop.slice(dividerInd+1);propsObj[key]=value}else propsObj.url=prop})),propsObj);if(data=parsedData,Object.values(data).every((function(value){return function(input){var isValid,FORWARD_SLASH=\"/\",str=function(str){return str.replace(/[.*+?^${}()|[\\]\\\\]/g,\"\\\\$&\")}(input);input[0]===FORWARD_SLASH&&input[input.length-1]===FORWARD_SLASH&&(str=input.slice(1,-1));try{isValid=new RegExp(str),isValid=!0}catch(e){isValid=!1}return isValid}(value)}))){var matchData=function(data){var matchData={};return Object.keys(data).forEach((function(key){matchData[key]=toRegExp(data[key])})),matchData}(parsedData);isMatched=Object.keys(matchData).every((function(matchKey){var matchValue=matchData[matchKey];return Object.prototype.hasOwnProperty.call(requestData,matchKey)&&matchValue.test(requestData[matchKey])}))}else logMessage(source,\"Invalid parameter: \".concat(propsToMatch)),isMatched=!1;return isMatched}function getXhrData(method,url,async,user,password){return{method:method,url:url,async:async,user:user,password:password}}var updatedArgs=args?[].concat(source).concat(args):[source];try{(function(source){var pattern=arguments.length>1&&void 0!==arguments[1]?arguments[1]:\"\",replacement=arguments.length>2&&void 0!==arguments[2]?arguments[2]:\"\",propsToMatch=arguments.length>3&&void 0!==arguments[3]?arguments[3]:\"\";if(\"undefined\"!=typeof Proxy)if(\"\"!==pattern||\"\"===replacement){var xhrData,_ref,shouldLog=\"\"===pattern&&\"\"===replacement,nativeOpen=window.XMLHttpRequest.prototype.open,nativeSend=window.XMLHttpRequest.prototype.send,shouldReplace=!1,requestHeaders=[],openWrapper=function(target,thisArg,args){if(xhrData=getXhrData.apply(void 0,toConsumableArray(args)),shouldLog){var _message=\"log: xhr( \".concat(objectToString(xhrData),\" )\");return logMessage(source,_message,!0),hit(source),Reflect.apply(target,thisArg,args)}if(shouldReplace=matchRequestProps(source,propsToMatch,xhrData)){var setRequestHeaderHandler={apply:function(target,thisArg,args){return requestHeaders.push(args),Reflect.apply(target,thisArg,args)}};thisArg.setRequestHeader=new Proxy(thisArg.setRequestHeader,setRequestHeaderHandler)}return Reflect.apply(target,thisArg,args)},sendWrapper=(_ref=asyncToGenerator(regenerator.mark((function _callee(target,thisArg,args){var forgedRequest;return regenerator.wrap((function(_context){for(;;)switch(_context.prev=_context.next){case 0:if(shouldReplace){_context.next=2;break}return _context.abrupt(\"return\",Reflect.apply(target,thisArg,args));case 2:(forgedRequest=new XMLHttpRequest).addEventListener(\"readystatechange\",(function(){if(4===forgedRequest.readyState){var readyState=forgedRequest.readyState,response=forgedRequest.response,responseText=forgedRequest.responseText,responseURL=forgedRequest.responseURL,responseXML=forgedRequest.responseXML,status=forgedRequest.status,statusText=forgedRequest.statusText,content=responseText||response;if(\"string\"==typeof content){var patternRegexp=\"*\"===pattern?toRegExp():toRegExp(pattern),modifiedContent=content.replace(patternRegexp,replacement);Object.defineProperties(thisArg,{readyState:{value:readyState},response:{value:modifiedContent},responseText:{value:modifiedContent},responseURL:{value:responseURL},responseXML:{value:responseXML},status:{value:status},statusText:{value:statusText}}),setTimeout((function(){var stateEvent=new Event(\"readystatechange\");thisArg.dispatchEvent(stateEvent);var loadEvent=new Event(\"load\");thisArg.dispatchEvent(loadEvent);var loadEndEvent=new Event(\"loadend\");thisArg.dispatchEvent(loadEndEvent)}),1),hit(source)}}})),nativeOpen.apply(forgedRequest,[xhrData.method,xhrData.url]),requestHeaders.forEach((function(header){var name=header[0],value=header[1];forgedRequest.setRequestHeader(name,value)})),requestHeaders=[],_context.prev=7,nativeSend.call(forgedRequest,args),_context.next=14;break;case 11:return _context.prev=11,_context.t0=_context.catch(7),_context.abrupt(\"return\",Reflect.apply(target,thisArg,args));case 14:return _context.abrupt(\"return\",void 0);case 15:case\"end\":return _context.stop()}}),_callee,null,[[7,11]])}))),function(_x,_x2,_x3){return _ref.apply(this,arguments)}),openHandler={apply:openWrapper},sendHandler={apply:sendWrapper};XMLHttpRequest.prototype.open=new Proxy(XMLHttpRequest.prototype.open,openHandler),XMLHttpRequest.prototype.send=new Proxy(XMLHttpRequest.prototype.send,sendHandler)}else{logMessage(source,\"Pattern argument should not be empty string.\")}}).apply(this,updatedArgs)}catch(e){console.log(e)}}"
+ "scriptlet": "function trustedReplaceXhrResponse(source,args){function hit(source){if(!0===source.verbose){try{var log=console.log.bind(console),trace=console.trace.bind(console),prefix=source.ruleText||\"\";if(source.domainName){var ruleStartIndex;source.ruleText.indexOf(\"#%#//\")>-1?ruleStartIndex=source.ruleText.indexOf(\"#%#//\"):source.ruleText.indexOf(\"##+js\")>-1&&(ruleStartIndex=source.ruleText.indexOf(\"##+js\"));var rulePart=source.ruleText.slice(ruleStartIndex);prefix=\"\".concat(source.domainName).concat(rulePart)}log(\"\".concat(prefix,\" trace start\")),trace&&trace(),log(\"\".concat(prefix,\" trace end\"))}catch(e){}\"function\"==typeof window.__debug&&window.__debug(source)}}function logMessage(source,message){var forced=arguments.length>2&&void 0!==arguments[2]&&arguments[2];(forced||source.verbose)&&console.log(\"\".concat(source.name,\": \").concat(message))}function toRegExp(){var input=arguments.length>0&&void 0!==arguments[0]?arguments[0]:\"\",DEFAULT_VALUE=\".?\",FORWARD_SLASH=\"/\";if(\"\"===input)return new RegExp(DEFAULT_VALUE);if(input[0]===FORWARD_SLASH&&input[input.length-1]===FORWARD_SLASH)return new RegExp(input.slice(1,-1));var escaped=input.replace(/[.*+?^${}()|[\\]\\\\]/g,\"\\\\$&\");return new RegExp(escaped)}function objectToString(obj){return function(obj){return 0===Object.keys(obj).length&&!obj.prototype}(obj)?\"{}\":(object=obj,keys=Object.keys(object),entries=[],keys.forEach((function(key){return entries.push([key,object[key]])})),entries).map((function(pair){var key=pair[0],value=pair[1],recordValueStr=value;return value instanceof Object&&(recordValueStr=\"{ \".concat(objectToString(value),\" }\")),\"\".concat(key,':\"').concat(recordValueStr,'\"')})).join(\" \");var object,keys,entries}function matchRequestProps(source,propsToMatch,requestData){if(\"\"===propsToMatch||\"*\"===propsToMatch)return!0;var isMatched,PROPS_DIVIDER,PAIRS_MARKER,LEGAL_MATCH_PROPS,propsObj,data,parsedData=(PROPS_DIVIDER=\" \",PAIRS_MARKER=\":\",LEGAL_MATCH_PROPS=[\"url\",\"method\",\"headers\",\"body\",\"mode\",\"credentials\",\"cache\",\"redirect\",\"referrer\",\"referrerPolicy\",\"integrity\",\"keepalive\",\"signal\"],propsObj={},propsToMatch.split(PROPS_DIVIDER).forEach((function(prop){var dividerInd=prop.indexOf(PAIRS_MARKER),key=prop.slice(0,dividerInd);if(-1!==LEGAL_MATCH_PROPS.indexOf(key)){var value=prop.slice(dividerInd+1);propsObj[key]=value}else propsObj.url=prop})),propsObj);if(data=parsedData,Object.values(data).every((function(value){return function(input){var isValid,FORWARD_SLASH=\"/\",str=function(str){return str.replace(/[.*+?^${}()|[\\]\\\\]/g,\"\\\\$&\")}(input);input[0]===FORWARD_SLASH&&input[input.length-1]===FORWARD_SLASH&&(str=input.slice(1,-1));try{isValid=new RegExp(str),isValid=!0}catch(e){isValid=!1}return isValid}(value)}))){var matchData=function(data){var matchData={};return Object.keys(data).forEach((function(key){matchData[key]=toRegExp(data[key])})),matchData}(parsedData);isMatched=Object.keys(matchData).every((function(matchKey){var matchValue=matchData[matchKey];return Object.prototype.hasOwnProperty.call(requestData,matchKey)&&matchValue.test(requestData[matchKey])}))}else logMessage(source,\"Invalid parameter: \".concat(propsToMatch)),isMatched=!1;return isMatched}function getXhrData(method,url,async,user,password){return{method:method,url:url,async:async,user:user,password:password}}var updatedArgs=args?[].concat(source).concat(args):[source];try{(function(source){var pattern=arguments.length>1&&void 0!==arguments[1]?arguments[1]:\"\",replacement=arguments.length>2&&void 0!==arguments[2]?arguments[2]:\"\",propsToMatch=arguments.length>3&&void 0!==arguments[3]?arguments[3]:\"\";if(\"undefined\"!=typeof Proxy)if(\"\"!==pattern||\"\"===replacement){var xhrData,shouldLog=\"\"===pattern&&\"\"===replacement,nativeOpen=window.XMLHttpRequest.prototype.open,nativeSend=window.XMLHttpRequest.prototype.send,shouldReplace=!1,requestHeaders=[],openWrapper=function(target,thisArg,args){if(xhrData=getXhrData.apply(null,args),shouldLog){var _message=\"xhr( \".concat(objectToString(xhrData),\" )\");return logMessage(source,_message,!0),hit(source),Reflect.apply(target,thisArg,args)}if(shouldReplace=matchRequestProps(source,propsToMatch,xhrData)){var setRequestHeaderHandler={apply:function(target,thisArg,args){return requestHeaders.push(args),Reflect.apply(target,thisArg,args)}};thisArg.setRequestHeader=new Proxy(thisArg.setRequestHeader,setRequestHeaderHandler)}return Reflect.apply(target,thisArg,args)},sendWrapper=function(target,thisArg,args){if(!shouldReplace)return Reflect.apply(target,thisArg,args);var forgedRequest=new XMLHttpRequest;forgedRequest.addEventListener(\"readystatechange\",(function(){if(4===forgedRequest.readyState){var readyState=forgedRequest.readyState,response=forgedRequest.response,responseText=forgedRequest.responseText,responseURL=forgedRequest.responseURL,responseXML=forgedRequest.responseXML,status=forgedRequest.status,statusText=forgedRequest.statusText,content=responseText||response;if(\"string\"==typeof content){var patternRegexp=\"*\"===pattern?/(\\n|.)*/:toRegExp(pattern),modifiedContent=content.replace(patternRegexp,replacement);Object.defineProperties(thisArg,{readyState:{value:readyState},response:{value:modifiedContent},responseText:{value:modifiedContent},responseURL:{value:responseURL},responseXML:{value:responseXML},status:{value:status},statusText:{value:statusText}}),setTimeout((function(){var stateEvent=new Event(\"readystatechange\");thisArg.dispatchEvent(stateEvent);var loadEvent=new Event(\"load\");thisArg.dispatchEvent(loadEvent);var loadEndEvent=new Event(\"loadend\");thisArg.dispatchEvent(loadEndEvent)}),1),hit(source)}}})),nativeOpen.apply(forgedRequest,[xhrData.method,xhrData.url]),requestHeaders.forEach((function(header){var name=header[0],value=header[1];forgedRequest.setRequestHeader(name,value)})),requestHeaders=[];try{nativeSend.call(forgedRequest,args)}catch(_unused){return Reflect.apply(target,thisArg,args)}},openHandler={apply:openWrapper},sendHandler={apply:sendWrapper};XMLHttpRequest.prototype.open=new Proxy(XMLHttpRequest.prototype.open,openHandler),XMLHttpRequest.prototype.send=new Proxy(XMLHttpRequest.prototype.send,sendHandler)}else{logMessage(source,\"Pattern argument should not be empty string.\")}}).apply(this,updatedArgs)}catch(e){console.log(e)}}"
},
{
"names": [
@@ -465,25 +465,31 @@
"ubo-xml-prune.js",
"ubo-xml-prune"
],
- "scriptlet": "function xmlPrune(source,args){function hit(source,message){if(!0===source.verbose){try{var log=console.log.bind(console),trace=console.trace.bind(console),prefix=source.ruleText||\"\";if(source.domainName){var ruleStartIndex;source.ruleText.indexOf(\"#%#//\")>-1?ruleStartIndex=source.ruleText.indexOf(\"#%#//\"):source.ruleText.indexOf(\"##+js\")>-1&&(ruleStartIndex=source.ruleText.indexOf(\"##+js\"));var rulePart=source.ruleText.slice(ruleStartIndex);prefix=\"\".concat(source.domainName).concat(rulePart)}message&&(-1===message.indexOf(\"log: \")?log(\"\".concat(prefix,\" message:\\n\").concat(message)):log(message.slice(\"log: \".length))),log(\"\".concat(prefix,\" trace start\")),trace&&trace(),log(\"\".concat(prefix,\" trace end\"))}catch(e){}\"function\"==typeof window.__debug&&window.__debug(source)}}function logMessage(source,message){var forced=arguments.length>2&&void 0!==arguments[2]&&arguments[2];(forced||source.verbose)&&console.log(\"\".concat(source.name,\": \").concat(message))}function toRegExp(){var input=arguments.length>0&&void 0!==arguments[0]?arguments[0]:\"\",DEFAULT_VALUE=\".?\",FORWARD_SLASH=\"/\";if(\"\"===input)return new RegExp(DEFAULT_VALUE);if(input[0]===FORWARD_SLASH&&input[input.length-1]===FORWARD_SLASH)return new RegExp(input.slice(1,-1));var escaped=input.replace(/[.*+?^${}()|[\\]\\\\]/g,\"\\\\$&\");return new RegExp(escaped)}function startsWith(str,prefix){return!!str&&0===str.indexOf(prefix)}function endsWith(str,ending){return!!str&&str.lastIndexOf(ending)===str.length-ending.length}var updatedArgs=args?[].concat(source).concat(args):[source];try{(function(source,propsToRemove){var _this=this,optionalProp=arguments.length>2&&void 0!==arguments[2]?arguments[2]:\"\",urlToMatch=arguments.length>3?arguments[3]:void 0;if(\"undefined\"!=typeof Reflect&&\"undefined\"!=typeof fetch&&\"undefined\"!=typeof Proxy&&\"undefined\"!=typeof Response){var shouldPruneResponse=!0;propsToRemove||(shouldPruneResponse=!1);var urlMatchRegexp=toRegExp(urlToMatch),isXML=function(text){var trimedText=text.trim();return!(!startsWith(trimedText,\"<\")||!endsWith(trimedText,\">\"))},pruneXML=function(text){if(!isXML(text))return shouldPruneResponse=!1,text;var xmlDoc=(new DOMParser).parseFromString(text,\"text/xml\");if(xmlDoc.querySelector(\"parsererror\"))return text;if(\"\"!==optionalProp&&null===xmlDoc.querySelector(optionalProp))return shouldPruneResponse=!1,text;var elems=xmlDoc.querySelectorAll(propsToRemove);return elems.length?(elems.forEach((function(elem){elem.remove()})),text=(new XMLSerializer).serializeToString(xmlDoc)):(shouldPruneResponse=!1,text)},xhrWrapper=function(target,thisArg,args){var xhrURL=args[1];return\"string\"!=typeof xhrURL||0===xhrURL.length||urlMatchRegexp.test(xhrURL)&&thisArg.addEventListener(\"readystatechange\",(function pruneResponse(){if(4===thisArg.readyState){var response=thisArg.response;if(thisArg.removeEventListener(\"readystatechange\",pruneResponse),shouldPruneResponse){var prunedResponseContent=pruneXML(response);shouldPruneResponse&&(Object.defineProperty(thisArg,\"response\",{value:prunedResponseContent}),Object.defineProperty(thisArg,\"responseText\",{value:prunedResponseContent}),hit(source)),shouldPruneResponse=!0}else isXML(response)&&logMessage(\"XMLHttpRequest.open() URL: \".concat(xhrURL,\"\\nresponse: \").concat(response))}})),Reflect.apply(target,thisArg,args)},xhrHandler={apply:xhrWrapper};window.XMLHttpRequest.prototype.open=new Proxy(window.XMLHttpRequest.prototype.open,xhrHandler);var nativeFetch=window.fetch,fetchWrapper=function(target,thisArg,args){var fetchURL=args[0];return\"string\"!=typeof fetchURL||0===fetchURL.length?Reflect.apply(target,thisArg,args):urlMatchRegexp.test(fetchURL)?nativeFetch.apply(_this,args).then((function(response){return response.text().then((function(text){if(!shouldPruneResponse)return isXML(text)&&logMessage(\"fetch URL: \".concat(fetchURL,\"\\nresponse text: \").concat(text)),Reflect.apply(target,thisArg,args);var prunedText=pruneXML(text);return shouldPruneResponse?(hit(source),new Response(prunedText,{status:response.status,statusText:response.statusText,headers:response.headers})):(shouldPruneResponse=!0,Reflect.apply(target,thisArg,args))}))})):Reflect.apply(target,thisArg,args)},fetchHandler={apply:fetchWrapper};window.fetch=new Proxy(window.fetch,fetchHandler)}}).apply(this,updatedArgs)}catch(e){console.log(e)}}"
+ "scriptlet": "function xmlPrune(source,args){function hit(source){if(!0===source.verbose){try{var log=console.log.bind(console),trace=console.trace.bind(console),prefix=source.ruleText||\"\";if(source.domainName){var ruleStartIndex;source.ruleText.indexOf(\"#%#//\")>-1?ruleStartIndex=source.ruleText.indexOf(\"#%#//\"):source.ruleText.indexOf(\"##+js\")>-1&&(ruleStartIndex=source.ruleText.indexOf(\"##+js\"));var rulePart=source.ruleText.slice(ruleStartIndex);prefix=\"\".concat(source.domainName).concat(rulePart)}log(\"\".concat(prefix,\" trace start\")),trace&&trace(),log(\"\".concat(prefix,\" trace end\"))}catch(e){}\"function\"==typeof window.__debug&&window.__debug(source)}}function logMessage(source,message){var forced=arguments.length>2&&void 0!==arguments[2]&&arguments[2];(forced||source.verbose)&&console.log(\"\".concat(source.name,\": \").concat(message))}function toRegExp(){var input=arguments.length>0&&void 0!==arguments[0]?arguments[0]:\"\",DEFAULT_VALUE=\".?\",FORWARD_SLASH=\"/\";if(\"\"===input)return new RegExp(DEFAULT_VALUE);if(input[0]===FORWARD_SLASH&&input[input.length-1]===FORWARD_SLASH)return new RegExp(input.slice(1,-1));var escaped=input.replace(/[.*+?^${}()|[\\]\\\\]/g,\"\\\\$&\");return new RegExp(escaped)}function startsWith(str,prefix){return!!str&&0===str.indexOf(prefix)}function endsWith(str,ending){return!!str&&str.lastIndexOf(ending)===str.length-ending.length}var updatedArgs=args?[].concat(source).concat(args):[source];try{(function(source,propsToRemove){var _this=this,optionalProp=arguments.length>2&&void 0!==arguments[2]?arguments[2]:\"\",urlToMatch=arguments.length>3?arguments[3]:void 0;if(\"undefined\"!=typeof Reflect&&\"undefined\"!=typeof fetch&&\"undefined\"!=typeof Proxy&&\"undefined\"!=typeof Response){var shouldPruneResponse=!0;propsToRemove||(shouldPruneResponse=!1);var urlMatchRegexp=toRegExp(urlToMatch),isXML=function(text){var trimedText=text.trim();return!(!startsWith(trimedText,\"<\")||!endsWith(trimedText,\">\"))},pruneXML=function(text){if(!isXML(text))return shouldPruneResponse=!1,text;var xmlDoc=(new DOMParser).parseFromString(text,\"text/xml\");if(xmlDoc.querySelector(\"parsererror\"))return text;if(\"\"!==optionalProp&&null===xmlDoc.querySelector(optionalProp))return shouldPruneResponse=!1,text;var elems=xmlDoc.querySelectorAll(propsToRemove);return elems.length?(elems.forEach((function(elem){elem.remove()})),text=(new XMLSerializer).serializeToString(xmlDoc)):(shouldPruneResponse=!1,text)},xhrWrapper=function(target,thisArg,args){var xhrURL=args[1];return\"string\"!=typeof xhrURL||0===xhrURL.length||urlMatchRegexp.test(xhrURL)&&thisArg.addEventListener(\"readystatechange\",(function pruneResponse(){if(4===thisArg.readyState){var response=thisArg.response;if(thisArg.removeEventListener(\"readystatechange\",pruneResponse),shouldPruneResponse){var prunedResponseContent=pruneXML(response);shouldPruneResponse&&(Object.defineProperty(thisArg,\"response\",{value:prunedResponseContent}),Object.defineProperty(thisArg,\"responseText\",{value:prunedResponseContent}),hit(source)),shouldPruneResponse=!0}else isXML(response)&&logMessage(\"XMLHttpRequest.open() URL: \".concat(xhrURL,\"\\nresponse: \").concat(response))}})),Reflect.apply(target,thisArg,args)},xhrHandler={apply:xhrWrapper};window.XMLHttpRequest.prototype.open=new Proxy(window.XMLHttpRequest.prototype.open,xhrHandler);var nativeFetch=window.fetch,fetchWrapper=function(target,thisArg,args){var fetchURL=args[0];return\"string\"!=typeof fetchURL||0===fetchURL.length?Reflect.apply(target,thisArg,args):urlMatchRegexp.test(fetchURL)?nativeFetch.apply(_this,args).then((function(response){return response.text().then((function(text){if(!shouldPruneResponse)return isXML(text)&&logMessage(\"fetch URL: \".concat(fetchURL,\"\\nresponse text: \").concat(text)),Reflect.apply(target,thisArg,args);var prunedText=pruneXML(text);return shouldPruneResponse?(hit(source),new Response(prunedText,{status:response.status,statusText:response.statusText,headers:response.headers})):(shouldPruneResponse=!0,Reflect.apply(target,thisArg,args))}))})):Reflect.apply(target,thisArg,args)},fetchHandler={apply:fetchWrapper};window.fetch=new Proxy(window.fetch,fetchHandler)}}).apply(this,updatedArgs)}catch(e){console.log(e)}}"
},
{
"names": [
"trusted-set-cookie"
],
- "scriptlet": "function trustedSetCookie(source,args){function hit(source,message){if(!0===source.verbose){try{var log=console.log.bind(console),trace=console.trace.bind(console),prefix=source.ruleText||\"\";if(source.domainName){var ruleStartIndex;source.ruleText.indexOf(\"#%#//\")>-1?ruleStartIndex=source.ruleText.indexOf(\"#%#//\"):source.ruleText.indexOf(\"##+js\")>-1&&(ruleStartIndex=source.ruleText.indexOf(\"##+js\"));var rulePart=source.ruleText.slice(ruleStartIndex);prefix=\"\".concat(source.domainName).concat(rulePart)}message&&(-1===message.indexOf(\"log: \")?log(\"\".concat(prefix,\" message:\\n\").concat(message)):log(message.slice(\"log: \".length))),log(\"\".concat(prefix,\" trace start\")),trace&&trace(),log(\"\".concat(prefix,\" trace end\"))}catch(e){}\"function\"==typeof window.__debug&&window.__debug(source)}}function logMessage(source,message){var forced=arguments.length>2&&void 0!==arguments[2]&&arguments[2];(forced||source.verbose)&&console.log(\"\".concat(source.name,\": \").concat(message))}function isCookieSetWithValue(cookieString,name,value){return cookieString.split(\";\").some((function(cookieStr){var pos=cookieStr.indexOf(\"=\");if(-1===pos)return!1;var cookieName=cookieStr.slice(0,pos).trim(),cookieValue=cookieStr.slice(pos+1).trim();return name===cookieName&&value===cookieValue}))}function concatCookieNameValuePath(source,rawName,rawValue,rawPath){return function(rawPath){return\"/\"===rawPath||\"none\"===rawPath}(rawPath)?\"\".concat(encodeURIComponent(rawName),\"=\").concat(encodeURIComponent(rawValue),\"; \").concat(function(rawPath){if(\"/\"===rawPath)return\"path=/\";return\"\"}(rawPath)):(logMessage(source,\"Invalid cookie path: '\".concat(rawPath,\"'\")),null)}function parseKeywordValue(rawValue){var parsedValue=rawValue;return\"$now$\"===rawValue?parsedValue=Date.now().toString():\"$currentDate$\"===rawValue&&(parsedValue=Date()),parsedValue}var updatedArgs=args?[].concat(source).concat(args):[source];try{(function(source,name,value){var offsetExpiresSec=arguments.length>3&&void 0!==arguments[3]?arguments[3]:\"\",reload=arguments.length>4&&void 0!==arguments[4]?arguments[4]:\"false\",path=arguments.length>5&&void 0!==arguments[5]?arguments[5]:\"/\";if(void 0!==name)if(void 0!==value){if(\"true\"!==reload||!isCookieSetWithValue(document.cookie,name,value)){var ONE_YEAR_EXPIRATION_KEYWORD=\"1year\",ONE_DAY_EXPIRATION_KEYWORD=\"1day\",cookieToSet=concatCookieNameValuePath(source,name,parseKeywordValue(value),path);if(cookieToSet){if(offsetExpiresSec){var parsedOffsetExpiresSec,MS_IN_SEC=1e3;if(offsetExpiresSec===ONE_YEAR_EXPIRATION_KEYWORD)parsedOffsetExpiresSec=31536e3;else if(offsetExpiresSec===ONE_DAY_EXPIRATION_KEYWORD)parsedOffsetExpiresSec=86400;else if(parsedOffsetExpiresSec=Number.parseInt(offsetExpiresSec,10),Number.isNaN(parsedOffsetExpiresSec)){return void logMessage(source,\"log: Invalid offsetExpiresSec value: \".concat(offsetExpiresSec))}var expires=Date.now()+parsedOffsetExpiresSec*MS_IN_SEC;cookieToSet+=\" expires=\".concat(new Date(expires).toUTCString(),\";\")}cookieToSet&&(document.cookie=cookieToSet,hit(source),\"true\"===reload&&isCookieSetWithValue(document.cookie,name,value)&&window.location.reload())}}}else logMessage(source,\"Cookie value should be specified.\");else logMessage(source,\"Cookie name should be specified.\")}).apply(this,updatedArgs)}catch(e){console.log(e)}}"
+ "scriptlet": "function trustedSetCookie(source,args){function hit(source){if(!0===source.verbose){try{var log=console.log.bind(console),trace=console.trace.bind(console),prefix=source.ruleText||\"\";if(source.domainName){var ruleStartIndex;source.ruleText.indexOf(\"#%#//\")>-1?ruleStartIndex=source.ruleText.indexOf(\"#%#//\"):source.ruleText.indexOf(\"##+js\")>-1&&(ruleStartIndex=source.ruleText.indexOf(\"##+js\"));var rulePart=source.ruleText.slice(ruleStartIndex);prefix=\"\".concat(source.domainName).concat(rulePart)}log(\"\".concat(prefix,\" trace start\")),trace&&trace(),log(\"\".concat(prefix,\" trace end\"))}catch(e){}\"function\"==typeof window.__debug&&window.__debug(source)}}function logMessage(source,message){var forced=arguments.length>2&&void 0!==arguments[2]&&arguments[2];(forced||source.verbose)&&console.log(\"\".concat(source.name,\": \").concat(message))}function concatCookieNameValuePath(rawName,rawValue,rawPath){return\"\".concat(encodeURIComponent(rawName),\"=\").concat(encodeURIComponent(rawValue),\"; \").concat(function(rawPath){if(\"/\"===rawPath)return\"path=/\";return\"\"}(rawPath),\";\")}function isValidCookiePath(rawPath){return\"/\"===rawPath||\"none\"===rawPath}function getTrustedCookieOffsetMs(offsetExpiresSec){var parsedSec;if(\"1year\"===offsetExpiresSec)parsedSec=31536e3;else if(\"1day\"===offsetExpiresSec)parsedSec=86400;else if(parsedSec=Number.parseInt(offsetExpiresSec,10),Number.isNaN(parsedSec))return null;return 1e3*parsedSec}function parseKeywordValue(rawValue){var parsedValue=rawValue;return\"$now$\"===rawValue?parsedValue=Date.now().toString():\"$currentDate$\"===rawValue&&(parsedValue=Date()),parsedValue}var updatedArgs=args?[].concat(source).concat(args):[source];try{(function(source,name,value){var offsetExpiresSec=arguments.length>3&&void 0!==arguments[3]?arguments[3]:\"\",path=arguments.length>4&&void 0!==arguments[4]?arguments[4]:\"/\";if(void 0!==name)if(void 0!==value){var parsedValue=parseKeywordValue(value);if(isValidCookiePath(path)){var cookieToSet=concatCookieNameValuePath(name,parsedValue,path);if(cookieToSet){if(offsetExpiresSec){var parsedOffsetMs=getTrustedCookieOffsetMs(offsetExpiresSec);if(!parsedOffsetMs)return void logMessage(source,\"Invalid offsetExpiresSec value: \".concat(offsetExpiresSec));var expires=Date.now()+parsedOffsetMs;cookieToSet+=\" expires=\".concat(new Date(expires).toUTCString(),\";\")}document.cookie=cookieToSet,hit(source)}}else logMessage(source,\"Invalid cookie path: '\".concat(path,\"'\"))}else logMessage(source,\"Cookie value should be specified.\");else logMessage(source,\"Cookie name should be specified.\")}).apply(this,updatedArgs)}catch(e){console.log(e)}}"
+ },
+ {
+ "names": [
+ "trusted-set-cookie-reload"
+ ],
+ "scriptlet": "function trustedSetCookieReload(source,args){function hit(source){if(!0===source.verbose){try{var log=console.log.bind(console),trace=console.trace.bind(console),prefix=source.ruleText||\"\";if(source.domainName){var ruleStartIndex;source.ruleText.indexOf(\"#%#//\")>-1?ruleStartIndex=source.ruleText.indexOf(\"#%#//\"):source.ruleText.indexOf(\"##+js\")>-1&&(ruleStartIndex=source.ruleText.indexOf(\"##+js\"));var rulePart=source.ruleText.slice(ruleStartIndex);prefix=\"\".concat(source.domainName).concat(rulePart)}log(\"\".concat(prefix,\" trace start\")),trace&&trace(),log(\"\".concat(prefix,\" trace end\"))}catch(e){}\"function\"==typeof window.__debug&&window.__debug(source)}}function logMessage(source,message){var forced=arguments.length>2&&void 0!==arguments[2]&&arguments[2];(forced||source.verbose)&&console.log(\"\".concat(source.name,\": \").concat(message))}function isCookieSetWithValue(cookieString,name,value){return cookieString.split(\";\").some((function(cookieStr){var pos=cookieStr.indexOf(\"=\");if(-1===pos)return!1;var cookieName=cookieStr.slice(0,pos).trim(),cookieValue=cookieStr.slice(pos+1).trim();return name===cookieName&&value===cookieValue}))}function concatCookieNameValuePath(rawName,rawValue,rawPath){return\"\".concat(encodeURIComponent(rawName),\"=\").concat(encodeURIComponent(rawValue),\"; \").concat(function(rawPath){if(\"/\"===rawPath)return\"path=/\";return\"\"}(rawPath),\";\")}function isValidCookiePath(rawPath){return\"/\"===rawPath||\"none\"===rawPath}function getTrustedCookieOffsetMs(offsetExpiresSec){var parsedSec;if(\"1year\"===offsetExpiresSec)parsedSec=31536e3;else if(\"1day\"===offsetExpiresSec)parsedSec=86400;else if(parsedSec=Number.parseInt(offsetExpiresSec,10),Number.isNaN(parsedSec))return null;return 1e3*parsedSec}function parseKeywordValue(rawValue){var parsedValue=rawValue;return\"$now$\"===rawValue?parsedValue=Date.now().toString():\"$currentDate$\"===rawValue&&(parsedValue=Date()),parsedValue}var updatedArgs=args?[].concat(source).concat(args):[source];try{(function(source,name,value){var offsetExpiresSec=arguments.length>3&&void 0!==arguments[3]?arguments[3]:\"\",path=arguments.length>4&&void 0!==arguments[4]?arguments[4]:\"/\";if(void 0!==name)if(void 0!==value){if(!isCookieSetWithValue(document.cookie,name,value)){var parsedValue=parseKeywordValue(value);if(isValidCookiePath(path)){var cookieToSet=concatCookieNameValuePath(name,parsedValue,path);if(cookieToSet){if(offsetExpiresSec){var parsedOffsetMs=getTrustedCookieOffsetMs(offsetExpiresSec);if(!parsedOffsetMs)return void logMessage(source,\"Invalid offsetExpiresSec value: \".concat(offsetExpiresSec));var expires=Date.now()+parsedOffsetMs;cookieToSet+=\" expires=\".concat(new Date(expires).toUTCString(),\";\")}document.cookie=cookieToSet,hit(source),isCookieSetWithValue(document.cookie,name,value)&&window.location.reload()}}else logMessage(source,\"Invalid cookie path: '\".concat(path,\"'\"))}}else logMessage(source,\"Cookie value should be specified.\");else logMessage(source,\"Cookie name should be specified.\")}).apply(this,updatedArgs)}catch(e){console.log(e)}}"
},
{
"names": [
"trusted-replace-fetch-response"
],
- "scriptlet": "function trustedReplaceFetchResponse(source,args){function hit(source,message){if(!0===source.verbose){try{var log=console.log.bind(console),trace=console.trace.bind(console),prefix=source.ruleText||\"\";if(source.domainName){var ruleStartIndex;source.ruleText.indexOf(\"#%#//\")>-1?ruleStartIndex=source.ruleText.indexOf(\"#%#//\"):source.ruleText.indexOf(\"##+js\")>-1&&(ruleStartIndex=source.ruleText.indexOf(\"##+js\"));var rulePart=source.ruleText.slice(ruleStartIndex);prefix=\"\".concat(source.domainName).concat(rulePart)}message&&(-1===message.indexOf(\"log: \")?log(\"\".concat(prefix,\" message:\\n\").concat(message)):log(message.slice(\"log: \".length))),log(\"\".concat(prefix,\" trace start\")),trace&&trace(),log(\"\".concat(prefix,\" trace end\"))}catch(e){}\"function\"==typeof window.__debug&&window.__debug(source)}}function logMessage(source,message){var forced=arguments.length>2&&void 0!==arguments[2]&&arguments[2];(forced||source.verbose)&&console.log(\"\".concat(source.name,\": \").concat(message))}function getFetchData(args){var fetchUrl,fetchInit,request,fetchPropsObj={};if(args[0]instanceof Request){var requestData=(request=args[0],getRequestProps().map((function(key){return[key,request[key]]})).reduce((function(acc,el){var key=el[0],value=el[1];return acc[key]=value,acc}),{}));fetchUrl=requestData.url,fetchInit=requestData}else fetchUrl=args[0],fetchInit=args[1];return fetchPropsObj.url=fetchUrl,fetchInit instanceof Object&&Object.keys(fetchInit).forEach((function(prop){fetchPropsObj[prop]=fetchInit[prop]})),fetchPropsObj}function objectToString(obj){return function(obj){return 0===Object.keys(obj).length}(obj)?\"{}\":(object=obj,keys=Object.keys(object),entries=[],keys.forEach((function(key){return entries.push([key,object[key]])})),entries).map((function(pair){var key=pair[0],value=pair[1],recordValueStr=value;return value instanceof Object&&(recordValueStr=\"{ \".concat(objectToString(value),\" }\")),\"\".concat(key,':\"').concat(recordValueStr,'\"')})).join(\" \");var object,keys,entries}function matchRequestProps(source,propsToMatch,requestData){if(\"\"===propsToMatch||\"*\"===propsToMatch)return!0;var isMatched,propsToMatchStr,PROPS_DIVIDER,PAIRS_MARKER,LEGAL_MATCH_PROPS,propsObj,data,parsedData=(propsToMatchStr=propsToMatch,PROPS_DIVIDER=\" \",PAIRS_MARKER=\":\",LEGAL_MATCH_PROPS=getRequestProps(),propsObj={},propsToMatchStr.split(PROPS_DIVIDER).forEach((function(prop){var dividerInd=prop.indexOf(PAIRS_MARKER),key=prop.slice(0,dividerInd);if(-1!==LEGAL_MATCH_PROPS.indexOf(key)){var value=prop.slice(dividerInd+1);propsObj[key]=value}else propsObj.url=prop})),propsObj);if(data=parsedData,Object.values(data).every((function(value){return function(input){var isValid,FORWARD_SLASH=\"/\",str=function(str){return str.replace(/[.*+?^${}()|[\\]\\\\]/g,\"\\\\$&\")}(input);input[0]===FORWARD_SLASH&&input[input.length-1]===FORWARD_SLASH&&(str=input.slice(1,-1));try{isValid=new RegExp(str),isValid=!0}catch(e){isValid=!1}return isValid}(value)}))){var matchData=function(data){var matchData={};return Object.keys(data).forEach((function(key){matchData[key]=toRegExp(data[key])})),matchData}(parsedData);isMatched=Object.keys(matchData).every((function(matchKey){var matchValue=matchData[matchKey];return Object.prototype.hasOwnProperty.call(requestData,matchKey)&&matchValue.test(requestData[matchKey])}))}else logMessage(source,\"Invalid parameter: \".concat(propsToMatch)),isMatched=!1;return isMatched}function toRegExp(){var input=arguments.length>0&&void 0!==arguments[0]?arguments[0]:\"\",DEFAULT_VALUE=\".?\",FORWARD_SLASH=\"/\";if(\"\"===input)return new RegExp(DEFAULT_VALUE);if(input[0]===FORWARD_SLASH&&input[input.length-1]===FORWARD_SLASH)return new RegExp(input.slice(1,-1));var escaped=input.replace(/[.*+?^${}()|[\\]\\\\]/g,\"\\\\$&\");return new RegExp(escaped)}var updatedArgs=args?[].concat(source).concat(args):[source];try{(function(source){var pattern=arguments.length>1&&void 0!==arguments[1]?arguments[1]:\"\",replacement=arguments.length>2&&void 0!==arguments[2]?arguments[2]:\"\",propsToMatch=arguments.length>3&&void 0!==arguments[3]?arguments[3]:\"\";if(\"undefined\"!=typeof fetch&&\"undefined\"!=typeof Proxy&&\"undefined\"!=typeof Response)if(\"\"!==pattern||\"\"===replacement){var fetchData,_ref,shouldLog=\"\"===pattern&&\"\"===replacement,nativeFetch=fetch,handlerWrapper=(_ref=asyncToGenerator(regenerator.mark((function _callee(target,thisArg,args){var forgeResponse;return regenerator.wrap((function(_context){for(;;)switch(_context.prev=_context.next){case 0:if(fetchData=getFetchData(args),!shouldLog){_context.next=5;break}return logMessage(source,\"fetch( \".concat(objectToString(fetchData),\" )\"),!0),hit(source),_context.abrupt(\"return\",Reflect.apply(target,thisArg,args));case 5:if(matchRequestProps(source,propsToMatch,fetchData)){_context.next=8;break}return _context.abrupt(\"return\",Reflect.apply(target,thisArg,args));case 8:return forgeResponse=function(response,textContent){var bodyUsed=response.bodyUsed,headers=response.headers,ok=response.ok,redirected=response.redirected,status=response.status,statusText=response.statusText,type=response.type,url=response.url,forgedResponse=new Response(textContent,{status:status,statusText:statusText,headers:headers});return Object.defineProperties(forgedResponse,{url:{value:url},type:{value:type},ok:{value:ok},bodyUsed:{value:bodyUsed},redirected:{value:redirected}}),forgedResponse},_context.abrupt(\"return\",nativeFetch.apply(void 0,toConsumableArray(args)).then((function(response){return response.text().then((function(bodyText){var patternRegexp=\"*\"===pattern?toRegExp():toRegExp(pattern),modifiedTextContent=bodyText.replace(patternRegexp,replacement),forgedResponse=forgeResponse(response,modifiedTextContent);return hit(source),forgedResponse})).catch((function(){var fetchDataStr=objectToString(fetchData),message=\"Response body can't be converted to text: \".concat(fetchDataStr);return logMessage(source,message),Reflect.apply(target,thisArg,args)}))})).catch((function(){return Reflect.apply(target,thisArg,args)})));case 10:case\"end\":return _context.stop()}}),_callee)}))),function(_x,_x2,_x3){return _ref.apply(this,arguments)});fetch=new Proxy(fetch,{apply:handlerWrapper})}else logMessage(source,\"Pattern argument should not be empty string.\")}).apply(this,updatedArgs)}catch(e){console.log(e)}}"
+ "scriptlet": "function trustedReplaceFetchResponse(source,args){function hit(source){if(!0===source.verbose){try{var log=console.log.bind(console),trace=console.trace.bind(console),prefix=source.ruleText||\"\";if(source.domainName){var ruleStartIndex;source.ruleText.indexOf(\"#%#//\")>-1?ruleStartIndex=source.ruleText.indexOf(\"#%#//\"):source.ruleText.indexOf(\"##+js\")>-1&&(ruleStartIndex=source.ruleText.indexOf(\"##+js\"));var rulePart=source.ruleText.slice(ruleStartIndex);prefix=\"\".concat(source.domainName).concat(rulePart)}log(\"\".concat(prefix,\" trace start\")),trace&&trace(),log(\"\".concat(prefix,\" trace end\"))}catch(e){}\"function\"==typeof window.__debug&&window.__debug(source)}}function logMessage(source,message){var forced=arguments.length>2&&void 0!==arguments[2]&&arguments[2];(forced||source.verbose)&&console.log(\"\".concat(source.name,\": \").concat(message))}function getFetchData(args){var fetchUrl,fetchInit,entries,request,fetchPropsObj={};if(args[0]instanceof Request){var requestData=(request=args[0],entries=[\"url\",\"method\",\"headers\",\"body\",\"mode\",\"credentials\",\"cache\",\"redirect\",\"referrer\",\"referrerPolicy\",\"integrity\",\"keepalive\",\"signal\"].map((function(key){return[key,request[key]]})),entries.reduce((function(acc,el){var key=el[0],value=el[1];return acc[key]=value,acc}),{}));fetchUrl=requestData.url,fetchInit=requestData}else fetchUrl=args[0],fetchInit=args[1];return fetchPropsObj.url=fetchUrl,fetchInit instanceof Object&&Object.keys(fetchInit).forEach((function(prop){fetchPropsObj[prop]=fetchInit[prop]})),fetchPropsObj}function objectToString(obj){return function(obj){return 0===Object.keys(obj).length&&!obj.prototype}(obj)?\"{}\":(object=obj,keys=Object.keys(object),entries=[],keys.forEach((function(key){return entries.push([key,object[key]])})),entries).map((function(pair){var key=pair[0],value=pair[1],recordValueStr=value;return value instanceof Object&&(recordValueStr=\"{ \".concat(objectToString(value),\" }\")),\"\".concat(key,':\"').concat(recordValueStr,'\"')})).join(\" \");var object,keys,entries}function matchRequestProps(source,propsToMatch,requestData){if(\"\"===propsToMatch||\"*\"===propsToMatch)return!0;var isMatched,PROPS_DIVIDER,PAIRS_MARKER,LEGAL_MATCH_PROPS,propsObj,data,parsedData=(PROPS_DIVIDER=\" \",PAIRS_MARKER=\":\",LEGAL_MATCH_PROPS=[\"url\",\"method\",\"headers\",\"body\",\"mode\",\"credentials\",\"cache\",\"redirect\",\"referrer\",\"referrerPolicy\",\"integrity\",\"keepalive\",\"signal\"],propsObj={},propsToMatch.split(PROPS_DIVIDER).forEach((function(prop){var dividerInd=prop.indexOf(PAIRS_MARKER),key=prop.slice(0,dividerInd);if(-1!==LEGAL_MATCH_PROPS.indexOf(key)){var value=prop.slice(dividerInd+1);propsObj[key]=value}else propsObj.url=prop})),propsObj);if(data=parsedData,Object.values(data).every((function(value){return function(input){var isValid,FORWARD_SLASH=\"/\",str=function(str){return str.replace(/[.*+?^${}()|[\\]\\\\]/g,\"\\\\$&\")}(input);input[0]===FORWARD_SLASH&&input[input.length-1]===FORWARD_SLASH&&(str=input.slice(1,-1));try{isValid=new RegExp(str),isValid=!0}catch(e){isValid=!1}return isValid}(value)}))){var matchData=function(data){var matchData={};return Object.keys(data).forEach((function(key){matchData[key]=toRegExp(data[key])})),matchData}(parsedData);isMatched=Object.keys(matchData).every((function(matchKey){var matchValue=matchData[matchKey];return Object.prototype.hasOwnProperty.call(requestData,matchKey)&&matchValue.test(requestData[matchKey])}))}else logMessage(source,\"Invalid parameter: \".concat(propsToMatch)),isMatched=!1;return isMatched}function toRegExp(){var input=arguments.length>0&&void 0!==arguments[0]?arguments[0]:\"\",DEFAULT_VALUE=\".?\",FORWARD_SLASH=\"/\";if(\"\"===input)return new RegExp(DEFAULT_VALUE);if(input[0]===FORWARD_SLASH&&input[input.length-1]===FORWARD_SLASH)return new RegExp(input.slice(1,-1));var escaped=input.replace(/[.*+?^${}()|[\\]\\\\]/g,\"\\\\$&\");return new RegExp(escaped)}var updatedArgs=args?[].concat(source).concat(args):[source];try{(function(source){var pattern=arguments.length>1&&void 0!==arguments[1]?arguments[1]:\"\",replacement=arguments.length>2&&void 0!==arguments[2]?arguments[2]:\"\",propsToMatch=arguments.length>3&&void 0!==arguments[3]?arguments[3]:\"\";if(\"undefined\"!=typeof fetch&&\"undefined\"!=typeof Proxy&&\"undefined\"!=typeof Response)if(\"\"!==pattern||\"\"===replacement){var fetchData,shouldLog=\"\"===pattern&&\"\"===replacement,nativeFetch=fetch,handlerWrapper=function(target,thisArg,args){return fetchData=getFetchData(args),shouldLog?(logMessage(source,\"fetch( \".concat(objectToString(fetchData),\" )\"),!0),hit(source),Reflect.apply(target,thisArg,args)):matchRequestProps(source,propsToMatch,fetchData)?nativeFetch.apply(null,args).then((function(response){return response.text().then((function(bodyText){var patternRegexp=\"*\"===pattern?/(\\n|.)*/:toRegExp(pattern),modifiedTextContent=bodyText.replace(patternRegexp,replacement),forgedResponse=function(response,textContent){var bodyUsed=response.bodyUsed,headers=response.headers,ok=response.ok,redirected=response.redirected,status=response.status,statusText=response.statusText,type=response.type,url=response.url,forgedResponse=new Response(textContent,{status:status,statusText:statusText,headers:headers});return Object.defineProperties(forgedResponse,{url:{value:url},type:{value:type},ok:{value:ok},bodyUsed:{value:bodyUsed},redirected:{value:redirected}}),forgedResponse}(response,modifiedTextContent);return hit(source),forgedResponse})).catch((function(){var fetchDataStr=objectToString(fetchData),message=\"Response body can't be converted to text: \".concat(fetchDataStr);return logMessage(source,message),Reflect.apply(target,thisArg,args)}))})).catch((function(){return Reflect.apply(target,thisArg,args)})):Reflect.apply(target,thisArg,args)};fetch=new Proxy(fetch,{apply:handlerWrapper})}else logMessage(source,\"Pattern argument should not be empty string.\")}).apply(this,updatedArgs)}catch(e){console.log(e)}}"
},
{
"names": [
"trusted-set-local-storage-item"
],
- "scriptlet": "function trustedSetLocalStorageItem(source,args){function logMessage(source,message){var forced=arguments.length>2&&void 0!==arguments[2]&&arguments[2];(forced||source.verbose)&&console.log(\"\".concat(source.name,\": \").concat(message))}var updatedArgs=args?[].concat(source).concat(args):[source];try{(function(source,key,value){if(void 0!==key)if(void 0!==value){var parsedValue=function(rawValue){var CURRENT_DATE_KEYWORD=\"$currentDate$\",parsedValue=rawValue;return\"$now$\"===rawValue?parsedValue=Date.now().toString():rawValue===CURRENT_DATE_KEYWORD&&(parsedValue=Date()),parsedValue}(value);!function(source,storage,key,value){try{storage.setItem(key,value)}catch(e){logMessage(source,\"Unable to set sessionStorage item due to: \".concat(e.message))}}(source,window.localStorage,key,parsedValue),function(source,message){if(!0===source.verbose){try{var log=console.log.bind(console),trace=console.trace.bind(console),prefix=source.ruleText||\"\";if(source.domainName){var ruleStartIndex,AG_SCRIPTLET_MARKER=\"#%#//\",UBO_SCRIPTLET_MARKER=\"##+js\";source.ruleText.indexOf(AG_SCRIPTLET_MARKER)>-1?ruleStartIndex=source.ruleText.indexOf(AG_SCRIPTLET_MARKER):source.ruleText.indexOf(UBO_SCRIPTLET_MARKER)>-1&&(ruleStartIndex=source.ruleText.indexOf(UBO_SCRIPTLET_MARKER));var rulePart=source.ruleText.slice(ruleStartIndex);prefix=\"\".concat(source.domainName).concat(rulePart)}var LOG_MARKER=\"log: \";message&&(-1===message.indexOf(LOG_MARKER)?log(\"\".concat(prefix,\" message:\\n\").concat(message)):log(message.slice(LOG_MARKER.length))),log(\"\".concat(prefix,\" trace start\")),trace&&trace(),log(\"\".concat(prefix,\" trace end\"))}catch(e){}\"function\"==typeof window.__debug&&window.__debug(source)}}(source)}else logMessage(source,\"Item value should be specified.\");else logMessage(source,\"Item key should be specified.\")}).apply(this,updatedArgs)}catch(e){console.log(e)}}"
+ "scriptlet": "function trustedSetLocalStorageItem(source,args){function logMessage(source,message){var forced=arguments.length>2&&void 0!==arguments[2]&&arguments[2];(forced||source.verbose)&&console.log(\"\".concat(source.name,\": \").concat(message))}var updatedArgs=args?[].concat(source).concat(args):[source];try{(function(source,key,value){if(void 0!==key)if(void 0!==value){var parsedValue=function(rawValue){var CURRENT_DATE_KEYWORD=\"$currentDate$\",parsedValue=rawValue;return\"$now$\"===rawValue?parsedValue=Date.now().toString():rawValue===CURRENT_DATE_KEYWORD&&(parsedValue=Date()),parsedValue}(value);!function(source,storage,key,value){try{storage.setItem(key,value)}catch(e){logMessage(source,\"Unable to set sessionStorage item due to: \".concat(e.message))}}(source,window.localStorage,key,parsedValue),function(source){if(!0===source.verbose){try{var log=console.log.bind(console),trace=console.trace.bind(console),prefix=source.ruleText||\"\";if(source.domainName){var ruleStartIndex,AG_SCRIPTLET_MARKER=\"#%#//\",UBO_SCRIPTLET_MARKER=\"##+js\";source.ruleText.indexOf(AG_SCRIPTLET_MARKER)>-1?ruleStartIndex=source.ruleText.indexOf(AG_SCRIPTLET_MARKER):source.ruleText.indexOf(UBO_SCRIPTLET_MARKER)>-1&&(ruleStartIndex=source.ruleText.indexOf(UBO_SCRIPTLET_MARKER));var rulePart=source.ruleText.slice(ruleStartIndex);prefix=\"\".concat(source.domainName).concat(rulePart)}log(\"\".concat(prefix,\" trace start\")),trace&&trace(),log(\"\".concat(prefix,\" trace end\"))}catch(e){}\"function\"==typeof window.__debug&&window.__debug(source)}}(source)}else logMessage(source,\"Item value should be specified.\");else logMessage(source,\"Item key should be specified.\")}).apply(this,updatedArgs)}catch(e){console.log(e)}}"
}
]
}
\ No newline at end of file
diff --git a/dist/scriptlets.js b/dist/scriptlets.js
index a6d245cd..6cc3c1d5 100644
--- a/dist/scriptlets.js
+++ b/dist/scriptlets.js
@@ -1,7 +1,7 @@
/**
* AdGuard Scriptlets
- * Version 1.7.3
+ * Version 1.7.20
*/
(function () {
@@ -12,20 +12,21 @@
*/
function attachDependencies(scriptlet) {
var _scriptlet$injections = scriptlet.injections,
- injections = _scriptlet$injections === void 0 ? [] : _scriptlet$injections;
+ injections = _scriptlet$injections === void 0 ? [] : _scriptlet$injections;
return injections.reduce(function (accum, dep) {
return "".concat(accum, "\n").concat(dep.toString());
}, scriptlet.toString());
}
+
/**
* Add scriptlet call to existing code
* @param {Function} scriptlet
* @param {string} code
*/
-
function addCall(scriptlet, code) {
return "".concat(code, "\n const updatedArgs = args ? [].concat(source).concat(args) : [source];\n try {\n ").concat(scriptlet.name, ".apply(this, updatedArgs);\n } catch (e) {\n console.log(e);\n }");
}
+
/**
* Wrap function into IIFE (Immediately invoked function expression)
*
@@ -49,29 +50,24 @@
* noeval.apply(this, args);
* )({"args": ["aaa", "bbb"], "name":"noeval"}, ["aaa", "bbb"])`
*/
-
function passSourceAndProps(source, code) {
var redirect = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;
-
if (source.hit) {
source.hit = source.hit.toString();
}
-
var sourceString = JSON.stringify(source);
var argsString = source.args ? "[".concat(source.args.map(JSON.stringify), "]") : undefined;
var params = argsString ? "".concat(sourceString, ", ").concat(argsString) : sourceString;
-
if (redirect) {
return "(function(source, args){\n".concat(code, "\n})(").concat(params, ");");
}
-
return "(".concat(code, ")(").concat(params, ");");
}
+
/**
* Wrap code in no name function
* @param {string} code which must be wrapped
*/
-
function wrapInNonameFunc(code) {
return "function(source, args){\n".concat(code, "\n}");
}
@@ -91,6 +87,7 @@
});
return entries;
};
+
/**
* Converts array of pairs to object.
* Object.fromEntries() polyfill because it is not supported by IE
@@ -98,7 +95,6 @@
* @param {Array} entries - array of pairs
* @returns {Object}
*/
-
var getObjectFromEntries = function getObjectFromEntries(entries) {
var output = entries.reduce(function (acc, el) {
var key = el[0];
@@ -108,31 +104,30 @@
}, {});
return output;
};
+
/**
* Checks whether the obj is an empty object
* @param {Object} obj
* @returns {boolean}
*/
-
var isEmptyObject = function isEmptyObject(obj) {
- return Object.keys(obj).length === 0;
+ return Object.keys(obj).length === 0 && !obj.prototype;
};
+
/**
* Checks whether the obj is an empty object
* @param {Object} obj
* @param {string} prop
* @returns {Object|null}
*/
-
var safeGetDescriptor = function safeGetDescriptor(obj, prop) {
var descriptor = Object.getOwnPropertyDescriptor(obj, prop);
-
if (descriptor && descriptor.configurable) {
return descriptor;
}
-
return null;
};
+
/**
* Set getter and setter to property if it's configurable
* @param {Object} object target object with property
@@ -140,14 +135,11 @@
* @param {PropertyDescriptor} descriptor contains getter and setter functions
* @returns {boolean} is operation successful
*/
-
function setPropertyAccess(object, property, descriptor) {
var currentDescriptor = Object.getOwnPropertyDescriptor(object, property);
-
if (currentDescriptor && !currentDescriptor.configurable) {
return false;
}
-
Object.defineProperty(object, property, descriptor);
return true;
}
@@ -163,29 +155,30 @@
var native = Number.isNaN || window.isNaN;
return native(num);
};
+
/**
* Determines whether the passed value is a finite number
* https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Number/isFinite
* @param {*} num
* @returns {boolean}
*/
-
var nativeIsFinite = function nativeIsFinite(num) {
// eslint-disable-next-line no-restricted-properties
var native = Number.isFinite || window.isFinite;
return native(num);
};
+
/**
* Parses string for a number, if possible, otherwise returns null.
* @param {*} rawString
* @returns {number|null}
*/
-
var getNumberFromString = function getNumberFromString(rawString) {
var parsedDelay = parseInt(rawString, 10);
var validDelay = nativeIsNaN(parsedDelay) ? null : parsedDelay;
return validDelay;
};
+
/**
* Generate a random integer between two values, inclusive
* https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/random#getting_a_random_integer_between_two_values_inclusive
@@ -193,7 +186,6 @@
* @param {number} max
* @returns {number}
*/
-
function getRandomIntInclusive(min, max) {
min = Math.ceil(min);
max = Math.floor(max);
@@ -207,19 +199,19 @@
* @param {string} newSubstr replacement
* @returns {string}
*/
-
var replaceAll = function replaceAll(input, substr, newSubstr) {
return input.split(substr).join(newSubstr);
};
+
/**
* Escapes special chars in string
* @param {string} str
* @returns {string}
*/
-
var escapeRegExp = function escapeRegExp(str) {
return str.replace(/[.*+?^${}()|[\]\\]/g, '\\$&');
};
+
/**
* A literal string or regexp pattern wrapped in forward slashes.
* For example, 'simpleStr' or '/adblock|_0x/'.
@@ -233,77 +225,69 @@
* @returns {RegExp} regular expression; defaults to /.?/
* @throws {SyntaxError} Throw an error for invalid regex pattern
*/
-
var toRegExp = function toRegExp() {
var input = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : '';
var DEFAULT_VALUE = '.?';
var FORWARD_SLASH = '/';
-
if (input === '') {
return new RegExp(DEFAULT_VALUE);
}
-
if (input[0] === FORWARD_SLASH && input[input.length - 1] === FORWARD_SLASH) {
return new RegExp(input.slice(1, -1));
}
-
var escaped = input.replace(/[.*+?^${}()|[\]\\]/g, '\\$&');
return new RegExp(escaped);
};
+
/**
* Checks whether the input string can be converted to regexp
* @param {RawStrPattern} input literal string or regexp pattern
* @returns {boolean}
*/
-
var isValidStrPattern = function isValidStrPattern(input) {
var FORWARD_SLASH = '/';
var str = escapeRegExp(input);
-
if (input[0] === FORWARD_SLASH && input[input.length - 1] === FORWARD_SLASH) {
str = input.slice(1, -1);
}
-
var isValid;
-
try {
isValid = new RegExp(str);
isValid = true;
} catch (e) {
isValid = false;
}
-
return isValid;
};
+
/**
* Get string before regexp first match
* @param {string} str
* @param {RegExp} rx
*/
-
var getBeforeRegExp = function getBeforeRegExp(str, rx) {
var index = str.search(rx);
return str.substring(0, index);
};
+
/**
* Checks whether the string starts with the substring
* @param {string} str full string
* @param {string} prefix substring
* @returns {boolean}
*/
-
- var startsWith = function startsWith(str, prefix) {
+ var startsWith$1 = function startsWith(str, prefix) {
// if str === '', (str && false) will return ''
// that's why it has to be !!str
return !!str && str.indexOf(prefix) === 0;
};
+
/**
* Checks whether the string ends with the substring
* @param {string} str full string
* @param {string} ending substring
* @returns {boolean}
*/
-
var endsWith = function endsWith(str, ending) {
// if str === '', (str && false) will return ''
// that's why it has to be !!str
@@ -313,7 +297,6 @@
if (!str) {
return str;
}
-
var index = str.indexOf(separator);
return index < 0 ? '' : str.substring(index + separator.length);
};
@@ -321,44 +304,41 @@
if (!str || !separator) {
return str;
}
-
var index = str.indexOf(separator);
return index < 0 ? str : str.substring(0, index);
};
+
/**
* Wrap str in single quotes and replaces single quotes to double one
* @param {string} str
*/
-
var wrapInSingleQuotes = function wrapInSingleQuotes(str) {
if (str[0] === '\'' && str[str.length - 1] === '\'' || str[0] === '"' && str[str.length - 1] === '"') {
str = str.substring(1, str.length - 1);
- } // eslint-disable-next-line no-useless-escape
-
-
+ }
+ // eslint-disable-next-line no-useless-escape
str = str.replace(/\'/g, '"');
return "'".concat(str, "'");
};
+
/**
* Returns substring enclosed in the widest braces
* @param {string} str
*/
-
var getStringInBraces = function getStringInBraces(str) {
var firstIndex = str.indexOf('(');
var lastIndex = str.lastIndexOf(')');
return str.substring(firstIndex + 1, lastIndex);
};
+
/**
* Prepares RTCPeerConnection config as string for proper logging
* @param {*} config
* @returns {string} stringified config
*/
-
var convertRtcConfigToString = function convertRtcConfigToString(config) {
var UNDEF_STR = 'undefined';
var str = UNDEF_STR;
-
if (config === null) {
str = 'null';
} else if (config instanceof Object) {
@@ -371,49 +351,44 @@
],
};
*/
-
if (Object.prototype.hasOwnProperty.call(config, SERVERS_PROP_NAME) && Object.prototype.hasOwnProperty.call(config[SERVERS_PROP_NAME][0], URLS_PROP_NAME) && !!config[SERVERS_PROP_NAME][0][URLS_PROP_NAME]) {
str = config[SERVERS_PROP_NAME][0][URLS_PROP_NAME].toString();
}
}
-
return str;
};
+
/**
* Checks whether the match input string can be converted to regexp,
* used for match inputs with possible negation
* @param {string} match literal string or regexp pattern
* @returns {boolean}
*/
-
var isValidMatchStr = function isValidMatchStr(match) {
var INVERT_MARKER = '!';
var str = match;
-
- if (startsWith(match, INVERT_MARKER)) {
+ if (startsWith$1(match, INVERT_MARKER)) {
str = match.slice(1);
}
-
return isValidStrPattern(str);
};
+
/**
* Validates the match input number,
* used for match inputs with possible negation
* @param {string} match string of match number
* @returns {boolean}
*/
-
var isValidMatchNumber = function isValidMatchNumber(match) {
var INVERT_MARKER = '!';
var str = match;
-
- if (startsWith(match, INVERT_MARKER)) {
+ if (startsWith$1(match, INVERT_MARKER)) {
str = match.slice(1);
}
-
var num = parseFloat(str);
return !nativeIsNaN(num) && nativeIsFinite(num);
};
+
/**
* @typedef {Object} MatchData
* @property {boolean} isInvertedMatch
@@ -427,10 +402,9 @@
* @param {string} match
* @returns {MatchData}
*/
-
var parseMatchArg = function parseMatchArg(match) {
var INVERT_MARKER = '!';
- var isInvertedMatch = startsWith(match, INVERT_MARKER);
+ var isInvertedMatch = startsWith$1(match, INVERT_MARKER);
var matchValue = isInvertedMatch ? match.slice(1) : match;
var matchRegexp = toRegExp(matchValue);
return {
@@ -438,6 +412,7 @@
matchRegexp: matchRegexp
};
};
+
/**
* @typedef {Object} DelayData
* @property {boolean} isInvertedDelayMatch
@@ -452,10 +427,9 @@
* `isInvertedDelayMatch` is boolean,
* `delayMatch` is number OR null for invalid `delay`
*/
-
var parseDelayArg = function parseDelayArg(delay) {
var INVERT_MARKER = '!';
- var isInvertedDelayMatch = startsWith(delay, INVERT_MARKER);
+ var isInvertedDelayMatch = startsWith$1(delay, INVERT_MARKER);
var delayValue = isInvertedDelayMatch ? delay.slice(1) : delay;
delayValue = parseInt(delayValue, 10);
var delayMatch = nativeIsNaN(delayValue) ? null : delayValue;
@@ -464,34 +438,31 @@
delayMatch: delayMatch
};
};
+
/**
* Converts object to string for logging
* @param {Object} obj data object
* @returns {string}
*/
-
var objectToString = function objectToString(obj) {
return isEmptyObject(obj) ? '{}' : getObjectEntries(obj).map(function (pair) {
var key = pair[0];
var value = pair[1];
var recordValueStr = value;
-
if (value instanceof Object) {
recordValueStr = "{ ".concat(objectToString(value), " }");
}
-
return "".concat(key, ":\"").concat(recordValueStr, "\"");
}).join(' ');
};
+
/**
* Converts types into a string
* @param {*} value
* @returns {string}
*/
-
var convertTypeToString = function convertTypeToString(value) {
var output;
-
if (typeof value === 'undefined') {
output = 'undefined';
} else if (typeof value === 'object') {
@@ -503,68 +474,58 @@
} else {
output = value.toString();
}
-
return output;
};
+
/**
* Generate a random string, a length of the string is provided as an argument
* @param {number} length
* @returns {string}
*/
-
function getRandomStrByLength(length) {
var result = '';
var characters = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789!@#$%^&*()_+=~';
var charactersLength = characters.length;
-
for (var i = 0; i < length; i += 1) {
result += characters.charAt(Math.floor(Math.random() * charactersLength));
}
-
return result;
}
+
/**
* Generate a random string
* @param {string} customResponseText
* @returns {string|null} random string or null if passed argument is invalid
*/
-
function generateRandomResponse(customResponseText) {
var customResponse = customResponseText;
-
if (customResponse === 'true') {
// Generate random alphanumeric string of 10 symbols
customResponse = Math.random().toString(36).slice(-10);
return customResponse;
}
-
customResponse = customResponse.replace('length:', '');
- var rangeRegex = /^\d+-\d+$/; // Return empty string if range is invalid
-
+ var rangeRegex = /^\d+-\d+$/;
+ // Return empty string if range is invalid
if (!rangeRegex.test(customResponse)) {
return null;
}
-
var rangeMin = getNumberFromString(customResponse.split('-')[0]);
var rangeMax = getNumberFromString(customResponse.split('-')[1]);
-
if (!nativeIsFinite(rangeMin) || !nativeIsFinite(rangeMax)) {
return null;
- } // If rangeMin > rangeMax, swap variables
-
+ }
+ // If rangeMin > rangeMax, swap variables
if (rangeMin > rangeMax) {
var temp = rangeMin;
rangeMin = rangeMax;
rangeMax = temp;
}
-
var LENGTH_RANGE_LIMIT = 500 * 1000;
-
if (rangeMax > LENGTH_RANGE_LIMIT) {
return null;
}
-
var length = getRandomIntInclusive(rangeMin, rangeMax);
customResponse = getRandomStrByLength(length);
return customResponse;
@@ -581,10 +542,8 @@
} else {
obj[key] = value;
}
-
return obj;
}
-
var defineProperty = _defineProperty;
/**
@@ -596,76 +555,65 @@
*/
function iterateWithTransitions(iterable, transitions, init, args) {
var state = init || Object.keys(transitions)[0];
-
for (var i = 0; i < iterable.length; i += 1) {
state = transitions[state](iterable, i, args);
}
-
return state;
}
+
/**
* AdGuard scriptlet rule mask
*/
-
-
var ADG_SCRIPTLET_MASK = '#//scriptlet';
+
/**
* Helper to accumulate an array of strings char by char
*/
-
var wordSaver = function wordSaver() {
var str = '';
var strs = [];
-
var saveSymb = function saveSymb(s) {
str += s;
return str;
};
-
var saveStr = function saveStr() {
strs.push(str);
str = '';
};
-
var getAll = function getAll() {
return [].concat(strs);
};
-
return {
saveSymb: saveSymb,
saveStr: saveStr,
getAll: getAll
};
};
-
var substringAfter = function substringAfter(str, separator) {
if (!str) {
return str;
}
-
var index = str.indexOf(separator);
return index < 0 ? '' : str.substring(index + separator.length);
};
+
/**
* Parse and validate scriptlet rule
* @param {*} ruleText
* @returns {{name: string, args: Array}}
*/
-
-
var parseRule = function parseRule(ruleText) {
var _transitions;
-
ruleText = substringAfter(ruleText, ADG_SCRIPTLET_MASK);
/**
* Transition names
*/
-
var TRANSITION = {
OPENED: 'opened',
PARAM: 'param',
CLOSED: 'closed'
};
+
/**
* Transition function: the current index position in start, end or between params
* @param {string} rule
@@ -673,12 +621,10 @@
* @param {Object} Object
* @property {Object} Object.sep contains prop symb with current separator char
*/
-
var opened = function opened(rule, index, _ref) {
var sep = _ref.sep;
var char = rule[index];
var transition;
-
switch (char) {
case ' ':
case '(':
@@ -687,7 +633,6 @@
transition = TRANSITION.OPENED;
break;
}
-
case '\'':
case '"':
{
@@ -695,19 +640,16 @@
transition = TRANSITION.PARAM;
break;
}
-
case ')':
{
transition = index === rule.length - 1 ? TRANSITION.CLOSED : TRANSITION.OPENED;
break;
}
-
default:
{
throw new Error('The rule is not a scriptlet');
}
}
-
return transition;
};
/**
@@ -718,20 +660,16 @@
* @property {Object} Object.sep contains prop `symb` with current separator char
* @property {Object} Object.saver helper which allow to save strings by car by char
*/
-
-
var param = function param(rule, index, _ref2) {
var saver = _ref2.saver,
- sep = _ref2.sep;
+ sep = _ref2.sep;
var char = rule[index];
-
switch (char) {
case '\'':
case '"':
{
var preIndex = index - 1;
var before = rule[preIndex];
-
if (char === sep.symb && before !== '\\') {
sep.symb = null;
saver.saveStr();
@@ -739,7 +677,6 @@
}
}
// eslint-disable-next-line no-fallthrough
-
default:
{
saver.saveSymb(char);
@@ -747,7 +684,6 @@
}
}
};
-
var transitions = (_transitions = {}, defineProperty(_transitions, TRANSITION.OPENED, opened), defineProperty(_transitions, TRANSITION.PARAM, param), defineProperty(_transitions, TRANSITION.CLOSED, function () {}), _transitions);
var sep = {
symb: null
@@ -757,11 +693,9 @@
sep: sep,
saver: saver
});
-
if (state !== 'closed') {
throw new Error("Invalid scriptlet rule ".concat(ruleText));
}
-
var args = saver.getAll();
return {
name: args[0],
@@ -778,24 +712,25 @@
// https://github.com/AdguardTeam/Scriptlets/issues/125
return typeof type !== 'undefined';
};
+
/**
* Validates event listener
* @param {*} listener
* @returns {boolean}
*/
-
var validateListener = function validateListener(listener) {
// https://developer.mozilla.org/en-US/docs/Web/API/EventTarget/addEventListener#parameters
- return typeof listener !== 'undefined' && (typeof listener === 'function' || typeof listener === 'object' // https://github.com/AdguardTeam/Scriptlets/issues/76
+ return typeof listener !== 'undefined' && (typeof listener === 'function' || typeof listener === 'object'
+ // https://github.com/AdguardTeam/Scriptlets/issues/76
&& listener !== null && typeof listener.handleEvent === 'function');
};
+
/**
* Serialize valid event listener
* https://developer.mozilla.org/en-US/docs/Web/API/EventListener
* @param {EventListener} listener valid listener
* @returns {string}
*/
-
var listenerToString = function listenerToString(listener) {
return typeof listener === 'function' ? listener.toString() : listener.handleEvent.toString();
};
@@ -803,12 +738,12 @@
var shouldMatchAnyDelay = function shouldMatchAnyDelay(delay) {
return delay === '*';
};
+
/**
* Handles input delay value
* @param {*} delay
* @returns {number} proper number delay value
*/
-
var getMatchDelay = function getMatchDelay(delay) {
var DEFAULT_DELAY = 1000;
var parsedDelay = parseInt(delay, 10);
@@ -816,22 +751,22 @@
: parsedDelay;
return delayMatch;
};
+
/**
* Checks delay match condition
* @param {*} inputDelay
* @param {number} realDelay
* @returns {boolean}
*/
-
var isDelayMatched = function isDelayMatched(inputDelay, realDelay) {
return shouldMatchAnyDelay(inputDelay) || realDelay === getMatchDelay(inputDelay);
};
+
/**
* Handles input boost value
* @param {*} boost
* @returns {number} proper number boost multiplier value
*/
-
var getBoostMultiplier = function getBoostMultiplier(boost) {
var DEFAULT_MULTIPLIER = 0.05;
var MIN_MULTIPLIER = 0.02;
@@ -839,15 +774,12 @@
var parsedBoost = parseFloat(boost);
var boostMultiplier = nativeIsNaN(parsedBoost) || !nativeIsFinite(parsedBoost) ? DEFAULT_MULTIPLIER // default scriptlet value
: parsedBoost;
-
if (boostMultiplier < MIN_MULTIPLIER) {
boostMultiplier = MIN_MULTIPLIER;
}
-
if (boostMultiplier > MAX_MULTIPLIER) {
boostMultiplier = MAX_MULTIPLIER;
}
-
return boostMultiplier;
};
@@ -863,11 +795,9 @@
return stack.push(el);
});
var res = [];
-
while (stack.length) {
// pop value from stack
var next = stack.pop();
-
if (Array.isArray(next)) {
// push back array items, won't modify the original input
next.forEach(function (el) {
@@ -876,43 +806,20 @@
} else {
res.push(next);
}
- } // reverse to restore input order
-
-
+ }
+ // reverse to restore input order
return res.reverse();
};
+
/**
* Predicate method to check if the array item exists
* @param {any} item
* @returns {boolean}
*/
-
var isExisting = function isExisting(item) {
return !!item;
};
- /**
- * @typedef { import('../scriptlets/index').Source } Source
- */
-
- /**
- * Conditionally logs message to console.
- * Convention is to log messages by source.verbose if such log
- * is not a part of scriptlet's functionality, eg on invalid input,
- * and use 'forced' argument otherwise.
- * @param {Source} source required
- * @param {string} message required, message to log
- * @param {boolean} [forced=false] to log message unconditionally
- */
- var logMessage = function logMessage(source, message) {
- var forced = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;
-
- if (forced || source.verbose) {
- // eslint-disable-next-line no-console
- console.log("".concat(source.name, ": ").concat(message));
- }
- };
-
/**
* @typedef { import('../scriptlets/index').Source } Source
*/
@@ -924,10 +831,10 @@
*
* @returns {boolean}
*/
-
- var isValidCookieRawPath = function isValidCookieRawPath(rawPath) {
+ var isValidCookiePath = function isValidCookiePath(rawPath) {
return rawPath === '/' || rawPath === 'none';
};
+
/**
* Returns 'path=/' if rawPath is '/'
* or empty string '' for other cases, `rawPath === 'none'` included
@@ -936,53 +843,41 @@
*
* @returns {string}
*/
-
var getCookiePath = function getCookiePath(rawPath) {
if (rawPath === '/') {
return 'path=/';
- } // otherwise do not set path as invalid
+ }
+ // otherwise do not set path as invalid
// the same for pathArg === 'none'
- //
-
-
return '';
};
+
/**
* Combines input cookie name, value, and path into string.
*
- * @param {Source} source
* @param {string} rawName
* @param {string} rawValue
* @param {string} rawPath
*
- * @returns {string} string OR `null` if path is not supported
+ * @returns {string|null} string OR `null` if path is not supported
*/
-
- var concatCookieNameValuePath = function concatCookieNameValuePath(source, rawName, rawValue, rawPath) {
- if (!isValidCookieRawPath(rawPath)) {
- logMessage(source, "Invalid cookie path: '".concat(rawPath, "'"));
- return null;
- } // eslint-disable-next-line max-len
-
-
- return "".concat(encodeURIComponent(rawName), "=").concat(encodeURIComponent(rawValue), "; ").concat(getCookiePath(rawPath));
+ var concatCookieNameValuePath = function concatCookieNameValuePath(rawName, rawValue, rawPath) {
+ // eslint-disable-next-line max-len
+ return "".concat(encodeURIComponent(rawName), "=").concat(encodeURIComponent(rawValue), "; ").concat(getCookiePath(rawPath), ";");
};
+
/**
* Gets supported cookie value
*
- * @param {Source} source
* @param {string} value input cookie value
*
* @returns {string|null} valid cookie string if ok OR null if not
*/
-
- var getLimitedCookieValue = function getLimitedCookieValue(source, value) {
+ var getLimitedCookieValue = function getLimitedCookieValue(value) {
if (!value) {
return null;
}
-
var validValue;
-
if (value === 'true') {
validValue = 'true';
} else if (value === 'True') {
@@ -1005,51 +900,46 @@
validValue = 'OK';
} else if (/^\d+$/.test(value)) {
validValue = parseFloat(value);
-
if (nativeIsNaN(validValue)) {
- logMessage(source, "Invalid cookie value: '".concat(value, "'"));
return null;
}
-
if (Math.abs(validValue) < 0 || Math.abs(validValue) > 15) {
- logMessage(source, "Invalid cookie value: '".concat(value, "'"));
return null;
}
} else {
return null;
}
-
return validValue;
};
+
/**
* Parses cookie string into object
* @param {string} cookieString string that conforms to document.cookie format
* @returns {Object} key:value object that corresponds with incoming cookies keys and values
*/
-
var parseCookieString = function parseCookieString(cookieString) {
var COOKIE_DELIMITER = '=';
- var COOKIE_PAIRS_DELIMITER = ';'; // Get raw cookies
+ var COOKIE_PAIRS_DELIMITER = ';';
+ // Get raw cookies
var cookieChunks = cookieString.split(COOKIE_PAIRS_DELIMITER);
var cookieData = {};
cookieChunks.forEach(function (singleCookie) {
var cookieKey;
var cookieValue;
var delimiterIndex = singleCookie.indexOf(COOKIE_DELIMITER);
-
if (delimiterIndex === -1) {
cookieKey = singleCookie.trim();
} else {
cookieKey = singleCookie.slice(0, delimiterIndex).trim();
cookieValue = singleCookie.slice(delimiterIndex + 1);
- } // Save cookie key=value data with null instead of empty ('') values
-
-
+ }
+ // Save cookie key=value data with null instead of empty ('') values
cookieData[cookieKey] = cookieValue || null;
});
return cookieData;
};
+
/**
* Check if cookie with specified name and value is present in a cookie string
* @param {string} cookieString
@@ -1057,85 +947,110 @@
* @param {string} value
* @returns {boolean}
*/
-
var isCookieSetWithValue = function isCookieSetWithValue(cookieString, name, value) {
return cookieString.split(';').some(function (cookieStr) {
var pos = cookieStr.indexOf('=');
-
if (pos === -1) {
return false;
}
-
var cookieName = cookieStr.slice(0, pos).trim();
var cookieValue = cookieStr.slice(pos + 1).trim();
return name === cookieName && value === cookieValue;
});
};
+ /**
+ * Returns parsed offset expired number of ms or null if `offsetExpiresSec` is invalid
+ *
+ * @param {string} offsetExpiresSec input offset param in seconds
+ * @returns {number|null} number is milliseconds OR null
+ */
+ var getTrustedCookieOffsetMs = function getTrustedCookieOffsetMs(offsetExpiresSec) {
+ var ONE_YEAR_EXPIRATION_KEYWORD = '1year';
+ var ONE_DAY_EXPIRATION_KEYWORD = '1day';
+ var MS_IN_SEC = 1000;
+ var SECONDS_IN_YEAR = 365 * 24 * 60 * 60;
+ var SECONDS_IN_DAY = 24 * 60 * 60;
+ var parsedSec;
+ // Set predefined expire value if corresponding keyword was passed
+ if (offsetExpiresSec === ONE_YEAR_EXPIRATION_KEYWORD) {
+ parsedSec = SECONDS_IN_YEAR;
+ } else if (offsetExpiresSec === ONE_DAY_EXPIRATION_KEYWORD) {
+ parsedSec = SECONDS_IN_DAY;
+ } else {
+ parsedSec = Number.parseInt(offsetExpiresSec, 10);
+ // If offsetExpiresSec has been parsed to NaN - do not set cookie at all
+ if (Number.isNaN(parsedSec)) {
+ return null;
+ }
+ }
+ return parsedSec * MS_IN_SEC;
+ };
+
/**
* Noop function
* @return {undefined} undefined
*/
var noopFunc = function noopFunc() {};
+
/**
* Function returns null
* @return {null} null
*/
-
var noopNull = function noopNull() {
return null;
};
+
/**
* Function returns true
* @return {boolean} true
*/
-
var trueFunc = function trueFunc() {
return true;
};
+
/**
* Function returns false
* @return {boolean} false
*/
-
var falseFunc = function falseFunc() {
return false;
};
+
/**
* Function returns this
*/
-
function noopThis() {
return this;
}
+
/**
* Function returns empty string
* @return {string} empty string
*/
-
var noopStr = function noopStr() {
return '';
};
+
/**
* Function returns empty array
* @return {Array} empty array
*/
-
var noopArray = function noopArray() {
return [];
};
+
/**
* Function returns empty object
* @return {Object} empty object
*/
-
var noopObject = function noopObject() {
return {};
};
+
/**
* Function returns Promise.reject()
*/
-
var noopPromiseReject = function noopPromiseReject() {
return Promise.reject();
}; // eslint-disable-line compat/compat
@@ -1145,23 +1060,21 @@
* @param {string} [url=''] value of response url to set on response object
* @param {string} [response='default'] value of response type to set on response object
*/
-
var noopPromiseResolve = function noopPromiseResolve() {
var responseBody = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : '{}';
var responseUrl = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : '';
var responseType = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 'default';
-
if (typeof Response === 'undefined') {
return;
- } // eslint-disable-next-line compat/compat
-
-
+ }
+ // eslint-disable-next-line compat/compat
var response = new Response(responseBody, {
status: 200,
statusText: 'OK'
- }); // Mock response' url & type to avoid adb checks
- // https://github.com/AdguardTeam/Scriptlets/issues/216
+ });
+ // Mock response' url & type to avoid adb checks
+ // https://github.com/AdguardTeam/Scriptlets/issues/216
Object.defineProperties(response, {
url: {
value: responseUrl
@@ -1169,8 +1082,9 @@
type: {
value: responseType
}
- }); // eslint-disable-next-line compat/compat, consistent-return
+ });
+ // eslint-disable-next-line compat/compat, consistent-return
return Promise.resolve(response);
};
@@ -1182,60 +1096,49 @@
* @param {string} stackTrace - script error stack trace
* @returns {boolean}
*/
-
- var shouldAbortInlineOrInjectedScript$1 = function shouldAbortInlineOrInjectedScript(stackMatch, stackTrace) {
+ var shouldAbortInlineOrInjectedScript = function shouldAbortInlineOrInjectedScript(stackMatch, stackTrace) {
var INLINE_SCRIPT_STRING = 'inlineScript';
var INJECTED_SCRIPT_STRING = 'injectedScript';
var INJECTED_SCRIPT_MARKER = '';
-
var isInlineScript = function isInlineScript(stackMatch) {
return stackMatch.indexOf(INLINE_SCRIPT_STRING) > -1;
};
-
var isInjectedScript = function isInjectedScript(stackMatch) {
return stackMatch.indexOf(INJECTED_SCRIPT_STRING) > -1;
};
-
if (!(isInlineScript(stackMatch) || isInjectedScript(stackMatch))) {
return false;
}
-
var documentURL = window.location.href;
- var pos = documentURL.indexOf('#'); // Remove URL hash
+ var pos = documentURL.indexOf('#');
+ // Remove URL hash
// in Chrome, URL in stackTrace doesn't contain hash
// so, it's necessary to remove it, otherwise location.href
// will not match with location from stackTrace
-
if (pos !== -1) {
documentURL = documentURL.slice(0, pos);
}
-
var stackSteps = stackTrace.split('\n').slice(2).map(function (line) {
return line.trim();
});
var stackLines = stackSteps.map(function (line) {
- var stack; // Get stack trace URL
+ var stack;
+ // Get stack trace URL
// in Firefox stack trace looks like this: advanceTaskQueue@http://127.0.0.1:8080/scriptlets/tests/dist/qunit.js:1834:20
// in Chrome like this: at Assert.throws (http://127.0.0.1:8080/scriptlets/tests/dist/qunit.js:3178:16)
// so, first group "(.*?@)" is required for Firefox, second group contains URL
-
var getStackTraceURL = /(.*?@)?(\S+)(:\d+):\d+\)?$/.exec(line);
-
if (getStackTraceURL) {
var stackURL = getStackTraceURL[2];
-
- if (startsWith(stackURL, '(')) {
+ if (startsWith$1(stackURL, '(')) {
stackURL = stackURL.slice(1);
}
-
- if (startsWith(stackURL, INJECTED_SCRIPT_MARKER)) {
+ if (startsWith$1(stackURL, INJECTED_SCRIPT_MARKER)) {
stackURL = INJECTED_SCRIPT_STRING;
var stackFunction = getStackTraceURL[1] !== undefined ? getStackTraceURL[1].slice(0, -1) : line.slice(0, getStackTraceURL.index).trim();
-
- if (startsWith(stackFunction, 'at')) {
+ if (startsWith$1(stackFunction, 'at')) {
stackFunction = stackFunction.slice(2).trim();
}
-
stack = "".concat(stackFunction, " ").concat(stackURL).trim();
} else {
stack = stackURL;
@@ -1243,22 +1146,18 @@
} else {
stack = line;
}
-
return stack;
});
-
if (stackLines) {
for (var index = 0; index < stackLines.length; index += 1) {
if (isInlineScript(stackMatch) && documentURL === stackLines[index]) {
return true;
}
-
- if (isInjectedScript(stackMatch) && startsWith(stackLines[index], INJECTED_SCRIPT_STRING)) {
+ if (isInjectedScript(stackMatch) && startsWith$1(stackLines[index], INJECTED_SCRIPT_STRING)) {
return true;
}
}
}
-
return false;
};
@@ -1267,13 +1166,12 @@
* @param {HTMLElement} rootElement
* @returns {HTMLElement[]} shadow-dom hosts
*/
-
var findHostElements = function findHostElements(rootElement) {
- var hosts = []; // Element.querySelectorAll() returns list of elements
+ var hosts = [];
+ // Element.querySelectorAll() returns list of elements
// which are defined in DOM of Element.
// Meanwhile, inner DOM of the element with shadowRoot property
// is absolutely another DOM and which can not be reached by querySelectorAll('*')
-
var domElems = rootElement.querySelectorAll('*');
domElems.forEach(function (el) {
if (el.shadowRoot) {
@@ -1282,6 +1180,7 @@
});
return hosts;
};
+
/**
* A collection of nodes.
*
@@ -1303,23 +1202,25 @@
* @param {HTMLElement[]|external:NodeList} hostElements
* @returns {PierceData}
*/
-
var pierceShadowDom = function pierceShadowDom(selector, hostElements) {
var targets = [];
- var innerHostsAcc = []; // it's possible to get a few hostElements found by baseSelector on the page
+ var innerHostsAcc = [];
+ // it's possible to get a few hostElements found by baseSelector on the page
hostElements.forEach(function (host) {
// check presence of selector element inside base element if it's not in shadow-dom
var simpleElems = host.querySelectorAll(selector);
targets = targets.concat([].slice.call(simpleElems));
var shadowRootElem = host.shadowRoot;
var shadowChildren = shadowRootElem.querySelectorAll(selector);
- targets = targets.concat([].slice.call(shadowChildren)); // find inner shadow-dom hosts inside processing shadow-dom
+ targets = targets.concat([].slice.call(shadowChildren));
+ // find inner shadow-dom hosts inside processing shadow-dom
innerHostsAcc.push(findHostElements(shadowRootElem));
- }); // if there were more than one host element,
- // innerHostsAcc is an array of arrays and should be flatten
+ });
+ // if there were more than one host element,
+ // innerHostsAcc is an array of arrays and should be flatten
var innerHosts = flatten(innerHostsAcc);
return {
targets: targets,
@@ -1332,13 +1233,14 @@
* @param {*} callback
* @returns {boolean}
*/
-
var isValidCallback = function isValidCallback(callback) {
- return callback instanceof Function // passing string as 'code' arg is not recommended
+ return callback instanceof Function
+ // passing string as 'code' arg is not recommended
// but it is possible and not restricted
// https://developer.mozilla.org/en-US/docs/Web/API/setTimeout#parameters
|| typeof callback === 'string';
};
+
/**
* Checks whether 'callback' and 'delay' are matching
* by given parameters 'matchCallback' and 'matchDelay'.
@@ -1346,36 +1248,29 @@
* @param {Object} { callback, delay, matchCallback, matchDelay }
* @returns {boolean}
*/
-
var isPreventionNeeded = function isPreventionNeeded(_ref) {
var callback = _ref.callback,
- delay = _ref.delay,
- matchCallback = _ref.matchCallback,
- matchDelay = _ref.matchDelay;
-
+ delay = _ref.delay,
+ matchCallback = _ref.matchCallback,
+ matchDelay = _ref.matchDelay;
// if callback is has not valid type
// scriptlet can not prevent it
// so no need for more checking and do not call hit() later
if (!isValidCallback(callback)) {
return false;
}
-
if (!isValidMatchStr(matchCallback) || matchDelay && !isValidMatchNumber(matchDelay)) {
return false;
}
-
var _parseMatchArg = parseMatchArg(matchCallback),
- isInvertedMatch = _parseMatchArg.isInvertedMatch,
- matchRegexp = _parseMatchArg.matchRegexp;
-
+ isInvertedMatch = _parseMatchArg.isInvertedMatch,
+ matchRegexp = _parseMatchArg.matchRegexp;
var _parseDelayArg = parseDelayArg(matchDelay),
- isInvertedDelayMatch = _parseDelayArg.isInvertedDelayMatch,
- delayMatch = _parseDelayArg.delayMatch;
-
- var shouldPrevent = false; // https://github.com/AdguardTeam/Scriptlets/issues/105
-
+ isInvertedDelayMatch = _parseDelayArg.isInvertedDelayMatch,
+ delayMatch = _parseDelayArg.delayMatch;
+ var shouldPrevent = false;
+ // https://github.com/AdguardTeam/Scriptlets/issues/105
var callbackStr = String(callback);
-
if (delayMatch === null) {
shouldPrevent = matchRegexp.test(callbackStr) !== isInvertedMatch;
} else if (!matchCallback) {
@@ -1383,13 +1278,12 @@
} else {
shouldPrevent = matchRegexp.test(callbackStr) !== isInvertedMatch && delay === delayMatch !== isInvertedDelayMatch;
}
-
return shouldPrevent;
};
var handleOldReplacement = function handleOldReplacement(replacement) {
- var result; // defaults to return noopFunc instead of window.open
-
+ var result;
+ // defaults to return noopFunc instead of window.open
if (!replacement) {
result = noopFunc;
} else if (replacement === 'trueFunc') {
@@ -1398,20 +1292,17 @@
// We should return noopFunc instead of window.open
// but with some property if website checks it (examples 5, 6)
// https://github.com/AdguardTeam/Scriptlets/issues/71
- var isProp = startsWith(replacement, '{') && endsWith(replacement, '}');
-
+ var isProp = startsWith$1(replacement, '{') && endsWith(replacement, '}');
if (isProp) {
var propertyPart = replacement.slice(1, -1);
var propertyName = substringBefore(propertyPart, '=');
var propertyValue = substringAfter$1(propertyPart, '=');
-
if (propertyValue === 'noopFunc') {
result = {};
result[propertyName] = noopFunc;
}
}
}
-
return result;
};
var createDecoy = function createDecoy(args) {
@@ -1420,11 +1311,10 @@
var IFRAME_TAG_NAME = 'iframe';
var IFRAME_URL_PROP_NAME = 'src';
var replacement = args.replacement,
- url = args.url,
- delay = args.delay;
+ url = args.url,
+ delay = args.delay;
var tag;
var urlProp;
-
if (replacement === 'obj') {
tag = OBJECT_TAG_NAME;
urlProp = OBJECT_URL_PROP_NAME;
@@ -1432,7 +1322,6 @@
tag = IFRAME_TAG_NAME;
urlProp = IFRAME_URL_PROP_NAME;
}
-
var decoy = document.createElement(tag);
decoy[urlProp] = url;
decoy.style.setProperty('height', '1px', 'important');
@@ -1450,14 +1339,11 @@
if (prop && prop === 'closed') {
return false;
}
-
if (typeof nativeGetter === 'function') {
return noopFunc;
}
-
return prop && target[prop];
};
-
return preventGetter;
};
@@ -1470,19 +1356,17 @@
* Includes common 'url' and 'method' props and all other fetch-specific props
* @returns {string[]}
*/
-
- var getRequestProps$1 = function getRequestProps() {
+ var getRequestProps = function getRequestProps() {
return ['url', 'method', 'headers', 'body', 'mode', 'credentials', 'cache', 'redirect', 'referrer', 'referrerPolicy', 'integrity', 'keepalive', 'signal'];
};
+
/**
* Collects Request options to object
* @param {Request} request
* @returns {Object} data object
*/
-
-
var getRequestData = function getRequestData(request) {
- var requestInitOptions = getRequestProps$1();
+ var requestInitOptions = getRequestProps();
var entries = requestInitOptions.map(function (key) {
// if request has no such option, value will be undefined
var value = request[key];
@@ -1490,17 +1374,16 @@
});
return getObjectFromEntries(entries);
};
+
/**
* Collects fetch args to object
* @param {*} args fetch args
* @returns {Object} data object
*/
-
var getFetchData = function getFetchData(args) {
var fetchPropsObj = {};
var fetchUrl;
var fetchInit;
-
if (args[0] instanceof Request) {
// if Request passed to fetch, it will be in array
var requestData = getRequestData(args[0]);
@@ -1508,20 +1391,18 @@
fetchInit = requestData;
} else {
fetchUrl = args[0]; // eslint-disable-line prefer-destructuring
-
fetchInit = args[1]; // eslint-disable-line prefer-destructuring
}
fetchPropsObj.url = fetchUrl;
-
if (fetchInit instanceof Object) {
Object.keys(fetchInit).forEach(function (prop) {
fetchPropsObj[prop] = fetchInit[prop];
});
}
-
return fetchPropsObj;
};
+
/**
* Collect xhr.open arguments to object
* @param {string} method
@@ -1531,7 +1412,6 @@
* @param {string} password
* @returns {Object}
*/
-
var getXhrData = function getXhrData(method, url, async, user, password) {
return {
method: method,
@@ -1541,24 +1421,23 @@
password: password
};
};
+
/**
* Parse propsToMatch input string into object;
* used for prevent-fetch and prevent-xhr
* @param {string} propsToMatchStr
* @returns {Object} object where 'key' is prop name and 'value' is prop value
*/
-
var parseMatchProps = function parseMatchProps(propsToMatchStr) {
var PROPS_DIVIDER = ' ';
var PAIRS_MARKER = ':';
- var LEGAL_MATCH_PROPS = getRequestProps$1();
+ var LEGAL_MATCH_PROPS = getRequestProps();
var propsObj = {};
var props = propsToMatchStr.split(PROPS_DIVIDER);
props.forEach(function (prop) {
var dividerInd = prop.indexOf(PAIRS_MARKER);
var key = prop.slice(0, dividerInd);
var hasLegalMatchProp = LEGAL_MATCH_PROPS.indexOf(key) !== -1;
-
if (hasLegalMatchProp) {
var value = prop.slice(dividerInd + 1);
propsObj[key] = value;
@@ -1571,23 +1450,23 @@
});
return propsObj;
};
+
/**
* Validates parsed data values
* @param {Object} data
* @returns {boolean}
*/
-
var validateParsedData = function validateParsedData(data) {
return Object.values(data).every(function (value) {
return isValidStrPattern(value);
});
};
+
/**
* Converts valid parsed data to data obj for further matching
* @param {Object} data
* @returns {Object}
*/
-
var getMatchPropsData = function getMatchPropsData(data) {
var matchData = {};
Object.keys(data).forEach(function (key) {
@@ -1596,6 +1475,27 @@
return matchData;
};
+ /**
+ * @typedef { import('../scriptlets/index').Source } Source
+ */
+
+ /**
+ * Conditionally logs message to console.
+ * Convention is to log messages by source.verbose if such log
+ * is not a part of scriptlet's functionality, eg on invalid input,
+ * and use 'forced' argument otherwise.
+ * @param {Source} source required
+ * @param {string} message required, message to log
+ * @param {boolean} [forced=false] to log message unconditionally
+ */
+ var logMessage = function logMessage(source, message) {
+ var forced = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;
+ if (forced || source.verbose) {
+ // eslint-disable-next-line no-console
+ console.log("".concat(source.name, ": ").concat(message));
+ }
+ };
+
/**
* @typedef { import('../scriptlets/index').Source } Source
*/
@@ -1608,7 +1508,6 @@
* @param {string} value
* @param {boolean} shouldLog determines if helper should log on a failed set attempt
*/
-
var setStorageItem = function setStorageItem(source, storage, key, value) {
// setItem() may throw an exception if the storage is full.
try {
@@ -1618,21 +1517,17 @@
logMessage(source, message);
}
};
+
/**
* Gets supported storage item value
- * @param {Source} source
* @param {string} value input item value
- * @param {boolean} verbose if logging invalid values is required
* @returns {string|null|undefined|boolean} valid item value if ok OR null if not
*/
-
- var getLimitedStorageItemValue = function getLimitedStorageItemValue(source, value) {
- if (!value) {
- return null;
+ var getLimitedStorageItemValue = function getLimitedStorageItemValue(value) {
+ if (typeof value !== 'string') {
+ throw new Error('Invalid value');
}
-
var validValue;
-
if (value === 'undefined') {
validValue = undefined;
} else if (value === 'false') {
@@ -1649,24 +1544,19 @@
validValue = '';
} else if (/^\d+$/.test(value)) {
validValue = parseFloat(value);
-
if (nativeIsNaN(validValue)) {
- logMessage(source, "Invalid storage item value: '".concat(value, "'"));
- return null;
+ throw new Error('Invalid value');
}
-
if (Math.abs(validValue) > 0x7FFF) {
- logMessage(source, "Invalid storage item value: '".concat(value, "'"));
- return null;
+ throw new Error('Invalid value');
}
} else if (value === 'yes') {
validValue = 'yes';
} else if (value === 'no') {
validValue = 'no';
} else {
- return null;
+ throw new Error('Invalid value');
}
-
return validValue;
};
@@ -1683,24 +1573,21 @@
if (typeof error === 'string' && error.indexOf(rid) !== -1) {
return true;
}
-
if (nativeOnError instanceof Function) {
for (var _len = arguments.length, args = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {
args[_key - 1] = arguments[_key];
}
-
return nativeOnError.apply(this, [error].concat(args));
}
-
return false;
};
}
/**
- * Generate random six symbols id
+ * Generate random seven symbols id
*/
function randomId() {
- return Math.random().toString(36).substr(2, 9);
+ return Math.random().toString(36).slice(2, 9);
}
/**
@@ -1713,29 +1600,27 @@
*
* @return {Object}
*/
-
function getDescriptorAddon() {
return {
isAbortingSuspended: false,
isolateCallback: function isolateCallback(cb) {
- this.isAbortingSuspended = true; // try...catch is required in case if there are more than one inline scripts
+ this.isAbortingSuspended = true;
+ // try...catch is required in case if there are more than one inline scripts
// which should be aborted.
// so after the first successful abortion, `cb(...args);` will throw error,
// and we should not stop on that and continue to abort other scripts
-
try {
for (var _len = arguments.length, args = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {
args[_key - 1] = arguments[_key];
}
-
var result = cb.apply(void 0, args);
this.isAbortingSuspended = false;
return result;
} catch (_unused) {
var rid = randomId();
- this.isAbortingSuspended = false; // It's necessary to throw error
+ this.isAbortingSuspended = false;
+ // It's necessary to throw error
// otherwise script will be not aborted
-
throw new ReferenceError(rid);
}
}
@@ -1760,19 +1645,17 @@
* @param {string} chain
* @returns {Chain}
*/
-
function getPropertyInChain(base, chain) {
var pos = chain.indexOf('.');
-
if (pos === -1) {
return {
base: base,
prop: chain
};
}
+ var prop = chain.slice(0, pos);
- var prop = chain.slice(0, pos); // https://github.com/AdguardTeam/Scriptlets/issues/128
-
+ // https://github.com/AdguardTeam/Scriptlets/issues/128
if (base === null) {
// if base is null, return 'null' as base.
// it's needed for triggering the reason logging while debugging
@@ -1782,10 +1665,8 @@
chain: chain
};
}
-
var nextBase = base[prop];
chain = chain.slice(pos + 1);
-
if ((base instanceof Object || typeof base === 'object') && isEmptyObject(base)) {
// for empty objects in chain
return {
@@ -1794,7 +1675,6 @@
chain: chain
};
}
-
if (nextBase === null) {
return {
base: base,
@@ -1802,11 +1682,9 @@
chain: chain
};
}
-
if (nextBase !== undefined) {
return getPropertyInChain(nextBase, chain);
}
-
Object.defineProperty(base, prop, {
configurable: true
});
@@ -1840,7 +1718,6 @@
var lookThrough = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;
var output = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : [];
var pos = chain.indexOf('.');
-
if (pos === -1) {
// for paths like 'a.b.*' every final nested prop should be processed
if (chain === '*' || chain === '[]') {
@@ -1860,95 +1737,71 @@
prop: chain
});
}
-
return output;
}
-
var prop = chain.slice(0, pos);
var shouldLookThrough = prop === '[]' && Array.isArray(base) || prop === '*' && base instanceof Object;
-
if (shouldLookThrough) {
var nextProp = chain.slice(pos + 1);
- var baseKeys = Object.keys(base); // if there is a wildcard prop in input chain (e.g. 'ad.*.src' for 'ad.0.src ad.1.src'),
- // each one of base keys should be considered as a potential chain prop in final path
+ var baseKeys = Object.keys(base);
+ // if there is a wildcard prop in input chain (e.g. 'ad.*.src' for 'ad.0.src ad.1.src'),
+ // each one of base keys should be considered as a potential chain prop in final path
baseKeys.forEach(function (key) {
var item = base[key];
getWildcardPropertyInChain(item, nextProp, lookThrough, output);
});
}
-
var nextBase = base[prop];
chain = chain.slice(pos + 1);
-
if (nextBase !== undefined) {
getWildcardPropertyInChain(nextBase, chain, lookThrough, output);
}
-
return output;
}
/* eslint-disable no-console, no-underscore-dangle */
-
/**
* Hit used only for debug purposes now
* @param {Source} source
- * @param {string} [message] - optional message;
* use LOG_MARKER = 'log: ' at the start of a message
* for logging scriptlets
*/
- var hit = function hit(source, message) {
+ var hit = function hit(source) {
if (source.verbose !== true) {
return;
}
-
try {
var log = console.log.bind(console);
var trace = console.trace.bind(console); // eslint-disable-line compat/compat
var prefix = source.ruleText || '';
-
if (source.domainName) {
var AG_SCRIPTLET_MARKER = '#%#//';
var UBO_SCRIPTLET_MARKER = '##+js';
var ruleStartIndex;
-
if (source.ruleText.indexOf(AG_SCRIPTLET_MARKER) > -1) {
ruleStartIndex = source.ruleText.indexOf(AG_SCRIPTLET_MARKER);
} else if (source.ruleText.indexOf(UBO_SCRIPTLET_MARKER) > -1) {
ruleStartIndex = source.ruleText.indexOf(UBO_SCRIPTLET_MARKER);
- } // delete all domains from ruleText and leave just rule part
-
-
- var rulePart = source.ruleText.slice(ruleStartIndex); // prepare applied scriptlet rule for specific domain
-
- prefix = "".concat(source.domainName).concat(rulePart);
- } // Used to check if scriptlet uses 'hit' function for logging
-
-
- var LOG_MARKER = 'log: ';
-
- if (message) {
- if (message.indexOf(LOG_MARKER) === -1) {
- log("".concat(prefix, " message:\n").concat(message));
- } else {
- log(message.slice(LOG_MARKER.length));
}
+ // delete all domains from ruleText and leave just rule part
+ var rulePart = source.ruleText.slice(ruleStartIndex);
+ // prepare applied scriptlet rule for specific domain
+ prefix = "".concat(source.domainName).concat(rulePart);
}
-
log("".concat(prefix, " trace start"));
-
if (trace) {
trace();
}
-
log("".concat(prefix, " trace end"));
- } catch (e) {// try catch for Edge 15
+ } catch (e) {
+ // try catch for Edge 15
// In according to this issue https://developer.microsoft.com/en-us/microsoft-edge/platform/issues/14495220/
// console.log throws an error
- } // This is necessary for unit-tests only!
-
+ }
+ // This is necessary for unit-tests only!
if (typeof window.__debug === 'function') {
window.__debug(source);
}
@@ -1967,27 +1820,23 @@
* @param {Object} requestData object with standard properties of fetch/xhr like url, method etc
* @returns {boolean}
*/
-
var matchRequestProps = function matchRequestProps(source, propsToMatch, requestData) {
if (propsToMatch === '' || propsToMatch === '*') {
return true;
}
-
var isMatched;
var parsedData = parseMatchProps(propsToMatch);
-
if (!validateParsedData(parsedData)) {
logMessage(source, "Invalid parameter: ".concat(propsToMatch));
isMatched = false;
} else {
- var matchData = getMatchPropsData(parsedData); // prevent only if all props match
-
+ var matchData = getMatchPropsData(parsedData);
+ // prevent only if all props match
isMatched = Object.keys(matchData).every(function (matchKey) {
var matchValue = matchData[matchKey];
return Object.prototype.hasOwnProperty.call(requestData, matchKey) && matchValue.test(requestData[matchKey]);
});
}
-
return isMatched;
};
@@ -1998,16 +1847,13 @@
* @param {string} stackTrace - script error stack trace
* @returns {boolean}
*/
-
var matchStackTrace = function matchStackTrace(stackMatch, stackTrace) {
if (!stackMatch || stackMatch === '') {
return true;
}
-
- if (shouldAbortInlineOrInjectedScript$1(stackMatch, stackTrace)) {
+ if (shouldAbortInlineOrInjectedScript(stackMatch, stackTrace)) {
return true;
}
-
var stackRegexp = toRegExp(stackMatch);
var refinedStackTrace = stackTrace.split('\n').slice(2) // get rid of our own functions in the stack trace
.map(function (line) {
@@ -2026,29 +1872,24 @@
var throttle = function throttle(cb, delay) {
var wait = false;
var savedArgs;
-
var wrapper = function wrapper() {
for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
args[_key] = arguments[_key];
}
-
if (wait) {
savedArgs = args;
return;
}
-
cb.apply(void 0, args);
wait = true;
setTimeout(function () {
wait = false;
-
if (savedArgs) {
wrapper(savedArgs);
savedArgs = null;
}
}, delay);
};
-
return wrapper;
};
@@ -2057,11 +1898,9 @@
* @param {Function} callback
* @param {boolean} observeAttrs - optional parameter - should observer check attributes changes
*/
-
var observeDOMChanges = function observeDOMChanges(callback) {
var observeAttrs = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;
var attrsToObserve = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : [];
-
/**
* 'delay' in milliseconds for 'throttle' method
*/
@@ -2070,9 +1909,7 @@
* Used for remove-class
*/
// eslint-disable-next-line no-use-before-define, compat/compat
-
var observer = new MutationObserver(throttle(callbackWrapper, THROTTLE_DELAY_MS));
-
var connect = function connect() {
if (attrsToObserve.length > 0) {
observer.observe(document.documentElement, {
@@ -2089,17 +1926,14 @@
});
}
};
-
var disconnect = function disconnect() {
observer.disconnect();
};
-
function callbackWrapper() {
disconnect();
callback();
connect();
}
-
connect();
};
@@ -2130,6 +1964,11 @@
/**
* Modifies passed keyword value according to its purpose.
* Returns initial value if it's not a keyword.
+ *
+ * Supported keywords:
+ * - '$now$' - returns current time in ms, e.g 1667915146503
+ * - '$currentDate$' - returns current date e.g 'Tue Nov 08 2022 13:53:19 GMT+0300'
+ *
* @param {string} rawValue
* @returns {string}
*/
@@ -2137,7 +1976,6 @@
var NOW_VALUE_KEYWORD = '$now$';
var CURRENT_DATE_KEYWORD = '$currentDate$';
var parsedValue = rawValue;
-
if (rawValue === NOW_VALUE_KEYWORD) {
// Set to current time in ms, e.g 1667915146503
parsedValue = Date.now().toString();
@@ -2145,12 +1983,10 @@
// Set to current date e.g 'Tue Nov 08 2022 13:53:19 GMT+0300'
parsedValue = Date();
}
-
return parsedValue;
};
/* eslint-disable max-len */
-
/**
* @trustedScriptlet trusted-click-element
*
@@ -2182,7 +2018,7 @@
*
* 3. Click multiple elements by selector with a delay
* ```
- * example.com#%#//scriptlet('trusted-click-element', 'button[name="agree"], button[name='check"], input[type="submit"][value="akkoord"]', '', '500')
+ * example.com#%#//scriptlet('trusted-click-element', 'button[name="agree"], button[name="check"], input[type="submit"][value="akkoord"]', '', '500')
* ```
*
* 4. Match cookies by keys using regex and string
@@ -2205,31 +2041,25 @@
* example.com#%#//scriptlet('trusted-click-element', 'button[name="agree"], input[type="submit"][value="akkoord"]', 'cookie:cmpconsent, localStorage:promo', '250')
* ```
*/
-
/* eslint-enable max-len */
-
function trustedClickElement$1(source, selectors) {
var extraMatch = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : '';
var delay = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : NaN;
-
if (!selectors) {
return;
}
-
var OBSERVER_TIMEOUT_MS = 10000;
var THROTTLE_DELAY_MS = 20;
var COOKIE_MATCH_MARKER = 'cookie:';
var LOCAL_STORAGE_MATCH_MARKER = 'localStorage:';
var SELECTORS_DELIMITER = ',';
- var COOKIE_STRING_DELIMITER = ';'; // Regex to split match pairs by commas, avoiding the ones included in regexes
-
+ var COOKIE_STRING_DELIMITER = ';';
+ // Regex to split match pairs by commas, avoiding the ones included in regexes
var EXTRA_MATCH_DELIMITER = /(,\s*){1}(?=cookie:|localStorage:)/;
var parsedDelay;
-
if (delay) {
parsedDelay = parseInt(delay, 10);
var isValidDelay = !Number.isNaN(parsedDelay) || parsedDelay < OBSERVER_TIMEOUT_MS;
-
if (!isValidDelay) {
// eslint-disable-next-line max-len
var message = "Passed delay '".concat(delay, "' is invalid or bigger than ").concat(OBSERVER_TIMEOUT_MS, " ms");
@@ -2237,39 +2067,34 @@
return;
}
}
-
var canClick = !parsedDelay;
var cookieMatches = [];
var localStorageMatches = [];
-
if (extraMatch) {
// Get all match marker:value pairs from argument
var parsedExtraMatch = extraMatch.split(EXTRA_MATCH_DELIMITER).map(function (matchStr) {
return matchStr.trim();
- }); // Filter match pairs by marker
+ });
+ // Filter match pairs by marker
parsedExtraMatch.forEach(function (matchStr) {
if (matchStr.indexOf(COOKIE_MATCH_MARKER) > -1) {
var cookieMatch = matchStr.replace(COOKIE_MATCH_MARKER, '');
cookieMatches.push(cookieMatch);
}
-
if (matchStr.indexOf(LOCAL_STORAGE_MATCH_MARKER) > -1) {
var localStorageMatch = matchStr.replace(LOCAL_STORAGE_MATCH_MARKER, '');
localStorageMatches.push(localStorageMatch);
}
});
}
-
if (cookieMatches.length > 0) {
var parsedCookieMatches = parseCookieString(cookieMatches.join(COOKIE_STRING_DELIMITER));
var parsedCookies = parseCookieString(document.cookie);
var cookieKeys = Object.keys(parsedCookies);
-
if (cookieKeys.length === 0) {
return;
}
-
var cookiesMatched = Object.keys(parsedCookieMatches).every(function (key) {
// Avoid getting /.?/ result from toRegExp on undefined
// as cookie may be set without value,
@@ -2278,35 +2103,31 @@
var keyMatch = toRegExp(key);
return cookieKeys.some(function (key) {
var keysMatched = keyMatch.test(key);
-
if (!keysMatched) {
return false;
- } // Key matching is enough if cookie value match is not specified
-
+ }
+ // Key matching is enough if cookie value match is not specified
if (!valueMatch) {
return true;
}
-
return valueMatch.test(parsedCookies[key]);
});
});
-
if (!cookiesMatched) {
return;
}
}
-
if (localStorageMatches.length > 0) {
var localStorageMatched = localStorageMatches.every(function (str) {
var itemValue = window.localStorage.getItem(str);
return itemValue || itemValue === '';
});
-
if (!localStorageMatched) {
return;
}
}
+
/**
* Create selectors array and swap selectors to null on finding it's element
*
@@ -2315,60 +2136,52 @@
* - always know on what index corresponding element should be put
* - prevent selectors from being queried multiple times
*/
-
-
var selectorsSequence = selectors.split(SELECTORS_DELIMITER).map(function (selector) {
return selector.trim();
});
-
var createElementObj = function createElementObj(element) {
return {
element: element || null,
clicked: false
};
};
-
var elementsSequence = Array(selectorsSequence.length).fill(createElementObj());
+
/**
* Go through elementsSequence from left to right, clicking on found elements
*
* Element should not be clicked if it is already clicked,
* or a previous element is not found or clicked yet
*/
-
var clickElementsBySequence = function clickElementsBySequence() {
for (var i = 0; i < elementsSequence.length; i += 1) {
- var elementObj = elementsSequence[i]; // Stop clicking if that pos element is not found yet
-
+ var elementObj = elementsSequence[i];
+ // Stop clicking if that pos element is not found yet
if (!elementObj.element) {
break;
- } // Skip already clicked elements
-
-
+ }
+ // Skip already clicked elements
if (!elementObj.clicked) {
elementObj.element.click();
elementObj.clicked = true;
}
}
-
var allElementsClicked = elementsSequence.every(function (elementObj) {
return elementObj.clicked === true;
});
-
if (allElementsClicked) {
// At this stage observer is already disconnected
hit(source);
}
};
-
var handleElement = function handleElement(element, i) {
var elementObj = createElementObj(element);
elementsSequence[i] = elementObj;
-
if (canClick) {
clickElementsBySequence();
}
};
+
/**
* Query all selectors from queue on each mutation
* Each selector is swapped to null in selectorsSequence on founding corresponding element
@@ -2377,46 +2190,41 @@
* when delay is getting off after the last mutation took place.
*
*/
-
-
var findElements = function findElements(mutations, observer) {
var fulfilledSelectors = [];
selectorsSequence.forEach(function (selector, i) {
if (!selector) {
return;
}
-
var element = document.querySelector(selector);
-
if (!element) {
return;
}
-
handleElement(element, i);
fulfilledSelectors.push(selector);
- }); // selectorsSequence should be modified after the loop to not break loop indexation
+ });
+ // selectorsSequence should be modified after the loop to not break loop indexation
selectorsSequence = selectorsSequence.map(function (selector) {
return fulfilledSelectors.indexOf(selector) === -1 ? selector : null;
- }); // Disconnect observer after finding all elements
+ });
+ // Disconnect observer after finding all elements
var allSelectorsFulfilled = selectorsSequence.every(function (selector) {
return selector === null;
});
-
if (allSelectorsFulfilled) {
observer.disconnect();
}
- }; // eslint-disable-next-line compat/compat
-
+ };
+ // eslint-disable-next-line compat/compat
var observer = new MutationObserver(throttle(findElements, THROTTLE_DELAY_MS));
observer.observe(document.documentElement, {
attributes: true,
childList: true,
subtree: true
});
-
if (parsedDelay) {
setTimeout(function () {
// Click previously collected elements
@@ -2424,17 +2232,17 @@
canClick = true;
}, parsedDelay);
}
-
setTimeout(function () {
return observer.disconnect();
}, OBSERVER_TIMEOUT_MS);
}
- trustedClickElement$1.names = ['trusted-click-element' // trusted scriptlets support no aliases
+ trustedClickElement$1.names = ['trusted-click-element'
+ // trusted scriptlets support no aliases
];
+
trustedClickElement$1.injections = [hit, toRegExp, parseCookieString, throttle, logMessage];
/* eslint-disable max-len */
-
/**
* @scriptlet abort-on-property-read
*
@@ -2463,36 +2271,28 @@
* example.org#%#//scriptlet('abort-on-property-read', 'navigator.language')
* ```
*/
-
/* eslint-enable max-len */
-
function abortOnPropertyRead$1(source, property) {
if (!property) {
return;
}
-
var rid = randomId();
-
var abort = function abort() {
hit(source);
throw new ReferenceError(rid);
};
-
var setChainPropAccess = function setChainPropAccess(owner, property) {
var chainInfo = getPropertyInChain(owner, property);
var base = chainInfo.base;
var prop = chainInfo.prop,
- chain = chainInfo.chain;
-
+ chain = chainInfo.chain;
if (chain) {
var setter = function setter(a) {
base = a;
-
if (a instanceof Object) {
setChainPropAccess(a, chain);
}
};
-
Object.defineProperty(owner, prop, {
get: function get() {
return base;
@@ -2501,22 +2301,20 @@
});
return;
}
-
setPropertyAccess(base, prop, {
get: abort,
set: function set() {}
});
};
-
setChainPropAccess(window, property);
window.onerror = createOnErrorHandler(rid).bind();
}
- abortOnPropertyRead$1.names = ['abort-on-property-read', // aliases are needed for matching the related scriptlet converted into our syntax
+ abortOnPropertyRead$1.names = ['abort-on-property-read',
+ // aliases are needed for matching the related scriptlet converted into our syntax
'abort-on-property-read.js', 'ubo-abort-on-property-read.js', 'aopr.js', 'ubo-aopr.js', 'ubo-abort-on-property-read', 'ubo-aopr', 'abp-abort-on-property-read'];
abortOnPropertyRead$1.injections = [randomId, setPropertyAccess, getPropertyInChain, createOnErrorHandler, hit, isEmptyObject];
/* eslint-disable max-len */
-
/**
* @scriptlet abort-on-property-write
*
@@ -2542,36 +2340,28 @@
* example.org#%#//scriptlet('abort-on-property-write', 'adblock')
* ```
*/
-
/* eslint-enable max-len */
-
function abortOnPropertyWrite$1(source, property) {
if (!property) {
return;
}
-
var rid = randomId();
-
var abort = function abort() {
hit(source);
throw new ReferenceError(rid);
};
-
var setChainPropAccess = function setChainPropAccess(owner, property) {
var chainInfo = getPropertyInChain(owner, property);
var base = chainInfo.base;
var prop = chainInfo.prop,
- chain = chainInfo.chain;
-
+ chain = chainInfo.chain;
if (chain) {
var setter = function setter(a) {
base = a;
-
if (a instanceof Object) {
setChainPropAccess(a, chain);
}
};
-
Object.defineProperty(owner, prop, {
get: function get() {
return base;
@@ -2580,21 +2370,19 @@
});
return;
}
-
setPropertyAccess(base, prop, {
set: abort
});
};
-
setChainPropAccess(window, property);
window.onerror = createOnErrorHandler(rid).bind();
}
- abortOnPropertyWrite$1.names = ['abort-on-property-write', // aliases are needed for matching the related scriptlet converted into our syntax
+ abortOnPropertyWrite$1.names = ['abort-on-property-write',
+ // aliases are needed for matching the related scriptlet converted into our syntax
'abort-on-property-write.js', 'ubo-abort-on-property-write.js', 'aopw.js', 'ubo-aopw.js', 'ubo-abort-on-property-write', 'ubo-aopw', 'abp-abort-on-property-write'];
abortOnPropertyWrite$1.injections = [randomId, setPropertyAccess, getPropertyInChain, createOnErrorHandler, hit, isEmptyObject];
/* eslint-disable max-len */
-
/**
* @scriptlet prevent-setTimeout
*
@@ -2696,24 +2484,21 @@
* }, 500);
* ```
*/
-
/* eslint-enable max-len */
-
function preventSetTimeout$1(source, matchCallback, matchDelay) {
// if browser does not support Proxy (e.g. Internet Explorer),
// we use none-proxy "legacy" wrapper for preventing
// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Proxy
var isProxySupported = typeof Proxy !== 'undefined';
- var nativeTimeout = window.setTimeout; // logs setTimeouts to console if no arguments have been specified
+ var nativeTimeout = window.setTimeout;
+ // logs setTimeouts to console if no arguments have been specified
var shouldLog = typeof matchCallback === 'undefined' && typeof matchDelay === 'undefined';
-
var legacyTimeoutWrapper = function legacyTimeoutWrapper(callback, delay) {
var shouldPrevent = false;
-
if (shouldLog) {
- hit(source); // https://github.com/AdguardTeam/Scriptlets/issues/105
-
+ hit(source);
+ // https://github.com/AdguardTeam/Scriptlets/issues/105
logMessage(source, "setTimeout(".concat(String(callback), ", ").concat(delay, ")"), true);
} else {
shouldPrevent = isPreventionNeeded({
@@ -2723,27 +2508,22 @@
matchDelay: matchDelay
});
}
-
if (shouldPrevent) {
hit(source);
return nativeTimeout(noopFunc, delay);
}
-
for (var _len = arguments.length, args = new Array(_len > 2 ? _len - 2 : 0), _key = 2; _key < _len; _key++) {
args[_key - 2] = arguments[_key];
}
-
return nativeTimeout.apply(window, [callback, delay].concat(args));
};
-
var handlerWrapper = function handlerWrapper(target, thisArg, args) {
var callback = args[0];
var delay = args[1];
var shouldPrevent = false;
-
if (shouldLog) {
- hit(source); // https://github.com/AdguardTeam/Scriptlets/issues/105
-
+ hit(source);
+ // https://github.com/AdguardTeam/Scriptlets/issues/105
logMessage(source, "setTimeout(".concat(String(callback), ", ").concat(delay, ")"), true);
} else {
shouldPrevent = isPreventionNeeded({
@@ -2753,32 +2533,33 @@
matchDelay: matchDelay
});
}
-
if (shouldPrevent) {
hit(source);
args[0] = noopFunc;
}
-
return target.apply(thisArg, args);
};
-
var setTimeoutHandler = {
apply: handlerWrapper
};
window.setTimeout = isProxySupported ? new Proxy(window.setTimeout, setTimeoutHandler) : legacyTimeoutWrapper;
}
- preventSetTimeout$1.names = ['prevent-setTimeout', // aliases are needed for matching the related scriptlet converted into our syntax
- 'no-setTimeout-if.js', // new implementation of setTimeout-defuser.js
- 'ubo-no-setTimeout-if.js', 'nostif.js', // new short name of no-setTimeout-if
- 'ubo-nostif.js', 'ubo-no-setTimeout-if', 'ubo-nostif', // old scriptlet names which should be supported as well.
+ preventSetTimeout$1.names = ['prevent-setTimeout',
+ // aliases are needed for matching the related scriptlet converted into our syntax
+ 'no-setTimeout-if.js',
+ // new implementation of setTimeout-defuser.js
+ 'ubo-no-setTimeout-if.js', 'nostif.js',
+ // new short name of no-setTimeout-if
+ 'ubo-nostif.js', 'ubo-no-setTimeout-if', 'ubo-nostif',
+ // old scriptlet names which should be supported as well.
// should be removed eventually.
// do not remove until other filter lists maintainers use them
'setTimeout-defuser.js', 'ubo-setTimeout-defuser.js', 'ubo-setTimeout-defuser', 'std.js', 'ubo-std.js', 'ubo-std'];
- preventSetTimeout$1.injections = [hit, noopFunc, isPreventionNeeded, logMessage, // following helpers should be injected as helpers above use them
- parseMatchArg, parseDelayArg, toRegExp, startsWith, nativeIsNaN, isValidCallback, isValidMatchStr, escapeRegExp, isValidStrPattern, nativeIsFinite, isValidMatchNumber];
+ preventSetTimeout$1.injections = [hit, noopFunc, isPreventionNeeded, logMessage,
+ // following helpers should be injected as helpers above use them
+ parseMatchArg, parseDelayArg, toRegExp, startsWith$1, nativeIsNaN, isValidCallback, isValidMatchStr, escapeRegExp, isValidStrPattern, nativeIsFinite, isValidMatchNumber];
/* eslint-disable max-len */
-
/**
* @scriptlet prevent-setInterval
*
@@ -2880,24 +2661,21 @@
* }, 500);
* ```
*/
-
/* eslint-enable max-len */
-
function preventSetInterval$1(source, matchCallback, matchDelay) {
// if browser does not support Proxy (e.g. Internet Explorer),
// we use none-proxy "legacy" wrapper for preventing
// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Proxy
var isProxySupported = typeof Proxy !== 'undefined';
- var nativeInterval = window.setInterval; // logs setIntervals to console if no arguments have been specified
+ var nativeInterval = window.setInterval;
+ // logs setIntervals to console if no arguments have been specified
var shouldLog = typeof matchCallback === 'undefined' && typeof matchDelay === 'undefined';
-
var legacyIntervalWrapper = function legacyIntervalWrapper(callback, delay) {
var shouldPrevent = false;
-
if (shouldLog) {
- hit(source); // https://github.com/AdguardTeam/Scriptlets/issues/105
-
+ hit(source);
+ // https://github.com/AdguardTeam/Scriptlets/issues/105
logMessage(source, "setInterval(".concat(String(callback), ", ").concat(delay, ")"), true);
} else {
shouldPrevent = isPreventionNeeded({
@@ -2907,27 +2685,22 @@
matchDelay: matchDelay
});
}
-
if (shouldPrevent) {
hit(source);
return nativeInterval(noopFunc, delay);
}
-
for (var _len = arguments.length, args = new Array(_len > 2 ? _len - 2 : 0), _key = 2; _key < _len; _key++) {
args[_key - 2] = arguments[_key];
}
-
return nativeInterval.apply(window, [callback, delay].concat(args));
};
-
var handlerWrapper = function handlerWrapper(target, thisArg, args) {
var callback = args[0];
var delay = args[1];
var shouldPrevent = false;
-
if (shouldLog) {
- hit(source); // https://github.com/AdguardTeam/Scriptlets/issues/105
-
+ hit(source);
+ // https://github.com/AdguardTeam/Scriptlets/issues/105
logMessage(source, "setInterval(".concat(String(callback), ", ").concat(delay, ")"), true);
} else {
shouldPrevent = isPreventionNeeded({
@@ -2937,31 +2710,33 @@
matchDelay: matchDelay
});
}
-
if (shouldPrevent) {
hit(source);
args[0] = noopFunc;
}
-
return target.apply(thisArg, args);
};
-
var setIntervalHandler = {
apply: handlerWrapper
};
window.setInterval = isProxySupported ? new Proxy(window.setInterval, setIntervalHandler) : legacyIntervalWrapper;
}
- preventSetInterval$1.names = ['prevent-setInterval', // aliases are needed for matching the related scriptlet converted into our syntax
- 'no-setInterval-if.js', // new implementation of setInterval-defuser.js
- 'ubo-no-setInterval-if.js', 'setInterval-defuser.js', // old name should be supported as well
- 'ubo-setInterval-defuser.js', 'nosiif.js', // new short name of no-setInterval-if
- 'ubo-nosiif.js', 'sid.js', // old short scriptlet name
+ preventSetInterval$1.names = ['prevent-setInterval',
+ // aliases are needed for matching the related scriptlet converted into our syntax
+ 'no-setInterval-if.js',
+ // new implementation of setInterval-defuser.js
+ 'ubo-no-setInterval-if.js', 'setInterval-defuser.js',
+ // old name should be supported as well
+ 'ubo-setInterval-defuser.js', 'nosiif.js',
+ // new short name of no-setInterval-if
+ 'ubo-nosiif.js', 'sid.js',
+ // old short scriptlet name
'ubo-sid.js', 'ubo-no-setInterval-if', 'ubo-setInterval-defuser', 'ubo-nosiif', 'ubo-sid'];
- preventSetInterval$1.injections = [hit, noopFunc, isPreventionNeeded, logMessage, // following helpers should be injected as helpers above use them
- toRegExp, startsWith, nativeIsNaN, parseMatchArg, parseDelayArg, isValidCallback, isValidMatchStr, isValidStrPattern, escapeRegExp, nativeIsFinite, isValidMatchNumber];
+ preventSetInterval$1.injections = [hit, noopFunc, isPreventionNeeded, logMessage,
+ // following helpers should be injected as helpers above use them
+ toRegExp, startsWith$1, nativeIsNaN, parseMatchArg, parseDelayArg, isValidCallback, isValidMatchStr, isValidStrPattern, escapeRegExp, nativeIsFinite, isValidMatchNumber];
/* eslint-disable max-len */
-
/**
* @scriptlet prevent-window-open
*
@@ -3022,9 +2797,7 @@
*
* > For better compatibility with uBO, old syntax is not recommended to use.
*/
-
/* eslint-enable max-len */
-
function preventWindowOpen$1(source) {
var match = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : '*';
var delay = arguments.length > 2 ? arguments[2] : undefined;
@@ -3033,62 +2806,49 @@
// if scriptlet runs without args
var nativeOpen = window.open;
var isNewSyntax = match !== '0' && match !== '1';
-
var oldOpenWrapper = function oldOpenWrapper(str) {
- match = Number(match) > 0; // 'delay' was 'search' prop for matching in old syntax
-
+ match = Number(match) > 0;
+ // 'delay' was 'search' prop for matching in old syntax
for (var _len = arguments.length, args = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {
args[_key - 1] = arguments[_key];
}
-
if (!isValidStrPattern(delay)) {
logMessage(source, "Invalid parameter: ".concat(delay));
return nativeOpen.apply(window, [str].concat(args));
}
-
var searchRegexp = toRegExp(delay);
-
if (match !== searchRegexp.test(str)) {
return nativeOpen.apply(window, [str].concat(args));
}
-
hit(source);
return handleOldReplacement(replacement);
};
-
var newOpenWrapper = function newOpenWrapper(url) {
var shouldLog = replacement && replacement.indexOf('log') > -1;
-
for (var _len2 = arguments.length, args = new Array(_len2 > 1 ? _len2 - 1 : 0), _key2 = 1; _key2 < _len2; _key2++) {
args[_key2 - 1] = arguments[_key2];
}
-
if (shouldLog) {
var argsStr = args && args.length > 0 ? ", ".concat(args.join(', ')) : '';
- var message = "window-open: ".concat(url).concat(argsStr);
+ var message = "".concat(url).concat(argsStr);
logMessage(source, message, true);
hit(source);
}
-
var shouldPrevent = false;
-
if (match === '*') {
shouldPrevent = true;
} else if (isValidMatchStr(match)) {
var _parseMatchArg = parseMatchArg(match),
- isInvertedMatch = _parseMatchArg.isInvertedMatch,
- matchRegexp = _parseMatchArg.matchRegexp;
-
+ isInvertedMatch = _parseMatchArg.isInvertedMatch,
+ matchRegexp = _parseMatchArg.matchRegexp;
shouldPrevent = matchRegexp.test(url) !== isInvertedMatch;
} else {
logMessage(source, "Invalid parameter: ".concat(match));
shouldPrevent = false;
}
-
if (shouldPrevent) {
var parsedDelay = parseInt(delay, 10);
var result;
-
if (nativeIsNaN(parsedDelay)) {
result = noopNull();
} else {
@@ -3099,7 +2859,6 @@
};
var decoy = createDecoy(decoyArgs);
var popup = decoy.contentWindow;
-
if (typeof popup === 'object' && popup !== null) {
Object.defineProperty(popup, 'closed', {
value: false
@@ -3117,27 +2876,24 @@
});
popup = decoy.contentWindow;
}
-
result = popup;
}
-
hit(source);
return result;
}
-
return nativeOpen.apply(window, [url].concat(args));
};
+ window.open = isNewSyntax ? newOpenWrapper : oldOpenWrapper;
- window.open = isNewSyntax ? newOpenWrapper : oldOpenWrapper; // Protect window.open from native code check
-
+ // Protect window.open from native code check
window.open.toString = nativeOpen.toString.bind(nativeOpen);
}
- preventWindowOpen$1.names = ['prevent-window-open', // aliases are needed for matching the related scriptlet converted into our syntax
+ preventWindowOpen$1.names = ['prevent-window-open',
+ // aliases are needed for matching the related scriptlet converted into our syntax
'window.open-defuser.js', 'ubo-window.open-defuser.js', 'ubo-window.open-defuser', 'nowoif.js', 'ubo-nowoif.js', 'ubo-nowoif'];
- preventWindowOpen$1.injections = [hit, isValidStrPattern, escapeRegExp, isValidMatchStr, toRegExp, nativeIsNaN, parseMatchArg, handleOldReplacement, createDecoy, getPreventGetter, noopNull, logMessage, noopFunc, trueFunc, startsWith, endsWith, substringBefore, substringAfter$1];
+ preventWindowOpen$1.injections = [hit, isValidStrPattern, escapeRegExp, isValidMatchStr, toRegExp, nativeIsNaN, parseMatchArg, handleOldReplacement, createDecoy, getPreventGetter, noopNull, logMessage, noopFunc, trueFunc, startsWith$1, endsWith, substringBefore, substringAfter$1];
/* eslint-disable max-len */
-
/**
* @scriptlet abort-current-inline-script
*
@@ -3200,14 +2956,11 @@
*
* ```
*/
-
/* eslint-enable max-len */
-
function abortCurrentInlineScript$1(source, property, search) {
var searchRegexp = toRegExp(search);
var rid = randomId();
var SRC_DATA_MARKER = 'data:text/javascript;base64,';
-
var getCurrentScript = function getCurrentScript() {
if ('currentScript' in document) {
return document.currentScript; // eslint-disable-line compat/compat
@@ -3216,49 +2969,42 @@
var scripts = document.getElementsByTagName('script');
return scripts[scripts.length - 1];
};
-
var ourScript = getCurrentScript();
-
var abort = function abort() {
var scriptEl = getCurrentScript();
-
if (!scriptEl) {
return;
}
+ var content = scriptEl.textContent;
- var content = scriptEl.textContent; // We are using Node.prototype.textContent property descriptor
+ // We are using Node.prototype.textContent property descriptor
// to get the real script content
// even when document.currentScript.textContent is replaced.
// https://github.com/AdguardTeam/Scriptlets/issues/57#issuecomment-593638991
-
try {
var textContentGetter = Object.getOwnPropertyDescriptor(Node.prototype, 'textContent').get;
content = textContentGetter.call(scriptEl);
} catch (e) {} // eslint-disable-line no-empty
- // https://github.com/AdguardTeam/Scriptlets/issues/130
-
- if (content.length === 0 && typeof scriptEl.src !== 'undefined' && startsWith(scriptEl.src, SRC_DATA_MARKER)) {
+ // https://github.com/AdguardTeam/Scriptlets/issues/130
+ if (content.length === 0 && typeof scriptEl.src !== 'undefined' && startsWith$1(scriptEl.src, SRC_DATA_MARKER)) {
var encodedContent = scriptEl.src.slice(SRC_DATA_MARKER.length);
content = window.atob(encodedContent);
}
-
if (scriptEl instanceof HTMLScriptElement && content.length > 0 && scriptEl !== ourScript && searchRegexp.test(content)) {
hit(source);
throw new ReferenceError(rid);
}
};
-
var setChainPropAccess = function setChainPropAccess(owner, property) {
var chainInfo = getPropertyInChain(owner, property);
var base = chainInfo.base;
var prop = chainInfo.prop,
- chain = chainInfo.chain; // The scriptlet might be executed before the chain property has been created
+ chain = chainInfo.chain; // The scriptlet might be executed before the chain property has been created
// (for instance, document.body before the HTML body was loaded).
// In this case we're checking whether the base element exists or not
// and if not, we simply exit without overriding anything.
// e.g. https://github.com/AdguardTeam/Scriptlets/issues/57#issuecomment-575841092
-
if (base instanceof Object === false && base === null) {
var props = property.split('.');
var propIndex = props.indexOf(prop);
@@ -3267,16 +3013,13 @@
logMessage(source, message);
return;
}
-
if (chain) {
var setter = function setter(a) {
base = a;
-
if (a instanceof Object) {
setChainPropAccess(a, chain);
}
};
-
Object.defineProperty(owner, prop, {
get: function get() {
return base;
@@ -3285,33 +3028,27 @@
});
return;
}
-
var currentValue = base[prop];
var origDescriptor = Object.getOwnPropertyDescriptor(base, prop);
-
if (origDescriptor instanceof Object === false || origDescriptor.get instanceof Function === false) {
currentValue = base[prop];
origDescriptor = undefined;
}
-
var descriptorWrapper = Object.assign(getDescriptorAddon(), {
currentValue: currentValue,
get: function get() {
if (!this.isAbortingSuspended) {
this.isolateCallback(abort);
}
-
if (origDescriptor instanceof Object) {
return origDescriptor.get.call(base);
}
-
return this.currentValue;
},
set: function set(newValue) {
if (!this.isAbortingSuspended) {
this.isolateCallback(abort);
}
-
if (origDescriptor instanceof Object) {
origDescriptor.set.call(base, newValue);
} else {
@@ -3329,18 +3066,19 @@
}
});
};
-
setChainPropAccess(window, property);
window.onerror = createOnErrorHandler(rid).bind();
}
- abortCurrentInlineScript$1.names = ['abort-current-inline-script', // aliases are needed for matching the related scriptlet converted into our syntax
- 'abort-current-script.js', 'ubo-abort-current-script.js', 'acs.js', 'ubo-acs.js', // "ubo"-aliases with no "js"-ending
- 'ubo-abort-current-script', 'ubo-acs', // obsolete but supported aliases
+ abortCurrentInlineScript$1.names = ['abort-current-inline-script',
+ // aliases are needed for matching the related scriptlet converted into our syntax
+ 'abort-current-script.js', 'ubo-abort-current-script.js', 'acs.js', 'ubo-acs.js',
+ // "ubo"-aliases with no "js"-ending
+ 'ubo-abort-current-script', 'ubo-acs',
+ // obsolete but supported aliases
'abort-current-inline-script.js', 'ubo-abort-current-inline-script.js', 'acis.js', 'ubo-acis.js', 'ubo-abort-current-inline-script', 'ubo-acis', 'abp-abort-current-inline-script'];
- abortCurrentInlineScript$1.injections = [randomId, setPropertyAccess, getPropertyInChain, toRegExp, startsWith, createOnErrorHandler, hit, logMessage, isEmptyObject, getDescriptorAddon];
+ abortCurrentInlineScript$1.injections = [randomId, setPropertyAccess, getPropertyInChain, toRegExp, startsWith$1, createOnErrorHandler, hit, logMessage, isEmptyObject, getDescriptorAddon];
/* eslint-disable max-len */
-
/**
* @scriptlet set-constant
*
@@ -3407,18 +3145,14 @@
* ✔ document.third() === true // if the condition described above is met
* ```
*/
-
/* eslint-enable max-len */
-
function setConstant$1(source, property, value, stack) {
if (!property || !matchStackTrace(stack, new Error().stack)) {
return;
}
-
var emptyArr = noopArray();
var emptyObj = noopObject();
var constantValue;
-
if (value === 'undefined') {
constantValue = undefined;
} else if (value === 'false') {
@@ -3443,11 +3177,9 @@
constantValue = noopPromiseReject;
} else if (/^\d+$/.test(value)) {
constantValue = parseFloat(value);
-
if (nativeIsNaN(constantValue)) {
return;
}
-
if (Math.abs(constantValue) > 0x7FFF) {
return;
}
@@ -3462,41 +3194,33 @@
} else {
return;
}
-
var canceled = false;
-
var mustCancel = function mustCancel(value) {
if (canceled) {
return canceled;
}
-
canceled = value !== undefined && constantValue !== undefined && typeof value !== typeof constantValue && value !== null;
return canceled;
};
-
var trapProp = function trapProp(base, prop, configurable, handler) {
if (!handler.init(base[prop])) {
return false;
}
-
var origDescriptor = Object.getOwnPropertyDescriptor(base, prop);
- var prevSetter; // This is required to prevent scriptlets overwrite each over
-
+ var prevSetter;
+ // This is required to prevent scriptlets overwrite each over
if (origDescriptor instanceof Object) {
// This check is required to avoid defining non-configurable props
if (!origDescriptor.configurable) {
- var message = "set-constant: property '".concat(prop, "' is not configurable");
+ var message = "Property '".concat(prop, "' is not configurable");
logMessage(source, message);
return false;
}
-
base[prop] = constantValue;
-
if (origDescriptor.set instanceof Function) {
prevSetter = origDescriptor.set;
}
}
-
Object.defineProperty(base, prop, {
configurable: configurable,
get: function get() {
@@ -3506,20 +3230,17 @@
if (prevSetter !== undefined) {
prevSetter(a);
}
-
handler.set(a);
}
});
return true;
};
-
var setChainPropAccess = function setChainPropAccess(owner, property) {
var chainInfo = getPropertyInChain(owner, property);
var base = chainInfo.base;
var prop = chainInfo.prop,
- chain = chainInfo.chain; // Handler method init is used to keep track of factual value
+ chain = chainInfo.chain; // Handler method init is used to keep track of factual value
// and apply mustCancel() check only on end prop
-
var inChainPropHandler = {
factValue: undefined,
init: function init(a) {
@@ -3534,9 +3255,7 @@
if (this.factValue === a) {
return;
}
-
this.factValue = a;
-
if (a instanceof Object) {
setChainPropAccess(a, chain);
}
@@ -3547,7 +3266,6 @@
if (mustCancel(a)) {
return false;
}
-
return true;
},
get: function get() {
@@ -3557,51 +3275,50 @@
if (!mustCancel(a)) {
return;
}
-
constantValue = a;
}
- }; // End prop case
+ };
+ // End prop case
if (!chain) {
var isTrapped = trapProp(base, prop, false, endPropHandler);
-
if (isTrapped) {
hit(source);
}
-
return;
- } // Null prop in chain
-
+ }
+ // Null prop in chain
if (base !== undefined && base[prop] === null) {
trapProp(base, prop, true, inChainPropHandler);
return;
- } // Empty object prop in chain
-
+ }
+ // Empty object prop in chain
if ((base instanceof Object || typeof base === 'object') && isEmptyObject(base)) {
trapProp(base, prop, true, inChainPropHandler);
- } // Defined prop in chain
-
+ }
+ // Defined prop in chain
var propValue = owner[prop];
-
if (propValue instanceof Object || typeof propValue === 'object' && propValue !== null) {
setChainPropAccess(propValue, chain);
- } // Undefined prop in chain
-
+ }
+ // Undefined prop in chain
trapProp(base, prop, true, inChainPropHandler);
};
-
setChainPropAccess(window, property);
}
- setConstant$1.names = ['set-constant', // aliases are needed for matching the related scriptlet converted into our syntax
+ setConstant$1.names = ['set-constant',
+ // aliases are needed for matching the related scriptlet converted into our syntax
'set-constant.js', 'ubo-set-constant.js', 'set.js', 'ubo-set.js', 'ubo-set-constant', 'ubo-set', 'abp-override-property-read'];
- setConstant$1.injections = [hit, logMessage, noopArray, noopObject, noopFunc, trueFunc, falseFunc, noopPromiseReject, noopPromiseResolve, getPropertyInChain, setPropertyAccess, toRegExp, matchStackTrace, nativeIsNaN, isEmptyObject, getNativeRegexpTest];
+ setConstant$1.injections = [hit, logMessage, noopArray, noopObject, noopFunc, trueFunc, falseFunc, noopPromiseReject, noopPromiseResolve, getPropertyInChain, setPropertyAccess, toRegExp, matchStackTrace, nativeIsNaN, isEmptyObject, getNativeRegexpTest,
+ // following helpers should be imported and injected
+ // because they are used by helpers above
+ shouldAbortInlineOrInjectedScript];
/* eslint-disable max-len */
-
/**
* @scriptlet remove-cookie
*
@@ -3634,12 +3351,9 @@
* document.cookie = '__example=randomValue';
* ```
*/
-
/* eslint-enable max-len */
-
function removeCookie$1(source, match) {
var matchRegexp = toRegExp(match);
-
var removeCookieFromHost = function removeCookieFromHost(cookieName, hostName) {
var cookieSpec = "".concat(cookieName, "=");
var domain1 = "; domain=".concat(hostName);
@@ -3654,42 +3368,34 @@
document.cookie = cookieSpec + domain2 + path + expiration;
hit(source);
};
-
var rmCookie = function rmCookie() {
document.cookie.split(';').forEach(function (cookieStr) {
var pos = cookieStr.indexOf('=');
-
if (pos === -1) {
return;
}
-
var cookieName = cookieStr.slice(0, pos).trim();
-
if (!matchRegexp.test(cookieName)) {
return;
}
-
var hostParts = document.location.hostname.split('.');
-
for (var i = 0; i <= hostParts.length - 1; i += 1) {
var hostName = hostParts.slice(i).join('.');
-
if (hostName) {
removeCookieFromHost(cookieName, hostName);
}
}
});
};
-
rmCookie();
window.addEventListener('beforeunload', rmCookie);
}
- removeCookie$1.names = ['remove-cookie', // aliases are needed for matching the related scriptlet converted into our syntax
+ removeCookie$1.names = ['remove-cookie',
+ // aliases are needed for matching the related scriptlet converted into our syntax
'cookie-remover.js', 'ubo-cookie-remover.js', 'ubo-cookie-remover'];
removeCookie$1.injections = [toRegExp, hit];
/* eslint-disable max-len */
-
/**
* @scriptlet prevent-addEventListener
*
@@ -3727,51 +3433,53 @@
* });
* ```
*/
-
/* eslint-enable max-len */
-
function preventAddEventListener$1(source, typeSearch, listenerSearch) {
var typeSearchRegexp = toRegExp(typeSearch);
var listenerSearchRegexp = toRegExp(listenerSearch);
var nativeAddEventListener = window.EventTarget.prototype.addEventListener;
-
function addEventListenerWrapper(type, listener) {
+ var _this$constructor;
var shouldPrevent = false;
-
if (validateType(type) && validateListener(listener)) {
shouldPrevent = typeSearchRegexp.test(type.toString()) && listenerSearchRegexp.test(listenerToString(listener));
}
-
if (shouldPrevent) {
hit(source);
return undefined;
}
+ // Avoid illegal invocations due to lost context
+ // https://github.com/AdguardTeam/Scriptlets/issues/271
+ var context = this;
+ if (this && ((_this$constructor = this.constructor) === null || _this$constructor === void 0 ? void 0 : _this$constructor.name) === 'Window' && this !== window) {
+ context = window;
+ }
for (var _len = arguments.length, args = new Array(_len > 2 ? _len - 2 : 0), _key = 2; _key < _len; _key++) {
args[_key - 2] = arguments[_key];
}
-
- return nativeAddEventListener.apply(this, [type, listener].concat(args));
+ return nativeAddEventListener.apply(context, [type, listener].concat(args));
}
-
var descriptor = {
configurable: true,
set: function set() {},
get: function get() {
return addEventListenerWrapper;
}
- }; // https://github.com/AdguardTeam/Scriptlets/issues/215
+ };
+ // https://github.com/AdguardTeam/Scriptlets/issues/215
// https://github.com/AdguardTeam/Scriptlets/issues/143
-
Object.defineProperty(window.EventTarget.prototype, 'addEventListener', descriptor);
Object.defineProperty(window, 'addEventListener', descriptor);
Object.defineProperty(document, 'addEventListener', descriptor);
}
- preventAddEventListener$1.names = ['prevent-addEventListener', // aliases are needed for matching the related scriptlet converted into our syntax
+ preventAddEventListener$1.names = ['prevent-addEventListener',
+ // aliases are needed for matching the related scriptlet converted into our syntax
'addEventListener-defuser.js', 'ubo-addEventListener-defuser.js', 'aeld.js', 'ubo-aeld.js', 'ubo-addEventListener-defuser', 'ubo-aeld'];
preventAddEventListener$1.injections = [hit, toRegExp, validateType, validateListener, listenerToString];
/* eslint-disable consistent-return, no-eval */
+
/**
* @scriptlet prevent-bab
*
@@ -3789,82 +3497,66 @@
* example.org#%#//scriptlet('prevent-bab')
* ```
*/
-
- function preventBab$1(source) {
+ function preventBab$2(source) {
var nativeSetTimeout = window.setTimeout;
var babRegex = /\.bab_elementid.$/;
-
var timeoutWrapper = function timeoutWrapper(callback) {
if (typeof callback !== 'string' || !babRegex.test(callback)) {
for (var _len = arguments.length, args = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {
args[_key - 1] = arguments[_key];
}
-
return nativeSetTimeout.apply(window, [callback].concat(args));
}
-
hit(source);
};
-
window.setTimeout = timeoutWrapper;
var signatures = [['blockadblock'], ['babasbm'], [/getItem\('babn'\)/], ['getElementById', 'String.fromCharCode', 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789', 'charAt', 'DOMContentLoaded', 'AdBlock', 'addEventListener', 'doScroll', 'fromCharCode', '<<2|r>>4', 'sessionStorage', 'clientWidth', 'localStorage', 'Math', 'random']];
-
var check = function check(str) {
if (typeof str !== 'string') {
return false;
}
-
for (var i = 0; i < signatures.length; i += 1) {
var tokens = signatures[i];
var match = 0;
-
for (var j = 0; j < tokens.length; j += 1) {
var token = tokens[j];
var found = token instanceof RegExp ? token.test(str) : str.indexOf(token) > -1;
-
if (found) {
match += 1;
}
}
-
if (match / tokens.length >= 0.8) {
return true;
}
}
-
return false;
};
-
var nativeEval = window.eval;
-
var evalWrapper = function evalWrapper(str) {
if (!check(str)) {
return nativeEval(str);
}
-
hit(source);
var bodyEl = document.body;
-
if (bodyEl) {
bodyEl.style.removeProperty('visibility');
}
-
var el = document.getElementById('babasbmsgx');
-
if (el) {
el.parentNode.removeChild(el);
}
};
-
window.eval = evalWrapper.bind(window);
}
- preventBab$1.names = ['prevent-bab', // aliases are needed for matching the related scriptlet converted into our syntax
- 'nobab.js', 'ubo-nobab.js', 'bab-defuser.js', 'ubo-bab-defuser.js', 'ubo-nobab', 'ubo-bab-defuser'];
- preventBab$1.injections = [hit];
+ preventBab$2.names = ['prevent-bab'
+ // there is no aliases for this scriptlet
+ ];
+
+ preventBab$2.injections = [hit];
/* eslint-disable no-unused-vars, no-extra-bind, func-names */
- /* eslint-disable max-len */
+ /* eslint-disable max-len */
/**
* @scriptlet nowebrtc
*
@@ -3879,29 +3571,23 @@
* example.org#%#//scriptlet('nowebrtc')
* ```
*/
-
/* eslint-enable max-len */
-
function nowebrtc$1(source) {
var propertyName = '';
-
if (window.RTCPeerConnection) {
propertyName = 'RTCPeerConnection';
} else if (window.webkitRTCPeerConnection) {
propertyName = 'webkitRTCPeerConnection';
}
-
if (propertyName === '') {
return;
}
-
var rtcReplacement = function rtcReplacement(config) {
// eslint-disable-next-line max-len
var message = "Document tried to create an RTCPeerConnection: ".concat(convertRtcConfigToString(config));
logMessage(source, message);
hit(source);
};
-
rtcReplacement.prototype = {
close: noopFunc,
createDataChannel: noopFunc,
@@ -3910,7 +3596,6 @@
};
var rtc = window[propertyName];
window[propertyName] = rtcReplacement;
-
if (rtc.prototype) {
rtc.prototype.createDataChannel = function (a, b) {
return {
@@ -3920,7 +3605,8 @@
}.bind(null);
}
}
- nowebrtc$1.names = ['nowebrtc', // aliases are needed for matching the related scriptlet converted into our syntax
+ nowebrtc$1.names = ['nowebrtc',
+ // aliases are needed for matching the related scriptlet converted into our syntax
'nowebrtc.js', 'ubo-nowebrtc.js', 'ubo-nowebrtc'];
nowebrtc$1.injections = [hit, noopFunc, logMessage, convertRtcConfigToString];
@@ -3938,47 +3624,51 @@
* example.org#%#//scriptlet('log-addEventListener')
* ```
*/
-
function logAddEventListener$1(source) {
var nativeAddEventListener = window.EventTarget.prototype.addEventListener;
-
function addEventListenerWrapper(type, listener) {
+ var _this$constructor;
if (validateType(type) && validateListener(listener)) {
var _message = "addEventListener(\"".concat(type, "\", ").concat(listenerToString(listener), ")");
-
logMessage(source, _message, true);
hit(source);
- } // logging while debugging
-
+ }
+ // logging while debugging
var message = "Invalid event type or listener passed to addEventListener:\ntype: ".concat(convertTypeToString(type), "\nlistener: ").concat(convertTypeToString(listener));
logMessage(source, message, true);
+ // Avoid illegal invocations due to lost context
+ // https://github.com/AdguardTeam/Scriptlets/issues/271
+ var context = this;
+ if (this && ((_this$constructor = this.constructor) === null || _this$constructor === void 0 ? void 0 : _this$constructor.name) === 'Window' && this !== window) {
+ context = window;
+ }
for (var _len = arguments.length, args = new Array(_len > 2 ? _len - 2 : 0), _key = 2; _key < _len; _key++) {
args[_key - 2] = arguments[_key];
}
-
- return nativeAddEventListener.apply(this, [type, listener].concat(args));
+ return nativeAddEventListener.apply(context, [type, listener].concat(args));
}
-
var descriptor = {
configurable: true,
set: function set() {},
get: function get() {
return addEventListenerWrapper;
}
- }; // https://github.com/AdguardTeam/Scriptlets/issues/215
+ };
+ // https://github.com/AdguardTeam/Scriptlets/issues/215
// https://github.com/AdguardTeam/Scriptlets/issues/143
-
Object.defineProperty(window.EventTarget.prototype, 'addEventListener', descriptor);
Object.defineProperty(window, 'addEventListener', descriptor);
Object.defineProperty(document, 'addEventListener', descriptor);
}
- logAddEventListener$1.names = ['log-addEventListener', // aliases are needed for matching the related scriptlet converted into our syntax
+ logAddEventListener$1.names = ['log-addEventListener',
+ // aliases are needed for matching the related scriptlet converted into our syntax
'addEventListener-logger.js', 'ubo-addEventListener-logger.js', 'aell.js', 'ubo-aell.js', 'ubo-addEventListener-logger', 'ubo-aell'];
logAddEventListener$1.injections = [hit, validateType, validateListener, listenerToString, convertTypeToString, logMessage, objectToString, isEmptyObject, getObjectEntries];
/* eslint-disable no-eval */
+
/**
* @scriptlet log-eval
*
@@ -3990,32 +3680,26 @@
* example.org#%#//scriptlet('log-eval')
* ```
*/
-
function logEval$1(source) {
// wrap eval function
var nativeEval = window.eval;
-
function evalWrapper(str) {
hit(source);
logMessage(source, "eval(\"".concat(str, "\")"), true);
return nativeEval(str);
}
+ window.eval = evalWrapper;
- window.eval = evalWrapper; // wrap new Function
-
+ // wrap new Function
var nativeFunction = window.Function;
-
function FunctionWrapper() {
hit(source);
-
for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
args[_key] = arguments[_key];
}
-
logMessage(source, "new Function(".concat(args.join(', '), ")"), true);
return nativeFunction.apply(this, [].concat(args));
}
-
FunctionWrapper.prototype = Object.create(nativeFunction.prototype);
FunctionWrapper.prototype.constructor = FunctionWrapper;
window.Function = FunctionWrapper;
@@ -4039,12 +3723,13 @@
for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
args[_key] = arguments[_key];
}
-
console.log(args); // eslint-disable-line no-console
}
+
log$1.names = ['log'];
/* eslint-disable no-eval, no-extra-bind */
+
/**
* @scriptlet noeval
*
@@ -4063,17 +3748,19 @@
* example.org#%#//scriptlet('noeval')
* ```
*/
-
function noeval$1(source) {
window.eval = function evalWrapper(s) {
- hit(source, "AdGuard has prevented eval:\n".concat(s));
+ hit(source);
+ logMessage(source, "AdGuard has prevented eval:\n".concat(s), true);
}.bind();
}
- noeval$1.names = ['noeval', // aliases are needed for matching the related scriptlet converted into our syntax
+ noeval$1.names = ['noeval',
+ // aliases are needed for matching the related scriptlet converted into our syntax
'noeval.js', 'silent-noeval.js', 'ubo-noeval.js', 'ubo-silent-noeval.js', 'ubo-noeval', 'ubo-silent-noeval'];
- noeval$1.injections = [hit];
+ noeval$1.injections = [hit, logMessage];
/* eslint-disable no-eval, no-extra-bind, func-names */
+
/**
* @scriptlet prevent-eval-if
*
@@ -4098,25 +3785,24 @@
* example.org#%#//scriptlet('prevent-eval-if', 'test')
* ```
*/
-
function preventEvalIf$1(source, search) {
var searchRegexp = toRegExp(search);
var nativeEval = window.eval;
-
window.eval = function (payload) {
if (!searchRegexp.test(payload.toString())) {
return nativeEval.call(window, payload);
}
-
- hit(source, payload);
+ hit(source);
return undefined;
}.bind(window);
}
- preventEvalIf$1.names = ['prevent-eval-if', // aliases are needed for matching the related scriptlet converted into our syntax
+ preventEvalIf$1.names = ['prevent-eval-if',
+ // aliases are needed for matching the related scriptlet converted into our syntax
'noeval-if.js', 'ubo-noeval-if.js', 'ubo-noeval-if'];
preventEvalIf$1.injections = [toRegExp, hit];
/* eslint-disable func-names, no-multi-assign */
+
/**
* @scriptlet prevent-fab-3.2.0
*
@@ -4131,31 +3817,25 @@
* example.org#%#//scriptlet('prevent-fab-3.2.0')
* ```
*/
-
function preventFab$1(source) {
- hit(source); // redefines Fab function for adblock detection
+ hit(source);
+ // redefines Fab function for adblock detection
var Fab = function Fab() {};
-
Fab.prototype.check = noopFunc;
Fab.prototype.clearEvent = noopFunc;
Fab.prototype.emitEvent = noopFunc;
-
Fab.prototype.on = function (a, b) {
if (!a) {
b();
}
-
return this;
};
-
Fab.prototype.onDetected = noopThis;
-
Fab.prototype.onNotDetected = function (a) {
a();
return this;
};
-
Fab.prototype.setOption = noopFunc;
Fab.prototype.options = {
set: noopFunc,
@@ -4173,50 +3853,48 @@
return fab;
},
set: function set() {}
- }; // redefined Fab data properties which if 'FuckAdBlock' variable exists
+ };
+ // redefined Fab data properties which if 'FuckAdBlock' variable exists
if (Object.prototype.hasOwnProperty.call(window, 'FuckAdBlock')) {
window.FuckAdBlock = Fab;
} else {
// or redefined Fab accessor properties
Object.defineProperty(window, 'FuckAdBlock', getSetFab);
}
-
if (Object.prototype.hasOwnProperty.call(window, 'BlockAdBlock')) {
window.BlockAdBlock = Fab;
} else {
Object.defineProperty(window, 'BlockAdBlock', getSetFab);
}
-
if (Object.prototype.hasOwnProperty.call(window, 'SniffAdBlock')) {
window.SniffAdBlock = Fab;
} else {
Object.defineProperty(window, 'SniffAdBlock', getSetFab);
}
-
if (Object.prototype.hasOwnProperty.call(window, 'fuckAdBlock')) {
window.fuckAdBlock = fab;
} else {
Object.defineProperty(window, 'fuckAdBlock', getsetfab);
}
-
if (Object.prototype.hasOwnProperty.call(window, 'blockAdBlock')) {
window.blockAdBlock = fab;
} else {
Object.defineProperty(window, 'blockAdBlock', getsetfab);
}
-
if (Object.prototype.hasOwnProperty.call(window, 'sniffAdBlock')) {
window.sniffAdBlock = fab;
} else {
Object.defineProperty(window, 'sniffAdBlock', getsetfab);
}
}
- preventFab$1.names = ['prevent-fab-3.2.0', // aliases are needed for matching the related scriptlet converted into our syntax
+ preventFab$1.names = ['prevent-fab-3.2.0',
+ // aliases are needed for matching the related scriptlet converted into our syntax
'nofab.js', 'ubo-nofab.js', 'fuckadblock.js-3.2.0', 'ubo-fuckadblock.js-3.2.0', 'ubo-nofab'];
preventFab$1.injections = [hit, noopFunc, noopThis];
/* eslint-disable func-names, no-multi-assign */
+
/**
* @scriptlet set-popads-dummy
*
@@ -4231,7 +3909,6 @@
* example.org#%#//scriptlet('set-popads-dummy')
* ```
*/
-
function setPopadsDummy$1(source) {
delete window.PopAds;
delete window.popns;
@@ -4250,7 +3927,8 @@
}
});
}
- setPopadsDummy$1.names = ['set-popads-dummy', // aliases are needed for matching the related scriptlet converted into our syntax
+ setPopadsDummy$1.names = ['set-popads-dummy',
+ // aliases are needed for matching the related scriptlet converted into our syntax
'popads-dummy.js', 'ubo-popads-dummy.js', 'ubo-popads-dummy'];
setPopadsDummy$1.injections = [hit];
@@ -4268,14 +3946,11 @@
* example.org#%#//scriptlet('prevent-popads-net')
* ```
*/
-
function preventPopadsNet$1(source) {
var rid = randomId();
-
var throwError = function throwError() {
throw new ReferenceError(rid);
};
-
delete window.PopAds;
delete window.popns;
Object.defineProperties(window, {
@@ -4289,11 +3964,13 @@
window.onerror = createOnErrorHandler(rid).bind();
hit(source);
}
- preventPopadsNet$1.names = ['prevent-popads-net', // aliases are needed for matching the related scriptlet converted into our syntax
+ preventPopadsNet$1.names = ['prevent-popads-net',
+ // aliases are needed for matching the related scriptlet converted into our syntax
'popads.net.js', 'ubo-popads.net.js', 'ubo-popads.net'];
preventPopadsNet$1.injections = [createOnErrorHandler, randomId, hit];
/* eslint-disable func-names */
+
/**
* @scriptlet prevent-adfly
*
@@ -4308,16 +3985,13 @@
* example.org#%#//scriptlet('prevent-adfly')
* ```
*/
-
function preventAdfly$1(source) {
var isDigit = function isDigit(data) {
return /^\d$/.test(data);
};
-
var handler = function handler(encodedURL) {
var evenChars = '';
var oddChars = '';
-
for (var i = 0; i < encodedURL.length; i += 1) {
if (i % 2 === 0) {
evenChars += encodedURL.charAt(i);
@@ -4325,56 +3999,45 @@
oddChars = encodedURL.charAt(i) + oddChars;
}
}
-
var data = (evenChars + oddChars).split('');
-
for (var _i = 0; _i < data.length; _i += 1) {
if (isDigit(data[_i])) {
for (var ii = _i + 1; ii < data.length; ii += 1) {
if (isDigit(data[ii])) {
// eslint-disable-next-line no-bitwise
var temp = parseInt(data[_i], 10) ^ parseInt(data[ii], 10);
-
if (temp < 10) {
data[_i] = temp.toString();
}
-
_i = ii;
break;
}
}
}
}
-
data = data.join('');
var decodedURL = window.atob(data).slice(16, -16);
/* eslint-disable compat/compat */
-
if (window.stop) {
window.stop();
}
/* eslint-enable compat/compat */
-
-
window.onbeforeunload = null;
window.location.href = decodedURL;
};
-
- var val; // Do not apply handler more than one time
-
+ var val;
+ // Do not apply handler more than one time
var applyHandler = true;
var result = setPropertyAccess(window, 'ysmm', {
configurable: false,
set: function set(value) {
if (applyHandler) {
applyHandler = false;
-
try {
if (typeof value === 'string') {
handler(value);
}
} catch (err) {} // eslint-disable-line no-empty
-
}
val = value;
@@ -4383,19 +4046,18 @@
return val;
}
});
-
if (result) {
hit(source);
} else {
logMessage(source, 'Failed to set up prevent-adfly scriptlet');
}
}
- preventAdfly$1.names = ['prevent-adfly', // aliases are needed for matching the related scriptlet converted into our syntax
+ preventAdfly$1.names = ['prevent-adfly',
+ // aliases are needed for matching the related scriptlet converted into our syntax
'adfly-defuser.js', 'ubo-adfly-defuser.js', 'ubo-adfly-defuser'];
preventAdfly$1.injections = [setPropertyAccess, hit, logMessage];
/* eslint-disable max-len */
-
/**
* @scriptlet debug-on-property-read
*
@@ -4412,16 +4074,12 @@
* example.org#%#//scriptlet('debug-on-property-read', 'open')
* ```
*/
-
/* eslint-enable max-len */
-
function debugOnPropertyRead$1(source, property) {
if (!property) {
return;
}
-
var rid = randomId();
-
var abort = function abort() {
hit(source);
debugger; // eslint-disable-line no-debugger
@@ -4431,17 +4089,14 @@
var chainInfo = getPropertyInChain(owner, property);
var base = chainInfo.base;
var prop = chainInfo.prop,
- chain = chainInfo.chain;
-
+ chain = chainInfo.chain;
if (chain) {
var setter = function setter(a) {
base = a;
-
if (a instanceof Object) {
setChainPropAccess(a, chain);
}
};
-
Object.defineProperty(owner, prop, {
get: function get() {
return base;
@@ -4450,13 +4105,11 @@
});
return;
}
-
setPropertyAccess(base, prop, {
get: abort,
set: noopFunc
});
};
-
setChainPropAccess(window, property);
window.onerror = createOnErrorHandler(rid).bind();
}
@@ -4464,7 +4117,6 @@
debugOnPropertyRead$1.injections = [randomId, setPropertyAccess, getPropertyInChain, createOnErrorHandler, hit, noopFunc, isEmptyObject];
/* eslint-disable max-len */
-
/**
* @scriptlet debug-on-property-write
*
@@ -4479,16 +4131,12 @@
* example.org#%#//scriptlet('debug-on-property-write', 'test')
* ```
*/
-
/* eslint-enable max-len */
-
function debugOnPropertyWrite$1(source, property) {
if (!property) {
return;
}
-
var rid = randomId();
-
var abort = function abort() {
hit(source);
debugger; // eslint-disable-line no-debugger
@@ -4498,17 +4146,14 @@
var chainInfo = getPropertyInChain(owner, property);
var base = chainInfo.base;
var prop = chainInfo.prop,
- chain = chainInfo.chain;
-
+ chain = chainInfo.chain;
if (chain) {
var setter = function setter(a) {
base = a;
-
if (a instanceof Object) {
setChainPropAccess(a, chain);
}
};
-
Object.defineProperty(owner, prop, {
get: function get() {
return base;
@@ -4517,12 +4162,10 @@
});
return;
}
-
setPropertyAccess(base, prop, {
set: abort
});
};
-
setChainPropAccess(window, property);
window.onerror = createOnErrorHandler(rid).bind();
}
@@ -4530,7 +4173,6 @@
debugOnPropertyWrite$1.injections = [randomId, setPropertyAccess, getPropertyInChain, createOnErrorHandler, hit, isEmptyObject];
/* eslint-disable max-len */
-
/**
* @scriptlet debug-current-inline-script
*
@@ -4545,13 +4187,10 @@
* example.org#%#//scriptlet('debug-current-inline-script', 'alert')
* ```
*/
-
/* eslint-enable max-len */
-
function debugCurrentInlineScript$1(source, property, search) {
var searchRegexp = toRegExp(search);
var rid = randomId();
-
var getCurrentScript = function getCurrentScript() {
if ('currentScript' in document) {
return document.currentScript; // eslint-disable-line compat/compat
@@ -4560,27 +4199,23 @@
var scripts = document.getElementsByTagName('script');
return scripts[scripts.length - 1];
};
-
var ourScript = getCurrentScript();
-
var abort = function abort() {
var scriptEl = getCurrentScript();
-
if (!scriptEl) {
return;
}
+ var content = scriptEl.textContent;
- var content = scriptEl.textContent; // We are using Node.prototype.textContent property descriptor
+ // We are using Node.prototype.textContent property descriptor
// to get the real script content
// even when document.currentScript.textContent is replaced.
// https://github.com/AdguardTeam/Scriptlets/issues/57#issuecomment-593638991
-
try {
var textContentGetter = Object.getOwnPropertyDescriptor(Node.prototype, 'textContent').get;
content = textContentGetter.call(scriptEl);
} catch (e) {} // eslint-disable-line no-empty
-
if (scriptEl instanceof HTMLScriptElement && content.length > 0 && scriptEl !== ourScript && searchRegexp.test(content)) {
hit(source);
debugger; // eslint-disable-line no-debugger
@@ -4591,12 +4226,11 @@
var chainInfo = getPropertyInChain(owner, property);
var base = chainInfo.base;
var prop = chainInfo.prop,
- chain = chainInfo.chain; // The scriptlet might be executed before the chain property has been created
+ chain = chainInfo.chain; // The scriptlet might be executed before the chain property has been created
// (for instance, document.body before the HTML body was loaded).
// In this case we're checking whether the base element exists or not
// and if not, we simply exit without overriding anything.
// e.g. https://github.com/AdguardTeam/Scriptlets/issues/57#issuecomment-575841092
-
if (base instanceof Object === false && base === null) {
var props = property.split('.');
var propIndex = props.indexOf(prop);
@@ -4605,16 +4239,13 @@
logMessage(message, source.verbose);
return;
}
-
if (chain) {
var setter = function setter(a) {
base = a;
-
if (a instanceof Object) {
setChainPropAccess(a, chain);
}
};
-
Object.defineProperty(owner, prop, {
get: function get() {
return base;
@@ -4623,7 +4254,6 @@
});
return;
}
-
var currentValue = base[prop];
setPropertyAccess(base, prop, {
set: function set(value) {
@@ -4636,7 +4266,6 @@
}
});
};
-
setChainPropAccess(window, property);
window.onerror = createOnErrorHandler(rid).bind();
}
@@ -4644,7 +4273,6 @@
debugCurrentInlineScript$1.injections = [randomId, setPropertyAccess, getPropertyInChain, toRegExp, createOnErrorHandler, hit, logMessage, isEmptyObject];
/* eslint-disable max-len */
-
/**
* @scriptlet remove-attr
*
@@ -4704,31 +4332,23 @@
* example.org#%#//scriptlet('remove-attr', 'example', 'html', 'asap complete')
* ```
*/
-
/* eslint-enable max-len */
-
function removeAttr$1(source, attrs, selector) {
var applying = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : 'asap stay';
-
if (!attrs) {
return;
}
-
attrs = attrs.split(/\s*\|\s*/);
-
if (!selector) {
selector = "[".concat(attrs.join('],['), "]");
}
-
var rmattr = function rmattr() {
var nodes = [];
-
try {
nodes = [].slice.call(document.querySelectorAll(selector));
} catch (e) {
logMessage(source, "Invalid selector arg: '".concat(selector, "'"));
}
-
var removed = false;
nodes.forEach(function (node) {
attrs.forEach(function (attr) {
@@ -4736,25 +4356,19 @@
removed = true;
});
});
-
if (removed) {
hit(source);
}
};
-
var flags = parseFlags(applying);
-
var run = function run() {
rmattr();
-
if (!flags.hasFlag(flags.STAY)) {
return;
- } // 'true' for observing attributes
-
-
+ }
+ // 'true' for observing attributes
observeDOMChanges(rmattr, true);
};
-
if (flags.hasFlag(flags.ASAP)) {
// https://github.com/AdguardTeam/Scriptlets/issues/245
// Call rmattr on DOM content loaded
@@ -4767,7 +4381,6 @@
rmattr();
}
}
-
if (document.readyState !== 'complete' && flags.hasFlag(flags.COMPLETE)) {
window.addEventListener('load', run, {
once: true
@@ -4776,20 +4389,20 @@
// Only call rmattr for single 'stay' flag
if (!applying.indexOf(' ') !== -1) {
rmattr();
- } // 'true' for observing attributes
-
-
+ }
+ // 'true' for observing attributes
observeDOMChanges(rmattr, true);
}
}
- removeAttr$1.names = ['remove-attr', // aliases are needed for matching the related scriptlet converted into our syntax
+ removeAttr$1.names = ['remove-attr',
+ // aliases are needed for matching the related scriptlet converted into our syntax
'remove-attr.js', 'ubo-remove-attr.js', 'ra.js', 'ubo-ra.js', 'ubo-remove-attr', 'ubo-ra'];
- removeAttr$1.injections = [hit, observeDOMChanges, parseFlags, logMessage, // following helpers should be imported and injected
+ removeAttr$1.injections = [hit, observeDOMChanges, parseFlags, logMessage,
+ // following helpers should be imported and injected
// because they are used by helpers above
throttle];
/* eslint-disable max-len */
-
/**
* @scriptlet set-attr
*
@@ -4834,21 +4447,16 @@
* Some text
* ```
*/
-
/* eslint-enable max-len */
-
function setAttr$1(source, selector, attr) {
var value = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : '';
-
if (!selector || !attr) {
return;
- } // Drop strings that cant be parsed into number, negative numbers and numbers below 32767
-
-
+ }
+ // Drop strings that cant be parsed into number, negative numbers and numbers below 32767
if (value.length !== 0 && (nativeIsNaN(parseInt(value, 10)) || parseInt(value, 10) < 0 || parseInt(value, 10) > 0x7FFF)) {
return;
}
-
var setAttr = function setAttr() {
var nodes = [].slice.call(document.querySelectorAll(selector));
var set = false;
@@ -4856,22 +4464,20 @@
node.setAttribute(attr, value);
set = true;
});
-
if (set) {
hit(source);
}
};
-
setAttr();
observeDOMChanges(setAttr, true);
}
setAttr$1.names = ['set-attr'];
- setAttr$1.injections = [hit, observeDOMChanges, nativeIsNaN, // following helpers should be imported and injected
+ setAttr$1.injections = [hit, observeDOMChanges, nativeIsNaN,
+ // following helpers should be imported and injected
// because they are used by helpers above
throttle];
/* eslint-disable max-len */
-
/**
* @scriptlet remove-class
*
@@ -4935,51 +4541,41 @@
* example.org#%#//scriptlet('remove-class', 'branding', 'div[class^="inner"]', 'asap complete')
* ```
*/
-
/* eslint-enable max-len */
function removeClass$1(source, classNames, selector) {
var applying = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : 'asap stay';
-
if (!classNames) {
return;
}
-
classNames = classNames.split(/\s*\|\s*/);
var selectors = [];
-
if (!selector) {
selectors = classNames.map(function (className) {
return ".".concat(className);
});
}
-
var removeClassHandler = function removeClassHandler() {
var nodes = new Set();
-
if (selector) {
var foundNodes = [];
-
try {
foundNodes = [].slice.call(document.querySelectorAll(selector));
} catch (e) {
logMessage(source, "Invalid selector arg: '".concat(selector, "'"));
}
-
foundNodes.forEach(function (n) {
return nodes.add(n);
});
} else if (selectors.length > 0) {
selectors.forEach(function (s) {
var elements = document.querySelectorAll(s);
-
for (var i = 0; i < elements.length; i += 1) {
var element = elements[i];
nodes.add(element);
}
});
}
-
var removed = false;
nodes.forEach(function (node) {
classNames.forEach(function (className) {
@@ -4989,27 +4585,21 @@
}
});
});
-
if (removed) {
hit(source);
}
};
-
var CLASS_ATTR_NAME = ['class'];
var flags = parseFlags(applying);
-
var run = function run() {
removeClassHandler();
-
if (!flags.hasFlag(flags.STAY)) {
return;
- } // 'true' for observing attributes
+ }
+ // 'true' for observing attributes
// 'class' for observing only classes
-
-
observeDOMChanges(removeClassHandler, true, CLASS_ATTR_NAME);
};
-
if (flags.hasFlag(flags.ASAP)) {
// https://github.com/AdguardTeam/Scriptlets/issues/245
// Call removeClassHandler on DOM content loaded
@@ -5022,7 +4612,6 @@
removeClassHandler();
}
}
-
if (document.readyState !== 'complete' && flags.hasFlag(flags.COMPLETE)) {
window.addEventListener('load', run, {
once: true
@@ -5032,13 +4621,14 @@
if (!applying.indexOf(' ') !== -1) {
removeClassHandler();
}
-
observeDOMChanges(removeClassHandler, true, CLASS_ATTR_NAME);
}
}
- removeClass$1.names = ['remove-class', // aliases are needed for matching the related scriptlet converted into our syntax
+ removeClass$1.names = ['remove-class',
+ // aliases are needed for matching the related scriptlet converted into our syntax
'remove-class.js', 'ubo-remove-class.js', 'rc.js', 'ubo-rc.js', 'ubo-remove-class', 'ubo-rc'];
- removeClass$1.injections = [hit, logMessage, observeDOMChanges, parseFlags, // following helpers should be imported and injected
+ removeClass$1.injections = [hit, logMessage, observeDOMChanges, parseFlags,
+ // following helpers should be imported and injected
// because they are used by helpers above
throttle];
@@ -5056,11 +4646,9 @@
* example.org#%#//scriptlet('disable-newtab-links')
* ```
*/
-
function disableNewtabLinks$1(source) {
document.addEventListener('click', function (ev) {
var target = ev.target;
-
while (target !== null) {
if (target.localName === 'a' && target.hasAttribute('target')) {
ev.stopPropagation();
@@ -5068,17 +4656,16 @@
hit(source);
break;
}
-
target = target.parentNode;
}
});
}
- disableNewtabLinks$1.names = ['disable-newtab-links', // aliases are needed for matching the related scriptlet converted into our syntax
+ disableNewtabLinks$1.names = ['disable-newtab-links',
+ // aliases are needed for matching the related scriptlet converted into our syntax
'disable-newtab-links.js', 'ubo-disable-newtab-links.js', 'ubo-disable-newtab-links'];
disableNewtabLinks$1.injections = [hit];
/* eslint-disable max-len */
-
/**
* @scriptlet adjust-setInterval
*
@@ -5127,13 +4714,10 @@
* example.org#%#//scriptlet('adjust-setInterval', '', '*', '0.02')
* ```
*/
-
/* eslint-enable max-len */
-
function adjustSetInterval$1(source, matchCallback, matchDelay, boost) {
var nativeSetInterval = window.setInterval;
var matchRegexp = toRegExp(matchCallback);
-
var intervalWrapper = function intervalWrapper(callback, delay) {
// https://github.com/AdguardTeam/Scriptlets/issues/221
if (!isValidCallback(callback)) {
@@ -5144,23 +4728,21 @@
delay *= getBoostMultiplier(boost);
hit(source);
}
-
for (var _len = arguments.length, args = new Array(_len > 2 ? _len - 2 : 0), _key = 2; _key < _len; _key++) {
args[_key - 2] = arguments[_key];
}
-
return nativeSetInterval.apply(window, [callback, delay].concat(args));
};
-
window.setInterval = intervalWrapper;
}
- adjustSetInterval$1.names = ['adjust-setInterval', // aliases are needed for matching the related scriptlet converted into our syntax
+ adjustSetInterval$1.names = ['adjust-setInterval',
+ // aliases are needed for matching the related scriptlet converted into our syntax
'nano-setInterval-booster.js', 'ubo-nano-setInterval-booster.js', 'nano-sib.js', 'ubo-nano-sib.js', 'ubo-nano-setInterval-booster', 'ubo-nano-sib'];
- adjustSetInterval$1.injections = [hit, isValidCallback, toRegExp, getBoostMultiplier, isDelayMatched, logMessage, // following helpers should be injected as helpers above use them
+ adjustSetInterval$1.injections = [hit, isValidCallback, toRegExp, getBoostMultiplier, isDelayMatched, logMessage,
+ // following helpers should be injected as helpers above use them
nativeIsNaN, nativeIsFinite, getMatchDelay, shouldMatchAnyDelay];
/* eslint-disable max-len */
-
/**
* @scriptlet adjust-setTimeout
*
@@ -5209,13 +4791,10 @@
* example.org#%#//scriptlet('adjust-setTimeout', 'test', '*')
* ```
*/
-
/* eslint-enable max-len */
-
function adjustSetTimeout$1(source, matchCallback, matchDelay, boost) {
var nativeSetTimeout = window.setTimeout;
var matchRegexp = toRegExp(matchCallback);
-
var timeoutWrapper = function timeoutWrapper(callback, delay) {
// https://github.com/AdguardTeam/Scriptlets/issues/221
if (!isValidCallback(callback)) {
@@ -5226,23 +4805,21 @@
delay *= getBoostMultiplier(boost);
hit(source);
}
-
for (var _len = arguments.length, args = new Array(_len > 2 ? _len - 2 : 0), _key = 2; _key < _len; _key++) {
args[_key - 2] = arguments[_key];
}
-
return nativeSetTimeout.apply(window, [callback, delay].concat(args));
};
-
window.setTimeout = timeoutWrapper;
}
- adjustSetTimeout$1.names = ['adjust-setTimeout', // aliases are needed for matching the related scriptlet converted into our syntax
+ adjustSetTimeout$1.names = ['adjust-setTimeout',
+ // aliases are needed for matching the related scriptlet converted into our syntax
'nano-setTimeout-booster.js', 'ubo-nano-setTimeout-booster.js', 'nano-stb.js', 'ubo-nano-stb.js', 'ubo-nano-setTimeout-booster', 'ubo-nano-stb'];
- adjustSetTimeout$1.injections = [hit, isValidCallback, toRegExp, getBoostMultiplier, isDelayMatched, logMessage, // following helpers should be injected as helpers above use them
+ adjustSetTimeout$1.injections = [hit, isValidCallback, toRegExp, getBoostMultiplier, isDelayMatched, logMessage,
+ // following helpers should be injected as helpers above use them
nativeIsNaN, nativeIsFinite, getMatchDelay, shouldMatchAnyDelay];
/* eslint-disable max-len */
-
/**
* @scriptlet dir-string
*
@@ -5268,38 +4845,23 @@
* example.org#%#//scriptlet('dir-string', '2')
* ```
*/
-
/* eslint-enable max-len */
-
function dirString$1(source, times) {
var _console = console,
- dir = _console.dir;
- times = parseInt(times, 10);
-
+ dir = _console.dir;
function dirWrapper(object) {
- // eslint-disable-next-line no-unused-vars
- var temp;
-
- for (var i = 0; i < times; i += 1) {
- // eslint-disable-next-line no-unused-expressions
- temp = "".concat(object);
- }
-
if (typeof dir === 'function') {
dir.call(this, object);
}
-
- hit(source, temp);
- } // eslint-disable-next-line no-console
-
-
+ hit(source);
+ }
+ // eslint-disable-next-line no-console
console.dir = dirWrapper;
}
dirString$1.names = ['dir-string', 'abp-dir-string'];
dirString$1.injections = [hit];
/* eslint-disable max-len */
-
/**
* @scriptlet json-prune
*
@@ -5375,45 +4937,40 @@
* example.org#%#//scriptlet('json-prune', '', '"id":"117458"')
* ```
*/
-
/* eslint-enable max-len */
-
function jsonPrune$1(source, propsToRemove, requiredInitialProps, stack) {
if (!!stack && !matchStackTrace(stack, new Error().stack)) {
return;
}
-
var prunePaths = propsToRemove !== undefined && propsToRemove !== '' ? propsToRemove.split(/ +/) : [];
var requiredPaths = requiredInitialProps !== undefined && requiredInitialProps !== '' ? requiredInitialProps.split(/ +/) : [];
-
function isPruningNeeded(root) {
if (!root) {
return false;
}
+ var shouldProcess;
- var shouldProcess; // Only log hostname and matched JSON payload if only second argument is present
-
+ // Only log hostname and matched JSON payload if only second argument is present
if (prunePaths.length === 0 && requiredPaths.length > 0) {
var rootString = JSON.stringify(root);
var matchRegex = toRegExp(requiredPaths.join(''));
var shouldLog = matchRegex.test(rootString);
-
if (shouldLog) {
- logMessage(source, "".concat(window.location.hostname, " ").concat(root), true);
+ logMessage(source, "".concat(window.location.hostname, " ").concat(objectToString(root)), true);
shouldProcess = false;
return shouldProcess;
}
}
-
for (var i = 0; i < requiredPaths.length; i += 1) {
var requiredPath = requiredPaths[i];
var lastNestedPropName = requiredPath.split('.').pop();
- var hasWildcard = requiredPath.indexOf('.*.') > -1 || requiredPath.indexOf('*.') > -1 || requiredPath.indexOf('.*') > -1 || requiredPath.indexOf('.[].') > -1 || requiredPath.indexOf('[].') > -1 || requiredPath.indexOf('.[]') > -1; // if the path has wildcard, getPropertyInChain should 'look through' chain props
+ var hasWildcard = requiredPath.indexOf('.*.') > -1 || requiredPath.indexOf('*.') > -1 || requiredPath.indexOf('.*') > -1 || requiredPath.indexOf('.[].') > -1 || requiredPath.indexOf('[].') > -1 || requiredPath.indexOf('.[]') > -1;
- var details = getWildcardPropertyInChain(root, requiredPath, hasWildcard); // start value of 'shouldProcess' due to checking below
+ // if the path has wildcard, getPropertyInChain should 'look through' chain props
+ var details = getWildcardPropertyInChain(root, requiredPath, hasWildcard);
+ // start value of 'shouldProcess' due to checking below
shouldProcess = !hasWildcard;
-
for (var _i = 0; _i < details.length; _i += 1) {
if (hasWildcard) {
// if there is a wildcard,
@@ -5425,28 +4982,25 @@
}
}
}
-
return shouldProcess;
}
+
/**
* Prunes properties of 'root' object
* @param {Object} root
*/
-
-
var jsonPruner = function jsonPruner(root) {
if (prunePaths.length === 0 && requiredPaths.length === 0) {
- logMessage(source, "".concat(window.location.hostname, " ").concat(root), true);
+ logMessage(source, "".concat(window.location.hostname, " ").concat(objectToString(root)), true);
return root;
}
-
try {
if (isPruningNeeded(root) === false) {
return root;
- } // if pruning is needed, we check every input pathToRemove
- // and delete it if root has it
-
+ }
+ // if pruning is needed, we check every input pathToRemove
+ // and delete it if root has it
prunePaths.forEach(function (path) {
var ownerObjArr = getWildcardPropertyInChain(root, path, true);
ownerObjArr.forEach(function (ownerObj) {
@@ -5459,51 +5013,50 @@
} catch (e) {
logMessage(source, e);
}
-
return root;
};
-
var nativeJSONParse = JSON.parse;
-
var jsonParseWrapper = function jsonParseWrapper() {
for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
args[_key] = arguments[_key];
}
-
// dealing with stringified json in args, which should be parsed.
// so we call nativeJSONParse as JSON.parse which is bound to JSON object
var root = nativeJSONParse.apply(JSON, args);
return jsonPruner(root);
- }; // JSON.parse mocking
-
+ };
+ // JSON.parse mocking
jsonParseWrapper.toString = nativeJSONParse.toString.bind(nativeJSONParse);
- JSON.parse = jsonParseWrapper; // eslint-disable-next-line compat/compat
-
- var nativeResponseJson = Response.prototype.json; // eslint-disable-next-line func-names
+ JSON.parse = jsonParseWrapper;
+ // eslint-disable-next-line compat/compat
+ var nativeResponseJson = Response.prototype.json;
+ // eslint-disable-next-line func-names
var responseJsonWrapper = function responseJsonWrapper() {
var promise = nativeResponseJson.apply(this);
return promise.then(function (obj) {
return jsonPruner(obj);
});
- }; // do nothing if browser does not support Response (e.g. Internet Explorer)
- // https://developer.mozilla.org/en-US/docs/Web/API/Response
-
+ };
+ // do nothing if browser does not support Response (e.g. Internet Explorer)
+ // https://developer.mozilla.org/en-US/docs/Web/API/Response
if (typeof Response === 'undefined') {
return;
- } // eslint-disable-next-line compat/compat
-
+ }
+ // eslint-disable-next-line compat/compat
Response.prototype.json = responseJsonWrapper;
}
- jsonPrune$1.names = ['json-prune', // aliases are needed for matching the related scriptlet converted into our syntax
+ jsonPrune$1.names = ['json-prune',
+ // aliases are needed for matching the related scriptlet converted into our syntax
'json-prune.js', 'ubo-json-prune.js', 'ubo-json-prune', 'abp-json-prune'];
- jsonPrune$1.injections = [hit, matchStackTrace, getWildcardPropertyInChain, logMessage, toRegExp, getNativeRegexpTest];
+ jsonPrune$1.injections = [hit, matchStackTrace, getWildcardPropertyInChain, logMessage, objectToString,
+ // following helpers are needed for helpers above
+ toRegExp, isEmptyObject, getObjectEntries, getNativeRegexpTest, shouldAbortInlineOrInjectedScript];
/* eslint-disable max-len */
-
/**
* @scriptlet prevent-requestAnimationFrame
*
@@ -5571,49 +5124,43 @@
* });
* ```
*/
-
/* eslint-enable max-len */
function preventRequestAnimationFrame$1(source, match) {
- var nativeRequestAnimationFrame = window.requestAnimationFrame; // logs requestAnimationFrame to console if no arguments have been specified
+ var nativeRequestAnimationFrame = window.requestAnimationFrame;
+ // logs requestAnimationFrame to console if no arguments have been specified
var shouldLog = typeof match === 'undefined';
-
var _parseMatchArg = parseMatchArg(match),
- isInvertedMatch = _parseMatchArg.isInvertedMatch,
- matchRegexp = _parseMatchArg.matchRegexp;
-
+ isInvertedMatch = _parseMatchArg.isInvertedMatch,
+ matchRegexp = _parseMatchArg.matchRegexp;
var rafWrapper = function rafWrapper(callback) {
var shouldPrevent = false;
-
if (shouldLog) {
hit(source);
logMessage(source, "requestAnimationFrame(".concat(String(callback), ")"), true);
} else if (isValidCallback(callback) && isValidStrPattern(match)) {
shouldPrevent = matchRegexp.test(callback.toString()) !== isInvertedMatch;
}
-
if (shouldPrevent) {
hit(source);
return nativeRequestAnimationFrame(noopFunc);
}
-
for (var _len = arguments.length, args = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {
args[_key - 1] = arguments[_key];
}
-
return nativeRequestAnimationFrame.apply(window, [callback].concat(args));
};
-
window.requestAnimationFrame = rafWrapper;
}
- preventRequestAnimationFrame$1.names = ['prevent-requestAnimationFrame', // aliases are needed for matching the related scriptlet converted into our syntax
+ preventRequestAnimationFrame$1.names = ['prevent-requestAnimationFrame',
+ // aliases are needed for matching the related scriptlet converted into our syntax
'no-requestAnimationFrame-if.js', 'ubo-no-requestAnimationFrame-if.js', 'norafif.js', 'ubo-norafif.js', 'ubo-no-requestAnimationFrame-if', 'ubo-norafif'];
- preventRequestAnimationFrame$1.injections = [hit, noopFunc, parseMatchArg, isValidStrPattern, isValidCallback, logMessage, // following helpers should be injected as helpers above use them
- escapeRegExp, toRegExp, startsWith];
+ preventRequestAnimationFrame$1.injections = [hit, noopFunc, parseMatchArg, isValidStrPattern, isValidCallback, logMessage,
+ // following helpers should be injected as helpers above use them
+ escapeRegExp, toRegExp, startsWith$1];
/* eslint-disable max-len */
-
/**
* @scriptlet set-cookie
*
@@ -5647,27 +5194,27 @@
* example.org#%#//scriptlet('set-cookie', 'cookie_consent', 'ok', 'none')
* ```
*/
-
/* eslint-enable max-len */
-
function setCookie$1(source, name, value) {
var path = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : '/';
- var validValue = getLimitedCookieValue(source, value);
-
+ var validValue = getLimitedCookieValue(value);
if (validValue === null) {
logMessage(source, "Invalid cookie value: '".concat(validValue, "'"));
return;
}
-
- var cookieData = concatCookieNameValuePath(source, name, validValue, path);
-
- if (cookieData) {
- hit(source);
- document.cookie = cookieData;
+ if (!isValidCookiePath(path)) {
+ logMessage(source, "Invalid cookie path: '".concat(path, "'"));
+ return;
+ }
+ var cookieToSet = concatCookieNameValuePath(name, validValue, path);
+ if (!cookieToSet) {
+ return;
}
+ hit(source);
+ document.cookie = cookieToSet;
}
setCookie$1.names = ['set-cookie'];
- setCookie$1.injections = [hit, logMessage, nativeIsNaN, isCookieSetWithValue, getLimitedCookieValue, concatCookieNameValuePath, isValidCookieRawPath, getCookiePath];
+ setCookie$1.injections = [hit, logMessage, nativeIsNaN, isCookieSetWithValue, getLimitedCookieValue, concatCookieNameValuePath, isValidCookiePath, getCookiePath];
/**
* @scriptlet set-cookie-reload
@@ -5704,35 +5251,35 @@
* example.org#%#//scriptlet('set-cookie-reload', 'cookie-set', 'true', 'none')
* ```
*/
-
function setCookieReload$1(source, name, value) {
var path = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : '/';
-
- if (isCookieSetWithValue(name, value)) {
+ if (isCookieSetWithValue(document.cookie, name, value)) {
return;
}
-
- var validValue = getLimitedCookieValue(source, value);
-
+ var validValue = getLimitedCookieValue(value);
if (validValue === null) {
- logMessage(source, "Invalid cookie value: '".concat(validValue, "'"));
+ logMessage(source, "Invalid cookie value: '".concat(value, "'"));
return;
}
+ if (!isValidCookiePath(path)) {
+ logMessage(source, "Invalid cookie path: '".concat(path, "'"));
+ return;
+ }
+ var cookieToSet = concatCookieNameValuePath(name, validValue, path);
+ if (!cookieToSet) {
+ return;
+ }
+ document.cookie = cookieToSet;
+ hit(source);
- var cookieData = concatCookieNameValuePath(source, name, validValue, path);
-
- if (cookieData) {
- document.cookie = cookieData;
- hit(source); // Only reload the page if cookie was set
- // https://github.com/AdguardTeam/Scriptlets/issues/212
-
- if (isCookieSetWithValue(document.cookie, name, value)) {
- window.location.reload();
- }
+ // Only reload the page if cookie was set
+ // https://github.com/AdguardTeam/Scriptlets/issues/212
+ if (isCookieSetWithValue(document.cookie, name, value)) {
+ window.location.reload();
}
}
setCookieReload$1.names = ['set-cookie-reload'];
- setCookieReload$1.injections = [hit, logMessage, nativeIsNaN, isCookieSetWithValue, getLimitedCookieValue, concatCookieNameValuePath, isValidCookieRawPath, getCookiePath];
+ setCookieReload$1.injections = [hit, logMessage, nativeIsNaN, isCookieSetWithValue, getLimitedCookieValue, concatCookieNameValuePath, isValidCookiePath, getCookiePath];
/**
* @scriptlet hide-in-shadow-dom
@@ -5761,54 +5308,49 @@
* virustotal.com#%#//scriptlet('hide-in-shadow-dom', 'vt-ui-contact-fab')
* ```
*/
-
function hideInShadowDom$1(source, selector, baseSelector) {
// do nothing if browser does not support ShadowRoot
// https://developer.mozilla.org/en-US/docs/Web/API/ShadowRoot
if (!Element.prototype.attachShadow) {
return;
}
-
var hideElement = function hideElement(targetElement) {
var DISPLAY_NONE_CSS = 'display:none!important;';
targetElement.style.cssText = DISPLAY_NONE_CSS;
};
+
/**
* Handles shadow-dom piercing and hiding of found elements
*/
-
-
var hideHandler = function hideHandler() {
// start value of shadow-dom hosts for the page dom
- var hostElements = !baseSelector ? findHostElements(document.documentElement) : document.querySelectorAll(baseSelector); // if there is shadow-dom host, they should be explored
+ var hostElements = !baseSelector ? findHostElements(document.documentElement) : document.querySelectorAll(baseSelector);
+ // if there is shadow-dom host, they should be explored
while (hostElements.length !== 0) {
var isHidden = false;
-
var _pierceShadowDom = pierceShadowDom(selector, hostElements),
- targets = _pierceShadowDom.targets,
- innerHosts = _pierceShadowDom.innerHosts;
-
+ targets = _pierceShadowDom.targets,
+ innerHosts = _pierceShadowDom.innerHosts;
targets.forEach(function (targetEl) {
hideElement(targetEl);
isHidden = true;
});
-
if (isHidden) {
hit(source);
- } // continue to pierce for inner shadow-dom hosts
- // and search inside them while the next iteration
-
+ }
+ // continue to pierce for inner shadow-dom hosts
+ // and search inside them while the next iteration
hostElements = innerHosts;
}
};
-
hideHandler();
observeDOMChanges(hideHandler, true);
}
hideInShadowDom$1.names = ['hide-in-shadow-dom'];
- hideInShadowDom$1.injections = [hit, observeDOMChanges, findHostElements, pierceShadowDom, // following helpers should be imported and injected
+ hideInShadowDom$1.injections = [hit, observeDOMChanges, findHostElements, pierceShadowDom,
+ // following helpers should be imported and injected
// because they are used by helpers above
flatten, throttle];
@@ -5839,58 +5381,52 @@
* virustotal.com#%#//scriptlet('remove-in-shadow-dom', 'vt-ui-contact-fab')
* ```
*/
-
function removeInShadowDom$1(source, selector, baseSelector) {
// do nothing if browser does not support ShadowRoot
// https://developer.mozilla.org/en-US/docs/Web/API/ShadowRoot
if (!Element.prototype.attachShadow) {
return;
}
-
var removeElement = function removeElement(targetElement) {
targetElement.remove();
};
+
/**
* Handles shadow-dom piercing and removing of found elements
*/
-
-
var removeHandler = function removeHandler() {
// start value of shadow-dom hosts for the page dom
- var hostElements = !baseSelector ? findHostElements(document.documentElement) : document.querySelectorAll(baseSelector); // if there is shadow-dom host, they should be explored
+ var hostElements = !baseSelector ? findHostElements(document.documentElement) : document.querySelectorAll(baseSelector);
+ // if there is shadow-dom host, they should be explored
while (hostElements.length !== 0) {
var isRemoved = false;
-
var _pierceShadowDom = pierceShadowDom(selector, hostElements),
- targets = _pierceShadowDom.targets,
- innerHosts = _pierceShadowDom.innerHosts;
-
+ targets = _pierceShadowDom.targets,
+ innerHosts = _pierceShadowDom.innerHosts;
targets.forEach(function (targetEl) {
removeElement(targetEl);
isRemoved = true;
});
-
if (isRemoved) {
hit(source);
- } // continue to pierce for inner shadow-dom hosts
- // and search inside them while the next iteration
-
+ }
+ // continue to pierce for inner shadow-dom hosts
+ // and search inside them while the next iteration
hostElements = innerHosts;
}
};
-
removeHandler();
observeDOMChanges(removeHandler, true);
}
removeInShadowDom$1.names = ['remove-in-shadow-dom'];
- removeInShadowDom$1.injections = [hit, observeDOMChanges, findHostElements, pierceShadowDom, // following helpers should be imported and injected
+ removeInShadowDom$1.injections = [hit, observeDOMChanges, findHostElements, pierceShadowDom,
+ // following helpers should be imported and injected
// because they are used by helpers above
flatten, throttle];
/* eslint-disable max-len */
-
/**
* @scriptlet prevent-fetch
*
@@ -5956,68 +5492,63 @@
* ! Specify response body for all fetch calls
* example.org#%#//scriptlet('prevent-fetch', '', 'emptyArr')
* ```
+ *
+ * 7. Prevent all fetch calls and specify response type value
+ * ```
+ * example.org#%#//scriptlet('prevent-fetch', '*', '', 'opaque')
+ * ```
*/
-
/* eslint-enable max-len */
-
function preventFetch$1(source, propsToMatch) {
var responseBody = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 'emptyObj';
var responseType = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : 'default';
-
// do nothing if browser does not support fetch or Proxy (e.g. Internet Explorer)
// https://developer.mozilla.org/en-US/docs/Web/API/WindowOrWorkerGlobalScope/fetch
// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Proxy
if (typeof fetch === 'undefined' || typeof Proxy === 'undefined' || typeof Response === 'undefined') {
return;
}
-
var strResponseBody;
-
- if (responseBody === 'emptyObj') {
+ if (responseBody === '' || responseBody === 'emptyObj') {
strResponseBody = '{}';
} else if (responseBody === 'emptyArr') {
strResponseBody = '[]';
} else {
return;
- } // Skip disallowed response types
-
+ }
+ // Skip disallowed response types
if (!(responseType === 'default' || responseType === 'opaque')) {
logMessage(source, "Invalid parameter: ".concat(responseType));
return;
}
-
var handlerWrapper = function handlerWrapper(target, thisArg, args) {
var shouldPrevent = false;
var fetchData = getFetchData(args);
-
if (typeof propsToMatch === 'undefined') {
logMessage(source, "fetch( ".concat(objectToString(fetchData), " )"), true);
hit(source);
return Reflect.apply(target, thisArg, args);
}
-
shouldPrevent = matchRequestProps(source, propsToMatch, fetchData);
-
if (shouldPrevent) {
hit(source);
return noopPromiseResolve(strResponseBody, fetchData.url, responseType);
}
-
return Reflect.apply(target, thisArg, args);
};
-
var fetchHandler = {
apply: handlerWrapper
};
fetch = new Proxy(fetch, fetchHandler); // eslint-disable-line no-global-assign
}
- preventFetch$1.names = ['prevent-fetch', // aliases are needed for matching the related scriptlet converted into our syntax
+
+ preventFetch$1.names = ['prevent-fetch',
+ // aliases are needed for matching the related scriptlet converted into our syntax
'no-fetch-if.js', 'ubo-no-fetch-if.js', 'ubo-no-fetch-if'];
- preventFetch$1.injections = [hit, getFetchData, objectToString, noopPromiseResolve, matchRequestProps, logMessage, toRegExp, isValidStrPattern, escapeRegExp, isEmptyObject, getRequestData, getObjectEntries, getObjectFromEntries, parseMatchProps, validateParsedData, getMatchPropsData];
+ preventFetch$1.injections = [hit, getFetchData, objectToString, noopPromiseResolve, matchRequestProps, logMessage, toRegExp, isValidStrPattern, escapeRegExp, isEmptyObject, getRequestData, getRequestProps, getObjectEntries, getObjectFromEntries, parseMatchProps, validateParsedData, getMatchPropsData];
/* eslint-disable max-len */
-
/**
* @scriptlet set-local-storage-item
*
@@ -6051,7 +5582,6 @@
* example.org#%#//scriptlet('set-local-storage-item', 'exit-intent-marketing', '1')
* ```
*/
-
/* eslint-enable max-len */
function setLocalStorageItem$1(source, key, value) {
@@ -6059,16 +5589,15 @@
logMessage(source, 'Item key should be specified.');
return;
}
-
- var validValue = getLimitedStorageItemValue(source, value);
-
- if (validValue === null) {
- logMessage(source, "Invalid cookie value: '".concat(validValue, "'"));
+ var validValue;
+ try {
+ validValue = getLimitedStorageItemValue(value);
+ } catch (_unused) {
+ logMessage(source, "Invalid storage item value: '".concat(value, "'"));
return;
}
-
var _window = window,
- localStorage = _window.localStorage;
+ localStorage = _window.localStorage;
setStorageItem(source, localStorage, key, validValue);
hit(source);
}
@@ -6076,7 +5605,6 @@
setLocalStorageItem$1.injections = [hit, logMessage, nativeIsNaN, setStorageItem, getLimitedStorageItemValue];
/* eslint-disable max-len */
-
/**
* @scriptlet set-session-storage-item
*
@@ -6110,7 +5638,6 @@
* example.org#%#//scriptlet('set-session-storage-item', 'exit-intent-marketing', '1')
* ```
*/
-
/* eslint-enable max-len */
function setSessionStorageItem$1(source, key, value) {
@@ -6118,23 +5645,22 @@
logMessage(source, 'Item key should be specified.');
return;
}
-
- var validValue = getLimitedStorageItemValue(source, value);
-
- if (validValue === null) {
- logMessage(source, "Invalid cookie value: '".concat(validValue, "'"));
+ var validValue;
+ try {
+ validValue = getLimitedStorageItemValue(value);
+ } catch (_unused) {
+ logMessage(source, "Invalid storage item value: '".concat(value, "'"));
return;
}
-
var _window = window,
- sessionStorage = _window.sessionStorage;
+ sessionStorage = _window.sessionStorage;
setStorageItem(source, sessionStorage, key, validValue);
+ hit(source);
}
setSessionStorageItem$1.names = ['set-session-storage-item'];
setSessionStorageItem$1.injections = [hit, logMessage, nativeIsNaN, setStorageItem, getLimitedStorageItemValue];
/* eslint-disable max-len */
-
/**
* @scriptlet abort-on-stack-trace
*
@@ -6174,36 +5700,28 @@
* example.org#%#//scriptlet('abort-on-stack-trace', 'Ya', 'injectedScript')
* ```
*/
-
/* eslint-enable max-len */
-
function abortOnStackTrace$1(source, property, stack) {
if (!property || !stack) {
return;
}
-
var rid = randomId();
-
var abort = function abort() {
hit(source);
throw new ReferenceError(rid);
};
-
var setChainPropAccess = function setChainPropAccess(owner, property) {
var chainInfo = getPropertyInChain(owner, property);
var base = chainInfo.base;
var prop = chainInfo.prop,
- chain = chainInfo.chain;
-
+ chain = chainInfo.chain;
if (chain) {
var setter = function setter(a) {
base = a;
-
if (a instanceof Object) {
setChainPropAccess(a, chain);
}
};
-
Object.defineProperty(owner, prop, {
get: function get() {
return base;
@@ -6212,27 +5730,24 @@
});
return;
}
-
if (!stack.match(/^(inlineScript|injectedScript)$/) && !isValidStrPattern(stack)) {
logMessage(source, "Invalid parameter: ".concat(stack));
return;
- } // Prevent infinite loops when trapping prop used by helpers in getter/setter
-
+ }
+ // Prevent infinite loops when trapping prop used by helpers in getter/setter
var descriptorWrapper = Object.assign(getDescriptorAddon(), {
value: base[prop],
get: function get() {
if (!this.isAbortingSuspended && this.isolateCallback(matchStackTrace, stack, new Error().stack)) {
abort();
}
-
return this.value;
},
set: function set(newValue) {
if (!this.isAbortingSuspended && this.isolateCallback(matchStackTrace, stack, new Error().stack)) {
abort();
}
-
this.value = newValue;
}
});
@@ -6246,16 +5761,15 @@
}
});
};
-
setChainPropAccess(window, property);
window.onerror = createOnErrorHandler(rid).bind();
}
- abortOnStackTrace$1.names = ['abort-on-stack-trace', // aliases are needed for matching the related scriptlet converted into our syntax
+ abortOnStackTrace$1.names = ['abort-on-stack-trace',
+ // aliases are needed for matching the related scriptlet converted into our syntax
'abort-on-stack-trace.js', 'ubo-abort-on-stack-trace.js', 'aost.js', 'ubo-aost.js', 'ubo-abort-on-stack-trace', 'ubo-aost', 'abp-abort-on-stack-trace'];
- abortOnStackTrace$1.injections = [randomId, setPropertyAccess, getPropertyInChain, createOnErrorHandler, hit, isValidStrPattern, escapeRegExp, matchStackTrace, getDescriptorAddon, logMessage, toRegExp, isEmptyObject, getNativeRegexpTest, startsWith, shouldAbortInlineOrInjectedScript$1];
+ abortOnStackTrace$1.injections = [randomId, setPropertyAccess, getPropertyInChain, createOnErrorHandler, hit, isValidStrPattern, escapeRegExp, matchStackTrace, getDescriptorAddon, logMessage, toRegExp, isEmptyObject, getNativeRegexpTest, startsWith$1, shouldAbortInlineOrInjectedScript];
/* eslint-disable max-len */
-
/**
* @scriptlet log-on-stack-trace
*
@@ -6272,48 +5786,40 @@
*
* - `property` - required, path to a property. The property must be attached to window.
*/
-
/* eslint-enable max-len */
-
function logOnStacktrace$1(source, property) {
if (!property) {
return;
}
-
var refineStackTrace = function refineStackTrace(stackString) {
// Split stack trace string by lines and remove first two elements ('Error' and getter call)
// Remove ' at ' at the start of each string
var stackSteps = stackString.split('\n').slice(2).map(function (line) {
return line.replace(/ {4}at /, '');
- }); // Trim each line extracting funcName : fullPath pair
-
+ });
+ // Trim each line extracting funcName : fullPath pair
var logInfoArray = stackSteps.map(function (line) {
var funcName;
var funcFullPath;
/* eslint-disable-next-line no-useless-escape */
-
var reg = /\(([^\)]+)\)/;
var regFirefox = /(.*?@)(\S+)(:\d+):\d+\)?$/;
-
if (line.match(reg)) {
funcName = line.split(' ').slice(0, -1).join(' ');
/* eslint-disable-next-line prefer-destructuring */
-
funcFullPath = line.match(reg)[1];
} else if (line.match(regFirefox)) {
funcName = line.split('@').slice(0, -1).join(' ');
/* eslint-disable-next-line prefer-destructuring */
-
funcFullPath = line.match(regFirefox)[2];
} else {
// For when func name is not available
funcName = 'function name is not available';
funcFullPath = line;
}
-
return [funcName, funcFullPath];
- }); // Convert array into object for better display using console.table
-
+ });
+ // Convert array into object for better display using console.table
var logInfoObject = {};
logInfoArray.forEach(function (pair) {
/* eslint-disable-next-line prefer-destructuring */
@@ -6321,22 +5827,18 @@
});
return logInfoObject;
};
-
var setChainPropAccess = function setChainPropAccess(owner, property) {
var chainInfo = getPropertyInChain(owner, property);
var base = chainInfo.base;
var prop = chainInfo.prop,
- chain = chainInfo.chain;
-
+ chain = chainInfo.chain;
if (chain) {
var setter = function setter(a) {
base = a;
-
if (a instanceof Object) {
setChainPropAccess(a, chain);
}
};
-
Object.defineProperty(owner, prop, {
get: function get() {
return base;
@@ -6345,10 +5847,8 @@
});
return;
}
-
var value = base[prop];
/* eslint-disable no-console, compat/compat */
-
setPropertyAccess(base, prop, {
get: function get() {
hit(source);
@@ -6372,7 +5872,6 @@
logOnStacktrace$1.injections = [getPropertyInChain, setPropertyAccess, hit, logMessage, isEmptyObject];
/* eslint-disable max-len */
-
/**
* @scriptlet prevent-xhr
*
@@ -6438,21 +5937,17 @@
* example.org#%#//scriptlet('prevent-xhr', 'example.org', 'length:100-300')
* ```
*/
-
/* eslint-enable max-len */
-
function preventXHR$1(source, propsToMatch, customResponseText) {
// do nothing if browser does not support Proxy (e.g. Internet Explorer)
// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Proxy
if (typeof Proxy === 'undefined') {
return;
}
-
var shouldPrevent = false;
var response = '';
var responseText = '';
var responseUrl;
-
var openWrapper = function openWrapper(target, thisArg, args) {
// Get method and url from .open()
var xhrData = {
@@ -6460,7 +5955,6 @@
url: args[1]
};
responseUrl = xhrData.url;
-
if (typeof propsToMatch === 'undefined') {
// Log if no propsToMatch given
logMessage(source, "xhr( ".concat(objectToString(xhrData), " )"), true);
@@ -6468,34 +5962,27 @@
} else {
shouldPrevent = matchRequestProps(source, propsToMatch, xhrData);
}
-
return Reflect.apply(target, thisArg, args);
};
-
var sendWrapper = function sendWrapper(target, thisArg, args) {
if (!shouldPrevent) {
return Reflect.apply(target, thisArg, args);
}
-
if (thisArg.responseType === 'blob') {
response = new Blob();
}
-
if (thisArg.responseType === 'arraybuffer') {
response = new ArrayBuffer();
}
-
if (customResponseText) {
var randomText = generateRandomResponse(customResponseText);
-
if (randomText) {
responseText = randomText;
} else {
logMessage(source, "Invalid range: ".concat(customResponseText));
}
- } // Mock response object
-
-
+ }
+ // Mock response object
Object.defineProperties(thisArg, {
readyState: {
value: 4,
@@ -6525,8 +6012,8 @@
value: 'OK',
writable: false
}
- }); // Mock events
-
+ });
+ // Mock events
setTimeout(function () {
var stateEvent = new Event('readystatechange');
thisArg.dispatchEvent(stateEvent);
@@ -6538,7 +6025,6 @@
hit(source);
return undefined;
};
-
var openHandler = {
apply: openWrapper
};
@@ -6548,9 +6034,10 @@
XMLHttpRequest.prototype.open = new Proxy(XMLHttpRequest.prototype.open, openHandler);
XMLHttpRequest.prototype.send = new Proxy(XMLHttpRequest.prototype.send, sendHandler);
}
- preventXHR$1.names = ['prevent-xhr', // aliases are needed for matching the related scriptlet converted into our syntax
+ preventXHR$1.names = ['prevent-xhr',
+ // aliases are needed for matching the related scriptlet converted into our syntax
'no-xhr-if.js', 'ubo-no-xhr-if.js', 'ubo-no-xhr-if'];
- preventXHR$1.injections = [hit, logMessage, objectToString, matchRequestProps, generateRandomResponse, toRegExp, isValidStrPattern, escapeRegExp, isEmptyObject, getObjectEntries, getNumberFromString, nativeIsFinite, nativeIsNaN, parseMatchProps, validateParsedData, getMatchPropsData, getRandomIntInclusive, getRandomStrByLength];
+ preventXHR$1.injections = [hit, logMessage, objectToString, matchRequestProps, generateRandomResponse, toRegExp, isValidStrPattern, escapeRegExp, isEmptyObject, getObjectEntries, getNumberFromString, nativeIsFinite, nativeIsNaN, parseMatchProps, validateParsedData, getMatchPropsData, getRequestProps, getRandomIntInclusive, getRandomStrByLength];
/**
* @scriptlet close-window
@@ -6559,7 +6046,7 @@
* Closes the browser tab immediately.
*
* > `window.close()` usage is restricted in Chrome. In this case
- * tab will only be closed if using AdGuard browser extension.
+ * tab will only be closed when using AdGuard browser extension.
*
* **Syntax**
* ```
@@ -6579,16 +6066,14 @@
* example.org#%#//scriptlet('close-window', '/example-page.html')
* ```
*/
-
function forceWindowClose$1(source) {
var path = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : '';
-
// https://github.com/AdguardTeam/Scriptlets/issues/158#issuecomment-993423036
if (typeof window.close !== 'function') {
var message = 'window.close() is not a function so \'close-window\' scriptlet is unavailable';
logMessage(source, message);
+ return;
}
-
var closeImmediately = function closeImmediately() {
try {
hit(source);
@@ -6599,12 +6084,10 @@
logMessage(source, e);
}
};
-
var closeByExtension = function closeByExtension() {
var extCall = function extCall() {
dispatchEvent(new Event('adguard:scriptlet-close-window'));
};
-
window.addEventListener('adguard:subscribed-to-close-window', extCall, {
once: true
});
@@ -6614,20 +6097,16 @@
});
}, 5000);
};
-
var shouldClose = function shouldClose() {
if (path === '') {
return true;
}
-
var pathRegexp = toRegExp(path);
var currentPath = "".concat(window.location.pathname).concat(window.location.search);
return pathRegexp.test(currentPath);
};
-
if (shouldClose()) {
closeImmediately();
-
if (navigator.userAgent.indexOf('Chrome') > -1) {
closeByExtension();
}
@@ -6637,7 +6116,6 @@
forceWindowClose$1.injections = [hit, toRegExp, logMessage];
/* eslint-disable max-len */
-
/**
* @scriptlet prevent-refresh
*
@@ -6665,13 +6143,10 @@
* cryptodirectories.com#%#//scriptlet('prevent-refresh', 3)
* ```
*/
-
/* eslint-enable max-len */
-
function preventRefresh$1(source, delaySec) {
var getMetaElements = function getMetaElements() {
var metaNodes = [];
-
try {
metaNodes = document.querySelectorAll('meta[http-equiv="refresh" i][content]');
} catch (e) {
@@ -6682,72 +6157,59 @@
logMessage(source, e);
}
}
-
return Array.from(metaNodes);
};
-
var getMetaContentDelay = function getMetaContentDelay(metaElements) {
var delays = metaElements.map(function (meta) {
var contentString = meta.getAttribute('content');
-
if (contentString.length === 0) {
return null;
}
-
- var contentDelay; // https://developer.mozilla.org/en-US/docs/Web/HTML/Element/meta#attr-http-equiv
-
+ var contentDelay;
+ // https://developer.mozilla.org/en-US/docs/Web/HTML/Element/meta#attr-http-equiv
var limiterIndex = contentString.indexOf(';');
-
if (limiterIndex !== -1) {
var delaySubstring = contentString.substring(0, limiterIndex);
contentDelay = getNumberFromString(delaySubstring);
} else {
contentDelay = getNumberFromString(contentString);
}
-
return contentDelay;
}).filter(function (delay) {
return delay !== null;
- }); // Check if "delays" array is empty, may happens when meta's content is invalid
+ });
+ // Check if "delays" array is empty, may happens when meta's content is invalid
// and reduce() method cannot be used with empty arrays without initial value
-
if (!delays.length) {
return null;
- } // Get smallest delay of all metas on the page
-
-
+ }
+ // Get smallest delay of all metas on the page
var minDelay = delays.reduce(function (a, b) {
return Math.min(a, b);
- }); // eslint-disable-next-line consistent-return
-
+ });
+ // eslint-disable-next-line consistent-return
return minDelay;
};
-
var stop = function stop() {
var metaElements = getMetaElements();
-
if (metaElements.length === 0) {
return;
}
-
- var secondsToRun = getNumberFromString(delaySec); // Check if argument is provided
-
+ var secondsToRun = getNumberFromString(delaySec);
+ // Check if argument is provided
if (secondsToRun === null) {
secondsToRun = getMetaContentDelay(metaElements);
- } // Check if meta tag has delay
-
-
+ }
+ // Check if meta tag has delay
if (secondsToRun === null) {
return;
}
-
var delayMs = secondsToRun * 1000;
setTimeout(function () {
window.stop();
hit(source);
}, delayMs);
};
-
if (document.readyState === 'loading') {
document.addEventListener('DOMContentLoaded', stop, {
once: true
@@ -6756,15 +6218,16 @@
stop();
}
}
- preventRefresh$1.names = ['prevent-refresh', // Aliases are needed for matching the related scriptlet converted into our syntax
+ preventRefresh$1.names = ['prevent-refresh',
+ // Aliases are needed for matching the related scriptlet converted into our syntax
// These are used by UBO rules syntax
// https://github.com/gorhill/uBlock/wiki/Resources-Library#general-purpose-scriptlets
- 'refresh-defuser.js', 'refresh-defuser', // Prefix 'ubo-' is required to run converted rules
+ 'refresh-defuser.js', 'refresh-defuser',
+ // Prefix 'ubo-' is required to run converted rules
'ubo-refresh-defuser.js', 'ubo-refresh-defuser'];
preventRefresh$1.injections = [hit, getNumberFromString, logMessage, nativeIsNaN];
/* eslint-disable max-len, consistent-return */
-
/**
* @scriptlet prevent-element-src-loading
*
@@ -6788,15 +6251,12 @@
* example.org#%#//scriptlet('prevent-element-src-loading', 'script' ,'adsbygoogle')
* ```
*/
-
/* eslint-enable max-len */
-
function preventElementSrcLoading$1(source, tagName, match) {
// do nothing if browser does not support Proxy or Reflect
if (typeof Proxy === 'undefined' || typeof Reflect === 'undefined') {
return;
}
-
var srcMockData = {
// "KCk9Pnt9" = "()=>{}"
script: 'data:text/javascript;base64,KCk9Pnt9',
@@ -6806,7 +6266,6 @@
iframe: 'data:text/html;base64, PGRpdj48L2Rpdj4='
};
var instance;
-
if (tagName === 'script') {
instance = HTMLScriptElement;
} else if (tagName === 'img') {
@@ -6815,62 +6274,60 @@
instance = HTMLIFrameElement;
} else {
return;
- } // For websites that use Trusted Types
- // https://w3c.github.io/webappsec-trusted-types/dist/spec/
-
+ }
+ // For websites that use Trusted Types
+ // https://w3c.github.io/webappsec-trusted-types/dist/spec/
var hasTrustedTypes = window.trustedTypes && typeof window.trustedTypes.createPolicy === 'function';
var policy;
-
if (hasTrustedTypes) {
- policy = window.trustedTypes.createPolicy('mock', {
+ // The name for the trusted-types policy should only be 'AGPolicy',because corelibs can
+ // allow our policy if the server has restricted the creation of a trusted-types policy with
+ // the directive 'Content-Security-Policy: trusted-types ;`.
+ // If such a header is presented in the server response, corelibs adds permission to create
+ // the 'AGPolicy' policy with the 'allow-duplicates' option to prevent errors.
+ // See AG-18204 for details.
+ policy = window.trustedTypes.createPolicy('AGPolicy', {
createScriptURL: function createScriptURL(arg) {
return arg;
}
});
}
-
var SOURCE_PROPERTY_NAME = 'src';
var ONERROR_PROPERTY_NAME = 'onerror';
- var searchRegexp = toRegExp(match); // This will be needed to silent error events on matched element,
- // as url wont be available
+ var searchRegexp = toRegExp(match);
+ // This will be needed to silent error events on matched element,
+ // as url wont be available
var setMatchedAttribute = function setMatchedAttribute(elem) {
return elem.setAttribute(source.name, 'matched');
};
-
var setAttributeWrapper = function setAttributeWrapper(target, thisArg, args) {
// Check if arguments are present
if (!args[0] || !args[1]) {
return Reflect.apply(target, thisArg, args);
}
-
var nodeName = thisArg.nodeName.toLowerCase();
var attrName = args[0].toLowerCase();
var attrValue = args[1];
var isMatched = attrName === SOURCE_PROPERTY_NAME && tagName.toLowerCase() === nodeName && srcMockData[nodeName] && searchRegexp.test(attrValue);
-
if (!isMatched) {
return Reflect.apply(target, thisArg, args);
}
-
hit(source);
- setMatchedAttribute(thisArg); // Forward the URI that corresponds with element's MIME type
-
+ setMatchedAttribute(thisArg);
+ // Forward the URI that corresponds with element's MIME type
return Reflect.apply(target, thisArg, [attrName, srcMockData[nodeName]]);
};
-
var setAttributeHandler = {
apply: setAttributeWrapper
- }; // eslint-disable-next-line max-len
-
+ };
+ // eslint-disable-next-line max-len
instance.prototype.setAttribute = new Proxy(Element.prototype.setAttribute, setAttributeHandler);
var origSrcDescriptor = safeGetDescriptor(instance.prototype, SOURCE_PROPERTY_NAME);
-
if (!origSrcDescriptor) {
return;
}
-
Object.defineProperty(instance.prototype, SOURCE_PROPERTY_NAME, {
enumerable: true,
configurable: true,
@@ -6880,33 +6337,30 @@
set: function set(urlValue) {
var nodeName = this.nodeName.toLowerCase();
var isMatched = tagName.toLowerCase() === nodeName && srcMockData[nodeName] && searchRegexp.test(urlValue);
-
if (!isMatched) {
origSrcDescriptor.set.call(this, urlValue);
return true;
- } // eslint-disable-next-line no-undef
-
+ }
+ // eslint-disable-next-line no-undef
if (policy && urlValue instanceof TrustedScriptURL) {
var trustedSrc = policy.createScriptURL(urlValue);
origSrcDescriptor.set.call(this, trustedSrc);
hit(source);
return;
}
-
setMatchedAttribute(this);
origSrcDescriptor.set.call(this, srcMockData[nodeName]);
hit(source);
}
- }); // https://github.com/AdguardTeam/Scriptlets/issues/228
- // Prevent error event being triggered by other sources
+ });
+ // https://github.com/AdguardTeam/Scriptlets/issues/228
+ // Prevent error event being triggered by other sources
var origOnerrorDescriptor = safeGetDescriptor(HTMLElement.prototype, ONERROR_PROPERTY_NAME);
-
if (!origOnerrorDescriptor) {
return;
}
-
Object.defineProperty(HTMLElement.prototype, ONERROR_PROPERTY_NAME, {
enumerable: true,
configurable: true,
@@ -6915,37 +6369,30 @@
},
set: function set(cb) {
var isMatched = this.getAttribute(source.name) === 'matched';
-
if (!isMatched) {
origOnerrorDescriptor.set.call(this, cb);
return true;
}
-
origOnerrorDescriptor.set.call(this, noopFunc);
return true;
}
});
-
var addEventListenerWrapper = function addEventListenerWrapper(target, thisArg, args) {
// Check if arguments are present
if (!args[0] || !args[1]) {
return Reflect.apply(target, thisArg, args);
}
-
var eventName = args[0];
- var isMatched = thisArg.getAttribute(source.name) === 'matched' && eventName === 'error';
-
+ var isMatched = typeof thisArg.getAttribute === 'function' && thisArg.getAttribute(source.name) === 'matched' && eventName === 'error';
if (isMatched) {
return Reflect.apply(target, thisArg, [eventName, noopFunc]);
}
-
return Reflect.apply(target, thisArg, args);
};
-
var addEventListenerHandler = {
apply: addEventListenerWrapper
- }; // eslint-disable-next-line max-len
-
+ };
+ // eslint-disable-next-line max-len
EventTarget.prototype.addEventListener = new Proxy(EventTarget.prototype.addEventListener, addEventListenerHandler);
}
preventElementSrcLoading$1.names = ['prevent-element-src-loading'];
@@ -6963,1076 +6410,213 @@
* example.org#%#//scriptlet('no-topics')
* ```
*/
-
function noTopics$1(source) {
var TOPICS_PROPERTY_NAME = 'browsingTopics';
-
if (Document instanceof Object === false) {
return;
}
-
if (!Object.prototype.hasOwnProperty.call(Document.prototype, TOPICS_PROPERTY_NAME) || Document.prototype[TOPICS_PROPERTY_NAME] instanceof Function === false) {
return;
- } // document.browsingTopics() is async function so it's better to return noopPromiseResolve()
- // https://github.com/patcg-individual-drafts/topics#the-api-and-how-it-works
-
+ }
+ // document.browsingTopics() is async function so it's better to return noopPromiseResolve()
+ // https://github.com/patcg-individual-drafts/topics#the-api-and-how-it-works
Document.prototype[TOPICS_PROPERTY_NAME] = function () {
return noopPromiseResolve('[]');
};
-
hit(source);
}
noTopics$1.names = ['no-topics'];
noTopics$1.injections = [hit, noopPromiseResolve];
- function createCommonjsModule(fn) {
- var module = { exports: {} };
- return fn(module, module.exports), module.exports;
- }
-
- function commonjsRequire (target) {
- throw new Error('Could not dynamically require "' + target + '". Please configure the dynamicRequireTargets option of @rollup/plugin-commonjs appropriately for this require call to behave properly.');
- }
-
+ /* eslint-disable max-len */
/**
- * Copyright (c) 2014-present, Facebook, Inc.
+ * @trustedScriptlet trusted-replace-xhr-response
+ *
+ * @description
+ * Replaces response content of `xhr` requests if **all** given parameters match.
+ *
+ * **Syntax**
+ * ```
+ * example.org#%#//scriptlet('trusted-replace-xhr-response'[, pattern, replacement[, propsToMatch]])
+ * ```
+ *
+ * - pattern - optional, argument for matching contents of responseText that should be replaced. If set, `replacement` is required;
+ * possible values:
+ * - '*' to match all text content
+ * - non-empty string
+ * - regular expression
+ * - replacement — optional, should be set if `pattern` is set. String to replace matched content with. Empty string to remove content.
+ * - propsToMatch — optional, string of space-separated properties to match for extra condition; possible props:
+ * - string or regular expression for matching the URL passed to `.open()` call;
+ * - colon-separated pairs name:value where
+ * - name - name is string or regular expression for matching XMLHttpRequest property name
+ * - value is string or regular expression for matching the value of the option passed to `.open()` call
+ *
+ * > Usage with no arguments will log XMLHttpRequest objects to browser console;
+ * which is useful for debugging but not permitted for production filter lists.
+ *
+ * **Examples**
+ * 1. Log all XMLHttpRequests
+ * ```
+ * example.org#%#//scriptlet('trusted-replace-xhr-response')
+ * ```
+ *
+ * 2. Replace text content of XMLHttpRequests with specific url
+ * ```
+ * example.org#%#//scriptlet('trusted-replace-xhr-response', 'adb_detect:true', 'adb_detect:false', 'example.org')
+ * example.org#%#//scriptlet('trusted-replace-xhr-response', '/#EXT-X-VMAP-AD-BREAK[\s\S]*?/', '#EXT-X-ENDLIST', 'example.org')
+ * ```
+ *
+ * 3. Remove all text content of XMLHttpRequests with specific request method
+ * ```
+ * example.org#%#//scriptlet('trusted-replace-xhr-response', '*', '', 'method:GET')
+ * ```
*
- * This source code is licensed under the MIT license found in the
- * LICENSE file in the root directory of this source tree.
+ * 4. Replace text content of XMLHttpRequests matching by URL regex and request methods
+ * ```
+ * example.org#%#//scriptlet('trusted-replace-xhr-response', '/#EXT-X-VMAP-AD-BREAK[\s\S]*?/', '#EXT-X-ENDLIST', '/\.m3u8/ method:/GET|HEAD/')
+ * ```
+ * 5. Remove all text content of all XMLHttpRequests for example.com
+ * ```
+ * example.org#%#//scriptlet('trusted-replace-xhr-response', '*', '', 'example.com')
+ * ```
*/
- var runtime_1 = createCommonjsModule(function (module) {
- var runtime = function (exports) {
-
- var Op = Object.prototype;
- var hasOwn = Op.hasOwnProperty;
- var undefined$1; // More compressible than void 0.
-
- var $Symbol = typeof Symbol === "function" ? Symbol : {};
- var iteratorSymbol = $Symbol.iterator || "@@iterator";
- var asyncIteratorSymbol = $Symbol.asyncIterator || "@@asyncIterator";
- var toStringTagSymbol = $Symbol.toStringTag || "@@toStringTag";
-
- function define(obj, key, value) {
- Object.defineProperty(obj, key, {
- value: value,
- enumerable: true,
- configurable: true,
- writable: true
- });
- return obj[key];
- }
-
- try {
- // IE 8 has a broken Object.defineProperty that only works on DOM objects.
- define({}, "");
- } catch (err) {
- define = function define(obj, key, value) {
- return obj[key] = value;
- };
- }
-
- function wrap(innerFn, outerFn, self, tryLocsList) {
- // If outerFn provided and outerFn.prototype is a Generator, then outerFn.prototype instanceof Generator.
- var protoGenerator = outerFn && outerFn.prototype instanceof Generator ? outerFn : Generator;
- var generator = Object.create(protoGenerator.prototype);
- var context = new Context(tryLocsList || []); // The ._invoke method unifies the implementations of the .next,
- // .throw, and .return methods.
-
- generator._invoke = makeInvokeMethod(innerFn, self, context);
- return generator;
- }
-
- exports.wrap = wrap; // Try/catch helper to minimize deoptimizations. Returns a completion
- // record like context.tryEntries[i].completion. This interface could
- // have been (and was previously) designed to take a closure to be
- // invoked without arguments, but in all the cases we care about we
- // already have an existing method we want to call, so there's no need
- // to create a new function object. We can even get away with assuming
- // the method takes exactly one argument, since that happens to be true
- // in every case, so we don't have to touch the arguments object. The
- // only additional allocation required is the completion record, which
- // has a stable shape and so hopefully should be cheap to allocate.
+ /* eslint-enable max-len */
+ function trustedReplaceXhrResponse$1(source) {
+ var pattern = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : '';
+ var replacement = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : '';
+ var propsToMatch = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : '';
+ // do nothing if browser does not support Proxy (e.g. Internet Explorer)
+ // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Proxy
+ if (typeof Proxy === 'undefined') {
+ return;
+ }
- function tryCatch(fn, obj, arg) {
- try {
- return {
- type: "normal",
- arg: fn.call(obj, arg)
- };
- } catch (err) {
- return {
- type: "throw",
- arg: err
- };
- }
+ // Only allow pattern as empty string for logging purposes
+ if (pattern === '' && replacement !== '') {
+ var message = 'Pattern argument should not be empty string.';
+ logMessage(source, message);
+ return;
+ }
+ var shouldLog = pattern === '' && replacement === '';
+ var nativeOpen = window.XMLHttpRequest.prototype.open;
+ var nativeSend = window.XMLHttpRequest.prototype.send;
+ var shouldReplace = false;
+ var xhrData;
+ var requestHeaders = [];
+ var openWrapper = function openWrapper(target, thisArg, args) {
+ // eslint-disable-next-line prefer-spread
+ xhrData = getXhrData.apply(null, args);
+ if (shouldLog) {
+ // Log if no propsToMatch given
+ var _message = "xhr( ".concat(objectToString(xhrData), " )");
+ logMessage(source, _message, true);
+ hit(source);
+ return Reflect.apply(target, thisArg, args);
}
+ shouldReplace = matchRequestProps(source, propsToMatch, xhrData);
- var GenStateSuspendedStart = "suspendedStart";
- var GenStateSuspendedYield = "suspendedYield";
- var GenStateExecuting = "executing";
- var GenStateCompleted = "completed"; // Returning this object from the innerFn has the same effect as
- // breaking out of the dispatch switch statement.
-
- var ContinueSentinel = {}; // Dummy constructor functions that we use as the .constructor and
- // .constructor.prototype properties for functions that return Generator
- // objects. For full spec compliance, you may wish to configure your
- // minifier not to mangle the names of these two functions.
-
- function Generator() {}
-
- function GeneratorFunction() {}
-
- function GeneratorFunctionPrototype() {} // This is a polyfill for %IteratorPrototype% for environments that
- // don't natively support it.
-
-
- var IteratorPrototype = {};
-
- IteratorPrototype[iteratorSymbol] = function () {
- return this;
- };
-
- var getProto = Object.getPrototypeOf;
- var NativeIteratorPrototype = getProto && getProto(getProto(values([])));
+ // Trap setRequestHeader of target xhr object to mimic request headers later
+ if (shouldReplace) {
+ var setRequestHeaderWrapper = function setRequestHeaderWrapper(target, thisArg, args) {
+ // Collect headers
+ requestHeaders.push(args);
+ return Reflect.apply(target, thisArg, args);
+ };
+ var setRequestHeaderHandler = {
+ apply: setRequestHeaderWrapper
+ };
- if (NativeIteratorPrototype && NativeIteratorPrototype !== Op && hasOwn.call(NativeIteratorPrototype, iteratorSymbol)) {
- // This environment has a native %IteratorPrototype%; use it instead
- // of the polyfill.
- IteratorPrototype = NativeIteratorPrototype;
+ // setRequestHeader can only be called on open xhr object,
+ // so we can safely proxy it here
+ thisArg.setRequestHeader = new Proxy(thisArg.setRequestHeader, setRequestHeaderHandler);
}
-
- var Gp = GeneratorFunctionPrototype.prototype = Generator.prototype = Object.create(IteratorPrototype);
- GeneratorFunction.prototype = Gp.constructor = GeneratorFunctionPrototype;
- GeneratorFunctionPrototype.constructor = GeneratorFunction;
- GeneratorFunction.displayName = define(GeneratorFunctionPrototype, toStringTagSymbol, "GeneratorFunction"); // Helper for defining the .next, .throw, and .return methods of the
- // Iterator interface in terms of a single ._invoke method.
-
- function defineIteratorMethods(prototype) {
- ["next", "throw", "return"].forEach(function (method) {
- define(prototype, method, function (arg) {
- return this._invoke(method, arg);
- });
- });
+ return Reflect.apply(target, thisArg, args);
+ };
+ var sendWrapper = function sendWrapper(target, thisArg, args) {
+ if (!shouldReplace) {
+ return Reflect.apply(target, thisArg, args);
}
- exports.isGeneratorFunction = function (genFun) {
- var ctor = typeof genFun === "function" && genFun.constructor;
- return ctor ? ctor === GeneratorFunction || // For the native GeneratorFunction constructor, the best we can
- // do is to check its .name property.
- (ctor.displayName || ctor.name) === "GeneratorFunction" : false;
- };
-
- exports.mark = function (genFun) {
- if (Object.setPrototypeOf) {
- Object.setPrototypeOf(genFun, GeneratorFunctionPrototype);
- } else {
- genFun.__proto__ = GeneratorFunctionPrototype;
- define(genFun, toStringTagSymbol, "GeneratorFunction");
+ /**
+ * Create separate XHR request with original request's input
+ * to be able to collect response data without triggering
+ * listeners on original XHR object
+ */
+ var forgedRequest = new XMLHttpRequest();
+ forgedRequest.addEventListener('readystatechange', function () {
+ if (forgedRequest.readyState !== 4) {
+ return;
}
+ var readyState = forgedRequest.readyState,
+ response = forgedRequest.response,
+ responseText = forgedRequest.responseText,
+ responseURL = forgedRequest.responseURL,
+ responseXML = forgedRequest.responseXML,
+ status = forgedRequest.status,
+ statusText = forgedRequest.statusText; // Extract content from response
+ var content = responseText || response;
+ if (typeof content !== 'string') {
+ return;
+ }
+ var patternRegexp = pattern === '*' ? /(\n|.)*/ : toRegExp(pattern);
+ var modifiedContent = content.replace(patternRegexp, replacement);
- genFun.prototype = Object.create(Gp);
- return genFun;
- }; // Within the body of any async function, `await x` is transformed to
- // `yield regeneratorRuntime.awrap(x)`, so that the runtime can test
- // `hasOwn.call(value, "__await")` to determine if the yielded value is
- // meant to be awaited.
-
-
- exports.awrap = function (arg) {
- return {
- __await: arg
- };
- };
-
- function AsyncIterator(generator, PromiseImpl) {
- function invoke(method, arg, resolve, reject) {
- var record = tryCatch(generator[method], generator, arg);
-
- if (record.type === "throw") {
- reject(record.arg);
- } else {
- var result = record.arg;
- var value = result.value;
-
- if (value && typeof value === "object" && hasOwn.call(value, "__await")) {
- return PromiseImpl.resolve(value.__await).then(function (value) {
- invoke("next", value, resolve, reject);
- }, function (err) {
- invoke("throw", err, resolve, reject);
- });
- }
-
- return PromiseImpl.resolve(value).then(function (unwrapped) {
- // When a yielded Promise is resolved, its final value becomes
- // the .value of the Promise<{value,done}> result for the
- // current iteration.
- result.value = unwrapped;
- resolve(result);
- }, function (error) {
- // If a rejected Promise was yielded, throw the rejection back
- // into the async generator function so it can be handled there.
- return invoke("throw", error, resolve, reject);
- });
- }
- }
-
- var previousPromise;
-
- function enqueue(method, arg) {
- function callInvokeWithMethodAndArg() {
- return new PromiseImpl(function (resolve, reject) {
- invoke(method, arg, resolve, reject);
- });
- }
-
- return previousPromise = // If enqueue has been called before, then we want to wait until
- // all previous Promises have been resolved before calling invoke,
- // so that results are always delivered in the correct order. If
- // enqueue has not been called before, then it is important to
- // call invoke immediately, without waiting on a callback to fire,
- // so that the async generator function has the opportunity to do
- // any necessary setup in a predictable way. This predictability
- // is why the Promise constructor synchronously invokes its
- // executor callback, and why async functions synchronously
- // execute code before the first await. Since we implement simple
- // async functions in terms of async generators, it is especially
- // important to get this right, even though it requires care.
- previousPromise ? previousPromise.then(callInvokeWithMethodAndArg, // Avoid propagating failures to Promises returned by later
- // invocations of the iterator.
- callInvokeWithMethodAndArg) : callInvokeWithMethodAndArg();
- } // Define the unified helper method that is used to implement .next,
- // .throw, and .return (see defineIteratorMethods).
-
-
- this._invoke = enqueue;
- }
-
- defineIteratorMethods(AsyncIterator.prototype);
-
- AsyncIterator.prototype[asyncIteratorSymbol] = function () {
- return this;
- };
-
- exports.AsyncIterator = AsyncIterator; // Note that simple async functions are implemented on top of
- // AsyncIterator objects; they just return a Promise for the value of
- // the final result produced by the iterator.
-
- exports.async = function (innerFn, outerFn, self, tryLocsList, PromiseImpl) {
- if (PromiseImpl === void 0) PromiseImpl = Promise;
- var iter = new AsyncIterator(wrap(innerFn, outerFn, self, tryLocsList), PromiseImpl);
- return exports.isGeneratorFunction(outerFn) ? iter // If outerFn is a generator, return the full iterator.
- : iter.next().then(function (result) {
- return result.done ? result.value : iter.next();
- });
- };
-
- function makeInvokeMethod(innerFn, self, context) {
- var state = GenStateSuspendedStart;
- return function invoke(method, arg) {
- if (state === GenStateExecuting) {
- throw new Error("Generator is already running");
- }
-
- if (state === GenStateCompleted) {
- if (method === "throw") {
- throw arg;
- } // Be forgiving, per 25.3.3.3.3 of the spec:
- // https://people.mozilla.org/~jorendorff/es6-draft.html#sec-generatorresume
-
-
- return doneResult();
- }
-
- context.method = method;
- context.arg = arg;
-
- while (true) {
- var delegate = context.delegate;
-
- if (delegate) {
- var delegateResult = maybeInvokeDelegate(delegate, context);
-
- if (delegateResult) {
- if (delegateResult === ContinueSentinel) continue;
- return delegateResult;
- }
- }
-
- if (context.method === "next") {
- // Setting context._sent for legacy support of Babel's
- // function.sent implementation.
- context.sent = context._sent = context.arg;
- } else if (context.method === "throw") {
- if (state === GenStateSuspendedStart) {
- state = GenStateCompleted;
- throw context.arg;
- }
-
- context.dispatchException(context.arg);
- } else if (context.method === "return") {
- context.abrupt("return", context.arg);
- }
-
- state = GenStateExecuting;
- var record = tryCatch(innerFn, self, context);
-
- if (record.type === "normal") {
- // If an exception is thrown from innerFn, we leave state ===
- // GenStateExecuting and loop back for another invocation.
- state = context.done ? GenStateCompleted : GenStateSuspendedYield;
-
- if (record.arg === ContinueSentinel) {
- continue;
- }
-
- return {
- value: record.arg,
- done: context.done
- };
- } else if (record.type === "throw") {
- state = GenStateCompleted; // Dispatch the exception by looping back around to the
- // context.dispatchException(context.arg) call above.
-
- context.method = "throw";
- context.arg = record.arg;
- }
- }
- };
- } // Call delegate.iterator[context.method](context.arg) and handle the
- // result, either by returning a { value, done } result from the
- // delegate iterator, or by modifying context.method and context.arg,
- // setting context.delegate to null, and returning the ContinueSentinel.
-
-
- function maybeInvokeDelegate(delegate, context) {
- var method = delegate.iterator[context.method];
-
- if (method === undefined$1) {
- // A .throw or .return when the delegate iterator has no .throw
- // method always terminates the yield* loop.
- context.delegate = null;
-
- if (context.method === "throw") {
- // Note: ["return"] must be used for ES3 parsing compatibility.
- if (delegate.iterator["return"]) {
- // If the delegate iterator has a return method, give it a
- // chance to clean up.
- context.method = "return";
- context.arg = undefined$1;
- maybeInvokeDelegate(delegate, context);
-
- if (context.method === "throw") {
- // If maybeInvokeDelegate(context) changed context.method from
- // "return" to "throw", let that override the TypeError below.
- return ContinueSentinel;
- }
- }
-
- context.method = "throw";
- context.arg = new TypeError("The iterator does not provide a 'throw' method");
- }
-
- return ContinueSentinel;
- }
-
- var record = tryCatch(method, delegate.iterator, context.arg);
-
- if (record.type === "throw") {
- context.method = "throw";
- context.arg = record.arg;
- context.delegate = null;
- return ContinueSentinel;
- }
-
- var info = record.arg;
-
- if (!info) {
- context.method = "throw";
- context.arg = new TypeError("iterator result is not an object");
- context.delegate = null;
- return ContinueSentinel;
- }
-
- if (info.done) {
- // Assign the result of the finished delegate to the temporary
- // variable specified by delegate.resultName (see delegateYield).
- context[delegate.resultName] = info.value; // Resume execution at the desired location (see delegateYield).
-
- context.next = delegate.nextLoc; // If context.method was "throw" but the delegate handled the
- // exception, let the outer generator proceed normally. If
- // context.method was "next", forget context.arg since it has been
- // "consumed" by the delegate iterator. If context.method was
- // "return", allow the original .return call to continue in the
- // outer generator.
-
- if (context.method !== "return") {
- context.method = "next";
- context.arg = undefined$1;
- }
- } else {
- // Re-yield the result returned by the delegate method.
- return info;
- } // The delegate iterator is finished, so forget it and continue with
- // the outer generator.
-
-
- context.delegate = null;
- return ContinueSentinel;
- } // Define Generator.prototype.{next,throw,return} in terms of the
- // unified ._invoke helper method.
-
-
- defineIteratorMethods(Gp);
- define(Gp, toStringTagSymbol, "Generator"); // A Generator should always return itself as the iterator object when the
- // @@iterator function is called on it. Some browsers' implementations of the
- // iterator prototype chain incorrectly implement this, causing the Generator
- // object to not be returned from this call. This ensures that doesn't happen.
- // See https://github.com/facebook/regenerator/issues/274 for more details.
-
- Gp[iteratorSymbol] = function () {
- return this;
- };
-
- Gp.toString = function () {
- return "[object Generator]";
- };
-
- function pushTryEntry(locs) {
- var entry = {
- tryLoc: locs[0]
- };
-
- if (1 in locs) {
- entry.catchLoc = locs[1];
- }
-
- if (2 in locs) {
- entry.finallyLoc = locs[2];
- entry.afterLoc = locs[3];
- }
-
- this.tryEntries.push(entry);
- }
-
- function resetTryEntry(entry) {
- var record = entry.completion || {};
- record.type = "normal";
- delete record.arg;
- entry.completion = record;
- }
-
- function Context(tryLocsList) {
- // The root entry object (effectively a try statement without a catch
- // or a finally block) gives us a place to store values thrown from
- // locations where there is no enclosing try statement.
- this.tryEntries = [{
- tryLoc: "root"
- }];
- tryLocsList.forEach(pushTryEntry, this);
- this.reset(true);
- }
-
- exports.keys = function (object) {
- var keys = [];
-
- for (var key in object) {
- keys.push(key);
- }
-
- keys.reverse(); // Rather than returning an object with a next method, we keep
- // things simple and return the next function itself.
-
- return function next() {
- while (keys.length) {
- var key = keys.pop();
-
- if (key in object) {
- next.value = key;
- next.done = false;
- return next;
- }
- } // To avoid creating an additional object, we just hang the .value
- // and .done properties off the next function object itself. This
- // also ensures that the minifier will not anonymize the function.
-
-
- next.done = true;
- return next;
- };
- };
-
- function values(iterable) {
- if (iterable) {
- var iteratorMethod = iterable[iteratorSymbol];
-
- if (iteratorMethod) {
- return iteratorMethod.call(iterable);
- }
-
- if (typeof iterable.next === "function") {
- return iterable;
- }
-
- if (!isNaN(iterable.length)) {
- var i = -1,
- next = function next() {
- while (++i < iterable.length) {
- if (hasOwn.call(iterable, i)) {
- next.value = iterable[i];
- next.done = false;
- return next;
- }
- }
-
- next.value = undefined$1;
- next.done = true;
- return next;
- };
-
- return next.next = next;
- }
- } // Return an iterator with no values.
-
-
- return {
- next: doneResult
- };
- }
-
- exports.values = values;
-
- function doneResult() {
- return {
- value: undefined$1,
- done: true
- };
- }
-
- Context.prototype = {
- constructor: Context,
- reset: function reset(skipTempReset) {
- this.prev = 0;
- this.next = 0; // Resetting context._sent for legacy support of Babel's
- // function.sent implementation.
-
- this.sent = this._sent = undefined$1;
- this.done = false;
- this.delegate = null;
- this.method = "next";
- this.arg = undefined$1;
- this.tryEntries.forEach(resetTryEntry);
-
- if (!skipTempReset) {
- for (var name in this) {
- // Not sure about the optimal order of these conditions:
- if (name.charAt(0) === "t" && hasOwn.call(this, name) && !isNaN(+name.slice(1))) {
- this[name] = undefined$1;
- }
- }
- }
- },
- stop: function stop() {
- this.done = true;
- var rootEntry = this.tryEntries[0];
- var rootRecord = rootEntry.completion;
-
- if (rootRecord.type === "throw") {
- throw rootRecord.arg;
- }
-
- return this.rval;
- },
- dispatchException: function dispatchException(exception) {
- if (this.done) {
- throw exception;
- }
-
- var context = this;
-
- function handle(loc, caught) {
- record.type = "throw";
- record.arg = exception;
- context.next = loc;
-
- if (caught) {
- // If the dispatched exception was caught by a catch block,
- // then let that catch block handle the exception normally.
- context.method = "next";
- context.arg = undefined$1;
- }
-
- return !!caught;
- }
-
- for (var i = this.tryEntries.length - 1; i >= 0; --i) {
- var entry = this.tryEntries[i];
- var record = entry.completion;
-
- if (entry.tryLoc === "root") {
- // Exception thrown outside of any try block that could handle
- // it, so set the completion value of the entire function to
- // throw the exception.
- return handle("end");
- }
-
- if (entry.tryLoc <= this.prev) {
- var hasCatch = hasOwn.call(entry, "catchLoc");
- var hasFinally = hasOwn.call(entry, "finallyLoc");
-
- if (hasCatch && hasFinally) {
- if (this.prev < entry.catchLoc) {
- return handle(entry.catchLoc, true);
- } else if (this.prev < entry.finallyLoc) {
- return handle(entry.finallyLoc);
- }
- } else if (hasCatch) {
- if (this.prev < entry.catchLoc) {
- return handle(entry.catchLoc, true);
- }
- } else if (hasFinally) {
- if (this.prev < entry.finallyLoc) {
- return handle(entry.finallyLoc);
- }
- } else {
- throw new Error("try statement without catch or finally");
- }
- }
- }
- },
- abrupt: function abrupt(type, arg) {
- for (var i = this.tryEntries.length - 1; i >= 0; --i) {
- var entry = this.tryEntries[i];
-
- if (entry.tryLoc <= this.prev && hasOwn.call(entry, "finallyLoc") && this.prev < entry.finallyLoc) {
- var finallyEntry = entry;
- break;
- }
- }
-
- if (finallyEntry && (type === "break" || type === "continue") && finallyEntry.tryLoc <= arg && arg <= finallyEntry.finallyLoc) {
- // Ignore the finally entry if control is not jumping to a
- // location outside the try/catch block.
- finallyEntry = null;
- }
-
- var record = finallyEntry ? finallyEntry.completion : {};
- record.type = type;
- record.arg = arg;
-
- if (finallyEntry) {
- this.method = "next";
- this.next = finallyEntry.finallyLoc;
- return ContinueSentinel;
- }
-
- return this.complete(record);
- },
- complete: function complete(record, afterLoc) {
- if (record.type === "throw") {
- throw record.arg;
- }
-
- if (record.type === "break" || record.type === "continue") {
- this.next = record.arg;
- } else if (record.type === "return") {
- this.rval = this.arg = record.arg;
- this.method = "return";
- this.next = "end";
- } else if (record.type === "normal" && afterLoc) {
- this.next = afterLoc;
- }
-
- return ContinueSentinel;
- },
- finish: function finish(finallyLoc) {
- for (var i = this.tryEntries.length - 1; i >= 0; --i) {
- var entry = this.tryEntries[i];
-
- if (entry.finallyLoc === finallyLoc) {
- this.complete(entry.completion, entry.afterLoc);
- resetTryEntry(entry);
- return ContinueSentinel;
- }
- }
- },
- "catch": function _catch(tryLoc) {
- for (var i = this.tryEntries.length - 1; i >= 0; --i) {
- var entry = this.tryEntries[i];
-
- if (entry.tryLoc === tryLoc) {
- var record = entry.completion;
-
- if (record.type === "throw") {
- var thrown = record.arg;
- resetTryEntry(entry);
- }
-
- return thrown;
- }
- } // The context.catch method must only be called with a location
- // argument that corresponds to a known catch block.
-
-
- throw new Error("illegal catch attempt");
- },
- delegateYield: function delegateYield(iterable, resultName, nextLoc) {
- this.delegate = {
- iterator: values(iterable),
- resultName: resultName,
- nextLoc: nextLoc
- };
-
- if (this.method === "next") {
- // Deliberately forget the last sent value so that we don't
- // accidentally pass it on to the delegate.
- this.arg = undefined$1;
- }
-
- return ContinueSentinel;
- }
- }; // Regardless of whether this script is executing as a CommonJS module
- // or not, return the runtime object so that we can declare the variable
- // regeneratorRuntime in the outer scope, which allows this module to be
- // injected easily by `bin/regenerator --include-runtime script.js`.
-
- return exports;
- }( // If this script is executing as a CommonJS module, use module.exports
- // as the regeneratorRuntime namespace. Otherwise create a new empty
- // object. Either way, the resulting object will be used to initialize
- // the regeneratorRuntime variable at the top of this file.
- module.exports );
-
- try {
- regeneratorRuntime = runtime;
- } catch (accidentalStrictMode) {
- // This module should not be running in strict mode, so the above
- // assignment should always work unless something is misconfigured. Just
- // in case runtime.js accidentally runs in strict mode, we can escape
- // strict mode using a global Function call. This could conceivably fail
- // if a Content Security Policy forbids using Function, but in that case
- // the proper solution is to fix the accidental strict mode problem. If
- // you've misconfigured your bundler to force strict mode and applied a
- // CSP to forbid Function, and you're not willing to fix either of those
- // problems, please detail your unique predicament in a GitHub issue.
- Function("r", "regeneratorRuntime = r")(runtime);
- }
- });
-
- var regenerator$1 = runtime_1;
-
- function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) {
- try {
- var info = gen[key](arg);
- var value = info.value;
- } catch (error) {
- reject(error);
- return;
- }
-
- if (info.done) {
- resolve(value);
- } else {
- Promise.resolve(value).then(_next, _throw);
- }
- }
-
- function _asyncToGenerator(fn) {
- return function () {
- var self = this,
- args = arguments;
- return new Promise(function (resolve, reject) {
- var gen = fn.apply(self, args);
-
- function _next(value) {
- asyncGeneratorStep(gen, resolve, reject, _next, _throw, "next", value);
- }
-
- function _throw(err) {
- asyncGeneratorStep(gen, resolve, reject, _next, _throw, "throw", err);
- }
-
- _next(undefined);
- });
- };
- }
-
- var asyncToGenerator$1 = _asyncToGenerator;
-
- function _arrayLikeToArray(arr, len) {
- if (len == null || len > arr.length) len = arr.length;
-
- for (var i = 0, arr2 = new Array(len); i < len; i++) {
- arr2[i] = arr[i];
- }
-
- return arr2;
- }
-
- var arrayLikeToArray = _arrayLikeToArray;
-
- function _arrayWithoutHoles(arr) {
- if (Array.isArray(arr)) return arrayLikeToArray(arr);
- }
-
- var arrayWithoutHoles = _arrayWithoutHoles;
-
- function _iterableToArray(iter) {
- if (typeof Symbol !== "undefined" && Symbol.iterator in Object(iter)) return Array.from(iter);
- }
-
- var iterableToArray = _iterableToArray;
-
- function _unsupportedIterableToArray(o, minLen) {
- if (!o) return;
- if (typeof o === "string") return arrayLikeToArray(o, minLen);
- var n = Object.prototype.toString.call(o).slice(8, -1);
- if (n === "Object" && o.constructor) n = o.constructor.name;
- if (n === "Map" || n === "Set") return Array.from(o);
- if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return arrayLikeToArray(o, minLen);
- }
-
- var unsupportedIterableToArray = _unsupportedIterableToArray;
-
- function _nonIterableSpread() {
- throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.");
- }
-
- var nonIterableSpread = _nonIterableSpread;
-
- function _toConsumableArray(arr) {
- return arrayWithoutHoles(arr) || iterableToArray(arr) || unsupportedIterableToArray(arr) || nonIterableSpread();
- }
-
- var toConsumableArray$1 = _toConsumableArray;
-
- /* eslint-disable max-len */
-
- /**
- * @trustedScriptlet trusted-replace-xhr-response
- *
- * @description
- * Replaces response content of `xhr` requests if **all** given parameters match.
- *
- * **Syntax**
- * ```
- * example.org#%#//scriptlet('trusted-replace-xhr-response'[, pattern, replacement[, propsToMatch]])
- * ```
- *
- * - pattern - optional, argument for matching contents of responseText that should be replaced. If set, `replacement` is required;
- * possible values:
- * - '*' to match all text content
- * - non-empty string
- * - regular expression
- * - replacement — optional, should be set if `pattern` is set. String to replace matched content with. Empty string to remove content.
- * - propsToMatch — optional, string of space-separated properties to match for extra condition; possible props:
- * - string or regular expression for matching the URL passed to `.open()` call;
- * - colon-separated pairs name:value where
- * - name - name is string or regular expression for matching XMLHttpRequest property name
- * - value is string or regular expression for matching the value of the option passed to `.open()` call
- *
- * > Usage with no arguments will log XMLHttpRequest objects to browser console;
- * which is useful for debugging but not permitted for production filter lists.
- *
- * **Examples**
- * 1. Log all XMLHttpRequests
- * ```
- * example.org#%#//scriptlet('trusted-replace-xhr-response')
- * ```
- *
- * 2. Replace text content of XMLHttpRequests with specific url
- * ```
- * example.org#%#//scriptlet('trusted-replace-xhr-response', 'adb_detect:true', 'adb_detect:false', 'example.org')
- * example.org#%#//scriptlet('trusted-replace-xhr-response', '/#EXT-X-VMAP-AD-BREAK[\s\S]*?/', '#EXT-X-ENDLIST', 'example.org')
- * ```
- *
- * 3. Remove all text content of XMLHttpRequests with specific request method
- * ```
- * example.org#%#//scriptlet('trusted-replace-xhr-response', '*', '', 'method:GET')
- * ```
- *
- * 4. Replace text content of XMLHttpRequests matching by URL regex and request methods
- * ```
- * example.org#%#//scriptlet('trusted-replace-xhr-response', '/#EXT-X-VMAP-AD-BREAK[\s\S]*?/', '#EXT-X-ENDLIST', '/\.m3u8/ method:/GET|HEAD/')
- * ```
- * 5. Remove all text content of all XMLHttpRequests for example.com
- * ```
- * example.org#%#//scriptlet('trusted-replace-xhr-response', '*', '', 'example.com')
- * ```
- */
-
- /* eslint-enable max-len */
-
- function trustedReplaceXhrResponse$1(source) {
- var pattern = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : '';
- var replacement = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : '';
- var propsToMatch = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : '';
-
- // do nothing if browser does not support Proxy (e.g. Internet Explorer)
- // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Proxy
- if (typeof Proxy === 'undefined') {
- return;
- } // Only allow pattern as empty string for logging purposes
-
-
- if (pattern === '' && replacement !== '') {
- var message = 'Pattern argument should not be empty string.';
- logMessage(source, message);
- return;
- }
-
- var shouldLog = pattern === '' && replacement === '';
- var nativeOpen = window.XMLHttpRequest.prototype.open;
- var nativeSend = window.XMLHttpRequest.prototype.send;
- var shouldReplace = false;
- var xhrData;
- var requestHeaders = [];
-
- var openWrapper = function openWrapper(target, thisArg, args) {
- xhrData = getXhrData.apply(void 0, toConsumableArray$1(args));
-
- if (shouldLog) {
- // Log if no propsToMatch given
- var _message = "log: xhr( ".concat(objectToString(xhrData), " )");
+ // Manually put required values into target XHR object
+ // as thisArg can't be redefined and XHR objects can't be (re)assigned or copied
+ Object.defineProperties(thisArg, {
+ readyState: {
+ value: readyState
+ },
+ response: {
+ value: modifiedContent
+ },
+ responseText: {
+ value: modifiedContent
+ },
+ responseURL: {
+ value: responseURL
+ },
+ responseXML: {
+ value: responseXML
+ },
+ status: {
+ value: status
+ },
+ statusText: {
+ value: statusText
+ }
+ });
- logMessage(source, _message, true);
+ // Mock events
+ setTimeout(function () {
+ var stateEvent = new Event('readystatechange');
+ thisArg.dispatchEvent(stateEvent);
+ var loadEvent = new Event('load');
+ thisArg.dispatchEvent(loadEvent);
+ var loadEndEvent = new Event('loadend');
+ thisArg.dispatchEvent(loadEndEvent);
+ }, 1);
hit(source);
+ });
+ nativeOpen.apply(forgedRequest, [xhrData.method, xhrData.url]);
+
+ // Mimic request headers before sending
+ // setRequestHeader can only be called on open request objects
+ requestHeaders.forEach(function (header) {
+ var name = header[0];
+ var value = header[1];
+ forgedRequest.setRequestHeader(name, value);
+ });
+ requestHeaders = [];
+ try {
+ nativeSend.call(forgedRequest, args);
+ } catch (_unused) {
return Reflect.apply(target, thisArg, args);
}
-
- shouldReplace = matchRequestProps(source, propsToMatch, xhrData); // Trap setRequestHeader of target xhr object to mimic request headers later
-
- if (shouldReplace) {
- var setRequestHeaderWrapper = function setRequestHeaderWrapper(target, thisArg, args) {
- // Collect headers
- requestHeaders.push(args);
- return Reflect.apply(target, thisArg, args);
- };
-
- var setRequestHeaderHandler = {
- apply: setRequestHeaderWrapper
- }; // setRequestHeader can only be called on open xhr object,
- // so we can safely proxy it here
-
- thisArg.setRequestHeader = new Proxy(thisArg.setRequestHeader, setRequestHeaderHandler);
- }
-
- return Reflect.apply(target, thisArg, args);
+ return undefined;
};
-
- var sendWrapper = /*#__PURE__*/function () {
- var _ref = asyncToGenerator$1( /*#__PURE__*/regenerator$1.mark(function _callee(target, thisArg, args) {
- var forgedRequest;
- return regenerator$1.wrap(function _callee$(_context) {
- while (1) {
- switch (_context.prev = _context.next) {
- case 0:
- if (shouldReplace) {
- _context.next = 2;
- break;
- }
-
- return _context.abrupt("return", Reflect.apply(target, thisArg, args));
-
- case 2:
- /**
- * Create separate XHR request with original request's input
- * to be able to collect response data without triggering
- * listeners on original XHR object
- */
- forgedRequest = new XMLHttpRequest();
- forgedRequest.addEventListener('readystatechange', function () {
- if (forgedRequest.readyState !== 4) {
- return;
- }
-
- var readyState = forgedRequest.readyState,
- response = forgedRequest.response,
- responseText = forgedRequest.responseText,
- responseURL = forgedRequest.responseURL,
- responseXML = forgedRequest.responseXML,
- status = forgedRequest.status,
- statusText = forgedRequest.statusText; // Extract content from response
-
- var content = responseText || response;
-
- if (typeof content !== 'string') {
- return;
- }
-
- var patternRegexp = pattern === '*' ? toRegExp() : toRegExp(pattern);
- var modifiedContent = content.replace(patternRegexp, replacement); // Manually put required values into target XHR object
- // as thisArg can't be redefined and XHR objects can't be (re)assigned or copied
-
- Object.defineProperties(thisArg, {
- readyState: {
- value: readyState
- },
- response: {
- value: modifiedContent
- },
- responseText: {
- value: modifiedContent
- },
- responseURL: {
- value: responseURL
- },
- responseXML: {
- value: responseXML
- },
- status: {
- value: status
- },
- statusText: {
- value: statusText
- }
- }); // Mock events
-
- setTimeout(function () {
- var stateEvent = new Event('readystatechange');
- thisArg.dispatchEvent(stateEvent);
- var loadEvent = new Event('load');
- thisArg.dispatchEvent(loadEvent);
- var loadEndEvent = new Event('loadend');
- thisArg.dispatchEvent(loadEndEvent);
- }, 1);
- hit(source);
- });
- nativeOpen.apply(forgedRequest, [xhrData.method, xhrData.url]); // Mimic request headers before sending
- // setRequestHeader can only be called on open request objects
-
- requestHeaders.forEach(function (header) {
- var name = header[0];
- var value = header[1];
- forgedRequest.setRequestHeader(name, value);
- });
- requestHeaders = [];
- _context.prev = 7;
- nativeSend.call(forgedRequest, args);
- _context.next = 14;
- break;
-
- case 11:
- _context.prev = 11;
- _context.t0 = _context["catch"](7);
- return _context.abrupt("return", Reflect.apply(target, thisArg, args));
-
- case 14:
- return _context.abrupt("return", undefined);
-
- case 15:
- case "end":
- return _context.stop();
- }
- }
- }, _callee, null, [[7, 11]]);
- }));
-
- return function sendWrapper(_x, _x2, _x3) {
- return _ref.apply(this, arguments);
- };
- }();
-
var openHandler = {
apply: openWrapper
};
@@ -8042,12 +6626,13 @@
XMLHttpRequest.prototype.open = new Proxy(XMLHttpRequest.prototype.open, openHandler);
XMLHttpRequest.prototype.send = new Proxy(XMLHttpRequest.prototype.send, sendHandler);
}
- trustedReplaceXhrResponse$1.names = ['trusted-replace-xhr-response' // trusted scriptlets support no aliases
+ trustedReplaceXhrResponse$1.names = ['trusted-replace-xhr-response'
+ // trusted scriptlets support no aliases
];
- trustedReplaceXhrResponse$1.injections = [hit, logMessage, toRegExp, objectToString, matchRequestProps, getXhrData, getMatchPropsData, validateParsedData, parseMatchProps, isValidStrPattern, escapeRegExp, isEmptyObject, getObjectEntries];
- /* eslint-disable max-len */
+ trustedReplaceXhrResponse$1.injections = [hit, logMessage, toRegExp, objectToString, matchRequestProps, getXhrData, getMatchPropsData, getRequestProps, validateParsedData, parseMatchProps, isValidStrPattern, escapeRegExp, isEmptyObject, getObjectEntries];
+ /* eslint-disable max-len */
/**
* @scriptlet xml-prune
*
@@ -8092,15 +6677,12 @@
* example.org#%#//scriptlet('xml-prune', '', '', '.mpd')
* ```
*/
-
/* eslint-enable max-len */
function xmlPrune$1(source, propsToRemove) {
var _this = this;
-
var optionalProp = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : '';
var urlToMatch = arguments.length > 3 ? arguments[3] : undefined;
-
// do nothing if browser does not support Reflect, fetch or Proxy (e.g. Internet Explorer)
// https://developer.mozilla.org/en-US/docs/Web/API/WindowOrWorkerGlobalScope/fetch
// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Proxy
@@ -8108,55 +6690,42 @@
if (typeof Reflect === 'undefined' || typeof fetch === 'undefined' || typeof Proxy === 'undefined' || typeof Response === 'undefined') {
return;
}
-
var shouldPruneResponse = true;
-
if (!propsToRemove) {
// If "propsToRemove" is not defined, then response shouldn't be pruned
// but it should be logged in browser console
shouldPruneResponse = false;
}
-
var urlMatchRegexp = toRegExp(urlToMatch);
-
var isXML = function isXML(text) {
// Check if "text" starts with "<" and check if it ends with ">"
// If so, then it might be an XML file and should be pruned or logged
var trimedText = text.trim();
-
- if (startsWith(trimedText, '<') && endsWith(trimedText, '>')) {
+ if (startsWith$1(trimedText, '<') && endsWith(trimedText, '>')) {
return true;
}
-
return false;
};
-
var pruneXML = function pruneXML(text) {
if (!isXML(text)) {
shouldPruneResponse = false;
return text;
}
-
var xmlParser = new DOMParser();
var xmlDoc = xmlParser.parseFromString(text, 'text/xml');
var errorNode = xmlDoc.querySelector('parsererror');
-
if (errorNode) {
return text;
}
-
if (optionalProp !== '' && xmlDoc.querySelector(optionalProp) === null) {
shouldPruneResponse = false;
return text;
}
-
var elems = xmlDoc.querySelectorAll(propsToRemove);
-
if (!elems.length) {
shouldPruneResponse = false;
return text;
}
-
elems.forEach(function (elem) {
elem.remove();
});
@@ -8164,20 +6733,16 @@
text = serializer.serializeToString(xmlDoc);
return text;
};
-
var xhrWrapper = function xhrWrapper(target, thisArg, args) {
var xhrURL = args[1];
-
if (typeof xhrURL !== 'string' || xhrURL.length === 0) {
return Reflect.apply(target, thisArg, args);
}
-
if (urlMatchRegexp.test(xhrURL)) {
thisArg.addEventListener('readystatechange', function pruneResponse() {
if (thisArg.readyState === 4) {
var response = thisArg.response;
thisArg.removeEventListener('readystatechange', pruneResponse);
-
if (!shouldPruneResponse) {
if (isXML(response)) {
// eslint-disable-next-line max-len
@@ -8186,7 +6751,6 @@
}
} else {
var prunedResponseContent = pruneXML(response);
-
if (shouldPruneResponse) {
Object.defineProperty(thisArg, 'response', {
value: prunedResponseContent
@@ -8195,36 +6759,31 @@
value: prunedResponseContent
});
hit(source);
- } // In case if response shouldn't be pruned
+ }
+ // In case if response shouldn't be pruned
// pruneXML sets shouldPruneResponse to false
// so it's necessary to set it to true again
// otherwise response will be only logged
-
-
shouldPruneResponse = true;
}
}
});
}
-
return Reflect.apply(target, thisArg, args);
};
-
var xhrHandler = {
apply: xhrWrapper
- }; // eslint-disable-next-line max-len
-
- window.XMLHttpRequest.prototype.open = new Proxy(window.XMLHttpRequest.prototype.open, xhrHandler); // eslint-disable-next-line compat/compat
+ };
+ // eslint-disable-next-line max-len
+ window.XMLHttpRequest.prototype.open = new Proxy(window.XMLHttpRequest.prototype.open, xhrHandler);
+ // eslint-disable-next-line compat/compat
var nativeFetch = window.fetch;
-
var fetchWrapper = function fetchWrapper(target, thisArg, args) {
var fetchURL = args[0];
-
if (typeof fetchURL !== 'string' || fetchURL.length === 0) {
return Reflect.apply(target, thisArg, args);
}
-
if (urlMatchRegexp.test(fetchURL)) {
return nativeFetch.apply(_this, args).then(function (response) {
return response.text().then(function (text) {
@@ -8232,12 +6791,9 @@
if (isXML(text)) {
logMessage("fetch URL: ".concat(fetchURL, "\nresponse text: ").concat(text));
}
-
return Reflect.apply(target, thisArg, args);
}
-
var prunedText = pruneXML(text);
-
if (shouldPruneResponse) {
hit(source);
return new Response(prunedText, {
@@ -8245,56 +6801,53 @@
statusText: response.statusText,
headers: response.headers
});
- } // If response shouldn't be pruned
+ }
+ // If response shouldn't be pruned
// pruneXML sets shouldPruneResponse to false
// so it's necessary to set it to true again
// otherwise response will be only logged
-
-
shouldPruneResponse = true;
return Reflect.apply(target, thisArg, args);
});
});
}
-
return Reflect.apply(target, thisArg, args);
};
-
var fetchHandler = {
apply: fetchWrapper
- }; // eslint-disable-next-line compat/compat
-
+ };
+ // eslint-disable-next-line compat/compat
window.fetch = new Proxy(window.fetch, fetchHandler);
}
- xmlPrune$1.names = ['xml-prune', // aliases are needed for matching the related scriptlet converted into our syntax
+ xmlPrune$1.names = ['xml-prune',
+ // aliases are needed for matching the related scriptlet converted into our syntax
'xml-prune.js', 'ubo-xml-prune.js', 'ubo-xml-prune'];
- xmlPrune$1.injections = [hit, logMessage, toRegExp, startsWith, endsWith];
+ xmlPrune$1.injections = [hit, logMessage, toRegExp, startsWith$1, endsWith];
/* eslint-disable max-len */
-
/**
* @trustedScriptlet trusted-set-cookie
*
* @description
- * Sets a cookie with arbitrary name and value, with optional path
- * and the ability to reload the page after cookie was set.
+ * Sets a cookie with arbitrary name and value,
+ * and with optional ability to offset cookie attribute 'expires' and set path.
*
* **Syntax**
* ```
- * example.org#%#//scriptlet('trusted-set-cookie', name, value[, offsetExpiresSec[, reload[, path]]])
+ * example.org#%#//scriptlet('trusted-set-cookie', name, value[, offsetExpiresSec[, path]])
* ```
*
* - `name` - required, cookie name to be set
* - `value` - required, cookie value. Possible values:
* - arbitrary value
* - empty string for no value
- * - `$now$` keyword for setting current time
- * - 'offsetExpiresSec' - optional, offset from current time in seconds, after which cookie should expire; defaults to no offset
+ * - `$now$` keyword for setting current time in ms, e.g 1667915146503
+ * - `$currentDate$` keyword for setting current time as string, e.g 'Tue Nov 08 2022 13:53:19 GMT+0300'
+ * - `offsetExpiresSec` - optional, offset from current time in seconds, after which cookie should expire; defaults to no offset
* Possible values:
* - positive integer in seconds
* - `1year` keyword for setting expiration date to one year
* - `1day` keyword for setting expiration date to one day
- * - 'reload' - optional, boolean. Argument for reloading page after cookie is set. Defaults to `false`
* - `path` - optional, argument for setting cookie path, defaults to `/`; possible values:
* - `/` — root path
* - `none` — to set no path at all
@@ -8308,7 +6861,7 @@
*
* 2. Set cookie with `new Date().getTime()` value
* ```
- * example.org#%#//scriptlet('trusted-set-cookie', 'cmpconsent', '$now')
+ * example.org#%#//scriptlet('trusted-set-cookie', 'cmpconsent', '$now$')
* ```
*
* 3. Set cookie which will expire in 3 days
@@ -8320,90 +6873,161 @@
* ```
* example.org#%#//scriptlet('trusted-set-cookie', 'cmpconsent', 'accept', '1year')
* ```
- * 5. Reload the page if cookie was successfully set
- * ```
- * example.org#%#//scriptlet('trusted-set-cookie', 'cmpconsent', 'decline', '', 'true')
- * ```
*
- * 6. Set cookie with no path
+ * 5. Set cookie with no path
* ```
- * example.org#%#//scriptlet('trusted-set-cookie', 'cmpconsent', 'decline', '', '', 'none')
+ * example.org#%#//scriptlet('trusted-set-cookie', 'cmpconsent', 'decline', '', 'none')
* ```
*/
-
/* eslint-enable max-len */
function trustedSetCookie$1(source, name, value) {
var offsetExpiresSec = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : '';
- var reload = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : 'false';
- var path = arguments.length > 5 && arguments[5] !== undefined ? arguments[5] : '/';
-
+ var path = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : '/';
if (typeof name === 'undefined') {
logMessage(source, 'Cookie name should be specified.');
return;
}
-
if (typeof value === 'undefined') {
logMessage(source, 'Cookie value should be specified.');
return;
- } // Prevent infinite reloads if cookie was already set or blocked by the browser
- // https://github.com/AdguardTeam/Scriptlets/issues/212
+ }
+ var parsedValue = parseKeywordValue(value);
+ if (!isValidCookiePath(path)) {
+ logMessage(source, "Invalid cookie path: '".concat(path, "'"));
+ return;
+ }
+ var cookieToSet = concatCookieNameValuePath(name, parsedValue, path);
+ if (!cookieToSet) {
+ return;
+ }
+ if (offsetExpiresSec) {
+ var parsedOffsetMs = getTrustedCookieOffsetMs(offsetExpiresSec);
+ if (!parsedOffsetMs) {
+ logMessage(source, "Invalid offsetExpiresSec value: ".concat(offsetExpiresSec));
+ return;
+ }
+ var expires = Date.now() + parsedOffsetMs;
+ cookieToSet += " expires=".concat(new Date(expires).toUTCString(), ";");
+ }
+ document.cookie = cookieToSet;
+ hit(source);
+ }
+ trustedSetCookie$1.names = ['trusted-set-cookie'
+ // trusted scriptlets support no aliases
+ ];
+
+ trustedSetCookie$1.injections = [hit, logMessage, nativeIsNaN, isCookieSetWithValue, concatCookieNameValuePath, isValidCookiePath, getTrustedCookieOffsetMs, parseKeywordValue, getCookiePath];
+
+ /* eslint-disable max-len */
+ /**
+ * @trustedScriptlet trusted-set-cookie-reload
+ *
+ * @description
+ * Sets a cookie with arbitrary name and value,
+ * and with optional ability to offset cookie attribute 'expires' and set path.
+ * Also reloads the current page after the cookie setting.
+ * If reloading option is not needed, use the [`trusted-set-cookie` scriptlet](#trusted-set-cookie).
+ *
+ * **Syntax**
+ * ```
+ * example.org#%#//scriptlet('trusted-set-cookie-reload', name, value[, offsetExpiresSec[, path]])
+ * ```
+ *
+ * - `name` - required, cookie name to be set
+ * - `value` - required, cookie value. Possible values:
+ * - arbitrary value
+ * - empty string for no value
+ * - `$now$` keyword for setting current time in ms, e.g 1667915146503
+ * - `$currentDate$` keyword for setting current time as string, e.g 'Tue Nov 08 2022 13:53:19 GMT+0300'
+ * - 'offsetExpiresSec' - optional, offset from current time in seconds, after which cookie should expire; defaults to no offset
+ * Possible values:
+ * - positive integer in seconds
+ * - `1year` keyword for setting expiration date to one year
+ * - `1day` keyword for setting expiration date to one day
+ * - `path` - optional, argument for setting cookie path, defaults to `/`; possible values:
+ * - `/` — root path
+ * - `none` — to set no path at all
+ *
+ * **Examples**
+ * 1. Set cookie and reload the page after it
+ * ```
+ * example.org#%#//scriptlet('trusted-set-cookie-reload', 'cmpconsent', 'accept')
+ * ```
+ *
+ * 2. Set cookie with `new Date().getTime()` value and reload the page after it
+ * ```
+ * example.org#%#//scriptlet('trusted-set-cookie-reload', 'cmpconsent', '$now$')
+ * ```
+ *
+ * 3. Set cookie which will expire in 3 days and reload the page after it
+ * ```
+ * example.org#%#//scriptlet('trusted-set-cookie-reload', 'cmpconsent', 'accept', '259200')
+ * ```
+ *
+ * 4. Set cookie which will expire in one year and reload the page after it
+ * ```
+ * example.org#%#//scriptlet('trusted-set-cookie-reload', 'cmpconsent', 'accept', '1year')
+ * ```
+ *
+ * 5. Set cookie with no 'expire' and no path, reload the page after it
+ * ```
+ * example.org#%#//scriptlet('trusted-set-cookie-reload', 'cmpconsent', 'decline', '', 'none')
+ * ```
+ */
+ /* eslint-enable max-len */
+ function trustedSetCookieReload$1(source, name, value) {
+ var offsetExpiresSec = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : '';
+ var path = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : '/';
+ if (typeof name === 'undefined') {
+ logMessage(source, 'Cookie name should be specified.');
+ return;
+ }
+ if (typeof value === 'undefined') {
+ logMessage(source, 'Cookie value should be specified.');
+ return;
+ }
- if (reload === 'true' && isCookieSetWithValue(document.cookie, name, value)) {
+ // Prevent infinite reloads if cookie was already set or blocked by the browser
+ // https://github.com/AdguardTeam/Scriptlets/issues/212
+ if (isCookieSetWithValue(document.cookie, name, value)) {
return;
}
-
- var ONE_YEAR_EXPIRATION_KEYWORD = '1year';
- var ONE_DAY_EXPIRATION_KEYWORD = '1day';
var parsedValue = parseKeywordValue(value);
- var cookieToSet = concatCookieNameValuePath(source, name, parsedValue, path);
-
+ if (!isValidCookiePath(path)) {
+ logMessage(source, "Invalid cookie path: '".concat(path, "'"));
+ return;
+ }
+ var cookieToSet = concatCookieNameValuePath(name, parsedValue, path);
if (!cookieToSet) {
return;
- } // Set expiration date if offsetExpiresSec was passed
-
-
+ }
if (offsetExpiresSec) {
- var MS_IN_SEC = 1000;
- var SECONDS_IN_YEAR = 365 * 24 * 60 * 60;
- var SECONDS_IN_DAY = 24 * 60 * 60;
- var parsedOffsetExpiresSec; // Set predefined expire value if corresponding keyword was passed
-
- if (offsetExpiresSec === ONE_YEAR_EXPIRATION_KEYWORD) {
- parsedOffsetExpiresSec = SECONDS_IN_YEAR;
- } else if (offsetExpiresSec === ONE_DAY_EXPIRATION_KEYWORD) {
- parsedOffsetExpiresSec = SECONDS_IN_DAY;
- } else {
- parsedOffsetExpiresSec = Number.parseInt(offsetExpiresSec, 10); // If offsetExpiresSec has been parsed to NaN - do not set cookie at all
-
- if (Number.isNaN(parsedOffsetExpiresSec)) {
- var message = "log: Invalid offsetExpiresSec value: ".concat(offsetExpiresSec);
- logMessage(source, message);
- return;
- }
+ var parsedOffsetMs = getTrustedCookieOffsetMs(offsetExpiresSec);
+ if (!parsedOffsetMs) {
+ logMessage(source, "Invalid offsetExpiresSec value: ".concat(offsetExpiresSec));
+ return;
}
-
- var expires = Date.now() + parsedOffsetExpiresSec * MS_IN_SEC;
+ var expires = Date.now() + parsedOffsetMs;
cookieToSet += " expires=".concat(new Date(expires).toUTCString(), ";");
}
+ document.cookie = cookieToSet;
+ hit(source);
- if (cookieToSet) {
- document.cookie = cookieToSet;
- hit(source); // Only reload the page if cookie was set
- // https://github.com/AdguardTeam/Scriptlets/issues/212
-
- if (reload === 'true' && isCookieSetWithValue(document.cookie, name, value)) {
- window.location.reload();
- }
+ // Only reload the page if cookie was set
+ // https://github.com/AdguardTeam/Scriptlets/issues/212
+ if (isCookieSetWithValue(document.cookie, name, value)) {
+ window.location.reload();
}
}
- trustedSetCookie$1.names = ['trusted-set-cookie' // trusted scriptlets support no aliases
+ trustedSetCookieReload$1.names = ['trusted-set-cookie-reload'
+ // trusted scriptlets support no aliases
];
- trustedSetCookie$1.injections = [hit, logMessage, nativeIsNaN, isCookieSetWithValue, concatCookieNameValuePath, isValidCookieRawPath, parseKeywordValue, getCookiePath];
- /* eslint-disable max-len */
+ trustedSetCookieReload$1.injections = [hit, logMessage, nativeIsNaN, isCookieSetWithValue, concatCookieNameValuePath, isValidCookiePath, getTrustedCookieOffsetMs, parseKeywordValue, getCookiePath];
+ /* eslint-disable max-len */
/**
* @trustedScriptlet trusted-replace-fetch-response
*
@@ -8459,146 +7083,112 @@
* example.org#%#//scriptlet('trusted-replace-fetch-response', '*', '', 'example.com')
* ```
*/
-
/* eslint-enable max-len */
-
function trustedReplaceFetchResponse$1(source) {
var pattern = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : '';
var replacement = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : '';
var propsToMatch = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : '';
-
// do nothing if browser does not support fetch or Proxy (e.g. Internet Explorer)
// https://developer.mozilla.org/en-US/docs/Web/API/WindowOrWorkerGlobalScope/fetch
// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Proxy
if (typeof fetch === 'undefined' || typeof Proxy === 'undefined' || typeof Response === 'undefined') {
return;
- } // Only allow pattern as empty string for logging purposes
-
+ }
+ // Only allow pattern as empty string for logging purposes
if (pattern === '' && replacement !== '') {
logMessage(source, 'Pattern argument should not be empty string.');
return;
}
-
var shouldLog = pattern === '' && replacement === '';
var nativeFetch = fetch;
var shouldReplace = false;
var fetchData;
+ var handlerWrapper = function handlerWrapper(target, thisArg, args) {
+ fetchData = getFetchData(args);
+ if (shouldLog) {
+ // log if no propsToMatch given
+ logMessage(source, "fetch( ".concat(objectToString(fetchData), " )"), true);
+ hit(source);
+ return Reflect.apply(target, thisArg, args);
+ }
+ shouldReplace = matchRequestProps(source, propsToMatch, fetchData);
+ if (!shouldReplace) {
+ return Reflect.apply(target, thisArg, args);
+ }
- var handlerWrapper = /*#__PURE__*/function () {
- var _ref = asyncToGenerator$1( /*#__PURE__*/regenerator$1.mark(function _callee(target, thisArg, args) {
- var forgeResponse;
- return regenerator$1.wrap(function _callee$(_context) {
- while (1) {
- switch (_context.prev = _context.next) {
- case 0:
- fetchData = getFetchData(args);
-
- if (!shouldLog) {
- _context.next = 5;
- break;
- }
-
- // log if no propsToMatch given
- logMessage(source, "fetch( ".concat(objectToString(fetchData), " )"), true);
- hit(source);
- return _context.abrupt("return", Reflect.apply(target, thisArg, args));
-
- case 5:
- shouldReplace = matchRequestProps(source, propsToMatch, fetchData);
-
- if (shouldReplace) {
- _context.next = 8;
- break;
- }
-
- return _context.abrupt("return", Reflect.apply(target, thisArg, args));
-
- case 8:
- /**
- * Create new Response object using original response' properties
- * and given text as body content
- * @param {Response} response original response to copy properties from
- * @param {string} textContent text to set as body content
- * @returns {Response}
- */
- forgeResponse = function forgeResponse(response, textContent) {
- var bodyUsed = response.bodyUsed,
- headers = response.headers,
- ok = response.ok,
- redirected = response.redirected,
- status = response.status,
- statusText = response.statusText,
- type = response.type,
- url = response.url; // eslint-disable-next-line compat/compat
-
- var forgedResponse = new Response(textContent, {
- status: status,
- statusText: statusText,
- headers: headers
- }); // Manually set properties which can't be set by Response constructor
-
- Object.defineProperties(forgedResponse, {
- url: {
- value: url
- },
- type: {
- value: type
- },
- ok: {
- value: ok
- },
- bodyUsed: {
- value: bodyUsed
- },
- redirected: {
- value: redirected
- }
- });
- return forgedResponse;
- };
-
- return _context.abrupt("return", nativeFetch.apply(void 0, toConsumableArray$1(args)).then(function (response) {
- return response.text().then(function (bodyText) {
- var patternRegexp = pattern === '*' ? toRegExp() : toRegExp(pattern);
- var modifiedTextContent = bodyText.replace(patternRegexp, replacement);
- var forgedResponse = forgeResponse(response, modifiedTextContent);
- hit(source);
- return forgedResponse;
- }).catch(function () {
- // log if response body can't be converted to a string
- var fetchDataStr = objectToString(fetchData);
- var message = "Response body can't be converted to text: ".concat(fetchDataStr);
- logMessage(source, message);
- return Reflect.apply(target, thisArg, args);
- });
- }).catch(function () {
- return Reflect.apply(target, thisArg, args);
- }));
+ /**
+ * Create new Response object using original response' properties
+ * and given text as body content
+ * @param {Response} response original response to copy properties from
+ * @param {string} textContent text to set as body content
+ * @returns {Response}
+ */
+ var forgeResponse = function forgeResponse(response, textContent) {
+ var bodyUsed = response.bodyUsed,
+ headers = response.headers,
+ ok = response.ok,
+ redirected = response.redirected,
+ status = response.status,
+ statusText = response.statusText,
+ type = response.type,
+ url = response.url; // eslint-disable-next-line compat/compat
+ var forgedResponse = new Response(textContent, {
+ status: status,
+ statusText: statusText,
+ headers: headers
+ });
- case 10:
- case "end":
- return _context.stop();
- }
+ // Manually set properties which can't be set by Response constructor
+ Object.defineProperties(forgedResponse, {
+ url: {
+ value: url
+ },
+ type: {
+ value: type
+ },
+ ok: {
+ value: ok
+ },
+ bodyUsed: {
+ value: bodyUsed
+ },
+ redirected: {
+ value: redirected
}
- }, _callee);
- }));
-
- return function handlerWrapper(_x, _x2, _x3) {
- return _ref.apply(this, arguments);
+ });
+ return forgedResponse;
};
- }();
+ // eslint-disable-next-line prefer-spread
+ return nativeFetch.apply(null, args).then(function (response) {
+ return response.text().then(function (bodyText) {
+ var patternRegexp = pattern === '*' ? /(\n|.)*/ : toRegExp(pattern);
+ var modifiedTextContent = bodyText.replace(patternRegexp, replacement);
+ var forgedResponse = forgeResponse(response, modifiedTextContent);
+ hit(source);
+ return forgedResponse;
+ }).catch(function () {
+ // log if response body can't be converted to a string
+ var fetchDataStr = objectToString(fetchData);
+ var message = "Response body can't be converted to text: ".concat(fetchDataStr);
+ logMessage(source, message);
+ return Reflect.apply(target, thisArg, args);
+ });
+ }).catch(function () {
+ return Reflect.apply(target, thisArg, args);
+ });
+ };
var fetchHandler = {
apply: handlerWrapper
};
fetch = new Proxy(fetch, fetchHandler); // eslint-disable-line no-global-assign
}
+
trustedReplaceFetchResponse$1.names = ['trusted-replace-fetch-response'];
- trustedReplaceFetchResponse$1.injections = [hit, logMessage, getFetchData, objectToString, matchRequestProps, toRegExp, isValidStrPattern, escapeRegExp, isEmptyObject, getRequestData, getObjectEntries, getObjectFromEntries, parseMatchProps, validateParsedData, getMatchPropsData];
+ trustedReplaceFetchResponse$1.injections = [hit, logMessage, getFetchData, objectToString, matchRequestProps, toRegExp, isValidStrPattern, escapeRegExp, isEmptyObject, getRequestData, getRequestProps, getObjectEntries, getObjectFromEntries, parseMatchProps, validateParsedData, getMatchPropsData];
/* eslint-disable max-len */
-
/**
* @trustedScriptlet trusted-set-local-storage-item
*
@@ -8644,7 +7234,6 @@
* example.org#%#//scriptlet('trusted-set-local-storage-item', 'ppu_main_none', '')
* ```
*/
-
/* eslint-enable max-len */
function trustedSetLocalStorageItem$1(source, key, value) {
@@ -8652,20 +7241,20 @@
logMessage(source, 'Item key should be specified.');
return;
}
-
if (typeof value === 'undefined') {
logMessage(source, 'Item value should be specified.');
return;
}
-
var parsedValue = parseKeywordValue(value);
var _window = window,
- localStorage = _window.localStorage;
+ localStorage = _window.localStorage;
setStorageItem(source, localStorage, key, parsedValue);
hit(source);
}
- trustedSetLocalStorageItem$1.names = ['trusted-set-local-storage-item' // trusted scriptlets support no aliases
+ trustedSetLocalStorageItem$1.names = ['trusted-set-local-storage-item'
+ // trusted scriptlets support no aliases
];
+
trustedSetLocalStorageItem$1.injections = [hit, logMessage, nativeIsNaN, setStorageItem, parseKeywordValue];
/**
@@ -8684,7 +7273,7 @@
setConstant: setConstant$1,
removeCookie: removeCookie$1,
preventAddEventListener: preventAddEventListener$1,
- preventBab: preventBab$1,
+ preventBab: preventBab$2,
nowebrtc: nowebrtc$1,
logAddEventListener: logAddEventListener$1,
logEval: logEval$1,
@@ -8724,6 +7313,7 @@
trustedReplaceXhrResponse: trustedReplaceXhrResponse$1,
xmlPrune: xmlPrune$1,
trustedSetCookie: trustedSetCookie$1,
+ trustedSetCookieReload: trustedSetCookieReload$1,
trustedReplaceFetchResponse: trustedReplaceFetchResponse$1,
trustedSetLocalStorageItem: trustedSetLocalStorageItem$1
});
@@ -8789,7 +7379,8 @@
adg: 'googletagservices-gpt',
ubo: 'googletagservices_gpt.js'
}, {
- adg: 'google-ima3'
+ adg: 'google-ima3',
+ ubo: 'google-ima.js'
}, {
adg: 'gemius'
}, {
@@ -8873,15 +7464,16 @@
var JS_RULE_MARKER = '#%#';
var COMMENT_MARKER = '!';
+
/**
* Checks if rule text is comment e.g. !!example.org##+js(set-constant.js, test, false)
* @param {string} rule
* @return {boolean}
*/
-
var isComment = function isComment(rule) {
- return startsWith(rule, COMMENT_MARKER);
+ return startsWith$1(rule, COMMENT_MARKER);
};
+
/* ************************************************************************
*
* Scriptlets
@@ -8891,85 +7483,79 @@
/**
* uBlock scriptlet rule mask
*/
-
-
var UBO_SCRIPTLET_MASK_REG = /#@?#script:inject|#@?#\s*\+js/;
var UBO_SCRIPTLET_MASK_1 = '##+js';
var UBO_SCRIPTLET_MASK_2 = '##script:inject';
var UBO_SCRIPTLET_EXCEPTION_MASK_1 = '#@#+js';
var UBO_SCRIPTLET_EXCEPTION_MASK_2 = '#@#script:inject';
+
/**
* AdBlock Plus snippet rule mask
*/
-
var ABP_SCRIPTLET_MASK = '#$#';
var ABP_SCRIPTLET_EXCEPTION_MASK = '#@$#';
+
/**
* AdGuard CSS rule mask
*/
-
var ADG_CSS_MASK_REG = /#@?\$#.+?\s*\{.*\}\s*$/g;
+
/**
* Checks if the `rule` is AdGuard scriptlet rule
* @param {string} rule - rule text
*/
-
var isAdgScriptletRule = function isAdgScriptletRule(rule) {
return !isComment(rule) && rule.indexOf(ADG_SCRIPTLET_MASK) > -1;
};
+
/**
* Checks if the `rule` is uBO scriptlet rule
* @param {string} rule rule text
*/
-
-
var isUboScriptletRule = function isUboScriptletRule(rule) {
return (rule.indexOf(UBO_SCRIPTLET_MASK_1) > -1 || rule.indexOf(UBO_SCRIPTLET_MASK_2) > -1 || rule.indexOf(UBO_SCRIPTLET_EXCEPTION_MASK_1) > -1 || rule.indexOf(UBO_SCRIPTLET_EXCEPTION_MASK_2) > -1) && UBO_SCRIPTLET_MASK_REG.test(rule) && !isComment(rule);
};
+
/**
* Checks if the `rule` is AdBlock Plus snippet
* @param {string} rule rule text
*/
-
-
var isAbpSnippetRule = function isAbpSnippetRule(rule) {
return (rule.indexOf(ABP_SCRIPTLET_MASK) > -1 || rule.indexOf(ABP_SCRIPTLET_EXCEPTION_MASK) > -1) && rule.search(ADG_CSS_MASK_REG) === -1 && !isComment(rule);
};
+
/**
* Finds scriptlet by it's name
* @param {string} name - scriptlet name
*/
-
-
var getScriptletByName = function getScriptletByName(name) {
var scriptlets = Object.keys(scriptletList).map(function (key) {
return scriptletList[key];
});
return scriptlets.find(function (s) {
- return s.names // full match name checking
- && (s.names.indexOf(name) > -1 // or check ubo alias name without '.js' at the end
+ return s.names
+ // full match name checking
+ && (s.names.indexOf(name) > -1
+ // or check ubo alias name without '.js' at the end
|| !endsWith(name, '.js') && s.names.indexOf("".concat(name, ".js")) > -1);
});
};
+
/**
* Checks if the scriptlet name is valid
* @param {string} name - Scriptlet name
*/
-
-
var isValidScriptletName = function isValidScriptletName(name) {
if (!name) {
return false;
}
-
var scriptlet = getScriptletByName(name);
-
if (!scriptlet) {
return false;
}
-
return true;
};
+
/* ************************************************************************
*
* Redirects
@@ -8979,18 +7565,16 @@
/**
* Redirect resources markers
*/
-
-
var ADG_UBO_REDIRECT_MARKER = 'redirect=';
var ADG_UBO_REDIRECT_RULE_MARKER = 'redirect-rule=';
var ABP_REDIRECT_MARKER = 'rewrite=abp-resource:';
var EMPTY_REDIRECT_MARKER = 'empty';
var VALID_SOURCE_TYPES = ['image', 'media', 'subdocument', 'stylesheet', 'script', 'xmlhttprequest', 'other'];
+
/**
* Source types for redirect rules if there is no one of them.
* Used for ADG -> UBO conversion.
*/
-
var ABSENT_SOURCE_TYPE_REPLACEMENT = [{
NAME: 'nooptext',
TYPES: VALID_SOURCE_TYPES
@@ -9022,41 +7606,41 @@
var validAdgRedirects = redirects$1.filter(function (el) {
return el.adg;
});
+
/**
* Compatibility object where KEYS = UBO redirect names and VALUES = ADG redirect names
* It's used for UBO -> ADG converting
*/
-
var uboToAdgCompatibility = getObjectFromEntries(validAdgRedirects.filter(function (el) {
return el.ubo;
}).map(function (el) {
return [el.ubo, el.adg];
}));
+
/**
* Compatibility object where KEYS = ABP redirect names and VALUES = ADG redirect names
* It's used for ABP -> ADG converting
*/
-
var abpToAdgCompatibility = getObjectFromEntries(validAdgRedirects.filter(function (el) {
return el.abp;
}).map(function (el) {
return [el.abp, el.adg];
}));
+
/**
* Compatibility object where KEYS = UBO redirect names and VALUES = ADG redirect names
* It's used for ADG -> UBO converting
*/
-
var adgToUboCompatibility = getObjectFromEntries(validAdgRedirects.filter(function (el) {
return el.ubo;
}).map(function (el) {
return [el.adg, el.ubo];
}));
+
/**
* Needed for AdGuard redirect names validation where KEYS = **valid** AdGuard redirect names
* 'adgToUboCompatibility' is still needed for ADG -> UBO converting
*/
-
var validAdgCompatibility = getObjectFromEntries(validAdgRedirects.map(function (el) {
return [el.adg, 'valid adg redirect'];
}));
@@ -9081,23 +7665,22 @@
compatibility: abpToAdgCompatibility
}
};
+
/**
* Parses redirect rule modifiers
* @param {string} rule
* @returns {Array}
*/
-
var parseModifiers = function parseModifiers(rule) {
return substringAfter$1(rule, '$').split(',');
};
+
/**
* Gets redirect resource name
* @param {string} rule
* @param {string} marker - specific Adg/Ubo or Abp redirect resources marker
* @returns {string} - redirect resource name
*/
-
-
var getRedirectName = function getRedirectName(rule, marker) {
var ruleModifiers = parseModifiers(rule);
var redirectNamePart = ruleModifiers.find(function (el) {
@@ -9105,104 +7688,95 @@
});
return substringAfter$1(redirectNamePart, marker);
};
+
/**
* Checks if the `rule` is AdGuard redirect rule.
* Discards comments and JS rules and checks if the `rule` has 'redirect' modifier.
* @param {string} rule - rule text
*/
-
-
var isAdgRedirectRule = function isAdgRedirectRule(rule) {
var MARKER_IN_BASE_PART_MASK = '/((?!\\$|\\,).{1})redirect((-rule)?)=(.{0,}?)\\$(popup)?/';
- return !isComment(rule) && (rule.indexOf(REDIRECT_RULE_TYPES.ADG.redirectMarker) > -1 || rule.indexOf(REDIRECT_RULE_TYPES.ADG.redirectRuleMarker) > -1) // some js rules may have 'redirect=' in it, so we should get rid of them
- && rule.indexOf(JS_RULE_MARKER) === -1 // get rid of rules like '_redirect=*://look.$popup'
+ return !isComment(rule) && (rule.indexOf(REDIRECT_RULE_TYPES.ADG.redirectMarker) > -1 || rule.indexOf(REDIRECT_RULE_TYPES.ADG.redirectRuleMarker) > -1)
+ // some js rules may have 'redirect=' in it, so we should get rid of them
+ && rule.indexOf(JS_RULE_MARKER) === -1
+ // get rid of rules like '_redirect=*://look.$popup'
&& !toRegExp(MARKER_IN_BASE_PART_MASK).test(rule);
- }; // const getRedirectResourceMarkerData = ()
+ };
+
+ // const getRedirectResourceMarkerData = ()
/**
* Checks if the `rule` satisfies the `type`
* @param {string} rule - rule text
* @param {'VALID_ADG'|'ADG'|'UBO'|'ABP'} type - type of a redirect rule
*/
-
-
var isRedirectRuleByType = function isRedirectRuleByType(rule, type) {
var _REDIRECT_RULE_TYPES$ = REDIRECT_RULE_TYPES[type],
- redirectMarker = _REDIRECT_RULE_TYPES$.redirectMarker,
- redirectRuleMarker = _REDIRECT_RULE_TYPES$.redirectRuleMarker,
- compatibility = _REDIRECT_RULE_TYPES$.compatibility;
-
+ redirectMarker = _REDIRECT_RULE_TYPES$.redirectMarker,
+ redirectRuleMarker = _REDIRECT_RULE_TYPES$.redirectRuleMarker,
+ compatibility = _REDIRECT_RULE_TYPES$.compatibility;
if (rule && !isComment(rule)) {
- var marker; // check if there is a $redirect-rule modifier in rule
-
+ var marker;
+ // check if there is a $redirect-rule modifier in rule
var markerIndex = redirectRuleMarker ? rule.indexOf(redirectRuleMarker) : -1;
-
if (markerIndex > -1) {
marker = redirectRuleMarker;
} else {
// check if there $redirect modifier in rule
markerIndex = rule.indexOf(redirectMarker);
-
if (markerIndex > -1) {
marker = redirectMarker;
} else {
return false;
}
}
-
var redirectName = getRedirectName(rule, marker);
-
if (!redirectName) {
return false;
}
-
return redirectName === Object.keys(compatibility).find(function (el) {
return el === redirectName;
});
}
-
return false;
};
+
/**
* Checks if the `rule` is **valid** AdGuard redirect resource rule
* @param {string} rule - rule text
* @returns {boolean}
*/
-
-
var isValidAdgRedirectRule = function isValidAdgRedirectRule(rule) {
return isRedirectRuleByType(rule, 'VALID_ADG');
};
+
/**
* Checks if the AdGuard redirect `rule` has Ubo analog. Needed for Adg->Ubo conversion
* @param {string} rule - AdGuard rule text
* @returns {boolean} - true if the rule can be converted to Ubo
*/
-
-
var isAdgRedirectCompatibleWithUbo = function isAdgRedirectCompatibleWithUbo(rule) {
return isAdgRedirectRule(rule) && isRedirectRuleByType(rule, 'ADG');
};
+
/**
* Checks if the Ubo redirect `rule` has AdGuard analog. Needed for Ubo->Adg conversion
* @param {string} rule - Ubo rule text
* @returns {boolean} - true if the rule can be converted to AdGuard
*/
-
-
var isUboRedirectCompatibleWithAdg = function isUboRedirectCompatibleWithAdg(rule) {
return isRedirectRuleByType(rule, 'UBO');
};
+
/**
* Checks if the Abp redirect `rule` has AdGuard analog. Needed for Abp->Adg conversion
* @param {string} rule - Abp rule text
* @returns {boolean} - true if the rule can be converted to AdGuard
*/
-
-
var isAbpRedirectCompatibleWithAdg = function isAbpRedirectCompatibleWithAdg(rule) {
return isRedirectRuleByType(rule, 'ABP');
};
+
/**
* Checks if the rule has specified content type before Adg -> Ubo conversion.
*
@@ -9219,26 +7793,21 @@
* @param {string} rule
* @returns {boolean}
*/
-
-
var hasValidContentType = function hasValidContentType(rule) {
- var ruleModifiers = parseModifiers(rule); // rule can have more than one source type modifier
-
+ var ruleModifiers = parseModifiers(rule);
+ // rule can have more than one source type modifier
var sourceTypes = ruleModifiers.filter(function (el) {
return VALID_SOURCE_TYPES.indexOf(el) > -1;
});
- var isSourceTypeSpecified = sourceTypes.length > 0; // eslint-disable-next-line max-len
-
+ var isSourceTypeSpecified = sourceTypes.length > 0;
+ // eslint-disable-next-line max-len
var isEmptyRedirect = ruleModifiers.indexOf("".concat(ADG_UBO_REDIRECT_MARKER).concat(EMPTY_REDIRECT_MARKER)) > -1 || ruleModifiers.indexOf("".concat(ADG_UBO_REDIRECT_RULE_MARKER).concat(EMPTY_REDIRECT_MARKER)) > -1;
-
if (isEmptyRedirect) {
// no source type for 'empty' is allowed
return true;
}
-
return isSourceTypeSpecified;
};
-
var validator = {
UBO_SCRIPTLET_MASK_REG: UBO_SCRIPTLET_MASK_REG,
ABP_SCRIPTLET_MASK: ABP_SCRIPTLET_MASK,
@@ -9262,49 +7831,89 @@
hasValidContentType: hasValidContentType
};
+ function _arrayLikeToArray(arr, len) {
+ if (len == null || len > arr.length) len = arr.length;
+ for (var i = 0, arr2 = new Array(len); i < len; i++) {
+ arr2[i] = arr[i];
+ }
+ return arr2;
+ }
+ var arrayLikeToArray = _arrayLikeToArray;
+
+ function _arrayWithoutHoles(arr) {
+ if (Array.isArray(arr)) return arrayLikeToArray(arr);
+ }
+ var arrayWithoutHoles = _arrayWithoutHoles;
+
+ function _iterableToArray(iter) {
+ if (typeof Symbol !== "undefined" && Symbol.iterator in Object(iter)) return Array.from(iter);
+ }
+ var iterableToArray = _iterableToArray;
+
+ function _unsupportedIterableToArray(o, minLen) {
+ if (!o) return;
+ if (typeof o === "string") return arrayLikeToArray(o, minLen);
+ var n = Object.prototype.toString.call(o).slice(8, -1);
+ if (n === "Object" && o.constructor) n = o.constructor.name;
+ if (n === "Map" || n === "Set") return Array.from(o);
+ if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return arrayLikeToArray(o, minLen);
+ }
+ var unsupportedIterableToArray = _unsupportedIterableToArray;
+
+ function _nonIterableSpread() {
+ throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.");
+ }
+ var nonIterableSpread = _nonIterableSpread;
+
+ function _toConsumableArray(arr) {
+ return arrayWithoutHoles(arr) || iterableToArray(arr) || unsupportedIterableToArray(arr) || nonIterableSpread();
+ }
+ var toConsumableArray = _toConsumableArray;
+
function _arrayWithHoles(arr) {
if (Array.isArray(arr)) return arr;
}
-
var arrayWithHoles = _arrayWithHoles;
function _nonIterableRest() {
throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.");
}
-
var nonIterableRest = _nonIterableRest;
function _toArray(arr) {
return arrayWithHoles(arr) || iterableToArray(arr) || unsupportedIterableToArray(arr) || nonIterableRest();
}
-
var toArray$1 = _toArray;
/**
* AdGuard scriptlet rule
*/
-
- var ADGUARD_SCRIPTLET_MASK_REG = /#@?%#\/\/scriptlet\(.+\)/; // eslint-disable-next-line no-template-curly-in-string
-
- var ADGUARD_SCRIPTLET_TEMPLATE = '${domains}#%#//scriptlet(${args})'; // eslint-disable-next-line no-template-curly-in-string
-
+ var ADGUARD_SCRIPTLET_MASK_REG = /#@?%#\/\/scriptlet\(.+\)/;
+ // eslint-disable-next-line no-template-curly-in-string
+ var ADGUARD_SCRIPTLET_TEMPLATE = '${domains}#%#//scriptlet(${args})';
+ // eslint-disable-next-line no-template-curly-in-string
var ADGUARD_SCRIPTLET_EXCEPTION_TEMPLATE = '${domains}#@%#//scriptlet(${args})';
+
/**
* uBlock scriptlet rule mask
*/
// eslint-disable-next-line no-template-curly-in-string
-
- var UBO_SCRIPTLET_TEMPLATE = '${domains}##+js(${args})'; // eslint-disable-next-line no-template-curly-in-string
-
+ var UBO_SCRIPTLET_TEMPLATE = '${domains}##+js(${args})';
+ // eslint-disable-next-line no-template-curly-in-string
var UBO_SCRIPTLET_EXCEPTION_TEMPLATE = '${domains}#@#+js(${args})';
var UBO_ALIAS_NAME_MARKER = 'ubo-';
- var UBO_SCRIPTLET_JS_ENDING = '.js'; // https://github.com/gorhill/uBlock/wiki/Static-filter-syntax#xhr
+ var UBO_SCRIPTLET_JS_ENDING = '.js';
+ // https://github.com/gorhill/uBlock/wiki/Static-filter-syntax#xhr
var UBO_XHR_TYPE = 'xhr';
var ADG_XHR_TYPE = 'xmlhttprequest';
var ADG_SET_CONSTANT_NAME = 'set-constant';
var ADG_SET_CONSTANT_EMPTY_STRING = '';
+ var ADG_SET_CONSTANT_EMPTY_ARRAY = 'emptyArr';
+ var ADG_SET_CONSTANT_EMPTY_OBJECT = 'emptyObj';
var UBO_SET_CONSTANT_EMPTY_STRING = '\'\'';
+ var UBO_SET_CONSTANT_EMPTY_ARRAY = '[]';
+ var UBO_SET_CONSTANT_EMPTY_OBJECT = '{}';
var ADG_PREVENT_FETCH_NAME = 'prevent-fetch';
var ADG_PREVENT_FETCH_EMPTY_STRING = '';
var ADG_PREVENT_FETCH_WILDCARD = '*';
@@ -9318,22 +7927,21 @@
var ADG_REMOVE_ATTR_NAME = REMOVE_ATTR_ALIASES[0];
var ADG_REMOVE_CLASS_NAME = REMOVE_CLASS_ALIASES[0];
var REMOVE_ATTR_CLASS_APPLYING = ['asap', 'stay', 'complete'];
+
/**
* Returns array of strings separated by space which not in quotes
* @param {string} str
*/
-
var getSentences = function getSentences(str) {
var reg = /'.*?'|".*?"|\S+/g;
return str.match(reg);
};
+
/**
* Replaces string with data by placeholders
* @param {string} str
* @param {Object} data - where keys are placeholders names
*/
-
-
var replacePlaceholders = function replacePlaceholders(str, data) {
return Object.keys(data).reduce(function (acc, key) {
var reg = new RegExp("\\$\\{".concat(key, "\\}"), 'g');
@@ -9341,11 +7949,9 @@
return acc;
}, str);
};
-
var splitArgs = function splitArgs(str) {
var args = [];
var prevArgStart = 0;
-
for (var i = 0; i < str.length; i += 1) {
// do not split args by escaped comma
// https://github.com/AdguardTeam/Scriptlets/issues/133
@@ -9353,39 +7959,35 @@
args.push(str.slice(prevArgStart, i).trim());
prevArgStart = i + 1;
}
- } // collect arg after last comma
-
-
+ }
+ // collect arg after last comma
args.push(str.slice(prevArgStart, str.length).trim());
return args;
};
+
/**
* Validates remove-attr/class scriptlet args
* @param {string[]} parsedArgs
* @returns {string[]|Error} valid args OR error for invalid selector
*/
-
-
var validateRemoveAttrClassArgs = function validateRemoveAttrClassArgs(parsedArgs) {
var _parsedArgs = toArray$1(parsedArgs),
- name = _parsedArgs[0],
- value = _parsedArgs[1],
- restArgs = _parsedArgs.slice(2); // no extra checking if there are only scriptlet name and value
+ name = _parsedArgs[0],
+ value = _parsedArgs[1],
+ restArgs = _parsedArgs.slice(2); // no extra checking if there are only scriptlet name and value
// https://github.com/AdguardTeam/Scriptlets/issues/235
-
-
if (restArgs.length === 0) {
return [name, value];
- } // remove-attr/class scriptlet might have multiple selectors separated by comma. so we should:
+ }
+
+ // remove-attr/class scriptlet might have multiple selectors separated by comma. so we should:
// 1. check if last arg is 'applying' parameter
// 2. join 'selector' into one arg
// 3. combine all args
// https://github.com/AdguardTeam/Scriptlets/issues/133
-
-
var lastArg = restArgs.pop();
- var applying; // check the last parsed arg for matching possible 'applying' vale
-
+ var applying;
+ // check the last parsed arg for matching possible 'applying' vale
if (REMOVE_ATTR_CLASS_APPLYING.some(function (el) {
return lastArg.indexOf(el) > -1;
})) {
@@ -9393,57 +7995,46 @@
} else {
restArgs.push(lastArg);
}
-
var selector = replaceAll(restArgs.join(', '), ESCAPED_COMMA_SEPARATOR, COMMA_SEPARATOR);
-
if (selector.length > 0 && typeof document !== 'undefined') {
// empty selector is valid for these scriptlets as it applies to all elements,
// all other selectors should be validated
// e.g. #%#//scriptlet('ubo-remove-class.js', 'blur', ', html')
document.querySelectorAll(selector);
}
-
var validArgs = applying ? [name, value, selector, applying] : [name, value, selector];
return validArgs;
};
+
/**
* Converts string of UBO scriptlet rule to AdGuard scriptlet rule
* @param {string} rule - UBO scriptlet rule
* @returns {string[]} - array with one AdGuard scriptlet rule
*/
-
-
var convertUboScriptletToAdg = function convertUboScriptletToAdg(rule) {
var domains = getBeforeRegExp(rule, validator.UBO_SCRIPTLET_MASK_REG);
var mask = rule.match(validator.UBO_SCRIPTLET_MASK_REG)[0];
var template;
-
if (mask.indexOf('@') > -1) {
template = ADGUARD_SCRIPTLET_EXCEPTION_TEMPLATE;
} else {
template = ADGUARD_SCRIPTLET_TEMPLATE;
}
-
var argsStr = getStringInBraces(rule);
var parsedArgs = splitArgs(argsStr);
var scriptletName = parsedArgs[0].indexOf(UBO_SCRIPTLET_JS_ENDING) > -1 ? "ubo-".concat(parsedArgs[0]) : "ubo-".concat(parsedArgs[0]).concat(UBO_SCRIPTLET_JS_ENDING);
-
if (REMOVE_ATTR_ALIASES.indexOf(scriptletName) > -1 || REMOVE_CLASS_ALIASES.indexOf(scriptletName) > -1) {
parsedArgs = validateRemoveAttrClassArgs(parsedArgs);
}
-
var args = parsedArgs.map(function (arg, index) {
var outputArg = arg;
-
if (index === 0) {
outputArg = scriptletName;
- } // for example: example.org##+js(abort-current-inline-script, $, popup)
-
-
+ }
+ // for example: example.org##+js(abort-current-inline-script, $, popup)
if (arg === '$') {
outputArg = '$$';
}
-
return outputArg;
}).map(function (arg) {
return wrapInSingleQuotes(arg);
@@ -9454,20 +8045,21 @@
});
return [adgRule];
};
+
/**
* Convert string of ABP snippet rule to AdGuard scriptlet rule
* @param {string} rule - ABP snippet rule
* @returns {Array} - array of AdGuard scriptlet rules -
* one or few items depends on Abp-rule
*/
-
var convertAbpSnippetToAdg = function convertAbpSnippetToAdg(rule) {
var SEMICOLON_DIVIDER = /;(?=(?:(?:[^"]*"){2})*[^"]*$)/g;
var mask = rule.indexOf(validator.ABP_SCRIPTLET_MASK) > -1 ? validator.ABP_SCRIPTLET_MASK : validator.ABP_SCRIPTLET_EXCEPTION_MASK;
var template = mask === validator.ABP_SCRIPTLET_MASK ? ADGUARD_SCRIPTLET_TEMPLATE : ADGUARD_SCRIPTLET_EXCEPTION_TEMPLATE;
var domains = substringBefore(rule, mask);
var args = substringAfter$1(rule, mask);
- return args.split(SEMICOLON_DIVIDER) // abp-rule may have `;` at the end which makes last array item irrelevant
+ return args.split(SEMICOLON_DIVIDER)
+ // abp-rule may have `;` at the end which makes last array item irrelevant
// https://github.com/AdguardTeam/Scriptlets/issues/236
.filter(isExisting).map(function (args) {
return getSentences(args).map(function (arg, index) {
@@ -9482,16 +8074,15 @@
});
});
};
+
/**
* Converts scriptlet rule to AdGuard one
* @param {string} rule
* @returns {Array} - array of AdGuard scriptlet rules -
* one item for Adg and Ubo or few items for Abp
*/
-
var convertScriptletToAdg = function convertScriptletToAdg(rule) {
var result;
-
if (validator.isUboScriptletRule(rule)) {
result = convertUboScriptletToAdg(rule);
} else if (validator.isAbpSnippetRule(rule)) {
@@ -9499,44 +8090,48 @@
} else if (validator.isAdgScriptletRule(rule) || validator.isComment(rule)) {
result = [rule];
}
-
return result;
};
+
/**
* Converts UBO scriptlet rule to AdGuard one
* @param {string} rule - AdGuard scriptlet rule
* @returns {string} - UBO scriptlet rule
*/
-
var convertAdgScriptletToUbo = function convertAdgScriptletToUbo(rule) {
var res;
-
if (validator.isAdgScriptletRule(rule)) {
var _parseRule = parseRule(rule),
- parsedName = _parseRule.name,
- parsedParams = _parseRule.args;
-
- var preparedParams; // https://github.com/AdguardTeam/FiltersCompiler/issues/102
-
- if (parsedName === ADG_SET_CONSTANT_NAME && parsedParams[1] === ADG_SET_CONSTANT_EMPTY_STRING) {
+ parsedName = _parseRule.name,
+ parsedParams = _parseRule.args;
+ var preparedParams;
+ if (parsedName === ADG_SET_CONSTANT_NAME
+ // https://github.com/AdguardTeam/FiltersCompiler/issues/102
+ && parsedParams[1] === ADG_SET_CONSTANT_EMPTY_STRING) {
preparedParams = [parsedParams[0], UBO_SET_CONSTANT_EMPTY_STRING];
- } else if (parsedName === ADG_PREVENT_FETCH_NAME // https://github.com/AdguardTeam/Scriptlets/issues/109
+ } else if (parsedName === ADG_SET_CONSTANT_NAME
+ // https://github.com/uBlockOrigin/uBlock-issues/issues/2411
+ && parsedParams[1] === ADG_SET_CONSTANT_EMPTY_ARRAY) {
+ preparedParams = [parsedParams[0], UBO_SET_CONSTANT_EMPTY_ARRAY];
+ } else if (parsedName === ADG_SET_CONSTANT_NAME && parsedParams[1] === ADG_SET_CONSTANT_EMPTY_OBJECT) {
+ preparedParams = [parsedParams[0], UBO_SET_CONSTANT_EMPTY_OBJECT];
+ } else if (parsedName === ADG_PREVENT_FETCH_NAME
+ // https://github.com/AdguardTeam/Scriptlets/issues/109
&& (parsedParams[0] === ADG_PREVENT_FETCH_WILDCARD || parsedParams[0] === ADG_PREVENT_FETCH_EMPTY_STRING)) {
preparedParams = [UBO_NO_FETCH_IF_WILDCARD];
} else if ((parsedName === ADG_REMOVE_ATTR_NAME || parsedName === ADG_REMOVE_CLASS_NAME) && parsedParams[1] && parsedParams[1].indexOf(COMMA_SEPARATOR) > -1) {
preparedParams = [parsedParams[0], replaceAll(parsedParams[1], COMMA_SEPARATOR, ESCAPED_COMMA_SEPARATOR)];
} else {
preparedParams = parsedParams;
- } // object of name and aliases for the Adg-scriptlet
-
+ }
+ // object of name and aliases for the Adg-scriptlet
var adgScriptletObject = Object.keys(scriptletList).map(function (el) {
return scriptletList[el];
}).map(function (s) {
var _s$names = toArray$1(s.names),
- name = _s$names[0],
- aliases = _s$names.slice(1);
-
+ name = _s$names[0],
+ aliases = _s$names.slice(1);
return {
name: name,
aliases: aliases
@@ -9545,25 +8140,23 @@
return el.name === parsedName || el.aliases.indexOf(parsedName) >= 0;
});
var aliases = adgScriptletObject.aliases;
-
if (aliases.length > 0) {
- var uboAlias = adgScriptletObject.aliases // eslint-disable-next-line no-restricted-properties
+ var uboAlias = adgScriptletObject.aliases
+ // eslint-disable-next-line no-restricted-properties
.find(function (alias) {
return alias.includes(UBO_ALIAS_NAME_MARKER);
});
-
if (uboAlias) {
var mask = rule.match(ADGUARD_SCRIPTLET_MASK_REG)[0];
var template;
-
if (mask.indexOf('@') > -1) {
template = UBO_SCRIPTLET_EXCEPTION_TEMPLATE;
} else {
template = UBO_SCRIPTLET_TEMPLATE;
}
-
var domains = getBeforeRegExp(rule, ADGUARD_SCRIPTLET_MASK_REG);
- var uboName = uboAlias.replace(UBO_ALIAS_NAME_MARKER, '') // '.js' in the Ubo scriptlet name can be omitted
+ var uboName = uboAlias.replace(UBO_ALIAS_NAME_MARKER, '')
+ // '.js' in the Ubo scriptlet name can be omitted
// https://github.com/gorhill/uBlock/wiki/Resources-Library#general-purpose-scriptlets
.replace(UBO_SCRIPTLET_JS_ENDING, '');
var args = preparedParams.length > 0 ? "".concat(uboName, ", ").concat(preparedParams.join("".concat(COMMA_SEPARATOR, " "))) : uboName;
@@ -9575,30 +8168,30 @@
}
}
}
-
return res;
};
+
/**
* Checks whether the ADG scriptlet exists or UBO/ABP scriptlet is compatible to ADG
* @param {string} input - can be ADG or UBO or ABP scriptlet rule
* @returns {boolean}
*/
-
var isValidScriptletRule = function isValidScriptletRule(input) {
if (!input) {
return false;
- } // ABP 'input' rule may contain more than one snippet
-
+ }
+ // ABP 'input' rule may contain more than one snippet
+ var rulesArray = convertScriptletToAdg(input);
- var rulesArray = convertScriptletToAdg(input); // checking if each of parsed scriptlets is valid
+ // checking if each of parsed scriptlets is valid
// if at least one of them is not valid - whole 'input' rule is not valid too
-
var isValid = rulesArray.every(function (rule) {
var parsedRule = parseRule(rule);
return validator.isValidScriptletName(parsedRule.name);
});
return isValid;
};
+
/**
* Gets index and redirect resource marker from UBO/ADG modifiers array
* @param {string[]} modifiers
@@ -9606,39 +8199,34 @@
* @param {string} rule
* @returns {Object} { index, marker }
*/
-
var getMarkerData = function getMarkerData(modifiers, redirectsData, rule) {
var marker;
var index = modifiers.findIndex(function (m) {
return m.indexOf(redirectsData.redirectRuleMarker) > -1;
});
-
if (index > -1) {
marker = redirectsData.redirectRuleMarker;
} else {
index = modifiers.findIndex(function (m) {
return m.indexOf(redirectsData.redirectMarker) > -1;
});
-
if (index > -1) {
marker = redirectsData.redirectMarker;
} else {
throw new Error("No redirect resource modifier found in rule: ".concat(rule));
}
}
-
return {
index: index,
marker: marker
};
};
+
/**
* Converts Ubo redirect rule to Adg one
* @param {string} rule
* @returns {string}
*/
-
-
var convertUboRedirectToAdg = function convertUboRedirectToAdg(rule) {
var firstPartOfRule = substringBefore(rule, '$');
var uboModifiers = validator.parseModifiers(rule);
@@ -9650,21 +8238,19 @@
var adgMarker = uboMarkerData.marker === validator.ADG_UBO_REDIRECT_RULE_MARKER ? validator.REDIRECT_RULE_TYPES.ADG.redirectRuleMarker : validator.REDIRECT_RULE_TYPES.ADG.redirectMarker;
return "".concat(adgMarker).concat(adgName);
}
-
if (modifier === UBO_XHR_TYPE) {
return ADG_XHR_TYPE;
}
-
return modifier;
}).join(COMMA_SEPARATOR);
return "".concat(firstPartOfRule, "$").concat(adgModifiers);
};
+
/**
* Converts Abp redirect rule to Adg one
* @param {string} rule
* @returns {string}
*/
-
var convertAbpRedirectToAdg = function convertAbpRedirectToAdg(rule) {
var firstPartOfRule = substringBefore(rule, '$');
var abpModifiers = validator.parseModifiers(rule);
@@ -9674,20 +8260,18 @@
var adgName = validator.REDIRECT_RULE_TYPES.ABP.compatibility[abpName];
return "".concat(validator.REDIRECT_RULE_TYPES.ADG.redirectMarker).concat(adgName);
}
-
return modifier;
}).join(COMMA_SEPARATOR);
return "".concat(firstPartOfRule, "$").concat(adgModifiers);
};
+
/**
* Converts redirect rule to AdGuard one
* @param {string} rule
* @returns {string}
*/
-
var convertRedirectToAdg = function convertRedirectToAdg(rule) {
var result;
-
if (validator.isUboRedirectCompatibleWithAdg(rule)) {
result = convertUboRedirectToAdg(rule);
} else if (validator.isAbpRedirectCompatibleWithAdg(rule)) {
@@ -9695,9 +8279,9 @@
} else if (validator.isValidAdgRedirectRule(rule)) {
result = rule;
}
-
return result;
};
+
/**
* Converts Adg redirect rule to Ubo one
* 1. Checks if there is Ubo analog for Adg rule
@@ -9709,40 +8293,33 @@
* @param {string} rule
* @returns {string}
*/
-
var convertAdgRedirectToUbo = function convertAdgRedirectToUbo(rule) {
if (!validator.isAdgRedirectCompatibleWithUbo(rule)) {
throw new Error("Unable to convert for uBO - unsupported redirect in rule: ".concat(rule));
}
-
var basePart = substringBefore(rule, '$');
var adgModifiers = validator.parseModifiers(rule);
var adgMarkerData = getMarkerData(adgModifiers, validator.REDIRECT_RULE_TYPES.ADG, rule);
var adgRedirectName = adgModifiers[adgMarkerData.index].slice(adgMarkerData.marker.length);
-
if (!validator.hasValidContentType(rule)) {
// add missed source types as content type modifiers
var sourceTypesData = validator.ABSENT_SOURCE_TYPE_REPLACEMENT.find(function (el) {
return el.NAME === adgRedirectName;
});
-
if (typeof sourceTypesData === 'undefined') {
// eslint-disable-next-line max-len
throw new Error("Unable to convert for uBO - no types to add for specific redirect in rule: ".concat(rule));
}
-
var additionModifiers = sourceTypesData.TYPES;
- adgModifiers.push.apply(adgModifiers, toConsumableArray$1(additionModifiers));
+ adgModifiers.push.apply(adgModifiers, toConsumableArray(additionModifiers));
}
-
var uboModifiers = adgModifiers.map(function (el, index) {
if (index === adgMarkerData.index) {
- var uboMarker = adgMarkerData.marker === validator.ADG_UBO_REDIRECT_RULE_MARKER ? validator.REDIRECT_RULE_TYPES.UBO.redirectRuleMarker : validator.REDIRECT_RULE_TYPES.UBO.redirectMarker; // eslint-disable-next-line max-len
-
+ var uboMarker = adgMarkerData.marker === validator.ADG_UBO_REDIRECT_RULE_MARKER ? validator.REDIRECT_RULE_TYPES.UBO.redirectRuleMarker : validator.REDIRECT_RULE_TYPES.UBO.redirectMarker;
+ // eslint-disable-next-line max-len
var uboRedirectName = validator.REDIRECT_RULE_TYPES.ADG.compatibility[adgRedirectName];
return "".concat(uboMarker).concat(uboRedirectName);
}
-
return el;
}).join(COMMA_SEPARATOR);
return "".concat(basePart, "$").concat(uboModifiers);
@@ -9764,30 +8341,24 @@
* ||googletagmanager.com/gtm.js$script,redirect=googletagmanager-gtm
* ```
*/
-
function GoogleAnalytics(source) {
// eslint-disable-next-line func-names
var Tracker = function Tracker() {}; // constructor
-
-
var proto = Tracker.prototype;
proto.get = noopFunc;
proto.set = noopFunc;
proto.send = noopFunc;
- var googleAnalyticsName = window.GoogleAnalyticsObject || 'ga'; // a -- fake arg for 'ga.length < 1' antiadblock checking
+ var googleAnalyticsName = window.GoogleAnalyticsObject || 'ga';
+ // a -- fake arg for 'ga.length < 1' antiadblock checking
// eslint-disable-next-line no-unused-vars
-
function ga(a) {
var len = arguments.length;
-
if (len === 0) {
return;
- } // eslint-disable-next-line prefer-rest-params
-
-
+ }
+ // eslint-disable-next-line prefer-rest-params
var lastArg = arguments[len - 1];
var replacer;
-
if (lastArg instanceof Object && lastArg !== null && typeof lastArg.hitCallback === 'function') {
replacer = lastArg.hitCallback;
} else if (typeof lastArg === 'function') {
@@ -9796,79 +8367,68 @@
lastArg(ga.create());
};
}
-
try {
- setTimeout(replacer, 1); // eslint-disable-next-line no-empty
+ setTimeout(replacer, 1);
+ // eslint-disable-next-line no-empty
} catch (ex) {}
}
-
ga.create = function () {
return new Tracker();
- }; // https://github.com/AdguardTeam/Scriptlets/issues/134
-
-
+ };
+ // https://github.com/AdguardTeam/Scriptlets/issues/134
ga.getByName = function () {
return new Tracker();
};
-
ga.getAll = function () {
return [new Tracker()];
};
-
ga.remove = noopFunc;
ga.loaded = true;
window[googleAnalyticsName] = ga;
var _window = window,
- dataLayer = _window.dataLayer,
- google_optimize = _window.google_optimize; // eslint-disable-line camelcase
-
+ dataLayer = _window.dataLayer,
+ google_optimize = _window.google_optimize; // eslint-disable-line camelcase
if (dataLayer instanceof Object === false) {
return;
}
-
if (dataLayer.hide instanceof Object && typeof dataLayer.hide.end === 'function') {
dataLayer.hide.end();
}
+
/**
* checks data object and delays callback
* @param {Object|Array} data gtag payload
* @param {string} funcName callback prop name
* @returns
*/
-
-
var handleCallback = function handleCallback(dataObj, funcName) {
if (dataObj && typeof dataObj[funcName] === 'function') {
setTimeout(dataObj[funcName]);
}
};
-
if (typeof dataLayer.push === 'function') {
dataLayer.push = function (data) {
if (data instanceof Object) {
- handleCallback(data, 'eventCallback'); // eslint-disable-next-line no-restricted-syntax, guard-for-in
-
+ handleCallback(data, 'eventCallback');
+ // eslint-disable-next-line no-restricted-syntax, guard-for-in
for (var key in data) {
handleCallback(data[key], 'event_callback');
- } // eslint-disable-next-line no-prototype-builtins
-
-
+ }
+ // eslint-disable-next-line no-prototype-builtins
if (!data.hasOwnProperty('eventCallback') && !data.hasOwnProperty('eventCallback')) {
[].push.call(window.dataLayer, data);
}
}
-
if (Array.isArray(data)) {
data.forEach(function (arg) {
handleCallback(arg, 'callback');
});
}
-
return noopFunc;
};
- } // https://github.com/AdguardTeam/Scriptlets/issues/81
-
+ }
+ // https://github.com/AdguardTeam/Scriptlets/issues/81
if (google_optimize instanceof Object && typeof google_optimize.get === 'function') {
// eslint-disable-line camelcase
var googleOptimizeWrapper = {
@@ -9876,14 +8436,15 @@
};
window.google_optimize = googleOptimizeWrapper;
}
-
hit(source);
}
- GoogleAnalytics.names = ['google-analytics', 'ubo-google-analytics_analytics.js', 'google-analytics_analytics.js', // https://github.com/AdguardTeam/Scriptlets/issues/127
+ GoogleAnalytics.names = ['google-analytics', 'ubo-google-analytics_analytics.js', 'google-analytics_analytics.js',
+ // https://github.com/AdguardTeam/Scriptlets/issues/127
'googletagmanager-gtm', 'ubo-googletagmanager_gtm.js', 'googletagmanager_gtm.js'];
GoogleAnalytics.injections = [hit, noopFunc, noopNull, noopArray];
/* eslint-disable no-underscore-dangle */
+
/**
* @redirect google-analytics-ga
*
@@ -9898,11 +8459,9 @@
* ||google-analytics.com/ga.js$script,redirect=google-analytics-ga
* ```
*/
-
function GoogleAnalyticsGa(source) {
// Gaq constructor
function Gaq() {}
-
Gaq.prototype.Na = noopFunc;
Gaq.prototype.O = noopFunc;
Gaq.prototype.Sa = noopFunc;
@@ -9911,80 +8470,67 @@
Gaq.prototype._createAsyncTracker = noopFunc;
Gaq.prototype._getAsyncTracker = noopFunc;
Gaq.prototype._getPlugin = noopFunc;
-
Gaq.prototype.push = function (data) {
if (typeof data === 'function') {
data();
return;
}
-
if (Array.isArray(data) === false) {
return;
- } // https://developers.google.com/analytics/devguides/collection/gajs/methods/gaJSApiDomainDirectory#_gat.GA_Tracker_._link
+ }
+ // https://developers.google.com/analytics/devguides/collection/gajs/methods/gaJSApiDomainDirectory#_gat.GA_Tracker_._link
// https://github.com/uBlockOrigin/uBlock-issues/issues/1807
-
-
if (typeof data[0] === 'string' && /(^|\.)_link$/.test(data[0]) && typeof data[1] === 'string') {
window.location.assign(data[1]);
- } // https://github.com/gorhill/uBlock/issues/2162
-
-
+ }
+ // https://github.com/gorhill/uBlock/issues/2162
if (data[0] === '_set' && data[1] === 'hitCallback' && typeof data[2] === 'function') {
data[2]();
}
};
-
var gaq = new Gaq();
var asyncTrackers = window._gaq || [];
-
if (Array.isArray(asyncTrackers)) {
while (asyncTrackers[0]) {
gaq.push(asyncTrackers.shift());
}
- } // eslint-disable-next-line no-multi-assign
-
-
- window._gaq = gaq.qf = gaq; // Gat constructor
-
- function Gat() {} // Mock tracker api
+ }
+ // eslint-disable-next-line no-multi-assign
+ window._gaq = gaq.qf = gaq;
+ // Gat constructor
+ function Gat() {}
+ // Mock tracker api
var api = ['_addIgnoredOrganic', '_addIgnoredRef', '_addItem', '_addOrganic', '_addTrans', '_clearIgnoredOrganic', '_clearIgnoredRef', '_clearOrganic', '_cookiePathCopy', '_deleteCustomVar', '_getName', '_setAccount', '_getAccount', '_getClientInfo', '_getDetectFlash', '_getDetectTitle', '_getLinkerUrl', '_getLocalGifPath', '_getServiceMode', '_getVersion', '_getVisitorCustomVar', '_initData', '_link', '_linkByPost', '_setAllowAnchor', '_setAllowHash', '_setAllowLinker', '_setCampContentKey', '_setCampMediumKey', '_setCampNameKey', '_setCampNOKey', '_setCampSourceKey', '_setCampTermKey', '_setCampaignCookieTimeout', '_setCampaignTrack', '_setClientInfo', '_setCookiePath', '_setCookiePersistence', '_setCookieTimeout', '_setCustomVar', '_setDetectFlash', '_setDetectTitle', '_setDomainName', '_setLocalGifPath', '_setLocalRemoteServerMode', '_setLocalServerMode', '_setReferrerOverride', '_setRemoteServerMode', '_setSampleRate', '_setSessionTimeout', '_setSiteSpeedSampleRate', '_setSessionCookieTimeout', '_setVar', '_setVisitorCookieTimeout', '_trackEvent', '_trackPageLoadTime', '_trackPageview', '_trackSocial', '_trackTiming', '_trackTrans', '_visitCode'];
var tracker = api.reduce(function (res, funcName) {
res[funcName] = noopFunc;
return res;
}, {});
-
tracker._getLinkerUrl = function (a) {
return a;
- }; // https://github.com/AdguardTeam/Scriptlets/issues/154
-
-
+ };
+ // https://github.com/AdguardTeam/Scriptlets/issues/154
tracker._link = function (url) {
if (typeof url !== 'string') {
return;
}
-
try {
window.location.assign(url);
} catch (e) {
logMessage(source, e);
}
};
-
Gat.prototype._anonymizeIP = noopFunc;
Gat.prototype._createTracker = noopFunc;
Gat.prototype._forceSSL = noopFunc;
Gat.prototype._getPlugin = noopFunc;
-
Gat.prototype._getTracker = function () {
return tracker;
};
-
Gat.prototype._getTrackerByName = function () {
return tracker;
};
-
Gat.prototype._getTrackers = noopFunc;
Gat.prototype.aa = noopFunc;
Gat.prototype.ab = noopFunc;
@@ -10001,7 +8547,6 @@
GoogleAnalyticsGa.injections = [hit, noopFunc, logMessage];
/* eslint-disable max-len */
-
/**
* @redirect googlesyndication-adsbygoogle
*
@@ -10016,9 +8561,7 @@
* ||pagead2.googlesyndication.com/pagead/js/adsbygoogle.js$script,redirect=googlesyndication-adsbygoogle
* ```
*/
-
/* eslint-enable max-len */
-
function GoogleSyndicationAdsByGoogle(source) {
window.adsbygoogle = {
// https://github.com/AdguardTeam/Scriptlets/issues/113
@@ -10030,12 +8573,10 @@
this.length = 0;
this.length += 1;
}
-
if (arg !== null && arg instanceof Object && arg.constructor.name === 'Object') {
// eslint-disable-next-line no-restricted-syntax
for (var _i = 0, _Object$keys = Object.keys(arg); _i < _Object$keys.length; _i++) {
var key = _Object$keys[_i];
-
if (typeof arg[key] === 'function') {
try {
// https://github.com/AdguardTeam/Scriptlets/issues/252
@@ -10055,22 +8596,21 @@
var ASWIFT_IFRAME_MARKER = 'aswift_';
var GOOGLE_ADS_IFRAME_MARKER = 'google_ads_iframe_';
var executed = false;
-
for (var i = 0; i < adElems.length; i += 1) {
var adElemChildNodes = adElems[i].childNodes;
- var childNodesQuantity = adElemChildNodes.length; // childNodes of .adsbygoogle can be defined if scriptlet was executed before
+ var childNodesQuantity = adElemChildNodes.length;
+ // childNodes of .adsbygoogle can be defined if scriptlet was executed before
// so we should check that childNodes are exactly defined by us
// TODO: remake after scriptlets context developing in 1.3
-
var areIframesDefined = false;
-
if (childNodesQuantity > 0) {
// it should be only 2 child iframes if scriptlet was executed
- areIframesDefined = childNodesQuantity === 2 // the first of child nodes should be aswift iframe
- && adElemChildNodes[0].nodeName.toLowerCase() === 'iframe' && adElemChildNodes[0].id.indexOf(ASWIFT_IFRAME_MARKER) > -1 // the second of child nodes should be google_ads iframe
+ areIframesDefined = childNodesQuantity === 2
+ // the first of child nodes should be aswift iframe
+ && adElemChildNodes[0].nodeName.toLowerCase() === 'iframe' && adElemChildNodes[0].id.indexOf(ASWIFT_IFRAME_MARKER) > -1
+ // the second of child nodes should be google_ads iframe
&& adElemChildNodes[1].nodeName.toLowerCase() === 'iframe' && adElemChildNodes[1].id.indexOf(GOOGLE_ADS_IFRAME_MARKER) > -1;
}
-
if (!areIframesDefined) {
// here we do the job if scriptlet has not been executed earlier
adElems[i].setAttribute(statusAttrName, 'done');
@@ -10089,7 +8629,6 @@
executed = true;
}
}
-
if (executed) {
hit(source);
}
@@ -10098,6 +8637,7 @@
GoogleSyndicationAdsByGoogle.injections = [hit];
/* eslint-disable func-names */
+
/**
* @redirect googletagservices-gpt
*
@@ -10112,29 +8652,23 @@
* ||googletagservices.com/tag/js/gpt.js$script,redirect=googletagservices-gpt
* ```
*/
-
function GoogleTagServicesGpt(source) {
var slots = new Map();
var slotsById = new Map();
var eventCallbacks = new Map();
-
var addEventListener = function addEventListener(name, listener) {
if (!eventCallbacks.has(name)) {
eventCallbacks.set(name, new Set());
}
-
eventCallbacks.get(name).add(listener);
return this;
};
-
var removeEventListener = function removeEventListener(name, listener) {
if (eventCallbacks.has(name)) {
return eventCallbacks.get(name).delete(listener);
}
-
return false;
};
-
var fireSlotEvent = function fireSlotEvent(name, slot) {
// eslint-disable-next-line compat/compat
return new Promise(function (resolve) {
@@ -10142,7 +8676,6 @@
var size = [0, 0];
var callbacksSet = eventCallbacks.get(name) || [];
var callbackArray = Array.from(callbacksSet);
-
for (var i = 0; i < callbackArray.length; i += 1) {
callbackArray[i]({
isEmpty: true,
@@ -10150,36 +8683,28 @@
slot: slot
});
}
-
resolve();
});
});
};
-
var displaySlot = function displaySlot(slot) {
if (!slot) {
return;
}
-
var id = slot.getSlotElementId();
-
if (!document.getElementById(id)) {
return;
}
-
var parent = document.getElementById(id);
-
if (parent) {
parent.appendChild(document.createElement('div'));
}
-
fireSlotEvent('slotRenderEnded', slot);
fireSlotEvent('slotRequested', slot);
fireSlotEvent('slotResponseReceived', slot);
fireSlotEvent('slotOnload', slot);
fireSlotEvent('impressionViewable', slot);
};
-
var companionAdsService = {
addEventListener: addEventListener,
removeEventListener: removeEventListener,
@@ -10192,10 +8717,8 @@
removeEventListener: removeEventListener,
setContent: noopFunc
};
-
function PassbackSlot() {} // constructor
-
PassbackSlot.prototype.display = noopFunc;
PassbackSlot.prototype.get = noopNull;
PassbackSlot.prototype.set = noopThis;
@@ -10203,50 +8726,36 @@
PassbackSlot.prototype.setTagForChildDirectedTreatment = noopThis;
PassbackSlot.prototype.setTargeting = noopThis;
PassbackSlot.prototype.updateTargetingFromMap = noopThis;
-
function SizeMappingBuilder() {} // constructor
-
-
SizeMappingBuilder.prototype.addSize = noopThis;
SizeMappingBuilder.prototype.build = noopNull;
-
function Slot(adUnitPath, creatives, optDiv) {
this.adUnitPath = adUnitPath;
this.creatives = creatives;
this.optDiv = optDiv;
-
if (slotsById.has(optDiv)) {
var _document$getElementB;
-
(_document$getElementB = document.getElementById(optDiv)) === null || _document$getElementB === void 0 ? void 0 : _document$getElementB.remove();
return slotsById.get(optDiv);
}
-
slotsById.set(optDiv, this);
} // constructor
-
-
Slot.prototype.addService = noopThis;
Slot.prototype.clearCategoryExclusions = noopThis;
Slot.prototype.clearTargeting = noopThis;
Slot.prototype.defineSizeMapping = noopThis;
Slot.prototype.get = noopNull;
-
Slot.prototype.getAdUnitPath = function () {
return this.adUnitPath;
};
-
Slot.prototype.getAttributeKeys = noopArray;
Slot.prototype.getCategoryExclusions = noopArray;
-
Slot.prototype.getDomId = function () {
return this.optDiv;
};
-
Slot.prototype.getSlotElementId = function () {
return this.optDiv;
};
-
Slot.prototype.getSlotId = noopThis;
Slot.prototype.getSizes = noopArray;
Slot.prototype.getTargeting = noopArray;
@@ -10298,48 +8807,38 @@
setVideoContent: noopThis,
updateCorrelator: noopFunc
};
-
var getNewSlot = function getNewSlot(adUnitPath, creatives, optDiv) {
return new Slot(adUnitPath, creatives, optDiv);
};
-
var _window = window,
- _window$googletag = _window.googletag,
- googletag = _window$googletag === void 0 ? {} : _window$googletag;
+ _window$googletag = _window.googletag,
+ googletag = _window$googletag === void 0 ? {} : _window$googletag;
var _googletag$cmd = googletag.cmd,
- cmd = _googletag$cmd === void 0 ? [] : _googletag$cmd;
+ cmd = _googletag$cmd === void 0 ? [] : _googletag$cmd;
googletag.apiReady = true;
googletag.cmd = [];
-
googletag.cmd.push = function (a) {
try {
- a(); // eslint-disable-next-line no-empty
+ a();
+ // eslint-disable-next-line no-empty
} catch (ex) {}
-
return 1;
};
-
googletag.companionAds = function () {
return companionAdsService;
};
-
googletag.content = function () {
return contentService;
};
-
googletag.defineOutOfPageSlot = getNewSlot;
googletag.defineSlot = getNewSlot;
-
googletag.destroySlots = function () {
slots.clear();
slotsById.clear();
};
-
googletag.disablePublisherConsole = noopFunc;
-
googletag.display = function (arg) {
var id;
-
if (arg !== null && arg !== void 0 && arg.getSlotElementId) {
id = arg.getSlotElementId();
} else if (arg !== null && arg !== void 0 && arg.nodeType) {
@@ -10347,30 +8846,22 @@
} else {
id = String(arg);
}
-
displaySlot(slotsById.get(id));
};
-
googletag.enableServices = noopFunc;
googletag.getVersion = noopStr;
-
googletag.pubads = function () {
return pubAdsService;
};
-
googletag.pubadsReady = true;
googletag.setAdIframeTitle = noopFunc;
-
googletag.sizeMapping = function () {
return new SizeMappingBuilder();
};
-
window.googletag = googletag;
-
while (cmd.length !== 0) {
googletag.cmd.push(cmd.shift());
}
-
hit(source);
}
GoogleTagServicesGpt.names = ['googletagservices-gpt', 'ubo-googletagservices_gpt.js', 'googletagservices_gpt.js'];
@@ -10390,7 +8881,6 @@
* ||sb.scorecardresearch.com/beacon.js$script,redirect=scorecardresearch-beacon
* ```
*/
-
function ScoreCardResearchBeacon(source) {
window.COMSCORE = {
purge: function purge() {
@@ -10416,13 +8906,11 @@
* ||mc.yandex.ru/metrika/tag.js$script,redirect=metrika-yandex-tag
* ```
*/
-
function metrikaYandexTag(source) {
var asyncCallbackFromOptions = function asyncCallbackFromOptions(id, param) {
var options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};
var callback = options.callback;
var ctx = options.ctx;
-
if (typeof callback === 'function') {
callback = ctx !== undefined ? callback.bind(ctx) : callback;
setTimeout(function () {
@@ -10430,50 +8918,48 @@
});
}
};
+
/**
* https://yandex.ru/support/metrica/objects/addfileextension.html
*/
-
-
var addFileExtension = noopFunc;
+
/**
* https://yandex.ru/support/metrica/objects/extlink.html
*/
-
var extLink = asyncCallbackFromOptions;
+
/**
* https://yandex.ru/support/metrica/objects/file.html
*/
-
var file = asyncCallbackFromOptions;
+
/**
* https://yandex.ru/support/metrica/objects/get-client-id.html
* @param {Function} cb
*/
-
var getClientID = function getClientID(id, cb) {
if (!cb) {
return;
}
-
setTimeout(cb(null));
};
+
/**
* https://yandex.ru/support/metrica/objects/hit.html
*/
-
-
var hitFunc = asyncCallbackFromOptions;
+
/**
* https://yandex.ru/support/metrica/objects/notbounce.html
*/
-
var notBounce = asyncCallbackFromOptions;
+
/**
* https://yandex.ru/support/metrica/objects/params-method.html
*/
-
var params = noopFunc;
+
/**
* https://yandex.ru/support/metrica/objects/reachgoal.html
* @param {string} target
@@ -10481,25 +8967,24 @@
* @param {Function} callback
* @param {any} ctx
*/
-
var reachGoal = function reachGoal(id, target, params, callback, ctx) {
asyncCallbackFromOptions(null, null, {
callback: callback,
ctx: ctx
});
};
+
/**
* https://yandex.ru/support/metrica/objects/set-user-id.html
*/
-
-
var setUserID = noopFunc;
+
/**
* https://yandex.ru/support/metrica/objects/user-params.html
*/
+ var userParams = noopFunc;
- var userParams = noopFunc; // https://github.com/AdguardTeam/Scriptlets/issues/198
-
+ // https://github.com/AdguardTeam/Scriptlets/issues/198
var destruct = noopFunc;
var api = {
addFileExtension: addFileExtension,
@@ -10514,21 +8999,17 @@
userParams: userParams,
destruct: destruct
};
-
function ym(id, funcName) {
for (var _len = arguments.length, args = new Array(_len > 2 ? _len - 2 : 0), _key = 2; _key < _len; _key++) {
args[_key - 2] = arguments[_key];
}
-
return api[funcName] && api[funcName].apply(api, [id].concat(args));
}
-
function init(id) {
// yaCounter object should provide api
window["yaCounter".concat(id)] = api;
document.dispatchEvent(new Event("yacounter".concat(id, "inited")));
}
-
if (typeof window.ym === 'undefined') {
window.ym = ym;
ym.a = [];
@@ -10541,7 +9022,6 @@
init(id);
});
}
-
hit(source);
}
metrikaYandexTag.names = ['metrika-yandex-tag'];
@@ -10559,19 +9039,17 @@
* ||mc.yandex.ru/metrika/watch.js$script,redirect=metrika-yandex-watch
* ```
*/
-
function metrikaYandexWatch(source) {
var cbName = 'yandex_metrika_callbacks';
+
/**
* Gets callback and its context from options and call it in async way
* @param {Object} options Yandex Metrika API options
*/
-
var asyncCallbackFromOptions = function asyncCallbackFromOptions() {
var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
var callback = options.callback;
var ctx = options.ctx;
-
if (typeof callback === 'function') {
callback = ctx !== undefined ? callback.bind(ctx) : callback;
setTimeout(function () {
@@ -10579,41 +9057,34 @@
});
}
};
-
function Metrika() {} // constructor
-
-
- Metrika.counters = noopArray; // Methods without options
-
+ Metrika.counters = noopArray;
+ // Methods without options
Metrika.prototype.addFileExtension = noopFunc;
Metrika.prototype.getClientID = noopFunc;
Metrika.prototype.setUserID = noopFunc;
Metrika.prototype.userParams = noopFunc;
Metrika.prototype.params = noopFunc;
- Metrika.prototype.counters = noopArray; // Methods with options
- // The order of arguments should be kept in according to API
+ Metrika.prototype.counters = noopArray;
+ // Methods with options
+ // The order of arguments should be kept in according to API
Metrika.prototype.extLink = function (url, options) {
asyncCallbackFromOptions(options);
};
-
Metrika.prototype.file = function (url, options) {
asyncCallbackFromOptions(options);
};
-
Metrika.prototype.hit = function (url, options) {
asyncCallbackFromOptions(options);
};
-
Metrika.prototype.reachGoal = function (target, params, cb, ctx) {
asyncCallbackFromOptions({
callback: cb,
ctx: ctx
});
};
-
Metrika.prototype.notBounce = asyncCallbackFromOptions;
-
if (window.Ya) {
window.Ya.Metrika = Metrika;
} else {
@@ -10621,7 +9092,6 @@
Metrika: Metrika
};
}
-
if (window[cbName] && Array.isArray(window[cbName])) {
window[cbName].forEach(function (func) {
if (typeof func === 'function') {
@@ -10629,13 +9099,13 @@
}
});
}
-
hit(source);
}
metrikaYandexWatch.names = ['metrika-yandex-watch'];
metrikaYandexWatch.injections = [hit, noopFunc, noopArray];
/* eslint-disable func-names */
+
/**
* @redirect pardot-1.0
*
@@ -10660,7 +9130,6 @@
window.piGetParameter = noopNull;
window.piSetCookie = noopFunc;
window.piGetCookie = noopStr;
-
function piTracker() {
window.pi = {
tracker: {
@@ -10672,7 +9141,6 @@
};
window.piScriptNum += 1;
}
-
window.piResponse = noopFunc;
window.piTracker = piTracker;
piTracker();
@@ -10681,6 +9149,28 @@
Pardot.names = ['pardot-1.0'];
Pardot.injections = [hit, noopFunc, noopStr, noopNull];
+ /**
+ * @redirect prevent-bab
+ *
+ * @description
+ * Prevents BlockAdblock script from detecting an ad blocker.
+ *
+ * Mostly it is used as `scriptlet`.
+ * See [scriptlet description](../wiki/about-scriptlets.md#prevent-bab).
+ *
+ * Related UBO redirect resource:
+ * https://github.com/gorhill/uBlock/blob/a94df7f3b27080ae2dcb3b914ace39c0c294d2f6/src/web_accessible_resources/nobab.js
+ *
+ * **Example**
+ * ```
+ * /blockadblock.$script,redirect=prevent-bab
+ * ```
+ */
+ var preventBab$1 = preventBab$2;
+ preventBab$1.names = ['prevent-bab',
+ // list of prevent-bab redirect aliases
+ 'nobab.js', 'ubo-nobab.js', 'bab-defuser.js', 'ubo-bab-defuser.js', 'ubo-nobab', 'ubo-bab-defuser'];
+
/**
* @redirect amazon-apstag
*
@@ -10695,7 +9185,6 @@
* ||amazon-adsystem.com/aax2/apstag.js$script,redirect=amazon-apstag
* ```
*/
-
function AmazonApstag(source) {
var apstagWrapper = {
fetchBids: function fetchBids(a, b) {
@@ -10714,6 +9203,7 @@
AmazonApstag.injections = [hit, noopFunc];
/* eslint-disable func-names */
+
/**
* @redirect matomo
*
@@ -10728,14 +9218,11 @@
function Matomo(source) {
var Tracker = function Tracker() {};
-
Tracker.prototype.setDoNotTrack = noopFunc;
Tracker.prototype.setDomains = noopFunc;
Tracker.prototype.setCustomDimension = noopFunc;
Tracker.prototype.trackPageView = noopFunc;
-
var AsyncTracker = function AsyncTracker() {};
-
AsyncTracker.prototype.addListener = noopFunc;
var matomoWrapper = {
getTracker: function getTracker() {
@@ -10752,6 +9239,7 @@
Matomo.injections = [hit, noopFunc];
/* eslint-disable func-names */
+
/**
* @redirect fingerprintjs2
*
@@ -10767,41 +9255,38 @@
* ||the-japan-news.com/modules/js/lib/fgp/fingerprint2.js$script,redirect=fingerprintjs2
* ```
*/
-
function Fingerprintjs2(source) {
var browserId = '';
-
for (var i = 0; i < 8; i += 1) {
browserId += (Math.random() * 0x10000 + 0x1000).toString(16).slice(-4);
}
-
var Fingerprint2 = function Fingerprint2() {};
-
Fingerprint2.get = function (options, callback) {
if (!callback) {
callback = options;
}
-
setTimeout(function () {
if (callback) {
callback(browserId, []);
}
}, 1);
};
-
Fingerprint2.prototype = {
get: Fingerprint2.get
};
window.Fingerprint2 = Fingerprint2;
hit(source);
}
- Fingerprintjs2.names = ['fingerprintjs2', // redirect aliases are needed for conversion:
+ Fingerprintjs2.names = ['fingerprintjs2',
+ // redirect aliases are needed for conversion:
// prefixed for us
- 'ubo-fingerprint2.js', // original ubo name
+ 'ubo-fingerprint2.js',
+ // original ubo name
'fingerprint2.js'];
Fingerprintjs2.injections = [hit];
/* eslint-disable func-names */
+
/**
* @redirect fingerprintjs3
*
@@ -10817,20 +9302,15 @@
* ||sephora.com/js/ufe/isomorphic/thirdparty/fp.min.js$script,redirect=fingerprintjs3
* ```
*/
-
function Fingerprintjs3(source) {
var visitorId = function () {
var id = '';
-
for (var i = 0; i < 8; i += 1) {
id += (Math.random() * 0x10000 + 0x1000).toString(16).slice(-4);
}
-
return id;
}();
-
var FingerprintJS = function FingerprintJS() {};
-
FingerprintJS.prototype = {
load: function load() {
// eslint-disable-next-line compat/compat
@@ -10847,13 +9327,16 @@
window.FingerprintJS = new FingerprintJS();
hit(source);
}
- Fingerprintjs3.names = ['fingerprintjs3', // redirect aliases are needed for conversion:
+ Fingerprintjs3.names = ['fingerprintjs3',
+ // redirect aliases are needed for conversion:
// prefixed for us
- 'ubo-fingerprint3.js', // original ubo name
+ 'ubo-fingerprint3.js',
+ // original ubo name
'fingerprint3.js'];
Fingerprintjs3.injections = [hit, noopStr];
/* eslint-disable func-names */
+
/**
* @redirect gemius
*
@@ -10866,10 +9349,8 @@
* ||gapt.hit.gemius.pl/gplayer.js$script,redirect=gemius
* ```
*/
-
function Gemius(source) {
var GemiusPlayer = function GemiusPlayer() {};
-
GemiusPlayer.prototype = {
setVideoObject: noopFunc,
newProgram: noopFunc,
@@ -10895,7 +9376,6 @@
* ||bloctel.gouv.fr/assets/scripts/smarttag.js$script,redirect=ati-smarttag
* ```
*/
-
function ATInternetSmartTag(source) {
var setNoopFuncWrapper = {
set: noopFunc
@@ -10923,10 +9403,10 @@
removeProduct: {
products: setNoopFuncWrapper
}
- }; // eslint-disable-next-line new-cap, func-names
+ };
+ // eslint-disable-next-line new-cap, func-names
var tag = function tag() {};
-
tag.prototype = {
setConfig: noopFunc,
setParam: noopFunc,
@@ -10971,6 +9451,7 @@
}
}
};
+
window.ATInternet = smartTagWrapper;
hit(source);
}
@@ -10978,6 +9459,7 @@
ATInternetSmartTag.injections = [hit, noopFunc];
/* eslint-disable consistent-return, no-eval */
+
/**
* @redirect prevent-bab2
*
@@ -10994,37 +9476,32 @@
* /blockadblock.$script,redirect=prevent-bab2
* ```
*/
-
function preventBab2(source) {
// eslint-disable-next-line compat/compat
var script = document.currentScript;
-
if (script === null) {
return;
}
-
var url = script.src;
-
if (typeof url !== 'string') {
return;
}
-
var domainsStr = ['adclixx\\.net', 'adnetasia\\.com', 'adtrackers\\.net', 'bannertrack\\.net'].join('|');
var matchStr = "^https?://[\\w-]+\\.(".concat(domainsStr, ")/.");
var domainsRegex = new RegExp(matchStr);
-
if (domainsRegex.test(url) === false) {
return;
}
-
window.nH7eXzOsG = 858;
hit(source);
}
- preventBab2.names = ['prevent-bab2', // aliases are needed for matching the related scriptlet converted into our syntax
+ preventBab2.names = ['prevent-bab2',
+ // aliases are needed for matching the related scriptlet converted into our syntax
'nobab2.js'];
preventBab2.injections = [hit];
/* eslint-disable func-names, no-underscore-dangle */
+
/**
* @redirect google-ima3
*
@@ -11040,14 +9517,10 @@
function GoogleIma3(source) {
var VERSION = '3.453.0';
var ima = {};
-
var AdDisplayContainer = function AdDisplayContainer() {};
-
AdDisplayContainer.prototype.destroy = noopFunc;
AdDisplayContainer.prototype.initialize = noopFunc;
-
var ImaSdkSettings = function ImaSdkSettings() {};
-
ImaSdkSettings.CompanionBackfillMode = {
ALWAYS: 'always',
ON_MASTER_AD: 'on_master_ad'
@@ -11151,16 +9624,13 @@
INSECURE: 2
}
};
-
var EventHandler = function EventHandler() {
this.listeners = new Map();
-
this._dispatch = function (e) {
- var listeners = this.listeners.get(e.type) || []; // eslint-disable-next-line no-restricted-syntax
-
+ var listeners = this.listeners.get(e.type) || [];
+ // eslint-disable-next-line no-restricted-syntax
for (var _i = 0, _Array$from = Array.from(listeners); _i < _Array$from.length; _i++) {
var listener = _Array$from[_i];
-
try {
listener(e);
} catch (r) {
@@ -11168,25 +9638,19 @@
}
}
};
-
this.addEventListener = function (t, c) {
if (!this.listeners.has(t)) {
this.listeners.set(t, new Set());
}
-
this.listeners.get(t).add(c);
};
-
this.removeEventListener = function (t, c) {
var _this$listeners$get;
-
(_this$listeners$get = this.listeners.get(t)) === null || _this$listeners$get === void 0 ? void 0 : _this$listeners$get.delete(c);
};
};
-
var AdsManager = new EventHandler();
/* eslint-disable no-use-before-define */
-
AdsManager.volume = 1;
AdsManager.collapse = noopFunc;
AdsManager.configureAdsManager = noopFunc;
@@ -11194,57 +9658,43 @@
AdsManager.discardAdBreak = noopFunc;
AdsManager.expand = noopFunc;
AdsManager.focus = noopFunc;
-
AdsManager.getAdSkippableState = function () {
return false;
};
-
AdsManager.getCuePoints = function () {
return [0];
};
-
AdsManager.getCurrentAd = function () {
return currentAd;
};
-
AdsManager.getCurrentAdCuePoints = function () {
return [];
};
-
AdsManager.getRemainingTime = function () {
return 0;
};
-
AdsManager.getVolume = function () {
return this.volume;
};
-
AdsManager.init = noopFunc;
-
AdsManager.isCustomClickTrackingUsed = function () {
return false;
};
-
AdsManager.isCustomPlaybackUsed = function () {
return false;
};
-
AdsManager.pause = noopFunc;
AdsManager.requestNextAdBreak = noopFunc;
AdsManager.resize = noopFunc;
AdsManager.resume = noopFunc;
-
AdsManager.setVolume = function (v) {
this.volume = v;
};
-
AdsManager.skip = noopFunc;
-
AdsManager.start = function () {
// eslint-disable-next-line no-restricted-syntax
for (var _i2 = 0, _arr = [AdEvent.Type.ALL_ADS_COMPLETED, AdEvent.Type.CONTENT_RESUME_REQUESTED]; _i2 < _arr.length; _i2++) {
var type = _arr[_i2];
-
try {
this._dispatch(new ima.AdEvent(type));
} catch (e) {
@@ -11252,19 +9702,16 @@
}
}
};
-
AdsManager.stop = noopFunc;
AdsManager.updateAdsRenderingSettings = noopFunc;
/* eslint-enable no-use-before-define */
var manager = Object.create(AdsManager);
-
var AdsManagerLoadedEvent = function AdsManagerLoadedEvent(type, adsRequest, userRequestContext) {
this.type = type;
this.adsRequest = adsRequest;
this.userRequestContext = userRequestContext;
};
-
AdsManagerLoadedEvent.prototype = {
getAdsManager: function getAdsManager() {
return manager;
@@ -11273,7 +9720,6 @@
if (this.userRequestContext) {
return this.userRequestContext;
}
-
return {};
}
};
@@ -11284,22 +9730,17 @@
AdsLoader.prototype.settings = new ImaSdkSettings();
AdsLoader.prototype.contentComplete = noopFunc;
AdsLoader.prototype.destroy = noopFunc;
-
AdsLoader.prototype.getSettings = function () {
return this.settings;
};
-
AdsLoader.prototype.getVersion = function () {
return VERSION;
};
-
AdsLoader.prototype.requestAds = function (adsRequest, userRequestContext) {
var _this = this;
-
requestAnimationFrame(function () {
var ADS_MANAGER_LOADED = AdsManagerLoadedEvent.Type.ADS_MANAGER_LOADED;
var event = new ima.AdsManagerLoadedEvent(ADS_MANAGER_LOADED, adsRequest, userRequestContext);
-
_this._dispatch(event);
});
var e = new ima.AdError('adPlayError', 1205, 1205, 'The browser prevented playback initiated without user interaction.', adsRequest, userRequestContext);
@@ -11307,19 +9748,14 @@
_this._dispatch(new ima.AdErrorEvent(e));
});
};
-
var AdsRenderingSettings = noopFunc;
-
var AdsRequest = function AdsRequest() {};
-
AdsRequest.prototype = {
setAdWillAutoPlay: noopFunc,
setAdWillPlayMuted: noopFunc,
setContinuousPlayback: noopFunc
};
-
var AdPodInfo = function AdPodInfo() {};
-
AdPodInfo.prototype = {
getAdPosition: function getAdPosition() {
return 1;
@@ -11340,9 +9776,7 @@
return 1;
}
};
-
var Ad = function Ad() {};
-
Ad.prototype = {
pi: new AdPodInfo(),
getAdId: function getAdId() {
@@ -11439,9 +9873,7 @@
return true;
}
};
-
var CompanionAd = function CompanionAd() {};
-
CompanionAd.prototype = {
getAdSlotId: function getAdSlotId() {
return '';
@@ -11459,65 +9891,49 @@
return 1;
}
};
-
var AdError = function AdError(type, code, vast, message, adsRequest, userRequestContext) {
this.errorCode = code;
this.message = message;
this.type = type;
this.adsRequest = adsRequest;
this.userRequestContext = userRequestContext;
-
this.getErrorCode = function () {
return this.errorCode;
};
-
this.getInnerError = function () {};
-
this.getMessage = function () {
return this.message;
};
-
this.getType = function () {
return this.type;
};
-
this.getVastErrorCode = function () {
return this.vastErrorCode;
};
-
this.toString = function () {
return "AdError ".concat(this.errorCode, ": ").concat(this.message);
};
};
-
AdError.ErrorCode = {};
AdError.Type = {};
-
var isEngadget = function isEngadget() {
try {
// eslint-disable-next-line no-restricted-syntax
for (var _i3 = 0, _Object$values = Object.values(window.vidible._getContexts()); _i3 < _Object$values.length; _i3++) {
var _ctx$getPlayer, _ctx$getPlayer$div;
-
var ctx = _Object$values[_i3];
-
// eslint-disable-next-line no-restricted-properties
if ((_ctx$getPlayer = ctx.getPlayer()) !== null && _ctx$getPlayer !== void 0 && (_ctx$getPlayer$div = _ctx$getPlayer.div) !== null && _ctx$getPlayer$div !== void 0 && _ctx$getPlayer$div.innerHTML.includes('www.engadget.com')) {
return true;
}
}
} catch (e) {} // eslint-disable-line no-empty
-
-
return false;
};
-
var currentAd = isEngadget() ? undefined : new Ad();
-
var AdEvent = function AdEvent(type) {
this.type = type;
};
-
AdEvent.prototype = {
getAd: function getAd() {
return currentAd;
@@ -11558,38 +9974,28 @@
VOLUME_CHANGED: 'volumeChange',
VOLUME_MUTED: 'mute'
};
-
var AdErrorEvent = function AdErrorEvent(error) {
this.error = error;
this.type = 'adError';
-
this.getError = function () {
return this.error;
};
-
this.getUserRequestContext = function () {
var _this$error;
-
if ((_this$error = this.error) !== null && _this$error !== void 0 && _this$error.userRequestContext) {
return this.error.userRequestContext;
}
-
return {};
};
};
-
AdErrorEvent.Type = {
AD_ERROR: 'adError'
};
-
var CustomContentLoadedEvent = function CustomContentLoadedEvent() {};
-
CustomContentLoadedEvent.Type = {
CUSTOM_CONTENT_LOADED: 'deprecated-event'
};
-
var CompanionAdSelectionSettings = function CompanionAdSelectionSettings() {};
-
CompanionAdSelectionSettings.CreativeType = {
ALL: 'All',
FLASH: 'Flash',
@@ -11606,9 +10012,7 @@
SELECT_EXACT_MATCH: 'SelectExactMatch',
SELECT_NEAR_MATCH: 'SelectNearMatch'
};
-
var AdCuePoints = function AdCuePoints() {};
-
AdCuePoints.prototype = {
getCuePoints: function getCuePoints() {
return [];
@@ -11621,9 +10025,7 @@
}
};
var AdProgressData = noopFunc;
-
var UniversalAdIdInfo = function UniversalAdIdInfo() {};
-
Object.assign(ima, {
AdCuePoints: AdCuePoints,
AdDisplayContainer: AdDisplayContainer,
@@ -11659,18 +10061,21 @@
NORMAL: 'normal'
}
});
-
if (!window.google) {
window.google = {};
}
-
window.google.ima = ima;
hit(source);
}
- GoogleIma3.names = ['google-ima3'];
+ GoogleIma3.names = ['google-ima3',
+ // prefixed name
+ 'ubo-google-ima.js',
+ // original ubo name
+ 'google-ima.js'];
GoogleIma3.injections = [hit, noopFunc, logMessage];
/* eslint-disable func-names, no-underscore-dangle */
+
/**
* @redirect didomi-loader
*
@@ -11683,26 +10088,19 @@
* ||sdk.privacy-center.org/fbf86806f86e/loader.js$script,redirect=didomi-loader
* ```
*/
-
function DidomiLoader(source) {
function UserConsentStatusForVendorSubscribe() {}
-
UserConsentStatusForVendorSubscribe.prototype.filter = function () {
return new UserConsentStatusForVendorSubscribe();
};
-
UserConsentStatusForVendorSubscribe.prototype.subscribe = noopFunc;
-
function UserConsentStatusForVendor() {}
-
UserConsentStatusForVendor.prototype.first = function () {
return new UserConsentStatusForVendorSubscribe();
};
-
UserConsentStatusForVendor.prototype.filter = function () {
return new UserConsentStatusForVendorSubscribe();
};
-
UserConsentStatusForVendor.prototype.subscribe = noopFunc;
var DidomiWrapper = {
isConsentRequired: falseFunc,
@@ -11763,16 +10161,15 @@
purpose: {
consents: []
}
- }; // https://github.com/InteractiveAdvertisingBureau/GDPR-Transparency-and-Consent-Framework/blob/master/TCFv2/IAB%20Tech%20Lab%20-%20CMP%20API%20v2.md#how-does-the-cmp-provide-the-api
+ };
+ // https://github.com/InteractiveAdvertisingBureau/GDPR-Transparency-and-Consent-Framework/blob/master/TCFv2/IAB%20Tech%20Lab%20-%20CMP%20API%20v2.md#how-does-the-cmp-provide-the-api
var __tcfapiWrapper = function __tcfapiWrapper(command, version, callback) {
if (typeof callback !== 'function' || command === 'removeEventListener') {
return;
}
-
callback(tcData, true);
};
-
window.__tcfapi = __tcfapiWrapper;
var didomiEventListenersWrapper = {
stub: true,
@@ -11785,7 +10182,6 @@
if (typeof arg !== 'function') {
return;
}
-
if (document.readyState !== 'complete') {
window.addEventListener('load', function () {
setTimeout(arg(window.Didomi));
@@ -11796,7 +10192,6 @@
}
};
window.didomiOnReady = window.didomiOnReady || didomiOnReadyWrapper;
-
if (Array.isArray(window.didomiOnReady)) {
window.didomiOnReady.forEach(function (arg) {
if (typeof arg === 'function') {
@@ -11808,13 +10203,13 @@
}
});
}
-
hit(source);
}
DidomiLoader.names = ['didomi-loader'];
DidomiLoader.injections = [hit, noopFunc, noopArray, trueFunc, falseFunc];
/* eslint-disable func-names */
+
/**
* @redirect prebid
*
@@ -11838,7 +10233,6 @@
}
}
};
-
var pbjsWrapper = {
addAdUnits: function addAdUnits() {},
adServers: {
@@ -11878,6 +10272,7 @@
Prebid.injections = [hit, noopFunc, noopStr, noopArray];
/* eslint-disable func-names */
+
/**
* @redirect prebid-ads
*
@@ -11891,7 +10286,6 @@
* ||playerdrive.me/assets/js/prebid-ads.js$script,redirect=prebid-ads
* ```
*/
-
function prebidAds(source) {
window.canRunAds = true;
window.isAdBlockActive = false;
@@ -11901,6 +10295,7 @@
prebidAds.injections = [hit];
/* eslint-disable func-names */
+
/**
* @redirect naver-wcslog
*
@@ -11958,7 +10353,6 @@
throw new TypeError("Cannot call a class as a function");
}
}
-
var classCallCheck = _classCallCheck;
function _defineProperties(target, props) {
@@ -11970,58 +10364,45 @@
Object.defineProperty(target, descriptor.key, descriptor);
}
}
-
function _createClass(Constructor, protoProps, staticProps) {
if (protoProps) _defineProperties(Constructor.prototype, protoProps);
if (staticProps) _defineProperties(Constructor, staticProps);
return Constructor;
}
-
var createClass = _createClass;
function isNothing(subject) {
return typeof subject === 'undefined' || subject === null;
}
-
function isObject(subject) {
return typeof subject === 'object' && subject !== null;
}
-
function toArray(sequence) {
if (Array.isArray(sequence)) return sequence;else if (isNothing(sequence)) return [];
return [sequence];
}
-
function extend(target, source) {
var index, length, key, sourceKeys;
-
if (source) {
sourceKeys = Object.keys(source);
-
for (index = 0, length = sourceKeys.length; index < length; index += 1) {
key = sourceKeys[index];
target[key] = source[key];
}
}
-
return target;
}
-
function repeat(string, count) {
var result = '',
- cycle;
-
+ cycle;
for (cycle = 0; cycle < count; cycle += 1) {
result += string;
}
-
return result;
}
-
function isNegativeZero(number) {
return number === 0 && Number.NEGATIVE_INFINITY === 1 / number;
}
-
var isNothing_1 = isNothing;
var isObject_1 = isObject;
var toArray_1 = toArray;
@@ -12045,8 +10426,9 @@
this.name = 'YAMLException';
this.reason = reason;
this.mark = mark;
- this.message = (this.reason || '(unknown reason)') + (this.mark ? ' ' + this.mark.toString() : ''); // Include stack trace in error object
+ this.message = (this.reason || '(unknown reason)') + (this.mark ? ' ' + this.mark.toString() : '');
+ // Include stack trace in error object
if (Error.captureStackTrace) {
// Chrome and NodeJS
Error.captureStackTrace(this, this.constructor);
@@ -12054,23 +10436,19 @@
// FF, IE 10+ and Safari 6+. Fallback for others
this.stack = new Error().stack || '';
}
- } // Inherit from Error
-
+ }
+ // Inherit from Error
YAMLException$1.prototype = Object.create(Error.prototype);
YAMLException$1.prototype.constructor = YAMLException$1;
-
YAMLException$1.prototype.toString = function toString(compact) {
var result = this.name + ': ';
result += this.reason || '(unknown reason)';
-
if (!compact && this.mark) {
result += ' ' + this.mark.toString();
}
-
return result;
};
-
var exception = YAMLException$1;
function Mark(name, buffer, position, line, column) {
@@ -12080,7 +10458,6 @@
this.line = line;
this.column = column;
}
-
Mark.prototype.getSnippet = function getSnippet(indent, maxLength) {
var head, start, tail, end, snippet;
if (!this.buffer) return null;
@@ -12088,63 +10465,48 @@
maxLength = maxLength || 75;
head = '';
start = this.position;
-
while (start > 0 && "\0\r\n\x85\u2028\u2029".indexOf(this.buffer.charAt(start - 1)) === -1) {
start -= 1;
-
if (this.position - start > maxLength / 2 - 1) {
head = ' ... ';
start += 5;
break;
}
}
-
tail = '';
end = this.position;
-
while (end < this.buffer.length && "\0\r\n\x85\u2028\u2029".indexOf(this.buffer.charAt(end)) === -1) {
end += 1;
-
if (end - this.position > maxLength / 2 - 1) {
tail = ' ... ';
end -= 5;
break;
}
}
-
snippet = this.buffer.slice(start, end);
return common.repeat(' ', indent) + head + snippet + tail + '\n' + common.repeat(' ', indent + this.position - start + head.length) + '^';
};
-
Mark.prototype.toString = function toString(compact) {
var snippet,
- where = '';
-
+ where = '';
if (this.name) {
where += 'in "' + this.name + '" ';
}
-
where += 'at line ' + (this.line + 1) + ', column ' + (this.column + 1);
-
if (!compact) {
snippet = this.getSnippet();
-
if (snippet) {
where += ':\n' + snippet;
}
}
-
return where;
};
-
var mark = Mark;
var TYPE_CONSTRUCTOR_OPTIONS = ['kind', 'resolve', 'construct', 'instanceOf', 'predicate', 'represent', 'defaultStyle', 'styleAliases'];
var YAML_NODE_KINDS = ['scalar', 'sequence', 'mapping'];
-
function compileStyleAliases(map) {
var result = {};
-
if (map !== null) {
Object.keys(map).forEach(function (style) {
map[style].forEach(function (alias) {
@@ -12152,45 +10514,38 @@
});
});
}
-
return result;
}
-
function Type$1(tag, options) {
options = options || {};
Object.keys(options).forEach(function (name) {
if (TYPE_CONSTRUCTOR_OPTIONS.indexOf(name) === -1) {
throw new exception('Unknown option "' + name + '" is met in definition of "' + tag + '" YAML type.');
}
- }); // TODO: Add tag format check.
+ });
+ // TODO: Add tag format check.
this.tag = tag;
this.kind = options['kind'] || null;
-
this.resolve = options['resolve'] || function () {
return true;
};
-
this.construct = options['construct'] || function (data) {
return data;
};
-
this.instanceOf = options['instanceOf'] || null;
this.predicate = options['predicate'] || null;
this.represent = options['represent'] || null;
this.defaultStyle = options['defaultStyle'] || null;
this.styleAliases = compileStyleAliases(options['styleAliases'] || null);
-
if (YAML_NODE_KINDS.indexOf(this.kind) === -1) {
throw new exception('Unknown kind "' + this.kind + '" is specified for "' + tag + '" YAML type.');
}
}
-
var type = Type$1;
/*eslint-disable max-len*/
-
function compileList(schema, name, result) {
var exclude = [];
schema.include.forEach(function (includedSchema) {
@@ -12208,30 +10563,24 @@
return exclude.indexOf(index) === -1;
});
}
-
- function compileMap()
- /* lists... */
- {
+ function compileMap( /* lists... */
+ ) {
var result = {
- scalar: {},
- sequence: {},
- mapping: {},
- fallback: {}
- },
- index,
- length;
-
+ scalar: {},
+ sequence: {},
+ mapping: {},
+ fallback: {}
+ },
+ index,
+ length;
function collectType(type) {
result[type.kind][type.tag] = result['fallback'][type.tag] = type;
}
-
for (index = 0, length = arguments.length; index < length; index += 1) {
arguments[index].forEach(collectType);
}
-
return result;
}
-
function Schema$1(definition) {
this.include = definition.include || [];
this.implicit = definition.implicit || [];
@@ -12245,48 +10594,38 @@
this.compiledExplicit = compileList(this, 'explicit', []);
this.compiledTypeMap = compileMap(this.compiledImplicit, this.compiledExplicit);
}
-
Schema$1.DEFAULT = null;
-
Schema$1.create = function createSchema() {
var schemas, types;
-
switch (arguments.length) {
case 1:
schemas = Schema$1.DEFAULT;
types = arguments[0];
break;
-
case 2:
schemas = arguments[0];
types = arguments[1];
break;
-
default:
throw new exception('Wrong number of arguments for Schema.create function');
}
-
schemas = common.toArray(schemas);
types = common.toArray(types);
-
if (!schemas.every(function (schema) {
return schema instanceof Schema$1;
})) {
throw new exception('Specified list of super schemas (or a single Schema object) contains a non-Schema object.');
}
-
if (!types.every(function (type$1) {
return type$1 instanceof type;
})) {
throw new exception('Specified list of YAML types (or a single Type object) contains a non-Type object.');
}
-
return new Schema$1({
include: schemas,
explicit: types
});
};
-
var schema = Schema$1;
var str = new type('tag:yaml.org,2002:str', {
@@ -12319,15 +10658,12 @@
var max = data.length;
return max === 1 && data === '~' || max === 4 && (data === 'null' || data === 'Null' || data === 'NULL');
}
-
function constructYamlNull() {
return null;
}
-
function isNull(object) {
return object === null;
}
-
var _null = new type('tag:yaml.org,2002:null', {
kind: 'scalar',
resolve: resolveYamlNull,
@@ -12355,15 +10691,12 @@
var max = data.length;
return max === 4 && (data === 'true' || data === 'True' || data === 'TRUE') || max === 5 && (data === 'false' || data === 'False' || data === 'FALSE');
}
-
function constructYamlBoolean(data) {
return data === 'true' || data === 'True' || data === 'TRUE';
}
-
function isBoolean(object) {
return Object.prototype.toString.call(object) === '[object Boolean]';
}
-
var bool = new type('tag:yaml.org,2002:bool', {
kind: 'scalar',
resolve: resolveYamlBoolean,
@@ -12384,145 +10717,114 @@
});
function isHexCode(c) {
- return 0x30
- /* 0 */
- <= c && c <= 0x39
- /* 9 */
- || 0x41
- /* A */
- <= c && c <= 0x46
- /* F */
- || 0x61
- /* a */
- <= c && c <= 0x66
- /* f */
- ;
+ return 0x30 /* 0 */ <= c && c <= 0x39 /* 9 */ || 0x41 /* A */ <= c && c <= 0x46 /* F */ || 0x61 /* a */ <= c && c <= 0x66 /* f */;
}
function isOctCode(c) {
- return 0x30
- /* 0 */
- <= c && c <= 0x37
- /* 7 */
- ;
+ return 0x30 /* 0 */ <= c && c <= 0x37 /* 7 */;
}
function isDecCode(c) {
- return 0x30
- /* 0 */
- <= c && c <= 0x39
- /* 9 */
- ;
+ return 0x30 /* 0 */ <= c && c <= 0x39 /* 9 */;
}
function resolveYamlInteger(data) {
if (data === null) return false;
var max = data.length,
- index = 0,
- hasDigits = false,
- ch;
+ index = 0,
+ hasDigits = false,
+ ch;
if (!max) return false;
- ch = data[index]; // sign
+ ch = data[index];
+ // sign
if (ch === '-' || ch === '+') {
ch = data[++index];
}
-
if (ch === '0') {
// 0
if (index + 1 === max) return true;
- ch = data[++index]; // base 2, base 8, base 16
+ ch = data[++index];
+
+ // base 2, base 8, base 16
if (ch === 'b') {
// base 2
index++;
-
for (; index < max; index++) {
ch = data[index];
if (ch === '_') continue;
if (ch !== '0' && ch !== '1') return false;
hasDigits = true;
}
-
return hasDigits && ch !== '_';
}
-
if (ch === 'x') {
// base 16
index++;
-
for (; index < max; index++) {
ch = data[index];
if (ch === '_') continue;
if (!isHexCode(data.charCodeAt(index))) return false;
hasDigits = true;
}
-
return hasDigits && ch !== '_';
- } // base 8
-
+ }
+ // base 8
for (; index < max; index++) {
ch = data[index];
if (ch === '_') continue;
if (!isOctCode(data.charCodeAt(index))) return false;
hasDigits = true;
}
-
return hasDigits && ch !== '_';
- } // base 10 (except 0) or base 60
- // value should not start with `_`;
+ }
+ // base 10 (except 0) or base 60
+ // value should not start with `_`;
if (ch === '_') return false;
-
for (; index < max; index++) {
ch = data[index];
if (ch === '_') continue;
if (ch === ':') break;
-
if (!isDecCode(data.charCodeAt(index))) {
return false;
}
-
hasDigits = true;
- } // Should have digits and should not end with `_`
-
+ }
- if (!hasDigits || ch === '_') return false; // if !base60 - done;
+ // Should have digits and should not end with `_`
+ if (!hasDigits || ch === '_') return false;
- if (ch !== ':') return true; // base60 almost not used, no needs to optimize
+ // if !base60 - done;
+ if (ch !== ':') return true;
+ // base60 almost not used, no needs to optimize
return /^(:[0-5]?[0-9])+$/.test(data.slice(index));
}
-
function constructYamlInteger(data) {
var value = data,
- sign = 1,
- ch,
- base,
- digits = [];
-
+ sign = 1,
+ ch,
+ base,
+ digits = [];
if (value.indexOf('_') !== -1) {
value = value.replace(/_/g, '');
}
-
ch = value[0];
-
if (ch === '-' || ch === '+') {
if (ch === '-') sign = -1;
value = value.slice(1);
ch = value[0];
}
-
if (value === '0') return 0;
-
if (ch === '0') {
if (value[1] === 'b') return sign * parseInt(value.slice(2), 2);
if (value[1] === 'x') return sign * parseInt(value, 16);
return sign * parseInt(value, 8);
}
-
if (value.indexOf(':') !== -1) {
value.split(':').forEach(function (v) {
digits.unshift(parseInt(v, 10));
@@ -12535,14 +10837,11 @@
});
return sign * value;
}
-
return sign * parseInt(value, 10);
}
-
function isInteger(object) {
return Object.prototype.toString.call(object) === '[object Number]' && object % 1 === 0 && !common.isNegativeZero(object);
}
-
var int = new type('tag:yaml.org,2002:int', {
kind: 'scalar',
resolve: resolveYamlInteger,
@@ -12558,7 +10857,6 @@
decimal: function decimal(obj) {
return obj.toString(10);
},
-
/* eslint-disable max-len */
hexadecimal: function hexadecimal(obj) {
return obj >= 0 ? '0x' + obj.toString(16).toUpperCase() : '-0x' + obj.toString(16).toUpperCase().slice(1);
@@ -12573,36 +10871,36 @@
}
});
- var YAML_FLOAT_PATTERN = new RegExp( // 2.5e4, 2.5 and integers
- '^(?:[-+]?(?:0|[1-9][0-9_]*)(?:\\.[0-9_]*)?(?:[eE][-+]?[0-9]+)?' + // .2e4, .2
+ var YAML_FLOAT_PATTERN = new RegExp(
+ // 2.5e4, 2.5 and integers
+ '^(?:[-+]?(?:0|[1-9][0-9_]*)(?:\\.[0-9_]*)?(?:[eE][-+]?[0-9]+)?' +
+ // .2e4, .2
// special case, seems not from spec
- '|\\.[0-9_]+(?:[eE][-+]?[0-9]+)?' + // 20:59
- '|[-+]?[0-9][0-9_]*(?::[0-5]?[0-9])+\\.[0-9_]*' + // .inf
- '|[-+]?\\.(?:inf|Inf|INF)' + // .nan
+ '|\\.[0-9_]+(?:[eE][-+]?[0-9]+)?' +
+ // 20:59
+ '|[-+]?[0-9][0-9_]*(?::[0-5]?[0-9])+\\.[0-9_]*' +
+ // .inf
+ '|[-+]?\\.(?:inf|Inf|INF)' +
+ // .nan
'|\\.(?:nan|NaN|NAN))$');
-
function resolveYamlFloat(data) {
if (data === null) return false;
-
- if (!YAML_FLOAT_PATTERN.test(data) || // Quick hack to not allow integers end with `_`
+ if (!YAML_FLOAT_PATTERN.test(data) ||
+ // Quick hack to not allow integers end with `_`
// Probably should update regexp & check speed
data[data.length - 1] === '_') {
return false;
}
-
return true;
}
-
function constructYamlFloat(data) {
var value, sign, base, digits;
value = data.replace(/_/g, '').toLowerCase();
sign = value[0] === '-' ? -1 : 1;
digits = [];
-
if ('+-'.indexOf(value[0]) >= 0) {
value = value.slice(1);
}
-
if (value === '.inf') {
return sign === 1 ? Number.POSITIVE_INFINITY : Number.NEGATIVE_INFINITY;
} else if (value === '.nan') {
@@ -12619,23 +10917,17 @@
});
return sign * value;
}
-
return sign * parseFloat(value, 10);
}
-
var SCIENTIFIC_WITHOUT_DOT = /^[-+]?[0-9]+e/;
-
function representYamlFloat(object, style) {
var res;
-
if (isNaN(object)) {
switch (style) {
case 'lowercase':
return '.nan';
-
case 'uppercase':
return '.NAN';
-
case 'camelcase':
return '.NaN';
}
@@ -12643,10 +10935,8 @@
switch (style) {
case 'lowercase':
return '.inf';
-
case 'uppercase':
return '.INF';
-
case 'camelcase':
return '.Inf';
}
@@ -12654,27 +10944,24 @@
switch (style) {
case 'lowercase':
return '-.inf';
-
case 'uppercase':
return '-.INF';
-
case 'camelcase':
return '-.Inf';
}
} else if (common.isNegativeZero(object)) {
return '-0.0';
}
+ res = object.toString(10);
- res = object.toString(10); // JS stringifier can build scientific format without dots: 5e-100,
+ // JS stringifier can build scientific format without dots: 5e-100,
// while YAML requres dot: 5.e-100. Fix it with simple hack
return SCIENTIFIC_WITHOUT_DOT.test(res) ? res.replace('e', '.e') : res;
}
-
function isFloat(object) {
return Object.prototype.toString.call(object) === '[object Number]' && (object % 1 !== 0 || common.isNegativeZero(object));
}
-
var float = new type('tag:yaml.org,2002:float', {
kind: 'scalar',
resolve: resolveYamlFloat,
@@ -12693,19 +10980,30 @@
include: [json]
});
- var YAML_DATE_REGEXP = new RegExp('^([0-9][0-9][0-9][0-9])' + // [1] year
- '-([0-9][0-9])' + // [2] month
+ var YAML_DATE_REGEXP = new RegExp('^([0-9][0-9][0-9][0-9])' +
+ // [1] year
+ '-([0-9][0-9])' +
+ // [2] month
'-([0-9][0-9])$'); // [3] day
- var YAML_TIMESTAMP_REGEXP = new RegExp('^([0-9][0-9][0-9][0-9])' + // [1] year
- '-([0-9][0-9]?)' + // [2] month
- '-([0-9][0-9]?)' + // [3] day
- '(?:[Tt]|[ \\t]+)' + // ...
- '([0-9][0-9]?)' + // [4] hour
- ':([0-9][0-9])' + // [5] minute
- ':([0-9][0-9])' + // [6] second
- '(?:\\.([0-9]*))?' + // [7] fraction
- '(?:[ \\t]*(Z|([-+])([0-9][0-9]?)' + // [8] tz [9] tz_sign [10] tz_hour
+ var YAML_TIMESTAMP_REGEXP = new RegExp('^([0-9][0-9][0-9][0-9])' +
+ // [1] year
+ '-([0-9][0-9]?)' +
+ // [2] month
+ '-([0-9][0-9]?)' +
+ // [3] day
+ '(?:[Tt]|[ \\t]+)' +
+ // ...
+ '([0-9][0-9]?)' +
+ // [4] hour
+ ':([0-9][0-9])' +
+ // [5] minute
+ ':([0-9][0-9])' +
+ // [6] second
+ '(?:\\.([0-9]*))?' +
+ // [7] fraction
+ '(?:[ \\t]*(Z|([-+])([0-9][0-9]?)' +
+ // [8] tz [9] tz_sign [10] tz_hour
'(?::([0-9][0-9]))?))?$'); // [11] tz_minute
function resolveYamlTimestamp(data) {
@@ -12714,70 +11012,62 @@
if (YAML_TIMESTAMP_REGEXP.exec(data) !== null) return true;
return false;
}
-
function constructYamlTimestamp(data) {
var match,
- year,
- month,
- day,
- hour,
- minute,
- second,
- fraction = 0,
- delta = null,
- tz_hour,
- tz_minute,
- date;
+ year,
+ month,
+ day,
+ hour,
+ minute,
+ second,
+ fraction = 0,
+ delta = null,
+ tz_hour,
+ tz_minute,
+ date;
match = YAML_DATE_REGEXP.exec(data);
if (match === null) match = YAML_TIMESTAMP_REGEXP.exec(data);
- if (match === null) throw new Error('Date resolve error'); // match: [1] year [2] month [3] day
+ if (match === null) throw new Error('Date resolve error');
+
+ // match: [1] year [2] month [3] day
year = +match[1];
month = +match[2] - 1; // JS month starts with 0
-
day = +match[3];
-
if (!match[4]) {
// no hour
return new Date(Date.UTC(year, month, day));
- } // match: [4] hour [5] minute [6] second [7] fraction
+ }
+ // match: [4] hour [5] minute [6] second [7] fraction
hour = +match[4];
minute = +match[5];
second = +match[6];
-
if (match[7]) {
fraction = match[7].slice(0, 3);
-
while (fraction.length < 3) {
// milli-seconds
fraction += '0';
}
-
fraction = +fraction;
- } // match: [8] tz [9] tz_sign [10] tz_hour [11] tz_minute
+ }
+ // match: [8] tz [9] tz_sign [10] tz_hour [11] tz_minute
if (match[9]) {
tz_hour = +match[10];
tz_minute = +(match[11] || 0);
delta = (tz_hour * 60 + tz_minute) * 60000; // delta in mili-seconds
-
if (match[9] === '-') delta = -delta;
}
-
date = new Date(Date.UTC(year, month, day, hour, minute, second, fraction));
if (delta) date.setTime(date.getTime() - delta);
return date;
}
-
- function representYamlTimestamp(object
- /*, style*/
- ) {
+ function representYamlTimestamp(object /*, style*/) {
return object.toISOString();
}
-
var timestamp = new type('tag:yaml.org,2002:timestamp', {
kind: 'scalar',
resolve: resolveYamlTimestamp,
@@ -12789,56 +11079,60 @@
function resolveYamlMerge(data) {
return data === '<<' || data === null;
}
-
var merge = new type('tag:yaml.org,2002:merge', {
kind: 'scalar',
resolve: resolveYamlMerge
});
- /*eslint-disable no-bitwise*/
+ function commonjsRequire (target) {
+ throw new Error('Could not dynamically require "' + target + '". Please configure the dynamicRequireTargets option of @rollup/plugin-commonjs appropriately for this require call to behave properly.');
+ }
+ /*eslint-disable no-bitwise*/
var NodeBuffer;
-
try {
// A trick for browserified version, to not include `Buffer` shim
var _require$1 = commonjsRequire;
NodeBuffer = _require$1('buffer').Buffer;
- } catch (__) {} // [ 64, 65, 66 ] -> [ padding, CR, LF ]
-
+ } catch (__) {}
+ // [ 64, 65, 66 ] -> [ padding, CR, LF ]
var BASE64_MAP = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=\n\r';
-
function resolveYamlBinary(data) {
if (data === null) return false;
var code,
- idx,
- bitlen = 0,
- max = data.length,
- map = BASE64_MAP; // Convert one by one.
+ idx,
+ bitlen = 0,
+ max = data.length,
+ map = BASE64_MAP;
+ // Convert one by one.
for (idx = 0; idx < max; idx++) {
- code = map.indexOf(data.charAt(idx)); // Skip CR/LF
+ code = map.indexOf(data.charAt(idx));
- if (code > 64) continue; // Fail on illegal characters
+ // Skip CR/LF
+ if (code > 64) continue;
+ // Fail on illegal characters
if (code < 0) return false;
bitlen += 6;
- } // If there are any bits left, source was corrupted
-
+ }
+ // If there are any bits left, source was corrupted
return bitlen % 8 === 0;
}
-
function constructYamlBinary(data) {
var idx,
- tailbits,
- input = data.replace(/[\r\n=]/g, ''),
- // remove CR/LF & padding to simplify scan
- max = input.length,
- map = BASE64_MAP,
- bits = 0,
- result = []; // Collect by 6*4 bits (3 bytes)
+ tailbits,
+ input = data.replace(/[\r\n=]/g, ''),
+ // remove CR/LF & padding to simplify scan
+ max = input.length,
+ map = BASE64_MAP,
+ bits = 0,
+ result = [];
+
+ // Collect by 6*4 bits (3 bytes)
for (idx = 0; idx < max; idx++) {
if (idx % 4 === 0 && idx) {
@@ -12846,13 +11140,12 @@
result.push(bits >> 8 & 0xFF);
result.push(bits & 0xFF);
}
-
bits = bits << 6 | map.indexOf(input.charAt(idx));
- } // Dump tail
+ }
+ // Dump tail
tailbits = max % 4 * 6;
-
if (tailbits === 0) {
result.push(bits >> 16 & 0xFF);
result.push(bits >> 8 & 0xFF);
@@ -12862,26 +11155,24 @@
result.push(bits >> 2 & 0xFF);
} else if (tailbits === 12) {
result.push(bits >> 4 & 0xFF);
- } // Wrap into Buffer for NodeJS and leave Array for browser
-
+ }
+ // Wrap into Buffer for NodeJS and leave Array for browser
if (NodeBuffer) {
// Support node 6.+ Buffer API when available
return NodeBuffer.from ? NodeBuffer.from(result) : new NodeBuffer(result);
}
-
return result;
}
-
- function representYamlBinary(object
- /*, style*/
- ) {
+ function representYamlBinary(object /*, style*/) {
var result = '',
- bits = 0,
- idx,
- tail,
- max = object.length,
- map = BASE64_MAP; // Convert every three bytes to 4 ASCII characters.
+ bits = 0,
+ idx,
+ tail,
+ max = object.length,
+ map = BASE64_MAP;
+
+ // Convert every three bytes to 4 ASCII characters.
for (idx = 0; idx < max; idx++) {
if (idx % 3 === 0 && idx) {
@@ -12890,13 +11181,12 @@
result += map[bits >> 6 & 0x3F];
result += map[bits & 0x3F];
}
-
bits = (bits << 8) + object[idx];
- } // Dump tail
+ }
+ // Dump tail
tail = max % 3;
-
if (tail === 0) {
result += map[bits >> 18 & 0x3F];
result += map[bits >> 12 & 0x3F];
@@ -12913,14 +11203,11 @@
result += map[64];
result += map[64];
}
-
return result;
}
-
function isBinary(object) {
return NodeBuffer && NodeBuffer.isBuffer(object);
}
-
var binary = new type('tag:yaml.org,2002:binary', {
kind: 'scalar',
resolve: resolveYamlBinary,
@@ -12931,39 +11218,32 @@
var _hasOwnProperty$3 = Object.prototype.hasOwnProperty;
var _toString$2 = Object.prototype.toString;
-
function resolveYamlOmap(data) {
if (data === null) return true;
var objectKeys = [],
- index,
- length,
- pair,
- pairKey,
- pairHasKey,
- object = data;
-
+ index,
+ length,
+ pair,
+ pairKey,
+ pairHasKey,
+ object = data;
for (index = 0, length = object.length; index < length; index += 1) {
pair = object[index];
pairHasKey = false;
if (_toString$2.call(pair) !== '[object Object]') return false;
-
for (pairKey in pair) {
if (_hasOwnProperty$3.call(pair, pairKey)) {
if (!pairHasKey) pairHasKey = true;else return false;
}
}
-
if (!pairHasKey) return false;
if (objectKeys.indexOf(pairKey) === -1) objectKeys.push(pairKey);else return false;
}
-
return true;
}
-
function constructYamlOmap(data) {
return data !== null ? data : [];
}
-
var omap = new type('tag:yaml.org,2002:omap', {
kind: 'sequence',
resolve: resolveYamlOmap,
@@ -12971,17 +11251,15 @@
});
var _toString$1 = Object.prototype.toString;
-
function resolveYamlPairs(data) {
if (data === null) return true;
var index,
- length,
- pair,
- keys,
- result,
- object = data;
+ length,
+ pair,
+ keys,
+ result,
+ object = data;
result = new Array(object.length);
-
for (index = 0, length = object.length; index < length; index += 1) {
pair = object[index];
if (_toString$1.call(pair) !== '[object Object]') return false;
@@ -12989,29 +11267,24 @@
if (keys.length !== 1) return false;
result[index] = [keys[0], pair[keys[0]]];
}
-
return true;
}
-
function constructYamlPairs(data) {
if (data === null) return [];
var index,
- length,
- pair,
- keys,
- result,
- object = data;
+ length,
+ pair,
+ keys,
+ result,
+ object = data;
result = new Array(object.length);
-
for (index = 0, length = object.length; index < length; index += 1) {
pair = object[index];
keys = Object.keys(pair);
result[index] = [keys[0], pair[keys[0]]];
}
-
return result;
}
-
var pairs = new type('tag:yaml.org,2002:pairs', {
kind: 'sequence',
resolve: resolveYamlPairs,
@@ -13019,25 +11292,20 @@
});
var _hasOwnProperty$2 = Object.prototype.hasOwnProperty;
-
function resolveYamlSet(data) {
if (data === null) return true;
var key,
- object = data;
-
+ object = data;
for (key in object) {
if (_hasOwnProperty$2.call(object, key)) {
if (object[key] !== null) return false;
}
}
-
return true;
}
-
function constructYamlSet(data) {
return data !== null ? data : {};
}
-
var set = new type('tag:yaml.org,2002:set', {
kind: 'mapping',
resolve: resolveYamlSet,
@@ -13053,20 +11321,16 @@
function resolveJavascriptUndefined() {
return true;
}
-
function constructJavascriptUndefined() {
/*eslint-disable no-undefined*/
return undefined;
}
-
function representJavascriptUndefined() {
return '';
}
-
function isUndefined(object) {
return typeof object === 'undefined';
}
-
var _undefined = new type('tag:yaml.org,2002:js/undefined', {
kind: 'scalar',
resolve: resolveJavascriptUndefined,
@@ -13079,47 +11343,41 @@
if (data === null) return false;
if (data.length === 0) return false;
var regexp = data,
- tail = /\/([gim]*)$/.exec(data),
- modifiers = ''; // if regexp starts with '/' it can have modifiers and must be properly closed
- // `/foo/gim` - modifiers tail can be maximum 3 chars
+ tail = /\/([gim]*)$/.exec(data),
+ modifiers = '';
+ // if regexp starts with '/' it can have modifiers and must be properly closed
+ // `/foo/gim` - modifiers tail can be maximum 3 chars
if (regexp[0] === '/') {
if (tail) modifiers = tail[1];
- if (modifiers.length > 3) return false; // if expression starts with /, is should be properly terminated
-
+ if (modifiers.length > 3) return false;
+ // if expression starts with /, is should be properly terminated
if (regexp[regexp.length - modifiers.length - 1] !== '/') return false;
}
-
return true;
}
-
function constructJavascriptRegExp(data) {
var regexp = data,
- tail = /\/([gim]*)$/.exec(data),
- modifiers = ''; // `/foo/gim` - tail can be maximum 4 chars
+ tail = /\/([gim]*)$/.exec(data),
+ modifiers = '';
+ // `/foo/gim` - tail can be maximum 4 chars
if (regexp[0] === '/') {
if (tail) modifiers = tail[1];
regexp = regexp.slice(1, regexp.length - modifiers.length - 1);
}
-
return new RegExp(regexp, modifiers);
}
-
- function representJavascriptRegExp(object
- /*, style*/
- ) {
+ function representJavascriptRegExp(object /*, style*/) {
var result = '/' + object.source + '/';
if (object.global) result += 'g';
if (object.multiline) result += 'm';
if (object.ignoreCase) result += 'i';
return result;
}
-
function isRegExp(object) {
return Object.prototype.toString.call(object) === '[object RegExp]';
}
-
var regexp = new type('tag:yaml.org,2002:js/regexp', {
kind: 'scalar',
resolve: resolveJavascriptRegExp,
@@ -13128,85 +11386,73 @@
represent: representJavascriptRegExp
});
- var esprima; // Browserified version does not have esprima
+ var esprima;
+
+ // Browserified version does not have esprima
//
// 1. For node.js just require module as deps
// 2. For browser try to require mudule via external AMD system.
// If not found - try to fallback to window.esprima. If not
// found too - then fail to parse.
//
-
try {
// workaround to exclude package from browserify list.
var _require = commonjsRequire;
esprima = _require('esprima');
} catch (_) {
/* eslint-disable no-redeclare */
-
/* global window */
if (typeof window !== 'undefined') esprima = window.esprima;
}
-
function resolveJavascriptFunction(data) {
if (data === null) return false;
-
try {
var source = '(' + data + ')',
- ast = esprima.parse(source, {
- range: true
- });
-
+ ast = esprima.parse(source, {
+ range: true
+ });
if (ast.type !== 'Program' || ast.body.length !== 1 || ast.body[0].type !== 'ExpressionStatement' || ast.body[0].expression.type !== 'ArrowFunctionExpression' && ast.body[0].expression.type !== 'FunctionExpression') {
return false;
}
-
return true;
} catch (err) {
return false;
}
}
-
function constructJavascriptFunction(data) {
/*jslint evil:true*/
- var source = '(' + data + ')',
- ast = esprima.parse(source, {
- range: true
- }),
- params = [],
- body;
+ var source = '(' + data + ')',
+ ast = esprima.parse(source, {
+ range: true
+ }),
+ params = [],
+ body;
if (ast.type !== 'Program' || ast.body.length !== 1 || ast.body[0].type !== 'ExpressionStatement' || ast.body[0].expression.type !== 'ArrowFunctionExpression' && ast.body[0].expression.type !== 'FunctionExpression') {
throw new Error('Failed to resolve function');
}
-
ast.body[0].expression.params.forEach(function (param) {
params.push(param.name);
});
- body = ast.body[0].expression.body.range; // Esprima's ranges include the first '{' and the last '}' characters on
- // function expressions. So cut them out.
+ body = ast.body[0].expression.body.range;
+ // Esprima's ranges include the first '{' and the last '}' characters on
+ // function expressions. So cut them out.
if (ast.body[0].expression.body.type === 'BlockStatement') {
/*eslint-disable no-new-func*/
return new Function(params, source.slice(body[0] + 1, body[1] - 1));
- } // ES6 arrow functions can omit the BlockStatement. In that case, just return
+ }
+ // ES6 arrow functions can omit the BlockStatement. In that case, just return
// the body.
-
/*eslint-disable no-new-func*/
-
-
return new Function(params, 'return ' + source.slice(body[0], body[1]));
}
-
- function representJavascriptFunction(object
- /*, style*/
- ) {
+ function representJavascriptFunction(object /*, style*/) {
return object.toString();
}
-
function isFunction(object) {
return Object.prototype.toString.call(object) === '[object Function]';
}
-
var _function = new type('tag:yaml.org,2002:js/function', {
kind: 'scalar',
resolve: resolveJavascriptFunction,
@@ -13222,7 +11468,6 @@
/*eslint-disable max-len,no-use-before-define*/
-
var _hasOwnProperty$1 = Object.prototype.hasOwnProperty;
var CONTEXT_FLOW_IN = 1;
var CONTEXT_FLOW_OUT = 2;
@@ -13236,173 +11481,74 @@
var PATTERN_FLOW_INDICATORS = /[,\[\]\{\}]/;
var PATTERN_TAG_HANDLE = /^(?:!|!!|![a-z\-]+!)$/i;
var PATTERN_TAG_URI = /^(?:!|[^,\[\]\{\}])(?:%[0-9a-f]{2}|[0-9a-z\-#;\/\?:@&=\+\$,_\.!~\*'\(\)\[\]])*$/i;
-
function _class(obj) {
return Object.prototype.toString.call(obj);
}
-
function is_EOL(c) {
- return c === 0x0A
- /* LF */
- || c === 0x0D
- /* CR */
- ;
+ return c === 0x0A /* LF */ || c === 0x0D /* CR */;
}
function is_WHITE_SPACE(c) {
- return c === 0x09
- /* Tab */
- || c === 0x20
- /* Space */
- ;
+ return c === 0x09 /* Tab */ || c === 0x20 /* Space */;
}
function is_WS_OR_EOL(c) {
- return c === 0x09
- /* Tab */
- || c === 0x20
- /* Space */
- || c === 0x0A
- /* LF */
- || c === 0x0D
- /* CR */
- ;
+ return c === 0x09 /* Tab */ || c === 0x20 /* Space */ || c === 0x0A /* LF */ || c === 0x0D /* CR */;
}
function is_FLOW_INDICATOR(c) {
- return c === 0x2C
- /* , */
- || c === 0x5B
- /* [ */
- || c === 0x5D
- /* ] */
- || c === 0x7B
- /* { */
- || c === 0x7D
- /* } */
- ;
+ return c === 0x2C /* , */ || c === 0x5B /* [ */ || c === 0x5D /* ] */ || c === 0x7B /* { */ || c === 0x7D /* } */;
}
function fromHexCode(c) {
var lc;
-
- if (0x30
- /* 0 */
- <= c && c <= 0x39
- /* 9 */
- ) {
+ if (0x30 /* 0 */ <= c && c <= 0x39 /* 9 */) {
return c - 0x30;
}
- /*eslint-disable no-bitwise*/
-
+ /*eslint-disable no-bitwise*/
lc = c | 0x20;
-
- if (0x61
- /* a */
- <= lc && lc <= 0x66
- /* f */
- ) {
+ if (0x61 /* a */ <= lc && lc <= 0x66 /* f */) {
return lc - 0x61 + 10;
}
-
return -1;
}
-
function escapedHexLen(c) {
- if (c === 0x78
- /* x */
- ) {
- return 2;
- }
-
- if (c === 0x75
- /* u */
- ) {
- return 4;
- }
-
- if (c === 0x55
- /* U */
- ) {
- return 8;
- }
-
+ if (c === 0x78 /* x */) {
+ return 2;
+ }
+ if (c === 0x75 /* u */) {
+ return 4;
+ }
+ if (c === 0x55 /* U */) {
+ return 8;
+ }
return 0;
}
-
function fromDecimalCode(c) {
- if (0x30
- /* 0 */
- <= c && c <= 0x39
- /* 9 */
- ) {
+ if (0x30 /* 0 */ <= c && c <= 0x39 /* 9 */) {
return c - 0x30;
}
-
return -1;
}
-
function simpleEscapeSequence(c) {
/* eslint-disable indent */
- return c === 0x30
- /* 0 */
- ? '\x00' : c === 0x61
- /* a */
- ? '\x07' : c === 0x62
- /* b */
- ? '\x08' : c === 0x74
- /* t */
- ? '\x09' : c === 0x09
- /* Tab */
- ? '\x09' : c === 0x6E
- /* n */
- ? '\x0A' : c === 0x76
- /* v */
- ? '\x0B' : c === 0x66
- /* f */
- ? '\x0C' : c === 0x72
- /* r */
- ? '\x0D' : c === 0x65
- /* e */
- ? '\x1B' : c === 0x20
- /* Space */
- ? ' ' : c === 0x22
- /* " */
- ? '\x22' : c === 0x2F
- /* / */
- ? '/' : c === 0x5C
- /* \ */
- ? '\x5C' : c === 0x4E
- /* N */
- ? '\x85' : c === 0x5F
- /* _ */
- ? '\xA0' : c === 0x4C
- /* L */
- ? "\u2028" : c === 0x50
- /* P */
- ? "\u2029" : '';
+ return c === 0x30 /* 0 */ ? '\x00' : c === 0x61 /* a */ ? '\x07' : c === 0x62 /* b */ ? '\x08' : c === 0x74 /* t */ ? '\x09' : c === 0x09 /* Tab */ ? '\x09' : c === 0x6E /* n */ ? '\x0A' : c === 0x76 /* v */ ? '\x0B' : c === 0x66 /* f */ ? '\x0C' : c === 0x72 /* r */ ? '\x0D' : c === 0x65 /* e */ ? '\x1B' : c === 0x20 /* Space */ ? ' ' : c === 0x22 /* " */ ? '\x22' : c === 0x2F /* / */ ? '/' : c === 0x5C /* \ */ ? '\x5C' : c === 0x4E /* N */ ? '\x85' : c === 0x5F /* _ */ ? '\xA0' : c === 0x4C /* L */ ? "\u2028" : c === 0x50 /* P */ ? "\u2029" : '';
}
-
function charFromCodepoint(c) {
if (c <= 0xFFFF) {
return String.fromCharCode(c);
- } // Encode UTF-16 surrogate pair
+ }
+ // Encode UTF-16 surrogate pair
// https://en.wikipedia.org/wiki/UTF-16#Code_points_U.2B010000_to_U.2B10FFFF
-
-
return String.fromCharCode((c - 0x010000 >> 10) + 0xD800, (c - 0x010000 & 0x03FF) + 0xDC00);
}
-
var simpleEscapeCheck = new Array(256); // integer, for fast access
-
var simpleEscapeMap = new Array(256);
-
for (var i = 0; i < 256; i++) {
simpleEscapeCheck[i] = simpleEscapeSequence(i) ? 1 : 0;
simpleEscapeMap[i] = simpleEscapeSequence(i);
}
-
function State$1(input, options) {
this.input = input;
this.filename = options['filename'] || null;
@@ -13419,6 +11565,7 @@
this.lineStart = 0;
this.lineIndent = 0;
this.documents = [];
+
/*
this.version;
this.checkLineBreaks;
@@ -13433,85 +11580,64 @@
function generateError(state, message) {
return new exception(message, new mark(state.filename, state.input, state.position, state.line, state.position - state.lineStart));
}
-
function throwError(state, message) {
throw generateError(state, message);
}
-
function throwWarning(state, message) {
if (state.onWarning) {
state.onWarning.call(null, generateError(state, message));
}
}
-
var directiveHandlers = {
YAML: function handleYamlDirective(state, name, args) {
var match, major, minor;
-
if (state.version !== null) {
throwError(state, 'duplication of %YAML directive');
}
-
if (args.length !== 1) {
throwError(state, 'YAML directive accepts exactly one argument');
}
-
match = /^([0-9]+)\.([0-9]+)$/.exec(args[0]);
-
if (match === null) {
throwError(state, 'ill-formed argument of the YAML directive');
}
-
major = parseInt(match[1], 10);
minor = parseInt(match[2], 10);
-
if (major !== 1) {
throwError(state, 'unacceptable YAML version of the document');
}
-
state.version = args[0];
state.checkLineBreaks = minor < 2;
-
if (minor !== 1 && minor !== 2) {
throwWarning(state, 'unsupported YAML version of the document');
}
},
TAG: function handleTagDirective(state, name, args) {
var handle, prefix;
-
if (args.length !== 2) {
throwError(state, 'TAG directive accepts exactly two arguments');
}
-
handle = args[0];
prefix = args[1];
-
if (!PATTERN_TAG_HANDLE.test(handle)) {
throwError(state, 'ill-formed tag handle (first argument) of the TAG directive');
}
-
if (_hasOwnProperty$1.call(state.tagMap, handle)) {
throwError(state, 'there is a previously declared suffix for "' + handle + '" tag handle');
}
-
if (!PATTERN_TAG_URI.test(prefix)) {
throwError(state, 'ill-formed tag prefix (second argument) of the TAG directive');
}
-
state.tagMap[handle] = prefix;
}
};
-
function captureSegment(state, start, end, checkJson) {
var _position, _length, _character, _result;
-
if (start < end) {
_result = state.input.slice(start, end);
-
if (checkJson) {
for (_position = 0, _length = _result.length; _position < _length; _position += 1) {
_character = _result.charCodeAt(_position);
-
if (!(_character === 0x09 || 0x20 <= _character && _character <= 0x10FFFF)) {
throwError(state, 'expected valid JSON character');
}
@@ -13519,62 +11645,51 @@
} else if (PATTERN_NON_PRINTABLE.test(_result)) {
throwError(state, 'the stream contains non-printable characters');
}
-
state.result += _result;
}
}
-
function mergeMappings(state, destination, source, overridableKeys) {
var sourceKeys, key, index, quantity;
-
if (!common.isObject(source)) {
throwError(state, 'cannot merge mappings; the provided source object is unacceptable');
}
-
sourceKeys = Object.keys(source);
-
for (index = 0, quantity = sourceKeys.length; index < quantity; index += 1) {
key = sourceKeys[index];
-
if (!_hasOwnProperty$1.call(destination, key)) {
destination[key] = source[key];
overridableKeys[key] = true;
}
}
}
-
function storeMappingPair(state, _result, overridableKeys, keyTag, keyNode, valueNode, startLine, startPos) {
- var index, quantity; // The output is a plain object here, so keys can only be strings.
+ var index, quantity;
+
+ // The output is a plain object here, so keys can only be strings.
// We need to convert keyNode to a string, but doing so can hang the process
// (deeply nested arrays that explode exponentially using aliases).
-
if (Array.isArray(keyNode)) {
keyNode = Array.prototype.slice.call(keyNode);
-
for (index = 0, quantity = keyNode.length; index < quantity; index += 1) {
if (Array.isArray(keyNode[index])) {
throwError(state, 'nested arrays are not supported inside keys');
}
-
if (typeof keyNode === 'object' && _class(keyNode[index]) === '[object Object]') {
keyNode[index] = '[object Object]';
}
}
- } // Avoid code execution in load() via toString property
+ }
+
+ // Avoid code execution in load() via toString property
// (still use its own toString for arrays, timestamps,
// and whatever user schema extensions happen to have @@toStringTag)
-
-
if (typeof keyNode === 'object' && _class(keyNode) === '[object Object]') {
keyNode = '[object Object]';
}
-
keyNode = String(keyNode);
-
if (_result === null) {
_result = {};
}
-
if (keyTag === 'tag:yaml.org,2002:merge') {
if (Array.isArray(valueNode)) {
for (index = 0, quantity = valueNode.length; index < quantity; index += 1) {
@@ -13589,70 +11704,45 @@
state.position = startPos || state.position;
throwError(state, 'duplicated mapping key');
}
-
_result[keyNode] = valueNode;
delete overridableKeys[keyNode];
}
-
return _result;
}
-
function readLineBreak(state) {
var ch;
ch = state.input.charCodeAt(state.position);
-
- if (ch === 0x0A
- /* LF */
- ) {
- state.position++;
- } else if (ch === 0x0D
- /* CR */
- ) {
+ if (ch === 0x0A /* LF */) {
+ state.position++;
+ } else if (ch === 0x0D /* CR */) {
+ state.position++;
+ if (state.input.charCodeAt(state.position) === 0x0A /* LF */) {
state.position++;
-
- if (state.input.charCodeAt(state.position) === 0x0A
- /* LF */
- ) {
- state.position++;
- }
- } else {
+ }
+ } else {
throwError(state, 'a line break is expected');
}
-
state.line += 1;
state.lineStart = state.position;
}
-
function skipSeparationSpace(state, allowComments, checkIndent) {
var lineBreaks = 0,
- ch = state.input.charCodeAt(state.position);
-
+ ch = state.input.charCodeAt(state.position);
while (ch !== 0) {
while (is_WHITE_SPACE(ch)) {
ch = state.input.charCodeAt(++state.position);
}
-
- if (allowComments && ch === 0x23
- /* # */
- ) {
- do {
- ch = state.input.charCodeAt(++state.position);
- } while (ch !== 0x0A
- /* LF */
- && ch !== 0x0D
- /* CR */
- && ch !== 0);
- }
-
+ if (allowComments && ch === 0x23 /* # */) {
+ do {
+ ch = state.input.charCodeAt(++state.position);
+ } while (ch !== 0x0A /* LF */ && ch !== 0x0D /* CR */ && ch !== 0);
+ }
if (is_EOL(ch)) {
readLineBreak(state);
ch = state.input.charCodeAt(state.position);
lineBreaks++;
state.lineIndent = 0;
-
- while (ch === 0x20
- /* Space */
- ) {
+ while (ch === 0x20 /* Space */) {
state.lineIndent++;
ch = state.input.charCodeAt(++state.position);
}
@@ -13660,36 +11750,27 @@
break;
}
}
-
if (checkIndent !== -1 && lineBreaks !== 0 && state.lineIndent < checkIndent) {
throwWarning(state, 'deficient indentation');
}
-
return lineBreaks;
}
-
function testDocumentSeparator(state) {
var _position = state.position,
- ch;
- ch = state.input.charCodeAt(_position); // Condition state.position === state.lineStart is tested
- // in parent on each call, for efficiency. No needs to test here again.
+ ch;
+ ch = state.input.charCodeAt(_position);
- if ((ch === 0x2D
- /* - */
- || ch === 0x2E
- /* . */
- ) && ch === state.input.charCodeAt(_position + 1) && ch === state.input.charCodeAt(_position + 2)) {
+ // Condition state.position === state.lineStart is tested
+ // in parent on each call, for efficiency. No needs to test here again.
+ if ((ch === 0x2D /* - */ || ch === 0x2E /* . */) && ch === state.input.charCodeAt(_position + 1) && ch === state.input.charCodeAt(_position + 2)) {
_position += 3;
ch = state.input.charCodeAt(_position);
-
if (ch === 0 || is_WS_OR_EOL(ch)) {
return true;
}
}
-
return false;
}
-
function writeFoldedLines(state, count) {
if (count === 1) {
state.result += ' ';
@@ -13697,90 +11778,50 @@
state.result += common.repeat('\n', count - 1);
}
}
-
function readPlainScalar(state, nodeIndent, withinFlowCollection) {
var preceding,
- following,
- captureStart,
- captureEnd,
- hasPendingContent,
- _line,
- _lineStart,
- _lineIndent,
- _kind = state.kind,
- _result = state.result,
- ch;
-
+ following,
+ captureStart,
+ captureEnd,
+ hasPendingContent,
+ _line,
+ _lineStart,
+ _lineIndent,
+ _kind = state.kind,
+ _result = state.result,
+ ch;
ch = state.input.charCodeAt(state.position);
-
- if (is_WS_OR_EOL(ch) || is_FLOW_INDICATOR(ch) || ch === 0x23
- /* # */
- || ch === 0x26
- /* & */
- || ch === 0x2A
- /* * */
- || ch === 0x21
- /* ! */
- || ch === 0x7C
- /* | */
- || ch === 0x3E
- /* > */
- || ch === 0x27
- /* ' */
- || ch === 0x22
- /* " */
- || ch === 0x25
- /* % */
- || ch === 0x40
- /* @ */
- || ch === 0x60
- /* ` */
- ) {
+ if (is_WS_OR_EOL(ch) || is_FLOW_INDICATOR(ch) || ch === 0x23 /* # */ || ch === 0x26 /* & */ || ch === 0x2A /* * */ || ch === 0x21 /* ! */ || ch === 0x7C /* | */ || ch === 0x3E /* > */ || ch === 0x27 /* ' */ || ch === 0x22 /* " */ || ch === 0x25 /* % */ || ch === 0x40 /* @ */ || ch === 0x60 /* ` */) {
+ return false;
+ }
+ if (ch === 0x3F /* ? */ || ch === 0x2D /* - */) {
+ following = state.input.charCodeAt(state.position + 1);
+ if (is_WS_OR_EOL(following) || withinFlowCollection && is_FLOW_INDICATOR(following)) {
return false;
}
-
- if (ch === 0x3F
- /* ? */
- || ch === 0x2D
- /* - */
- ) {
- following = state.input.charCodeAt(state.position + 1);
-
- if (is_WS_OR_EOL(following) || withinFlowCollection && is_FLOW_INDICATOR(following)) {
- return false;
- }
- }
-
+ }
state.kind = 'scalar';
state.result = '';
captureStart = captureEnd = state.position;
hasPendingContent = false;
-
while (ch !== 0) {
- if (ch === 0x3A
- /* : */
- ) {
- following = state.input.charCodeAt(state.position + 1);
-
- if (is_WS_OR_EOL(following) || withinFlowCollection && is_FLOW_INDICATOR(following)) {
- break;
- }
- } else if (ch === 0x23
- /* # */
- ) {
- preceding = state.input.charCodeAt(state.position - 1);
-
- if (is_WS_OR_EOL(preceding)) {
- break;
- }
- } else if (state.position === state.lineStart && testDocumentSeparator(state) || withinFlowCollection && is_FLOW_INDICATOR(ch)) {
+ if (ch === 0x3A /* : */) {
+ following = state.input.charCodeAt(state.position + 1);
+ if (is_WS_OR_EOL(following) || withinFlowCollection && is_FLOW_INDICATOR(following)) {
+ break;
+ }
+ } else if (ch === 0x23 /* # */) {
+ preceding = state.input.charCodeAt(state.position - 1);
+ if (is_WS_OR_EOL(preceding)) {
+ break;
+ }
+ } else if (state.position === state.lineStart && testDocumentSeparator(state) || withinFlowCollection && is_FLOW_INDICATOR(ch)) {
break;
} else if (is_EOL(ch)) {
_line = state.line;
_lineStart = state.lineStart;
_lineIndent = state.lineIndent;
skipSeparationSpace(state, false, -1);
-
if (state.lineIndent >= nodeIndent) {
hasPendingContent = true;
ch = state.input.charCodeAt(state.position);
@@ -13793,64 +11834,47 @@
break;
}
}
-
if (hasPendingContent) {
captureSegment(state, captureStart, captureEnd, false);
writeFoldedLines(state, state.line - _line);
captureStart = captureEnd = state.position;
hasPendingContent = false;
}
-
if (!is_WHITE_SPACE(ch)) {
captureEnd = state.position + 1;
}
-
ch = state.input.charCodeAt(++state.position);
}
-
captureSegment(state, captureStart, captureEnd, false);
-
if (state.result) {
return true;
}
-
state.kind = _kind;
state.result = _result;
return false;
}
-
function readSingleQuotedScalar(state, nodeIndent) {
var ch, captureStart, captureEnd;
ch = state.input.charCodeAt(state.position);
-
- if (ch !== 0x27
- /* ' */
- ) {
- return false;
- }
-
+ if (ch !== 0x27 /* ' */) {
+ return false;
+ }
state.kind = 'scalar';
state.result = '';
state.position++;
captureStart = captureEnd = state.position;
-
while ((ch = state.input.charCodeAt(state.position)) !== 0) {
- if (ch === 0x27
- /* ' */
- ) {
- captureSegment(state, captureStart, state.position, true);
- ch = state.input.charCodeAt(++state.position);
-
- if (ch === 0x27
- /* ' */
- ) {
- captureStart = state.position;
- state.position++;
- captureEnd = state.position;
- } else {
- return true;
- }
- } else if (is_EOL(ch)) {
+ if (ch === 0x27 /* ' */) {
+ captureSegment(state, captureStart, state.position, true);
+ ch = state.input.charCodeAt(++state.position);
+ if (ch === 0x27 /* ' */) {
+ captureStart = state.position;
+ state.position++;
+ captureEnd = state.position;
+ } else {
+ return true;
+ }
+ } else if (is_EOL(ch)) {
captureSegment(state, captureStart, captureEnd, true);
writeFoldedLines(state, skipSeparationSpace(state, false, nodeIndent));
captureStart = captureEnd = state.position;
@@ -13861,65 +11885,51 @@
captureEnd = state.position;
}
}
-
throwError(state, 'unexpected end of the stream within a single quoted scalar');
}
-
function readDoubleQuotedScalar(state, nodeIndent) {
var captureStart, captureEnd, hexLength, hexResult, tmp, ch;
ch = state.input.charCodeAt(state.position);
-
- if (ch !== 0x22
- /* " */
- ) {
- return false;
- }
-
+ if (ch !== 0x22 /* " */) {
+ return false;
+ }
state.kind = 'scalar';
state.result = '';
state.position++;
captureStart = captureEnd = state.position;
-
while ((ch = state.input.charCodeAt(state.position)) !== 0) {
- if (ch === 0x22
- /* " */
- ) {
- captureSegment(state, captureStart, state.position, true);
- state.position++;
- return true;
- } else if (ch === 0x5C
- /* \ */
- ) {
- captureSegment(state, captureStart, state.position, true);
- ch = state.input.charCodeAt(++state.position);
-
- if (is_EOL(ch)) {
- skipSeparationSpace(state, false, nodeIndent); // TODO: rework to inline fn with no type cast?
- } else if (ch < 256 && simpleEscapeCheck[ch]) {
- state.result += simpleEscapeMap[ch];
- state.position++;
- } else if ((tmp = escapedHexLen(ch)) > 0) {
- hexLength = tmp;
- hexResult = 0;
-
- for (; hexLength > 0; hexLength--) {
- ch = state.input.charCodeAt(++state.position);
+ if (ch === 0x22 /* " */) {
+ captureSegment(state, captureStart, state.position, true);
+ state.position++;
+ return true;
+ } else if (ch === 0x5C /* \ */) {
+ captureSegment(state, captureStart, state.position, true);
+ ch = state.input.charCodeAt(++state.position);
+ if (is_EOL(ch)) {
+ skipSeparationSpace(state, false, nodeIndent);
- if ((tmp = fromHexCode(ch)) >= 0) {
- hexResult = (hexResult << 4) + tmp;
- } else {
- throwError(state, 'expected hexadecimal character');
- }
+ // TODO: rework to inline fn with no type cast?
+ } else if (ch < 256 && simpleEscapeCheck[ch]) {
+ state.result += simpleEscapeMap[ch];
+ state.position++;
+ } else if ((tmp = escapedHexLen(ch)) > 0) {
+ hexLength = tmp;
+ hexResult = 0;
+ for (; hexLength > 0; hexLength--) {
+ ch = state.input.charCodeAt(++state.position);
+ if ((tmp = fromHexCode(ch)) >= 0) {
+ hexResult = (hexResult << 4) + tmp;
+ } else {
+ throwError(state, 'expected hexadecimal character');
}
-
- state.result += charFromCodepoint(hexResult);
- state.position++;
- } else {
- throwError(state, 'unknown escape sequence');
}
-
- captureStart = captureEnd = state.position;
- } else if (is_EOL(ch)) {
+ state.result += charFromCodepoint(hexResult);
+ state.position++;
+ } else {
+ throwError(state, 'unknown escape sequence');
+ }
+ captureStart = captureEnd = state.position;
+ } else if (is_EOL(ch)) {
captureSegment(state, captureStart, captureEnd, true);
writeFoldedLines(state, skipSeparationSpace(state, false, nodeIndent));
captureStart = captureEnd = state.position;
@@ -13930,59 +11940,43 @@
captureEnd = state.position;
}
}
-
throwError(state, 'unexpected end of the stream within a double quoted scalar');
}
-
function readFlowCollection(state, nodeIndent) {
var readNext = true,
- _line,
- _tag = state.tag,
- _result,
- _anchor = state.anchor,
- following,
- terminator,
- isPair,
- isExplicitPair,
- isMapping,
- overridableKeys = {},
- keyNode,
- keyTag,
- valueNode,
- ch;
-
+ _line,
+ _tag = state.tag,
+ _result,
+ _anchor = state.anchor,
+ following,
+ terminator,
+ isPair,
+ isExplicitPair,
+ isMapping,
+ overridableKeys = {},
+ keyNode,
+ keyTag,
+ valueNode,
+ ch;
ch = state.input.charCodeAt(state.position);
-
- if (ch === 0x5B
- /* [ */
- ) {
- terminator = 0x5D;
- /* ] */
-
- isMapping = false;
- _result = [];
- } else if (ch === 0x7B
- /* { */
- ) {
- terminator = 0x7D;
- /* } */
-
- isMapping = true;
- _result = {};
- } else {
+ if (ch === 0x5B /* [ */) {
+ terminator = 0x5D; /* ] */
+ isMapping = false;
+ _result = [];
+ } else if (ch === 0x7B /* { */) {
+ terminator = 0x7D; /* } */
+ isMapping = true;
+ _result = {};
+ } else {
return false;
}
-
if (state.anchor !== null) {
state.anchorMap[state.anchor] = _result;
}
-
ch = state.input.charCodeAt(++state.position);
-
while (ch !== 0) {
skipSeparationSpace(state, true, nodeIndent);
ch = state.input.charCodeAt(state.position);
-
if (ch === terminator) {
state.position++;
state.tag = _tag;
@@ -13993,39 +11987,29 @@
} else if (!readNext) {
throwError(state, 'missed comma between flow collection entries');
}
-
keyTag = keyNode = valueNode = null;
isPair = isExplicitPair = false;
-
- if (ch === 0x3F
- /* ? */
- ) {
- following = state.input.charCodeAt(state.position + 1);
-
- if (is_WS_OR_EOL(following)) {
- isPair = isExplicitPair = true;
- state.position++;
- skipSeparationSpace(state, true, nodeIndent);
- }
+ if (ch === 0x3F /* ? */) {
+ following = state.input.charCodeAt(state.position + 1);
+ if (is_WS_OR_EOL(following)) {
+ isPair = isExplicitPair = true;
+ state.position++;
+ skipSeparationSpace(state, true, nodeIndent);
}
-
+ }
_line = state.line;
composeNode(state, nodeIndent, CONTEXT_FLOW_IN, false, true);
keyTag = state.tag;
keyNode = state.result;
skipSeparationSpace(state, true, nodeIndent);
ch = state.input.charCodeAt(state.position);
-
- if ((isExplicitPair || state.line === _line) && ch === 0x3A
- /* : */
- ) {
- isPair = true;
- ch = state.input.charCodeAt(++state.position);
- skipSeparationSpace(state, true, nodeIndent);
- composeNode(state, nodeIndent, CONTEXT_FLOW_IN, false, true);
- valueNode = state.result;
- }
-
+ if ((isExplicitPair || state.line === _line) && ch === 0x3A /* : */) {
+ isPair = true;
+ ch = state.input.charCodeAt(++state.position);
+ skipSeparationSpace(state, true, nodeIndent);
+ composeNode(state, nodeIndent, CONTEXT_FLOW_IN, false, true);
+ valueNode = state.result;
+ }
if (isMapping) {
storeMappingPair(state, _result, overridableKeys, keyTag, keyNode, valueNode);
} else if (isPair) {
@@ -14033,67 +12017,47 @@
} else {
_result.push(keyNode);
}
-
skipSeparationSpace(state, true, nodeIndent);
ch = state.input.charCodeAt(state.position);
-
- if (ch === 0x2C
- /* , */
- ) {
- readNext = true;
- ch = state.input.charCodeAt(++state.position);
- } else {
+ if (ch === 0x2C /* , */) {
+ readNext = true;
+ ch = state.input.charCodeAt(++state.position);
+ } else {
readNext = false;
}
}
-
throwError(state, 'unexpected end of the stream within a flow collection');
}
-
function readBlockScalar(state, nodeIndent) {
var captureStart,
- folding,
- chomping = CHOMPING_CLIP,
- didReadContent = false,
- detectedIndent = false,
- textIndent = nodeIndent,
- emptyLines = 0,
- atMoreIndented = false,
- tmp,
- ch;
+ folding,
+ chomping = CHOMPING_CLIP,
+ didReadContent = false,
+ detectedIndent = false,
+ textIndent = nodeIndent,
+ emptyLines = 0,
+ atMoreIndented = false,
+ tmp,
+ ch;
ch = state.input.charCodeAt(state.position);
-
- if (ch === 0x7C
- /* | */
- ) {
- folding = false;
- } else if (ch === 0x3E
- /* > */
- ) {
- folding = true;
- } else {
+ if (ch === 0x7C /* | */) {
+ folding = false;
+ } else if (ch === 0x3E /* > */) {
+ folding = true;
+ } else {
return false;
}
-
state.kind = 'scalar';
state.result = '';
-
while (ch !== 0) {
ch = state.input.charCodeAt(++state.position);
-
- if (ch === 0x2B
- /* + */
- || ch === 0x2D
- /* - */
- ) {
- if (CHOMPING_CLIP === chomping) {
- chomping = ch === 0x2B
- /* + */
- ? CHOMPING_KEEP : CHOMPING_STRIP;
- } else {
- throwError(state, 'repeat of a chomping mode identifier');
- }
- } else if ((tmp = fromDecimalCode(ch)) >= 0) {
+ if (ch === 0x2B /* + */ || ch === 0x2D /* - */) {
+ if (CHOMPING_CLIP === chomping) {
+ chomping = ch === 0x2B /* + */ ? CHOMPING_KEEP : CHOMPING_STRIP;
+ } else {
+ throwError(state, 'repeat of a chomping mode identifier');
+ }
+ } else if ((tmp = fromDecimalCode(ch)) >= 0) {
if (tmp === 0) {
throwError(state, 'bad explicit indentation width of a block scalar; it cannot be less than one');
} else if (!detectedIndent) {
@@ -14106,43 +12070,33 @@
break;
}
}
-
if (is_WHITE_SPACE(ch)) {
do {
ch = state.input.charCodeAt(++state.position);
} while (is_WHITE_SPACE(ch));
-
- if (ch === 0x23
- /* # */
- ) {
- do {
- ch = state.input.charCodeAt(++state.position);
- } while (!is_EOL(ch) && ch !== 0);
- }
+ if (ch === 0x23 /* # */) {
+ do {
+ ch = state.input.charCodeAt(++state.position);
+ } while (!is_EOL(ch) && ch !== 0);
+ }
}
-
while (ch !== 0) {
readLineBreak(state);
state.lineIndent = 0;
ch = state.input.charCodeAt(state.position);
-
- while ((!detectedIndent || state.lineIndent < textIndent) && ch === 0x20
- /* Space */
- ) {
+ while ((!detectedIndent || state.lineIndent < textIndent) && ch === 0x20 /* Space */) {
state.lineIndent++;
ch = state.input.charCodeAt(++state.position);
}
-
if (!detectedIndent && state.lineIndent > textIndent) {
textIndent = state.lineIndent;
}
-
if (is_EOL(ch)) {
emptyLines++;
continue;
- } // End of the scalar.
-
+ }
+ // End of the scalar.
if (state.lineIndent < textIndent) {
// Perform the chomping.
if (chomping === CHOMPING_KEEP) {
@@ -14152,107 +12106,93 @@
// i.e. only if the scalar is not empty.
state.result += '\n';
}
- } // Break this `while` cycle and go to the funciton's epilogue.
-
+ }
+ // Break this `while` cycle and go to the funciton's epilogue.
break;
- } // Folded style: use fancy rules to handle line breaks.
-
+ }
+ // Folded style: use fancy rules to handle line breaks.
if (folding) {
// Lines starting with white space characters (more-indented lines) are not folded.
if (is_WHITE_SPACE(ch)) {
- atMoreIndented = true; // except for the first content line (cf. Example 8.1)
+ atMoreIndented = true;
+ // except for the first content line (cf. Example 8.1)
+ state.result += common.repeat('\n', didReadContent ? 1 + emptyLines : emptyLines);
- state.result += common.repeat('\n', didReadContent ? 1 + emptyLines : emptyLines); // End of more-indented block.
+ // End of more-indented block.
} else if (atMoreIndented) {
atMoreIndented = false;
- state.result += common.repeat('\n', emptyLines + 1); // Just one line break - perceive as the same line.
+ state.result += common.repeat('\n', emptyLines + 1);
+
+ // Just one line break - perceive as the same line.
} else if (emptyLines === 0) {
if (didReadContent) {
// i.e. only if we have already read some scalar content.
state.result += ' ';
- } // Several line breaks - perceive as different lines.
+ }
+ // Several line breaks - perceive as different lines.
} else {
state.result += common.repeat('\n', emptyLines);
- } // Literal style: just add exact number of line breaks between content lines.
+ }
+ // Literal style: just add exact number of line breaks between content lines.
} else {
// Keep all line breaks except the header line break.
state.result += common.repeat('\n', didReadContent ? 1 + emptyLines : emptyLines);
}
-
didReadContent = true;
detectedIndent = true;
emptyLines = 0;
captureStart = state.position;
-
while (!is_EOL(ch) && ch !== 0) {
ch = state.input.charCodeAt(++state.position);
}
-
captureSegment(state, captureStart, state.position, false);
}
-
return true;
}
-
function readBlockSequence(state, nodeIndent) {
var _line,
- _tag = state.tag,
- _anchor = state.anchor,
- _result = [],
- following,
- detected = false,
- ch;
-
+ _tag = state.tag,
+ _anchor = state.anchor,
+ _result = [],
+ following,
+ detected = false,
+ ch;
if (state.anchor !== null) {
state.anchorMap[state.anchor] = _result;
}
-
ch = state.input.charCodeAt(state.position);
-
while (ch !== 0) {
- if (ch !== 0x2D
- /* - */
- ) {
- break;
- }
-
+ if (ch !== 0x2D /* - */) {
+ break;
+ }
following = state.input.charCodeAt(state.position + 1);
-
if (!is_WS_OR_EOL(following)) {
break;
}
-
detected = true;
state.position++;
-
if (skipSeparationSpace(state, true, -1)) {
if (state.lineIndent <= nodeIndent) {
_result.push(null);
-
ch = state.input.charCodeAt(state.position);
continue;
}
}
-
_line = state.line;
composeNode(state, nodeIndent, CONTEXT_BLOCK_IN, false, true);
-
_result.push(state.result);
-
skipSeparationSpace(state, true, -1);
ch = state.input.charCodeAt(state.position);
-
if ((state.line === _line || state.lineIndent > nodeIndent) && ch !== 0) {
throwError(state, 'bad indentation of a sequence entry');
} else if (state.lineIndent < nodeIndent) {
break;
}
}
-
if (detected) {
state.tag = _tag;
state.anchor = _anchor;
@@ -14260,97 +12200,79 @@
state.result = _result;
return true;
}
-
return false;
}
-
function readBlockMapping(state, nodeIndent, flowIndent) {
var following,
- allowCompact,
- _line,
- _pos,
- _tag = state.tag,
- _anchor = state.anchor,
- _result = {},
- overridableKeys = {},
- keyTag = null,
- keyNode = null,
- valueNode = null,
- atExplicitKey = false,
- detected = false,
- ch;
-
+ allowCompact,
+ _line,
+ _pos,
+ _tag = state.tag,
+ _anchor = state.anchor,
+ _result = {},
+ overridableKeys = {},
+ keyTag = null,
+ keyNode = null,
+ valueNode = null,
+ atExplicitKey = false,
+ detected = false,
+ ch;
if (state.anchor !== null) {
state.anchorMap[state.anchor] = _result;
}
-
ch = state.input.charCodeAt(state.position);
-
while (ch !== 0) {
following = state.input.charCodeAt(state.position + 1);
_line = state.line; // Save the current line.
+ _pos = state.position;
- _pos = state.position; //
+ //
// Explicit notation case. There are two separate blocks:
// first for the key (denoted by "?") and second for the value (denoted by ":")
//
-
- if ((ch === 0x3F
- /* ? */
- || ch === 0x3A
- /* : */
- ) && is_WS_OR_EOL(following)) {
- if (ch === 0x3F
- /* ? */
- ) {
- if (atExplicitKey) {
- storeMappingPair(state, _result, overridableKeys, keyTag, keyNode, null);
- keyTag = keyNode = valueNode = null;
- }
-
- detected = true;
- atExplicitKey = true;
- allowCompact = true;
- } else if (atExplicitKey) {
+ if ((ch === 0x3F /* ? */ || ch === 0x3A /* : */) && is_WS_OR_EOL(following)) {
+ if (ch === 0x3F /* ? */) {
+ if (atExplicitKey) {
+ storeMappingPair(state, _result, overridableKeys, keyTag, keyNode, null);
+ keyTag = keyNode = valueNode = null;
+ }
+ detected = true;
+ atExplicitKey = true;
+ allowCompact = true;
+ } else if (atExplicitKey) {
// i.e. 0x3A/* : */ === character after the explicit key.
atExplicitKey = false;
allowCompact = true;
} else {
throwError(state, 'incomplete explicit mapping pair; a key node is missed; or followed by a non-tabulated empty line');
}
-
state.position += 1;
- ch = following; //
+ ch = following;
+
+ //
// Implicit notation case. Flow-style node as the key first, then ":", and the value.
//
} else if (composeNode(state, flowIndent, CONTEXT_FLOW_OUT, false, true)) {
if (state.line === _line) {
ch = state.input.charCodeAt(state.position);
-
while (is_WHITE_SPACE(ch)) {
ch = state.input.charCodeAt(++state.position);
}
-
- if (ch === 0x3A
- /* : */
- ) {
- ch = state.input.charCodeAt(++state.position);
-
- if (!is_WS_OR_EOL(ch)) {
- throwError(state, 'a whitespace character is expected after the key-value separator within a block mapping');
- }
-
- if (atExplicitKey) {
- storeMappingPair(state, _result, overridableKeys, keyTag, keyNode, null);
- keyTag = keyNode = valueNode = null;
- }
-
- detected = true;
- atExplicitKey = false;
- allowCompact = false;
- keyTag = state.tag;
- keyNode = state.result;
- } else if (detected) {
+ if (ch === 0x3A /* : */) {
+ ch = state.input.charCodeAt(++state.position);
+ if (!is_WS_OR_EOL(ch)) {
+ throwError(state, 'a whitespace character is expected after the key-value separator within a block mapping');
+ }
+ if (atExplicitKey) {
+ storeMappingPair(state, _result, overridableKeys, keyTag, keyNode, null);
+ keyTag = keyNode = valueNode = null;
+ }
+ detected = true;
+ atExplicitKey = false;
+ allowCompact = false;
+ keyTag = state.tag;
+ keyNode = state.result;
+ } else if (detected) {
throwError(state, 'can not read an implicit mapping pair; a colon is missed');
} else {
state.tag = _tag;
@@ -14365,12 +12287,12 @@
return true; // Keep the result of `composeNode`.
}
} else {
- break; // Reading is done. Go to the epilogue.
- } //
+ break; // Reading is done. Go to the epilogue.
+ }
+
+ //
// Common reading code for both explicit and implicit notations.
//
-
-
if (state.line === _line || state.lineIndent > nodeIndent) {
if (composeNode(state, nodeIndent, CONTEXT_BLOCK_OUT, true, allowCompact)) {
if (atExplicitKey) {
@@ -14379,84 +12301,66 @@
valueNode = state.result;
}
}
-
if (!atExplicitKey) {
storeMappingPair(state, _result, overridableKeys, keyTag, keyNode, valueNode, _line, _pos);
keyTag = keyNode = valueNode = null;
}
-
skipSeparationSpace(state, true, -1);
ch = state.input.charCodeAt(state.position);
}
-
if (state.lineIndent > nodeIndent && ch !== 0) {
throwError(state, 'bad indentation of a mapping entry');
} else if (state.lineIndent < nodeIndent) {
break;
}
- } //
+ }
+
+ //
// Epilogue.
//
- // Special case: last mapping's node contains only the key in explicit notation.
-
+ // Special case: last mapping's node contains only the key in explicit notation.
if (atExplicitKey) {
storeMappingPair(state, _result, overridableKeys, keyTag, keyNode, null);
- } // Expose the resulting mapping.
-
+ }
+ // Expose the resulting mapping.
if (detected) {
state.tag = _tag;
state.anchor = _anchor;
state.kind = 'mapping';
state.result = _result;
}
-
return detected;
}
-
function readTagProperty(state) {
var _position,
- isVerbatim = false,
- isNamed = false,
- tagHandle,
- tagName,
- ch;
-
+ isVerbatim = false,
+ isNamed = false,
+ tagHandle,
+ tagName,
+ ch;
ch = state.input.charCodeAt(state.position);
- if (ch !== 0x21
- /* ! */
- ) return false;
-
+ if (ch !== 0x21 /* ! */) return false;
if (state.tag !== null) {
throwError(state, 'duplication of a tag property');
}
-
ch = state.input.charCodeAt(++state.position);
-
- if (ch === 0x3C
- /* < */
- ) {
- isVerbatim = true;
- ch = state.input.charCodeAt(++state.position);
- } else if (ch === 0x21
- /* ! */
- ) {
- isNamed = true;
- tagHandle = '!!';
- ch = state.input.charCodeAt(++state.position);
- } else {
+ if (ch === 0x3C /* < */) {
+ isVerbatim = true;
+ ch = state.input.charCodeAt(++state.position);
+ } else if (ch === 0x21 /* ! */) {
+ isNamed = true;
+ tagHandle = '!!';
+ ch = state.input.charCodeAt(++state.position);
+ } else {
tagHandle = '!';
}
-
_position = state.position;
-
if (isVerbatim) {
do {
ch = state.input.charCodeAt(++state.position);
- } while (ch !== 0 && ch !== 0x3E
- /* > */
- );
+ } while (ch !== 0 && ch !== 0x3E /* > */);
if (state.position < state.length) {
tagName = state.input.slice(_position, state.position);
@@ -14466,37 +12370,28 @@
}
} else {
while (ch !== 0 && !is_WS_OR_EOL(ch)) {
- if (ch === 0x21
- /* ! */
- ) {
- if (!isNamed) {
- tagHandle = state.input.slice(_position - 1, state.position + 1);
-
- if (!PATTERN_TAG_HANDLE.test(tagHandle)) {
- throwError(state, 'named tag handle cannot contain such characters');
- }
-
- isNamed = true;
- _position = state.position + 1;
- } else {
- throwError(state, 'tag suffix cannot contain exclamation marks');
+ if (ch === 0x21 /* ! */) {
+ if (!isNamed) {
+ tagHandle = state.input.slice(_position - 1, state.position + 1);
+ if (!PATTERN_TAG_HANDLE.test(tagHandle)) {
+ throwError(state, 'named tag handle cannot contain such characters');
}
+ isNamed = true;
+ _position = state.position + 1;
+ } else {
+ throwError(state, 'tag suffix cannot contain exclamation marks');
}
-
+ }
ch = state.input.charCodeAt(++state.position);
}
-
tagName = state.input.slice(_position, state.position);
-
if (PATTERN_FLOW_INDICATORS.test(tagName)) {
throwError(state, 'tag suffix cannot contain flow indicator characters');
}
}
-
if (tagName && !PATTERN_TAG_URI.test(tagName)) {
throwError(state, 'tag name cannot contain such characters: ' + tagName);
}
-
if (isVerbatim) {
state.tag = tagName;
} else if (_hasOwnProperty$1.call(state.tagMap, tagHandle)) {
@@ -14508,94 +12403,70 @@
} else {
throwError(state, 'undeclared tag handle "' + tagHandle + '"');
}
-
return true;
}
-
function readAnchorProperty(state) {
var _position, ch;
-
ch = state.input.charCodeAt(state.position);
- if (ch !== 0x26
- /* & */
- ) return false;
-
+ if (ch !== 0x26 /* & */) return false;
if (state.anchor !== null) {
throwError(state, 'duplication of an anchor property');
}
-
ch = state.input.charCodeAt(++state.position);
_position = state.position;
-
while (ch !== 0 && !is_WS_OR_EOL(ch) && !is_FLOW_INDICATOR(ch)) {
ch = state.input.charCodeAt(++state.position);
}
-
if (state.position === _position) {
throwError(state, 'name of an anchor node must contain at least one character');
}
-
state.anchor = state.input.slice(_position, state.position);
return true;
}
-
function readAlias(state) {
var _position, alias, ch;
-
ch = state.input.charCodeAt(state.position);
- if (ch !== 0x2A
- /* * */
- ) return false;
+ if (ch !== 0x2A /* * */) return false;
ch = state.input.charCodeAt(++state.position);
_position = state.position;
-
while (ch !== 0 && !is_WS_OR_EOL(ch) && !is_FLOW_INDICATOR(ch)) {
ch = state.input.charCodeAt(++state.position);
}
-
if (state.position === _position) {
throwError(state, 'name of an alias node must contain at least one character');
}
-
alias = state.input.slice(_position, state.position);
-
if (!_hasOwnProperty$1.call(state.anchorMap, alias)) {
throwError(state, 'unidentified alias "' + alias + '"');
}
-
state.result = state.anchorMap[alias];
skipSeparationSpace(state, true, -1);
return true;
}
-
function composeNode(state, parentIndent, nodeContext, allowToSeek, allowCompact) {
var allowBlockStyles,
- allowBlockScalars,
- allowBlockCollections,
- indentStatus = 1,
- // 1: this>parent, 0: this=parent, -1: thisparent, 0: this=parent, -1: this parentIndent) {
indentStatus = 1;
} else if (state.lineIndent === parentIndent) {
@@ -14605,13 +12476,11 @@
}
}
}
-
if (indentStatus === 1) {
while (readTagProperty(state) || readAnchorProperty(state)) {
if (skipSeparationSpace(state, true, -1)) {
atNewLine = true;
allowBlockCollections = allowBlockStyles;
-
if (state.lineIndent > parentIndent) {
indentStatus = 1;
} else if (state.lineIndent === parentIndent) {
@@ -14624,20 +12493,16 @@
}
}
}
-
if (allowBlockCollections) {
allowBlockCollections = atNewLine || allowCompact;
}
-
if (indentStatus === 1 || CONTEXT_BLOCK_OUT === nodeContext) {
if (CONTEXT_FLOW_IN === nodeContext || CONTEXT_FLOW_OUT === nodeContext) {
flowIndent = parentIndent;
} else {
flowIndent = parentIndent + 1;
}
-
blockIndent = state.position - state.lineStart;
-
if (indentStatus === 1) {
if (allowBlockCollections && (readBlockSequence(state, blockIndent) || readBlockMapping(state, blockIndent, flowIndent)) || readFlowCollection(state, flowIndent)) {
hasContent = true;
@@ -14646,18 +12511,15 @@
hasContent = true;
} else if (readAlias(state)) {
hasContent = true;
-
if (state.tag !== null || state.anchor !== null) {
throwError(state, 'alias node should not have any properties');
}
} else if (readPlainScalar(state, flowIndent, CONTEXT_FLOW_IN === nodeContext)) {
hasContent = true;
-
if (state.tag === null) {
state.tag = '?';
}
}
-
if (state.anchor !== null) {
state.anchorMap[state.anchor] = state.result;
}
@@ -14668,7 +12530,6 @@
hasContent = allowBlockCollections && readBlockSequence(state, blockIndent);
}
}
-
if (state.tag !== null && state.tag !== '!') {
if (state.tag === '?') {
// Implicit resolving is not allowed for non-scalar types, and '?'
@@ -14680,35 +12541,28 @@
if (state.result !== null && state.kind !== 'scalar') {
throwError(state, 'unacceptable node kind for !> tag; it should be "scalar", not "' + state.kind + '"');
}
-
for (typeIndex = 0, typeQuantity = state.implicitTypes.length; typeIndex < typeQuantity; typeIndex += 1) {
type = state.implicitTypes[typeIndex];
-
if (type.resolve(state.result)) {
// `state.result` updated in resolver if matched
state.result = type.construct(state.result);
state.tag = type.tag;
-
if (state.anchor !== null) {
state.anchorMap[state.anchor] = state.result;
}
-
break;
}
}
} else if (_hasOwnProperty$1.call(state.typeMap[state.kind || 'fallback'], state.tag)) {
type = state.typeMap[state.kind || 'fallback'][state.tag];
-
if (state.result !== null && type.kind !== state.kind) {
throwError(state, 'unacceptable node kind for !<' + state.tag + '> tag; it should be "' + type.kind + '", not "' + state.kind + '"');
}
-
if (!type.resolve(state.result)) {
// `state.result` updated in resolver if matched
throwError(state, 'cannot resolve a node with !<' + state.tag + '> explicit tag');
} else {
state.result = type.construct(state.result);
-
if (state.anchor !== null) {
state.anchorMap[state.anchor] = state.result;
}
@@ -14717,220 +12571,158 @@
throwError(state, 'unknown tag !<' + state.tag + '>');
}
}
-
if (state.listener !== null) {
state.listener('close', state);
}
-
return state.tag !== null || state.anchor !== null || hasContent;
}
-
function readDocument(state) {
var documentStart = state.position,
- _position,
- directiveName,
- directiveArgs,
- hasDirectives = false,
- ch;
-
+ _position,
+ directiveName,
+ directiveArgs,
+ hasDirectives = false,
+ ch;
state.version = null;
state.checkLineBreaks = state.legacy;
state.tagMap = {};
state.anchorMap = {};
-
while ((ch = state.input.charCodeAt(state.position)) !== 0) {
skipSeparationSpace(state, true, -1);
ch = state.input.charCodeAt(state.position);
-
- if (state.lineIndent > 0 || ch !== 0x25
- /* % */
- ) {
- break;
- }
-
+ if (state.lineIndent > 0 || ch !== 0x25 /* % */) {
+ break;
+ }
hasDirectives = true;
ch = state.input.charCodeAt(++state.position);
_position = state.position;
-
while (ch !== 0 && !is_WS_OR_EOL(ch)) {
ch = state.input.charCodeAt(++state.position);
}
-
directiveName = state.input.slice(_position, state.position);
directiveArgs = [];
-
if (directiveName.length < 1) {
throwError(state, 'directive name must not be less than one character in length');
}
-
while (ch !== 0) {
while (is_WHITE_SPACE(ch)) {
ch = state.input.charCodeAt(++state.position);
}
-
- if (ch === 0x23
- /* # */
- ) {
- do {
- ch = state.input.charCodeAt(++state.position);
- } while (ch !== 0 && !is_EOL(ch));
-
- break;
- }
-
+ if (ch === 0x23 /* # */) {
+ do {
+ ch = state.input.charCodeAt(++state.position);
+ } while (ch !== 0 && !is_EOL(ch));
+ break;
+ }
if (is_EOL(ch)) break;
_position = state.position;
-
while (ch !== 0 && !is_WS_OR_EOL(ch)) {
ch = state.input.charCodeAt(++state.position);
}
-
directiveArgs.push(state.input.slice(_position, state.position));
}
-
if (ch !== 0) readLineBreak(state);
-
if (_hasOwnProperty$1.call(directiveHandlers, directiveName)) {
directiveHandlers[directiveName](state, directiveName, directiveArgs);
} else {
throwWarning(state, 'unknown document directive "' + directiveName + '"');
}
}
-
skipSeparationSpace(state, true, -1);
-
- if (state.lineIndent === 0 && state.input.charCodeAt(state.position) === 0x2D
- /* - */
- && state.input.charCodeAt(state.position + 1) === 0x2D
- /* - */
- && state.input.charCodeAt(state.position + 2) === 0x2D
- /* - */
- ) {
- state.position += 3;
- skipSeparationSpace(state, true, -1);
- } else if (hasDirectives) {
+ if (state.lineIndent === 0 && state.input.charCodeAt(state.position) === 0x2D /* - */ && state.input.charCodeAt(state.position + 1) === 0x2D /* - */ && state.input.charCodeAt(state.position + 2) === 0x2D /* - */) {
+ state.position += 3;
+ skipSeparationSpace(state, true, -1);
+ } else if (hasDirectives) {
throwError(state, 'directives end mark is expected');
}
-
composeNode(state, state.lineIndent - 1, CONTEXT_BLOCK_OUT, false, true);
skipSeparationSpace(state, true, -1);
-
if (state.checkLineBreaks && PATTERN_NON_ASCII_LINE_BREAKS.test(state.input.slice(documentStart, state.position))) {
throwWarning(state, 'non-ASCII line breaks are interpreted as content');
}
-
state.documents.push(state.result);
-
if (state.position === state.lineStart && testDocumentSeparator(state)) {
- if (state.input.charCodeAt(state.position) === 0x2E
- /* . */
- ) {
- state.position += 3;
- skipSeparationSpace(state, true, -1);
- }
-
+ if (state.input.charCodeAt(state.position) === 0x2E /* . */) {
+ state.position += 3;
+ skipSeparationSpace(state, true, -1);
+ }
return;
}
-
if (state.position < state.length - 1) {
throwError(state, 'end of the stream or a document separator is expected');
} else {
return;
}
}
-
function loadDocuments(input, options) {
input = String(input);
options = options || {};
-
if (input.length !== 0) {
// Add tailing `\n` if not exists
- if (input.charCodeAt(input.length - 1) !== 0x0A
- /* LF */
- && input.charCodeAt(input.length - 1) !== 0x0D
- /* CR */
- ) {
- input += '\n';
- } // Strip BOM
-
+ if (input.charCodeAt(input.length - 1) !== 0x0A /* LF */ && input.charCodeAt(input.length - 1) !== 0x0D /* CR */) {
+ input += '\n';
+ }
+ // Strip BOM
if (input.charCodeAt(0) === 0xFEFF) {
input = input.slice(1);
}
}
-
var state = new State$1(input, options);
var nullpos = input.indexOf('\0');
-
if (nullpos !== -1) {
state.position = nullpos;
throwError(state, 'null byte is not allowed in input');
- } // Use 0 as string terminator. That significantly simplifies bounds check.
-
+ }
+ // Use 0 as string terminator. That significantly simplifies bounds check.
state.input += '\0';
-
- while (state.input.charCodeAt(state.position) === 0x20
- /* Space */
- ) {
+ while (state.input.charCodeAt(state.position) === 0x20 /* Space */) {
state.lineIndent += 1;
state.position += 1;
}
-
while (state.position < state.length - 1) {
readDocument(state);
}
-
return state.documents;
}
-
function loadAll$1(input, iterator, options) {
if (iterator !== null && typeof iterator === 'object' && typeof options === 'undefined') {
options = iterator;
iterator = null;
}
-
var documents = loadDocuments(input, options);
-
if (typeof iterator !== 'function') {
return documents;
}
-
for (var index = 0, length = documents.length; index < length; index += 1) {
iterator(documents[index]);
}
}
-
function load$1(input, options) {
var documents = loadDocuments(input, options);
-
if (documents.length === 0) {
/*eslint-disable no-undefined*/
return undefined;
} else if (documents.length === 1) {
return documents[0];
}
-
throw new exception('expected a single document in the stream, but found more');
}
-
function safeLoadAll$1(input, iterator, options) {
if (typeof iterator === 'object' && iterator !== null && typeof options === 'undefined') {
options = iterator;
iterator = null;
}
-
return loadAll$1(input, iterator, common.extend({
schema: default_safe
}, options));
}
-
function safeLoad$1(input, options) {
return load$1(input, common.extend({
schema: default_safe
}, options));
}
-
var loadAll_1 = loadAll$1;
var load_1 = load$1;
var safeLoadAll_1 = safeLoadAll$1;
@@ -14944,80 +12736,32 @@
/*eslint-disable no-use-before-define*/
-
var _toString = Object.prototype.toString;
var _hasOwnProperty = Object.prototype.hasOwnProperty;
- var CHAR_TAB = 0x09;
- /* Tab */
-
- var CHAR_LINE_FEED = 0x0A;
- /* LF */
-
- var CHAR_CARRIAGE_RETURN = 0x0D;
- /* CR */
-
- var CHAR_SPACE = 0x20;
- /* Space */
-
- var CHAR_EXCLAMATION = 0x21;
- /* ! */
-
- var CHAR_DOUBLE_QUOTE = 0x22;
- /* " */
-
- var CHAR_SHARP = 0x23;
- /* # */
-
- var CHAR_PERCENT = 0x25;
- /* % */
-
- var CHAR_AMPERSAND = 0x26;
- /* & */
-
- var CHAR_SINGLE_QUOTE = 0x27;
- /* ' */
-
- var CHAR_ASTERISK = 0x2A;
- /* * */
-
- var CHAR_COMMA = 0x2C;
- /* , */
-
- var CHAR_MINUS = 0x2D;
- /* - */
-
- var CHAR_COLON = 0x3A;
- /* : */
-
- var CHAR_EQUALS = 0x3D;
- /* = */
-
- var CHAR_GREATER_THAN = 0x3E;
- /* > */
-
- var CHAR_QUESTION = 0x3F;
- /* ? */
-
- var CHAR_COMMERCIAL_AT = 0x40;
- /* @ */
-
- var CHAR_LEFT_SQUARE_BRACKET = 0x5B;
- /* [ */
-
- var CHAR_RIGHT_SQUARE_BRACKET = 0x5D;
- /* ] */
-
- var CHAR_GRAVE_ACCENT = 0x60;
- /* ` */
-
- var CHAR_LEFT_CURLY_BRACKET = 0x7B;
- /* { */
-
- var CHAR_VERTICAL_LINE = 0x7C;
- /* | */
-
- var CHAR_RIGHT_CURLY_BRACKET = 0x7D;
- /* } */
+ var CHAR_TAB = 0x09; /* Tab */
+ var CHAR_LINE_FEED = 0x0A; /* LF */
+ var CHAR_CARRIAGE_RETURN = 0x0D; /* CR */
+ var CHAR_SPACE = 0x20; /* Space */
+ var CHAR_EXCLAMATION = 0x21; /* ! */
+ var CHAR_DOUBLE_QUOTE = 0x22; /* " */
+ var CHAR_SHARP = 0x23; /* # */
+ var CHAR_PERCENT = 0x25; /* % */
+ var CHAR_AMPERSAND = 0x26; /* & */
+ var CHAR_SINGLE_QUOTE = 0x27; /* ' */
+ var CHAR_ASTERISK = 0x2A; /* * */
+ var CHAR_COMMA = 0x2C; /* , */
+ var CHAR_MINUS = 0x2D; /* - */
+ var CHAR_COLON = 0x3A; /* : */
+ var CHAR_EQUALS = 0x3D; /* = */
+ var CHAR_GREATER_THAN = 0x3E; /* > */
+ var CHAR_QUESTION = 0x3F; /* ? */
+ var CHAR_COMMERCIAL_AT = 0x40; /* @ */
+ var CHAR_LEFT_SQUARE_BRACKET = 0x5B; /* [ */
+ var CHAR_RIGHT_SQUARE_BRACKET = 0x5D; /* ] */
+ var CHAR_GRAVE_ACCENT = 0x60; /* ` */
+ var CHAR_LEFT_CURLY_BRACKET = 0x7B; /* { */
+ var CHAR_VERTICAL_LINE = 0x7C; /* | */
+ var CHAR_RIGHT_CURLY_BRACKET = 0x7D; /* } */
var ESCAPE_SEQUENCES = {};
ESCAPE_SEQUENCES[0x00] = '\\0';
@@ -15036,37 +12780,28 @@
ESCAPE_SEQUENCES[0x2028] = '\\L';
ESCAPE_SEQUENCES[0x2029] = '\\P';
var DEPRECATED_BOOLEANS_SYNTAX = ['y', 'Y', 'yes', 'Yes', 'YES', 'on', 'On', 'ON', 'n', 'N', 'no', 'No', 'NO', 'off', 'Off', 'OFF'];
-
function compileStyleMap(schema, map) {
var result, keys, index, length, tag, style, type;
if (map === null) return {};
result = {};
keys = Object.keys(map);
-
for (index = 0, length = keys.length; index < length; index += 1) {
tag = keys[index];
style = String(map[tag]);
-
if (tag.slice(0, 2) === '!!') {
tag = 'tag:yaml.org,2002:' + tag.slice(2);
}
-
type = schema.compiledTypeMap['fallback'][tag];
-
if (type && _hasOwnProperty.call(type.styleAliases, style)) {
style = type.styleAliases[style];
}
-
result[tag] = style;
}
-
return result;
}
-
function encodeHex(character) {
var string, handle, length;
string = character.toString(16).toUpperCase();
-
if (character <= 0xFF) {
handle = 'x';
length = 2;
@@ -15079,10 +12814,8 @@
} else {
throw new exception('code point within a string may not be greater than 0xFFFFFFFF');
}
-
return '\\' + handle + common.repeat('0', length - string.length) + string;
}
-
function State(options) {
this.schema = options['schema'] || default_full;
this.indent = Math.max(1, options['indent'] || 2);
@@ -15101,20 +12834,18 @@
this.result = '';
this.duplicates = [];
this.usedDuplicates = null;
- } // Indents every line in a string. Empty lines (\n only) are not indented.
-
+ }
+ // Indents every line in a string. Empty lines (\n only) are not indented.
function indentString(string, spaces) {
var ind = common.repeat(' ', spaces),
- position = 0,
- next = -1,
- result = '',
- line,
- length = string.length;
-
+ position = 0,
+ next = -1,
+ result = '',
+ line,
+ length = string.length;
while (position < length) {
next = string.indexOf('\n', position);
-
if (next === -1) {
line = string.slice(position);
position = length;
@@ -15122,120 +12853,112 @@
line = string.slice(position, next + 1);
position = next + 1;
}
-
if (line.length && line !== '\n') result += ind;
result += line;
}
-
return result;
}
-
function generateNextLine(state, level) {
return '\n' + common.repeat(' ', state.indent * level);
}
-
function testImplicitResolving(state, str) {
var index, length, type;
-
for (index = 0, length = state.implicitTypes.length; index < length; index += 1) {
type = state.implicitTypes[index];
-
if (type.resolve(str)) {
return true;
}
}
-
return false;
- } // [33] s-white ::= s-space | s-tab
-
+ }
+ // [33] s-white ::= s-space | s-tab
function isWhitespace(c) {
return c === CHAR_SPACE || c === CHAR_TAB;
- } // Returns true if the character can be printed without escaping.
+ }
+
+ // Returns true if the character can be printed without escaping.
// From YAML 1.2: "any allowed characters known to be non-printable
// should also be escaped. [However,] This isn’t mandatory"
// Derived from nb-char - \t - #x85 - #xA0 - #x2028 - #x2029.
-
-
function isPrintable(c) {
- return 0x00020 <= c && c <= 0x00007E || 0x000A1 <= c && c <= 0x00D7FF && c !== 0x2028 && c !== 0x2029 || 0x0E000 <= c && c <= 0x00FFFD && c !== 0xFEFF
- /* BOM */
- || 0x10000 <= c && c <= 0x10FFFF;
- } // [34] ns-char ::= nb-char - s-white
+ return 0x00020 <= c && c <= 0x00007E || 0x000A1 <= c && c <= 0x00D7FF && c !== 0x2028 && c !== 0x2029 || 0x0E000 <= c && c <= 0x00FFFD && c !== 0xFEFF /* BOM */ || 0x10000 <= c && c <= 0x10FFFF;
+ }
+
+ // [34] ns-char ::= nb-char - s-white
// [27] nb-char ::= c-printable - b-char - c-byte-order-mark
// [26] b-char ::= b-line-feed | b-carriage-return
// [24] b-line-feed ::= #xA /* LF */
// [25] b-carriage-return ::= #xD /* CR */
// [3] c-byte-order-mark ::= #xFEFF
-
-
function isNsChar(c) {
- return isPrintable(c) && !isWhitespace(c) // byte-order-mark
- && c !== 0xFEFF // b-char
+ return isPrintable(c) && !isWhitespace(c)
+ // byte-order-mark
+ && c !== 0xFEFF
+ // b-char
&& c !== CHAR_CARRIAGE_RETURN && c !== CHAR_LINE_FEED;
- } // Simplified test for values allowed after the first character in plain style.
-
+ }
+ // Simplified test for values allowed after the first character in plain style.
function isPlainSafe(c, prev) {
// Uses a subset of nb-char - c-flow-indicator - ":" - "#"
// where nb-char ::= c-printable - b-char - c-byte-order-mark.
- return isPrintable(c) && c !== 0xFEFF // - c-flow-indicator
- && c !== CHAR_COMMA && c !== CHAR_LEFT_SQUARE_BRACKET && c !== CHAR_RIGHT_SQUARE_BRACKET && c !== CHAR_LEFT_CURLY_BRACKET && c !== CHAR_RIGHT_CURLY_BRACKET // - ":" - "#"
+ return isPrintable(c) && c !== 0xFEFF
+ // - c-flow-indicator
+ && c !== CHAR_COMMA && c !== CHAR_LEFT_SQUARE_BRACKET && c !== CHAR_RIGHT_SQUARE_BRACKET && c !== CHAR_LEFT_CURLY_BRACKET && c !== CHAR_RIGHT_CURLY_BRACKET
+ // - ":" - "#"
// /* An ns-char preceding */ "#"
&& c !== CHAR_COLON && (c !== CHAR_SHARP || prev && isNsChar(prev));
- } // Simplified test for values allowed as the first character in plain style.
-
+ }
+ // Simplified test for values allowed as the first character in plain style.
function isPlainSafeFirst(c) {
// Uses a subset of ns-char - c-indicator
// where ns-char = nb-char - s-white.
return isPrintable(c) && c !== 0xFEFF && !isWhitespace(c) // - s-white
// - (c-indicator ::=
// “-” | “?” | “:” | “,” | “[” | “]” | “{” | “}”
- && c !== CHAR_MINUS && c !== CHAR_QUESTION && c !== CHAR_COLON && c !== CHAR_COMMA && c !== CHAR_LEFT_SQUARE_BRACKET && c !== CHAR_RIGHT_SQUARE_BRACKET && c !== CHAR_LEFT_CURLY_BRACKET && c !== CHAR_RIGHT_CURLY_BRACKET // | “#” | “&” | “*” | “!” | “|” | “=” | “>” | “'” | “"”
- && c !== CHAR_SHARP && c !== CHAR_AMPERSAND && c !== CHAR_ASTERISK && c !== CHAR_EXCLAMATION && c !== CHAR_VERTICAL_LINE && c !== CHAR_EQUALS && c !== CHAR_GREATER_THAN && c !== CHAR_SINGLE_QUOTE && c !== CHAR_DOUBLE_QUOTE // | “%” | “@” | “`”)
+ && c !== CHAR_MINUS && c !== CHAR_QUESTION && c !== CHAR_COLON && c !== CHAR_COMMA && c !== CHAR_LEFT_SQUARE_BRACKET && c !== CHAR_RIGHT_SQUARE_BRACKET && c !== CHAR_LEFT_CURLY_BRACKET && c !== CHAR_RIGHT_CURLY_BRACKET
+ // | “#” | “&” | “*” | “!” | “|” | “=” | “>” | “'” | “"”
+ && c !== CHAR_SHARP && c !== CHAR_AMPERSAND && c !== CHAR_ASTERISK && c !== CHAR_EXCLAMATION && c !== CHAR_VERTICAL_LINE && c !== CHAR_EQUALS && c !== CHAR_GREATER_THAN && c !== CHAR_SINGLE_QUOTE && c !== CHAR_DOUBLE_QUOTE
+ // | “%” | “@” | “`”)
&& c !== CHAR_PERCENT && c !== CHAR_COMMERCIAL_AT && c !== CHAR_GRAVE_ACCENT;
- } // Determines whether block indentation indicator is required.
-
+ }
+ // Determines whether block indentation indicator is required.
function needIndentIndicator(string) {
var leadingSpaceRe = /^\n* /;
return leadingSpaceRe.test(string);
}
-
var STYLE_PLAIN = 1,
- STYLE_SINGLE = 2,
- STYLE_LITERAL = 3,
- STYLE_FOLDED = 4,
- STYLE_DOUBLE = 5; // Determines which scalar styles are possible and returns the preferred style.
+ STYLE_SINGLE = 2,
+ STYLE_LITERAL = 3,
+ STYLE_FOLDED = 4,
+ STYLE_DOUBLE = 5;
+
+ // Determines which scalar styles are possible and returns the preferred style.
// lineWidth = -1 => no limit.
// Pre-conditions: str.length > 0.
// Post-conditions:
// STYLE_PLAIN or STYLE_SINGLE => no \n are in the string.
// STYLE_LITERAL => no lines are suitable for folding (or lineWidth is -1).
// STYLE_FOLDED => a line > lineWidth and can be folded (and lineWidth != -1).
-
function chooseScalarStyle(string, singleLineOnly, indentPerLevel, lineWidth, testAmbiguousType) {
var i;
var char, prev_char;
var hasLineBreak = false;
var hasFoldableLine = false; // only checked if shouldTrackWidth
-
var shouldTrackWidth = lineWidth !== -1;
var previousLineBreak = -1; // count the first line correctly
-
var plain = isPlainSafeFirst(string.charCodeAt(0)) && !isWhitespace(string.charCodeAt(string.length - 1));
-
if (singleLineOnly) {
// Case: no block styles.
// Check for disallowed characters to rule out plain and single.
for (i = 0; i < string.length; i++) {
char = string.charCodeAt(i);
-
if (!isPrintable(char)) {
return STYLE_DOUBLE;
}
-
prev_char = i > 0 ? string.charCodeAt(i - 1) : null;
plain = plain && isPlainSafe(char, prev_char);
}
@@ -15243,62 +12966,55 @@
// Case: block styles permitted.
for (i = 0; i < string.length; i++) {
char = string.charCodeAt(i);
-
if (char === CHAR_LINE_FEED) {
- hasLineBreak = true; // Check if any line can be folded.
-
+ hasLineBreak = true;
+ // Check if any line can be folded.
if (shouldTrackWidth) {
- hasFoldableLine = hasFoldableLine || // Foldable line = too long, and not more-indented.
+ hasFoldableLine = hasFoldableLine ||
+ // Foldable line = too long, and not more-indented.
i - previousLineBreak - 1 > lineWidth && string[previousLineBreak + 1] !== ' ';
previousLineBreak = i;
}
} else if (!isPrintable(char)) {
return STYLE_DOUBLE;
}
-
prev_char = i > 0 ? string.charCodeAt(i - 1) : null;
plain = plain && isPlainSafe(char, prev_char);
- } // in case the end is missing a \n
-
-
+ }
+ // in case the end is missing a \n
hasFoldableLine = hasFoldableLine || shouldTrackWidth && i - previousLineBreak - 1 > lineWidth && string[previousLineBreak + 1] !== ' ';
- } // Although every style can represent \n without escaping, prefer block styles
+ }
+ // Although every style can represent \n without escaping, prefer block styles
// for multiline, since they're more readable and they don't add empty lines.
// Also prefer folding a super-long line.
-
-
if (!hasLineBreak && !hasFoldableLine) {
// Strings interpretable as another type have to be quoted;
// e.g. the string 'true' vs. the boolean true.
return plain && !testAmbiguousType(string) ? STYLE_PLAIN : STYLE_SINGLE;
- } // Edge case: block indentation indicator can only have one digit.
-
-
+ }
+ // Edge case: block indentation indicator can only have one digit.
if (indentPerLevel > 9 && needIndentIndicator(string)) {
return STYLE_DOUBLE;
- } // At this point we know block styles are valid.
+ }
+ // At this point we know block styles are valid.
// Prefer literal style unless we want to fold.
-
-
return hasFoldableLine ? STYLE_FOLDED : STYLE_LITERAL;
- } // Note: line breaking/folding is implemented for only the folded style.
+ }
+
+ // Note: line breaking/folding is implemented for only the folded style.
// NB. We drop the last trailing newline (if any) of a returned block scalar
// since the dumper adds its own newline. This always works:
// • No ending newline => unaffected; already using strip "-" chomping.
// • Ending newline => removed then restored.
// Importantly, this keeps the "+" chomp indicator from gaining an extra line.
-
-
function writeScalar(state, string, level, iskey) {
state.dump = function () {
if (string.length === 0) {
return "''";
}
-
if (!state.noCompatMode && DEPRECATED_BOOLEANS_SYNTAX.indexOf(string) !== -1) {
return "'" + string + "'";
}
-
var indent = state.indent * Math.max(1, level); // no 0-indent scalars
// As indentation gets deeper, let the width decrease monotonically
// to the lower bound min(state.lineWidth, 40).
@@ -15307,171 +13023,154 @@
// state.lineWidth > 40 + state.indent: width decreases until the lower bound.
// This behaves better than a constant minimum width which disallows narrower options,
// or an indent threshold which causes the width to suddenly increase.
+ var lineWidth = state.lineWidth === -1 ? -1 : Math.max(Math.min(state.lineWidth, 40), state.lineWidth - indent);
- var lineWidth = state.lineWidth === -1 ? -1 : Math.max(Math.min(state.lineWidth, 40), state.lineWidth - indent); // Without knowing if keys are implicit/explicit, assume implicit for safety.
-
- var singleLineOnly = iskey // No block styles in flow mode.
+ // Without knowing if keys are implicit/explicit, assume implicit for safety.
+ var singleLineOnly = iskey
+ // No block styles in flow mode.
|| state.flowLevel > -1 && level >= state.flowLevel;
-
function testAmbiguity(string) {
return testImplicitResolving(state, string);
}
-
switch (chooseScalarStyle(string, singleLineOnly, state.indent, lineWidth, testAmbiguity)) {
case STYLE_PLAIN:
return string;
-
case STYLE_SINGLE:
return "'" + string.replace(/'/g, "''") + "'";
-
case STYLE_LITERAL:
return '|' + blockHeader(string, state.indent) + dropEndingNewline(indentString(string, indent));
-
case STYLE_FOLDED:
return '>' + blockHeader(string, state.indent) + dropEndingNewline(indentString(foldString(string, lineWidth), indent));
-
case STYLE_DOUBLE:
return '"' + escapeString(string) + '"';
-
default:
throw new exception('impossible error: invalid scalar style');
}
}();
- } // Pre-conditions: string is valid for a block scalar, 1 <= indentPerLevel <= 9.
-
+ }
+ // Pre-conditions: string is valid for a block scalar, 1 <= indentPerLevel <= 9.
function blockHeader(string, indentPerLevel) {
- var indentIndicator = needIndentIndicator(string) ? String(indentPerLevel) : ''; // note the special case: the string '\n' counts as a "trailing" empty line.
+ var indentIndicator = needIndentIndicator(string) ? String(indentPerLevel) : '';
+ // note the special case: the string '\n' counts as a "trailing" empty line.
var clip = string[string.length - 1] === '\n';
var keep = clip && (string[string.length - 2] === '\n' || string === '\n');
var chomp = keep ? '+' : clip ? '' : '-';
return indentIndicator + chomp + '\n';
- } // (See the note for writeScalar.)
-
+ }
+ // (See the note for writeScalar.)
function dropEndingNewline(string) {
return string[string.length - 1] === '\n' ? string.slice(0, -1) : string;
- } // Note: a long line without a suitable break point will exceed the width limit.
- // Pre-conditions: every char in str isPrintable, str.length > 0, width > 0.
-
+ }
+ // Note: a long line without a suitable break point will exceed the width limit.
+ // Pre-conditions: every char in str isPrintable, str.length > 0, width > 0.
function foldString(string, width) {
// In folded style, $k$ consecutive newlines output as $k+1$ newlines—
// unless they're before or after a more-indented line, or at the very
// beginning or end, in which case $k$ maps to $k$.
// Therefore, parse each chunk as newline(s) followed by a content line.
- var lineRe = /(\n+)([^\n]*)/g; // first line (possibly an empty line)
+ var lineRe = /(\n+)([^\n]*)/g;
+ // first line (possibly an empty line)
var result = function () {
var nextLF = string.indexOf('\n');
nextLF = nextLF !== -1 ? nextLF : string.length;
lineRe.lastIndex = nextLF;
return foldLine(string.slice(0, nextLF), width);
- }(); // If we haven't reached the first content line yet, don't add an extra \n.
-
-
+ }();
+ // If we haven't reached the first content line yet, don't add an extra \n.
var prevMoreIndented = string[0] === '\n' || string[0] === ' ';
- var moreIndented; // rest of the lines
+ var moreIndented;
+ // rest of the lines
var match;
-
while (match = lineRe.exec(string)) {
var prefix = match[1],
- line = match[2];
+ line = match[2];
moreIndented = line[0] === ' ';
result += prefix + (!prevMoreIndented && !moreIndented && line !== '' ? '\n' : '') + foldLine(line, width);
prevMoreIndented = moreIndented;
}
-
return result;
- } // Greedy line breaking.
+ }
+
+ // Greedy line breaking.
// Picks the longest line under the limit each time,
// otherwise settles for the shortest line over the limit.
// NB. More-indented lines *cannot* be folded, as that would add an extra \n.
-
-
function foldLine(line, width) {
- if (line === '' || line[0] === ' ') return line; // Since a more-indented line adds a \n, breaks can't be followed by a space.
+ if (line === '' || line[0] === ' ') return line;
+ // Since a more-indented line adds a \n, breaks can't be followed by a space.
var breakRe = / [^ ]/g; // note: the match index will always be <= length-2.
-
- var match; // start is an inclusive index. end, curr, and next are exclusive.
-
+ var match;
+ // start is an inclusive index. end, curr, and next are exclusive.
var start = 0,
- end,
- curr = 0,
- next = 0;
- var result = ''; // Invariants: 0 <= start <= length-1.
+ end,
+ curr = 0,
+ next = 0;
+ var result = '';
+
+ // Invariants: 0 <= start <= length-1.
// 0 <= curr <= next <= max(0, length-2). curr - start <= width.
// Inside the loop:
// A match implies length >= 2, so curr and next are <= length-2.
-
while (match = breakRe.exec(line)) {
- next = match.index; // maintain invariant: curr - start <= width
-
+ next = match.index;
+ // maintain invariant: curr - start <= width
if (next - start > width) {
end = curr > start ? curr : next; // derive end <= length-2
-
- result += '\n' + line.slice(start, end); // skip the space that was output as \n
-
+ result += '\n' + line.slice(start, end);
+ // skip the space that was output as \n
start = end + 1; // derive start <= length-1
}
curr = next;
- } // By the invariants, start <= length-1, so there is something left over.
- // It is either the whole string or a part starting from non-whitespace.
-
-
- result += '\n'; // Insert a break if the remainder is too long and there is a break available.
+ }
+ // By the invariants, start <= length-1, so there is something left over.
+ // It is either the whole string or a part starting from non-whitespace.
+ result += '\n';
+ // Insert a break if the remainder is too long and there is a break available.
if (line.length - start > width && curr > start) {
result += line.slice(start, curr) + '\n' + line.slice(curr + 1);
} else {
result += line.slice(start);
}
-
return result.slice(1); // drop extra \n joiner
- } // Escapes a double-quoted string.
-
+ }
+ // Escapes a double-quoted string.
function escapeString(string) {
var result = '';
var char, nextChar;
var escapeSeq;
-
for (var i = 0; i < string.length; i++) {
- char = string.charCodeAt(i); // Check for surrogate pairs (reference Unicode 3.0 section "3.7 Surrogates").
-
- if (char >= 0xD800 && char <= 0xDBFF
- /* high surrogate */
- ) {
- nextChar = string.charCodeAt(i + 1);
-
- if (nextChar >= 0xDC00 && nextChar <= 0xDFFF
- /* low surrogate */
- ) {
- // Combine the surrogate pair and store it escaped.
- result += encodeHex((char - 0xD800) * 0x400 + nextChar - 0xDC00 + 0x10000); // Advance index one extra since we already used that char here.
-
- i++;
- continue;
- }
+ char = string.charCodeAt(i);
+ // Check for surrogate pairs (reference Unicode 3.0 section "3.7 Surrogates").
+ if (char >= 0xD800 && char <= 0xDBFF /* high surrogate */) {
+ nextChar = string.charCodeAt(i + 1);
+ if (nextChar >= 0xDC00 && nextChar <= 0xDFFF /* low surrogate */) {
+ // Combine the surrogate pair and store it escaped.
+ result += encodeHex((char - 0xD800) * 0x400 + nextChar - 0xDC00 + 0x10000);
+ // Advance index one extra since we already used that char here.
+ i++;
+ continue;
}
-
+ }
escapeSeq = ESCAPE_SEQUENCES[char];
result += !escapeSeq && isPrintable(char) ? string[i] : escapeSeq || encodeHex(char);
}
-
return result;
}
-
function writeFlowSequence(state, level, object) {
var _result = '',
- _tag = state.tag,
- index,
- length;
-
+ _tag = state.tag,
+ index,
+ length;
for (index = 0, length = object.length; index < length; index += 1) {
// Write only valid elements.
if (writeNode(state, level, object[index], false, false)) {
@@ -15479,86 +13178,77 @@
_result += state.dump;
}
}
-
state.tag = _tag;
state.dump = '[' + _result + ']';
}
-
function writeBlockSequence(state, level, object, compact) {
var _result = '',
- _tag = state.tag,
- index,
- length;
-
+ _tag = state.tag,
+ index,
+ length;
for (index = 0, length = object.length; index < length; index += 1) {
// Write only valid elements.
if (writeNode(state, level + 1, object[index], true, true)) {
if (!compact || index !== 0) {
_result += generateNextLine(state, level);
}
-
if (state.dump && CHAR_LINE_FEED === state.dump.charCodeAt(0)) {
_result += '-';
} else {
_result += '- ';
}
-
_result += state.dump;
}
}
-
state.tag = _tag;
state.dump = _result || '[]'; // Empty sequence if no valid values.
}
function writeFlowMapping(state, level, object) {
var _result = '',
- _tag = state.tag,
- objectKeyList = Object.keys(object),
- index,
- length,
- objectKey,
- objectValue,
- pairBuffer;
-
+ _tag = state.tag,
+ objectKeyList = Object.keys(object),
+ index,
+ length,
+ objectKey,
+ objectValue,
+ pairBuffer;
for (index = 0, length = objectKeyList.length; index < length; index += 1) {
pairBuffer = '';
if (index !== 0) pairBuffer += ', ';
if (state.condenseFlow) pairBuffer += '"';
objectKey = objectKeyList[index];
objectValue = object[objectKey];
-
if (!writeNode(state, level, objectKey, false, false)) {
continue; // Skip this pair because of invalid key;
}
if (state.dump.length > 1024) pairBuffer += '? ';
pairBuffer += state.dump + (state.condenseFlow ? '"' : '') + ':' + (state.condenseFlow ? '' : ' ');
-
if (!writeNode(state, level, objectValue, false, false)) {
continue; // Skip this pair because of invalid value.
}
- pairBuffer += state.dump; // Both key and value are valid.
+ pairBuffer += state.dump;
+ // Both key and value are valid.
_result += pairBuffer;
}
-
state.tag = _tag;
state.dump = '{' + _result + '}';
}
-
function writeBlockMapping(state, level, object, compact) {
var _result = '',
- _tag = state.tag,
- objectKeyList = Object.keys(object),
- index,
- length,
- objectKey,
- objectValue,
- explicitPair,
- pairBuffer; // Allow sorting keys so that the output file is deterministic
-
+ _tag = state.tag,
+ objectKeyList = Object.keys(object),
+ index,
+ length,
+ objectKey,
+ objectValue,
+ explicitPair,
+ pairBuffer;
+
+ // Allow sorting keys so that the output file is deterministic
if (state.sortKeys === true) {
// Default sorting
objectKeyList.sort();
@@ -15569,23 +13259,18 @@
// Something is wrong
throw new exception('sortKeys must be a boolean or a function');
}
-
for (index = 0, length = objectKeyList.length; index < length; index += 1) {
pairBuffer = '';
-
if (!compact || index !== 0) {
pairBuffer += generateNextLine(state, level);
}
-
objectKey = objectKeyList[index];
objectValue = object[objectKey];
-
if (!writeNode(state, level + 1, objectKey, true, true, true)) {
continue; // Skip this pair because of invalid key.
}
explicitPair = state.tag !== null && state.tag !== '?' || state.dump && state.dump.length > 1024;
-
if (explicitPair) {
if (state.dump && CHAR_LINE_FEED === state.dump.charCodeAt(0)) {
pairBuffer += '?';
@@ -15593,13 +13278,10 @@
pairBuffer += '? ';
}
}
-
pairBuffer += state.dump;
-
if (explicitPair) {
pairBuffer += generateNextLine(state, level);
}
-
if (!writeNode(state, level + 1, objectValue, true, explicitPair)) {
continue; // Skip this pair because of invalid value.
}
@@ -15609,30 +13291,24 @@
} else {
pairBuffer += ': ';
}
+ pairBuffer += state.dump;
- pairBuffer += state.dump; // Both key and value are valid.
-
+ // Both key and value are valid.
_result += pairBuffer;
}
-
state.tag = _tag;
state.dump = _result || '{}'; // Empty mapping if no valid pairs.
}
function detectType(state, object, explicit) {
var _result, typeList, index, length, type, style;
-
typeList = explicit ? state.explicitTypes : state.implicitTypes;
-
for (index = 0, length = typeList.length; index < length; index += 1) {
type = typeList[index];
-
if ((type.instanceOf || type.predicate) && (!type.instanceOf || typeof object === 'object' && object instanceof type.instanceOf) && (!type.predicate || type.predicate(object))) {
state.tag = explicit ? type.tag : '?';
-
if (type.represent) {
style = state.styleMap[type.tag] || type.defaultStyle;
-
if (_toString.call(type.represent) === '[object Function]') {
_result = type.represent(object, style);
} else if (_hasOwnProperty.call(type.represent, style)) {
@@ -15640,80 +13316,64 @@
} else {
throw new exception('!<' + type.tag + '> tag resolver accepts not "' + style + '" style');
}
-
state.dump = _result;
}
-
return true;
}
}
-
return false;
- } // Serializes `object` and writes it to global `result`.
+ }
+
+ // Serializes `object` and writes it to global `result`.
// Returns true on success, or false on invalid object.
//
-
-
function writeNode(state, level, object, block, compact, iskey) {
state.tag = null;
state.dump = object;
-
if (!detectType(state, object, false)) {
detectType(state, object, true);
}
-
var type = _toString.call(state.dump);
-
if (block) {
block = state.flowLevel < 0 || state.flowLevel > level;
}
-
var objectOrArray = type === '[object Object]' || type === '[object Array]',
- duplicateIndex,
- duplicate;
-
+ duplicateIndex,
+ duplicate;
if (objectOrArray) {
duplicateIndex = state.duplicates.indexOf(object);
duplicate = duplicateIndex !== -1;
}
-
if (state.tag !== null && state.tag !== '?' || duplicate || state.indent !== 2 && level > 0) {
compact = false;
}
-
if (duplicate && state.usedDuplicates[duplicateIndex]) {
state.dump = '*ref_' + duplicateIndex;
} else {
if (objectOrArray && duplicate && !state.usedDuplicates[duplicateIndex]) {
state.usedDuplicates[duplicateIndex] = true;
}
-
if (type === '[object Object]') {
if (block && Object.keys(state.dump).length !== 0) {
writeBlockMapping(state, level, state.dump, compact);
-
if (duplicate) {
state.dump = '&ref_' + duplicateIndex + state.dump;
}
} else {
writeFlowMapping(state, level, state.dump);
-
if (duplicate) {
state.dump = '&ref_' + duplicateIndex + ' ' + state.dump;
}
}
} else if (type === '[object Array]') {
var arrayLevel = state.noArrayIndent && level > 0 ? level - 1 : level;
-
if (block && state.dump.length !== 0) {
writeBlockSequence(state, arrayLevel, state.dump, compact);
-
if (duplicate) {
state.dump = '&ref_' + duplicateIndex + state.dump;
}
} else {
writeFlowSequence(state, arrayLevel, state.dump);
-
if (duplicate) {
state.dump = '&ref_' + duplicateIndex + ' ' + state.dump;
}
@@ -15726,49 +13386,39 @@
if (state.skipInvalid) return false;
throw new exception('unacceptable kind of an object to dump ' + type);
}
-
if (state.tag !== null && state.tag !== '?') {
state.dump = '!<' + state.tag + '> ' + state.dump;
}
}
-
return true;
}
-
function getDuplicateReferences(object, state) {
var objects = [],
- duplicatesIndexes = [],
- index,
- length;
+ duplicatesIndexes = [],
+ index,
+ length;
inspectNode(object, objects, duplicatesIndexes);
-
for (index = 0, length = duplicatesIndexes.length; index < length; index += 1) {
state.duplicates.push(objects[duplicatesIndexes[index]]);
}
-
state.usedDuplicates = new Array(length);
}
-
function inspectNode(object, objects, duplicatesIndexes) {
var objectKeyList, index, length;
-
if (object !== null && typeof object === 'object') {
index = objects.indexOf(object);
-
if (index !== -1) {
if (duplicatesIndexes.indexOf(index) === -1) {
duplicatesIndexes.push(index);
}
} else {
objects.push(object);
-
if (Array.isArray(object)) {
for (index = 0, length = object.length; index < length; index += 1) {
inspectNode(object[index], objects, duplicatesIndexes);
}
} else {
objectKeyList = Object.keys(object);
-
for (index = 0, length = objectKeyList.length; index < length; index += 1) {
inspectNode(object[objectKeyList[index]], objects, duplicatesIndexes);
}
@@ -15776,7 +13426,6 @@
}
}
}
-
function dump$1(input, options) {
options = options || {};
var state = new State(options);
@@ -15784,13 +13433,11 @@
if (writeNode(state, 0, input, true, true)) return state.dump + '\n';
return '';
}
-
function safeDump$1(input, options) {
return dump$1(input, common.extend({
schema: default_safe
}, options));
}
-
var dump_1 = dump$1;
var safeDump_1 = safeDump$1;
var dumper = {
@@ -15803,7 +13450,6 @@
throw new Error('Function ' + name + ' is deprecated and cannot be used.');
};
}
-
var Type = type;
var Schema = schema;
var FAILSAFE_SCHEMA = failsafe;
@@ -15817,12 +13463,14 @@
var safeLoadAll = loader.safeLoadAll;
var dump = dumper.dump;
var safeDump = dumper.safeDump;
- var YAMLException = exception; // Deprecated schema names from JS-YAML 2.0.x
+ var YAMLException = exception;
+ // Deprecated schema names from JS-YAML 2.0.x
var MINIMAL_SCHEMA = failsafe;
var SAFE_SCHEMA = default_safe;
- var DEFAULT_SCHEMA = default_full; // Deprecated functions from JS-YAML 1.x.x
+ var DEFAULT_SCHEMA = default_full;
+ // Deprecated functions from JS-YAML 1.x.x
var scan = deprecated('scan');
var parse = deprecated('parse');
var compose = deprecated('compose');
@@ -15853,9 +13501,9 @@
var jsYaml = jsYaml$1;
- function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; }
+ function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
+ function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
- function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }
/**
* Redirect - object used to redirect some requests
* e.g.
@@ -15870,10 +13518,10 @@
* @property {string} comment
* @property {string} content
* @property {string} contentType
+ * @property {string} file
* @property {boolean} [isBlocking]
* @property {string} [sha]
*/
-
var Redirects = /*#__PURE__*/function () {
/**
* Converts rawYaml into JS object with sources titles used as keys
@@ -15883,7 +13531,6 @@
*/
function Redirects(rawYaml) {
classCallCheck(this, Redirects);
-
try {
var arrOfRedirects = jsYaml.safeLoad(rawYaml);
this.redirects = arrOfRedirects.reduce(function (acc, redirect) {
@@ -15895,38 +13542,48 @@
throw e;
}
}
+
/**
* Returns redirect source object
* @param {string} title
- * @return {Redirect}
+ * @return {Redirect|undefined} Found redirect source object, or `undefined` if not found.
*/
-
-
createClass(Redirects, [{
key: "getRedirect",
value: function getRedirect(title) {
var _this = this;
-
if (Object.prototype.hasOwnProperty.call(this.redirects, title)) {
return this.redirects[title];
- } // look title among aliases
-
+ }
+ // look title among aliases
var values = Object.keys(this.redirects).map(function (key) {
return _this.redirects[key];
});
return values.find(function (redirect) {
var aliases = redirect.aliases;
-
if (!aliases) {
return false;
}
-
return aliases.indexOf(title) > -1;
});
}
+ /**
+ * Checks if redirect is blocking like click2load.html
+ * @param {string} title Title of the redirect.
+ * @returns True if redirect is blocking otherwise returns `false` even if redirect name is
+ * unknown.
+ */
+ }, {
+ key: "isBlocking",
+ value: function isBlocking(title) {
+ var redirect = this.redirects[title];
+ if (redirect) {
+ return !!redirect.isBlocking;
+ }
+ return false;
+ }
}]);
-
return Redirects;
}();
@@ -15990,6 +13647,8 @@
"ubo-googletagmanager_gtm.js": "google-analytics.js",
"googletagmanager_gtm.js": "google-analytics.js",
"google-ima3": "google-ima3.js",
+ "ubo-google-ima.js": "google-ima3.js",
+ "google-ima.js": "google-ima3.js",
"googlesyndication-adsbygoogle": "googlesyndication-adsbygoogle.js",
"ubo-googlesyndication_adsbygoogle.js": "googlesyndication-adsbygoogle.js",
"googlesyndication_adsbygoogle.js": "googlesyndication-adsbygoogle.js",
@@ -16044,7 +13703,6 @@
* Finds redirect resource by it's name
* @param {string} name - redirect name
*/
-
var getRedirectByName = function getRedirectByName(name) {
var redirects = Object.keys(redirectsList).map(function (key) {
return redirectsList[key];
@@ -16053,6 +13711,7 @@
return r.names && r.names.indexOf(name) > -1;
});
};
+
/**
* @typedef {Object} Source - redirect properties
* @property {string} name redirect name
@@ -16067,22 +13726,19 @@
* @param {Source} source
* @returns {string} redirect code
*/
-
-
var getRedirectCode = function getRedirectCode(source) {
var redirect = getRedirectByName(source.name);
var result = attachDependencies(redirect);
- result = addCall(redirect, result); // redirect code for different sources is checked in tests
- // so it should be just a code without any source and props passed
+ result = addCall(redirect, result);
+ // redirect code for different sources is checked in tests
+ // so it should be just a code without any source and props passed
result = source.engine === 'test' ? wrapInNonameFunc(result) : passSourceAndProps(source, result, true);
return result;
};
-
var getRedirectFilename = function getRedirectFilename(name) {
return redirectsMap[name];
};
-
var redirects = {
Redirects: Redirects,
getRedirectFilename: getRedirectFilename,
@@ -16103,49 +13759,38 @@
var searchRegexp = toRegExp(search);
var rid = randomId();
var SRC_DATA_MARKER = "data:text/javascript;base64,";
-
var getCurrentScript = function getCurrentScript() {
if ("currentScript" in document) {
return document.currentScript;
}
-
var scripts = document.getElementsByTagName("script");
return scripts[scripts.length - 1];
};
-
var ourScript = getCurrentScript();
-
var abort = function abort() {
var scriptEl = getCurrentScript();
-
if (!scriptEl) {
return;
}
-
var content = scriptEl.textContent;
-
try {
var textContentGetter = Object.getOwnPropertyDescriptor(Node.prototype, "textContent").get;
content = textContentGetter.call(scriptEl);
} catch (e) {}
-
if (content.length === 0 && typeof scriptEl.src !== "undefined" && startsWith(scriptEl.src, SRC_DATA_MARKER)) {
var encodedContent = scriptEl.src.slice(SRC_DATA_MARKER.length);
content = window.atob(encodedContent);
}
-
if (scriptEl instanceof HTMLScriptElement && content.length > 0 && scriptEl !== ourScript && searchRegexp.test(content)) {
hit(source);
throw new ReferenceError(rid);
}
};
-
var setChainPropAccess = function setChainPropAccess(owner, property) {
var chainInfo = getPropertyInChain(owner, property);
var base = chainInfo.base;
var prop = chainInfo.prop,
- chain = chainInfo.chain;
-
+ chain = chainInfo.chain;
if (base instanceof Object === false && base === null) {
var props = property.split(".");
var propIndex = props.indexOf(prop);
@@ -16154,16 +13799,13 @@
logMessage(source, message);
return;
}
-
if (chain) {
var setter = function setter(a) {
base = a;
-
if (a instanceof Object) {
setChainPropAccess(a, chain);
}
};
-
Object.defineProperty(owner, prop, {
get: function get() {
return base;
@@ -16172,33 +13814,27 @@
});
return;
}
-
var currentValue = base[prop];
var origDescriptor = Object.getOwnPropertyDescriptor(base, prop);
-
if (origDescriptor instanceof Object === false || origDescriptor.get instanceof Function === false) {
currentValue = base[prop];
origDescriptor = undefined;
}
-
var descriptorWrapper = Object.assign(getDescriptorAddon(), {
currentValue: currentValue,
get: function get() {
if (!this.isAbortingSuspended) {
this.isolateCallback(abort);
}
-
if (origDescriptor instanceof Object) {
return origDescriptor.get.call(base);
}
-
return this.currentValue;
},
set: function set(newValue) {
if (!this.isAbortingSuspended) {
this.isolateCallback(abort);
}
-
if (origDescriptor instanceof Object) {
origDescriptor.set.call(base, newValue);
} else {
@@ -16215,38 +13851,29 @@
}
});
};
-
setChainPropAccess(window, property);
window.onerror = createOnErrorHandler(rid).bind();
}
-
function randomId() {
- return Math.random().toString(36).substr(2, 9);
+ return Math.random().toString(36).slice(2, 9);
}
-
function setPropertyAccess(object, property, descriptor) {
var currentDescriptor = Object.getOwnPropertyDescriptor(object, property);
-
if (currentDescriptor && !currentDescriptor.configurable) {
return false;
}
-
Object.defineProperty(object, property, descriptor);
return true;
}
-
function getPropertyInChain(base, chain) {
var pos = chain.indexOf(".");
-
if (pos === -1) {
return {
base: base,
prop: chain
};
}
-
var prop = chain.slice(0, pos);
-
if (base === null) {
return {
base: base,
@@ -16254,10 +13881,8 @@
chain: chain
};
}
-
var nextBase = base[prop];
chain = chain.slice(pos + 1);
-
if ((base instanceof Object || typeof base === "object") && isEmptyObject(base)) {
return {
base: base,
@@ -16265,7 +13890,6 @@
chain: chain
};
}
-
if (nextBase === null) {
return {
base: base,
@@ -16273,11 +13897,9 @@
chain: chain
};
}
-
if (nextBase !== undefined) {
return getPropertyInChain(nextBase, chain);
}
-
Object.defineProperty(base, prop, {
configurable: true
});
@@ -16287,119 +13909,85 @@
chain: chain
};
}
-
function toRegExp() {
var input = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : "";
var DEFAULT_VALUE = ".?";
var FORWARD_SLASH = "/";
-
if (input === "") {
return new RegExp(DEFAULT_VALUE);
}
-
if (input[0] === FORWARD_SLASH && input[input.length - 1] === FORWARD_SLASH) {
return new RegExp(input.slice(1, -1));
}
-
var escaped = input.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
return new RegExp(escaped);
}
-
function startsWith(str, prefix) {
return !!str && str.indexOf(prefix) === 0;
}
-
function createOnErrorHandler(rid) {
var nativeOnError = window.onerror;
return function onError(error) {
if (typeof error === "string" && error.indexOf(rid) !== -1) {
return true;
}
-
if (nativeOnError instanceof Function) {
for (var _len = arguments.length, args = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {
args[_key - 1] = arguments[_key];
}
-
return nativeOnError.apply(this, [error].concat(args));
}
-
return false;
};
}
-
- function hit(source, message) {
+ function hit(source) {
if (source.verbose !== true) {
return;
}
-
try {
var log = console.log.bind(console);
var trace = console.trace.bind(console);
var prefix = source.ruleText || "";
-
if (source.domainName) {
var AG_SCRIPTLET_MARKER = "#%#//";
var UBO_SCRIPTLET_MARKER = "##+js";
var ruleStartIndex;
-
if (source.ruleText.indexOf(AG_SCRIPTLET_MARKER) > -1) {
ruleStartIndex = source.ruleText.indexOf(AG_SCRIPTLET_MARKER);
} else if (source.ruleText.indexOf(UBO_SCRIPTLET_MARKER) > -1) {
ruleStartIndex = source.ruleText.indexOf(UBO_SCRIPTLET_MARKER);
}
-
var rulePart = source.ruleText.slice(ruleStartIndex);
prefix = "".concat(source.domainName).concat(rulePart);
}
-
- var LOG_MARKER = "log: ";
-
- if (message) {
- if (message.indexOf(LOG_MARKER) === -1) {
- log("".concat(prefix, " message:\n").concat(message));
- } else {
- log(message.slice(LOG_MARKER.length));
- }
- }
-
log("".concat(prefix, " trace start"));
-
if (trace) {
trace();
}
-
log("".concat(prefix, " trace end"));
} catch (e) {}
-
if (typeof window.__debug === "function") {
window.__debug(source);
}
}
-
function logMessage(source, message) {
var forced = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;
-
if (forced || source.verbose) {
console.log("".concat(source.name, ": ").concat(message));
}
}
-
function isEmptyObject(obj) {
- return Object.keys(obj).length === 0;
+ return Object.keys(obj).length === 0 && !obj.prototype;
}
-
function getDescriptorAddon() {
return {
isAbortingSuspended: false,
isolateCallback: function isolateCallback(cb) {
this.isAbortingSuspended = true;
-
try {
for (var _len = arguments.length, args = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {
args[_key - 1] = arguments[_key];
}
-
var result = cb.apply(void 0, args);
this.isAbortingSuspended = false;
return result;
@@ -16411,44 +13999,35 @@
}
};
}
-
var updatedArgs = args ? [].concat(source).concat(args) : [source];
-
try {
abortCurrentInlineScript.apply(this, updatedArgs);
} catch (e) {
console.log(e);
}
}
-
function abortOnPropertyRead(source, args) {
function abortOnPropertyRead(source, property) {
if (!property) {
return;
}
-
var rid = randomId();
-
var abort = function abort() {
hit(source);
throw new ReferenceError(rid);
};
-
var setChainPropAccess = function setChainPropAccess(owner, property) {
var chainInfo = getPropertyInChain(owner, property);
var base = chainInfo.base;
var prop = chainInfo.prop,
- chain = chainInfo.chain;
-
+ chain = chainInfo.chain;
if (chain) {
var setter = function setter(a) {
base = a;
-
if (a instanceof Object) {
setChainPropAccess(a, chain);
}
};
-
Object.defineProperty(owner, prop, {
get: function get() {
return base;
@@ -16457,44 +14036,34 @@
});
return;
}
-
setPropertyAccess(base, prop, {
get: abort,
set: function set() {}
});
};
-
setChainPropAccess(window, property);
window.onerror = createOnErrorHandler(rid).bind();
}
-
function randomId() {
- return Math.random().toString(36).substr(2, 9);
+ return Math.random().toString(36).slice(2, 9);
}
-
function setPropertyAccess(object, property, descriptor) {
var currentDescriptor = Object.getOwnPropertyDescriptor(object, property);
-
if (currentDescriptor && !currentDescriptor.configurable) {
return false;
}
-
Object.defineProperty(object, property, descriptor);
return true;
}
-
function getPropertyInChain(base, chain) {
var pos = chain.indexOf(".");
-
if (pos === -1) {
return {
base: base,
prop: chain
};
}
-
var prop = chain.slice(0, pos);
-
if (base === null) {
return {
base: base,
@@ -16502,10 +14071,8 @@
chain: chain
};
}
-
var nextBase = base[prop];
chain = chain.slice(pos + 1);
-
if ((base instanceof Object || typeof base === "object") && isEmptyObject(base)) {
return {
base: base,
@@ -16513,7 +14080,6 @@
chain: chain
};
}
-
if (nextBase === null) {
return {
base: base,
@@ -16521,11 +14087,9 @@
chain: chain
};
}
-
if (nextBase !== undefined) {
return getPropertyInChain(nextBase, chain);
}
-
Object.defineProperty(base, prop, {
configurable: true
});
@@ -16535,116 +14099,83 @@
chain: chain
};
}
-
function createOnErrorHandler(rid) {
var nativeOnError = window.onerror;
return function onError(error) {
if (typeof error === "string" && error.indexOf(rid) !== -1) {
return true;
}
-
if (nativeOnError instanceof Function) {
for (var _len = arguments.length, args = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {
args[_key - 1] = arguments[_key];
}
-
return nativeOnError.apply(this, [error].concat(args));
}
-
return false;
};
}
-
- function hit(source, message) {
+ function hit(source) {
if (source.verbose !== true) {
return;
}
-
try {
var log = console.log.bind(console);
var trace = console.trace.bind(console);
var prefix = source.ruleText || "";
-
if (source.domainName) {
var AG_SCRIPTLET_MARKER = "#%#//";
var UBO_SCRIPTLET_MARKER = "##+js";
var ruleStartIndex;
-
if (source.ruleText.indexOf(AG_SCRIPTLET_MARKER) > -1) {
ruleStartIndex = source.ruleText.indexOf(AG_SCRIPTLET_MARKER);
} else if (source.ruleText.indexOf(UBO_SCRIPTLET_MARKER) > -1) {
ruleStartIndex = source.ruleText.indexOf(UBO_SCRIPTLET_MARKER);
}
-
var rulePart = source.ruleText.slice(ruleStartIndex);
prefix = "".concat(source.domainName).concat(rulePart);
}
-
- var LOG_MARKER = "log: ";
-
- if (message) {
- if (message.indexOf(LOG_MARKER) === -1) {
- log("".concat(prefix, " message:\n").concat(message));
- } else {
- log(message.slice(LOG_MARKER.length));
- }
- }
-
log("".concat(prefix, " trace start"));
-
if (trace) {
trace();
}
-
log("".concat(prefix, " trace end"));
} catch (e) {}
-
if (typeof window.__debug === "function") {
window.__debug(source);
}
}
-
function isEmptyObject(obj) {
- return Object.keys(obj).length === 0;
+ return Object.keys(obj).length === 0 && !obj.prototype;
}
-
var updatedArgs = args ? [].concat(source).concat(args) : [source];
-
try {
abortOnPropertyRead.apply(this, updatedArgs);
} catch (e) {
console.log(e);
}
}
-
function abortOnPropertyWrite(source, args) {
function abortOnPropertyWrite(source, property) {
if (!property) {
return;
}
-
var rid = randomId();
-
var abort = function abort() {
hit(source);
throw new ReferenceError(rid);
};
-
var setChainPropAccess = function setChainPropAccess(owner, property) {
var chainInfo = getPropertyInChain(owner, property);
var base = chainInfo.base;
var prop = chainInfo.prop,
- chain = chainInfo.chain;
-
+ chain = chainInfo.chain;
if (chain) {
var setter = function setter(a) {
base = a;
-
if (a instanceof Object) {
setChainPropAccess(a, chain);
}
};
-
Object.defineProperty(owner, prop, {
get: function get() {
return base;
@@ -16653,43 +14184,33 @@
});
return;
}
-
setPropertyAccess(base, prop, {
set: abort
});
};
-
setChainPropAccess(window, property);
window.onerror = createOnErrorHandler(rid).bind();
}
-
function randomId() {
- return Math.random().toString(36).substr(2, 9);
+ return Math.random().toString(36).slice(2, 9);
}
-
function setPropertyAccess(object, property, descriptor) {
var currentDescriptor = Object.getOwnPropertyDescriptor(object, property);
-
if (currentDescriptor && !currentDescriptor.configurable) {
return false;
}
-
Object.defineProperty(object, property, descriptor);
return true;
}
-
function getPropertyInChain(base, chain) {
var pos = chain.indexOf(".");
-
if (pos === -1) {
return {
base: base,
prop: chain
};
}
-
var prop = chain.slice(0, pos);
-
if (base === null) {
return {
base: base,
@@ -16697,10 +14218,8 @@
chain: chain
};
}
-
var nextBase = base[prop];
chain = chain.slice(pos + 1);
-
if ((base instanceof Object || typeof base === "object") && isEmptyObject(base)) {
return {
base: base,
@@ -16708,7 +14227,6 @@
chain: chain
};
}
-
if (nextBase === null) {
return {
base: base,
@@ -16716,11 +14234,9 @@
chain: chain
};
}
-
if (nextBase !== undefined) {
return getPropertyInChain(nextBase, chain);
}
-
Object.defineProperty(base, prop, {
configurable: true
});
@@ -16730,116 +14246,83 @@
chain: chain
};
}
-
function createOnErrorHandler(rid) {
var nativeOnError = window.onerror;
return function onError(error) {
if (typeof error === "string" && error.indexOf(rid) !== -1) {
return true;
}
-
if (nativeOnError instanceof Function) {
for (var _len = arguments.length, args = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {
args[_key - 1] = arguments[_key];
}
-
return nativeOnError.apply(this, [error].concat(args));
}
-
return false;
};
}
-
- function hit(source, message) {
+ function hit(source) {
if (source.verbose !== true) {
return;
}
-
try {
var log = console.log.bind(console);
var trace = console.trace.bind(console);
var prefix = source.ruleText || "";
-
if (source.domainName) {
var AG_SCRIPTLET_MARKER = "#%#//";
var UBO_SCRIPTLET_MARKER = "##+js";
var ruleStartIndex;
-
if (source.ruleText.indexOf(AG_SCRIPTLET_MARKER) > -1) {
ruleStartIndex = source.ruleText.indexOf(AG_SCRIPTLET_MARKER);
} else if (source.ruleText.indexOf(UBO_SCRIPTLET_MARKER) > -1) {
ruleStartIndex = source.ruleText.indexOf(UBO_SCRIPTLET_MARKER);
}
-
var rulePart = source.ruleText.slice(ruleStartIndex);
prefix = "".concat(source.domainName).concat(rulePart);
}
-
- var LOG_MARKER = "log: ";
-
- if (message) {
- if (message.indexOf(LOG_MARKER) === -1) {
- log("".concat(prefix, " message:\n").concat(message));
- } else {
- log(message.slice(LOG_MARKER.length));
- }
- }
-
log("".concat(prefix, " trace start"));
-
if (trace) {
trace();
}
-
log("".concat(prefix, " trace end"));
} catch (e) {}
-
if (typeof window.__debug === "function") {
window.__debug(source);
}
}
-
function isEmptyObject(obj) {
- return Object.keys(obj).length === 0;
+ return Object.keys(obj).length === 0 && !obj.prototype;
}
-
var updatedArgs = args ? [].concat(source).concat(args) : [source];
-
try {
abortOnPropertyWrite.apply(this, updatedArgs);
} catch (e) {
console.log(e);
}
}
-
function abortOnStackTrace(source, args) {
function abortOnStackTrace(source, property, stack) {
if (!property || !stack) {
return;
}
-
var rid = randomId();
-
var abort = function abort() {
hit(source);
throw new ReferenceError(rid);
};
-
var setChainPropAccess = function setChainPropAccess(owner, property) {
var chainInfo = getPropertyInChain(owner, property);
var base = chainInfo.base;
var prop = chainInfo.prop,
- chain = chainInfo.chain;
-
+ chain = chainInfo.chain;
if (chain) {
var setter = function setter(a) {
base = a;
-
if (a instanceof Object) {
setChainPropAccess(a, chain);
}
};
-
Object.defineProperty(owner, prop, {
get: function get() {
return base;
@@ -16848,26 +14331,22 @@
});
return;
}
-
if (!stack.match(/^(inlineScript|injectedScript)$/) && !isValidStrPattern(stack)) {
logMessage(source, "Invalid parameter: ".concat(stack));
return;
}
-
var descriptorWrapper = Object.assign(getDescriptorAddon(), {
value: base[prop],
get: function get() {
if (!this.isAbortingSuspended && this.isolateCallback(matchStackTrace, stack, new Error().stack)) {
abort();
}
-
return this.value;
},
set: function set(newValue) {
if (!this.isAbortingSuspended && this.isolateCallback(matchStackTrace, stack, new Error().stack)) {
abort();
}
-
this.value = newValue;
}
});
@@ -16880,38 +14359,29 @@
}
});
};
-
setChainPropAccess(window, property);
window.onerror = createOnErrorHandler(rid).bind();
}
-
function randomId() {
- return Math.random().toString(36).substr(2, 9);
+ return Math.random().toString(36).slice(2, 9);
}
-
function setPropertyAccess(object, property, descriptor) {
var currentDescriptor = Object.getOwnPropertyDescriptor(object, property);
-
if (currentDescriptor && !currentDescriptor.configurable) {
return false;
}
-
Object.defineProperty(object, property, descriptor);
return true;
}
-
function getPropertyInChain(base, chain) {
var pos = chain.indexOf(".");
-
if (pos === -1) {
return {
base: base,
prop: chain
};
}
-
var prop = chain.slice(0, pos);
-
if (base === null) {
return {
base: base,
@@ -16919,10 +14389,8 @@
chain: chain
};
}
-
var nextBase = base[prop];
chain = chain.slice(pos + 1);
-
if ((base instanceof Object || typeof base === "object") && isEmptyObject(base)) {
return {
base: base,
@@ -16930,7 +14398,6 @@
chain: chain
};
}
-
if (nextBase === null) {
return {
base: base,
@@ -16938,11 +14405,9 @@
chain: chain
};
}
-
if (nextBase !== undefined) {
return getPropertyInChain(nextBase, chain);
}
-
Object.defineProperty(base, prop, {
configurable: true
});
@@ -16952,126 +14417,91 @@
chain: chain
};
}
-
function createOnErrorHandler(rid) {
var nativeOnError = window.onerror;
return function onError(error) {
if (typeof error === "string" && error.indexOf(rid) !== -1) {
return true;
}
-
if (nativeOnError instanceof Function) {
for (var _len = arguments.length, args = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {
args[_key - 1] = arguments[_key];
}
-
return nativeOnError.apply(this, [error].concat(args));
}
-
return false;
};
}
-
- function hit(source, message) {
+ function hit(source) {
if (source.verbose !== true) {
return;
}
-
try {
var log = console.log.bind(console);
var trace = console.trace.bind(console);
var prefix = source.ruleText || "";
-
if (source.domainName) {
var AG_SCRIPTLET_MARKER = "#%#//";
var UBO_SCRIPTLET_MARKER = "##+js";
var ruleStartIndex;
-
if (source.ruleText.indexOf(AG_SCRIPTLET_MARKER) > -1) {
ruleStartIndex = source.ruleText.indexOf(AG_SCRIPTLET_MARKER);
} else if (source.ruleText.indexOf(UBO_SCRIPTLET_MARKER) > -1) {
ruleStartIndex = source.ruleText.indexOf(UBO_SCRIPTLET_MARKER);
}
-
var rulePart = source.ruleText.slice(ruleStartIndex);
prefix = "".concat(source.domainName).concat(rulePart);
}
-
- var LOG_MARKER = "log: ";
-
- if (message) {
- if (message.indexOf(LOG_MARKER) === -1) {
- log("".concat(prefix, " message:\n").concat(message));
- } else {
- log(message.slice(LOG_MARKER.length));
- }
- }
-
log("".concat(prefix, " trace start"));
-
if (trace) {
trace();
}
-
log("".concat(prefix, " trace end"));
} catch (e) {}
-
if (typeof window.__debug === "function") {
window.__debug(source);
}
}
-
function isValidStrPattern(input) {
var FORWARD_SLASH = "/";
var str = escapeRegExp(input);
-
if (input[0] === FORWARD_SLASH && input[input.length - 1] === FORWARD_SLASH) {
str = input.slice(1, -1);
}
-
var isValid;
-
try {
isValid = new RegExp(str);
isValid = true;
} catch (e) {
isValid = false;
}
-
return isValid;
}
-
function escapeRegExp(str) {
return str.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
}
-
function matchStackTrace(stackMatch, stackTrace) {
if (!stackMatch || stackMatch === "") {
return true;
}
-
if (shouldAbortInlineOrInjectedScript(stackMatch, stackTrace)) {
return true;
}
-
var stackRegexp = toRegExp(stackMatch);
var refinedStackTrace = stackTrace.split("\n").slice(2).map(function (line) {
return line.trim();
}).join("\n");
return getNativeRegexpTest().call(stackRegexp, refinedStackTrace);
}
-
function getDescriptorAddon() {
return {
isAbortingSuspended: false,
isolateCallback: function isolateCallback(cb) {
this.isAbortingSuspended = true;
-
try {
for (var _len = arguments.length, args = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {
args[_key - 1] = arguments[_key];
}
-
var result = cb.apply(void 0, args);
this.isAbortingSuspended = false;
return result;
@@ -17083,90 +14513,69 @@
}
};
}
-
function logMessage(source, message) {
var forced = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;
-
if (forced || source.verbose) {
console.log("".concat(source.name, ": ").concat(message));
}
}
-
function toRegExp() {
var input = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : "";
var DEFAULT_VALUE = ".?";
var FORWARD_SLASH = "/";
-
if (input === "") {
return new RegExp(DEFAULT_VALUE);
}
-
if (input[0] === FORWARD_SLASH && input[input.length - 1] === FORWARD_SLASH) {
return new RegExp(input.slice(1, -1));
}
-
var escaped = input.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
return new RegExp(escaped);
}
-
function isEmptyObject(obj) {
- return Object.keys(obj).length === 0;
+ return Object.keys(obj).length === 0 && !obj.prototype;
}
-
function getNativeRegexpTest() {
return Object.getOwnPropertyDescriptor(RegExp.prototype, "test").value;
}
-
function startsWith(str, prefix) {
return !!str && str.indexOf(prefix) === 0;
}
-
function shouldAbortInlineOrInjectedScript(stackMatch, stackTrace) {
var INLINE_SCRIPT_STRING = "inlineScript";
var INJECTED_SCRIPT_STRING = "injectedScript";
var INJECTED_SCRIPT_MARKER = "";
-
var isInlineScript = function isInlineScript(stackMatch) {
return stackMatch.indexOf(INLINE_SCRIPT_STRING) > -1;
};
-
var isInjectedScript = function isInjectedScript(stackMatch) {
return stackMatch.indexOf(INJECTED_SCRIPT_STRING) > -1;
};
-
if (!(isInlineScript(stackMatch) || isInjectedScript(stackMatch))) {
return false;
}
-
var documentURL = window.location.href;
var pos = documentURL.indexOf("#");
-
if (pos !== -1) {
documentURL = documentURL.slice(0, pos);
}
-
var stackSteps = stackTrace.split("\n").slice(2).map(function (line) {
return line.trim();
});
var stackLines = stackSteps.map(function (line) {
var stack;
var getStackTraceURL = /(.*?@)?(\S+)(:\d+):\d+\)?$/.exec(line);
-
if (getStackTraceURL) {
var stackURL = getStackTraceURL[2];
-
if (startsWith(stackURL, "(")) {
stackURL = stackURL.slice(1);
}
-
if (startsWith(stackURL, INJECTED_SCRIPT_MARKER)) {
stackURL = INJECTED_SCRIPT_STRING;
var stackFunction = getStackTraceURL[1] !== undefined ? getStackTraceURL[1].slice(0, -1) : line.slice(0, getStackTraceURL.index).trim();
-
if (startsWith(stackFunction, "at")) {
stackFunction = stackFunction.slice(2).trim();
}
-
stack = "".concat(stackFunction, " ").concat(stackURL).trim();
} else {
stack = stackURL;
@@ -17174,39 +14583,31 @@
} else {
stack = line;
}
-
return stack;
});
-
if (stackLines) {
for (var index = 0; index < stackLines.length; index += 1) {
if (isInlineScript(stackMatch) && documentURL === stackLines[index]) {
return true;
}
-
if (isInjectedScript(stackMatch) && startsWith(stackLines[index], INJECTED_SCRIPT_STRING)) {
return true;
}
}
}
-
return false;
}
-
var updatedArgs = args ? [].concat(source).concat(args) : [source];
-
try {
abortOnStackTrace.apply(this, updatedArgs);
} catch (e) {
console.log(e);
}
}
-
function adjustSetInterval(source, args) {
function adjustSetInterval(source, matchCallback, matchDelay, boost) {
var nativeSetInterval = window.setInterval;
var matchRegexp = toRegExp(matchCallback);
-
var intervalWrapper = function intervalWrapper(callback, delay) {
if (!isValidCallback(callback)) {
var message = "Scriptlet can't be applied because of invalid callback: '".concat(String(callback), "'.");
@@ -17215,152 +14616,110 @@
delay *= getBoostMultiplier(boost);
hit(source);
}
-
for (var _len = arguments.length, args = new Array(_len > 2 ? _len - 2 : 0), _key = 2; _key < _len; _key++) {
args[_key - 2] = arguments[_key];
}
-
return nativeSetInterval.apply(window, [callback, delay].concat(args));
};
-
window.setInterval = intervalWrapper;
}
-
- function hit(source, message) {
+ function hit(source) {
if (source.verbose !== true) {
return;
}
-
try {
var log = console.log.bind(console);
var trace = console.trace.bind(console);
var prefix = source.ruleText || "";
-
if (source.domainName) {
var AG_SCRIPTLET_MARKER = "#%#//";
var UBO_SCRIPTLET_MARKER = "##+js";
var ruleStartIndex;
-
if (source.ruleText.indexOf(AG_SCRIPTLET_MARKER) > -1) {
ruleStartIndex = source.ruleText.indexOf(AG_SCRIPTLET_MARKER);
} else if (source.ruleText.indexOf(UBO_SCRIPTLET_MARKER) > -1) {
ruleStartIndex = source.ruleText.indexOf(UBO_SCRIPTLET_MARKER);
}
-
var rulePart = source.ruleText.slice(ruleStartIndex);
prefix = "".concat(source.domainName).concat(rulePart);
}
-
- var LOG_MARKER = "log: ";
-
- if (message) {
- if (message.indexOf(LOG_MARKER) === -1) {
- log("".concat(prefix, " message:\n").concat(message));
- } else {
- log(message.slice(LOG_MARKER.length));
- }
- }
-
log("".concat(prefix, " trace start"));
-
if (trace) {
trace();
}
-
log("".concat(prefix, " trace end"));
} catch (e) {}
-
if (typeof window.__debug === "function") {
window.__debug(source);
}
}
-
function isValidCallback(callback) {
return callback instanceof Function || typeof callback === "string";
}
-
function toRegExp() {
var input = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : "";
var DEFAULT_VALUE = ".?";
var FORWARD_SLASH = "/";
-
if (input === "") {
return new RegExp(DEFAULT_VALUE);
}
-
if (input[0] === FORWARD_SLASH && input[input.length - 1] === FORWARD_SLASH) {
return new RegExp(input.slice(1, -1));
}
-
var escaped = input.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
return new RegExp(escaped);
}
-
function getBoostMultiplier(boost) {
var DEFAULT_MULTIPLIER = .05;
var MIN_MULTIPLIER = .02;
var MAX_MULTIPLIER = 50;
var parsedBoost = parseFloat(boost);
var boostMultiplier = nativeIsNaN(parsedBoost) || !nativeIsFinite(parsedBoost) ? DEFAULT_MULTIPLIER : parsedBoost;
-
if (boostMultiplier < MIN_MULTIPLIER) {
boostMultiplier = MIN_MULTIPLIER;
}
-
if (boostMultiplier > MAX_MULTIPLIER) {
boostMultiplier = MAX_MULTIPLIER;
}
-
return boostMultiplier;
}
-
function isDelayMatched(inputDelay, realDelay) {
return shouldMatchAnyDelay(inputDelay) || realDelay === getMatchDelay(inputDelay);
}
-
function logMessage(source, message) {
var forced = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;
-
if (forced || source.verbose) {
console.log("".concat(source.name, ": ").concat(message));
}
}
-
function nativeIsNaN(num) {
var native = Number.isNaN || window.isNaN;
return native(num);
}
-
function nativeIsFinite(num) {
var native = Number.isFinite || window.isFinite;
return native(num);
}
-
function getMatchDelay(delay) {
var DEFAULT_DELAY = 1e3;
var parsedDelay = parseInt(delay, 10);
var delayMatch = nativeIsNaN(parsedDelay) ? DEFAULT_DELAY : parsedDelay;
return delayMatch;
}
-
function shouldMatchAnyDelay(delay) {
return delay === "*";
}
-
var updatedArgs = args ? [].concat(source).concat(args) : [source];
-
try {
adjustSetInterval.apply(this, updatedArgs);
} catch (e) {
console.log(e);
}
}
-
function adjustSetTimeout(source, args) {
function adjustSetTimeout(source, matchCallback, matchDelay, boost) {
var nativeSetTimeout = window.setTimeout;
var matchRegexp = toRegExp(matchCallback);
-
var timeoutWrapper = function timeoutWrapper(callback, delay) {
if (!isValidCallback(callback)) {
var message = "Scriptlet can't be applied because of invalid callback: '".concat(String(callback), "'.");
@@ -17369,189 +14728,138 @@
delay *= getBoostMultiplier(boost);
hit(source);
}
-
for (var _len = arguments.length, args = new Array(_len > 2 ? _len - 2 : 0), _key = 2; _key < _len; _key++) {
args[_key - 2] = arguments[_key];
}
-
return nativeSetTimeout.apply(window, [callback, delay].concat(args));
};
-
window.setTimeout = timeoutWrapper;
}
-
- function hit(source, message) {
+ function hit(source) {
if (source.verbose !== true) {
return;
}
-
try {
var log = console.log.bind(console);
var trace = console.trace.bind(console);
var prefix = source.ruleText || "";
-
if (source.domainName) {
var AG_SCRIPTLET_MARKER = "#%#//";
var UBO_SCRIPTLET_MARKER = "##+js";
var ruleStartIndex;
-
if (source.ruleText.indexOf(AG_SCRIPTLET_MARKER) > -1) {
ruleStartIndex = source.ruleText.indexOf(AG_SCRIPTLET_MARKER);
} else if (source.ruleText.indexOf(UBO_SCRIPTLET_MARKER) > -1) {
ruleStartIndex = source.ruleText.indexOf(UBO_SCRIPTLET_MARKER);
}
-
var rulePart = source.ruleText.slice(ruleStartIndex);
prefix = "".concat(source.domainName).concat(rulePart);
}
-
- var LOG_MARKER = "log: ";
-
- if (message) {
- if (message.indexOf(LOG_MARKER) === -1) {
- log("".concat(prefix, " message:\n").concat(message));
- } else {
- log(message.slice(LOG_MARKER.length));
- }
- }
-
log("".concat(prefix, " trace start"));
-
if (trace) {
trace();
}
-
log("".concat(prefix, " trace end"));
} catch (e) {}
-
if (typeof window.__debug === "function") {
window.__debug(source);
}
}
-
function isValidCallback(callback) {
return callback instanceof Function || typeof callback === "string";
}
-
function toRegExp() {
var input = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : "";
var DEFAULT_VALUE = ".?";
var FORWARD_SLASH = "/";
-
if (input === "") {
return new RegExp(DEFAULT_VALUE);
}
-
if (input[0] === FORWARD_SLASH && input[input.length - 1] === FORWARD_SLASH) {
return new RegExp(input.slice(1, -1));
}
-
var escaped = input.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
return new RegExp(escaped);
}
-
function getBoostMultiplier(boost) {
var DEFAULT_MULTIPLIER = .05;
var MIN_MULTIPLIER = .02;
var MAX_MULTIPLIER = 50;
var parsedBoost = parseFloat(boost);
var boostMultiplier = nativeIsNaN(parsedBoost) || !nativeIsFinite(parsedBoost) ? DEFAULT_MULTIPLIER : parsedBoost;
-
if (boostMultiplier < MIN_MULTIPLIER) {
boostMultiplier = MIN_MULTIPLIER;
}
-
if (boostMultiplier > MAX_MULTIPLIER) {
boostMultiplier = MAX_MULTIPLIER;
}
-
return boostMultiplier;
}
-
function isDelayMatched(inputDelay, realDelay) {
return shouldMatchAnyDelay(inputDelay) || realDelay === getMatchDelay(inputDelay);
}
-
function logMessage(source, message) {
var forced = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;
-
if (forced || source.verbose) {
console.log("".concat(source.name, ": ").concat(message));
}
}
-
function nativeIsNaN(num) {
var native = Number.isNaN || window.isNaN;
return native(num);
}
-
function nativeIsFinite(num) {
var native = Number.isFinite || window.isFinite;
return native(num);
}
-
function getMatchDelay(delay) {
var DEFAULT_DELAY = 1e3;
var parsedDelay = parseInt(delay, 10);
var delayMatch = nativeIsNaN(parsedDelay) ? DEFAULT_DELAY : parsedDelay;
return delayMatch;
}
-
function shouldMatchAnyDelay(delay) {
return delay === "*";
}
-
var updatedArgs = args ? [].concat(source).concat(args) : [source];
-
try {
adjustSetTimeout.apply(this, updatedArgs);
} catch (e) {
console.log(e);
}
}
-
function debugCurrentInlineScript(source, args) {
function debugCurrentInlineScript(source, property, search) {
var searchRegexp = toRegExp(search);
var rid = randomId();
-
var getCurrentScript = function getCurrentScript() {
if ("currentScript" in document) {
return document.currentScript;
}
-
var scripts = document.getElementsByTagName("script");
return scripts[scripts.length - 1];
};
-
var ourScript = getCurrentScript();
-
var abort = function abort() {
var scriptEl = getCurrentScript();
-
if (!scriptEl) {
return;
}
-
var content = scriptEl.textContent;
-
try {
var textContentGetter = Object.getOwnPropertyDescriptor(Node.prototype, "textContent").get;
content = textContentGetter.call(scriptEl);
} catch (e) {}
-
if (scriptEl instanceof HTMLScriptElement && content.length > 0 && scriptEl !== ourScript && searchRegexp.test(content)) {
hit(source);
debugger;
}
};
-
var setChainPropAccess = function setChainPropAccess(owner, property) {
var chainInfo = getPropertyInChain(owner, property);
var base = chainInfo.base;
var prop = chainInfo.prop,
- chain = chainInfo.chain;
-
+ chain = chainInfo.chain;
if (base instanceof Object === false && base === null) {
var props = property.split(".");
var propIndex = props.indexOf(prop);
@@ -17560,16 +14868,13 @@
logMessage(message, source.verbose);
return;
}
-
if (chain) {
var setter = function setter(a) {
base = a;
-
if (a instanceof Object) {
setChainPropAccess(a, chain);
}
};
-
Object.defineProperty(owner, prop, {
get: function get() {
return base;
@@ -17578,7 +14883,6 @@
});
return;
}
-
var currentValue = base[prop];
setPropertyAccess(base, prop, {
set: function set(value) {
@@ -17591,38 +14895,29 @@
}
});
};
-
setChainPropAccess(window, property);
window.onerror = createOnErrorHandler(rid).bind();
}
-
function randomId() {
- return Math.random().toString(36).substr(2, 9);
+ return Math.random().toString(36).slice(2, 9);
}
-
function setPropertyAccess(object, property, descriptor) {
var currentDescriptor = Object.getOwnPropertyDescriptor(object, property);
-
if (currentDescriptor && !currentDescriptor.configurable) {
return false;
}
-
Object.defineProperty(object, property, descriptor);
return true;
}
-
function getPropertyInChain(base, chain) {
var pos = chain.indexOf(".");
-
if (pos === -1) {
return {
base: base,
prop: chain
};
}
-
var prop = chain.slice(0, pos);
-
if (base === null) {
return {
base: base,
@@ -17630,10 +14925,8 @@
chain: chain
};
}
-
var nextBase = base[prop];
chain = chain.slice(pos + 1);
-
if ((base instanceof Object || typeof base === "object") && isEmptyObject(base)) {
return {
base: base,
@@ -17641,7 +14934,6 @@
chain: chain
};
}
-
if (nextBase === null) {
return {
base: base,
@@ -17649,11 +14941,9 @@
chain: chain
};
}
-
if (nextBase !== undefined) {
return getPropertyInChain(nextBase, chain);
}
-
Object.defineProperty(base, prop, {
configurable: true
});
@@ -17663,141 +14953,102 @@
chain: chain
};
}
-
function toRegExp() {
var input = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : "";
var DEFAULT_VALUE = ".?";
var FORWARD_SLASH = "/";
-
if (input === "") {
return new RegExp(DEFAULT_VALUE);
}
-
if (input[0] === FORWARD_SLASH && input[input.length - 1] === FORWARD_SLASH) {
return new RegExp(input.slice(1, -1));
}
-
var escaped = input.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
return new RegExp(escaped);
}
-
function createOnErrorHandler(rid) {
var nativeOnError = window.onerror;
return function onError(error) {
if (typeof error === "string" && error.indexOf(rid) !== -1) {
return true;
}
-
if (nativeOnError instanceof Function) {
for (var _len = arguments.length, args = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {
args[_key - 1] = arguments[_key];
}
-
return nativeOnError.apply(this, [error].concat(args));
}
-
return false;
};
}
-
- function hit(source, message) {
+ function hit(source) {
if (source.verbose !== true) {
return;
}
-
try {
var log = console.log.bind(console);
var trace = console.trace.bind(console);
var prefix = source.ruleText || "";
-
if (source.domainName) {
var AG_SCRIPTLET_MARKER = "#%#//";
var UBO_SCRIPTLET_MARKER = "##+js";
var ruleStartIndex;
-
if (source.ruleText.indexOf(AG_SCRIPTLET_MARKER) > -1) {
ruleStartIndex = source.ruleText.indexOf(AG_SCRIPTLET_MARKER);
} else if (source.ruleText.indexOf(UBO_SCRIPTLET_MARKER) > -1) {
ruleStartIndex = source.ruleText.indexOf(UBO_SCRIPTLET_MARKER);
}
-
var rulePart = source.ruleText.slice(ruleStartIndex);
prefix = "".concat(source.domainName).concat(rulePart);
}
-
- var LOG_MARKER = "log: ";
-
- if (message) {
- if (message.indexOf(LOG_MARKER) === -1) {
- log("".concat(prefix, " message:\n").concat(message));
- } else {
- log(message.slice(LOG_MARKER.length));
- }
- }
-
log("".concat(prefix, " trace start"));
-
if (trace) {
trace();
}
-
log("".concat(prefix, " trace end"));
} catch (e) {}
-
if (typeof window.__debug === "function") {
window.__debug(source);
}
}
-
function logMessage(source, message) {
var forced = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;
-
if (forced || source.verbose) {
console.log("".concat(source.name, ": ").concat(message));
}
}
-
function isEmptyObject(obj) {
- return Object.keys(obj).length === 0;
+ return Object.keys(obj).length === 0 && !obj.prototype;
}
-
var updatedArgs = args ? [].concat(source).concat(args) : [source];
-
try {
debugCurrentInlineScript.apply(this, updatedArgs);
} catch (e) {
console.log(e);
}
}
-
function debugOnPropertyRead(source, args) {
function debugOnPropertyRead(source, property) {
if (!property) {
return;
}
-
var rid = randomId();
-
var abort = function abort() {
hit(source);
debugger;
};
-
var setChainPropAccess = function setChainPropAccess(owner, property) {
var chainInfo = getPropertyInChain(owner, property);
var base = chainInfo.base;
var prop = chainInfo.prop,
- chain = chainInfo.chain;
-
+ chain = chainInfo.chain;
if (chain) {
var setter = function setter(a) {
base = a;
-
if (a instanceof Object) {
setChainPropAccess(a, chain);
}
};
-
Object.defineProperty(owner, prop, {
get: function get() {
return base;
@@ -17806,44 +15057,34 @@
});
return;
}
-
setPropertyAccess(base, prop, {
get: abort,
set: noopFunc
});
};
-
setChainPropAccess(window, property);
window.onerror = createOnErrorHandler(rid).bind();
}
-
function randomId() {
- return Math.random().toString(36).substr(2, 9);
+ return Math.random().toString(36).slice(2, 9);
}
-
function setPropertyAccess(object, property, descriptor) {
var currentDescriptor = Object.getOwnPropertyDescriptor(object, property);
-
if (currentDescriptor && !currentDescriptor.configurable) {
return false;
}
-
Object.defineProperty(object, property, descriptor);
return true;
}
-
function getPropertyInChain(base, chain) {
var pos = chain.indexOf(".");
-
if (pos === -1) {
return {
base: base,
prop: chain
};
}
-
var prop = chain.slice(0, pos);
-
if (base === null) {
return {
base: base,
@@ -17851,10 +15092,8 @@
chain: chain
};
}
-
var nextBase = base[prop];
chain = chain.slice(pos + 1);
-
if ((base instanceof Object || typeof base === "object") && isEmptyObject(base)) {
return {
base: base,
@@ -17862,7 +15101,6 @@
chain: chain
};
}
-
if (nextBase === null) {
return {
base: base,
@@ -17870,11 +15108,9 @@
chain: chain
};
}
-
if (nextBase !== undefined) {
return getPropertyInChain(nextBase, chain);
}
-
Object.defineProperty(base, prop, {
configurable: true
});
@@ -17884,118 +15120,84 @@
chain: chain
};
}
-
function createOnErrorHandler(rid) {
var nativeOnError = window.onerror;
return function onError(error) {
if (typeof error === "string" && error.indexOf(rid) !== -1) {
return true;
}
-
if (nativeOnError instanceof Function) {
for (var _len = arguments.length, args = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {
args[_key - 1] = arguments[_key];
}
-
return nativeOnError.apply(this, [error].concat(args));
}
-
return false;
};
}
-
- function hit(source, message) {
+ function hit(source) {
if (source.verbose !== true) {
return;
}
-
try {
var log = console.log.bind(console);
var trace = console.trace.bind(console);
var prefix = source.ruleText || "";
-
if (source.domainName) {
var AG_SCRIPTLET_MARKER = "#%#//";
var UBO_SCRIPTLET_MARKER = "##+js";
var ruleStartIndex;
-
if (source.ruleText.indexOf(AG_SCRIPTLET_MARKER) > -1) {
ruleStartIndex = source.ruleText.indexOf(AG_SCRIPTLET_MARKER);
} else if (source.ruleText.indexOf(UBO_SCRIPTLET_MARKER) > -1) {
ruleStartIndex = source.ruleText.indexOf(UBO_SCRIPTLET_MARKER);
}
-
var rulePart = source.ruleText.slice(ruleStartIndex);
prefix = "".concat(source.domainName).concat(rulePart);
}
-
- var LOG_MARKER = "log: ";
-
- if (message) {
- if (message.indexOf(LOG_MARKER) === -1) {
- log("".concat(prefix, " message:\n").concat(message));
- } else {
- log(message.slice(LOG_MARKER.length));
- }
- }
-
log("".concat(prefix, " trace start"));
-
if (trace) {
trace();
}
-
log("".concat(prefix, " trace end"));
} catch (e) {}
-
if (typeof window.__debug === "function") {
window.__debug(source);
}
}
-
function noopFunc() {}
-
function isEmptyObject(obj) {
- return Object.keys(obj).length === 0;
+ return Object.keys(obj).length === 0 && !obj.prototype;
}
-
var updatedArgs = args ? [].concat(source).concat(args) : [source];
-
try {
debugOnPropertyRead.apply(this, updatedArgs);
} catch (e) {
console.log(e);
}
}
-
function debugOnPropertyWrite(source, args) {
function debugOnPropertyWrite(source, property) {
if (!property) {
return;
}
-
var rid = randomId();
-
var abort = function abort() {
hit(source);
debugger;
};
-
var setChainPropAccess = function setChainPropAccess(owner, property) {
var chainInfo = getPropertyInChain(owner, property);
var base = chainInfo.base;
var prop = chainInfo.prop,
- chain = chainInfo.chain;
-
+ chain = chainInfo.chain;
if (chain) {
var setter = function setter(a) {
base = a;
-
if (a instanceof Object) {
setChainPropAccess(a, chain);
}
};
-
Object.defineProperty(owner, prop, {
get: function get() {
return base;
@@ -18004,43 +15206,33 @@
});
return;
}
-
setPropertyAccess(base, prop, {
set: abort
});
};
-
setChainPropAccess(window, property);
window.onerror = createOnErrorHandler(rid).bind();
}
-
function randomId() {
- return Math.random().toString(36).substr(2, 9);
+ return Math.random().toString(36).slice(2, 9);
}
-
function setPropertyAccess(object, property, descriptor) {
var currentDescriptor = Object.getOwnPropertyDescriptor(object, property);
-
if (currentDescriptor && !currentDescriptor.configurable) {
return false;
}
-
Object.defineProperty(object, property, descriptor);
return true;
}
-
function getPropertyInChain(base, chain) {
var pos = chain.indexOf(".");
-
if (pos === -1) {
return {
base: base,
prop: chain
};
}
-
var prop = chain.slice(0, pos);
-
if (base === null) {
return {
base: base,
@@ -18048,10 +15240,8 @@
chain: chain
};
}
-
var nextBase = base[prop];
chain = chain.slice(pos + 1);
-
if ((base instanceof Object || typeof base === "object") && isEmptyObject(base)) {
return {
base: base,
@@ -18059,7 +15249,6 @@
chain: chain
};
}
-
if (nextBase === null) {
return {
base: base,
@@ -18067,11 +15256,9 @@
chain: chain
};
}
-
if (nextBase !== undefined) {
return getPropertyInChain(nextBase, chain);
}
-
Object.defineProperty(base, prop, {
configurable: true
});
@@ -18081,174 +15268,114 @@
chain: chain
};
}
-
function createOnErrorHandler(rid) {
var nativeOnError = window.onerror;
return function onError(error) {
if (typeof error === "string" && error.indexOf(rid) !== -1) {
return true;
}
-
if (nativeOnError instanceof Function) {
for (var _len = arguments.length, args = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {
args[_key - 1] = arguments[_key];
}
-
return nativeOnError.apply(this, [error].concat(args));
}
-
return false;
};
}
-
- function hit(source, message) {
+ function hit(source) {
if (source.verbose !== true) {
return;
}
-
try {
var log = console.log.bind(console);
var trace = console.trace.bind(console);
var prefix = source.ruleText || "";
-
if (source.domainName) {
var AG_SCRIPTLET_MARKER = "#%#//";
var UBO_SCRIPTLET_MARKER = "##+js";
var ruleStartIndex;
-
if (source.ruleText.indexOf(AG_SCRIPTLET_MARKER) > -1) {
ruleStartIndex = source.ruleText.indexOf(AG_SCRIPTLET_MARKER);
} else if (source.ruleText.indexOf(UBO_SCRIPTLET_MARKER) > -1) {
ruleStartIndex = source.ruleText.indexOf(UBO_SCRIPTLET_MARKER);
}
-
var rulePart = source.ruleText.slice(ruleStartIndex);
prefix = "".concat(source.domainName).concat(rulePart);
}
-
- var LOG_MARKER = "log: ";
-
- if (message) {
- if (message.indexOf(LOG_MARKER) === -1) {
- log("".concat(prefix, " message:\n").concat(message));
- } else {
- log(message.slice(LOG_MARKER.length));
- }
- }
-
log("".concat(prefix, " trace start"));
-
if (trace) {
trace();
}
-
log("".concat(prefix, " trace end"));
} catch (e) {}
-
if (typeof window.__debug === "function") {
window.__debug(source);
}
}
-
function isEmptyObject(obj) {
- return Object.keys(obj).length === 0;
+ return Object.keys(obj).length === 0 && !obj.prototype;
}
-
var updatedArgs = args ? [].concat(source).concat(args) : [source];
-
try {
debugOnPropertyWrite.apply(this, updatedArgs);
} catch (e) {
console.log(e);
}
}
-
function dirString(source, args) {
function dirString(source, times) {
var _console = console,
- dir = _console.dir;
- times = parseInt(times, 10);
-
+ dir = _console.dir;
function dirWrapper(object) {
- var temp;
-
- for (var i = 0; i < times; i += 1) {
- temp = "".concat(object);
- }
-
if (typeof dir === "function") {
dir.call(this, object);
}
-
- hit(source, temp);
+ hit(source);
}
-
console.dir = dirWrapper;
}
-
- function hit(source, message) {
+ function hit(source) {
if (source.verbose !== true) {
return;
}
-
try {
var log = console.log.bind(console);
var trace = console.trace.bind(console);
var prefix = source.ruleText || "";
-
if (source.domainName) {
var AG_SCRIPTLET_MARKER = "#%#//";
var UBO_SCRIPTLET_MARKER = "##+js";
var ruleStartIndex;
-
if (source.ruleText.indexOf(AG_SCRIPTLET_MARKER) > -1) {
ruleStartIndex = source.ruleText.indexOf(AG_SCRIPTLET_MARKER);
} else if (source.ruleText.indexOf(UBO_SCRIPTLET_MARKER) > -1) {
ruleStartIndex = source.ruleText.indexOf(UBO_SCRIPTLET_MARKER);
}
-
var rulePart = source.ruleText.slice(ruleStartIndex);
prefix = "".concat(source.domainName).concat(rulePart);
}
-
- var LOG_MARKER = "log: ";
-
- if (message) {
- if (message.indexOf(LOG_MARKER) === -1) {
- log("".concat(prefix, " message:\n").concat(message));
- } else {
- log(message.slice(LOG_MARKER.length));
- }
- }
-
log("".concat(prefix, " trace start"));
-
if (trace) {
trace();
}
-
log("".concat(prefix, " trace end"));
} catch (e) {}
-
if (typeof window.__debug === "function") {
window.__debug(source);
}
}
-
var updatedArgs = args ? [].concat(source).concat(args) : [source];
-
try {
dirString.apply(this, updatedArgs);
} catch (e) {
console.log(e);
}
}
-
function disableNewtabLinks(source, args) {
function disableNewtabLinks(source) {
document.addEventListener("click", function (ev) {
var target = ev.target;
-
while (target !== null) {
if (target.localName === "a" && target.hasAttribute("target")) {
ev.stopPropagation();
@@ -18256,79 +15383,55 @@
hit(source);
break;
}
-
target = target.parentNode;
}
});
}
-
- function hit(source, message) {
+ function hit(source) {
if (source.verbose !== true) {
return;
}
-
try {
var log = console.log.bind(console);
var trace = console.trace.bind(console);
var prefix = source.ruleText || "";
-
if (source.domainName) {
var AG_SCRIPTLET_MARKER = "#%#//";
var UBO_SCRIPTLET_MARKER = "##+js";
var ruleStartIndex;
-
if (source.ruleText.indexOf(AG_SCRIPTLET_MARKER) > -1) {
ruleStartIndex = source.ruleText.indexOf(AG_SCRIPTLET_MARKER);
} else if (source.ruleText.indexOf(UBO_SCRIPTLET_MARKER) > -1) {
ruleStartIndex = source.ruleText.indexOf(UBO_SCRIPTLET_MARKER);
}
-
var rulePart = source.ruleText.slice(ruleStartIndex);
prefix = "".concat(source.domainName).concat(rulePart);
}
-
- var LOG_MARKER = "log: ";
-
- if (message) {
- if (message.indexOf(LOG_MARKER) === -1) {
- log("".concat(prefix, " message:\n").concat(message));
- } else {
- log(message.slice(LOG_MARKER.length));
- }
- }
-
log("".concat(prefix, " trace start"));
-
if (trace) {
trace();
}
-
log("".concat(prefix, " trace end"));
} catch (e) {}
-
if (typeof window.__debug === "function") {
window.__debug(source);
}
}
-
var updatedArgs = args ? [].concat(source).concat(args) : [source];
-
try {
disableNewtabLinks.apply(this, updatedArgs);
} catch (e) {
console.log(e);
}
}
-
function forceWindowClose(source, args) {
function forceWindowClose(source) {
var path = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : "";
-
if (typeof window.close !== "function") {
var message = "window.close() is not a function so 'close-window' scriptlet is unavailable";
logMessage(source, message);
+ return;
}
-
var closeImmediately = function closeImmediately() {
try {
hit(source);
@@ -18337,12 +15440,10 @@
logMessage(source, e);
}
};
-
var closeByExtension = function closeByExtension() {
var extCall = function extCall() {
dispatchEvent(new Event("adguard:scriptlet-close-window"));
};
-
window.addEventListener("adguard:subscribed-to-close-window", extCall, {
once: true
});
@@ -18352,202 +15453,141 @@
});
}, 5e3);
};
-
var shouldClose = function shouldClose() {
if (path === "") {
return true;
}
-
var pathRegexp = toRegExp(path);
var currentPath = "".concat(window.location.pathname).concat(window.location.search);
return pathRegexp.test(currentPath);
};
-
if (shouldClose()) {
closeImmediately();
-
if (navigator.userAgent.indexOf("Chrome") > -1) {
closeByExtension();
}
}
}
-
- function hit(source, message) {
+ function hit(source) {
if (source.verbose !== true) {
return;
}
-
try {
var log = console.log.bind(console);
var trace = console.trace.bind(console);
var prefix = source.ruleText || "";
-
if (source.domainName) {
var AG_SCRIPTLET_MARKER = "#%#//";
var UBO_SCRIPTLET_MARKER = "##+js";
var ruleStartIndex;
-
if (source.ruleText.indexOf(AG_SCRIPTLET_MARKER) > -1) {
ruleStartIndex = source.ruleText.indexOf(AG_SCRIPTLET_MARKER);
} else if (source.ruleText.indexOf(UBO_SCRIPTLET_MARKER) > -1) {
ruleStartIndex = source.ruleText.indexOf(UBO_SCRIPTLET_MARKER);
}
-
var rulePart = source.ruleText.slice(ruleStartIndex);
prefix = "".concat(source.domainName).concat(rulePart);
}
-
- var LOG_MARKER = "log: ";
-
- if (message) {
- if (message.indexOf(LOG_MARKER) === -1) {
- log("".concat(prefix, " message:\n").concat(message));
- } else {
- log(message.slice(LOG_MARKER.length));
- }
- }
-
log("".concat(prefix, " trace start"));
-
if (trace) {
trace();
}
-
log("".concat(prefix, " trace end"));
} catch (e) {}
-
if (typeof window.__debug === "function") {
window.__debug(source);
}
}
-
function toRegExp() {
var input = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : "";
var DEFAULT_VALUE = ".?";
var FORWARD_SLASH = "/";
-
if (input === "") {
return new RegExp(DEFAULT_VALUE);
}
-
if (input[0] === FORWARD_SLASH && input[input.length - 1] === FORWARD_SLASH) {
return new RegExp(input.slice(1, -1));
}
-
var escaped = input.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
return new RegExp(escaped);
}
-
function logMessage(source, message) {
var forced = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;
-
if (forced || source.verbose) {
console.log("".concat(source.name, ": ").concat(message));
}
}
-
var updatedArgs = args ? [].concat(source).concat(args) : [source];
-
try {
forceWindowClose.apply(this, updatedArgs);
} catch (e) {
console.log(e);
}
}
-
function hideInShadowDom(source, args) {
function hideInShadowDom(source, selector, baseSelector) {
if (!Element.prototype.attachShadow) {
return;
}
-
var hideElement = function hideElement(targetElement) {
var DISPLAY_NONE_CSS = "display:none!important;";
targetElement.style.cssText = DISPLAY_NONE_CSS;
};
-
var hideHandler = function hideHandler() {
var hostElements = !baseSelector ? findHostElements(document.documentElement) : document.querySelectorAll(baseSelector);
-
while (hostElements.length !== 0) {
var isHidden = false;
-
var _pierceShadowDom = pierceShadowDom(selector, hostElements),
- targets = _pierceShadowDom.targets,
- innerHosts = _pierceShadowDom.innerHosts;
-
+ targets = _pierceShadowDom.targets,
+ innerHosts = _pierceShadowDom.innerHosts;
targets.forEach(function (targetEl) {
hideElement(targetEl);
isHidden = true;
});
-
if (isHidden) {
hit(source);
}
-
hostElements = innerHosts;
}
};
-
hideHandler();
observeDOMChanges(hideHandler, true);
}
-
- function hit(source, message) {
+ function hit(source) {
if (source.verbose !== true) {
return;
}
-
try {
var log = console.log.bind(console);
var trace = console.trace.bind(console);
var prefix = source.ruleText || "";
-
if (source.domainName) {
var AG_SCRIPTLET_MARKER = "#%#//";
var UBO_SCRIPTLET_MARKER = "##+js";
var ruleStartIndex;
-
if (source.ruleText.indexOf(AG_SCRIPTLET_MARKER) > -1) {
ruleStartIndex = source.ruleText.indexOf(AG_SCRIPTLET_MARKER);
} else if (source.ruleText.indexOf(UBO_SCRIPTLET_MARKER) > -1) {
ruleStartIndex = source.ruleText.indexOf(UBO_SCRIPTLET_MARKER);
}
-
var rulePart = source.ruleText.slice(ruleStartIndex);
prefix = "".concat(source.domainName).concat(rulePart);
}
-
- var LOG_MARKER = "log: ";
-
- if (message) {
- if (message.indexOf(LOG_MARKER) === -1) {
- log("".concat(prefix, " message:\n").concat(message));
- } else {
- log(message.slice(LOG_MARKER.length));
- }
- }
-
log("".concat(prefix, " trace start"));
-
if (trace) {
trace();
}
-
log("".concat(prefix, " trace end"));
} catch (e) {}
-
if (typeof window.__debug === "function") {
window.__debug(source);
}
}
-
function observeDOMChanges(callback) {
var observeAttrs = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;
var attrsToObserve = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : [];
var THROTTLE_DELAY_MS = 20;
var observer = new MutationObserver(throttle(callbackWrapper, THROTTLE_DELAY_MS));
-
var connect = function connect() {
if (attrsToObserve.length > 0) {
observer.observe(document.documentElement, {
@@ -18564,20 +15604,16 @@
});
}
};
-
var disconnect = function disconnect() {
observer.disconnect();
};
-
function callbackWrapper() {
disconnect();
callback();
connect();
}
-
connect();
}
-
function findHostElements(rootElement) {
var hosts = [];
var domElems = rootElement.querySelectorAll("*");
@@ -18588,7 +15624,6 @@
});
return hosts;
}
-
function pierceShadowDom(selector, hostElements) {
var targets = [];
var innerHostsAcc = [];
@@ -18606,17 +15641,14 @@
innerHosts: innerHosts
};
}
-
function flatten(input) {
var stack = [];
input.forEach(function (el) {
return stack.push(el);
});
var res = [];
-
while (stack.length) {
var next = stack.pop();
-
if (Array.isArray(next)) {
next.forEach(function (el) {
return stack.push(el);
@@ -18625,83 +15657,66 @@
res.push(next);
}
}
-
return res.reverse();
}
-
function throttle(cb, delay) {
var wait = false;
var savedArgs;
-
var wrapper = function wrapper() {
for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
args[_key] = arguments[_key];
}
-
if (wait) {
savedArgs = args;
return;
}
-
cb.apply(void 0, args);
wait = true;
setTimeout(function () {
wait = false;
-
if (savedArgs) {
wrapper(savedArgs);
savedArgs = null;
}
}, delay);
};
-
return wrapper;
}
-
var updatedArgs = args ? [].concat(source).concat(args) : [source];
-
try {
hideInShadowDom.apply(this, updatedArgs);
} catch (e) {
console.log(e);
}
}
-
function jsonPrune(source, args) {
function jsonPrune(source, propsToRemove, requiredInitialProps, stack) {
if (!!stack && !matchStackTrace(stack, new Error().stack)) {
return;
}
-
var prunePaths = propsToRemove !== undefined && propsToRemove !== "" ? propsToRemove.split(/ +/) : [];
var requiredPaths = requiredInitialProps !== undefined && requiredInitialProps !== "" ? requiredInitialProps.split(/ +/) : [];
-
function isPruningNeeded(root) {
if (!root) {
return false;
}
-
var shouldProcess;
-
if (prunePaths.length === 0 && requiredPaths.length > 0) {
var rootString = JSON.stringify(root);
var matchRegex = toRegExp(requiredPaths.join(""));
var shouldLog = matchRegex.test(rootString);
-
if (shouldLog) {
- logMessage(source, "".concat(window.location.hostname, " ").concat(root), true);
+ logMessage(source, "".concat(window.location.hostname, " ").concat(objectToString(root)), true);
shouldProcess = false;
return shouldProcess;
}
}
-
for (var i = 0; i < requiredPaths.length; i += 1) {
var requiredPath = requiredPaths[i];
var lastNestedPropName = requiredPath.split(".").pop();
var hasWildcard = requiredPath.indexOf(".*.") > -1 || requiredPath.indexOf("*.") > -1 || requiredPath.indexOf(".*") > -1 || requiredPath.indexOf(".[].") > -1 || requiredPath.indexOf("[].") > -1 || requiredPath.indexOf(".[]") > -1;
var details = getWildcardPropertyInChain(root, requiredPath, hasWildcard);
shouldProcess = !hasWildcard;
-
for (var _i = 0; _i < details.length; _i += 1) {
if (hasWildcard) {
shouldProcess = !(details[_i].base[lastNestedPropName] === undefined) || shouldProcess;
@@ -18710,21 +15725,17 @@
}
}
}
-
return shouldProcess;
}
-
var jsonPruner = function jsonPruner(root) {
if (prunePaths.length === 0 && requiredPaths.length === 0) {
- logMessage(source, "".concat(window.location.hostname, " ").concat(root), true);
+ logMessage(source, "".concat(window.location.hostname, " ").concat(objectToString(root)), true);
return root;
}
-
try {
if (isPruningNeeded(root) === false) {
return root;
}
-
prunePaths.forEach(function (path) {
var ownerObjArr = getWildcardPropertyInChain(root, path, true);
ownerObjArr.forEach(function (ownerObj) {
@@ -18737,109 +15748,77 @@
} catch (e) {
logMessage(source, e);
}
-
return root;
};
-
var nativeJSONParse = JSON.parse;
-
var jsonParseWrapper = function jsonParseWrapper() {
for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
args[_key] = arguments[_key];
}
-
var root = nativeJSONParse.apply(JSON, args);
return jsonPruner(root);
};
-
jsonParseWrapper.toString = nativeJSONParse.toString.bind(nativeJSONParse);
JSON.parse = jsonParseWrapper;
var nativeResponseJson = Response.prototype.json;
-
var responseJsonWrapper = function responseJsonWrapper() {
var promise = nativeResponseJson.apply(this);
return promise.then(function (obj) {
return jsonPruner(obj);
});
};
-
if (typeof Response === "undefined") {
return;
}
-
Response.prototype.json = responseJsonWrapper;
}
-
- function hit(source, message) {
+ function hit(source) {
if (source.verbose !== true) {
return;
}
-
try {
var log = console.log.bind(console);
var trace = console.trace.bind(console);
var prefix = source.ruleText || "";
-
if (source.domainName) {
var AG_SCRIPTLET_MARKER = "#%#//";
var UBO_SCRIPTLET_MARKER = "##+js";
var ruleStartIndex;
-
if (source.ruleText.indexOf(AG_SCRIPTLET_MARKER) > -1) {
ruleStartIndex = source.ruleText.indexOf(AG_SCRIPTLET_MARKER);
} else if (source.ruleText.indexOf(UBO_SCRIPTLET_MARKER) > -1) {
ruleStartIndex = source.ruleText.indexOf(UBO_SCRIPTLET_MARKER);
}
-
var rulePart = source.ruleText.slice(ruleStartIndex);
prefix = "".concat(source.domainName).concat(rulePart);
}
-
- var LOG_MARKER = "log: ";
-
- if (message) {
- if (message.indexOf(LOG_MARKER) === -1) {
- log("".concat(prefix, " message:\n").concat(message));
- } else {
- log(message.slice(LOG_MARKER.length));
- }
- }
-
log("".concat(prefix, " trace start"));
-
if (trace) {
trace();
}
-
log("".concat(prefix, " trace end"));
} catch (e) {}
-
if (typeof window.__debug === "function") {
window.__debug(source);
}
}
-
function matchStackTrace(stackMatch, stackTrace) {
if (!stackMatch || stackMatch === "") {
return true;
}
-
if (shouldAbortInlineOrInjectedScript(stackMatch, stackTrace)) {
return true;
}
-
var stackRegexp = toRegExp(stackMatch);
var refinedStackTrace = stackTrace.split("\n").slice(2).map(function (line) {
return line.trim();
}).join("\n");
return getNativeRegexpTest().call(stackRegexp, refinedStackTrace);
}
-
function getWildcardPropertyInChain(base, chain) {
var lookThrough = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;
var output = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : [];
var pos = chain.indexOf(".");
-
if (pos === -1) {
if (chain === "*" || chain === "[]") {
for (var key in base) {
@@ -18856,13 +15835,10 @@
prop: chain
});
}
-
return output;
}
-
var prop = chain.slice(0, pos);
var shouldLookThrough = prop === "[]" && Array.isArray(base) || prop === "*" && base instanceof Object;
-
if (shouldLookThrough) {
var nextProp = chain.slice(pos + 1);
var baseKeys = Object.keys(base);
@@ -18871,95 +15847,155 @@
getWildcardPropertyInChain(item, nextProp, lookThrough, output);
});
}
-
var nextBase = base[prop];
chain = chain.slice(pos + 1);
-
if (nextBase !== undefined) {
getWildcardPropertyInChain(nextBase, chain, lookThrough, output);
}
-
return output;
}
-
function logMessage(source, message) {
var forced = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;
-
if (forced || source.verbose) {
console.log("".concat(source.name, ": ").concat(message));
}
}
-
+ function objectToString(obj) {
+ return isEmptyObject(obj) ? "{}" : getObjectEntries(obj).map(function (pair) {
+ var key = pair[0];
+ var value = pair[1];
+ var recordValueStr = value;
+ if (value instanceof Object) {
+ recordValueStr = "{ ".concat(objectToString(value), " }");
+ }
+ return "".concat(key, ':"').concat(recordValueStr, '"');
+ }).join(" ");
+ }
function toRegExp() {
var input = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : "";
var DEFAULT_VALUE = ".?";
var FORWARD_SLASH = "/";
-
if (input === "") {
return new RegExp(DEFAULT_VALUE);
}
-
if (input[0] === FORWARD_SLASH && input[input.length - 1] === FORWARD_SLASH) {
return new RegExp(input.slice(1, -1));
}
-
var escaped = input.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
return new RegExp(escaped);
}
-
+ function isEmptyObject(obj) {
+ return Object.keys(obj).length === 0 && !obj.prototype;
+ }
+ function getObjectEntries(object) {
+ var keys = Object.keys(object);
+ var entries = [];
+ keys.forEach(function (key) {
+ return entries.push([key, object[key]]);
+ });
+ return entries;
+ }
function getNativeRegexpTest() {
return Object.getOwnPropertyDescriptor(RegExp.prototype, "test").value;
}
-
+ function shouldAbortInlineOrInjectedScript(stackMatch, stackTrace) {
+ var INLINE_SCRIPT_STRING = "inlineScript";
+ var INJECTED_SCRIPT_STRING = "injectedScript";
+ var INJECTED_SCRIPT_MARKER = "";
+ var isInlineScript = function isInlineScript(stackMatch) {
+ return stackMatch.indexOf(INLINE_SCRIPT_STRING) > -1;
+ };
+ var isInjectedScript = function isInjectedScript(stackMatch) {
+ return stackMatch.indexOf(INJECTED_SCRIPT_STRING) > -1;
+ };
+ if (!(isInlineScript(stackMatch) || isInjectedScript(stackMatch))) {
+ return false;
+ }
+ var documentURL = window.location.href;
+ var pos = documentURL.indexOf("#");
+ if (pos !== -1) {
+ documentURL = documentURL.slice(0, pos);
+ }
+ var stackSteps = stackTrace.split("\n").slice(2).map(function (line) {
+ return line.trim();
+ });
+ var stackLines = stackSteps.map(function (line) {
+ var stack;
+ var getStackTraceURL = /(.*?@)?(\S+)(:\d+):\d+\)?$/.exec(line);
+ if (getStackTraceURL) {
+ var stackURL = getStackTraceURL[2];
+ if (startsWith(stackURL, "(")) {
+ stackURL = stackURL.slice(1);
+ }
+ if (startsWith(stackURL, INJECTED_SCRIPT_MARKER)) {
+ stackURL = INJECTED_SCRIPT_STRING;
+ var stackFunction = getStackTraceURL[1] !== undefined ? getStackTraceURL[1].slice(0, -1) : line.slice(0, getStackTraceURL.index).trim();
+ if (startsWith(stackFunction, "at")) {
+ stackFunction = stackFunction.slice(2).trim();
+ }
+ stack = "".concat(stackFunction, " ").concat(stackURL).trim();
+ } else {
+ stack = stackURL;
+ }
+ } else {
+ stack = line;
+ }
+ return stack;
+ });
+ if (stackLines) {
+ for (var index = 0; index < stackLines.length; index += 1) {
+ if (isInlineScript(stackMatch) && documentURL === stackLines[index]) {
+ return true;
+ }
+ if (isInjectedScript(stackMatch) && startsWith(stackLines[index], INJECTED_SCRIPT_STRING)) {
+ return true;
+ }
+ }
+ }
+ return false;
+ }
var updatedArgs = args ? [].concat(source).concat(args) : [source];
-
try {
jsonPrune.apply(this, updatedArgs);
} catch (e) {
console.log(e);
}
}
-
function log(source, args) {
function log() {
for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
args[_key] = arguments[_key];
}
-
console.log(args);
}
-
var updatedArgs = args ? [].concat(source).concat(args) : [source];
-
try {
log.apply(this, updatedArgs);
} catch (e) {
console.log(e);
}
}
-
function logAddEventListener(source, args) {
function logAddEventListener(source) {
var nativeAddEventListener = window.EventTarget.prototype.addEventListener;
-
function addEventListenerWrapper(type, listener) {
+ var _this$constructor;
if (validateType(type) && validateListener(listener)) {
var _message = 'addEventListener("'.concat(type, '", ').concat(listenerToString(listener), ")");
-
logMessage(source, _message, true);
hit(source);
}
-
var message = "Invalid event type or listener passed to addEventListener:\ntype: ".concat(convertTypeToString(type), "\nlistener: ").concat(convertTypeToString(listener));
logMessage(source, message, true);
-
+ var context = this;
+ if (this && ((_this$constructor = this.constructor) === null || _this$constructor === void 0 ? void 0 : _this$constructor.name) === "Window" && this !== window) {
+ context = window;
+ }
for (var _len = arguments.length, args = new Array(_len > 2 ? _len - 2 : 0), _key = 2; _key < _len; _key++) {
args[_key - 2] = arguments[_key];
}
-
- return nativeAddEventListener.apply(this, [type, listener].concat(args));
+ return nativeAddEventListener.apply(context, [type, listener].concat(args));
}
-
var descriptor = {
configurable: true,
set: function set() {},
@@ -18971,71 +16007,47 @@
Object.defineProperty(window, "addEventListener", descriptor);
Object.defineProperty(document, "addEventListener", descriptor);
}
-
- function hit(source, message) {
+ function hit(source) {
if (source.verbose !== true) {
return;
}
-
try {
var log = console.log.bind(console);
var trace = console.trace.bind(console);
var prefix = source.ruleText || "";
-
if (source.domainName) {
var AG_SCRIPTLET_MARKER = "#%#//";
var UBO_SCRIPTLET_MARKER = "##+js";
var ruleStartIndex;
-
if (source.ruleText.indexOf(AG_SCRIPTLET_MARKER) > -1) {
ruleStartIndex = source.ruleText.indexOf(AG_SCRIPTLET_MARKER);
} else if (source.ruleText.indexOf(UBO_SCRIPTLET_MARKER) > -1) {
ruleStartIndex = source.ruleText.indexOf(UBO_SCRIPTLET_MARKER);
}
-
var rulePart = source.ruleText.slice(ruleStartIndex);
prefix = "".concat(source.domainName).concat(rulePart);
}
-
- var LOG_MARKER = "log: ";
-
- if (message) {
- if (message.indexOf(LOG_MARKER) === -1) {
- log("".concat(prefix, " message:\n").concat(message));
- } else {
- log(message.slice(LOG_MARKER.length));
- }
- }
-
log("".concat(prefix, " trace start"));
-
if (trace) {
trace();
}
-
log("".concat(prefix, " trace end"));
} catch (e) {}
-
if (typeof window.__debug === "function") {
window.__debug(source);
}
}
-
function validateType(type) {
return typeof type !== "undefined";
}
-
function validateListener(listener) {
return typeof listener !== "undefined" && (typeof listener === "function" || typeof listener === "object" && listener !== null && typeof listener.handleEvent === "function");
}
-
function listenerToString(listener) {
return typeof listener === "function" ? listener.toString() : listener.handleEvent.toString();
}
-
function convertTypeToString(value) {
var output;
-
if (typeof value === "undefined") {
output = "undefined";
} else if (typeof value === "object") {
@@ -19047,36 +16059,28 @@
} else {
output = value.toString();
}
-
return output;
}
-
function logMessage(source, message) {
var forced = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;
-
if (forced || source.verbose) {
console.log("".concat(source.name, ": ").concat(message));
}
}
-
function objectToString(obj) {
return isEmptyObject(obj) ? "{}" : getObjectEntries(obj).map(function (pair) {
var key = pair[0];
var value = pair[1];
var recordValueStr = value;
-
if (value instanceof Object) {
recordValueStr = "{ ".concat(objectToString(value), " }");
}
-
return "".concat(key, ':"').concat(recordValueStr, '"');
}).join(" ");
}
-
function isEmptyObject(obj) {
- return Object.keys(obj).length === 0;
+ return Object.keys(obj).length === 0 && !obj.prototype;
}
-
function getObjectEntries(object) {
var keys = Object.keys(object);
var entries = [];
@@ -19085,117 +16089,83 @@
});
return entries;
}
-
var updatedArgs = args ? [].concat(source).concat(args) : [source];
-
try {
logAddEventListener.apply(this, updatedArgs);
} catch (e) {
console.log(e);
}
}
-
function logEval(source, args) {
function logEval(source) {
var nativeEval = window.eval;
-
function evalWrapper(str) {
hit(source);
logMessage(source, 'eval("'.concat(str, '")'), true);
return nativeEval(str);
}
-
window.eval = evalWrapper;
var nativeFunction = window.Function;
-
function FunctionWrapper() {
hit(source);
-
for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
args[_key] = arguments[_key];
}
-
logMessage(source, "new Function(".concat(args.join(", "), ")"), true);
return nativeFunction.apply(this, [].concat(args));
}
-
FunctionWrapper.prototype = Object.create(nativeFunction.prototype);
FunctionWrapper.prototype.constructor = FunctionWrapper;
window.Function = FunctionWrapper;
}
-
- function hit(source, message) {
+ function hit(source) {
if (source.verbose !== true) {
return;
}
-
try {
var log = console.log.bind(console);
var trace = console.trace.bind(console);
var prefix = source.ruleText || "";
-
if (source.domainName) {
var AG_SCRIPTLET_MARKER = "#%#//";
var UBO_SCRIPTLET_MARKER = "##+js";
var ruleStartIndex;
-
if (source.ruleText.indexOf(AG_SCRIPTLET_MARKER) > -1) {
ruleStartIndex = source.ruleText.indexOf(AG_SCRIPTLET_MARKER);
} else if (source.ruleText.indexOf(UBO_SCRIPTLET_MARKER) > -1) {
ruleStartIndex = source.ruleText.indexOf(UBO_SCRIPTLET_MARKER);
}
-
var rulePart = source.ruleText.slice(ruleStartIndex);
prefix = "".concat(source.domainName).concat(rulePart);
}
-
- var LOG_MARKER = "log: ";
-
- if (message) {
- if (message.indexOf(LOG_MARKER) === -1) {
- log("".concat(prefix, " message:\n").concat(message));
- } else {
- log(message.slice(LOG_MARKER.length));
- }
- }
-
log("".concat(prefix, " trace start"));
-
if (trace) {
trace();
}
-
log("".concat(prefix, " trace end"));
} catch (e) {}
-
if (typeof window.__debug === "function") {
window.__debug(source);
}
}
-
function logMessage(source, message) {
var forced = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;
-
if (forced || source.verbose) {
console.log("".concat(source.name, ": ").concat(message));
}
}
-
var updatedArgs = args ? [].concat(source).concat(args) : [source];
-
try {
logEval.apply(this, updatedArgs);
} catch (e) {
console.log(e);
}
}
-
function logOnStacktrace(source, args) {
function logOnStacktrace(source, property) {
if (!property) {
return;
}
-
var refineStackTrace = function refineStackTrace(stackString) {
var stackSteps = stackString.split("\n").slice(2).map(function (line) {
return line.replace(/ {4}at /, "");
@@ -19205,7 +16175,6 @@
var funcFullPath;
var reg = /\(([^\)]+)\)/;
var regFirefox = /(.*?@)(\S+)(:\d+):\d+\)?$/;
-
if (line.match(reg)) {
funcName = line.split(" ").slice(0, -1).join(" ");
funcFullPath = line.match(reg)[1];
@@ -19216,7 +16185,6 @@
funcName = "function name is not available";
funcFullPath = line;
}
-
return [funcName, funcFullPath];
});
var logInfoObject = {};
@@ -19225,22 +16193,18 @@
});
return logInfoObject;
};
-
var setChainPropAccess = function setChainPropAccess(owner, property) {
var chainInfo = getPropertyInChain(owner, property);
var base = chainInfo.base;
var prop = chainInfo.prop,
- chain = chainInfo.chain;
-
+ chain = chainInfo.chain;
if (chain) {
var setter = function setter(a) {
base = a;
-
if (a instanceof Object) {
setChainPropAccess(a, chain);
}
};
-
Object.defineProperty(owner, prop, {
get: function get() {
return base;
@@ -19249,7 +16213,6 @@
});
return;
}
-
var value = base[prop];
setPropertyAccess(base, prop, {
get: function get() {
@@ -19266,22 +16229,17 @@
}
});
};
-
setChainPropAccess(window, property);
}
-
function getPropertyInChain(base, chain) {
var pos = chain.indexOf(".");
-
if (pos === -1) {
return {
base: base,
prop: chain
};
}
-
var prop = chain.slice(0, pos);
-
if (base === null) {
return {
base: base,
@@ -19289,10 +16247,8 @@
chain: chain
};
}
-
var nextBase = base[prop];
chain = chain.slice(pos + 1);
-
if ((base instanceof Object || typeof base === "object") && isEmptyObject(base)) {
return {
base: base,
@@ -19300,7 +16256,6 @@
chain: chain
};
}
-
if (nextBase === null) {
return {
base: base,
@@ -19308,11 +16263,9 @@
chain: chain
};
}
-
if (nextBase !== undefined) {
return getPropertyInChain(nextBase, chain);
}
-
Object.defineProperty(base, prop, {
configurable: true
});
@@ -19322,165 +16275,111 @@
chain: chain
};
}
-
function setPropertyAccess(object, property, descriptor) {
var currentDescriptor = Object.getOwnPropertyDescriptor(object, property);
-
if (currentDescriptor && !currentDescriptor.configurable) {
return false;
}
-
Object.defineProperty(object, property, descriptor);
return true;
}
-
- function hit(source, message) {
+ function hit(source) {
if (source.verbose !== true) {
return;
}
-
try {
var log = console.log.bind(console);
var trace = console.trace.bind(console);
var prefix = source.ruleText || "";
-
if (source.domainName) {
var AG_SCRIPTLET_MARKER = "#%#//";
var UBO_SCRIPTLET_MARKER = "##+js";
var ruleStartIndex;
-
if (source.ruleText.indexOf(AG_SCRIPTLET_MARKER) > -1) {
ruleStartIndex = source.ruleText.indexOf(AG_SCRIPTLET_MARKER);
} else if (source.ruleText.indexOf(UBO_SCRIPTLET_MARKER) > -1) {
ruleStartIndex = source.ruleText.indexOf(UBO_SCRIPTLET_MARKER);
}
-
var rulePart = source.ruleText.slice(ruleStartIndex);
prefix = "".concat(source.domainName).concat(rulePart);
}
-
- var LOG_MARKER = "log: ";
-
- if (message) {
- if (message.indexOf(LOG_MARKER) === -1) {
- log("".concat(prefix, " message:\n").concat(message));
- } else {
- log(message.slice(LOG_MARKER.length));
- }
- }
-
log("".concat(prefix, " trace start"));
-
if (trace) {
trace();
}
-
log("".concat(prefix, " trace end"));
} catch (e) {}
-
if (typeof window.__debug === "function") {
window.__debug(source);
}
}
-
function logMessage(source, message) {
var forced = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;
-
if (forced || source.verbose) {
console.log("".concat(source.name, ": ").concat(message));
}
}
-
function isEmptyObject(obj) {
- return Object.keys(obj).length === 0;
+ return Object.keys(obj).length === 0 && !obj.prototype;
}
-
var updatedArgs = args ? [].concat(source).concat(args) : [source];
-
try {
logOnStacktrace.apply(this, updatedArgs);
} catch (e) {
console.log(e);
}
}
-
function noTopics(source, args) {
function noTopics(source) {
var TOPICS_PROPERTY_NAME = "browsingTopics";
-
if (Document instanceof Object === false) {
return;
}
-
if (!Object.prototype.hasOwnProperty.call(Document.prototype, TOPICS_PROPERTY_NAME) || Document.prototype[TOPICS_PROPERTY_NAME] instanceof Function === false) {
return;
}
-
Document.prototype[TOPICS_PROPERTY_NAME] = function () {
return noopPromiseResolve("[]");
};
-
hit(source);
}
-
- function hit(source, message) {
+ function hit(source) {
if (source.verbose !== true) {
return;
}
-
try {
var log = console.log.bind(console);
var trace = console.trace.bind(console);
var prefix = source.ruleText || "";
-
if (source.domainName) {
var AG_SCRIPTLET_MARKER = "#%#//";
var UBO_SCRIPTLET_MARKER = "##+js";
var ruleStartIndex;
-
if (source.ruleText.indexOf(AG_SCRIPTLET_MARKER) > -1) {
ruleStartIndex = source.ruleText.indexOf(AG_SCRIPTLET_MARKER);
} else if (source.ruleText.indexOf(UBO_SCRIPTLET_MARKER) > -1) {
ruleStartIndex = source.ruleText.indexOf(UBO_SCRIPTLET_MARKER);
}
-
var rulePart = source.ruleText.slice(ruleStartIndex);
prefix = "".concat(source.domainName).concat(rulePart);
}
-
- var LOG_MARKER = "log: ";
-
- if (message) {
- if (message.indexOf(LOG_MARKER) === -1) {
- log("".concat(prefix, " message:\n").concat(message));
- } else {
- log(message.slice(LOG_MARKER.length));
- }
- }
-
log("".concat(prefix, " trace start"));
-
if (trace) {
trace();
}
-
log("".concat(prefix, " trace end"));
} catch (e) {}
-
if (typeof window.__debug === "function") {
window.__debug(source);
}
}
-
function noopPromiseResolve() {
var responseBody = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : "{}";
var responseUrl = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : "";
var responseType = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : "default";
-
if (typeof Response === "undefined") {
return;
}
-
var response = new Response(responseBody, {
status: 200,
statusText: "OK"
@@ -19495,101 +16394,79 @@
});
return Promise.resolve(response);
}
-
var updatedArgs = args ? [].concat(source).concat(args) : [source];
-
try {
noTopics.apply(this, updatedArgs);
} catch (e) {
console.log(e);
}
}
-
function noeval(source, args) {
function noeval(source) {
window.eval = function evalWrapper(s) {
- hit(source, "AdGuard has prevented eval:\n".concat(s));
+ hit(source);
+ logMessage(source, "AdGuard has prevented eval:\n".concat(s), true);
}.bind();
}
-
- function hit(source, message) {
+ function hit(source) {
if (source.verbose !== true) {
return;
}
-
try {
var log = console.log.bind(console);
var trace = console.trace.bind(console);
var prefix = source.ruleText || "";
-
if (source.domainName) {
var AG_SCRIPTLET_MARKER = "#%#//";
var UBO_SCRIPTLET_MARKER = "##+js";
var ruleStartIndex;
-
if (source.ruleText.indexOf(AG_SCRIPTLET_MARKER) > -1) {
ruleStartIndex = source.ruleText.indexOf(AG_SCRIPTLET_MARKER);
} else if (source.ruleText.indexOf(UBO_SCRIPTLET_MARKER) > -1) {
ruleStartIndex = source.ruleText.indexOf(UBO_SCRIPTLET_MARKER);
}
-
var rulePart = source.ruleText.slice(ruleStartIndex);
prefix = "".concat(source.domainName).concat(rulePart);
}
-
- var LOG_MARKER = "log: ";
-
- if (message) {
- if (message.indexOf(LOG_MARKER) === -1) {
- log("".concat(prefix, " message:\n").concat(message));
- } else {
- log(message.slice(LOG_MARKER.length));
- }
- }
-
log("".concat(prefix, " trace start"));
-
if (trace) {
trace();
}
-
log("".concat(prefix, " trace end"));
} catch (e) {}
-
if (typeof window.__debug === "function") {
window.__debug(source);
}
}
-
+ function logMessage(source, message) {
+ var forced = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;
+ if (forced || source.verbose) {
+ console.log("".concat(source.name, ": ").concat(message));
+ }
+ }
var updatedArgs = args ? [].concat(source).concat(args) : [source];
-
try {
noeval.apply(this, updatedArgs);
} catch (e) {
console.log(e);
}
}
-
function nowebrtc(source, args) {
function nowebrtc(source) {
var propertyName = "";
-
if (window.RTCPeerConnection) {
propertyName = "RTCPeerConnection";
} else if (window.webkitRTCPeerConnection) {
propertyName = "webkitRTCPeerConnection";
}
-
if (propertyName === "") {
return;
}
-
var rtcReplacement = function rtcReplacement(config) {
var message = "Document tried to create an RTCPeerConnection: ".concat(convertRtcConfigToString(config));
logMessage(source, message);
hit(source);
};
-
rtcReplacement.prototype = {
close: noopFunc,
createDataChannel: noopFunc,
@@ -19598,7 +16475,6 @@
};
var rtc = window[propertyName];
window[propertyName] = rtcReplacement;
-
if (rtc.prototype) {
rtc.prototype.createDataChannel = function (a, b) {
return {
@@ -19608,118 +16484,88 @@
}.bind(null);
}
}
-
- function hit(source, message) {
+ function hit(source) {
if (source.verbose !== true) {
return;
}
-
try {
var log = console.log.bind(console);
var trace = console.trace.bind(console);
var prefix = source.ruleText || "";
-
if (source.domainName) {
var AG_SCRIPTLET_MARKER = "#%#//";
var UBO_SCRIPTLET_MARKER = "##+js";
var ruleStartIndex;
-
if (source.ruleText.indexOf(AG_SCRIPTLET_MARKER) > -1) {
ruleStartIndex = source.ruleText.indexOf(AG_SCRIPTLET_MARKER);
} else if (source.ruleText.indexOf(UBO_SCRIPTLET_MARKER) > -1) {
ruleStartIndex = source.ruleText.indexOf(UBO_SCRIPTLET_MARKER);
}
-
var rulePart = source.ruleText.slice(ruleStartIndex);
prefix = "".concat(source.domainName).concat(rulePart);
}
-
- var LOG_MARKER = "log: ";
-
- if (message) {
- if (message.indexOf(LOG_MARKER) === -1) {
- log("".concat(prefix, " message:\n").concat(message));
- } else {
- log(message.slice(LOG_MARKER.length));
- }
- }
-
log("".concat(prefix, " trace start"));
-
if (trace) {
trace();
}
-
log("".concat(prefix, " trace end"));
} catch (e) {}
-
if (typeof window.__debug === "function") {
window.__debug(source);
}
}
-
function noopFunc() {}
-
function logMessage(source, message) {
var forced = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;
-
if (forced || source.verbose) {
console.log("".concat(source.name, ": ").concat(message));
}
}
-
function convertRtcConfigToString(config) {
var UNDEF_STR = "undefined";
var str = UNDEF_STR;
-
if (config === null) {
str = "null";
} else if (config instanceof Object) {
var SERVERS_PROP_NAME = "iceServers";
var URLS_PROP_NAME = "urls";
-
if (Object.prototype.hasOwnProperty.call(config, SERVERS_PROP_NAME) && Object.prototype.hasOwnProperty.call(config[SERVERS_PROP_NAME][0], URLS_PROP_NAME) && !!config[SERVERS_PROP_NAME][0][URLS_PROP_NAME]) {
str = config[SERVERS_PROP_NAME][0][URLS_PROP_NAME].toString();
}
}
-
return str;
}
-
var updatedArgs = args ? [].concat(source).concat(args) : [source];
-
try {
nowebrtc.apply(this, updatedArgs);
} catch (e) {
console.log(e);
}
}
-
function preventAddEventListener(source, args) {
function preventAddEventListener(source, typeSearch, listenerSearch) {
var typeSearchRegexp = toRegExp(typeSearch);
var listenerSearchRegexp = toRegExp(listenerSearch);
var nativeAddEventListener = window.EventTarget.prototype.addEventListener;
-
function addEventListenerWrapper(type, listener) {
+ var _this$constructor;
var shouldPrevent = false;
-
if (validateType(type) && validateListener(listener)) {
shouldPrevent = typeSearchRegexp.test(type.toString()) && listenerSearchRegexp.test(listenerToString(listener));
}
-
if (shouldPrevent) {
hit(source);
return undefined;
}
-
+ var context = this;
+ if (this && ((_this$constructor = this.constructor) === null || _this$constructor === void 0 ? void 0 : _this$constructor.name) === "Window" && this !== window) {
+ context = window;
+ }
for (var _len = arguments.length, args = new Array(_len > 2 ? _len - 2 : 0), _key = 2; _key < _len; _key++) {
args[_key - 2] = arguments[_key];
}
-
- return nativeAddEventListener.apply(this, [type, listener].concat(args));
+ return nativeAddEventListener.apply(context, [type, listener].concat(args));
}
-
var descriptor = {
configurable: true,
set: function set() {},
@@ -19731,104 +16577,73 @@
Object.defineProperty(window, "addEventListener", descriptor);
Object.defineProperty(document, "addEventListener", descriptor);
}
-
- function hit(source, message) {
+ function hit(source) {
if (source.verbose !== true) {
return;
}
-
try {
var log = console.log.bind(console);
var trace = console.trace.bind(console);
var prefix = source.ruleText || "";
-
if (source.domainName) {
var AG_SCRIPTLET_MARKER = "#%#//";
var UBO_SCRIPTLET_MARKER = "##+js";
var ruleStartIndex;
-
if (source.ruleText.indexOf(AG_SCRIPTLET_MARKER) > -1) {
ruleStartIndex = source.ruleText.indexOf(AG_SCRIPTLET_MARKER);
} else if (source.ruleText.indexOf(UBO_SCRIPTLET_MARKER) > -1) {
ruleStartIndex = source.ruleText.indexOf(UBO_SCRIPTLET_MARKER);
}
-
var rulePart = source.ruleText.slice(ruleStartIndex);
prefix = "".concat(source.domainName).concat(rulePart);
}
-
- var LOG_MARKER = "log: ";
-
- if (message) {
- if (message.indexOf(LOG_MARKER) === -1) {
- log("".concat(prefix, " message:\n").concat(message));
- } else {
- log(message.slice(LOG_MARKER.length));
- }
- }
-
log("".concat(prefix, " trace start"));
-
if (trace) {
trace();
}
-
log("".concat(prefix, " trace end"));
} catch (e) {}
-
if (typeof window.__debug === "function") {
window.__debug(source);
}
}
-
function toRegExp() {
var input = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : "";
var DEFAULT_VALUE = ".?";
var FORWARD_SLASH = "/";
-
if (input === "") {
return new RegExp(DEFAULT_VALUE);
}
-
if (input[0] === FORWARD_SLASH && input[input.length - 1] === FORWARD_SLASH) {
return new RegExp(input.slice(1, -1));
}
-
var escaped = input.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
return new RegExp(escaped);
}
-
function validateType(type) {
return typeof type !== "undefined";
}
-
function validateListener(listener) {
return typeof listener !== "undefined" && (typeof listener === "function" || typeof listener === "object" && listener !== null && typeof listener.handleEvent === "function");
}
-
function listenerToString(listener) {
return typeof listener === "function" ? listener.toString() : listener.handleEvent.toString();
}
-
var updatedArgs = args ? [].concat(source).concat(args) : [source];
-
try {
preventAddEventListener.apply(this, updatedArgs);
} catch (e) {
console.log(e);
}
}
-
function preventAdfly(source, args) {
function preventAdfly(source) {
var isDigit = function isDigit(data) {
return /^\d$/.test(data);
};
-
var handler = function handler(encodedURL) {
var evenChars = "";
var oddChars = "";
-
for (var i = 0; i < encodedURL.length; i += 1) {
if (i % 2 === 0) {
evenChars += encodedURL.charAt(i);
@@ -19836,37 +16651,29 @@
oddChars = encodedURL.charAt(i) + oddChars;
}
}
-
var data = (evenChars + oddChars).split("");
-
for (var _i = 0; _i < data.length; _i += 1) {
if (isDigit(data[_i])) {
for (var ii = _i + 1; ii < data.length; ii += 1) {
if (isDigit(data[ii])) {
var temp = parseInt(data[_i], 10) ^ parseInt(data[ii], 10);
-
if (temp < 10) {
data[_i] = temp.toString();
}
-
_i = ii;
break;
}
}
}
}
-
data = data.join("");
var decodedURL = window.atob(data).slice(16, -16);
-
if (window.stop) {
window.stop();
}
-
window.onbeforeunload = null;
window.location.href = decodedURL;
};
-
var val;
var applyHandler = true;
var result = setPropertyAccess(window, "ysmm", {
@@ -19874,246 +16681,175 @@
set: function set(value) {
if (applyHandler) {
applyHandler = false;
-
try {
if (typeof value === "string") {
handler(value);
}
} catch (err) {}
}
-
val = value;
},
get: function get() {
return val;
}
});
-
if (result) {
hit(source);
} else {
logMessage(source, "Failed to set up prevent-adfly scriptlet");
}
}
-
function setPropertyAccess(object, property, descriptor) {
var currentDescriptor = Object.getOwnPropertyDescriptor(object, property);
-
if (currentDescriptor && !currentDescriptor.configurable) {
return false;
}
-
Object.defineProperty(object, property, descriptor);
return true;
}
-
- function hit(source, message) {
+ function hit(source) {
if (source.verbose !== true) {
return;
}
-
try {
var log = console.log.bind(console);
var trace = console.trace.bind(console);
var prefix = source.ruleText || "";
-
if (source.domainName) {
var AG_SCRIPTLET_MARKER = "#%#//";
var UBO_SCRIPTLET_MARKER = "##+js";
var ruleStartIndex;
-
if (source.ruleText.indexOf(AG_SCRIPTLET_MARKER) > -1) {
ruleStartIndex = source.ruleText.indexOf(AG_SCRIPTLET_MARKER);
} else if (source.ruleText.indexOf(UBO_SCRIPTLET_MARKER) > -1) {
ruleStartIndex = source.ruleText.indexOf(UBO_SCRIPTLET_MARKER);
}
-
var rulePart = source.ruleText.slice(ruleStartIndex);
prefix = "".concat(source.domainName).concat(rulePart);
}
-
- var LOG_MARKER = "log: ";
-
- if (message) {
- if (message.indexOf(LOG_MARKER) === -1) {
- log("".concat(prefix, " message:\n").concat(message));
- } else {
- log(message.slice(LOG_MARKER.length));
- }
- }
-
log("".concat(prefix, " trace start"));
-
if (trace) {
trace();
}
-
log("".concat(prefix, " trace end"));
} catch (e) {}
-
if (typeof window.__debug === "function") {
window.__debug(source);
}
}
-
function logMessage(source, message) {
var forced = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;
-
if (forced || source.verbose) {
console.log("".concat(source.name, ": ").concat(message));
}
}
-
var updatedArgs = args ? [].concat(source).concat(args) : [source];
-
try {
preventAdfly.apply(this, updatedArgs);
} catch (e) {
console.log(e);
}
}
-
function preventBab(source, args) {
function preventBab(source) {
var nativeSetTimeout = window.setTimeout;
var babRegex = /\.bab_elementid.$/;
-
var timeoutWrapper = function timeoutWrapper(callback) {
if (typeof callback !== "string" || !babRegex.test(callback)) {
for (var _len = arguments.length, args = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {
args[_key - 1] = arguments[_key];
}
-
return nativeSetTimeout.apply(window, [callback].concat(args));
}
-
hit(source);
};
-
window.setTimeout = timeoutWrapper;
var signatures = [["blockadblock"], ["babasbm"], [/getItem\('babn'\)/], ["getElementById", "String.fromCharCode", "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789", "charAt", "DOMContentLoaded", "AdBlock", "addEventListener", "doScroll", "fromCharCode", "<<2|r>>4", "sessionStorage", "clientWidth", "localStorage", "Math", "random"]];
-
var check = function check(str) {
if (typeof str !== "string") {
return false;
}
-
for (var i = 0; i < signatures.length; i += 1) {
var tokens = signatures[i];
var match = 0;
-
for (var j = 0; j < tokens.length; j += 1) {
var token = tokens[j];
var found = token instanceof RegExp ? token.test(str) : str.indexOf(token) > -1;
-
if (found) {
match += 1;
}
}
-
if (match / tokens.length >= .8) {
return true;
}
}
-
return false;
};
-
var nativeEval = window.eval;
-
var evalWrapper = function evalWrapper(str) {
if (!check(str)) {
return nativeEval(str);
}
-
hit(source);
var bodyEl = document.body;
-
if (bodyEl) {
bodyEl.style.removeProperty("visibility");
}
-
var el = document.getElementById("babasbmsgx");
-
if (el) {
el.parentNode.removeChild(el);
}
};
-
window.eval = evalWrapper.bind(window);
}
-
- function hit(source, message) {
+ function hit(source) {
if (source.verbose !== true) {
return;
}
-
try {
var log = console.log.bind(console);
var trace = console.trace.bind(console);
var prefix = source.ruleText || "";
-
if (source.domainName) {
var AG_SCRIPTLET_MARKER = "#%#//";
var UBO_SCRIPTLET_MARKER = "##+js";
var ruleStartIndex;
-
if (source.ruleText.indexOf(AG_SCRIPTLET_MARKER) > -1) {
ruleStartIndex = source.ruleText.indexOf(AG_SCRIPTLET_MARKER);
} else if (source.ruleText.indexOf(UBO_SCRIPTLET_MARKER) > -1) {
ruleStartIndex = source.ruleText.indexOf(UBO_SCRIPTLET_MARKER);
}
-
var rulePart = source.ruleText.slice(ruleStartIndex);
prefix = "".concat(source.domainName).concat(rulePart);
}
-
- var LOG_MARKER = "log: ";
-
- if (message) {
- if (message.indexOf(LOG_MARKER) === -1) {
- log("".concat(prefix, " message:\n").concat(message));
- } else {
- log(message.slice(LOG_MARKER.length));
- }
- }
-
log("".concat(prefix, " trace start"));
-
if (trace) {
trace();
}
-
log("".concat(prefix, " trace end"));
} catch (e) {}
-
if (typeof window.__debug === "function") {
window.__debug(source);
}
}
-
var updatedArgs = args ? [].concat(source).concat(args) : [source];
-
try {
preventBab.apply(this, updatedArgs);
} catch (e) {
console.log(e);
}
}
-
function preventElementSrcLoading(source, args) {
function preventElementSrcLoading(source, tagName, match) {
if (typeof Proxy === "undefined" || typeof Reflect === "undefined") {
return;
}
-
var srcMockData = {
script: "data:text/javascript;base64,KCk9Pnt9",
img: "data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==",
iframe: "data:text/html;base64, PGRpdj48L2Rpdj4="
};
var instance;
-
if (tagName === "script") {
instance = HTMLScriptElement;
} else if (tagName === "img") {
@@ -20123,55 +16859,44 @@
} else {
return;
}
-
var hasTrustedTypes = window.trustedTypes && typeof window.trustedTypes.createPolicy === "function";
var policy;
-
if (hasTrustedTypes) {
- policy = window.trustedTypes.createPolicy("mock", {
+ policy = window.trustedTypes.createPolicy("AGPolicy", {
createScriptURL: function createScriptURL(arg) {
return arg;
}
});
}
-
var SOURCE_PROPERTY_NAME = "src";
var ONERROR_PROPERTY_NAME = "onerror";
var searchRegexp = toRegExp(match);
-
var setMatchedAttribute = function setMatchedAttribute(elem) {
return elem.setAttribute(source.name, "matched");
};
-
var setAttributeWrapper = function setAttributeWrapper(target, thisArg, args) {
if (!args[0] || !args[1]) {
return Reflect.apply(target, thisArg, args);
}
-
var nodeName = thisArg.nodeName.toLowerCase();
var attrName = args[0].toLowerCase();
var attrValue = args[1];
var isMatched = attrName === SOURCE_PROPERTY_NAME && tagName.toLowerCase() === nodeName && srcMockData[nodeName] && searchRegexp.test(attrValue);
-
if (!isMatched) {
return Reflect.apply(target, thisArg, args);
}
-
hit(source);
setMatchedAttribute(thisArg);
return Reflect.apply(target, thisArg, [attrName, srcMockData[nodeName]]);
};
-
var setAttributeHandler = {
apply: setAttributeWrapper
};
instance.prototype.setAttribute = new Proxy(Element.prototype.setAttribute, setAttributeHandler);
var origSrcDescriptor = safeGetDescriptor(instance.prototype, SOURCE_PROPERTY_NAME);
-
if (!origSrcDescriptor) {
return;
}
-
Object.defineProperty(instance.prototype, SOURCE_PROPERTY_NAME, {
enumerable: true,
configurable: true,
@@ -20181,30 +16906,25 @@
set: function set(urlValue) {
var nodeName = this.nodeName.toLowerCase();
var isMatched = tagName.toLowerCase() === nodeName && srcMockData[nodeName] && searchRegexp.test(urlValue);
-
if (!isMatched) {
origSrcDescriptor.set.call(this, urlValue);
return true;
}
-
if (policy && urlValue instanceof TrustedScriptURL) {
var trustedSrc = policy.createScriptURL(urlValue);
origSrcDescriptor.set.call(this, trustedSrc);
hit(source);
return;
}
-
setMatchedAttribute(this);
origSrcDescriptor.set.call(this, srcMockData[nodeName]);
hit(source);
}
});
var origOnerrorDescriptor = safeGetDescriptor(HTMLElement.prototype, ONERROR_PROPERTY_NAME);
-
if (!origOnerrorDescriptor) {
return;
}
-
Object.defineProperty(HTMLElement.prototype, ONERROR_PROPERTY_NAME, {
enumerable: true,
configurable: true,
@@ -20213,240 +16933,168 @@
},
set: function set(cb) {
var isMatched = this.getAttribute(source.name) === "matched";
-
if (!isMatched) {
origOnerrorDescriptor.set.call(this, cb);
return true;
}
-
origOnerrorDescriptor.set.call(this, noopFunc);
return true;
}
});
-
var addEventListenerWrapper = function addEventListenerWrapper(target, thisArg, args) {
if (!args[0] || !args[1]) {
return Reflect.apply(target, thisArg, args);
}
-
var eventName = args[0];
- var isMatched = thisArg.getAttribute(source.name) === "matched" && eventName === "error";
-
+ var isMatched = typeof thisArg.getAttribute === "function" && thisArg.getAttribute(source.name) === "matched" && eventName === "error";
if (isMatched) {
return Reflect.apply(target, thisArg, [eventName, noopFunc]);
}
-
return Reflect.apply(target, thisArg, args);
};
-
var addEventListenerHandler = {
apply: addEventListenerWrapper
};
EventTarget.prototype.addEventListener = new Proxy(EventTarget.prototype.addEventListener, addEventListenerHandler);
}
-
- function hit(source, message) {
+ function hit(source) {
if (source.verbose !== true) {
return;
}
-
try {
var log = console.log.bind(console);
var trace = console.trace.bind(console);
var prefix = source.ruleText || "";
-
if (source.domainName) {
var AG_SCRIPTLET_MARKER = "#%#//";
var UBO_SCRIPTLET_MARKER = "##+js";
var ruleStartIndex;
-
if (source.ruleText.indexOf(AG_SCRIPTLET_MARKER) > -1) {
ruleStartIndex = source.ruleText.indexOf(AG_SCRIPTLET_MARKER);
} else if (source.ruleText.indexOf(UBO_SCRIPTLET_MARKER) > -1) {
ruleStartIndex = source.ruleText.indexOf(UBO_SCRIPTLET_MARKER);
}
-
var rulePart = source.ruleText.slice(ruleStartIndex);
prefix = "".concat(source.domainName).concat(rulePart);
}
-
- var LOG_MARKER = "log: ";
-
- if (message) {
- if (message.indexOf(LOG_MARKER) === -1) {
- log("".concat(prefix, " message:\n").concat(message));
- } else {
- log(message.slice(LOG_MARKER.length));
- }
- }
-
log("".concat(prefix, " trace start"));
-
if (trace) {
trace();
}
-
log("".concat(prefix, " trace end"));
} catch (e) {}
-
if (typeof window.__debug === "function") {
window.__debug(source);
}
}
-
function toRegExp() {
var input = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : "";
var DEFAULT_VALUE = ".?";
var FORWARD_SLASH = "/";
-
if (input === "") {
return new RegExp(DEFAULT_VALUE);
}
-
if (input[0] === FORWARD_SLASH && input[input.length - 1] === FORWARD_SLASH) {
return new RegExp(input.slice(1, -1));
}
-
var escaped = input.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
return new RegExp(escaped);
}
-
function safeGetDescriptor(obj, prop) {
var descriptor = Object.getOwnPropertyDescriptor(obj, prop);
-
if (descriptor && descriptor.configurable) {
return descriptor;
}
-
return null;
}
-
function noopFunc() {}
-
var updatedArgs = args ? [].concat(source).concat(args) : [source];
-
try {
preventElementSrcLoading.apply(this, updatedArgs);
} catch (e) {
console.log(e);
}
}
-
function preventEvalIf(source, args) {
function preventEvalIf(source, search) {
var searchRegexp = toRegExp(search);
var nativeEval = window.eval;
-
window.eval = function (payload) {
if (!searchRegexp.test(payload.toString())) {
return nativeEval.call(window, payload);
}
-
- hit(source, payload);
+ hit(source);
return undefined;
}.bind(window);
}
-
function toRegExp() {
var input = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : "";
var DEFAULT_VALUE = ".?";
var FORWARD_SLASH = "/";
-
if (input === "") {
return new RegExp(DEFAULT_VALUE);
}
-
if (input[0] === FORWARD_SLASH && input[input.length - 1] === FORWARD_SLASH) {
return new RegExp(input.slice(1, -1));
}
-
var escaped = input.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
return new RegExp(escaped);
}
-
- function hit(source, message) {
+ function hit(source) {
if (source.verbose !== true) {
return;
}
-
try {
var log = console.log.bind(console);
var trace = console.trace.bind(console);
var prefix = source.ruleText || "";
-
if (source.domainName) {
var AG_SCRIPTLET_MARKER = "#%#//";
var UBO_SCRIPTLET_MARKER = "##+js";
var ruleStartIndex;
-
if (source.ruleText.indexOf(AG_SCRIPTLET_MARKER) > -1) {
ruleStartIndex = source.ruleText.indexOf(AG_SCRIPTLET_MARKER);
} else if (source.ruleText.indexOf(UBO_SCRIPTLET_MARKER) > -1) {
ruleStartIndex = source.ruleText.indexOf(UBO_SCRIPTLET_MARKER);
}
-
var rulePart = source.ruleText.slice(ruleStartIndex);
prefix = "".concat(source.domainName).concat(rulePart);
}
-
- var LOG_MARKER = "log: ";
-
- if (message) {
- if (message.indexOf(LOG_MARKER) === -1) {
- log("".concat(prefix, " message:\n").concat(message));
- } else {
- log(message.slice(LOG_MARKER.length));
- }
- }
-
log("".concat(prefix, " trace start"));
-
if (trace) {
trace();
}
-
log("".concat(prefix, " trace end"));
} catch (e) {}
-
if (typeof window.__debug === "function") {
window.__debug(source);
}
}
-
var updatedArgs = args ? [].concat(source).concat(args) : [source];
-
try {
preventEvalIf.apply(this, updatedArgs);
} catch (e) {
console.log(e);
}
}
-
function preventFab(source, args) {
function preventFab(source) {
hit(source);
-
var Fab = function Fab() {};
-
Fab.prototype.check = noopFunc;
Fab.prototype.clearEvent = noopFunc;
Fab.prototype.emitEvent = noopFunc;
-
Fab.prototype.on = function (a, b) {
if (!a) {
b();
}
-
return this;
};
-
Fab.prototype.onDetected = noopThis;
-
Fab.prototype.onNotDetected = function (a) {
a();
return this;
};
-
Fab.prototype.setOption = noopFunc;
Fab.prototype.options = {
set: noopFunc,
@@ -20465,212 +17113,151 @@
},
set: function set() {}
};
-
if (Object.prototype.hasOwnProperty.call(window, "FuckAdBlock")) {
window.FuckAdBlock = Fab;
} else {
Object.defineProperty(window, "FuckAdBlock", getSetFab);
}
-
if (Object.prototype.hasOwnProperty.call(window, "BlockAdBlock")) {
window.BlockAdBlock = Fab;
} else {
Object.defineProperty(window, "BlockAdBlock", getSetFab);
}
-
if (Object.prototype.hasOwnProperty.call(window, "SniffAdBlock")) {
window.SniffAdBlock = Fab;
} else {
Object.defineProperty(window, "SniffAdBlock", getSetFab);
}
-
if (Object.prototype.hasOwnProperty.call(window, "fuckAdBlock")) {
window.fuckAdBlock = fab;
} else {
Object.defineProperty(window, "fuckAdBlock", getsetfab);
}
-
if (Object.prototype.hasOwnProperty.call(window, "blockAdBlock")) {
window.blockAdBlock = fab;
} else {
Object.defineProperty(window, "blockAdBlock", getsetfab);
}
-
if (Object.prototype.hasOwnProperty.call(window, "sniffAdBlock")) {
window.sniffAdBlock = fab;
} else {
Object.defineProperty(window, "sniffAdBlock", getsetfab);
}
}
-
- function hit(source, message) {
+ function hit(source) {
if (source.verbose !== true) {
return;
}
-
try {
var log = console.log.bind(console);
var trace = console.trace.bind(console);
var prefix = source.ruleText || "";
-
if (source.domainName) {
var AG_SCRIPTLET_MARKER = "#%#//";
var UBO_SCRIPTLET_MARKER = "##+js";
var ruleStartIndex;
-
if (source.ruleText.indexOf(AG_SCRIPTLET_MARKER) > -1) {
ruleStartIndex = source.ruleText.indexOf(AG_SCRIPTLET_MARKER);
} else if (source.ruleText.indexOf(UBO_SCRIPTLET_MARKER) > -1) {
ruleStartIndex = source.ruleText.indexOf(UBO_SCRIPTLET_MARKER);
}
-
var rulePart = source.ruleText.slice(ruleStartIndex);
prefix = "".concat(source.domainName).concat(rulePart);
}
-
- var LOG_MARKER = "log: ";
-
- if (message) {
- if (message.indexOf(LOG_MARKER) === -1) {
- log("".concat(prefix, " message:\n").concat(message));
- } else {
- log(message.slice(LOG_MARKER.length));
- }
- }
-
log("".concat(prefix, " trace start"));
-
if (trace) {
trace();
}
-
log("".concat(prefix, " trace end"));
} catch (e) {}
-
if (typeof window.__debug === "function") {
window.__debug(source);
}
}
-
function noopFunc() {}
-
function noopThis() {
return this;
}
-
var updatedArgs = args ? [].concat(source).concat(args) : [source];
-
try {
preventFab.apply(this, updatedArgs);
} catch (e) {
console.log(e);
}
}
-
function preventFetch(source, args) {
function preventFetch(source, propsToMatch) {
var responseBody = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : "emptyObj";
var responseType = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : "default";
-
if (typeof fetch === "undefined" || typeof Proxy === "undefined" || typeof Response === "undefined") {
return;
}
-
var strResponseBody;
-
- if (responseBody === "emptyObj") {
+ if (responseBody === "" || responseBody === "emptyObj") {
strResponseBody = "{}";
} else if (responseBody === "emptyArr") {
strResponseBody = "[]";
} else {
return;
}
-
if (!(responseType === "default" || responseType === "opaque")) {
logMessage(source, "Invalid parameter: ".concat(responseType));
return;
}
-
var handlerWrapper = function handlerWrapper(target, thisArg, args) {
var shouldPrevent = false;
var fetchData = getFetchData(args);
-
if (typeof propsToMatch === "undefined") {
logMessage(source, "fetch( ".concat(objectToString(fetchData), " )"), true);
hit(source);
return Reflect.apply(target, thisArg, args);
}
-
shouldPrevent = matchRequestProps(source, propsToMatch, fetchData);
-
if (shouldPrevent) {
hit(source);
return noopPromiseResolve(strResponseBody, fetchData.url, responseType);
}
-
return Reflect.apply(target, thisArg, args);
};
-
var fetchHandler = {
apply: handlerWrapper
};
fetch = new Proxy(fetch, fetchHandler);
}
-
- function hit(source, message) {
+ function hit(source) {
if (source.verbose !== true) {
return;
}
-
try {
var log = console.log.bind(console);
var trace = console.trace.bind(console);
var prefix = source.ruleText || "";
-
if (source.domainName) {
var AG_SCRIPTLET_MARKER = "#%#//";
var UBO_SCRIPTLET_MARKER = "##+js";
var ruleStartIndex;
-
if (source.ruleText.indexOf(AG_SCRIPTLET_MARKER) > -1) {
ruleStartIndex = source.ruleText.indexOf(AG_SCRIPTLET_MARKER);
} else if (source.ruleText.indexOf(UBO_SCRIPTLET_MARKER) > -1) {
ruleStartIndex = source.ruleText.indexOf(UBO_SCRIPTLET_MARKER);
}
-
var rulePart = source.ruleText.slice(ruleStartIndex);
prefix = "".concat(source.domainName).concat(rulePart);
}
-
- var LOG_MARKER = "log: ";
-
- if (message) {
- if (message.indexOf(LOG_MARKER) === -1) {
- log("".concat(prefix, " message:\n").concat(message));
- } else {
- log(message.slice(LOG_MARKER.length));
- }
- }
-
log("".concat(prefix, " trace start"));
-
if (trace) {
trace();
}
-
log("".concat(prefix, " trace end"));
} catch (e) {}
-
if (typeof window.__debug === "function") {
window.__debug(source);
}
}
-
function getFetchData(args) {
var fetchPropsObj = {};
var fetchUrl;
var fetchInit;
-
if (args[0] instanceof Request) {
var requestData = getRequestData(args[0]);
fetchUrl = requestData.url;
@@ -20679,41 +17266,32 @@
fetchUrl = args[0];
fetchInit = args[1];
}
-
fetchPropsObj.url = fetchUrl;
-
if (fetchInit instanceof Object) {
Object.keys(fetchInit).forEach(function (prop) {
fetchPropsObj[prop] = fetchInit[prop];
});
}
-
return fetchPropsObj;
}
-
function objectToString(obj) {
return isEmptyObject(obj) ? "{}" : getObjectEntries(obj).map(function (pair) {
var key = pair[0];
var value = pair[1];
var recordValueStr = value;
-
if (value instanceof Object) {
recordValueStr = "{ ".concat(objectToString(value), " }");
}
-
return "".concat(key, ':"').concat(recordValueStr, '"');
}).join(" ");
}
-
function noopPromiseResolve() {
var responseBody = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : "{}";
var responseUrl = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : "";
var responseType = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : "default";
-
if (typeof Response === "undefined") {
return;
}
-
var response = new Response(responseBody, {
status: 200,
statusText: "OK"
@@ -20728,15 +17306,12 @@
});
return Promise.resolve(response);
}
-
function matchRequestProps(source, propsToMatch, requestData) {
if (propsToMatch === "" || propsToMatch === "*") {
return true;
}
-
var isMatched;
var parsedData = parseMatchProps(propsToMatch);
-
if (!validateParsedData(parsedData)) {
logMessage(source, "Invalid parameter: ".concat(propsToMatch));
isMatched = false;
@@ -20747,63 +17322,48 @@
return Object.prototype.hasOwnProperty.call(requestData, matchKey) && matchValue.test(requestData[matchKey]);
});
}
-
return isMatched;
}
-
function logMessage(source, message) {
var forced = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;
-
if (forced || source.verbose) {
console.log("".concat(source.name, ": ").concat(message));
}
}
-
function toRegExp() {
var input = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : "";
var DEFAULT_VALUE = ".?";
var FORWARD_SLASH = "/";
-
if (input === "") {
return new RegExp(DEFAULT_VALUE);
}
-
if (input[0] === FORWARD_SLASH && input[input.length - 1] === FORWARD_SLASH) {
return new RegExp(input.slice(1, -1));
}
-
var escaped = input.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
return new RegExp(escaped);
}
-
function isValidStrPattern(input) {
var FORWARD_SLASH = "/";
var str = escapeRegExp(input);
-
if (input[0] === FORWARD_SLASH && input[input.length - 1] === FORWARD_SLASH) {
str = input.slice(1, -1);
}
-
var isValid;
-
try {
isValid = new RegExp(str);
isValid = true;
} catch (e) {
isValid = false;
}
-
return isValid;
}
-
function escapeRegExp(str) {
return str.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
}
-
function isEmptyObject(obj) {
- return Object.keys(obj).length === 0;
+ return Object.keys(obj).length === 0 && !obj.prototype;
}
-
function getRequestData(request) {
var requestInitOptions = getRequestProps();
var entries = requestInitOptions.map(function (key) {
@@ -20812,7 +17372,9 @@
});
return getObjectFromEntries(entries);
}
-
+ function getRequestProps() {
+ return ["url", "method", "headers", "body", "mode", "credentials", "cache", "redirect", "referrer", "referrerPolicy", "integrity", "keepalive", "signal"];
+ }
function getObjectEntries(object) {
var keys = Object.keys(object);
var entries = [];
@@ -20821,7 +17383,6 @@
});
return entries;
}
-
function getObjectFromEntries(entries) {
var output = entries.reduce(function (acc, el) {
var key = el[0];
@@ -20831,7 +17392,6 @@
}, {});
return output;
}
-
function parseMatchProps(propsToMatchStr) {
var PROPS_DIVIDER = " ";
var PAIRS_MARKER = ":";
@@ -20842,7 +17402,6 @@
var dividerInd = prop.indexOf(PAIRS_MARKER);
var key = prop.slice(0, dividerInd);
var hasLegalMatchProp = LEGAL_MATCH_PROPS.indexOf(key) !== -1;
-
if (hasLegalMatchProp) {
var value = prop.slice(dividerInd + 1);
propsObj[key] = value;
@@ -20852,13 +17411,11 @@
});
return propsObj;
}
-
function validateParsedData(data) {
return Object.values(data).every(function (value) {
return isValidStrPattern(value);
});
}
-
function getMatchPropsData(data) {
var matchData = {};
Object.keys(data).forEach(function (key) {
@@ -20866,24 +17423,19 @@
});
return matchData;
}
-
var updatedArgs = args ? [].concat(source).concat(args) : [source];
-
try {
preventFetch.apply(this, updatedArgs);
} catch (e) {
console.log(e);
}
}
-
function preventPopadsNet(source, args) {
function preventPopadsNet(source) {
var rid = randomId();
-
var throwError = function throwError() {
throw new ReferenceError(rid);
};
-
delete window.PopAds;
delete window.popns;
Object.defineProperties(window, {
@@ -20897,93 +17449,65 @@
window.onerror = createOnErrorHandler(rid).bind();
hit(source);
}
-
function createOnErrorHandler(rid) {
var nativeOnError = window.onerror;
return function onError(error) {
if (typeof error === "string" && error.indexOf(rid) !== -1) {
return true;
}
-
if (nativeOnError instanceof Function) {
for (var _len = arguments.length, args = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {
args[_key - 1] = arguments[_key];
}
-
return nativeOnError.apply(this, [error].concat(args));
}
-
return false;
};
}
-
function randomId() {
- return Math.random().toString(36).substr(2, 9);
+ return Math.random().toString(36).slice(2, 9);
}
-
- function hit(source, message) {
+ function hit(source) {
if (source.verbose !== true) {
return;
}
-
try {
var log = console.log.bind(console);
var trace = console.trace.bind(console);
var prefix = source.ruleText || "";
-
if (source.domainName) {
var AG_SCRIPTLET_MARKER = "#%#//";
var UBO_SCRIPTLET_MARKER = "##+js";
var ruleStartIndex;
-
if (source.ruleText.indexOf(AG_SCRIPTLET_MARKER) > -1) {
ruleStartIndex = source.ruleText.indexOf(AG_SCRIPTLET_MARKER);
} else if (source.ruleText.indexOf(UBO_SCRIPTLET_MARKER) > -1) {
ruleStartIndex = source.ruleText.indexOf(UBO_SCRIPTLET_MARKER);
}
-
var rulePart = source.ruleText.slice(ruleStartIndex);
prefix = "".concat(source.domainName).concat(rulePart);
}
-
- var LOG_MARKER = "log: ";
-
- if (message) {
- if (message.indexOf(LOG_MARKER) === -1) {
- log("".concat(prefix, " message:\n").concat(message));
- } else {
- log(message.slice(LOG_MARKER.length));
- }
- }
-
log("".concat(prefix, " trace start"));
-
if (trace) {
trace();
}
-
log("".concat(prefix, " trace end"));
} catch (e) {}
-
if (typeof window.__debug === "function") {
window.__debug(source);
}
}
-
var updatedArgs = args ? [].concat(source).concat(args) : [source];
-
try {
preventPopadsNet.apply(this, updatedArgs);
} catch (e) {
console.log(e);
}
}
-
function preventRefresh(source, args) {
function preventRefresh(source, delaySec) {
var getMetaElements = function getMetaElements() {
var metaNodes = [];
-
try {
metaNodes = document.querySelectorAll('meta[http-equiv="refresh" i][content]');
} catch (e) {
@@ -20993,67 +17517,52 @@
logMessage(source, e);
}
}
-
return Array.from(metaNodes);
};
-
var getMetaContentDelay = function getMetaContentDelay(metaElements) {
var delays = metaElements.map(function (meta) {
var contentString = meta.getAttribute("content");
-
if (contentString.length === 0) {
return null;
}
-
var contentDelay;
var limiterIndex = contentString.indexOf(";");
-
if (limiterIndex !== -1) {
var delaySubstring = contentString.substring(0, limiterIndex);
contentDelay = getNumberFromString(delaySubstring);
} else {
contentDelay = getNumberFromString(contentString);
}
-
return contentDelay;
}).filter(function (delay) {
return delay !== null;
});
-
if (!delays.length) {
return null;
}
-
var minDelay = delays.reduce(function (a, b) {
return Math.min(a, b);
});
return minDelay;
};
-
var stop = function stop() {
var metaElements = getMetaElements();
-
if (metaElements.length === 0) {
return;
}
-
var secondsToRun = getNumberFromString(delaySec);
-
if (secondsToRun === null) {
secondsToRun = getMetaContentDelay(metaElements);
}
-
if (secondsToRun === null) {
return;
}
-
var delayMs = secondsToRun * 1e3;
setTimeout(function () {
window.stop();
hit(source);
}, delayMs);
};
-
if (document.readyState === "loading") {
document.addEventListener("DOMContentLoaded", stop, {
once: true
@@ -21062,169 +17571,115 @@
stop();
}
}
-
- function hit(source, message) {
+ function hit(source) {
if (source.verbose !== true) {
return;
}
-
try {
var log = console.log.bind(console);
var trace = console.trace.bind(console);
var prefix = source.ruleText || "";
-
if (source.domainName) {
var AG_SCRIPTLET_MARKER = "#%#//";
var UBO_SCRIPTLET_MARKER = "##+js";
var ruleStartIndex;
-
if (source.ruleText.indexOf(AG_SCRIPTLET_MARKER) > -1) {
ruleStartIndex = source.ruleText.indexOf(AG_SCRIPTLET_MARKER);
} else if (source.ruleText.indexOf(UBO_SCRIPTLET_MARKER) > -1) {
ruleStartIndex = source.ruleText.indexOf(UBO_SCRIPTLET_MARKER);
}
-
var rulePart = source.ruleText.slice(ruleStartIndex);
prefix = "".concat(source.domainName).concat(rulePart);
}
-
- var LOG_MARKER = "log: ";
-
- if (message) {
- if (message.indexOf(LOG_MARKER) === -1) {
- log("".concat(prefix, " message:\n").concat(message));
- } else {
- log(message.slice(LOG_MARKER.length));
- }
- }
-
log("".concat(prefix, " trace start"));
-
if (trace) {
trace();
}
-
log("".concat(prefix, " trace end"));
} catch (e) {}
-
if (typeof window.__debug === "function") {
window.__debug(source);
}
}
-
function getNumberFromString(rawString) {
var parsedDelay = parseInt(rawString, 10);
var validDelay = nativeIsNaN(parsedDelay) ? null : parsedDelay;
return validDelay;
}
-
function logMessage(source, message) {
var forced = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;
-
if (forced || source.verbose) {
console.log("".concat(source.name, ": ").concat(message));
}
}
-
function nativeIsNaN(num) {
var native = Number.isNaN || window.isNaN;
return native(num);
}
-
var updatedArgs = args ? [].concat(source).concat(args) : [source];
-
try {
preventRefresh.apply(this, updatedArgs);
} catch (e) {
console.log(e);
}
}
-
function preventRequestAnimationFrame(source, args) {
function preventRequestAnimationFrame(source, match) {
var nativeRequestAnimationFrame = window.requestAnimationFrame;
var shouldLog = typeof match === "undefined";
-
var _parseMatchArg = parseMatchArg(match),
- isInvertedMatch = _parseMatchArg.isInvertedMatch,
- matchRegexp = _parseMatchArg.matchRegexp;
-
+ isInvertedMatch = _parseMatchArg.isInvertedMatch,
+ matchRegexp = _parseMatchArg.matchRegexp;
var rafWrapper = function rafWrapper(callback) {
var shouldPrevent = false;
-
if (shouldLog) {
hit(source);
logMessage(source, "requestAnimationFrame(".concat(String(callback), ")"), true);
} else if (isValidCallback(callback) && isValidStrPattern(match)) {
shouldPrevent = matchRegexp.test(callback.toString()) !== isInvertedMatch;
}
-
if (shouldPrevent) {
hit(source);
return nativeRequestAnimationFrame(noopFunc);
}
-
for (var _len = arguments.length, args = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {
args[_key - 1] = arguments[_key];
}
-
return nativeRequestAnimationFrame.apply(window, [callback].concat(args));
};
-
window.requestAnimationFrame = rafWrapper;
}
-
- function hit(source, message) {
+ function hit(source) {
if (source.verbose !== true) {
return;
}
-
try {
var log = console.log.bind(console);
var trace = console.trace.bind(console);
var prefix = source.ruleText || "";
-
if (source.domainName) {
var AG_SCRIPTLET_MARKER = "#%#//";
var UBO_SCRIPTLET_MARKER = "##+js";
var ruleStartIndex;
-
if (source.ruleText.indexOf(AG_SCRIPTLET_MARKER) > -1) {
ruleStartIndex = source.ruleText.indexOf(AG_SCRIPTLET_MARKER);
} else if (source.ruleText.indexOf(UBO_SCRIPTLET_MARKER) > -1) {
ruleStartIndex = source.ruleText.indexOf(UBO_SCRIPTLET_MARKER);
}
-
var rulePart = source.ruleText.slice(ruleStartIndex);
prefix = "".concat(source.domainName).concat(rulePart);
}
-
- var LOG_MARKER = "log: ";
-
- if (message) {
- if (message.indexOf(LOG_MARKER) === -1) {
- log("".concat(prefix, " message:\n").concat(message));
- } else {
- log(message.slice(LOG_MARKER.length));
- }
- }
-
log("".concat(prefix, " trace start"));
-
if (trace) {
trace();
}
-
log("".concat(prefix, " trace end"));
} catch (e) {}
-
if (typeof window.__debug === "function") {
window.__debug(source);
}
}
-
function noopFunc() {}
-
function parseMatchArg(match) {
var INVERT_MARKER = "!";
var isInvertedMatch = startsWith(match, INVERT_MARKER);
@@ -21235,82 +17690,63 @@
matchRegexp: matchRegexp
};
}
-
function isValidStrPattern(input) {
var FORWARD_SLASH = "/";
var str = escapeRegExp(input);
-
if (input[0] === FORWARD_SLASH && input[input.length - 1] === FORWARD_SLASH) {
str = input.slice(1, -1);
}
-
var isValid;
-
try {
isValid = new RegExp(str);
isValid = true;
} catch (e) {
isValid = false;
}
-
return isValid;
}
-
function isValidCallback(callback) {
return callback instanceof Function || typeof callback === "string";
}
-
function logMessage(source, message) {
var forced = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;
-
if (forced || source.verbose) {
console.log("".concat(source.name, ": ").concat(message));
}
}
-
function escapeRegExp(str) {
return str.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
}
-
function toRegExp() {
var input = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : "";
var DEFAULT_VALUE = ".?";
var FORWARD_SLASH = "/";
-
if (input === "") {
return new RegExp(DEFAULT_VALUE);
}
-
if (input[0] === FORWARD_SLASH && input[input.length - 1] === FORWARD_SLASH) {
return new RegExp(input.slice(1, -1));
}
-
var escaped = input.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
return new RegExp(escaped);
}
-
function startsWith(str, prefix) {
return !!str && str.indexOf(prefix) === 0;
}
-
var updatedArgs = args ? [].concat(source).concat(args) : [source];
-
try {
preventRequestAnimationFrame.apply(this, updatedArgs);
} catch (e) {
console.log(e);
}
}
-
function preventSetInterval(source, args) {
function preventSetInterval(source, matchCallback, matchDelay) {
var isProxySupported = typeof Proxy !== "undefined";
var nativeInterval = window.setInterval;
var shouldLog = typeof matchCallback === "undefined" && typeof matchDelay === "undefined";
-
var legacyIntervalWrapper = function legacyIntervalWrapper(callback, delay) {
var shouldPrevent = false;
-
if (shouldLog) {
hit(source);
logMessage(source, "setInterval(".concat(String(callback), ", ").concat(delay, ")"), true);
@@ -21322,24 +17758,19 @@
matchDelay: matchDelay
});
}
-
if (shouldPrevent) {
hit(source);
return nativeInterval(noopFunc, delay);
}
-
for (var _len = arguments.length, args = new Array(_len > 2 ? _len - 2 : 0), _key = 2; _key < _len; _key++) {
args[_key - 2] = arguments[_key];
}
-
return nativeInterval.apply(window, [callback, delay].concat(args));
};
-
var handlerWrapper = function handlerWrapper(target, thisArg, args) {
var callback = args[0];
var delay = args[1];
var shouldPrevent = false;
-
if (shouldLog) {
hit(source);
logMessage(source, "setInterval(".concat(String(callback), ", ").concat(delay, ")"), true);
@@ -21351,97 +17782,67 @@
matchDelay: matchDelay
});
}
-
if (shouldPrevent) {
hit(source);
args[0] = noopFunc;
}
-
return target.apply(thisArg, args);
};
-
var setIntervalHandler = {
apply: handlerWrapper
};
window.setInterval = isProxySupported ? new Proxy(window.setInterval, setIntervalHandler) : legacyIntervalWrapper;
}
-
- function hit(source, message) {
+ function hit(source) {
if (source.verbose !== true) {
return;
}
-
try {
var log = console.log.bind(console);
var trace = console.trace.bind(console);
var prefix = source.ruleText || "";
-
if (source.domainName) {
var AG_SCRIPTLET_MARKER = "#%#//";
var UBO_SCRIPTLET_MARKER = "##+js";
var ruleStartIndex;
-
if (source.ruleText.indexOf(AG_SCRIPTLET_MARKER) > -1) {
ruleStartIndex = source.ruleText.indexOf(AG_SCRIPTLET_MARKER);
} else if (source.ruleText.indexOf(UBO_SCRIPTLET_MARKER) > -1) {
ruleStartIndex = source.ruleText.indexOf(UBO_SCRIPTLET_MARKER);
}
-
var rulePart = source.ruleText.slice(ruleStartIndex);
prefix = "".concat(source.domainName).concat(rulePart);
}
-
- var LOG_MARKER = "log: ";
-
- if (message) {
- if (message.indexOf(LOG_MARKER) === -1) {
- log("".concat(prefix, " message:\n").concat(message));
- } else {
- log(message.slice(LOG_MARKER.length));
- }
- }
-
log("".concat(prefix, " trace start"));
-
if (trace) {
trace();
}
-
log("".concat(prefix, " trace end"));
} catch (e) {}
-
if (typeof window.__debug === "function") {
window.__debug(source);
}
}
-
function noopFunc() {}
-
function isPreventionNeeded(_ref) {
var callback = _ref.callback,
- delay = _ref.delay,
- matchCallback = _ref.matchCallback,
- matchDelay = _ref.matchDelay;
-
+ delay = _ref.delay,
+ matchCallback = _ref.matchCallback,
+ matchDelay = _ref.matchDelay;
if (!isValidCallback(callback)) {
return false;
}
-
if (!isValidMatchStr(matchCallback) || matchDelay && !isValidMatchNumber(matchDelay)) {
return false;
}
-
var _parseMatchArg = parseMatchArg(matchCallback),
- isInvertedMatch = _parseMatchArg.isInvertedMatch,
- matchRegexp = _parseMatchArg.matchRegexp;
-
+ isInvertedMatch = _parseMatchArg.isInvertedMatch,
+ matchRegexp = _parseMatchArg.matchRegexp;
var _parseDelayArg = parseDelayArg(matchDelay),
- isInvertedDelayMatch = _parseDelayArg.isInvertedDelayMatch,
- delayMatch = _parseDelayArg.delayMatch;
-
+ isInvertedDelayMatch = _parseDelayArg.isInvertedDelayMatch,
+ delayMatch = _parseDelayArg.delayMatch;
var shouldPrevent = false;
var callbackStr = String(callback);
-
if (delayMatch === null) {
shouldPrevent = matchRegexp.test(callbackStr) !== isInvertedMatch;
} else if (!matchCallback) {
@@ -21449,44 +17850,34 @@
} else {
shouldPrevent = matchRegexp.test(callbackStr) !== isInvertedMatch && delay === delayMatch !== isInvertedDelayMatch;
}
-
return shouldPrevent;
}
-
function logMessage(source, message) {
var forced = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;
-
if (forced || source.verbose) {
console.log("".concat(source.name, ": ").concat(message));
}
}
-
function toRegExp() {
var input = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : "";
var DEFAULT_VALUE = ".?";
var FORWARD_SLASH = "/";
-
if (input === "") {
return new RegExp(DEFAULT_VALUE);
}
-
if (input[0] === FORWARD_SLASH && input[input.length - 1] === FORWARD_SLASH) {
return new RegExp(input.slice(1, -1));
}
-
var escaped = input.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
return new RegExp(escaped);
}
-
function startsWith(str, prefix) {
return !!str && str.indexOf(prefix) === 0;
}
-
function nativeIsNaN(num) {
var native = Number.isNaN || window.isNaN;
return native(num);
}
-
function parseMatchArg(match) {
var INVERT_MARKER = "!";
var isInvertedMatch = startsWith(match, INVERT_MARKER);
@@ -21497,7 +17888,6 @@
matchRegexp: matchRegexp
};
}
-
function parseDelayArg(delay) {
var INVERT_MARKER = "!";
var isInvertedDelayMatch = startsWith(delay, INVERT_MARKER);
@@ -21509,81 +17899,62 @@
delayMatch: delayMatch
};
}
-
function isValidCallback(callback) {
return callback instanceof Function || typeof callback === "string";
}
-
function isValidMatchStr(match) {
var INVERT_MARKER = "!";
var str = match;
-
if (startsWith(match, INVERT_MARKER)) {
str = match.slice(1);
}
-
return isValidStrPattern(str);
}
-
function isValidStrPattern(input) {
var FORWARD_SLASH = "/";
var str = escapeRegExp(input);
-
if (input[0] === FORWARD_SLASH && input[input.length - 1] === FORWARD_SLASH) {
str = input.slice(1, -1);
}
-
var isValid;
-
try {
isValid = new RegExp(str);
isValid = true;
} catch (e) {
isValid = false;
}
-
return isValid;
}
-
function escapeRegExp(str) {
return str.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
}
-
function nativeIsFinite(num) {
var native = Number.isFinite || window.isFinite;
return native(num);
}
-
function isValidMatchNumber(match) {
var INVERT_MARKER = "!";
var str = match;
-
if (startsWith(match, INVERT_MARKER)) {
str = match.slice(1);
}
-
var num = parseFloat(str);
return !nativeIsNaN(num) && nativeIsFinite(num);
}
-
var updatedArgs = args ? [].concat(source).concat(args) : [source];
-
try {
preventSetInterval.apply(this, updatedArgs);
} catch (e) {
console.log(e);
}
}
-
function preventSetTimeout(source, args) {
function preventSetTimeout(source, matchCallback, matchDelay) {
var isProxySupported = typeof Proxy !== "undefined";
var nativeTimeout = window.setTimeout;
var shouldLog = typeof matchCallback === "undefined" && typeof matchDelay === "undefined";
-
var legacyTimeoutWrapper = function legacyTimeoutWrapper(callback, delay) {
var shouldPrevent = false;
-
if (shouldLog) {
hit(source);
logMessage(source, "setTimeout(".concat(String(callback), ", ").concat(delay, ")"), true);
@@ -21595,24 +17966,19 @@
matchDelay: matchDelay
});
}
-
if (shouldPrevent) {
hit(source);
return nativeTimeout(noopFunc, delay);
}
-
for (var _len = arguments.length, args = new Array(_len > 2 ? _len - 2 : 0), _key = 2; _key < _len; _key++) {
args[_key - 2] = arguments[_key];
}
-
return nativeTimeout.apply(window, [callback, delay].concat(args));
};
-
var handlerWrapper = function handlerWrapper(target, thisArg, args) {
var callback = args[0];
var delay = args[1];
var shouldPrevent = false;
-
if (shouldLog) {
hit(source);
logMessage(source, "setTimeout(".concat(String(callback), ", ").concat(delay, ")"), true);
@@ -21624,97 +17990,67 @@
matchDelay: matchDelay
});
}
-
if (shouldPrevent) {
hit(source);
args[0] = noopFunc;
}
-
return target.apply(thisArg, args);
};
-
var setTimeoutHandler = {
apply: handlerWrapper
};
window.setTimeout = isProxySupported ? new Proxy(window.setTimeout, setTimeoutHandler) : legacyTimeoutWrapper;
}
-
- function hit(source, message) {
+ function hit(source) {
if (source.verbose !== true) {
return;
}
-
try {
var log = console.log.bind(console);
var trace = console.trace.bind(console);
var prefix = source.ruleText || "";
-
if (source.domainName) {
var AG_SCRIPTLET_MARKER = "#%#//";
var UBO_SCRIPTLET_MARKER = "##+js";
var ruleStartIndex;
-
if (source.ruleText.indexOf(AG_SCRIPTLET_MARKER) > -1) {
ruleStartIndex = source.ruleText.indexOf(AG_SCRIPTLET_MARKER);
} else if (source.ruleText.indexOf(UBO_SCRIPTLET_MARKER) > -1) {
ruleStartIndex = source.ruleText.indexOf(UBO_SCRIPTLET_MARKER);
}
-
var rulePart = source.ruleText.slice(ruleStartIndex);
prefix = "".concat(source.domainName).concat(rulePart);
}
-
- var LOG_MARKER = "log: ";
-
- if (message) {
- if (message.indexOf(LOG_MARKER) === -1) {
- log("".concat(prefix, " message:\n").concat(message));
- } else {
- log(message.slice(LOG_MARKER.length));
- }
- }
-
log("".concat(prefix, " trace start"));
-
if (trace) {
trace();
}
-
log("".concat(prefix, " trace end"));
} catch (e) {}
-
if (typeof window.__debug === "function") {
window.__debug(source);
}
}
-
function noopFunc() {}
-
function isPreventionNeeded(_ref) {
var callback = _ref.callback,
- delay = _ref.delay,
- matchCallback = _ref.matchCallback,
- matchDelay = _ref.matchDelay;
-
+ delay = _ref.delay,
+ matchCallback = _ref.matchCallback,
+ matchDelay = _ref.matchDelay;
if (!isValidCallback(callback)) {
return false;
}
-
if (!isValidMatchStr(matchCallback) || matchDelay && !isValidMatchNumber(matchDelay)) {
return false;
}
-
var _parseMatchArg = parseMatchArg(matchCallback),
- isInvertedMatch = _parseMatchArg.isInvertedMatch,
- matchRegexp = _parseMatchArg.matchRegexp;
-
+ isInvertedMatch = _parseMatchArg.isInvertedMatch,
+ matchRegexp = _parseMatchArg.matchRegexp;
var _parseDelayArg = parseDelayArg(matchDelay),
- isInvertedDelayMatch = _parseDelayArg.isInvertedDelayMatch,
- delayMatch = _parseDelayArg.delayMatch;
-
+ isInvertedDelayMatch = _parseDelayArg.isInvertedDelayMatch,
+ delayMatch = _parseDelayArg.delayMatch;
var shouldPrevent = false;
var callbackStr = String(callback);
-
if (delayMatch === null) {
shouldPrevent = matchRegexp.test(callbackStr) !== isInvertedMatch;
} else if (!matchCallback) {
@@ -21722,18 +18058,14 @@
} else {
shouldPrevent = matchRegexp.test(callbackStr) !== isInvertedMatch && delay === delayMatch !== isInvertedDelayMatch;
}
-
return shouldPrevent;
}
-
function logMessage(source, message) {
var forced = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;
-
if (forced || source.verbose) {
console.log("".concat(source.name, ": ").concat(message));
}
}
-
function parseMatchArg(match) {
var INVERT_MARKER = "!";
var isInvertedMatch = startsWith(match, INVERT_MARKER);
@@ -21744,7 +18076,6 @@
matchRegexp: matchRegexp
};
}
-
function parseDelayArg(delay) {
var INVERT_MARKER = "!";
var isInvertedDelayMatch = startsWith(delay, INVERT_MARKER);
@@ -21756,98 +18087,75 @@
delayMatch: delayMatch
};
}
-
function toRegExp() {
var input = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : "";
var DEFAULT_VALUE = ".?";
var FORWARD_SLASH = "/";
-
if (input === "") {
return new RegExp(DEFAULT_VALUE);
}
-
if (input[0] === FORWARD_SLASH && input[input.length - 1] === FORWARD_SLASH) {
return new RegExp(input.slice(1, -1));
}
-
var escaped = input.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
return new RegExp(escaped);
}
-
function startsWith(str, prefix) {
return !!str && str.indexOf(prefix) === 0;
}
-
function nativeIsNaN(num) {
var native = Number.isNaN || window.isNaN;
return native(num);
}
-
function isValidCallback(callback) {
return callback instanceof Function || typeof callback === "string";
}
-
function isValidMatchStr(match) {
var INVERT_MARKER = "!";
var str = match;
-
if (startsWith(match, INVERT_MARKER)) {
str = match.slice(1);
}
-
return isValidStrPattern(str);
}
-
function escapeRegExp(str) {
return str.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
}
-
function isValidStrPattern(input) {
var FORWARD_SLASH = "/";
var str = escapeRegExp(input);
-
if (input[0] === FORWARD_SLASH && input[input.length - 1] === FORWARD_SLASH) {
str = input.slice(1, -1);
}
-
var isValid;
-
try {
isValid = new RegExp(str);
isValid = true;
} catch (e) {
isValid = false;
}
-
return isValid;
}
-
function nativeIsFinite(num) {
var native = Number.isFinite || window.isFinite;
return native(num);
}
-
function isValidMatchNumber(match) {
var INVERT_MARKER = "!";
var str = match;
-
if (startsWith(match, INVERT_MARKER)) {
str = match.slice(1);
}
-
var num = parseFloat(str);
return !nativeIsNaN(num) && nativeIsFinite(num);
}
-
var updatedArgs = args ? [].concat(source).concat(args) : [source];
-
try {
preventSetTimeout.apply(this, updatedArgs);
} catch (e) {
console.log(e);
}
}
-
function preventWindowOpen(source, args) {
function preventWindowOpen(source) {
var match = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : "*";
@@ -21855,62 +18163,48 @@
var replacement = arguments.length > 3 ? arguments[3] : undefined;
var nativeOpen = window.open;
var isNewSyntax = match !== "0" && match !== "1";
-
var oldOpenWrapper = function oldOpenWrapper(str) {
match = Number(match) > 0;
-
for (var _len = arguments.length, args = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {
args[_key - 1] = arguments[_key];
}
-
if (!isValidStrPattern(delay)) {
logMessage(source, "Invalid parameter: ".concat(delay));
return nativeOpen.apply(window, [str].concat(args));
}
-
var searchRegexp = toRegExp(delay);
-
if (match !== searchRegexp.test(str)) {
return nativeOpen.apply(window, [str].concat(args));
}
-
hit(source);
return handleOldReplacement(replacement);
};
-
var newOpenWrapper = function newOpenWrapper(url) {
var shouldLog = replacement && replacement.indexOf("log") > -1;
-
for (var _len2 = arguments.length, args = new Array(_len2 > 1 ? _len2 - 1 : 0), _key2 = 1; _key2 < _len2; _key2++) {
args[_key2 - 1] = arguments[_key2];
}
-
if (shouldLog) {
var argsStr = args && args.length > 0 ? ", ".concat(args.join(", ")) : "";
- var message = "window-open: ".concat(url).concat(argsStr);
+ var message = "".concat(url).concat(argsStr);
logMessage(source, message, true);
hit(source);
}
-
var shouldPrevent = false;
-
if (match === "*") {
shouldPrevent = true;
} else if (isValidMatchStr(match)) {
var _parseMatchArg = parseMatchArg(match),
- isInvertedMatch = _parseMatchArg.isInvertedMatch,
- matchRegexp = _parseMatchArg.matchRegexp;
-
+ isInvertedMatch = _parseMatchArg.isInvertedMatch,
+ matchRegexp = _parseMatchArg.matchRegexp;
shouldPrevent = matchRegexp.test(url) !== isInvertedMatch;
} else {
logMessage(source, "Invalid parameter: ".concat(match));
shouldPrevent = false;
}
-
if (shouldPrevent) {
var parsedDelay = parseInt(delay, 10);
var result;
-
if (nativeIsNaN(parsedDelay)) {
result = noopNull();
} else {
@@ -21921,7 +18215,6 @@
};
var decoy = createDecoy(decoyArgs);
var popup = decoy.contentWindow;
-
if (typeof popup === "object" && popup !== null) {
Object.defineProperty(popup, "closed", {
value: false
@@ -21939,127 +18232,89 @@
});
popup = decoy.contentWindow;
}
-
result = popup;
}
-
hit(source);
return result;
}
-
return nativeOpen.apply(window, [url].concat(args));
};
-
window.open = isNewSyntax ? newOpenWrapper : oldOpenWrapper;
window.open.toString = nativeOpen.toString.bind(nativeOpen);
}
-
- function hit(source, message) {
+ function hit(source) {
if (source.verbose !== true) {
return;
}
-
try {
var log = console.log.bind(console);
var trace = console.trace.bind(console);
var prefix = source.ruleText || "";
-
if (source.domainName) {
var AG_SCRIPTLET_MARKER = "#%#//";
var UBO_SCRIPTLET_MARKER = "##+js";
var ruleStartIndex;
-
if (source.ruleText.indexOf(AG_SCRIPTLET_MARKER) > -1) {
ruleStartIndex = source.ruleText.indexOf(AG_SCRIPTLET_MARKER);
} else if (source.ruleText.indexOf(UBO_SCRIPTLET_MARKER) > -1) {
ruleStartIndex = source.ruleText.indexOf(UBO_SCRIPTLET_MARKER);
}
-
var rulePart = source.ruleText.slice(ruleStartIndex);
prefix = "".concat(source.domainName).concat(rulePart);
}
-
- var LOG_MARKER = "log: ";
-
- if (message) {
- if (message.indexOf(LOG_MARKER) === -1) {
- log("".concat(prefix, " message:\n").concat(message));
- } else {
- log(message.slice(LOG_MARKER.length));
- }
- }
-
log("".concat(prefix, " trace start"));
-
if (trace) {
trace();
}
-
log("".concat(prefix, " trace end"));
} catch (e) {}
-
if (typeof window.__debug === "function") {
window.__debug(source);
}
}
-
function isValidStrPattern(input) {
var FORWARD_SLASH = "/";
var str = escapeRegExp(input);
-
if (input[0] === FORWARD_SLASH && input[input.length - 1] === FORWARD_SLASH) {
str = input.slice(1, -1);
}
-
var isValid;
-
try {
isValid = new RegExp(str);
isValid = true;
} catch (e) {
isValid = false;
}
-
return isValid;
}
-
function escapeRegExp(str) {
return str.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
}
-
function isValidMatchStr(match) {
var INVERT_MARKER = "!";
var str = match;
-
if (startsWith(match, INVERT_MARKER)) {
str = match.slice(1);
}
-
return isValidStrPattern(str);
}
-
function toRegExp() {
var input = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : "";
var DEFAULT_VALUE = ".?";
var FORWARD_SLASH = "/";
-
if (input === "") {
return new RegExp(DEFAULT_VALUE);
}
-
if (input[0] === FORWARD_SLASH && input[input.length - 1] === FORWARD_SLASH) {
return new RegExp(input.slice(1, -1));
}
-
var escaped = input.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
return new RegExp(escaped);
}
-
function nativeIsNaN(num) {
var native = Number.isNaN || window.isNaN;
return native(num);
}
-
function parseMatchArg(match) {
var INVERT_MARKER = "!";
var isInvertedMatch = startsWith(match, INVERT_MARKER);
@@ -22070,43 +18325,36 @@
matchRegexp: matchRegexp
};
}
-
function handleOldReplacement(replacement) {
var result;
-
if (!replacement) {
result = noopFunc;
} else if (replacement === "trueFunc") {
result = trueFunc;
} else if (replacement.indexOf("=") > -1) {
var isProp = startsWith(replacement, "{") && endsWith(replacement, "}");
-
if (isProp) {
var propertyPart = replacement.slice(1, -1);
var propertyName = substringBefore(propertyPart, "=");
var propertyValue = substringAfter(propertyPart, "=");
-
if (propertyValue === "noopFunc") {
result = {};
result[propertyName] = noopFunc;
}
}
}
-
return result;
}
-
function createDecoy(args) {
var OBJECT_TAG_NAME = "object";
var OBJECT_URL_PROP_NAME = "data";
var IFRAME_TAG_NAME = "iframe";
var IFRAME_URL_PROP_NAME = "src";
var replacement = args.replacement,
- url = args.url,
- delay = args.delay;
+ url = args.url,
+ delay = args.delay;
var tag;
var urlProp;
-
if (replacement === "obj") {
tag = OBJECT_TAG_NAME;
urlProp = OBJECT_URL_PROP_NAME;
@@ -22114,7 +18362,6 @@
tag = IFRAME_TAG_NAME;
urlProp = IFRAME_URL_PROP_NAME;
}
-
var decoy = document.createElement(tag);
decoy[urlProp] = url;
decoy.style.setProperty("height", "1px", "important");
@@ -22127,127 +18374,99 @@
}, delay * 1e3);
return decoy;
}
-
function getPreventGetter(nativeGetter) {
var preventGetter = function preventGetter(target, prop) {
if (prop && prop === "closed") {
return false;
}
-
if (typeof nativeGetter === "function") {
return noopFunc;
}
-
return prop && target[prop];
};
-
return preventGetter;
}
-
function noopNull() {
return null;
}
-
function logMessage(source, message) {
var forced = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;
-
if (forced || source.verbose) {
console.log("".concat(source.name, ": ").concat(message));
}
}
-
function noopFunc() {}
-
function trueFunc() {
return true;
}
-
function startsWith(str, prefix) {
return !!str && str.indexOf(prefix) === 0;
}
-
function endsWith(str, ending) {
return !!str && str.lastIndexOf(ending) === str.length - ending.length;
}
-
function substringBefore(str, separator) {
if (!str || !separator) {
return str;
}
-
var index = str.indexOf(separator);
return index < 0 ? str : str.substring(0, index);
}
-
function substringAfter(str, separator) {
if (!str) {
return str;
}
-
var index = str.indexOf(separator);
return index < 0 ? "" : str.substring(index + separator.length);
}
-
var updatedArgs = args ? [].concat(source).concat(args) : [source];
-
try {
preventWindowOpen.apply(this, updatedArgs);
} catch (e) {
console.log(e);
}
}
-
function preventXHR(source, args) {
function preventXHR(source, propsToMatch, customResponseText) {
if (typeof Proxy === "undefined") {
return;
}
-
var shouldPrevent = false;
var response = "";
var responseText = "";
var responseUrl;
-
var openWrapper = function openWrapper(target, thisArg, args) {
var xhrData = {
method: args[0],
url: args[1]
};
responseUrl = xhrData.url;
-
if (typeof propsToMatch === "undefined") {
logMessage(source, "xhr( ".concat(objectToString(xhrData), " )"), true);
hit(source);
} else {
shouldPrevent = matchRequestProps(source, propsToMatch, xhrData);
}
-
return Reflect.apply(target, thisArg, args);
};
-
var sendWrapper = function sendWrapper(target, thisArg, args) {
if (!shouldPrevent) {
return Reflect.apply(target, thisArg, args);
}
-
if (thisArg.responseType === "blob") {
response = new Blob();
}
-
if (thisArg.responseType === "arraybuffer") {
response = new ArrayBuffer();
}
-
if (customResponseText) {
var randomText = generateRandomResponse(customResponseText);
-
if (randomText) {
responseText = randomText;
} else {
logMessage(source, "Invalid range: ".concat(customResponseText));
}
}
-
Object.defineProperties(thisArg, {
readyState: {
value: 4,
@@ -22289,7 +18508,6 @@
hit(source);
return undefined;
};
-
var openHandler = {
apply: openWrapper
};
@@ -22299,86 +18517,59 @@
XMLHttpRequest.prototype.open = new Proxy(XMLHttpRequest.prototype.open, openHandler);
XMLHttpRequest.prototype.send = new Proxy(XMLHttpRequest.prototype.send, sendHandler);
}
-
- function hit(source, message) {
+ function hit(source) {
if (source.verbose !== true) {
return;
}
-
try {
var log = console.log.bind(console);
var trace = console.trace.bind(console);
var prefix = source.ruleText || "";
-
if (source.domainName) {
var AG_SCRIPTLET_MARKER = "#%#//";
var UBO_SCRIPTLET_MARKER = "##+js";
var ruleStartIndex;
-
if (source.ruleText.indexOf(AG_SCRIPTLET_MARKER) > -1) {
ruleStartIndex = source.ruleText.indexOf(AG_SCRIPTLET_MARKER);
} else if (source.ruleText.indexOf(UBO_SCRIPTLET_MARKER) > -1) {
ruleStartIndex = source.ruleText.indexOf(UBO_SCRIPTLET_MARKER);
}
-
var rulePart = source.ruleText.slice(ruleStartIndex);
prefix = "".concat(source.domainName).concat(rulePart);
}
-
- var LOG_MARKER = "log: ";
-
- if (message) {
- if (message.indexOf(LOG_MARKER) === -1) {
- log("".concat(prefix, " message:\n").concat(message));
- } else {
- log(message.slice(LOG_MARKER.length));
- }
- }
-
log("".concat(prefix, " trace start"));
-
if (trace) {
trace();
}
-
log("".concat(prefix, " trace end"));
} catch (e) {}
-
if (typeof window.__debug === "function") {
window.__debug(source);
}
}
-
function logMessage(source, message) {
var forced = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;
-
if (forced || source.verbose) {
console.log("".concat(source.name, ": ").concat(message));
}
}
-
function objectToString(obj) {
return isEmptyObject(obj) ? "{}" : getObjectEntries(obj).map(function (pair) {
var key = pair[0];
var value = pair[1];
var recordValueStr = value;
-
if (value instanceof Object) {
recordValueStr = "{ ".concat(objectToString(value), " }");
}
-
return "".concat(key, ':"').concat(recordValueStr, '"');
}).join(" ");
}
-
function matchRequestProps(source, propsToMatch, requestData) {
if (propsToMatch === "" || propsToMatch === "*") {
return true;
}
-
var isMatched;
var parsedData = parseMatchProps(propsToMatch);
-
if (!validateParsedData(parsedData)) {
logMessage(source, "Invalid parameter: ".concat(propsToMatch));
isMatched = false;
@@ -22389,94 +18580,71 @@
return Object.prototype.hasOwnProperty.call(requestData, matchKey) && matchValue.test(requestData[matchKey]);
});
}
-
return isMatched;
}
-
function generateRandomResponse(customResponseText) {
var customResponse = customResponseText;
-
if (customResponse === "true") {
customResponse = Math.random().toString(36).slice(-10);
return customResponse;
}
-
customResponse = customResponse.replace("length:", "");
var rangeRegex = /^\d+-\d+$/;
-
if (!rangeRegex.test(customResponse)) {
return null;
}
-
var rangeMin = getNumberFromString(customResponse.split("-")[0]);
var rangeMax = getNumberFromString(customResponse.split("-")[1]);
-
if (!nativeIsFinite(rangeMin) || !nativeIsFinite(rangeMax)) {
return null;
}
-
if (rangeMin > rangeMax) {
var temp = rangeMin;
rangeMin = rangeMax;
rangeMax = temp;
}
-
var LENGTH_RANGE_LIMIT = 500 * 1e3;
-
if (rangeMax > LENGTH_RANGE_LIMIT) {
return null;
}
-
var length = getRandomIntInclusive(rangeMin, rangeMax);
customResponse = getRandomStrByLength(length);
return customResponse;
}
-
function toRegExp() {
var input = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : "";
var DEFAULT_VALUE = ".?";
var FORWARD_SLASH = "/";
-
if (input === "") {
return new RegExp(DEFAULT_VALUE);
}
-
if (input[0] === FORWARD_SLASH && input[input.length - 1] === FORWARD_SLASH) {
return new RegExp(input.slice(1, -1));
}
-
var escaped = input.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
return new RegExp(escaped);
}
-
function isValidStrPattern(input) {
var FORWARD_SLASH = "/";
var str = escapeRegExp(input);
-
if (input[0] === FORWARD_SLASH && input[input.length - 1] === FORWARD_SLASH) {
str = input.slice(1, -1);
}
-
var isValid;
-
try {
isValid = new RegExp(str);
isValid = true;
} catch (e) {
isValid = false;
}
-
return isValid;
}
-
function escapeRegExp(str) {
return str.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
}
-
function isEmptyObject(obj) {
- return Object.keys(obj).length === 0;
+ return Object.keys(obj).length === 0 && !obj.prototype;
}
-
function getObjectEntries(object) {
var keys = Object.keys(object);
var entries = [];
@@ -22485,23 +18653,19 @@
});
return entries;
}
-
function getNumberFromString(rawString) {
var parsedDelay = parseInt(rawString, 10);
var validDelay = nativeIsNaN(parsedDelay) ? null : parsedDelay;
return validDelay;
}
-
function nativeIsFinite(num) {
var native = Number.isFinite || window.isFinite;
return native(num);
}
-
function nativeIsNaN(num) {
var native = Number.isNaN || window.isNaN;
return native(num);
}
-
function parseMatchProps(propsToMatchStr) {
var PROPS_DIVIDER = " ";
var PAIRS_MARKER = ":";
@@ -22512,7 +18676,6 @@
var dividerInd = prop.indexOf(PAIRS_MARKER);
var key = prop.slice(0, dividerInd);
var hasLegalMatchProp = LEGAL_MATCH_PROPS.indexOf(key) !== -1;
-
if (hasLegalMatchProp) {
var value = prop.slice(dividerInd + 1);
propsObj[key] = value;
@@ -22522,13 +18685,11 @@
});
return propsObj;
}
-
function validateParsedData(data) {
return Object.values(data).every(function (value) {
return isValidStrPattern(value);
});
}
-
function getMatchPropsData(data) {
var matchData = {};
Object.keys(data).forEach(function (key) {
@@ -22536,57 +18697,47 @@
});
return matchData;
}
-
+ function getRequestProps() {
+ return ["url", "method", "headers", "body", "mode", "credentials", "cache", "redirect", "referrer", "referrerPolicy", "integrity", "keepalive", "signal"];
+ }
function getRandomIntInclusive(min, max) {
min = Math.ceil(min);
max = Math.floor(max);
return Math.floor(Math.random() * (max - min + 1) + min);
}
-
function getRandomStrByLength(length) {
var result = "";
var characters = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789!@#$%^&*()_+=~";
var charactersLength = characters.length;
-
for (var i = 0; i < length; i += 1) {
result += characters.charAt(Math.floor(Math.random() * charactersLength));
}
-
return result;
}
-
var updatedArgs = args ? [].concat(source).concat(args) : [source];
-
try {
preventXHR.apply(this, updatedArgs);
} catch (e) {
console.log(e);
}
}
-
function removeAttr(source, args) {
function removeAttr(source, attrs, selector) {
var applying = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : "asap stay";
-
if (!attrs) {
return;
}
-
attrs = attrs.split(/\s*\|\s*/);
-
if (!selector) {
selector = "[".concat(attrs.join("],["), "]");
}
-
var rmattr = function rmattr() {
var nodes = [];
-
try {
nodes = [].slice.call(document.querySelectorAll(selector));
} catch (e) {
logMessage(source, "Invalid selector arg: '".concat(selector, "'"));
}
-
var removed = false;
nodes.forEach(function (node) {
attrs.forEach(function (attr) {
@@ -22594,24 +18745,18 @@
removed = true;
});
});
-
if (removed) {
hit(source);
}
};
-
var flags = parseFlags(applying);
-
var run = function run() {
rmattr();
-
if (!flags.hasFlag(flags.STAY)) {
return;
}
-
observeDOMChanges(rmattr, true);
};
-
if (flags.hasFlag(flags.ASAP)) {
if (document.readyState === "loading") {
window.addEventListener("DOMContentLoaded", rmattr, {
@@ -22621,7 +18766,6 @@
rmattr();
}
}
-
if (document.readyState !== "complete" && flags.hasFlag(flags.COMPLETE)) {
window.addEventListener("load", run, {
once: true
@@ -22630,66 +18774,44 @@
if (!applying.indexOf(" ") !== -1) {
rmattr();
}
-
observeDOMChanges(rmattr, true);
}
}
-
- function hit(source, message) {
+ function hit(source) {
if (source.verbose !== true) {
return;
}
-
try {
var log = console.log.bind(console);
var trace = console.trace.bind(console);
var prefix = source.ruleText || "";
-
if (source.domainName) {
var AG_SCRIPTLET_MARKER = "#%#//";
var UBO_SCRIPTLET_MARKER = "##+js";
var ruleStartIndex;
-
if (source.ruleText.indexOf(AG_SCRIPTLET_MARKER) > -1) {
ruleStartIndex = source.ruleText.indexOf(AG_SCRIPTLET_MARKER);
} else if (source.ruleText.indexOf(UBO_SCRIPTLET_MARKER) > -1) {
ruleStartIndex = source.ruleText.indexOf(UBO_SCRIPTLET_MARKER);
}
-
var rulePart = source.ruleText.slice(ruleStartIndex);
prefix = "".concat(source.domainName).concat(rulePart);
}
-
- var LOG_MARKER = "log: ";
-
- if (message) {
- if (message.indexOf(LOG_MARKER) === -1) {
- log("".concat(prefix, " message:\n").concat(message));
- } else {
- log(message.slice(LOG_MARKER.length));
- }
- }
-
log("".concat(prefix, " trace start"));
-
if (trace) {
trace();
}
-
log("".concat(prefix, " trace end"));
} catch (e) {}
-
if (typeof window.__debug === "function") {
window.__debug(source);
}
}
-
function observeDOMChanges(callback) {
var observeAttrs = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;
var attrsToObserve = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : [];
var THROTTLE_DELAY_MS = 20;
var observer = new MutationObserver(throttle(callbackWrapper, THROTTLE_DELAY_MS));
-
var connect = function connect() {
if (attrsToObserve.length > 0) {
observer.observe(document.documentElement, {
@@ -22706,20 +18828,16 @@
});
}
};
-
var disconnect = function disconnect() {
observer.disconnect();
};
-
function callbackWrapper() {
disconnect();
callback();
connect();
}
-
connect();
}
-
function parseFlags(flags) {
var FLAGS_DIVIDER = " ";
var ASAP_FLAG = "asap";
@@ -22738,96 +18856,76 @@
}
};
}
-
function logMessage(source, message) {
var forced = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;
-
if (forced || source.verbose) {
console.log("".concat(source.name, ": ").concat(message));
}
}
-
function throttle(cb, delay) {
var wait = false;
var savedArgs;
-
var wrapper = function wrapper() {
for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
args[_key] = arguments[_key];
}
-
if (wait) {
savedArgs = args;
return;
}
-
cb.apply(void 0, args);
wait = true;
setTimeout(function () {
wait = false;
-
if (savedArgs) {
wrapper(savedArgs);
savedArgs = null;
}
}, delay);
};
-
return wrapper;
}
-
var updatedArgs = args ? [].concat(source).concat(args) : [source];
-
try {
removeAttr.apply(this, updatedArgs);
} catch (e) {
console.log(e);
}
}
-
function removeClass(source, args) {
function removeClass(source, classNames, selector) {
var applying = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : "asap stay";
-
if (!classNames) {
return;
}
-
classNames = classNames.split(/\s*\|\s*/);
var selectors = [];
-
if (!selector) {
selectors = classNames.map(function (className) {
return ".".concat(className);
});
}
-
var removeClassHandler = function removeClassHandler() {
var nodes = new Set();
-
if (selector) {
var foundNodes = [];
-
try {
foundNodes = [].slice.call(document.querySelectorAll(selector));
} catch (e) {
logMessage(source, "Invalid selector arg: '".concat(selector, "'"));
}
-
foundNodes.forEach(function (n) {
return nodes.add(n);
});
} else if (selectors.length > 0) {
selectors.forEach(function (s) {
var elements = document.querySelectorAll(s);
-
for (var i = 0; i < elements.length; i += 1) {
var element = elements[i];
nodes.add(element);
}
});
}
-
var removed = false;
nodes.forEach(function (node) {
classNames.forEach(function (className) {
@@ -22837,25 +18935,19 @@
}
});
});
-
if (removed) {
hit(source);
}
};
-
var CLASS_ATTR_NAME = ["class"];
var flags = parseFlags(applying);
-
var run = function run() {
removeClassHandler();
-
if (!flags.hasFlag(flags.STAY)) {
return;
}
-
observeDOMChanges(removeClassHandler, true, CLASS_ATTR_NAME);
};
-
if (flags.hasFlag(flags.ASAP)) {
if (document.readyState === "loading") {
window.addEventListener("DOMContentLoaded", removeClassHandler, {
@@ -22865,7 +18957,6 @@
removeClassHandler();
}
}
-
if (document.readyState !== "complete" && flags.hasFlag(flags.COMPLETE)) {
window.addEventListener("load", run, {
once: true
@@ -22874,74 +18965,50 @@
if (!applying.indexOf(" ") !== -1) {
removeClassHandler();
}
-
observeDOMChanges(removeClassHandler, true, CLASS_ATTR_NAME);
}
}
-
- function hit(source, message) {
+ function hit(source) {
if (source.verbose !== true) {
return;
}
-
try {
var log = console.log.bind(console);
var trace = console.trace.bind(console);
var prefix = source.ruleText || "";
-
if (source.domainName) {
var AG_SCRIPTLET_MARKER = "#%#//";
var UBO_SCRIPTLET_MARKER = "##+js";
var ruleStartIndex;
-
if (source.ruleText.indexOf(AG_SCRIPTLET_MARKER) > -1) {
ruleStartIndex = source.ruleText.indexOf(AG_SCRIPTLET_MARKER);
} else if (source.ruleText.indexOf(UBO_SCRIPTLET_MARKER) > -1) {
ruleStartIndex = source.ruleText.indexOf(UBO_SCRIPTLET_MARKER);
}
-
var rulePart = source.ruleText.slice(ruleStartIndex);
prefix = "".concat(source.domainName).concat(rulePart);
}
-
- var LOG_MARKER = "log: ";
-
- if (message) {
- if (message.indexOf(LOG_MARKER) === -1) {
- log("".concat(prefix, " message:\n").concat(message));
- } else {
- log(message.slice(LOG_MARKER.length));
- }
- }
-
log("".concat(prefix, " trace start"));
-
if (trace) {
trace();
}
-
log("".concat(prefix, " trace end"));
} catch (e) {}
-
if (typeof window.__debug === "function") {
window.__debug(source);
}
}
-
function logMessage(source, message) {
var forced = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;
-
if (forced || source.verbose) {
console.log("".concat(source.name, ": ").concat(message));
}
}
-
function observeDOMChanges(callback) {
var observeAttrs = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;
var attrsToObserve = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : [];
var THROTTLE_DELAY_MS = 20;
var observer = new MutationObserver(throttle(callbackWrapper, THROTTLE_DELAY_MS));
-
var connect = function connect() {
if (attrsToObserve.length > 0) {
observer.observe(document.documentElement, {
@@ -22958,20 +19025,16 @@
});
}
};
-
var disconnect = function disconnect() {
observer.disconnect();
};
-
function callbackWrapper() {
disconnect();
callback();
connect();
}
-
connect();
}
-
function parseFlags(flags) {
var FLAGS_DIVIDER = " ";
var ASAP_FLAG = "asap";
@@ -22990,49 +19053,39 @@
}
};
}
-
function throttle(cb, delay) {
var wait = false;
var savedArgs;
-
var wrapper = function wrapper() {
for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
args[_key] = arguments[_key];
}
-
if (wait) {
savedArgs = args;
return;
}
-
cb.apply(void 0, args);
wait = true;
setTimeout(function () {
wait = false;
-
if (savedArgs) {
wrapper(savedArgs);
savedArgs = null;
}
}, delay);
};
-
return wrapper;
}
-
var updatedArgs = args ? [].concat(source).concat(args) : [source];
-
try {
removeClass.apply(this, updatedArgs);
} catch (e) {
console.log(e);
}
}
-
function removeCookie(source, args) {
function removeCookie(source, match) {
var matchRegexp = toRegExp(match);
-
var removeCookieFromHost = function removeCookieFromHost(cookieName, hostName) {
var cookieSpec = "".concat(cookieName, "=");
var domain1 = "; domain=".concat(hostName);
@@ -23047,204 +19100,141 @@
document.cookie = cookieSpec + domain2 + path + expiration;
hit(source);
};
-
var rmCookie = function rmCookie() {
document.cookie.split(";").forEach(function (cookieStr) {
var pos = cookieStr.indexOf("=");
-
if (pos === -1) {
return;
}
-
var cookieName = cookieStr.slice(0, pos).trim();
-
if (!matchRegexp.test(cookieName)) {
return;
}
-
var hostParts = document.location.hostname.split(".");
-
for (var i = 0; i <= hostParts.length - 1; i += 1) {
var hostName = hostParts.slice(i).join(".");
-
if (hostName) {
removeCookieFromHost(cookieName, hostName);
}
}
});
};
-
rmCookie();
window.addEventListener("beforeunload", rmCookie);
}
-
function toRegExp() {
var input = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : "";
var DEFAULT_VALUE = ".?";
var FORWARD_SLASH = "/";
-
if (input === "") {
return new RegExp(DEFAULT_VALUE);
}
-
if (input[0] === FORWARD_SLASH && input[input.length - 1] === FORWARD_SLASH) {
return new RegExp(input.slice(1, -1));
}
-
var escaped = input.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
return new RegExp(escaped);
}
-
- function hit(source, message) {
+ function hit(source) {
if (source.verbose !== true) {
return;
}
-
try {
var log = console.log.bind(console);
var trace = console.trace.bind(console);
var prefix = source.ruleText || "";
-
if (source.domainName) {
var AG_SCRIPTLET_MARKER = "#%#//";
var UBO_SCRIPTLET_MARKER = "##+js";
var ruleStartIndex;
-
if (source.ruleText.indexOf(AG_SCRIPTLET_MARKER) > -1) {
ruleStartIndex = source.ruleText.indexOf(AG_SCRIPTLET_MARKER);
} else if (source.ruleText.indexOf(UBO_SCRIPTLET_MARKER) > -1) {
ruleStartIndex = source.ruleText.indexOf(UBO_SCRIPTLET_MARKER);
}
-
var rulePart = source.ruleText.slice(ruleStartIndex);
prefix = "".concat(source.domainName).concat(rulePart);
}
-
- var LOG_MARKER = "log: ";
-
- if (message) {
- if (message.indexOf(LOG_MARKER) === -1) {
- log("".concat(prefix, " message:\n").concat(message));
- } else {
- log(message.slice(LOG_MARKER.length));
- }
- }
-
log("".concat(prefix, " trace start"));
-
if (trace) {
trace();
}
-
log("".concat(prefix, " trace end"));
} catch (e) {}
-
if (typeof window.__debug === "function") {
window.__debug(source);
}
}
-
var updatedArgs = args ? [].concat(source).concat(args) : [source];
-
try {
removeCookie.apply(this, updatedArgs);
} catch (e) {
console.log(e);
}
}
-
function removeInShadowDom(source, args) {
function removeInShadowDom(source, selector, baseSelector) {
if (!Element.prototype.attachShadow) {
return;
}
-
var removeElement = function removeElement(targetElement) {
targetElement.remove();
};
-
var removeHandler = function removeHandler() {
var hostElements = !baseSelector ? findHostElements(document.documentElement) : document.querySelectorAll(baseSelector);
-
while (hostElements.length !== 0) {
var isRemoved = false;
-
var _pierceShadowDom = pierceShadowDom(selector, hostElements),
- targets = _pierceShadowDom.targets,
- innerHosts = _pierceShadowDom.innerHosts;
-
+ targets = _pierceShadowDom.targets,
+ innerHosts = _pierceShadowDom.innerHosts;
targets.forEach(function (targetEl) {
removeElement(targetEl);
isRemoved = true;
});
-
if (isRemoved) {
hit(source);
}
-
hostElements = innerHosts;
}
};
-
removeHandler();
observeDOMChanges(removeHandler, true);
}
-
- function hit(source, message) {
+ function hit(source) {
if (source.verbose !== true) {
return;
}
-
try {
var log = console.log.bind(console);
var trace = console.trace.bind(console);
var prefix = source.ruleText || "";
-
if (source.domainName) {
var AG_SCRIPTLET_MARKER = "#%#//";
var UBO_SCRIPTLET_MARKER = "##+js";
var ruleStartIndex;
-
if (source.ruleText.indexOf(AG_SCRIPTLET_MARKER) > -1) {
ruleStartIndex = source.ruleText.indexOf(AG_SCRIPTLET_MARKER);
} else if (source.ruleText.indexOf(UBO_SCRIPTLET_MARKER) > -1) {
ruleStartIndex = source.ruleText.indexOf(UBO_SCRIPTLET_MARKER);
}
-
var rulePart = source.ruleText.slice(ruleStartIndex);
prefix = "".concat(source.domainName).concat(rulePart);
}
-
- var LOG_MARKER = "log: ";
-
- if (message) {
- if (message.indexOf(LOG_MARKER) === -1) {
- log("".concat(prefix, " message:\n").concat(message));
- } else {
- log(message.slice(LOG_MARKER.length));
- }
- }
-
log("".concat(prefix, " trace start"));
-
if (trace) {
trace();
}
-
log("".concat(prefix, " trace end"));
} catch (e) {}
-
if (typeof window.__debug === "function") {
window.__debug(source);
}
}
-
function observeDOMChanges(callback) {
var observeAttrs = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;
var attrsToObserve = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : [];
var THROTTLE_DELAY_MS = 20;
var observer = new MutationObserver(throttle(callbackWrapper, THROTTLE_DELAY_MS));
-
var connect = function connect() {
if (attrsToObserve.length > 0) {
observer.observe(document.documentElement, {
@@ -23261,20 +19251,16 @@
});
}
};
-
var disconnect = function disconnect() {
observer.disconnect();
};
-
function callbackWrapper() {
disconnect();
callback();
connect();
}
-
connect();
}
-
function findHostElements(rootElement) {
var hosts = [];
var domElems = rootElement.querySelectorAll("*");
@@ -23285,7 +19271,6 @@
});
return hosts;
}
-
function pierceShadowDom(selector, hostElements) {
var targets = [];
var innerHostsAcc = [];
@@ -23303,17 +19288,14 @@
innerHosts: innerHosts
};
}
-
function flatten(input) {
var stack = [];
input.forEach(function (el) {
return stack.push(el);
});
var res = [];
-
while (stack.length) {
var next = stack.pop();
-
if (Array.isArray(next)) {
next.forEach(function (el) {
return stack.push(el);
@@ -23322,60 +19304,47 @@
res.push(next);
}
}
-
return res.reverse();
}
-
function throttle(cb, delay) {
var wait = false;
var savedArgs;
-
var wrapper = function wrapper() {
for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
args[_key] = arguments[_key];
}
-
if (wait) {
savedArgs = args;
return;
}
-
cb.apply(void 0, args);
wait = true;
setTimeout(function () {
wait = false;
-
if (savedArgs) {
wrapper(savedArgs);
savedArgs = null;
}
}, delay);
};
-
return wrapper;
}
-
var updatedArgs = args ? [].concat(source).concat(args) : [source];
-
try {
removeInShadowDom.apply(this, updatedArgs);
} catch (e) {
console.log(e);
}
}
-
function setAttr(source, args) {
function setAttr(source, selector, attr) {
var value = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : "";
-
if (!selector || !attr) {
return;
}
-
if (value.length !== 0 && (nativeIsNaN(parseInt(value, 10)) || parseInt(value, 10) < 0 || parseInt(value, 10) > 32767)) {
return;
}
-
var setAttr = function setAttr() {
var nodes = [].slice.call(document.querySelectorAll(selector));
var set = false;
@@ -23383,71 +19352,48 @@
node.setAttribute(attr, value);
set = true;
});
-
if (set) {
hit(source);
}
};
-
setAttr();
observeDOMChanges(setAttr, true);
}
-
- function hit(source, message) {
+ function hit(source) {
if (source.verbose !== true) {
return;
}
-
try {
var log = console.log.bind(console);
var trace = console.trace.bind(console);
var prefix = source.ruleText || "";
-
if (source.domainName) {
var AG_SCRIPTLET_MARKER = "#%#//";
var UBO_SCRIPTLET_MARKER = "##+js";
var ruleStartIndex;
-
if (source.ruleText.indexOf(AG_SCRIPTLET_MARKER) > -1) {
ruleStartIndex = source.ruleText.indexOf(AG_SCRIPTLET_MARKER);
} else if (source.ruleText.indexOf(UBO_SCRIPTLET_MARKER) > -1) {
ruleStartIndex = source.ruleText.indexOf(UBO_SCRIPTLET_MARKER);
}
-
var rulePart = source.ruleText.slice(ruleStartIndex);
prefix = "".concat(source.domainName).concat(rulePart);
}
-
- var LOG_MARKER = "log: ";
-
- if (message) {
- if (message.indexOf(LOG_MARKER) === -1) {
- log("".concat(prefix, " message:\n").concat(message));
- } else {
- log(message.slice(LOG_MARKER.length));
- }
- }
-
log("".concat(prefix, " trace start"));
-
if (trace) {
trace();
}
-
log("".concat(prefix, " trace end"));
} catch (e) {}
-
if (typeof window.__debug === "function") {
window.__debug(source);
}
}
-
function observeDOMChanges(callback) {
var observeAttrs = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;
var attrsToObserve = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : [];
var THROTTLE_DELAY_MS = 20;
var observer = new MutationObserver(throttle(callbackWrapper, THROTTLE_DELAY_MS));
-
var connect = function connect() {
if (attrsToObserve.length > 0) {
observer.observe(document.documentElement, {
@@ -23464,73 +19410,58 @@
});
}
};
-
var disconnect = function disconnect() {
observer.disconnect();
};
-
function callbackWrapper() {
disconnect();
callback();
connect();
}
-
connect();
}
-
function nativeIsNaN(num) {
var native = Number.isNaN || window.isNaN;
return native(num);
}
-
function throttle(cb, delay) {
var wait = false;
var savedArgs;
-
var wrapper = function wrapper() {
for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
args[_key] = arguments[_key];
}
-
if (wait) {
savedArgs = args;
return;
}
-
cb.apply(void 0, args);
wait = true;
setTimeout(function () {
wait = false;
-
if (savedArgs) {
wrapper(savedArgs);
savedArgs = null;
}
}, delay);
};
-
return wrapper;
}
-
var updatedArgs = args ? [].concat(source).concat(args) : [source];
-
try {
setAttr.apply(this, updatedArgs);
} catch (e) {
console.log(e);
}
}
-
function setConstant(source, args) {
function setConstant(source, property, value, stack) {
if (!property || !matchStackTrace(stack, new Error().stack)) {
return;
}
-
var emptyArr = noopArray();
var emptyObj = noopObject();
var constantValue;
-
if (value === "undefined") {
constantValue = undefined;
} else if (value === "false") {
@@ -23555,11 +19486,9 @@
constantValue = noopPromiseReject;
} else if (/^\d+$/.test(value)) {
constantValue = parseFloat(value);
-
if (nativeIsNaN(constantValue)) {
return;
}
-
if (Math.abs(constantValue) > 32767) {
return;
}
@@ -23574,40 +19503,31 @@
} else {
return;
}
-
var canceled = false;
-
var mustCancel = function mustCancel(value) {
if (canceled) {
return canceled;
}
-
canceled = value !== undefined && constantValue !== undefined && typeof value !== typeof constantValue && value !== null;
return canceled;
};
-
var trapProp = function trapProp(base, prop, configurable, handler) {
if (!handler.init(base[prop])) {
return false;
}
-
var origDescriptor = Object.getOwnPropertyDescriptor(base, prop);
var prevSetter;
-
if (origDescriptor instanceof Object) {
if (!origDescriptor.configurable) {
- var message = "set-constant: property '".concat(prop, "' is not configurable");
+ var message = "Property '".concat(prop, "' is not configurable");
logMessage(source, message);
return false;
}
-
base[prop] = constantValue;
-
if (origDescriptor.set instanceof Function) {
prevSetter = origDescriptor.set;
}
}
-
Object.defineProperty(base, prop, {
configurable: configurable,
get: function get() {
@@ -23617,18 +19537,16 @@
if (prevSetter !== undefined) {
prevSetter(a);
}
-
handler.set(a);
}
});
return true;
};
-
var setChainPropAccess = function setChainPropAccess(owner, property) {
var chainInfo = getPropertyInChain(owner, property);
var base = chainInfo.base;
var prop = chainInfo.prop,
- chain = chainInfo.chain;
+ chain = chainInfo.chain;
var inChainPropHandler = {
factValue: undefined,
init: function init(a) {
@@ -23642,9 +19560,7 @@
if (this.factValue === a) {
return;
}
-
this.factValue = a;
-
if (a instanceof Object) {
setChainPropAccess(a, chain);
}
@@ -23655,7 +19571,6 @@
if (mustCancel(a)) {
return false;
}
-
return true;
},
get: function get() {
@@ -23665,130 +19580,90 @@
if (!mustCancel(a)) {
return;
}
-
constantValue = a;
}
};
-
if (!chain) {
var isTrapped = trapProp(base, prop, false, endPropHandler);
-
if (isTrapped) {
hit(source);
}
-
return;
}
-
if (base !== undefined && base[prop] === null) {
trapProp(base, prop, true, inChainPropHandler);
return;
}
-
if ((base instanceof Object || typeof base === "object") && isEmptyObject(base)) {
trapProp(base, prop, true, inChainPropHandler);
}
-
var propValue = owner[prop];
-
if (propValue instanceof Object || typeof propValue === "object" && propValue !== null) {
setChainPropAccess(propValue, chain);
}
-
trapProp(base, prop, true, inChainPropHandler);
};
-
setChainPropAccess(window, property);
}
-
- function hit(source, message) {
+ function hit(source) {
if (source.verbose !== true) {
return;
}
-
try {
var log = console.log.bind(console);
var trace = console.trace.bind(console);
var prefix = source.ruleText || "";
-
if (source.domainName) {
var AG_SCRIPTLET_MARKER = "#%#//";
var UBO_SCRIPTLET_MARKER = "##+js";
var ruleStartIndex;
-
if (source.ruleText.indexOf(AG_SCRIPTLET_MARKER) > -1) {
ruleStartIndex = source.ruleText.indexOf(AG_SCRIPTLET_MARKER);
} else if (source.ruleText.indexOf(UBO_SCRIPTLET_MARKER) > -1) {
ruleStartIndex = source.ruleText.indexOf(UBO_SCRIPTLET_MARKER);
}
-
var rulePart = source.ruleText.slice(ruleStartIndex);
prefix = "".concat(source.domainName).concat(rulePart);
}
-
- var LOG_MARKER = "log: ";
-
- if (message) {
- if (message.indexOf(LOG_MARKER) === -1) {
- log("".concat(prefix, " message:\n").concat(message));
- } else {
- log(message.slice(LOG_MARKER.length));
- }
- }
-
log("".concat(prefix, " trace start"));
-
if (trace) {
trace();
}
-
log("".concat(prefix, " trace end"));
} catch (e) {}
-
if (typeof window.__debug === "function") {
window.__debug(source);
}
}
-
function logMessage(source, message) {
var forced = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;
-
if (forced || source.verbose) {
console.log("".concat(source.name, ": ").concat(message));
}
}
-
function noopArray() {
return [];
}
-
function noopObject() {
return {};
}
-
function noopFunc() {}
-
function trueFunc() {
return true;
}
-
function falseFunc() {
return false;
}
-
function noopPromiseReject() {
return Promise.reject();
}
-
function noopPromiseResolve() {
var responseBody = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : "{}";
var responseUrl = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : "";
var responseType = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : "default";
-
if (typeof Response === "undefined") {
return;
}
-
var response = new Response(responseBody, {
status: 200,
statusText: "OK"
@@ -23803,19 +19678,15 @@
});
return Promise.resolve(response);
}
-
function getPropertyInChain(base, chain) {
var pos = chain.indexOf(".");
-
if (pos === -1) {
return {
base: base,
prop: chain
};
}
-
var prop = chain.slice(0, pos);
-
if (base === null) {
return {
base: base,
@@ -23823,10 +19694,8 @@
chain: chain
};
}
-
var nextBase = base[prop];
chain = chain.slice(pos + 1);
-
if ((base instanceof Object || typeof base === "object") && isEmptyObject(base)) {
return {
base: base,
@@ -23834,7 +19703,6 @@
chain: chain
};
}
-
if (nextBase === null) {
return {
base: base,
@@ -23842,11 +19710,9 @@
chain: chain
};
}
-
if (nextBase !== undefined) {
return getPropertyInChain(nextBase, chain);
}
-
Object.defineProperty(base, prop, {
configurable: true
});
@@ -23856,149 +19722,169 @@
chain: chain
};
}
-
function toRegExp() {
var input = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : "";
var DEFAULT_VALUE = ".?";
var FORWARD_SLASH = "/";
-
if (input === "") {
return new RegExp(DEFAULT_VALUE);
}
-
if (input[0] === FORWARD_SLASH && input[input.length - 1] === FORWARD_SLASH) {
return new RegExp(input.slice(1, -1));
}
-
var escaped = input.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
return new RegExp(escaped);
}
-
function matchStackTrace(stackMatch, stackTrace) {
if (!stackMatch || stackMatch === "") {
return true;
}
-
if (shouldAbortInlineOrInjectedScript(stackMatch, stackTrace)) {
return true;
}
-
var stackRegexp = toRegExp(stackMatch);
var refinedStackTrace = stackTrace.split("\n").slice(2).map(function (line) {
return line.trim();
}).join("\n");
return getNativeRegexpTest().call(stackRegexp, refinedStackTrace);
}
-
function nativeIsNaN(num) {
var native = Number.isNaN || window.isNaN;
return native(num);
}
-
function isEmptyObject(obj) {
- return Object.keys(obj).length === 0;
+ return Object.keys(obj).length === 0 && !obj.prototype;
}
-
function getNativeRegexpTest() {
return Object.getOwnPropertyDescriptor(RegExp.prototype, "test").value;
}
-
+ function shouldAbortInlineOrInjectedScript(stackMatch, stackTrace) {
+ var INLINE_SCRIPT_STRING = "inlineScript";
+ var INJECTED_SCRIPT_STRING = "injectedScript";
+ var INJECTED_SCRIPT_MARKER = "";
+ var isInlineScript = function isInlineScript(stackMatch) {
+ return stackMatch.indexOf(INLINE_SCRIPT_STRING) > -1;
+ };
+ var isInjectedScript = function isInjectedScript(stackMatch) {
+ return stackMatch.indexOf(INJECTED_SCRIPT_STRING) > -1;
+ };
+ if (!(isInlineScript(stackMatch) || isInjectedScript(stackMatch))) {
+ return false;
+ }
+ var documentURL = window.location.href;
+ var pos = documentURL.indexOf("#");
+ if (pos !== -1) {
+ documentURL = documentURL.slice(0, pos);
+ }
+ var stackSteps = stackTrace.split("\n").slice(2).map(function (line) {
+ return line.trim();
+ });
+ var stackLines = stackSteps.map(function (line) {
+ var stack;
+ var getStackTraceURL = /(.*?@)?(\S+)(:\d+):\d+\)?$/.exec(line);
+ if (getStackTraceURL) {
+ var stackURL = getStackTraceURL[2];
+ if (startsWith(stackURL, "(")) {
+ stackURL = stackURL.slice(1);
+ }
+ if (startsWith(stackURL, INJECTED_SCRIPT_MARKER)) {
+ stackURL = INJECTED_SCRIPT_STRING;
+ var stackFunction = getStackTraceURL[1] !== undefined ? getStackTraceURL[1].slice(0, -1) : line.slice(0, getStackTraceURL.index).trim();
+ if (startsWith(stackFunction, "at")) {
+ stackFunction = stackFunction.slice(2).trim();
+ }
+ stack = "".concat(stackFunction, " ").concat(stackURL).trim();
+ } else {
+ stack = stackURL;
+ }
+ } else {
+ stack = line;
+ }
+ return stack;
+ });
+ if (stackLines) {
+ for (var index = 0; index < stackLines.length; index += 1) {
+ if (isInlineScript(stackMatch) && documentURL === stackLines[index]) {
+ return true;
+ }
+ if (isInjectedScript(stackMatch) && startsWith(stackLines[index], INJECTED_SCRIPT_STRING)) {
+ return true;
+ }
+ }
+ }
+ return false;
+ }
var updatedArgs = args ? [].concat(source).concat(args) : [source];
-
try {
setConstant.apply(this, updatedArgs);
} catch (e) {
console.log(e);
}
}
-
function setCookie(source, args) {
function setCookie(source, name, value) {
var path = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : "/";
- var validValue = getLimitedCookieValue(source, value);
-
+ var validValue = getLimitedCookieValue(value);
if (validValue === null) {
logMessage(source, "Invalid cookie value: '".concat(validValue, "'"));
return;
}
-
- var cookieData = concatCookieNameValuePath(source, name, validValue, path);
-
- if (cookieData) {
- hit(source);
- document.cookie = cookieData;
+ if (!isValidCookiePath(path)) {
+ logMessage(source, "Invalid cookie path: '".concat(path, "'"));
+ return;
+ }
+ var cookieToSet = concatCookieNameValuePath(name, validValue, path);
+ if (!cookieToSet) {
+ return;
}
+ hit(source);
+ document.cookie = cookieToSet;
}
-
- function hit(source, message) {
+ function hit(source) {
if (source.verbose !== true) {
return;
}
-
try {
var log = console.log.bind(console);
var trace = console.trace.bind(console);
var prefix = source.ruleText || "";
-
if (source.domainName) {
var AG_SCRIPTLET_MARKER = "#%#//";
var UBO_SCRIPTLET_MARKER = "##+js";
var ruleStartIndex;
-
if (source.ruleText.indexOf(AG_SCRIPTLET_MARKER) > -1) {
ruleStartIndex = source.ruleText.indexOf(AG_SCRIPTLET_MARKER);
} else if (source.ruleText.indexOf(UBO_SCRIPTLET_MARKER) > -1) {
ruleStartIndex = source.ruleText.indexOf(UBO_SCRIPTLET_MARKER);
}
-
var rulePart = source.ruleText.slice(ruleStartIndex);
prefix = "".concat(source.domainName).concat(rulePart);
}
-
- var LOG_MARKER = "log: ";
-
- if (message) {
- if (message.indexOf(LOG_MARKER) === -1) {
- log("".concat(prefix, " message:\n").concat(message));
- } else {
- log(message.slice(LOG_MARKER.length));
- }
- }
-
log("".concat(prefix, " trace start"));
-
if (trace) {
trace();
}
-
log("".concat(prefix, " trace end"));
} catch (e) {}
-
if (typeof window.__debug === "function") {
window.__debug(source);
}
}
-
function logMessage(source, message) {
var forced = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;
-
if (forced || source.verbose) {
console.log("".concat(source.name, ": ").concat(message));
}
}
-
function nativeIsNaN(num) {
var native = Number.isNaN || window.isNaN;
return native(num);
}
-
- function getLimitedCookieValue(source, value) {
+ function getLimitedCookieValue(value) {
if (!value) {
return null;
}
-
var validValue;
-
if (value === "true") {
validValue = "true";
} else if (value === "True") {
@@ -24021,163 +19907,117 @@
validValue = "OK";
} else if (/^\d+$/.test(value)) {
validValue = parseFloat(value);
-
if (nativeIsNaN(validValue)) {
- logMessage(source, "Invalid cookie value: '".concat(value, "'"));
return null;
}
-
if (Math.abs(validValue) < 0 || Math.abs(validValue) > 15) {
- logMessage(source, "Invalid cookie value: '".concat(value, "'"));
return null;
}
} else {
return null;
}
-
return validValue;
}
-
- function concatCookieNameValuePath(source, rawName, rawValue, rawPath) {
- if (!isValidCookieRawPath(rawPath)) {
- logMessage(source, "Invalid cookie path: '".concat(rawPath, "'"));
- return null;
- }
-
- return "".concat(encodeURIComponent(rawName), "=").concat(encodeURIComponent(rawValue), "; ").concat(getCookiePath(rawPath));
+ function concatCookieNameValuePath(rawName, rawValue, rawPath) {
+ return "".concat(encodeURIComponent(rawName), "=").concat(encodeURIComponent(rawValue), "; ").concat(getCookiePath(rawPath), ";");
}
-
- function isValidCookieRawPath(rawPath) {
+ function isValidCookiePath(rawPath) {
return rawPath === "/" || rawPath === "none";
}
-
function getCookiePath(rawPath) {
if (rawPath === "/") {
return "path=/";
}
-
return "";
}
-
var updatedArgs = args ? [].concat(source).concat(args) : [source];
-
try {
setCookie.apply(this, updatedArgs);
} catch (e) {
console.log(e);
}
}
-
function setCookieReload(source, args) {
function setCookieReload(source, name, value) {
var path = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : "/";
-
- if (isCookieSetWithValue(name, value)) {
+ if (isCookieSetWithValue(document.cookie, name, value)) {
return;
}
-
- var validValue = getLimitedCookieValue(source, value);
-
+ var validValue = getLimitedCookieValue(value);
if (validValue === null) {
- logMessage(source, "Invalid cookie value: '".concat(validValue, "'"));
+ logMessage(source, "Invalid cookie value: '".concat(value, "'"));
return;
}
-
- var cookieData = concatCookieNameValuePath(source, name, validValue, path);
-
- if (cookieData) {
- document.cookie = cookieData;
- hit(source);
-
- if (isCookieSetWithValue(document.cookie, name, value)) {
- window.location.reload();
- }
+ if (!isValidCookiePath(path)) {
+ logMessage(source, "Invalid cookie path: '".concat(path, "'"));
+ return;
+ }
+ var cookieToSet = concatCookieNameValuePath(name, validValue, path);
+ if (!cookieToSet) {
+ return;
+ }
+ document.cookie = cookieToSet;
+ hit(source);
+ if (isCookieSetWithValue(document.cookie, name, value)) {
+ window.location.reload();
}
}
-
- function hit(source, message) {
+ function hit(source) {
if (source.verbose !== true) {
return;
}
-
try {
var log = console.log.bind(console);
var trace = console.trace.bind(console);
var prefix = source.ruleText || "";
-
if (source.domainName) {
var AG_SCRIPTLET_MARKER = "#%#//";
var UBO_SCRIPTLET_MARKER = "##+js";
var ruleStartIndex;
-
if (source.ruleText.indexOf(AG_SCRIPTLET_MARKER) > -1) {
ruleStartIndex = source.ruleText.indexOf(AG_SCRIPTLET_MARKER);
} else if (source.ruleText.indexOf(UBO_SCRIPTLET_MARKER) > -1) {
ruleStartIndex = source.ruleText.indexOf(UBO_SCRIPTLET_MARKER);
}
-
var rulePart = source.ruleText.slice(ruleStartIndex);
prefix = "".concat(source.domainName).concat(rulePart);
}
-
- var LOG_MARKER = "log: ";
-
- if (message) {
- if (message.indexOf(LOG_MARKER) === -1) {
- log("".concat(prefix, " message:\n").concat(message));
- } else {
- log(message.slice(LOG_MARKER.length));
- }
- }
-
log("".concat(prefix, " trace start"));
-
if (trace) {
trace();
}
-
log("".concat(prefix, " trace end"));
} catch (e) {}
-
if (typeof window.__debug === "function") {
window.__debug(source);
}
}
-
function logMessage(source, message) {
var forced = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;
-
if (forced || source.verbose) {
console.log("".concat(source.name, ": ").concat(message));
}
}
-
function nativeIsNaN(num) {
var native = Number.isNaN || window.isNaN;
return native(num);
}
-
function isCookieSetWithValue(cookieString, name, value) {
return cookieString.split(";").some(function (cookieStr) {
var pos = cookieStr.indexOf("=");
-
if (pos === -1) {
return false;
}
-
var cookieName = cookieStr.slice(0, pos).trim();
var cookieValue = cookieStr.slice(pos + 1).trim();
return name === cookieName && value === cookieValue;
});
}
-
- function getLimitedCookieValue(source, value) {
+ function getLimitedCookieValue(value) {
if (!value) {
return null;
}
-
var validValue;
-
if (value === "true") {
validValue = "true";
} else if (value === "True") {
@@ -24200,135 +20040,94 @@
validValue = "OK";
} else if (/^\d+$/.test(value)) {
validValue = parseFloat(value);
-
if (nativeIsNaN(validValue)) {
- logMessage(source, "Invalid cookie value: '".concat(value, "'"));
return null;
}
-
if (Math.abs(validValue) < 0 || Math.abs(validValue) > 15) {
- logMessage(source, "Invalid cookie value: '".concat(value, "'"));
return null;
}
} else {
return null;
}
-
return validValue;
}
-
- function concatCookieNameValuePath(source, rawName, rawValue, rawPath) {
- if (!isValidCookieRawPath(rawPath)) {
- logMessage(source, "Invalid cookie path: '".concat(rawPath, "'"));
- return null;
- }
-
- return "".concat(encodeURIComponent(rawName), "=").concat(encodeURIComponent(rawValue), "; ").concat(getCookiePath(rawPath));
+ function concatCookieNameValuePath(rawName, rawValue, rawPath) {
+ return "".concat(encodeURIComponent(rawName), "=").concat(encodeURIComponent(rawValue), "; ").concat(getCookiePath(rawPath), ";");
}
-
- function isValidCookieRawPath(rawPath) {
+ function isValidCookiePath(rawPath) {
return rawPath === "/" || rawPath === "none";
}
-
function getCookiePath(rawPath) {
if (rawPath === "/") {
return "path=/";
}
-
return "";
}
-
var updatedArgs = args ? [].concat(source).concat(args) : [source];
-
try {
setCookieReload.apply(this, updatedArgs);
} catch (e) {
console.log(e);
}
}
-
function setLocalStorageItem(source, args) {
function setLocalStorageItem(source, key, value) {
if (typeof key === "undefined") {
logMessage(source, "Item key should be specified.");
return;
}
-
- var validValue = getLimitedStorageItemValue(source, value);
-
- if (validValue === null) {
- logMessage(source, "Invalid cookie value: '".concat(validValue, "'"));
+ var validValue;
+ try {
+ validValue = getLimitedStorageItemValue(value);
+ } catch (_unused) {
+ logMessage(source, "Invalid storage item value: '".concat(value, "'"));
return;
}
-
var _window = window,
- localStorage = _window.localStorage;
+ localStorage = _window.localStorage;
setStorageItem(source, localStorage, key, validValue);
hit(source);
}
-
- function hit(source, message) {
+ function hit(source) {
if (source.verbose !== true) {
return;
}
-
try {
var log = console.log.bind(console);
var trace = console.trace.bind(console);
var prefix = source.ruleText || "";
-
if (source.domainName) {
var AG_SCRIPTLET_MARKER = "#%#//";
var UBO_SCRIPTLET_MARKER = "##+js";
var ruleStartIndex;
-
if (source.ruleText.indexOf(AG_SCRIPTLET_MARKER) > -1) {
ruleStartIndex = source.ruleText.indexOf(AG_SCRIPTLET_MARKER);
} else if (source.ruleText.indexOf(UBO_SCRIPTLET_MARKER) > -1) {
ruleStartIndex = source.ruleText.indexOf(UBO_SCRIPTLET_MARKER);
}
-
var rulePart = source.ruleText.slice(ruleStartIndex);
prefix = "".concat(source.domainName).concat(rulePart);
}
-
- var LOG_MARKER = "log: ";
-
- if (message) {
- if (message.indexOf(LOG_MARKER) === -1) {
- log("".concat(prefix, " message:\n").concat(message));
- } else {
- log(message.slice(LOG_MARKER.length));
- }
- }
-
log("".concat(prefix, " trace start"));
-
if (trace) {
trace();
}
-
log("".concat(prefix, " trace end"));
} catch (e) {}
-
if (typeof window.__debug === "function") {
window.__debug(source);
}
}
-
function logMessage(source, message) {
var forced = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;
-
if (forced || source.verbose) {
console.log("".concat(source.name, ": ").concat(message));
}
}
-
function nativeIsNaN(num) {
var native = Number.isNaN || window.isNaN;
return native(num);
}
-
function setStorageItem(source, storage, key, value) {
try {
storage.setItem(key, value);
@@ -24337,14 +20136,11 @@
logMessage(source, message);
}
}
-
- function getLimitedStorageItemValue(source, value) {
- if (!value) {
- return null;
+ function getLimitedStorageItemValue(value) {
+ if (typeof value !== "string") {
+ throw new Error("Invalid value");
}
-
var validValue;
-
if (value === "undefined") {
validValue = undefined;
} else if (value === "false") {
@@ -24361,36 +20157,28 @@
validValue = "";
} else if (/^\d+$/.test(value)) {
validValue = parseFloat(value);
-
if (nativeIsNaN(validValue)) {
- logMessage(source, "Invalid storage item value: '".concat(value, "'"));
- return null;
+ throw new Error("Invalid value");
}
-
if (Math.abs(validValue) > 32767) {
- logMessage(source, "Invalid storage item value: '".concat(value, "'"));
- return null;
+ throw new Error("Invalid value");
}
} else if (value === "yes") {
validValue = "yes";
} else if (value === "no") {
validValue = "no";
} else {
- return null;
+ throw new Error("Invalid value");
}
-
return validValue;
}
-
var updatedArgs = args ? [].concat(source).concat(args) : [source];
-
try {
setLocalStorageItem.apply(this, updatedArgs);
} catch (e) {
console.log(e);
}
}
-
function setPopadsDummy(source, args) {
function setPopadsDummy(source) {
delete window.PopAds;
@@ -24410,97 +20198,101 @@
}
});
}
-
- function hit(source, message) {
+ function hit(source) {
if (source.verbose !== true) {
return;
}
-
try {
var log = console.log.bind(console);
var trace = console.trace.bind(console);
var prefix = source.ruleText || "";
-
if (source.domainName) {
var AG_SCRIPTLET_MARKER = "#%#//";
var UBO_SCRIPTLET_MARKER = "##+js";
var ruleStartIndex;
-
if (source.ruleText.indexOf(AG_SCRIPTLET_MARKER) > -1) {
ruleStartIndex = source.ruleText.indexOf(AG_SCRIPTLET_MARKER);
} else if (source.ruleText.indexOf(UBO_SCRIPTLET_MARKER) > -1) {
ruleStartIndex = source.ruleText.indexOf(UBO_SCRIPTLET_MARKER);
}
-
var rulePart = source.ruleText.slice(ruleStartIndex);
prefix = "".concat(source.domainName).concat(rulePart);
}
-
- var LOG_MARKER = "log: ";
-
- if (message) {
- if (message.indexOf(LOG_MARKER) === -1) {
- log("".concat(prefix, " message:\n").concat(message));
- } else {
- log(message.slice(LOG_MARKER.length));
- }
- }
-
log("".concat(prefix, " trace start"));
-
if (trace) {
trace();
}
-
log("".concat(prefix, " trace end"));
} catch (e) {}
-
if (typeof window.__debug === "function") {
window.__debug(source);
}
}
-
var updatedArgs = args ? [].concat(source).concat(args) : [source];
-
try {
setPopadsDummy.apply(this, updatedArgs);
} catch (e) {
console.log(e);
}
}
-
function setSessionStorageItem(source, args) {
function setSessionStorageItem(source, key, value) {
if (typeof key === "undefined") {
logMessage(source, "Item key should be specified.");
return;
}
-
- var validValue = getLimitedStorageItemValue(source, value);
-
- if (validValue === null) {
- logMessage(source, "Invalid cookie value: '".concat(validValue, "'"));
+ var validValue;
+ try {
+ validValue = getLimitedStorageItemValue(value);
+ } catch (_unused) {
+ logMessage(source, "Invalid storage item value: '".concat(value, "'"));
+ return;
+ }
+ var _window = window,
+ sessionStorage = _window.sessionStorage;
+ setStorageItem(source, sessionStorage, key, validValue);
+ hit(source);
+ }
+ function hit(source) {
+ if (source.verbose !== true) {
return;
}
-
- var _window = window,
- sessionStorage = _window.sessionStorage;
- setStorageItem(source, sessionStorage, key, validValue);
+ try {
+ var log = console.log.bind(console);
+ var trace = console.trace.bind(console);
+ var prefix = source.ruleText || "";
+ if (source.domainName) {
+ var AG_SCRIPTLET_MARKER = "#%#//";
+ var UBO_SCRIPTLET_MARKER = "##+js";
+ var ruleStartIndex;
+ if (source.ruleText.indexOf(AG_SCRIPTLET_MARKER) > -1) {
+ ruleStartIndex = source.ruleText.indexOf(AG_SCRIPTLET_MARKER);
+ } else if (source.ruleText.indexOf(UBO_SCRIPTLET_MARKER) > -1) {
+ ruleStartIndex = source.ruleText.indexOf(UBO_SCRIPTLET_MARKER);
+ }
+ var rulePart = source.ruleText.slice(ruleStartIndex);
+ prefix = "".concat(source.domainName).concat(rulePart);
+ }
+ log("".concat(prefix, " trace start"));
+ if (trace) {
+ trace();
+ }
+ log("".concat(prefix, " trace end"));
+ } catch (e) {}
+ if (typeof window.__debug === "function") {
+ window.__debug(source);
+ }
}
-
function logMessage(source, message) {
var forced = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;
-
if (forced || source.verbose) {
console.log("".concat(source.name, ": ").concat(message));
}
}
-
function nativeIsNaN(num) {
var native = Number.isNaN || window.isNaN;
return native(num);
}
-
function setStorageItem(source, storage, key, value) {
try {
storage.setItem(key, value);
@@ -24509,14 +20301,11 @@
logMessage(source, message);
}
}
-
- function getLimitedStorageItemValue(source, value) {
- if (!value) {
- return null;
+ function getLimitedStorageItemValue(value) {
+ if (typeof value !== "string") {
+ throw new Error("Invalid value");
}
-
var validValue;
-
if (value === "undefined") {
validValue = undefined;
} else if (value === "false") {
@@ -24533,45 +20322,35 @@
validValue = "";
} else if (/^\d+$/.test(value)) {
validValue = parseFloat(value);
-
if (nativeIsNaN(validValue)) {
- logMessage(source, "Invalid storage item value: '".concat(value, "'"));
- return null;
+ throw new Error("Invalid value");
}
-
if (Math.abs(validValue) > 32767) {
- logMessage(source, "Invalid storage item value: '".concat(value, "'"));
- return null;
+ throw new Error("Invalid value");
}
} else if (value === "yes") {
validValue = "yes";
} else if (value === "no") {
validValue = "no";
} else {
- return null;
+ throw new Error("Invalid value");
}
-
return validValue;
}
-
var updatedArgs = args ? [].concat(source).concat(args) : [source];
-
try {
setSessionStorageItem.apply(this, updatedArgs);
} catch (e) {
console.log(e);
}
}
-
function trustedClickElement(source, args) {
function trustedClickElement(source, selectors) {
var extraMatch = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : "";
var delay = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : NaN;
-
if (!selectors) {
return;
}
-
var OBSERVER_TIMEOUT_MS = 1e4;
var THROTTLE_DELAY_MS = 20;
var COOKIE_MATCH_MARKER = "cookie:";
@@ -24580,22 +20359,18 @@
var COOKIE_STRING_DELIMITER = ";";
var EXTRA_MATCH_DELIMITER = /(,\s*){1}(?=cookie:|localStorage:)/;
var parsedDelay;
-
if (delay) {
parsedDelay = parseInt(delay, 10);
var isValidDelay = !Number.isNaN(parsedDelay) || parsedDelay < OBSERVER_TIMEOUT_MS;
-
if (!isValidDelay) {
var message = "Passed delay '".concat(delay, "' is invalid or bigger than ").concat(OBSERVER_TIMEOUT_MS, " ms");
logMessage(source, message);
return;
}
}
-
var canClick = !parsedDelay;
var cookieMatches = [];
var localStorageMatches = [];
-
if (extraMatch) {
var parsedExtraMatch = extraMatch.split(EXTRA_MATCH_DELIMITER).map(function (matchStr) {
return matchStr.trim();
@@ -24605,115 +20380,91 @@
var cookieMatch = matchStr.replace(COOKIE_MATCH_MARKER, "");
cookieMatches.push(cookieMatch);
}
-
if (matchStr.indexOf(LOCAL_STORAGE_MATCH_MARKER) > -1) {
var localStorageMatch = matchStr.replace(LOCAL_STORAGE_MATCH_MARKER, "");
localStorageMatches.push(localStorageMatch);
}
});
}
-
if (cookieMatches.length > 0) {
var parsedCookieMatches = parseCookieString(cookieMatches.join(COOKIE_STRING_DELIMITER));
var parsedCookies = parseCookieString(document.cookie);
var cookieKeys = Object.keys(parsedCookies);
-
if (cookieKeys.length === 0) {
return;
}
-
var cookiesMatched = Object.keys(parsedCookieMatches).every(function (key) {
var valueMatch = parsedCookieMatches[key] ? toRegExp(parsedCookieMatches[key]) : null;
var keyMatch = toRegExp(key);
return cookieKeys.some(function (key) {
var keysMatched = keyMatch.test(key);
-
if (!keysMatched) {
return false;
}
-
if (!valueMatch) {
return true;
}
-
return valueMatch.test(parsedCookies[key]);
});
});
-
if (!cookiesMatched) {
return;
}
}
-
if (localStorageMatches.length > 0) {
var localStorageMatched = localStorageMatches.every(function (str) {
var itemValue = window.localStorage.getItem(str);
return itemValue || itemValue === "";
});
-
if (!localStorageMatched) {
return;
}
}
-
var selectorsSequence = selectors.split(SELECTORS_DELIMITER).map(function (selector) {
return selector.trim();
});
-
var createElementObj = function createElementObj(element) {
return {
element: element || null,
clicked: false
};
};
-
var elementsSequence = Array(selectorsSequence.length).fill(createElementObj());
-
var clickElementsBySequence = function clickElementsBySequence() {
for (var i = 0; i < elementsSequence.length; i += 1) {
var elementObj = elementsSequence[i];
-
if (!elementObj.element) {
break;
}
-
if (!elementObj.clicked) {
elementObj.element.click();
elementObj.clicked = true;
}
}
-
var allElementsClicked = elementsSequence.every(function (elementObj) {
return elementObj.clicked === true;
});
-
if (allElementsClicked) {
hit(source);
}
};
-
var handleElement = function handleElement(element, i) {
var elementObj = createElementObj(element);
elementsSequence[i] = elementObj;
-
if (canClick) {
clickElementsBySequence();
}
};
-
var findElements = function findElements(mutations, observer) {
var fulfilledSelectors = [];
selectorsSequence.forEach(function (selector, i) {
if (!selector) {
return;
}
-
var element = document.querySelector(selector);
-
if (!element) {
return;
}
-
handleElement(element, i);
fulfilledSelectors.push(selector);
});
@@ -24723,97 +20474,69 @@
var allSelectorsFulfilled = selectorsSequence.every(function (selector) {
return selector === null;
});
-
if (allSelectorsFulfilled) {
observer.disconnect();
}
};
-
var observer = new MutationObserver(throttle(findElements, THROTTLE_DELAY_MS));
observer.observe(document.documentElement, {
attributes: true,
childList: true,
subtree: true
});
-
if (parsedDelay) {
setTimeout(function () {
clickElementsBySequence();
canClick = true;
}, parsedDelay);
}
-
setTimeout(function () {
return observer.disconnect();
}, OBSERVER_TIMEOUT_MS);
}
-
- function hit(source, message) {
+ function hit(source) {
if (source.verbose !== true) {
return;
}
-
try {
var log = console.log.bind(console);
var trace = console.trace.bind(console);
var prefix = source.ruleText || "";
-
if (source.domainName) {
var AG_SCRIPTLET_MARKER = "#%#//";
var UBO_SCRIPTLET_MARKER = "##+js";
var ruleStartIndex;
-
if (source.ruleText.indexOf(AG_SCRIPTLET_MARKER) > -1) {
ruleStartIndex = source.ruleText.indexOf(AG_SCRIPTLET_MARKER);
} else if (source.ruleText.indexOf(UBO_SCRIPTLET_MARKER) > -1) {
ruleStartIndex = source.ruleText.indexOf(UBO_SCRIPTLET_MARKER);
}
-
var rulePart = source.ruleText.slice(ruleStartIndex);
prefix = "".concat(source.domainName).concat(rulePart);
}
-
- var LOG_MARKER = "log: ";
-
- if (message) {
- if (message.indexOf(LOG_MARKER) === -1) {
- log("".concat(prefix, " message:\n").concat(message));
- } else {
- log(message.slice(LOG_MARKER.length));
- }
- }
-
log("".concat(prefix, " trace start"));
-
if (trace) {
trace();
}
-
log("".concat(prefix, " trace end"));
} catch (e) {}
-
if (typeof window.__debug === "function") {
window.__debug(source);
}
}
-
function toRegExp() {
var input = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : "";
var DEFAULT_VALUE = ".?";
var FORWARD_SLASH = "/";
-
if (input === "") {
return new RegExp(DEFAULT_VALUE);
}
-
if (input[0] === FORWARD_SLASH && input[input.length - 1] === FORWARD_SLASH) {
return new RegExp(input.slice(1, -1));
}
-
var escaped = input.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
return new RegExp(escaped);
}
-
function parseCookieString(cookieString) {
var COOKIE_DELIMITER = "=";
var COOKIE_PAIRS_DELIMITER = ";";
@@ -24823,246 +20546,174 @@
var cookieKey;
var cookieValue;
var delimiterIndex = singleCookie.indexOf(COOKIE_DELIMITER);
-
if (delimiterIndex === -1) {
cookieKey = singleCookie.trim();
} else {
cookieKey = singleCookie.slice(0, delimiterIndex).trim();
cookieValue = singleCookie.slice(delimiterIndex + 1);
}
-
cookieData[cookieKey] = cookieValue || null;
});
return cookieData;
}
-
function throttle(cb, delay) {
var wait = false;
var savedArgs;
-
var wrapper = function wrapper() {
for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
args[_key] = arguments[_key];
}
-
if (wait) {
savedArgs = args;
return;
}
-
cb.apply(void 0, args);
wait = true;
setTimeout(function () {
wait = false;
-
if (savedArgs) {
wrapper(savedArgs);
savedArgs = null;
}
}, delay);
};
-
return wrapper;
}
-
function logMessage(source, message) {
var forced = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;
-
if (forced || source.verbose) {
console.log("".concat(source.name, ": ").concat(message));
}
}
-
var updatedArgs = args ? [].concat(source).concat(args) : [source];
-
try {
trustedClickElement.apply(this, updatedArgs);
} catch (e) {
console.log(e);
}
}
-
function trustedReplaceFetchResponse(source, args) {
function trustedReplaceFetchResponse(source) {
var pattern = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : "";
var replacement = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : "";
var propsToMatch = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : "";
-
if (typeof fetch === "undefined" || typeof Proxy === "undefined" || typeof Response === "undefined") {
return;
}
-
if (pattern === "" && replacement !== "") {
logMessage(source, "Pattern argument should not be empty string.");
return;
}
-
var shouldLog = pattern === "" && replacement === "";
var nativeFetch = fetch;
var shouldReplace = false;
var fetchData;
-
- var handlerWrapper = function () {
- var _ref = asyncToGenerator(regenerator.mark(function _callee(target, thisArg, args) {
- var forgeResponse;
- return regenerator.wrap(function _callee$(_context) {
- while (1) {
- switch (_context.prev = _context.next) {
- case 0:
- fetchData = getFetchData(args);
-
- if (!shouldLog) {
- _context.next = 5;
- break;
- }
-
- logMessage(source, "fetch( ".concat(objectToString(fetchData), " )"), true);
- hit(source);
- return _context.abrupt("return", Reflect.apply(target, thisArg, args));
-
- case 5:
- shouldReplace = matchRequestProps(source, propsToMatch, fetchData);
-
- if (shouldReplace) {
- _context.next = 8;
- break;
- }
-
- return _context.abrupt("return", Reflect.apply(target, thisArg, args));
-
- case 8:
- forgeResponse = function forgeResponse(response, textContent) {
- var bodyUsed = response.bodyUsed,
- headers = response.headers,
- ok = response.ok,
- redirected = response.redirected,
- status = response.status,
- statusText = response.statusText,
- type = response.type,
- url = response.url;
- var forgedResponse = new Response(textContent, {
- status: status,
- statusText: statusText,
- headers: headers
- });
- Object.defineProperties(forgedResponse, {
- url: {
- value: url
- },
- type: {
- value: type
- },
- ok: {
- value: ok
- },
- bodyUsed: {
- value: bodyUsed
- },
- redirected: {
- value: redirected
- }
- });
- return forgedResponse;
- };
-
- return _context.abrupt("return", nativeFetch.apply(void 0, toConsumableArray(args)).then(function (response) {
- return response.text().then(function (bodyText) {
- var patternRegexp = pattern === "*" ? toRegExp() : toRegExp(pattern);
- var modifiedTextContent = bodyText.replace(patternRegexp, replacement);
- var forgedResponse = forgeResponse(response, modifiedTextContent);
- hit(source);
- return forgedResponse;
- }).catch(function () {
- var fetchDataStr = objectToString(fetchData);
- var message = "Response body can't be converted to text: ".concat(fetchDataStr);
- logMessage(source, message);
- return Reflect.apply(target, thisArg, args);
- });
- }).catch(function () {
- return Reflect.apply(target, thisArg, args);
- }));
-
- case 10:
- case "end":
- return _context.stop();
- }
+ var handlerWrapper = function handlerWrapper(target, thisArg, args) {
+ fetchData = getFetchData(args);
+ if (shouldLog) {
+ logMessage(source, "fetch( ".concat(objectToString(fetchData), " )"), true);
+ hit(source);
+ return Reflect.apply(target, thisArg, args);
+ }
+ shouldReplace = matchRequestProps(source, propsToMatch, fetchData);
+ if (!shouldReplace) {
+ return Reflect.apply(target, thisArg, args);
+ }
+ var forgeResponse = function forgeResponse(response, textContent) {
+ var bodyUsed = response.bodyUsed,
+ headers = response.headers,
+ ok = response.ok,
+ redirected = response.redirected,
+ status = response.status,
+ statusText = response.statusText,
+ type = response.type,
+ url = response.url;
+ var forgedResponse = new Response(textContent, {
+ status: status,
+ statusText: statusText,
+ headers: headers
+ });
+ Object.defineProperties(forgedResponse, {
+ url: {
+ value: url
+ },
+ type: {
+ value: type
+ },
+ ok: {
+ value: ok
+ },
+ bodyUsed: {
+ value: bodyUsed
+ },
+ redirected: {
+ value: redirected
}
- }, _callee);
- }));
-
- return function handlerWrapper(_x, _x2, _x3) {
- return _ref.apply(this, arguments);
+ });
+ return forgedResponse;
};
- }();
-
+ return nativeFetch.apply(null, args).then(function (response) {
+ return response.text().then(function (bodyText) {
+ var patternRegexp = pattern === "*" ? /(\n|.)*/ : toRegExp(pattern);
+ var modifiedTextContent = bodyText.replace(patternRegexp, replacement);
+ var forgedResponse = forgeResponse(response, modifiedTextContent);
+ hit(source);
+ return forgedResponse;
+ }).catch(function () {
+ var fetchDataStr = objectToString(fetchData);
+ var message = "Response body can't be converted to text: ".concat(fetchDataStr);
+ logMessage(source, message);
+ return Reflect.apply(target, thisArg, args);
+ });
+ }).catch(function () {
+ return Reflect.apply(target, thisArg, args);
+ });
+ };
var fetchHandler = {
apply: handlerWrapper
};
fetch = new Proxy(fetch, fetchHandler);
}
-
- function hit(source, message) {
+ function hit(source) {
if (source.verbose !== true) {
return;
}
-
try {
var log = console.log.bind(console);
var trace = console.trace.bind(console);
var prefix = source.ruleText || "";
-
if (source.domainName) {
var AG_SCRIPTLET_MARKER = "#%#//";
var UBO_SCRIPTLET_MARKER = "##+js";
var ruleStartIndex;
-
if (source.ruleText.indexOf(AG_SCRIPTLET_MARKER) > -1) {
ruleStartIndex = source.ruleText.indexOf(AG_SCRIPTLET_MARKER);
} else if (source.ruleText.indexOf(UBO_SCRIPTLET_MARKER) > -1) {
ruleStartIndex = source.ruleText.indexOf(UBO_SCRIPTLET_MARKER);
}
-
var rulePart = source.ruleText.slice(ruleStartIndex);
prefix = "".concat(source.domainName).concat(rulePart);
}
-
- var LOG_MARKER = "log: ";
-
- if (message) {
- if (message.indexOf(LOG_MARKER) === -1) {
- log("".concat(prefix, " message:\n").concat(message));
- } else {
- log(message.slice(LOG_MARKER.length));
- }
- }
-
log("".concat(prefix, " trace start"));
-
if (trace) {
trace();
}
-
log("".concat(prefix, " trace end"));
} catch (e) {}
-
if (typeof window.__debug === "function") {
window.__debug(source);
}
}
-
function logMessage(source, message) {
var forced = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;
-
if (forced || source.verbose) {
console.log("".concat(source.name, ": ").concat(message));
}
}
-
function getFetchData(args) {
var fetchPropsObj = {};
var fetchUrl;
var fetchInit;
-
if (args[0] instanceof Request) {
var requestData = getRequestData(args[0]);
fetchUrl = requestData.url;
@@ -25071,40 +20722,31 @@
fetchUrl = args[0];
fetchInit = args[1];
}
-
fetchPropsObj.url = fetchUrl;
-
if (fetchInit instanceof Object) {
Object.keys(fetchInit).forEach(function (prop) {
fetchPropsObj[prop] = fetchInit[prop];
});
}
-
return fetchPropsObj;
}
-
function objectToString(obj) {
return isEmptyObject(obj) ? "{}" : getObjectEntries(obj).map(function (pair) {
var key = pair[0];
var value = pair[1];
var recordValueStr = value;
-
if (value instanceof Object) {
recordValueStr = "{ ".concat(objectToString(value), " }");
}
-
return "".concat(key, ':"').concat(recordValueStr, '"');
}).join(" ");
}
-
function matchRequestProps(source, propsToMatch, requestData) {
if (propsToMatch === "" || propsToMatch === "*") {
return true;
}
-
var isMatched;
var parsedData = parseMatchProps(propsToMatch);
-
if (!validateParsedData(parsedData)) {
logMessage(source, "Invalid parameter: ".concat(propsToMatch));
isMatched = false;
@@ -25115,55 +20757,42 @@
return Object.prototype.hasOwnProperty.call(requestData, matchKey) && matchValue.test(requestData[matchKey]);
});
}
-
return isMatched;
}
-
function toRegExp() {
var input = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : "";
var DEFAULT_VALUE = ".?";
var FORWARD_SLASH = "/";
-
if (input === "") {
return new RegExp(DEFAULT_VALUE);
}
-
if (input[0] === FORWARD_SLASH && input[input.length - 1] === FORWARD_SLASH) {
return new RegExp(input.slice(1, -1));
}
-
var escaped = input.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
return new RegExp(escaped);
}
-
function isValidStrPattern(input) {
var FORWARD_SLASH = "/";
var str = escapeRegExp(input);
-
if (input[0] === FORWARD_SLASH && input[input.length - 1] === FORWARD_SLASH) {
str = input.slice(1, -1);
}
-
var isValid;
-
try {
isValid = new RegExp(str);
isValid = true;
} catch (e) {
isValid = false;
}
-
return isValid;
}
-
function escapeRegExp(str) {
return str.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
}
-
function isEmptyObject(obj) {
- return Object.keys(obj).length === 0;
+ return Object.keys(obj).length === 0 && !obj.prototype;
}
-
function getRequestData(request) {
var requestInitOptions = getRequestProps();
var entries = requestInitOptions.map(function (key) {
@@ -25172,7 +20801,9 @@
});
return getObjectFromEntries(entries);
}
-
+ function getRequestProps() {
+ return ["url", "method", "headers", "body", "mode", "credentials", "cache", "redirect", "referrer", "referrerPolicy", "integrity", "keepalive", "signal"];
+ }
function getObjectEntries(object) {
var keys = Object.keys(object);
var entries = [];
@@ -25181,7 +20812,6 @@
});
return entries;
}
-
function getObjectFromEntries(entries) {
var output = entries.reduce(function (acc, el) {
var key = el[0];
@@ -25191,7 +20821,6 @@
}, {});
return output;
}
-
function parseMatchProps(propsToMatchStr) {
var PROPS_DIVIDER = " ";
var PAIRS_MARKER = ":";
@@ -25202,7 +20831,6 @@
var dividerInd = prop.indexOf(PAIRS_MARKER);
var key = prop.slice(0, dividerInd);
var hasLegalMatchProp = LEGAL_MATCH_PROPS.indexOf(key) !== -1;
-
if (hasLegalMatchProp) {
var value = prop.slice(dividerInd + 1);
propsObj[key] = value;
@@ -25212,13 +20840,11 @@
});
return propsObj;
}
-
function validateParsedData(data) {
return Object.values(data).every(function (value) {
return isValidStrPattern(value);
});
}
-
function getMatchPropsData(data) {
var matchData = {};
Object.keys(data).forEach(function (key) {
@@ -25226,169 +20852,122 @@
});
return matchData;
}
-
var updatedArgs = args ? [].concat(source).concat(args) : [source];
-
try {
trustedReplaceFetchResponse.apply(this, updatedArgs);
} catch (e) {
console.log(e);
}
}
-
function trustedReplaceXhrResponse(source, args) {
function trustedReplaceXhrResponse(source) {
var pattern = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : "";
var replacement = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : "";
var propsToMatch = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : "";
-
if (typeof Proxy === "undefined") {
return;
}
-
if (pattern === "" && replacement !== "") {
var message = "Pattern argument should not be empty string.";
logMessage(source, message);
return;
}
-
var shouldLog = pattern === "" && replacement === "";
var nativeOpen = window.XMLHttpRequest.prototype.open;
var nativeSend = window.XMLHttpRequest.prototype.send;
var shouldReplace = false;
var xhrData;
var requestHeaders = [];
-
var openWrapper = function openWrapper(target, thisArg, args) {
- xhrData = getXhrData.apply(void 0, toConsumableArray(args));
-
+ xhrData = getXhrData.apply(null, args);
if (shouldLog) {
- var _message = "log: xhr( ".concat(objectToString(xhrData), " )");
-
+ var _message = "xhr( ".concat(objectToString(xhrData), " )");
logMessage(source, _message, true);
hit(source);
return Reflect.apply(target, thisArg, args);
}
-
shouldReplace = matchRequestProps(source, propsToMatch, xhrData);
-
if (shouldReplace) {
var setRequestHeaderWrapper = function setRequestHeaderWrapper(target, thisArg, args) {
requestHeaders.push(args);
return Reflect.apply(target, thisArg, args);
};
-
var setRequestHeaderHandler = {
apply: setRequestHeaderWrapper
};
thisArg.setRequestHeader = new Proxy(thisArg.setRequestHeader, setRequestHeaderHandler);
}
-
return Reflect.apply(target, thisArg, args);
};
-
- var sendWrapper = function () {
- var _ref = asyncToGenerator(regenerator.mark(function _callee(target, thisArg, args) {
- var forgedRequest;
- return regenerator.wrap(function _callee$(_context) {
- while (1) {
- switch (_context.prev = _context.next) {
- case 0:
- if (shouldReplace) {
- _context.next = 2;
- break;
- }
-
- return _context.abrupt("return", Reflect.apply(target, thisArg, args));
-
- case 2:
- forgedRequest = new XMLHttpRequest();
- forgedRequest.addEventListener("readystatechange", function () {
- if (forgedRequest.readyState !== 4) {
- return;
- }
-
- var readyState = forgedRequest.readyState,
- response = forgedRequest.response,
- responseText = forgedRequest.responseText,
- responseURL = forgedRequest.responseURL,
- responseXML = forgedRequest.responseXML,
- status = forgedRequest.status,
- statusText = forgedRequest.statusText;
- var content = responseText || response;
-
- if (typeof content !== "string") {
- return;
- }
-
- var patternRegexp = pattern === "*" ? toRegExp() : toRegExp(pattern);
- var modifiedContent = content.replace(patternRegexp, replacement);
- Object.defineProperties(thisArg, {
- readyState: {
- value: readyState
- },
- response: {
- value: modifiedContent
- },
- responseText: {
- value: modifiedContent
- },
- responseURL: {
- value: responseURL
- },
- responseXML: {
- value: responseXML
- },
- status: {
- value: status
- },
- statusText: {
- value: statusText
- }
- });
- setTimeout(function () {
- var stateEvent = new Event("readystatechange");
- thisArg.dispatchEvent(stateEvent);
- var loadEvent = new Event("load");
- thisArg.dispatchEvent(loadEvent);
- var loadEndEvent = new Event("loadend");
- thisArg.dispatchEvent(loadEndEvent);
- }, 1);
- hit(source);
- });
- nativeOpen.apply(forgedRequest, [xhrData.method, xhrData.url]);
- requestHeaders.forEach(function (header) {
- var name = header[0];
- var value = header[1];
- forgedRequest.setRequestHeader(name, value);
- });
- requestHeaders = [];
- _context.prev = 7;
- nativeSend.call(forgedRequest, args);
- _context.next = 14;
- break;
-
- case 11:
- _context.prev = 11;
- _context.t0 = _context["catch"](7);
- return _context.abrupt("return", Reflect.apply(target, thisArg, args));
-
- case 14:
- return _context.abrupt("return", undefined);
-
- case 15:
- case "end":
- return _context.stop();
- }
+ var sendWrapper = function sendWrapper(target, thisArg, args) {
+ if (!shouldReplace) {
+ return Reflect.apply(target, thisArg, args);
+ }
+ var forgedRequest = new XMLHttpRequest();
+ forgedRequest.addEventListener("readystatechange", function () {
+ if (forgedRequest.readyState !== 4) {
+ return;
+ }
+ var readyState = forgedRequest.readyState,
+ response = forgedRequest.response,
+ responseText = forgedRequest.responseText,
+ responseURL = forgedRequest.responseURL,
+ responseXML = forgedRequest.responseXML,
+ status = forgedRequest.status,
+ statusText = forgedRequest.statusText;
+ var content = responseText || response;
+ if (typeof content !== "string") {
+ return;
+ }
+ var patternRegexp = pattern === "*" ? /(\n|.)*/ : toRegExp(pattern);
+ var modifiedContent = content.replace(patternRegexp, replacement);
+ Object.defineProperties(thisArg, {
+ readyState: {
+ value: readyState
+ },
+ response: {
+ value: modifiedContent
+ },
+ responseText: {
+ value: modifiedContent
+ },
+ responseURL: {
+ value: responseURL
+ },
+ responseXML: {
+ value: responseXML
+ },
+ status: {
+ value: status
+ },
+ statusText: {
+ value: statusText
}
- }, _callee, null, [[7, 11]]);
- }));
-
- return function sendWrapper(_x, _x2, _x3) {
- return _ref.apply(this, arguments);
- };
- }();
-
+ });
+ setTimeout(function () {
+ var stateEvent = new Event("readystatechange");
+ thisArg.dispatchEvent(stateEvent);
+ var loadEvent = new Event("load");
+ thisArg.dispatchEvent(loadEvent);
+ var loadEndEvent = new Event("loadend");
+ thisArg.dispatchEvent(loadEndEvent);
+ }, 1);
+ hit(source);
+ });
+ nativeOpen.apply(forgedRequest, [xhrData.method, xhrData.url]);
+ requestHeaders.forEach(function (header) {
+ var name = header[0];
+ var value = header[1];
+ forgedRequest.setRequestHeader(name, value);
+ });
+ requestHeaders = [];
+ try {
+ nativeSend.call(forgedRequest, args);
+ } catch (_unused) {
+ return Reflect.apply(target, thisArg, args);
+ }
+ return undefined;
+ };
var openHandler = {
apply: openWrapper
};
@@ -25398,103 +20977,72 @@
XMLHttpRequest.prototype.open = new Proxy(XMLHttpRequest.prototype.open, openHandler);
XMLHttpRequest.prototype.send = new Proxy(XMLHttpRequest.prototype.send, sendHandler);
}
-
- function hit(source, message) {
+ function hit(source) {
if (source.verbose !== true) {
return;
}
-
try {
var log = console.log.bind(console);
var trace = console.trace.bind(console);
var prefix = source.ruleText || "";
-
if (source.domainName) {
var AG_SCRIPTLET_MARKER = "#%#//";
var UBO_SCRIPTLET_MARKER = "##+js";
var ruleStartIndex;
-
if (source.ruleText.indexOf(AG_SCRIPTLET_MARKER) > -1) {
ruleStartIndex = source.ruleText.indexOf(AG_SCRIPTLET_MARKER);
} else if (source.ruleText.indexOf(UBO_SCRIPTLET_MARKER) > -1) {
ruleStartIndex = source.ruleText.indexOf(UBO_SCRIPTLET_MARKER);
}
-
var rulePart = source.ruleText.slice(ruleStartIndex);
prefix = "".concat(source.domainName).concat(rulePart);
}
-
- var LOG_MARKER = "log: ";
-
- if (message) {
- if (message.indexOf(LOG_MARKER) === -1) {
- log("".concat(prefix, " message:\n").concat(message));
- } else {
- log(message.slice(LOG_MARKER.length));
- }
- }
-
log("".concat(prefix, " trace start"));
-
if (trace) {
trace();
}
-
log("".concat(prefix, " trace end"));
} catch (e) {}
-
if (typeof window.__debug === "function") {
window.__debug(source);
}
}
-
function logMessage(source, message) {
var forced = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;
-
if (forced || source.verbose) {
console.log("".concat(source.name, ": ").concat(message));
}
}
-
function toRegExp() {
var input = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : "";
var DEFAULT_VALUE = ".?";
var FORWARD_SLASH = "/";
-
if (input === "") {
return new RegExp(DEFAULT_VALUE);
}
-
if (input[0] === FORWARD_SLASH && input[input.length - 1] === FORWARD_SLASH) {
return new RegExp(input.slice(1, -1));
}
-
var escaped = input.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
return new RegExp(escaped);
}
-
function objectToString(obj) {
return isEmptyObject(obj) ? "{}" : getObjectEntries(obj).map(function (pair) {
var key = pair[0];
var value = pair[1];
var recordValueStr = value;
-
if (value instanceof Object) {
recordValueStr = "{ ".concat(objectToString(value), " }");
}
-
return "".concat(key, ':"').concat(recordValueStr, '"');
}).join(" ");
}
-
function matchRequestProps(source, propsToMatch, requestData) {
if (propsToMatch === "" || propsToMatch === "*") {
return true;
}
-
var isMatched;
var parsedData = parseMatchProps(propsToMatch);
-
if (!validateParsedData(parsedData)) {
logMessage(source, "Invalid parameter: ".concat(propsToMatch));
isMatched = false;
@@ -25505,10 +21053,8 @@
return Object.prototype.hasOwnProperty.call(requestData, matchKey) && matchValue.test(requestData[matchKey]);
});
}
-
return isMatched;
}
-
function getXhrData(method, url, async, user, password) {
return {
method: method,
@@ -25518,7 +21064,6 @@
password: password
};
}
-
function getMatchPropsData(data) {
var matchData = {};
Object.keys(data).forEach(function (key) {
@@ -25526,13 +21071,14 @@
});
return matchData;
}
-
+ function getRequestProps() {
+ return ["url", "method", "headers", "body", "mode", "credentials", "cache", "redirect", "referrer", "referrerPolicy", "integrity", "keepalive", "signal"];
+ }
function validateParsedData(data) {
return Object.values(data).every(function (value) {
return isValidStrPattern(value);
});
}
-
function parseMatchProps(propsToMatchStr) {
var PROPS_DIVIDER = " ";
var PAIRS_MARKER = ":";
@@ -25543,7 +21089,6 @@
var dividerInd = prop.indexOf(PAIRS_MARKER);
var key = prop.slice(0, dividerInd);
var hasLegalMatchProp = LEGAL_MATCH_PROPS.indexOf(key) !== -1;
-
if (hasLegalMatchProp) {
var value = prop.slice(dividerInd + 1);
propsObj[key] = value;
@@ -25553,35 +21098,27 @@
});
return propsObj;
}
-
function isValidStrPattern(input) {
var FORWARD_SLASH = "/";
var str = escapeRegExp(input);
-
if (input[0] === FORWARD_SLASH && input[input.length - 1] === FORWARD_SLASH) {
str = input.slice(1, -1);
}
-
var isValid;
-
try {
isValid = new RegExp(str);
isValid = true;
} catch (e) {
isValid = false;
}
-
return isValid;
}
-
function escapeRegExp(str) {
return str.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
}
-
function isEmptyObject(obj) {
- return Object.keys(obj).length === 0;
+ return Object.keys(obj).length === 0 && !obj.prototype;
}
-
function getObjectEntries(object) {
var keys = Object.keys(object);
var entries = [];
@@ -25590,270 +21127,318 @@
});
return entries;
}
-
var updatedArgs = args ? [].concat(source).concat(args) : [source];
-
try {
trustedReplaceXhrResponse.apply(this, updatedArgs);
} catch (e) {
console.log(e);
}
}
-
function trustedSetCookie(source, args) {
function trustedSetCookie(source, name, value) {
var offsetExpiresSec = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : "";
- var reload = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : "false";
- var path = arguments.length > 5 && arguments[5] !== undefined ? arguments[5] : "/";
-
+ var path = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : "/";
if (typeof name === "undefined") {
logMessage(source, "Cookie name should be specified.");
return;
}
-
if (typeof value === "undefined") {
logMessage(source, "Cookie value should be specified.");
return;
}
-
- if (reload === "true" && isCookieSetWithValue(document.cookie, name, value)) {
+ var parsedValue = parseKeywordValue(value);
+ if (!isValidCookiePath(path)) {
+ logMessage(source, "Invalid cookie path: '".concat(path, "'"));
return;
}
-
+ var cookieToSet = concatCookieNameValuePath(name, parsedValue, path);
+ if (!cookieToSet) {
+ return;
+ }
+ if (offsetExpiresSec) {
+ var parsedOffsetMs = getTrustedCookieOffsetMs(offsetExpiresSec);
+ if (!parsedOffsetMs) {
+ logMessage(source, "Invalid offsetExpiresSec value: ".concat(offsetExpiresSec));
+ return;
+ }
+ var expires = Date.now() + parsedOffsetMs;
+ cookieToSet += " expires=".concat(new Date(expires).toUTCString(), ";");
+ }
+ document.cookie = cookieToSet;
+ hit(source);
+ }
+ function hit(source) {
+ if (source.verbose !== true) {
+ return;
+ }
+ try {
+ var log = console.log.bind(console);
+ var trace = console.trace.bind(console);
+ var prefix = source.ruleText || "";
+ if (source.domainName) {
+ var AG_SCRIPTLET_MARKER = "#%#//";
+ var UBO_SCRIPTLET_MARKER = "##+js";
+ var ruleStartIndex;
+ if (source.ruleText.indexOf(AG_SCRIPTLET_MARKER) > -1) {
+ ruleStartIndex = source.ruleText.indexOf(AG_SCRIPTLET_MARKER);
+ } else if (source.ruleText.indexOf(UBO_SCRIPTLET_MARKER) > -1) {
+ ruleStartIndex = source.ruleText.indexOf(UBO_SCRIPTLET_MARKER);
+ }
+ var rulePart = source.ruleText.slice(ruleStartIndex);
+ prefix = "".concat(source.domainName).concat(rulePart);
+ }
+ log("".concat(prefix, " trace start"));
+ if (trace) {
+ trace();
+ }
+ log("".concat(prefix, " trace end"));
+ } catch (e) {}
+ if (typeof window.__debug === "function") {
+ window.__debug(source);
+ }
+ }
+ function logMessage(source, message) {
+ var forced = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;
+ if (forced || source.verbose) {
+ console.log("".concat(source.name, ": ").concat(message));
+ }
+ }
+ function concatCookieNameValuePath(rawName, rawValue, rawPath) {
+ return "".concat(encodeURIComponent(rawName), "=").concat(encodeURIComponent(rawValue), "; ").concat(getCookiePath(rawPath), ";");
+ }
+ function isValidCookiePath(rawPath) {
+ return rawPath === "/" || rawPath === "none";
+ }
+ function getTrustedCookieOffsetMs(offsetExpiresSec) {
var ONE_YEAR_EXPIRATION_KEYWORD = "1year";
var ONE_DAY_EXPIRATION_KEYWORD = "1day";
+ var MS_IN_SEC = 1e3;
+ var SECONDS_IN_YEAR = 365 * 24 * 60 * 60;
+ var SECONDS_IN_DAY = 24 * 60 * 60;
+ var parsedSec;
+ if (offsetExpiresSec === ONE_YEAR_EXPIRATION_KEYWORD) {
+ parsedSec = SECONDS_IN_YEAR;
+ } else if (offsetExpiresSec === ONE_DAY_EXPIRATION_KEYWORD) {
+ parsedSec = SECONDS_IN_DAY;
+ } else {
+ parsedSec = Number.parseInt(offsetExpiresSec, 10);
+ if (Number.isNaN(parsedSec)) {
+ return null;
+ }
+ }
+ return parsedSec * MS_IN_SEC;
+ }
+ function parseKeywordValue(rawValue) {
+ var NOW_VALUE_KEYWORD = "$now$";
+ var CURRENT_DATE_KEYWORD = "$currentDate$";
+ var parsedValue = rawValue;
+ if (rawValue === NOW_VALUE_KEYWORD) {
+ parsedValue = Date.now().toString();
+ } else if (rawValue === CURRENT_DATE_KEYWORD) {
+ parsedValue = Date();
+ }
+ return parsedValue;
+ }
+ function getCookiePath(rawPath) {
+ if (rawPath === "/") {
+ return "path=/";
+ }
+ return "";
+ }
+ var updatedArgs = args ? [].concat(source).concat(args) : [source];
+ try {
+ trustedSetCookie.apply(this, updatedArgs);
+ } catch (e) {
+ console.log(e);
+ }
+ }
+ function trustedSetCookieReload(source, args) {
+ function trustedSetCookieReload(source, name, value) {
+ var offsetExpiresSec = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : "";
+ var path = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : "/";
+ if (typeof name === "undefined") {
+ logMessage(source, "Cookie name should be specified.");
+ return;
+ }
+ if (typeof value === "undefined") {
+ logMessage(source, "Cookie value should be specified.");
+ return;
+ }
+ if (isCookieSetWithValue(document.cookie, name, value)) {
+ return;
+ }
var parsedValue = parseKeywordValue(value);
- var cookieToSet = concatCookieNameValuePath(source, name, parsedValue, path);
-
+ if (!isValidCookiePath(path)) {
+ logMessage(source, "Invalid cookie path: '".concat(path, "'"));
+ return;
+ }
+ var cookieToSet = concatCookieNameValuePath(name, parsedValue, path);
if (!cookieToSet) {
return;
}
-
if (offsetExpiresSec) {
- var MS_IN_SEC = 1e3;
- var SECONDS_IN_YEAR = 365 * 24 * 60 * 60;
- var SECONDS_IN_DAY = 24 * 60 * 60;
- var parsedOffsetExpiresSec;
-
- if (offsetExpiresSec === ONE_YEAR_EXPIRATION_KEYWORD) {
- parsedOffsetExpiresSec = SECONDS_IN_YEAR;
- } else if (offsetExpiresSec === ONE_DAY_EXPIRATION_KEYWORD) {
- parsedOffsetExpiresSec = SECONDS_IN_DAY;
- } else {
- parsedOffsetExpiresSec = Number.parseInt(offsetExpiresSec, 10);
-
- if (Number.isNaN(parsedOffsetExpiresSec)) {
- var message = "log: Invalid offsetExpiresSec value: ".concat(offsetExpiresSec);
- logMessage(source, message);
- return;
- }
+ var parsedOffsetMs = getTrustedCookieOffsetMs(offsetExpiresSec);
+ if (!parsedOffsetMs) {
+ logMessage(source, "Invalid offsetExpiresSec value: ".concat(offsetExpiresSec));
+ return;
}
-
- var expires = Date.now() + parsedOffsetExpiresSec * MS_IN_SEC;
+ var expires = Date.now() + parsedOffsetMs;
cookieToSet += " expires=".concat(new Date(expires).toUTCString(), ";");
}
-
- if (cookieToSet) {
- document.cookie = cookieToSet;
- hit(source);
-
- if (reload === "true" && isCookieSetWithValue(document.cookie, name, value)) {
- window.location.reload();
- }
+ document.cookie = cookieToSet;
+ hit(source);
+ if (isCookieSetWithValue(document.cookie, name, value)) {
+ window.location.reload();
}
}
-
- function hit(source, message) {
+ function hit(source) {
if (source.verbose !== true) {
return;
}
-
try {
var log = console.log.bind(console);
var trace = console.trace.bind(console);
var prefix = source.ruleText || "";
-
if (source.domainName) {
var AG_SCRIPTLET_MARKER = "#%#//";
var UBO_SCRIPTLET_MARKER = "##+js";
var ruleStartIndex;
-
if (source.ruleText.indexOf(AG_SCRIPTLET_MARKER) > -1) {
ruleStartIndex = source.ruleText.indexOf(AG_SCRIPTLET_MARKER);
} else if (source.ruleText.indexOf(UBO_SCRIPTLET_MARKER) > -1) {
ruleStartIndex = source.ruleText.indexOf(UBO_SCRIPTLET_MARKER);
}
-
var rulePart = source.ruleText.slice(ruleStartIndex);
prefix = "".concat(source.domainName).concat(rulePart);
}
-
- var LOG_MARKER = "log: ";
-
- if (message) {
- if (message.indexOf(LOG_MARKER) === -1) {
- log("".concat(prefix, " message:\n").concat(message));
- } else {
- log(message.slice(LOG_MARKER.length));
- }
- }
-
log("".concat(prefix, " trace start"));
-
if (trace) {
trace();
}
-
log("".concat(prefix, " trace end"));
} catch (e) {}
-
if (typeof window.__debug === "function") {
window.__debug(source);
}
}
-
function logMessage(source, message) {
var forced = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;
-
if (forced || source.verbose) {
console.log("".concat(source.name, ": ").concat(message));
}
}
-
function isCookieSetWithValue(cookieString, name, value) {
return cookieString.split(";").some(function (cookieStr) {
var pos = cookieStr.indexOf("=");
-
if (pos === -1) {
return false;
}
-
var cookieName = cookieStr.slice(0, pos).trim();
var cookieValue = cookieStr.slice(pos + 1).trim();
return name === cookieName && value === cookieValue;
});
}
-
- function concatCookieNameValuePath(source, rawName, rawValue, rawPath) {
- if (!isValidCookieRawPath(rawPath)) {
- logMessage(source, "Invalid cookie path: '".concat(rawPath, "'"));
- return null;
- }
-
- return "".concat(encodeURIComponent(rawName), "=").concat(encodeURIComponent(rawValue), "; ").concat(getCookiePath(rawPath));
+ function concatCookieNameValuePath(rawName, rawValue, rawPath) {
+ return "".concat(encodeURIComponent(rawName), "=").concat(encodeURIComponent(rawValue), "; ").concat(getCookiePath(rawPath), ";");
}
-
- function isValidCookieRawPath(rawPath) {
+ function isValidCookiePath(rawPath) {
return rawPath === "/" || rawPath === "none";
}
-
+ function getTrustedCookieOffsetMs(offsetExpiresSec) {
+ var ONE_YEAR_EXPIRATION_KEYWORD = "1year";
+ var ONE_DAY_EXPIRATION_KEYWORD = "1day";
+ var MS_IN_SEC = 1e3;
+ var SECONDS_IN_YEAR = 365 * 24 * 60 * 60;
+ var SECONDS_IN_DAY = 24 * 60 * 60;
+ var parsedSec;
+ if (offsetExpiresSec === ONE_YEAR_EXPIRATION_KEYWORD) {
+ parsedSec = SECONDS_IN_YEAR;
+ } else if (offsetExpiresSec === ONE_DAY_EXPIRATION_KEYWORD) {
+ parsedSec = SECONDS_IN_DAY;
+ } else {
+ parsedSec = Number.parseInt(offsetExpiresSec, 10);
+ if (Number.isNaN(parsedSec)) {
+ return null;
+ }
+ }
+ return parsedSec * MS_IN_SEC;
+ }
function parseKeywordValue(rawValue) {
var NOW_VALUE_KEYWORD = "$now$";
var CURRENT_DATE_KEYWORD = "$currentDate$";
var parsedValue = rawValue;
-
if (rawValue === NOW_VALUE_KEYWORD) {
parsedValue = Date.now().toString();
} else if (rawValue === CURRENT_DATE_KEYWORD) {
parsedValue = Date();
}
-
return parsedValue;
}
-
function getCookiePath(rawPath) {
if (rawPath === "/") {
return "path=/";
}
-
return "";
}
-
var updatedArgs = args ? [].concat(source).concat(args) : [source];
-
try {
- trustedSetCookie.apply(this, updatedArgs);
+ trustedSetCookieReload.apply(this, updatedArgs);
} catch (e) {
console.log(e);
}
}
-
function trustedSetLocalStorageItem(source, args) {
function trustedSetLocalStorageItem(source, key, value) {
if (typeof key === "undefined") {
logMessage(source, "Item key should be specified.");
return;
}
-
if (typeof value === "undefined") {
logMessage(source, "Item value should be specified.");
return;
}
-
var parsedValue = parseKeywordValue(value);
var _window = window,
- localStorage = _window.localStorage;
+ localStorage = _window.localStorage;
setStorageItem(source, localStorage, key, parsedValue);
hit(source);
}
-
- function hit(source, message) {
+ function hit(source) {
if (source.verbose !== true) {
return;
}
-
try {
var log = console.log.bind(console);
var trace = console.trace.bind(console);
var prefix = source.ruleText || "";
-
if (source.domainName) {
var AG_SCRIPTLET_MARKER = "#%#//";
var UBO_SCRIPTLET_MARKER = "##+js";
var ruleStartIndex;
-
if (source.ruleText.indexOf(AG_SCRIPTLET_MARKER) > -1) {
ruleStartIndex = source.ruleText.indexOf(AG_SCRIPTLET_MARKER);
} else if (source.ruleText.indexOf(UBO_SCRIPTLET_MARKER) > -1) {
ruleStartIndex = source.ruleText.indexOf(UBO_SCRIPTLET_MARKER);
}
-
var rulePart = source.ruleText.slice(ruleStartIndex);
prefix = "".concat(source.domainName).concat(rulePart);
}
-
- var LOG_MARKER = "log: ";
-
- if (message) {
- if (message.indexOf(LOG_MARKER) === -1) {
- log("".concat(prefix, " message:\n").concat(message));
- } else {
- log(message.slice(LOG_MARKER.length));
- }
- }
-
log("".concat(prefix, " trace start"));
-
if (trace) {
trace();
}
-
log("".concat(prefix, " trace end"));
} catch (e) {}
-
if (typeof window.__debug === "function") {
window.__debug(source);
}
}
-
function logMessage(source, message) {
var forced = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;
-
if (forced || source.verbose) {
console.log("".concat(source.name, ": ").concat(message));
}
}
-
function setStorageItem(source, storage, key, value) {
try {
storage.setItem(key, value);
@@ -25862,85 +21447,64 @@
logMessage(source, message);
}
}
-
function parseKeywordValue(rawValue) {
var NOW_VALUE_KEYWORD = "$now$";
var CURRENT_DATE_KEYWORD = "$currentDate$";
var parsedValue = rawValue;
-
if (rawValue === NOW_VALUE_KEYWORD) {
parsedValue = Date.now().toString();
} else if (rawValue === CURRENT_DATE_KEYWORD) {
parsedValue = Date();
}
-
return parsedValue;
}
-
var updatedArgs = args ? [].concat(source).concat(args) : [source];
-
try {
trustedSetLocalStorageItem.apply(this, updatedArgs);
} catch (e) {
console.log(e);
}
}
-
function xmlPrune(source, args) {
function xmlPrune(source, propsToRemove) {
var _this = this;
-
var optionalProp = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : "";
var urlToMatch = arguments.length > 3 ? arguments[3] : undefined;
-
if (typeof Reflect === "undefined" || typeof fetch === "undefined" || typeof Proxy === "undefined" || typeof Response === "undefined") {
return;
}
-
var shouldPruneResponse = true;
-
if (!propsToRemove) {
shouldPruneResponse = false;
}
-
var urlMatchRegexp = toRegExp(urlToMatch);
-
var isXML = function isXML(text) {
var trimedText = text.trim();
-
if (startsWith(trimedText, "<") && endsWith(trimedText, ">")) {
return true;
}
-
return false;
};
-
var pruneXML = function pruneXML(text) {
if (!isXML(text)) {
shouldPruneResponse = false;
return text;
}
-
var xmlParser = new DOMParser();
var xmlDoc = xmlParser.parseFromString(text, "text/xml");
var errorNode = xmlDoc.querySelector("parsererror");
-
if (errorNode) {
return text;
}
-
if (optionalProp !== "" && xmlDoc.querySelector(optionalProp) === null) {
shouldPruneResponse = false;
return text;
}
-
var elems = xmlDoc.querySelectorAll(propsToRemove);
-
if (!elems.length) {
shouldPruneResponse = false;
return text;
}
-
elems.forEach(function (elem) {
elem.remove();
});
@@ -25948,20 +21512,16 @@
text = serializer.serializeToString(xmlDoc);
return text;
};
-
var xhrWrapper = function xhrWrapper(target, thisArg, args) {
var xhrURL = args[1];
-
if (typeof xhrURL !== "string" || xhrURL.length === 0) {
return Reflect.apply(target, thisArg, args);
}
-
if (urlMatchRegexp.test(xhrURL)) {
thisArg.addEventListener("readystatechange", function pruneResponse() {
if (thisArg.readyState === 4) {
var response = thisArg.response;
thisArg.removeEventListener("readystatechange", pruneResponse);
-
if (!shouldPruneResponse) {
if (isXML(response)) {
var message = "XMLHttpRequest.open() URL: ".concat(xhrURL, "\nresponse: ").concat(response);
@@ -25969,7 +21529,6 @@
}
} else {
var prunedResponseContent = pruneXML(response);
-
if (shouldPruneResponse) {
Object.defineProperty(thisArg, "response", {
value: prunedResponseContent
@@ -25979,29 +21538,23 @@
});
hit(source);
}
-
shouldPruneResponse = true;
}
}
});
}
-
return Reflect.apply(target, thisArg, args);
};
-
var xhrHandler = {
apply: xhrWrapper
};
window.XMLHttpRequest.prototype.open = new Proxy(window.XMLHttpRequest.prototype.open, xhrHandler);
var nativeFetch = window.fetch;
-
var fetchWrapper = function fetchWrapper(target, thisArg, args) {
var fetchURL = args[0];
-
if (typeof fetchURL !== "string" || fetchURL.length === 0) {
return Reflect.apply(target, thisArg, args);
}
-
if (urlMatchRegexp.test(fetchURL)) {
return nativeFetch.apply(_this, args).then(function (response) {
return response.text().then(function (text) {
@@ -26009,12 +21562,9 @@
if (isXML(text)) {
logMessage("fetch URL: ".concat(fetchURL, "\nresponse text: ").concat(text));
}
-
return Reflect.apply(target, thisArg, args);
}
-
var prunedText = pruneXML(text);
-
if (shouldPruneResponse) {
hit(source);
return new Response(prunedText, {
@@ -26023,113 +21573,80 @@
headers: response.headers
});
}
-
shouldPruneResponse = true;
return Reflect.apply(target, thisArg, args);
});
});
}
-
return Reflect.apply(target, thisArg, args);
};
-
var fetchHandler = {
apply: fetchWrapper
};
window.fetch = new Proxy(window.fetch, fetchHandler);
}
-
- function hit(source, message) {
+ function hit(source) {
if (source.verbose !== true) {
return;
}
-
try {
var log = console.log.bind(console);
var trace = console.trace.bind(console);
var prefix = source.ruleText || "";
-
if (source.domainName) {
var AG_SCRIPTLET_MARKER = "#%#//";
var UBO_SCRIPTLET_MARKER = "##+js";
var ruleStartIndex;
-
if (source.ruleText.indexOf(AG_SCRIPTLET_MARKER) > -1) {
ruleStartIndex = source.ruleText.indexOf(AG_SCRIPTLET_MARKER);
} else if (source.ruleText.indexOf(UBO_SCRIPTLET_MARKER) > -1) {
ruleStartIndex = source.ruleText.indexOf(UBO_SCRIPTLET_MARKER);
}
-
var rulePart = source.ruleText.slice(ruleStartIndex);
prefix = "".concat(source.domainName).concat(rulePart);
}
-
- var LOG_MARKER = "log: ";
-
- if (message) {
- if (message.indexOf(LOG_MARKER) === -1) {
- log("".concat(prefix, " message:\n").concat(message));
- } else {
- log(message.slice(LOG_MARKER.length));
- }
- }
-
log("".concat(prefix, " trace start"));
-
if (trace) {
trace();
}
-
log("".concat(prefix, " trace end"));
} catch (e) {}
-
if (typeof window.__debug === "function") {
window.__debug(source);
}
}
-
function logMessage(source, message) {
var forced = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;
-
if (forced || source.verbose) {
console.log("".concat(source.name, ": ").concat(message));
}
}
-
function toRegExp() {
var input = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : "";
var DEFAULT_VALUE = ".?";
var FORWARD_SLASH = "/";
-
if (input === "") {
return new RegExp(DEFAULT_VALUE);
}
-
if (input[0] === FORWARD_SLASH && input[input.length - 1] === FORWARD_SLASH) {
return new RegExp(input.slice(1, -1));
}
-
var escaped = input.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
return new RegExp(escaped);
}
-
function startsWith(str, prefix) {
return !!str && str.indexOf(prefix) === 0;
}
-
function endsWith(str, ending) {
return !!str && str.lastIndexOf(ending) === str.length - ending.length;
}
-
var updatedArgs = args ? [].concat(source).concat(args) : [source];
-
try {
xmlPrune.apply(this, updatedArgs);
} catch (e) {
console.log(e);
}
}
-
var scriptletsMap = {
"abort-current-inline-script": abortCurrentInlineScript,
"abort-current-script.js": abortCurrentInlineScript,
@@ -26236,12 +21753,6 @@
"ubo-adfly-defuser.js": preventAdfly,
"ubo-adfly-defuser": preventAdfly,
"prevent-bab": preventBab,
- "nobab.js": preventBab,
- "ubo-nobab.js": preventBab,
- "bab-defuser.js": preventBab,
- "ubo-bab-defuser.js": preventBab,
- "ubo-nobab": preventBab,
- "ubo-bab-defuser": preventBab,
"prevent-element-src-loading": preventElementSrcLoading,
"prevent-eval-if": preventEvalIf,
"noeval-if.js": preventEvalIf,
@@ -26350,13 +21861,13 @@
"trusted-replace-fetch-response": trustedReplaceFetchResponse,
"trusted-replace-xhr-response": trustedReplaceXhrResponse,
"trusted-set-cookie": trustedSetCookie,
+ "trusted-set-cookie-reload": trustedSetCookieReload,
"trusted-set-local-storage-item": trustedSetLocalStorageItem,
"xml-prune": xmlPrune,
"xml-prune.js": xmlPrune,
"ubo-xml-prune.js": xmlPrune,
"ubo-xml-prune": xmlPrune
};
-
var getScriptletFunction = function getScriptletFunction(name) {
return scriptletsMap[name];
};
@@ -26378,16 +21889,15 @@
* @param {Source} source
* @returns {string|null} scriptlet code
*/
-
function getScriptletCode(source) {
if (!validator.isValidScriptletName(source.name)) {
return null;
}
-
var scriptletFunction = getScriptletFunction(source.name).toString();
var result = source.engine === 'corelibs' || source.engine === 'test' ? wrapInNonameFunc(scriptletFunction) : passSourceAndProps(source, scriptletFunction);
return result;
}
+
/**
* Scriptlets variable
*
@@ -26395,8 +21905,6 @@
* `invoke` method receives one argument with `Source` type
* `validate` method receives one argument with `String` type
*/
-
-
var scriptletsObject = function () {
return {
invoke: getScriptletCode,
@@ -26418,7 +21926,6 @@
* Expose scriptlets to global
*/
// eslint-disable-next-line no-undef
-
scriptlets = scriptletsObject;
})();
diff --git a/dist/umd/scriptlets.d.ts b/dist/umd/scriptlets.d.ts
index 148196c6..c1be2a8e 100644
--- a/dist/umd/scriptlets.d.ts
+++ b/dist/umd/scriptlets.d.ts
@@ -64,6 +64,11 @@ declare module '@adguard/scriptlets' {
*/
contentType: string;
+ /**
+ * Filename of the redirect.
+ */
+ file: string;
+
/**
* If it's new type of redirects, i.e. click2load
*/
@@ -81,6 +86,7 @@ declare module '@adguard/scriptlets' {
class Redirects {
constructor(rawYaml: string);
getRedirect(title: string): Redirect;
+ isBlocking(title: string): boolean;
}
/**
@@ -117,7 +123,7 @@ declare module '@adguard/scriptlets' {
/**
* Object with redirects titles in the keys and RedirectSources
*/
- Redirects: Redirects;
+ Redirects: typeof Redirects;
/**
* Returns filename with extension for requested alias
diff --git a/dist/umd/scriptlets.umd.js b/dist/umd/scriptlets.umd.js
index 2adcca8a..6fa8e863 100644
--- a/dist/umd/scriptlets.umd.js
+++ b/dist/umd/scriptlets.umd.js
@@ -1,7 +1,7 @@
/**
* AdGuard Scriptlets
- * Version 1.7.3
+ * Version 1.7.20
*/
(function (factory) {
@@ -14,20 +14,21 @@
*/
function attachDependencies(scriptlet) {
var _scriptlet$injections = scriptlet.injections,
- injections = _scriptlet$injections === void 0 ? [] : _scriptlet$injections;
+ injections = _scriptlet$injections === void 0 ? [] : _scriptlet$injections;
return injections.reduce(function (accum, dep) {
return "".concat(accum, "\n").concat(dep.toString());
}, scriptlet.toString());
}
+
/**
* Add scriptlet call to existing code
* @param {Function} scriptlet
* @param {string} code
*/
-
function addCall(scriptlet, code) {
return "".concat(code, "\n const updatedArgs = args ? [].concat(source).concat(args) : [source];\n try {\n ").concat(scriptlet.name, ".apply(this, updatedArgs);\n } catch (e) {\n console.log(e);\n }");
}
+
/**
* Wrap function into IIFE (Immediately invoked function expression)
*
@@ -51,29 +52,24 @@
* noeval.apply(this, args);
* )({"args": ["aaa", "bbb"], "name":"noeval"}, ["aaa", "bbb"])`
*/
-
function passSourceAndProps(source, code) {
var redirect = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;
-
if (source.hit) {
source.hit = source.hit.toString();
}
-
var sourceString = JSON.stringify(source);
var argsString = source.args ? "[".concat(source.args.map(JSON.stringify), "]") : undefined;
var params = argsString ? "".concat(sourceString, ", ").concat(argsString) : sourceString;
-
if (redirect) {
return "(function(source, args){\n".concat(code, "\n})(").concat(params, ");");
}
-
return "(".concat(code, ")(").concat(params, ");");
}
+
/**
* Wrap code in no name function
* @param {string} code which must be wrapped
*/
-
function wrapInNonameFunc(code) {
return "function(source, args){\n".concat(code, "\n}");
}
@@ -93,6 +89,7 @@
});
return entries;
};
+
/**
* Converts array of pairs to object.
* Object.fromEntries() polyfill because it is not supported by IE
@@ -100,7 +97,6 @@
* @param {Array} entries - array of pairs
* @returns {Object}
*/
-
var getObjectFromEntries = function getObjectFromEntries(entries) {
var output = entries.reduce(function (acc, el) {
var key = el[0];
@@ -110,31 +106,30 @@
}, {});
return output;
};
+
/**
* Checks whether the obj is an empty object
* @param {Object} obj
* @returns {boolean}
*/
-
var isEmptyObject = function isEmptyObject(obj) {
- return Object.keys(obj).length === 0;
+ return Object.keys(obj).length === 0 && !obj.prototype;
};
+
/**
* Checks whether the obj is an empty object
* @param {Object} obj
* @param {string} prop
* @returns {Object|null}
*/
-
var safeGetDescriptor = function safeGetDescriptor(obj, prop) {
var descriptor = Object.getOwnPropertyDescriptor(obj, prop);
-
if (descriptor && descriptor.configurable) {
return descriptor;
}
-
return null;
};
+
/**
* Set getter and setter to property if it's configurable
* @param {Object} object target object with property
@@ -142,14 +137,11 @@
* @param {PropertyDescriptor} descriptor contains getter and setter functions
* @returns {boolean} is operation successful
*/
-
function setPropertyAccess(object, property, descriptor) {
var currentDescriptor = Object.getOwnPropertyDescriptor(object, property);
-
if (currentDescriptor && !currentDescriptor.configurable) {
return false;
}
-
Object.defineProperty(object, property, descriptor);
return true;
}
@@ -165,29 +157,30 @@
var native = Number.isNaN || window.isNaN;
return native(num);
};
+
/**
* Determines whether the passed value is a finite number
* https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Number/isFinite
* @param {*} num
* @returns {boolean}
*/
-
var nativeIsFinite = function nativeIsFinite(num) {
// eslint-disable-next-line no-restricted-properties
var native = Number.isFinite || window.isFinite;
return native(num);
};
+
/**
* Parses string for a number, if possible, otherwise returns null.
* @param {*} rawString
* @returns {number|null}
*/
-
var getNumberFromString = function getNumberFromString(rawString) {
var parsedDelay = parseInt(rawString, 10);
var validDelay = nativeIsNaN(parsedDelay) ? null : parsedDelay;
return validDelay;
};
+
/**
* Generate a random integer between two values, inclusive
* https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/random#getting_a_random_integer_between_two_values_inclusive
@@ -195,7 +188,6 @@
* @param {number} max
* @returns {number}
*/
-
function getRandomIntInclusive(min, max) {
min = Math.ceil(min);
max = Math.floor(max);
@@ -209,19 +201,19 @@
* @param {string} newSubstr replacement
* @returns {string}
*/
-
var replaceAll = function replaceAll(input, substr, newSubstr) {
return input.split(substr).join(newSubstr);
};
+
/**
* Escapes special chars in string
* @param {string} str
* @returns {string}
*/
-
var escapeRegExp = function escapeRegExp(str) {
return str.replace(/[.*+?^${}()|[\]\\]/g, '\\$&');
};
+
/**
* A literal string or regexp pattern wrapped in forward slashes.
* For example, 'simpleStr' or '/adblock|_0x/'.
@@ -235,77 +227,69 @@
* @returns {RegExp} regular expression; defaults to /.?/
* @throws {SyntaxError} Throw an error for invalid regex pattern
*/
-
var toRegExp = function toRegExp() {
var input = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : '';
var DEFAULT_VALUE = '.?';
var FORWARD_SLASH = '/';
-
if (input === '') {
return new RegExp(DEFAULT_VALUE);
}
-
if (input[0] === FORWARD_SLASH && input[input.length - 1] === FORWARD_SLASH) {
return new RegExp(input.slice(1, -1));
}
-
var escaped = input.replace(/[.*+?^${}()|[\]\\]/g, '\\$&');
return new RegExp(escaped);
};
+
/**
* Checks whether the input string can be converted to regexp
* @param {RawStrPattern} input literal string or regexp pattern
* @returns {boolean}
*/
-
var isValidStrPattern = function isValidStrPattern(input) {
var FORWARD_SLASH = '/';
var str = escapeRegExp(input);
-
if (input[0] === FORWARD_SLASH && input[input.length - 1] === FORWARD_SLASH) {
str = input.slice(1, -1);
}
-
var isValid;
-
try {
isValid = new RegExp(str);
isValid = true;
} catch (e) {
isValid = false;
}
-
return isValid;
};
+
/**
* Get string before regexp first match
* @param {string} str
* @param {RegExp} rx
*/
-
var getBeforeRegExp = function getBeforeRegExp(str, rx) {
var index = str.search(rx);
return str.substring(0, index);
};
+
/**
* Checks whether the string starts with the substring
* @param {string} str full string
* @param {string} prefix substring
* @returns {boolean}
*/
-
- var startsWith = function startsWith(str, prefix) {
+ var startsWith$1 = function startsWith(str, prefix) {
// if str === '', (str && false) will return ''
// that's why it has to be !!str
return !!str && str.indexOf(prefix) === 0;
};
+
/**
* Checks whether the string ends with the substring
* @param {string} str full string
* @param {string} ending substring
* @returns {boolean}
*/
-
var endsWith = function endsWith(str, ending) {
// if str === '', (str && false) will return ''
// that's why it has to be !!str
@@ -315,7 +299,6 @@
if (!str) {
return str;
}
-
var index = str.indexOf(separator);
return index < 0 ? '' : str.substring(index + separator.length);
};
@@ -323,44 +306,41 @@
if (!str || !separator) {
return str;
}
-
var index = str.indexOf(separator);
return index < 0 ? str : str.substring(0, index);
};
+
/**
* Wrap str in single quotes and replaces single quotes to double one
* @param {string} str
*/
-
var wrapInSingleQuotes = function wrapInSingleQuotes(str) {
if (str[0] === '\'' && str[str.length - 1] === '\'' || str[0] === '"' && str[str.length - 1] === '"') {
str = str.substring(1, str.length - 1);
- } // eslint-disable-next-line no-useless-escape
-
-
+ }
+ // eslint-disable-next-line no-useless-escape
str = str.replace(/\'/g, '"');
return "'".concat(str, "'");
};
+
/**
* Returns substring enclosed in the widest braces
* @param {string} str
*/
-
var getStringInBraces = function getStringInBraces(str) {
var firstIndex = str.indexOf('(');
var lastIndex = str.lastIndexOf(')');
return str.substring(firstIndex + 1, lastIndex);
};
+
/**
* Prepares RTCPeerConnection config as string for proper logging
* @param {*} config
* @returns {string} stringified config
*/
-
var convertRtcConfigToString = function convertRtcConfigToString(config) {
var UNDEF_STR = 'undefined';
var str = UNDEF_STR;
-
if (config === null) {
str = 'null';
} else if (config instanceof Object) {
@@ -373,49 +353,44 @@
],
};
*/
-
if (Object.prototype.hasOwnProperty.call(config, SERVERS_PROP_NAME) && Object.prototype.hasOwnProperty.call(config[SERVERS_PROP_NAME][0], URLS_PROP_NAME) && !!config[SERVERS_PROP_NAME][0][URLS_PROP_NAME]) {
str = config[SERVERS_PROP_NAME][0][URLS_PROP_NAME].toString();
}
}
-
return str;
};
+
/**
* Checks whether the match input string can be converted to regexp,
* used for match inputs with possible negation
* @param {string} match literal string or regexp pattern
* @returns {boolean}
*/
-
var isValidMatchStr = function isValidMatchStr(match) {
var INVERT_MARKER = '!';
var str = match;
-
- if (startsWith(match, INVERT_MARKER)) {
+ if (startsWith$1(match, INVERT_MARKER)) {
str = match.slice(1);
}
-
return isValidStrPattern(str);
};
+
/**
* Validates the match input number,
* used for match inputs with possible negation
* @param {string} match string of match number
* @returns {boolean}
*/
-
var isValidMatchNumber = function isValidMatchNumber(match) {
var INVERT_MARKER = '!';
var str = match;
-
- if (startsWith(match, INVERT_MARKER)) {
+ if (startsWith$1(match, INVERT_MARKER)) {
str = match.slice(1);
}
-
var num = parseFloat(str);
return !nativeIsNaN(num) && nativeIsFinite(num);
};
+
/**
* @typedef {Object} MatchData
* @property {boolean} isInvertedMatch
@@ -429,10 +404,9 @@
* @param {string} match
* @returns {MatchData}
*/
-
var parseMatchArg = function parseMatchArg(match) {
var INVERT_MARKER = '!';
- var isInvertedMatch = startsWith(match, INVERT_MARKER);
+ var isInvertedMatch = startsWith$1(match, INVERT_MARKER);
var matchValue = isInvertedMatch ? match.slice(1) : match;
var matchRegexp = toRegExp(matchValue);
return {
@@ -440,6 +414,7 @@
matchRegexp: matchRegexp
};
};
+
/**
* @typedef {Object} DelayData
* @property {boolean} isInvertedDelayMatch
@@ -454,10 +429,9 @@
* `isInvertedDelayMatch` is boolean,
* `delayMatch` is number OR null for invalid `delay`
*/
-
var parseDelayArg = function parseDelayArg(delay) {
var INVERT_MARKER = '!';
- var isInvertedDelayMatch = startsWith(delay, INVERT_MARKER);
+ var isInvertedDelayMatch = startsWith$1(delay, INVERT_MARKER);
var delayValue = isInvertedDelayMatch ? delay.slice(1) : delay;
delayValue = parseInt(delayValue, 10);
var delayMatch = nativeIsNaN(delayValue) ? null : delayValue;
@@ -466,34 +440,31 @@
delayMatch: delayMatch
};
};
+
/**
* Converts object to string for logging
* @param {Object} obj data object
* @returns {string}
*/
-
var objectToString = function objectToString(obj) {
return isEmptyObject(obj) ? '{}' : getObjectEntries(obj).map(function (pair) {
var key = pair[0];
var value = pair[1];
var recordValueStr = value;
-
if (value instanceof Object) {
recordValueStr = "{ ".concat(objectToString(value), " }");
}
-
return "".concat(key, ":\"").concat(recordValueStr, "\"");
}).join(' ');
};
+
/**
* Converts types into a string
* @param {*} value
* @returns {string}
*/
-
var convertTypeToString = function convertTypeToString(value) {
var output;
-
if (typeof value === 'undefined') {
output = 'undefined';
} else if (typeof value === 'object') {
@@ -505,68 +476,58 @@
} else {
output = value.toString();
}
-
return output;
};
+
/**
* Generate a random string, a length of the string is provided as an argument
* @param {number} length
* @returns {string}
*/
-
function getRandomStrByLength(length) {
var result = '';
var characters = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789!@#$%^&*()_+=~';
var charactersLength = characters.length;
-
for (var i = 0; i < length; i += 1) {
result += characters.charAt(Math.floor(Math.random() * charactersLength));
}
-
return result;
}
+
/**
* Generate a random string
* @param {string} customResponseText
* @returns {string|null} random string or null if passed argument is invalid
*/
-
function generateRandomResponse(customResponseText) {
var customResponse = customResponseText;
-
if (customResponse === 'true') {
// Generate random alphanumeric string of 10 symbols
customResponse = Math.random().toString(36).slice(-10);
return customResponse;
}
-
customResponse = customResponse.replace('length:', '');
- var rangeRegex = /^\d+-\d+$/; // Return empty string if range is invalid
-
+ var rangeRegex = /^\d+-\d+$/;
+ // Return empty string if range is invalid
if (!rangeRegex.test(customResponse)) {
return null;
}
-
var rangeMin = getNumberFromString(customResponse.split('-')[0]);
var rangeMax = getNumberFromString(customResponse.split('-')[1]);
-
if (!nativeIsFinite(rangeMin) || !nativeIsFinite(rangeMax)) {
return null;
- } // If rangeMin > rangeMax, swap variables
-
+ }
+ // If rangeMin > rangeMax, swap variables
if (rangeMin > rangeMax) {
var temp = rangeMin;
rangeMin = rangeMax;
rangeMax = temp;
}
-
var LENGTH_RANGE_LIMIT = 500 * 1000;
-
if (rangeMax > LENGTH_RANGE_LIMIT) {
return null;
}
-
var length = getRandomIntInclusive(rangeMin, rangeMax);
customResponse = getRandomStrByLength(length);
return customResponse;
@@ -583,10 +544,8 @@
} else {
obj[key] = value;
}
-
return obj;
}
-
var defineProperty = _defineProperty;
/**
@@ -598,76 +557,65 @@
*/
function iterateWithTransitions(iterable, transitions, init, args) {
var state = init || Object.keys(transitions)[0];
-
for (var i = 0; i < iterable.length; i += 1) {
state = transitions[state](iterable, i, args);
}
-
return state;
}
+
/**
* AdGuard scriptlet rule mask
*/
-
-
var ADG_SCRIPTLET_MASK = '#//scriptlet';
+
/**
* Helper to accumulate an array of strings char by char
*/
-
var wordSaver = function wordSaver() {
var str = '';
var strs = [];
-
var saveSymb = function saveSymb(s) {
str += s;
return str;
};
-
var saveStr = function saveStr() {
strs.push(str);
str = '';
};
-
var getAll = function getAll() {
return [].concat(strs);
};
-
return {
saveSymb: saveSymb,
saveStr: saveStr,
getAll: getAll
};
};
-
var substringAfter = function substringAfter(str, separator) {
if (!str) {
return str;
}
-
var index = str.indexOf(separator);
return index < 0 ? '' : str.substring(index + separator.length);
};
+
/**
* Parse and validate scriptlet rule
* @param {*} ruleText
* @returns {{name: string, args: Array}}
*/
-
-
var parseRule = function parseRule(ruleText) {
var _transitions;
-
ruleText = substringAfter(ruleText, ADG_SCRIPTLET_MASK);
/**
* Transition names
*/
-
var TRANSITION = {
OPENED: 'opened',
PARAM: 'param',
CLOSED: 'closed'
};
+
/**
* Transition function: the current index position in start, end or between params
* @param {string} rule
@@ -675,12 +623,10 @@
* @param {Object} Object
* @property {Object} Object.sep contains prop symb with current separator char
*/
-
var opened = function opened(rule, index, _ref) {
var sep = _ref.sep;
var char = rule[index];
var transition;
-
switch (char) {
case ' ':
case '(':
@@ -689,7 +635,6 @@
transition = TRANSITION.OPENED;
break;
}
-
case '\'':
case '"':
{
@@ -697,19 +642,16 @@
transition = TRANSITION.PARAM;
break;
}
-
case ')':
{
transition = index === rule.length - 1 ? TRANSITION.CLOSED : TRANSITION.OPENED;
break;
}
-
default:
{
throw new Error('The rule is not a scriptlet');
}
}
-
return transition;
};
/**
@@ -720,20 +662,16 @@
* @property {Object} Object.sep contains prop `symb` with current separator char
* @property {Object} Object.saver helper which allow to save strings by car by char
*/
-
-
var param = function param(rule, index, _ref2) {
var saver = _ref2.saver,
- sep = _ref2.sep;
+ sep = _ref2.sep;
var char = rule[index];
-
switch (char) {
case '\'':
case '"':
{
var preIndex = index - 1;
var before = rule[preIndex];
-
if (char === sep.symb && before !== '\\') {
sep.symb = null;
saver.saveStr();
@@ -741,7 +679,6 @@
}
}
// eslint-disable-next-line no-fallthrough
-
default:
{
saver.saveSymb(char);
@@ -749,7 +686,6 @@
}
}
};
-
var transitions = (_transitions = {}, defineProperty(_transitions, TRANSITION.OPENED, opened), defineProperty(_transitions, TRANSITION.PARAM, param), defineProperty(_transitions, TRANSITION.CLOSED, function () {}), _transitions);
var sep = {
symb: null
@@ -759,11 +695,9 @@
sep: sep,
saver: saver
});
-
if (state !== 'closed') {
throw new Error("Invalid scriptlet rule ".concat(ruleText));
}
-
var args = saver.getAll();
return {
name: args[0],
@@ -780,24 +714,25 @@
// https://github.com/AdguardTeam/Scriptlets/issues/125
return typeof type !== 'undefined';
};
+
/**
* Validates event listener
* @param {*} listener
* @returns {boolean}
*/
-
var validateListener = function validateListener(listener) {
// https://developer.mozilla.org/en-US/docs/Web/API/EventTarget/addEventListener#parameters
- return typeof listener !== 'undefined' && (typeof listener === 'function' || typeof listener === 'object' // https://github.com/AdguardTeam/Scriptlets/issues/76
+ return typeof listener !== 'undefined' && (typeof listener === 'function' || typeof listener === 'object'
+ // https://github.com/AdguardTeam/Scriptlets/issues/76
&& listener !== null && typeof listener.handleEvent === 'function');
};
+
/**
* Serialize valid event listener
* https://developer.mozilla.org/en-US/docs/Web/API/EventListener
* @param {EventListener} listener valid listener
* @returns {string}
*/
-
var listenerToString = function listenerToString(listener) {
return typeof listener === 'function' ? listener.toString() : listener.handleEvent.toString();
};
@@ -805,12 +740,12 @@
var shouldMatchAnyDelay = function shouldMatchAnyDelay(delay) {
return delay === '*';
};
+
/**
* Handles input delay value
* @param {*} delay
* @returns {number} proper number delay value
*/
-
var getMatchDelay = function getMatchDelay(delay) {
var DEFAULT_DELAY = 1000;
var parsedDelay = parseInt(delay, 10);
@@ -818,22 +753,22 @@
: parsedDelay;
return delayMatch;
};
+
/**
* Checks delay match condition
* @param {*} inputDelay
* @param {number} realDelay
* @returns {boolean}
*/
-
var isDelayMatched = function isDelayMatched(inputDelay, realDelay) {
return shouldMatchAnyDelay(inputDelay) || realDelay === getMatchDelay(inputDelay);
};
+
/**
* Handles input boost value
* @param {*} boost
* @returns {number} proper number boost multiplier value
*/
-
var getBoostMultiplier = function getBoostMultiplier(boost) {
var DEFAULT_MULTIPLIER = 0.05;
var MIN_MULTIPLIER = 0.02;
@@ -841,15 +776,12 @@
var parsedBoost = parseFloat(boost);
var boostMultiplier = nativeIsNaN(parsedBoost) || !nativeIsFinite(parsedBoost) ? DEFAULT_MULTIPLIER // default scriptlet value
: parsedBoost;
-
if (boostMultiplier < MIN_MULTIPLIER) {
boostMultiplier = MIN_MULTIPLIER;
}
-
if (boostMultiplier > MAX_MULTIPLIER) {
boostMultiplier = MAX_MULTIPLIER;
}
-
return boostMultiplier;
};
@@ -865,11 +797,9 @@
return stack.push(el);
});
var res = [];
-
while (stack.length) {
// pop value from stack
var next = stack.pop();
-
if (Array.isArray(next)) {
// push back array items, won't modify the original input
next.forEach(function (el) {
@@ -878,43 +808,20 @@
} else {
res.push(next);
}
- } // reverse to restore input order
-
-
+ }
+ // reverse to restore input order
return res.reverse();
};
+
/**
* Predicate method to check if the array item exists
* @param {any} item
* @returns {boolean}
*/
-
var isExisting = function isExisting(item) {
return !!item;
};
- /**
- * @typedef { import('../scriptlets/index').Source } Source
- */
-
- /**
- * Conditionally logs message to console.
- * Convention is to log messages by source.verbose if such log
- * is not a part of scriptlet's functionality, eg on invalid input,
- * and use 'forced' argument otherwise.
- * @param {Source} source required
- * @param {string} message required, message to log
- * @param {boolean} [forced=false] to log message unconditionally
- */
- var logMessage = function logMessage(source, message) {
- var forced = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;
-
- if (forced || source.verbose) {
- // eslint-disable-next-line no-console
- console.log("".concat(source.name, ": ").concat(message));
- }
- };
-
/**
* @typedef { import('../scriptlets/index').Source } Source
*/
@@ -926,10 +833,10 @@
*
* @returns {boolean}
*/
-
- var isValidCookieRawPath = function isValidCookieRawPath(rawPath) {
+ var isValidCookiePath = function isValidCookiePath(rawPath) {
return rawPath === '/' || rawPath === 'none';
};
+
/**
* Returns 'path=/' if rawPath is '/'
* or empty string '' for other cases, `rawPath === 'none'` included
@@ -938,53 +845,41 @@
*
* @returns {string}
*/
-
var getCookiePath = function getCookiePath(rawPath) {
if (rawPath === '/') {
return 'path=/';
- } // otherwise do not set path as invalid
+ }
+ // otherwise do not set path as invalid
// the same for pathArg === 'none'
- //
-
-
return '';
};
+
/**
* Combines input cookie name, value, and path into string.
*
- * @param {Source} source
* @param {string} rawName
* @param {string} rawValue
* @param {string} rawPath
*
- * @returns {string} string OR `null` if path is not supported
+ * @returns {string|null} string OR `null` if path is not supported
*/
-
- var concatCookieNameValuePath = function concatCookieNameValuePath(source, rawName, rawValue, rawPath) {
- if (!isValidCookieRawPath(rawPath)) {
- logMessage(source, "Invalid cookie path: '".concat(rawPath, "'"));
- return null;
- } // eslint-disable-next-line max-len
-
-
- return "".concat(encodeURIComponent(rawName), "=").concat(encodeURIComponent(rawValue), "; ").concat(getCookiePath(rawPath));
+ var concatCookieNameValuePath = function concatCookieNameValuePath(rawName, rawValue, rawPath) {
+ // eslint-disable-next-line max-len
+ return "".concat(encodeURIComponent(rawName), "=").concat(encodeURIComponent(rawValue), "; ").concat(getCookiePath(rawPath), ";");
};
+
/**
* Gets supported cookie value
*
- * @param {Source} source
* @param {string} value input cookie value
*
* @returns {string|null} valid cookie string if ok OR null if not
*/
-
- var getLimitedCookieValue = function getLimitedCookieValue(source, value) {
+ var getLimitedCookieValue = function getLimitedCookieValue(value) {
if (!value) {
return null;
}
-
var validValue;
-
if (value === 'true') {
validValue = 'true';
} else if (value === 'True') {
@@ -1007,51 +902,46 @@
validValue = 'OK';
} else if (/^\d+$/.test(value)) {
validValue = parseFloat(value);
-
if (nativeIsNaN(validValue)) {
- logMessage(source, "Invalid cookie value: '".concat(value, "'"));
return null;
}
-
if (Math.abs(validValue) < 0 || Math.abs(validValue) > 15) {
- logMessage(source, "Invalid cookie value: '".concat(value, "'"));
return null;
}
} else {
return null;
}
-
return validValue;
};
+
/**
* Parses cookie string into object
* @param {string} cookieString string that conforms to document.cookie format
* @returns {Object} key:value object that corresponds with incoming cookies keys and values
*/
-
var parseCookieString = function parseCookieString(cookieString) {
var COOKIE_DELIMITER = '=';
- var COOKIE_PAIRS_DELIMITER = ';'; // Get raw cookies
+ var COOKIE_PAIRS_DELIMITER = ';';
+ // Get raw cookies
var cookieChunks = cookieString.split(COOKIE_PAIRS_DELIMITER);
var cookieData = {};
cookieChunks.forEach(function (singleCookie) {
var cookieKey;
var cookieValue;
var delimiterIndex = singleCookie.indexOf(COOKIE_DELIMITER);
-
if (delimiterIndex === -1) {
cookieKey = singleCookie.trim();
} else {
cookieKey = singleCookie.slice(0, delimiterIndex).trim();
cookieValue = singleCookie.slice(delimiterIndex + 1);
- } // Save cookie key=value data with null instead of empty ('') values
-
-
+ }
+ // Save cookie key=value data with null instead of empty ('') values
cookieData[cookieKey] = cookieValue || null;
});
return cookieData;
};
+
/**
* Check if cookie with specified name and value is present in a cookie string
* @param {string} cookieString
@@ -1059,85 +949,110 @@
* @param {string} value
* @returns {boolean}
*/
-
var isCookieSetWithValue = function isCookieSetWithValue(cookieString, name, value) {
return cookieString.split(';').some(function (cookieStr) {
var pos = cookieStr.indexOf('=');
-
if (pos === -1) {
return false;
}
-
var cookieName = cookieStr.slice(0, pos).trim();
var cookieValue = cookieStr.slice(pos + 1).trim();
return name === cookieName && value === cookieValue;
});
};
+ /**
+ * Returns parsed offset expired number of ms or null if `offsetExpiresSec` is invalid
+ *
+ * @param {string} offsetExpiresSec input offset param in seconds
+ * @returns {number|null} number is milliseconds OR null
+ */
+ var getTrustedCookieOffsetMs = function getTrustedCookieOffsetMs(offsetExpiresSec) {
+ var ONE_YEAR_EXPIRATION_KEYWORD = '1year';
+ var ONE_DAY_EXPIRATION_KEYWORD = '1day';
+ var MS_IN_SEC = 1000;
+ var SECONDS_IN_YEAR = 365 * 24 * 60 * 60;
+ var SECONDS_IN_DAY = 24 * 60 * 60;
+ var parsedSec;
+ // Set predefined expire value if corresponding keyword was passed
+ if (offsetExpiresSec === ONE_YEAR_EXPIRATION_KEYWORD) {
+ parsedSec = SECONDS_IN_YEAR;
+ } else if (offsetExpiresSec === ONE_DAY_EXPIRATION_KEYWORD) {
+ parsedSec = SECONDS_IN_DAY;
+ } else {
+ parsedSec = Number.parseInt(offsetExpiresSec, 10);
+ // If offsetExpiresSec has been parsed to NaN - do not set cookie at all
+ if (Number.isNaN(parsedSec)) {
+ return null;
+ }
+ }
+ return parsedSec * MS_IN_SEC;
+ };
+
/**
* Noop function
* @return {undefined} undefined
*/
var noopFunc = function noopFunc() {};
+
/**
* Function returns null
* @return {null} null
*/
-
var noopNull = function noopNull() {
return null;
};
+
/**
* Function returns true
* @return {boolean} true
*/
-
var trueFunc = function trueFunc() {
return true;
};
+
/**
* Function returns false
* @return {boolean} false
*/
-
var falseFunc = function falseFunc() {
return false;
};
+
/**
* Function returns this
*/
-
function noopThis() {
return this;
}
+
/**
* Function returns empty string
* @return {string} empty string
*/
-
var noopStr = function noopStr() {
return '';
};
+
/**
* Function returns empty array
* @return {Array} empty array
*/
-
var noopArray = function noopArray() {
return [];
};
+
/**
* Function returns empty object
* @return {Object} empty object
*/
-
var noopObject = function noopObject() {
return {};
};
+
/**
* Function returns Promise.reject()
*/
-
var noopPromiseReject = function noopPromiseReject() {
return Promise.reject();
}; // eslint-disable-line compat/compat
@@ -1147,23 +1062,21 @@
* @param {string} [url=''] value of response url to set on response object
* @param {string} [response='default'] value of response type to set on response object
*/
-
var noopPromiseResolve = function noopPromiseResolve() {
var responseBody = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : '{}';
var responseUrl = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : '';
var responseType = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 'default';
-
if (typeof Response === 'undefined') {
return;
- } // eslint-disable-next-line compat/compat
-
-
+ }
+ // eslint-disable-next-line compat/compat
var response = new Response(responseBody, {
status: 200,
statusText: 'OK'
- }); // Mock response' url & type to avoid adb checks
- // https://github.com/AdguardTeam/Scriptlets/issues/216
+ });
+ // Mock response' url & type to avoid adb checks
+ // https://github.com/AdguardTeam/Scriptlets/issues/216
Object.defineProperties(response, {
url: {
value: responseUrl
@@ -1171,8 +1084,9 @@
type: {
value: responseType
}
- }); // eslint-disable-next-line compat/compat, consistent-return
+ });
+ // eslint-disable-next-line compat/compat, consistent-return
return Promise.resolve(response);
};
@@ -1184,60 +1098,49 @@
* @param {string} stackTrace - script error stack trace
* @returns {boolean}
*/
-
- var shouldAbortInlineOrInjectedScript$1 = function shouldAbortInlineOrInjectedScript(stackMatch, stackTrace) {
+ var shouldAbortInlineOrInjectedScript = function shouldAbortInlineOrInjectedScript(stackMatch, stackTrace) {
var INLINE_SCRIPT_STRING = 'inlineScript';
var INJECTED_SCRIPT_STRING = 'injectedScript';
var INJECTED_SCRIPT_MARKER = '';
-
var isInlineScript = function isInlineScript(stackMatch) {
return stackMatch.indexOf(INLINE_SCRIPT_STRING) > -1;
};
-
var isInjectedScript = function isInjectedScript(stackMatch) {
return stackMatch.indexOf(INJECTED_SCRIPT_STRING) > -1;
};
-
if (!(isInlineScript(stackMatch) || isInjectedScript(stackMatch))) {
return false;
}
-
var documentURL = window.location.href;
- var pos = documentURL.indexOf('#'); // Remove URL hash
+ var pos = documentURL.indexOf('#');
+ // Remove URL hash
// in Chrome, URL in stackTrace doesn't contain hash
// so, it's necessary to remove it, otherwise location.href
// will not match with location from stackTrace
-
if (pos !== -1) {
documentURL = documentURL.slice(0, pos);
}
-
var stackSteps = stackTrace.split('\n').slice(2).map(function (line) {
return line.trim();
});
var stackLines = stackSteps.map(function (line) {
- var stack; // Get stack trace URL
+ var stack;
+ // Get stack trace URL
// in Firefox stack trace looks like this: advanceTaskQueue@http://127.0.0.1:8080/scriptlets/tests/dist/qunit.js:1834:20
// in Chrome like this: at Assert.throws (http://127.0.0.1:8080/scriptlets/tests/dist/qunit.js:3178:16)
// so, first group "(.*?@)" is required for Firefox, second group contains URL
-
var getStackTraceURL = /(.*?@)?(\S+)(:\d+):\d+\)?$/.exec(line);
-
if (getStackTraceURL) {
var stackURL = getStackTraceURL[2];
-
- if (startsWith(stackURL, '(')) {
+ if (startsWith$1(stackURL, '(')) {
stackURL = stackURL.slice(1);
}
-
- if (startsWith(stackURL, INJECTED_SCRIPT_MARKER)) {
+ if (startsWith$1(stackURL, INJECTED_SCRIPT_MARKER)) {
stackURL = INJECTED_SCRIPT_STRING;
var stackFunction = getStackTraceURL[1] !== undefined ? getStackTraceURL[1].slice(0, -1) : line.slice(0, getStackTraceURL.index).trim();
-
- if (startsWith(stackFunction, 'at')) {
+ if (startsWith$1(stackFunction, 'at')) {
stackFunction = stackFunction.slice(2).trim();
}
-
stack = "".concat(stackFunction, " ").concat(stackURL).trim();
} else {
stack = stackURL;
@@ -1245,22 +1148,18 @@
} else {
stack = line;
}
-
return stack;
});
-
if (stackLines) {
for (var index = 0; index < stackLines.length; index += 1) {
if (isInlineScript(stackMatch) && documentURL === stackLines[index]) {
return true;
}
-
- if (isInjectedScript(stackMatch) && startsWith(stackLines[index], INJECTED_SCRIPT_STRING)) {
+ if (isInjectedScript(stackMatch) && startsWith$1(stackLines[index], INJECTED_SCRIPT_STRING)) {
return true;
}
}
}
-
return false;
};
@@ -1269,13 +1168,12 @@
* @param {HTMLElement} rootElement
* @returns {HTMLElement[]} shadow-dom hosts
*/
-
var findHostElements = function findHostElements(rootElement) {
- var hosts = []; // Element.querySelectorAll() returns list of elements
+ var hosts = [];
+ // Element.querySelectorAll() returns list of elements
// which are defined in DOM of Element.
// Meanwhile, inner DOM of the element with shadowRoot property
// is absolutely another DOM and which can not be reached by querySelectorAll('*')
-
var domElems = rootElement.querySelectorAll('*');
domElems.forEach(function (el) {
if (el.shadowRoot) {
@@ -1284,6 +1182,7 @@
});
return hosts;
};
+
/**
* A collection of nodes.
*
@@ -1305,23 +1204,25 @@
* @param {HTMLElement[]|external:NodeList} hostElements
* @returns {PierceData}
*/
-
var pierceShadowDom = function pierceShadowDom(selector, hostElements) {
var targets = [];
- var innerHostsAcc = []; // it's possible to get a few hostElements found by baseSelector on the page
+ var innerHostsAcc = [];
+ // it's possible to get a few hostElements found by baseSelector on the page
hostElements.forEach(function (host) {
// check presence of selector element inside base element if it's not in shadow-dom
var simpleElems = host.querySelectorAll(selector);
targets = targets.concat([].slice.call(simpleElems));
var shadowRootElem = host.shadowRoot;
var shadowChildren = shadowRootElem.querySelectorAll(selector);
- targets = targets.concat([].slice.call(shadowChildren)); // find inner shadow-dom hosts inside processing shadow-dom
+ targets = targets.concat([].slice.call(shadowChildren));
+ // find inner shadow-dom hosts inside processing shadow-dom
innerHostsAcc.push(findHostElements(shadowRootElem));
- }); // if there were more than one host element,
- // innerHostsAcc is an array of arrays and should be flatten
+ });
+ // if there were more than one host element,
+ // innerHostsAcc is an array of arrays and should be flatten
var innerHosts = flatten(innerHostsAcc);
return {
targets: targets,
@@ -1334,13 +1235,14 @@
* @param {*} callback
* @returns {boolean}
*/
-
var isValidCallback = function isValidCallback(callback) {
- return callback instanceof Function // passing string as 'code' arg is not recommended
+ return callback instanceof Function
+ // passing string as 'code' arg is not recommended
// but it is possible and not restricted
// https://developer.mozilla.org/en-US/docs/Web/API/setTimeout#parameters
|| typeof callback === 'string';
};
+
/**
* Checks whether 'callback' and 'delay' are matching
* by given parameters 'matchCallback' and 'matchDelay'.
@@ -1348,36 +1250,29 @@
* @param {Object} { callback, delay, matchCallback, matchDelay }
* @returns {boolean}
*/
-
var isPreventionNeeded = function isPreventionNeeded(_ref) {
var callback = _ref.callback,
- delay = _ref.delay,
- matchCallback = _ref.matchCallback,
- matchDelay = _ref.matchDelay;
-
+ delay = _ref.delay,
+ matchCallback = _ref.matchCallback,
+ matchDelay = _ref.matchDelay;
// if callback is has not valid type
// scriptlet can not prevent it
// so no need for more checking and do not call hit() later
if (!isValidCallback(callback)) {
return false;
}
-
if (!isValidMatchStr(matchCallback) || matchDelay && !isValidMatchNumber(matchDelay)) {
return false;
}
-
var _parseMatchArg = parseMatchArg(matchCallback),
- isInvertedMatch = _parseMatchArg.isInvertedMatch,
- matchRegexp = _parseMatchArg.matchRegexp;
-
+ isInvertedMatch = _parseMatchArg.isInvertedMatch,
+ matchRegexp = _parseMatchArg.matchRegexp;
var _parseDelayArg = parseDelayArg(matchDelay),
- isInvertedDelayMatch = _parseDelayArg.isInvertedDelayMatch,
- delayMatch = _parseDelayArg.delayMatch;
-
- var shouldPrevent = false; // https://github.com/AdguardTeam/Scriptlets/issues/105
-
+ isInvertedDelayMatch = _parseDelayArg.isInvertedDelayMatch,
+ delayMatch = _parseDelayArg.delayMatch;
+ var shouldPrevent = false;
+ // https://github.com/AdguardTeam/Scriptlets/issues/105
var callbackStr = String(callback);
-
if (delayMatch === null) {
shouldPrevent = matchRegexp.test(callbackStr) !== isInvertedMatch;
} else if (!matchCallback) {
@@ -1385,13 +1280,12 @@
} else {
shouldPrevent = matchRegexp.test(callbackStr) !== isInvertedMatch && delay === delayMatch !== isInvertedDelayMatch;
}
-
return shouldPrevent;
};
var handleOldReplacement = function handleOldReplacement(replacement) {
- var result; // defaults to return noopFunc instead of window.open
-
+ var result;
+ // defaults to return noopFunc instead of window.open
if (!replacement) {
result = noopFunc;
} else if (replacement === 'trueFunc') {
@@ -1400,20 +1294,17 @@
// We should return noopFunc instead of window.open
// but with some property if website checks it (examples 5, 6)
// https://github.com/AdguardTeam/Scriptlets/issues/71
- var isProp = startsWith(replacement, '{') && endsWith(replacement, '}');
-
+ var isProp = startsWith$1(replacement, '{') && endsWith(replacement, '}');
if (isProp) {
var propertyPart = replacement.slice(1, -1);
var propertyName = substringBefore(propertyPart, '=');
var propertyValue = substringAfter$1(propertyPart, '=');
-
if (propertyValue === 'noopFunc') {
result = {};
result[propertyName] = noopFunc;
}
}
}
-
return result;
};
var createDecoy = function createDecoy(args) {
@@ -1422,11 +1313,10 @@
var IFRAME_TAG_NAME = 'iframe';
var IFRAME_URL_PROP_NAME = 'src';
var replacement = args.replacement,
- url = args.url,
- delay = args.delay;
+ url = args.url,
+ delay = args.delay;
var tag;
var urlProp;
-
if (replacement === 'obj') {
tag = OBJECT_TAG_NAME;
urlProp = OBJECT_URL_PROP_NAME;
@@ -1434,7 +1324,6 @@
tag = IFRAME_TAG_NAME;
urlProp = IFRAME_URL_PROP_NAME;
}
-
var decoy = document.createElement(tag);
decoy[urlProp] = url;
decoy.style.setProperty('height', '1px', 'important');
@@ -1452,14 +1341,11 @@
if (prop && prop === 'closed') {
return false;
}
-
if (typeof nativeGetter === 'function') {
return noopFunc;
}
-
return prop && target[prop];
};
-
return preventGetter;
};
@@ -1472,19 +1358,17 @@
* Includes common 'url' and 'method' props and all other fetch-specific props
* @returns {string[]}
*/
-
- var getRequestProps$1 = function getRequestProps() {
+ var getRequestProps = function getRequestProps() {
return ['url', 'method', 'headers', 'body', 'mode', 'credentials', 'cache', 'redirect', 'referrer', 'referrerPolicy', 'integrity', 'keepalive', 'signal'];
};
+
/**
* Collects Request options to object
* @param {Request} request
* @returns {Object} data object
*/
-
-
var getRequestData = function getRequestData(request) {
- var requestInitOptions = getRequestProps$1();
+ var requestInitOptions = getRequestProps();
var entries = requestInitOptions.map(function (key) {
// if request has no such option, value will be undefined
var value = request[key];
@@ -1492,17 +1376,16 @@
});
return getObjectFromEntries(entries);
};
+
/**
* Collects fetch args to object
* @param {*} args fetch args
* @returns {Object} data object
*/
-
var getFetchData = function getFetchData(args) {
var fetchPropsObj = {};
var fetchUrl;
var fetchInit;
-
if (args[0] instanceof Request) {
// if Request passed to fetch, it will be in array
var requestData = getRequestData(args[0]);
@@ -1510,20 +1393,18 @@
fetchInit = requestData;
} else {
fetchUrl = args[0]; // eslint-disable-line prefer-destructuring
-
fetchInit = args[1]; // eslint-disable-line prefer-destructuring
}
fetchPropsObj.url = fetchUrl;
-
if (fetchInit instanceof Object) {
Object.keys(fetchInit).forEach(function (prop) {
fetchPropsObj[prop] = fetchInit[prop];
});
}
-
return fetchPropsObj;
};
+
/**
* Collect xhr.open arguments to object
* @param {string} method
@@ -1533,7 +1414,6 @@
* @param {string} password
* @returns {Object}
*/
-
var getXhrData = function getXhrData(method, url, async, user, password) {
return {
method: method,
@@ -1543,24 +1423,23 @@
password: password
};
};
+
/**
* Parse propsToMatch input string into object;
* used for prevent-fetch and prevent-xhr
* @param {string} propsToMatchStr
* @returns {Object} object where 'key' is prop name and 'value' is prop value
*/
-
var parseMatchProps = function parseMatchProps(propsToMatchStr) {
var PROPS_DIVIDER = ' ';
var PAIRS_MARKER = ':';
- var LEGAL_MATCH_PROPS = getRequestProps$1();
+ var LEGAL_MATCH_PROPS = getRequestProps();
var propsObj = {};
var props = propsToMatchStr.split(PROPS_DIVIDER);
props.forEach(function (prop) {
var dividerInd = prop.indexOf(PAIRS_MARKER);
var key = prop.slice(0, dividerInd);
var hasLegalMatchProp = LEGAL_MATCH_PROPS.indexOf(key) !== -1;
-
if (hasLegalMatchProp) {
var value = prop.slice(dividerInd + 1);
propsObj[key] = value;
@@ -1573,23 +1452,23 @@
});
return propsObj;
};
+
/**
* Validates parsed data values
* @param {Object} data
* @returns {boolean}
*/
-
var validateParsedData = function validateParsedData(data) {
return Object.values(data).every(function (value) {
return isValidStrPattern(value);
});
};
+
/**
* Converts valid parsed data to data obj for further matching
* @param {Object} data
* @returns {Object}
*/
-
var getMatchPropsData = function getMatchPropsData(data) {
var matchData = {};
Object.keys(data).forEach(function (key) {
@@ -1598,6 +1477,27 @@
return matchData;
};
+ /**
+ * @typedef { import('../scriptlets/index').Source } Source
+ */
+
+ /**
+ * Conditionally logs message to console.
+ * Convention is to log messages by source.verbose if such log
+ * is not a part of scriptlet's functionality, eg on invalid input,
+ * and use 'forced' argument otherwise.
+ * @param {Source} source required
+ * @param {string} message required, message to log
+ * @param {boolean} [forced=false] to log message unconditionally
+ */
+ var logMessage = function logMessage(source, message) {
+ var forced = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;
+ if (forced || source.verbose) {
+ // eslint-disable-next-line no-console
+ console.log("".concat(source.name, ": ").concat(message));
+ }
+ };
+
/**
* @typedef { import('../scriptlets/index').Source } Source
*/
@@ -1610,7 +1510,6 @@
* @param {string} value
* @param {boolean} shouldLog determines if helper should log on a failed set attempt
*/
-
var setStorageItem = function setStorageItem(source, storage, key, value) {
// setItem() may throw an exception if the storage is full.
try {
@@ -1620,21 +1519,17 @@
logMessage(source, message);
}
};
+
/**
* Gets supported storage item value
- * @param {Source} source
* @param {string} value input item value
- * @param {boolean} verbose if logging invalid values is required
* @returns {string|null|undefined|boolean} valid item value if ok OR null if not
*/
-
- var getLimitedStorageItemValue = function getLimitedStorageItemValue(source, value) {
- if (!value) {
- return null;
+ var getLimitedStorageItemValue = function getLimitedStorageItemValue(value) {
+ if (typeof value !== 'string') {
+ throw new Error('Invalid value');
}
-
var validValue;
-
if (value === 'undefined') {
validValue = undefined;
} else if (value === 'false') {
@@ -1651,24 +1546,19 @@
validValue = '';
} else if (/^\d+$/.test(value)) {
validValue = parseFloat(value);
-
if (nativeIsNaN(validValue)) {
- logMessage(source, "Invalid storage item value: '".concat(value, "'"));
- return null;
+ throw new Error('Invalid value');
}
-
if (Math.abs(validValue) > 0x7FFF) {
- logMessage(source, "Invalid storage item value: '".concat(value, "'"));
- return null;
+ throw new Error('Invalid value');
}
} else if (value === 'yes') {
validValue = 'yes';
} else if (value === 'no') {
validValue = 'no';
} else {
- return null;
+ throw new Error('Invalid value');
}
-
return validValue;
};
@@ -1685,24 +1575,21 @@
if (typeof error === 'string' && error.indexOf(rid) !== -1) {
return true;
}
-
if (nativeOnError instanceof Function) {
for (var _len = arguments.length, args = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {
args[_key - 1] = arguments[_key];
}
-
return nativeOnError.apply(this, [error].concat(args));
}
-
return false;
};
}
/**
- * Generate random six symbols id
+ * Generate random seven symbols id
*/
function randomId() {
- return Math.random().toString(36).substr(2, 9);
+ return Math.random().toString(36).slice(2, 9);
}
/**
@@ -1715,29 +1602,27 @@
*
* @return {Object}
*/
-
function getDescriptorAddon() {
return {
isAbortingSuspended: false,
isolateCallback: function isolateCallback(cb) {
- this.isAbortingSuspended = true; // try...catch is required in case if there are more than one inline scripts
+ this.isAbortingSuspended = true;
+ // try...catch is required in case if there are more than one inline scripts
// which should be aborted.
// so after the first successful abortion, `cb(...args);` will throw error,
// and we should not stop on that and continue to abort other scripts
-
try {
for (var _len = arguments.length, args = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {
args[_key - 1] = arguments[_key];
}
-
var result = cb.apply(void 0, args);
this.isAbortingSuspended = false;
return result;
} catch (_unused) {
var rid = randomId();
- this.isAbortingSuspended = false; // It's necessary to throw error
+ this.isAbortingSuspended = false;
+ // It's necessary to throw error
// otherwise script will be not aborted
-
throw new ReferenceError(rid);
}
}
@@ -1762,19 +1647,17 @@
* @param {string} chain
* @returns {Chain}
*/
-
function getPropertyInChain(base, chain) {
var pos = chain.indexOf('.');
-
if (pos === -1) {
return {
base: base,
prop: chain
};
}
+ var prop = chain.slice(0, pos);
- var prop = chain.slice(0, pos); // https://github.com/AdguardTeam/Scriptlets/issues/128
-
+ // https://github.com/AdguardTeam/Scriptlets/issues/128
if (base === null) {
// if base is null, return 'null' as base.
// it's needed for triggering the reason logging while debugging
@@ -1784,10 +1667,8 @@
chain: chain
};
}
-
var nextBase = base[prop];
chain = chain.slice(pos + 1);
-
if ((base instanceof Object || typeof base === 'object') && isEmptyObject(base)) {
// for empty objects in chain
return {
@@ -1796,7 +1677,6 @@
chain: chain
};
}
-
if (nextBase === null) {
return {
base: base,
@@ -1804,11 +1684,9 @@
chain: chain
};
}
-
if (nextBase !== undefined) {
return getPropertyInChain(nextBase, chain);
}
-
Object.defineProperty(base, prop, {
configurable: true
});
@@ -1842,7 +1720,6 @@
var lookThrough = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;
var output = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : [];
var pos = chain.indexOf('.');
-
if (pos === -1) {
// for paths like 'a.b.*' every final nested prop should be processed
if (chain === '*' || chain === '[]') {
@@ -1862,95 +1739,71 @@
prop: chain
});
}
-
return output;
}
-
var prop = chain.slice(0, pos);
var shouldLookThrough = prop === '[]' && Array.isArray(base) || prop === '*' && base instanceof Object;
-
if (shouldLookThrough) {
var nextProp = chain.slice(pos + 1);
- var baseKeys = Object.keys(base); // if there is a wildcard prop in input chain (e.g. 'ad.*.src' for 'ad.0.src ad.1.src'),
- // each one of base keys should be considered as a potential chain prop in final path
+ var baseKeys = Object.keys(base);
+ // if there is a wildcard prop in input chain (e.g. 'ad.*.src' for 'ad.0.src ad.1.src'),
+ // each one of base keys should be considered as a potential chain prop in final path
baseKeys.forEach(function (key) {
var item = base[key];
getWildcardPropertyInChain(item, nextProp, lookThrough, output);
});
}
-
var nextBase = base[prop];
chain = chain.slice(pos + 1);
-
if (nextBase !== undefined) {
getWildcardPropertyInChain(nextBase, chain, lookThrough, output);
}
-
return output;
}
/* eslint-disable no-console, no-underscore-dangle */
-
/**
* Hit used only for debug purposes now
* @param {Source} source
- * @param {string} [message] - optional message;
* use LOG_MARKER = 'log: ' at the start of a message
* for logging scriptlets
*/
- var hit = function hit(source, message) {
+ var hit = function hit(source) {
if (source.verbose !== true) {
return;
}
-
try {
var log = console.log.bind(console);
var trace = console.trace.bind(console); // eslint-disable-line compat/compat
var prefix = source.ruleText || '';
-
if (source.domainName) {
var AG_SCRIPTLET_MARKER = '#%#//';
var UBO_SCRIPTLET_MARKER = '##+js';
var ruleStartIndex;
-
if (source.ruleText.indexOf(AG_SCRIPTLET_MARKER) > -1) {
ruleStartIndex = source.ruleText.indexOf(AG_SCRIPTLET_MARKER);
} else if (source.ruleText.indexOf(UBO_SCRIPTLET_MARKER) > -1) {
ruleStartIndex = source.ruleText.indexOf(UBO_SCRIPTLET_MARKER);
- } // delete all domains from ruleText and leave just rule part
-
-
- var rulePart = source.ruleText.slice(ruleStartIndex); // prepare applied scriptlet rule for specific domain
-
- prefix = "".concat(source.domainName).concat(rulePart);
- } // Used to check if scriptlet uses 'hit' function for logging
-
-
- var LOG_MARKER = 'log: ';
-
- if (message) {
- if (message.indexOf(LOG_MARKER) === -1) {
- log("".concat(prefix, " message:\n").concat(message));
- } else {
- log(message.slice(LOG_MARKER.length));
}
+ // delete all domains from ruleText and leave just rule part
+ var rulePart = source.ruleText.slice(ruleStartIndex);
+ // prepare applied scriptlet rule for specific domain
+ prefix = "".concat(source.domainName).concat(rulePart);
}
-
log("".concat(prefix, " trace start"));
-
if (trace) {
trace();
}
-
log("".concat(prefix, " trace end"));
- } catch (e) {// try catch for Edge 15
+ } catch (e) {
+ // try catch for Edge 15
// In according to this issue https://developer.microsoft.com/en-us/microsoft-edge/platform/issues/14495220/
// console.log throws an error
- } // This is necessary for unit-tests only!
-
+ }
+ // This is necessary for unit-tests only!
if (typeof window.__debug === 'function') {
window.__debug(source);
}
@@ -1969,27 +1822,23 @@
* @param {Object} requestData object with standard properties of fetch/xhr like url, method etc
* @returns {boolean}
*/
-
var matchRequestProps = function matchRequestProps(source, propsToMatch, requestData) {
if (propsToMatch === '' || propsToMatch === '*') {
return true;
}
-
var isMatched;
var parsedData = parseMatchProps(propsToMatch);
-
if (!validateParsedData(parsedData)) {
logMessage(source, "Invalid parameter: ".concat(propsToMatch));
isMatched = false;
} else {
- var matchData = getMatchPropsData(parsedData); // prevent only if all props match
-
+ var matchData = getMatchPropsData(parsedData);
+ // prevent only if all props match
isMatched = Object.keys(matchData).every(function (matchKey) {
var matchValue = matchData[matchKey];
return Object.prototype.hasOwnProperty.call(requestData, matchKey) && matchValue.test(requestData[matchKey]);
});
}
-
return isMatched;
};
@@ -2000,16 +1849,13 @@
* @param {string} stackTrace - script error stack trace
* @returns {boolean}
*/
-
var matchStackTrace = function matchStackTrace(stackMatch, stackTrace) {
if (!stackMatch || stackMatch === '') {
return true;
}
-
- if (shouldAbortInlineOrInjectedScript$1(stackMatch, stackTrace)) {
+ if (shouldAbortInlineOrInjectedScript(stackMatch, stackTrace)) {
return true;
}
-
var stackRegexp = toRegExp(stackMatch);
var refinedStackTrace = stackTrace.split('\n').slice(2) // get rid of our own functions in the stack trace
.map(function (line) {
@@ -2028,29 +1874,24 @@
var throttle = function throttle(cb, delay) {
var wait = false;
var savedArgs;
-
var wrapper = function wrapper() {
for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
args[_key] = arguments[_key];
}
-
if (wait) {
savedArgs = args;
return;
}
-
cb.apply(void 0, args);
wait = true;
setTimeout(function () {
wait = false;
-
if (savedArgs) {
wrapper(savedArgs);
savedArgs = null;
}
}, delay);
};
-
return wrapper;
};
@@ -2059,11 +1900,9 @@
* @param {Function} callback
* @param {boolean} observeAttrs - optional parameter - should observer check attributes changes
*/
-
var observeDOMChanges = function observeDOMChanges(callback) {
var observeAttrs = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;
var attrsToObserve = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : [];
-
/**
* 'delay' in milliseconds for 'throttle' method
*/
@@ -2072,9 +1911,7 @@
* Used for remove-class
*/
// eslint-disable-next-line no-use-before-define, compat/compat
-
var observer = new MutationObserver(throttle(callbackWrapper, THROTTLE_DELAY_MS));
-
var connect = function connect() {
if (attrsToObserve.length > 0) {
observer.observe(document.documentElement, {
@@ -2091,17 +1928,14 @@
});
}
};
-
var disconnect = function disconnect() {
observer.disconnect();
};
-
function callbackWrapper() {
disconnect();
callback();
connect();
}
-
connect();
};
@@ -2132,6 +1966,11 @@
/**
* Modifies passed keyword value according to its purpose.
* Returns initial value if it's not a keyword.
+ *
+ * Supported keywords:
+ * - '$now$' - returns current time in ms, e.g 1667915146503
+ * - '$currentDate$' - returns current date e.g 'Tue Nov 08 2022 13:53:19 GMT+0300'
+ *
* @param {string} rawValue
* @returns {string}
*/
@@ -2139,7 +1978,6 @@
var NOW_VALUE_KEYWORD = '$now$';
var CURRENT_DATE_KEYWORD = '$currentDate$';
var parsedValue = rawValue;
-
if (rawValue === NOW_VALUE_KEYWORD) {
// Set to current time in ms, e.g 1667915146503
parsedValue = Date.now().toString();
@@ -2147,12 +1985,10 @@
// Set to current date e.g 'Tue Nov 08 2022 13:53:19 GMT+0300'
parsedValue = Date();
}
-
return parsedValue;
};
/* eslint-disable max-len */
-
/**
* @trustedScriptlet trusted-click-element
*
@@ -2184,7 +2020,7 @@
*
* 3. Click multiple elements by selector with a delay
* ```
- * example.com#%#//scriptlet('trusted-click-element', 'button[name="agree"], button[name='check"], input[type="submit"][value="akkoord"]', '', '500')
+ * example.com#%#//scriptlet('trusted-click-element', 'button[name="agree"], button[name="check"], input[type="submit"][value="akkoord"]', '', '500')
* ```
*
* 4. Match cookies by keys using regex and string
@@ -2207,31 +2043,25 @@
* example.com#%#//scriptlet('trusted-click-element', 'button[name="agree"], input[type="submit"][value="akkoord"]', 'cookie:cmpconsent, localStorage:promo', '250')
* ```
*/
-
/* eslint-enable max-len */
-
function trustedClickElement$1(source, selectors) {
var extraMatch = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : '';
var delay = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : NaN;
-
if (!selectors) {
return;
}
-
var OBSERVER_TIMEOUT_MS = 10000;
var THROTTLE_DELAY_MS = 20;
var COOKIE_MATCH_MARKER = 'cookie:';
var LOCAL_STORAGE_MATCH_MARKER = 'localStorage:';
var SELECTORS_DELIMITER = ',';
- var COOKIE_STRING_DELIMITER = ';'; // Regex to split match pairs by commas, avoiding the ones included in regexes
-
+ var COOKIE_STRING_DELIMITER = ';';
+ // Regex to split match pairs by commas, avoiding the ones included in regexes
var EXTRA_MATCH_DELIMITER = /(,\s*){1}(?=cookie:|localStorage:)/;
var parsedDelay;
-
if (delay) {
parsedDelay = parseInt(delay, 10);
var isValidDelay = !Number.isNaN(parsedDelay) || parsedDelay < OBSERVER_TIMEOUT_MS;
-
if (!isValidDelay) {
// eslint-disable-next-line max-len
var message = "Passed delay '".concat(delay, "' is invalid or bigger than ").concat(OBSERVER_TIMEOUT_MS, " ms");
@@ -2239,39 +2069,34 @@
return;
}
}
-
var canClick = !parsedDelay;
var cookieMatches = [];
var localStorageMatches = [];
-
if (extraMatch) {
// Get all match marker:value pairs from argument
var parsedExtraMatch = extraMatch.split(EXTRA_MATCH_DELIMITER).map(function (matchStr) {
return matchStr.trim();
- }); // Filter match pairs by marker
+ });
+ // Filter match pairs by marker
parsedExtraMatch.forEach(function (matchStr) {
if (matchStr.indexOf(COOKIE_MATCH_MARKER) > -1) {
var cookieMatch = matchStr.replace(COOKIE_MATCH_MARKER, '');
cookieMatches.push(cookieMatch);
}
-
if (matchStr.indexOf(LOCAL_STORAGE_MATCH_MARKER) > -1) {
var localStorageMatch = matchStr.replace(LOCAL_STORAGE_MATCH_MARKER, '');
localStorageMatches.push(localStorageMatch);
}
});
}
-
if (cookieMatches.length > 0) {
var parsedCookieMatches = parseCookieString(cookieMatches.join(COOKIE_STRING_DELIMITER));
var parsedCookies = parseCookieString(document.cookie);
var cookieKeys = Object.keys(parsedCookies);
-
if (cookieKeys.length === 0) {
return;
}
-
var cookiesMatched = Object.keys(parsedCookieMatches).every(function (key) {
// Avoid getting /.?/ result from toRegExp on undefined
// as cookie may be set without value,
@@ -2280,35 +2105,31 @@
var keyMatch = toRegExp(key);
return cookieKeys.some(function (key) {
var keysMatched = keyMatch.test(key);
-
if (!keysMatched) {
return false;
- } // Key matching is enough if cookie value match is not specified
-
+ }
+ // Key matching is enough if cookie value match is not specified
if (!valueMatch) {
return true;
}
-
return valueMatch.test(parsedCookies[key]);
});
});
-
if (!cookiesMatched) {
return;
}
}
-
if (localStorageMatches.length > 0) {
var localStorageMatched = localStorageMatches.every(function (str) {
var itemValue = window.localStorage.getItem(str);
return itemValue || itemValue === '';
});
-
if (!localStorageMatched) {
return;
}
}
+
/**
* Create selectors array and swap selectors to null on finding it's element
*
@@ -2317,60 +2138,52 @@
* - always know on what index corresponding element should be put
* - prevent selectors from being queried multiple times
*/
-
-
var selectorsSequence = selectors.split(SELECTORS_DELIMITER).map(function (selector) {
return selector.trim();
});
-
var createElementObj = function createElementObj(element) {
return {
element: element || null,
clicked: false
};
};
-
var elementsSequence = Array(selectorsSequence.length).fill(createElementObj());
+
/**
* Go through elementsSequence from left to right, clicking on found elements
*
* Element should not be clicked if it is already clicked,
* or a previous element is not found or clicked yet
*/
-
var clickElementsBySequence = function clickElementsBySequence() {
for (var i = 0; i < elementsSequence.length; i += 1) {
- var elementObj = elementsSequence[i]; // Stop clicking if that pos element is not found yet
-
+ var elementObj = elementsSequence[i];
+ // Stop clicking if that pos element is not found yet
if (!elementObj.element) {
break;
- } // Skip already clicked elements
-
-
+ }
+ // Skip already clicked elements
if (!elementObj.clicked) {
elementObj.element.click();
elementObj.clicked = true;
}
}
-
var allElementsClicked = elementsSequence.every(function (elementObj) {
return elementObj.clicked === true;
});
-
if (allElementsClicked) {
// At this stage observer is already disconnected
hit(source);
}
};
-
var handleElement = function handleElement(element, i) {
var elementObj = createElementObj(element);
elementsSequence[i] = elementObj;
-
if (canClick) {
clickElementsBySequence();
}
};
+
/**
* Query all selectors from queue on each mutation
* Each selector is swapped to null in selectorsSequence on founding corresponding element
@@ -2379,46 +2192,41 @@
* when delay is getting off after the last mutation took place.
*
*/
-
-
var findElements = function findElements(mutations, observer) {
var fulfilledSelectors = [];
selectorsSequence.forEach(function (selector, i) {
if (!selector) {
return;
}
-
var element = document.querySelector(selector);
-
if (!element) {
return;
}
-
handleElement(element, i);
fulfilledSelectors.push(selector);
- }); // selectorsSequence should be modified after the loop to not break loop indexation
+ });
+ // selectorsSequence should be modified after the loop to not break loop indexation
selectorsSequence = selectorsSequence.map(function (selector) {
return fulfilledSelectors.indexOf(selector) === -1 ? selector : null;
- }); // Disconnect observer after finding all elements
+ });
+ // Disconnect observer after finding all elements
var allSelectorsFulfilled = selectorsSequence.every(function (selector) {
return selector === null;
});
-
if (allSelectorsFulfilled) {
observer.disconnect();
}
- }; // eslint-disable-next-line compat/compat
-
+ };
+ // eslint-disable-next-line compat/compat
var observer = new MutationObserver(throttle(findElements, THROTTLE_DELAY_MS));
observer.observe(document.documentElement, {
attributes: true,
childList: true,
subtree: true
});
-
if (parsedDelay) {
setTimeout(function () {
// Click previously collected elements
@@ -2426,17 +2234,17 @@
canClick = true;
}, parsedDelay);
}
-
setTimeout(function () {
return observer.disconnect();
}, OBSERVER_TIMEOUT_MS);
}
- trustedClickElement$1.names = ['trusted-click-element' // trusted scriptlets support no aliases
+ trustedClickElement$1.names = ['trusted-click-element'
+ // trusted scriptlets support no aliases
];
+
trustedClickElement$1.injections = [hit, toRegExp, parseCookieString, throttle, logMessage];
/* eslint-disable max-len */
-
/**
* @scriptlet abort-on-property-read
*
@@ -2465,36 +2273,28 @@
* example.org#%#//scriptlet('abort-on-property-read', 'navigator.language')
* ```
*/
-
/* eslint-enable max-len */
-
function abortOnPropertyRead$1(source, property) {
if (!property) {
return;
}
-
var rid = randomId();
-
var abort = function abort() {
hit(source);
throw new ReferenceError(rid);
};
-
var setChainPropAccess = function setChainPropAccess(owner, property) {
var chainInfo = getPropertyInChain(owner, property);
var base = chainInfo.base;
var prop = chainInfo.prop,
- chain = chainInfo.chain;
-
+ chain = chainInfo.chain;
if (chain) {
var setter = function setter(a) {
base = a;
-
if (a instanceof Object) {
setChainPropAccess(a, chain);
}
};
-
Object.defineProperty(owner, prop, {
get: function get() {
return base;
@@ -2503,22 +2303,20 @@
});
return;
}
-
setPropertyAccess(base, prop, {
get: abort,
set: function set() {}
});
};
-
setChainPropAccess(window, property);
window.onerror = createOnErrorHandler(rid).bind();
}
- abortOnPropertyRead$1.names = ['abort-on-property-read', // aliases are needed for matching the related scriptlet converted into our syntax
+ abortOnPropertyRead$1.names = ['abort-on-property-read',
+ // aliases are needed for matching the related scriptlet converted into our syntax
'abort-on-property-read.js', 'ubo-abort-on-property-read.js', 'aopr.js', 'ubo-aopr.js', 'ubo-abort-on-property-read', 'ubo-aopr', 'abp-abort-on-property-read'];
abortOnPropertyRead$1.injections = [randomId, setPropertyAccess, getPropertyInChain, createOnErrorHandler, hit, isEmptyObject];
/* eslint-disable max-len */
-
/**
* @scriptlet abort-on-property-write
*
@@ -2544,36 +2342,28 @@
* example.org#%#//scriptlet('abort-on-property-write', 'adblock')
* ```
*/
-
/* eslint-enable max-len */
-
function abortOnPropertyWrite$1(source, property) {
if (!property) {
return;
}
-
var rid = randomId();
-
var abort = function abort() {
hit(source);
throw new ReferenceError(rid);
};
-
var setChainPropAccess = function setChainPropAccess(owner, property) {
var chainInfo = getPropertyInChain(owner, property);
var base = chainInfo.base;
var prop = chainInfo.prop,
- chain = chainInfo.chain;
-
+ chain = chainInfo.chain;
if (chain) {
var setter = function setter(a) {
base = a;
-
if (a instanceof Object) {
setChainPropAccess(a, chain);
}
};
-
Object.defineProperty(owner, prop, {
get: function get() {
return base;
@@ -2582,21 +2372,19 @@
});
return;
}
-
setPropertyAccess(base, prop, {
set: abort
});
};
-
setChainPropAccess(window, property);
window.onerror = createOnErrorHandler(rid).bind();
}
- abortOnPropertyWrite$1.names = ['abort-on-property-write', // aliases are needed for matching the related scriptlet converted into our syntax
+ abortOnPropertyWrite$1.names = ['abort-on-property-write',
+ // aliases are needed for matching the related scriptlet converted into our syntax
'abort-on-property-write.js', 'ubo-abort-on-property-write.js', 'aopw.js', 'ubo-aopw.js', 'ubo-abort-on-property-write', 'ubo-aopw', 'abp-abort-on-property-write'];
abortOnPropertyWrite$1.injections = [randomId, setPropertyAccess, getPropertyInChain, createOnErrorHandler, hit, isEmptyObject];
/* eslint-disable max-len */
-
/**
* @scriptlet prevent-setTimeout
*
@@ -2698,24 +2486,21 @@
* }, 500);
* ```
*/
-
/* eslint-enable max-len */
-
function preventSetTimeout$1(source, matchCallback, matchDelay) {
// if browser does not support Proxy (e.g. Internet Explorer),
// we use none-proxy "legacy" wrapper for preventing
// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Proxy
var isProxySupported = typeof Proxy !== 'undefined';
- var nativeTimeout = window.setTimeout; // logs setTimeouts to console if no arguments have been specified
+ var nativeTimeout = window.setTimeout;
+ // logs setTimeouts to console if no arguments have been specified
var shouldLog = typeof matchCallback === 'undefined' && typeof matchDelay === 'undefined';
-
var legacyTimeoutWrapper = function legacyTimeoutWrapper(callback, delay) {
var shouldPrevent = false;
-
if (shouldLog) {
- hit(source); // https://github.com/AdguardTeam/Scriptlets/issues/105
-
+ hit(source);
+ // https://github.com/AdguardTeam/Scriptlets/issues/105
logMessage(source, "setTimeout(".concat(String(callback), ", ").concat(delay, ")"), true);
} else {
shouldPrevent = isPreventionNeeded({
@@ -2725,27 +2510,22 @@
matchDelay: matchDelay
});
}
-
if (shouldPrevent) {
hit(source);
return nativeTimeout(noopFunc, delay);
}
-
for (var _len = arguments.length, args = new Array(_len > 2 ? _len - 2 : 0), _key = 2; _key < _len; _key++) {
args[_key - 2] = arguments[_key];
}
-
return nativeTimeout.apply(window, [callback, delay].concat(args));
};
-
var handlerWrapper = function handlerWrapper(target, thisArg, args) {
var callback = args[0];
var delay = args[1];
var shouldPrevent = false;
-
if (shouldLog) {
- hit(source); // https://github.com/AdguardTeam/Scriptlets/issues/105
-
+ hit(source);
+ // https://github.com/AdguardTeam/Scriptlets/issues/105
logMessage(source, "setTimeout(".concat(String(callback), ", ").concat(delay, ")"), true);
} else {
shouldPrevent = isPreventionNeeded({
@@ -2755,32 +2535,33 @@
matchDelay: matchDelay
});
}
-
if (shouldPrevent) {
hit(source);
args[0] = noopFunc;
}
-
return target.apply(thisArg, args);
};
-
var setTimeoutHandler = {
apply: handlerWrapper
};
window.setTimeout = isProxySupported ? new Proxy(window.setTimeout, setTimeoutHandler) : legacyTimeoutWrapper;
}
- preventSetTimeout$1.names = ['prevent-setTimeout', // aliases are needed for matching the related scriptlet converted into our syntax
- 'no-setTimeout-if.js', // new implementation of setTimeout-defuser.js
- 'ubo-no-setTimeout-if.js', 'nostif.js', // new short name of no-setTimeout-if
- 'ubo-nostif.js', 'ubo-no-setTimeout-if', 'ubo-nostif', // old scriptlet names which should be supported as well.
+ preventSetTimeout$1.names = ['prevent-setTimeout',
+ // aliases are needed for matching the related scriptlet converted into our syntax
+ 'no-setTimeout-if.js',
+ // new implementation of setTimeout-defuser.js
+ 'ubo-no-setTimeout-if.js', 'nostif.js',
+ // new short name of no-setTimeout-if
+ 'ubo-nostif.js', 'ubo-no-setTimeout-if', 'ubo-nostif',
+ // old scriptlet names which should be supported as well.
// should be removed eventually.
// do not remove until other filter lists maintainers use them
'setTimeout-defuser.js', 'ubo-setTimeout-defuser.js', 'ubo-setTimeout-defuser', 'std.js', 'ubo-std.js', 'ubo-std'];
- preventSetTimeout$1.injections = [hit, noopFunc, isPreventionNeeded, logMessage, // following helpers should be injected as helpers above use them
- parseMatchArg, parseDelayArg, toRegExp, startsWith, nativeIsNaN, isValidCallback, isValidMatchStr, escapeRegExp, isValidStrPattern, nativeIsFinite, isValidMatchNumber];
+ preventSetTimeout$1.injections = [hit, noopFunc, isPreventionNeeded, logMessage,
+ // following helpers should be injected as helpers above use them
+ parseMatchArg, parseDelayArg, toRegExp, startsWith$1, nativeIsNaN, isValidCallback, isValidMatchStr, escapeRegExp, isValidStrPattern, nativeIsFinite, isValidMatchNumber];
/* eslint-disable max-len */
-
/**
* @scriptlet prevent-setInterval
*
@@ -2882,24 +2663,21 @@
* }, 500);
* ```
*/
-
/* eslint-enable max-len */
-
function preventSetInterval$1(source, matchCallback, matchDelay) {
// if browser does not support Proxy (e.g. Internet Explorer),
// we use none-proxy "legacy" wrapper for preventing
// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Proxy
var isProxySupported = typeof Proxy !== 'undefined';
- var nativeInterval = window.setInterval; // logs setIntervals to console if no arguments have been specified
+ var nativeInterval = window.setInterval;
+ // logs setIntervals to console if no arguments have been specified
var shouldLog = typeof matchCallback === 'undefined' && typeof matchDelay === 'undefined';
-
var legacyIntervalWrapper = function legacyIntervalWrapper(callback, delay) {
var shouldPrevent = false;
-
if (shouldLog) {
- hit(source); // https://github.com/AdguardTeam/Scriptlets/issues/105
-
+ hit(source);
+ // https://github.com/AdguardTeam/Scriptlets/issues/105
logMessage(source, "setInterval(".concat(String(callback), ", ").concat(delay, ")"), true);
} else {
shouldPrevent = isPreventionNeeded({
@@ -2909,27 +2687,22 @@
matchDelay: matchDelay
});
}
-
if (shouldPrevent) {
hit(source);
return nativeInterval(noopFunc, delay);
}
-
for (var _len = arguments.length, args = new Array(_len > 2 ? _len - 2 : 0), _key = 2; _key < _len; _key++) {
args[_key - 2] = arguments[_key];
}
-
return nativeInterval.apply(window, [callback, delay].concat(args));
};
-
var handlerWrapper = function handlerWrapper(target, thisArg, args) {
var callback = args[0];
var delay = args[1];
var shouldPrevent = false;
-
if (shouldLog) {
- hit(source); // https://github.com/AdguardTeam/Scriptlets/issues/105
-
+ hit(source);
+ // https://github.com/AdguardTeam/Scriptlets/issues/105
logMessage(source, "setInterval(".concat(String(callback), ", ").concat(delay, ")"), true);
} else {
shouldPrevent = isPreventionNeeded({
@@ -2939,31 +2712,33 @@
matchDelay: matchDelay
});
}
-
if (shouldPrevent) {
hit(source);
args[0] = noopFunc;
}
-
return target.apply(thisArg, args);
};
-
var setIntervalHandler = {
apply: handlerWrapper
};
window.setInterval = isProxySupported ? new Proxy(window.setInterval, setIntervalHandler) : legacyIntervalWrapper;
}
- preventSetInterval$1.names = ['prevent-setInterval', // aliases are needed for matching the related scriptlet converted into our syntax
- 'no-setInterval-if.js', // new implementation of setInterval-defuser.js
- 'ubo-no-setInterval-if.js', 'setInterval-defuser.js', // old name should be supported as well
- 'ubo-setInterval-defuser.js', 'nosiif.js', // new short name of no-setInterval-if
- 'ubo-nosiif.js', 'sid.js', // old short scriptlet name
+ preventSetInterval$1.names = ['prevent-setInterval',
+ // aliases are needed for matching the related scriptlet converted into our syntax
+ 'no-setInterval-if.js',
+ // new implementation of setInterval-defuser.js
+ 'ubo-no-setInterval-if.js', 'setInterval-defuser.js',
+ // old name should be supported as well
+ 'ubo-setInterval-defuser.js', 'nosiif.js',
+ // new short name of no-setInterval-if
+ 'ubo-nosiif.js', 'sid.js',
+ // old short scriptlet name
'ubo-sid.js', 'ubo-no-setInterval-if', 'ubo-setInterval-defuser', 'ubo-nosiif', 'ubo-sid'];
- preventSetInterval$1.injections = [hit, noopFunc, isPreventionNeeded, logMessage, // following helpers should be injected as helpers above use them
- toRegExp, startsWith, nativeIsNaN, parseMatchArg, parseDelayArg, isValidCallback, isValidMatchStr, isValidStrPattern, escapeRegExp, nativeIsFinite, isValidMatchNumber];
+ preventSetInterval$1.injections = [hit, noopFunc, isPreventionNeeded, logMessage,
+ // following helpers should be injected as helpers above use them
+ toRegExp, startsWith$1, nativeIsNaN, parseMatchArg, parseDelayArg, isValidCallback, isValidMatchStr, isValidStrPattern, escapeRegExp, nativeIsFinite, isValidMatchNumber];
/* eslint-disable max-len */
-
/**
* @scriptlet prevent-window-open
*
@@ -3024,9 +2799,7 @@
*
* > For better compatibility with uBO, old syntax is not recommended to use.
*/
-
/* eslint-enable max-len */
-
function preventWindowOpen$1(source) {
var match = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : '*';
var delay = arguments.length > 2 ? arguments[2] : undefined;
@@ -3035,62 +2808,49 @@
// if scriptlet runs without args
var nativeOpen = window.open;
var isNewSyntax = match !== '0' && match !== '1';
-
var oldOpenWrapper = function oldOpenWrapper(str) {
- match = Number(match) > 0; // 'delay' was 'search' prop for matching in old syntax
-
+ match = Number(match) > 0;
+ // 'delay' was 'search' prop for matching in old syntax
for (var _len = arguments.length, args = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {
args[_key - 1] = arguments[_key];
}
-
if (!isValidStrPattern(delay)) {
logMessage(source, "Invalid parameter: ".concat(delay));
return nativeOpen.apply(window, [str].concat(args));
}
-
var searchRegexp = toRegExp(delay);
-
if (match !== searchRegexp.test(str)) {
return nativeOpen.apply(window, [str].concat(args));
}
-
hit(source);
return handleOldReplacement(replacement);
};
-
var newOpenWrapper = function newOpenWrapper(url) {
var shouldLog = replacement && replacement.indexOf('log') > -1;
-
for (var _len2 = arguments.length, args = new Array(_len2 > 1 ? _len2 - 1 : 0), _key2 = 1; _key2 < _len2; _key2++) {
args[_key2 - 1] = arguments[_key2];
}
-
if (shouldLog) {
var argsStr = args && args.length > 0 ? ", ".concat(args.join(', ')) : '';
- var message = "window-open: ".concat(url).concat(argsStr);
+ var message = "".concat(url).concat(argsStr);
logMessage(source, message, true);
hit(source);
}
-
var shouldPrevent = false;
-
if (match === '*') {
shouldPrevent = true;
} else if (isValidMatchStr(match)) {
var _parseMatchArg = parseMatchArg(match),
- isInvertedMatch = _parseMatchArg.isInvertedMatch,
- matchRegexp = _parseMatchArg.matchRegexp;
-
+ isInvertedMatch = _parseMatchArg.isInvertedMatch,
+ matchRegexp = _parseMatchArg.matchRegexp;
shouldPrevent = matchRegexp.test(url) !== isInvertedMatch;
} else {
logMessage(source, "Invalid parameter: ".concat(match));
shouldPrevent = false;
}
-
if (shouldPrevent) {
var parsedDelay = parseInt(delay, 10);
var result;
-
if (nativeIsNaN(parsedDelay)) {
result = noopNull();
} else {
@@ -3101,7 +2861,6 @@
};
var decoy = createDecoy(decoyArgs);
var popup = decoy.contentWindow;
-
if (typeof popup === 'object' && popup !== null) {
Object.defineProperty(popup, 'closed', {
value: false
@@ -3119,27 +2878,24 @@
});
popup = decoy.contentWindow;
}
-
result = popup;
}
-
hit(source);
return result;
}
-
return nativeOpen.apply(window, [url].concat(args));
};
+ window.open = isNewSyntax ? newOpenWrapper : oldOpenWrapper;
- window.open = isNewSyntax ? newOpenWrapper : oldOpenWrapper; // Protect window.open from native code check
-
+ // Protect window.open from native code check
window.open.toString = nativeOpen.toString.bind(nativeOpen);
}
- preventWindowOpen$1.names = ['prevent-window-open', // aliases are needed for matching the related scriptlet converted into our syntax
+ preventWindowOpen$1.names = ['prevent-window-open',
+ // aliases are needed for matching the related scriptlet converted into our syntax
'window.open-defuser.js', 'ubo-window.open-defuser.js', 'ubo-window.open-defuser', 'nowoif.js', 'ubo-nowoif.js', 'ubo-nowoif'];
- preventWindowOpen$1.injections = [hit, isValidStrPattern, escapeRegExp, isValidMatchStr, toRegExp, nativeIsNaN, parseMatchArg, handleOldReplacement, createDecoy, getPreventGetter, noopNull, logMessage, noopFunc, trueFunc, startsWith, endsWith, substringBefore, substringAfter$1];
+ preventWindowOpen$1.injections = [hit, isValidStrPattern, escapeRegExp, isValidMatchStr, toRegExp, nativeIsNaN, parseMatchArg, handleOldReplacement, createDecoy, getPreventGetter, noopNull, logMessage, noopFunc, trueFunc, startsWith$1, endsWith, substringBefore, substringAfter$1];
/* eslint-disable max-len */
-
/**
* @scriptlet abort-current-inline-script
*
@@ -3202,14 +2958,11 @@
*
* ```
*/
-
/* eslint-enable max-len */
-
function abortCurrentInlineScript$1(source, property, search) {
var searchRegexp = toRegExp(search);
var rid = randomId();
var SRC_DATA_MARKER = 'data:text/javascript;base64,';
-
var getCurrentScript = function getCurrentScript() {
if ('currentScript' in document) {
return document.currentScript; // eslint-disable-line compat/compat
@@ -3218,49 +2971,42 @@
var scripts = document.getElementsByTagName('script');
return scripts[scripts.length - 1];
};
-
var ourScript = getCurrentScript();
-
var abort = function abort() {
var scriptEl = getCurrentScript();
-
if (!scriptEl) {
return;
}
+ var content = scriptEl.textContent;
- var content = scriptEl.textContent; // We are using Node.prototype.textContent property descriptor
+ // We are using Node.prototype.textContent property descriptor
// to get the real script content
// even when document.currentScript.textContent is replaced.
// https://github.com/AdguardTeam/Scriptlets/issues/57#issuecomment-593638991
-
try {
var textContentGetter = Object.getOwnPropertyDescriptor(Node.prototype, 'textContent').get;
content = textContentGetter.call(scriptEl);
} catch (e) {} // eslint-disable-line no-empty
- // https://github.com/AdguardTeam/Scriptlets/issues/130
-
- if (content.length === 0 && typeof scriptEl.src !== 'undefined' && startsWith(scriptEl.src, SRC_DATA_MARKER)) {
+ // https://github.com/AdguardTeam/Scriptlets/issues/130
+ if (content.length === 0 && typeof scriptEl.src !== 'undefined' && startsWith$1(scriptEl.src, SRC_DATA_MARKER)) {
var encodedContent = scriptEl.src.slice(SRC_DATA_MARKER.length);
content = window.atob(encodedContent);
}
-
if (scriptEl instanceof HTMLScriptElement && content.length > 0 && scriptEl !== ourScript && searchRegexp.test(content)) {
hit(source);
throw new ReferenceError(rid);
}
};
-
var setChainPropAccess = function setChainPropAccess(owner, property) {
var chainInfo = getPropertyInChain(owner, property);
var base = chainInfo.base;
var prop = chainInfo.prop,
- chain = chainInfo.chain; // The scriptlet might be executed before the chain property has been created
+ chain = chainInfo.chain; // The scriptlet might be executed before the chain property has been created
// (for instance, document.body before the HTML body was loaded).
// In this case we're checking whether the base element exists or not
// and if not, we simply exit without overriding anything.
// e.g. https://github.com/AdguardTeam/Scriptlets/issues/57#issuecomment-575841092
-
if (base instanceof Object === false && base === null) {
var props = property.split('.');
var propIndex = props.indexOf(prop);
@@ -3269,16 +3015,13 @@
logMessage(source, message);
return;
}
-
if (chain) {
var setter = function setter(a) {
base = a;
-
if (a instanceof Object) {
setChainPropAccess(a, chain);
}
};
-
Object.defineProperty(owner, prop, {
get: function get() {
return base;
@@ -3287,33 +3030,27 @@
});
return;
}
-
var currentValue = base[prop];
var origDescriptor = Object.getOwnPropertyDescriptor(base, prop);
-
if (origDescriptor instanceof Object === false || origDescriptor.get instanceof Function === false) {
currentValue = base[prop];
origDescriptor = undefined;
}
-
var descriptorWrapper = Object.assign(getDescriptorAddon(), {
currentValue: currentValue,
get: function get() {
if (!this.isAbortingSuspended) {
this.isolateCallback(abort);
}
-
if (origDescriptor instanceof Object) {
return origDescriptor.get.call(base);
}
-
return this.currentValue;
},
set: function set(newValue) {
if (!this.isAbortingSuspended) {
this.isolateCallback(abort);
}
-
if (origDescriptor instanceof Object) {
origDescriptor.set.call(base, newValue);
} else {
@@ -3331,18 +3068,19 @@
}
});
};
-
setChainPropAccess(window, property);
window.onerror = createOnErrorHandler(rid).bind();
}
- abortCurrentInlineScript$1.names = ['abort-current-inline-script', // aliases are needed for matching the related scriptlet converted into our syntax
- 'abort-current-script.js', 'ubo-abort-current-script.js', 'acs.js', 'ubo-acs.js', // "ubo"-aliases with no "js"-ending
- 'ubo-abort-current-script', 'ubo-acs', // obsolete but supported aliases
+ abortCurrentInlineScript$1.names = ['abort-current-inline-script',
+ // aliases are needed for matching the related scriptlet converted into our syntax
+ 'abort-current-script.js', 'ubo-abort-current-script.js', 'acs.js', 'ubo-acs.js',
+ // "ubo"-aliases with no "js"-ending
+ 'ubo-abort-current-script', 'ubo-acs',
+ // obsolete but supported aliases
'abort-current-inline-script.js', 'ubo-abort-current-inline-script.js', 'acis.js', 'ubo-acis.js', 'ubo-abort-current-inline-script', 'ubo-acis', 'abp-abort-current-inline-script'];
- abortCurrentInlineScript$1.injections = [randomId, setPropertyAccess, getPropertyInChain, toRegExp, startsWith, createOnErrorHandler, hit, logMessage, isEmptyObject, getDescriptorAddon];
+ abortCurrentInlineScript$1.injections = [randomId, setPropertyAccess, getPropertyInChain, toRegExp, startsWith$1, createOnErrorHandler, hit, logMessage, isEmptyObject, getDescriptorAddon];
/* eslint-disable max-len */
-
/**
* @scriptlet set-constant
*
@@ -3409,18 +3147,14 @@
* ✔ document.third() === true // if the condition described above is met
* ```
*/
-
/* eslint-enable max-len */
-
function setConstant$1(source, property, value, stack) {
if (!property || !matchStackTrace(stack, new Error().stack)) {
return;
}
-
var emptyArr = noopArray();
var emptyObj = noopObject();
var constantValue;
-
if (value === 'undefined') {
constantValue = undefined;
} else if (value === 'false') {
@@ -3445,11 +3179,9 @@
constantValue = noopPromiseReject;
} else if (/^\d+$/.test(value)) {
constantValue = parseFloat(value);
-
if (nativeIsNaN(constantValue)) {
return;
}
-
if (Math.abs(constantValue) > 0x7FFF) {
return;
}
@@ -3464,41 +3196,33 @@
} else {
return;
}
-
var canceled = false;
-
var mustCancel = function mustCancel(value) {
if (canceled) {
return canceled;
}
-
canceled = value !== undefined && constantValue !== undefined && typeof value !== typeof constantValue && value !== null;
return canceled;
};
-
var trapProp = function trapProp(base, prop, configurable, handler) {
if (!handler.init(base[prop])) {
return false;
}
-
var origDescriptor = Object.getOwnPropertyDescriptor(base, prop);
- var prevSetter; // This is required to prevent scriptlets overwrite each over
-
+ var prevSetter;
+ // This is required to prevent scriptlets overwrite each over
if (origDescriptor instanceof Object) {
// This check is required to avoid defining non-configurable props
if (!origDescriptor.configurable) {
- var message = "set-constant: property '".concat(prop, "' is not configurable");
+ var message = "Property '".concat(prop, "' is not configurable");
logMessage(source, message);
return false;
}
-
base[prop] = constantValue;
-
if (origDescriptor.set instanceof Function) {
prevSetter = origDescriptor.set;
}
}
-
Object.defineProperty(base, prop, {
configurable: configurable,
get: function get() {
@@ -3508,20 +3232,17 @@
if (prevSetter !== undefined) {
prevSetter(a);
}
-
handler.set(a);
}
});
return true;
};
-
var setChainPropAccess = function setChainPropAccess(owner, property) {
var chainInfo = getPropertyInChain(owner, property);
var base = chainInfo.base;
var prop = chainInfo.prop,
- chain = chainInfo.chain; // Handler method init is used to keep track of factual value
+ chain = chainInfo.chain; // Handler method init is used to keep track of factual value
// and apply mustCancel() check only on end prop
-
var inChainPropHandler = {
factValue: undefined,
init: function init(a) {
@@ -3536,9 +3257,7 @@
if (this.factValue === a) {
return;
}
-
this.factValue = a;
-
if (a instanceof Object) {
setChainPropAccess(a, chain);
}
@@ -3549,7 +3268,6 @@
if (mustCancel(a)) {
return false;
}
-
return true;
},
get: function get() {
@@ -3559,51 +3277,50 @@
if (!mustCancel(a)) {
return;
}
-
constantValue = a;
}
- }; // End prop case
+ };
+ // End prop case
if (!chain) {
var isTrapped = trapProp(base, prop, false, endPropHandler);
-
if (isTrapped) {
hit(source);
}
-
return;
- } // Null prop in chain
-
+ }
+ // Null prop in chain
if (base !== undefined && base[prop] === null) {
trapProp(base, prop, true, inChainPropHandler);
return;
- } // Empty object prop in chain
-
+ }
+ // Empty object prop in chain
if ((base instanceof Object || typeof base === 'object') && isEmptyObject(base)) {
trapProp(base, prop, true, inChainPropHandler);
- } // Defined prop in chain
-
+ }
+ // Defined prop in chain
var propValue = owner[prop];
-
if (propValue instanceof Object || typeof propValue === 'object' && propValue !== null) {
setChainPropAccess(propValue, chain);
- } // Undefined prop in chain
-
+ }
+ // Undefined prop in chain
trapProp(base, prop, true, inChainPropHandler);
};
-
setChainPropAccess(window, property);
}
- setConstant$1.names = ['set-constant', // aliases are needed for matching the related scriptlet converted into our syntax
+ setConstant$1.names = ['set-constant',
+ // aliases are needed for matching the related scriptlet converted into our syntax
'set-constant.js', 'ubo-set-constant.js', 'set.js', 'ubo-set.js', 'ubo-set-constant', 'ubo-set', 'abp-override-property-read'];
- setConstant$1.injections = [hit, logMessage, noopArray, noopObject, noopFunc, trueFunc, falseFunc, noopPromiseReject, noopPromiseResolve, getPropertyInChain, setPropertyAccess, toRegExp, matchStackTrace, nativeIsNaN, isEmptyObject, getNativeRegexpTest];
+ setConstant$1.injections = [hit, logMessage, noopArray, noopObject, noopFunc, trueFunc, falseFunc, noopPromiseReject, noopPromiseResolve, getPropertyInChain, setPropertyAccess, toRegExp, matchStackTrace, nativeIsNaN, isEmptyObject, getNativeRegexpTest,
+ // following helpers should be imported and injected
+ // because they are used by helpers above
+ shouldAbortInlineOrInjectedScript];
/* eslint-disable max-len */
-
/**
* @scriptlet remove-cookie
*
@@ -3636,12 +3353,9 @@
* document.cookie = '__example=randomValue';
* ```
*/
-
/* eslint-enable max-len */
-
function removeCookie$1(source, match) {
var matchRegexp = toRegExp(match);
-
var removeCookieFromHost = function removeCookieFromHost(cookieName, hostName) {
var cookieSpec = "".concat(cookieName, "=");
var domain1 = "; domain=".concat(hostName);
@@ -3656,42 +3370,34 @@
document.cookie = cookieSpec + domain2 + path + expiration;
hit(source);
};
-
var rmCookie = function rmCookie() {
document.cookie.split(';').forEach(function (cookieStr) {
var pos = cookieStr.indexOf('=');
-
if (pos === -1) {
return;
}
-
var cookieName = cookieStr.slice(0, pos).trim();
-
if (!matchRegexp.test(cookieName)) {
return;
}
-
var hostParts = document.location.hostname.split('.');
-
for (var i = 0; i <= hostParts.length - 1; i += 1) {
var hostName = hostParts.slice(i).join('.');
-
if (hostName) {
removeCookieFromHost(cookieName, hostName);
}
}
});
};
-
rmCookie();
window.addEventListener('beforeunload', rmCookie);
}
- removeCookie$1.names = ['remove-cookie', // aliases are needed for matching the related scriptlet converted into our syntax
+ removeCookie$1.names = ['remove-cookie',
+ // aliases are needed for matching the related scriptlet converted into our syntax
'cookie-remover.js', 'ubo-cookie-remover.js', 'ubo-cookie-remover'];
removeCookie$1.injections = [toRegExp, hit];
/* eslint-disable max-len */
-
/**
* @scriptlet prevent-addEventListener
*
@@ -3729,51 +3435,53 @@
* });
* ```
*/
-
/* eslint-enable max-len */
-
function preventAddEventListener$1(source, typeSearch, listenerSearch) {
var typeSearchRegexp = toRegExp(typeSearch);
var listenerSearchRegexp = toRegExp(listenerSearch);
var nativeAddEventListener = window.EventTarget.prototype.addEventListener;
-
function addEventListenerWrapper(type, listener) {
+ var _this$constructor;
var shouldPrevent = false;
-
if (validateType(type) && validateListener(listener)) {
shouldPrevent = typeSearchRegexp.test(type.toString()) && listenerSearchRegexp.test(listenerToString(listener));
}
-
if (shouldPrevent) {
hit(source);
return undefined;
}
+ // Avoid illegal invocations due to lost context
+ // https://github.com/AdguardTeam/Scriptlets/issues/271
+ var context = this;
+ if (this && ((_this$constructor = this.constructor) === null || _this$constructor === void 0 ? void 0 : _this$constructor.name) === 'Window' && this !== window) {
+ context = window;
+ }
for (var _len = arguments.length, args = new Array(_len > 2 ? _len - 2 : 0), _key = 2; _key < _len; _key++) {
args[_key - 2] = arguments[_key];
}
-
- return nativeAddEventListener.apply(this, [type, listener].concat(args));
+ return nativeAddEventListener.apply(context, [type, listener].concat(args));
}
-
var descriptor = {
configurable: true,
set: function set() {},
get: function get() {
return addEventListenerWrapper;
}
- }; // https://github.com/AdguardTeam/Scriptlets/issues/215
+ };
+ // https://github.com/AdguardTeam/Scriptlets/issues/215
// https://github.com/AdguardTeam/Scriptlets/issues/143
-
Object.defineProperty(window.EventTarget.prototype, 'addEventListener', descriptor);
Object.defineProperty(window, 'addEventListener', descriptor);
Object.defineProperty(document, 'addEventListener', descriptor);
}
- preventAddEventListener$1.names = ['prevent-addEventListener', // aliases are needed for matching the related scriptlet converted into our syntax
+ preventAddEventListener$1.names = ['prevent-addEventListener',
+ // aliases are needed for matching the related scriptlet converted into our syntax
'addEventListener-defuser.js', 'ubo-addEventListener-defuser.js', 'aeld.js', 'ubo-aeld.js', 'ubo-addEventListener-defuser', 'ubo-aeld'];
preventAddEventListener$1.injections = [hit, toRegExp, validateType, validateListener, listenerToString];
/* eslint-disable consistent-return, no-eval */
+
/**
* @scriptlet prevent-bab
*
@@ -3791,82 +3499,66 @@
* example.org#%#//scriptlet('prevent-bab')
* ```
*/
-
- function preventBab$1(source) {
+ function preventBab$2(source) {
var nativeSetTimeout = window.setTimeout;
var babRegex = /\.bab_elementid.$/;
-
var timeoutWrapper = function timeoutWrapper(callback) {
if (typeof callback !== 'string' || !babRegex.test(callback)) {
for (var _len = arguments.length, args = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {
args[_key - 1] = arguments[_key];
}
-
return nativeSetTimeout.apply(window, [callback].concat(args));
}
-
hit(source);
};
-
window.setTimeout = timeoutWrapper;
var signatures = [['blockadblock'], ['babasbm'], [/getItem\('babn'\)/], ['getElementById', 'String.fromCharCode', 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789', 'charAt', 'DOMContentLoaded', 'AdBlock', 'addEventListener', 'doScroll', 'fromCharCode', '<<2|r>>4', 'sessionStorage', 'clientWidth', 'localStorage', 'Math', 'random']];
-
var check = function check(str) {
if (typeof str !== 'string') {
return false;
}
-
for (var i = 0; i < signatures.length; i += 1) {
var tokens = signatures[i];
var match = 0;
-
for (var j = 0; j < tokens.length; j += 1) {
var token = tokens[j];
var found = token instanceof RegExp ? token.test(str) : str.indexOf(token) > -1;
-
if (found) {
match += 1;
}
}
-
if (match / tokens.length >= 0.8) {
return true;
}
}
-
return false;
};
-
var nativeEval = window.eval;
-
var evalWrapper = function evalWrapper(str) {
if (!check(str)) {
return nativeEval(str);
}
-
hit(source);
var bodyEl = document.body;
-
if (bodyEl) {
bodyEl.style.removeProperty('visibility');
}
-
var el = document.getElementById('babasbmsgx');
-
if (el) {
el.parentNode.removeChild(el);
}
};
-
window.eval = evalWrapper.bind(window);
}
- preventBab$1.names = ['prevent-bab', // aliases are needed for matching the related scriptlet converted into our syntax
- 'nobab.js', 'ubo-nobab.js', 'bab-defuser.js', 'ubo-bab-defuser.js', 'ubo-nobab', 'ubo-bab-defuser'];
- preventBab$1.injections = [hit];
+ preventBab$2.names = ['prevent-bab'
+ // there is no aliases for this scriptlet
+ ];
+
+ preventBab$2.injections = [hit];
/* eslint-disable no-unused-vars, no-extra-bind, func-names */
- /* eslint-disable max-len */
+ /* eslint-disable max-len */
/**
* @scriptlet nowebrtc
*
@@ -3881,29 +3573,23 @@
* example.org#%#//scriptlet('nowebrtc')
* ```
*/
-
/* eslint-enable max-len */
-
function nowebrtc$1(source) {
var propertyName = '';
-
if (window.RTCPeerConnection) {
propertyName = 'RTCPeerConnection';
} else if (window.webkitRTCPeerConnection) {
propertyName = 'webkitRTCPeerConnection';
}
-
if (propertyName === '') {
return;
}
-
var rtcReplacement = function rtcReplacement(config) {
// eslint-disable-next-line max-len
var message = "Document tried to create an RTCPeerConnection: ".concat(convertRtcConfigToString(config));
logMessage(source, message);
hit(source);
};
-
rtcReplacement.prototype = {
close: noopFunc,
createDataChannel: noopFunc,
@@ -3912,7 +3598,6 @@
};
var rtc = window[propertyName];
window[propertyName] = rtcReplacement;
-
if (rtc.prototype) {
rtc.prototype.createDataChannel = function (a, b) {
return {
@@ -3922,7 +3607,8 @@
}.bind(null);
}
}
- nowebrtc$1.names = ['nowebrtc', // aliases are needed for matching the related scriptlet converted into our syntax
+ nowebrtc$1.names = ['nowebrtc',
+ // aliases are needed for matching the related scriptlet converted into our syntax
'nowebrtc.js', 'ubo-nowebrtc.js', 'ubo-nowebrtc'];
nowebrtc$1.injections = [hit, noopFunc, logMessage, convertRtcConfigToString];
@@ -3940,47 +3626,51 @@
* example.org#%#//scriptlet('log-addEventListener')
* ```
*/
-
function logAddEventListener$1(source) {
var nativeAddEventListener = window.EventTarget.prototype.addEventListener;
-
function addEventListenerWrapper(type, listener) {
+ var _this$constructor;
if (validateType(type) && validateListener(listener)) {
var _message = "addEventListener(\"".concat(type, "\", ").concat(listenerToString(listener), ")");
-
logMessage(source, _message, true);
hit(source);
- } // logging while debugging
-
+ }
+ // logging while debugging
var message = "Invalid event type or listener passed to addEventListener:\ntype: ".concat(convertTypeToString(type), "\nlistener: ").concat(convertTypeToString(listener));
logMessage(source, message, true);
+ // Avoid illegal invocations due to lost context
+ // https://github.com/AdguardTeam/Scriptlets/issues/271
+ var context = this;
+ if (this && ((_this$constructor = this.constructor) === null || _this$constructor === void 0 ? void 0 : _this$constructor.name) === 'Window' && this !== window) {
+ context = window;
+ }
for (var _len = arguments.length, args = new Array(_len > 2 ? _len - 2 : 0), _key = 2; _key < _len; _key++) {
args[_key - 2] = arguments[_key];
}
-
- return nativeAddEventListener.apply(this, [type, listener].concat(args));
+ return nativeAddEventListener.apply(context, [type, listener].concat(args));
}
-
var descriptor = {
configurable: true,
set: function set() {},
get: function get() {
return addEventListenerWrapper;
}
- }; // https://github.com/AdguardTeam/Scriptlets/issues/215
+ };
+ // https://github.com/AdguardTeam/Scriptlets/issues/215
// https://github.com/AdguardTeam/Scriptlets/issues/143
-
Object.defineProperty(window.EventTarget.prototype, 'addEventListener', descriptor);
Object.defineProperty(window, 'addEventListener', descriptor);
Object.defineProperty(document, 'addEventListener', descriptor);
}
- logAddEventListener$1.names = ['log-addEventListener', // aliases are needed for matching the related scriptlet converted into our syntax
+ logAddEventListener$1.names = ['log-addEventListener',
+ // aliases are needed for matching the related scriptlet converted into our syntax
'addEventListener-logger.js', 'ubo-addEventListener-logger.js', 'aell.js', 'ubo-aell.js', 'ubo-addEventListener-logger', 'ubo-aell'];
logAddEventListener$1.injections = [hit, validateType, validateListener, listenerToString, convertTypeToString, logMessage, objectToString, isEmptyObject, getObjectEntries];
/* eslint-disable no-eval */
+
/**
* @scriptlet log-eval
*
@@ -3992,32 +3682,26 @@
* example.org#%#//scriptlet('log-eval')
* ```
*/
-
function logEval$1(source) {
// wrap eval function
var nativeEval = window.eval;
-
function evalWrapper(str) {
hit(source);
logMessage(source, "eval(\"".concat(str, "\")"), true);
return nativeEval(str);
}
+ window.eval = evalWrapper;
- window.eval = evalWrapper; // wrap new Function
-
+ // wrap new Function
var nativeFunction = window.Function;
-
function FunctionWrapper() {
hit(source);
-
for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
args[_key] = arguments[_key];
}
-
logMessage(source, "new Function(".concat(args.join(', '), ")"), true);
return nativeFunction.apply(this, [].concat(args));
}
-
FunctionWrapper.prototype = Object.create(nativeFunction.prototype);
FunctionWrapper.prototype.constructor = FunctionWrapper;
window.Function = FunctionWrapper;
@@ -4041,12 +3725,13 @@
for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
args[_key] = arguments[_key];
}
-
console.log(args); // eslint-disable-line no-console
}
+
log$1.names = ['log'];
/* eslint-disable no-eval, no-extra-bind */
+
/**
* @scriptlet noeval
*
@@ -4065,17 +3750,19 @@
* example.org#%#//scriptlet('noeval')
* ```
*/
-
function noeval$1(source) {
window.eval = function evalWrapper(s) {
- hit(source, "AdGuard has prevented eval:\n".concat(s));
+ hit(source);
+ logMessage(source, "AdGuard has prevented eval:\n".concat(s), true);
}.bind();
}
- noeval$1.names = ['noeval', // aliases are needed for matching the related scriptlet converted into our syntax
+ noeval$1.names = ['noeval',
+ // aliases are needed for matching the related scriptlet converted into our syntax
'noeval.js', 'silent-noeval.js', 'ubo-noeval.js', 'ubo-silent-noeval.js', 'ubo-noeval', 'ubo-silent-noeval'];
- noeval$1.injections = [hit];
+ noeval$1.injections = [hit, logMessage];
/* eslint-disable no-eval, no-extra-bind, func-names */
+
/**
* @scriptlet prevent-eval-if
*
@@ -4100,25 +3787,24 @@
* example.org#%#//scriptlet('prevent-eval-if', 'test')
* ```
*/
-
function preventEvalIf$1(source, search) {
var searchRegexp = toRegExp(search);
var nativeEval = window.eval;
-
window.eval = function (payload) {
if (!searchRegexp.test(payload.toString())) {
return nativeEval.call(window, payload);
}
-
- hit(source, payload);
+ hit(source);
return undefined;
}.bind(window);
}
- preventEvalIf$1.names = ['prevent-eval-if', // aliases are needed for matching the related scriptlet converted into our syntax
+ preventEvalIf$1.names = ['prevent-eval-if',
+ // aliases are needed for matching the related scriptlet converted into our syntax
'noeval-if.js', 'ubo-noeval-if.js', 'ubo-noeval-if'];
preventEvalIf$1.injections = [toRegExp, hit];
/* eslint-disable func-names, no-multi-assign */
+
/**
* @scriptlet prevent-fab-3.2.0
*
@@ -4133,31 +3819,25 @@
* example.org#%#//scriptlet('prevent-fab-3.2.0')
* ```
*/
-
function preventFab$1(source) {
- hit(source); // redefines Fab function for adblock detection
+ hit(source);
+ // redefines Fab function for adblock detection
var Fab = function Fab() {};
-
Fab.prototype.check = noopFunc;
Fab.prototype.clearEvent = noopFunc;
Fab.prototype.emitEvent = noopFunc;
-
Fab.prototype.on = function (a, b) {
if (!a) {
b();
}
-
return this;
};
-
Fab.prototype.onDetected = noopThis;
-
Fab.prototype.onNotDetected = function (a) {
a();
return this;
};
-
Fab.prototype.setOption = noopFunc;
Fab.prototype.options = {
set: noopFunc,
@@ -4175,50 +3855,48 @@
return fab;
},
set: function set() {}
- }; // redefined Fab data properties which if 'FuckAdBlock' variable exists
+ };
+ // redefined Fab data properties which if 'FuckAdBlock' variable exists
if (Object.prototype.hasOwnProperty.call(window, 'FuckAdBlock')) {
window.FuckAdBlock = Fab;
} else {
// or redefined Fab accessor properties
Object.defineProperty(window, 'FuckAdBlock', getSetFab);
}
-
if (Object.prototype.hasOwnProperty.call(window, 'BlockAdBlock')) {
window.BlockAdBlock = Fab;
} else {
Object.defineProperty(window, 'BlockAdBlock', getSetFab);
}
-
if (Object.prototype.hasOwnProperty.call(window, 'SniffAdBlock')) {
window.SniffAdBlock = Fab;
} else {
Object.defineProperty(window, 'SniffAdBlock', getSetFab);
}
-
if (Object.prototype.hasOwnProperty.call(window, 'fuckAdBlock')) {
window.fuckAdBlock = fab;
} else {
Object.defineProperty(window, 'fuckAdBlock', getsetfab);
}
-
if (Object.prototype.hasOwnProperty.call(window, 'blockAdBlock')) {
window.blockAdBlock = fab;
} else {
Object.defineProperty(window, 'blockAdBlock', getsetfab);
}
-
if (Object.prototype.hasOwnProperty.call(window, 'sniffAdBlock')) {
window.sniffAdBlock = fab;
} else {
Object.defineProperty(window, 'sniffAdBlock', getsetfab);
}
}
- preventFab$1.names = ['prevent-fab-3.2.0', // aliases are needed for matching the related scriptlet converted into our syntax
+ preventFab$1.names = ['prevent-fab-3.2.0',
+ // aliases are needed for matching the related scriptlet converted into our syntax
'nofab.js', 'ubo-nofab.js', 'fuckadblock.js-3.2.0', 'ubo-fuckadblock.js-3.2.0', 'ubo-nofab'];
preventFab$1.injections = [hit, noopFunc, noopThis];
/* eslint-disable func-names, no-multi-assign */
+
/**
* @scriptlet set-popads-dummy
*
@@ -4233,7 +3911,6 @@
* example.org#%#//scriptlet('set-popads-dummy')
* ```
*/
-
function setPopadsDummy$1(source) {
delete window.PopAds;
delete window.popns;
@@ -4252,7 +3929,8 @@
}
});
}
- setPopadsDummy$1.names = ['set-popads-dummy', // aliases are needed for matching the related scriptlet converted into our syntax
+ setPopadsDummy$1.names = ['set-popads-dummy',
+ // aliases are needed for matching the related scriptlet converted into our syntax
'popads-dummy.js', 'ubo-popads-dummy.js', 'ubo-popads-dummy'];
setPopadsDummy$1.injections = [hit];
@@ -4270,14 +3948,11 @@
* example.org#%#//scriptlet('prevent-popads-net')
* ```
*/
-
function preventPopadsNet$1(source) {
var rid = randomId();
-
var throwError = function throwError() {
throw new ReferenceError(rid);
};
-
delete window.PopAds;
delete window.popns;
Object.defineProperties(window, {
@@ -4291,11 +3966,13 @@
window.onerror = createOnErrorHandler(rid).bind();
hit(source);
}
- preventPopadsNet$1.names = ['prevent-popads-net', // aliases are needed for matching the related scriptlet converted into our syntax
+ preventPopadsNet$1.names = ['prevent-popads-net',
+ // aliases are needed for matching the related scriptlet converted into our syntax
'popads.net.js', 'ubo-popads.net.js', 'ubo-popads.net'];
preventPopadsNet$1.injections = [createOnErrorHandler, randomId, hit];
/* eslint-disable func-names */
+
/**
* @scriptlet prevent-adfly
*
@@ -4310,16 +3987,13 @@
* example.org#%#//scriptlet('prevent-adfly')
* ```
*/
-
function preventAdfly$1(source) {
var isDigit = function isDigit(data) {
return /^\d$/.test(data);
};
-
var handler = function handler(encodedURL) {
var evenChars = '';
var oddChars = '';
-
for (var i = 0; i < encodedURL.length; i += 1) {
if (i % 2 === 0) {
evenChars += encodedURL.charAt(i);
@@ -4327,56 +4001,45 @@
oddChars = encodedURL.charAt(i) + oddChars;
}
}
-
var data = (evenChars + oddChars).split('');
-
for (var _i = 0; _i < data.length; _i += 1) {
if (isDigit(data[_i])) {
for (var ii = _i + 1; ii < data.length; ii += 1) {
if (isDigit(data[ii])) {
// eslint-disable-next-line no-bitwise
var temp = parseInt(data[_i], 10) ^ parseInt(data[ii], 10);
-
if (temp < 10) {
data[_i] = temp.toString();
}
-
_i = ii;
break;
}
}
}
}
-
data = data.join('');
var decodedURL = window.atob(data).slice(16, -16);
/* eslint-disable compat/compat */
-
if (window.stop) {
window.stop();
}
/* eslint-enable compat/compat */
-
-
window.onbeforeunload = null;
window.location.href = decodedURL;
};
-
- var val; // Do not apply handler more than one time
-
+ var val;
+ // Do not apply handler more than one time
var applyHandler = true;
var result = setPropertyAccess(window, 'ysmm', {
configurable: false,
set: function set(value) {
if (applyHandler) {
applyHandler = false;
-
try {
if (typeof value === 'string') {
handler(value);
}
} catch (err) {} // eslint-disable-line no-empty
-
}
val = value;
@@ -4385,19 +4048,18 @@
return val;
}
});
-
if (result) {
hit(source);
} else {
logMessage(source, 'Failed to set up prevent-adfly scriptlet');
}
}
- preventAdfly$1.names = ['prevent-adfly', // aliases are needed for matching the related scriptlet converted into our syntax
+ preventAdfly$1.names = ['prevent-adfly',
+ // aliases are needed for matching the related scriptlet converted into our syntax
'adfly-defuser.js', 'ubo-adfly-defuser.js', 'ubo-adfly-defuser'];
preventAdfly$1.injections = [setPropertyAccess, hit, logMessage];
/* eslint-disable max-len */
-
/**
* @scriptlet debug-on-property-read
*
@@ -4414,16 +4076,12 @@
* example.org#%#//scriptlet('debug-on-property-read', 'open')
* ```
*/
-
/* eslint-enable max-len */
-
function debugOnPropertyRead$1(source, property) {
if (!property) {
return;
}
-
var rid = randomId();
-
var abort = function abort() {
hit(source);
debugger; // eslint-disable-line no-debugger
@@ -4433,17 +4091,14 @@
var chainInfo = getPropertyInChain(owner, property);
var base = chainInfo.base;
var prop = chainInfo.prop,
- chain = chainInfo.chain;
-
+ chain = chainInfo.chain;
if (chain) {
var setter = function setter(a) {
base = a;
-
if (a instanceof Object) {
setChainPropAccess(a, chain);
}
};
-
Object.defineProperty(owner, prop, {
get: function get() {
return base;
@@ -4452,13 +4107,11 @@
});
return;
}
-
setPropertyAccess(base, prop, {
get: abort,
set: noopFunc
});
};
-
setChainPropAccess(window, property);
window.onerror = createOnErrorHandler(rid).bind();
}
@@ -4466,7 +4119,6 @@
debugOnPropertyRead$1.injections = [randomId, setPropertyAccess, getPropertyInChain, createOnErrorHandler, hit, noopFunc, isEmptyObject];
/* eslint-disable max-len */
-
/**
* @scriptlet debug-on-property-write
*
@@ -4481,16 +4133,12 @@
* example.org#%#//scriptlet('debug-on-property-write', 'test')
* ```
*/
-
/* eslint-enable max-len */
-
function debugOnPropertyWrite$1(source, property) {
if (!property) {
return;
}
-
var rid = randomId();
-
var abort = function abort() {
hit(source);
debugger; // eslint-disable-line no-debugger
@@ -4500,17 +4148,14 @@
var chainInfo = getPropertyInChain(owner, property);
var base = chainInfo.base;
var prop = chainInfo.prop,
- chain = chainInfo.chain;
-
+ chain = chainInfo.chain;
if (chain) {
var setter = function setter(a) {
base = a;
-
if (a instanceof Object) {
setChainPropAccess(a, chain);
}
};
-
Object.defineProperty(owner, prop, {
get: function get() {
return base;
@@ -4519,12 +4164,10 @@
});
return;
}
-
setPropertyAccess(base, prop, {
set: abort
});
};
-
setChainPropAccess(window, property);
window.onerror = createOnErrorHandler(rid).bind();
}
@@ -4532,7 +4175,6 @@
debugOnPropertyWrite$1.injections = [randomId, setPropertyAccess, getPropertyInChain, createOnErrorHandler, hit, isEmptyObject];
/* eslint-disable max-len */
-
/**
* @scriptlet debug-current-inline-script
*
@@ -4547,13 +4189,10 @@
* example.org#%#//scriptlet('debug-current-inline-script', 'alert')
* ```
*/
-
/* eslint-enable max-len */
-
function debugCurrentInlineScript$1(source, property, search) {
var searchRegexp = toRegExp(search);
var rid = randomId();
-
var getCurrentScript = function getCurrentScript() {
if ('currentScript' in document) {
return document.currentScript; // eslint-disable-line compat/compat
@@ -4562,27 +4201,23 @@
var scripts = document.getElementsByTagName('script');
return scripts[scripts.length - 1];
};
-
var ourScript = getCurrentScript();
-
var abort = function abort() {
var scriptEl = getCurrentScript();
-
if (!scriptEl) {
return;
}
+ var content = scriptEl.textContent;
- var content = scriptEl.textContent; // We are using Node.prototype.textContent property descriptor
+ // We are using Node.prototype.textContent property descriptor
// to get the real script content
// even when document.currentScript.textContent is replaced.
// https://github.com/AdguardTeam/Scriptlets/issues/57#issuecomment-593638991
-
try {
var textContentGetter = Object.getOwnPropertyDescriptor(Node.prototype, 'textContent').get;
content = textContentGetter.call(scriptEl);
} catch (e) {} // eslint-disable-line no-empty
-
if (scriptEl instanceof HTMLScriptElement && content.length > 0 && scriptEl !== ourScript && searchRegexp.test(content)) {
hit(source);
debugger; // eslint-disable-line no-debugger
@@ -4593,12 +4228,11 @@
var chainInfo = getPropertyInChain(owner, property);
var base = chainInfo.base;
var prop = chainInfo.prop,
- chain = chainInfo.chain; // The scriptlet might be executed before the chain property has been created
+ chain = chainInfo.chain; // The scriptlet might be executed before the chain property has been created
// (for instance, document.body before the HTML body was loaded).
// In this case we're checking whether the base element exists or not
// and if not, we simply exit without overriding anything.
// e.g. https://github.com/AdguardTeam/Scriptlets/issues/57#issuecomment-575841092
-
if (base instanceof Object === false && base === null) {
var props = property.split('.');
var propIndex = props.indexOf(prop);
@@ -4607,16 +4241,13 @@
logMessage(message, source.verbose);
return;
}
-
if (chain) {
var setter = function setter(a) {
base = a;
-
if (a instanceof Object) {
setChainPropAccess(a, chain);
}
};
-
Object.defineProperty(owner, prop, {
get: function get() {
return base;
@@ -4625,7 +4256,6 @@
});
return;
}
-
var currentValue = base[prop];
setPropertyAccess(base, prop, {
set: function set(value) {
@@ -4638,7 +4268,6 @@
}
});
};
-
setChainPropAccess(window, property);
window.onerror = createOnErrorHandler(rid).bind();
}
@@ -4646,7 +4275,6 @@
debugCurrentInlineScript$1.injections = [randomId, setPropertyAccess, getPropertyInChain, toRegExp, createOnErrorHandler, hit, logMessage, isEmptyObject];
/* eslint-disable max-len */
-
/**
* @scriptlet remove-attr
*
@@ -4706,31 +4334,23 @@
* example.org#%#//scriptlet('remove-attr', 'example', 'html', 'asap complete')
* ```
*/
-
/* eslint-enable max-len */
-
function removeAttr$1(source, attrs, selector) {
var applying = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : 'asap stay';
-
if (!attrs) {
return;
}
-
attrs = attrs.split(/\s*\|\s*/);
-
if (!selector) {
selector = "[".concat(attrs.join('],['), "]");
}
-
var rmattr = function rmattr() {
var nodes = [];
-
try {
nodes = [].slice.call(document.querySelectorAll(selector));
} catch (e) {
logMessage(source, "Invalid selector arg: '".concat(selector, "'"));
}
-
var removed = false;
nodes.forEach(function (node) {
attrs.forEach(function (attr) {
@@ -4738,25 +4358,19 @@
removed = true;
});
});
-
if (removed) {
hit(source);
}
};
-
var flags = parseFlags(applying);
-
var run = function run() {
rmattr();
-
if (!flags.hasFlag(flags.STAY)) {
return;
- } // 'true' for observing attributes
-
-
+ }
+ // 'true' for observing attributes
observeDOMChanges(rmattr, true);
};
-
if (flags.hasFlag(flags.ASAP)) {
// https://github.com/AdguardTeam/Scriptlets/issues/245
// Call rmattr on DOM content loaded
@@ -4769,7 +4383,6 @@
rmattr();
}
}
-
if (document.readyState !== 'complete' && flags.hasFlag(flags.COMPLETE)) {
window.addEventListener('load', run, {
once: true
@@ -4778,20 +4391,20 @@
// Only call rmattr for single 'stay' flag
if (!applying.indexOf(' ') !== -1) {
rmattr();
- } // 'true' for observing attributes
-
-
+ }
+ // 'true' for observing attributes
observeDOMChanges(rmattr, true);
}
}
- removeAttr$1.names = ['remove-attr', // aliases are needed for matching the related scriptlet converted into our syntax
+ removeAttr$1.names = ['remove-attr',
+ // aliases are needed for matching the related scriptlet converted into our syntax
'remove-attr.js', 'ubo-remove-attr.js', 'ra.js', 'ubo-ra.js', 'ubo-remove-attr', 'ubo-ra'];
- removeAttr$1.injections = [hit, observeDOMChanges, parseFlags, logMessage, // following helpers should be imported and injected
+ removeAttr$1.injections = [hit, observeDOMChanges, parseFlags, logMessage,
+ // following helpers should be imported and injected
// because they are used by helpers above
throttle];
/* eslint-disable max-len */
-
/**
* @scriptlet set-attr
*
@@ -4836,21 +4449,16 @@
* Some text
* ```
*/
-
/* eslint-enable max-len */
-
function setAttr$1(source, selector, attr) {
var value = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : '';
-
if (!selector || !attr) {
return;
- } // Drop strings that cant be parsed into number, negative numbers and numbers below 32767
-
-
+ }
+ // Drop strings that cant be parsed into number, negative numbers and numbers below 32767
if (value.length !== 0 && (nativeIsNaN(parseInt(value, 10)) || parseInt(value, 10) < 0 || parseInt(value, 10) > 0x7FFF)) {
return;
}
-
var setAttr = function setAttr() {
var nodes = [].slice.call(document.querySelectorAll(selector));
var set = false;
@@ -4858,22 +4466,20 @@
node.setAttribute(attr, value);
set = true;
});
-
if (set) {
hit(source);
}
};
-
setAttr();
observeDOMChanges(setAttr, true);
}
setAttr$1.names = ['set-attr'];
- setAttr$1.injections = [hit, observeDOMChanges, nativeIsNaN, // following helpers should be imported and injected
+ setAttr$1.injections = [hit, observeDOMChanges, nativeIsNaN,
+ // following helpers should be imported and injected
// because they are used by helpers above
throttle];
/* eslint-disable max-len */
-
/**
* @scriptlet remove-class
*
@@ -4937,51 +4543,41 @@
* example.org#%#//scriptlet('remove-class', 'branding', 'div[class^="inner"]', 'asap complete')
* ```
*/
-
/* eslint-enable max-len */
function removeClass$1(source, classNames, selector) {
var applying = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : 'asap stay';
-
if (!classNames) {
return;
}
-
classNames = classNames.split(/\s*\|\s*/);
var selectors = [];
-
if (!selector) {
selectors = classNames.map(function (className) {
return ".".concat(className);
});
}
-
var removeClassHandler = function removeClassHandler() {
var nodes = new Set();
-
if (selector) {
var foundNodes = [];
-
try {
foundNodes = [].slice.call(document.querySelectorAll(selector));
} catch (e) {
logMessage(source, "Invalid selector arg: '".concat(selector, "'"));
}
-
foundNodes.forEach(function (n) {
return nodes.add(n);
});
} else if (selectors.length > 0) {
selectors.forEach(function (s) {
var elements = document.querySelectorAll(s);
-
for (var i = 0; i < elements.length; i += 1) {
var element = elements[i];
nodes.add(element);
}
});
}
-
var removed = false;
nodes.forEach(function (node) {
classNames.forEach(function (className) {
@@ -4991,27 +4587,21 @@
}
});
});
-
if (removed) {
hit(source);
}
};
-
var CLASS_ATTR_NAME = ['class'];
var flags = parseFlags(applying);
-
var run = function run() {
removeClassHandler();
-
if (!flags.hasFlag(flags.STAY)) {
return;
- } // 'true' for observing attributes
+ }
+ // 'true' for observing attributes
// 'class' for observing only classes
-
-
observeDOMChanges(removeClassHandler, true, CLASS_ATTR_NAME);
};
-
if (flags.hasFlag(flags.ASAP)) {
// https://github.com/AdguardTeam/Scriptlets/issues/245
// Call removeClassHandler on DOM content loaded
@@ -5024,7 +4614,6 @@
removeClassHandler();
}
}
-
if (document.readyState !== 'complete' && flags.hasFlag(flags.COMPLETE)) {
window.addEventListener('load', run, {
once: true
@@ -5034,13 +4623,14 @@
if (!applying.indexOf(' ') !== -1) {
removeClassHandler();
}
-
observeDOMChanges(removeClassHandler, true, CLASS_ATTR_NAME);
}
}
- removeClass$1.names = ['remove-class', // aliases are needed for matching the related scriptlet converted into our syntax
+ removeClass$1.names = ['remove-class',
+ // aliases are needed for matching the related scriptlet converted into our syntax
'remove-class.js', 'ubo-remove-class.js', 'rc.js', 'ubo-rc.js', 'ubo-remove-class', 'ubo-rc'];
- removeClass$1.injections = [hit, logMessage, observeDOMChanges, parseFlags, // following helpers should be imported and injected
+ removeClass$1.injections = [hit, logMessage, observeDOMChanges, parseFlags,
+ // following helpers should be imported and injected
// because they are used by helpers above
throttle];
@@ -5058,11 +4648,9 @@
* example.org#%#//scriptlet('disable-newtab-links')
* ```
*/
-
function disableNewtabLinks$1(source) {
document.addEventListener('click', function (ev) {
var target = ev.target;
-
while (target !== null) {
if (target.localName === 'a' && target.hasAttribute('target')) {
ev.stopPropagation();
@@ -5070,17 +4658,16 @@
hit(source);
break;
}
-
target = target.parentNode;
}
});
}
- disableNewtabLinks$1.names = ['disable-newtab-links', // aliases are needed for matching the related scriptlet converted into our syntax
+ disableNewtabLinks$1.names = ['disable-newtab-links',
+ // aliases are needed for matching the related scriptlet converted into our syntax
'disable-newtab-links.js', 'ubo-disable-newtab-links.js', 'ubo-disable-newtab-links'];
disableNewtabLinks$1.injections = [hit];
/* eslint-disable max-len */
-
/**
* @scriptlet adjust-setInterval
*
@@ -5129,13 +4716,10 @@
* example.org#%#//scriptlet('adjust-setInterval', '', '*', '0.02')
* ```
*/
-
/* eslint-enable max-len */
-
function adjustSetInterval$1(source, matchCallback, matchDelay, boost) {
var nativeSetInterval = window.setInterval;
var matchRegexp = toRegExp(matchCallback);
-
var intervalWrapper = function intervalWrapper(callback, delay) {
// https://github.com/AdguardTeam/Scriptlets/issues/221
if (!isValidCallback(callback)) {
@@ -5146,23 +4730,21 @@
delay *= getBoostMultiplier(boost);
hit(source);
}
-
for (var _len = arguments.length, args = new Array(_len > 2 ? _len - 2 : 0), _key = 2; _key < _len; _key++) {
args[_key - 2] = arguments[_key];
}
-
return nativeSetInterval.apply(window, [callback, delay].concat(args));
};
-
window.setInterval = intervalWrapper;
}
- adjustSetInterval$1.names = ['adjust-setInterval', // aliases are needed for matching the related scriptlet converted into our syntax
+ adjustSetInterval$1.names = ['adjust-setInterval',
+ // aliases are needed for matching the related scriptlet converted into our syntax
'nano-setInterval-booster.js', 'ubo-nano-setInterval-booster.js', 'nano-sib.js', 'ubo-nano-sib.js', 'ubo-nano-setInterval-booster', 'ubo-nano-sib'];
- adjustSetInterval$1.injections = [hit, isValidCallback, toRegExp, getBoostMultiplier, isDelayMatched, logMessage, // following helpers should be injected as helpers above use them
+ adjustSetInterval$1.injections = [hit, isValidCallback, toRegExp, getBoostMultiplier, isDelayMatched, logMessage,
+ // following helpers should be injected as helpers above use them
nativeIsNaN, nativeIsFinite, getMatchDelay, shouldMatchAnyDelay];
/* eslint-disable max-len */
-
/**
* @scriptlet adjust-setTimeout
*
@@ -5211,13 +4793,10 @@
* example.org#%#//scriptlet('adjust-setTimeout', 'test', '*')
* ```
*/
-
/* eslint-enable max-len */
-
function adjustSetTimeout$1(source, matchCallback, matchDelay, boost) {
var nativeSetTimeout = window.setTimeout;
var matchRegexp = toRegExp(matchCallback);
-
var timeoutWrapper = function timeoutWrapper(callback, delay) {
// https://github.com/AdguardTeam/Scriptlets/issues/221
if (!isValidCallback(callback)) {
@@ -5228,23 +4807,21 @@
delay *= getBoostMultiplier(boost);
hit(source);
}
-
for (var _len = arguments.length, args = new Array(_len > 2 ? _len - 2 : 0), _key = 2; _key < _len; _key++) {
args[_key - 2] = arguments[_key];
}
-
return nativeSetTimeout.apply(window, [callback, delay].concat(args));
};
-
window.setTimeout = timeoutWrapper;
}
- adjustSetTimeout$1.names = ['adjust-setTimeout', // aliases are needed for matching the related scriptlet converted into our syntax
+ adjustSetTimeout$1.names = ['adjust-setTimeout',
+ // aliases are needed for matching the related scriptlet converted into our syntax
'nano-setTimeout-booster.js', 'ubo-nano-setTimeout-booster.js', 'nano-stb.js', 'ubo-nano-stb.js', 'ubo-nano-setTimeout-booster', 'ubo-nano-stb'];
- adjustSetTimeout$1.injections = [hit, isValidCallback, toRegExp, getBoostMultiplier, isDelayMatched, logMessage, // following helpers should be injected as helpers above use them
+ adjustSetTimeout$1.injections = [hit, isValidCallback, toRegExp, getBoostMultiplier, isDelayMatched, logMessage,
+ // following helpers should be injected as helpers above use them
nativeIsNaN, nativeIsFinite, getMatchDelay, shouldMatchAnyDelay];
/* eslint-disable max-len */
-
/**
* @scriptlet dir-string
*
@@ -5270,38 +4847,23 @@
* example.org#%#//scriptlet('dir-string', '2')
* ```
*/
-
/* eslint-enable max-len */
-
function dirString$1(source, times) {
var _console = console,
- dir = _console.dir;
- times = parseInt(times, 10);
-
+ dir = _console.dir;
function dirWrapper(object) {
- // eslint-disable-next-line no-unused-vars
- var temp;
-
- for (var i = 0; i < times; i += 1) {
- // eslint-disable-next-line no-unused-expressions
- temp = "".concat(object);
- }
-
if (typeof dir === 'function') {
dir.call(this, object);
}
-
- hit(source, temp);
- } // eslint-disable-next-line no-console
-
-
+ hit(source);
+ }
+ // eslint-disable-next-line no-console
console.dir = dirWrapper;
}
dirString$1.names = ['dir-string', 'abp-dir-string'];
dirString$1.injections = [hit];
/* eslint-disable max-len */
-
/**
* @scriptlet json-prune
*
@@ -5377,45 +4939,40 @@
* example.org#%#//scriptlet('json-prune', '', '"id":"117458"')
* ```
*/
-
/* eslint-enable max-len */
-
function jsonPrune$1(source, propsToRemove, requiredInitialProps, stack) {
if (!!stack && !matchStackTrace(stack, new Error().stack)) {
return;
}
-
var prunePaths = propsToRemove !== undefined && propsToRemove !== '' ? propsToRemove.split(/ +/) : [];
var requiredPaths = requiredInitialProps !== undefined && requiredInitialProps !== '' ? requiredInitialProps.split(/ +/) : [];
-
function isPruningNeeded(root) {
if (!root) {
return false;
}
+ var shouldProcess;
- var shouldProcess; // Only log hostname and matched JSON payload if only second argument is present
-
+ // Only log hostname and matched JSON payload if only second argument is present
if (prunePaths.length === 0 && requiredPaths.length > 0) {
var rootString = JSON.stringify(root);
var matchRegex = toRegExp(requiredPaths.join(''));
var shouldLog = matchRegex.test(rootString);
-
if (shouldLog) {
- logMessage(source, "".concat(window.location.hostname, " ").concat(root), true);
+ logMessage(source, "".concat(window.location.hostname, " ").concat(objectToString(root)), true);
shouldProcess = false;
return shouldProcess;
}
}
-
for (var i = 0; i < requiredPaths.length; i += 1) {
var requiredPath = requiredPaths[i];
var lastNestedPropName = requiredPath.split('.').pop();
- var hasWildcard = requiredPath.indexOf('.*.') > -1 || requiredPath.indexOf('*.') > -1 || requiredPath.indexOf('.*') > -1 || requiredPath.indexOf('.[].') > -1 || requiredPath.indexOf('[].') > -1 || requiredPath.indexOf('.[]') > -1; // if the path has wildcard, getPropertyInChain should 'look through' chain props
+ var hasWildcard = requiredPath.indexOf('.*.') > -1 || requiredPath.indexOf('*.') > -1 || requiredPath.indexOf('.*') > -1 || requiredPath.indexOf('.[].') > -1 || requiredPath.indexOf('[].') > -1 || requiredPath.indexOf('.[]') > -1;
- var details = getWildcardPropertyInChain(root, requiredPath, hasWildcard); // start value of 'shouldProcess' due to checking below
+ // if the path has wildcard, getPropertyInChain should 'look through' chain props
+ var details = getWildcardPropertyInChain(root, requiredPath, hasWildcard);
+ // start value of 'shouldProcess' due to checking below
shouldProcess = !hasWildcard;
-
for (var _i = 0; _i < details.length; _i += 1) {
if (hasWildcard) {
// if there is a wildcard,
@@ -5427,28 +4984,25 @@
}
}
}
-
return shouldProcess;
}
+
/**
* Prunes properties of 'root' object
* @param {Object} root
*/
-
-
var jsonPruner = function jsonPruner(root) {
if (prunePaths.length === 0 && requiredPaths.length === 0) {
- logMessage(source, "".concat(window.location.hostname, " ").concat(root), true);
+ logMessage(source, "".concat(window.location.hostname, " ").concat(objectToString(root)), true);
return root;
}
-
try {
if (isPruningNeeded(root) === false) {
return root;
- } // if pruning is needed, we check every input pathToRemove
- // and delete it if root has it
-
+ }
+ // if pruning is needed, we check every input pathToRemove
+ // and delete it if root has it
prunePaths.forEach(function (path) {
var ownerObjArr = getWildcardPropertyInChain(root, path, true);
ownerObjArr.forEach(function (ownerObj) {
@@ -5461,51 +5015,50 @@
} catch (e) {
logMessage(source, e);
}
-
return root;
};
-
var nativeJSONParse = JSON.parse;
-
var jsonParseWrapper = function jsonParseWrapper() {
for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
args[_key] = arguments[_key];
}
-
// dealing with stringified json in args, which should be parsed.
// so we call nativeJSONParse as JSON.parse which is bound to JSON object
var root = nativeJSONParse.apply(JSON, args);
return jsonPruner(root);
- }; // JSON.parse mocking
-
+ };
+ // JSON.parse mocking
jsonParseWrapper.toString = nativeJSONParse.toString.bind(nativeJSONParse);
- JSON.parse = jsonParseWrapper; // eslint-disable-next-line compat/compat
-
- var nativeResponseJson = Response.prototype.json; // eslint-disable-next-line func-names
+ JSON.parse = jsonParseWrapper;
+ // eslint-disable-next-line compat/compat
+ var nativeResponseJson = Response.prototype.json;
+ // eslint-disable-next-line func-names
var responseJsonWrapper = function responseJsonWrapper() {
var promise = nativeResponseJson.apply(this);
return promise.then(function (obj) {
return jsonPruner(obj);
});
- }; // do nothing if browser does not support Response (e.g. Internet Explorer)
- // https://developer.mozilla.org/en-US/docs/Web/API/Response
-
+ };
+ // do nothing if browser does not support Response (e.g. Internet Explorer)
+ // https://developer.mozilla.org/en-US/docs/Web/API/Response
if (typeof Response === 'undefined') {
return;
- } // eslint-disable-next-line compat/compat
-
+ }
+ // eslint-disable-next-line compat/compat
Response.prototype.json = responseJsonWrapper;
}
- jsonPrune$1.names = ['json-prune', // aliases are needed for matching the related scriptlet converted into our syntax
+ jsonPrune$1.names = ['json-prune',
+ // aliases are needed for matching the related scriptlet converted into our syntax
'json-prune.js', 'ubo-json-prune.js', 'ubo-json-prune', 'abp-json-prune'];
- jsonPrune$1.injections = [hit, matchStackTrace, getWildcardPropertyInChain, logMessage, toRegExp, getNativeRegexpTest];
+ jsonPrune$1.injections = [hit, matchStackTrace, getWildcardPropertyInChain, logMessage, objectToString,
+ // following helpers are needed for helpers above
+ toRegExp, isEmptyObject, getObjectEntries, getNativeRegexpTest, shouldAbortInlineOrInjectedScript];
/* eslint-disable max-len */
-
/**
* @scriptlet prevent-requestAnimationFrame
*
@@ -5573,49 +5126,43 @@
* });
* ```
*/
-
/* eslint-enable max-len */
function preventRequestAnimationFrame$1(source, match) {
- var nativeRequestAnimationFrame = window.requestAnimationFrame; // logs requestAnimationFrame to console if no arguments have been specified
+ var nativeRequestAnimationFrame = window.requestAnimationFrame;
+ // logs requestAnimationFrame to console if no arguments have been specified
var shouldLog = typeof match === 'undefined';
-
var _parseMatchArg = parseMatchArg(match),
- isInvertedMatch = _parseMatchArg.isInvertedMatch,
- matchRegexp = _parseMatchArg.matchRegexp;
-
+ isInvertedMatch = _parseMatchArg.isInvertedMatch,
+ matchRegexp = _parseMatchArg.matchRegexp;
var rafWrapper = function rafWrapper(callback) {
var shouldPrevent = false;
-
if (shouldLog) {
hit(source);
logMessage(source, "requestAnimationFrame(".concat(String(callback), ")"), true);
} else if (isValidCallback(callback) && isValidStrPattern(match)) {
shouldPrevent = matchRegexp.test(callback.toString()) !== isInvertedMatch;
}
-
if (shouldPrevent) {
hit(source);
return nativeRequestAnimationFrame(noopFunc);
}
-
for (var _len = arguments.length, args = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {
args[_key - 1] = arguments[_key];
}
-
return nativeRequestAnimationFrame.apply(window, [callback].concat(args));
};
-
window.requestAnimationFrame = rafWrapper;
}
- preventRequestAnimationFrame$1.names = ['prevent-requestAnimationFrame', // aliases are needed for matching the related scriptlet converted into our syntax
+ preventRequestAnimationFrame$1.names = ['prevent-requestAnimationFrame',
+ // aliases are needed for matching the related scriptlet converted into our syntax
'no-requestAnimationFrame-if.js', 'ubo-no-requestAnimationFrame-if.js', 'norafif.js', 'ubo-norafif.js', 'ubo-no-requestAnimationFrame-if', 'ubo-norafif'];
- preventRequestAnimationFrame$1.injections = [hit, noopFunc, parseMatchArg, isValidStrPattern, isValidCallback, logMessage, // following helpers should be injected as helpers above use them
- escapeRegExp, toRegExp, startsWith];
+ preventRequestAnimationFrame$1.injections = [hit, noopFunc, parseMatchArg, isValidStrPattern, isValidCallback, logMessage,
+ // following helpers should be injected as helpers above use them
+ escapeRegExp, toRegExp, startsWith$1];
/* eslint-disable max-len */
-
/**
* @scriptlet set-cookie
*
@@ -5649,27 +5196,27 @@
* example.org#%#//scriptlet('set-cookie', 'cookie_consent', 'ok', 'none')
* ```
*/
-
/* eslint-enable max-len */
-
function setCookie$1(source, name, value) {
var path = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : '/';
- var validValue = getLimitedCookieValue(source, value);
-
+ var validValue = getLimitedCookieValue(value);
if (validValue === null) {
logMessage(source, "Invalid cookie value: '".concat(validValue, "'"));
return;
}
-
- var cookieData = concatCookieNameValuePath(source, name, validValue, path);
-
- if (cookieData) {
- hit(source);
- document.cookie = cookieData;
+ if (!isValidCookiePath(path)) {
+ logMessage(source, "Invalid cookie path: '".concat(path, "'"));
+ return;
+ }
+ var cookieToSet = concatCookieNameValuePath(name, validValue, path);
+ if (!cookieToSet) {
+ return;
}
+ hit(source);
+ document.cookie = cookieToSet;
}
setCookie$1.names = ['set-cookie'];
- setCookie$1.injections = [hit, logMessage, nativeIsNaN, isCookieSetWithValue, getLimitedCookieValue, concatCookieNameValuePath, isValidCookieRawPath, getCookiePath];
+ setCookie$1.injections = [hit, logMessage, nativeIsNaN, isCookieSetWithValue, getLimitedCookieValue, concatCookieNameValuePath, isValidCookiePath, getCookiePath];
/**
* @scriptlet set-cookie-reload
@@ -5706,35 +5253,35 @@
* example.org#%#//scriptlet('set-cookie-reload', 'cookie-set', 'true', 'none')
* ```
*/
-
function setCookieReload$1(source, name, value) {
var path = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : '/';
-
- if (isCookieSetWithValue(name, value)) {
+ if (isCookieSetWithValue(document.cookie, name, value)) {
return;
}
-
- var validValue = getLimitedCookieValue(source, value);
-
+ var validValue = getLimitedCookieValue(value);
if (validValue === null) {
- logMessage(source, "Invalid cookie value: '".concat(validValue, "'"));
+ logMessage(source, "Invalid cookie value: '".concat(value, "'"));
return;
}
+ if (!isValidCookiePath(path)) {
+ logMessage(source, "Invalid cookie path: '".concat(path, "'"));
+ return;
+ }
+ var cookieToSet = concatCookieNameValuePath(name, validValue, path);
+ if (!cookieToSet) {
+ return;
+ }
+ document.cookie = cookieToSet;
+ hit(source);
- var cookieData = concatCookieNameValuePath(source, name, validValue, path);
-
- if (cookieData) {
- document.cookie = cookieData;
- hit(source); // Only reload the page if cookie was set
- // https://github.com/AdguardTeam/Scriptlets/issues/212
-
- if (isCookieSetWithValue(document.cookie, name, value)) {
- window.location.reload();
- }
+ // Only reload the page if cookie was set
+ // https://github.com/AdguardTeam/Scriptlets/issues/212
+ if (isCookieSetWithValue(document.cookie, name, value)) {
+ window.location.reload();
}
}
setCookieReload$1.names = ['set-cookie-reload'];
- setCookieReload$1.injections = [hit, logMessage, nativeIsNaN, isCookieSetWithValue, getLimitedCookieValue, concatCookieNameValuePath, isValidCookieRawPath, getCookiePath];
+ setCookieReload$1.injections = [hit, logMessage, nativeIsNaN, isCookieSetWithValue, getLimitedCookieValue, concatCookieNameValuePath, isValidCookiePath, getCookiePath];
/**
* @scriptlet hide-in-shadow-dom
@@ -5763,54 +5310,49 @@
* virustotal.com#%#//scriptlet('hide-in-shadow-dom', 'vt-ui-contact-fab')
* ```
*/
-
function hideInShadowDom$1(source, selector, baseSelector) {
// do nothing if browser does not support ShadowRoot
// https://developer.mozilla.org/en-US/docs/Web/API/ShadowRoot
if (!Element.prototype.attachShadow) {
return;
}
-
var hideElement = function hideElement(targetElement) {
var DISPLAY_NONE_CSS = 'display:none!important;';
targetElement.style.cssText = DISPLAY_NONE_CSS;
};
+
/**
* Handles shadow-dom piercing and hiding of found elements
*/
-
-
var hideHandler = function hideHandler() {
// start value of shadow-dom hosts for the page dom
- var hostElements = !baseSelector ? findHostElements(document.documentElement) : document.querySelectorAll(baseSelector); // if there is shadow-dom host, they should be explored
+ var hostElements = !baseSelector ? findHostElements(document.documentElement) : document.querySelectorAll(baseSelector);
+ // if there is shadow-dom host, they should be explored
while (hostElements.length !== 0) {
var isHidden = false;
-
var _pierceShadowDom = pierceShadowDom(selector, hostElements),
- targets = _pierceShadowDom.targets,
- innerHosts = _pierceShadowDom.innerHosts;
-
+ targets = _pierceShadowDom.targets,
+ innerHosts = _pierceShadowDom.innerHosts;
targets.forEach(function (targetEl) {
hideElement(targetEl);
isHidden = true;
});
-
if (isHidden) {
hit(source);
- } // continue to pierce for inner shadow-dom hosts
- // and search inside them while the next iteration
-
+ }
+ // continue to pierce for inner shadow-dom hosts
+ // and search inside them while the next iteration
hostElements = innerHosts;
}
};
-
hideHandler();
observeDOMChanges(hideHandler, true);
}
hideInShadowDom$1.names = ['hide-in-shadow-dom'];
- hideInShadowDom$1.injections = [hit, observeDOMChanges, findHostElements, pierceShadowDom, // following helpers should be imported and injected
+ hideInShadowDom$1.injections = [hit, observeDOMChanges, findHostElements, pierceShadowDom,
+ // following helpers should be imported and injected
// because they are used by helpers above
flatten, throttle];
@@ -5841,58 +5383,52 @@
* virustotal.com#%#//scriptlet('remove-in-shadow-dom', 'vt-ui-contact-fab')
* ```
*/
-
function removeInShadowDom$1(source, selector, baseSelector) {
// do nothing if browser does not support ShadowRoot
// https://developer.mozilla.org/en-US/docs/Web/API/ShadowRoot
if (!Element.prototype.attachShadow) {
return;
}
-
var removeElement = function removeElement(targetElement) {
targetElement.remove();
};
+
/**
* Handles shadow-dom piercing and removing of found elements
*/
-
-
var removeHandler = function removeHandler() {
// start value of shadow-dom hosts for the page dom
- var hostElements = !baseSelector ? findHostElements(document.documentElement) : document.querySelectorAll(baseSelector); // if there is shadow-dom host, they should be explored
+ var hostElements = !baseSelector ? findHostElements(document.documentElement) : document.querySelectorAll(baseSelector);
+ // if there is shadow-dom host, they should be explored
while (hostElements.length !== 0) {
var isRemoved = false;
-
var _pierceShadowDom = pierceShadowDom(selector, hostElements),
- targets = _pierceShadowDom.targets,
- innerHosts = _pierceShadowDom.innerHosts;
-
+ targets = _pierceShadowDom.targets,
+ innerHosts = _pierceShadowDom.innerHosts;
targets.forEach(function (targetEl) {
removeElement(targetEl);
isRemoved = true;
});
-
if (isRemoved) {
hit(source);
- } // continue to pierce for inner shadow-dom hosts
- // and search inside them while the next iteration
-
+ }
+ // continue to pierce for inner shadow-dom hosts
+ // and search inside them while the next iteration
hostElements = innerHosts;
}
};
-
removeHandler();
observeDOMChanges(removeHandler, true);
}
removeInShadowDom$1.names = ['remove-in-shadow-dom'];
- removeInShadowDom$1.injections = [hit, observeDOMChanges, findHostElements, pierceShadowDom, // following helpers should be imported and injected
+ removeInShadowDom$1.injections = [hit, observeDOMChanges, findHostElements, pierceShadowDom,
+ // following helpers should be imported and injected
// because they are used by helpers above
flatten, throttle];
/* eslint-disable max-len */
-
/**
* @scriptlet prevent-fetch
*
@@ -5958,68 +5494,63 @@
* ! Specify response body for all fetch calls
* example.org#%#//scriptlet('prevent-fetch', '', 'emptyArr')
* ```
+ *
+ * 7. Prevent all fetch calls and specify response type value
+ * ```
+ * example.org#%#//scriptlet('prevent-fetch', '*', '', 'opaque')
+ * ```
*/
-
/* eslint-enable max-len */
-
function preventFetch$1(source, propsToMatch) {
var responseBody = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 'emptyObj';
var responseType = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : 'default';
-
// do nothing if browser does not support fetch or Proxy (e.g. Internet Explorer)
// https://developer.mozilla.org/en-US/docs/Web/API/WindowOrWorkerGlobalScope/fetch
// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Proxy
if (typeof fetch === 'undefined' || typeof Proxy === 'undefined' || typeof Response === 'undefined') {
return;
}
-
var strResponseBody;
-
- if (responseBody === 'emptyObj') {
+ if (responseBody === '' || responseBody === 'emptyObj') {
strResponseBody = '{}';
} else if (responseBody === 'emptyArr') {
strResponseBody = '[]';
} else {
return;
- } // Skip disallowed response types
-
+ }
+ // Skip disallowed response types
if (!(responseType === 'default' || responseType === 'opaque')) {
logMessage(source, "Invalid parameter: ".concat(responseType));
return;
}
-
var handlerWrapper = function handlerWrapper(target, thisArg, args) {
var shouldPrevent = false;
var fetchData = getFetchData(args);
-
if (typeof propsToMatch === 'undefined') {
logMessage(source, "fetch( ".concat(objectToString(fetchData), " )"), true);
hit(source);
return Reflect.apply(target, thisArg, args);
}
-
shouldPrevent = matchRequestProps(source, propsToMatch, fetchData);
-
if (shouldPrevent) {
hit(source);
return noopPromiseResolve(strResponseBody, fetchData.url, responseType);
}
-
return Reflect.apply(target, thisArg, args);
};
-
var fetchHandler = {
apply: handlerWrapper
};
fetch = new Proxy(fetch, fetchHandler); // eslint-disable-line no-global-assign
}
- preventFetch$1.names = ['prevent-fetch', // aliases are needed for matching the related scriptlet converted into our syntax
+
+ preventFetch$1.names = ['prevent-fetch',
+ // aliases are needed for matching the related scriptlet converted into our syntax
'no-fetch-if.js', 'ubo-no-fetch-if.js', 'ubo-no-fetch-if'];
- preventFetch$1.injections = [hit, getFetchData, objectToString, noopPromiseResolve, matchRequestProps, logMessage, toRegExp, isValidStrPattern, escapeRegExp, isEmptyObject, getRequestData, getObjectEntries, getObjectFromEntries, parseMatchProps, validateParsedData, getMatchPropsData];
+ preventFetch$1.injections = [hit, getFetchData, objectToString, noopPromiseResolve, matchRequestProps, logMessage, toRegExp, isValidStrPattern, escapeRegExp, isEmptyObject, getRequestData, getRequestProps, getObjectEntries, getObjectFromEntries, parseMatchProps, validateParsedData, getMatchPropsData];
/* eslint-disable max-len */
-
/**
* @scriptlet set-local-storage-item
*
@@ -6053,7 +5584,6 @@
* example.org#%#//scriptlet('set-local-storage-item', 'exit-intent-marketing', '1')
* ```
*/
-
/* eslint-enable max-len */
function setLocalStorageItem$1(source, key, value) {
@@ -6061,16 +5591,15 @@
logMessage(source, 'Item key should be specified.');
return;
}
-
- var validValue = getLimitedStorageItemValue(source, value);
-
- if (validValue === null) {
- logMessage(source, "Invalid cookie value: '".concat(validValue, "'"));
+ var validValue;
+ try {
+ validValue = getLimitedStorageItemValue(value);
+ } catch (_unused) {
+ logMessage(source, "Invalid storage item value: '".concat(value, "'"));
return;
}
-
var _window = window,
- localStorage = _window.localStorage;
+ localStorage = _window.localStorage;
setStorageItem(source, localStorage, key, validValue);
hit(source);
}
@@ -6078,7 +5607,6 @@
setLocalStorageItem$1.injections = [hit, logMessage, nativeIsNaN, setStorageItem, getLimitedStorageItemValue];
/* eslint-disable max-len */
-
/**
* @scriptlet set-session-storage-item
*
@@ -6112,7 +5640,6 @@
* example.org#%#//scriptlet('set-session-storage-item', 'exit-intent-marketing', '1')
* ```
*/
-
/* eslint-enable max-len */
function setSessionStorageItem$1(source, key, value) {
@@ -6120,23 +5647,22 @@
logMessage(source, 'Item key should be specified.');
return;
}
-
- var validValue = getLimitedStorageItemValue(source, value);
-
- if (validValue === null) {
- logMessage(source, "Invalid cookie value: '".concat(validValue, "'"));
+ var validValue;
+ try {
+ validValue = getLimitedStorageItemValue(value);
+ } catch (_unused) {
+ logMessage(source, "Invalid storage item value: '".concat(value, "'"));
return;
}
-
var _window = window,
- sessionStorage = _window.sessionStorage;
+ sessionStorage = _window.sessionStorage;
setStorageItem(source, sessionStorage, key, validValue);
+ hit(source);
}
setSessionStorageItem$1.names = ['set-session-storage-item'];
setSessionStorageItem$1.injections = [hit, logMessage, nativeIsNaN, setStorageItem, getLimitedStorageItemValue];
/* eslint-disable max-len */
-
/**
* @scriptlet abort-on-stack-trace
*
@@ -6176,36 +5702,28 @@
* example.org#%#//scriptlet('abort-on-stack-trace', 'Ya', 'injectedScript')
* ```
*/
-
/* eslint-enable max-len */
-
function abortOnStackTrace$1(source, property, stack) {
if (!property || !stack) {
return;
}
-
var rid = randomId();
-
var abort = function abort() {
hit(source);
throw new ReferenceError(rid);
};
-
var setChainPropAccess = function setChainPropAccess(owner, property) {
var chainInfo = getPropertyInChain(owner, property);
var base = chainInfo.base;
var prop = chainInfo.prop,
- chain = chainInfo.chain;
-
+ chain = chainInfo.chain;
if (chain) {
var setter = function setter(a) {
base = a;
-
if (a instanceof Object) {
setChainPropAccess(a, chain);
}
};
-
Object.defineProperty(owner, prop, {
get: function get() {
return base;
@@ -6214,27 +5732,24 @@
});
return;
}
-
if (!stack.match(/^(inlineScript|injectedScript)$/) && !isValidStrPattern(stack)) {
logMessage(source, "Invalid parameter: ".concat(stack));
return;
- } // Prevent infinite loops when trapping prop used by helpers in getter/setter
-
+ }
+ // Prevent infinite loops when trapping prop used by helpers in getter/setter
var descriptorWrapper = Object.assign(getDescriptorAddon(), {
value: base[prop],
get: function get() {
if (!this.isAbortingSuspended && this.isolateCallback(matchStackTrace, stack, new Error().stack)) {
abort();
}
-
return this.value;
},
set: function set(newValue) {
if (!this.isAbortingSuspended && this.isolateCallback(matchStackTrace, stack, new Error().stack)) {
abort();
}
-
this.value = newValue;
}
});
@@ -6248,16 +5763,15 @@
}
});
};
-
setChainPropAccess(window, property);
window.onerror = createOnErrorHandler(rid).bind();
}
- abortOnStackTrace$1.names = ['abort-on-stack-trace', // aliases are needed for matching the related scriptlet converted into our syntax
+ abortOnStackTrace$1.names = ['abort-on-stack-trace',
+ // aliases are needed for matching the related scriptlet converted into our syntax
'abort-on-stack-trace.js', 'ubo-abort-on-stack-trace.js', 'aost.js', 'ubo-aost.js', 'ubo-abort-on-stack-trace', 'ubo-aost', 'abp-abort-on-stack-trace'];
- abortOnStackTrace$1.injections = [randomId, setPropertyAccess, getPropertyInChain, createOnErrorHandler, hit, isValidStrPattern, escapeRegExp, matchStackTrace, getDescriptorAddon, logMessage, toRegExp, isEmptyObject, getNativeRegexpTest, startsWith, shouldAbortInlineOrInjectedScript$1];
+ abortOnStackTrace$1.injections = [randomId, setPropertyAccess, getPropertyInChain, createOnErrorHandler, hit, isValidStrPattern, escapeRegExp, matchStackTrace, getDescriptorAddon, logMessage, toRegExp, isEmptyObject, getNativeRegexpTest, startsWith$1, shouldAbortInlineOrInjectedScript];
/* eslint-disable max-len */
-
/**
* @scriptlet log-on-stack-trace
*
@@ -6274,48 +5788,40 @@
*
* - `property` - required, path to a property. The property must be attached to window.
*/
-
/* eslint-enable max-len */
-
function logOnStacktrace$1(source, property) {
if (!property) {
return;
}
-
var refineStackTrace = function refineStackTrace(stackString) {
// Split stack trace string by lines and remove first two elements ('Error' and getter call)
// Remove ' at ' at the start of each string
var stackSteps = stackString.split('\n').slice(2).map(function (line) {
return line.replace(/ {4}at /, '');
- }); // Trim each line extracting funcName : fullPath pair
-
+ });
+ // Trim each line extracting funcName : fullPath pair
var logInfoArray = stackSteps.map(function (line) {
var funcName;
var funcFullPath;
/* eslint-disable-next-line no-useless-escape */
-
var reg = /\(([^\)]+)\)/;
var regFirefox = /(.*?@)(\S+)(:\d+):\d+\)?$/;
-
if (line.match(reg)) {
funcName = line.split(' ').slice(0, -1).join(' ');
/* eslint-disable-next-line prefer-destructuring */
-
funcFullPath = line.match(reg)[1];
} else if (line.match(regFirefox)) {
funcName = line.split('@').slice(0, -1).join(' ');
/* eslint-disable-next-line prefer-destructuring */
-
funcFullPath = line.match(regFirefox)[2];
} else {
// For when func name is not available
funcName = 'function name is not available';
funcFullPath = line;
}
-
return [funcName, funcFullPath];
- }); // Convert array into object for better display using console.table
-
+ });
+ // Convert array into object for better display using console.table
var logInfoObject = {};
logInfoArray.forEach(function (pair) {
/* eslint-disable-next-line prefer-destructuring */
@@ -6323,22 +5829,18 @@
});
return logInfoObject;
};
-
var setChainPropAccess = function setChainPropAccess(owner, property) {
var chainInfo = getPropertyInChain(owner, property);
var base = chainInfo.base;
var prop = chainInfo.prop,
- chain = chainInfo.chain;
-
+ chain = chainInfo.chain;
if (chain) {
var setter = function setter(a) {
base = a;
-
if (a instanceof Object) {
setChainPropAccess(a, chain);
}
};
-
Object.defineProperty(owner, prop, {
get: function get() {
return base;
@@ -6347,10 +5849,8 @@
});
return;
}
-
var value = base[prop];
/* eslint-disable no-console, compat/compat */
-
setPropertyAccess(base, prop, {
get: function get() {
hit(source);
@@ -6374,7 +5874,6 @@
logOnStacktrace$1.injections = [getPropertyInChain, setPropertyAccess, hit, logMessage, isEmptyObject];
/* eslint-disable max-len */
-
/**
* @scriptlet prevent-xhr
*
@@ -6440,21 +5939,17 @@
* example.org#%#//scriptlet('prevent-xhr', 'example.org', 'length:100-300')
* ```
*/
-
/* eslint-enable max-len */
-
function preventXHR$1(source, propsToMatch, customResponseText) {
// do nothing if browser does not support Proxy (e.g. Internet Explorer)
// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Proxy
if (typeof Proxy === 'undefined') {
return;
}
-
var shouldPrevent = false;
var response = '';
var responseText = '';
var responseUrl;
-
var openWrapper = function openWrapper(target, thisArg, args) {
// Get method and url from .open()
var xhrData = {
@@ -6462,7 +5957,6 @@
url: args[1]
};
responseUrl = xhrData.url;
-
if (typeof propsToMatch === 'undefined') {
// Log if no propsToMatch given
logMessage(source, "xhr( ".concat(objectToString(xhrData), " )"), true);
@@ -6470,34 +5964,27 @@
} else {
shouldPrevent = matchRequestProps(source, propsToMatch, xhrData);
}
-
return Reflect.apply(target, thisArg, args);
};
-
var sendWrapper = function sendWrapper(target, thisArg, args) {
if (!shouldPrevent) {
return Reflect.apply(target, thisArg, args);
}
-
if (thisArg.responseType === 'blob') {
response = new Blob();
}
-
if (thisArg.responseType === 'arraybuffer') {
response = new ArrayBuffer();
}
-
if (customResponseText) {
var randomText = generateRandomResponse(customResponseText);
-
if (randomText) {
responseText = randomText;
} else {
logMessage(source, "Invalid range: ".concat(customResponseText));
}
- } // Mock response object
-
-
+ }
+ // Mock response object
Object.defineProperties(thisArg, {
readyState: {
value: 4,
@@ -6527,8 +6014,8 @@
value: 'OK',
writable: false
}
- }); // Mock events
-
+ });
+ // Mock events
setTimeout(function () {
var stateEvent = new Event('readystatechange');
thisArg.dispatchEvent(stateEvent);
@@ -6540,7 +6027,6 @@
hit(source);
return undefined;
};
-
var openHandler = {
apply: openWrapper
};
@@ -6550,9 +6036,10 @@
XMLHttpRequest.prototype.open = new Proxy(XMLHttpRequest.prototype.open, openHandler);
XMLHttpRequest.prototype.send = new Proxy(XMLHttpRequest.prototype.send, sendHandler);
}
- preventXHR$1.names = ['prevent-xhr', // aliases are needed for matching the related scriptlet converted into our syntax
+ preventXHR$1.names = ['prevent-xhr',
+ // aliases are needed for matching the related scriptlet converted into our syntax
'no-xhr-if.js', 'ubo-no-xhr-if.js', 'ubo-no-xhr-if'];
- preventXHR$1.injections = [hit, logMessage, objectToString, matchRequestProps, generateRandomResponse, toRegExp, isValidStrPattern, escapeRegExp, isEmptyObject, getObjectEntries, getNumberFromString, nativeIsFinite, nativeIsNaN, parseMatchProps, validateParsedData, getMatchPropsData, getRandomIntInclusive, getRandomStrByLength];
+ preventXHR$1.injections = [hit, logMessage, objectToString, matchRequestProps, generateRandomResponse, toRegExp, isValidStrPattern, escapeRegExp, isEmptyObject, getObjectEntries, getNumberFromString, nativeIsFinite, nativeIsNaN, parseMatchProps, validateParsedData, getMatchPropsData, getRequestProps, getRandomIntInclusive, getRandomStrByLength];
/**
* @scriptlet close-window
@@ -6561,7 +6048,7 @@
* Closes the browser tab immediately.
*
* > `window.close()` usage is restricted in Chrome. In this case
- * tab will only be closed if using AdGuard browser extension.
+ * tab will only be closed when using AdGuard browser extension.
*
* **Syntax**
* ```
@@ -6581,16 +6068,14 @@
* example.org#%#//scriptlet('close-window', '/example-page.html')
* ```
*/
-
function forceWindowClose$1(source) {
var path = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : '';
-
// https://github.com/AdguardTeam/Scriptlets/issues/158#issuecomment-993423036
if (typeof window.close !== 'function') {
var message = 'window.close() is not a function so \'close-window\' scriptlet is unavailable';
logMessage(source, message);
+ return;
}
-
var closeImmediately = function closeImmediately() {
try {
hit(source);
@@ -6601,12 +6086,10 @@
logMessage(source, e);
}
};
-
var closeByExtension = function closeByExtension() {
var extCall = function extCall() {
dispatchEvent(new Event('adguard:scriptlet-close-window'));
};
-
window.addEventListener('adguard:subscribed-to-close-window', extCall, {
once: true
});
@@ -6616,20 +6099,16 @@
});
}, 5000);
};
-
var shouldClose = function shouldClose() {
if (path === '') {
return true;
}
-
var pathRegexp = toRegExp(path);
var currentPath = "".concat(window.location.pathname).concat(window.location.search);
return pathRegexp.test(currentPath);
};
-
if (shouldClose()) {
closeImmediately();
-
if (navigator.userAgent.indexOf('Chrome') > -1) {
closeByExtension();
}
@@ -6639,7 +6118,6 @@
forceWindowClose$1.injections = [hit, toRegExp, logMessage];
/* eslint-disable max-len */
-
/**
* @scriptlet prevent-refresh
*
@@ -6667,13 +6145,10 @@
* cryptodirectories.com#%#//scriptlet('prevent-refresh', 3)
* ```
*/
-
/* eslint-enable max-len */
-
function preventRefresh$1(source, delaySec) {
var getMetaElements = function getMetaElements() {
var metaNodes = [];
-
try {
metaNodes = document.querySelectorAll('meta[http-equiv="refresh" i][content]');
} catch (e) {
@@ -6684,72 +6159,59 @@
logMessage(source, e);
}
}
-
return Array.from(metaNodes);
};
-
var getMetaContentDelay = function getMetaContentDelay(metaElements) {
var delays = metaElements.map(function (meta) {
var contentString = meta.getAttribute('content');
-
if (contentString.length === 0) {
return null;
}
-
- var contentDelay; // https://developer.mozilla.org/en-US/docs/Web/HTML/Element/meta#attr-http-equiv
-
+ var contentDelay;
+ // https://developer.mozilla.org/en-US/docs/Web/HTML/Element/meta#attr-http-equiv
var limiterIndex = contentString.indexOf(';');
-
if (limiterIndex !== -1) {
var delaySubstring = contentString.substring(0, limiterIndex);
contentDelay = getNumberFromString(delaySubstring);
} else {
contentDelay = getNumberFromString(contentString);
}
-
return contentDelay;
}).filter(function (delay) {
return delay !== null;
- }); // Check if "delays" array is empty, may happens when meta's content is invalid
+ });
+ // Check if "delays" array is empty, may happens when meta's content is invalid
// and reduce() method cannot be used with empty arrays without initial value
-
if (!delays.length) {
return null;
- } // Get smallest delay of all metas on the page
-
-
+ }
+ // Get smallest delay of all metas on the page
var minDelay = delays.reduce(function (a, b) {
return Math.min(a, b);
- }); // eslint-disable-next-line consistent-return
-
+ });
+ // eslint-disable-next-line consistent-return
return minDelay;
};
-
var stop = function stop() {
var metaElements = getMetaElements();
-
if (metaElements.length === 0) {
return;
}
-
- var secondsToRun = getNumberFromString(delaySec); // Check if argument is provided
-
+ var secondsToRun = getNumberFromString(delaySec);
+ // Check if argument is provided
if (secondsToRun === null) {
secondsToRun = getMetaContentDelay(metaElements);
- } // Check if meta tag has delay
-
-
+ }
+ // Check if meta tag has delay
if (secondsToRun === null) {
return;
}
-
var delayMs = secondsToRun * 1000;
setTimeout(function () {
window.stop();
hit(source);
}, delayMs);
};
-
if (document.readyState === 'loading') {
document.addEventListener('DOMContentLoaded', stop, {
once: true
@@ -6758,15 +6220,16 @@
stop();
}
}
- preventRefresh$1.names = ['prevent-refresh', // Aliases are needed for matching the related scriptlet converted into our syntax
+ preventRefresh$1.names = ['prevent-refresh',
+ // Aliases are needed for matching the related scriptlet converted into our syntax
// These are used by UBO rules syntax
// https://github.com/gorhill/uBlock/wiki/Resources-Library#general-purpose-scriptlets
- 'refresh-defuser.js', 'refresh-defuser', // Prefix 'ubo-' is required to run converted rules
+ 'refresh-defuser.js', 'refresh-defuser',
+ // Prefix 'ubo-' is required to run converted rules
'ubo-refresh-defuser.js', 'ubo-refresh-defuser'];
preventRefresh$1.injections = [hit, getNumberFromString, logMessage, nativeIsNaN];
/* eslint-disable max-len, consistent-return */
-
/**
* @scriptlet prevent-element-src-loading
*
@@ -6790,15 +6253,12 @@
* example.org#%#//scriptlet('prevent-element-src-loading', 'script' ,'adsbygoogle')
* ```
*/
-
/* eslint-enable max-len */
-
function preventElementSrcLoading$1(source, tagName, match) {
// do nothing if browser does not support Proxy or Reflect
if (typeof Proxy === 'undefined' || typeof Reflect === 'undefined') {
return;
}
-
var srcMockData = {
// "KCk9Pnt9" = "()=>{}"
script: 'data:text/javascript;base64,KCk9Pnt9',
@@ -6808,7 +6268,6 @@
iframe: 'data:text/html;base64, PGRpdj48L2Rpdj4='
};
var instance;
-
if (tagName === 'script') {
instance = HTMLScriptElement;
} else if (tagName === 'img') {
@@ -6817,62 +6276,60 @@
instance = HTMLIFrameElement;
} else {
return;
- } // For websites that use Trusted Types
- // https://w3c.github.io/webappsec-trusted-types/dist/spec/
-
+ }
+ // For websites that use Trusted Types
+ // https://w3c.github.io/webappsec-trusted-types/dist/spec/
var hasTrustedTypes = window.trustedTypes && typeof window.trustedTypes.createPolicy === 'function';
var policy;
-
if (hasTrustedTypes) {
- policy = window.trustedTypes.createPolicy('mock', {
+ // The name for the trusted-types policy should only be 'AGPolicy',because corelibs can
+ // allow our policy if the server has restricted the creation of a trusted-types policy with
+ // the directive 'Content-Security-Policy: trusted-types ;`.
+ // If such a header is presented in the server response, corelibs adds permission to create
+ // the 'AGPolicy' policy with the 'allow-duplicates' option to prevent errors.
+ // See AG-18204 for details.
+ policy = window.trustedTypes.createPolicy('AGPolicy', {
createScriptURL: function createScriptURL(arg) {
return arg;
}
});
}
-
var SOURCE_PROPERTY_NAME = 'src';
var ONERROR_PROPERTY_NAME = 'onerror';
- var searchRegexp = toRegExp(match); // This will be needed to silent error events on matched element,
- // as url wont be available
+ var searchRegexp = toRegExp(match);
+ // This will be needed to silent error events on matched element,
+ // as url wont be available
var setMatchedAttribute = function setMatchedAttribute(elem) {
return elem.setAttribute(source.name, 'matched');
};
-
var setAttributeWrapper = function setAttributeWrapper(target, thisArg, args) {
// Check if arguments are present
if (!args[0] || !args[1]) {
return Reflect.apply(target, thisArg, args);
}
-
var nodeName = thisArg.nodeName.toLowerCase();
var attrName = args[0].toLowerCase();
var attrValue = args[1];
var isMatched = attrName === SOURCE_PROPERTY_NAME && tagName.toLowerCase() === nodeName && srcMockData[nodeName] && searchRegexp.test(attrValue);
-
if (!isMatched) {
return Reflect.apply(target, thisArg, args);
}
-
hit(source);
- setMatchedAttribute(thisArg); // Forward the URI that corresponds with element's MIME type
-
+ setMatchedAttribute(thisArg);
+ // Forward the URI that corresponds with element's MIME type
return Reflect.apply(target, thisArg, [attrName, srcMockData[nodeName]]);
};
-
var setAttributeHandler = {
apply: setAttributeWrapper
- }; // eslint-disable-next-line max-len
-
+ };
+ // eslint-disable-next-line max-len
instance.prototype.setAttribute = new Proxy(Element.prototype.setAttribute, setAttributeHandler);
var origSrcDescriptor = safeGetDescriptor(instance.prototype, SOURCE_PROPERTY_NAME);
-
if (!origSrcDescriptor) {
return;
}
-
Object.defineProperty(instance.prototype, SOURCE_PROPERTY_NAME, {
enumerable: true,
configurable: true,
@@ -6882,33 +6339,30 @@
set: function set(urlValue) {
var nodeName = this.nodeName.toLowerCase();
var isMatched = tagName.toLowerCase() === nodeName && srcMockData[nodeName] && searchRegexp.test(urlValue);
-
if (!isMatched) {
origSrcDescriptor.set.call(this, urlValue);
return true;
- } // eslint-disable-next-line no-undef
-
+ }
+ // eslint-disable-next-line no-undef
if (policy && urlValue instanceof TrustedScriptURL) {
var trustedSrc = policy.createScriptURL(urlValue);
origSrcDescriptor.set.call(this, trustedSrc);
hit(source);
return;
}
-
setMatchedAttribute(this);
origSrcDescriptor.set.call(this, srcMockData[nodeName]);
hit(source);
}
- }); // https://github.com/AdguardTeam/Scriptlets/issues/228
- // Prevent error event being triggered by other sources
+ });
+ // https://github.com/AdguardTeam/Scriptlets/issues/228
+ // Prevent error event being triggered by other sources
var origOnerrorDescriptor = safeGetDescriptor(HTMLElement.prototype, ONERROR_PROPERTY_NAME);
-
if (!origOnerrorDescriptor) {
return;
}
-
Object.defineProperty(HTMLElement.prototype, ONERROR_PROPERTY_NAME, {
enumerable: true,
configurable: true,
@@ -6917,37 +6371,30 @@
},
set: function set(cb) {
var isMatched = this.getAttribute(source.name) === 'matched';
-
if (!isMatched) {
origOnerrorDescriptor.set.call(this, cb);
return true;
}
-
origOnerrorDescriptor.set.call(this, noopFunc);
return true;
}
});
-
var addEventListenerWrapper = function addEventListenerWrapper(target, thisArg, args) {
// Check if arguments are present
if (!args[0] || !args[1]) {
return Reflect.apply(target, thisArg, args);
}
-
var eventName = args[0];
- var isMatched = thisArg.getAttribute(source.name) === 'matched' && eventName === 'error';
-
+ var isMatched = typeof thisArg.getAttribute === 'function' && thisArg.getAttribute(source.name) === 'matched' && eventName === 'error';
if (isMatched) {
return Reflect.apply(target, thisArg, [eventName, noopFunc]);
}
-
return Reflect.apply(target, thisArg, args);
};
-
var addEventListenerHandler = {
apply: addEventListenerWrapper
- }; // eslint-disable-next-line max-len
-
+ };
+ // eslint-disable-next-line max-len
EventTarget.prototype.addEventListener = new Proxy(EventTarget.prototype.addEventListener, addEventListenerHandler);
}
preventElementSrcLoading$1.names = ['prevent-element-src-loading'];
@@ -6965,1076 +6412,213 @@
* example.org#%#//scriptlet('no-topics')
* ```
*/
-
function noTopics$1(source) {
var TOPICS_PROPERTY_NAME = 'browsingTopics';
-
if (Document instanceof Object === false) {
return;
}
-
if (!Object.prototype.hasOwnProperty.call(Document.prototype, TOPICS_PROPERTY_NAME) || Document.prototype[TOPICS_PROPERTY_NAME] instanceof Function === false) {
return;
- } // document.browsingTopics() is async function so it's better to return noopPromiseResolve()
- // https://github.com/patcg-individual-drafts/topics#the-api-and-how-it-works
-
+ }
+ // document.browsingTopics() is async function so it's better to return noopPromiseResolve()
+ // https://github.com/patcg-individual-drafts/topics#the-api-and-how-it-works
Document.prototype[TOPICS_PROPERTY_NAME] = function () {
return noopPromiseResolve('[]');
};
-
hit(source);
}
noTopics$1.names = ['no-topics'];
noTopics$1.injections = [hit, noopPromiseResolve];
- function createCommonjsModule(fn) {
- var module = { exports: {} };
- return fn(module, module.exports), module.exports;
- }
-
- function commonjsRequire (target) {
- throw new Error('Could not dynamically require "' + target + '". Please configure the dynamicRequireTargets option of @rollup/plugin-commonjs appropriately for this require call to behave properly.');
- }
-
+ /* eslint-disable max-len */
/**
- * Copyright (c) 2014-present, Facebook, Inc.
+ * @trustedScriptlet trusted-replace-xhr-response
+ *
+ * @description
+ * Replaces response content of `xhr` requests if **all** given parameters match.
+ *
+ * **Syntax**
+ * ```
+ * example.org#%#//scriptlet('trusted-replace-xhr-response'[, pattern, replacement[, propsToMatch]])
+ * ```
+ *
+ * - pattern - optional, argument for matching contents of responseText that should be replaced. If set, `replacement` is required;
+ * possible values:
+ * - '*' to match all text content
+ * - non-empty string
+ * - regular expression
+ * - replacement — optional, should be set if `pattern` is set. String to replace matched content with. Empty string to remove content.
+ * - propsToMatch — optional, string of space-separated properties to match for extra condition; possible props:
+ * - string or regular expression for matching the URL passed to `.open()` call;
+ * - colon-separated pairs name:value where
+ * - name - name is string or regular expression for matching XMLHttpRequest property name
+ * - value is string or regular expression for matching the value of the option passed to `.open()` call
+ *
+ * > Usage with no arguments will log XMLHttpRequest objects to browser console;
+ * which is useful for debugging but not permitted for production filter lists.
+ *
+ * **Examples**
+ * 1. Log all XMLHttpRequests
+ * ```
+ * example.org#%#//scriptlet('trusted-replace-xhr-response')
+ * ```
+ *
+ * 2. Replace text content of XMLHttpRequests with specific url
+ * ```
+ * example.org#%#//scriptlet('trusted-replace-xhr-response', 'adb_detect:true', 'adb_detect:false', 'example.org')
+ * example.org#%#//scriptlet('trusted-replace-xhr-response', '/#EXT-X-VMAP-AD-BREAK[\s\S]*?/', '#EXT-X-ENDLIST', 'example.org')
+ * ```
+ *
+ * 3. Remove all text content of XMLHttpRequests with specific request method
+ * ```
+ * example.org#%#//scriptlet('trusted-replace-xhr-response', '*', '', 'method:GET')
+ * ```
*
- * This source code is licensed under the MIT license found in the
- * LICENSE file in the root directory of this source tree.
+ * 4. Replace text content of XMLHttpRequests matching by URL regex and request methods
+ * ```
+ * example.org#%#//scriptlet('trusted-replace-xhr-response', '/#EXT-X-VMAP-AD-BREAK[\s\S]*?/', '#EXT-X-ENDLIST', '/\.m3u8/ method:/GET|HEAD/')
+ * ```
+ * 5. Remove all text content of all XMLHttpRequests for example.com
+ * ```
+ * example.org#%#//scriptlet('trusted-replace-xhr-response', '*', '', 'example.com')
+ * ```
*/
- var runtime_1 = createCommonjsModule(function (module) {
- var runtime = function (exports) {
-
- var Op = Object.prototype;
- var hasOwn = Op.hasOwnProperty;
- var undefined$1; // More compressible than void 0.
-
- var $Symbol = typeof Symbol === "function" ? Symbol : {};
- var iteratorSymbol = $Symbol.iterator || "@@iterator";
- var asyncIteratorSymbol = $Symbol.asyncIterator || "@@asyncIterator";
- var toStringTagSymbol = $Symbol.toStringTag || "@@toStringTag";
-
- function define(obj, key, value) {
- Object.defineProperty(obj, key, {
- value: value,
- enumerable: true,
- configurable: true,
- writable: true
- });
- return obj[key];
- }
-
- try {
- // IE 8 has a broken Object.defineProperty that only works on DOM objects.
- define({}, "");
- } catch (err) {
- define = function define(obj, key, value) {
- return obj[key] = value;
- };
- }
-
- function wrap(innerFn, outerFn, self, tryLocsList) {
- // If outerFn provided and outerFn.prototype is a Generator, then outerFn.prototype instanceof Generator.
- var protoGenerator = outerFn && outerFn.prototype instanceof Generator ? outerFn : Generator;
- var generator = Object.create(protoGenerator.prototype);
- var context = new Context(tryLocsList || []); // The ._invoke method unifies the implementations of the .next,
- // .throw, and .return methods.
-
- generator._invoke = makeInvokeMethod(innerFn, self, context);
- return generator;
- }
-
- exports.wrap = wrap; // Try/catch helper to minimize deoptimizations. Returns a completion
- // record like context.tryEntries[i].completion. This interface could
- // have been (and was previously) designed to take a closure to be
- // invoked without arguments, but in all the cases we care about we
- // already have an existing method we want to call, so there's no need
- // to create a new function object. We can even get away with assuming
- // the method takes exactly one argument, since that happens to be true
- // in every case, so we don't have to touch the arguments object. The
- // only additional allocation required is the completion record, which
- // has a stable shape and so hopefully should be cheap to allocate.
+ /* eslint-enable max-len */
+ function trustedReplaceXhrResponse$1(source) {
+ var pattern = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : '';
+ var replacement = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : '';
+ var propsToMatch = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : '';
+ // do nothing if browser does not support Proxy (e.g. Internet Explorer)
+ // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Proxy
+ if (typeof Proxy === 'undefined') {
+ return;
+ }
- function tryCatch(fn, obj, arg) {
- try {
- return {
- type: "normal",
- arg: fn.call(obj, arg)
- };
- } catch (err) {
- return {
- type: "throw",
- arg: err
- };
- }
+ // Only allow pattern as empty string for logging purposes
+ if (pattern === '' && replacement !== '') {
+ var message = 'Pattern argument should not be empty string.';
+ logMessage(source, message);
+ return;
+ }
+ var shouldLog = pattern === '' && replacement === '';
+ var nativeOpen = window.XMLHttpRequest.prototype.open;
+ var nativeSend = window.XMLHttpRequest.prototype.send;
+ var shouldReplace = false;
+ var xhrData;
+ var requestHeaders = [];
+ var openWrapper = function openWrapper(target, thisArg, args) {
+ // eslint-disable-next-line prefer-spread
+ xhrData = getXhrData.apply(null, args);
+ if (shouldLog) {
+ // Log if no propsToMatch given
+ var _message = "xhr( ".concat(objectToString(xhrData), " )");
+ logMessage(source, _message, true);
+ hit(source);
+ return Reflect.apply(target, thisArg, args);
}
+ shouldReplace = matchRequestProps(source, propsToMatch, xhrData);
- var GenStateSuspendedStart = "suspendedStart";
- var GenStateSuspendedYield = "suspendedYield";
- var GenStateExecuting = "executing";
- var GenStateCompleted = "completed"; // Returning this object from the innerFn has the same effect as
- // breaking out of the dispatch switch statement.
-
- var ContinueSentinel = {}; // Dummy constructor functions that we use as the .constructor and
- // .constructor.prototype properties for functions that return Generator
- // objects. For full spec compliance, you may wish to configure your
- // minifier not to mangle the names of these two functions.
-
- function Generator() {}
-
- function GeneratorFunction() {}
-
- function GeneratorFunctionPrototype() {} // This is a polyfill for %IteratorPrototype% for environments that
- // don't natively support it.
-
-
- var IteratorPrototype = {};
-
- IteratorPrototype[iteratorSymbol] = function () {
- return this;
- };
-
- var getProto = Object.getPrototypeOf;
- var NativeIteratorPrototype = getProto && getProto(getProto(values([])));
+ // Trap setRequestHeader of target xhr object to mimic request headers later
+ if (shouldReplace) {
+ var setRequestHeaderWrapper = function setRequestHeaderWrapper(target, thisArg, args) {
+ // Collect headers
+ requestHeaders.push(args);
+ return Reflect.apply(target, thisArg, args);
+ };
+ var setRequestHeaderHandler = {
+ apply: setRequestHeaderWrapper
+ };
- if (NativeIteratorPrototype && NativeIteratorPrototype !== Op && hasOwn.call(NativeIteratorPrototype, iteratorSymbol)) {
- // This environment has a native %IteratorPrototype%; use it instead
- // of the polyfill.
- IteratorPrototype = NativeIteratorPrototype;
+ // setRequestHeader can only be called on open xhr object,
+ // so we can safely proxy it here
+ thisArg.setRequestHeader = new Proxy(thisArg.setRequestHeader, setRequestHeaderHandler);
}
-
- var Gp = GeneratorFunctionPrototype.prototype = Generator.prototype = Object.create(IteratorPrototype);
- GeneratorFunction.prototype = Gp.constructor = GeneratorFunctionPrototype;
- GeneratorFunctionPrototype.constructor = GeneratorFunction;
- GeneratorFunction.displayName = define(GeneratorFunctionPrototype, toStringTagSymbol, "GeneratorFunction"); // Helper for defining the .next, .throw, and .return methods of the
- // Iterator interface in terms of a single ._invoke method.
-
- function defineIteratorMethods(prototype) {
- ["next", "throw", "return"].forEach(function (method) {
- define(prototype, method, function (arg) {
- return this._invoke(method, arg);
- });
- });
+ return Reflect.apply(target, thisArg, args);
+ };
+ var sendWrapper = function sendWrapper(target, thisArg, args) {
+ if (!shouldReplace) {
+ return Reflect.apply(target, thisArg, args);
}
- exports.isGeneratorFunction = function (genFun) {
- var ctor = typeof genFun === "function" && genFun.constructor;
- return ctor ? ctor === GeneratorFunction || // For the native GeneratorFunction constructor, the best we can
- // do is to check its .name property.
- (ctor.displayName || ctor.name) === "GeneratorFunction" : false;
- };
-
- exports.mark = function (genFun) {
- if (Object.setPrototypeOf) {
- Object.setPrototypeOf(genFun, GeneratorFunctionPrototype);
- } else {
- genFun.__proto__ = GeneratorFunctionPrototype;
- define(genFun, toStringTagSymbol, "GeneratorFunction");
+ /**
+ * Create separate XHR request with original request's input
+ * to be able to collect response data without triggering
+ * listeners on original XHR object
+ */
+ var forgedRequest = new XMLHttpRequest();
+ forgedRequest.addEventListener('readystatechange', function () {
+ if (forgedRequest.readyState !== 4) {
+ return;
}
+ var readyState = forgedRequest.readyState,
+ response = forgedRequest.response,
+ responseText = forgedRequest.responseText,
+ responseURL = forgedRequest.responseURL,
+ responseXML = forgedRequest.responseXML,
+ status = forgedRequest.status,
+ statusText = forgedRequest.statusText; // Extract content from response
+ var content = responseText || response;
+ if (typeof content !== 'string') {
+ return;
+ }
+ var patternRegexp = pattern === '*' ? /(\n|.)*/ : toRegExp(pattern);
+ var modifiedContent = content.replace(patternRegexp, replacement);
- genFun.prototype = Object.create(Gp);
- return genFun;
- }; // Within the body of any async function, `await x` is transformed to
- // `yield regeneratorRuntime.awrap(x)`, so that the runtime can test
- // `hasOwn.call(value, "__await")` to determine if the yielded value is
- // meant to be awaited.
-
-
- exports.awrap = function (arg) {
- return {
- __await: arg
- };
- };
-
- function AsyncIterator(generator, PromiseImpl) {
- function invoke(method, arg, resolve, reject) {
- var record = tryCatch(generator[method], generator, arg);
-
- if (record.type === "throw") {
- reject(record.arg);
- } else {
- var result = record.arg;
- var value = result.value;
-
- if (value && typeof value === "object" && hasOwn.call(value, "__await")) {
- return PromiseImpl.resolve(value.__await).then(function (value) {
- invoke("next", value, resolve, reject);
- }, function (err) {
- invoke("throw", err, resolve, reject);
- });
- }
-
- return PromiseImpl.resolve(value).then(function (unwrapped) {
- // When a yielded Promise is resolved, its final value becomes
- // the .value of the Promise<{value,done}> result for the
- // current iteration.
- result.value = unwrapped;
- resolve(result);
- }, function (error) {
- // If a rejected Promise was yielded, throw the rejection back
- // into the async generator function so it can be handled there.
- return invoke("throw", error, resolve, reject);
- });
- }
- }
-
- var previousPromise;
-
- function enqueue(method, arg) {
- function callInvokeWithMethodAndArg() {
- return new PromiseImpl(function (resolve, reject) {
- invoke(method, arg, resolve, reject);
- });
- }
-
- return previousPromise = // If enqueue has been called before, then we want to wait until
- // all previous Promises have been resolved before calling invoke,
- // so that results are always delivered in the correct order. If
- // enqueue has not been called before, then it is important to
- // call invoke immediately, without waiting on a callback to fire,
- // so that the async generator function has the opportunity to do
- // any necessary setup in a predictable way. This predictability
- // is why the Promise constructor synchronously invokes its
- // executor callback, and why async functions synchronously
- // execute code before the first await. Since we implement simple
- // async functions in terms of async generators, it is especially
- // important to get this right, even though it requires care.
- previousPromise ? previousPromise.then(callInvokeWithMethodAndArg, // Avoid propagating failures to Promises returned by later
- // invocations of the iterator.
- callInvokeWithMethodAndArg) : callInvokeWithMethodAndArg();
- } // Define the unified helper method that is used to implement .next,
- // .throw, and .return (see defineIteratorMethods).
-
-
- this._invoke = enqueue;
- }
-
- defineIteratorMethods(AsyncIterator.prototype);
-
- AsyncIterator.prototype[asyncIteratorSymbol] = function () {
- return this;
- };
-
- exports.AsyncIterator = AsyncIterator; // Note that simple async functions are implemented on top of
- // AsyncIterator objects; they just return a Promise for the value of
- // the final result produced by the iterator.
-
- exports.async = function (innerFn, outerFn, self, tryLocsList, PromiseImpl) {
- if (PromiseImpl === void 0) PromiseImpl = Promise;
- var iter = new AsyncIterator(wrap(innerFn, outerFn, self, tryLocsList), PromiseImpl);
- return exports.isGeneratorFunction(outerFn) ? iter // If outerFn is a generator, return the full iterator.
- : iter.next().then(function (result) {
- return result.done ? result.value : iter.next();
- });
- };
-
- function makeInvokeMethod(innerFn, self, context) {
- var state = GenStateSuspendedStart;
- return function invoke(method, arg) {
- if (state === GenStateExecuting) {
- throw new Error("Generator is already running");
- }
-
- if (state === GenStateCompleted) {
- if (method === "throw") {
- throw arg;
- } // Be forgiving, per 25.3.3.3.3 of the spec:
- // https://people.mozilla.org/~jorendorff/es6-draft.html#sec-generatorresume
-
-
- return doneResult();
- }
-
- context.method = method;
- context.arg = arg;
-
- while (true) {
- var delegate = context.delegate;
-
- if (delegate) {
- var delegateResult = maybeInvokeDelegate(delegate, context);
-
- if (delegateResult) {
- if (delegateResult === ContinueSentinel) continue;
- return delegateResult;
- }
- }
-
- if (context.method === "next") {
- // Setting context._sent for legacy support of Babel's
- // function.sent implementation.
- context.sent = context._sent = context.arg;
- } else if (context.method === "throw") {
- if (state === GenStateSuspendedStart) {
- state = GenStateCompleted;
- throw context.arg;
- }
-
- context.dispatchException(context.arg);
- } else if (context.method === "return") {
- context.abrupt("return", context.arg);
- }
-
- state = GenStateExecuting;
- var record = tryCatch(innerFn, self, context);
-
- if (record.type === "normal") {
- // If an exception is thrown from innerFn, we leave state ===
- // GenStateExecuting and loop back for another invocation.
- state = context.done ? GenStateCompleted : GenStateSuspendedYield;
-
- if (record.arg === ContinueSentinel) {
- continue;
- }
-
- return {
- value: record.arg,
- done: context.done
- };
- } else if (record.type === "throw") {
- state = GenStateCompleted; // Dispatch the exception by looping back around to the
- // context.dispatchException(context.arg) call above.
-
- context.method = "throw";
- context.arg = record.arg;
- }
- }
- };
- } // Call delegate.iterator[context.method](context.arg) and handle the
- // result, either by returning a { value, done } result from the
- // delegate iterator, or by modifying context.method and context.arg,
- // setting context.delegate to null, and returning the ContinueSentinel.
-
-
- function maybeInvokeDelegate(delegate, context) {
- var method = delegate.iterator[context.method];
-
- if (method === undefined$1) {
- // A .throw or .return when the delegate iterator has no .throw
- // method always terminates the yield* loop.
- context.delegate = null;
-
- if (context.method === "throw") {
- // Note: ["return"] must be used for ES3 parsing compatibility.
- if (delegate.iterator["return"]) {
- // If the delegate iterator has a return method, give it a
- // chance to clean up.
- context.method = "return";
- context.arg = undefined$1;
- maybeInvokeDelegate(delegate, context);
-
- if (context.method === "throw") {
- // If maybeInvokeDelegate(context) changed context.method from
- // "return" to "throw", let that override the TypeError below.
- return ContinueSentinel;
- }
- }
-
- context.method = "throw";
- context.arg = new TypeError("The iterator does not provide a 'throw' method");
- }
-
- return ContinueSentinel;
- }
-
- var record = tryCatch(method, delegate.iterator, context.arg);
-
- if (record.type === "throw") {
- context.method = "throw";
- context.arg = record.arg;
- context.delegate = null;
- return ContinueSentinel;
- }
-
- var info = record.arg;
-
- if (!info) {
- context.method = "throw";
- context.arg = new TypeError("iterator result is not an object");
- context.delegate = null;
- return ContinueSentinel;
- }
-
- if (info.done) {
- // Assign the result of the finished delegate to the temporary
- // variable specified by delegate.resultName (see delegateYield).
- context[delegate.resultName] = info.value; // Resume execution at the desired location (see delegateYield).
-
- context.next = delegate.nextLoc; // If context.method was "throw" but the delegate handled the
- // exception, let the outer generator proceed normally. If
- // context.method was "next", forget context.arg since it has been
- // "consumed" by the delegate iterator. If context.method was
- // "return", allow the original .return call to continue in the
- // outer generator.
-
- if (context.method !== "return") {
- context.method = "next";
- context.arg = undefined$1;
- }
- } else {
- // Re-yield the result returned by the delegate method.
- return info;
- } // The delegate iterator is finished, so forget it and continue with
- // the outer generator.
-
-
- context.delegate = null;
- return ContinueSentinel;
- } // Define Generator.prototype.{next,throw,return} in terms of the
- // unified ._invoke helper method.
-
-
- defineIteratorMethods(Gp);
- define(Gp, toStringTagSymbol, "Generator"); // A Generator should always return itself as the iterator object when the
- // @@iterator function is called on it. Some browsers' implementations of the
- // iterator prototype chain incorrectly implement this, causing the Generator
- // object to not be returned from this call. This ensures that doesn't happen.
- // See https://github.com/facebook/regenerator/issues/274 for more details.
-
- Gp[iteratorSymbol] = function () {
- return this;
- };
-
- Gp.toString = function () {
- return "[object Generator]";
- };
-
- function pushTryEntry(locs) {
- var entry = {
- tryLoc: locs[0]
- };
-
- if (1 in locs) {
- entry.catchLoc = locs[1];
- }
-
- if (2 in locs) {
- entry.finallyLoc = locs[2];
- entry.afterLoc = locs[3];
- }
-
- this.tryEntries.push(entry);
- }
-
- function resetTryEntry(entry) {
- var record = entry.completion || {};
- record.type = "normal";
- delete record.arg;
- entry.completion = record;
- }
-
- function Context(tryLocsList) {
- // The root entry object (effectively a try statement without a catch
- // or a finally block) gives us a place to store values thrown from
- // locations where there is no enclosing try statement.
- this.tryEntries = [{
- tryLoc: "root"
- }];
- tryLocsList.forEach(pushTryEntry, this);
- this.reset(true);
- }
-
- exports.keys = function (object) {
- var keys = [];
-
- for (var key in object) {
- keys.push(key);
- }
-
- keys.reverse(); // Rather than returning an object with a next method, we keep
- // things simple and return the next function itself.
-
- return function next() {
- while (keys.length) {
- var key = keys.pop();
-
- if (key in object) {
- next.value = key;
- next.done = false;
- return next;
- }
- } // To avoid creating an additional object, we just hang the .value
- // and .done properties off the next function object itself. This
- // also ensures that the minifier will not anonymize the function.
-
-
- next.done = true;
- return next;
- };
- };
-
- function values(iterable) {
- if (iterable) {
- var iteratorMethod = iterable[iteratorSymbol];
-
- if (iteratorMethod) {
- return iteratorMethod.call(iterable);
- }
-
- if (typeof iterable.next === "function") {
- return iterable;
- }
-
- if (!isNaN(iterable.length)) {
- var i = -1,
- next = function next() {
- while (++i < iterable.length) {
- if (hasOwn.call(iterable, i)) {
- next.value = iterable[i];
- next.done = false;
- return next;
- }
- }
-
- next.value = undefined$1;
- next.done = true;
- return next;
- };
-
- return next.next = next;
- }
- } // Return an iterator with no values.
-
-
- return {
- next: doneResult
- };
- }
-
- exports.values = values;
-
- function doneResult() {
- return {
- value: undefined$1,
- done: true
- };
- }
-
- Context.prototype = {
- constructor: Context,
- reset: function reset(skipTempReset) {
- this.prev = 0;
- this.next = 0; // Resetting context._sent for legacy support of Babel's
- // function.sent implementation.
-
- this.sent = this._sent = undefined$1;
- this.done = false;
- this.delegate = null;
- this.method = "next";
- this.arg = undefined$1;
- this.tryEntries.forEach(resetTryEntry);
-
- if (!skipTempReset) {
- for (var name in this) {
- // Not sure about the optimal order of these conditions:
- if (name.charAt(0) === "t" && hasOwn.call(this, name) && !isNaN(+name.slice(1))) {
- this[name] = undefined$1;
- }
- }
- }
- },
- stop: function stop() {
- this.done = true;
- var rootEntry = this.tryEntries[0];
- var rootRecord = rootEntry.completion;
-
- if (rootRecord.type === "throw") {
- throw rootRecord.arg;
- }
-
- return this.rval;
- },
- dispatchException: function dispatchException(exception) {
- if (this.done) {
- throw exception;
- }
-
- var context = this;
-
- function handle(loc, caught) {
- record.type = "throw";
- record.arg = exception;
- context.next = loc;
-
- if (caught) {
- // If the dispatched exception was caught by a catch block,
- // then let that catch block handle the exception normally.
- context.method = "next";
- context.arg = undefined$1;
- }
-
- return !!caught;
- }
-
- for (var i = this.tryEntries.length - 1; i >= 0; --i) {
- var entry = this.tryEntries[i];
- var record = entry.completion;
-
- if (entry.tryLoc === "root") {
- // Exception thrown outside of any try block that could handle
- // it, so set the completion value of the entire function to
- // throw the exception.
- return handle("end");
- }
-
- if (entry.tryLoc <= this.prev) {
- var hasCatch = hasOwn.call(entry, "catchLoc");
- var hasFinally = hasOwn.call(entry, "finallyLoc");
-
- if (hasCatch && hasFinally) {
- if (this.prev < entry.catchLoc) {
- return handle(entry.catchLoc, true);
- } else if (this.prev < entry.finallyLoc) {
- return handle(entry.finallyLoc);
- }
- } else if (hasCatch) {
- if (this.prev < entry.catchLoc) {
- return handle(entry.catchLoc, true);
- }
- } else if (hasFinally) {
- if (this.prev < entry.finallyLoc) {
- return handle(entry.finallyLoc);
- }
- } else {
- throw new Error("try statement without catch or finally");
- }
- }
- }
- },
- abrupt: function abrupt(type, arg) {
- for (var i = this.tryEntries.length - 1; i >= 0; --i) {
- var entry = this.tryEntries[i];
-
- if (entry.tryLoc <= this.prev && hasOwn.call(entry, "finallyLoc") && this.prev < entry.finallyLoc) {
- var finallyEntry = entry;
- break;
- }
- }
-
- if (finallyEntry && (type === "break" || type === "continue") && finallyEntry.tryLoc <= arg && arg <= finallyEntry.finallyLoc) {
- // Ignore the finally entry if control is not jumping to a
- // location outside the try/catch block.
- finallyEntry = null;
- }
-
- var record = finallyEntry ? finallyEntry.completion : {};
- record.type = type;
- record.arg = arg;
-
- if (finallyEntry) {
- this.method = "next";
- this.next = finallyEntry.finallyLoc;
- return ContinueSentinel;
- }
-
- return this.complete(record);
- },
- complete: function complete(record, afterLoc) {
- if (record.type === "throw") {
- throw record.arg;
- }
-
- if (record.type === "break" || record.type === "continue") {
- this.next = record.arg;
- } else if (record.type === "return") {
- this.rval = this.arg = record.arg;
- this.method = "return";
- this.next = "end";
- } else if (record.type === "normal" && afterLoc) {
- this.next = afterLoc;
- }
-
- return ContinueSentinel;
- },
- finish: function finish(finallyLoc) {
- for (var i = this.tryEntries.length - 1; i >= 0; --i) {
- var entry = this.tryEntries[i];
-
- if (entry.finallyLoc === finallyLoc) {
- this.complete(entry.completion, entry.afterLoc);
- resetTryEntry(entry);
- return ContinueSentinel;
- }
- }
- },
- "catch": function _catch(tryLoc) {
- for (var i = this.tryEntries.length - 1; i >= 0; --i) {
- var entry = this.tryEntries[i];
-
- if (entry.tryLoc === tryLoc) {
- var record = entry.completion;
-
- if (record.type === "throw") {
- var thrown = record.arg;
- resetTryEntry(entry);
- }
-
- return thrown;
- }
- } // The context.catch method must only be called with a location
- // argument that corresponds to a known catch block.
-
-
- throw new Error("illegal catch attempt");
- },
- delegateYield: function delegateYield(iterable, resultName, nextLoc) {
- this.delegate = {
- iterator: values(iterable),
- resultName: resultName,
- nextLoc: nextLoc
- };
-
- if (this.method === "next") {
- // Deliberately forget the last sent value so that we don't
- // accidentally pass it on to the delegate.
- this.arg = undefined$1;
- }
-
- return ContinueSentinel;
- }
- }; // Regardless of whether this script is executing as a CommonJS module
- // or not, return the runtime object so that we can declare the variable
- // regeneratorRuntime in the outer scope, which allows this module to be
- // injected easily by `bin/regenerator --include-runtime script.js`.
-
- return exports;
- }( // If this script is executing as a CommonJS module, use module.exports
- // as the regeneratorRuntime namespace. Otherwise create a new empty
- // object. Either way, the resulting object will be used to initialize
- // the regeneratorRuntime variable at the top of this file.
- module.exports );
-
- try {
- regeneratorRuntime = runtime;
- } catch (accidentalStrictMode) {
- // This module should not be running in strict mode, so the above
- // assignment should always work unless something is misconfigured. Just
- // in case runtime.js accidentally runs in strict mode, we can escape
- // strict mode using a global Function call. This could conceivably fail
- // if a Content Security Policy forbids using Function, but in that case
- // the proper solution is to fix the accidental strict mode problem. If
- // you've misconfigured your bundler to force strict mode and applied a
- // CSP to forbid Function, and you're not willing to fix either of those
- // problems, please detail your unique predicament in a GitHub issue.
- Function("r", "regeneratorRuntime = r")(runtime);
- }
- });
-
- var regenerator$1 = runtime_1;
-
- function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) {
- try {
- var info = gen[key](arg);
- var value = info.value;
- } catch (error) {
- reject(error);
- return;
- }
-
- if (info.done) {
- resolve(value);
- } else {
- Promise.resolve(value).then(_next, _throw);
- }
- }
-
- function _asyncToGenerator(fn) {
- return function () {
- var self = this,
- args = arguments;
- return new Promise(function (resolve, reject) {
- var gen = fn.apply(self, args);
-
- function _next(value) {
- asyncGeneratorStep(gen, resolve, reject, _next, _throw, "next", value);
- }
-
- function _throw(err) {
- asyncGeneratorStep(gen, resolve, reject, _next, _throw, "throw", err);
- }
-
- _next(undefined);
- });
- };
- }
-
- var asyncToGenerator$1 = _asyncToGenerator;
-
- function _arrayLikeToArray(arr, len) {
- if (len == null || len > arr.length) len = arr.length;
-
- for (var i = 0, arr2 = new Array(len); i < len; i++) {
- arr2[i] = arr[i];
- }
-
- return arr2;
- }
-
- var arrayLikeToArray = _arrayLikeToArray;
-
- function _arrayWithoutHoles(arr) {
- if (Array.isArray(arr)) return arrayLikeToArray(arr);
- }
-
- var arrayWithoutHoles = _arrayWithoutHoles;
-
- function _iterableToArray(iter) {
- if (typeof Symbol !== "undefined" && Symbol.iterator in Object(iter)) return Array.from(iter);
- }
-
- var iterableToArray = _iterableToArray;
-
- function _unsupportedIterableToArray(o, minLen) {
- if (!o) return;
- if (typeof o === "string") return arrayLikeToArray(o, minLen);
- var n = Object.prototype.toString.call(o).slice(8, -1);
- if (n === "Object" && o.constructor) n = o.constructor.name;
- if (n === "Map" || n === "Set") return Array.from(o);
- if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return arrayLikeToArray(o, minLen);
- }
-
- var unsupportedIterableToArray = _unsupportedIterableToArray;
-
- function _nonIterableSpread() {
- throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.");
- }
-
- var nonIterableSpread = _nonIterableSpread;
-
- function _toConsumableArray(arr) {
- return arrayWithoutHoles(arr) || iterableToArray(arr) || unsupportedIterableToArray(arr) || nonIterableSpread();
- }
-
- var toConsumableArray$1 = _toConsumableArray;
-
- /* eslint-disable max-len */
-
- /**
- * @trustedScriptlet trusted-replace-xhr-response
- *
- * @description
- * Replaces response content of `xhr` requests if **all** given parameters match.
- *
- * **Syntax**
- * ```
- * example.org#%#//scriptlet('trusted-replace-xhr-response'[, pattern, replacement[, propsToMatch]])
- * ```
- *
- * - pattern - optional, argument for matching contents of responseText that should be replaced. If set, `replacement` is required;
- * possible values:
- * - '*' to match all text content
- * - non-empty string
- * - regular expression
- * - replacement — optional, should be set if `pattern` is set. String to replace matched content with. Empty string to remove content.
- * - propsToMatch — optional, string of space-separated properties to match for extra condition; possible props:
- * - string or regular expression for matching the URL passed to `.open()` call;
- * - colon-separated pairs name:value where
- * - name - name is string or regular expression for matching XMLHttpRequest property name
- * - value is string or regular expression for matching the value of the option passed to `.open()` call
- *
- * > Usage with no arguments will log XMLHttpRequest objects to browser console;
- * which is useful for debugging but not permitted for production filter lists.
- *
- * **Examples**
- * 1. Log all XMLHttpRequests
- * ```
- * example.org#%#//scriptlet('trusted-replace-xhr-response')
- * ```
- *
- * 2. Replace text content of XMLHttpRequests with specific url
- * ```
- * example.org#%#//scriptlet('trusted-replace-xhr-response', 'adb_detect:true', 'adb_detect:false', 'example.org')
- * example.org#%#//scriptlet('trusted-replace-xhr-response', '/#EXT-X-VMAP-AD-BREAK[\s\S]*?/', '#EXT-X-ENDLIST', 'example.org')
- * ```
- *
- * 3. Remove all text content of XMLHttpRequests with specific request method
- * ```
- * example.org#%#//scriptlet('trusted-replace-xhr-response', '*', '', 'method:GET')
- * ```
- *
- * 4. Replace text content of XMLHttpRequests matching by URL regex and request methods
- * ```
- * example.org#%#//scriptlet('trusted-replace-xhr-response', '/#EXT-X-VMAP-AD-BREAK[\s\S]*?/', '#EXT-X-ENDLIST', '/\.m3u8/ method:/GET|HEAD/')
- * ```
- * 5. Remove all text content of all XMLHttpRequests for example.com
- * ```
- * example.org#%#//scriptlet('trusted-replace-xhr-response', '*', '', 'example.com')
- * ```
- */
-
- /* eslint-enable max-len */
-
- function trustedReplaceXhrResponse$1(source) {
- var pattern = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : '';
- var replacement = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : '';
- var propsToMatch = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : '';
-
- // do nothing if browser does not support Proxy (e.g. Internet Explorer)
- // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Proxy
- if (typeof Proxy === 'undefined') {
- return;
- } // Only allow pattern as empty string for logging purposes
-
-
- if (pattern === '' && replacement !== '') {
- var message = 'Pattern argument should not be empty string.';
- logMessage(source, message);
- return;
- }
-
- var shouldLog = pattern === '' && replacement === '';
- var nativeOpen = window.XMLHttpRequest.prototype.open;
- var nativeSend = window.XMLHttpRequest.prototype.send;
- var shouldReplace = false;
- var xhrData;
- var requestHeaders = [];
-
- var openWrapper = function openWrapper(target, thisArg, args) {
- xhrData = getXhrData.apply(void 0, toConsumableArray$1(args));
-
- if (shouldLog) {
- // Log if no propsToMatch given
- var _message = "log: xhr( ".concat(objectToString(xhrData), " )");
+ // Manually put required values into target XHR object
+ // as thisArg can't be redefined and XHR objects can't be (re)assigned or copied
+ Object.defineProperties(thisArg, {
+ readyState: {
+ value: readyState
+ },
+ response: {
+ value: modifiedContent
+ },
+ responseText: {
+ value: modifiedContent
+ },
+ responseURL: {
+ value: responseURL
+ },
+ responseXML: {
+ value: responseXML
+ },
+ status: {
+ value: status
+ },
+ statusText: {
+ value: statusText
+ }
+ });
- logMessage(source, _message, true);
+ // Mock events
+ setTimeout(function () {
+ var stateEvent = new Event('readystatechange');
+ thisArg.dispatchEvent(stateEvent);
+ var loadEvent = new Event('load');
+ thisArg.dispatchEvent(loadEvent);
+ var loadEndEvent = new Event('loadend');
+ thisArg.dispatchEvent(loadEndEvent);
+ }, 1);
hit(source);
+ });
+ nativeOpen.apply(forgedRequest, [xhrData.method, xhrData.url]);
+
+ // Mimic request headers before sending
+ // setRequestHeader can only be called on open request objects
+ requestHeaders.forEach(function (header) {
+ var name = header[0];
+ var value = header[1];
+ forgedRequest.setRequestHeader(name, value);
+ });
+ requestHeaders = [];
+ try {
+ nativeSend.call(forgedRequest, args);
+ } catch (_unused) {
return Reflect.apply(target, thisArg, args);
}
-
- shouldReplace = matchRequestProps(source, propsToMatch, xhrData); // Trap setRequestHeader of target xhr object to mimic request headers later
-
- if (shouldReplace) {
- var setRequestHeaderWrapper = function setRequestHeaderWrapper(target, thisArg, args) {
- // Collect headers
- requestHeaders.push(args);
- return Reflect.apply(target, thisArg, args);
- };
-
- var setRequestHeaderHandler = {
- apply: setRequestHeaderWrapper
- }; // setRequestHeader can only be called on open xhr object,
- // so we can safely proxy it here
-
- thisArg.setRequestHeader = new Proxy(thisArg.setRequestHeader, setRequestHeaderHandler);
- }
-
- return Reflect.apply(target, thisArg, args);
+ return undefined;
};
-
- var sendWrapper = /*#__PURE__*/function () {
- var _ref = asyncToGenerator$1( /*#__PURE__*/regenerator$1.mark(function _callee(target, thisArg, args) {
- var forgedRequest;
- return regenerator$1.wrap(function _callee$(_context) {
- while (1) {
- switch (_context.prev = _context.next) {
- case 0:
- if (shouldReplace) {
- _context.next = 2;
- break;
- }
-
- return _context.abrupt("return", Reflect.apply(target, thisArg, args));
-
- case 2:
- /**
- * Create separate XHR request with original request's input
- * to be able to collect response data without triggering
- * listeners on original XHR object
- */
- forgedRequest = new XMLHttpRequest();
- forgedRequest.addEventListener('readystatechange', function () {
- if (forgedRequest.readyState !== 4) {
- return;
- }
-
- var readyState = forgedRequest.readyState,
- response = forgedRequest.response,
- responseText = forgedRequest.responseText,
- responseURL = forgedRequest.responseURL,
- responseXML = forgedRequest.responseXML,
- status = forgedRequest.status,
- statusText = forgedRequest.statusText; // Extract content from response
-
- var content = responseText || response;
-
- if (typeof content !== 'string') {
- return;
- }
-
- var patternRegexp = pattern === '*' ? toRegExp() : toRegExp(pattern);
- var modifiedContent = content.replace(patternRegexp, replacement); // Manually put required values into target XHR object
- // as thisArg can't be redefined and XHR objects can't be (re)assigned or copied
-
- Object.defineProperties(thisArg, {
- readyState: {
- value: readyState
- },
- response: {
- value: modifiedContent
- },
- responseText: {
- value: modifiedContent
- },
- responseURL: {
- value: responseURL
- },
- responseXML: {
- value: responseXML
- },
- status: {
- value: status
- },
- statusText: {
- value: statusText
- }
- }); // Mock events
-
- setTimeout(function () {
- var stateEvent = new Event('readystatechange');
- thisArg.dispatchEvent(stateEvent);
- var loadEvent = new Event('load');
- thisArg.dispatchEvent(loadEvent);
- var loadEndEvent = new Event('loadend');
- thisArg.dispatchEvent(loadEndEvent);
- }, 1);
- hit(source);
- });
- nativeOpen.apply(forgedRequest, [xhrData.method, xhrData.url]); // Mimic request headers before sending
- // setRequestHeader can only be called on open request objects
-
- requestHeaders.forEach(function (header) {
- var name = header[0];
- var value = header[1];
- forgedRequest.setRequestHeader(name, value);
- });
- requestHeaders = [];
- _context.prev = 7;
- nativeSend.call(forgedRequest, args);
- _context.next = 14;
- break;
-
- case 11:
- _context.prev = 11;
- _context.t0 = _context["catch"](7);
- return _context.abrupt("return", Reflect.apply(target, thisArg, args));
-
- case 14:
- return _context.abrupt("return", undefined);
-
- case 15:
- case "end":
- return _context.stop();
- }
- }
- }, _callee, null, [[7, 11]]);
- }));
-
- return function sendWrapper(_x, _x2, _x3) {
- return _ref.apply(this, arguments);
- };
- }();
-
var openHandler = {
apply: openWrapper
};
@@ -8044,12 +6628,13 @@
XMLHttpRequest.prototype.open = new Proxy(XMLHttpRequest.prototype.open, openHandler);
XMLHttpRequest.prototype.send = new Proxy(XMLHttpRequest.prototype.send, sendHandler);
}
- trustedReplaceXhrResponse$1.names = ['trusted-replace-xhr-response' // trusted scriptlets support no aliases
+ trustedReplaceXhrResponse$1.names = ['trusted-replace-xhr-response'
+ // trusted scriptlets support no aliases
];
- trustedReplaceXhrResponse$1.injections = [hit, logMessage, toRegExp, objectToString, matchRequestProps, getXhrData, getMatchPropsData, validateParsedData, parseMatchProps, isValidStrPattern, escapeRegExp, isEmptyObject, getObjectEntries];
- /* eslint-disable max-len */
+ trustedReplaceXhrResponse$1.injections = [hit, logMessage, toRegExp, objectToString, matchRequestProps, getXhrData, getMatchPropsData, getRequestProps, validateParsedData, parseMatchProps, isValidStrPattern, escapeRegExp, isEmptyObject, getObjectEntries];
+ /* eslint-disable max-len */
/**
* @scriptlet xml-prune
*
@@ -8094,15 +6679,12 @@
* example.org#%#//scriptlet('xml-prune', '', '', '.mpd')
* ```
*/
-
/* eslint-enable max-len */
function xmlPrune$1(source, propsToRemove) {
var _this = this;
-
var optionalProp = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : '';
var urlToMatch = arguments.length > 3 ? arguments[3] : undefined;
-
// do nothing if browser does not support Reflect, fetch or Proxy (e.g. Internet Explorer)
// https://developer.mozilla.org/en-US/docs/Web/API/WindowOrWorkerGlobalScope/fetch
// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Proxy
@@ -8110,55 +6692,42 @@
if (typeof Reflect === 'undefined' || typeof fetch === 'undefined' || typeof Proxy === 'undefined' || typeof Response === 'undefined') {
return;
}
-
var shouldPruneResponse = true;
-
if (!propsToRemove) {
// If "propsToRemove" is not defined, then response shouldn't be pruned
// but it should be logged in browser console
shouldPruneResponse = false;
}
-
var urlMatchRegexp = toRegExp(urlToMatch);
-
var isXML = function isXML(text) {
// Check if "text" starts with "<" and check if it ends with ">"
// If so, then it might be an XML file and should be pruned or logged
var trimedText = text.trim();
-
- if (startsWith(trimedText, '<') && endsWith(trimedText, '>')) {
+ if (startsWith$1(trimedText, '<') && endsWith(trimedText, '>')) {
return true;
}
-
return false;
};
-
var pruneXML = function pruneXML(text) {
if (!isXML(text)) {
shouldPruneResponse = false;
return text;
}
-
var xmlParser = new DOMParser();
var xmlDoc = xmlParser.parseFromString(text, 'text/xml');
var errorNode = xmlDoc.querySelector('parsererror');
-
if (errorNode) {
return text;
}
-
if (optionalProp !== '' && xmlDoc.querySelector(optionalProp) === null) {
shouldPruneResponse = false;
return text;
}
-
var elems = xmlDoc.querySelectorAll(propsToRemove);
-
if (!elems.length) {
shouldPruneResponse = false;
return text;
}
-
elems.forEach(function (elem) {
elem.remove();
});
@@ -8166,20 +6735,16 @@
text = serializer.serializeToString(xmlDoc);
return text;
};
-
var xhrWrapper = function xhrWrapper(target, thisArg, args) {
var xhrURL = args[1];
-
if (typeof xhrURL !== 'string' || xhrURL.length === 0) {
return Reflect.apply(target, thisArg, args);
}
-
if (urlMatchRegexp.test(xhrURL)) {
thisArg.addEventListener('readystatechange', function pruneResponse() {
if (thisArg.readyState === 4) {
var response = thisArg.response;
thisArg.removeEventListener('readystatechange', pruneResponse);
-
if (!shouldPruneResponse) {
if (isXML(response)) {
// eslint-disable-next-line max-len
@@ -8188,7 +6753,6 @@
}
} else {
var prunedResponseContent = pruneXML(response);
-
if (shouldPruneResponse) {
Object.defineProperty(thisArg, 'response', {
value: prunedResponseContent
@@ -8197,36 +6761,31 @@
value: prunedResponseContent
});
hit(source);
- } // In case if response shouldn't be pruned
+ }
+ // In case if response shouldn't be pruned
// pruneXML sets shouldPruneResponse to false
// so it's necessary to set it to true again
// otherwise response will be only logged
-
-
shouldPruneResponse = true;
}
}
});
}
-
return Reflect.apply(target, thisArg, args);
};
-
var xhrHandler = {
apply: xhrWrapper
- }; // eslint-disable-next-line max-len
-
- window.XMLHttpRequest.prototype.open = new Proxy(window.XMLHttpRequest.prototype.open, xhrHandler); // eslint-disable-next-line compat/compat
+ };
+ // eslint-disable-next-line max-len
+ window.XMLHttpRequest.prototype.open = new Proxy(window.XMLHttpRequest.prototype.open, xhrHandler);
+ // eslint-disable-next-line compat/compat
var nativeFetch = window.fetch;
-
var fetchWrapper = function fetchWrapper(target, thisArg, args) {
var fetchURL = args[0];
-
if (typeof fetchURL !== 'string' || fetchURL.length === 0) {
return Reflect.apply(target, thisArg, args);
}
-
if (urlMatchRegexp.test(fetchURL)) {
return nativeFetch.apply(_this, args).then(function (response) {
return response.text().then(function (text) {
@@ -8234,12 +6793,9 @@
if (isXML(text)) {
logMessage("fetch URL: ".concat(fetchURL, "\nresponse text: ").concat(text));
}
-
return Reflect.apply(target, thisArg, args);
}
-
var prunedText = pruneXML(text);
-
if (shouldPruneResponse) {
hit(source);
return new Response(prunedText, {
@@ -8247,56 +6803,53 @@
statusText: response.statusText,
headers: response.headers
});
- } // If response shouldn't be pruned
+ }
+ // If response shouldn't be pruned
// pruneXML sets shouldPruneResponse to false
// so it's necessary to set it to true again
// otherwise response will be only logged
-
-
shouldPruneResponse = true;
return Reflect.apply(target, thisArg, args);
});
});
}
-
return Reflect.apply(target, thisArg, args);
};
-
var fetchHandler = {
apply: fetchWrapper
- }; // eslint-disable-next-line compat/compat
-
+ };
+ // eslint-disable-next-line compat/compat
window.fetch = new Proxy(window.fetch, fetchHandler);
}
- xmlPrune$1.names = ['xml-prune', // aliases are needed for matching the related scriptlet converted into our syntax
+ xmlPrune$1.names = ['xml-prune',
+ // aliases are needed for matching the related scriptlet converted into our syntax
'xml-prune.js', 'ubo-xml-prune.js', 'ubo-xml-prune'];
- xmlPrune$1.injections = [hit, logMessage, toRegExp, startsWith, endsWith];
+ xmlPrune$1.injections = [hit, logMessage, toRegExp, startsWith$1, endsWith];
/* eslint-disable max-len */
-
/**
* @trustedScriptlet trusted-set-cookie
*
* @description
- * Sets a cookie with arbitrary name and value, with optional path
- * and the ability to reload the page after cookie was set.
+ * Sets a cookie with arbitrary name and value,
+ * and with optional ability to offset cookie attribute 'expires' and set path.
*
* **Syntax**
* ```
- * example.org#%#//scriptlet('trusted-set-cookie', name, value[, offsetExpiresSec[, reload[, path]]])
+ * example.org#%#//scriptlet('trusted-set-cookie', name, value[, offsetExpiresSec[, path]])
* ```
*
* - `name` - required, cookie name to be set
* - `value` - required, cookie value. Possible values:
* - arbitrary value
* - empty string for no value
- * - `$now$` keyword for setting current time
- * - 'offsetExpiresSec' - optional, offset from current time in seconds, after which cookie should expire; defaults to no offset
+ * - `$now$` keyword for setting current time in ms, e.g 1667915146503
+ * - `$currentDate$` keyword for setting current time as string, e.g 'Tue Nov 08 2022 13:53:19 GMT+0300'
+ * - `offsetExpiresSec` - optional, offset from current time in seconds, after which cookie should expire; defaults to no offset
* Possible values:
* - positive integer in seconds
* - `1year` keyword for setting expiration date to one year
* - `1day` keyword for setting expiration date to one day
- * - 'reload' - optional, boolean. Argument for reloading page after cookie is set. Defaults to `false`
* - `path` - optional, argument for setting cookie path, defaults to `/`; possible values:
* - `/` — root path
* - `none` — to set no path at all
@@ -8310,7 +6863,7 @@
*
* 2. Set cookie with `new Date().getTime()` value
* ```
- * example.org#%#//scriptlet('trusted-set-cookie', 'cmpconsent', '$now')
+ * example.org#%#//scriptlet('trusted-set-cookie', 'cmpconsent', '$now$')
* ```
*
* 3. Set cookie which will expire in 3 days
@@ -8322,90 +6875,161 @@
* ```
* example.org#%#//scriptlet('trusted-set-cookie', 'cmpconsent', 'accept', '1year')
* ```
- * 5. Reload the page if cookie was successfully set
- * ```
- * example.org#%#//scriptlet('trusted-set-cookie', 'cmpconsent', 'decline', '', 'true')
- * ```
*
- * 6. Set cookie with no path
+ * 5. Set cookie with no path
* ```
- * example.org#%#//scriptlet('trusted-set-cookie', 'cmpconsent', 'decline', '', '', 'none')
+ * example.org#%#//scriptlet('trusted-set-cookie', 'cmpconsent', 'decline', '', 'none')
* ```
*/
-
/* eslint-enable max-len */
function trustedSetCookie$1(source, name, value) {
var offsetExpiresSec = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : '';
- var reload = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : 'false';
- var path = arguments.length > 5 && arguments[5] !== undefined ? arguments[5] : '/';
-
+ var path = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : '/';
if (typeof name === 'undefined') {
logMessage(source, 'Cookie name should be specified.');
return;
}
-
if (typeof value === 'undefined') {
logMessage(source, 'Cookie value should be specified.');
return;
- } // Prevent infinite reloads if cookie was already set or blocked by the browser
- // https://github.com/AdguardTeam/Scriptlets/issues/212
+ }
+ var parsedValue = parseKeywordValue(value);
+ if (!isValidCookiePath(path)) {
+ logMessage(source, "Invalid cookie path: '".concat(path, "'"));
+ return;
+ }
+ var cookieToSet = concatCookieNameValuePath(name, parsedValue, path);
+ if (!cookieToSet) {
+ return;
+ }
+ if (offsetExpiresSec) {
+ var parsedOffsetMs = getTrustedCookieOffsetMs(offsetExpiresSec);
+ if (!parsedOffsetMs) {
+ logMessage(source, "Invalid offsetExpiresSec value: ".concat(offsetExpiresSec));
+ return;
+ }
+ var expires = Date.now() + parsedOffsetMs;
+ cookieToSet += " expires=".concat(new Date(expires).toUTCString(), ";");
+ }
+ document.cookie = cookieToSet;
+ hit(source);
+ }
+ trustedSetCookie$1.names = ['trusted-set-cookie'
+ // trusted scriptlets support no aliases
+ ];
+
+ trustedSetCookie$1.injections = [hit, logMessage, nativeIsNaN, isCookieSetWithValue, concatCookieNameValuePath, isValidCookiePath, getTrustedCookieOffsetMs, parseKeywordValue, getCookiePath];
+
+ /* eslint-disable max-len */
+ /**
+ * @trustedScriptlet trusted-set-cookie-reload
+ *
+ * @description
+ * Sets a cookie with arbitrary name and value,
+ * and with optional ability to offset cookie attribute 'expires' and set path.
+ * Also reloads the current page after the cookie setting.
+ * If reloading option is not needed, use the [`trusted-set-cookie` scriptlet](#trusted-set-cookie).
+ *
+ * **Syntax**
+ * ```
+ * example.org#%#//scriptlet('trusted-set-cookie-reload', name, value[, offsetExpiresSec[, path]])
+ * ```
+ *
+ * - `name` - required, cookie name to be set
+ * - `value` - required, cookie value. Possible values:
+ * - arbitrary value
+ * - empty string for no value
+ * - `$now$` keyword for setting current time in ms, e.g 1667915146503
+ * - `$currentDate$` keyword for setting current time as string, e.g 'Tue Nov 08 2022 13:53:19 GMT+0300'
+ * - 'offsetExpiresSec' - optional, offset from current time in seconds, after which cookie should expire; defaults to no offset
+ * Possible values:
+ * - positive integer in seconds
+ * - `1year` keyword for setting expiration date to one year
+ * - `1day` keyword for setting expiration date to one day
+ * - `path` - optional, argument for setting cookie path, defaults to `/`; possible values:
+ * - `/` — root path
+ * - `none` — to set no path at all
+ *
+ * **Examples**
+ * 1. Set cookie and reload the page after it
+ * ```
+ * example.org#%#//scriptlet('trusted-set-cookie-reload', 'cmpconsent', 'accept')
+ * ```
+ *
+ * 2. Set cookie with `new Date().getTime()` value and reload the page after it
+ * ```
+ * example.org#%#//scriptlet('trusted-set-cookie-reload', 'cmpconsent', '$now$')
+ * ```
+ *
+ * 3. Set cookie which will expire in 3 days and reload the page after it
+ * ```
+ * example.org#%#//scriptlet('trusted-set-cookie-reload', 'cmpconsent', 'accept', '259200')
+ * ```
+ *
+ * 4. Set cookie which will expire in one year and reload the page after it
+ * ```
+ * example.org#%#//scriptlet('trusted-set-cookie-reload', 'cmpconsent', 'accept', '1year')
+ * ```
+ *
+ * 5. Set cookie with no 'expire' and no path, reload the page after it
+ * ```
+ * example.org#%#//scriptlet('trusted-set-cookie-reload', 'cmpconsent', 'decline', '', 'none')
+ * ```
+ */
+ /* eslint-enable max-len */
+ function trustedSetCookieReload$1(source, name, value) {
+ var offsetExpiresSec = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : '';
+ var path = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : '/';
+ if (typeof name === 'undefined') {
+ logMessage(source, 'Cookie name should be specified.');
+ return;
+ }
+ if (typeof value === 'undefined') {
+ logMessage(source, 'Cookie value should be specified.');
+ return;
+ }
- if (reload === 'true' && isCookieSetWithValue(document.cookie, name, value)) {
+ // Prevent infinite reloads if cookie was already set or blocked by the browser
+ // https://github.com/AdguardTeam/Scriptlets/issues/212
+ if (isCookieSetWithValue(document.cookie, name, value)) {
return;
}
-
- var ONE_YEAR_EXPIRATION_KEYWORD = '1year';
- var ONE_DAY_EXPIRATION_KEYWORD = '1day';
var parsedValue = parseKeywordValue(value);
- var cookieToSet = concatCookieNameValuePath(source, name, parsedValue, path);
-
+ if (!isValidCookiePath(path)) {
+ logMessage(source, "Invalid cookie path: '".concat(path, "'"));
+ return;
+ }
+ var cookieToSet = concatCookieNameValuePath(name, parsedValue, path);
if (!cookieToSet) {
return;
- } // Set expiration date if offsetExpiresSec was passed
-
-
+ }
if (offsetExpiresSec) {
- var MS_IN_SEC = 1000;
- var SECONDS_IN_YEAR = 365 * 24 * 60 * 60;
- var SECONDS_IN_DAY = 24 * 60 * 60;
- var parsedOffsetExpiresSec; // Set predefined expire value if corresponding keyword was passed
-
- if (offsetExpiresSec === ONE_YEAR_EXPIRATION_KEYWORD) {
- parsedOffsetExpiresSec = SECONDS_IN_YEAR;
- } else if (offsetExpiresSec === ONE_DAY_EXPIRATION_KEYWORD) {
- parsedOffsetExpiresSec = SECONDS_IN_DAY;
- } else {
- parsedOffsetExpiresSec = Number.parseInt(offsetExpiresSec, 10); // If offsetExpiresSec has been parsed to NaN - do not set cookie at all
-
- if (Number.isNaN(parsedOffsetExpiresSec)) {
- var message = "log: Invalid offsetExpiresSec value: ".concat(offsetExpiresSec);
- logMessage(source, message);
- return;
- }
+ var parsedOffsetMs = getTrustedCookieOffsetMs(offsetExpiresSec);
+ if (!parsedOffsetMs) {
+ logMessage(source, "Invalid offsetExpiresSec value: ".concat(offsetExpiresSec));
+ return;
}
-
- var expires = Date.now() + parsedOffsetExpiresSec * MS_IN_SEC;
+ var expires = Date.now() + parsedOffsetMs;
cookieToSet += " expires=".concat(new Date(expires).toUTCString(), ";");
}
+ document.cookie = cookieToSet;
+ hit(source);
- if (cookieToSet) {
- document.cookie = cookieToSet;
- hit(source); // Only reload the page if cookie was set
- // https://github.com/AdguardTeam/Scriptlets/issues/212
-
- if (reload === 'true' && isCookieSetWithValue(document.cookie, name, value)) {
- window.location.reload();
- }
+ // Only reload the page if cookie was set
+ // https://github.com/AdguardTeam/Scriptlets/issues/212
+ if (isCookieSetWithValue(document.cookie, name, value)) {
+ window.location.reload();
}
}
- trustedSetCookie$1.names = ['trusted-set-cookie' // trusted scriptlets support no aliases
+ trustedSetCookieReload$1.names = ['trusted-set-cookie-reload'
+ // trusted scriptlets support no aliases
];
- trustedSetCookie$1.injections = [hit, logMessage, nativeIsNaN, isCookieSetWithValue, concatCookieNameValuePath, isValidCookieRawPath, parseKeywordValue, getCookiePath];
- /* eslint-disable max-len */
+ trustedSetCookieReload$1.injections = [hit, logMessage, nativeIsNaN, isCookieSetWithValue, concatCookieNameValuePath, isValidCookiePath, getTrustedCookieOffsetMs, parseKeywordValue, getCookiePath];
+ /* eslint-disable max-len */
/**
* @trustedScriptlet trusted-replace-fetch-response
*
@@ -8461,146 +7085,112 @@
* example.org#%#//scriptlet('trusted-replace-fetch-response', '*', '', 'example.com')
* ```
*/
-
/* eslint-enable max-len */
-
function trustedReplaceFetchResponse$1(source) {
var pattern = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : '';
var replacement = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : '';
var propsToMatch = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : '';
-
// do nothing if browser does not support fetch or Proxy (e.g. Internet Explorer)
// https://developer.mozilla.org/en-US/docs/Web/API/WindowOrWorkerGlobalScope/fetch
// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Proxy
if (typeof fetch === 'undefined' || typeof Proxy === 'undefined' || typeof Response === 'undefined') {
return;
- } // Only allow pattern as empty string for logging purposes
-
+ }
+ // Only allow pattern as empty string for logging purposes
if (pattern === '' && replacement !== '') {
logMessage(source, 'Pattern argument should not be empty string.');
return;
}
-
var shouldLog = pattern === '' && replacement === '';
var nativeFetch = fetch;
var shouldReplace = false;
var fetchData;
+ var handlerWrapper = function handlerWrapper(target, thisArg, args) {
+ fetchData = getFetchData(args);
+ if (shouldLog) {
+ // log if no propsToMatch given
+ logMessage(source, "fetch( ".concat(objectToString(fetchData), " )"), true);
+ hit(source);
+ return Reflect.apply(target, thisArg, args);
+ }
+ shouldReplace = matchRequestProps(source, propsToMatch, fetchData);
+ if (!shouldReplace) {
+ return Reflect.apply(target, thisArg, args);
+ }
- var handlerWrapper = /*#__PURE__*/function () {
- var _ref = asyncToGenerator$1( /*#__PURE__*/regenerator$1.mark(function _callee(target, thisArg, args) {
- var forgeResponse;
- return regenerator$1.wrap(function _callee$(_context) {
- while (1) {
- switch (_context.prev = _context.next) {
- case 0:
- fetchData = getFetchData(args);
-
- if (!shouldLog) {
- _context.next = 5;
- break;
- }
-
- // log if no propsToMatch given
- logMessage(source, "fetch( ".concat(objectToString(fetchData), " )"), true);
- hit(source);
- return _context.abrupt("return", Reflect.apply(target, thisArg, args));
-
- case 5:
- shouldReplace = matchRequestProps(source, propsToMatch, fetchData);
-
- if (shouldReplace) {
- _context.next = 8;
- break;
- }
-
- return _context.abrupt("return", Reflect.apply(target, thisArg, args));
-
- case 8:
- /**
- * Create new Response object using original response' properties
- * and given text as body content
- * @param {Response} response original response to copy properties from
- * @param {string} textContent text to set as body content
- * @returns {Response}
- */
- forgeResponse = function forgeResponse(response, textContent) {
- var bodyUsed = response.bodyUsed,
- headers = response.headers,
- ok = response.ok,
- redirected = response.redirected,
- status = response.status,
- statusText = response.statusText,
- type = response.type,
- url = response.url; // eslint-disable-next-line compat/compat
-
- var forgedResponse = new Response(textContent, {
- status: status,
- statusText: statusText,
- headers: headers
- }); // Manually set properties which can't be set by Response constructor
-
- Object.defineProperties(forgedResponse, {
- url: {
- value: url
- },
- type: {
- value: type
- },
- ok: {
- value: ok
- },
- bodyUsed: {
- value: bodyUsed
- },
- redirected: {
- value: redirected
- }
- });
- return forgedResponse;
- };
-
- return _context.abrupt("return", nativeFetch.apply(void 0, toConsumableArray$1(args)).then(function (response) {
- return response.text().then(function (bodyText) {
- var patternRegexp = pattern === '*' ? toRegExp() : toRegExp(pattern);
- var modifiedTextContent = bodyText.replace(patternRegexp, replacement);
- var forgedResponse = forgeResponse(response, modifiedTextContent);
- hit(source);
- return forgedResponse;
- }).catch(function () {
- // log if response body can't be converted to a string
- var fetchDataStr = objectToString(fetchData);
- var message = "Response body can't be converted to text: ".concat(fetchDataStr);
- logMessage(source, message);
- return Reflect.apply(target, thisArg, args);
- });
- }).catch(function () {
- return Reflect.apply(target, thisArg, args);
- }));
+ /**
+ * Create new Response object using original response' properties
+ * and given text as body content
+ * @param {Response} response original response to copy properties from
+ * @param {string} textContent text to set as body content
+ * @returns {Response}
+ */
+ var forgeResponse = function forgeResponse(response, textContent) {
+ var bodyUsed = response.bodyUsed,
+ headers = response.headers,
+ ok = response.ok,
+ redirected = response.redirected,
+ status = response.status,
+ statusText = response.statusText,
+ type = response.type,
+ url = response.url; // eslint-disable-next-line compat/compat
+ var forgedResponse = new Response(textContent, {
+ status: status,
+ statusText: statusText,
+ headers: headers
+ });
- case 10:
- case "end":
- return _context.stop();
- }
+ // Manually set properties which can't be set by Response constructor
+ Object.defineProperties(forgedResponse, {
+ url: {
+ value: url
+ },
+ type: {
+ value: type
+ },
+ ok: {
+ value: ok
+ },
+ bodyUsed: {
+ value: bodyUsed
+ },
+ redirected: {
+ value: redirected
}
- }, _callee);
- }));
-
- return function handlerWrapper(_x, _x2, _x3) {
- return _ref.apply(this, arguments);
+ });
+ return forgedResponse;
};
- }();
+ // eslint-disable-next-line prefer-spread
+ return nativeFetch.apply(null, args).then(function (response) {
+ return response.text().then(function (bodyText) {
+ var patternRegexp = pattern === '*' ? /(\n|.)*/ : toRegExp(pattern);
+ var modifiedTextContent = bodyText.replace(patternRegexp, replacement);
+ var forgedResponse = forgeResponse(response, modifiedTextContent);
+ hit(source);
+ return forgedResponse;
+ }).catch(function () {
+ // log if response body can't be converted to a string
+ var fetchDataStr = objectToString(fetchData);
+ var message = "Response body can't be converted to text: ".concat(fetchDataStr);
+ logMessage(source, message);
+ return Reflect.apply(target, thisArg, args);
+ });
+ }).catch(function () {
+ return Reflect.apply(target, thisArg, args);
+ });
+ };
var fetchHandler = {
apply: handlerWrapper
};
fetch = new Proxy(fetch, fetchHandler); // eslint-disable-line no-global-assign
}
+
trustedReplaceFetchResponse$1.names = ['trusted-replace-fetch-response'];
- trustedReplaceFetchResponse$1.injections = [hit, logMessage, getFetchData, objectToString, matchRequestProps, toRegExp, isValidStrPattern, escapeRegExp, isEmptyObject, getRequestData, getObjectEntries, getObjectFromEntries, parseMatchProps, validateParsedData, getMatchPropsData];
+ trustedReplaceFetchResponse$1.injections = [hit, logMessage, getFetchData, objectToString, matchRequestProps, toRegExp, isValidStrPattern, escapeRegExp, isEmptyObject, getRequestData, getRequestProps, getObjectEntries, getObjectFromEntries, parseMatchProps, validateParsedData, getMatchPropsData];
/* eslint-disable max-len */
-
/**
* @trustedScriptlet trusted-set-local-storage-item
*
@@ -8646,7 +7236,6 @@
* example.org#%#//scriptlet('trusted-set-local-storage-item', 'ppu_main_none', '')
* ```
*/
-
/* eslint-enable max-len */
function trustedSetLocalStorageItem$1(source, key, value) {
@@ -8654,20 +7243,20 @@
logMessage(source, 'Item key should be specified.');
return;
}
-
if (typeof value === 'undefined') {
logMessage(source, 'Item value should be specified.');
return;
}
-
var parsedValue = parseKeywordValue(value);
var _window = window,
- localStorage = _window.localStorage;
+ localStorage = _window.localStorage;
setStorageItem(source, localStorage, key, parsedValue);
hit(source);
}
- trustedSetLocalStorageItem$1.names = ['trusted-set-local-storage-item' // trusted scriptlets support no aliases
+ trustedSetLocalStorageItem$1.names = ['trusted-set-local-storage-item'
+ // trusted scriptlets support no aliases
];
+
trustedSetLocalStorageItem$1.injections = [hit, logMessage, nativeIsNaN, setStorageItem, parseKeywordValue];
/**
@@ -8686,7 +7275,7 @@
setConstant: setConstant$1,
removeCookie: removeCookie$1,
preventAddEventListener: preventAddEventListener$1,
- preventBab: preventBab$1,
+ preventBab: preventBab$2,
nowebrtc: nowebrtc$1,
logAddEventListener: logAddEventListener$1,
logEval: logEval$1,
@@ -8726,6 +7315,7 @@
trustedReplaceXhrResponse: trustedReplaceXhrResponse$1,
xmlPrune: xmlPrune$1,
trustedSetCookie: trustedSetCookie$1,
+ trustedSetCookieReload: trustedSetCookieReload$1,
trustedReplaceFetchResponse: trustedReplaceFetchResponse$1,
trustedSetLocalStorageItem: trustedSetLocalStorageItem$1
});
@@ -8791,7 +7381,8 @@
adg: 'googletagservices-gpt',
ubo: 'googletagservices_gpt.js'
}, {
- adg: 'google-ima3'
+ adg: 'google-ima3',
+ ubo: 'google-ima.js'
}, {
adg: 'gemius'
}, {
@@ -8875,15 +7466,16 @@
var JS_RULE_MARKER = '#%#';
var COMMENT_MARKER = '!';
+
/**
* Checks if rule text is comment e.g. !!example.org##+js(set-constant.js, test, false)
* @param {string} rule
* @return {boolean}
*/
-
var isComment = function isComment(rule) {
- return startsWith(rule, COMMENT_MARKER);
+ return startsWith$1(rule, COMMENT_MARKER);
};
+
/* ************************************************************************
*
* Scriptlets
@@ -8893,85 +7485,79 @@
/**
* uBlock scriptlet rule mask
*/
-
-
var UBO_SCRIPTLET_MASK_REG = /#@?#script:inject|#@?#\s*\+js/;
var UBO_SCRIPTLET_MASK_1 = '##+js';
var UBO_SCRIPTLET_MASK_2 = '##script:inject';
var UBO_SCRIPTLET_EXCEPTION_MASK_1 = '#@#+js';
var UBO_SCRIPTLET_EXCEPTION_MASK_2 = '#@#script:inject';
+
/**
* AdBlock Plus snippet rule mask
*/
-
var ABP_SCRIPTLET_MASK = '#$#';
var ABP_SCRIPTLET_EXCEPTION_MASK = '#@$#';
+
/**
* AdGuard CSS rule mask
*/
-
var ADG_CSS_MASK_REG = /#@?\$#.+?\s*\{.*\}\s*$/g;
+
/**
* Checks if the `rule` is AdGuard scriptlet rule
* @param {string} rule - rule text
*/
-
var isAdgScriptletRule = function isAdgScriptletRule(rule) {
return !isComment(rule) && rule.indexOf(ADG_SCRIPTLET_MASK) > -1;
};
+
/**
* Checks if the `rule` is uBO scriptlet rule
* @param {string} rule rule text
*/
-
-
var isUboScriptletRule = function isUboScriptletRule(rule) {
return (rule.indexOf(UBO_SCRIPTLET_MASK_1) > -1 || rule.indexOf(UBO_SCRIPTLET_MASK_2) > -1 || rule.indexOf(UBO_SCRIPTLET_EXCEPTION_MASK_1) > -1 || rule.indexOf(UBO_SCRIPTLET_EXCEPTION_MASK_2) > -1) && UBO_SCRIPTLET_MASK_REG.test(rule) && !isComment(rule);
};
+
/**
* Checks if the `rule` is AdBlock Plus snippet
* @param {string} rule rule text
*/
-
-
var isAbpSnippetRule = function isAbpSnippetRule(rule) {
return (rule.indexOf(ABP_SCRIPTLET_MASK) > -1 || rule.indexOf(ABP_SCRIPTLET_EXCEPTION_MASK) > -1) && rule.search(ADG_CSS_MASK_REG) === -1 && !isComment(rule);
};
+
/**
* Finds scriptlet by it's name
* @param {string} name - scriptlet name
*/
-
-
var getScriptletByName = function getScriptletByName(name) {
var scriptlets = Object.keys(scriptletList).map(function (key) {
return scriptletList[key];
});
return scriptlets.find(function (s) {
- return s.names // full match name checking
- && (s.names.indexOf(name) > -1 // or check ubo alias name without '.js' at the end
+ return s.names
+ // full match name checking
+ && (s.names.indexOf(name) > -1
+ // or check ubo alias name without '.js' at the end
|| !endsWith(name, '.js') && s.names.indexOf("".concat(name, ".js")) > -1);
});
};
+
/**
* Checks if the scriptlet name is valid
* @param {string} name - Scriptlet name
*/
-
-
var isValidScriptletName = function isValidScriptletName(name) {
if (!name) {
return false;
}
-
var scriptlet = getScriptletByName(name);
-
if (!scriptlet) {
return false;
}
-
return true;
};
+
/* ************************************************************************
*
* Redirects
@@ -8981,18 +7567,16 @@
/**
* Redirect resources markers
*/
-
-
var ADG_UBO_REDIRECT_MARKER = 'redirect=';
var ADG_UBO_REDIRECT_RULE_MARKER = 'redirect-rule=';
var ABP_REDIRECT_MARKER = 'rewrite=abp-resource:';
var EMPTY_REDIRECT_MARKER = 'empty';
var VALID_SOURCE_TYPES = ['image', 'media', 'subdocument', 'stylesheet', 'script', 'xmlhttprequest', 'other'];
+
/**
* Source types for redirect rules if there is no one of them.
* Used for ADG -> UBO conversion.
*/
-
var ABSENT_SOURCE_TYPE_REPLACEMENT = [{
NAME: 'nooptext',
TYPES: VALID_SOURCE_TYPES
@@ -9024,41 +7608,41 @@
var validAdgRedirects = redirects$1.filter(function (el) {
return el.adg;
});
+
/**
* Compatibility object where KEYS = UBO redirect names and VALUES = ADG redirect names
* It's used for UBO -> ADG converting
*/
-
var uboToAdgCompatibility = getObjectFromEntries(validAdgRedirects.filter(function (el) {
return el.ubo;
}).map(function (el) {
return [el.ubo, el.adg];
}));
+
/**
* Compatibility object where KEYS = ABP redirect names and VALUES = ADG redirect names
* It's used for ABP -> ADG converting
*/
-
var abpToAdgCompatibility = getObjectFromEntries(validAdgRedirects.filter(function (el) {
return el.abp;
}).map(function (el) {
return [el.abp, el.adg];
}));
+
/**
* Compatibility object where KEYS = UBO redirect names and VALUES = ADG redirect names
* It's used for ADG -> UBO converting
*/
-
var adgToUboCompatibility = getObjectFromEntries(validAdgRedirects.filter(function (el) {
return el.ubo;
}).map(function (el) {
return [el.adg, el.ubo];
}));
+
/**
* Needed for AdGuard redirect names validation where KEYS = **valid** AdGuard redirect names
* 'adgToUboCompatibility' is still needed for ADG -> UBO converting
*/
-
var validAdgCompatibility = getObjectFromEntries(validAdgRedirects.map(function (el) {
return [el.adg, 'valid adg redirect'];
}));
@@ -9083,23 +7667,22 @@
compatibility: abpToAdgCompatibility
}
};
+
/**
* Parses redirect rule modifiers
* @param {string} rule
* @returns {Array}
*/
-
var parseModifiers = function parseModifiers(rule) {
return substringAfter$1(rule, '$').split(',');
};
+
/**
* Gets redirect resource name
* @param {string} rule
* @param {string} marker - specific Adg/Ubo or Abp redirect resources marker
* @returns {string} - redirect resource name
*/
-
-
var getRedirectName = function getRedirectName(rule, marker) {
var ruleModifiers = parseModifiers(rule);
var redirectNamePart = ruleModifiers.find(function (el) {
@@ -9107,104 +7690,95 @@
});
return substringAfter$1(redirectNamePart, marker);
};
+
/**
* Checks if the `rule` is AdGuard redirect rule.
* Discards comments and JS rules and checks if the `rule` has 'redirect' modifier.
* @param {string} rule - rule text
*/
-
-
var isAdgRedirectRule = function isAdgRedirectRule(rule) {
var MARKER_IN_BASE_PART_MASK = '/((?!\\$|\\,).{1})redirect((-rule)?)=(.{0,}?)\\$(popup)?/';
- return !isComment(rule) && (rule.indexOf(REDIRECT_RULE_TYPES.ADG.redirectMarker) > -1 || rule.indexOf(REDIRECT_RULE_TYPES.ADG.redirectRuleMarker) > -1) // some js rules may have 'redirect=' in it, so we should get rid of them
- && rule.indexOf(JS_RULE_MARKER) === -1 // get rid of rules like '_redirect=*://look.$popup'
+ return !isComment(rule) && (rule.indexOf(REDIRECT_RULE_TYPES.ADG.redirectMarker) > -1 || rule.indexOf(REDIRECT_RULE_TYPES.ADG.redirectRuleMarker) > -1)
+ // some js rules may have 'redirect=' in it, so we should get rid of them
+ && rule.indexOf(JS_RULE_MARKER) === -1
+ // get rid of rules like '_redirect=*://look.$popup'
&& !toRegExp(MARKER_IN_BASE_PART_MASK).test(rule);
- }; // const getRedirectResourceMarkerData = ()
+ };
+
+ // const getRedirectResourceMarkerData = ()
/**
* Checks if the `rule` satisfies the `type`
* @param {string} rule - rule text
* @param {'VALID_ADG'|'ADG'|'UBO'|'ABP'} type - type of a redirect rule
*/
-
-
var isRedirectRuleByType = function isRedirectRuleByType(rule, type) {
var _REDIRECT_RULE_TYPES$ = REDIRECT_RULE_TYPES[type],
- redirectMarker = _REDIRECT_RULE_TYPES$.redirectMarker,
- redirectRuleMarker = _REDIRECT_RULE_TYPES$.redirectRuleMarker,
- compatibility = _REDIRECT_RULE_TYPES$.compatibility;
-
+ redirectMarker = _REDIRECT_RULE_TYPES$.redirectMarker,
+ redirectRuleMarker = _REDIRECT_RULE_TYPES$.redirectRuleMarker,
+ compatibility = _REDIRECT_RULE_TYPES$.compatibility;
if (rule && !isComment(rule)) {
- var marker; // check if there is a $redirect-rule modifier in rule
-
+ var marker;
+ // check if there is a $redirect-rule modifier in rule
var markerIndex = redirectRuleMarker ? rule.indexOf(redirectRuleMarker) : -1;
-
if (markerIndex > -1) {
marker = redirectRuleMarker;
} else {
// check if there $redirect modifier in rule
markerIndex = rule.indexOf(redirectMarker);
-
if (markerIndex > -1) {
marker = redirectMarker;
} else {
return false;
}
}
-
var redirectName = getRedirectName(rule, marker);
-
if (!redirectName) {
return false;
}
-
return redirectName === Object.keys(compatibility).find(function (el) {
return el === redirectName;
});
}
-
return false;
};
+
/**
* Checks if the `rule` is **valid** AdGuard redirect resource rule
* @param {string} rule - rule text
* @returns {boolean}
*/
-
-
var isValidAdgRedirectRule = function isValidAdgRedirectRule(rule) {
return isRedirectRuleByType(rule, 'VALID_ADG');
};
+
/**
* Checks if the AdGuard redirect `rule` has Ubo analog. Needed for Adg->Ubo conversion
* @param {string} rule - AdGuard rule text
* @returns {boolean} - true if the rule can be converted to Ubo
*/
-
-
var isAdgRedirectCompatibleWithUbo = function isAdgRedirectCompatibleWithUbo(rule) {
return isAdgRedirectRule(rule) && isRedirectRuleByType(rule, 'ADG');
};
+
/**
* Checks if the Ubo redirect `rule` has AdGuard analog. Needed for Ubo->Adg conversion
* @param {string} rule - Ubo rule text
* @returns {boolean} - true if the rule can be converted to AdGuard
*/
-
-
var isUboRedirectCompatibleWithAdg = function isUboRedirectCompatibleWithAdg(rule) {
return isRedirectRuleByType(rule, 'UBO');
};
+
/**
* Checks if the Abp redirect `rule` has AdGuard analog. Needed for Abp->Adg conversion
* @param {string} rule - Abp rule text
* @returns {boolean} - true if the rule can be converted to AdGuard
*/
-
-
var isAbpRedirectCompatibleWithAdg = function isAbpRedirectCompatibleWithAdg(rule) {
return isRedirectRuleByType(rule, 'ABP');
};
+
/**
* Checks if the rule has specified content type before Adg -> Ubo conversion.
*
@@ -9221,26 +7795,21 @@
* @param {string} rule
* @returns {boolean}
*/
-
-
var hasValidContentType = function hasValidContentType(rule) {
- var ruleModifiers = parseModifiers(rule); // rule can have more than one source type modifier
-
+ var ruleModifiers = parseModifiers(rule);
+ // rule can have more than one source type modifier
var sourceTypes = ruleModifiers.filter(function (el) {
return VALID_SOURCE_TYPES.indexOf(el) > -1;
});
- var isSourceTypeSpecified = sourceTypes.length > 0; // eslint-disable-next-line max-len
-
+ var isSourceTypeSpecified = sourceTypes.length > 0;
+ // eslint-disable-next-line max-len
var isEmptyRedirect = ruleModifiers.indexOf("".concat(ADG_UBO_REDIRECT_MARKER).concat(EMPTY_REDIRECT_MARKER)) > -1 || ruleModifiers.indexOf("".concat(ADG_UBO_REDIRECT_RULE_MARKER).concat(EMPTY_REDIRECT_MARKER)) > -1;
-
if (isEmptyRedirect) {
// no source type for 'empty' is allowed
return true;
}
-
return isSourceTypeSpecified;
};
-
var validator = {
UBO_SCRIPTLET_MASK_REG: UBO_SCRIPTLET_MASK_REG,
ABP_SCRIPTLET_MASK: ABP_SCRIPTLET_MASK,
@@ -9264,49 +7833,89 @@
hasValidContentType: hasValidContentType
};
+ function _arrayLikeToArray(arr, len) {
+ if (len == null || len > arr.length) len = arr.length;
+ for (var i = 0, arr2 = new Array(len); i < len; i++) {
+ arr2[i] = arr[i];
+ }
+ return arr2;
+ }
+ var arrayLikeToArray = _arrayLikeToArray;
+
+ function _arrayWithoutHoles(arr) {
+ if (Array.isArray(arr)) return arrayLikeToArray(arr);
+ }
+ var arrayWithoutHoles = _arrayWithoutHoles;
+
+ function _iterableToArray(iter) {
+ if (typeof Symbol !== "undefined" && Symbol.iterator in Object(iter)) return Array.from(iter);
+ }
+ var iterableToArray = _iterableToArray;
+
+ function _unsupportedIterableToArray(o, minLen) {
+ if (!o) return;
+ if (typeof o === "string") return arrayLikeToArray(o, minLen);
+ var n = Object.prototype.toString.call(o).slice(8, -1);
+ if (n === "Object" && o.constructor) n = o.constructor.name;
+ if (n === "Map" || n === "Set") return Array.from(o);
+ if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return arrayLikeToArray(o, minLen);
+ }
+ var unsupportedIterableToArray = _unsupportedIterableToArray;
+
+ function _nonIterableSpread() {
+ throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.");
+ }
+ var nonIterableSpread = _nonIterableSpread;
+
+ function _toConsumableArray(arr) {
+ return arrayWithoutHoles(arr) || iterableToArray(arr) || unsupportedIterableToArray(arr) || nonIterableSpread();
+ }
+ var toConsumableArray = _toConsumableArray;
+
function _arrayWithHoles(arr) {
if (Array.isArray(arr)) return arr;
}
-
var arrayWithHoles = _arrayWithHoles;
function _nonIterableRest() {
throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.");
}
-
var nonIterableRest = _nonIterableRest;
function _toArray(arr) {
return arrayWithHoles(arr) || iterableToArray(arr) || unsupportedIterableToArray(arr) || nonIterableRest();
}
-
var toArray$1 = _toArray;
/**
* AdGuard scriptlet rule
*/
-
- var ADGUARD_SCRIPTLET_MASK_REG = /#@?%#\/\/scriptlet\(.+\)/; // eslint-disable-next-line no-template-curly-in-string
-
- var ADGUARD_SCRIPTLET_TEMPLATE = '${domains}#%#//scriptlet(${args})'; // eslint-disable-next-line no-template-curly-in-string
-
+ var ADGUARD_SCRIPTLET_MASK_REG = /#@?%#\/\/scriptlet\(.+\)/;
+ // eslint-disable-next-line no-template-curly-in-string
+ var ADGUARD_SCRIPTLET_TEMPLATE = '${domains}#%#//scriptlet(${args})';
+ // eslint-disable-next-line no-template-curly-in-string
var ADGUARD_SCRIPTLET_EXCEPTION_TEMPLATE = '${domains}#@%#//scriptlet(${args})';
+
/**
* uBlock scriptlet rule mask
*/
// eslint-disable-next-line no-template-curly-in-string
-
- var UBO_SCRIPTLET_TEMPLATE = '${domains}##+js(${args})'; // eslint-disable-next-line no-template-curly-in-string
-
+ var UBO_SCRIPTLET_TEMPLATE = '${domains}##+js(${args})';
+ // eslint-disable-next-line no-template-curly-in-string
var UBO_SCRIPTLET_EXCEPTION_TEMPLATE = '${domains}#@#+js(${args})';
var UBO_ALIAS_NAME_MARKER = 'ubo-';
- var UBO_SCRIPTLET_JS_ENDING = '.js'; // https://github.com/gorhill/uBlock/wiki/Static-filter-syntax#xhr
+ var UBO_SCRIPTLET_JS_ENDING = '.js';
+ // https://github.com/gorhill/uBlock/wiki/Static-filter-syntax#xhr
var UBO_XHR_TYPE = 'xhr';
var ADG_XHR_TYPE = 'xmlhttprequest';
var ADG_SET_CONSTANT_NAME = 'set-constant';
var ADG_SET_CONSTANT_EMPTY_STRING = '';
+ var ADG_SET_CONSTANT_EMPTY_ARRAY = 'emptyArr';
+ var ADG_SET_CONSTANT_EMPTY_OBJECT = 'emptyObj';
var UBO_SET_CONSTANT_EMPTY_STRING = '\'\'';
+ var UBO_SET_CONSTANT_EMPTY_ARRAY = '[]';
+ var UBO_SET_CONSTANT_EMPTY_OBJECT = '{}';
var ADG_PREVENT_FETCH_NAME = 'prevent-fetch';
var ADG_PREVENT_FETCH_EMPTY_STRING = '';
var ADG_PREVENT_FETCH_WILDCARD = '*';
@@ -9320,22 +7929,21 @@
var ADG_REMOVE_ATTR_NAME = REMOVE_ATTR_ALIASES[0];
var ADG_REMOVE_CLASS_NAME = REMOVE_CLASS_ALIASES[0];
var REMOVE_ATTR_CLASS_APPLYING = ['asap', 'stay', 'complete'];
+
/**
* Returns array of strings separated by space which not in quotes
* @param {string} str
*/
-
var getSentences = function getSentences(str) {
var reg = /'.*?'|".*?"|\S+/g;
return str.match(reg);
};
+
/**
* Replaces string with data by placeholders
* @param {string} str
* @param {Object} data - where keys are placeholders names
*/
-
-
var replacePlaceholders = function replacePlaceholders(str, data) {
return Object.keys(data).reduce(function (acc, key) {
var reg = new RegExp("\\$\\{".concat(key, "\\}"), 'g');
@@ -9343,11 +7951,9 @@
return acc;
}, str);
};
-
var splitArgs = function splitArgs(str) {
var args = [];
var prevArgStart = 0;
-
for (var i = 0; i < str.length; i += 1) {
// do not split args by escaped comma
// https://github.com/AdguardTeam/Scriptlets/issues/133
@@ -9355,39 +7961,35 @@
args.push(str.slice(prevArgStart, i).trim());
prevArgStart = i + 1;
}
- } // collect arg after last comma
-
-
+ }
+ // collect arg after last comma
args.push(str.slice(prevArgStart, str.length).trim());
return args;
};
+
/**
* Validates remove-attr/class scriptlet args
* @param {string[]} parsedArgs
* @returns {string[]|Error} valid args OR error for invalid selector
*/
-
-
var validateRemoveAttrClassArgs = function validateRemoveAttrClassArgs(parsedArgs) {
var _parsedArgs = toArray$1(parsedArgs),
- name = _parsedArgs[0],
- value = _parsedArgs[1],
- restArgs = _parsedArgs.slice(2); // no extra checking if there are only scriptlet name and value
+ name = _parsedArgs[0],
+ value = _parsedArgs[1],
+ restArgs = _parsedArgs.slice(2); // no extra checking if there are only scriptlet name and value
// https://github.com/AdguardTeam/Scriptlets/issues/235
-
-
if (restArgs.length === 0) {
return [name, value];
- } // remove-attr/class scriptlet might have multiple selectors separated by comma. so we should:
+ }
+
+ // remove-attr/class scriptlet might have multiple selectors separated by comma. so we should:
// 1. check if last arg is 'applying' parameter
// 2. join 'selector' into one arg
// 3. combine all args
// https://github.com/AdguardTeam/Scriptlets/issues/133
-
-
var lastArg = restArgs.pop();
- var applying; // check the last parsed arg for matching possible 'applying' vale
-
+ var applying;
+ // check the last parsed arg for matching possible 'applying' vale
if (REMOVE_ATTR_CLASS_APPLYING.some(function (el) {
return lastArg.indexOf(el) > -1;
})) {
@@ -9395,57 +7997,46 @@
} else {
restArgs.push(lastArg);
}
-
var selector = replaceAll(restArgs.join(', '), ESCAPED_COMMA_SEPARATOR, COMMA_SEPARATOR);
-
if (selector.length > 0 && typeof document !== 'undefined') {
// empty selector is valid for these scriptlets as it applies to all elements,
// all other selectors should be validated
// e.g. #%#//scriptlet('ubo-remove-class.js', 'blur', ', html')
document.querySelectorAll(selector);
}
-
var validArgs = applying ? [name, value, selector, applying] : [name, value, selector];
return validArgs;
};
+
/**
* Converts string of UBO scriptlet rule to AdGuard scriptlet rule
* @param {string} rule - UBO scriptlet rule
* @returns {string[]} - array with one AdGuard scriptlet rule
*/
-
-
var convertUboScriptletToAdg = function convertUboScriptletToAdg(rule) {
var domains = getBeforeRegExp(rule, validator.UBO_SCRIPTLET_MASK_REG);
var mask = rule.match(validator.UBO_SCRIPTLET_MASK_REG)[0];
var template;
-
if (mask.indexOf('@') > -1) {
template = ADGUARD_SCRIPTLET_EXCEPTION_TEMPLATE;
} else {
template = ADGUARD_SCRIPTLET_TEMPLATE;
}
-
var argsStr = getStringInBraces(rule);
var parsedArgs = splitArgs(argsStr);
var scriptletName = parsedArgs[0].indexOf(UBO_SCRIPTLET_JS_ENDING) > -1 ? "ubo-".concat(parsedArgs[0]) : "ubo-".concat(parsedArgs[0]).concat(UBO_SCRIPTLET_JS_ENDING);
-
if (REMOVE_ATTR_ALIASES.indexOf(scriptletName) > -1 || REMOVE_CLASS_ALIASES.indexOf(scriptletName) > -1) {
parsedArgs = validateRemoveAttrClassArgs(parsedArgs);
}
-
var args = parsedArgs.map(function (arg, index) {
var outputArg = arg;
-
if (index === 0) {
outputArg = scriptletName;
- } // for example: example.org##+js(abort-current-inline-script, $, popup)
-
-
+ }
+ // for example: example.org##+js(abort-current-inline-script, $, popup)
if (arg === '$') {
outputArg = '$$';
}
-
return outputArg;
}).map(function (arg) {
return wrapInSingleQuotes(arg);
@@ -9456,20 +8047,21 @@
});
return [adgRule];
};
+
/**
* Convert string of ABP snippet rule to AdGuard scriptlet rule
* @param {string} rule - ABP snippet rule
* @returns {Array} - array of AdGuard scriptlet rules -
* one or few items depends on Abp-rule
*/
-
var convertAbpSnippetToAdg = function convertAbpSnippetToAdg(rule) {
var SEMICOLON_DIVIDER = /;(?=(?:(?:[^"]*"){2})*[^"]*$)/g;
var mask = rule.indexOf(validator.ABP_SCRIPTLET_MASK) > -1 ? validator.ABP_SCRIPTLET_MASK : validator.ABP_SCRIPTLET_EXCEPTION_MASK;
var template = mask === validator.ABP_SCRIPTLET_MASK ? ADGUARD_SCRIPTLET_TEMPLATE : ADGUARD_SCRIPTLET_EXCEPTION_TEMPLATE;
var domains = substringBefore(rule, mask);
var args = substringAfter$1(rule, mask);
- return args.split(SEMICOLON_DIVIDER) // abp-rule may have `;` at the end which makes last array item irrelevant
+ return args.split(SEMICOLON_DIVIDER)
+ // abp-rule may have `;` at the end which makes last array item irrelevant
// https://github.com/AdguardTeam/Scriptlets/issues/236
.filter(isExisting).map(function (args) {
return getSentences(args).map(function (arg, index) {
@@ -9484,16 +8076,15 @@
});
});
};
+
/**
* Converts scriptlet rule to AdGuard one
* @param {string} rule
* @returns {Array} - array of AdGuard scriptlet rules -
* one item for Adg and Ubo or few items for Abp
*/
-
var convertScriptletToAdg = function convertScriptletToAdg(rule) {
var result;
-
if (validator.isUboScriptletRule(rule)) {
result = convertUboScriptletToAdg(rule);
} else if (validator.isAbpSnippetRule(rule)) {
@@ -9501,44 +8092,48 @@
} else if (validator.isAdgScriptletRule(rule) || validator.isComment(rule)) {
result = [rule];
}
-
return result;
};
+
/**
* Converts UBO scriptlet rule to AdGuard one
* @param {string} rule - AdGuard scriptlet rule
* @returns {string} - UBO scriptlet rule
*/
-
var convertAdgScriptletToUbo = function convertAdgScriptletToUbo(rule) {
var res;
-
if (validator.isAdgScriptletRule(rule)) {
var _parseRule = parseRule(rule),
- parsedName = _parseRule.name,
- parsedParams = _parseRule.args;
-
- var preparedParams; // https://github.com/AdguardTeam/FiltersCompiler/issues/102
-
- if (parsedName === ADG_SET_CONSTANT_NAME && parsedParams[1] === ADG_SET_CONSTANT_EMPTY_STRING) {
+ parsedName = _parseRule.name,
+ parsedParams = _parseRule.args;
+ var preparedParams;
+ if (parsedName === ADG_SET_CONSTANT_NAME
+ // https://github.com/AdguardTeam/FiltersCompiler/issues/102
+ && parsedParams[1] === ADG_SET_CONSTANT_EMPTY_STRING) {
preparedParams = [parsedParams[0], UBO_SET_CONSTANT_EMPTY_STRING];
- } else if (parsedName === ADG_PREVENT_FETCH_NAME // https://github.com/AdguardTeam/Scriptlets/issues/109
+ } else if (parsedName === ADG_SET_CONSTANT_NAME
+ // https://github.com/uBlockOrigin/uBlock-issues/issues/2411
+ && parsedParams[1] === ADG_SET_CONSTANT_EMPTY_ARRAY) {
+ preparedParams = [parsedParams[0], UBO_SET_CONSTANT_EMPTY_ARRAY];
+ } else if (parsedName === ADG_SET_CONSTANT_NAME && parsedParams[1] === ADG_SET_CONSTANT_EMPTY_OBJECT) {
+ preparedParams = [parsedParams[0], UBO_SET_CONSTANT_EMPTY_OBJECT];
+ } else if (parsedName === ADG_PREVENT_FETCH_NAME
+ // https://github.com/AdguardTeam/Scriptlets/issues/109
&& (parsedParams[0] === ADG_PREVENT_FETCH_WILDCARD || parsedParams[0] === ADG_PREVENT_FETCH_EMPTY_STRING)) {
preparedParams = [UBO_NO_FETCH_IF_WILDCARD];
} else if ((parsedName === ADG_REMOVE_ATTR_NAME || parsedName === ADG_REMOVE_CLASS_NAME) && parsedParams[1] && parsedParams[1].indexOf(COMMA_SEPARATOR) > -1) {
preparedParams = [parsedParams[0], replaceAll(parsedParams[1], COMMA_SEPARATOR, ESCAPED_COMMA_SEPARATOR)];
} else {
preparedParams = parsedParams;
- } // object of name and aliases for the Adg-scriptlet
-
+ }
+ // object of name and aliases for the Adg-scriptlet
var adgScriptletObject = Object.keys(scriptletList).map(function (el) {
return scriptletList[el];
}).map(function (s) {
var _s$names = toArray$1(s.names),
- name = _s$names[0],
- aliases = _s$names.slice(1);
-
+ name = _s$names[0],
+ aliases = _s$names.slice(1);
return {
name: name,
aliases: aliases
@@ -9547,25 +8142,23 @@
return el.name === parsedName || el.aliases.indexOf(parsedName) >= 0;
});
var aliases = adgScriptletObject.aliases;
-
if (aliases.length > 0) {
- var uboAlias = adgScriptletObject.aliases // eslint-disable-next-line no-restricted-properties
+ var uboAlias = adgScriptletObject.aliases
+ // eslint-disable-next-line no-restricted-properties
.find(function (alias) {
return alias.includes(UBO_ALIAS_NAME_MARKER);
});
-
if (uboAlias) {
var mask = rule.match(ADGUARD_SCRIPTLET_MASK_REG)[0];
var template;
-
if (mask.indexOf('@') > -1) {
template = UBO_SCRIPTLET_EXCEPTION_TEMPLATE;
} else {
template = UBO_SCRIPTLET_TEMPLATE;
}
-
var domains = getBeforeRegExp(rule, ADGUARD_SCRIPTLET_MASK_REG);
- var uboName = uboAlias.replace(UBO_ALIAS_NAME_MARKER, '') // '.js' in the Ubo scriptlet name can be omitted
+ var uboName = uboAlias.replace(UBO_ALIAS_NAME_MARKER, '')
+ // '.js' in the Ubo scriptlet name can be omitted
// https://github.com/gorhill/uBlock/wiki/Resources-Library#general-purpose-scriptlets
.replace(UBO_SCRIPTLET_JS_ENDING, '');
var args = preparedParams.length > 0 ? "".concat(uboName, ", ").concat(preparedParams.join("".concat(COMMA_SEPARATOR, " "))) : uboName;
@@ -9577,30 +8170,30 @@
}
}
}
-
return res;
};
+
/**
* Checks whether the ADG scriptlet exists or UBO/ABP scriptlet is compatible to ADG
* @param {string} input - can be ADG or UBO or ABP scriptlet rule
* @returns {boolean}
*/
-
var isValidScriptletRule = function isValidScriptletRule(input) {
if (!input) {
return false;
- } // ABP 'input' rule may contain more than one snippet
-
+ }
+ // ABP 'input' rule may contain more than one snippet
+ var rulesArray = convertScriptletToAdg(input);
- var rulesArray = convertScriptletToAdg(input); // checking if each of parsed scriptlets is valid
+ // checking if each of parsed scriptlets is valid
// if at least one of them is not valid - whole 'input' rule is not valid too
-
var isValid = rulesArray.every(function (rule) {
var parsedRule = parseRule(rule);
return validator.isValidScriptletName(parsedRule.name);
});
return isValid;
};
+
/**
* Gets index and redirect resource marker from UBO/ADG modifiers array
* @param {string[]} modifiers
@@ -9608,39 +8201,34 @@
* @param {string} rule
* @returns {Object} { index, marker }
*/
-
var getMarkerData = function getMarkerData(modifiers, redirectsData, rule) {
var marker;
var index = modifiers.findIndex(function (m) {
return m.indexOf(redirectsData.redirectRuleMarker) > -1;
});
-
if (index > -1) {
marker = redirectsData.redirectRuleMarker;
} else {
index = modifiers.findIndex(function (m) {
return m.indexOf(redirectsData.redirectMarker) > -1;
});
-
if (index > -1) {
marker = redirectsData.redirectMarker;
} else {
throw new Error("No redirect resource modifier found in rule: ".concat(rule));
}
}
-
return {
index: index,
marker: marker
};
};
+
/**
* Converts Ubo redirect rule to Adg one
* @param {string} rule
* @returns {string}
*/
-
-
var convertUboRedirectToAdg = function convertUboRedirectToAdg(rule) {
var firstPartOfRule = substringBefore(rule, '$');
var uboModifiers = validator.parseModifiers(rule);
@@ -9652,21 +8240,19 @@
var adgMarker = uboMarkerData.marker === validator.ADG_UBO_REDIRECT_RULE_MARKER ? validator.REDIRECT_RULE_TYPES.ADG.redirectRuleMarker : validator.REDIRECT_RULE_TYPES.ADG.redirectMarker;
return "".concat(adgMarker).concat(adgName);
}
-
if (modifier === UBO_XHR_TYPE) {
return ADG_XHR_TYPE;
}
-
return modifier;
}).join(COMMA_SEPARATOR);
return "".concat(firstPartOfRule, "$").concat(adgModifiers);
};
+
/**
* Converts Abp redirect rule to Adg one
* @param {string} rule
* @returns {string}
*/
-
var convertAbpRedirectToAdg = function convertAbpRedirectToAdg(rule) {
var firstPartOfRule = substringBefore(rule, '$');
var abpModifiers = validator.parseModifiers(rule);
@@ -9676,20 +8262,18 @@
var adgName = validator.REDIRECT_RULE_TYPES.ABP.compatibility[abpName];
return "".concat(validator.REDIRECT_RULE_TYPES.ADG.redirectMarker).concat(adgName);
}
-
return modifier;
}).join(COMMA_SEPARATOR);
return "".concat(firstPartOfRule, "$").concat(adgModifiers);
};
+
/**
* Converts redirect rule to AdGuard one
* @param {string} rule
* @returns {string}
*/
-
var convertRedirectToAdg = function convertRedirectToAdg(rule) {
var result;
-
if (validator.isUboRedirectCompatibleWithAdg(rule)) {
result = convertUboRedirectToAdg(rule);
} else if (validator.isAbpRedirectCompatibleWithAdg(rule)) {
@@ -9697,9 +8281,9 @@
} else if (validator.isValidAdgRedirectRule(rule)) {
result = rule;
}
-
return result;
};
+
/**
* Converts Adg redirect rule to Ubo one
* 1. Checks if there is Ubo analog for Adg rule
@@ -9711,40 +8295,33 @@
* @param {string} rule
* @returns {string}
*/
-
var convertAdgRedirectToUbo = function convertAdgRedirectToUbo(rule) {
if (!validator.isAdgRedirectCompatibleWithUbo(rule)) {
throw new Error("Unable to convert for uBO - unsupported redirect in rule: ".concat(rule));
}
-
var basePart = substringBefore(rule, '$');
var adgModifiers = validator.parseModifiers(rule);
var adgMarkerData = getMarkerData(adgModifiers, validator.REDIRECT_RULE_TYPES.ADG, rule);
var adgRedirectName = adgModifiers[adgMarkerData.index].slice(adgMarkerData.marker.length);
-
if (!validator.hasValidContentType(rule)) {
// add missed source types as content type modifiers
var sourceTypesData = validator.ABSENT_SOURCE_TYPE_REPLACEMENT.find(function (el) {
return el.NAME === adgRedirectName;
});
-
if (typeof sourceTypesData === 'undefined') {
// eslint-disable-next-line max-len
throw new Error("Unable to convert for uBO - no types to add for specific redirect in rule: ".concat(rule));
}
-
var additionModifiers = sourceTypesData.TYPES;
- adgModifiers.push.apply(adgModifiers, toConsumableArray$1(additionModifiers));
+ adgModifiers.push.apply(adgModifiers, toConsumableArray(additionModifiers));
}
-
var uboModifiers = adgModifiers.map(function (el, index) {
if (index === adgMarkerData.index) {
- var uboMarker = adgMarkerData.marker === validator.ADG_UBO_REDIRECT_RULE_MARKER ? validator.REDIRECT_RULE_TYPES.UBO.redirectRuleMarker : validator.REDIRECT_RULE_TYPES.UBO.redirectMarker; // eslint-disable-next-line max-len
-
+ var uboMarker = adgMarkerData.marker === validator.ADG_UBO_REDIRECT_RULE_MARKER ? validator.REDIRECT_RULE_TYPES.UBO.redirectRuleMarker : validator.REDIRECT_RULE_TYPES.UBO.redirectMarker;
+ // eslint-disable-next-line max-len
var uboRedirectName = validator.REDIRECT_RULE_TYPES.ADG.compatibility[adgRedirectName];
return "".concat(uboMarker).concat(uboRedirectName);
}
-
return el;
}).join(COMMA_SEPARATOR);
return "".concat(basePart, "$").concat(uboModifiers);
@@ -9766,30 +8343,24 @@
* ||googletagmanager.com/gtm.js$script,redirect=googletagmanager-gtm
* ```
*/
-
function GoogleAnalytics(source) {
// eslint-disable-next-line func-names
var Tracker = function Tracker() {}; // constructor
-
-
var proto = Tracker.prototype;
proto.get = noopFunc;
proto.set = noopFunc;
proto.send = noopFunc;
- var googleAnalyticsName = window.GoogleAnalyticsObject || 'ga'; // a -- fake arg for 'ga.length < 1' antiadblock checking
+ var googleAnalyticsName = window.GoogleAnalyticsObject || 'ga';
+ // a -- fake arg for 'ga.length < 1' antiadblock checking
// eslint-disable-next-line no-unused-vars
-
function ga(a) {
var len = arguments.length;
-
if (len === 0) {
return;
- } // eslint-disable-next-line prefer-rest-params
-
-
+ }
+ // eslint-disable-next-line prefer-rest-params
var lastArg = arguments[len - 1];
var replacer;
-
if (lastArg instanceof Object && lastArg !== null && typeof lastArg.hitCallback === 'function') {
replacer = lastArg.hitCallback;
} else if (typeof lastArg === 'function') {
@@ -9798,79 +8369,68 @@
lastArg(ga.create());
};
}
-
try {
- setTimeout(replacer, 1); // eslint-disable-next-line no-empty
+ setTimeout(replacer, 1);
+ // eslint-disable-next-line no-empty
} catch (ex) {}
}
-
ga.create = function () {
return new Tracker();
- }; // https://github.com/AdguardTeam/Scriptlets/issues/134
-
-
+ };
+ // https://github.com/AdguardTeam/Scriptlets/issues/134
ga.getByName = function () {
return new Tracker();
};
-
ga.getAll = function () {
return [new Tracker()];
};
-
ga.remove = noopFunc;
ga.loaded = true;
window[googleAnalyticsName] = ga;
var _window = window,
- dataLayer = _window.dataLayer,
- google_optimize = _window.google_optimize; // eslint-disable-line camelcase
-
+ dataLayer = _window.dataLayer,
+ google_optimize = _window.google_optimize; // eslint-disable-line camelcase
if (dataLayer instanceof Object === false) {
return;
}
-
if (dataLayer.hide instanceof Object && typeof dataLayer.hide.end === 'function') {
dataLayer.hide.end();
}
+
/**
* checks data object and delays callback
* @param {Object|Array} data gtag payload
* @param {string} funcName callback prop name
* @returns
*/
-
-
var handleCallback = function handleCallback(dataObj, funcName) {
if (dataObj && typeof dataObj[funcName] === 'function') {
setTimeout(dataObj[funcName]);
}
};
-
if (typeof dataLayer.push === 'function') {
dataLayer.push = function (data) {
if (data instanceof Object) {
- handleCallback(data, 'eventCallback'); // eslint-disable-next-line no-restricted-syntax, guard-for-in
-
+ handleCallback(data, 'eventCallback');
+ // eslint-disable-next-line no-restricted-syntax, guard-for-in
for (var key in data) {
handleCallback(data[key], 'event_callback');
- } // eslint-disable-next-line no-prototype-builtins
-
-
+ }
+ // eslint-disable-next-line no-prototype-builtins
if (!data.hasOwnProperty('eventCallback') && !data.hasOwnProperty('eventCallback')) {
[].push.call(window.dataLayer, data);
}
}
-
if (Array.isArray(data)) {
data.forEach(function (arg) {
handleCallback(arg, 'callback');
});
}
-
return noopFunc;
};
- } // https://github.com/AdguardTeam/Scriptlets/issues/81
-
+ }
+ // https://github.com/AdguardTeam/Scriptlets/issues/81
if (google_optimize instanceof Object && typeof google_optimize.get === 'function') {
// eslint-disable-line camelcase
var googleOptimizeWrapper = {
@@ -9878,14 +8438,15 @@
};
window.google_optimize = googleOptimizeWrapper;
}
-
hit(source);
}
- GoogleAnalytics.names = ['google-analytics', 'ubo-google-analytics_analytics.js', 'google-analytics_analytics.js', // https://github.com/AdguardTeam/Scriptlets/issues/127
+ GoogleAnalytics.names = ['google-analytics', 'ubo-google-analytics_analytics.js', 'google-analytics_analytics.js',
+ // https://github.com/AdguardTeam/Scriptlets/issues/127
'googletagmanager-gtm', 'ubo-googletagmanager_gtm.js', 'googletagmanager_gtm.js'];
GoogleAnalytics.injections = [hit, noopFunc, noopNull, noopArray];
/* eslint-disable no-underscore-dangle */
+
/**
* @redirect google-analytics-ga
*
@@ -9900,11 +8461,9 @@
* ||google-analytics.com/ga.js$script,redirect=google-analytics-ga
* ```
*/
-
function GoogleAnalyticsGa(source) {
// Gaq constructor
function Gaq() {}
-
Gaq.prototype.Na = noopFunc;
Gaq.prototype.O = noopFunc;
Gaq.prototype.Sa = noopFunc;
@@ -9913,80 +8472,67 @@
Gaq.prototype._createAsyncTracker = noopFunc;
Gaq.prototype._getAsyncTracker = noopFunc;
Gaq.prototype._getPlugin = noopFunc;
-
Gaq.prototype.push = function (data) {
if (typeof data === 'function') {
data();
return;
}
-
if (Array.isArray(data) === false) {
return;
- } // https://developers.google.com/analytics/devguides/collection/gajs/methods/gaJSApiDomainDirectory#_gat.GA_Tracker_._link
+ }
+ // https://developers.google.com/analytics/devguides/collection/gajs/methods/gaJSApiDomainDirectory#_gat.GA_Tracker_._link
// https://github.com/uBlockOrigin/uBlock-issues/issues/1807
-
-
if (typeof data[0] === 'string' && /(^|\.)_link$/.test(data[0]) && typeof data[1] === 'string') {
window.location.assign(data[1]);
- } // https://github.com/gorhill/uBlock/issues/2162
-
-
+ }
+ // https://github.com/gorhill/uBlock/issues/2162
if (data[0] === '_set' && data[1] === 'hitCallback' && typeof data[2] === 'function') {
data[2]();
}
};
-
var gaq = new Gaq();
var asyncTrackers = window._gaq || [];
-
if (Array.isArray(asyncTrackers)) {
while (asyncTrackers[0]) {
gaq.push(asyncTrackers.shift());
}
- } // eslint-disable-next-line no-multi-assign
-
-
- window._gaq = gaq.qf = gaq; // Gat constructor
-
- function Gat() {} // Mock tracker api
+ }
+ // eslint-disable-next-line no-multi-assign
+ window._gaq = gaq.qf = gaq;
+ // Gat constructor
+ function Gat() {}
+ // Mock tracker api
var api = ['_addIgnoredOrganic', '_addIgnoredRef', '_addItem', '_addOrganic', '_addTrans', '_clearIgnoredOrganic', '_clearIgnoredRef', '_clearOrganic', '_cookiePathCopy', '_deleteCustomVar', '_getName', '_setAccount', '_getAccount', '_getClientInfo', '_getDetectFlash', '_getDetectTitle', '_getLinkerUrl', '_getLocalGifPath', '_getServiceMode', '_getVersion', '_getVisitorCustomVar', '_initData', '_link', '_linkByPost', '_setAllowAnchor', '_setAllowHash', '_setAllowLinker', '_setCampContentKey', '_setCampMediumKey', '_setCampNameKey', '_setCampNOKey', '_setCampSourceKey', '_setCampTermKey', '_setCampaignCookieTimeout', '_setCampaignTrack', '_setClientInfo', '_setCookiePath', '_setCookiePersistence', '_setCookieTimeout', '_setCustomVar', '_setDetectFlash', '_setDetectTitle', '_setDomainName', '_setLocalGifPath', '_setLocalRemoteServerMode', '_setLocalServerMode', '_setReferrerOverride', '_setRemoteServerMode', '_setSampleRate', '_setSessionTimeout', '_setSiteSpeedSampleRate', '_setSessionCookieTimeout', '_setVar', '_setVisitorCookieTimeout', '_trackEvent', '_trackPageLoadTime', '_trackPageview', '_trackSocial', '_trackTiming', '_trackTrans', '_visitCode'];
var tracker = api.reduce(function (res, funcName) {
res[funcName] = noopFunc;
return res;
}, {});
-
tracker._getLinkerUrl = function (a) {
return a;
- }; // https://github.com/AdguardTeam/Scriptlets/issues/154
-
-
+ };
+ // https://github.com/AdguardTeam/Scriptlets/issues/154
tracker._link = function (url) {
if (typeof url !== 'string') {
return;
}
-
try {
window.location.assign(url);
} catch (e) {
logMessage(source, e);
}
};
-
Gat.prototype._anonymizeIP = noopFunc;
Gat.prototype._createTracker = noopFunc;
Gat.prototype._forceSSL = noopFunc;
Gat.prototype._getPlugin = noopFunc;
-
Gat.prototype._getTracker = function () {
return tracker;
};
-
Gat.prototype._getTrackerByName = function () {
return tracker;
};
-
Gat.prototype._getTrackers = noopFunc;
Gat.prototype.aa = noopFunc;
Gat.prototype.ab = noopFunc;
@@ -10003,7 +8549,6 @@
GoogleAnalyticsGa.injections = [hit, noopFunc, logMessage];
/* eslint-disable max-len */
-
/**
* @redirect googlesyndication-adsbygoogle
*
@@ -10018,9 +8563,7 @@
* ||pagead2.googlesyndication.com/pagead/js/adsbygoogle.js$script,redirect=googlesyndication-adsbygoogle
* ```
*/
-
/* eslint-enable max-len */
-
function GoogleSyndicationAdsByGoogle(source) {
window.adsbygoogle = {
// https://github.com/AdguardTeam/Scriptlets/issues/113
@@ -10032,12 +8575,10 @@
this.length = 0;
this.length += 1;
}
-
if (arg !== null && arg instanceof Object && arg.constructor.name === 'Object') {
// eslint-disable-next-line no-restricted-syntax
for (var _i = 0, _Object$keys = Object.keys(arg); _i < _Object$keys.length; _i++) {
var key = _Object$keys[_i];
-
if (typeof arg[key] === 'function') {
try {
// https://github.com/AdguardTeam/Scriptlets/issues/252
@@ -10057,22 +8598,21 @@
var ASWIFT_IFRAME_MARKER = 'aswift_';
var GOOGLE_ADS_IFRAME_MARKER = 'google_ads_iframe_';
var executed = false;
-
for (var i = 0; i < adElems.length; i += 1) {
var adElemChildNodes = adElems[i].childNodes;
- var childNodesQuantity = adElemChildNodes.length; // childNodes of .adsbygoogle can be defined if scriptlet was executed before
+ var childNodesQuantity = adElemChildNodes.length;
+ // childNodes of .adsbygoogle can be defined if scriptlet was executed before
// so we should check that childNodes are exactly defined by us
// TODO: remake after scriptlets context developing in 1.3
-
var areIframesDefined = false;
-
if (childNodesQuantity > 0) {
// it should be only 2 child iframes if scriptlet was executed
- areIframesDefined = childNodesQuantity === 2 // the first of child nodes should be aswift iframe
- && adElemChildNodes[0].nodeName.toLowerCase() === 'iframe' && adElemChildNodes[0].id.indexOf(ASWIFT_IFRAME_MARKER) > -1 // the second of child nodes should be google_ads iframe
+ areIframesDefined = childNodesQuantity === 2
+ // the first of child nodes should be aswift iframe
+ && adElemChildNodes[0].nodeName.toLowerCase() === 'iframe' && adElemChildNodes[0].id.indexOf(ASWIFT_IFRAME_MARKER) > -1
+ // the second of child nodes should be google_ads iframe
&& adElemChildNodes[1].nodeName.toLowerCase() === 'iframe' && adElemChildNodes[1].id.indexOf(GOOGLE_ADS_IFRAME_MARKER) > -1;
}
-
if (!areIframesDefined) {
// here we do the job if scriptlet has not been executed earlier
adElems[i].setAttribute(statusAttrName, 'done');
@@ -10091,7 +8631,6 @@
executed = true;
}
}
-
if (executed) {
hit(source);
}
@@ -10100,6 +8639,7 @@
GoogleSyndicationAdsByGoogle.injections = [hit];
/* eslint-disable func-names */
+
/**
* @redirect googletagservices-gpt
*
@@ -10114,29 +8654,23 @@
* ||googletagservices.com/tag/js/gpt.js$script,redirect=googletagservices-gpt
* ```
*/
-
function GoogleTagServicesGpt(source) {
var slots = new Map();
var slotsById = new Map();
var eventCallbacks = new Map();
-
var addEventListener = function addEventListener(name, listener) {
if (!eventCallbacks.has(name)) {
eventCallbacks.set(name, new Set());
}
-
eventCallbacks.get(name).add(listener);
return this;
};
-
var removeEventListener = function removeEventListener(name, listener) {
if (eventCallbacks.has(name)) {
return eventCallbacks.get(name).delete(listener);
}
-
return false;
};
-
var fireSlotEvent = function fireSlotEvent(name, slot) {
// eslint-disable-next-line compat/compat
return new Promise(function (resolve) {
@@ -10144,7 +8678,6 @@
var size = [0, 0];
var callbacksSet = eventCallbacks.get(name) || [];
var callbackArray = Array.from(callbacksSet);
-
for (var i = 0; i < callbackArray.length; i += 1) {
callbackArray[i]({
isEmpty: true,
@@ -10152,36 +8685,28 @@
slot: slot
});
}
-
resolve();
});
});
};
-
var displaySlot = function displaySlot(slot) {
if (!slot) {
return;
}
-
var id = slot.getSlotElementId();
-
if (!document.getElementById(id)) {
return;
}
-
var parent = document.getElementById(id);
-
if (parent) {
parent.appendChild(document.createElement('div'));
}
-
fireSlotEvent('slotRenderEnded', slot);
fireSlotEvent('slotRequested', slot);
fireSlotEvent('slotResponseReceived', slot);
fireSlotEvent('slotOnload', slot);
fireSlotEvent('impressionViewable', slot);
};
-
var companionAdsService = {
addEventListener: addEventListener,
removeEventListener: removeEventListener,
@@ -10194,10 +8719,8 @@
removeEventListener: removeEventListener,
setContent: noopFunc
};
-
function PassbackSlot() {} // constructor
-
PassbackSlot.prototype.display = noopFunc;
PassbackSlot.prototype.get = noopNull;
PassbackSlot.prototype.set = noopThis;
@@ -10205,50 +8728,36 @@
PassbackSlot.prototype.setTagForChildDirectedTreatment = noopThis;
PassbackSlot.prototype.setTargeting = noopThis;
PassbackSlot.prototype.updateTargetingFromMap = noopThis;
-
function SizeMappingBuilder() {} // constructor
-
-
SizeMappingBuilder.prototype.addSize = noopThis;
SizeMappingBuilder.prototype.build = noopNull;
-
function Slot(adUnitPath, creatives, optDiv) {
this.adUnitPath = adUnitPath;
this.creatives = creatives;
this.optDiv = optDiv;
-
if (slotsById.has(optDiv)) {
var _document$getElementB;
-
(_document$getElementB = document.getElementById(optDiv)) === null || _document$getElementB === void 0 ? void 0 : _document$getElementB.remove();
return slotsById.get(optDiv);
}
-
slotsById.set(optDiv, this);
} // constructor
-
-
Slot.prototype.addService = noopThis;
Slot.prototype.clearCategoryExclusions = noopThis;
Slot.prototype.clearTargeting = noopThis;
Slot.prototype.defineSizeMapping = noopThis;
Slot.prototype.get = noopNull;
-
Slot.prototype.getAdUnitPath = function () {
return this.adUnitPath;
};
-
Slot.prototype.getAttributeKeys = noopArray;
Slot.prototype.getCategoryExclusions = noopArray;
-
Slot.prototype.getDomId = function () {
return this.optDiv;
};
-
Slot.prototype.getSlotElementId = function () {
return this.optDiv;
};
-
Slot.prototype.getSlotId = noopThis;
Slot.prototype.getSizes = noopArray;
Slot.prototype.getTargeting = noopArray;
@@ -10300,48 +8809,38 @@
setVideoContent: noopThis,
updateCorrelator: noopFunc
};
-
var getNewSlot = function getNewSlot(adUnitPath, creatives, optDiv) {
return new Slot(adUnitPath, creatives, optDiv);
};
-
var _window = window,
- _window$googletag = _window.googletag,
- googletag = _window$googletag === void 0 ? {} : _window$googletag;
+ _window$googletag = _window.googletag,
+ googletag = _window$googletag === void 0 ? {} : _window$googletag;
var _googletag$cmd = googletag.cmd,
- cmd = _googletag$cmd === void 0 ? [] : _googletag$cmd;
+ cmd = _googletag$cmd === void 0 ? [] : _googletag$cmd;
googletag.apiReady = true;
googletag.cmd = [];
-
googletag.cmd.push = function (a) {
try {
- a(); // eslint-disable-next-line no-empty
+ a();
+ // eslint-disable-next-line no-empty
} catch (ex) {}
-
return 1;
};
-
googletag.companionAds = function () {
return companionAdsService;
};
-
googletag.content = function () {
return contentService;
};
-
googletag.defineOutOfPageSlot = getNewSlot;
googletag.defineSlot = getNewSlot;
-
googletag.destroySlots = function () {
slots.clear();
slotsById.clear();
};
-
googletag.disablePublisherConsole = noopFunc;
-
googletag.display = function (arg) {
var id;
-
if (arg !== null && arg !== void 0 && arg.getSlotElementId) {
id = arg.getSlotElementId();
} else if (arg !== null && arg !== void 0 && arg.nodeType) {
@@ -10349,30 +8848,22 @@
} else {
id = String(arg);
}
-
displaySlot(slotsById.get(id));
};
-
googletag.enableServices = noopFunc;
googletag.getVersion = noopStr;
-
googletag.pubads = function () {
return pubAdsService;
};
-
googletag.pubadsReady = true;
googletag.setAdIframeTitle = noopFunc;
-
googletag.sizeMapping = function () {
return new SizeMappingBuilder();
};
-
window.googletag = googletag;
-
while (cmd.length !== 0) {
googletag.cmd.push(cmd.shift());
}
-
hit(source);
}
GoogleTagServicesGpt.names = ['googletagservices-gpt', 'ubo-googletagservices_gpt.js', 'googletagservices_gpt.js'];
@@ -10392,7 +8883,6 @@
* ||sb.scorecardresearch.com/beacon.js$script,redirect=scorecardresearch-beacon
* ```
*/
-
function ScoreCardResearchBeacon(source) {
window.COMSCORE = {
purge: function purge() {
@@ -10418,13 +8908,11 @@
* ||mc.yandex.ru/metrika/tag.js$script,redirect=metrika-yandex-tag
* ```
*/
-
function metrikaYandexTag(source) {
var asyncCallbackFromOptions = function asyncCallbackFromOptions(id, param) {
var options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};
var callback = options.callback;
var ctx = options.ctx;
-
if (typeof callback === 'function') {
callback = ctx !== undefined ? callback.bind(ctx) : callback;
setTimeout(function () {
@@ -10432,50 +8920,48 @@
});
}
};
+
/**
* https://yandex.ru/support/metrica/objects/addfileextension.html
*/
-
-
var addFileExtension = noopFunc;
+
/**
* https://yandex.ru/support/metrica/objects/extlink.html
*/
-
var extLink = asyncCallbackFromOptions;
+
/**
* https://yandex.ru/support/metrica/objects/file.html
*/
-
var file = asyncCallbackFromOptions;
+
/**
* https://yandex.ru/support/metrica/objects/get-client-id.html
* @param {Function} cb
*/
-
var getClientID = function getClientID(id, cb) {
if (!cb) {
return;
}
-
setTimeout(cb(null));
};
+
/**
* https://yandex.ru/support/metrica/objects/hit.html
*/
-
-
var hitFunc = asyncCallbackFromOptions;
+
/**
* https://yandex.ru/support/metrica/objects/notbounce.html
*/
-
var notBounce = asyncCallbackFromOptions;
+
/**
* https://yandex.ru/support/metrica/objects/params-method.html
*/
-
var params = noopFunc;
+
/**
* https://yandex.ru/support/metrica/objects/reachgoal.html
* @param {string} target
@@ -10483,25 +8969,24 @@
* @param {Function} callback
* @param {any} ctx
*/
-
var reachGoal = function reachGoal(id, target, params, callback, ctx) {
asyncCallbackFromOptions(null, null, {
callback: callback,
ctx: ctx
});
};
+
/**
* https://yandex.ru/support/metrica/objects/set-user-id.html
*/
-
-
var setUserID = noopFunc;
+
/**
* https://yandex.ru/support/metrica/objects/user-params.html
*/
+ var userParams = noopFunc;
- var userParams = noopFunc; // https://github.com/AdguardTeam/Scriptlets/issues/198
-
+ // https://github.com/AdguardTeam/Scriptlets/issues/198
var destruct = noopFunc;
var api = {
addFileExtension: addFileExtension,
@@ -10516,21 +9001,17 @@
userParams: userParams,
destruct: destruct
};
-
function ym(id, funcName) {
for (var _len = arguments.length, args = new Array(_len > 2 ? _len - 2 : 0), _key = 2; _key < _len; _key++) {
args[_key - 2] = arguments[_key];
}
-
return api[funcName] && api[funcName].apply(api, [id].concat(args));
}
-
function init(id) {
// yaCounter object should provide api
window["yaCounter".concat(id)] = api;
document.dispatchEvent(new Event("yacounter".concat(id, "inited")));
}
-
if (typeof window.ym === 'undefined') {
window.ym = ym;
ym.a = [];
@@ -10543,7 +9024,6 @@
init(id);
});
}
-
hit(source);
}
metrikaYandexTag.names = ['metrika-yandex-tag'];
@@ -10561,19 +9041,17 @@
* ||mc.yandex.ru/metrika/watch.js$script,redirect=metrika-yandex-watch
* ```
*/
-
function metrikaYandexWatch(source) {
var cbName = 'yandex_metrika_callbacks';
+
/**
* Gets callback and its context from options and call it in async way
* @param {Object} options Yandex Metrika API options
*/
-
var asyncCallbackFromOptions = function asyncCallbackFromOptions() {
var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
var callback = options.callback;
var ctx = options.ctx;
-
if (typeof callback === 'function') {
callback = ctx !== undefined ? callback.bind(ctx) : callback;
setTimeout(function () {
@@ -10581,41 +9059,34 @@
});
}
};
-
function Metrika() {} // constructor
-
-
- Metrika.counters = noopArray; // Methods without options
-
+ Metrika.counters = noopArray;
+ // Methods without options
Metrika.prototype.addFileExtension = noopFunc;
Metrika.prototype.getClientID = noopFunc;
Metrika.prototype.setUserID = noopFunc;
Metrika.prototype.userParams = noopFunc;
Metrika.prototype.params = noopFunc;
- Metrika.prototype.counters = noopArray; // Methods with options
- // The order of arguments should be kept in according to API
+ Metrika.prototype.counters = noopArray;
+ // Methods with options
+ // The order of arguments should be kept in according to API
Metrika.prototype.extLink = function (url, options) {
asyncCallbackFromOptions(options);
};
-
Metrika.prototype.file = function (url, options) {
asyncCallbackFromOptions(options);
};
-
Metrika.prototype.hit = function (url, options) {
asyncCallbackFromOptions(options);
};
-
Metrika.prototype.reachGoal = function (target, params, cb, ctx) {
asyncCallbackFromOptions({
callback: cb,
ctx: ctx
});
};
-
Metrika.prototype.notBounce = asyncCallbackFromOptions;
-
if (window.Ya) {
window.Ya.Metrika = Metrika;
} else {
@@ -10623,7 +9094,6 @@
Metrika: Metrika
};
}
-
if (window[cbName] && Array.isArray(window[cbName])) {
window[cbName].forEach(function (func) {
if (typeof func === 'function') {
@@ -10631,13 +9101,13 @@
}
});
}
-
hit(source);
}
metrikaYandexWatch.names = ['metrika-yandex-watch'];
metrikaYandexWatch.injections = [hit, noopFunc, noopArray];
/* eslint-disable func-names */
+
/**
* @redirect pardot-1.0
*
@@ -10662,7 +9132,6 @@
window.piGetParameter = noopNull;
window.piSetCookie = noopFunc;
window.piGetCookie = noopStr;
-
function piTracker() {
window.pi = {
tracker: {
@@ -10674,7 +9143,6 @@
};
window.piScriptNum += 1;
}
-
window.piResponse = noopFunc;
window.piTracker = piTracker;
piTracker();
@@ -10683,6 +9151,28 @@
Pardot.names = ['pardot-1.0'];
Pardot.injections = [hit, noopFunc, noopStr, noopNull];
+ /**
+ * @redirect prevent-bab
+ *
+ * @description
+ * Prevents BlockAdblock script from detecting an ad blocker.
+ *
+ * Mostly it is used as `scriptlet`.
+ * See [scriptlet description](../wiki/about-scriptlets.md#prevent-bab).
+ *
+ * Related UBO redirect resource:
+ * https://github.com/gorhill/uBlock/blob/a94df7f3b27080ae2dcb3b914ace39c0c294d2f6/src/web_accessible_resources/nobab.js
+ *
+ * **Example**
+ * ```
+ * /blockadblock.$script,redirect=prevent-bab
+ * ```
+ */
+ var preventBab$1 = preventBab$2;
+ preventBab$1.names = ['prevent-bab',
+ // list of prevent-bab redirect aliases
+ 'nobab.js', 'ubo-nobab.js', 'bab-defuser.js', 'ubo-bab-defuser.js', 'ubo-nobab', 'ubo-bab-defuser'];
+
/**
* @redirect amazon-apstag
*
@@ -10697,7 +9187,6 @@
* ||amazon-adsystem.com/aax2/apstag.js$script,redirect=amazon-apstag
* ```
*/
-
function AmazonApstag(source) {
var apstagWrapper = {
fetchBids: function fetchBids(a, b) {
@@ -10716,6 +9205,7 @@
AmazonApstag.injections = [hit, noopFunc];
/* eslint-disable func-names */
+
/**
* @redirect matomo
*
@@ -10730,14 +9220,11 @@
function Matomo(source) {
var Tracker = function Tracker() {};
-
Tracker.prototype.setDoNotTrack = noopFunc;
Tracker.prototype.setDomains = noopFunc;
Tracker.prototype.setCustomDimension = noopFunc;
Tracker.prototype.trackPageView = noopFunc;
-
var AsyncTracker = function AsyncTracker() {};
-
AsyncTracker.prototype.addListener = noopFunc;
var matomoWrapper = {
getTracker: function getTracker() {
@@ -10754,6 +9241,7 @@
Matomo.injections = [hit, noopFunc];
/* eslint-disable func-names */
+
/**
* @redirect fingerprintjs2
*
@@ -10769,41 +9257,38 @@
* ||the-japan-news.com/modules/js/lib/fgp/fingerprint2.js$script,redirect=fingerprintjs2
* ```
*/
-
function Fingerprintjs2(source) {
var browserId = '';
-
for (var i = 0; i < 8; i += 1) {
browserId += (Math.random() * 0x10000 + 0x1000).toString(16).slice(-4);
}
-
var Fingerprint2 = function Fingerprint2() {};
-
Fingerprint2.get = function (options, callback) {
if (!callback) {
callback = options;
}
-
setTimeout(function () {
if (callback) {
callback(browserId, []);
}
}, 1);
};
-
Fingerprint2.prototype = {
get: Fingerprint2.get
};
window.Fingerprint2 = Fingerprint2;
hit(source);
}
- Fingerprintjs2.names = ['fingerprintjs2', // redirect aliases are needed for conversion:
+ Fingerprintjs2.names = ['fingerprintjs2',
+ // redirect aliases are needed for conversion:
// prefixed for us
- 'ubo-fingerprint2.js', // original ubo name
+ 'ubo-fingerprint2.js',
+ // original ubo name
'fingerprint2.js'];
Fingerprintjs2.injections = [hit];
/* eslint-disable func-names */
+
/**
* @redirect fingerprintjs3
*
@@ -10819,20 +9304,15 @@
* ||sephora.com/js/ufe/isomorphic/thirdparty/fp.min.js$script,redirect=fingerprintjs3
* ```
*/
-
function Fingerprintjs3(source) {
var visitorId = function () {
var id = '';
-
for (var i = 0; i < 8; i += 1) {
id += (Math.random() * 0x10000 + 0x1000).toString(16).slice(-4);
}
-
return id;
}();
-
var FingerprintJS = function FingerprintJS() {};
-
FingerprintJS.prototype = {
load: function load() {
// eslint-disable-next-line compat/compat
@@ -10849,13 +9329,16 @@
window.FingerprintJS = new FingerprintJS();
hit(source);
}
- Fingerprintjs3.names = ['fingerprintjs3', // redirect aliases are needed for conversion:
+ Fingerprintjs3.names = ['fingerprintjs3',
+ // redirect aliases are needed for conversion:
// prefixed for us
- 'ubo-fingerprint3.js', // original ubo name
+ 'ubo-fingerprint3.js',
+ // original ubo name
'fingerprint3.js'];
Fingerprintjs3.injections = [hit, noopStr];
/* eslint-disable func-names */
+
/**
* @redirect gemius
*
@@ -10868,10 +9351,8 @@
* ||gapt.hit.gemius.pl/gplayer.js$script,redirect=gemius
* ```
*/
-
function Gemius(source) {
var GemiusPlayer = function GemiusPlayer() {};
-
GemiusPlayer.prototype = {
setVideoObject: noopFunc,
newProgram: noopFunc,
@@ -10897,7 +9378,6 @@
* ||bloctel.gouv.fr/assets/scripts/smarttag.js$script,redirect=ati-smarttag
* ```
*/
-
function ATInternetSmartTag(source) {
var setNoopFuncWrapper = {
set: noopFunc
@@ -10925,10 +9405,10 @@
removeProduct: {
products: setNoopFuncWrapper
}
- }; // eslint-disable-next-line new-cap, func-names
+ };
+ // eslint-disable-next-line new-cap, func-names
var tag = function tag() {};
-
tag.prototype = {
setConfig: noopFunc,
setParam: noopFunc,
@@ -10973,6 +9453,7 @@
}
}
};
+
window.ATInternet = smartTagWrapper;
hit(source);
}
@@ -10980,6 +9461,7 @@
ATInternetSmartTag.injections = [hit, noopFunc];
/* eslint-disable consistent-return, no-eval */
+
/**
* @redirect prevent-bab2
*
@@ -10996,37 +9478,32 @@
* /blockadblock.$script,redirect=prevent-bab2
* ```
*/
-
function preventBab2(source) {
// eslint-disable-next-line compat/compat
var script = document.currentScript;
-
if (script === null) {
return;
}
-
var url = script.src;
-
if (typeof url !== 'string') {
return;
}
-
var domainsStr = ['adclixx\\.net', 'adnetasia\\.com', 'adtrackers\\.net', 'bannertrack\\.net'].join('|');
var matchStr = "^https?://[\\w-]+\\.(".concat(domainsStr, ")/.");
var domainsRegex = new RegExp(matchStr);
-
if (domainsRegex.test(url) === false) {
return;
}
-
window.nH7eXzOsG = 858;
hit(source);
}
- preventBab2.names = ['prevent-bab2', // aliases are needed for matching the related scriptlet converted into our syntax
+ preventBab2.names = ['prevent-bab2',
+ // aliases are needed for matching the related scriptlet converted into our syntax
'nobab2.js'];
preventBab2.injections = [hit];
/* eslint-disable func-names, no-underscore-dangle */
+
/**
* @redirect google-ima3
*
@@ -11042,14 +9519,10 @@
function GoogleIma3(source) {
var VERSION = '3.453.0';
var ima = {};
-
var AdDisplayContainer = function AdDisplayContainer() {};
-
AdDisplayContainer.prototype.destroy = noopFunc;
AdDisplayContainer.prototype.initialize = noopFunc;
-
var ImaSdkSettings = function ImaSdkSettings() {};
-
ImaSdkSettings.CompanionBackfillMode = {
ALWAYS: 'always',
ON_MASTER_AD: 'on_master_ad'
@@ -11153,16 +9626,13 @@
INSECURE: 2
}
};
-
var EventHandler = function EventHandler() {
this.listeners = new Map();
-
this._dispatch = function (e) {
- var listeners = this.listeners.get(e.type) || []; // eslint-disable-next-line no-restricted-syntax
-
+ var listeners = this.listeners.get(e.type) || [];
+ // eslint-disable-next-line no-restricted-syntax
for (var _i = 0, _Array$from = Array.from(listeners); _i < _Array$from.length; _i++) {
var listener = _Array$from[_i];
-
try {
listener(e);
} catch (r) {
@@ -11170,25 +9640,19 @@
}
}
};
-
this.addEventListener = function (t, c) {
if (!this.listeners.has(t)) {
this.listeners.set(t, new Set());
}
-
this.listeners.get(t).add(c);
};
-
this.removeEventListener = function (t, c) {
var _this$listeners$get;
-
(_this$listeners$get = this.listeners.get(t)) === null || _this$listeners$get === void 0 ? void 0 : _this$listeners$get.delete(c);
};
};
-
var AdsManager = new EventHandler();
/* eslint-disable no-use-before-define */
-
AdsManager.volume = 1;
AdsManager.collapse = noopFunc;
AdsManager.configureAdsManager = noopFunc;
@@ -11196,57 +9660,43 @@
AdsManager.discardAdBreak = noopFunc;
AdsManager.expand = noopFunc;
AdsManager.focus = noopFunc;
-
AdsManager.getAdSkippableState = function () {
return false;
};
-
AdsManager.getCuePoints = function () {
return [0];
};
-
AdsManager.getCurrentAd = function () {
return currentAd;
};
-
AdsManager.getCurrentAdCuePoints = function () {
return [];
};
-
AdsManager.getRemainingTime = function () {
return 0;
};
-
AdsManager.getVolume = function () {
return this.volume;
};
-
AdsManager.init = noopFunc;
-
AdsManager.isCustomClickTrackingUsed = function () {
return false;
};
-
AdsManager.isCustomPlaybackUsed = function () {
return false;
};
-
AdsManager.pause = noopFunc;
AdsManager.requestNextAdBreak = noopFunc;
AdsManager.resize = noopFunc;
AdsManager.resume = noopFunc;
-
AdsManager.setVolume = function (v) {
this.volume = v;
};
-
AdsManager.skip = noopFunc;
-
AdsManager.start = function () {
// eslint-disable-next-line no-restricted-syntax
for (var _i2 = 0, _arr = [AdEvent.Type.ALL_ADS_COMPLETED, AdEvent.Type.CONTENT_RESUME_REQUESTED]; _i2 < _arr.length; _i2++) {
var type = _arr[_i2];
-
try {
this._dispatch(new ima.AdEvent(type));
} catch (e) {
@@ -11254,19 +9704,16 @@
}
}
};
-
AdsManager.stop = noopFunc;
AdsManager.updateAdsRenderingSettings = noopFunc;
/* eslint-enable no-use-before-define */
var manager = Object.create(AdsManager);
-
var AdsManagerLoadedEvent = function AdsManagerLoadedEvent(type, adsRequest, userRequestContext) {
this.type = type;
this.adsRequest = adsRequest;
this.userRequestContext = userRequestContext;
};
-
AdsManagerLoadedEvent.prototype = {
getAdsManager: function getAdsManager() {
return manager;
@@ -11275,7 +9722,6 @@
if (this.userRequestContext) {
return this.userRequestContext;
}
-
return {};
}
};
@@ -11286,22 +9732,17 @@
AdsLoader.prototype.settings = new ImaSdkSettings();
AdsLoader.prototype.contentComplete = noopFunc;
AdsLoader.prototype.destroy = noopFunc;
-
AdsLoader.prototype.getSettings = function () {
return this.settings;
};
-
AdsLoader.prototype.getVersion = function () {
return VERSION;
};
-
AdsLoader.prototype.requestAds = function (adsRequest, userRequestContext) {
var _this = this;
-
requestAnimationFrame(function () {
var ADS_MANAGER_LOADED = AdsManagerLoadedEvent.Type.ADS_MANAGER_LOADED;
var event = new ima.AdsManagerLoadedEvent(ADS_MANAGER_LOADED, adsRequest, userRequestContext);
-
_this._dispatch(event);
});
var e = new ima.AdError('adPlayError', 1205, 1205, 'The browser prevented playback initiated without user interaction.', adsRequest, userRequestContext);
@@ -11309,19 +9750,14 @@
_this._dispatch(new ima.AdErrorEvent(e));
});
};
-
var AdsRenderingSettings = noopFunc;
-
var AdsRequest = function AdsRequest() {};
-
AdsRequest.prototype = {
setAdWillAutoPlay: noopFunc,
setAdWillPlayMuted: noopFunc,
setContinuousPlayback: noopFunc
};
-
var AdPodInfo = function AdPodInfo() {};
-
AdPodInfo.prototype = {
getAdPosition: function getAdPosition() {
return 1;
@@ -11342,9 +9778,7 @@
return 1;
}
};
-
var Ad = function Ad() {};
-
Ad.prototype = {
pi: new AdPodInfo(),
getAdId: function getAdId() {
@@ -11441,9 +9875,7 @@
return true;
}
};
-
var CompanionAd = function CompanionAd() {};
-
CompanionAd.prototype = {
getAdSlotId: function getAdSlotId() {
return '';
@@ -11461,65 +9893,49 @@
return 1;
}
};
-
var AdError = function AdError(type, code, vast, message, adsRequest, userRequestContext) {
this.errorCode = code;
this.message = message;
this.type = type;
this.adsRequest = adsRequest;
this.userRequestContext = userRequestContext;
-
this.getErrorCode = function () {
return this.errorCode;
};
-
this.getInnerError = function () {};
-
this.getMessage = function () {
return this.message;
};
-
this.getType = function () {
return this.type;
};
-
this.getVastErrorCode = function () {
return this.vastErrorCode;
};
-
this.toString = function () {
return "AdError ".concat(this.errorCode, ": ").concat(this.message);
};
};
-
AdError.ErrorCode = {};
AdError.Type = {};
-
var isEngadget = function isEngadget() {
try {
// eslint-disable-next-line no-restricted-syntax
for (var _i3 = 0, _Object$values = Object.values(window.vidible._getContexts()); _i3 < _Object$values.length; _i3++) {
var _ctx$getPlayer, _ctx$getPlayer$div;
-
var ctx = _Object$values[_i3];
-
// eslint-disable-next-line no-restricted-properties
if ((_ctx$getPlayer = ctx.getPlayer()) !== null && _ctx$getPlayer !== void 0 && (_ctx$getPlayer$div = _ctx$getPlayer.div) !== null && _ctx$getPlayer$div !== void 0 && _ctx$getPlayer$div.innerHTML.includes('www.engadget.com')) {
return true;
}
}
} catch (e) {} // eslint-disable-line no-empty
-
-
return false;
};
-
var currentAd = isEngadget() ? undefined : new Ad();
-
var AdEvent = function AdEvent(type) {
this.type = type;
};
-
AdEvent.prototype = {
getAd: function getAd() {
return currentAd;
@@ -11560,38 +9976,28 @@
VOLUME_CHANGED: 'volumeChange',
VOLUME_MUTED: 'mute'
};
-
var AdErrorEvent = function AdErrorEvent(error) {
this.error = error;
this.type = 'adError';
-
this.getError = function () {
return this.error;
};
-
this.getUserRequestContext = function () {
var _this$error;
-
if ((_this$error = this.error) !== null && _this$error !== void 0 && _this$error.userRequestContext) {
return this.error.userRequestContext;
}
-
return {};
};
};
-
AdErrorEvent.Type = {
AD_ERROR: 'adError'
};
-
var CustomContentLoadedEvent = function CustomContentLoadedEvent() {};
-
CustomContentLoadedEvent.Type = {
CUSTOM_CONTENT_LOADED: 'deprecated-event'
};
-
var CompanionAdSelectionSettings = function CompanionAdSelectionSettings() {};
-
CompanionAdSelectionSettings.CreativeType = {
ALL: 'All',
FLASH: 'Flash',
@@ -11608,9 +10014,7 @@
SELECT_EXACT_MATCH: 'SelectExactMatch',
SELECT_NEAR_MATCH: 'SelectNearMatch'
};
-
var AdCuePoints = function AdCuePoints() {};
-
AdCuePoints.prototype = {
getCuePoints: function getCuePoints() {
return [];
@@ -11623,9 +10027,7 @@
}
};
var AdProgressData = noopFunc;
-
var UniversalAdIdInfo = function UniversalAdIdInfo() {};
-
Object.assign(ima, {
AdCuePoints: AdCuePoints,
AdDisplayContainer: AdDisplayContainer,
@@ -11661,18 +10063,21 @@
NORMAL: 'normal'
}
});
-
if (!window.google) {
window.google = {};
}
-
window.google.ima = ima;
hit(source);
}
- GoogleIma3.names = ['google-ima3'];
+ GoogleIma3.names = ['google-ima3',
+ // prefixed name
+ 'ubo-google-ima.js',
+ // original ubo name
+ 'google-ima.js'];
GoogleIma3.injections = [hit, noopFunc, logMessage];
/* eslint-disable func-names, no-underscore-dangle */
+
/**
* @redirect didomi-loader
*
@@ -11685,26 +10090,19 @@
* ||sdk.privacy-center.org/fbf86806f86e/loader.js$script,redirect=didomi-loader
* ```
*/
-
function DidomiLoader(source) {
function UserConsentStatusForVendorSubscribe() {}
-
UserConsentStatusForVendorSubscribe.prototype.filter = function () {
return new UserConsentStatusForVendorSubscribe();
};
-
UserConsentStatusForVendorSubscribe.prototype.subscribe = noopFunc;
-
function UserConsentStatusForVendor() {}
-
UserConsentStatusForVendor.prototype.first = function () {
return new UserConsentStatusForVendorSubscribe();
};
-
UserConsentStatusForVendor.prototype.filter = function () {
return new UserConsentStatusForVendorSubscribe();
};
-
UserConsentStatusForVendor.prototype.subscribe = noopFunc;
var DidomiWrapper = {
isConsentRequired: falseFunc,
@@ -11765,16 +10163,15 @@
purpose: {
consents: []
}
- }; // https://github.com/InteractiveAdvertisingBureau/GDPR-Transparency-and-Consent-Framework/blob/master/TCFv2/IAB%20Tech%20Lab%20-%20CMP%20API%20v2.md#how-does-the-cmp-provide-the-api
+ };
+ // https://github.com/InteractiveAdvertisingBureau/GDPR-Transparency-and-Consent-Framework/blob/master/TCFv2/IAB%20Tech%20Lab%20-%20CMP%20API%20v2.md#how-does-the-cmp-provide-the-api
var __tcfapiWrapper = function __tcfapiWrapper(command, version, callback) {
if (typeof callback !== 'function' || command === 'removeEventListener') {
return;
}
-
callback(tcData, true);
};
-
window.__tcfapi = __tcfapiWrapper;
var didomiEventListenersWrapper = {
stub: true,
@@ -11787,7 +10184,6 @@
if (typeof arg !== 'function') {
return;
}
-
if (document.readyState !== 'complete') {
window.addEventListener('load', function () {
setTimeout(arg(window.Didomi));
@@ -11798,7 +10194,6 @@
}
};
window.didomiOnReady = window.didomiOnReady || didomiOnReadyWrapper;
-
if (Array.isArray(window.didomiOnReady)) {
window.didomiOnReady.forEach(function (arg) {
if (typeof arg === 'function') {
@@ -11810,13 +10205,13 @@
}
});
}
-
hit(source);
}
DidomiLoader.names = ['didomi-loader'];
DidomiLoader.injections = [hit, noopFunc, noopArray, trueFunc, falseFunc];
/* eslint-disable func-names */
+
/**
* @redirect prebid
*
@@ -11840,7 +10235,6 @@
}
}
};
-
var pbjsWrapper = {
addAdUnits: function addAdUnits() {},
adServers: {
@@ -11880,6 +10274,7 @@
Prebid.injections = [hit, noopFunc, noopStr, noopArray];
/* eslint-disable func-names */
+
/**
* @redirect prebid-ads
*
@@ -11893,7 +10288,6 @@
* ||playerdrive.me/assets/js/prebid-ads.js$script,redirect=prebid-ads
* ```
*/
-
function prebidAds(source) {
window.canRunAds = true;
window.isAdBlockActive = false;
@@ -11903,6 +10297,7 @@
prebidAds.injections = [hit];
/* eslint-disable func-names */
+
/**
* @redirect naver-wcslog
*
@@ -11960,7 +10355,6 @@
throw new TypeError("Cannot call a class as a function");
}
}
-
var classCallCheck = _classCallCheck;
function _defineProperties(target, props) {
@@ -11972,58 +10366,45 @@
Object.defineProperty(target, descriptor.key, descriptor);
}
}
-
function _createClass(Constructor, protoProps, staticProps) {
if (protoProps) _defineProperties(Constructor.prototype, protoProps);
if (staticProps) _defineProperties(Constructor, staticProps);
return Constructor;
}
-
var createClass = _createClass;
function isNothing(subject) {
return typeof subject === 'undefined' || subject === null;
}
-
function isObject(subject) {
return typeof subject === 'object' && subject !== null;
}
-
function toArray(sequence) {
if (Array.isArray(sequence)) return sequence;else if (isNothing(sequence)) return [];
return [sequence];
}
-
function extend(target, source) {
var index, length, key, sourceKeys;
-
if (source) {
sourceKeys = Object.keys(source);
-
for (index = 0, length = sourceKeys.length; index < length; index += 1) {
key = sourceKeys[index];
target[key] = source[key];
}
}
-
return target;
}
-
function repeat(string, count) {
var result = '',
- cycle;
-
+ cycle;
for (cycle = 0; cycle < count; cycle += 1) {
result += string;
}
-
return result;
}
-
function isNegativeZero(number) {
return number === 0 && Number.NEGATIVE_INFINITY === 1 / number;
}
-
var isNothing_1 = isNothing;
var isObject_1 = isObject;
var toArray_1 = toArray;
@@ -12047,8 +10428,9 @@
this.name = 'YAMLException';
this.reason = reason;
this.mark = mark;
- this.message = (this.reason || '(unknown reason)') + (this.mark ? ' ' + this.mark.toString() : ''); // Include stack trace in error object
+ this.message = (this.reason || '(unknown reason)') + (this.mark ? ' ' + this.mark.toString() : '');
+ // Include stack trace in error object
if (Error.captureStackTrace) {
// Chrome and NodeJS
Error.captureStackTrace(this, this.constructor);
@@ -12056,23 +10438,19 @@
// FF, IE 10+ and Safari 6+. Fallback for others
this.stack = new Error().stack || '';
}
- } // Inherit from Error
-
+ }
+ // Inherit from Error
YAMLException$1.prototype = Object.create(Error.prototype);
YAMLException$1.prototype.constructor = YAMLException$1;
-
YAMLException$1.prototype.toString = function toString(compact) {
var result = this.name + ': ';
result += this.reason || '(unknown reason)';
-
if (!compact && this.mark) {
result += ' ' + this.mark.toString();
}
-
return result;
};
-
var exception = YAMLException$1;
function Mark(name, buffer, position, line, column) {
@@ -12082,7 +10460,6 @@
this.line = line;
this.column = column;
}
-
Mark.prototype.getSnippet = function getSnippet(indent, maxLength) {
var head, start, tail, end, snippet;
if (!this.buffer) return null;
@@ -12090,63 +10467,48 @@
maxLength = maxLength || 75;
head = '';
start = this.position;
-
while (start > 0 && "\0\r\n\x85\u2028\u2029".indexOf(this.buffer.charAt(start - 1)) === -1) {
start -= 1;
-
if (this.position - start > maxLength / 2 - 1) {
head = ' ... ';
start += 5;
break;
}
}
-
tail = '';
end = this.position;
-
while (end < this.buffer.length && "\0\r\n\x85\u2028\u2029".indexOf(this.buffer.charAt(end)) === -1) {
end += 1;
-
if (end - this.position > maxLength / 2 - 1) {
tail = ' ... ';
end -= 5;
break;
}
}
-
snippet = this.buffer.slice(start, end);
return common.repeat(' ', indent) + head + snippet + tail + '\n' + common.repeat(' ', indent + this.position - start + head.length) + '^';
};
-
Mark.prototype.toString = function toString(compact) {
var snippet,
- where = '';
-
+ where = '';
if (this.name) {
where += 'in "' + this.name + '" ';
}
-
where += 'at line ' + (this.line + 1) + ', column ' + (this.column + 1);
-
if (!compact) {
snippet = this.getSnippet();
-
if (snippet) {
where += ':\n' + snippet;
}
}
-
return where;
};
-
var mark = Mark;
var TYPE_CONSTRUCTOR_OPTIONS = ['kind', 'resolve', 'construct', 'instanceOf', 'predicate', 'represent', 'defaultStyle', 'styleAliases'];
var YAML_NODE_KINDS = ['scalar', 'sequence', 'mapping'];
-
function compileStyleAliases(map) {
var result = {};
-
if (map !== null) {
Object.keys(map).forEach(function (style) {
map[style].forEach(function (alias) {
@@ -12154,45 +10516,38 @@
});
});
}
-
return result;
}
-
function Type$1(tag, options) {
options = options || {};
Object.keys(options).forEach(function (name) {
if (TYPE_CONSTRUCTOR_OPTIONS.indexOf(name) === -1) {
throw new exception('Unknown option "' + name + '" is met in definition of "' + tag + '" YAML type.');
}
- }); // TODO: Add tag format check.
+ });
+ // TODO: Add tag format check.
this.tag = tag;
this.kind = options['kind'] || null;
-
this.resolve = options['resolve'] || function () {
return true;
};
-
this.construct = options['construct'] || function (data) {
return data;
};
-
this.instanceOf = options['instanceOf'] || null;
this.predicate = options['predicate'] || null;
this.represent = options['represent'] || null;
this.defaultStyle = options['defaultStyle'] || null;
this.styleAliases = compileStyleAliases(options['styleAliases'] || null);
-
if (YAML_NODE_KINDS.indexOf(this.kind) === -1) {
throw new exception('Unknown kind "' + this.kind + '" is specified for "' + tag + '" YAML type.');
}
}
-
var type = Type$1;
/*eslint-disable max-len*/
-
function compileList(schema, name, result) {
var exclude = [];
schema.include.forEach(function (includedSchema) {
@@ -12210,30 +10565,24 @@
return exclude.indexOf(index) === -1;
});
}
-
- function compileMap()
- /* lists... */
- {
+ function compileMap( /* lists... */
+ ) {
var result = {
- scalar: {},
- sequence: {},
- mapping: {},
- fallback: {}
- },
- index,
- length;
-
+ scalar: {},
+ sequence: {},
+ mapping: {},
+ fallback: {}
+ },
+ index,
+ length;
function collectType(type) {
result[type.kind][type.tag] = result['fallback'][type.tag] = type;
}
-
for (index = 0, length = arguments.length; index < length; index += 1) {
arguments[index].forEach(collectType);
}
-
return result;
}
-
function Schema$1(definition) {
this.include = definition.include || [];
this.implicit = definition.implicit || [];
@@ -12247,48 +10596,38 @@
this.compiledExplicit = compileList(this, 'explicit', []);
this.compiledTypeMap = compileMap(this.compiledImplicit, this.compiledExplicit);
}
-
Schema$1.DEFAULT = null;
-
Schema$1.create = function createSchema() {
var schemas, types;
-
switch (arguments.length) {
case 1:
schemas = Schema$1.DEFAULT;
types = arguments[0];
break;
-
case 2:
schemas = arguments[0];
types = arguments[1];
break;
-
default:
throw new exception('Wrong number of arguments for Schema.create function');
}
-
schemas = common.toArray(schemas);
types = common.toArray(types);
-
if (!schemas.every(function (schema) {
return schema instanceof Schema$1;
})) {
throw new exception('Specified list of super schemas (or a single Schema object) contains a non-Schema object.');
}
-
if (!types.every(function (type$1) {
return type$1 instanceof type;
})) {
throw new exception('Specified list of YAML types (or a single Type object) contains a non-Type object.');
}
-
return new Schema$1({
include: schemas,
explicit: types
});
};
-
var schema = Schema$1;
var str = new type('tag:yaml.org,2002:str', {
@@ -12321,15 +10660,12 @@
var max = data.length;
return max === 1 && data === '~' || max === 4 && (data === 'null' || data === 'Null' || data === 'NULL');
}
-
function constructYamlNull() {
return null;
}
-
function isNull(object) {
return object === null;
}
-
var _null = new type('tag:yaml.org,2002:null', {
kind: 'scalar',
resolve: resolveYamlNull,
@@ -12357,15 +10693,12 @@
var max = data.length;
return max === 4 && (data === 'true' || data === 'True' || data === 'TRUE') || max === 5 && (data === 'false' || data === 'False' || data === 'FALSE');
}
-
function constructYamlBoolean(data) {
return data === 'true' || data === 'True' || data === 'TRUE';
}
-
function isBoolean(object) {
return Object.prototype.toString.call(object) === '[object Boolean]';
}
-
var bool = new type('tag:yaml.org,2002:bool', {
kind: 'scalar',
resolve: resolveYamlBoolean,
@@ -12386,145 +10719,114 @@
});
function isHexCode(c) {
- return 0x30
- /* 0 */
- <= c && c <= 0x39
- /* 9 */
- || 0x41
- /* A */
- <= c && c <= 0x46
- /* F */
- || 0x61
- /* a */
- <= c && c <= 0x66
- /* f */
- ;
+ return 0x30 /* 0 */ <= c && c <= 0x39 /* 9 */ || 0x41 /* A */ <= c && c <= 0x46 /* F */ || 0x61 /* a */ <= c && c <= 0x66 /* f */;
}
function isOctCode(c) {
- return 0x30
- /* 0 */
- <= c && c <= 0x37
- /* 7 */
- ;
+ return 0x30 /* 0 */ <= c && c <= 0x37 /* 7 */;
}
function isDecCode(c) {
- return 0x30
- /* 0 */
- <= c && c <= 0x39
- /* 9 */
- ;
+ return 0x30 /* 0 */ <= c && c <= 0x39 /* 9 */;
}
function resolveYamlInteger(data) {
if (data === null) return false;
var max = data.length,
- index = 0,
- hasDigits = false,
- ch;
+ index = 0,
+ hasDigits = false,
+ ch;
if (!max) return false;
- ch = data[index]; // sign
+ ch = data[index];
+ // sign
if (ch === '-' || ch === '+') {
ch = data[++index];
}
-
if (ch === '0') {
// 0
if (index + 1 === max) return true;
- ch = data[++index]; // base 2, base 8, base 16
+ ch = data[++index];
+
+ // base 2, base 8, base 16
if (ch === 'b') {
// base 2
index++;
-
for (; index < max; index++) {
ch = data[index];
if (ch === '_') continue;
if (ch !== '0' && ch !== '1') return false;
hasDigits = true;
}
-
return hasDigits && ch !== '_';
}
-
if (ch === 'x') {
// base 16
index++;
-
for (; index < max; index++) {
ch = data[index];
if (ch === '_') continue;
if (!isHexCode(data.charCodeAt(index))) return false;
hasDigits = true;
}
-
return hasDigits && ch !== '_';
- } // base 8
-
+ }
+ // base 8
for (; index < max; index++) {
ch = data[index];
if (ch === '_') continue;
if (!isOctCode(data.charCodeAt(index))) return false;
hasDigits = true;
}
-
return hasDigits && ch !== '_';
- } // base 10 (except 0) or base 60
- // value should not start with `_`;
+ }
+ // base 10 (except 0) or base 60
+ // value should not start with `_`;
if (ch === '_') return false;
-
for (; index < max; index++) {
ch = data[index];
if (ch === '_') continue;
if (ch === ':') break;
-
if (!isDecCode(data.charCodeAt(index))) {
return false;
}
-
hasDigits = true;
- } // Should have digits and should not end with `_`
-
+ }
- if (!hasDigits || ch === '_') return false; // if !base60 - done;
+ // Should have digits and should not end with `_`
+ if (!hasDigits || ch === '_') return false;
- if (ch !== ':') return true; // base60 almost not used, no needs to optimize
+ // if !base60 - done;
+ if (ch !== ':') return true;
+ // base60 almost not used, no needs to optimize
return /^(:[0-5]?[0-9])+$/.test(data.slice(index));
}
-
function constructYamlInteger(data) {
var value = data,
- sign = 1,
- ch,
- base,
- digits = [];
-
+ sign = 1,
+ ch,
+ base,
+ digits = [];
if (value.indexOf('_') !== -1) {
value = value.replace(/_/g, '');
}
-
ch = value[0];
-
if (ch === '-' || ch === '+') {
if (ch === '-') sign = -1;
value = value.slice(1);
ch = value[0];
}
-
if (value === '0') return 0;
-
if (ch === '0') {
if (value[1] === 'b') return sign * parseInt(value.slice(2), 2);
if (value[1] === 'x') return sign * parseInt(value, 16);
return sign * parseInt(value, 8);
}
-
if (value.indexOf(':') !== -1) {
value.split(':').forEach(function (v) {
digits.unshift(parseInt(v, 10));
@@ -12537,14 +10839,11 @@
});
return sign * value;
}
-
return sign * parseInt(value, 10);
}
-
function isInteger(object) {
return Object.prototype.toString.call(object) === '[object Number]' && object % 1 === 0 && !common.isNegativeZero(object);
}
-
var int = new type('tag:yaml.org,2002:int', {
kind: 'scalar',
resolve: resolveYamlInteger,
@@ -12560,7 +10859,6 @@
decimal: function decimal(obj) {
return obj.toString(10);
},
-
/* eslint-disable max-len */
hexadecimal: function hexadecimal(obj) {
return obj >= 0 ? '0x' + obj.toString(16).toUpperCase() : '-0x' + obj.toString(16).toUpperCase().slice(1);
@@ -12575,36 +10873,36 @@
}
});
- var YAML_FLOAT_PATTERN = new RegExp( // 2.5e4, 2.5 and integers
- '^(?:[-+]?(?:0|[1-9][0-9_]*)(?:\\.[0-9_]*)?(?:[eE][-+]?[0-9]+)?' + // .2e4, .2
+ var YAML_FLOAT_PATTERN = new RegExp(
+ // 2.5e4, 2.5 and integers
+ '^(?:[-+]?(?:0|[1-9][0-9_]*)(?:\\.[0-9_]*)?(?:[eE][-+]?[0-9]+)?' +
+ // .2e4, .2
// special case, seems not from spec
- '|\\.[0-9_]+(?:[eE][-+]?[0-9]+)?' + // 20:59
- '|[-+]?[0-9][0-9_]*(?::[0-5]?[0-9])+\\.[0-9_]*' + // .inf
- '|[-+]?\\.(?:inf|Inf|INF)' + // .nan
+ '|\\.[0-9_]+(?:[eE][-+]?[0-9]+)?' +
+ // 20:59
+ '|[-+]?[0-9][0-9_]*(?::[0-5]?[0-9])+\\.[0-9_]*' +
+ // .inf
+ '|[-+]?\\.(?:inf|Inf|INF)' +
+ // .nan
'|\\.(?:nan|NaN|NAN))$');
-
function resolveYamlFloat(data) {
if (data === null) return false;
-
- if (!YAML_FLOAT_PATTERN.test(data) || // Quick hack to not allow integers end with `_`
+ if (!YAML_FLOAT_PATTERN.test(data) ||
+ // Quick hack to not allow integers end with `_`
// Probably should update regexp & check speed
data[data.length - 1] === '_') {
return false;
}
-
return true;
}
-
function constructYamlFloat(data) {
var value, sign, base, digits;
value = data.replace(/_/g, '').toLowerCase();
sign = value[0] === '-' ? -1 : 1;
digits = [];
-
if ('+-'.indexOf(value[0]) >= 0) {
value = value.slice(1);
}
-
if (value === '.inf') {
return sign === 1 ? Number.POSITIVE_INFINITY : Number.NEGATIVE_INFINITY;
} else if (value === '.nan') {
@@ -12621,23 +10919,17 @@
});
return sign * value;
}
-
return sign * parseFloat(value, 10);
}
-
var SCIENTIFIC_WITHOUT_DOT = /^[-+]?[0-9]+e/;
-
function representYamlFloat(object, style) {
var res;
-
if (isNaN(object)) {
switch (style) {
case 'lowercase':
return '.nan';
-
case 'uppercase':
return '.NAN';
-
case 'camelcase':
return '.NaN';
}
@@ -12645,10 +10937,8 @@
switch (style) {
case 'lowercase':
return '.inf';
-
case 'uppercase':
return '.INF';
-
case 'camelcase':
return '.Inf';
}
@@ -12656,27 +10946,24 @@
switch (style) {
case 'lowercase':
return '-.inf';
-
case 'uppercase':
return '-.INF';
-
case 'camelcase':
return '-.Inf';
}
} else if (common.isNegativeZero(object)) {
return '-0.0';
}
+ res = object.toString(10);
- res = object.toString(10); // JS stringifier can build scientific format without dots: 5e-100,
+ // JS stringifier can build scientific format without dots: 5e-100,
// while YAML requres dot: 5.e-100. Fix it with simple hack
return SCIENTIFIC_WITHOUT_DOT.test(res) ? res.replace('e', '.e') : res;
}
-
function isFloat(object) {
return Object.prototype.toString.call(object) === '[object Number]' && (object % 1 !== 0 || common.isNegativeZero(object));
}
-
var float = new type('tag:yaml.org,2002:float', {
kind: 'scalar',
resolve: resolveYamlFloat,
@@ -12695,19 +10982,30 @@
include: [json]
});
- var YAML_DATE_REGEXP = new RegExp('^([0-9][0-9][0-9][0-9])' + // [1] year
- '-([0-9][0-9])' + // [2] month
+ var YAML_DATE_REGEXP = new RegExp('^([0-9][0-9][0-9][0-9])' +
+ // [1] year
+ '-([0-9][0-9])' +
+ // [2] month
'-([0-9][0-9])$'); // [3] day
- var YAML_TIMESTAMP_REGEXP = new RegExp('^([0-9][0-9][0-9][0-9])' + // [1] year
- '-([0-9][0-9]?)' + // [2] month
- '-([0-9][0-9]?)' + // [3] day
- '(?:[Tt]|[ \\t]+)' + // ...
- '([0-9][0-9]?)' + // [4] hour
- ':([0-9][0-9])' + // [5] minute
- ':([0-9][0-9])' + // [6] second
- '(?:\\.([0-9]*))?' + // [7] fraction
- '(?:[ \\t]*(Z|([-+])([0-9][0-9]?)' + // [8] tz [9] tz_sign [10] tz_hour
+ var YAML_TIMESTAMP_REGEXP = new RegExp('^([0-9][0-9][0-9][0-9])' +
+ // [1] year
+ '-([0-9][0-9]?)' +
+ // [2] month
+ '-([0-9][0-9]?)' +
+ // [3] day
+ '(?:[Tt]|[ \\t]+)' +
+ // ...
+ '([0-9][0-9]?)' +
+ // [4] hour
+ ':([0-9][0-9])' +
+ // [5] minute
+ ':([0-9][0-9])' +
+ // [6] second
+ '(?:\\.([0-9]*))?' +
+ // [7] fraction
+ '(?:[ \\t]*(Z|([-+])([0-9][0-9]?)' +
+ // [8] tz [9] tz_sign [10] tz_hour
'(?::([0-9][0-9]))?))?$'); // [11] tz_minute
function resolveYamlTimestamp(data) {
@@ -12716,70 +11014,62 @@
if (YAML_TIMESTAMP_REGEXP.exec(data) !== null) return true;
return false;
}
-
function constructYamlTimestamp(data) {
var match,
- year,
- month,
- day,
- hour,
- minute,
- second,
- fraction = 0,
- delta = null,
- tz_hour,
- tz_minute,
- date;
+ year,
+ month,
+ day,
+ hour,
+ minute,
+ second,
+ fraction = 0,
+ delta = null,
+ tz_hour,
+ tz_minute,
+ date;
match = YAML_DATE_REGEXP.exec(data);
if (match === null) match = YAML_TIMESTAMP_REGEXP.exec(data);
- if (match === null) throw new Error('Date resolve error'); // match: [1] year [2] month [3] day
+ if (match === null) throw new Error('Date resolve error');
+
+ // match: [1] year [2] month [3] day
year = +match[1];
month = +match[2] - 1; // JS month starts with 0
-
day = +match[3];
-
if (!match[4]) {
// no hour
return new Date(Date.UTC(year, month, day));
- } // match: [4] hour [5] minute [6] second [7] fraction
+ }
+ // match: [4] hour [5] minute [6] second [7] fraction
hour = +match[4];
minute = +match[5];
second = +match[6];
-
if (match[7]) {
fraction = match[7].slice(0, 3);
-
while (fraction.length < 3) {
// milli-seconds
fraction += '0';
}
-
fraction = +fraction;
- } // match: [8] tz [9] tz_sign [10] tz_hour [11] tz_minute
+ }
+ // match: [8] tz [9] tz_sign [10] tz_hour [11] tz_minute
if (match[9]) {
tz_hour = +match[10];
tz_minute = +(match[11] || 0);
delta = (tz_hour * 60 + tz_minute) * 60000; // delta in mili-seconds
-
if (match[9] === '-') delta = -delta;
}
-
date = new Date(Date.UTC(year, month, day, hour, minute, second, fraction));
if (delta) date.setTime(date.getTime() - delta);
return date;
}
-
- function representYamlTimestamp(object
- /*, style*/
- ) {
+ function representYamlTimestamp(object /*, style*/) {
return object.toISOString();
}
-
var timestamp = new type('tag:yaml.org,2002:timestamp', {
kind: 'scalar',
resolve: resolveYamlTimestamp,
@@ -12791,56 +11081,60 @@
function resolveYamlMerge(data) {
return data === '<<' || data === null;
}
-
var merge = new type('tag:yaml.org,2002:merge', {
kind: 'scalar',
resolve: resolveYamlMerge
});
- /*eslint-disable no-bitwise*/
+ function commonjsRequire (target) {
+ throw new Error('Could not dynamically require "' + target + '". Please configure the dynamicRequireTargets option of @rollup/plugin-commonjs appropriately for this require call to behave properly.');
+ }
+ /*eslint-disable no-bitwise*/
var NodeBuffer;
-
try {
// A trick for browserified version, to not include `Buffer` shim
var _require$1 = commonjsRequire;
NodeBuffer = _require$1('buffer').Buffer;
- } catch (__) {} // [ 64, 65, 66 ] -> [ padding, CR, LF ]
-
+ } catch (__) {}
+ // [ 64, 65, 66 ] -> [ padding, CR, LF ]
var BASE64_MAP = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=\n\r';
-
function resolveYamlBinary(data) {
if (data === null) return false;
var code,
- idx,
- bitlen = 0,
- max = data.length,
- map = BASE64_MAP; // Convert one by one.
+ idx,
+ bitlen = 0,
+ max = data.length,
+ map = BASE64_MAP;
+ // Convert one by one.
for (idx = 0; idx < max; idx++) {
- code = map.indexOf(data.charAt(idx)); // Skip CR/LF
+ code = map.indexOf(data.charAt(idx));
- if (code > 64) continue; // Fail on illegal characters
+ // Skip CR/LF
+ if (code > 64) continue;
+ // Fail on illegal characters
if (code < 0) return false;
bitlen += 6;
- } // If there are any bits left, source was corrupted
-
+ }
+ // If there are any bits left, source was corrupted
return bitlen % 8 === 0;
}
-
function constructYamlBinary(data) {
var idx,
- tailbits,
- input = data.replace(/[\r\n=]/g, ''),
- // remove CR/LF & padding to simplify scan
- max = input.length,
- map = BASE64_MAP,
- bits = 0,
- result = []; // Collect by 6*4 bits (3 bytes)
+ tailbits,
+ input = data.replace(/[\r\n=]/g, ''),
+ // remove CR/LF & padding to simplify scan
+ max = input.length,
+ map = BASE64_MAP,
+ bits = 0,
+ result = [];
+
+ // Collect by 6*4 bits (3 bytes)
for (idx = 0; idx < max; idx++) {
if (idx % 4 === 0 && idx) {
@@ -12848,13 +11142,12 @@
result.push(bits >> 8 & 0xFF);
result.push(bits & 0xFF);
}
-
bits = bits << 6 | map.indexOf(input.charAt(idx));
- } // Dump tail
+ }
+ // Dump tail
tailbits = max % 4 * 6;
-
if (tailbits === 0) {
result.push(bits >> 16 & 0xFF);
result.push(bits >> 8 & 0xFF);
@@ -12864,26 +11157,24 @@
result.push(bits >> 2 & 0xFF);
} else if (tailbits === 12) {
result.push(bits >> 4 & 0xFF);
- } // Wrap into Buffer for NodeJS and leave Array for browser
-
+ }
+ // Wrap into Buffer for NodeJS and leave Array for browser
if (NodeBuffer) {
// Support node 6.+ Buffer API when available
return NodeBuffer.from ? NodeBuffer.from(result) : new NodeBuffer(result);
}
-
return result;
}
-
- function representYamlBinary(object
- /*, style*/
- ) {
+ function representYamlBinary(object /*, style*/) {
var result = '',
- bits = 0,
- idx,
- tail,
- max = object.length,
- map = BASE64_MAP; // Convert every three bytes to 4 ASCII characters.
+ bits = 0,
+ idx,
+ tail,
+ max = object.length,
+ map = BASE64_MAP;
+
+ // Convert every three bytes to 4 ASCII characters.
for (idx = 0; idx < max; idx++) {
if (idx % 3 === 0 && idx) {
@@ -12892,13 +11183,12 @@
result += map[bits >> 6 & 0x3F];
result += map[bits & 0x3F];
}
-
bits = (bits << 8) + object[idx];
- } // Dump tail
+ }
+ // Dump tail
tail = max % 3;
-
if (tail === 0) {
result += map[bits >> 18 & 0x3F];
result += map[bits >> 12 & 0x3F];
@@ -12915,14 +11205,11 @@
result += map[64];
result += map[64];
}
-
return result;
}
-
function isBinary(object) {
return NodeBuffer && NodeBuffer.isBuffer(object);
}
-
var binary = new type('tag:yaml.org,2002:binary', {
kind: 'scalar',
resolve: resolveYamlBinary,
@@ -12933,39 +11220,32 @@
var _hasOwnProperty$3 = Object.prototype.hasOwnProperty;
var _toString$2 = Object.prototype.toString;
-
function resolveYamlOmap(data) {
if (data === null) return true;
var objectKeys = [],
- index,
- length,
- pair,
- pairKey,
- pairHasKey,
- object = data;
-
+ index,
+ length,
+ pair,
+ pairKey,
+ pairHasKey,
+ object = data;
for (index = 0, length = object.length; index < length; index += 1) {
pair = object[index];
pairHasKey = false;
if (_toString$2.call(pair) !== '[object Object]') return false;
-
for (pairKey in pair) {
if (_hasOwnProperty$3.call(pair, pairKey)) {
if (!pairHasKey) pairHasKey = true;else return false;
}
}
-
if (!pairHasKey) return false;
if (objectKeys.indexOf(pairKey) === -1) objectKeys.push(pairKey);else return false;
}
-
return true;
}
-
function constructYamlOmap(data) {
return data !== null ? data : [];
}
-
var omap = new type('tag:yaml.org,2002:omap', {
kind: 'sequence',
resolve: resolveYamlOmap,
@@ -12973,17 +11253,15 @@
});
var _toString$1 = Object.prototype.toString;
-
function resolveYamlPairs(data) {
if (data === null) return true;
var index,
- length,
- pair,
- keys,
- result,
- object = data;
+ length,
+ pair,
+ keys,
+ result,
+ object = data;
result = new Array(object.length);
-
for (index = 0, length = object.length; index < length; index += 1) {
pair = object[index];
if (_toString$1.call(pair) !== '[object Object]') return false;
@@ -12991,29 +11269,24 @@
if (keys.length !== 1) return false;
result[index] = [keys[0], pair[keys[0]]];
}
-
return true;
}
-
function constructYamlPairs(data) {
if (data === null) return [];
var index,
- length,
- pair,
- keys,
- result,
- object = data;
+ length,
+ pair,
+ keys,
+ result,
+ object = data;
result = new Array(object.length);
-
for (index = 0, length = object.length; index < length; index += 1) {
pair = object[index];
keys = Object.keys(pair);
result[index] = [keys[0], pair[keys[0]]];
}
-
return result;
}
-
var pairs = new type('tag:yaml.org,2002:pairs', {
kind: 'sequence',
resolve: resolveYamlPairs,
@@ -13021,25 +11294,20 @@
});
var _hasOwnProperty$2 = Object.prototype.hasOwnProperty;
-
function resolveYamlSet(data) {
if (data === null) return true;
var key,
- object = data;
-
+ object = data;
for (key in object) {
if (_hasOwnProperty$2.call(object, key)) {
if (object[key] !== null) return false;
}
}
-
return true;
}
-
function constructYamlSet(data) {
return data !== null ? data : {};
}
-
var set = new type('tag:yaml.org,2002:set', {
kind: 'mapping',
resolve: resolveYamlSet,
@@ -13055,20 +11323,16 @@
function resolveJavascriptUndefined() {
return true;
}
-
function constructJavascriptUndefined() {
/*eslint-disable no-undefined*/
return undefined;
}
-
function representJavascriptUndefined() {
return '';
}
-
function isUndefined(object) {
return typeof object === 'undefined';
}
-
var _undefined = new type('tag:yaml.org,2002:js/undefined', {
kind: 'scalar',
resolve: resolveJavascriptUndefined,
@@ -13081,47 +11345,41 @@
if (data === null) return false;
if (data.length === 0) return false;
var regexp = data,
- tail = /\/([gim]*)$/.exec(data),
- modifiers = ''; // if regexp starts with '/' it can have modifiers and must be properly closed
- // `/foo/gim` - modifiers tail can be maximum 3 chars
+ tail = /\/([gim]*)$/.exec(data),
+ modifiers = '';
+ // if regexp starts with '/' it can have modifiers and must be properly closed
+ // `/foo/gim` - modifiers tail can be maximum 3 chars
if (regexp[0] === '/') {
if (tail) modifiers = tail[1];
- if (modifiers.length > 3) return false; // if expression starts with /, is should be properly terminated
-
+ if (modifiers.length > 3) return false;
+ // if expression starts with /, is should be properly terminated
if (regexp[regexp.length - modifiers.length - 1] !== '/') return false;
}
-
return true;
}
-
function constructJavascriptRegExp(data) {
var regexp = data,
- tail = /\/([gim]*)$/.exec(data),
- modifiers = ''; // `/foo/gim` - tail can be maximum 4 chars
+ tail = /\/([gim]*)$/.exec(data),
+ modifiers = '';
+ // `/foo/gim` - tail can be maximum 4 chars
if (regexp[0] === '/') {
if (tail) modifiers = tail[1];
regexp = regexp.slice(1, regexp.length - modifiers.length - 1);
}
-
return new RegExp(regexp, modifiers);
}
-
- function representJavascriptRegExp(object
- /*, style*/
- ) {
+ function representJavascriptRegExp(object /*, style*/) {
var result = '/' + object.source + '/';
if (object.global) result += 'g';
if (object.multiline) result += 'm';
if (object.ignoreCase) result += 'i';
return result;
}
-
function isRegExp(object) {
return Object.prototype.toString.call(object) === '[object RegExp]';
}
-
var regexp = new type('tag:yaml.org,2002:js/regexp', {
kind: 'scalar',
resolve: resolveJavascriptRegExp,
@@ -13130,85 +11388,73 @@
represent: representJavascriptRegExp
});
- var esprima; // Browserified version does not have esprima
+ var esprima;
+
+ // Browserified version does not have esprima
//
// 1. For node.js just require module as deps
// 2. For browser try to require mudule via external AMD system.
// If not found - try to fallback to window.esprima. If not
// found too - then fail to parse.
//
-
try {
// workaround to exclude package from browserify list.
var _require = commonjsRequire;
esprima = _require('esprima');
} catch (_) {
/* eslint-disable no-redeclare */
-
/* global window */
if (typeof window !== 'undefined') esprima = window.esprima;
}
-
function resolveJavascriptFunction(data) {
if (data === null) return false;
-
try {
var source = '(' + data + ')',
- ast = esprima.parse(source, {
- range: true
- });
-
+ ast = esprima.parse(source, {
+ range: true
+ });
if (ast.type !== 'Program' || ast.body.length !== 1 || ast.body[0].type !== 'ExpressionStatement' || ast.body[0].expression.type !== 'ArrowFunctionExpression' && ast.body[0].expression.type !== 'FunctionExpression') {
return false;
}
-
return true;
} catch (err) {
return false;
}
}
-
function constructJavascriptFunction(data) {
/*jslint evil:true*/
- var source = '(' + data + ')',
- ast = esprima.parse(source, {
- range: true
- }),
- params = [],
- body;
+ var source = '(' + data + ')',
+ ast = esprima.parse(source, {
+ range: true
+ }),
+ params = [],
+ body;
if (ast.type !== 'Program' || ast.body.length !== 1 || ast.body[0].type !== 'ExpressionStatement' || ast.body[0].expression.type !== 'ArrowFunctionExpression' && ast.body[0].expression.type !== 'FunctionExpression') {
throw new Error('Failed to resolve function');
}
-
ast.body[0].expression.params.forEach(function (param) {
params.push(param.name);
});
- body = ast.body[0].expression.body.range; // Esprima's ranges include the first '{' and the last '}' characters on
- // function expressions. So cut them out.
+ body = ast.body[0].expression.body.range;
+ // Esprima's ranges include the first '{' and the last '}' characters on
+ // function expressions. So cut them out.
if (ast.body[0].expression.body.type === 'BlockStatement') {
/*eslint-disable no-new-func*/
return new Function(params, source.slice(body[0] + 1, body[1] - 1));
- } // ES6 arrow functions can omit the BlockStatement. In that case, just return
+ }
+ // ES6 arrow functions can omit the BlockStatement. In that case, just return
// the body.
-
/*eslint-disable no-new-func*/
-
-
return new Function(params, 'return ' + source.slice(body[0], body[1]));
}
-
- function representJavascriptFunction(object
- /*, style*/
- ) {
+ function representJavascriptFunction(object /*, style*/) {
return object.toString();
}
-
function isFunction(object) {
return Object.prototype.toString.call(object) === '[object Function]';
}
-
var _function = new type('tag:yaml.org,2002:js/function', {
kind: 'scalar',
resolve: resolveJavascriptFunction,
@@ -13224,7 +11470,6 @@
/*eslint-disable max-len,no-use-before-define*/
-
var _hasOwnProperty$1 = Object.prototype.hasOwnProperty;
var CONTEXT_FLOW_IN = 1;
var CONTEXT_FLOW_OUT = 2;
@@ -13238,173 +11483,74 @@
var PATTERN_FLOW_INDICATORS = /[,\[\]\{\}]/;
var PATTERN_TAG_HANDLE = /^(?:!|!!|![a-z\-]+!)$/i;
var PATTERN_TAG_URI = /^(?:!|[^,\[\]\{\}])(?:%[0-9a-f]{2}|[0-9a-z\-#;\/\?:@&=\+\$,_\.!~\*'\(\)\[\]])*$/i;
-
function _class(obj) {
return Object.prototype.toString.call(obj);
}
-
function is_EOL(c) {
- return c === 0x0A
- /* LF */
- || c === 0x0D
- /* CR */
- ;
+ return c === 0x0A /* LF */ || c === 0x0D /* CR */;
}
function is_WHITE_SPACE(c) {
- return c === 0x09
- /* Tab */
- || c === 0x20
- /* Space */
- ;
+ return c === 0x09 /* Tab */ || c === 0x20 /* Space */;
}
function is_WS_OR_EOL(c) {
- return c === 0x09
- /* Tab */
- || c === 0x20
- /* Space */
- || c === 0x0A
- /* LF */
- || c === 0x0D
- /* CR */
- ;
+ return c === 0x09 /* Tab */ || c === 0x20 /* Space */ || c === 0x0A /* LF */ || c === 0x0D /* CR */;
}
function is_FLOW_INDICATOR(c) {
- return c === 0x2C
- /* , */
- || c === 0x5B
- /* [ */
- || c === 0x5D
- /* ] */
- || c === 0x7B
- /* { */
- || c === 0x7D
- /* } */
- ;
+ return c === 0x2C /* , */ || c === 0x5B /* [ */ || c === 0x5D /* ] */ || c === 0x7B /* { */ || c === 0x7D /* } */;
}
function fromHexCode(c) {
var lc;
-
- if (0x30
- /* 0 */
- <= c && c <= 0x39
- /* 9 */
- ) {
+ if (0x30 /* 0 */ <= c && c <= 0x39 /* 9 */) {
return c - 0x30;
}
- /*eslint-disable no-bitwise*/
-
+ /*eslint-disable no-bitwise*/
lc = c | 0x20;
-
- if (0x61
- /* a */
- <= lc && lc <= 0x66
- /* f */
- ) {
+ if (0x61 /* a */ <= lc && lc <= 0x66 /* f */) {
return lc - 0x61 + 10;
}
-
return -1;
}
-
function escapedHexLen(c) {
- if (c === 0x78
- /* x */
- ) {
- return 2;
- }
-
- if (c === 0x75
- /* u */
- ) {
- return 4;
- }
-
- if (c === 0x55
- /* U */
- ) {
- return 8;
- }
-
+ if (c === 0x78 /* x */) {
+ return 2;
+ }
+ if (c === 0x75 /* u */) {
+ return 4;
+ }
+ if (c === 0x55 /* U */) {
+ return 8;
+ }
return 0;
}
-
function fromDecimalCode(c) {
- if (0x30
- /* 0 */
- <= c && c <= 0x39
- /* 9 */
- ) {
+ if (0x30 /* 0 */ <= c && c <= 0x39 /* 9 */) {
return c - 0x30;
}
-
return -1;
}
-
function simpleEscapeSequence(c) {
/* eslint-disable indent */
- return c === 0x30
- /* 0 */
- ? '\x00' : c === 0x61
- /* a */
- ? '\x07' : c === 0x62
- /* b */
- ? '\x08' : c === 0x74
- /* t */
- ? '\x09' : c === 0x09
- /* Tab */
- ? '\x09' : c === 0x6E
- /* n */
- ? '\x0A' : c === 0x76
- /* v */
- ? '\x0B' : c === 0x66
- /* f */
- ? '\x0C' : c === 0x72
- /* r */
- ? '\x0D' : c === 0x65
- /* e */
- ? '\x1B' : c === 0x20
- /* Space */
- ? ' ' : c === 0x22
- /* " */
- ? '\x22' : c === 0x2F
- /* / */
- ? '/' : c === 0x5C
- /* \ */
- ? '\x5C' : c === 0x4E
- /* N */
- ? '\x85' : c === 0x5F
- /* _ */
- ? '\xA0' : c === 0x4C
- /* L */
- ? "\u2028" : c === 0x50
- /* P */
- ? "\u2029" : '';
+ return c === 0x30 /* 0 */ ? '\x00' : c === 0x61 /* a */ ? '\x07' : c === 0x62 /* b */ ? '\x08' : c === 0x74 /* t */ ? '\x09' : c === 0x09 /* Tab */ ? '\x09' : c === 0x6E /* n */ ? '\x0A' : c === 0x76 /* v */ ? '\x0B' : c === 0x66 /* f */ ? '\x0C' : c === 0x72 /* r */ ? '\x0D' : c === 0x65 /* e */ ? '\x1B' : c === 0x20 /* Space */ ? ' ' : c === 0x22 /* " */ ? '\x22' : c === 0x2F /* / */ ? '/' : c === 0x5C /* \ */ ? '\x5C' : c === 0x4E /* N */ ? '\x85' : c === 0x5F /* _ */ ? '\xA0' : c === 0x4C /* L */ ? "\u2028" : c === 0x50 /* P */ ? "\u2029" : '';
}
-
function charFromCodepoint(c) {
if (c <= 0xFFFF) {
return String.fromCharCode(c);
- } // Encode UTF-16 surrogate pair
+ }
+ // Encode UTF-16 surrogate pair
// https://en.wikipedia.org/wiki/UTF-16#Code_points_U.2B010000_to_U.2B10FFFF
-
-
return String.fromCharCode((c - 0x010000 >> 10) + 0xD800, (c - 0x010000 & 0x03FF) + 0xDC00);
}
-
var simpleEscapeCheck = new Array(256); // integer, for fast access
-
var simpleEscapeMap = new Array(256);
-
for (var i = 0; i < 256; i++) {
simpleEscapeCheck[i] = simpleEscapeSequence(i) ? 1 : 0;
simpleEscapeMap[i] = simpleEscapeSequence(i);
}
-
function State$1(input, options) {
this.input = input;
this.filename = options['filename'] || null;
@@ -13421,6 +11567,7 @@
this.lineStart = 0;
this.lineIndent = 0;
this.documents = [];
+
/*
this.version;
this.checkLineBreaks;
@@ -13435,85 +11582,64 @@
function generateError(state, message) {
return new exception(message, new mark(state.filename, state.input, state.position, state.line, state.position - state.lineStart));
}
-
function throwError(state, message) {
throw generateError(state, message);
}
-
function throwWarning(state, message) {
if (state.onWarning) {
state.onWarning.call(null, generateError(state, message));
}
}
-
var directiveHandlers = {
YAML: function handleYamlDirective(state, name, args) {
var match, major, minor;
-
if (state.version !== null) {
throwError(state, 'duplication of %YAML directive');
}
-
if (args.length !== 1) {
throwError(state, 'YAML directive accepts exactly one argument');
}
-
match = /^([0-9]+)\.([0-9]+)$/.exec(args[0]);
-
if (match === null) {
throwError(state, 'ill-formed argument of the YAML directive');
}
-
major = parseInt(match[1], 10);
minor = parseInt(match[2], 10);
-
if (major !== 1) {
throwError(state, 'unacceptable YAML version of the document');
}
-
state.version = args[0];
state.checkLineBreaks = minor < 2;
-
if (minor !== 1 && minor !== 2) {
throwWarning(state, 'unsupported YAML version of the document');
}
},
TAG: function handleTagDirective(state, name, args) {
var handle, prefix;
-
if (args.length !== 2) {
throwError(state, 'TAG directive accepts exactly two arguments');
}
-
handle = args[0];
prefix = args[1];
-
if (!PATTERN_TAG_HANDLE.test(handle)) {
throwError(state, 'ill-formed tag handle (first argument) of the TAG directive');
}
-
if (_hasOwnProperty$1.call(state.tagMap, handle)) {
throwError(state, 'there is a previously declared suffix for "' + handle + '" tag handle');
}
-
if (!PATTERN_TAG_URI.test(prefix)) {
throwError(state, 'ill-formed tag prefix (second argument) of the TAG directive');
}
-
state.tagMap[handle] = prefix;
}
};
-
function captureSegment(state, start, end, checkJson) {
var _position, _length, _character, _result;
-
if (start < end) {
_result = state.input.slice(start, end);
-
if (checkJson) {
for (_position = 0, _length = _result.length; _position < _length; _position += 1) {
_character = _result.charCodeAt(_position);
-
if (!(_character === 0x09 || 0x20 <= _character && _character <= 0x10FFFF)) {
throwError(state, 'expected valid JSON character');
}
@@ -13521,62 +11647,51 @@
} else if (PATTERN_NON_PRINTABLE.test(_result)) {
throwError(state, 'the stream contains non-printable characters');
}
-
state.result += _result;
}
}
-
function mergeMappings(state, destination, source, overridableKeys) {
var sourceKeys, key, index, quantity;
-
if (!common.isObject(source)) {
throwError(state, 'cannot merge mappings; the provided source object is unacceptable');
}
-
sourceKeys = Object.keys(source);
-
for (index = 0, quantity = sourceKeys.length; index < quantity; index += 1) {
key = sourceKeys[index];
-
if (!_hasOwnProperty$1.call(destination, key)) {
destination[key] = source[key];
overridableKeys[key] = true;
}
}
}
-
function storeMappingPair(state, _result, overridableKeys, keyTag, keyNode, valueNode, startLine, startPos) {
- var index, quantity; // The output is a plain object here, so keys can only be strings.
+ var index, quantity;
+
+ // The output is a plain object here, so keys can only be strings.
// We need to convert keyNode to a string, but doing so can hang the process
// (deeply nested arrays that explode exponentially using aliases).
-
if (Array.isArray(keyNode)) {
keyNode = Array.prototype.slice.call(keyNode);
-
for (index = 0, quantity = keyNode.length; index < quantity; index += 1) {
if (Array.isArray(keyNode[index])) {
throwError(state, 'nested arrays are not supported inside keys');
}
-
if (typeof keyNode === 'object' && _class(keyNode[index]) === '[object Object]') {
keyNode[index] = '[object Object]';
}
}
- } // Avoid code execution in load() via toString property
+ }
+
+ // Avoid code execution in load() via toString property
// (still use its own toString for arrays, timestamps,
// and whatever user schema extensions happen to have @@toStringTag)
-
-
if (typeof keyNode === 'object' && _class(keyNode) === '[object Object]') {
keyNode = '[object Object]';
}
-
keyNode = String(keyNode);
-
if (_result === null) {
_result = {};
}
-
if (keyTag === 'tag:yaml.org,2002:merge') {
if (Array.isArray(valueNode)) {
for (index = 0, quantity = valueNode.length; index < quantity; index += 1) {
@@ -13591,70 +11706,45 @@
state.position = startPos || state.position;
throwError(state, 'duplicated mapping key');
}
-
_result[keyNode] = valueNode;
delete overridableKeys[keyNode];
}
-
return _result;
}
-
function readLineBreak(state) {
var ch;
ch = state.input.charCodeAt(state.position);
-
- if (ch === 0x0A
- /* LF */
- ) {
- state.position++;
- } else if (ch === 0x0D
- /* CR */
- ) {
+ if (ch === 0x0A /* LF */) {
+ state.position++;
+ } else if (ch === 0x0D /* CR */) {
+ state.position++;
+ if (state.input.charCodeAt(state.position) === 0x0A /* LF */) {
state.position++;
-
- if (state.input.charCodeAt(state.position) === 0x0A
- /* LF */
- ) {
- state.position++;
- }
- } else {
+ }
+ } else {
throwError(state, 'a line break is expected');
}
-
state.line += 1;
state.lineStart = state.position;
}
-
function skipSeparationSpace(state, allowComments, checkIndent) {
var lineBreaks = 0,
- ch = state.input.charCodeAt(state.position);
-
+ ch = state.input.charCodeAt(state.position);
while (ch !== 0) {
while (is_WHITE_SPACE(ch)) {
ch = state.input.charCodeAt(++state.position);
}
-
- if (allowComments && ch === 0x23
- /* # */
- ) {
- do {
- ch = state.input.charCodeAt(++state.position);
- } while (ch !== 0x0A
- /* LF */
- && ch !== 0x0D
- /* CR */
- && ch !== 0);
- }
-
+ if (allowComments && ch === 0x23 /* # */) {
+ do {
+ ch = state.input.charCodeAt(++state.position);
+ } while (ch !== 0x0A /* LF */ && ch !== 0x0D /* CR */ && ch !== 0);
+ }
if (is_EOL(ch)) {
readLineBreak(state);
ch = state.input.charCodeAt(state.position);
lineBreaks++;
state.lineIndent = 0;
-
- while (ch === 0x20
- /* Space */
- ) {
+ while (ch === 0x20 /* Space */) {
state.lineIndent++;
ch = state.input.charCodeAt(++state.position);
}
@@ -13662,36 +11752,27 @@
break;
}
}
-
if (checkIndent !== -1 && lineBreaks !== 0 && state.lineIndent < checkIndent) {
throwWarning(state, 'deficient indentation');
}
-
return lineBreaks;
}
-
function testDocumentSeparator(state) {
var _position = state.position,
- ch;
- ch = state.input.charCodeAt(_position); // Condition state.position === state.lineStart is tested
- // in parent on each call, for efficiency. No needs to test here again.
+ ch;
+ ch = state.input.charCodeAt(_position);
- if ((ch === 0x2D
- /* - */
- || ch === 0x2E
- /* . */
- ) && ch === state.input.charCodeAt(_position + 1) && ch === state.input.charCodeAt(_position + 2)) {
+ // Condition state.position === state.lineStart is tested
+ // in parent on each call, for efficiency. No needs to test here again.
+ if ((ch === 0x2D /* - */ || ch === 0x2E /* . */) && ch === state.input.charCodeAt(_position + 1) && ch === state.input.charCodeAt(_position + 2)) {
_position += 3;
ch = state.input.charCodeAt(_position);
-
if (ch === 0 || is_WS_OR_EOL(ch)) {
return true;
}
}
-
return false;
}
-
function writeFoldedLines(state, count) {
if (count === 1) {
state.result += ' ';
@@ -13699,90 +11780,50 @@
state.result += common.repeat('\n', count - 1);
}
}
-
function readPlainScalar(state, nodeIndent, withinFlowCollection) {
var preceding,
- following,
- captureStart,
- captureEnd,
- hasPendingContent,
- _line,
- _lineStart,
- _lineIndent,
- _kind = state.kind,
- _result = state.result,
- ch;
-
+ following,
+ captureStart,
+ captureEnd,
+ hasPendingContent,
+ _line,
+ _lineStart,
+ _lineIndent,
+ _kind = state.kind,
+ _result = state.result,
+ ch;
ch = state.input.charCodeAt(state.position);
-
- if (is_WS_OR_EOL(ch) || is_FLOW_INDICATOR(ch) || ch === 0x23
- /* # */
- || ch === 0x26
- /* & */
- || ch === 0x2A
- /* * */
- || ch === 0x21
- /* ! */
- || ch === 0x7C
- /* | */
- || ch === 0x3E
- /* > */
- || ch === 0x27
- /* ' */
- || ch === 0x22
- /* " */
- || ch === 0x25
- /* % */
- || ch === 0x40
- /* @ */
- || ch === 0x60
- /* ` */
- ) {
+ if (is_WS_OR_EOL(ch) || is_FLOW_INDICATOR(ch) || ch === 0x23 /* # */ || ch === 0x26 /* & */ || ch === 0x2A /* * */ || ch === 0x21 /* ! */ || ch === 0x7C /* | */ || ch === 0x3E /* > */ || ch === 0x27 /* ' */ || ch === 0x22 /* " */ || ch === 0x25 /* % */ || ch === 0x40 /* @ */ || ch === 0x60 /* ` */) {
+ return false;
+ }
+ if (ch === 0x3F /* ? */ || ch === 0x2D /* - */) {
+ following = state.input.charCodeAt(state.position + 1);
+ if (is_WS_OR_EOL(following) || withinFlowCollection && is_FLOW_INDICATOR(following)) {
return false;
}
-
- if (ch === 0x3F
- /* ? */
- || ch === 0x2D
- /* - */
- ) {
- following = state.input.charCodeAt(state.position + 1);
-
- if (is_WS_OR_EOL(following) || withinFlowCollection && is_FLOW_INDICATOR(following)) {
- return false;
- }
- }
-
+ }
state.kind = 'scalar';
state.result = '';
captureStart = captureEnd = state.position;
hasPendingContent = false;
-
while (ch !== 0) {
- if (ch === 0x3A
- /* : */
- ) {
- following = state.input.charCodeAt(state.position + 1);
-
- if (is_WS_OR_EOL(following) || withinFlowCollection && is_FLOW_INDICATOR(following)) {
- break;
- }
- } else if (ch === 0x23
- /* # */
- ) {
- preceding = state.input.charCodeAt(state.position - 1);
-
- if (is_WS_OR_EOL(preceding)) {
- break;
- }
- } else if (state.position === state.lineStart && testDocumentSeparator(state) || withinFlowCollection && is_FLOW_INDICATOR(ch)) {
+ if (ch === 0x3A /* : */) {
+ following = state.input.charCodeAt(state.position + 1);
+ if (is_WS_OR_EOL(following) || withinFlowCollection && is_FLOW_INDICATOR(following)) {
+ break;
+ }
+ } else if (ch === 0x23 /* # */) {
+ preceding = state.input.charCodeAt(state.position - 1);
+ if (is_WS_OR_EOL(preceding)) {
+ break;
+ }
+ } else if (state.position === state.lineStart && testDocumentSeparator(state) || withinFlowCollection && is_FLOW_INDICATOR(ch)) {
break;
} else if (is_EOL(ch)) {
_line = state.line;
_lineStart = state.lineStart;
_lineIndent = state.lineIndent;
skipSeparationSpace(state, false, -1);
-
if (state.lineIndent >= nodeIndent) {
hasPendingContent = true;
ch = state.input.charCodeAt(state.position);
@@ -13795,64 +11836,47 @@
break;
}
}
-
if (hasPendingContent) {
captureSegment(state, captureStart, captureEnd, false);
writeFoldedLines(state, state.line - _line);
captureStart = captureEnd = state.position;
hasPendingContent = false;
}
-
if (!is_WHITE_SPACE(ch)) {
captureEnd = state.position + 1;
}
-
ch = state.input.charCodeAt(++state.position);
}
-
captureSegment(state, captureStart, captureEnd, false);
-
if (state.result) {
return true;
}
-
state.kind = _kind;
state.result = _result;
return false;
}
-
function readSingleQuotedScalar(state, nodeIndent) {
var ch, captureStart, captureEnd;
ch = state.input.charCodeAt(state.position);
-
- if (ch !== 0x27
- /* ' */
- ) {
- return false;
- }
-
+ if (ch !== 0x27 /* ' */) {
+ return false;
+ }
state.kind = 'scalar';
state.result = '';
state.position++;
captureStart = captureEnd = state.position;
-
while ((ch = state.input.charCodeAt(state.position)) !== 0) {
- if (ch === 0x27
- /* ' */
- ) {
- captureSegment(state, captureStart, state.position, true);
- ch = state.input.charCodeAt(++state.position);
-
- if (ch === 0x27
- /* ' */
- ) {
- captureStart = state.position;
- state.position++;
- captureEnd = state.position;
- } else {
- return true;
- }
- } else if (is_EOL(ch)) {
+ if (ch === 0x27 /* ' */) {
+ captureSegment(state, captureStart, state.position, true);
+ ch = state.input.charCodeAt(++state.position);
+ if (ch === 0x27 /* ' */) {
+ captureStart = state.position;
+ state.position++;
+ captureEnd = state.position;
+ } else {
+ return true;
+ }
+ } else if (is_EOL(ch)) {
captureSegment(state, captureStart, captureEnd, true);
writeFoldedLines(state, skipSeparationSpace(state, false, nodeIndent));
captureStart = captureEnd = state.position;
@@ -13863,65 +11887,51 @@
captureEnd = state.position;
}
}
-
throwError(state, 'unexpected end of the stream within a single quoted scalar');
}
-
function readDoubleQuotedScalar(state, nodeIndent) {
var captureStart, captureEnd, hexLength, hexResult, tmp, ch;
ch = state.input.charCodeAt(state.position);
-
- if (ch !== 0x22
- /* " */
- ) {
- return false;
- }
-
+ if (ch !== 0x22 /* " */) {
+ return false;
+ }
state.kind = 'scalar';
state.result = '';
state.position++;
captureStart = captureEnd = state.position;
-
while ((ch = state.input.charCodeAt(state.position)) !== 0) {
- if (ch === 0x22
- /* " */
- ) {
- captureSegment(state, captureStart, state.position, true);
- state.position++;
- return true;
- } else if (ch === 0x5C
- /* \ */
- ) {
- captureSegment(state, captureStart, state.position, true);
- ch = state.input.charCodeAt(++state.position);
-
- if (is_EOL(ch)) {
- skipSeparationSpace(state, false, nodeIndent); // TODO: rework to inline fn with no type cast?
- } else if (ch < 256 && simpleEscapeCheck[ch]) {
- state.result += simpleEscapeMap[ch];
- state.position++;
- } else if ((tmp = escapedHexLen(ch)) > 0) {
- hexLength = tmp;
- hexResult = 0;
-
- for (; hexLength > 0; hexLength--) {
- ch = state.input.charCodeAt(++state.position);
+ if (ch === 0x22 /* " */) {
+ captureSegment(state, captureStart, state.position, true);
+ state.position++;
+ return true;
+ } else if (ch === 0x5C /* \ */) {
+ captureSegment(state, captureStart, state.position, true);
+ ch = state.input.charCodeAt(++state.position);
+ if (is_EOL(ch)) {
+ skipSeparationSpace(state, false, nodeIndent);
- if ((tmp = fromHexCode(ch)) >= 0) {
- hexResult = (hexResult << 4) + tmp;
- } else {
- throwError(state, 'expected hexadecimal character');
- }
+ // TODO: rework to inline fn with no type cast?
+ } else if (ch < 256 && simpleEscapeCheck[ch]) {
+ state.result += simpleEscapeMap[ch];
+ state.position++;
+ } else if ((tmp = escapedHexLen(ch)) > 0) {
+ hexLength = tmp;
+ hexResult = 0;
+ for (; hexLength > 0; hexLength--) {
+ ch = state.input.charCodeAt(++state.position);
+ if ((tmp = fromHexCode(ch)) >= 0) {
+ hexResult = (hexResult << 4) + tmp;
+ } else {
+ throwError(state, 'expected hexadecimal character');
}
-
- state.result += charFromCodepoint(hexResult);
- state.position++;
- } else {
- throwError(state, 'unknown escape sequence');
}
-
- captureStart = captureEnd = state.position;
- } else if (is_EOL(ch)) {
+ state.result += charFromCodepoint(hexResult);
+ state.position++;
+ } else {
+ throwError(state, 'unknown escape sequence');
+ }
+ captureStart = captureEnd = state.position;
+ } else if (is_EOL(ch)) {
captureSegment(state, captureStart, captureEnd, true);
writeFoldedLines(state, skipSeparationSpace(state, false, nodeIndent));
captureStart = captureEnd = state.position;
@@ -13932,59 +11942,43 @@
captureEnd = state.position;
}
}
-
throwError(state, 'unexpected end of the stream within a double quoted scalar');
}
-
function readFlowCollection(state, nodeIndent) {
var readNext = true,
- _line,
- _tag = state.tag,
- _result,
- _anchor = state.anchor,
- following,
- terminator,
- isPair,
- isExplicitPair,
- isMapping,
- overridableKeys = {},
- keyNode,
- keyTag,
- valueNode,
- ch;
-
+ _line,
+ _tag = state.tag,
+ _result,
+ _anchor = state.anchor,
+ following,
+ terminator,
+ isPair,
+ isExplicitPair,
+ isMapping,
+ overridableKeys = {},
+ keyNode,
+ keyTag,
+ valueNode,
+ ch;
ch = state.input.charCodeAt(state.position);
-
- if (ch === 0x5B
- /* [ */
- ) {
- terminator = 0x5D;
- /* ] */
-
- isMapping = false;
- _result = [];
- } else if (ch === 0x7B
- /* { */
- ) {
- terminator = 0x7D;
- /* } */
-
- isMapping = true;
- _result = {};
- } else {
+ if (ch === 0x5B /* [ */) {
+ terminator = 0x5D; /* ] */
+ isMapping = false;
+ _result = [];
+ } else if (ch === 0x7B /* { */) {
+ terminator = 0x7D; /* } */
+ isMapping = true;
+ _result = {};
+ } else {
return false;
}
-
if (state.anchor !== null) {
state.anchorMap[state.anchor] = _result;
}
-
ch = state.input.charCodeAt(++state.position);
-
while (ch !== 0) {
skipSeparationSpace(state, true, nodeIndent);
ch = state.input.charCodeAt(state.position);
-
if (ch === terminator) {
state.position++;
state.tag = _tag;
@@ -13995,39 +11989,29 @@
} else if (!readNext) {
throwError(state, 'missed comma between flow collection entries');
}
-
keyTag = keyNode = valueNode = null;
isPair = isExplicitPair = false;
-
- if (ch === 0x3F
- /* ? */
- ) {
- following = state.input.charCodeAt(state.position + 1);
-
- if (is_WS_OR_EOL(following)) {
- isPair = isExplicitPair = true;
- state.position++;
- skipSeparationSpace(state, true, nodeIndent);
- }
+ if (ch === 0x3F /* ? */) {
+ following = state.input.charCodeAt(state.position + 1);
+ if (is_WS_OR_EOL(following)) {
+ isPair = isExplicitPair = true;
+ state.position++;
+ skipSeparationSpace(state, true, nodeIndent);
}
-
+ }
_line = state.line;
composeNode(state, nodeIndent, CONTEXT_FLOW_IN, false, true);
keyTag = state.tag;
keyNode = state.result;
skipSeparationSpace(state, true, nodeIndent);
ch = state.input.charCodeAt(state.position);
-
- if ((isExplicitPair || state.line === _line) && ch === 0x3A
- /* : */
- ) {
- isPair = true;
- ch = state.input.charCodeAt(++state.position);
- skipSeparationSpace(state, true, nodeIndent);
- composeNode(state, nodeIndent, CONTEXT_FLOW_IN, false, true);
- valueNode = state.result;
- }
-
+ if ((isExplicitPair || state.line === _line) && ch === 0x3A /* : */) {
+ isPair = true;
+ ch = state.input.charCodeAt(++state.position);
+ skipSeparationSpace(state, true, nodeIndent);
+ composeNode(state, nodeIndent, CONTEXT_FLOW_IN, false, true);
+ valueNode = state.result;
+ }
if (isMapping) {
storeMappingPair(state, _result, overridableKeys, keyTag, keyNode, valueNode);
} else if (isPair) {
@@ -14035,67 +12019,47 @@
} else {
_result.push(keyNode);
}
-
skipSeparationSpace(state, true, nodeIndent);
ch = state.input.charCodeAt(state.position);
-
- if (ch === 0x2C
- /* , */
- ) {
- readNext = true;
- ch = state.input.charCodeAt(++state.position);
- } else {
+ if (ch === 0x2C /* , */) {
+ readNext = true;
+ ch = state.input.charCodeAt(++state.position);
+ } else {
readNext = false;
}
}
-
throwError(state, 'unexpected end of the stream within a flow collection');
}
-
function readBlockScalar(state, nodeIndent) {
var captureStart,
- folding,
- chomping = CHOMPING_CLIP,
- didReadContent = false,
- detectedIndent = false,
- textIndent = nodeIndent,
- emptyLines = 0,
- atMoreIndented = false,
- tmp,
- ch;
+ folding,
+ chomping = CHOMPING_CLIP,
+ didReadContent = false,
+ detectedIndent = false,
+ textIndent = nodeIndent,
+ emptyLines = 0,
+ atMoreIndented = false,
+ tmp,
+ ch;
ch = state.input.charCodeAt(state.position);
-
- if (ch === 0x7C
- /* | */
- ) {
- folding = false;
- } else if (ch === 0x3E
- /* > */
- ) {
- folding = true;
- } else {
+ if (ch === 0x7C /* | */) {
+ folding = false;
+ } else if (ch === 0x3E /* > */) {
+ folding = true;
+ } else {
return false;
}
-
state.kind = 'scalar';
state.result = '';
-
while (ch !== 0) {
ch = state.input.charCodeAt(++state.position);
-
- if (ch === 0x2B
- /* + */
- || ch === 0x2D
- /* - */
- ) {
- if (CHOMPING_CLIP === chomping) {
- chomping = ch === 0x2B
- /* + */
- ? CHOMPING_KEEP : CHOMPING_STRIP;
- } else {
- throwError(state, 'repeat of a chomping mode identifier');
- }
- } else if ((tmp = fromDecimalCode(ch)) >= 0) {
+ if (ch === 0x2B /* + */ || ch === 0x2D /* - */) {
+ if (CHOMPING_CLIP === chomping) {
+ chomping = ch === 0x2B /* + */ ? CHOMPING_KEEP : CHOMPING_STRIP;
+ } else {
+ throwError(state, 'repeat of a chomping mode identifier');
+ }
+ } else if ((tmp = fromDecimalCode(ch)) >= 0) {
if (tmp === 0) {
throwError(state, 'bad explicit indentation width of a block scalar; it cannot be less than one');
} else if (!detectedIndent) {
@@ -14108,43 +12072,33 @@
break;
}
}
-
if (is_WHITE_SPACE(ch)) {
do {
ch = state.input.charCodeAt(++state.position);
} while (is_WHITE_SPACE(ch));
-
- if (ch === 0x23
- /* # */
- ) {
- do {
- ch = state.input.charCodeAt(++state.position);
- } while (!is_EOL(ch) && ch !== 0);
- }
+ if (ch === 0x23 /* # */) {
+ do {
+ ch = state.input.charCodeAt(++state.position);
+ } while (!is_EOL(ch) && ch !== 0);
+ }
}
-
while (ch !== 0) {
readLineBreak(state);
state.lineIndent = 0;
ch = state.input.charCodeAt(state.position);
-
- while ((!detectedIndent || state.lineIndent < textIndent) && ch === 0x20
- /* Space */
- ) {
+ while ((!detectedIndent || state.lineIndent < textIndent) && ch === 0x20 /* Space */) {
state.lineIndent++;
ch = state.input.charCodeAt(++state.position);
}
-
if (!detectedIndent && state.lineIndent > textIndent) {
textIndent = state.lineIndent;
}
-
if (is_EOL(ch)) {
emptyLines++;
continue;
- } // End of the scalar.
-
+ }
+ // End of the scalar.
if (state.lineIndent < textIndent) {
// Perform the chomping.
if (chomping === CHOMPING_KEEP) {
@@ -14154,107 +12108,93 @@
// i.e. only if the scalar is not empty.
state.result += '\n';
}
- } // Break this `while` cycle and go to the funciton's epilogue.
-
+ }
+ // Break this `while` cycle and go to the funciton's epilogue.
break;
- } // Folded style: use fancy rules to handle line breaks.
-
+ }
+ // Folded style: use fancy rules to handle line breaks.
if (folding) {
// Lines starting with white space characters (more-indented lines) are not folded.
if (is_WHITE_SPACE(ch)) {
- atMoreIndented = true; // except for the first content line (cf. Example 8.1)
+ atMoreIndented = true;
+ // except for the first content line (cf. Example 8.1)
+ state.result += common.repeat('\n', didReadContent ? 1 + emptyLines : emptyLines);
- state.result += common.repeat('\n', didReadContent ? 1 + emptyLines : emptyLines); // End of more-indented block.
+ // End of more-indented block.
} else if (atMoreIndented) {
atMoreIndented = false;
- state.result += common.repeat('\n', emptyLines + 1); // Just one line break - perceive as the same line.
+ state.result += common.repeat('\n', emptyLines + 1);
+
+ // Just one line break - perceive as the same line.
} else if (emptyLines === 0) {
if (didReadContent) {
// i.e. only if we have already read some scalar content.
state.result += ' ';
- } // Several line breaks - perceive as different lines.
+ }
+ // Several line breaks - perceive as different lines.
} else {
state.result += common.repeat('\n', emptyLines);
- } // Literal style: just add exact number of line breaks between content lines.
+ }
+ // Literal style: just add exact number of line breaks between content lines.
} else {
// Keep all line breaks except the header line break.
state.result += common.repeat('\n', didReadContent ? 1 + emptyLines : emptyLines);
}
-
didReadContent = true;
detectedIndent = true;
emptyLines = 0;
captureStart = state.position;
-
while (!is_EOL(ch) && ch !== 0) {
ch = state.input.charCodeAt(++state.position);
}
-
captureSegment(state, captureStart, state.position, false);
}
-
return true;
}
-
function readBlockSequence(state, nodeIndent) {
var _line,
- _tag = state.tag,
- _anchor = state.anchor,
- _result = [],
- following,
- detected = false,
- ch;
-
+ _tag = state.tag,
+ _anchor = state.anchor,
+ _result = [],
+ following,
+ detected = false,
+ ch;
if (state.anchor !== null) {
state.anchorMap[state.anchor] = _result;
}
-
ch = state.input.charCodeAt(state.position);
-
while (ch !== 0) {
- if (ch !== 0x2D
- /* - */
- ) {
- break;
- }
-
+ if (ch !== 0x2D /* - */) {
+ break;
+ }
following = state.input.charCodeAt(state.position + 1);
-
if (!is_WS_OR_EOL(following)) {
break;
}
-
detected = true;
state.position++;
-
if (skipSeparationSpace(state, true, -1)) {
if (state.lineIndent <= nodeIndent) {
_result.push(null);
-
ch = state.input.charCodeAt(state.position);
continue;
}
}
-
_line = state.line;
composeNode(state, nodeIndent, CONTEXT_BLOCK_IN, false, true);
-
_result.push(state.result);
-
skipSeparationSpace(state, true, -1);
ch = state.input.charCodeAt(state.position);
-
if ((state.line === _line || state.lineIndent > nodeIndent) && ch !== 0) {
throwError(state, 'bad indentation of a sequence entry');
} else if (state.lineIndent < nodeIndent) {
break;
}
}
-
if (detected) {
state.tag = _tag;
state.anchor = _anchor;
@@ -14262,97 +12202,79 @@
state.result = _result;
return true;
}
-
return false;
}
-
function readBlockMapping(state, nodeIndent, flowIndent) {
var following,
- allowCompact,
- _line,
- _pos,
- _tag = state.tag,
- _anchor = state.anchor,
- _result = {},
- overridableKeys = {},
- keyTag = null,
- keyNode = null,
- valueNode = null,
- atExplicitKey = false,
- detected = false,
- ch;
-
+ allowCompact,
+ _line,
+ _pos,
+ _tag = state.tag,
+ _anchor = state.anchor,
+ _result = {},
+ overridableKeys = {},
+ keyTag = null,
+ keyNode = null,
+ valueNode = null,
+ atExplicitKey = false,
+ detected = false,
+ ch;
if (state.anchor !== null) {
state.anchorMap[state.anchor] = _result;
}
-
ch = state.input.charCodeAt(state.position);
-
while (ch !== 0) {
following = state.input.charCodeAt(state.position + 1);
_line = state.line; // Save the current line.
+ _pos = state.position;
- _pos = state.position; //
+ //
// Explicit notation case. There are two separate blocks:
// first for the key (denoted by "?") and second for the value (denoted by ":")
//
-
- if ((ch === 0x3F
- /* ? */
- || ch === 0x3A
- /* : */
- ) && is_WS_OR_EOL(following)) {
- if (ch === 0x3F
- /* ? */
- ) {
- if (atExplicitKey) {
- storeMappingPair(state, _result, overridableKeys, keyTag, keyNode, null);
- keyTag = keyNode = valueNode = null;
- }
-
- detected = true;
- atExplicitKey = true;
- allowCompact = true;
- } else if (atExplicitKey) {
+ if ((ch === 0x3F /* ? */ || ch === 0x3A /* : */) && is_WS_OR_EOL(following)) {
+ if (ch === 0x3F /* ? */) {
+ if (atExplicitKey) {
+ storeMappingPair(state, _result, overridableKeys, keyTag, keyNode, null);
+ keyTag = keyNode = valueNode = null;
+ }
+ detected = true;
+ atExplicitKey = true;
+ allowCompact = true;
+ } else if (atExplicitKey) {
// i.e. 0x3A/* : */ === character after the explicit key.
atExplicitKey = false;
allowCompact = true;
} else {
throwError(state, 'incomplete explicit mapping pair; a key node is missed; or followed by a non-tabulated empty line');
}
-
state.position += 1;
- ch = following; //
+ ch = following;
+
+ //
// Implicit notation case. Flow-style node as the key first, then ":", and the value.
//
} else if (composeNode(state, flowIndent, CONTEXT_FLOW_OUT, false, true)) {
if (state.line === _line) {
ch = state.input.charCodeAt(state.position);
-
while (is_WHITE_SPACE(ch)) {
ch = state.input.charCodeAt(++state.position);
}
-
- if (ch === 0x3A
- /* : */
- ) {
- ch = state.input.charCodeAt(++state.position);
-
- if (!is_WS_OR_EOL(ch)) {
- throwError(state, 'a whitespace character is expected after the key-value separator within a block mapping');
- }
-
- if (atExplicitKey) {
- storeMappingPair(state, _result, overridableKeys, keyTag, keyNode, null);
- keyTag = keyNode = valueNode = null;
- }
-
- detected = true;
- atExplicitKey = false;
- allowCompact = false;
- keyTag = state.tag;
- keyNode = state.result;
- } else if (detected) {
+ if (ch === 0x3A /* : */) {
+ ch = state.input.charCodeAt(++state.position);
+ if (!is_WS_OR_EOL(ch)) {
+ throwError(state, 'a whitespace character is expected after the key-value separator within a block mapping');
+ }
+ if (atExplicitKey) {
+ storeMappingPair(state, _result, overridableKeys, keyTag, keyNode, null);
+ keyTag = keyNode = valueNode = null;
+ }
+ detected = true;
+ atExplicitKey = false;
+ allowCompact = false;
+ keyTag = state.tag;
+ keyNode = state.result;
+ } else if (detected) {
throwError(state, 'can not read an implicit mapping pair; a colon is missed');
} else {
state.tag = _tag;
@@ -14367,12 +12289,12 @@
return true; // Keep the result of `composeNode`.
}
} else {
- break; // Reading is done. Go to the epilogue.
- } //
+ break; // Reading is done. Go to the epilogue.
+ }
+
+ //
// Common reading code for both explicit and implicit notations.
//
-
-
if (state.line === _line || state.lineIndent > nodeIndent) {
if (composeNode(state, nodeIndent, CONTEXT_BLOCK_OUT, true, allowCompact)) {
if (atExplicitKey) {
@@ -14381,84 +12303,66 @@
valueNode = state.result;
}
}
-
if (!atExplicitKey) {
storeMappingPair(state, _result, overridableKeys, keyTag, keyNode, valueNode, _line, _pos);
keyTag = keyNode = valueNode = null;
}
-
skipSeparationSpace(state, true, -1);
ch = state.input.charCodeAt(state.position);
}
-
if (state.lineIndent > nodeIndent && ch !== 0) {
throwError(state, 'bad indentation of a mapping entry');
} else if (state.lineIndent < nodeIndent) {
break;
}
- } //
+ }
+
+ //
// Epilogue.
//
- // Special case: last mapping's node contains only the key in explicit notation.
-
+ // Special case: last mapping's node contains only the key in explicit notation.
if (atExplicitKey) {
storeMappingPair(state, _result, overridableKeys, keyTag, keyNode, null);
- } // Expose the resulting mapping.
-
+ }
+ // Expose the resulting mapping.
if (detected) {
state.tag = _tag;
state.anchor = _anchor;
state.kind = 'mapping';
state.result = _result;
}
-
return detected;
}
-
function readTagProperty(state) {
var _position,
- isVerbatim = false,
- isNamed = false,
- tagHandle,
- tagName,
- ch;
-
+ isVerbatim = false,
+ isNamed = false,
+ tagHandle,
+ tagName,
+ ch;
ch = state.input.charCodeAt(state.position);
- if (ch !== 0x21
- /* ! */
- ) return false;
-
+ if (ch !== 0x21 /* ! */) return false;
if (state.tag !== null) {
throwError(state, 'duplication of a tag property');
}
-
ch = state.input.charCodeAt(++state.position);
-
- if (ch === 0x3C
- /* < */
- ) {
- isVerbatim = true;
- ch = state.input.charCodeAt(++state.position);
- } else if (ch === 0x21
- /* ! */
- ) {
- isNamed = true;
- tagHandle = '!!';
- ch = state.input.charCodeAt(++state.position);
- } else {
+ if (ch === 0x3C /* < */) {
+ isVerbatim = true;
+ ch = state.input.charCodeAt(++state.position);
+ } else if (ch === 0x21 /* ! */) {
+ isNamed = true;
+ tagHandle = '!!';
+ ch = state.input.charCodeAt(++state.position);
+ } else {
tagHandle = '!';
}
-
_position = state.position;
-
if (isVerbatim) {
do {
ch = state.input.charCodeAt(++state.position);
- } while (ch !== 0 && ch !== 0x3E
- /* > */
- );
+ } while (ch !== 0 && ch !== 0x3E /* > */);
if (state.position < state.length) {
tagName = state.input.slice(_position, state.position);
@@ -14468,37 +12372,28 @@
}
} else {
while (ch !== 0 && !is_WS_OR_EOL(ch)) {
- if (ch === 0x21
- /* ! */
- ) {
- if (!isNamed) {
- tagHandle = state.input.slice(_position - 1, state.position + 1);
-
- if (!PATTERN_TAG_HANDLE.test(tagHandle)) {
- throwError(state, 'named tag handle cannot contain such characters');
- }
-
- isNamed = true;
- _position = state.position + 1;
- } else {
- throwError(state, 'tag suffix cannot contain exclamation marks');
+ if (ch === 0x21 /* ! */) {
+ if (!isNamed) {
+ tagHandle = state.input.slice(_position - 1, state.position + 1);
+ if (!PATTERN_TAG_HANDLE.test(tagHandle)) {
+ throwError(state, 'named tag handle cannot contain such characters');
}
+ isNamed = true;
+ _position = state.position + 1;
+ } else {
+ throwError(state, 'tag suffix cannot contain exclamation marks');
}
-
+ }
ch = state.input.charCodeAt(++state.position);
}
-
tagName = state.input.slice(_position, state.position);
-
if (PATTERN_FLOW_INDICATORS.test(tagName)) {
throwError(state, 'tag suffix cannot contain flow indicator characters');
}
}
-
if (tagName && !PATTERN_TAG_URI.test(tagName)) {
throwError(state, 'tag name cannot contain such characters: ' + tagName);
}
-
if (isVerbatim) {
state.tag = tagName;
} else if (_hasOwnProperty$1.call(state.tagMap, tagHandle)) {
@@ -14510,94 +12405,70 @@
} else {
throwError(state, 'undeclared tag handle "' + tagHandle + '"');
}
-
return true;
}
-
function readAnchorProperty(state) {
var _position, ch;
-
ch = state.input.charCodeAt(state.position);
- if (ch !== 0x26
- /* & */
- ) return false;
-
+ if (ch !== 0x26 /* & */) return false;
if (state.anchor !== null) {
throwError(state, 'duplication of an anchor property');
}
-
ch = state.input.charCodeAt(++state.position);
_position = state.position;
-
while (ch !== 0 && !is_WS_OR_EOL(ch) && !is_FLOW_INDICATOR(ch)) {
ch = state.input.charCodeAt(++state.position);
}
-
if (state.position === _position) {
throwError(state, 'name of an anchor node must contain at least one character');
}
-
state.anchor = state.input.slice(_position, state.position);
return true;
}
-
function readAlias(state) {
var _position, alias, ch;
-
ch = state.input.charCodeAt(state.position);
- if (ch !== 0x2A
- /* * */
- ) return false;
+ if (ch !== 0x2A /* * */) return false;
ch = state.input.charCodeAt(++state.position);
_position = state.position;
-
while (ch !== 0 && !is_WS_OR_EOL(ch) && !is_FLOW_INDICATOR(ch)) {
ch = state.input.charCodeAt(++state.position);
}
-
if (state.position === _position) {
throwError(state, 'name of an alias node must contain at least one character');
}
-
alias = state.input.slice(_position, state.position);
-
if (!_hasOwnProperty$1.call(state.anchorMap, alias)) {
throwError(state, 'unidentified alias "' + alias + '"');
}
-
state.result = state.anchorMap[alias];
skipSeparationSpace(state, true, -1);
return true;
}
-
function composeNode(state, parentIndent, nodeContext, allowToSeek, allowCompact) {
var allowBlockStyles,
- allowBlockScalars,
- allowBlockCollections,
- indentStatus = 1,
- // 1: this>parent, 0: this=parent, -1: thisparent, 0: this=parent, -1: this parentIndent) {
indentStatus = 1;
} else if (state.lineIndent === parentIndent) {
@@ -14607,13 +12478,11 @@
}
}
}
-
if (indentStatus === 1) {
while (readTagProperty(state) || readAnchorProperty(state)) {
if (skipSeparationSpace(state, true, -1)) {
atNewLine = true;
allowBlockCollections = allowBlockStyles;
-
if (state.lineIndent > parentIndent) {
indentStatus = 1;
} else if (state.lineIndent === parentIndent) {
@@ -14626,20 +12495,16 @@
}
}
}
-
if (allowBlockCollections) {
allowBlockCollections = atNewLine || allowCompact;
}
-
if (indentStatus === 1 || CONTEXT_BLOCK_OUT === nodeContext) {
if (CONTEXT_FLOW_IN === nodeContext || CONTEXT_FLOW_OUT === nodeContext) {
flowIndent = parentIndent;
} else {
flowIndent = parentIndent + 1;
}
-
blockIndent = state.position - state.lineStart;
-
if (indentStatus === 1) {
if (allowBlockCollections && (readBlockSequence(state, blockIndent) || readBlockMapping(state, blockIndent, flowIndent)) || readFlowCollection(state, flowIndent)) {
hasContent = true;
@@ -14648,18 +12513,15 @@
hasContent = true;
} else if (readAlias(state)) {
hasContent = true;
-
if (state.tag !== null || state.anchor !== null) {
throwError(state, 'alias node should not have any properties');
}
} else if (readPlainScalar(state, flowIndent, CONTEXT_FLOW_IN === nodeContext)) {
hasContent = true;
-
if (state.tag === null) {
state.tag = '?';
}
}
-
if (state.anchor !== null) {
state.anchorMap[state.anchor] = state.result;
}
@@ -14670,7 +12532,6 @@
hasContent = allowBlockCollections && readBlockSequence(state, blockIndent);
}
}
-
if (state.tag !== null && state.tag !== '!') {
if (state.tag === '?') {
// Implicit resolving is not allowed for non-scalar types, and '?'
@@ -14682,35 +12543,28 @@
if (state.result !== null && state.kind !== 'scalar') {
throwError(state, 'unacceptable node kind for !> tag; it should be "scalar", not "' + state.kind + '"');
}
-
for (typeIndex = 0, typeQuantity = state.implicitTypes.length; typeIndex < typeQuantity; typeIndex += 1) {
type = state.implicitTypes[typeIndex];
-
if (type.resolve(state.result)) {
// `state.result` updated in resolver if matched
state.result = type.construct(state.result);
state.tag = type.tag;
-
if (state.anchor !== null) {
state.anchorMap[state.anchor] = state.result;
}
-
break;
}
}
} else if (_hasOwnProperty$1.call(state.typeMap[state.kind || 'fallback'], state.tag)) {
type = state.typeMap[state.kind || 'fallback'][state.tag];
-
if (state.result !== null && type.kind !== state.kind) {
throwError(state, 'unacceptable node kind for !<' + state.tag + '> tag; it should be "' + type.kind + '", not "' + state.kind + '"');
}
-
if (!type.resolve(state.result)) {
// `state.result` updated in resolver if matched
throwError(state, 'cannot resolve a node with !<' + state.tag + '> explicit tag');
} else {
state.result = type.construct(state.result);
-
if (state.anchor !== null) {
state.anchorMap[state.anchor] = state.result;
}
@@ -14719,220 +12573,158 @@
throwError(state, 'unknown tag !<' + state.tag + '>');
}
}
-
if (state.listener !== null) {
state.listener('close', state);
}
-
return state.tag !== null || state.anchor !== null || hasContent;
}
-
function readDocument(state) {
var documentStart = state.position,
- _position,
- directiveName,
- directiveArgs,
- hasDirectives = false,
- ch;
-
+ _position,
+ directiveName,
+ directiveArgs,
+ hasDirectives = false,
+ ch;
state.version = null;
state.checkLineBreaks = state.legacy;
state.tagMap = {};
state.anchorMap = {};
-
while ((ch = state.input.charCodeAt(state.position)) !== 0) {
skipSeparationSpace(state, true, -1);
ch = state.input.charCodeAt(state.position);
-
- if (state.lineIndent > 0 || ch !== 0x25
- /* % */
- ) {
- break;
- }
-
+ if (state.lineIndent > 0 || ch !== 0x25 /* % */) {
+ break;
+ }
hasDirectives = true;
ch = state.input.charCodeAt(++state.position);
_position = state.position;
-
while (ch !== 0 && !is_WS_OR_EOL(ch)) {
ch = state.input.charCodeAt(++state.position);
}
-
directiveName = state.input.slice(_position, state.position);
directiveArgs = [];
-
if (directiveName.length < 1) {
throwError(state, 'directive name must not be less than one character in length');
}
-
while (ch !== 0) {
while (is_WHITE_SPACE(ch)) {
ch = state.input.charCodeAt(++state.position);
}
-
- if (ch === 0x23
- /* # */
- ) {
- do {
- ch = state.input.charCodeAt(++state.position);
- } while (ch !== 0 && !is_EOL(ch));
-
- break;
- }
-
+ if (ch === 0x23 /* # */) {
+ do {
+ ch = state.input.charCodeAt(++state.position);
+ } while (ch !== 0 && !is_EOL(ch));
+ break;
+ }
if (is_EOL(ch)) break;
_position = state.position;
-
while (ch !== 0 && !is_WS_OR_EOL(ch)) {
ch = state.input.charCodeAt(++state.position);
}
-
directiveArgs.push(state.input.slice(_position, state.position));
}
-
if (ch !== 0) readLineBreak(state);
-
if (_hasOwnProperty$1.call(directiveHandlers, directiveName)) {
directiveHandlers[directiveName](state, directiveName, directiveArgs);
} else {
throwWarning(state, 'unknown document directive "' + directiveName + '"');
}
}
-
skipSeparationSpace(state, true, -1);
-
- if (state.lineIndent === 0 && state.input.charCodeAt(state.position) === 0x2D
- /* - */
- && state.input.charCodeAt(state.position + 1) === 0x2D
- /* - */
- && state.input.charCodeAt(state.position + 2) === 0x2D
- /* - */
- ) {
- state.position += 3;
- skipSeparationSpace(state, true, -1);
- } else if (hasDirectives) {
+ if (state.lineIndent === 0 && state.input.charCodeAt(state.position) === 0x2D /* - */ && state.input.charCodeAt(state.position + 1) === 0x2D /* - */ && state.input.charCodeAt(state.position + 2) === 0x2D /* - */) {
+ state.position += 3;
+ skipSeparationSpace(state, true, -1);
+ } else if (hasDirectives) {
throwError(state, 'directives end mark is expected');
}
-
composeNode(state, state.lineIndent - 1, CONTEXT_BLOCK_OUT, false, true);
skipSeparationSpace(state, true, -1);
-
if (state.checkLineBreaks && PATTERN_NON_ASCII_LINE_BREAKS.test(state.input.slice(documentStart, state.position))) {
throwWarning(state, 'non-ASCII line breaks are interpreted as content');
}
-
state.documents.push(state.result);
-
if (state.position === state.lineStart && testDocumentSeparator(state)) {
- if (state.input.charCodeAt(state.position) === 0x2E
- /* . */
- ) {
- state.position += 3;
- skipSeparationSpace(state, true, -1);
- }
-
+ if (state.input.charCodeAt(state.position) === 0x2E /* . */) {
+ state.position += 3;
+ skipSeparationSpace(state, true, -1);
+ }
return;
}
-
if (state.position < state.length - 1) {
throwError(state, 'end of the stream or a document separator is expected');
} else {
return;
}
}
-
function loadDocuments(input, options) {
input = String(input);
options = options || {};
-
if (input.length !== 0) {
// Add tailing `\n` if not exists
- if (input.charCodeAt(input.length - 1) !== 0x0A
- /* LF */
- && input.charCodeAt(input.length - 1) !== 0x0D
- /* CR */
- ) {
- input += '\n';
- } // Strip BOM
-
+ if (input.charCodeAt(input.length - 1) !== 0x0A /* LF */ && input.charCodeAt(input.length - 1) !== 0x0D /* CR */) {
+ input += '\n';
+ }
+ // Strip BOM
if (input.charCodeAt(0) === 0xFEFF) {
input = input.slice(1);
}
}
-
var state = new State$1(input, options);
var nullpos = input.indexOf('\0');
-
if (nullpos !== -1) {
state.position = nullpos;
throwError(state, 'null byte is not allowed in input');
- } // Use 0 as string terminator. That significantly simplifies bounds check.
-
+ }
+ // Use 0 as string terminator. That significantly simplifies bounds check.
state.input += '\0';
-
- while (state.input.charCodeAt(state.position) === 0x20
- /* Space */
- ) {
+ while (state.input.charCodeAt(state.position) === 0x20 /* Space */) {
state.lineIndent += 1;
state.position += 1;
}
-
while (state.position < state.length - 1) {
readDocument(state);
}
-
return state.documents;
}
-
function loadAll$1(input, iterator, options) {
if (iterator !== null && typeof iterator === 'object' && typeof options === 'undefined') {
options = iterator;
iterator = null;
}
-
var documents = loadDocuments(input, options);
-
if (typeof iterator !== 'function') {
return documents;
}
-
for (var index = 0, length = documents.length; index < length; index += 1) {
iterator(documents[index]);
}
}
-
function load$1(input, options) {
var documents = loadDocuments(input, options);
-
if (documents.length === 0) {
/*eslint-disable no-undefined*/
return undefined;
} else if (documents.length === 1) {
return documents[0];
}
-
throw new exception('expected a single document in the stream, but found more');
}
-
function safeLoadAll$1(input, iterator, options) {
if (typeof iterator === 'object' && iterator !== null && typeof options === 'undefined') {
options = iterator;
iterator = null;
}
-
return loadAll$1(input, iterator, common.extend({
schema: default_safe
}, options));
}
-
function safeLoad$1(input, options) {
return load$1(input, common.extend({
schema: default_safe
}, options));
}
-
var loadAll_1 = loadAll$1;
var load_1 = load$1;
var safeLoadAll_1 = safeLoadAll$1;
@@ -14946,80 +12738,32 @@
/*eslint-disable no-use-before-define*/
-
var _toString = Object.prototype.toString;
var _hasOwnProperty = Object.prototype.hasOwnProperty;
- var CHAR_TAB = 0x09;
- /* Tab */
-
- var CHAR_LINE_FEED = 0x0A;
- /* LF */
-
- var CHAR_CARRIAGE_RETURN = 0x0D;
- /* CR */
-
- var CHAR_SPACE = 0x20;
- /* Space */
-
- var CHAR_EXCLAMATION = 0x21;
- /* ! */
-
- var CHAR_DOUBLE_QUOTE = 0x22;
- /* " */
-
- var CHAR_SHARP = 0x23;
- /* # */
-
- var CHAR_PERCENT = 0x25;
- /* % */
-
- var CHAR_AMPERSAND = 0x26;
- /* & */
-
- var CHAR_SINGLE_QUOTE = 0x27;
- /* ' */
-
- var CHAR_ASTERISK = 0x2A;
- /* * */
-
- var CHAR_COMMA = 0x2C;
- /* , */
-
- var CHAR_MINUS = 0x2D;
- /* - */
-
- var CHAR_COLON = 0x3A;
- /* : */
-
- var CHAR_EQUALS = 0x3D;
- /* = */
-
- var CHAR_GREATER_THAN = 0x3E;
- /* > */
-
- var CHAR_QUESTION = 0x3F;
- /* ? */
-
- var CHAR_COMMERCIAL_AT = 0x40;
- /* @ */
-
- var CHAR_LEFT_SQUARE_BRACKET = 0x5B;
- /* [ */
-
- var CHAR_RIGHT_SQUARE_BRACKET = 0x5D;
- /* ] */
-
- var CHAR_GRAVE_ACCENT = 0x60;
- /* ` */
-
- var CHAR_LEFT_CURLY_BRACKET = 0x7B;
- /* { */
-
- var CHAR_VERTICAL_LINE = 0x7C;
- /* | */
-
- var CHAR_RIGHT_CURLY_BRACKET = 0x7D;
- /* } */
+ var CHAR_TAB = 0x09; /* Tab */
+ var CHAR_LINE_FEED = 0x0A; /* LF */
+ var CHAR_CARRIAGE_RETURN = 0x0D; /* CR */
+ var CHAR_SPACE = 0x20; /* Space */
+ var CHAR_EXCLAMATION = 0x21; /* ! */
+ var CHAR_DOUBLE_QUOTE = 0x22; /* " */
+ var CHAR_SHARP = 0x23; /* # */
+ var CHAR_PERCENT = 0x25; /* % */
+ var CHAR_AMPERSAND = 0x26; /* & */
+ var CHAR_SINGLE_QUOTE = 0x27; /* ' */
+ var CHAR_ASTERISK = 0x2A; /* * */
+ var CHAR_COMMA = 0x2C; /* , */
+ var CHAR_MINUS = 0x2D; /* - */
+ var CHAR_COLON = 0x3A; /* : */
+ var CHAR_EQUALS = 0x3D; /* = */
+ var CHAR_GREATER_THAN = 0x3E; /* > */
+ var CHAR_QUESTION = 0x3F; /* ? */
+ var CHAR_COMMERCIAL_AT = 0x40; /* @ */
+ var CHAR_LEFT_SQUARE_BRACKET = 0x5B; /* [ */
+ var CHAR_RIGHT_SQUARE_BRACKET = 0x5D; /* ] */
+ var CHAR_GRAVE_ACCENT = 0x60; /* ` */
+ var CHAR_LEFT_CURLY_BRACKET = 0x7B; /* { */
+ var CHAR_VERTICAL_LINE = 0x7C; /* | */
+ var CHAR_RIGHT_CURLY_BRACKET = 0x7D; /* } */
var ESCAPE_SEQUENCES = {};
ESCAPE_SEQUENCES[0x00] = '\\0';
@@ -15038,37 +12782,28 @@
ESCAPE_SEQUENCES[0x2028] = '\\L';
ESCAPE_SEQUENCES[0x2029] = '\\P';
var DEPRECATED_BOOLEANS_SYNTAX = ['y', 'Y', 'yes', 'Yes', 'YES', 'on', 'On', 'ON', 'n', 'N', 'no', 'No', 'NO', 'off', 'Off', 'OFF'];
-
function compileStyleMap(schema, map) {
var result, keys, index, length, tag, style, type;
if (map === null) return {};
result = {};
keys = Object.keys(map);
-
for (index = 0, length = keys.length; index < length; index += 1) {
tag = keys[index];
style = String(map[tag]);
-
if (tag.slice(0, 2) === '!!') {
tag = 'tag:yaml.org,2002:' + tag.slice(2);
}
-
type = schema.compiledTypeMap['fallback'][tag];
-
if (type && _hasOwnProperty.call(type.styleAliases, style)) {
style = type.styleAliases[style];
}
-
result[tag] = style;
}
-
return result;
}
-
function encodeHex(character) {
var string, handle, length;
string = character.toString(16).toUpperCase();
-
if (character <= 0xFF) {
handle = 'x';
length = 2;
@@ -15081,10 +12816,8 @@
} else {
throw new exception('code point within a string may not be greater than 0xFFFFFFFF');
}
-
return '\\' + handle + common.repeat('0', length - string.length) + string;
}
-
function State(options) {
this.schema = options['schema'] || default_full;
this.indent = Math.max(1, options['indent'] || 2);
@@ -15103,20 +12836,18 @@
this.result = '';
this.duplicates = [];
this.usedDuplicates = null;
- } // Indents every line in a string. Empty lines (\n only) are not indented.
-
+ }
+ // Indents every line in a string. Empty lines (\n only) are not indented.
function indentString(string, spaces) {
var ind = common.repeat(' ', spaces),
- position = 0,
- next = -1,
- result = '',
- line,
- length = string.length;
-
+ position = 0,
+ next = -1,
+ result = '',
+ line,
+ length = string.length;
while (position < length) {
next = string.indexOf('\n', position);
-
if (next === -1) {
line = string.slice(position);
position = length;
@@ -15124,120 +12855,112 @@
line = string.slice(position, next + 1);
position = next + 1;
}
-
if (line.length && line !== '\n') result += ind;
result += line;
}
-
return result;
}
-
function generateNextLine(state, level) {
return '\n' + common.repeat(' ', state.indent * level);
}
-
function testImplicitResolving(state, str) {
var index, length, type;
-
for (index = 0, length = state.implicitTypes.length; index < length; index += 1) {
type = state.implicitTypes[index];
-
if (type.resolve(str)) {
return true;
}
}
-
return false;
- } // [33] s-white ::= s-space | s-tab
-
+ }
+ // [33] s-white ::= s-space | s-tab
function isWhitespace(c) {
return c === CHAR_SPACE || c === CHAR_TAB;
- } // Returns true if the character can be printed without escaping.
+ }
+
+ // Returns true if the character can be printed without escaping.
// From YAML 1.2: "any allowed characters known to be non-printable
// should also be escaped. [However,] This isn’t mandatory"
// Derived from nb-char - \t - #x85 - #xA0 - #x2028 - #x2029.
-
-
function isPrintable(c) {
- return 0x00020 <= c && c <= 0x00007E || 0x000A1 <= c && c <= 0x00D7FF && c !== 0x2028 && c !== 0x2029 || 0x0E000 <= c && c <= 0x00FFFD && c !== 0xFEFF
- /* BOM */
- || 0x10000 <= c && c <= 0x10FFFF;
- } // [34] ns-char ::= nb-char - s-white
+ return 0x00020 <= c && c <= 0x00007E || 0x000A1 <= c && c <= 0x00D7FF && c !== 0x2028 && c !== 0x2029 || 0x0E000 <= c && c <= 0x00FFFD && c !== 0xFEFF /* BOM */ || 0x10000 <= c && c <= 0x10FFFF;
+ }
+
+ // [34] ns-char ::= nb-char - s-white
// [27] nb-char ::= c-printable - b-char - c-byte-order-mark
// [26] b-char ::= b-line-feed | b-carriage-return
// [24] b-line-feed ::= #xA /* LF */
// [25] b-carriage-return ::= #xD /* CR */
// [3] c-byte-order-mark ::= #xFEFF
-
-
function isNsChar(c) {
- return isPrintable(c) && !isWhitespace(c) // byte-order-mark
- && c !== 0xFEFF // b-char
+ return isPrintable(c) && !isWhitespace(c)
+ // byte-order-mark
+ && c !== 0xFEFF
+ // b-char
&& c !== CHAR_CARRIAGE_RETURN && c !== CHAR_LINE_FEED;
- } // Simplified test for values allowed after the first character in plain style.
-
+ }
+ // Simplified test for values allowed after the first character in plain style.
function isPlainSafe(c, prev) {
// Uses a subset of nb-char - c-flow-indicator - ":" - "#"
// where nb-char ::= c-printable - b-char - c-byte-order-mark.
- return isPrintable(c) && c !== 0xFEFF // - c-flow-indicator
- && c !== CHAR_COMMA && c !== CHAR_LEFT_SQUARE_BRACKET && c !== CHAR_RIGHT_SQUARE_BRACKET && c !== CHAR_LEFT_CURLY_BRACKET && c !== CHAR_RIGHT_CURLY_BRACKET // - ":" - "#"
+ return isPrintable(c) && c !== 0xFEFF
+ // - c-flow-indicator
+ && c !== CHAR_COMMA && c !== CHAR_LEFT_SQUARE_BRACKET && c !== CHAR_RIGHT_SQUARE_BRACKET && c !== CHAR_LEFT_CURLY_BRACKET && c !== CHAR_RIGHT_CURLY_BRACKET
+ // - ":" - "#"
// /* An ns-char preceding */ "#"
&& c !== CHAR_COLON && (c !== CHAR_SHARP || prev && isNsChar(prev));
- } // Simplified test for values allowed as the first character in plain style.
-
+ }
+ // Simplified test for values allowed as the first character in plain style.
function isPlainSafeFirst(c) {
// Uses a subset of ns-char - c-indicator
// where ns-char = nb-char - s-white.
return isPrintable(c) && c !== 0xFEFF && !isWhitespace(c) // - s-white
// - (c-indicator ::=
// “-” | “?” | “:” | “,” | “[” | “]” | “{” | “}”
- && c !== CHAR_MINUS && c !== CHAR_QUESTION && c !== CHAR_COLON && c !== CHAR_COMMA && c !== CHAR_LEFT_SQUARE_BRACKET && c !== CHAR_RIGHT_SQUARE_BRACKET && c !== CHAR_LEFT_CURLY_BRACKET && c !== CHAR_RIGHT_CURLY_BRACKET // | “#” | “&” | “*” | “!” | “|” | “=” | “>” | “'” | “"”
- && c !== CHAR_SHARP && c !== CHAR_AMPERSAND && c !== CHAR_ASTERISK && c !== CHAR_EXCLAMATION && c !== CHAR_VERTICAL_LINE && c !== CHAR_EQUALS && c !== CHAR_GREATER_THAN && c !== CHAR_SINGLE_QUOTE && c !== CHAR_DOUBLE_QUOTE // | “%” | “@” | “`”)
+ && c !== CHAR_MINUS && c !== CHAR_QUESTION && c !== CHAR_COLON && c !== CHAR_COMMA && c !== CHAR_LEFT_SQUARE_BRACKET && c !== CHAR_RIGHT_SQUARE_BRACKET && c !== CHAR_LEFT_CURLY_BRACKET && c !== CHAR_RIGHT_CURLY_BRACKET
+ // | “#” | “&” | “*” | “!” | “|” | “=” | “>” | “'” | “"”
+ && c !== CHAR_SHARP && c !== CHAR_AMPERSAND && c !== CHAR_ASTERISK && c !== CHAR_EXCLAMATION && c !== CHAR_VERTICAL_LINE && c !== CHAR_EQUALS && c !== CHAR_GREATER_THAN && c !== CHAR_SINGLE_QUOTE && c !== CHAR_DOUBLE_QUOTE
+ // | “%” | “@” | “`”)
&& c !== CHAR_PERCENT && c !== CHAR_COMMERCIAL_AT && c !== CHAR_GRAVE_ACCENT;
- } // Determines whether block indentation indicator is required.
-
+ }
+ // Determines whether block indentation indicator is required.
function needIndentIndicator(string) {
var leadingSpaceRe = /^\n* /;
return leadingSpaceRe.test(string);
}
-
var STYLE_PLAIN = 1,
- STYLE_SINGLE = 2,
- STYLE_LITERAL = 3,
- STYLE_FOLDED = 4,
- STYLE_DOUBLE = 5; // Determines which scalar styles are possible and returns the preferred style.
+ STYLE_SINGLE = 2,
+ STYLE_LITERAL = 3,
+ STYLE_FOLDED = 4,
+ STYLE_DOUBLE = 5;
+
+ // Determines which scalar styles are possible and returns the preferred style.
// lineWidth = -1 => no limit.
// Pre-conditions: str.length > 0.
// Post-conditions:
// STYLE_PLAIN or STYLE_SINGLE => no \n are in the string.
// STYLE_LITERAL => no lines are suitable for folding (or lineWidth is -1).
// STYLE_FOLDED => a line > lineWidth and can be folded (and lineWidth != -1).
-
function chooseScalarStyle(string, singleLineOnly, indentPerLevel, lineWidth, testAmbiguousType) {
var i;
var char, prev_char;
var hasLineBreak = false;
var hasFoldableLine = false; // only checked if shouldTrackWidth
-
var shouldTrackWidth = lineWidth !== -1;
var previousLineBreak = -1; // count the first line correctly
-
var plain = isPlainSafeFirst(string.charCodeAt(0)) && !isWhitespace(string.charCodeAt(string.length - 1));
-
if (singleLineOnly) {
// Case: no block styles.
// Check for disallowed characters to rule out plain and single.
for (i = 0; i < string.length; i++) {
char = string.charCodeAt(i);
-
if (!isPrintable(char)) {
return STYLE_DOUBLE;
}
-
prev_char = i > 0 ? string.charCodeAt(i - 1) : null;
plain = plain && isPlainSafe(char, prev_char);
}
@@ -15245,62 +12968,55 @@
// Case: block styles permitted.
for (i = 0; i < string.length; i++) {
char = string.charCodeAt(i);
-
if (char === CHAR_LINE_FEED) {
- hasLineBreak = true; // Check if any line can be folded.
-
+ hasLineBreak = true;
+ // Check if any line can be folded.
if (shouldTrackWidth) {
- hasFoldableLine = hasFoldableLine || // Foldable line = too long, and not more-indented.
+ hasFoldableLine = hasFoldableLine ||
+ // Foldable line = too long, and not more-indented.
i - previousLineBreak - 1 > lineWidth && string[previousLineBreak + 1] !== ' ';
previousLineBreak = i;
}
} else if (!isPrintable(char)) {
return STYLE_DOUBLE;
}
-
prev_char = i > 0 ? string.charCodeAt(i - 1) : null;
plain = plain && isPlainSafe(char, prev_char);
- } // in case the end is missing a \n
-
-
+ }
+ // in case the end is missing a \n
hasFoldableLine = hasFoldableLine || shouldTrackWidth && i - previousLineBreak - 1 > lineWidth && string[previousLineBreak + 1] !== ' ';
- } // Although every style can represent \n without escaping, prefer block styles
+ }
+ // Although every style can represent \n without escaping, prefer block styles
// for multiline, since they're more readable and they don't add empty lines.
// Also prefer folding a super-long line.
-
-
if (!hasLineBreak && !hasFoldableLine) {
// Strings interpretable as another type have to be quoted;
// e.g. the string 'true' vs. the boolean true.
return plain && !testAmbiguousType(string) ? STYLE_PLAIN : STYLE_SINGLE;
- } // Edge case: block indentation indicator can only have one digit.
-
-
+ }
+ // Edge case: block indentation indicator can only have one digit.
if (indentPerLevel > 9 && needIndentIndicator(string)) {
return STYLE_DOUBLE;
- } // At this point we know block styles are valid.
+ }
+ // At this point we know block styles are valid.
// Prefer literal style unless we want to fold.
-
-
return hasFoldableLine ? STYLE_FOLDED : STYLE_LITERAL;
- } // Note: line breaking/folding is implemented for only the folded style.
+ }
+
+ // Note: line breaking/folding is implemented for only the folded style.
// NB. We drop the last trailing newline (if any) of a returned block scalar
// since the dumper adds its own newline. This always works:
// • No ending newline => unaffected; already using strip "-" chomping.
// • Ending newline => removed then restored.
// Importantly, this keeps the "+" chomp indicator from gaining an extra line.
-
-
function writeScalar(state, string, level, iskey) {
state.dump = function () {
if (string.length === 0) {
return "''";
}
-
if (!state.noCompatMode && DEPRECATED_BOOLEANS_SYNTAX.indexOf(string) !== -1) {
return "'" + string + "'";
}
-
var indent = state.indent * Math.max(1, level); // no 0-indent scalars
// As indentation gets deeper, let the width decrease monotonically
// to the lower bound min(state.lineWidth, 40).
@@ -15309,171 +13025,154 @@
// state.lineWidth > 40 + state.indent: width decreases until the lower bound.
// This behaves better than a constant minimum width which disallows narrower options,
// or an indent threshold which causes the width to suddenly increase.
+ var lineWidth = state.lineWidth === -1 ? -1 : Math.max(Math.min(state.lineWidth, 40), state.lineWidth - indent);
- var lineWidth = state.lineWidth === -1 ? -1 : Math.max(Math.min(state.lineWidth, 40), state.lineWidth - indent); // Without knowing if keys are implicit/explicit, assume implicit for safety.
-
- var singleLineOnly = iskey // No block styles in flow mode.
+ // Without knowing if keys are implicit/explicit, assume implicit for safety.
+ var singleLineOnly = iskey
+ // No block styles in flow mode.
|| state.flowLevel > -1 && level >= state.flowLevel;
-
function testAmbiguity(string) {
return testImplicitResolving(state, string);
}
-
switch (chooseScalarStyle(string, singleLineOnly, state.indent, lineWidth, testAmbiguity)) {
case STYLE_PLAIN:
return string;
-
case STYLE_SINGLE:
return "'" + string.replace(/'/g, "''") + "'";
-
case STYLE_LITERAL:
return '|' + blockHeader(string, state.indent) + dropEndingNewline(indentString(string, indent));
-
case STYLE_FOLDED:
return '>' + blockHeader(string, state.indent) + dropEndingNewline(indentString(foldString(string, lineWidth), indent));
-
case STYLE_DOUBLE:
return '"' + escapeString(string) + '"';
-
default:
throw new exception('impossible error: invalid scalar style');
}
}();
- } // Pre-conditions: string is valid for a block scalar, 1 <= indentPerLevel <= 9.
-
+ }
+ // Pre-conditions: string is valid for a block scalar, 1 <= indentPerLevel <= 9.
function blockHeader(string, indentPerLevel) {
- var indentIndicator = needIndentIndicator(string) ? String(indentPerLevel) : ''; // note the special case: the string '\n' counts as a "trailing" empty line.
+ var indentIndicator = needIndentIndicator(string) ? String(indentPerLevel) : '';
+ // note the special case: the string '\n' counts as a "trailing" empty line.
var clip = string[string.length - 1] === '\n';
var keep = clip && (string[string.length - 2] === '\n' || string === '\n');
var chomp = keep ? '+' : clip ? '' : '-';
return indentIndicator + chomp + '\n';
- } // (See the note for writeScalar.)
-
+ }
+ // (See the note for writeScalar.)
function dropEndingNewline(string) {
return string[string.length - 1] === '\n' ? string.slice(0, -1) : string;
- } // Note: a long line without a suitable break point will exceed the width limit.
- // Pre-conditions: every char in str isPrintable, str.length > 0, width > 0.
-
+ }
+ // Note: a long line without a suitable break point will exceed the width limit.
+ // Pre-conditions: every char in str isPrintable, str.length > 0, width > 0.
function foldString(string, width) {
// In folded style, $k$ consecutive newlines output as $k+1$ newlines—
// unless they're before or after a more-indented line, or at the very
// beginning or end, in which case $k$ maps to $k$.
// Therefore, parse each chunk as newline(s) followed by a content line.
- var lineRe = /(\n+)([^\n]*)/g; // first line (possibly an empty line)
+ var lineRe = /(\n+)([^\n]*)/g;
+ // first line (possibly an empty line)
var result = function () {
var nextLF = string.indexOf('\n');
nextLF = nextLF !== -1 ? nextLF : string.length;
lineRe.lastIndex = nextLF;
return foldLine(string.slice(0, nextLF), width);
- }(); // If we haven't reached the first content line yet, don't add an extra \n.
-
-
+ }();
+ // If we haven't reached the first content line yet, don't add an extra \n.
var prevMoreIndented = string[0] === '\n' || string[0] === ' ';
- var moreIndented; // rest of the lines
+ var moreIndented;
+ // rest of the lines
var match;
-
while (match = lineRe.exec(string)) {
var prefix = match[1],
- line = match[2];
+ line = match[2];
moreIndented = line[0] === ' ';
result += prefix + (!prevMoreIndented && !moreIndented && line !== '' ? '\n' : '') + foldLine(line, width);
prevMoreIndented = moreIndented;
}
-
return result;
- } // Greedy line breaking.
+ }
+
+ // Greedy line breaking.
// Picks the longest line under the limit each time,
// otherwise settles for the shortest line over the limit.
// NB. More-indented lines *cannot* be folded, as that would add an extra \n.
-
-
function foldLine(line, width) {
- if (line === '' || line[0] === ' ') return line; // Since a more-indented line adds a \n, breaks can't be followed by a space.
+ if (line === '' || line[0] === ' ') return line;
+ // Since a more-indented line adds a \n, breaks can't be followed by a space.
var breakRe = / [^ ]/g; // note: the match index will always be <= length-2.
-
- var match; // start is an inclusive index. end, curr, and next are exclusive.
-
+ var match;
+ // start is an inclusive index. end, curr, and next are exclusive.
var start = 0,
- end,
- curr = 0,
- next = 0;
- var result = ''; // Invariants: 0 <= start <= length-1.
+ end,
+ curr = 0,
+ next = 0;
+ var result = '';
+
+ // Invariants: 0 <= start <= length-1.
// 0 <= curr <= next <= max(0, length-2). curr - start <= width.
// Inside the loop:
// A match implies length >= 2, so curr and next are <= length-2.
-
while (match = breakRe.exec(line)) {
- next = match.index; // maintain invariant: curr - start <= width
-
+ next = match.index;
+ // maintain invariant: curr - start <= width
if (next - start > width) {
end = curr > start ? curr : next; // derive end <= length-2
-
- result += '\n' + line.slice(start, end); // skip the space that was output as \n
-
+ result += '\n' + line.slice(start, end);
+ // skip the space that was output as \n
start = end + 1; // derive start <= length-1
}
curr = next;
- } // By the invariants, start <= length-1, so there is something left over.
- // It is either the whole string or a part starting from non-whitespace.
-
-
- result += '\n'; // Insert a break if the remainder is too long and there is a break available.
+ }
+ // By the invariants, start <= length-1, so there is something left over.
+ // It is either the whole string or a part starting from non-whitespace.
+ result += '\n';
+ // Insert a break if the remainder is too long and there is a break available.
if (line.length - start > width && curr > start) {
result += line.slice(start, curr) + '\n' + line.slice(curr + 1);
} else {
result += line.slice(start);
}
-
return result.slice(1); // drop extra \n joiner
- } // Escapes a double-quoted string.
-
+ }
+ // Escapes a double-quoted string.
function escapeString(string) {
var result = '';
var char, nextChar;
var escapeSeq;
-
for (var i = 0; i < string.length; i++) {
- char = string.charCodeAt(i); // Check for surrogate pairs (reference Unicode 3.0 section "3.7 Surrogates").
-
- if (char >= 0xD800 && char <= 0xDBFF
- /* high surrogate */
- ) {
- nextChar = string.charCodeAt(i + 1);
-
- if (nextChar >= 0xDC00 && nextChar <= 0xDFFF
- /* low surrogate */
- ) {
- // Combine the surrogate pair and store it escaped.
- result += encodeHex((char - 0xD800) * 0x400 + nextChar - 0xDC00 + 0x10000); // Advance index one extra since we already used that char here.
-
- i++;
- continue;
- }
+ char = string.charCodeAt(i);
+ // Check for surrogate pairs (reference Unicode 3.0 section "3.7 Surrogates").
+ if (char >= 0xD800 && char <= 0xDBFF /* high surrogate */) {
+ nextChar = string.charCodeAt(i + 1);
+ if (nextChar >= 0xDC00 && nextChar <= 0xDFFF /* low surrogate */) {
+ // Combine the surrogate pair and store it escaped.
+ result += encodeHex((char - 0xD800) * 0x400 + nextChar - 0xDC00 + 0x10000);
+ // Advance index one extra since we already used that char here.
+ i++;
+ continue;
}
-
+ }
escapeSeq = ESCAPE_SEQUENCES[char];
result += !escapeSeq && isPrintable(char) ? string[i] : escapeSeq || encodeHex(char);
}
-
return result;
}
-
function writeFlowSequence(state, level, object) {
var _result = '',
- _tag = state.tag,
- index,
- length;
-
+ _tag = state.tag,
+ index,
+ length;
for (index = 0, length = object.length; index < length; index += 1) {
// Write only valid elements.
if (writeNode(state, level, object[index], false, false)) {
@@ -15481,86 +13180,77 @@
_result += state.dump;
}
}
-
state.tag = _tag;
state.dump = '[' + _result + ']';
}
-
function writeBlockSequence(state, level, object, compact) {
var _result = '',
- _tag = state.tag,
- index,
- length;
-
+ _tag = state.tag,
+ index,
+ length;
for (index = 0, length = object.length; index < length; index += 1) {
// Write only valid elements.
if (writeNode(state, level + 1, object[index], true, true)) {
if (!compact || index !== 0) {
_result += generateNextLine(state, level);
}
-
if (state.dump && CHAR_LINE_FEED === state.dump.charCodeAt(0)) {
_result += '-';
} else {
_result += '- ';
}
-
_result += state.dump;
}
}
-
state.tag = _tag;
state.dump = _result || '[]'; // Empty sequence if no valid values.
}
function writeFlowMapping(state, level, object) {
var _result = '',
- _tag = state.tag,
- objectKeyList = Object.keys(object),
- index,
- length,
- objectKey,
- objectValue,
- pairBuffer;
-
+ _tag = state.tag,
+ objectKeyList = Object.keys(object),
+ index,
+ length,
+ objectKey,
+ objectValue,
+ pairBuffer;
for (index = 0, length = objectKeyList.length; index < length; index += 1) {
pairBuffer = '';
if (index !== 0) pairBuffer += ', ';
if (state.condenseFlow) pairBuffer += '"';
objectKey = objectKeyList[index];
objectValue = object[objectKey];
-
if (!writeNode(state, level, objectKey, false, false)) {
continue; // Skip this pair because of invalid key;
}
if (state.dump.length > 1024) pairBuffer += '? ';
pairBuffer += state.dump + (state.condenseFlow ? '"' : '') + ':' + (state.condenseFlow ? '' : ' ');
-
if (!writeNode(state, level, objectValue, false, false)) {
continue; // Skip this pair because of invalid value.
}
- pairBuffer += state.dump; // Both key and value are valid.
+ pairBuffer += state.dump;
+ // Both key and value are valid.
_result += pairBuffer;
}
-
state.tag = _tag;
state.dump = '{' + _result + '}';
}
-
function writeBlockMapping(state, level, object, compact) {
var _result = '',
- _tag = state.tag,
- objectKeyList = Object.keys(object),
- index,
- length,
- objectKey,
- objectValue,
- explicitPair,
- pairBuffer; // Allow sorting keys so that the output file is deterministic
-
+ _tag = state.tag,
+ objectKeyList = Object.keys(object),
+ index,
+ length,
+ objectKey,
+ objectValue,
+ explicitPair,
+ pairBuffer;
+
+ // Allow sorting keys so that the output file is deterministic
if (state.sortKeys === true) {
// Default sorting
objectKeyList.sort();
@@ -15571,23 +13261,18 @@
// Something is wrong
throw new exception('sortKeys must be a boolean or a function');
}
-
for (index = 0, length = objectKeyList.length; index < length; index += 1) {
pairBuffer = '';
-
if (!compact || index !== 0) {
pairBuffer += generateNextLine(state, level);
}
-
objectKey = objectKeyList[index];
objectValue = object[objectKey];
-
if (!writeNode(state, level + 1, objectKey, true, true, true)) {
continue; // Skip this pair because of invalid key.
}
explicitPair = state.tag !== null && state.tag !== '?' || state.dump && state.dump.length > 1024;
-
if (explicitPair) {
if (state.dump && CHAR_LINE_FEED === state.dump.charCodeAt(0)) {
pairBuffer += '?';
@@ -15595,13 +13280,10 @@
pairBuffer += '? ';
}
}
-
pairBuffer += state.dump;
-
if (explicitPair) {
pairBuffer += generateNextLine(state, level);
}
-
if (!writeNode(state, level + 1, objectValue, true, explicitPair)) {
continue; // Skip this pair because of invalid value.
}
@@ -15611,30 +13293,24 @@
} else {
pairBuffer += ': ';
}
+ pairBuffer += state.dump;
- pairBuffer += state.dump; // Both key and value are valid.
-
+ // Both key and value are valid.
_result += pairBuffer;
}
-
state.tag = _tag;
state.dump = _result || '{}'; // Empty mapping if no valid pairs.
}
function detectType(state, object, explicit) {
var _result, typeList, index, length, type, style;
-
typeList = explicit ? state.explicitTypes : state.implicitTypes;
-
for (index = 0, length = typeList.length; index < length; index += 1) {
type = typeList[index];
-
if ((type.instanceOf || type.predicate) && (!type.instanceOf || typeof object === 'object' && object instanceof type.instanceOf) && (!type.predicate || type.predicate(object))) {
state.tag = explicit ? type.tag : '?';
-
if (type.represent) {
style = state.styleMap[type.tag] || type.defaultStyle;
-
if (_toString.call(type.represent) === '[object Function]') {
_result = type.represent(object, style);
} else if (_hasOwnProperty.call(type.represent, style)) {
@@ -15642,80 +13318,64 @@
} else {
throw new exception('!<' + type.tag + '> tag resolver accepts not "' + style + '" style');
}
-
state.dump = _result;
}
-
return true;
}
}
-
return false;
- } // Serializes `object` and writes it to global `result`.
+ }
+
+ // Serializes `object` and writes it to global `result`.
// Returns true on success, or false on invalid object.
//
-
-
function writeNode(state, level, object, block, compact, iskey) {
state.tag = null;
state.dump = object;
-
if (!detectType(state, object, false)) {
detectType(state, object, true);
}
-
var type = _toString.call(state.dump);
-
if (block) {
block = state.flowLevel < 0 || state.flowLevel > level;
}
-
var objectOrArray = type === '[object Object]' || type === '[object Array]',
- duplicateIndex,
- duplicate;
-
+ duplicateIndex,
+ duplicate;
if (objectOrArray) {
duplicateIndex = state.duplicates.indexOf(object);
duplicate = duplicateIndex !== -1;
}
-
if (state.tag !== null && state.tag !== '?' || duplicate || state.indent !== 2 && level > 0) {
compact = false;
}
-
if (duplicate && state.usedDuplicates[duplicateIndex]) {
state.dump = '*ref_' + duplicateIndex;
} else {
if (objectOrArray && duplicate && !state.usedDuplicates[duplicateIndex]) {
state.usedDuplicates[duplicateIndex] = true;
}
-
if (type === '[object Object]') {
if (block && Object.keys(state.dump).length !== 0) {
writeBlockMapping(state, level, state.dump, compact);
-
if (duplicate) {
state.dump = '&ref_' + duplicateIndex + state.dump;
}
} else {
writeFlowMapping(state, level, state.dump);
-
if (duplicate) {
state.dump = '&ref_' + duplicateIndex + ' ' + state.dump;
}
}
} else if (type === '[object Array]') {
var arrayLevel = state.noArrayIndent && level > 0 ? level - 1 : level;
-
if (block && state.dump.length !== 0) {
writeBlockSequence(state, arrayLevel, state.dump, compact);
-
if (duplicate) {
state.dump = '&ref_' + duplicateIndex + state.dump;
}
} else {
writeFlowSequence(state, arrayLevel, state.dump);
-
if (duplicate) {
state.dump = '&ref_' + duplicateIndex + ' ' + state.dump;
}
@@ -15728,49 +13388,39 @@
if (state.skipInvalid) return false;
throw new exception('unacceptable kind of an object to dump ' + type);
}
-
if (state.tag !== null && state.tag !== '?') {
state.dump = '!<' + state.tag + '> ' + state.dump;
}
}
-
return true;
}
-
function getDuplicateReferences(object, state) {
var objects = [],
- duplicatesIndexes = [],
- index,
- length;
+ duplicatesIndexes = [],
+ index,
+ length;
inspectNode(object, objects, duplicatesIndexes);
-
for (index = 0, length = duplicatesIndexes.length; index < length; index += 1) {
state.duplicates.push(objects[duplicatesIndexes[index]]);
}
-
state.usedDuplicates = new Array(length);
}
-
function inspectNode(object, objects, duplicatesIndexes) {
var objectKeyList, index, length;
-
if (object !== null && typeof object === 'object') {
index = objects.indexOf(object);
-
if (index !== -1) {
if (duplicatesIndexes.indexOf(index) === -1) {
duplicatesIndexes.push(index);
}
} else {
objects.push(object);
-
if (Array.isArray(object)) {
for (index = 0, length = object.length; index < length; index += 1) {
inspectNode(object[index], objects, duplicatesIndexes);
}
} else {
objectKeyList = Object.keys(object);
-
for (index = 0, length = objectKeyList.length; index < length; index += 1) {
inspectNode(object[objectKeyList[index]], objects, duplicatesIndexes);
}
@@ -15778,7 +13428,6 @@
}
}
}
-
function dump$1(input, options) {
options = options || {};
var state = new State(options);
@@ -15786,13 +13435,11 @@
if (writeNode(state, 0, input, true, true)) return state.dump + '\n';
return '';
}
-
function safeDump$1(input, options) {
return dump$1(input, common.extend({
schema: default_safe
}, options));
}
-
var dump_1 = dump$1;
var safeDump_1 = safeDump$1;
var dumper = {
@@ -15805,7 +13452,6 @@
throw new Error('Function ' + name + ' is deprecated and cannot be used.');
};
}
-
var Type = type;
var Schema = schema;
var FAILSAFE_SCHEMA = failsafe;
@@ -15819,12 +13465,14 @@
var safeLoadAll = loader.safeLoadAll;
var dump = dumper.dump;
var safeDump = dumper.safeDump;
- var YAMLException = exception; // Deprecated schema names from JS-YAML 2.0.x
+ var YAMLException = exception;
+ // Deprecated schema names from JS-YAML 2.0.x
var MINIMAL_SCHEMA = failsafe;
var SAFE_SCHEMA = default_safe;
- var DEFAULT_SCHEMA = default_full; // Deprecated functions from JS-YAML 1.x.x
+ var DEFAULT_SCHEMA = default_full;
+ // Deprecated functions from JS-YAML 1.x.x
var scan = deprecated('scan');
var parse = deprecated('parse');
var compose = deprecated('compose');
@@ -15855,9 +13503,9 @@
var jsYaml = jsYaml$1;
- function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; }
+ function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
+ function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
- function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }
/**
* Redirect - object used to redirect some requests
* e.g.
@@ -15872,10 +13520,10 @@
* @property {string} comment
* @property {string} content
* @property {string} contentType
+ * @property {string} file
* @property {boolean} [isBlocking]
* @property {string} [sha]
*/
-
var Redirects = /*#__PURE__*/function () {
/**
* Converts rawYaml into JS object with sources titles used as keys
@@ -15885,7 +13533,6 @@
*/
function Redirects(rawYaml) {
classCallCheck(this, Redirects);
-
try {
var arrOfRedirects = jsYaml.safeLoad(rawYaml);
this.redirects = arrOfRedirects.reduce(function (acc, redirect) {
@@ -15897,38 +13544,48 @@
throw e;
}
}
+
/**
* Returns redirect source object
* @param {string} title
- * @return {Redirect}
+ * @return {Redirect|undefined} Found redirect source object, or `undefined` if not found.
*/
-
-
createClass(Redirects, [{
key: "getRedirect",
value: function getRedirect(title) {
var _this = this;
-
if (Object.prototype.hasOwnProperty.call(this.redirects, title)) {
return this.redirects[title];
- } // look title among aliases
-
+ }
+ // look title among aliases
var values = Object.keys(this.redirects).map(function (key) {
return _this.redirects[key];
});
return values.find(function (redirect) {
var aliases = redirect.aliases;
-
if (!aliases) {
return false;
}
-
return aliases.indexOf(title) > -1;
});
}
+ /**
+ * Checks if redirect is blocking like click2load.html
+ * @param {string} title Title of the redirect.
+ * @returns True if redirect is blocking otherwise returns `false` even if redirect name is
+ * unknown.
+ */
+ }, {
+ key: "isBlocking",
+ value: function isBlocking(title) {
+ var redirect = this.redirects[title];
+ if (redirect) {
+ return !!redirect.isBlocking;
+ }
+ return false;
+ }
}]);
-
return Redirects;
}();
@@ -15992,6 +13649,8 @@
"ubo-googletagmanager_gtm.js": "google-analytics.js",
"googletagmanager_gtm.js": "google-analytics.js",
"google-ima3": "google-ima3.js",
+ "ubo-google-ima.js": "google-ima3.js",
+ "google-ima.js": "google-ima3.js",
"googlesyndication-adsbygoogle": "googlesyndication-adsbygoogle.js",
"ubo-googlesyndication_adsbygoogle.js": "googlesyndication-adsbygoogle.js",
"googlesyndication_adsbygoogle.js": "googlesyndication-adsbygoogle.js",
@@ -16046,7 +13705,6 @@
* Finds redirect resource by it's name
* @param {string} name - redirect name
*/
-
var getRedirectByName = function getRedirectByName(name) {
var redirects = Object.keys(redirectsList).map(function (key) {
return redirectsList[key];
@@ -16055,6 +13713,7 @@
return r.names && r.names.indexOf(name) > -1;
});
};
+
/**
* @typedef {Object} Source - redirect properties
* @property {string} name redirect name
@@ -16069,22 +13728,19 @@
* @param {Source} source
* @returns {string} redirect code
*/
-
-
var getRedirectCode = function getRedirectCode(source) {
var redirect = getRedirectByName(source.name);
var result = attachDependencies(redirect);
- result = addCall(redirect, result); // redirect code for different sources is checked in tests
- // so it should be just a code without any source and props passed
+ result = addCall(redirect, result);
+ // redirect code for different sources is checked in tests
+ // so it should be just a code without any source and props passed
result = source.engine === 'test' ? wrapInNonameFunc(result) : passSourceAndProps(source, result, true);
return result;
};
-
var getRedirectFilename = function getRedirectFilename(name) {
return redirectsMap[name];
};
-
var redirects = {
Redirects: Redirects,
getRedirectFilename: getRedirectFilename,
@@ -16105,49 +13761,38 @@
var searchRegexp = toRegExp(search);
var rid = randomId();
var SRC_DATA_MARKER = "data:text/javascript;base64,";
-
var getCurrentScript = function getCurrentScript() {
if ("currentScript" in document) {
return document.currentScript;
}
-
var scripts = document.getElementsByTagName("script");
return scripts[scripts.length - 1];
};
-
var ourScript = getCurrentScript();
-
var abort = function abort() {
var scriptEl = getCurrentScript();
-
if (!scriptEl) {
return;
}
-
var content = scriptEl.textContent;
-
try {
var textContentGetter = Object.getOwnPropertyDescriptor(Node.prototype, "textContent").get;
content = textContentGetter.call(scriptEl);
} catch (e) {}
-
if (content.length === 0 && typeof scriptEl.src !== "undefined" && startsWith(scriptEl.src, SRC_DATA_MARKER)) {
var encodedContent = scriptEl.src.slice(SRC_DATA_MARKER.length);
content = window.atob(encodedContent);
}
-
if (scriptEl instanceof HTMLScriptElement && content.length > 0 && scriptEl !== ourScript && searchRegexp.test(content)) {
hit(source);
throw new ReferenceError(rid);
}
};
-
var setChainPropAccess = function setChainPropAccess(owner, property) {
var chainInfo = getPropertyInChain(owner, property);
var base = chainInfo.base;
var prop = chainInfo.prop,
- chain = chainInfo.chain;
-
+ chain = chainInfo.chain;
if (base instanceof Object === false && base === null) {
var props = property.split(".");
var propIndex = props.indexOf(prop);
@@ -16156,16 +13801,13 @@
logMessage(source, message);
return;
}
-
if (chain) {
var setter = function setter(a) {
base = a;
-
if (a instanceof Object) {
setChainPropAccess(a, chain);
}
};
-
Object.defineProperty(owner, prop, {
get: function get() {
return base;
@@ -16174,33 +13816,27 @@
});
return;
}
-
var currentValue = base[prop];
var origDescriptor = Object.getOwnPropertyDescriptor(base, prop);
-
if (origDescriptor instanceof Object === false || origDescriptor.get instanceof Function === false) {
currentValue = base[prop];
origDescriptor = undefined;
}
-
var descriptorWrapper = Object.assign(getDescriptorAddon(), {
currentValue: currentValue,
get: function get() {
if (!this.isAbortingSuspended) {
this.isolateCallback(abort);
}
-
if (origDescriptor instanceof Object) {
return origDescriptor.get.call(base);
}
-
return this.currentValue;
},
set: function set(newValue) {
if (!this.isAbortingSuspended) {
this.isolateCallback(abort);
}
-
if (origDescriptor instanceof Object) {
origDescriptor.set.call(base, newValue);
} else {
@@ -16217,38 +13853,29 @@
}
});
};
-
setChainPropAccess(window, property);
window.onerror = createOnErrorHandler(rid).bind();
}
-
function randomId() {
- return Math.random().toString(36).substr(2, 9);
+ return Math.random().toString(36).slice(2, 9);
}
-
function setPropertyAccess(object, property, descriptor) {
var currentDescriptor = Object.getOwnPropertyDescriptor(object, property);
-
if (currentDescriptor && !currentDescriptor.configurable) {
return false;
}
-
Object.defineProperty(object, property, descriptor);
return true;
}
-
function getPropertyInChain(base, chain) {
var pos = chain.indexOf(".");
-
if (pos === -1) {
return {
base: base,
prop: chain
};
}
-
var prop = chain.slice(0, pos);
-
if (base === null) {
return {
base: base,
@@ -16256,10 +13883,8 @@
chain: chain
};
}
-
var nextBase = base[prop];
chain = chain.slice(pos + 1);
-
if ((base instanceof Object || typeof base === "object") && isEmptyObject(base)) {
return {
base: base,
@@ -16267,7 +13892,6 @@
chain: chain
};
}
-
if (nextBase === null) {
return {
base: base,
@@ -16275,11 +13899,9 @@
chain: chain
};
}
-
if (nextBase !== undefined) {
return getPropertyInChain(nextBase, chain);
}
-
Object.defineProperty(base, prop, {
configurable: true
});
@@ -16289,119 +13911,85 @@
chain: chain
};
}
-
function toRegExp() {
var input = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : "";
var DEFAULT_VALUE = ".?";
var FORWARD_SLASH = "/";
-
if (input === "") {
return new RegExp(DEFAULT_VALUE);
}
-
if (input[0] === FORWARD_SLASH && input[input.length - 1] === FORWARD_SLASH) {
return new RegExp(input.slice(1, -1));
}
-
var escaped = input.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
return new RegExp(escaped);
}
-
function startsWith(str, prefix) {
return !!str && str.indexOf(prefix) === 0;
}
-
function createOnErrorHandler(rid) {
var nativeOnError = window.onerror;
return function onError(error) {
if (typeof error === "string" && error.indexOf(rid) !== -1) {
return true;
}
-
if (nativeOnError instanceof Function) {
for (var _len = arguments.length, args = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {
args[_key - 1] = arguments[_key];
}
-
return nativeOnError.apply(this, [error].concat(args));
}
-
return false;
};
}
-
- function hit(source, message) {
+ function hit(source) {
if (source.verbose !== true) {
return;
}
-
try {
var log = console.log.bind(console);
var trace = console.trace.bind(console);
var prefix = source.ruleText || "";
-
if (source.domainName) {
var AG_SCRIPTLET_MARKER = "#%#//";
var UBO_SCRIPTLET_MARKER = "##+js";
var ruleStartIndex;
-
if (source.ruleText.indexOf(AG_SCRIPTLET_MARKER) > -1) {
ruleStartIndex = source.ruleText.indexOf(AG_SCRIPTLET_MARKER);
} else if (source.ruleText.indexOf(UBO_SCRIPTLET_MARKER) > -1) {
ruleStartIndex = source.ruleText.indexOf(UBO_SCRIPTLET_MARKER);
}
-
var rulePart = source.ruleText.slice(ruleStartIndex);
prefix = "".concat(source.domainName).concat(rulePart);
}
-
- var LOG_MARKER = "log: ";
-
- if (message) {
- if (message.indexOf(LOG_MARKER) === -1) {
- log("".concat(prefix, " message:\n").concat(message));
- } else {
- log(message.slice(LOG_MARKER.length));
- }
- }
-
log("".concat(prefix, " trace start"));
-
if (trace) {
trace();
}
-
log("".concat(prefix, " trace end"));
} catch (e) {}
-
if (typeof window.__debug === "function") {
window.__debug(source);
}
}
-
function logMessage(source, message) {
var forced = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;
-
if (forced || source.verbose) {
console.log("".concat(source.name, ": ").concat(message));
}
}
-
function isEmptyObject(obj) {
- return Object.keys(obj).length === 0;
+ return Object.keys(obj).length === 0 && !obj.prototype;
}
-
function getDescriptorAddon() {
return {
isAbortingSuspended: false,
isolateCallback: function isolateCallback(cb) {
this.isAbortingSuspended = true;
-
try {
for (var _len = arguments.length, args = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {
args[_key - 1] = arguments[_key];
}
-
var result = cb.apply(void 0, args);
this.isAbortingSuspended = false;
return result;
@@ -16413,44 +14001,35 @@
}
};
}
-
var updatedArgs = args ? [].concat(source).concat(args) : [source];
-
try {
abortCurrentInlineScript.apply(this, updatedArgs);
} catch (e) {
console.log(e);
}
}
-
function abortOnPropertyRead(source, args) {
function abortOnPropertyRead(source, property) {
if (!property) {
return;
}
-
var rid = randomId();
-
var abort = function abort() {
hit(source);
throw new ReferenceError(rid);
};
-
var setChainPropAccess = function setChainPropAccess(owner, property) {
var chainInfo = getPropertyInChain(owner, property);
var base = chainInfo.base;
var prop = chainInfo.prop,
- chain = chainInfo.chain;
-
+ chain = chainInfo.chain;
if (chain) {
var setter = function setter(a) {
base = a;
-
if (a instanceof Object) {
setChainPropAccess(a, chain);
}
};
-
Object.defineProperty(owner, prop, {
get: function get() {
return base;
@@ -16459,44 +14038,34 @@
});
return;
}
-
setPropertyAccess(base, prop, {
get: abort,
set: function set() {}
});
};
-
setChainPropAccess(window, property);
window.onerror = createOnErrorHandler(rid).bind();
}
-
function randomId() {
- return Math.random().toString(36).substr(2, 9);
+ return Math.random().toString(36).slice(2, 9);
}
-
function setPropertyAccess(object, property, descriptor) {
var currentDescriptor = Object.getOwnPropertyDescriptor(object, property);
-
if (currentDescriptor && !currentDescriptor.configurable) {
return false;
}
-
Object.defineProperty(object, property, descriptor);
return true;
}
-
function getPropertyInChain(base, chain) {
var pos = chain.indexOf(".");
-
if (pos === -1) {
return {
base: base,
prop: chain
};
}
-
var prop = chain.slice(0, pos);
-
if (base === null) {
return {
base: base,
@@ -16504,10 +14073,8 @@
chain: chain
};
}
-
var nextBase = base[prop];
chain = chain.slice(pos + 1);
-
if ((base instanceof Object || typeof base === "object") && isEmptyObject(base)) {
return {
base: base,
@@ -16515,7 +14082,6 @@
chain: chain
};
}
-
if (nextBase === null) {
return {
base: base,
@@ -16523,11 +14089,9 @@
chain: chain
};
}
-
if (nextBase !== undefined) {
return getPropertyInChain(nextBase, chain);
}
-
Object.defineProperty(base, prop, {
configurable: true
});
@@ -16537,116 +14101,83 @@
chain: chain
};
}
-
function createOnErrorHandler(rid) {
var nativeOnError = window.onerror;
return function onError(error) {
if (typeof error === "string" && error.indexOf(rid) !== -1) {
return true;
}
-
if (nativeOnError instanceof Function) {
for (var _len = arguments.length, args = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {
args[_key - 1] = arguments[_key];
}
-
return nativeOnError.apply(this, [error].concat(args));
}
-
return false;
};
}
-
- function hit(source, message) {
+ function hit(source) {
if (source.verbose !== true) {
return;
}
-
try {
var log = console.log.bind(console);
var trace = console.trace.bind(console);
var prefix = source.ruleText || "";
-
if (source.domainName) {
var AG_SCRIPTLET_MARKER = "#%#//";
var UBO_SCRIPTLET_MARKER = "##+js";
var ruleStartIndex;
-
if (source.ruleText.indexOf(AG_SCRIPTLET_MARKER) > -1) {
ruleStartIndex = source.ruleText.indexOf(AG_SCRIPTLET_MARKER);
} else if (source.ruleText.indexOf(UBO_SCRIPTLET_MARKER) > -1) {
ruleStartIndex = source.ruleText.indexOf(UBO_SCRIPTLET_MARKER);
}
-
var rulePart = source.ruleText.slice(ruleStartIndex);
prefix = "".concat(source.domainName).concat(rulePart);
}
-
- var LOG_MARKER = "log: ";
-
- if (message) {
- if (message.indexOf(LOG_MARKER) === -1) {
- log("".concat(prefix, " message:\n").concat(message));
- } else {
- log(message.slice(LOG_MARKER.length));
- }
- }
-
log("".concat(prefix, " trace start"));
-
if (trace) {
trace();
}
-
log("".concat(prefix, " trace end"));
} catch (e) {}
-
if (typeof window.__debug === "function") {
window.__debug(source);
}
}
-
function isEmptyObject(obj) {
- return Object.keys(obj).length === 0;
+ return Object.keys(obj).length === 0 && !obj.prototype;
}
-
var updatedArgs = args ? [].concat(source).concat(args) : [source];
-
try {
abortOnPropertyRead.apply(this, updatedArgs);
} catch (e) {
console.log(e);
}
}
-
function abortOnPropertyWrite(source, args) {
function abortOnPropertyWrite(source, property) {
if (!property) {
return;
}
-
var rid = randomId();
-
var abort = function abort() {
hit(source);
throw new ReferenceError(rid);
};
-
var setChainPropAccess = function setChainPropAccess(owner, property) {
var chainInfo = getPropertyInChain(owner, property);
var base = chainInfo.base;
var prop = chainInfo.prop,
- chain = chainInfo.chain;
-
+ chain = chainInfo.chain;
if (chain) {
var setter = function setter(a) {
base = a;
-
if (a instanceof Object) {
setChainPropAccess(a, chain);
}
};
-
Object.defineProperty(owner, prop, {
get: function get() {
return base;
@@ -16655,43 +14186,33 @@
});
return;
}
-
setPropertyAccess(base, prop, {
set: abort
});
};
-
setChainPropAccess(window, property);
window.onerror = createOnErrorHandler(rid).bind();
}
-
function randomId() {
- return Math.random().toString(36).substr(2, 9);
+ return Math.random().toString(36).slice(2, 9);
}
-
function setPropertyAccess(object, property, descriptor) {
var currentDescriptor = Object.getOwnPropertyDescriptor(object, property);
-
if (currentDescriptor && !currentDescriptor.configurable) {
return false;
}
-
Object.defineProperty(object, property, descriptor);
return true;
}
-
function getPropertyInChain(base, chain) {
var pos = chain.indexOf(".");
-
if (pos === -1) {
return {
base: base,
prop: chain
};
}
-
var prop = chain.slice(0, pos);
-
if (base === null) {
return {
base: base,
@@ -16699,10 +14220,8 @@
chain: chain
};
}
-
var nextBase = base[prop];
chain = chain.slice(pos + 1);
-
if ((base instanceof Object || typeof base === "object") && isEmptyObject(base)) {
return {
base: base,
@@ -16710,7 +14229,6 @@
chain: chain
};
}
-
if (nextBase === null) {
return {
base: base,
@@ -16718,11 +14236,9 @@
chain: chain
};
}
-
if (nextBase !== undefined) {
return getPropertyInChain(nextBase, chain);
}
-
Object.defineProperty(base, prop, {
configurable: true
});
@@ -16732,116 +14248,83 @@
chain: chain
};
}
-
function createOnErrorHandler(rid) {
var nativeOnError = window.onerror;
return function onError(error) {
if (typeof error === "string" && error.indexOf(rid) !== -1) {
return true;
}
-
if (nativeOnError instanceof Function) {
for (var _len = arguments.length, args = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {
args[_key - 1] = arguments[_key];
}
-
return nativeOnError.apply(this, [error].concat(args));
}
-
return false;
};
}
-
- function hit(source, message) {
+ function hit(source) {
if (source.verbose !== true) {
return;
}
-
try {
var log = console.log.bind(console);
var trace = console.trace.bind(console);
var prefix = source.ruleText || "";
-
if (source.domainName) {
var AG_SCRIPTLET_MARKER = "#%#//";
var UBO_SCRIPTLET_MARKER = "##+js";
var ruleStartIndex;
-
if (source.ruleText.indexOf(AG_SCRIPTLET_MARKER) > -1) {
ruleStartIndex = source.ruleText.indexOf(AG_SCRIPTLET_MARKER);
} else if (source.ruleText.indexOf(UBO_SCRIPTLET_MARKER) > -1) {
ruleStartIndex = source.ruleText.indexOf(UBO_SCRIPTLET_MARKER);
}
-
var rulePart = source.ruleText.slice(ruleStartIndex);
prefix = "".concat(source.domainName).concat(rulePart);
}
-
- var LOG_MARKER = "log: ";
-
- if (message) {
- if (message.indexOf(LOG_MARKER) === -1) {
- log("".concat(prefix, " message:\n").concat(message));
- } else {
- log(message.slice(LOG_MARKER.length));
- }
- }
-
log("".concat(prefix, " trace start"));
-
if (trace) {
trace();
}
-
log("".concat(prefix, " trace end"));
} catch (e) {}
-
if (typeof window.__debug === "function") {
window.__debug(source);
}
}
-
function isEmptyObject(obj) {
- return Object.keys(obj).length === 0;
+ return Object.keys(obj).length === 0 && !obj.prototype;
}
-
var updatedArgs = args ? [].concat(source).concat(args) : [source];
-
try {
abortOnPropertyWrite.apply(this, updatedArgs);
} catch (e) {
console.log(e);
}
}
-
function abortOnStackTrace(source, args) {
function abortOnStackTrace(source, property, stack) {
if (!property || !stack) {
return;
}
-
var rid = randomId();
-
var abort = function abort() {
hit(source);
throw new ReferenceError(rid);
};
-
var setChainPropAccess = function setChainPropAccess(owner, property) {
var chainInfo = getPropertyInChain(owner, property);
var base = chainInfo.base;
var prop = chainInfo.prop,
- chain = chainInfo.chain;
-
+ chain = chainInfo.chain;
if (chain) {
var setter = function setter(a) {
base = a;
-
if (a instanceof Object) {
setChainPropAccess(a, chain);
}
};
-
Object.defineProperty(owner, prop, {
get: function get() {
return base;
@@ -16850,26 +14333,22 @@
});
return;
}
-
if (!stack.match(/^(inlineScript|injectedScript)$/) && !isValidStrPattern(stack)) {
logMessage(source, "Invalid parameter: ".concat(stack));
return;
}
-
var descriptorWrapper = Object.assign(getDescriptorAddon(), {
value: base[prop],
get: function get() {
if (!this.isAbortingSuspended && this.isolateCallback(matchStackTrace, stack, new Error().stack)) {
abort();
}
-
return this.value;
},
set: function set(newValue) {
if (!this.isAbortingSuspended && this.isolateCallback(matchStackTrace, stack, new Error().stack)) {
abort();
}
-
this.value = newValue;
}
});
@@ -16882,38 +14361,29 @@
}
});
};
-
setChainPropAccess(window, property);
window.onerror = createOnErrorHandler(rid).bind();
}
-
function randomId() {
- return Math.random().toString(36).substr(2, 9);
+ return Math.random().toString(36).slice(2, 9);
}
-
function setPropertyAccess(object, property, descriptor) {
var currentDescriptor = Object.getOwnPropertyDescriptor(object, property);
-
if (currentDescriptor && !currentDescriptor.configurable) {
return false;
}
-
Object.defineProperty(object, property, descriptor);
return true;
}
-
function getPropertyInChain(base, chain) {
var pos = chain.indexOf(".");
-
if (pos === -1) {
return {
base: base,
prop: chain
};
}
-
var prop = chain.slice(0, pos);
-
if (base === null) {
return {
base: base,
@@ -16921,10 +14391,8 @@
chain: chain
};
}
-
var nextBase = base[prop];
chain = chain.slice(pos + 1);
-
if ((base instanceof Object || typeof base === "object") && isEmptyObject(base)) {
return {
base: base,
@@ -16932,7 +14400,6 @@
chain: chain
};
}
-
if (nextBase === null) {
return {
base: base,
@@ -16940,11 +14407,9 @@
chain: chain
};
}
-
if (nextBase !== undefined) {
return getPropertyInChain(nextBase, chain);
}
-
Object.defineProperty(base, prop, {
configurable: true
});
@@ -16954,126 +14419,91 @@
chain: chain
};
}
-
function createOnErrorHandler(rid) {
var nativeOnError = window.onerror;
return function onError(error) {
if (typeof error === "string" && error.indexOf(rid) !== -1) {
return true;
}
-
if (nativeOnError instanceof Function) {
for (var _len = arguments.length, args = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {
args[_key - 1] = arguments[_key];
}
-
return nativeOnError.apply(this, [error].concat(args));
}
-
return false;
};
}
-
- function hit(source, message) {
+ function hit(source) {
if (source.verbose !== true) {
return;
}
-
try {
var log = console.log.bind(console);
var trace = console.trace.bind(console);
var prefix = source.ruleText || "";
-
if (source.domainName) {
var AG_SCRIPTLET_MARKER = "#%#//";
var UBO_SCRIPTLET_MARKER = "##+js";
var ruleStartIndex;
-
if (source.ruleText.indexOf(AG_SCRIPTLET_MARKER) > -1) {
ruleStartIndex = source.ruleText.indexOf(AG_SCRIPTLET_MARKER);
} else if (source.ruleText.indexOf(UBO_SCRIPTLET_MARKER) > -1) {
ruleStartIndex = source.ruleText.indexOf(UBO_SCRIPTLET_MARKER);
}
-
var rulePart = source.ruleText.slice(ruleStartIndex);
prefix = "".concat(source.domainName).concat(rulePart);
}
-
- var LOG_MARKER = "log: ";
-
- if (message) {
- if (message.indexOf(LOG_MARKER) === -1) {
- log("".concat(prefix, " message:\n").concat(message));
- } else {
- log(message.slice(LOG_MARKER.length));
- }
- }
-
log("".concat(prefix, " trace start"));
-
if (trace) {
trace();
}
-
log("".concat(prefix, " trace end"));
} catch (e) {}
-
if (typeof window.__debug === "function") {
window.__debug(source);
}
}
-
function isValidStrPattern(input) {
var FORWARD_SLASH = "/";
var str = escapeRegExp(input);
-
if (input[0] === FORWARD_SLASH && input[input.length - 1] === FORWARD_SLASH) {
str = input.slice(1, -1);
}
-
var isValid;
-
try {
isValid = new RegExp(str);
isValid = true;
} catch (e) {
isValid = false;
}
-
return isValid;
}
-
function escapeRegExp(str) {
return str.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
}
-
function matchStackTrace(stackMatch, stackTrace) {
if (!stackMatch || stackMatch === "") {
return true;
}
-
if (shouldAbortInlineOrInjectedScript(stackMatch, stackTrace)) {
return true;
}
-
var stackRegexp = toRegExp(stackMatch);
var refinedStackTrace = stackTrace.split("\n").slice(2).map(function (line) {
return line.trim();
}).join("\n");
return getNativeRegexpTest().call(stackRegexp, refinedStackTrace);
}
-
function getDescriptorAddon() {
return {
isAbortingSuspended: false,
isolateCallback: function isolateCallback(cb) {
this.isAbortingSuspended = true;
-
try {
for (var _len = arguments.length, args = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {
args[_key - 1] = arguments[_key];
}
-
var result = cb.apply(void 0, args);
this.isAbortingSuspended = false;
return result;
@@ -17085,90 +14515,69 @@
}
};
}
-
function logMessage(source, message) {
var forced = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;
-
if (forced || source.verbose) {
console.log("".concat(source.name, ": ").concat(message));
}
}
-
function toRegExp() {
var input = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : "";
var DEFAULT_VALUE = ".?";
var FORWARD_SLASH = "/";
-
if (input === "") {
return new RegExp(DEFAULT_VALUE);
}
-
if (input[0] === FORWARD_SLASH && input[input.length - 1] === FORWARD_SLASH) {
return new RegExp(input.slice(1, -1));
}
-
var escaped = input.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
return new RegExp(escaped);
}
-
function isEmptyObject(obj) {
- return Object.keys(obj).length === 0;
+ return Object.keys(obj).length === 0 && !obj.prototype;
}
-
function getNativeRegexpTest() {
return Object.getOwnPropertyDescriptor(RegExp.prototype, "test").value;
}
-
function startsWith(str, prefix) {
return !!str && str.indexOf(prefix) === 0;
}
-
function shouldAbortInlineOrInjectedScript(stackMatch, stackTrace) {
var INLINE_SCRIPT_STRING = "inlineScript";
var INJECTED_SCRIPT_STRING = "injectedScript";
var INJECTED_SCRIPT_MARKER = "";
-
var isInlineScript = function isInlineScript(stackMatch) {
return stackMatch.indexOf(INLINE_SCRIPT_STRING) > -1;
};
-
var isInjectedScript = function isInjectedScript(stackMatch) {
return stackMatch.indexOf(INJECTED_SCRIPT_STRING) > -1;
};
-
if (!(isInlineScript(stackMatch) || isInjectedScript(stackMatch))) {
return false;
}
-
var documentURL = window.location.href;
var pos = documentURL.indexOf("#");
-
if (pos !== -1) {
documentURL = documentURL.slice(0, pos);
}
-
var stackSteps = stackTrace.split("\n").slice(2).map(function (line) {
return line.trim();
});
var stackLines = stackSteps.map(function (line) {
var stack;
var getStackTraceURL = /(.*?@)?(\S+)(:\d+):\d+\)?$/.exec(line);
-
if (getStackTraceURL) {
var stackURL = getStackTraceURL[2];
-
if (startsWith(stackURL, "(")) {
stackURL = stackURL.slice(1);
}
-
if (startsWith(stackURL, INJECTED_SCRIPT_MARKER)) {
stackURL = INJECTED_SCRIPT_STRING;
var stackFunction = getStackTraceURL[1] !== undefined ? getStackTraceURL[1].slice(0, -1) : line.slice(0, getStackTraceURL.index).trim();
-
if (startsWith(stackFunction, "at")) {
stackFunction = stackFunction.slice(2).trim();
}
-
stack = "".concat(stackFunction, " ").concat(stackURL).trim();
} else {
stack = stackURL;
@@ -17176,39 +14585,31 @@
} else {
stack = line;
}
-
return stack;
});
-
if (stackLines) {
for (var index = 0; index < stackLines.length; index += 1) {
if (isInlineScript(stackMatch) && documentURL === stackLines[index]) {
return true;
}
-
if (isInjectedScript(stackMatch) && startsWith(stackLines[index], INJECTED_SCRIPT_STRING)) {
return true;
}
}
}
-
return false;
}
-
var updatedArgs = args ? [].concat(source).concat(args) : [source];
-
try {
abortOnStackTrace.apply(this, updatedArgs);
} catch (e) {
console.log(e);
}
}
-
function adjustSetInterval(source, args) {
function adjustSetInterval(source, matchCallback, matchDelay, boost) {
var nativeSetInterval = window.setInterval;
var matchRegexp = toRegExp(matchCallback);
-
var intervalWrapper = function intervalWrapper(callback, delay) {
if (!isValidCallback(callback)) {
var message = "Scriptlet can't be applied because of invalid callback: '".concat(String(callback), "'.");
@@ -17217,152 +14618,110 @@
delay *= getBoostMultiplier(boost);
hit(source);
}
-
for (var _len = arguments.length, args = new Array(_len > 2 ? _len - 2 : 0), _key = 2; _key < _len; _key++) {
args[_key - 2] = arguments[_key];
}
-
return nativeSetInterval.apply(window, [callback, delay].concat(args));
};
-
window.setInterval = intervalWrapper;
}
-
- function hit(source, message) {
+ function hit(source) {
if (source.verbose !== true) {
return;
}
-
try {
var log = console.log.bind(console);
var trace = console.trace.bind(console);
var prefix = source.ruleText || "";
-
if (source.domainName) {
var AG_SCRIPTLET_MARKER = "#%#//";
var UBO_SCRIPTLET_MARKER = "##+js";
var ruleStartIndex;
-
if (source.ruleText.indexOf(AG_SCRIPTLET_MARKER) > -1) {
ruleStartIndex = source.ruleText.indexOf(AG_SCRIPTLET_MARKER);
} else if (source.ruleText.indexOf(UBO_SCRIPTLET_MARKER) > -1) {
ruleStartIndex = source.ruleText.indexOf(UBO_SCRIPTLET_MARKER);
}
-
var rulePart = source.ruleText.slice(ruleStartIndex);
prefix = "".concat(source.domainName).concat(rulePart);
}
-
- var LOG_MARKER = "log: ";
-
- if (message) {
- if (message.indexOf(LOG_MARKER) === -1) {
- log("".concat(prefix, " message:\n").concat(message));
- } else {
- log(message.slice(LOG_MARKER.length));
- }
- }
-
log("".concat(prefix, " trace start"));
-
if (trace) {
trace();
}
-
log("".concat(prefix, " trace end"));
} catch (e) {}
-
if (typeof window.__debug === "function") {
window.__debug(source);
}
}
-
function isValidCallback(callback) {
return callback instanceof Function || typeof callback === "string";
}
-
function toRegExp() {
var input = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : "";
var DEFAULT_VALUE = ".?";
var FORWARD_SLASH = "/";
-
if (input === "") {
return new RegExp(DEFAULT_VALUE);
}
-
if (input[0] === FORWARD_SLASH && input[input.length - 1] === FORWARD_SLASH) {
return new RegExp(input.slice(1, -1));
}
-
var escaped = input.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
return new RegExp(escaped);
}
-
function getBoostMultiplier(boost) {
var DEFAULT_MULTIPLIER = .05;
var MIN_MULTIPLIER = .02;
var MAX_MULTIPLIER = 50;
var parsedBoost = parseFloat(boost);
var boostMultiplier = nativeIsNaN(parsedBoost) || !nativeIsFinite(parsedBoost) ? DEFAULT_MULTIPLIER : parsedBoost;
-
if (boostMultiplier < MIN_MULTIPLIER) {
boostMultiplier = MIN_MULTIPLIER;
}
-
if (boostMultiplier > MAX_MULTIPLIER) {
boostMultiplier = MAX_MULTIPLIER;
}
-
return boostMultiplier;
}
-
function isDelayMatched(inputDelay, realDelay) {
return shouldMatchAnyDelay(inputDelay) || realDelay === getMatchDelay(inputDelay);
}
-
function logMessage(source, message) {
var forced = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;
-
if (forced || source.verbose) {
console.log("".concat(source.name, ": ").concat(message));
}
}
-
function nativeIsNaN(num) {
var native = Number.isNaN || window.isNaN;
return native(num);
}
-
function nativeIsFinite(num) {
var native = Number.isFinite || window.isFinite;
return native(num);
}
-
function getMatchDelay(delay) {
var DEFAULT_DELAY = 1e3;
var parsedDelay = parseInt(delay, 10);
var delayMatch = nativeIsNaN(parsedDelay) ? DEFAULT_DELAY : parsedDelay;
return delayMatch;
}
-
function shouldMatchAnyDelay(delay) {
return delay === "*";
}
-
var updatedArgs = args ? [].concat(source).concat(args) : [source];
-
try {
adjustSetInterval.apply(this, updatedArgs);
} catch (e) {
console.log(e);
}
}
-
function adjustSetTimeout(source, args) {
function adjustSetTimeout(source, matchCallback, matchDelay, boost) {
var nativeSetTimeout = window.setTimeout;
var matchRegexp = toRegExp(matchCallback);
-
var timeoutWrapper = function timeoutWrapper(callback, delay) {
if (!isValidCallback(callback)) {
var message = "Scriptlet can't be applied because of invalid callback: '".concat(String(callback), "'.");
@@ -17371,189 +14730,138 @@
delay *= getBoostMultiplier(boost);
hit(source);
}
-
for (var _len = arguments.length, args = new Array(_len > 2 ? _len - 2 : 0), _key = 2; _key < _len; _key++) {
args[_key - 2] = arguments[_key];
}
-
return nativeSetTimeout.apply(window, [callback, delay].concat(args));
};
-
window.setTimeout = timeoutWrapper;
}
-
- function hit(source, message) {
+ function hit(source) {
if (source.verbose !== true) {
return;
}
-
try {
var log = console.log.bind(console);
var trace = console.trace.bind(console);
var prefix = source.ruleText || "";
-
if (source.domainName) {
var AG_SCRIPTLET_MARKER = "#%#//";
var UBO_SCRIPTLET_MARKER = "##+js";
var ruleStartIndex;
-
if (source.ruleText.indexOf(AG_SCRIPTLET_MARKER) > -1) {
ruleStartIndex = source.ruleText.indexOf(AG_SCRIPTLET_MARKER);
} else if (source.ruleText.indexOf(UBO_SCRIPTLET_MARKER) > -1) {
ruleStartIndex = source.ruleText.indexOf(UBO_SCRIPTLET_MARKER);
}
-
var rulePart = source.ruleText.slice(ruleStartIndex);
prefix = "".concat(source.domainName).concat(rulePart);
}
-
- var LOG_MARKER = "log: ";
-
- if (message) {
- if (message.indexOf(LOG_MARKER) === -1) {
- log("".concat(prefix, " message:\n").concat(message));
- } else {
- log(message.slice(LOG_MARKER.length));
- }
- }
-
log("".concat(prefix, " trace start"));
-
if (trace) {
trace();
}
-
log("".concat(prefix, " trace end"));
} catch (e) {}
-
if (typeof window.__debug === "function") {
window.__debug(source);
}
}
-
function isValidCallback(callback) {
return callback instanceof Function || typeof callback === "string";
}
-
function toRegExp() {
var input = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : "";
var DEFAULT_VALUE = ".?";
var FORWARD_SLASH = "/";
-
if (input === "") {
return new RegExp(DEFAULT_VALUE);
}
-
if (input[0] === FORWARD_SLASH && input[input.length - 1] === FORWARD_SLASH) {
return new RegExp(input.slice(1, -1));
}
-
var escaped = input.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
return new RegExp(escaped);
}
-
function getBoostMultiplier(boost) {
var DEFAULT_MULTIPLIER = .05;
var MIN_MULTIPLIER = .02;
var MAX_MULTIPLIER = 50;
var parsedBoost = parseFloat(boost);
var boostMultiplier = nativeIsNaN(parsedBoost) || !nativeIsFinite(parsedBoost) ? DEFAULT_MULTIPLIER : parsedBoost;
-
if (boostMultiplier < MIN_MULTIPLIER) {
boostMultiplier = MIN_MULTIPLIER;
}
-
if (boostMultiplier > MAX_MULTIPLIER) {
boostMultiplier = MAX_MULTIPLIER;
}
-
return boostMultiplier;
}
-
function isDelayMatched(inputDelay, realDelay) {
return shouldMatchAnyDelay(inputDelay) || realDelay === getMatchDelay(inputDelay);
}
-
function logMessage(source, message) {
var forced = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;
-
if (forced || source.verbose) {
console.log("".concat(source.name, ": ").concat(message));
}
}
-
function nativeIsNaN(num) {
var native = Number.isNaN || window.isNaN;
return native(num);
}
-
function nativeIsFinite(num) {
var native = Number.isFinite || window.isFinite;
return native(num);
}
-
function getMatchDelay(delay) {
var DEFAULT_DELAY = 1e3;
var parsedDelay = parseInt(delay, 10);
var delayMatch = nativeIsNaN(parsedDelay) ? DEFAULT_DELAY : parsedDelay;
return delayMatch;
}
-
function shouldMatchAnyDelay(delay) {
return delay === "*";
}
-
var updatedArgs = args ? [].concat(source).concat(args) : [source];
-
try {
adjustSetTimeout.apply(this, updatedArgs);
} catch (e) {
console.log(e);
}
}
-
function debugCurrentInlineScript(source, args) {
function debugCurrentInlineScript(source, property, search) {
var searchRegexp = toRegExp(search);
var rid = randomId();
-
var getCurrentScript = function getCurrentScript() {
if ("currentScript" in document) {
return document.currentScript;
}
-
var scripts = document.getElementsByTagName("script");
return scripts[scripts.length - 1];
};
-
var ourScript = getCurrentScript();
-
var abort = function abort() {
var scriptEl = getCurrentScript();
-
if (!scriptEl) {
return;
}
-
var content = scriptEl.textContent;
-
try {
var textContentGetter = Object.getOwnPropertyDescriptor(Node.prototype, "textContent").get;
content = textContentGetter.call(scriptEl);
} catch (e) {}
-
if (scriptEl instanceof HTMLScriptElement && content.length > 0 && scriptEl !== ourScript && searchRegexp.test(content)) {
hit(source);
debugger;
}
};
-
var setChainPropAccess = function setChainPropAccess(owner, property) {
var chainInfo = getPropertyInChain(owner, property);
var base = chainInfo.base;
var prop = chainInfo.prop,
- chain = chainInfo.chain;
-
+ chain = chainInfo.chain;
if (base instanceof Object === false && base === null) {
var props = property.split(".");
var propIndex = props.indexOf(prop);
@@ -17562,16 +14870,13 @@
logMessage(message, source.verbose);
return;
}
-
if (chain) {
var setter = function setter(a) {
base = a;
-
if (a instanceof Object) {
setChainPropAccess(a, chain);
}
};
-
Object.defineProperty(owner, prop, {
get: function get() {
return base;
@@ -17580,7 +14885,6 @@
});
return;
}
-
var currentValue = base[prop];
setPropertyAccess(base, prop, {
set: function set(value) {
@@ -17593,38 +14897,29 @@
}
});
};
-
setChainPropAccess(window, property);
window.onerror = createOnErrorHandler(rid).bind();
}
-
function randomId() {
- return Math.random().toString(36).substr(2, 9);
+ return Math.random().toString(36).slice(2, 9);
}
-
function setPropertyAccess(object, property, descriptor) {
var currentDescriptor = Object.getOwnPropertyDescriptor(object, property);
-
if (currentDescriptor && !currentDescriptor.configurable) {
return false;
}
-
Object.defineProperty(object, property, descriptor);
return true;
}
-
function getPropertyInChain(base, chain) {
var pos = chain.indexOf(".");
-
if (pos === -1) {
return {
base: base,
prop: chain
};
}
-
var prop = chain.slice(0, pos);
-
if (base === null) {
return {
base: base,
@@ -17632,10 +14927,8 @@
chain: chain
};
}
-
var nextBase = base[prop];
chain = chain.slice(pos + 1);
-
if ((base instanceof Object || typeof base === "object") && isEmptyObject(base)) {
return {
base: base,
@@ -17643,7 +14936,6 @@
chain: chain
};
}
-
if (nextBase === null) {
return {
base: base,
@@ -17651,11 +14943,9 @@
chain: chain
};
}
-
if (nextBase !== undefined) {
return getPropertyInChain(nextBase, chain);
}
-
Object.defineProperty(base, prop, {
configurable: true
});
@@ -17665,141 +14955,102 @@
chain: chain
};
}
-
function toRegExp() {
var input = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : "";
var DEFAULT_VALUE = ".?";
var FORWARD_SLASH = "/";
-
if (input === "") {
return new RegExp(DEFAULT_VALUE);
}
-
if (input[0] === FORWARD_SLASH && input[input.length - 1] === FORWARD_SLASH) {
return new RegExp(input.slice(1, -1));
}
-
var escaped = input.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
return new RegExp(escaped);
}
-
function createOnErrorHandler(rid) {
var nativeOnError = window.onerror;
return function onError(error) {
if (typeof error === "string" && error.indexOf(rid) !== -1) {
return true;
}
-
if (nativeOnError instanceof Function) {
for (var _len = arguments.length, args = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {
args[_key - 1] = arguments[_key];
}
-
return nativeOnError.apply(this, [error].concat(args));
}
-
return false;
};
}
-
- function hit(source, message) {
+ function hit(source) {
if (source.verbose !== true) {
return;
}
-
try {
var log = console.log.bind(console);
var trace = console.trace.bind(console);
var prefix = source.ruleText || "";
-
if (source.domainName) {
var AG_SCRIPTLET_MARKER = "#%#//";
var UBO_SCRIPTLET_MARKER = "##+js";
var ruleStartIndex;
-
if (source.ruleText.indexOf(AG_SCRIPTLET_MARKER) > -1) {
ruleStartIndex = source.ruleText.indexOf(AG_SCRIPTLET_MARKER);
} else if (source.ruleText.indexOf(UBO_SCRIPTLET_MARKER) > -1) {
ruleStartIndex = source.ruleText.indexOf(UBO_SCRIPTLET_MARKER);
}
-
var rulePart = source.ruleText.slice(ruleStartIndex);
prefix = "".concat(source.domainName).concat(rulePart);
}
-
- var LOG_MARKER = "log: ";
-
- if (message) {
- if (message.indexOf(LOG_MARKER) === -1) {
- log("".concat(prefix, " message:\n").concat(message));
- } else {
- log(message.slice(LOG_MARKER.length));
- }
- }
-
log("".concat(prefix, " trace start"));
-
if (trace) {
trace();
}
-
log("".concat(prefix, " trace end"));
} catch (e) {}
-
if (typeof window.__debug === "function") {
window.__debug(source);
}
}
-
function logMessage(source, message) {
var forced = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;
-
if (forced || source.verbose) {
console.log("".concat(source.name, ": ").concat(message));
}
}
-
function isEmptyObject(obj) {
- return Object.keys(obj).length === 0;
+ return Object.keys(obj).length === 0 && !obj.prototype;
}
-
var updatedArgs = args ? [].concat(source).concat(args) : [source];
-
try {
debugCurrentInlineScript.apply(this, updatedArgs);
} catch (e) {
console.log(e);
}
}
-
function debugOnPropertyRead(source, args) {
function debugOnPropertyRead(source, property) {
if (!property) {
return;
}
-
var rid = randomId();
-
var abort = function abort() {
hit(source);
debugger;
};
-
var setChainPropAccess = function setChainPropAccess(owner, property) {
var chainInfo = getPropertyInChain(owner, property);
var base = chainInfo.base;
var prop = chainInfo.prop,
- chain = chainInfo.chain;
-
+ chain = chainInfo.chain;
if (chain) {
var setter = function setter(a) {
base = a;
-
if (a instanceof Object) {
setChainPropAccess(a, chain);
}
};
-
Object.defineProperty(owner, prop, {
get: function get() {
return base;
@@ -17808,44 +15059,34 @@
});
return;
}
-
setPropertyAccess(base, prop, {
get: abort,
set: noopFunc
});
};
-
setChainPropAccess(window, property);
window.onerror = createOnErrorHandler(rid).bind();
}
-
function randomId() {
- return Math.random().toString(36).substr(2, 9);
+ return Math.random().toString(36).slice(2, 9);
}
-
function setPropertyAccess(object, property, descriptor) {
var currentDescriptor = Object.getOwnPropertyDescriptor(object, property);
-
if (currentDescriptor && !currentDescriptor.configurable) {
return false;
}
-
Object.defineProperty(object, property, descriptor);
return true;
}
-
function getPropertyInChain(base, chain) {
var pos = chain.indexOf(".");
-
if (pos === -1) {
return {
base: base,
prop: chain
};
}
-
var prop = chain.slice(0, pos);
-
if (base === null) {
return {
base: base,
@@ -17853,10 +15094,8 @@
chain: chain
};
}
-
var nextBase = base[prop];
chain = chain.slice(pos + 1);
-
if ((base instanceof Object || typeof base === "object") && isEmptyObject(base)) {
return {
base: base,
@@ -17864,7 +15103,6 @@
chain: chain
};
}
-
if (nextBase === null) {
return {
base: base,
@@ -17872,11 +15110,9 @@
chain: chain
};
}
-
if (nextBase !== undefined) {
return getPropertyInChain(nextBase, chain);
}
-
Object.defineProperty(base, prop, {
configurable: true
});
@@ -17886,118 +15122,84 @@
chain: chain
};
}
-
function createOnErrorHandler(rid) {
var nativeOnError = window.onerror;
return function onError(error) {
if (typeof error === "string" && error.indexOf(rid) !== -1) {
return true;
}
-
if (nativeOnError instanceof Function) {
for (var _len = arguments.length, args = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {
args[_key - 1] = arguments[_key];
}
-
return nativeOnError.apply(this, [error].concat(args));
}
-
return false;
};
}
-
- function hit(source, message) {
+ function hit(source) {
if (source.verbose !== true) {
return;
}
-
try {
var log = console.log.bind(console);
var trace = console.trace.bind(console);
var prefix = source.ruleText || "";
-
if (source.domainName) {
var AG_SCRIPTLET_MARKER = "#%#//";
var UBO_SCRIPTLET_MARKER = "##+js";
var ruleStartIndex;
-
if (source.ruleText.indexOf(AG_SCRIPTLET_MARKER) > -1) {
ruleStartIndex = source.ruleText.indexOf(AG_SCRIPTLET_MARKER);
} else if (source.ruleText.indexOf(UBO_SCRIPTLET_MARKER) > -1) {
ruleStartIndex = source.ruleText.indexOf(UBO_SCRIPTLET_MARKER);
}
-
var rulePart = source.ruleText.slice(ruleStartIndex);
prefix = "".concat(source.domainName).concat(rulePart);
}
-
- var LOG_MARKER = "log: ";
-
- if (message) {
- if (message.indexOf(LOG_MARKER) === -1) {
- log("".concat(prefix, " message:\n").concat(message));
- } else {
- log(message.slice(LOG_MARKER.length));
- }
- }
-
log("".concat(prefix, " trace start"));
-
if (trace) {
trace();
}
-
log("".concat(prefix, " trace end"));
} catch (e) {}
-
if (typeof window.__debug === "function") {
window.__debug(source);
}
}
-
function noopFunc() {}
-
function isEmptyObject(obj) {
- return Object.keys(obj).length === 0;
+ return Object.keys(obj).length === 0 && !obj.prototype;
}
-
var updatedArgs = args ? [].concat(source).concat(args) : [source];
-
try {
debugOnPropertyRead.apply(this, updatedArgs);
} catch (e) {
console.log(e);
}
}
-
function debugOnPropertyWrite(source, args) {
function debugOnPropertyWrite(source, property) {
if (!property) {
return;
}
-
var rid = randomId();
-
var abort = function abort() {
hit(source);
debugger;
};
-
var setChainPropAccess = function setChainPropAccess(owner, property) {
var chainInfo = getPropertyInChain(owner, property);
var base = chainInfo.base;
var prop = chainInfo.prop,
- chain = chainInfo.chain;
-
+ chain = chainInfo.chain;
if (chain) {
var setter = function setter(a) {
base = a;
-
if (a instanceof Object) {
setChainPropAccess(a, chain);
}
};
-
Object.defineProperty(owner, prop, {
get: function get() {
return base;
@@ -18006,43 +15208,33 @@
});
return;
}
-
setPropertyAccess(base, prop, {
set: abort
});
};
-
setChainPropAccess(window, property);
window.onerror = createOnErrorHandler(rid).bind();
}
-
function randomId() {
- return Math.random().toString(36).substr(2, 9);
+ return Math.random().toString(36).slice(2, 9);
}
-
function setPropertyAccess(object, property, descriptor) {
var currentDescriptor = Object.getOwnPropertyDescriptor(object, property);
-
if (currentDescriptor && !currentDescriptor.configurable) {
return false;
}
-
Object.defineProperty(object, property, descriptor);
return true;
}
-
function getPropertyInChain(base, chain) {
var pos = chain.indexOf(".");
-
if (pos === -1) {
return {
base: base,
prop: chain
};
}
-
var prop = chain.slice(0, pos);
-
if (base === null) {
return {
base: base,
@@ -18050,10 +15242,8 @@
chain: chain
};
}
-
var nextBase = base[prop];
chain = chain.slice(pos + 1);
-
if ((base instanceof Object || typeof base === "object") && isEmptyObject(base)) {
return {
base: base,
@@ -18061,7 +15251,6 @@
chain: chain
};
}
-
if (nextBase === null) {
return {
base: base,
@@ -18069,11 +15258,9 @@
chain: chain
};
}
-
if (nextBase !== undefined) {
return getPropertyInChain(nextBase, chain);
}
-
Object.defineProperty(base, prop, {
configurable: true
});
@@ -18083,174 +15270,114 @@
chain: chain
};
}
-
function createOnErrorHandler(rid) {
var nativeOnError = window.onerror;
return function onError(error) {
if (typeof error === "string" && error.indexOf(rid) !== -1) {
return true;
}
-
if (nativeOnError instanceof Function) {
for (var _len = arguments.length, args = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {
args[_key - 1] = arguments[_key];
}
-
return nativeOnError.apply(this, [error].concat(args));
}
-
return false;
};
}
-
- function hit(source, message) {
+ function hit(source) {
if (source.verbose !== true) {
return;
}
-
try {
var log = console.log.bind(console);
var trace = console.trace.bind(console);
var prefix = source.ruleText || "";
-
if (source.domainName) {
var AG_SCRIPTLET_MARKER = "#%#//";
var UBO_SCRIPTLET_MARKER = "##+js";
var ruleStartIndex;
-
if (source.ruleText.indexOf(AG_SCRIPTLET_MARKER) > -1) {
ruleStartIndex = source.ruleText.indexOf(AG_SCRIPTLET_MARKER);
} else if (source.ruleText.indexOf(UBO_SCRIPTLET_MARKER) > -1) {
ruleStartIndex = source.ruleText.indexOf(UBO_SCRIPTLET_MARKER);
}
-
var rulePart = source.ruleText.slice(ruleStartIndex);
prefix = "".concat(source.domainName).concat(rulePart);
}
-
- var LOG_MARKER = "log: ";
-
- if (message) {
- if (message.indexOf(LOG_MARKER) === -1) {
- log("".concat(prefix, " message:\n").concat(message));
- } else {
- log(message.slice(LOG_MARKER.length));
- }
- }
-
log("".concat(prefix, " trace start"));
-
if (trace) {
trace();
}
-
log("".concat(prefix, " trace end"));
} catch (e) {}
-
if (typeof window.__debug === "function") {
window.__debug(source);
}
}
-
function isEmptyObject(obj) {
- return Object.keys(obj).length === 0;
+ return Object.keys(obj).length === 0 && !obj.prototype;
}
-
var updatedArgs = args ? [].concat(source).concat(args) : [source];
-
try {
debugOnPropertyWrite.apply(this, updatedArgs);
} catch (e) {
console.log(e);
}
}
-
function dirString(source, args) {
function dirString(source, times) {
var _console = console,
- dir = _console.dir;
- times = parseInt(times, 10);
-
+ dir = _console.dir;
function dirWrapper(object) {
- var temp;
-
- for (var i = 0; i < times; i += 1) {
- temp = "".concat(object);
- }
-
if (typeof dir === "function") {
dir.call(this, object);
}
-
- hit(source, temp);
+ hit(source);
}
-
console.dir = dirWrapper;
}
-
- function hit(source, message) {
+ function hit(source) {
if (source.verbose !== true) {
return;
}
-
try {
var log = console.log.bind(console);
var trace = console.trace.bind(console);
var prefix = source.ruleText || "";
-
if (source.domainName) {
var AG_SCRIPTLET_MARKER = "#%#//";
var UBO_SCRIPTLET_MARKER = "##+js";
var ruleStartIndex;
-
if (source.ruleText.indexOf(AG_SCRIPTLET_MARKER) > -1) {
ruleStartIndex = source.ruleText.indexOf(AG_SCRIPTLET_MARKER);
} else if (source.ruleText.indexOf(UBO_SCRIPTLET_MARKER) > -1) {
ruleStartIndex = source.ruleText.indexOf(UBO_SCRIPTLET_MARKER);
}
-
var rulePart = source.ruleText.slice(ruleStartIndex);
prefix = "".concat(source.domainName).concat(rulePart);
}
-
- var LOG_MARKER = "log: ";
-
- if (message) {
- if (message.indexOf(LOG_MARKER) === -1) {
- log("".concat(prefix, " message:\n").concat(message));
- } else {
- log(message.slice(LOG_MARKER.length));
- }
- }
-
log("".concat(prefix, " trace start"));
-
if (trace) {
trace();
}
-
log("".concat(prefix, " trace end"));
} catch (e) {}
-
if (typeof window.__debug === "function") {
window.__debug(source);
}
}
-
var updatedArgs = args ? [].concat(source).concat(args) : [source];
-
try {
dirString.apply(this, updatedArgs);
} catch (e) {
console.log(e);
}
}
-
function disableNewtabLinks(source, args) {
function disableNewtabLinks(source) {
document.addEventListener("click", function (ev) {
var target = ev.target;
-
while (target !== null) {
if (target.localName === "a" && target.hasAttribute("target")) {
ev.stopPropagation();
@@ -18258,79 +15385,55 @@
hit(source);
break;
}
-
target = target.parentNode;
}
});
}
-
- function hit(source, message) {
+ function hit(source) {
if (source.verbose !== true) {
return;
}
-
try {
var log = console.log.bind(console);
var trace = console.trace.bind(console);
var prefix = source.ruleText || "";
-
if (source.domainName) {
var AG_SCRIPTLET_MARKER = "#%#//";
var UBO_SCRIPTLET_MARKER = "##+js";
var ruleStartIndex;
-
if (source.ruleText.indexOf(AG_SCRIPTLET_MARKER) > -1) {
ruleStartIndex = source.ruleText.indexOf(AG_SCRIPTLET_MARKER);
} else if (source.ruleText.indexOf(UBO_SCRIPTLET_MARKER) > -1) {
ruleStartIndex = source.ruleText.indexOf(UBO_SCRIPTLET_MARKER);
}
-
var rulePart = source.ruleText.slice(ruleStartIndex);
prefix = "".concat(source.domainName).concat(rulePart);
}
-
- var LOG_MARKER = "log: ";
-
- if (message) {
- if (message.indexOf(LOG_MARKER) === -1) {
- log("".concat(prefix, " message:\n").concat(message));
- } else {
- log(message.slice(LOG_MARKER.length));
- }
- }
-
log("".concat(prefix, " trace start"));
-
if (trace) {
trace();
}
-
log("".concat(prefix, " trace end"));
} catch (e) {}
-
if (typeof window.__debug === "function") {
window.__debug(source);
}
}
-
var updatedArgs = args ? [].concat(source).concat(args) : [source];
-
try {
disableNewtabLinks.apply(this, updatedArgs);
} catch (e) {
console.log(e);
}
}
-
function forceWindowClose(source, args) {
function forceWindowClose(source) {
var path = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : "";
-
if (typeof window.close !== "function") {
var message = "window.close() is not a function so 'close-window' scriptlet is unavailable";
logMessage(source, message);
+ return;
}
-
var closeImmediately = function closeImmediately() {
try {
hit(source);
@@ -18339,12 +15442,10 @@
logMessage(source, e);
}
};
-
var closeByExtension = function closeByExtension() {
var extCall = function extCall() {
dispatchEvent(new Event("adguard:scriptlet-close-window"));
};
-
window.addEventListener("adguard:subscribed-to-close-window", extCall, {
once: true
});
@@ -18354,202 +15455,141 @@
});
}, 5e3);
};
-
var shouldClose = function shouldClose() {
if (path === "") {
return true;
}
-
var pathRegexp = toRegExp(path);
var currentPath = "".concat(window.location.pathname).concat(window.location.search);
return pathRegexp.test(currentPath);
};
-
if (shouldClose()) {
closeImmediately();
-
if (navigator.userAgent.indexOf("Chrome") > -1) {
closeByExtension();
}
}
}
-
- function hit(source, message) {
+ function hit(source) {
if (source.verbose !== true) {
return;
}
-
try {
var log = console.log.bind(console);
var trace = console.trace.bind(console);
var prefix = source.ruleText || "";
-
if (source.domainName) {
var AG_SCRIPTLET_MARKER = "#%#//";
var UBO_SCRIPTLET_MARKER = "##+js";
var ruleStartIndex;
-
if (source.ruleText.indexOf(AG_SCRIPTLET_MARKER) > -1) {
ruleStartIndex = source.ruleText.indexOf(AG_SCRIPTLET_MARKER);
} else if (source.ruleText.indexOf(UBO_SCRIPTLET_MARKER) > -1) {
ruleStartIndex = source.ruleText.indexOf(UBO_SCRIPTLET_MARKER);
}
-
var rulePart = source.ruleText.slice(ruleStartIndex);
prefix = "".concat(source.domainName).concat(rulePart);
}
-
- var LOG_MARKER = "log: ";
-
- if (message) {
- if (message.indexOf(LOG_MARKER) === -1) {
- log("".concat(prefix, " message:\n").concat(message));
- } else {
- log(message.slice(LOG_MARKER.length));
- }
- }
-
log("".concat(prefix, " trace start"));
-
if (trace) {
trace();
}
-
log("".concat(prefix, " trace end"));
} catch (e) {}
-
if (typeof window.__debug === "function") {
window.__debug(source);
}
}
-
function toRegExp() {
var input = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : "";
var DEFAULT_VALUE = ".?";
var FORWARD_SLASH = "/";
-
if (input === "") {
return new RegExp(DEFAULT_VALUE);
}
-
if (input[0] === FORWARD_SLASH && input[input.length - 1] === FORWARD_SLASH) {
return new RegExp(input.slice(1, -1));
}
-
var escaped = input.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
return new RegExp(escaped);
}
-
function logMessage(source, message) {
var forced = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;
-
if (forced || source.verbose) {
console.log("".concat(source.name, ": ").concat(message));
}
}
-
var updatedArgs = args ? [].concat(source).concat(args) : [source];
-
try {
forceWindowClose.apply(this, updatedArgs);
} catch (e) {
console.log(e);
}
}
-
function hideInShadowDom(source, args) {
function hideInShadowDom(source, selector, baseSelector) {
if (!Element.prototype.attachShadow) {
return;
}
-
var hideElement = function hideElement(targetElement) {
var DISPLAY_NONE_CSS = "display:none!important;";
targetElement.style.cssText = DISPLAY_NONE_CSS;
};
-
var hideHandler = function hideHandler() {
var hostElements = !baseSelector ? findHostElements(document.documentElement) : document.querySelectorAll(baseSelector);
-
while (hostElements.length !== 0) {
var isHidden = false;
-
var _pierceShadowDom = pierceShadowDom(selector, hostElements),
- targets = _pierceShadowDom.targets,
- innerHosts = _pierceShadowDom.innerHosts;
-
+ targets = _pierceShadowDom.targets,
+ innerHosts = _pierceShadowDom.innerHosts;
targets.forEach(function (targetEl) {
hideElement(targetEl);
isHidden = true;
});
-
if (isHidden) {
hit(source);
}
-
hostElements = innerHosts;
}
};
-
hideHandler();
observeDOMChanges(hideHandler, true);
}
-
- function hit(source, message) {
+ function hit(source) {
if (source.verbose !== true) {
return;
}
-
try {
var log = console.log.bind(console);
var trace = console.trace.bind(console);
var prefix = source.ruleText || "";
-
if (source.domainName) {
var AG_SCRIPTLET_MARKER = "#%#//";
var UBO_SCRIPTLET_MARKER = "##+js";
var ruleStartIndex;
-
if (source.ruleText.indexOf(AG_SCRIPTLET_MARKER) > -1) {
ruleStartIndex = source.ruleText.indexOf(AG_SCRIPTLET_MARKER);
} else if (source.ruleText.indexOf(UBO_SCRIPTLET_MARKER) > -1) {
ruleStartIndex = source.ruleText.indexOf(UBO_SCRIPTLET_MARKER);
}
-
var rulePart = source.ruleText.slice(ruleStartIndex);
prefix = "".concat(source.domainName).concat(rulePart);
}
-
- var LOG_MARKER = "log: ";
-
- if (message) {
- if (message.indexOf(LOG_MARKER) === -1) {
- log("".concat(prefix, " message:\n").concat(message));
- } else {
- log(message.slice(LOG_MARKER.length));
- }
- }
-
log("".concat(prefix, " trace start"));
-
if (trace) {
trace();
}
-
log("".concat(prefix, " trace end"));
} catch (e) {}
-
if (typeof window.__debug === "function") {
window.__debug(source);
}
}
-
function observeDOMChanges(callback) {
var observeAttrs = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;
var attrsToObserve = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : [];
var THROTTLE_DELAY_MS = 20;
var observer = new MutationObserver(throttle(callbackWrapper, THROTTLE_DELAY_MS));
-
var connect = function connect() {
if (attrsToObserve.length > 0) {
observer.observe(document.documentElement, {
@@ -18566,20 +15606,16 @@
});
}
};
-
var disconnect = function disconnect() {
observer.disconnect();
};
-
function callbackWrapper() {
disconnect();
callback();
connect();
}
-
connect();
}
-
function findHostElements(rootElement) {
var hosts = [];
var domElems = rootElement.querySelectorAll("*");
@@ -18590,7 +15626,6 @@
});
return hosts;
}
-
function pierceShadowDom(selector, hostElements) {
var targets = [];
var innerHostsAcc = [];
@@ -18608,17 +15643,14 @@
innerHosts: innerHosts
};
}
-
function flatten(input) {
var stack = [];
input.forEach(function (el) {
return stack.push(el);
});
var res = [];
-
while (stack.length) {
var next = stack.pop();
-
if (Array.isArray(next)) {
next.forEach(function (el) {
return stack.push(el);
@@ -18627,83 +15659,66 @@
res.push(next);
}
}
-
return res.reverse();
}
-
function throttle(cb, delay) {
var wait = false;
var savedArgs;
-
var wrapper = function wrapper() {
for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
args[_key] = arguments[_key];
}
-
if (wait) {
savedArgs = args;
return;
}
-
cb.apply(void 0, args);
wait = true;
setTimeout(function () {
wait = false;
-
if (savedArgs) {
wrapper(savedArgs);
savedArgs = null;
}
}, delay);
};
-
return wrapper;
}
-
var updatedArgs = args ? [].concat(source).concat(args) : [source];
-
try {
hideInShadowDom.apply(this, updatedArgs);
} catch (e) {
console.log(e);
}
}
-
function jsonPrune(source, args) {
function jsonPrune(source, propsToRemove, requiredInitialProps, stack) {
if (!!stack && !matchStackTrace(stack, new Error().stack)) {
return;
}
-
var prunePaths = propsToRemove !== undefined && propsToRemove !== "" ? propsToRemove.split(/ +/) : [];
var requiredPaths = requiredInitialProps !== undefined && requiredInitialProps !== "" ? requiredInitialProps.split(/ +/) : [];
-
function isPruningNeeded(root) {
if (!root) {
return false;
}
-
var shouldProcess;
-
if (prunePaths.length === 0 && requiredPaths.length > 0) {
var rootString = JSON.stringify(root);
var matchRegex = toRegExp(requiredPaths.join(""));
var shouldLog = matchRegex.test(rootString);
-
if (shouldLog) {
- logMessage(source, "".concat(window.location.hostname, " ").concat(root), true);
+ logMessage(source, "".concat(window.location.hostname, " ").concat(objectToString(root)), true);
shouldProcess = false;
return shouldProcess;
}
}
-
for (var i = 0; i < requiredPaths.length; i += 1) {
var requiredPath = requiredPaths[i];
var lastNestedPropName = requiredPath.split(".").pop();
var hasWildcard = requiredPath.indexOf(".*.") > -1 || requiredPath.indexOf("*.") > -1 || requiredPath.indexOf(".*") > -1 || requiredPath.indexOf(".[].") > -1 || requiredPath.indexOf("[].") > -1 || requiredPath.indexOf(".[]") > -1;
var details = getWildcardPropertyInChain(root, requiredPath, hasWildcard);
shouldProcess = !hasWildcard;
-
for (var _i = 0; _i < details.length; _i += 1) {
if (hasWildcard) {
shouldProcess = !(details[_i].base[lastNestedPropName] === undefined) || shouldProcess;
@@ -18712,21 +15727,17 @@
}
}
}
-
return shouldProcess;
}
-
var jsonPruner = function jsonPruner(root) {
if (prunePaths.length === 0 && requiredPaths.length === 0) {
- logMessage(source, "".concat(window.location.hostname, " ").concat(root), true);
+ logMessage(source, "".concat(window.location.hostname, " ").concat(objectToString(root)), true);
return root;
}
-
try {
if (isPruningNeeded(root) === false) {
return root;
}
-
prunePaths.forEach(function (path) {
var ownerObjArr = getWildcardPropertyInChain(root, path, true);
ownerObjArr.forEach(function (ownerObj) {
@@ -18739,109 +15750,77 @@
} catch (e) {
logMessage(source, e);
}
-
return root;
};
-
var nativeJSONParse = JSON.parse;
-
var jsonParseWrapper = function jsonParseWrapper() {
for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
args[_key] = arguments[_key];
}
-
var root = nativeJSONParse.apply(JSON, args);
return jsonPruner(root);
};
-
jsonParseWrapper.toString = nativeJSONParse.toString.bind(nativeJSONParse);
JSON.parse = jsonParseWrapper;
var nativeResponseJson = Response.prototype.json;
-
var responseJsonWrapper = function responseJsonWrapper() {
var promise = nativeResponseJson.apply(this);
return promise.then(function (obj) {
return jsonPruner(obj);
});
};
-
if (typeof Response === "undefined") {
return;
}
-
Response.prototype.json = responseJsonWrapper;
}
-
- function hit(source, message) {
+ function hit(source) {
if (source.verbose !== true) {
return;
}
-
try {
var log = console.log.bind(console);
var trace = console.trace.bind(console);
var prefix = source.ruleText || "";
-
if (source.domainName) {
var AG_SCRIPTLET_MARKER = "#%#//";
var UBO_SCRIPTLET_MARKER = "##+js";
var ruleStartIndex;
-
if (source.ruleText.indexOf(AG_SCRIPTLET_MARKER) > -1) {
ruleStartIndex = source.ruleText.indexOf(AG_SCRIPTLET_MARKER);
} else if (source.ruleText.indexOf(UBO_SCRIPTLET_MARKER) > -1) {
ruleStartIndex = source.ruleText.indexOf(UBO_SCRIPTLET_MARKER);
}
-
var rulePart = source.ruleText.slice(ruleStartIndex);
prefix = "".concat(source.domainName).concat(rulePart);
}
-
- var LOG_MARKER = "log: ";
-
- if (message) {
- if (message.indexOf(LOG_MARKER) === -1) {
- log("".concat(prefix, " message:\n").concat(message));
- } else {
- log(message.slice(LOG_MARKER.length));
- }
- }
-
log("".concat(prefix, " trace start"));
-
if (trace) {
trace();
}
-
log("".concat(prefix, " trace end"));
} catch (e) {}
-
if (typeof window.__debug === "function") {
window.__debug(source);
}
}
-
function matchStackTrace(stackMatch, stackTrace) {
if (!stackMatch || stackMatch === "") {
return true;
}
-
if (shouldAbortInlineOrInjectedScript(stackMatch, stackTrace)) {
return true;
}
-
var stackRegexp = toRegExp(stackMatch);
var refinedStackTrace = stackTrace.split("\n").slice(2).map(function (line) {
return line.trim();
}).join("\n");
return getNativeRegexpTest().call(stackRegexp, refinedStackTrace);
}
-
function getWildcardPropertyInChain(base, chain) {
var lookThrough = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;
var output = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : [];
var pos = chain.indexOf(".");
-
if (pos === -1) {
if (chain === "*" || chain === "[]") {
for (var key in base) {
@@ -18858,13 +15837,10 @@
prop: chain
});
}
-
return output;
}
-
var prop = chain.slice(0, pos);
var shouldLookThrough = prop === "[]" && Array.isArray(base) || prop === "*" && base instanceof Object;
-
if (shouldLookThrough) {
var nextProp = chain.slice(pos + 1);
var baseKeys = Object.keys(base);
@@ -18873,95 +15849,155 @@
getWildcardPropertyInChain(item, nextProp, lookThrough, output);
});
}
-
var nextBase = base[prop];
chain = chain.slice(pos + 1);
-
if (nextBase !== undefined) {
getWildcardPropertyInChain(nextBase, chain, lookThrough, output);
}
-
return output;
}
-
function logMessage(source, message) {
var forced = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;
-
if (forced || source.verbose) {
console.log("".concat(source.name, ": ").concat(message));
}
}
-
+ function objectToString(obj) {
+ return isEmptyObject(obj) ? "{}" : getObjectEntries(obj).map(function (pair) {
+ var key = pair[0];
+ var value = pair[1];
+ var recordValueStr = value;
+ if (value instanceof Object) {
+ recordValueStr = "{ ".concat(objectToString(value), " }");
+ }
+ return "".concat(key, ':"').concat(recordValueStr, '"');
+ }).join(" ");
+ }
function toRegExp() {
var input = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : "";
var DEFAULT_VALUE = ".?";
var FORWARD_SLASH = "/";
-
if (input === "") {
return new RegExp(DEFAULT_VALUE);
}
-
if (input[0] === FORWARD_SLASH && input[input.length - 1] === FORWARD_SLASH) {
return new RegExp(input.slice(1, -1));
}
-
var escaped = input.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
return new RegExp(escaped);
}
-
+ function isEmptyObject(obj) {
+ return Object.keys(obj).length === 0 && !obj.prototype;
+ }
+ function getObjectEntries(object) {
+ var keys = Object.keys(object);
+ var entries = [];
+ keys.forEach(function (key) {
+ return entries.push([key, object[key]]);
+ });
+ return entries;
+ }
function getNativeRegexpTest() {
return Object.getOwnPropertyDescriptor(RegExp.prototype, "test").value;
}
-
+ function shouldAbortInlineOrInjectedScript(stackMatch, stackTrace) {
+ var INLINE_SCRIPT_STRING = "inlineScript";
+ var INJECTED_SCRIPT_STRING = "injectedScript";
+ var INJECTED_SCRIPT_MARKER = "";
+ var isInlineScript = function isInlineScript(stackMatch) {
+ return stackMatch.indexOf(INLINE_SCRIPT_STRING) > -1;
+ };
+ var isInjectedScript = function isInjectedScript(stackMatch) {
+ return stackMatch.indexOf(INJECTED_SCRIPT_STRING) > -1;
+ };
+ if (!(isInlineScript(stackMatch) || isInjectedScript(stackMatch))) {
+ return false;
+ }
+ var documentURL = window.location.href;
+ var pos = documentURL.indexOf("#");
+ if (pos !== -1) {
+ documentURL = documentURL.slice(0, pos);
+ }
+ var stackSteps = stackTrace.split("\n").slice(2).map(function (line) {
+ return line.trim();
+ });
+ var stackLines = stackSteps.map(function (line) {
+ var stack;
+ var getStackTraceURL = /(.*?@)?(\S+)(:\d+):\d+\)?$/.exec(line);
+ if (getStackTraceURL) {
+ var stackURL = getStackTraceURL[2];
+ if (startsWith(stackURL, "(")) {
+ stackURL = stackURL.slice(1);
+ }
+ if (startsWith(stackURL, INJECTED_SCRIPT_MARKER)) {
+ stackURL = INJECTED_SCRIPT_STRING;
+ var stackFunction = getStackTraceURL[1] !== undefined ? getStackTraceURL[1].slice(0, -1) : line.slice(0, getStackTraceURL.index).trim();
+ if (startsWith(stackFunction, "at")) {
+ stackFunction = stackFunction.slice(2).trim();
+ }
+ stack = "".concat(stackFunction, " ").concat(stackURL).trim();
+ } else {
+ stack = stackURL;
+ }
+ } else {
+ stack = line;
+ }
+ return stack;
+ });
+ if (stackLines) {
+ for (var index = 0; index < stackLines.length; index += 1) {
+ if (isInlineScript(stackMatch) && documentURL === stackLines[index]) {
+ return true;
+ }
+ if (isInjectedScript(stackMatch) && startsWith(stackLines[index], INJECTED_SCRIPT_STRING)) {
+ return true;
+ }
+ }
+ }
+ return false;
+ }
var updatedArgs = args ? [].concat(source).concat(args) : [source];
-
try {
jsonPrune.apply(this, updatedArgs);
} catch (e) {
console.log(e);
}
}
-
function log(source, args) {
function log() {
for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
args[_key] = arguments[_key];
}
-
console.log(args);
}
-
var updatedArgs = args ? [].concat(source).concat(args) : [source];
-
try {
log.apply(this, updatedArgs);
} catch (e) {
console.log(e);
}
}
-
function logAddEventListener(source, args) {
function logAddEventListener(source) {
var nativeAddEventListener = window.EventTarget.prototype.addEventListener;
-
function addEventListenerWrapper(type, listener) {
+ var _this$constructor;
if (validateType(type) && validateListener(listener)) {
var _message = 'addEventListener("'.concat(type, '", ').concat(listenerToString(listener), ")");
-
logMessage(source, _message, true);
hit(source);
}
-
var message = "Invalid event type or listener passed to addEventListener:\ntype: ".concat(convertTypeToString(type), "\nlistener: ").concat(convertTypeToString(listener));
logMessage(source, message, true);
-
+ var context = this;
+ if (this && ((_this$constructor = this.constructor) === null || _this$constructor === void 0 ? void 0 : _this$constructor.name) === "Window" && this !== window) {
+ context = window;
+ }
for (var _len = arguments.length, args = new Array(_len > 2 ? _len - 2 : 0), _key = 2; _key < _len; _key++) {
args[_key - 2] = arguments[_key];
}
-
- return nativeAddEventListener.apply(this, [type, listener].concat(args));
+ return nativeAddEventListener.apply(context, [type, listener].concat(args));
}
-
var descriptor = {
configurable: true,
set: function set() {},
@@ -18973,71 +16009,47 @@
Object.defineProperty(window, "addEventListener", descriptor);
Object.defineProperty(document, "addEventListener", descriptor);
}
-
- function hit(source, message) {
+ function hit(source) {
if (source.verbose !== true) {
return;
}
-
try {
var log = console.log.bind(console);
var trace = console.trace.bind(console);
var prefix = source.ruleText || "";
-
if (source.domainName) {
var AG_SCRIPTLET_MARKER = "#%#//";
var UBO_SCRIPTLET_MARKER = "##+js";
var ruleStartIndex;
-
if (source.ruleText.indexOf(AG_SCRIPTLET_MARKER) > -1) {
ruleStartIndex = source.ruleText.indexOf(AG_SCRIPTLET_MARKER);
} else if (source.ruleText.indexOf(UBO_SCRIPTLET_MARKER) > -1) {
ruleStartIndex = source.ruleText.indexOf(UBO_SCRIPTLET_MARKER);
}
-
var rulePart = source.ruleText.slice(ruleStartIndex);
prefix = "".concat(source.domainName).concat(rulePart);
}
-
- var LOG_MARKER = "log: ";
-
- if (message) {
- if (message.indexOf(LOG_MARKER) === -1) {
- log("".concat(prefix, " message:\n").concat(message));
- } else {
- log(message.slice(LOG_MARKER.length));
- }
- }
-
log("".concat(prefix, " trace start"));
-
if (trace) {
trace();
}
-
log("".concat(prefix, " trace end"));
} catch (e) {}
-
if (typeof window.__debug === "function") {
window.__debug(source);
}
}
-
function validateType(type) {
return typeof type !== "undefined";
}
-
function validateListener(listener) {
return typeof listener !== "undefined" && (typeof listener === "function" || typeof listener === "object" && listener !== null && typeof listener.handleEvent === "function");
}
-
function listenerToString(listener) {
return typeof listener === "function" ? listener.toString() : listener.handleEvent.toString();
}
-
function convertTypeToString(value) {
var output;
-
if (typeof value === "undefined") {
output = "undefined";
} else if (typeof value === "object") {
@@ -19049,36 +16061,28 @@
} else {
output = value.toString();
}
-
return output;
}
-
function logMessage(source, message) {
var forced = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;
-
if (forced || source.verbose) {
console.log("".concat(source.name, ": ").concat(message));
}
}
-
function objectToString(obj) {
return isEmptyObject(obj) ? "{}" : getObjectEntries(obj).map(function (pair) {
var key = pair[0];
var value = pair[1];
var recordValueStr = value;
-
if (value instanceof Object) {
recordValueStr = "{ ".concat(objectToString(value), " }");
}
-
return "".concat(key, ':"').concat(recordValueStr, '"');
}).join(" ");
}
-
function isEmptyObject(obj) {
- return Object.keys(obj).length === 0;
+ return Object.keys(obj).length === 0 && !obj.prototype;
}
-
function getObjectEntries(object) {
var keys = Object.keys(object);
var entries = [];
@@ -19087,117 +16091,83 @@
});
return entries;
}
-
var updatedArgs = args ? [].concat(source).concat(args) : [source];
-
try {
logAddEventListener.apply(this, updatedArgs);
} catch (e) {
console.log(e);
}
}
-
function logEval(source, args) {
function logEval(source) {
var nativeEval = window.eval;
-
function evalWrapper(str) {
hit(source);
logMessage(source, 'eval("'.concat(str, '")'), true);
return nativeEval(str);
}
-
window.eval = evalWrapper;
var nativeFunction = window.Function;
-
function FunctionWrapper() {
hit(source);
-
for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
args[_key] = arguments[_key];
}
-
logMessage(source, "new Function(".concat(args.join(", "), ")"), true);
return nativeFunction.apply(this, [].concat(args));
}
-
FunctionWrapper.prototype = Object.create(nativeFunction.prototype);
FunctionWrapper.prototype.constructor = FunctionWrapper;
window.Function = FunctionWrapper;
}
-
- function hit(source, message) {
+ function hit(source) {
if (source.verbose !== true) {
return;
}
-
try {
var log = console.log.bind(console);
var trace = console.trace.bind(console);
var prefix = source.ruleText || "";
-
if (source.domainName) {
var AG_SCRIPTLET_MARKER = "#%#//";
var UBO_SCRIPTLET_MARKER = "##+js";
var ruleStartIndex;
-
if (source.ruleText.indexOf(AG_SCRIPTLET_MARKER) > -1) {
ruleStartIndex = source.ruleText.indexOf(AG_SCRIPTLET_MARKER);
} else if (source.ruleText.indexOf(UBO_SCRIPTLET_MARKER) > -1) {
ruleStartIndex = source.ruleText.indexOf(UBO_SCRIPTLET_MARKER);
}
-
var rulePart = source.ruleText.slice(ruleStartIndex);
prefix = "".concat(source.domainName).concat(rulePart);
}
-
- var LOG_MARKER = "log: ";
-
- if (message) {
- if (message.indexOf(LOG_MARKER) === -1) {
- log("".concat(prefix, " message:\n").concat(message));
- } else {
- log(message.slice(LOG_MARKER.length));
- }
- }
-
log("".concat(prefix, " trace start"));
-
if (trace) {
trace();
}
-
log("".concat(prefix, " trace end"));
} catch (e) {}
-
if (typeof window.__debug === "function") {
window.__debug(source);
}
}
-
function logMessage(source, message) {
var forced = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;
-
if (forced || source.verbose) {
console.log("".concat(source.name, ": ").concat(message));
}
}
-
var updatedArgs = args ? [].concat(source).concat(args) : [source];
-
try {
logEval.apply(this, updatedArgs);
} catch (e) {
console.log(e);
}
}
-
function logOnStacktrace(source, args) {
function logOnStacktrace(source, property) {
if (!property) {
return;
}
-
var refineStackTrace = function refineStackTrace(stackString) {
var stackSteps = stackString.split("\n").slice(2).map(function (line) {
return line.replace(/ {4}at /, "");
@@ -19207,7 +16177,6 @@
var funcFullPath;
var reg = /\(([^\)]+)\)/;
var regFirefox = /(.*?@)(\S+)(:\d+):\d+\)?$/;
-
if (line.match(reg)) {
funcName = line.split(" ").slice(0, -1).join(" ");
funcFullPath = line.match(reg)[1];
@@ -19218,7 +16187,6 @@
funcName = "function name is not available";
funcFullPath = line;
}
-
return [funcName, funcFullPath];
});
var logInfoObject = {};
@@ -19227,22 +16195,18 @@
});
return logInfoObject;
};
-
var setChainPropAccess = function setChainPropAccess(owner, property) {
var chainInfo = getPropertyInChain(owner, property);
var base = chainInfo.base;
var prop = chainInfo.prop,
- chain = chainInfo.chain;
-
+ chain = chainInfo.chain;
if (chain) {
var setter = function setter(a) {
base = a;
-
if (a instanceof Object) {
setChainPropAccess(a, chain);
}
};
-
Object.defineProperty(owner, prop, {
get: function get() {
return base;
@@ -19251,7 +16215,6 @@
});
return;
}
-
var value = base[prop];
setPropertyAccess(base, prop, {
get: function get() {
@@ -19268,22 +16231,17 @@
}
});
};
-
setChainPropAccess(window, property);
}
-
function getPropertyInChain(base, chain) {
var pos = chain.indexOf(".");
-
if (pos === -1) {
return {
base: base,
prop: chain
};
}
-
var prop = chain.slice(0, pos);
-
if (base === null) {
return {
base: base,
@@ -19291,10 +16249,8 @@
chain: chain
};
}
-
var nextBase = base[prop];
chain = chain.slice(pos + 1);
-
if ((base instanceof Object || typeof base === "object") && isEmptyObject(base)) {
return {
base: base,
@@ -19302,7 +16258,6 @@
chain: chain
};
}
-
if (nextBase === null) {
return {
base: base,
@@ -19310,11 +16265,9 @@
chain: chain
};
}
-
if (nextBase !== undefined) {
return getPropertyInChain(nextBase, chain);
}
-
Object.defineProperty(base, prop, {
configurable: true
});
@@ -19324,165 +16277,111 @@
chain: chain
};
}
-
function setPropertyAccess(object, property, descriptor) {
var currentDescriptor = Object.getOwnPropertyDescriptor(object, property);
-
if (currentDescriptor && !currentDescriptor.configurable) {
return false;
}
-
Object.defineProperty(object, property, descriptor);
return true;
}
-
- function hit(source, message) {
+ function hit(source) {
if (source.verbose !== true) {
return;
}
-
try {
var log = console.log.bind(console);
var trace = console.trace.bind(console);
var prefix = source.ruleText || "";
-
if (source.domainName) {
var AG_SCRIPTLET_MARKER = "#%#//";
var UBO_SCRIPTLET_MARKER = "##+js";
var ruleStartIndex;
-
if (source.ruleText.indexOf(AG_SCRIPTLET_MARKER) > -1) {
ruleStartIndex = source.ruleText.indexOf(AG_SCRIPTLET_MARKER);
} else if (source.ruleText.indexOf(UBO_SCRIPTLET_MARKER) > -1) {
ruleStartIndex = source.ruleText.indexOf(UBO_SCRIPTLET_MARKER);
}
-
var rulePart = source.ruleText.slice(ruleStartIndex);
prefix = "".concat(source.domainName).concat(rulePart);
}
-
- var LOG_MARKER = "log: ";
-
- if (message) {
- if (message.indexOf(LOG_MARKER) === -1) {
- log("".concat(prefix, " message:\n").concat(message));
- } else {
- log(message.slice(LOG_MARKER.length));
- }
- }
-
log("".concat(prefix, " trace start"));
-
if (trace) {
trace();
}
-
log("".concat(prefix, " trace end"));
} catch (e) {}
-
if (typeof window.__debug === "function") {
window.__debug(source);
}
}
-
function logMessage(source, message) {
var forced = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;
-
if (forced || source.verbose) {
console.log("".concat(source.name, ": ").concat(message));
}
}
-
function isEmptyObject(obj) {
- return Object.keys(obj).length === 0;
+ return Object.keys(obj).length === 0 && !obj.prototype;
}
-
var updatedArgs = args ? [].concat(source).concat(args) : [source];
-
try {
logOnStacktrace.apply(this, updatedArgs);
} catch (e) {
console.log(e);
}
}
-
function noTopics(source, args) {
function noTopics(source) {
var TOPICS_PROPERTY_NAME = "browsingTopics";
-
if (Document instanceof Object === false) {
return;
}
-
if (!Object.prototype.hasOwnProperty.call(Document.prototype, TOPICS_PROPERTY_NAME) || Document.prototype[TOPICS_PROPERTY_NAME] instanceof Function === false) {
return;
}
-
Document.prototype[TOPICS_PROPERTY_NAME] = function () {
return noopPromiseResolve("[]");
};
-
hit(source);
}
-
- function hit(source, message) {
+ function hit(source) {
if (source.verbose !== true) {
return;
}
-
try {
var log = console.log.bind(console);
var trace = console.trace.bind(console);
var prefix = source.ruleText || "";
-
if (source.domainName) {
var AG_SCRIPTLET_MARKER = "#%#//";
var UBO_SCRIPTLET_MARKER = "##+js";
var ruleStartIndex;
-
if (source.ruleText.indexOf(AG_SCRIPTLET_MARKER) > -1) {
ruleStartIndex = source.ruleText.indexOf(AG_SCRIPTLET_MARKER);
} else if (source.ruleText.indexOf(UBO_SCRIPTLET_MARKER) > -1) {
ruleStartIndex = source.ruleText.indexOf(UBO_SCRIPTLET_MARKER);
}
-
var rulePart = source.ruleText.slice(ruleStartIndex);
prefix = "".concat(source.domainName).concat(rulePart);
}
-
- var LOG_MARKER = "log: ";
-
- if (message) {
- if (message.indexOf(LOG_MARKER) === -1) {
- log("".concat(prefix, " message:\n").concat(message));
- } else {
- log(message.slice(LOG_MARKER.length));
- }
- }
-
log("".concat(prefix, " trace start"));
-
if (trace) {
trace();
}
-
log("".concat(prefix, " trace end"));
} catch (e) {}
-
if (typeof window.__debug === "function") {
window.__debug(source);
}
}
-
function noopPromiseResolve() {
var responseBody = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : "{}";
var responseUrl = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : "";
var responseType = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : "default";
-
if (typeof Response === "undefined") {
return;
}
-
var response = new Response(responseBody, {
status: 200,
statusText: "OK"
@@ -19497,101 +16396,79 @@
});
return Promise.resolve(response);
}
-
var updatedArgs = args ? [].concat(source).concat(args) : [source];
-
try {
noTopics.apply(this, updatedArgs);
} catch (e) {
console.log(e);
}
}
-
function noeval(source, args) {
function noeval(source) {
window.eval = function evalWrapper(s) {
- hit(source, "AdGuard has prevented eval:\n".concat(s));
+ hit(source);
+ logMessage(source, "AdGuard has prevented eval:\n".concat(s), true);
}.bind();
}
-
- function hit(source, message) {
+ function hit(source) {
if (source.verbose !== true) {
return;
}
-
try {
var log = console.log.bind(console);
var trace = console.trace.bind(console);
var prefix = source.ruleText || "";
-
if (source.domainName) {
var AG_SCRIPTLET_MARKER = "#%#//";
var UBO_SCRIPTLET_MARKER = "##+js";
var ruleStartIndex;
-
if (source.ruleText.indexOf(AG_SCRIPTLET_MARKER) > -1) {
ruleStartIndex = source.ruleText.indexOf(AG_SCRIPTLET_MARKER);
} else if (source.ruleText.indexOf(UBO_SCRIPTLET_MARKER) > -1) {
ruleStartIndex = source.ruleText.indexOf(UBO_SCRIPTLET_MARKER);
}
-
var rulePart = source.ruleText.slice(ruleStartIndex);
prefix = "".concat(source.domainName).concat(rulePart);
}
-
- var LOG_MARKER = "log: ";
-
- if (message) {
- if (message.indexOf(LOG_MARKER) === -1) {
- log("".concat(prefix, " message:\n").concat(message));
- } else {
- log(message.slice(LOG_MARKER.length));
- }
- }
-
log("".concat(prefix, " trace start"));
-
if (trace) {
trace();
}
-
log("".concat(prefix, " trace end"));
} catch (e) {}
-
if (typeof window.__debug === "function") {
window.__debug(source);
}
}
-
+ function logMessage(source, message) {
+ var forced = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;
+ if (forced || source.verbose) {
+ console.log("".concat(source.name, ": ").concat(message));
+ }
+ }
var updatedArgs = args ? [].concat(source).concat(args) : [source];
-
try {
noeval.apply(this, updatedArgs);
} catch (e) {
console.log(e);
}
}
-
function nowebrtc(source, args) {
function nowebrtc(source) {
var propertyName = "";
-
if (window.RTCPeerConnection) {
propertyName = "RTCPeerConnection";
} else if (window.webkitRTCPeerConnection) {
propertyName = "webkitRTCPeerConnection";
}
-
if (propertyName === "") {
return;
}
-
var rtcReplacement = function rtcReplacement(config) {
var message = "Document tried to create an RTCPeerConnection: ".concat(convertRtcConfigToString(config));
logMessage(source, message);
hit(source);
};
-
rtcReplacement.prototype = {
close: noopFunc,
createDataChannel: noopFunc,
@@ -19600,7 +16477,6 @@
};
var rtc = window[propertyName];
window[propertyName] = rtcReplacement;
-
if (rtc.prototype) {
rtc.prototype.createDataChannel = function (a, b) {
return {
@@ -19610,118 +16486,88 @@
}.bind(null);
}
}
-
- function hit(source, message) {
+ function hit(source) {
if (source.verbose !== true) {
return;
}
-
try {
var log = console.log.bind(console);
var trace = console.trace.bind(console);
var prefix = source.ruleText || "";
-
if (source.domainName) {
var AG_SCRIPTLET_MARKER = "#%#//";
var UBO_SCRIPTLET_MARKER = "##+js";
var ruleStartIndex;
-
if (source.ruleText.indexOf(AG_SCRIPTLET_MARKER) > -1) {
ruleStartIndex = source.ruleText.indexOf(AG_SCRIPTLET_MARKER);
} else if (source.ruleText.indexOf(UBO_SCRIPTLET_MARKER) > -1) {
ruleStartIndex = source.ruleText.indexOf(UBO_SCRIPTLET_MARKER);
}
-
var rulePart = source.ruleText.slice(ruleStartIndex);
prefix = "".concat(source.domainName).concat(rulePart);
}
-
- var LOG_MARKER = "log: ";
-
- if (message) {
- if (message.indexOf(LOG_MARKER) === -1) {
- log("".concat(prefix, " message:\n").concat(message));
- } else {
- log(message.slice(LOG_MARKER.length));
- }
- }
-
log("".concat(prefix, " trace start"));
-
if (trace) {
trace();
}
-
log("".concat(prefix, " trace end"));
} catch (e) {}
-
if (typeof window.__debug === "function") {
window.__debug(source);
}
}
-
function noopFunc() {}
-
function logMessage(source, message) {
var forced = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;
-
if (forced || source.verbose) {
console.log("".concat(source.name, ": ").concat(message));
}
}
-
function convertRtcConfigToString(config) {
var UNDEF_STR = "undefined";
var str = UNDEF_STR;
-
if (config === null) {
str = "null";
} else if (config instanceof Object) {
var SERVERS_PROP_NAME = "iceServers";
var URLS_PROP_NAME = "urls";
-
if (Object.prototype.hasOwnProperty.call(config, SERVERS_PROP_NAME) && Object.prototype.hasOwnProperty.call(config[SERVERS_PROP_NAME][0], URLS_PROP_NAME) && !!config[SERVERS_PROP_NAME][0][URLS_PROP_NAME]) {
str = config[SERVERS_PROP_NAME][0][URLS_PROP_NAME].toString();
}
}
-
return str;
}
-
var updatedArgs = args ? [].concat(source).concat(args) : [source];
-
try {
nowebrtc.apply(this, updatedArgs);
} catch (e) {
console.log(e);
}
}
-
function preventAddEventListener(source, args) {
function preventAddEventListener(source, typeSearch, listenerSearch) {
var typeSearchRegexp = toRegExp(typeSearch);
var listenerSearchRegexp = toRegExp(listenerSearch);
var nativeAddEventListener = window.EventTarget.prototype.addEventListener;
-
function addEventListenerWrapper(type, listener) {
+ var _this$constructor;
var shouldPrevent = false;
-
if (validateType(type) && validateListener(listener)) {
shouldPrevent = typeSearchRegexp.test(type.toString()) && listenerSearchRegexp.test(listenerToString(listener));
}
-
if (shouldPrevent) {
hit(source);
return undefined;
}
-
+ var context = this;
+ if (this && ((_this$constructor = this.constructor) === null || _this$constructor === void 0 ? void 0 : _this$constructor.name) === "Window" && this !== window) {
+ context = window;
+ }
for (var _len = arguments.length, args = new Array(_len > 2 ? _len - 2 : 0), _key = 2; _key < _len; _key++) {
args[_key - 2] = arguments[_key];
}
-
- return nativeAddEventListener.apply(this, [type, listener].concat(args));
+ return nativeAddEventListener.apply(context, [type, listener].concat(args));
}
-
var descriptor = {
configurable: true,
set: function set() {},
@@ -19733,104 +16579,73 @@
Object.defineProperty(window, "addEventListener", descriptor);
Object.defineProperty(document, "addEventListener", descriptor);
}
-
- function hit(source, message) {
+ function hit(source) {
if (source.verbose !== true) {
return;
}
-
try {
var log = console.log.bind(console);
var trace = console.trace.bind(console);
var prefix = source.ruleText || "";
-
if (source.domainName) {
var AG_SCRIPTLET_MARKER = "#%#//";
var UBO_SCRIPTLET_MARKER = "##+js";
var ruleStartIndex;
-
if (source.ruleText.indexOf(AG_SCRIPTLET_MARKER) > -1) {
ruleStartIndex = source.ruleText.indexOf(AG_SCRIPTLET_MARKER);
} else if (source.ruleText.indexOf(UBO_SCRIPTLET_MARKER) > -1) {
ruleStartIndex = source.ruleText.indexOf(UBO_SCRIPTLET_MARKER);
}
-
var rulePart = source.ruleText.slice(ruleStartIndex);
prefix = "".concat(source.domainName).concat(rulePart);
}
-
- var LOG_MARKER = "log: ";
-
- if (message) {
- if (message.indexOf(LOG_MARKER) === -1) {
- log("".concat(prefix, " message:\n").concat(message));
- } else {
- log(message.slice(LOG_MARKER.length));
- }
- }
-
log("".concat(prefix, " trace start"));
-
if (trace) {
trace();
}
-
log("".concat(prefix, " trace end"));
} catch (e) {}
-
if (typeof window.__debug === "function") {
window.__debug(source);
}
}
-
function toRegExp() {
var input = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : "";
var DEFAULT_VALUE = ".?";
var FORWARD_SLASH = "/";
-
if (input === "") {
return new RegExp(DEFAULT_VALUE);
}
-
if (input[0] === FORWARD_SLASH && input[input.length - 1] === FORWARD_SLASH) {
return new RegExp(input.slice(1, -1));
}
-
var escaped = input.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
return new RegExp(escaped);
}
-
function validateType(type) {
return typeof type !== "undefined";
}
-
function validateListener(listener) {
return typeof listener !== "undefined" && (typeof listener === "function" || typeof listener === "object" && listener !== null && typeof listener.handleEvent === "function");
}
-
function listenerToString(listener) {
return typeof listener === "function" ? listener.toString() : listener.handleEvent.toString();
}
-
var updatedArgs = args ? [].concat(source).concat(args) : [source];
-
try {
preventAddEventListener.apply(this, updatedArgs);
} catch (e) {
console.log(e);
}
}
-
function preventAdfly(source, args) {
function preventAdfly(source) {
var isDigit = function isDigit(data) {
return /^\d$/.test(data);
};
-
var handler = function handler(encodedURL) {
var evenChars = "";
var oddChars = "";
-
for (var i = 0; i < encodedURL.length; i += 1) {
if (i % 2 === 0) {
evenChars += encodedURL.charAt(i);
@@ -19838,37 +16653,29 @@
oddChars = encodedURL.charAt(i) + oddChars;
}
}
-
var data = (evenChars + oddChars).split("");
-
for (var _i = 0; _i < data.length; _i += 1) {
if (isDigit(data[_i])) {
for (var ii = _i + 1; ii < data.length; ii += 1) {
if (isDigit(data[ii])) {
var temp = parseInt(data[_i], 10) ^ parseInt(data[ii], 10);
-
if (temp < 10) {
data[_i] = temp.toString();
}
-
_i = ii;
break;
}
}
}
}
-
data = data.join("");
var decodedURL = window.atob(data).slice(16, -16);
-
if (window.stop) {
window.stop();
}
-
window.onbeforeunload = null;
window.location.href = decodedURL;
};
-
var val;
var applyHandler = true;
var result = setPropertyAccess(window, "ysmm", {
@@ -19876,246 +16683,175 @@
set: function set(value) {
if (applyHandler) {
applyHandler = false;
-
try {
if (typeof value === "string") {
handler(value);
}
} catch (err) {}
}
-
val = value;
},
get: function get() {
return val;
}
});
-
if (result) {
hit(source);
} else {
logMessage(source, "Failed to set up prevent-adfly scriptlet");
}
}
-
function setPropertyAccess(object, property, descriptor) {
var currentDescriptor = Object.getOwnPropertyDescriptor(object, property);
-
if (currentDescriptor && !currentDescriptor.configurable) {
return false;
}
-
Object.defineProperty(object, property, descriptor);
return true;
}
-
- function hit(source, message) {
+ function hit(source) {
if (source.verbose !== true) {
return;
}
-
try {
var log = console.log.bind(console);
var trace = console.trace.bind(console);
var prefix = source.ruleText || "";
-
if (source.domainName) {
var AG_SCRIPTLET_MARKER = "#%#//";
var UBO_SCRIPTLET_MARKER = "##+js";
var ruleStartIndex;
-
if (source.ruleText.indexOf(AG_SCRIPTLET_MARKER) > -1) {
ruleStartIndex = source.ruleText.indexOf(AG_SCRIPTLET_MARKER);
} else if (source.ruleText.indexOf(UBO_SCRIPTLET_MARKER) > -1) {
ruleStartIndex = source.ruleText.indexOf(UBO_SCRIPTLET_MARKER);
}
-
var rulePart = source.ruleText.slice(ruleStartIndex);
prefix = "".concat(source.domainName).concat(rulePart);
}
-
- var LOG_MARKER = "log: ";
-
- if (message) {
- if (message.indexOf(LOG_MARKER) === -1) {
- log("".concat(prefix, " message:\n").concat(message));
- } else {
- log(message.slice(LOG_MARKER.length));
- }
- }
-
log("".concat(prefix, " trace start"));
-
if (trace) {
trace();
}
-
log("".concat(prefix, " trace end"));
} catch (e) {}
-
if (typeof window.__debug === "function") {
window.__debug(source);
}
}
-
function logMessage(source, message) {
var forced = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;
-
if (forced || source.verbose) {
console.log("".concat(source.name, ": ").concat(message));
}
}
-
var updatedArgs = args ? [].concat(source).concat(args) : [source];
-
try {
preventAdfly.apply(this, updatedArgs);
} catch (e) {
console.log(e);
}
}
-
function preventBab(source, args) {
function preventBab(source) {
var nativeSetTimeout = window.setTimeout;
var babRegex = /\.bab_elementid.$/;
-
var timeoutWrapper = function timeoutWrapper(callback) {
if (typeof callback !== "string" || !babRegex.test(callback)) {
for (var _len = arguments.length, args = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {
args[_key - 1] = arguments[_key];
}
-
return nativeSetTimeout.apply(window, [callback].concat(args));
}
-
hit(source);
};
-
window.setTimeout = timeoutWrapper;
var signatures = [["blockadblock"], ["babasbm"], [/getItem\('babn'\)/], ["getElementById", "String.fromCharCode", "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789", "charAt", "DOMContentLoaded", "AdBlock", "addEventListener", "doScroll", "fromCharCode", "<<2|r>>4", "sessionStorage", "clientWidth", "localStorage", "Math", "random"]];
-
var check = function check(str) {
if (typeof str !== "string") {
return false;
}
-
for (var i = 0; i < signatures.length; i += 1) {
var tokens = signatures[i];
var match = 0;
-
for (var j = 0; j < tokens.length; j += 1) {
var token = tokens[j];
var found = token instanceof RegExp ? token.test(str) : str.indexOf(token) > -1;
-
if (found) {
match += 1;
}
}
-
if (match / tokens.length >= .8) {
return true;
}
}
-
return false;
};
-
var nativeEval = window.eval;
-
var evalWrapper = function evalWrapper(str) {
if (!check(str)) {
return nativeEval(str);
}
-
hit(source);
var bodyEl = document.body;
-
if (bodyEl) {
bodyEl.style.removeProperty("visibility");
}
-
var el = document.getElementById("babasbmsgx");
-
if (el) {
el.parentNode.removeChild(el);
}
};
-
window.eval = evalWrapper.bind(window);
}
-
- function hit(source, message) {
+ function hit(source) {
if (source.verbose !== true) {
return;
}
-
try {
var log = console.log.bind(console);
var trace = console.trace.bind(console);
var prefix = source.ruleText || "";
-
if (source.domainName) {
var AG_SCRIPTLET_MARKER = "#%#//";
var UBO_SCRIPTLET_MARKER = "##+js";
var ruleStartIndex;
-
if (source.ruleText.indexOf(AG_SCRIPTLET_MARKER) > -1) {
ruleStartIndex = source.ruleText.indexOf(AG_SCRIPTLET_MARKER);
} else if (source.ruleText.indexOf(UBO_SCRIPTLET_MARKER) > -1) {
ruleStartIndex = source.ruleText.indexOf(UBO_SCRIPTLET_MARKER);
}
-
var rulePart = source.ruleText.slice(ruleStartIndex);
prefix = "".concat(source.domainName).concat(rulePart);
}
-
- var LOG_MARKER = "log: ";
-
- if (message) {
- if (message.indexOf(LOG_MARKER) === -1) {
- log("".concat(prefix, " message:\n").concat(message));
- } else {
- log(message.slice(LOG_MARKER.length));
- }
- }
-
log("".concat(prefix, " trace start"));
-
if (trace) {
trace();
}
-
log("".concat(prefix, " trace end"));
} catch (e) {}
-
if (typeof window.__debug === "function") {
window.__debug(source);
}
}
-
var updatedArgs = args ? [].concat(source).concat(args) : [source];
-
try {
preventBab.apply(this, updatedArgs);
} catch (e) {
console.log(e);
}
}
-
function preventElementSrcLoading(source, args) {
function preventElementSrcLoading(source, tagName, match) {
if (typeof Proxy === "undefined" || typeof Reflect === "undefined") {
return;
}
-
var srcMockData = {
script: "data:text/javascript;base64,KCk9Pnt9",
img: "data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==",
iframe: "data:text/html;base64, PGRpdj48L2Rpdj4="
};
var instance;
-
if (tagName === "script") {
instance = HTMLScriptElement;
} else if (tagName === "img") {
@@ -20125,55 +16861,44 @@
} else {
return;
}
-
var hasTrustedTypes = window.trustedTypes && typeof window.trustedTypes.createPolicy === "function";
var policy;
-
if (hasTrustedTypes) {
- policy = window.trustedTypes.createPolicy("mock", {
+ policy = window.trustedTypes.createPolicy("AGPolicy", {
createScriptURL: function createScriptURL(arg) {
return arg;
}
});
}
-
var SOURCE_PROPERTY_NAME = "src";
var ONERROR_PROPERTY_NAME = "onerror";
var searchRegexp = toRegExp(match);
-
var setMatchedAttribute = function setMatchedAttribute(elem) {
return elem.setAttribute(source.name, "matched");
};
-
var setAttributeWrapper = function setAttributeWrapper(target, thisArg, args) {
if (!args[0] || !args[1]) {
return Reflect.apply(target, thisArg, args);
}
-
var nodeName = thisArg.nodeName.toLowerCase();
var attrName = args[0].toLowerCase();
var attrValue = args[1];
var isMatched = attrName === SOURCE_PROPERTY_NAME && tagName.toLowerCase() === nodeName && srcMockData[nodeName] && searchRegexp.test(attrValue);
-
if (!isMatched) {
return Reflect.apply(target, thisArg, args);
}
-
hit(source);
setMatchedAttribute(thisArg);
return Reflect.apply(target, thisArg, [attrName, srcMockData[nodeName]]);
};
-
var setAttributeHandler = {
apply: setAttributeWrapper
};
instance.prototype.setAttribute = new Proxy(Element.prototype.setAttribute, setAttributeHandler);
var origSrcDescriptor = safeGetDescriptor(instance.prototype, SOURCE_PROPERTY_NAME);
-
if (!origSrcDescriptor) {
return;
}
-
Object.defineProperty(instance.prototype, SOURCE_PROPERTY_NAME, {
enumerable: true,
configurable: true,
@@ -20183,30 +16908,25 @@
set: function set(urlValue) {
var nodeName = this.nodeName.toLowerCase();
var isMatched = tagName.toLowerCase() === nodeName && srcMockData[nodeName] && searchRegexp.test(urlValue);
-
if (!isMatched) {
origSrcDescriptor.set.call(this, urlValue);
return true;
}
-
if (policy && urlValue instanceof TrustedScriptURL) {
var trustedSrc = policy.createScriptURL(urlValue);
origSrcDescriptor.set.call(this, trustedSrc);
hit(source);
return;
}
-
setMatchedAttribute(this);
origSrcDescriptor.set.call(this, srcMockData[nodeName]);
hit(source);
}
});
var origOnerrorDescriptor = safeGetDescriptor(HTMLElement.prototype, ONERROR_PROPERTY_NAME);
-
if (!origOnerrorDescriptor) {
return;
}
-
Object.defineProperty(HTMLElement.prototype, ONERROR_PROPERTY_NAME, {
enumerable: true,
configurable: true,
@@ -20215,240 +16935,168 @@
},
set: function set(cb) {
var isMatched = this.getAttribute(source.name) === "matched";
-
if (!isMatched) {
origOnerrorDescriptor.set.call(this, cb);
return true;
}
-
origOnerrorDescriptor.set.call(this, noopFunc);
return true;
}
});
-
var addEventListenerWrapper = function addEventListenerWrapper(target, thisArg, args) {
if (!args[0] || !args[1]) {
return Reflect.apply(target, thisArg, args);
}
-
var eventName = args[0];
- var isMatched = thisArg.getAttribute(source.name) === "matched" && eventName === "error";
-
+ var isMatched = typeof thisArg.getAttribute === "function" && thisArg.getAttribute(source.name) === "matched" && eventName === "error";
if (isMatched) {
return Reflect.apply(target, thisArg, [eventName, noopFunc]);
}
-
return Reflect.apply(target, thisArg, args);
};
-
var addEventListenerHandler = {
apply: addEventListenerWrapper
};
EventTarget.prototype.addEventListener = new Proxy(EventTarget.prototype.addEventListener, addEventListenerHandler);
}
-
- function hit(source, message) {
+ function hit(source) {
if (source.verbose !== true) {
return;
}
-
try {
var log = console.log.bind(console);
var trace = console.trace.bind(console);
var prefix = source.ruleText || "";
-
if (source.domainName) {
var AG_SCRIPTLET_MARKER = "#%#//";
var UBO_SCRIPTLET_MARKER = "##+js";
var ruleStartIndex;
-
if (source.ruleText.indexOf(AG_SCRIPTLET_MARKER) > -1) {
ruleStartIndex = source.ruleText.indexOf(AG_SCRIPTLET_MARKER);
} else if (source.ruleText.indexOf(UBO_SCRIPTLET_MARKER) > -1) {
ruleStartIndex = source.ruleText.indexOf(UBO_SCRIPTLET_MARKER);
}
-
var rulePart = source.ruleText.slice(ruleStartIndex);
prefix = "".concat(source.domainName).concat(rulePart);
}
-
- var LOG_MARKER = "log: ";
-
- if (message) {
- if (message.indexOf(LOG_MARKER) === -1) {
- log("".concat(prefix, " message:\n").concat(message));
- } else {
- log(message.slice(LOG_MARKER.length));
- }
- }
-
log("".concat(prefix, " trace start"));
-
if (trace) {
trace();
}
-
log("".concat(prefix, " trace end"));
} catch (e) {}
-
if (typeof window.__debug === "function") {
window.__debug(source);
}
}
-
function toRegExp() {
var input = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : "";
var DEFAULT_VALUE = ".?";
var FORWARD_SLASH = "/";
-
if (input === "") {
return new RegExp(DEFAULT_VALUE);
}
-
if (input[0] === FORWARD_SLASH && input[input.length - 1] === FORWARD_SLASH) {
return new RegExp(input.slice(1, -1));
}
-
var escaped = input.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
return new RegExp(escaped);
}
-
function safeGetDescriptor(obj, prop) {
var descriptor = Object.getOwnPropertyDescriptor(obj, prop);
-
if (descriptor && descriptor.configurable) {
return descriptor;
}
-
return null;
}
-
function noopFunc() {}
-
var updatedArgs = args ? [].concat(source).concat(args) : [source];
-
try {
preventElementSrcLoading.apply(this, updatedArgs);
} catch (e) {
console.log(e);
}
}
-
function preventEvalIf(source, args) {
function preventEvalIf(source, search) {
var searchRegexp = toRegExp(search);
var nativeEval = window.eval;
-
window.eval = function (payload) {
if (!searchRegexp.test(payload.toString())) {
return nativeEval.call(window, payload);
}
-
- hit(source, payload);
+ hit(source);
return undefined;
}.bind(window);
}
-
function toRegExp() {
var input = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : "";
var DEFAULT_VALUE = ".?";
var FORWARD_SLASH = "/";
-
if (input === "") {
return new RegExp(DEFAULT_VALUE);
}
-
if (input[0] === FORWARD_SLASH && input[input.length - 1] === FORWARD_SLASH) {
return new RegExp(input.slice(1, -1));
}
-
var escaped = input.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
return new RegExp(escaped);
}
-
- function hit(source, message) {
+ function hit(source) {
if (source.verbose !== true) {
return;
}
-
try {
var log = console.log.bind(console);
var trace = console.trace.bind(console);
var prefix = source.ruleText || "";
-
if (source.domainName) {
var AG_SCRIPTLET_MARKER = "#%#//";
var UBO_SCRIPTLET_MARKER = "##+js";
var ruleStartIndex;
-
if (source.ruleText.indexOf(AG_SCRIPTLET_MARKER) > -1) {
ruleStartIndex = source.ruleText.indexOf(AG_SCRIPTLET_MARKER);
} else if (source.ruleText.indexOf(UBO_SCRIPTLET_MARKER) > -1) {
ruleStartIndex = source.ruleText.indexOf(UBO_SCRIPTLET_MARKER);
}
-
var rulePart = source.ruleText.slice(ruleStartIndex);
prefix = "".concat(source.domainName).concat(rulePart);
}
-
- var LOG_MARKER = "log: ";
-
- if (message) {
- if (message.indexOf(LOG_MARKER) === -1) {
- log("".concat(prefix, " message:\n").concat(message));
- } else {
- log(message.slice(LOG_MARKER.length));
- }
- }
-
log("".concat(prefix, " trace start"));
-
if (trace) {
trace();
}
-
log("".concat(prefix, " trace end"));
} catch (e) {}
-
if (typeof window.__debug === "function") {
window.__debug(source);
}
}
-
var updatedArgs = args ? [].concat(source).concat(args) : [source];
-
try {
preventEvalIf.apply(this, updatedArgs);
} catch (e) {
console.log(e);
}
}
-
function preventFab(source, args) {
function preventFab(source) {
hit(source);
-
var Fab = function Fab() {};
-
Fab.prototype.check = noopFunc;
Fab.prototype.clearEvent = noopFunc;
Fab.prototype.emitEvent = noopFunc;
-
Fab.prototype.on = function (a, b) {
if (!a) {
b();
}
-
return this;
};
-
Fab.prototype.onDetected = noopThis;
-
Fab.prototype.onNotDetected = function (a) {
a();
return this;
};
-
Fab.prototype.setOption = noopFunc;
Fab.prototype.options = {
set: noopFunc,
@@ -20467,212 +17115,151 @@
},
set: function set() {}
};
-
if (Object.prototype.hasOwnProperty.call(window, "FuckAdBlock")) {
window.FuckAdBlock = Fab;
} else {
Object.defineProperty(window, "FuckAdBlock", getSetFab);
}
-
if (Object.prototype.hasOwnProperty.call(window, "BlockAdBlock")) {
window.BlockAdBlock = Fab;
} else {
Object.defineProperty(window, "BlockAdBlock", getSetFab);
}
-
if (Object.prototype.hasOwnProperty.call(window, "SniffAdBlock")) {
window.SniffAdBlock = Fab;
} else {
Object.defineProperty(window, "SniffAdBlock", getSetFab);
}
-
if (Object.prototype.hasOwnProperty.call(window, "fuckAdBlock")) {
window.fuckAdBlock = fab;
} else {
Object.defineProperty(window, "fuckAdBlock", getsetfab);
}
-
if (Object.prototype.hasOwnProperty.call(window, "blockAdBlock")) {
window.blockAdBlock = fab;
} else {
Object.defineProperty(window, "blockAdBlock", getsetfab);
}
-
if (Object.prototype.hasOwnProperty.call(window, "sniffAdBlock")) {
window.sniffAdBlock = fab;
} else {
Object.defineProperty(window, "sniffAdBlock", getsetfab);
}
}
-
- function hit(source, message) {
+ function hit(source) {
if (source.verbose !== true) {
return;
}
-
try {
var log = console.log.bind(console);
var trace = console.trace.bind(console);
var prefix = source.ruleText || "";
-
if (source.domainName) {
var AG_SCRIPTLET_MARKER = "#%#//";
var UBO_SCRIPTLET_MARKER = "##+js";
var ruleStartIndex;
-
if (source.ruleText.indexOf(AG_SCRIPTLET_MARKER) > -1) {
ruleStartIndex = source.ruleText.indexOf(AG_SCRIPTLET_MARKER);
} else if (source.ruleText.indexOf(UBO_SCRIPTLET_MARKER) > -1) {
ruleStartIndex = source.ruleText.indexOf(UBO_SCRIPTLET_MARKER);
}
-
var rulePart = source.ruleText.slice(ruleStartIndex);
prefix = "".concat(source.domainName).concat(rulePart);
}
-
- var LOG_MARKER = "log: ";
-
- if (message) {
- if (message.indexOf(LOG_MARKER) === -1) {
- log("".concat(prefix, " message:\n").concat(message));
- } else {
- log(message.slice(LOG_MARKER.length));
- }
- }
-
log("".concat(prefix, " trace start"));
-
if (trace) {
trace();
}
-
log("".concat(prefix, " trace end"));
} catch (e) {}
-
if (typeof window.__debug === "function") {
window.__debug(source);
}
}
-
function noopFunc() {}
-
function noopThis() {
return this;
}
-
var updatedArgs = args ? [].concat(source).concat(args) : [source];
-
try {
preventFab.apply(this, updatedArgs);
} catch (e) {
console.log(e);
}
}
-
function preventFetch(source, args) {
function preventFetch(source, propsToMatch) {
var responseBody = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : "emptyObj";
var responseType = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : "default";
-
if (typeof fetch === "undefined" || typeof Proxy === "undefined" || typeof Response === "undefined") {
return;
}
-
var strResponseBody;
-
- if (responseBody === "emptyObj") {
+ if (responseBody === "" || responseBody === "emptyObj") {
strResponseBody = "{}";
} else if (responseBody === "emptyArr") {
strResponseBody = "[]";
} else {
return;
}
-
if (!(responseType === "default" || responseType === "opaque")) {
logMessage(source, "Invalid parameter: ".concat(responseType));
return;
}
-
var handlerWrapper = function handlerWrapper(target, thisArg, args) {
var shouldPrevent = false;
var fetchData = getFetchData(args);
-
if (typeof propsToMatch === "undefined") {
logMessage(source, "fetch( ".concat(objectToString(fetchData), " )"), true);
hit(source);
return Reflect.apply(target, thisArg, args);
}
-
shouldPrevent = matchRequestProps(source, propsToMatch, fetchData);
-
if (shouldPrevent) {
hit(source);
return noopPromiseResolve(strResponseBody, fetchData.url, responseType);
}
-
return Reflect.apply(target, thisArg, args);
};
-
var fetchHandler = {
apply: handlerWrapper
};
fetch = new Proxy(fetch, fetchHandler);
}
-
- function hit(source, message) {
+ function hit(source) {
if (source.verbose !== true) {
return;
}
-
try {
var log = console.log.bind(console);
var trace = console.trace.bind(console);
var prefix = source.ruleText || "";
-
if (source.domainName) {
var AG_SCRIPTLET_MARKER = "#%#//";
var UBO_SCRIPTLET_MARKER = "##+js";
var ruleStartIndex;
-
if (source.ruleText.indexOf(AG_SCRIPTLET_MARKER) > -1) {
ruleStartIndex = source.ruleText.indexOf(AG_SCRIPTLET_MARKER);
} else if (source.ruleText.indexOf(UBO_SCRIPTLET_MARKER) > -1) {
ruleStartIndex = source.ruleText.indexOf(UBO_SCRIPTLET_MARKER);
}
-
var rulePart = source.ruleText.slice(ruleStartIndex);
prefix = "".concat(source.domainName).concat(rulePart);
}
-
- var LOG_MARKER = "log: ";
-
- if (message) {
- if (message.indexOf(LOG_MARKER) === -1) {
- log("".concat(prefix, " message:\n").concat(message));
- } else {
- log(message.slice(LOG_MARKER.length));
- }
- }
-
log("".concat(prefix, " trace start"));
-
if (trace) {
trace();
}
-
log("".concat(prefix, " trace end"));
} catch (e) {}
-
if (typeof window.__debug === "function") {
window.__debug(source);
}
}
-
function getFetchData(args) {
var fetchPropsObj = {};
var fetchUrl;
var fetchInit;
-
if (args[0] instanceof Request) {
var requestData = getRequestData(args[0]);
fetchUrl = requestData.url;
@@ -20681,41 +17268,32 @@
fetchUrl = args[0];
fetchInit = args[1];
}
-
fetchPropsObj.url = fetchUrl;
-
if (fetchInit instanceof Object) {
Object.keys(fetchInit).forEach(function (prop) {
fetchPropsObj[prop] = fetchInit[prop];
});
}
-
return fetchPropsObj;
}
-
function objectToString(obj) {
return isEmptyObject(obj) ? "{}" : getObjectEntries(obj).map(function (pair) {
var key = pair[0];
var value = pair[1];
var recordValueStr = value;
-
if (value instanceof Object) {
recordValueStr = "{ ".concat(objectToString(value), " }");
}
-
return "".concat(key, ':"').concat(recordValueStr, '"');
}).join(" ");
}
-
function noopPromiseResolve() {
var responseBody = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : "{}";
var responseUrl = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : "";
var responseType = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : "default";
-
if (typeof Response === "undefined") {
return;
}
-
var response = new Response(responseBody, {
status: 200,
statusText: "OK"
@@ -20730,15 +17308,12 @@
});
return Promise.resolve(response);
}
-
function matchRequestProps(source, propsToMatch, requestData) {
if (propsToMatch === "" || propsToMatch === "*") {
return true;
}
-
var isMatched;
var parsedData = parseMatchProps(propsToMatch);
-
if (!validateParsedData(parsedData)) {
logMessage(source, "Invalid parameter: ".concat(propsToMatch));
isMatched = false;
@@ -20749,63 +17324,48 @@
return Object.prototype.hasOwnProperty.call(requestData, matchKey) && matchValue.test(requestData[matchKey]);
});
}
-
return isMatched;
}
-
function logMessage(source, message) {
var forced = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;
-
if (forced || source.verbose) {
console.log("".concat(source.name, ": ").concat(message));
}
}
-
function toRegExp() {
var input = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : "";
var DEFAULT_VALUE = ".?";
var FORWARD_SLASH = "/";
-
if (input === "") {
return new RegExp(DEFAULT_VALUE);
}
-
if (input[0] === FORWARD_SLASH && input[input.length - 1] === FORWARD_SLASH) {
return new RegExp(input.slice(1, -1));
}
-
var escaped = input.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
return new RegExp(escaped);
}
-
function isValidStrPattern(input) {
var FORWARD_SLASH = "/";
var str = escapeRegExp(input);
-
if (input[0] === FORWARD_SLASH && input[input.length - 1] === FORWARD_SLASH) {
str = input.slice(1, -1);
}
-
var isValid;
-
try {
isValid = new RegExp(str);
isValid = true;
} catch (e) {
isValid = false;
}
-
return isValid;
}
-
function escapeRegExp(str) {
return str.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
}
-
function isEmptyObject(obj) {
- return Object.keys(obj).length === 0;
+ return Object.keys(obj).length === 0 && !obj.prototype;
}
-
function getRequestData(request) {
var requestInitOptions = getRequestProps();
var entries = requestInitOptions.map(function (key) {
@@ -20814,7 +17374,9 @@
});
return getObjectFromEntries(entries);
}
-
+ function getRequestProps() {
+ return ["url", "method", "headers", "body", "mode", "credentials", "cache", "redirect", "referrer", "referrerPolicy", "integrity", "keepalive", "signal"];
+ }
function getObjectEntries(object) {
var keys = Object.keys(object);
var entries = [];
@@ -20823,7 +17385,6 @@
});
return entries;
}
-
function getObjectFromEntries(entries) {
var output = entries.reduce(function (acc, el) {
var key = el[0];
@@ -20833,7 +17394,6 @@
}, {});
return output;
}
-
function parseMatchProps(propsToMatchStr) {
var PROPS_DIVIDER = " ";
var PAIRS_MARKER = ":";
@@ -20844,7 +17404,6 @@
var dividerInd = prop.indexOf(PAIRS_MARKER);
var key = prop.slice(0, dividerInd);
var hasLegalMatchProp = LEGAL_MATCH_PROPS.indexOf(key) !== -1;
-
if (hasLegalMatchProp) {
var value = prop.slice(dividerInd + 1);
propsObj[key] = value;
@@ -20854,13 +17413,11 @@
});
return propsObj;
}
-
function validateParsedData(data) {
return Object.values(data).every(function (value) {
return isValidStrPattern(value);
});
}
-
function getMatchPropsData(data) {
var matchData = {};
Object.keys(data).forEach(function (key) {
@@ -20868,24 +17425,19 @@
});
return matchData;
}
-
var updatedArgs = args ? [].concat(source).concat(args) : [source];
-
try {
preventFetch.apply(this, updatedArgs);
} catch (e) {
console.log(e);
}
}
-
function preventPopadsNet(source, args) {
function preventPopadsNet(source) {
var rid = randomId();
-
var throwError = function throwError() {
throw new ReferenceError(rid);
};
-
delete window.PopAds;
delete window.popns;
Object.defineProperties(window, {
@@ -20899,93 +17451,65 @@
window.onerror = createOnErrorHandler(rid).bind();
hit(source);
}
-
function createOnErrorHandler(rid) {
var nativeOnError = window.onerror;
return function onError(error) {
if (typeof error === "string" && error.indexOf(rid) !== -1) {
return true;
}
-
if (nativeOnError instanceof Function) {
for (var _len = arguments.length, args = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {
args[_key - 1] = arguments[_key];
}
-
return nativeOnError.apply(this, [error].concat(args));
}
-
return false;
};
}
-
function randomId() {
- return Math.random().toString(36).substr(2, 9);
+ return Math.random().toString(36).slice(2, 9);
}
-
- function hit(source, message) {
+ function hit(source) {
if (source.verbose !== true) {
return;
}
-
try {
var log = console.log.bind(console);
var trace = console.trace.bind(console);
var prefix = source.ruleText || "";
-
if (source.domainName) {
var AG_SCRIPTLET_MARKER = "#%#//";
var UBO_SCRIPTLET_MARKER = "##+js";
var ruleStartIndex;
-
if (source.ruleText.indexOf(AG_SCRIPTLET_MARKER) > -1) {
ruleStartIndex = source.ruleText.indexOf(AG_SCRIPTLET_MARKER);
} else if (source.ruleText.indexOf(UBO_SCRIPTLET_MARKER) > -1) {
ruleStartIndex = source.ruleText.indexOf(UBO_SCRIPTLET_MARKER);
}
-
var rulePart = source.ruleText.slice(ruleStartIndex);
prefix = "".concat(source.domainName).concat(rulePart);
}
-
- var LOG_MARKER = "log: ";
-
- if (message) {
- if (message.indexOf(LOG_MARKER) === -1) {
- log("".concat(prefix, " message:\n").concat(message));
- } else {
- log(message.slice(LOG_MARKER.length));
- }
- }
-
log("".concat(prefix, " trace start"));
-
if (trace) {
trace();
}
-
log("".concat(prefix, " trace end"));
} catch (e) {}
-
if (typeof window.__debug === "function") {
window.__debug(source);
}
}
-
var updatedArgs = args ? [].concat(source).concat(args) : [source];
-
try {
preventPopadsNet.apply(this, updatedArgs);
} catch (e) {
console.log(e);
}
}
-
function preventRefresh(source, args) {
function preventRefresh(source, delaySec) {
var getMetaElements = function getMetaElements() {
var metaNodes = [];
-
try {
metaNodes = document.querySelectorAll('meta[http-equiv="refresh" i][content]');
} catch (e) {
@@ -20995,67 +17519,52 @@
logMessage(source, e);
}
}
-
return Array.from(metaNodes);
};
-
var getMetaContentDelay = function getMetaContentDelay(metaElements) {
var delays = metaElements.map(function (meta) {
var contentString = meta.getAttribute("content");
-
if (contentString.length === 0) {
return null;
}
-
var contentDelay;
var limiterIndex = contentString.indexOf(";");
-
if (limiterIndex !== -1) {
var delaySubstring = contentString.substring(0, limiterIndex);
contentDelay = getNumberFromString(delaySubstring);
} else {
contentDelay = getNumberFromString(contentString);
}
-
return contentDelay;
}).filter(function (delay) {
return delay !== null;
});
-
if (!delays.length) {
return null;
}
-
var minDelay = delays.reduce(function (a, b) {
return Math.min(a, b);
});
return minDelay;
};
-
var stop = function stop() {
var metaElements = getMetaElements();
-
if (metaElements.length === 0) {
return;
}
-
var secondsToRun = getNumberFromString(delaySec);
-
if (secondsToRun === null) {
secondsToRun = getMetaContentDelay(metaElements);
}
-
if (secondsToRun === null) {
return;
}
-
var delayMs = secondsToRun * 1e3;
setTimeout(function () {
window.stop();
hit(source);
}, delayMs);
};
-
if (document.readyState === "loading") {
document.addEventListener("DOMContentLoaded", stop, {
once: true
@@ -21064,169 +17573,115 @@
stop();
}
}
-
- function hit(source, message) {
+ function hit(source) {
if (source.verbose !== true) {
return;
}
-
try {
var log = console.log.bind(console);
var trace = console.trace.bind(console);
var prefix = source.ruleText || "";
-
if (source.domainName) {
var AG_SCRIPTLET_MARKER = "#%#//";
var UBO_SCRIPTLET_MARKER = "##+js";
var ruleStartIndex;
-
if (source.ruleText.indexOf(AG_SCRIPTLET_MARKER) > -1) {
ruleStartIndex = source.ruleText.indexOf(AG_SCRIPTLET_MARKER);
} else if (source.ruleText.indexOf(UBO_SCRIPTLET_MARKER) > -1) {
ruleStartIndex = source.ruleText.indexOf(UBO_SCRIPTLET_MARKER);
}
-
var rulePart = source.ruleText.slice(ruleStartIndex);
prefix = "".concat(source.domainName).concat(rulePart);
}
-
- var LOG_MARKER = "log: ";
-
- if (message) {
- if (message.indexOf(LOG_MARKER) === -1) {
- log("".concat(prefix, " message:\n").concat(message));
- } else {
- log(message.slice(LOG_MARKER.length));
- }
- }
-
log("".concat(prefix, " trace start"));
-
if (trace) {
trace();
}
-
log("".concat(prefix, " trace end"));
} catch (e) {}
-
if (typeof window.__debug === "function") {
window.__debug(source);
}
}
-
function getNumberFromString(rawString) {
var parsedDelay = parseInt(rawString, 10);
var validDelay = nativeIsNaN(parsedDelay) ? null : parsedDelay;
return validDelay;
}
-
function logMessage(source, message) {
var forced = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;
-
if (forced || source.verbose) {
console.log("".concat(source.name, ": ").concat(message));
}
}
-
function nativeIsNaN(num) {
var native = Number.isNaN || window.isNaN;
return native(num);
}
-
var updatedArgs = args ? [].concat(source).concat(args) : [source];
-
try {
preventRefresh.apply(this, updatedArgs);
} catch (e) {
console.log(e);
}
}
-
function preventRequestAnimationFrame(source, args) {
function preventRequestAnimationFrame(source, match) {
var nativeRequestAnimationFrame = window.requestAnimationFrame;
var shouldLog = typeof match === "undefined";
-
var _parseMatchArg = parseMatchArg(match),
- isInvertedMatch = _parseMatchArg.isInvertedMatch,
- matchRegexp = _parseMatchArg.matchRegexp;
-
+ isInvertedMatch = _parseMatchArg.isInvertedMatch,
+ matchRegexp = _parseMatchArg.matchRegexp;
var rafWrapper = function rafWrapper(callback) {
var shouldPrevent = false;
-
if (shouldLog) {
hit(source);
logMessage(source, "requestAnimationFrame(".concat(String(callback), ")"), true);
} else if (isValidCallback(callback) && isValidStrPattern(match)) {
shouldPrevent = matchRegexp.test(callback.toString()) !== isInvertedMatch;
}
-
if (shouldPrevent) {
hit(source);
return nativeRequestAnimationFrame(noopFunc);
}
-
for (var _len = arguments.length, args = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {
args[_key - 1] = arguments[_key];
}
-
return nativeRequestAnimationFrame.apply(window, [callback].concat(args));
};
-
window.requestAnimationFrame = rafWrapper;
}
-
- function hit(source, message) {
+ function hit(source) {
if (source.verbose !== true) {
return;
}
-
try {
var log = console.log.bind(console);
var trace = console.trace.bind(console);
var prefix = source.ruleText || "";
-
if (source.domainName) {
var AG_SCRIPTLET_MARKER = "#%#//";
var UBO_SCRIPTLET_MARKER = "##+js";
var ruleStartIndex;
-
if (source.ruleText.indexOf(AG_SCRIPTLET_MARKER) > -1) {
ruleStartIndex = source.ruleText.indexOf(AG_SCRIPTLET_MARKER);
} else if (source.ruleText.indexOf(UBO_SCRIPTLET_MARKER) > -1) {
ruleStartIndex = source.ruleText.indexOf(UBO_SCRIPTLET_MARKER);
}
-
var rulePart = source.ruleText.slice(ruleStartIndex);
prefix = "".concat(source.domainName).concat(rulePart);
}
-
- var LOG_MARKER = "log: ";
-
- if (message) {
- if (message.indexOf(LOG_MARKER) === -1) {
- log("".concat(prefix, " message:\n").concat(message));
- } else {
- log(message.slice(LOG_MARKER.length));
- }
- }
-
log("".concat(prefix, " trace start"));
-
if (trace) {
trace();
}
-
log("".concat(prefix, " trace end"));
} catch (e) {}
-
if (typeof window.__debug === "function") {
window.__debug(source);
}
}
-
function noopFunc() {}
-
function parseMatchArg(match) {
var INVERT_MARKER = "!";
var isInvertedMatch = startsWith(match, INVERT_MARKER);
@@ -21237,82 +17692,63 @@
matchRegexp: matchRegexp
};
}
-
function isValidStrPattern(input) {
var FORWARD_SLASH = "/";
var str = escapeRegExp(input);
-
if (input[0] === FORWARD_SLASH && input[input.length - 1] === FORWARD_SLASH) {
str = input.slice(1, -1);
}
-
var isValid;
-
try {
isValid = new RegExp(str);
isValid = true;
} catch (e) {
isValid = false;
}
-
return isValid;
}
-
function isValidCallback(callback) {
return callback instanceof Function || typeof callback === "string";
}
-
function logMessage(source, message) {
var forced = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;
-
if (forced || source.verbose) {
console.log("".concat(source.name, ": ").concat(message));
}
}
-
function escapeRegExp(str) {
return str.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
}
-
function toRegExp() {
var input = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : "";
var DEFAULT_VALUE = ".?";
var FORWARD_SLASH = "/";
-
if (input === "") {
return new RegExp(DEFAULT_VALUE);
}
-
if (input[0] === FORWARD_SLASH && input[input.length - 1] === FORWARD_SLASH) {
return new RegExp(input.slice(1, -1));
}
-
var escaped = input.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
return new RegExp(escaped);
}
-
function startsWith(str, prefix) {
return !!str && str.indexOf(prefix) === 0;
}
-
var updatedArgs = args ? [].concat(source).concat(args) : [source];
-
try {
preventRequestAnimationFrame.apply(this, updatedArgs);
} catch (e) {
console.log(e);
}
}
-
function preventSetInterval(source, args) {
function preventSetInterval(source, matchCallback, matchDelay) {
var isProxySupported = typeof Proxy !== "undefined";
var nativeInterval = window.setInterval;
var shouldLog = typeof matchCallback === "undefined" && typeof matchDelay === "undefined";
-
var legacyIntervalWrapper = function legacyIntervalWrapper(callback, delay) {
var shouldPrevent = false;
-
if (shouldLog) {
hit(source);
logMessage(source, "setInterval(".concat(String(callback), ", ").concat(delay, ")"), true);
@@ -21324,24 +17760,19 @@
matchDelay: matchDelay
});
}
-
if (shouldPrevent) {
hit(source);
return nativeInterval(noopFunc, delay);
}
-
for (var _len = arguments.length, args = new Array(_len > 2 ? _len - 2 : 0), _key = 2; _key < _len; _key++) {
args[_key - 2] = arguments[_key];
}
-
return nativeInterval.apply(window, [callback, delay].concat(args));
};
-
var handlerWrapper = function handlerWrapper(target, thisArg, args) {
var callback = args[0];
var delay = args[1];
var shouldPrevent = false;
-
if (shouldLog) {
hit(source);
logMessage(source, "setInterval(".concat(String(callback), ", ").concat(delay, ")"), true);
@@ -21353,97 +17784,67 @@
matchDelay: matchDelay
});
}
-
if (shouldPrevent) {
hit(source);
args[0] = noopFunc;
}
-
return target.apply(thisArg, args);
};
-
var setIntervalHandler = {
apply: handlerWrapper
};
window.setInterval = isProxySupported ? new Proxy(window.setInterval, setIntervalHandler) : legacyIntervalWrapper;
}
-
- function hit(source, message) {
+ function hit(source) {
if (source.verbose !== true) {
return;
}
-
try {
var log = console.log.bind(console);
var trace = console.trace.bind(console);
var prefix = source.ruleText || "";
-
if (source.domainName) {
var AG_SCRIPTLET_MARKER = "#%#//";
var UBO_SCRIPTLET_MARKER = "##+js";
var ruleStartIndex;
-
if (source.ruleText.indexOf(AG_SCRIPTLET_MARKER) > -1) {
ruleStartIndex = source.ruleText.indexOf(AG_SCRIPTLET_MARKER);
} else if (source.ruleText.indexOf(UBO_SCRIPTLET_MARKER) > -1) {
ruleStartIndex = source.ruleText.indexOf(UBO_SCRIPTLET_MARKER);
}
-
var rulePart = source.ruleText.slice(ruleStartIndex);
prefix = "".concat(source.domainName).concat(rulePart);
}
-
- var LOG_MARKER = "log: ";
-
- if (message) {
- if (message.indexOf(LOG_MARKER) === -1) {
- log("".concat(prefix, " message:\n").concat(message));
- } else {
- log(message.slice(LOG_MARKER.length));
- }
- }
-
log("".concat(prefix, " trace start"));
-
if (trace) {
trace();
}
-
log("".concat(prefix, " trace end"));
} catch (e) {}
-
if (typeof window.__debug === "function") {
window.__debug(source);
}
}
-
function noopFunc() {}
-
function isPreventionNeeded(_ref) {
var callback = _ref.callback,
- delay = _ref.delay,
- matchCallback = _ref.matchCallback,
- matchDelay = _ref.matchDelay;
-
+ delay = _ref.delay,
+ matchCallback = _ref.matchCallback,
+ matchDelay = _ref.matchDelay;
if (!isValidCallback(callback)) {
return false;
}
-
if (!isValidMatchStr(matchCallback) || matchDelay && !isValidMatchNumber(matchDelay)) {
return false;
}
-
var _parseMatchArg = parseMatchArg(matchCallback),
- isInvertedMatch = _parseMatchArg.isInvertedMatch,
- matchRegexp = _parseMatchArg.matchRegexp;
-
+ isInvertedMatch = _parseMatchArg.isInvertedMatch,
+ matchRegexp = _parseMatchArg.matchRegexp;
var _parseDelayArg = parseDelayArg(matchDelay),
- isInvertedDelayMatch = _parseDelayArg.isInvertedDelayMatch,
- delayMatch = _parseDelayArg.delayMatch;
-
+ isInvertedDelayMatch = _parseDelayArg.isInvertedDelayMatch,
+ delayMatch = _parseDelayArg.delayMatch;
var shouldPrevent = false;
var callbackStr = String(callback);
-
if (delayMatch === null) {
shouldPrevent = matchRegexp.test(callbackStr) !== isInvertedMatch;
} else if (!matchCallback) {
@@ -21451,44 +17852,34 @@
} else {
shouldPrevent = matchRegexp.test(callbackStr) !== isInvertedMatch && delay === delayMatch !== isInvertedDelayMatch;
}
-
return shouldPrevent;
}
-
function logMessage(source, message) {
var forced = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;
-
if (forced || source.verbose) {
console.log("".concat(source.name, ": ").concat(message));
}
}
-
function toRegExp() {
var input = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : "";
var DEFAULT_VALUE = ".?";
var FORWARD_SLASH = "/";
-
if (input === "") {
return new RegExp(DEFAULT_VALUE);
}
-
if (input[0] === FORWARD_SLASH && input[input.length - 1] === FORWARD_SLASH) {
return new RegExp(input.slice(1, -1));
}
-
var escaped = input.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
return new RegExp(escaped);
}
-
function startsWith(str, prefix) {
return !!str && str.indexOf(prefix) === 0;
}
-
function nativeIsNaN(num) {
var native = Number.isNaN || window.isNaN;
return native(num);
}
-
function parseMatchArg(match) {
var INVERT_MARKER = "!";
var isInvertedMatch = startsWith(match, INVERT_MARKER);
@@ -21499,7 +17890,6 @@
matchRegexp: matchRegexp
};
}
-
function parseDelayArg(delay) {
var INVERT_MARKER = "!";
var isInvertedDelayMatch = startsWith(delay, INVERT_MARKER);
@@ -21511,81 +17901,62 @@
delayMatch: delayMatch
};
}
-
function isValidCallback(callback) {
return callback instanceof Function || typeof callback === "string";
}
-
function isValidMatchStr(match) {
var INVERT_MARKER = "!";
var str = match;
-
if (startsWith(match, INVERT_MARKER)) {
str = match.slice(1);
}
-
return isValidStrPattern(str);
}
-
function isValidStrPattern(input) {
var FORWARD_SLASH = "/";
var str = escapeRegExp(input);
-
if (input[0] === FORWARD_SLASH && input[input.length - 1] === FORWARD_SLASH) {
str = input.slice(1, -1);
}
-
var isValid;
-
try {
isValid = new RegExp(str);
isValid = true;
} catch (e) {
isValid = false;
}
-
return isValid;
}
-
function escapeRegExp(str) {
return str.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
}
-
function nativeIsFinite(num) {
var native = Number.isFinite || window.isFinite;
return native(num);
}
-
function isValidMatchNumber(match) {
var INVERT_MARKER = "!";
var str = match;
-
if (startsWith(match, INVERT_MARKER)) {
str = match.slice(1);
}
-
var num = parseFloat(str);
return !nativeIsNaN(num) && nativeIsFinite(num);
}
-
var updatedArgs = args ? [].concat(source).concat(args) : [source];
-
try {
preventSetInterval.apply(this, updatedArgs);
} catch (e) {
console.log(e);
}
}
-
function preventSetTimeout(source, args) {
function preventSetTimeout(source, matchCallback, matchDelay) {
var isProxySupported = typeof Proxy !== "undefined";
var nativeTimeout = window.setTimeout;
var shouldLog = typeof matchCallback === "undefined" && typeof matchDelay === "undefined";
-
var legacyTimeoutWrapper = function legacyTimeoutWrapper(callback, delay) {
var shouldPrevent = false;
-
if (shouldLog) {
hit(source);
logMessage(source, "setTimeout(".concat(String(callback), ", ").concat(delay, ")"), true);
@@ -21597,24 +17968,19 @@
matchDelay: matchDelay
});
}
-
if (shouldPrevent) {
hit(source);
return nativeTimeout(noopFunc, delay);
}
-
for (var _len = arguments.length, args = new Array(_len > 2 ? _len - 2 : 0), _key = 2; _key < _len; _key++) {
args[_key - 2] = arguments[_key];
}
-
return nativeTimeout.apply(window, [callback, delay].concat(args));
};
-
var handlerWrapper = function handlerWrapper(target, thisArg, args) {
var callback = args[0];
var delay = args[1];
var shouldPrevent = false;
-
if (shouldLog) {
hit(source);
logMessage(source, "setTimeout(".concat(String(callback), ", ").concat(delay, ")"), true);
@@ -21626,97 +17992,67 @@
matchDelay: matchDelay
});
}
-
if (shouldPrevent) {
hit(source);
args[0] = noopFunc;
}
-
return target.apply(thisArg, args);
};
-
var setTimeoutHandler = {
apply: handlerWrapper
};
window.setTimeout = isProxySupported ? new Proxy(window.setTimeout, setTimeoutHandler) : legacyTimeoutWrapper;
}
-
- function hit(source, message) {
+ function hit(source) {
if (source.verbose !== true) {
return;
}
-
try {
var log = console.log.bind(console);
var trace = console.trace.bind(console);
var prefix = source.ruleText || "";
-
if (source.domainName) {
var AG_SCRIPTLET_MARKER = "#%#//";
var UBO_SCRIPTLET_MARKER = "##+js";
var ruleStartIndex;
-
if (source.ruleText.indexOf(AG_SCRIPTLET_MARKER) > -1) {
ruleStartIndex = source.ruleText.indexOf(AG_SCRIPTLET_MARKER);
} else if (source.ruleText.indexOf(UBO_SCRIPTLET_MARKER) > -1) {
ruleStartIndex = source.ruleText.indexOf(UBO_SCRIPTLET_MARKER);
}
-
var rulePart = source.ruleText.slice(ruleStartIndex);
prefix = "".concat(source.domainName).concat(rulePart);
}
-
- var LOG_MARKER = "log: ";
-
- if (message) {
- if (message.indexOf(LOG_MARKER) === -1) {
- log("".concat(prefix, " message:\n").concat(message));
- } else {
- log(message.slice(LOG_MARKER.length));
- }
- }
-
log("".concat(prefix, " trace start"));
-
if (trace) {
trace();
}
-
log("".concat(prefix, " trace end"));
} catch (e) {}
-
if (typeof window.__debug === "function") {
window.__debug(source);
}
}
-
function noopFunc() {}
-
function isPreventionNeeded(_ref) {
var callback = _ref.callback,
- delay = _ref.delay,
- matchCallback = _ref.matchCallback,
- matchDelay = _ref.matchDelay;
-
+ delay = _ref.delay,
+ matchCallback = _ref.matchCallback,
+ matchDelay = _ref.matchDelay;
if (!isValidCallback(callback)) {
return false;
}
-
if (!isValidMatchStr(matchCallback) || matchDelay && !isValidMatchNumber(matchDelay)) {
return false;
}
-
var _parseMatchArg = parseMatchArg(matchCallback),
- isInvertedMatch = _parseMatchArg.isInvertedMatch,
- matchRegexp = _parseMatchArg.matchRegexp;
-
+ isInvertedMatch = _parseMatchArg.isInvertedMatch,
+ matchRegexp = _parseMatchArg.matchRegexp;
var _parseDelayArg = parseDelayArg(matchDelay),
- isInvertedDelayMatch = _parseDelayArg.isInvertedDelayMatch,
- delayMatch = _parseDelayArg.delayMatch;
-
+ isInvertedDelayMatch = _parseDelayArg.isInvertedDelayMatch,
+ delayMatch = _parseDelayArg.delayMatch;
var shouldPrevent = false;
var callbackStr = String(callback);
-
if (delayMatch === null) {
shouldPrevent = matchRegexp.test(callbackStr) !== isInvertedMatch;
} else if (!matchCallback) {
@@ -21724,18 +18060,14 @@
} else {
shouldPrevent = matchRegexp.test(callbackStr) !== isInvertedMatch && delay === delayMatch !== isInvertedDelayMatch;
}
-
return shouldPrevent;
}
-
function logMessage(source, message) {
var forced = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;
-
if (forced || source.verbose) {
console.log("".concat(source.name, ": ").concat(message));
}
}
-
function parseMatchArg(match) {
var INVERT_MARKER = "!";
var isInvertedMatch = startsWith(match, INVERT_MARKER);
@@ -21746,7 +18078,6 @@
matchRegexp: matchRegexp
};
}
-
function parseDelayArg(delay) {
var INVERT_MARKER = "!";
var isInvertedDelayMatch = startsWith(delay, INVERT_MARKER);
@@ -21758,98 +18089,75 @@
delayMatch: delayMatch
};
}
-
function toRegExp() {
var input = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : "";
var DEFAULT_VALUE = ".?";
var FORWARD_SLASH = "/";
-
if (input === "") {
return new RegExp(DEFAULT_VALUE);
}
-
if (input[0] === FORWARD_SLASH && input[input.length - 1] === FORWARD_SLASH) {
return new RegExp(input.slice(1, -1));
}
-
var escaped = input.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
return new RegExp(escaped);
}
-
function startsWith(str, prefix) {
return !!str && str.indexOf(prefix) === 0;
}
-
function nativeIsNaN(num) {
var native = Number.isNaN || window.isNaN;
return native(num);
}
-
function isValidCallback(callback) {
return callback instanceof Function || typeof callback === "string";
}
-
function isValidMatchStr(match) {
var INVERT_MARKER = "!";
var str = match;
-
if (startsWith(match, INVERT_MARKER)) {
str = match.slice(1);
}
-
return isValidStrPattern(str);
}
-
function escapeRegExp(str) {
return str.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
}
-
function isValidStrPattern(input) {
var FORWARD_SLASH = "/";
var str = escapeRegExp(input);
-
if (input[0] === FORWARD_SLASH && input[input.length - 1] === FORWARD_SLASH) {
str = input.slice(1, -1);
}
-
var isValid;
-
try {
isValid = new RegExp(str);
isValid = true;
} catch (e) {
isValid = false;
}
-
return isValid;
}
-
function nativeIsFinite(num) {
var native = Number.isFinite || window.isFinite;
return native(num);
}
-
function isValidMatchNumber(match) {
var INVERT_MARKER = "!";
var str = match;
-
if (startsWith(match, INVERT_MARKER)) {
str = match.slice(1);
}
-
var num = parseFloat(str);
return !nativeIsNaN(num) && nativeIsFinite(num);
}
-
var updatedArgs = args ? [].concat(source).concat(args) : [source];
-
try {
preventSetTimeout.apply(this, updatedArgs);
} catch (e) {
console.log(e);
}
}
-
function preventWindowOpen(source, args) {
function preventWindowOpen(source) {
var match = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : "*";
@@ -21857,62 +18165,48 @@
var replacement = arguments.length > 3 ? arguments[3] : undefined;
var nativeOpen = window.open;
var isNewSyntax = match !== "0" && match !== "1";
-
var oldOpenWrapper = function oldOpenWrapper(str) {
match = Number(match) > 0;
-
for (var _len = arguments.length, args = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {
args[_key - 1] = arguments[_key];
}
-
if (!isValidStrPattern(delay)) {
logMessage(source, "Invalid parameter: ".concat(delay));
return nativeOpen.apply(window, [str].concat(args));
}
-
var searchRegexp = toRegExp(delay);
-
if (match !== searchRegexp.test(str)) {
return nativeOpen.apply(window, [str].concat(args));
}
-
hit(source);
return handleOldReplacement(replacement);
};
-
var newOpenWrapper = function newOpenWrapper(url) {
var shouldLog = replacement && replacement.indexOf("log") > -1;
-
for (var _len2 = arguments.length, args = new Array(_len2 > 1 ? _len2 - 1 : 0), _key2 = 1; _key2 < _len2; _key2++) {
args[_key2 - 1] = arguments[_key2];
}
-
if (shouldLog) {
var argsStr = args && args.length > 0 ? ", ".concat(args.join(", ")) : "";
- var message = "window-open: ".concat(url).concat(argsStr);
+ var message = "".concat(url).concat(argsStr);
logMessage(source, message, true);
hit(source);
}
-
var shouldPrevent = false;
-
if (match === "*") {
shouldPrevent = true;
} else if (isValidMatchStr(match)) {
var _parseMatchArg = parseMatchArg(match),
- isInvertedMatch = _parseMatchArg.isInvertedMatch,
- matchRegexp = _parseMatchArg.matchRegexp;
-
+ isInvertedMatch = _parseMatchArg.isInvertedMatch,
+ matchRegexp = _parseMatchArg.matchRegexp;
shouldPrevent = matchRegexp.test(url) !== isInvertedMatch;
} else {
logMessage(source, "Invalid parameter: ".concat(match));
shouldPrevent = false;
}
-
if (shouldPrevent) {
var parsedDelay = parseInt(delay, 10);
var result;
-
if (nativeIsNaN(parsedDelay)) {
result = noopNull();
} else {
@@ -21923,7 +18217,6 @@
};
var decoy = createDecoy(decoyArgs);
var popup = decoy.contentWindow;
-
if (typeof popup === "object" && popup !== null) {
Object.defineProperty(popup, "closed", {
value: false
@@ -21941,127 +18234,89 @@
});
popup = decoy.contentWindow;
}
-
result = popup;
}
-
hit(source);
return result;
}
-
return nativeOpen.apply(window, [url].concat(args));
};
-
window.open = isNewSyntax ? newOpenWrapper : oldOpenWrapper;
window.open.toString = nativeOpen.toString.bind(nativeOpen);
}
-
- function hit(source, message) {
+ function hit(source) {
if (source.verbose !== true) {
return;
}
-
try {
var log = console.log.bind(console);
var trace = console.trace.bind(console);
var prefix = source.ruleText || "";
-
if (source.domainName) {
var AG_SCRIPTLET_MARKER = "#%#//";
var UBO_SCRIPTLET_MARKER = "##+js";
var ruleStartIndex;
-
if (source.ruleText.indexOf(AG_SCRIPTLET_MARKER) > -1) {
ruleStartIndex = source.ruleText.indexOf(AG_SCRIPTLET_MARKER);
} else if (source.ruleText.indexOf(UBO_SCRIPTLET_MARKER) > -1) {
ruleStartIndex = source.ruleText.indexOf(UBO_SCRIPTLET_MARKER);
}
-
var rulePart = source.ruleText.slice(ruleStartIndex);
prefix = "".concat(source.domainName).concat(rulePart);
}
-
- var LOG_MARKER = "log: ";
-
- if (message) {
- if (message.indexOf(LOG_MARKER) === -1) {
- log("".concat(prefix, " message:\n").concat(message));
- } else {
- log(message.slice(LOG_MARKER.length));
- }
- }
-
log("".concat(prefix, " trace start"));
-
if (trace) {
trace();
}
-
log("".concat(prefix, " trace end"));
} catch (e) {}
-
if (typeof window.__debug === "function") {
window.__debug(source);
}
}
-
function isValidStrPattern(input) {
var FORWARD_SLASH = "/";
var str = escapeRegExp(input);
-
if (input[0] === FORWARD_SLASH && input[input.length - 1] === FORWARD_SLASH) {
str = input.slice(1, -1);
}
-
var isValid;
-
try {
isValid = new RegExp(str);
isValid = true;
} catch (e) {
isValid = false;
}
-
return isValid;
}
-
function escapeRegExp(str) {
return str.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
}
-
function isValidMatchStr(match) {
var INVERT_MARKER = "!";
var str = match;
-
if (startsWith(match, INVERT_MARKER)) {
str = match.slice(1);
}
-
return isValidStrPattern(str);
}
-
function toRegExp() {
var input = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : "";
var DEFAULT_VALUE = ".?";
var FORWARD_SLASH = "/";
-
if (input === "") {
return new RegExp(DEFAULT_VALUE);
}
-
if (input[0] === FORWARD_SLASH && input[input.length - 1] === FORWARD_SLASH) {
return new RegExp(input.slice(1, -1));
}
-
var escaped = input.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
return new RegExp(escaped);
}
-
function nativeIsNaN(num) {
var native = Number.isNaN || window.isNaN;
return native(num);
}
-
function parseMatchArg(match) {
var INVERT_MARKER = "!";
var isInvertedMatch = startsWith(match, INVERT_MARKER);
@@ -22072,43 +18327,36 @@
matchRegexp: matchRegexp
};
}
-
function handleOldReplacement(replacement) {
var result;
-
if (!replacement) {
result = noopFunc;
} else if (replacement === "trueFunc") {
result = trueFunc;
} else if (replacement.indexOf("=") > -1) {
var isProp = startsWith(replacement, "{") && endsWith(replacement, "}");
-
if (isProp) {
var propertyPart = replacement.slice(1, -1);
var propertyName = substringBefore(propertyPart, "=");
var propertyValue = substringAfter(propertyPart, "=");
-
if (propertyValue === "noopFunc") {
result = {};
result[propertyName] = noopFunc;
}
}
}
-
return result;
}
-
function createDecoy(args) {
var OBJECT_TAG_NAME = "object";
var OBJECT_URL_PROP_NAME = "data";
var IFRAME_TAG_NAME = "iframe";
var IFRAME_URL_PROP_NAME = "src";
var replacement = args.replacement,
- url = args.url,
- delay = args.delay;
+ url = args.url,
+ delay = args.delay;
var tag;
var urlProp;
-
if (replacement === "obj") {
tag = OBJECT_TAG_NAME;
urlProp = OBJECT_URL_PROP_NAME;
@@ -22116,7 +18364,6 @@
tag = IFRAME_TAG_NAME;
urlProp = IFRAME_URL_PROP_NAME;
}
-
var decoy = document.createElement(tag);
decoy[urlProp] = url;
decoy.style.setProperty("height", "1px", "important");
@@ -22129,127 +18376,99 @@
}, delay * 1e3);
return decoy;
}
-
function getPreventGetter(nativeGetter) {
var preventGetter = function preventGetter(target, prop) {
if (prop && prop === "closed") {
return false;
}
-
if (typeof nativeGetter === "function") {
return noopFunc;
}
-
return prop && target[prop];
};
-
return preventGetter;
}
-
function noopNull() {
return null;
}
-
function logMessage(source, message) {
var forced = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;
-
if (forced || source.verbose) {
console.log("".concat(source.name, ": ").concat(message));
}
}
-
function noopFunc() {}
-
function trueFunc() {
return true;
}
-
function startsWith(str, prefix) {
return !!str && str.indexOf(prefix) === 0;
}
-
function endsWith(str, ending) {
return !!str && str.lastIndexOf(ending) === str.length - ending.length;
}
-
function substringBefore(str, separator) {
if (!str || !separator) {
return str;
}
-
var index = str.indexOf(separator);
return index < 0 ? str : str.substring(0, index);
}
-
function substringAfter(str, separator) {
if (!str) {
return str;
}
-
var index = str.indexOf(separator);
return index < 0 ? "" : str.substring(index + separator.length);
}
-
var updatedArgs = args ? [].concat(source).concat(args) : [source];
-
try {
preventWindowOpen.apply(this, updatedArgs);
} catch (e) {
console.log(e);
}
}
-
function preventXHR(source, args) {
function preventXHR(source, propsToMatch, customResponseText) {
if (typeof Proxy === "undefined") {
return;
}
-
var shouldPrevent = false;
var response = "";
var responseText = "";
var responseUrl;
-
var openWrapper = function openWrapper(target, thisArg, args) {
var xhrData = {
method: args[0],
url: args[1]
};
responseUrl = xhrData.url;
-
if (typeof propsToMatch === "undefined") {
logMessage(source, "xhr( ".concat(objectToString(xhrData), " )"), true);
hit(source);
} else {
shouldPrevent = matchRequestProps(source, propsToMatch, xhrData);
}
-
return Reflect.apply(target, thisArg, args);
};
-
var sendWrapper = function sendWrapper(target, thisArg, args) {
if (!shouldPrevent) {
return Reflect.apply(target, thisArg, args);
}
-
if (thisArg.responseType === "blob") {
response = new Blob();
}
-
if (thisArg.responseType === "arraybuffer") {
response = new ArrayBuffer();
}
-
if (customResponseText) {
var randomText = generateRandomResponse(customResponseText);
-
if (randomText) {
responseText = randomText;
} else {
logMessage(source, "Invalid range: ".concat(customResponseText));
}
}
-
Object.defineProperties(thisArg, {
readyState: {
value: 4,
@@ -22291,7 +18510,6 @@
hit(source);
return undefined;
};
-
var openHandler = {
apply: openWrapper
};
@@ -22301,86 +18519,59 @@
XMLHttpRequest.prototype.open = new Proxy(XMLHttpRequest.prototype.open, openHandler);
XMLHttpRequest.prototype.send = new Proxy(XMLHttpRequest.prototype.send, sendHandler);
}
-
- function hit(source, message) {
+ function hit(source) {
if (source.verbose !== true) {
return;
}
-
try {
var log = console.log.bind(console);
var trace = console.trace.bind(console);
var prefix = source.ruleText || "";
-
if (source.domainName) {
var AG_SCRIPTLET_MARKER = "#%#//";
var UBO_SCRIPTLET_MARKER = "##+js";
var ruleStartIndex;
-
if (source.ruleText.indexOf(AG_SCRIPTLET_MARKER) > -1) {
ruleStartIndex = source.ruleText.indexOf(AG_SCRIPTLET_MARKER);
} else if (source.ruleText.indexOf(UBO_SCRIPTLET_MARKER) > -1) {
ruleStartIndex = source.ruleText.indexOf(UBO_SCRIPTLET_MARKER);
}
-
var rulePart = source.ruleText.slice(ruleStartIndex);
prefix = "".concat(source.domainName).concat(rulePart);
}
-
- var LOG_MARKER = "log: ";
-
- if (message) {
- if (message.indexOf(LOG_MARKER) === -1) {
- log("".concat(prefix, " message:\n").concat(message));
- } else {
- log(message.slice(LOG_MARKER.length));
- }
- }
-
log("".concat(prefix, " trace start"));
-
if (trace) {
trace();
}
-
log("".concat(prefix, " trace end"));
} catch (e) {}
-
if (typeof window.__debug === "function") {
window.__debug(source);
}
}
-
function logMessage(source, message) {
var forced = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;
-
if (forced || source.verbose) {
console.log("".concat(source.name, ": ").concat(message));
}
}
-
function objectToString(obj) {
return isEmptyObject(obj) ? "{}" : getObjectEntries(obj).map(function (pair) {
var key = pair[0];
var value = pair[1];
var recordValueStr = value;
-
if (value instanceof Object) {
recordValueStr = "{ ".concat(objectToString(value), " }");
}
-
return "".concat(key, ':"').concat(recordValueStr, '"');
}).join(" ");
}
-
function matchRequestProps(source, propsToMatch, requestData) {
if (propsToMatch === "" || propsToMatch === "*") {
return true;
}
-
var isMatched;
var parsedData = parseMatchProps(propsToMatch);
-
if (!validateParsedData(parsedData)) {
logMessage(source, "Invalid parameter: ".concat(propsToMatch));
isMatched = false;
@@ -22391,94 +18582,71 @@
return Object.prototype.hasOwnProperty.call(requestData, matchKey) && matchValue.test(requestData[matchKey]);
});
}
-
return isMatched;
}
-
function generateRandomResponse(customResponseText) {
var customResponse = customResponseText;
-
if (customResponse === "true") {
customResponse = Math.random().toString(36).slice(-10);
return customResponse;
}
-
customResponse = customResponse.replace("length:", "");
var rangeRegex = /^\d+-\d+$/;
-
if (!rangeRegex.test(customResponse)) {
return null;
}
-
var rangeMin = getNumberFromString(customResponse.split("-")[0]);
var rangeMax = getNumberFromString(customResponse.split("-")[1]);
-
if (!nativeIsFinite(rangeMin) || !nativeIsFinite(rangeMax)) {
return null;
}
-
if (rangeMin > rangeMax) {
var temp = rangeMin;
rangeMin = rangeMax;
rangeMax = temp;
}
-
var LENGTH_RANGE_LIMIT = 500 * 1e3;
-
if (rangeMax > LENGTH_RANGE_LIMIT) {
return null;
}
-
var length = getRandomIntInclusive(rangeMin, rangeMax);
customResponse = getRandomStrByLength(length);
return customResponse;
}
-
function toRegExp() {
var input = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : "";
var DEFAULT_VALUE = ".?";
var FORWARD_SLASH = "/";
-
if (input === "") {
return new RegExp(DEFAULT_VALUE);
}
-
if (input[0] === FORWARD_SLASH && input[input.length - 1] === FORWARD_SLASH) {
return new RegExp(input.slice(1, -1));
}
-
var escaped = input.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
return new RegExp(escaped);
}
-
function isValidStrPattern(input) {
var FORWARD_SLASH = "/";
var str = escapeRegExp(input);
-
if (input[0] === FORWARD_SLASH && input[input.length - 1] === FORWARD_SLASH) {
str = input.slice(1, -1);
}
-
var isValid;
-
try {
isValid = new RegExp(str);
isValid = true;
} catch (e) {
isValid = false;
}
-
return isValid;
}
-
function escapeRegExp(str) {
return str.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
}
-
function isEmptyObject(obj) {
- return Object.keys(obj).length === 0;
+ return Object.keys(obj).length === 0 && !obj.prototype;
}
-
function getObjectEntries(object) {
var keys = Object.keys(object);
var entries = [];
@@ -22487,23 +18655,19 @@
});
return entries;
}
-
function getNumberFromString(rawString) {
var parsedDelay = parseInt(rawString, 10);
var validDelay = nativeIsNaN(parsedDelay) ? null : parsedDelay;
return validDelay;
}
-
function nativeIsFinite(num) {
var native = Number.isFinite || window.isFinite;
return native(num);
}
-
function nativeIsNaN(num) {
var native = Number.isNaN || window.isNaN;
return native(num);
}
-
function parseMatchProps(propsToMatchStr) {
var PROPS_DIVIDER = " ";
var PAIRS_MARKER = ":";
@@ -22514,7 +18678,6 @@
var dividerInd = prop.indexOf(PAIRS_MARKER);
var key = prop.slice(0, dividerInd);
var hasLegalMatchProp = LEGAL_MATCH_PROPS.indexOf(key) !== -1;
-
if (hasLegalMatchProp) {
var value = prop.slice(dividerInd + 1);
propsObj[key] = value;
@@ -22524,13 +18687,11 @@
});
return propsObj;
}
-
function validateParsedData(data) {
return Object.values(data).every(function (value) {
return isValidStrPattern(value);
});
}
-
function getMatchPropsData(data) {
var matchData = {};
Object.keys(data).forEach(function (key) {
@@ -22538,57 +18699,47 @@
});
return matchData;
}
-
+ function getRequestProps() {
+ return ["url", "method", "headers", "body", "mode", "credentials", "cache", "redirect", "referrer", "referrerPolicy", "integrity", "keepalive", "signal"];
+ }
function getRandomIntInclusive(min, max) {
min = Math.ceil(min);
max = Math.floor(max);
return Math.floor(Math.random() * (max - min + 1) + min);
}
-
function getRandomStrByLength(length) {
var result = "";
var characters = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789!@#$%^&*()_+=~";
var charactersLength = characters.length;
-
for (var i = 0; i < length; i += 1) {
result += characters.charAt(Math.floor(Math.random() * charactersLength));
}
-
return result;
}
-
var updatedArgs = args ? [].concat(source).concat(args) : [source];
-
try {
preventXHR.apply(this, updatedArgs);
} catch (e) {
console.log(e);
}
}
-
function removeAttr(source, args) {
function removeAttr(source, attrs, selector) {
var applying = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : "asap stay";
-
if (!attrs) {
return;
}
-
attrs = attrs.split(/\s*\|\s*/);
-
if (!selector) {
selector = "[".concat(attrs.join("],["), "]");
}
-
var rmattr = function rmattr() {
var nodes = [];
-
try {
nodes = [].slice.call(document.querySelectorAll(selector));
} catch (e) {
logMessage(source, "Invalid selector arg: '".concat(selector, "'"));
}
-
var removed = false;
nodes.forEach(function (node) {
attrs.forEach(function (attr) {
@@ -22596,24 +18747,18 @@
removed = true;
});
});
-
if (removed) {
hit(source);
}
};
-
var flags = parseFlags(applying);
-
var run = function run() {
rmattr();
-
if (!flags.hasFlag(flags.STAY)) {
return;
}
-
observeDOMChanges(rmattr, true);
};
-
if (flags.hasFlag(flags.ASAP)) {
if (document.readyState === "loading") {
window.addEventListener("DOMContentLoaded", rmattr, {
@@ -22623,7 +18768,6 @@
rmattr();
}
}
-
if (document.readyState !== "complete" && flags.hasFlag(flags.COMPLETE)) {
window.addEventListener("load", run, {
once: true
@@ -22632,66 +18776,44 @@
if (!applying.indexOf(" ") !== -1) {
rmattr();
}
-
observeDOMChanges(rmattr, true);
}
}
-
- function hit(source, message) {
+ function hit(source) {
if (source.verbose !== true) {
return;
}
-
try {
var log = console.log.bind(console);
var trace = console.trace.bind(console);
var prefix = source.ruleText || "";
-
if (source.domainName) {
var AG_SCRIPTLET_MARKER = "#%#//";
var UBO_SCRIPTLET_MARKER = "##+js";
var ruleStartIndex;
-
if (source.ruleText.indexOf(AG_SCRIPTLET_MARKER) > -1) {
ruleStartIndex = source.ruleText.indexOf(AG_SCRIPTLET_MARKER);
} else if (source.ruleText.indexOf(UBO_SCRIPTLET_MARKER) > -1) {
ruleStartIndex = source.ruleText.indexOf(UBO_SCRIPTLET_MARKER);
}
-
var rulePart = source.ruleText.slice(ruleStartIndex);
prefix = "".concat(source.domainName).concat(rulePart);
}
-
- var LOG_MARKER = "log: ";
-
- if (message) {
- if (message.indexOf(LOG_MARKER) === -1) {
- log("".concat(prefix, " message:\n").concat(message));
- } else {
- log(message.slice(LOG_MARKER.length));
- }
- }
-
log("".concat(prefix, " trace start"));
-
if (trace) {
trace();
}
-
log("".concat(prefix, " trace end"));
} catch (e) {}
-
if (typeof window.__debug === "function") {
window.__debug(source);
}
}
-
function observeDOMChanges(callback) {
var observeAttrs = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;
var attrsToObserve = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : [];
var THROTTLE_DELAY_MS = 20;
var observer = new MutationObserver(throttle(callbackWrapper, THROTTLE_DELAY_MS));
-
var connect = function connect() {
if (attrsToObserve.length > 0) {
observer.observe(document.documentElement, {
@@ -22708,20 +18830,16 @@
});
}
};
-
var disconnect = function disconnect() {
observer.disconnect();
};
-
function callbackWrapper() {
disconnect();
callback();
connect();
}
-
connect();
}
-
function parseFlags(flags) {
var FLAGS_DIVIDER = " ";
var ASAP_FLAG = "asap";
@@ -22740,96 +18858,76 @@
}
};
}
-
function logMessage(source, message) {
var forced = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;
-
if (forced || source.verbose) {
console.log("".concat(source.name, ": ").concat(message));
}
}
-
function throttle(cb, delay) {
var wait = false;
var savedArgs;
-
var wrapper = function wrapper() {
for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
args[_key] = arguments[_key];
}
-
if (wait) {
savedArgs = args;
return;
}
-
cb.apply(void 0, args);
wait = true;
setTimeout(function () {
wait = false;
-
if (savedArgs) {
wrapper(savedArgs);
savedArgs = null;
}
}, delay);
};
-
return wrapper;
}
-
var updatedArgs = args ? [].concat(source).concat(args) : [source];
-
try {
removeAttr.apply(this, updatedArgs);
} catch (e) {
console.log(e);
}
}
-
function removeClass(source, args) {
function removeClass(source, classNames, selector) {
var applying = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : "asap stay";
-
if (!classNames) {
return;
}
-
classNames = classNames.split(/\s*\|\s*/);
var selectors = [];
-
if (!selector) {
selectors = classNames.map(function (className) {
return ".".concat(className);
});
}
-
var removeClassHandler = function removeClassHandler() {
var nodes = new Set();
-
if (selector) {
var foundNodes = [];
-
try {
foundNodes = [].slice.call(document.querySelectorAll(selector));
} catch (e) {
logMessage(source, "Invalid selector arg: '".concat(selector, "'"));
}
-
foundNodes.forEach(function (n) {
return nodes.add(n);
});
} else if (selectors.length > 0) {
selectors.forEach(function (s) {
var elements = document.querySelectorAll(s);
-
for (var i = 0; i < elements.length; i += 1) {
var element = elements[i];
nodes.add(element);
}
});
}
-
var removed = false;
nodes.forEach(function (node) {
classNames.forEach(function (className) {
@@ -22839,25 +18937,19 @@
}
});
});
-
if (removed) {
hit(source);
}
};
-
var CLASS_ATTR_NAME = ["class"];
var flags = parseFlags(applying);
-
var run = function run() {
removeClassHandler();
-
if (!flags.hasFlag(flags.STAY)) {
return;
}
-
observeDOMChanges(removeClassHandler, true, CLASS_ATTR_NAME);
};
-
if (flags.hasFlag(flags.ASAP)) {
if (document.readyState === "loading") {
window.addEventListener("DOMContentLoaded", removeClassHandler, {
@@ -22867,7 +18959,6 @@
removeClassHandler();
}
}
-
if (document.readyState !== "complete" && flags.hasFlag(flags.COMPLETE)) {
window.addEventListener("load", run, {
once: true
@@ -22876,74 +18967,50 @@
if (!applying.indexOf(" ") !== -1) {
removeClassHandler();
}
-
observeDOMChanges(removeClassHandler, true, CLASS_ATTR_NAME);
}
}
-
- function hit(source, message) {
+ function hit(source) {
if (source.verbose !== true) {
return;
}
-
try {
var log = console.log.bind(console);
var trace = console.trace.bind(console);
var prefix = source.ruleText || "";
-
if (source.domainName) {
var AG_SCRIPTLET_MARKER = "#%#//";
var UBO_SCRIPTLET_MARKER = "##+js";
var ruleStartIndex;
-
if (source.ruleText.indexOf(AG_SCRIPTLET_MARKER) > -1) {
ruleStartIndex = source.ruleText.indexOf(AG_SCRIPTLET_MARKER);
} else if (source.ruleText.indexOf(UBO_SCRIPTLET_MARKER) > -1) {
ruleStartIndex = source.ruleText.indexOf(UBO_SCRIPTLET_MARKER);
}
-
var rulePart = source.ruleText.slice(ruleStartIndex);
prefix = "".concat(source.domainName).concat(rulePart);
}
-
- var LOG_MARKER = "log: ";
-
- if (message) {
- if (message.indexOf(LOG_MARKER) === -1) {
- log("".concat(prefix, " message:\n").concat(message));
- } else {
- log(message.slice(LOG_MARKER.length));
- }
- }
-
log("".concat(prefix, " trace start"));
-
if (trace) {
trace();
}
-
log("".concat(prefix, " trace end"));
} catch (e) {}
-
if (typeof window.__debug === "function") {
window.__debug(source);
}
}
-
function logMessage(source, message) {
var forced = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;
-
if (forced || source.verbose) {
console.log("".concat(source.name, ": ").concat(message));
}
}
-
function observeDOMChanges(callback) {
var observeAttrs = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;
var attrsToObserve = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : [];
var THROTTLE_DELAY_MS = 20;
var observer = new MutationObserver(throttle(callbackWrapper, THROTTLE_DELAY_MS));
-
var connect = function connect() {
if (attrsToObserve.length > 0) {
observer.observe(document.documentElement, {
@@ -22960,20 +19027,16 @@
});
}
};
-
var disconnect = function disconnect() {
observer.disconnect();
};
-
function callbackWrapper() {
disconnect();
callback();
connect();
}
-
connect();
}
-
function parseFlags(flags) {
var FLAGS_DIVIDER = " ";
var ASAP_FLAG = "asap";
@@ -22992,49 +19055,39 @@
}
};
}
-
function throttle(cb, delay) {
var wait = false;
var savedArgs;
-
var wrapper = function wrapper() {
for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
args[_key] = arguments[_key];
}
-
if (wait) {
savedArgs = args;
return;
}
-
cb.apply(void 0, args);
wait = true;
setTimeout(function () {
wait = false;
-
if (savedArgs) {
wrapper(savedArgs);
savedArgs = null;
}
}, delay);
};
-
return wrapper;
}
-
var updatedArgs = args ? [].concat(source).concat(args) : [source];
-
try {
removeClass.apply(this, updatedArgs);
} catch (e) {
console.log(e);
}
}
-
function removeCookie(source, args) {
function removeCookie(source, match) {
var matchRegexp = toRegExp(match);
-
var removeCookieFromHost = function removeCookieFromHost(cookieName, hostName) {
var cookieSpec = "".concat(cookieName, "=");
var domain1 = "; domain=".concat(hostName);
@@ -23049,204 +19102,141 @@
document.cookie = cookieSpec + domain2 + path + expiration;
hit(source);
};
-
var rmCookie = function rmCookie() {
document.cookie.split(";").forEach(function (cookieStr) {
var pos = cookieStr.indexOf("=");
-
if (pos === -1) {
return;
}
-
var cookieName = cookieStr.slice(0, pos).trim();
-
if (!matchRegexp.test(cookieName)) {
return;
}
-
var hostParts = document.location.hostname.split(".");
-
for (var i = 0; i <= hostParts.length - 1; i += 1) {
var hostName = hostParts.slice(i).join(".");
-
if (hostName) {
removeCookieFromHost(cookieName, hostName);
}
}
});
};
-
rmCookie();
window.addEventListener("beforeunload", rmCookie);
}
-
function toRegExp() {
var input = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : "";
var DEFAULT_VALUE = ".?";
var FORWARD_SLASH = "/";
-
if (input === "") {
return new RegExp(DEFAULT_VALUE);
}
-
if (input[0] === FORWARD_SLASH && input[input.length - 1] === FORWARD_SLASH) {
return new RegExp(input.slice(1, -1));
}
-
var escaped = input.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
return new RegExp(escaped);
}
-
- function hit(source, message) {
+ function hit(source) {
if (source.verbose !== true) {
return;
}
-
try {
var log = console.log.bind(console);
var trace = console.trace.bind(console);
var prefix = source.ruleText || "";
-
if (source.domainName) {
var AG_SCRIPTLET_MARKER = "#%#//";
var UBO_SCRIPTLET_MARKER = "##+js";
var ruleStartIndex;
-
if (source.ruleText.indexOf(AG_SCRIPTLET_MARKER) > -1) {
ruleStartIndex = source.ruleText.indexOf(AG_SCRIPTLET_MARKER);
} else if (source.ruleText.indexOf(UBO_SCRIPTLET_MARKER) > -1) {
ruleStartIndex = source.ruleText.indexOf(UBO_SCRIPTLET_MARKER);
}
-
var rulePart = source.ruleText.slice(ruleStartIndex);
prefix = "".concat(source.domainName).concat(rulePart);
}
-
- var LOG_MARKER = "log: ";
-
- if (message) {
- if (message.indexOf(LOG_MARKER) === -1) {
- log("".concat(prefix, " message:\n").concat(message));
- } else {
- log(message.slice(LOG_MARKER.length));
- }
- }
-
log("".concat(prefix, " trace start"));
-
if (trace) {
trace();
}
-
log("".concat(prefix, " trace end"));
} catch (e) {}
-
if (typeof window.__debug === "function") {
window.__debug(source);
}
}
-
var updatedArgs = args ? [].concat(source).concat(args) : [source];
-
try {
removeCookie.apply(this, updatedArgs);
} catch (e) {
console.log(e);
}
}
-
function removeInShadowDom(source, args) {
function removeInShadowDom(source, selector, baseSelector) {
if (!Element.prototype.attachShadow) {
return;
}
-
var removeElement = function removeElement(targetElement) {
targetElement.remove();
};
-
var removeHandler = function removeHandler() {
var hostElements = !baseSelector ? findHostElements(document.documentElement) : document.querySelectorAll(baseSelector);
-
while (hostElements.length !== 0) {
var isRemoved = false;
-
var _pierceShadowDom = pierceShadowDom(selector, hostElements),
- targets = _pierceShadowDom.targets,
- innerHosts = _pierceShadowDom.innerHosts;
-
+ targets = _pierceShadowDom.targets,
+ innerHosts = _pierceShadowDom.innerHosts;
targets.forEach(function (targetEl) {
removeElement(targetEl);
isRemoved = true;
});
-
if (isRemoved) {
hit(source);
}
-
hostElements = innerHosts;
}
};
-
removeHandler();
observeDOMChanges(removeHandler, true);
}
-
- function hit(source, message) {
+ function hit(source) {
if (source.verbose !== true) {
return;
}
-
try {
var log = console.log.bind(console);
var trace = console.trace.bind(console);
var prefix = source.ruleText || "";
-
if (source.domainName) {
var AG_SCRIPTLET_MARKER = "#%#//";
var UBO_SCRIPTLET_MARKER = "##+js";
var ruleStartIndex;
-
if (source.ruleText.indexOf(AG_SCRIPTLET_MARKER) > -1) {
ruleStartIndex = source.ruleText.indexOf(AG_SCRIPTLET_MARKER);
} else if (source.ruleText.indexOf(UBO_SCRIPTLET_MARKER) > -1) {
ruleStartIndex = source.ruleText.indexOf(UBO_SCRIPTLET_MARKER);
}
-
var rulePart = source.ruleText.slice(ruleStartIndex);
prefix = "".concat(source.domainName).concat(rulePart);
}
-
- var LOG_MARKER = "log: ";
-
- if (message) {
- if (message.indexOf(LOG_MARKER) === -1) {
- log("".concat(prefix, " message:\n").concat(message));
- } else {
- log(message.slice(LOG_MARKER.length));
- }
- }
-
log("".concat(prefix, " trace start"));
-
if (trace) {
trace();
}
-
log("".concat(prefix, " trace end"));
} catch (e) {}
-
if (typeof window.__debug === "function") {
window.__debug(source);
}
}
-
function observeDOMChanges(callback) {
var observeAttrs = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;
var attrsToObserve = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : [];
var THROTTLE_DELAY_MS = 20;
var observer = new MutationObserver(throttle(callbackWrapper, THROTTLE_DELAY_MS));
-
var connect = function connect() {
if (attrsToObserve.length > 0) {
observer.observe(document.documentElement, {
@@ -23263,20 +19253,16 @@
});
}
};
-
var disconnect = function disconnect() {
observer.disconnect();
};
-
function callbackWrapper() {
disconnect();
callback();
connect();
}
-
connect();
}
-
function findHostElements(rootElement) {
var hosts = [];
var domElems = rootElement.querySelectorAll("*");
@@ -23287,7 +19273,6 @@
});
return hosts;
}
-
function pierceShadowDom(selector, hostElements) {
var targets = [];
var innerHostsAcc = [];
@@ -23305,17 +19290,14 @@
innerHosts: innerHosts
};
}
-
function flatten(input) {
var stack = [];
input.forEach(function (el) {
return stack.push(el);
});
var res = [];
-
while (stack.length) {
var next = stack.pop();
-
if (Array.isArray(next)) {
next.forEach(function (el) {
return stack.push(el);
@@ -23324,60 +19306,47 @@
res.push(next);
}
}
-
return res.reverse();
}
-
function throttle(cb, delay) {
var wait = false;
var savedArgs;
-
var wrapper = function wrapper() {
for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
args[_key] = arguments[_key];
}
-
if (wait) {
savedArgs = args;
return;
}
-
cb.apply(void 0, args);
wait = true;
setTimeout(function () {
wait = false;
-
if (savedArgs) {
wrapper(savedArgs);
savedArgs = null;
}
}, delay);
};
-
return wrapper;
}
-
var updatedArgs = args ? [].concat(source).concat(args) : [source];
-
try {
removeInShadowDom.apply(this, updatedArgs);
} catch (e) {
console.log(e);
}
}
-
function setAttr(source, args) {
function setAttr(source, selector, attr) {
var value = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : "";
-
if (!selector || !attr) {
return;
}
-
if (value.length !== 0 && (nativeIsNaN(parseInt(value, 10)) || parseInt(value, 10) < 0 || parseInt(value, 10) > 32767)) {
return;
}
-
var setAttr = function setAttr() {
var nodes = [].slice.call(document.querySelectorAll(selector));
var set = false;
@@ -23385,71 +19354,48 @@
node.setAttribute(attr, value);
set = true;
});
-
if (set) {
hit(source);
}
};
-
setAttr();
observeDOMChanges(setAttr, true);
}
-
- function hit(source, message) {
+ function hit(source) {
if (source.verbose !== true) {
return;
}
-
try {
var log = console.log.bind(console);
var trace = console.trace.bind(console);
var prefix = source.ruleText || "";
-
if (source.domainName) {
var AG_SCRIPTLET_MARKER = "#%#//";
var UBO_SCRIPTLET_MARKER = "##+js";
var ruleStartIndex;
-
if (source.ruleText.indexOf(AG_SCRIPTLET_MARKER) > -1) {
ruleStartIndex = source.ruleText.indexOf(AG_SCRIPTLET_MARKER);
} else if (source.ruleText.indexOf(UBO_SCRIPTLET_MARKER) > -1) {
ruleStartIndex = source.ruleText.indexOf(UBO_SCRIPTLET_MARKER);
}
-
var rulePart = source.ruleText.slice(ruleStartIndex);
prefix = "".concat(source.domainName).concat(rulePart);
}
-
- var LOG_MARKER = "log: ";
-
- if (message) {
- if (message.indexOf(LOG_MARKER) === -1) {
- log("".concat(prefix, " message:\n").concat(message));
- } else {
- log(message.slice(LOG_MARKER.length));
- }
- }
-
log("".concat(prefix, " trace start"));
-
if (trace) {
trace();
}
-
log("".concat(prefix, " trace end"));
} catch (e) {}
-
if (typeof window.__debug === "function") {
window.__debug(source);
}
}
-
function observeDOMChanges(callback) {
var observeAttrs = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;
var attrsToObserve = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : [];
var THROTTLE_DELAY_MS = 20;
var observer = new MutationObserver(throttle(callbackWrapper, THROTTLE_DELAY_MS));
-
var connect = function connect() {
if (attrsToObserve.length > 0) {
observer.observe(document.documentElement, {
@@ -23466,73 +19412,58 @@
});
}
};
-
var disconnect = function disconnect() {
observer.disconnect();
};
-
function callbackWrapper() {
disconnect();
callback();
connect();
}
-
connect();
}
-
function nativeIsNaN(num) {
var native = Number.isNaN || window.isNaN;
return native(num);
}
-
function throttle(cb, delay) {
var wait = false;
var savedArgs;
-
var wrapper = function wrapper() {
for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
args[_key] = arguments[_key];
}
-
if (wait) {
savedArgs = args;
return;
}
-
cb.apply(void 0, args);
wait = true;
setTimeout(function () {
wait = false;
-
if (savedArgs) {
wrapper(savedArgs);
savedArgs = null;
}
}, delay);
};
-
return wrapper;
}
-
var updatedArgs = args ? [].concat(source).concat(args) : [source];
-
try {
setAttr.apply(this, updatedArgs);
} catch (e) {
console.log(e);
}
}
-
function setConstant(source, args) {
function setConstant(source, property, value, stack) {
if (!property || !matchStackTrace(stack, new Error().stack)) {
return;
}
-
var emptyArr = noopArray();
var emptyObj = noopObject();
var constantValue;
-
if (value === "undefined") {
constantValue = undefined;
} else if (value === "false") {
@@ -23557,11 +19488,9 @@
constantValue = noopPromiseReject;
} else if (/^\d+$/.test(value)) {
constantValue = parseFloat(value);
-
if (nativeIsNaN(constantValue)) {
return;
}
-
if (Math.abs(constantValue) > 32767) {
return;
}
@@ -23576,40 +19505,31 @@
} else {
return;
}
-
var canceled = false;
-
var mustCancel = function mustCancel(value) {
if (canceled) {
return canceled;
}
-
canceled = value !== undefined && constantValue !== undefined && typeof value !== typeof constantValue && value !== null;
return canceled;
};
-
var trapProp = function trapProp(base, prop, configurable, handler) {
if (!handler.init(base[prop])) {
return false;
}
-
var origDescriptor = Object.getOwnPropertyDescriptor(base, prop);
var prevSetter;
-
if (origDescriptor instanceof Object) {
if (!origDescriptor.configurable) {
- var message = "set-constant: property '".concat(prop, "' is not configurable");
+ var message = "Property '".concat(prop, "' is not configurable");
logMessage(source, message);
return false;
}
-
base[prop] = constantValue;
-
if (origDescriptor.set instanceof Function) {
prevSetter = origDescriptor.set;
}
}
-
Object.defineProperty(base, prop, {
configurable: configurable,
get: function get() {
@@ -23619,18 +19539,16 @@
if (prevSetter !== undefined) {
prevSetter(a);
}
-
handler.set(a);
}
});
return true;
};
-
var setChainPropAccess = function setChainPropAccess(owner, property) {
var chainInfo = getPropertyInChain(owner, property);
var base = chainInfo.base;
var prop = chainInfo.prop,
- chain = chainInfo.chain;
+ chain = chainInfo.chain;
var inChainPropHandler = {
factValue: undefined,
init: function init(a) {
@@ -23644,9 +19562,7 @@
if (this.factValue === a) {
return;
}
-
this.factValue = a;
-
if (a instanceof Object) {
setChainPropAccess(a, chain);
}
@@ -23657,7 +19573,6 @@
if (mustCancel(a)) {
return false;
}
-
return true;
},
get: function get() {
@@ -23667,130 +19582,90 @@
if (!mustCancel(a)) {
return;
}
-
constantValue = a;
}
};
-
if (!chain) {
var isTrapped = trapProp(base, prop, false, endPropHandler);
-
if (isTrapped) {
hit(source);
}
-
return;
}
-
if (base !== undefined && base[prop] === null) {
trapProp(base, prop, true, inChainPropHandler);
return;
}
-
if ((base instanceof Object || typeof base === "object") && isEmptyObject(base)) {
trapProp(base, prop, true, inChainPropHandler);
}
-
var propValue = owner[prop];
-
if (propValue instanceof Object || typeof propValue === "object" && propValue !== null) {
setChainPropAccess(propValue, chain);
}
-
trapProp(base, prop, true, inChainPropHandler);
};
-
setChainPropAccess(window, property);
}
-
- function hit(source, message) {
+ function hit(source) {
if (source.verbose !== true) {
return;
}
-
try {
var log = console.log.bind(console);
var trace = console.trace.bind(console);
var prefix = source.ruleText || "";
-
if (source.domainName) {
var AG_SCRIPTLET_MARKER = "#%#//";
var UBO_SCRIPTLET_MARKER = "##+js";
var ruleStartIndex;
-
if (source.ruleText.indexOf(AG_SCRIPTLET_MARKER) > -1) {
ruleStartIndex = source.ruleText.indexOf(AG_SCRIPTLET_MARKER);
} else if (source.ruleText.indexOf(UBO_SCRIPTLET_MARKER) > -1) {
ruleStartIndex = source.ruleText.indexOf(UBO_SCRIPTLET_MARKER);
}
-
var rulePart = source.ruleText.slice(ruleStartIndex);
prefix = "".concat(source.domainName).concat(rulePart);
}
-
- var LOG_MARKER = "log: ";
-
- if (message) {
- if (message.indexOf(LOG_MARKER) === -1) {
- log("".concat(prefix, " message:\n").concat(message));
- } else {
- log(message.slice(LOG_MARKER.length));
- }
- }
-
log("".concat(prefix, " trace start"));
-
if (trace) {
trace();
}
-
log("".concat(prefix, " trace end"));
} catch (e) {}
-
if (typeof window.__debug === "function") {
window.__debug(source);
}
}
-
function logMessage(source, message) {
var forced = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;
-
if (forced || source.verbose) {
console.log("".concat(source.name, ": ").concat(message));
}
}
-
function noopArray() {
return [];
}
-
function noopObject() {
return {};
}
-
function noopFunc() {}
-
function trueFunc() {
return true;
}
-
function falseFunc() {
return false;
}
-
function noopPromiseReject() {
return Promise.reject();
}
-
function noopPromiseResolve() {
var responseBody = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : "{}";
var responseUrl = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : "";
var responseType = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : "default";
-
if (typeof Response === "undefined") {
return;
}
-
var response = new Response(responseBody, {
status: 200,
statusText: "OK"
@@ -23805,19 +19680,15 @@
});
return Promise.resolve(response);
}
-
function getPropertyInChain(base, chain) {
var pos = chain.indexOf(".");
-
if (pos === -1) {
return {
base: base,
prop: chain
};
}
-
var prop = chain.slice(0, pos);
-
if (base === null) {
return {
base: base,
@@ -23825,10 +19696,8 @@
chain: chain
};
}
-
var nextBase = base[prop];
chain = chain.slice(pos + 1);
-
if ((base instanceof Object || typeof base === "object") && isEmptyObject(base)) {
return {
base: base,
@@ -23836,7 +19705,6 @@
chain: chain
};
}
-
if (nextBase === null) {
return {
base: base,
@@ -23844,11 +19712,9 @@
chain: chain
};
}
-
if (nextBase !== undefined) {
return getPropertyInChain(nextBase, chain);
}
-
Object.defineProperty(base, prop, {
configurable: true
});
@@ -23858,149 +19724,169 @@
chain: chain
};
}
-
function toRegExp() {
var input = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : "";
var DEFAULT_VALUE = ".?";
var FORWARD_SLASH = "/";
-
if (input === "") {
return new RegExp(DEFAULT_VALUE);
}
-
if (input[0] === FORWARD_SLASH && input[input.length - 1] === FORWARD_SLASH) {
return new RegExp(input.slice(1, -1));
}
-
var escaped = input.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
return new RegExp(escaped);
}
-
function matchStackTrace(stackMatch, stackTrace) {
if (!stackMatch || stackMatch === "") {
return true;
}
-
if (shouldAbortInlineOrInjectedScript(stackMatch, stackTrace)) {
return true;
}
-
var stackRegexp = toRegExp(stackMatch);
var refinedStackTrace = stackTrace.split("\n").slice(2).map(function (line) {
return line.trim();
}).join("\n");
return getNativeRegexpTest().call(stackRegexp, refinedStackTrace);
}
-
function nativeIsNaN(num) {
var native = Number.isNaN || window.isNaN;
return native(num);
}
-
function isEmptyObject(obj) {
- return Object.keys(obj).length === 0;
+ return Object.keys(obj).length === 0 && !obj.prototype;
}
-
function getNativeRegexpTest() {
return Object.getOwnPropertyDescriptor(RegExp.prototype, "test").value;
}
-
+ function shouldAbortInlineOrInjectedScript(stackMatch, stackTrace) {
+ var INLINE_SCRIPT_STRING = "inlineScript";
+ var INJECTED_SCRIPT_STRING = "injectedScript";
+ var INJECTED_SCRIPT_MARKER = "";
+ var isInlineScript = function isInlineScript(stackMatch) {
+ return stackMatch.indexOf(INLINE_SCRIPT_STRING) > -1;
+ };
+ var isInjectedScript = function isInjectedScript(stackMatch) {
+ return stackMatch.indexOf(INJECTED_SCRIPT_STRING) > -1;
+ };
+ if (!(isInlineScript(stackMatch) || isInjectedScript(stackMatch))) {
+ return false;
+ }
+ var documentURL = window.location.href;
+ var pos = documentURL.indexOf("#");
+ if (pos !== -1) {
+ documentURL = documentURL.slice(0, pos);
+ }
+ var stackSteps = stackTrace.split("\n").slice(2).map(function (line) {
+ return line.trim();
+ });
+ var stackLines = stackSteps.map(function (line) {
+ var stack;
+ var getStackTraceURL = /(.*?@)?(\S+)(:\d+):\d+\)?$/.exec(line);
+ if (getStackTraceURL) {
+ var stackURL = getStackTraceURL[2];
+ if (startsWith(stackURL, "(")) {
+ stackURL = stackURL.slice(1);
+ }
+ if (startsWith(stackURL, INJECTED_SCRIPT_MARKER)) {
+ stackURL = INJECTED_SCRIPT_STRING;
+ var stackFunction = getStackTraceURL[1] !== undefined ? getStackTraceURL[1].slice(0, -1) : line.slice(0, getStackTraceURL.index).trim();
+ if (startsWith(stackFunction, "at")) {
+ stackFunction = stackFunction.slice(2).trim();
+ }
+ stack = "".concat(stackFunction, " ").concat(stackURL).trim();
+ } else {
+ stack = stackURL;
+ }
+ } else {
+ stack = line;
+ }
+ return stack;
+ });
+ if (stackLines) {
+ for (var index = 0; index < stackLines.length; index += 1) {
+ if (isInlineScript(stackMatch) && documentURL === stackLines[index]) {
+ return true;
+ }
+ if (isInjectedScript(stackMatch) && startsWith(stackLines[index], INJECTED_SCRIPT_STRING)) {
+ return true;
+ }
+ }
+ }
+ return false;
+ }
var updatedArgs = args ? [].concat(source).concat(args) : [source];
-
try {
setConstant.apply(this, updatedArgs);
} catch (e) {
console.log(e);
}
}
-
function setCookie(source, args) {
function setCookie(source, name, value) {
var path = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : "/";
- var validValue = getLimitedCookieValue(source, value);
-
+ var validValue = getLimitedCookieValue(value);
if (validValue === null) {
logMessage(source, "Invalid cookie value: '".concat(validValue, "'"));
return;
}
-
- var cookieData = concatCookieNameValuePath(source, name, validValue, path);
-
- if (cookieData) {
- hit(source);
- document.cookie = cookieData;
+ if (!isValidCookiePath(path)) {
+ logMessage(source, "Invalid cookie path: '".concat(path, "'"));
+ return;
+ }
+ var cookieToSet = concatCookieNameValuePath(name, validValue, path);
+ if (!cookieToSet) {
+ return;
}
+ hit(source);
+ document.cookie = cookieToSet;
}
-
- function hit(source, message) {
+ function hit(source) {
if (source.verbose !== true) {
return;
}
-
try {
var log = console.log.bind(console);
var trace = console.trace.bind(console);
var prefix = source.ruleText || "";
-
if (source.domainName) {
var AG_SCRIPTLET_MARKER = "#%#//";
var UBO_SCRIPTLET_MARKER = "##+js";
var ruleStartIndex;
-
if (source.ruleText.indexOf(AG_SCRIPTLET_MARKER) > -1) {
ruleStartIndex = source.ruleText.indexOf(AG_SCRIPTLET_MARKER);
} else if (source.ruleText.indexOf(UBO_SCRIPTLET_MARKER) > -1) {
ruleStartIndex = source.ruleText.indexOf(UBO_SCRIPTLET_MARKER);
}
-
var rulePart = source.ruleText.slice(ruleStartIndex);
prefix = "".concat(source.domainName).concat(rulePart);
}
-
- var LOG_MARKER = "log: ";
-
- if (message) {
- if (message.indexOf(LOG_MARKER) === -1) {
- log("".concat(prefix, " message:\n").concat(message));
- } else {
- log(message.slice(LOG_MARKER.length));
- }
- }
-
log("".concat(prefix, " trace start"));
-
if (trace) {
trace();
}
-
log("".concat(prefix, " trace end"));
} catch (e) {}
-
if (typeof window.__debug === "function") {
window.__debug(source);
}
}
-
function logMessage(source, message) {
var forced = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;
-
if (forced || source.verbose) {
console.log("".concat(source.name, ": ").concat(message));
}
}
-
function nativeIsNaN(num) {
var native = Number.isNaN || window.isNaN;
return native(num);
}
-
- function getLimitedCookieValue(source, value) {
+ function getLimitedCookieValue(value) {
if (!value) {
return null;
}
-
var validValue;
-
if (value === "true") {
validValue = "true";
} else if (value === "True") {
@@ -24023,163 +19909,117 @@
validValue = "OK";
} else if (/^\d+$/.test(value)) {
validValue = parseFloat(value);
-
if (nativeIsNaN(validValue)) {
- logMessage(source, "Invalid cookie value: '".concat(value, "'"));
return null;
}
-
if (Math.abs(validValue) < 0 || Math.abs(validValue) > 15) {
- logMessage(source, "Invalid cookie value: '".concat(value, "'"));
return null;
}
} else {
return null;
}
-
return validValue;
}
-
- function concatCookieNameValuePath(source, rawName, rawValue, rawPath) {
- if (!isValidCookieRawPath(rawPath)) {
- logMessage(source, "Invalid cookie path: '".concat(rawPath, "'"));
- return null;
- }
-
- return "".concat(encodeURIComponent(rawName), "=").concat(encodeURIComponent(rawValue), "; ").concat(getCookiePath(rawPath));
+ function concatCookieNameValuePath(rawName, rawValue, rawPath) {
+ return "".concat(encodeURIComponent(rawName), "=").concat(encodeURIComponent(rawValue), "; ").concat(getCookiePath(rawPath), ";");
}
-
- function isValidCookieRawPath(rawPath) {
+ function isValidCookiePath(rawPath) {
return rawPath === "/" || rawPath === "none";
}
-
function getCookiePath(rawPath) {
if (rawPath === "/") {
return "path=/";
}
-
return "";
}
-
var updatedArgs = args ? [].concat(source).concat(args) : [source];
-
try {
setCookie.apply(this, updatedArgs);
} catch (e) {
console.log(e);
}
}
-
function setCookieReload(source, args) {
function setCookieReload(source, name, value) {
var path = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : "/";
-
- if (isCookieSetWithValue(name, value)) {
+ if (isCookieSetWithValue(document.cookie, name, value)) {
return;
}
-
- var validValue = getLimitedCookieValue(source, value);
-
+ var validValue = getLimitedCookieValue(value);
if (validValue === null) {
- logMessage(source, "Invalid cookie value: '".concat(validValue, "'"));
+ logMessage(source, "Invalid cookie value: '".concat(value, "'"));
return;
}
-
- var cookieData = concatCookieNameValuePath(source, name, validValue, path);
-
- if (cookieData) {
- document.cookie = cookieData;
- hit(source);
-
- if (isCookieSetWithValue(document.cookie, name, value)) {
- window.location.reload();
- }
+ if (!isValidCookiePath(path)) {
+ logMessage(source, "Invalid cookie path: '".concat(path, "'"));
+ return;
+ }
+ var cookieToSet = concatCookieNameValuePath(name, validValue, path);
+ if (!cookieToSet) {
+ return;
+ }
+ document.cookie = cookieToSet;
+ hit(source);
+ if (isCookieSetWithValue(document.cookie, name, value)) {
+ window.location.reload();
}
}
-
- function hit(source, message) {
+ function hit(source) {
if (source.verbose !== true) {
return;
}
-
try {
var log = console.log.bind(console);
var trace = console.trace.bind(console);
var prefix = source.ruleText || "";
-
if (source.domainName) {
var AG_SCRIPTLET_MARKER = "#%#//";
var UBO_SCRIPTLET_MARKER = "##+js";
var ruleStartIndex;
-
if (source.ruleText.indexOf(AG_SCRIPTLET_MARKER) > -1) {
ruleStartIndex = source.ruleText.indexOf(AG_SCRIPTLET_MARKER);
} else if (source.ruleText.indexOf(UBO_SCRIPTLET_MARKER) > -1) {
ruleStartIndex = source.ruleText.indexOf(UBO_SCRIPTLET_MARKER);
}
-
var rulePart = source.ruleText.slice(ruleStartIndex);
prefix = "".concat(source.domainName).concat(rulePart);
}
-
- var LOG_MARKER = "log: ";
-
- if (message) {
- if (message.indexOf(LOG_MARKER) === -1) {
- log("".concat(prefix, " message:\n").concat(message));
- } else {
- log(message.slice(LOG_MARKER.length));
- }
- }
-
log("".concat(prefix, " trace start"));
-
if (trace) {
trace();
}
-
log("".concat(prefix, " trace end"));
} catch (e) {}
-
if (typeof window.__debug === "function") {
window.__debug(source);
}
}
-
function logMessage(source, message) {
var forced = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;
-
if (forced || source.verbose) {
console.log("".concat(source.name, ": ").concat(message));
}
}
-
function nativeIsNaN(num) {
var native = Number.isNaN || window.isNaN;
return native(num);
}
-
function isCookieSetWithValue(cookieString, name, value) {
return cookieString.split(";").some(function (cookieStr) {
var pos = cookieStr.indexOf("=");
-
if (pos === -1) {
return false;
}
-
var cookieName = cookieStr.slice(0, pos).trim();
var cookieValue = cookieStr.slice(pos + 1).trim();
return name === cookieName && value === cookieValue;
});
}
-
- function getLimitedCookieValue(source, value) {
+ function getLimitedCookieValue(value) {
if (!value) {
return null;
}
-
var validValue;
-
if (value === "true") {
validValue = "true";
} else if (value === "True") {
@@ -24202,135 +20042,94 @@
validValue = "OK";
} else if (/^\d+$/.test(value)) {
validValue = parseFloat(value);
-
if (nativeIsNaN(validValue)) {
- logMessage(source, "Invalid cookie value: '".concat(value, "'"));
return null;
}
-
if (Math.abs(validValue) < 0 || Math.abs(validValue) > 15) {
- logMessage(source, "Invalid cookie value: '".concat(value, "'"));
return null;
}
} else {
return null;
}
-
return validValue;
}
-
- function concatCookieNameValuePath(source, rawName, rawValue, rawPath) {
- if (!isValidCookieRawPath(rawPath)) {
- logMessage(source, "Invalid cookie path: '".concat(rawPath, "'"));
- return null;
- }
-
- return "".concat(encodeURIComponent(rawName), "=").concat(encodeURIComponent(rawValue), "; ").concat(getCookiePath(rawPath));
+ function concatCookieNameValuePath(rawName, rawValue, rawPath) {
+ return "".concat(encodeURIComponent(rawName), "=").concat(encodeURIComponent(rawValue), "; ").concat(getCookiePath(rawPath), ";");
}
-
- function isValidCookieRawPath(rawPath) {
+ function isValidCookiePath(rawPath) {
return rawPath === "/" || rawPath === "none";
}
-
function getCookiePath(rawPath) {
if (rawPath === "/") {
return "path=/";
}
-
return "";
}
-
var updatedArgs = args ? [].concat(source).concat(args) : [source];
-
try {
setCookieReload.apply(this, updatedArgs);
} catch (e) {
console.log(e);
}
}
-
function setLocalStorageItem(source, args) {
function setLocalStorageItem(source, key, value) {
if (typeof key === "undefined") {
logMessage(source, "Item key should be specified.");
return;
}
-
- var validValue = getLimitedStorageItemValue(source, value);
-
- if (validValue === null) {
- logMessage(source, "Invalid cookie value: '".concat(validValue, "'"));
+ var validValue;
+ try {
+ validValue = getLimitedStorageItemValue(value);
+ } catch (_unused) {
+ logMessage(source, "Invalid storage item value: '".concat(value, "'"));
return;
}
-
var _window = window,
- localStorage = _window.localStorage;
+ localStorage = _window.localStorage;
setStorageItem(source, localStorage, key, validValue);
hit(source);
}
-
- function hit(source, message) {
+ function hit(source) {
if (source.verbose !== true) {
return;
}
-
try {
var log = console.log.bind(console);
var trace = console.trace.bind(console);
var prefix = source.ruleText || "";
-
if (source.domainName) {
var AG_SCRIPTLET_MARKER = "#%#//";
var UBO_SCRIPTLET_MARKER = "##+js";
var ruleStartIndex;
-
if (source.ruleText.indexOf(AG_SCRIPTLET_MARKER) > -1) {
ruleStartIndex = source.ruleText.indexOf(AG_SCRIPTLET_MARKER);
} else if (source.ruleText.indexOf(UBO_SCRIPTLET_MARKER) > -1) {
ruleStartIndex = source.ruleText.indexOf(UBO_SCRIPTLET_MARKER);
}
-
var rulePart = source.ruleText.slice(ruleStartIndex);
prefix = "".concat(source.domainName).concat(rulePart);
}
-
- var LOG_MARKER = "log: ";
-
- if (message) {
- if (message.indexOf(LOG_MARKER) === -1) {
- log("".concat(prefix, " message:\n").concat(message));
- } else {
- log(message.slice(LOG_MARKER.length));
- }
- }
-
log("".concat(prefix, " trace start"));
-
if (trace) {
trace();
}
-
log("".concat(prefix, " trace end"));
} catch (e) {}
-
if (typeof window.__debug === "function") {
window.__debug(source);
}
}
-
function logMessage(source, message) {
var forced = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;
-
if (forced || source.verbose) {
console.log("".concat(source.name, ": ").concat(message));
}
}
-
function nativeIsNaN(num) {
var native = Number.isNaN || window.isNaN;
return native(num);
}
-
function setStorageItem(source, storage, key, value) {
try {
storage.setItem(key, value);
@@ -24339,14 +20138,11 @@
logMessage(source, message);
}
}
-
- function getLimitedStorageItemValue(source, value) {
- if (!value) {
- return null;
+ function getLimitedStorageItemValue(value) {
+ if (typeof value !== "string") {
+ throw new Error("Invalid value");
}
-
var validValue;
-
if (value === "undefined") {
validValue = undefined;
} else if (value === "false") {
@@ -24363,36 +20159,28 @@
validValue = "";
} else if (/^\d+$/.test(value)) {
validValue = parseFloat(value);
-
if (nativeIsNaN(validValue)) {
- logMessage(source, "Invalid storage item value: '".concat(value, "'"));
- return null;
+ throw new Error("Invalid value");
}
-
if (Math.abs(validValue) > 32767) {
- logMessage(source, "Invalid storage item value: '".concat(value, "'"));
- return null;
+ throw new Error("Invalid value");
}
} else if (value === "yes") {
validValue = "yes";
} else if (value === "no") {
validValue = "no";
} else {
- return null;
+ throw new Error("Invalid value");
}
-
return validValue;
}
-
var updatedArgs = args ? [].concat(source).concat(args) : [source];
-
try {
setLocalStorageItem.apply(this, updatedArgs);
} catch (e) {
console.log(e);
}
}
-
function setPopadsDummy(source, args) {
function setPopadsDummy(source) {
delete window.PopAds;
@@ -24412,97 +20200,101 @@
}
});
}
-
- function hit(source, message) {
+ function hit(source) {
if (source.verbose !== true) {
return;
}
-
try {
var log = console.log.bind(console);
var trace = console.trace.bind(console);
var prefix = source.ruleText || "";
-
if (source.domainName) {
var AG_SCRIPTLET_MARKER = "#%#//";
var UBO_SCRIPTLET_MARKER = "##+js";
var ruleStartIndex;
-
if (source.ruleText.indexOf(AG_SCRIPTLET_MARKER) > -1) {
ruleStartIndex = source.ruleText.indexOf(AG_SCRIPTLET_MARKER);
} else if (source.ruleText.indexOf(UBO_SCRIPTLET_MARKER) > -1) {
ruleStartIndex = source.ruleText.indexOf(UBO_SCRIPTLET_MARKER);
}
-
var rulePart = source.ruleText.slice(ruleStartIndex);
prefix = "".concat(source.domainName).concat(rulePart);
}
-
- var LOG_MARKER = "log: ";
-
- if (message) {
- if (message.indexOf(LOG_MARKER) === -1) {
- log("".concat(prefix, " message:\n").concat(message));
- } else {
- log(message.slice(LOG_MARKER.length));
- }
- }
-
log("".concat(prefix, " trace start"));
-
if (trace) {
trace();
}
-
log("".concat(prefix, " trace end"));
} catch (e) {}
-
if (typeof window.__debug === "function") {
window.__debug(source);
}
}
-
var updatedArgs = args ? [].concat(source).concat(args) : [source];
-
try {
setPopadsDummy.apply(this, updatedArgs);
} catch (e) {
console.log(e);
}
}
-
function setSessionStorageItem(source, args) {
function setSessionStorageItem(source, key, value) {
if (typeof key === "undefined") {
logMessage(source, "Item key should be specified.");
return;
}
-
- var validValue = getLimitedStorageItemValue(source, value);
-
- if (validValue === null) {
- logMessage(source, "Invalid cookie value: '".concat(validValue, "'"));
+ var validValue;
+ try {
+ validValue = getLimitedStorageItemValue(value);
+ } catch (_unused) {
+ logMessage(source, "Invalid storage item value: '".concat(value, "'"));
+ return;
+ }
+ var _window = window,
+ sessionStorage = _window.sessionStorage;
+ setStorageItem(source, sessionStorage, key, validValue);
+ hit(source);
+ }
+ function hit(source) {
+ if (source.verbose !== true) {
return;
}
-
- var _window = window,
- sessionStorage = _window.sessionStorage;
- setStorageItem(source, sessionStorage, key, validValue);
+ try {
+ var log = console.log.bind(console);
+ var trace = console.trace.bind(console);
+ var prefix = source.ruleText || "";
+ if (source.domainName) {
+ var AG_SCRIPTLET_MARKER = "#%#//";
+ var UBO_SCRIPTLET_MARKER = "##+js";
+ var ruleStartIndex;
+ if (source.ruleText.indexOf(AG_SCRIPTLET_MARKER) > -1) {
+ ruleStartIndex = source.ruleText.indexOf(AG_SCRIPTLET_MARKER);
+ } else if (source.ruleText.indexOf(UBO_SCRIPTLET_MARKER) > -1) {
+ ruleStartIndex = source.ruleText.indexOf(UBO_SCRIPTLET_MARKER);
+ }
+ var rulePart = source.ruleText.slice(ruleStartIndex);
+ prefix = "".concat(source.domainName).concat(rulePart);
+ }
+ log("".concat(prefix, " trace start"));
+ if (trace) {
+ trace();
+ }
+ log("".concat(prefix, " trace end"));
+ } catch (e) {}
+ if (typeof window.__debug === "function") {
+ window.__debug(source);
+ }
}
-
function logMessage(source, message) {
var forced = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;
-
if (forced || source.verbose) {
console.log("".concat(source.name, ": ").concat(message));
}
}
-
function nativeIsNaN(num) {
var native = Number.isNaN || window.isNaN;
return native(num);
}
-
function setStorageItem(source, storage, key, value) {
try {
storage.setItem(key, value);
@@ -24511,14 +20303,11 @@
logMessage(source, message);
}
}
-
- function getLimitedStorageItemValue(source, value) {
- if (!value) {
- return null;
+ function getLimitedStorageItemValue(value) {
+ if (typeof value !== "string") {
+ throw new Error("Invalid value");
}
-
var validValue;
-
if (value === "undefined") {
validValue = undefined;
} else if (value === "false") {
@@ -24535,45 +20324,35 @@
validValue = "";
} else if (/^\d+$/.test(value)) {
validValue = parseFloat(value);
-
if (nativeIsNaN(validValue)) {
- logMessage(source, "Invalid storage item value: '".concat(value, "'"));
- return null;
+ throw new Error("Invalid value");
}
-
if (Math.abs(validValue) > 32767) {
- logMessage(source, "Invalid storage item value: '".concat(value, "'"));
- return null;
+ throw new Error("Invalid value");
}
} else if (value === "yes") {
validValue = "yes";
} else if (value === "no") {
validValue = "no";
} else {
- return null;
+ throw new Error("Invalid value");
}
-
return validValue;
}
-
var updatedArgs = args ? [].concat(source).concat(args) : [source];
-
try {
setSessionStorageItem.apply(this, updatedArgs);
} catch (e) {
console.log(e);
}
}
-
function trustedClickElement(source, args) {
function trustedClickElement(source, selectors) {
var extraMatch = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : "";
var delay = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : NaN;
-
if (!selectors) {
return;
}
-
var OBSERVER_TIMEOUT_MS = 1e4;
var THROTTLE_DELAY_MS = 20;
var COOKIE_MATCH_MARKER = "cookie:";
@@ -24582,22 +20361,18 @@
var COOKIE_STRING_DELIMITER = ";";
var EXTRA_MATCH_DELIMITER = /(,\s*){1}(?=cookie:|localStorage:)/;
var parsedDelay;
-
if (delay) {
parsedDelay = parseInt(delay, 10);
var isValidDelay = !Number.isNaN(parsedDelay) || parsedDelay < OBSERVER_TIMEOUT_MS;
-
if (!isValidDelay) {
var message = "Passed delay '".concat(delay, "' is invalid or bigger than ").concat(OBSERVER_TIMEOUT_MS, " ms");
logMessage(source, message);
return;
}
}
-
var canClick = !parsedDelay;
var cookieMatches = [];
var localStorageMatches = [];
-
if (extraMatch) {
var parsedExtraMatch = extraMatch.split(EXTRA_MATCH_DELIMITER).map(function (matchStr) {
return matchStr.trim();
@@ -24607,115 +20382,91 @@
var cookieMatch = matchStr.replace(COOKIE_MATCH_MARKER, "");
cookieMatches.push(cookieMatch);
}
-
if (matchStr.indexOf(LOCAL_STORAGE_MATCH_MARKER) > -1) {
var localStorageMatch = matchStr.replace(LOCAL_STORAGE_MATCH_MARKER, "");
localStorageMatches.push(localStorageMatch);
}
});
}
-
if (cookieMatches.length > 0) {
var parsedCookieMatches = parseCookieString(cookieMatches.join(COOKIE_STRING_DELIMITER));
var parsedCookies = parseCookieString(document.cookie);
var cookieKeys = Object.keys(parsedCookies);
-
if (cookieKeys.length === 0) {
return;
}
-
var cookiesMatched = Object.keys(parsedCookieMatches).every(function (key) {
var valueMatch = parsedCookieMatches[key] ? toRegExp(parsedCookieMatches[key]) : null;
var keyMatch = toRegExp(key);
return cookieKeys.some(function (key) {
var keysMatched = keyMatch.test(key);
-
if (!keysMatched) {
return false;
}
-
if (!valueMatch) {
return true;
}
-
return valueMatch.test(parsedCookies[key]);
});
});
-
if (!cookiesMatched) {
return;
}
}
-
if (localStorageMatches.length > 0) {
var localStorageMatched = localStorageMatches.every(function (str) {
var itemValue = window.localStorage.getItem(str);
return itemValue || itemValue === "";
});
-
if (!localStorageMatched) {
return;
}
}
-
var selectorsSequence = selectors.split(SELECTORS_DELIMITER).map(function (selector) {
return selector.trim();
});
-
var createElementObj = function createElementObj(element) {
return {
element: element || null,
clicked: false
};
};
-
var elementsSequence = Array(selectorsSequence.length).fill(createElementObj());
-
var clickElementsBySequence = function clickElementsBySequence() {
for (var i = 0; i < elementsSequence.length; i += 1) {
var elementObj = elementsSequence[i];
-
if (!elementObj.element) {
break;
}
-
if (!elementObj.clicked) {
elementObj.element.click();
elementObj.clicked = true;
}
}
-
var allElementsClicked = elementsSequence.every(function (elementObj) {
return elementObj.clicked === true;
});
-
if (allElementsClicked) {
hit(source);
}
};
-
var handleElement = function handleElement(element, i) {
var elementObj = createElementObj(element);
elementsSequence[i] = elementObj;
-
if (canClick) {
clickElementsBySequence();
}
};
-
var findElements = function findElements(mutations, observer) {
var fulfilledSelectors = [];
selectorsSequence.forEach(function (selector, i) {
if (!selector) {
return;
}
-
var element = document.querySelector(selector);
-
if (!element) {
return;
}
-
handleElement(element, i);
fulfilledSelectors.push(selector);
});
@@ -24725,97 +20476,69 @@
var allSelectorsFulfilled = selectorsSequence.every(function (selector) {
return selector === null;
});
-
if (allSelectorsFulfilled) {
observer.disconnect();
}
};
-
var observer = new MutationObserver(throttle(findElements, THROTTLE_DELAY_MS));
observer.observe(document.documentElement, {
attributes: true,
childList: true,
subtree: true
});
-
if (parsedDelay) {
setTimeout(function () {
clickElementsBySequence();
canClick = true;
}, parsedDelay);
}
-
setTimeout(function () {
return observer.disconnect();
}, OBSERVER_TIMEOUT_MS);
}
-
- function hit(source, message) {
+ function hit(source) {
if (source.verbose !== true) {
return;
}
-
try {
var log = console.log.bind(console);
var trace = console.trace.bind(console);
var prefix = source.ruleText || "";
-
if (source.domainName) {
var AG_SCRIPTLET_MARKER = "#%#//";
var UBO_SCRIPTLET_MARKER = "##+js";
var ruleStartIndex;
-
if (source.ruleText.indexOf(AG_SCRIPTLET_MARKER) > -1) {
ruleStartIndex = source.ruleText.indexOf(AG_SCRIPTLET_MARKER);
} else if (source.ruleText.indexOf(UBO_SCRIPTLET_MARKER) > -1) {
ruleStartIndex = source.ruleText.indexOf(UBO_SCRIPTLET_MARKER);
}
-
var rulePart = source.ruleText.slice(ruleStartIndex);
prefix = "".concat(source.domainName).concat(rulePart);
}
-
- var LOG_MARKER = "log: ";
-
- if (message) {
- if (message.indexOf(LOG_MARKER) === -1) {
- log("".concat(prefix, " message:\n").concat(message));
- } else {
- log(message.slice(LOG_MARKER.length));
- }
- }
-
log("".concat(prefix, " trace start"));
-
if (trace) {
trace();
}
-
log("".concat(prefix, " trace end"));
} catch (e) {}
-
if (typeof window.__debug === "function") {
window.__debug(source);
}
}
-
function toRegExp() {
var input = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : "";
var DEFAULT_VALUE = ".?";
var FORWARD_SLASH = "/";
-
if (input === "") {
return new RegExp(DEFAULT_VALUE);
}
-
if (input[0] === FORWARD_SLASH && input[input.length - 1] === FORWARD_SLASH) {
return new RegExp(input.slice(1, -1));
}
-
var escaped = input.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
return new RegExp(escaped);
}
-
function parseCookieString(cookieString) {
var COOKIE_DELIMITER = "=";
var COOKIE_PAIRS_DELIMITER = ";";
@@ -24825,246 +20548,174 @@
var cookieKey;
var cookieValue;
var delimiterIndex = singleCookie.indexOf(COOKIE_DELIMITER);
-
if (delimiterIndex === -1) {
cookieKey = singleCookie.trim();
} else {
cookieKey = singleCookie.slice(0, delimiterIndex).trim();
cookieValue = singleCookie.slice(delimiterIndex + 1);
}
-
cookieData[cookieKey] = cookieValue || null;
});
return cookieData;
}
-
function throttle(cb, delay) {
var wait = false;
var savedArgs;
-
var wrapper = function wrapper() {
for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
args[_key] = arguments[_key];
}
-
if (wait) {
savedArgs = args;
return;
}
-
cb.apply(void 0, args);
wait = true;
setTimeout(function () {
wait = false;
-
if (savedArgs) {
wrapper(savedArgs);
savedArgs = null;
}
}, delay);
};
-
return wrapper;
}
-
function logMessage(source, message) {
var forced = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;
-
if (forced || source.verbose) {
console.log("".concat(source.name, ": ").concat(message));
}
}
-
var updatedArgs = args ? [].concat(source).concat(args) : [source];
-
try {
trustedClickElement.apply(this, updatedArgs);
} catch (e) {
console.log(e);
}
}
-
function trustedReplaceFetchResponse(source, args) {
function trustedReplaceFetchResponse(source) {
var pattern = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : "";
var replacement = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : "";
var propsToMatch = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : "";
-
if (typeof fetch === "undefined" || typeof Proxy === "undefined" || typeof Response === "undefined") {
return;
}
-
if (pattern === "" && replacement !== "") {
logMessage(source, "Pattern argument should not be empty string.");
return;
}
-
var shouldLog = pattern === "" && replacement === "";
var nativeFetch = fetch;
var shouldReplace = false;
var fetchData;
-
- var handlerWrapper = function () {
- var _ref = asyncToGenerator(regenerator.mark(function _callee(target, thisArg, args) {
- var forgeResponse;
- return regenerator.wrap(function _callee$(_context) {
- while (1) {
- switch (_context.prev = _context.next) {
- case 0:
- fetchData = getFetchData(args);
-
- if (!shouldLog) {
- _context.next = 5;
- break;
- }
-
- logMessage(source, "fetch( ".concat(objectToString(fetchData), " )"), true);
- hit(source);
- return _context.abrupt("return", Reflect.apply(target, thisArg, args));
-
- case 5:
- shouldReplace = matchRequestProps(source, propsToMatch, fetchData);
-
- if (shouldReplace) {
- _context.next = 8;
- break;
- }
-
- return _context.abrupt("return", Reflect.apply(target, thisArg, args));
-
- case 8:
- forgeResponse = function forgeResponse(response, textContent) {
- var bodyUsed = response.bodyUsed,
- headers = response.headers,
- ok = response.ok,
- redirected = response.redirected,
- status = response.status,
- statusText = response.statusText,
- type = response.type,
- url = response.url;
- var forgedResponse = new Response(textContent, {
- status: status,
- statusText: statusText,
- headers: headers
- });
- Object.defineProperties(forgedResponse, {
- url: {
- value: url
- },
- type: {
- value: type
- },
- ok: {
- value: ok
- },
- bodyUsed: {
- value: bodyUsed
- },
- redirected: {
- value: redirected
- }
- });
- return forgedResponse;
- };
-
- return _context.abrupt("return", nativeFetch.apply(void 0, toConsumableArray(args)).then(function (response) {
- return response.text().then(function (bodyText) {
- var patternRegexp = pattern === "*" ? toRegExp() : toRegExp(pattern);
- var modifiedTextContent = bodyText.replace(patternRegexp, replacement);
- var forgedResponse = forgeResponse(response, modifiedTextContent);
- hit(source);
- return forgedResponse;
- }).catch(function () {
- var fetchDataStr = objectToString(fetchData);
- var message = "Response body can't be converted to text: ".concat(fetchDataStr);
- logMessage(source, message);
- return Reflect.apply(target, thisArg, args);
- });
- }).catch(function () {
- return Reflect.apply(target, thisArg, args);
- }));
-
- case 10:
- case "end":
- return _context.stop();
- }
+ var handlerWrapper = function handlerWrapper(target, thisArg, args) {
+ fetchData = getFetchData(args);
+ if (shouldLog) {
+ logMessage(source, "fetch( ".concat(objectToString(fetchData), " )"), true);
+ hit(source);
+ return Reflect.apply(target, thisArg, args);
+ }
+ shouldReplace = matchRequestProps(source, propsToMatch, fetchData);
+ if (!shouldReplace) {
+ return Reflect.apply(target, thisArg, args);
+ }
+ var forgeResponse = function forgeResponse(response, textContent) {
+ var bodyUsed = response.bodyUsed,
+ headers = response.headers,
+ ok = response.ok,
+ redirected = response.redirected,
+ status = response.status,
+ statusText = response.statusText,
+ type = response.type,
+ url = response.url;
+ var forgedResponse = new Response(textContent, {
+ status: status,
+ statusText: statusText,
+ headers: headers
+ });
+ Object.defineProperties(forgedResponse, {
+ url: {
+ value: url
+ },
+ type: {
+ value: type
+ },
+ ok: {
+ value: ok
+ },
+ bodyUsed: {
+ value: bodyUsed
+ },
+ redirected: {
+ value: redirected
}
- }, _callee);
- }));
-
- return function handlerWrapper(_x, _x2, _x3) {
- return _ref.apply(this, arguments);
+ });
+ return forgedResponse;
};
- }();
-
+ return nativeFetch.apply(null, args).then(function (response) {
+ return response.text().then(function (bodyText) {
+ var patternRegexp = pattern === "*" ? /(\n|.)*/ : toRegExp(pattern);
+ var modifiedTextContent = bodyText.replace(patternRegexp, replacement);
+ var forgedResponse = forgeResponse(response, modifiedTextContent);
+ hit(source);
+ return forgedResponse;
+ }).catch(function () {
+ var fetchDataStr = objectToString(fetchData);
+ var message = "Response body can't be converted to text: ".concat(fetchDataStr);
+ logMessage(source, message);
+ return Reflect.apply(target, thisArg, args);
+ });
+ }).catch(function () {
+ return Reflect.apply(target, thisArg, args);
+ });
+ };
var fetchHandler = {
apply: handlerWrapper
};
fetch = new Proxy(fetch, fetchHandler);
}
-
- function hit(source, message) {
+ function hit(source) {
if (source.verbose !== true) {
return;
}
-
try {
var log = console.log.bind(console);
var trace = console.trace.bind(console);
var prefix = source.ruleText || "";
-
if (source.domainName) {
var AG_SCRIPTLET_MARKER = "#%#//";
var UBO_SCRIPTLET_MARKER = "##+js";
var ruleStartIndex;
-
if (source.ruleText.indexOf(AG_SCRIPTLET_MARKER) > -1) {
ruleStartIndex = source.ruleText.indexOf(AG_SCRIPTLET_MARKER);
} else if (source.ruleText.indexOf(UBO_SCRIPTLET_MARKER) > -1) {
ruleStartIndex = source.ruleText.indexOf(UBO_SCRIPTLET_MARKER);
}
-
var rulePart = source.ruleText.slice(ruleStartIndex);
prefix = "".concat(source.domainName).concat(rulePart);
}
-
- var LOG_MARKER = "log: ";
-
- if (message) {
- if (message.indexOf(LOG_MARKER) === -1) {
- log("".concat(prefix, " message:\n").concat(message));
- } else {
- log(message.slice(LOG_MARKER.length));
- }
- }
-
log("".concat(prefix, " trace start"));
-
if (trace) {
trace();
}
-
log("".concat(prefix, " trace end"));
} catch (e) {}
-
if (typeof window.__debug === "function") {
window.__debug(source);
}
}
-
function logMessage(source, message) {
var forced = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;
-
if (forced || source.verbose) {
console.log("".concat(source.name, ": ").concat(message));
}
}
-
function getFetchData(args) {
var fetchPropsObj = {};
var fetchUrl;
var fetchInit;
-
if (args[0] instanceof Request) {
var requestData = getRequestData(args[0]);
fetchUrl = requestData.url;
@@ -25073,40 +20724,31 @@
fetchUrl = args[0];
fetchInit = args[1];
}
-
fetchPropsObj.url = fetchUrl;
-
if (fetchInit instanceof Object) {
Object.keys(fetchInit).forEach(function (prop) {
fetchPropsObj[prop] = fetchInit[prop];
});
}
-
return fetchPropsObj;
}
-
function objectToString(obj) {
return isEmptyObject(obj) ? "{}" : getObjectEntries(obj).map(function (pair) {
var key = pair[0];
var value = pair[1];
var recordValueStr = value;
-
if (value instanceof Object) {
recordValueStr = "{ ".concat(objectToString(value), " }");
}
-
return "".concat(key, ':"').concat(recordValueStr, '"');
}).join(" ");
}
-
function matchRequestProps(source, propsToMatch, requestData) {
if (propsToMatch === "" || propsToMatch === "*") {
return true;
}
-
var isMatched;
var parsedData = parseMatchProps(propsToMatch);
-
if (!validateParsedData(parsedData)) {
logMessage(source, "Invalid parameter: ".concat(propsToMatch));
isMatched = false;
@@ -25117,55 +20759,42 @@
return Object.prototype.hasOwnProperty.call(requestData, matchKey) && matchValue.test(requestData[matchKey]);
});
}
-
return isMatched;
}
-
function toRegExp() {
var input = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : "";
var DEFAULT_VALUE = ".?";
var FORWARD_SLASH = "/";
-
if (input === "") {
return new RegExp(DEFAULT_VALUE);
}
-
if (input[0] === FORWARD_SLASH && input[input.length - 1] === FORWARD_SLASH) {
return new RegExp(input.slice(1, -1));
}
-
var escaped = input.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
return new RegExp(escaped);
}
-
function isValidStrPattern(input) {
var FORWARD_SLASH = "/";
var str = escapeRegExp(input);
-
if (input[0] === FORWARD_SLASH && input[input.length - 1] === FORWARD_SLASH) {
str = input.slice(1, -1);
}
-
var isValid;
-
try {
isValid = new RegExp(str);
isValid = true;
} catch (e) {
isValid = false;
}
-
return isValid;
}
-
function escapeRegExp(str) {
return str.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
}
-
function isEmptyObject(obj) {
- return Object.keys(obj).length === 0;
+ return Object.keys(obj).length === 0 && !obj.prototype;
}
-
function getRequestData(request) {
var requestInitOptions = getRequestProps();
var entries = requestInitOptions.map(function (key) {
@@ -25174,7 +20803,9 @@
});
return getObjectFromEntries(entries);
}
-
+ function getRequestProps() {
+ return ["url", "method", "headers", "body", "mode", "credentials", "cache", "redirect", "referrer", "referrerPolicy", "integrity", "keepalive", "signal"];
+ }
function getObjectEntries(object) {
var keys = Object.keys(object);
var entries = [];
@@ -25183,7 +20814,6 @@
});
return entries;
}
-
function getObjectFromEntries(entries) {
var output = entries.reduce(function (acc, el) {
var key = el[0];
@@ -25193,7 +20823,6 @@
}, {});
return output;
}
-
function parseMatchProps(propsToMatchStr) {
var PROPS_DIVIDER = " ";
var PAIRS_MARKER = ":";
@@ -25204,7 +20833,6 @@
var dividerInd = prop.indexOf(PAIRS_MARKER);
var key = prop.slice(0, dividerInd);
var hasLegalMatchProp = LEGAL_MATCH_PROPS.indexOf(key) !== -1;
-
if (hasLegalMatchProp) {
var value = prop.slice(dividerInd + 1);
propsObj[key] = value;
@@ -25214,13 +20842,11 @@
});
return propsObj;
}
-
function validateParsedData(data) {
return Object.values(data).every(function (value) {
return isValidStrPattern(value);
});
}
-
function getMatchPropsData(data) {
var matchData = {};
Object.keys(data).forEach(function (key) {
@@ -25228,169 +20854,122 @@
});
return matchData;
}
-
var updatedArgs = args ? [].concat(source).concat(args) : [source];
-
try {
trustedReplaceFetchResponse.apply(this, updatedArgs);
} catch (e) {
console.log(e);
}
}
-
function trustedReplaceXhrResponse(source, args) {
function trustedReplaceXhrResponse(source) {
var pattern = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : "";
var replacement = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : "";
var propsToMatch = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : "";
-
if (typeof Proxy === "undefined") {
return;
}
-
if (pattern === "" && replacement !== "") {
var message = "Pattern argument should not be empty string.";
logMessage(source, message);
return;
}
-
var shouldLog = pattern === "" && replacement === "";
var nativeOpen = window.XMLHttpRequest.prototype.open;
var nativeSend = window.XMLHttpRequest.prototype.send;
var shouldReplace = false;
var xhrData;
var requestHeaders = [];
-
var openWrapper = function openWrapper(target, thisArg, args) {
- xhrData = getXhrData.apply(void 0, toConsumableArray(args));
-
+ xhrData = getXhrData.apply(null, args);
if (shouldLog) {
- var _message = "log: xhr( ".concat(objectToString(xhrData), " )");
-
+ var _message = "xhr( ".concat(objectToString(xhrData), " )");
logMessage(source, _message, true);
hit(source);
return Reflect.apply(target, thisArg, args);
}
-
shouldReplace = matchRequestProps(source, propsToMatch, xhrData);
-
if (shouldReplace) {
var setRequestHeaderWrapper = function setRequestHeaderWrapper(target, thisArg, args) {
requestHeaders.push(args);
return Reflect.apply(target, thisArg, args);
};
-
var setRequestHeaderHandler = {
apply: setRequestHeaderWrapper
};
thisArg.setRequestHeader = new Proxy(thisArg.setRequestHeader, setRequestHeaderHandler);
}
-
return Reflect.apply(target, thisArg, args);
};
-
- var sendWrapper = function () {
- var _ref = asyncToGenerator(regenerator.mark(function _callee(target, thisArg, args) {
- var forgedRequest;
- return regenerator.wrap(function _callee$(_context) {
- while (1) {
- switch (_context.prev = _context.next) {
- case 0:
- if (shouldReplace) {
- _context.next = 2;
- break;
- }
-
- return _context.abrupt("return", Reflect.apply(target, thisArg, args));
-
- case 2:
- forgedRequest = new XMLHttpRequest();
- forgedRequest.addEventListener("readystatechange", function () {
- if (forgedRequest.readyState !== 4) {
- return;
- }
-
- var readyState = forgedRequest.readyState,
- response = forgedRequest.response,
- responseText = forgedRequest.responseText,
- responseURL = forgedRequest.responseURL,
- responseXML = forgedRequest.responseXML,
- status = forgedRequest.status,
- statusText = forgedRequest.statusText;
- var content = responseText || response;
-
- if (typeof content !== "string") {
- return;
- }
-
- var patternRegexp = pattern === "*" ? toRegExp() : toRegExp(pattern);
- var modifiedContent = content.replace(patternRegexp, replacement);
- Object.defineProperties(thisArg, {
- readyState: {
- value: readyState
- },
- response: {
- value: modifiedContent
- },
- responseText: {
- value: modifiedContent
- },
- responseURL: {
- value: responseURL
- },
- responseXML: {
- value: responseXML
- },
- status: {
- value: status
- },
- statusText: {
- value: statusText
- }
- });
- setTimeout(function () {
- var stateEvent = new Event("readystatechange");
- thisArg.dispatchEvent(stateEvent);
- var loadEvent = new Event("load");
- thisArg.dispatchEvent(loadEvent);
- var loadEndEvent = new Event("loadend");
- thisArg.dispatchEvent(loadEndEvent);
- }, 1);
- hit(source);
- });
- nativeOpen.apply(forgedRequest, [xhrData.method, xhrData.url]);
- requestHeaders.forEach(function (header) {
- var name = header[0];
- var value = header[1];
- forgedRequest.setRequestHeader(name, value);
- });
- requestHeaders = [];
- _context.prev = 7;
- nativeSend.call(forgedRequest, args);
- _context.next = 14;
- break;
-
- case 11:
- _context.prev = 11;
- _context.t0 = _context["catch"](7);
- return _context.abrupt("return", Reflect.apply(target, thisArg, args));
-
- case 14:
- return _context.abrupt("return", undefined);
-
- case 15:
- case "end":
- return _context.stop();
- }
+ var sendWrapper = function sendWrapper(target, thisArg, args) {
+ if (!shouldReplace) {
+ return Reflect.apply(target, thisArg, args);
+ }
+ var forgedRequest = new XMLHttpRequest();
+ forgedRequest.addEventListener("readystatechange", function () {
+ if (forgedRequest.readyState !== 4) {
+ return;
+ }
+ var readyState = forgedRequest.readyState,
+ response = forgedRequest.response,
+ responseText = forgedRequest.responseText,
+ responseURL = forgedRequest.responseURL,
+ responseXML = forgedRequest.responseXML,
+ status = forgedRequest.status,
+ statusText = forgedRequest.statusText;
+ var content = responseText || response;
+ if (typeof content !== "string") {
+ return;
+ }
+ var patternRegexp = pattern === "*" ? /(\n|.)*/ : toRegExp(pattern);
+ var modifiedContent = content.replace(patternRegexp, replacement);
+ Object.defineProperties(thisArg, {
+ readyState: {
+ value: readyState
+ },
+ response: {
+ value: modifiedContent
+ },
+ responseText: {
+ value: modifiedContent
+ },
+ responseURL: {
+ value: responseURL
+ },
+ responseXML: {
+ value: responseXML
+ },
+ status: {
+ value: status
+ },
+ statusText: {
+ value: statusText
}
- }, _callee, null, [[7, 11]]);
- }));
-
- return function sendWrapper(_x, _x2, _x3) {
- return _ref.apply(this, arguments);
- };
- }();
-
+ });
+ setTimeout(function () {
+ var stateEvent = new Event("readystatechange");
+ thisArg.dispatchEvent(stateEvent);
+ var loadEvent = new Event("load");
+ thisArg.dispatchEvent(loadEvent);
+ var loadEndEvent = new Event("loadend");
+ thisArg.dispatchEvent(loadEndEvent);
+ }, 1);
+ hit(source);
+ });
+ nativeOpen.apply(forgedRequest, [xhrData.method, xhrData.url]);
+ requestHeaders.forEach(function (header) {
+ var name = header[0];
+ var value = header[1];
+ forgedRequest.setRequestHeader(name, value);
+ });
+ requestHeaders = [];
+ try {
+ nativeSend.call(forgedRequest, args);
+ } catch (_unused) {
+ return Reflect.apply(target, thisArg, args);
+ }
+ return undefined;
+ };
var openHandler = {
apply: openWrapper
};
@@ -25400,103 +20979,72 @@
XMLHttpRequest.prototype.open = new Proxy(XMLHttpRequest.prototype.open, openHandler);
XMLHttpRequest.prototype.send = new Proxy(XMLHttpRequest.prototype.send, sendHandler);
}
-
- function hit(source, message) {
+ function hit(source) {
if (source.verbose !== true) {
return;
}
-
try {
var log = console.log.bind(console);
var trace = console.trace.bind(console);
var prefix = source.ruleText || "";
-
if (source.domainName) {
var AG_SCRIPTLET_MARKER = "#%#//";
var UBO_SCRIPTLET_MARKER = "##+js";
var ruleStartIndex;
-
if (source.ruleText.indexOf(AG_SCRIPTLET_MARKER) > -1) {
ruleStartIndex = source.ruleText.indexOf(AG_SCRIPTLET_MARKER);
} else if (source.ruleText.indexOf(UBO_SCRIPTLET_MARKER) > -1) {
ruleStartIndex = source.ruleText.indexOf(UBO_SCRIPTLET_MARKER);
}
-
var rulePart = source.ruleText.slice(ruleStartIndex);
prefix = "".concat(source.domainName).concat(rulePart);
}
-
- var LOG_MARKER = "log: ";
-
- if (message) {
- if (message.indexOf(LOG_MARKER) === -1) {
- log("".concat(prefix, " message:\n").concat(message));
- } else {
- log(message.slice(LOG_MARKER.length));
- }
- }
-
log("".concat(prefix, " trace start"));
-
if (trace) {
trace();
}
-
log("".concat(prefix, " trace end"));
} catch (e) {}
-
if (typeof window.__debug === "function") {
window.__debug(source);
}
}
-
function logMessage(source, message) {
var forced = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;
-
if (forced || source.verbose) {
console.log("".concat(source.name, ": ").concat(message));
}
}
-
function toRegExp() {
var input = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : "";
var DEFAULT_VALUE = ".?";
var FORWARD_SLASH = "/";
-
if (input === "") {
return new RegExp(DEFAULT_VALUE);
}
-
if (input[0] === FORWARD_SLASH && input[input.length - 1] === FORWARD_SLASH) {
return new RegExp(input.slice(1, -1));
}
-
var escaped = input.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
return new RegExp(escaped);
}
-
function objectToString(obj) {
return isEmptyObject(obj) ? "{}" : getObjectEntries(obj).map(function (pair) {
var key = pair[0];
var value = pair[1];
var recordValueStr = value;
-
if (value instanceof Object) {
recordValueStr = "{ ".concat(objectToString(value), " }");
}
-
return "".concat(key, ':"').concat(recordValueStr, '"');
}).join(" ");
}
-
function matchRequestProps(source, propsToMatch, requestData) {
if (propsToMatch === "" || propsToMatch === "*") {
return true;
}
-
var isMatched;
var parsedData = parseMatchProps(propsToMatch);
-
if (!validateParsedData(parsedData)) {
logMessage(source, "Invalid parameter: ".concat(propsToMatch));
isMatched = false;
@@ -25507,10 +21055,8 @@
return Object.prototype.hasOwnProperty.call(requestData, matchKey) && matchValue.test(requestData[matchKey]);
});
}
-
return isMatched;
}
-
function getXhrData(method, url, async, user, password) {
return {
method: method,
@@ -25520,7 +21066,6 @@
password: password
};
}
-
function getMatchPropsData(data) {
var matchData = {};
Object.keys(data).forEach(function (key) {
@@ -25528,13 +21073,14 @@
});
return matchData;
}
-
+ function getRequestProps() {
+ return ["url", "method", "headers", "body", "mode", "credentials", "cache", "redirect", "referrer", "referrerPolicy", "integrity", "keepalive", "signal"];
+ }
function validateParsedData(data) {
return Object.values(data).every(function (value) {
return isValidStrPattern(value);
});
}
-
function parseMatchProps(propsToMatchStr) {
var PROPS_DIVIDER = " ";
var PAIRS_MARKER = ":";
@@ -25545,7 +21091,6 @@
var dividerInd = prop.indexOf(PAIRS_MARKER);
var key = prop.slice(0, dividerInd);
var hasLegalMatchProp = LEGAL_MATCH_PROPS.indexOf(key) !== -1;
-
if (hasLegalMatchProp) {
var value = prop.slice(dividerInd + 1);
propsObj[key] = value;
@@ -25555,35 +21100,27 @@
});
return propsObj;
}
-
function isValidStrPattern(input) {
var FORWARD_SLASH = "/";
var str = escapeRegExp(input);
-
if (input[0] === FORWARD_SLASH && input[input.length - 1] === FORWARD_SLASH) {
str = input.slice(1, -1);
}
-
var isValid;
-
try {
isValid = new RegExp(str);
isValid = true;
} catch (e) {
isValid = false;
}
-
return isValid;
}
-
function escapeRegExp(str) {
return str.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
}
-
function isEmptyObject(obj) {
- return Object.keys(obj).length === 0;
+ return Object.keys(obj).length === 0 && !obj.prototype;
}
-
function getObjectEntries(object) {
var keys = Object.keys(object);
var entries = [];
@@ -25592,270 +21129,318 @@
});
return entries;
}
-
var updatedArgs = args ? [].concat(source).concat(args) : [source];
-
try {
trustedReplaceXhrResponse.apply(this, updatedArgs);
} catch (e) {
console.log(e);
}
}
-
function trustedSetCookie(source, args) {
function trustedSetCookie(source, name, value) {
var offsetExpiresSec = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : "";
- var reload = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : "false";
- var path = arguments.length > 5 && arguments[5] !== undefined ? arguments[5] : "/";
-
+ var path = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : "/";
if (typeof name === "undefined") {
logMessage(source, "Cookie name should be specified.");
return;
}
-
if (typeof value === "undefined") {
logMessage(source, "Cookie value should be specified.");
return;
}
-
- if (reload === "true" && isCookieSetWithValue(document.cookie, name, value)) {
+ var parsedValue = parseKeywordValue(value);
+ if (!isValidCookiePath(path)) {
+ logMessage(source, "Invalid cookie path: '".concat(path, "'"));
return;
}
-
+ var cookieToSet = concatCookieNameValuePath(name, parsedValue, path);
+ if (!cookieToSet) {
+ return;
+ }
+ if (offsetExpiresSec) {
+ var parsedOffsetMs = getTrustedCookieOffsetMs(offsetExpiresSec);
+ if (!parsedOffsetMs) {
+ logMessage(source, "Invalid offsetExpiresSec value: ".concat(offsetExpiresSec));
+ return;
+ }
+ var expires = Date.now() + parsedOffsetMs;
+ cookieToSet += " expires=".concat(new Date(expires).toUTCString(), ";");
+ }
+ document.cookie = cookieToSet;
+ hit(source);
+ }
+ function hit(source) {
+ if (source.verbose !== true) {
+ return;
+ }
+ try {
+ var log = console.log.bind(console);
+ var trace = console.trace.bind(console);
+ var prefix = source.ruleText || "";
+ if (source.domainName) {
+ var AG_SCRIPTLET_MARKER = "#%#//";
+ var UBO_SCRIPTLET_MARKER = "##+js";
+ var ruleStartIndex;
+ if (source.ruleText.indexOf(AG_SCRIPTLET_MARKER) > -1) {
+ ruleStartIndex = source.ruleText.indexOf(AG_SCRIPTLET_MARKER);
+ } else if (source.ruleText.indexOf(UBO_SCRIPTLET_MARKER) > -1) {
+ ruleStartIndex = source.ruleText.indexOf(UBO_SCRIPTLET_MARKER);
+ }
+ var rulePart = source.ruleText.slice(ruleStartIndex);
+ prefix = "".concat(source.domainName).concat(rulePart);
+ }
+ log("".concat(prefix, " trace start"));
+ if (trace) {
+ trace();
+ }
+ log("".concat(prefix, " trace end"));
+ } catch (e) {}
+ if (typeof window.__debug === "function") {
+ window.__debug(source);
+ }
+ }
+ function logMessage(source, message) {
+ var forced = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;
+ if (forced || source.verbose) {
+ console.log("".concat(source.name, ": ").concat(message));
+ }
+ }
+ function concatCookieNameValuePath(rawName, rawValue, rawPath) {
+ return "".concat(encodeURIComponent(rawName), "=").concat(encodeURIComponent(rawValue), "; ").concat(getCookiePath(rawPath), ";");
+ }
+ function isValidCookiePath(rawPath) {
+ return rawPath === "/" || rawPath === "none";
+ }
+ function getTrustedCookieOffsetMs(offsetExpiresSec) {
var ONE_YEAR_EXPIRATION_KEYWORD = "1year";
var ONE_DAY_EXPIRATION_KEYWORD = "1day";
+ var MS_IN_SEC = 1e3;
+ var SECONDS_IN_YEAR = 365 * 24 * 60 * 60;
+ var SECONDS_IN_DAY = 24 * 60 * 60;
+ var parsedSec;
+ if (offsetExpiresSec === ONE_YEAR_EXPIRATION_KEYWORD) {
+ parsedSec = SECONDS_IN_YEAR;
+ } else if (offsetExpiresSec === ONE_DAY_EXPIRATION_KEYWORD) {
+ parsedSec = SECONDS_IN_DAY;
+ } else {
+ parsedSec = Number.parseInt(offsetExpiresSec, 10);
+ if (Number.isNaN(parsedSec)) {
+ return null;
+ }
+ }
+ return parsedSec * MS_IN_SEC;
+ }
+ function parseKeywordValue(rawValue) {
+ var NOW_VALUE_KEYWORD = "$now$";
+ var CURRENT_DATE_KEYWORD = "$currentDate$";
+ var parsedValue = rawValue;
+ if (rawValue === NOW_VALUE_KEYWORD) {
+ parsedValue = Date.now().toString();
+ } else if (rawValue === CURRENT_DATE_KEYWORD) {
+ parsedValue = Date();
+ }
+ return parsedValue;
+ }
+ function getCookiePath(rawPath) {
+ if (rawPath === "/") {
+ return "path=/";
+ }
+ return "";
+ }
+ var updatedArgs = args ? [].concat(source).concat(args) : [source];
+ try {
+ trustedSetCookie.apply(this, updatedArgs);
+ } catch (e) {
+ console.log(e);
+ }
+ }
+ function trustedSetCookieReload(source, args) {
+ function trustedSetCookieReload(source, name, value) {
+ var offsetExpiresSec = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : "";
+ var path = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : "/";
+ if (typeof name === "undefined") {
+ logMessage(source, "Cookie name should be specified.");
+ return;
+ }
+ if (typeof value === "undefined") {
+ logMessage(source, "Cookie value should be specified.");
+ return;
+ }
+ if (isCookieSetWithValue(document.cookie, name, value)) {
+ return;
+ }
var parsedValue = parseKeywordValue(value);
- var cookieToSet = concatCookieNameValuePath(source, name, parsedValue, path);
-
+ if (!isValidCookiePath(path)) {
+ logMessage(source, "Invalid cookie path: '".concat(path, "'"));
+ return;
+ }
+ var cookieToSet = concatCookieNameValuePath(name, parsedValue, path);
if (!cookieToSet) {
return;
}
-
if (offsetExpiresSec) {
- var MS_IN_SEC = 1e3;
- var SECONDS_IN_YEAR = 365 * 24 * 60 * 60;
- var SECONDS_IN_DAY = 24 * 60 * 60;
- var parsedOffsetExpiresSec;
-
- if (offsetExpiresSec === ONE_YEAR_EXPIRATION_KEYWORD) {
- parsedOffsetExpiresSec = SECONDS_IN_YEAR;
- } else if (offsetExpiresSec === ONE_DAY_EXPIRATION_KEYWORD) {
- parsedOffsetExpiresSec = SECONDS_IN_DAY;
- } else {
- parsedOffsetExpiresSec = Number.parseInt(offsetExpiresSec, 10);
-
- if (Number.isNaN(parsedOffsetExpiresSec)) {
- var message = "log: Invalid offsetExpiresSec value: ".concat(offsetExpiresSec);
- logMessage(source, message);
- return;
- }
+ var parsedOffsetMs = getTrustedCookieOffsetMs(offsetExpiresSec);
+ if (!parsedOffsetMs) {
+ logMessage(source, "Invalid offsetExpiresSec value: ".concat(offsetExpiresSec));
+ return;
}
-
- var expires = Date.now() + parsedOffsetExpiresSec * MS_IN_SEC;
+ var expires = Date.now() + parsedOffsetMs;
cookieToSet += " expires=".concat(new Date(expires).toUTCString(), ";");
}
-
- if (cookieToSet) {
- document.cookie = cookieToSet;
- hit(source);
-
- if (reload === "true" && isCookieSetWithValue(document.cookie, name, value)) {
- window.location.reload();
- }
+ document.cookie = cookieToSet;
+ hit(source);
+ if (isCookieSetWithValue(document.cookie, name, value)) {
+ window.location.reload();
}
}
-
- function hit(source, message) {
+ function hit(source) {
if (source.verbose !== true) {
return;
}
-
try {
var log = console.log.bind(console);
var trace = console.trace.bind(console);
var prefix = source.ruleText || "";
-
if (source.domainName) {
var AG_SCRIPTLET_MARKER = "#%#//";
var UBO_SCRIPTLET_MARKER = "##+js";
var ruleStartIndex;
-
if (source.ruleText.indexOf(AG_SCRIPTLET_MARKER) > -1) {
ruleStartIndex = source.ruleText.indexOf(AG_SCRIPTLET_MARKER);
} else if (source.ruleText.indexOf(UBO_SCRIPTLET_MARKER) > -1) {
ruleStartIndex = source.ruleText.indexOf(UBO_SCRIPTLET_MARKER);
}
-
var rulePart = source.ruleText.slice(ruleStartIndex);
prefix = "".concat(source.domainName).concat(rulePart);
}
-
- var LOG_MARKER = "log: ";
-
- if (message) {
- if (message.indexOf(LOG_MARKER) === -1) {
- log("".concat(prefix, " message:\n").concat(message));
- } else {
- log(message.slice(LOG_MARKER.length));
- }
- }
-
log("".concat(prefix, " trace start"));
-
if (trace) {
trace();
}
-
log("".concat(prefix, " trace end"));
} catch (e) {}
-
if (typeof window.__debug === "function") {
window.__debug(source);
}
}
-
function logMessage(source, message) {
var forced = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;
-
if (forced || source.verbose) {
console.log("".concat(source.name, ": ").concat(message));
}
}
-
function isCookieSetWithValue(cookieString, name, value) {
return cookieString.split(";").some(function (cookieStr) {
var pos = cookieStr.indexOf("=");
-
if (pos === -1) {
return false;
}
-
var cookieName = cookieStr.slice(0, pos).trim();
var cookieValue = cookieStr.slice(pos + 1).trim();
return name === cookieName && value === cookieValue;
});
}
-
- function concatCookieNameValuePath(source, rawName, rawValue, rawPath) {
- if (!isValidCookieRawPath(rawPath)) {
- logMessage(source, "Invalid cookie path: '".concat(rawPath, "'"));
- return null;
- }
-
- return "".concat(encodeURIComponent(rawName), "=").concat(encodeURIComponent(rawValue), "; ").concat(getCookiePath(rawPath));
+ function concatCookieNameValuePath(rawName, rawValue, rawPath) {
+ return "".concat(encodeURIComponent(rawName), "=").concat(encodeURIComponent(rawValue), "; ").concat(getCookiePath(rawPath), ";");
}
-
- function isValidCookieRawPath(rawPath) {
+ function isValidCookiePath(rawPath) {
return rawPath === "/" || rawPath === "none";
}
-
+ function getTrustedCookieOffsetMs(offsetExpiresSec) {
+ var ONE_YEAR_EXPIRATION_KEYWORD = "1year";
+ var ONE_DAY_EXPIRATION_KEYWORD = "1day";
+ var MS_IN_SEC = 1e3;
+ var SECONDS_IN_YEAR = 365 * 24 * 60 * 60;
+ var SECONDS_IN_DAY = 24 * 60 * 60;
+ var parsedSec;
+ if (offsetExpiresSec === ONE_YEAR_EXPIRATION_KEYWORD) {
+ parsedSec = SECONDS_IN_YEAR;
+ } else if (offsetExpiresSec === ONE_DAY_EXPIRATION_KEYWORD) {
+ parsedSec = SECONDS_IN_DAY;
+ } else {
+ parsedSec = Number.parseInt(offsetExpiresSec, 10);
+ if (Number.isNaN(parsedSec)) {
+ return null;
+ }
+ }
+ return parsedSec * MS_IN_SEC;
+ }
function parseKeywordValue(rawValue) {
var NOW_VALUE_KEYWORD = "$now$";
var CURRENT_DATE_KEYWORD = "$currentDate$";
var parsedValue = rawValue;
-
if (rawValue === NOW_VALUE_KEYWORD) {
parsedValue = Date.now().toString();
} else if (rawValue === CURRENT_DATE_KEYWORD) {
parsedValue = Date();
}
-
return parsedValue;
}
-
function getCookiePath(rawPath) {
if (rawPath === "/") {
return "path=/";
}
-
return "";
}
-
var updatedArgs = args ? [].concat(source).concat(args) : [source];
-
try {
- trustedSetCookie.apply(this, updatedArgs);
+ trustedSetCookieReload.apply(this, updatedArgs);
} catch (e) {
console.log(e);
}
}
-
function trustedSetLocalStorageItem(source, args) {
function trustedSetLocalStorageItem(source, key, value) {
if (typeof key === "undefined") {
logMessage(source, "Item key should be specified.");
return;
}
-
if (typeof value === "undefined") {
logMessage(source, "Item value should be specified.");
return;
}
-
var parsedValue = parseKeywordValue(value);
var _window = window,
- localStorage = _window.localStorage;
+ localStorage = _window.localStorage;
setStorageItem(source, localStorage, key, parsedValue);
hit(source);
}
-
- function hit(source, message) {
+ function hit(source) {
if (source.verbose !== true) {
return;
}
-
try {
var log = console.log.bind(console);
var trace = console.trace.bind(console);
var prefix = source.ruleText || "";
-
if (source.domainName) {
var AG_SCRIPTLET_MARKER = "#%#//";
var UBO_SCRIPTLET_MARKER = "##+js";
var ruleStartIndex;
-
if (source.ruleText.indexOf(AG_SCRIPTLET_MARKER) > -1) {
ruleStartIndex = source.ruleText.indexOf(AG_SCRIPTLET_MARKER);
} else if (source.ruleText.indexOf(UBO_SCRIPTLET_MARKER) > -1) {
ruleStartIndex = source.ruleText.indexOf(UBO_SCRIPTLET_MARKER);
}
-
var rulePart = source.ruleText.slice(ruleStartIndex);
prefix = "".concat(source.domainName).concat(rulePart);
}
-
- var LOG_MARKER = "log: ";
-
- if (message) {
- if (message.indexOf(LOG_MARKER) === -1) {
- log("".concat(prefix, " message:\n").concat(message));
- } else {
- log(message.slice(LOG_MARKER.length));
- }
- }
-
log("".concat(prefix, " trace start"));
-
if (trace) {
trace();
}
-
log("".concat(prefix, " trace end"));
} catch (e) {}
-
if (typeof window.__debug === "function") {
window.__debug(source);
}
}
-
function logMessage(source, message) {
var forced = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;
-
if (forced || source.verbose) {
console.log("".concat(source.name, ": ").concat(message));
}
}
-
function setStorageItem(source, storage, key, value) {
try {
storage.setItem(key, value);
@@ -25864,85 +21449,64 @@
logMessage(source, message);
}
}
-
function parseKeywordValue(rawValue) {
var NOW_VALUE_KEYWORD = "$now$";
var CURRENT_DATE_KEYWORD = "$currentDate$";
var parsedValue = rawValue;
-
if (rawValue === NOW_VALUE_KEYWORD) {
parsedValue = Date.now().toString();
} else if (rawValue === CURRENT_DATE_KEYWORD) {
parsedValue = Date();
}
-
return parsedValue;
}
-
var updatedArgs = args ? [].concat(source).concat(args) : [source];
-
try {
trustedSetLocalStorageItem.apply(this, updatedArgs);
} catch (e) {
console.log(e);
}
}
-
function xmlPrune(source, args) {
function xmlPrune(source, propsToRemove) {
var _this = this;
-
var optionalProp = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : "";
var urlToMatch = arguments.length > 3 ? arguments[3] : undefined;
-
if (typeof Reflect === "undefined" || typeof fetch === "undefined" || typeof Proxy === "undefined" || typeof Response === "undefined") {
return;
}
-
var shouldPruneResponse = true;
-
if (!propsToRemove) {
shouldPruneResponse = false;
}
-
var urlMatchRegexp = toRegExp(urlToMatch);
-
var isXML = function isXML(text) {
var trimedText = text.trim();
-
if (startsWith(trimedText, "<") && endsWith(trimedText, ">")) {
return true;
}
-
return false;
};
-
var pruneXML = function pruneXML(text) {
if (!isXML(text)) {
shouldPruneResponse = false;
return text;
}
-
var xmlParser = new DOMParser();
var xmlDoc = xmlParser.parseFromString(text, "text/xml");
var errorNode = xmlDoc.querySelector("parsererror");
-
if (errorNode) {
return text;
}
-
if (optionalProp !== "" && xmlDoc.querySelector(optionalProp) === null) {
shouldPruneResponse = false;
return text;
}
-
var elems = xmlDoc.querySelectorAll(propsToRemove);
-
if (!elems.length) {
shouldPruneResponse = false;
return text;
}
-
elems.forEach(function (elem) {
elem.remove();
});
@@ -25950,20 +21514,16 @@
text = serializer.serializeToString(xmlDoc);
return text;
};
-
var xhrWrapper = function xhrWrapper(target, thisArg, args) {
var xhrURL = args[1];
-
if (typeof xhrURL !== "string" || xhrURL.length === 0) {
return Reflect.apply(target, thisArg, args);
}
-
if (urlMatchRegexp.test(xhrURL)) {
thisArg.addEventListener("readystatechange", function pruneResponse() {
if (thisArg.readyState === 4) {
var response = thisArg.response;
thisArg.removeEventListener("readystatechange", pruneResponse);
-
if (!shouldPruneResponse) {
if (isXML(response)) {
var message = "XMLHttpRequest.open() URL: ".concat(xhrURL, "\nresponse: ").concat(response);
@@ -25971,7 +21531,6 @@
}
} else {
var prunedResponseContent = pruneXML(response);
-
if (shouldPruneResponse) {
Object.defineProperty(thisArg, "response", {
value: prunedResponseContent
@@ -25981,29 +21540,23 @@
});
hit(source);
}
-
shouldPruneResponse = true;
}
}
});
}
-
return Reflect.apply(target, thisArg, args);
};
-
var xhrHandler = {
apply: xhrWrapper
};
window.XMLHttpRequest.prototype.open = new Proxy(window.XMLHttpRequest.prototype.open, xhrHandler);
var nativeFetch = window.fetch;
-
var fetchWrapper = function fetchWrapper(target, thisArg, args) {
var fetchURL = args[0];
-
if (typeof fetchURL !== "string" || fetchURL.length === 0) {
return Reflect.apply(target, thisArg, args);
}
-
if (urlMatchRegexp.test(fetchURL)) {
return nativeFetch.apply(_this, args).then(function (response) {
return response.text().then(function (text) {
@@ -26011,12 +21564,9 @@
if (isXML(text)) {
logMessage("fetch URL: ".concat(fetchURL, "\nresponse text: ").concat(text));
}
-
return Reflect.apply(target, thisArg, args);
}
-
var prunedText = pruneXML(text);
-
if (shouldPruneResponse) {
hit(source);
return new Response(prunedText, {
@@ -26025,113 +21575,80 @@
headers: response.headers
});
}
-
shouldPruneResponse = true;
return Reflect.apply(target, thisArg, args);
});
});
}
-
return Reflect.apply(target, thisArg, args);
};
-
var fetchHandler = {
apply: fetchWrapper
};
window.fetch = new Proxy(window.fetch, fetchHandler);
}
-
- function hit(source, message) {
+ function hit(source) {
if (source.verbose !== true) {
return;
}
-
try {
var log = console.log.bind(console);
var trace = console.trace.bind(console);
var prefix = source.ruleText || "";
-
if (source.domainName) {
var AG_SCRIPTLET_MARKER = "#%#//";
var UBO_SCRIPTLET_MARKER = "##+js";
var ruleStartIndex;
-
if (source.ruleText.indexOf(AG_SCRIPTLET_MARKER) > -1) {
ruleStartIndex = source.ruleText.indexOf(AG_SCRIPTLET_MARKER);
} else if (source.ruleText.indexOf(UBO_SCRIPTLET_MARKER) > -1) {
ruleStartIndex = source.ruleText.indexOf(UBO_SCRIPTLET_MARKER);
}
-
var rulePart = source.ruleText.slice(ruleStartIndex);
prefix = "".concat(source.domainName).concat(rulePart);
}
-
- var LOG_MARKER = "log: ";
-
- if (message) {
- if (message.indexOf(LOG_MARKER) === -1) {
- log("".concat(prefix, " message:\n").concat(message));
- } else {
- log(message.slice(LOG_MARKER.length));
- }
- }
-
log("".concat(prefix, " trace start"));
-
if (trace) {
trace();
}
-
log("".concat(prefix, " trace end"));
} catch (e) {}
-
if (typeof window.__debug === "function") {
window.__debug(source);
}
}
-
function logMessage(source, message) {
var forced = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;
-
if (forced || source.verbose) {
console.log("".concat(source.name, ": ").concat(message));
}
}
-
function toRegExp() {
var input = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : "";
var DEFAULT_VALUE = ".?";
var FORWARD_SLASH = "/";
-
if (input === "") {
return new RegExp(DEFAULT_VALUE);
}
-
if (input[0] === FORWARD_SLASH && input[input.length - 1] === FORWARD_SLASH) {
return new RegExp(input.slice(1, -1));
}
-
var escaped = input.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
return new RegExp(escaped);
}
-
function startsWith(str, prefix) {
return !!str && str.indexOf(prefix) === 0;
}
-
function endsWith(str, ending) {
return !!str && str.lastIndexOf(ending) === str.length - ending.length;
}
-
var updatedArgs = args ? [].concat(source).concat(args) : [source];
-
try {
xmlPrune.apply(this, updatedArgs);
} catch (e) {
console.log(e);
}
}
-
var scriptletsMap = {
"abort-current-inline-script": abortCurrentInlineScript,
"abort-current-script.js": abortCurrentInlineScript,
@@ -26238,12 +21755,6 @@
"ubo-adfly-defuser.js": preventAdfly,
"ubo-adfly-defuser": preventAdfly,
"prevent-bab": preventBab,
- "nobab.js": preventBab,
- "ubo-nobab.js": preventBab,
- "bab-defuser.js": preventBab,
- "ubo-bab-defuser.js": preventBab,
- "ubo-nobab": preventBab,
- "ubo-bab-defuser": preventBab,
"prevent-element-src-loading": preventElementSrcLoading,
"prevent-eval-if": preventEvalIf,
"noeval-if.js": preventEvalIf,
@@ -26352,13 +21863,13 @@
"trusted-replace-fetch-response": trustedReplaceFetchResponse,
"trusted-replace-xhr-response": trustedReplaceXhrResponse,
"trusted-set-cookie": trustedSetCookie,
+ "trusted-set-cookie-reload": trustedSetCookieReload,
"trusted-set-local-storage-item": trustedSetLocalStorageItem,
"xml-prune": xmlPrune,
"xml-prune.js": xmlPrune,
"ubo-xml-prune.js": xmlPrune,
"ubo-xml-prune": xmlPrune
};
-
var getScriptletFunction = function getScriptletFunction(name) {
return scriptletsMap[name];
};
@@ -26380,16 +21891,15 @@
* @param {Source} source
* @returns {string|null} scriptlet code
*/
-
function getScriptletCode(source) {
if (!validator.isValidScriptletName(source.name)) {
return null;
}
-
var scriptletFunction = getScriptletFunction(source.name).toString();
var result = source.engine === 'corelibs' || source.engine === 'test' ? wrapInNonameFunc(scriptletFunction) : passSourceAndProps(source, scriptletFunction);
return result;
}
+
/**
* Scriptlets variable
*
@@ -26397,8 +21907,6 @@
* `invoke` method receives one argument with `Source` type
* `validate` method receives one argument with `String` type
*/
-
-
var scriptletsObject = function () {
return {
invoke: getScriptletCode,
@@ -26419,7 +21927,6 @@
/**
* Add module exports to be used as node package
*/
-
module.exports = scriptletsObject;
}));
diff --git a/package.json b/package.json
index 846682e7..46d33116 100644
--- a/package.json
+++ b/package.json
@@ -1,6 +1,6 @@
{
"name": "@adguard/scriptlets",
- "version": "1.7.4",
+ "version": "1.8.0",
"description": "AdGuard's JavaScript library of Scriptlets and Redirect resources",
"scripts": {
"build": "babel-node bundler.js",
@@ -20,11 +20,6 @@
"eslint"
]
},
- "husky": {
- "hooks": {
- "pre-commit": "lint-staged"
- }
- },
"author": "AdGuard",
"license": "GPL-3.0",
"repository": {
@@ -48,21 +43,18 @@
"js-yaml": "^3.13.1"
},
"devDependencies": {
- "@babel/cli": "^7.8.4",
- "@babel/core": "^7.9.0",
- "@babel/eslint-parser": "^7.16.5",
- "@babel/node": "^7.8.7",
- "@babel/plugin-proposal-class-properties": "^7.16.5",
- "@babel/plugin-proposal-private-methods": "^7.16.5",
- "@babel/plugin-transform-regenerator": "^7.7.0",
+ "@babel/cli": "^7.20.7",
+ "@babel/core": "^7.20.12",
+ "@babel/eslint-parser": "^7.19.1",
+ "@babel/node": "^7.20.7",
"@babel/plugin-transform-runtime": "^7.6.2",
- "@babel/preset-env": "^7.9.0",
+ "@babel/preset-env": "^7.20.2",
"@rollup/plugin-babel": "^5.0.4",
"@rollup/plugin-commonjs": "^17.0.0",
"@rollup/plugin-json": "^4.1.0",
"@rollup/plugin-node-resolve": "^8.1.0",
"@rollup/plugin-replace": "^4.0.0",
- "axios": "^0.21.1",
+ "axios": "^1.2.0",
"browserstack-local": "^1.4.9",
"chalk": "^4.1.2",
"commander": "^9.2.0",
@@ -72,14 +64,14 @@
"dox": "^0.9.0",
"eslint": "^7.25.0",
"eslint-config-airbnb-base": "^14.2.1",
- "eslint-plugin-compat": "^3.9.0",
"eslint-plugin-import": "^2.22.1",
+ "eslint-plugin-jsdoc": "^39.6.4",
"fs-extra": "^10.0.1",
- "husky": "^3.1.0",
+ "husky": "~8.0.2",
"js-reporters": "^2.1.0",
"kleur": "^4.1.4",
"lint-staged": "^12.1.2",
- "node-qunit-puppeteer": "^2.0.3",
+ "node-qunit-puppeteer": "2.1.1",
"qunit": "^2.9.3",
"rollup": "^2.70.2",
"rollup-plugin-cleanup": "^3.1.1",
@@ -87,15 +79,9 @@
"rollup-plugin-generate-html": "^0.2.0",
"selenium-webdriver": "^4.1.1",
"sinon": "^7.5.0",
- "terser": "^5.13.0"
+ "terser": "^5.16.1"
},
"files": [
"dist"
- ],
- "browserslist": [
- "last 1 versions",
- "chrome >= 55",
- "safari >= 10",
- "ie >= 9"
]
}
diff --git a/scripts/build-compatibility-table.js b/scripts/build-compatibility-table.js
index f1ab4179..9fb98825 100644
--- a/scripts/build-compatibility-table.js
+++ b/scripts/build-compatibility-table.js
@@ -21,15 +21,15 @@ const WIKI_COMPATIBILITY_TABLE_PATH = path.resolve(
/**
* @typedef {Object} CompatibilityItem
- * @property {string} adg
- * @property {string} abp
- * @property {string} ubo
+ * @property {string} adg AdGuard name
+ * @property {string} abp Adblock Plus name
+ * @property {string} ubo uBlock name
*/
/**
* @typedef {Object} CompatibilityData
- * @property {CompatibilityItem[]} scriptlets
- * @property {CompatibilityItem[]} redirects
+ * @property {CompatibilityItem[]} scriptlets list of scriptlets compatibility items
+ * @property {CompatibilityItem[]} redirects list of redirects compatibility items
*/
/**
@@ -50,7 +50,6 @@ const getTableData = () => {
* @param {string} item.adg AdGuard name
* @param {string} item.abp Adblock Plus name
* @param {string} item.ubo uBlock name
- *
* @returns {string} markdown table row
*/
const getRow = (id, { adg, abp, ubo }) => {
@@ -77,10 +76,10 @@ const getTableHeader = () => {
/**
* Builds markdown string of scriptlets/redirect compatibility table
+ *
* @param {string} title title for scriptlets or redirects
* @param {CompatibilityItem[]} data array of scriptlets or redirects compatibility data items
* @param {'scriptlets'|'redirects'} id
- *
* @returns {string} scriptlets or redirects compatibility table
*/
const buildTable = (title, data = [], id = '') => {
diff --git a/scripts/build-corelibs.js b/scripts/build-corelibs.js
index d335ef0f..2338d65b 100644
--- a/scripts/build-corelibs.js
+++ b/scripts/build-corelibs.js
@@ -7,7 +7,8 @@ import { version } from '../package.json';
import { writeFile } from './helpers';
const buildCorelibsJson = async () => {
- const { getScriptletFunction } = require('../tmp/scriptlets-func'); // eslint-disable-line import/no-unresolved,global-require
+ // eslint-disable-next-line import/no-unresolved,global-require
+ const { getScriptletFunction } = require('../tmp/scriptlets-func');
const scriptlets = await Promise.all(Object
.values(scriptletList)
diff --git a/scripts/build-docs.js b/scripts/build-docs.js
index 6ce57432..3f33fc34 100644
--- a/scripts/build-docs.js
+++ b/scripts/build-docs.js
@@ -46,8 +46,9 @@ const aboutTrustedScriptletsPath = path.resolve(
);
/**
- * Collects required comments from files and
- * returns describing object for scriptlets and redirects
+ * Collects required comments from files
+ *
+ * @returns {Object} describing object for scriptlets and redirects
*/
const manageDataFromFiles = () => {
const dataFromScriptletsFiles = getDataFromFiles(
@@ -95,7 +96,6 @@ const manageDataFromFiles = () => {
* Generates markdown list and describing text.
*
* @param {DescribingCommentData[]} dataItems array of comment data objects
- *
* @returns {MarkdownData}
*/
const getMarkdownData = (dataItems) => {
@@ -105,11 +105,13 @@ const getMarkdownData = (dataItems) => {
description,
source,
}) => {
- acc.list.push(`* [${name}](#${name})${EOL}`);
+ // low case name should be used as anchor
+ acc.list.push(`* [${name}](#${name.toLowerCase()})${EOL}`);
- const typeOfSrc = type === 'scriptlet' ? 'Scriptlet' : 'Redirect';
+ const typeOfSrc = type.toLowerCase().includes('scriptlet') ? 'Scriptlet' : 'Redirect';
- const body = `### ⚡️ ${name}
+ // low case name should be used as anchor
+ const body = `### ⚡️ ${name}
${description}${EOL}
[${typeOfSrc} source](${source})
* * *${EOL}${EOL}`;
diff --git a/scripts/build-funcs.js b/scripts/build-funcs.js
index 57683c13..478aec8f 100644
--- a/scripts/build-funcs.js
+++ b/scripts/build-funcs.js
@@ -23,15 +23,17 @@ import { writeFile } from './helpers';
/**
* Method creates string for file with scriptlets functions,
* where dependencies are placed inside scriptlet functions
+ *
+ * @returns {string}
*/
const getScriptletFunctionsString = () => {
function wrapInFunc(name, code) {
return `function ${name}(source, args){\n${code}\n}`;
}
-
// we require scriptlets list dynamically, because scriptletsList file can be not built in the
// moment of this script execution
- const scriptletsList = require('../tmp/scriptlets-list'); // eslint-disable-line global-require, import/no-unresolved
+ // eslint-disable-next-line import/no-unresolved,global-require
+ const scriptletsList = require('../tmp/scriptlets-list');
const scriptletsFunctions = Object.values(scriptletsList);
diff --git a/scripts/build-redirects.js b/scripts/build-redirects.js
index d12437e4..70e0f7ec 100644
--- a/scripts/build-redirects.js
+++ b/scripts/build-redirects.js
@@ -143,7 +143,9 @@ const getJsRedirects = async (options = {}) => {
// TODO: seems like duplicate of already existed code
/**
* Returns first line of describing comment from redirect resource file
+ *
* @param {string} rrName redirect resource name
+ * @returns {string|undefined}
*/
const getComment = (rrName) => {
const { description } = redirectsDescriptions.find((rr) => rr.name === rrName);
@@ -197,7 +199,7 @@ export const getPreparedRedirects = async (options) => {
/**
* Copies non-static redirects sources to dist
*
- * @param redirectsData
+ * @param {object[]} redirectsData
*/
const buildJsRedirectFiles = async (redirectsData) => {
const saveRedirectData = async (redirect) => {
@@ -212,7 +214,7 @@ const buildJsRedirectFiles = async (redirectsData) => {
/**
* Prepares static redirects sources to dist
*
- * @param redirectsData
+ * @param {object[]} redirectsData
*/
const buildStaticRedirectFiles = async (redirectsData) => {
const prepareRedirectData = async (redirect) => {
diff --git a/scripts/build-tests.js b/scripts/build-tests.js
index d75871f9..090eb9cb 100644
--- a/scripts/build-tests.js
+++ b/scripts/build-tests.js
@@ -14,9 +14,11 @@ const TEST_FILE_NAME_MARKER = '.test.js';
/**
* Prepares rollup config for test file
+ *
* @param {string} fileName test file name
* @param {string} dirPath resolved directory path
* @param {string} subDir subdirectory with test files
+ * @returns {Object} rollup config
*/
const getTestConfig = (fileName, dirPath, subDir) => {
if (!fs.existsSync(TESTS_DIST)) {
diff --git a/scripts/check-sources-updates.js b/scripts/check-sources-updates.js
index 99fe8940..f548d3e3 100644
--- a/scripts/check-sources-updates.js
+++ b/scripts/check-sources-updates.js
@@ -14,8 +14,10 @@ const {
/**
* Checks if arrays contain the same strings
+ *
* @param {Array} arr1
* @param {Array} arr2
+ * @returns {boolean}
*/
const areArraysOfStringsEqual = (arr1, arr2) => {
if (arr1.length !== arr2.length) {
@@ -30,6 +32,8 @@ const areArraysOfStringsEqual = (arr1, arr2) => {
/**
* Returns parsed compatibility table
+ *
+ * @returns {Object}
*/
const getCompatibilityTable = () => {
const rawData = fs.readFileSync(COMPATIBILITY_TABLE_DATA_PATH);
@@ -39,7 +43,9 @@ const getCompatibilityTable = () => {
/**
* Returns list of scriptlets listed in table for specified platform
+ *
* @param {"ubo"|"abp"} platform
+ * @returns {string[]}
*/
const getScriptletsFromTable = (platform) => {
const { scriptlets } = getCompatibilityTable();
@@ -48,22 +54,32 @@ const getScriptletsFromTable = (platform) => {
/**
* Returns list of redirects listed in table for specified platform
+ *
* @param {"ubo"|"abp"} platform
+ * @returns {string[]}
*/
const getRedirectsFromTable = (platform) => {
const { redirects } = getCompatibilityTable();
return redirects.map((item) => item[platform]).filter((item) => !!item);
};
+/**
+ * @typedef {Object} Diff
+ * @property {string[]} added added content
+ * @property {string[]} removed removed content
+ */
+
/**
* Finds a difference between old and new array
+ *
* @param {Array} oldList
* @param {Array} newList
+ * @returns {Diff|null}
*/
const getDiff = (oldList, newList) => {
const diff = {
- removed: [],
added: [],
+ removed: [],
};
diff.removed = oldList.filter((item) => (
@@ -77,6 +93,7 @@ const getDiff = (oldList, newList) => {
/**
* Marks removed rules with (removed) and adds new rules to the end of the table
+ *
* @param {{removed: Array, added: Array}} diff Object with diffs for certain type and platform
* @param {"scriptlets"|"redirects"} ruleType
* @param {"ubo"|"abp"} platform
diff --git a/scripts/compatibility-table.json b/scripts/compatibility-table.json
index 3082fabd..9eb79223 100644
--- a/scripts/compatibility-table.json
+++ b/scripts/compatibility-table.json
@@ -106,6 +106,10 @@
{
"adg": "prevent-popads-net"
},
+ {
+ "adg": "prevent-refresh",
+ "ubo": "refresh-defuser.js"
+ },
{
"adg": "prevent-requestAnimationFrame",
"ubo": "no-requestAnimationFrame-if.js (norafif.js)"
@@ -144,6 +148,10 @@
{
"adg": "set-popads-dummy"
},
+ {
+ "adg": "xml-prune",
+ "ubo": "xml-prune.js"
+ },
{
"ubo": "webrtc-if.js"
},
@@ -231,18 +239,12 @@
{
"ubo": "abort-current-script.js (acs.js, abort-current-inline-script.js, acis.js)"
},
- {
- "ubo": "refresh-defuser.js"
- },
{
"ubo": "no-floc.js"
},
{
"ubo": "window.name-defuser.js"
},
- {
- "ubo": "xml-prune.js"
- },
{
"ubo": "m3u-prune.js"
}
@@ -295,6 +297,10 @@
"adg": "google-analytics-ga",
"ubo": "google-analytics_ga.js"
},
+ {
+ "adg": "google-ima3",
+ "ubo": "google-ima.js"
+ },
{
"adg": "googlesyndication-adsbygoogle",
"ubo": "googlesyndication_adsbygoogle.js"
@@ -444,9 +450,6 @@
{
"ubo": "mxpnl_mixpanel.js"
},
- {
- "ubo": "google-ima.js"
- },
{
"ubo": "noop-0.5s.mp3"
}
diff --git a/scripts/helpers.js b/scripts/helpers.js
index 6a75008b..8dcec4ef 100644
--- a/scripts/helpers.js
+++ b/scripts/helpers.js
@@ -21,6 +21,7 @@ const writeFile = async (filePath, content) => {
/**
* Gets list of `.js` files in directory
+ *
* @param {string} relativeDirPath relative path to directory
* @returns {string[]} array of file names
*/
@@ -43,7 +44,6 @@ const getFilesList = (relativeDirPath) => {
* In one file might be comments describing scriptlet and redirect as well.
*
* @param {string} filePath absolute path to file
- *
* @returns {CommentTag[]}
*/
const getDescribingCommentTags = (filePath) => {
@@ -80,7 +80,6 @@ Please add one OR edit the list of NON_SCRIPTLETS_FILES / NON_REDIRECTS_FILES.`)
* @typedef {Object} DescribingCommentData
*
* Collected data from jsdoc-type comment for every scriptlet or redirect.
- *
* @property {string} type parsed instance tag:
* 'scriptlet' for '@scriptlet', 'redirect' for '@redirect'
* @property {string} name name of instance which goes after the instance tag
@@ -93,7 +92,6 @@ Please add one OR edit the list of NON_SCRIPTLETS_FILES / NON_REDIRECTS_FILES.`)
*
* @param {CommentTag[]} commentTags parsed tags from describing comment
* @param {string} source relative path to file
- *
* @returns {DescribingCommentData}
*/
const prepareCommentsData = (commentTags, source) => {
@@ -108,9 +106,9 @@ const prepareCommentsData = (commentTags, source) => {
/**
* Gets data objects which describe every required comment in one directory
+ *
* @param {string[]} filesList list of files in directory
* @param {string} relativeDirPath relative path to directory
- *
* @returns {DescribingCommentData}
*/
const getDataFromFiles = (filesList, relativeDirPath) => {
diff --git a/scripts/rollup-runners.js b/scripts/rollup-runners.js
index 4498b0eb..61e4d976 100644
--- a/scripts/rollup-runners.js
+++ b/scripts/rollup-runners.js
@@ -5,7 +5,8 @@ const { log } = console;
/**
* Builds scriptlets
- * @param config config may be list of configs or one config
+ *
+ * @param {object|object[]} config config may be list of configs or one config
*/
export const rollupStandard = async (config) => {
const runOneConfig = async (config) => {
@@ -26,7 +27,8 @@ export const rollupStandard = async (config) => {
/**
* Builds scriptlets in the watch mode
- * @param config - config may be list of configs or one config
+ *
+ * @param {object|object[]} config - config may be list of configs or one config
*/
export const rollupWatch = (config) => {
const watcher = rollup.watch(config);
diff --git a/src/.eslintrc b/src/.eslintrc
deleted file mode 100644
index 8b7aaf62..00000000
--- a/src/.eslintrc
+++ /dev/null
@@ -1,20 +0,0 @@
-{
- "extends": [
- "../.eslintrc",
- "plugin:compat/recommended"
- ],
- "rules": {
- "no-restricted-properties": [
- "error",
- {
- "property": "includes"
- },
- {
- "property": "startsWith"
- },
- {
- "property": "endsWith"
- }
- ]
- }
-}
diff --git a/src/helpers/.eslintrc.js b/src/helpers/.eslintrc.js
new file mode 100644
index 00000000..887a1917
--- /dev/null
+++ b/src/helpers/.eslintrc.js
@@ -0,0 +1,13 @@
+module.exports = {
+ extends: [
+ '../../.eslintrc',
+ ],
+ rules: {
+ 'jsdoc/require-jsdoc': 1,
+ 'jsdoc/require-param': 1,
+ 'jsdoc/valid-types': 1,
+ 'jsdoc/no-undefined-types': 1,
+ 'jsdoc/require-param-description': 1,
+ 'jsdoc/require-returns-description': 1,
+ },
+};
diff --git a/src/helpers/add-event-listener-utils.js b/src/helpers/add-event-listener-utils.js
index c579dca5..b8737573 100644
--- a/src/helpers/add-event-listener-utils.js
+++ b/src/helpers/add-event-listener-utils.js
@@ -1,7 +1,8 @@
/**
* Validates event type
- * @param {*} type
- * @returns {boolean}
+ *
+ * @param {any} type event type
+ * @returns {boolean} if type is valid
*/
export const validateType = (type) => {
// https://github.com/AdguardTeam/Scriptlets/issues/125
@@ -10,8 +11,9 @@ export const validateType = (type) => {
/**
* Validates event listener
- * @param {*} listener
- * @returns {boolean}
+ *
+ * @param {any} listener event listener
+ * @returns {boolean} if listener callback is valid
*/
export const validateListener = (listener) => {
// https://developer.mozilla.org/en-US/docs/Web/API/EventTarget/addEventListener#parameters
@@ -23,11 +25,16 @@ export const validateListener = (listener) => {
&& typeof listener.handleEvent === 'function'));
};
+/**
+ * @typedef {object|Function|null} EventListener
+ */
+
/**
* Serialize valid event listener
* https://developer.mozilla.org/en-US/docs/Web/API/EventListener
+ *
* @param {EventListener} listener valid listener
- * @returns {string}
+ * @returns {string} listener string
*/
export const listenerToString = (listener) => {
return typeof listener === 'function'
diff --git a/src/helpers/adjust-set-utils.js b/src/helpers/adjust-set-utils.js
index 791b7b1e..91b10e35 100644
--- a/src/helpers/adjust-set-utils.js
+++ b/src/helpers/adjust-set-utils.js
@@ -4,7 +4,8 @@ export const shouldMatchAnyDelay = (delay) => delay === '*';
/**
* Handles input delay value
- * @param {*} delay
+ *
+ * @param {any} delay matchDelay argument of adjust-* scriptlets
* @returns {number} proper number delay value
*/
export const getMatchDelay = (delay) => {
@@ -18,9 +19,10 @@ export const getMatchDelay = (delay) => {
/**
* Checks delay match condition
- * @param {*} inputDelay
- * @param {number} realDelay
- * @returns {boolean}
+ *
+ * @param {any} inputDelay matchDelay argument of adjust-* scriptlets
+ * @param {number} realDelay delay argument of setTimeout/setInterval
+ * @returns {boolean} if given delays match
*/
export const isDelayMatched = (inputDelay, realDelay) => {
return shouldMatchAnyDelay(inputDelay)
@@ -29,7 +31,8 @@ export const isDelayMatched = (inputDelay, realDelay) => {
/**
* Handles input boost value
- * @param {*} boost
+ *
+ * @param {any} boost boost argument of adjust-* scriptlets
* @returns {number} proper number boost multiplier value
*/
export const getBoostMultiplier = (boost) => {
diff --git a/src/helpers/array-utils.js b/src/helpers/array-utils.js
index 371e4266..9263e434 100644
--- a/src/helpers/array-utils.js
+++ b/src/helpers/array-utils.js
@@ -2,7 +2,9 @@
* Some browsers do not support Array.prototype.flat()
* for example, Opera 42 which is used for browserstack tests
* https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/flat
- * @param {Array} input
+ *
+ * @param {Array} input arbitrary array
+ * @returns {Array} flattened array
*/
export const flatten = (input) => {
const stack = [];
@@ -24,7 +26,8 @@ export const flatten = (input) => {
/**
* Predicate method to check if the array item exists
- * @param {any} item
- * @returns {boolean}
+ *
+ * @param {any} item arbitrary
+ * @returns {boolean} if item is truthy or not
*/
export const isExisting = (item) => !!item;
diff --git a/src/helpers/compatibility-redirects.js b/src/helpers/compatibility-redirects.js
index abce2dc0..a0208819 100644
--- a/src/helpers/compatibility-redirects.js
+++ b/src/helpers/compatibility-redirects.js
@@ -71,12 +71,18 @@ const redirects = [
adg: 'googletagmanager-gtm',
ubo: 'google-analytics_ga.js',
},
+ {
+ // https://github.com/AdguardTeam/Scriptlets/issues/260
+ adg: 'googletagmanager-gtm',
+ ubo: 'googletagmanager_gtm.js',
+ },
{
adg: 'googletagservices-gpt',
ubo: 'googletagservices_gpt.js',
},
{
adg: 'google-ima3',
+ ubo: 'google-ima.js',
},
{
adg: 'gemius',
diff --git a/src/helpers/converter.js b/src/helpers/converter.js
index 9f5318a9..7ff77001 100644
--- a/src/helpers/converter.js
+++ b/src/helpers/converter.js
@@ -42,7 +42,11 @@ const ADG_XHR_TYPE = 'xmlhttprequest';
const ADG_SET_CONSTANT_NAME = 'set-constant';
const ADG_SET_CONSTANT_EMPTY_STRING = '';
+const ADG_SET_CONSTANT_EMPTY_ARRAY = 'emptyArr';
+const ADG_SET_CONSTANT_EMPTY_OBJECT = 'emptyObj';
const UBO_SET_CONSTANT_EMPTY_STRING = '\'\'';
+const UBO_SET_CONSTANT_EMPTY_ARRAY = '[]';
+const UBO_SET_CONSTANT_EMPTY_OBJECT = '{}';
const ADG_PREVENT_FETCH_NAME = 'prevent-fetch';
const ADG_PREVENT_FETCH_EMPTY_STRING = '';
@@ -61,8 +65,10 @@ const ADG_REMOVE_CLASS_NAME = REMOVE_CLASS_ALIASES[0];
const REMOVE_ATTR_CLASS_APPLYING = ['asap', 'stay', 'complete'];
/**
- * Returns array of strings separated by space which not in quotes
- * @param {string} str
+ * Returns array of strings separated by space which is not in quotes
+ *
+ * @param {string} str arbitrary string
+ * @returns {string[]} result array
*/
const getSentences = (str) => {
const reg = /'.*?'|".*?"|\S+/g;
@@ -71,8 +77,10 @@ const getSentences = (str) => {
/**
* Replaces string with data by placeholders
- * @param {string} str
- * @param {Object} data - where keys are placeholders names
+ *
+ * @param {string} str string with placeholders
+ * @param {Object} data where keys are placeholders names
+ * @returns {string} string filled with data
*/
const replacePlaceholders = (str, data) => {
return Object.keys(data).reduce((acc, key) => {
@@ -100,7 +108,8 @@ const splitArgs = (str) => {
/**
* Validates remove-attr/class scriptlet args
- * @param {string[]} parsedArgs
+ *
+ * @param {string[]} parsedArgs scriptlet arguments
* @returns {string[]|Error} valid args OR error for invalid selector
*/
const validateRemoveAttrClassArgs = (parsedArgs) => {
@@ -143,8 +152,9 @@ const validateRemoveAttrClassArgs = (parsedArgs) => {
/**
* Converts string of UBO scriptlet rule to AdGuard scriptlet rule
- * @param {string} rule - UBO scriptlet rule
- * @returns {string[]} - array with one AdGuard scriptlet rule
+ *
+ * @param {string} rule UBO scriptlet rule
+ * @returns {string[]} array with one AdGuard scriptlet rule
*/
export const convertUboScriptletToAdg = (rule) => {
const domains = getBeforeRegExp(rule, validator.UBO_SCRIPTLET_MASK_REG);
@@ -189,9 +199,9 @@ export const convertUboScriptletToAdg = (rule) => {
/**
* Convert string of ABP snippet rule to AdGuard scriptlet rule
- * @param {string} rule - ABP snippet rule
- * @returns {Array} - array of AdGuard scriptlet rules -
- * one or few items depends on Abp-rule
+ *
+ * @param {string} rule ABP snippet rule
+ * @returns {Array} array of AdGuard scriptlet rules, one or few items depends on Abp-rule
*/
export const convertAbpSnippetToAdg = (rule) => {
const SEMICOLON_DIVIDER = /;(?=(?:(?:[^"]*"){2})*[^"]*$)/g;
@@ -217,9 +227,9 @@ export const convertAbpSnippetToAdg = (rule) => {
/**
* Converts scriptlet rule to AdGuard one
- * @param {string} rule
- * @returns {Array} - array of AdGuard scriptlet rules -
- * one item for Adg and Ubo or few items for Abp
+ *
+ * @param {string} rule scriptlet rule
+ * @returns {Array} array of AdGuard scriptlet rules, one item for Adg and Ubo or few items for Abp
*/
export const convertScriptletToAdg = (rule) => {
let result;
@@ -236,8 +246,9 @@ export const convertScriptletToAdg = (rule) => {
/**
* Converts UBO scriptlet rule to AdGuard one
- * @param {string} rule - AdGuard scriptlet rule
- * @returns {string} - UBO scriptlet rule
+ *
+ * @param {string} rule AdGuard scriptlet rule
+ * @returns {string} UBO scriptlet rule
*/
export const convertAdgScriptletToUbo = (rule) => {
let res;
@@ -246,10 +257,17 @@ export const convertAdgScriptletToUbo = (rule) => {
const { name: parsedName, args: parsedParams } = parseRule(rule);
let preparedParams;
- // https://github.com/AdguardTeam/FiltersCompiler/issues/102
if (parsedName === ADG_SET_CONSTANT_NAME
+ // https://github.com/AdguardTeam/FiltersCompiler/issues/102
&& parsedParams[1] === ADG_SET_CONSTANT_EMPTY_STRING) {
preparedParams = [parsedParams[0], UBO_SET_CONSTANT_EMPTY_STRING];
+ } else if (parsedName === ADG_SET_CONSTANT_NAME
+ // https://github.com/uBlockOrigin/uBlock-issues/issues/2411
+ && parsedParams[1] === ADG_SET_CONSTANT_EMPTY_ARRAY) {
+ preparedParams = [parsedParams[0], UBO_SET_CONSTANT_EMPTY_ARRAY];
+ } else if (parsedName === ADG_SET_CONSTANT_NAME
+ && parsedParams[1] === ADG_SET_CONSTANT_EMPTY_OBJECT) {
+ preparedParams = [parsedParams[0], UBO_SET_CONSTANT_EMPTY_OBJECT];
} else if (parsedName === ADG_PREVENT_FETCH_NAME
// https://github.com/AdguardTeam/Scriptlets/issues/109
&& (parsedParams[0] === ADG_PREVENT_FETCH_WILDCARD
@@ -317,8 +335,9 @@ export const convertAdgScriptletToUbo = (rule) => {
/**
* Checks whether the ADG scriptlet exists or UBO/ABP scriptlet is compatible to ADG
- * @param {string} input - can be ADG or UBO or ABP scriptlet rule
- * @returns {boolean}
+ *
+ * @param {string} input can be ADG or UBO or ABP scriptlet rule
+ * @returns {boolean} if scriptlet rule is valid
*/
export const isValidScriptletRule = (input) => {
if (!input) {
@@ -339,9 +358,10 @@ export const isValidScriptletRule = (input) => {
/**
* Gets index and redirect resource marker from UBO/ADG modifiers array
- * @param {string[]} modifiers
+ *
+ * @param {string[]} modifiers rule modifiers
* @param {Object} redirectsData validator.REDIRECT_RULE_TYPES.(UBO|ADG)
- * @param {string} rule
+ * @param {string} rule rule string
* @returns {Object} { index, marker }
*/
const getMarkerData = (modifiers, redirectsData, rule) => {
@@ -362,8 +382,9 @@ const getMarkerData = (modifiers, redirectsData, rule) => {
/**
* Converts Ubo redirect rule to Adg one
- * @param {string} rule
- * @returns {string}
+ *
+ * @param {string} rule ubo redirect rule
+ * @returns {string} converted adg rule
*/
export const convertUboRedirectToAdg = (rule) => {
const firstPartOfRule = substringBefore(rule, '$');
@@ -392,8 +413,9 @@ export const convertUboRedirectToAdg = (rule) => {
/**
* Converts Abp redirect rule to Adg one
- * @param {string} rule
- * @returns {string}
+ *
+ * @param {string} rule abp redirect rule
+ * @returns {string} converted adg rule
*/
export const convertAbpRedirectToAdg = (rule) => {
const firstPartOfRule = substringBefore(rule, '$');
@@ -417,8 +439,9 @@ export const convertAbpRedirectToAdg = (rule) => {
/**
* Converts redirect rule to AdGuard one
- * @param {string} rule
- * @returns {string}
+ *
+ * @param {string} rule redirect rule
+ * @returns {string} converted adg rule
*/
export const convertRedirectToAdg = (rule) => {
let result;
@@ -441,8 +464,10 @@ export const convertRedirectToAdg = (rule) => {
* Source types are chosen according to redirect name
* e.g. ||ad.com^$redirect=,important ->> ||ad.com^$redirect=,important,script
* 3. Replaces Adg redirect name by Ubo analog
- * @param {string} rule
- * @returns {string}
+ *
+ * @param {string} rule adg rule
+ * @returns {string} converted ubo rule
+ * @throws on incompatible rule
*/
export const convertAdgRedirectToUbo = (rule) => {
if (!validator.isAdgRedirectCompatibleWithUbo(rule)) {
diff --git a/src/helpers/cookie-utils.js b/src/helpers/cookie-utils.js
index 332d5896..7bebf680 100644
--- a/src/helpers/cookie-utils.js
+++ b/src/helpers/cookie-utils.js
@@ -1,26 +1,19 @@
import { nativeIsNaN } from './number-utils';
-import { logMessage } from './log-message';
-
-/**
- * @typedef { import('../scriptlets/index').Source } Source
- */
/**
* Checks whether the input path is supported
*
* @param {string} rawPath input path
- *
- * @returns {boolean}
+ * @returns {boolean} if cookie path is valid
*/
-export const isValidCookieRawPath = (rawPath) => rawPath === '/' || rawPath === 'none';
+export const isValidCookiePath = (rawPath) => rawPath === '/' || rawPath === 'none';
/**
* Returns 'path=/' if rawPath is '/'
* or empty string '' for other cases, `rawPath === 'none'` included
*
- * @param {string} rawPath
- *
- * @returns {string}
+ * @param {string} rawPath path argument of *set-cookie-* scriptlets
+ * @returns {string} cookie path
*/
export const getCookiePath = (rawPath) => {
if (rawPath === '/') {
@@ -28,38 +21,29 @@ export const getCookiePath = (rawPath) => {
}
// otherwise do not set path as invalid
// the same for pathArg === 'none'
- //
return '';
};
/**
* Combines input cookie name, value, and path into string.
*
- * @param {Source} source
- * @param {string} rawName
- * @param {string} rawValue
- * @param {string} rawPath
- *
- * @returns {string} string OR `null` if path is not supported
+ * @param {string} rawName name argument of *set-cookie-* scriptlets
+ * @param {string} rawValue value argument of *set-cookie-* scriptlets
+ * @param {string} rawPath path argument of *set-cookie-* scriptlets
+ * @returns {string|null} string OR `null` if path is not supported
*/
-export const concatCookieNameValuePath = (source, rawName, rawValue, rawPath) => {
- if (!isValidCookieRawPath(rawPath)) {
- logMessage(source, `Invalid cookie path: '${rawPath}'`);
- return null;
- }
+export const concatCookieNameValuePath = (rawName, rawValue, rawPath) => {
// eslint-disable-next-line max-len
- return `${encodeURIComponent(rawName)}=${encodeURIComponent(rawValue)}; ${getCookiePath(rawPath)}`;
+ return `${encodeURIComponent(rawName)}=${encodeURIComponent(rawValue)}; ${getCookiePath(rawPath)};`;
};
/**
* Gets supported cookie value
*
- * @param {Source} source
* @param {string} value input cookie value
- *
* @returns {string|null} valid cookie string if ok OR null if not
*/
-export const getLimitedCookieValue = (source, value) => {
+export const getLimitedCookieValue = (value) => {
if (!value) {
return null;
}
@@ -88,11 +72,9 @@ export const getLimitedCookieValue = (source, value) => {
} else if (/^\d+$/.test(value)) {
validValue = parseFloat(value);
if (nativeIsNaN(validValue)) {
- logMessage(source, `Invalid cookie value: '${value}'`);
return null;
}
if (Math.abs(validValue) < 0 || Math.abs(validValue) > 15) {
- logMessage(source, `Invalid cookie value: '${value}'`);
return null;
}
} else {
@@ -104,6 +86,7 @@ export const getLimitedCookieValue = (source, value) => {
/**
* Parses cookie string into object
+ *
* @param {string} cookieString string that conforms to document.cookie format
* @returns {Object} key:value object that corresponds with incoming cookies keys and values
*/
@@ -134,10 +117,11 @@ export const parseCookieString = (cookieString) => {
/**
* Check if cookie with specified name and value is present in a cookie string
- * @param {string} cookieString
- * @param {string} name
- * @param {string} value
- * @returns {boolean}
+ *
+ * @param {string} cookieString 'document.cookie'-like string
+ * @param {string} name name argument of *set-cookie-* scriptlets
+ * @param {string} value value argument of *set-cookie-* scriptlets
+ * @returns {boolean} if cookie is already set
*/
export const isCookieSetWithValue = (cookieString, name, value) => {
return cookieString.split(';')
@@ -152,3 +136,33 @@ export const isCookieSetWithValue = (cookieString, name, value) => {
return name === cookieName && value === cookieValue;
});
};
+
+/**
+ * Returns parsed offset expired number of ms or null if `offsetExpiresSec` is invalid
+ *
+ * @param {string} offsetExpiresSec input offset param in seconds
+ * @returns {number|null} number is milliseconds OR null
+ */
+export const getTrustedCookieOffsetMs = (offsetExpiresSec) => {
+ const ONE_YEAR_EXPIRATION_KEYWORD = '1year';
+ const ONE_DAY_EXPIRATION_KEYWORD = '1day';
+
+ const MS_IN_SEC = 1000;
+ const SECONDS_IN_YEAR = 365 * 24 * 60 * 60;
+ const SECONDS_IN_DAY = 24 * 60 * 60;
+
+ let parsedSec;
+ // Set predefined expire value if corresponding keyword was passed
+ if (offsetExpiresSec === ONE_YEAR_EXPIRATION_KEYWORD) {
+ parsedSec = SECONDS_IN_YEAR;
+ } else if (offsetExpiresSec === ONE_DAY_EXPIRATION_KEYWORD) {
+ parsedSec = SECONDS_IN_DAY;
+ } else {
+ parsedSec = Number.parseInt(offsetExpiresSec, 10);
+ // If offsetExpiresSec has been parsed to NaN - do not set cookie at all
+ if (Number.isNaN(parsedSec)) {
+ return null;
+ }
+ }
+ return parsedSec * MS_IN_SEC;
+};
diff --git a/src/helpers/create-on-error-handler.js b/src/helpers/create-on-error-handler.js
index 4b9eca79..041f8094 100644
--- a/src/helpers/create-on-error-handler.js
+++ b/src/helpers/create-on-error-handler.js
@@ -1,8 +1,9 @@
/**
* Generates function which silents global errors on page generated by scriptlet
* If error doesn't belong to our error we transfer it to the native onError handler
+ *
* @param {string} rid - unique identifier of scriptlet
- * @return {onError}
+ * @returns {Function} window.onerror handler
*/
export function createOnErrorHandler(rid) {
// eslint-disable-next-line consistent-return
diff --git a/src/helpers/get-descriptor-addon.js b/src/helpers/get-descriptor-addon.js
index 8c930a7b..1acb3909 100644
--- a/src/helpers/get-descriptor-addon.js
+++ b/src/helpers/get-descriptor-addon.js
@@ -1,21 +1,21 @@
import { randomId } from './random-id';
/**
- * Prevent infinite loops when trapping props that could be used by scriptlet's own helpers
+ * Prevents infinite loops when trapping props that could be used by scriptlet's own helpers
* Example: window.RegExp, that is used by matchStackTrace > toRegExp
*
* https://github.com/AdguardTeam/Scriptlets/issues/251
* https://github.com/AdguardTeam/Scriptlets/issues/226
* https://github.com/AdguardTeam/Scriptlets/issues/232
*
- * @return {Object}
+ * @returns {Object} descriptor addon
*/
export function getDescriptorAddon() {
return {
isAbortingSuspended: false,
isolateCallback(cb, ...args) {
this.isAbortingSuspended = true;
- // try...catch is required in case if there are more than one inline scripts
- // which should be aborted.
+ // try...catch is required in case there are more than one inline scripts
+ // which should be aborted,
// so after the first successful abortion, `cb(...args);` will throw error,
// and we should not stop on that and continue to abort other scripts
try {
diff --git a/src/helpers/get-property-in-chain.js b/src/helpers/get-property-in-chain.js
index a1d71a64..dd1f413b 100644
--- a/src/helpers/get-property-in-chain.js
+++ b/src/helpers/get-property-in-chain.js
@@ -1,10 +1,10 @@
import { isEmptyObject } from './object-utils';
/**
- * @typedef Chain
- * @property {Object} base
- * @property {string} prop
- * @property {string} [chain]
+ * @typedef ChainInfo
+ * @property {Object} base current chain base
+ * @property {string} prop current chain prop
+ * @property {string} [chain] string representation
*/
/**
@@ -14,9 +14,9 @@ import { isEmptyObject } from './object-utils';
* defines this property as 'undefined'
* and returns base, property name and remaining part of property chain
*
- * @param {Object} base
- * @param {string} chain
- * @returns {Chain}
+ * @param {Object} base object that owns chain
+ * @param {string} chain chain of owner properties
+ * @returns {ChainInfo} chain info object
*/
export function getPropertyInChain(base, chain) {
const pos = chain.indexOf('.');
diff --git a/src/helpers/get-wildcard-property-in-chain.js b/src/helpers/get-wildcard-property-in-chain.js
index 0274983b..0b139c8d 100644
--- a/src/helpers/get-wildcard-property-in-chain.js
+++ b/src/helpers/get-wildcard-property-in-chain.js
@@ -1,8 +1,8 @@
/**
- * @typedef Chain
- * @property {Object} base
- * @property {string} prop
- * @property {string} [chain]
+ * @typedef ChainInfo
+ * @property {Object} base current chain base
+ * @property {string} prop current chain prop
+ * @property {string} [chain] string representation
*/
/**
@@ -10,12 +10,12 @@
* Similar to getPropertyInChain but upgraded for json-prune:
* handle wildcard properties and does not define nonexistent base property as 'undefined'
*
- * @param {Object} base
- * @param {string} chain
+ * @param {Object} base object that owns chain
+ * @param {string} chain chain of owner properties
* @param {boolean} [lookThrough=false]
* should the method look through it's props in order to wildcard
* @param {Array} [output=[]] result acc
- * @returns {Chain[]} array of objects
+ * @returns {ChainInfo[]} array of objects
*/
export function getWildcardPropertyInChain(base, chain, lookThrough = false, output = []) {
const pos = chain.indexOf('.');
diff --git a/src/helpers/hit.js b/src/helpers/hit.js
index c7e8da1b..9f862138 100644
--- a/src/helpers/hit.js
+++ b/src/helpers/hit.js
@@ -1,19 +1,20 @@
/* eslint-disable no-console, no-underscore-dangle */
+
/**
* Hit used only for debug purposes now
- * @param {Source} source
- * @param {string} [message] - optional message;
+ *
+ * @param {Object} source scriptlet properties
* use LOG_MARKER = 'log: ' at the start of a message
* for logging scriptlets
*/
-export const hit = (source, message) => {
+export const hit = (source) => {
if (source.verbose !== true) {
return;
}
try {
const log = console.log.bind(console);
- const trace = console.trace.bind(console); // eslint-disable-line compat/compat
+ const trace = console.trace.bind(console);
let prefix = source.ruleText || '';
@@ -32,17 +33,6 @@ export const hit = (source, message) => {
prefix = `${source.domainName}${rulePart}`;
}
- // Used to check if scriptlet uses 'hit' function for logging
- const LOG_MARKER = 'log: ';
-
- if (message) {
- if (message.indexOf(LOG_MARKER) === -1) {
- log(`${prefix} message:\n${message}`);
- } else {
- log(message.slice(LOG_MARKER.length));
- }
- }
-
log(`${prefix} trace start`);
if (trace) {
trace();
diff --git a/src/helpers/index.js b/src/helpers/index.js
index 4b17fbd0..58c75865 100644
--- a/src/helpers/index.js
+++ b/src/helpers/index.js
@@ -31,3 +31,4 @@ export * from './parse-flags';
export * from './parse-keyword-value';
export * from './random-id';
export * from './throttle';
+export * from './shadow-dom-utils';
diff --git a/src/helpers/injector.js b/src/helpers/injector.js
index 80f99e57..74a1958e 100644
--- a/src/helpers/injector.js
+++ b/src/helpers/injector.js
@@ -1,6 +1,8 @@
/**
* Concat dependencies to scriptlet code
+ *
* @param {string} scriptlet string view of scriptlet
+ * @returns {string} string view of scriptlet with attached dependencies
*/
export function attachDependencies(scriptlet) {
const { injections = [] } = scriptlet;
@@ -11,8 +13,10 @@ export function attachDependencies(scriptlet) {
/**
* Add scriptlet call to existing code
- * @param {Function} scriptlet
- * @param {string} code
+ *
+ * @param {Function} scriptlet scriptlet func
+ * @param {string} code scriptlet's string representation
+ * @returns {string} wrapped scriptlet call
*/
export function addCall(scriptlet, code) {
return `${code}
@@ -27,12 +31,6 @@ export function addCall(scriptlet, code) {
/**
* Wrap function into IIFE (Immediately invoked function expression)
*
- * @param {Source} source - object with scriptlet properties
- * @param {string} code - scriptlet source code with dependencies
- *
- * @param redirect
- * @returns {string} full scriptlet code
- *
* @example
* const source = {
* args: ["aaa", "bbb"],
@@ -46,6 +44,10 @@ export function addCall(scriptlet, code) {
* function noeval(source) { alert(source); }
* noeval.apply(this, args);
* )({"args": ["aaa", "bbb"], "name":"noeval"}, ["aaa", "bbb"])`
+ * @param {Object} source - object with scriptlet properties
+ * @param {string} code - scriptlet source code with dependencies
+ * @param {boolean} redirect if function is redirect
+ * @returns {string} full scriptlet code
*/
export function passSourceAndProps(source, code, redirect = false) {
if (source.hit) {
@@ -64,7 +66,9 @@ export function passSourceAndProps(source, code, redirect = false) {
/**
* Wrap code in no name function
+ *
* @param {string} code which must be wrapped
+ * @returns {string} wrapped code
*/
export function wrapInNonameFunc(code) {
return `function(source, args){\n${code}\n}`;
diff --git a/src/helpers/log-message.js b/src/helpers/log-message.js
index 59504576..1a87bf5e 100644
--- a/src/helpers/log-message.js
+++ b/src/helpers/log-message.js
@@ -1,19 +1,36 @@
-/**
- * @typedef { import('../scriptlets/index').Source } Source
- */
-
/**
* Conditionally logs message to console.
* Convention is to log messages by source.verbose if such log
* is not a part of scriptlet's functionality, eg on invalid input,
* and use 'forced' argument otherwise.
- * @param {Source} source required
+ *
+ * @param {Object} source required, scriptlet properties
* @param {string} message required, message to log
* @param {boolean} [forced=false] to log message unconditionally
*/
export const logMessage = (source, message, forced = false) => {
- if (forced || source.verbose) {
- // eslint-disable-next-line no-console
- console.log(`${source.name}: ${message}`);
+ const {
+ name,
+ ruleText,
+ verbose,
+ } = source;
+
+ if (!forced && !verbose) {
+ return;
}
+
+ let messageStr = `${name}: ${message}`;
+
+ // Extract scriptlet part from rule text
+ if (ruleText) {
+ const RULE_MARKER = '#%#//scriptlet';
+ const markerIdx = ruleText.indexOf(RULE_MARKER);
+ if (markerIdx > -1) {
+ const ruleWithoutDomains = ruleText.slice(markerIdx, ruleText.length);
+ messageStr += `; cannot apply rule: ${ruleWithoutDomains}`;
+ }
+ }
+
+ // eslint-disable-next-line no-console
+ console.log(messageStr);
};
diff --git a/src/helpers/match-request-props.js b/src/helpers/match-request-props.js
index 63744dde..2c4f52bd 100644
--- a/src/helpers/match-request-props.js
+++ b/src/helpers/match-request-props.js
@@ -5,18 +5,15 @@ import {
} from './request-utils';
import { logMessage } from './log-message';
-/**
- * @typedef { import('../scriptlets/index').Source } Source
- */
-
/**
* Checks if given propsToMatch string matches with given request data
* This is used by prevent-xhr, prevent-fetch, trusted-replace-xhr-response
* and trusted-replace-fetch-response scriptlets
- * @param {Source} source
- * @param {string} propsToMatch
+ *
+ * @param {Object} source scriptlet properties
+ * @param {string} propsToMatch string of space-separated request properties to match
* @param {Object} requestData object with standard properties of fetch/xhr like url, method etc
- * @returns {boolean}
+ * @returns {boolean} if request properties match
*/
export const matchRequestProps = (source, propsToMatch, requestData) => {
if (propsToMatch === '' || propsToMatch === '*') {
diff --git a/src/helpers/match-stack.js b/src/helpers/match-stack.js
index 457e0ce8..8a713f4a 100644
--- a/src/helpers/match-stack.js
+++ b/src/helpers/match-stack.js
@@ -5,9 +5,10 @@ import { getNativeRegexpTest } from './regexp-utils';
/**
* Checks if the stackTrace contains stackRegexp
* https://github.com/AdguardTeam/Scriptlets/issues/82
+ *
* @param {string|undefined} stackMatch - input stack value to match
* @param {string} stackTrace - script error stack trace
- * @returns {boolean}
+ * @returns {boolean} if the stackTrace contains stackRegexp
*/
export const matchStackTrace = (stackMatch, stackTrace) => {
if (!stackMatch || stackMatch === '') {
diff --git a/src/helpers/noop-utils.js b/src/helpers/noop-utils.js
index b4cca11e..056f2017 100644
--- a/src/helpers/noop-utils.js
+++ b/src/helpers/noop-utils.js
@@ -1,29 +1,42 @@
/**
* Noop function
- * @return {undefined} undefined
+ *
+ * @returns {undefined} undefined
*/
export const noopFunc = () => { };
+/**
+ * Function returns noopFunc
+ *
+ * @returns {Function} noopFunc
+ */
+export const noopCallbackFunc = () => noopFunc;
+
/**
* Function returns null
- * @return {null} null
+ *
+ * @returns {null} null
*/
export const noopNull = () => null;
/**
* Function returns true
- * @return {boolean} true
+ *
+ * @returns {boolean} true
*/
export const trueFunc = () => true;
/**
* Function returns false
- * @return {boolean} false
+ *
+ * @returns {boolean} false
*/
export const falseFunc = () => false;
/**
* Function returns this
+ *
+ * @returns {this} this object
*/
export function noopThis() {
return this;
@@ -31,37 +44,54 @@ export function noopThis() {
/**
* Function returns empty string
- * @return {string} empty string
+ *
+ * @returns {string} empty string
*/
export const noopStr = () => '';
/**
* Function returns empty array
- * @return {Array} empty array
+ *
+ * @returns {Array} empty array
*/
export const noopArray = () => [];
/**
* Function returns empty object
- * @return {Object} empty object
+ *
+ * @returns {Object} empty object
*/
export const noopObject = () => ({});
+/**
+ * Function throws an error
+ *
+ * @throws
+ */
+export const throwFunc = () => {
+ throw new Error();
+};
+
/**
* Function returns Promise.reject()
+ *
+ * @returns {Promise} rejected Promise
*/
-export const noopPromiseReject = () => Promise.reject(); // eslint-disable-line compat/compat
+export const noopPromiseReject = () => Promise.reject();
/**
- * Returns Promise object that is resolved value of response body
- * @param {string} [url=''] value of response url to set on response object
- * @param {string} [response='default'] value of response type to set on response object
+ * Returns Promise object that is resolved with specified props
+ *
+ * @param {string} [responseBody='{}'] value to set as responseBody
+ * @param {string} [responseUrl=''] value to set as responseUrl
+ * @param {string} [responseType='default'] value to set as responseType
+ * @returns {Promise|undefined} resolved Promise or undefined if Response interface is not available
*/
export const noopPromiseResolve = (responseBody = '{}', responseUrl = '', responseType = 'default') => {
if (typeof Response === 'undefined') {
return;
}
- // eslint-disable-next-line compat/compat
+
const response = new Response(responseBody, {
status: 200,
statusText: 'OK',
@@ -74,6 +104,6 @@ export const noopPromiseResolve = (responseBody = '{}', responseUrl = '', respon
type: { value: responseType },
});
- // eslint-disable-next-line compat/compat, consistent-return
+ // eslint-disable-next-line consistent-return
return Promise.resolve(response);
};
diff --git a/src/helpers/number-utils.js b/src/helpers/number-utils.js
index 72b50db7..3a6b9b0f 100644
--- a/src/helpers/number-utils.js
+++ b/src/helpers/number-utils.js
@@ -1,8 +1,9 @@
/**
* Determines whether the passed value is NaN
* https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Number/isNaN
- * @param {*} num
- * @returns {boolean}
+ *
+ * @param {any} num arbitrary value
+ * @returns {boolean} if provided value is NaN
*/
export const nativeIsNaN = (num) => {
// eslint-disable-next-line no-restricted-properties
@@ -13,8 +14,9 @@ export const nativeIsNaN = (num) => {
/**
* Determines whether the passed value is a finite number
* https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Number/isFinite
- * @param {*} num
- * @returns {boolean}
+ *
+ * @param {any} num arbitrary value
+ * @returns {boolean} if provided value is finite
*/
export const nativeIsFinite = (num) => {
// eslint-disable-next-line no-restricted-properties
@@ -24,8 +26,9 @@ export const nativeIsFinite = (num) => {
/**
* Parses string for a number, if possible, otherwise returns null.
- * @param {*} rawString
- * @returns {number|null}
+ *
+ * @param {any} rawString arbitrary string
+ * @returns {number|null} number or null if string not parsable
*/
export const getNumberFromString = (rawString) => {
const parsedDelay = parseInt(rawString, 10);
@@ -38,9 +41,10 @@ export const getNumberFromString = (rawString) => {
/**
* Generate a random integer between two values, inclusive
* https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/random#getting_a_random_integer_between_two_values_inclusive
- * @param {number} min
- * @param {number} max
- * @returns {number}
+ *
+ * @param {number} min range minimum
+ * @param {number} max range maximum
+ * @returns {number} random number
*/
export function getRandomIntInclusive(min, max) {
min = Math.ceil(min);
diff --git a/src/helpers/object-utils.js b/src/helpers/object-utils.js
index 847afe3a..d8aa5973 100644
--- a/src/helpers/object-utils.js
+++ b/src/helpers/object-utils.js
@@ -2,7 +2,8 @@
* Converts object to array of pairs.
* Object.entries() polyfill because it is not supported by IE
* https://caniuse.com/?search=Object.entries
- * @param {Object} object
+ *
+ * @param {Object} object arbitrary object
* @returns {Array} array of pairs
*/
export const getObjectEntries = (object) => {
@@ -16,8 +17,9 @@ export const getObjectEntries = (object) => {
* Converts array of pairs to object.
* Object.fromEntries() polyfill because it is not supported by IE
* https://caniuse.com/?search=Object.fromEntries
+ *
* @param {Array} entries - array of pairs
- * @returns {Object}
+ * @returns {Object} result object
*/
export const getObjectFromEntries = (entries) => {
const output = entries
@@ -32,16 +34,18 @@ export const getObjectFromEntries = (entries) => {
/**
* Checks whether the obj is an empty object
- * @param {Object} obj
- * @returns {boolean}
+ *
+ * @param {Object} obj arbitrary object
+ * @returns {boolean} if object is empty
*/
-export const isEmptyObject = (obj) => Object.keys(obj).length === 0;
+export const isEmptyObject = (obj) => Object.keys(obj).length === 0 && !obj.prototype;
/**
- * Checks whether the obj is an empty object
- * @param {Object} obj
- * @param {string} prop
- * @returns {Object|null}
+ * Safely retrieve property descriptor
+ *
+ * @param {Object} obj target object
+ * @param {string} prop target property
+ * @returns {object|null} descriptor or null if it's not available or non-configurable
*/
export const safeGetDescriptor = (obj, prop) => {
const descriptor = Object.getOwnPropertyDescriptor(obj, prop);
@@ -53,9 +57,10 @@ export const safeGetDescriptor = (obj, prop) => {
/**
* Set getter and setter to property if it's configurable
+ *
* @param {Object} object target object with property
* @param {string} property property name
- * @param {PropertyDescriptor} descriptor contains getter and setter functions
+ * @param {Object} descriptor contains getter and setter functions
* @returns {boolean} is operation successful
*/
export function setPropertyAccess(object, property, descriptor) {
diff --git a/src/helpers/observer.js b/src/helpers/observer.js
index a8f4d129..d7a403ea 100644
--- a/src/helpers/observer.js
+++ b/src/helpers/observer.js
@@ -2,8 +2,10 @@ import { throttle } from './throttle';
/**
* DOM tree changes observer. Used for 'remove-attr' and 'remove-class' scriptlets
- * @param {Function} callback
- * @param {boolean} observeAttrs - optional parameter - should observer check attributes changes
+ *
+ * @param {Function} callback function to call on each mutation
+ * @param {boolean} [observeAttrs] if observer should observe attributes changes
+ * @param {Array} [attrsToObserve] list of attributes to observe
*/
export const observeDOMChanges = (callback, observeAttrs = false, attrsToObserve = []) => {
/**
@@ -13,7 +15,7 @@ export const observeDOMChanges = (callback, observeAttrs = false, attrsToObserve
/**
* Used for remove-class
*/
- // eslint-disable-next-line no-use-before-define, compat/compat
+ // eslint-disable-next-line no-use-before-define
const observer = new MutationObserver(throttle(callbackWrapper, THROTTLE_DELAY_MS));
const connect = () => {
@@ -35,6 +37,11 @@ export const observeDOMChanges = (callback, observeAttrs = false, attrsToObserve
const disconnect = () => {
observer.disconnect();
};
+
+ /**
+ * Callback wrapper to prevent loops
+ * when callback tinkers with attributes
+ */
function callbackWrapper() {
disconnect();
callback();
diff --git a/src/helpers/open-shadow-dom-utils.js b/src/helpers/open-shadow-dom-utils.js
index 8793a2fb..83797a9a 100644
--- a/src/helpers/open-shadow-dom-utils.js
+++ b/src/helpers/open-shadow-dom-utils.js
@@ -2,7 +2,8 @@ import { flatten } from './array-utils';
/**
* Finds shadow-dom host (elements with shadowRoot property) in DOM of rootElement.
- * @param {HTMLElement} rootElement
+ *
+ * @param {HTMLElement} rootElement shadow dom root
* @returns {HTMLElement[]} shadow-dom hosts
*/
export const findHostElements = (rootElement) => {
@@ -37,9 +38,10 @@ export const findHostElements = (rootElement) => {
* Pierces open shadow-dom in order to find:
* - elements by 'selector' matching
* - inner shadow-dom hosts
- * @param {string} selector
- * @param {HTMLElement[]|external:NodeList} hostElements
- * @returns {PierceData}
+ *
+ * @param {string} selector DOM elements selector
+ * @param {HTMLElement[]|external:NodeList} hostElements shadow-dom hosts
+ * @returns {PierceData} object with found elements and shadow-dom hosts
*/
export const pierceShadowDom = (selector, hostElements) => {
let targets = [];
diff --git a/src/helpers/parse-flags.js b/src/helpers/parse-flags.js
index d28226f5..5c679f1a 100644
--- a/src/helpers/parse-flags.js
+++ b/src/helpers/parse-flags.js
@@ -1,7 +1,17 @@
+/**
+ * @typedef {Object} FlagsData object that holds info about valid flags
+ * and provides method for easy access
+ * @property {string} ASAP asap flag string
+ * @property {string} COMPLETE complete flag string
+ * @property {string} STAY stay flag string
+ * @property {Function} hasFlag to check if given flag is present
+ */
+
/**
* Behaviour flags string parser
+ *
* @param {string} flags required, 'applying' argument string
- * @return {Object}
+ * @returns {FlagsData} object with parsed flags
*/
export const parseFlags = (flags) => {
const FLAGS_DIVIDER = ' ';
diff --git a/src/helpers/parse-keyword-value.js b/src/helpers/parse-keyword-value.js
index f2785af6..e7faecf9 100644
--- a/src/helpers/parse-keyword-value.js
+++ b/src/helpers/parse-keyword-value.js
@@ -1,8 +1,13 @@
/**
* Modifies passed keyword value according to its purpose.
* Returns initial value if it's not a keyword.
- * @param {string} rawValue
- * @returns {string}
+ *
+ * Supported keywords:
+ * - '$now$' - returns current time in ms, e.g 1667915146503
+ * - '$currentDate$' - returns current date e.g 'Tue Nov 08 2022 13:53:19 GMT+0300'
+ *
+ * @param {string} rawValue keyword
+ * @returns {string} parsed value
*/
export const parseKeywordValue = (rawValue) => {
const NOW_VALUE_KEYWORD = '$now$';
diff --git a/src/helpers/parse-rule.js b/src/helpers/parse-rule.js
index 3ca15544..809a8810 100644
--- a/src/helpers/parse-rule.js
+++ b/src/helpers/parse-rule.js
@@ -1,9 +1,11 @@
/**
* Iterate over iterable argument and evaluate current state with transitions
- * @param {string} init first transition name
- * @param {Array|Collection|string} iterable
+ *
+ * @param {Array|string} iterable rule or list or rules
* @param {Object} transitions transtion functions
+ * @param {string} init first transition name
* @param {any} args arguments which should be passed to transition functions
+ * @returns {string} state
*/
function iterateWithTransitions(iterable, transitions, init, args) {
let state = init || Object.keys(transitions)[0];
@@ -20,6 +22,8 @@ export const ADG_SCRIPTLET_MASK = '#//scriptlet';
/**
* Helper to accumulate an array of strings char by char
+ *
+ * @returns {Object} object with helper methods
*/
const wordSaver = () => {
let str = '';
@@ -47,8 +51,10 @@ const substringAfter = (str, separator) => {
/**
* Parse and validate scriptlet rule
- * @param {*} ruleText
- * @returns {{name: string, args: Array}}
+ *
+ * @param {string} ruleText rule string
+ * @returns {{name: string, args: Array}} parsed rule
+ * @throws
*/
export const parseRule = (ruleText) => {
ruleText = substringAfter(ruleText, ADG_SCRIPTLET_MASK);
@@ -63,10 +69,13 @@ export const parseRule = (ruleText) => {
/**
* Transition function: the current index position in start, end or between params
- * @param {string} rule
- * @param {number} index
- * @param {Object} Object
- * @property {Object} Object.sep contains prop symb with current separator char
+ *
+ * @param {string} rule rule string
+ * @param {number} index index
+ * @param {Object} Object helper object
+ * @param {Object} Object.sep contains prop symb with current separator char
+ * @throws {string} throws if given rule is not a scriptlet
+ * @returns {string} transition
*/
const opened = (rule, index, { sep }) => {
const char = rule[index];
@@ -99,11 +108,13 @@ export const parseRule = (ruleText) => {
};
/**
* Transition function: the current index position inside param
- * @param {string} rule
- * @param {number} index
- * @param {Object} Object
- * @property {Object} Object.sep contains prop `symb` with current separator char
- * @property {Object} Object.saver helper which allow to save strings by car by char
+ *
+ * @param {string} rule rule string
+ * @param {number} index index
+ * @param {Object} Object helper object
+ * @param {Object} Object.sep contains prop `symb` with current separator char
+ * @param {Object} Object.saver helper which allow to save strings by car by char
+ * @returns {void}
*/
const param = (rule, index, { saver, sep }) => {
const char = rule[index];
diff --git a/src/helpers/prevent-utils.js b/src/helpers/prevent-utils.js
index b75ff295..d08d3a1d 100644
--- a/src/helpers/prevent-utils.js
+++ b/src/helpers/prevent-utils.js
@@ -4,11 +4,13 @@ import {
isValidMatchNumber,
isValidMatchStr,
} from './string-utils';
+import { nativeIsNaN } from './number-utils';
/**
* Checks whether the passed arg is proper callback
- * @param {*} callback
- * @returns {boolean}
+ *
+ * @param {any} callback arbitrary callback
+ * @returns {boolean} if callback is valid
*/
export const isValidCallback = (callback) => {
return callback instanceof Function
@@ -18,12 +20,30 @@ export const isValidCallback = (callback) => {
|| typeof callback === 'string';
};
+/**
+ * Parses delay argument of setTimeout / setInterval methods into
+ * rounded down number for number/string values or passes on for other types.
+ * Needed for prevent-setTimeout and prevent-setInterval
+ *
+ * @param {any} delay native method delay arg
+ * @returns {any} number as parsed delay or any input type if `delay` is not parsable
+ */
+export const parseRawDelay = (delay) => {
+ const parsedDelay = Math.floor(parseInt(delay, 10));
+ return typeof parsedDelay === 'number' && !nativeIsNaN(parsedDelay) ? parsedDelay : delay;
+};
+
/**
* Checks whether 'callback' and 'delay' are matching
* by given parameters 'matchCallback' and 'matchDelay'.
* Used for prevent-setTimeout and prevent-setInterval.
- * @param {Object} { callback, delay, matchCallback, matchDelay }
- * @returns {boolean}
+ *
+ * @param {Object} preventData set of data to determine if scriptlet should match
+ * @param {Function} preventData.callback method's callback arg
+ * @param {any} preventData.delay method's delay arg
+ * @param {string} preventData.matchCallback scriptlets's callback arg
+ * @param {string} preventData.matchDelay scriptlets's delay arg
+ * @returns {boolean} if scriptlet should match
*/
export const isPreventionNeeded = ({
callback,
@@ -45,16 +65,20 @@ export const isPreventionNeeded = ({
const { isInvertedMatch, matchRegexp } = parseMatchArg(matchCallback);
const { isInvertedDelayMatch, delayMatch } = parseDelayArg(matchDelay);
+ // Parse delay for decimal, string and non-number values
+ // https://github.com/AdguardTeam/Scriptlets/issues/247
+ const parsedDelay = parseRawDelay(delay);
+
let shouldPrevent = false;
// https://github.com/AdguardTeam/Scriptlets/issues/105
const callbackStr = String(callback);
if (delayMatch === null) {
shouldPrevent = matchRegexp.test(callbackStr) !== isInvertedMatch;
} else if (!matchCallback) {
- shouldPrevent = (delay === delayMatch) !== isInvertedDelayMatch;
+ shouldPrevent = (parsedDelay === delayMatch) !== isInvertedDelayMatch;
} else {
shouldPrevent = matchRegexp.test(callbackStr) !== isInvertedMatch
- && (delay === delayMatch) !== isInvertedDelayMatch;
+ && (parsedDelay === delayMatch) !== isInvertedDelayMatch;
}
return shouldPrevent;
};
diff --git a/src/helpers/random-id.js b/src/helpers/random-id.js
index 3d5f8962..291e634c 100644
--- a/src/helpers/random-id.js
+++ b/src/helpers/random-id.js
@@ -1,6 +1,8 @@
/**
- * Generate random six symbols id
+ * Generate random seven symbols id
+ *
+ * @returns {string} randomized id
*/
export function randomId() {
- return Math.random().toString(36).substr(2, 9);
+ return Math.random().toString(36).slice(2, 9);
}
diff --git a/src/helpers/request-utils.js b/src/helpers/request-utils.js
index 044a696c..240d34d1 100644
--- a/src/helpers/request-utils.js
+++ b/src/helpers/request-utils.js
@@ -4,9 +4,10 @@ import { getObjectFromEntries } from './object-utils';
/**
* Returns array of request props that are supported by fetch/xhr scriptlets.
* Includes common 'url' and 'method' props and all other fetch-specific props
- * @returns {string[]}
+ *
+ * @returns {string[]} list of request props
*/
-const getRequestProps = () => [
+export const getRequestProps = () => [
'url',
'method',
'headers',
@@ -24,7 +25,8 @@ const getRequestProps = () => [
/**
* Collects Request options to object
- * @param {Request} request
+ *
+ * @param {Request} request Request instance to collect properties from
* @returns {Object} data object
*/
export const getRequestData = (request) => {
@@ -40,7 +42,8 @@ export const getRequestData = (request) => {
/**
* Collects fetch args to object
- * @param {*} args fetch args
+ *
+ * @param {any} args fetch args
* @returns {Object} data object
*/
export const getFetchData = (args) => {
@@ -70,12 +73,13 @@ export const getFetchData = (args) => {
/**
* Collect xhr.open arguments to object
- * @param {string} method
- * @param {string} url
- * @param {string} async
- * @param {string} user
- * @param {string} password
- * @returns {Object}
+ *
+ * @param {string} method request method
+ * @param {string} url request url
+ * @param {string} async request async prop
+ * @param {string} user request user prop
+ * @param {string} password request password prop
+ * @returns {Object} aggregated request data
*/
export const getXhrData = (method, url, async, user, password) => {
return {
@@ -90,7 +94,8 @@ export const getXhrData = (method, url, async, user, password) => {
/**
* Parse propsToMatch input string into object;
* used for prevent-fetch and prevent-xhr
- * @param {string} propsToMatchStr
+ *
+ * @param {string} propsToMatchStr string of space-separated request properties to match
* @returns {Object} object where 'key' is prop name and 'value' is prop value
*/
export const parseMatchProps = (propsToMatchStr) => {
@@ -123,8 +128,9 @@ export const parseMatchProps = (propsToMatchStr) => {
/**
* Validates parsed data values
- * @param {Object} data
- * @returns {boolean}
+ *
+ * @param {Object} data request data
+ * @returns {boolean} if data is valid
*/
export const validateParsedData = (data) => {
return Object.values(data)
@@ -133,8 +139,9 @@ export const validateParsedData = (data) => {
/**
* Converts valid parsed data to data obj for further matching
- * @param {Object} data
- * @returns {Object}
+ *
+ * @param {Object} data parsed request data
+ * @returns {Object} data obj ready for matching
*/
export const getMatchPropsData = (data) => {
const matchData = {};
diff --git a/src/helpers/script-source-utils.js b/src/helpers/script-source-utils.js
index 740659da..c3ff4078 100644
--- a/src/helpers/script-source-utils.js
+++ b/src/helpers/script-source-utils.js
@@ -4,9 +4,10 @@ import { startsWith } from './string-utils';
* Determines if type of script is inline or injected
* and when it's one of them then return true, otherwise false
* https://github.com/AdguardTeam/Scriptlets/issues/201
+ *
* @param {string|undefined} stackMatch - input stack value to match
* @param {string} stackTrace - script error stack trace
- * @returns {boolean}
+ * @returns {boolean} if stacks match
*/
export const shouldAbortInlineOrInjectedScript = (stackMatch, stackTrace) => {
const INLINE_SCRIPT_STRING = 'inlineScript';
diff --git a/src/helpers/shadow-dom-utils.js b/src/helpers/shadow-dom-utils.js
new file mode 100644
index 00000000..005ce09c
--- /dev/null
+++ b/src/helpers/shadow-dom-utils.js
@@ -0,0 +1,34 @@
+/**
+ * Makes arbitrary operations on shadow root element,
+ * to be passed as callback to hijackAttachShadow
+ *
+ * @callback attachShadowCallback
+ * @param {HTMLElement} shadowRoot
+ * @returns {void}
+ */
+
+/**
+ * Overrides attachShadow method of Element API on a given context
+ * to pass retrieved shadowRoots to callback
+ *
+ * @param {Object} context e.g global window object or contentWindow of an iframe
+ * @param {string} hostSelector selector to determine if callback should be called on current shadow subtree
+ * @param {attachShadowCallback} callback callback to call on shadow root
+ */
+export const hijackAttachShadow = (context, hostSelector, callback) => {
+ const handlerWrapper = (target, thisArg, args) => {
+ const shadowRoot = Reflect.apply(target, thisArg, args);
+
+ if (thisArg && thisArg.matches(hostSelector || '*')) {
+ callback(shadowRoot);
+ }
+
+ return shadowRoot;
+ };
+
+ const attachShadowHandler = {
+ apply: handlerWrapper,
+ };
+
+ context.Element.prototype.attachShadow = new Proxy(context.Element.prototype.attachShadow, attachShadowHandler);
+};
diff --git a/src/helpers/storage-utils.js b/src/helpers/storage-utils.js
index 5769b3b7..e01b1b37 100644
--- a/src/helpers/storage-utils.js
+++ b/src/helpers/storage-utils.js
@@ -1,17 +1,13 @@
import { nativeIsNaN } from './number-utils';
import { logMessage } from './log-message';
-/**
- * @typedef { import('../scriptlets/index').Source } Source
- */
-
/**
* Sets item to a specified storage, if storage isn't full.
- * @param {Source} source
+ *
+ * @param {Object} source scriptlet's configuration
* @param {Storage} storage storage instance to set item into
- * @param {string} key
- * @param {string} value
- * @param {boolean} shouldLog determines if helper should log on a failed set attempt
+ * @param {string} key storage key
+ * @param {string} value staroge value
*/
export const setStorageItem = (source, storage, key, value) => {
// setItem() may throw an exception if the storage is full.
@@ -25,14 +21,13 @@ export const setStorageItem = (source, storage, key, value) => {
/**
* Gets supported storage item value
- * @param {Source} source
+ *
* @param {string} value input item value
- * @param {boolean} verbose if logging invalid values is required
* @returns {string|null|undefined|boolean} valid item value if ok OR null if not
*/
-export const getLimitedStorageItemValue = (source, value) => {
- if (!value) {
- return null;
+export const getLimitedStorageItemValue = (value) => {
+ if (typeof value !== 'string') {
+ throw new Error('Invalid value');
}
let validValue;
@@ -53,19 +48,17 @@ export const getLimitedStorageItemValue = (source, value) => {
} else if (/^\d+$/.test(value)) {
validValue = parseFloat(value);
if (nativeIsNaN(validValue)) {
- logMessage(source, `Invalid storage item value: '${value}'`);
- return null;
+ throw new Error('Invalid value');
}
- if (Math.abs(validValue) > 0x7FFF) {
- logMessage(source, `Invalid storage item value: '${value}'`);
- return null;
+ if (Math.abs(validValue) > 32767) {
+ throw new Error('Invalid value');
}
} else if (value === 'yes') {
validValue = 'yes';
} else if (value === 'no') {
validValue = 'no';
} else {
- return null;
+ throw new Error('Invalid value');
}
return validValue;
diff --git a/src/helpers/string-utils.js b/src/helpers/string-utils.js
index 892ef3c4..f37dedb0 100644
--- a/src/helpers/string-utils.js
+++ b/src/helpers/string-utils.js
@@ -8,29 +8,33 @@ import {
/**
* String.prototype.replaceAll polyfill
+ *
* @param {string} input input string
* @param {string} substr to look for
* @param {string} newSubstr replacement
- * @returns {string}
+ * @returns {string} result string
*/
export const replaceAll = (input, substr, newSubstr) => input.split(substr).join(newSubstr);
/**
* Escapes special chars in string
- * @param {string} str
- * @returns {string}
+ *
+ * @param {string} str raw string
+ * @returns {string} string with escaped special characters
*/
export const escapeRegExp = (str) => str.replace(/[.*+?^${}()|[\]\\]/g, '\\$&');
/**
* A literal string or regexp pattern wrapped in forward slashes.
* For example, 'simpleStr' or '/adblock|_0x/'.
+ *
* @typedef {string} RawStrPattern
*/
/**
* Converts string to the regexp
* TODO think about nested dependencies, but be careful with dependency loops
+ *
* @param {RawStrPattern} [input=''] literal string or regexp pattern; defaults to '' (empty string)
* @returns {RegExp} regular expression; defaults to /.?/
* @throws {SyntaxError} Throw an error for invalid regex pattern
@@ -50,8 +54,9 @@ export const toRegExp = (input = '') => {
/**
* Checks whether the input string can be converted to regexp
+ *
* @param {RawStrPattern} input literal string or regexp pattern
- * @returns {boolean}
+ * @returns {boolean} if input can be converted to regexp
*/
export const isValidStrPattern = (input) => {
const FORWARD_SLASH = '/';
@@ -72,8 +77,10 @@ export const isValidStrPattern = (input) => {
/**
* Get string before regexp first match
- * @param {string} str
- * @param {RegExp} rx
+ *
+ * @param {string} str input string
+ * @param {RegExp} rx find pattern
+ * @returns {string} result string
*/
export const getBeforeRegExp = (str, rx) => {
const index = str.search(rx);
@@ -82,9 +89,10 @@ export const getBeforeRegExp = (str, rx) => {
/**
* Checks whether the string starts with the substring
+ *
* @param {string} str full string
* @param {string} prefix substring
- * @returns {boolean}
+ * @returns {boolean} if string start with the substring
*/
export const startsWith = (str, prefix) => {
// if str === '', (str && false) will return ''
@@ -94,9 +102,10 @@ export const startsWith = (str, prefix) => {
/**
* Checks whether the string ends with the substring
+ *
* @param {string} str full string
* @param {string} ending substring
- * @returns {boolean}
+ * @returns {boolean} string ends with the substring
*/
export const endsWith = (str, ending) => {
// if str === '', (str && false) will return ''
@@ -122,7 +131,9 @@ export const substringBefore = (str, separator) => {
/**
* Wrap str in single quotes and replaces single quotes to double one
- * @param {string} str
+ *
+ * @param {string} str input string
+ * @returns {string} string with swapped quotes
*/
export const wrapInSingleQuotes = (str) => {
if ((str[0] === '\'' && str[str.length - 1] === '\'')
@@ -137,7 +148,9 @@ export const wrapInSingleQuotes = (str) => {
/**
* Returns substring enclosed in the widest braces
- * @param {string} str
+ *
+ * @param {string} str input string
+ * @returns {string} substring
*/
export const getStringInBraces = (str) => {
const firstIndex = str.indexOf('(');
@@ -147,9 +160,10 @@ export const getStringInBraces = (str) => {
/**
* Prepares RTCPeerConnection config as string for proper logging
- * @param {*} config
+ *
+ * @param {any} config RTC config
* @returns {string} stringified config
-*/
+ */
export const convertRtcConfigToString = (config) => {
const UNDEF_STR = 'undefined';
let str = UNDEF_STR;
@@ -178,8 +192,9 @@ export const convertRtcConfigToString = (config) => {
/**
* Checks whether the match input string can be converted to regexp,
* used for match inputs with possible negation
+ *
* @param {string} match literal string or regexp pattern
- * @returns {boolean}
+ * @returns {boolean} true if input can be converted to regexp
*/
export const isValidMatchStr = (match) => {
const INVERT_MARKER = '!';
@@ -193,8 +208,9 @@ export const isValidMatchStr = (match) => {
/**
* Validates the match input number,
* used for match inputs with possible negation
+ *
* @param {string} match string of match number
- * @returns {boolean}
+ * @returns {boolean} if match number is valid
*/
export const isValidMatchNumber = (match) => {
const INVERT_MARKER = '!';
@@ -208,16 +224,17 @@ export const isValidMatchNumber = (match) => {
/**
* @typedef {Object} MatchData
- * @property {boolean} isInvertedMatch
- * @property {RegExp} matchRegexp
+ * @property {boolean} isInvertedMatch if matching should be inverted
+ * @property {RegExp} matchRegexp match value parsed into regex
*/
/**
* Parses match arg with possible negation for no matching.
* Needed for prevent-setTimeout, prevent-setInterval,
* prevent-requestAnimationFrame and prevent-window-open
- * @param {string} match
- * @returns {MatchData}
+ *
+ * @param {string} match matching arg
+ * @returns {MatchData} data prepared for matching
*/
export const parseMatchArg = (match) => {
const INVERT_MARKER = '!';
@@ -229,17 +246,16 @@ export const parseMatchArg = (match) => {
/**
* @typedef {Object} DelayData
- * @property {boolean} isInvertedDelayMatch
- * @property {number|null} delayMatch
+ * @property {boolean} isInvertedDelayMatch if matching should be inverted
+ * @property {number|null} delayMatch parsed delay or null if delay is invalid
*/
/**
* Parses delay arg with possible negation for no matching.
* Needed for prevent-setTimeout and prevent-setInterval
- * @param {string} delay
- * @returns {DelayData} `{ isInvertedDelayMatch, delayMatch }` where:
- * `isInvertedDelayMatch` is boolean,
- * `delayMatch` is number OR null for invalid `delay`
+ *
+ * @param {string} delay scriptlet's delay arg
+ * @returns {DelayData} parsed delay data
*/
export const parseDelayArg = (delay) => {
const INVERT_MARKER = '!';
@@ -252,8 +268,9 @@ export const parseDelayArg = (delay) => {
/**
* Converts object to string for logging
+ *
* @param {Object} obj data object
- * @returns {string}
+ * @returns {string} object's string representation
*/
export const objectToString = (obj) => {
return isEmptyObject(obj)
@@ -273,8 +290,9 @@ export const objectToString = (obj) => {
/**
* Converts types into a string
- * @param {*} value
- * @returns {string}
+ *
+ * @param {any} value input value type
+ * @returns {string} type's string representation
*/
export const convertTypeToString = (value) => {
let output;
@@ -295,8 +313,9 @@ export const convertTypeToString = (value) => {
/**
* Generate a random string, a length of the string is provided as an argument
- * @param {number} length
- * @returns {string}
+ *
+ * @param {number} length output's length
+ * @returns {string} random string
*/
export function getRandomStrByLength(length) {
let result = '';
@@ -310,7 +329,8 @@ export function getRandomStrByLength(length) {
/**
* Generate a random string
- * @param {string} customResponseText
+ *
+ * @param {string} customResponseText response text to include in output
* @returns {string|null} random string or null if passed argument is invalid
*/
export function generateRandomResponse(customResponseText) {
@@ -352,3 +372,52 @@ export function generateRandomResponse(customResponseText) {
customResponse = getRandomStrByLength(length);
return customResponse;
}
+
+/**
+ * Infers value from string argument
+ * Inferring goes from more specific to more ambiguous options
+ * Arrays, objects and strings are parsed via JSON.parse
+ *
+ * @param {string} value arbitrary string
+ * @returns {any} converted value
+ * @throws an error on unexpected input
+ */
+export function inferValue(value) {
+ if (value === 'undefined') {
+ return undefined;
+ } if (value === 'false') {
+ return false;
+ } if (value === 'true') {
+ return true;
+ } if (value === 'null') {
+ return null;
+ } if (value === 'NaN') {
+ return NaN;
+ }
+
+ // Number class constructor works 2 times faster than JSON.parse
+ // and wont interpret mixed inputs like '123asd' as parseFloat would
+ const MAX_ALLOWED_NUM = 32767;
+ const numVal = Number(value);
+ if (!nativeIsNaN(numVal)) {
+ if (Math.abs(numVal) > MAX_ALLOWED_NUM) {
+ throw new Error('number values bigger than 32767 are not allowed');
+ }
+ return numVal;
+ }
+
+ let errorMessage = `'${value}' value type can't be inferred`;
+ try {
+ // Parse strings, arrays and objects represented as JSON strings
+ // '[1,2,3,"string"]' > [1, 2, 3, 'string']
+ // '"arbitrary string"' > 'arbitrary string'
+ const parsableVal = JSON.parse(value);
+ if (parsableVal instanceof Object || typeof parsableVal === 'string') {
+ return parsableVal;
+ }
+ } catch (e) {
+ errorMessage += `: ${e}`;
+ }
+
+ throw new TypeError(errorMessage);
+}
diff --git a/src/helpers/throttle.js b/src/helpers/throttle.js
index 45537d12..419c39ea 100644
--- a/src/helpers/throttle.js
+++ b/src/helpers/throttle.js
@@ -1,8 +1,10 @@
/**
* Returns a wrapper, passing the call to 'method' at maximum once per 'delay' milliseconds.
* Those calls that fall into the "cooldown" period, are ignored
- * @param {Function} method
- * @param {Number} delay - milliseconds
+ *
+ * @param {Function} cb callback
+ * @param {number} delay - milliseconds
+ * @returns {Function} throttled callback
*/
export const throttle = (cb, delay) => {
let wait = false;
diff --git a/src/helpers/validator.js b/src/helpers/validator.js
index e2faf489..30235b5f 100644
--- a/src/helpers/validator.js
+++ b/src/helpers/validator.js
@@ -18,8 +18,9 @@ const COMMENT_MARKER = '!';
/**
* Checks if rule text is comment e.g. !!example.org##+js(set-constant.js, test, false)
- * @param {string} rule
- * @return {boolean}
+ *
+ * @param {string} rule rule text
+ * @returns {boolean} if rule text is comment
*/
const isComment = (rule) => startsWith(rule, COMMENT_MARKER);
@@ -51,7 +52,9 @@ const ADG_CSS_MASK_REG = /#@?\$#.+?\s*\{.*\}\s*$/g;
/**
* Checks if the `rule` is AdGuard scriptlet rule
+ *
* @param {string} rule - rule text
+ * @returns {boolean} if given rule is adg rule
*/
const isAdgScriptletRule = (rule) => {
return (
@@ -62,7 +65,9 @@ const isAdgScriptletRule = (rule) => {
/**
* Checks if the `rule` is uBO scriptlet rule
+ *
* @param {string} rule rule text
+ * @returns {boolean} if given rule is ubo rule
*/
const isUboScriptletRule = (rule) => {
return (
@@ -77,7 +82,9 @@ const isUboScriptletRule = (rule) => {
/**
* Checks if the `rule` is AdBlock Plus snippet
+ *
* @param {string} rule rule text
+ * @returns {boolean} if given rule is abp rule
*/
const isAbpSnippetRule = (rule) => {
return (
@@ -90,7 +97,9 @@ const isAbpSnippetRule = (rule) => {
/**
* Finds scriptlet by it's name
+ *
* @param {string} name - scriptlet name
+ * @returns {Function} scriptlet function
*/
const getScriptletByName = (name) => {
const scriptlets = Object.keys(scriptletsList).map((key) => scriptletsList[key]);
@@ -107,7 +116,9 @@ const getScriptletByName = (name) => {
/**
* Checks if the scriptlet name is valid
+ *
* @param {string} name - Scriptlet name
+ * @returns {boolean} if the scriptlet name is valid
*/
const isValidScriptletName = (name) => {
if (!name) {
@@ -260,14 +271,16 @@ const REDIRECT_RULE_TYPES = {
/**
* Parses redirect rule modifiers
- * @param {string} rule
- * @returns {Array}
+ *
+ * @param {string} rule rule text
+ * @returns {Array} list of rule modifiers
*/
const parseModifiers = (rule) => substringAfter(rule, '$').split(',');
/**
* Gets redirect resource name
- * @param {string} rule
+ *
+ * @param {string} rule rule text
* @param {string} marker - specific Adg/Ubo or Abp redirect resources marker
* @returns {string} - redirect resource name
*/
@@ -281,7 +294,9 @@ const getRedirectName = (rule, marker) => {
/**
* Checks if the `rule` is AdGuard redirect rule.
* Discards comments and JS rules and checks if the `rule` has 'redirect' modifier.
+ *
* @param {string} rule - rule text
+ * @returns {boolean} if given rule is adg redirect
*/
const isAdgRedirectRule = (rule) => {
const MARKER_IN_BASE_PART_MASK = '/((?!\\$|\\,).{1})redirect((-rule)?)=(.{0,}?)\\$(popup)?/';
@@ -300,8 +315,10 @@ const isAdgRedirectRule = (rule) => {
/**
* Checks if the `rule` satisfies the `type`
+ *
* @param {string} rule - rule text
* @param {'VALID_ADG'|'ADG'|'UBO'|'ABP'} type - type of a redirect rule
+ * @returns {boolean} if the `rule` satisfies the `type`
*/
const isRedirectRuleByType = (rule, type) => {
const {
@@ -340,37 +357,41 @@ const isRedirectRuleByType = (rule, type) => {
};
/**
-* Checks if the `rule` is **valid** AdGuard redirect resource rule
-* @param {string} rule - rule text
-* @returns {boolean}
-*/
+ * Checks if the `rule` is **valid** AdGuard redirect resource rule
+ *
+ * @param {string} rule - rule text
+ * @returns {boolean} if given rule is valid adg redirect
+ */
const isValidAdgRedirectRule = (rule) => {
return isRedirectRuleByType(rule, 'VALID_ADG');
};
/**
-* Checks if the AdGuard redirect `rule` has Ubo analog. Needed for Adg->Ubo conversion
-* @param {string} rule - AdGuard rule text
-* @returns {boolean} - true if the rule can be converted to Ubo
-*/
+ * Checks if the AdGuard redirect `rule` has Ubo analog. Needed for Adg->Ubo conversion
+ *
+ * @param {string} rule - AdGuard rule text
+ * @returns {boolean} - true if the rule can be converted to Ubo
+ */
const isAdgRedirectCompatibleWithUbo = (rule) => {
return isAdgRedirectRule(rule) && isRedirectRuleByType(rule, 'ADG');
};
/**
-* Checks if the Ubo redirect `rule` has AdGuard analog. Needed for Ubo->Adg conversion
-* @param {string} rule - Ubo rule text
-* @returns {boolean} - true if the rule can be converted to AdGuard
-*/
+ * Checks if the Ubo redirect `rule` has AdGuard analog. Needed for Ubo->Adg conversion
+ *
+ * @param {string} rule - Ubo rule text
+ * @returns {boolean} - true if the rule can be converted to AdGuard
+ */
const isUboRedirectCompatibleWithAdg = (rule) => {
return isRedirectRuleByType(rule, 'UBO');
};
/**
-* Checks if the Abp redirect `rule` has AdGuard analog. Needed for Abp->Adg conversion
-* @param {string} rule - Abp rule text
-* @returns {boolean} - true if the rule can be converted to AdGuard
-*/
+ * Checks if the Abp redirect `rule` has AdGuard analog. Needed for Abp->Adg conversion
+ *
+ * @param {string} rule - Abp rule text
+ * @returns {boolean} - true if the rule can be converted to AdGuard
+ */
const isAbpRedirectCompatibleWithAdg = (rule) => {
return isRedirectRuleByType(rule, 'ABP');
};
@@ -388,8 +409,8 @@ const isAbpRedirectCompatibleWithAdg = (rule) => {
* $script,redirect=noopvast-2.0
* $xmlhttprequest,redirect=noopvast-2.0
*
- * @param {string} rule
- * @returns {boolean}
+ * @param {string} rule rule text
+ * @returns {boolean} if the rule has specified content type before conversion
*/
const hasValidContentType = (rule) => {
const ruleModifiers = parseModifiers(rule);
diff --git a/src/redirects/amazon-apstag.js b/src/redirects/amazon-apstag.js
index 5c384772..959dca69 100644
--- a/src/redirects/amazon-apstag.js
+++ b/src/redirects/amazon-apstag.js
@@ -2,7 +2,6 @@ import { hit, noopFunc } from '../helpers/index';
/**
* @redirect amazon-apstag
- *
* @description
* Mocks Amazon's apstag.js
*
diff --git a/src/redirects/ati-smarttag.js b/src/redirects/ati-smarttag.js
index 03461313..4a00ab27 100644
--- a/src/redirects/ati-smarttag.js
+++ b/src/redirects/ati-smarttag.js
@@ -2,7 +2,6 @@ import { hit, noopFunc } from '../helpers/index';
/**
* @redirect ati-smarttag
- *
* @description
* Mocks AT Internat SmartTag.
* https://developers.atinternet-solutions.com/as2-tagging-en/javascript-en/getting-started-javascript-en/tracker-initialisation-javascript-en/
@@ -88,9 +87,7 @@ export function ATInternetSmartTag(source) {
const smartTagWrapper = {
Tracker: {
- Tag() {
- return new tag(); // eslint-disable-line new-cap
- },
+ Tag: tag,
},
};
diff --git a/src/redirects/blocking-redirects/click2load.js b/src/redirects/blocking-redirects/click2load.js
index 8bff8d06..9ddf2f05 100644
--- a/src/redirects/blocking-redirects/click2load.js
+++ b/src/redirects/blocking-redirects/click2load.js
@@ -27,6 +27,7 @@ function clickToLoad() {
* Some browsers does not support URL.searchParams.get()
* but we need script run with no error
* because frame will be shown anyway if click2load redirect rule used
+ *
* @param {string} rawQueryStr
* @returns {Object} key is parameter name and value is parameter value
*/
@@ -123,12 +124,12 @@ function clickToLoad() {
/**
* Returns translations data for navigator.language
* or 'en' if navigator.language is not supported
+ *
* @returns {Object} data for one locale with 'title' and 'button' keys
*/
const getTranslations = () => {
const baseLocaleData = translationsData.en;
try {
- // eslint-disable-next-line compat/compat
const currentLocale = navigator.language.toLowerCase();
let localeData = translationsData[currentLocale];
if (!localeData) {
@@ -150,6 +151,7 @@ function clickToLoad() {
/**
* Prepares frame url to replace on button click
+ *
* @param {string} originUrl passed origin frame url
* @param {string} unblockTokenName param name for further validation
* @param {string} unblockTokenValue param value for further validation
@@ -215,6 +217,7 @@ function clickToLoad() {
/**
* Checks whether the rule has 'frame' or 'subdocument' modifier
+ *
* @param {string} rule blocking rules passed into redirect
* @returns {boolean}
*/
@@ -231,6 +234,7 @@ function clickToLoad() {
};
/**
* Checks whether script runs inside a frame
+ *
* @returns {boolean}
*/
const isInsideFrame = () => window.self !== window.top;
diff --git a/src/redirects/didomi-loader.js b/src/redirects/didomi-loader.js
index ba364b46..06b28f13 100644
--- a/src/redirects/didomi-loader.js
+++ b/src/redirects/didomi-loader.js
@@ -9,7 +9,6 @@ import {
/**
* @redirect didomi-loader
- *
* @description
* Mocks Didomi's CMP loader script.
* https://developers.didomi.io/
diff --git a/src/redirects/fingerprintjs2.js b/src/redirects/fingerprintjs2.js
index 9e93f9d8..a3f04a8d 100644
--- a/src/redirects/fingerprintjs2.js
+++ b/src/redirects/fingerprintjs2.js
@@ -3,7 +3,6 @@ import { hit } from '../helpers/index';
/**
* @redirect fingerprintjs2
- *
* @description
* Mocks FingerprintJS v2
* https://github.com/fingerprintjs
diff --git a/src/redirects/fingerprintjs3.js b/src/redirects/fingerprintjs3.js
index 6f08ca5f..2c073b33 100644
--- a/src/redirects/fingerprintjs3.js
+++ b/src/redirects/fingerprintjs3.js
@@ -6,7 +6,6 @@ import {
/**
* @redirect fingerprintjs3
- *
* @description
* Mocks FingerprintJS v3
* https://github.com/fingerprintjs
@@ -31,11 +30,9 @@ export function Fingerprintjs3(source) {
const FingerprintJS = function () { };
FingerprintJS.prototype = {
load() {
- // eslint-disable-next-line compat/compat
return Promise.resolve(new FingerprintJS());
},
get() {
- // eslint-disable-next-line compat/compat
return Promise.resolve({
visitorId,
});
diff --git a/src/redirects/gemius.js b/src/redirects/gemius.js
index 8059a203..cfaf6284 100644
--- a/src/redirects/gemius.js
+++ b/src/redirects/gemius.js
@@ -3,7 +3,6 @@ import { hit, noopFunc } from '../helpers/index';
/**
* @redirect gemius
- *
* @description
* Mocks Gemius Analytics.
* https://flowplayer.com/developers/plugins/gemius
diff --git a/src/redirects/google-analytics-ga.js b/src/redirects/google-analytics-ga.js
index 559dc542..9e86a66b 100644
--- a/src/redirects/google-analytics-ga.js
+++ b/src/redirects/google-analytics-ga.js
@@ -7,7 +7,6 @@ import {
/**
* @redirect google-analytics-ga
- *
* @description
* Mocks old Google Analytics API.
*
diff --git a/src/redirects/google-analytics.js b/src/redirects/google-analytics.js
index 4744cea0..e42214d9 100644
--- a/src/redirects/google-analytics.js
+++ b/src/redirects/google-analytics.js
@@ -7,7 +7,6 @@ import {
/**
* @redirect google-analytics
- *
* @description
* Mocks Google's Analytics and Tag Manager APIs.
* [Covers obsolete googletagmanager-gtm redirect functionality](https://github.com/AdguardTeam/Scriptlets/issues/127).
@@ -78,9 +77,9 @@ export function GoogleAnalytics(source) {
/**
* checks data object and delays callback
- * @param {Object|Array} data gtag payload
+ *
+ * @param {object|Array} dataObj gtag payload
* @param {string} funcName callback prop name
- * @returns
*/
const handleCallback = (dataObj, funcName) => {
if (dataObj && typeof dataObj[funcName] === 'function') {
@@ -111,7 +110,8 @@ export function GoogleAnalytics(source) {
}
// https://github.com/AdguardTeam/Scriptlets/issues/81
- if (google_optimize instanceof Object && typeof google_optimize.get === 'function') { // eslint-disable-line camelcase
+ // eslint-disable-next-line camelcase
+ if (google_optimize instanceof Object && typeof google_optimize.get === 'function') {
const googleOptimizeWrapper = {
get: noopFunc,
};
diff --git a/src/redirects/google-ima3.js b/src/redirects/google-ima3.js
index 792f1c4e..807bbb79 100644
--- a/src/redirects/google-ima3.js
+++ b/src/redirects/google-ima3.js
@@ -7,7 +7,6 @@ import {
/**
* @redirect google-ima3
- *
* @description
* Mocks the IMA SDK of Google.
*
@@ -478,7 +477,13 @@ export function GoogleIma3(source) {
hit(source);
}
-GoogleIma3.names = ['google-ima3'];
+GoogleIma3.names = [
+ 'google-ima3',
+ // prefixed name
+ 'ubo-google-ima.js',
+ // original ubo name
+ 'google-ima.js',
+];
GoogleIma3.injections = [
hit,
diff --git a/src/redirects/googlesyndication-adsbygoogle.js b/src/redirects/googlesyndication-adsbygoogle.js
index d65b7243..80832f5a 100644
--- a/src/redirects/googlesyndication-adsbygoogle.js
+++ b/src/redirects/googlesyndication-adsbygoogle.js
@@ -3,7 +3,6 @@ import { hit } from '../helpers/index';
/* eslint-disable max-len */
/**
* @redirect googlesyndication-adsbygoogle
- *
* @description
* Mocks Google AdSense API.
*
diff --git a/src/redirects/googletagservices-gpt.js b/src/redirects/googletagservices-gpt.js
index d91dc177..f2ece88d 100644
--- a/src/redirects/googletagservices-gpt.js
+++ b/src/redirects/googletagservices-gpt.js
@@ -11,7 +11,6 @@ import {
/**
* @redirect googletagservices-gpt
- *
* @description
* Mocks Google Publisher Tag API.
*
@@ -26,8 +25,12 @@ import {
export function GoogleTagServicesGpt(source) {
const slots = new Map();
const slotsById = new Map();
+ const slotsPerPath = new Map();
+ const slotCreatives = new Map();
const eventCallbacks = new Map();
+ const gTargeting = new Map();
+
const addEventListener = function (name, listener) {
if (!eventCallbacks.has(name)) {
eventCallbacks.set(name, new Set());
@@ -44,7 +47,6 @@ export function GoogleTagServicesGpt(source) {
};
const fireSlotEvent = (name, slot) => {
- // eslint-disable-next-line compat/compat
return new Promise((resolve) => {
requestAnimationFrame(() => {
const size = [0, 0];
@@ -58,6 +60,32 @@ export function GoogleTagServicesGpt(source) {
});
};
+ const emptySlotElement = (slot) => {
+ const node = document.getElementById(slot.getSlotElementId());
+ while (node?.lastChild) {
+ node.lastChild.remove();
+ }
+ };
+
+ const recreateIframeForSlot = (slot) => {
+ const eid = `google_ads_iframe_${slot.getId()}`;
+ document.getElementById(eid)?.remove();
+ const node = document.getElementById(slot.getSlotElementId());
+ if (node) {
+ const f = document.createElement('iframe');
+ f.id = eid;
+ f.srcdoc = '';
+ f.style = 'position:absolute; width:0; height:0; left:0; right:0; z-index:-1; border:0';
+ f.setAttribute('width', 0);
+ f.setAttribute('height', 0);
+ // https://github.com/AdguardTeam/Scriptlets/issues/259
+ f.setAttribute('data-load-complete', true);
+ f.setAttribute('data-google-container-id', true);
+ f.setAttribute('sandbox', true);
+ node.appendChild(f);
+ }
+ };
+
const displaySlot = (slot) => {
if (!slot) {
return;
@@ -72,6 +100,8 @@ export function GoogleTagServicesGpt(source) {
parent.appendChild(document.createElement('div'));
}
+ emptySlotElement(slot);
+ recreateIframeForSlot(slot);
fireSlotEvent('slotRenderEnded', slot);
fireSlotEvent('slotRequested', slot);
fireSlotEvent('slotResponseReceived', slot);
@@ -105,42 +135,132 @@ export function GoogleTagServicesGpt(source) {
SizeMappingBuilder.prototype.addSize = noopThis;
SizeMappingBuilder.prototype.build = noopNull;
- function Slot(adUnitPath, creatives, optDiv) {
- this.adUnitPath = adUnitPath;
- this.creatives = creatives;
- this.optDiv = optDiv;
+ const getTargetingValue = (v) => {
+ if (typeof v === 'string') {
+ return [v];
+ }
+ try {
+ return [Array.prototype.flat.call(v)[0]];
+ } catch {
+ // do nothing
+ }
+ return [];
+ };
+
+ const updateTargeting = (targeting, map) => {
+ if (typeof map === 'object') {
+ const entries = Object.entries(map || {});
+ for (const [k, v] of entries) {
+ targeting.set(k, getTargetingValue(v));
+ }
+ }
+ };
+ const defineSlot = (adUnitPath, creatives, optDiv) => {
if (slotsById.has(optDiv)) {
document.getElementById(optDiv)?.remove();
return slotsById.get(optDiv);
}
- slotsById.set(optDiv, this);
- } // constructor
- Slot.prototype.addService = noopThis;
- Slot.prototype.clearCategoryExclusions = noopThis;
- Slot.prototype.clearTargeting = noopThis;
- Slot.prototype.defineSizeMapping = noopThis;
- Slot.prototype.get = noopNull;
- Slot.prototype.getAdUnitPath = function () {
- return this.adUnitPath;
- };
- Slot.prototype.getAttributeKeys = noopArray;
- Slot.prototype.getCategoryExclusions = noopArray;
- Slot.prototype.getDomId = function () {
- return this.optDiv;
- };
- Slot.prototype.getSlotElementId = function () {
- return this.optDiv;
+ const attributes = new Map();
+ const targeting = new Map();
+ const exclusions = new Set();
+ const response = {
+ advertiserId: undefined,
+ campaignId: undefined,
+ creativeId: undefined,
+ creativeTemplateId: undefined,
+ lineItemId: undefined,
+ };
+ const sizes = [
+ {
+ getHeight: () => 2,
+ getWidth: () => 2,
+ },
+ ];
+ const num = (slotsPerPath.get(adUnitPath) || 0) + 1;
+ slotsPerPath.set(adUnitPath, num);
+ const id = `${adUnitPath}_${num}`;
+ let clickUrl = '';
+ let collapseEmptyDiv = null;
+ const services = new Set();
+ const slot = {
+ addService(e) {
+ services.add(e);
+ return slot;
+ },
+ clearCategoryExclusions: noopThis,
+ clearTargeting(k) {
+ if (k === undefined) {
+ targeting.clear();
+ } else {
+ targeting.delete(k);
+ }
+ },
+ defineSizeMapping(mapping) {
+ slotCreatives.set(optDiv, mapping);
+ return this;
+ },
+ get: (k) => attributes.get(k),
+ getAdUnitPath: () => adUnitPath,
+ getAttributeKeys: () => Array.from(attributes.keys()),
+ getCategoryExclusions: () => Array.from(exclusions),
+ getClickUrl: () => clickUrl,
+ getCollapseEmptyDiv: () => collapseEmptyDiv,
+ getContentUrl: () => '',
+ getDivStartsCollapsed: () => null,
+ getDomId: () => optDiv,
+ getEscapedQemQueryId: () => '',
+ getFirstLook: () => 0,
+ getId: () => id,
+ getHtml: () => '',
+ getName: () => id,
+ getOutOfPage: () => false,
+ getResponseInformation: () => response,
+ getServices: () => Array.from(services),
+ getSizes: () => sizes,
+ getSlotElementId: () => optDiv,
+ getSlotId: () => slot,
+ getTargeting: (k) => targeting.get(k) || gTargeting.get(k) || [],
+ getTargetingKeys: () => Array.from(
+ new Set(Array.of(...gTargeting.keys(), ...targeting.keys())),
+ ),
+ getTargetingMap: () => Object.assign(
+ Object.fromEntries(gTargeting.entries()),
+ Object.fromEntries(targeting.entries()),
+ ),
+ set(k, v) {
+ attributes.set(k, v);
+ return slot;
+ },
+ setCategoryExclusion(e) {
+ exclusions.add(e);
+ return slot;
+ },
+ setClickUrl(u) {
+ clickUrl = u;
+ return slot;
+ },
+ setCollapseEmptyDiv(v) {
+ collapseEmptyDiv = !!v;
+ return slot;
+ },
+ setSafeFrameConfig: noopThis,
+ setTagForChildDirectedTreatment: noopThis,
+ setTargeting(k, v) {
+ targeting.set(k, getTargetingValue(v));
+ return slot;
+ },
+ toString: () => id,
+ updateTargetingFromMap(map) {
+ updateTargeting(targeting, map);
+ return slot;
+ },
+ };
+ slots.set(adUnitPath, slot);
+ slotsById.set(optDiv, slot);
+ slotCreatives.set(optDiv, creatives);
+ return slot;
};
- Slot.prototype.getSlotId = noopThis;
- Slot.prototype.getSizes = noopArray;
- Slot.prototype.getTargeting = noopArray;
- Slot.prototype.getTargetingKeys = noopArray;
- Slot.prototype.set = noopThis;
- Slot.prototype.setCategoryExclusion = noopThis;
- Slot.prototype.setClickUrl = noopThis;
- Slot.prototype.setCollapseEmptyDiv = noopThis;
- Slot.prototype.setTargeting = noopThis;
const pubAdsService = {
addEventListener,
@@ -148,7 +268,13 @@ export function GoogleTagServicesGpt(source) {
clear: noopFunc,
clearCategoryExclusions: noopThis,
clearTagForChildDirectedTreatment: noopThis,
- clearTargeting: noopThis,
+ clearTargeting(k) {
+ if (k === undefined) {
+ gTargeting.clear();
+ } else {
+ gTargeting.delete(k);
+ }
+ },
collapseEmptyDivs: noopFunc,
defineOutOfPagePassback() { return new PassbackSlot(); },
definePassback() { return new PassbackSlot(); },
@@ -181,8 +307,6 @@ export function GoogleTagServicesGpt(source) {
updateCorrelator: noopFunc,
};
- const getNewSlot = (adUnitPath, creatives, optDiv) => new Slot(adUnitPath, creatives, optDiv);
-
const { googletag = {} } = window;
const { cmd = [] } = googletag;
@@ -197,8 +321,8 @@ export function GoogleTagServicesGpt(source) {
};
googletag.companionAds = () => companionAdsService;
googletag.content = () => contentService;
- googletag.defineOutOfPageSlot = getNewSlot;
- googletag.defineSlot = getNewSlot;
+ googletag.defineOutOfPageSlot = defineSlot;
+ googletag.defineSlot = defineSlot;
googletag.destroySlots = function () {
slots.clear();
slotsById.clear();
diff --git a/src/redirects/index.js b/src/redirects/index.js
index bd8a36b6..6b9b8244 100644
--- a/src/redirects/index.js
+++ b/src/redirects/index.js
@@ -22,7 +22,9 @@ import { redirectsMap } from '../../tmp/redirects-map';
/**
* Finds redirect resource by it's name
+ *
* @param {string} name - redirect name
+ * @returns {Function}
*/
const getRedirectByName = (name) => {
const redirects = Object.keys(redirectsList).map((key) => redirectsList[key]);
@@ -40,6 +42,7 @@ const getRedirectByName = (name) => {
/**
* Returns redirect code by param
+ *
* @param {Source} source
* @returns {string} redirect code
*/
diff --git a/src/redirects/matomo.js b/src/redirects/matomo.js
index 24424124..649c87cc 100644
--- a/src/redirects/matomo.js
+++ b/src/redirects/matomo.js
@@ -3,7 +3,6 @@ import { hit, noopFunc } from '../helpers/index';
/**
* @redirect matomo
- *
* @description
* Mocks the piwik.js file of Matomo (formerly Piwik).
*
@@ -23,12 +22,8 @@ export function Matomo(source) {
AsyncTracker.prototype.addListener = noopFunc;
const matomoWrapper = {
- getTracker() {
- return new Tracker();
- },
- getAsyncTracker() {
- return new AsyncTracker();
- },
+ getTracker: Tracker,
+ getAsyncTracker: AsyncTracker,
};
window.Piwik = matomoWrapper;
diff --git a/src/redirects/metrika-yandex-tag.js b/src/redirects/metrika-yandex-tag.js
index 068551c3..a432926b 100644
--- a/src/redirects/metrika-yandex-tag.js
+++ b/src/redirects/metrika-yandex-tag.js
@@ -2,7 +2,6 @@ import { hit, noopFunc } from '../helpers/index';
/**
* @redirect metrika-yandex-tag
- *
* @description
* Mocks Yandex Metrika API.
* https://yandex.ru/support/metrica/objects/method-reference.html
@@ -39,6 +38,8 @@ export function metrikaYandexTag(source) {
/**
* https://yandex.ru/support/metrica/objects/get-client-id.html
+ *
+ * @param {string} id
* @param {Function} cb
*/
const getClientID = (id, cb) => {
@@ -65,6 +66,8 @@ export function metrikaYandexTag(source) {
/**
* https://yandex.ru/support/metrica/objects/reachgoal.html
+ *
+ * @param {string} id
* @param {string} target
* @param {Object} params
* @param {Function} callback
diff --git a/src/redirects/metrika-yandex-watch.js b/src/redirects/metrika-yandex-watch.js
index 048ba89b..f2646de7 100644
--- a/src/redirects/metrika-yandex-watch.js
+++ b/src/redirects/metrika-yandex-watch.js
@@ -2,7 +2,6 @@ import { hit, noopFunc, noopArray } from '../helpers/index';
/**
* @redirect metrika-yandex-watch
- *
* @description
* Mocks the old Yandex Metrika API.
* https://yandex.ru/support/metrica/objects/_method-reference.html
@@ -17,6 +16,7 @@ export function metrikaYandexWatch(source) {
/**
* Gets callback and its context from options and call it in async way
+ *
* @param {Object} options Yandex Metrika API options
*/
const asyncCallbackFromOptions = (options = {}) => {
diff --git a/src/redirects/naver-wcslog.js b/src/redirects/naver-wcslog.js
index 8b93b211..e84f0f11 100644
--- a/src/redirects/naver-wcslog.js
+++ b/src/redirects/naver-wcslog.js
@@ -3,7 +3,6 @@ import { hit, noopFunc } from '../helpers/index';
/**
* @redirect naver-wcslog
- *
* @description
* Mocks wcslog.js of Naver Analytics.
*
diff --git a/src/redirects/noeval.js b/src/redirects/noeval.js
index 7754392a..698f4642 100644
--- a/src/redirects/noeval.js
+++ b/src/redirects/noeval.js
@@ -2,7 +2,6 @@ import { noeval } from '../scriptlets/noeval';
/**
* @redirect noeval
- *
* @description
* Redirects request to the source which sets static properties to PopAds and popns objects.
*
diff --git a/src/redirects/pardot-1.0.js b/src/redirects/pardot-1.0.js
index eb2d312b..e23f1904 100644
--- a/src/redirects/pardot-1.0.js
+++ b/src/redirects/pardot-1.0.js
@@ -8,7 +8,6 @@ import {
/**
* @redirect pardot-1.0
- *
* @description
* Mocks the pd.js file of Salesforce.
* https://pi.pardot.com/pd.js
diff --git a/src/redirects/prebid-ads.js b/src/redirects/prebid-ads.js
index 18a209bc..ff4fccc7 100644
--- a/src/redirects/prebid-ads.js
+++ b/src/redirects/prebid-ads.js
@@ -3,7 +3,6 @@ import { hit } from '../helpers/index';
/**
* @redirect prebid-ads
- *
* @description
* Sets predefined constants on a page:
* - `canRunAds`: `true`
diff --git a/src/redirects/prebid.js b/src/redirects/prebid.js
index c5a8198a..77356c57 100644
--- a/src/redirects/prebid.js
+++ b/src/redirects/prebid.js
@@ -8,7 +8,6 @@ import {
/**
* @redirect prebid
- *
* @description
* Mocks the prebid.js header bidding suit.
* https://docs.prebid.org/
diff --git a/src/redirects/prevent-bab.js b/src/redirects/prevent-bab.js
index eaf18271..bbf4feef 100644
--- a/src/redirects/prevent-bab.js
+++ b/src/redirects/prevent-bab.js
@@ -1,8 +1,7 @@
-import { preventBab } from '../scriptlets/prevent-bab';
+import { preventBab as preventBabScriptlet } from '../scriptlets/prevent-bab';
/**
* @redirect prevent-bab
- *
* @description
* Prevents BlockAdblock script from detecting an ad blocker.
*
@@ -17,4 +16,16 @@ import { preventBab } from '../scriptlets/prevent-bab';
* /blockadblock.$script,redirect=prevent-bab
* ```
*/
+const preventBab = preventBabScriptlet;
+preventBab.names = [
+ 'prevent-bab',
+ // list of prevent-bab redirect aliases
+ 'nobab.js',
+ 'ubo-nobab.js',
+ 'bab-defuser.js',
+ 'ubo-bab-defuser.js',
+ 'ubo-nobab',
+ 'ubo-bab-defuser',
+];
+
export { preventBab };
diff --git a/src/redirects/prevent-bab2.js b/src/redirects/prevent-bab2.js
index 28fffe72..85ac5523 100644
--- a/src/redirects/prevent-bab2.js
+++ b/src/redirects/prevent-bab2.js
@@ -3,7 +3,6 @@ import { hit } from '../helpers/index';
/**
* @redirect prevent-bab2
- *
* @description
* Prevents BlockAdblock script from detecting an ad blocker.
*
@@ -18,7 +17,6 @@ import { hit } from '../helpers/index';
* ```
*/
export function preventBab2(source) {
- // eslint-disable-next-line compat/compat
const script = document.currentScript;
if (script === null) {
return;
diff --git a/src/redirects/prevent-fab-3.2.0.js b/src/redirects/prevent-fab-3.2.0.js
index 503caf98..c4973295 100644
--- a/src/redirects/prevent-fab-3.2.0.js
+++ b/src/redirects/prevent-fab-3.2.0.js
@@ -2,7 +2,6 @@ import { preventFab } from '../scriptlets/prevent-fab-3.2.0';
/**
* @redirect prevent-fab-3.2.0
- *
* @description
* Redirects fuckadblock script to the source js file.
*
diff --git a/src/redirects/prevent-popads-net.js b/src/redirects/prevent-popads-net.js
index 187b5a3d..b0d2bb54 100644
--- a/src/redirects/prevent-popads-net.js
+++ b/src/redirects/prevent-popads-net.js
@@ -2,7 +2,6 @@ import { preventPopadsNet } from '../scriptlets/prevent-popads-net';
/**
* @redirect prevent-popads-net
- *
* @description
* Redirects request to the source which sets static properties to PopAds and popns objects.
*
diff --git a/src/redirects/redirects.js b/src/redirects/redirects.js
index a1972ea4..5d90c806 100644
--- a/src/redirects/redirects.js
+++ b/src/redirects/redirects.js
@@ -9,19 +9,21 @@ import jsYaml from 'js-yaml';
* contentType: image/gif;base64
* content: R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==
* }
+ *
* @typedef {Object} Redirect
- * @property {string} title
- * @property {string} comment
- * @property {string} content
- * @property {string} contentType
- * @property {boolean} [isBlocking]
- * @property {string} [sha]
+ * @property {string} title resource name
+ * @property {string} comment resource description
+ * @property {string} content encoded resource content
+ * @property {string} contentType MIME type
+ * @property {boolean} [isBlocking] e.g click2load redirect
+ * @property {string} [sha] hash
*/
class Redirects {
/**
* Converts rawYaml into JS object with sources titles used as keys
- * @param rawYaml
+ *
+ * @param {string} rawYaml
* @returns {Object} - return object with titles in the keys and RedirectSources
* in the values
*/
@@ -43,8 +45,9 @@ class Redirects {
/**
* Returns redirect source object
+ *
* @param {string} title
- * @return {Redirect}
+ * @returns {Redirect|undefined} Found redirect source object, or `undefined` if not found.
*/
getRedirect(title) {
if (Object.prototype.hasOwnProperty.call(this.redirects, title)) {
@@ -62,6 +65,21 @@ class Redirects {
return aliases.indexOf(title) > -1;
});
}
+
+ /**
+ * Checks if redirect is blocking like click2load.html
+ *
+ * @param {string} title Title of the redirect.
+ * @returns {boolean} True if redirect is blocking otherwise returns `false` even if redirect name is
+ * unknown.
+ */
+ isBlocking(title) {
+ const redirect = this.redirects[title];
+ if (redirect) {
+ return !!redirect.isBlocking;
+ }
+ return false;
+ }
}
export default Redirects;
diff --git a/src/redirects/scorecardresearch-beacon.js b/src/redirects/scorecardresearch-beacon.js
index 318217de..9900706a 100644
--- a/src/redirects/scorecardresearch-beacon.js
+++ b/src/redirects/scorecardresearch-beacon.js
@@ -2,7 +2,6 @@ import { hit } from '../helpers/index';
/**
* @redirect scorecardresearch-beacon
- *
* @description
* Mocks Scorecard Research API.
*
diff --git a/src/redirects/set-popads-dummy.js b/src/redirects/set-popads-dummy.js
index 9ccd9bfc..70af5001 100644
--- a/src/redirects/set-popads-dummy.js
+++ b/src/redirects/set-popads-dummy.js
@@ -2,7 +2,6 @@ import { setPopadsDummy } from '../scriptlets/set-popads-dummy';
/**
* @redirect set-popads-dummy
- *
* @description
* Redirects request to the source which sets static properties to PopAds and popns objects.
*
diff --git a/src/scriptlets/abort-current-inline-script.js b/src/scriptlets/abort-current-inline-script.js
index 1c17f42e..3fe78ddd 100644
--- a/src/scriptlets/abort-current-inline-script.js
+++ b/src/scriptlets/abort-current-inline-script.js
@@ -16,7 +16,6 @@ import {
/* eslint-disable max-len */
/**
* @scriptlet abort-current-inline-script
- *
* @description
* Aborts an inline script when it attempts to **read** or **write to** the specified property
* AND when the contents of the `