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/lib/set.cc ADDED
@@ -0,0 +1,777 @@
1
+ #include "./wrapped_re2_set.h"
2
+ #include "./pattern.h"
3
+ #include "./util.h"
4
+ #include "./wrapped_re2.h"
5
+
6
+ #include <algorithm>
7
+ #include <memory>
8
+ #include <string>
9
+ #include <vector>
10
+
11
+ Nan::Persistent<v8::FunctionTemplate> WrappedRE2Set::constructor;
12
+
13
+ struct SetFlags
14
+ {
15
+ bool global = false;
16
+ bool ignoreCase = false;
17
+ bool multiline = false;
18
+ bool dotAll = false;
19
+ bool unicode = false;
20
+ bool sticky = false;
21
+ bool hasIndices = false;
22
+ };
23
+
24
+ static bool parseFlags(const v8::Local<v8::Value> &arg, SetFlags &flags)
25
+ {
26
+ const char *data = nullptr;
27
+ size_t size = 0;
28
+ std::vector<char> buffer;
29
+
30
+ if (arg->IsString())
31
+ {
32
+ auto isolate = v8::Isolate::GetCurrent();
33
+ auto t = arg->ToString(Nan::GetCurrentContext());
34
+ if (t.IsEmpty())
35
+ {
36
+ return false;
37
+ }
38
+ auto s = t.ToLocalChecked();
39
+ size = s->Utf8Length(isolate);
40
+ buffer.resize(size + 1);
41
+ s->WriteUtf8(isolate, &buffer[0], buffer.size());
42
+ buffer[buffer.size() - 1] = '\0';
43
+ data = &buffer[0];
44
+ }
45
+ else if (node::Buffer::HasInstance(arg))
46
+ {
47
+ size = node::Buffer::Length(arg);
48
+ data = node::Buffer::Data(arg);
49
+ }
50
+ else
51
+ {
52
+ return false;
53
+ }
54
+
55
+ for (size_t i = 0; i < size; ++i)
56
+ {
57
+ switch (data[i])
58
+ {
59
+ case 'd':
60
+ flags.hasIndices = true;
61
+ break;
62
+ case 'g':
63
+ flags.global = true;
64
+ break;
65
+ case 'i':
66
+ flags.ignoreCase = true;
67
+ break;
68
+ case 'm':
69
+ flags.multiline = true;
70
+ break;
71
+ case 's':
72
+ flags.dotAll = true;
73
+ break;
74
+ case 'u':
75
+ flags.unicode = true;
76
+ break;
77
+ case 'y':
78
+ flags.sticky = true;
79
+ break;
80
+ default:
81
+ return false;
82
+ }
83
+ }
84
+
85
+ return true;
86
+ }
87
+
88
+ static bool sameEffectiveOptions(const SetFlags &a, const SetFlags &b)
89
+ {
90
+ return a.ignoreCase == b.ignoreCase && a.multiline == b.multiline && a.dotAll == b.dotAll && a.unicode == b.unicode;
91
+ }
92
+
93
+ static std::string flagsToString(const SetFlags &flags)
94
+ {
95
+ std::string result;
96
+ if (flags.hasIndices)
97
+ {
98
+ result += 'd';
99
+ }
100
+ if (flags.global)
101
+ {
102
+ result += 'g';
103
+ }
104
+ if (flags.ignoreCase)
105
+ {
106
+ result += 'i';
107
+ }
108
+ if (flags.multiline)
109
+ {
110
+ result += 'm';
111
+ }
112
+ if (flags.dotAll)
113
+ {
114
+ result += 's';
115
+ }
116
+ result += 'u';
117
+ if (flags.sticky)
118
+ {
119
+ result += 'y';
120
+ }
121
+ return result;
122
+ }
123
+
124
+ static bool collectIterable(const v8::Local<v8::Value> &input, std::vector<v8::Local<v8::Value>> &items)
125
+ {
126
+ auto context = Nan::GetCurrentContext();
127
+ auto isolate = v8::Isolate::GetCurrent();
128
+
129
+ if (input->IsArray())
130
+ {
131
+ auto array = v8::Local<v8::Array>::Cast(input);
132
+ auto length = array->Length();
133
+ items.reserve(length);
134
+ for (uint32_t i = 0; i < length; ++i)
135
+ {
136
+ auto maybe = Nan::Get(array, i);
137
+ if (maybe.IsEmpty())
138
+ {
139
+ return false;
140
+ }
141
+ items.push_back(maybe.ToLocalChecked());
142
+ }
143
+ return true;
144
+ }
145
+
146
+ auto maybeObject = input->ToObject(context);
147
+ if (maybeObject.IsEmpty())
148
+ {
149
+ return false;
150
+ }
151
+ auto object = maybeObject.ToLocalChecked();
152
+
153
+ auto maybeIteratorFn = object->Get(context, v8::Symbol::GetIterator(isolate));
154
+ if (maybeIteratorFn.IsEmpty())
155
+ {
156
+ return false;
157
+ }
158
+ auto iteratorFn = maybeIteratorFn.ToLocalChecked();
159
+ if (!iteratorFn->IsFunction())
160
+ {
161
+ return false;
162
+ }
163
+
164
+ auto maybeIterator = iteratorFn.As<v8::Function>()->Call(context, object, 0, nullptr);
165
+ if (maybeIterator.IsEmpty())
166
+ {
167
+ return false;
168
+ }
169
+ auto iterator = maybeIterator.ToLocalChecked();
170
+ if (!iterator->IsObject())
171
+ {
172
+ return false;
173
+ }
174
+
175
+ auto nextKey = Nan::New("next").ToLocalChecked();
176
+ auto valueKey = Nan::New("value").ToLocalChecked();
177
+ auto doneKey = Nan::New("done").ToLocalChecked();
178
+
179
+ for (;;)
180
+ {
181
+ auto maybeNext = Nan::Get(iterator.As<v8::Object>(), nextKey);
182
+ if (maybeNext.IsEmpty())
183
+ {
184
+ return false;
185
+ }
186
+ auto next = maybeNext.ToLocalChecked();
187
+ if (!next->IsFunction())
188
+ {
189
+ return false;
190
+ }
191
+ auto maybeResult = next.As<v8::Function>()->Call(context, iterator, 0, nullptr);
192
+ if (maybeResult.IsEmpty())
193
+ {
194
+ return false;
195
+ }
196
+ auto result = maybeResult.ToLocalChecked();
197
+ if (!result->IsObject())
198
+ {
199
+ return false;
200
+ }
201
+ auto resultObj = result->ToObject(context).ToLocalChecked();
202
+ auto maybeDone = Nan::Get(resultObj, doneKey);
203
+ if (maybeDone.IsEmpty())
204
+ {
205
+ return false;
206
+ }
207
+ if (maybeDone.ToLocalChecked()->BooleanValue(isolate))
208
+ {
209
+ break;
210
+ }
211
+ auto maybeValue = Nan::Get(resultObj, valueKey);
212
+ if (maybeValue.IsEmpty())
213
+ {
214
+ return false;
215
+ }
216
+ items.push_back(maybeValue.ToLocalChecked());
217
+ }
218
+
219
+ return true;
220
+ }
221
+
222
+ static bool parseAnchor(const v8::Local<v8::Value> &arg, re2::RE2::Anchor &anchor)
223
+ {
224
+ if (arg.IsEmpty() || arg->IsUndefined() || arg->IsNull())
225
+ {
226
+ anchor = re2::RE2::UNANCHORED;
227
+ return true;
228
+ }
229
+
230
+ v8::Local<v8::Value> value = arg;
231
+ if (arg->IsObject() && !arg->IsString())
232
+ {
233
+ auto context = Nan::GetCurrentContext();
234
+ auto object = arg->ToObject(context).ToLocalChecked();
235
+ auto maybeAnchor = Nan::Get(object, Nan::New("anchor").ToLocalChecked());
236
+ if (maybeAnchor.IsEmpty())
237
+ {
238
+ return false;
239
+ }
240
+ value = maybeAnchor.ToLocalChecked();
241
+ if (value->IsUndefined() || value->IsNull())
242
+ {
243
+ anchor = re2::RE2::UNANCHORED;
244
+ return true;
245
+ }
246
+ }
247
+
248
+ if (!value->IsString())
249
+ {
250
+ return false;
251
+ }
252
+
253
+ Nan::Utf8String val(value);
254
+ std::string text(*val, val.length());
255
+
256
+ if (text == "unanchored")
257
+ {
258
+ anchor = re2::RE2::UNANCHORED;
259
+ return true;
260
+ }
261
+ if (text == "start")
262
+ {
263
+ anchor = re2::RE2::ANCHOR_START;
264
+ return true;
265
+ }
266
+ if (text == "both")
267
+ {
268
+ anchor = re2::RE2::ANCHOR_BOTH;
269
+ return true;
270
+ }
271
+
272
+ return false;
273
+ }
274
+
275
+ static bool fillInput(const v8::Local<v8::Value> &arg, StrVal &str, v8::Local<v8::Object> &keepAlive)
276
+ {
277
+ if (node::Buffer::HasInstance(arg))
278
+ {
279
+ auto size = node::Buffer::Length(arg);
280
+ str.reset(arg, size, size, 0, true);
281
+ return true;
282
+ }
283
+
284
+ auto context = Nan::GetCurrentContext();
285
+ auto isolate = v8::Isolate::GetCurrent();
286
+ auto t = arg->ToString(context);
287
+ if (t.IsEmpty())
288
+ {
289
+ return false;
290
+ }
291
+ auto s = t.ToLocalChecked();
292
+ auto utf8Length = s->Utf8Length(isolate);
293
+ auto buffer = node::Buffer::New(isolate, s).ToLocalChecked();
294
+ keepAlive = buffer;
295
+ str.reset(buffer, node::Buffer::Length(buffer), utf8Length, 0);
296
+ return true;
297
+ }
298
+
299
+ static std::string anchorToString(re2::RE2::Anchor anchor)
300
+ {
301
+ switch (anchor)
302
+ {
303
+ case re2::RE2::ANCHOR_BOTH:
304
+ return "both";
305
+ case re2::RE2::ANCHOR_START:
306
+ return "start";
307
+ default:
308
+ return "unanchored";
309
+ }
310
+ }
311
+
312
+ static std::string makeCombinedSource(const std::vector<std::string> &sources)
313
+ {
314
+ if (sources.empty())
315
+ {
316
+ return "(?:)";
317
+ }
318
+
319
+ std::string combined;
320
+ for (size_t i = 0, n = sources.size(); i < n; ++i)
321
+ {
322
+ if (i)
323
+ {
324
+ combined += '|';
325
+ }
326
+ combined += sources[i];
327
+ }
328
+ return combined;
329
+ }
330
+
331
+ static const char setDeprecationMessage[] = "BMP patterns aren't supported by node-re2. An implicit \"u\" flag is assumed by RE2.Set. In a future major version, calling RE2.Set 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.";
332
+
333
+ NAN_METHOD(WrappedRE2Set::New)
334
+ {
335
+ auto context = Nan::GetCurrentContext();
336
+ auto isolate = context->GetIsolate();
337
+
338
+ if (!info.IsConstructCall())
339
+ {
340
+ std::vector<v8::Local<v8::Value>> parameters(info.Length());
341
+ for (size_t i = 0, n = info.Length(); i < n; ++i)
342
+ {
343
+ parameters[i] = info[i];
344
+ }
345
+ auto maybeNew = Nan::NewInstance(Nan::GetFunction(Nan::New(constructor)).ToLocalChecked(), parameters.size(), &parameters[0]);
346
+ if (!maybeNew.IsEmpty())
347
+ {
348
+ info.GetReturnValue().Set(maybeNew.ToLocalChecked());
349
+ }
350
+ return;
351
+ }
352
+
353
+ if (!info.Length())
354
+ {
355
+ return Nan::ThrowTypeError("Expected an iterable of patterns as the 1st argument.");
356
+ }
357
+
358
+ SetFlags flags;
359
+ bool haveFlags = false;
360
+ bool flagsFromArg = false;
361
+
362
+ v8::Local<v8::Value> flagsArg;
363
+ v8::Local<v8::Value> optionsArg;
364
+ if (info.Length() > 1)
365
+ {
366
+ if (info[1]->IsObject() && !info[1]->IsString() && !node::Buffer::HasInstance(info[1]))
367
+ {
368
+ optionsArg = info[1];
369
+ }
370
+ else
371
+ {
372
+ flagsArg = info[1];
373
+ if (info.Length() > 2)
374
+ {
375
+ optionsArg = info[2];
376
+ }
377
+ }
378
+ }
379
+
380
+ if (!flagsArg.IsEmpty())
381
+ {
382
+ if (!parseFlags(flagsArg, flags))
383
+ {
384
+ return Nan::ThrowTypeError("Invalid flags for RE2.Set.");
385
+ }
386
+ haveFlags = true;
387
+ flagsFromArg = true;
388
+ }
389
+
390
+ re2::RE2::Anchor anchor = re2::RE2::UNANCHORED;
391
+ if (!optionsArg.IsEmpty())
392
+ {
393
+ if (!parseAnchor(optionsArg, anchor))
394
+ {
395
+ return Nan::ThrowTypeError("Invalid anchor option for RE2.Set.");
396
+ }
397
+ }
398
+
399
+ std::vector<v8::Local<v8::Value>> patterns;
400
+ if (!collectIterable(info[0], patterns))
401
+ {
402
+ return Nan::ThrowTypeError("Expected an iterable of patterns as the 1st argument.");
403
+ }
404
+
405
+ auto mergeFlags = [&](const SetFlags &candidate) {
406
+ if (flagsFromArg)
407
+ {
408
+ return true;
409
+ }
410
+ if (!haveFlags)
411
+ {
412
+ flags = candidate;
413
+ haveFlags = true;
414
+ return true;
415
+ }
416
+ return sameEffectiveOptions(flags, candidate);
417
+ };
418
+
419
+ for (auto &value : patterns)
420
+ {
421
+ SetFlags patternFlags;
422
+ bool hasFlagsForPattern = false;
423
+
424
+ if (value->IsRegExp())
425
+ {
426
+ const auto *re = v8::RegExp::Cast(*value);
427
+ v8::RegExp::Flags reFlags = re->GetFlags();
428
+ patternFlags.global = bool(reFlags & v8::RegExp::kGlobal);
429
+ patternFlags.ignoreCase = bool(reFlags & v8::RegExp::kIgnoreCase);
430
+ patternFlags.multiline = bool(reFlags & v8::RegExp::kMultiline);
431
+ patternFlags.dotAll = bool(reFlags & v8::RegExp::kDotAll);
432
+ patternFlags.unicode = bool(reFlags & v8::RegExp::kUnicode);
433
+ patternFlags.sticky = bool(reFlags & v8::RegExp::kSticky);
434
+ patternFlags.hasIndices = bool(reFlags & v8::RegExp::kHasIndices);
435
+ hasFlagsForPattern = true;
436
+ }
437
+ else if (value->IsObject())
438
+ {
439
+ auto maybeObj = value->ToObject(context);
440
+ if (!maybeObj.IsEmpty())
441
+ {
442
+ auto obj = maybeObj.ToLocalChecked();
443
+ if (WrappedRE2::HasInstance(obj))
444
+ {
445
+ auto re2 = Nan::ObjectWrap::Unwrap<WrappedRE2>(obj);
446
+ patternFlags.global = re2->global;
447
+ patternFlags.ignoreCase = re2->ignoreCase;
448
+ patternFlags.multiline = re2->multiline;
449
+ patternFlags.dotAll = re2->dotAll;
450
+ patternFlags.unicode = true;
451
+ patternFlags.sticky = re2->sticky;
452
+ patternFlags.hasIndices = re2->hasIndices;
453
+ hasFlagsForPattern = true;
454
+ }
455
+ }
456
+ }
457
+
458
+ if (hasFlagsForPattern && !mergeFlags(patternFlags))
459
+ {
460
+ return Nan::ThrowTypeError("All patterns in RE2.Set must use the same flags.");
461
+ }
462
+ }
463
+
464
+ if (!flags.unicode)
465
+ {
466
+ switch (WrappedRE2::unicodeWarningLevel)
467
+ {
468
+ case WrappedRE2::THROW:
469
+ return Nan::ThrowSyntaxError(setDeprecationMessage);
470
+ case WrappedRE2::WARN:
471
+ printDeprecationWarning(setDeprecationMessage);
472
+ break;
473
+ case WrappedRE2::WARN_ONCE:
474
+ if (!WrappedRE2::alreadyWarnedAboutUnicode)
475
+ {
476
+ printDeprecationWarning(setDeprecationMessage);
477
+ WrappedRE2::alreadyWarnedAboutUnicode = true;
478
+ }
479
+ break;
480
+ default:
481
+ break;
482
+ }
483
+ }
484
+
485
+ re2::RE2::Options options;
486
+ options.set_case_sensitive(!flags.ignoreCase);
487
+ options.set_one_line(!flags.multiline);
488
+ options.set_dot_nl(flags.dotAll);
489
+ options.set_log_errors(false);
490
+
491
+ std::unique_ptr<WrappedRE2Set> set(new WrappedRE2Set(options, anchor, flagsToString(flags)));
492
+ std::vector<char> buffer;
493
+
494
+ for (auto &value : patterns)
495
+ {
496
+ const char *data = nullptr;
497
+ size_t size = 0;
498
+ std::string source;
499
+
500
+ if (node::Buffer::HasInstance(value))
501
+ {
502
+ size = node::Buffer::Length(value);
503
+ data = node::Buffer::Data(value);
504
+ source = escapeRegExp(data, size);
505
+ }
506
+ else if (value->IsRegExp())
507
+ {
508
+ const auto *re = v8::RegExp::Cast(*value);
509
+ auto t = re->GetSource()->ToString(context);
510
+ if (t.IsEmpty())
511
+ {
512
+ return;
513
+ }
514
+ auto s = t.ToLocalChecked();
515
+ size = s->Utf8Length(isolate);
516
+ buffer.resize(size + 1);
517
+ s->WriteUtf8(isolate, &buffer[0], buffer.size());
518
+ buffer[size] = '\0';
519
+ data = &buffer[0];
520
+ source = escapeRegExp(data, size);
521
+ }
522
+ else if (value->IsString())
523
+ {
524
+ auto t = value->ToString(context);
525
+ if (t.IsEmpty())
526
+ {
527
+ return;
528
+ }
529
+ auto s = t.ToLocalChecked();
530
+ size = s->Utf8Length(isolate);
531
+ buffer.resize(size + 1);
532
+ s->WriteUtf8(isolate, &buffer[0], buffer.size());
533
+ buffer[size] = '\0';
534
+ data = &buffer[0];
535
+ source = escapeRegExp(data, size);
536
+ }
537
+ else if (value->IsObject())
538
+ {
539
+ auto maybeObj = value->ToObject(context);
540
+ if (maybeObj.IsEmpty())
541
+ {
542
+ return;
543
+ }
544
+ auto obj = maybeObj.ToLocalChecked();
545
+ if (!WrappedRE2::HasInstance(obj))
546
+ {
547
+ return Nan::ThrowTypeError("Expected a string, Buffer, RegExp, or RE2 instance in the pattern list.");
548
+ }
549
+
550
+ auto re2 = Nan::ObjectWrap::Unwrap<WrappedRE2>(obj);
551
+ source = re2->source;
552
+ data = source.data();
553
+ size = source.size();
554
+ }
555
+ else
556
+ {
557
+ return Nan::ThrowTypeError("Expected a string, Buffer, RegExp, or RE2 instance in the pattern list.");
558
+ }
559
+
560
+ if (translateRegExp(data, size, flags.multiline, buffer))
561
+ {
562
+ data = &buffer[0];
563
+ size = buffer.size() - 1;
564
+ }
565
+
566
+ std::string error;
567
+ if (set->set.Add(re2::StringPiece(data, size), &error) < 0)
568
+ {
569
+ if (error.empty())
570
+ {
571
+ error = "Invalid pattern in RE2.Set.";
572
+ }
573
+ return Nan::ThrowSyntaxError(error.c_str());
574
+ }
575
+ set->sources.push_back(source);
576
+ }
577
+
578
+ if (!set->set.Compile())
579
+ {
580
+ return Nan::ThrowError("RE2.Set could not be compiled.");
581
+ }
582
+
583
+ set->combinedSource = makeCombinedSource(set->sources);
584
+ set->Wrap(info.This());
585
+ set.release();
586
+
587
+ info.GetReturnValue().Set(info.This());
588
+ }
589
+
590
+ NAN_METHOD(WrappedRE2Set::Test)
591
+ {
592
+ auto re2set = Nan::ObjectWrap::Unwrap<WrappedRE2Set>(info.This());
593
+ if (!re2set)
594
+ {
595
+ info.GetReturnValue().Set(false);
596
+ return;
597
+ }
598
+
599
+ StrVal str;
600
+ v8::Local<v8::Object> keepAlive;
601
+ if (!fillInput(info[0], str, keepAlive))
602
+ {
603
+ return;
604
+ }
605
+
606
+ re2::RE2::Set::ErrorInfo errorInfo{re2::RE2::Set::kNoError};
607
+ bool matched = re2set->set.Match(str, nullptr, &errorInfo);
608
+ if (!matched && errorInfo.kind != re2::RE2::Set::kNoError)
609
+ {
610
+ const char *message = "RE2.Set matching failed.";
611
+ switch (errorInfo.kind)
612
+ {
613
+ case re2::RE2::Set::kOutOfMemory:
614
+ message = "RE2.Set matching failed: out of memory.";
615
+ break;
616
+ case re2::RE2::Set::kInconsistent:
617
+ message = "RE2.Set matching failed: inconsistent result.";
618
+ break;
619
+ case re2::RE2::Set::kNotCompiled:
620
+ message = "RE2.Set matching failed: set is not compiled.";
621
+ break;
622
+ default:
623
+ break;
624
+ }
625
+ return Nan::ThrowError(message);
626
+ }
627
+
628
+ info.GetReturnValue().Set(matched);
629
+ }
630
+
631
+ NAN_METHOD(WrappedRE2Set::Match)
632
+ {
633
+ auto re2set = Nan::ObjectWrap::Unwrap<WrappedRE2Set>(info.This());
634
+ if (!re2set)
635
+ {
636
+ info.GetReturnValue().Set(Nan::New<v8::Array>(0));
637
+ return;
638
+ }
639
+
640
+ StrVal str;
641
+ v8::Local<v8::Object> keepAlive;
642
+ if (!fillInput(info[0], str, keepAlive))
643
+ {
644
+ return;
645
+ }
646
+
647
+ std::vector<int> matches;
648
+ re2::RE2::Set::ErrorInfo errorInfo{re2::RE2::Set::kNoError};
649
+ bool matched = re2set->set.Match(str, &matches, &errorInfo);
650
+ if (!matched && errorInfo.kind != re2::RE2::Set::kNoError)
651
+ {
652
+ const char *message = "RE2.Set matching failed.";
653
+ switch (errorInfo.kind)
654
+ {
655
+ case re2::RE2::Set::kOutOfMemory:
656
+ message = "RE2.Set matching failed: out of memory.";
657
+ break;
658
+ case re2::RE2::Set::kInconsistent:
659
+ message = "RE2.Set matching failed: inconsistent result.";
660
+ break;
661
+ case re2::RE2::Set::kNotCompiled:
662
+ message = "RE2.Set matching failed: set is not compiled.";
663
+ break;
664
+ default:
665
+ break;
666
+ }
667
+ return Nan::ThrowError(message);
668
+ }
669
+
670
+ std::sort(matches.begin(), matches.end());
671
+ auto result = Nan::New<v8::Array>(matches.size());
672
+ for (size_t i = 0, n = matches.size(); i < n; ++i)
673
+ {
674
+ Nan::Set(result, i, Nan::New(matches[i]));
675
+ }
676
+
677
+ info.GetReturnValue().Set(result);
678
+ }
679
+
680
+ NAN_METHOD(WrappedRE2Set::ToString)
681
+ {
682
+ auto re2set = Nan::ObjectWrap::Unwrap<WrappedRE2Set>(info.This());
683
+ if (!re2set)
684
+ {
685
+ info.GetReturnValue().SetEmptyString();
686
+ return;
687
+ }
688
+
689
+ std::string result = "/";
690
+ result += re2set->combinedSource;
691
+ result += "/";
692
+ result += re2set->flags;
693
+ info.GetReturnValue().Set(Nan::New(result).ToLocalChecked());
694
+ }
695
+
696
+ NAN_GETTER(WrappedRE2Set::GetFlags)
697
+ {
698
+ auto re2set = Nan::ObjectWrap::Unwrap<WrappedRE2Set>(info.This());
699
+ if (!re2set)
700
+ {
701
+ info.GetReturnValue().Set(Nan::New("u").ToLocalChecked());
702
+ return;
703
+ }
704
+ info.GetReturnValue().Set(Nan::New(re2set->flags).ToLocalChecked());
705
+ }
706
+
707
+ NAN_GETTER(WrappedRE2Set::GetSources)
708
+ {
709
+ auto re2set = Nan::ObjectWrap::Unwrap<WrappedRE2Set>(info.This());
710
+ if (!re2set)
711
+ {
712
+ info.GetReturnValue().Set(Nan::New<v8::Array>(0));
713
+ return;
714
+ }
715
+ auto result = Nan::New<v8::Array>(re2set->sources.size());
716
+ for (size_t i = 0, n = re2set->sources.size(); i < n; ++i)
717
+ {
718
+ Nan::Set(result, i, Nan::New(re2set->sources[i]).ToLocalChecked());
719
+ }
720
+ info.GetReturnValue().Set(result);
721
+ }
722
+
723
+ NAN_GETTER(WrappedRE2Set::GetSource)
724
+ {
725
+ auto re2set = Nan::ObjectWrap::Unwrap<WrappedRE2Set>(info.This());
726
+ if (!re2set)
727
+ {
728
+ info.GetReturnValue().Set(Nan::New("(?:)").ToLocalChecked());
729
+ return;
730
+ }
731
+ info.GetReturnValue().Set(Nan::New(re2set->combinedSource).ToLocalChecked());
732
+ }
733
+
734
+ NAN_GETTER(WrappedRE2Set::GetSize)
735
+ {
736
+ auto re2set = Nan::ObjectWrap::Unwrap<WrappedRE2Set>(info.This());
737
+ if (!re2set)
738
+ {
739
+ info.GetReturnValue().Set(0);
740
+ return;
741
+ }
742
+ info.GetReturnValue().Set(static_cast<uint32_t>(re2set->sources.size()));
743
+ }
744
+
745
+ NAN_GETTER(WrappedRE2Set::GetAnchor)
746
+ {
747
+ auto re2set = Nan::ObjectWrap::Unwrap<WrappedRE2Set>(info.This());
748
+ if (!re2set)
749
+ {
750
+ info.GetReturnValue().Set(Nan::New("unanchored").ToLocalChecked());
751
+ return;
752
+ }
753
+ info.GetReturnValue().Set(Nan::New(anchorToString(re2set->anchor)).ToLocalChecked());
754
+ }
755
+
756
+ v8::Local<v8::Function> WrappedRE2Set::Init()
757
+ {
758
+ Nan::EscapableHandleScope scope;
759
+
760
+ auto tpl = Nan::New<v8::FunctionTemplate>(New);
761
+ tpl->SetClassName(Nan::New("RE2Set").ToLocalChecked());
762
+ auto instanceTemplate = tpl->InstanceTemplate();
763
+ instanceTemplate->SetInternalFieldCount(1);
764
+
765
+ Nan::SetPrototypeMethod(tpl, "test", Test);
766
+ Nan::SetPrototypeMethod(tpl, "match", Match);
767
+ Nan::SetPrototypeMethod(tpl, "toString", ToString);
768
+
769
+ Nan::SetAccessor(instanceTemplate, Nan::New("flags").ToLocalChecked(), GetFlags);
770
+ Nan::SetAccessor(instanceTemplate, Nan::New("sources").ToLocalChecked(), GetSources);
771
+ Nan::SetAccessor(instanceTemplate, Nan::New("source").ToLocalChecked(), GetSource);
772
+ Nan::SetAccessor(instanceTemplate, Nan::New("size").ToLocalChecked(), GetSize);
773
+ Nan::SetAccessor(instanceTemplate, Nan::New("anchor").ToLocalChecked(), GetAnchor);
774
+
775
+ constructor.Reset(tpl);
776
+ return scope.Escape(Nan::GetFunction(tpl).ToLocalChecked());
777
+ }