re2 1.24.0 → 1.25.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.
- package/LICENSE +15 -20
- package/README.md +63 -4
- package/binding.gyp +1 -2
- package/lib/addon.cc +9 -5
- package/lib/exec.cc +4 -4
- package/lib/match.cc +4 -4
- package/lib/new.cc +6 -6
- package/lib/pattern.cc +148 -1
- package/lib/replace.cc +5 -4
- package/lib/search.cc +1 -1
- package/lib/set.cc +85 -10
- package/lib/test.cc +1 -1
- package/lib/unicode_properties.h +15840 -0
- package/lib/wrapped_re2.h +40 -4
- package/lib/wrapped_re2_set.h +3 -1
- package/llms-full.txt +497 -0
- package/llms.txt +135 -0
- package/package.json +19 -11
- package/re2.d.ts +2 -0
- package/re2.js +1 -0
- package/vendor/abseil-cpp/CMake/AbseilDll.cmake +87 -74
- package/vendor/abseil-cpp/CMakeLists.txt +3 -3
- package/vendor/abseil-cpp/FAQ.md +130 -79
- package/vendor/abseil-cpp/MODULE.bazel +6 -7
- package/vendor/abseil-cpp/absl/BUILD.bazel +6 -0
- package/vendor/abseil-cpp/absl/algorithm/BUILD.bazel +4 -0
- package/vendor/abseil-cpp/absl/algorithm/CMakeLists.txt +4 -0
- package/vendor/abseil-cpp/absl/algorithm/algorithm.h +34 -2
- package/vendor/abseil-cpp/absl/algorithm/container.h +164 -17
- package/vendor/abseil-cpp/absl/algorithm/container_test.cc +390 -13
- package/vendor/abseil-cpp/absl/base/BUILD.bazel +53 -6
- package/vendor/abseil-cpp/absl/base/CMakeLists.txt +28 -4
- package/vendor/abseil-cpp/absl/base/attributes.h +61 -42
- package/vendor/abseil-cpp/absl/base/call_once.h +1 -0
- package/vendor/abseil-cpp/absl/base/casts.h +8 -1
- package/vendor/abseil-cpp/absl/base/casts_test.cc +3 -6
- package/vendor/abseil-cpp/absl/base/config.h +53 -9
- package/vendor/abseil-cpp/absl/base/exception_safety_testing_test.cc +9 -9
- package/vendor/abseil-cpp/absl/base/fast_type_id.h +30 -2
- package/vendor/abseil-cpp/absl/base/fast_type_id_test.cc +3 -0
- package/vendor/abseil-cpp/absl/base/internal/exception_safety_testing.h +15 -12
- package/vendor/abseil-cpp/absl/base/internal/hardening.h +136 -0
- package/vendor/abseil-cpp/absl/base/internal/hardening_test.cc +168 -0
- package/vendor/abseil-cpp/absl/base/internal/iterator_traits.h +2 -2
- package/vendor/abseil-cpp/absl/base/internal/low_level_alloc.cc +6 -0
- package/vendor/abseil-cpp/absl/base/internal/low_level_scheduling.h +77 -15
- package/vendor/abseil-cpp/absl/base/internal/sysinfo.cc +1 -2
- package/vendor/abseil-cpp/absl/base/internal/thread_identity.h +52 -0
- package/vendor/abseil-cpp/absl/base/internal/unscaledcycleclock.h +5 -0
- package/vendor/abseil-cpp/absl/base/macros.h +36 -20
- package/vendor/abseil-cpp/absl/base/nullability.h +4 -3
- package/vendor/abseil-cpp/absl/base/optimization.h +3 -2
- package/vendor/abseil-cpp/absl/base/optimization_test.cc +4 -3
- package/vendor/abseil-cpp/absl/base/options.h +55 -1
- package/vendor/abseil-cpp/absl/base/policy_checks.h +5 -5
- package/vendor/abseil-cpp/absl/base/{internal/throw_delegate.cc → throw_delegate.cc} +9 -7
- package/vendor/abseil-cpp/absl/base/{internal/throw_delegate.h → throw_delegate.h} +4 -14
- package/vendor/abseil-cpp/absl/base/throw_delegate_test.cc +19 -28
- package/vendor/abseil-cpp/absl/cleanup/BUILD.bazel +2 -0
- package/vendor/abseil-cpp/absl/cleanup/CMakeLists.txt +2 -0
- package/vendor/abseil-cpp/absl/cleanup/cleanup.h +3 -2
- package/vendor/abseil-cpp/absl/cleanup/internal/cleanup.h +3 -2
- package/vendor/abseil-cpp/absl/container/BUILD.bazel +19 -7
- package/vendor/abseil-cpp/absl/container/CMakeLists.txt +6 -5
- package/vendor/abseil-cpp/absl/container/btree_benchmark.cc +3 -5
- package/vendor/abseil-cpp/absl/container/btree_set.h +5 -5
- package/vendor/abseil-cpp/absl/container/btree_test.cc +11 -14
- package/vendor/abseil-cpp/absl/container/chunked_queue.h +8 -6
- package/vendor/abseil-cpp/absl/container/chunked_queue_test.cc +5 -5
- package/vendor/abseil-cpp/absl/container/fixed_array.h +14 -13
- package/vendor/abseil-cpp/absl/container/fixed_array_test.cc +3 -3
- package/vendor/abseil-cpp/absl/container/flat_hash_map.h +18 -6
- package/vendor/abseil-cpp/absl/container/flat_hash_map_test.cc +34 -1
- package/vendor/abseil-cpp/absl/container/flat_hash_set.h +21 -7
- package/vendor/abseil-cpp/absl/container/flat_hash_set_test.cc +39 -7
- package/vendor/abseil-cpp/absl/container/inlined_vector.h +29 -29
- package/vendor/abseil-cpp/absl/container/inlined_vector_test.cc +2 -2
- package/vendor/abseil-cpp/absl/container/internal/btree.h +32 -24
- package/vendor/abseil-cpp/absl/container/internal/btree_container.h +16 -17
- package/vendor/abseil-cpp/absl/container/internal/common.h +6 -5
- package/vendor/abseil-cpp/absl/container/internal/common_policy_traits.h +1 -1
- package/vendor/abseil-cpp/absl/container/internal/compressed_tuple.h +16 -16
- package/vendor/abseil-cpp/absl/container/internal/compressed_tuple_test.cc +13 -13
- package/vendor/abseil-cpp/absl/container/internal/container_memory.h +41 -31
- package/vendor/abseil-cpp/absl/container/internal/hash_function_defaults.h +2 -2
- package/vendor/abseil-cpp/absl/container/internal/hash_generator_testing.h +4 -4
- package/vendor/abseil-cpp/absl/container/internal/hash_policy_traits.h +3 -3
- package/vendor/abseil-cpp/absl/container/internal/hashtable_control_bytes.h +27 -19
- package/vendor/abseil-cpp/absl/container/internal/hashtablez_sampler.cc +2 -2
- package/vendor/abseil-cpp/absl/container/internal/hashtablez_sampler.h +0 -17
- package/vendor/abseil-cpp/absl/container/internal/hashtablez_sampler_test.cc +12 -30
- package/vendor/abseil-cpp/absl/container/internal/inlined_vector.h +28 -28
- package/vendor/abseil-cpp/absl/container/internal/layout.h +13 -13
- package/vendor/abseil-cpp/absl/container/internal/layout_test.cc +3 -2
- package/vendor/abseil-cpp/absl/container/internal/raw_hash_map.h +60 -62
- package/vendor/abseil-cpp/absl/container/internal/raw_hash_set.cc +59 -39
- package/vendor/abseil-cpp/absl/container/internal/raw_hash_set.h +619 -326
- package/vendor/abseil-cpp/absl/container/internal/raw_hash_set_benchmark.cc +25 -2
- package/vendor/abseil-cpp/absl/container/internal/raw_hash_set_probe_benchmark.cc +4 -4
- package/vendor/abseil-cpp/absl/container/internal/raw_hash_set_test.cc +575 -159
- package/vendor/abseil-cpp/absl/container/linked_hash_map.h +2 -2
- package/vendor/abseil-cpp/absl/container/node_hash_map.h +27 -15
- package/vendor/abseil-cpp/absl/container/node_hash_map_test.cc +34 -0
- package/vendor/abseil-cpp/absl/container/node_hash_set.h +25 -11
- package/vendor/abseil-cpp/absl/container/node_hash_set_test.cc +39 -7
- package/vendor/abseil-cpp/absl/container/sample_element_size_test.cc +7 -4
- package/vendor/abseil-cpp/absl/crc/BUILD.bazel +0 -1
- package/vendor/abseil-cpp/absl/crc/CMakeLists.txt +2 -3
- package/vendor/abseil-cpp/absl/crc/crc32c_benchmark.cc +2 -1
- package/vendor/abseil-cpp/absl/crc/internal/cpu_detect.cc +6 -6
- package/vendor/abseil-cpp/absl/crc/internal/crc.cc +4 -6
- package/vendor/abseil-cpp/absl/crc/internal/crc32_x86_arm_combined_simd.h +41 -0
- package/vendor/abseil-cpp/absl/crc/internal/crc_internal.h +0 -16
- package/vendor/abseil-cpp/absl/crc/internal/crc_x86_arm_combined.cc +143 -81
- package/vendor/abseil-cpp/absl/debugging/BUILD.bazel +9 -31
- package/vendor/abseil-cpp/absl/debugging/CMakeLists.txt +3 -33
- package/vendor/abseil-cpp/absl/debugging/internal/demangle_rust.h +8 -0
- package/vendor/abseil-cpp/absl/debugging/internal/demangle_test.cc +2 -1
- package/vendor/abseil-cpp/absl/debugging/internal/examine_stack.cc +12 -2
- package/vendor/abseil-cpp/absl/debugging/internal/examine_stack.h +2 -3
- package/vendor/abseil-cpp/absl/debugging/internal/stacktrace_aarch64-inl.inc +11 -0
- package/vendor/abseil-cpp/absl/debugging/internal/stacktrace_emscripten-inl.inc +13 -4
- package/vendor/abseil-cpp/absl/debugging/internal/stacktrace_generic-inl.inc +14 -7
- package/vendor/abseil-cpp/absl/debugging/internal/stacktrace_riscv-inl.inc +4 -0
- package/vendor/abseil-cpp/absl/debugging/internal/symbolize.h +46 -36
- package/vendor/abseil-cpp/absl/debugging/stacktrace.cc +18 -58
- package/vendor/abseil-cpp/absl/debugging/stacktrace.h +5 -48
- package/vendor/abseil-cpp/absl/debugging/stacktrace_test.cc +10 -124
- package/vendor/abseil-cpp/absl/debugging/symbolize.cc +20 -2
- package/vendor/abseil-cpp/absl/debugging/symbolize_elf.inc +58 -106
- package/vendor/abseil-cpp/absl/debugging/symbolize_test.cc +37 -36
- package/vendor/abseil-cpp/absl/debugging/symbolize_unimplemented.inc +4 -4
- package/vendor/abseil-cpp/absl/flags/BUILD.bazel +6 -3
- package/vendor/abseil-cpp/absl/flags/CMakeLists.txt +1 -1
- package/vendor/abseil-cpp/absl/flags/commandlineflag.h +8 -6
- package/vendor/abseil-cpp/absl/flags/commandlineflag_test.cc +1 -1
- package/vendor/abseil-cpp/absl/flags/flag_benchmark.cc +5 -5
- package/vendor/abseil-cpp/absl/flags/flag_test.cc +30 -30
- package/vendor/abseil-cpp/absl/flags/internal/flag.cc +4 -4
- package/vendor/abseil-cpp/absl/flags/internal/flag.h +6 -6
- package/vendor/abseil-cpp/absl/flags/marshalling.h +2 -28
- package/vendor/abseil-cpp/absl/flags/marshalling_test.cc +12 -11
- package/vendor/abseil-cpp/absl/flags/reflection_test.cc +1 -1
- package/vendor/abseil-cpp/absl/functional/BUILD.bazel +26 -1
- package/vendor/abseil-cpp/absl/functional/CMakeLists.txt +29 -1
- package/vendor/abseil-cpp/absl/functional/any_invocable.h +13 -14
- package/vendor/abseil-cpp/absl/functional/any_invocable_test.cc +46 -47
- package/vendor/abseil-cpp/absl/functional/bind_back.h +79 -0
- package/vendor/abseil-cpp/absl/functional/bind_back_test.cc +237 -0
- package/vendor/abseil-cpp/absl/functional/bind_front.h +7 -1
- package/vendor/abseil-cpp/absl/functional/bind_front_test.cc +4 -4
- package/vendor/abseil-cpp/absl/functional/function_ref_test.cc +2 -2
- package/vendor/abseil-cpp/absl/functional/internal/any_invocable.h +28 -28
- package/vendor/abseil-cpp/absl/functional/internal/back_binder.h +95 -0
- package/vendor/abseil-cpp/absl/functional/internal/front_binder.h +4 -4
- package/vendor/abseil-cpp/absl/functional/internal/function_ref.h +2 -2
- package/vendor/abseil-cpp/absl/functional/overload_test.cc +13 -13
- package/vendor/abseil-cpp/absl/hash/BUILD.bazel +1 -2
- package/vendor/abseil-cpp/absl/hash/CMakeLists.txt +1 -2
- package/vendor/abseil-cpp/absl/hash/hash.h +1 -1
- package/vendor/abseil-cpp/absl/hash/hash_test.cc +14 -20
- package/vendor/abseil-cpp/absl/hash/hash_testing.h +11 -9
- package/vendor/abseil-cpp/absl/hash/internal/city.cc +39 -51
- package/vendor/abseil-cpp/absl/hash/internal/hash.cc +165 -47
- package/vendor/abseil-cpp/absl/hash/internal/hash.h +86 -27
- package/vendor/abseil-cpp/absl/hash/internal/low_level_hash_test.cc +36 -1
- package/vendor/abseil-cpp/absl/hash/internal/spy_hash_state.h +8 -5
- package/vendor/abseil-cpp/absl/log/BUILD.bazel +5 -2
- package/vendor/abseil-cpp/absl/log/CMakeLists.txt +5 -3
- package/vendor/abseil-cpp/absl/log/absl_vlog_is_on.h +0 -2
- package/vendor/abseil-cpp/absl/log/internal/BUILD.bazel +15 -1
- package/vendor/abseil-cpp/absl/log/internal/log_message.cc +5 -4
- package/vendor/abseil-cpp/absl/log/internal/log_message.h +14 -0
- package/vendor/abseil-cpp/absl/log/internal/nullstream.h +1 -1
- package/vendor/abseil-cpp/absl/log/internal/proto.cc +13 -0
- package/vendor/abseil-cpp/absl/log/internal/structured_proto.cc +5 -5
- package/vendor/abseil-cpp/absl/log/internal/structured_proto.h +6 -5
- package/vendor/abseil-cpp/absl/log/internal/structured_proto_test.cc +3 -3
- package/vendor/abseil-cpp/absl/log/internal/vlog_config.cc +2 -2
- package/vendor/abseil-cpp/absl/log/internal/vlog_config_benchmark.cc +3 -3
- package/vendor/abseil-cpp/absl/log/log_format_test.cc +19 -2
- package/vendor/abseil-cpp/absl/log/log_modifier_methods_test.cc +18 -0
- package/vendor/abseil-cpp/absl/log/log_streamer.h +29 -2
- package/vendor/abseil-cpp/absl/log/log_streamer_test.cc +18 -0
- package/vendor/abseil-cpp/absl/log/scoped_mock_log_test.cc +1 -1
- package/vendor/abseil-cpp/absl/log/vlog_is_on.h +0 -2
- package/vendor/abseil-cpp/absl/log/vlog_is_on_test.cc +6 -5
- package/vendor/abseil-cpp/absl/memory/memory.h +55 -5
- package/vendor/abseil-cpp/absl/memory/memory_test.cc +55 -1
- package/vendor/abseil-cpp/absl/meta/BUILD.bazel +2 -0
- package/vendor/abseil-cpp/absl/meta/internal/requires.h +1 -1
- package/vendor/abseil-cpp/absl/meta/type_traits.h +119 -55
- package/vendor/abseil-cpp/absl/meta/type_traits_test.cc +7 -7
- package/vendor/abseil-cpp/absl/numeric/int128_test.cc +6 -6
- package/vendor/abseil-cpp/absl/profiling/BUILD.bazel +3 -1
- package/vendor/abseil-cpp/absl/profiling/hashtable.cc +0 -4
- package/vendor/abseil-cpp/absl/profiling/internal/profile_builder.cc +32 -33
- package/vendor/abseil-cpp/absl/profiling/internal/profile_builder.h +25 -2
- package/vendor/abseil-cpp/absl/profiling/internal/sample_recorder_test.cc +8 -5
- package/vendor/abseil-cpp/absl/random/BUILD.bazel +13 -1
- package/vendor/abseil-cpp/absl/random/CMakeLists.txt +23 -2
- package/vendor/abseil-cpp/absl/random/benchmarks.cc +1 -1
- package/vendor/abseil-cpp/absl/random/beta_distribution.h +2 -2
- package/vendor/abseil-cpp/absl/random/bit_gen_ref.h +26 -53
- package/vendor/abseil-cpp/absl/random/bit_gen_ref_test.cc +43 -0
- package/vendor/abseil-cpp/absl/random/discrete_distribution.h +1 -1
- package/vendor/abseil-cpp/absl/random/distributions.h +17 -17
- package/vendor/abseil-cpp/absl/random/distributions_test.cc +4 -4
- package/vendor/abseil-cpp/absl/random/exponential_distribution.h +1 -1
- package/vendor/abseil-cpp/absl/random/internal/BUILD.bazel +4 -2
- package/vendor/abseil-cpp/absl/random/internal/distribution_caller.h +8 -21
- package/vendor/abseil-cpp/absl/random/internal/fast_uniform_bits.h +1 -1
- package/vendor/abseil-cpp/absl/random/internal/generate_real.h +1 -1
- package/vendor/abseil-cpp/absl/random/internal/iostream_state_saver.h +2 -2
- package/vendor/abseil-cpp/absl/random/internal/iostream_state_saver_test.cc +3 -2
- package/vendor/abseil-cpp/absl/random/internal/mock_helpers.h +14 -40
- package/vendor/abseil-cpp/absl/random/internal/nonsecure_base.h +2 -2
- package/vendor/abseil-cpp/absl/random/internal/nonsecure_base_test.cc +2 -2
- package/vendor/abseil-cpp/absl/random/internal/pcg_engine.h +6 -6
- package/vendor/abseil-cpp/absl/random/internal/pcg_engine_test.cc +3 -2
- package/vendor/abseil-cpp/absl/random/internal/randen_detect.cc +6 -6
- package/vendor/abseil-cpp/absl/random/internal/randen_engine.h +2 -2
- package/vendor/abseil-cpp/absl/random/internal/randen_engine_test.cc +3 -2
- package/vendor/abseil-cpp/absl/random/internal/randen_test.cc +3 -2
- package/vendor/abseil-cpp/absl/random/internal/salted_seed_seq.h +6 -5
- package/vendor/abseil-cpp/absl/random/internal/seed_material.cc +4 -4
- package/vendor/abseil-cpp/absl/random/internal/seed_material.h +2 -1
- package/vendor/abseil-cpp/absl/random/internal/traits.h +21 -0
- package/vendor/abseil-cpp/absl/random/internal/traits_test.cc +5 -0
- package/vendor/abseil-cpp/absl/random/internal/uniform_helper.h +23 -23
- package/vendor/abseil-cpp/absl/random/internal/uniform_helper_test.cc +2 -1
- package/vendor/abseil-cpp/absl/random/mocking_access.h +74 -0
- package/vendor/abseil-cpp/absl/random/mocking_bit_gen.h +9 -19
- package/vendor/abseil-cpp/absl/random/uniform_real_distribution.h +1 -1
- package/vendor/abseil-cpp/absl/status/BUILD.bazel +81 -0
- package/vendor/abseil-cpp/absl/status/CMakeLists.txt +91 -0
- package/vendor/abseil-cpp/absl/status/internal/status_internal.cc +63 -18
- package/vendor/abseil-cpp/absl/status/internal/status_internal.h +26 -2
- package/vendor/abseil-cpp/absl/status/internal/status_matchers.h +22 -8
- package/vendor/abseil-cpp/absl/status/internal/statusor_internal.h +43 -43
- package/vendor/abseil-cpp/absl/status/status.cc +62 -70
- package/vendor/abseil-cpp/absl/status/status.h +249 -23
- package/vendor/abseil-cpp/absl/status/status_benchmark.cc +12 -0
- package/vendor/abseil-cpp/absl/status/status_builder.cc +196 -0
- package/vendor/abseil-cpp/absl/status/status_builder.h +978 -0
- package/vendor/abseil-cpp/absl/status/status_builder_test.cc +380 -0
- package/vendor/abseil-cpp/absl/status/status_macros.h +484 -0
- package/vendor/abseil-cpp/absl/status/status_macros_test.cc +634 -0
- package/vendor/abseil-cpp/absl/status/status_matchers.h +2 -1
- package/vendor/abseil-cpp/absl/status/status_matchers_test.cc +3 -4
- package/vendor/abseil-cpp/absl/status/status_payload_printer.h +3 -2
- package/vendor/abseil-cpp/absl/status/status_test.cc +443 -13
- package/vendor/abseil-cpp/absl/status/statusor.h +69 -36
- package/vendor/abseil-cpp/absl/status/statusor_test.cc +132 -35
- package/vendor/abseil-cpp/absl/strings/BUILD.bazel +42 -7
- package/vendor/abseil-cpp/absl/strings/CMakeLists.txt +33 -4
- package/vendor/abseil-cpp/absl/strings/ascii.h +1 -2
- package/vendor/abseil-cpp/absl/strings/atod_manual_test.cc +5 -5
- package/vendor/abseil-cpp/absl/strings/cord.cc +26 -7
- package/vendor/abseil-cpp/absl/strings/cord.h +23 -13
- package/vendor/abseil-cpp/absl/strings/cord_buffer.h +4 -2
- package/vendor/abseil-cpp/absl/strings/cord_test.cc +85 -9
- package/vendor/abseil-cpp/absl/strings/escaping.cc +183 -35
- package/vendor/abseil-cpp/absl/strings/escaping.h +12 -2
- package/vendor/abseil-cpp/absl/strings/escaping_benchmark.cc +1 -3
- package/vendor/abseil-cpp/absl/strings/escaping_test.cc +22 -18
- package/vendor/abseil-cpp/absl/strings/has_absl_stringify_test.cc +2 -2
- package/vendor/abseil-cpp/absl/strings/has_ostream_operator_test.cc +2 -2
- package/vendor/abseil-cpp/absl/strings/internal/append_and_overwrite.h +10 -10
- package/vendor/abseil-cpp/absl/strings/internal/cordz_sample_token_test.cc +1 -1
- package/vendor/abseil-cpp/absl/strings/internal/damerau_levenshtein_distance.cc +6 -0
- package/vendor/abseil-cpp/absl/strings/internal/damerau_levenshtein_distance.h +1 -0
- package/vendor/abseil-cpp/absl/strings/internal/escaping.cc +0 -141
- package/vendor/abseil-cpp/absl/strings/internal/escaping.h +2 -26
- package/vendor/abseil-cpp/absl/strings/internal/generic_printer_internal.h +23 -2
- package/vendor/abseil-cpp/absl/strings/internal/generic_printer_test.cc +6 -2
- package/vendor/abseil-cpp/absl/strings/internal/resize_uninitialized.h +31 -24
- package/vendor/abseil-cpp/absl/strings/internal/resize_uninitialized_test.cc +16 -41
- package/vendor/abseil-cpp/absl/strings/internal/stl_type_traits.h +39 -39
- package/vendor/abseil-cpp/absl/strings/internal/str_format/arg.h +14 -22
- package/vendor/abseil-cpp/absl/strings/internal/str_format/bind.h +2 -2
- package/vendor/abseil-cpp/absl/strings/internal/str_format/convert_test.cc +12 -20
- package/vendor/abseil-cpp/absl/strings/internal/str_format/float_conversion.cc +510 -307
- package/vendor/abseil-cpp/absl/strings/internal/str_join_internal.h +0 -1
- package/vendor/abseil-cpp/absl/strings/internal/str_split_internal.h +9 -10
- package/vendor/abseil-cpp/absl/strings/internal/string_constant_test.cc +6 -5
- package/vendor/abseil-cpp/absl/strings/internal/stringify_sink.h +12 -0
- package/vendor/abseil-cpp/absl/strings/internal/stringify_stream.h +119 -0
- package/vendor/abseil-cpp/absl/strings/internal/stringify_stream_test.cc +111 -0
- package/vendor/abseil-cpp/absl/strings/numbers.cc +406 -0
- package/vendor/abseil-cpp/absl/strings/numbers.h +4 -0
- package/vendor/abseil-cpp/absl/strings/numbers_test.cc +33 -0
- package/vendor/abseil-cpp/absl/strings/resize_and_overwrite.h +10 -6
- package/vendor/abseil-cpp/absl/strings/str_cat.h +36 -1
- package/vendor/abseil-cpp/absl/strings/str_cat_benchmark.cc +1 -2
- package/vendor/abseil-cpp/absl/strings/str_cat_test.cc +28 -0
- package/vendor/abseil-cpp/absl/strings/str_join_test.cc +4 -4
- package/vendor/abseil-cpp/absl/strings/str_split.h +11 -6
- package/vendor/abseil-cpp/absl/strings/str_split_test.cc +13 -0
- package/vendor/abseil-cpp/absl/strings/substitute.h +2 -2
- package/vendor/abseil-cpp/absl/synchronization/BUILD.bazel +3 -0
- package/vendor/abseil-cpp/absl/synchronization/internal/create_thread_identity.cc +21 -0
- package/vendor/abseil-cpp/absl/synchronization/internal/per_thread_sem.h +5 -0
- package/vendor/abseil-cpp/absl/synchronization/mutex.cc +13 -0
- package/vendor/abseil-cpp/absl/synchronization/mutex.h +32 -2
- package/vendor/abseil-cpp/absl/synchronization/mutex_test.cc +17 -3
- package/vendor/abseil-cpp/absl/time/BUILD.bazel +80 -0
- package/vendor/abseil-cpp/absl/time/CMakeLists.txt +73 -0
- package/vendor/abseil-cpp/absl/time/clock.h +3 -0
- package/vendor/abseil-cpp/absl/time/clock_interface.cc +71 -0
- package/vendor/abseil-cpp/absl/time/clock_interface.h +93 -0
- package/vendor/abseil-cpp/absl/time/clock_interface_test.cc +128 -0
- package/vendor/abseil-cpp/absl/time/format.cc +3 -10
- package/vendor/abseil-cpp/absl/time/format_test.cc +12 -0
- package/vendor/abseil-cpp/absl/time/internal/cctz/src/time_zone_format.cc +90 -89
- package/vendor/abseil-cpp/absl/time/internal/cctz/src/time_zone_format_test.cc +80 -5
- package/vendor/abseil-cpp/absl/time/internal/cctz/src/time_zone_name_win.cc +1 -2
- package/vendor/abseil-cpp/absl/time/internal/cctz/src/tzfile.h +10 -15
- package/vendor/abseil-cpp/absl/time/internal/cctz/testdata/version +1 -1
- package/vendor/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/Vancouver +0 -0
- package/vendor/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Asia/Ho_Chi_Minh +0 -0
- package/vendor/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Asia/Phnom_Penh +0 -0
- package/vendor/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Asia/Saigon +0 -0
- package/vendor/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Asia/Tbilisi +0 -0
- package/vendor/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Asia/Vientiane +0 -0
- package/vendor/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Canada/Pacific +0 -0
- package/vendor/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Europe/Chisinau +0 -0
- package/vendor/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Europe/Tiraspol +0 -0
- package/vendor/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/zone1970.tab +1 -1
- package/vendor/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/zonenow.tab +3 -3
- package/vendor/abseil-cpp/absl/time/simulated_clock.cc +225 -0
- package/vendor/abseil-cpp/absl/time/simulated_clock.h +109 -0
- package/vendor/abseil-cpp/absl/time/simulated_clock_test.cc +614 -0
- package/vendor/abseil-cpp/absl/types/BUILD.bazel +116 -0
- package/vendor/abseil-cpp/absl/types/CMakeLists.txt +100 -0
- package/vendor/abseil-cpp/absl/types/any.h +26 -4
- package/vendor/abseil-cpp/absl/types/any_span.h +1067 -0
- package/vendor/abseil-cpp/absl/types/any_span_benchmark.cc +258 -0
- package/vendor/abseil-cpp/absl/types/any_span_test.cc +1210 -0
- package/vendor/abseil-cpp/absl/types/compare.h +4 -4
- package/vendor/abseil-cpp/absl/types/internal/any_span.h +477 -0
- package/vendor/abseil-cpp/absl/types/internal/span.h +5 -6
- package/vendor/abseil-cpp/absl/types/optional.h +30 -3
- package/vendor/abseil-cpp/absl/types/optional_ref.h +295 -0
- package/vendor/abseil-cpp/absl/types/optional_ref_test.cc +370 -0
- package/vendor/abseil-cpp/absl/types/source_location.cc +18 -0
- package/vendor/abseil-cpp/absl/types/source_location.h +172 -0
- package/vendor/abseil-cpp/absl/types/source_location_test.cc +139 -0
- package/vendor/abseil-cpp/absl/types/span.h +19 -23
- package/vendor/abseil-cpp/absl/types/variant.h +75 -18
- package/vendor/abseil-cpp/absl/types/variant_test.cc +23 -23
- package/vendor/abseil-cpp/absl/utility/BUILD.bazel +1 -0
- package/vendor/abseil-cpp/absl/utility/CMakeLists.txt +1 -0
- package/vendor/abseil-cpp/absl/utility/utility.h +99 -16
- package/vendor/abseil-cpp/ci/absl_alternate_options.h +2 -0
- package/vendor/abseil-cpp/ci/linux_arm_clang-latest_libcxx_bazel.sh +10 -4
- package/vendor/abseil-cpp/ci/linux_clang-latest_libcxx_asan_bazel.sh +13 -6
- package/vendor/abseil-cpp/ci/linux_clang-latest_libcxx_bazel.sh +10 -4
- package/vendor/abseil-cpp/ci/linux_clang-latest_libcxx_tsan_bazel.sh +12 -5
- package/vendor/abseil-cpp/ci/linux_clang-latest_libstdcxx_bazel.sh +9 -2
- package/vendor/abseil-cpp/ci/linux_docker_containers.sh +4 -4
- package/vendor/abseil-cpp/ci/linux_gcc-floor_libstdcxx_bazel.sh +10 -3
- package/vendor/abseil-cpp/ci/linux_gcc-latest_libstdcxx_bazel.sh +8 -2
- package/vendor/abseil-cpp/ci/macos_xcode_bazel.sh +4 -3
- package/vendor/abseil-cpp/ci/macos_xcode_cmake.sh +2 -2
- package/vendor/abseil-cpp/ci/windows_clangcl_bazel.bat +1 -1
- package/vendor/abseil-cpp/ci/windows_msvc_bazel.bat +1 -1
- package/vendor/abseil-cpp/absl/debugging/internal/borrowed_fixup_buffer.cc +0 -118
- package/vendor/abseil-cpp/absl/debugging/internal/borrowed_fixup_buffer.h +0 -71
- package/vendor/abseil-cpp/absl/debugging/internal/borrowed_fixup_buffer_test.cc +0 -97
package/lib/wrapped_re2.h
CHANGED
|
@@ -12,18 +12,18 @@ struct StrVal
|
|
|
12
12
|
char *data;
|
|
13
13
|
size_t size, length;
|
|
14
14
|
size_t index, byteIndex;
|
|
15
|
-
bool isBuffer, isValidIndex, isBad;
|
|
15
|
+
bool isBuffer, isValidIndex, isBad, isAscii;
|
|
16
16
|
|
|
17
|
-
StrVal() : data(NULL), size(0), length(0), index(0), byteIndex(0), isBuffer(false), isValidIndex(false), isBad(false) {}
|
|
17
|
+
StrVal() : data(NULL), size(0), length(0), index(0), byteIndex(0), isBuffer(false), isValidIndex(false), isBad(false), isAscii(false) {}
|
|
18
18
|
|
|
19
19
|
operator re2::StringPiece() const { return re2::StringPiece(data, size); }
|
|
20
20
|
|
|
21
21
|
void setIndex(size_t newIndex = 0);
|
|
22
|
-
void reset(const v8::Local<v8::Value> &arg, size_t size, size_t length, size_t newIndex = 0, bool buffer = false);
|
|
22
|
+
void reset(const v8::Local<v8::Value> &arg, size_t size, size_t length, size_t newIndex = 0, bool buffer = false, bool ascii = false);
|
|
23
23
|
|
|
24
24
|
void clear()
|
|
25
25
|
{
|
|
26
|
-
isBad = isBuffer = isValidIndex = false;
|
|
26
|
+
isBad = isBuffer = isValidIndex = isAscii = false;
|
|
27
27
|
size = length = index = byteIndex = 0;
|
|
28
28
|
data = nullptr;
|
|
29
29
|
}
|
|
@@ -220,11 +220,47 @@ inline size_t getUtf16Length(const char *from, const char *to)
|
|
|
220
220
|
return n;
|
|
221
221
|
}
|
|
222
222
|
|
|
223
|
+
// ASCII (and buffer) offsets are byte-identical to UTF-16 offsets, so the
|
|
224
|
+
// linear UTF-8 scan can be skipped entirely for those inputs.
|
|
225
|
+
inline size_t toUtf16Index(bool isAscii, const char *from, const char *to)
|
|
226
|
+
{
|
|
227
|
+
return isAscii ? static_cast<size_t>(to - from) : getUtf16Length(from, to);
|
|
228
|
+
}
|
|
229
|
+
|
|
223
230
|
inline size_t getUtf8CharSize(char ch)
|
|
224
231
|
{
|
|
225
232
|
return ((0xE5000000 >> ((ch >> 3) & 0x1E)) & 3) + 1;
|
|
226
233
|
}
|
|
227
234
|
|
|
235
|
+
// V8 13.4 introduced Utf8LengthV2 / WriteUtf8V2; V8 14.6 removed the bare
|
|
236
|
+
// Utf8Length / WriteUtf8. On older V8 (Node 22) only the bare forms exist.
|
|
237
|
+
#if defined(V8_MAJOR_VERSION) && (V8_MAJOR_VERSION > 13 || \
|
|
238
|
+
(V8_MAJOR_VERSION == 13 && defined(V8_MINOR_VERSION) && V8_MINOR_VERSION >= 4))
|
|
239
|
+
|
|
240
|
+
inline size_t utf8Length(v8::Local<v8::String> s, v8::Isolate *isolate)
|
|
241
|
+
{
|
|
242
|
+
return s->Utf8LengthV2(isolate);
|
|
243
|
+
}
|
|
244
|
+
|
|
245
|
+
inline void writeUtf8(v8::Local<v8::String> s, v8::Isolate *isolate, char *buffer, size_t capacity)
|
|
246
|
+
{
|
|
247
|
+
s->WriteUtf8V2(isolate, buffer, capacity);
|
|
248
|
+
}
|
|
249
|
+
|
|
250
|
+
#else
|
|
251
|
+
|
|
252
|
+
inline size_t utf8Length(v8::Local<v8::String> s, v8::Isolate *isolate)
|
|
253
|
+
{
|
|
254
|
+
return static_cast<size_t>(s->Utf8Length(isolate));
|
|
255
|
+
}
|
|
256
|
+
|
|
257
|
+
inline void writeUtf8(v8::Local<v8::String> s, v8::Isolate *isolate, char *buffer, size_t capacity)
|
|
258
|
+
{
|
|
259
|
+
s->WriteUtf8(isolate, buffer, static_cast<int>(capacity));
|
|
260
|
+
}
|
|
261
|
+
|
|
262
|
+
#endif
|
|
263
|
+
|
|
228
264
|
inline size_t getUtf16PositionByCounter(const char *data, size_t from, size_t n)
|
|
229
265
|
{
|
|
230
266
|
for (; n > 0; --n)
|
package/lib/wrapped_re2_set.h
CHANGED
|
@@ -22,7 +22,7 @@ public:
|
|
|
22
22
|
}
|
|
23
23
|
|
|
24
24
|
private:
|
|
25
|
-
WrappedRE2Set(const re2::RE2::Options &options, re2::RE2::Anchor anchor, const std::string &flags) : set(options, anchor), flags(flags), anchor(anchor) {}
|
|
25
|
+
WrappedRE2Set(const re2::RE2::Options &options, re2::RE2::Anchor anchor, const std::string &flags) : set(options, anchor), flags(flags), anchor(anchor), maxMem(options.max_mem()) {}
|
|
26
26
|
|
|
27
27
|
static NAN_METHOD(New);
|
|
28
28
|
static NAN_METHOD(Test);
|
|
@@ -34,11 +34,13 @@ private:
|
|
|
34
34
|
static NAN_GETTER(GetSource);
|
|
35
35
|
static NAN_GETTER(GetSize);
|
|
36
36
|
static NAN_GETTER(GetAnchor);
|
|
37
|
+
static NAN_GETTER(GetMaxMem);
|
|
37
38
|
|
|
38
39
|
re2::RE2::Set set;
|
|
39
40
|
std::vector<std::string> sources;
|
|
40
41
|
std::string combinedSource;
|
|
41
42
|
std::string flags;
|
|
42
43
|
re2::RE2::Anchor anchor;
|
|
44
|
+
int64_t maxMem;
|
|
43
45
|
};
|
|
44
46
|
|
package/llms-full.txt
ADDED
|
@@ -0,0 +1,497 @@
|
|
|
1
|
+
# node-re2
|
|
2
|
+
|
|
3
|
+
> Node.js bindings for RE2: a fast, safe alternative to backtracking regular expression engines. Drop-in RegExp replacement that prevents ReDoS (Regular Expression Denial of Service). Works with strings and Buffers. C++ native addon built with node-gyp and nan.
|
|
4
|
+
|
|
5
|
+
- Drop-in replacement for RegExp with linear-time matching guarantee
|
|
6
|
+
- Prevents ReDoS by disallowing backreferences and lookahead assertions
|
|
7
|
+
- Full Unicode mode (always on)
|
|
8
|
+
- Buffer support for high-performance binary/UTF-8 processing
|
|
9
|
+
- Named capture groups
|
|
10
|
+
- Symbol-based methods (Symbol.match, Symbol.search, Symbol.replace, Symbol.split, Symbol.matchAll)
|
|
11
|
+
- RE2.Set for multi-pattern matching
|
|
12
|
+
- Prebuilt binaries for Linux, macOS, Windows (x64 + arm64)
|
|
13
|
+
- TypeScript declarations included
|
|
14
|
+
|
|
15
|
+
## Install
|
|
16
|
+
|
|
17
|
+
```bash
|
|
18
|
+
npm install re2
|
|
19
|
+
```
|
|
20
|
+
|
|
21
|
+
Prebuilt native binaries are downloaded automatically. Falls back to building from source via node-gyp if no prebuilt is available.
|
|
22
|
+
|
|
23
|
+
Both paths run in re2's install script. Under npm 12+ defaults (July 2026), install scripts require approval in the consuming project's `package.json`: run `npm pkg set allowScripts.re2=true --json` before `npm install re2`, otherwise the install fails with `ESTRICTALLOWSCRIPTS`. npm 11.16+ runs the script but prints a warning until approved.
|
|
24
|
+
|
|
25
|
+
## Quick start
|
|
26
|
+
|
|
27
|
+
```js
|
|
28
|
+
const RE2 = require('re2');
|
|
29
|
+
|
|
30
|
+
// Create and use like RegExp
|
|
31
|
+
const re = new RE2('a(b*)', 'i');
|
|
32
|
+
const result = re.exec('aBbC');
|
|
33
|
+
console.log(result[0]); // "aBb"
|
|
34
|
+
console.log(result[1]); // "Bb"
|
|
35
|
+
|
|
36
|
+
// Works with ES6 string methods
|
|
37
|
+
'hello world'.match(new RE2('\\w+', 'g')); // ['hello', 'world']
|
|
38
|
+
'hello world'.replace(new RE2('world'), 'RE2'); // 'hello RE2'
|
|
39
|
+
```
|
|
40
|
+
|
|
41
|
+
## Importing
|
|
42
|
+
|
|
43
|
+
```js
|
|
44
|
+
// CommonJS
|
|
45
|
+
const RE2 = require('re2');
|
|
46
|
+
|
|
47
|
+
// ESM
|
|
48
|
+
import { RE2 } from 're2';
|
|
49
|
+
```
|
|
50
|
+
|
|
51
|
+
## Construction
|
|
52
|
+
|
|
53
|
+
`new RE2(pattern[, flags])` or `RE2(pattern[, flags])` (factory mode).
|
|
54
|
+
|
|
55
|
+
Pattern can be:
|
|
56
|
+
- **String**: `new RE2('\\d+')`
|
|
57
|
+
- **String with flags**: `new RE2('\\d+', 'gi')`
|
|
58
|
+
- **RegExp**: `new RE2(/ab*/ig)` — copies pattern and flags.
|
|
59
|
+
- **RE2**: `new RE2(existingRE2)` — copies pattern and flags.
|
|
60
|
+
- **Buffer**: `new RE2(Buffer.from('pattern'))` — pattern from UTF-8 buffer.
|
|
61
|
+
|
|
62
|
+
Supported flags:
|
|
63
|
+
- `g` — global (find all matches)
|
|
64
|
+
- `i` — ignoreCase
|
|
65
|
+
- `m` — multiline (`^`/`$` match line boundaries)
|
|
66
|
+
- `s` — dotAll (`.` matches `\n`)
|
|
67
|
+
- `u` — unicode (always on, added implicitly)
|
|
68
|
+
- `y` — sticky (match at lastIndex only)
|
|
69
|
+
- `d` — hasIndices (include index info for capture groups)
|
|
70
|
+
|
|
71
|
+
Invalid patterns throw `SyntaxError`. Patterns with backreferences or lookahead throw `SyntaxError`.
|
|
72
|
+
|
|
73
|
+
## Properties
|
|
74
|
+
|
|
75
|
+
### Instance properties
|
|
76
|
+
|
|
77
|
+
- `re.source` (string) — the pattern string, escaped for use in `new RE2(re.source)` or `new RegExp(re.source)`.
|
|
78
|
+
- `re.flags` (string) — the flags string (e.g., `'giu'`).
|
|
79
|
+
- `re.lastIndex` (number) — the index at which to start the next match (used with `g` or `y` flags).
|
|
80
|
+
- `re.global` (boolean) — whether the `g` flag is set.
|
|
81
|
+
- `re.ignoreCase` (boolean) — whether the `i` flag is set.
|
|
82
|
+
- `re.multiline` (boolean) — whether the `m` flag is set.
|
|
83
|
+
- `re.dotAll` (boolean) — whether the `s` flag is set.
|
|
84
|
+
- `re.unicode` (boolean) — always `true` (RE2 always operates in Unicode mode).
|
|
85
|
+
- `re.sticky` (boolean) — whether the `y` flag is set.
|
|
86
|
+
- `re.hasIndices` (boolean) — whether the `d` flag is set.
|
|
87
|
+
- `re.internalSource` (string) — the RE2-translated pattern (for debugging; may differ from `source`).
|
|
88
|
+
|
|
89
|
+
### Static properties
|
|
90
|
+
|
|
91
|
+
- `RE2.unicodeWarningLevel` (string) — controls behavior when a non-Unicode regexp is created:
|
|
92
|
+
- `'nothing'` (default) — silently add `u` flag.
|
|
93
|
+
- `'warnOnce'` — warn once, then silently add `u`. Assigning resets the one-time flag.
|
|
94
|
+
- `'warn'` — warn every time.
|
|
95
|
+
- `'throw'` — throw `SyntaxError` every time.
|
|
96
|
+
|
|
97
|
+
## RegExp methods
|
|
98
|
+
|
|
99
|
+
### re.exec(str)
|
|
100
|
+
|
|
101
|
+
Executes a search for a match. Returns a result array or `null`.
|
|
102
|
+
|
|
103
|
+
```js
|
|
104
|
+
const re = new RE2('a(b+)', 'g');
|
|
105
|
+
const result = re.exec('abbc abbc');
|
|
106
|
+
// result[0] === 'abb'
|
|
107
|
+
// result[1] === 'bb'
|
|
108
|
+
// result.index === 0
|
|
109
|
+
// result.input === 'abbc abbc'
|
|
110
|
+
// re.lastIndex === 3
|
|
111
|
+
```
|
|
112
|
+
|
|
113
|
+
With `d` flag (hasIndices), result has `.indices` property with `[start, end]` pairs for each group.
|
|
114
|
+
|
|
115
|
+
With `g` or `y` flag, advances `lastIndex`. Call repeatedly to iterate matches.
|
|
116
|
+
|
|
117
|
+
### re.test(str)
|
|
118
|
+
|
|
119
|
+
Returns `true` if the pattern matches, `false` otherwise.
|
|
120
|
+
|
|
121
|
+
```js
|
|
122
|
+
new RE2('\\d+').test('abc123'); // true
|
|
123
|
+
new RE2('\\d+').test('abcdef'); // false
|
|
124
|
+
```
|
|
125
|
+
|
|
126
|
+
With `g` or `y` flag, advances `lastIndex`.
|
|
127
|
+
|
|
128
|
+
### re.toString()
|
|
129
|
+
|
|
130
|
+
Returns `'/pattern/flags'` string representation.
|
|
131
|
+
|
|
132
|
+
```js
|
|
133
|
+
new RE2('abc', 'gi').toString(); // '/abc/giu'
|
|
134
|
+
```
|
|
135
|
+
|
|
136
|
+
## String methods (via Symbol)
|
|
137
|
+
|
|
138
|
+
RE2 instances implement well-known symbols, so they work directly with ES6 string methods:
|
|
139
|
+
|
|
140
|
+
### str.match(re) / re[Symbol.match](str)
|
|
141
|
+
|
|
142
|
+
```js
|
|
143
|
+
'test 123 test 456'.match(new RE2('\\d+', 'g')); // ['123', '456']
|
|
144
|
+
'test 123'.match(new RE2('(\\d+)')); // ['123', '123', index: 5, input: 'test 123']
|
|
145
|
+
```
|
|
146
|
+
|
|
147
|
+
### str.matchAll(re) / re[Symbol.matchAll](str)
|
|
148
|
+
|
|
149
|
+
Returns an iterator of all matches (requires `g` flag).
|
|
150
|
+
|
|
151
|
+
```js
|
|
152
|
+
const re = new RE2('\\d+', 'g');
|
|
153
|
+
for (const m of '1a2b3c'.matchAll(re)) {
|
|
154
|
+
console.log(m[0]); // '1', '2', '3'
|
|
155
|
+
}
|
|
156
|
+
```
|
|
157
|
+
|
|
158
|
+
### str.search(re) / re[Symbol.search](str)
|
|
159
|
+
|
|
160
|
+
Returns the index of the first match, or `-1`.
|
|
161
|
+
|
|
162
|
+
```js
|
|
163
|
+
'hello world'.search(new RE2('world')); // 6
|
|
164
|
+
```
|
|
165
|
+
|
|
166
|
+
### str.replace(re, replacement) / re[Symbol.replace](str, replacement)
|
|
167
|
+
|
|
168
|
+
Returns a new string with matches replaced.
|
|
169
|
+
|
|
170
|
+
```js
|
|
171
|
+
'aabba'.replace(new RE2('b', 'g'), 'c'); // 'aacca'
|
|
172
|
+
```
|
|
173
|
+
|
|
174
|
+
Replacement string supports:
|
|
175
|
+
- `$1`, `$2`, ... — numbered capture groups.
|
|
176
|
+
- `$<name>` — named capture groups.
|
|
177
|
+
- `$&` — the matched substring.
|
|
178
|
+
- `` $` `` — portion before the match.
|
|
179
|
+
- `$'` — portion after the match.
|
|
180
|
+
- `$$` — literal `$`.
|
|
181
|
+
|
|
182
|
+
Replacement function receives `(match, ...groups, offset, input)`:
|
|
183
|
+
|
|
184
|
+
```js
|
|
185
|
+
'abc'.replace(new RE2('(b)'), (match, g1, offset) => `[${g1}@${offset}]`);
|
|
186
|
+
// 'a[b@1]c'
|
|
187
|
+
```
|
|
188
|
+
|
|
189
|
+
### str.split(re[, limit]) / re[Symbol.split](str[, limit])
|
|
190
|
+
|
|
191
|
+
Splits string by pattern.
|
|
192
|
+
|
|
193
|
+
```js
|
|
194
|
+
'a1b2c3'.split(new RE2('\\d')); // ['a', 'b', 'c', '']
|
|
195
|
+
'a1b2c3'.split(new RE2('\\d'), 2); // ['a', 'b']
|
|
196
|
+
```
|
|
197
|
+
|
|
198
|
+
## String methods (direct)
|
|
199
|
+
|
|
200
|
+
These are convenience methods on the RE2 instance with swapped argument order:
|
|
201
|
+
|
|
202
|
+
- `re.match(str)` — equivalent to `str.match(re)`.
|
|
203
|
+
- `re.search(str)` — equivalent to `str.search(re)`.
|
|
204
|
+
- `re.replace(str, replacement)` — equivalent to `str.replace(re, replacement)`.
|
|
205
|
+
- `re.split(str[, limit])` — equivalent to `str.split(re, limit)`.
|
|
206
|
+
|
|
207
|
+
```js
|
|
208
|
+
const re = new RE2('\\d+', 'g');
|
|
209
|
+
re.match('test 123 test 456'); // ['123', '456']
|
|
210
|
+
re.search('test 123'); // 5
|
|
211
|
+
re.replace('test 1 and 2', 'N'); // 'test N and N' (global replaces all)
|
|
212
|
+
re.split('a1b2c'); // ['a', 'b', 'c']
|
|
213
|
+
```
|
|
214
|
+
|
|
215
|
+
## Buffer support
|
|
216
|
+
|
|
217
|
+
All methods accept Node.js Buffers (UTF-8) instead of strings. When given Buffer input, they return Buffer output.
|
|
218
|
+
|
|
219
|
+
```js
|
|
220
|
+
const re = new RE2('матч', 'g');
|
|
221
|
+
const buf = Buffer.from('тест матч тест');
|
|
222
|
+
const result = re.exec(buf);
|
|
223
|
+
// result[0] is a Buffer containing 'матч' in UTF-8
|
|
224
|
+
// result.index is in bytes (not characters)
|
|
225
|
+
```
|
|
226
|
+
|
|
227
|
+
Differences from string mode:
|
|
228
|
+
- All offsets and lengths are in **bytes**, not characters.
|
|
229
|
+
- Results contain Buffers instead of strings.
|
|
230
|
+
- Use `buf.toString()` to convert results back to strings.
|
|
231
|
+
|
|
232
|
+
### useBuffers on replacer functions
|
|
233
|
+
|
|
234
|
+
When using `re.replace(buf, replacerFn)`, the replacer receives string arguments and character offsets by default. Set `replacerFn.useBuffers = true` to receive byte offsets instead:
|
|
235
|
+
|
|
236
|
+
```js
|
|
237
|
+
function replacer(match, offset, input) {
|
|
238
|
+
return '<' + offset + ' bytes>';
|
|
239
|
+
}
|
|
240
|
+
replacer.useBuffers = true;
|
|
241
|
+
new RE2('б').replace(Buffer.from('абв'), replacer);
|
|
242
|
+
```
|
|
243
|
+
|
|
244
|
+
## RE2.Set
|
|
245
|
+
|
|
246
|
+
Multi-pattern matching — compile many patterns into a single automaton and test/match against all of them at once. Faster than testing individual patterns when the number of patterns is large.
|
|
247
|
+
|
|
248
|
+
### Constructor
|
|
249
|
+
|
|
250
|
+
```js
|
|
251
|
+
new RE2.Set(patterns[, flagsOrOptions][, options])
|
|
252
|
+
```
|
|
253
|
+
|
|
254
|
+
- `patterns` — any iterable of strings, Buffers, RegExp, or RE2 instances.
|
|
255
|
+
- `flagsOrOptions` — optional string/Buffer with flags (apply to all patterns), or options object.
|
|
256
|
+
- `options.anchor` — `'unanchored'` (default), `'start'`, or `'both'`.
|
|
257
|
+
- `options.maxMem` — DFA memory budget in bytes (positive integer). Default 8 MiB; raise it when `new RE2.Set(...)` throws `"RE2.Set could not be compiled."` because the union DFA blew the budget.
|
|
258
|
+
|
|
259
|
+
```js
|
|
260
|
+
const set = new RE2.Set([
|
|
261
|
+
'^/users/\\d+$',
|
|
262
|
+
'^/posts/\\d+$',
|
|
263
|
+
'^/api/.*$'
|
|
264
|
+
], 'i', {anchor: 'start'});
|
|
265
|
+
```
|
|
266
|
+
|
|
267
|
+
### set.test(str)
|
|
268
|
+
|
|
269
|
+
Returns `true` if any pattern matches, `false` otherwise.
|
|
270
|
+
|
|
271
|
+
```js
|
|
272
|
+
set.test('/users/42'); // true
|
|
273
|
+
set.test('/unknown'); // false
|
|
274
|
+
```
|
|
275
|
+
|
|
276
|
+
### set.match(str)
|
|
277
|
+
|
|
278
|
+
Returns an array of indices of matching patterns, sorted ascending. Empty array if none match.
|
|
279
|
+
|
|
280
|
+
```js
|
|
281
|
+
set.match('/users/42'); // [0]
|
|
282
|
+
set.match('/api/users'); // [2]
|
|
283
|
+
set.match('/unknown'); // []
|
|
284
|
+
```
|
|
285
|
+
|
|
286
|
+
### Properties
|
|
287
|
+
|
|
288
|
+
- `set.size` (number) — number of patterns.
|
|
289
|
+
- `set.source` (string) — all patterns joined with `|`.
|
|
290
|
+
- `set.sources` (string[]) — individual pattern sources.
|
|
291
|
+
- `set.flags` (string) — flags string.
|
|
292
|
+
- `set.anchor` (string) — anchor mode.
|
|
293
|
+
- `set.maxMem` (number) — effective DFA memory budget in bytes.
|
|
294
|
+
|
|
295
|
+
### set.toString()
|
|
296
|
+
|
|
297
|
+
Returns `'/pattern1|pattern2|.../flags'`.
|
|
298
|
+
|
|
299
|
+
```js
|
|
300
|
+
set.toString(); // '/^/users/\\d+$|^/posts/\\d+$|^/api/.*$/iu'
|
|
301
|
+
```
|
|
302
|
+
|
|
303
|
+
## Static helpers
|
|
304
|
+
|
|
305
|
+
### RE2.getUtf8Length(str)
|
|
306
|
+
|
|
307
|
+
Calculate the byte size needed to encode a UTF-16 string as UTF-8.
|
|
308
|
+
|
|
309
|
+
```js
|
|
310
|
+
RE2.getUtf8Length('hello'); // 5
|
|
311
|
+
RE2.getUtf8Length('привет'); // 12
|
|
312
|
+
```
|
|
313
|
+
|
|
314
|
+
### RE2.getUtf16Length(buf)
|
|
315
|
+
|
|
316
|
+
Calculate the character count needed to encode a UTF-8 buffer as a UTF-16 string.
|
|
317
|
+
|
|
318
|
+
```js
|
|
319
|
+
RE2.getUtf16Length(Buffer.from('hello')); // 5
|
|
320
|
+
RE2.getUtf16Length(Buffer.from('привет')); // 6
|
|
321
|
+
```
|
|
322
|
+
|
|
323
|
+
## Named groups
|
|
324
|
+
|
|
325
|
+
Named capture groups are supported:
|
|
326
|
+
|
|
327
|
+
```js
|
|
328
|
+
const re = new RE2('(?<year>\\d{4})-(?<month>\\d{2})-(?<day>\\d{2})');
|
|
329
|
+
const result = re.exec('2024-01-15');
|
|
330
|
+
result.groups.year; // '2024'
|
|
331
|
+
result.groups.month; // '01'
|
|
332
|
+
result.groups.day; // '15'
|
|
333
|
+
```
|
|
334
|
+
|
|
335
|
+
Named backreferences in replacement strings:
|
|
336
|
+
|
|
337
|
+
```js
|
|
338
|
+
'2024-01-15'.replace(
|
|
339
|
+
new RE2('(?<y>\\d{4})-(?<m>\\d{2})-(?<d>\\d{2})'),
|
|
340
|
+
'$<d>/$<m>/$<y>'
|
|
341
|
+
); // '15/01/2024'
|
|
342
|
+
```
|
|
343
|
+
|
|
344
|
+
## Unicode classes
|
|
345
|
+
|
|
346
|
+
node-re2 accepts the same `\p{...}` escapes as JavaScript `RegExp` with the `u` flag. The MDN reference at https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Regular_expressions/Unicode_character_class_escape is the canonical spec for what's accepted.
|
|
347
|
+
|
|
348
|
+
```js
|
|
349
|
+
// General_Category — long and short names
|
|
350
|
+
new RE2('\\p{Letter}+'); // \p{L}+
|
|
351
|
+
new RE2('\\p{Number}+'); // \p{N}+
|
|
352
|
+
new RE2('\\p{gc=Letter}+'); // gc= and General_Category= prefixes
|
|
353
|
+
new RE2('\\p{General_Category=Letter}+');
|
|
354
|
+
|
|
355
|
+
// Script and Script_Extensions
|
|
356
|
+
new RE2('\\p{Script=Latin}+'); // RE2 native
|
|
357
|
+
new RE2('\\p{sc=Cyrillic}+');
|
|
358
|
+
new RE2('\\p{Script_Extensions=Hani}+'); // expanded inline
|
|
359
|
+
new RE2('\\p{scx=Latn}+'); // ISO 15924 short code
|
|
360
|
+
|
|
361
|
+
// Binary properties — full ECMAScript set
|
|
362
|
+
new RE2('\\p{Alphabetic}+').test('héllo'); // true
|
|
363
|
+
new RE2('\\p{ASCII}+').test('Hi!'); // true
|
|
364
|
+
new RE2('\\p{ID_Start}\\p{ID_Continue}*').test('x1'); // true
|
|
365
|
+
new RE2('\\p{White_Space}+').test(' \\t\\n'); // true
|
|
366
|
+
new RE2('\\p{Emoji}').test('😀'); // true
|
|
367
|
+
new RE2('\\p{Math}').test('∑'); // true
|
|
368
|
+
|
|
369
|
+
// Short aliases from PropertyAliases.txt
|
|
370
|
+
new RE2('\\p{Alpha}+'); // == Alphabetic
|
|
371
|
+
new RE2('\\p{Hex}+'); // == Hex_Digit
|
|
372
|
+
new RE2('\\p{Lower}+'); // == Lowercase
|
|
373
|
+
|
|
374
|
+
// Negation and use inside character classes
|
|
375
|
+
new RE2('\\P{ASCII}+'); // non-ASCII
|
|
376
|
+
new RE2('[\\p{L}\\p{Emoji}]+'); // letters or emoji
|
|
377
|
+
new RE2('[^\\p{ASCII}]+'); // negated inside class
|
|
378
|
+
```
|
|
379
|
+
|
|
380
|
+
**Not supported:** *Properties of Strings* (`\p{Basic_Emoji}`, `\p{RGI_Emoji}`, etc.). These match multi-codepoint sequences and require the `v` flag, which RE2 does not model. Trying to use one throws a syntax error at compile time.
|
|
381
|
+
|
|
382
|
+
Tables are baked in from Unicode 17.0 (devDependency `@unicode/unicode-17.0.0`). Bump the package and run `node scripts/gen-unicode-properties.mjs` to target a newer Unicode version.
|
|
383
|
+
|
|
384
|
+
## Limitations
|
|
385
|
+
|
|
386
|
+
RE2 does **not** support:
|
|
387
|
+
|
|
388
|
+
- **Backreferences** (`\1`, `\2`, etc.) — throw `SyntaxError`.
|
|
389
|
+
- **Lookahead assertions** (`(?=...)`, `(?!...)`) — throw `SyntaxError`.
|
|
390
|
+
- **Lookbehind assertions** (`(?<=...)`, `(?<!...)`) — throw `SyntaxError`.
|
|
391
|
+
|
|
392
|
+
Fallback pattern:
|
|
393
|
+
|
|
394
|
+
```js
|
|
395
|
+
let re = /pattern-with-lookahead(?=foo)/;
|
|
396
|
+
try {
|
|
397
|
+
re = new RE2(re);
|
|
398
|
+
} catch (e) {
|
|
399
|
+
// use original RegExp as fallback
|
|
400
|
+
}
|
|
401
|
+
const result = re.exec(input);
|
|
402
|
+
```
|
|
403
|
+
|
|
404
|
+
## Common patterns
|
|
405
|
+
|
|
406
|
+
### Drop-in RegExp replacement
|
|
407
|
+
|
|
408
|
+
```js
|
|
409
|
+
const RE2 = require('re2');
|
|
410
|
+
|
|
411
|
+
// Before (vulnerable to ReDoS):
|
|
412
|
+
const re = new RegExp(userInput);
|
|
413
|
+
|
|
414
|
+
// After (safe):
|
|
415
|
+
const re = new RE2(userInput);
|
|
416
|
+
```
|
|
417
|
+
|
|
418
|
+
### Process Buffer data efficiently
|
|
419
|
+
|
|
420
|
+
```js
|
|
421
|
+
const RE2 = require('re2');
|
|
422
|
+
const fs = require('fs');
|
|
423
|
+
|
|
424
|
+
const data = fs.readFileSync('large-file.txt');
|
|
425
|
+
const re = new RE2('pattern', 'g');
|
|
426
|
+
let match;
|
|
427
|
+
while ((match = re.exec(data)) !== null) {
|
|
428
|
+
console.log('Found at byte offset:', match.index);
|
|
429
|
+
}
|
|
430
|
+
```
|
|
431
|
+
|
|
432
|
+
### Route matching with RE2.Set
|
|
433
|
+
|
|
434
|
+
```js
|
|
435
|
+
const RE2 = require('re2');
|
|
436
|
+
|
|
437
|
+
const routes = new RE2.Set([
|
|
438
|
+
'^/users/\\d+$',
|
|
439
|
+
'^/posts/\\d+$',
|
|
440
|
+
'^/api/v\\d+/.*$'
|
|
441
|
+
], 'i');
|
|
442
|
+
|
|
443
|
+
function findRoute(path) {
|
|
444
|
+
const matches = routes.match(path);
|
|
445
|
+
return matches.length > 0 ? matches[0] : -1;
|
|
446
|
+
}
|
|
447
|
+
|
|
448
|
+
findRoute('/users/42'); // 0
|
|
449
|
+
findRoute('/posts/7'); // 1
|
|
450
|
+
findRoute('/api/v2/foo'); // 2
|
|
451
|
+
findRoute('/unknown'); // -1
|
|
452
|
+
```
|
|
453
|
+
|
|
454
|
+
### Validate user-supplied patterns safely
|
|
455
|
+
|
|
456
|
+
```js
|
|
457
|
+
const RE2 = require('re2');
|
|
458
|
+
|
|
459
|
+
function safeMatch(input, pattern, flags) {
|
|
460
|
+
try {
|
|
461
|
+
const re = new RE2(pattern, flags);
|
|
462
|
+
return re.test(input);
|
|
463
|
+
} catch (e) {
|
|
464
|
+
return false; // invalid pattern
|
|
465
|
+
}
|
|
466
|
+
}
|
|
467
|
+
```
|
|
468
|
+
|
|
469
|
+
## TypeScript
|
|
470
|
+
|
|
471
|
+
```ts
|
|
472
|
+
import RE2 from 're2';
|
|
473
|
+
|
|
474
|
+
const re: RE2 = new RE2('\\d+', 'g');
|
|
475
|
+
const result: RegExpExecArray | null = re.exec('test 123');
|
|
476
|
+
|
|
477
|
+
// Buffer overloads
|
|
478
|
+
const bufResult: RE2BufferExecArray | null = re.exec(Buffer.from('test 123'));
|
|
479
|
+
|
|
480
|
+
// RE2.Set
|
|
481
|
+
const set: RE2Set = new RE2.Set(['a', 'b'], 'i');
|
|
482
|
+
const matches: number[] = set.match('abc');
|
|
483
|
+
```
|
|
484
|
+
|
|
485
|
+
## Project structure notes
|
|
486
|
+
|
|
487
|
+
- Entry point: `re2.js` (loads native addon), types: `re2.d.ts`.
|
|
488
|
+
- C++ addon source: `lib/*.cc`, `lib/*.h`.
|
|
489
|
+
- Tests: `tests/test-*.mjs` (runtime), `ts-tests/test-*.ts` (type-checking).
|
|
490
|
+
- Vendored dependencies: `vendor/re2/`, `vendor/abseil-cpp/` (git submodules) — **never modify files under `vendor/`**.
|
|
491
|
+
|
|
492
|
+
## Links
|
|
493
|
+
|
|
494
|
+
- Docs: https://github.com/uhop/node-re2/wiki
|
|
495
|
+
- npm: https://www.npmjs.com/package/re2
|
|
496
|
+
- Repository: https://github.com/uhop/node-re2
|
|
497
|
+
- RE2 syntax: https://github.com/google/re2/wiki/Syntax
|