@adguard/agtree 2.2.0 → 3.0.0-alpha.2
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/README.md +1 -1
- package/dist/ast-utils/clone.js +61 -0
- package/dist/ast-utils/modifiers.js +53 -0
- package/dist/ast-utils/network-rules.js +41 -0
- package/dist/ast-utils/scriptlets.js +87 -0
- package/dist/common/abp-snippet-injection-body-common.js +23 -0
- package/dist/common/agent-common.js +56 -0
- package/dist/common/ubo-selector-common.js +17 -0
- package/dist/compatibility-tables/base.js +262 -0
- package/dist/compatibility-tables/compatibility-table-data.js +11 -0
- package/dist/compatibility-tables/modifiers.js +55 -0
- package/dist/compatibility-tables/platforms.js +76 -0
- package/dist/compatibility-tables/redirects.js +100 -0
- package/dist/compatibility-tables/schemas/base.js +111 -0
- package/dist/compatibility-tables/schemas/modifier.js +129 -0
- package/dist/compatibility-tables/schemas/platform.js +69 -0
- package/dist/compatibility-tables/schemas/redirect.js +29 -0
- package/dist/compatibility-tables/schemas/resource-type.js +36 -0
- package/dist/compatibility-tables/schemas/scriptlet.js +79 -0
- package/dist/compatibility-tables/scriptlets.js +28 -0
- package/dist/compatibility-tables/utils/platform-helpers.js +105 -0
- package/dist/compatibility-tables/utils/resource-type-helpers.js +61 -0
- package/dist/compatibility-tables/utils/zod-camelcase.js +25 -0
- package/dist/converter/base-interfaces/base-converter.js +59 -0
- package/dist/converter/base-interfaces/conversion-result.js +38 -0
- package/dist/converter/base-interfaces/rule-converter-base.js +60 -0
- package/dist/converter/comment/index.js +54 -0
- package/dist/converter/cosmetic/css.js +69 -0
- package/dist/converter/cosmetic/element-hiding.js +62 -0
- package/dist/converter/cosmetic/header-removal.js +123 -0
- package/dist/converter/cosmetic/html.js +379 -0
- package/dist/converter/cosmetic/index.js +118 -0
- package/dist/converter/cosmetic/rule-modifiers/adg.js +79 -0
- package/dist/converter/cosmetic/scriptlet.js +354 -0
- package/dist/converter/css/index.js +188 -0
- package/dist/converter/data/css.js +126 -0
- package/dist/converter/filter-list.js +88 -0
- package/dist/converter/index.js +8 -0
- package/dist/converter/misc/network-rule-modifier.js +311 -0
- package/dist/converter/network/index.js +99 -0
- package/dist/converter/raw-filter-list.js +56 -0
- package/dist/converter/rule.js +81 -0
- package/dist/deserializer/base-deserializer.js +29 -0
- package/dist/deserializer/comment/agent-comment-deserializer.js +79 -0
- package/dist/deserializer/comment/agent-deserializer.js +65 -0
- package/dist/deserializer/comment/comment-rule-deserializer.js +54 -0
- package/dist/deserializer/comment/config-comment-deserializer.js +111 -0
- package/dist/deserializer/comment/hint-comment-deserializer.js +72 -0
- package/dist/deserializer/comment/hint-deserializer.js +85 -0
- package/dist/deserializer/comment/metadata-comment-deserializer.js +69 -0
- package/dist/deserializer/comment/pre-processor-comment-deserializer.js +112 -0
- package/dist/deserializer/comment/simple-comment-deserializer.js +65 -0
- package/dist/deserializer/cosmetic/cosmetic-rule-deserializer.js +131 -0
- package/dist/deserializer/cosmetic/css-injection-body-deserializer.js +56 -0
- package/dist/deserializer/cosmetic/element-hiding-body-deserializer.js +48 -0
- package/dist/deserializer/cosmetic/scriptlet-body/abp-snippet-injection-body-deserializer.js +39 -0
- package/dist/deserializer/cosmetic/scriptlet-body/adg-scriptlet-injection-body-deserializer.js +40 -0
- package/dist/deserializer/cosmetic/scriptlet-body/scriptlet-body-deserializer.js +54 -0
- package/dist/deserializer/cosmetic/scriptlet-body/ubo-scriptlet-injection-body-deserializer.js +38 -0
- package/dist/deserializer/empty-rule-deserializer.js +48 -0
- package/dist/deserializer/filterlist-deserializer.js +85 -0
- package/dist/deserializer/index.js +8 -0
- package/dist/deserializer/invalid-rule-deserializer.js +50 -0
- package/dist/deserializer/invalid-rule-error-node-deserializer.js +50 -0
- package/dist/deserializer/misc/domain-list-deserializer.js +64 -0
- package/dist/deserializer/misc/list-item-deserializer.js +69 -0
- package/dist/deserializer/misc/list-items-deserializer.js +30 -0
- package/dist/deserializer/misc/logical-expression-deserializer.js +196 -0
- package/dist/deserializer/misc/modifier-deserializer.js +87 -0
- package/dist/deserializer/misc/modifier-list-deserializer.js +61 -0
- package/dist/deserializer/misc/parameter-list-deserializer.js +64 -0
- package/dist/deserializer/misc/value-deserializer.js +50 -0
- package/dist/deserializer/network/host-rule-deserializer.js +67 -0
- package/dist/deserializer/network/hostname-list-deserializer.js +56 -0
- package/dist/deserializer/network/network-rule-deserializer.js +65 -0
- package/dist/deserializer/rule-deserializer.js +65 -0
- package/dist/deserializer/syntax-deserialization-map.js +21 -0
- package/dist/errors/adblock-syntax-error.js +39 -0
- package/dist/errors/binary-schema-mismatch-error.js +37 -0
- package/dist/errors/not-implemented-error.js +31 -0
- package/dist/errors/rule-conversion-error.js +26 -0
- package/dist/generator/base-generator.js +27 -0
- package/dist/generator/comment/agent-comment-generator.js +31 -0
- package/dist/generator/comment/agent-generator.js +36 -0
- package/dist/generator/comment/comment-rule-generator.js +47 -0
- package/dist/generator/comment/config-comment-generator.js +45 -0
- package/dist/generator/comment/hint-comment-generator.js +28 -0
- package/dist/generator/comment/hint-generator.js +33 -0
- package/dist/generator/comment/metadata-comment-generator.js +33 -0
- package/dist/generator/comment/pre-processor-comment-generator.js +48 -0
- package/dist/generator/comment/simple-comment-generator.js +29 -0
- package/dist/generator/cosmetic/body/abp-snippet-injection-body-generator.js +38 -0
- package/dist/generator/cosmetic/body/adg-scriptlet-injection-body-generator.js +43 -0
- package/dist/generator/cosmetic/body/ubo-scriptlet-injection-body-generator.js +45 -0
- package/dist/generator/cosmetic/cosmetic-rule-body-generator.js +94 -0
- package/dist/generator/cosmetic/cosmetic-rule-generator.js +54 -0
- package/dist/generator/cosmetic/cosmetic-rule-pattern-generator.js +42 -0
- package/dist/generator/css/adg-css-injection-generator.js +42 -0
- package/dist/generator/filterlist-generator.js +67 -0
- package/dist/generator/index.js +9 -0
- package/dist/generator/misc/domain-list-generator.js +26 -0
- package/dist/generator/misc/list-items-generator.js +39 -0
- package/dist/generator/misc/logical-expression-generator.js +48 -0
- package/dist/generator/misc/modifier-generator.js +34 -0
- package/dist/generator/misc/modifier-list-generator.js +29 -0
- package/dist/generator/misc/parameter-list-generator.js +41 -0
- package/dist/generator/misc/value-generator.js +24 -0
- package/dist/generator/network/host-rule-generator.js +39 -0
- package/dist/generator/network/network-rule-generator.js +38 -0
- package/dist/generator/rule-generator.js +65 -0
- package/dist/index.js +70 -0
- package/dist/marshalling-utils/comment/agent-comment-common.js +21 -0
- package/dist/marshalling-utils/comment/agent-common.js +40 -0
- package/dist/marshalling-utils/comment/config-comment-common.js +54 -0
- package/dist/marshalling-utils/comment/hint-comment-common.js +22 -0
- package/dist/marshalling-utils/comment/hint-common.js +56 -0
- package/dist/marshalling-utils/comment/metadata-comment-common.js +41 -0
- package/dist/marshalling-utils/comment/pre-processor-comment-common.js +59 -0
- package/dist/marshalling-utils/comment/simple-comment-common.js +22 -0
- package/dist/marshalling-utils/cosmetic/body/abp-snippet-injection-body-common.js +61 -0
- package/dist/marshalling-utils/cosmetic/body/adg-scriptlet-injection-body-common.js +66 -0
- package/dist/marshalling-utils/cosmetic/body/css-injection-body-common.js +24 -0
- package/dist/marshalling-utils/cosmetic/body/element-hiding-body-common.js +21 -0
- package/dist/marshalling-utils/cosmetic/body/ubo-scriptlet-injection-body-common.js +114 -0
- package/dist/marshalling-utils/cosmetic/cosmetic-rule-common.js +48 -0
- package/dist/marshalling-utils/empty-rule-common.js +20 -0
- package/dist/marshalling-utils/filter-list-common.js +21 -0
- package/dist/marshalling-utils/invalid-rule-common.js +21 -0
- package/dist/marshalling-utils/invalid-rule-error-node-common.js +22 -0
- package/dist/marshalling-utils/misc/binary-type-common.js +66 -0
- package/dist/marshalling-utils/misc/domain-list-common.js +36 -0
- package/dist/marshalling-utils/misc/host-rule-common.js +25 -0
- package/dist/marshalling-utils/misc/hostname-list-common.js +21 -0
- package/dist/marshalling-utils/misc/list-item-common.js +22 -0
- package/dist/marshalling-utils/misc/logical-expression-common.js +83 -0
- package/dist/marshalling-utils/misc/modifier-common.js +231 -0
- package/dist/marshalling-utils/misc/modifier-list-common.js +21 -0
- package/dist/marshalling-utils/misc/parameter-list-common.js +21 -0
- package/dist/marshalling-utils/misc/value-common.js +22 -0
- package/dist/marshalling-utils/network/network-rule-common.js +25 -0
- package/dist/marshalling-utils/syntax-serialization-map.js +30 -0
- package/dist/nodes/index.js +168 -0
- package/dist/package.json.js +9 -0
- package/dist/parser/base-parser.js +30 -0
- package/dist/parser/comment/agent-comment-parser.js +119 -0
- package/dist/parser/comment/agent-parser.js +110 -0
- package/dist/parser/comment/comment-parser.js +108 -0
- package/dist/parser/comment/config-comment-parser.js +137 -0
- package/dist/parser/comment/hint-comment-parser.js +117 -0
- package/dist/parser/comment/hint-parser.js +129 -0
- package/dist/parser/comment/metadata-comment-parser.js +129 -0
- package/dist/parser/comment/preprocessor-parser.js +199 -0
- package/dist/parser/comment/simple-comment-parser.js +106 -0
- package/dist/parser/cosmetic/body/abp-snippet-injection-body-parser.js +79 -0
- package/dist/parser/cosmetic/body/adg-scriptlet-injection-body-parser.js +149 -0
- package/dist/parser/cosmetic/body/ubo-scriptlet-injection-body-parser.js +110 -0
- package/dist/parser/cosmetic/cosmetic-rule-parser.js +453 -0
- package/dist/parser/css/adg-css-injection-parser.js +208 -0
- package/dist/parser/css/balancing.js +94 -0
- package/dist/parser/css/constants.js +18 -0
- package/dist/parser/css/css-token-stream.js +343 -0
- package/dist/parser/css/ubo-selector-parser.js +369 -0
- package/dist/parser/filterlist-parser.js +102 -0
- package/dist/parser/index.js +12 -0
- package/dist/parser/misc/app-list-parser.js +45 -0
- package/dist/parser/misc/domain-list-parser.js +52 -0
- package/dist/parser/misc/list-items-parser.js +116 -0
- package/dist/parser/misc/logical-expression-parser.js +279 -0
- package/dist/parser/misc/method-list-parser.js +46 -0
- package/dist/parser/misc/modifier-list.js +70 -0
- package/dist/parser/misc/modifier-parser.js +89 -0
- package/dist/parser/misc/parameter-list-parser.js +75 -0
- package/dist/parser/misc/stealth-option-list-parser.js +46 -0
- package/dist/parser/misc/ubo-parameter-list-parser.js +149 -0
- package/dist/parser/misc/value-parser.js +37 -0
- package/dist/parser/network/host-rule-parser.js +130 -0
- package/dist/parser/network/network-rule-parser.js +117 -0
- package/dist/parser/options.js +23 -0
- package/dist/parser/rule-parser.js +192 -0
- package/dist/serializer/base-serializer.js +29 -0
- package/dist/serializer/comment/agent-comment-serializer.js +74 -0
- package/dist/serializer/comment/agent-serializer.js +59 -0
- package/dist/serializer/comment/comment-rule-serializer.js +105 -0
- package/dist/serializer/comment/config-comment-serializer.js +82 -0
- package/dist/serializer/comment/hint-comment-serializer.js +65 -0
- package/dist/serializer/comment/hint-serializer.js +54 -0
- package/dist/serializer/comment/metadata-comment-serializer.js +73 -0
- package/dist/serializer/comment/pre-processor-comment-serializer.js +71 -0
- package/dist/serializer/comment/simple-comment-serializer.js +52 -0
- package/dist/serializer/cosmetic/body/abp-snippet-injection-body-serializer.js +36 -0
- package/dist/serializer/cosmetic/body/adg-scriptlet-injection-body-serializer.js +36 -0
- package/dist/serializer/cosmetic/body/scriptlet-body-serializer.js +50 -0
- package/dist/serializer/cosmetic/body/ubo-scriptlet-injection-body-serializer.js +36 -0
- package/dist/serializer/cosmetic/cosmetic-rule-serializer.js +120 -0
- package/dist/serializer/cosmetic/css-injection-body-serializer.js +51 -0
- package/dist/serializer/cosmetic/element-hiding-body-serializer.js +40 -0
- package/dist/serializer/empty-rule-serializer.js +37 -0
- package/dist/serializer/filterlist-serializer.js +45 -0
- package/dist/serializer/index.js +7 -0
- package/dist/serializer/invalid-rule-error-node-serializer.js +41 -0
- package/dist/serializer/invalid-rule-serializer.js +40 -0
- package/dist/serializer/misc/domain-list-serializer.js +64 -0
- package/dist/serializer/misc/list-item-serializer.js +58 -0
- package/dist/serializer/misc/list-items-serializer.js +29 -0
- package/dist/serializer/misc/logical-expression-serializer.js +136 -0
- package/dist/serializer/misc/modifier-list-serializer.js +58 -0
- package/dist/serializer/misc/modifier-serializer.js +49 -0
- package/dist/serializer/misc/parameter-list-serializer.js +52 -0
- package/dist/serializer/misc/value-serializer.js +50 -0
- package/dist/serializer/network/host-rule-serializer.js +70 -0
- package/dist/serializer/network/hostname-list-serializer.js +53 -0
- package/dist/serializer/network/network-rule-serializer.js +54 -0
- package/dist/serializer/rule-serializer.js +61 -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 +15 -0
- package/dist/types/common/agent-common.d.ts +10 -0
- package/dist/types/common/ubo-selector-common.d.ts +10 -0
- package/dist/types/compatibility-tables/base.d.ts +157 -0
- package/dist/types/compatibility-tables/compatibility-table-data.d.ts +68 -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 +49 -0
- package/dist/types/compatibility-tables/redirects.d.ts +33 -0
- package/dist/types/compatibility-tables/schemas/base.d.ts +124 -0
- package/dist/types/compatibility-tables/schemas/index.d.ts +8 -0
- package/dist/types/compatibility-tables/schemas/modifier.d.ts +36 -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 +41 -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 +40 -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 +16 -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 +18 -0
- package/dist/types/deserializer/cosmetic/css-injection-body-deserializer.d.ts +15 -0
- package/dist/types/deserializer/cosmetic/element-hiding-body-deserializer.d.ts +16 -0
- package/dist/types/deserializer/cosmetic/scriptlet-body/abp-snippet-injection-body-deserializer.d.ts +17 -0
- package/dist/types/deserializer/cosmetic/scriptlet-body/adg-scriptlet-injection-body-deserializer.d.ts +18 -0
- package/dist/types/deserializer/cosmetic/scriptlet-body/scriptlet-body-deserializer.d.ts +19 -0
- package/dist/types/deserializer/cosmetic/scriptlet-body/ubo-scriptlet-injection-body-deserializer.d.ts +17 -0
- package/dist/types/deserializer/empty-rule-deserializer.d.ts +16 -0
- package/dist/types/deserializer/filterlist-deserializer.d.ts +34 -0
- package/dist/types/deserializer/index.d.ts +2 -0
- package/dist/types/deserializer/invalid-rule-deserializer.d.ts +16 -0
- package/dist/types/deserializer/invalid-rule-error-node-deserializer.d.ts +16 -0
- package/dist/types/deserializer/misc/domain-list-deserializer.d.ts +15 -0
- package/dist/types/deserializer/misc/list-item-deserializer.d.ts +19 -0
- package/dist/types/deserializer/misc/list-items-deserializer.d.ts +16 -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 +18 -0
- package/dist/types/deserializer/misc/value-deserializer.d.ts +17 -0
- package/dist/types/deserializer/network/host-rule-deserializer.d.ts +18 -0
- package/dist/types/deserializer/network/hostname-list-deserializer.d.ts +15 -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 +14 -0
- package/dist/types/generator/comment/agent-generator.d.ts +15 -0
- package/dist/types/generator/comment/comment-rule-generator.d.ts +14 -0
- package/dist/types/generator/comment/config-comment-generator.d.ts +14 -0
- package/dist/types/generator/comment/hint-comment-generator.d.ts +14 -0
- package/dist/types/generator/comment/hint-generator.d.ts +14 -0
- package/dist/types/generator/comment/index.d.ts +1 -0
- package/dist/types/generator/comment/metadata-comment-generator.d.ts +14 -0
- package/dist/types/generator/comment/pre-processor-comment-generator.d.ts +14 -0
- package/dist/types/generator/comment/simple-comment-generator.d.ts +14 -0
- package/dist/types/generator/cosmetic/body/abp-snippet-injection-body-generator.d.ts +15 -0
- package/dist/types/generator/cosmetic/body/adg-scriptlet-injection-body-generator.d.ts +21 -0
- package/dist/types/generator/cosmetic/body/ubo-scriptlet-injection-body-generator.d.ts +21 -0
- package/dist/types/generator/cosmetic/cosmetic-rule-body-generator.d.ts +20 -0
- package/dist/types/generator/cosmetic/cosmetic-rule-generator.d.ts +28 -0
- package/dist/types/generator/cosmetic/cosmetic-rule-pattern-generator.d.ts +18 -0
- package/dist/types/generator/cosmetic/index.d.ts +1 -0
- package/dist/types/generator/css/adg-css-injection-generator.d.ts +15 -0
- package/dist/types/generator/css/ubo-selector-generator.d.ts +14 -0
- package/dist/types/generator/filterlist-generator.d.ts +18 -0
- package/dist/types/generator/index.d.ts +3 -0
- package/dist/types/generator/misc/domain-list-generator.d.ts +15 -0
- package/dist/types/generator/misc/list-items-generator.d.ts +25 -0
- package/dist/types/generator/misc/logical-expression-generator.d.ts +14 -0
- package/dist/types/generator/misc/modifier-generator.d.ts +14 -0
- package/dist/types/generator/misc/modifier-list-generator.d.ts +14 -0
- package/dist/types/generator/misc/parameter-list-generator.d.ts +15 -0
- package/dist/types/generator/misc/value-generator.d.ts +14 -0
- package/dist/types/generator/network/host-rule-generator.d.ts +14 -0
- package/dist/types/generator/network/index.d.ts +2 -0
- package/dist/types/generator/network/network-rule-generator.d.ts +14 -0
- package/dist/types/generator/rule-generator.d.ts +24 -0
- package/dist/types/index.d.ts +55 -0
- package/dist/types/marshalling-utils/comment/agent-comment-common.d.ts +14 -0
- package/dist/types/marshalling-utils/comment/agent-common.d.ts +20 -0
- package/dist/types/marshalling-utils/comment/config-comment-common.d.ts +42 -0
- package/dist/types/marshalling-utils/comment/hint-comment-common.d.ts +15 -0
- package/dist/types/marshalling-utils/comment/hint-common.d.ts +33 -0
- package/dist/types/marshalling-utils/comment/metadata-comment-common.d.ts +21 -0
- package/dist/types/marshalling-utils/comment/pre-processor-comment-common.d.ts +37 -0
- package/dist/types/marshalling-utils/comment/simple-comment-common.d.ts +15 -0
- package/dist/types/marshalling-utils/cosmetic/body/abp-snippet-injection-body-common.d.ts +23 -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 +17 -0
- package/dist/types/marshalling-utils/cosmetic/body/element-hiding-body-common.d.ts +14 -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 +28 -0
- package/dist/types/marshalling-utils/empty-rule-common.d.ts +13 -0
- package/dist/types/marshalling-utils/filter-list-common.d.ts +14 -0
- package/dist/types/marshalling-utils/invalid-rule-common.d.ts +14 -0
- package/dist/types/marshalling-utils/invalid-rule-error-node-common.d.ts +15 -0
- package/dist/types/marshalling-utils/misc/binary-type-common.d.ts +57 -0
- package/dist/types/marshalling-utils/misc/domain-list-common.d.ts +24 -0
- package/dist/types/marshalling-utils/misc/host-rule-common.d.ts +18 -0
- package/dist/types/marshalling-utils/misc/hostname-list-common.d.ts +14 -0
- package/dist/types/marshalling-utils/misc/list-item-common.d.ts +15 -0
- package/dist/types/marshalling-utils/misc/logical-expression-common.d.ts +47 -0
- package/dist/types/marshalling-utils/misc/modifier-common.d.ts +41 -0
- package/dist/types/marshalling-utils/misc/modifier-list-common.d.ts +14 -0
- package/dist/types/marshalling-utils/misc/parameter-list-common.d.ts +14 -0
- package/dist/types/marshalling-utils/misc/value-common.d.ts +15 -0
- package/dist/types/marshalling-utils/network/network-rule-common.d.ts +18 -0
- package/dist/types/marshalling-utils/syntax-serialization-map.d.ts +2 -0
- package/dist/types/nodes/index.d.ts +1183 -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 +6 -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 +37 -0
- package/dist/types/parser/misc/logical-expression-parser.d.ts +42 -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 +17 -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 +21 -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 +15 -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 +17 -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 +19 -0
- package/dist/types/serializer/cosmetic/css-injection-body-serializer.d.ts +15 -0
- package/dist/types/serializer/cosmetic/element-hiding-body-serializer.d.ts +15 -0
- package/dist/types/serializer/empty-rule-serializer.d.ts +15 -0
- package/dist/types/serializer/filterlist-serializer.d.ts +15 -0
- package/dist/types/serializer/index.d.ts +1 -0
- package/dist/types/serializer/invalid-rule-error-node-serializer.d.ts +15 -0
- package/dist/types/serializer/invalid-rule-serializer.d.ts +15 -0
- package/dist/types/serializer/misc/domain-list-serializer.d.ts +21 -0
- package/dist/types/serializer/misc/list-item-serializer.d.ts +16 -0
- package/dist/types/serializer/misc/list-items-serializer.d.ts +15 -0
- package/dist/types/serializer/misc/logical-expression-serializer.d.ts +52 -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 +17 -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 +15 -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 +49 -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 +29 -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 +146 -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 +132 -0
- package/dist/types/utils/position-provider.d.ts +46 -0
- package/dist/types/utils/quotes.d.ts +94 -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 +280 -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 +12 -0
- package/dist/types/version.d.ts +5 -0
- package/dist/utils/adblockers.js +56 -0
- package/dist/utils/binary-schema-version.js +17 -0
- package/dist/utils/byte-buffer.js +91 -0
- package/dist/utils/categorizer.js +44 -0
- package/dist/utils/clone.js +28 -0
- package/dist/utils/constants.js +249 -0
- package/dist/utils/cosmetic-rule-separator.js +127 -0
- package/dist/utils/deep-freeze.js +32 -0
- package/dist/utils/domain.js +59 -0
- package/dist/utils/error.js +49 -0
- package/dist/utils/index.js +21 -0
- package/dist/utils/input-byte-buffer.js +265 -0
- package/dist/utils/is-chromium.js +20 -0
- package/dist/utils/logical-expression.js +92 -0
- package/dist/utils/multi-value-map.js +33 -0
- package/dist/utils/output-byte-buffer.js +231 -0
- package/dist/utils/position-provider.js +73 -0
- package/dist/utils/quotes.js +214 -0
- package/dist/utils/regexp.js +176 -0
- package/dist/utils/string.js +559 -0
- package/dist/utils/text-decoder-polyfill.js +107 -0
- package/dist/utils/text-encoder-polyfill.js +78 -0
- package/dist/utils/type-guards.js +47 -0
- package/dist/validator/constants.js +210 -0
- package/dist/validator/helpers.js +45 -0
- package/dist/validator/index.js +174 -0
- package/dist/validator/value.js +568 -0
- package/dist/version.js +18 -0
- package/package.json +61 -39
- package/dist/agtree.d.ts +0 -4155
- package/dist/agtree.js +0 -15819
- package/dist/agtree.mjs +0 -15720
- package/dist/compatibility-table-data.js +0 -12782
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* AGTree v3.0.0-alpha.2 (build date: Tue, 17 Dec 2024 16:50:04 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 { LF, FF, CR } from './constants.js';
|
|
8
|
+
|
|
9
|
+
/**
|
|
10
|
+
* @file Position provider class.
|
|
11
|
+
*/
|
|
12
|
+
/**
|
|
13
|
+
* Class responsible for converting a character offset in source code into a line and column position.
|
|
14
|
+
* This conversion is particularly needed in linters and VSCode extensions,
|
|
15
|
+
* where line and column numbers are more human-friendly and intuitive than character offsets.
|
|
16
|
+
* Moreover, the VSCode diagnostics API does not directly support character offsets,
|
|
17
|
+
* it also requires line and column numbers.
|
|
18
|
+
*/
|
|
19
|
+
class PositionProvider {
|
|
20
|
+
/**
|
|
21
|
+
* Maps a character offset to a line number.
|
|
22
|
+
*/
|
|
23
|
+
offsetToLine;
|
|
24
|
+
/**
|
|
25
|
+
* Maps a line number to the starting character offset of that line.
|
|
26
|
+
*/
|
|
27
|
+
lineStartOffsets;
|
|
28
|
+
/**
|
|
29
|
+
* Constructs a new PositionProvider instance.
|
|
30
|
+
*
|
|
31
|
+
* @param sourceCode The source code as a string.
|
|
32
|
+
*/
|
|
33
|
+
constructor(sourceCode) {
|
|
34
|
+
this.offsetToLine = [];
|
|
35
|
+
this.lineStartOffsets = [0];
|
|
36
|
+
let currentLine = 0;
|
|
37
|
+
for (let i = 0; i < sourceCode.length; i += 1) {
|
|
38
|
+
this.offsetToLine[i] = currentLine;
|
|
39
|
+
// Handle different types of line breaks: LF, FF, and CR
|
|
40
|
+
if (sourceCode[i] === LF || sourceCode[i] === FF || sourceCode[i] === CR) {
|
|
41
|
+
currentLine += 1;
|
|
42
|
+
this.lineStartOffsets[currentLine] = (sourceCode[i] === CR && sourceCode[i + 1] === LF)
|
|
43
|
+
? i + 2
|
|
44
|
+
: i + 1;
|
|
45
|
+
if (sourceCode[i] === CR && sourceCode[i + 1] === LF) {
|
|
46
|
+
// Skip the '\n' in a '\r\n' sequence
|
|
47
|
+
i += 1;
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
// Handle the case where the last offset is at the end of the source code
|
|
52
|
+
this.offsetToLine[sourceCode.length] = currentLine;
|
|
53
|
+
}
|
|
54
|
+
/**
|
|
55
|
+
* Converts a character offset to a line and column position.
|
|
56
|
+
*
|
|
57
|
+
* @param offset The zero-based character offset in the source code.
|
|
58
|
+
* @returns A Position object containing the 1-based line and column number, or null if the offset is out of range.
|
|
59
|
+
*/
|
|
60
|
+
convertOffsetToPosition(offset) {
|
|
61
|
+
if (offset < 0 || offset > this.offsetToLine.length - 1) {
|
|
62
|
+
return null;
|
|
63
|
+
}
|
|
64
|
+
const line = this.offsetToLine[offset];
|
|
65
|
+
const lineStartOffset = this.lineStartOffsets[line];
|
|
66
|
+
return {
|
|
67
|
+
line: line + 1,
|
|
68
|
+
column: offset - lineStartOffset + 1,
|
|
69
|
+
};
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
export { PositionProvider };
|
|
@@ -0,0 +1,214 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* AGTree v3.0.0-alpha.2 (build date: Tue, 17 Dec 2024 16:50:04 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 { ESCAPE_CHARACTER, SINGLE_QUOTE, DOUBLE_QUOTE, BACKTICK_QUOTE, COMMA, SPACE, EMPTY } from './constants.js';
|
|
8
|
+
|
|
9
|
+
/**
|
|
10
|
+
* @file Utility functions for working with quotes
|
|
11
|
+
*/
|
|
12
|
+
/**
|
|
13
|
+
* Set of all possible quote characters supported by the library
|
|
14
|
+
*/
|
|
15
|
+
const QUOTE_SET = new Set([
|
|
16
|
+
SINGLE_QUOTE,
|
|
17
|
+
DOUBLE_QUOTE,
|
|
18
|
+
BACKTICK_QUOTE,
|
|
19
|
+
]);
|
|
20
|
+
/**
|
|
21
|
+
* Possible quote types for scriptlet parameters
|
|
22
|
+
*/
|
|
23
|
+
const QuoteType = {
|
|
24
|
+
/**
|
|
25
|
+
* No quotes at all
|
|
26
|
+
*/
|
|
27
|
+
None: 'none',
|
|
28
|
+
/**
|
|
29
|
+
* Single quotes (`'`)
|
|
30
|
+
*/
|
|
31
|
+
Single: 'single',
|
|
32
|
+
/**
|
|
33
|
+
* Double quotes (`"`)
|
|
34
|
+
*/
|
|
35
|
+
Double: 'double',
|
|
36
|
+
/**
|
|
37
|
+
* Backtick quotes (`` ` ``)
|
|
38
|
+
*/
|
|
39
|
+
Backtick: 'backtick',
|
|
40
|
+
};
|
|
41
|
+
/**
|
|
42
|
+
* Utility functions for working with quotes
|
|
43
|
+
*/
|
|
44
|
+
class QuoteUtils {
|
|
45
|
+
/**
|
|
46
|
+
* Escape all unescaped occurrences of the character
|
|
47
|
+
*
|
|
48
|
+
* @param string String to escape
|
|
49
|
+
* @param char Character to escape
|
|
50
|
+
* @returns Escaped string
|
|
51
|
+
*/
|
|
52
|
+
static escapeUnescapedOccurrences(string, char) {
|
|
53
|
+
let result = EMPTY;
|
|
54
|
+
for (let i = 0; i < string.length; i += 1) {
|
|
55
|
+
if (string[i] === char && (i === 0 || string[i - 1] !== ESCAPE_CHARACTER)) {
|
|
56
|
+
result += ESCAPE_CHARACTER;
|
|
57
|
+
}
|
|
58
|
+
result += string[i];
|
|
59
|
+
}
|
|
60
|
+
return result;
|
|
61
|
+
}
|
|
62
|
+
/**
|
|
63
|
+
* Unescape all single escaped occurrences of the character
|
|
64
|
+
*
|
|
65
|
+
* @param string String to unescape
|
|
66
|
+
* @param char Character to unescape
|
|
67
|
+
* @returns Unescaped string
|
|
68
|
+
*/
|
|
69
|
+
static unescapeSingleEscapedOccurrences(string, char) {
|
|
70
|
+
let result = EMPTY;
|
|
71
|
+
for (let i = 0; i < string.length; i += 1) {
|
|
72
|
+
if (string[i] === char
|
|
73
|
+
&& string[i - 1] === ESCAPE_CHARACTER
|
|
74
|
+
&& (i === 1 || string[i - 2] !== ESCAPE_CHARACTER)) {
|
|
75
|
+
result = result.slice(0, -1);
|
|
76
|
+
}
|
|
77
|
+
result += string[i];
|
|
78
|
+
}
|
|
79
|
+
return result;
|
|
80
|
+
}
|
|
81
|
+
/**
|
|
82
|
+
* Get quote type of the string
|
|
83
|
+
*
|
|
84
|
+
* @param string String to check
|
|
85
|
+
* @returns Quote type of the string
|
|
86
|
+
*/
|
|
87
|
+
static getStringQuoteType(string) {
|
|
88
|
+
// Don't check 1-character strings to avoid false positives
|
|
89
|
+
if (string.length > 1) {
|
|
90
|
+
if (string.startsWith(SINGLE_QUOTE) && string.endsWith(SINGLE_QUOTE)) {
|
|
91
|
+
return QuoteType.Single;
|
|
92
|
+
}
|
|
93
|
+
if (string.startsWith(DOUBLE_QUOTE) && string.endsWith(DOUBLE_QUOTE)) {
|
|
94
|
+
return QuoteType.Double;
|
|
95
|
+
}
|
|
96
|
+
if (string.startsWith(BACKTICK_QUOTE) && string.endsWith(BACKTICK_QUOTE)) {
|
|
97
|
+
return QuoteType.Backtick;
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
return QuoteType.None;
|
|
101
|
+
}
|
|
102
|
+
/**
|
|
103
|
+
* Set quote type of the string
|
|
104
|
+
*
|
|
105
|
+
* @param string String to set quote type of
|
|
106
|
+
* @param quoteType Quote type to set
|
|
107
|
+
* @returns String with the specified quote type
|
|
108
|
+
*/
|
|
109
|
+
static setStringQuoteType(string, quoteType) {
|
|
110
|
+
const actualQuoteType = QuoteUtils.getStringQuoteType(string);
|
|
111
|
+
switch (quoteType) {
|
|
112
|
+
case QuoteType.None:
|
|
113
|
+
if (actualQuoteType === QuoteType.Single) {
|
|
114
|
+
return QuoteUtils.escapeUnescapedOccurrences(string.slice(1, -1), SINGLE_QUOTE);
|
|
115
|
+
}
|
|
116
|
+
if (actualQuoteType === QuoteType.Double) {
|
|
117
|
+
return QuoteUtils.escapeUnescapedOccurrences(string.slice(1, -1), DOUBLE_QUOTE);
|
|
118
|
+
}
|
|
119
|
+
if (actualQuoteType === QuoteType.Backtick) {
|
|
120
|
+
return QuoteUtils.escapeUnescapedOccurrences(string.slice(1, -1), BACKTICK_QUOTE);
|
|
121
|
+
}
|
|
122
|
+
return string;
|
|
123
|
+
case QuoteType.Single:
|
|
124
|
+
if (actualQuoteType === QuoteType.None) {
|
|
125
|
+
return SINGLE_QUOTE + QuoteUtils.escapeUnescapedOccurrences(string, SINGLE_QUOTE) + SINGLE_QUOTE;
|
|
126
|
+
}
|
|
127
|
+
if (actualQuoteType === QuoteType.Double) {
|
|
128
|
+
return SINGLE_QUOTE
|
|
129
|
+
+ QuoteUtils.escapeUnescapedOccurrences(QuoteUtils.unescapeSingleEscapedOccurrences(string.slice(1, -1), DOUBLE_QUOTE), SINGLE_QUOTE) + SINGLE_QUOTE;
|
|
130
|
+
}
|
|
131
|
+
if (actualQuoteType === QuoteType.Backtick) {
|
|
132
|
+
return SINGLE_QUOTE
|
|
133
|
+
+ QuoteUtils.escapeUnescapedOccurrences(QuoteUtils.unescapeSingleEscapedOccurrences(string.slice(1, -1), BACKTICK_QUOTE), SINGLE_QUOTE) + SINGLE_QUOTE;
|
|
134
|
+
}
|
|
135
|
+
return string;
|
|
136
|
+
case QuoteType.Double:
|
|
137
|
+
if (actualQuoteType === QuoteType.None) {
|
|
138
|
+
return DOUBLE_QUOTE + QuoteUtils.escapeUnescapedOccurrences(string, DOUBLE_QUOTE) + DOUBLE_QUOTE;
|
|
139
|
+
}
|
|
140
|
+
if (actualQuoteType !== QuoteType.Double) {
|
|
141
|
+
// eslint-disable-next-line max-len
|
|
142
|
+
return DOUBLE_QUOTE
|
|
143
|
+
+ QuoteUtils.escapeUnescapedOccurrences(QuoteUtils.unescapeSingleEscapedOccurrences(string.slice(1, -1), SINGLE_QUOTE), DOUBLE_QUOTE) + DOUBLE_QUOTE;
|
|
144
|
+
}
|
|
145
|
+
return string;
|
|
146
|
+
case QuoteType.Backtick:
|
|
147
|
+
if (actualQuoteType === QuoteType.None) {
|
|
148
|
+
// eslint-disable-next-line max-len
|
|
149
|
+
return BACKTICK_QUOTE + QuoteUtils.escapeUnescapedOccurrences(string, BACKTICK_QUOTE) + BACKTICK_QUOTE;
|
|
150
|
+
}
|
|
151
|
+
if (actualQuoteType !== QuoteType.Backtick) {
|
|
152
|
+
// eslint-disable-next-line max-len
|
|
153
|
+
return BACKTICK_QUOTE
|
|
154
|
+
+ QuoteUtils.escapeUnescapedOccurrences(QuoteUtils.unescapeSingleEscapedOccurrences(string.slice(1, -1), SINGLE_QUOTE), BACKTICK_QUOTE) + BACKTICK_QUOTE;
|
|
155
|
+
}
|
|
156
|
+
return string;
|
|
157
|
+
default:
|
|
158
|
+
return string;
|
|
159
|
+
}
|
|
160
|
+
}
|
|
161
|
+
/**
|
|
162
|
+
* Removes bounding quotes from a string, if any
|
|
163
|
+
*
|
|
164
|
+
* @param string Input string
|
|
165
|
+
* @returns String without quotes
|
|
166
|
+
*/
|
|
167
|
+
static removeQuotes(string) {
|
|
168
|
+
if (
|
|
169
|
+
// We should check for string length to avoid false positives
|
|
170
|
+
string.length > 1
|
|
171
|
+
&& (string[0] === SINGLE_QUOTE || string[0] === DOUBLE_QUOTE || string[0] === BACKTICK_QUOTE)
|
|
172
|
+
&& string[0] === string[string.length - 1]) {
|
|
173
|
+
return string.slice(1, -1);
|
|
174
|
+
}
|
|
175
|
+
return string;
|
|
176
|
+
}
|
|
177
|
+
/**
|
|
178
|
+
* Removes bounding quotes from a string, if any, and unescapes the escaped quotes,
|
|
179
|
+
* like transforming `'abc\'def'` to `abc'def`.
|
|
180
|
+
*
|
|
181
|
+
* @param string Input string
|
|
182
|
+
* @returns String without quotes
|
|
183
|
+
*/
|
|
184
|
+
static removeQuotesAndUnescape(string) {
|
|
185
|
+
if (
|
|
186
|
+
// We should check for string length to avoid false positives
|
|
187
|
+
string.length > 1
|
|
188
|
+
&& (string[0] === SINGLE_QUOTE || string[0] === DOUBLE_QUOTE || string[0] === BACKTICK_QUOTE)
|
|
189
|
+
&& string[0] === string[string.length - 1]) {
|
|
190
|
+
return QuoteUtils.unescapeSingleEscapedOccurrences(string.slice(1, -1), string[0]);
|
|
191
|
+
}
|
|
192
|
+
return string;
|
|
193
|
+
}
|
|
194
|
+
/**
|
|
195
|
+
* Wraps given `strings` with `quote` (defaults to single quote `'`)
|
|
196
|
+
* and joins them with `separator` (defaults to comma+space `, `).
|
|
197
|
+
*
|
|
198
|
+
* @param strings Strings to quote and join.
|
|
199
|
+
* @param quoteType Quote to use.
|
|
200
|
+
* @param separator Separator to use.
|
|
201
|
+
*
|
|
202
|
+
* @returns String with joined items.
|
|
203
|
+
*
|
|
204
|
+
* @example
|
|
205
|
+
* ['abc', 'def']: strings[] -> "'abc', 'def'": string
|
|
206
|
+
*/
|
|
207
|
+
static quoteAndJoinStrings(strings, quoteType = QuoteType.Single, separator = `${COMMA}${SPACE}`) {
|
|
208
|
+
return strings
|
|
209
|
+
.map((s) => QuoteUtils.setStringQuoteType(s, quoteType))
|
|
210
|
+
.join(separator);
|
|
211
|
+
}
|
|
212
|
+
}
|
|
213
|
+
|
|
214
|
+
export { QUOTE_SET, QuoteType, QuoteUtils };
|
|
@@ -0,0 +1,176 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* AGTree v3.0.0-alpha.2 (build date: Tue, 17 Dec 2024 16:50:04 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 { PIPE, CARET, ASTERISK, CLOSE_CURLY_BRACKET, CLOSE_PARENTHESIS, CLOSE_SQUARE_BRACKET, DOLLAR_SIGN, DOT, ESCAPE_CHARACTER, OPEN_CURLY_BRACKET, OPEN_PARENTHESIS, OPEN_SQUARE_BRACKET, PLUS, QUESTION_MARK, SLASH, REGEX_MARKER, EMPTY } from './constants.js';
|
|
8
|
+
|
|
9
|
+
/**
|
|
10
|
+
* @file Regular expression utilities
|
|
11
|
+
*/
|
|
12
|
+
// Special RegExp constants
|
|
13
|
+
const REGEX_START = CARET; // '^'
|
|
14
|
+
const REGEX_END = DOLLAR_SIGN; // '$'
|
|
15
|
+
const REGEX_ANY_CHARACTERS = DOT + ASTERISK; // '.*'
|
|
16
|
+
// Special adblock pattern symbols and their RegExp equivalents
|
|
17
|
+
const ADBLOCK_URL_START = PIPE + PIPE; // '||'
|
|
18
|
+
const ADBLOCK_URL_START_REGEX = '^(http|https|ws|wss)://([a-z0-9-_.]+\\.)?';
|
|
19
|
+
const ADBLOCK_URL_SEPARATOR = CARET; // '^'
|
|
20
|
+
const ADBLOCK_URL_SEPARATOR_REGEX = '([^ a-zA-Z0-9.%_-]|$)';
|
|
21
|
+
const ADBLOCK_WILDCARD = ASTERISK; // '*'
|
|
22
|
+
const ADBLOCK_WILDCARD_REGEX = REGEX_ANY_CHARACTERS;
|
|
23
|
+
// Negation wrapper for RegExp patterns
|
|
24
|
+
const REGEX_NEGATION_PREFIX = '^((?!';
|
|
25
|
+
const REGEX_NEGATION_SUFFIX = ').)*$';
|
|
26
|
+
/**
|
|
27
|
+
* Special RegExp symbols
|
|
28
|
+
*
|
|
29
|
+
* @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Regular_Expressions#special-escape
|
|
30
|
+
*/
|
|
31
|
+
const SPECIAL_REGEX_SYMBOLS = new Set([
|
|
32
|
+
ASTERISK,
|
|
33
|
+
CARET,
|
|
34
|
+
CLOSE_CURLY_BRACKET,
|
|
35
|
+
CLOSE_PARENTHESIS,
|
|
36
|
+
CLOSE_SQUARE_BRACKET,
|
|
37
|
+
DOLLAR_SIGN,
|
|
38
|
+
DOT,
|
|
39
|
+
ESCAPE_CHARACTER,
|
|
40
|
+
OPEN_CURLY_BRACKET,
|
|
41
|
+
OPEN_PARENTHESIS,
|
|
42
|
+
OPEN_SQUARE_BRACKET,
|
|
43
|
+
PIPE,
|
|
44
|
+
PLUS,
|
|
45
|
+
QUESTION_MARK,
|
|
46
|
+
SLASH,
|
|
47
|
+
]);
|
|
48
|
+
/**
|
|
49
|
+
* Utility functions for working with RegExp patterns
|
|
50
|
+
*/
|
|
51
|
+
class RegExpUtils {
|
|
52
|
+
/**
|
|
53
|
+
* Checks whether a string possibly is a RegExp pattern.
|
|
54
|
+
* Flags are not supported.
|
|
55
|
+
*
|
|
56
|
+
* Note: it does not perform a full validation of the pattern,
|
|
57
|
+
* it just checks if the string starts and ends with a slash.
|
|
58
|
+
*
|
|
59
|
+
* @param pattern - Pattern to check
|
|
60
|
+
* @returns `true` if the string is a RegExp pattern, `false` otherwise
|
|
61
|
+
*/
|
|
62
|
+
static isRegexPattern(pattern) {
|
|
63
|
+
const trimmedPattern = pattern.trim();
|
|
64
|
+
// Avoid false positives
|
|
65
|
+
return trimmedPattern.length > REGEX_MARKER.length * 2
|
|
66
|
+
&& trimmedPattern.startsWith(REGEX_MARKER)
|
|
67
|
+
&& trimmedPattern.endsWith(REGEX_MARKER)
|
|
68
|
+
&& trimmedPattern[REGEX_MARKER.length - 2] !== ESCAPE_CHARACTER;
|
|
69
|
+
}
|
|
70
|
+
/**
|
|
71
|
+
* Negates a RegExp pattern. Technically, this method wraps the pattern in `^((?!` and `).)*$`.
|
|
72
|
+
*
|
|
73
|
+
* RegExp modifiers are not supported.
|
|
74
|
+
*
|
|
75
|
+
* @param pattern Pattern to negate (can be wrapped in slashes or not)
|
|
76
|
+
* @returns Negated RegExp pattern
|
|
77
|
+
*/
|
|
78
|
+
static negateRegexPattern(pattern) {
|
|
79
|
+
let result = pattern.trim();
|
|
80
|
+
let slashes = false;
|
|
81
|
+
// Remove the leading and trailing slashes (/)
|
|
82
|
+
if (RegExpUtils.isRegexPattern(result)) {
|
|
83
|
+
result = result.substring(REGEX_MARKER.length, result.length - REGEX_MARKER.length);
|
|
84
|
+
slashes = true;
|
|
85
|
+
}
|
|
86
|
+
// Only negate the pattern if it's not already negated
|
|
87
|
+
if (!(result.startsWith(REGEX_NEGATION_PREFIX) && result.endsWith(REGEX_NEGATION_SUFFIX))) {
|
|
88
|
+
// Remove leading caret (^)
|
|
89
|
+
if (result.startsWith(REGEX_START)) {
|
|
90
|
+
result = result.substring(REGEX_START.length);
|
|
91
|
+
}
|
|
92
|
+
// Remove trailing dollar sign ($)
|
|
93
|
+
if (result.endsWith(REGEX_END)) {
|
|
94
|
+
result = result.substring(0, result.length - REGEX_END.length);
|
|
95
|
+
}
|
|
96
|
+
// Wrap the pattern in the negation
|
|
97
|
+
result = `${REGEX_NEGATION_PREFIX}${result}${REGEX_NEGATION_SUFFIX}`;
|
|
98
|
+
}
|
|
99
|
+
// Add the leading and trailing slashes back if they were there
|
|
100
|
+
if (slashes) {
|
|
101
|
+
result = `${REGEX_MARKER}${result}${REGEX_MARKER}`;
|
|
102
|
+
}
|
|
103
|
+
return result;
|
|
104
|
+
}
|
|
105
|
+
/**
|
|
106
|
+
* Converts a basic adblock rule pattern to a RegExp pattern. Based on
|
|
107
|
+
* https://github.com/AdguardTeam/tsurlfilter/blob/9b26e0b4a0e30b87690bc60f7cf377d112c3085c/packages/tsurlfilter/src/rules/simple-regex.ts#L219
|
|
108
|
+
*
|
|
109
|
+
* @param pattern Pattern to convert
|
|
110
|
+
* @returns RegExp equivalent of the pattern
|
|
111
|
+
* @see {@link https://kb.adguard.com/en/general/how-to-create-your-own-ad-filters#basic-rules}
|
|
112
|
+
*/
|
|
113
|
+
static patternToRegexp(pattern) {
|
|
114
|
+
const trimmed = pattern.trim();
|
|
115
|
+
// Return regex for any character sequence if the pattern is just |, ||, * or empty
|
|
116
|
+
if (trimmed === ADBLOCK_URL_START
|
|
117
|
+
|| trimmed === PIPE
|
|
118
|
+
|| trimmed === ADBLOCK_WILDCARD
|
|
119
|
+
|| trimmed === EMPTY) {
|
|
120
|
+
return REGEX_ANY_CHARACTERS;
|
|
121
|
+
}
|
|
122
|
+
// If the pattern is already a RegExp, just return it, but remove the leading and trailing slashes
|
|
123
|
+
if (RegExpUtils.isRegexPattern(pattern)) {
|
|
124
|
+
return pattern.substring(REGEX_MARKER.length, pattern.length - REGEX_MARKER.length);
|
|
125
|
+
}
|
|
126
|
+
let result = EMPTY;
|
|
127
|
+
let offset = 0;
|
|
128
|
+
let len = trimmed.length;
|
|
129
|
+
// Handle leading pipes
|
|
130
|
+
if (trimmed[0] === PIPE) {
|
|
131
|
+
if (trimmed[1] === PIPE) {
|
|
132
|
+
// Replace adblock url start (||) with its RegExp equivalent
|
|
133
|
+
result += ADBLOCK_URL_START_REGEX;
|
|
134
|
+
offset = ADBLOCK_URL_START.length;
|
|
135
|
+
}
|
|
136
|
+
else {
|
|
137
|
+
// Replace single pipe (|) with the RegExp start symbol (^)
|
|
138
|
+
result += REGEX_START;
|
|
139
|
+
offset = REGEX_START.length;
|
|
140
|
+
}
|
|
141
|
+
}
|
|
142
|
+
// Handle trailing pipes
|
|
143
|
+
let trailingPipe = false;
|
|
144
|
+
if (trimmed.endsWith(PIPE)) {
|
|
145
|
+
trailingPipe = true;
|
|
146
|
+
len -= PIPE.length;
|
|
147
|
+
}
|
|
148
|
+
// Handle the rest of the pattern, if any
|
|
149
|
+
for (; offset < len; offset += 1) {
|
|
150
|
+
if (trimmed[offset] === ADBLOCK_WILDCARD) {
|
|
151
|
+
// Replace adblock wildcard (*) with its RegExp equivalent
|
|
152
|
+
result += ADBLOCK_WILDCARD_REGEX;
|
|
153
|
+
}
|
|
154
|
+
else if (trimmed[offset] === ADBLOCK_URL_SEPARATOR) {
|
|
155
|
+
// Replace adblock url separator (^) with its RegExp equivalent
|
|
156
|
+
result += ADBLOCK_URL_SEPARATOR_REGEX;
|
|
157
|
+
}
|
|
158
|
+
else if (SPECIAL_REGEX_SYMBOLS.has(trimmed[offset])) {
|
|
159
|
+
// Escape special RegExp symbols (we handled pipe (|) and asterisk (*) already)
|
|
160
|
+
result += ESCAPE_CHARACTER + trimmed[offset];
|
|
161
|
+
}
|
|
162
|
+
else {
|
|
163
|
+
// Just add any other character
|
|
164
|
+
result += trimmed[offset];
|
|
165
|
+
}
|
|
166
|
+
}
|
|
167
|
+
// Handle trailing pipes
|
|
168
|
+
if (trailingPipe) {
|
|
169
|
+
// Replace trailing pipe (|) with the RegExp end symbol ($)
|
|
170
|
+
result += REGEX_END;
|
|
171
|
+
}
|
|
172
|
+
return result;
|
|
173
|
+
}
|
|
174
|
+
}
|
|
175
|
+
|
|
176
|
+
export { ADBLOCK_URL_SEPARATOR, ADBLOCK_URL_SEPARATOR_REGEX, ADBLOCK_URL_START, ADBLOCK_URL_START_REGEX, ADBLOCK_WILDCARD, ADBLOCK_WILDCARD_REGEX, REGEX_ANY_CHARACTERS, REGEX_END, REGEX_NEGATION_PREFIX, REGEX_NEGATION_SUFFIX, REGEX_START, RegExpUtils, SPECIAL_REGEX_SYMBOLS };
|