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,53 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* JavaScript Syntax Helper Functions Module
|
|
3
|
+
*
|
|
4
|
+
* Utility functions for syntax analysis:
|
|
5
|
+
* - Template literal detection
|
|
6
|
+
* - String literal removal
|
|
7
|
+
* - Error line finding
|
|
8
|
+
* - Syntax error suggestions
|
|
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 syntax-helpers
|
|
14
|
+
*/
|
|
15
|
+
/**
|
|
16
|
+
* Check if a line number is inside a template literal
|
|
17
|
+
* Template literals can span multiple lines and contain ANY content (Python, SQL, etc.)
|
|
18
|
+
* We must NOT analyze JavaScript syntax inside template literal strings
|
|
19
|
+
*
|
|
20
|
+
* @param code - Full source code
|
|
21
|
+
* @param lineNumber - Line number to check (1-indexed)
|
|
22
|
+
* @returns true if line is inside a template literal, false otherwise
|
|
23
|
+
*/
|
|
24
|
+
export declare function isInsideTemplateLiteral(code: string, lineNumber: number): boolean;
|
|
25
|
+
/**
|
|
26
|
+
* Remove string literals from a line for variable usage analysis
|
|
27
|
+
* Replaces content inside strings ('...', "...", `...`) with spaces
|
|
28
|
+
* This prevents detecting words inside strings as variable names
|
|
29
|
+
*
|
|
30
|
+
* @param line - Line of code to clean
|
|
31
|
+
* @returns Line with string content replaced by spaces
|
|
32
|
+
*
|
|
33
|
+
* @example
|
|
34
|
+
* removeStringLiterals("console.log('Test Code')") → "console.log(' ')"
|
|
35
|
+
* removeStringLiterals('path: "/api/analyze"') → 'path: " "'
|
|
36
|
+
*/
|
|
37
|
+
export declare function removeStringLiterals(line: string): string;
|
|
38
|
+
/**
|
|
39
|
+
* Find the line number where an error occurred based on character position
|
|
40
|
+
*
|
|
41
|
+
* @param code - Full source code
|
|
42
|
+
* @param pos - Character position where error occurred
|
|
43
|
+
* @returns Line number (1-indexed) or null if position is invalid
|
|
44
|
+
*/
|
|
45
|
+
export declare function findErrorLine(code: string, pos: number): number | null;
|
|
46
|
+
/**
|
|
47
|
+
* Provide helpful suggestions for common syntax errors
|
|
48
|
+
*
|
|
49
|
+
* @param errorMessage - Error message from parser
|
|
50
|
+
* @returns Human-readable suggestion for fixing the error
|
|
51
|
+
*/
|
|
52
|
+
export declare function getSuggestionForSyntaxError(errorMessage: string): string;
|
|
53
|
+
//# sourceMappingURL=syntax-helpers.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"syntax-helpers.d.ts","sourceRoot":"","sources":["../../../../../../../../src/lib/analyzers/javascript/syntax/syntax-helpers.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH;;;;;;;;GAQG;AACH,wBAAgB,uBAAuB,CAAC,IAAI,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,OAAO,CAoBjF;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAkDzD;AAED;;;;;;GAMG;AACH,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAItE;AAED;;;;;GAKG;AACH,wBAAgB,2BAA2B,CAAC,YAAY,EAAE,MAAM,GAAG,MAAM,CAiBxE"}
|
|
@@ -0,0 +1,144 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* JavaScript Syntax Helper Functions Module
|
|
4
|
+
*
|
|
5
|
+
* Utility functions for syntax analysis:
|
|
6
|
+
* - Template literal detection
|
|
7
|
+
* - String literal removal
|
|
8
|
+
* - Error line finding
|
|
9
|
+
* - Syntax error suggestions
|
|
10
|
+
*
|
|
11
|
+
* Part of modularized JavaScript analyzer (150-300 LOC per module)
|
|
12
|
+
* Extracted from monolithic javascript-analyzer.ts (2,672 LOC)
|
|
13
|
+
*
|
|
14
|
+
* @module syntax-helpers
|
|
15
|
+
*/
|
|
16
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
|
+
exports.isInsideTemplateLiteral = isInsideTemplateLiteral;
|
|
18
|
+
exports.removeStringLiterals = removeStringLiterals;
|
|
19
|
+
exports.findErrorLine = findErrorLine;
|
|
20
|
+
exports.getSuggestionForSyntaxError = getSuggestionForSyntaxError;
|
|
21
|
+
/**
|
|
22
|
+
* Check if a line number is inside a template literal
|
|
23
|
+
* Template literals can span multiple lines and contain ANY content (Python, SQL, etc.)
|
|
24
|
+
* We must NOT analyze JavaScript syntax inside template literal strings
|
|
25
|
+
*
|
|
26
|
+
* @param code - Full source code
|
|
27
|
+
* @param lineNumber - Line number to check (1-indexed)
|
|
28
|
+
* @returns true if line is inside a template literal, false otherwise
|
|
29
|
+
*/
|
|
30
|
+
function isInsideTemplateLiteral(code, lineNumber) {
|
|
31
|
+
const lines = code.split('\n');
|
|
32
|
+
let insideTemplateLiteral = false;
|
|
33
|
+
for (let i = 0; i < lineNumber; i++) {
|
|
34
|
+
const line = lines[i];
|
|
35
|
+
const backtickCount = (line.match(/`/g) || []).length;
|
|
36
|
+
// Toggle state for each backtick
|
|
37
|
+
for (let j = 0; j < backtickCount; j++) {
|
|
38
|
+
insideTemplateLiteral = !insideTemplateLiteral;
|
|
39
|
+
}
|
|
40
|
+
// If this is the target line, check if we're inside and it has no backticks
|
|
41
|
+
if (i === lineNumber - 1) {
|
|
42
|
+
return insideTemplateLiteral && backtickCount === 0;
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
return false;
|
|
46
|
+
}
|
|
47
|
+
/**
|
|
48
|
+
* Remove string literals from a line for variable usage analysis
|
|
49
|
+
* Replaces content inside strings ('...', "...", `...`) with spaces
|
|
50
|
+
* This prevents detecting words inside strings as variable names
|
|
51
|
+
*
|
|
52
|
+
* @param line - Line of code to clean
|
|
53
|
+
* @returns Line with string content replaced by spaces
|
|
54
|
+
*
|
|
55
|
+
* @example
|
|
56
|
+
* removeStringLiterals("console.log('Test Code')") → "console.log(' ')"
|
|
57
|
+
* removeStringLiterals('path: "/api/analyze"') → 'path: " "'
|
|
58
|
+
*/
|
|
59
|
+
function removeStringLiterals(line) {
|
|
60
|
+
let result = '';
|
|
61
|
+
let inString = false;
|
|
62
|
+
let stringChar = '';
|
|
63
|
+
let escaped = false;
|
|
64
|
+
for (let i = 0; i < line.length; i++) {
|
|
65
|
+
const char = line[i];
|
|
66
|
+
// Handle escape sequences
|
|
67
|
+
if (escaped) {
|
|
68
|
+
result += inString ? ' ' : char;
|
|
69
|
+
escaped = false;
|
|
70
|
+
continue;
|
|
71
|
+
}
|
|
72
|
+
if (char === '\\') {
|
|
73
|
+
escaped = true;
|
|
74
|
+
result += inString ? ' ' : char;
|
|
75
|
+
continue;
|
|
76
|
+
}
|
|
77
|
+
// Handle string delimiters
|
|
78
|
+
if (char === '"' || char === "'" || char === '`') {
|
|
79
|
+
if (!inString) {
|
|
80
|
+
// Start of string
|
|
81
|
+
inString = true;
|
|
82
|
+
stringChar = char;
|
|
83
|
+
result += char; // Keep the quote
|
|
84
|
+
}
|
|
85
|
+
else if (char === stringChar) {
|
|
86
|
+
// End of string
|
|
87
|
+
inString = false;
|
|
88
|
+
stringChar = '';
|
|
89
|
+
result += char; // Keep the quote
|
|
90
|
+
}
|
|
91
|
+
else {
|
|
92
|
+
// Different quote inside string
|
|
93
|
+
result += ' '; // Replace with space
|
|
94
|
+
}
|
|
95
|
+
continue;
|
|
96
|
+
}
|
|
97
|
+
// Inside string - replace content with spaces
|
|
98
|
+
if (inString) {
|
|
99
|
+
result += ' ';
|
|
100
|
+
}
|
|
101
|
+
else {
|
|
102
|
+
result += char;
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
return result;
|
|
106
|
+
}
|
|
107
|
+
/**
|
|
108
|
+
* Find the line number where an error occurred based on character position
|
|
109
|
+
*
|
|
110
|
+
* @param code - Full source code
|
|
111
|
+
* @param pos - Character position where error occurred
|
|
112
|
+
* @returns Line number (1-indexed) or null if position is invalid
|
|
113
|
+
*/
|
|
114
|
+
function findErrorLine(code, pos) {
|
|
115
|
+
if (!pos)
|
|
116
|
+
return null;
|
|
117
|
+
const lines = code.substring(0, pos).split('\n');
|
|
118
|
+
return lines.length;
|
|
119
|
+
}
|
|
120
|
+
/**
|
|
121
|
+
* Provide helpful suggestions for common syntax errors
|
|
122
|
+
*
|
|
123
|
+
* @param errorMessage - Error message from parser
|
|
124
|
+
* @returns Human-readable suggestion for fixing the error
|
|
125
|
+
*/
|
|
126
|
+
function getSuggestionForSyntaxError(errorMessage) {
|
|
127
|
+
if (errorMessage.includes('Unexpected token')) {
|
|
128
|
+
if (errorMessage.includes('}')) {
|
|
129
|
+
return 'Check if there is a missing closing parenthesis or brace before this line';
|
|
130
|
+
}
|
|
131
|
+
if (errorMessage.includes(')')) {
|
|
132
|
+
return 'Add the missing closing parenthesis ")"';
|
|
133
|
+
}
|
|
134
|
+
return 'Check the code syntax and fix the identified errors';
|
|
135
|
+
}
|
|
136
|
+
if (errorMessage.includes('Unterminated string')) {
|
|
137
|
+
return 'Close the string with matching quotes';
|
|
138
|
+
}
|
|
139
|
+
if (errorMessage.includes('Missing comma')) {
|
|
140
|
+
return 'Add a comma between object properties';
|
|
141
|
+
}
|
|
142
|
+
return 'Fix the identified syntax error';
|
|
143
|
+
}
|
|
144
|
+
//# sourceMappingURL=syntax-helpers.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"syntax-helpers.js","sourceRoot":"","sources":["../../../../../../../../src/lib/analyzers/javascript/syntax/syntax-helpers.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* JavaScript/TypeScript Syntax Detection Module
|
|
3
|
+
*
|
|
4
|
+
* TypeScript-specific syntax validation:
|
|
5
|
+
* - TypeScript code detection
|
|
6
|
+
* - Interface/type validation
|
|
7
|
+
* - Property definition checking
|
|
8
|
+
* - Type annotation validation
|
|
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 typescript-syntax
|
|
14
|
+
*/
|
|
15
|
+
/**
|
|
16
|
+
* Detect if code contains TypeScript-specific syntax
|
|
17
|
+
*
|
|
18
|
+
* @param code - Full source code
|
|
19
|
+
* @returns true if TypeScript syntax is detected
|
|
20
|
+
*/
|
|
21
|
+
export declare function isTypeScriptCode(code: string): boolean;
|
|
22
|
+
/**
|
|
23
|
+
* Check if a line should have a semicolon
|
|
24
|
+
*
|
|
25
|
+
* @param line - Line of code to check
|
|
26
|
+
* @returns true if line likely needs a semicolon
|
|
27
|
+
*/
|
|
28
|
+
export declare function shouldHaveSemicolon(line: string): boolean;
|
|
29
|
+
/**
|
|
30
|
+
* Check if a line has an unclosed string
|
|
31
|
+
*
|
|
32
|
+
* @param line - Line of code to check
|
|
33
|
+
* @returns true if line has unclosed string
|
|
34
|
+
*/
|
|
35
|
+
export declare function hasUnclosedString(line: string): boolean;
|
|
36
|
+
/**
|
|
37
|
+
* Check if a property definition is valid
|
|
38
|
+
*
|
|
39
|
+
* @param line - Line of code to check
|
|
40
|
+
* @returns true if property definition is valid
|
|
41
|
+
*/
|
|
42
|
+
export declare function isValidPropertyDefinition(line: string): boolean;
|
|
43
|
+
/**
|
|
44
|
+
* Check if a property definition is incomplete
|
|
45
|
+
*
|
|
46
|
+
* @param line - Line of code to check
|
|
47
|
+
* @returns true if property is incomplete
|
|
48
|
+
*/
|
|
49
|
+
export declare function isIncompleteProperty(line: string): boolean;
|
|
50
|
+
/**
|
|
51
|
+
* Check if a line has a TypeScript type typo
|
|
52
|
+
*
|
|
53
|
+
* @param line - Line of code to check
|
|
54
|
+
* @returns true if type typo is detected
|
|
55
|
+
*/
|
|
56
|
+
export declare function hasTypeScriptTypeError(line: string): boolean;
|
|
57
|
+
/**
|
|
58
|
+
* Suggest correction for TypeScript type typo
|
|
59
|
+
*
|
|
60
|
+
* @param line - Line with type typo
|
|
61
|
+
* @returns Suggested correction
|
|
62
|
+
*/
|
|
63
|
+
export declare function suggestTypeCorrection(line: string): string;
|
|
64
|
+
/**
|
|
65
|
+
* Check if a line is missing a comma (in object/array literals)
|
|
66
|
+
*
|
|
67
|
+
* @param currentLine - Current line of code
|
|
68
|
+
* @param nextLine - Next line of code
|
|
69
|
+
* @returns true if comma is likely missing
|
|
70
|
+
*/
|
|
71
|
+
export declare function isMissingComma(currentLine: string, nextLine: string): boolean;
|
|
72
|
+
//# sourceMappingURL=typescript-syntax.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"typescript-syntax.d.ts","sourceRoot":"","sources":["../../../../../../../../src/lib/analyzers/javascript/syntax/typescript-syntax.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAKH;;;;;GAKG;AACH,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAiBtD;AAED;;;;;GAKG;AACH,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAgCzD;AAED;;;;;GAKG;AACH,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CASvD;AAED;;;;;GAKG;AACH,wBAAgB,yBAAyB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CA6B/D;AAED;;;;;GAKG;AACH,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAiC1D;AAED;;;;;GAKG;AACH,wBAAgB,sBAAsB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAmF5D;AAED;;;;;GAKG;AACH,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CA8C1D;AAED;;;;;;GAMG;AACH,wBAAgB,cAAc,CAAC,WAAW,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAe7E"}
|
|
@@ -0,0 +1,314 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* JavaScript/TypeScript Syntax Detection Module
|
|
4
|
+
*
|
|
5
|
+
* TypeScript-specific syntax validation:
|
|
6
|
+
* - TypeScript code detection
|
|
7
|
+
* - Interface/type validation
|
|
8
|
+
* - Property definition checking
|
|
9
|
+
* - Type annotation validation
|
|
10
|
+
*
|
|
11
|
+
* Part of modularized JavaScript analyzer (150-300 LOC per module)
|
|
12
|
+
* Extracted from monolithic javascript-analyzer.ts (2,672 LOC)
|
|
13
|
+
*
|
|
14
|
+
* @module typescript-syntax
|
|
15
|
+
*/
|
|
16
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
|
+
exports.isTypeScriptCode = isTypeScriptCode;
|
|
18
|
+
exports.shouldHaveSemicolon = shouldHaveSemicolon;
|
|
19
|
+
exports.hasUnclosedString = hasUnclosedString;
|
|
20
|
+
exports.isValidPropertyDefinition = isValidPropertyDefinition;
|
|
21
|
+
exports.isIncompleteProperty = isIncompleteProperty;
|
|
22
|
+
exports.hasTypeScriptTypeError = hasTypeScriptTypeError;
|
|
23
|
+
exports.suggestTypeCorrection = suggestTypeCorrection;
|
|
24
|
+
exports.isMissingComma = isMissingComma;
|
|
25
|
+
const code_cleaner_1 = require("../../../utils/code-cleaner");
|
|
26
|
+
/**
|
|
27
|
+
* Detect if code contains TypeScript-specific syntax
|
|
28
|
+
*
|
|
29
|
+
* @param code - Full source code
|
|
30
|
+
* @returns true if TypeScript syntax is detected
|
|
31
|
+
*/
|
|
32
|
+
function isTypeScriptCode(code) {
|
|
33
|
+
const typeScriptPatterns = [
|
|
34
|
+
/interface\s+\w+/, // Interface declarations
|
|
35
|
+
/type\s+\w+\s*=/, // type aliases
|
|
36
|
+
/:\s*\w+(\[\])?/, // type annotations
|
|
37
|
+
/export\s+interface/, // exported interfaces
|
|
38
|
+
/export\s+type/, // exported types
|
|
39
|
+
/<.*>/, // generic types
|
|
40
|
+
/as\s+\w+/, // type assertions
|
|
41
|
+
/enum\s+\w+/, // enum declarations
|
|
42
|
+
/namespace\s+\w+/, // namespace declarations
|
|
43
|
+
/declare\s+/, // declare statements
|
|
44
|
+
/readonly\s+/, // readonly modifier
|
|
45
|
+
/public\s+|private\s+|protected\s+/, // access modifiers
|
|
46
|
+
];
|
|
47
|
+
return typeScriptPatterns.some(pattern => pattern.test(code));
|
|
48
|
+
}
|
|
49
|
+
/**
|
|
50
|
+
* Check if a line should have a semicolon
|
|
51
|
+
*
|
|
52
|
+
* @param line - Line of code to check
|
|
53
|
+
* @returns true if line likely needs a semicolon
|
|
54
|
+
*/
|
|
55
|
+
function shouldHaveSemicolon(line) {
|
|
56
|
+
const trimmed = line.trim();
|
|
57
|
+
// Strip comments before checking line endings
|
|
58
|
+
const commentIndex = trimmed.indexOf('//');
|
|
59
|
+
const codeOnly = commentIndex > 0
|
|
60
|
+
? trimmed.substring(0, commentIndex).trimEnd()
|
|
61
|
+
: trimmed;
|
|
62
|
+
// Skip if already has semicolon, or ends with special characters
|
|
63
|
+
if (codeOnly.endsWith(';') || codeOnly.endsWith('{') || codeOnly.endsWith('}') ||
|
|
64
|
+
codeOnly.endsWith(',') || codeOnly.endsWith('(') || codeOnly.endsWith(')')) {
|
|
65
|
+
return false;
|
|
66
|
+
}
|
|
67
|
+
// Skip Interface/type property definitions
|
|
68
|
+
if (codeOnly.includes(':') && !codeOnly.includes('=') && !codeOnly.includes('(')) {
|
|
69
|
+
return false;
|
|
70
|
+
}
|
|
71
|
+
// Skip control structures, declarations, etc.
|
|
72
|
+
if (codeOnly.startsWith('if') || codeOnly.startsWith('for') || codeOnly.startsWith('while') ||
|
|
73
|
+
codeOnly.startsWith('Interface') || codeOnly.startsWith('type') || codeOnly.startsWith('export') ||
|
|
74
|
+
codeOnly.startsWith('import') || codeOnly.startsWith('class') || codeOnly.startsWith('function') ||
|
|
75
|
+
codeOnly.startsWith('const') || codeOnly.startsWith('let') || codeOnly.startsWith('var')) {
|
|
76
|
+
return false;
|
|
77
|
+
}
|
|
78
|
+
// Lines that likely need semicolons
|
|
79
|
+
return codeOnly.includes('=') || codeOnly.includes('return') || codeOnly.includes('throw') ||
|
|
80
|
+
codeOnly.includes('break') || codeOnly.includes('continue') ||
|
|
81
|
+
/\w+\(.*\)$/.test(codeOnly); // function calls
|
|
82
|
+
}
|
|
83
|
+
/**
|
|
84
|
+
* Check if a line has an unclosed string
|
|
85
|
+
*
|
|
86
|
+
* @param line - Line of code to check
|
|
87
|
+
* @returns true if line has unclosed string
|
|
88
|
+
*/
|
|
89
|
+
function hasUnclosedString(line) {
|
|
90
|
+
// Remove comments before checking quotes
|
|
91
|
+
const lineWithoutComments = code_cleaner_1.CodeCleaner.removeLineComments(line, 'javascript');
|
|
92
|
+
const singleQuotes = (lineWithoutComments.match(/'/g) || []).length;
|
|
93
|
+
const doubleQuotes = (lineWithoutComments.match(/"/g) || []).length;
|
|
94
|
+
// Do NOT check backticks - template literals span multiple lines
|
|
95
|
+
return (singleQuotes % 2 !== 0) || (doubleQuotes % 2 !== 0);
|
|
96
|
+
}
|
|
97
|
+
/**
|
|
98
|
+
* Check if a property definition is valid
|
|
99
|
+
*
|
|
100
|
+
* @param line - Line of code to check
|
|
101
|
+
* @returns true if property definition is valid
|
|
102
|
+
*/
|
|
103
|
+
function isValidPropertyDefinition(line) {
|
|
104
|
+
const trimmed = line.trim();
|
|
105
|
+
if (!trimmed.includes(':')) {
|
|
106
|
+
return true; // Not a property line
|
|
107
|
+
}
|
|
108
|
+
// Skip Interface declarations and other non-property lines
|
|
109
|
+
if (trimmed.startsWith('Interface') || trimmed.startsWith('export') ||
|
|
110
|
+
trimmed.includes('{') || trimmed.includes('}')) {
|
|
111
|
+
return true;
|
|
112
|
+
}
|
|
113
|
+
// Skip valid TypeScript patterns
|
|
114
|
+
if (trimmed.includes('[') && trimmed.includes(']')) {
|
|
115
|
+
return true; // Index signatures
|
|
116
|
+
}
|
|
117
|
+
if (trimmed.includes('(') && trimmed.includes(')')) {
|
|
118
|
+
return true; // Function signatures
|
|
119
|
+
}
|
|
120
|
+
if (trimmed.startsWith('//')) {
|
|
121
|
+
return false; // Commented property is invalid
|
|
122
|
+
}
|
|
123
|
+
// Basic pattern: word : something
|
|
124
|
+
const basicPattern = /^\s*(readonly\s+)?\w+\s*\??\s*:\s*.+$/;
|
|
125
|
+
return basicPattern.test(trimmed);
|
|
126
|
+
}
|
|
127
|
+
/**
|
|
128
|
+
* Check if a property definition is incomplete
|
|
129
|
+
*
|
|
130
|
+
* @param line - Line of code to check
|
|
131
|
+
* @returns true if property is incomplete
|
|
132
|
+
*/
|
|
133
|
+
function isIncompleteProperty(line) {
|
|
134
|
+
const trimmed = line.trim();
|
|
135
|
+
// Check for commented properties
|
|
136
|
+
if (trimmed.startsWith('//') && trimmed.includes(':')) {
|
|
137
|
+
return true;
|
|
138
|
+
}
|
|
139
|
+
// Check for incomplete property syntax
|
|
140
|
+
if (trimmed.includes(':')) {
|
|
141
|
+
// Skip Interface/export lines
|
|
142
|
+
if (trimmed.startsWith('Interface') || trimmed.startsWith('export') ||
|
|
143
|
+
trimmed.includes('{') || trimmed.includes('}')) {
|
|
144
|
+
return false;
|
|
145
|
+
}
|
|
146
|
+
// Skip valid TypeScript patterns
|
|
147
|
+
if (trimmed.includes('[') && trimmed.includes(']')) {
|
|
148
|
+
return false; // Index signatures
|
|
149
|
+
}
|
|
150
|
+
if (trimmed.includes('(') && trimmed.includes(')')) {
|
|
151
|
+
return false; // Function signatures
|
|
152
|
+
}
|
|
153
|
+
// Check if it's missing type or has wrong syntax
|
|
154
|
+
const hasValidType = /:\s*.+/.test(trimmed);
|
|
155
|
+
if (!hasValidType) {
|
|
156
|
+
return true;
|
|
157
|
+
}
|
|
158
|
+
}
|
|
159
|
+
return false;
|
|
160
|
+
}
|
|
161
|
+
/**
|
|
162
|
+
* Check if a line has a TypeScript type typo
|
|
163
|
+
*
|
|
164
|
+
* @param line - Line of code to check
|
|
165
|
+
* @returns true if type typo is detected
|
|
166
|
+
*/
|
|
167
|
+
function hasTypeScriptTypeError(line) {
|
|
168
|
+
const trimmed = line.trim();
|
|
169
|
+
// Skip non-property lines
|
|
170
|
+
if (!trimmed.includes(':') || trimmed.startsWith('Interface') || trimmed.startsWith('export') ||
|
|
171
|
+
trimmed.includes('{') || trimmed.includes('}')) {
|
|
172
|
+
return false;
|
|
173
|
+
}
|
|
174
|
+
// Skip valid TypeScript patterns
|
|
175
|
+
if (trimmed.includes('[') && trimmed.includes(']')) {
|
|
176
|
+
return false;
|
|
177
|
+
}
|
|
178
|
+
if (trimmed.includes('(') && trimmed.includes(')') && !trimmed.startsWith('function')) {
|
|
179
|
+
return false;
|
|
180
|
+
}
|
|
181
|
+
// Extract the type part after the colon
|
|
182
|
+
let colonIndex = trimmed.indexOf(':');
|
|
183
|
+
if (colonIndex === -1)
|
|
184
|
+
return false;
|
|
185
|
+
// For function declarations, find colon AFTER closing paren
|
|
186
|
+
if (trimmed.startsWith('function') && trimmed.includes(')')) {
|
|
187
|
+
const closingParenIndex = trimmed.lastIndexOf(')');
|
|
188
|
+
const colonAfterParen = trimmed.indexOf(':', closingParenIndex);
|
|
189
|
+
if (colonAfterParen !== -1) {
|
|
190
|
+
colonIndex = colonAfterParen;
|
|
191
|
+
}
|
|
192
|
+
}
|
|
193
|
+
const typePart = trimmed.substring(colonIndex + 1).trim();
|
|
194
|
+
const typeWithoutSemicolon = typePart
|
|
195
|
+
.split(';')[0]
|
|
196
|
+
.split('//')[0]
|
|
197
|
+
.split('/*')[0]
|
|
198
|
+
.split('{')[0]
|
|
199
|
+
.trim();
|
|
200
|
+
// Common TypeScript type typos
|
|
201
|
+
const commonTypos = {
|
|
202
|
+
'strng': 'string',
|
|
203
|
+
'strig': 'string',
|
|
204
|
+
'stirng': 'string',
|
|
205
|
+
'numbr': 'number',
|
|
206
|
+
'numebr': 'number',
|
|
207
|
+
'bolean': 'boolean',
|
|
208
|
+
'boolea': 'boolean',
|
|
209
|
+
'boolen': 'boolean',
|
|
210
|
+
'undefind': 'undefined',
|
|
211
|
+
'nul': 'null',
|
|
212
|
+
'voic': 'void',
|
|
213
|
+
'aray': 'array',
|
|
214
|
+
'dat': 'Date',
|
|
215
|
+
'Dat': 'Date',
|
|
216
|
+
'objec': 'object'
|
|
217
|
+
};
|
|
218
|
+
// Check if type matches any known typos
|
|
219
|
+
for (const typo in commonTypos) {
|
|
220
|
+
if (typeWithoutSemicolon === typo) {
|
|
221
|
+
return true;
|
|
222
|
+
}
|
|
223
|
+
}
|
|
224
|
+
// Check for potential typos in short type names
|
|
225
|
+
if (typeWithoutSemicolon.length > 2 && typeWithoutSemicolon.length < 8) {
|
|
226
|
+
const validPrimitiveTypes = ['string', 'number', 'boolean', 'undefined', 'null', 'void', 'any', 'unknown', 'never'];
|
|
227
|
+
const validComplexTypes = ['Date', 'Array', 'Object', 'Function', 'Promise'];
|
|
228
|
+
if (!validPrimitiveTypes.includes(typeWithoutSemicolon) &&
|
|
229
|
+
!validComplexTypes.includes(typeWithoutSemicolon) &&
|
|
230
|
+
!/^[A-Z]/.test(typeWithoutSemicolon) &&
|
|
231
|
+
!typeWithoutSemicolon.includes('[]') &&
|
|
232
|
+
!typeWithoutSemicolon.includes('|') &&
|
|
233
|
+
!typeWithoutSemicolon.includes('&') &&
|
|
234
|
+
!typeWithoutSemicolon.includes('<') &&
|
|
235
|
+
!/^\w+$/.test(typeWithoutSemicolon)) {
|
|
236
|
+
return true;
|
|
237
|
+
}
|
|
238
|
+
}
|
|
239
|
+
return false;
|
|
240
|
+
}
|
|
241
|
+
/**
|
|
242
|
+
* Suggest correction for TypeScript type typo
|
|
243
|
+
*
|
|
244
|
+
* @param line - Line with type typo
|
|
245
|
+
* @returns Suggested correction
|
|
246
|
+
*/
|
|
247
|
+
function suggestTypeCorrection(line) {
|
|
248
|
+
const trimmed = line.trim();
|
|
249
|
+
let colonIndex = trimmed.indexOf(':');
|
|
250
|
+
// For function declarations, find colon AFTER closing paren
|
|
251
|
+
if (trimmed.startsWith('function') && trimmed.includes(')')) {
|
|
252
|
+
const closingParenIndex = trimmed.lastIndexOf(')');
|
|
253
|
+
const colonAfterParen = trimmed.indexOf(':', closingParenIndex);
|
|
254
|
+
if (colonAfterParen !== -1) {
|
|
255
|
+
colonIndex = colonAfterParen;
|
|
256
|
+
}
|
|
257
|
+
}
|
|
258
|
+
const typePart = trimmed.substring(colonIndex + 1).trim();
|
|
259
|
+
const typeWithoutSemicolon = typePart
|
|
260
|
+
.split(';')[0]
|
|
261
|
+
.split('//')[0]
|
|
262
|
+
.split('/*')[0]
|
|
263
|
+
.split('{')[0]
|
|
264
|
+
.trim();
|
|
265
|
+
const commonTypos = {
|
|
266
|
+
'strng': 'string',
|
|
267
|
+
'strig': 'string',
|
|
268
|
+
'stirng': 'string',
|
|
269
|
+
'numbr': 'number',
|
|
270
|
+
'numebr': 'number',
|
|
271
|
+
'bolean': 'boolean',
|
|
272
|
+
'boolea': 'boolean',
|
|
273
|
+
'boolen': 'boolean',
|
|
274
|
+
'undefind': 'undefined',
|
|
275
|
+
'nul': 'null',
|
|
276
|
+
'voic': 'void',
|
|
277
|
+
'aray': 'array',
|
|
278
|
+
'dat': 'Date',
|
|
279
|
+
'Dat': 'Date',
|
|
280
|
+
'objec': 'object'
|
|
281
|
+
};
|
|
282
|
+
if (commonTypos[typeWithoutSemicolon]) {
|
|
283
|
+
const correctedType = commonTypos[typeWithoutSemicolon];
|
|
284
|
+
const correctedLine = trimmed.replace(typeWithoutSemicolon, correctedType);
|
|
285
|
+
return `Possible typo. Suggestion: ${correctedLine}`;
|
|
286
|
+
}
|
|
287
|
+
return `Check type "${typeWithoutSemicolon}". Common types: string, number, boolean, Date`;
|
|
288
|
+
}
|
|
289
|
+
/**
|
|
290
|
+
* Check if a line is missing a comma (in object/array literals)
|
|
291
|
+
*
|
|
292
|
+
* @param currentLine - Current line of code
|
|
293
|
+
* @param nextLine - Next line of code
|
|
294
|
+
* @returns true if comma is likely missing
|
|
295
|
+
*/
|
|
296
|
+
function isMissingComma(currentLine, nextLine) {
|
|
297
|
+
// Skip empty lines, comments
|
|
298
|
+
if (!currentLine || !nextLine)
|
|
299
|
+
return false;
|
|
300
|
+
if (currentLine.startsWith('//') || nextLine.startsWith('//'))
|
|
301
|
+
return false;
|
|
302
|
+
if (currentLine.startsWith('/*') || nextLine.startsWith('/*'))
|
|
303
|
+
return false;
|
|
304
|
+
// Skip if current line already ends with special characters
|
|
305
|
+
const lastChar = currentLine.trimEnd().slice(-1);
|
|
306
|
+
if ([',', ';', '{', '}', '[', ']'].includes(lastChar))
|
|
307
|
+
return false;
|
|
308
|
+
// Skip if next line is a closing character
|
|
309
|
+
if (['}', ']', ')'].includes(nextLine[0]))
|
|
310
|
+
return false;
|
|
311
|
+
// Check if current line looks like an object property
|
|
312
|
+
return currentLine.includes(':');
|
|
313
|
+
}
|
|
314
|
+
//# sourceMappingURL=typescript-syntax.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"typescript-syntax.js","sourceRoot":"","sources":["../../../../../../../../src/lib/analyzers/javascript/syntax/typescript-syntax.ts"],"names":[],"mappings":"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"}
|