codeslick-cli 1.0.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 +458 -0
- package/__tests__/cli-reporter.test.ts +86 -0
- package/__tests__/config-loader.test.ts +247 -0
- package/__tests__/local-scanner.test.ts +245 -0
- package/bin/codeslick.cjs +153 -0
- package/dist/packages/cli/src/commands/auth.d.ts +36 -0
- package/dist/packages/cli/src/commands/auth.d.ts.map +1 -0
- package/dist/packages/cli/src/commands/auth.js +226 -0
- package/dist/packages/cli/src/commands/auth.js.map +1 -0
- package/dist/packages/cli/src/commands/config.d.ts +37 -0
- package/dist/packages/cli/src/commands/config.d.ts.map +1 -0
- package/dist/packages/cli/src/commands/config.js +196 -0
- package/dist/packages/cli/src/commands/config.js.map +1 -0
- package/dist/packages/cli/src/commands/init.d.ts +32 -0
- package/dist/packages/cli/src/commands/init.d.ts.map +1 -0
- package/dist/packages/cli/src/commands/init.js +171 -0
- package/dist/packages/cli/src/commands/init.js.map +1 -0
- package/dist/packages/cli/src/commands/scan.d.ts +40 -0
- package/dist/packages/cli/src/commands/scan.d.ts.map +1 -0
- package/dist/packages/cli/src/commands/scan.js +204 -0
- package/dist/packages/cli/src/commands/scan.js.map +1 -0
- package/dist/packages/cli/src/config/config-loader.d.ts +67 -0
- package/dist/packages/cli/src/config/config-loader.d.ts.map +1 -0
- package/dist/packages/cli/src/config/config-loader.js +146 -0
- package/dist/packages/cli/src/config/config-loader.js.map +1 -0
- package/dist/packages/cli/src/reporters/cli-reporter.d.ts +69 -0
- package/dist/packages/cli/src/reporters/cli-reporter.d.ts.map +1 -0
- package/dist/packages/cli/src/reporters/cli-reporter.js +244 -0
- package/dist/packages/cli/src/reporters/cli-reporter.js.map +1 -0
- package/dist/packages/cli/src/scanner/local-scanner.d.ts +92 -0
- package/dist/packages/cli/src/scanner/local-scanner.d.ts.map +1 -0
- package/dist/packages/cli/src/scanner/local-scanner.js +221 -0
- package/dist/packages/cli/src/scanner/local-scanner.js.map +1 -0
- package/dist/src/lib/analyzers/helpers/ai-code-detection-utils.d.ts +88 -0
- package/dist/src/lib/analyzers/helpers/ai-code-detection-utils.d.ts.map +1 -0
- package/dist/src/lib/analyzers/helpers/ai-code-detection-utils.js +371 -0
- package/dist/src/lib/analyzers/helpers/ai-code-detection-utils.js.map +1 -0
- package/dist/src/lib/analyzers/helpers/jsx-helpers.d.ts +63 -0
- package/dist/src/lib/analyzers/helpers/jsx-helpers.d.ts.map +1 -0
- package/dist/src/lib/analyzers/helpers/jsx-helpers.js +95 -0
- package/dist/src/lib/analyzers/helpers/jsx-helpers.js.map +1 -0
- package/dist/src/lib/analyzers/helpers/variable-tracker.d.ts +59 -0
- package/dist/src/lib/analyzers/helpers/variable-tracker.d.ts.map +1 -0
- package/dist/src/lib/analyzers/helpers/variable-tracker.js +231 -0
- package/dist/src/lib/analyzers/helpers/variable-tracker.js.map +1 -0
- package/dist/src/lib/analyzers/java/security-checks/access-control.d.ts +20 -0
- package/dist/src/lib/analyzers/java/security-checks/access-control.d.ts.map +1 -0
- package/dist/src/lib/analyzers/java/security-checks/access-control.js +129 -0
- package/dist/src/lib/analyzers/java/security-checks/access-control.js.map +1 -0
- package/dist/src/lib/analyzers/java/security-checks/ai-generated-code.d.ts +25 -0
- package/dist/src/lib/analyzers/java/security-checks/ai-generated-code.d.ts.map +1 -0
- package/dist/src/lib/analyzers/java/security-checks/ai-generated-code.js +221 -0
- package/dist/src/lib/analyzers/java/security-checks/ai-generated-code.js.map +1 -0
- package/dist/src/lib/analyzers/java/security-checks/code-quality.d.ts +18 -0
- package/dist/src/lib/analyzers/java/security-checks/code-quality.d.ts.map +1 -0
- package/dist/src/lib/analyzers/java/security-checks/code-quality.js +84 -0
- package/dist/src/lib/analyzers/java/security-checks/code-quality.js.map +1 -0
- package/dist/src/lib/analyzers/java/security-checks/crypto-validation.d.ts +18 -0
- package/dist/src/lib/analyzers/java/security-checks/crypto-validation.d.ts.map +1 -0
- package/dist/src/lib/analyzers/java/security-checks/crypto-validation.js +161 -0
- package/dist/src/lib/analyzers/java/security-checks/crypto-validation.js.map +1 -0
- package/dist/src/lib/analyzers/java/security-checks/deserialization-xxe.d.ts +20 -0
- package/dist/src/lib/analyzers/java/security-checks/deserialization-xxe.d.ts.map +1 -0
- package/dist/src/lib/analyzers/java/security-checks/deserialization-xxe.js +163 -0
- package/dist/src/lib/analyzers/java/security-checks/deserialization-xxe.js.map +1 -0
- package/dist/src/lib/analyzers/java/security-checks/enhanced-supply-chain.d.ts +24 -0
- package/dist/src/lib/analyzers/java/security-checks/enhanced-supply-chain.d.ts.map +1 -0
- package/dist/src/lib/analyzers/java/security-checks/enhanced-supply-chain.js +178 -0
- package/dist/src/lib/analyzers/java/security-checks/enhanced-supply-chain.js.map +1 -0
- package/dist/src/lib/analyzers/java/security-checks/exception-handling.d.ts +25 -0
- package/dist/src/lib/analyzers/java/security-checks/exception-handling.d.ts.map +1 -0
- package/dist/src/lib/analyzers/java/security-checks/exception-handling.js +179 -0
- package/dist/src/lib/analyzers/java/security-checks/exception-handling.js.map +1 -0
- package/dist/src/lib/analyzers/java/security-checks/file-operations.d.ts +17 -0
- package/dist/src/lib/analyzers/java/security-checks/file-operations.d.ts.map +1 -0
- package/dist/src/lib/analyzers/java/security-checks/file-operations.js +67 -0
- package/dist/src/lib/analyzers/java/security-checks/file-operations.js.map +1 -0
- package/dist/src/lib/analyzers/java/security-checks/framework-security.d.ts +25 -0
- package/dist/src/lib/analyzers/java/security-checks/framework-security.d.ts.map +1 -0
- package/dist/src/lib/analyzers/java/security-checks/framework-security.js +396 -0
- package/dist/src/lib/analyzers/java/security-checks/framework-security.js.map +1 -0
- package/dist/src/lib/analyzers/java/security-checks/hardcoded-credentials.d.ts +20 -0
- package/dist/src/lib/analyzers/java/security-checks/hardcoded-credentials.d.ts.map +1 -0
- package/dist/src/lib/analyzers/java/security-checks/hardcoded-credentials.js +123 -0
- package/dist/src/lib/analyzers/java/security-checks/hardcoded-credentials.js.map +1 -0
- package/dist/src/lib/analyzers/java/security-checks/injection-attacks.d.ts +23 -0
- package/dist/src/lib/analyzers/java/security-checks/injection-attacks.d.ts.map +1 -0
- package/dist/src/lib/analyzers/java/security-checks/injection-attacks.js +201 -0
- package/dist/src/lib/analyzers/java/security-checks/injection-attacks.js.map +1 -0
- package/dist/src/lib/analyzers/java/security-checks/insecure-design.d.ts +20 -0
- package/dist/src/lib/analyzers/java/security-checks/insecure-design.d.ts.map +1 -0
- package/dist/src/lib/analyzers/java/security-checks/insecure-design.js +121 -0
- package/dist/src/lib/analyzers/java/security-checks/insecure-design.js.map +1 -0
- package/dist/src/lib/analyzers/java/security-checks/logging-failures.d.ts +20 -0
- package/dist/src/lib/analyzers/java/security-checks/logging-failures.d.ts.map +1 -0
- package/dist/src/lib/analyzers/java/security-checks/logging-failures.js +89 -0
- package/dist/src/lib/analyzers/java/security-checks/logging-failures.js.map +1 -0
- package/dist/src/lib/analyzers/java/security-checks/security-misconfiguration.d.ts +26 -0
- package/dist/src/lib/analyzers/java/security-checks/security-misconfiguration.d.ts.map +1 -0
- package/dist/src/lib/analyzers/java/security-checks/security-misconfiguration.js +309 -0
- package/dist/src/lib/analyzers/java/security-checks/security-misconfiguration.js.map +1 -0
- package/dist/src/lib/analyzers/java/security-checks/unsafe-patterns.d.ts +18 -0
- package/dist/src/lib/analyzers/java/security-checks/unsafe-patterns.d.ts.map +1 -0
- package/dist/src/lib/analyzers/java/security-checks/unsafe-patterns.js +114 -0
- package/dist/src/lib/analyzers/java/security-checks/unsafe-patterns.js.map +1 -0
- package/dist/src/lib/analyzers/java/utils/createVulnerability.d.ts +58 -0
- package/dist/src/lib/analyzers/java/utils/createVulnerability.d.ts.map +1 -0
- package/dist/src/lib/analyzers/java/utils/createVulnerability.js +71 -0
- package/dist/src/lib/analyzers/java/utils/createVulnerability.js.map +1 -0
- package/dist/src/lib/analyzers/java-analyzer.d.ts +209 -0
- package/dist/src/lib/analyzers/java-analyzer.d.ts.map +1 -0
- package/dist/src/lib/analyzers/java-analyzer.js +1720 -0
- package/dist/src/lib/analyzers/java-analyzer.js.map +1 -0
- package/dist/src/lib/analyzers/javascript/quality-checks/ai-hallucinations.d.ts +27 -0
- package/dist/src/lib/analyzers/javascript/quality-checks/ai-hallucinations.d.ts.map +1 -0
- package/dist/src/lib/analyzers/javascript/quality-checks/ai-hallucinations.js +123 -0
- package/dist/src/lib/analyzers/javascript/quality-checks/ai-hallucinations.js.map +1 -0
- package/dist/src/lib/analyzers/javascript/quality-checks/async-patterns.d.ts +44 -0
- package/dist/src/lib/analyzers/javascript/quality-checks/async-patterns.d.ts.map +1 -0
- package/dist/src/lib/analyzers/javascript/quality-checks/async-patterns.js +224 -0
- package/dist/src/lib/analyzers/javascript/quality-checks/async-patterns.js.map +1 -0
- package/dist/src/lib/analyzers/javascript/quality-checks/code-patterns.d.ts +50 -0
- package/dist/src/lib/analyzers/javascript/quality-checks/code-patterns.d.ts.map +1 -0
- package/dist/src/lib/analyzers/javascript/quality-checks/code-patterns.js +284 -0
- package/dist/src/lib/analyzers/javascript/quality-checks/code-patterns.js.map +1 -0
- package/dist/src/lib/analyzers/javascript/quality-checks/comparison-issues.d.ts +27 -0
- package/dist/src/lib/analyzers/javascript/quality-checks/comparison-issues.d.ts.map +1 -0
- package/dist/src/lib/analyzers/javascript/quality-checks/comparison-issues.js +86 -0
- package/dist/src/lib/analyzers/javascript/quality-checks/comparison-issues.js.map +1 -0
- package/dist/src/lib/analyzers/javascript/quality-checks/reference-errors.d.ts +32 -0
- package/dist/src/lib/analyzers/javascript/quality-checks/reference-errors.d.ts.map +1 -0
- package/dist/src/lib/analyzers/javascript/quality-checks/reference-errors.js +44 -0
- package/dist/src/lib/analyzers/javascript/quality-checks/reference-errors.js.map +1 -0
- package/dist/src/lib/analyzers/javascript/security-checks/access-control.d.ts +22 -0
- package/dist/src/lib/analyzers/javascript/security-checks/access-control.d.ts.map +1 -0
- package/dist/src/lib/analyzers/javascript/security-checks/access-control.js +168 -0
- package/dist/src/lib/analyzers/javascript/security-checks/access-control.js.map +1 -0
- package/dist/src/lib/analyzers/javascript/security-checks/ai-generated-code.d.ts +25 -0
- package/dist/src/lib/analyzers/javascript/security-checks/ai-generated-code.d.ts.map +1 -0
- package/dist/src/lib/analyzers/javascript/security-checks/ai-generated-code.js +232 -0
- package/dist/src/lib/analyzers/javascript/security-checks/ai-generated-code.js.map +1 -0
- package/dist/src/lib/analyzers/javascript/security-checks/authentication-failures.d.ts +27 -0
- package/dist/src/lib/analyzers/javascript/security-checks/authentication-failures.d.ts.map +1 -0
- package/dist/src/lib/analyzers/javascript/security-checks/authentication-failures.js +222 -0
- package/dist/src/lib/analyzers/javascript/security-checks/authentication-failures.js.map +1 -0
- package/dist/src/lib/analyzers/javascript/security-checks/credential-crypto.d.ts +28 -0
- package/dist/src/lib/analyzers/javascript/security-checks/credential-crypto.d.ts.map +1 -0
- package/dist/src/lib/analyzers/javascript/security-checks/credential-crypto.js +176 -0
- package/dist/src/lib/analyzers/javascript/security-checks/credential-crypto.js.map +1 -0
- package/dist/src/lib/analyzers/javascript/security-checks/enhanced-supply-chain.d.ts +23 -0
- package/dist/src/lib/analyzers/javascript/security-checks/enhanced-supply-chain.d.ts.map +1 -0
- package/dist/src/lib/analyzers/javascript/security-checks/enhanced-supply-chain.js +113 -0
- package/dist/src/lib/analyzers/javascript/security-checks/enhanced-supply-chain.js.map +1 -0
- package/dist/src/lib/analyzers/javascript/security-checks/exception-handling.d.ts +28 -0
- package/dist/src/lib/analyzers/javascript/security-checks/exception-handling.d.ts.map +1 -0
- package/dist/src/lib/analyzers/javascript/security-checks/exception-handling.js +227 -0
- package/dist/src/lib/analyzers/javascript/security-checks/exception-handling.js.map +1 -0
- package/dist/src/lib/analyzers/javascript/security-checks/injection-attacks.d.ts +32 -0
- package/dist/src/lib/analyzers/javascript/security-checks/injection-attacks.d.ts.map +1 -0
- package/dist/src/lib/analyzers/javascript/security-checks/injection-attacks.js +260 -0
- package/dist/src/lib/analyzers/javascript/security-checks/injection-attacks.js.map +1 -0
- package/dist/src/lib/analyzers/javascript/security-checks/insecure-design.d.ts +26 -0
- package/dist/src/lib/analyzers/javascript/security-checks/insecure-design.d.ts.map +1 -0
- package/dist/src/lib/analyzers/javascript/security-checks/insecure-design.js +164 -0
- package/dist/src/lib/analyzers/javascript/security-checks/insecure-design.js.map +1 -0
- package/dist/src/lib/analyzers/javascript/security-checks/security-misconfiguration.d.ts +26 -0
- package/dist/src/lib/analyzers/javascript/security-checks/security-misconfiguration.d.ts.map +1 -0
- package/dist/src/lib/analyzers/javascript/security-checks/security-misconfiguration.js +775 -0
- package/dist/src/lib/analyzers/javascript/security-checks/security-misconfiguration.js.map +1 -0
- package/dist/src/lib/analyzers/javascript/security-checks/software-integrity.d.ts +25 -0
- package/dist/src/lib/analyzers/javascript/security-checks/software-integrity.d.ts.map +1 -0
- package/dist/src/lib/analyzers/javascript/security-checks/software-integrity.js +168 -0
- package/dist/src/lib/analyzers/javascript/security-checks/software-integrity.js.map +1 -0
- package/dist/src/lib/analyzers/javascript/security-checks/storage-security.d.ts +27 -0
- package/dist/src/lib/analyzers/javascript/security-checks/storage-security.d.ts.map +1 -0
- package/dist/src/lib/analyzers/javascript/security-checks/storage-security.js +108 -0
- package/dist/src/lib/analyzers/javascript/security-checks/storage-security.js.map +1 -0
- package/dist/src/lib/analyzers/javascript/security-checks/xss-dom-security.d.ts +28 -0
- package/dist/src/lib/analyzers/javascript/security-checks/xss-dom-security.d.ts.map +1 -0
- package/dist/src/lib/analyzers/javascript/security-checks/xss-dom-security.js +143 -0
- package/dist/src/lib/analyzers/javascript/security-checks/xss-dom-security.js.map +1 -0
- package/dist/src/lib/analyzers/javascript/syntax/syntax-helpers.d.ts +53 -0
- package/dist/src/lib/analyzers/javascript/syntax/syntax-helpers.d.ts.map +1 -0
- package/dist/src/lib/analyzers/javascript/syntax/syntax-helpers.js +144 -0
- package/dist/src/lib/analyzers/javascript/syntax/syntax-helpers.js.map +1 -0
- package/dist/src/lib/analyzers/javascript/syntax/typescript-syntax.d.ts +72 -0
- package/dist/src/lib/analyzers/javascript/syntax/typescript-syntax.d.ts.map +1 -0
- package/dist/src/lib/analyzers/javascript/syntax/typescript-syntax.js +314 -0
- package/dist/src/lib/analyzers/javascript/syntax/typescript-syntax.js.map +1 -0
- package/dist/src/lib/analyzers/javascript/utils/createVulnerability.d.ts +58 -0
- package/dist/src/lib/analyzers/javascript/utils/createVulnerability.d.ts.map +1 -0
- package/dist/src/lib/analyzers/javascript/utils/createVulnerability.js +71 -0
- package/dist/src/lib/analyzers/javascript/utils/createVulnerability.js.map +1 -0
- package/dist/src/lib/analyzers/javascript/utils/metrics-calculator.d.ts +36 -0
- package/dist/src/lib/analyzers/javascript/utils/metrics-calculator.d.ts.map +1 -0
- package/dist/src/lib/analyzers/javascript/utils/metrics-calculator.js +70 -0
- package/dist/src/lib/analyzers/javascript/utils/metrics-calculator.js.map +1 -0
- package/dist/src/lib/analyzers/javascript/utils/performance-analyzer.d.ts +29 -0
- package/dist/src/lib/analyzers/javascript/utils/performance-analyzer.d.ts.map +1 -0
- package/dist/src/lib/analyzers/javascript/utils/performance-analyzer.js +55 -0
- package/dist/src/lib/analyzers/javascript/utils/performance-analyzer.js.map +1 -0
- package/dist/src/lib/analyzers/javascript-analyzer.d.ts +95 -0
- package/dist/src/lib/analyzers/javascript-analyzer.d.ts.map +1 -0
- package/dist/src/lib/analyzers/javascript-analyzer.js +2141 -0
- package/dist/src/lib/analyzers/javascript-analyzer.js.map +1 -0
- package/dist/src/lib/analyzers/python/security-checks/access-control.d.ts +21 -0
- package/dist/src/lib/analyzers/python/security-checks/access-control.d.ts.map +1 -0
- package/dist/src/lib/analyzers/python/security-checks/access-control.js +305 -0
- package/dist/src/lib/analyzers/python/security-checks/access-control.js.map +1 -0
- package/dist/src/lib/analyzers/python/security-checks/ai-generated-code.d.ts +25 -0
- package/dist/src/lib/analyzers/python/security-checks/ai-generated-code.d.ts.map +1 -0
- package/dist/src/lib/analyzers/python/security-checks/ai-generated-code.js +242 -0
- package/dist/src/lib/analyzers/python/security-checks/ai-generated-code.js.map +1 -0
- package/dist/src/lib/analyzers/python/security-checks/authentication-flaws.d.ts +24 -0
- package/dist/src/lib/analyzers/python/security-checks/authentication-flaws.d.ts.map +1 -0
- package/dist/src/lib/analyzers/python/security-checks/authentication-flaws.js +207 -0
- package/dist/src/lib/analyzers/python/security-checks/authentication-flaws.js.map +1 -0
- package/dist/src/lib/analyzers/python/security-checks/code-quality.d.ts +27 -0
- package/dist/src/lib/analyzers/python/security-checks/code-quality.d.ts.map +1 -0
- package/dist/src/lib/analyzers/python/security-checks/code-quality.js +206 -0
- package/dist/src/lib/analyzers/python/security-checks/code-quality.js.map +1 -0
- package/dist/src/lib/analyzers/python/security-checks/credentials-crypto.d.ts +24 -0
- package/dist/src/lib/analyzers/python/security-checks/credentials-crypto.d.ts.map +1 -0
- package/dist/src/lib/analyzers/python/security-checks/credentials-crypto.js +113 -0
- package/dist/src/lib/analyzers/python/security-checks/credentials-crypto.js.map +1 -0
- package/dist/src/lib/analyzers/python/security-checks/crypto-failures.d.ts +20 -0
- package/dist/src/lib/analyzers/python/security-checks/crypto-failures.d.ts.map +1 -0
- package/dist/src/lib/analyzers/python/security-checks/crypto-failures.js +129 -0
- package/dist/src/lib/analyzers/python/security-checks/crypto-failures.js.map +1 -0
- package/dist/src/lib/analyzers/python/security-checks/data-integrity.d.ts +19 -0
- package/dist/src/lib/analyzers/python/security-checks/data-integrity.d.ts.map +1 -0
- package/dist/src/lib/analyzers/python/security-checks/data-integrity.js +90 -0
- package/dist/src/lib/analyzers/python/security-checks/data-integrity.js.map +1 -0
- package/dist/src/lib/analyzers/python/security-checks/deserialization.d.ts +20 -0
- package/dist/src/lib/analyzers/python/security-checks/deserialization.d.ts.map +1 -0
- package/dist/src/lib/analyzers/python/security-checks/deserialization.js +68 -0
- package/dist/src/lib/analyzers/python/security-checks/deserialization.js.map +1 -0
- package/dist/src/lib/analyzers/python/security-checks/django-security.d.ts +25 -0
- package/dist/src/lib/analyzers/python/security-checks/django-security.d.ts.map +1 -0
- package/dist/src/lib/analyzers/python/security-checks/django-security.js +180 -0
- package/dist/src/lib/analyzers/python/security-checks/django-security.js.map +1 -0
- package/dist/src/lib/analyzers/python/security-checks/enhanced-supply-chain.d.ts +23 -0
- package/dist/src/lib/analyzers/python/security-checks/enhanced-supply-chain.d.ts.map +1 -0
- package/dist/src/lib/analyzers/python/security-checks/enhanced-supply-chain.js +127 -0
- package/dist/src/lib/analyzers/python/security-checks/enhanced-supply-chain.js.map +1 -0
- package/dist/src/lib/analyzers/python/security-checks/exception-handling.d.ts +23 -0
- package/dist/src/lib/analyzers/python/security-checks/exception-handling.d.ts.map +1 -0
- package/dist/src/lib/analyzers/python/security-checks/exception-handling.js +120 -0
- package/dist/src/lib/analyzers/python/security-checks/exception-handling.js.map +1 -0
- package/dist/src/lib/analyzers/python/security-checks/flask-security.d.ts +24 -0
- package/dist/src/lib/analyzers/python/security-checks/flask-security.d.ts.map +1 -0
- package/dist/src/lib/analyzers/python/security-checks/flask-security.js +143 -0
- package/dist/src/lib/analyzers/python/security-checks/flask-security.js.map +1 -0
- package/dist/src/lib/analyzers/python/security-checks/injection-attacks.d.ts +28 -0
- package/dist/src/lib/analyzers/python/security-checks/injection-attacks.d.ts.map +1 -0
- package/dist/src/lib/analyzers/python/security-checks/injection-attacks.js +174 -0
- package/dist/src/lib/analyzers/python/security-checks/injection-attacks.js.map +1 -0
- package/dist/src/lib/analyzers/python/security-checks/insecure-design.d.ts +20 -0
- package/dist/src/lib/analyzers/python/security-checks/insecure-design.d.ts.map +1 -0
- package/dist/src/lib/analyzers/python/security-checks/insecure-design.js +160 -0
- package/dist/src/lib/analyzers/python/security-checks/insecure-design.js.map +1 -0
- package/dist/src/lib/analyzers/python/security-checks/logging-failures.d.ts +20 -0
- package/dist/src/lib/analyzers/python/security-checks/logging-failures.d.ts.map +1 -0
- package/dist/src/lib/analyzers/python/security-checks/logging-failures.js +121 -0
- package/dist/src/lib/analyzers/python/security-checks/logging-failures.js.map +1 -0
- package/dist/src/lib/analyzers/python/security-checks/nosql-injection.d.ts +26 -0
- package/dist/src/lib/analyzers/python/security-checks/nosql-injection.d.ts.map +1 -0
- package/dist/src/lib/analyzers/python/security-checks/nosql-injection.js +248 -0
- package/dist/src/lib/analyzers/python/security-checks/nosql-injection.js.map +1 -0
- package/dist/src/lib/analyzers/python/security-checks/security-misconfiguration.d.ts +26 -0
- package/dist/src/lib/analyzers/python/security-checks/security-misconfiguration.d.ts.map +1 -0
- package/dist/src/lib/analyzers/python/security-checks/security-misconfiguration.js +375 -0
- package/dist/src/lib/analyzers/python/security-checks/security-misconfiguration.js.map +1 -0
- package/dist/src/lib/analyzers/python/security-checks/ssrf-detection.d.ts +26 -0
- package/dist/src/lib/analyzers/python/security-checks/ssrf-detection.d.ts.map +1 -0
- package/dist/src/lib/analyzers/python/security-checks/ssrf-detection.js +160 -0
- package/dist/src/lib/analyzers/python/security-checks/ssrf-detection.js.map +1 -0
- package/dist/src/lib/analyzers/python/security-checks/web-security.d.ts +23 -0
- package/dist/src/lib/analyzers/python/security-checks/web-security.d.ts.map +1 -0
- package/dist/src/lib/analyzers/python/security-checks/web-security.js +117 -0
- package/dist/src/lib/analyzers/python/security-checks/web-security.js.map +1 -0
- package/dist/src/lib/analyzers/python/utils/createVulnerability.d.ts +58 -0
- package/dist/src/lib/analyzers/python/utils/createVulnerability.d.ts.map +1 -0
- package/dist/src/lib/analyzers/python/utils/createVulnerability.js +71 -0
- package/dist/src/lib/analyzers/python/utils/createVulnerability.js.map +1 -0
- package/dist/src/lib/analyzers/python-analyzer.d.ts +111 -0
- package/dist/src/lib/analyzers/python-analyzer.d.ts.map +1 -0
- package/dist/src/lib/analyzers/python-analyzer.js +1600 -0
- package/dist/src/lib/analyzers/python-analyzer.js.map +1 -0
- package/dist/src/lib/analyzers/secrets/patterns/api-keys/ai-providers.d.ts +14 -0
- package/dist/src/lib/analyzers/secrets/patterns/api-keys/ai-providers.d.ts.map +1 -0
- package/dist/src/lib/analyzers/secrets/patterns/api-keys/ai-providers.js +47 -0
- package/dist/src/lib/analyzers/secrets/patterns/api-keys/ai-providers.js.map +1 -0
- package/dist/src/lib/analyzers/secrets/patterns/api-keys/aws.d.ts +13 -0
- package/dist/src/lib/analyzers/secrets/patterns/api-keys/aws.d.ts.map +1 -0
- package/dist/src/lib/analyzers/secrets/patterns/api-keys/aws.js +36 -0
- package/dist/src/lib/analyzers/secrets/patterns/api-keys/aws.js.map +1 -0
- package/dist/src/lib/analyzers/secrets/patterns/api-keys/cloud-providers.d.ts +15 -0
- package/dist/src/lib/analyzers/secrets/patterns/api-keys/cloud-providers.d.ts.map +1 -0
- package/dist/src/lib/analyzers/secrets/patterns/api-keys/cloud-providers.js +68 -0
- package/dist/src/lib/analyzers/secrets/patterns/api-keys/cloud-providers.js.map +1 -0
- package/dist/src/lib/analyzers/secrets/patterns/api-keys/communication.d.ts +15 -0
- package/dist/src/lib/analyzers/secrets/patterns/api-keys/communication.d.ts.map +1 -0
- package/dist/src/lib/analyzers/secrets/patterns/api-keys/communication.js +68 -0
- package/dist/src/lib/analyzers/secrets/patterns/api-keys/communication.js.map +1 -0
- package/dist/src/lib/analyzers/secrets/patterns/api-keys/generic.d.ts +12 -0
- package/dist/src/lib/analyzers/secrets/patterns/api-keys/generic.d.ts.map +1 -0
- package/dist/src/lib/analyzers/secrets/patterns/api-keys/generic.js +45 -0
- package/dist/src/lib/analyzers/secrets/patterns/api-keys/generic.js.map +1 -0
- package/dist/src/lib/analyzers/secrets/patterns/api-keys/github.d.ts +14 -0
- package/dist/src/lib/analyzers/secrets/patterns/api-keys/github.d.ts.map +1 -0
- package/dist/src/lib/analyzers/secrets/patterns/api-keys/github.js +47 -0
- package/dist/src/lib/analyzers/secrets/patterns/api-keys/github.js.map +1 -0
- package/dist/src/lib/analyzers/secrets/patterns/api-keys/stripe.d.ts +13 -0
- package/dist/src/lib/analyzers/secrets/patterns/api-keys/stripe.d.ts.map +1 -0
- package/dist/src/lib/analyzers/secrets/patterns/api-keys/stripe.js +36 -0
- package/dist/src/lib/analyzers/secrets/patterns/api-keys/stripe.js.map +1 -0
- package/dist/src/lib/analyzers/secrets/patterns/api-keys.d.ts +15 -0
- package/dist/src/lib/analyzers/secrets/patterns/api-keys.d.ts.map +1 -0
- package/dist/src/lib/analyzers/secrets/patterns/api-keys.js +32 -0
- package/dist/src/lib/analyzers/secrets/patterns/api-keys.js.map +1 -0
- package/dist/src/lib/analyzers/secrets/patterns/credentials.d.ts +15 -0
- package/dist/src/lib/analyzers/secrets/patterns/credentials.d.ts.map +1 -0
- package/dist/src/lib/analyzers/secrets/patterns/credentials.js +68 -0
- package/dist/src/lib/analyzers/secrets/patterns/credentials.js.map +1 -0
- package/dist/src/lib/analyzers/secrets/patterns/private-keys.d.ts +16 -0
- package/dist/src/lib/analyzers/secrets/patterns/private-keys.d.ts.map +1 -0
- package/dist/src/lib/analyzers/secrets/patterns/private-keys.js +79 -0
- package/dist/src/lib/analyzers/secrets/patterns/private-keys.js.map +1 -0
- package/dist/src/lib/analyzers/secrets/patterns/tokens.d.ts +15 -0
- package/dist/src/lib/analyzers/secrets/patterns/tokens.d.ts.map +1 -0
- package/dist/src/lib/analyzers/secrets/patterns/tokens.js +58 -0
- package/dist/src/lib/analyzers/secrets/patterns/tokens.js.map +1 -0
- package/dist/src/lib/analyzers/secrets/secrets-analyzer.d.ts +88 -0
- package/dist/src/lib/analyzers/secrets/secrets-analyzer.d.ts.map +1 -0
- package/dist/src/lib/analyzers/secrets/secrets-analyzer.js +162 -0
- package/dist/src/lib/analyzers/secrets/secrets-analyzer.js.map +1 -0
- package/dist/src/lib/analyzers/secrets/validators/context-checker.d.ts +56 -0
- package/dist/src/lib/analyzers/secrets/validators/context-checker.d.ts.map +1 -0
- package/dist/src/lib/analyzers/secrets/validators/context-checker.js +199 -0
- package/dist/src/lib/analyzers/secrets/validators/context-checker.js.map +1 -0
- package/dist/src/lib/analyzers/secrets/validators/entropy-checker.d.ts +56 -0
- package/dist/src/lib/analyzers/secrets/validators/entropy-checker.d.ts.map +1 -0
- package/dist/src/lib/analyzers/secrets/validators/entropy-checker.js +102 -0
- package/dist/src/lib/analyzers/secrets/validators/entropy-checker.js.map +1 -0
- package/dist/src/lib/analyzers/security-checks/es6-security.d.ts +38 -0
- package/dist/src/lib/analyzers/security-checks/es6-security.d.ts.map +1 -0
- package/dist/src/lib/analyzers/security-checks/es6-security.js +125 -0
- package/dist/src/lib/analyzers/security-checks/es6-security.js.map +1 -0
- package/dist/src/lib/analyzers/security-checks/python-async-security.d.ts +46 -0
- package/dist/src/lib/analyzers/security-checks/python-async-security.d.ts.map +1 -0
- package/dist/src/lib/analyzers/security-checks/python-async-security.js +92 -0
- package/dist/src/lib/analyzers/security-checks/python-async-security.js.map +1 -0
- package/dist/src/lib/analyzers/security-checks/react-security.d.ts +49 -0
- package/dist/src/lib/analyzers/security-checks/react-security.d.ts.map +1 -0
- package/dist/src/lib/analyzers/security-checks/react-security.js +125 -0
- package/dist/src/lib/analyzers/security-checks/react-security.js.map +1 -0
- package/dist/src/lib/analyzers/types.d.ts +92 -0
- package/dist/src/lib/analyzers/types.d.ts.map +1 -0
- package/dist/src/lib/analyzers/types.js +3 -0
- package/dist/src/lib/analyzers/types.js.map +1 -0
- package/dist/src/lib/analyzers/typescript/security-checks/access-control.d.ts +19 -0
- package/dist/src/lib/analyzers/typescript/security-checks/access-control.d.ts.map +1 -0
- package/dist/src/lib/analyzers/typescript/security-checks/access-control.js +210 -0
- package/dist/src/lib/analyzers/typescript/security-checks/access-control.js.map +1 -0
- package/dist/src/lib/analyzers/typescript/security-checks/ai-generated-code.d.ts +25 -0
- package/dist/src/lib/analyzers/typescript/security-checks/ai-generated-code.d.ts.map +1 -0
- package/dist/src/lib/analyzers/typescript/security-checks/ai-generated-code.js +242 -0
- package/dist/src/lib/analyzers/typescript/security-checks/ai-generated-code.js.map +1 -0
- package/dist/src/lib/analyzers/typescript/security-checks/authentication.d.ts +28 -0
- package/dist/src/lib/analyzers/typescript/security-checks/authentication.d.ts.map +1 -0
- package/dist/src/lib/analyzers/typescript/security-checks/authentication.js +357 -0
- package/dist/src/lib/analyzers/typescript/security-checks/authentication.js.map +1 -0
- package/dist/src/lib/analyzers/typescript/security-checks/code-injection.d.ts +26 -0
- package/dist/src/lib/analyzers/typescript/security-checks/code-injection.d.ts.map +1 -0
- package/dist/src/lib/analyzers/typescript/security-checks/code-injection.js +380 -0
- package/dist/src/lib/analyzers/typescript/security-checks/code-injection.js.map +1 -0
- package/dist/src/lib/analyzers/typescript/security-checks/code-quality.d.ts +23 -0
- package/dist/src/lib/analyzers/typescript/security-checks/code-quality.d.ts.map +1 -0
- package/dist/src/lib/analyzers/typescript/security-checks/code-quality.js +109 -0
- package/dist/src/lib/analyzers/typescript/security-checks/code-quality.js.map +1 -0
- package/dist/src/lib/analyzers/typescript/security-checks/credentials-crypto.d.ts +21 -0
- package/dist/src/lib/analyzers/typescript/security-checks/credentials-crypto.d.ts.map +1 -0
- package/dist/src/lib/analyzers/typescript/security-checks/credentials-crypto.js +153 -0
- package/dist/src/lib/analyzers/typescript/security-checks/credentials-crypto.js.map +1 -0
- package/dist/src/lib/analyzers/typescript/security-checks/enhanced-supply-chain.d.ts +23 -0
- package/dist/src/lib/analyzers/typescript/security-checks/enhanced-supply-chain.d.ts.map +1 -0
- package/dist/src/lib/analyzers/typescript/security-checks/enhanced-supply-chain.js +146 -0
- package/dist/src/lib/analyzers/typescript/security-checks/enhanced-supply-chain.js.map +1 -0
- package/dist/src/lib/analyzers/typescript/security-checks/exception-handling.d.ts +23 -0
- package/dist/src/lib/analyzers/typescript/security-checks/exception-handling.d.ts.map +1 -0
- package/dist/src/lib/analyzers/typescript/security-checks/exception-handling.js +187 -0
- package/dist/src/lib/analyzers/typescript/security-checks/exception-handling.js.map +1 -0
- package/dist/src/lib/analyzers/typescript/security-checks/information-disclosure.d.ts +19 -0
- package/dist/src/lib/analyzers/typescript/security-checks/information-disclosure.d.ts.map +1 -0
- package/dist/src/lib/analyzers/typescript/security-checks/information-disclosure.js +97 -0
- package/dist/src/lib/analyzers/typescript/security-checks/information-disclosure.js.map +1 -0
- package/dist/src/lib/analyzers/typescript/security-checks/injection-attacks.d.ts +29 -0
- package/dist/src/lib/analyzers/typescript/security-checks/injection-attacks.d.ts.map +1 -0
- package/dist/src/lib/analyzers/typescript/security-checks/injection-attacks.js +319 -0
- package/dist/src/lib/analyzers/typescript/security-checks/injection-attacks.js.map +1 -0
- package/dist/src/lib/analyzers/typescript/security-checks/logging-failures.d.ts +21 -0
- package/dist/src/lib/analyzers/typescript/security-checks/logging-failures.d.ts.map +1 -0
- package/dist/src/lib/analyzers/typescript/security-checks/logging-failures.js +121 -0
- package/dist/src/lib/analyzers/typescript/security-checks/logging-failures.js.map +1 -0
- package/dist/src/lib/analyzers/typescript/security-checks/security-misconfiguration.d.ts +27 -0
- package/dist/src/lib/analyzers/typescript/security-checks/security-misconfiguration.d.ts.map +1 -0
- package/dist/src/lib/analyzers/typescript/security-checks/security-misconfiguration.js +213 -0
- package/dist/src/lib/analyzers/typescript/security-checks/security-misconfiguration.js.map +1 -0
- package/dist/src/lib/analyzers/typescript/security-checks/type-security.d.ts +19 -0
- package/dist/src/lib/analyzers/typescript/security-checks/type-security.d.ts.map +1 -0
- package/dist/src/lib/analyzers/typescript/security-checks/type-security.js +59 -0
- package/dist/src/lib/analyzers/typescript/security-checks/type-security.js.map +1 -0
- package/dist/src/lib/analyzers/typescript/type-checker.d.ts +17 -0
- package/dist/src/lib/analyzers/typescript/type-checker.d.ts.map +1 -0
- package/dist/src/lib/analyzers/typescript/type-checker.js +515 -0
- package/dist/src/lib/analyzers/typescript/type-checker.js.map +1 -0
- package/dist/src/lib/analyzers/typescript/utils/createVulnerability.d.ts +58 -0
- package/dist/src/lib/analyzers/typescript/utils/createVulnerability.d.ts.map +1 -0
- package/dist/src/lib/analyzers/typescript/utils/createVulnerability.js +71 -0
- package/dist/src/lib/analyzers/typescript/utils/createVulnerability.js.map +1 -0
- package/dist/src/lib/analyzers/typescript-analyzer.d.ts +116 -0
- package/dist/src/lib/analyzers/typescript-analyzer.d.ts.map +1 -0
- package/dist/src/lib/analyzers/typescript-analyzer.js +1660 -0
- package/dist/src/lib/analyzers/typescript-analyzer.js.map +1 -0
- package/dist/src/lib/security/compliance-mapping.d.ts +29 -0
- package/dist/src/lib/security/compliance-mapping.d.ts.map +1 -0
- package/dist/src/lib/security/compliance-mapping.js +1342 -0
- package/dist/src/lib/security/compliance-mapping.js.map +1 -0
- package/dist/src/lib/security/severity-scoring.d.ts +47 -0
- package/dist/src/lib/security/severity-scoring.d.ts.map +1 -0
- package/dist/src/lib/security/severity-scoring.js +965 -0
- package/dist/src/lib/security/severity-scoring.js.map +1 -0
- package/dist/src/lib/standards/references.d.ts +16 -0
- package/dist/src/lib/standards/references.d.ts.map +1 -0
- package/dist/src/lib/standards/references.js +1161 -0
- package/dist/src/lib/standards/references.js.map +1 -0
- package/dist/src/lib/types/index.d.ts +167 -0
- package/dist/src/lib/types/index.d.ts.map +1 -0
- package/dist/src/lib/types/index.js +3 -0
- package/dist/src/lib/types/index.js.map +1 -0
- package/dist/src/lib/utils/code-cleaner.d.ts +59 -0
- package/dist/src/lib/utils/code-cleaner.d.ts.map +1 -0
- package/dist/src/lib/utils/code-cleaner.js +283 -0
- package/dist/src/lib/utils/code-cleaner.js.map +1 -0
- package/package.json +51 -0
- package/src/commands/auth.ts +308 -0
- package/src/commands/config.ts +226 -0
- package/src/commands/init.ts +202 -0
- package/src/commands/scan.ts +238 -0
- package/src/config/config-loader.ts +175 -0
- package/src/reporters/cli-reporter.ts +282 -0
- package/src/scanner/local-scanner.ts +250 -0
- package/tsconfig.json +24 -0
- package/tsconfig.tsbuildinfo +1 -0
|
@@ -0,0 +1,284 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* JavaScript Code Pattern Detection Module
|
|
4
|
+
*
|
|
5
|
+
* Detects problematic code patterns:
|
|
6
|
+
* - Unintentional array mutations (.sort, .reverse, .splice)
|
|
7
|
+
* - Missing DOM null checks
|
|
8
|
+
* - Blocking operations in loops (JSON.parse, DOM manipulation, etc.)
|
|
9
|
+
*
|
|
10
|
+
* Part of modularized JavaScript analyzer (150-300 LOC per module)
|
|
11
|
+
* Extracted from monolithic javascript-analyzer.ts (2,672 LOC)
|
|
12
|
+
*
|
|
13
|
+
* @module code-patterns
|
|
14
|
+
*/
|
|
15
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
16
|
+
exports.detectArrayMutations = detectArrayMutations;
|
|
17
|
+
exports.detectDOMNullChecks = detectDOMNullChecks;
|
|
18
|
+
exports.detectBlockingOperations = detectBlockingOperations;
|
|
19
|
+
/**
|
|
20
|
+
* Detect unintentional array mutations
|
|
21
|
+
*
|
|
22
|
+
* @param code - Full source code
|
|
23
|
+
* @param isInsideTemplateLiteral - Function to check if line is in template literal
|
|
24
|
+
* @returns Array of detected line errors
|
|
25
|
+
*/
|
|
26
|
+
function detectArrayMutations(code, isInsideTemplateLiteral) {
|
|
27
|
+
const lines = code.split('\n');
|
|
28
|
+
const lineErrors = [];
|
|
29
|
+
let inMultiLineComment = false;
|
|
30
|
+
const mutatingMethods = [
|
|
31
|
+
{ method: '.sort(', message: '.sort() modifies the original array', suggestion: 'Use [...array].sort() or array.toSorted()' },
|
|
32
|
+
{ method: '.reverse(', message: '.reverse() modifies the original array', suggestion: 'Use [...array].reverse() or array.toReversed()' },
|
|
33
|
+
{ method: '.splice(', message: '.splice() modifies the original array', suggestion: 'Use .slice() or .toSpliced() if you do not want to mutate' },
|
|
34
|
+
{ method: '.fill(', message: '.fill() modifies the original array', suggestion: 'Create a copy first: [...array].fill()' }
|
|
35
|
+
];
|
|
36
|
+
lines.forEach((line, index) => {
|
|
37
|
+
const lineNumber = index + 1;
|
|
38
|
+
const trimmed = line.trim();
|
|
39
|
+
// Track multi-line comments
|
|
40
|
+
if (trimmed.includes('/*'))
|
|
41
|
+
inMultiLineComment = true;
|
|
42
|
+
if (trimmed.includes('*/')) {
|
|
43
|
+
inMultiLineComment = false;
|
|
44
|
+
return;
|
|
45
|
+
}
|
|
46
|
+
// Skip comments
|
|
47
|
+
if (!trimmed || inMultiLineComment || trimmed.startsWith('//') || trimmed.startsWith('*')) {
|
|
48
|
+
return;
|
|
49
|
+
}
|
|
50
|
+
// Skip lines inside template literals
|
|
51
|
+
if (isInsideTemplateLiteral(code, lineNumber)) {
|
|
52
|
+
return;
|
|
53
|
+
}
|
|
54
|
+
mutatingMethods.forEach(({ method, message, suggestion }) => {
|
|
55
|
+
if (line.includes(method)) {
|
|
56
|
+
// Check if result is being used (assigned or chained)
|
|
57
|
+
const beforeMethod = line.substring(0, line.indexOf(method));
|
|
58
|
+
const afterMethod = line.substring(line.indexOf(method) + method.length);
|
|
59
|
+
// If method is not assigned and not chained with dot, likely unintentional mutation
|
|
60
|
+
const isAssigned = beforeMethod.includes('=') || beforeMethod.includes('const ') ||
|
|
61
|
+
beforeMethod.includes('let ') || beforeMethod.includes('var ');
|
|
62
|
+
const isChained = afterMethod.trim().startsWith('.');
|
|
63
|
+
if (!isAssigned && !isChained) {
|
|
64
|
+
lineErrors.push({
|
|
65
|
+
line: lineNumber,
|
|
66
|
+
error: `Unintentional mutation: ${message}`,
|
|
67
|
+
suggestion,
|
|
68
|
+
severity: 'warning'
|
|
69
|
+
});
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
});
|
|
73
|
+
});
|
|
74
|
+
return lineErrors;
|
|
75
|
+
}
|
|
76
|
+
/**
|
|
77
|
+
* Detect DOM queries without null checks
|
|
78
|
+
*
|
|
79
|
+
* @param code - Full source code
|
|
80
|
+
* @param isInsideTemplateLiteral - Function to check if line is in template literal
|
|
81
|
+
* @returns Array of detected line errors
|
|
82
|
+
*/
|
|
83
|
+
function detectDOMNullChecks(code, isInsideTemplateLiteral) {
|
|
84
|
+
const lines = code.split('\n');
|
|
85
|
+
const lineErrors = [];
|
|
86
|
+
let inMultiLineComment = false;
|
|
87
|
+
const domMethods = [
|
|
88
|
+
'getElementById(',
|
|
89
|
+
'querySelector(',
|
|
90
|
+
'getElementsByClassName(',
|
|
91
|
+
'getElementsByTagName(',
|
|
92
|
+
'getElementsByName('
|
|
93
|
+
];
|
|
94
|
+
lines.forEach((line, index) => {
|
|
95
|
+
const lineNumber = index + 1;
|
|
96
|
+
const trimmed = line.trim();
|
|
97
|
+
// Track multi-line comments
|
|
98
|
+
if (trimmed.includes('/*'))
|
|
99
|
+
inMultiLineComment = true;
|
|
100
|
+
if (trimmed.includes('*/')) {
|
|
101
|
+
inMultiLineComment = false;
|
|
102
|
+
return;
|
|
103
|
+
}
|
|
104
|
+
// Skip comments
|
|
105
|
+
if (!trimmed || inMultiLineComment || trimmed.startsWith('//') || trimmed.startsWith('*')) {
|
|
106
|
+
return;
|
|
107
|
+
}
|
|
108
|
+
// Skip lines inside template literals
|
|
109
|
+
if (isInsideTemplateLiteral(code, lineNumber)) {
|
|
110
|
+
return;
|
|
111
|
+
}
|
|
112
|
+
domMethods.forEach(method => {
|
|
113
|
+
if (line.includes(method)) {
|
|
114
|
+
// Check if there's a null check in the next few lines
|
|
115
|
+
const nextLines = lines.slice(index, Math.min(index + 3, lines.length));
|
|
116
|
+
const hasNullCheck = nextLines.some(l => l.includes('if (') && (l.includes('!== null') || l.includes('!= null') || l.includes('&&') || l.includes('?.')));
|
|
117
|
+
if (!hasNullCheck) {
|
|
118
|
+
lineErrors.push({
|
|
119
|
+
line: lineNumber,
|
|
120
|
+
error: `DOM query without null check: ${method}`,
|
|
121
|
+
suggestion: 'Add check: if (element !== null) { ... } or use optional chaining (?.))',
|
|
122
|
+
severity: 'warning'
|
|
123
|
+
});
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
});
|
|
127
|
+
});
|
|
128
|
+
return lineErrors;
|
|
129
|
+
}
|
|
130
|
+
/**
|
|
131
|
+
* Detect blocking operations that can impact performance
|
|
132
|
+
* - JSON.parse/stringify in loops
|
|
133
|
+
* - Complex regex in loops
|
|
134
|
+
* - DOM manipulation in loops
|
|
135
|
+
* - String concatenation with += in loops
|
|
136
|
+
* - Synchronous file operations in loops
|
|
137
|
+
* - Storage access in loops
|
|
138
|
+
* - Nested loops
|
|
139
|
+
*
|
|
140
|
+
* @param code - Full source code
|
|
141
|
+
* @param isInsideTemplateLiteral - Function to check if line is in template literal
|
|
142
|
+
* @returns Array of detected line errors
|
|
143
|
+
*/
|
|
144
|
+
function detectBlockingOperations(code, isInsideTemplateLiteral) {
|
|
145
|
+
const lines = code.split('\n');
|
|
146
|
+
const lineErrors = [];
|
|
147
|
+
let inMultiLineComment = false;
|
|
148
|
+
let loopNesting = 0;
|
|
149
|
+
let loopStartLines = [];
|
|
150
|
+
let braceDepth = 0;
|
|
151
|
+
const loopBraceDepths = [];
|
|
152
|
+
lines.forEach((line, index) => {
|
|
153
|
+
const trimmed = line.trim();
|
|
154
|
+
const lineNumber = index + 1;
|
|
155
|
+
// Track multi-line comments
|
|
156
|
+
if (trimmed.includes('/*'))
|
|
157
|
+
inMultiLineComment = true;
|
|
158
|
+
if (trimmed.includes('*/')) {
|
|
159
|
+
inMultiLineComment = false;
|
|
160
|
+
return;
|
|
161
|
+
}
|
|
162
|
+
// Skip comments
|
|
163
|
+
if (!trimmed || inMultiLineComment || trimmed.startsWith('//') || trimmed.startsWith('*')) {
|
|
164
|
+
return;
|
|
165
|
+
}
|
|
166
|
+
// Skip lines inside template literals
|
|
167
|
+
if (isInsideTemplateLiteral(code, lineNumber)) {
|
|
168
|
+
return;
|
|
169
|
+
}
|
|
170
|
+
// Track brace depth for all code
|
|
171
|
+
const openBraces = (line.match(/\{/g) || []).length;
|
|
172
|
+
const closeBraces = (line.match(/\}/g) || []).length;
|
|
173
|
+
braceDepth += openBraces - closeBraces;
|
|
174
|
+
// Detect loop start
|
|
175
|
+
const isForLoop = /\b(for|while)\s*\(/.test(trimmed);
|
|
176
|
+
const isArrayMethod = /\.(forEach|map|filter|reduce|some|every|find)\s*\(/.test(trimmed);
|
|
177
|
+
if (isForLoop || isArrayMethod) {
|
|
178
|
+
loopNesting++;
|
|
179
|
+
loopStartLines.push(lineNumber);
|
|
180
|
+
loopBraceDepths.push(braceDepth);
|
|
181
|
+
}
|
|
182
|
+
// Check for blocking operations inside loops
|
|
183
|
+
if (loopNesting > 0) {
|
|
184
|
+
// 1. JSON.parse() in loops
|
|
185
|
+
if (trimmed.includes('JSON.parse(') && !trimmed.includes('//')) {
|
|
186
|
+
lineErrors.push({
|
|
187
|
+
line: lineNumber,
|
|
188
|
+
error: 'Blocking operation: JSON.parse() inside loop',
|
|
189
|
+
suggestion: 'Move JSON.parse() outside the loop or process the data before iteration',
|
|
190
|
+
severity: 'warning'
|
|
191
|
+
});
|
|
192
|
+
}
|
|
193
|
+
// 2. JSON.stringify() in loops
|
|
194
|
+
if (trimmed.includes('JSON.stringify(') && !trimmed.includes('//')) {
|
|
195
|
+
lineErrors.push({
|
|
196
|
+
line: lineNumber,
|
|
197
|
+
error: 'Blocking operation: JSON.stringify() inside loop',
|
|
198
|
+
suggestion: 'Move JSON.stringify() outside the loop to avoid repeated serialization',
|
|
199
|
+
severity: 'warning'
|
|
200
|
+
});
|
|
201
|
+
}
|
|
202
|
+
// 3. Complex regex operations in loops
|
|
203
|
+
const withoutComments = trimmed.split('//')[0];
|
|
204
|
+
const hasNewRegExp = /new\s+RegExp\(/.test(withoutComments);
|
|
205
|
+
const testIndex = withoutComments.indexOf('.test(');
|
|
206
|
+
let hasInlineRegexLiteral = false;
|
|
207
|
+
if (testIndex > 0) {
|
|
208
|
+
const charBeforeTest = withoutComments.charAt(testIndex - 1);
|
|
209
|
+
hasInlineRegexLiteral = charBeforeTest === '/' || /[gimuy]/.test(charBeforeTest);
|
|
210
|
+
}
|
|
211
|
+
if (hasInlineRegexLiteral || hasNewRegExp) {
|
|
212
|
+
lineErrors.push({
|
|
213
|
+
line: lineNumber,
|
|
214
|
+
error: 'Blocking operation: Complex regex inside loop',
|
|
215
|
+
suggestion: 'Define the regex outside the loop: const regex = /pattern/; before the loop',
|
|
216
|
+
severity: 'warning'
|
|
217
|
+
});
|
|
218
|
+
}
|
|
219
|
+
// 4. DOM manipulation in loops
|
|
220
|
+
const domMethods = [
|
|
221
|
+
'getElementById', 'getElementsByClassName', 'getElementsByTagName',
|
|
222
|
+
'querySelector', 'querySelectorAll', 'createElement',
|
|
223
|
+
'appendChild', 'removeChild', 'insertBefore'
|
|
224
|
+
];
|
|
225
|
+
const hasDOMManipulation = domMethods.some(method => trimmed.includes(method + '(') || trimmed.includes('.' + method + '('));
|
|
226
|
+
if (hasDOMManipulation && !trimmed.includes('//')) {
|
|
227
|
+
lineErrors.push({
|
|
228
|
+
line: lineNumber,
|
|
229
|
+
error: 'Blocking operation: DOM manipulation inside loop',
|
|
230
|
+
suggestion: 'Accumulate changes and manipulate DOM once after the loop (Document Fragment)',
|
|
231
|
+
severity: 'warning'
|
|
232
|
+
});
|
|
233
|
+
}
|
|
234
|
+
// 5. Large string concatenation in loops
|
|
235
|
+
if (/\+=\s*['"`]/.test(trimmed) && !trimmed.includes('//')) {
|
|
236
|
+
lineErrors.push({
|
|
237
|
+
line: lineNumber,
|
|
238
|
+
error: 'Blocking operation: String concatenation with += inside loop',
|
|
239
|
+
suggestion: 'Use array.push() inside the loop and array.join() at the end',
|
|
240
|
+
severity: 'warning'
|
|
241
|
+
});
|
|
242
|
+
}
|
|
243
|
+
// 6. Synchronous file operations (Node.js)
|
|
244
|
+
if (/fs\.(readFileSync|writeFileSync|existsSync)/.test(trimmed) && !trimmed.includes('//')) {
|
|
245
|
+
lineErrors.push({
|
|
246
|
+
line: lineNumber,
|
|
247
|
+
error: 'Blocking operation: Synchronous file operation inside loop',
|
|
248
|
+
suggestion: 'Use async versions (readFile, writeFile) or move outside the loop',
|
|
249
|
+
severity: 'warning'
|
|
250
|
+
});
|
|
251
|
+
}
|
|
252
|
+
// 7. localStorage/sessionStorage access in loops
|
|
253
|
+
if (/(localStorage|sessionStorage)\.(getItem|setItem|removeItem)/.test(trimmed) && !trimmed.includes('//')) {
|
|
254
|
+
lineErrors.push({
|
|
255
|
+
line: lineNumber,
|
|
256
|
+
error: 'Blocking operation: Storage access inside loop',
|
|
257
|
+
suggestion: 'Accumulate the data and perform a single storage operation after the loop',
|
|
258
|
+
severity: 'warning'
|
|
259
|
+
});
|
|
260
|
+
}
|
|
261
|
+
// 8. Nested loops (performance warning)
|
|
262
|
+
if (loopNesting > 2) {
|
|
263
|
+
if (isForLoop || isArrayMethod) {
|
|
264
|
+
lineErrors.push({
|
|
265
|
+
line: lineNumber,
|
|
266
|
+
error: `Performance: ${loopNesting} levels of nested loops`,
|
|
267
|
+
suggestion: 'Consider refactoring with optimized data structures (Map, Set) or more efficient algorithms',
|
|
268
|
+
severity: 'warning'
|
|
269
|
+
});
|
|
270
|
+
}
|
|
271
|
+
}
|
|
272
|
+
}
|
|
273
|
+
// Detect loop end by tracking brace depth
|
|
274
|
+
if (loopNesting > 0 && loopBraceDepths.length > 0) {
|
|
275
|
+
if (braceDepth < loopBraceDepths[loopBraceDepths.length - 1]) {
|
|
276
|
+
loopNesting--;
|
|
277
|
+
loopStartLines.pop();
|
|
278
|
+
loopBraceDepths.pop();
|
|
279
|
+
}
|
|
280
|
+
}
|
|
281
|
+
});
|
|
282
|
+
return lineErrors;
|
|
283
|
+
}
|
|
284
|
+
//# sourceMappingURL=code-patterns.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"code-patterns.js","sourceRoot":"","sources":["../../../../../../../../src/lib/analyzers/javascript/quality-checks/code-patterns.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* JavaScript Comparison Issues Detection Module
|
|
3
|
+
*
|
|
4
|
+
* Detects problematic comparison operators:
|
|
5
|
+
* - Loose equality (== instead of ===)
|
|
6
|
+
* - Loose inequality (!= instead of !==)
|
|
7
|
+
* - Assignment in conditions (= instead of === or ==)
|
|
8
|
+
*
|
|
9
|
+
* Part of modularized JavaScript analyzer (150-300 LOC per module)
|
|
10
|
+
* Extracted from monolithic javascript-analyzer.ts (2,672 LOC)
|
|
11
|
+
*
|
|
12
|
+
* @module comparison-issues
|
|
13
|
+
*/
|
|
14
|
+
import { LineError } from '../../types';
|
|
15
|
+
/**
|
|
16
|
+
* Helper function type for checking if a line is inside a template literal
|
|
17
|
+
*/
|
|
18
|
+
export type IsInsideTemplateLiteralFn = (code: string, lineNumber: number) => boolean;
|
|
19
|
+
/**
|
|
20
|
+
* Detect comparison issues (== vs ===, != vs !==, assignment in conditions)
|
|
21
|
+
*
|
|
22
|
+
* @param code - Full source code
|
|
23
|
+
* @param isInsideTemplateLiteral - Function to check if line is in template literal
|
|
24
|
+
* @returns Array of detected line errors
|
|
25
|
+
*/
|
|
26
|
+
export declare function detectComparisonIssues(code: string, isInsideTemplateLiteral: IsInsideTemplateLiteralFn): LineError[];
|
|
27
|
+
//# sourceMappingURL=comparison-issues.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"comparison-issues.d.ts","sourceRoot":"","sources":["../../../../../../../../src/lib/analyzers/javascript/quality-checks/comparison-issues.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAExC;;GAEG;AACH,MAAM,MAAM,yBAAyB,GAAG,CAAC,IAAI,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,KAAK,OAAO,CAAC;AAEtF;;;;;;GAMG;AACH,wBAAgB,sBAAsB,CACpC,IAAI,EAAE,MAAM,EACZ,uBAAuB,EAAE,yBAAyB,GACjD,SAAS,EAAE,CAkEb"}
|
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* JavaScript Comparison Issues Detection Module
|
|
4
|
+
*
|
|
5
|
+
* Detects problematic comparison operators:
|
|
6
|
+
* - Loose equality (== instead of ===)
|
|
7
|
+
* - Loose inequality (!= instead of !==)
|
|
8
|
+
* - Assignment in conditions (= instead of === or ==)
|
|
9
|
+
*
|
|
10
|
+
* Part of modularized JavaScript analyzer (150-300 LOC per module)
|
|
11
|
+
* Extracted from monolithic javascript-analyzer.ts (2,672 LOC)
|
|
12
|
+
*
|
|
13
|
+
* @module comparison-issues
|
|
14
|
+
*/
|
|
15
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
16
|
+
exports.detectComparisonIssues = detectComparisonIssues;
|
|
17
|
+
/**
|
|
18
|
+
* Detect comparison issues (== vs ===, != vs !==, assignment in conditions)
|
|
19
|
+
*
|
|
20
|
+
* @param code - Full source code
|
|
21
|
+
* @param isInsideTemplateLiteral - Function to check if line is in template literal
|
|
22
|
+
* @returns Array of detected line errors
|
|
23
|
+
*/
|
|
24
|
+
function detectComparisonIssues(code, isInsideTemplateLiteral) {
|
|
25
|
+
const lines = code.split('\n');
|
|
26
|
+
const lineErrors = [];
|
|
27
|
+
let inMultiLineComment = false;
|
|
28
|
+
lines.forEach((line, index) => {
|
|
29
|
+
const lineNumber = index + 1;
|
|
30
|
+
const trimmed = line.trim();
|
|
31
|
+
// Track multi-line comments
|
|
32
|
+
if (trimmed.includes('/*'))
|
|
33
|
+
inMultiLineComment = true;
|
|
34
|
+
if (trimmed.includes('*/')) {
|
|
35
|
+
inMultiLineComment = false;
|
|
36
|
+
return;
|
|
37
|
+
}
|
|
38
|
+
// Skip comments
|
|
39
|
+
if (!trimmed || inMultiLineComment || trimmed.startsWith('//') || trimmed.startsWith('*')) {
|
|
40
|
+
return;
|
|
41
|
+
}
|
|
42
|
+
// Skip lines inside template literals (they contain arbitrary text, not JavaScript)
|
|
43
|
+
if (isInsideTemplateLiteral(code, lineNumber)) {
|
|
44
|
+
return;
|
|
45
|
+
}
|
|
46
|
+
// Detect == (but not ===)
|
|
47
|
+
const looseEqualityMatch = line.match(/[^=!<>]==(=?)[^=]/);
|
|
48
|
+
if (looseEqualityMatch && !looseEqualityMatch[1]) { // Not ===
|
|
49
|
+
lineErrors.push({
|
|
50
|
+
line: lineNumber,
|
|
51
|
+
error: 'Non-strict comparison (==) detected',
|
|
52
|
+
suggestion: 'Use === for strict comparison (avoids type coercion)',
|
|
53
|
+
severity: 'warning'
|
|
54
|
+
});
|
|
55
|
+
}
|
|
56
|
+
// Detect != (but not !==)
|
|
57
|
+
const looseInequalityMatch = line.match(/!=(=?)[^=]/);
|
|
58
|
+
if (looseInequalityMatch && !looseInequalityMatch[1]) { // Not !==
|
|
59
|
+
lineErrors.push({
|
|
60
|
+
line: lineNumber,
|
|
61
|
+
error: 'Non-strict comparison (!=) detected',
|
|
62
|
+
suggestion: 'Use !== for strict comparison (avoids type coercion)',
|
|
63
|
+
severity: 'warning'
|
|
64
|
+
});
|
|
65
|
+
}
|
|
66
|
+
// Detect assignment in condition (= instead of == or ===)
|
|
67
|
+
// Pattern: if (variable = value) or while (variable = value)
|
|
68
|
+
// This is a critical bug where = (assignment) is used instead of === (comparison)
|
|
69
|
+
const assignmentInCondition = line.match(/\b(if|while|for)\s*\([^)]*[^=!<>]=[^=][^)]*\)/);
|
|
70
|
+
if (assignmentInCondition) {
|
|
71
|
+
// Verify it's not part of an arrow function or initialization (for loops)
|
|
72
|
+
const isForLoopInit = assignmentInCondition[1] === 'for' && (line.includes('let ') || line.includes('var ') || line.includes('const '));
|
|
73
|
+
const isArrowFunction = line.includes('=>');
|
|
74
|
+
if (!isForLoopInit && !isArrowFunction) {
|
|
75
|
+
lineErrors.push({
|
|
76
|
+
line: lineNumber,
|
|
77
|
+
error: 'Assignment in condition - did you mean === or == ?',
|
|
78
|
+
suggestion: 'Use === for comparison. If assignment is intentional, wrap in parentheses: if ((x = getValue()))',
|
|
79
|
+
severity: 'error'
|
|
80
|
+
});
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
});
|
|
84
|
+
return lineErrors;
|
|
85
|
+
}
|
|
86
|
+
//# sourceMappingURL=comparison-issues.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"comparison-issues.js","sourceRoot":"","sources":["../../../../../../../../src/lib/analyzers/javascript/quality-checks/comparison-issues.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;GAYG;;AAgBH,wDAqEC;AA5ED;;;;;;GAMG;AACH,SAAgB,sBAAsB,CACpC,IAAY,EACZ,uBAAkD;IAElD,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IAC/B,MAAM,UAAU,GAAgB,EAAE,CAAC;IACnC,IAAI,kBAAkB,GAAG,KAAK,CAAC;IAE/B,KAAK,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE;QAC5B,MAAM,UAAU,GAAG,KAAK,GAAG,CAAC,CAAC;QAC7B,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;QAE5B,4BAA4B;QAC5B,IAAI,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC;YAAE,kBAAkB,GAAG,IAAI,CAAC;QACtD,IAAI,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;YAAC,kBAAkB,GAAG,KAAK,CAAC;YAAC,OAAO;QAAC,CAAC;QAEnE,gBAAgB;QAChB,IAAI,CAAC,OAAO,IAAI,kBAAkB,IAAI,OAAO,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,OAAO,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;YAC1F,OAAO;QACT,CAAC;QAED,oFAAoF;QACpF,IAAI,uBAAuB,CAAC,IAAI,EAAE,UAAU,CAAC,EAAE,CAAC;YAC9C,OAAO;QACT,CAAC;QAED,0BAA0B;QAC1B,MAAM,kBAAkB,GAAG,IAAI,CAAC,KAAK,CAAC,mBAAmB,CAAC,CAAC;QAC3D,IAAI,kBAAkB,IAAI,CAAC,kBAAkB,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,UAAU;YAC5D,UAAU,CAAC,IAAI,CAAC;gBACd,IAAI,EAAE,UAAU;gBAChB,KAAK,EAAE,qCAAqC;gBAC5C,UAAU,EAAE,sDAAsD;gBAClE,QAAQ,EAAE,SAAS;aACpB,CAAC,CAAC;QACL,CAAC;QAED,0BAA0B;QAC1B,MAAM,oBAAoB,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC;QACtD,IAAI,oBAAoB,IAAI,CAAC,oBAAoB,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,UAAU;YAChE,UAAU,CAAC,IAAI,CAAC;gBACd,IAAI,EAAE,UAAU;gBAChB,KAAK,EAAE,qCAAqC;gBAC5C,UAAU,EAAE,sDAAsD;gBAClE,QAAQ,EAAE,SAAS;aACpB,CAAC,CAAC;QACL,CAAC;QAED,0DAA0D;QAC1D,6DAA6D;QAC7D,kFAAkF;QAClF,MAAM,qBAAqB,GAAG,IAAI,CAAC,KAAK,CAAC,+CAA+C,CAAC,CAAC;QAC1F,IAAI,qBAAqB,EAAE,CAAC;YAC1B,0EAA0E;YAC1E,MAAM,aAAa,GAAG,qBAAqB,CAAC,CAAC,CAAC,KAAK,KAAK,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC;YACxI,MAAM,eAAe,GAAG,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;YAE5C,IAAI,CAAC,aAAa,IAAI,CAAC,eAAe,EAAE,CAAC;gBACvC,UAAU,CAAC,IAAI,CAAC;oBACd,IAAI,EAAE,UAAU;oBAChB,KAAK,EAAE,oDAAoD;oBAC3D,UAAU,EAAE,kGAAkG;oBAC9G,QAAQ,EAAE,OAAO;iBAClB,CAAC,CAAC;YACL,CAAC;QACH,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,OAAO,UAAU,CAAC;AACpB,CAAC"}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* JavaScript Reference Error Detection Module
|
|
3
|
+
*
|
|
4
|
+
* Detects undeclared variable usage (ReferenceError at runtime):
|
|
5
|
+
* - Variables used before declaration
|
|
6
|
+
* - Typos in variable names
|
|
7
|
+
* - Missing imports
|
|
8
|
+
*
|
|
9
|
+
* Part of modularized JavaScript analyzer (150-300 LOC per module)
|
|
10
|
+
* Extracted from monolithic javascript-analyzer.ts (2,672 LOC)
|
|
11
|
+
*
|
|
12
|
+
* @module reference-errors
|
|
13
|
+
*/
|
|
14
|
+
import { LineError } from '../../types';
|
|
15
|
+
/**
|
|
16
|
+
* Helper function type for checking if a line is inside a template literal
|
|
17
|
+
*/
|
|
18
|
+
export type IsInsideTemplateLiteralFn = (code: string, lineNumber: number) => boolean;
|
|
19
|
+
/**
|
|
20
|
+
* Helper function type for removing string literals from a line
|
|
21
|
+
*/
|
|
22
|
+
export type RemoveStringLiteralsFn = (line: string) => string;
|
|
23
|
+
/**
|
|
24
|
+
* Detect reference errors (undeclared variables)
|
|
25
|
+
*
|
|
26
|
+
* @param code - Full source code
|
|
27
|
+
* @param removeStringLiterals - Function to remove string literals from lines
|
|
28
|
+
* @param isInsideTemplateLiteral - Function to check if line is in template literal
|
|
29
|
+
* @returns Array of detected line errors
|
|
30
|
+
*/
|
|
31
|
+
export declare function detectReferenceErrors(code: string, removeStringLiterals: RemoveStringLiteralsFn, isInsideTemplateLiteral: IsInsideTemplateLiteralFn): LineError[];
|
|
32
|
+
//# sourceMappingURL=reference-errors.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"reference-errors.d.ts","sourceRoot":"","sources":["../../../../../../../../src/lib/analyzers/javascript/quality-checks/reference-errors.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAIxC;;GAEG;AACH,MAAM,MAAM,yBAAyB,GAAG,CAAC,IAAI,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,KAAK,OAAO,CAAC;AAEtF;;GAEG;AACH,MAAM,MAAM,sBAAsB,GAAG,CAAC,IAAI,EAAE,MAAM,KAAK,MAAM,CAAC;AAE9D;;;;;;;GAOG;AACH,wBAAgB,qBAAqB,CACnC,IAAI,EAAE,MAAM,EACZ,oBAAoB,EAAE,sBAAsB,EAC5C,uBAAuB,EAAE,yBAAyB,GACjD,SAAS,EAAE,CA6Bb"}
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* JavaScript Reference Error Detection Module
|
|
4
|
+
*
|
|
5
|
+
* Detects undeclared variable usage (ReferenceError at runtime):
|
|
6
|
+
* - Variables used before declaration
|
|
7
|
+
* - Typos in variable names
|
|
8
|
+
* - Missing imports
|
|
9
|
+
*
|
|
10
|
+
* Part of modularized JavaScript analyzer (150-300 LOC per module)
|
|
11
|
+
* Extracted from monolithic javascript-analyzer.ts (2,672 LOC)
|
|
12
|
+
*
|
|
13
|
+
* @module reference-errors
|
|
14
|
+
*/
|
|
15
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
16
|
+
exports.detectReferenceErrors = detectReferenceErrors;
|
|
17
|
+
const variable_tracker_1 = require("../../helpers/variable-tracker");
|
|
18
|
+
const jsx_helpers_1 = require("../../helpers/jsx-helpers");
|
|
19
|
+
/**
|
|
20
|
+
* Detect reference errors (undeclared variables)
|
|
21
|
+
*
|
|
22
|
+
* @param code - Full source code
|
|
23
|
+
* @param removeStringLiterals - Function to remove string literals from lines
|
|
24
|
+
* @param isInsideTemplateLiteral - Function to check if line is in template literal
|
|
25
|
+
* @returns Array of detected line errors
|
|
26
|
+
*/
|
|
27
|
+
function detectReferenceErrors(code, removeStringLiterals, isInsideTemplateLiteral) {
|
|
28
|
+
const lines = code.split('\n');
|
|
29
|
+
const lineErrors = [];
|
|
30
|
+
// Get built-in globals and skip patterns
|
|
31
|
+
const builtIns = (0, variable_tracker_1.getBuiltIns)();
|
|
32
|
+
const skipPatterns = (0, variable_tracker_1.getSkipPatterns)();
|
|
33
|
+
// Find all variable declarations
|
|
34
|
+
const declaredVars = (0, variable_tracker_1.findDeclarations)(lines, code, isInsideTemplateLiteral);
|
|
35
|
+
// Find all variable usages
|
|
36
|
+
const usages = (0, variable_tracker_1.findUsages)(lines, code, builtIns, skipPatterns, removeStringLiterals, isInsideTemplateLiteral);
|
|
37
|
+
// Detect JSX in code to filter out JSX element false positives
|
|
38
|
+
const hasJSX = (0, jsx_helpers_1.detectJSX)(code);
|
|
39
|
+
// Check for undeclared variables and add to line errors
|
|
40
|
+
const undeclaredErrors = (0, variable_tracker_1.checkUndeclaredVariables)(usages, declaredVars, lines, hasJSX);
|
|
41
|
+
lineErrors.push(...undeclaredErrors);
|
|
42
|
+
return lineErrors;
|
|
43
|
+
}
|
|
44
|
+
//# sourceMappingURL=reference-errors.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"reference-errors.js","sourceRoot":"","sources":["../../../../../../../../src/lib/analyzers/javascript/quality-checks/reference-errors.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;GAYG;;AAwBH,sDAiCC;AAtDD,qEAAsI;AACtI,2DAAsD;AAYtD;;;;;;;GAOG;AACH,SAAgB,qBAAqB,CACnC,IAAY,EACZ,oBAA4C,EAC5C,uBAAkD;IAElD,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IAC/B,MAAM,UAAU,GAAgB,EAAE,CAAC;IAEnC,yCAAyC;IACzC,MAAM,QAAQ,GAAG,IAAA,8BAAW,GAAE,CAAC;IAC/B,MAAM,YAAY,GAAG,IAAA,kCAAe,GAAE,CAAC;IAEvC,iCAAiC;IACjC,MAAM,YAAY,GAAG,IAAA,mCAAgB,EAAC,KAAK,EAAE,IAAI,EAAE,uBAAuB,CAAC,CAAC;IAE5E,2BAA2B;IAC3B,MAAM,MAAM,GAAG,IAAA,6BAAU,EACvB,KAAK,EACL,IAAI,EACJ,QAAQ,EACR,YAAY,EACZ,oBAAoB,EACpB,uBAAuB,CACxB,CAAC;IAEF,+DAA+D;IAC/D,MAAM,MAAM,GAAG,IAAA,uBAAS,EAAC,IAAI,CAAC,CAAC;IAE/B,wDAAwD;IACxD,MAAM,gBAAgB,GAAG,IAAA,2CAAwB,EAAC,MAAM,EAAE,YAAY,EAAE,KAAK,EAAE,MAAM,CAAC,CAAC;IACvF,UAAU,CAAC,IAAI,CAAC,GAAG,gBAAgB,CAAC,CAAC;IAErC,OAAO,UAAU,CAAC;AACpB,CAAC"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* JavaScript Access Control Security Checks
|
|
3
|
+
* OWASP A01:2025 - Broken Access Control
|
|
4
|
+
*
|
|
5
|
+
* Detects missing authentication and client-side authorization vulnerabilities.
|
|
6
|
+
* Phase 7B Week 3 Day 11: Cross-language access control checks
|
|
7
|
+
*/
|
|
8
|
+
import { SecurityVulnerability } from '../../types';
|
|
9
|
+
/**
|
|
10
|
+
* Checks for broken access control vulnerabilities in JavaScript code
|
|
11
|
+
*
|
|
12
|
+
* Covers:
|
|
13
|
+
* - Check #92: Missing authentication middleware on routes (HIGH)
|
|
14
|
+
* - Check #93: Client-side only authorization (HIGH)
|
|
15
|
+
* - Check #94: Insecure Direct Object Reference (IDOR) (HIGH) - NEW Dec 30, 2025
|
|
16
|
+
* - Check #95: Hardcoded role checks without server validation (MEDIUM) - NEW Dec 30, 2025
|
|
17
|
+
*
|
|
18
|
+
* @param lines - Array of code lines
|
|
19
|
+
* @returns Array of security vulnerabilities found
|
|
20
|
+
*/
|
|
21
|
+
export declare function checkAccessControl(lines: string[]): SecurityVulnerability[];
|
|
22
|
+
//# sourceMappingURL=access-control.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"access-control.d.ts","sourceRoot":"","sources":["../../../../../../../../src/lib/analyzers/javascript/security-checks/access-control.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,qBAAqB,EAAE,MAAM,aAAa,CAAC;AAGpD;;;;;;;;;;;GAWG;AACH,wBAAgB,kBAAkB,CAChC,KAAK,EAAE,MAAM,EAAE,GACd,qBAAqB,EAAE,CAoNzB"}
|