@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,41 @@
|
|
|
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 { BaseSerializer } from './base-serializer.js';
|
|
8
|
+
import { isUndefined } from '../utils/type-guards.js';
|
|
9
|
+
import { NULL } from '../utils/constants.js';
|
|
10
|
+
import { InvalidRuleErrorNodeMarshallingMap } from '../marshalling-utils/invalid-rule-error-node-common.js';
|
|
11
|
+
import { BinaryTypeMarshallingMap } from '../marshalling-utils/misc/binary-type-common.js';
|
|
12
|
+
|
|
13
|
+
/**
|
|
14
|
+
* Serializer for invalid rule error nodes.
|
|
15
|
+
*/
|
|
16
|
+
class InvalidRuleErrorNodeSerializer extends BaseSerializer {
|
|
17
|
+
/**
|
|
18
|
+
* Serializes an invalid rule error node to binary format.
|
|
19
|
+
*
|
|
20
|
+
* @param node Node to serialize.
|
|
21
|
+
* @param buffer ByteBuffer for writing binary data.
|
|
22
|
+
*/
|
|
23
|
+
static serialize(node, buffer) {
|
|
24
|
+
buffer.writeUint8(BinaryTypeMarshallingMap.InvalidRuleErrorNode);
|
|
25
|
+
buffer.writeUint8(InvalidRuleErrorNodeMarshallingMap.Name);
|
|
26
|
+
buffer.writeString(node.name);
|
|
27
|
+
buffer.writeUint8(InvalidRuleErrorNodeMarshallingMap.Message);
|
|
28
|
+
buffer.writeString(node.message);
|
|
29
|
+
if (!isUndefined(node.start)) {
|
|
30
|
+
buffer.writeUint8(InvalidRuleErrorNodeMarshallingMap.Start);
|
|
31
|
+
buffer.writeUint32(node.start);
|
|
32
|
+
}
|
|
33
|
+
if (!isUndefined(node.end)) {
|
|
34
|
+
buffer.writeUint8(InvalidRuleErrorNodeMarshallingMap.End);
|
|
35
|
+
buffer.writeUint32(node.end);
|
|
36
|
+
}
|
|
37
|
+
buffer.writeUint8(NULL);
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
export { InvalidRuleErrorNodeSerializer };
|
|
@@ -0,0 +1,40 @@
|
|
|
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 { BaseSerializer } from './base-serializer.js';
|
|
8
|
+
import { isUndefined } from '../utils/type-guards.js';
|
|
9
|
+
import { NULL } from '../utils/constants.js';
|
|
10
|
+
import { InvalidRuleErrorNodeSerializer } from './invalid-rule-error-node-serializer.js';
|
|
11
|
+
import { InvalidRuleMarshallingMap } from '../marshalling-utils/invalid-rule-common.js';
|
|
12
|
+
import { BinaryTypeMarshallingMap } from '../marshalling-utils/misc/binary-type-common.js';
|
|
13
|
+
|
|
14
|
+
/**
|
|
15
|
+
* Serializer for invalid rule nodes.
|
|
16
|
+
*/
|
|
17
|
+
class InvalidRuleSerializer extends BaseSerializer {
|
|
18
|
+
/**
|
|
19
|
+
* Serializes an invalid rule node to binary format.
|
|
20
|
+
*
|
|
21
|
+
* @param node Node to serialize.
|
|
22
|
+
* @param buffer ByteBuffer for writing binary data.
|
|
23
|
+
*/
|
|
24
|
+
static serialize(node, buffer) {
|
|
25
|
+
buffer.writeUint8(BinaryTypeMarshallingMap.InvalidRule);
|
|
26
|
+
buffer.writeUint8(InvalidRuleMarshallingMap.Error);
|
|
27
|
+
InvalidRuleErrorNodeSerializer.serialize(node.error, buffer);
|
|
28
|
+
if (!isUndefined(node.start)) {
|
|
29
|
+
buffer.writeUint8(InvalidRuleMarshallingMap.Start);
|
|
30
|
+
buffer.writeUint32(node.start);
|
|
31
|
+
}
|
|
32
|
+
if (!isUndefined(node.end)) {
|
|
33
|
+
buffer.writeUint8(InvalidRuleMarshallingMap.End);
|
|
34
|
+
buffer.writeUint32(node.end);
|
|
35
|
+
}
|
|
36
|
+
buffer.writeUint8(NULL);
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
export { InvalidRuleSerializer };
|
|
@@ -0,0 +1,64 @@
|
|
|
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 { NULL, COMMA, PIPE } from '../../utils/constants.js';
|
|
8
|
+
import { isUndefined } from '../../utils/type-guards.js';
|
|
9
|
+
import { BaseSerializer } from '../base-serializer.js';
|
|
10
|
+
import { ListItemsSerializer } from './list-items-serializer.js';
|
|
11
|
+
import { DomainListMarshallingMap } from '../../marshalling-utils/misc/domain-list-common.js';
|
|
12
|
+
import { BinaryTypeMarshallingMap } from '../../marshalling-utils/misc/binary-type-common.js';
|
|
13
|
+
|
|
14
|
+
/**
|
|
15
|
+
* Value map for binary serialization. This helps to reduce the size of the serialized data,
|
|
16
|
+
* as it allows us to use a single byte to represent frequently used values.
|
|
17
|
+
*
|
|
18
|
+
* ! IMPORTANT: If you change values here, please update the {@link BINARY_SCHEMA_VERSION}!
|
|
19
|
+
*
|
|
20
|
+
* @note Only 256 values can be represented this way.
|
|
21
|
+
*/
|
|
22
|
+
const SEPARATOR_SERIALIZATION_MAP = new Map([
|
|
23
|
+
[COMMA, 0],
|
|
24
|
+
[PIPE, 1],
|
|
25
|
+
]);
|
|
26
|
+
/**
|
|
27
|
+
* `DomainListSerializer` is responsible for serializing a domain list.
|
|
28
|
+
*
|
|
29
|
+
* @example
|
|
30
|
+
* - If the rule is `example.com,~example.net##.ads`, the domain list is `example.com,~example.net`.
|
|
31
|
+
* - If the rule is `ads.js^$script,domains=example.com|~example.org`, the domain list is `example.com|~example.org`.
|
|
32
|
+
* This serializer is responsible for serializing these domain lists.
|
|
33
|
+
* @see {@link https://help.eyeo.com/adblockplus/how-to-write-filters#elemhide_domains}
|
|
34
|
+
*/
|
|
35
|
+
class DomainListSerializer extends BaseSerializer {
|
|
36
|
+
/**
|
|
37
|
+
* Serializes a domain list node to binary format.
|
|
38
|
+
*
|
|
39
|
+
* @param node Node to serialize.
|
|
40
|
+
* @param buffer ByteBuffer for writing binary data.
|
|
41
|
+
*/
|
|
42
|
+
static serialize(node, buffer) {
|
|
43
|
+
buffer.writeUint8(BinaryTypeMarshallingMap.DomainListNode);
|
|
44
|
+
const separator = SEPARATOR_SERIALIZATION_MAP.get(node.separator);
|
|
45
|
+
if (isUndefined(separator)) {
|
|
46
|
+
throw new Error(`Invalid separator: ${node.separator}`);
|
|
47
|
+
}
|
|
48
|
+
buffer.writeUint8(DomainListMarshallingMap.Separator);
|
|
49
|
+
buffer.writeUint8(separator);
|
|
50
|
+
buffer.writeUint8(DomainListMarshallingMap.Children);
|
|
51
|
+
ListItemsSerializer.serialize(node.children, buffer);
|
|
52
|
+
if (!isUndefined(node.start)) {
|
|
53
|
+
buffer.writeUint8(DomainListMarshallingMap.Start);
|
|
54
|
+
buffer.writeUint32(node.start);
|
|
55
|
+
}
|
|
56
|
+
if (!isUndefined(node.end)) {
|
|
57
|
+
buffer.writeUint8(DomainListMarshallingMap.End);
|
|
58
|
+
buffer.writeUint32(node.end);
|
|
59
|
+
}
|
|
60
|
+
buffer.writeUint8(NULL);
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
export { DomainListSerializer };
|
|
@@ -0,0 +1,58 @@
|
|
|
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 { BaseSerializer } from '../base-serializer.js';
|
|
8
|
+
import { ListItemNodeType } from '../../nodes/index.js';
|
|
9
|
+
import { isUndefined } from '../../utils/type-guards.js';
|
|
10
|
+
import { NULL } from '../../utils/constants.js';
|
|
11
|
+
import { ListItemMarshallingMap } from '../../marshalling-utils/misc/list-item-common.js';
|
|
12
|
+
import { BinaryTypeMarshallingMap } from '../../marshalling-utils/misc/binary-type-common.js';
|
|
13
|
+
|
|
14
|
+
/**
|
|
15
|
+
* Serializer for list item nodes.
|
|
16
|
+
*/
|
|
17
|
+
class ListItemSerializer extends BaseSerializer {
|
|
18
|
+
/**
|
|
19
|
+
* Serializes a list item to binary format.
|
|
20
|
+
*
|
|
21
|
+
* @param item List item to serialize.
|
|
22
|
+
* @param buffer Output byte buffer.
|
|
23
|
+
* @template T Type of the list item.
|
|
24
|
+
*/
|
|
25
|
+
static serialize(item, buffer) {
|
|
26
|
+
switch (item.type) {
|
|
27
|
+
case ListItemNodeType.App:
|
|
28
|
+
buffer.writeUint8(BinaryTypeMarshallingMap.AppNode);
|
|
29
|
+
break;
|
|
30
|
+
case ListItemNodeType.Domain:
|
|
31
|
+
buffer.writeUint8(BinaryTypeMarshallingMap.DomainNode);
|
|
32
|
+
break;
|
|
33
|
+
case ListItemNodeType.Method:
|
|
34
|
+
buffer.writeUint8(BinaryTypeMarshallingMap.MethodNode);
|
|
35
|
+
break;
|
|
36
|
+
case ListItemNodeType.StealthOption:
|
|
37
|
+
buffer.writeUint8(BinaryTypeMarshallingMap.StealthOptionNode);
|
|
38
|
+
break;
|
|
39
|
+
default:
|
|
40
|
+
throw new Error(`Invalid list item type: ${item.type}`);
|
|
41
|
+
}
|
|
42
|
+
buffer.writeUint8(ListItemMarshallingMap.Exception);
|
|
43
|
+
buffer.writeUint8(item.exception ? 1 : 0);
|
|
44
|
+
buffer.writeUint8(ListItemMarshallingMap.Value);
|
|
45
|
+
buffer.writeString(item.value);
|
|
46
|
+
if (!isUndefined(item.start)) {
|
|
47
|
+
buffer.writeUint8(ListItemMarshallingMap.Start);
|
|
48
|
+
buffer.writeUint32(item.start);
|
|
49
|
+
}
|
|
50
|
+
if (!isUndefined(item.end)) {
|
|
51
|
+
buffer.writeUint8(ListItemMarshallingMap.End);
|
|
52
|
+
buffer.writeUint32(item.end);
|
|
53
|
+
}
|
|
54
|
+
buffer.writeUint8(NULL);
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
export { ListItemSerializer };
|
|
@@ -0,0 +1,29 @@
|
|
|
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 { ListItemSerializer } from './list-item-serializer.js';
|
|
8
|
+
|
|
9
|
+
/**
|
|
10
|
+
* Serializer for list items.
|
|
11
|
+
*/
|
|
12
|
+
class ListItemsSerializer {
|
|
13
|
+
/**
|
|
14
|
+
* Serializes a list of items to binary format.
|
|
15
|
+
*
|
|
16
|
+
* @param items List of items to serialize.
|
|
17
|
+
* @param buffer Output byte buffer.
|
|
18
|
+
* @template T Type of the list items.
|
|
19
|
+
*/
|
|
20
|
+
static serialize(items, buffer) {
|
|
21
|
+
const { length } = items;
|
|
22
|
+
buffer.writeUint16(length);
|
|
23
|
+
for (let i = 0; i < length; i += 1) {
|
|
24
|
+
ListItemSerializer.serialize(items[i], buffer);
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
export { ListItemsSerializer };
|
|
@@ -0,0 +1,136 @@
|
|
|
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 { NULL } from '../../utils/constants.js';
|
|
8
|
+
import { isUndefined } from '../../utils/type-guards.js';
|
|
9
|
+
import { BaseSerializer } from '../base-serializer.js';
|
|
10
|
+
import { KNOWN_VARIABLES_SERIALIZATION_MAP, VariableNodeBinaryPropMarshallingMap, ParenthesisNodeBinaryPropMarshallingMap, OperatorNodeBinaryPropMarshallingMap, LOGICAL_EXPRESSION_OPERATOR_SERIALISATION_MAP } from '../../marshalling-utils/misc/logical-expression-common.js';
|
|
11
|
+
import { BinaryTypeMarshallingMap } from '../../marshalling-utils/misc/binary-type-common.js';
|
|
12
|
+
|
|
13
|
+
/**
|
|
14
|
+
* Possible node types in the logical expression.
|
|
15
|
+
*/
|
|
16
|
+
const NodeType = {
|
|
17
|
+
Variable: 'Variable',
|
|
18
|
+
Operator: 'Operator',
|
|
19
|
+
Parenthesis: 'Parenthesis',
|
|
20
|
+
};
|
|
21
|
+
/**
|
|
22
|
+
* `LogicalExpressionSerializer` is responsible for serializing logical expressions.
|
|
23
|
+
*
|
|
24
|
+
* @example
|
|
25
|
+
* From the following rule:
|
|
26
|
+
* ```adblock
|
|
27
|
+
* !#if (adguard_ext_android_cb || adguard_ext_safari)
|
|
28
|
+
* ```
|
|
29
|
+
* this parser will parse the expression `(adguard_ext_android_cb || adguard_ext_safari)`.
|
|
30
|
+
*/
|
|
31
|
+
// TODO: Refactor this class
|
|
32
|
+
class LogicalExpressionSerializer extends BaseSerializer {
|
|
33
|
+
/**
|
|
34
|
+
* Serializes a variable node to binary format.
|
|
35
|
+
*
|
|
36
|
+
* @param node Node to serialize.
|
|
37
|
+
* @param buffer ByteBuffer for writing binary data.
|
|
38
|
+
*/
|
|
39
|
+
// TODO: create a common serialize / deserialize interface for such nodes (Variable, Value, Parameter, etc.)
|
|
40
|
+
static serializeVariableNode(node, buffer) {
|
|
41
|
+
buffer.writeUint8(BinaryTypeMarshallingMap.ExpressionVariableNode);
|
|
42
|
+
const frequentName = KNOWN_VARIABLES_SERIALIZATION_MAP.get(node.name);
|
|
43
|
+
if (!isUndefined(frequentName)) {
|
|
44
|
+
buffer.writeUint8(VariableNodeBinaryPropMarshallingMap.FrequentName);
|
|
45
|
+
buffer.writeUint8(frequentName);
|
|
46
|
+
}
|
|
47
|
+
else {
|
|
48
|
+
buffer.writeUint8(VariableNodeBinaryPropMarshallingMap.Name);
|
|
49
|
+
buffer.writeString(node.name);
|
|
50
|
+
}
|
|
51
|
+
if (!isUndefined(node.start)) {
|
|
52
|
+
buffer.writeUint8(VariableNodeBinaryPropMarshallingMap.Start);
|
|
53
|
+
buffer.writeUint32(node.start);
|
|
54
|
+
}
|
|
55
|
+
if (!isUndefined(node.end)) {
|
|
56
|
+
buffer.writeUint8(VariableNodeBinaryPropMarshallingMap.End);
|
|
57
|
+
buffer.writeUint32(node.end);
|
|
58
|
+
}
|
|
59
|
+
buffer.writeUint8(NULL);
|
|
60
|
+
}
|
|
61
|
+
/**
|
|
62
|
+
* Serializes a parenthesis node to binary format.
|
|
63
|
+
*
|
|
64
|
+
* @param node Node to serialize.
|
|
65
|
+
* @param buffer ByteBuffer for writing binary data.
|
|
66
|
+
*/
|
|
67
|
+
static serializeParenthesisNode(node, buffer) {
|
|
68
|
+
buffer.writeUint8(BinaryTypeMarshallingMap.ExpressionParenthesisNode);
|
|
69
|
+
buffer.writeUint8(ParenthesisNodeBinaryPropMarshallingMap.Expression);
|
|
70
|
+
LogicalExpressionSerializer.serialize(node.expression, buffer);
|
|
71
|
+
if (!isUndefined(node.start)) {
|
|
72
|
+
buffer.writeUint8(ParenthesisNodeBinaryPropMarshallingMap.Start);
|
|
73
|
+
buffer.writeUint32(node.start);
|
|
74
|
+
}
|
|
75
|
+
if (!isUndefined(node.end)) {
|
|
76
|
+
buffer.writeUint8(ParenthesisNodeBinaryPropMarshallingMap.End);
|
|
77
|
+
buffer.writeUint32(node.end);
|
|
78
|
+
}
|
|
79
|
+
buffer.writeUint8(NULL);
|
|
80
|
+
}
|
|
81
|
+
/**
|
|
82
|
+
* Serializes an operator node to binary format.
|
|
83
|
+
*
|
|
84
|
+
* @param node Node to serialize.
|
|
85
|
+
* @param buffer ByteBuffer for writing binary data.
|
|
86
|
+
*/
|
|
87
|
+
static serializeOperatorNode(node, buffer) {
|
|
88
|
+
buffer.writeUint8(BinaryTypeMarshallingMap.ExpressionOperatorNode);
|
|
89
|
+
buffer.writeUint8(OperatorNodeBinaryPropMarshallingMap.Operator);
|
|
90
|
+
const operatorBinary = LOGICAL_EXPRESSION_OPERATOR_SERIALISATION_MAP.get(node.operator);
|
|
91
|
+
if (isUndefined(operatorBinary)) {
|
|
92
|
+
throw new Error(`Unknown operator: ${node.operator}`);
|
|
93
|
+
}
|
|
94
|
+
buffer.writeUint8(operatorBinary);
|
|
95
|
+
buffer.writeUint8(OperatorNodeBinaryPropMarshallingMap.Left);
|
|
96
|
+
LogicalExpressionSerializer.serialize(node.left, buffer);
|
|
97
|
+
if (node.right) {
|
|
98
|
+
buffer.writeUint8(OperatorNodeBinaryPropMarshallingMap.Right);
|
|
99
|
+
LogicalExpressionSerializer.serialize(node.right, buffer);
|
|
100
|
+
}
|
|
101
|
+
if (!isUndefined(node.start)) {
|
|
102
|
+
buffer.writeUint8(OperatorNodeBinaryPropMarshallingMap.Start);
|
|
103
|
+
buffer.writeUint32(node.start);
|
|
104
|
+
}
|
|
105
|
+
if (!isUndefined(node.end)) {
|
|
106
|
+
buffer.writeUint8(OperatorNodeBinaryPropMarshallingMap.End);
|
|
107
|
+
buffer.writeUint32(node.end);
|
|
108
|
+
}
|
|
109
|
+
buffer.writeUint8(NULL);
|
|
110
|
+
}
|
|
111
|
+
/**
|
|
112
|
+
* Serializes a logical expression node to binary format.
|
|
113
|
+
*
|
|
114
|
+
* @param node Node to serialize.
|
|
115
|
+
* @param buffer ByteBuffer for writing binary data.
|
|
116
|
+
*/
|
|
117
|
+
static serialize(node, buffer) {
|
|
118
|
+
switch (node.type) {
|
|
119
|
+
case NodeType.Variable:
|
|
120
|
+
LogicalExpressionSerializer.serializeVariableNode(node, buffer);
|
|
121
|
+
break;
|
|
122
|
+
case NodeType.Operator:
|
|
123
|
+
LogicalExpressionSerializer.serializeOperatorNode(node, buffer);
|
|
124
|
+
break;
|
|
125
|
+
case NodeType.Parenthesis:
|
|
126
|
+
LogicalExpressionSerializer.serializeParenthesisNode(node, buffer);
|
|
127
|
+
break;
|
|
128
|
+
default:
|
|
129
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
130
|
+
throw new Error(`Unexpected node type: ${node.type}`);
|
|
131
|
+
}
|
|
132
|
+
buffer.writeUint8(NULL);
|
|
133
|
+
}
|
|
134
|
+
}
|
|
135
|
+
|
|
136
|
+
export { LogicalExpressionSerializer, NodeType };
|
|
@@ -0,0 +1,58 @@
|
|
|
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 { UINT16_MAX, NULL } from '../../utils/constants.js';
|
|
8
|
+
import { isUndefined } from '../../utils/type-guards.js';
|
|
9
|
+
import { BaseSerializer } from '../base-serializer.js';
|
|
10
|
+
import { ModifierSerializer } from './modifier-serializer.js';
|
|
11
|
+
import { ModifierListNodeMarshallingMap } from '../../marshalling-utils/misc/modifier-list-common.js';
|
|
12
|
+
import { BinaryTypeMarshallingMap } from '../../marshalling-utils/misc/binary-type-common.js';
|
|
13
|
+
|
|
14
|
+
/**
|
|
15
|
+
* `ModifierListSerializer` is responsible for serializing modifier lists. Please note that the name is not
|
|
16
|
+
* uniform, "modifiers" are also known as "options".
|
|
17
|
+
*
|
|
18
|
+
* @see {@link https://kb.adguard.com/en/general/how-to-create-your-own-ad-filters#basic-rules-modifiers}
|
|
19
|
+
* @see {@link https://kb.adguard.com/en/general/how-to-create-your-own-ad-filters#non-basic-rules-modifiers}
|
|
20
|
+
* @see {@link https://help.eyeo.com/adblockplus/how-to-write-filters#options}
|
|
21
|
+
*/
|
|
22
|
+
class ModifierListSerializer extends BaseSerializer {
|
|
23
|
+
/**
|
|
24
|
+
* Serializes a modifier list node to binary format.
|
|
25
|
+
*
|
|
26
|
+
* @param node Node to serialize.
|
|
27
|
+
* @param buffer ByteBuffer for writing binary data.
|
|
28
|
+
*/
|
|
29
|
+
static serialize(node, buffer) {
|
|
30
|
+
buffer.writeUint8(BinaryTypeMarshallingMap.ModifierListNode);
|
|
31
|
+
const count = node.children.length;
|
|
32
|
+
// If there are no children, we do not write any data related to them, to avoid using unnecessary storage,
|
|
33
|
+
// but children is a required field, so during deserialization we should initialize it as an empty array,
|
|
34
|
+
// if there are no children in the binary data.
|
|
35
|
+
if (count) {
|
|
36
|
+
buffer.writeUint8(ModifierListNodeMarshallingMap.Children);
|
|
37
|
+
// note: we store the count, because re-construction of the array is faster if we know the length
|
|
38
|
+
if (count > UINT16_MAX) {
|
|
39
|
+
throw new Error(`Too many modifiers: ${count}, the limit is ${UINT16_MAX}`);
|
|
40
|
+
}
|
|
41
|
+
buffer.writeUint16(count);
|
|
42
|
+
for (let i = 0; i < count; i += 1) {
|
|
43
|
+
ModifierSerializer.serialize(node.children[i], buffer);
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
if (!isUndefined(node.start)) {
|
|
47
|
+
buffer.writeUint8(ModifierListNodeMarshallingMap.Start);
|
|
48
|
+
buffer.writeUint32(node.start);
|
|
49
|
+
}
|
|
50
|
+
if (!isUndefined(node.end)) {
|
|
51
|
+
buffer.writeUint8(ModifierListNodeMarshallingMap.End);
|
|
52
|
+
buffer.writeUint32(node.end);
|
|
53
|
+
}
|
|
54
|
+
buffer.writeUint8(NULL);
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
export { ModifierListSerializer };
|
|
@@ -0,0 +1,49 @@
|
|
|
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 { NULL } from '../../utils/constants.js';
|
|
8
|
+
import { ValueSerializer } from './value-serializer.js';
|
|
9
|
+
import { isUndefined } from '../../utils/type-guards.js';
|
|
10
|
+
import { BaseSerializer } from '../base-serializer.js';
|
|
11
|
+
import { ModifierNodeMarshallingMap, FREQUENT_MODIFIERS_SERIALIZATION_MAP, FREQUENT_REDIRECT_MODIFIERS_SERIALIZATION_MAP } from '../../marshalling-utils/misc/modifier-common.js';
|
|
12
|
+
import { BinaryTypeMarshallingMap } from '../../marshalling-utils/misc/binary-type-common.js';
|
|
13
|
+
|
|
14
|
+
/**
|
|
15
|
+
* `ModifierSerializer` is responsible for serializing modifiers.
|
|
16
|
+
*
|
|
17
|
+
* @example
|
|
18
|
+
* `match-case`, `~third-party`, `domain=example.com|~example.org`
|
|
19
|
+
*/
|
|
20
|
+
class ModifierSerializer extends BaseSerializer {
|
|
21
|
+
/**
|
|
22
|
+
* Serializes a modifier node to binary format.
|
|
23
|
+
*
|
|
24
|
+
* @param node Node to serialize.
|
|
25
|
+
* @param buffer ByteBuffer for writing binary data.
|
|
26
|
+
*/
|
|
27
|
+
static serialize(node, buffer) {
|
|
28
|
+
buffer.writeUint8(BinaryTypeMarshallingMap.ModifierNode);
|
|
29
|
+
buffer.writeUint8(ModifierNodeMarshallingMap.Name);
|
|
30
|
+
ValueSerializer.serialize(node.name, buffer, FREQUENT_MODIFIERS_SERIALIZATION_MAP);
|
|
31
|
+
if (!isUndefined(node.value)) {
|
|
32
|
+
buffer.writeUint8(ModifierNodeMarshallingMap.Value);
|
|
33
|
+
ValueSerializer.serialize(node.value, buffer, FREQUENT_REDIRECT_MODIFIERS_SERIALIZATION_MAP.get(node.name.value));
|
|
34
|
+
}
|
|
35
|
+
buffer.writeUint8(ModifierNodeMarshallingMap.Exception);
|
|
36
|
+
buffer.writeUint8(node.exception ? 1 : 0);
|
|
37
|
+
if (!isUndefined(node.start)) {
|
|
38
|
+
buffer.writeUint8(ModifierNodeMarshallingMap.Start);
|
|
39
|
+
buffer.writeUint32(node.start);
|
|
40
|
+
}
|
|
41
|
+
if (!isUndefined(node.end)) {
|
|
42
|
+
buffer.writeUint8(ModifierNodeMarshallingMap.End);
|
|
43
|
+
buffer.writeUint32(node.end);
|
|
44
|
+
}
|
|
45
|
+
buffer.writeUint8(NULL);
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
export { ModifierSerializer };
|
|
@@ -0,0 +1,52 @@
|
|
|
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 { NULL } from '../../utils/constants.js';
|
|
8
|
+
import { ValueSerializer } from './value-serializer.js';
|
|
9
|
+
import { isNull, isUndefined } from '../../utils/type-guards.js';
|
|
10
|
+
import { BaseSerializer } from '../base-serializer.js';
|
|
11
|
+
import { ParameterListNodeMarshallingMap } from '../../marshalling-utils/misc/parameter-list-common.js';
|
|
12
|
+
import { BinaryTypeMarshallingMap } from '../../marshalling-utils/misc/binary-type-common.js';
|
|
13
|
+
|
|
14
|
+
/**
|
|
15
|
+
* Serializer for parameter list nodes.
|
|
16
|
+
*/
|
|
17
|
+
class ParameterListSerializer extends BaseSerializer {
|
|
18
|
+
/**
|
|
19
|
+
* Serializes a parameter list node to binary format.
|
|
20
|
+
*
|
|
21
|
+
* @param node Node to serialize.
|
|
22
|
+
* @param buffer ByteBuffer for writing binary data.
|
|
23
|
+
* @param frequentValuesMap Optional map of frequent values.
|
|
24
|
+
* @param toLower Whether to lowercase the value before the frequent value match (defaults to `false`).
|
|
25
|
+
*/
|
|
26
|
+
static serialize(node, buffer, frequentValuesMap, toLower = false) {
|
|
27
|
+
buffer.writeUint8(BinaryTypeMarshallingMap.ParameterListNode);
|
|
28
|
+
const count = node.children.length;
|
|
29
|
+
buffer.writeUint8(ParameterListNodeMarshallingMap.Children);
|
|
30
|
+
// note: we store the count, because re-construction of the array is faster if we know the length
|
|
31
|
+
buffer.writeUint32(count);
|
|
32
|
+
for (let i = 0; i < count; i += 1) {
|
|
33
|
+
const child = node.children[i];
|
|
34
|
+
if (isNull(child)) {
|
|
35
|
+
buffer.writeUint8(BinaryTypeMarshallingMap.Null);
|
|
36
|
+
continue;
|
|
37
|
+
}
|
|
38
|
+
ValueSerializer.serialize(child, buffer, frequentValuesMap, toLower);
|
|
39
|
+
}
|
|
40
|
+
if (!isUndefined(node.start)) {
|
|
41
|
+
buffer.writeUint8(ParameterListNodeMarshallingMap.Start);
|
|
42
|
+
buffer.writeUint32(node.start);
|
|
43
|
+
}
|
|
44
|
+
if (!isUndefined(node.end)) {
|
|
45
|
+
buffer.writeUint8(ParameterListNodeMarshallingMap.End);
|
|
46
|
+
buffer.writeUint32(node.end);
|
|
47
|
+
}
|
|
48
|
+
buffer.writeUint8(NULL);
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
export { ParameterListSerializer };
|
|
@@ -0,0 +1,50 @@
|
|
|
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 { NULL } from '../../utils/constants.js';
|
|
8
|
+
import { isUndefined } from '../../utils/type-guards.js';
|
|
9
|
+
import { BaseSerializer } from '../base-serializer.js';
|
|
10
|
+
import { ValueNodeMarshallingMap } from '../../marshalling-utils/misc/value-common.js';
|
|
11
|
+
import { BinaryTypeMarshallingMap } from '../../marshalling-utils/misc/binary-type-common.js';
|
|
12
|
+
|
|
13
|
+
/**
|
|
14
|
+
* Value serializer.
|
|
15
|
+
*/
|
|
16
|
+
class ValueSerializer extends BaseSerializer {
|
|
17
|
+
/**
|
|
18
|
+
* Serializes a value node to binary format.
|
|
19
|
+
*
|
|
20
|
+
* @param node Node to serialize.
|
|
21
|
+
* @param buffer ByteBuffer for writing binary data.
|
|
22
|
+
* @param frequentValuesMap Optional map of frequent values.
|
|
23
|
+
* @param toLower Whether to lowercase the value before the frequent value match (defaults to `false`).
|
|
24
|
+
*/
|
|
25
|
+
static serialize(node, buffer, frequentValuesMap, toLower = false) {
|
|
26
|
+
buffer.writeUint8(BinaryTypeMarshallingMap.ValueNode);
|
|
27
|
+
const frequentValue = frequentValuesMap?.get(toLower ? node.value.toLowerCase() : node.value);
|
|
28
|
+
// note: do not use just `if (frequentValue)` because it can be 0
|
|
29
|
+
if (!isUndefined(frequentValue)) {
|
|
30
|
+
buffer.writeUint8(ValueNodeMarshallingMap.FrequentValue);
|
|
31
|
+
buffer.writeUint8(frequentValue);
|
|
32
|
+
}
|
|
33
|
+
else {
|
|
34
|
+
buffer.writeUint8(ValueNodeMarshallingMap.Value);
|
|
35
|
+
buffer.writeString(node.value);
|
|
36
|
+
}
|
|
37
|
+
// note: do not use just `if (node.start)` because it can be 0
|
|
38
|
+
if (!isUndefined(node.start)) {
|
|
39
|
+
buffer.writeUint8(ValueNodeMarshallingMap.Start);
|
|
40
|
+
buffer.writeUint32(node.start);
|
|
41
|
+
}
|
|
42
|
+
if (!isUndefined(node.end)) {
|
|
43
|
+
buffer.writeUint8(ValueNodeMarshallingMap.End);
|
|
44
|
+
buffer.writeUint32(node.end);
|
|
45
|
+
}
|
|
46
|
+
buffer.writeUint8(NULL);
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
export { ValueSerializer };
|
|
@@ -0,0 +1,70 @@
|
|
|
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 { NULL } from '../../utils/constants.js';
|
|
8
|
+
import { ValueSerializer } from '../misc/value-serializer.js';
|
|
9
|
+
import { isUndefined } from '../../utils/type-guards.js';
|
|
10
|
+
import { HostnameListSerializer } from './hostname-list-serializer.js';
|
|
11
|
+
import { BaseSerializer } from '../base-serializer.js';
|
|
12
|
+
import { HostRuleMarshallingMap } from '../../marshalling-utils/misc/host-rule-common.js';
|
|
13
|
+
import { BinaryTypeMarshallingMap } from '../../marshalling-utils/misc/binary-type-common.js';
|
|
14
|
+
import { getSyntaxSerializationMap } from '../../marshalling-utils/syntax-serialization-map.js';
|
|
15
|
+
|
|
16
|
+
/**
|
|
17
|
+
* `HostRuleSerializer` is responsible for serializing hosts-like rules.
|
|
18
|
+
*
|
|
19
|
+
* HostRule is a structure for simple host-level rules (i.e. /etc/hosts syntax).
|
|
20
|
+
* It also supports "just domain" syntax. In this case, the IP will be set to 0.0.0.0.
|
|
21
|
+
*
|
|
22
|
+
* Rules syntax looks like this:
|
|
23
|
+
* ```text
|
|
24
|
+
* IP_address canonical_hostname [aliases...]
|
|
25
|
+
* ```
|
|
26
|
+
*
|
|
27
|
+
* @example
|
|
28
|
+
* `192.168.1.13 bar.mydomain.org bar` -- ipv4
|
|
29
|
+
* `ff02::1 ip6-allnodes` -- ipv6
|
|
30
|
+
* `::1 localhost ip6-localhost ip6-loopback` -- ipv6 aliases
|
|
31
|
+
* `example.org` -- "just domain" syntax
|
|
32
|
+
* @see {@link http://man7.org/linux/man-pages/man5/hosts.5.html}
|
|
33
|
+
*/
|
|
34
|
+
class HostRuleSerializer extends BaseSerializer {
|
|
35
|
+
/**
|
|
36
|
+
* Serializes a host rule node to binary format.
|
|
37
|
+
*
|
|
38
|
+
* @param node Node to serialize.
|
|
39
|
+
* @param buffer ByteBuffer for writing binary data.
|
|
40
|
+
*/
|
|
41
|
+
// TODO: add support for raws, if ever needed
|
|
42
|
+
static serialize(node, buffer) {
|
|
43
|
+
buffer.writeUint8(BinaryTypeMarshallingMap.HostRuleNode);
|
|
44
|
+
buffer.writeUint8(HostRuleMarshallingMap.Syntax);
|
|
45
|
+
buffer.writeUint8(getSyntaxSerializationMap().get(node.syntax) ?? 0);
|
|
46
|
+
if (node.ip) {
|
|
47
|
+
buffer.writeUint8(HostRuleMarshallingMap.Ip);
|
|
48
|
+
ValueSerializer.serialize(node.ip, buffer);
|
|
49
|
+
}
|
|
50
|
+
if (node.hostnames) {
|
|
51
|
+
buffer.writeUint8(HostRuleMarshallingMap.HostnameList);
|
|
52
|
+
HostnameListSerializer.serialize(node.hostnames, buffer);
|
|
53
|
+
}
|
|
54
|
+
if (node.comment) {
|
|
55
|
+
buffer.writeUint8(HostRuleMarshallingMap.Comment);
|
|
56
|
+
ValueSerializer.serialize(node.comment, buffer);
|
|
57
|
+
}
|
|
58
|
+
if (!isUndefined(node.start)) {
|
|
59
|
+
buffer.writeUint8(HostRuleMarshallingMap.Start);
|
|
60
|
+
buffer.writeUint32(node.start);
|
|
61
|
+
}
|
|
62
|
+
if (!isUndefined(node.end)) {
|
|
63
|
+
buffer.writeUint8(HostRuleMarshallingMap.End);
|
|
64
|
+
buffer.writeUint32(node.end);
|
|
65
|
+
}
|
|
66
|
+
buffer.writeUint8(NULL);
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
export { HostRuleSerializer };
|