@vibecheckai/cli 2.5.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/README.md +532 -0
- package/dist/autopatch/verified-autopatch.d.ts +111 -0
- package/dist/autopatch/verified-autopatch.d.ts.map +1 -0
- package/dist/autopatch/verified-autopatch.js +503 -0
- package/dist/autopatch/verified-autopatch.js.map +1 -0
- package/dist/bundles/guardrail-core.js +25799 -0
- package/dist/bundles/guardrail-security.js +208687 -0
- package/dist/bundles/guardrail-ship.js +2318 -0
- package/dist/bundles/index.js +8 -0
- package/dist/commands/autopilot-decision.d.ts +24 -0
- package/dist/commands/autopilot-decision.d.ts.map +1 -0
- package/dist/commands/autopilot-decision.js +304 -0
- package/dist/commands/autopilot-decision.js.map +1 -0
- package/dist/commands/autopilot.d.ts +33 -0
- package/dist/commands/autopilot.d.ts.map +1 -0
- package/dist/commands/autopilot.js +1539 -0
- package/dist/commands/autopilot.js.map +1 -0
- package/dist/commands/baseline.d.ts +7 -0
- package/dist/commands/baseline.d.ts.map +1 -0
- package/dist/commands/baseline.js +79 -0
- package/dist/commands/baseline.js.map +1 -0
- package/dist/commands/cache.d.ts +13 -0
- package/dist/commands/cache.d.ts.map +1 -0
- package/dist/commands/cache.js +165 -0
- package/dist/commands/cache.js.map +1 -0
- package/dist/commands/checkpoint.d.ts +8 -0
- package/dist/commands/checkpoint.d.ts.map +1 -0
- package/dist/commands/checkpoint.js +35 -0
- package/dist/commands/checkpoint.js.map +1 -0
- package/dist/commands/context.d.ts +8 -0
- package/dist/commands/context.d.ts.map +1 -0
- package/dist/commands/context.js +340 -0
- package/dist/commands/context.js.map +1 -0
- package/dist/commands/debug.d.ts +78 -0
- package/dist/commands/debug.d.ts.map +1 -0
- package/dist/commands/debug.js +381 -0
- package/dist/commands/debug.js.map +1 -0
- package/dist/commands/doctor.d.ts +17 -0
- package/dist/commands/doctor.d.ts.map +1 -0
- package/dist/commands/doctor.js +226 -0
- package/dist/commands/doctor.js.map +1 -0
- package/dist/commands/evidence.d.ts +45 -0
- package/dist/commands/evidence.d.ts.map +1 -0
- package/dist/commands/evidence.js +197 -0
- package/dist/commands/evidence.js.map +1 -0
- package/dist/commands/explain.d.ts +8 -0
- package/dist/commands/explain.d.ts.map +1 -0
- package/dist/commands/explain.js +52 -0
- package/dist/commands/explain.js.map +1 -0
- package/dist/commands/fix-consolidated.d.ts +19 -0
- package/dist/commands/fix-consolidated.d.ts.map +1 -0
- package/dist/commands/fix-consolidated.js +165 -0
- package/dist/commands/fix-consolidated.js.map +1 -0
- package/dist/commands/index.d.ts +8 -0
- package/dist/commands/index.d.ts.map +1 -0
- package/dist/commands/index.js +15 -0
- package/dist/commands/index.js.map +1 -0
- package/dist/commands/init.d.ts +8 -0
- package/dist/commands/init.d.ts.map +1 -0
- package/dist/commands/init.js +125 -0
- package/dist/commands/init.js.map +1 -0
- package/dist/commands/launcher.d.ts +10 -0
- package/dist/commands/launcher.d.ts.map +1 -0
- package/dist/commands/launcher.js +174 -0
- package/dist/commands/launcher.js.map +1 -0
- package/dist/commands/on.d.ts +8 -0
- package/dist/commands/on.d.ts.map +1 -0
- package/dist/commands/on.js +123 -0
- package/dist/commands/on.js.map +1 -0
- package/dist/commands/preview.d.ts +54 -0
- package/dist/commands/preview.d.ts.map +1 -0
- package/dist/commands/preview.js +352 -0
- package/dist/commands/preview.js.map +1 -0
- package/dist/commands/quality/check.d.ts +31 -0
- package/dist/commands/quality/check.d.ts.map +1 -0
- package/dist/commands/quality/check.js +242 -0
- package/dist/commands/quality/check.js.map +1 -0
- package/dist/commands/quality/index.d.ts +8 -0
- package/dist/commands/quality/index.d.ts.map +1 -0
- package/dist/commands/quality/index.js +14 -0
- package/dist/commands/quality/index.js.map +1 -0
- package/dist/commands/quality/setup-quality.d.ts +23 -0
- package/dist/commands/quality/setup-quality.d.ts.map +1 -0
- package/dist/commands/quality/setup-quality.js +452 -0
- package/dist/commands/quality/setup-quality.js.map +1 -0
- package/dist/commands/quality/tidy.d.ts +41 -0
- package/dist/commands/quality/tidy.d.ts.map +1 -0
- package/dist/commands/quality/tidy.js +466 -0
- package/dist/commands/quality/tidy.js.map +1 -0
- package/dist/commands/quality/utils.d.ts +73 -0
- package/dist/commands/quality/utils.d.ts.map +1 -0
- package/dist/commands/quality/utils.js +158 -0
- package/dist/commands/quality/utils.js.map +1 -0
- package/dist/commands/replay.d.ts +8 -0
- package/dist/commands/replay.d.ts.map +1 -0
- package/dist/commands/replay.js +52 -0
- package/dist/commands/replay.js.map +1 -0
- package/dist/commands/scan-consolidated.d.ts +61 -0
- package/dist/commands/scan-consolidated.d.ts.map +1 -0
- package/dist/commands/scan-consolidated.js +243 -0
- package/dist/commands/scan-consolidated.js.map +1 -0
- package/dist/commands/scan-secrets.d.ts +47 -0
- package/dist/commands/scan-secrets.d.ts.map +1 -0
- package/dist/commands/scan-secrets.js +225 -0
- package/dist/commands/scan-secrets.js.map +1 -0
- package/dist/commands/scan-vulnerabilities-enhanced.d.ts +41 -0
- package/dist/commands/scan-vulnerabilities-enhanced.d.ts.map +1 -0
- package/dist/commands/scan-vulnerabilities-enhanced.js +368 -0
- package/dist/commands/scan-vulnerabilities-enhanced.js.map +1 -0
- package/dist/commands/scan-vulnerabilities-osv.d.ts +58 -0
- package/dist/commands/scan-vulnerabilities-osv.d.ts.map +1 -0
- package/dist/commands/scan-vulnerabilities-osv.js +716 -0
- package/dist/commands/scan-vulnerabilities-osv.js.map +1 -0
- package/dist/commands/scan-vulnerabilities.d.ts +32 -0
- package/dist/commands/scan-vulnerabilities.d.ts.map +1 -0
- package/dist/commands/scan-vulnerabilities.js +283 -0
- package/dist/commands/scan-vulnerabilities.js.map +1 -0
- package/dist/commands/secrets-allowlist.d.ts +7 -0
- package/dist/commands/secrets-allowlist.d.ts.map +1 -0
- package/dist/commands/secrets-allowlist.js +85 -0
- package/dist/commands/secrets-allowlist.js.map +1 -0
- package/dist/commands/ship-consolidated.d.ts +58 -0
- package/dist/commands/ship-consolidated.d.ts.map +1 -0
- package/dist/commands/ship-consolidated.js +515 -0
- package/dist/commands/ship-consolidated.js.map +1 -0
- package/dist/commands/stats.d.ts +8 -0
- package/dist/commands/stats.d.ts.map +1 -0
- package/dist/commands/stats.js +134 -0
- package/dist/commands/stats.js.map +1 -0
- package/dist/commands/upgrade.d.ts +8 -0
- package/dist/commands/upgrade.d.ts.map +1 -0
- package/dist/commands/upgrade.js +30 -0
- package/dist/commands/upgrade.js.map +1 -0
- package/dist/fix/analytics.d.ts +121 -0
- package/dist/fix/analytics.d.ts.map +1 -0
- package/dist/fix/analytics.js +289 -0
- package/dist/fix/analytics.js.map +1 -0
- package/dist/fix/applicator.d.ts +44 -0
- package/dist/fix/applicator.d.ts.map +1 -0
- package/dist/fix/applicator.js +144 -0
- package/dist/fix/applicator.js.map +1 -0
- package/dist/fix/audit.d.ts +61 -0
- package/dist/fix/audit.d.ts.map +1 -0
- package/dist/fix/audit.js +149 -0
- package/dist/fix/audit.js.map +1 -0
- package/dist/fix/backup.d.ts +38 -0
- package/dist/fix/backup.d.ts.map +1 -0
- package/dist/fix/backup.js +154 -0
- package/dist/fix/backup.js.map +1 -0
- package/dist/fix/config.d.ts +78 -0
- package/dist/fix/config.d.ts.map +1 -0
- package/dist/fix/config.js +200 -0
- package/dist/fix/config.js.map +1 -0
- package/dist/fix/engine.d.ts +55 -0
- package/dist/fix/engine.d.ts.map +1 -0
- package/dist/fix/engine.js +285 -0
- package/dist/fix/engine.js.map +1 -0
- package/dist/fix/impact.d.ts +74 -0
- package/dist/fix/impact.d.ts.map +1 -0
- package/dist/fix/impact.js +281 -0
- package/dist/fix/impact.js.map +1 -0
- package/dist/fix/index.d.ts +5 -0
- package/dist/fix/index.d.ts.map +1 -0
- package/dist/fix/index.js +12 -0
- package/dist/fix/index.js.map +1 -0
- package/dist/fix/interactive.d.ts +22 -0
- package/dist/fix/interactive.d.ts.map +1 -0
- package/dist/fix/interactive.js +172 -0
- package/dist/fix/interactive.js.map +1 -0
- package/dist/fix/learning.d.ts +109 -0
- package/dist/fix/learning.d.ts.map +1 -0
- package/dist/fix/learning.js +296 -0
- package/dist/fix/learning.js.map +1 -0
- package/dist/fix/metrics.d.ts +106 -0
- package/dist/fix/metrics.d.ts.map +1 -0
- package/dist/fix/metrics.js +138 -0
- package/dist/fix/metrics.js.map +1 -0
- package/dist/fix/parallel.d.ts +69 -0
- package/dist/fix/parallel.d.ts.map +1 -0
- package/dist/fix/parallel.js +203 -0
- package/dist/fix/parallel.js.map +1 -0
- package/dist/fix/report.d.ts +40 -0
- package/dist/fix/report.d.ts.map +1 -0
- package/dist/fix/report.js +212 -0
- package/dist/fix/report.js.map +1 -0
- package/dist/fix/strategy.d.ts +53 -0
- package/dist/fix/strategy.d.ts.map +1 -0
- package/dist/fix/strategy.js +143 -0
- package/dist/fix/strategy.js.map +1 -0
- package/dist/fix/templates.d.ts +58 -0
- package/dist/fix/templates.d.ts.map +1 -0
- package/dist/fix/templates.js +259 -0
- package/dist/fix/templates.js.map +1 -0
- package/dist/fix/testing.d.ts +68 -0
- package/dist/fix/testing.d.ts.map +1 -0
- package/dist/fix/testing.js +245 -0
- package/dist/fix/testing.js.map +1 -0
- package/dist/fix/validation.d.ts +71 -0
- package/dist/fix/validation.d.ts.map +1 -0
- package/dist/fix/validation.js +267 -0
- package/dist/fix/validation.js.map +1 -0
- package/dist/fix/visualization.d.ts +73 -0
- package/dist/fix/visualization.d.ts.map +1 -0
- package/dist/fix/visualization.js +243 -0
- package/dist/fix/visualization.js.map +1 -0
- package/dist/formatters/index.d.ts +6 -0
- package/dist/formatters/index.d.ts.map +1 -0
- package/dist/formatters/index.js +11 -0
- package/dist/formatters/index.js.map +1 -0
- package/dist/formatters/sarif-enhanced.d.ts +78 -0
- package/dist/formatters/sarif-enhanced.d.ts.map +1 -0
- package/dist/formatters/sarif-enhanced.js +144 -0
- package/dist/formatters/sarif-enhanced.js.map +1 -0
- package/dist/formatters/sarif-v2.d.ts +121 -0
- package/dist/formatters/sarif-v2.d.ts.map +1 -0
- package/dist/formatters/sarif-v2.js +356 -0
- package/dist/formatters/sarif-v2.js.map +1 -0
- package/dist/formatters/sarif.d.ts +72 -0
- package/dist/formatters/sarif.d.ts.map +1 -0
- package/dist/formatters/sarif.js +146 -0
- package/dist/formatters/sarif.js.map +1 -0
- package/dist/index.d.ts +61 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +4455 -0
- package/dist/index.js.map +1 -0
- package/dist/init/ci-generator.d.ts +18 -0
- package/dist/init/ci-generator.d.ts.map +1 -0
- package/dist/init/ci-generator.js +317 -0
- package/dist/init/ci-generator.js.map +1 -0
- package/dist/init/detect-framework.d.ts +15 -0
- package/dist/init/detect-framework.d.ts.map +1 -0
- package/dist/init/detect-framework.js +301 -0
- package/dist/init/detect-framework.js.map +1 -0
- package/dist/init/hooks-installer.d.ts +22 -0
- package/dist/init/hooks-installer.d.ts.map +1 -0
- package/dist/init/hooks-installer.js +310 -0
- package/dist/init/hooks-installer.js.map +1 -0
- package/dist/init/index.d.ts +8 -0
- package/dist/init/index.d.ts.map +1 -0
- package/dist/init/index.js +22 -0
- package/dist/init/index.js.map +1 -0
- package/dist/init/templates.d.ts +401 -0
- package/dist/init/templates.d.ts.map +1 -0
- package/dist/init/templates.js +240 -0
- package/dist/init/templates.js.map +1 -0
- package/dist/mcp/server.d.ts +12 -0
- package/dist/mcp/server.d.ts.map +1 -0
- package/dist/mcp/server.js +42 -0
- package/dist/mcp/server.js.map +1 -0
- package/dist/mcp/telemetry.d.ts +40 -0
- package/dist/mcp/telemetry.d.ts.map +1 -0
- package/dist/mcp/telemetry.js +98 -0
- package/dist/mcp/telemetry.js.map +1 -0
- package/dist/reality/no-dead-buttons/button-sweep-generator.d.ts +32 -0
- package/dist/reality/no-dead-buttons/button-sweep-generator.d.ts.map +1 -0
- package/dist/reality/no-dead-buttons/button-sweep-generator.js +236 -0
- package/dist/reality/no-dead-buttons/button-sweep-generator.js.map +1 -0
- package/dist/reality/no-dead-buttons/index.d.ts +11 -0
- package/dist/reality/no-dead-buttons/index.d.ts.map +1 -0
- package/dist/reality/no-dead-buttons/index.js +18 -0
- package/dist/reality/no-dead-buttons/index.js.map +1 -0
- package/dist/reality/no-dead-buttons/static-scanner.d.ts +34 -0
- package/dist/reality/no-dead-buttons/static-scanner.d.ts.map +1 -0
- package/dist/reality/no-dead-buttons/static-scanner.js +230 -0
- package/dist/reality/no-dead-buttons/static-scanner.js.map +1 -0
- package/dist/reality/reality-graph.d.ts +192 -0
- package/dist/reality/reality-graph.d.ts.map +1 -0
- package/dist/reality/reality-graph.js +600 -0
- package/dist/reality/reality-graph.js.map +1 -0
- package/dist/reality/reality-runner.d.ts +89 -0
- package/dist/reality/reality-runner.d.ts.map +1 -0
- package/dist/reality/reality-runner.js +540 -0
- package/dist/reality/reality-runner.js.map +1 -0
- package/dist/reality/receipt-generator.d.ts +152 -0
- package/dist/reality/receipt-generator.d.ts.map +1 -0
- package/dist/reality/receipt-generator.js +495 -0
- package/dist/reality/receipt-generator.js.map +1 -0
- package/dist/reality/runtime-tracer.d.ts +75 -0
- package/dist/reality/runtime-tracer.d.ts.map +1 -0
- package/dist/reality/runtime-tracer.js +109 -0
- package/dist/reality/runtime-tracer.js.map +1 -0
- package/dist/runtime/auth-utils.d.ts +43 -0
- package/dist/runtime/auth-utils.d.ts.map +1 -0
- package/dist/runtime/auth-utils.js +130 -0
- package/dist/runtime/auth-utils.js.map +1 -0
- package/dist/runtime/cli-errors.d.ts +38 -0
- package/dist/runtime/cli-errors.d.ts.map +1 -0
- package/dist/runtime/cli-errors.js +354 -0
- package/dist/runtime/cli-errors.js.map +1 -0
- package/dist/runtime/client.d.ts +74 -0
- package/dist/runtime/client.d.ts.map +1 -0
- package/dist/runtime/client.js +222 -0
- package/dist/runtime/client.js.map +1 -0
- package/dist/runtime/creds.d.ts +48 -0
- package/dist/runtime/creds.d.ts.map +1 -0
- package/dist/runtime/creds.js +245 -0
- package/dist/runtime/creds.js.map +1 -0
- package/dist/runtime/exit-codes.d.ts +49 -0
- package/dist/runtime/exit-codes.d.ts.map +1 -0
- package/dist/runtime/exit-codes.js +93 -0
- package/dist/runtime/exit-codes.js.map +1 -0
- package/dist/runtime/index.d.ts +9 -0
- package/dist/runtime/index.d.ts.map +1 -0
- package/dist/runtime/index.js +25 -0
- package/dist/runtime/index.js.map +1 -0
- package/dist/runtime/json-output.d.ts +42 -0
- package/dist/runtime/json-output.d.ts.map +1 -0
- package/dist/runtime/json-output.js +59 -0
- package/dist/runtime/json-output.js.map +1 -0
- package/dist/runtime/owner-mode.d.ts +48 -0
- package/dist/runtime/owner-mode.d.ts.map +1 -0
- package/dist/runtime/owner-mode.js +284 -0
- package/dist/runtime/owner-mode.js.map +1 -0
- package/dist/runtime/semver.d.ts +37 -0
- package/dist/runtime/semver.d.ts.map +1 -0
- package/dist/runtime/semver.js +110 -0
- package/dist/runtime/semver.js.map +1 -0
- package/dist/scan/dead-ui-detector.d.ts +48 -0
- package/dist/scan/dead-ui-detector.d.ts.map +1 -0
- package/dist/scan/dead-ui-detector.js +170 -0
- package/dist/scan/dead-ui-detector.js.map +1 -0
- package/dist/scan/playwright-sweep.d.ts +40 -0
- package/dist/scan/playwright-sweep.d.ts.map +1 -0
- package/dist/scan/playwright-sweep.js +216 -0
- package/dist/scan/playwright-sweep.js.map +1 -0
- package/dist/scan/proof-bundle.d.ts +25 -0
- package/dist/scan/proof-bundle.d.ts.map +1 -0
- package/dist/scan/proof-bundle.js +203 -0
- package/dist/scan/proof-bundle.js.map +1 -0
- package/dist/scan/proof-graph.d.ts +59 -0
- package/dist/scan/proof-graph.d.ts.map +1 -0
- package/dist/scan/proof-graph.js +64 -0
- package/dist/scan/proof-graph.js.map +1 -0
- package/dist/scan/reality-sniff.d.ts +56 -0
- package/dist/scan/reality-sniff.d.ts.map +1 -0
- package/dist/scan/reality-sniff.js +200 -0
- package/dist/scan/reality-sniff.js.map +1 -0
- package/dist/scan/structural-verifier.d.ts +20 -0
- package/dist/scan/structural-verifier.d.ts.map +1 -0
- package/dist/scan/structural-verifier.js +112 -0
- package/dist/scan/structural-verifier.js.map +1 -0
- package/dist/scan/verification-engine.d.ts +47 -0
- package/dist/scan/verification-engine.d.ts.map +1 -0
- package/dist/scan/verification-engine.js +141 -0
- package/dist/scan/verification-engine.js.map +1 -0
- package/dist/scanner/baseline.d.ts +52 -0
- package/dist/scanner/baseline.d.ts.map +1 -0
- package/dist/scanner/baseline.js +85 -0
- package/dist/scanner/baseline.js.map +1 -0
- package/dist/scanner/incremental.d.ts +30 -0
- package/dist/scanner/incremental.d.ts.map +1 -0
- package/dist/scanner/incremental.js +82 -0
- package/dist/scanner/incremental.js.map +1 -0
- package/dist/scanner/index.d.ts +8 -0
- package/dist/scanner/index.d.ts.map +1 -0
- package/dist/scanner/index.js +15 -0
- package/dist/scanner/index.js.map +1 -0
- package/dist/scanner/parallel.d.ts +43 -0
- package/dist/scanner/parallel.d.ts.map +1 -0
- package/dist/scanner/parallel.js +99 -0
- package/dist/scanner/parallel.js.map +1 -0
- package/dist/scanner/placeholder-detector.d.ts +56 -0
- package/dist/scanner/placeholder-detector.d.ts.map +1 -0
- package/dist/scanner/placeholder-detector.js +220 -0
- package/dist/scanner/placeholder-detector.js.map +1 -0
- package/dist/scanner/route-detector.d.ts +100 -0
- package/dist/scanner/route-detector.d.ts.map +1 -0
- package/dist/scanner/route-detector.js +455 -0
- package/dist/scanner/route-detector.js.map +1 -0
- package/dist/scanner/scoring.d.ts +67 -0
- package/dist/scanner/scoring.d.ts.map +1 -0
- package/dist/scanner/scoring.js +284 -0
- package/dist/scanner/scoring.js.map +1 -0
- package/dist/ship-baseline.d.ts +56 -0
- package/dist/ship-baseline.d.ts.map +1 -0
- package/dist/ship-baseline.js +194 -0
- package/dist/ship-baseline.js.map +1 -0
- package/dist/ship-config.d.ts +91 -0
- package/dist/ship-config.d.ts.map +1 -0
- package/dist/ship-config.js +133 -0
- package/dist/ship-config.js.map +1 -0
- package/dist/ship-data-loader.d.ts +70 -0
- package/dist/ship-data-loader.d.ts.map +1 -0
- package/dist/ship-data-loader.js +301 -0
- package/dist/ship-data-loader.js.map +1 -0
- package/dist/standalone.d.ts +1 -0
- package/dist/standalone.d.ts.map +1 -0
- package/dist/standalone.js +1 -0
- package/dist/standalone.js.map +1 -0
- package/dist/truth-pack/index.d.ts +102 -0
- package/dist/truth-pack/index.d.ts.map +1 -0
- package/dist/truth-pack/index.js +694 -0
- package/dist/truth-pack/index.js.map +1 -0
- package/dist/ui/frame.d.ts +68 -0
- package/dist/ui/frame.d.ts.map +1 -0
- package/dist/ui/frame.js +165 -0
- package/dist/ui/frame.js.map +1 -0
- package/dist/ui/index.d.ts +5 -0
- package/dist/ui/index.d.ts.map +1 -0
- package/dist/ui/index.js +16 -0
- package/dist/ui/index.js.map +1 -0
- package/dist/ui.d.ts +36 -0
- package/dist/ui.d.ts.map +1 -0
- package/dist/ui.js +45 -0
- package/dist/ui.js.map +1 -0
- package/dist/utils/ai-helpers.d.ts +72 -0
- package/dist/utils/ai-helpers.d.ts.map +1 -0
- package/dist/utils/ai-helpers.js +339 -0
- package/dist/utils/ai-helpers.js.map +1 -0
- package/dist/utils/validation.d.ts +34 -0
- package/dist/utils/validation.d.ts.map +1 -0
- package/dist/utils/validation.js +160 -0
- package/dist/utils/validation.js.map +1 -0
- package/package.json +66 -0
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Parallel scanning orchestrator with multi-stage progress
|
|
3
|
+
*/
|
|
4
|
+
import { ScanSecretsResult } from '../commands/scan-secrets';
|
|
5
|
+
import { ScanVulnResult } from '../commands/scan-vulnerabilities';
|
|
6
|
+
export interface ParallelScanOptions {
|
|
7
|
+
path: string;
|
|
8
|
+
type: 'all' | 'secrets' | 'vulnerabilities' | 'compliance';
|
|
9
|
+
format: 'table' | 'json' | 'sarif' | 'markdown';
|
|
10
|
+
output?: string;
|
|
11
|
+
excludeTests?: boolean;
|
|
12
|
+
minConfidence?: number;
|
|
13
|
+
failOnDetection?: boolean;
|
|
14
|
+
failOnCritical?: boolean;
|
|
15
|
+
failOnHigh?: boolean;
|
|
16
|
+
evidence?: boolean;
|
|
17
|
+
complianceFramework?: string;
|
|
18
|
+
since?: string;
|
|
19
|
+
baseline?: string;
|
|
20
|
+
}
|
|
21
|
+
export interface ParallelScanResult {
|
|
22
|
+
secrets?: ScanSecretsResult;
|
|
23
|
+
vulnerabilities?: ScanVulnResult;
|
|
24
|
+
compliance?: any;
|
|
25
|
+
duration: number;
|
|
26
|
+
timestamp: string;
|
|
27
|
+
}
|
|
28
|
+
interface ScanProgress {
|
|
29
|
+
stage: string;
|
|
30
|
+
message: string;
|
|
31
|
+
completed: boolean;
|
|
32
|
+
}
|
|
33
|
+
export declare class ParallelScanner {
|
|
34
|
+
private progressCallbacks;
|
|
35
|
+
onProgress(module: string, callback: (progress: ScanProgress) => void): void;
|
|
36
|
+
private updateProgress;
|
|
37
|
+
scan(projectPath: string, options: ParallelScanOptions): Promise<ParallelScanResult>;
|
|
38
|
+
private runSecretsScanner;
|
|
39
|
+
private runVulnerabilitiesScanner;
|
|
40
|
+
private runComplianceScanner;
|
|
41
|
+
}
|
|
42
|
+
export {};
|
|
43
|
+
//# sourceMappingURL=parallel.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"parallel.d.ts","sourceRoot":"","sources":["../../src/scanner/parallel.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAe,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAC1E,OAAO,EAAuB,cAAc,EAAE,MAAM,kCAAkC,CAAC;AAEvF,MAAM,WAAW,mBAAmB;IAClC,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,KAAK,GAAG,SAAS,GAAG,iBAAiB,GAAG,YAAY,CAAC;IAC3D,MAAM,EAAE,OAAO,GAAG,MAAM,GAAG,OAAO,GAAG,UAAU,CAAC;IAChD,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,kBAAkB;IACjC,OAAO,CAAC,EAAE,iBAAiB,CAAC;IAC5B,eAAe,CAAC,EAAE,cAAc,CAAC;IACjC,UAAU,CAAC,EAAE,GAAG,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,UAAU,YAAY;IACpB,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,OAAO,CAAC;CACpB;AAED,qBAAa,eAAe;IAC1B,OAAO,CAAC,iBAAiB,CAA4D;IAErF,UAAU,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC,QAAQ,EAAE,YAAY,KAAK,IAAI,GAAG,IAAI;IAI5E,OAAO,CAAC,cAAc;IAOhB,IAAI,CAAC,WAAW,EAAE,MAAM,EAAE,OAAO,EAAE,mBAAmB,GAAG,OAAO,CAAC,kBAAkB,CAAC;YA0C5E,iBAAiB;YAkBjB,yBAAyB;YAgBzB,oBAAoB;CAoBnC"}
|
|
@@ -0,0 +1,99 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Parallel scanning orchestrator with multi-stage progress
|
|
4
|
+
*/
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.ParallelScanner = void 0;
|
|
7
|
+
const scan_secrets_1 = require("../commands/scan-secrets");
|
|
8
|
+
const scan_vulnerabilities_1 = require("../commands/scan-vulnerabilities");
|
|
9
|
+
class ParallelScanner {
|
|
10
|
+
constructor() {
|
|
11
|
+
this.progressCallbacks = new Map();
|
|
12
|
+
}
|
|
13
|
+
onProgress(module, callback) {
|
|
14
|
+
this.progressCallbacks.set(module, callback);
|
|
15
|
+
}
|
|
16
|
+
updateProgress(module, stage, message, completed = false) {
|
|
17
|
+
const callback = this.progressCallbacks.get(module);
|
|
18
|
+
if (callback) {
|
|
19
|
+
callback({ stage, message, completed });
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
async scan(projectPath, options) {
|
|
23
|
+
const startTime = Date.now();
|
|
24
|
+
const tasks = [];
|
|
25
|
+
const result = {
|
|
26
|
+
duration: 0,
|
|
27
|
+
timestamp: new Date().toISOString(),
|
|
28
|
+
};
|
|
29
|
+
// Secrets scan
|
|
30
|
+
if (options.type === 'all' || options.type === 'secrets') {
|
|
31
|
+
tasks.push(this.runSecretsScanner(projectPath, options).then(res => {
|
|
32
|
+
result.secrets = res;
|
|
33
|
+
}));
|
|
34
|
+
}
|
|
35
|
+
// Vulnerabilities scan
|
|
36
|
+
if (options.type === 'all' || options.type === 'vulnerabilities') {
|
|
37
|
+
tasks.push(this.runVulnerabilitiesScanner(projectPath, options).then(res => {
|
|
38
|
+
result.vulnerabilities = res;
|
|
39
|
+
}));
|
|
40
|
+
}
|
|
41
|
+
// Compliance scan (if selected)
|
|
42
|
+
if (options.type === 'compliance') {
|
|
43
|
+
tasks.push(this.runComplianceScanner(projectPath, options).then(res => {
|
|
44
|
+
result.compliance = res;
|
|
45
|
+
}));
|
|
46
|
+
}
|
|
47
|
+
// Run all scans in parallel
|
|
48
|
+
await Promise.all(tasks);
|
|
49
|
+
result.duration = Date.now() - startTime;
|
|
50
|
+
return result;
|
|
51
|
+
}
|
|
52
|
+
async runSecretsScanner(projectPath, options) {
|
|
53
|
+
this.updateProgress('secrets', 'init', 'Initializing secret scanner...');
|
|
54
|
+
this.updateProgress('secrets', 'scan', 'Scanning files for secrets...');
|
|
55
|
+
const result = await (0, scan_secrets_1.scanSecrets)(projectPath, {
|
|
56
|
+
path: projectPath,
|
|
57
|
+
format: options.format === 'markdown' ? 'table' : options.format,
|
|
58
|
+
output: options.output,
|
|
59
|
+
excludeTests: options.excludeTests || false,
|
|
60
|
+
minConfidence: options.minConfidence,
|
|
61
|
+
failOnDetection: options.failOnDetection || false,
|
|
62
|
+
evidence: options.evidence || false,
|
|
63
|
+
});
|
|
64
|
+
this.updateProgress('secrets', 'complete', `Found ${result.findings.length} secrets`, true);
|
|
65
|
+
return result;
|
|
66
|
+
}
|
|
67
|
+
async runVulnerabilitiesScanner(projectPath, options) {
|
|
68
|
+
this.updateProgress('vulnerabilities', 'init', 'Initializing vulnerability scanner...');
|
|
69
|
+
this.updateProgress('vulnerabilities', 'scan', 'Analyzing dependencies...');
|
|
70
|
+
const result = await (0, scan_vulnerabilities_1.scanVulnerabilities)(projectPath, {
|
|
71
|
+
format: options.format,
|
|
72
|
+
output: options.output,
|
|
73
|
+
failOnCritical: options.failOnCritical,
|
|
74
|
+
failOnHigh: options.failOnHigh,
|
|
75
|
+
});
|
|
76
|
+
const total = result.summary.critical + result.summary.high + result.summary.medium + result.summary.low;
|
|
77
|
+
this.updateProgress('vulnerabilities', 'complete', `Found ${total} vulnerabilities`, true);
|
|
78
|
+
return result;
|
|
79
|
+
}
|
|
80
|
+
async runComplianceScanner(projectPath, options) {
|
|
81
|
+
this.updateProgress('compliance', 'init', 'Initializing compliance scanner...');
|
|
82
|
+
this.updateProgress('compliance', 'scan', `Running ${options.complianceFramework || 'SOC2'} checks...`);
|
|
83
|
+
// Mock compliance result
|
|
84
|
+
const result = {
|
|
85
|
+
projectPath,
|
|
86
|
+
framework: options.complianceFramework || 'SOC2',
|
|
87
|
+
overallScore: 78,
|
|
88
|
+
categories: [
|
|
89
|
+
{ name: 'Access Control', score: 85, status: 'pass', checks: 12, passed: 10 },
|
|
90
|
+
{ name: 'Data Encryption', score: 92, status: 'pass', checks: 8, passed: 7 },
|
|
91
|
+
{ name: 'Audit Logging', score: 65, status: 'warning', checks: 10, passed: 6 },
|
|
92
|
+
],
|
|
93
|
+
};
|
|
94
|
+
this.updateProgress('compliance', 'complete', `Score: ${result.overallScore}%`, true);
|
|
95
|
+
return result;
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
exports.ParallelScanner = ParallelScanner;
|
|
99
|
+
//# sourceMappingURL=parallel.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"parallel.js","sourceRoot":"","sources":["../../src/scanner/parallel.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Placeholder Detector with Rule-Tiered Approach
|
|
3
|
+
*
|
|
4
|
+
* Implements sophisticated placeholder detection with multiple confidence levels:
|
|
5
|
+
* - Ignore list (safe): HTML placeholder attributes by default
|
|
6
|
+
* - High-confidence: UI text nodes, mock responses
|
|
7
|
+
* - Medium-confidence: "placeholder" in variable names or comments
|
|
8
|
+
*/
|
|
9
|
+
export interface PlaceholderFinding {
|
|
10
|
+
type: 'ui_text' | 'html_attribute' | 'mock_response' | 'comment' | 'variable';
|
|
11
|
+
file: string;
|
|
12
|
+
line: number;
|
|
13
|
+
column?: number;
|
|
14
|
+
match: string;
|
|
15
|
+
confidence: 'high' | 'medium' | 'low';
|
|
16
|
+
snippet?: string;
|
|
17
|
+
}
|
|
18
|
+
export interface PlaceholderDetectorConfig {
|
|
19
|
+
/** Count HTML placeholder attributes (default: false) */
|
|
20
|
+
countInputPlaceholders?: boolean;
|
|
21
|
+
/** Ignore patterns (regex) */
|
|
22
|
+
ignorePatterns?: RegExp[];
|
|
23
|
+
}
|
|
24
|
+
export declare class PlaceholderDetector {
|
|
25
|
+
private config;
|
|
26
|
+
constructor(config?: PlaceholderDetectorConfig);
|
|
27
|
+
/**
|
|
28
|
+
* Detect placeholders in source code
|
|
29
|
+
*/
|
|
30
|
+
detectPlaceholders(filePath: string, content: string): Promise<PlaceholderFinding[]>;
|
|
31
|
+
/**
|
|
32
|
+
* High-confidence placeholders: UI text nodes and mock responses
|
|
33
|
+
*/
|
|
34
|
+
private detectHighConfidence;
|
|
35
|
+
/**
|
|
36
|
+
* Medium-confidence placeholders: comments and variable names
|
|
37
|
+
*/
|
|
38
|
+
private detectMediumConfidence;
|
|
39
|
+
/**
|
|
40
|
+
* Detect HTML placeholder attributes
|
|
41
|
+
*/
|
|
42
|
+
private detectHtmlPlaceholderAttributes;
|
|
43
|
+
/**
|
|
44
|
+
* Check if line is an HTML placeholder attribute
|
|
45
|
+
*/
|
|
46
|
+
private isHtmlPlaceholderAttribute;
|
|
47
|
+
/**
|
|
48
|
+
* Find all matches in a string with their indices
|
|
49
|
+
*/
|
|
50
|
+
private findAllMatches;
|
|
51
|
+
/**
|
|
52
|
+
* Count placeholders by type
|
|
53
|
+
*/
|
|
54
|
+
static countByType(findings: PlaceholderFinding[]): Record<string, number>;
|
|
55
|
+
}
|
|
56
|
+
//# sourceMappingURL=placeholder-detector.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"placeholder-detector.d.ts","sourceRoot":"","sources":["../../src/scanner/placeholder-detector.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,MAAM,WAAW,kBAAkB;IACjC,IAAI,EAAE,SAAS,GAAG,gBAAgB,GAAG,eAAe,GAAG,SAAS,GAAG,UAAU,CAAC;IAC9E,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;IACd,UAAU,EAAE,MAAM,GAAG,QAAQ,GAAG,KAAK,CAAC;IACtC,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,yBAAyB;IACxC,yDAAyD;IACzD,sBAAsB,CAAC,EAAE,OAAO,CAAC;IACjC,8BAA8B;IAC9B,cAAc,CAAC,EAAE,MAAM,EAAE,CAAC;CAC3B;AAED,qBAAa,mBAAmB;IAC9B,OAAO,CAAC,MAAM,CAAsC;gBAExC,MAAM,GAAE,yBAA8B;IAOlD;;OAEG;IACG,kBAAkB,CACtB,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE,MAAM,GACd,OAAO,CAAC,kBAAkB,EAAE,CAAC;IAsDhC;;OAEG;IACH,OAAO,CAAC,oBAAoB;IA6D5B;;OAEG;IACH,OAAO,CAAC,sBAAsB;IAuD9B;;OAEG;IACH,OAAO,CAAC,+BAA+B;IAiCvC;;OAEG;IACH,OAAO,CAAC,0BAA0B;IAIlC;;OAEG;IACH,OAAO,CAAC,cAAc;IAgBtB;;OAEG;IACH,MAAM,CAAC,WAAW,CAChB,QAAQ,EAAE,kBAAkB,EAAE,GAC7B,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC;CAgB1B"}
|
|
@@ -0,0 +1,220 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Placeholder Detector with Rule-Tiered Approach
|
|
4
|
+
*
|
|
5
|
+
* Implements sophisticated placeholder detection with multiple confidence levels:
|
|
6
|
+
* - Ignore list (safe): HTML placeholder attributes by default
|
|
7
|
+
* - High-confidence: UI text nodes, mock responses
|
|
8
|
+
* - Medium-confidence: "placeholder" in variable names or comments
|
|
9
|
+
*/
|
|
10
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
11
|
+
exports.PlaceholderDetector = void 0;
|
|
12
|
+
class PlaceholderDetector {
|
|
13
|
+
constructor(config = {}) {
|
|
14
|
+
this.config = {
|
|
15
|
+
countInputPlaceholders: config.countInputPlaceholders ?? false,
|
|
16
|
+
ignorePatterns: config.ignorePatterns ?? [],
|
|
17
|
+
};
|
|
18
|
+
}
|
|
19
|
+
/**
|
|
20
|
+
* Detect placeholders in source code
|
|
21
|
+
*/
|
|
22
|
+
async detectPlaceholders(filePath, content) {
|
|
23
|
+
const findings = [];
|
|
24
|
+
const lines = content.split('\n');
|
|
25
|
+
for (let lineNum = 0; lineNum < lines.length; lineNum++) {
|
|
26
|
+
const line = lines[lineNum];
|
|
27
|
+
const lineContent = line.trim();
|
|
28
|
+
// Skip empty lines
|
|
29
|
+
if (!lineContent)
|
|
30
|
+
continue;
|
|
31
|
+
// High-confidence patterns: UI text nodes and mock responses
|
|
32
|
+
const highConfidenceFindings = this.detectHighConfidence(filePath, lineNum + 1, lineContent, line);
|
|
33
|
+
findings.push(...highConfidenceFindings);
|
|
34
|
+
// Medium-confidence patterns: comments and variable names
|
|
35
|
+
if (!this.config.countInputPlaceholders) {
|
|
36
|
+
// Skip HTML placeholder attributes unless explicitly enabled
|
|
37
|
+
if (this.isHtmlPlaceholderAttribute(lineContent)) {
|
|
38
|
+
continue;
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
else {
|
|
42
|
+
// Count HTML placeholder attributes if enabled
|
|
43
|
+
const htmlFindings = this.detectHtmlPlaceholderAttributes(filePath, lineNum + 1, lineContent, line);
|
|
44
|
+
findings.push(...htmlFindings);
|
|
45
|
+
}
|
|
46
|
+
const mediumConfidenceFindings = this.detectMediumConfidence(filePath, lineNum + 1, lineContent, line);
|
|
47
|
+
findings.push(...mediumConfidenceFindings);
|
|
48
|
+
}
|
|
49
|
+
// Filter out ignored patterns
|
|
50
|
+
return findings.filter((finding) => {
|
|
51
|
+
return !this.config.ignorePatterns.some((pattern) => pattern.test(finding.match));
|
|
52
|
+
});
|
|
53
|
+
}
|
|
54
|
+
/**
|
|
55
|
+
* High-confidence placeholders: UI text nodes and mock responses
|
|
56
|
+
*/
|
|
57
|
+
detectHighConfidence(filePath, lineNum, lineContent, originalLine) {
|
|
58
|
+
const findings = [];
|
|
59
|
+
// UI text patterns
|
|
60
|
+
const uiTextPatterns = [
|
|
61
|
+
/["'`]Coming\s+soon["'`]/i,
|
|
62
|
+
/["'`]Todo\s+App["'`]/i,
|
|
63
|
+
/["'`]Chart\s+Placeholder/i,
|
|
64
|
+
/["'`]Placeholder\.\.\.["'`]/i,
|
|
65
|
+
/["'`]TODO:.*["'`]/i,
|
|
66
|
+
/["'`]FIXME:.*["'`]/i,
|
|
67
|
+
];
|
|
68
|
+
for (const pattern of uiTextPatterns) {
|
|
69
|
+
const matches = this.findAllMatches(lineContent, pattern);
|
|
70
|
+
for (const match of matches) {
|
|
71
|
+
findings.push({
|
|
72
|
+
type: 'ui_text',
|
|
73
|
+
file: filePath,
|
|
74
|
+
line: lineNum,
|
|
75
|
+
column: match.index,
|
|
76
|
+
match: match.text,
|
|
77
|
+
confidence: 'high',
|
|
78
|
+
snippet: originalLine.trim(),
|
|
79
|
+
});
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
// Mock response patterns
|
|
83
|
+
const mockResponsePatterns = [
|
|
84
|
+
/"success":\s*true.*"TODO"/i,
|
|
85
|
+
/"success":\s*true.*"FIXME"/i,
|
|
86
|
+
/"mock":\s*true/i,
|
|
87
|
+
/"isMock":\s*true/i,
|
|
88
|
+
/mockData\s*[:=]/i,
|
|
89
|
+
/lorem\s+ipsum/i,
|
|
90
|
+
];
|
|
91
|
+
for (const pattern of mockResponsePatterns) {
|
|
92
|
+
const matches = this.findAllMatches(lineContent, pattern);
|
|
93
|
+
for (const match of matches) {
|
|
94
|
+
findings.push({
|
|
95
|
+
type: 'mock_response',
|
|
96
|
+
file: filePath,
|
|
97
|
+
line: lineNum,
|
|
98
|
+
column: match.index,
|
|
99
|
+
match: match.text,
|
|
100
|
+
confidence: 'high',
|
|
101
|
+
snippet: originalLine.trim(),
|
|
102
|
+
});
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
return findings;
|
|
106
|
+
}
|
|
107
|
+
/**
|
|
108
|
+
* Medium-confidence placeholders: comments and variable names
|
|
109
|
+
*/
|
|
110
|
+
detectMediumConfidence(filePath, lineNum, lineContent, originalLine) {
|
|
111
|
+
const findings = [];
|
|
112
|
+
// Comment patterns (medium confidence)
|
|
113
|
+
const commentPatterns = [
|
|
114
|
+
/\/\/.*\bplaceholder\b/i,
|
|
115
|
+
/\/\*.*\bplaceholder\b.*\*\//i,
|
|
116
|
+
/\/\/.*TODO:/i,
|
|
117
|
+
/\/\/.*FIXME:/i,
|
|
118
|
+
];
|
|
119
|
+
for (const pattern of commentPatterns) {
|
|
120
|
+
const matches = this.findAllMatches(lineContent, pattern);
|
|
121
|
+
for (const match of matches) {
|
|
122
|
+
findings.push({
|
|
123
|
+
type: 'comment',
|
|
124
|
+
file: filePath,
|
|
125
|
+
line: lineNum,
|
|
126
|
+
column: match.index,
|
|
127
|
+
match: match.text,
|
|
128
|
+
confidence: 'medium',
|
|
129
|
+
snippet: originalLine.trim(),
|
|
130
|
+
});
|
|
131
|
+
}
|
|
132
|
+
}
|
|
133
|
+
// Variable name patterns (medium confidence)
|
|
134
|
+
const variablePatterns = [
|
|
135
|
+
/\bplaceholder[A-Z]\w*/i,
|
|
136
|
+
/\bplaceholder\w*[:=]/i,
|
|
137
|
+
];
|
|
138
|
+
for (const pattern of variablePatterns) {
|
|
139
|
+
const matches = this.findAllMatches(lineContent, pattern);
|
|
140
|
+
for (const match of matches) {
|
|
141
|
+
findings.push({
|
|
142
|
+
type: 'variable',
|
|
143
|
+
file: filePath,
|
|
144
|
+
line: lineNum,
|
|
145
|
+
column: match.index,
|
|
146
|
+
match: match.text,
|
|
147
|
+
confidence: 'medium',
|
|
148
|
+
snippet: originalLine.trim(),
|
|
149
|
+
});
|
|
150
|
+
}
|
|
151
|
+
}
|
|
152
|
+
return findings;
|
|
153
|
+
}
|
|
154
|
+
/**
|
|
155
|
+
* Detect HTML placeholder attributes
|
|
156
|
+
*/
|
|
157
|
+
detectHtmlPlaceholderAttributes(filePath, lineNum, lineContent, originalLine) {
|
|
158
|
+
const findings = [];
|
|
159
|
+
// HTML placeholder attribute pattern
|
|
160
|
+
const htmlPlaceholderPattern = /placeholder\s*=\s*["']([^"']+)["']/gi;
|
|
161
|
+
let match;
|
|
162
|
+
while ((match = htmlPlaceholderPattern.exec(lineContent)) !== null) {
|
|
163
|
+
const placeholderValue = match[1];
|
|
164
|
+
// Only flag if the placeholder value looks like actual placeholder text
|
|
165
|
+
// (not user-facing labels like "Enter your email")
|
|
166
|
+
if (/placeholder|coming soon|todo|fixme|mock|lorem/i.test(placeholderValue)) {
|
|
167
|
+
findings.push({
|
|
168
|
+
type: 'html_attribute',
|
|
169
|
+
file: filePath,
|
|
170
|
+
line: lineNum,
|
|
171
|
+
column: match.index,
|
|
172
|
+
match: match[0],
|
|
173
|
+
confidence: 'high',
|
|
174
|
+
snippet: originalLine.trim(),
|
|
175
|
+
});
|
|
176
|
+
}
|
|
177
|
+
}
|
|
178
|
+
return findings;
|
|
179
|
+
}
|
|
180
|
+
/**
|
|
181
|
+
* Check if line is an HTML placeholder attribute
|
|
182
|
+
*/
|
|
183
|
+
isHtmlPlaceholderAttribute(lineContent) {
|
|
184
|
+
return /<input[^>]*placeholder\s*=/i.test(lineContent);
|
|
185
|
+
}
|
|
186
|
+
/**
|
|
187
|
+
* Find all matches in a string with their indices
|
|
188
|
+
*/
|
|
189
|
+
findAllMatches(text, pattern) {
|
|
190
|
+
const matches = [];
|
|
191
|
+
let match;
|
|
192
|
+
const globalPattern = new RegExp(pattern.source, pattern.flags + 'g');
|
|
193
|
+
while ((match = globalPattern.exec(text)) !== null) {
|
|
194
|
+
matches.push({
|
|
195
|
+
text: match[0],
|
|
196
|
+
index: match.index,
|
|
197
|
+
});
|
|
198
|
+
}
|
|
199
|
+
return matches;
|
|
200
|
+
}
|
|
201
|
+
/**
|
|
202
|
+
* Count placeholders by type
|
|
203
|
+
*/
|
|
204
|
+
static countByType(findings) {
|
|
205
|
+
const counts = {
|
|
206
|
+
ui_text: 0,
|
|
207
|
+
html_attribute: 0,
|
|
208
|
+
mock_response: 0,
|
|
209
|
+
comment: 0,
|
|
210
|
+
variable: 0,
|
|
211
|
+
total: findings.length,
|
|
212
|
+
};
|
|
213
|
+
for (const finding of findings) {
|
|
214
|
+
counts[finding.type] = (counts[finding.type] || 0) + 1;
|
|
215
|
+
}
|
|
216
|
+
return counts;
|
|
217
|
+
}
|
|
218
|
+
}
|
|
219
|
+
exports.PlaceholderDetector = PlaceholderDetector;
|
|
220
|
+
//# sourceMappingURL=placeholder-detector.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"placeholder-detector.js","sourceRoot":"","sources":["../../src/scanner/placeholder-detector.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,100 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Route Detector for Client-Side Routers
|
|
3
|
+
*
|
|
4
|
+
* Detects routes in various routing frameworks:
|
|
5
|
+
* - Next.js/Remix (file-based routing)
|
|
6
|
+
* - React Router (component-based)
|
|
7
|
+
* - Wouter (lightweight router)
|
|
8
|
+
* - Generic route inference mode
|
|
9
|
+
*/
|
|
10
|
+
export interface RouteInfo {
|
|
11
|
+
path: string;
|
|
12
|
+
file?: string;
|
|
13
|
+
line?: number;
|
|
14
|
+
method?: string;
|
|
15
|
+
dynamic?: boolean;
|
|
16
|
+
params?: string[];
|
|
17
|
+
source: 'file_based' | 'component' | 'config' | 'inferred';
|
|
18
|
+
}
|
|
19
|
+
export interface RouteDetectionResult {
|
|
20
|
+
routes: RouteInfo[];
|
|
21
|
+
framework: string;
|
|
22
|
+
confidence: 'high' | 'medium' | 'low';
|
|
23
|
+
message?: string;
|
|
24
|
+
hints?: string[];
|
|
25
|
+
}
|
|
26
|
+
export interface RouteDetectorConfig {
|
|
27
|
+
projectPath: string;
|
|
28
|
+
framework?: string;
|
|
29
|
+
/** Custom route hints from config */
|
|
30
|
+
routeHints?: Array<{
|
|
31
|
+
path: string;
|
|
32
|
+
file?: string;
|
|
33
|
+
description?: string;
|
|
34
|
+
}>;
|
|
35
|
+
}
|
|
36
|
+
export declare class RouteDetector {
|
|
37
|
+
private config;
|
|
38
|
+
constructor(config: RouteDetectorConfig);
|
|
39
|
+
/**
|
|
40
|
+
* Detect routes in the project
|
|
41
|
+
*/
|
|
42
|
+
detectRoutes(): Promise<RouteDetectionResult>;
|
|
43
|
+
/**
|
|
44
|
+
* Detect routes based on detected framework
|
|
45
|
+
*/
|
|
46
|
+
private detectFrameworkRoutes;
|
|
47
|
+
/**
|
|
48
|
+
* Detect Next.js file-based routes
|
|
49
|
+
*/
|
|
50
|
+
private detectNextJSRoutes;
|
|
51
|
+
/**
|
|
52
|
+
* Detect Remix routes
|
|
53
|
+
*/
|
|
54
|
+
private detectRemixRoutes;
|
|
55
|
+
/**
|
|
56
|
+
* Detect component-based routes (React Router, Wouter)
|
|
57
|
+
*/
|
|
58
|
+
private detectComponentRoutes;
|
|
59
|
+
/**
|
|
60
|
+
* Generic route inference mode
|
|
61
|
+
*/
|
|
62
|
+
private detectGenericRoutes;
|
|
63
|
+
/**
|
|
64
|
+
* Detect router framework from dependencies
|
|
65
|
+
*/
|
|
66
|
+
private detectRouterFramework;
|
|
67
|
+
/**
|
|
68
|
+
* Check if a string looks like a route path
|
|
69
|
+
*/
|
|
70
|
+
private looksLikeRoute;
|
|
71
|
+
/**
|
|
72
|
+
* Extract route parameters from path
|
|
73
|
+
*/
|
|
74
|
+
private extractRouteParams;
|
|
75
|
+
/**
|
|
76
|
+
* Parse route array from config
|
|
77
|
+
*/
|
|
78
|
+
private parseRouteArray;
|
|
79
|
+
/**
|
|
80
|
+
* Find route files in directory (for file-based routing)
|
|
81
|
+
*/
|
|
82
|
+
private findRouteFiles;
|
|
83
|
+
/**
|
|
84
|
+
* Convert file path to route path
|
|
85
|
+
*/
|
|
86
|
+
private filePathToRoute;
|
|
87
|
+
/**
|
|
88
|
+
* Find all source files in project
|
|
89
|
+
*/
|
|
90
|
+
private findSourceFiles;
|
|
91
|
+
/**
|
|
92
|
+
* Get all files recursively
|
|
93
|
+
*/
|
|
94
|
+
private getAllFiles;
|
|
95
|
+
/**
|
|
96
|
+
* Deduplicate routes
|
|
97
|
+
*/
|
|
98
|
+
private deduplicateRoutes;
|
|
99
|
+
}
|
|
100
|
+
//# sourceMappingURL=route-detector.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"route-detector.d.ts","sourceRoot":"","sources":["../../src/scanner/route-detector.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAKH,MAAM,WAAW,SAAS;IACxB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;IAClB,MAAM,EAAE,YAAY,GAAG,WAAW,GAAG,QAAQ,GAAG,UAAU,CAAC;CAC5D;AAED,MAAM,WAAW,oBAAoB;IACnC,MAAM,EAAE,SAAS,EAAE,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,GAAG,QAAQ,GAAG,KAAK,CAAC;IACtC,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC;CAClB;AAED,MAAM,WAAW,mBAAmB;IAClC,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,qCAAqC;IACrC,UAAU,CAAC,EAAE,KAAK,CAAC;QACjB,IAAI,EAAE,MAAM,CAAC;QACb,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,WAAW,CAAC,EAAE,MAAM,CAAC;KACtB,CAAC,CAAC;CACJ;AAED,qBAAa,aAAa;IACxB,OAAO,CAAC,MAAM,CAAsB;gBAExB,MAAM,EAAE,mBAAmB;IAIvC;;OAEG;IACG,YAAY,IAAI,OAAO,CAAC,oBAAoB,CAAC;IA0CnD;;OAEG;YACW,qBAAqB;IAwBnC;;OAEG;YACW,kBAAkB;IAsBhC;;OAEG;YACW,iBAAiB;IAgB/B;;OAEG;YACW,qBAAqB;IAyEnC;;OAEG;YACW,mBAAmB;IAgDjC;;OAEG;YACW,qBAAqB;IA6BnC;;OAEG;IACH,OAAO,CAAC,cAAc;IAgBtB;;OAEG;IACH,OAAO,CAAC,kBAAkB;IAU1B;;OAEG;IACH,OAAO,CAAC,eAAe;IAevB;;OAEG;YACW,cAAc;IAoB5B;;OAEG;IACH,OAAO,CAAC,eAAe;IAoBvB;;OAEG;YACW,eAAe;IAoC7B;;OAEG;YACW,WAAW;IAmBzB;;OAEG;IACH,OAAO,CAAC,iBAAiB;CAc1B"}
|