@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,381 @@
|
|
|
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
|
+
import { getFormattedTokenName, TokenType } from '@adguard/css-tokenizer';
|
|
8
|
+
import { sprintf } from 'sprintf-js';
|
|
9
|
+
import { RuleCategory, CosmeticRuleType, CosmeticRuleSeparator } from '../../nodes/index.mjs';
|
|
10
|
+
import { AdblockSyntax } from '../../utils/adblockers.mjs';
|
|
11
|
+
import { RuleConversionError } from '../../errors/rule-conversion-error.mjs';
|
|
12
|
+
import { RuleConverterBase } from '../base-interfaces/rule-converter-base.mjs';
|
|
13
|
+
import { RegExpUtils } from '../../utils/regexp.mjs';
|
|
14
|
+
import { createNodeConversionResult } from '../base-interfaces/conversion-result.mjs';
|
|
15
|
+
import { cloneDomainListNode } from '../../ast-utils/clone.mjs';
|
|
16
|
+
import { CssTokenStream } from '../../parser/css/css-token-stream.mjs';
|
|
17
|
+
import { UBO_HTML_MASK, EQUALS, ESCAPE_CHARACTER, EMPTY, OPEN_SQUARE_BRACKET, CLOSE_SQUARE_BRACKET } from '../../utils/constants.mjs';
|
|
18
|
+
import { StringUtils, DOUBLE_QUOTE_MARKER } from '../../utils/string.mjs';
|
|
19
|
+
|
|
20
|
+
/**
|
|
21
|
+
* @file HTML filtering rule converter
|
|
22
|
+
*/
|
|
23
|
+
/**
|
|
24
|
+
* From the AdGuard docs:
|
|
25
|
+
* Specifies the maximum length for content of HTML element. If this parameter is
|
|
26
|
+
* set and the content length exceeds the value, a rule does not apply to the element.
|
|
27
|
+
* If this parameter is not specified, the max-length is considered to be 8192 (8 KB).
|
|
28
|
+
* When converting from other formats, we set the max-length to 262144 (256 KB).
|
|
29
|
+
*
|
|
30
|
+
* @see {@link https://adguard.com/kb/general/ad-filtering/create-own-filters/#html-filtering-rules}
|
|
31
|
+
*/
|
|
32
|
+
const ADG_HTML_DEFAULT_MAX_LENGTH = 8192;
|
|
33
|
+
const ADG_HTML_CONVERSION_MAX_LENGTH = ADG_HTML_DEFAULT_MAX_LENGTH * 32;
|
|
34
|
+
const NOT_SPECIFIED = -1;
|
|
35
|
+
var PseudoClasses;
|
|
36
|
+
(function (PseudoClasses) {
|
|
37
|
+
PseudoClasses["Contains"] = "contains";
|
|
38
|
+
PseudoClasses["HasText"] = "has-text";
|
|
39
|
+
PseudoClasses["MinTextLength"] = "min-text-length";
|
|
40
|
+
})(PseudoClasses || (PseudoClasses = {}));
|
|
41
|
+
var AttributeSelectors;
|
|
42
|
+
(function (AttributeSelectors) {
|
|
43
|
+
AttributeSelectors["MaxLength"] = "max-length";
|
|
44
|
+
AttributeSelectors["MinLength"] = "min-length";
|
|
45
|
+
AttributeSelectors["TagContent"] = "tag-content";
|
|
46
|
+
AttributeSelectors["Wildcard"] = "wildcard";
|
|
47
|
+
})(AttributeSelectors || (AttributeSelectors = {}));
|
|
48
|
+
const SUPPORTED_UBO_PSEUDO_CLASSES = new Set([
|
|
49
|
+
PseudoClasses.Contains,
|
|
50
|
+
PseudoClasses.HasText,
|
|
51
|
+
PseudoClasses.MinTextLength,
|
|
52
|
+
]);
|
|
53
|
+
const ERROR_MESSAGES = {
|
|
54
|
+
ABP_NOT_SUPPORTED: 'Invalid rule, ABP does not support HTML filtering rules',
|
|
55
|
+
TAG_SHOULD_BE_FIRST_CHILD: "Unexpected token '%s' with value '%s', tag selector should be the first child",
|
|
56
|
+
EXPECTED_BUT_GOT_WITH_VALUE: "Expected '%s', but got '%s' with value '%s'",
|
|
57
|
+
INVALID_ATTRIBUTE_NAME: "Attribute name should be an identifier, but got '%s' with value '%s'",
|
|
58
|
+
// eslint-disable-next-line max-len
|
|
59
|
+
INVALID_ATTRIBUTE_VALUE: `Expected '${getFormattedTokenName(TokenType.Ident)}' or '${getFormattedTokenName(TokenType.String)}' as attribute value, but got '%s' with value '%s`,
|
|
60
|
+
INVALID_FLAG: "Unsupported attribute selector flag '%s'",
|
|
61
|
+
INVALID_OPERATOR_FOR_ATTR: "Unsupported operator '%s' for '%s' attribute",
|
|
62
|
+
VALUE_FOR_ATTR_SHOULD_BE_INT: "Value for '%s' attribute should be an integer, but got '%s'",
|
|
63
|
+
INVALID_PSEUDO_CLASS: "Unsupported pseudo class '%s'",
|
|
64
|
+
VALUE_FOR_PSEUDO_CLASS_SHOULD_BE_INT: "Value for '%s' pseudo class should be an integer, but got '%s'",
|
|
65
|
+
// eslint-disable-next-line max-len
|
|
66
|
+
REGEXP_NOT_SUPPORTED: "Cannot convert RegExp parameter '%s' from '%s' pseudo class, because converting RegExp patterns are not supported yet",
|
|
67
|
+
ATTRIBUTE_SELECTOR_REQUIRES_VALUE: "Attribute selector '%s' requires a value",
|
|
68
|
+
INVALID_ATTRIBUTE_SELECTOR_OPERATOR: "Unsupported attribute selector operator '%s'",
|
|
69
|
+
VALUE_SHOULD_BE_SPECIFIED: 'Value should be specified if operator is specified',
|
|
70
|
+
OPERATOR_SHOULD_BE_SPECIFIED: 'Operator should be specified if value is specified',
|
|
71
|
+
UNEXPECTED_TOKEN_WITH_VALUE: "Unexpected token '%s' with value '%s'",
|
|
72
|
+
FLAGS_NOT_SUPPORTED: 'Flags are not supported for attribute selectors',
|
|
73
|
+
};
|
|
74
|
+
/**
|
|
75
|
+
* Convert `""` to `\"` within strings, because it does not compatible with the standard CSS syntax.
|
|
76
|
+
*
|
|
77
|
+
* @param selector CSS selector string
|
|
78
|
+
* @returns Escaped CSS selector
|
|
79
|
+
* @note In the legacy syntax, `""` is used to escape double quotes, but it cannot be used in the standard CSS syntax,
|
|
80
|
+
* so we use conversion functions to handle this.
|
|
81
|
+
* @see {@link https://kb.adguard.com/en/general/how-to-create-your-own-ad-filters#tag-content}
|
|
82
|
+
*/
|
|
83
|
+
function escapeDoubleQuotes(selector) {
|
|
84
|
+
let withinString = false;
|
|
85
|
+
const buffer = [];
|
|
86
|
+
for (let i = 0; i < selector.length; i += 1) {
|
|
87
|
+
if (!withinString && selector[i] === DOUBLE_QUOTE_MARKER) {
|
|
88
|
+
withinString = true;
|
|
89
|
+
buffer.push(selector[i]);
|
|
90
|
+
}
|
|
91
|
+
else if (withinString && selector[i] === DOUBLE_QUOTE_MARKER && selector[i + 1] === DOUBLE_QUOTE_MARKER) {
|
|
92
|
+
buffer.push(ESCAPE_CHARACTER);
|
|
93
|
+
buffer.push(DOUBLE_QUOTE_MARKER);
|
|
94
|
+
i += 1;
|
|
95
|
+
}
|
|
96
|
+
else if (withinString && selector[i] === DOUBLE_QUOTE_MARKER && selector[i + 1] !== DOUBLE_QUOTE_MARKER) {
|
|
97
|
+
buffer.push(DOUBLE_QUOTE_MARKER);
|
|
98
|
+
withinString = false;
|
|
99
|
+
}
|
|
100
|
+
else {
|
|
101
|
+
buffer.push(selector[i]);
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
return buffer.join(EMPTY);
|
|
105
|
+
}
|
|
106
|
+
/**
|
|
107
|
+
* Convert escaped double quotes `\"` to `""` within strings.
|
|
108
|
+
*
|
|
109
|
+
* @param selector CSS selector string
|
|
110
|
+
* @returns Unescaped CSS selector
|
|
111
|
+
* @note In the legacy syntax, `""` is used to escape double quotes, but it cannot be used in the standard CSS syntax,
|
|
112
|
+
* so we use conversion functions to handle this.
|
|
113
|
+
* @see {@link https://kb.adguard.com/en/general/how-to-create-your-own-ad-filters#tag-content}
|
|
114
|
+
*/
|
|
115
|
+
function unescapeDoubleQuotes(selector) {
|
|
116
|
+
let withinString = false;
|
|
117
|
+
const buffer = [];
|
|
118
|
+
for (let i = 0; i < selector.length; i += 1) {
|
|
119
|
+
if (selector[i] === DOUBLE_QUOTE_MARKER && selector[i - 1] !== ESCAPE_CHARACTER) {
|
|
120
|
+
withinString = !withinString;
|
|
121
|
+
buffer.push(selector[i]);
|
|
122
|
+
}
|
|
123
|
+
else if (withinString && selector[i] === ESCAPE_CHARACTER && selector[i + 1] === DOUBLE_QUOTE_MARKER) {
|
|
124
|
+
buffer.push(DOUBLE_QUOTE_MARKER);
|
|
125
|
+
}
|
|
126
|
+
else {
|
|
127
|
+
buffer.push(selector[i]);
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
return buffer.join(EMPTY);
|
|
131
|
+
}
|
|
132
|
+
/**
|
|
133
|
+
* Helper function to render an attribute selector
|
|
134
|
+
*
|
|
135
|
+
* @param attr Attribute name
|
|
136
|
+
* @param op Operator (optional)
|
|
137
|
+
* @param value Attribute value (optional)
|
|
138
|
+
* @param flags Attribute flags (optional)
|
|
139
|
+
* @returns Rendered attribute selector string
|
|
140
|
+
*/
|
|
141
|
+
function renderAttrSelector(attr, op, value, flags) {
|
|
142
|
+
const result = [];
|
|
143
|
+
result.push(OPEN_SQUARE_BRACKET);
|
|
144
|
+
result.push(attr);
|
|
145
|
+
{
|
|
146
|
+
if (value === undefined) {
|
|
147
|
+
throw new Error(ERROR_MESSAGES.VALUE_SHOULD_BE_SPECIFIED);
|
|
148
|
+
}
|
|
149
|
+
result.push(op);
|
|
150
|
+
}
|
|
151
|
+
if (value !== undefined) {
|
|
152
|
+
result.push(DOUBLE_QUOTE_MARKER);
|
|
153
|
+
result.push(value);
|
|
154
|
+
result.push(DOUBLE_QUOTE_MARKER);
|
|
155
|
+
}
|
|
156
|
+
result.push(CLOSE_SQUARE_BRACKET);
|
|
157
|
+
return result.join(EMPTY);
|
|
158
|
+
}
|
|
159
|
+
/**
|
|
160
|
+
* HTML filtering rule converter class
|
|
161
|
+
*
|
|
162
|
+
* @todo Implement `convertToUbo` (ABP currently doesn't support HTML filtering rules)
|
|
163
|
+
*/
|
|
164
|
+
class HtmlRuleConverter extends RuleConverterBase {
|
|
165
|
+
/**
|
|
166
|
+
* Converts a HTML rule to AdGuard syntax, if possible. Also can be used to convert
|
|
167
|
+
* AdGuard rules to AdGuard syntax to validate them.
|
|
168
|
+
*
|
|
169
|
+
* _Note:_ uBlock Origin supports multiple selectors within a single rule, but AdGuard doesn't,
|
|
170
|
+
* so the following rule
|
|
171
|
+
* ```
|
|
172
|
+
* example.com##^div[attr1="value1"][attr2="value2"], script:has-text(value)
|
|
173
|
+
* ```
|
|
174
|
+
* will be converted to multiple AdGuard rules:
|
|
175
|
+
* ```
|
|
176
|
+
* example.com$$div[attr1="value1"][attr2="value2"][max-length="262144"]
|
|
177
|
+
* example.com$$script[tag-content="value"][max-length="262144"]
|
|
178
|
+
* ```
|
|
179
|
+
*
|
|
180
|
+
* @param rule Rule node to convert
|
|
181
|
+
* @returns An object which follows the {@link NodeConversionResult} interface. Its `result` property contains
|
|
182
|
+
* the array of converted rule nodes, and its `isConverted` flag indicates whether the original rule was converted.
|
|
183
|
+
* If the rule was not converted, the result array will contain the original node with the same object reference
|
|
184
|
+
* @throws If the rule is invalid or cannot be converted
|
|
185
|
+
*/
|
|
186
|
+
static convertToAdg(rule) {
|
|
187
|
+
// Ignore AdGuard rules
|
|
188
|
+
if (rule.syntax === AdblockSyntax.Adg) {
|
|
189
|
+
return createNodeConversionResult([rule], false);
|
|
190
|
+
}
|
|
191
|
+
if (rule.syntax === AdblockSyntax.Abp) {
|
|
192
|
+
throw new RuleConversionError(ERROR_MESSAGES.ABP_NOT_SUPPORTED);
|
|
193
|
+
}
|
|
194
|
+
const source = escapeDoubleQuotes(rule.body.value);
|
|
195
|
+
const stream = new CssTokenStream(source);
|
|
196
|
+
const convertedSelector = [];
|
|
197
|
+
const convertedSelectorList = [];
|
|
198
|
+
let minLen = NOT_SPECIFIED;
|
|
199
|
+
let maxLen = NOT_SPECIFIED;
|
|
200
|
+
// Skip leading whitespace
|
|
201
|
+
stream.skipWhitespace();
|
|
202
|
+
// Skip ^
|
|
203
|
+
stream.expect(TokenType.Delim, { value: UBO_HTML_MASK });
|
|
204
|
+
stream.advance();
|
|
205
|
+
while (!stream.isEof()) {
|
|
206
|
+
const token = stream.getOrFail();
|
|
207
|
+
if (token.type === TokenType.Ident) {
|
|
208
|
+
// Tag selector should be the first child, if present, but whitespace is allowed before it
|
|
209
|
+
if (convertedSelector.length !== 0 && stream.lookbehindForNonWs() !== undefined) {
|
|
210
|
+
throw new RuleConversionError(sprintf(ERROR_MESSAGES.TAG_SHOULD_BE_FIRST_CHILD, getFormattedTokenName(token.type), source.slice(token.start, token.end)));
|
|
211
|
+
}
|
|
212
|
+
convertedSelector.push(source.slice(token.start, token.end));
|
|
213
|
+
stream.advance();
|
|
214
|
+
}
|
|
215
|
+
else if (token.type === TokenType.OpenSquareBracket) {
|
|
216
|
+
// Attribute selectors: https://developer.mozilla.org/en-US/docs/Web/CSS/Attribute_selectors#syntax
|
|
217
|
+
const { start } = token;
|
|
218
|
+
let tempToken;
|
|
219
|
+
// Advance opening square bracket
|
|
220
|
+
stream.advance();
|
|
221
|
+
// Skip optional whitespace after the opening square bracket
|
|
222
|
+
stream.skipWhitespace();
|
|
223
|
+
// Parse attribute name
|
|
224
|
+
tempToken = stream.getOrFail();
|
|
225
|
+
if (tempToken.type !== TokenType.Ident) {
|
|
226
|
+
throw new RuleConversionError(sprintf(ERROR_MESSAGES.INVALID_ATTRIBUTE_NAME, getFormattedTokenName(tempToken.type), source.slice(tempToken.start, tempToken.end)));
|
|
227
|
+
}
|
|
228
|
+
const attr = source.slice(tempToken.start, tempToken.end);
|
|
229
|
+
stream.advance();
|
|
230
|
+
// Skip optional whitespace after the attribute name
|
|
231
|
+
stream.skipWhitespace();
|
|
232
|
+
// Maybe attribute selector ends here, because value is not required, like in '[disabled]'
|
|
233
|
+
tempToken = stream.getOrFail();
|
|
234
|
+
// So check if the next non whitespace token is a closing square bracket
|
|
235
|
+
if (tempToken.type === TokenType.CloseSquareBracket) {
|
|
236
|
+
const { end } = tempToken;
|
|
237
|
+
stream.advance();
|
|
238
|
+
// Special case for min-length and max-length attributes
|
|
239
|
+
if (attr === AttributeSelectors.MinLength || attr === AttributeSelectors.MaxLength) {
|
|
240
|
+
throw new RuleConversionError(sprintf(ERROR_MESSAGES.ATTRIBUTE_SELECTOR_REQUIRES_VALUE, attr));
|
|
241
|
+
}
|
|
242
|
+
convertedSelector.push(source.slice(start, end));
|
|
243
|
+
continue;
|
|
244
|
+
}
|
|
245
|
+
// Next token should be a valid attribute selector operator
|
|
246
|
+
// Only '=' operator is supported
|
|
247
|
+
stream.expect(TokenType.Delim, { value: EQUALS });
|
|
248
|
+
// Advance the operator
|
|
249
|
+
stream.advance();
|
|
250
|
+
// Skip optional whitespace after the operator
|
|
251
|
+
stream.skipWhitespace();
|
|
252
|
+
// Parse attribute value
|
|
253
|
+
tempToken = stream.getOrFail();
|
|
254
|
+
// According to the spec, attribute value should be an identifier or a string
|
|
255
|
+
if (tempToken.type !== TokenType.Ident && tempToken.type !== TokenType.String) {
|
|
256
|
+
throw new RuleConversionError(sprintf(ERROR_MESSAGES.INVALID_ATTRIBUTE_VALUE, getFormattedTokenName(tempToken.type), source.slice(tempToken.start, tempToken.end)));
|
|
257
|
+
}
|
|
258
|
+
const value = source.slice(tempToken.start, tempToken.end);
|
|
259
|
+
// Advance the attribute value
|
|
260
|
+
stream.advance();
|
|
261
|
+
// Skip optional whitespace after the attribute value
|
|
262
|
+
stream.skipWhitespace();
|
|
263
|
+
// Attribute selector may have flags - but AdGuard HTML filtering does not support them
|
|
264
|
+
tempToken = stream.getOrFail();
|
|
265
|
+
if (tempToken.type === TokenType.Ident) {
|
|
266
|
+
throw new RuleConversionError(sprintf(ERROR_MESSAGES.FLAGS_NOT_SUPPORTED));
|
|
267
|
+
}
|
|
268
|
+
// Next token should be a closing square bracket
|
|
269
|
+
stream.expect(TokenType.CloseSquareBracket);
|
|
270
|
+
const { end } = stream.getOrFail();
|
|
271
|
+
stream.advance();
|
|
272
|
+
if (attr === AttributeSelectors.MinLength) {
|
|
273
|
+
// Min length attribute
|
|
274
|
+
const parsed = parseInt(value, 10);
|
|
275
|
+
if (Number.isNaN(parsed)) {
|
|
276
|
+
throw new RuleConversionError(sprintf(ERROR_MESSAGES.VALUE_FOR_ATTR_SHOULD_BE_INT, attr, value));
|
|
277
|
+
}
|
|
278
|
+
minLen = parsed;
|
|
279
|
+
}
|
|
280
|
+
else if (attr === AttributeSelectors.MaxLength) {
|
|
281
|
+
// Max length attribute
|
|
282
|
+
const parsed = parseInt(value, 10);
|
|
283
|
+
if (Number.isNaN(parsed)) {
|
|
284
|
+
throw new RuleConversionError(sprintf(ERROR_MESSAGES.VALUE_FOR_ATTR_SHOULD_BE_INT, attr, value));
|
|
285
|
+
}
|
|
286
|
+
maxLen = parsed;
|
|
287
|
+
}
|
|
288
|
+
else {
|
|
289
|
+
convertedSelector.push(source.slice(start, end));
|
|
290
|
+
}
|
|
291
|
+
}
|
|
292
|
+
else if (token.type === TokenType.Colon) {
|
|
293
|
+
let tempToken;
|
|
294
|
+
// Pseudo classes: https://developer.mozilla.org/en-US/docs/Web/CSS/Pseudo-classes#syntax
|
|
295
|
+
stream.advance();
|
|
296
|
+
// Next token should be a pseudo class name
|
|
297
|
+
stream.expect(TokenType.Function);
|
|
298
|
+
tempToken = stream.getOrFail();
|
|
299
|
+
const fn = source.slice(tempToken.start, tempToken.end - 1); // do not include '('
|
|
300
|
+
// Pseudo class should be supported
|
|
301
|
+
if (!SUPPORTED_UBO_PSEUDO_CLASSES.has(fn)) {
|
|
302
|
+
throw new RuleConversionError(sprintf(ERROR_MESSAGES.INVALID_PSEUDO_CLASS, fn));
|
|
303
|
+
}
|
|
304
|
+
const paramStart = tempToken.end;
|
|
305
|
+
// Find the closing paren
|
|
306
|
+
stream.skipUntilBalanced();
|
|
307
|
+
tempToken = stream.getOrFail();
|
|
308
|
+
const paramEnd = tempToken.end;
|
|
309
|
+
// Get the parameter
|
|
310
|
+
const param = source.slice(paramStart, paramEnd - 1);
|
|
311
|
+
if (fn === PseudoClasses.MinTextLength) {
|
|
312
|
+
// Min text length pseudo class
|
|
313
|
+
// Parameter should be parsed as an integer
|
|
314
|
+
const parsed = parseInt(param, 10);
|
|
315
|
+
if (Number.isNaN(parsed)) {
|
|
316
|
+
throw new RuleConversionError(sprintf(ERROR_MESSAGES.VALUE_FOR_PSEUDO_CLASS_SHOULD_BE_INT, fn, param));
|
|
317
|
+
}
|
|
318
|
+
minLen = parsed;
|
|
319
|
+
}
|
|
320
|
+
else if (fn === PseudoClasses.Contains || fn === PseudoClasses.HasText) {
|
|
321
|
+
// Contains and has-text pseudo classes
|
|
322
|
+
// Check if the argument is a RegExp
|
|
323
|
+
if (RegExpUtils.isRegexPattern(param)) {
|
|
324
|
+
// TODO: Add some support for RegExp patterns later
|
|
325
|
+
// Need to find a way to convert some RegExp patterns to glob patterns
|
|
326
|
+
throw new RuleConversionError(sprintf(ERROR_MESSAGES.REGEXP_NOT_SUPPORTED, param, fn));
|
|
327
|
+
}
|
|
328
|
+
// Escape unescaped double quotes in the parameter
|
|
329
|
+
const paramEscaped = StringUtils.escapeCharacter(param, DOUBLE_QUOTE_MARKER);
|
|
330
|
+
convertedSelector.push(renderAttrSelector(AttributeSelectors.TagContent, EQUALS, paramEscaped));
|
|
331
|
+
}
|
|
332
|
+
stream.advance();
|
|
333
|
+
}
|
|
334
|
+
else if (token.type === TokenType.Comma && token.balance === 0) {
|
|
335
|
+
if (minLen !== NOT_SPECIFIED) {
|
|
336
|
+
convertedSelector.push(renderAttrSelector(AttributeSelectors.MinLength, EQUALS, minLen.toString()));
|
|
337
|
+
}
|
|
338
|
+
convertedSelector.push(renderAttrSelector(AttributeSelectors.MaxLength, EQUALS, maxLen !== NOT_SPECIFIED ? maxLen.toString() : ADG_HTML_CONVERSION_MAX_LENGTH.toString()));
|
|
339
|
+
convertedSelectorList.push(convertedSelector.join(EMPTY));
|
|
340
|
+
convertedSelector.length = 0;
|
|
341
|
+
stream.advance();
|
|
342
|
+
}
|
|
343
|
+
else if (token.type === TokenType.Whitespace) {
|
|
344
|
+
stream.advance();
|
|
345
|
+
}
|
|
346
|
+
else {
|
|
347
|
+
throw new RuleConversionError(sprintf(ERROR_MESSAGES.UNEXPECTED_TOKEN_WITH_VALUE, getFormattedTokenName(token.type), source.slice(token.start, token.end)));
|
|
348
|
+
}
|
|
349
|
+
}
|
|
350
|
+
if (convertedSelector.length !== 0) {
|
|
351
|
+
if (minLen !== NOT_SPECIFIED) {
|
|
352
|
+
convertedSelector.push(renderAttrSelector(AttributeSelectors.MinLength, EQUALS, minLen.toString()));
|
|
353
|
+
}
|
|
354
|
+
convertedSelector.push(renderAttrSelector(AttributeSelectors.MaxLength, EQUALS, maxLen !== NOT_SPECIFIED ? maxLen.toString() : ADG_HTML_CONVERSION_MAX_LENGTH.toString()));
|
|
355
|
+
convertedSelectorList.push(convertedSelector.join(EMPTY));
|
|
356
|
+
}
|
|
357
|
+
return createNodeConversionResult(
|
|
358
|
+
// Since AdGuard HTML filtering rules do not support multiple selectors, we need to split each selector
|
|
359
|
+
// into a separate rule node.
|
|
360
|
+
convertedSelectorList.map((selector) => ({
|
|
361
|
+
category: RuleCategory.Cosmetic,
|
|
362
|
+
type: CosmeticRuleType.HtmlFilteringRule,
|
|
363
|
+
syntax: AdblockSyntax.Adg,
|
|
364
|
+
exception: rule.exception,
|
|
365
|
+
domains: cloneDomainListNode(rule.domains),
|
|
366
|
+
// Convert the separator based on the exception status
|
|
367
|
+
separator: {
|
|
368
|
+
type: 'Value',
|
|
369
|
+
value: rule.exception
|
|
370
|
+
? CosmeticRuleSeparator.AdgHtmlFilteringException
|
|
371
|
+
: CosmeticRuleSeparator.AdgHtmlFiltering,
|
|
372
|
+
},
|
|
373
|
+
body: {
|
|
374
|
+
type: 'Value',
|
|
375
|
+
value: unescapeDoubleQuotes(selector),
|
|
376
|
+
},
|
|
377
|
+
})), true);
|
|
378
|
+
}
|
|
379
|
+
}
|
|
380
|
+
|
|
381
|
+
export { ERROR_MESSAGES, HtmlRuleConverter };
|
|
@@ -0,0 +1,118 @@
|
|
|
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
|
+
import { CosmeticRuleType, RuleCategory } from '../../nodes/index.mjs';
|
|
8
|
+
import { AdblockSyntax } from '../../utils/adblockers.mjs';
|
|
9
|
+
import { HtmlRuleConverter } from './html.mjs';
|
|
10
|
+
import { ScriptletRuleConverter } from './scriptlet.mjs';
|
|
11
|
+
import { RuleConversionError } from '../../errors/rule-conversion-error.mjs';
|
|
12
|
+
import { RuleConverterBase } from '../base-interfaces/rule-converter-base.mjs';
|
|
13
|
+
import { AdgCosmeticRuleModifierConverter } from './rule-modifiers/adg.mjs';
|
|
14
|
+
import { CssInjectionRuleConverter } from './css.mjs';
|
|
15
|
+
import { ElementHidingRuleConverter } from './element-hiding.mjs';
|
|
16
|
+
import { HeaderRemovalRuleConverter } from './header-removal.mjs';
|
|
17
|
+
import { createNodeConversionResult } from '../base-interfaces/conversion-result.mjs';
|
|
18
|
+
|
|
19
|
+
/**
|
|
20
|
+
* @file Cosmetic rule converter
|
|
21
|
+
*/
|
|
22
|
+
/**
|
|
23
|
+
* Cosmetic rule converter class (also known as "non-basic rule converter")
|
|
24
|
+
*
|
|
25
|
+
* @todo Implement `convertToUbo` and `convertToAbp`
|
|
26
|
+
*/
|
|
27
|
+
class CosmeticRuleConverter extends RuleConverterBase {
|
|
28
|
+
/**
|
|
29
|
+
* Converts a cosmetic rule to AdGuard syntax, if possible.
|
|
30
|
+
*
|
|
31
|
+
* @param rule Rule node to convert
|
|
32
|
+
* @returns An object which follows the {@link NodeConversionResult} interface. Its `result` property contains
|
|
33
|
+
* the array of converted rule nodes, and its `isConverted` flag indicates whether the original rule was converted.
|
|
34
|
+
* If the rule was not converted, the result array will contain the original node with the same object reference
|
|
35
|
+
* @throws If the rule is invalid or cannot be converted
|
|
36
|
+
*/
|
|
37
|
+
static convertToAdg(rule) {
|
|
38
|
+
let subconverterResult;
|
|
39
|
+
// Convert cosmetic rule based on its type
|
|
40
|
+
switch (rule.type) {
|
|
41
|
+
case CosmeticRuleType.ElementHidingRule:
|
|
42
|
+
subconverterResult = ElementHidingRuleConverter.convertToAdg(rule);
|
|
43
|
+
break;
|
|
44
|
+
case CosmeticRuleType.ScriptletInjectionRule:
|
|
45
|
+
subconverterResult = ScriptletRuleConverter.convertToAdg(rule);
|
|
46
|
+
break;
|
|
47
|
+
case CosmeticRuleType.CssInjectionRule:
|
|
48
|
+
subconverterResult = CssInjectionRuleConverter.convertToAdg(rule);
|
|
49
|
+
break;
|
|
50
|
+
case CosmeticRuleType.HtmlFilteringRule:
|
|
51
|
+
// Handle special case: uBO response header filtering rule
|
|
52
|
+
// TODO: Optimize double CSS tokenization here
|
|
53
|
+
subconverterResult = HeaderRemovalRuleConverter.convertToAdg(rule);
|
|
54
|
+
if (subconverterResult.isConverted) {
|
|
55
|
+
break;
|
|
56
|
+
}
|
|
57
|
+
subconverterResult = HtmlRuleConverter.convertToAdg(rule);
|
|
58
|
+
break;
|
|
59
|
+
// Note: Currently, only ADG supports JS injection rules, so we don't need to convert them
|
|
60
|
+
case CosmeticRuleType.JsInjectionRule:
|
|
61
|
+
subconverterResult = createNodeConversionResult([rule], false);
|
|
62
|
+
break;
|
|
63
|
+
default:
|
|
64
|
+
throw new RuleConversionError('Unsupported cosmetic rule type');
|
|
65
|
+
}
|
|
66
|
+
let convertedModifiers;
|
|
67
|
+
// Convert cosmetic rule modifiers, if any
|
|
68
|
+
if (rule.modifiers) {
|
|
69
|
+
if (rule.syntax === AdblockSyntax.Ubo) {
|
|
70
|
+
// uBO doesn't support this rule:
|
|
71
|
+
// example.com##+js(set-constant.js, foo, bar):matches-path(/baz)
|
|
72
|
+
if (rule.type === CosmeticRuleType.ScriptletInjectionRule) {
|
|
73
|
+
throw new RuleConversionError('uBO scriptlet injection rules don\'t support cosmetic rule modifiers');
|
|
74
|
+
}
|
|
75
|
+
convertedModifiers = AdgCosmeticRuleModifierConverter.convertFromUbo(rule.modifiers);
|
|
76
|
+
}
|
|
77
|
+
else if (rule.syntax === AdblockSyntax.Abp) {
|
|
78
|
+
// TODO: Implement once ABP starts supporting cosmetic rule modifiers
|
|
79
|
+
throw new RuleConversionError('ABP don\'t support cosmetic rule modifiers');
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
if ((subconverterResult.result.length > 1 || subconverterResult.isConverted)
|
|
83
|
+
|| (convertedModifiers && convertedModifiers.isConverted)) {
|
|
84
|
+
// Add modifier list to the subconverter result rules
|
|
85
|
+
subconverterResult.result.forEach((subconverterRule) => {
|
|
86
|
+
if (convertedModifiers && subconverterRule.category === RuleCategory.Cosmetic) {
|
|
87
|
+
// eslint-disable-next-line no-param-reassign
|
|
88
|
+
subconverterRule.modifiers = convertedModifiers.result;
|
|
89
|
+
}
|
|
90
|
+
});
|
|
91
|
+
return subconverterResult;
|
|
92
|
+
}
|
|
93
|
+
return createNodeConversionResult([rule], false);
|
|
94
|
+
}
|
|
95
|
+
/**
|
|
96
|
+
* Converts a cosmetic rule to uBlock Origin syntax, if possible.
|
|
97
|
+
*
|
|
98
|
+
* @param rule Rule node to convert
|
|
99
|
+
* @returns An object which follows the {@link NodeConversionResult} interface. Its `result` property contains
|
|
100
|
+
* the array of converted rule nodes, and its `isConverted` flag indicates whether the original rule was converted.
|
|
101
|
+
* If the rule was not converted, the result array will contain the original node with the same object reference
|
|
102
|
+
* @throws If the rule is invalid or cannot be converted
|
|
103
|
+
*/
|
|
104
|
+
// TODO: Add support for other cosmetic rule types
|
|
105
|
+
static convertToUbo(rule) {
|
|
106
|
+
// Convert cosmetic rule based on its type
|
|
107
|
+
if (rule.type === CosmeticRuleType.ScriptletInjectionRule) {
|
|
108
|
+
if (rule.syntax === AdblockSyntax.Adg && rule.modifiers?.children.length) {
|
|
109
|
+
// e.g. example.com##+js(set-constant.js, foo, bar):matches-path(/baz)
|
|
110
|
+
throw new RuleConversionError('uBO scriptlet injection rules do not support cosmetic rule modifiers');
|
|
111
|
+
}
|
|
112
|
+
return ScriptletRuleConverter.convertToUbo(rule);
|
|
113
|
+
}
|
|
114
|
+
return createNodeConversionResult([rule], false);
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
|
|
118
|
+
export { CosmeticRuleConverter };
|
|
@@ -0,0 +1,79 @@
|
|
|
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
|
+
import { RuleConversionError } from '../../../errors/rule-conversion-error.mjs';
|
|
8
|
+
import { createModifierNode } from '../../../ast-utils/modifiers.mjs';
|
|
9
|
+
import { RegExpUtils } from '../../../utils/regexp.mjs';
|
|
10
|
+
import { REGEX_MARKER, OPEN_SQUARE_BRACKET, CLOSE_SQUARE_BRACKET, COMMA, ESCAPE_CHARACTER } from '../../../utils/constants.mjs';
|
|
11
|
+
import { StringUtils } from '../../../utils/string.mjs';
|
|
12
|
+
import { MultiValueMap } from '../../../utils/multi-value-map.mjs';
|
|
13
|
+
import { clone } from '../../../utils/clone.mjs';
|
|
14
|
+
import { createConversionResult } from '../../base-interfaces/conversion-result.mjs';
|
|
15
|
+
|
|
16
|
+
/**
|
|
17
|
+
* @file Cosmetic rule modifier converter from uBO to ADG
|
|
18
|
+
*/
|
|
19
|
+
const UBO_MATCHES_PATH_OPERATOR = 'matches-path';
|
|
20
|
+
const ADG_PATH_MODIFIER = 'path';
|
|
21
|
+
/**
|
|
22
|
+
* Special characters in modifier regexps that should be escaped
|
|
23
|
+
*/
|
|
24
|
+
const SPECIAL_MODIFIER_REGEX_CHARS = new Set([
|
|
25
|
+
OPEN_SQUARE_BRACKET,
|
|
26
|
+
CLOSE_SQUARE_BRACKET,
|
|
27
|
+
COMMA,
|
|
28
|
+
ESCAPE_CHARACTER,
|
|
29
|
+
]);
|
|
30
|
+
/**
|
|
31
|
+
* Helper class for converting cosmetic rule modifiers from uBO to ADG
|
|
32
|
+
*/
|
|
33
|
+
class AdgCosmeticRuleModifierConverter {
|
|
34
|
+
/**
|
|
35
|
+
* Converts a uBO cosmetic rule modifier list to ADG, if possible.
|
|
36
|
+
*
|
|
37
|
+
* @param modifierList Cosmetic rule modifier list node to convert
|
|
38
|
+
* @returns An object which follows the {@link ConversionResult} interface. Its `result` property contains
|
|
39
|
+
* the converted node, and its `isConverted` flag indicates whether the original node was converted.
|
|
40
|
+
* If the node was not converted, the result will contain the original node with the same object reference
|
|
41
|
+
* @throws If the modifier list cannot be converted
|
|
42
|
+
* @see {@link https://github.com/gorhill/uBlock/wiki/Procedural-cosmetic-filters#cosmetic-filter-operators}
|
|
43
|
+
*/
|
|
44
|
+
static convertFromUbo(modifierList) {
|
|
45
|
+
const conversionMap = new MultiValueMap();
|
|
46
|
+
modifierList.children.forEach((modifier, index) => {
|
|
47
|
+
// :matches-path
|
|
48
|
+
if (modifier.name.value === UBO_MATCHES_PATH_OPERATOR) {
|
|
49
|
+
if (!modifier.value) {
|
|
50
|
+
throw new RuleConversionError(`'${UBO_MATCHES_PATH_OPERATOR}' operator requires a value`);
|
|
51
|
+
}
|
|
52
|
+
const value = RegExpUtils.isRegexPattern(modifier.value.value)
|
|
53
|
+
? StringUtils.escapeCharacters(modifier.value.value, SPECIAL_MODIFIER_REGEX_CHARS)
|
|
54
|
+
: modifier.value.value;
|
|
55
|
+
// Convert uBO's `:matches-path(...)` operator to ADG's `$path=...` modifier
|
|
56
|
+
conversionMap.add(index, createModifierNode(ADG_PATH_MODIFIER,
|
|
57
|
+
// We should negate the regexp if the modifier is an exception
|
|
58
|
+
modifier.exception
|
|
59
|
+
// eslint-disable-next-line max-len
|
|
60
|
+
? `${REGEX_MARKER}${RegExpUtils.negateRegexPattern(RegExpUtils.patternToRegexp(value))}${REGEX_MARKER}`
|
|
61
|
+
: value));
|
|
62
|
+
}
|
|
63
|
+
});
|
|
64
|
+
// Check if we have any converted modifiers
|
|
65
|
+
if (conversionMap.size) {
|
|
66
|
+
const modifierListClone = clone(modifierList);
|
|
67
|
+
// Replace the original modifiers with the converted ones
|
|
68
|
+
modifierListClone.children = modifierListClone.children.map((modifier, index) => {
|
|
69
|
+
const convertedModifier = conversionMap.get(index);
|
|
70
|
+
return convertedModifier ?? modifier;
|
|
71
|
+
}).flat();
|
|
72
|
+
return createConversionResult(modifierListClone, true);
|
|
73
|
+
}
|
|
74
|
+
// Otherwise, just return the original modifier list
|
|
75
|
+
return createConversionResult(modifierList, false);
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
export { AdgCosmeticRuleModifierConverter };
|