re2 1.22.2 → 1.23.0

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 (495) hide show
  1. package/README.md +60 -4
  2. package/binding.gyp +5 -1
  3. package/lib/addon.cc +4 -0
  4. package/lib/new.cc +1 -246
  5. package/lib/pattern.cc +252 -0
  6. package/lib/pattern.h +10 -0
  7. package/lib/set.cc +777 -0
  8. package/lib/wrapped_re2_set.h +42 -0
  9. package/package.json +21 -9
  10. package/re2.d.ts +46 -9
  11. package/vendor/abseil-cpp/CMake/AbseilDll.cmake +14 -24
  12. package/vendor/abseil-cpp/CMake/AbseilHelpers.cmake +3 -3
  13. package/vendor/abseil-cpp/CMake/README.md +2 -2
  14. package/vendor/abseil-cpp/CMakeLists.txt +3 -3
  15. package/vendor/abseil-cpp/MODULE.bazel +6 -9
  16. package/vendor/abseil-cpp/README.md +6 -8
  17. package/vendor/abseil-cpp/absl/abseil.podspec.gen.py +6 -4
  18. package/vendor/abseil-cpp/absl/algorithm/BUILD.bazel +3 -0
  19. package/vendor/abseil-cpp/absl/algorithm/CMakeLists.txt +1 -0
  20. package/vendor/abseil-cpp/absl/algorithm/container.h +2 -19
  21. package/vendor/abseil-cpp/absl/algorithm/container_test.cc +4 -11
  22. package/vendor/abseil-cpp/absl/base/BUILD.bazel +60 -45
  23. package/vendor/abseil-cpp/absl/base/CMakeLists.txt +57 -38
  24. package/vendor/abseil-cpp/absl/base/attributes.h +76 -7
  25. package/vendor/abseil-cpp/absl/base/attributes_test.cc +43 -0
  26. package/vendor/abseil-cpp/absl/base/call_once.h +11 -12
  27. package/vendor/abseil-cpp/absl/base/config.h +22 -129
  28. package/vendor/abseil-cpp/absl/base/exception_safety_testing_test.cc +0 -4
  29. package/vendor/abseil-cpp/absl/base/{internal/fast_type_id.h → fast_type_id.h} +11 -16
  30. package/vendor/abseil-cpp/absl/base/{internal/fast_type_id_test.cc → fast_type_id_test.cc} +34 -30
  31. package/vendor/abseil-cpp/absl/base/internal/cycleclock.cc +0 -5
  32. package/vendor/abseil-cpp/absl/base/internal/cycleclock_config.h +7 -7
  33. package/vendor/abseil-cpp/absl/base/internal/endian.h +34 -38
  34. package/vendor/abseil-cpp/absl/base/internal/iterator_traits.h +71 -0
  35. package/vendor/abseil-cpp/absl/base/internal/iterator_traits_test.cc +85 -0
  36. package/vendor/abseil-cpp/absl/base/internal/iterator_traits_test_helper.h +97 -0
  37. package/vendor/abseil-cpp/absl/base/internal/low_level_alloc.cc +39 -9
  38. package/vendor/abseil-cpp/absl/base/internal/low_level_alloc.h +6 -0
  39. package/vendor/abseil-cpp/absl/base/internal/poison.cc +7 -6
  40. package/vendor/abseil-cpp/absl/base/internal/spinlock.cc +15 -28
  41. package/vendor/abseil-cpp/absl/base/internal/spinlock.h +65 -35
  42. package/vendor/abseil-cpp/absl/base/internal/spinlock_benchmark.cc +2 -2
  43. package/vendor/abseil-cpp/absl/base/internal/sysinfo_test.cc +2 -2
  44. package/vendor/abseil-cpp/absl/base/internal/thread_identity_benchmark.cc +1 -1
  45. package/vendor/abseil-cpp/absl/base/internal/thread_identity_test.cc +4 -4
  46. package/vendor/abseil-cpp/absl/base/internal/unaligned_access.h +6 -6
  47. package/vendor/abseil-cpp/absl/base/internal/unscaledcycleclock.cc +4 -0
  48. package/vendor/abseil-cpp/absl/base/internal/unscaledcycleclock.h +8 -3
  49. package/vendor/abseil-cpp/absl/base/no_destructor.h +11 -32
  50. package/vendor/abseil-cpp/absl/base/no_destructor_test.cc +0 -4
  51. package/vendor/abseil-cpp/absl/base/nullability.h +83 -72
  52. package/vendor/abseil-cpp/absl/base/nullability_test.cc +25 -64
  53. package/vendor/abseil-cpp/absl/base/options.h +3 -80
  54. package/vendor/abseil-cpp/absl/base/policy_checks.h +7 -7
  55. package/vendor/abseil-cpp/absl/base/raw_logging_test.cc +15 -0
  56. package/vendor/abseil-cpp/absl/base/spinlock_test_common.cc +50 -30
  57. package/vendor/abseil-cpp/absl/cleanup/BUILD.bazel +2 -1
  58. package/vendor/abseil-cpp/absl/cleanup/CMakeLists.txt +0 -1
  59. package/vendor/abseil-cpp/absl/cleanup/cleanup.h +1 -3
  60. package/vendor/abseil-cpp/absl/cleanup/cleanup_test.cc +0 -2
  61. package/vendor/abseil-cpp/absl/cleanup/internal/cleanup.h +3 -4
  62. package/vendor/abseil-cpp/absl/container/BUILD.bazel +74 -1
  63. package/vendor/abseil-cpp/absl/container/CMakeLists.txt +73 -0
  64. package/vendor/abseil-cpp/absl/container/btree_benchmark.cc +51 -9
  65. package/vendor/abseil-cpp/absl/container/btree_map.h +8 -6
  66. package/vendor/abseil-cpp/absl/container/btree_set.h +8 -6
  67. package/vendor/abseil-cpp/absl/container/btree_test.cc +89 -4
  68. package/vendor/abseil-cpp/absl/container/fixed_array.h +7 -15
  69. package/vendor/abseil-cpp/absl/container/fixed_array_test.cc +17 -0
  70. package/vendor/abseil-cpp/absl/container/flat_hash_map.h +20 -15
  71. package/vendor/abseil-cpp/absl/container/flat_hash_map_test.cc +8 -14
  72. package/vendor/abseil-cpp/absl/container/flat_hash_set.h +19 -14
  73. package/vendor/abseil-cpp/absl/container/flat_hash_set_test.cc +46 -0
  74. package/vendor/abseil-cpp/absl/container/inlined_vector.h +7 -6
  75. package/vendor/abseil-cpp/absl/container/inlined_vector_test.cc +28 -0
  76. package/vendor/abseil-cpp/absl/container/internal/btree.h +132 -29
  77. package/vendor/abseil-cpp/absl/container/internal/btree_container.h +175 -71
  78. package/vendor/abseil-cpp/absl/container/internal/common.h +43 -0
  79. package/vendor/abseil-cpp/absl/container/internal/common_policy_traits.h +1 -2
  80. package/vendor/abseil-cpp/absl/container/internal/compressed_tuple.h +28 -24
  81. package/vendor/abseil-cpp/absl/container/internal/compressed_tuple_test.cc +4 -17
  82. package/vendor/abseil-cpp/absl/container/internal/container_memory.h +80 -17
  83. package/vendor/abseil-cpp/absl/container/internal/container_memory_test.cc +32 -2
  84. package/vendor/abseil-cpp/absl/container/internal/hash_function_defaults.h +13 -8
  85. package/vendor/abseil-cpp/absl/container/internal/hash_function_defaults_test.cc +1 -52
  86. package/vendor/abseil-cpp/absl/container/internal/hash_generator_testing.cc +9 -31
  87. package/vendor/abseil-cpp/absl/container/internal/hash_generator_testing.h +23 -32
  88. package/vendor/abseil-cpp/absl/container/internal/hash_policy_testing.h +5 -1
  89. package/vendor/abseil-cpp/absl/container/internal/hash_policy_traits.h +11 -23
  90. package/vendor/abseil-cpp/absl/container/internal/hash_policy_traits_test.cc +14 -9
  91. package/vendor/abseil-cpp/absl/container/internal/hashtable_control_bytes.h +516 -0
  92. package/vendor/abseil-cpp/absl/container/internal/hashtable_control_bytes_test.cc +259 -0
  93. package/vendor/abseil-cpp/absl/container/internal/hashtablez_sampler.cc +23 -6
  94. package/vendor/abseil-cpp/absl/container/internal/hashtablez_sampler.h +32 -13
  95. package/vendor/abseil-cpp/absl/container/internal/hashtablez_sampler_test.cc +8 -8
  96. package/vendor/abseil-cpp/absl/container/internal/inlined_vector.h +2 -7
  97. package/vendor/abseil-cpp/absl/container/internal/layout.h +26 -42
  98. package/vendor/abseil-cpp/absl/container/internal/raw_hash_map.h +199 -68
  99. package/vendor/abseil-cpp/absl/container/internal/raw_hash_set.cc +1506 -213
  100. package/vendor/abseil-cpp/absl/container/internal/raw_hash_set.h +1095 -1658
  101. package/vendor/abseil-cpp/absl/container/internal/raw_hash_set_allocator_test.cc +3 -2
  102. package/vendor/abseil-cpp/absl/container/internal/raw_hash_set_benchmark.cc +31 -29
  103. package/vendor/abseil-cpp/absl/container/internal/raw_hash_set_probe_benchmark.cc +51 -20
  104. package/vendor/abseil-cpp/absl/container/internal/raw_hash_set_resize_impl.h +79 -0
  105. package/vendor/abseil-cpp/absl/container/internal/raw_hash_set_resize_impl_test.cc +66 -0
  106. package/vendor/abseil-cpp/absl/container/internal/raw_hash_set_test.cc +707 -363
  107. package/vendor/abseil-cpp/absl/container/node_hash_map.h +20 -15
  108. package/vendor/abseil-cpp/absl/container/node_hash_map_test.cc +0 -3
  109. package/vendor/abseil-cpp/absl/container/node_hash_set.h +18 -13
  110. package/vendor/abseil-cpp/absl/container/sample_element_size_test.cc +3 -8
  111. package/vendor/abseil-cpp/absl/copts/AbseilConfigureCopts.cmake +1 -1
  112. package/vendor/abseil-cpp/absl/copts/GENERATED_AbseilCopts.cmake +9 -20
  113. package/vendor/abseil-cpp/absl/copts/GENERATED_copts.bzl +9 -20
  114. package/vendor/abseil-cpp/absl/copts/copts.py +24 -15
  115. package/vendor/abseil-cpp/absl/crc/BUILD.bazel +3 -0
  116. package/vendor/abseil-cpp/absl/crc/crc32c.cc +0 -4
  117. package/vendor/abseil-cpp/absl/crc/crc32c.h +7 -5
  118. package/vendor/abseil-cpp/absl/crc/crc32c_benchmark.cc +17 -4
  119. package/vendor/abseil-cpp/absl/crc/crc32c_test.cc +30 -0
  120. package/vendor/abseil-cpp/absl/crc/internal/cpu_detect.cc +17 -0
  121. package/vendor/abseil-cpp/absl/crc/internal/cpu_detect.h +7 -1
  122. package/vendor/abseil-cpp/absl/crc/internal/crc32_x86_arm_combined_simd.h +0 -22
  123. package/vendor/abseil-cpp/absl/crc/internal/crc_memcpy_x86_arm_combined.cc +5 -0
  124. package/vendor/abseil-cpp/absl/crc/internal/crc_x86_arm_combined.cc +136 -165
  125. package/vendor/abseil-cpp/absl/crc/internal/gen_crc32c_consts.py +90 -0
  126. package/vendor/abseil-cpp/absl/debugging/BUILD.bazel +7 -0
  127. package/vendor/abseil-cpp/absl/debugging/CMakeLists.txt +4 -0
  128. package/vendor/abseil-cpp/absl/debugging/internal/addresses.h +57 -0
  129. package/vendor/abseil-cpp/absl/debugging/internal/decode_rust_punycode.cc +1 -1
  130. package/vendor/abseil-cpp/absl/debugging/internal/decode_rust_punycode.h +5 -5
  131. package/vendor/abseil-cpp/absl/debugging/internal/demangle.cc +8 -35
  132. package/vendor/abseil-cpp/absl/debugging/internal/demangle_rust.cc +16 -16
  133. package/vendor/abseil-cpp/absl/debugging/internal/demangle_test.cc +11 -10
  134. package/vendor/abseil-cpp/absl/debugging/internal/stacktrace_aarch64-inl.inc +40 -37
  135. package/vendor/abseil-cpp/absl/debugging/internal/stacktrace_arm-inl.inc +16 -7
  136. package/vendor/abseil-cpp/absl/debugging/internal/stacktrace_config.h +6 -5
  137. package/vendor/abseil-cpp/absl/debugging/internal/stacktrace_emscripten-inl.inc +14 -5
  138. package/vendor/abseil-cpp/absl/debugging/internal/stacktrace_generic-inl.inc +10 -4
  139. package/vendor/abseil-cpp/absl/debugging/internal/stacktrace_powerpc-inl.inc +27 -16
  140. package/vendor/abseil-cpp/absl/debugging/internal/stacktrace_riscv-inl.inc +13 -4
  141. package/vendor/abseil-cpp/absl/debugging/internal/stacktrace_unimplemented-inl.inc +4 -3
  142. package/vendor/abseil-cpp/absl/debugging/internal/stacktrace_win32-inl.inc +15 -28
  143. package/vendor/abseil-cpp/absl/debugging/internal/stacktrace_x86-inl.inc +25 -14
  144. package/vendor/abseil-cpp/absl/debugging/internal/vdso_support.cc +4 -0
  145. package/vendor/abseil-cpp/absl/debugging/stacktrace.cc +161 -27
  146. package/vendor/abseil-cpp/absl/debugging/stacktrace.h +73 -5
  147. package/vendor/abseil-cpp/absl/debugging/stacktrace_test.cc +435 -1
  148. package/vendor/abseil-cpp/absl/debugging/symbolize_elf.inc +55 -63
  149. package/vendor/abseil-cpp/absl/debugging/symbolize_emscripten.inc +3 -2
  150. package/vendor/abseil-cpp/absl/debugging/symbolize_win32.inc +25 -6
  151. package/vendor/abseil-cpp/absl/flags/BUILD.bazel +6 -0
  152. package/vendor/abseil-cpp/absl/flags/CMakeLists.txt +3 -0
  153. package/vendor/abseil-cpp/absl/flags/commandlineflag.h +2 -2
  154. package/vendor/abseil-cpp/absl/flags/flag.h +4 -3
  155. package/vendor/abseil-cpp/absl/flags/internal/commandlineflag.h +2 -2
  156. package/vendor/abseil-cpp/absl/flags/internal/flag.cc +14 -13
  157. package/vendor/abseil-cpp/absl/flags/internal/flag.h +34 -34
  158. package/vendor/abseil-cpp/absl/flags/internal/program_name.cc +2 -2
  159. package/vendor/abseil-cpp/absl/flags/internal/registry.h +4 -3
  160. package/vendor/abseil-cpp/absl/flags/internal/usage.cc +2 -2
  161. package/vendor/abseil-cpp/absl/flags/parse.cc +10 -6
  162. package/vendor/abseil-cpp/absl/flags/reflection.cc +9 -7
  163. package/vendor/abseil-cpp/absl/flags/usage.cc +2 -2
  164. package/vendor/abseil-cpp/absl/flags/usage_config.cc +2 -2
  165. package/vendor/abseil-cpp/absl/functional/BUILD.bazel +7 -6
  166. package/vendor/abseil-cpp/absl/functional/CMakeLists.txt +2 -4
  167. package/vendor/abseil-cpp/absl/functional/any_invocable.h +15 -15
  168. package/vendor/abseil-cpp/absl/functional/any_invocable_test.cc +10 -42
  169. package/vendor/abseil-cpp/absl/functional/function_ref.h +2 -9
  170. package/vendor/abseil-cpp/absl/functional/function_ref_test.cc +10 -0
  171. package/vendor/abseil-cpp/absl/functional/function_type_benchmark.cc +1 -1
  172. package/vendor/abseil-cpp/absl/functional/internal/any_invocable.h +112 -227
  173. package/vendor/abseil-cpp/absl/functional/internal/front_binder.h +10 -12
  174. package/vendor/abseil-cpp/absl/functional/internal/function_ref.h +2 -5
  175. package/vendor/abseil-cpp/absl/functional/overload.h +0 -20
  176. package/vendor/abseil-cpp/absl/functional/overload_test.cc +1 -7
  177. package/vendor/abseil-cpp/absl/hash/BUILD.bazel +16 -9
  178. package/vendor/abseil-cpp/absl/hash/CMakeLists.txt +6 -9
  179. package/vendor/abseil-cpp/absl/hash/hash.h +18 -0
  180. package/vendor/abseil-cpp/absl/hash/hash_benchmark.cc +3 -0
  181. package/vendor/abseil-cpp/absl/hash/hash_instantiated_test.cc +1 -1
  182. package/vendor/abseil-cpp/absl/hash/hash_test.cc +131 -30
  183. package/vendor/abseil-cpp/absl/hash/hash_testing.h +20 -20
  184. package/vendor/abseil-cpp/absl/hash/internal/hash.cc +129 -17
  185. package/vendor/abseil-cpp/absl/hash/internal/hash.h +326 -362
  186. package/vendor/abseil-cpp/absl/hash/internal/low_level_hash_test.cc +54 -151
  187. package/vendor/abseil-cpp/absl/hash/internal/spy_hash_state.h +14 -2
  188. package/vendor/abseil-cpp/absl/{strings/cord_buffer.cc → hash/internal/weakly_mixed_integer.h} +14 -6
  189. package/vendor/abseil-cpp/absl/log/BUILD.bazel +4 -0
  190. package/vendor/abseil-cpp/absl/log/CMakeLists.txt +7 -0
  191. package/vendor/abseil-cpp/absl/log/check.h +2 -1
  192. package/vendor/abseil-cpp/absl/log/check_test_impl.inc +308 -14
  193. package/vendor/abseil-cpp/absl/log/die_if_null.h +2 -2
  194. package/vendor/abseil-cpp/absl/log/flags_test.cc +7 -0
  195. package/vendor/abseil-cpp/absl/log/globals.h +4 -5
  196. package/vendor/abseil-cpp/absl/log/internal/BUILD.bazel +13 -9
  197. package/vendor/abseil-cpp/absl/log/internal/append_truncated.h +28 -0
  198. package/vendor/abseil-cpp/absl/log/internal/check_op.cc +24 -22
  199. package/vendor/abseil-cpp/absl/log/internal/check_op.h +149 -94
  200. package/vendor/abseil-cpp/absl/log/internal/conditions.cc +5 -3
  201. package/vendor/abseil-cpp/absl/log/internal/conditions.h +7 -2
  202. package/vendor/abseil-cpp/absl/log/internal/fnmatch_test.cc +1 -0
  203. package/vendor/abseil-cpp/absl/log/internal/log_message.cc +85 -43
  204. package/vendor/abseil-cpp/absl/log/internal/log_message.h +84 -59
  205. package/vendor/abseil-cpp/absl/log/internal/log_sink_set.cc +4 -4
  206. package/vendor/abseil-cpp/absl/log/internal/nullstream.h +1 -0
  207. package/vendor/abseil-cpp/absl/log/internal/proto.cc +3 -2
  208. package/vendor/abseil-cpp/absl/log/internal/proto.h +3 -3
  209. package/vendor/abseil-cpp/absl/log/internal/strip.h +4 -12
  210. package/vendor/abseil-cpp/absl/log/internal/structured.h +3 -7
  211. package/vendor/abseil-cpp/absl/log/internal/vlog_config.cc +9 -9
  212. package/vendor/abseil-cpp/absl/log/internal/vlog_config.h +8 -6
  213. package/vendor/abseil-cpp/absl/log/internal/voidify.h +10 -4
  214. package/vendor/abseil-cpp/absl/log/log.h +48 -35
  215. package/vendor/abseil-cpp/absl/log/log_basic_test_impl.inc +45 -0
  216. package/vendor/abseil-cpp/absl/log/log_entry.cc +241 -19
  217. package/vendor/abseil-cpp/absl/log/log_entry.h +2 -0
  218. package/vendor/abseil-cpp/absl/log/log_format_test.cc +412 -6
  219. package/vendor/abseil-cpp/absl/log/log_modifier_methods_test.cc +20 -0
  220. package/vendor/abseil-cpp/absl/log/log_sink_registry.h +2 -2
  221. package/vendor/abseil-cpp/absl/log/log_streamer_test.cc +15 -2
  222. package/vendor/abseil-cpp/absl/log/scoped_mock_log.h +7 -1
  223. package/vendor/abseil-cpp/absl/log/structured_test.cc +1 -0
  224. package/vendor/abseil-cpp/absl/memory/BUILD.bazel +2 -0
  225. package/vendor/abseil-cpp/absl/meta/BUILD.bazel +2 -0
  226. package/vendor/abseil-cpp/absl/meta/type_traits.h +46 -175
  227. package/vendor/abseil-cpp/absl/meta/type_traits_test.cc +1 -478
  228. package/vendor/abseil-cpp/absl/numeric/BUILD.bazel +7 -3
  229. package/vendor/abseil-cpp/absl/numeric/CMakeLists.txt +2 -0
  230. package/vendor/abseil-cpp/absl/numeric/bits.h +68 -2
  231. package/vendor/abseil-cpp/absl/numeric/bits_benchmark.cc +1 -1
  232. package/vendor/abseil-cpp/absl/numeric/bits_test.cc +83 -0
  233. package/vendor/abseil-cpp/absl/numeric/int128.cc +0 -52
  234. package/vendor/abseil-cpp/absl/numeric/int128_benchmark.cc +14 -15
  235. package/vendor/abseil-cpp/absl/numeric/int128_test.cc +13 -8
  236. package/vendor/abseil-cpp/absl/numeric/internal/bits.h +39 -7
  237. package/vendor/abseil-cpp/absl/profiling/BUILD.bazel +47 -0
  238. package/vendor/abseil-cpp/absl/profiling/CMakeLists.txt +38 -0
  239. package/vendor/abseil-cpp/absl/profiling/hashtable.cc +124 -0
  240. package/vendor/abseil-cpp/absl/profiling/hashtable.h +40 -0
  241. package/vendor/abseil-cpp/absl/profiling/internal/exponential_biased.cc +1 -1
  242. package/vendor/abseil-cpp/absl/profiling/internal/profile_builder.cc +462 -0
  243. package/vendor/abseil-cpp/absl/profiling/internal/profile_builder.h +138 -0
  244. package/vendor/abseil-cpp/absl/profiling/internal/sample_recorder.h +9 -9
  245. package/vendor/abseil-cpp/absl/profiling/internal/sample_recorder_test.cc +7 -3
  246. package/vendor/abseil-cpp/absl/random/BUILD.bazel +6 -4
  247. package/vendor/abseil-cpp/absl/random/CMakeLists.txt +20 -19
  248. package/vendor/abseil-cpp/absl/random/benchmarks.cc +16 -23
  249. package/vendor/abseil-cpp/absl/random/bit_gen_ref.h +10 -11
  250. package/vendor/abseil-cpp/absl/random/bit_gen_ref_test.cc +7 -2
  251. package/vendor/abseil-cpp/absl/random/distributions.h +6 -8
  252. package/vendor/abseil-cpp/absl/random/gaussian_distribution.h +1 -1
  253. package/vendor/abseil-cpp/absl/random/internal/BUILD.bazel +19 -20
  254. package/vendor/abseil-cpp/absl/random/internal/distribution_caller.h +5 -6
  255. package/vendor/abseil-cpp/absl/random/internal/{pool_urbg.cc → entropy_pool.cc} +24 -92
  256. package/vendor/abseil-cpp/absl/{base/inline_variable_test_b.cc → random/internal/entropy_pool.h} +14 -6
  257. package/vendor/abseil-cpp/absl/random/internal/entropy_pool_test.cc +119 -0
  258. package/vendor/abseil-cpp/absl/random/internal/mock_helpers.h +6 -7
  259. package/vendor/abseil-cpp/absl/random/internal/nonsecure_base.h +5 -6
  260. package/vendor/abseil-cpp/absl/random/internal/nonsecure_base_test.cc +39 -0
  261. package/vendor/abseil-cpp/absl/random/internal/randen_benchmarks.cc +8 -6
  262. package/vendor/abseil-cpp/absl/random/internal/randen_detect.cc +1 -1
  263. package/vendor/abseil-cpp/absl/random/internal/seed_material.cc +20 -12
  264. package/vendor/abseil-cpp/absl/random/internal/seed_material.h +5 -5
  265. package/vendor/abseil-cpp/absl/random/internal/seed_material_test.cc +3 -0
  266. package/vendor/abseil-cpp/absl/random/mock_distributions_test.cc +5 -4
  267. package/vendor/abseil-cpp/absl/random/mocking_bit_gen.h +8 -10
  268. package/vendor/abseil-cpp/absl/random/random.h +88 -53
  269. package/vendor/abseil-cpp/absl/random/seed_sequences.cc +6 -2
  270. package/vendor/abseil-cpp/absl/status/BUILD.bazel +26 -0
  271. package/vendor/abseil-cpp/absl/status/internal/status_internal.cc +3 -4
  272. package/vendor/abseil-cpp/absl/status/internal/status_internal.h +3 -4
  273. package/vendor/abseil-cpp/absl/status/internal/status_matchers.cc +4 -3
  274. package/vendor/abseil-cpp/absl/status/internal/statusor_internal.h +194 -32
  275. package/vendor/abseil-cpp/absl/status/status.cc +4 -8
  276. package/vendor/abseil-cpp/absl/status/status.h +8 -8
  277. package/vendor/abseil-cpp/absl/{base/inline_variable_test_a.cc → status/status_benchmark.cc} +20 -10
  278. package/vendor/abseil-cpp/absl/status/status_matchers_test.cc +65 -0
  279. package/vendor/abseil-cpp/absl/status/status_payload_printer.h +2 -2
  280. package/vendor/abseil-cpp/absl/status/statusor.cc +2 -2
  281. package/vendor/abseil-cpp/absl/status/statusor.h +49 -102
  282. package/vendor/abseil-cpp/absl/status/statusor_benchmark.cc +480 -0
  283. package/vendor/abseil-cpp/absl/status/statusor_test.cc +323 -1
  284. package/vendor/abseil-cpp/absl/strings/BUILD.bazel +70 -34
  285. package/vendor/abseil-cpp/absl/strings/CMakeLists.txt +6 -3
  286. package/vendor/abseil-cpp/absl/strings/ascii.cc +9 -9
  287. package/vendor/abseil-cpp/absl/strings/ascii.h +18 -18
  288. package/vendor/abseil-cpp/absl/strings/ascii_benchmark.cc +5 -8
  289. package/vendor/abseil-cpp/absl/strings/charconv.cc +21 -22
  290. package/vendor/abseil-cpp/absl/strings/charconv.h +5 -5
  291. package/vendor/abseil-cpp/absl/strings/charconv_benchmark.cc +1 -2
  292. package/vendor/abseil-cpp/absl/strings/charset_benchmark.cc +1 -1
  293. package/vendor/abseil-cpp/absl/strings/cord.cc +54 -58
  294. package/vendor/abseil-cpp/absl/strings/cord.h +94 -84
  295. package/vendor/abseil-cpp/absl/strings/cord_analysis.cc +11 -11
  296. package/vendor/abseil-cpp/absl/strings/cord_analysis.h +3 -3
  297. package/vendor/abseil-cpp/absl/strings/cord_test.cc +23 -0
  298. package/vendor/abseil-cpp/absl/strings/cordz_test_helpers.h +4 -5
  299. package/vendor/abseil-cpp/absl/strings/escaping.cc +130 -149
  300. package/vendor/abseil-cpp/absl/strings/escaping.h +9 -10
  301. package/vendor/abseil-cpp/absl/strings/escaping_benchmark.cc +2 -3
  302. package/vendor/abseil-cpp/absl/strings/escaping_test.cc +19 -9
  303. package/vendor/abseil-cpp/absl/strings/internal/charconv_bigint.cc +1 -1
  304. package/vendor/abseil-cpp/absl/strings/internal/charconv_bigint_test.cc +1 -1
  305. package/vendor/abseil-cpp/absl/strings/internal/cord_internal.h +6 -10
  306. package/vendor/abseil-cpp/absl/strings/internal/cord_rep_btree.cc +0 -4
  307. package/vendor/abseil-cpp/absl/strings/internal/cordz_handle.cc +6 -6
  308. package/vendor/abseil-cpp/absl/strings/internal/cordz_info.cc +5 -9
  309. package/vendor/abseil-cpp/absl/strings/internal/cordz_info.h +2 -4
  310. package/vendor/abseil-cpp/absl/strings/internal/damerau_levenshtein_distance_benchmark.cc +56 -0
  311. package/vendor/abseil-cpp/absl/strings/internal/memutil_benchmark.cc +2 -3
  312. package/vendor/abseil-cpp/absl/strings/internal/ostringstream_benchmark.cc +1 -2
  313. package/vendor/abseil-cpp/absl/strings/internal/str_format/arg.cc +7 -63
  314. package/vendor/abseil-cpp/absl/strings/internal/str_format/arg.h +1 -11
  315. package/vendor/abseil-cpp/absl/strings/internal/str_format/convert_test.cc +1 -6
  316. package/vendor/abseil-cpp/absl/strings/internal/str_format/extension.cc +0 -22
  317. package/vendor/abseil-cpp/absl/strings/internal/str_format/extension_test.cc +3 -2
  318. package/vendor/abseil-cpp/absl/strings/internal/str_format/output.cc +5 -3
  319. package/vendor/abseil-cpp/absl/strings/internal/str_format/parser.h +4 -2
  320. package/vendor/abseil-cpp/absl/strings/internal/str_join_internal.h +3 -3
  321. package/vendor/abseil-cpp/absl/strings/internal/str_split_internal.h +7 -2
  322. package/vendor/abseil-cpp/absl/strings/internal/string_constant.h +0 -5
  323. package/vendor/abseil-cpp/absl/strings/internal/utf8.cc +96 -1
  324. package/vendor/abseil-cpp/absl/strings/internal/utf8.h +15 -1
  325. package/vendor/abseil-cpp/absl/strings/internal/utf8_test.cc +196 -3
  326. package/vendor/abseil-cpp/absl/strings/numbers.cc +53 -32
  327. package/vendor/abseil-cpp/absl/strings/numbers.h +87 -58
  328. package/vendor/abseil-cpp/absl/strings/numbers_benchmark.cc +1 -1
  329. package/vendor/abseil-cpp/absl/strings/numbers_test.cc +634 -120
  330. package/vendor/abseil-cpp/absl/strings/str_cat.cc +6 -7
  331. package/vendor/abseil-cpp/absl/strings/str_cat.h +32 -32
  332. package/vendor/abseil-cpp/absl/strings/str_cat_benchmark.cc +25 -1
  333. package/vendor/abseil-cpp/absl/strings/str_cat_test.cc +2 -7
  334. package/vendor/abseil-cpp/absl/strings/str_format.h +18 -18
  335. package/vendor/abseil-cpp/absl/strings/str_format_test.cc +8 -14
  336. package/vendor/abseil-cpp/absl/strings/str_join_benchmark.cc +2 -3
  337. package/vendor/abseil-cpp/absl/strings/str_replace.cc +3 -3
  338. package/vendor/abseil-cpp/absl/strings/str_replace.h +6 -6
  339. package/vendor/abseil-cpp/absl/strings/str_replace_benchmark.cc +2 -3
  340. package/vendor/abseil-cpp/absl/strings/str_split.h +2 -2
  341. package/vendor/abseil-cpp/absl/strings/str_split_benchmark.cc +2 -3
  342. package/vendor/abseil-cpp/absl/strings/string_view.cc +4 -9
  343. package/vendor/abseil-cpp/absl/strings/string_view.h +38 -39
  344. package/vendor/abseil-cpp/absl/strings/string_view_benchmark.cc +4 -6
  345. package/vendor/abseil-cpp/absl/strings/string_view_test.cc +2 -50
  346. package/vendor/abseil-cpp/absl/strings/strip.h +4 -4
  347. package/vendor/abseil-cpp/absl/strings/substitute.cc +5 -4
  348. package/vendor/abseil-cpp/absl/strings/substitute.h +66 -64
  349. package/vendor/abseil-cpp/absl/strings/substitute_benchmark.cc +158 -0
  350. package/vendor/abseil-cpp/absl/synchronization/BUILD.bazel +6 -1
  351. package/vendor/abseil-cpp/absl/synchronization/CMakeLists.txt +2 -1
  352. package/vendor/abseil-cpp/absl/synchronization/barrier.cc +1 -1
  353. package/vendor/abseil-cpp/absl/synchronization/barrier_test.cc +3 -3
  354. package/vendor/abseil-cpp/absl/synchronization/blocking_counter.cc +2 -2
  355. package/vendor/abseil-cpp/absl/synchronization/internal/create_thread_identity.cc +3 -3
  356. package/vendor/abseil-cpp/absl/synchronization/internal/futex_waiter.cc +0 -4
  357. package/vendor/abseil-cpp/absl/synchronization/internal/graphcycles.cc +30 -33
  358. package/vendor/abseil-cpp/absl/synchronization/internal/graphcycles_benchmark.cc +2 -3
  359. package/vendor/abseil-cpp/absl/synchronization/internal/graphcycles_test.cc +6 -5
  360. package/vendor/abseil-cpp/absl/synchronization/internal/kernel_timeout.cc +0 -5
  361. package/vendor/abseil-cpp/absl/synchronization/internal/pthread_waiter.cc +0 -4
  362. package/vendor/abseil-cpp/absl/synchronization/internal/sem_waiter.cc +0 -4
  363. package/vendor/abseil-cpp/absl/synchronization/internal/stdcpp_waiter.cc +0 -4
  364. package/vendor/abseil-cpp/absl/synchronization/internal/thread_pool.h +3 -3
  365. package/vendor/abseil-cpp/absl/synchronization/internal/waiter_base.cc +0 -4
  366. package/vendor/abseil-cpp/absl/synchronization/internal/waiter_test.cc +12 -3
  367. package/vendor/abseil-cpp/absl/synchronization/internal/win32_waiter.cc +0 -4
  368. package/vendor/abseil-cpp/absl/synchronization/lifetime_test.cc +4 -4
  369. package/vendor/abseil-cpp/absl/synchronization/mutex.cc +27 -29
  370. package/vendor/abseil-cpp/absl/synchronization/mutex.h +205 -126
  371. package/vendor/abseil-cpp/absl/synchronization/mutex_benchmark.cc +13 -31
  372. package/vendor/abseil-cpp/absl/synchronization/mutex_test.cc +183 -169
  373. package/vendor/abseil-cpp/absl/synchronization/notification.cc +5 -5
  374. package/vendor/abseil-cpp/absl/synchronization/notification.h +1 -1
  375. package/vendor/abseil-cpp/absl/synchronization/notification_test.cc +3 -3
  376. package/vendor/abseil-cpp/absl/time/BUILD.bazel +9 -1
  377. package/vendor/abseil-cpp/absl/time/CMakeLists.txt +3 -1
  378. package/vendor/abseil-cpp/absl/time/civil_time.cc +1 -0
  379. package/vendor/abseil-cpp/absl/time/civil_time_test.cc +134 -0
  380. package/vendor/abseil-cpp/absl/time/clock.cc +11 -14
  381. package/vendor/abseil-cpp/absl/time/duration.cc +14 -9
  382. package/vendor/abseil-cpp/absl/time/duration_test.cc +6 -7
  383. package/vendor/abseil-cpp/absl/time/internal/cctz/BUILD.bazel +14 -3
  384. package/vendor/abseil-cpp/absl/time/internal/cctz/include/cctz/civil_time_detail.h +12 -0
  385. package/vendor/abseil-cpp/absl/time/internal/cctz/include/cctz/time_zone.h +1 -1
  386. package/vendor/abseil-cpp/absl/time/internal/cctz/src/cctz_benchmark.cc +4 -490
  387. package/vendor/abseil-cpp/absl/time/internal/cctz/src/test_time_zone_names.cc +515 -0
  388. package/vendor/abseil-cpp/absl/time/internal/cctz/src/test_time_zone_names.h +33 -0
  389. package/vendor/abseil-cpp/absl/time/internal/cctz/src/time_zone_format.cc +41 -4
  390. package/vendor/abseil-cpp/absl/time/internal/cctz/src/time_zone_format_test.cc +22 -23
  391. package/vendor/abseil-cpp/absl/time/internal/cctz/src/time_zone_lookup.cc +90 -111
  392. package/vendor/abseil-cpp/absl/time/internal/cctz/src/time_zone_lookup_test.cc +1 -488
  393. package/vendor/abseil-cpp/absl/time/internal/cctz/testdata/version +1 -1
  394. package/vendor/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/Coyhaique +0 -0
  395. package/vendor/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Asia/Tehran +0 -0
  396. package/vendor/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Iran +0 -0
  397. package/vendor/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/zone1970.tab +2 -1
  398. package/vendor/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/zonenow.tab +1 -1
  399. package/vendor/abseil-cpp/absl/time/time.h +24 -18
  400. package/vendor/abseil-cpp/absl/time/time_test.cc +26 -0
  401. package/vendor/abseil-cpp/absl/types/BUILD.bazel +11 -164
  402. package/vendor/abseil-cpp/absl/types/CMakeLists.txt +23 -167
  403. package/vendor/abseil-cpp/absl/types/any.h +9 -484
  404. package/vendor/abseil-cpp/absl/types/optional.h +7 -747
  405. package/vendor/abseil-cpp/absl/types/span.h +46 -19
  406. package/vendor/abseil-cpp/absl/types/span_test.cc +27 -0
  407. package/vendor/abseil-cpp/absl/types/variant.h +5 -784
  408. package/vendor/abseil-cpp/absl/types/variant_test.cc +43 -2597
  409. package/vendor/abseil-cpp/absl/utility/BUILD.bazel +1 -41
  410. package/vendor/abseil-cpp/absl/utility/CMakeLists.txt +0 -40
  411. package/vendor/abseil-cpp/absl/utility/utility.h +10 -185
  412. package/vendor/abseil-cpp/ci/absl_alternate_options.h +2 -3
  413. package/vendor/abseil-cpp/ci/cmake_common.sh +2 -2
  414. package/vendor/abseil-cpp/ci/linux_arm_clang-latest_libcxx_bazel.sh +12 -13
  415. package/vendor/abseil-cpp/ci/linux_clang-latest_libcxx_asan_bazel.sh +24 -21
  416. package/vendor/abseil-cpp/ci/linux_clang-latest_libcxx_bazel.sh +12 -12
  417. package/vendor/abseil-cpp/ci/linux_clang-latest_libcxx_tsan_bazel.sh +23 -22
  418. package/vendor/abseil-cpp/ci/linux_clang-latest_libstdcxx_bazel.sh +20 -19
  419. package/vendor/abseil-cpp/ci/linux_docker_containers.sh +4 -4
  420. package/vendor/abseil-cpp/ci/linux_gcc-floor_libstdcxx_bazel.sh +17 -17
  421. package/vendor/abseil-cpp/ci/linux_gcc-latest_libstdcxx_bazel.sh +10 -10
  422. package/vendor/abseil-cpp/ci/linux_gcc-latest_libstdcxx_cmake.sh +1 -1
  423. package/vendor/abseil-cpp/ci/linux_gcc_alpine_cmake.sh +1 -1
  424. package/vendor/abseil-cpp/ci/macos_xcode_bazel.sh +9 -10
  425. package/vendor/abseil-cpp/ci/macos_xcode_cmake.sh +9 -1
  426. package/vendor/abseil-cpp/ci/windows_clangcl_bazel.bat +14 -6
  427. package/vendor/abseil-cpp/ci/windows_msvc_bazel.bat +14 -6
  428. package/vendor/abseil-cpp/ci/windows_msvc_cmake.bat +1 -1
  429. package/vendor/re2/.bazelrc +4 -4
  430. package/vendor/re2/.bcr/metadata.template.json +16 -0
  431. package/vendor/re2/.bcr/presubmit.yml +57 -0
  432. package/vendor/re2/.bcr/source.template.json +5 -0
  433. package/vendor/re2/.github/bazel.sh +1 -7
  434. package/vendor/re2/.github/workflows/ci-bazel.yml +5 -5
  435. package/vendor/re2/.github/workflows/ci-cmake.yml +4 -4
  436. package/vendor/re2/.github/workflows/ci.yml +5 -6
  437. package/vendor/re2/.github/workflows/pages.yml +3 -3
  438. package/vendor/re2/.github/workflows/python.yml +29 -24
  439. package/vendor/re2/.github/workflows/release-bazel.yml +42 -0
  440. package/vendor/re2/.github/workflows/release.yml +15 -4
  441. package/vendor/re2/BUILD.bazel +25 -0
  442. package/vendor/re2/CMakeLists.txt +100 -85
  443. package/vendor/re2/CONTRIBUTING.md +0 -1
  444. package/vendor/re2/MODULE.bazel +10 -10
  445. package/vendor/re2/Makefile +1 -1
  446. package/vendor/re2/README.md +259 -0
  447. package/vendor/re2/python/BUILD.bazel +8 -0
  448. package/vendor/re2/python/re2.py +1 -1
  449. package/vendor/re2/python/re2_test.py +6 -0
  450. package/vendor/re2/python/setup.py +3 -3
  451. package/vendor/re2/re2/bitmap256.cc +3 -4
  452. package/vendor/re2/re2/bitstate.cc +15 -10
  453. package/vendor/re2/re2/dfa.cc +1 -2
  454. package/vendor/re2/re2/parse.cc +3 -4
  455. package/vendor/re2/re2/prog.cc +1 -2
  456. package/vendor/re2/re2/prog.h +1 -0
  457. package/vendor/re2/re2/re2.cc +5 -0
  458. package/vendor/re2/re2/re2.h +9 -9
  459. package/vendor/re2/re2/set.cc +6 -0
  460. package/vendor/re2/re2/set.h +5 -0
  461. package/vendor/re2/re2/testing/re2_arg_test.cc +3 -3
  462. package/vendor/re2/re2/testing/re2_test.cc +8 -0
  463. package/vendor/re2/re2/testing/set_test.cc +5 -0
  464. package/vendor/re2/re2/walker-inl.h +1 -1
  465. package/vendor/abseil-cpp/WORKSPACE +0 -76
  466. package/vendor/abseil-cpp/WORKSPACE.bzlmod +0 -19
  467. package/vendor/abseil-cpp/absl/base/inline_variable_test.cc +0 -64
  468. package/vendor/abseil-cpp/absl/base/internal/inline_variable.h +0 -108
  469. package/vendor/abseil-cpp/absl/base/internal/inline_variable_testing.h +0 -46
  470. package/vendor/abseil-cpp/absl/base/internal/invoke.h +0 -241
  471. package/vendor/abseil-cpp/absl/base/internal/nullability_impl.h +0 -69
  472. package/vendor/abseil-cpp/absl/base/invoke_test.cc +0 -331
  473. package/vendor/abseil-cpp/absl/hash/internal/low_level_hash.cc +0 -148
  474. package/vendor/abseil-cpp/absl/hash/internal/low_level_hash.h +0 -54
  475. package/vendor/abseil-cpp/absl/random/internal/pool_urbg.h +0 -131
  476. package/vendor/abseil-cpp/absl/random/internal/pool_urbg_test.cc +0 -182
  477. package/vendor/abseil-cpp/absl/types/any_exception_safety_test.cc +0 -173
  478. package/vendor/abseil-cpp/absl/types/any_test.cc +0 -778
  479. package/vendor/abseil-cpp/absl/types/bad_any_cast.cc +0 -64
  480. package/vendor/abseil-cpp/absl/types/bad_any_cast.h +0 -75
  481. package/vendor/abseil-cpp/absl/types/bad_optional_access.cc +0 -66
  482. package/vendor/abseil-cpp/absl/types/bad_optional_access.h +0 -78
  483. package/vendor/abseil-cpp/absl/types/bad_variant_access.cc +0 -82
  484. package/vendor/abseil-cpp/absl/types/bad_variant_access.h +0 -82
  485. package/vendor/abseil-cpp/absl/types/internal/optional.h +0 -352
  486. package/vendor/abseil-cpp/absl/types/internal/variant.h +0 -1622
  487. package/vendor/abseil-cpp/absl/types/optional_exception_safety_test.cc +0 -292
  488. package/vendor/abseil-cpp/absl/types/optional_test.cc +0 -1615
  489. package/vendor/abseil-cpp/absl/types/variant_benchmark.cc +0 -222
  490. package/vendor/abseil-cpp/absl/types/variant_exception_safety_test.cc +0 -532
  491. package/vendor/abseil-cpp/absl/utility/internal/if_constexpr.h +0 -70
  492. package/vendor/abseil-cpp/absl/utility/internal/if_constexpr_test.cc +0 -79
  493. package/vendor/abseil-cpp/absl/utility/utility_test.cc +0 -239
  494. package/vendor/re2/.github/workflows/pr.yml +0 -34
  495. package/vendor/re2/README +0 -47
package/README.md CHANGED
@@ -3,12 +3,13 @@
3
3
  [npm-img]: https://img.shields.io/npm/v/re2.svg
4
4
  [npm-url]: https://npmjs.org/package/re2
5
5
 
6
- This project provides bindings for [RE2](https://github.com/google/re2):
7
- fast, safe alternative to backtracking regular expression engines written by [Russ Cox](http://swtch.com/~rsc/).
6
+ This project provides Node.js bindings for [RE2](https://github.com/google/re2):
7
+ a fast, safe alternative to backtracking regular expression engines written by [Russ Cox](http://swtch.com/~rsc/) in C++.
8
8
  To learn more about RE2, start with an overview
9
9
  [Regular Expression Matching in the Wild](http://swtch.com/~rsc/regexp/regexp3.html). More resources can be found
10
10
  at his [Implementing Regular Expressions](http://swtch.com/~rsc/regexp/) page.
11
11
 
12
+
12
13
  `RE2`'s regular expression language is almost a superset of what is provided by `RegExp`
13
14
  (see [Syntax](https://github.com/google/re2/wiki/Syntax)),
14
15
  but it lacks two features: backreferences and lookahead assertions. See below for more details.
@@ -24,7 +25,9 @@ See `RE2.unicodeWarningLevel` below for more details.
24
25
  It can work with [node.js buffers](http://nodejs.org/api/buffer.html) directly reducing overhead
25
26
  on recoding and copying characters, and making processing/parsing long files fast.
26
27
 
27
- All documentation can be found in this README and in the [wiki](https://github.com/uhop/node-re2/wiki).
28
+ This project is implemented in C++ using [nan](https://github.com/nodejs/nan) for Node.js and cannot be used
29
+ with non-compliant runtimes like web browsers. All documentation can be found in this README and in
30
+ the [wiki](https://github.com/uhop/node-re2/wiki).
28
31
 
29
32
  ## Why use node-re2?
30
33
 
@@ -42,6 +45,12 @@ However, neither project is perfect.
42
45
  node-re2 can protect your Node.js application from ReDoS.
43
46
  node-re2 makes vulnerable regular expression patterns safe by evaluating them in `RE2` instead of the built-in Node.js regex engine.
44
47
 
48
+ To run the bundled benchmark, use the following command (make sure that node-re2 is properly built before):
49
+
50
+ ```bash
51
+ npx nano-bench bench/bad-pattern.mjs
52
+ ```
53
+
45
54
  ## Standard features
46
55
 
47
56
  `RE2` object can be created just like `RegExp`:
@@ -165,6 +174,49 @@ RE2("б").replace("абв", bufReplacer);
165
174
  This feature works for string and buffer inputs. If a buffer was used as an input, its output will be returned as
166
175
  a buffer too, otherwise a string will be returned.
167
176
 
177
+ ### `RE2.Set`
178
+
179
+ Starting with 1.23.0, use `RE2.Set` when the same string must be tested against many patterns. It builds a single automaton
180
+ for all of them and frequently beats running a large list of individual regular expressions one by one.
181
+
182
+ Sets support `test()` and `match()` methods. While `test()` can be simulated by combining patterns with `|` and using a regular expression object,
183
+ `match()` is not because it returns a list of patterns that matched, which is not possible with a regular expression object.
184
+ Parsing data against multiple choices is a frequent operation in the wild and `RE2.Set` is a fast way to do it.
185
+
186
+ * `new RE2.Set(patterns[, flagsOrOptions][, options])`
187
+ * `patterns` is any iterable of strings, `Buffer`s, `RegExp`, or `RE2` instances; flags (if provided) apply to the whole set.
188
+ * `flagsOrOptions` can be a string/`Buffer` with standard flags (`i`, `m`, `s`, `u`, `g`, `y`, `d`).
189
+ * `options.anchor` can be `'unanchored'` (default), `'start'`, or `'both'`.
190
+ * `set.test(str)` returns `true` if any pattern matches and `false` otherwise.
191
+ * `set.match(str)` returns an array of indexes of matching patterns.
192
+ * This is an array of integer indices of patterns that matched sorted in ascending order.
193
+ * If no patterns matched, an empty array is returned.
194
+ * Read-only properties:
195
+ * `set.size` (number of patterns), `set.flags` (`RegExp` flags as a string), `set.anchor` (anchor mode as a string)
196
+ * `set.source` (all patterns joined with `|` as a string), `set.sources` (individual pattern sources as an array of strings)
197
+
198
+ It is based on [RE2::Set](https://github.com/google/re2/blob/main/re2/set.h).
199
+
200
+ Example:
201
+
202
+ ```js
203
+ const routes = new RE2.Set([
204
+ '^/users/\\d+$',
205
+ '^/posts/\\d+$'
206
+ ], 'i', {anchor: 'start'});
207
+
208
+ routes.test('/users/7'); // true
209
+ routes.match('/posts/42'); // [1]
210
+ routes.sources; // ['^/users/\\d+$', '^/posts/\\d+$']
211
+ routes.toString(); // '/^/users/\\d+$|^/posts/\\d+$/iu'
212
+ ```
213
+
214
+ To run the bundled benchmark, use the following command (make sure that node-re2 is properly built before):
215
+
216
+ ```bash
217
+ npx nano-bench bench/set-match.mjs
218
+ ```
219
+
168
220
  ### Calculate length
169
221
 
170
222
  Two functions to calculate string sizes between
@@ -207,11 +259,13 @@ In the latter case `RE2` can do following actions depending on `RE2.unicodeWarni
207
259
 
208
260
  Warnings and exceptions help to audit an application for stray non-Unicode regular expressions.
209
261
 
262
+ `RE2.unicodeWarningLevel` is a global property. Be careful manipulating it in a multi-threaded environment as it is shared between threads.
263
+
210
264
  ## How to install
211
265
 
212
266
  Installation:
213
267
 
214
- ```
268
+ ```bash
215
269
  npm install --save re2
216
270
  ```
217
271
 
@@ -362,6 +416,8 @@ The same applies to `\P{...}`.
362
416
 
363
417
  ## Release history
364
418
 
419
+ - 1.23.0 *Updated all dependencies, upgraded tooling. New feature: `RE2.Set` (thx, [Wes](https://github.com/wrmedford)).*
420
+ - 1.22.3 *Technical release: upgraded QEMU emulations to native ARM runners to speed up the build process.*
365
421
  - 1.22.2 *Updated all dependencies and the list of pre-compiled targets: Node 20, 22, 24, 25 (thx, [Jiayu Liu](https://github.com/jimexist)).*
366
422
  - 1.22.1 *Added support for translation of scripts as Unicode classes.*
367
423
  - 1.22.0 *Added support for translation of Unicode classes (thx, [John Livingston](https://github.com/JohnXLivingston)). Added [attestations](https://github.com/uhop/node-re2/attestations).*
package/binding.gyp CHANGED
@@ -5,6 +5,7 @@
5
5
  "sources": [
6
6
  "lib/addon.cc",
7
7
  "lib/accessors.cc",
8
+ "lib/pattern.cc",
8
9
  "lib/util.cc",
9
10
  "lib/new.cc",
10
11
  "lib/exec.cc",
@@ -14,6 +15,7 @@
14
15
  "lib/search.cc",
15
16
  "lib/split.cc",
16
17
  "lib/to_string.cc",
18
+ "lib/set.cc",
17
19
  "vendor/re2/re2/bitmap256.cc",
18
20
  "vendor/re2/re2/bitstate.cc",
19
21
  "vendor/re2/re2/compile.cc",
@@ -47,6 +49,8 @@
47
49
  "vendor/abseil-cpp/absl/base/internal/thread_identity.cc",
48
50
  "vendor/abseil-cpp/absl/base/internal/throw_delegate.cc",
49
51
  "vendor/abseil-cpp/absl/base/internal/unscaledcycleclock.cc",
52
+ "vendor/abseil-cpp/absl/container/internal/hashtablez_sampler.cc",
53
+ "vendor/abseil-cpp/absl/container/internal/hashtablez_sampler_force_weak_definition.cc",
50
54
  "vendor/abseil-cpp/absl/container/internal/raw_hash_set.cc",
51
55
  "vendor/abseil-cpp/absl/debugging/internal/decode_rust_punycode.cc",
52
56
  "vendor/abseil-cpp/absl/debugging/internal/demangle.cc",
@@ -68,7 +72,6 @@
68
72
  "vendor/abseil-cpp/absl/flags/usage_config.cc",
69
73
  "vendor/abseil-cpp/absl/hash/internal/city.cc",
70
74
  "vendor/abseil-cpp/absl/hash/internal/hash.cc",
71
- "vendor/abseil-cpp/absl/hash/internal/low_level_hash.cc",
72
75
  "vendor/abseil-cpp/absl/log/internal/globals.cc",
73
76
  "vendor/abseil-cpp/absl/log/internal/log_format.cc",
74
77
  "vendor/abseil-cpp/absl/log/internal/log_message.cc",
@@ -90,6 +93,7 @@
90
93
  "vendor/abseil-cpp/absl/strings/internal/str_format/float_conversion.cc",
91
94
  "vendor/abseil-cpp/absl/strings/internal/str_format/output.cc",
92
95
  "vendor/abseil-cpp/absl/strings/internal/str_format/parser.cc",
96
+ "vendor/abseil-cpp/absl/strings/internal/utf8.cc",
93
97
  "vendor/abseil-cpp/absl/strings/match.cc",
94
98
  "vendor/abseil-cpp/absl/strings/numbers.cc",
95
99
  "vendor/abseil-cpp/absl/strings/str_cat.cc",
package/lib/addon.cc CHANGED
@@ -1,4 +1,5 @@
1
1
  #include "./wrapped_re2.h"
2
+ #include "./wrapped_re2_set.h"
2
3
 
3
4
  static NAN_METHOD(GetUtf8Length)
4
5
  {
@@ -75,6 +76,9 @@ v8::Local<v8::Function> WrappedRE2::Init()
75
76
  Nan::SetAccessor(instanceTemplate, Nan::New("internalSource").ToLocalChecked(), GetInternalSource);
76
77
 
77
78
  auto ctr = Nan::GetFunction(tpl).ToLocalChecked();
79
+ auto setCtr = WrappedRE2Set::Init();
80
+
81
+ Nan::Set(ctr, Nan::New("Set").ToLocalChecked(), setCtr);
78
82
 
79
83
  // properties
80
84
 
package/lib/new.cc CHANGED
@@ -1,5 +1,6 @@
1
1
  #include "./wrapped_re2.h"
2
2
  #include "./util.h"
3
+ #include "./pattern.h"
3
4
 
4
5
  #include <map>
5
6
  #include <memory>
@@ -7,252 +8,6 @@
7
8
  #include <unordered_set>
8
9
  #include <vector>
9
10
 
10
- static char hex[] = {'0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F'};
11
-
12
- inline bool isUpperCaseAlpha(char ch)
13
- {
14
- return 'A' <= ch && ch <= 'Z';
15
- }
16
-
17
- inline bool isHexadecimal(char ch)
18
- {
19
- return ('0' <= ch && ch <= '9') || ('A' <= ch && ch <= 'Z') || ('a' <= ch && ch <= 'z');
20
- }
21
-
22
- static std::map<std::string, std::string> unicodeClasses = {
23
- {"Uppercase_Letter", "Lu"},
24
- {"Lowercase_Letter", "Ll"},
25
- {"Titlecase_Letter", "Lt"},
26
- {"Cased_Letter", "LC"},
27
- {"Modifier_Letter", "Lm"},
28
- {"Other_Letter", "Lo"},
29
- {"Letter", "L"},
30
- {"Nonspacing_Mark", "Mn"},
31
- {"Spacing_Mark", "Mc"},
32
- {"Enclosing_Mark", "Me"},
33
- {"Mark", "M"},
34
- {"Decimal_Number", "Nd"},
35
- {"Letter_Number", "Nl"},
36
- {"Other_Number", "No"},
37
- {"Number", "N"},
38
- {"Connector_Punctuation", "Pc"},
39
- {"Dash_Punctuation", "Pd"},
40
- {"Open_Punctuation", "Ps"},
41
- {"Close_Punctuation", "Pe"},
42
- {"Initial_Punctuation", "Pi"},
43
- {"Final_Punctuation", "Pf"},
44
- {"Other_Punctuation", "Po"},
45
- {"Punctuation", "P"},
46
- {"Math_Symbol", "Sm"},
47
- {"Currency_Symbol", "Sc"},
48
- {"Modifier_Symbol", "Sk"},
49
- {"Other_Symbol", "So"},
50
- {"Symbol", "S"},
51
- {"Space_Separator", "Zs"},
52
- {"Line_Separator", "Zl"},
53
- {"Paragraph_Separator", "Zp"},
54
- {"Separator", "Z"},
55
- {"Control", "Cc"},
56
- {"Format", "Cf"},
57
- {"Surrogate", "Cs"},
58
- {"Private_Use", "Co"},
59
- {"Unassigned", "Cn"},
60
- {"Other", "C"},
61
- };
62
-
63
- static bool translateRegExp(const char *data, size_t size, bool multiline, std::vector<char> &buffer)
64
- {
65
- std::string result;
66
- bool changed = false;
67
-
68
- if (!size)
69
- {
70
- result = "(?:)";
71
- changed = true;
72
- }
73
- else if (multiline)
74
- {
75
- result = "(?m)";
76
- changed = true;
77
- }
78
-
79
- for (size_t i = 0; i < size;)
80
- {
81
- char ch = data[i];
82
- if (ch == '\\')
83
- {
84
- if (i + 1 < size)
85
- {
86
- ch = data[i + 1];
87
- switch (ch)
88
- {
89
- case '\\':
90
- result += "\\\\";
91
- i += 2;
92
- continue;
93
- case 'c':
94
- if (i + 2 < size)
95
- {
96
- ch = data[i + 2];
97
- if (isUpperCaseAlpha(ch))
98
- {
99
- result += "\\x";
100
- result += hex[((ch - '@') / 16) & 15];
101
- result += hex[(ch - '@') & 15];
102
- i += 3;
103
- changed = true;
104
- continue;
105
- }
106
- }
107
- result += "\\c";
108
- i += 2;
109
- continue;
110
- case 'u':
111
- if (i + 2 < size)
112
- {
113
- ch = data[i + 2];
114
- if (isHexadecimal(ch))
115
- {
116
- result += "\\x{";
117
- result += ch;
118
- i += 3;
119
- for (size_t j = 0; j < 3 && i < size; ++i, ++j)
120
- {
121
- ch = data[i];
122
- if (!isHexadecimal(ch))
123
- {
124
- break;
125
- }
126
- result += ch;
127
- }
128
- result += '}';
129
- changed = true;
130
- continue;
131
- }
132
- else if (ch == '{')
133
- {
134
- result += "\\x";
135
- i += 2;
136
- changed = true;
137
- continue;
138
- }
139
- }
140
- result += "\\u";
141
- i += 2;
142
- continue;
143
- case 'p':
144
- case 'P':
145
- if (i + 2 < size) {
146
- if (data[i + 2] == '{') {
147
- size_t j = i + 3;
148
- while (j < size && data[j] != '}') ++j;
149
- if (j < size) {
150
- result += "\\";
151
- result += data[i + 1];
152
- std::string name(data + i + 3, j - i - 3);
153
- if (unicodeClasses.find(name) != unicodeClasses.end()) {
154
- name = unicodeClasses[name];
155
- } else if (name.size() > 7 && !strncmp(name.c_str(), "Script=", 7)) {
156
- name = name.substr(7);
157
- } else if (name.size() > 3 && !strncmp(name.c_str(), "sc=", 3)) {
158
- name = name.substr(3);
159
- }
160
- if (name.size() == 1) {
161
- result += name;
162
- } else {
163
- result += "{";
164
- result += name;
165
- result += "}";
166
- }
167
- i = j + 1;
168
- changed = true;
169
- continue;
170
- }
171
- }
172
- }
173
- result += "\\";
174
- result += data[i + 1];
175
- i += 2;
176
- continue;
177
- default:
178
- result += "\\";
179
- size_t sym_size = getUtf8CharSize(ch);
180
- result.append(data + i + 1, sym_size);
181
- i += sym_size + 1;
182
- continue;
183
- }
184
- }
185
- }
186
- else if (ch == '/')
187
- {
188
- result += "\\/";
189
- i += 1;
190
- changed = true;
191
- continue;
192
- }
193
- else if (ch == '(' && i + 2 < size && data[i + 1] == '?' && data[i + 2] == '<')
194
- {
195
- if (i + 3 >= size || (data[i + 3] != '=' && data[i + 3] != '!'))
196
- {
197
- result += "(?P<";
198
- i += 3;
199
- changed = true;
200
- continue;
201
- }
202
- }
203
- size_t sym_size = getUtf8CharSize(ch);
204
- result.append(data + i, sym_size);
205
- i += sym_size;
206
- }
207
-
208
- if (!changed)
209
- {
210
- return false;
211
- }
212
-
213
- buffer.resize(0);
214
- buffer.insert(buffer.end(), result.data(), result.data() + result.size());
215
- buffer.push_back('\0');
216
-
217
- return true;
218
- }
219
-
220
- static std::string escapeRegExp(const char *data, size_t size)
221
- {
222
- std::string result;
223
-
224
- if (!size)
225
- {
226
- result = "(?:)";
227
- }
228
-
229
- size_t prevBackSlashes = 0;
230
- for (size_t i = 0; i < size;)
231
- {
232
- char ch = data[i];
233
- if (ch == '\\')
234
- {
235
- ++prevBackSlashes;
236
- }
237
- else if (ch == '/' && !(prevBackSlashes & 1))
238
- {
239
- result += "\\/";
240
- i += 1;
241
- prevBackSlashes = 0;
242
- continue;
243
- }
244
- else
245
- {
246
- prevBackSlashes = 0;
247
- }
248
- size_t sym_size = getUtf8CharSize(ch);
249
- result.append(data + i, sym_size);
250
- i += sym_size;
251
- }
252
-
253
- return result;
254
- }
255
-
256
11
  bool WrappedRE2::alreadyWarnedAboutUnicode = false;
257
12
 
258
13
  static const char *deprecationMessage = "BMP patterns aren't supported by node-re2. An implicit \"u\" flag is assumed by the RE2 constructor. In a future major version, calling the RE2 constructor without the \"u\" flag may become forbidden, or cause a different behavior. Please see https://github.com/uhop/node-re2/issues/21 for more information.";
package/lib/pattern.cc ADDED
@@ -0,0 +1,252 @@
1
+ #include "./pattern.h"
2
+ #include "./wrapped_re2.h"
3
+
4
+ #include <cstring>
5
+ #include <map>
6
+ #include <string>
7
+
8
+ static char hex[] = {'0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F'};
9
+
10
+ inline bool isUpperCaseAlpha(char ch)
11
+ {
12
+ return 'A' <= ch && ch <= 'Z';
13
+ }
14
+
15
+ inline bool isHexadecimal(char ch)
16
+ {
17
+ return ('0' <= ch && ch <= '9') || ('A' <= ch && ch <= 'Z') || ('a' <= ch && ch <= 'z');
18
+ }
19
+
20
+ static std::map<std::string, std::string> unicodeClasses = {
21
+ {"Uppercase_Letter", "Lu"},
22
+ {"Lowercase_Letter", "Ll"},
23
+ {"Titlecase_Letter", "Lt"},
24
+ {"Cased_Letter", "LC"},
25
+ {"Modifier_Letter", "Lm"},
26
+ {"Other_Letter", "Lo"},
27
+ {"Letter", "L"},
28
+ {"Nonspacing_Mark", "Mn"},
29
+ {"Spacing_Mark", "Mc"},
30
+ {"Enclosing_Mark", "Me"},
31
+ {"Mark", "M"},
32
+ {"Decimal_Number", "Nd"},
33
+ {"Letter_Number", "Nl"},
34
+ {"Other_Number", "No"},
35
+ {"Number", "N"},
36
+ {"Connector_Punctuation", "Pc"},
37
+ {"Dash_Punctuation", "Pd"},
38
+ {"Open_Punctuation", "Ps"},
39
+ {"Close_Punctuation", "Pe"},
40
+ {"Initial_Punctuation", "Pi"},
41
+ {"Final_Punctuation", "Pf"},
42
+ {"Other_Punctuation", "Po"},
43
+ {"Punctuation", "P"},
44
+ {"Math_Symbol", "Sm"},
45
+ {"Currency_Symbol", "Sc"},
46
+ {"Modifier_Symbol", "Sk"},
47
+ {"Other_Symbol", "So"},
48
+ {"Symbol", "S"},
49
+ {"Space_Separator", "Zs"},
50
+ {"Line_Separator", "Zl"},
51
+ {"Paragraph_Separator", "Zp"},
52
+ {"Separator", "Z"},
53
+ {"Control", "Cc"},
54
+ {"Format", "Cf"},
55
+ {"Surrogate", "Cs"},
56
+ {"Private_Use", "Co"},
57
+ {"Unassigned", "Cn"},
58
+ {"Other", "C"},
59
+ };
60
+
61
+ bool translateRegExp(const char *data, size_t size, bool multiline, std::vector<char> &buffer)
62
+ {
63
+ std::string result;
64
+ bool changed = false;
65
+
66
+ if (!size)
67
+ {
68
+ result = "(?:)";
69
+ changed = true;
70
+ }
71
+ else if (multiline)
72
+ {
73
+ result = "(?m)";
74
+ changed = true;
75
+ }
76
+
77
+ for (size_t i = 0; i < size;)
78
+ {
79
+ char ch = data[i];
80
+ if (ch == '\\')
81
+ {
82
+ if (i + 1 < size)
83
+ {
84
+ ch = data[i + 1];
85
+ switch (ch)
86
+ {
87
+ case '\\':
88
+ result += "\\\\";
89
+ i += 2;
90
+ continue;
91
+ case 'c':
92
+ if (i + 2 < size)
93
+ {
94
+ ch = data[i + 2];
95
+ if (isUpperCaseAlpha(ch))
96
+ {
97
+ result += "\\x";
98
+ result += hex[((ch - '@') / 16) & 15];
99
+ result += hex[(ch - '@') & 15];
100
+ i += 3;
101
+ changed = true;
102
+ continue;
103
+ }
104
+ }
105
+ result += "\\c";
106
+ i += 2;
107
+ continue;
108
+ case 'u':
109
+ if (i + 2 < size)
110
+ {
111
+ ch = data[i + 2];
112
+ if (isHexadecimal(ch))
113
+ {
114
+ result += "\\x{";
115
+ result += ch;
116
+ i += 3;
117
+ for (size_t j = 0; j < 3 && i < size; ++i, ++j)
118
+ {
119
+ ch = data[i];
120
+ if (!isHexadecimal(ch))
121
+ {
122
+ break;
123
+ }
124
+ result += ch;
125
+ }
126
+ result += '}';
127
+ changed = true;
128
+ continue;
129
+ }
130
+ else if (ch == '{')
131
+ {
132
+ result += "\\x";
133
+ i += 2;
134
+ changed = true;
135
+ continue;
136
+ }
137
+ }
138
+ result += "\\u";
139
+ i += 2;
140
+ continue;
141
+ case 'p':
142
+ case 'P':
143
+ if (i + 2 < size) {
144
+ if (data[i + 2] == '{') {
145
+ size_t j = i + 3;
146
+ while (j < size && data[j] != '}') ++j;
147
+ if (j < size) {
148
+ result += "\\";
149
+ result += data[i + 1];
150
+ std::string name(data + i + 3, j - i - 3);
151
+ if (unicodeClasses.find(name) != unicodeClasses.end()) {
152
+ name = unicodeClasses[name];
153
+ } else if (name.size() > 7 && !strncmp(name.c_str(), "Script=", 7)) {
154
+ name = name.substr(7);
155
+ } else if (name.size() > 3 && !strncmp(name.c_str(), "sc=", 3)) {
156
+ name = name.substr(3);
157
+ }
158
+ if (name.size() == 1) {
159
+ result += name;
160
+ } else {
161
+ result += "{";
162
+ result += name;
163
+ result += "}";
164
+ }
165
+ i = j + 1;
166
+ changed = true;
167
+ continue;
168
+ }
169
+ }
170
+ }
171
+ result += "\\";
172
+ result += data[i + 1];
173
+ i += 2;
174
+ continue;
175
+ default:
176
+ result += "\\";
177
+ size_t sym_size = getUtf8CharSize(ch);
178
+ result.append(data + i + 1, sym_size);
179
+ i += sym_size + 1;
180
+ continue;
181
+ }
182
+ }
183
+ }
184
+ else if (ch == '/')
185
+ {
186
+ result += "\\/";
187
+ i += 1;
188
+ changed = true;
189
+ continue;
190
+ }
191
+ else if (ch == '(' && i + 2 < size && data[i + 1] == '?' && data[i + 2] == '<')
192
+ {
193
+ if (i + 3 >= size || (data[i + 3] != '=' && data[i + 3] != '!'))
194
+ {
195
+ result += "(?P<";
196
+ i += 3;
197
+ changed = true;
198
+ continue;
199
+ }
200
+ }
201
+ size_t sym_size = getUtf8CharSize(ch);
202
+ result.append(data + i, sym_size);
203
+ i += sym_size;
204
+ }
205
+
206
+ if (!changed)
207
+ {
208
+ return false;
209
+ }
210
+
211
+ buffer.resize(0);
212
+ buffer.insert(buffer.end(), result.data(), result.data() + result.size());
213
+ buffer.push_back('\0');
214
+
215
+ return true;
216
+ }
217
+
218
+ std::string escapeRegExp(const char *data, size_t size)
219
+ {
220
+ std::string result;
221
+
222
+ if (!size)
223
+ {
224
+ result = "(?:)";
225
+ }
226
+
227
+ size_t prevBackSlashes = 0;
228
+ for (size_t i = 0; i < size;)
229
+ {
230
+ char ch = data[i];
231
+ if (ch == '\\')
232
+ {
233
+ ++prevBackSlashes;
234
+ }
235
+ else if (ch == '/' && !(prevBackSlashes & 1))
236
+ {
237
+ result += "\\/";
238
+ i += 1;
239
+ prevBackSlashes = 0;
240
+ continue;
241
+ }
242
+ else
243
+ {
244
+ prevBackSlashes = 0;
245
+ }
246
+ size_t sym_size = getUtf8CharSize(ch);
247
+ result.append(data + i, sym_size);
248
+ i += sym_size;
249
+ }
250
+
251
+ return result;
252
+ }
package/lib/pattern.h ADDED
@@ -0,0 +1,10 @@
1
+ #pragma once
2
+
3
+ #include <string>
4
+ #include <vector>
5
+
6
+ // Shared helpers for translating JavaScript-style regular expressions
7
+ // into RE2-compatible patterns.
8
+ bool translateRegExp(const char *data, size_t size, bool multiline, std::vector<char> &buffer);
9
+ std::string escapeRegExp(const char *data, size_t size);
10
+