uxinspect 0.2.0 → 0.11.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +332 -22
- package/dist/a11y-filter.d.ts +15 -0
- package/dist/a11y-filter.d.ts.map +1 -0
- package/dist/a11y-filter.js +107 -0
- package/dist/a11y-filter.js.map +1 -0
- package/dist/ab-compare.d.ts +23 -0
- package/dist/ab-compare.d.ts.map +1 -0
- package/dist/ab-compare.js +340 -0
- package/dist/ab-compare.js.map +1 -0
- package/dist/ai-codegen.d.ts +30 -0
- package/dist/ai-codegen.d.ts.map +1 -0
- package/dist/ai-codegen.js +296 -0
- package/dist/ai-codegen.js.map +1 -0
- package/dist/ai-triage.d.ts +26 -0
- package/dist/ai-triage.d.ts.map +1 -0
- package/dist/ai-triage.js +207 -0
- package/dist/ai-triage.js.map +1 -0
- package/dist/amp.d.ts +32 -0
- package/dist/amp.d.ts.map +1 -0
- package/dist/amp.js +179 -0
- package/dist/amp.js.map +1 -0
- package/dist/animation-audit.d.ts +25 -0
- package/dist/animation-audit.d.ts.map +1 -0
- package/dist/animation-audit.js +296 -0
- package/dist/animation-audit.js.map +1 -0
- package/dist/api.d.ts +3 -0
- package/dist/api.d.ts.map +1 -0
- package/dist/api.js +85 -0
- package/dist/api.js.map +1 -0
- package/dist/aria-audit.d.ts +20 -0
- package/dist/aria-audit.d.ts.map +1 -0
- package/dist/aria-audit.js +445 -0
- package/dist/aria-audit.js.map +1 -0
- package/dist/assertions.d.ts +30 -0
- package/dist/assertions.d.ts.map +1 -0
- package/dist/assertions.js +342 -0
- package/dist/assertions.js.map +1 -0
- package/dist/autofix.d.ts +40 -0
- package/dist/autofix.d.ts.map +1 -0
- package/dist/autofix.js +244 -0
- package/dist/autofix.js.map +1 -0
- package/dist/badge.d.ts +27 -0
- package/dist/badge.d.ts.map +1 -0
- package/dist/badge.js +183 -0
- package/dist/badge.js.map +1 -0
- package/dist/baseline-drift.d.ts +43 -0
- package/dist/baseline-drift.d.ts.map +1 -0
- package/dist/baseline-drift.js +208 -0
- package/dist/baseline-drift.js.map +1 -0
- package/dist/bdd.d.ts +31 -0
- package/dist/bdd.d.ts.map +1 -0
- package/dist/bdd.js +316 -0
- package/dist/bdd.js.map +1 -0
- package/dist/bisect.d.ts +32 -0
- package/dist/bisect.d.ts.map +1 -0
- package/dist/bisect.js +253 -0
- package/dist/bisect.js.map +1 -0
- package/dist/budget-diff.d.ts +37 -0
- package/dist/budget-diff.d.ts.map +1 -0
- package/dist/budget-diff.js +273 -0
- package/dist/budget-diff.js.map +1 -0
- package/dist/budget-file.d.ts +15 -0
- package/dist/budget-file.d.ts.map +1 -0
- package/dist/budget-file.js +185 -0
- package/dist/budget-file.js.map +1 -0
- package/dist/bundle-size.d.ts +36 -0
- package/dist/bundle-size.d.ts.map +1 -0
- package/dist/bundle-size.js +347 -0
- package/dist/bundle-size.js.map +1 -0
- package/dist/cache-headers.d.ts +33 -0
- package/dist/cache-headers.d.ts.map +1 -0
- package/dist/cache-headers.js +270 -0
- package/dist/cache-headers.js.map +1 -0
- package/dist/canonical-audit.d.ts +19 -0
- package/dist/canonical-audit.d.ts.map +1 -0
- package/dist/canonical-audit.js +196 -0
- package/dist/canonical-audit.js.map +1 -0
- package/dist/chaos.d.ts +38 -0
- package/dist/chaos.d.ts.map +1 -0
- package/dist/chaos.js +348 -0
- package/dist/chaos.js.map +1 -0
- package/dist/cli.js +201 -23
- package/dist/cli.js.map +1 -1
- package/dist/clickjacking-audit.d.ts +18 -0
- package/dist/clickjacking-audit.d.ts.map +1 -0
- package/dist/clickjacking-audit.js +231 -0
- package/dist/clickjacking-audit.js.map +1 -0
- package/dist/cls-culprit.d.ts +36 -0
- package/dist/cls-culprit.d.ts.map +1 -0
- package/dist/cls-culprit.js +203 -0
- package/dist/cls-culprit.js.map +1 -0
- package/dist/cls-timeline.d.ts +30 -0
- package/dist/cls-timeline.d.ts.map +1 -0
- package/dist/cls-timeline.js +61 -0
- package/dist/cls-timeline.js.map +1 -0
- package/dist/codegen-converter.d.ts +19 -0
- package/dist/codegen-converter.d.ts.map +1 -0
- package/dist/codegen-converter.js +464 -0
- package/dist/codegen-converter.js.map +1 -0
- package/dist/compression.d.ts +14 -0
- package/dist/compression.d.ts.map +1 -0
- package/dist/compression.js +150 -0
- package/dist/compression.js.map +1 -0
- package/dist/console-errors.d.ts +24 -0
- package/dist/console-errors.d.ts.map +1 -0
- package/dist/console-errors.js +96 -0
- package/dist/console-errors.js.map +1 -0
- package/dist/content-quality.d.ts +34 -0
- package/dist/content-quality.d.ts.map +1 -0
- package/dist/content-quality.js +124 -0
- package/dist/content-quality.js.map +1 -0
- package/dist/contract-openapi.d.ts +74 -0
- package/dist/contract-openapi.d.ts.map +1 -0
- package/dist/contract-openapi.js +305 -0
- package/dist/contract-openapi.js.map +1 -0
- package/dist/cookie-banner.d.ts +27 -0
- package/dist/cookie-banner.d.ts.map +1 -0
- package/dist/cookie-banner.js +285 -0
- package/dist/cookie-banner.js.map +1 -0
- package/dist/cookie-flags-audit.d.ts +35 -0
- package/dist/cookie-flags-audit.d.ts.map +1 -0
- package/dist/cookie-flags-audit.js +167 -0
- package/dist/cookie-flags-audit.js.map +1 -0
- package/dist/cpu-throttle.d.ts +34 -0
- package/dist/cpu-throttle.d.ts.map +1 -0
- package/dist/cpu-throttle.js +149 -0
- package/dist/cpu-throttle.js.map +1 -0
- package/dist/crawl.d.ts +29 -0
- package/dist/crawl.d.ts.map +1 -0
- package/dist/crawl.js +153 -0
- package/dist/crawl.js.map +1 -0
- package/dist/critical-css.d.ts +25 -0
- package/dist/critical-css.d.ts.map +1 -0
- package/dist/critical-css.js +353 -0
- package/dist/critical-css.js.map +1 -0
- package/dist/cross-browser.d.ts +44 -0
- package/dist/cross-browser.d.ts.map +1 -0
- package/dist/cross-browser.js +300 -0
- package/dist/cross-browser.js.map +1 -0
- package/dist/csrf-audit.d.ts +33 -0
- package/dist/csrf-audit.d.ts.map +1 -0
- package/dist/csrf-audit.js +276 -0
- package/dist/csrf-audit.js.map +1 -0
- package/dist/css-coverage.d.ts +20 -0
- package/dist/css-coverage.d.ts.map +1 -0
- package/dist/css-coverage.js +91 -0
- package/dist/css-coverage.js.map +1 -0
- package/dist/csv-exporter.d.ts +34 -0
- package/dist/csv-exporter.d.ts.map +1 -0
- package/dist/csv-exporter.js +241 -0
- package/dist/csv-exporter.js.map +1 -0
- package/dist/dark-mode-audit.d.ts +31 -0
- package/dist/dark-mode-audit.d.ts.map +1 -0
- package/dist/dark-mode-audit.js +236 -0
- package/dist/dark-mode-audit.js.map +1 -0
- package/dist/dead-images.d.ts +18 -0
- package/dist/dead-images.d.ts.map +1 -0
- package/dist/dead-images.js +236 -0
- package/dist/dead-images.js.map +1 -0
- package/dist/deadclicks.d.ts +19 -0
- package/dist/deadclicks.d.ts.map +1 -0
- package/dist/deadclicks.js +109 -0
- package/dist/deadclicks.js.map +1 -0
- package/dist/discord-formatter.d.ts +39 -0
- package/dist/discord-formatter.d.ts.map +1 -0
- package/dist/discord-formatter.js +191 -0
- package/dist/discord-formatter.js.map +1 -0
- package/dist/dom-audit.d.ts +23 -0
- package/dist/dom-audit.d.ts.map +1 -0
- package/dist/dom-audit.js +111 -0
- package/dist/dom-audit.js.map +1 -0
- package/dist/driver.d.ts.map +1 -1
- package/dist/driver.js +10 -0
- package/dist/driver.js.map +1 -1
- package/dist/error-page-audit.d.ts +26 -0
- package/dist/error-page-audit.d.ts.map +1 -0
- package/dist/error-page-audit.js +219 -0
- package/dist/error-page-audit.js.map +1 -0
- package/dist/event-listener-audit.d.ts +22 -0
- package/dist/event-listener-audit.d.ts.map +1 -0
- package/dist/event-listener-audit.js +156 -0
- package/dist/event-listener-audit.js.map +1 -0
- package/dist/exposed-paths.d.ts +21 -0
- package/dist/exposed-paths.d.ts.map +1 -0
- package/dist/exposed-paths.js +116 -0
- package/dist/exposed-paths.js.map +1 -0
- package/dist/favicon-audit.d.ts +28 -0
- package/dist/favicon-audit.d.ts.map +1 -0
- package/dist/favicon-audit.js +358 -0
- package/dist/favicon-audit.js.map +1 -0
- package/dist/flaky-detector.d.ts +32 -0
- package/dist/flaky-detector.d.ts.map +1 -0
- package/dist/flaky-detector.js +254 -0
- package/dist/flaky-detector.js.map +1 -0
- package/dist/flaky.d.ts +28 -0
- package/dist/flaky.d.ts.map +1 -0
- package/dist/flaky.js +106 -0
- package/dist/flaky.js.map +1 -0
- package/dist/focus-trap-audit.d.ts +29 -0
- package/dist/focus-trap-audit.d.ts.map +1 -0
- package/dist/focus-trap-audit.js +285 -0
- package/dist/focus-trap-audit.js.map +1 -0
- package/dist/font-loading.d.ts +29 -0
- package/dist/font-loading.d.ts.map +1 -0
- package/dist/font-loading.js +216 -0
- package/dist/font-loading.js.map +1 -0
- package/dist/forms-audit.d.ts +23 -0
- package/dist/forms-audit.d.ts.map +1 -0
- package/dist/forms-audit.js +147 -0
- package/dist/forms-audit.js.map +1 -0
- package/dist/github-annotations.d.ts +17 -0
- package/dist/github-annotations.d.ts.map +1 -0
- package/dist/github-annotations.js +264 -0
- package/dist/github-annotations.js.map +1 -0
- package/dist/graphql.d.ts +60 -0
- package/dist/graphql.d.ts.map +1 -0
- package/dist/graphql.js +188 -0
- package/dist/graphql.js.map +1 -0
- package/dist/har-waterfall.d.ts +37 -0
- package/dist/har-waterfall.d.ts.map +1 -0
- package/dist/har-waterfall.js +376 -0
- package/dist/har-waterfall.js.map +1 -0
- package/dist/heading-hierarchy.d.ts +20 -0
- package/dist/heading-hierarchy.d.ts.map +1 -0
- package/dist/heading-hierarchy.js +112 -0
- package/dist/heading-hierarchy.js.map +1 -0
- package/dist/headless-detect.d.ts +22 -0
- package/dist/headless-detect.d.ts.map +1 -0
- package/dist/headless-detect.js +167 -0
- package/dist/headless-detect.js.map +1 -0
- package/dist/history-timeline.d.ts +13 -0
- package/dist/history-timeline.d.ts.map +1 -0
- package/dist/history-timeline.js +327 -0
- package/dist/history-timeline.js.map +1 -0
- package/dist/hreflang-audit.d.ts +26 -0
- package/dist/hreflang-audit.d.ts.map +1 -0
- package/dist/hreflang-audit.js +273 -0
- package/dist/hreflang-audit.js.map +1 -0
- package/dist/hydration-audit.d.ts +21 -0
- package/dist/hydration-audit.d.ts.map +1 -0
- package/dist/hydration-audit.js +277 -0
- package/dist/hydration-audit.js.map +1 -0
- package/dist/image-audit.d.ts +41 -0
- package/dist/image-audit.d.ts.map +1 -0
- package/dist/image-audit.js +229 -0
- package/dist/image-audit.js.map +1 -0
- package/dist/index.d.ts +119 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +708 -2
- package/dist/index.js.map +1 -1
- package/dist/init-wizard.d.ts +33 -0
- package/dist/init-wizard.d.ts.map +1 -0
- package/dist/init-wizard.js +289 -0
- package/dist/init-wizard.js.map +1 -0
- package/dist/inp-audit.d.ts +26 -0
- package/dist/inp-audit.d.ts.map +1 -0
- package/dist/inp-audit.js +202 -0
- package/dist/inp-audit.js.map +1 -0
- package/dist/js-coverage.d.ts +20 -0
- package/dist/js-coverage.d.ts.map +1 -0
- package/dist/js-coverage.js +81 -0
- package/dist/js-coverage.js.map +1 -0
- package/dist/json-schema.d.ts +27 -0
- package/dist/json-schema.d.ts.map +1 -0
- package/dist/json-schema.js +284 -0
- package/dist/json-schema.js.map +1 -0
- package/dist/keyboard.d.ts +21 -0
- package/dist/keyboard.d.ts.map +1 -0
- package/dist/keyboard.js +119 -0
- package/dist/keyboard.js.map +1 -0
- package/dist/lang-audit.d.ts +24 -0
- package/dist/lang-audit.d.ts.map +1 -0
- package/dist/lang-audit.js +141 -0
- package/dist/lang-audit.js.map +1 -0
- package/dist/lcp-element.d.ts +22 -0
- package/dist/lcp-element.d.ts.map +1 -0
- package/dist/lcp-element.js +240 -0
- package/dist/lcp-element.js.map +1 -0
- package/dist/longtasks.d.ts +38 -0
- package/dist/longtasks.d.ts.map +1 -0
- package/dist/longtasks.js +97 -0
- package/dist/longtasks.js.map +1 -0
- package/dist/mailbox.d.ts +35 -0
- package/dist/mailbox.d.ts.map +1 -0
- package/dist/mailbox.js +207 -0
- package/dist/mailbox.js.map +1 -0
- package/dist/media-audit.d.ts +20 -0
- package/dist/media-audit.d.ts.map +1 -0
- package/dist/media-audit.js +182 -0
- package/dist/media-audit.js.map +1 -0
- package/dist/metrics-exporter.d.ts +23 -0
- package/dist/metrics-exporter.d.ts.map +1 -0
- package/dist/metrics-exporter.js +297 -0
- package/dist/metrics-exporter.js.map +1 -0
- package/dist/mixed-content.d.ts +19 -0
- package/dist/mixed-content.d.ts.map +1 -0
- package/dist/mixed-content.js +86 -0
- package/dist/mixed-content.js.map +1 -0
- package/dist/motion-prefs.d.ts +21 -0
- package/dist/motion-prefs.d.ts.map +1 -0
- package/dist/motion-prefs.js +170 -0
- package/dist/motion-prefs.js.map +1 -0
- package/dist/open-graph.d.ts +40 -0
- package/dist/open-graph.d.ts.map +1 -0
- package/dist/open-graph.js +200 -0
- package/dist/open-graph.js.map +1 -0
- package/dist/orphan-assets.d.ts +17 -0
- package/dist/orphan-assets.d.ts.map +1 -0
- package/dist/orphan-assets.js +174 -0
- package/dist/orphan-assets.js.map +1 -0
- package/dist/page-object.d.ts +18 -0
- package/dist/page-object.d.ts.map +1 -0
- package/dist/page-object.js +346 -0
- package/dist/page-object.js.map +1 -0
- package/dist/pagination-audit.d.ts +24 -0
- package/dist/pagination-audit.d.ts.map +1 -0
- package/dist/pagination-audit.js +285 -0
- package/dist/pagination-audit.js.map +1 -0
- package/dist/passive-security.d.ts +19 -0
- package/dist/passive-security.d.ts.map +1 -0
- package/dist/passive-security.js +149 -0
- package/dist/passive-security.js.map +1 -0
- package/dist/pr-comment.d.ts +13 -0
- package/dist/pr-comment.d.ts.map +1 -0
- package/dist/pr-comment.js +316 -0
- package/dist/pr-comment.js.map +1 -0
- package/dist/precommit.d.ts +24 -0
- package/dist/precommit.d.ts.map +1 -0
- package/dist/precommit.js +239 -0
- package/dist/precommit.js.map +1 -0
- package/dist/prerender-audit.d.ts +22 -0
- package/dist/prerender-audit.d.ts.map +1 -0
- package/dist/prerender-audit.js +158 -0
- package/dist/prerender-audit.js.map +1 -0
- package/dist/print-audit.d.ts +21 -0
- package/dist/print-audit.d.ts.map +1 -0
- package/dist/print-audit.js +281 -0
- package/dist/print-audit.js.map +1 -0
- package/dist/protocol-audit.d.ts +17 -0
- package/dist/protocol-audit.d.ts.map +1 -0
- package/dist/protocol-audit.js +128 -0
- package/dist/protocol-audit.js.map +1 -0
- package/dist/reading-level.d.ts +37 -0
- package/dist/reading-level.d.ts.map +1 -0
- package/dist/reading-level.js +220 -0
- package/dist/reading-level.js.map +1 -0
- package/dist/redirects.d.ts +24 -0
- package/dist/redirects.d.ts.map +1 -0
- package/dist/redirects.js +119 -0
- package/dist/redirects.js.map +1 -0
- package/dist/report.d.ts +1 -1
- package/dist/report.d.ts.map +1 -1
- package/dist/report.js +736 -1
- package/dist/report.js.map +1 -1
- package/dist/reporter-plugin.d.ts +32 -0
- package/dist/reporter-plugin.d.ts.map +1 -0
- package/dist/reporter-plugin.js +120 -0
- package/dist/reporter-plugin.js.map +1 -0
- package/dist/resource-hints.d.ts +23 -0
- package/dist/resource-hints.d.ts.map +1 -0
- package/dist/resource-hints.js +225 -0
- package/dist/resource-hints.js.map +1 -0
- package/dist/retire.d.ts +22 -0
- package/dist/retire.d.ts.map +1 -0
- package/dist/retire.js +140 -0
- package/dist/retire.js.map +1 -0
- package/dist/retry.d.ts +20 -0
- package/dist/retry.d.ts.map +1 -0
- package/dist/retry.js +120 -0
- package/dist/retry.js.map +1 -0
- package/dist/robots-audit.d.ts +24 -0
- package/dist/robots-audit.d.ts.map +1 -0
- package/dist/robots-audit.js +206 -0
- package/dist/robots-audit.js.map +1 -0
- package/dist/rum.d.ts +35 -0
- package/dist/rum.d.ts.map +1 -0
- package/dist/rum.js +219 -0
- package/dist/rum.js.map +1 -0
- package/dist/schedule.d.ts +30 -0
- package/dist/schedule.d.ts.map +1 -0
- package/dist/schedule.js +238 -0
- package/dist/schedule.js.map +1 -0
- package/dist/secret-scan.d.ts +24 -0
- package/dist/secret-scan.d.ts.map +1 -0
- package/dist/secret-scan.js +202 -0
- package/dist/secret-scan.js.map +1 -0
- package/dist/service-worker.d.ts +26 -0
- package/dist/service-worker.d.ts.map +1 -0
- package/dist/service-worker.js +179 -0
- package/dist/service-worker.js.map +1 -0
- package/dist/shard.d.ts +14 -0
- package/dist/shard.d.ts.map +1 -0
- package/dist/shard.js +72 -0
- package/dist/shard.js.map +1 -0
- package/dist/sitemap-flows.d.ts +13 -0
- package/dist/sitemap-flows.d.ts.map +1 -0
- package/dist/sitemap-flows.js +157 -0
- package/dist/sitemap-flows.js.map +1 -0
- package/dist/sitemap.d.ts +27 -0
- package/dist/sitemap.d.ts.map +1 -0
- package/dist/sitemap.js +137 -0
- package/dist/sitemap.js.map +1 -0
- package/dist/slack-formatter.d.ts +35 -0
- package/dist/slack-formatter.d.ts.map +1 -0
- package/dist/slack-formatter.js +193 -0
- package/dist/slack-formatter.js.map +1 -0
- package/dist/sourcemap-scan.d.ts +24 -0
- package/dist/sourcemap-scan.d.ts.map +1 -0
- package/dist/sourcemap-scan.js +232 -0
- package/dist/sourcemap-scan.js.map +1 -0
- package/dist/sri-audit.d.ts +23 -0
- package/dist/sri-audit.d.ts.map +1 -0
- package/dist/sri-audit.js +180 -0
- package/dist/sri-audit.js.map +1 -0
- package/dist/storage-audit.d.ts +28 -0
- package/dist/storage-audit.d.ts.map +1 -0
- package/dist/storage-audit.js +263 -0
- package/dist/storage-audit.js.map +1 -0
- package/dist/storybook.d.ts +48 -0
- package/dist/storybook.d.ts.map +1 -0
- package/dist/storybook.js +191 -0
- package/dist/storybook.js.map +1 -0
- package/dist/structured-data.d.ts +25 -0
- package/dist/structured-data.d.ts.map +1 -0
- package/dist/structured-data.js +164 -0
- package/dist/structured-data.js.map +1 -0
- package/dist/svg-audit.d.ts +20 -0
- package/dist/svg-audit.d.ts.map +1 -0
- package/dist/svg-audit.js +213 -0
- package/dist/svg-audit.js.map +1 -0
- package/dist/table-audit.d.ts +18 -0
- package/dist/table-audit.d.ts.map +1 -0
- package/dist/table-audit.js +188 -0
- package/dist/table-audit.js.map +1 -0
- package/dist/teams-formatter.d.ts +66 -0
- package/dist/teams-formatter.d.ts.map +1 -0
- package/dist/teams-formatter.js +194 -0
- package/dist/teams-formatter.js.map +1 -0
- package/dist/third-party.d.ts +35 -0
- package/dist/third-party.d.ts.map +1 -0
- package/dist/third-party.js +175 -0
- package/dist/third-party.js.map +1 -0
- package/dist/tls.d.ts +33 -0
- package/dist/tls.d.ts.map +1 -0
- package/dist/tls.js +122 -0
- package/dist/tls.js.map +1 -0
- package/dist/touchtargets.d.ts +22 -0
- package/dist/touchtargets.d.ts.map +1 -0
- package/dist/touchtargets.js +80 -0
- package/dist/touchtargets.js.map +1 -0
- package/dist/tracker-sniff.d.ts +25 -0
- package/dist/tracker-sniff.d.ts.map +1 -0
- package/dist/tracker-sniff.js +355 -0
- package/dist/tracker-sniff.js.map +1 -0
- package/dist/types.d.ts +265 -1
- package/dist/types.d.ts.map +1 -1
- package/dist/visual-mask.d.ts +33 -0
- package/dist/visual-mask.d.ts.map +1 -0
- package/dist/visual-mask.js +102 -0
- package/dist/visual-mask.js.map +1 -0
- package/dist/visual-ssim.d.ts +26 -0
- package/dist/visual-ssim.d.ts.map +1 -0
- package/dist/visual-ssim.js +153 -0
- package/dist/visual-ssim.js.map +1 -0
- package/dist/watch-mode.d.ts +10 -0
- package/dist/watch-mode.d.ts.map +1 -0
- package/dist/watch-mode.js +156 -0
- package/dist/watch-mode.js.map +1 -0
- package/dist/web-worker-audit.d.ts +27 -0
- package/dist/web-worker-audit.d.ts.map +1 -0
- package/dist/web-worker-audit.js +324 -0
- package/dist/web-worker-audit.js.map +1 -0
- package/dist/webfonts.d.ts +26 -0
- package/dist/webfonts.d.ts.map +1 -0
- package/dist/webfonts.js +244 -0
- package/dist/webfonts.js.map +1 -0
- package/dist/webhook-reporter.d.ts +20 -0
- package/dist/webhook-reporter.d.ts.map +1 -0
- package/dist/webhook-reporter.js +124 -0
- package/dist/webhook-reporter.js.map +1 -0
- package/dist/websocket.d.ts +39 -0
- package/dist/websocket.d.ts.map +1 -0
- package/dist/websocket.js +233 -0
- package/dist/websocket.js.map +1 -0
- package/dist/worker-runtime.d.ts +129 -0
- package/dist/worker-runtime.d.ts.map +1 -0
- package/dist/worker-runtime.js +414 -0
- package/dist/worker-runtime.js.map +1 -0
- package/dist/zindex-audit.d.ts +28 -0
- package/dist/zindex-audit.d.ts.map +1 -0
- package/dist/zindex-audit.js +291 -0
- package/dist/zindex-audit.js.map +1 -0
- package/package.json +10 -2
package/dist/rum.js
ADDED
|
@@ -0,0 +1,219 @@
|
|
|
1
|
+
export async function collectRUM(page, opts = {}) {
|
|
2
|
+
const durationMs = opts.durationMs ?? 5000;
|
|
3
|
+
await page.evaluate(() => {
|
|
4
|
+
const selectorOf = (el) => {
|
|
5
|
+
if (!el)
|
|
6
|
+
return undefined;
|
|
7
|
+
let sel = el.tagName.toLowerCase();
|
|
8
|
+
if (el.id)
|
|
9
|
+
sel += `#${el.id}`;
|
|
10
|
+
const firstClass = el.classList?.[0];
|
|
11
|
+
if (firstClass)
|
|
12
|
+
sel += `.${firstClass}`;
|
|
13
|
+
return sel;
|
|
14
|
+
};
|
|
15
|
+
const w = window;
|
|
16
|
+
w.__uxi_rum = {};
|
|
17
|
+
const state = w.__uxi_rum;
|
|
18
|
+
try {
|
|
19
|
+
new PerformanceObserver((list) => {
|
|
20
|
+
const entries = list.getEntries();
|
|
21
|
+
if (entries.length === 0)
|
|
22
|
+
return;
|
|
23
|
+
const last = entries[entries.length - 1];
|
|
24
|
+
state.lcp = {
|
|
25
|
+
value: last.startTime,
|
|
26
|
+
target: selectorOf(last.element),
|
|
27
|
+
size: last.size,
|
|
28
|
+
url: last.url,
|
|
29
|
+
};
|
|
30
|
+
}).observe({ type: 'largest-contentful-paint', buffered: true });
|
|
31
|
+
}
|
|
32
|
+
catch (_) { /* unsupported */ }
|
|
33
|
+
try {
|
|
34
|
+
let clsValue = 0;
|
|
35
|
+
let worst;
|
|
36
|
+
new PerformanceObserver((list) => {
|
|
37
|
+
const entries = list.getEntries();
|
|
38
|
+
entries.forEach((e) => {
|
|
39
|
+
if (e.hadRecentInput)
|
|
40
|
+
return;
|
|
41
|
+
clsValue += e.value;
|
|
42
|
+
if (!worst || e.value > worst.value) {
|
|
43
|
+
const node = e.sources?.[0]?.node ?? null;
|
|
44
|
+
worst = { value: e.value, target: selectorOf(node) };
|
|
45
|
+
}
|
|
46
|
+
});
|
|
47
|
+
state.cls = { value: clsValue, worstEntry: worst };
|
|
48
|
+
}).observe({ type: 'layout-shift', buffered: true });
|
|
49
|
+
}
|
|
50
|
+
catch (_) { /* unsupported */ }
|
|
51
|
+
try {
|
|
52
|
+
let worstEvent;
|
|
53
|
+
new PerformanceObserver((list) => {
|
|
54
|
+
const entries = list.getEntries();
|
|
55
|
+
entries.forEach((e) => {
|
|
56
|
+
if (!e.interactionId)
|
|
57
|
+
return;
|
|
58
|
+
if (!worstEvent || e.duration > worstEvent.value) {
|
|
59
|
+
worstEvent = {
|
|
60
|
+
value: e.duration,
|
|
61
|
+
target: selectorOf(e.target),
|
|
62
|
+
interactionType: e.name,
|
|
63
|
+
};
|
|
64
|
+
}
|
|
65
|
+
});
|
|
66
|
+
if (worstEvent)
|
|
67
|
+
state.inp = worstEvent;
|
|
68
|
+
}).observe({ type: 'event', durationThreshold: 40, buffered: true });
|
|
69
|
+
}
|
|
70
|
+
catch (_) { /* unsupported */ }
|
|
71
|
+
try {
|
|
72
|
+
new PerformanceObserver((list) => {
|
|
73
|
+
list.getEntries().forEach((e) => {
|
|
74
|
+
if (e.name === 'first-contentful-paint') {
|
|
75
|
+
state.fcp = e.startTime;
|
|
76
|
+
}
|
|
77
|
+
});
|
|
78
|
+
}).observe({ type: 'paint', buffered: true });
|
|
79
|
+
}
|
|
80
|
+
catch (_) { /* unsupported */ }
|
|
81
|
+
try {
|
|
82
|
+
new PerformanceObserver((list) => {
|
|
83
|
+
const entries = list.getEntries();
|
|
84
|
+
if (entries.length === 0)
|
|
85
|
+
return;
|
|
86
|
+
const first = entries[0];
|
|
87
|
+
state.fid = first.processingStart - first.startTime;
|
|
88
|
+
}).observe({ type: 'first-input', buffered: true });
|
|
89
|
+
}
|
|
90
|
+
catch (_) { /* unsupported */ }
|
|
91
|
+
try {
|
|
92
|
+
const nav = performance.getEntriesByType('navigation')[0];
|
|
93
|
+
if (nav) {
|
|
94
|
+
state.ttfb = nav.responseStart;
|
|
95
|
+
state.navigationType = nav.type;
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
catch (_) { /* unsupported */ }
|
|
99
|
+
try {
|
|
100
|
+
const n = navigator;
|
|
101
|
+
state.deviceMemory = n.deviceMemory;
|
|
102
|
+
state.hardwareConcurrency = n.hardwareConcurrency;
|
|
103
|
+
state.effectiveConnectionType = n.connection?.effectiveType;
|
|
104
|
+
}
|
|
105
|
+
catch (_) { /* unsupported */ }
|
|
106
|
+
});
|
|
107
|
+
await page.waitForTimeout(durationMs);
|
|
108
|
+
const raw = await page.evaluate(() => window.__uxi_rum ?? {});
|
|
109
|
+
const lcpValue = raw.lcp?.value;
|
|
110
|
+
const clsValue = raw.cls?.value;
|
|
111
|
+
const inpValue = raw.inp?.value;
|
|
112
|
+
const passed = (lcpValue === undefined || lcpValue < 2500) &&
|
|
113
|
+
(clsValue === undefined || clsValue < 0.1) &&
|
|
114
|
+
(inpValue === undefined || inpValue < 200);
|
|
115
|
+
return {
|
|
116
|
+
page: page.url(),
|
|
117
|
+
lcp: raw.lcp,
|
|
118
|
+
cls: raw.cls,
|
|
119
|
+
inp: raw.inp,
|
|
120
|
+
fcp: raw.fcp,
|
|
121
|
+
ttfb: raw.ttfb,
|
|
122
|
+
fid: raw.fid,
|
|
123
|
+
navigationType: raw.navigationType,
|
|
124
|
+
deviceMemory: raw.deviceMemory,
|
|
125
|
+
hardwareConcurrency: raw.hardwareConcurrency,
|
|
126
|
+
effectiveConnectionType: raw.effectiveConnectionType,
|
|
127
|
+
passed,
|
|
128
|
+
};
|
|
129
|
+
}
|
|
130
|
+
export function rumClientScript(endpoint = '/rum') {
|
|
131
|
+
const endpointJson = JSON.stringify(endpoint);
|
|
132
|
+
return `(function(){
|
|
133
|
+
try {
|
|
134
|
+
var endpoint = ${endpointJson};
|
|
135
|
+
var state = { page: location.href };
|
|
136
|
+
var selectorOf = function(el){
|
|
137
|
+
if (!el) return undefined;
|
|
138
|
+
var s = el.tagName.toLowerCase();
|
|
139
|
+
if (el.id) s += '#' + el.id;
|
|
140
|
+
var c = el.classList && el.classList[0];
|
|
141
|
+
if (c) s += '.' + c;
|
|
142
|
+
return s;
|
|
143
|
+
};
|
|
144
|
+
try {
|
|
145
|
+
new PerformanceObserver(function(list){
|
|
146
|
+
var entries = list.getEntries();
|
|
147
|
+
if (!entries.length) return;
|
|
148
|
+
var last = entries[entries.length - 1];
|
|
149
|
+
state.lcp = { value: last.startTime, target: selectorOf(last.element), size: last.size, url: last.url };
|
|
150
|
+
}).observe({ type: 'largest-contentful-paint', buffered: true });
|
|
151
|
+
} catch(_){}
|
|
152
|
+
try {
|
|
153
|
+
var clsValue = 0; var worst;
|
|
154
|
+
new PerformanceObserver(function(list){
|
|
155
|
+
list.getEntries().forEach(function(e){
|
|
156
|
+
if (e.hadRecentInput) return;
|
|
157
|
+
clsValue += e.value;
|
|
158
|
+
if (!worst || e.value > worst.value) {
|
|
159
|
+
var node = e.sources && e.sources[0] && e.sources[0].node;
|
|
160
|
+
worst = { value: e.value, target: selectorOf(node) };
|
|
161
|
+
}
|
|
162
|
+
});
|
|
163
|
+
state.cls = { value: clsValue, worstEntry: worst };
|
|
164
|
+
}).observe({ type: 'layout-shift', buffered: true });
|
|
165
|
+
} catch(_){}
|
|
166
|
+
try {
|
|
167
|
+
var worstEvent;
|
|
168
|
+
new PerformanceObserver(function(list){
|
|
169
|
+
list.getEntries().forEach(function(e){
|
|
170
|
+
if (!e.interactionId) return;
|
|
171
|
+
if (!worstEvent || e.duration > worstEvent.value) {
|
|
172
|
+
worstEvent = { value: e.duration, target: selectorOf(e.target), interactionType: e.name };
|
|
173
|
+
}
|
|
174
|
+
});
|
|
175
|
+
if (worstEvent) state.inp = worstEvent;
|
|
176
|
+
}).observe({ type: 'event', durationThreshold: 40, buffered: true });
|
|
177
|
+
} catch(_){}
|
|
178
|
+
try {
|
|
179
|
+
new PerformanceObserver(function(list){
|
|
180
|
+
list.getEntries().forEach(function(e){
|
|
181
|
+
if (e.name === 'first-contentful-paint') state.fcp = e.startTime;
|
|
182
|
+
});
|
|
183
|
+
}).observe({ type: 'paint', buffered: true });
|
|
184
|
+
} catch(_){}
|
|
185
|
+
try {
|
|
186
|
+
new PerformanceObserver(function(list){
|
|
187
|
+
var entries = list.getEntries();
|
|
188
|
+
if (!entries.length) return;
|
|
189
|
+
var first = entries[0];
|
|
190
|
+
state.fid = first.processingStart - first.startTime;
|
|
191
|
+
}).observe({ type: 'first-input', buffered: true });
|
|
192
|
+
} catch(_){}
|
|
193
|
+
try {
|
|
194
|
+
var nav = performance.getEntriesByType('navigation')[0];
|
|
195
|
+
if (nav) { state.ttfb = nav.responseStart; state.navigationType = nav.type; }
|
|
196
|
+
} catch(_){}
|
|
197
|
+
try {
|
|
198
|
+
state.deviceMemory = navigator.deviceMemory;
|
|
199
|
+
state.hardwareConcurrency = navigator.hardwareConcurrency;
|
|
200
|
+
state.effectiveConnectionType = navigator.connection && navigator.connection.effectiveType;
|
|
201
|
+
} catch(_){}
|
|
202
|
+
var sent = false;
|
|
203
|
+
var beacon = function(){
|
|
204
|
+
if (sent) return; sent = true;
|
|
205
|
+
try {
|
|
206
|
+
var body = JSON.stringify(state);
|
|
207
|
+
if (navigator.sendBeacon) {
|
|
208
|
+
navigator.sendBeacon(endpoint, body);
|
|
209
|
+
} else {
|
|
210
|
+
fetch(endpoint, { method: 'POST', body: body, keepalive: true, headers: { 'Content-Type': 'application/json' } });
|
|
211
|
+
}
|
|
212
|
+
} catch(_){}
|
|
213
|
+
};
|
|
214
|
+
addEventListener('visibilitychange', function(){ if (document.visibilityState === 'hidden') beacon(); });
|
|
215
|
+
addEventListener('pagehide', beacon);
|
|
216
|
+
} catch(_){}
|
|
217
|
+
})();`;
|
|
218
|
+
}
|
|
219
|
+
//# sourceMappingURL=rum.js.map
|
package/dist/rum.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"rum.js","sourceRoot":"","sources":["../src/rum.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import type { InspectConfig, InspectResult } from './types.js';
|
|
2
|
+
export interface CronField {
|
|
3
|
+
values: number[];
|
|
4
|
+
}
|
|
5
|
+
export interface ParsedCron {
|
|
6
|
+
minute: CronField;
|
|
7
|
+
hour: CronField;
|
|
8
|
+
dayOfMonth: CronField;
|
|
9
|
+
month: CronField;
|
|
10
|
+
dayOfWeek: CronField;
|
|
11
|
+
}
|
|
12
|
+
export interface ScheduleOptions {
|
|
13
|
+
cron: string;
|
|
14
|
+
cfg: InspectConfig;
|
|
15
|
+
maxRuns?: number;
|
|
16
|
+
onResult?: (result: InspectResult, firedAt: Date) => void | Promise<void>;
|
|
17
|
+
onError?: (err: unknown, firedAt: Date) => void | Promise<void>;
|
|
18
|
+
signal?: AbortSignal;
|
|
19
|
+
}
|
|
20
|
+
export interface ScheduleStats {
|
|
21
|
+
runs: number;
|
|
22
|
+
errors: number;
|
|
23
|
+
lastResult?: InspectResult;
|
|
24
|
+
startedAt: Date;
|
|
25
|
+
stoppedAt?: Date;
|
|
26
|
+
}
|
|
27
|
+
export declare function parseCron(expr: string): ParsedCron;
|
|
28
|
+
export declare function nextFireTime(parsed: ParsedCron, from: Date): Date;
|
|
29
|
+
export declare function runSchedule(opts: ScheduleOptions): Promise<ScheduleStats>;
|
|
30
|
+
//# sourceMappingURL=schedule.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"schedule.d.ts","sourceRoot":"","sources":["../src/schedule.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAE/D,MAAM,WAAW,SAAS;IAAG,MAAM,EAAE,MAAM,EAAE,CAAC;CAAE;AAEhD,MAAM,WAAW,UAAU;IACzB,MAAM,EAAE,SAAS,CAAC;IAClB,IAAI,EAAE,SAAS,CAAC;IAChB,UAAU,EAAE,SAAS,CAAC;IACtB,KAAK,EAAE,SAAS,CAAC;IACjB,SAAS,EAAE,SAAS,CAAC;CACtB;AAED,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,MAAM,CAAC;IACb,GAAG,EAAE,aAAa,CAAC;IACnB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,QAAQ,CAAC,EAAE,CAAC,MAAM,EAAE,aAAa,EAAE,OAAO,EAAE,IAAI,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC1E,OAAO,CAAC,EAAE,CAAC,GAAG,EAAE,OAAO,EAAE,OAAO,EAAE,IAAI,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAChE,MAAM,CAAC,EAAE,WAAW,CAAC;CACtB;AAED,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,CAAC,EAAE,aAAa,CAAC;IAC3B,SAAS,EAAE,IAAI,CAAC;IAChB,SAAS,CAAC,EAAE,IAAI,CAAC;CAClB;AAkHD,wBAAgB,SAAS,CAAC,IAAI,EAAE,MAAM,GAAG,UAAU,CAgBlD;AAsCD,wBAAgB,YAAY,CAAC,MAAM,EAAE,UAAU,EAAE,IAAI,EAAE,IAAI,GAAG,IAAI,CAajE;AAuCD,wBAAsB,WAAW,CAAC,IAAI,EAAE,eAAe,GAAG,OAAO,CAAC,aAAa,CAAC,CA8C/E"}
|
package/dist/schedule.js
ADDED
|
@@ -0,0 +1,238 @@
|
|
|
1
|
+
const FIELD_RANGES = [
|
|
2
|
+
{ name: 'minute', min: 0, max: 59 },
|
|
3
|
+
{ name: 'hour', min: 0, max: 23 },
|
|
4
|
+
{ name: 'dayOfMonth', min: 1, max: 31 },
|
|
5
|
+
{ name: 'month', min: 1, max: 12 },
|
|
6
|
+
{ name: 'dayOfWeek', min: 0, max: 6 },
|
|
7
|
+
];
|
|
8
|
+
const SAFETY_CAP = 10_000;
|
|
9
|
+
const LOOKAHEAD_MINUTES = 366 * 24 * 60;
|
|
10
|
+
function parseInteger(token, fieldName) {
|
|
11
|
+
if (!/^-?\d+$/.test(token)) {
|
|
12
|
+
throw new Error(`invalid cron: non-integer "${token}" in ${fieldName}`);
|
|
13
|
+
}
|
|
14
|
+
const n = Number(token);
|
|
15
|
+
if (!Number.isInteger(n)) {
|
|
16
|
+
throw new Error(`invalid cron: non-integer "${token}" in ${fieldName}`);
|
|
17
|
+
}
|
|
18
|
+
return n;
|
|
19
|
+
}
|
|
20
|
+
function expandSegment(segment, min, max, fieldName) {
|
|
21
|
+
if (segment.length === 0) {
|
|
22
|
+
throw new Error(`invalid cron: empty segment in ${fieldName}`);
|
|
23
|
+
}
|
|
24
|
+
let rangePart = segment;
|
|
25
|
+
let step = 1;
|
|
26
|
+
const slashIdx = segment.indexOf('/');
|
|
27
|
+
if (slashIdx !== -1) {
|
|
28
|
+
rangePart = segment.slice(0, slashIdx);
|
|
29
|
+
const stepStr = segment.slice(slashIdx + 1);
|
|
30
|
+
if (stepStr.length === 0) {
|
|
31
|
+
throw new Error(`invalid cron: missing step after "/" in ${fieldName}`);
|
|
32
|
+
}
|
|
33
|
+
step = parseInteger(stepStr, fieldName);
|
|
34
|
+
if (step <= 0) {
|
|
35
|
+
throw new Error(`invalid cron: step must be > 0 in ${fieldName}`);
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
let rangeStart;
|
|
39
|
+
let rangeEnd;
|
|
40
|
+
if (rangePart === '*') {
|
|
41
|
+
rangeStart = min;
|
|
42
|
+
rangeEnd = max;
|
|
43
|
+
}
|
|
44
|
+
else {
|
|
45
|
+
const dashIdx = rangePart.indexOf('-');
|
|
46
|
+
if (dashIdx > 0) {
|
|
47
|
+
const a = parseInteger(rangePart.slice(0, dashIdx), fieldName);
|
|
48
|
+
const b = parseInteger(rangePart.slice(dashIdx + 1), fieldName);
|
|
49
|
+
if (a > b) {
|
|
50
|
+
throw new Error(`invalid cron: range start > end "${rangePart}" in ${fieldName}`);
|
|
51
|
+
}
|
|
52
|
+
rangeStart = a;
|
|
53
|
+
rangeEnd = b;
|
|
54
|
+
}
|
|
55
|
+
else {
|
|
56
|
+
const n = parseInteger(rangePart, fieldName);
|
|
57
|
+
rangeStart = n;
|
|
58
|
+
if (slashIdx !== -1) {
|
|
59
|
+
// "n/step" means "from n to max stepping by step"
|
|
60
|
+
rangeEnd = max;
|
|
61
|
+
}
|
|
62
|
+
else {
|
|
63
|
+
rangeEnd = n;
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
if (rangeStart < min || rangeEnd > max) {
|
|
68
|
+
throw new Error(`invalid cron: value out of range [${min}-${max}] in ${fieldName} ("${segment}")`);
|
|
69
|
+
}
|
|
70
|
+
const values = [];
|
|
71
|
+
for (let v = rangeStart; v <= rangeEnd; v += step) {
|
|
72
|
+
values.push(v);
|
|
73
|
+
}
|
|
74
|
+
return values;
|
|
75
|
+
}
|
|
76
|
+
function parseField(raw, min, max, fieldName) {
|
|
77
|
+
if (raw.length === 0) {
|
|
78
|
+
throw new Error(`invalid cron: empty ${fieldName} field`);
|
|
79
|
+
}
|
|
80
|
+
const segments = raw.split(',');
|
|
81
|
+
const set = new Set();
|
|
82
|
+
for (const seg of segments) {
|
|
83
|
+
for (const v of expandSegment(seg, min, max, fieldName)) {
|
|
84
|
+
set.add(v);
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
if (set.size === 0) {
|
|
88
|
+
throw new Error(`invalid cron: no values expanded for ${fieldName}`);
|
|
89
|
+
}
|
|
90
|
+
const values = Array.from(set).sort((a, b) => a - b);
|
|
91
|
+
return { values };
|
|
92
|
+
}
|
|
93
|
+
export function parseCron(expr) {
|
|
94
|
+
if (typeof expr !== 'string') {
|
|
95
|
+
throw new Error('invalid cron: expression must be a string');
|
|
96
|
+
}
|
|
97
|
+
const parts = expr.trim().split(/\s+/);
|
|
98
|
+
if (parts.length !== 5) {
|
|
99
|
+
throw new Error(`invalid cron: expected 5 fields, got ${parts.length}`);
|
|
100
|
+
}
|
|
101
|
+
const [minStr, hourStr, domStr, monStr, dowStr] = parts;
|
|
102
|
+
return {
|
|
103
|
+
minute: parseField(minStr, FIELD_RANGES[0].min, FIELD_RANGES[0].max, 'minute'),
|
|
104
|
+
hour: parseField(hourStr, FIELD_RANGES[1].min, FIELD_RANGES[1].max, 'hour'),
|
|
105
|
+
dayOfMonth: parseField(domStr, FIELD_RANGES[2].min, FIELD_RANGES[2].max, 'dayOfMonth'),
|
|
106
|
+
month: parseField(monStr, FIELD_RANGES[3].min, FIELD_RANGES[3].max, 'month'),
|
|
107
|
+
dayOfWeek: parseField(dowStr, FIELD_RANGES[4].min, FIELD_RANGES[4].max, 'dayOfWeek'),
|
|
108
|
+
};
|
|
109
|
+
}
|
|
110
|
+
function isRestricted(field, min, max) {
|
|
111
|
+
const expected = max - min + 1;
|
|
112
|
+
return field.values.length !== expected;
|
|
113
|
+
}
|
|
114
|
+
function matchesCron(parsed, d) {
|
|
115
|
+
const minute = d.getMinutes();
|
|
116
|
+
const hour = d.getHours();
|
|
117
|
+
const dom = d.getDate();
|
|
118
|
+
const month = d.getMonth() + 1;
|
|
119
|
+
const dow = d.getDay();
|
|
120
|
+
if (!parsed.minute.values.includes(minute))
|
|
121
|
+
return false;
|
|
122
|
+
if (!parsed.hour.values.includes(hour))
|
|
123
|
+
return false;
|
|
124
|
+
if (!parsed.month.values.includes(month))
|
|
125
|
+
return false;
|
|
126
|
+
const domRestricted = isRestricted(parsed.dayOfMonth, 1, 31);
|
|
127
|
+
const dowRestricted = isRestricted(parsed.dayOfWeek, 0, 6);
|
|
128
|
+
const domMatch = parsed.dayOfMonth.values.includes(dom);
|
|
129
|
+
const dowMatch = parsed.dayOfWeek.values.includes(dow);
|
|
130
|
+
if (domRestricted && dowRestricted) {
|
|
131
|
+
if (!domMatch && !dowMatch)
|
|
132
|
+
return false;
|
|
133
|
+
}
|
|
134
|
+
else if (domRestricted) {
|
|
135
|
+
if (!domMatch)
|
|
136
|
+
return false;
|
|
137
|
+
}
|
|
138
|
+
else if (dowRestricted) {
|
|
139
|
+
if (!dowMatch)
|
|
140
|
+
return false;
|
|
141
|
+
}
|
|
142
|
+
return true;
|
|
143
|
+
}
|
|
144
|
+
export function nextFireTime(parsed, from) {
|
|
145
|
+
const start = new Date(from.getTime());
|
|
146
|
+
start.setSeconds(0, 0);
|
|
147
|
+
start.setMinutes(start.getMinutes() + 1);
|
|
148
|
+
const cursor = new Date(start.getTime());
|
|
149
|
+
for (let i = 0; i < LOOKAHEAD_MINUTES; i++) {
|
|
150
|
+
if (matchesCron(parsed, cursor)) {
|
|
151
|
+
return new Date(cursor.getTime());
|
|
152
|
+
}
|
|
153
|
+
cursor.setMinutes(cursor.getMinutes() + 1);
|
|
154
|
+
}
|
|
155
|
+
throw new Error('no matching cron time within 1 year');
|
|
156
|
+
}
|
|
157
|
+
function sleepUntil(target, signal) {
|
|
158
|
+
return new Promise((resolve) => {
|
|
159
|
+
if (signal?.aborted) {
|
|
160
|
+
resolve();
|
|
161
|
+
return;
|
|
162
|
+
}
|
|
163
|
+
const delay = Math.max(0, target.getTime() - Date.now());
|
|
164
|
+
let settled = false;
|
|
165
|
+
const timer = setTimeout(() => {
|
|
166
|
+
if (settled)
|
|
167
|
+
return;
|
|
168
|
+
settled = true;
|
|
169
|
+
if (signal)
|
|
170
|
+
signal.removeEventListener('abort', onAbort);
|
|
171
|
+
resolve();
|
|
172
|
+
}, delay);
|
|
173
|
+
const onAbort = () => {
|
|
174
|
+
if (settled)
|
|
175
|
+
return;
|
|
176
|
+
settled = true;
|
|
177
|
+
clearTimeout(timer);
|
|
178
|
+
resolve();
|
|
179
|
+
};
|
|
180
|
+
if (signal)
|
|
181
|
+
signal.addEventListener('abort', onAbort, { once: true });
|
|
182
|
+
});
|
|
183
|
+
}
|
|
184
|
+
async function safeCallback(fn, arg, firedAt) {
|
|
185
|
+
if (!fn)
|
|
186
|
+
return;
|
|
187
|
+
try {
|
|
188
|
+
await fn(arg, firedAt);
|
|
189
|
+
}
|
|
190
|
+
catch {
|
|
191
|
+
// swallow handler errors so the loop never breaks
|
|
192
|
+
}
|
|
193
|
+
}
|
|
194
|
+
export async function runSchedule(opts) {
|
|
195
|
+
const parsed = parseCron(opts.cron);
|
|
196
|
+
const requestedMax = opts.maxRuns === undefined ? Infinity : opts.maxRuns;
|
|
197
|
+
const cap = Number.isFinite(requestedMax)
|
|
198
|
+
? Math.min(requestedMax, SAFETY_CAP)
|
|
199
|
+
: SAFETY_CAP;
|
|
200
|
+
const stats = {
|
|
201
|
+
runs: 0,
|
|
202
|
+
errors: 0,
|
|
203
|
+
startedAt: new Date(),
|
|
204
|
+
};
|
|
205
|
+
const mod = (await import('./index.js'));
|
|
206
|
+
const inspect = mod.inspect;
|
|
207
|
+
while (stats.runs < cap) {
|
|
208
|
+
if (opts.signal?.aborted)
|
|
209
|
+
break;
|
|
210
|
+
let target;
|
|
211
|
+
try {
|
|
212
|
+
target = nextFireTime(parsed, new Date());
|
|
213
|
+
}
|
|
214
|
+
catch (err) {
|
|
215
|
+
stats.errors += 1;
|
|
216
|
+
await safeCallback(opts.onError, err, new Date());
|
|
217
|
+
break;
|
|
218
|
+
}
|
|
219
|
+
await sleepUntil(target, opts.signal);
|
|
220
|
+
if (opts.signal?.aborted)
|
|
221
|
+
break;
|
|
222
|
+
const firedAt = new Date();
|
|
223
|
+
try {
|
|
224
|
+
const result = await inspect(opts.cfg);
|
|
225
|
+
stats.runs += 1;
|
|
226
|
+
stats.lastResult = result;
|
|
227
|
+
await safeCallback(opts.onResult, result, firedAt);
|
|
228
|
+
}
|
|
229
|
+
catch (err) {
|
|
230
|
+
stats.runs += 1;
|
|
231
|
+
stats.errors += 1;
|
|
232
|
+
await safeCallback(opts.onError, err, firedAt);
|
|
233
|
+
}
|
|
234
|
+
}
|
|
235
|
+
stats.stoppedAt = new Date();
|
|
236
|
+
return stats;
|
|
237
|
+
}
|
|
238
|
+
//# sourceMappingURL=schedule.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"schedule.js","sourceRoot":"","sources":["../src/schedule.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import type { Page } from 'playwright';
|
|
2
|
+
export interface SecretFinding {
|
|
3
|
+
kind: string;
|
|
4
|
+
source: string;
|
|
5
|
+
snippet: string;
|
|
6
|
+
line?: number;
|
|
7
|
+
severity: 'high' | 'medium' | 'low';
|
|
8
|
+
}
|
|
9
|
+
export interface SecretScanResult {
|
|
10
|
+
page: string;
|
|
11
|
+
assetsScanned: number;
|
|
12
|
+
findings: SecretFinding[];
|
|
13
|
+
passed: boolean;
|
|
14
|
+
}
|
|
15
|
+
export interface SecretScanOptions {
|
|
16
|
+
maxAssets?: number;
|
|
17
|
+
extraPatterns?: {
|
|
18
|
+
kind: string;
|
|
19
|
+
pattern: RegExp;
|
|
20
|
+
severity: 'high' | 'medium' | 'low';
|
|
21
|
+
}[];
|
|
22
|
+
}
|
|
23
|
+
export declare function scanSecrets(page: Page, opts?: SecretScanOptions): Promise<SecretScanResult>;
|
|
24
|
+
//# sourceMappingURL=secret-scan.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"secret-scan.d.ts","sourceRoot":"","sources":["../src/secret-scan.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,YAAY,CAAC;AAEvC,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,GAAG,QAAQ,GAAG,KAAK,CAAC;CACrC;AAED,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,MAAM,CAAC;IACb,aAAa,EAAE,MAAM,CAAC;IACtB,QAAQ,EAAE,aAAa,EAAE,CAAC;IAC1B,MAAM,EAAE,OAAO,CAAC;CACjB;AAED,MAAM,WAAW,iBAAiB;IAChC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,aAAa,CAAC,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,GAAG,QAAQ,GAAG,KAAK,CAAA;KAAE,EAAE,CAAC;CAC1F;AA0KD,wBAAsB,WAAW,CAC/B,IAAI,EAAE,IAAI,EACV,IAAI,CAAC,EAAE,iBAAiB,GACvB,OAAO,CAAC,gBAAgB,CAAC,CAmD3B"}
|