@adguard/agtree 2.1.3 → 3.0.0
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 -15741
- package/dist/agtree.mjs +0 -15642
- package/dist/compatibility-table-data.js +0 -12634
|
@@ -0,0 +1,453 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* AGTree v3.0.0 (build date: Tue, 12 Nov 2024 14:05:06 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 { sprintf } from 'sprintf-js';
|
|
8
|
+
import { CosmeticRuleSeparatorUtils } from '../../utils/cosmetic-rule-separator.mjs';
|
|
9
|
+
import { AdblockSyntax } from '../../utils/adblockers.mjs';
|
|
10
|
+
import { DomainListParser } from '../misc/domain-list-parser.mjs';
|
|
11
|
+
import { ModifierListParser } from '../misc/modifier-list.mjs';
|
|
12
|
+
import { OPEN_SQUARE_BRACKET, DOLLAR_SIGN, CLOSE_SQUARE_BRACKET, UBO_SCRIPTLET_MASK, UBO_SCRIPTLET_MASK_LEGACY, ADG_SCRIPTLET_MASK, UBO_HTML_MASK } from '../../utils/constants.mjs';
|
|
13
|
+
import { RuleCategory, CosmeticRuleType } from '../../nodes/index.mjs';
|
|
14
|
+
import { AdblockSyntaxError } from '../../errors/adblock-syntax-error.mjs';
|
|
15
|
+
import { StringUtils } from '../../utils/string.mjs';
|
|
16
|
+
import { CommentParser } from '../comment/comment-parser.mjs';
|
|
17
|
+
import { defaultParserOptions } from '../options.mjs';
|
|
18
|
+
import { UboSelectorParser } from '../css/ubo-selector-parser.mjs';
|
|
19
|
+
import { AdgCssInjectionParser } from '../css/adg-css-injection-parser.mjs';
|
|
20
|
+
import { AbpSnippetInjectionBodyParser } from './body/abp-snippet-injection-body-parser.mjs';
|
|
21
|
+
import { UboScriptletInjectionBodyParser } from './body/ubo-scriptlet-injection-body-parser.mjs';
|
|
22
|
+
import { AdgScriptletInjectionBodyParser } from './body/adg-scriptlet-injection-body-parser.mjs';
|
|
23
|
+
import { BaseParser } from '../base-parser.mjs';
|
|
24
|
+
import { UboPseudoName } from '../../common/ubo-selector-common.mjs';
|
|
25
|
+
|
|
26
|
+
/**
|
|
27
|
+
* Possible error messages for uBO selectors. Formatted with {@link sprintf}.
|
|
28
|
+
*/
|
|
29
|
+
const ERROR_MESSAGES = {
|
|
30
|
+
EMPTY_RULE_BODY: 'Empty rule body',
|
|
31
|
+
INVALID_BODY_FOR_SEPARATOR: "Body '%s' is not valid for the '%s' cosmetic rule separator",
|
|
32
|
+
MISSING_ADGUARD_MODIFIER_LIST_END: "Missing '%s' at the end of the AdGuard modifier list in pattern '%s'",
|
|
33
|
+
MISSING_ADGUARD_MODIFIER_LIST_MARKER: "Missing '%s' at the beginning of the AdGuard modifier list in pattern '%s'",
|
|
34
|
+
SYNTAXES_CANNOT_BE_MIXED: "'%s' syntax cannot be mixed with '%s' syntax",
|
|
35
|
+
SYNTAX_DISABLED: "Parsing '%s' syntax is disabled, but the rule uses it",
|
|
36
|
+
};
|
|
37
|
+
const ADG_CSS_INJECTION_PATTERN = /^(?:.+){(?:.+)}$/;
|
|
38
|
+
/**
|
|
39
|
+
* `CosmeticRuleParser` is responsible for parsing cosmetic rules.
|
|
40
|
+
*
|
|
41
|
+
* Where possible, it automatically detects the difference between supported syntaxes:
|
|
42
|
+
* - AdGuard
|
|
43
|
+
* - uBlock Origin
|
|
44
|
+
* - Adblock Plus
|
|
45
|
+
*
|
|
46
|
+
* If the syntax is common / cannot be determined, the parser gives `Common` syntax.
|
|
47
|
+
*
|
|
48
|
+
* Please note that syntactically correct rules are parsed even if they are not actually
|
|
49
|
+
* compatible with the given adblocker. This is a completely natural behavior, meaningful
|
|
50
|
+
* checking of compatibility is not done at the parser level.
|
|
51
|
+
*/
|
|
52
|
+
// TODO: Make raw body parsing optional
|
|
53
|
+
// TODO: Split into smaller sections
|
|
54
|
+
class CosmeticRuleParser extends BaseParser {
|
|
55
|
+
/**
|
|
56
|
+
* Determines whether a rule is a cosmetic rule. The rule is considered cosmetic if it
|
|
57
|
+
* contains a cosmetic rule separator.
|
|
58
|
+
*
|
|
59
|
+
* @param raw Raw rule
|
|
60
|
+
* @returns `true` if the rule is a cosmetic rule, `false` otherwise
|
|
61
|
+
*/
|
|
62
|
+
static isCosmeticRule(raw) {
|
|
63
|
+
const trimmed = raw.trim();
|
|
64
|
+
if (CommentParser.isCommentRule(trimmed)) {
|
|
65
|
+
return false;
|
|
66
|
+
}
|
|
67
|
+
return CosmeticRuleSeparatorUtils.find(trimmed) !== null;
|
|
68
|
+
}
|
|
69
|
+
/**
|
|
70
|
+
* Parses a cosmetic rule. The structure of the cosmetic rules:
|
|
71
|
+
* - pattern (AdGuard pattern can have modifiers, other syntaxes don't)
|
|
72
|
+
* - separator
|
|
73
|
+
* - body
|
|
74
|
+
*
|
|
75
|
+
* @param raw Raw input to parse.
|
|
76
|
+
* @param options Global parser options.
|
|
77
|
+
* @param baseOffset Starting offset of the input. Node locations are calculated relative to this offset.
|
|
78
|
+
* @returns
|
|
79
|
+
* Parsed cosmetic rule AST or null if it failed to parse based on the known cosmetic rules
|
|
80
|
+
* @throws If the input matches the cosmetic rule pattern but syntactically invalid
|
|
81
|
+
*/
|
|
82
|
+
// TODO: Split to smaller functions
|
|
83
|
+
static parse(raw, options = defaultParserOptions, baseOffset = 0) {
|
|
84
|
+
// Find cosmetic rule separator - each cosmetic rule must have it, otherwise it is not a cosmetic rule
|
|
85
|
+
const separatorResult = CosmeticRuleSeparatorUtils.find(raw);
|
|
86
|
+
if (!separatorResult) {
|
|
87
|
+
return null;
|
|
88
|
+
}
|
|
89
|
+
let syntax = AdblockSyntax.Common;
|
|
90
|
+
let modifiers;
|
|
91
|
+
const patternStart = StringUtils.skipWS(raw);
|
|
92
|
+
const patternEnd = StringUtils.skipWSBack(raw, separatorResult.start - 1) + 1;
|
|
93
|
+
const bodyStart = StringUtils.skipWS(raw, separatorResult.end);
|
|
94
|
+
const bodyEnd = StringUtils.skipWSBack(raw) + 1;
|
|
95
|
+
// Note we use '<=' instead of '===' because we have bidirectional trim
|
|
96
|
+
if (bodyEnd <= bodyStart) {
|
|
97
|
+
throw new AdblockSyntaxError(ERROR_MESSAGES.EMPTY_RULE_BODY, baseOffset, baseOffset + raw.length);
|
|
98
|
+
}
|
|
99
|
+
// Step 1. Parse the pattern: it can be a domain list or a domain list with modifiers (AdGuard)
|
|
100
|
+
const rawPattern = raw.slice(patternStart, patternEnd);
|
|
101
|
+
let patternOffset = patternStart;
|
|
102
|
+
if (rawPattern[patternOffset] === OPEN_SQUARE_BRACKET) {
|
|
103
|
+
// Save offset to the beginning of the modifier list for later
|
|
104
|
+
const modifierListStart = patternOffset;
|
|
105
|
+
// Consume opening square bracket
|
|
106
|
+
patternOffset += 1;
|
|
107
|
+
// Skip whitespace after opening square bracket
|
|
108
|
+
patternOffset = StringUtils.skipWS(rawPattern, patternOffset);
|
|
109
|
+
// Open square bracket should be followed by a modifier separator: [$
|
|
110
|
+
if (rawPattern[patternOffset] !== DOLLAR_SIGN) {
|
|
111
|
+
throw new AdblockSyntaxError(sprintf(ERROR_MESSAGES.MISSING_ADGUARD_MODIFIER_LIST_MARKER, DOLLAR_SIGN, rawPattern), baseOffset + patternOffset, baseOffset + rawPattern.length);
|
|
112
|
+
}
|
|
113
|
+
// Consume modifier separator
|
|
114
|
+
patternOffset += 1;
|
|
115
|
+
// Skip whitespace after modifier separator
|
|
116
|
+
patternOffset = StringUtils.skipWS(rawPattern, patternOffset);
|
|
117
|
+
// Modifier list ends with the last unescaped square bracket
|
|
118
|
+
// We search for the last unescaped square bracket, because some modifiers can contain square brackets,
|
|
119
|
+
// e.g. [$domain=/example[0-9]\.(com|org)/]##.ad
|
|
120
|
+
const modifierListEnd = StringUtils.findLastUnescapedCharacter(rawPattern, CLOSE_SQUARE_BRACKET);
|
|
121
|
+
if (modifierListEnd === -1) {
|
|
122
|
+
throw new AdblockSyntaxError(sprintf(ERROR_MESSAGES.MISSING_ADGUARD_MODIFIER_LIST_END, CLOSE_SQUARE_BRACKET, rawPattern), baseOffset + patternOffset, baseOffset + rawPattern.length);
|
|
123
|
+
}
|
|
124
|
+
// Parse modifier list
|
|
125
|
+
modifiers = ModifierListParser.parse(raw.slice(patternOffset, modifierListEnd), options, baseOffset + patternOffset);
|
|
126
|
+
// Expand modifier list location to include the opening and closing square brackets
|
|
127
|
+
if (options.isLocIncluded) {
|
|
128
|
+
modifiers.start = baseOffset + modifierListStart;
|
|
129
|
+
modifiers.end = baseOffset + modifierListEnd + 1;
|
|
130
|
+
}
|
|
131
|
+
// Consume modifier list
|
|
132
|
+
patternOffset = modifierListEnd + 1;
|
|
133
|
+
// Change the syntax to ADG
|
|
134
|
+
syntax = AdblockSyntax.Adg;
|
|
135
|
+
}
|
|
136
|
+
// Skip whitespace after modifier list
|
|
137
|
+
patternOffset = StringUtils.skipWS(rawPattern, patternOffset);
|
|
138
|
+
// Parse domains
|
|
139
|
+
const domains = DomainListParser.parse(rawPattern.slice(patternOffset), options, baseOffset + patternOffset);
|
|
140
|
+
// Step 2. Parse the separator
|
|
141
|
+
const separator = {
|
|
142
|
+
type: 'Value',
|
|
143
|
+
value: separatorResult.separator,
|
|
144
|
+
};
|
|
145
|
+
if (options.isLocIncluded) {
|
|
146
|
+
separator.start = baseOffset + separatorResult.start;
|
|
147
|
+
separator.end = baseOffset + separatorResult.end;
|
|
148
|
+
}
|
|
149
|
+
const exception = CosmeticRuleSeparatorUtils.isException(separatorResult.separator);
|
|
150
|
+
// Step 3. Parse the rule body
|
|
151
|
+
let rawBody = raw.slice(bodyStart, bodyEnd);
|
|
152
|
+
/**
|
|
153
|
+
* Ensures that the rule syntax is common or the expected one. This function is used to prevent mixing
|
|
154
|
+
* different syntaxes in the same rule.
|
|
155
|
+
*
|
|
156
|
+
* @example
|
|
157
|
+
* The following rule mixes AdGuard and uBO syntaxes, because it uses AdGuard modifier list and uBO
|
|
158
|
+
* CSS injection:
|
|
159
|
+
* ```adblock
|
|
160
|
+
* [$path=/something]example.com##.foo:style(color: red)
|
|
161
|
+
* ```
|
|
162
|
+
* In this case, parser sets syntax to AdGuard, because it detects the AdGuard modifier list, but
|
|
163
|
+
* when parsing the rule body, it detects uBO CSS injection, which is not compatible with AdGuard.
|
|
164
|
+
*
|
|
165
|
+
* @param expectedSyntax Expected syntax
|
|
166
|
+
* @throws If the rule syntax is not common or the expected one
|
|
167
|
+
*/
|
|
168
|
+
const expectCommonOrSpecificSyntax = (expectedSyntax) => {
|
|
169
|
+
if (syntax !== AdblockSyntax.Common && syntax !== expectedSyntax) {
|
|
170
|
+
throw new AdblockSyntaxError(sprintf(ERROR_MESSAGES.SYNTAXES_CANNOT_BE_MIXED, expectedSyntax, syntax), baseOffset + patternStart, baseOffset + bodyEnd);
|
|
171
|
+
}
|
|
172
|
+
};
|
|
173
|
+
let uboSelector;
|
|
174
|
+
// Parse UBO rule modifiers
|
|
175
|
+
if (options.parseUboSpecificRules) {
|
|
176
|
+
uboSelector = UboSelectorParser.parse(rawBody, options, baseOffset + bodyStart);
|
|
177
|
+
rawBody = uboSelector.selector.value;
|
|
178
|
+
// Do not allow ADG modifiers and UBO modifiers in the same rule
|
|
179
|
+
if (uboSelector.modifiers && uboSelector.modifiers.children.length > 0) {
|
|
180
|
+
// If modifiers are present, that means that the ADG modifier list was parsed
|
|
181
|
+
expectCommonOrSpecificSyntax(AdblockSyntax.Ubo);
|
|
182
|
+
// Change the syntax to uBO
|
|
183
|
+
syntax = AdblockSyntax.Ubo;
|
|
184
|
+
// Store the rule modifiers
|
|
185
|
+
// Please note that not each special uBO modifier is a rule modifier, some of them are
|
|
186
|
+
// used for CSS injection, for example `:style()` and `:remove()`
|
|
187
|
+
for (const modifier of uboSelector.modifiers.children) {
|
|
188
|
+
// TODO: Add support for matches-media and element hiding rules
|
|
189
|
+
// TODO: Improve this condition if new uBO modifiers are added
|
|
190
|
+
if (modifier.name.value === UboPseudoName.MatchesPath) {
|
|
191
|
+
// Prepare the modifier list if it does not exist yet
|
|
192
|
+
if (!modifiers) {
|
|
193
|
+
modifiers = {
|
|
194
|
+
type: 'ModifierList',
|
|
195
|
+
children: [],
|
|
196
|
+
};
|
|
197
|
+
if (options.isLocIncluded) {
|
|
198
|
+
modifiers.start = baseOffset + bodyStart;
|
|
199
|
+
modifiers.end = baseOffset + bodyEnd;
|
|
200
|
+
}
|
|
201
|
+
}
|
|
202
|
+
modifiers.children.push(modifier);
|
|
203
|
+
}
|
|
204
|
+
}
|
|
205
|
+
}
|
|
206
|
+
}
|
|
207
|
+
const raws = {
|
|
208
|
+
text: raw,
|
|
209
|
+
};
|
|
210
|
+
const baseRule = {
|
|
211
|
+
category: RuleCategory.Cosmetic,
|
|
212
|
+
exception,
|
|
213
|
+
modifiers,
|
|
214
|
+
domains,
|
|
215
|
+
separator,
|
|
216
|
+
};
|
|
217
|
+
if (options.includeRaws) {
|
|
218
|
+
baseRule.raws = raws;
|
|
219
|
+
}
|
|
220
|
+
if (options.isLocIncluded) {
|
|
221
|
+
baseRule.start = baseOffset;
|
|
222
|
+
baseRule.end = baseOffset + raw.length;
|
|
223
|
+
}
|
|
224
|
+
const parseUboCssInjection = () => {
|
|
225
|
+
if (!uboSelector || !uboSelector.modifiers || uboSelector.modifiers.children?.length < 1) {
|
|
226
|
+
return null;
|
|
227
|
+
}
|
|
228
|
+
expectCommonOrSpecificSyntax(AdblockSyntax.Ubo);
|
|
229
|
+
const selectorList = uboSelector.selector;
|
|
230
|
+
let declarationList;
|
|
231
|
+
let mediaQueryList;
|
|
232
|
+
let remove = false;
|
|
233
|
+
for (const modifier of uboSelector.modifiers.children) {
|
|
234
|
+
switch (modifier.name.value) {
|
|
235
|
+
case UboPseudoName.Style:
|
|
236
|
+
declarationList = modifier.value;
|
|
237
|
+
break;
|
|
238
|
+
case UboPseudoName.Remove:
|
|
239
|
+
declarationList = {
|
|
240
|
+
type: 'Value',
|
|
241
|
+
value: '',
|
|
242
|
+
};
|
|
243
|
+
remove = true;
|
|
244
|
+
break;
|
|
245
|
+
case UboPseudoName.MatchesMedia:
|
|
246
|
+
mediaQueryList = modifier.value;
|
|
247
|
+
break;
|
|
248
|
+
}
|
|
249
|
+
}
|
|
250
|
+
// If neither `:style()` nor `:remove()` is present
|
|
251
|
+
if (!declarationList) {
|
|
252
|
+
return null;
|
|
253
|
+
}
|
|
254
|
+
const body = {
|
|
255
|
+
type: 'CssInjectionRuleBody',
|
|
256
|
+
selectorList,
|
|
257
|
+
declarationList,
|
|
258
|
+
mediaQueryList,
|
|
259
|
+
remove,
|
|
260
|
+
};
|
|
261
|
+
if (options.isLocIncluded) {
|
|
262
|
+
body.start = baseOffset + bodyStart;
|
|
263
|
+
body.end = baseOffset + bodyEnd;
|
|
264
|
+
}
|
|
265
|
+
return {
|
|
266
|
+
syntax: AdblockSyntax.Ubo,
|
|
267
|
+
type: CosmeticRuleType.CssInjectionRule,
|
|
268
|
+
body,
|
|
269
|
+
};
|
|
270
|
+
};
|
|
271
|
+
const parseElementHiding = () => {
|
|
272
|
+
const selectorList = {
|
|
273
|
+
type: 'Value',
|
|
274
|
+
value: rawBody,
|
|
275
|
+
};
|
|
276
|
+
if (options.isLocIncluded) {
|
|
277
|
+
selectorList.start = baseOffset + bodyStart;
|
|
278
|
+
selectorList.end = baseOffset + bodyEnd;
|
|
279
|
+
}
|
|
280
|
+
const body = {
|
|
281
|
+
type: 'ElementHidingRuleBody',
|
|
282
|
+
selectorList,
|
|
283
|
+
};
|
|
284
|
+
if (options.isLocIncluded) {
|
|
285
|
+
body.start = baseOffset + bodyStart;
|
|
286
|
+
body.end = baseOffset + bodyEnd;
|
|
287
|
+
}
|
|
288
|
+
return {
|
|
289
|
+
syntax,
|
|
290
|
+
type: CosmeticRuleType.ElementHidingRule,
|
|
291
|
+
body,
|
|
292
|
+
};
|
|
293
|
+
};
|
|
294
|
+
const parseAdgCssInjection = () => {
|
|
295
|
+
// TODO: Improve this detection. Need to cover the following cases:
|
|
296
|
+
// #$#body { color: red;
|
|
297
|
+
// #$#@media (min-width: 100px) { body { color: red; }
|
|
298
|
+
// ADG CSS injection
|
|
299
|
+
if (!ADG_CSS_INJECTION_PATTERN.test(rawBody)) {
|
|
300
|
+
return null;
|
|
301
|
+
}
|
|
302
|
+
expectCommonOrSpecificSyntax(AdblockSyntax.Adg);
|
|
303
|
+
return {
|
|
304
|
+
syntax: AdblockSyntax.Adg,
|
|
305
|
+
type: CosmeticRuleType.CssInjectionRule,
|
|
306
|
+
body: AdgCssInjectionParser.parse(rawBody, options, baseOffset + bodyStart),
|
|
307
|
+
};
|
|
308
|
+
};
|
|
309
|
+
const parseAbpSnippetInjection = () => {
|
|
310
|
+
if (!options.parseAbpSpecificRules) {
|
|
311
|
+
throw new AdblockSyntaxError(sprintf(ERROR_MESSAGES.SYNTAX_DISABLED, AdblockSyntax.Abp), baseOffset + bodyStart, baseOffset + bodyEnd);
|
|
312
|
+
}
|
|
313
|
+
expectCommonOrSpecificSyntax(AdblockSyntax.Abp);
|
|
314
|
+
const body = AbpSnippetInjectionBodyParser.parse(rawBody, options, baseOffset + bodyStart);
|
|
315
|
+
if (options.isLocIncluded) {
|
|
316
|
+
body.start = baseOffset + bodyStart;
|
|
317
|
+
body.end = baseOffset + bodyEnd;
|
|
318
|
+
}
|
|
319
|
+
return {
|
|
320
|
+
syntax: AdblockSyntax.Abp,
|
|
321
|
+
type: CosmeticRuleType.ScriptletInjectionRule,
|
|
322
|
+
body,
|
|
323
|
+
};
|
|
324
|
+
};
|
|
325
|
+
const parseUboScriptletInjection = () => {
|
|
326
|
+
if (!rawBody.startsWith(UBO_SCRIPTLET_MASK) && !rawBody.startsWith(UBO_SCRIPTLET_MASK_LEGACY)) {
|
|
327
|
+
return null;
|
|
328
|
+
}
|
|
329
|
+
if (!options.parseUboSpecificRules) {
|
|
330
|
+
throw new AdblockSyntaxError(sprintf(ERROR_MESSAGES.SYNTAX_DISABLED, AdblockSyntax.Ubo), baseOffset + bodyStart, baseOffset + bodyEnd);
|
|
331
|
+
}
|
|
332
|
+
expectCommonOrSpecificSyntax(AdblockSyntax.Ubo);
|
|
333
|
+
const body = UboScriptletInjectionBodyParser.parse(rawBody, options, baseOffset + bodyStart);
|
|
334
|
+
if (options.isLocIncluded) {
|
|
335
|
+
body.start = baseOffset + bodyStart;
|
|
336
|
+
body.end = baseOffset + bodyEnd;
|
|
337
|
+
}
|
|
338
|
+
return {
|
|
339
|
+
syntax: AdblockSyntax.Ubo,
|
|
340
|
+
type: CosmeticRuleType.ScriptletInjectionRule,
|
|
341
|
+
body,
|
|
342
|
+
};
|
|
343
|
+
};
|
|
344
|
+
const parseAdgScriptletInjection = () => {
|
|
345
|
+
// ADG scriptlet injection
|
|
346
|
+
if (!rawBody.startsWith(ADG_SCRIPTLET_MASK)) {
|
|
347
|
+
return null;
|
|
348
|
+
}
|
|
349
|
+
expectCommonOrSpecificSyntax(AdblockSyntax.Adg);
|
|
350
|
+
const body = AdgScriptletInjectionBodyParser.parse(rawBody, options, baseOffset + bodyStart);
|
|
351
|
+
if (options.isLocIncluded) {
|
|
352
|
+
body.start = baseOffset + bodyStart;
|
|
353
|
+
body.end = baseOffset + bodyEnd;
|
|
354
|
+
}
|
|
355
|
+
return {
|
|
356
|
+
syntax: AdblockSyntax.Adg,
|
|
357
|
+
type: CosmeticRuleType.ScriptletInjectionRule,
|
|
358
|
+
body,
|
|
359
|
+
};
|
|
360
|
+
};
|
|
361
|
+
const parseAdgJsInjection = () => {
|
|
362
|
+
expectCommonOrSpecificSyntax(AdblockSyntax.Adg);
|
|
363
|
+
const body = {
|
|
364
|
+
type: 'Value',
|
|
365
|
+
value: rawBody,
|
|
366
|
+
};
|
|
367
|
+
if (options.isLocIncluded) {
|
|
368
|
+
body.start = baseOffset + bodyStart;
|
|
369
|
+
body.end = baseOffset + bodyEnd;
|
|
370
|
+
}
|
|
371
|
+
return {
|
|
372
|
+
syntax: AdblockSyntax.Adg,
|
|
373
|
+
type: CosmeticRuleType.JsInjectionRule,
|
|
374
|
+
body,
|
|
375
|
+
};
|
|
376
|
+
};
|
|
377
|
+
const parseUboHtmlFiltering = () => {
|
|
378
|
+
if (!rawBody.startsWith(UBO_HTML_MASK)) {
|
|
379
|
+
return null;
|
|
380
|
+
}
|
|
381
|
+
if (!options.parseUboSpecificRules) {
|
|
382
|
+
throw new AdblockSyntaxError(sprintf(ERROR_MESSAGES.SYNTAX_DISABLED, AdblockSyntax.Ubo), baseOffset + bodyStart, baseOffset + bodyEnd);
|
|
383
|
+
}
|
|
384
|
+
expectCommonOrSpecificSyntax(AdblockSyntax.Ubo);
|
|
385
|
+
const body = {
|
|
386
|
+
type: 'Value',
|
|
387
|
+
value: rawBody,
|
|
388
|
+
};
|
|
389
|
+
if (options.isLocIncluded) {
|
|
390
|
+
body.start = baseOffset + bodyStart;
|
|
391
|
+
body.end = baseOffset + bodyEnd;
|
|
392
|
+
}
|
|
393
|
+
return {
|
|
394
|
+
syntax: AdblockSyntax.Ubo,
|
|
395
|
+
type: CosmeticRuleType.HtmlFilteringRule,
|
|
396
|
+
body,
|
|
397
|
+
};
|
|
398
|
+
};
|
|
399
|
+
const parseAdgHtmlFiltering = () => {
|
|
400
|
+
expectCommonOrSpecificSyntax(AdblockSyntax.Adg);
|
|
401
|
+
const body = {
|
|
402
|
+
type: 'Value',
|
|
403
|
+
value: rawBody,
|
|
404
|
+
};
|
|
405
|
+
if (options.isLocIncluded) {
|
|
406
|
+
body.start = baseOffset + bodyStart;
|
|
407
|
+
body.end = baseOffset + bodyEnd;
|
|
408
|
+
}
|
|
409
|
+
return {
|
|
410
|
+
syntax: AdblockSyntax.Adg,
|
|
411
|
+
type: CosmeticRuleType.HtmlFilteringRule,
|
|
412
|
+
body,
|
|
413
|
+
};
|
|
414
|
+
};
|
|
415
|
+
// Create a fast lookup table for cosmetic rule separators and their parsing functions.
|
|
416
|
+
// One separator can have multiple parsing functions. If the first function returns null,
|
|
417
|
+
// the next function is called, and so on.
|
|
418
|
+
// If all functions return null, an error should be thrown.
|
|
419
|
+
const separatorMap = {
|
|
420
|
+
'##': [parseUboHtmlFiltering, parseUboScriptletInjection, parseUboCssInjection, parseElementHiding],
|
|
421
|
+
'#@#': [parseUboHtmlFiltering, parseUboScriptletInjection, parseUboCssInjection, parseElementHiding],
|
|
422
|
+
'#?#': [parseUboCssInjection, parseElementHiding],
|
|
423
|
+
'#@?#': [parseUboCssInjection, parseElementHiding],
|
|
424
|
+
'#$#': [parseAdgCssInjection, parseAbpSnippetInjection],
|
|
425
|
+
'#@$#': [parseAdgCssInjection, parseAbpSnippetInjection],
|
|
426
|
+
'#$?#': [parseAdgCssInjection],
|
|
427
|
+
'#@$?#': [parseAdgCssInjection],
|
|
428
|
+
'#%#': [parseAdgScriptletInjection, parseAdgJsInjection],
|
|
429
|
+
'#@%#': [parseAdgScriptletInjection, parseAdgJsInjection],
|
|
430
|
+
$$: [parseAdgHtmlFiltering],
|
|
431
|
+
'$@$': [parseAdgHtmlFiltering],
|
|
432
|
+
};
|
|
433
|
+
const parseFunctions = separatorMap[separatorResult.separator];
|
|
434
|
+
let restProps;
|
|
435
|
+
for (const parseFunction of parseFunctions) {
|
|
436
|
+
restProps = parseFunction();
|
|
437
|
+
if (restProps) {
|
|
438
|
+
break;
|
|
439
|
+
}
|
|
440
|
+
}
|
|
441
|
+
// If none of the parsing functions returned a result, it means that the rule is unknown / invalid.
|
|
442
|
+
if (!restProps) {
|
|
443
|
+
throw new AdblockSyntaxError(sprintf(ERROR_MESSAGES.INVALID_BODY_FOR_SEPARATOR, rawBody, separatorResult.separator), baseOffset + bodyStart, baseOffset + bodyEnd);
|
|
444
|
+
}
|
|
445
|
+
// Combine the base rule with the rest of the properties.
|
|
446
|
+
return {
|
|
447
|
+
...baseRule,
|
|
448
|
+
...restProps,
|
|
449
|
+
};
|
|
450
|
+
}
|
|
451
|
+
}
|
|
452
|
+
|
|
453
|
+
export { CosmeticRuleParser, ERROR_MESSAGES };
|
|
@@ -0,0 +1,208 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* AGTree v3.0.0 (build date: Tue, 12 Nov 2024 14:05:06 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 { TokenType } from '@adguard/css-tokenizer';
|
|
8
|
+
import { AdblockSyntaxError } from '../../errors/adblock-syntax-error.mjs';
|
|
9
|
+
import { CSS_MEDIA_MARKER, EMPTY } from '../../utils/constants.mjs';
|
|
10
|
+
import { CssTokenStream } from './css-token-stream.mjs';
|
|
11
|
+
import { defaultParserOptions } from '../options.mjs';
|
|
12
|
+
import { BaseParser } from '../base-parser.mjs';
|
|
13
|
+
|
|
14
|
+
/**
|
|
15
|
+
* @file Parser for AdGuard CSS injections.
|
|
16
|
+
*/
|
|
17
|
+
const REMOVE_PROPERTY = 'remove';
|
|
18
|
+
const REMOVE_VALUE = 'true';
|
|
19
|
+
const ERROR_MESSAGES = {
|
|
20
|
+
MEDIA_QUERY_LIST_IS_EMPTY: 'Media query list is empty',
|
|
21
|
+
SELECTOR_LIST_IS_EMPTY: 'Selector list is empty',
|
|
22
|
+
DECLARATION_LIST_IS_EMPTY: 'Declaration list is empty',
|
|
23
|
+
};
|
|
24
|
+
/**
|
|
25
|
+
* Parser for AdGuard CSS injection.
|
|
26
|
+
*/
|
|
27
|
+
class AdgCssInjectionParser extends BaseParser {
|
|
28
|
+
/**
|
|
29
|
+
* Parses an AdGuard CSS injection.
|
|
30
|
+
*
|
|
31
|
+
* @param raw Raw input to parse.
|
|
32
|
+
* @param options Global parser options.
|
|
33
|
+
* @param baseOffset Starting offset of the input. Node locations are calculated relative to this offset.
|
|
34
|
+
*
|
|
35
|
+
* @returns Parsed AdGuard CSS injection {@link CssInjectionRuleBody}.
|
|
36
|
+
* @throws An {@link AdblockSyntaxError} if the selector list is syntactically invalid.
|
|
37
|
+
*/
|
|
38
|
+
static parse(raw, options = defaultParserOptions, baseOffset = 0) {
|
|
39
|
+
let mediaQueryList;
|
|
40
|
+
const selectorList = { type: 'Value', value: EMPTY };
|
|
41
|
+
const declarationList = { type: 'Value', value: EMPTY };
|
|
42
|
+
const stream = new CssTokenStream(raw, baseOffset);
|
|
43
|
+
// Skip leading whitespace characters
|
|
44
|
+
stream.skipWhitespace();
|
|
45
|
+
// We have two possible CSS injection formats:
|
|
46
|
+
// 1. @media (media-query-list) { selector list { declarations separated by semicolons } }
|
|
47
|
+
// 2. selector list { declarations separated by semicolons }
|
|
48
|
+
// Handle '@media' case:
|
|
49
|
+
let balanceShift = 0;
|
|
50
|
+
if (stream.getOrFail().type === TokenType.AtKeyword) {
|
|
51
|
+
// Currently only '@media' is supported, we should throw an error if we encounter anything else,
|
|
52
|
+
// like '@supports' or '@charset', etc.
|
|
53
|
+
stream.expect(TokenType.AtKeyword, { value: CSS_MEDIA_MARKER, balance: 0 });
|
|
54
|
+
stream.advance();
|
|
55
|
+
// Skip whitespace characters after @media keyword, if any
|
|
56
|
+
// @media (media-query-list) { ...
|
|
57
|
+
// ↑
|
|
58
|
+
// └ this one (if any)
|
|
59
|
+
stream.skipWhitespace();
|
|
60
|
+
const mediaQueryListStart = stream.getOrFail().start;
|
|
61
|
+
// Skip everything until we found the opening curly bracket of the declaration block
|
|
62
|
+
// @media media-query-list { ...
|
|
63
|
+
// ↑
|
|
64
|
+
// └ this one
|
|
65
|
+
let lastNonWsIndex = -1;
|
|
66
|
+
while (!stream.isEof()) {
|
|
67
|
+
const token = stream.getOrFail();
|
|
68
|
+
if (token.type === TokenType.OpenCurlyBracket && token.balance === 1) {
|
|
69
|
+
break;
|
|
70
|
+
}
|
|
71
|
+
if (token.type !== TokenType.Whitespace) {
|
|
72
|
+
lastNonWsIndex = token.end;
|
|
73
|
+
}
|
|
74
|
+
stream.advance();
|
|
75
|
+
}
|
|
76
|
+
// If the skipped tokens count is 0 without leading and trailing whitespace characters, then the media query
|
|
77
|
+
// list is empty
|
|
78
|
+
if (lastNonWsIndex === -1) {
|
|
79
|
+
throw new AdblockSyntaxError(ERROR_MESSAGES.MEDIA_QUERY_LIST_IS_EMPTY, baseOffset + mediaQueryListStart, baseOffset + raw.length);
|
|
80
|
+
}
|
|
81
|
+
// It is safe to use non-null assertion here, because we have already checked previous tokens.
|
|
82
|
+
// eslint-disable-next-line @typescript-eslint/no-non-null-assertion
|
|
83
|
+
const mediaQueryListEnd = lastNonWsIndex;
|
|
84
|
+
mediaQueryList = {
|
|
85
|
+
type: 'Value',
|
|
86
|
+
value: raw.slice(mediaQueryListStart, mediaQueryListEnd),
|
|
87
|
+
};
|
|
88
|
+
if (options.isLocIncluded) {
|
|
89
|
+
mediaQueryList.start = baseOffset + mediaQueryListStart;
|
|
90
|
+
mediaQueryList.end = baseOffset + mediaQueryListEnd;
|
|
91
|
+
}
|
|
92
|
+
// Next token should be an open curly bracket
|
|
93
|
+
// @media (media-query-list) { ...
|
|
94
|
+
// ↑
|
|
95
|
+
// └ this one
|
|
96
|
+
stream.expect(TokenType.OpenCurlyBracket);
|
|
97
|
+
stream.advance();
|
|
98
|
+
// '@media' at-rule wrap increases the balance level by 1 for the rule within the at-rule, because it
|
|
99
|
+
// has its own { ... } block
|
|
100
|
+
balanceShift = 1;
|
|
101
|
+
}
|
|
102
|
+
// Skip leading whitespace before the rule, if any
|
|
103
|
+
// Note: rule = selector list { declarations separated by semicolons }
|
|
104
|
+
stream.skipWhitespace();
|
|
105
|
+
const selectorStart = stream.getOrFail().start;
|
|
106
|
+
// Jump to the opening curly bracket of the declaration block, based on the balance level
|
|
107
|
+
// .selector { padding-top: 10px; padding-bottom: 10px; }
|
|
108
|
+
// ↑
|
|
109
|
+
// └ this one
|
|
110
|
+
const { skippedTrimmed: selectorTokensLength } = stream.skipUntilExt(TokenType.OpenCurlyBracket, balanceShift + 1);
|
|
111
|
+
stream.expect(TokenType.OpenCurlyBracket);
|
|
112
|
+
// If the skipped tokens count is 0 without leading and trailing whitespace characters, then the selector list
|
|
113
|
+
// is empty
|
|
114
|
+
if (selectorTokensLength === 0) {
|
|
115
|
+
throw new AdblockSyntaxError(ERROR_MESSAGES.SELECTOR_LIST_IS_EMPTY, baseOffset + selectorStart, baseOffset + raw.length);
|
|
116
|
+
}
|
|
117
|
+
// It is safe to use non-null assertion here, because we have already checked previous tokens.
|
|
118
|
+
// eslint-disable-next-line @typescript-eslint/no-non-null-assertion
|
|
119
|
+
const selectorEnd = stream.lookbehindForNonWs().end;
|
|
120
|
+
selectorList.value = raw.slice(selectorStart, selectorEnd);
|
|
121
|
+
if (options.isLocIncluded) {
|
|
122
|
+
selectorList.start = baseOffset + selectorStart;
|
|
123
|
+
selectorList.end = baseOffset + selectorEnd;
|
|
124
|
+
}
|
|
125
|
+
// Jump to the next token after the opening curly bracket of the declaration block
|
|
126
|
+
// .selector { padding-top: 10px; padding-bottom: 10px; }
|
|
127
|
+
// ↑
|
|
128
|
+
// └ this one
|
|
129
|
+
stream.advance();
|
|
130
|
+
// Skip whitespace characters after the opening curly bracket of the declaration block, if any
|
|
131
|
+
stream.skipWhitespace();
|
|
132
|
+
// Jump to the closing curly bracket of the declaration block, based on the balance level
|
|
133
|
+
// .selector { padding-top: 10px; padding-bottom: 10px; }
|
|
134
|
+
// ↑
|
|
135
|
+
// └ this one
|
|
136
|
+
const declarationsStart = stream.getOrFail().start;
|
|
137
|
+
const declarations = new Set();
|
|
138
|
+
let declarationsEnd = -1;
|
|
139
|
+
let remove = false;
|
|
140
|
+
let lastNonWsIndex = -1;
|
|
141
|
+
while (!stream.isEof()) {
|
|
142
|
+
const token = stream.getOrFail();
|
|
143
|
+
if (token.type === TokenType.CloseCurlyBracket && stream.getBalance() === balanceShift) {
|
|
144
|
+
declarationsEnd = lastNonWsIndex;
|
|
145
|
+
break;
|
|
146
|
+
}
|
|
147
|
+
if (token.type !== TokenType.Whitespace) {
|
|
148
|
+
lastNonWsIndex = token.end;
|
|
149
|
+
}
|
|
150
|
+
if (token.type === TokenType.Ident && stream.lookahead()?.type === TokenType.Colon) {
|
|
151
|
+
const ident = raw.slice(token.start, token.end);
|
|
152
|
+
declarations.add(ident);
|
|
153
|
+
// Consume ident and colon
|
|
154
|
+
stream.advance();
|
|
155
|
+
stream.advance();
|
|
156
|
+
// only 'remove: true' is allowed
|
|
157
|
+
if (ident === REMOVE_PROPERTY) {
|
|
158
|
+
// Skip whitespace after colon, if any
|
|
159
|
+
stream.skipWhitespace();
|
|
160
|
+
// Next token should be an ident, with value 'true'
|
|
161
|
+
stream.expect(TokenType.Ident, { value: REMOVE_VALUE });
|
|
162
|
+
stream.advance();
|
|
163
|
+
remove = true;
|
|
164
|
+
}
|
|
165
|
+
}
|
|
166
|
+
else {
|
|
167
|
+
stream.advance();
|
|
168
|
+
}
|
|
169
|
+
}
|
|
170
|
+
if (declarationsEnd === -1) {
|
|
171
|
+
throw new AdblockSyntaxError(ERROR_MESSAGES.DECLARATION_LIST_IS_EMPTY, baseOffset + declarationsStart, baseOffset + raw.length);
|
|
172
|
+
}
|
|
173
|
+
declarationList.value = raw.slice(declarationsStart, declarationsEnd);
|
|
174
|
+
if (options.isLocIncluded) {
|
|
175
|
+
declarationList.start = baseOffset + declarationsStart;
|
|
176
|
+
declarationList.end = baseOffset + declarationsEnd;
|
|
177
|
+
}
|
|
178
|
+
// Eat the close curly bracket of the declaration block
|
|
179
|
+
// .selector { padding-top: 10px; padding-bottom: 10px; }
|
|
180
|
+
// ↑
|
|
181
|
+
// └ this one
|
|
182
|
+
stream.expect(TokenType.CloseCurlyBracket);
|
|
183
|
+
stream.advance();
|
|
184
|
+
// Skip whitespace after the rule, if any
|
|
185
|
+
stream.skipWhitespace();
|
|
186
|
+
// If we have a media query, we should have an extra close curly bracket
|
|
187
|
+
if (balanceShift === 1) {
|
|
188
|
+
stream.expect(TokenType.CloseCurlyBracket);
|
|
189
|
+
stream.advance();
|
|
190
|
+
}
|
|
191
|
+
const result = {
|
|
192
|
+
type: 'CssInjectionRuleBody',
|
|
193
|
+
selectorList,
|
|
194
|
+
declarationList,
|
|
195
|
+
remove,
|
|
196
|
+
};
|
|
197
|
+
if (options.isLocIncluded) {
|
|
198
|
+
result.start = baseOffset;
|
|
199
|
+
result.end = baseOffset + raw.length;
|
|
200
|
+
}
|
|
201
|
+
if (mediaQueryList) {
|
|
202
|
+
result.mediaQueryList = mediaQueryList;
|
|
203
|
+
}
|
|
204
|
+
return result;
|
|
205
|
+
}
|
|
206
|
+
}
|
|
207
|
+
|
|
208
|
+
export { AdgCssInjectionParser, ERROR_MESSAGES, REMOVE_PROPERTY, REMOVE_VALUE };
|