@adguard/agtree 2.1.2 → 3.0.0-alpha.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cjs/ast-utils/clone.js +65 -0
- package/dist/cjs/ast-utils/modifiers.js +56 -0
- package/dist/cjs/ast-utils/network-rules.js +43 -0
- package/dist/cjs/ast-utils/scriptlets.js +93 -0
- package/dist/cjs/common/abp-snippet-injection-body-common.js +18 -0
- package/dist/cjs/common/agent-common.js +58 -0
- package/dist/cjs/common/ubo-selector-common.js +18 -0
- package/dist/cjs/compatibility-tables/base.js +264 -0
- package/dist/cjs/compatibility-tables/compatibility-table-data.js +15 -0
- package/dist/cjs/compatibility-tables/modifiers.js +57 -0
- package/dist/cjs/compatibility-tables/platforms.js +58 -0
- package/dist/cjs/compatibility-tables/redirects.js +102 -0
- package/dist/cjs/compatibility-tables/schemas/base.js +116 -0
- package/dist/cjs/compatibility-tables/schemas/modifier.js +107 -0
- package/dist/cjs/compatibility-tables/schemas/platform.js +71 -0
- package/dist/cjs/compatibility-tables/schemas/redirect.js +31 -0
- package/dist/cjs/compatibility-tables/schemas/resource-type.js +39 -0
- package/dist/cjs/compatibility-tables/schemas/scriptlet.js +81 -0
- package/dist/cjs/compatibility-tables/scriptlets.js +30 -0
- package/dist/cjs/compatibility-tables/utils/platform-helpers.js +112 -0
- package/dist/cjs/compatibility-tables/utils/resource-type-helpers.js +64 -0
- package/dist/cjs/compatibility-tables/utils/zod-camelcase.js +27 -0
- package/dist/cjs/converter/base-interfaces/base-converter.js +61 -0
- package/dist/cjs/converter/base-interfaces/conversion-result.js +41 -0
- package/dist/cjs/converter/base-interfaces/rule-converter-base.js +62 -0
- package/dist/cjs/converter/comment/index.js +56 -0
- package/dist/cjs/converter/cosmetic/css.js +71 -0
- package/dist/cjs/converter/cosmetic/element-hiding.js +64 -0
- package/dist/cjs/converter/cosmetic/header-removal.js +126 -0
- package/dist/cjs/converter/cosmetic/html.js +384 -0
- package/dist/cjs/converter/cosmetic/index.js +120 -0
- package/dist/cjs/converter/cosmetic/rule-modifiers/adg.js +81 -0
- package/dist/cjs/converter/cosmetic/scriptlet.js +356 -0
- package/dist/cjs/converter/css/index.js +193 -0
- package/dist/cjs/converter/data/css.js +133 -0
- package/dist/cjs/converter/filter-list.js +90 -0
- package/dist/cjs/converter/index.js +15 -0
- package/dist/cjs/converter/misc/network-rule-modifier.js +313 -0
- package/dist/cjs/converter/network/index.js +101 -0
- package/dist/cjs/converter/raw-filter-list.js +58 -0
- package/dist/cjs/converter/rule.js +83 -0
- package/dist/cjs/deserializer/base-deserializer.js +31 -0
- package/dist/cjs/deserializer/comment/agent-comment-deserializer.js +76 -0
- package/dist/cjs/deserializer/comment/agent-deserializer.js +67 -0
- package/dist/cjs/deserializer/comment/comment-rule-deserializer.js +109 -0
- package/dist/cjs/deserializer/comment/config-comment-deserializer.js +113 -0
- package/dist/cjs/deserializer/comment/hint-comment-deserializer.js +69 -0
- package/dist/cjs/deserializer/comment/hint-deserializer.js +88 -0
- package/dist/cjs/deserializer/comment/metadata-comment-deserializer.js +71 -0
- package/dist/cjs/deserializer/comment/pre-processor-comment-deserializer.js +114 -0
- package/dist/cjs/deserializer/comment/simple-comment-deserializer.js +67 -0
- package/dist/cjs/deserializer/cosmetic/cosmetic-rule-deserializer.js +127 -0
- package/dist/cjs/deserializer/cosmetic/css-injection-body-deserializer.js +55 -0
- package/dist/cjs/deserializer/cosmetic/element-hiding-body-deserializer.js +46 -0
- package/dist/cjs/deserializer/cosmetic/scriptlet-body/abp-snippet-injection-body-deserializer.js +37 -0
- package/dist/cjs/deserializer/cosmetic/scriptlet-body/adg-scriptlet-injection-body-deserializer.js +37 -0
- package/dist/cjs/deserializer/cosmetic/scriptlet-body/scriptlet-body-deserializer.js +52 -0
- package/dist/cjs/deserializer/cosmetic/scriptlet-body/ubo-scriptlet-injection-body-deserializer.js +38 -0
- package/dist/cjs/deserializer/empty-rule-deserializer.js +46 -0
- package/dist/cjs/deserializer/filterlist-deserializer.js +83 -0
- package/dist/cjs/deserializer/index.js +15 -0
- package/dist/cjs/deserializer/invalid-rule-deserializer.js +48 -0
- package/dist/cjs/deserializer/invalid-rule-error-node-deserializer.js +48 -0
- package/dist/cjs/deserializer/misc/domain-list-deserializer.js +66 -0
- package/dist/cjs/deserializer/misc/list-item-deserializer.js +65 -0
- package/dist/cjs/deserializer/misc/list-items-deserializer.js +28 -0
- package/dist/cjs/deserializer/misc/logical-expression-deserializer.js +199 -0
- package/dist/cjs/deserializer/misc/modifier-deserializer.js +89 -0
- package/dist/cjs/deserializer/misc/modifier-list-deserializer.js +58 -0
- package/dist/cjs/deserializer/misc/parameter-list-deserializer.js +62 -0
- package/dist/cjs/deserializer/misc/value-deserializer.js +52 -0
- package/dist/cjs/deserializer/network/host-rule-deserializer.js +81 -0
- package/dist/cjs/deserializer/network/hostname-list-deserializer.js +50 -0
- package/dist/cjs/deserializer/network/network-rule-deserializer.js +67 -0
- package/dist/cjs/deserializer/rule-deserializer.js +67 -0
- package/dist/cjs/deserializer/syntax-deserialization-map.js +23 -0
- package/dist/cjs/errors/adblock-syntax-error.js +41 -0
- package/dist/cjs/errors/binary-schema-mismatch-error.js +39 -0
- package/dist/cjs/errors/not-implemented-error.js +33 -0
- package/dist/cjs/errors/rule-conversion-error.js +28 -0
- package/dist/cjs/generator/base-generator.js +29 -0
- package/dist/cjs/generator/comment/agent-comment-generator.js +30 -0
- package/dist/cjs/generator/comment/agent-generator.js +34 -0
- package/dist/cjs/generator/comment/comment-rule-generator.js +102 -0
- package/dist/cjs/generator/comment/config-comment-generator.js +44 -0
- package/dist/cjs/generator/comment/hint-comment-generator.js +27 -0
- package/dist/cjs/generator/comment/hint-generator.js +32 -0
- package/dist/cjs/generator/comment/metadata-comment-generator.js +32 -0
- package/dist/cjs/generator/comment/pre-processor-comment-generator.js +47 -0
- package/dist/cjs/generator/comment/simple-comment-generator.js +28 -0
- package/dist/cjs/generator/cosmetic/body/abp-snippet-injection-body-generator.js +36 -0
- package/dist/cjs/generator/cosmetic/body/adg-scriptlet-injection-body-generator.js +41 -0
- package/dist/cjs/generator/cosmetic/body/ubo-scriptlet-injection-body-generator.js +43 -0
- package/dist/cjs/generator/cosmetic/cosmetic-rule-body-generator.js +92 -0
- package/dist/cjs/generator/cosmetic/cosmetic-rule-generator.js +66 -0
- package/dist/cjs/generator/cosmetic/cosmetic-rule-pattern-generator.js +41 -0
- package/dist/cjs/generator/css/adg-css-injection-generator.js +41 -0
- package/dist/cjs/generator/filterlist-generator.js +57 -0
- package/dist/cjs/generator/index.js +17 -0
- package/dist/cjs/generator/misc/domain-list-generator.js +25 -0
- package/dist/cjs/generator/misc/list-items-generator.js +38 -0
- package/dist/cjs/generator/misc/logical-expression-generator.js +47 -0
- package/dist/cjs/generator/misc/modifier-generator.js +33 -0
- package/dist/cjs/generator/misc/modifier-list-generator.js +28 -0
- package/dist/cjs/generator/misc/parameter-list-generator.js +41 -0
- package/dist/cjs/generator/misc/value-generator.js +23 -0
- package/dist/cjs/generator/network/host-rule-generator.js +38 -0
- package/dist/cjs/generator/network/network-rule-generator.js +37 -0
- package/dist/cjs/generator/rule-generator.js +64 -0
- package/dist/cjs/index.js +201 -0
- package/dist/cjs/marshalling-utils/comment/agent-comment-common.js +22 -0
- package/dist/cjs/marshalling-utils/comment/agent-common.js +43 -0
- package/dist/cjs/marshalling-utils/comment/config-comment-common.js +58 -0
- package/dist/cjs/marshalling-utils/comment/hint-comment-common.js +23 -0
- package/dist/cjs/marshalling-utils/comment/hint-common.js +60 -0
- package/dist/cjs/marshalling-utils/comment/metadata-comment-common.js +44 -0
- package/dist/cjs/marshalling-utils/comment/pre-processor-comment-common.js +63 -0
- package/dist/cjs/marshalling-utils/comment/simple-comment-common.js +23 -0
- package/dist/cjs/marshalling-utils/cosmetic/body/abp-snippet-injection-body-common.js +64 -0
- package/dist/cjs/marshalling-utils/cosmetic/body/adg-scriptlet-injection-body-common.js +68 -0
- package/dist/cjs/marshalling-utils/cosmetic/body/css-injection-body-common.js +25 -0
- package/dist/cjs/marshalling-utils/cosmetic/body/element-hiding-body-common.js +22 -0
- package/dist/cjs/marshalling-utils/cosmetic/body/ubo-scriptlet-injection-body-common.js +116 -0
- package/dist/cjs/marshalling-utils/cosmetic/cosmetic-rule-common.js +51 -0
- package/dist/cjs/marshalling-utils/empty-rule-common.js +21 -0
- package/dist/cjs/marshalling-utils/filter-list-common.js +22 -0
- package/dist/cjs/marshalling-utils/invalid-rule-common.js +22 -0
- package/dist/cjs/marshalling-utils/invalid-rule-error-node-common.js +23 -0
- package/dist/cjs/marshalling-utils/misc/binary-type-common.js +67 -0
- package/dist/cjs/marshalling-utils/misc/domain-list-common.js +39 -0
- package/dist/cjs/marshalling-utils/misc/host-rule-common.js +26 -0
- package/dist/cjs/marshalling-utils/misc/hostname-list-common.js +22 -0
- package/dist/cjs/marshalling-utils/misc/list-item-common.js +23 -0
- package/dist/cjs/marshalling-utils/misc/logical-expression-common.js +89 -0
- package/dist/cjs/marshalling-utils/misc/modifier-common.js +236 -0
- package/dist/cjs/marshalling-utils/misc/modifier-list-common.js +22 -0
- package/dist/cjs/marshalling-utils/misc/parameter-list-common.js +22 -0
- package/dist/cjs/marshalling-utils/misc/value-common.js +23 -0
- package/dist/cjs/marshalling-utils/network/network-rule-common.js +26 -0
- package/dist/cjs/marshalling-utils/syntax-serialization-map.js +32 -0
- package/dist/cjs/nodes/index.js +180 -0
- package/dist/cjs/package.json.js +11 -0
- package/dist/cjs/parser/base-parser.js +32 -0
- package/dist/cjs/parser/comment/agent-comment-parser.js +121 -0
- package/dist/cjs/parser/comment/agent-parser.js +111 -0
- package/dist/cjs/parser/comment/comment-parser.js +110 -0
- package/dist/cjs/parser/comment/config-comment-parser.js +139 -0
- package/dist/cjs/parser/comment/hint-comment-parser.js +119 -0
- package/dist/cjs/parser/comment/hint-parser.js +131 -0
- package/dist/cjs/parser/comment/metadata-comment-parser.js +131 -0
- package/dist/cjs/parser/comment/preprocessor-parser.js +201 -0
- package/dist/cjs/parser/comment/simple-comment-parser.js +108 -0
- package/dist/cjs/parser/cosmetic/body/abp-snippet-injection-body-parser.js +81 -0
- package/dist/cjs/parser/cosmetic/body/adg-scriptlet-injection-body-parser.js +151 -0
- package/dist/cjs/parser/cosmetic/body/ubo-scriptlet-injection-body-parser.js +112 -0
- package/dist/cjs/parser/cosmetic/cosmetic-rule-parser.js +456 -0
- package/dist/cjs/parser/css/adg-css-injection-parser.js +213 -0
- package/dist/cjs/parser/css/balancing.js +97 -0
- package/dist/cjs/parser/css/constants.js +21 -0
- package/dist/cjs/parser/css/css-token-stream.js +345 -0
- package/dist/cjs/parser/css/ubo-selector-parser.js +373 -0
- package/dist/cjs/parser/filterlist-parser.js +104 -0
- package/dist/cjs/parser/index.js +21 -0
- package/dist/cjs/parser/misc/app-list-parser.js +47 -0
- package/dist/cjs/parser/misc/domain-list-parser.js +54 -0
- package/dist/cjs/parser/misc/list-items-parser.js +116 -0
- package/dist/cjs/parser/misc/logical-expression-parser.js +283 -0
- package/dist/cjs/parser/misc/method-list-parser.js +48 -0
- package/dist/cjs/parser/misc/modifier-list.js +72 -0
- package/dist/cjs/parser/misc/modifier-parser.js +91 -0
- package/dist/cjs/parser/misc/parameter-list-parser.js +74 -0
- package/dist/cjs/parser/misc/stealth-option-list-parser.js +48 -0
- package/dist/cjs/parser/misc/ubo-parameter-list-parser.js +148 -0
- package/dist/cjs/parser/misc/value-parser.js +39 -0
- package/dist/cjs/parser/network/host-rule-parser.js +151 -0
- package/dist/cjs/parser/network/network-rule-parser.js +113 -0
- package/dist/cjs/parser/options.js +25 -0
- package/dist/cjs/parser/rule-parser.js +194 -0
- package/dist/cjs/serializer/base-serializer.js +31 -0
- package/dist/cjs/serializer/comment/agent-comment-serializer.js +73 -0
- package/dist/cjs/serializer/comment/agent-serializer.js +70 -0
- package/dist/cjs/serializer/comment/comment-rule-serializer.js +107 -0
- package/dist/cjs/serializer/comment/config-comment-serializer.js +84 -0
- package/dist/cjs/serializer/comment/hint-comment-serializer.js +64 -0
- package/dist/cjs/serializer/comment/hint-serializer.js +56 -0
- package/dist/cjs/serializer/comment/metadata-comment-serializer.js +75 -0
- package/dist/cjs/serializer/comment/pre-processor-comment-serializer.js +73 -0
- package/dist/cjs/serializer/comment/simple-comment-serializer.js +54 -0
- package/dist/cjs/serializer/cosmetic/body/abp-snippet-injection-body-serializer.js +38 -0
- package/dist/cjs/serializer/cosmetic/body/adg-scriptlet-injection-body-serializer.js +38 -0
- package/dist/cjs/serializer/cosmetic/body/scriptlet-body-serializer.js +49 -0
- package/dist/cjs/serializer/cosmetic/body/ubo-scriptlet-injection-body-serializer.js +38 -0
- package/dist/cjs/serializer/cosmetic/cosmetic-rule-serializer.js +131 -0
- package/dist/cjs/serializer/cosmetic/css-injection-body-serializer.js +50 -0
- package/dist/cjs/serializer/cosmetic/element-hiding-body-serializer.js +39 -0
- package/dist/cjs/serializer/empty-rule-serializer.js +36 -0
- package/dist/cjs/serializer/filterlist-serializer.js +48 -0
- package/dist/cjs/serializer/index.js +13 -0
- package/dist/cjs/serializer/invalid-rule-error-node-serializer.js +40 -0
- package/dist/cjs/serializer/invalid-rule-serializer.js +39 -0
- package/dist/cjs/serializer/misc/domain-list-serializer.js +66 -0
- package/dist/cjs/serializer/misc/list-item-serializer.js +57 -0
- package/dist/cjs/serializer/misc/list-items-serializer.js +28 -0
- package/dist/cjs/serializer/misc/logical-expression-serializer.js +138 -0
- package/dist/cjs/serializer/misc/modifier-list-serializer.js +57 -0
- package/dist/cjs/serializer/misc/modifier-serializer.js +51 -0
- package/dist/cjs/serializer/misc/parameter-list-serializer.js +51 -0
- package/dist/cjs/serializer/misc/value-serializer.js +52 -0
- package/dist/cjs/serializer/network/host-rule-serializer.js +72 -0
- package/dist/cjs/serializer/network/hostname-list-serializer.js +49 -0
- package/dist/cjs/serializer/network/network-rule-serializer.js +56 -0
- package/dist/cjs/serializer/rule-serializer.js +63 -0
- package/dist/cjs/utils/adblockers.js +57 -0
- package/dist/cjs/utils/binary-schema-version.js +19 -0
- package/dist/cjs/utils/byte-buffer.js +93 -0
- package/dist/cjs/utils/categorizer.js +46 -0
- package/dist/cjs/utils/clone.js +30 -0
- package/dist/cjs/utils/constants.js +380 -0
- package/dist/cjs/utils/cosmetic-rule-separator.js +129 -0
- package/dist/cjs/utils/deep-freeze.js +34 -0
- package/dist/cjs/utils/domain.js +60 -0
- package/dist/cjs/utils/error.js +51 -0
- package/dist/cjs/utils/index.js +69 -0
- package/dist/cjs/utils/input-byte-buffer.js +259 -0
- package/dist/cjs/utils/is-chromium.js +22 -0
- package/dist/cjs/utils/logical-expression.js +94 -0
- package/dist/cjs/utils/multi-value-map.js +35 -0
- package/dist/cjs/utils/output-byte-buffer.js +225 -0
- package/dist/cjs/utils/position-provider.js +75 -0
- package/dist/cjs/utils/quotes.js +218 -0
- package/dist/cjs/utils/regexp.js +190 -0
- package/dist/cjs/utils/string.js +560 -0
- package/dist/cjs/utils/text-decoder-polyfill.js +109 -0
- package/dist/cjs/utils/text-encoder-polyfill.js +80 -0
- package/dist/cjs/utils/type-guards.js +52 -0
- package/dist/cjs/validator/constants.js +222 -0
- package/dist/cjs/validator/helpers.js +49 -0
- package/dist/cjs/validator/index.js +176 -0
- package/dist/cjs/validator/value.js +565 -0
- package/dist/cjs/version.js +20 -0
- package/dist/esm/ast-utils/clone.mjs +61 -0
- package/dist/esm/ast-utils/modifiers.mjs +53 -0
- package/dist/esm/ast-utils/network-rules.mjs +41 -0
- package/dist/esm/ast-utils/scriptlets.mjs +87 -0
- package/dist/esm/common/abp-snippet-injection-body-common.mjs +16 -0
- package/dist/esm/common/agent-common.mjs +56 -0
- package/dist/esm/common/ubo-selector-common.mjs +18 -0
- package/dist/esm/compatibility-tables/base.mjs +262 -0
- package/dist/esm/compatibility-tables/compatibility-table-data.mjs +11 -0
- package/dist/esm/compatibility-tables/modifiers.mjs +55 -0
- package/dist/esm/compatibility-tables/platforms.mjs +58 -0
- package/dist/esm/compatibility-tables/redirects.mjs +100 -0
- package/dist/esm/compatibility-tables/schemas/base.mjs +111 -0
- package/dist/esm/compatibility-tables/schemas/modifier.mjs +105 -0
- package/dist/esm/compatibility-tables/schemas/platform.mjs +69 -0
- package/dist/esm/compatibility-tables/schemas/redirect.mjs +29 -0
- package/dist/esm/compatibility-tables/schemas/resource-type.mjs +37 -0
- package/dist/esm/compatibility-tables/schemas/scriptlet.mjs +79 -0
- package/dist/esm/compatibility-tables/scriptlets.mjs +28 -0
- package/dist/esm/compatibility-tables/utils/platform-helpers.mjs +105 -0
- package/dist/esm/compatibility-tables/utils/resource-type-helpers.mjs +61 -0
- package/dist/esm/compatibility-tables/utils/zod-camelcase.mjs +25 -0
- package/dist/esm/converter/base-interfaces/base-converter.mjs +59 -0
- package/dist/esm/converter/base-interfaces/conversion-result.mjs +38 -0
- package/dist/esm/converter/base-interfaces/rule-converter-base.mjs +60 -0
- package/dist/esm/converter/comment/index.mjs +54 -0
- package/dist/esm/converter/cosmetic/css.mjs +69 -0
- package/dist/esm/converter/cosmetic/element-hiding.mjs +62 -0
- package/dist/esm/converter/cosmetic/header-removal.mjs +123 -0
- package/dist/esm/converter/cosmetic/html.mjs +381 -0
- package/dist/esm/converter/cosmetic/index.mjs +118 -0
- package/dist/esm/converter/cosmetic/rule-modifiers/adg.mjs +79 -0
- package/dist/esm/converter/cosmetic/scriptlet.mjs +354 -0
- package/dist/esm/converter/css/index.mjs +190 -0
- package/dist/esm/converter/data/css.mjs +126 -0
- package/dist/esm/converter/filter-list.mjs +88 -0
- package/dist/esm/converter/index.mjs +8 -0
- package/dist/esm/converter/misc/network-rule-modifier.mjs +311 -0
- package/dist/esm/converter/network/index.mjs +99 -0
- package/dist/esm/converter/raw-filter-list.mjs +56 -0
- package/dist/esm/converter/rule.mjs +81 -0
- package/dist/esm/deserializer/base-deserializer.mjs +29 -0
- package/dist/esm/deserializer/comment/agent-comment-deserializer.mjs +74 -0
- package/dist/esm/deserializer/comment/agent-deserializer.mjs +65 -0
- package/dist/esm/deserializer/comment/comment-rule-deserializer.mjs +107 -0
- package/dist/esm/deserializer/comment/config-comment-deserializer.mjs +111 -0
- package/dist/esm/deserializer/comment/hint-comment-deserializer.mjs +67 -0
- package/dist/esm/deserializer/comment/hint-deserializer.mjs +85 -0
- package/dist/esm/deserializer/comment/metadata-comment-deserializer.mjs +69 -0
- package/dist/esm/deserializer/comment/pre-processor-comment-deserializer.mjs +112 -0
- package/dist/esm/deserializer/comment/simple-comment-deserializer.mjs +65 -0
- package/dist/esm/deserializer/cosmetic/cosmetic-rule-deserializer.mjs +125 -0
- package/dist/esm/deserializer/cosmetic/css-injection-body-deserializer.mjs +53 -0
- package/dist/esm/deserializer/cosmetic/element-hiding-body-deserializer.mjs +44 -0
- package/dist/esm/deserializer/cosmetic/scriptlet-body/abp-snippet-injection-body-deserializer.mjs +35 -0
- package/dist/esm/deserializer/cosmetic/scriptlet-body/adg-scriptlet-injection-body-deserializer.mjs +35 -0
- package/dist/esm/deserializer/cosmetic/scriptlet-body/scriptlet-body-deserializer.mjs +50 -0
- package/dist/esm/deserializer/cosmetic/scriptlet-body/ubo-scriptlet-injection-body-deserializer.mjs +35 -0
- package/dist/esm/deserializer/empty-rule-deserializer.mjs +44 -0
- package/dist/esm/deserializer/filterlist-deserializer.mjs +81 -0
- package/dist/esm/deserializer/index.mjs +8 -0
- package/dist/esm/deserializer/invalid-rule-deserializer.mjs +46 -0
- package/dist/esm/deserializer/invalid-rule-error-node-deserializer.mjs +46 -0
- package/dist/esm/deserializer/misc/domain-list-deserializer.mjs +64 -0
- package/dist/esm/deserializer/misc/list-item-deserializer.mjs +63 -0
- package/dist/esm/deserializer/misc/list-items-deserializer.mjs +26 -0
- package/dist/esm/deserializer/misc/logical-expression-deserializer.mjs +196 -0
- package/dist/esm/deserializer/misc/modifier-deserializer.mjs +87 -0
- package/dist/esm/deserializer/misc/modifier-list-deserializer.mjs +56 -0
- package/dist/esm/deserializer/misc/parameter-list-deserializer.mjs +60 -0
- package/dist/esm/deserializer/misc/value-deserializer.mjs +50 -0
- package/dist/esm/deserializer/network/host-rule-deserializer.mjs +79 -0
- package/dist/esm/deserializer/network/hostname-list-deserializer.mjs +48 -0
- package/dist/esm/deserializer/network/network-rule-deserializer.mjs +65 -0
- package/dist/esm/deserializer/rule-deserializer.mjs +65 -0
- package/dist/esm/deserializer/syntax-deserialization-map.mjs +21 -0
- package/dist/esm/errors/adblock-syntax-error.mjs +39 -0
- package/dist/esm/errors/binary-schema-mismatch-error.mjs +37 -0
- package/dist/esm/errors/not-implemented-error.mjs +31 -0
- package/dist/esm/errors/rule-conversion-error.mjs +26 -0
- package/dist/esm/generator/base-generator.mjs +27 -0
- package/dist/esm/generator/comment/agent-comment-generator.mjs +28 -0
- package/dist/esm/generator/comment/agent-generator.mjs +32 -0
- package/dist/esm/generator/comment/comment-rule-generator.mjs +100 -0
- package/dist/esm/generator/comment/config-comment-generator.mjs +42 -0
- package/dist/esm/generator/comment/hint-comment-generator.mjs +25 -0
- package/dist/esm/generator/comment/hint-generator.mjs +30 -0
- package/dist/esm/generator/comment/metadata-comment-generator.mjs +30 -0
- package/dist/esm/generator/comment/pre-processor-comment-generator.mjs +45 -0
- package/dist/esm/generator/comment/simple-comment-generator.mjs +26 -0
- package/dist/esm/generator/cosmetic/body/abp-snippet-injection-body-generator.mjs +34 -0
- package/dist/esm/generator/cosmetic/body/adg-scriptlet-injection-body-generator.mjs +39 -0
- package/dist/esm/generator/cosmetic/body/ubo-scriptlet-injection-body-generator.mjs +41 -0
- package/dist/esm/generator/cosmetic/cosmetic-rule-body-generator.mjs +90 -0
- package/dist/esm/generator/cosmetic/cosmetic-rule-generator.mjs +64 -0
- package/dist/esm/generator/cosmetic/cosmetic-rule-pattern-generator.mjs +39 -0
- package/dist/esm/generator/css/adg-css-injection-generator.mjs +39 -0
- package/dist/esm/generator/filterlist-generator.mjs +55 -0
- package/dist/esm/generator/index.mjs +9 -0
- package/dist/esm/generator/misc/domain-list-generator.mjs +23 -0
- package/dist/esm/generator/misc/list-items-generator.mjs +36 -0
- package/dist/esm/generator/misc/logical-expression-generator.mjs +45 -0
- package/dist/esm/generator/misc/modifier-generator.mjs +31 -0
- package/dist/esm/generator/misc/modifier-list-generator.mjs +26 -0
- package/dist/esm/generator/misc/parameter-list-generator.mjs +39 -0
- package/dist/esm/generator/misc/value-generator.mjs +21 -0
- package/dist/esm/generator/network/host-rule-generator.mjs +36 -0
- package/dist/esm/generator/network/network-rule-generator.mjs +35 -0
- package/dist/esm/generator/rule-generator.mjs +62 -0
- package/dist/esm/index.mjs +70 -0
- package/dist/esm/marshalling-utils/comment/agent-comment-common.mjs +22 -0
- package/dist/esm/marshalling-utils/comment/agent-common.mjs +41 -0
- package/dist/esm/marshalling-utils/comment/config-comment-common.mjs +56 -0
- package/dist/esm/marshalling-utils/comment/hint-comment-common.mjs +23 -0
- package/dist/esm/marshalling-utils/comment/hint-common.mjs +57 -0
- package/dist/esm/marshalling-utils/comment/metadata-comment-common.mjs +42 -0
- package/dist/esm/marshalling-utils/comment/pre-processor-comment-common.mjs +60 -0
- package/dist/esm/marshalling-utils/comment/simple-comment-common.mjs +23 -0
- package/dist/esm/marshalling-utils/cosmetic/body/abp-snippet-injection-body-common.mjs +62 -0
- package/dist/esm/marshalling-utils/cosmetic/body/adg-scriptlet-injection-body-common.mjs +66 -0
- package/dist/esm/marshalling-utils/cosmetic/body/css-injection-body-common.mjs +25 -0
- package/dist/esm/marshalling-utils/cosmetic/body/element-hiding-body-common.mjs +22 -0
- package/dist/esm/marshalling-utils/cosmetic/body/ubo-scriptlet-injection-body-common.mjs +114 -0
- package/dist/esm/marshalling-utils/cosmetic/cosmetic-rule-common.mjs +49 -0
- package/dist/esm/marshalling-utils/empty-rule-common.mjs +21 -0
- package/dist/esm/marshalling-utils/filter-list-common.mjs +22 -0
- package/dist/esm/marshalling-utils/invalid-rule-common.mjs +22 -0
- package/dist/esm/marshalling-utils/invalid-rule-error-node-common.mjs +23 -0
- package/dist/esm/marshalling-utils/misc/binary-type-common.mjs +67 -0
- package/dist/esm/marshalling-utils/misc/domain-list-common.mjs +37 -0
- package/dist/esm/marshalling-utils/misc/host-rule-common.mjs +26 -0
- package/dist/esm/marshalling-utils/misc/hostname-list-common.mjs +22 -0
- package/dist/esm/marshalling-utils/misc/list-item-common.mjs +23 -0
- package/dist/esm/marshalling-utils/misc/logical-expression-common.mjs +86 -0
- package/dist/esm/marshalling-utils/misc/modifier-common.mjs +232 -0
- package/dist/esm/marshalling-utils/misc/modifier-list-common.mjs +22 -0
- package/dist/esm/marshalling-utils/misc/parameter-list-common.mjs +22 -0
- package/dist/esm/marshalling-utils/misc/value-common.mjs +23 -0
- package/dist/esm/marshalling-utils/network/network-rule-common.mjs +26 -0
- package/dist/esm/marshalling-utils/syntax-serialization-map.mjs +30 -0
- package/dist/esm/nodes/index.mjs +180 -0
- package/dist/esm/package.json.mjs +9 -0
- package/dist/esm/parser/base-parser.mjs +30 -0
- package/dist/esm/parser/comment/agent-comment-parser.mjs +119 -0
- package/dist/esm/parser/comment/agent-parser.mjs +109 -0
- package/dist/esm/parser/comment/comment-parser.mjs +108 -0
- package/dist/esm/parser/comment/config-comment-parser.mjs +137 -0
- package/dist/esm/parser/comment/hint-comment-parser.mjs +117 -0
- package/dist/esm/parser/comment/hint-parser.mjs +129 -0
- package/dist/esm/parser/comment/metadata-comment-parser.mjs +129 -0
- package/dist/esm/parser/comment/preprocessor-parser.mjs +199 -0
- package/dist/esm/parser/comment/simple-comment-parser.mjs +106 -0
- package/dist/esm/parser/cosmetic/body/abp-snippet-injection-body-parser.mjs +79 -0
- package/dist/esm/parser/cosmetic/body/adg-scriptlet-injection-body-parser.mjs +149 -0
- package/dist/esm/parser/cosmetic/body/ubo-scriptlet-injection-body-parser.mjs +110 -0
- package/dist/esm/parser/cosmetic/cosmetic-rule-parser.mjs +453 -0
- package/dist/esm/parser/css/adg-css-injection-parser.mjs +208 -0
- package/dist/esm/parser/css/balancing.mjs +94 -0
- package/dist/esm/parser/css/constants.mjs +18 -0
- package/dist/esm/parser/css/css-token-stream.mjs +343 -0
- package/dist/esm/parser/css/ubo-selector-parser.mjs +369 -0
- package/dist/esm/parser/filterlist-parser.mjs +102 -0
- package/dist/esm/parser/index.mjs +11 -0
- package/dist/esm/parser/misc/app-list-parser.mjs +45 -0
- package/dist/esm/parser/misc/domain-list-parser.mjs +52 -0
- package/dist/esm/parser/misc/list-items-parser.mjs +113 -0
- package/dist/esm/parser/misc/logical-expression-parser.mjs +281 -0
- package/dist/esm/parser/misc/method-list-parser.mjs +46 -0
- package/dist/esm/parser/misc/modifier-list.mjs +70 -0
- package/dist/esm/parser/misc/modifier-parser.mjs +89 -0
- package/dist/esm/parser/misc/parameter-list-parser.mjs +72 -0
- package/dist/esm/parser/misc/stealth-option-list-parser.mjs +46 -0
- package/dist/esm/parser/misc/ubo-parameter-list-parser.mjs +146 -0
- package/dist/esm/parser/misc/value-parser.mjs +37 -0
- package/dist/esm/parser/network/host-rule-parser.mjs +130 -0
- package/dist/esm/parser/network/network-rule-parser.mjs +111 -0
- package/dist/esm/parser/options.mjs +23 -0
- package/dist/esm/parser/rule-parser.mjs +192 -0
- package/dist/esm/serializer/base-serializer.mjs +29 -0
- package/dist/esm/serializer/comment/agent-comment-serializer.mjs +71 -0
- package/dist/esm/serializer/comment/agent-serializer.mjs +68 -0
- package/dist/esm/serializer/comment/comment-rule-serializer.mjs +105 -0
- package/dist/esm/serializer/comment/config-comment-serializer.mjs +82 -0
- package/dist/esm/serializer/comment/hint-comment-serializer.mjs +62 -0
- package/dist/esm/serializer/comment/hint-serializer.mjs +54 -0
- package/dist/esm/serializer/comment/metadata-comment-serializer.mjs +73 -0
- package/dist/esm/serializer/comment/pre-processor-comment-serializer.mjs +71 -0
- package/dist/esm/serializer/comment/simple-comment-serializer.mjs +52 -0
- package/dist/esm/serializer/cosmetic/body/abp-snippet-injection-body-serializer.mjs +36 -0
- package/dist/esm/serializer/cosmetic/body/adg-scriptlet-injection-body-serializer.mjs +36 -0
- package/dist/esm/serializer/cosmetic/body/scriptlet-body-serializer.mjs +47 -0
- package/dist/esm/serializer/cosmetic/body/ubo-scriptlet-injection-body-serializer.mjs +36 -0
- package/dist/esm/serializer/cosmetic/cosmetic-rule-serializer.mjs +129 -0
- package/dist/esm/serializer/cosmetic/css-injection-body-serializer.mjs +48 -0
- package/dist/esm/serializer/cosmetic/element-hiding-body-serializer.mjs +37 -0
- package/dist/esm/serializer/empty-rule-serializer.mjs +34 -0
- package/dist/esm/serializer/filterlist-serializer.mjs +46 -0
- package/dist/esm/serializer/index.mjs +7 -0
- package/dist/esm/serializer/invalid-rule-error-node-serializer.mjs +38 -0
- package/dist/esm/serializer/invalid-rule-serializer.mjs +37 -0
- package/dist/esm/serializer/misc/domain-list-serializer.mjs +64 -0
- package/dist/esm/serializer/misc/list-item-serializer.mjs +55 -0
- package/dist/esm/serializer/misc/list-items-serializer.mjs +26 -0
- package/dist/esm/serializer/misc/logical-expression-serializer.mjs +136 -0
- package/dist/esm/serializer/misc/modifier-list-serializer.mjs +55 -0
- package/dist/esm/serializer/misc/modifier-serializer.mjs +49 -0
- package/dist/esm/serializer/misc/parameter-list-serializer.mjs +49 -0
- package/dist/esm/serializer/misc/value-serializer.mjs +50 -0
- package/dist/esm/serializer/network/host-rule-serializer.mjs +70 -0
- package/dist/esm/serializer/network/hostname-list-serializer.mjs +47 -0
- package/dist/esm/serializer/network/network-rule-serializer.mjs +54 -0
- package/dist/esm/serializer/rule-serializer.mjs +61 -0
- package/dist/esm/utils/adblockers.mjs +57 -0
- package/dist/esm/utils/binary-schema-version.mjs +17 -0
- package/dist/esm/utils/byte-buffer.mjs +91 -0
- package/dist/esm/utils/categorizer.mjs +44 -0
- package/dist/esm/utils/clone.mjs +28 -0
- package/dist/esm/utils/constants.mjs +249 -0
- package/dist/esm/utils/cosmetic-rule-separator.mjs +127 -0
- package/dist/esm/utils/deep-freeze.mjs +32 -0
- package/dist/esm/utils/domain.mjs +56 -0
- package/dist/esm/utils/error.mjs +49 -0
- package/dist/esm/utils/index.mjs +21 -0
- package/dist/esm/utils/input-byte-buffer.mjs +257 -0
- package/dist/esm/utils/is-chromium.mjs +20 -0
- package/dist/esm/utils/logical-expression.mjs +92 -0
- package/dist/esm/utils/multi-value-map.mjs +33 -0
- package/dist/esm/utils/output-byte-buffer.mjs +223 -0
- package/dist/esm/utils/position-provider.mjs +73 -0
- package/dist/esm/utils/quotes.mjs +215 -0
- package/dist/esm/utils/regexp.mjs +176 -0
- package/dist/esm/utils/string.mjs +556 -0
- package/dist/esm/utils/text-decoder-polyfill.mjs +107 -0
- package/dist/esm/utils/text-encoder-polyfill.mjs +78 -0
- package/dist/esm/utils/type-guards.mjs +47 -0
- package/dist/esm/validator/constants.mjs +210 -0
- package/dist/esm/validator/helpers.mjs +45 -0
- package/dist/esm/validator/index.mjs +174 -0
- package/dist/esm/validator/value.mjs +563 -0
- package/dist/esm/version.mjs +18 -0
- package/dist/types/ast-utils/clone.d.ts +26 -0
- package/dist/types/ast-utils/filter-list.d.ts +11 -0
- package/dist/types/ast-utils/modifiers.d.ts +20 -0
- package/dist/types/ast-utils/network-rules.d.ts +15 -0
- package/dist/types/ast-utils/scriptlets.d.ts +52 -0
- package/dist/types/common/abp-snippet-injection-body-common.d.ts +8 -0
- package/dist/types/common/agent-common.d.ts +10 -0
- package/dist/types/common/ubo-selector-common.d.ts +9 -0
- package/dist/types/compatibility-tables/base.d.ts +157 -0
- package/dist/types/compatibility-tables/compatibility-table-data.d.ts +67 -0
- package/dist/types/compatibility-tables/index.d.ts +13 -0
- package/dist/types/compatibility-tables/modifiers.d.ts +22 -0
- package/dist/types/compatibility-tables/platforms.d.ts +47 -0
- package/dist/types/compatibility-tables/redirects.d.ts +33 -0
- package/dist/types/compatibility-tables/schemas/base.d.ts +135 -0
- package/dist/types/compatibility-tables/schemas/index.d.ts +8 -0
- package/dist/types/compatibility-tables/schemas/modifier.d.ts +31 -0
- package/dist/types/compatibility-tables/schemas/platform.d.ts +16 -0
- package/dist/types/compatibility-tables/schemas/redirect.d.ts +25 -0
- package/dist/types/compatibility-tables/schemas/resource-type.d.ts +27 -0
- package/dist/types/compatibility-tables/schemas/scriptlet.d.ts +31 -0
- package/dist/types/compatibility-tables/scriptlets.d.ts +15 -0
- package/dist/types/compatibility-tables/types.d.ts +34 -0
- package/dist/types/compatibility-tables/utils/platform-helpers.d.ts +44 -0
- package/dist/types/compatibility-tables/utils/resource-type-helpers.d.ts +20 -0
- package/dist/types/compatibility-tables/utils/zod-camelcase.d.ts +15 -0
- package/dist/types/converter/base-interfaces/base-converter.d.ts +42 -0
- package/dist/types/converter/base-interfaces/conversion-result.d.ts +43 -0
- package/dist/types/converter/base-interfaces/rule-converter-base.d.ts +44 -0
- package/dist/types/converter/comment/index.d.ts +23 -0
- package/dist/types/converter/cosmetic/css.d.ts +23 -0
- package/dist/types/converter/cosmetic/element-hiding.d.ts +23 -0
- package/dist/types/converter/cosmetic/header-removal.d.ts +37 -0
- package/dist/types/converter/cosmetic/html.d.ts +54 -0
- package/dist/types/converter/cosmetic/index.d.ts +33 -0
- package/dist/types/converter/cosmetic/rule-modifiers/adg.d.ts +21 -0
- package/dist/types/converter/cosmetic/scriptlet.d.ts +33 -0
- package/dist/types/converter/css/index.d.ts +23 -0
- package/dist/types/converter/data/css.d.ts +48 -0
- package/dist/types/converter/filter-list.d.ts +31 -0
- package/dist/types/converter/index.d.ts +5 -0
- package/dist/types/converter/misc/network-rule-modifier.d.ts +35 -0
- package/dist/types/converter/network/index.d.ts +33 -0
- package/dist/types/converter/raw-filter-list.d.ts +31 -0
- package/dist/types/converter/raw-rule.d.ts +28 -0
- package/dist/types/converter/rule.d.ts +37 -0
- package/dist/types/deserializer/base-deserializer.d.ts +15 -0
- package/dist/types/deserializer/comment/agent-comment-deserializer.d.ts +34 -0
- package/dist/types/deserializer/comment/agent-deserializer.d.ts +25 -0
- package/dist/types/deserializer/comment/comment-rule-deserializer.d.ts +69 -0
- package/dist/types/deserializer/comment/config-comment-deserializer.d.ts +27 -0
- package/dist/types/deserializer/comment/hint-comment-deserializer.d.ts +24 -0
- package/dist/types/deserializer/comment/hint-deserializer.d.ts +26 -0
- package/dist/types/deserializer/comment/metadata-comment-deserializer.d.ts +26 -0
- package/dist/types/deserializer/comment/pre-processor-comment-deserializer.d.ts +29 -0
- package/dist/types/deserializer/comment/simple-comment-deserializer.d.ts +26 -0
- package/dist/types/deserializer/cosmetic/cosmetic-rule-deserializer.d.ts +12 -0
- package/dist/types/deserializer/cosmetic/css-injection-body-deserializer.d.ts +12 -0
- package/dist/types/deserializer/cosmetic/element-hiding-body-deserializer.d.ts +12 -0
- package/dist/types/deserializer/cosmetic/scriptlet-body/abp-snippet-injection-body-deserializer.d.ts +13 -0
- package/dist/types/deserializer/cosmetic/scriptlet-body/adg-scriptlet-injection-body-deserializer.d.ts +13 -0
- package/dist/types/deserializer/cosmetic/scriptlet-body/scriptlet-body-deserializer.d.ts +15 -0
- package/dist/types/deserializer/cosmetic/scriptlet-body/ubo-scriptlet-injection-body-deserializer.d.ts +14 -0
- package/dist/types/deserializer/empty-rule-deserializer.d.ts +12 -0
- package/dist/types/deserializer/filterlist-deserializer.d.ts +30 -0
- package/dist/types/deserializer/index.d.ts +2 -0
- package/dist/types/deserializer/invalid-rule-deserializer.d.ts +12 -0
- package/dist/types/deserializer/invalid-rule-error-node-deserializer.d.ts +12 -0
- package/dist/types/deserializer/misc/domain-list-deserializer.d.ts +15 -0
- package/dist/types/deserializer/misc/list-item-deserializer.d.ts +13 -0
- package/dist/types/deserializer/misc/list-items-deserializer.d.ts +12 -0
- package/dist/types/deserializer/misc/logical-expression-deserializer.d.ts +55 -0
- package/dist/types/deserializer/misc/modifier-deserializer.d.ts +18 -0
- package/dist/types/deserializer/misc/modifier-list-deserializer.d.ts +20 -0
- package/dist/types/deserializer/misc/parameter-list-deserializer.d.ts +14 -0
- package/dist/types/deserializer/misc/value-deserializer.d.ts +17 -0
- package/dist/types/deserializer/network/host-rule-deserializer.d.ts +30 -0
- package/dist/types/deserializer/network/hostname-list-deserializer.d.ts +12 -0
- package/dist/types/deserializer/network/network-rule-deserializer.d.ts +18 -0
- package/dist/types/deserializer/rule-deserializer.d.ts +17 -0
- package/dist/types/deserializer/syntax-deserialization-map.d.ts +2 -0
- package/dist/types/errors/adblock-syntax-error.d.ts +25 -0
- package/dist/types/errors/binary-schema-mismatch-error.d.ts +23 -0
- package/dist/types/errors/not-implemented-error.d.ts +14 -0
- package/dist/types/errors/rule-conversion-error.d.ts +14 -0
- package/dist/types/generator/base-generator.d.ts +12 -0
- package/dist/types/generator/comment/agent-comment-generator.d.ts +11 -0
- package/dist/types/generator/comment/agent-generator.d.ts +11 -0
- package/dist/types/generator/comment/comment-rule-generator.d.ts +67 -0
- package/dist/types/generator/comment/config-comment-generator.d.ts +11 -0
- package/dist/types/generator/comment/hint-comment-generator.d.ts +11 -0
- package/dist/types/generator/comment/hint-generator.d.ts +11 -0
- package/dist/types/generator/comment/index.d.ts +2 -0
- package/dist/types/generator/comment/metadata-comment-generator.d.ts +11 -0
- package/dist/types/generator/comment/pre-processor-comment-generator.d.ts +11 -0
- package/dist/types/generator/comment/simple-comment-generator.d.ts +11 -0
- package/dist/types/generator/cosmetic/body/abp-snippet-injection-body-generator.d.ts +11 -0
- package/dist/types/generator/cosmetic/body/adg-scriptlet-injection-body-generator.d.ts +17 -0
- package/dist/types/generator/cosmetic/body/ubo-scriptlet-injection-body-generator.d.ts +17 -0
- package/dist/types/generator/cosmetic/cosmetic-rule-body-generator.d.ts +15 -0
- package/dist/types/generator/cosmetic/cosmetic-rule-generator.d.ts +36 -0
- package/dist/types/generator/cosmetic/cosmetic-rule-pattern-generator.d.ts +15 -0
- package/dist/types/generator/cosmetic/index.d.ts +1 -0
- package/dist/types/generator/css/adg-css-injection-generator.d.ts +12 -0
- package/dist/types/generator/css/ubo-selector-generator.d.ts +11 -0
- package/dist/types/generator/filterlist-generator.d.ts +17 -0
- package/dist/types/generator/index.d.ts +3 -0
- package/dist/types/generator/misc/domain-list-generator.d.ts +12 -0
- package/dist/types/generator/misc/list-items-generator.d.ts +22 -0
- package/dist/types/generator/misc/logical-expression-generator.d.ts +11 -0
- package/dist/types/generator/misc/modifier-generator.d.ts +11 -0
- package/dist/types/generator/misc/modifier-list-generator.d.ts +11 -0
- package/dist/types/generator/misc/parameter-list-generator.d.ts +12 -0
- package/dist/types/generator/misc/value-generator.d.ts +11 -0
- package/dist/types/generator/network/host-rule-generator.d.ts +11 -0
- package/dist/types/generator/network/index.d.ts +2 -0
- package/dist/types/generator/network/network-rule-generator.d.ts +11 -0
- package/dist/types/generator/rule-generator.d.ts +21 -0
- package/dist/types/index.d.ts +55 -0
- package/dist/types/marshalling-utils/comment/agent-comment-common.d.ts +13 -0
- package/dist/types/marshalling-utils/comment/agent-common.d.ts +19 -0
- package/dist/types/marshalling-utils/comment/config-comment-common.d.ts +40 -0
- package/dist/types/marshalling-utils/comment/hint-comment-common.d.ts +14 -0
- package/dist/types/marshalling-utils/comment/hint-common.d.ts +32 -0
- package/dist/types/marshalling-utils/comment/metadata-comment-common.d.ts +20 -0
- package/dist/types/marshalling-utils/comment/pre-processor-comment-common.d.ts +36 -0
- package/dist/types/marshalling-utils/comment/simple-comment-common.d.ts +14 -0
- package/dist/types/marshalling-utils/cosmetic/body/abp-snippet-injection-body-common.d.ts +22 -0
- package/dist/types/marshalling-utils/cosmetic/body/adg-scriptlet-injection-body-common.d.ts +9 -0
- package/dist/types/marshalling-utils/cosmetic/body/css-injection-body-common.d.ts +16 -0
- package/dist/types/marshalling-utils/cosmetic/body/element-hiding-body-common.d.ts +13 -0
- package/dist/types/marshalling-utils/cosmetic/body/ubo-scriptlet-injection-body-common.d.ts +9 -0
- package/dist/types/marshalling-utils/cosmetic/cosmetic-rule-common.d.ts +27 -0
- package/dist/types/marshalling-utils/empty-rule-common.d.ts +12 -0
- package/dist/types/marshalling-utils/filter-list-common.d.ts +13 -0
- package/dist/types/marshalling-utils/invalid-rule-common.d.ts +13 -0
- package/dist/types/marshalling-utils/invalid-rule-error-node-common.d.ts +14 -0
- package/dist/types/marshalling-utils/misc/binary-type-common.d.ts +56 -0
- package/dist/types/marshalling-utils/misc/domain-list-common.d.ts +23 -0
- package/dist/types/marshalling-utils/misc/host-rule-common.d.ts +17 -0
- package/dist/types/marshalling-utils/misc/hostname-list-common.d.ts +13 -0
- package/dist/types/marshalling-utils/misc/list-item-common.d.ts +14 -0
- package/dist/types/marshalling-utils/misc/logical-expression-common.d.ts +44 -0
- package/dist/types/marshalling-utils/misc/modifier-common.d.ts +40 -0
- package/dist/types/marshalling-utils/misc/modifier-list-common.d.ts +13 -0
- package/dist/types/marshalling-utils/misc/parameter-list-common.d.ts +13 -0
- package/dist/types/marshalling-utils/misc/value-common.d.ts +14 -0
- package/dist/types/marshalling-utils/network/network-rule-common.d.ts +17 -0
- package/dist/types/marshalling-utils/syntax-serialization-map.d.ts +2 -0
- package/dist/types/nodes/index.d.ts +1177 -0
- package/dist/types/parser/base-parser.d.ts +16 -0
- package/dist/types/parser/comment/agent-comment-parser.d.ts +42 -0
- package/dist/types/parser/comment/agent-parser.d.ts +33 -0
- package/dist/types/parser/comment/comment-parser.d.ts +76 -0
- package/dist/types/parser/comment/config-comment-parser.d.ts +31 -0
- package/dist/types/parser/comment/hint-comment-parser.d.ts +33 -0
- package/dist/types/parser/comment/hint-parser.d.ts +30 -0
- package/dist/types/parser/comment/metadata-comment-parser.d.ts +29 -0
- package/dist/types/parser/comment/preprocessor-parser.d.ts +43 -0
- package/dist/types/parser/comment/simple-comment-parser.d.ts +33 -0
- package/dist/types/parser/cosmetic/body/abp-snippet-injection-body-parser.d.ts +34 -0
- package/dist/types/parser/cosmetic/body/adg-scriptlet-injection-body-parser.d.ts +47 -0
- package/dist/types/parser/cosmetic/body/ubo-scriptlet-injection-body-parser.d.ts +44 -0
- package/dist/types/parser/cosmetic/cosmetic-rule-parser.d.ts +51 -0
- package/dist/types/parser/css/adg-css-injection-parser.d.ts +28 -0
- package/dist/types/parser/css/balancing.d.ts +36 -0
- package/dist/types/parser/css/constants.d.ts +10 -0
- package/dist/types/parser/css/css-token-stream.d.ts +210 -0
- package/dist/types/parser/css/ubo-selector-parser.d.ts +46 -0
- package/dist/types/parser/filterlist-parser.d.ts +29 -0
- package/dist/types/parser/index.d.ts +5 -0
- package/dist/types/parser/misc/app-list-parser.d.ts +22 -0
- package/dist/types/parser/misc/domain-list-parser.d.ts +26 -0
- package/dist/types/parser/misc/list-items-parser.d.ts +34 -0
- package/dist/types/parser/misc/logical-expression-parser.d.ts +41 -0
- package/dist/types/parser/misc/method-list-parser.d.ts +22 -0
- package/dist/types/parser/misc/modifier-list.d.ts +24 -0
- package/dist/types/parser/misc/modifier-parser.d.ts +21 -0
- package/dist/types/parser/misc/parameter-list-parser.d.ts +14 -0
- package/dist/types/parser/misc/stealth-option-list-parser.d.ts +22 -0
- package/dist/types/parser/misc/ubo-parameter-list-parser.d.ts +18 -0
- package/dist/types/parser/misc/value-parser.d.ts +18 -0
- package/dist/types/parser/network/host-rule-parser.d.ts +35 -0
- package/dist/types/parser/network/network-rule-parser.d.ts +31 -0
- package/dist/types/parser/options.d.ts +41 -0
- package/dist/types/parser/rule-parser.d.ts +78 -0
- package/dist/types/serializer/base-serializer.d.ts +15 -0
- package/dist/types/serializer/comment/agent-comment-serializer.d.ts +34 -0
- package/dist/types/serializer/comment/agent-serializer.d.ts +24 -0
- package/dist/types/serializer/comment/comment-rule-serializer.d.ts +68 -0
- package/dist/types/serializer/comment/config-comment-serializer.d.ts +25 -0
- package/dist/types/serializer/comment/hint-comment-serializer.d.ts +23 -0
- package/dist/types/serializer/comment/hint-serializer.d.ts +24 -0
- package/dist/types/serializer/comment/metadata-comment-serializer.d.ts +25 -0
- package/dist/types/serializer/comment/pre-processor-comment-serializer.d.ts +28 -0
- package/dist/types/serializer/comment/simple-comment-serializer.d.ts +24 -0
- package/dist/types/serializer/cosmetic/body/abp-snippet-injection-body-serializer.d.ts +25 -0
- package/dist/types/serializer/cosmetic/body/adg-scriptlet-injection-body-serializer.d.ts +25 -0
- package/dist/types/serializer/cosmetic/body/scriptlet-body-serializer.d.ts +14 -0
- package/dist/types/serializer/cosmetic/body/ubo-scriptlet-injection-body-serializer.d.ts +25 -0
- package/dist/types/serializer/cosmetic/cosmetic-rule-serializer.d.ts +26 -0
- package/dist/types/serializer/cosmetic/css-injection-body-serializer.d.ts +12 -0
- package/dist/types/serializer/cosmetic/element-hiding-body-serializer.d.ts +12 -0
- package/dist/types/serializer/empty-rule-serializer.d.ts +12 -0
- package/dist/types/serializer/filterlist-serializer.d.ts +16 -0
- package/dist/types/serializer/index.d.ts +1 -0
- package/dist/types/serializer/invalid-rule-error-node-serializer.d.ts +12 -0
- package/dist/types/serializer/invalid-rule-serializer.d.ts +12 -0
- package/dist/types/serializer/misc/domain-list-serializer.d.ts +21 -0
- package/dist/types/serializer/misc/list-item-serializer.d.ts +13 -0
- package/dist/types/serializer/misc/list-items-serializer.d.ts +12 -0
- package/dist/types/serializer/misc/logical-expression-serializer.d.ts +51 -0
- package/dist/types/serializer/misc/modifier-list-serializer.d.ts +20 -0
- package/dist/types/serializer/misc/modifier-serializer.d.ts +18 -0
- package/dist/types/serializer/misc/parameter-list-serializer.d.ts +14 -0
- package/dist/types/serializer/misc/value-serializer.d.ts +17 -0
- package/dist/types/serializer/network/host-rule-serializer.d.ts +30 -0
- package/dist/types/serializer/network/hostname-list-serializer.d.ts +12 -0
- package/dist/types/serializer/network/network-rule-serializer.d.ts +18 -0
- package/dist/types/serializer/rule-serializer.d.ts +17 -0
- package/dist/types/utils/adblockers.d.ts +48 -0
- package/dist/types/utils/binary-schema-version.d.ts +9 -0
- package/dist/types/utils/byte-buffer.d.ts +54 -0
- package/dist/types/utils/categorizer.d.ts +14 -0
- package/dist/types/utils/clone.d.ts +15 -0
- package/dist/types/utils/constants.d.ts +188 -0
- package/dist/types/utils/cosmetic-rule-separator.d.ts +45 -0
- package/dist/types/utils/deep-freeze.d.ts +13 -0
- package/dist/types/utils/domain.d.ts +26 -0
- package/dist/types/utils/error.d.ts +8 -0
- package/dist/types/utils/index.d.ts +15 -0
- package/dist/types/utils/input-byte-buffer.d.ts +140 -0
- package/dist/types/utils/is-chromium.d.ts +7 -0
- package/dist/types/utils/logical-expression.d.ts +45 -0
- package/dist/types/utils/multi-value-map.d.ts +16 -0
- package/dist/types/utils/output-byte-buffer.d.ts +126 -0
- package/dist/types/utils/position-provider.d.ts +46 -0
- package/dist/types/utils/quotes.d.ts +93 -0
- package/dist/types/utils/regexp.d.ts +54 -0
- package/dist/types/utils/storage-interface.d.ts +23 -0
- package/dist/types/utils/string.d.ts +277 -0
- package/dist/types/utils/text-decoder-polyfill.d.ts +14 -0
- package/dist/types/utils/text-encoder-polyfill.d.ts +18 -0
- package/dist/types/utils/type-guards.d.ts +47 -0
- package/dist/types/validator/constants.d.ts +89 -0
- package/dist/types/validator/helpers.d.ts +37 -0
- package/dist/types/validator/index.d.ts +38 -0
- package/dist/types/validator/value.d.ts +11 -0
- package/dist/types/version.d.ts +5 -0
- package/package.json +91 -37
- package/dist/agtree.d.ts +0 -4152
- package/dist/agtree.js +0 -15710
- package/dist/agtree.mjs +0 -15611
- package/dist/compatibility-table-data.js +0 -12634
|
@@ -0,0 +1,126 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* AGTree v3.0.0-alpha.1 (build date: Tue, 12 Nov 2024 16:11:58 GMT)
|
|
3
|
+
* (c) 2024 Adguard Software Ltd.
|
|
4
|
+
* Released under the MIT license
|
|
5
|
+
* https://github.com/AdguardTeam/tsurlfilter/tree/master/packages/agtree#readme
|
|
6
|
+
*/
|
|
7
|
+
'use strict';
|
|
8
|
+
|
|
9
|
+
var cssTokenizer = require('@adguard/css-tokenizer');
|
|
10
|
+
var sprintfJs = require('sprintf-js');
|
|
11
|
+
var ruleConversionError = require('../../errors/rule-conversion-error.js');
|
|
12
|
+
var index = require('../../nodes/index.js');
|
|
13
|
+
var ruleConverterBase = require('../base-interfaces/rule-converter-base.js');
|
|
14
|
+
var modifiers = require('../../ast-utils/modifiers.js');
|
|
15
|
+
var constants = require('../../utils/constants.js');
|
|
16
|
+
var regexp = require('../../utils/regexp.js');
|
|
17
|
+
var networkRules = require('../../ast-utils/network-rules.js');
|
|
18
|
+
var adblockers = require('../../utils/adblockers.js');
|
|
19
|
+
var conversionResult = require('../base-interfaces/conversion-result.js');
|
|
20
|
+
var cssTokenStream = require('../../parser/css/css-token-stream.js');
|
|
21
|
+
|
|
22
|
+
/**
|
|
23
|
+
* @file Converter for request header removal rules
|
|
24
|
+
*/
|
|
25
|
+
const UBO_RESPONSEHEADER_FN = 'responseheader';
|
|
26
|
+
const ADG_REMOVEHEADER_MODIFIER = 'removeheader';
|
|
27
|
+
const ERROR_MESSAGES = {
|
|
28
|
+
EMPTY_PARAMETER: `Empty parameter for '${UBO_RESPONSEHEADER_FN}' function`,
|
|
29
|
+
EXPECTED_END_OF_RULE: "Expected end of rule, but got '%s'",
|
|
30
|
+
MULTIPLE_DOMAINS_NOT_SUPPORTED: 'Multiple domains are not supported yet',
|
|
31
|
+
};
|
|
32
|
+
/**
|
|
33
|
+
* Converter for request header removal rules
|
|
34
|
+
*
|
|
35
|
+
* @todo Implement `convertToUbo` (ABP currently doesn't support header removal rules)
|
|
36
|
+
*/
|
|
37
|
+
class HeaderRemovalRuleConverter extends ruleConverterBase.RuleConverterBase {
|
|
38
|
+
/**
|
|
39
|
+
* Converts a header removal rule to AdGuard syntax, if possible.
|
|
40
|
+
*
|
|
41
|
+
* @param rule Rule node to convert
|
|
42
|
+
* @returns An object which follows the {@link NodeConversionResult} interface. Its `result` property contains
|
|
43
|
+
* the array of converted rule nodes, and its `isConverted` flag indicates whether the original rule was converted.
|
|
44
|
+
* If the rule was not converted, the result array will contain the original node with the same object reference
|
|
45
|
+
* @throws If the rule is invalid or cannot be converted
|
|
46
|
+
* @example
|
|
47
|
+
* If the input rule is:
|
|
48
|
+
* ```adblock
|
|
49
|
+
* example.com##^responseheader(header-name)
|
|
50
|
+
* ```
|
|
51
|
+
* The output will be:
|
|
52
|
+
* ```adblock
|
|
53
|
+
* ||example.com^$removeheader=header-name
|
|
54
|
+
* ```
|
|
55
|
+
*/
|
|
56
|
+
static convertToAdg(rule) {
|
|
57
|
+
// TODO: Add support for ABP syntax once it starts supporting header removal rules
|
|
58
|
+
// Leave the rule as is if it's not a header removal rule
|
|
59
|
+
if (rule.category !== index.RuleCategory.Cosmetic || rule.type !== index.CosmeticRuleType.HtmlFilteringRule) {
|
|
60
|
+
return conversionResult.createNodeConversionResult([rule], false);
|
|
61
|
+
}
|
|
62
|
+
const stream = new cssTokenStream.CssTokenStream(rule.body.value);
|
|
63
|
+
let token;
|
|
64
|
+
// Skip leading whitespace
|
|
65
|
+
stream.skipWhitespace();
|
|
66
|
+
// Next token should be the `^` followed by a `responseheader` function
|
|
67
|
+
token = stream.get();
|
|
68
|
+
if (!token || token.type !== cssTokenizer.TokenType.Delim || rule.body.value[token.start] !== constants.UBO_HTML_MASK) {
|
|
69
|
+
return conversionResult.createNodeConversionResult([rule], false);
|
|
70
|
+
}
|
|
71
|
+
stream.advance();
|
|
72
|
+
token = stream.get();
|
|
73
|
+
if (!token) {
|
|
74
|
+
return conversionResult.createNodeConversionResult([rule], false);
|
|
75
|
+
}
|
|
76
|
+
const functionName = rule.body.value.slice(token.start, token.end - 1);
|
|
77
|
+
if (functionName !== UBO_RESPONSEHEADER_FN) {
|
|
78
|
+
return conversionResult.createNodeConversionResult([rule], false);
|
|
79
|
+
}
|
|
80
|
+
// Parse the parameter
|
|
81
|
+
const paramStart = token.end;
|
|
82
|
+
stream.skipUntilBalanced();
|
|
83
|
+
const paramEnd = stream.getOrFail().end;
|
|
84
|
+
const param = rule.body.value.slice(paramStart, paramEnd - 1).trim();
|
|
85
|
+
// Do not allow empty parameter
|
|
86
|
+
if (param.length === 0) {
|
|
87
|
+
throw new ruleConversionError.RuleConversionError(ERROR_MESSAGES.EMPTY_PARAMETER);
|
|
88
|
+
}
|
|
89
|
+
stream.expect(cssTokenizer.TokenType.CloseParenthesis);
|
|
90
|
+
stream.advance();
|
|
91
|
+
// Skip trailing whitespace after the function call
|
|
92
|
+
stream.skipWhitespace();
|
|
93
|
+
// Expect the end of the rule - so nothing should be left in the stream
|
|
94
|
+
if (!stream.isEof()) {
|
|
95
|
+
token = stream.getOrFail();
|
|
96
|
+
throw new ruleConversionError.RuleConversionError(sprintfJs.sprintf(ERROR_MESSAGES.EXPECTED_END_OF_RULE, cssTokenizer.getFormattedTokenName(token.type)));
|
|
97
|
+
}
|
|
98
|
+
// Prepare network rule pattern
|
|
99
|
+
const pattern = [];
|
|
100
|
+
if (rule.domains.children.length === 1) {
|
|
101
|
+
// If the rule has only one domain, we can use a simple network rule pattern:
|
|
102
|
+
// ||single-domain-from-the-rule^
|
|
103
|
+
pattern.push(regexp.ADBLOCK_URL_START, rule.domains.children[0].value, regexp.ADBLOCK_URL_SEPARATOR);
|
|
104
|
+
}
|
|
105
|
+
else if (rule.domains.children.length > 1) {
|
|
106
|
+
// TODO: Add support for multiple domains, for example:
|
|
107
|
+
// example.com,example.org,example.net##^responseheader(header-name)
|
|
108
|
+
// We should consider allowing $domain with $removeheader modifier,
|
|
109
|
+
// for example:
|
|
110
|
+
// $removeheader=header-name,domain=example.com|example.org|example.net
|
|
111
|
+
throw new ruleConversionError.RuleConversionError(ERROR_MESSAGES.MULTIPLE_DOMAINS_NOT_SUPPORTED);
|
|
112
|
+
}
|
|
113
|
+
// Prepare network rule modifiers
|
|
114
|
+
const modifiers$1 = modifiers.createModifierListNode();
|
|
115
|
+
modifiers$1.children.push(modifiers.createModifierNode(ADG_REMOVEHEADER_MODIFIER, param));
|
|
116
|
+
// Construct the network rule
|
|
117
|
+
return conversionResult.createNodeConversionResult([
|
|
118
|
+
networkRules.createNetworkRuleNode(pattern.join(constants.EMPTY), modifiers$1,
|
|
119
|
+
// Copy the exception flag
|
|
120
|
+
rule.exception, adblockers.AdblockSyntax.Adg),
|
|
121
|
+
], true);
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
|
|
125
|
+
exports.ERROR_MESSAGES = ERROR_MESSAGES;
|
|
126
|
+
exports.HeaderRemovalRuleConverter = HeaderRemovalRuleConverter;
|
|
@@ -0,0 +1,384 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* AGTree v3.0.0-alpha.1 (build date: Tue, 12 Nov 2024 16:11:58 GMT)
|
|
3
|
+
* (c) 2024 Adguard Software Ltd.
|
|
4
|
+
* Released under the MIT license
|
|
5
|
+
* https://github.com/AdguardTeam/tsurlfilter/tree/master/packages/agtree#readme
|
|
6
|
+
*/
|
|
7
|
+
'use strict';
|
|
8
|
+
|
|
9
|
+
var cssTokenizer = require('@adguard/css-tokenizer');
|
|
10
|
+
var sprintfJs = require('sprintf-js');
|
|
11
|
+
var index = require('../../nodes/index.js');
|
|
12
|
+
var adblockers = require('../../utils/adblockers.js');
|
|
13
|
+
var ruleConversionError = require('../../errors/rule-conversion-error.js');
|
|
14
|
+
var ruleConverterBase = require('../base-interfaces/rule-converter-base.js');
|
|
15
|
+
var regexp = require('../../utils/regexp.js');
|
|
16
|
+
var conversionResult = require('../base-interfaces/conversion-result.js');
|
|
17
|
+
var clone = require('../../ast-utils/clone.js');
|
|
18
|
+
var cssTokenStream = require('../../parser/css/css-token-stream.js');
|
|
19
|
+
var constants = require('../../utils/constants.js');
|
|
20
|
+
var string = require('../../utils/string.js');
|
|
21
|
+
|
|
22
|
+
/**
|
|
23
|
+
* @file HTML filtering rule converter
|
|
24
|
+
*/
|
|
25
|
+
/**
|
|
26
|
+
* From the AdGuard docs:
|
|
27
|
+
* Specifies the maximum length for content of HTML element. If this parameter is
|
|
28
|
+
* set and the content length exceeds the value, a rule does not apply to the element.
|
|
29
|
+
* If this parameter is not specified, the max-length is considered to be 8192 (8 KB).
|
|
30
|
+
* When converting from other formats, we set the max-length to 262144 (256 KB).
|
|
31
|
+
*
|
|
32
|
+
* @see {@link https://adguard.com/kb/general/ad-filtering/create-own-filters/#html-filtering-rules}
|
|
33
|
+
*/
|
|
34
|
+
const ADG_HTML_DEFAULT_MAX_LENGTH = 8192;
|
|
35
|
+
const ADG_HTML_CONVERSION_MAX_LENGTH = ADG_HTML_DEFAULT_MAX_LENGTH * 32;
|
|
36
|
+
const NOT_SPECIFIED = -1;
|
|
37
|
+
var PseudoClasses;
|
|
38
|
+
(function (PseudoClasses) {
|
|
39
|
+
PseudoClasses["Contains"] = "contains";
|
|
40
|
+
PseudoClasses["HasText"] = "has-text";
|
|
41
|
+
PseudoClasses["MinTextLength"] = "min-text-length";
|
|
42
|
+
})(PseudoClasses || (PseudoClasses = {}));
|
|
43
|
+
var AttributeSelectors;
|
|
44
|
+
(function (AttributeSelectors) {
|
|
45
|
+
AttributeSelectors["MaxLength"] = "max-length";
|
|
46
|
+
AttributeSelectors["MinLength"] = "min-length";
|
|
47
|
+
AttributeSelectors["TagContent"] = "tag-content";
|
|
48
|
+
AttributeSelectors["Wildcard"] = "wildcard";
|
|
49
|
+
})(AttributeSelectors || (AttributeSelectors = {}));
|
|
50
|
+
const SUPPORTED_UBO_PSEUDO_CLASSES = new Set([
|
|
51
|
+
PseudoClasses.Contains,
|
|
52
|
+
PseudoClasses.HasText,
|
|
53
|
+
PseudoClasses.MinTextLength,
|
|
54
|
+
]);
|
|
55
|
+
const ERROR_MESSAGES = {
|
|
56
|
+
ABP_NOT_SUPPORTED: 'Invalid rule, ABP does not support HTML filtering rules',
|
|
57
|
+
TAG_SHOULD_BE_FIRST_CHILD: "Unexpected token '%s' with value '%s', tag selector should be the first child",
|
|
58
|
+
EXPECTED_BUT_GOT_WITH_VALUE: "Expected '%s', but got '%s' with value '%s'",
|
|
59
|
+
INVALID_ATTRIBUTE_NAME: "Attribute name should be an identifier, but got '%s' with value '%s'",
|
|
60
|
+
// eslint-disable-next-line max-len
|
|
61
|
+
INVALID_ATTRIBUTE_VALUE: `Expected '${cssTokenizer.getFormattedTokenName(cssTokenizer.TokenType.Ident)}' or '${cssTokenizer.getFormattedTokenName(cssTokenizer.TokenType.String)}' as attribute value, but got '%s' with value '%s`,
|
|
62
|
+
INVALID_FLAG: "Unsupported attribute selector flag '%s'",
|
|
63
|
+
INVALID_OPERATOR_FOR_ATTR: "Unsupported operator '%s' for '%s' attribute",
|
|
64
|
+
VALUE_FOR_ATTR_SHOULD_BE_INT: "Value for '%s' attribute should be an integer, but got '%s'",
|
|
65
|
+
INVALID_PSEUDO_CLASS: "Unsupported pseudo class '%s'",
|
|
66
|
+
VALUE_FOR_PSEUDO_CLASS_SHOULD_BE_INT: "Value for '%s' pseudo class should be an integer, but got '%s'",
|
|
67
|
+
// eslint-disable-next-line max-len
|
|
68
|
+
REGEXP_NOT_SUPPORTED: "Cannot convert RegExp parameter '%s' from '%s' pseudo class, because converting RegExp patterns are not supported yet",
|
|
69
|
+
ATTRIBUTE_SELECTOR_REQUIRES_VALUE: "Attribute selector '%s' requires a value",
|
|
70
|
+
INVALID_ATTRIBUTE_SELECTOR_OPERATOR: "Unsupported attribute selector operator '%s'",
|
|
71
|
+
VALUE_SHOULD_BE_SPECIFIED: 'Value should be specified if operator is specified',
|
|
72
|
+
OPERATOR_SHOULD_BE_SPECIFIED: 'Operator should be specified if value is specified',
|
|
73
|
+
UNEXPECTED_TOKEN_WITH_VALUE: "Unexpected token '%s' with value '%s'",
|
|
74
|
+
FLAGS_NOT_SUPPORTED: 'Flags are not supported for attribute selectors',
|
|
75
|
+
};
|
|
76
|
+
/**
|
|
77
|
+
* Convert `""` to `\"` within strings, because it does not compatible with the standard CSS syntax.
|
|
78
|
+
*
|
|
79
|
+
* @param selector CSS selector string
|
|
80
|
+
* @returns Escaped CSS selector
|
|
81
|
+
* @note In the legacy syntax, `""` is used to escape double quotes, but it cannot be used in the standard CSS syntax,
|
|
82
|
+
* so we use conversion functions to handle this.
|
|
83
|
+
* @see {@link https://kb.adguard.com/en/general/how-to-create-your-own-ad-filters#tag-content}
|
|
84
|
+
*/
|
|
85
|
+
function escapeDoubleQuotes(selector) {
|
|
86
|
+
let withinString = false;
|
|
87
|
+
const buffer = [];
|
|
88
|
+
for (let i = 0; i < selector.length; i += 1) {
|
|
89
|
+
if (!withinString && selector[i] === string.DOUBLE_QUOTE_MARKER) {
|
|
90
|
+
withinString = true;
|
|
91
|
+
buffer.push(selector[i]);
|
|
92
|
+
}
|
|
93
|
+
else if (withinString && selector[i] === string.DOUBLE_QUOTE_MARKER && selector[i + 1] === string.DOUBLE_QUOTE_MARKER) {
|
|
94
|
+
buffer.push(constants.ESCAPE_CHARACTER);
|
|
95
|
+
buffer.push(string.DOUBLE_QUOTE_MARKER);
|
|
96
|
+
i += 1;
|
|
97
|
+
}
|
|
98
|
+
else if (withinString && selector[i] === string.DOUBLE_QUOTE_MARKER && selector[i + 1] !== string.DOUBLE_QUOTE_MARKER) {
|
|
99
|
+
buffer.push(string.DOUBLE_QUOTE_MARKER);
|
|
100
|
+
withinString = false;
|
|
101
|
+
}
|
|
102
|
+
else {
|
|
103
|
+
buffer.push(selector[i]);
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
return buffer.join(constants.EMPTY);
|
|
107
|
+
}
|
|
108
|
+
/**
|
|
109
|
+
* Convert escaped double quotes `\"` to `""` within strings.
|
|
110
|
+
*
|
|
111
|
+
* @param selector CSS selector string
|
|
112
|
+
* @returns Unescaped CSS selector
|
|
113
|
+
* @note In the legacy syntax, `""` is used to escape double quotes, but it cannot be used in the standard CSS syntax,
|
|
114
|
+
* so we use conversion functions to handle this.
|
|
115
|
+
* @see {@link https://kb.adguard.com/en/general/how-to-create-your-own-ad-filters#tag-content}
|
|
116
|
+
*/
|
|
117
|
+
function unescapeDoubleQuotes(selector) {
|
|
118
|
+
let withinString = false;
|
|
119
|
+
const buffer = [];
|
|
120
|
+
for (let i = 0; i < selector.length; i += 1) {
|
|
121
|
+
if (selector[i] === string.DOUBLE_QUOTE_MARKER && selector[i - 1] !== constants.ESCAPE_CHARACTER) {
|
|
122
|
+
withinString = !withinString;
|
|
123
|
+
buffer.push(selector[i]);
|
|
124
|
+
}
|
|
125
|
+
else if (withinString && selector[i] === constants.ESCAPE_CHARACTER && selector[i + 1] === string.DOUBLE_QUOTE_MARKER) {
|
|
126
|
+
buffer.push(string.DOUBLE_QUOTE_MARKER);
|
|
127
|
+
}
|
|
128
|
+
else {
|
|
129
|
+
buffer.push(selector[i]);
|
|
130
|
+
}
|
|
131
|
+
}
|
|
132
|
+
return buffer.join(constants.EMPTY);
|
|
133
|
+
}
|
|
134
|
+
/**
|
|
135
|
+
* Helper function to render an attribute selector
|
|
136
|
+
*
|
|
137
|
+
* @param attr Attribute name
|
|
138
|
+
* @param op Operator (optional)
|
|
139
|
+
* @param value Attribute value (optional)
|
|
140
|
+
* @param flags Attribute flags (optional)
|
|
141
|
+
* @returns Rendered attribute selector string
|
|
142
|
+
*/
|
|
143
|
+
function renderAttrSelector(attr, op, value, flags) {
|
|
144
|
+
const result = [];
|
|
145
|
+
result.push(constants.OPEN_SQUARE_BRACKET);
|
|
146
|
+
result.push(attr);
|
|
147
|
+
{
|
|
148
|
+
if (value === undefined) {
|
|
149
|
+
throw new Error(ERROR_MESSAGES.VALUE_SHOULD_BE_SPECIFIED);
|
|
150
|
+
}
|
|
151
|
+
result.push(op);
|
|
152
|
+
}
|
|
153
|
+
if (value !== undefined) {
|
|
154
|
+
result.push(string.DOUBLE_QUOTE_MARKER);
|
|
155
|
+
result.push(value);
|
|
156
|
+
result.push(string.DOUBLE_QUOTE_MARKER);
|
|
157
|
+
}
|
|
158
|
+
result.push(constants.CLOSE_SQUARE_BRACKET);
|
|
159
|
+
return result.join(constants.EMPTY);
|
|
160
|
+
}
|
|
161
|
+
/**
|
|
162
|
+
* HTML filtering rule converter class
|
|
163
|
+
*
|
|
164
|
+
* @todo Implement `convertToUbo` (ABP currently doesn't support HTML filtering rules)
|
|
165
|
+
*/
|
|
166
|
+
class HtmlRuleConverter extends ruleConverterBase.RuleConverterBase {
|
|
167
|
+
/**
|
|
168
|
+
* Converts a HTML rule to AdGuard syntax, if possible. Also can be used to convert
|
|
169
|
+
* AdGuard rules to AdGuard syntax to validate them.
|
|
170
|
+
*
|
|
171
|
+
* _Note:_ uBlock Origin supports multiple selectors within a single rule, but AdGuard doesn't,
|
|
172
|
+
* so the following rule
|
|
173
|
+
* ```
|
|
174
|
+
* example.com##^div[attr1="value1"][attr2="value2"], script:has-text(value)
|
|
175
|
+
* ```
|
|
176
|
+
* will be converted to multiple AdGuard rules:
|
|
177
|
+
* ```
|
|
178
|
+
* example.com$$div[attr1="value1"][attr2="value2"][max-length="262144"]
|
|
179
|
+
* example.com$$script[tag-content="value"][max-length="262144"]
|
|
180
|
+
* ```
|
|
181
|
+
*
|
|
182
|
+
* @param rule Rule node to convert
|
|
183
|
+
* @returns An object which follows the {@link NodeConversionResult} interface. Its `result` property contains
|
|
184
|
+
* the array of converted rule nodes, and its `isConverted` flag indicates whether the original rule was converted.
|
|
185
|
+
* If the rule was not converted, the result array will contain the original node with the same object reference
|
|
186
|
+
* @throws If the rule is invalid or cannot be converted
|
|
187
|
+
*/
|
|
188
|
+
static convertToAdg(rule) {
|
|
189
|
+
// Ignore AdGuard rules
|
|
190
|
+
if (rule.syntax === adblockers.AdblockSyntax.Adg) {
|
|
191
|
+
return conversionResult.createNodeConversionResult([rule], false);
|
|
192
|
+
}
|
|
193
|
+
if (rule.syntax === adblockers.AdblockSyntax.Abp) {
|
|
194
|
+
throw new ruleConversionError.RuleConversionError(ERROR_MESSAGES.ABP_NOT_SUPPORTED);
|
|
195
|
+
}
|
|
196
|
+
const source = escapeDoubleQuotes(rule.body.value);
|
|
197
|
+
const stream = new cssTokenStream.CssTokenStream(source);
|
|
198
|
+
const convertedSelector = [];
|
|
199
|
+
const convertedSelectorList = [];
|
|
200
|
+
let minLen = NOT_SPECIFIED;
|
|
201
|
+
let maxLen = NOT_SPECIFIED;
|
|
202
|
+
// Skip leading whitespace
|
|
203
|
+
stream.skipWhitespace();
|
|
204
|
+
// Skip ^
|
|
205
|
+
stream.expect(cssTokenizer.TokenType.Delim, { value: constants.UBO_HTML_MASK });
|
|
206
|
+
stream.advance();
|
|
207
|
+
while (!stream.isEof()) {
|
|
208
|
+
const token = stream.getOrFail();
|
|
209
|
+
if (token.type === cssTokenizer.TokenType.Ident) {
|
|
210
|
+
// Tag selector should be the first child, if present, but whitespace is allowed before it
|
|
211
|
+
if (convertedSelector.length !== 0 && stream.lookbehindForNonWs() !== undefined) {
|
|
212
|
+
throw new ruleConversionError.RuleConversionError(sprintfJs.sprintf(ERROR_MESSAGES.TAG_SHOULD_BE_FIRST_CHILD, cssTokenizer.getFormattedTokenName(token.type), source.slice(token.start, token.end)));
|
|
213
|
+
}
|
|
214
|
+
convertedSelector.push(source.slice(token.start, token.end));
|
|
215
|
+
stream.advance();
|
|
216
|
+
}
|
|
217
|
+
else if (token.type === cssTokenizer.TokenType.OpenSquareBracket) {
|
|
218
|
+
// Attribute selectors: https://developer.mozilla.org/en-US/docs/Web/CSS/Attribute_selectors#syntax
|
|
219
|
+
const { start } = token;
|
|
220
|
+
let tempToken;
|
|
221
|
+
// Advance opening square bracket
|
|
222
|
+
stream.advance();
|
|
223
|
+
// Skip optional whitespace after the opening square bracket
|
|
224
|
+
stream.skipWhitespace();
|
|
225
|
+
// Parse attribute name
|
|
226
|
+
tempToken = stream.getOrFail();
|
|
227
|
+
if (tempToken.type !== cssTokenizer.TokenType.Ident) {
|
|
228
|
+
throw new ruleConversionError.RuleConversionError(sprintfJs.sprintf(ERROR_MESSAGES.INVALID_ATTRIBUTE_NAME, cssTokenizer.getFormattedTokenName(tempToken.type), source.slice(tempToken.start, tempToken.end)));
|
|
229
|
+
}
|
|
230
|
+
const attr = source.slice(tempToken.start, tempToken.end);
|
|
231
|
+
stream.advance();
|
|
232
|
+
// Skip optional whitespace after the attribute name
|
|
233
|
+
stream.skipWhitespace();
|
|
234
|
+
// Maybe attribute selector ends here, because value is not required, like in '[disabled]'
|
|
235
|
+
tempToken = stream.getOrFail();
|
|
236
|
+
// So check if the next non whitespace token is a closing square bracket
|
|
237
|
+
if (tempToken.type === cssTokenizer.TokenType.CloseSquareBracket) {
|
|
238
|
+
const { end } = tempToken;
|
|
239
|
+
stream.advance();
|
|
240
|
+
// Special case for min-length and max-length attributes
|
|
241
|
+
if (attr === AttributeSelectors.MinLength || attr === AttributeSelectors.MaxLength) {
|
|
242
|
+
throw new ruleConversionError.RuleConversionError(sprintfJs.sprintf(ERROR_MESSAGES.ATTRIBUTE_SELECTOR_REQUIRES_VALUE, attr));
|
|
243
|
+
}
|
|
244
|
+
convertedSelector.push(source.slice(start, end));
|
|
245
|
+
continue;
|
|
246
|
+
}
|
|
247
|
+
// Next token should be a valid attribute selector operator
|
|
248
|
+
// Only '=' operator is supported
|
|
249
|
+
stream.expect(cssTokenizer.TokenType.Delim, { value: constants.EQUALS });
|
|
250
|
+
// Advance the operator
|
|
251
|
+
stream.advance();
|
|
252
|
+
// Skip optional whitespace after the operator
|
|
253
|
+
stream.skipWhitespace();
|
|
254
|
+
// Parse attribute value
|
|
255
|
+
tempToken = stream.getOrFail();
|
|
256
|
+
// According to the spec, attribute value should be an identifier or a string
|
|
257
|
+
if (tempToken.type !== cssTokenizer.TokenType.Ident && tempToken.type !== cssTokenizer.TokenType.String) {
|
|
258
|
+
throw new ruleConversionError.RuleConversionError(sprintfJs.sprintf(ERROR_MESSAGES.INVALID_ATTRIBUTE_VALUE, cssTokenizer.getFormattedTokenName(tempToken.type), source.slice(tempToken.start, tempToken.end)));
|
|
259
|
+
}
|
|
260
|
+
const value = source.slice(tempToken.start, tempToken.end);
|
|
261
|
+
// Advance the attribute value
|
|
262
|
+
stream.advance();
|
|
263
|
+
// Skip optional whitespace after the attribute value
|
|
264
|
+
stream.skipWhitespace();
|
|
265
|
+
// Attribute selector may have flags - but AdGuard HTML filtering does not support them
|
|
266
|
+
tempToken = stream.getOrFail();
|
|
267
|
+
if (tempToken.type === cssTokenizer.TokenType.Ident) {
|
|
268
|
+
throw new ruleConversionError.RuleConversionError(sprintfJs.sprintf(ERROR_MESSAGES.FLAGS_NOT_SUPPORTED));
|
|
269
|
+
}
|
|
270
|
+
// Next token should be a closing square bracket
|
|
271
|
+
stream.expect(cssTokenizer.TokenType.CloseSquareBracket);
|
|
272
|
+
const { end } = stream.getOrFail();
|
|
273
|
+
stream.advance();
|
|
274
|
+
if (attr === AttributeSelectors.MinLength) {
|
|
275
|
+
// Min length attribute
|
|
276
|
+
const parsed = parseInt(value, 10);
|
|
277
|
+
if (Number.isNaN(parsed)) {
|
|
278
|
+
throw new ruleConversionError.RuleConversionError(sprintfJs.sprintf(ERROR_MESSAGES.VALUE_FOR_ATTR_SHOULD_BE_INT, attr, value));
|
|
279
|
+
}
|
|
280
|
+
minLen = parsed;
|
|
281
|
+
}
|
|
282
|
+
else if (attr === AttributeSelectors.MaxLength) {
|
|
283
|
+
// Max length attribute
|
|
284
|
+
const parsed = parseInt(value, 10);
|
|
285
|
+
if (Number.isNaN(parsed)) {
|
|
286
|
+
throw new ruleConversionError.RuleConversionError(sprintfJs.sprintf(ERROR_MESSAGES.VALUE_FOR_ATTR_SHOULD_BE_INT, attr, value));
|
|
287
|
+
}
|
|
288
|
+
maxLen = parsed;
|
|
289
|
+
}
|
|
290
|
+
else {
|
|
291
|
+
convertedSelector.push(source.slice(start, end));
|
|
292
|
+
}
|
|
293
|
+
}
|
|
294
|
+
else if (token.type === cssTokenizer.TokenType.Colon) {
|
|
295
|
+
let tempToken;
|
|
296
|
+
// Pseudo classes: https://developer.mozilla.org/en-US/docs/Web/CSS/Pseudo-classes#syntax
|
|
297
|
+
stream.advance();
|
|
298
|
+
// Next token should be a pseudo class name
|
|
299
|
+
stream.expect(cssTokenizer.TokenType.Function);
|
|
300
|
+
tempToken = stream.getOrFail();
|
|
301
|
+
const fn = source.slice(tempToken.start, tempToken.end - 1); // do not include '('
|
|
302
|
+
// Pseudo class should be supported
|
|
303
|
+
if (!SUPPORTED_UBO_PSEUDO_CLASSES.has(fn)) {
|
|
304
|
+
throw new ruleConversionError.RuleConversionError(sprintfJs.sprintf(ERROR_MESSAGES.INVALID_PSEUDO_CLASS, fn));
|
|
305
|
+
}
|
|
306
|
+
const paramStart = tempToken.end;
|
|
307
|
+
// Find the closing paren
|
|
308
|
+
stream.skipUntilBalanced();
|
|
309
|
+
tempToken = stream.getOrFail();
|
|
310
|
+
const paramEnd = tempToken.end;
|
|
311
|
+
// Get the parameter
|
|
312
|
+
const param = source.slice(paramStart, paramEnd - 1);
|
|
313
|
+
if (fn === PseudoClasses.MinTextLength) {
|
|
314
|
+
// Min text length pseudo class
|
|
315
|
+
// Parameter should be parsed as an integer
|
|
316
|
+
const parsed = parseInt(param, 10);
|
|
317
|
+
if (Number.isNaN(parsed)) {
|
|
318
|
+
throw new ruleConversionError.RuleConversionError(sprintfJs.sprintf(ERROR_MESSAGES.VALUE_FOR_PSEUDO_CLASS_SHOULD_BE_INT, fn, param));
|
|
319
|
+
}
|
|
320
|
+
minLen = parsed;
|
|
321
|
+
}
|
|
322
|
+
else if (fn === PseudoClasses.Contains || fn === PseudoClasses.HasText) {
|
|
323
|
+
// Contains and has-text pseudo classes
|
|
324
|
+
// Check if the argument is a RegExp
|
|
325
|
+
if (regexp.RegExpUtils.isRegexPattern(param)) {
|
|
326
|
+
// TODO: Add some support for RegExp patterns later
|
|
327
|
+
// Need to find a way to convert some RegExp patterns to glob patterns
|
|
328
|
+
throw new ruleConversionError.RuleConversionError(sprintfJs.sprintf(ERROR_MESSAGES.REGEXP_NOT_SUPPORTED, param, fn));
|
|
329
|
+
}
|
|
330
|
+
// Escape unescaped double quotes in the parameter
|
|
331
|
+
const paramEscaped = string.StringUtils.escapeCharacter(param, string.DOUBLE_QUOTE_MARKER);
|
|
332
|
+
convertedSelector.push(renderAttrSelector(AttributeSelectors.TagContent, constants.EQUALS, paramEscaped));
|
|
333
|
+
}
|
|
334
|
+
stream.advance();
|
|
335
|
+
}
|
|
336
|
+
else if (token.type === cssTokenizer.TokenType.Comma && token.balance === 0) {
|
|
337
|
+
if (minLen !== NOT_SPECIFIED) {
|
|
338
|
+
convertedSelector.push(renderAttrSelector(AttributeSelectors.MinLength, constants.EQUALS, minLen.toString()));
|
|
339
|
+
}
|
|
340
|
+
convertedSelector.push(renderAttrSelector(AttributeSelectors.MaxLength, constants.EQUALS, maxLen !== NOT_SPECIFIED ? maxLen.toString() : ADG_HTML_CONVERSION_MAX_LENGTH.toString()));
|
|
341
|
+
convertedSelectorList.push(convertedSelector.join(constants.EMPTY));
|
|
342
|
+
convertedSelector.length = 0;
|
|
343
|
+
stream.advance();
|
|
344
|
+
}
|
|
345
|
+
else if (token.type === cssTokenizer.TokenType.Whitespace) {
|
|
346
|
+
stream.advance();
|
|
347
|
+
}
|
|
348
|
+
else {
|
|
349
|
+
throw new ruleConversionError.RuleConversionError(sprintfJs.sprintf(ERROR_MESSAGES.UNEXPECTED_TOKEN_WITH_VALUE, cssTokenizer.getFormattedTokenName(token.type), source.slice(token.start, token.end)));
|
|
350
|
+
}
|
|
351
|
+
}
|
|
352
|
+
if (convertedSelector.length !== 0) {
|
|
353
|
+
if (minLen !== NOT_SPECIFIED) {
|
|
354
|
+
convertedSelector.push(renderAttrSelector(AttributeSelectors.MinLength, constants.EQUALS, minLen.toString()));
|
|
355
|
+
}
|
|
356
|
+
convertedSelector.push(renderAttrSelector(AttributeSelectors.MaxLength, constants.EQUALS, maxLen !== NOT_SPECIFIED ? maxLen.toString() : ADG_HTML_CONVERSION_MAX_LENGTH.toString()));
|
|
357
|
+
convertedSelectorList.push(convertedSelector.join(constants.EMPTY));
|
|
358
|
+
}
|
|
359
|
+
return conversionResult.createNodeConversionResult(
|
|
360
|
+
// Since AdGuard HTML filtering rules do not support multiple selectors, we need to split each selector
|
|
361
|
+
// into a separate rule node.
|
|
362
|
+
convertedSelectorList.map((selector) => ({
|
|
363
|
+
category: index.RuleCategory.Cosmetic,
|
|
364
|
+
type: index.CosmeticRuleType.HtmlFilteringRule,
|
|
365
|
+
syntax: adblockers.AdblockSyntax.Adg,
|
|
366
|
+
exception: rule.exception,
|
|
367
|
+
domains: clone.cloneDomainListNode(rule.domains),
|
|
368
|
+
// Convert the separator based on the exception status
|
|
369
|
+
separator: {
|
|
370
|
+
type: 'Value',
|
|
371
|
+
value: rule.exception
|
|
372
|
+
? index.CosmeticRuleSeparator.AdgHtmlFilteringException
|
|
373
|
+
: index.CosmeticRuleSeparator.AdgHtmlFiltering,
|
|
374
|
+
},
|
|
375
|
+
body: {
|
|
376
|
+
type: 'Value',
|
|
377
|
+
value: unescapeDoubleQuotes(selector),
|
|
378
|
+
},
|
|
379
|
+
})), true);
|
|
380
|
+
}
|
|
381
|
+
}
|
|
382
|
+
|
|
383
|
+
exports.ERROR_MESSAGES = ERROR_MESSAGES;
|
|
384
|
+
exports.HtmlRuleConverter = HtmlRuleConverter;
|
|
@@ -0,0 +1,120 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* AGTree v3.0.0-alpha.1 (build date: Tue, 12 Nov 2024 16:11:58 GMT)
|
|
3
|
+
* (c) 2024 Adguard Software Ltd.
|
|
4
|
+
* Released under the MIT license
|
|
5
|
+
* https://github.com/AdguardTeam/tsurlfilter/tree/master/packages/agtree#readme
|
|
6
|
+
*/
|
|
7
|
+
'use strict';
|
|
8
|
+
|
|
9
|
+
var index = require('../../nodes/index.js');
|
|
10
|
+
var adblockers = require('../../utils/adblockers.js');
|
|
11
|
+
var html = require('./html.js');
|
|
12
|
+
var scriptlet = require('./scriptlet.js');
|
|
13
|
+
var ruleConversionError = require('../../errors/rule-conversion-error.js');
|
|
14
|
+
var ruleConverterBase = require('../base-interfaces/rule-converter-base.js');
|
|
15
|
+
var adg = require('./rule-modifiers/adg.js');
|
|
16
|
+
var css = require('./css.js');
|
|
17
|
+
var elementHiding = require('./element-hiding.js');
|
|
18
|
+
var headerRemoval = require('./header-removal.js');
|
|
19
|
+
var conversionResult = require('../base-interfaces/conversion-result.js');
|
|
20
|
+
|
|
21
|
+
/**
|
|
22
|
+
* @file Cosmetic rule converter
|
|
23
|
+
*/
|
|
24
|
+
/**
|
|
25
|
+
* Cosmetic rule converter class (also known as "non-basic rule converter")
|
|
26
|
+
*
|
|
27
|
+
* @todo Implement `convertToUbo` and `convertToAbp`
|
|
28
|
+
*/
|
|
29
|
+
class CosmeticRuleConverter extends ruleConverterBase.RuleConverterBase {
|
|
30
|
+
/**
|
|
31
|
+
* Converts a cosmetic rule to AdGuard syntax, if possible.
|
|
32
|
+
*
|
|
33
|
+
* @param rule Rule node to convert
|
|
34
|
+
* @returns An object which follows the {@link NodeConversionResult} interface. Its `result` property contains
|
|
35
|
+
* the array of converted rule nodes, and its `isConverted` flag indicates whether the original rule was converted.
|
|
36
|
+
* If the rule was not converted, the result array will contain the original node with the same object reference
|
|
37
|
+
* @throws If the rule is invalid or cannot be converted
|
|
38
|
+
*/
|
|
39
|
+
static convertToAdg(rule) {
|
|
40
|
+
let subconverterResult;
|
|
41
|
+
// Convert cosmetic rule based on its type
|
|
42
|
+
switch (rule.type) {
|
|
43
|
+
case index.CosmeticRuleType.ElementHidingRule:
|
|
44
|
+
subconverterResult = elementHiding.ElementHidingRuleConverter.convertToAdg(rule);
|
|
45
|
+
break;
|
|
46
|
+
case index.CosmeticRuleType.ScriptletInjectionRule:
|
|
47
|
+
subconverterResult = scriptlet.ScriptletRuleConverter.convertToAdg(rule);
|
|
48
|
+
break;
|
|
49
|
+
case index.CosmeticRuleType.CssInjectionRule:
|
|
50
|
+
subconverterResult = css.CssInjectionRuleConverter.convertToAdg(rule);
|
|
51
|
+
break;
|
|
52
|
+
case index.CosmeticRuleType.HtmlFilteringRule:
|
|
53
|
+
// Handle special case: uBO response header filtering rule
|
|
54
|
+
// TODO: Optimize double CSS tokenization here
|
|
55
|
+
subconverterResult = headerRemoval.HeaderRemovalRuleConverter.convertToAdg(rule);
|
|
56
|
+
if (subconverterResult.isConverted) {
|
|
57
|
+
break;
|
|
58
|
+
}
|
|
59
|
+
subconverterResult = html.HtmlRuleConverter.convertToAdg(rule);
|
|
60
|
+
break;
|
|
61
|
+
// Note: Currently, only ADG supports JS injection rules, so we don't need to convert them
|
|
62
|
+
case index.CosmeticRuleType.JsInjectionRule:
|
|
63
|
+
subconverterResult = conversionResult.createNodeConversionResult([rule], false);
|
|
64
|
+
break;
|
|
65
|
+
default:
|
|
66
|
+
throw new ruleConversionError.RuleConversionError('Unsupported cosmetic rule type');
|
|
67
|
+
}
|
|
68
|
+
let convertedModifiers;
|
|
69
|
+
// Convert cosmetic rule modifiers, if any
|
|
70
|
+
if (rule.modifiers) {
|
|
71
|
+
if (rule.syntax === adblockers.AdblockSyntax.Ubo) {
|
|
72
|
+
// uBO doesn't support this rule:
|
|
73
|
+
// example.com##+js(set-constant.js, foo, bar):matches-path(/baz)
|
|
74
|
+
if (rule.type === index.CosmeticRuleType.ScriptletInjectionRule) {
|
|
75
|
+
throw new ruleConversionError.RuleConversionError('uBO scriptlet injection rules don\'t support cosmetic rule modifiers');
|
|
76
|
+
}
|
|
77
|
+
convertedModifiers = adg.AdgCosmeticRuleModifierConverter.convertFromUbo(rule.modifiers);
|
|
78
|
+
}
|
|
79
|
+
else if (rule.syntax === adblockers.AdblockSyntax.Abp) {
|
|
80
|
+
// TODO: Implement once ABP starts supporting cosmetic rule modifiers
|
|
81
|
+
throw new ruleConversionError.RuleConversionError('ABP don\'t support cosmetic rule modifiers');
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
if ((subconverterResult.result.length > 1 || subconverterResult.isConverted)
|
|
85
|
+
|| (convertedModifiers && convertedModifiers.isConverted)) {
|
|
86
|
+
// Add modifier list to the subconverter result rules
|
|
87
|
+
subconverterResult.result.forEach((subconverterRule) => {
|
|
88
|
+
if (convertedModifiers && subconverterRule.category === index.RuleCategory.Cosmetic) {
|
|
89
|
+
// eslint-disable-next-line no-param-reassign
|
|
90
|
+
subconverterRule.modifiers = convertedModifiers.result;
|
|
91
|
+
}
|
|
92
|
+
});
|
|
93
|
+
return subconverterResult;
|
|
94
|
+
}
|
|
95
|
+
return conversionResult.createNodeConversionResult([rule], false);
|
|
96
|
+
}
|
|
97
|
+
/**
|
|
98
|
+
* Converts a cosmetic rule to uBlock Origin syntax, if possible.
|
|
99
|
+
*
|
|
100
|
+
* @param rule Rule node to convert
|
|
101
|
+
* @returns An object which follows the {@link NodeConversionResult} interface. Its `result` property contains
|
|
102
|
+
* the array of converted rule nodes, and its `isConverted` flag indicates whether the original rule was converted.
|
|
103
|
+
* If the rule was not converted, the result array will contain the original node with the same object reference
|
|
104
|
+
* @throws If the rule is invalid or cannot be converted
|
|
105
|
+
*/
|
|
106
|
+
// TODO: Add support for other cosmetic rule types
|
|
107
|
+
static convertToUbo(rule) {
|
|
108
|
+
// Convert cosmetic rule based on its type
|
|
109
|
+
if (rule.type === index.CosmeticRuleType.ScriptletInjectionRule) {
|
|
110
|
+
if (rule.syntax === adblockers.AdblockSyntax.Adg && rule.modifiers?.children.length) {
|
|
111
|
+
// e.g. example.com##+js(set-constant.js, foo, bar):matches-path(/baz)
|
|
112
|
+
throw new ruleConversionError.RuleConversionError('uBO scriptlet injection rules do not support cosmetic rule modifiers');
|
|
113
|
+
}
|
|
114
|
+
return scriptlet.ScriptletRuleConverter.convertToUbo(rule);
|
|
115
|
+
}
|
|
116
|
+
return conversionResult.createNodeConversionResult([rule], false);
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
|
|
120
|
+
exports.CosmeticRuleConverter = CosmeticRuleConverter;
|