cfsolve 0.1.0-aarch64-linux-gnu
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.
- checksums.yaml +7 -0
- data/CHANGELOG.md +6 -0
- data/LICENSE +21 -0
- data/README.md +66 -0
- data/THIRD_PARTY_LICENSES/Inflector-0.11.4/LICENSE.md +22 -0
- data/THIRD_PARTY_LICENSES/README.md +761 -0
- data/THIRD_PARTY_LICENSES/adler2-2.0.1/LICENSE-0BSD +12 -0
- data/THIRD_PARTY_LICENSES/adler2-2.0.1/LICENSE-APACHE +201 -0
- data/THIRD_PARTY_LICENSES/adler2-2.0.1/LICENSE-MIT +23 -0
- data/THIRD_PARTY_LICENSES/ahash-0.8.12/LICENSE-APACHE +201 -0
- data/THIRD_PARTY_LICENSES/ahash-0.8.12/LICENSE-MIT +25 -0
- data/THIRD_PARTY_LICENSES/aho-corasick-1.1.4/COPYING +3 -0
- data/THIRD_PARTY_LICENSES/aho-corasick-1.1.4/LICENSE-MIT +21 -0
- data/THIRD_PARTY_LICENSES/alloc-no-stdlib-2.0.4/LICENSE +12 -0
- data/THIRD_PARTY_LICENSES/alloc-stdlib-0.2.4/LICENSE +12 -0
- data/THIRD_PARTY_LICENSES/allocator-api2-0.2.21/LICENSE-APACHE +176 -0
- data/THIRD_PARTY_LICENSES/allocator-api2-0.2.21/LICENSE-MIT +23 -0
- data/THIRD_PARTY_LICENSES/android_system_properties-0.1.5/LICENSE-APACHE +13 -0
- data/THIRD_PARTY_LICENSES/android_system_properties-0.1.5/LICENSE-MIT +20 -0
- data/THIRD_PARTY_LICENSES/anyhow-1.0.104/LICENSE-APACHE +176 -0
- data/THIRD_PARTY_LICENSES/anyhow-1.0.104/LICENSE-MIT +23 -0
- data/THIRD_PARTY_LICENSES/arrayvec-0.7.6/LICENSE-APACHE +201 -0
- data/THIRD_PARTY_LICENSES/arrayvec-0.7.6/LICENSE-MIT +25 -0
- data/THIRD_PARTY_LICENSES/ascii-1.1.0/LICENSE-APACHE +201 -0
- data/THIRD_PARTY_LICENSES/ascii-1.1.0/LICENSE-MIT +22 -0
- data/THIRD_PARTY_LICENSES/ast_node-5.0.0/LICENSE +201 -0
- data/THIRD_PARTY_LICENSES/async-compression-0.4.45/LICENSE-APACHE +201 -0
- data/THIRD_PARTY_LICENSES/async-compression-0.4.45/LICENSE-MIT +21 -0
- data/THIRD_PARTY_LICENSES/atomic-waker-1.1.2/LICENSE-APACHE +201 -0
- data/THIRD_PARTY_LICENSES/atomic-waker-1.1.2/LICENSE-MIT +23 -0
- data/THIRD_PARTY_LICENSES/atomic-waker-1.1.2/LICENSE-THIRD-PARTY +45 -0
- data/THIRD_PARTY_LICENSES/autocfg-1.5.0/LICENSE-APACHE +201 -0
- data/THIRD_PARTY_LICENSES/autocfg-1.5.0/LICENSE-MIT +25 -0
- data/THIRD_PARTY_LICENSES/base64-0.22.1/LICENSE-APACHE +201 -0
- data/THIRD_PARTY_LICENSES/base64-0.22.1/LICENSE-MIT +21 -0
- data/THIRD_PARTY_LICENSES/base64-simd-0.8.0/LICENSE +21 -0
- data/THIRD_PARTY_LICENSES/better_scoped_tls-1.0.1/LICENSE +201 -0
- data/THIRD_PARTY_LICENSES/bindgen-0.72.1/LICENSE +29 -0
- data/THIRD_PARTY_LICENSES/bitflags-2.13.1/LICENSE-APACHE +201 -0
- data/THIRD_PARTY_LICENSES/bitflags-2.13.1/LICENSE-MIT +25 -0
- data/THIRD_PARTY_LICENSES/bitvec-1.0.1/LICENSE.txt +21 -0
- data/THIRD_PARTY_LICENSES/block-buffer-0.10.4/LICENSE-APACHE +201 -0
- data/THIRD_PARTY_LICENSES/block-buffer-0.10.4/LICENSE-MIT +25 -0
- data/THIRD_PARTY_LICENSES/brotli-8.0.4/LICENSE.BSD-3-Clause +12 -0
- data/THIRD_PARTY_LICENSES/brotli-8.0.4/LICENSE.MIT +19 -0
- data/THIRD_PARTY_LICENSES/brotli-decompressor-5.0.3/LICENSE +12 -0
- data/THIRD_PARTY_LICENSES/browserslist-data-0.1.4/LICENSE +21 -0
- data/THIRD_PARTY_LICENSES/browserslist-rs-0.19.0/LICENSE +21 -0
- data/THIRD_PARTY_LICENSES/bstr-1.12.1/COPYING +8 -0
- data/THIRD_PARTY_LICENSES/bstr-1.12.1/LICENSE-APACHE +201 -0
- data/THIRD_PARTY_LICENSES/bstr-1.12.1/LICENSE-MIT +21 -0
- data/THIRD_PARTY_LICENSES/btls-0.5.6/LICENSE +17 -0
- data/THIRD_PARTY_LICENSES/btls-sys-0.5.6/BORINGSSL-LICENSE +238 -0
- data/THIRD_PARTY_LICENSES/btls-sys-0.5.6/LICENSE-MIT +27 -0
- data/THIRD_PARTY_LICENSES/bumpalo-3.20.3/LICENSE-APACHE +201 -0
- data/THIRD_PARTY_LICENSES/bumpalo-3.20.3/LICENSE-MIT +25 -0
- data/THIRD_PARTY_LICENSES/bytes-1.12.1/LICENSE +25 -0
- data/THIRD_PARTY_LICENSES/bytes-str-0.2.7/LICENSE +202 -0
- data/THIRD_PARTY_LICENSES/camino-1.2.2/LICENSE-APACHE +201 -0
- data/THIRD_PARTY_LICENSES/camino-1.2.2/LICENSE-MIT +23 -0
- data/THIRD_PARTY_LICENSES/cargo-platform-0.1.9/LICENSE-APACHE +201 -0
- data/THIRD_PARTY_LICENSES/cargo-platform-0.1.9/LICENSE-MIT +23 -0
- data/THIRD_PARTY_LICENSES/cargo_metadata-0.19.2/LICENSE-MIT +23 -0
- data/THIRD_PARTY_LICENSES/castaway-0.2.4/LICENSE +21 -0
- data/THIRD_PARTY_LICENSES/cc-1.2.51/LICENSE-APACHE +201 -0
- data/THIRD_PARTY_LICENSES/cc-1.2.51/LICENSE-MIT +25 -0
- data/THIRD_PARTY_LICENSES/cexpr-0.6.0/LICENSE-APACHE +201 -0
- data/THIRD_PARTY_LICENSES/cexpr-0.6.0/LICENSE-MIT +25 -0
- data/THIRD_PARTY_LICENSES/cfg-if-1.0.4/LICENSE-APACHE +201 -0
- data/THIRD_PARTY_LICENSES/cfg-if-1.0.4/LICENSE-MIT +25 -0
- data/THIRD_PARTY_LICENSES/cfsolve/LICENSE +21 -0
- data/THIRD_PARTY_LICENSES/cfsolve-0.1.0/LICENSE +21 -0
- data/THIRD_PARTY_LICENSES/chrono-0.4.42/LICENSE.txt +240 -0
- data/THIRD_PARTY_LICENSES/clang-sys-1.9.1/LICENSE.txt +202 -0
- data/THIRD_PARTY_LICENSES/cmake-0.1.58/LICENSE-APACHE +201 -0
- data/THIRD_PARTY_LICENSES/cmake-0.1.58/LICENSE-MIT +25 -0
- data/THIRD_PARTY_LICENSES/compact_str-0.7.1/LICENSE +21 -0
- data/THIRD_PARTY_LICENSES/compression-codecs-0.4.40/LICENSE-APACHE +201 -0
- data/THIRD_PARTY_LICENSES/compression-codecs-0.4.40/LICENSE-MIT +21 -0
- data/THIRD_PARTY_LICENSES/compression-core-0.4.33/LICENSE-APACHE +201 -0
- data/THIRD_PARTY_LICENSES/compression-core-0.4.33/LICENSE-MIT +21 -0
- data/THIRD_PARTY_LICENSES/cookie-0.18.2/LICENSE-APACHE +202 -0
- data/THIRD_PARTY_LICENSES/cookie-0.18.2/LICENSE-MIT +26 -0
- data/THIRD_PARTY_LICENSES/core-foundation-sys-0.8.7/LICENSE-APACHE +201 -0
- data/THIRD_PARTY_LICENSES/core-foundation-sys-0.8.7/LICENSE-MIT +25 -0
- data/THIRD_PARTY_LICENSES/cpufeatures-0.2.17/LICENSE-APACHE +201 -0
- data/THIRD_PARTY_LICENSES/cpufeatures-0.2.17/LICENSE-MIT +25 -0
- data/THIRD_PARTY_LICENSES/crc32fast-1.5.1/LICENSE-APACHE +202 -0
- data/THIRD_PARTY_LICENSES/crc32fast-1.5.1/LICENSE-MIT +21 -0
- data/THIRD_PARTY_LICENSES/crypto-common-0.1.7/LICENSE-APACHE +201 -0
- data/THIRD_PARTY_LICENSES/crypto-common-0.1.7/LICENSE-MIT +25 -0
- data/THIRD_PARTY_LICENSES/cssparser-0.37.0/LICENSE +373 -0
- data/THIRD_PARTY_LICENSES/cssparser-macros-0.7.1/LICENSE +373 -0
- data/THIRD_PARTY_LICENSES/darling-0.20.11/LICENSE +21 -0
- data/THIRD_PARTY_LICENSES/darling_core-0.20.11/LICENSE +21 -0
- data/THIRD_PARTY_LICENSES/darling_macro-0.20.11/LICENSE +21 -0
- data/THIRD_PARTY_LICENSES/dashmap-5.5.3/LICENSE +21 -0
- data/THIRD_PARTY_LICENSES/data-encoding-2.9.0/LICENSE +22 -0
- data/THIRD_PARTY_LICENSES/debugid-0.8.0/LICENSE +201 -0
- data/THIRD_PARTY_LICENSES/deranged-0.5.8/LICENSE-Apache +202 -0
- data/THIRD_PARTY_LICENSES/deranged-0.5.8/LICENSE-MIT +19 -0
- data/THIRD_PARTY_LICENSES/derive_builder-0.20.2/LICENSE-APACHE +202 -0
- data/THIRD_PARTY_LICENSES/derive_builder-0.20.2/LICENSE-MIT +21 -0
- data/THIRD_PARTY_LICENSES/derive_builder_core-0.20.2/LICENSE-APACHE +202 -0
- data/THIRD_PARTY_LICENSES/derive_builder_core-0.20.2/LICENSE-MIT +21 -0
- data/THIRD_PARTY_LICENSES/derive_builder_macro-0.20.2/LICENSE-APACHE +202 -0
- data/THIRD_PARTY_LICENSES/derive_builder_macro-0.20.2/LICENSE-MIT +21 -0
- data/THIRD_PARTY_LICENSES/derive_more-2.1.1/LICENSE +21 -0
- data/THIRD_PARTY_LICENSES/derive_more-impl-2.1.1/LICENSE +21 -0
- data/THIRD_PARTY_LICENSES/digest-0.10.7/LICENSE-APACHE +201 -0
- data/THIRD_PARTY_LICENSES/digest-0.10.7/LICENSE-MIT +25 -0
- data/THIRD_PARTY_LICENSES/displaydoc-0.2.5/LICENSE-APACHE +201 -0
- data/THIRD_PARTY_LICENSES/displaydoc-0.2.5/LICENSE-MIT +23 -0
- data/THIRD_PARTY_LICENSES/dtoa-1.0.11/LICENSE-APACHE +176 -0
- data/THIRD_PARTY_LICENSES/dtoa-1.0.11/LICENSE-MIT +23 -0
- data/THIRD_PARTY_LICENSES/dtoa-short-0.3.5/LICENSE +373 -0
- data/THIRD_PARTY_LICENSES/ego-tree-0.11.0/LICENSE +14 -0
- data/THIRD_PARTY_LICENSES/either-1.15.0/LICENSE-APACHE +201 -0
- data/THIRD_PARTY_LICENSES/either-1.15.0/LICENSE-MIT +25 -0
- data/THIRD_PARTY_LICENSES/equivalent-1.0.2/LICENSE-APACHE +201 -0
- data/THIRD_PARTY_LICENSES/equivalent-1.0.2/LICENSE-MIT +25 -0
- data/THIRD_PARTY_LICENSES/errno-0.3.14/LICENSE-APACHE +201 -0
- data/THIRD_PARTY_LICENSES/errno-0.3.14/LICENSE-MIT +25 -0
- data/THIRD_PARTY_LICENSES/fastrand-2.3.0/LICENSE-APACHE +201 -0
- data/THIRD_PARTY_LICENSES/fastrand-2.3.0/LICENSE-MIT +23 -0
- data/THIRD_PARTY_LICENSES/find-msvc-tools-0.1.6/LICENSE-APACHE +201 -0
- data/THIRD_PARTY_LICENSES/find-msvc-tools-0.1.6/LICENSE-MIT +25 -0
- data/THIRD_PARTY_LICENSES/fixedbitset-0.5.7/LICENSE-APACHE +201 -0
- data/THIRD_PARTY_LICENSES/fixedbitset-0.5.7/LICENSE-MIT +25 -0
- data/THIRD_PARTY_LICENSES/flate2-1.1.10/LICENSE-APACHE +201 -0
- data/THIRD_PARTY_LICENSES/flate2-1.1.10/LICENSE-MIT +25 -0
- data/THIRD_PARTY_LICENSES/fnv-1.0.7/LICENSE-APACHE +201 -0
- data/THIRD_PARTY_LICENSES/fnv-1.0.7/LICENSE-MIT +25 -0
- data/THIRD_PARTY_LICENSES/foldhash-0.1.5/LICENSE +19 -0
- data/THIRD_PARTY_LICENSES/foldhash-0.2.0/LICENSE +19 -0
- data/THIRD_PARTY_LICENSES/foreign-types-0.5.0/LICENSE-APACHE +202 -0
- data/THIRD_PARTY_LICENSES/foreign-types-0.5.0/LICENSE-MIT +19 -0
- data/THIRD_PARTY_LICENSES/foreign-types-macros-0.2.4/LICENSE-APACHE +202 -0
- data/THIRD_PARTY_LICENSES/foreign-types-macros-0.2.4/LICENSE-MIT +19 -0
- data/THIRD_PARTY_LICENSES/foreign-types-shared-0.3.1/LICENSE-APACHE +202 -0
- data/THIRD_PARTY_LICENSES/foreign-types-shared-0.3.1/LICENSE-MIT +19 -0
- data/THIRD_PARTY_LICENSES/form_urlencoded-1.2.2/LICENSE-APACHE +201 -0
- data/THIRD_PARTY_LICENSES/form_urlencoded-1.2.2/LICENSE-MIT +25 -0
- data/THIRD_PARTY_LICENSES/from_variant-3.0.0/LICENSE +201 -0
- data/THIRD_PARTY_LICENSES/fs_extra-1.3.0/LICENSE +21 -0
- data/THIRD_PARTY_LICENSES/fslock-0.2.1/LICENSE +21 -0
- data/THIRD_PARTY_LICENSES/funty-2.0.0/LICENSE.txt +21 -0
- data/THIRD_PARTY_LICENSES/futures-channel-0.3.34/LICENSE-APACHE +202 -0
- data/THIRD_PARTY_LICENSES/futures-channel-0.3.34/LICENSE-MIT +26 -0
- data/THIRD_PARTY_LICENSES/futures-core-0.3.34/LICENSE-APACHE +202 -0
- data/THIRD_PARTY_LICENSES/futures-core-0.3.34/LICENSE-MIT +26 -0
- data/THIRD_PARTY_LICENSES/futures-sink-0.3.34/LICENSE-APACHE +202 -0
- data/THIRD_PARTY_LICENSES/futures-sink-0.3.34/LICENSE-MIT +26 -0
- data/THIRD_PARTY_LICENSES/futures-task-0.3.34/LICENSE-APACHE +202 -0
- data/THIRD_PARTY_LICENSES/futures-task-0.3.34/LICENSE-MIT +26 -0
- data/THIRD_PARTY_LICENSES/futures-util-0.3.34/LICENSE-APACHE +202 -0
- data/THIRD_PARTY_LICENSES/futures-util-0.3.34/LICENSE-MIT +26 -0
- data/THIRD_PARTY_LICENSES/generic-array-0.14.7/LICENSE +21 -0
- data/THIRD_PARTY_LICENSES/getopts-0.2.24/LICENSE-APACHE +201 -0
- data/THIRD_PARTY_LICENSES/getopts-0.2.24/LICENSE-MIT +25 -0
- data/THIRD_PARTY_LICENSES/getrandom-0.3.4/LICENSE-APACHE +201 -0
- data/THIRD_PARTY_LICENSES/getrandom-0.3.4/LICENSE-MIT +26 -0
- data/THIRD_PARTY_LICENSES/getrandom-0.4.3/LICENSE-APACHE +201 -0
- data/THIRD_PARTY_LICENSES/getrandom-0.4.3/LICENSE-MIT +26 -0
- data/THIRD_PARTY_LICENSES/glob-0.3.3/LICENSE-APACHE +201 -0
- data/THIRD_PARTY_LICENSES/glob-0.3.3/LICENSE-MIT +25 -0
- data/THIRD_PARTY_LICENSES/globset-0.4.18/COPYING +3 -0
- data/THIRD_PARTY_LICENSES/globset-0.4.18/LICENSE-MIT +21 -0
- data/THIRD_PARTY_LICENSES/hashbrown-0.14.5/LICENSE-APACHE +201 -0
- data/THIRD_PARTY_LICENSES/hashbrown-0.14.5/LICENSE-MIT +25 -0
- data/THIRD_PARTY_LICENSES/hashbrown-0.16.1/LICENSE-APACHE +201 -0
- data/THIRD_PARTY_LICENSES/hashbrown-0.16.1/LICENSE-MIT +25 -0
- data/THIRD_PARTY_LICENSES/hashbrown-0.17.1/LICENSE-APACHE +201 -0
- data/THIRD_PARTY_LICENSES/hashbrown-0.17.1/LICENSE-MIT +25 -0
- data/THIRD_PARTY_LICENSES/heck-0.5.0/LICENSE-APACHE +201 -0
- data/THIRD_PARTY_LICENSES/heck-0.5.0/LICENSE-MIT +25 -0
- data/THIRD_PARTY_LICENSES/hermit-abi-0.5.2/LICENSE-APACHE +201 -0
- data/THIRD_PARTY_LICENSES/hermit-abi-0.5.2/LICENSE-MIT +23 -0
- data/THIRD_PARTY_LICENSES/hstr-3.0.3/LICENSE +202 -0
- data/THIRD_PARTY_LICENSES/html5ever-0.39.0/LICENSE-APACHE +201 -0
- data/THIRD_PARTY_LICENSES/html5ever-0.39.0/LICENSE-MIT +25 -0
- data/THIRD_PARTY_LICENSES/http-1.5.0/LICENSE-APACHE +201 -0
- data/THIRD_PARTY_LICENSES/http-1.5.0/LICENSE-MIT +25 -0
- data/THIRD_PARTY_LICENSES/http-body-1.1.0/LICENSE +25 -0
- data/THIRD_PARTY_LICENSES/http-body-util-0.1.5/LICENSE +25 -0
- data/THIRD_PARTY_LICENSES/http2-0.5.20/LICENSE +25 -0
- data/THIRD_PARTY_LICENSES/httparse-1.10.1/LICENSE-APACHE +201 -0
- data/THIRD_PARTY_LICENSES/httparse-1.10.1/LICENSE-MIT +20 -0
- data/THIRD_PARTY_LICENSES/iana-time-zone-0.1.64/LICENSE-APACHE +201 -0
- data/THIRD_PARTY_LICENSES/iana-time-zone-0.1.64/LICENSE-MIT +25 -0
- data/THIRD_PARTY_LICENSES/iana-time-zone-haiku-0.1.2/LICENSE-APACHE +201 -0
- data/THIRD_PARTY_LICENSES/iana-time-zone-haiku-0.1.2/LICENSE-MIT +25 -0
- data/THIRD_PARTY_LICENSES/icu_collections-2.1.1/LICENSE +46 -0
- data/THIRD_PARTY_LICENSES/icu_locale_core-2.3.0/LICENSE +46 -0
- data/THIRD_PARTY_LICENSES/icu_normalizer-2.1.1/LICENSE +46 -0
- data/THIRD_PARTY_LICENSES/icu_normalizer_data-2.1.1/LICENSE +46 -0
- data/THIRD_PARTY_LICENSES/icu_properties-2.1.2/LICENSE +46 -0
- data/THIRD_PARTY_LICENSES/icu_properties_data-2.1.2/LICENSE +46 -0
- data/THIRD_PARTY_LICENSES/icu_provider-2.3.1/LICENSE +46 -0
- data/THIRD_PARTY_LICENSES/ident_case-1.0.1/LICENSE +19 -0
- data/THIRD_PARTY_LICENSES/idna-1.1.0/LICENSE-APACHE +201 -0
- data/THIRD_PARTY_LICENSES/idna-1.1.0/LICENSE-MIT +25 -0
- data/THIRD_PARTY_LICENSES/idna_adapter-1.2.1/LICENSE-APACHE +201 -0
- data/THIRD_PARTY_LICENSES/idna_adapter-1.2.1/LICENSE-MIT +25 -0
- data/THIRD_PARTY_LICENSES/if_chain-1.0.3/LICENSE-APACHE +201 -0
- data/THIRD_PARTY_LICENSES/if_chain-1.0.3/LICENSE-MIT +25 -0
- data/THIRD_PARTY_LICENSES/indexmap-2.14.2/LICENSE-APACHE +201 -0
- data/THIRD_PARTY_LICENSES/indexmap-2.14.2/LICENSE-MIT +25 -0
- data/THIRD_PARTY_LICENSES/ipnet-2.12.2/LICENSE-APACHE +201 -0
- data/THIRD_PARTY_LICENSES/ipnet-2.12.2/LICENSE-MIT +7 -0
- data/THIRD_PARTY_LICENSES/is-macro-0.3.7/LICENSE +202 -0
- data/THIRD_PARTY_LICENSES/itertools-0.13.0/LICENSE-APACHE +201 -0
- data/THIRD_PARTY_LICENSES/itertools-0.13.0/LICENSE-MIT +25 -0
- data/THIRD_PARTY_LICENSES/itoa-1.0.17/LICENSE-APACHE +176 -0
- data/THIRD_PARTY_LICENSES/itoa-1.0.17/LICENSE-MIT +23 -0
- data/THIRD_PARTY_LICENSES/jobserver-0.1.35/LICENSE-APACHE +201 -0
- data/THIRD_PARTY_LICENSES/jobserver-0.1.35/LICENSE-MIT +25 -0
- data/THIRD_PARTY_LICENSES/js-sys-0.3.83/LICENSE-APACHE +201 -0
- data/THIRD_PARTY_LICENSES/js-sys-0.3.83/LICENSE-MIT +25 -0
- data/THIRD_PARTY_LICENSES/jsonc-parser-0.26.3/LICENSE +21 -0
- data/THIRD_PARTY_LICENSES/lazy_static-1.5.0/LICENSE-APACHE +201 -0
- data/THIRD_PARTY_LICENSES/lazy_static-1.5.0/LICENSE-MIT +25 -0
- data/THIRD_PARTY_LICENSES/libc-0.2.189/LICENSE-APACHE +176 -0
- data/THIRD_PARTY_LICENSES/libc-0.2.189/LICENSE-MIT +25 -0
- data/THIRD_PARTY_LICENSES/libloading-0.8.9/LICENSE +12 -0
- data/THIRD_PARTY_LICENSES/litemap-0.8.1/LICENSE +46 -0
- data/THIRD_PARTY_LICENSES/lock_api-0.4.14/LICENSE-APACHE +201 -0
- data/THIRD_PARTY_LICENSES/lock_api-0.4.14/LICENSE-MIT +25 -0
- data/THIRD_PARTY_LICENSES/log-0.4.34/LICENSE-APACHE +201 -0
- data/THIRD_PARTY_LICENSES/log-0.4.34/LICENSE-MIT +25 -0
- data/THIRD_PARTY_LICENSES/lru-0.16.2/LICENSE +21 -0
- data/THIRD_PARTY_LICENSES/lru-0.18.4/LICENSE +21 -0
- data/THIRD_PARTY_LICENSES/markup5ever-0.39.0/LICENSE-APACHE +201 -0
- data/THIRD_PARTY_LICENSES/markup5ever-0.39.0/LICENSE-MIT +25 -0
- data/THIRD_PARTY_LICENSES/memchr-2.7.6/COPYING +3 -0
- data/THIRD_PARTY_LICENSES/memchr-2.7.6/LICENSE-MIT +21 -0
- data/THIRD_PARTY_LICENSES/miette-7.6.0/LICENSE +202 -0
- data/THIRD_PARTY_LICENSES/miette-derive-7.6.0/LICENSE +229 -0
- data/THIRD_PARTY_LICENSES/minimal-lexical-0.2.1/LICENSE-APACHE +201 -0
- data/THIRD_PARTY_LICENSES/minimal-lexical-0.2.1/LICENSE-MIT +23 -0
- data/THIRD_PARTY_LICENSES/minimal-lexical-0.2.1/LICENSE.md +37 -0
- data/THIRD_PARTY_LICENSES/miniz_oxide-0.9.1/LICENSE +25 -0
- data/THIRD_PARTY_LICENSES/miniz_oxide-0.9.1/LICENSE-APACHE.md +177 -0
- data/THIRD_PARTY_LICENSES/miniz_oxide-0.9.1/LICENSE-MIT.md +24 -0
- data/THIRD_PARTY_LICENSES/miniz_oxide-0.9.1/LICENSE-ZLIB.md +14 -0
- data/THIRD_PARTY_LICENSES/mio-1.2.3/LICENSE +19 -0
- data/THIRD_PARTY_LICENSES/new_debug_unreachable-1.0.6/LICENSE-MIT +25 -0
- data/THIRD_PARTY_LICENSES/nom-7.1.3/LICENSE +20 -0
- data/THIRD_PARTY_LICENSES/normpath-0.2.0/COPYRIGHT +7 -0
- data/THIRD_PARTY_LICENSES/normpath-0.2.0/LICENSE-APACHE +201 -0
- data/THIRD_PARTY_LICENSES/normpath-0.2.0/LICENSE-MIT +21 -0
- data/THIRD_PARTY_LICENSES/normpath-0.2.0/LICENSE-THIRD-PARTY +210 -0
- data/THIRD_PARTY_LICENSES/num-bigint-0.4.6/LICENSE-APACHE +201 -0
- data/THIRD_PARTY_LICENSES/num-bigint-0.4.6/LICENSE-MIT +25 -0
- data/THIRD_PARTY_LICENSES/num-conv-0.2.2/LICENSE-Apache +177 -0
- data/THIRD_PARTY_LICENSES/num-conv-0.2.2/LICENSE-MIT +19 -0
- data/THIRD_PARTY_LICENSES/num-integer-0.1.46/LICENSE-APACHE +201 -0
- data/THIRD_PARTY_LICENSES/num-integer-0.1.46/LICENSE-MIT +25 -0
- data/THIRD_PARTY_LICENSES/num-traits-0.2.19/LICENSE-APACHE +201 -0
- data/THIRD_PARTY_LICENSES/num-traits-0.2.19/LICENSE-MIT +25 -0
- data/THIRD_PARTY_LICENSES/num_cpus-1.17.0/LICENSE-APACHE +201 -0
- data/THIRD_PARTY_LICENSES/num_cpus-1.17.0/LICENSE-MIT +20 -0
- data/THIRD_PARTY_LICENSES/once_cell-1.21.3/LICENSE-APACHE +201 -0
- data/THIRD_PARTY_LICENSES/once_cell-1.21.3/LICENSE-MIT +23 -0
- data/THIRD_PARTY_LICENSES/openssl-macros-0.1.1/LICENSE-APACHE +202 -0
- data/THIRD_PARTY_LICENSES/openssl-macros-0.1.1/LICENSE-MIT +19 -0
- data/THIRD_PARTY_LICENSES/outref-0.5.2/LICENSE +21 -0
- data/THIRD_PARTY_LICENSES/owo-colors-4.2.3/LICENSE +21 -0
- data/THIRD_PARTY_LICENSES/par-core-2.0.0/LICENSE +202 -0
- data/THIRD_PARTY_LICENSES/par-iter-2.0.0/LICENSE +202 -0
- data/THIRD_PARTY_LICENSES/parking_lot-0.12.5/LICENSE-APACHE +201 -0
- data/THIRD_PARTY_LICENSES/parking_lot-0.12.5/LICENSE-MIT +25 -0
- data/THIRD_PARTY_LICENSES/parking_lot_core-0.9.12/LICENSE-APACHE +201 -0
- data/THIRD_PARTY_LICENSES/parking_lot_core-0.9.12/LICENSE-MIT +25 -0
- data/THIRD_PARTY_LICENSES/path-clean-0.1.0/LICENSE-APACHE +13 -0
- data/THIRD_PARTY_LICENSES/path-clean-0.1.0/LICENSE-MIT +18 -0
- data/THIRD_PARTY_LICENSES/path-clean-1.0.1/LICENSE-APACHE +13 -0
- data/THIRD_PARTY_LICENSES/path-clean-1.0.1/LICENSE-MIT +18 -0
- data/THIRD_PARTY_LICENSES/pathdiff-0.2.3/LICENSE-APACHE +201 -0
- data/THIRD_PARTY_LICENSES/pathdiff-0.2.3/LICENSE-MIT +23 -0
- data/THIRD_PARTY_LICENSES/percent-encoding-2.3.2/LICENSE-APACHE +201 -0
- data/THIRD_PARTY_LICENSES/percent-encoding-2.3.2/LICENSE-MIT +25 -0
- data/THIRD_PARTY_LICENSES/petgraph-0.7.1/LICENSE-APACHE +201 -0
- data/THIRD_PARTY_LICENSES/petgraph-0.7.1/LICENSE-MIT +25 -0
- data/THIRD_PARTY_LICENSES/phf-0.11.3/LICENSE +20 -0
- data/THIRD_PARTY_LICENSES/phf-0.13.1/LICENSE +20 -0
- data/THIRD_PARTY_LICENSES/phf_codegen-0.13.1/LICENSE +20 -0
- data/THIRD_PARTY_LICENSES/phf_generator-0.11.3/LICENSE +20 -0
- data/THIRD_PARTY_LICENSES/phf_generator-0.13.1/LICENSE +20 -0
- data/THIRD_PARTY_LICENSES/phf_macros-0.11.3/LICENSE +20 -0
- data/THIRD_PARTY_LICENSES/phf_macros-0.13.1/LICENSE +20 -0
- data/THIRD_PARTY_LICENSES/phf_shared-0.11.3/LICENSE +20 -0
- data/THIRD_PARTY_LICENSES/phf_shared-0.13.1/LICENSE +20 -0
- data/THIRD_PARTY_LICENSES/pin-project-lite-0.2.17/LICENSE-APACHE +177 -0
- data/THIRD_PARTY_LICENSES/pin-project-lite-0.2.17/LICENSE-MIT +23 -0
- data/THIRD_PARTY_LICENSES/pkg-config-0.3.34/LICENSE-APACHE +201 -0
- data/THIRD_PARTY_LICENSES/pkg-config-0.3.34/LICENSE-MIT +25 -0
- data/THIRD_PARTY_LICENSES/potential_utf-0.1.4/LICENSE +46 -0
- data/THIRD_PARTY_LICENSES/powerfmt-0.2.0/LICENSE-Apache +202 -0
- data/THIRD_PARTY_LICENSES/powerfmt-0.2.0/LICENSE-MIT +19 -0
- data/THIRD_PARTY_LICENSES/ppv-lite86-0.2.21/LICENSE-APACHE +201 -0
- data/THIRD_PARTY_LICENSES/ppv-lite86-0.2.21/LICENSE-MIT +25 -0
- data/THIRD_PARTY_LICENSES/precomputed-hash-0.1.1/LICENSE +21 -0
- data/THIRD_PARTY_LICENSES/precomputed-map-0.2.0/LICENSE +21 -0
- data/THIRD_PARTY_LICENSES/preset_env_base-6.0.0/LICENSE +201 -0
- data/THIRD_PARTY_LICENSES/proc-macro2-1.0.107/LICENSE-APACHE +176 -0
- data/THIRD_PARTY_LICENSES/proc-macro2-1.0.107/LICENSE-MIT +23 -0
- data/THIRD_PARTY_LICENSES/quote-1.0.47/LICENSE-APACHE +176 -0
- data/THIRD_PARTY_LICENSES/quote-1.0.47/LICENSE-MIT +23 -0
- data/THIRD_PARTY_LICENSES/r-efi-5.3.0/LICENSE-APACHE +176 -0
- data/THIRD_PARTY_LICENSES/r-efi-6.0.0/LICENSE-APACHE +176 -0
- data/THIRD_PARTY_LICENSES/radium-0.7.0/LICENSE.txt +21 -0
- data/THIRD_PARTY_LICENSES/radix_fmt-1.0.0/LICENSE +201 -0
- data/THIRD_PARTY_LICENSES/rand-0.8.5/COPYRIGHT +12 -0
- data/THIRD_PARTY_LICENSES/rand-0.8.5/LICENSE-APACHE +176 -0
- data/THIRD_PARTY_LICENSES/rand-0.8.5/LICENSE-MIT +26 -0
- data/THIRD_PARTY_LICENSES/rand-0.9.5/COPYRIGHT +12 -0
- data/THIRD_PARTY_LICENSES/rand-0.9.5/LICENSE-APACHE +176 -0
- data/THIRD_PARTY_LICENSES/rand-0.9.5/LICENSE-MIT +26 -0
- data/THIRD_PARTY_LICENSES/rand_chacha-0.9.0/COPYRIGHT +12 -0
- data/THIRD_PARTY_LICENSES/rand_chacha-0.9.0/LICENSE-APACHE +176 -0
- data/THIRD_PARTY_LICENSES/rand_chacha-0.9.0/LICENSE-MIT +26 -0
- data/THIRD_PARTY_LICENSES/rand_core-0.6.4/COPYRIGHT +12 -0
- data/THIRD_PARTY_LICENSES/rand_core-0.6.4/LICENSE-APACHE +187 -0
- data/THIRD_PARTY_LICENSES/rand_core-0.6.4/LICENSE-MIT +26 -0
- data/THIRD_PARTY_LICENSES/rand_core-0.9.5/COPYRIGHT +12 -0
- data/THIRD_PARTY_LICENSES/rand_core-0.9.5/LICENSE-APACHE +187 -0
- data/THIRD_PARTY_LICENSES/rand_core-0.9.5/LICENSE-MIT +26 -0
- data/THIRD_PARTY_LICENSES/redox_syscall-0.5.18/LICENSE +22 -0
- data/THIRD_PARTY_LICENSES/regex-1.12.2/LICENSE-APACHE +201 -0
- data/THIRD_PARTY_LICENSES/regex-1.12.2/LICENSE-MIT +25 -0
- data/THIRD_PARTY_LICENSES/regex-automata-0.4.13/LICENSE-APACHE +201 -0
- data/THIRD_PARTY_LICENSES/regex-automata-0.4.13/LICENSE-MIT +25 -0
- data/THIRD_PARTY_LICENSES/regex-syntax-0.8.8/LICENSE-APACHE +201 -0
- data/THIRD_PARTY_LICENSES/regex-syntax-0.8.8/LICENSE-MIT +25 -0
- data/THIRD_PARTY_LICENSES/regress-0.10.5/LICENSE-APACHE +201 -0
- data/THIRD_PARTY_LICENSES/regress-0.10.5/LICENSE-MIT +21 -0
- data/THIRD_PARTY_LICENSES/rustc-hash-2.1.1/LICENSE-APACHE +176 -0
- data/THIRD_PARTY_LICENSES/rustc-hash-2.1.1/LICENSE-MIT +23 -0
- data/THIRD_PARTY_LICENSES/rustc_version-0.4.1/LICENSE-APACHE +201 -0
- data/THIRD_PARTY_LICENSES/rustc_version-0.4.1/LICENSE-MIT +25 -0
- data/THIRD_PARTY_LICENSES/rustls-pki-types-1.15.1/LICENSE-APACHE +201 -0
- data/THIRD_PARTY_LICENSES/rustls-pki-types-1.15.1/LICENSE-MIT +25 -0
- data/THIRD_PARTY_LICENSES/rustversion-1.0.22/LICENSE-APACHE +176 -0
- data/THIRD_PARTY_LICENSES/rustversion-1.0.22/LICENSE-MIT +23 -0
- data/THIRD_PARTY_LICENSES/ryu-1.0.22/LICENSE-APACHE +176 -0
- data/THIRD_PARTY_LICENSES/ryu-1.0.22/LICENSE-BOOST +23 -0
- data/THIRD_PARTY_LICENSES/ryu-js-1.0.2/LICENSE-APACHE +176 -0
- data/THIRD_PARTY_LICENSES/ryu-js-1.0.2/LICENSE-BOOST +23 -0
- data/THIRD_PARTY_LICENSES/scoped-tls-1.0.1/LICENSE-APACHE +201 -0
- data/THIRD_PARTY_LICENSES/scoped-tls-1.0.1/LICENSE-MIT +25 -0
- data/THIRD_PARTY_LICENSES/scopeguard-1.2.0/LICENSE-APACHE +201 -0
- data/THIRD_PARTY_LICENSES/scopeguard-1.2.0/LICENSE-MIT +25 -0
- data/THIRD_PARTY_LICENSES/scraper-0.27.0/LICENSE +15 -0
- data/THIRD_PARTY_LICENSES/selectors-0.38.0/LICENSE +373 -0
- data/THIRD_PARTY_LICENSES/selectors-0.38.0/source/CHANGES.md +1 -0
- data/THIRD_PARTY_LICENSES/selectors-0.38.0/source/Cargo.lock +513 -0
- data/THIRD_PARTY_LICENSES/selectors-0.38.0/source/Cargo.toml +88 -0
- data/THIRD_PARTY_LICENSES/selectors-0.38.0/source/Cargo.toml.orig +37 -0
- data/THIRD_PARTY_LICENSES/selectors-0.38.0/source/README.md +24 -0
- data/THIRD_PARTY_LICENSES/selectors-0.38.0/source/attr.rs +196 -0
- data/THIRD_PARTY_LICENSES/selectors-0.38.0/source/bloom.rs +422 -0
- data/THIRD_PARTY_LICENSES/selectors-0.38.0/source/build.rs +77 -0
- data/THIRD_PARTY_LICENSES/selectors-0.38.0/source/builder.rs +455 -0
- data/THIRD_PARTY_LICENSES/selectors-0.38.0/source/context.rs +525 -0
- data/THIRD_PARTY_LICENSES/selectors-0.38.0/source/kleene_value.rs +131 -0
- data/THIRD_PARTY_LICENSES/selectors-0.38.0/source/lib.rs +23 -0
- data/THIRD_PARTY_LICENSES/selectors-0.38.0/source/matching.rs +1609 -0
- data/THIRD_PARTY_LICENSES/selectors-0.38.0/source/nth_index_cache.rs +102 -0
- data/THIRD_PARTY_LICENSES/selectors-0.38.0/source/parser.rs +4857 -0
- data/THIRD_PARTY_LICENSES/selectors-0.38.0/source/relative_selector/cache.rs +81 -0
- data/THIRD_PARTY_LICENSES/selectors-0.38.0/source/relative_selector/filter.rs +159 -0
- data/THIRD_PARTY_LICENSES/selectors-0.38.0/source/relative_selector/mod.rs +6 -0
- data/THIRD_PARTY_LICENSES/selectors-0.38.0/source/sink.rs +31 -0
- data/THIRD_PARTY_LICENSES/selectors-0.38.0/source/tree.rs +184 -0
- data/THIRD_PARTY_LICENSES/selectors-0.38.0/source/visitor.rs +137 -0
- data/THIRD_PARTY_LICENSES/semver-1.0.27/LICENSE-APACHE +176 -0
- data/THIRD_PARTY_LICENSES/semver-1.0.27/LICENSE-MIT +23 -0
- data/THIRD_PARTY_LICENSES/seq-macro-0.3.6/LICENSE-APACHE +176 -0
- data/THIRD_PARTY_LICENSES/seq-macro-0.3.6/LICENSE-MIT +23 -0
- data/THIRD_PARTY_LICENSES/serde-1.0.228/LICENSE-APACHE +176 -0
- data/THIRD_PARTY_LICENSES/serde-1.0.228/LICENSE-MIT +23 -0
- data/THIRD_PARTY_LICENSES/serde_core-1.0.228/LICENSE-APACHE +176 -0
- data/THIRD_PARTY_LICENSES/serde_core-1.0.228/LICENSE-MIT +23 -0
- data/THIRD_PARTY_LICENSES/serde_derive-1.0.228/LICENSE-APACHE +176 -0
- data/THIRD_PARTY_LICENSES/serde_derive-1.0.228/LICENSE-MIT +23 -0
- data/THIRD_PARTY_LICENSES/serde_json-1.0.151/LICENSE-APACHE +176 -0
- data/THIRD_PARTY_LICENSES/serde_json-1.0.151/LICENSE-MIT +23 -0
- data/THIRD_PARTY_LICENSES/servo_arc-0.4.3/LICENSE-APACHE +201 -0
- data/THIRD_PARTY_LICENSES/servo_arc-0.4.3/LICENSE-MIT +23 -0
- data/THIRD_PARTY_LICENSES/sha1-0.10.6/LICENSE-APACHE +201 -0
- data/THIRD_PARTY_LICENSES/sha1-0.10.6/LICENSE-MIT +27 -0
- data/THIRD_PARTY_LICENSES/sha2-0.10.9/LICENSE-APACHE +201 -0
- data/THIRD_PARTY_LICENSES/sha2-0.10.9/LICENSE-MIT +27 -0
- data/THIRD_PARTY_LICENSES/shlex-1.3.0/LICENSE-APACHE +13 -0
- data/THIRD_PARTY_LICENSES/shlex-1.3.0/LICENSE-MIT +21 -0
- data/THIRD_PARTY_LICENSES/signal-hook-registry-1.4.8/LICENSE-APACHE +201 -0
- data/THIRD_PARTY_LICENSES/signal-hook-registry-1.4.8/LICENSE-MIT +25 -0
- data/THIRD_PARTY_LICENSES/simd-adler32-0.3.10/LICENSE.md +21 -0
- data/THIRD_PARTY_LICENSES/siphasher-0.3.11/COPYING +7 -0
- data/THIRD_PARTY_LICENSES/siphasher-1.0.1/COPYING +7 -0
- data/THIRD_PARTY_LICENSES/slab-0.4.12/LICENSE +25 -0
- data/THIRD_PARTY_LICENSES/smallvec-1.15.1/LICENSE-APACHE +201 -0
- data/THIRD_PARTY_LICENSES/smallvec-1.15.1/LICENSE-MIT +25 -0
- data/THIRD_PARTY_LICENSES/smartstring-1.0.1/LICENCE.md +355 -0
- data/THIRD_PARTY_LICENSES/socket2-0.6.5/LICENSE-APACHE +201 -0
- data/THIRD_PARTY_LICENSES/socket2-0.6.5/LICENSE-MIT +25 -0
- data/THIRD_PARTY_LICENSES/st-map-0.2.4/LICENSE +202 -0
- data/THIRD_PARTY_LICENSES/stable_deref_trait-1.2.1/LICENSE-APACHE +201 -0
- data/THIRD_PARTY_LICENSES/stable_deref_trait-1.2.1/LICENSE-MIT +25 -0
- data/THIRD_PARTY_LICENSES/static-map-macro-0.3.4/LICENSE +202 -0
- data/THIRD_PARTY_LICENSES/static_assertions-1.1.0/LICENSE-APACHE +202 -0
- data/THIRD_PARTY_LICENSES/static_assertions-1.1.0/LICENSE-MIT +21 -0
- data/THIRD_PARTY_LICENSES/string_cache-0.9.0/LICENSE-APACHE +201 -0
- data/THIRD_PARTY_LICENSES/string_cache-0.9.0/LICENSE-MIT +25 -0
- data/THIRD_PARTY_LICENSES/string_cache_codegen-0.6.1/LICENSE-APACHE +201 -0
- data/THIRD_PARTY_LICENSES/string_cache_codegen-0.6.1/LICENSE-MIT +25 -0
- data/THIRD_PARTY_LICENSES/string_enum-1.0.2/LICENSE +201 -0
- data/THIRD_PARTY_LICENSES/strsim-0.11.1/LICENSE +23 -0
- data/THIRD_PARTY_LICENSES/swc-52.0.0/LICENSE +201 -0
- data/THIRD_PARTY_LICENSES/swc_allocator-4.0.1/LICENSE +201 -0
- data/THIRD_PARTY_LICENSES/swc_atoms-9.0.0/LICENSE +201 -0
- data/THIRD_PARTY_LICENSES/swc_common-18.0.1/LICENSE +201 -0
- data/THIRD_PARTY_LICENSES/swc_compiler_base-45.0.0/LICENSE +201 -0
- data/THIRD_PARTY_LICENSES/swc_config-3.1.2/LICENSE +201 -0
- data/THIRD_PARTY_LICENSES/swc_config_macro-1.0.1/LICENSE +201 -0
- data/THIRD_PARTY_LICENSES/swc_core-54.0.0/LICENSE +201 -0
- data/THIRD_PARTY_LICENSES/swc_ecma_ast-19.0.0/LICENSE +201 -0
- data/THIRD_PARTY_LICENSES/swc_ecma_codegen-21.0.0/LICENSE +201 -0
- data/THIRD_PARTY_LICENSES/swc_ecma_codegen_macros-2.0.2/LICENSE +201 -0
- data/THIRD_PARTY_LICENSES/swc_ecma_compat_bugfixes-39.0.0/LICENSE +201 -0
- data/THIRD_PARTY_LICENSES/swc_ecma_compat_common-30.0.0/LICENSE +201 -0
- data/THIRD_PARTY_LICENSES/swc_ecma_compat_es2015-39.0.0/LICENSE +201 -0
- data/THIRD_PARTY_LICENSES/swc_ecma_compat_es2016-35.0.0/LICENSE +201 -0
- data/THIRD_PARTY_LICENSES/swc_ecma_compat_es2017-35.0.0/LICENSE +201 -0
- data/THIRD_PARTY_LICENSES/swc_ecma_compat_es2018-36.0.0/LICENSE +201 -0
- data/THIRD_PARTY_LICENSES/swc_ecma_compat_es2019-35.0.0/LICENSE +201 -0
- data/THIRD_PARTY_LICENSES/swc_ecma_compat_es2020-37.0.0/LICENSE +201 -0
- data/THIRD_PARTY_LICENSES/swc_ecma_compat_es2021-35.0.0/LICENSE +201 -0
- data/THIRD_PARTY_LICENSES/swc_ecma_compat_es2022-37.0.0/LICENSE +201 -0
- data/THIRD_PARTY_LICENSES/swc_ecma_compat_es3-26.0.0/LICENSE +201 -0
- data/THIRD_PARTY_LICENSES/swc_ecma_ext_transforms-25.0.0/LICENSE +201 -0
- data/THIRD_PARTY_LICENSES/swc_ecma_hooks-0.3.0/LICENSE +201 -0
- data/THIRD_PARTY_LICENSES/swc_ecma_loader-18.0.0/LICENSE +201 -0
- data/THIRD_PARTY_LICENSES/swc_ecma_minifier-42.0.0/LICENSE +201 -0
- data/THIRD_PARTY_LICENSES/swc_ecma_parser-32.0.0/LICENSE +201 -0
- data/THIRD_PARTY_LICENSES/swc_ecma_preset_env-45.0.0/LICENSE +201 -0
- data/THIRD_PARTY_LICENSES/swc_ecma_transformer-6.0.0/LICENSE +201 -0
- data/THIRD_PARTY_LICENSES/swc_ecma_transforms-44.0.0/LICENSE +201 -0
- data/THIRD_PARTY_LICENSES/swc_ecma_transforms_base-35.0.0/LICENSE +201 -0
- data/THIRD_PARTY_LICENSES/swc_ecma_transforms_classes-35.0.0/LICENSE +201 -0
- data/THIRD_PARTY_LICENSES/swc_ecma_transforms_compat-40.0.0/LICENSE +201 -0
- data/THIRD_PARTY_LICENSES/swc_ecma_transforms_macros-1.0.1/LICENSE +201 -0
- data/THIRD_PARTY_LICENSES/swc_ecma_transforms_module-38.0.0/LICENSE +201 -0
- data/THIRD_PARTY_LICENSES/swc_ecma_transforms_optimization-37.0.0/LICENSE +201 -0
- data/THIRD_PARTY_LICENSES/swc_ecma_transforms_proposal-35.0.0/LICENSE +201 -0
- data/THIRD_PARTY_LICENSES/swc_ecma_transforms_react-38.0.0/LICENSE +201 -0
- data/THIRD_PARTY_LICENSES/swc_ecma_transforms_typescript-38.0.0/LICENSE +201 -0
- data/THIRD_PARTY_LICENSES/swc_ecma_usage_analyzer-27.0.0/LICENSE +201 -0
- data/THIRD_PARTY_LICENSES/swc_ecma_utils-25.0.0/LICENSE +201 -0
- data/THIRD_PARTY_LICENSES/swc_ecma_visit-19.0.0/LICENSE +201 -0
- data/THIRD_PARTY_LICENSES/swc_eq_ignore_macros-1.0.1/LICENSE +201 -0
- data/THIRD_PARTY_LICENSES/swc_error_reporters-20.0.0/LICENSE +201 -0
- data/THIRD_PARTY_LICENSES/swc_macros_common-1.0.1/LICENSE +201 -0
- data/THIRD_PARTY_LICENSES/swc_node_comments-18.0.0/LICENSE +201 -0
- data/THIRD_PARTY_LICENSES/swc_sourcemap-9.3.4/LICENSE +31 -0
- data/THIRD_PARTY_LICENSES/swc_timer-1.0.0/LICENSE +201 -0
- data/THIRD_PARTY_LICENSES/swc_trace_macro-2.0.2/LICENSE +201 -0
- data/THIRD_PARTY_LICENSES/swc_transform_common-12.0.0/LICENSE +201 -0
- data/THIRD_PARTY_LICENSES/swc_visit-2.0.1/LICENSE +201 -0
- data/THIRD_PARTY_LICENSES/syn-2.0.113/LICENSE-APACHE +176 -0
- data/THIRD_PARTY_LICENSES/syn-2.0.113/LICENSE-MIT +23 -0
- data/THIRD_PARTY_LICENSES/syn-3.0.5/LICENSE-APACHE +176 -0
- data/THIRD_PARTY_LICENSES/syn-3.0.5/LICENSE-MIT +23 -0
- data/THIRD_PARTY_LICENSES/sync_wrapper-1.0.2/LICENSE +177 -0
- data/THIRD_PARTY_LICENSES/synstructure-0.13.2/LICENSE +7 -0
- data/THIRD_PARTY_LICENSES/synstructure-0.14.0/LICENSE +7 -0
- data/THIRD_PARTY_LICENSES/tap-1.0.1/LICENSE.txt +21 -0
- data/THIRD_PARTY_LICENSES/tendril-0.5.1/LICENSE-APACHE +201 -0
- data/THIRD_PARTY_LICENSES/tendril-0.5.1/LICENSE-MIT +25 -0
- data/THIRD_PARTY_LICENSES/textwrap-0.16.2/LICENSE +21 -0
- data/THIRD_PARTY_LICENSES/thiserror-1.0.69/LICENSE-APACHE +176 -0
- data/THIRD_PARTY_LICENSES/thiserror-1.0.69/LICENSE-MIT +23 -0
- data/THIRD_PARTY_LICENSES/thiserror-2.0.21/LICENSE-APACHE +176 -0
- data/THIRD_PARTY_LICENSES/thiserror-2.0.21/LICENSE-MIT +23 -0
- data/THIRD_PARTY_LICENSES/thiserror-impl-1.0.69/LICENSE-APACHE +176 -0
- data/THIRD_PARTY_LICENSES/thiserror-impl-1.0.69/LICENSE-MIT +23 -0
- data/THIRD_PARTY_LICENSES/thiserror-impl-2.0.21/LICENSE-APACHE +176 -0
- data/THIRD_PARTY_LICENSES/thiserror-impl-2.0.21/LICENSE-MIT +23 -0
- data/THIRD_PARTY_LICENSES/time-0.3.55/LICENSE-Apache +177 -0
- data/THIRD_PARTY_LICENSES/time-0.3.55/LICENSE-MIT +19 -0
- data/THIRD_PARTY_LICENSES/time-core-0.1.9/LICENSE-Apache +177 -0
- data/THIRD_PARTY_LICENSES/time-core-0.1.9/LICENSE-MIT +19 -0
- data/THIRD_PARTY_LICENSES/time-macros-0.2.32/LICENSE-Apache +177 -0
- data/THIRD_PARTY_LICENSES/time-macros-0.2.32/LICENSE-MIT +19 -0
- data/THIRD_PARTY_LICENSES/tinystr-0.8.4/LICENSE +46 -0
- data/THIRD_PARTY_LICENSES/tokio-1.53.1/LICENSE +21 -0
- data/THIRD_PARTY_LICENSES/tokio-btls-0.5.6/LICENSE-APACHE +202 -0
- data/THIRD_PARTY_LICENSES/tokio-btls-0.5.6/LICENSE-MIT +27 -0
- data/THIRD_PARTY_LICENSES/tokio-macros-2.7.2/LICENSE +22 -0
- data/THIRD_PARTY_LICENSES/tokio-socks-0.5.3/LICENSE +21 -0
- data/THIRD_PARTY_LICENSES/tokio-tungstenite-0.29.0/LICENSE +20 -0
- data/THIRD_PARTY_LICENSES/tokio-util-0.7.19/LICENSE +21 -0
- data/THIRD_PARTY_LICENSES/tower-0.5.3/LICENSE +25 -0
- data/THIRD_PARTY_LICENSES/tower-http-0.6.11/LICENSE +25 -0
- data/THIRD_PARTY_LICENSES/tower-layer-0.3.3/LICENSE +25 -0
- data/THIRD_PARTY_LICENSES/tower-service-0.3.3/LICENSE +25 -0
- data/THIRD_PARTY_LICENSES/tracing-0.1.44/LICENSE +25 -0
- data/THIRD_PARTY_LICENSES/tracing-attributes-0.1.31/LICENSE +25 -0
- data/THIRD_PARTY_LICENSES/tracing-core-0.1.36/LICENSE +25 -0
- data/THIRD_PARTY_LICENSES/triomphe-0.1.15/LICENSE-APACHE +201 -0
- data/THIRD_PARTY_LICENSES/triomphe-0.1.15/LICENSE-MIT +27 -0
- data/THIRD_PARTY_LICENSES/try-lock-0.2.5/LICENSE +21 -0
- data/THIRD_PARTY_LICENSES/tungstenite-0.29.0/LICENSE-APACHE +201 -0
- data/THIRD_PARTY_LICENSES/tungstenite-0.29.0/LICENSE-MIT +20 -0
- data/THIRD_PARTY_LICENSES/typed-builder-0.23.2/LICENSE-APACHE +201 -0
- data/THIRD_PARTY_LICENSES/typed-builder-0.23.2/LICENSE-MIT +23 -0
- data/THIRD_PARTY_LICENSES/typed-builder-macro-0.23.2/LICENSE-APACHE +201 -0
- data/THIRD_PARTY_LICENSES/typed-builder-macro-0.23.2/LICENSE-MIT +23 -0
- data/THIRD_PARTY_LICENSES/typenum-1.19.0/LICENSE +1 -0
- data/THIRD_PARTY_LICENSES/typenum-1.19.0/LICENSE-APACHE +201 -0
- data/THIRD_PARTY_LICENSES/typenum-1.19.0/LICENSE-MIT +21 -0
- data/THIRD_PARTY_LICENSES/unicode-id-start-1.4.0/LICENSE-APACHE +176 -0
- data/THIRD_PARTY_LICENSES/unicode-id-start-1.4.0/LICENSE-MIT +23 -0
- data/THIRD_PARTY_LICENSES/unicode-id-start-1.4.0/LICENSE-UNICODE +39 -0
- data/THIRD_PARTY_LICENSES/unicode-ident-1.0.22/LICENSE-APACHE +176 -0
- data/THIRD_PARTY_LICENSES/unicode-ident-1.0.22/LICENSE-MIT +23 -0
- data/THIRD_PARTY_LICENSES/unicode-ident-1.0.22/LICENSE-UNICODE +39 -0
- data/THIRD_PARTY_LICENSES/unicode-linebreak-0.1.5/LICENSE +201 -0
- data/THIRD_PARTY_LICENSES/unicode-width-0.1.14/COPYRIGHT +7 -0
- data/THIRD_PARTY_LICENSES/unicode-width-0.1.14/LICENSE-APACHE +201 -0
- data/THIRD_PARTY_LICENSES/unicode-width-0.1.14/LICENSE-MIT +25 -0
- data/THIRD_PARTY_LICENSES/unicode-width-0.2.2/COPYRIGHT +7 -0
- data/THIRD_PARTY_LICENSES/unicode-width-0.2.2/LICENSE-APACHE +201 -0
- data/THIRD_PARTY_LICENSES/unicode-width-0.2.2/LICENSE-MIT +25 -0
- data/THIRD_PARTY_LICENSES/url-2.5.8/LICENSE-APACHE +201 -0
- data/THIRD_PARTY_LICENSES/url-2.5.8/LICENSE-MIT +25 -0
- data/THIRD_PARTY_LICENSES/utf8_iter-1.0.4/COPYRIGHT +42 -0
- data/THIRD_PARTY_LICENSES/utf8_iter-1.0.4/LICENSE-APACHE +202 -0
- data/THIRD_PARTY_LICENSES/utf8_iter-1.0.4/LICENSE-MIT +25 -0
- data/THIRD_PARTY_LICENSES/uuid-1.19.0/LICENSE-APACHE +201 -0
- data/THIRD_PARTY_LICENSES/uuid-1.19.0/LICENSE-MIT +26 -0
- data/THIRD_PARTY_LICENSES/vergen-9.0.6/LICENSE-APACHE +201 -0
- data/THIRD_PARTY_LICENSES/vergen-9.0.6/LICENSE-MIT +25 -0
- data/THIRD_PARTY_LICENSES/vergen-lib-0.1.6/LICENSE-APACHE +201 -0
- data/THIRD_PARTY_LICENSES/vergen-lib-0.1.6/LICENSE-MIT +25 -0
- data/THIRD_PARTY_LICENSES/version_check-0.9.5/LICENSE-APACHE +201 -0
- data/THIRD_PARTY_LICENSES/version_check-0.9.5/LICENSE-MIT +19 -0
- data/THIRD_PARTY_LICENSES/vsimd-0.8.0/LICENSE +21 -0
- data/THIRD_PARTY_LICENSES/want-0.3.1/LICENSE +20 -0
- data/THIRD_PARTY_LICENSES/wasi-0.11.1+wasi-snapshot-preview1/LICENSE-APACHE +201 -0
- data/THIRD_PARTY_LICENSES/wasi-0.11.1+wasi-snapshot-preview1/LICENSE-Apache-2.0_WITH_LLVM-exception +220 -0
- data/THIRD_PARTY_LICENSES/wasi-0.11.1+wasi-snapshot-preview1/LICENSE-MIT +23 -0
- data/THIRD_PARTY_LICENSES/wasip2-1.0.1+wasi-0.2.4/LICENSE-APACHE +201 -0
- data/THIRD_PARTY_LICENSES/wasm-bindgen-0.2.106/LICENSE-APACHE +201 -0
- data/THIRD_PARTY_LICENSES/wasm-bindgen-0.2.106/LICENSE-MIT +25 -0
- data/THIRD_PARTY_LICENSES/wasm-bindgen-macro-0.2.106/LICENSE-APACHE +201 -0
- data/THIRD_PARTY_LICENSES/wasm-bindgen-macro-0.2.106/LICENSE-MIT +25 -0
- data/THIRD_PARTY_LICENSES/wasm-bindgen-macro-support-0.2.106/LICENSE-APACHE +201 -0
- data/THIRD_PARTY_LICENSES/wasm-bindgen-macro-support-0.2.106/LICENSE-MIT +25 -0
- data/THIRD_PARTY_LICENSES/wasm-bindgen-shared-0.2.106/LICENSE-APACHE +201 -0
- data/THIRD_PARTY_LICENSES/wasm-bindgen-shared-0.2.106/LICENSE-MIT +25 -0
- data/THIRD_PARTY_LICENSES/web_atoms-0.2.6/LICENSE-APACHE +201 -0
- data/THIRD_PARTY_LICENSES/web_atoms-0.2.6/LICENSE-MIT +25 -0
- data/THIRD_PARTY_LICENSES/webpki-root-certs-1.0.9/LICENSE +61 -0
- data/THIRD_PARTY_LICENSES/winapi-0.3.9/LICENSE-APACHE +201 -0
- data/THIRD_PARTY_LICENSES/winapi-0.3.9/LICENSE-MIT +19 -0
- data/THIRD_PARTY_LICENSES/winapi-i686-pc-windows-gnu-0.4.0/LICENSE-APACHE +201 -0
- data/THIRD_PARTY_LICENSES/winapi-x86_64-pc-windows-gnu-0.4.0/LICENSE-APACHE +201 -0
- data/THIRD_PARTY_LICENSES/windows-core-0.62.2/license-apache-2.0 +201 -0
- data/THIRD_PARTY_LICENSES/windows-core-0.62.2/license-mit +21 -0
- data/THIRD_PARTY_LICENSES/windows-implement-0.60.2/license-apache-2.0 +201 -0
- data/THIRD_PARTY_LICENSES/windows-implement-0.60.2/license-mit +21 -0
- data/THIRD_PARTY_LICENSES/windows-interface-0.59.3/license-apache-2.0 +201 -0
- data/THIRD_PARTY_LICENSES/windows-interface-0.59.3/license-mit +21 -0
- data/THIRD_PARTY_LICENSES/windows-link-0.2.1/license-apache-2.0 +201 -0
- data/THIRD_PARTY_LICENSES/windows-link-0.2.1/license-mit +21 -0
- data/THIRD_PARTY_LICENSES/windows-result-0.4.1/license-apache-2.0 +201 -0
- data/THIRD_PARTY_LICENSES/windows-result-0.4.1/license-mit +21 -0
- data/THIRD_PARTY_LICENSES/windows-strings-0.5.1/license-apache-2.0 +201 -0
- data/THIRD_PARTY_LICENSES/windows-strings-0.5.1/license-mit +21 -0
- data/THIRD_PARTY_LICENSES/windows-sys-0.61.2/license-apache-2.0 +201 -0
- data/THIRD_PARTY_LICENSES/windows-sys-0.61.2/license-mit +21 -0
- data/THIRD_PARTY_LICENSES/wit-bindgen-0.46.0/LICENSE-APACHE +201 -0
- data/THIRD_PARTY_LICENSES/wit-bindgen-0.46.0/LICENSE-Apache-2.0_WITH_LLVM-exception +220 -0
- data/THIRD_PARTY_LICENSES/wit-bindgen-0.46.0/LICENSE-MIT +23 -0
- data/THIRD_PARTY_LICENSES/wreq-0.16.1/LICENSE +202 -0
- data/THIRD_PARTY_LICENSES/wreq-proto-0.2.6/LICENSE +202 -0
- data/THIRD_PARTY_LICENSES/wreq-rt-0.2.2-rc.4/LICENSE +201 -0
- data/THIRD_PARTY_LICENSES/wreq-util-0.2.0/LICENSE +201 -0
- data/THIRD_PARTY_LICENSES/writeable-0.6.4/LICENSE +46 -0
- data/THIRD_PARTY_LICENSES/wyz-0.5.1/LICENSE.txt +21 -0
- data/THIRD_PARTY_LICENSES/yoke-0.8.3/LICENSE +46 -0
- data/THIRD_PARTY_LICENSES/yoke-derive-0.8.4/LICENSE +46 -0
- data/THIRD_PARTY_LICENSES/zerocopy-0.8.31/LICENSE-APACHE +202 -0
- data/THIRD_PARTY_LICENSES/zerocopy-0.8.31/LICENSE-BSD +24 -0
- data/THIRD_PARTY_LICENSES/zerocopy-0.8.31/LICENSE-MIT +26 -0
- data/THIRD_PARTY_LICENSES/zerocopy-derive-0.8.31/LICENSE-APACHE +202 -0
- data/THIRD_PARTY_LICENSES/zerocopy-derive-0.8.31/LICENSE-BSD +24 -0
- data/THIRD_PARTY_LICENSES/zerocopy-derive-0.8.31/LICENSE-MIT +26 -0
- data/THIRD_PARTY_LICENSES/zerofrom-0.1.6/LICENSE +46 -0
- data/THIRD_PARTY_LICENSES/zerofrom-derive-0.1.6/LICENSE +46 -0
- data/THIRD_PARTY_LICENSES/zerotrie-0.2.5/LICENSE +46 -0
- data/THIRD_PARTY_LICENSES/zerovec-0.11.8/LICENSE +46 -0
- data/THIRD_PARTY_LICENSES/zerovec-derive-0.11.6/LICENSE +46 -0
- data/THIRD_PARTY_LICENSES/zlib-rs-0.6.7/LICENSE +19 -0
- data/THIRD_PARTY_LICENSES/zmij-1.0.11/LICENSE-MIT +23 -0
- data/THIRD_PARTY_LICENSES/zstd-0.13.3/LICENSE +8 -0
- data/THIRD_PARTY_LICENSES/zstd-0.14.0/LICENSE +28 -0
- data/THIRD_PARTY_LICENSES/zstd-safe-7.3.0/LICENSE +28 -0
- data/THIRD_PARTY_LICENSES/zstd-safe-8.0.0/LICENSE +28 -0
- data/THIRD_PARTY_LICENSES/zstd-sys-2.1.0+zstd.1.5.7/LICENSE +28 -0
- data/THIRD_PARTY_LICENSES/zstd-sys-2.1.0+zstd.1.5.7/LICENSE.BSD-3-Clause +32 -0
- data/UPSTREAM.md +11 -0
- data/lib/cfsolve/cfsolve-engine +4 -0
- data/lib/cfsolve/profiles/safari-26-ios/answers.json +3606 -0
- data/lib/cfsolve/profiles/safari-26-ios/challenge-page-answers.json +3608 -0
- data/lib/cfsolve/profiles/safari-26-ios.json +554 -0
- data/lib/cfsolve/version.rb +6 -0
- data/lib/cfsolve.rb +113 -0
- metadata +702 -0
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
/* This Source Code Form is subject to the terms of the Mozilla Public
|
|
2
|
+
* License, v. 2.0. If a copy of the MPL was not distributed with this
|
|
3
|
+
* file, You can obtain one at https://mozilla.org/MPL/2.0/. */
|
|
4
|
+
|
|
5
|
+
use rustc_hash::FxHashMap;
|
|
6
|
+
/// Relative selector cache. This is useful for following cases.
|
|
7
|
+
/// First case is non-subject relative selector: Imagine `.anchor:has(<..>) ~ .foo`, with DOM
|
|
8
|
+
/// `.anchor + .foo + .. + .foo`. Each match on `.foo` triggers `:has()` traversal that
|
|
9
|
+
/// yields the same result. This is simple enough, since we just need to store
|
|
10
|
+
/// the exact match on that anchor pass/fail.
|
|
11
|
+
/// Second case is `querySelectorAll`: Imagine `querySelectorAll(':has(.a)')`, with DOM
|
|
12
|
+
/// `div > .. > div > .a`. When the we perform the traversal at the top div,
|
|
13
|
+
/// we basically end up evaluating `:has(.a)` for all anchors, which could be reused.
|
|
14
|
+
/// Also consider the sibling version: `querySelectorAll(':has(~ .a)')` with DOM
|
|
15
|
+
/// `div + .. + div + .a`.
|
|
16
|
+
/// TODO(dshin): Second case is not yet handled. That is tracked in Bug 1845291.
|
|
17
|
+
use std::hash::Hash;
|
|
18
|
+
|
|
19
|
+
use crate::parser::{RelativeSelector, SelectorKey};
|
|
20
|
+
use crate::{tree::OpaqueElement, SelectorImpl};
|
|
21
|
+
|
|
22
|
+
/// Match data for a given element and a selector.
|
|
23
|
+
#[derive(Clone, Copy)]
|
|
24
|
+
pub enum RelativeSelectorCachedMatch {
|
|
25
|
+
/// This selector matches this element.
|
|
26
|
+
Matched,
|
|
27
|
+
/// This selector does not match this element.
|
|
28
|
+
NotMatched,
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
impl RelativeSelectorCachedMatch {
|
|
32
|
+
/// Is the cached result a match?
|
|
33
|
+
pub fn matched(&self) -> bool {
|
|
34
|
+
matches!(*self, Self::Matched)
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
#[derive(Clone, Copy, Hash, Eq, PartialEq)]
|
|
39
|
+
struct Key {
|
|
40
|
+
element: OpaqueElement,
|
|
41
|
+
selector: SelectorKey,
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
impl Key {
|
|
45
|
+
pub fn new<Impl: SelectorImpl>(
|
|
46
|
+
element: OpaqueElement,
|
|
47
|
+
selector: &RelativeSelector<Impl>,
|
|
48
|
+
) -> Self {
|
|
49
|
+
Key {
|
|
50
|
+
element,
|
|
51
|
+
selector: SelectorKey::new(&selector.selector),
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
/// Cache to speed up matching of relative selectors.
|
|
57
|
+
#[derive(Default)]
|
|
58
|
+
pub struct RelativeSelectorCache {
|
|
59
|
+
cache: FxHashMap<Key, RelativeSelectorCachedMatch>,
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
impl RelativeSelectorCache {
|
|
63
|
+
/// Add a relative selector match into the cache.
|
|
64
|
+
pub fn add<Impl: SelectorImpl>(
|
|
65
|
+
&mut self,
|
|
66
|
+
anchor: OpaqueElement,
|
|
67
|
+
selector: &RelativeSelector<Impl>,
|
|
68
|
+
matched: RelativeSelectorCachedMatch,
|
|
69
|
+
) {
|
|
70
|
+
self.cache.insert(Key::new(anchor, selector), matched);
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
/// Check if we have a cache entry for the element.
|
|
74
|
+
pub fn lookup<Impl: SelectorImpl>(
|
|
75
|
+
&mut self,
|
|
76
|
+
element: OpaqueElement,
|
|
77
|
+
selector: &RelativeSelector<Impl>,
|
|
78
|
+
) -> Option<RelativeSelectorCachedMatch> {
|
|
79
|
+
self.cache.get(&Key::new(element, selector)).copied()
|
|
80
|
+
}
|
|
81
|
+
}
|
|
@@ -0,0 +1,159 @@
|
|
|
1
|
+
/* This Source Code Form is subject to the terms of the Mozilla Public
|
|
2
|
+
* License, v. 2.0. If a copy of the MPL was not distributed with this
|
|
3
|
+
* file, You can obtain one at https://mozilla.org/MPL/2.0/. */
|
|
4
|
+
|
|
5
|
+
/// Bloom filter for relative selectors.
|
|
6
|
+
use rustc_hash::FxHashMap;
|
|
7
|
+
|
|
8
|
+
use crate::bloom::BloomFilter;
|
|
9
|
+
use crate::context::QuirksMode;
|
|
10
|
+
use crate::parser::{collect_selector_hashes, RelativeSelector, RelativeSelectorMatchHint};
|
|
11
|
+
use crate::tree::{Element, OpaqueElement};
|
|
12
|
+
use crate::SelectorImpl;
|
|
13
|
+
|
|
14
|
+
enum Entry {
|
|
15
|
+
/// Filter lookup happened once. Construction of the filter is expensive,
|
|
16
|
+
/// so this is set when the element for subtree traversal is encountered.
|
|
17
|
+
Lookup,
|
|
18
|
+
/// Filter lookup happened more than once, and the filter for this element's
|
|
19
|
+
/// subtree traversal is constructed. Could use special handlings for pseudo-classes
|
|
20
|
+
/// such as `:hover` and `:focus`, see Bug 1845503.
|
|
21
|
+
HasFilter(Box<BloomFilter>),
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
#[derive(Clone, Copy, Hash, Eq, PartialEq)]
|
|
25
|
+
enum TraversalKind {
|
|
26
|
+
Children,
|
|
27
|
+
Descendants,
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
fn add_to_filter<E: Element>(element: &E, filter: &mut BloomFilter, kind: TraversalKind) -> bool {
|
|
31
|
+
let mut child = element.first_element_child();
|
|
32
|
+
while let Some(e) = child {
|
|
33
|
+
if !e.add_element_unique_hashes(filter) {
|
|
34
|
+
return false;
|
|
35
|
+
}
|
|
36
|
+
if kind == TraversalKind::Descendants {
|
|
37
|
+
if !add_to_filter(&e, filter, kind) {
|
|
38
|
+
return false;
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
child = e.next_sibling_element();
|
|
42
|
+
}
|
|
43
|
+
true
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
#[derive(Clone, Copy, Hash, Eq, PartialEq)]
|
|
47
|
+
struct Key(OpaqueElement, TraversalKind);
|
|
48
|
+
|
|
49
|
+
/// Map of bloom filters for fast-rejecting relative selectors.
|
|
50
|
+
#[derive(Default)]
|
|
51
|
+
pub struct RelativeSelectorFilterMap {
|
|
52
|
+
map: FxHashMap<Key, Entry>,
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
fn fast_reject<Impl: SelectorImpl>(
|
|
56
|
+
selector: &RelativeSelector<Impl>,
|
|
57
|
+
quirks_mode: QuirksMode,
|
|
58
|
+
filter: &BloomFilter,
|
|
59
|
+
) -> bool {
|
|
60
|
+
let mut hashes = [0u32; 4];
|
|
61
|
+
let mut len = 0;
|
|
62
|
+
// For inner selectors, we only collect from the single rightmost compound.
|
|
63
|
+
// This is because inner selectors can cause breakouts: e.g. `.anchor:has(:is(.a .b) .c)`
|
|
64
|
+
// can match when `.a` is the ancestor of `.anchor`. Including `.a` would possibly fast
|
|
65
|
+
// reject the subtree for not having `.a`, even if the selector would match.
|
|
66
|
+
// Technically, if the selector's traversal is non-sibling subtree, we can traverse
|
|
67
|
+
// inner selectors up to the point where a descendant/child combinator is encountered
|
|
68
|
+
// (e.g. In `.anchor:has(:is(.a ~ .b) .c)`, `.a` is guaranteed to be the a descendant
|
|
69
|
+
// of `.anchor`). While that can be separately handled, well, this is simpler.
|
|
70
|
+
collect_selector_hashes(
|
|
71
|
+
selector.selector.iter(),
|
|
72
|
+
quirks_mode,
|
|
73
|
+
&mut hashes,
|
|
74
|
+
&mut len,
|
|
75
|
+
|s| s.iter(),
|
|
76
|
+
);
|
|
77
|
+
for i in 0..len {
|
|
78
|
+
if !filter.might_contain_hash(hashes[i]) {
|
|
79
|
+
// Definitely rejected.
|
|
80
|
+
return true;
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
false
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
impl RelativeSelectorFilterMap {
|
|
87
|
+
fn get_filter<E: Element>(&mut self, element: &E, kind: TraversalKind) -> Option<&BloomFilter> {
|
|
88
|
+
// Insert flag to indicate that we looked up the filter once, and
|
|
89
|
+
// create the filter if and only if that flag is there.
|
|
90
|
+
let key = Key(element.opaque(), kind);
|
|
91
|
+
let entry = self
|
|
92
|
+
.map
|
|
93
|
+
.entry(key)
|
|
94
|
+
.and_modify(|entry| {
|
|
95
|
+
if !matches!(entry, Entry::Lookup) {
|
|
96
|
+
return;
|
|
97
|
+
}
|
|
98
|
+
let mut filter = BloomFilter::new();
|
|
99
|
+
// Go through all children/descendants of this element and add their hashes.
|
|
100
|
+
if add_to_filter(element, &mut filter, kind) {
|
|
101
|
+
*entry = Entry::HasFilter(Box::new(filter));
|
|
102
|
+
}
|
|
103
|
+
})
|
|
104
|
+
.or_insert(Entry::Lookup);
|
|
105
|
+
match entry {
|
|
106
|
+
Entry::Lookup => None,
|
|
107
|
+
Entry::HasFilter(ref filter) => Some(filter.as_ref()),
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
|
|
111
|
+
/// Potentially reject the given selector for this element.
|
|
112
|
+
/// This may seem redundant in presence of the cache, but the cache keys into the
|
|
113
|
+
/// selector-element pair specifically, while this filter keys to the element
|
|
114
|
+
/// and the traversal kind, so it is useful for handling multiple selectors
|
|
115
|
+
/// that effectively end up looking at the same(-ish, for siblings) subtree.
|
|
116
|
+
pub fn fast_reject<Impl: SelectorImpl, E: Element>(
|
|
117
|
+
&mut self,
|
|
118
|
+
element: &E,
|
|
119
|
+
selector: &RelativeSelector<Impl>,
|
|
120
|
+
quirks_mode: QuirksMode,
|
|
121
|
+
) -> bool {
|
|
122
|
+
if matches!(
|
|
123
|
+
selector.match_hint,
|
|
124
|
+
RelativeSelectorMatchHint::InNextSibling
|
|
125
|
+
) {
|
|
126
|
+
// Don't bother.
|
|
127
|
+
return false;
|
|
128
|
+
}
|
|
129
|
+
let is_sibling = matches!(
|
|
130
|
+
selector.match_hint,
|
|
131
|
+
RelativeSelectorMatchHint::InSibling
|
|
132
|
+
| RelativeSelectorMatchHint::InNextSiblingSubtree
|
|
133
|
+
| RelativeSelectorMatchHint::InSiblingSubtree
|
|
134
|
+
);
|
|
135
|
+
let is_subtree = matches!(
|
|
136
|
+
selector.match_hint,
|
|
137
|
+
RelativeSelectorMatchHint::InSubtree
|
|
138
|
+
| RelativeSelectorMatchHint::InNextSiblingSubtree
|
|
139
|
+
| RelativeSelectorMatchHint::InSiblingSubtree
|
|
140
|
+
);
|
|
141
|
+
let kind = if is_subtree {
|
|
142
|
+
TraversalKind::Descendants
|
|
143
|
+
} else {
|
|
144
|
+
TraversalKind::Children
|
|
145
|
+
};
|
|
146
|
+
if is_sibling {
|
|
147
|
+
// Contain the entirety of the parent's children/subtree in the filter, and use that.
|
|
148
|
+
// This is less likely to reject, especially for sibling subtree matches; however, it's less
|
|
149
|
+
// expensive memory-wise, compared to storing filters for each sibling.
|
|
150
|
+
element.parent_element().map_or(false, |parent| {
|
|
151
|
+
self.get_filter(&parent, kind)
|
|
152
|
+
.map_or(false, |filter| fast_reject(selector, quirks_mode, filter))
|
|
153
|
+
})
|
|
154
|
+
} else {
|
|
155
|
+
self.get_filter(element, kind)
|
|
156
|
+
.map_or(false, |filter| fast_reject(selector, quirks_mode, filter))
|
|
157
|
+
}
|
|
158
|
+
}
|
|
159
|
+
}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
/* This Source Code Form is subject to the terms of the Mozilla Public
|
|
2
|
+
* License, v. 2.0. If a copy of the MPL was not distributed with this
|
|
3
|
+
* file, You can obtain one at https://mozilla.org/MPL/2.0/. */
|
|
4
|
+
|
|
5
|
+
//! Small helpers to abstract over different containers.
|
|
6
|
+
#![deny(missing_docs)]
|
|
7
|
+
|
|
8
|
+
use smallvec::{Array, SmallVec};
|
|
9
|
+
|
|
10
|
+
/// A trait to abstract over a `push` method that may be implemented for
|
|
11
|
+
/// different kind of types.
|
|
12
|
+
///
|
|
13
|
+
/// Used to abstract over `Array`, `SmallVec` and `Vec`, and also to implement a
|
|
14
|
+
/// type which `push` method does only tweak a byte when we only need to check
|
|
15
|
+
/// for the presence of something.
|
|
16
|
+
pub trait Push<T> {
|
|
17
|
+
/// Push a value into self.
|
|
18
|
+
fn push(&mut self, value: T);
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
impl<T> Push<T> for Vec<T> {
|
|
22
|
+
fn push(&mut self, value: T) {
|
|
23
|
+
Vec::push(self, value);
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
impl<A: Array> Push<A::Item> for SmallVec<A> {
|
|
28
|
+
fn push(&mut self, value: A::Item) {
|
|
29
|
+
SmallVec::push(self, value);
|
|
30
|
+
}
|
|
31
|
+
}
|
|
@@ -0,0 +1,184 @@
|
|
|
1
|
+
/* This Source Code Form is subject to the terms of the Mozilla Public
|
|
2
|
+
* License, v. 2.0. If a copy of the MPL was not distributed with this
|
|
3
|
+
* file, You can obtain one at https://mozilla.org/MPL/2.0/. */
|
|
4
|
+
|
|
5
|
+
//! Traits that nodes must implement. Breaks the otherwise-cyclic dependency
|
|
6
|
+
//! between layout and style.
|
|
7
|
+
|
|
8
|
+
use crate::attr::{AttrSelectorOperation, CaseSensitivity, NamespaceConstraint};
|
|
9
|
+
use crate::bloom::BloomFilter;
|
|
10
|
+
use crate::matching::{ElementSelectorFlags, MatchingContext};
|
|
11
|
+
use crate::parser::SelectorImpl;
|
|
12
|
+
use std::fmt::Debug;
|
|
13
|
+
use std::ptr::NonNull;
|
|
14
|
+
|
|
15
|
+
/// Opaque representation of an Element, for identity comparisons.
|
|
16
|
+
#[derive(Clone, Copy, Debug, Eq, Hash, PartialEq)]
|
|
17
|
+
pub struct OpaqueElement(NonNull<()>);
|
|
18
|
+
|
|
19
|
+
unsafe impl Send for OpaqueElement {}
|
|
20
|
+
// This should be safe given that we do not provide a way to recover
|
|
21
|
+
// the original reference.
|
|
22
|
+
unsafe impl Sync for OpaqueElement {}
|
|
23
|
+
|
|
24
|
+
impl OpaqueElement {
|
|
25
|
+
/// Creates a new OpaqueElement from an arbitrarily-typed pointer.
|
|
26
|
+
pub fn new<T>(ptr: &T) -> Self {
|
|
27
|
+
unsafe {
|
|
28
|
+
OpaqueElement(NonNull::new_unchecked(
|
|
29
|
+
ptr as *const T as *const () as *mut (),
|
|
30
|
+
))
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
/// Creates a new OpaqueElement from a type-erased non-null pointer
|
|
35
|
+
pub fn from_non_null_ptr(ptr: NonNull<()>) -> Self {
|
|
36
|
+
Self(ptr)
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
/// Returns a const ptr to the contained reference. Unsafe especially
|
|
40
|
+
/// since Element can be recovered and potentially-mutated.
|
|
41
|
+
pub unsafe fn as_const_ptr<T>(&self) -> *const T {
|
|
42
|
+
self.0.as_ptr() as *const T
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
pub trait Element: Sized + Clone + Debug {
|
|
47
|
+
type Impl: SelectorImpl;
|
|
48
|
+
|
|
49
|
+
/// Converts self into an opaque representation.
|
|
50
|
+
fn opaque(&self) -> OpaqueElement;
|
|
51
|
+
|
|
52
|
+
fn parent_element(&self) -> Option<Self>;
|
|
53
|
+
|
|
54
|
+
/// Whether the parent node of this element is a shadow root.
|
|
55
|
+
fn parent_node_is_shadow_root(&self) -> bool;
|
|
56
|
+
|
|
57
|
+
/// The host of the containing shadow root, if any.
|
|
58
|
+
fn containing_shadow_host(&self) -> Option<Self>;
|
|
59
|
+
|
|
60
|
+
/// The parent of a given pseudo-element, after matching a pseudo-element
|
|
61
|
+
/// selector.
|
|
62
|
+
///
|
|
63
|
+
/// This is guaranteed to be called in a pseudo-element.
|
|
64
|
+
fn pseudo_element_originating_element(&self) -> Option<Self> {
|
|
65
|
+
debug_assert!(self.is_pseudo_element());
|
|
66
|
+
self.parent_element()
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
/// Whether we're matching on a pseudo-element.
|
|
70
|
+
fn is_pseudo_element(&self) -> bool;
|
|
71
|
+
|
|
72
|
+
/// Skips non-element nodes
|
|
73
|
+
fn prev_sibling_element(&self) -> Option<Self>;
|
|
74
|
+
|
|
75
|
+
/// Skips non-element nodes
|
|
76
|
+
fn next_sibling_element(&self) -> Option<Self>;
|
|
77
|
+
|
|
78
|
+
/// Skips non-element nodes
|
|
79
|
+
fn first_element_child(&self) -> Option<Self>;
|
|
80
|
+
|
|
81
|
+
fn is_html_element_in_html_document(&self) -> bool;
|
|
82
|
+
|
|
83
|
+
fn has_local_name(&self, local_name: &<Self::Impl as SelectorImpl>::BorrowedLocalName) -> bool;
|
|
84
|
+
|
|
85
|
+
/// Empty string for no namespace
|
|
86
|
+
fn has_namespace(&self, ns: &<Self::Impl as SelectorImpl>::BorrowedNamespaceUrl) -> bool;
|
|
87
|
+
|
|
88
|
+
/// Whether this element and the `other` element have the same local name and namespace.
|
|
89
|
+
fn is_same_type(&self, other: &Self) -> bool;
|
|
90
|
+
|
|
91
|
+
fn attr_matches(
|
|
92
|
+
&self,
|
|
93
|
+
ns: &NamespaceConstraint<&<Self::Impl as SelectorImpl>::NamespaceUrl>,
|
|
94
|
+
local_name: &<Self::Impl as SelectorImpl>::LocalName,
|
|
95
|
+
operation: &AttrSelectorOperation<&<Self::Impl as SelectorImpl>::AttrValue>,
|
|
96
|
+
) -> bool;
|
|
97
|
+
|
|
98
|
+
fn has_attr_in_no_namespace(
|
|
99
|
+
&self,
|
|
100
|
+
local_name: &<Self::Impl as SelectorImpl>::LocalName,
|
|
101
|
+
) -> bool {
|
|
102
|
+
self.attr_matches(
|
|
103
|
+
&NamespaceConstraint::Specific(&crate::parser::namespace_empty_string::<Self::Impl>()),
|
|
104
|
+
local_name,
|
|
105
|
+
&AttrSelectorOperation::Exists,
|
|
106
|
+
)
|
|
107
|
+
}
|
|
108
|
+
|
|
109
|
+
fn match_non_ts_pseudo_class(
|
|
110
|
+
&self,
|
|
111
|
+
pc: &<Self::Impl as SelectorImpl>::NonTSPseudoClass,
|
|
112
|
+
context: &mut MatchingContext<Self::Impl>,
|
|
113
|
+
) -> bool;
|
|
114
|
+
|
|
115
|
+
fn match_pseudo_element(
|
|
116
|
+
&self,
|
|
117
|
+
pe: &<Self::Impl as SelectorImpl>::PseudoElement,
|
|
118
|
+
context: &mut MatchingContext<Self::Impl>,
|
|
119
|
+
) -> bool;
|
|
120
|
+
|
|
121
|
+
/// Sets selector flags on the elemnt itself or the parent, depending on the
|
|
122
|
+
/// flags, which indicate what kind of work may need to be performed when
|
|
123
|
+
/// DOM state changes.
|
|
124
|
+
fn apply_selector_flags(&self, flags: ElementSelectorFlags);
|
|
125
|
+
|
|
126
|
+
/// Whether this element is a `link`.
|
|
127
|
+
fn is_link(&self) -> bool;
|
|
128
|
+
|
|
129
|
+
/// Returns whether the element is an HTML <slot> element.
|
|
130
|
+
fn is_html_slot_element(&self) -> bool;
|
|
131
|
+
|
|
132
|
+
/// Returns the assigned <slot> element this element is assigned to.
|
|
133
|
+
///
|
|
134
|
+
/// Necessary for the `::slotted` pseudo-class.
|
|
135
|
+
fn assigned_slot(&self) -> Option<Self> {
|
|
136
|
+
None
|
|
137
|
+
}
|
|
138
|
+
|
|
139
|
+
fn has_id(
|
|
140
|
+
&self,
|
|
141
|
+
id: &<Self::Impl as SelectorImpl>::Identifier,
|
|
142
|
+
case_sensitivity: CaseSensitivity,
|
|
143
|
+
) -> bool;
|
|
144
|
+
|
|
145
|
+
fn has_class(
|
|
146
|
+
&self,
|
|
147
|
+
name: &<Self::Impl as SelectorImpl>::Identifier,
|
|
148
|
+
case_sensitivity: CaseSensitivity,
|
|
149
|
+
) -> bool;
|
|
150
|
+
|
|
151
|
+
fn has_custom_state(&self, name: &<Self::Impl as SelectorImpl>::Identifier) -> bool;
|
|
152
|
+
|
|
153
|
+
/// Returns the mapping from the `exportparts` attribute in the reverse
|
|
154
|
+
/// direction, that is, in an outer-tree -> inner-tree direction.
|
|
155
|
+
fn imported_part(
|
|
156
|
+
&self,
|
|
157
|
+
name: &<Self::Impl as SelectorImpl>::Identifier,
|
|
158
|
+
) -> Option<<Self::Impl as SelectorImpl>::Identifier>;
|
|
159
|
+
|
|
160
|
+
fn is_part(&self, name: &<Self::Impl as SelectorImpl>::Identifier) -> bool;
|
|
161
|
+
|
|
162
|
+
/// Returns whether this element matches `:empty`.
|
|
163
|
+
///
|
|
164
|
+
/// That is, whether it does not contain any child element or any non-zero-length text node.
|
|
165
|
+
/// See http://dev.w3.org/csswg/selectors-3/#empty-pseudo
|
|
166
|
+
fn is_empty(&self) -> bool;
|
|
167
|
+
|
|
168
|
+
/// Returns whether this element matches `:root`,
|
|
169
|
+
/// i.e. whether it is the root element of a document.
|
|
170
|
+
///
|
|
171
|
+
/// Note: this can be false even if `.parent_element()` is `None`
|
|
172
|
+
/// if the parent node is a `DocumentFragment`.
|
|
173
|
+
fn is_root(&self) -> bool;
|
|
174
|
+
|
|
175
|
+
/// Returns whether this element should ignore matching nth child
|
|
176
|
+
/// selector.
|
|
177
|
+
fn ignores_nth_child_selectors(&self) -> bool {
|
|
178
|
+
false
|
|
179
|
+
}
|
|
180
|
+
|
|
181
|
+
/// Add hashes unique to this element to the given filter, returning true
|
|
182
|
+
/// if any got added.
|
|
183
|
+
fn add_element_unique_hashes(&self, filter: &mut BloomFilter) -> bool;
|
|
184
|
+
}
|
|
@@ -0,0 +1,137 @@
|
|
|
1
|
+
/* This Source Code Form is subject to the terms of the Mozilla Public
|
|
2
|
+
* License, v. 2.0. If a copy of the MPL was not distributed with this
|
|
3
|
+
* file, You can obtain one at https://mozilla.org/MPL/2.0/. */
|
|
4
|
+
|
|
5
|
+
//! Visitor traits for selectors.
|
|
6
|
+
|
|
7
|
+
#![deny(missing_docs)]
|
|
8
|
+
|
|
9
|
+
use crate::attr::NamespaceConstraint;
|
|
10
|
+
use crate::parser::{Combinator, Component, RelativeSelector, Selector, SelectorImpl};
|
|
11
|
+
use bitflags::bitflags;
|
|
12
|
+
|
|
13
|
+
/// A trait to visit selector properties.
|
|
14
|
+
///
|
|
15
|
+
/// All the `visit_foo` methods return a boolean indicating whether the
|
|
16
|
+
/// traversal should continue or not.
|
|
17
|
+
pub trait SelectorVisitor: Sized {
|
|
18
|
+
/// The selector implementation this visitor wants to visit.
|
|
19
|
+
type Impl: SelectorImpl;
|
|
20
|
+
|
|
21
|
+
/// Visit an attribute selector that may match (there are other selectors
|
|
22
|
+
/// that may never match, like those containing whitespace or the empty
|
|
23
|
+
/// string).
|
|
24
|
+
fn visit_attribute_selector(
|
|
25
|
+
&mut self,
|
|
26
|
+
_namespace: &NamespaceConstraint<&<Self::Impl as SelectorImpl>::NamespaceUrl>,
|
|
27
|
+
_local_name: &<Self::Impl as SelectorImpl>::LocalName,
|
|
28
|
+
_local_name_lower: &<Self::Impl as SelectorImpl>::LocalName,
|
|
29
|
+
) -> bool {
|
|
30
|
+
true
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
/// Visit a simple selector.
|
|
34
|
+
fn visit_simple_selector(&mut self, _: &Component<Self::Impl>) -> bool {
|
|
35
|
+
true
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
/// Visit a nested relative selector list. The caller is responsible to call visit
|
|
39
|
+
/// into the internal selectors if / as needed.
|
|
40
|
+
///
|
|
41
|
+
/// The default implementation skips it altogether.
|
|
42
|
+
fn visit_relative_selector_list(&mut self, _list: &[RelativeSelector<Self::Impl>]) -> bool {
|
|
43
|
+
true
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
/// Visit a nested selector list. The caller is responsible to call visit
|
|
47
|
+
/// into the internal selectors if / as needed.
|
|
48
|
+
///
|
|
49
|
+
/// The default implementation does this.
|
|
50
|
+
fn visit_selector_list(
|
|
51
|
+
&mut self,
|
|
52
|
+
_list_kind: SelectorListKind,
|
|
53
|
+
list: &[Selector<Self::Impl>],
|
|
54
|
+
) -> bool {
|
|
55
|
+
for nested in list {
|
|
56
|
+
if !nested.visit(self) {
|
|
57
|
+
return false;
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
true
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
/// Visits a complex selector.
|
|
64
|
+
///
|
|
65
|
+
/// Gets the combinator to the right of the selector, or `None` if the
|
|
66
|
+
/// selector is the rightmost one.
|
|
67
|
+
fn visit_complex_selector(&mut self, _combinator_to_right: Option<Combinator>) -> bool {
|
|
68
|
+
true
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
bitflags! {
|
|
73
|
+
/// The kinds of components the visitor is visiting the selector list of, if any
|
|
74
|
+
#[derive(Clone, Copy, Default)]
|
|
75
|
+
pub struct SelectorListKind: u8 {
|
|
76
|
+
/// The visitor is inside :not(..)
|
|
77
|
+
const NEGATION = 1 << 0;
|
|
78
|
+
/// The visitor is inside :is(..)
|
|
79
|
+
const IS = 1 << 1;
|
|
80
|
+
/// The visitor is inside :where(..)
|
|
81
|
+
const WHERE = 1 << 2;
|
|
82
|
+
/// The visitor is inside :nth-child(.. of <selector list>) or
|
|
83
|
+
/// :nth-last-child(.. of <selector list>)
|
|
84
|
+
const NTH_OF = 1 << 3;
|
|
85
|
+
/// The visitor is inside :has(..)
|
|
86
|
+
const HAS = 1 << 4;
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
impl SelectorListKind {
|
|
91
|
+
/// Construct a SelectorListKind for the corresponding component.
|
|
92
|
+
pub fn from_component<Impl: SelectorImpl>(component: &Component<Impl>) -> Self {
|
|
93
|
+
match component {
|
|
94
|
+
Component::Negation(_) => SelectorListKind::NEGATION,
|
|
95
|
+
Component::Is(_) => SelectorListKind::IS,
|
|
96
|
+
Component::Where(_) => SelectorListKind::WHERE,
|
|
97
|
+
Component::NthOf(_) => SelectorListKind::NTH_OF,
|
|
98
|
+
_ => SelectorListKind::empty(),
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
/// Whether the visitor is inside :not(..)
|
|
103
|
+
pub fn in_negation(&self) -> bool {
|
|
104
|
+
self.intersects(SelectorListKind::NEGATION)
|
|
105
|
+
}
|
|
106
|
+
|
|
107
|
+
/// Whether the visitor is inside :is(..)
|
|
108
|
+
pub fn in_is(&self) -> bool {
|
|
109
|
+
self.intersects(SelectorListKind::IS)
|
|
110
|
+
}
|
|
111
|
+
|
|
112
|
+
/// Whether the visitor is inside :where(..)
|
|
113
|
+
pub fn in_where(&self) -> bool {
|
|
114
|
+
self.intersects(SelectorListKind::WHERE)
|
|
115
|
+
}
|
|
116
|
+
|
|
117
|
+
/// Whether the visitor is inside :nth-child(.. of <selector list>) or
|
|
118
|
+
/// :nth-last-child(.. of <selector list>)
|
|
119
|
+
pub fn in_nth_of(&self) -> bool {
|
|
120
|
+
self.intersects(SelectorListKind::NTH_OF)
|
|
121
|
+
}
|
|
122
|
+
|
|
123
|
+
/// Whether the visitor is inside :has(..)
|
|
124
|
+
pub fn in_has(&self) -> bool {
|
|
125
|
+
self.intersects(SelectorListKind::HAS)
|
|
126
|
+
}
|
|
127
|
+
|
|
128
|
+
/// Whether this nested selector is relevant for nth-of dependencies.
|
|
129
|
+
pub fn relevant_to_nth_of_dependencies(&self) -> bool {
|
|
130
|
+
// Order of nesting for `:has` and `:nth-child(.. of ..)` doesn't matter, because:
|
|
131
|
+
// * `:has(:nth-child(.. of ..))`: The location of the anchoring element is
|
|
132
|
+
// independent from where `:nth-child(.. of ..)` is applied.
|
|
133
|
+
// * `:nth-child(.. of :has(..))`: Invalidations inside `:has` must first use the
|
|
134
|
+
// `:has` machinary to find the anchor, then carry out the remaining invalidation.
|
|
135
|
+
self.in_nth_of() && !self.in_has()
|
|
136
|
+
}
|
|
137
|
+
}
|