@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,56 @@
|
|
|
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 { createConversionResult } from './base-interfaces/conversion-result.js';
|
|
8
|
+
import { BaseConverter } from './base-interfaces/base-converter.js';
|
|
9
|
+
import { FilterListParser } from '../parser/filterlist-parser.js';
|
|
10
|
+
import { FilterListConverter } from './filter-list.js';
|
|
11
|
+
import { defaultParserOptions } from '../parser/options.js';
|
|
12
|
+
import { FilterListGenerator } from '../generator/filterlist-generator.js';
|
|
13
|
+
|
|
14
|
+
/**
|
|
15
|
+
* @file Filter list converter for raw filter lists
|
|
16
|
+
*
|
|
17
|
+
* Technically, this is a wrapper around `FilterListConverter` that works with nodes instead of strings.
|
|
18
|
+
*/
|
|
19
|
+
/**
|
|
20
|
+
* Adblock filter list converter class.
|
|
21
|
+
*
|
|
22
|
+
* You can use this class to convert string-based filter lists, since most of the converters work with nodes.
|
|
23
|
+
* This class just provides an extra layer on top of the {@link FilterListConverter} and calls the parser/serializer
|
|
24
|
+
* before/after the conversion internally.
|
|
25
|
+
*
|
|
26
|
+
* @todo Implement `convertToUbo` and `convertToAbp`
|
|
27
|
+
*/
|
|
28
|
+
class RawFilterListConverter extends BaseConverter {
|
|
29
|
+
/**
|
|
30
|
+
* Converts an adblock filter list text to AdGuard format, if possible.
|
|
31
|
+
*
|
|
32
|
+
* @param rawFilterList Raw filter list text to convert
|
|
33
|
+
* @param tolerant Indicates whether the converter should be tolerant to invalid rules. If enabled and a rule is
|
|
34
|
+
* invalid, it will be left as is. If disabled and a rule is invalid, the whole filter list will be failed.
|
|
35
|
+
* Defaults to `true`.
|
|
36
|
+
* @returns An object which follows the {@link ConversionResult} interface. Its `result` property contains
|
|
37
|
+
* the array of converted filter list text, and its `isConverted` flag indicates whether the original rule was
|
|
38
|
+
* converted. If the rule was not converted, the original filter list text will be returned
|
|
39
|
+
* @throws If the filter list is invalid or cannot be converted (if the tolerant mode is disabled)
|
|
40
|
+
*/
|
|
41
|
+
static convertToAdg(rawFilterList, tolerant = true) {
|
|
42
|
+
const conversionResult = FilterListConverter.convertToAdg(FilterListParser.parse(rawFilterList, {
|
|
43
|
+
...defaultParserOptions,
|
|
44
|
+
isLocIncluded: false,
|
|
45
|
+
tolerant,
|
|
46
|
+
}), tolerant);
|
|
47
|
+
// If the filter list was not converted, return the original text
|
|
48
|
+
if (!conversionResult.isConverted) {
|
|
49
|
+
return createConversionResult(rawFilterList, false);
|
|
50
|
+
}
|
|
51
|
+
// Otherwise, serialize the filter list and return the result
|
|
52
|
+
return createConversionResult(FilterListGenerator.generate(conversionResult.result, false, tolerant), true);
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
export { RawFilterListConverter };
|
|
@@ -0,0 +1,81 @@
|
|
|
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 { RuleCategory, NetworkRuleType } from '../nodes/index.js';
|
|
8
|
+
import { CommentRuleConverter } from './comment/index.js';
|
|
9
|
+
import { CosmeticRuleConverter } from './cosmetic/index.js';
|
|
10
|
+
import { NetworkRuleConverter } from './network/index.js';
|
|
11
|
+
import { RuleConversionError } from '../errors/rule-conversion-error.js';
|
|
12
|
+
import { RuleConverterBase } from './base-interfaces/rule-converter-base.js';
|
|
13
|
+
import { createConversionResult } from './base-interfaces/conversion-result.js';
|
|
14
|
+
|
|
15
|
+
/**
|
|
16
|
+
* @file Adblock rule converter
|
|
17
|
+
*
|
|
18
|
+
* This file is the entry point for all rule converters
|
|
19
|
+
* which automatically detects the rule type and calls
|
|
20
|
+
* the corresponding "sub-converter".
|
|
21
|
+
*/
|
|
22
|
+
/**
|
|
23
|
+
* Adblock filtering rule converter class
|
|
24
|
+
*
|
|
25
|
+
* @todo Implement `convertToUbo` and `convertToAbp`
|
|
26
|
+
*/
|
|
27
|
+
class RuleConverter extends RuleConverterBase {
|
|
28
|
+
/**
|
|
29
|
+
* Converts an adblock filtering rule to AdGuard format, if possible.
|
|
30
|
+
*
|
|
31
|
+
* @param rule Rule node to convert
|
|
32
|
+
* @returns An object which follows the {@link NodeConversionResult} interface. Its `result` property contains
|
|
33
|
+
* the array of converted rule nodes, and its `isConverted` flag indicates whether the original rule was converted.
|
|
34
|
+
* If the rule was not converted, the result array will contain the original node with the same object reference
|
|
35
|
+
* @throws If the rule is invalid or cannot be converted
|
|
36
|
+
*/
|
|
37
|
+
static convertToAdg(rule) {
|
|
38
|
+
// Delegate conversion to the corresponding sub-converter
|
|
39
|
+
// based on the rule category
|
|
40
|
+
switch (rule.category) {
|
|
41
|
+
case RuleCategory.Comment:
|
|
42
|
+
return CommentRuleConverter.convertToAdg(rule);
|
|
43
|
+
case RuleCategory.Cosmetic:
|
|
44
|
+
return CosmeticRuleConverter.convertToAdg(rule);
|
|
45
|
+
case RuleCategory.Network:
|
|
46
|
+
// TODO: Handle hosts rules later
|
|
47
|
+
if (rule.type === NetworkRuleType.HostRule) {
|
|
48
|
+
return createConversionResult([rule], false);
|
|
49
|
+
}
|
|
50
|
+
return NetworkRuleConverter.convertToAdg(rule);
|
|
51
|
+
case RuleCategory.Invalid:
|
|
52
|
+
case RuleCategory.Empty:
|
|
53
|
+
// Just forward the rule as is
|
|
54
|
+
return createConversionResult([rule], false);
|
|
55
|
+
default:
|
|
56
|
+
// Never happens during normal operation
|
|
57
|
+
throw new RuleConversionError('Unknown rule category');
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
/**
|
|
61
|
+
* Converts an adblock filtering rule to uBlock Origin format, if possible.
|
|
62
|
+
*
|
|
63
|
+
* @param rule Rule node to convert
|
|
64
|
+
* @returns An object which follows the {@link NodeConversionResult} interface. Its `result` property contains
|
|
65
|
+
* the array of converted rule nodes, and its `isConverted` flag indicates whether the original rule was converted.
|
|
66
|
+
* If the rule was not converted, the result array will contain the original node with the same object reference
|
|
67
|
+
* @throws If the rule is invalid or cannot be converted
|
|
68
|
+
*/
|
|
69
|
+
// TODO: Add support for other rule types
|
|
70
|
+
static convertToUbo(rule) {
|
|
71
|
+
if (rule.category === RuleCategory.Cosmetic) {
|
|
72
|
+
return CosmeticRuleConverter.convertToUbo(rule);
|
|
73
|
+
}
|
|
74
|
+
if (rule.category === RuleCategory.Network) {
|
|
75
|
+
return NetworkRuleConverter.convertToUbo(rule);
|
|
76
|
+
}
|
|
77
|
+
return createConversionResult([rule], false);
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
export { RuleConverter };
|
|
@@ -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 { NotImplementedError } from '../errors/not-implemented-error.js';
|
|
8
|
+
|
|
9
|
+
/**
|
|
10
|
+
* @file Base deserializer class.
|
|
11
|
+
*/
|
|
12
|
+
/**
|
|
13
|
+
* Base class for deserializers. Each deserializer should extend this class.
|
|
14
|
+
*/
|
|
15
|
+
class BaseDeserializer {
|
|
16
|
+
/**
|
|
17
|
+
* Deserializes the AST node from a byte buffer.
|
|
18
|
+
*
|
|
19
|
+
* @param buffer Input byte buffer to read from.
|
|
20
|
+
* @param node Destination node to write to.
|
|
21
|
+
* @param args Additional, parser-specific arguments, if needed.
|
|
22
|
+
*/
|
|
23
|
+
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
24
|
+
static deserialize(buffer, node, ...args) {
|
|
25
|
+
throw new NotImplementedError();
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
export { BaseDeserializer };
|
|
@@ -0,0 +1,79 @@
|
|
|
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 { CommentRuleType, RuleCategory } from '../../nodes/index.js';
|
|
9
|
+
import { AdblockSyntax } from '../../utils/adblockers.js';
|
|
10
|
+
import { BaseDeserializer } from '../base-deserializer.js';
|
|
11
|
+
import { AgentCommentMarshallingMap } from '../../marshalling-utils/comment/agent-comment-common.js';
|
|
12
|
+
import { AgentDeserializer } from './agent-deserializer.js';
|
|
13
|
+
import { BinaryTypeMarshallingMap } from '../../marshalling-utils/misc/binary-type-common.js';
|
|
14
|
+
|
|
15
|
+
/* eslint-disable no-param-reassign */
|
|
16
|
+
/**
|
|
17
|
+
* `AgentCommentDeserializer` is responsible for deserializing an Adblock agent comments.
|
|
18
|
+
* Adblock agent comment marks that the filter list is supposed to
|
|
19
|
+
* be used by the specified ad blockers.
|
|
20
|
+
*
|
|
21
|
+
* @example
|
|
22
|
+
* - ```adblock
|
|
23
|
+
* [AdGuard]
|
|
24
|
+
* ```
|
|
25
|
+
* - ```adblock
|
|
26
|
+
* [Adblock Plus 2.0]
|
|
27
|
+
* ```
|
|
28
|
+
* - ```adblock
|
|
29
|
+
* [uBlock Origin]
|
|
30
|
+
* ```
|
|
31
|
+
* - ```adblock
|
|
32
|
+
* [uBlock Origin 1.45.3]
|
|
33
|
+
* ```
|
|
34
|
+
* - ```adblock
|
|
35
|
+
* [Adblock Plus 2.0; AdGuard]
|
|
36
|
+
* ```
|
|
37
|
+
*/
|
|
38
|
+
class AgentCommentDeserializer extends BaseDeserializer {
|
|
39
|
+
/**
|
|
40
|
+
* Deserializes an agent list node from binary format.
|
|
41
|
+
*
|
|
42
|
+
* @param buffer ByteBuffer for reading binary data.
|
|
43
|
+
* @param node Destination node.
|
|
44
|
+
*/
|
|
45
|
+
static deserialize(buffer, node) {
|
|
46
|
+
buffer.assertUint8(BinaryTypeMarshallingMap.AgentRuleNode);
|
|
47
|
+
node.type = CommentRuleType.AgentCommentRule;
|
|
48
|
+
node.syntax = AdblockSyntax.Common;
|
|
49
|
+
node.category = RuleCategory.Comment;
|
|
50
|
+
let prop = buffer.readUint8();
|
|
51
|
+
while (prop !== NULL) {
|
|
52
|
+
switch (prop) {
|
|
53
|
+
case AgentCommentMarshallingMap.Children:
|
|
54
|
+
node.children = new Array(buffer.readUint8());
|
|
55
|
+
// read children
|
|
56
|
+
for (let i = 0; i < node.children.length; i += 1) {
|
|
57
|
+
AgentDeserializer.deserialize(buffer, node.children[i] = {});
|
|
58
|
+
}
|
|
59
|
+
break;
|
|
60
|
+
case AgentCommentMarshallingMap.Start:
|
|
61
|
+
node.start = buffer.readUint32();
|
|
62
|
+
break;
|
|
63
|
+
case AgentCommentMarshallingMap.End:
|
|
64
|
+
node.end = buffer.readUint32();
|
|
65
|
+
break;
|
|
66
|
+
default:
|
|
67
|
+
throw new Error(`Invalid property: ${prop}`);
|
|
68
|
+
}
|
|
69
|
+
prop = buffer.readUint8();
|
|
70
|
+
}
|
|
71
|
+
// Maybe children are not present in the binary data,
|
|
72
|
+
// in this case, we should initialize it as an empty array.
|
|
73
|
+
if (!node.children) {
|
|
74
|
+
node.children = [];
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
export { AgentCommentDeserializer };
|
|
@@ -0,0 +1,65 @@
|
|
|
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 { BaseDeserializer } from '../base-deserializer.js';
|
|
9
|
+
import { AgentNodeMarshallingMap, FREQUENT_AGENTS_DESERIALIZATION_MAP } from '../../marshalling-utils/comment/agent-common.js';
|
|
10
|
+
import { getAdblockSyntax } from '../../common/agent-common.js';
|
|
11
|
+
import { ValueDeserializer } from '../misc/value-deserializer.js';
|
|
12
|
+
import { BinaryTypeMarshallingMap } from '../../marshalling-utils/misc/binary-type-common.js';
|
|
13
|
+
|
|
14
|
+
/* eslint-disable no-param-reassign */
|
|
15
|
+
/**
|
|
16
|
+
* `AgentDeserializer` is responsible for deserializing single adblock agent elements.
|
|
17
|
+
*
|
|
18
|
+
* @example
|
|
19
|
+
* If the adblock agent rule is
|
|
20
|
+
* ```adblock
|
|
21
|
+
* [Adblock Plus 2.0; AdGuard]
|
|
22
|
+
* ```
|
|
23
|
+
* then the adblock agents are `Adblock Plus 2.0` and `AdGuard`, and this
|
|
24
|
+
* class is responsible for parsing them. The rule itself is parsed by
|
|
25
|
+
* `AgentCommentSerializer`, which uses this class to parse single agents.
|
|
26
|
+
*/
|
|
27
|
+
class AgentDeserializer extends BaseDeserializer {
|
|
28
|
+
/**
|
|
29
|
+
* Deserializes an agent node from binary format.
|
|
30
|
+
*
|
|
31
|
+
* @param buffer ByteBuffer for reading binary data.
|
|
32
|
+
* @param node Destination node.
|
|
33
|
+
* @throws If the binary data is malformed.
|
|
34
|
+
*/
|
|
35
|
+
static deserialize(buffer, node) {
|
|
36
|
+
buffer.assertUint8(BinaryTypeMarshallingMap.AgentNode);
|
|
37
|
+
node.type = 'Agent';
|
|
38
|
+
let prop = buffer.readUint8();
|
|
39
|
+
while (prop !== NULL) {
|
|
40
|
+
switch (prop) {
|
|
41
|
+
case AgentNodeMarshallingMap.Adblock:
|
|
42
|
+
// eslint-disable-next-line max-len
|
|
43
|
+
ValueDeserializer.deserialize(buffer, node.adblock = {}, FREQUENT_AGENTS_DESERIALIZATION_MAP);
|
|
44
|
+
if (node.adblock) {
|
|
45
|
+
node.syntax = getAdblockSyntax(node.adblock.value);
|
|
46
|
+
}
|
|
47
|
+
break;
|
|
48
|
+
case AgentNodeMarshallingMap.Version:
|
|
49
|
+
ValueDeserializer.deserialize(buffer, node.version = {});
|
|
50
|
+
break;
|
|
51
|
+
case AgentNodeMarshallingMap.Start:
|
|
52
|
+
node.start = buffer.readUint32();
|
|
53
|
+
break;
|
|
54
|
+
case AgentNodeMarshallingMap.End:
|
|
55
|
+
node.end = buffer.readUint32();
|
|
56
|
+
break;
|
|
57
|
+
default:
|
|
58
|
+
throw new Error(`Invalid property: ${prop}`);
|
|
59
|
+
}
|
|
60
|
+
prop = buffer.readUint8();
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
export { AgentDeserializer };
|
|
@@ -0,0 +1,54 @@
|
|
|
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 { AgentCommentDeserializer } from './agent-comment-deserializer.js';
|
|
8
|
+
import { ConfigCommentDeserializer } from './config-comment-deserializer.js';
|
|
9
|
+
import { HintCommentDeserializer } from './hint-comment-deserializer.js';
|
|
10
|
+
import { MetadataCommentDeserializer } from './metadata-comment-deserializer.js';
|
|
11
|
+
import { PreProcessorCommentDeserializer } from './pre-processor-comment-deserializer.js';
|
|
12
|
+
import { SimpleCommentDeserializer } from './simple-comment-deserializer.js';
|
|
13
|
+
import { BaseDeserializer } from '../base-deserializer.js';
|
|
14
|
+
import { BinaryTypeMarshallingMap } from '../../marshalling-utils/misc/binary-type-common.js';
|
|
15
|
+
|
|
16
|
+
/**
|
|
17
|
+
* `CommentRuleDeserializer` is responsible for deserializing any comment-like adblock rules.
|
|
18
|
+
*/
|
|
19
|
+
class CommentRuleDeserializer extends BaseDeserializer {
|
|
20
|
+
/**
|
|
21
|
+
* Deserializes a comment rule node from binary format.
|
|
22
|
+
*
|
|
23
|
+
* @param buffer ByteBuffer for reading binary data.
|
|
24
|
+
* @param node Destination node.
|
|
25
|
+
* @throws If the binary data is malformed.
|
|
26
|
+
*/
|
|
27
|
+
static deserialize(buffer, node) {
|
|
28
|
+
const type = buffer.peekUint8();
|
|
29
|
+
switch (type) {
|
|
30
|
+
case BinaryTypeMarshallingMap.AgentRuleNode:
|
|
31
|
+
AgentCommentDeserializer.deserialize(buffer, node);
|
|
32
|
+
return;
|
|
33
|
+
case BinaryTypeMarshallingMap.HintRuleNode:
|
|
34
|
+
HintCommentDeserializer.deserialize(buffer, node);
|
|
35
|
+
return;
|
|
36
|
+
case BinaryTypeMarshallingMap.PreProcessorCommentRuleNode:
|
|
37
|
+
PreProcessorCommentDeserializer.deserialize(buffer, node);
|
|
38
|
+
return;
|
|
39
|
+
case BinaryTypeMarshallingMap.MetadataCommentRuleNode:
|
|
40
|
+
MetadataCommentDeserializer.deserialize(buffer, node);
|
|
41
|
+
return;
|
|
42
|
+
case BinaryTypeMarshallingMap.ConfigCommentRuleNode:
|
|
43
|
+
ConfigCommentDeserializer.deserialize(buffer, node);
|
|
44
|
+
return;
|
|
45
|
+
case BinaryTypeMarshallingMap.CommentRuleNode:
|
|
46
|
+
SimpleCommentDeserializer.deserialize(buffer, node);
|
|
47
|
+
return;
|
|
48
|
+
default:
|
|
49
|
+
throw new Error(`Unknown comment rule type: ${type}`);
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
export { CommentRuleDeserializer };
|
|
@@ -0,0 +1,111 @@
|
|
|
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 { CommentRuleType, RuleCategory } from '../../nodes/index.js';
|
|
9
|
+
import { BaseDeserializer } from '../base-deserializer.js';
|
|
10
|
+
import { ConfigNodeMarshallingMap, ConfigCommentRuleMarshallingMap, FREQUENT_COMMANDS_SERIALIZATION_MAP } from '../../marshalling-utils/comment/config-comment-common.js';
|
|
11
|
+
import { AdblockSyntax } from '../../utils/adblockers.js';
|
|
12
|
+
import { ValueDeserializer } from '../misc/value-deserializer.js';
|
|
13
|
+
import { ParameterListDeserializer } from '../misc/parameter-list-deserializer.js';
|
|
14
|
+
import { BinaryTypeMarshallingMap } from '../../marshalling-utils/misc/binary-type-common.js';
|
|
15
|
+
|
|
16
|
+
/* eslint-disable no-param-reassign */
|
|
17
|
+
/**
|
|
18
|
+
* Value map for binary deserialization. This helps to reduce the size of the serialized data,
|
|
19
|
+
* as it allows us to use a single byte to represent frequently used values.
|
|
20
|
+
*/
|
|
21
|
+
let frequentCommandsDeserializationMap;
|
|
22
|
+
const getFrequentCommandsDeserializationMap = () => {
|
|
23
|
+
if (!frequentCommandsDeserializationMap) {
|
|
24
|
+
frequentCommandsDeserializationMap = new Map(Array.from(FREQUENT_COMMANDS_SERIALIZATION_MAP).map(([key, value]) => [value, key]));
|
|
25
|
+
}
|
|
26
|
+
return frequentCommandsDeserializationMap;
|
|
27
|
+
};
|
|
28
|
+
/**
|
|
29
|
+
* `ConfigCommentDeserializer` is responsible for deserializing inline AGLint configuration rules.
|
|
30
|
+
* Generally, the idea is inspired by ESLint inline configuration comments.
|
|
31
|
+
*
|
|
32
|
+
* @see {@link https://eslint.org/docs/latest/user-guide/configuring/rules#using-configuration-comments}
|
|
33
|
+
*/
|
|
34
|
+
class ConfigCommentDeserializer extends BaseDeserializer {
|
|
35
|
+
/**
|
|
36
|
+
* Deserializes a metadata comment node from binary format.
|
|
37
|
+
*
|
|
38
|
+
* @param buffer ByteBuffer for reading binary data.
|
|
39
|
+
* @param node Destination node.
|
|
40
|
+
* @throws If the binary data is malformed.
|
|
41
|
+
*/
|
|
42
|
+
static deserializeConfigNode(buffer, node) {
|
|
43
|
+
buffer.assertUint8(BinaryTypeMarshallingMap.ConfigNode);
|
|
44
|
+
node.type = 'ConfigNode';
|
|
45
|
+
let prop = buffer.readUint8();
|
|
46
|
+
while (prop !== NULL) {
|
|
47
|
+
switch (prop) {
|
|
48
|
+
case ConfigNodeMarshallingMap.Value:
|
|
49
|
+
// note: it is safe to use JSON.parse here, because we serialized it with JSON.stringify
|
|
50
|
+
node.value = JSON.parse(buffer.readString());
|
|
51
|
+
break;
|
|
52
|
+
case ConfigNodeMarshallingMap.Start:
|
|
53
|
+
node.start = buffer.readUint32();
|
|
54
|
+
break;
|
|
55
|
+
case ConfigNodeMarshallingMap.End:
|
|
56
|
+
node.end = buffer.readUint32();
|
|
57
|
+
break;
|
|
58
|
+
default:
|
|
59
|
+
throw new Error(`Invalid property: ${prop}.`);
|
|
60
|
+
}
|
|
61
|
+
prop = buffer.readUint8();
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
/**
|
|
65
|
+
* Deserializes a metadata comment node from binary format.
|
|
66
|
+
*
|
|
67
|
+
* @param buffer ByteBuffer for reading binary data.
|
|
68
|
+
* @param node Destination node.
|
|
69
|
+
* @throws If the binary data is malformed.
|
|
70
|
+
*/
|
|
71
|
+
static deserialize(buffer, node) {
|
|
72
|
+
buffer.assertUint8(BinaryTypeMarshallingMap.ConfigCommentRuleNode);
|
|
73
|
+
node.type = CommentRuleType.ConfigCommentRule;
|
|
74
|
+
node.category = RuleCategory.Comment;
|
|
75
|
+
node.syntax = AdblockSyntax.Common;
|
|
76
|
+
let prop = buffer.readUint8();
|
|
77
|
+
while (prop !== NULL) {
|
|
78
|
+
switch (prop) {
|
|
79
|
+
case ConfigCommentRuleMarshallingMap.Marker:
|
|
80
|
+
ValueDeserializer.deserialize(buffer, node.marker = {});
|
|
81
|
+
break;
|
|
82
|
+
case ConfigCommentRuleMarshallingMap.Command:
|
|
83
|
+
// eslint-disable-next-line max-len
|
|
84
|
+
ValueDeserializer.deserialize(buffer, node.command = {}, getFrequentCommandsDeserializationMap());
|
|
85
|
+
break;
|
|
86
|
+
case ConfigCommentRuleMarshallingMap.Params:
|
|
87
|
+
if (buffer.peekUint8() === BinaryTypeMarshallingMap.ConfigNode) {
|
|
88
|
+
ConfigCommentDeserializer.deserializeConfigNode(buffer, node.params = {});
|
|
89
|
+
}
|
|
90
|
+
else {
|
|
91
|
+
ParameterListDeserializer.deserialize(buffer, node.params = {});
|
|
92
|
+
}
|
|
93
|
+
break;
|
|
94
|
+
case ConfigCommentRuleMarshallingMap.Comment:
|
|
95
|
+
ValueDeserializer.deserialize(buffer, node.comment = {});
|
|
96
|
+
break;
|
|
97
|
+
case ConfigCommentRuleMarshallingMap.Start:
|
|
98
|
+
node.start = buffer.readUint32();
|
|
99
|
+
break;
|
|
100
|
+
case ConfigCommentRuleMarshallingMap.End:
|
|
101
|
+
node.end = buffer.readUint32();
|
|
102
|
+
break;
|
|
103
|
+
default:
|
|
104
|
+
throw new Error(`Invalid property: ${prop}`);
|
|
105
|
+
}
|
|
106
|
+
prop = buffer.readUint8();
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
|
|
111
|
+
export { ConfigCommentDeserializer };
|
|
@@ -0,0 +1,72 @@
|
|
|
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 { RuleCategory, CommentRuleType } from '../../nodes/index.js';
|
|
9
|
+
import { HintDeserializer } from './hint-deserializer.js';
|
|
10
|
+
import { AdblockSyntax } from '../../utils/adblockers.js';
|
|
11
|
+
import { BaseDeserializer } from '../base-deserializer.js';
|
|
12
|
+
import { HintCommentMarshallingMap } from '../../marshalling-utils/comment/hint-comment-common.js';
|
|
13
|
+
import { BinaryTypeMarshallingMap } from '../../marshalling-utils/misc/binary-type-common.js';
|
|
14
|
+
import { getSyntaxDeserializationMap } from '../syntax-deserialization-map.js';
|
|
15
|
+
|
|
16
|
+
/* eslint-disable no-param-reassign */
|
|
17
|
+
/**
|
|
18
|
+
* `HintCommentDeserializer` is responsible for deserializing AdGuard hint rules.
|
|
19
|
+
*
|
|
20
|
+
* @example
|
|
21
|
+
* The following hint rule
|
|
22
|
+
* ```adblock
|
|
23
|
+
* !+ NOT_OPTIMIZED PLATFORM(windows)
|
|
24
|
+
* ```
|
|
25
|
+
* contains two hints: `NOT_OPTIMIZED` and `PLATFORM`.
|
|
26
|
+
* @see {@link https://kb.adguard.com/en/general/how-to-create-your-own-ad-filters#hints}
|
|
27
|
+
*/
|
|
28
|
+
class HintCommentDeserializer extends BaseDeserializer {
|
|
29
|
+
/**
|
|
30
|
+
* Deserializes a hint rule node from binary format.
|
|
31
|
+
*
|
|
32
|
+
* @param buffer ByteBuffer for reading binary data.
|
|
33
|
+
* @param node Destination node.
|
|
34
|
+
* @throws If the binary data is malformed.
|
|
35
|
+
*/
|
|
36
|
+
static deserialize(buffer, node) {
|
|
37
|
+
buffer.assertUint8(BinaryTypeMarshallingMap.HintRuleNode);
|
|
38
|
+
node.category = RuleCategory.Comment;
|
|
39
|
+
node.type = CommentRuleType.HintCommentRule;
|
|
40
|
+
let prop = buffer.readUint8();
|
|
41
|
+
while (prop !== NULL) {
|
|
42
|
+
switch (prop) {
|
|
43
|
+
case HintCommentMarshallingMap.Syntax:
|
|
44
|
+
node.syntax = getSyntaxDeserializationMap().get(buffer.readUint8()) ?? AdblockSyntax.Common;
|
|
45
|
+
break;
|
|
46
|
+
case HintCommentMarshallingMap.Children:
|
|
47
|
+
node.children = new Array(buffer.readUint8());
|
|
48
|
+
// read children
|
|
49
|
+
for (let i = 0; i < node.children.length; i += 1) {
|
|
50
|
+
HintDeserializer.deserialize(buffer, node.children[i] = {});
|
|
51
|
+
}
|
|
52
|
+
break;
|
|
53
|
+
case HintCommentMarshallingMap.Start:
|
|
54
|
+
node.start = buffer.readUint32();
|
|
55
|
+
break;
|
|
56
|
+
case HintCommentMarshallingMap.End:
|
|
57
|
+
node.end = buffer.readUint32();
|
|
58
|
+
break;
|
|
59
|
+
default:
|
|
60
|
+
throw new Error(`Invalid property: ${prop}`);
|
|
61
|
+
}
|
|
62
|
+
prop = buffer.readUint8();
|
|
63
|
+
}
|
|
64
|
+
// Maybe children are not present in the binary data,
|
|
65
|
+
// in this case, we should initialize it as an empty array.
|
|
66
|
+
if (!node.children) {
|
|
67
|
+
node.children = [];
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
export { HintCommentDeserializer };
|
|
@@ -0,0 +1,85 @@
|
|
|
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 { BaseDeserializer } from '../base-deserializer.js';
|
|
9
|
+
import { HintNodeMarshallingMap, FREQUENT_HINTS_SERIALIZATION_MAP, FREQUENT_PLATFORMS_SERIALIZATION_MAP } from '../../marshalling-utils/comment/hint-common.js';
|
|
10
|
+
import { ValueDeserializer } from '../misc/value-deserializer.js';
|
|
11
|
+
import { ParameterListDeserializer } from '../misc/parameter-list-deserializer.js';
|
|
12
|
+
import { BinaryTypeMarshallingMap } from '../../marshalling-utils/misc/binary-type-common.js';
|
|
13
|
+
|
|
14
|
+
/* eslint-disable no-param-reassign */
|
|
15
|
+
/**
|
|
16
|
+
* Value map for binary deserialization. This helps to reduce the size of the serialized data,
|
|
17
|
+
* as it allows us to use a single byte to represent frequently used values.
|
|
18
|
+
*/
|
|
19
|
+
let frequentHintsDeserializationMap;
|
|
20
|
+
const getFrequentHintsDeserializationMap = () => {
|
|
21
|
+
if (!frequentHintsDeserializationMap) {
|
|
22
|
+
frequentHintsDeserializationMap = new Map(Array.from(FREQUENT_HINTS_SERIALIZATION_MAP).map(([key, value]) => [value, key]));
|
|
23
|
+
}
|
|
24
|
+
return frequentHintsDeserializationMap;
|
|
25
|
+
};
|
|
26
|
+
/**
|
|
27
|
+
* Value map for binary deserialization. This helps to reduce the size of the serialized data,
|
|
28
|
+
* as it allows us to use a single byte to represent frequently used values.
|
|
29
|
+
*/
|
|
30
|
+
let frequentPlatformsDeserializationMap;
|
|
31
|
+
const getFrequentPlatformsDeserializationMap = () => {
|
|
32
|
+
if (!frequentPlatformsDeserializationMap) {
|
|
33
|
+
frequentPlatformsDeserializationMap = new Map(Array.from(FREQUENT_PLATFORMS_SERIALIZATION_MAP).map(([key, value]) => [value, key]));
|
|
34
|
+
}
|
|
35
|
+
return frequentPlatformsDeserializationMap;
|
|
36
|
+
};
|
|
37
|
+
/**
|
|
38
|
+
* `HintDeserializer` is responsible for deserializing AdGuard hints.
|
|
39
|
+
*
|
|
40
|
+
* @example
|
|
41
|
+
* If the hint rule is
|
|
42
|
+
* ```adblock
|
|
43
|
+
* !+ NOT_OPTIMIZED PLATFORM(windows)
|
|
44
|
+
* ```
|
|
45
|
+
* then the hints are `NOT_OPTIMIZED` and `PLATFORM(windows)`, and this
|
|
46
|
+
* class is responsible for parsing them. The rule itself is parsed by
|
|
47
|
+
* the `HintRuleParser`, which uses this class to parse single hints.
|
|
48
|
+
*/
|
|
49
|
+
class HintDeserializer extends BaseDeserializer {
|
|
50
|
+
/**
|
|
51
|
+
* Deserializes a hint node from binary format.
|
|
52
|
+
*
|
|
53
|
+
* @param buffer ByteBuffer for reading binary data.
|
|
54
|
+
* @param node Destination node.
|
|
55
|
+
* @throws If the binary data is malformed.
|
|
56
|
+
*/
|
|
57
|
+
static deserialize(buffer, node) {
|
|
58
|
+
buffer.assertUint8(BinaryTypeMarshallingMap.HintNode);
|
|
59
|
+
node.type = 'Hint';
|
|
60
|
+
let prop = buffer.readUint8();
|
|
61
|
+
while (prop !== NULL) {
|
|
62
|
+
switch (prop) {
|
|
63
|
+
case HintNodeMarshallingMap.Name:
|
|
64
|
+
// eslint-disable-next-line max-len
|
|
65
|
+
ValueDeserializer.deserialize(buffer, node.name = {}, getFrequentHintsDeserializationMap());
|
|
66
|
+
break;
|
|
67
|
+
case HintNodeMarshallingMap.Params:
|
|
68
|
+
// eslint-disable-next-line max-len
|
|
69
|
+
ParameterListDeserializer.deserialize(buffer, node.params = {}, getFrequentPlatformsDeserializationMap());
|
|
70
|
+
break;
|
|
71
|
+
case HintNodeMarshallingMap.Start:
|
|
72
|
+
node.start = buffer.readUint32();
|
|
73
|
+
break;
|
|
74
|
+
case HintNodeMarshallingMap.End:
|
|
75
|
+
node.end = buffer.readUint32();
|
|
76
|
+
break;
|
|
77
|
+
default:
|
|
78
|
+
throw new Error(`Invalid property: ${prop}`);
|
|
79
|
+
}
|
|
80
|
+
prop = buffer.readUint8();
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
export { HintDeserializer, getFrequentPlatformsDeserializationMap };
|