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.
- package/README.md +47 -0
- package/dist/bin/recker-linux-x64 +0 -0
- package/dist/bin/recker-macos-x64 +0 -0
- package/dist/bin/recker-win-x64.exe +0 -0
- package/dist/bin/rek.cjs +85617 -99560
- package/dist/browser/ai/adaptive-timeout.d.ts +50 -0
- package/dist/browser/ai/adaptive-timeout.js +208 -0
- package/dist/browser/ai/client.d.ts +22 -0
- package/dist/browser/ai/client.js +294 -0
- package/dist/browser/ai/index.d.ts +14 -0
- package/dist/browser/ai/index.js +11 -0
- package/dist/browser/ai/providers/anthropic.d.ts +63 -0
- package/dist/browser/ai/providers/anthropic.js +370 -0
- package/dist/browser/ai/providers/base.d.ts +48 -0
- package/dist/browser/ai/providers/base.js +150 -0
- package/dist/browser/ai/providers/google.d.ts +59 -0
- package/dist/browser/ai/providers/google.js +305 -0
- package/dist/browser/ai/providers/ollama.d.ts +44 -0
- package/dist/browser/ai/providers/ollama.js +240 -0
- package/dist/browser/ai/providers/openai.d.ts +64 -0
- package/dist/browser/ai/providers/openai.js +298 -0
- package/dist/browser/ai/rate-limiter.d.ts +43 -0
- package/dist/browser/ai/rate-limiter.js +215 -0
- package/dist/browser/ai/vector/index.d.ts +2 -0
- package/dist/browser/ai/vector/index.js +2 -0
- package/dist/browser/ai/vector/similarity.d.ts +2 -0
- package/dist/browser/ai/vector/similarity.js +27 -0
- package/dist/browser/ai/vector/store.d.ts +27 -0
- package/dist/browser/ai/vector/store.js +82 -0
- package/dist/browser/browser/cache.d.ts +2 -40
- package/dist/browser/browser/cache.js +2 -199
- package/dist/browser/browser/index.d.ts +8 -0
- package/dist/browser/browser/index.js +8 -0
- package/dist/browser/browser/recker.d.ts +8 -1
- package/dist/browser/browser/recker.js +8 -2
- package/dist/browser/cache/indexed-db.d.ts +10 -0
- package/dist/browser/cache/indexed-db.js +88 -0
- package/dist/browser/cache/service-worker-cache.d.ts +18 -0
- package/dist/browser/cache/service-worker-cache.js +103 -0
- package/dist/browser/cache.d.ts +2 -40
- package/dist/browser/cache.js +2 -199
- package/dist/browser/constants/user-agents.d.ts +7 -0
- package/dist/browser/constants/user-agents.js +7 -0
- package/dist/browser/core/client.d.ts +2 -0
- package/dist/browser/core/client.js +19 -1
- package/dist/browser/index.d.ts +8 -0
- package/dist/browser/index.js +8 -0
- package/dist/browser/plugins/har-recorder.d.ts +40 -0
- package/dist/browser/plugins/har-recorder.js +120 -0
- package/dist/browser/plugins/network-simulation.d.ts +7 -0
- package/dist/browser/plugins/network-simulation.js +13 -0
- package/dist/browser/presets/android.d.ts +2 -0
- package/dist/browser/presets/android.js +16 -0
- package/dist/browser/presets/anthropic.d.ts +8 -0
- package/dist/browser/presets/anthropic.js +27 -0
- package/dist/browser/presets/aws.d.ts +19 -0
- package/dist/browser/presets/aws.js +68 -0
- package/dist/browser/presets/azure-openai.d.ts +10 -0
- package/dist/browser/presets/azure-openai.js +35 -0
- package/dist/browser/presets/azure.d.ts +41 -0
- package/dist/browser/presets/azure.js +104 -0
- package/dist/browser/presets/chaturbate.d.ts +2 -0
- package/dist/browser/presets/chaturbate.js +17 -0
- package/dist/browser/presets/cloudflare.d.ts +12 -0
- package/dist/browser/presets/cloudflare.js +39 -0
- package/dist/browser/presets/cohere.d.ts +7 -0
- package/dist/browser/presets/cohere.js +22 -0
- package/dist/browser/presets/deepseek.d.ts +7 -0
- package/dist/browser/presets/deepseek.js +22 -0
- package/dist/browser/presets/digitalocean.d.ts +5 -0
- package/dist/browser/presets/digitalocean.js +16 -0
- package/dist/browser/presets/discord.d.ts +6 -0
- package/dist/browser/presets/discord.js +17 -0
- package/dist/browser/presets/elevenlabs.d.ts +6 -0
- package/dist/browser/presets/elevenlabs.js +20 -0
- package/dist/browser/presets/enhancers.d.ts +20 -0
- package/dist/browser/presets/enhancers.js +85 -0
- package/dist/browser/presets/fireworks.d.ts +7 -0
- package/dist/browser/presets/fireworks.js +22 -0
- package/dist/browser/presets/gcp.d.ts +34 -0
- package/dist/browser/presets/gcp.js +91 -0
- package/dist/browser/presets/gemini.d.ts +7 -0
- package/dist/browser/presets/gemini.js +23 -0
- package/dist/browser/presets/github.d.ts +6 -0
- package/dist/browser/presets/github.js +17 -0
- package/dist/browser/presets/gitlab.d.ts +6 -0
- package/dist/browser/presets/gitlab.js +16 -0
- package/dist/browser/presets/groq.d.ts +7 -0
- package/dist/browser/presets/groq.js +22 -0
- package/dist/browser/presets/hubspot.d.ts +9 -0
- package/dist/browser/presets/hubspot.js +28 -0
- package/dist/browser/presets/huggingface.d.ts +7 -0
- package/dist/browser/presets/huggingface.js +23 -0
- package/dist/browser/presets/index.d.ts +47 -0
- package/dist/browser/presets/index.js +47 -0
- package/dist/browser/presets/ios.d.ts +2 -0
- package/dist/browser/presets/ios.js +13 -0
- package/dist/browser/presets/linear.d.ts +5 -0
- package/dist/browser/presets/linear.js +16 -0
- package/dist/browser/presets/mailgun.d.ts +7 -0
- package/dist/browser/presets/mailgun.js +20 -0
- package/dist/browser/presets/meta.d.ts +10 -0
- package/dist/browser/presets/meta.js +33 -0
- package/dist/browser/presets/mistral.d.ts +7 -0
- package/dist/browser/presets/mistral.js +22 -0
- package/dist/browser/presets/notion.d.ts +6 -0
- package/dist/browser/presets/notion.js +17 -0
- package/dist/browser/presets/openai.d.ts +9 -0
- package/dist/browser/presets/openai.js +30 -0
- package/dist/browser/presets/oracle.d.ts +19 -0
- package/dist/browser/presets/oracle.js +117 -0
- package/dist/browser/presets/perplexity.d.ts +7 -0
- package/dist/browser/presets/perplexity.js +22 -0
- package/dist/browser/presets/pinecone.d.ts +8 -0
- package/dist/browser/presets/pinecone.js +42 -0
- package/dist/browser/presets/registry.d.ts +23 -0
- package/dist/browser/presets/registry.js +519 -0
- package/dist/browser/presets/replicate.d.ts +7 -0
- package/dist/browser/presets/replicate.js +23 -0
- package/dist/browser/presets/sendgrid.d.ts +6 -0
- package/dist/browser/presets/sendgrid.js +20 -0
- package/dist/browser/presets/sentry.d.ts +11 -0
- package/dist/browser/presets/sentry.js +48 -0
- package/dist/browser/presets/sinch.d.ts +9 -0
- package/dist/browser/presets/sinch.js +39 -0
- package/dist/browser/presets/slack.d.ts +5 -0
- package/dist/browser/presets/slack.js +16 -0
- package/dist/browser/presets/square.d.ts +10 -0
- package/dist/browser/presets/square.js +33 -0
- package/dist/browser/presets/stripe.d.ts +7 -0
- package/dist/browser/presets/stripe.js +23 -0
- package/dist/browser/presets/supabase.d.ts +6 -0
- package/dist/browser/presets/supabase.js +18 -0
- package/dist/browser/presets/tiktok.d.ts +10 -0
- package/dist/browser/presets/tiktok.js +38 -0
- package/dist/browser/presets/together.d.ts +7 -0
- package/dist/browser/presets/together.js +22 -0
- package/dist/browser/presets/twilio.d.ts +6 -0
- package/dist/browser/presets/twilio.js +17 -0
- package/dist/browser/presets/vercel.d.ts +6 -0
- package/dist/browser/presets/vercel.js +23 -0
- package/dist/browser/presets/vultr.d.ts +5 -0
- package/dist/browser/presets/vultr.js +16 -0
- package/dist/browser/presets/xai.d.ts +8 -0
- package/dist/browser/presets/xai.js +23 -0
- package/dist/browser/presets/youtube.d.ts +5 -0
- package/dist/browser/presets/youtube.js +20 -0
- package/dist/browser/recker.d.ts +8 -1
- package/dist/browser/recker.js +8 -2
- package/dist/browser/scrape/document.d.ts +5 -4
- package/dist/browser/scrape/document.js +89 -76
- package/dist/browser/scrape/element.d.ts +10 -8
- package/dist/browser/scrape/element.js +295 -81
- package/dist/browser/scrape/extractors.d.ts +11 -11
- package/dist/browser/scrape/extractors.js +145 -113
- package/dist/browser/scrape/parser/back.d.ts +1 -0
- package/dist/browser/scrape/parser/back.js +3 -0
- package/dist/browser/scrape/parser/index.d.ts +20 -0
- package/dist/browser/scrape/parser/index.js +19 -0
- package/dist/browser/scrape/parser/matcher.d.ts +30 -0
- package/dist/browser/scrape/parser/matcher.js +99 -0
- package/dist/browser/scrape/parser/nodes/comment.d.ts +12 -0
- package/dist/browser/scrape/parser/nodes/comment.js +21 -0
- package/dist/browser/scrape/parser/nodes/html.d.ts +110 -0
- package/dist/browser/scrape/parser/nodes/html.js +978 -0
- package/dist/browser/scrape/parser/nodes/node.d.ts +18 -0
- package/dist/browser/scrape/parser/nodes/node.js +31 -0
- package/dist/browser/scrape/parser/nodes/text.d.ts +14 -0
- package/dist/browser/scrape/parser/nodes/text.js +30 -0
- package/dist/browser/scrape/parser/nodes/type.d.ts +6 -0
- package/dist/browser/scrape/parser/nodes/type.js +7 -0
- package/dist/browser/scrape/parser/parse.d.ts +1 -0
- package/dist/browser/scrape/parser/parse.js +1 -0
- package/dist/browser/scrape/parser/valid.d.ts +2 -0
- package/dist/browser/scrape/parser/valid.js +5 -0
- package/dist/browser/scrape/parser/void-tag.d.ts +7 -0
- package/dist/browser/scrape/parser/void-tag.js +43 -0
- package/dist/browser/scrape/types.d.ts +7 -0
- package/dist/browser/seo/analyzer.d.ts +59 -0
- package/dist/browser/seo/analyzer.js +1399 -0
- package/dist/browser/seo/keywords.d.ts +16 -0
- package/dist/browser/seo/keywords.js +55 -0
- package/dist/browser/seo/rules/accessibility.d.ts +2 -0
- package/dist/browser/seo/rules/accessibility.js +733 -0
- package/dist/browser/seo/rules/ai-search.d.ts +2 -0
- package/dist/browser/seo/rules/ai-search.js +436 -0
- package/dist/browser/seo/rules/analytics.d.ts +2 -0
- package/dist/browser/seo/rules/analytics.js +306 -0
- package/dist/browser/seo/rules/best-practices.d.ts +2 -0
- package/dist/browser/seo/rules/best-practices.js +195 -0
- package/dist/browser/seo/rules/canonical.d.ts +12 -0
- package/dist/browser/seo/rules/canonical.js +270 -0
- package/dist/browser/seo/rules/content.d.ts +2 -0
- package/dist/browser/seo/rules/content.js +522 -0
- package/dist/browser/seo/rules/crawl.d.ts +2 -0
- package/dist/browser/seo/rules/crawl.js +435 -0
- package/dist/browser/seo/rules/cwv.d.ts +2 -0
- package/dist/browser/seo/rules/cwv.js +248 -0
- package/dist/browser/seo/rules/ecommerce.d.ts +2 -0
- package/dist/browser/seo/rules/ecommerce.js +312 -0
- package/dist/browser/seo/rules/i18n.d.ts +2 -0
- package/dist/browser/seo/rules/i18n.js +288 -0
- package/dist/browser/seo/rules/images.d.ts +2 -0
- package/dist/browser/seo/rules/images.js +255 -0
- package/dist/browser/seo/rules/index.d.ts +52 -0
- package/dist/browser/seo/rules/index.js +163 -0
- package/dist/browser/seo/rules/internal-linking.d.ts +2 -0
- package/dist/browser/seo/rules/internal-linking.js +394 -0
- package/dist/browser/seo/rules/links.d.ts +2 -0
- package/dist/browser/seo/rules/links.js +498 -0
- package/dist/browser/seo/rules/local.d.ts +2 -0
- package/dist/browser/seo/rules/local.js +289 -0
- package/dist/browser/seo/rules/manifest.d.ts +2 -0
- package/dist/browser/seo/rules/manifest.js +621 -0
- package/dist/browser/seo/rules/meta.d.ts +2 -0
- package/dist/browser/seo/rules/meta.js +805 -0
- package/dist/browser/seo/rules/mobile.d.ts +2 -0
- package/dist/browser/seo/rules/mobile.js +161 -0
- package/dist/browser/seo/rules/performance.d.ts +2 -0
- package/dist/browser/seo/rules/performance.js +738 -0
- package/dist/browser/seo/rules/pwa.d.ts +2 -0
- package/dist/browser/seo/rules/pwa.js +299 -0
- package/dist/browser/seo/rules/readability.d.ts +2 -0
- package/dist/browser/seo/rules/readability.js +264 -0
- package/dist/browser/seo/rules/redirects.d.ts +16 -0
- package/dist/browser/seo/rules/redirects.js +199 -0
- package/dist/browser/seo/rules/resources.d.ts +2 -0
- package/dist/browser/seo/rules/resources.js +390 -0
- package/dist/browser/seo/rules/schema.d.ts +2 -0
- package/dist/browser/seo/rules/schema.js +379 -0
- package/dist/browser/seo/rules/security.d.ts +2 -0
- package/dist/browser/seo/rules/security.js +877 -0
- package/dist/browser/seo/rules/social.d.ts +2 -0
- package/dist/browser/seo/rules/social.js +603 -0
- package/dist/browser/seo/rules/structural.d.ts +2 -0
- package/dist/browser/seo/rules/structural.js +223 -0
- package/dist/browser/seo/rules/technical-advanced.d.ts +10 -0
- package/dist/browser/seo/rules/technical-advanced.js +289 -0
- package/dist/browser/seo/rules/technical.d.ts +3 -0
- package/dist/browser/seo/rules/technical.js +509 -0
- package/dist/browser/seo/rules/thresholds.d.ts +196 -0
- package/dist/browser/seo/rules/thresholds.js +118 -0
- package/dist/browser/seo/rules/types.d.ts +518 -0
- package/dist/browser/seo/rules/types.js +11 -0
- package/dist/browser/seo/types.d.ts +211 -0
- package/dist/browser/seo/types.js +1 -0
- package/dist/browser/transport/curl.d.ts +4 -0
- package/dist/browser/transport/curl.js +101 -0
- package/dist/browser/transport/undici.js +1 -2
- package/dist/browser/transport/worker.d.ts +18 -0
- package/dist/browser/transport/worker.js +278 -0
- package/dist/browser/types/index.d.ts +4 -1
- package/dist/browser/utils/binary-manager.d.ts +4 -0
- package/dist/browser/utils/binary-manager.js +72 -0
- package/dist/browser/utils/user-agent.js +2 -13
- package/dist/cache/indexed-db.d.ts +10 -0
- package/dist/cache/indexed-db.js +88 -0
- package/dist/cache/service-worker-cache.d.ts +18 -0
- package/dist/cache/service-worker-cache.js +103 -0
- package/dist/cli/commands/ai.d.ts +2 -0
- package/dist/cli/commands/ai.js +162 -0
- package/dist/cli/commands/bench.d.ts +2 -0
- package/dist/cli/commands/bench.js +51 -0
- package/dist/cli/commands/dns.d.ts +2 -0
- package/dist/cli/commands/dns.js +295 -0
- package/dist/cli/commands/har.d.ts +2 -0
- package/dist/cli/commands/har.js +171 -0
- package/dist/cli/commands/hls.d.ts +2 -0
- package/dist/cli/commands/hls.js +192 -0
- package/dist/cli/commands/network.d.ts +2 -0
- package/dist/cli/commands/network.js +288 -0
- package/dist/cli/commands/protocols.d.ts +2 -0
- package/dist/cli/commands/protocols.js +344 -0
- package/dist/cli/commands/scrape.d.ts +2 -0
- package/dist/cli/commands/scrape.js +176 -0
- package/dist/cli/commands/security.d.ts +2 -0
- package/dist/cli/commands/security.js +57 -0
- package/dist/cli/commands/seo.d.ts +2 -0
- package/dist/cli/commands/seo.js +125 -0
- package/dist/cli/commands/serve.d.ts +2 -0
- package/dist/cli/commands/serve.js +531 -0
- package/dist/cli/commands/spider.d.ts +3 -0
- package/dist/cli/commands/spider.js +478 -0
- package/dist/cli/commands/utils.d.ts +2 -0
- package/dist/cli/commands/utils.js +176 -0
- package/dist/cli/commands/vector.d.ts +2 -0
- package/dist/cli/commands/vector.js +158 -0
- package/dist/cli/handler.d.ts +2 -2
- package/dist/cli/handler.js +6 -6
- package/dist/cli/helpers.d.ts +7 -0
- package/dist/cli/helpers.js +128 -0
- package/dist/cli/index.js +96 -5228
- package/dist/cli/parser/help.d.ts +2 -0
- package/dist/cli/parser/help.js +52 -0
- package/dist/cli/parser/index.d.ts +3 -0
- package/dist/cli/parser/index.js +3 -0
- package/dist/cli/parser/parser.d.ts +4 -0
- package/dist/cli/parser/parser.js +146 -0
- package/dist/cli/parser/types.d.ts +41 -0
- package/dist/cli/parser/types.js +1 -0
- package/dist/cli/presets.d.ts +1 -1
- package/dist/cli/presets.js +1 -1
- package/dist/cli/router.d.ts +36 -0
- package/dist/cli/router.js +195 -0
- package/dist/cli/tui/ai-chat.js +1 -1
- package/dist/cli/tui/commands/context.d.ts +9 -0
- package/dist/cli/tui/commands/context.js +1 -0
- package/dist/cli/tui/commands/dns.d.ts +10 -0
- package/dist/cli/tui/commands/dns.js +461 -0
- package/dist/cli/tui/commands/hls.d.ts +2 -0
- package/dist/cli/tui/commands/hls.js +162 -0
- package/dist/cli/tui/commands/ip.d.ts +2 -0
- package/dist/cli/tui/commands/ip.js +45 -0
- package/dist/cli/tui/commands/network.d.ts +3 -0
- package/dist/cli/tui/commands/network.js +81 -0
- package/dist/cli/tui/commands/protocols.d.ts +6 -0
- package/dist/cli/tui/commands/protocols.js +531 -0
- package/dist/cli/tui/commands/security.d.ts +2 -0
- package/dist/cli/tui/commands/security.js +48 -0
- package/dist/cli/tui/commands/seo.d.ts +2 -0
- package/dist/cli/tui/commands/seo.js +74 -0
- package/dist/cli/tui/context.d.ts +12 -0
- package/dist/cli/tui/context.js +1 -0
- package/dist/cli/tui/shell.d.ts +11 -20
- package/dist/cli/tui/shell.js +216 -1873
- package/dist/constants/user-agents.d.ts +7 -0
- package/dist/constants/user-agents.js +7 -0
- package/dist/core/client.d.ts +2 -0
- package/dist/core/client.js +19 -1
- package/dist/index.d.ts +1 -0
- package/dist/index.js +1 -0
- package/dist/mcp/cli.js +2 -3
- package/dist/mcp/data/embeddings.json +1 -1
- package/dist/mcp/tools/network.js +298 -158
- package/dist/plugins/har-player.d.ts +23 -0
- package/dist/plugins/har-player.js +49 -0
- package/dist/plugins/har-recorder.d.ts +37 -3
- package/dist/plugins/har-recorder.js +116 -63
- package/dist/plugins/network-simulation.d.ts +7 -0
- package/dist/plugins/network-simulation.js +13 -0
- package/dist/presets/android.d.ts +2 -0
- package/dist/presets/android.js +16 -0
- package/dist/presets/chaturbate.d.ts +2 -0
- package/dist/presets/chaturbate.js +17 -0
- package/dist/presets/elevenlabs.d.ts +6 -0
- package/dist/presets/elevenlabs.js +20 -0
- package/dist/presets/enhancers.d.ts +20 -0
- package/dist/presets/enhancers.js +85 -0
- package/dist/presets/hubspot.d.ts +9 -0
- package/dist/presets/hubspot.js +28 -0
- package/dist/presets/index.d.ts +10 -0
- package/dist/presets/index.js +10 -0
- package/dist/presets/ios.d.ts +2 -0
- package/dist/presets/ios.js +13 -0
- package/dist/presets/pinecone.d.ts +8 -0
- package/dist/presets/pinecone.js +42 -0
- package/dist/presets/registry.js +60 -0
- package/dist/presets/sendgrid.d.ts +6 -0
- package/dist/presets/sendgrid.js +20 -0
- package/dist/presets/sentry.d.ts +11 -0
- package/dist/presets/sentry.js +48 -0
- package/dist/presets/square.d.ts +10 -0
- package/dist/presets/square.js +33 -0
- package/dist/recker.d.ts +3 -0
- package/dist/recker.js +4 -0
- package/dist/scrape/document.d.ts +5 -4
- package/dist/scrape/document.js +89 -76
- package/dist/scrape/element.d.ts +10 -8
- package/dist/scrape/element.js +295 -81
- package/dist/scrape/extractors.d.ts +11 -11
- package/dist/scrape/extractors.js +145 -113
- package/dist/scrape/index.d.ts +2 -0
- package/dist/scrape/index.js +1 -0
- package/dist/scrape/parser/back.d.ts +1 -0
- package/dist/scrape/parser/back.js +3 -0
- package/dist/scrape/parser/index.d.ts +20 -0
- package/dist/scrape/parser/index.js +19 -0
- package/dist/scrape/parser/matcher.d.ts +30 -0
- package/dist/scrape/parser/matcher.js +99 -0
- package/dist/scrape/parser/nodes/comment.d.ts +12 -0
- package/dist/scrape/parser/nodes/comment.js +21 -0
- package/dist/scrape/parser/nodes/html.d.ts +110 -0
- package/dist/scrape/parser/nodes/html.js +978 -0
- package/dist/scrape/parser/nodes/node.d.ts +18 -0
- package/dist/scrape/parser/nodes/node.js +31 -0
- package/dist/scrape/parser/nodes/text.d.ts +14 -0
- package/dist/scrape/parser/nodes/text.js +30 -0
- package/dist/scrape/parser/nodes/type.d.ts +6 -0
- package/dist/scrape/parser/nodes/type.js +7 -0
- package/dist/scrape/parser/parse.d.ts +1 -0
- package/dist/scrape/parser/parse.js +1 -0
- package/dist/scrape/parser/valid.d.ts +2 -0
- package/dist/scrape/parser/valid.js +5 -0
- package/dist/scrape/parser/void-tag.d.ts +7 -0
- package/dist/scrape/parser/void-tag.js +43 -0
- package/dist/scrape/spider.d.ts +19 -0
- package/dist/scrape/spider.js +28 -3
- package/dist/scrape/types.d.ts +7 -0
- package/dist/seo/analyzer.d.ts +15 -5
- package/dist/seo/analyzer.js +636 -175
- package/dist/seo/formatter.d.ts +16 -0
- package/dist/seo/formatter.js +228 -0
- package/dist/seo/index.d.ts +2 -0
- package/dist/seo/index.js +1 -0
- package/dist/seo/keywords.d.ts +16 -0
- package/dist/seo/keywords.js +55 -0
- package/dist/seo/rules/accessibility.js +96 -57
- package/dist/seo/rules/ai-search.js +44 -31
- package/dist/seo/rules/analytics.d.ts +2 -0
- package/dist/seo/rules/analytics.js +306 -0
- package/dist/seo/rules/best-practices.js +21 -14
- package/dist/seo/rules/canonical.js +53 -32
- package/dist/seo/rules/content.js +317 -31
- package/dist/seo/rules/crawl.js +55 -40
- package/dist/seo/rules/cwv.js +21 -15
- package/dist/seo/rules/ecommerce.js +82 -22
- package/dist/seo/rules/i18n.js +75 -36
- package/dist/seo/rules/images.js +109 -30
- package/dist/seo/rules/index.js +7 -1
- package/dist/seo/rules/internal-linking.js +58 -39
- package/dist/seo/rules/links.js +79 -52
- package/dist/seo/rules/local.js +49 -25
- package/dist/seo/rules/manifest.d.ts +2 -0
- package/dist/seo/rules/manifest.js +621 -0
- package/dist/seo/rules/meta.js +339 -81
- package/dist/seo/rules/mobile.js +112 -2
- package/dist/seo/rules/performance.js +434 -66
- package/dist/seo/rules/pwa.js +36 -39
- package/dist/seo/rules/readability.js +31 -22
- package/dist/seo/rules/redirects.js +21 -15
- package/dist/seo/rules/resources.js +59 -42
- package/dist/seo/rules/schema.js +333 -8
- package/dist/seo/rules/security.js +142 -80
- package/dist/seo/rules/social.js +277 -47
- package/dist/seo/rules/structural.js +87 -19
- package/dist/seo/rules/technical-advanced.js +30 -24
- package/dist/seo/rules/technical.d.ts +1 -0
- package/dist/seo/rules/technical.js +272 -42
- package/dist/seo/rules/types.d.ts +74 -2
- package/dist/seo/seo-spider.d.ts +35 -0
- package/dist/seo/seo-spider.js +152 -13
- package/dist/seo/types.d.ts +8 -1
- package/dist/seo/validators/llms-txt.js +19 -0
- package/dist/seo/validators/rss.d.ts +11 -0
- package/dist/seo/validators/rss.js +93 -0
- package/dist/seo/validators/sitemap.js +36 -26
- package/dist/transport/curl.d.ts +4 -0
- package/dist/transport/curl.js +101 -0
- package/dist/transport/udp.js +0 -1
- package/dist/transport/undici.js +1 -2
- package/dist/transport/worker.d.ts +18 -0
- package/dist/transport/worker.js +278 -0
- package/dist/types/index.d.ts +4 -1
- package/dist/utils/binary-manager.d.ts +4 -0
- package/dist/utils/binary-manager.js +72 -0
- package/dist/utils/optional-require.d.ts +7 -8
- package/dist/utils/optional-require.js +2 -21
- package/dist/utils/upload.d.ts +6 -0
- package/dist/utils/upload.js +11 -0
- package/dist/utils/user-agent.js +2 -13
- package/dist/version.js +1 -1
- package/package.json +12 -6
- package/dist/browser/utils/optional-require.d.ts +0 -19
- 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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
175
|
-
|
|
176
|
-
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
];
|