recker 1.0.43 → 1.0.44-next.084c2ef

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 (464) 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 +85617 -99560
  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 +163 -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/manifest.d.ts +2 -0
  214. package/dist/browser/seo/rules/manifest.js +621 -0
  215. package/dist/browser/seo/rules/meta.d.ts +2 -0
  216. package/dist/browser/seo/rules/meta.js +805 -0
  217. package/dist/browser/seo/rules/mobile.d.ts +2 -0
  218. package/dist/browser/seo/rules/mobile.js +161 -0
  219. package/dist/browser/seo/rules/performance.d.ts +2 -0
  220. package/dist/browser/seo/rules/performance.js +738 -0
  221. package/dist/browser/seo/rules/pwa.d.ts +2 -0
  222. package/dist/browser/seo/rules/pwa.js +299 -0
  223. package/dist/browser/seo/rules/readability.d.ts +2 -0
  224. package/dist/browser/seo/rules/readability.js +264 -0
  225. package/dist/browser/seo/rules/redirects.d.ts +16 -0
  226. package/dist/browser/seo/rules/redirects.js +199 -0
  227. package/dist/browser/seo/rules/resources.d.ts +2 -0
  228. package/dist/browser/seo/rules/resources.js +390 -0
  229. package/dist/browser/seo/rules/schema.d.ts +2 -0
  230. package/dist/browser/seo/rules/schema.js +379 -0
  231. package/dist/browser/seo/rules/security.d.ts +2 -0
  232. package/dist/browser/seo/rules/security.js +877 -0
  233. package/dist/browser/seo/rules/social.d.ts +2 -0
  234. package/dist/browser/seo/rules/social.js +603 -0
  235. package/dist/browser/seo/rules/structural.d.ts +2 -0
  236. package/dist/browser/seo/rules/structural.js +223 -0
  237. package/dist/browser/seo/rules/technical-advanced.d.ts +10 -0
  238. package/dist/browser/seo/rules/technical-advanced.js +289 -0
  239. package/dist/browser/seo/rules/technical.d.ts +3 -0
  240. package/dist/browser/seo/rules/technical.js +509 -0
  241. package/dist/browser/seo/rules/thresholds.d.ts +196 -0
  242. package/dist/browser/seo/rules/thresholds.js +118 -0
  243. package/dist/browser/seo/rules/types.d.ts +518 -0
  244. package/dist/browser/seo/rules/types.js +11 -0
  245. package/dist/browser/seo/types.d.ts +211 -0
  246. package/dist/browser/seo/types.js +1 -0
  247. package/dist/browser/transport/curl.d.ts +4 -0
  248. package/dist/browser/transport/curl.js +101 -0
  249. package/dist/browser/transport/undici.js +1 -2
  250. package/dist/browser/transport/worker.d.ts +18 -0
  251. package/dist/browser/transport/worker.js +278 -0
  252. package/dist/browser/types/index.d.ts +4 -1
  253. package/dist/browser/utils/binary-manager.d.ts +4 -0
  254. package/dist/browser/utils/binary-manager.js +72 -0
  255. package/dist/browser/utils/user-agent.js +2 -13
  256. package/dist/cache/indexed-db.d.ts +10 -0
  257. package/dist/cache/indexed-db.js +88 -0
  258. package/dist/cache/service-worker-cache.d.ts +18 -0
  259. package/dist/cache/service-worker-cache.js +103 -0
  260. package/dist/cli/commands/ai.d.ts +2 -0
  261. package/dist/cli/commands/ai.js +162 -0
  262. package/dist/cli/commands/bench.d.ts +2 -0
  263. package/dist/cli/commands/bench.js +51 -0
  264. package/dist/cli/commands/dns.d.ts +2 -0
  265. package/dist/cli/commands/dns.js +295 -0
  266. package/dist/cli/commands/har.d.ts +2 -0
  267. package/dist/cli/commands/har.js +171 -0
  268. package/dist/cli/commands/hls.d.ts +2 -0
  269. package/dist/cli/commands/hls.js +192 -0
  270. package/dist/cli/commands/network.d.ts +2 -0
  271. package/dist/cli/commands/network.js +288 -0
  272. package/dist/cli/commands/protocols.d.ts +2 -0
  273. package/dist/cli/commands/protocols.js +344 -0
  274. package/dist/cli/commands/scrape.d.ts +2 -0
  275. package/dist/cli/commands/scrape.js +176 -0
  276. package/dist/cli/commands/security.d.ts +2 -0
  277. package/dist/cli/commands/security.js +57 -0
  278. package/dist/cli/commands/seo.d.ts +2 -0
  279. package/dist/cli/commands/seo.js +125 -0
  280. package/dist/cli/commands/serve.d.ts +2 -0
  281. package/dist/cli/commands/serve.js +531 -0
  282. package/dist/cli/commands/spider.d.ts +3 -0
  283. package/dist/cli/commands/spider.js +478 -0
  284. package/dist/cli/commands/utils.d.ts +2 -0
  285. package/dist/cli/commands/utils.js +176 -0
  286. package/dist/cli/commands/vector.d.ts +2 -0
  287. package/dist/cli/commands/vector.js +158 -0
  288. package/dist/cli/handler.d.ts +2 -2
  289. package/dist/cli/handler.js +6 -6
  290. package/dist/cli/helpers.d.ts +7 -0
  291. package/dist/cli/helpers.js +128 -0
  292. package/dist/cli/index.js +96 -5228
  293. package/dist/cli/parser/help.d.ts +2 -0
  294. package/dist/cli/parser/help.js +52 -0
  295. package/dist/cli/parser/index.d.ts +3 -0
  296. package/dist/cli/parser/index.js +3 -0
  297. package/dist/cli/parser/parser.d.ts +4 -0
  298. package/dist/cli/parser/parser.js +146 -0
  299. package/dist/cli/parser/types.d.ts +41 -0
  300. package/dist/cli/parser/types.js +1 -0
  301. package/dist/cli/presets.d.ts +1 -1
  302. package/dist/cli/presets.js +1 -1
  303. package/dist/cli/router.d.ts +36 -0
  304. package/dist/cli/router.js +195 -0
  305. package/dist/cli/tui/ai-chat.js +1 -1
  306. package/dist/cli/tui/commands/context.d.ts +9 -0
  307. package/dist/cli/tui/commands/context.js +1 -0
  308. package/dist/cli/tui/commands/dns.d.ts +10 -0
  309. package/dist/cli/tui/commands/dns.js +461 -0
  310. package/dist/cli/tui/commands/hls.d.ts +2 -0
  311. package/dist/cli/tui/commands/hls.js +162 -0
  312. package/dist/cli/tui/commands/ip.d.ts +2 -0
  313. package/dist/cli/tui/commands/ip.js +45 -0
  314. package/dist/cli/tui/commands/network.d.ts +3 -0
  315. package/dist/cli/tui/commands/network.js +81 -0
  316. package/dist/cli/tui/commands/protocols.d.ts +6 -0
  317. package/dist/cli/tui/commands/protocols.js +531 -0
  318. package/dist/cli/tui/commands/security.d.ts +2 -0
  319. package/dist/cli/tui/commands/security.js +48 -0
  320. package/dist/cli/tui/commands/seo.d.ts +2 -0
  321. package/dist/cli/tui/commands/seo.js +74 -0
  322. package/dist/cli/tui/context.d.ts +12 -0
  323. package/dist/cli/tui/context.js +1 -0
  324. package/dist/cli/tui/shell.d.ts +11 -20
  325. package/dist/cli/tui/shell.js +216 -1873
  326. package/dist/constants/user-agents.d.ts +7 -0
  327. package/dist/constants/user-agents.js +7 -0
  328. package/dist/core/client.d.ts +2 -0
  329. package/dist/core/client.js +19 -1
  330. package/dist/index.d.ts +1 -0
  331. package/dist/index.js +1 -0
  332. package/dist/mcp/cli.js +2 -3
  333. package/dist/mcp/data/embeddings.json +1 -1
  334. package/dist/mcp/tools/network.js +298 -158
  335. package/dist/plugins/har-player.d.ts +23 -0
  336. package/dist/plugins/har-player.js +49 -0
  337. package/dist/plugins/har-recorder.d.ts +37 -3
  338. package/dist/plugins/har-recorder.js +116 -63
  339. package/dist/plugins/network-simulation.d.ts +7 -0
  340. package/dist/plugins/network-simulation.js +13 -0
  341. package/dist/presets/android.d.ts +2 -0
  342. package/dist/presets/android.js +16 -0
  343. package/dist/presets/chaturbate.d.ts +2 -0
  344. package/dist/presets/chaturbate.js +17 -0
  345. package/dist/presets/elevenlabs.d.ts +6 -0
  346. package/dist/presets/elevenlabs.js +20 -0
  347. package/dist/presets/enhancers.d.ts +20 -0
  348. package/dist/presets/enhancers.js +85 -0
  349. package/dist/presets/hubspot.d.ts +9 -0
  350. package/dist/presets/hubspot.js +28 -0
  351. package/dist/presets/index.d.ts +10 -0
  352. package/dist/presets/index.js +10 -0
  353. package/dist/presets/ios.d.ts +2 -0
  354. package/dist/presets/ios.js +13 -0
  355. package/dist/presets/pinecone.d.ts +8 -0
  356. package/dist/presets/pinecone.js +42 -0
  357. package/dist/presets/registry.js +60 -0
  358. package/dist/presets/sendgrid.d.ts +6 -0
  359. package/dist/presets/sendgrid.js +20 -0
  360. package/dist/presets/sentry.d.ts +11 -0
  361. package/dist/presets/sentry.js +48 -0
  362. package/dist/presets/square.d.ts +10 -0
  363. package/dist/presets/square.js +33 -0
  364. package/dist/recker.d.ts +3 -0
  365. package/dist/recker.js +4 -0
  366. package/dist/scrape/document.d.ts +5 -4
  367. package/dist/scrape/document.js +89 -76
  368. package/dist/scrape/element.d.ts +10 -8
  369. package/dist/scrape/element.js +295 -81
  370. package/dist/scrape/extractors.d.ts +11 -11
  371. package/dist/scrape/extractors.js +145 -113
  372. package/dist/scrape/index.d.ts +2 -0
  373. package/dist/scrape/index.js +1 -0
  374. package/dist/scrape/parser/back.d.ts +1 -0
  375. package/dist/scrape/parser/back.js +3 -0
  376. package/dist/scrape/parser/index.d.ts +20 -0
  377. package/dist/scrape/parser/index.js +19 -0
  378. package/dist/scrape/parser/matcher.d.ts +30 -0
  379. package/dist/scrape/parser/matcher.js +99 -0
  380. package/dist/scrape/parser/nodes/comment.d.ts +12 -0
  381. package/dist/scrape/parser/nodes/comment.js +21 -0
  382. package/dist/scrape/parser/nodes/html.d.ts +110 -0
  383. package/dist/scrape/parser/nodes/html.js +978 -0
  384. package/dist/scrape/parser/nodes/node.d.ts +18 -0
  385. package/dist/scrape/parser/nodes/node.js +31 -0
  386. package/dist/scrape/parser/nodes/text.d.ts +14 -0
  387. package/dist/scrape/parser/nodes/text.js +30 -0
  388. package/dist/scrape/parser/nodes/type.d.ts +6 -0
  389. package/dist/scrape/parser/nodes/type.js +7 -0
  390. package/dist/scrape/parser/parse.d.ts +1 -0
  391. package/dist/scrape/parser/parse.js +1 -0
  392. package/dist/scrape/parser/valid.d.ts +2 -0
  393. package/dist/scrape/parser/valid.js +5 -0
  394. package/dist/scrape/parser/void-tag.d.ts +7 -0
  395. package/dist/scrape/parser/void-tag.js +43 -0
  396. package/dist/scrape/spider.d.ts +19 -0
  397. package/dist/scrape/spider.js +28 -3
  398. package/dist/scrape/types.d.ts +7 -0
  399. package/dist/seo/analyzer.d.ts +15 -5
  400. package/dist/seo/analyzer.js +636 -175
  401. package/dist/seo/formatter.d.ts +16 -0
  402. package/dist/seo/formatter.js +228 -0
  403. package/dist/seo/index.d.ts +2 -0
  404. package/dist/seo/index.js +1 -0
  405. package/dist/seo/keywords.d.ts +16 -0
  406. package/dist/seo/keywords.js +55 -0
  407. package/dist/seo/rules/accessibility.js +96 -57
  408. package/dist/seo/rules/ai-search.js +44 -31
  409. package/dist/seo/rules/analytics.d.ts +2 -0
  410. package/dist/seo/rules/analytics.js +306 -0
  411. package/dist/seo/rules/best-practices.js +21 -14
  412. package/dist/seo/rules/canonical.js +53 -32
  413. package/dist/seo/rules/content.js +317 -31
  414. package/dist/seo/rules/crawl.js +55 -40
  415. package/dist/seo/rules/cwv.js +21 -15
  416. package/dist/seo/rules/ecommerce.js +82 -22
  417. package/dist/seo/rules/i18n.js +75 -36
  418. package/dist/seo/rules/images.js +109 -30
  419. package/dist/seo/rules/index.js +7 -1
  420. package/dist/seo/rules/internal-linking.js +58 -39
  421. package/dist/seo/rules/links.js +79 -52
  422. package/dist/seo/rules/local.js +49 -25
  423. package/dist/seo/rules/manifest.d.ts +2 -0
  424. package/dist/seo/rules/manifest.js +621 -0
  425. package/dist/seo/rules/meta.js +339 -81
  426. package/dist/seo/rules/mobile.js +112 -2
  427. package/dist/seo/rules/performance.js +434 -66
  428. package/dist/seo/rules/pwa.js +36 -39
  429. package/dist/seo/rules/readability.js +31 -22
  430. package/dist/seo/rules/redirects.js +21 -15
  431. package/dist/seo/rules/resources.js +59 -42
  432. package/dist/seo/rules/schema.js +333 -8
  433. package/dist/seo/rules/security.js +142 -80
  434. package/dist/seo/rules/social.js +277 -47
  435. package/dist/seo/rules/structural.js +87 -19
  436. package/dist/seo/rules/technical-advanced.js +30 -24
  437. package/dist/seo/rules/technical.d.ts +1 -0
  438. package/dist/seo/rules/technical.js +272 -42
  439. package/dist/seo/rules/types.d.ts +74 -2
  440. package/dist/seo/seo-spider.d.ts +35 -0
  441. package/dist/seo/seo-spider.js +152 -13
  442. package/dist/seo/types.d.ts +8 -1
  443. package/dist/seo/validators/llms-txt.js +19 -0
  444. package/dist/seo/validators/rss.d.ts +11 -0
  445. package/dist/seo/validators/rss.js +93 -0
  446. package/dist/seo/validators/sitemap.js +36 -26
  447. package/dist/transport/curl.d.ts +4 -0
  448. package/dist/transport/curl.js +101 -0
  449. package/dist/transport/udp.js +0 -1
  450. package/dist/transport/undici.js +1 -2
  451. package/dist/transport/worker.d.ts +18 -0
  452. package/dist/transport/worker.js +278 -0
  453. package/dist/types/index.d.ts +4 -1
  454. package/dist/utils/binary-manager.d.ts +4 -0
  455. package/dist/utils/binary-manager.js +72 -0
  456. package/dist/utils/optional-require.d.ts +7 -8
  457. package/dist/utils/optional-require.js +2 -21
  458. package/dist/utils/upload.d.ts +6 -0
  459. package/dist/utils/upload.js +11 -0
  460. package/dist/utils/user-agent.js +2 -13
  461. package/dist/version.js +1 -1
  462. package/package.json +12 -6
  463. package/dist/browser/utils/optional-require.d.ts +0 -19
  464. package/dist/browser/utils/optional-require.js +0 -105
@@ -7,8 +7,9 @@ export const resourceRules = [
7
7
  severity: 'warning',
8
8
  description: 'Too many JavaScript files increase HTTP requests and slow page load',
9
9
  check: (ctx) => {
10
- if (ctx.jsFilesCount === undefined)
11
- return null;
10
+ if (ctx.jsFilesCount === undefined) {
11
+ return createResult({ id: 'resources-js-files-count', name: 'JavaScript File Count', category: 'resources', severity: 'warning' }, 'info', 'Not applicable (JavaScript file count unavailable)', { recommendation: 'This rule checks JavaScript file count when resource information is available' });
12
+ }
12
13
  const max = 15;
13
14
  if (ctx.jsFilesCount > max) {
14
15
  return createResult({ id: 'resources-js-files-count', name: 'JavaScript File Count', category: 'resources', severity: 'warning' }, 'warn', `Too many JS files (${ctx.jsFilesCount})`, {
@@ -21,7 +22,7 @@ export const resourceRules = [
21
22
  },
22
23
  });
23
24
  }
24
- return null;
25
+ return createResult({ id: 'resources-js-files-count', name: 'JavaScript File Count', category: 'resources', severity: 'warning' }, 'info', 'Not applicable (JavaScript file count is within limits or unavailable)', { recommendation: 'This rule checks JavaScript file count when resource information is available' });
25
26
  },
26
27
  },
27
28
  {
@@ -31,8 +32,9 @@ export const resourceRules = [
31
32
  severity: 'warning',
32
33
  description: 'Large JavaScript bundles slow page load and increase bandwidth',
33
34
  check: (ctx) => {
34
- if (ctx.jsTotalSize === undefined)
35
- return null;
35
+ if (ctx.jsTotalSize === undefined) {
36
+ return createResult({ id: 'resources-js-total-size', name: 'JavaScript Total Size', category: 'resources', severity: 'warning' }, 'info', 'Not applicable (JavaScript size information unavailable)', { recommendation: 'This rule checks JavaScript total size when resource size information is available' });
37
+ }
36
38
  const maxKB = 500;
37
39
  const sizeKB = Math.round(ctx.jsTotalSize / 1024);
38
40
  if (sizeKB > maxKB) {
@@ -46,7 +48,7 @@ export const resourceRules = [
46
48
  },
47
49
  });
48
50
  }
49
- return null;
51
+ return createResult({ id: 'resources-js-total-size', name: 'JavaScript Total Size', category: 'resources', severity: 'warning' }, 'info', 'Not applicable (JavaScript size is within limits)', { recommendation: 'This rule checks for large JavaScript bundles that slow page load' });
50
52
  },
51
53
  },
52
54
  {
@@ -56,8 +58,9 @@ export const resourceRules = [
56
58
  severity: 'warning',
57
59
  description: 'Render-blocking JS in <head> delays page rendering',
58
60
  check: (ctx) => {
59
- if (ctx.renderBlockingJs === undefined)
60
- return null;
61
+ if (ctx.renderBlockingJs === undefined) {
62
+ return createResult({ id: 'resources-js-render-blocking', name: 'Render-Blocking JavaScript', category: 'resources', severity: 'warning' }, 'info', 'Not applicable (render-blocking JavaScript information unavailable)', { recommendation: 'This rule checks for render-blocking JavaScript when resource information is available' });
63
+ }
61
64
  if (ctx.renderBlockingJs > 0) {
62
65
  return createResult({ id: 'resources-js-render-blocking', name: 'Render-Blocking JavaScript', category: 'resources', severity: 'warning' }, 'warn', `${ctx.renderBlockingJs} render-blocking JS file(s)`, {
63
66
  value: ctx.renderBlockingJs,
@@ -79,8 +82,9 @@ export const resourceRules = [
79
82
  severity: 'warning',
80
83
  description: 'Too many CSS files increase HTTP requests',
81
84
  check: (ctx) => {
82
- if (ctx.cssFilesCount === undefined)
83
- return null;
85
+ if (ctx.cssFilesCount === undefined) {
86
+ return createResult({ id: 'resources-css-files-count', name: 'CSS File Count', category: 'resources', severity: 'warning' }, 'info', 'Not applicable (CSS file count unavailable)', { recommendation: 'This rule checks CSS file count when resource information is available' });
87
+ }
84
88
  const max = 10;
85
89
  if (ctx.cssFilesCount > max) {
86
90
  return createResult({ id: 'resources-css-files-count', name: 'CSS File Count', category: 'resources', severity: 'warning' }, 'warn', `Too many CSS files (${ctx.cssFilesCount})`, {
@@ -92,7 +96,7 @@ export const resourceRules = [
92
96
  },
93
97
  });
94
98
  }
95
- return null;
99
+ return createResult({ id: 'resources-css-files-count', name: 'CSS File Count', category: 'resources', severity: 'warning' }, 'info', 'Not applicable (CSS file count is within limits or unavailable)', { recommendation: 'This rule checks CSS file count when resource information is available' });
96
100
  },
97
101
  },
98
102
  {
@@ -102,8 +106,9 @@ export const resourceRules = [
102
106
  severity: 'warning',
103
107
  description: 'Large CSS files delay page rendering',
104
108
  check: (ctx) => {
105
- if (ctx.cssTotalSize === undefined)
106
- return null;
109
+ if (ctx.cssTotalSize === undefined) {
110
+ return createResult({ id: 'resources-css-total-size', name: 'CSS Total Size', category: 'resources', severity: 'warning' }, 'info', 'Not applicable (CSS size information unavailable)', { recommendation: 'This rule checks CSS total size when resource size information is available' });
111
+ }
107
112
  const maxKB = 200;
108
113
  const sizeKB = Math.round(ctx.cssTotalSize / 1024);
109
114
  if (sizeKB > maxKB) {
@@ -117,7 +122,7 @@ export const resourceRules = [
117
122
  },
118
123
  });
119
124
  }
120
- return null;
125
+ return createResult({ id: 'resources-css-total-size', name: 'CSS Total Size', category: 'resources', severity: 'warning' }, 'info', 'Not applicable (CSS size is within limits)', { recommendation: 'This rule checks for large CSS files that delay page rendering' });
121
126
  },
122
127
  },
123
128
  {
@@ -127,8 +132,9 @@ export const resourceRules = [
127
132
  severity: 'info',
128
133
  description: 'Critical CSS should be inlined, non-critical deferred',
129
134
  check: (ctx) => {
130
- if (ctx.cssFilesCount === undefined)
131
- return null;
135
+ if (ctx.cssFilesCount === undefined) {
136
+ return createResult({ id: 'resources-css-render-blocking', name: 'Render-Blocking CSS', category: 'resources', severity: 'info' }, 'info', 'Not applicable (CSS file information unavailable)', { recommendation: 'This rule checks for render-blocking CSS when resource information is available' });
137
+ }
132
138
  if (ctx.cssFilesCount > 3 && !ctx.hasCriticalCss) {
133
139
  return createResult({ id: 'resources-css-render-blocking', name: 'Render-Blocking CSS', category: 'resources', severity: 'info' }, 'info', `${ctx.cssFilesCount} CSS files blocking render`, {
134
140
  value: ctx.cssFilesCount,
@@ -139,7 +145,7 @@ export const resourceRules = [
139
145
  },
140
146
  });
141
147
  }
142
- return null;
148
+ return createResult({ id: 'resources-css-render-blocking', name: 'Render-Blocking CSS', category: 'resources', severity: 'info' }, 'info', 'Not applicable (CSS file count is low or critical CSS is present)', { recommendation: 'This rule checks for render-blocking CSS that delays page rendering' });
143
149
  },
144
150
  },
145
151
  {
@@ -149,8 +155,9 @@ export const resourceRules = [
149
155
  severity: 'warning',
150
156
  description: 'Images over 200KB should be optimized',
151
157
  check: (ctx) => {
152
- if (!ctx.largeImages || ctx.largeImages.length === 0)
153
- return null;
158
+ if (!ctx.largeImages || ctx.largeImages.length === 0) {
159
+ return createResult({ id: 'resources-image-size-large', name: 'Large Image Files', category: 'resources', severity: 'warning' }, 'info', 'Not applicable (no large images detected or image data unavailable)', { recommendation: 'This rule checks for images over 200KB when image information is available' });
160
+ }
154
161
  const maxKB = 200;
155
162
  const largeCount = ctx.largeImages.length;
156
163
  return createResult({ id: 'resources-image-size-large', name: 'Large Image Files', category: 'resources', severity: 'warning' }, 'warn', `${largeCount} image(s) over ${maxKB}KB`, {
@@ -170,10 +177,12 @@ export const resourceRules = [
170
177
  severity: 'info',
171
178
  description: 'Use WebP or AVIF for better compression',
172
179
  check: (ctx) => {
173
- if (ctx.imagesTotal === undefined || ctx.imagesTotal === 0)
174
- return null;
175
- if (ctx.modernFormatImages === undefined)
176
- return null;
180
+ if (ctx.imagesTotal === undefined || ctx.imagesTotal === 0) {
181
+ return createResult({ id: 'resources-image-format', name: 'Modern Image Formats', category: 'resources', severity: 'info' }, 'info', 'Not applicable (no images present or image data unavailable)', { recommendation: 'This rule checks image format usage when images are present on the page' });
182
+ }
183
+ if (ctx.modernFormatImages === undefined) {
184
+ return createResult({ id: 'resources-image-format', name: 'Modern Image Formats', category: 'resources', severity: 'info' }, 'info', 'Not applicable (modern format image data unavailable)', { recommendation: 'This rule checks for modern image formats when image format information is available' });
185
+ }
177
186
  const modernPercent = (ctx.modernFormatImages / ctx.imagesTotal) * 100;
178
187
  if (modernPercent < 50) {
179
188
  return createResult({ id: 'resources-image-format', name: 'Modern Image Formats', category: 'resources', severity: 'info' }, 'info', `Only ${Math.round(modernPercent)}% of images use modern formats`, {
@@ -196,8 +205,9 @@ export const resourceRules = [
196
205
  severity: 'warning',
197
206
  description: 'Images should have width and height attributes',
198
207
  check: (ctx) => {
199
- if (ctx.imagesMissingDimensions === undefined)
200
- return null;
208
+ if (ctx.imagesMissingDimensions === undefined) {
209
+ return createResult({ id: 'resources-image-dimensions', name: 'Image Dimensions', category: 'resources', severity: 'warning' }, 'info', 'Not applicable (image dimension information unavailable)', { recommendation: 'This rule checks for image dimensions when image information is available' });
210
+ }
201
211
  if (ctx.imagesMissingDimensions > 0) {
202
212
  return createResult({ id: 'resources-image-dimensions', name: 'Image Dimensions', category: 'resources', severity: 'warning' }, 'warn', `${ctx.imagesMissingDimensions} image(s) missing width/height`, {
203
213
  value: ctx.imagesMissingDimensions,
@@ -218,8 +228,9 @@ export const resourceRules = [
218
228
  severity: 'info',
219
229
  description: 'Too many font files can slow page load',
220
230
  check: (ctx) => {
221
- if (ctx.fontFilesCount === undefined)
222
- return null;
231
+ if (ctx.fontFilesCount === undefined) {
232
+ return createResult({ id: 'resources-font-files', name: 'Web Font Files', category: 'resources', severity: 'info' }, 'info', 'Not applicable (font file information unavailable)', { recommendation: 'This rule checks font file count when font information is available' });
233
+ }
223
234
  const max = 4;
224
235
  if (ctx.fontFilesCount > max) {
225
236
  return createResult({ id: 'resources-font-files', name: 'Web Font Files', category: 'resources', severity: 'info' }, 'info', `${ctx.fontFilesCount} font files loaded`, {
@@ -232,7 +243,7 @@ export const resourceRules = [
232
243
  },
233
244
  });
234
245
  }
235
- return null;
246
+ return createResult({ id: 'resources-font-files', name: 'Web Font Files', category: 'resources', severity: 'info' }, 'info', 'Not applicable (font file count is within limits)', { recommendation: 'This rule checks for excessive font files that slow page load' });
236
247
  },
237
248
  },
238
249
  {
@@ -242,8 +253,9 @@ export const resourceRules = [
242
253
  severity: 'info',
243
254
  description: 'Use font-display: swap to prevent invisible text during load',
244
255
  check: (ctx) => {
245
- if (ctx.hasFontDisplaySwap === undefined)
246
- return null;
256
+ if (ctx.hasFontDisplaySwap === undefined) {
257
+ return createResult({ id: 'resources-font-display', name: 'Font Display Strategy', category: 'resources', severity: 'info' }, 'info', 'Not applicable (font display strategy information unavailable)', { recommendation: 'This rule checks font display strategy when font information is available' });
258
+ }
247
259
  if (!ctx.hasFontDisplaySwap && ctx.fontFilesCount && ctx.fontFilesCount > 0) {
248
260
  return createResult({ id: 'resources-font-display', name: 'Font Display Strategy', category: 'resources', severity: 'info' }, 'info', 'font-display: swap not detected', {
249
261
  recommendation: 'Add font-display: swap to @font-face rules',
@@ -253,7 +265,7 @@ export const resourceRules = [
253
265
  },
254
266
  });
255
267
  }
256
- return null;
268
+ return createResult({ id: 'resources-font-display', name: 'Font Display Strategy', category: 'resources', severity: 'info' }, 'info', 'Not applicable (no fonts loaded or font-display is configured)', { recommendation: 'This rule checks for font-display strategy when fonts are loaded' });
257
269
  },
258
270
  },
259
271
  {
@@ -263,8 +275,9 @@ export const resourceRules = [
263
275
  severity: 'warning',
264
276
  description: 'Too many HTTP requests slow page load',
265
277
  check: (ctx) => {
266
- if (ctx.totalRequests === undefined)
267
- return null;
278
+ if (ctx.totalRequests === undefined) {
279
+ return createResult({ id: 'resources-total-requests', name: 'Total HTTP Requests', category: 'resources', severity: 'warning' }, 'info', 'Not applicable (total request count unavailable)', { recommendation: 'This rule checks total HTTP requests when request information is available' });
280
+ }
268
281
  const max = 50;
269
282
  if (ctx.totalRequests > max) {
270
283
  return createResult({ id: 'resources-total-requests', name: 'Total HTTP Requests', category: 'resources', severity: 'warning' }, 'warn', `Too many HTTP requests (${ctx.totalRequests})`, {
@@ -287,8 +300,9 @@ export const resourceRules = [
287
300
  severity: 'warning',
288
301
  description: 'Total page weight affects load time',
289
302
  check: (ctx) => {
290
- if (ctx.totalPageSize === undefined)
291
- return null;
303
+ if (ctx.totalPageSize === undefined) {
304
+ return createResult({ id: 'resources-total-size', name: 'Total Page Size', category: 'resources', severity: 'warning' }, 'info', 'Not applicable (total page size information unavailable)', { recommendation: 'This rule checks total page size when page weight information is available' });
305
+ }
292
306
  const maxMB = 3;
293
307
  const sizeMB = ctx.totalPageSize / (1024 * 1024);
294
308
  if (sizeMB > maxMB) {
@@ -312,8 +326,9 @@ export const resourceRules = [
312
326
  severity: 'warning',
313
327
  description: 'Text resources should be compressed with gzip or brotli',
314
328
  check: (ctx) => {
315
- if (ctx.uncompressedResources === undefined)
316
- return null;
329
+ if (ctx.uncompressedResources === undefined) {
330
+ return createResult({ id: 'resources-compression', name: 'Resource Compression', category: 'resources', severity: 'warning' }, 'info', 'Not applicable (resource compression information unavailable)', { recommendation: 'This rule checks resource compression when resource information is available' });
331
+ }
317
332
  if (ctx.uncompressedResources > 0) {
318
333
  return createResult({ id: 'resources-compression', name: 'Resource Compression', category: 'resources', severity: 'warning' }, 'warn', `${ctx.uncompressedResources} uncompressed resource(s)`, {
319
334
  value: ctx.uncompressedResources,
@@ -333,8 +348,9 @@ export const resourceRules = [
333
348
  severity: 'info',
334
349
  description: 'Static resources should have long cache lifetimes',
335
350
  check: (ctx) => {
336
- if (ctx.resourcesWithoutCaching === undefined)
337
- return null;
351
+ if (ctx.resourcesWithoutCaching === undefined) {
352
+ return createResult({ id: 'resources-caching', name: 'Browser Caching', category: 'resources', severity: 'info' }, 'info', 'Not applicable (caching information unavailable)', { recommendation: 'This rule checks browser caching when resource caching information is available' });
353
+ }
338
354
  if (ctx.resourcesWithoutCaching > 0) {
339
355
  return createResult({ id: 'resources-caching', name: 'Browser Caching', category: 'resources', severity: 'info' }, 'info', `${ctx.resourcesWithoutCaching} resource(s) without proper caching`, {
340
356
  value: ctx.resourcesWithoutCaching,
@@ -355,8 +371,9 @@ export const resourceRules = [
355
371
  severity: 'warning',
356
372
  description: 'External JS/CSS files should be accessible',
357
373
  check: (ctx) => {
358
- if (ctx.brokenExternalResources === undefined)
359
- return null;
374
+ if (ctx.brokenExternalResources === undefined) {
375
+ return createResult({ id: 'broken-external-resources', name: 'Broken External Resources', category: 'resources', severity: 'warning' }, 'info', 'Not applicable (external resource status information unavailable)', { recommendation: 'This rule checks for broken external resources when resource information is available' });
376
+ }
360
377
  if (ctx.brokenExternalResources > 0) {
361
378
  return createResult({ id: 'broken-external-resources', name: 'Broken External Resources', category: 'resources', severity: 'warning' }, 'warn', `${ctx.brokenExternalResources} broken external JS/CSS files`, {
362
379
  value: ctx.brokenExternalResources,
@@ -367,7 +384,7 @@ export const resourceRules = [
367
384
  }
368
385
  });
369
386
  }
370
- return null;
387
+ return createResult({ id: 'broken-external-resources', name: 'Broken External Resources', category: 'resources', severity: 'warning' }, 'info', 'Not applicable (no broken external resources detected)', { recommendation: 'This rule checks for broken external JS/CSS files' });
371
388
  },
372
389
  },
373
390
  ];