recker 1.0.43 → 1.0.44

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 (459) hide show
  1. package/README.md +47 -0
  2. package/dist/bin/recker-linux-x64 +0 -0
  3. package/dist/bin/recker-macos-x64 +0 -0
  4. package/dist/bin/recker-win-x64.exe +0 -0
  5. package/dist/bin/rek.cjs +85152 -100207
  6. package/dist/browser/ai/adaptive-timeout.d.ts +50 -0
  7. package/dist/browser/ai/adaptive-timeout.js +208 -0
  8. package/dist/browser/ai/client.d.ts +22 -0
  9. package/dist/browser/ai/client.js +294 -0
  10. package/dist/browser/ai/index.d.ts +14 -0
  11. package/dist/browser/ai/index.js +11 -0
  12. package/dist/browser/ai/providers/anthropic.d.ts +63 -0
  13. package/dist/browser/ai/providers/anthropic.js +370 -0
  14. package/dist/browser/ai/providers/base.d.ts +48 -0
  15. package/dist/browser/ai/providers/base.js +150 -0
  16. package/dist/browser/ai/providers/google.d.ts +59 -0
  17. package/dist/browser/ai/providers/google.js +305 -0
  18. package/dist/browser/ai/providers/ollama.d.ts +44 -0
  19. package/dist/browser/ai/providers/ollama.js +240 -0
  20. package/dist/browser/ai/providers/openai.d.ts +64 -0
  21. package/dist/browser/ai/providers/openai.js +298 -0
  22. package/dist/browser/ai/rate-limiter.d.ts +43 -0
  23. package/dist/browser/ai/rate-limiter.js +215 -0
  24. package/dist/browser/ai/vector/index.d.ts +2 -0
  25. package/dist/browser/ai/vector/index.js +2 -0
  26. package/dist/browser/ai/vector/similarity.d.ts +2 -0
  27. package/dist/browser/ai/vector/similarity.js +27 -0
  28. package/dist/browser/ai/vector/store.d.ts +27 -0
  29. package/dist/browser/ai/vector/store.js +82 -0
  30. package/dist/browser/browser/cache.d.ts +2 -40
  31. package/dist/browser/browser/cache.js +2 -199
  32. package/dist/browser/browser/index.d.ts +8 -0
  33. package/dist/browser/browser/index.js +8 -0
  34. package/dist/browser/browser/recker.d.ts +8 -1
  35. package/dist/browser/browser/recker.js +8 -2
  36. package/dist/browser/cache/indexed-db.d.ts +10 -0
  37. package/dist/browser/cache/indexed-db.js +88 -0
  38. package/dist/browser/cache/service-worker-cache.d.ts +18 -0
  39. package/dist/browser/cache/service-worker-cache.js +103 -0
  40. package/dist/browser/cache.d.ts +2 -40
  41. package/dist/browser/cache.js +2 -199
  42. package/dist/browser/constants/user-agents.d.ts +7 -0
  43. package/dist/browser/constants/user-agents.js +7 -0
  44. package/dist/browser/core/client.d.ts +2 -0
  45. package/dist/browser/core/client.js +19 -1
  46. package/dist/browser/index.d.ts +8 -0
  47. package/dist/browser/index.js +8 -0
  48. package/dist/browser/plugins/har-recorder.d.ts +40 -0
  49. package/dist/browser/plugins/har-recorder.js +120 -0
  50. package/dist/browser/plugins/network-simulation.d.ts +7 -0
  51. package/dist/browser/plugins/network-simulation.js +13 -0
  52. package/dist/browser/presets/android.d.ts +2 -0
  53. package/dist/browser/presets/android.js +16 -0
  54. package/dist/browser/presets/anthropic.d.ts +8 -0
  55. package/dist/browser/presets/anthropic.js +27 -0
  56. package/dist/browser/presets/aws.d.ts +19 -0
  57. package/dist/browser/presets/aws.js +68 -0
  58. package/dist/browser/presets/azure-openai.d.ts +10 -0
  59. package/dist/browser/presets/azure-openai.js +35 -0
  60. package/dist/browser/presets/azure.d.ts +41 -0
  61. package/dist/browser/presets/azure.js +104 -0
  62. package/dist/browser/presets/chaturbate.d.ts +2 -0
  63. package/dist/browser/presets/chaturbate.js +17 -0
  64. package/dist/browser/presets/cloudflare.d.ts +12 -0
  65. package/dist/browser/presets/cloudflare.js +39 -0
  66. package/dist/browser/presets/cohere.d.ts +7 -0
  67. package/dist/browser/presets/cohere.js +22 -0
  68. package/dist/browser/presets/deepseek.d.ts +7 -0
  69. package/dist/browser/presets/deepseek.js +22 -0
  70. package/dist/browser/presets/digitalocean.d.ts +5 -0
  71. package/dist/browser/presets/digitalocean.js +16 -0
  72. package/dist/browser/presets/discord.d.ts +6 -0
  73. package/dist/browser/presets/discord.js +17 -0
  74. package/dist/browser/presets/elevenlabs.d.ts +6 -0
  75. package/dist/browser/presets/elevenlabs.js +20 -0
  76. package/dist/browser/presets/enhancers.d.ts +20 -0
  77. package/dist/browser/presets/enhancers.js +85 -0
  78. package/dist/browser/presets/fireworks.d.ts +7 -0
  79. package/dist/browser/presets/fireworks.js +22 -0
  80. package/dist/browser/presets/gcp.d.ts +34 -0
  81. package/dist/browser/presets/gcp.js +91 -0
  82. package/dist/browser/presets/gemini.d.ts +7 -0
  83. package/dist/browser/presets/gemini.js +23 -0
  84. package/dist/browser/presets/github.d.ts +6 -0
  85. package/dist/browser/presets/github.js +17 -0
  86. package/dist/browser/presets/gitlab.d.ts +6 -0
  87. package/dist/browser/presets/gitlab.js +16 -0
  88. package/dist/browser/presets/groq.d.ts +7 -0
  89. package/dist/browser/presets/groq.js +22 -0
  90. package/dist/browser/presets/hubspot.d.ts +9 -0
  91. package/dist/browser/presets/hubspot.js +28 -0
  92. package/dist/browser/presets/huggingface.d.ts +7 -0
  93. package/dist/browser/presets/huggingface.js +23 -0
  94. package/dist/browser/presets/index.d.ts +47 -0
  95. package/dist/browser/presets/index.js +47 -0
  96. package/dist/browser/presets/ios.d.ts +2 -0
  97. package/dist/browser/presets/ios.js +13 -0
  98. package/dist/browser/presets/linear.d.ts +5 -0
  99. package/dist/browser/presets/linear.js +16 -0
  100. package/dist/browser/presets/mailgun.d.ts +7 -0
  101. package/dist/browser/presets/mailgun.js +20 -0
  102. package/dist/browser/presets/meta.d.ts +10 -0
  103. package/dist/browser/presets/meta.js +33 -0
  104. package/dist/browser/presets/mistral.d.ts +7 -0
  105. package/dist/browser/presets/mistral.js +22 -0
  106. package/dist/browser/presets/notion.d.ts +6 -0
  107. package/dist/browser/presets/notion.js +17 -0
  108. package/dist/browser/presets/openai.d.ts +9 -0
  109. package/dist/browser/presets/openai.js +30 -0
  110. package/dist/browser/presets/oracle.d.ts +19 -0
  111. package/dist/browser/presets/oracle.js +117 -0
  112. package/dist/browser/presets/perplexity.d.ts +7 -0
  113. package/dist/browser/presets/perplexity.js +22 -0
  114. package/dist/browser/presets/pinecone.d.ts +8 -0
  115. package/dist/browser/presets/pinecone.js +42 -0
  116. package/dist/browser/presets/registry.d.ts +23 -0
  117. package/dist/browser/presets/registry.js +519 -0
  118. package/dist/browser/presets/replicate.d.ts +7 -0
  119. package/dist/browser/presets/replicate.js +23 -0
  120. package/dist/browser/presets/sendgrid.d.ts +6 -0
  121. package/dist/browser/presets/sendgrid.js +20 -0
  122. package/dist/browser/presets/sentry.d.ts +11 -0
  123. package/dist/browser/presets/sentry.js +48 -0
  124. package/dist/browser/presets/sinch.d.ts +9 -0
  125. package/dist/browser/presets/sinch.js +39 -0
  126. package/dist/browser/presets/slack.d.ts +5 -0
  127. package/dist/browser/presets/slack.js +16 -0
  128. package/dist/browser/presets/square.d.ts +10 -0
  129. package/dist/browser/presets/square.js +33 -0
  130. package/dist/browser/presets/stripe.d.ts +7 -0
  131. package/dist/browser/presets/stripe.js +23 -0
  132. package/dist/browser/presets/supabase.d.ts +6 -0
  133. package/dist/browser/presets/supabase.js +18 -0
  134. package/dist/browser/presets/tiktok.d.ts +10 -0
  135. package/dist/browser/presets/tiktok.js +38 -0
  136. package/dist/browser/presets/together.d.ts +7 -0
  137. package/dist/browser/presets/together.js +22 -0
  138. package/dist/browser/presets/twilio.d.ts +6 -0
  139. package/dist/browser/presets/twilio.js +17 -0
  140. package/dist/browser/presets/vercel.d.ts +6 -0
  141. package/dist/browser/presets/vercel.js +23 -0
  142. package/dist/browser/presets/vultr.d.ts +5 -0
  143. package/dist/browser/presets/vultr.js +16 -0
  144. package/dist/browser/presets/xai.d.ts +8 -0
  145. package/dist/browser/presets/xai.js +23 -0
  146. package/dist/browser/presets/youtube.d.ts +5 -0
  147. package/dist/browser/presets/youtube.js +20 -0
  148. package/dist/browser/recker.d.ts +8 -1
  149. package/dist/browser/recker.js +8 -2
  150. package/dist/browser/scrape/document.d.ts +5 -4
  151. package/dist/browser/scrape/document.js +89 -76
  152. package/dist/browser/scrape/element.d.ts +10 -8
  153. package/dist/browser/scrape/element.js +295 -81
  154. package/dist/browser/scrape/extractors.d.ts +11 -11
  155. package/dist/browser/scrape/extractors.js +145 -113
  156. package/dist/browser/scrape/parser/back.d.ts +1 -0
  157. package/dist/browser/scrape/parser/back.js +3 -0
  158. package/dist/browser/scrape/parser/index.d.ts +20 -0
  159. package/dist/browser/scrape/parser/index.js +19 -0
  160. package/dist/browser/scrape/parser/matcher.d.ts +30 -0
  161. package/dist/browser/scrape/parser/matcher.js +99 -0
  162. package/dist/browser/scrape/parser/nodes/comment.d.ts +12 -0
  163. package/dist/browser/scrape/parser/nodes/comment.js +21 -0
  164. package/dist/browser/scrape/parser/nodes/html.d.ts +110 -0
  165. package/dist/browser/scrape/parser/nodes/html.js +978 -0
  166. package/dist/browser/scrape/parser/nodes/node.d.ts +18 -0
  167. package/dist/browser/scrape/parser/nodes/node.js +31 -0
  168. package/dist/browser/scrape/parser/nodes/text.d.ts +14 -0
  169. package/dist/browser/scrape/parser/nodes/text.js +30 -0
  170. package/dist/browser/scrape/parser/nodes/type.d.ts +6 -0
  171. package/dist/browser/scrape/parser/nodes/type.js +7 -0
  172. package/dist/browser/scrape/parser/parse.d.ts +1 -0
  173. package/dist/browser/scrape/parser/parse.js +1 -0
  174. package/dist/browser/scrape/parser/valid.d.ts +2 -0
  175. package/dist/browser/scrape/parser/valid.js +5 -0
  176. package/dist/browser/scrape/parser/void-tag.d.ts +7 -0
  177. package/dist/browser/scrape/parser/void-tag.js +43 -0
  178. package/dist/browser/scrape/types.d.ts +7 -0
  179. package/dist/browser/seo/analyzer.d.ts +59 -0
  180. package/dist/browser/seo/analyzer.js +1399 -0
  181. package/dist/browser/seo/keywords.d.ts +16 -0
  182. package/dist/browser/seo/keywords.js +55 -0
  183. package/dist/browser/seo/rules/accessibility.d.ts +2 -0
  184. package/dist/browser/seo/rules/accessibility.js +733 -0
  185. package/dist/browser/seo/rules/ai-search.d.ts +2 -0
  186. package/dist/browser/seo/rules/ai-search.js +436 -0
  187. package/dist/browser/seo/rules/analytics.d.ts +2 -0
  188. package/dist/browser/seo/rules/analytics.js +306 -0
  189. package/dist/browser/seo/rules/best-practices.d.ts +2 -0
  190. package/dist/browser/seo/rules/best-practices.js +195 -0
  191. package/dist/browser/seo/rules/canonical.d.ts +12 -0
  192. package/dist/browser/seo/rules/canonical.js +270 -0
  193. package/dist/browser/seo/rules/content.d.ts +2 -0
  194. package/dist/browser/seo/rules/content.js +522 -0
  195. package/dist/browser/seo/rules/crawl.d.ts +2 -0
  196. package/dist/browser/seo/rules/crawl.js +435 -0
  197. package/dist/browser/seo/rules/cwv.d.ts +2 -0
  198. package/dist/browser/seo/rules/cwv.js +248 -0
  199. package/dist/browser/seo/rules/ecommerce.d.ts +2 -0
  200. package/dist/browser/seo/rules/ecommerce.js +312 -0
  201. package/dist/browser/seo/rules/i18n.d.ts +2 -0
  202. package/dist/browser/seo/rules/i18n.js +288 -0
  203. package/dist/browser/seo/rules/images.d.ts +2 -0
  204. package/dist/browser/seo/rules/images.js +255 -0
  205. package/dist/browser/seo/rules/index.d.ts +52 -0
  206. package/dist/browser/seo/rules/index.js +159 -0
  207. package/dist/browser/seo/rules/internal-linking.d.ts +2 -0
  208. package/dist/browser/seo/rules/internal-linking.js +394 -0
  209. package/dist/browser/seo/rules/links.d.ts +2 -0
  210. package/dist/browser/seo/rules/links.js +498 -0
  211. package/dist/browser/seo/rules/local.d.ts +2 -0
  212. package/dist/browser/seo/rules/local.js +289 -0
  213. package/dist/browser/seo/rules/meta.d.ts +2 -0
  214. package/dist/browser/seo/rules/meta.js +805 -0
  215. package/dist/browser/seo/rules/mobile.d.ts +2 -0
  216. package/dist/browser/seo/rules/mobile.js +161 -0
  217. package/dist/browser/seo/rules/performance.d.ts +2 -0
  218. package/dist/browser/seo/rules/performance.js +738 -0
  219. package/dist/browser/seo/rules/pwa.d.ts +2 -0
  220. package/dist/browser/seo/rules/pwa.js +299 -0
  221. package/dist/browser/seo/rules/readability.d.ts +2 -0
  222. package/dist/browser/seo/rules/readability.js +264 -0
  223. package/dist/browser/seo/rules/redirects.d.ts +16 -0
  224. package/dist/browser/seo/rules/redirects.js +199 -0
  225. package/dist/browser/seo/rules/resources.d.ts +2 -0
  226. package/dist/browser/seo/rules/resources.js +390 -0
  227. package/dist/browser/seo/rules/schema.d.ts +2 -0
  228. package/dist/browser/seo/rules/schema.js +379 -0
  229. package/dist/browser/seo/rules/security.d.ts +2 -0
  230. package/dist/browser/seo/rules/security.js +877 -0
  231. package/dist/browser/seo/rules/social.d.ts +2 -0
  232. package/dist/browser/seo/rules/social.js +603 -0
  233. package/dist/browser/seo/rules/structural.d.ts +2 -0
  234. package/dist/browser/seo/rules/structural.js +223 -0
  235. package/dist/browser/seo/rules/technical-advanced.d.ts +10 -0
  236. package/dist/browser/seo/rules/technical-advanced.js +289 -0
  237. package/dist/browser/seo/rules/technical.d.ts +2 -0
  238. package/dist/browser/seo/rules/technical.js +480 -0
  239. package/dist/browser/seo/rules/thresholds.d.ts +196 -0
  240. package/dist/browser/seo/rules/thresholds.js +118 -0
  241. package/dist/browser/seo/rules/types.d.ts +498 -0
  242. package/dist/browser/seo/rules/types.js +11 -0
  243. package/dist/browser/seo/types.d.ts +211 -0
  244. package/dist/browser/seo/types.js +1 -0
  245. package/dist/browser/transport/curl.d.ts +4 -0
  246. package/dist/browser/transport/curl.js +101 -0
  247. package/dist/browser/transport/undici.js +1 -2
  248. package/dist/browser/transport/worker.d.ts +18 -0
  249. package/dist/browser/transport/worker.js +278 -0
  250. package/dist/browser/types/index.d.ts +4 -1
  251. package/dist/browser/utils/binary-manager.d.ts +4 -0
  252. package/dist/browser/utils/binary-manager.js +72 -0
  253. package/dist/browser/utils/user-agent.js +2 -13
  254. package/dist/cache/indexed-db.d.ts +10 -0
  255. package/dist/cache/indexed-db.js +88 -0
  256. package/dist/cache/service-worker-cache.d.ts +18 -0
  257. package/dist/cache/service-worker-cache.js +103 -0
  258. package/dist/cli/commands/ai.d.ts +2 -0
  259. package/dist/cli/commands/ai.js +162 -0
  260. package/dist/cli/commands/bench.d.ts +2 -0
  261. package/dist/cli/commands/bench.js +51 -0
  262. package/dist/cli/commands/dns.d.ts +2 -0
  263. package/dist/cli/commands/dns.js +295 -0
  264. package/dist/cli/commands/har.d.ts +2 -0
  265. package/dist/cli/commands/har.js +171 -0
  266. package/dist/cli/commands/hls.d.ts +2 -0
  267. package/dist/cli/commands/hls.js +192 -0
  268. package/dist/cli/commands/network.d.ts +2 -0
  269. package/dist/cli/commands/network.js +288 -0
  270. package/dist/cli/commands/protocols.d.ts +2 -0
  271. package/dist/cli/commands/protocols.js +344 -0
  272. package/dist/cli/commands/scrape.d.ts +2 -0
  273. package/dist/cli/commands/scrape.js +176 -0
  274. package/dist/cli/commands/security.d.ts +2 -0
  275. package/dist/cli/commands/security.js +57 -0
  276. package/dist/cli/commands/seo.d.ts +2 -0
  277. package/dist/cli/commands/seo.js +125 -0
  278. package/dist/cli/commands/serve.d.ts +2 -0
  279. package/dist/cli/commands/serve.js +531 -0
  280. package/dist/cli/commands/spider.d.ts +3 -0
  281. package/dist/cli/commands/spider.js +456 -0
  282. package/dist/cli/commands/utils.d.ts +2 -0
  283. package/dist/cli/commands/utils.js +176 -0
  284. package/dist/cli/commands/vector.d.ts +2 -0
  285. package/dist/cli/commands/vector.js +158 -0
  286. package/dist/cli/handler.d.ts +2 -2
  287. package/dist/cli/handler.js +6 -6
  288. package/dist/cli/helpers.d.ts +7 -0
  289. package/dist/cli/helpers.js +128 -0
  290. package/dist/cli/index.js +96 -5228
  291. package/dist/cli/parser/help.d.ts +2 -0
  292. package/dist/cli/parser/help.js +52 -0
  293. package/dist/cli/parser/index.d.ts +3 -0
  294. package/dist/cli/parser/index.js +3 -0
  295. package/dist/cli/parser/parser.d.ts +4 -0
  296. package/dist/cli/parser/parser.js +146 -0
  297. package/dist/cli/parser/types.d.ts +41 -0
  298. package/dist/cli/parser/types.js +1 -0
  299. package/dist/cli/presets.d.ts +1 -1
  300. package/dist/cli/presets.js +1 -1
  301. package/dist/cli/router.d.ts +36 -0
  302. package/dist/cli/router.js +195 -0
  303. package/dist/cli/tui/ai-chat.js +1 -1
  304. package/dist/cli/tui/commands/context.d.ts +9 -0
  305. package/dist/cli/tui/commands/context.js +1 -0
  306. package/dist/cli/tui/commands/dns.d.ts +10 -0
  307. package/dist/cli/tui/commands/dns.js +461 -0
  308. package/dist/cli/tui/commands/hls.d.ts +2 -0
  309. package/dist/cli/tui/commands/hls.js +162 -0
  310. package/dist/cli/tui/commands/ip.d.ts +2 -0
  311. package/dist/cli/tui/commands/ip.js +45 -0
  312. package/dist/cli/tui/commands/network.d.ts +3 -0
  313. package/dist/cli/tui/commands/network.js +81 -0
  314. package/dist/cli/tui/commands/protocols.d.ts +6 -0
  315. package/dist/cli/tui/commands/protocols.js +531 -0
  316. package/dist/cli/tui/commands/security.d.ts +2 -0
  317. package/dist/cli/tui/commands/security.js +48 -0
  318. package/dist/cli/tui/commands/seo.d.ts +2 -0
  319. package/dist/cli/tui/commands/seo.js +74 -0
  320. package/dist/cli/tui/context.d.ts +12 -0
  321. package/dist/cli/tui/context.js +1 -0
  322. package/dist/cli/tui/shell.d.ts +11 -20
  323. package/dist/cli/tui/shell.js +216 -1873
  324. package/dist/constants/user-agents.d.ts +7 -0
  325. package/dist/constants/user-agents.js +7 -0
  326. package/dist/core/client.d.ts +2 -0
  327. package/dist/core/client.js +19 -1
  328. package/dist/index.d.ts +1 -0
  329. package/dist/index.js +1 -0
  330. package/dist/mcp/cli.js +2 -3
  331. package/dist/mcp/data/embeddings.json +1 -1
  332. package/dist/mcp/tools/network.js +298 -158
  333. package/dist/plugins/har-player.d.ts +23 -0
  334. package/dist/plugins/har-player.js +49 -0
  335. package/dist/plugins/har-recorder.d.ts +37 -3
  336. package/dist/plugins/har-recorder.js +116 -63
  337. package/dist/plugins/network-simulation.d.ts +7 -0
  338. package/dist/plugins/network-simulation.js +13 -0
  339. package/dist/presets/android.d.ts +2 -0
  340. package/dist/presets/android.js +16 -0
  341. package/dist/presets/chaturbate.d.ts +2 -0
  342. package/dist/presets/chaturbate.js +17 -0
  343. package/dist/presets/elevenlabs.d.ts +6 -0
  344. package/dist/presets/elevenlabs.js +20 -0
  345. package/dist/presets/enhancers.d.ts +20 -0
  346. package/dist/presets/enhancers.js +85 -0
  347. package/dist/presets/hubspot.d.ts +9 -0
  348. package/dist/presets/hubspot.js +28 -0
  349. package/dist/presets/index.d.ts +10 -0
  350. package/dist/presets/index.js +10 -0
  351. package/dist/presets/ios.d.ts +2 -0
  352. package/dist/presets/ios.js +13 -0
  353. package/dist/presets/pinecone.d.ts +8 -0
  354. package/dist/presets/pinecone.js +42 -0
  355. package/dist/presets/registry.js +60 -0
  356. package/dist/presets/sendgrid.d.ts +6 -0
  357. package/dist/presets/sendgrid.js +20 -0
  358. package/dist/presets/sentry.d.ts +11 -0
  359. package/dist/presets/sentry.js +48 -0
  360. package/dist/presets/square.d.ts +10 -0
  361. package/dist/presets/square.js +33 -0
  362. package/dist/recker.d.ts +3 -0
  363. package/dist/recker.js +4 -0
  364. package/dist/scrape/document.d.ts +5 -4
  365. package/dist/scrape/document.js +89 -76
  366. package/dist/scrape/element.d.ts +10 -8
  367. package/dist/scrape/element.js +295 -81
  368. package/dist/scrape/extractors.d.ts +11 -11
  369. package/dist/scrape/extractors.js +145 -113
  370. package/dist/scrape/index.d.ts +2 -0
  371. package/dist/scrape/index.js +1 -0
  372. package/dist/scrape/parser/back.d.ts +1 -0
  373. package/dist/scrape/parser/back.js +3 -0
  374. package/dist/scrape/parser/index.d.ts +20 -0
  375. package/dist/scrape/parser/index.js +19 -0
  376. package/dist/scrape/parser/matcher.d.ts +30 -0
  377. package/dist/scrape/parser/matcher.js +99 -0
  378. package/dist/scrape/parser/nodes/comment.d.ts +12 -0
  379. package/dist/scrape/parser/nodes/comment.js +21 -0
  380. package/dist/scrape/parser/nodes/html.d.ts +110 -0
  381. package/dist/scrape/parser/nodes/html.js +978 -0
  382. package/dist/scrape/parser/nodes/node.d.ts +18 -0
  383. package/dist/scrape/parser/nodes/node.js +31 -0
  384. package/dist/scrape/parser/nodes/text.d.ts +14 -0
  385. package/dist/scrape/parser/nodes/text.js +30 -0
  386. package/dist/scrape/parser/nodes/type.d.ts +6 -0
  387. package/dist/scrape/parser/nodes/type.js +7 -0
  388. package/dist/scrape/parser/parse.d.ts +1 -0
  389. package/dist/scrape/parser/parse.js +1 -0
  390. package/dist/scrape/parser/valid.d.ts +2 -0
  391. package/dist/scrape/parser/valid.js +5 -0
  392. package/dist/scrape/parser/void-tag.d.ts +7 -0
  393. package/dist/scrape/parser/void-tag.js +43 -0
  394. package/dist/scrape/spider.d.ts +19 -0
  395. package/dist/scrape/spider.js +28 -3
  396. package/dist/scrape/types.d.ts +7 -0
  397. package/dist/seo/analyzer.d.ts +15 -5
  398. package/dist/seo/analyzer.js +636 -175
  399. package/dist/seo/formatter.d.ts +16 -0
  400. package/dist/seo/formatter.js +228 -0
  401. package/dist/seo/index.d.ts +2 -0
  402. package/dist/seo/index.js +1 -0
  403. package/dist/seo/keywords.d.ts +16 -0
  404. package/dist/seo/keywords.js +55 -0
  405. package/dist/seo/rules/accessibility.js +96 -57
  406. package/dist/seo/rules/ai-search.js +44 -31
  407. package/dist/seo/rules/analytics.d.ts +2 -0
  408. package/dist/seo/rules/analytics.js +306 -0
  409. package/dist/seo/rules/best-practices.js +21 -14
  410. package/dist/seo/rules/canonical.js +53 -32
  411. package/dist/seo/rules/content.js +317 -31
  412. package/dist/seo/rules/crawl.js +55 -40
  413. package/dist/seo/rules/cwv.js +21 -15
  414. package/dist/seo/rules/ecommerce.js +82 -22
  415. package/dist/seo/rules/i18n.js +75 -36
  416. package/dist/seo/rules/images.js +109 -30
  417. package/dist/seo/rules/index.js +2 -0
  418. package/dist/seo/rules/internal-linking.js +58 -39
  419. package/dist/seo/rules/links.js +79 -52
  420. package/dist/seo/rules/local.js +49 -25
  421. package/dist/seo/rules/meta.js +339 -81
  422. package/dist/seo/rules/mobile.js +112 -2
  423. package/dist/seo/rules/performance.js +434 -66
  424. package/dist/seo/rules/pwa.js +36 -39
  425. package/dist/seo/rules/readability.js +31 -22
  426. package/dist/seo/rules/redirects.js +21 -15
  427. package/dist/seo/rules/resources.js +59 -42
  428. package/dist/seo/rules/schema.js +333 -8
  429. package/dist/seo/rules/security.js +142 -80
  430. package/dist/seo/rules/social.js +277 -47
  431. package/dist/seo/rules/structural.js +87 -19
  432. package/dist/seo/rules/technical-advanced.js +30 -24
  433. package/dist/seo/rules/technical.js +243 -42
  434. package/dist/seo/rules/types.d.ts +53 -1
  435. package/dist/seo/seo-spider.d.ts +22 -0
  436. package/dist/seo/seo-spider.js +77 -13
  437. package/dist/seo/types.d.ts +8 -1
  438. package/dist/seo/validators/llms-txt.js +19 -0
  439. package/dist/seo/validators/rss.d.ts +11 -0
  440. package/dist/seo/validators/rss.js +93 -0
  441. package/dist/seo/validators/sitemap.js +36 -26
  442. package/dist/transport/curl.d.ts +4 -0
  443. package/dist/transport/curl.js +101 -0
  444. package/dist/transport/udp.js +0 -1
  445. package/dist/transport/undici.js +1 -2
  446. package/dist/transport/worker.d.ts +18 -0
  447. package/dist/transport/worker.js +278 -0
  448. package/dist/types/index.d.ts +4 -1
  449. package/dist/utils/binary-manager.d.ts +4 -0
  450. package/dist/utils/binary-manager.js +72 -0
  451. package/dist/utils/optional-require.d.ts +7 -8
  452. package/dist/utils/optional-require.js +2 -21
  453. package/dist/utils/upload.d.ts +6 -0
  454. package/dist/utils/upload.js +11 -0
  455. package/dist/utils/user-agent.js +2 -13
  456. package/dist/version.js +1 -1
  457. package/package.json +12 -6
  458. package/dist/browser/utils/optional-require.d.ts +0 -19
  459. package/dist/browser/utils/optional-require.js +0 -105
@@ -0,0 +1,48 @@
1
+ export function sentry(options) {
2
+ const headers = {
3
+ 'Authorization': `Bearer ${options.authToken}`,
4
+ 'Content-Type': 'application/json',
5
+ };
6
+ return {
7
+ baseUrl: 'https://sentry.io/api/0',
8
+ headers,
9
+ timeout: 30 * 1000,
10
+ retry: {
11
+ maxAttempts: 3,
12
+ backoff: 'exponential',
13
+ delay: 1000,
14
+ statusCodes: [408, 429, 500, 502, 503, 504],
15
+ }
16
+ };
17
+ }
18
+ function parseDSN(dsn) {
19
+ const url = new URL(dsn);
20
+ const publicKey = url.username;
21
+ const host = url.host;
22
+ const projectId = url.pathname.slice(1);
23
+ return { publicKey, host, projectId };
24
+ }
25
+ export function sentryIngest(options) {
26
+ const { publicKey, host, projectId } = parseDSN(options.dsn);
27
+ return {
28
+ baseUrl: `https://${host}/api/${projectId}`,
29
+ headers: {
30
+ 'Content-Type': 'application/x-sentry-envelope',
31
+ 'X-Sentry-Auth': `Sentry sentry_version=7, sentry_client=recker/1.0, sentry_key=${publicKey}`,
32
+ },
33
+ timeout: 10 * 1000,
34
+ retry: {
35
+ maxAttempts: 2,
36
+ backoff: 'exponential',
37
+ delay: 500,
38
+ statusCodes: [408, 429, 500, 502, 503, 504],
39
+ }
40
+ };
41
+ }
42
+ export function createSentryEnvelope(event) {
43
+ const eventId = event.event_id || crypto.randomUUID().replace(/-/g, '');
44
+ const header = JSON.stringify({ event_id: eventId, sent_at: new Date().toISOString() });
45
+ const itemHeader = JSON.stringify({ type: 'event' });
46
+ const payload = JSON.stringify(event);
47
+ return `${header}\n${itemHeader}\n${payload}`;
48
+ }
@@ -0,0 +1,10 @@
1
+ import { ClientOptions } from '../types/index.js';
2
+ export interface SquarePresetOptions {
3
+ accessToken: string;
4
+ sandbox?: boolean;
5
+ version?: string;
6
+ }
7
+ export declare function square(options: SquarePresetOptions): ClientOptions;
8
+ export declare const squarePayments: (options: SquarePresetOptions) => ClientOptions;
9
+ export declare const squareCatalog: (options: SquarePresetOptions) => ClientOptions;
10
+ export declare const squareSandbox: (options: Omit<SquarePresetOptions, "sandbox">) => ClientOptions;
@@ -0,0 +1,33 @@
1
+ export function square(options) {
2
+ const baseUrl = options.sandbox
3
+ ? 'https://connect.squareupsandbox.com/v2'
4
+ : 'https://connect.squareup.com/v2';
5
+ return {
6
+ baseUrl,
7
+ headers: {
8
+ 'Authorization': `Bearer ${options.accessToken}`,
9
+ 'Content-Type': 'application/json',
10
+ 'Square-Version': options.version || '2024-01-18',
11
+ },
12
+ timeout: 30 * 1000,
13
+ retry: {
14
+ maxAttempts: 3,
15
+ backoff: 'exponential',
16
+ delay: 1000,
17
+ statusCodes: [408, 429, 500, 502, 503, 504],
18
+ }
19
+ };
20
+ }
21
+ export const squarePayments = (options) => ({
22
+ ...square(options),
23
+ baseUrl: options.sandbox
24
+ ? 'https://connect.squareupsandbox.com/v2/payments'
25
+ : 'https://connect.squareup.com/v2/payments',
26
+ });
27
+ export const squareCatalog = (options) => ({
28
+ ...square(options),
29
+ baseUrl: options.sandbox
30
+ ? 'https://connect.squareupsandbox.com/v2/catalog'
31
+ : 'https://connect.squareup.com/v2/catalog',
32
+ });
33
+ export const squareSandbox = (options) => square({ ...options, sandbox: true });
package/dist/recker.d.ts CHANGED
@@ -6,6 +6,7 @@ import { type WebSocketOptions, type ReckerWebSocket } from './websocket/client.
6
6
  import { createWhois, type WhoisResult, type WhoisOptions } from './utils/whois.js';
7
7
  import { type DNSClientOptions, type DNSClient } from './dns/index.js';
8
8
  import type { AIClientConfig } from './types/ai.js';
9
+ import { uploadFile } from './utils/upload.js';
9
10
  export declare function get(url: string, options?: RequestOptions): RequestPromise;
10
11
  export declare function post(url: string, options?: RequestOptions): RequestPromise;
11
12
  export declare function put(url: string, options?: RequestOptions): RequestPromise;
@@ -38,6 +39,8 @@ export declare const recker: {
38
39
  extend: (defaults: Partial<import("./types/ai.js").ChatOptions>) => import("./types/ai.js").AIClient;
39
40
  readonly metrics: import("./types/ai.js").AIMetrics;
40
41
  };
42
+ har: import("./plugins/har-recorder.js").HarRecorder;
43
+ upload: typeof uploadFile;
41
44
  client: (options?: ExtendedClientOptions) => Client;
42
45
  dnsClient: (options?: DNSClientOptions) => DNSClient;
43
46
  whoisClient: typeof createWhois;
package/dist/recker.js CHANGED
@@ -5,6 +5,8 @@ import { createWebSocket } from './websocket/client.js';
5
5
  import { whois as whoisLookup, isDomainAvailable, createWhois } from './utils/whois.js';
6
6
  import { createDNS } from './dns/index.js';
7
7
  import { createAI } from './ai/index.js';
8
+ import { harRecorder } from './plugins/har-recorder.js';
9
+ import { uploadFile } from './utils/upload.js';
8
10
  let _defaultClient = null;
9
11
  let _defaultDns = null;
10
12
  let _defaultAi = null;
@@ -87,6 +89,8 @@ export const recker = {
87
89
  dnsSecurity,
88
90
  ws,
89
91
  ai: aiNamespace,
92
+ har: harRecorder,
93
+ upload: uploadFile,
90
94
  client: (options) => createClient(options),
91
95
  dnsClient: (options) => createDNS(options),
92
96
  whoisClient: createWhois,
@@ -1,11 +1,12 @@
1
- import type { CheerioAPI } from 'cheerio';
2
1
  import { ScrapeElement } from './element.js';
2
+ import { HTMLElement } from './parser/index.js';
3
3
  import type { ScrapeOptions, ExtractionSchema, ExtractedLink, ExtractedImage, ExtractedMeta, OpenGraphData, TwitterCardData, JsonLdData, ExtractedForm, ExtractedTable, ExtractedScript, ExtractedStyle, LinkExtractionOptions, ImageExtractionOptions } from './types.js';
4
4
  export declare class ScrapeDocument {
5
- private $;
5
+ private rootElement;
6
6
  private options;
7
- constructor($: CheerioAPI, options?: ScrapeOptions);
7
+ constructor(root: HTMLElement, options?: ScrapeOptions);
8
8
  static create(html: string, options?: ScrapeOptions): Promise<ScrapeDocument>;
9
+ static createSync(html: string, options?: ScrapeOptions): ScrapeDocument;
9
10
  select(selector: string): ScrapeElement;
10
11
  selectFirst(selector: string): ScrapeElement;
11
12
  selectAll(selector: string): ScrapeElement[];
@@ -39,6 +40,6 @@ export declare class ScrapeDocument {
39
40
  findByText(text: string, selector?: string): ScrapeElement[];
40
41
  findByExactText(text: string, selector?: string): ScrapeElement[];
41
42
  findByData(name: string, value?: string): ScrapeElement[];
42
- get raw(): CheerioAPI;
43
+ get raw(): HTMLElement;
43
44
  get baseUrl(): string | undefined;
44
45
  }
@@ -1,37 +1,32 @@
1
- import { requireOptional } from '../utils/optional-require.js';
2
1
  import { ScrapeElement } from './element.js';
2
+ import { parse } from './parser/index.js';
3
3
  import { extractLinks, extractImages, extractMeta, extractOpenGraph, extractTwitterCard, extractJsonLd, extractForms, extractTables, extractScripts, extractStyles, } from './extractors.js';
4
- let cheerioModule = null;
5
- async function loadCheerio() {
6
- if (cheerioModule) {
7
- return cheerioModule;
8
- }
9
- cheerioModule = await requireOptional('cheerio', 'recker/scrape');
10
- return cheerioModule;
11
- }
12
4
  export class ScrapeDocument {
13
- $;
5
+ rootElement;
14
6
  options;
15
- constructor($, options) {
16
- this.$ = $;
7
+ constructor(root, options) {
8
+ this.rootElement = root;
17
9
  this.options = options || {};
18
10
  }
19
11
  static async create(html, options) {
20
- const { load } = await loadCheerio();
21
- return new ScrapeDocument(load(html), options);
12
+ const root = parse(html);
13
+ return new ScrapeDocument(root, options);
14
+ }
15
+ static createSync(html, options) {
16
+ const root = parse(html);
17
+ return new ScrapeDocument(root, options);
22
18
  }
23
19
  select(selector) {
24
- return new ScrapeElement(this.$(selector), this.$);
20
+ const elements = this.rootElement.querySelectorAll(selector);
21
+ return new ScrapeElement(elements);
25
22
  }
26
23
  selectFirst(selector) {
27
- return new ScrapeElement(this.$(selector).first(), this.$);
24
+ const element = this.rootElement.querySelector(selector);
25
+ return new ScrapeElement(element ? [element] : []);
28
26
  }
29
27
  selectAll(selector) {
30
- const elements = [];
31
- this.$(selector).each((_, element) => {
32
- elements.push(new ScrapeElement(this.$(element), this.$));
33
- });
34
- return elements;
28
+ const elements = this.rootElement.querySelectorAll(selector);
29
+ return elements.map((el) => new ScrapeElement(el));
35
30
  }
36
31
  query(selector) {
37
32
  return this.select(selector);
@@ -40,78 +35,87 @@ export class ScrapeDocument {
40
35
  return this.selectAll(selector);
41
36
  }
42
37
  text(selector) {
43
- return this.$(selector).first().text().trim();
38
+ const el = this.rootElement.querySelector(selector);
39
+ return el ? el.text.trim() : '';
44
40
  }
45
41
  texts(selector) {
46
- const texts = [];
47
- this.$(selector).each((_, element) => {
48
- const text = this.$(element).text().trim();
49
- if (text) {
50
- texts.push(text);
51
- }
52
- });
53
- return texts;
42
+ const elements = this.rootElement.querySelectorAll(selector);
43
+ return elements
44
+ .map((el) => el.text.trim())
45
+ .filter((text) => text.length > 0);
54
46
  }
55
47
  attr(selector, attribute) {
56
- return this.$(selector).first().attr(attribute);
48
+ const el = this.rootElement.querySelector(selector);
49
+ return el ? el.getAttribute(attribute) : undefined;
57
50
  }
58
51
  attrs(selector, attribute) {
52
+ const elements = this.rootElement.querySelectorAll(selector);
59
53
  const attrs = [];
60
- this.$(selector).each((_, element) => {
61
- const value = this.$(element).attr(attribute);
62
- if (value !== undefined) {
63
- attrs.push(value);
54
+ elements.forEach((el) => {
55
+ const val = el.getAttribute(attribute);
56
+ if (val !== undefined) {
57
+ attrs.push(val);
64
58
  }
65
59
  });
66
60
  return attrs;
67
61
  }
68
62
  innerHtml(selector) {
69
- return this.$(selector).first().html();
63
+ const el = this.rootElement.querySelector(selector);
64
+ return el ? el.innerHTML : null;
70
65
  }
71
66
  outerHtml(selector) {
72
- const el = this.$(selector).first();
73
- return this.$.html(el) || '';
67
+ const el = this.rootElement.querySelector(selector);
68
+ return el ? el.outerHTML : '';
74
69
  }
75
70
  links(options) {
76
- return extractLinks(this.$, {
71
+ return extractLinks(this.rootElement, {
77
72
  ...options,
78
73
  baseUrl: this.options.baseUrl,
79
74
  });
80
75
  }
81
76
  images(options) {
82
- return extractImages(this.$, {
77
+ return extractImages(this.rootElement, {
83
78
  ...options,
84
79
  baseUrl: this.options.baseUrl,
85
80
  });
86
81
  }
87
82
  meta() {
88
- return extractMeta(this.$);
83
+ return extractMeta(this.rootElement);
89
84
  }
90
85
  openGraph() {
91
- return extractOpenGraph(this.$);
86
+ return extractOpenGraph(this.rootElement);
92
87
  }
93
88
  twitterCard() {
94
- return extractTwitterCard(this.$);
89
+ return extractTwitterCard(this.rootElement);
95
90
  }
96
91
  jsonLd() {
97
- return extractJsonLd(this.$);
92
+ return extractJsonLd(this.rootElement);
98
93
  }
99
94
  forms(selector) {
100
- return extractForms(this.$, selector);
95
+ return extractForms(this.rootElement, selector);
101
96
  }
102
97
  tables(selector) {
103
- return extractTables(this.$, selector);
98
+ return extractTables(this.rootElement, selector);
104
99
  }
105
100
  scripts() {
106
- return extractScripts(this.$);
101
+ return extractScripts(this.rootElement);
107
102
  }
108
103
  styles() {
109
- return extractStyles(this.$);
104
+ return extractStyles(this.rootElement);
110
105
  }
111
106
  extract(schema) {
112
107
  const result = {};
113
108
  for (const [key, fieldConfig] of Object.entries(schema)) {
114
- result[key] = this.extractField(fieldConfig);
109
+ const value = this.extractField(fieldConfig);
110
+ if (value === undefined) {
111
+ const isOptional = typeof fieldConfig === 'object' && fieldConfig.optional === true;
112
+ if (!isOptional) {
113
+ result[key] = undefined;
114
+ }
115
+ }
116
+ else {
117
+ result[key] = value;
118
+ }
115
119
  }
116
120
  return result;
117
121
  }
@@ -120,77 +124,86 @@ export class ScrapeDocument {
120
124
  return this.text(field) || undefined;
121
125
  }
122
126
  const { selector, attribute, multiple, transform } = field;
127
+ const defaultValue = 'default' in field ? field.default : undefined;
123
128
  if (multiple) {
129
+ const elements = this.rootElement.querySelectorAll(selector);
124
130
  const values = [];
125
- this.$(selector).each((_, element) => {
126
- const $el = this.$(element);
131
+ elements.forEach(el => {
127
132
  let value;
128
133
  if (attribute) {
129
- value = $el.attr(attribute) || '';
134
+ value = el.getAttribute(attribute) || '';
130
135
  }
131
136
  else {
132
- value = $el.text().trim();
137
+ value = el.text.trim();
133
138
  }
134
139
  if (value) {
135
140
  values.push(transform ? transform(value) : value);
136
141
  }
137
142
  });
143
+ if (values.length === 0 && defaultValue !== undefined) {
144
+ return defaultValue;
145
+ }
138
146
  return values;
139
147
  }
140
148
  else {
141
- const $el = this.$(selector).first();
149
+ const el = this.rootElement.querySelector(selector);
150
+ if (!el) {
151
+ return defaultValue;
152
+ }
142
153
  let value;
143
154
  if (attribute) {
144
- value = $el.attr(attribute) || '';
155
+ value = el.getAttribute(attribute) || '';
145
156
  }
146
157
  else {
147
- value = $el.text().trim();
158
+ value = el.text.trim();
159
+ }
160
+ if (!value) {
161
+ return defaultValue;
148
162
  }
149
- if (!value)
150
- return undefined;
151
163
  return transform ? transform(value) : value;
152
164
  }
153
165
  }
154
166
  title() {
155
- const title = this.$('title').first().text().trim();
167
+ const el = this.rootElement.querySelector('title');
168
+ const title = el ? el.text.trim() : '';
156
169
  return title || undefined;
157
170
  }
158
171
  body() {
159
- return new ScrapeElement(this.$('body').first(), this.$);
172
+ const el = this.rootElement.querySelector('body');
173
+ return new ScrapeElement(el ? [el] : []);
160
174
  }
161
175
  head() {
162
- return new ScrapeElement(this.$('head').first(), this.$);
176
+ const el = this.rootElement.querySelector('head');
177
+ return new ScrapeElement(el ? [el] : []);
163
178
  }
164
179
  html() {
165
- return this.$.html() || '';
180
+ return this.rootElement.outerHTML;
166
181
  }
167
182
  root() {
168
- return new ScrapeElement(this.$.root(), this.$);
183
+ return new ScrapeElement(this.rootElement);
169
184
  }
170
185
  exists(selector) {
171
- return this.$(selector).length > 0;
186
+ return this.rootElement.querySelector(selector) !== null;
172
187
  }
173
188
  count(selector) {
174
- return this.$(selector).length;
189
+ return this.rootElement.querySelectorAll(selector).length;
175
190
  }
176
191
  findByText(text, selector) {
177
- const baseSelector = selector || '*';
178
192
  const elements = [];
179
- this.$(baseSelector).each((_, element) => {
180
- const $el = this.$(element);
181
- if ($el.text().includes(text)) {
182
- elements.push(new ScrapeElement($el, this.$));
193
+ const candidates = selector ? this.rootElement.querySelectorAll(selector) : this.rootElement.querySelectorAll('*');
194
+ candidates.forEach(el => {
195
+ if (el.text.includes(text)) {
196
+ elements.push(new ScrapeElement(el));
183
197
  }
184
198
  });
185
199
  return elements;
186
200
  }
187
201
  findByExactText(text, selector) {
188
- const baseSelector = selector || '*';
189
202
  const elements = [];
190
- this.$(baseSelector).each((_, element) => {
191
- const $el = this.$(element);
192
- if ($el.text().trim() === text) {
193
- elements.push(new ScrapeElement($el, this.$));
203
+ const candidates = selector ? this.rootElement.querySelectorAll(selector) : this.rootElement.querySelectorAll('*');
204
+ candidates.forEach(el => {
205
+ if (el.text.trim() === text) {
206
+ elements.push(new ScrapeElement(el));
194
207
  }
195
208
  });
196
209
  return elements;
@@ -202,7 +215,7 @@ export class ScrapeDocument {
202
215
  return this.selectAll(selector);
203
216
  }
204
217
  get raw() {
205
- return this.$;
218
+ return this.rootElement;
206
219
  }
207
220
  get baseUrl() {
208
221
  return this.options.baseUrl;
@@ -1,9 +1,7 @@
1
- import type { Cheerio, CheerioAPI } from 'cheerio';
2
- import type { Element } from 'domhandler';
1
+ import { HTMLElement, Node } from './parser/index.js';
3
2
  export declare class ScrapeElement {
4
- private $el;
5
- private $;
6
- constructor($el: Cheerio<Element>, $: CheerioAPI);
3
+ private elements;
4
+ constructor(elements: HTMLElement | HTMLElement[] | Node | Node[]);
7
5
  find(selector: string): ScrapeElement;
8
6
  parent(selector?: string): ScrapeElement;
9
7
  children(selector?: string): ScrapeElement;
@@ -16,11 +14,15 @@ export declare class ScrapeElement {
16
14
  first(): ScrapeElement;
17
15
  last(): ScrapeElement;
18
16
  eq(index: number): ScrapeElement;
19
- filter(selector: string): ScrapeElement;
17
+ filter(selectorOrCallback: string | ((el: ScrapeElement, index: number) => boolean)): ScrapeElement;
20
18
  not(selector: string): ScrapeElement;
21
19
  has(selector: string): ScrapeElement;
22
20
  add(selector: string): ScrapeElement;
23
21
  parents(selector?: string): ScrapeElement;
22
+ parentsUntil(selector: string): ScrapeElement;
23
+ nextUntil(selector: string): ScrapeElement;
24
+ prevUntil(selector: string): ScrapeElement;
25
+ slice(start: number, end?: number): ScrapeElement;
24
26
  contents(): ScrapeElement;
25
27
  text(): string;
26
28
  html(): string | null;
@@ -44,6 +46,6 @@ export declare class ScrapeElement {
44
46
  tagName(): string | undefined;
45
47
  clone(): ScrapeElement;
46
48
  toString(): string;
47
- get raw(): Cheerio<Element>;
48
- get(index?: number): Element | undefined;
49
+ get raw(): HTMLElement[];
50
+ get(index?: number): HTMLElement | undefined;
49
51
  }