@critiq/rules 0.1.0 → 0.2.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 +1 -1
- package/catalog.yaml +617 -0
- package/package.json +1 -1
- package/rules/go/go.correctness.defer-close-before-check.rule.yaml +44 -0
- package/rules/go/go.correctness.defer-in-loop.rule.yaml +47 -0
- package/rules/go/go.correctness.nil-context-passed.rule.yaml +43 -0
- package/rules/go/go.correctness.nil-map-assignment.rule.yaml +42 -0
- package/rules/go/go.correctness.time-tick-leak.rule.yaml +44 -0
- package/rules/go/go.correctness.unused-append-result.rule.yaml +43 -0
- package/rules/go/go.correctness.waitgroup-add-in-goroutine.rule.yaml +45 -0
- package/rules/go/go.security.bind-all-interfaces.rule.yaml +57 -0
- package/rules/go/go.security.echo-sensitive-binding-without-validation.rule.yaml +10 -0
- package/rules/go/go.security.echo-unsafe-multipart-upload.rule.yaml +10 -0
- package/rules/go/go.security.fiber-sensitive-binding-without-validation.rule.yaml +10 -0
- package/rules/go/go.security.fiber-unsafe-multipart-upload.rule.yaml +10 -0
- package/rules/go/go.security.gin-sensitive-binding-without-validation.rule.yaml +10 -0
- package/rules/go/go.security.gin-trust-all-proxies.rule.yaml +10 -0
- package/rules/go/go.security.gin-wildcard-cors-with-credentials.rule.yaml +10 -0
- package/rules/go/go.security.insecure-rand-seed.rule.yaml +55 -0
- package/rules/go/go.security.insecure-ssh-host-key.rule.yaml +57 -0
- package/rules/go/go.security.insecure-ssl-protocol.rule.yaml +56 -0
- package/rules/go/go.security.insecure-temp-file.rule.yaml +57 -0
- package/rules/go/go.security.jwt-without-verification.rule.yaml +56 -0
- package/rules/go/go.security.net-http-missing-timeouts.rule.yaml +10 -0
- package/rules/go/go.security.pprof-exposed.rule.yaml +56 -0
- package/rules/go/go.security.sensitive-data-egress.rule.yaml +10 -0
- package/rules/go/go.security.tar-path-traversal.rule.yaml +10 -0
- package/rules/go/go.security.template-unescaped-request-value.rule.yaml +10 -0
- package/rules/go/go.security.tls-missing-min-version.rule.yaml +55 -0
- package/rules/go/go.security.unsafe-package-import.rule.yaml +55 -0
- package/rules/go/go.security.weak-bcrypt-cost.rule.yaml +56 -0
- package/rules/go/go.security.weak-crypto-import.rule.yaml +57 -0
- package/rules/go/go.security.weak-rsa-key-size.rule.yaml +57 -0
- package/rules/go/go.security.weak-tls-cipher.rule.yaml +56 -0
- package/rules/java/java.correctness.catch-null-pointer.rule.yaml +40 -0
- package/rules/java/java.correctness.empty-catch.rule.yaml +40 -0
- package/rules/java/java.correctness.equals-on-array.rule.yaml +40 -0
- package/rules/java/java.correctness.return-in-finally.rule.yaml +40 -0
- package/rules/java/java.correctness.sync-on-string-literal.rule.yaml +40 -0
- package/rules/java/java.correctness.unsafe-optional-get.rule.yaml +40 -0
- package/rules/java/java.security.android-screenshot-exposure.rule.yaml +13 -0
- package/rules/java/java.security.android-world-readable-mode.rule.yaml +13 -0
- package/rules/java/java.security.hibernate-sql-concatenation.rule.yaml +62 -0
- package/rules/java/java.security.insecure-cipher-mode.rule.yaml +52 -0
- package/rules/java/java.security.insecure-network-protocol.rule.yaml +52 -0
- package/rules/java/java.security.insecure-ssl-context.rule.yaml +52 -0
- package/rules/java/java.security.jpa-concatenated-query.rule.yaml +13 -0
- package/rules/java/java.security.jwt-without-verification.rule.yaml +53 -0
- package/rules/java/java.security.null-cipher.rule.yaml +52 -0
- package/rules/java/java.security.permissive-cors.rule.yaml +53 -0
- package/rules/java/java.security.predictable-securerandom.rule.yaml +59 -0
- package/rules/java/java.security.reflected-output-from-request.rule.yaml +10 -0
- package/rules/java/java.security.servlet-insecure-cookie.rule.yaml +13 -0
- package/rules/java/java.security.shell-runtime-exec.rule.yaml +58 -0
- package/rules/java/java.security.spring-actuator-health-details-always.rule.yaml +13 -0
- package/rules/java/java.security.spring-actuator-sensitive-exposure.rule.yaml +13 -0
- package/rules/java/java.security.spring-csrf-globally-disabled.rule.yaml +13 -0
- package/rules/java/java.security.spring-debug-exposure.rule.yaml +13 -0
- package/rules/java/java.security.spring-permit-all-default.rule.yaml +13 -0
- package/rules/java/java.security.spring-webmvc-unrestricted-data-binding.rule.yaml +13 -0
- package/rules/java/java.security.template-unescaped-user-output.rule.yaml +10 -0
- package/rules/java/java.security.trust-all-certificates.rule.yaml +52 -0
- package/rules/java/java.security.unsafe-jackson-deserialization.rule.yaml +59 -0
- package/rules/java/java.security.weak-rsa-key-size.rule.yaml +54 -0
- package/rules/java/java.security.xxe-document-builder.rule.yaml +59 -0
- package/rules/java/java.security.xxe-xml-input-factory.rule.yaml +59 -0
- package/rules/php/php.correctness.duplicate-array-key.rule.yaml +36 -0
- package/rules/php/php.correctness.error-suppression-operator.rule.yaml +36 -0
- package/rules/php/php.correctness.nullsafe-returned-by-reference.rule.yaml +36 -0
- package/rules/php/php.correctness.switch-multiple-default.rule.yaml +36 -0
- package/rules/php/php.correctness.unreachable-after-return.rule.yaml +36 -0
- package/rules/php/php.security.debug-function-exposure.rule.yaml +55 -0
- package/rules/php/php.security.insecure-cors-wildcard-with-credentials.rule.yaml +10 -0
- package/rules/php/php.security.insecure-mail-or-file-transport.rule.yaml +10 -0
- package/rules/php/php.security.insecure-session-id-generation.rule.yaml +51 -0
- package/rules/php/php.security.insecure-session-or-cookie-config.rule.yaml +10 -0
- package/rules/php/php.security.laravel-sensitive-csrf-exclusion.rule.yaml +13 -0
- package/rules/php/php.security.laravel-unsafe-blade-output.rule.yaml +13 -0
- package/rules/php/php.security.laravel-unsafe-mass-assignment.rule.yaml +13 -0
- package/rules/php/php.security.no-dynamic-eval.rule.yaml +52 -0
- package/rules/php/php.security.sensitive-data-egress.rule.yaml +10 -0
- package/rules/php/php.security.symfony-csrf-disabled.rule.yaml +13 -0
- package/rules/php/php.security.symfony-debug-exposure.rule.yaml +13 -0
- package/rules/php/php.security.unsafe-file-upload-handling.rule.yaml +10 -0
- package/rules/php/php.security.unsafe-include-with-user-input.rule.yaml +52 -0
- package/rules/php/php.security.weak-cipher.rule.yaml +51 -0
- package/rules/php/php.security.wordpress-missing-nonce-or-capability.rule.yaml +13 -0
- package/rules/php/php.security.wordpress-unprepared-sql.rule.yaml +13 -0
- package/rules/php/php.security.xml-external-entity.rule.yaml +53 -0
- package/rules/python/py.correctness.assert-on-tuple.rule.yaml +33 -0
- package/rules/python/py.correctness.bare-except.rule.yaml +33 -0
- package/rules/python/py.correctness.broad-exception-handler.rule.yaml +33 -0
- package/rules/python/py.correctness.dangerous-mutable-default.rule.yaml +33 -0
- package/rules/python/py.correctness.duplicate-dict-key.rule.yaml +33 -0
- package/rules/python/py.security.bind-all-interfaces.rule.yaml +55 -0
- package/rules/python/py.security.debugger-import.rule.yaml +55 -0
- package/rules/python/py.security.django-csrf-exempt-state-changing.rule.yaml +13 -0
- package/rules/python/py.security.django-format-html-unsafe.rule.yaml +56 -0
- package/rules/python/py.security.django-mark-safe.rule.yaml +56 -0
- package/rules/python/py.security.django-missing-csrf-middleware.rule.yaml +13 -0
- package/rules/python/py.security.django-security-middleware-missing.rule.yaml +60 -0
- package/rules/python/py.security.django-unsafe-production-settings.rule.yaml +13 -0
- package/rules/python/py.security.drf-allow-any-default.rule.yaml +13 -0
- package/rules/python/py.security.drf-allow-any-unsafe-method.rule.yaml +13 -0
- package/rules/python/py.security.dynamic-code-execution.rule.yaml +55 -0
- package/rules/python/py.security.fastapi-insecure-cors.rule.yaml +13 -0
- package/rules/python/py.security.flask-debug-enabled.rule.yaml +56 -0
- package/rules/python/py.security.flask-missing-upload-body-limit.rule.yaml +13 -0
- package/rules/python/py.security.flask-unsafe-html-output.rule.yaml +13 -0
- package/rules/python/py.security.flask-unsafe-upload-filename.rule.yaml +13 -0
- package/rules/python/py.security.insecure-temp-file.rule.yaml +55 -0
- package/rules/python/py.security.insecure-yaml-load.rule.yaml +55 -0
- package/rules/python/py.security.jinja-autoescape-disabled.rule.yaml +58 -0
- package/rules/python/py.security.subprocess-shell-enabled.rule.yaml +55 -0
- package/rules/ruby/ruby.security.rails-csrf-disabled.rule.yaml +13 -0
- package/rules/ruby/ruby.security.rails-detailed-exceptions-enabled.rule.yaml +13 -0
- package/rules/ruby/ruby.security.rails-open-redirect.rule.yaml +13 -0
- package/rules/ruby/ruby.security.rails-unsafe-html-output.rule.yaml +13 -0
- package/rules/ruby/ruby.security.rails-unsafe-render.rule.yaml +13 -0
- package/rules/ruby/ruby.security.rails-unsafe-session-or-cookie-store.rule.yaml +13 -0
- package/rules/ruby/ruby.security.rails-unsafe-strong-parameters.rule.yaml +13 -0
- package/rules/ruby/ruby.security.sensitive-data-egress.rule.yaml +10 -0
- package/rules/ruby/ruby.security.sidekiq-web-unauthenticated-mount.rule.yaml +10 -0
- package/rules/rust/rust.correctness.block-on-in-async.rule.yaml +48 -0
- package/rules/rust/rust.correctness.forget-join-handle.rule.yaml +48 -0
- package/rules/rust/rust.correctness.mutex-held-across-await.rule.yaml +48 -0
- package/rules/rust/rust.correctness.std-mutex-in-async-fn.rule.yaml +48 -0
- package/rules/rust/rust.correctness.thread-sleep-in-async.rule.yaml +48 -0
- package/rules/rust/rust.correctness.unbounded-channel.rule.yaml +49 -0
- package/rules/rust/rust.correctness.unchecked-index.rule.yaml +46 -0
- package/rules/rust/rust.security.actix-wildcard-cors-with-credentials.rule.yaml +13 -0
- package/rules/rust/rust.security.axum-body-limit-disabled.rule.yaml +13 -0
- package/rules/rust/rust.security.axum-insecure-cors-with-credentials.rule.yaml +13 -0
- package/rules/rust/rust.security.bind-all-interfaces.rule.yaml +57 -0
- package/rules/rust/rust.security.insecure-ssh-host-key.rule.yaml +57 -0
- package/rules/rust/rust.security.insecure-ssl-protocol.rule.yaml +57 -0
- package/rules/rust/rust.security.insecure-temp-file.rule.yaml +57 -0
- package/rules/rust/rust.security.insecure-yaml-load.rule.yaml +57 -0
- package/rules/rust/rust.security.jwt-without-verification.rule.yaml +57 -0
- package/rules/rust/rust.security.panic-in-async-handler.rule.yaml +57 -0
- package/rules/rust/rust.security.rocket-panic-prone-request-handler.rule.yaml +13 -0
- package/rules/rust/rust.security.rocket-unsafe-template-output.rule.yaml +13 -0
- package/rules/rust/rust.security.shell-command-spawn.rule.yaml +57 -0
- package/rules/rust/rust.security.sqlx-diesel-raw-interpolated-query.rule.yaml +13 -0
- package/rules/rust/rust.security.template-unescaped-request-value.rule.yaml +10 -0
- package/rules/rust/rust.security.tls-missing-min-version.rule.yaml +57 -0
- package/rules/rust/rust.security.warp-blocking-or-panic-in-async-handler.rule.yaml +13 -0
- package/rules/rust/rust.security.weak-crypto-import.rule.yaml +55 -0
- package/rules/rust/rust.security.weak-rsa-key-size.rule.yaml +57 -0
- package/rules/rust/rust.security.weak-tls-cipher.rule.yaml +57 -0
- package/rules/shared/security.archive-path-traversal.rule.yaml +10 -0
- package/rules/shared/security.external-file-upload.rule.yaml +10 -0
- package/rules/shared/security.insecure-http-transport.rule.yaml +10 -0
- package/rules/shared/security.no-command-execution-with-request-input.rule.yaml +10 -0
- package/rules/shared/security.no-hardcoded-credentials.rule.yaml +10 -0
- package/rules/shared/security.no-request-path-file-read.rule.yaml +10 -0
- package/rules/shared/security.no-sensitive-data-in-logs-and-telemetry.rule.yaml +10 -0
- package/rules/shared/security.no-sql-interpolation.rule.yaml +10 -0
- package/rules/shared/security.permissive-file-permissions.rule.yaml +10 -0
- package/rules/shared/security.sensitive-data-egress.rule.yaml +10 -0
- package/rules/shared/security.tls-verification-disabled.rule.yaml +10 -0
- package/rules/shared/security.unsafe-deserialization.rule.yaml +10 -0
- package/rules/shared/security.weak-hash-algorithm.rule.yaml +10 -0
- package/rules/typescript/ts.correctness.array-callback-missing-return.rule.yaml +35 -0
- package/rules/typescript/ts.correctness.array-sort-without-compare.rule.yaml +35 -0
- package/rules/typescript/ts.correctness.control-flow-in-finally.rule.yaml +35 -0
- package/rules/typescript/ts.correctness.duplicate-if-else-condition.rule.yaml +35 -0
- package/rules/typescript/ts.correctness.for-in-on-array.rule.yaml +35 -0
- package/rules/typescript/ts.correctness.infinite-loop.rule.yaml +32 -0
- package/rules/typescript/ts.correctness.invalid-await-expression.rule.yaml +32 -0
- package/rules/typescript/ts.correctness.invalid-typeof-comparison.rule.yaml +35 -0
- package/rules/typescript/ts.correctness.missing-async-on-promise-method.rule.yaml +32 -0
- package/rules/typescript/ts.correctness.missing-super-call.rule.yaml +35 -0
- package/rules/typescript/ts.correctness.no-floating-promise-in-function.rule.yaml +32 -0
- package/rules/typescript/ts.correctness.no-misused-promises.rule.yaml +32 -0
- package/rules/typescript/ts.correctness.promise-reject-non-error.rule.yaml +35 -0
- package/rules/typescript/ts.correctness.this-before-super.rule.yaml +35 -0
- package/rules/typescript/ts.correctness.unnecessary-return-await.rule.yaml +32 -0
- package/rules/typescript/ts.correctness.use-number-is-nan.rule.yaml +35 -0
- package/rules/typescript/ts.next.server-action-missing-local-auth.rule.yaml +13 -0
- package/rules/typescript/ts.performance.no-await-in-loop.rule.yaml +32 -0
- package/rules/typescript/ts.quality.no-empty-function.rule.yaml +32 -0
- package/rules/typescript/ts.react.no-bind-in-jsx-props.rule.yaml +36 -0
- package/rules/typescript/ts.react.no-children-prop.rule.yaml +34 -0
- package/rules/typescript/ts.react.no-direct-state-mutation.rule.yaml +34 -0
- package/rules/typescript/ts.react.no-duplicate-jsx-attributes.rule.yaml +34 -0
- package/rules/typescript/ts.react.no-jsx-props-spread.rule.yaml +35 -0
- package/rules/typescript/ts.react.no-set-state-in-component-did-mount.rule.yaml +34 -0
- package/rules/typescript/ts.react.no-set-state-in-component-did-update.rule.yaml +34 -0
- package/rules/typescript/ts.react.no-target-blank-without-rel.rule.yaml +46 -0
- package/rules/typescript/ts.react.no-this-in-function-component.rule.yaml +34 -0
- package/rules/typescript/ts.runtime.no-process-exit.rule.yaml +44 -0
- package/rules/typescript/ts.security.ajv-insecure-configuration.rule.yaml +10 -0
- package/rules/typescript/ts.security.angular-dom-sanitizer-bypass-untrusted-input.rule.yaml +13 -0
- package/rules/typescript/ts.security.apollo-server-csrf-disabled.rule.yaml +16 -0
- package/rules/typescript/ts.security.apollo-server-graphql-dev-tooling-exposure.rule.yaml +16 -0
- package/rules/typescript/ts.security.apollo-server-introspection-exposure.rule.yaml +16 -0
- package/rules/typescript/ts.security.apollo-server-missing-query-limits.rule.yaml +16 -0
- package/rules/typescript/ts.security.astro-vite-public-secret-define.rule.yaml +13 -0
- package/rules/typescript/ts.security.bind-to-all-interfaces.rule.yaml +10 -0
- package/rules/typescript/ts.security.browser-token-storage.rule.yaml +10 -0
- package/rules/typescript/ts.security.dangerous-insert-html.rule.yaml +10 -0
- package/rules/typescript/ts.security.dangerously-set-inner-html.rule.yaml +10 -0
- package/rules/typescript/ts.security.datadog-browser-track-user-interactions.rule.yaml +10 -0
- package/rules/typescript/ts.security.debug-mode-enabled.rule.yaml +10 -0
- package/rules/typescript/ts.security.debug-statement-in-source.rule.yaml +10 -0
- package/rules/typescript/ts.security.dynamodb-query-injection.rule.yaml +10 -0
- package/rules/typescript/ts.security.electron-dangerous-webpreferences.rule.yaml +10 -0
- package/rules/typescript/ts.security.electron-insecure-local-state.rule.yaml +10 -0
- package/rules/typescript/ts.security.electron-missing-ipc-origin-check.rule.yaml +10 -0
- package/rules/typescript/ts.security.electron-shell-open-external-unvalidated.rule.yaml +13 -0
- package/rules/typescript/ts.security.exposed-directory-listing.rule.yaml +10 -0
- package/rules/typescript/ts.security.express-cookie-missing-http-only.rule.yaml +16 -0
- package/rules/typescript/ts.security.express-default-cookie-config.rule.yaml +16 -0
- package/rules/typescript/ts.security.express-default-session-config.rule.yaml +16 -0
- package/rules/typescript/ts.security.express-error-handler-information-disclosure.rule.yaml +16 -0
- package/rules/typescript/ts.security.express-insecure-cookie.rule.yaml +16 -0
- package/rules/typescript/ts.security.express-missing-helmet.rule.yaml +16 -0
- package/rules/typescript/ts.security.express-nosql-injection.rule.yaml +16 -0
- package/rules/typescript/ts.security.express-permissive-cookie-config.rule.yaml +16 -0
- package/rules/typescript/ts.security.express-permissive-cors.rule.yaml +52 -0
- package/rules/typescript/ts.security.express-reduce-fingerprint.rule.yaml +16 -0
- package/rules/typescript/ts.security.express-static-assets-after-session.rule.yaml +16 -0
- package/rules/typescript/ts.security.express-static-dotfiles-allow.rule.yaml +16 -0
- package/rules/typescript/ts.security.express-unbounded-body-parser.rule.yaml +16 -0
- package/rules/typescript/ts.security.express-user-controlled-static-mount.rule.yaml +16 -0
- package/rules/typescript/ts.security.external-file-upload.rule.yaml +10 -0
- package/rules/typescript/ts.security.fastify-excessive-body-limit.rule.yaml +16 -0
- package/rules/typescript/ts.security.fastify-public-bind-without-trust-proxy.rule.yaml +16 -0
- package/rules/typescript/ts.security.file-generation.rule.yaml +10 -0
- package/rules/typescript/ts.security.format-string-using-user-input.rule.yaml +10 -0
- package/rules/typescript/ts.security.frontend-only-authorization.rule.yaml +10 -0
- package/rules/typescript/ts.security.graphql-upload-without-csrf-guard.rule.yaml +16 -0
- package/rules/typescript/ts.security.handlebars-no-escape.rule.yaml +10 -0
- package/rules/typescript/ts.security.hardcoded-auth-secret.rule.yaml +10 -0
- package/rules/typescript/ts.security.iframe-missing-sandbox-attribute.rule.yaml +10 -0
- package/rules/typescript/ts.security.import-using-user-input.rule.yaml +10 -0
- package/rules/typescript/ts.security.information-leakage.rule.yaml +10 -0
- package/rules/typescript/ts.security.insecure-allow-origin.rule.yaml +10 -0
- package/rules/typescript/ts.security.insecure-auth-cookie-flags.rule.yaml +10 -0
- package/rules/typescript/ts.security.insecure-content-security-policy-literal.rule.yaml +10 -0
- package/rules/typescript/ts.security.insecure-helmet-hardening-options.rule.yaml +10 -0
- package/rules/typescript/ts.security.insecure-password-hash-configuration.rule.yaml +10 -0
- package/rules/typescript/ts.security.insecure-websocket-transport.rule.yaml +10 -0
- package/rules/typescript/ts.security.insufficiently-random-values.rule.yaml +10 -0
- package/rules/typescript/ts.security.jwt-insecure-signing-algorithm.rule.yaml +10 -0
- package/rules/typescript/ts.security.jwt-not-revoked.rule.yaml +10 -0
- package/rules/typescript/ts.security.jwt-sensitive-claims.rule.yaml +10 -0
- package/rules/typescript/ts.security.legacy-buffer-constructor.rule.yaml +10 -0
- package/rules/typescript/ts.security.log-injection.rule.yaml +10 -0
- package/rules/typescript/ts.security.manual-html-sanitization.rule.yaml +10 -0
- package/rules/typescript/ts.security.missing-authorization-before-sensitive-action.rule.yaml +10 -0
- package/rules/typescript/ts.security.missing-integrity-check.rule.yaml +10 -0
- package/rules/typescript/ts.security.missing-message-origin-check.rule.yaml +10 -0
- package/rules/typescript/ts.security.missing-ownership-validation.rule.yaml +10 -0
- package/rules/typescript/ts.security.missing-request-timeout-or-retry.rule.yaml +10 -0
- package/rules/typescript/ts.security.nestjs-helmet-after-route-mount.rule.yaml +16 -0
- package/rules/typescript/ts.security.nestjs-missing-global-validation-pipe.rule.yaml +16 -0
- package/rules/typescript/ts.security.nestjs-skip-throttle-sensitive-route.rule.yaml +16 -0
- package/rules/typescript/ts.security.nestjs-validation-pipe-without-whitelist.rule.yaml +16 -0
- package/rules/typescript/ts.security.no-alert-confirm-prompt.rule.yaml +44 -0
- package/rules/typescript/ts.security.no-arguments-callee.rule.yaml +44 -0
- package/rules/typescript/ts.security.no-assign-mutable-export.rule.yaml +45 -0
- package/rules/typescript/ts.security.no-dynamic-execution.rule.yaml +10 -0
- package/rules/typescript/ts.security.no-fs-readfile-sync-in-handler.rule.yaml +46 -0
- package/rules/typescript/ts.security.no-global-native-reassignment.rule.yaml +44 -0
- package/rules/typescript/ts.security.no-innerhtml-assignment.rule.yaml +10 -0
- package/rules/typescript/ts.security.no-javascript-url.rule.yaml +44 -0
- package/rules/typescript/ts.security.no-native-prototype-extension.rule.yaml +44 -0
- package/rules/typescript/ts.security.no-sync-child-process-exec.rule.yaml +45 -0
- package/rules/typescript/ts.security.no-throw-literal.rule.yaml +44 -0
- package/rules/typescript/ts.security.no-with-statement.rule.yaml +44 -0
- package/rules/typescript/ts.security.non-literal-fs-filename.rule.yaml +10 -0
- package/rules/typescript/ts.security.nuxt-public-runtime-secret.rule.yaml +13 -0
- package/rules/typescript/ts.security.observable-timing-discrepancy.rule.yaml +10 -0
- package/rules/typescript/ts.security.open-redirect.rule.yaml +10 -0
- package/rules/typescript/ts.security.permissive-allow-origin.rule.yaml +10 -0
- package/rules/typescript/ts.security.permissive-file-permissions.rule.yaml +10 -0
- package/rules/typescript/ts.security.postmessage-wildcard-origin.rule.yaml +10 -0
- package/rules/typescript/ts.security.predictable-token-generation.rule.yaml +10 -0
- package/rules/typescript/ts.security.raw-html-using-user-input.rule.yaml +10 -0
- package/rules/typescript/ts.security.request-driven-array-index-access.rule.yaml +10 -0
- package/rules/typescript/ts.security.sensitive-data-egress.rule.yaml +10 -0
- package/rules/typescript/ts.security.sensitive-data-in-exception.rule.yaml +10 -0
- package/rules/typescript/ts.security.sensitive-data-written-to-file.rule.yaml +10 -0
- package/rules/typescript/ts.security.ssrf.rule.yaml +10 -0
- package/rules/typescript/ts.security.token-or-session-not-validated.rule.yaml +10 -0
- package/rules/typescript/ts.security.ui-redress.rule.yaml +10 -0
- package/rules/typescript/ts.security.unsafe-dirname-path-concat.rule.yaml +44 -0
- package/rules/typescript/ts.security.unsafe-dompurify-version.rule.yaml +10 -0
- package/rules/typescript/ts.security.unsafe-marked-version.rule.yaml +10 -0
- package/rules/typescript/ts.security.unsanitized-http-response.rule.yaml +10 -0
- package/rules/typescript/ts.security.unvalidated-external-input.rule.yaml +10 -0
- package/rules/typescript/ts.security.user-controlled-sendfile.rule.yaml +10 -0
- package/rules/typescript/ts.security.user-controlled-view-render.rule.yaml +10 -0
- package/rules/typescript/ts.security.weak-cipher-or-mode.rule.yaml +10 -0
- package/rules/typescript/ts.security.weak-key-strength.rule.yaml +10 -0
- package/rules/typescript/ts.security.weak-tls-version.rule.yaml +10 -0
- package/rules/typescript/ts.security.xml-parse-string-with-untrusted-input.rule.yaml +10 -0
|
@@ -5,6 +5,15 @@ metadata:
|
|
|
5
5
|
title: Path traversal via user input
|
|
6
6
|
summary: File access calls must not use request-controlled paths directly.
|
|
7
7
|
rationale: User-controlled paths can escape the intended directory and expose sensitive files.
|
|
8
|
+
detection:
|
|
9
|
+
kind: pattern
|
|
10
|
+
references:
|
|
11
|
+
- kind: cwe
|
|
12
|
+
id: CWE-434
|
|
13
|
+
title: Unrestricted Upload of File with Dangerous Type
|
|
14
|
+
- kind: owasp
|
|
15
|
+
title: File Upload Cheat Sheet
|
|
16
|
+
url: https://cheatsheetseries.owasp.org/cheatsheets/File_Upload_Cheat_Sheet.html
|
|
8
17
|
tags:
|
|
9
18
|
- security
|
|
10
19
|
- filesystem
|
|
@@ -40,3 +49,4 @@ emit:
|
|
|
40
49
|
summary: "`${captures.fileRead.text}` reads from a path derived from request data without an allowlist or boundary check."
|
|
41
50
|
remediation:
|
|
42
51
|
summary: Resolve the path against a trusted base directory and reject values that escape it.
|
|
52
|
+
|
|
@@ -5,6 +5,15 @@ metadata:
|
|
|
5
5
|
title: Avoid sensitive data in logs and telemetry
|
|
6
6
|
summary: Sensitive fields should not be sent to logging, tracing, or analytics sinks.
|
|
7
7
|
rationale: Observability payloads often leave the service boundary and can expose secrets, account identifiers, or personal data if they carry raw request or user fields.
|
|
8
|
+
detection:
|
|
9
|
+
kind: pattern
|
|
10
|
+
references:
|
|
11
|
+
- kind: cwe
|
|
12
|
+
id: CWE-532
|
|
13
|
+
title: Insertion of Sensitive Information into Log File
|
|
14
|
+
- kind: owasp
|
|
15
|
+
title: Logging Cheat Sheet
|
|
16
|
+
url: https://cheatsheetseries.owasp.org/cheatsheets/Logging_Cheat_Sheet.html
|
|
8
17
|
tags:
|
|
9
18
|
- security
|
|
10
19
|
- privacy
|
|
@@ -42,3 +51,4 @@ emit:
|
|
|
42
51
|
summary: "`${captures.issue.text}` reaches a logging or telemetry sink with sensitive data."
|
|
43
52
|
remediation:
|
|
44
53
|
summary: Redact, hash, or drop the sensitive field before it reaches the sink.
|
|
54
|
+
|
|
@@ -5,6 +5,15 @@ metadata:
|
|
|
5
5
|
title: Avoid raw or interpolated SQL
|
|
6
6
|
summary: Database query sinks must not receive request-driven or dynamically interpolated SQL text.
|
|
7
7
|
rationale: Raw or interpolated SQL can let attackers control query structure when values are not passed separately.
|
|
8
|
+
detection:
|
|
9
|
+
kind: pattern
|
|
10
|
+
references:
|
|
11
|
+
- kind: cwe
|
|
12
|
+
id: CWE-89
|
|
13
|
+
title: SQL Injection
|
|
14
|
+
- kind: owasp
|
|
15
|
+
title: SQL Injection Prevention Cheat Sheet
|
|
16
|
+
url: https://cheatsheetseries.owasp.org/cheatsheets/SQL_Injection_Prevention_Cheat_Sheet.html
|
|
8
17
|
tags:
|
|
9
18
|
- security
|
|
10
19
|
- sql
|
|
@@ -40,3 +49,4 @@ emit:
|
|
|
40
49
|
summary: "`${captures.queryCall.text}` builds or forwards SQL text directly into a raw query sink."
|
|
41
50
|
remediation:
|
|
42
51
|
summary: Use prepared statements, placeholder parameters, or a typed query builder instead of executing raw SQL text.
|
|
52
|
+
|
|
@@ -5,6 +5,15 @@ metadata:
|
|
|
5
5
|
title: Avoid world-readable or world-writable file permissions
|
|
6
6
|
summary: File creation and permission changes should not grant broad local access.
|
|
7
7
|
rationale: Broad permissions expose application data to local users or processes that should not read or modify it.
|
|
8
|
+
detection:
|
|
9
|
+
kind: pattern
|
|
10
|
+
references:
|
|
11
|
+
- kind: cwe
|
|
12
|
+
id: CWE-732
|
|
13
|
+
title: Incorrect Permission Assignment for Critical Resource
|
|
14
|
+
- kind: owasp
|
|
15
|
+
title: File Permission
|
|
16
|
+
url: https://owasp.org/www-community/vulnerabilities/Improper_File_Permissions
|
|
8
17
|
tags:
|
|
9
18
|
- security
|
|
10
19
|
- filesystem
|
|
@@ -38,3 +47,4 @@ emit:
|
|
|
38
47
|
summary: "`${captures.issue.text}` grants world-readable or world-writable filesystem access."
|
|
39
48
|
remediation:
|
|
40
49
|
summary: Use least-privilege file modes and avoid world-readable or world-writable permissions.
|
|
50
|
+
|
|
@@ -5,6 +5,15 @@ metadata:
|
|
|
5
5
|
title: Sensitive data egress to third-party processors
|
|
6
6
|
summary: Sensitive values should not be sent to external processors or outbound SDKs without minimization or redaction.
|
|
7
7
|
rationale: Sending regulated or secret data to third-party services increases privacy exposure and creates downstream processor risk.
|
|
8
|
+
detection:
|
|
9
|
+
kind: pattern
|
|
10
|
+
references:
|
|
11
|
+
- kind: cwe
|
|
12
|
+
id: CWE-200
|
|
13
|
+
title: Exposure of Sensitive Information to an Unauthorized Actor
|
|
14
|
+
- kind: owasp
|
|
15
|
+
title: Logging Cheat Sheet
|
|
16
|
+
url: https://cheatsheetseries.owasp.org/cheatsheets/Logging_Cheat_Sheet.html
|
|
8
17
|
tags:
|
|
9
18
|
- security
|
|
10
19
|
- privacy
|
|
@@ -34,3 +43,4 @@ emit:
|
|
|
34
43
|
summary: "`${captures.issue.text}` sends request or identity data to an outbound processor."
|
|
35
44
|
remediation:
|
|
36
45
|
summary: Minimize the payload, redact sensitive fields, or route the data only to approved processors.
|
|
46
|
+
|
|
@@ -5,6 +5,15 @@ metadata:
|
|
|
5
5
|
title: TLS verification disabled
|
|
6
6
|
summary: Transport clients should not disable certificate verification.
|
|
7
7
|
rationale: Trust-all TLS settings accept any certificate and undermine transport security.
|
|
8
|
+
detection:
|
|
9
|
+
kind: pattern
|
|
10
|
+
references:
|
|
11
|
+
- kind: cwe
|
|
12
|
+
id: CWE-319
|
|
13
|
+
title: Cleartext Transmission of Sensitive Information
|
|
14
|
+
- kind: owasp
|
|
15
|
+
title: Transport Layer Security Cheat Sheet
|
|
16
|
+
url: https://cheatsheetseries.owasp.org/cheatsheets/Transport_Layer_Security_Cheat_Sheet.html
|
|
8
17
|
tags:
|
|
9
18
|
- security
|
|
10
19
|
- transport
|
|
@@ -40,3 +49,4 @@ emit:
|
|
|
40
49
|
summary: "`${captures.issue.text}` disables certificate verification or trust validation."
|
|
41
50
|
remediation:
|
|
42
51
|
summary: Use trusted certificate validation and remove trust-all overrides outside local development.
|
|
52
|
+
|
|
@@ -5,6 +5,15 @@ metadata:
|
|
|
5
5
|
title: Protect deserialization trust boundaries
|
|
6
6
|
summary: Deserializers should not consume untrusted payloads directly across a trust boundary.
|
|
7
7
|
rationale: Deserializing untrusted payloads can let attacker-controlled data reshape parser state, object graphs, or downstream runtime behavior.
|
|
8
|
+
detection:
|
|
9
|
+
kind: pattern
|
|
10
|
+
references:
|
|
11
|
+
- kind: cwe
|
|
12
|
+
id: CWE-502
|
|
13
|
+
title: Deserialization of Untrusted Data
|
|
14
|
+
- kind: owasp
|
|
15
|
+
title: Deserialization Cheat Sheet
|
|
16
|
+
url: https://cheatsheetseries.owasp.org/cheatsheets/Deserialization_Cheat_Sheet.html
|
|
8
17
|
tags:
|
|
9
18
|
- security
|
|
10
19
|
- deserialization
|
|
@@ -39,3 +48,4 @@ emit:
|
|
|
39
48
|
summary: "`${captures.issue.text}` deserializes an untrusted payload across a trust boundary."
|
|
40
49
|
remediation:
|
|
41
50
|
summary: Deserialize only from trusted producers, or validate and constrain the payload shape before crossing the deserialization boundary.
|
|
51
|
+
|
|
@@ -5,6 +5,15 @@ metadata:
|
|
|
5
5
|
title: Avoid weak hash algorithms
|
|
6
6
|
summary: Cryptographic hashing should use modern, collision-resistant algorithms.
|
|
7
7
|
rationale: Weak digests such as MD5 and SHA-1 are vulnerable to collisions and should not be used for security-sensitive hashing.
|
|
8
|
+
detection:
|
|
9
|
+
kind: pattern
|
|
10
|
+
references:
|
|
11
|
+
- kind: cwe
|
|
12
|
+
id: CWE-327
|
|
13
|
+
title: Use of a Broken or Risky Cryptographic Algorithm
|
|
14
|
+
- kind: owasp
|
|
15
|
+
title: Cryptographic Storage Cheat Sheet
|
|
16
|
+
url: https://cheatsheetseries.owasp.org/cheatsheets/Cryptographic_Storage_Cheat_Sheet.html
|
|
8
17
|
tags:
|
|
9
18
|
- security
|
|
10
19
|
- crypto
|
|
@@ -39,3 +48,4 @@ emit:
|
|
|
39
48
|
summary: "`${captures.issue.text}` uses a weak hash algorithm."
|
|
40
49
|
remediation:
|
|
41
50
|
summary: Use SHA-256, SHA-384, SHA-512, or a stronger approved hashing primitive instead.
|
|
51
|
+
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
apiVersion: critiq.dev/v1alpha1
|
|
2
|
+
kind: Rule
|
|
3
|
+
metadata:
|
|
4
|
+
id: ts.correctness.array-callback-missing-return
|
|
5
|
+
title: Array callback missing return
|
|
6
|
+
summary: Array iteration callbacks with block bodies should return a value when required.
|
|
7
|
+
rationale: map, filter, reduce, every, and some expect callback return values; missing returns yield undefined elements or incorrect predicates.
|
|
8
|
+
tags:
|
|
9
|
+
- correctness
|
|
10
|
+
- language
|
|
11
|
+
- rules-catalog
|
|
12
|
+
- crq-cor-032
|
|
13
|
+
stability: stable
|
|
14
|
+
appliesTo: file
|
|
15
|
+
scope:
|
|
16
|
+
languages:
|
|
17
|
+
- typescript
|
|
18
|
+
- javascript
|
|
19
|
+
match:
|
|
20
|
+
fact:
|
|
21
|
+
kind: language.array-callback-missing-return
|
|
22
|
+
bind: issue
|
|
23
|
+
emit:
|
|
24
|
+
finding:
|
|
25
|
+
category: correctness.language
|
|
26
|
+
severity: medium
|
|
27
|
+
confidence: 0.88
|
|
28
|
+
tags:
|
|
29
|
+
- correctness
|
|
30
|
+
- language
|
|
31
|
+
message:
|
|
32
|
+
title: Add a return to the array callback
|
|
33
|
+
summary: "`${captures.issue.text}` is a block-bodied array callback without a return statement."
|
|
34
|
+
remediation:
|
|
35
|
+
summary: Return the computed value from the callback, or switch to forEach when side effects are intended.
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
apiVersion: critiq.dev/v1alpha1
|
|
2
|
+
kind: Rule
|
|
3
|
+
metadata:
|
|
4
|
+
id: ts.correctness.array-sort-without-compare
|
|
5
|
+
title: Array.sort without compare function
|
|
6
|
+
summary: Provide a compare function when sorting non-string arrays.
|
|
7
|
+
rationale: Default sort coerces elements to strings, which misorders numbers and many objects.
|
|
8
|
+
tags:
|
|
9
|
+
- correctness
|
|
10
|
+
- language
|
|
11
|
+
- rules-catalog
|
|
12
|
+
- crq-cor-036
|
|
13
|
+
stability: stable
|
|
14
|
+
appliesTo: file
|
|
15
|
+
scope:
|
|
16
|
+
languages:
|
|
17
|
+
- typescript
|
|
18
|
+
- javascript
|
|
19
|
+
match:
|
|
20
|
+
fact:
|
|
21
|
+
kind: language.array-sort-without-compare
|
|
22
|
+
bind: issue
|
|
23
|
+
emit:
|
|
24
|
+
finding:
|
|
25
|
+
category: correctness.language
|
|
26
|
+
severity: medium
|
|
27
|
+
confidence: 0.88
|
|
28
|
+
tags:
|
|
29
|
+
- correctness
|
|
30
|
+
- language
|
|
31
|
+
message:
|
|
32
|
+
title: Pass a compare function to sort
|
|
33
|
+
summary: "`${captures.issue.text}` calls sort() without a comparator."
|
|
34
|
+
remediation:
|
|
35
|
+
summary: Pass an explicit compare function, for example `(a, b) => a - b` for numbers.
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
apiVersion: critiq.dev/v1alpha1
|
|
2
|
+
kind: Rule
|
|
3
|
+
metadata:
|
|
4
|
+
id: ts.correctness.control-flow-in-finally
|
|
5
|
+
title: Control flow in finally block
|
|
6
|
+
summary: Avoid return, throw, break, or continue inside finally blocks.
|
|
7
|
+
rationale: Control-flow statements in finally override try/catch completion and can hide errors or skip cleanup intent.
|
|
8
|
+
tags:
|
|
9
|
+
- correctness
|
|
10
|
+
- language
|
|
11
|
+
- rules-catalog
|
|
12
|
+
- crq-cor-028
|
|
13
|
+
stability: stable
|
|
14
|
+
appliesTo: file
|
|
15
|
+
scope:
|
|
16
|
+
languages:
|
|
17
|
+
- typescript
|
|
18
|
+
- javascript
|
|
19
|
+
match:
|
|
20
|
+
fact:
|
|
21
|
+
kind: language.control-flow-in-finally
|
|
22
|
+
bind: issue
|
|
23
|
+
emit:
|
|
24
|
+
finding:
|
|
25
|
+
category: correctness.control-flow
|
|
26
|
+
severity: medium
|
|
27
|
+
confidence: 0.9
|
|
28
|
+
tags:
|
|
29
|
+
- correctness
|
|
30
|
+
- language
|
|
31
|
+
message:
|
|
32
|
+
title: Remove control flow from finally
|
|
33
|
+
summary: "`${captures.issue.text}` changes completion inside a finally block."
|
|
34
|
+
remediation:
|
|
35
|
+
summary: Move return, throw, break, or continue out of the finally block, or restructure the try/finally logic.
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
apiVersion: critiq.dev/v1alpha1
|
|
2
|
+
kind: Rule
|
|
3
|
+
metadata:
|
|
4
|
+
id: ts.correctness.duplicate-if-else-condition
|
|
5
|
+
title: Duplicate if-else-if condition
|
|
6
|
+
summary: Do not repeat the same test in an if-else-if chain.
|
|
7
|
+
rationale: Duplicate conditions create unreachable branches and usually indicate a copy-paste defect.
|
|
8
|
+
tags:
|
|
9
|
+
- correctness
|
|
10
|
+
- language
|
|
11
|
+
- rules-catalog
|
|
12
|
+
- crq-cor-031
|
|
13
|
+
stability: stable
|
|
14
|
+
appliesTo: file
|
|
15
|
+
scope:
|
|
16
|
+
languages:
|
|
17
|
+
- typescript
|
|
18
|
+
- javascript
|
|
19
|
+
match:
|
|
20
|
+
fact:
|
|
21
|
+
kind: language.duplicate-if-else-condition
|
|
22
|
+
bind: issue
|
|
23
|
+
emit:
|
|
24
|
+
finding:
|
|
25
|
+
category: correctness.language
|
|
26
|
+
severity: medium
|
|
27
|
+
confidence: 0.9
|
|
28
|
+
tags:
|
|
29
|
+
- correctness
|
|
30
|
+
- language
|
|
31
|
+
message:
|
|
32
|
+
title: Remove duplicate if condition
|
|
33
|
+
summary: "`${captures.issue.text}` repeats a prior if-else-if test."
|
|
34
|
+
remediation:
|
|
35
|
+
summary: Remove the duplicate branch or change the condition to the intended distinct test.
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
apiVersion: critiq.dev/v1alpha1
|
|
2
|
+
kind: Rule
|
|
3
|
+
metadata:
|
|
4
|
+
id: ts.correctness.for-in-on-array
|
|
5
|
+
title: for-in over array-like value
|
|
6
|
+
summary: Prefer for-of or index loops instead of for-in on arrays.
|
|
7
|
+
rationale: for-in enumerates keys (often as strings) and may include inherited properties; for-of iterates values safely.
|
|
8
|
+
tags:
|
|
9
|
+
- correctness
|
|
10
|
+
- language
|
|
11
|
+
- rules-catalog
|
|
12
|
+
- crq-cor-037
|
|
13
|
+
stability: stable
|
|
14
|
+
appliesTo: file
|
|
15
|
+
scope:
|
|
16
|
+
languages:
|
|
17
|
+
- typescript
|
|
18
|
+
- javascript
|
|
19
|
+
match:
|
|
20
|
+
fact:
|
|
21
|
+
kind: language.for-in-on-array
|
|
22
|
+
bind: issue
|
|
23
|
+
emit:
|
|
24
|
+
finding:
|
|
25
|
+
category: correctness.language
|
|
26
|
+
severity: medium
|
|
27
|
+
confidence: 0.85
|
|
28
|
+
tags:
|
|
29
|
+
- correctness
|
|
30
|
+
- language
|
|
31
|
+
message:
|
|
32
|
+
title: Avoid for-in on arrays
|
|
33
|
+
summary: "`${captures.issue.text}` uses for-in on a value that looks like an array."
|
|
34
|
+
remediation:
|
|
35
|
+
summary: Use `for (const item of array)` or indexed iteration instead of for-in.
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
apiVersion: critiq.dev/v1alpha1
|
|
2
|
+
kind: Rule
|
|
3
|
+
metadata:
|
|
4
|
+
id: ts.correctness.infinite-loop
|
|
5
|
+
title: Infinite Loop
|
|
6
|
+
summary: Detect obvious infinite loops
|
|
7
|
+
rationale: Detect obvious infinite loops:while (true) and for(;;) without break, return, or throw in the loop body.
|
|
8
|
+
tags:
|
|
9
|
+
- correctness
|
|
10
|
+
- rules-catalog
|
|
11
|
+
stability: stable
|
|
12
|
+
appliesTo: block
|
|
13
|
+
scope:
|
|
14
|
+
languages:
|
|
15
|
+
- typescript
|
|
16
|
+
- javascript
|
|
17
|
+
match:
|
|
18
|
+
fact:
|
|
19
|
+
kind: async.infinite-loop
|
|
20
|
+
bind: issue
|
|
21
|
+
emit:
|
|
22
|
+
finding:
|
|
23
|
+
category: correctness
|
|
24
|
+
severity: high
|
|
25
|
+
confidence: 0.85
|
|
26
|
+
tags:
|
|
27
|
+
- correctness
|
|
28
|
+
message:
|
|
29
|
+
title: Infinite Loop
|
|
30
|
+
summary: "`${captures.issue.text}` matches ts.correctness.infinite-loop."
|
|
31
|
+
remediation:
|
|
32
|
+
summary: Detect obvious infinite loops:while (true) and for(;;) without break, return, or throw in the loop body.
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
apiVersion: critiq.dev/v1alpha1
|
|
2
|
+
kind: Rule
|
|
3
|
+
metadata:
|
|
4
|
+
id: ts.correctness.invalid-await-expression
|
|
5
|
+
title: Invalid Await Expression
|
|
6
|
+
summary: Await only promise-like values
|
|
7
|
+
rationale: Await only promise-like values:await on literals or clearly synchronous calls is usually a mistake.
|
|
8
|
+
tags:
|
|
9
|
+
- correctness
|
|
10
|
+
- rules-catalog
|
|
11
|
+
stability: stable
|
|
12
|
+
appliesTo: block
|
|
13
|
+
scope:
|
|
14
|
+
languages:
|
|
15
|
+
- typescript
|
|
16
|
+
- javascript
|
|
17
|
+
match:
|
|
18
|
+
fact:
|
|
19
|
+
kind: async.invalid-await-expression
|
|
20
|
+
bind: issue
|
|
21
|
+
emit:
|
|
22
|
+
finding:
|
|
23
|
+
category: correctness
|
|
24
|
+
severity: medium
|
|
25
|
+
confidence: 0.85
|
|
26
|
+
tags:
|
|
27
|
+
- correctness
|
|
28
|
+
message:
|
|
29
|
+
title: Invalid Await Expression
|
|
30
|
+
summary: "`${captures.issue.text}` matches ts.correctness.invalid-await-expression."
|
|
31
|
+
remediation:
|
|
32
|
+
summary: Await only promise-like values:await on literals or clearly synchronous calls is usually a mistake.
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
apiVersion: critiq.dev/v1alpha1
|
|
2
|
+
kind: Rule
|
|
3
|
+
metadata:
|
|
4
|
+
id: ts.correctness.invalid-typeof-comparison
|
|
5
|
+
title: Invalid typeof comparison string
|
|
6
|
+
summary: Compare typeof results only to known typeof strings.
|
|
7
|
+
rationale: typeof returns a fixed set of strings; other comparisons are always false.
|
|
8
|
+
tags:
|
|
9
|
+
- correctness
|
|
10
|
+
- language
|
|
11
|
+
- rules-catalog
|
|
12
|
+
- crq-cor-030
|
|
13
|
+
stability: stable
|
|
14
|
+
appliesTo: file
|
|
15
|
+
scope:
|
|
16
|
+
languages:
|
|
17
|
+
- typescript
|
|
18
|
+
- javascript
|
|
19
|
+
match:
|
|
20
|
+
fact:
|
|
21
|
+
kind: language.invalid-typeof-comparison
|
|
22
|
+
bind: issue
|
|
23
|
+
emit:
|
|
24
|
+
finding:
|
|
25
|
+
category: correctness.language
|
|
26
|
+
severity: medium
|
|
27
|
+
confidence: 0.95
|
|
28
|
+
tags:
|
|
29
|
+
- correctness
|
|
30
|
+
- language
|
|
31
|
+
message:
|
|
32
|
+
title: Fix typeof comparison
|
|
33
|
+
summary: "`${captures.issue.text}` compares typeof to a string that typeof never returns."
|
|
34
|
+
remediation:
|
|
35
|
+
summary: Compare against a valid typeof result or use a different type guard (for example Array.isArray).
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
apiVersion: critiq.dev/v1alpha1
|
|
2
|
+
kind: Rule
|
|
3
|
+
metadata:
|
|
4
|
+
id: ts.correctness.missing-async-on-promise-method
|
|
5
|
+
title: Missing Async On Promise Method
|
|
6
|
+
summary: Mark promise callbacks async when using await
|
|
7
|
+
rationale: Mark promise callbacks async when using await:then/catch handlers that use await must be declared async.
|
|
8
|
+
tags:
|
|
9
|
+
- correctness
|
|
10
|
+
- rules-catalog
|
|
11
|
+
stability: stable
|
|
12
|
+
appliesTo: block
|
|
13
|
+
scope:
|
|
14
|
+
languages:
|
|
15
|
+
- typescript
|
|
16
|
+
- javascript
|
|
17
|
+
match:
|
|
18
|
+
fact:
|
|
19
|
+
kind: async.missing-async-on-promise-method
|
|
20
|
+
bind: issue
|
|
21
|
+
emit:
|
|
22
|
+
finding:
|
|
23
|
+
category: correctness
|
|
24
|
+
severity: high
|
|
25
|
+
confidence: 0.85
|
|
26
|
+
tags:
|
|
27
|
+
- correctness
|
|
28
|
+
message:
|
|
29
|
+
title: Missing Async On Promise Method
|
|
30
|
+
summary: "`${captures.issue.text}` matches ts.correctness.missing-async-on-promise-method."
|
|
31
|
+
remediation:
|
|
32
|
+
summary: Mark promise callbacks async when using await:then/catch handlers that use await must be declared async.
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
apiVersion: critiq.dev/v1alpha1
|
|
2
|
+
kind: Rule
|
|
3
|
+
metadata:
|
|
4
|
+
id: ts.correctness.missing-super-call
|
|
5
|
+
title: Missing super() in subclass constructor
|
|
6
|
+
summary: Subclass constructors must call super() before using this.
|
|
7
|
+
rationale: Derived classes must initialize the base class; omitting super() is a runtime error when this is accessed.
|
|
8
|
+
tags:
|
|
9
|
+
- correctness
|
|
10
|
+
- language
|
|
11
|
+
- rules-catalog
|
|
12
|
+
- crq-cor-034
|
|
13
|
+
stability: stable
|
|
14
|
+
appliesTo: file
|
|
15
|
+
scope:
|
|
16
|
+
languages:
|
|
17
|
+
- typescript
|
|
18
|
+
- javascript
|
|
19
|
+
match:
|
|
20
|
+
fact:
|
|
21
|
+
kind: language.missing-super-call
|
|
22
|
+
bind: issue
|
|
23
|
+
emit:
|
|
24
|
+
finding:
|
|
25
|
+
category: correctness.language
|
|
26
|
+
severity: high
|
|
27
|
+
confidence: 0.95
|
|
28
|
+
tags:
|
|
29
|
+
- correctness
|
|
30
|
+
- language
|
|
31
|
+
message:
|
|
32
|
+
title: Call super() in the subclass constructor
|
|
33
|
+
summary: "`${captures.issue.text}` extends a base class but never calls super()."
|
|
34
|
+
remediation:
|
|
35
|
+
summary: Add `super(...)` as the first statement in the constructor (before using this).
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
apiVersion: critiq.dev/v1alpha1
|
|
2
|
+
kind: Rule
|
|
3
|
+
metadata:
|
|
4
|
+
id: ts.correctness.no-floating-promise-in-function
|
|
5
|
+
title: No Floating Promise In Function
|
|
6
|
+
summary: Handle promise-returning calls explicitly
|
|
7
|
+
rationale: Handle promise-returning calls explicitly:statement-level promise calls should be awaited, voided, returned, or chained with rejection handling.
|
|
8
|
+
tags:
|
|
9
|
+
- correctness
|
|
10
|
+
- rules-catalog
|
|
11
|
+
stability: stable
|
|
12
|
+
appliesTo: block
|
|
13
|
+
scope:
|
|
14
|
+
languages:
|
|
15
|
+
- typescript
|
|
16
|
+
- javascript
|
|
17
|
+
match:
|
|
18
|
+
fact:
|
|
19
|
+
kind: async.floating-promise-in-function
|
|
20
|
+
bind: issue
|
|
21
|
+
emit:
|
|
22
|
+
finding:
|
|
23
|
+
category: correctness
|
|
24
|
+
severity: high
|
|
25
|
+
confidence: 0.85
|
|
26
|
+
tags:
|
|
27
|
+
- correctness
|
|
28
|
+
message:
|
|
29
|
+
title: No Floating Promise In Function
|
|
30
|
+
summary: "`${captures.issue.text}` matches ts.correctness.no-floating-promise-in-function."
|
|
31
|
+
remediation:
|
|
32
|
+
summary: Handle promise-returning calls explicitly:statement-level promise calls should be awaited, voided, returned, or chained with rejection handling.
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
apiVersion: critiq.dev/v1alpha1
|
|
2
|
+
kind: Rule
|
|
3
|
+
metadata:
|
|
4
|
+
id: ts.correctness.no-misused-promises
|
|
5
|
+
title: No Misused Promises
|
|
6
|
+
summary: Do not pass async callbacks where sync is expected
|
|
7
|
+
rationale: Do not pass async callbacks where sync is expected:array iteration methods expect synchronous predicates and should not receive async callbacks.
|
|
8
|
+
tags:
|
|
9
|
+
- correctness
|
|
10
|
+
- rules-catalog
|
|
11
|
+
stability: stable
|
|
12
|
+
appliesTo: block
|
|
13
|
+
scope:
|
|
14
|
+
languages:
|
|
15
|
+
- typescript
|
|
16
|
+
- javascript
|
|
17
|
+
match:
|
|
18
|
+
fact:
|
|
19
|
+
kind: async.misused-promises
|
|
20
|
+
bind: issue
|
|
21
|
+
emit:
|
|
22
|
+
finding:
|
|
23
|
+
category: correctness
|
|
24
|
+
severity: medium
|
|
25
|
+
confidence: 0.85
|
|
26
|
+
tags:
|
|
27
|
+
- correctness
|
|
28
|
+
message:
|
|
29
|
+
title: No Misused Promises
|
|
30
|
+
summary: "`${captures.issue.text}` matches ts.correctness.no-misused-promises."
|
|
31
|
+
remediation:
|
|
32
|
+
summary: Do not pass async callbacks where sync is expected:array iteration methods expect synchronous predicates and should not receive async callbacks.
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
apiVersion: critiq.dev/v1alpha1
|
|
2
|
+
kind: Rule
|
|
3
|
+
metadata:
|
|
4
|
+
id: ts.correctness.promise-reject-non-error
|
|
5
|
+
title: Reject or throw non-Error values
|
|
6
|
+
summary: Promise rejections and async throws should use Error objects.
|
|
7
|
+
rationale: Non-Error rejections lose stack traces and are harder to handle consistently in async code.
|
|
8
|
+
tags:
|
|
9
|
+
- correctness
|
|
10
|
+
- async
|
|
11
|
+
- rules-catalog
|
|
12
|
+
- crq-cor-033
|
|
13
|
+
stability: stable
|
|
14
|
+
appliesTo: file
|
|
15
|
+
scope:
|
|
16
|
+
languages:
|
|
17
|
+
- typescript
|
|
18
|
+
- javascript
|
|
19
|
+
match:
|
|
20
|
+
fact:
|
|
21
|
+
kind: language.promise-reject-non-error
|
|
22
|
+
bind: issue
|
|
23
|
+
emit:
|
|
24
|
+
finding:
|
|
25
|
+
category: correctness.async
|
|
26
|
+
severity: medium
|
|
27
|
+
confidence: 0.9
|
|
28
|
+
tags:
|
|
29
|
+
- correctness
|
|
30
|
+
- async
|
|
31
|
+
message:
|
|
32
|
+
title: Use Error for rejections and async throws
|
|
33
|
+
summary: "`${captures.issue.text}` rejects or throws a non-Error literal."
|
|
34
|
+
remediation:
|
|
35
|
+
summary: Reject or throw `new Error(...)` (or a typed Error subclass) instead of a string or other primitive.
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
apiVersion: critiq.dev/v1alpha1
|
|
2
|
+
kind: Rule
|
|
3
|
+
metadata:
|
|
4
|
+
id: ts.correctness.this-before-super
|
|
5
|
+
title: this used before super()
|
|
6
|
+
summary: Do not use this or super members before calling super() in a subclass constructor.
|
|
7
|
+
rationale: Accessing this before super() in a derived constructor throws at runtime.
|
|
8
|
+
tags:
|
|
9
|
+
- correctness
|
|
10
|
+
- language
|
|
11
|
+
- rules-catalog
|
|
12
|
+
- crq-cor-035
|
|
13
|
+
stability: stable
|
|
14
|
+
appliesTo: file
|
|
15
|
+
scope:
|
|
16
|
+
languages:
|
|
17
|
+
- typescript
|
|
18
|
+
- javascript
|
|
19
|
+
match:
|
|
20
|
+
fact:
|
|
21
|
+
kind: language.this-before-super
|
|
22
|
+
bind: issue
|
|
23
|
+
emit:
|
|
24
|
+
finding:
|
|
25
|
+
category: correctness.language
|
|
26
|
+
severity: high
|
|
27
|
+
confidence: 0.95
|
|
28
|
+
tags:
|
|
29
|
+
- correctness
|
|
30
|
+
- language
|
|
31
|
+
message:
|
|
32
|
+
title: Move super() before this access
|
|
33
|
+
summary: "`${captures.issue.text}` uses this or super before super() runs."
|
|
34
|
+
remediation:
|
|
35
|
+
summary: Call `super(...)` before reading or assigning `this` in the constructor.
|