cfsolve 0.1.0-arm64-darwin

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.
Files changed (621) hide show
  1. checksums.yaml +7 -0
  2. data/CHANGELOG.md +6 -0
  3. data/LICENSE +21 -0
  4. data/README.md +66 -0
  5. data/THIRD_PARTY_LICENSES/Inflector-0.11.4/LICENSE.md +22 -0
  6. data/THIRD_PARTY_LICENSES/README.md +761 -0
  7. data/THIRD_PARTY_LICENSES/adler2-2.0.1/LICENSE-0BSD +12 -0
  8. data/THIRD_PARTY_LICENSES/adler2-2.0.1/LICENSE-APACHE +201 -0
  9. data/THIRD_PARTY_LICENSES/adler2-2.0.1/LICENSE-MIT +23 -0
  10. data/THIRD_PARTY_LICENSES/ahash-0.8.12/LICENSE-APACHE +201 -0
  11. data/THIRD_PARTY_LICENSES/ahash-0.8.12/LICENSE-MIT +25 -0
  12. data/THIRD_PARTY_LICENSES/aho-corasick-1.1.4/COPYING +3 -0
  13. data/THIRD_PARTY_LICENSES/aho-corasick-1.1.4/LICENSE-MIT +21 -0
  14. data/THIRD_PARTY_LICENSES/alloc-no-stdlib-2.0.4/LICENSE +12 -0
  15. data/THIRD_PARTY_LICENSES/alloc-stdlib-0.2.4/LICENSE +12 -0
  16. data/THIRD_PARTY_LICENSES/allocator-api2-0.2.21/LICENSE-APACHE +176 -0
  17. data/THIRD_PARTY_LICENSES/allocator-api2-0.2.21/LICENSE-MIT +23 -0
  18. data/THIRD_PARTY_LICENSES/android_system_properties-0.1.5/LICENSE-APACHE +13 -0
  19. data/THIRD_PARTY_LICENSES/android_system_properties-0.1.5/LICENSE-MIT +20 -0
  20. data/THIRD_PARTY_LICENSES/anyhow-1.0.104/LICENSE-APACHE +176 -0
  21. data/THIRD_PARTY_LICENSES/anyhow-1.0.104/LICENSE-MIT +23 -0
  22. data/THIRD_PARTY_LICENSES/arrayvec-0.7.6/LICENSE-APACHE +201 -0
  23. data/THIRD_PARTY_LICENSES/arrayvec-0.7.6/LICENSE-MIT +25 -0
  24. data/THIRD_PARTY_LICENSES/ascii-1.1.0/LICENSE-APACHE +201 -0
  25. data/THIRD_PARTY_LICENSES/ascii-1.1.0/LICENSE-MIT +22 -0
  26. data/THIRD_PARTY_LICENSES/ast_node-5.0.0/LICENSE +201 -0
  27. data/THIRD_PARTY_LICENSES/async-compression-0.4.45/LICENSE-APACHE +201 -0
  28. data/THIRD_PARTY_LICENSES/async-compression-0.4.45/LICENSE-MIT +21 -0
  29. data/THIRD_PARTY_LICENSES/atomic-waker-1.1.2/LICENSE-APACHE +201 -0
  30. data/THIRD_PARTY_LICENSES/atomic-waker-1.1.2/LICENSE-MIT +23 -0
  31. data/THIRD_PARTY_LICENSES/atomic-waker-1.1.2/LICENSE-THIRD-PARTY +45 -0
  32. data/THIRD_PARTY_LICENSES/autocfg-1.5.0/LICENSE-APACHE +201 -0
  33. data/THIRD_PARTY_LICENSES/autocfg-1.5.0/LICENSE-MIT +25 -0
  34. data/THIRD_PARTY_LICENSES/base64-0.22.1/LICENSE-APACHE +201 -0
  35. data/THIRD_PARTY_LICENSES/base64-0.22.1/LICENSE-MIT +21 -0
  36. data/THIRD_PARTY_LICENSES/base64-simd-0.8.0/LICENSE +21 -0
  37. data/THIRD_PARTY_LICENSES/better_scoped_tls-1.0.1/LICENSE +201 -0
  38. data/THIRD_PARTY_LICENSES/bindgen-0.72.1/LICENSE +29 -0
  39. data/THIRD_PARTY_LICENSES/bitflags-2.13.1/LICENSE-APACHE +201 -0
  40. data/THIRD_PARTY_LICENSES/bitflags-2.13.1/LICENSE-MIT +25 -0
  41. data/THIRD_PARTY_LICENSES/bitvec-1.0.1/LICENSE.txt +21 -0
  42. data/THIRD_PARTY_LICENSES/block-buffer-0.10.4/LICENSE-APACHE +201 -0
  43. data/THIRD_PARTY_LICENSES/block-buffer-0.10.4/LICENSE-MIT +25 -0
  44. data/THIRD_PARTY_LICENSES/brotli-8.0.4/LICENSE.BSD-3-Clause +12 -0
  45. data/THIRD_PARTY_LICENSES/brotli-8.0.4/LICENSE.MIT +19 -0
  46. data/THIRD_PARTY_LICENSES/brotli-decompressor-5.0.3/LICENSE +12 -0
  47. data/THIRD_PARTY_LICENSES/browserslist-data-0.1.4/LICENSE +21 -0
  48. data/THIRD_PARTY_LICENSES/browserslist-rs-0.19.0/LICENSE +21 -0
  49. data/THIRD_PARTY_LICENSES/bstr-1.12.1/COPYING +8 -0
  50. data/THIRD_PARTY_LICENSES/bstr-1.12.1/LICENSE-APACHE +201 -0
  51. data/THIRD_PARTY_LICENSES/bstr-1.12.1/LICENSE-MIT +21 -0
  52. data/THIRD_PARTY_LICENSES/btls-0.5.6/LICENSE +17 -0
  53. data/THIRD_PARTY_LICENSES/btls-sys-0.5.6/BORINGSSL-LICENSE +238 -0
  54. data/THIRD_PARTY_LICENSES/btls-sys-0.5.6/LICENSE-MIT +27 -0
  55. data/THIRD_PARTY_LICENSES/bumpalo-3.20.3/LICENSE-APACHE +201 -0
  56. data/THIRD_PARTY_LICENSES/bumpalo-3.20.3/LICENSE-MIT +25 -0
  57. data/THIRD_PARTY_LICENSES/bytes-1.12.1/LICENSE +25 -0
  58. data/THIRD_PARTY_LICENSES/bytes-str-0.2.7/LICENSE +202 -0
  59. data/THIRD_PARTY_LICENSES/camino-1.2.2/LICENSE-APACHE +201 -0
  60. data/THIRD_PARTY_LICENSES/camino-1.2.2/LICENSE-MIT +23 -0
  61. data/THIRD_PARTY_LICENSES/cargo-platform-0.1.9/LICENSE-APACHE +201 -0
  62. data/THIRD_PARTY_LICENSES/cargo-platform-0.1.9/LICENSE-MIT +23 -0
  63. data/THIRD_PARTY_LICENSES/cargo_metadata-0.19.2/LICENSE-MIT +23 -0
  64. data/THIRD_PARTY_LICENSES/castaway-0.2.4/LICENSE +21 -0
  65. data/THIRD_PARTY_LICENSES/cc-1.2.51/LICENSE-APACHE +201 -0
  66. data/THIRD_PARTY_LICENSES/cc-1.2.51/LICENSE-MIT +25 -0
  67. data/THIRD_PARTY_LICENSES/cexpr-0.6.0/LICENSE-APACHE +201 -0
  68. data/THIRD_PARTY_LICENSES/cexpr-0.6.0/LICENSE-MIT +25 -0
  69. data/THIRD_PARTY_LICENSES/cfg-if-1.0.4/LICENSE-APACHE +201 -0
  70. data/THIRD_PARTY_LICENSES/cfg-if-1.0.4/LICENSE-MIT +25 -0
  71. data/THIRD_PARTY_LICENSES/cfsolve/LICENSE +21 -0
  72. data/THIRD_PARTY_LICENSES/cfsolve-0.1.0/LICENSE +21 -0
  73. data/THIRD_PARTY_LICENSES/chrono-0.4.42/LICENSE.txt +240 -0
  74. data/THIRD_PARTY_LICENSES/clang-sys-1.9.1/LICENSE.txt +202 -0
  75. data/THIRD_PARTY_LICENSES/cmake-0.1.58/LICENSE-APACHE +201 -0
  76. data/THIRD_PARTY_LICENSES/cmake-0.1.58/LICENSE-MIT +25 -0
  77. data/THIRD_PARTY_LICENSES/compact_str-0.7.1/LICENSE +21 -0
  78. data/THIRD_PARTY_LICENSES/compression-codecs-0.4.40/LICENSE-APACHE +201 -0
  79. data/THIRD_PARTY_LICENSES/compression-codecs-0.4.40/LICENSE-MIT +21 -0
  80. data/THIRD_PARTY_LICENSES/compression-core-0.4.33/LICENSE-APACHE +201 -0
  81. data/THIRD_PARTY_LICENSES/compression-core-0.4.33/LICENSE-MIT +21 -0
  82. data/THIRD_PARTY_LICENSES/cookie-0.18.2/LICENSE-APACHE +202 -0
  83. data/THIRD_PARTY_LICENSES/cookie-0.18.2/LICENSE-MIT +26 -0
  84. data/THIRD_PARTY_LICENSES/core-foundation-sys-0.8.7/LICENSE-APACHE +201 -0
  85. data/THIRD_PARTY_LICENSES/core-foundation-sys-0.8.7/LICENSE-MIT +25 -0
  86. data/THIRD_PARTY_LICENSES/cpufeatures-0.2.17/LICENSE-APACHE +201 -0
  87. data/THIRD_PARTY_LICENSES/cpufeatures-0.2.17/LICENSE-MIT +25 -0
  88. data/THIRD_PARTY_LICENSES/crc32fast-1.5.1/LICENSE-APACHE +202 -0
  89. data/THIRD_PARTY_LICENSES/crc32fast-1.5.1/LICENSE-MIT +21 -0
  90. data/THIRD_PARTY_LICENSES/crypto-common-0.1.7/LICENSE-APACHE +201 -0
  91. data/THIRD_PARTY_LICENSES/crypto-common-0.1.7/LICENSE-MIT +25 -0
  92. data/THIRD_PARTY_LICENSES/cssparser-0.37.0/LICENSE +373 -0
  93. data/THIRD_PARTY_LICENSES/cssparser-macros-0.7.1/LICENSE +373 -0
  94. data/THIRD_PARTY_LICENSES/darling-0.20.11/LICENSE +21 -0
  95. data/THIRD_PARTY_LICENSES/darling_core-0.20.11/LICENSE +21 -0
  96. data/THIRD_PARTY_LICENSES/darling_macro-0.20.11/LICENSE +21 -0
  97. data/THIRD_PARTY_LICENSES/dashmap-5.5.3/LICENSE +21 -0
  98. data/THIRD_PARTY_LICENSES/data-encoding-2.9.0/LICENSE +22 -0
  99. data/THIRD_PARTY_LICENSES/debugid-0.8.0/LICENSE +201 -0
  100. data/THIRD_PARTY_LICENSES/deranged-0.5.8/LICENSE-Apache +202 -0
  101. data/THIRD_PARTY_LICENSES/deranged-0.5.8/LICENSE-MIT +19 -0
  102. data/THIRD_PARTY_LICENSES/derive_builder-0.20.2/LICENSE-APACHE +202 -0
  103. data/THIRD_PARTY_LICENSES/derive_builder-0.20.2/LICENSE-MIT +21 -0
  104. data/THIRD_PARTY_LICENSES/derive_builder_core-0.20.2/LICENSE-APACHE +202 -0
  105. data/THIRD_PARTY_LICENSES/derive_builder_core-0.20.2/LICENSE-MIT +21 -0
  106. data/THIRD_PARTY_LICENSES/derive_builder_macro-0.20.2/LICENSE-APACHE +202 -0
  107. data/THIRD_PARTY_LICENSES/derive_builder_macro-0.20.2/LICENSE-MIT +21 -0
  108. data/THIRD_PARTY_LICENSES/derive_more-2.1.1/LICENSE +21 -0
  109. data/THIRD_PARTY_LICENSES/derive_more-impl-2.1.1/LICENSE +21 -0
  110. data/THIRD_PARTY_LICENSES/digest-0.10.7/LICENSE-APACHE +201 -0
  111. data/THIRD_PARTY_LICENSES/digest-0.10.7/LICENSE-MIT +25 -0
  112. data/THIRD_PARTY_LICENSES/displaydoc-0.2.5/LICENSE-APACHE +201 -0
  113. data/THIRD_PARTY_LICENSES/displaydoc-0.2.5/LICENSE-MIT +23 -0
  114. data/THIRD_PARTY_LICENSES/dtoa-1.0.11/LICENSE-APACHE +176 -0
  115. data/THIRD_PARTY_LICENSES/dtoa-1.0.11/LICENSE-MIT +23 -0
  116. data/THIRD_PARTY_LICENSES/dtoa-short-0.3.5/LICENSE +373 -0
  117. data/THIRD_PARTY_LICENSES/ego-tree-0.11.0/LICENSE +14 -0
  118. data/THIRD_PARTY_LICENSES/either-1.15.0/LICENSE-APACHE +201 -0
  119. data/THIRD_PARTY_LICENSES/either-1.15.0/LICENSE-MIT +25 -0
  120. data/THIRD_PARTY_LICENSES/equivalent-1.0.2/LICENSE-APACHE +201 -0
  121. data/THIRD_PARTY_LICENSES/equivalent-1.0.2/LICENSE-MIT +25 -0
  122. data/THIRD_PARTY_LICENSES/errno-0.3.14/LICENSE-APACHE +201 -0
  123. data/THIRD_PARTY_LICENSES/errno-0.3.14/LICENSE-MIT +25 -0
  124. data/THIRD_PARTY_LICENSES/fastrand-2.3.0/LICENSE-APACHE +201 -0
  125. data/THIRD_PARTY_LICENSES/fastrand-2.3.0/LICENSE-MIT +23 -0
  126. data/THIRD_PARTY_LICENSES/find-msvc-tools-0.1.6/LICENSE-APACHE +201 -0
  127. data/THIRD_PARTY_LICENSES/find-msvc-tools-0.1.6/LICENSE-MIT +25 -0
  128. data/THIRD_PARTY_LICENSES/fixedbitset-0.5.7/LICENSE-APACHE +201 -0
  129. data/THIRD_PARTY_LICENSES/fixedbitset-0.5.7/LICENSE-MIT +25 -0
  130. data/THIRD_PARTY_LICENSES/flate2-1.1.10/LICENSE-APACHE +201 -0
  131. data/THIRD_PARTY_LICENSES/flate2-1.1.10/LICENSE-MIT +25 -0
  132. data/THIRD_PARTY_LICENSES/fnv-1.0.7/LICENSE-APACHE +201 -0
  133. data/THIRD_PARTY_LICENSES/fnv-1.0.7/LICENSE-MIT +25 -0
  134. data/THIRD_PARTY_LICENSES/foldhash-0.1.5/LICENSE +19 -0
  135. data/THIRD_PARTY_LICENSES/foldhash-0.2.0/LICENSE +19 -0
  136. data/THIRD_PARTY_LICENSES/foreign-types-0.5.0/LICENSE-APACHE +202 -0
  137. data/THIRD_PARTY_LICENSES/foreign-types-0.5.0/LICENSE-MIT +19 -0
  138. data/THIRD_PARTY_LICENSES/foreign-types-macros-0.2.4/LICENSE-APACHE +202 -0
  139. data/THIRD_PARTY_LICENSES/foreign-types-macros-0.2.4/LICENSE-MIT +19 -0
  140. data/THIRD_PARTY_LICENSES/foreign-types-shared-0.3.1/LICENSE-APACHE +202 -0
  141. data/THIRD_PARTY_LICENSES/foreign-types-shared-0.3.1/LICENSE-MIT +19 -0
  142. data/THIRD_PARTY_LICENSES/form_urlencoded-1.2.2/LICENSE-APACHE +201 -0
  143. data/THIRD_PARTY_LICENSES/form_urlencoded-1.2.2/LICENSE-MIT +25 -0
  144. data/THIRD_PARTY_LICENSES/from_variant-3.0.0/LICENSE +201 -0
  145. data/THIRD_PARTY_LICENSES/fs_extra-1.3.0/LICENSE +21 -0
  146. data/THIRD_PARTY_LICENSES/fslock-0.2.1/LICENSE +21 -0
  147. data/THIRD_PARTY_LICENSES/funty-2.0.0/LICENSE.txt +21 -0
  148. data/THIRD_PARTY_LICENSES/futures-channel-0.3.34/LICENSE-APACHE +202 -0
  149. data/THIRD_PARTY_LICENSES/futures-channel-0.3.34/LICENSE-MIT +26 -0
  150. data/THIRD_PARTY_LICENSES/futures-core-0.3.34/LICENSE-APACHE +202 -0
  151. data/THIRD_PARTY_LICENSES/futures-core-0.3.34/LICENSE-MIT +26 -0
  152. data/THIRD_PARTY_LICENSES/futures-sink-0.3.34/LICENSE-APACHE +202 -0
  153. data/THIRD_PARTY_LICENSES/futures-sink-0.3.34/LICENSE-MIT +26 -0
  154. data/THIRD_PARTY_LICENSES/futures-task-0.3.34/LICENSE-APACHE +202 -0
  155. data/THIRD_PARTY_LICENSES/futures-task-0.3.34/LICENSE-MIT +26 -0
  156. data/THIRD_PARTY_LICENSES/futures-util-0.3.34/LICENSE-APACHE +202 -0
  157. data/THIRD_PARTY_LICENSES/futures-util-0.3.34/LICENSE-MIT +26 -0
  158. data/THIRD_PARTY_LICENSES/generic-array-0.14.7/LICENSE +21 -0
  159. data/THIRD_PARTY_LICENSES/getopts-0.2.24/LICENSE-APACHE +201 -0
  160. data/THIRD_PARTY_LICENSES/getopts-0.2.24/LICENSE-MIT +25 -0
  161. data/THIRD_PARTY_LICENSES/getrandom-0.3.4/LICENSE-APACHE +201 -0
  162. data/THIRD_PARTY_LICENSES/getrandom-0.3.4/LICENSE-MIT +26 -0
  163. data/THIRD_PARTY_LICENSES/getrandom-0.4.3/LICENSE-APACHE +201 -0
  164. data/THIRD_PARTY_LICENSES/getrandom-0.4.3/LICENSE-MIT +26 -0
  165. data/THIRD_PARTY_LICENSES/glob-0.3.3/LICENSE-APACHE +201 -0
  166. data/THIRD_PARTY_LICENSES/glob-0.3.3/LICENSE-MIT +25 -0
  167. data/THIRD_PARTY_LICENSES/globset-0.4.18/COPYING +3 -0
  168. data/THIRD_PARTY_LICENSES/globset-0.4.18/LICENSE-MIT +21 -0
  169. data/THIRD_PARTY_LICENSES/hashbrown-0.14.5/LICENSE-APACHE +201 -0
  170. data/THIRD_PARTY_LICENSES/hashbrown-0.14.5/LICENSE-MIT +25 -0
  171. data/THIRD_PARTY_LICENSES/hashbrown-0.16.1/LICENSE-APACHE +201 -0
  172. data/THIRD_PARTY_LICENSES/hashbrown-0.16.1/LICENSE-MIT +25 -0
  173. data/THIRD_PARTY_LICENSES/hashbrown-0.17.1/LICENSE-APACHE +201 -0
  174. data/THIRD_PARTY_LICENSES/hashbrown-0.17.1/LICENSE-MIT +25 -0
  175. data/THIRD_PARTY_LICENSES/heck-0.5.0/LICENSE-APACHE +201 -0
  176. data/THIRD_PARTY_LICENSES/heck-0.5.0/LICENSE-MIT +25 -0
  177. data/THIRD_PARTY_LICENSES/hermit-abi-0.5.2/LICENSE-APACHE +201 -0
  178. data/THIRD_PARTY_LICENSES/hermit-abi-0.5.2/LICENSE-MIT +23 -0
  179. data/THIRD_PARTY_LICENSES/hstr-3.0.3/LICENSE +202 -0
  180. data/THIRD_PARTY_LICENSES/html5ever-0.39.0/LICENSE-APACHE +201 -0
  181. data/THIRD_PARTY_LICENSES/html5ever-0.39.0/LICENSE-MIT +25 -0
  182. data/THIRD_PARTY_LICENSES/http-1.5.0/LICENSE-APACHE +201 -0
  183. data/THIRD_PARTY_LICENSES/http-1.5.0/LICENSE-MIT +25 -0
  184. data/THIRD_PARTY_LICENSES/http-body-1.1.0/LICENSE +25 -0
  185. data/THIRD_PARTY_LICENSES/http-body-util-0.1.5/LICENSE +25 -0
  186. data/THIRD_PARTY_LICENSES/http2-0.5.20/LICENSE +25 -0
  187. data/THIRD_PARTY_LICENSES/httparse-1.10.1/LICENSE-APACHE +201 -0
  188. data/THIRD_PARTY_LICENSES/httparse-1.10.1/LICENSE-MIT +20 -0
  189. data/THIRD_PARTY_LICENSES/iana-time-zone-0.1.64/LICENSE-APACHE +201 -0
  190. data/THIRD_PARTY_LICENSES/iana-time-zone-0.1.64/LICENSE-MIT +25 -0
  191. data/THIRD_PARTY_LICENSES/iana-time-zone-haiku-0.1.2/LICENSE-APACHE +201 -0
  192. data/THIRD_PARTY_LICENSES/iana-time-zone-haiku-0.1.2/LICENSE-MIT +25 -0
  193. data/THIRD_PARTY_LICENSES/icu_collections-2.1.1/LICENSE +46 -0
  194. data/THIRD_PARTY_LICENSES/icu_locale_core-2.3.0/LICENSE +46 -0
  195. data/THIRD_PARTY_LICENSES/icu_normalizer-2.1.1/LICENSE +46 -0
  196. data/THIRD_PARTY_LICENSES/icu_normalizer_data-2.1.1/LICENSE +46 -0
  197. data/THIRD_PARTY_LICENSES/icu_properties-2.1.2/LICENSE +46 -0
  198. data/THIRD_PARTY_LICENSES/icu_properties_data-2.1.2/LICENSE +46 -0
  199. data/THIRD_PARTY_LICENSES/icu_provider-2.3.1/LICENSE +46 -0
  200. data/THIRD_PARTY_LICENSES/ident_case-1.0.1/LICENSE +19 -0
  201. data/THIRD_PARTY_LICENSES/idna-1.1.0/LICENSE-APACHE +201 -0
  202. data/THIRD_PARTY_LICENSES/idna-1.1.0/LICENSE-MIT +25 -0
  203. data/THIRD_PARTY_LICENSES/idna_adapter-1.2.1/LICENSE-APACHE +201 -0
  204. data/THIRD_PARTY_LICENSES/idna_adapter-1.2.1/LICENSE-MIT +25 -0
  205. data/THIRD_PARTY_LICENSES/if_chain-1.0.3/LICENSE-APACHE +201 -0
  206. data/THIRD_PARTY_LICENSES/if_chain-1.0.3/LICENSE-MIT +25 -0
  207. data/THIRD_PARTY_LICENSES/indexmap-2.14.2/LICENSE-APACHE +201 -0
  208. data/THIRD_PARTY_LICENSES/indexmap-2.14.2/LICENSE-MIT +25 -0
  209. data/THIRD_PARTY_LICENSES/ipnet-2.12.2/LICENSE-APACHE +201 -0
  210. data/THIRD_PARTY_LICENSES/ipnet-2.12.2/LICENSE-MIT +7 -0
  211. data/THIRD_PARTY_LICENSES/is-macro-0.3.7/LICENSE +202 -0
  212. data/THIRD_PARTY_LICENSES/itertools-0.13.0/LICENSE-APACHE +201 -0
  213. data/THIRD_PARTY_LICENSES/itertools-0.13.0/LICENSE-MIT +25 -0
  214. data/THIRD_PARTY_LICENSES/itoa-1.0.17/LICENSE-APACHE +176 -0
  215. data/THIRD_PARTY_LICENSES/itoa-1.0.17/LICENSE-MIT +23 -0
  216. data/THIRD_PARTY_LICENSES/jobserver-0.1.35/LICENSE-APACHE +201 -0
  217. data/THIRD_PARTY_LICENSES/jobserver-0.1.35/LICENSE-MIT +25 -0
  218. data/THIRD_PARTY_LICENSES/js-sys-0.3.83/LICENSE-APACHE +201 -0
  219. data/THIRD_PARTY_LICENSES/js-sys-0.3.83/LICENSE-MIT +25 -0
  220. data/THIRD_PARTY_LICENSES/jsonc-parser-0.26.3/LICENSE +21 -0
  221. data/THIRD_PARTY_LICENSES/lazy_static-1.5.0/LICENSE-APACHE +201 -0
  222. data/THIRD_PARTY_LICENSES/lazy_static-1.5.0/LICENSE-MIT +25 -0
  223. data/THIRD_PARTY_LICENSES/libc-0.2.189/LICENSE-APACHE +176 -0
  224. data/THIRD_PARTY_LICENSES/libc-0.2.189/LICENSE-MIT +25 -0
  225. data/THIRD_PARTY_LICENSES/libloading-0.8.9/LICENSE +12 -0
  226. data/THIRD_PARTY_LICENSES/litemap-0.8.1/LICENSE +46 -0
  227. data/THIRD_PARTY_LICENSES/lock_api-0.4.14/LICENSE-APACHE +201 -0
  228. data/THIRD_PARTY_LICENSES/lock_api-0.4.14/LICENSE-MIT +25 -0
  229. data/THIRD_PARTY_LICENSES/log-0.4.34/LICENSE-APACHE +201 -0
  230. data/THIRD_PARTY_LICENSES/log-0.4.34/LICENSE-MIT +25 -0
  231. data/THIRD_PARTY_LICENSES/lru-0.16.2/LICENSE +21 -0
  232. data/THIRD_PARTY_LICENSES/lru-0.18.4/LICENSE +21 -0
  233. data/THIRD_PARTY_LICENSES/markup5ever-0.39.0/LICENSE-APACHE +201 -0
  234. data/THIRD_PARTY_LICENSES/markup5ever-0.39.0/LICENSE-MIT +25 -0
  235. data/THIRD_PARTY_LICENSES/memchr-2.7.6/COPYING +3 -0
  236. data/THIRD_PARTY_LICENSES/memchr-2.7.6/LICENSE-MIT +21 -0
  237. data/THIRD_PARTY_LICENSES/miette-7.6.0/LICENSE +202 -0
  238. data/THIRD_PARTY_LICENSES/miette-derive-7.6.0/LICENSE +229 -0
  239. data/THIRD_PARTY_LICENSES/minimal-lexical-0.2.1/LICENSE-APACHE +201 -0
  240. data/THIRD_PARTY_LICENSES/minimal-lexical-0.2.1/LICENSE-MIT +23 -0
  241. data/THIRD_PARTY_LICENSES/minimal-lexical-0.2.1/LICENSE.md +37 -0
  242. data/THIRD_PARTY_LICENSES/miniz_oxide-0.9.1/LICENSE +25 -0
  243. data/THIRD_PARTY_LICENSES/miniz_oxide-0.9.1/LICENSE-APACHE.md +177 -0
  244. data/THIRD_PARTY_LICENSES/miniz_oxide-0.9.1/LICENSE-MIT.md +24 -0
  245. data/THIRD_PARTY_LICENSES/miniz_oxide-0.9.1/LICENSE-ZLIB.md +14 -0
  246. data/THIRD_PARTY_LICENSES/mio-1.2.3/LICENSE +19 -0
  247. data/THIRD_PARTY_LICENSES/new_debug_unreachable-1.0.6/LICENSE-MIT +25 -0
  248. data/THIRD_PARTY_LICENSES/nom-7.1.3/LICENSE +20 -0
  249. data/THIRD_PARTY_LICENSES/normpath-0.2.0/COPYRIGHT +7 -0
  250. data/THIRD_PARTY_LICENSES/normpath-0.2.0/LICENSE-APACHE +201 -0
  251. data/THIRD_PARTY_LICENSES/normpath-0.2.0/LICENSE-MIT +21 -0
  252. data/THIRD_PARTY_LICENSES/normpath-0.2.0/LICENSE-THIRD-PARTY +210 -0
  253. data/THIRD_PARTY_LICENSES/num-bigint-0.4.6/LICENSE-APACHE +201 -0
  254. data/THIRD_PARTY_LICENSES/num-bigint-0.4.6/LICENSE-MIT +25 -0
  255. data/THIRD_PARTY_LICENSES/num-conv-0.2.2/LICENSE-Apache +177 -0
  256. data/THIRD_PARTY_LICENSES/num-conv-0.2.2/LICENSE-MIT +19 -0
  257. data/THIRD_PARTY_LICENSES/num-integer-0.1.46/LICENSE-APACHE +201 -0
  258. data/THIRD_PARTY_LICENSES/num-integer-0.1.46/LICENSE-MIT +25 -0
  259. data/THIRD_PARTY_LICENSES/num-traits-0.2.19/LICENSE-APACHE +201 -0
  260. data/THIRD_PARTY_LICENSES/num-traits-0.2.19/LICENSE-MIT +25 -0
  261. data/THIRD_PARTY_LICENSES/num_cpus-1.17.0/LICENSE-APACHE +201 -0
  262. data/THIRD_PARTY_LICENSES/num_cpus-1.17.0/LICENSE-MIT +20 -0
  263. data/THIRD_PARTY_LICENSES/once_cell-1.21.3/LICENSE-APACHE +201 -0
  264. data/THIRD_PARTY_LICENSES/once_cell-1.21.3/LICENSE-MIT +23 -0
  265. data/THIRD_PARTY_LICENSES/openssl-macros-0.1.1/LICENSE-APACHE +202 -0
  266. data/THIRD_PARTY_LICENSES/openssl-macros-0.1.1/LICENSE-MIT +19 -0
  267. data/THIRD_PARTY_LICENSES/outref-0.5.2/LICENSE +21 -0
  268. data/THIRD_PARTY_LICENSES/owo-colors-4.2.3/LICENSE +21 -0
  269. data/THIRD_PARTY_LICENSES/par-core-2.0.0/LICENSE +202 -0
  270. data/THIRD_PARTY_LICENSES/par-iter-2.0.0/LICENSE +202 -0
  271. data/THIRD_PARTY_LICENSES/parking_lot-0.12.5/LICENSE-APACHE +201 -0
  272. data/THIRD_PARTY_LICENSES/parking_lot-0.12.5/LICENSE-MIT +25 -0
  273. data/THIRD_PARTY_LICENSES/parking_lot_core-0.9.12/LICENSE-APACHE +201 -0
  274. data/THIRD_PARTY_LICENSES/parking_lot_core-0.9.12/LICENSE-MIT +25 -0
  275. data/THIRD_PARTY_LICENSES/path-clean-0.1.0/LICENSE-APACHE +13 -0
  276. data/THIRD_PARTY_LICENSES/path-clean-0.1.0/LICENSE-MIT +18 -0
  277. data/THIRD_PARTY_LICENSES/path-clean-1.0.1/LICENSE-APACHE +13 -0
  278. data/THIRD_PARTY_LICENSES/path-clean-1.0.1/LICENSE-MIT +18 -0
  279. data/THIRD_PARTY_LICENSES/pathdiff-0.2.3/LICENSE-APACHE +201 -0
  280. data/THIRD_PARTY_LICENSES/pathdiff-0.2.3/LICENSE-MIT +23 -0
  281. data/THIRD_PARTY_LICENSES/percent-encoding-2.3.2/LICENSE-APACHE +201 -0
  282. data/THIRD_PARTY_LICENSES/percent-encoding-2.3.2/LICENSE-MIT +25 -0
  283. data/THIRD_PARTY_LICENSES/petgraph-0.7.1/LICENSE-APACHE +201 -0
  284. data/THIRD_PARTY_LICENSES/petgraph-0.7.1/LICENSE-MIT +25 -0
  285. data/THIRD_PARTY_LICENSES/phf-0.11.3/LICENSE +20 -0
  286. data/THIRD_PARTY_LICENSES/phf-0.13.1/LICENSE +20 -0
  287. data/THIRD_PARTY_LICENSES/phf_codegen-0.13.1/LICENSE +20 -0
  288. data/THIRD_PARTY_LICENSES/phf_generator-0.11.3/LICENSE +20 -0
  289. data/THIRD_PARTY_LICENSES/phf_generator-0.13.1/LICENSE +20 -0
  290. data/THIRD_PARTY_LICENSES/phf_macros-0.11.3/LICENSE +20 -0
  291. data/THIRD_PARTY_LICENSES/phf_macros-0.13.1/LICENSE +20 -0
  292. data/THIRD_PARTY_LICENSES/phf_shared-0.11.3/LICENSE +20 -0
  293. data/THIRD_PARTY_LICENSES/phf_shared-0.13.1/LICENSE +20 -0
  294. data/THIRD_PARTY_LICENSES/pin-project-lite-0.2.17/LICENSE-APACHE +177 -0
  295. data/THIRD_PARTY_LICENSES/pin-project-lite-0.2.17/LICENSE-MIT +23 -0
  296. data/THIRD_PARTY_LICENSES/pkg-config-0.3.34/LICENSE-APACHE +201 -0
  297. data/THIRD_PARTY_LICENSES/pkg-config-0.3.34/LICENSE-MIT +25 -0
  298. data/THIRD_PARTY_LICENSES/potential_utf-0.1.4/LICENSE +46 -0
  299. data/THIRD_PARTY_LICENSES/powerfmt-0.2.0/LICENSE-Apache +202 -0
  300. data/THIRD_PARTY_LICENSES/powerfmt-0.2.0/LICENSE-MIT +19 -0
  301. data/THIRD_PARTY_LICENSES/ppv-lite86-0.2.21/LICENSE-APACHE +201 -0
  302. data/THIRD_PARTY_LICENSES/ppv-lite86-0.2.21/LICENSE-MIT +25 -0
  303. data/THIRD_PARTY_LICENSES/precomputed-hash-0.1.1/LICENSE +21 -0
  304. data/THIRD_PARTY_LICENSES/precomputed-map-0.2.0/LICENSE +21 -0
  305. data/THIRD_PARTY_LICENSES/preset_env_base-6.0.0/LICENSE +201 -0
  306. data/THIRD_PARTY_LICENSES/proc-macro2-1.0.107/LICENSE-APACHE +176 -0
  307. data/THIRD_PARTY_LICENSES/proc-macro2-1.0.107/LICENSE-MIT +23 -0
  308. data/THIRD_PARTY_LICENSES/quote-1.0.47/LICENSE-APACHE +176 -0
  309. data/THIRD_PARTY_LICENSES/quote-1.0.47/LICENSE-MIT +23 -0
  310. data/THIRD_PARTY_LICENSES/r-efi-5.3.0/LICENSE-APACHE +176 -0
  311. data/THIRD_PARTY_LICENSES/r-efi-6.0.0/LICENSE-APACHE +176 -0
  312. data/THIRD_PARTY_LICENSES/radium-0.7.0/LICENSE.txt +21 -0
  313. data/THIRD_PARTY_LICENSES/radix_fmt-1.0.0/LICENSE +201 -0
  314. data/THIRD_PARTY_LICENSES/rand-0.8.5/COPYRIGHT +12 -0
  315. data/THIRD_PARTY_LICENSES/rand-0.8.5/LICENSE-APACHE +176 -0
  316. data/THIRD_PARTY_LICENSES/rand-0.8.5/LICENSE-MIT +26 -0
  317. data/THIRD_PARTY_LICENSES/rand-0.9.5/COPYRIGHT +12 -0
  318. data/THIRD_PARTY_LICENSES/rand-0.9.5/LICENSE-APACHE +176 -0
  319. data/THIRD_PARTY_LICENSES/rand-0.9.5/LICENSE-MIT +26 -0
  320. data/THIRD_PARTY_LICENSES/rand_chacha-0.9.0/COPYRIGHT +12 -0
  321. data/THIRD_PARTY_LICENSES/rand_chacha-0.9.0/LICENSE-APACHE +176 -0
  322. data/THIRD_PARTY_LICENSES/rand_chacha-0.9.0/LICENSE-MIT +26 -0
  323. data/THIRD_PARTY_LICENSES/rand_core-0.6.4/COPYRIGHT +12 -0
  324. data/THIRD_PARTY_LICENSES/rand_core-0.6.4/LICENSE-APACHE +187 -0
  325. data/THIRD_PARTY_LICENSES/rand_core-0.6.4/LICENSE-MIT +26 -0
  326. data/THIRD_PARTY_LICENSES/rand_core-0.9.5/COPYRIGHT +12 -0
  327. data/THIRD_PARTY_LICENSES/rand_core-0.9.5/LICENSE-APACHE +187 -0
  328. data/THIRD_PARTY_LICENSES/rand_core-0.9.5/LICENSE-MIT +26 -0
  329. data/THIRD_PARTY_LICENSES/redox_syscall-0.5.18/LICENSE +22 -0
  330. data/THIRD_PARTY_LICENSES/regex-1.12.2/LICENSE-APACHE +201 -0
  331. data/THIRD_PARTY_LICENSES/regex-1.12.2/LICENSE-MIT +25 -0
  332. data/THIRD_PARTY_LICENSES/regex-automata-0.4.13/LICENSE-APACHE +201 -0
  333. data/THIRD_PARTY_LICENSES/regex-automata-0.4.13/LICENSE-MIT +25 -0
  334. data/THIRD_PARTY_LICENSES/regex-syntax-0.8.8/LICENSE-APACHE +201 -0
  335. data/THIRD_PARTY_LICENSES/regex-syntax-0.8.8/LICENSE-MIT +25 -0
  336. data/THIRD_PARTY_LICENSES/regress-0.10.5/LICENSE-APACHE +201 -0
  337. data/THIRD_PARTY_LICENSES/regress-0.10.5/LICENSE-MIT +21 -0
  338. data/THIRD_PARTY_LICENSES/rustc-hash-2.1.1/LICENSE-APACHE +176 -0
  339. data/THIRD_PARTY_LICENSES/rustc-hash-2.1.1/LICENSE-MIT +23 -0
  340. data/THIRD_PARTY_LICENSES/rustc_version-0.4.1/LICENSE-APACHE +201 -0
  341. data/THIRD_PARTY_LICENSES/rustc_version-0.4.1/LICENSE-MIT +25 -0
  342. data/THIRD_PARTY_LICENSES/rustls-pki-types-1.15.1/LICENSE-APACHE +201 -0
  343. data/THIRD_PARTY_LICENSES/rustls-pki-types-1.15.1/LICENSE-MIT +25 -0
  344. data/THIRD_PARTY_LICENSES/rustversion-1.0.22/LICENSE-APACHE +176 -0
  345. data/THIRD_PARTY_LICENSES/rustversion-1.0.22/LICENSE-MIT +23 -0
  346. data/THIRD_PARTY_LICENSES/ryu-1.0.22/LICENSE-APACHE +176 -0
  347. data/THIRD_PARTY_LICENSES/ryu-1.0.22/LICENSE-BOOST +23 -0
  348. data/THIRD_PARTY_LICENSES/ryu-js-1.0.2/LICENSE-APACHE +176 -0
  349. data/THIRD_PARTY_LICENSES/ryu-js-1.0.2/LICENSE-BOOST +23 -0
  350. data/THIRD_PARTY_LICENSES/scoped-tls-1.0.1/LICENSE-APACHE +201 -0
  351. data/THIRD_PARTY_LICENSES/scoped-tls-1.0.1/LICENSE-MIT +25 -0
  352. data/THIRD_PARTY_LICENSES/scopeguard-1.2.0/LICENSE-APACHE +201 -0
  353. data/THIRD_PARTY_LICENSES/scopeguard-1.2.0/LICENSE-MIT +25 -0
  354. data/THIRD_PARTY_LICENSES/scraper-0.27.0/LICENSE +15 -0
  355. data/THIRD_PARTY_LICENSES/selectors-0.38.0/LICENSE +373 -0
  356. data/THIRD_PARTY_LICENSES/selectors-0.38.0/source/CHANGES.md +1 -0
  357. data/THIRD_PARTY_LICENSES/selectors-0.38.0/source/Cargo.lock +513 -0
  358. data/THIRD_PARTY_LICENSES/selectors-0.38.0/source/Cargo.toml +88 -0
  359. data/THIRD_PARTY_LICENSES/selectors-0.38.0/source/Cargo.toml.orig +37 -0
  360. data/THIRD_PARTY_LICENSES/selectors-0.38.0/source/README.md +24 -0
  361. data/THIRD_PARTY_LICENSES/selectors-0.38.0/source/attr.rs +196 -0
  362. data/THIRD_PARTY_LICENSES/selectors-0.38.0/source/bloom.rs +422 -0
  363. data/THIRD_PARTY_LICENSES/selectors-0.38.0/source/build.rs +77 -0
  364. data/THIRD_PARTY_LICENSES/selectors-0.38.0/source/builder.rs +455 -0
  365. data/THIRD_PARTY_LICENSES/selectors-0.38.0/source/context.rs +525 -0
  366. data/THIRD_PARTY_LICENSES/selectors-0.38.0/source/kleene_value.rs +131 -0
  367. data/THIRD_PARTY_LICENSES/selectors-0.38.0/source/lib.rs +23 -0
  368. data/THIRD_PARTY_LICENSES/selectors-0.38.0/source/matching.rs +1609 -0
  369. data/THIRD_PARTY_LICENSES/selectors-0.38.0/source/nth_index_cache.rs +102 -0
  370. data/THIRD_PARTY_LICENSES/selectors-0.38.0/source/parser.rs +4857 -0
  371. data/THIRD_PARTY_LICENSES/selectors-0.38.0/source/relative_selector/cache.rs +81 -0
  372. data/THIRD_PARTY_LICENSES/selectors-0.38.0/source/relative_selector/filter.rs +159 -0
  373. data/THIRD_PARTY_LICENSES/selectors-0.38.0/source/relative_selector/mod.rs +6 -0
  374. data/THIRD_PARTY_LICENSES/selectors-0.38.0/source/sink.rs +31 -0
  375. data/THIRD_PARTY_LICENSES/selectors-0.38.0/source/tree.rs +184 -0
  376. data/THIRD_PARTY_LICENSES/selectors-0.38.0/source/visitor.rs +137 -0
  377. data/THIRD_PARTY_LICENSES/semver-1.0.27/LICENSE-APACHE +176 -0
  378. data/THIRD_PARTY_LICENSES/semver-1.0.27/LICENSE-MIT +23 -0
  379. data/THIRD_PARTY_LICENSES/seq-macro-0.3.6/LICENSE-APACHE +176 -0
  380. data/THIRD_PARTY_LICENSES/seq-macro-0.3.6/LICENSE-MIT +23 -0
  381. data/THIRD_PARTY_LICENSES/serde-1.0.228/LICENSE-APACHE +176 -0
  382. data/THIRD_PARTY_LICENSES/serde-1.0.228/LICENSE-MIT +23 -0
  383. data/THIRD_PARTY_LICENSES/serde_core-1.0.228/LICENSE-APACHE +176 -0
  384. data/THIRD_PARTY_LICENSES/serde_core-1.0.228/LICENSE-MIT +23 -0
  385. data/THIRD_PARTY_LICENSES/serde_derive-1.0.228/LICENSE-APACHE +176 -0
  386. data/THIRD_PARTY_LICENSES/serde_derive-1.0.228/LICENSE-MIT +23 -0
  387. data/THIRD_PARTY_LICENSES/serde_json-1.0.151/LICENSE-APACHE +176 -0
  388. data/THIRD_PARTY_LICENSES/serde_json-1.0.151/LICENSE-MIT +23 -0
  389. data/THIRD_PARTY_LICENSES/servo_arc-0.4.3/LICENSE-APACHE +201 -0
  390. data/THIRD_PARTY_LICENSES/servo_arc-0.4.3/LICENSE-MIT +23 -0
  391. data/THIRD_PARTY_LICENSES/sha1-0.10.6/LICENSE-APACHE +201 -0
  392. data/THIRD_PARTY_LICENSES/sha1-0.10.6/LICENSE-MIT +27 -0
  393. data/THIRD_PARTY_LICENSES/sha2-0.10.9/LICENSE-APACHE +201 -0
  394. data/THIRD_PARTY_LICENSES/sha2-0.10.9/LICENSE-MIT +27 -0
  395. data/THIRD_PARTY_LICENSES/shlex-1.3.0/LICENSE-APACHE +13 -0
  396. data/THIRD_PARTY_LICENSES/shlex-1.3.0/LICENSE-MIT +21 -0
  397. data/THIRD_PARTY_LICENSES/signal-hook-registry-1.4.8/LICENSE-APACHE +201 -0
  398. data/THIRD_PARTY_LICENSES/signal-hook-registry-1.4.8/LICENSE-MIT +25 -0
  399. data/THIRD_PARTY_LICENSES/simd-adler32-0.3.10/LICENSE.md +21 -0
  400. data/THIRD_PARTY_LICENSES/siphasher-0.3.11/COPYING +7 -0
  401. data/THIRD_PARTY_LICENSES/siphasher-1.0.1/COPYING +7 -0
  402. data/THIRD_PARTY_LICENSES/slab-0.4.12/LICENSE +25 -0
  403. data/THIRD_PARTY_LICENSES/smallvec-1.15.1/LICENSE-APACHE +201 -0
  404. data/THIRD_PARTY_LICENSES/smallvec-1.15.1/LICENSE-MIT +25 -0
  405. data/THIRD_PARTY_LICENSES/smartstring-1.0.1/LICENCE.md +355 -0
  406. data/THIRD_PARTY_LICENSES/socket2-0.6.5/LICENSE-APACHE +201 -0
  407. data/THIRD_PARTY_LICENSES/socket2-0.6.5/LICENSE-MIT +25 -0
  408. data/THIRD_PARTY_LICENSES/st-map-0.2.4/LICENSE +202 -0
  409. data/THIRD_PARTY_LICENSES/stable_deref_trait-1.2.1/LICENSE-APACHE +201 -0
  410. data/THIRD_PARTY_LICENSES/stable_deref_trait-1.2.1/LICENSE-MIT +25 -0
  411. data/THIRD_PARTY_LICENSES/static-map-macro-0.3.4/LICENSE +202 -0
  412. data/THIRD_PARTY_LICENSES/static_assertions-1.1.0/LICENSE-APACHE +202 -0
  413. data/THIRD_PARTY_LICENSES/static_assertions-1.1.0/LICENSE-MIT +21 -0
  414. data/THIRD_PARTY_LICENSES/string_cache-0.9.0/LICENSE-APACHE +201 -0
  415. data/THIRD_PARTY_LICENSES/string_cache-0.9.0/LICENSE-MIT +25 -0
  416. data/THIRD_PARTY_LICENSES/string_cache_codegen-0.6.1/LICENSE-APACHE +201 -0
  417. data/THIRD_PARTY_LICENSES/string_cache_codegen-0.6.1/LICENSE-MIT +25 -0
  418. data/THIRD_PARTY_LICENSES/string_enum-1.0.2/LICENSE +201 -0
  419. data/THIRD_PARTY_LICENSES/strsim-0.11.1/LICENSE +23 -0
  420. data/THIRD_PARTY_LICENSES/swc-52.0.0/LICENSE +201 -0
  421. data/THIRD_PARTY_LICENSES/swc_allocator-4.0.1/LICENSE +201 -0
  422. data/THIRD_PARTY_LICENSES/swc_atoms-9.0.0/LICENSE +201 -0
  423. data/THIRD_PARTY_LICENSES/swc_common-18.0.1/LICENSE +201 -0
  424. data/THIRD_PARTY_LICENSES/swc_compiler_base-45.0.0/LICENSE +201 -0
  425. data/THIRD_PARTY_LICENSES/swc_config-3.1.2/LICENSE +201 -0
  426. data/THIRD_PARTY_LICENSES/swc_config_macro-1.0.1/LICENSE +201 -0
  427. data/THIRD_PARTY_LICENSES/swc_core-54.0.0/LICENSE +201 -0
  428. data/THIRD_PARTY_LICENSES/swc_ecma_ast-19.0.0/LICENSE +201 -0
  429. data/THIRD_PARTY_LICENSES/swc_ecma_codegen-21.0.0/LICENSE +201 -0
  430. data/THIRD_PARTY_LICENSES/swc_ecma_codegen_macros-2.0.2/LICENSE +201 -0
  431. data/THIRD_PARTY_LICENSES/swc_ecma_compat_bugfixes-39.0.0/LICENSE +201 -0
  432. data/THIRD_PARTY_LICENSES/swc_ecma_compat_common-30.0.0/LICENSE +201 -0
  433. data/THIRD_PARTY_LICENSES/swc_ecma_compat_es2015-39.0.0/LICENSE +201 -0
  434. data/THIRD_PARTY_LICENSES/swc_ecma_compat_es2016-35.0.0/LICENSE +201 -0
  435. data/THIRD_PARTY_LICENSES/swc_ecma_compat_es2017-35.0.0/LICENSE +201 -0
  436. data/THIRD_PARTY_LICENSES/swc_ecma_compat_es2018-36.0.0/LICENSE +201 -0
  437. data/THIRD_PARTY_LICENSES/swc_ecma_compat_es2019-35.0.0/LICENSE +201 -0
  438. data/THIRD_PARTY_LICENSES/swc_ecma_compat_es2020-37.0.0/LICENSE +201 -0
  439. data/THIRD_PARTY_LICENSES/swc_ecma_compat_es2021-35.0.0/LICENSE +201 -0
  440. data/THIRD_PARTY_LICENSES/swc_ecma_compat_es2022-37.0.0/LICENSE +201 -0
  441. data/THIRD_PARTY_LICENSES/swc_ecma_compat_es3-26.0.0/LICENSE +201 -0
  442. data/THIRD_PARTY_LICENSES/swc_ecma_ext_transforms-25.0.0/LICENSE +201 -0
  443. data/THIRD_PARTY_LICENSES/swc_ecma_hooks-0.3.0/LICENSE +201 -0
  444. data/THIRD_PARTY_LICENSES/swc_ecma_loader-18.0.0/LICENSE +201 -0
  445. data/THIRD_PARTY_LICENSES/swc_ecma_minifier-42.0.0/LICENSE +201 -0
  446. data/THIRD_PARTY_LICENSES/swc_ecma_parser-32.0.0/LICENSE +201 -0
  447. data/THIRD_PARTY_LICENSES/swc_ecma_preset_env-45.0.0/LICENSE +201 -0
  448. data/THIRD_PARTY_LICENSES/swc_ecma_transformer-6.0.0/LICENSE +201 -0
  449. data/THIRD_PARTY_LICENSES/swc_ecma_transforms-44.0.0/LICENSE +201 -0
  450. data/THIRD_PARTY_LICENSES/swc_ecma_transforms_base-35.0.0/LICENSE +201 -0
  451. data/THIRD_PARTY_LICENSES/swc_ecma_transforms_classes-35.0.0/LICENSE +201 -0
  452. data/THIRD_PARTY_LICENSES/swc_ecma_transforms_compat-40.0.0/LICENSE +201 -0
  453. data/THIRD_PARTY_LICENSES/swc_ecma_transforms_macros-1.0.1/LICENSE +201 -0
  454. data/THIRD_PARTY_LICENSES/swc_ecma_transforms_module-38.0.0/LICENSE +201 -0
  455. data/THIRD_PARTY_LICENSES/swc_ecma_transforms_optimization-37.0.0/LICENSE +201 -0
  456. data/THIRD_PARTY_LICENSES/swc_ecma_transforms_proposal-35.0.0/LICENSE +201 -0
  457. data/THIRD_PARTY_LICENSES/swc_ecma_transforms_react-38.0.0/LICENSE +201 -0
  458. data/THIRD_PARTY_LICENSES/swc_ecma_transforms_typescript-38.0.0/LICENSE +201 -0
  459. data/THIRD_PARTY_LICENSES/swc_ecma_usage_analyzer-27.0.0/LICENSE +201 -0
  460. data/THIRD_PARTY_LICENSES/swc_ecma_utils-25.0.0/LICENSE +201 -0
  461. data/THIRD_PARTY_LICENSES/swc_ecma_visit-19.0.0/LICENSE +201 -0
  462. data/THIRD_PARTY_LICENSES/swc_eq_ignore_macros-1.0.1/LICENSE +201 -0
  463. data/THIRD_PARTY_LICENSES/swc_error_reporters-20.0.0/LICENSE +201 -0
  464. data/THIRD_PARTY_LICENSES/swc_macros_common-1.0.1/LICENSE +201 -0
  465. data/THIRD_PARTY_LICENSES/swc_node_comments-18.0.0/LICENSE +201 -0
  466. data/THIRD_PARTY_LICENSES/swc_sourcemap-9.3.4/LICENSE +31 -0
  467. data/THIRD_PARTY_LICENSES/swc_timer-1.0.0/LICENSE +201 -0
  468. data/THIRD_PARTY_LICENSES/swc_trace_macro-2.0.2/LICENSE +201 -0
  469. data/THIRD_PARTY_LICENSES/swc_transform_common-12.0.0/LICENSE +201 -0
  470. data/THIRD_PARTY_LICENSES/swc_visit-2.0.1/LICENSE +201 -0
  471. data/THIRD_PARTY_LICENSES/syn-2.0.113/LICENSE-APACHE +176 -0
  472. data/THIRD_PARTY_LICENSES/syn-2.0.113/LICENSE-MIT +23 -0
  473. data/THIRD_PARTY_LICENSES/syn-3.0.5/LICENSE-APACHE +176 -0
  474. data/THIRD_PARTY_LICENSES/syn-3.0.5/LICENSE-MIT +23 -0
  475. data/THIRD_PARTY_LICENSES/sync_wrapper-1.0.2/LICENSE +177 -0
  476. data/THIRD_PARTY_LICENSES/synstructure-0.13.2/LICENSE +7 -0
  477. data/THIRD_PARTY_LICENSES/synstructure-0.14.0/LICENSE +7 -0
  478. data/THIRD_PARTY_LICENSES/tap-1.0.1/LICENSE.txt +21 -0
  479. data/THIRD_PARTY_LICENSES/tendril-0.5.1/LICENSE-APACHE +201 -0
  480. data/THIRD_PARTY_LICENSES/tendril-0.5.1/LICENSE-MIT +25 -0
  481. data/THIRD_PARTY_LICENSES/textwrap-0.16.2/LICENSE +21 -0
  482. data/THIRD_PARTY_LICENSES/thiserror-1.0.69/LICENSE-APACHE +176 -0
  483. data/THIRD_PARTY_LICENSES/thiserror-1.0.69/LICENSE-MIT +23 -0
  484. data/THIRD_PARTY_LICENSES/thiserror-2.0.21/LICENSE-APACHE +176 -0
  485. data/THIRD_PARTY_LICENSES/thiserror-2.0.21/LICENSE-MIT +23 -0
  486. data/THIRD_PARTY_LICENSES/thiserror-impl-1.0.69/LICENSE-APACHE +176 -0
  487. data/THIRD_PARTY_LICENSES/thiserror-impl-1.0.69/LICENSE-MIT +23 -0
  488. data/THIRD_PARTY_LICENSES/thiserror-impl-2.0.21/LICENSE-APACHE +176 -0
  489. data/THIRD_PARTY_LICENSES/thiserror-impl-2.0.21/LICENSE-MIT +23 -0
  490. data/THIRD_PARTY_LICENSES/time-0.3.55/LICENSE-Apache +177 -0
  491. data/THIRD_PARTY_LICENSES/time-0.3.55/LICENSE-MIT +19 -0
  492. data/THIRD_PARTY_LICENSES/time-core-0.1.9/LICENSE-Apache +177 -0
  493. data/THIRD_PARTY_LICENSES/time-core-0.1.9/LICENSE-MIT +19 -0
  494. data/THIRD_PARTY_LICENSES/time-macros-0.2.32/LICENSE-Apache +177 -0
  495. data/THIRD_PARTY_LICENSES/time-macros-0.2.32/LICENSE-MIT +19 -0
  496. data/THIRD_PARTY_LICENSES/tinystr-0.8.4/LICENSE +46 -0
  497. data/THIRD_PARTY_LICENSES/tokio-1.53.1/LICENSE +21 -0
  498. data/THIRD_PARTY_LICENSES/tokio-btls-0.5.6/LICENSE-APACHE +202 -0
  499. data/THIRD_PARTY_LICENSES/tokio-btls-0.5.6/LICENSE-MIT +27 -0
  500. data/THIRD_PARTY_LICENSES/tokio-macros-2.7.2/LICENSE +22 -0
  501. data/THIRD_PARTY_LICENSES/tokio-socks-0.5.3/LICENSE +21 -0
  502. data/THIRD_PARTY_LICENSES/tokio-tungstenite-0.29.0/LICENSE +20 -0
  503. data/THIRD_PARTY_LICENSES/tokio-util-0.7.19/LICENSE +21 -0
  504. data/THIRD_PARTY_LICENSES/tower-0.5.3/LICENSE +25 -0
  505. data/THIRD_PARTY_LICENSES/tower-http-0.6.11/LICENSE +25 -0
  506. data/THIRD_PARTY_LICENSES/tower-layer-0.3.3/LICENSE +25 -0
  507. data/THIRD_PARTY_LICENSES/tower-service-0.3.3/LICENSE +25 -0
  508. data/THIRD_PARTY_LICENSES/tracing-0.1.44/LICENSE +25 -0
  509. data/THIRD_PARTY_LICENSES/tracing-attributes-0.1.31/LICENSE +25 -0
  510. data/THIRD_PARTY_LICENSES/tracing-core-0.1.36/LICENSE +25 -0
  511. data/THIRD_PARTY_LICENSES/triomphe-0.1.15/LICENSE-APACHE +201 -0
  512. data/THIRD_PARTY_LICENSES/triomphe-0.1.15/LICENSE-MIT +27 -0
  513. data/THIRD_PARTY_LICENSES/try-lock-0.2.5/LICENSE +21 -0
  514. data/THIRD_PARTY_LICENSES/tungstenite-0.29.0/LICENSE-APACHE +201 -0
  515. data/THIRD_PARTY_LICENSES/tungstenite-0.29.0/LICENSE-MIT +20 -0
  516. data/THIRD_PARTY_LICENSES/typed-builder-0.23.2/LICENSE-APACHE +201 -0
  517. data/THIRD_PARTY_LICENSES/typed-builder-0.23.2/LICENSE-MIT +23 -0
  518. data/THIRD_PARTY_LICENSES/typed-builder-macro-0.23.2/LICENSE-APACHE +201 -0
  519. data/THIRD_PARTY_LICENSES/typed-builder-macro-0.23.2/LICENSE-MIT +23 -0
  520. data/THIRD_PARTY_LICENSES/typenum-1.19.0/LICENSE +1 -0
  521. data/THIRD_PARTY_LICENSES/typenum-1.19.0/LICENSE-APACHE +201 -0
  522. data/THIRD_PARTY_LICENSES/typenum-1.19.0/LICENSE-MIT +21 -0
  523. data/THIRD_PARTY_LICENSES/unicode-id-start-1.4.0/LICENSE-APACHE +176 -0
  524. data/THIRD_PARTY_LICENSES/unicode-id-start-1.4.0/LICENSE-MIT +23 -0
  525. data/THIRD_PARTY_LICENSES/unicode-id-start-1.4.0/LICENSE-UNICODE +39 -0
  526. data/THIRD_PARTY_LICENSES/unicode-ident-1.0.22/LICENSE-APACHE +176 -0
  527. data/THIRD_PARTY_LICENSES/unicode-ident-1.0.22/LICENSE-MIT +23 -0
  528. data/THIRD_PARTY_LICENSES/unicode-ident-1.0.22/LICENSE-UNICODE +39 -0
  529. data/THIRD_PARTY_LICENSES/unicode-linebreak-0.1.5/LICENSE +201 -0
  530. data/THIRD_PARTY_LICENSES/unicode-width-0.1.14/COPYRIGHT +7 -0
  531. data/THIRD_PARTY_LICENSES/unicode-width-0.1.14/LICENSE-APACHE +201 -0
  532. data/THIRD_PARTY_LICENSES/unicode-width-0.1.14/LICENSE-MIT +25 -0
  533. data/THIRD_PARTY_LICENSES/unicode-width-0.2.2/COPYRIGHT +7 -0
  534. data/THIRD_PARTY_LICENSES/unicode-width-0.2.2/LICENSE-APACHE +201 -0
  535. data/THIRD_PARTY_LICENSES/unicode-width-0.2.2/LICENSE-MIT +25 -0
  536. data/THIRD_PARTY_LICENSES/url-2.5.8/LICENSE-APACHE +201 -0
  537. data/THIRD_PARTY_LICENSES/url-2.5.8/LICENSE-MIT +25 -0
  538. data/THIRD_PARTY_LICENSES/utf8_iter-1.0.4/COPYRIGHT +42 -0
  539. data/THIRD_PARTY_LICENSES/utf8_iter-1.0.4/LICENSE-APACHE +202 -0
  540. data/THIRD_PARTY_LICENSES/utf8_iter-1.0.4/LICENSE-MIT +25 -0
  541. data/THIRD_PARTY_LICENSES/uuid-1.19.0/LICENSE-APACHE +201 -0
  542. data/THIRD_PARTY_LICENSES/uuid-1.19.0/LICENSE-MIT +26 -0
  543. data/THIRD_PARTY_LICENSES/vergen-9.0.6/LICENSE-APACHE +201 -0
  544. data/THIRD_PARTY_LICENSES/vergen-9.0.6/LICENSE-MIT +25 -0
  545. data/THIRD_PARTY_LICENSES/vergen-lib-0.1.6/LICENSE-APACHE +201 -0
  546. data/THIRD_PARTY_LICENSES/vergen-lib-0.1.6/LICENSE-MIT +25 -0
  547. data/THIRD_PARTY_LICENSES/version_check-0.9.5/LICENSE-APACHE +201 -0
  548. data/THIRD_PARTY_LICENSES/version_check-0.9.5/LICENSE-MIT +19 -0
  549. data/THIRD_PARTY_LICENSES/vsimd-0.8.0/LICENSE +21 -0
  550. data/THIRD_PARTY_LICENSES/want-0.3.1/LICENSE +20 -0
  551. data/THIRD_PARTY_LICENSES/wasi-0.11.1+wasi-snapshot-preview1/LICENSE-APACHE +201 -0
  552. data/THIRD_PARTY_LICENSES/wasi-0.11.1+wasi-snapshot-preview1/LICENSE-Apache-2.0_WITH_LLVM-exception +220 -0
  553. data/THIRD_PARTY_LICENSES/wasi-0.11.1+wasi-snapshot-preview1/LICENSE-MIT +23 -0
  554. data/THIRD_PARTY_LICENSES/wasip2-1.0.1+wasi-0.2.4/LICENSE-APACHE +201 -0
  555. data/THIRD_PARTY_LICENSES/wasm-bindgen-0.2.106/LICENSE-APACHE +201 -0
  556. data/THIRD_PARTY_LICENSES/wasm-bindgen-0.2.106/LICENSE-MIT +25 -0
  557. data/THIRD_PARTY_LICENSES/wasm-bindgen-macro-0.2.106/LICENSE-APACHE +201 -0
  558. data/THIRD_PARTY_LICENSES/wasm-bindgen-macro-0.2.106/LICENSE-MIT +25 -0
  559. data/THIRD_PARTY_LICENSES/wasm-bindgen-macro-support-0.2.106/LICENSE-APACHE +201 -0
  560. data/THIRD_PARTY_LICENSES/wasm-bindgen-macro-support-0.2.106/LICENSE-MIT +25 -0
  561. data/THIRD_PARTY_LICENSES/wasm-bindgen-shared-0.2.106/LICENSE-APACHE +201 -0
  562. data/THIRD_PARTY_LICENSES/wasm-bindgen-shared-0.2.106/LICENSE-MIT +25 -0
  563. data/THIRD_PARTY_LICENSES/web_atoms-0.2.6/LICENSE-APACHE +201 -0
  564. data/THIRD_PARTY_LICENSES/web_atoms-0.2.6/LICENSE-MIT +25 -0
  565. data/THIRD_PARTY_LICENSES/webpki-root-certs-1.0.9/LICENSE +61 -0
  566. data/THIRD_PARTY_LICENSES/winapi-0.3.9/LICENSE-APACHE +201 -0
  567. data/THIRD_PARTY_LICENSES/winapi-0.3.9/LICENSE-MIT +19 -0
  568. data/THIRD_PARTY_LICENSES/winapi-i686-pc-windows-gnu-0.4.0/LICENSE-APACHE +201 -0
  569. data/THIRD_PARTY_LICENSES/winapi-x86_64-pc-windows-gnu-0.4.0/LICENSE-APACHE +201 -0
  570. data/THIRD_PARTY_LICENSES/windows-core-0.62.2/license-apache-2.0 +201 -0
  571. data/THIRD_PARTY_LICENSES/windows-core-0.62.2/license-mit +21 -0
  572. data/THIRD_PARTY_LICENSES/windows-implement-0.60.2/license-apache-2.0 +201 -0
  573. data/THIRD_PARTY_LICENSES/windows-implement-0.60.2/license-mit +21 -0
  574. data/THIRD_PARTY_LICENSES/windows-interface-0.59.3/license-apache-2.0 +201 -0
  575. data/THIRD_PARTY_LICENSES/windows-interface-0.59.3/license-mit +21 -0
  576. data/THIRD_PARTY_LICENSES/windows-link-0.2.1/license-apache-2.0 +201 -0
  577. data/THIRD_PARTY_LICENSES/windows-link-0.2.1/license-mit +21 -0
  578. data/THIRD_PARTY_LICENSES/windows-result-0.4.1/license-apache-2.0 +201 -0
  579. data/THIRD_PARTY_LICENSES/windows-result-0.4.1/license-mit +21 -0
  580. data/THIRD_PARTY_LICENSES/windows-strings-0.5.1/license-apache-2.0 +201 -0
  581. data/THIRD_PARTY_LICENSES/windows-strings-0.5.1/license-mit +21 -0
  582. data/THIRD_PARTY_LICENSES/windows-sys-0.61.2/license-apache-2.0 +201 -0
  583. data/THIRD_PARTY_LICENSES/windows-sys-0.61.2/license-mit +21 -0
  584. data/THIRD_PARTY_LICENSES/wit-bindgen-0.46.0/LICENSE-APACHE +201 -0
  585. data/THIRD_PARTY_LICENSES/wit-bindgen-0.46.0/LICENSE-Apache-2.0_WITH_LLVM-exception +220 -0
  586. data/THIRD_PARTY_LICENSES/wit-bindgen-0.46.0/LICENSE-MIT +23 -0
  587. data/THIRD_PARTY_LICENSES/wreq-0.16.1/LICENSE +202 -0
  588. data/THIRD_PARTY_LICENSES/wreq-proto-0.2.6/LICENSE +202 -0
  589. data/THIRD_PARTY_LICENSES/wreq-rt-0.2.2-rc.4/LICENSE +201 -0
  590. data/THIRD_PARTY_LICENSES/wreq-util-0.2.0/LICENSE +201 -0
  591. data/THIRD_PARTY_LICENSES/writeable-0.6.4/LICENSE +46 -0
  592. data/THIRD_PARTY_LICENSES/wyz-0.5.1/LICENSE.txt +21 -0
  593. data/THIRD_PARTY_LICENSES/yoke-0.8.3/LICENSE +46 -0
  594. data/THIRD_PARTY_LICENSES/yoke-derive-0.8.4/LICENSE +46 -0
  595. data/THIRD_PARTY_LICENSES/zerocopy-0.8.31/LICENSE-APACHE +202 -0
  596. data/THIRD_PARTY_LICENSES/zerocopy-0.8.31/LICENSE-BSD +24 -0
  597. data/THIRD_PARTY_LICENSES/zerocopy-0.8.31/LICENSE-MIT +26 -0
  598. data/THIRD_PARTY_LICENSES/zerocopy-derive-0.8.31/LICENSE-APACHE +202 -0
  599. data/THIRD_PARTY_LICENSES/zerocopy-derive-0.8.31/LICENSE-BSD +24 -0
  600. data/THIRD_PARTY_LICENSES/zerocopy-derive-0.8.31/LICENSE-MIT +26 -0
  601. data/THIRD_PARTY_LICENSES/zerofrom-0.1.6/LICENSE +46 -0
  602. data/THIRD_PARTY_LICENSES/zerofrom-derive-0.1.6/LICENSE +46 -0
  603. data/THIRD_PARTY_LICENSES/zerotrie-0.2.5/LICENSE +46 -0
  604. data/THIRD_PARTY_LICENSES/zerovec-0.11.8/LICENSE +46 -0
  605. data/THIRD_PARTY_LICENSES/zerovec-derive-0.11.6/LICENSE +46 -0
  606. data/THIRD_PARTY_LICENSES/zlib-rs-0.6.7/LICENSE +19 -0
  607. data/THIRD_PARTY_LICENSES/zmij-1.0.11/LICENSE-MIT +23 -0
  608. data/THIRD_PARTY_LICENSES/zstd-0.13.3/LICENSE +8 -0
  609. data/THIRD_PARTY_LICENSES/zstd-0.14.0/LICENSE +28 -0
  610. data/THIRD_PARTY_LICENSES/zstd-safe-7.3.0/LICENSE +28 -0
  611. data/THIRD_PARTY_LICENSES/zstd-safe-8.0.0/LICENSE +28 -0
  612. data/THIRD_PARTY_LICENSES/zstd-sys-2.1.0+zstd.1.5.7/LICENSE +28 -0
  613. data/THIRD_PARTY_LICENSES/zstd-sys-2.1.0+zstd.1.5.7/LICENSE.BSD-3-Clause +32 -0
  614. data/UPSTREAM.md +11 -0
  615. data/lib/cfsolve/cfsolve-engine +4 -0
  616. data/lib/cfsolve/profiles/safari-26-ios/answers.json +3606 -0
  617. data/lib/cfsolve/profiles/safari-26-ios/challenge-page-answers.json +3608 -0
  618. data/lib/cfsolve/profiles/safari-26-ios.json +554 -0
  619. data/lib/cfsolve/version.rb +6 -0
  620. data/lib/cfsolve.rb +113 -0
  621. 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,6 @@
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
+ pub mod cache;
6
+ pub mod filter;
@@ -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
+ }