@encharm/cws 4.4.1 → 4.5.1

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 (485) hide show
  1. package/dist/bindings/cws_darwin_arm64_node115.node +0 -0
  2. package/dist/bindings/cws_darwin_arm64_node127.node +0 -0
  3. package/dist/bindings/cws_linux_arm64_node115.node +0 -0
  4. package/dist/bindings/cws_linux_arm64_node127.node +0 -0
  5. package/dist/bindings/cws_linux_x64_node115.node +0 -0
  6. package/dist/bindings/cws_linux_x64_node127.node +0 -0
  7. package/dist/bindings/cws_win32_x64_node108.node +0 -0
  8. package/dist/bindings/cws_win32_x64_node115.node +0 -0
  9. package/dist/bindings/cws_win32_x64_node127.node +0 -0
  10. package/dist/bindings/cws_win32_x64_node83.node +0 -0
  11. package/dist/bindings/cws_win32_x64_node93.node +0 -0
  12. package/package.json +1 -1
  13. package/src/Addon.h +8 -23
  14. package/src/Socket.h +0 -1
  15. package/src/headers/22/acorn_version.h +6 -0
  16. package/src/headers/22/aliased_buffer-inl.h +243 -0
  17. package/src/headers/22/aliased_buffer.h +206 -0
  18. package/src/headers/{18 → 22}/async_wrap-inl.h +8 -6
  19. package/src/headers/{18 → 22}/async_wrap.h +65 -59
  20. package/src/headers/{16 → 22}/base_object-inl.h +57 -117
  21. package/src/headers/{18 → 22}/base_object.h +58 -30
  22. package/src/headers/22/base_object_types.h +74 -0
  23. package/src/headers/22/blob_serializer_deserializer-inl.h +385 -0
  24. package/src/headers/22/blob_serializer_deserializer.h +132 -0
  25. package/src/headers/{16 → 22}/callback_queue.h +1 -0
  26. package/src/headers/{16 → 22}/cares_wrap.h +27 -20
  27. package/src/headers/22/cjs_module_lexer_version.h +6 -0
  28. package/src/headers/22/cleanup_queue-inl.h +62 -0
  29. package/src/headers/22/cleanup_queue.h +85 -0
  30. package/src/headers/22/compile_cache.h +104 -0
  31. package/src/headers/{18 → 22}/crypto/crypto_clienthello.h +1 -1
  32. package/src/headers/{18 → 22}/crypto/crypto_context.h +31 -7
  33. package/src/headers/{18 → 22}/crypto/crypto_keys.h +118 -148
  34. package/src/headers/{18 → 22}/crypto/crypto_tls.h +20 -5
  35. package/src/headers/{18 → 22}/crypto/crypto_util.h +219 -263
  36. package/src/headers/22/crypto/ncrypto.h +752 -0
  37. package/src/headers/{16 → 22}/debug_utils-inl.h +15 -7
  38. package/src/headers/{18 → 22}/debug_utils.h +25 -19
  39. package/src/headers/22/encoding_binding.h +59 -0
  40. package/src/headers/{14 → 22}/env-inl.h +276 -409
  41. package/src/headers/22/env.h +1266 -0
  42. package/src/headers/22/env_properties.h +497 -0
  43. package/src/headers/{18 → 22}/handle_wrap.h +2 -0
  44. package/src/headers/{18 → 22}/histogram.h +88 -48
  45. package/src/headers/{16 → 22}/inspector_agent.h +17 -1
  46. package/src/headers/{16 → 22}/inspector_profiler.h +15 -13
  47. package/src/headers/{18 → 22}/js_native_api.h +78 -30
  48. package/src/headers/{18 → 22}/js_native_api_types.h +46 -1
  49. package/src/headers/{18 → 22}/js_native_api_v8.h +206 -161
  50. package/src/headers/{18 → 22}/js_native_api_v8_internals.h +6 -0
  51. package/src/headers/22/json_parser.h +40 -0
  52. package/src/headers/{16 → 22}/json_utils.h +19 -8
  53. package/src/headers/{18 → 22}/memory_tracker-inl.h +16 -13
  54. package/src/headers/{14 → 22}/memory_tracker.h +13 -8
  55. package/src/headers/{16 → 22}/module_wrap.h +49 -19
  56. package/src/headers/22/ncrypto/ncrypto.h +752 -0
  57. package/src/headers/{18 → 22}/node.h +465 -68
  58. package/src/headers/{18 → 22}/node_api.h +66 -81
  59. package/src/headers/{18 → 22}/node_api_internals.h +8 -4
  60. package/src/headers/{18 → 22}/node_api_types.h +5 -0
  61. package/src/headers/22/node_binding.h +154 -0
  62. package/src/headers/{18 → 22}/node_blob.h +46 -78
  63. package/src/headers/{18 → 22}/node_bob-inl.h +1 -2
  64. package/src/headers/{18 → 22}/node_bob.h +2 -6
  65. package/src/headers/{18 → 22}/node_buffer.h +1 -1
  66. package/src/headers/22/node_builtins.h +220 -0
  67. package/src/headers/{18 → 22}/node_constants.h +3 -5
  68. package/src/headers/22/node_context_data.h +168 -0
  69. package/src/headers/22/node_contextify.h +199 -0
  70. package/src/headers/{16 → 22}/node_crypto.h +1 -2
  71. package/src/headers/22/node_dotenv.h +45 -0
  72. package/src/headers/{18 → 22}/node_errors.h +86 -27
  73. package/src/headers/22/node_exit_code.h +54 -0
  74. package/src/headers/22/node_external_reference.h +249 -0
  75. package/src/headers/{18 → 22}/node_file-inl.h +127 -30
  76. package/src/headers/{16 → 22}/node_file.h +122 -11
  77. package/src/headers/{18 → 22}/node_http2.h +28 -11
  78. package/src/headers/{16 → 22}/node_http2_state.h +34 -25
  79. package/src/headers/{18 → 22}/node_http_common-inl.h +2 -1
  80. package/src/headers/{18 → 22}/node_http_common.h +56 -55
  81. package/src/headers/{16 → 22}/node_i18n.h +5 -18
  82. package/src/headers/{18 → 22}/node_internals.h +121 -59
  83. package/src/headers/{18 → 22}/node_main_instance.h +4 -31
  84. package/src/headers/{18 → 22}/node_messaging.h +27 -10
  85. package/src/headers/{18 → 22}/node_metadata.h +23 -1
  86. package/src/headers/{18 → 22}/node_options-inl.h +24 -11
  87. package/src/headers/{18 → 22}/node_options.h +124 -39
  88. package/src/headers/{18 → 22}/node_perf.h +0 -2
  89. package/src/headers/{18 → 22}/node_perf_common.h +20 -9
  90. package/src/headers/{18 → 22}/node_platform.h +11 -5
  91. package/src/headers/{18 → 22}/node_process.h +26 -14
  92. package/src/headers/22/node_realm-inl.h +145 -0
  93. package/src/headers/22/node_realm.h +184 -0
  94. package/src/headers/{16 → 22}/node_report.h +13 -17
  95. package/src/headers/{16 → 22}/node_revert.h +3 -3
  96. package/src/headers/{16 → 22}/node_root_certs.h +902 -461
  97. package/src/headers/22/node_sea.h +64 -0
  98. package/src/headers/22/node_shadow_realm.h +46 -0
  99. package/src/headers/22/node_snapshot_builder.h +57 -0
  100. package/src/headers/22/node_snapshotable.h +174 -0
  101. package/src/headers/{18 → 22}/node_sockaddr.h +2 -2
  102. package/src/headers/{16 → 22}/node_stat_watcher.h +2 -1
  103. package/src/headers/22/node_threadsafe_cow-inl.h +54 -0
  104. package/src/headers/22/node_threadsafe_cow.h +105 -0
  105. package/src/headers/22/node_union_bytes.h +81 -0
  106. package/src/headers/22/node_url.h +96 -0
  107. package/src/headers/22/node_v8.h +77 -0
  108. package/src/headers/{14 → 22}/node_v8_platform-inl.h +17 -6
  109. package/src/headers/{18 → 22}/node_version.h +20 -8
  110. package/src/headers/22/node_wasi.h +185 -0
  111. package/src/headers/{14 → 22}/node_watchdog.h +2 -0
  112. package/src/headers/{18 → 22}/node_worker.h +7 -2
  113. package/src/headers/22/permission/child_process_permission.h +31 -0
  114. package/src/headers/22/permission/fs_permission.h +167 -0
  115. package/src/headers/22/permission/inspector_permission.h +31 -0
  116. package/src/headers/22/permission/permission.h +99 -0
  117. package/src/headers/22/permission/permission_base.h +60 -0
  118. package/src/headers/22/permission/wasi_permission.h +31 -0
  119. package/src/headers/22/permission/worker_permission.h +31 -0
  120. package/src/headers/{16 → 22}/req_wrap-inl.h +7 -6
  121. package/src/headers/{14 → 22}/spawn_sync.h +3 -3
  122. package/src/headers/{18 → 22}/stream_base-inl.h +0 -135
  123. package/src/headers/{18 → 22}/stream_base.h +35 -16
  124. package/src/headers/{18 → 22}/stream_pipe.h +3 -4
  125. package/src/headers/{16 → 22}/stream_wrap.h +2 -1
  126. package/src/headers/{18 → 22}/string_bytes.h +5 -14
  127. package/src/headers/{14 → 22}/string_decoder-inl.h +0 -6
  128. package/src/headers/{16 → 22}/string_decoder.h +0 -1
  129. package/src/headers/{18 → 22}/tcp_wrap.h +1 -1
  130. package/src/headers/{18 → 22}/threadpoolwork-inl.h +14 -1
  131. package/src/headers/22/timers.h +76 -0
  132. package/src/headers/{18 → 22}/tracing/trace_event.h +7 -5
  133. package/src/headers/{16 → 22}/udp_wrap.h +8 -5
  134. package/src/headers/22/undici_version.h +6 -0
  135. package/src/headers/{18 → 22}/util-inl.h +97 -127
  136. package/src/headers/{18 → 22}/util.h +293 -106
  137. package/src/headers/{18 → 22}/v8-fast-api-calls.h +103 -58
  138. package/dist/bindings/cws_darwin_arm64_node83.node +0 -0
  139. package/dist/bindings/cws_darwin_arm64_node93.node +0 -0
  140. package/dist/bindings/cws_darwin_x64_node83.node +0 -0
  141. package/dist/bindings/cws_darwin_x64_node93.node +0 -0
  142. package/dist/bindings/cws_linux_arm64_node83.node +0 -0
  143. package/dist/bindings/cws_linux_arm64_node93.node +0 -0
  144. package/dist/bindings/cws_linux_x64_node83.node +0 -0
  145. package/dist/bindings/cws_linux_x64_node93.node +0 -0
  146. package/src/headers/14/aliased_buffer.h +0 -263
  147. package/src/headers/14/allocated_buffer-inl.h +0 -110
  148. package/src/headers/14/allocated_buffer.h +0 -73
  149. package/src/headers/14/async_wrap-inl.h +0 -94
  150. package/src/headers/14/async_wrap.h +0 -230
  151. package/src/headers/14/base64.h +0 -183
  152. package/src/headers/14/base_object-inl.h +0 -371
  153. package/src/headers/14/base_object.h +0 -281
  154. package/src/headers/14/callback_queue-inl.h +0 -97
  155. package/src/headers/14/callback_queue.h +0 -78
  156. package/src/headers/14/debug_utils-inl.h +0 -223
  157. package/src/headers/14/debug_utils.h +0 -181
  158. package/src/headers/14/env.h +0 -1388
  159. package/src/headers/14/handle_wrap.h +0 -117
  160. package/src/headers/14/histogram-inl.h +0 -83
  161. package/src/headers/14/histogram.h +0 -98
  162. package/src/headers/14/inspector_agent.h +0 -149
  163. package/src/headers/14/inspector_profiler.h +0 -137
  164. package/src/headers/14/js_native_api.h +0 -544
  165. package/src/headers/14/js_native_api_types.h +0 -143
  166. package/src/headers/14/js_native_api_v8.h +0 -301
  167. package/src/headers/14/js_native_api_v8_internals.h +0 -38
  168. package/src/headers/14/json_utils.h +0 -161
  169. package/src/headers/14/memory_tracker-inl.h +0 -355
  170. package/src/headers/14/module_wrap.h +0 -99
  171. package/src/headers/14/node.h +0 -1032
  172. package/src/headers/14/node_api.h +0 -255
  173. package/src/headers/14/node_api_types.h +0 -44
  174. package/src/headers/14/node_binding.h +0 -99
  175. package/src/headers/14/node_buffer.h +0 -92
  176. package/src/headers/14/node_constants.h +0 -84
  177. package/src/headers/14/node_context_data.h +0 -44
  178. package/src/headers/14/node_contextify.h +0 -161
  179. package/src/headers/14/node_crypto.h +0 -865
  180. package/src/headers/14/node_crypto_bio.h +0 -195
  181. package/src/headers/14/node_crypto_clienthello-inl.h +0 -91
  182. package/src/headers/14/node_crypto_clienthello.h +0 -132
  183. package/src/headers/14/node_crypto_common.h +0 -138
  184. package/src/headers/14/node_crypto_groups.h +0 -415
  185. package/src/headers/14/node_dtrace.h +0 -86
  186. package/src/headers/14/node_errors.h +0 -214
  187. package/src/headers/14/node_file-inl.h +0 -306
  188. package/src/headers/14/node_file.h +0 -417
  189. package/src/headers/14/node_http2.h +0 -1191
  190. package/src/headers/14/node_http2_state.h +0 -149
  191. package/src/headers/14/node_http_common-inl.h +0 -194
  192. package/src/headers/14/node_http_common.h +0 -529
  193. package/src/headers/14/node_i18n.h +0 -144
  194. package/src/headers/14/node_internals.h +0 -405
  195. package/src/headers/14/node_main_instance.h +0 -96
  196. package/src/headers/14/node_mem.h +0 -45
  197. package/src/headers/14/node_messaging.h +0 -303
  198. package/src/headers/14/node_metadata.h +0 -109
  199. package/src/headers/14/node_mutex.h +0 -247
  200. package/src/headers/14/node_native_module.h +0 -101
  201. package/src/headers/14/node_native_module_env.h +0 -66
  202. package/src/headers/14/node_options-inl.h +0 -451
  203. package/src/headers/14/node_options.h +0 -481
  204. package/src/headers/14/node_perf.h +0 -181
  205. package/src/headers/14/node_perf_common.h +0 -97
  206. package/src/headers/14/node_platform.h +0 -189
  207. package/src/headers/14/node_process.h +0 -40
  208. package/src/headers/14/node_report.h +0 -47
  209. package/src/headers/14/node_revert.h +0 -72
  210. package/src/headers/14/node_root_certs.h +0 -3458
  211. package/src/headers/14/node_sockaddr-inl.h +0 -170
  212. package/src/headers/14/node_sockaddr.h +0 -123
  213. package/src/headers/14/node_stat_watcher.h +0 -70
  214. package/src/headers/14/node_union_bytes.h +0 -103
  215. package/src/headers/14/node_url.h +0 -188
  216. package/src/headers/14/node_version.h +0 -98
  217. package/src/headers/14/node_wasi.h +0 -108
  218. package/src/headers/14/node_win32_etw_provider-inl.h +0 -287
  219. package/src/headers/14/node_win32_etw_provider.h +0 -99
  220. package/src/headers/14/node_worker.h +0 -141
  221. package/src/headers/14/pipe_wrap.h +0 -78
  222. package/src/headers/14/req_wrap-inl.h +0 -170
  223. package/src/headers/14/req_wrap.h +0 -77
  224. package/src/headers/14/stream_base-inl.h +0 -275
  225. package/src/headers/14/stream_base.h +0 -434
  226. package/src/headers/14/stream_pipe.h +0 -73
  227. package/src/headers/14/stream_wrap.h +0 -130
  228. package/src/headers/14/string_bytes.h +0 -129
  229. package/src/headers/14/string_decoder.h +0 -50
  230. package/src/headers/14/string_search.h +0 -638
  231. package/src/headers/14/tcp_wrap.h +0 -101
  232. package/src/headers/14/threadpoolwork-inl.h +0 -57
  233. package/src/headers/14/tls_wrap.h +0 -222
  234. package/src/headers/14/tracing/agent.h +0 -195
  235. package/src/headers/14/tracing/node_trace_buffer.h +0 -83
  236. package/src/headers/14/tracing/node_trace_writer.h +0 -75
  237. package/src/headers/14/tracing/trace_event.h +0 -720
  238. package/src/headers/14/tracing/traced_value.h +0 -70
  239. package/src/headers/14/tty_wrap.h +0 -64
  240. package/src/headers/14/udp_wrap.h +0 -227
  241. package/src/headers/14/util-inl.h +0 -566
  242. package/src/headers/14/util.h +0 -804
  243. package/src/headers/14/v8abbr.h +0 -124
  244. package/src/headers/16/aliased_buffer.h +0 -315
  245. package/src/headers/16/aliased_struct-inl.h +0 -54
  246. package/src/headers/16/aliased_struct.h +0 -63
  247. package/src/headers/16/allocated_buffer-inl.h +0 -110
  248. package/src/headers/16/allocated_buffer.h +0 -73
  249. package/src/headers/16/async_wrap-inl.h +0 -94
  250. package/src/headers/16/async_wrap.h +0 -246
  251. package/src/headers/16/base64-inl.h +0 -189
  252. package/src/headers/16/base64.h +0 -69
  253. package/src/headers/16/base_object.h +0 -294
  254. package/src/headers/16/connect_wrap.h +0 -26
  255. package/src/headers/16/connection_wrap.h +0 -30
  256. package/src/headers/16/crypto/crypto_aes.h +0 -89
  257. package/src/headers/16/crypto/crypto_bio.h +0 -194
  258. package/src/headers/16/crypto/crypto_cipher.h +0 -286
  259. package/src/headers/16/crypto/crypto_clienthello-inl.h +0 -90
  260. package/src/headers/16/crypto/crypto_clienthello.h +0 -131
  261. package/src/headers/16/crypto/crypto_common.h +0 -187
  262. package/src/headers/16/crypto/crypto_context.h +0 -147
  263. package/src/headers/16/crypto/crypto_dh.h +0 -157
  264. package/src/headers/16/crypto/crypto_dsa.h +0 -76
  265. package/src/headers/16/crypto/crypto_ec.h +0 -169
  266. package/src/headers/16/crypto/crypto_groups.h +0 -415
  267. package/src/headers/16/crypto/crypto_hash.h +0 -89
  268. package/src/headers/16/crypto/crypto_hkdf.h +0 -66
  269. package/src/headers/16/crypto/crypto_hmac.h +0 -94
  270. package/src/headers/16/crypto/crypto_keygen.h +0 -301
  271. package/src/headers/16/crypto/crypto_keys.h +0 -412
  272. package/src/headers/16/crypto/crypto_pbkdf2.h +0 -76
  273. package/src/headers/16/crypto/crypto_random.h +0 -130
  274. package/src/headers/16/crypto/crypto_rsa.h +0 -141
  275. package/src/headers/16/crypto/crypto_scrypt.h +0 -87
  276. package/src/headers/16/crypto/crypto_sig.h +0 -167
  277. package/src/headers/16/crypto/crypto_spkac.h +0 -20
  278. package/src/headers/16/crypto/crypto_timing.h +0 -20
  279. package/src/headers/16/crypto/crypto_tls.h +0 -292
  280. package/src/headers/16/crypto/crypto_util.h +0 -736
  281. package/src/headers/16/crypto/crypto_x509.h +0 -141
  282. package/src/headers/16/debug_utils.h +0 -184
  283. package/src/headers/16/diagnosticfilename-inl.h +0 -33
  284. package/src/headers/16/env-inl.h +0 -1277
  285. package/src/headers/16/env.h +0 -1629
  286. package/src/headers/16/handle_wrap.h +0 -121
  287. package/src/headers/16/histogram-inl.h +0 -88
  288. package/src/headers/16/histogram.h +0 -216
  289. package/src/headers/16/inspector_io.h +0 -78
  290. package/src/headers/16/inspector_socket.h +0 -60
  291. package/src/headers/16/inspector_socket_server.h +0 -110
  292. package/src/headers/16/js_native_api.h +0 -561
  293. package/src/headers/16/js_native_api_types.h +0 -160
  294. package/src/headers/16/js_native_api_v8.h +0 -451
  295. package/src/headers/16/js_native_api_v8_internals.h +0 -39
  296. package/src/headers/16/js_stream.h +0 -52
  297. package/src/headers/16/memory_tracker-inl.h +0 -356
  298. package/src/headers/16/memory_tracker.h +0 -284
  299. package/src/headers/16/node.d +0 -315
  300. package/src/headers/16/node.h +0 -1132
  301. package/src/headers/16/node.stp +0 -146
  302. package/src/headers/16/node_api.h +0 -275
  303. package/src/headers/16/node_api_internals.h +0 -30
  304. package/src/headers/16/node_api_types.h +0 -50
  305. package/src/headers/16/node_binding.h +0 -99
  306. package/src/headers/16/node_blob.h +0 -191
  307. package/src/headers/16/node_bob-inl.h +0 -37
  308. package/src/headers/16/node_bob.h +0 -111
  309. package/src/headers/16/node_buffer.h +0 -92
  310. package/src/headers/16/node_constants.h +0 -84
  311. package/src/headers/16/node_context_data.h +0 -44
  312. package/src/headers/16/node_contextify.h +0 -196
  313. package/src/headers/16/node_dir.h +0 -52
  314. package/src/headers/16/node_dtrace.h +0 -86
  315. package/src/headers/16/node_errors.h +0 -277
  316. package/src/headers/16/node_external_reference.h +0 -129
  317. package/src/headers/16/node_file-inl.h +0 -306
  318. package/src/headers/16/node_http2.h +0 -1140
  319. package/src/headers/16/node_http_common-inl.h +0 -200
  320. package/src/headers/16/node_http_common.h +0 -531
  321. package/src/headers/16/node_internals.h +0 -421
  322. package/src/headers/16/node_main_instance.h +0 -103
  323. package/src/headers/16/node_mem-inl.h +0 -112
  324. package/src/headers/16/node_messaging.h +0 -373
  325. package/src/headers/16/node_metadata.h +0 -122
  326. package/src/headers/16/node_native_module.h +0 -101
  327. package/src/headers/16/node_native_module_env.h +0 -68
  328. package/src/headers/16/node_object_wrap.h +0 -132
  329. package/src/headers/16/node_options-inl.h +0 -477
  330. package/src/headers/16/node_options.h +0 -494
  331. package/src/headers/16/node_perf.h +0 -185
  332. package/src/headers/16/node_perf_common.h +0 -89
  333. package/src/headers/16/node_platform.h +0 -192
  334. package/src/headers/16/node_process.h +0 -43
  335. package/src/headers/16/node_provider.d +0 -80
  336. package/src/headers/16/node_snapshotable.h +0 -137
  337. package/src/headers/16/node_sockaddr-inl.h +0 -266
  338. package/src/headers/16/node_sockaddr.h +0 -405
  339. package/src/headers/16/node_union_bytes.h +0 -103
  340. package/src/headers/16/node_url.h +0 -205
  341. package/src/headers/16/node_v8.h +0 -41
  342. package/src/headers/16/node_v8_platform-inl.h +0 -194
  343. package/src/headers/16/node_version.h +0 -98
  344. package/src/headers/16/node_wasi.h +0 -108
  345. package/src/headers/16/node_watchdog.h +0 -152
  346. package/src/headers/16/node_win32_etw_provider-inl.h +0 -288
  347. package/src/headers/16/node_win32_etw_provider.h +0 -99
  348. package/src/headers/16/node_worker.h +0 -145
  349. package/src/headers/16/req_wrap.h +0 -77
  350. package/src/headers/16/spawn_sync.h +0 -242
  351. package/src/headers/16/stream_base-inl.h +0 -303
  352. package/src/headers/16/stream_base.h +0 -454
  353. package/src/headers/16/stream_pipe.h +0 -73
  354. package/src/headers/16/string_bytes.h +0 -122
  355. package/src/headers/16/string_decoder-inl.h +0 -37
  356. package/src/headers/16/string_search.h +0 -638
  357. package/src/headers/16/tcp_wrap.h +0 -103
  358. package/src/headers/16/threadpoolwork-inl.h +0 -57
  359. package/src/headers/16/timer_wrap.h +0 -84
  360. package/src/headers/16/tracing/agent.h +0 -195
  361. package/src/headers/16/tracing/node_trace_buffer.h +0 -83
  362. package/src/headers/16/tracing/node_trace_writer.h +0 -75
  363. package/src/headers/16/tracing/trace_event.h +0 -720
  364. package/src/headers/16/tracing/trace_event_common.h +0 -1109
  365. package/src/headers/16/tracing/traced_value.h +0 -70
  366. package/src/headers/16/tty_wrap.h +0 -66
  367. package/src/headers/16/util-inl.h +0 -575
  368. package/src/headers/16/util.h +0 -824
  369. package/src/headers/16/v8abbr.h +0 -123
  370. package/src/headers/16/v8ustack.d +0 -695
  371. package/src/headers/18/aliased_buffer.h +0 -315
  372. package/src/headers/18/aliased_struct-inl.h +0 -54
  373. package/src/headers/18/aliased_struct.h +0 -63
  374. package/src/headers/18/base64-inl.h +0 -189
  375. package/src/headers/18/base64.h +0 -69
  376. package/src/headers/18/base_object-inl.h +0 -374
  377. package/src/headers/18/callback_queue-inl.h +0 -97
  378. package/src/headers/18/callback_queue.h +0 -78
  379. package/src/headers/18/cares_wrap.h +0 -523
  380. package/src/headers/18/connect_wrap.h +0 -26
  381. package/src/headers/18/connection_wrap.h +0 -30
  382. package/src/headers/18/crypto/crypto_aes.h +0 -89
  383. package/src/headers/18/crypto/crypto_bio.h +0 -194
  384. package/src/headers/18/crypto/crypto_cipher.h +0 -291
  385. package/src/headers/18/crypto/crypto_clienthello-inl.h +0 -90
  386. package/src/headers/18/crypto/crypto_common.h +0 -151
  387. package/src/headers/18/crypto/crypto_dh.h +0 -156
  388. package/src/headers/18/crypto/crypto_dsa.h +0 -77
  389. package/src/headers/18/crypto/crypto_ec.h +0 -170
  390. package/src/headers/18/crypto/crypto_groups.h +0 -415
  391. package/src/headers/18/crypto/crypto_hash.h +0 -89
  392. package/src/headers/18/crypto/crypto_hkdf.h +0 -65
  393. package/src/headers/18/crypto/crypto_hmac.h +0 -94
  394. package/src/headers/18/crypto/crypto_keygen.h +0 -305
  395. package/src/headers/18/crypto/crypto_pbkdf2.h +0 -76
  396. package/src/headers/18/crypto/crypto_random.h +0 -130
  397. package/src/headers/18/crypto/crypto_rsa.h +0 -141
  398. package/src/headers/18/crypto/crypto_scrypt.h +0 -87
  399. package/src/headers/18/crypto/crypto_sig.h +0 -168
  400. package/src/headers/18/crypto/crypto_spkac.h +0 -21
  401. package/src/headers/18/crypto/crypto_timing.h +0 -20
  402. package/src/headers/18/crypto/crypto_x509.h +0 -143
  403. package/src/headers/18/debug_utils-inl.h +0 -223
  404. package/src/headers/18/diagnosticfilename-inl.h +0 -33
  405. package/src/headers/18/env-inl.h +0 -1308
  406. package/src/headers/18/env.h +0 -1667
  407. package/src/headers/18/inspector_agent.h +0 -144
  408. package/src/headers/18/inspector_io.h +0 -78
  409. package/src/headers/18/inspector_profiler.h +0 -149
  410. package/src/headers/18/inspector_socket.h +0 -60
  411. package/src/headers/18/inspector_socket_server.h +0 -110
  412. package/src/headers/18/js_stream.h +0 -52
  413. package/src/headers/18/json_utils.h +0 -161
  414. package/src/headers/18/memory_tracker.h +0 -284
  415. package/src/headers/18/module_wrap.h +0 -116
  416. package/src/headers/18/node_binding.h +0 -99
  417. package/src/headers/18/node_context_data.h +0 -44
  418. package/src/headers/18/node_contextify.h +0 -196
  419. package/src/headers/18/node_crypto.h +0 -57
  420. package/src/headers/18/node_dir.h +0 -52
  421. package/src/headers/18/node_dtrace.h +0 -86
  422. package/src/headers/18/node_external_reference.h +0 -145
  423. package/src/headers/18/node_file.h +0 -426
  424. package/src/headers/18/node_http2_state.h +0 -149
  425. package/src/headers/18/node_i18n.h +0 -145
  426. package/src/headers/18/node_mem-inl.h +0 -112
  427. package/src/headers/18/node_mem.h +0 -45
  428. package/src/headers/18/node_mutex.h +0 -323
  429. package/src/headers/18/node_native_module.h +0 -109
  430. package/src/headers/18/node_native_module_env.h +0 -71
  431. package/src/headers/18/node_object_wrap.h +0 -132
  432. package/src/headers/18/node_process-inl.h +0 -26
  433. package/src/headers/18/node_report.h +0 -47
  434. package/src/headers/18/node_revert.h +0 -82
  435. package/src/headers/18/node_root_certs.h +0 -3246
  436. package/src/headers/18/node_snapshot_builder.h +0 -43
  437. package/src/headers/18/node_snapshotable.h +0 -130
  438. package/src/headers/18/node_stat_watcher.h +0 -72
  439. package/src/headers/18/node_union_bytes.h +0 -103
  440. package/src/headers/18/node_url.h +0 -205
  441. package/src/headers/18/node_v8.h +0 -41
  442. package/src/headers/18/node_v8_platform-inl.h +0 -194
  443. package/src/headers/18/node_wasi.h +0 -108
  444. package/src/headers/18/node_watchdog.h +0 -152
  445. package/src/headers/18/node_win32_etw_provider-inl.h +0 -288
  446. package/src/headers/18/node_win32_etw_provider.h +0 -99
  447. package/src/headers/18/pipe_wrap.h +0 -80
  448. package/src/headers/18/req_wrap-inl.h +0 -170
  449. package/src/headers/18/spawn_sync.h +0 -242
  450. package/src/headers/18/stream_wrap.h +0 -133
  451. package/src/headers/18/string_decoder-inl.h +0 -37
  452. package/src/headers/18/string_decoder.h +0 -50
  453. package/src/headers/18/string_search.h +0 -638
  454. package/src/headers/18/tracing/node_trace_buffer.h +0 -83
  455. package/src/headers/18/tracing/node_trace_writer.h +0 -75
  456. package/src/headers/18/tracing/trace_event_common.h +0 -1109
  457. package/src/headers/18/tracing/traced_value.h +0 -70
  458. package/src/headers/18/udp_wrap.h +0 -227
  459. package/src/headers/18/v8abbr.h +0 -123
  460. /package/src/headers/{14 → 22}/aliased_struct-inl.h +0 -0
  461. /package/src/headers/{14 → 22}/aliased_struct.h +0 -0
  462. /package/src/headers/{16 → 22}/callback_queue-inl.h +0 -0
  463. /package/src/headers/{14 → 22}/connect_wrap.h +0 -0
  464. /package/src/headers/{14 → 22}/connection_wrap.h +0 -0
  465. /package/src/headers/{14 → 22}/diagnosticfilename-inl.h +0 -0
  466. /package/src/headers/{18 → 22}/histogram-inl.h +0 -0
  467. /package/src/headers/{14 → 22}/inspector_io.h +0 -0
  468. /package/src/headers/{14 → 22}/inspector_socket.h +0 -0
  469. /package/src/headers/{14 → 22}/inspector_socket_server.h +0 -0
  470. /package/src/headers/{14 → 22}/js_stream.h +0 -0
  471. /package/src/headers/{14 → 22}/node_dir.h +0 -0
  472. /package/src/headers/{14 → 22}/node_mem-inl.h +0 -0
  473. /package/src/headers/{16 → 22}/node_mem.h +0 -0
  474. /package/src/headers/{16 → 22}/node_mutex.h +0 -0
  475. /package/src/headers/{14 → 22}/node_object_wrap.h +0 -0
  476. /package/src/headers/{16 → 22}/node_process-inl.h +0 -0
  477. /package/src/headers/{18 → 22}/node_sockaddr-inl.h +0 -0
  478. /package/src/headers/{18 → 22}/node_wasm_web_api.h +0 -0
  479. /package/src/headers/{16 → 22}/pipe_wrap.h +0 -0
  480. /package/src/headers/{18 → 22}/req_wrap.h +0 -0
  481. /package/src/headers/{18 → 22}/timer_wrap-inl.h +0 -0
  482. /package/src/headers/{18 → 22}/timer_wrap.h +0 -0
  483. /package/src/headers/{18 → 22}/tracing/agent.h +0 -0
  484. /package/src/headers/{14 → 22}/tracing/trace_event_common.h +0 -0
  485. /package/src/headers/{18 → 22}/tty_wrap.h +0 -0
@@ -1,638 +0,0 @@
1
- // Copyright 2011 the V8 project authors. All rights reserved.
2
- // Use of this source code is governed by a BSD-style license that can be
3
- // found in the LICENSE file.
4
-
5
- #ifndef SRC_STRING_SEARCH_H_
6
- #define SRC_STRING_SEARCH_H_
7
-
8
- #if defined(NODE_WANT_INTERNALS) && NODE_WANT_INTERNALS
9
-
10
- #include "util.h"
11
-
12
- #include <cstring>
13
- #include <algorithm>
14
-
15
- namespace node {
16
- namespace stringsearch {
17
-
18
- template <typename T>
19
- class Vector {
20
- public:
21
- Vector(T* data, size_t length, bool isForward)
22
- : start_(data), length_(length), is_forward_(isForward) {
23
- CHECK(length > 0 && data != nullptr);
24
- }
25
-
26
- // Returns the start of the memory range.
27
- // For vector v this is NOT necessarily &v[0], see forward().
28
- const T* start() const { return start_; }
29
-
30
- // Returns the length of the vector, in characters.
31
- size_t length() const { return length_; }
32
-
33
- // Returns true if the Vector is front-to-back, false if back-to-front.
34
- // In the latter case, v[0] corresponds to the *end* of the memory range.
35
- size_t forward() const { return is_forward_; }
36
-
37
- // Access individual vector elements - checks bounds in debug mode.
38
- T& operator[](size_t index) const {
39
- DCHECK_LT(index, length_);
40
- return start_[is_forward_ ? index : (length_ - index - 1)];
41
- }
42
-
43
- private:
44
- T* start_;
45
- size_t length_;
46
- bool is_forward_;
47
- };
48
-
49
-
50
- //---------------------------------------------------------------------
51
- // String Search object.
52
- //---------------------------------------------------------------------
53
-
54
- // Class holding constants and methods that apply to all string search variants,
55
- // independently of subject and pattern char size.
56
- class StringSearchBase {
57
- protected:
58
- // Cap on the maximal shift in the Boyer-Moore implementation. By setting a
59
- // limit, we can fix the size of tables. For a needle longer than this limit,
60
- // search will not be optimal, since we only build tables for a suffix
61
- // of the string, but it is a safe approximation.
62
- static const int kBMMaxShift = 250;
63
-
64
- // Reduce alphabet to this size.
65
- // One of the tables used by Boyer-Moore and Boyer-Moore-Horspool has size
66
- // proportional to the input alphabet. We reduce the alphabet size by
67
- // equating input characters modulo a smaller alphabet size. This gives
68
- // a potentially less efficient searching, but is a safe approximation.
69
- // For needles using only characters in the same Unicode 256-code point page,
70
- // there is no search speed degradation.
71
- static const int kLatin1AlphabetSize = 256;
72
- static const int kUC16AlphabetSize = 256;
73
-
74
- // Bad-char shift table stored in the state. It's length is the alphabet size.
75
- // For patterns below this length, the skip length of Boyer-Moore is too short
76
- // to compensate for the algorithmic overhead compared to simple brute force.
77
- static const int kBMMinPatternLength = 8;
78
-
79
- // Store for the BoyerMoore(Horspool) bad char shift table.
80
- int bad_char_shift_table_[kUC16AlphabetSize];
81
- // Store for the BoyerMoore good suffix shift table.
82
- int good_suffix_shift_table_[kBMMaxShift + 1];
83
- // Table used temporarily while building the BoyerMoore good suffix
84
- // shift table.
85
- int suffix_table_[kBMMaxShift + 1];
86
- };
87
-
88
- template <typename Char>
89
- class StringSearch : private StringSearchBase {
90
- public:
91
- typedef stringsearch::Vector<const Char> Vector;
92
-
93
- explicit StringSearch(Vector pattern)
94
- : pattern_(pattern), start_(0) {
95
- if (pattern.length() >= kBMMaxShift) {
96
- start_ = pattern.length() - kBMMaxShift;
97
- }
98
-
99
- size_t pattern_length = pattern_.length();
100
- CHECK_GT(pattern_length, 0);
101
- if (pattern_length < kBMMinPatternLength) {
102
- if (pattern_length == 1) {
103
- strategy_ = SearchStrategy::kSingleChar;
104
- return;
105
- }
106
- strategy_ = SearchStrategy::kLinear;
107
- return;
108
- }
109
- strategy_ = SearchStrategy::kInitial;
110
- }
111
-
112
- size_t Search(Vector subject, size_t index) {
113
- switch (strategy_) {
114
- case kBoyerMooreHorspool:
115
- return BoyerMooreHorspoolSearch(subject, index);
116
- case kBoyerMoore:
117
- return BoyerMooreSearch(subject, index);
118
- case kInitial:
119
- return InitialSearch(subject, index);
120
- case kLinear:
121
- return LinearSearch(subject, index);
122
- case kSingleChar:
123
- return SingleCharSearch(subject, index);
124
- }
125
- UNREACHABLE();
126
- }
127
-
128
- static inline int AlphabetSize() {
129
- if (sizeof(Char) == 1) {
130
- // Latin1 needle.
131
- return kLatin1AlphabetSize;
132
- } else {
133
- // UC16 needle.
134
- return kUC16AlphabetSize;
135
- }
136
-
137
- static_assert(sizeof(Char) == sizeof(uint8_t) ||
138
- sizeof(Char) == sizeof(uint16_t),
139
- "sizeof(Char) == sizeof(uint16_t) || sizeof(uint8_t)");
140
- }
141
-
142
- private:
143
- typedef size_t (StringSearch::*SearchFunction)(Vector, size_t);
144
- size_t SingleCharSearch(Vector subject, size_t start_index);
145
- size_t LinearSearch(Vector subject, size_t start_index);
146
- size_t InitialSearch(Vector subject, size_t start_index);
147
- size_t BoyerMooreHorspoolSearch(Vector subject, size_t start_index);
148
- size_t BoyerMooreSearch(Vector subject, size_t start_index);
149
-
150
- void PopulateBoyerMooreHorspoolTable();
151
-
152
- void PopulateBoyerMooreTable();
153
-
154
- static inline int CharOccurrence(int* bad_char_occurrence,
155
- Char char_code) {
156
- if (sizeof(Char) == 1) {
157
- return bad_char_occurrence[static_cast<int>(char_code)];
158
- }
159
- // Both pattern and subject are UC16. Reduce character to equivalence class.
160
- int equiv_class = char_code % kUC16AlphabetSize;
161
- return bad_char_occurrence[equiv_class];
162
- }
163
-
164
- enum SearchStrategy {
165
- kBoyerMooreHorspool,
166
- kBoyerMoore,
167
- kInitial,
168
- kLinear,
169
- kSingleChar,
170
- };
171
-
172
- // The pattern to search for.
173
- Vector pattern_;
174
- SearchStrategy strategy_;
175
- // Cache value of Max(0, pattern_length() - kBMMaxShift)
176
- size_t start_;
177
- };
178
-
179
-
180
- template <typename T, typename U>
181
- inline T AlignDown(T value, U alignment) {
182
- return reinterpret_cast<T>(
183
- (reinterpret_cast<uintptr_t>(value) & ~(alignment - 1)));
184
- }
185
-
186
-
187
- inline uint8_t GetHighestValueByte(uint16_t character) {
188
- return std::max(static_cast<uint8_t>(character & 0xFF),
189
- static_cast<uint8_t>(character >> 8));
190
- }
191
-
192
-
193
- inline uint8_t GetHighestValueByte(uint8_t character) { return character; }
194
-
195
-
196
- // Searches for a byte value in a memory buffer, back to front.
197
- // Uses memrchr(3) on systems which support it, for speed.
198
- // Falls back to a vanilla for loop on non-GNU systems such as Windows.
199
- inline const void* MemrchrFill(const void* haystack, uint8_t needle,
200
- size_t haystack_len) {
201
- #ifdef _GNU_SOURCE
202
- return memrchr(haystack, needle, haystack_len);
203
- #else
204
- const uint8_t* haystack8 = static_cast<const uint8_t*>(haystack);
205
- for (size_t i = haystack_len - 1; i != static_cast<size_t>(-1); i--) {
206
- if (haystack8[i] == needle) {
207
- return haystack8 + i;
208
- }
209
- }
210
- return nullptr;
211
- #endif
212
- }
213
-
214
-
215
- // Finds the first occurrence of *two-byte* character pattern[0] in the string
216
- // `subject`. Does not check that the whole pattern matches.
217
- template <typename Char>
218
- inline size_t FindFirstCharacter(Vector<const Char> pattern,
219
- Vector<const Char> subject, size_t index) {
220
- const Char pattern_first_char = pattern[0];
221
- const size_t max_n = (subject.length() - pattern.length() + 1);
222
-
223
- // For speed, search for the more `rare` of the two bytes in pattern[0]
224
- // using memchr / memrchr (which are much faster than a simple for loop).
225
- const uint8_t search_byte = GetHighestValueByte(pattern_first_char);
226
- size_t pos = index;
227
- do {
228
- const size_t bytes_to_search = (max_n - pos) * sizeof(Char);
229
- const void* void_pos;
230
- if (subject.forward()) {
231
- // Assert that bytes_to_search won't overflow
232
- CHECK_LE(pos, max_n);
233
- CHECK_LE(max_n - pos, SIZE_MAX / sizeof(Char));
234
- void_pos = memchr(subject.start() + pos, search_byte, bytes_to_search);
235
- } else {
236
- CHECK_LE(pos, subject.length());
237
- CHECK_LE(subject.length() - pos, SIZE_MAX / sizeof(Char));
238
- void_pos = MemrchrFill(subject.start() + pattern.length() - 1,
239
- search_byte,
240
- bytes_to_search);
241
- }
242
- const Char* char_pos = static_cast<const Char*>(void_pos);
243
- if (char_pos == nullptr)
244
- return subject.length();
245
-
246
- // Then, for each match, verify that the full two bytes match pattern[0].
247
- char_pos = AlignDown(char_pos, sizeof(Char));
248
- size_t raw_pos = static_cast<size_t>(char_pos - subject.start());
249
- pos = subject.forward() ? raw_pos : (subject.length() - raw_pos - 1);
250
- if (subject[pos] == pattern_first_char) {
251
- // Match found, hooray.
252
- return pos;
253
- }
254
- // Search byte matched, but the other byte of pattern[0] didn't. Keep going.
255
- } while (++pos < max_n);
256
-
257
- return subject.length();
258
- }
259
-
260
-
261
- // Finds the first occurrence of the byte pattern[0] in string `subject`.
262
- // Does not verify that the whole pattern matches.
263
- template <>
264
- inline size_t FindFirstCharacter(Vector<const uint8_t> pattern,
265
- Vector<const uint8_t> subject,
266
- size_t index) {
267
- const uint8_t pattern_first_char = pattern[0];
268
- const size_t subj_len = subject.length();
269
- const size_t max_n = (subject.length() - pattern.length() + 1);
270
-
271
- const void* pos;
272
- if (subject.forward()) {
273
- pos = memchr(subject.start() + index, pattern_first_char, max_n - index);
274
- } else {
275
- pos = MemrchrFill(subject.start() + pattern.length() - 1,
276
- pattern_first_char,
277
- max_n - index);
278
- }
279
- const uint8_t* char_pos = static_cast<const uint8_t*>(pos);
280
- if (char_pos == nullptr) {
281
- return subj_len;
282
- }
283
-
284
- size_t raw_pos = static_cast<size_t>(char_pos - subject.start());
285
- return subject.forward() ? raw_pos : (subj_len - raw_pos - 1);
286
- }
287
-
288
- //---------------------------------------------------------------------
289
- // Single Character Pattern Search Strategy
290
- //---------------------------------------------------------------------
291
-
292
- template <typename Char>
293
- size_t StringSearch<Char>::SingleCharSearch(
294
- Vector subject,
295
- size_t index) {
296
- CHECK_EQ(1, pattern_.length());
297
- return FindFirstCharacter(pattern_, subject, index);
298
- }
299
-
300
- //---------------------------------------------------------------------
301
- // Linear Search Strategy
302
- //---------------------------------------------------------------------
303
-
304
- // Simple linear search for short patterns. Never bails out.
305
- template <typename Char>
306
- size_t StringSearch<Char>::LinearSearch(
307
- Vector subject,
308
- size_t index) {
309
- CHECK_GT(pattern_.length(), 1);
310
- const size_t n = subject.length() - pattern_.length();
311
- for (size_t i = index; i <= n; i++) {
312
- i = FindFirstCharacter(pattern_, subject, i);
313
- if (i == subject.length())
314
- return subject.length();
315
- CHECK_LE(i, n);
316
-
317
- bool matches = true;
318
- for (size_t j = 1; j < pattern_.length(); j++) {
319
- if (pattern_[j] != subject[i + j]) {
320
- matches = false;
321
- break;
322
- }
323
- }
324
- if (matches) {
325
- return i;
326
- }
327
- }
328
- return subject.length();
329
- }
330
-
331
- //---------------------------------------------------------------------
332
- // Boyer-Moore string search
333
- //---------------------------------------------------------------------
334
-
335
- template <typename Char>
336
- size_t StringSearch<Char>::BoyerMooreSearch(
337
- Vector subject,
338
- size_t start_index) {
339
- const size_t subject_length = subject.length();
340
- const size_t pattern_length = pattern_.length();
341
- // Only preprocess at most kBMMaxShift last characters of pattern.
342
- size_t start = start_;
343
-
344
- int* bad_char_occurrence = bad_char_shift_table_;
345
- int* good_suffix_shift = good_suffix_shift_table_ - start_;
346
-
347
- Char last_char = pattern_[pattern_length - 1];
348
- size_t index = start_index;
349
- // Continue search from i.
350
- while (index <= subject_length - pattern_length) {
351
- size_t j = pattern_length - 1;
352
- int c;
353
- while (last_char != (c = subject[index + j])) {
354
- int shift = j - CharOccurrence(bad_char_occurrence, c);
355
- index += shift;
356
- if (index > subject_length - pattern_length) {
357
- return subject.length();
358
- }
359
- }
360
- while (pattern_[j] == (c = subject[index + j])) {
361
- if (j == 0) {
362
- return index;
363
- }
364
- j--;
365
- }
366
- if (j < start) {
367
- // we have matched more than our tables allow us to be smart about.
368
- // Fall back on BMH shift.
369
- index += pattern_length - 1 -
370
- CharOccurrence(bad_char_occurrence, last_char);
371
- } else {
372
- int gs_shift = good_suffix_shift[j + 1];
373
- int bc_occ = CharOccurrence(bad_char_occurrence, c);
374
- int shift = j - bc_occ;
375
- if (gs_shift > shift) {
376
- shift = gs_shift;
377
- }
378
- index += shift;
379
- }
380
- }
381
-
382
- return subject.length();
383
- }
384
-
385
- template <typename Char>
386
- void StringSearch<Char>::PopulateBoyerMooreTable() {
387
- const size_t pattern_length = pattern_.length();
388
- // Only look at the last kBMMaxShift characters of pattern (from start_
389
- // to pattern_length).
390
- const size_t start = start_;
391
- const size_t length = pattern_length - start;
392
-
393
- // Biased tables so that we can use pattern indices as table indices,
394
- // even if we only cover the part of the pattern from offset start.
395
- int* shift_table = good_suffix_shift_table_ - start_;
396
- int* suffix_table = suffix_table_ - start_;
397
-
398
- // Initialize table.
399
- for (size_t i = start; i < pattern_length; i++) {
400
- shift_table[i] = length;
401
- }
402
- shift_table[pattern_length] = 1;
403
- suffix_table[pattern_length] = pattern_length + 1;
404
-
405
- if (pattern_length <= start) {
406
- return;
407
- }
408
-
409
- // Find suffixes.
410
- Char last_char = pattern_[pattern_length - 1];
411
- size_t suffix = pattern_length + 1;
412
- {
413
- size_t i = pattern_length;
414
- while (i > start) {
415
- Char c = pattern_[i - 1];
416
- while (suffix <= pattern_length && c != pattern_[suffix - 1]) {
417
- if (static_cast<size_t>(shift_table[suffix]) == length) {
418
- shift_table[suffix] = suffix - i;
419
- }
420
- suffix = suffix_table[suffix];
421
- }
422
- suffix_table[--i] = --suffix;
423
- if (suffix == pattern_length) {
424
- // No suffix to extend, so we check against last_char only.
425
- while ((i > start) && (pattern_[i - 1] != last_char)) {
426
- if (static_cast<size_t>(shift_table[pattern_length]) == length) {
427
- shift_table[pattern_length] = pattern_length - i;
428
- }
429
- suffix_table[--i] = pattern_length;
430
- }
431
- if (i > start) {
432
- suffix_table[--i] = --suffix;
433
- }
434
- }
435
- }
436
- }
437
- // Build shift table using suffixes.
438
- if (suffix < pattern_length) {
439
- for (size_t i = start; i <= pattern_length; i++) {
440
- if (static_cast<size_t>(shift_table[i]) == length) {
441
- shift_table[i] = suffix - start;
442
- }
443
- if (i == suffix) {
444
- suffix = suffix_table[suffix];
445
- }
446
- }
447
- }
448
- }
449
-
450
- //---------------------------------------------------------------------
451
- // Boyer-Moore-Horspool string search.
452
- //---------------------------------------------------------------------
453
-
454
- template <typename Char>
455
- size_t StringSearch<Char>::BoyerMooreHorspoolSearch(
456
- Vector subject,
457
- size_t start_index) {
458
- const size_t subject_length = subject.length();
459
- const size_t pattern_length = pattern_.length();
460
- int* char_occurrences = bad_char_shift_table_;
461
- int64_t badness = -pattern_length;
462
-
463
- // How bad we are doing without a good-suffix table.
464
- Char last_char = pattern_[pattern_length - 1];
465
- int last_char_shift =
466
- pattern_length - 1 -
467
- CharOccurrence(char_occurrences, last_char);
468
-
469
- // Perform search
470
- size_t index = start_index; // No matches found prior to this index.
471
- while (index <= subject_length - pattern_length) {
472
- size_t j = pattern_length - 1;
473
- int subject_char;
474
- while (last_char != (subject_char = subject[index + j])) {
475
- int bc_occ = CharOccurrence(char_occurrences, subject_char);
476
- int shift = j - bc_occ;
477
- index += shift;
478
- badness += 1 - shift; // at most zero, so badness cannot increase.
479
- if (index > subject_length - pattern_length) {
480
- return subject_length;
481
- }
482
- }
483
- j--;
484
- while (pattern_[j] == (subject[index + j])) {
485
- if (j == 0) {
486
- return index;
487
- }
488
- j--;
489
- }
490
- index += last_char_shift;
491
- // Badness increases by the number of characters we have
492
- // checked, and decreases by the number of characters we
493
- // can skip by shifting. It's a measure of how we are doing
494
- // compared to reading each character exactly once.
495
- badness += (pattern_length - j) - last_char_shift;
496
- if (badness > 0) {
497
- PopulateBoyerMooreTable();
498
- strategy_ = SearchStrategy::kBoyerMoore;
499
- return BoyerMooreSearch(subject, index);
500
- }
501
- }
502
- return subject.length();
503
- }
504
-
505
- template <typename Char>
506
- void StringSearch<Char>::PopulateBoyerMooreHorspoolTable() {
507
- const size_t pattern_length = pattern_.length();
508
-
509
- int* bad_char_occurrence = bad_char_shift_table_;
510
-
511
- // Only preprocess at most kBMMaxShift last characters of pattern.
512
- const size_t start = start_;
513
- // Run forwards to populate bad_char_table, so that *last* instance
514
- // of character equivalence class is the one registered.
515
- // Notice: Doesn't include the last character.
516
- const size_t table_size = AlphabetSize();
517
- if (start == 0) {
518
- // All patterns less than kBMMaxShift in length.
519
- memset(bad_char_occurrence, -1, table_size * sizeof(*bad_char_occurrence));
520
- } else {
521
- for (size_t i = 0; i < table_size; i++) {
522
- bad_char_occurrence[i] = start - 1;
523
- }
524
- }
525
- for (size_t i = start; i < pattern_length - 1; i++) {
526
- Char c = pattern_[i];
527
- int bucket = (sizeof(Char) == 1) ? c : c % AlphabetSize();
528
- bad_char_occurrence[bucket] = i;
529
- }
530
- }
531
-
532
- //---------------------------------------------------------------------
533
- // Linear string search with bailout to BMH.
534
- //---------------------------------------------------------------------
535
-
536
- // Simple linear search for short patterns, which bails out if the string
537
- // isn't found very early in the subject. Upgrades to BoyerMooreHorspool.
538
- template <typename Char>
539
- size_t StringSearch<Char>::InitialSearch(
540
- Vector subject,
541
- size_t index) {
542
- const size_t pattern_length = pattern_.length();
543
- // Badness is a count of how much work we have done. When we have
544
- // done enough work we decide it's probably worth switching to a better
545
- // algorithm.
546
- int64_t badness = -10 - (pattern_length << 2);
547
-
548
- // We know our pattern is at least 2 characters, we cache the first so
549
- // the common case of the first character not matching is faster.
550
- for (size_t i = index, n = subject.length() - pattern_length; i <= n; i++) {
551
- badness++;
552
- if (badness <= 0) {
553
- i = FindFirstCharacter(pattern_, subject, i);
554
- if (i == subject.length())
555
- return subject.length();
556
- CHECK_LE(i, n);
557
- size_t j = 1;
558
- do {
559
- if (pattern_[j] != subject[i + j]) {
560
- break;
561
- }
562
- j++;
563
- } while (j < pattern_length);
564
- if (j == pattern_length) {
565
- return i;
566
- }
567
- badness += j;
568
- } else {
569
- PopulateBoyerMooreHorspoolTable();
570
- strategy_ = SearchStrategy::kBoyerMooreHorspool;
571
- return BoyerMooreHorspoolSearch(subject, i);
572
- }
573
- }
574
- return subject.length();
575
- }
576
-
577
- // Perform a single stand-alone search.
578
- // If searching multiple times for the same pattern, a search
579
- // object should be constructed once and the Search function then called
580
- // for each search.
581
- template <typename Char>
582
- size_t SearchString(Vector<const Char> subject,
583
- Vector<const Char> pattern,
584
- size_t start_index) {
585
- StringSearch<Char> search(pattern);
586
- return search.Search(subject, start_index);
587
- }
588
- } // namespace stringsearch
589
- } // namespace node
590
-
591
- namespace node {
592
-
593
- template <typename Char>
594
- size_t SearchString(const Char* haystack,
595
- size_t haystack_length,
596
- const Char* needle,
597
- size_t needle_length,
598
- size_t start_index,
599
- bool is_forward) {
600
- if (haystack_length < needle_length) return haystack_length;
601
- // To do a reverse search (lastIndexOf instead of indexOf) without redundant
602
- // code, create two vectors that are reversed views into the input strings.
603
- // For example, v_needle[0] would return the *last* character of the needle.
604
- // So we're searching for the first instance of rev(needle) in rev(haystack)
605
- stringsearch::Vector<const Char> v_needle(needle, needle_length, is_forward);
606
- stringsearch::Vector<const Char> v_haystack(
607
- haystack, haystack_length, is_forward);
608
- size_t diff = haystack_length - needle_length;
609
- size_t relative_start_index;
610
- if (is_forward) {
611
- relative_start_index = start_index;
612
- } else if (diff < start_index) {
613
- relative_start_index = 0;
614
- } else {
615
- relative_start_index = diff - start_index;
616
- }
617
- size_t pos = node::stringsearch::SearchString(
618
- v_haystack, v_needle, relative_start_index);
619
- if (pos == haystack_length) {
620
- // not found
621
- return pos;
622
- }
623
- return is_forward ? pos : (haystack_length - needle_length - pos);
624
- }
625
-
626
- template <size_t N>
627
- size_t SearchString(const char* haystack, size_t haystack_length,
628
- const char (&needle)[N]) {
629
- return SearchString(
630
- reinterpret_cast<const uint8_t*>(haystack), haystack_length,
631
- reinterpret_cast<const uint8_t*>(needle), N - 1, 0, true);
632
- }
633
-
634
- } // namespace node
635
-
636
- #endif // defined(NODE_WANT_INTERNALS) && NODE_WANT_INTERNALS
637
-
638
- #endif // SRC_STRING_SEARCH_H_