@opensip-cli/checks-universal 0.1.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/LICENSE +202 -0
- package/NOTICE +8 -0
- package/README.md +31 -0
- package/dist/__tests__/all-checks-execute.test.d.ts +17 -0
- package/dist/__tests__/all-checks-execute.test.d.ts.map +1 -0
- package/dist/__tests__/all-checks-execute.test.js +452 -0
- package/dist/__tests__/all-checks-execute.test.js.map +1 -0
- package/dist/__tests__/behavior-fixtures-10.test.d.ts +8 -0
- package/dist/__tests__/behavior-fixtures-10.test.d.ts.map +1 -0
- package/dist/__tests__/behavior-fixtures-10.test.js +200 -0
- package/dist/__tests__/behavior-fixtures-10.test.js.map +1 -0
- package/dist/__tests__/behavior-fixtures-11.test.d.ts +8 -0
- package/dist/__tests__/behavior-fixtures-11.test.d.ts.map +1 -0
- package/dist/__tests__/behavior-fixtures-11.test.js +120 -0
- package/dist/__tests__/behavior-fixtures-11.test.js.map +1 -0
- package/dist/__tests__/behavior-fixtures-12.test.d.ts +8 -0
- package/dist/__tests__/behavior-fixtures-12.test.d.ts.map +1 -0
- package/dist/__tests__/behavior-fixtures-12.test.js +157 -0
- package/dist/__tests__/behavior-fixtures-12.test.js.map +1 -0
- package/dist/__tests__/behavior-fixtures-2.test.d.ts +8 -0
- package/dist/__tests__/behavior-fixtures-2.test.d.ts.map +1 -0
- package/dist/__tests__/behavior-fixtures-2.test.js +785 -0
- package/dist/__tests__/behavior-fixtures-2.test.js.map +1 -0
- package/dist/__tests__/behavior-fixtures-3.test.d.ts +6 -0
- package/dist/__tests__/behavior-fixtures-3.test.d.ts.map +1 -0
- package/dist/__tests__/behavior-fixtures-3.test.js +663 -0
- package/dist/__tests__/behavior-fixtures-3.test.js.map +1 -0
- package/dist/__tests__/behavior-fixtures-4.test.d.ts +5 -0
- package/dist/__tests__/behavior-fixtures-4.test.d.ts.map +1 -0
- package/dist/__tests__/behavior-fixtures-4.test.js +612 -0
- package/dist/__tests__/behavior-fixtures-4.test.js.map +1 -0
- package/dist/__tests__/behavior-fixtures-5.test.d.ts +5 -0
- package/dist/__tests__/behavior-fixtures-5.test.d.ts.map +1 -0
- package/dist/__tests__/behavior-fixtures-5.test.js +469 -0
- package/dist/__tests__/behavior-fixtures-5.test.js.map +1 -0
- package/dist/__tests__/behavior-fixtures-6.test.d.ts +8 -0
- package/dist/__tests__/behavior-fixtures-6.test.d.ts.map +1 -0
- package/dist/__tests__/behavior-fixtures-6.test.js +591 -0
- package/dist/__tests__/behavior-fixtures-6.test.js.map +1 -0
- package/dist/__tests__/behavior-fixtures-7.test.d.ts +5 -0
- package/dist/__tests__/behavior-fixtures-7.test.d.ts.map +1 -0
- package/dist/__tests__/behavior-fixtures-7.test.js +662 -0
- package/dist/__tests__/behavior-fixtures-7.test.js.map +1 -0
- package/dist/__tests__/behavior-fixtures-8.test.d.ts +11 -0
- package/dist/__tests__/behavior-fixtures-8.test.d.ts.map +1 -0
- package/dist/__tests__/behavior-fixtures-8.test.js +634 -0
- package/dist/__tests__/behavior-fixtures-8.test.js.map +1 -0
- package/dist/__tests__/behavior-fixtures-9.test.d.ts +11 -0
- package/dist/__tests__/behavior-fixtures-9.test.d.ts.map +1 -0
- package/dist/__tests__/behavior-fixtures-9.test.js +271 -0
- package/dist/__tests__/behavior-fixtures-9.test.js.map +1 -0
- package/dist/__tests__/behavior-fixtures.test.d.ts +14 -0
- package/dist/__tests__/behavior-fixtures.test.d.ts.map +1 -0
- package/dist/__tests__/behavior-fixtures.test.js +1423 -0
- package/dist/__tests__/behavior-fixtures.test.js.map +1 -0
- package/dist/__tests__/checks.test.d.ts +2 -0
- package/dist/__tests__/checks.test.d.ts.map +1 -0
- package/dist/__tests__/checks.test.js +61 -0
- package/dist/__tests__/checks.test.js.map +1 -0
- package/dist/__tests__/env-var-validation.test.d.ts +14 -0
- package/dist/__tests__/env-var-validation.test.d.ts.map +1 -0
- package/dist/__tests__/env-var-validation.test.js +53 -0
- package/dist/__tests__/env-var-validation.test.js.map +1 -0
- package/dist/__tests__/file-length-limit.test.d.ts +2 -0
- package/dist/__tests__/file-length-limit.test.d.ts.map +1 -0
- package/dist/__tests__/file-length-limit.test.js +29 -0
- package/dist/__tests__/file-length-limit.test.js.map +1 -0
- package/dist/__tests__/fixture-coverage.allowlist.d.ts +18 -0
- package/dist/__tests__/fixture-coverage.allowlist.d.ts.map +1 -0
- package/dist/__tests__/fixture-coverage.allowlist.js +35 -0
- package/dist/__tests__/fixture-coverage.allowlist.js.map +1 -0
- package/dist/__tests__/fixture-coverage.test.d.ts +13 -0
- package/dist/__tests__/fixture-coverage.test.d.ts.map +1 -0
- package/dist/__tests__/fixture-coverage.test.js +57 -0
- package/dist/__tests__/fixture-coverage.test.js.map +1 -0
- package/dist/__tests__/iic.test.d.ts +15 -0
- package/dist/__tests__/iic.test.d.ts.map +1 -0
- package/dist/__tests__/iic.test.js +316 -0
- package/dist/__tests__/iic.test.js.map +1 -0
- package/dist/__tests__/no-skipped-tests.test.d.ts +14 -0
- package/dist/__tests__/no-skipped-tests.test.d.ts.map +1 -0
- package/dist/__tests__/no-skipped-tests.test.js +144 -0
- package/dist/__tests__/no-skipped-tests.test.js.map +1 -0
- package/dist/__tests__/no-todo-comments.test.d.ts +2 -0
- package/dist/__tests__/no-todo-comments.test.d.ts.map +1 -0
- package/dist/__tests__/no-todo-comments.test.js +31 -0
- package/dist/__tests__/no-todo-comments.test.js.map +1 -0
- package/dist/__tests__/no-unimplemented-markers.test.d.ts +2 -0
- package/dist/__tests__/no-unimplemented-markers.test.d.ts.map +1 -0
- package/dist/__tests__/no-unimplemented-markers.test.js +140 -0
- package/dist/__tests__/no-unimplemented-markers.test.js.map +1 -0
- package/dist/__tests__/public-api-jsdoc-scope.test.d.ts +10 -0
- package/dist/__tests__/public-api-jsdoc-scope.test.d.ts.map +1 -0
- package/dist/__tests__/public-api-jsdoc-scope.test.js +176 -0
- package/dist/__tests__/public-api-jsdoc-scope.test.js.map +1 -0
- package/dist/__tests__/resilience-fp.test.d.ts +14 -0
- package/dist/__tests__/resilience-fp.test.d.ts.map +1 -0
- package/dist/__tests__/resilience-fp.test.js +110 -0
- package/dist/__tests__/resilience-fp.test.js.map +1 -0
- package/dist/checks/architecture/__tests__/no-kebab-option-indexing.test.d.ts +2 -0
- package/dist/checks/architecture/__tests__/no-kebab-option-indexing.test.d.ts.map +1 -0
- package/dist/checks/architecture/__tests__/no-kebab-option-indexing.test.js +32 -0
- package/dist/checks/architecture/__tests__/no-kebab-option-indexing.test.js.map +1 -0
- package/dist/checks/architecture/__tests__/tool-has-manifest.test.d.ts +2 -0
- package/dist/checks/architecture/__tests__/tool-has-manifest.test.d.ts.map +1 -0
- package/dist/checks/architecture/__tests__/tool-has-manifest.test.js +152 -0
- package/dist/checks/architecture/__tests__/tool-has-manifest.test.js.map +1 -0
- package/dist/checks/architecture/__tests__/vitest-config-required-with-tests.test.d.ts +2 -0
- package/dist/checks/architecture/__tests__/vitest-config-required-with-tests.test.d.ts.map +1 -0
- package/dist/checks/architecture/__tests__/vitest-config-required-with-tests.test.js +129 -0
- package/dist/checks/architecture/__tests__/vitest-config-required-with-tests.test.js.map +1 -0
- package/dist/checks/architecture/_yaml-doc-bindings.d.ts +23 -0
- package/dist/checks/architecture/_yaml-doc-bindings.d.ts.map +1 -0
- package/dist/checks/architecture/_yaml-doc-bindings.js +29 -0
- package/dist/checks/architecture/_yaml-doc-bindings.js.map +1 -0
- package/dist/checks/architecture/dependencies/index.d.ts +2 -0
- package/dist/checks/architecture/dependencies/index.d.ts.map +1 -0
- package/dist/checks/architecture/dependencies/index.js +2 -0
- package/dist/checks/architecture/dependencies/index.js.map +1 -0
- package/dist/checks/architecture/dependencies/no-duplicate-packages.d.ts +11 -0
- package/dist/checks/architecture/dependencies/no-duplicate-packages.d.ts.map +1 -0
- package/dist/checks/architecture/dependencies/no-duplicate-packages.js +171 -0
- package/dist/checks/architecture/dependencies/no-duplicate-packages.js.map +1 -0
- package/dist/checks/architecture/docker-best-practices.d.ts +23 -0
- package/dist/checks/architecture/docker-best-practices.d.ts.map +1 -0
- package/dist/checks/architecture/docker-best-practices.js +427 -0
- package/dist/checks/architecture/docker-best-practices.js.map +1 -0
- package/dist/checks/architecture/docker-ignore-validation.d.ts +18 -0
- package/dist/checks/architecture/docker-ignore-validation.d.ts.map +1 -0
- package/dist/checks/architecture/docker-ignore-validation.js +117 -0
- package/dist/checks/architecture/docker-ignore-validation.js.map +1 -0
- package/dist/checks/architecture/docker-version-sync.d.ts +16 -0
- package/dist/checks/architecture/docker-version-sync.d.ts.map +1 -0
- package/dist/checks/architecture/docker-version-sync.js +193 -0
- package/dist/checks/architecture/docker-version-sync.js.map +1 -0
- package/dist/checks/architecture/env-var-validation.d.ts +14 -0
- package/dist/checks/architecture/env-var-validation.d.ts.map +1 -0
- package/dist/checks/architecture/env-var-validation.js +289 -0
- package/dist/checks/architecture/env-var-validation.js.map +1 -0
- package/dist/checks/architecture/heavy-import-detection.d.ts +11 -0
- package/dist/checks/architecture/heavy-import-detection.d.ts.map +1 -0
- package/dist/checks/architecture/heavy-import-detection.js +91 -0
- package/dist/checks/architecture/heavy-import-detection.js.map +1 -0
- package/dist/checks/architecture/index.d.ts +16 -0
- package/dist/checks/architecture/index.d.ts.map +1 -0
- package/dist/checks/architecture/index.js +16 -0
- package/dist/checks/architecture/index.js.map +1 -0
- package/dist/checks/architecture/modules/empty-package-detection.d.ts +11 -0
- package/dist/checks/architecture/modules/empty-package-detection.d.ts.map +1 -0
- package/dist/checks/architecture/modules/empty-package-detection.js +277 -0
- package/dist/checks/architecture/modules/empty-package-detection.js.map +1 -0
- package/dist/checks/architecture/modules/index.d.ts +3 -0
- package/dist/checks/architecture/modules/index.d.ts.map +1 -0
- package/dist/checks/architecture/modules/index.js +3 -0
- package/dist/checks/architecture/modules/index.js.map +1 -0
- package/dist/checks/architecture/modules/interface-implementation-consistency.d.ts +12 -0
- package/dist/checks/architecture/modules/interface-implementation-consistency.d.ts.map +1 -0
- package/dist/checks/architecture/modules/interface-implementation-consistency.js +555 -0
- package/dist/checks/architecture/modules/interface-implementation-consistency.js.map +1 -0
- package/dist/checks/architecture/no-custom-event-emitter.d.ts +11 -0
- package/dist/checks/architecture/no-custom-event-emitter.d.ts.map +1 -0
- package/dist/checks/architecture/no-custom-event-emitter.js +123 -0
- package/dist/checks/architecture/no-custom-event-emitter.js.map +1 -0
- package/dist/checks/architecture/no-kebab-option-indexing.d.ts +33 -0
- package/dist/checks/architecture/no-kebab-option-indexing.d.ts.map +1 -0
- package/dist/checks/architecture/no-kebab-option-indexing.js +81 -0
- package/dist/checks/architecture/no-kebab-option-indexing.js.map +1 -0
- package/dist/checks/architecture/node-version-consistency.d.ts +22 -0
- package/dist/checks/architecture/node-version-consistency.d.ts.map +1 -0
- package/dist/checks/architecture/node-version-consistency.js +225 -0
- package/dist/checks/architecture/node-version-consistency.js.map +1 -0
- package/dist/checks/architecture/project-readme-existence.d.ts +13 -0
- package/dist/checks/architecture/project-readme-existence.d.ts.map +1 -0
- package/dist/checks/architecture/project-readme-existence.js +55 -0
- package/dist/checks/architecture/project-readme-existence.js.map +1 -0
- package/dist/checks/architecture/stale-build-artifacts.d.ts +10 -0
- package/dist/checks/architecture/stale-build-artifacts.d.ts.map +1 -0
- package/dist/checks/architecture/stale-build-artifacts.js +55 -0
- package/dist/checks/architecture/stale-build-artifacts.js.map +1 -0
- package/dist/checks/architecture/tool-has-manifest.d.ts +27 -0
- package/dist/checks/architecture/tool-has-manifest.d.ts.map +1 -0
- package/dist/checks/architecture/tool-has-manifest.js +135 -0
- package/dist/checks/architecture/tool-has-manifest.js.map +1 -0
- package/dist/checks/architecture/vitest-config-extends-base.d.ts +15 -0
- package/dist/checks/architecture/vitest-config-extends-base.d.ts.map +1 -0
- package/dist/checks/architecture/vitest-config-extends-base.js +104 -0
- package/dist/checks/architecture/vitest-config-extends-base.js.map +1 -0
- package/dist/checks/architecture/vitest-config-required-with-tests.d.ts +49 -0
- package/dist/checks/architecture/vitest-config-required-with-tests.d.ts.map +1 -0
- package/dist/checks/architecture/vitest-config-required-with-tests.js +199 -0
- package/dist/checks/architecture/vitest-config-required-with-tests.js.map +1 -0
- package/dist/checks/documentation/_directives/eslint.d.ts +9 -0
- package/dist/checks/documentation/_directives/eslint.d.ts.map +1 -0
- package/dist/checks/documentation/_directives/eslint.js +168 -0
- package/dist/checks/documentation/_directives/eslint.js.map +1 -0
- package/dist/checks/documentation/_directives/fitness.d.ts +9 -0
- package/dist/checks/documentation/_directives/fitness.d.ts.map +1 -0
- package/dist/checks/documentation/_directives/fitness.js +64 -0
- package/dist/checks/documentation/_directives/fitness.js.map +1 -0
- package/dist/checks/documentation/_directives/graph.d.ts +10 -0
- package/dist/checks/documentation/_directives/graph.d.ts.map +1 -0
- package/dist/checks/documentation/_directives/graph.js +65 -0
- package/dist/checks/documentation/_directives/graph.js.map +1 -0
- package/dist/checks/documentation/_directives/graph.test.d.ts +2 -0
- package/dist/checks/documentation/_directives/graph.test.d.ts.map +1 -0
- package/dist/checks/documentation/_directives/graph.test.js +54 -0
- package/dist/checks/documentation/_directives/graph.test.js.map +1 -0
- package/dist/checks/documentation/_directives/semgrep.d.ts +8 -0
- package/dist/checks/documentation/_directives/semgrep.d.ts.map +1 -0
- package/dist/checks/documentation/_directives/semgrep.js +72 -0
- package/dist/checks/documentation/_directives/semgrep.js.map +1 -0
- package/dist/checks/documentation/_directives/types.d.ts +21 -0
- package/dist/checks/documentation/_directives/types.d.ts.map +1 -0
- package/dist/checks/documentation/_directives/types.js +9 -0
- package/dist/checks/documentation/_directives/types.js.map +1 -0
- package/dist/checks/documentation/_directives/typescript.d.ts +10 -0
- package/dist/checks/documentation/_directives/typescript.d.ts.map +1 -0
- package/dist/checks/documentation/_directives/typescript.js +54 -0
- package/dist/checks/documentation/_directives/typescript.js.map +1 -0
- package/dist/checks/documentation/_public-api-graph.d.ts +30 -0
- package/dist/checks/documentation/_public-api-graph.d.ts.map +1 -0
- package/dist/checks/documentation/_public-api-graph.js +304 -0
- package/dist/checks/documentation/_public-api-graph.js.map +1 -0
- package/dist/checks/documentation/directive-audit.d.ts +26 -0
- package/dist/checks/documentation/directive-audit.d.ts.map +1 -0
- package/dist/checks/documentation/directive-audit.js +144 -0
- package/dist/checks/documentation/directive-audit.js.map +1 -0
- package/dist/checks/documentation/index.d.ts +3 -0
- package/dist/checks/documentation/index.d.ts.map +1 -0
- package/dist/checks/documentation/index.js +3 -0
- package/dist/checks/documentation/index.js.map +1 -0
- package/dist/checks/documentation/public-api-jsdoc.d.ts +10 -0
- package/dist/checks/documentation/public-api-jsdoc.d.ts.map +1 -0
- package/dist/checks/documentation/public-api-jsdoc.js +131 -0
- package/dist/checks/documentation/public-api-jsdoc.js.map +1 -0
- package/dist/checks/file-length-limit.d.ts +16 -0
- package/dist/checks/file-length-limit.d.ts.map +1 -0
- package/dist/checks/file-length-limit.js +47 -0
- package/dist/checks/file-length-limit.js.map +1 -0
- package/dist/checks/index.d.ts +16 -0
- package/dist/checks/index.d.ts.map +1 -0
- package/dist/checks/index.js +16 -0
- package/dist/checks/index.js.map +1 -0
- package/dist/checks/no-todo-comments.d.ts +18 -0
- package/dist/checks/no-todo-comments.d.ts.map +1 -0
- package/dist/checks/no-todo-comments.js +79 -0
- package/dist/checks/no-todo-comments.js.map +1 -0
- package/dist/checks/no-unimplemented-markers.d.ts +24 -0
- package/dist/checks/no-unimplemented-markers.d.ts.map +1 -0
- package/dist/checks/no-unimplemented-markers.js +198 -0
- package/dist/checks/no-unimplemented-markers.js.map +1 -0
- package/dist/checks/quality/api/graphql-offset-pagination.d.ts +9 -0
- package/dist/checks/quality/api/graphql-offset-pagination.d.ts.map +1 -0
- package/dist/checks/quality/api/graphql-offset-pagination.js +63 -0
- package/dist/checks/quality/api/graphql-offset-pagination.js.map +1 -0
- package/dist/checks/quality/api/index.d.ts +3 -0
- package/dist/checks/quality/api/index.d.ts.map +1 -0
- package/dist/checks/quality/api/index.js +3 -0
- package/dist/checks/quality/api/index.js.map +1 -0
- package/dist/checks/quality/api/zod-openapi-sync.d.ts +13 -0
- package/dist/checks/quality/api/zod-openapi-sync.d.ts.map +1 -0
- package/dist/checks/quality/api/zod-openapi-sync.js +88 -0
- package/dist/checks/quality/api/zod-openapi-sync.js.map +1 -0
- package/dist/checks/quality/code-structure/dead-code.d.ts +12 -0
- package/dist/checks/quality/code-structure/dead-code.d.ts.map +1 -0
- package/dist/checks/quality/code-structure/dead-code.js +238 -0
- package/dist/checks/quality/code-structure/dead-code.js.map +1 -0
- package/dist/checks/quality/code-structure/index.d.ts +5 -0
- package/dist/checks/quality/code-structure/index.d.ts.map +1 -0
- package/dist/checks/quality/code-structure/index.js +5 -0
- package/dist/checks/quality/code-structure/index.js.map +1 -0
- package/dist/checks/quality/code-structure/no-ai-attribution.d.ts +25 -0
- package/dist/checks/quality/code-structure/no-ai-attribution.d.ts.map +1 -0
- package/dist/checks/quality/code-structure/no-ai-attribution.js +76 -0
- package/dist/checks/quality/code-structure/no-ai-attribution.js.map +1 -0
- package/dist/checks/quality/code-structure/no-console-log.d.ts +17 -0
- package/dist/checks/quality/code-structure/no-console-log.d.ts.map +1 -0
- package/dist/checks/quality/code-structure/no-console-log.js +106 -0
- package/dist/checks/quality/code-structure/no-console-log.js.map +1 -0
- package/dist/checks/quality/code-structure/no-process-artifacts.d.ts +25 -0
- package/dist/checks/quality/code-structure/no-process-artifacts.d.ts.map +1 -0
- package/dist/checks/quality/code-structure/no-process-artifacts.js +104 -0
- package/dist/checks/quality/code-structure/no-process-artifacts.js.map +1 -0
- package/dist/checks/quality/dependency-version-consistency.d.ts +20 -0
- package/dist/checks/quality/dependency-version-consistency.d.ts.map +1 -0
- package/dist/checks/quality/dependency-version-consistency.js +266 -0
- package/dist/checks/quality/dependency-version-consistency.js.map +1 -0
- package/dist/checks/quality/fitness-ignore-hygiene.d.ts +10 -0
- package/dist/checks/quality/fitness-ignore-hygiene.d.ts.map +1 -0
- package/dist/checks/quality/fitness-ignore-hygiene.js +93 -0
- package/dist/checks/quality/fitness-ignore-hygiene.js.map +1 -0
- package/dist/checks/quality/frontend/expo-vector-icons.d.ts +13 -0
- package/dist/checks/quality/frontend/expo-vector-icons.d.ts.map +1 -0
- package/dist/checks/quality/frontend/expo-vector-icons.js +80 -0
- package/dist/checks/quality/frontend/expo-vector-icons.js.map +1 -0
- package/dist/checks/quality/frontend/image-optimization.d.ts +13 -0
- package/dist/checks/quality/frontend/image-optimization.d.ts.map +1 -0
- package/dist/checks/quality/frontend/image-optimization.js +166 -0
- package/dist/checks/quality/frontend/image-optimization.js.map +1 -0
- package/dist/checks/quality/frontend/index.d.ts +4 -0
- package/dist/checks/quality/frontend/index.d.ts.map +1 -0
- package/dist/checks/quality/frontend/index.js +4 -0
- package/dist/checks/quality/frontend/index.js.map +1 -0
- package/dist/checks/quality/frontend/navigation-typing.d.ts +12 -0
- package/dist/checks/quality/frontend/navigation-typing.d.ts.map +1 -0
- package/dist/checks/quality/frontend/navigation-typing.js +77 -0
- package/dist/checks/quality/frontend/navigation-typing.js.map +1 -0
- package/dist/checks/quality/graph-ignore-hygiene.d.ts +10 -0
- package/dist/checks/quality/graph-ignore-hygiene.d.ts.map +1 -0
- package/dist/checks/quality/graph-ignore-hygiene.js +95 -0
- package/dist/checks/quality/graph-ignore-hygiene.js.map +1 -0
- package/dist/checks/quality/graph-ignore-hygiene.test.d.ts +14 -0
- package/dist/checks/quality/graph-ignore-hygiene.test.d.ts.map +1 -0
- package/dist/checks/quality/graph-ignore-hygiene.test.js +58 -0
- package/dist/checks/quality/graph-ignore-hygiene.test.js.map +1 -0
- package/dist/checks/quality/index.d.ts +16 -0
- package/dist/checks/quality/index.d.ts.map +1 -0
- package/dist/checks/quality/index.js +16 -0
- package/dist/checks/quality/index.js.map +1 -0
- package/dist/checks/quality/linting/eslint-justifications.d.ts +12 -0
- package/dist/checks/quality/linting/eslint-justifications.d.ts.map +1 -0
- package/dist/checks/quality/linting/eslint-justifications.js +328 -0
- package/dist/checks/quality/linting/eslint-justifications.js.map +1 -0
- package/dist/checks/quality/linting/index.d.ts +4 -0
- package/dist/checks/quality/linting/index.d.ts.map +1 -0
- package/dist/checks/quality/linting/index.js +4 -0
- package/dist/checks/quality/linting/index.js.map +1 -0
- package/dist/checks/quality/linting/semgrep-justifications.d.ts +16 -0
- package/dist/checks/quality/linting/semgrep-justifications.d.ts.map +1 -0
- package/dist/checks/quality/linting/semgrep-justifications.js +229 -0
- package/dist/checks/quality/linting/semgrep-justifications.js.map +1 -0
- package/dist/checks/quality/linting/typescript-directive-hygiene.d.ts +12 -0
- package/dist/checks/quality/linting/typescript-directive-hygiene.d.ts.map +1 -0
- package/dist/checks/quality/linting/typescript-directive-hygiene.js +142 -0
- package/dist/checks/quality/linting/typescript-directive-hygiene.js.map +1 -0
- package/dist/checks/quality/no-compatibility-layer-names.d.ts +13 -0
- package/dist/checks/quality/no-compatibility-layer-names.d.ts.map +1 -0
- package/dist/checks/quality/no-compatibility-layer-names.js +100 -0
- package/dist/checks/quality/no-compatibility-layer-names.js.map +1 -0
- package/dist/checks/quality/no-deprecated-tags.d.ts +11 -0
- package/dist/checks/quality/no-deprecated-tags.d.ts.map +1 -0
- package/dist/checks/quality/no-deprecated-tags.js +76 -0
- package/dist/checks/quality/no-deprecated-tags.js.map +1 -0
- package/dist/checks/quality/no-markdown-references.d.ts +16 -0
- package/dist/checks/quality/no-markdown-references.d.ts.map +1 -0
- package/dist/checks/quality/no-markdown-references.js +145 -0
- package/dist/checks/quality/no-markdown-references.js.map +1 -0
- package/dist/checks/quality/no-raw-regex-on-code.d.ts +9 -0
- package/dist/checks/quality/no-raw-regex-on-code.d.ts.map +1 -0
- package/dist/checks/quality/no-raw-regex-on-code.js +61 -0
- package/dist/checks/quality/no-raw-regex-on-code.js.map +1 -0
- package/dist/checks/quality/no-temporary-workarounds.d.ts +11 -0
- package/dist/checks/quality/no-temporary-workarounds.d.ts.map +1 -0
- package/dist/checks/quality/no-temporary-workarounds.js +69 -0
- package/dist/checks/quality/no-temporary-workarounds.js.map +1 -0
- package/dist/checks/quality/no-window-alert.d.ts +19 -0
- package/dist/checks/quality/no-window-alert.d.ts.map +1 -0
- package/dist/checks/quality/no-window-alert.js +74 -0
- package/dist/checks/quality/no-window-alert.js.map +1 -0
- package/dist/checks/quality/observability/index.d.ts +2 -0
- package/dist/checks/quality/observability/index.d.ts.map +1 -0
- package/dist/checks/quality/observability/index.js +2 -0
- package/dist/checks/quality/observability/index.js.map +1 -0
- package/dist/checks/quality/observability/pino-serializer-coverage.d.ts +15 -0
- package/dist/checks/quality/observability/pino-serializer-coverage.d.ts.map +1 -0
- package/dist/checks/quality/observability/pino-serializer-coverage.js +209 -0
- package/dist/checks/quality/observability/pino-serializer-coverage.js.map +1 -0
- package/dist/checks/quality/patterns/async-state-pattern.d.ts +14 -0
- package/dist/checks/quality/patterns/async-state-pattern.d.ts.map +1 -0
- package/dist/checks/quality/patterns/async-state-pattern.js +80 -0
- package/dist/checks/quality/patterns/async-state-pattern.js.map +1 -0
- package/dist/checks/quality/patterns/index.d.ts +4 -0
- package/dist/checks/quality/patterns/index.d.ts.map +1 -0
- package/dist/checks/quality/patterns/index.js +4 -0
- package/dist/checks/quality/patterns/index.js.map +1 -0
- package/dist/checks/quality/patterns/no-non-null-assertions.d.ts +10 -0
- package/dist/checks/quality/patterns/no-non-null-assertions.d.ts.map +1 -0
- package/dist/checks/quality/patterns/no-non-null-assertions.js +97 -0
- package/dist/checks/quality/patterns/no-non-null-assertions.js.map +1 -0
- package/dist/checks/quality/patterns/performance-anti-patterns.d.ts +16 -0
- package/dist/checks/quality/patterns/performance-anti-patterns.d.ts.map +1 -0
- package/dist/checks/quality/patterns/performance-anti-patterns.js +239 -0
- package/dist/checks/quality/patterns/performance-anti-patterns.js.map +1 -0
- package/dist/checks/resilience/_helpers/config-validation.d.ts +27 -0
- package/dist/checks/resilience/_helpers/config-validation.d.ts.map +1 -0
- package/dist/checks/resilience/_helpers/config-validation.js +61 -0
- package/dist/checks/resilience/_helpers/config-validation.js.map +1 -0
- package/dist/checks/resilience/batch-operations.d.ts +22 -0
- package/dist/checks/resilience/batch-operations.d.ts.map +1 -0
- package/dist/checks/resilience/batch-operations.js +422 -0
- package/dist/checks/resilience/batch-operations.js.map +1 -0
- package/dist/checks/resilience/cache-ttl-validation.d.ts +13 -0
- package/dist/checks/resilience/cache-ttl-validation.d.ts.map +1 -0
- package/dist/checks/resilience/cache-ttl-validation.js +222 -0
- package/dist/checks/resilience/cache-ttl-validation.js.map +1 -0
- package/dist/checks/resilience/catch-clause-safety.d.ts +12 -0
- package/dist/checks/resilience/catch-clause-safety.d.ts.map +1 -0
- package/dist/checks/resilience/catch-clause-safety.js +110 -0
- package/dist/checks/resilience/catch-clause-safety.js.map +1 -0
- package/dist/checks/resilience/dangerous-config-defaults.d.ts +11 -0
- package/dist/checks/resilience/dangerous-config-defaults.d.ts.map +1 -0
- package/dist/checks/resilience/dangerous-config-defaults.js +304 -0
- package/dist/checks/resilience/dangerous-config-defaults.js.map +1 -0
- package/dist/checks/resilience/error-code-registration.d.ts +11 -0
- package/dist/checks/resilience/error-code-registration.d.ts.map +1 -0
- package/dist/checks/resilience/error-code-registration.js +88 -0
- package/dist/checks/resilience/error-code-registration.js.map +1 -0
- package/dist/checks/resilience/event-patterns.d.ts +21 -0
- package/dist/checks/resilience/event-patterns.d.ts.map +1 -0
- package/dist/checks/resilience/event-patterns.js +232 -0
- package/dist/checks/resilience/event-patterns.js.map +1 -0
- package/dist/checks/resilience/exit-code-correctness.d.ts +12 -0
- package/dist/checks/resilience/exit-code-correctness.d.ts.map +1 -0
- package/dist/checks/resilience/exit-code-correctness.js +107 -0
- package/dist/checks/resilience/exit-code-correctness.js.map +1 -0
- package/dist/checks/resilience/index.d.ts +18 -0
- package/dist/checks/resilience/index.d.ts.map +1 -0
- package/dist/checks/resilience/index.js +18 -0
- package/dist/checks/resilience/index.js.map +1 -0
- package/dist/checks/resilience/no-hardcoded-timeouts.d.ts +10 -0
- package/dist/checks/resilience/no-hardcoded-timeouts.d.ts.map +1 -0
- package/dist/checks/resilience/no-hardcoded-timeouts.js +291 -0
- package/dist/checks/resilience/no-hardcoded-timeouts.js.map +1 -0
- package/dist/checks/resilience/no-process-exit-in-finally.d.ts +11 -0
- package/dist/checks/resilience/no-process-exit-in-finally.d.ts.map +1 -0
- package/dist/checks/resilience/no-process-exit-in-finally.js +89 -0
- package/dist/checks/resilience/no-process-exit-in-finally.js.map +1 -0
- package/dist/checks/resilience/readline-cleanup.d.ts +11 -0
- package/dist/checks/resilience/readline-cleanup.d.ts.map +1 -0
- package/dist/checks/resilience/readline-cleanup.js +107 -0
- package/dist/checks/resilience/readline-cleanup.js.map +1 -0
- package/dist/checks/resilience/recovery-patterns.d.ts +25 -0
- package/dist/checks/resilience/recovery-patterns.d.ts.map +1 -0
- package/dist/checks/resilience/recovery-patterns.js +273 -0
- package/dist/checks/resilience/recovery-patterns.js.map +1 -0
- package/dist/checks/resilience/reentrancy-guard.d.ts +12 -0
- package/dist/checks/resilience/reentrancy-guard.d.ts.map +1 -0
- package/dist/checks/resilience/reentrancy-guard.js +86 -0
- package/dist/checks/resilience/reentrancy-guard.js.map +1 -0
- package/dist/checks/resilience/retry-config-validation.d.ts +13 -0
- package/dist/checks/resilience/retry-config-validation.d.ts.map +1 -0
- package/dist/checks/resilience/retry-config-validation.js +159 -0
- package/dist/checks/resilience/retry-config-validation.js.map +1 -0
- package/dist/checks/resilience/sentry/_helpers/sentry.d.ts +25 -0
- package/dist/checks/resilience/sentry/_helpers/sentry.d.ts.map +1 -0
- package/dist/checks/resilience/sentry/_helpers/sentry.js +68 -0
- package/dist/checks/resilience/sentry/_helpers/sentry.js.map +1 -0
- package/dist/checks/resilience/sentry/index.d.ts +8 -0
- package/dist/checks/resilience/sentry/index.d.ts.map +1 -0
- package/dist/checks/resilience/sentry/index.js +8 -0
- package/dist/checks/resilience/sentry/index.js.map +1 -0
- package/dist/checks/resilience/sentry/sentry-dsn-configured.d.ts +12 -0
- package/dist/checks/resilience/sentry/sentry-dsn-configured.d.ts.map +1 -0
- package/dist/checks/resilience/sentry/sentry-dsn-configured.js +55 -0
- package/dist/checks/resilience/sentry/sentry-dsn-configured.js.map +1 -0
- package/dist/checks/resilience/sentry/sentry-environment-set.d.ts +12 -0
- package/dist/checks/resilience/sentry/sentry-environment-set.d.ts.map +1 -0
- package/dist/checks/resilience/sentry/sentry-environment-set.js +51 -0
- package/dist/checks/resilience/sentry/sentry-environment-set.js.map +1 -0
- package/dist/checks/resilience/sentry/sentry-error-boundary.d.ts +12 -0
- package/dist/checks/resilience/sentry/sentry-error-boundary.d.ts.map +1 -0
- package/dist/checks/resilience/sentry/sentry-error-boundary.js +75 -0
- package/dist/checks/resilience/sentry/sentry-error-boundary.js.map +1 -0
- package/dist/checks/resilience/sentry/sentry-pii-scrubbing.d.ts +13 -0
- package/dist/checks/resilience/sentry/sentry-pii-scrubbing.d.ts.map +1 -0
- package/dist/checks/resilience/sentry/sentry-pii-scrubbing.js +125 -0
- package/dist/checks/resilience/sentry/sentry-pii-scrubbing.js.map +1 -0
- package/dist/checks/resilience/sentry/sentry-release-set.d.ts +12 -0
- package/dist/checks/resilience/sentry/sentry-release-set.d.ts.map +1 -0
- package/dist/checks/resilience/sentry/sentry-release-set.js +51 -0
- package/dist/checks/resilience/sentry/sentry-release-set.js.map +1 -0
- package/dist/checks/resilience/sentry/sentry-sample-rate.d.ts +12 -0
- package/dist/checks/resilience/sentry/sentry-sample-rate.d.ts.map +1 -0
- package/dist/checks/resilience/sentry/sentry-sample-rate.js +78 -0
- package/dist/checks/resilience/sentry/sentry-sample-rate.js.map +1 -0
- package/dist/checks/resilience/sentry/sentry-source-maps.d.ts +12 -0
- package/dist/checks/resilience/sentry/sentry-source-maps.d.ts.map +1 -0
- package/dist/checks/resilience/sentry/sentry-source-maps.js +83 -0
- package/dist/checks/resilience/sentry/sentry-source-maps.js.map +1 -0
- package/dist/checks/resilience/service-patterns.d.ts +18 -0
- package/dist/checks/resilience/service-patterns.d.ts.map +1 -0
- package/dist/checks/resilience/service-patterns.js +230 -0
- package/dist/checks/resilience/service-patterns.js.map +1 -0
- package/dist/checks/resilience/timer-lifecycle.d.ts +10 -0
- package/dist/checks/resilience/timer-lifecycle.d.ts.map +1 -0
- package/dist/checks/resilience/timer-lifecycle.js +78 -0
- package/dist/checks/resilience/timer-lifecycle.js.map +1 -0
- package/dist/checks/resilience/transaction-patterns.d.ts +21 -0
- package/dist/checks/resilience/transaction-patterns.d.ts.map +1 -0
- package/dist/checks/resilience/transaction-patterns.js +258 -0
- package/dist/checks/resilience/transaction-patterns.js.map +1 -0
- package/dist/checks/security/__tests__/no-hardcoded-secrets.test.d.ts +9 -0
- package/dist/checks/security/__tests__/no-hardcoded-secrets.test.d.ts.map +1 -0
- package/dist/checks/security/__tests__/no-hardcoded-secrets.test.js +37 -0
- package/dist/checks/security/__tests__/no-hardcoded-secrets.test.js.map +1 -0
- package/dist/checks/security/__tests__/package-supply-chain-policy.test.d.ts +2 -0
- package/dist/checks/security/__tests__/package-supply-chain-policy.test.d.ts.map +1 -0
- package/dist/checks/security/__tests__/package-supply-chain-policy.test.js +128 -0
- package/dist/checks/security/__tests__/package-supply-chain-policy.test.js.map +1 -0
- package/dist/checks/security/api-key-rotation.d.ts +10 -0
- package/dist/checks/security/api-key-rotation.d.ts.map +1 -0
- package/dist/checks/security/api-key-rotation.js +186 -0
- package/dist/checks/security/api-key-rotation.js.map +1 -0
- package/dist/checks/security/auth-middleware-coverage.d.ts +11 -0
- package/dist/checks/security/auth-middleware-coverage.d.ts.map +1 -0
- package/dist/checks/security/auth-middleware-coverage.js +210 -0
- package/dist/checks/security/auth-middleware-coverage.js.map +1 -0
- package/dist/checks/security/auth-route-guard.d.ts +12 -0
- package/dist/checks/security/auth-route-guard.d.ts.map +1 -0
- package/dist/checks/security/auth-route-guard.js +70 -0
- package/dist/checks/security/auth-route-guard.js.map +1 -0
- package/dist/checks/security/cors-configuration.d.ts +11 -0
- package/dist/checks/security/cors-configuration.d.ts.map +1 -0
- package/dist/checks/security/cors-configuration.js +126 -0
- package/dist/checks/security/cors-configuration.js.map +1 -0
- package/dist/checks/security/csp-headers.d.ts +11 -0
- package/dist/checks/security/csp-headers.d.ts.map +1 -0
- package/dist/checks/security/csp-headers.js +192 -0
- package/dist/checks/security/csp-headers.js.map +1 -0
- package/dist/checks/security/dependency-vulnerability-audit.d.ts +15 -0
- package/dist/checks/security/dependency-vulnerability-audit.d.ts.map +1 -0
- package/dist/checks/security/dependency-vulnerability-audit.js +184 -0
- package/dist/checks/security/dependency-vulnerability-audit.js.map +1 -0
- package/dist/checks/security/env-secret-exposure.d.ts +11 -0
- package/dist/checks/security/env-secret-exposure.d.ts.map +1 -0
- package/dist/checks/security/env-secret-exposure.js +127 -0
- package/dist/checks/security/env-secret-exposure.js.map +1 -0
- package/dist/checks/security/hasura-production-config.d.ts +11 -0
- package/dist/checks/security/hasura-production-config.d.ts.map +1 -0
- package/dist/checks/security/hasura-production-config.js +122 -0
- package/dist/checks/security/hasura-production-config.js.map +1 -0
- package/dist/checks/security/index.d.ts +17 -0
- package/dist/checks/security/index.d.ts.map +1 -0
- package/dist/checks/security/index.js +17 -0
- package/dist/checks/security/index.js.map +1 -0
- package/dist/checks/security/jwt-validation.d.ts +11 -0
- package/dist/checks/security/jwt-validation.d.ts.map +1 -0
- package/dist/checks/security/jwt-validation.js +294 -0
- package/dist/checks/security/jwt-validation.js.map +1 -0
- package/dist/checks/security/no-eval.d.ts +16 -0
- package/dist/checks/security/no-eval.d.ts.map +1 -0
- package/dist/checks/security/no-eval.js +83 -0
- package/dist/checks/security/no-eval.js.map +1 -0
- package/dist/checks/security/no-hardcoded-secrets.d.ts +28 -0
- package/dist/checks/security/no-hardcoded-secrets.d.ts.map +1 -0
- package/dist/checks/security/no-hardcoded-secrets.js +209 -0
- package/dist/checks/security/no-hardcoded-secrets.js.map +1 -0
- package/dist/checks/security/package-supply-chain-policy.d.ts +12 -0
- package/dist/checks/security/package-supply-chain-policy.d.ts.map +1 -0
- package/dist/checks/security/package-supply-chain-policy.js +534 -0
- package/dist/checks/security/package-supply-chain-policy.js.map +1 -0
- package/dist/checks/security/rate-limit-coverage.d.ts +10 -0
- package/dist/checks/security/rate-limit-coverage.d.ts.map +1 -0
- package/dist/checks/security/rate-limit-coverage.js +143 -0
- package/dist/checks/security/rate-limit-coverage.js.map +1 -0
- package/dist/checks/security/semgrep-scan.d.ts +13 -0
- package/dist/checks/security/semgrep-scan.d.ts.map +1 -0
- package/dist/checks/security/semgrep-scan.js +86 -0
- package/dist/checks/security/semgrep-scan.js.map +1 -0
- package/dist/checks/security/use-centralized-crypto.d.ts +11 -0
- package/dist/checks/security/use-centralized-crypto.d.ts.map +1 -0
- package/dist/checks/security/use-centralized-crypto.js +129 -0
- package/dist/checks/security/use-centralized-crypto.js.map +1 -0
- package/dist/checks/security/webhook-signature-verification.d.ts +10 -0
- package/dist/checks/security/webhook-signature-verification.d.ts.map +1 -0
- package/dist/checks/security/webhook-signature-verification.js +183 -0
- package/dist/checks/security/webhook-signature-verification.js.map +1 -0
- package/dist/checks/testing/index.d.ts +6 -0
- package/dist/checks/testing/index.d.ts.map +1 -0
- package/dist/checks/testing/index.js +6 -0
- package/dist/checks/testing/index.js.map +1 -0
- package/dist/checks/testing/no-skipped-tests.d.ts +40 -0
- package/dist/checks/testing/no-skipped-tests.d.ts.map +1 -0
- package/dist/checks/testing/no-skipped-tests.js +174 -0
- package/dist/checks/testing/no-skipped-tests.js.map +1 -0
- package/dist/checks/testing/no-stub-tests.d.ts +11 -0
- package/dist/checks/testing/no-stub-tests.d.ts.map +1 -0
- package/dist/checks/testing/no-stub-tests.js +103 -0
- package/dist/checks/testing/no-stub-tests.js.map +1 -0
- package/dist/checks/testing/test-convention-consistency.d.ts +14 -0
- package/dist/checks/testing/test-convention-consistency.d.ts.map +1 -0
- package/dist/checks/testing/test-convention-consistency.js +93 -0
- package/dist/checks/testing/test-convention-consistency.js.map +1 -0
- package/dist/checks/testing/test-file-naming.d.ts +13 -0
- package/dist/checks/testing/test-file-naming.d.ts.map +1 -0
- package/dist/checks/testing/test-file-naming.js +218 -0
- package/dist/checks/testing/test-file-naming.js.map +1 -0
- package/dist/checks/testing/test-file-pairing.d.ts +13 -0
- package/dist/checks/testing/test-file-pairing.d.ts.map +1 -0
- package/dist/checks/testing/test-file-pairing.js +274 -0
- package/dist/checks/testing/test-file-pairing.js.map +1 -0
- package/dist/display/architecture.d.ts +9 -0
- package/dist/display/architecture.d.ts.map +1 -0
- package/dist/display/architecture.js +29 -0
- package/dist/display/architecture.js.map +1 -0
- package/dist/display/index.d.ts +20 -0
- package/dist/display/index.d.ts.map +1 -0
- package/dist/display/index.js +30 -0
- package/dist/display/index.js.map +1 -0
- package/dist/display/quality.d.ts +7 -0
- package/dist/display/quality.d.ts.map +1 -0
- package/dist/display/quality.js +34 -0
- package/dist/display/quality.js.map +1 -0
- package/dist/display/resilience.d.ts +7 -0
- package/dist/display/resilience.d.ts.map +1 -0
- package/dist/display/resilience.js +36 -0
- package/dist/display/resilience.js.map +1 -0
- package/dist/display/security-testing.d.ts +9 -0
- package/dist/display/security-testing.d.ts.map +1 -0
- package/dist/display/security-testing.js +31 -0
- package/dist/display/security-testing.js.map +1 -0
- package/dist/display/types.d.ts +6 -0
- package/dist/display/types.d.ts.map +1 -0
- package/dist/display/types.js +6 -0
- package/dist/display/types.js.map +1 -0
- package/dist/index.d.ts +19 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +21 -0
- package/dist/index.js.map +1 -0
- package/package.json +52 -0
|
@@ -0,0 +1,106 @@
|
|
|
1
|
+
// @fitness-ignore-file no-console-log -- Check definition file references console patterns in its description
|
|
2
|
+
/**
|
|
3
|
+
* @fileoverview Disallow console.log in production code
|
|
4
|
+
*
|
|
5
|
+
* Migrated to defineRegexListCheck (Layer 4 Phase C6). The CLI-output
|
|
6
|
+
* allowlist (`/commands/`, `/display/`, `/output/`, `/bin/`, `/scripts/`,
|
|
7
|
+
* `/cli/...ts`) is preserved verbatim via the helper's `skipFile` option.
|
|
8
|
+
* The per-pattern UUID + sub-slug shape is now the helper's default.
|
|
9
|
+
*/
|
|
10
|
+
import { defineRegexListCheck } from '@opensip-cli/fitness';
|
|
11
|
+
/**
|
|
12
|
+
* Paths where console.* is the correct output mechanism (CLI tools, display modules, scripts).
|
|
13
|
+
*/
|
|
14
|
+
const CLI_OUTPUT_PATTERNS = [
|
|
15
|
+
/\/commands\//,
|
|
16
|
+
/\/display\//,
|
|
17
|
+
/\/output\//,
|
|
18
|
+
/\/bin\//,
|
|
19
|
+
/\/scripts\//,
|
|
20
|
+
/\/cli\/.*\.ts$/,
|
|
21
|
+
];
|
|
22
|
+
/**
|
|
23
|
+
* Check if a file is a CLI output file where console.* is acceptable.
|
|
24
|
+
*/
|
|
25
|
+
function isCliOutputFile(filePath) {
|
|
26
|
+
return CLI_OUTPUT_PATTERNS.some((p) => p.test(filePath));
|
|
27
|
+
}
|
|
28
|
+
/**
|
|
29
|
+
* Check: quality/no-console-log
|
|
30
|
+
*
|
|
31
|
+
* Ensures production code uses structured logging via a project logger
|
|
32
|
+
* instead of console.log, console.debug, console.info, console.warn, or console.error.
|
|
33
|
+
* Skips CLI command files, display/output modules, and scripts where console is appropriate.
|
|
34
|
+
*/
|
|
35
|
+
export const noConsoleLog = defineRegexListCheck({
|
|
36
|
+
id: '86403377-5903-478a-bdf2-e4f2f17df39f',
|
|
37
|
+
slug: 'no-console-log',
|
|
38
|
+
scope: { languages: ['typescript'], concerns: ['backend', 'frontend', 'cli'] },
|
|
39
|
+
description: 'Disallow console.log in production code - use a structured logger',
|
|
40
|
+
longDescription: `**Purpose:** Ensures production code uses a structured logger (e.g., pino, winston) instead of console methods, which lack structured fields and log levels.
|
|
41
|
+
|
|
42
|
+
**Detects:** Analyzes each file individually via regex matching against each line.
|
|
43
|
+
- \`console.log(\` calls (regex: \`/console\\.log\\s{0,10}\\(/\`)
|
|
44
|
+
- \`console.debug(\` calls
|
|
45
|
+
- \`console.info(\` calls
|
|
46
|
+
- \`console.warn(\` calls
|
|
47
|
+
- \`console.error(\` calls
|
|
48
|
+
- Skips lines that are comments (\`//\`, \`*\`, \`/*\`)
|
|
49
|
+
- Skips CLI output files: \`/commands/\`, \`/display/\`, \`/output/\`, \`/bin/\`, \`/scripts/\` paths
|
|
50
|
+
|
|
51
|
+
**Why it matters:** Console methods produce unstructured output without structured fields or log levels, making production debugging and log aggregation difficult.
|
|
52
|
+
|
|
53
|
+
**Scope:** General best practice. Analyzes each file individually.`,
|
|
54
|
+
tags: ['logging', 'quality'],
|
|
55
|
+
fileTypes: ['ts'],
|
|
56
|
+
contentFilter: 'strip-strings',
|
|
57
|
+
confidence: 'high',
|
|
58
|
+
options: {
|
|
59
|
+
// CLI commands, display modules, and scripts use console.* as their output mechanism.
|
|
60
|
+
skipFile: isCliOutputFile,
|
|
61
|
+
},
|
|
62
|
+
patterns: [
|
|
63
|
+
{
|
|
64
|
+
id: 'e32068df-b100-4406-a8ba-caec5d53fa92',
|
|
65
|
+
slug: 'console-log',
|
|
66
|
+
// Non-global: matches the original `.test()`-based per-pattern-per-line semantics.
|
|
67
|
+
regex: /console\.log\s{0,10}\(/,
|
|
68
|
+
message: 'console.log detected',
|
|
69
|
+
severity: 'error',
|
|
70
|
+
suggestion: 'Use a structured logger (e.g., pino, winston)',
|
|
71
|
+
},
|
|
72
|
+
{
|
|
73
|
+
id: '1e8a6367-e2f2-4acf-ac85-a85bb0e46955',
|
|
74
|
+
slug: 'console-debug',
|
|
75
|
+
regex: /console\.debug\s{0,10}\(/,
|
|
76
|
+
message: 'console.debug detected',
|
|
77
|
+
severity: 'error',
|
|
78
|
+
suggestion: 'Use a structured logger (e.g., pino, winston) for debug output',
|
|
79
|
+
},
|
|
80
|
+
{
|
|
81
|
+
id: 'dfa66ae8-7230-417b-9711-d6659e1e8506',
|
|
82
|
+
slug: 'console-info',
|
|
83
|
+
regex: /console\.info\s{0,10}\(/,
|
|
84
|
+
message: 'console.info detected',
|
|
85
|
+
severity: 'error',
|
|
86
|
+
suggestion: 'Use a structured logger (e.g., pino, winston) for info output',
|
|
87
|
+
},
|
|
88
|
+
{
|
|
89
|
+
id: '534bf31f-41a2-4bec-b0a7-c08205770db1',
|
|
90
|
+
slug: 'console-warn',
|
|
91
|
+
regex: /console\.warn\s{0,10}\(/,
|
|
92
|
+
message: 'console.warn detected',
|
|
93
|
+
severity: 'error',
|
|
94
|
+
suggestion: 'Use a structured logger (e.g., pino, winston) for warnings',
|
|
95
|
+
},
|
|
96
|
+
{
|
|
97
|
+
id: 'ebd495d1-ae48-478d-a1cc-4823a18cada6',
|
|
98
|
+
slug: 'console-error',
|
|
99
|
+
regex: /console\.error\s{0,10}\(/,
|
|
100
|
+
message: 'console.error detected',
|
|
101
|
+
severity: 'error',
|
|
102
|
+
suggestion: 'Use a structured logger (e.g., pino, winston) for errors',
|
|
103
|
+
},
|
|
104
|
+
],
|
|
105
|
+
});
|
|
106
|
+
//# sourceMappingURL=no-console-log.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"no-console-log.js","sourceRoot":"","sources":["../../../../src/checks/quality/code-structure/no-console-log.ts"],"names":[],"mappings":"AAAA,8GAA8G;AAC9G;;;;;;;GAOG;AAEH,OAAO,EAAE,oBAAoB,EAAE,MAAM,sBAAsB,CAAC;AAE5D;;GAEG;AACH,MAAM,mBAAmB,GAAG;IAC1B,cAAc;IACd,aAAa;IACb,YAAY;IACZ,SAAS;IACT,aAAa;IACb,gBAAgB;CACjB,CAAC;AAEF;;GAEG;AACH,SAAS,eAAe,CAAC,QAAgB;IACvC,OAAO,mBAAmB,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC;AAC3D,CAAC;AAED;;;;;;GAMG;AACH,MAAM,CAAC,MAAM,YAAY,GAAG,oBAAoB,CAAC;IAC/C,EAAE,EAAE,sCAAsC;IAC1C,IAAI,EAAE,gBAAgB;IACtB,KAAK,EAAE,EAAE,SAAS,EAAE,CAAC,YAAY,CAAC,EAAE,QAAQ,EAAE,CAAC,SAAS,EAAE,UAAU,EAAE,KAAK,CAAC,EAAE;IAC9E,WAAW,EAAE,mEAAmE;IAChF,eAAe,EAAE;;;;;;;;;;;;;mEAagD;IACjE,IAAI,EAAE,CAAC,SAAS,EAAE,SAAS,CAAC;IAC5B,SAAS,EAAE,CAAC,IAAI,CAAC;IACjB,aAAa,EAAE,eAAe;IAC9B,UAAU,EAAE,MAAM;IAClB,OAAO,EAAE;QACP,sFAAsF;QACtF,QAAQ,EAAE,eAAe;KAC1B;IACD,QAAQ,EAAE;QACR;YACE,EAAE,EAAE,sCAAsC;YAC1C,IAAI,EAAE,aAAa;YACnB,mFAAmF;YACnF,KAAK,EAAE,wBAAwB;YAC/B,OAAO,EAAE,sBAAsB;YAC/B,QAAQ,EAAE,OAAO;YACjB,UAAU,EAAE,+CAA+C;SAC5D;QACD;YACE,EAAE,EAAE,sCAAsC;YAC1C,IAAI,EAAE,eAAe;YACrB,KAAK,EAAE,0BAA0B;YACjC,OAAO,EAAE,wBAAwB;YACjC,QAAQ,EAAE,OAAO;YACjB,UAAU,EAAE,gEAAgE;SAC7E;QACD;YACE,EAAE,EAAE,sCAAsC;YAC1C,IAAI,EAAE,cAAc;YACpB,KAAK,EAAE,yBAAyB;YAChC,OAAO,EAAE,uBAAuB;YAChC,QAAQ,EAAE,OAAO;YACjB,UAAU,EAAE,+DAA+D;SAC5E;QACD;YACE,EAAE,EAAE,sCAAsC;YAC1C,IAAI,EAAE,cAAc;YACpB,KAAK,EAAE,yBAAyB;YAChC,OAAO,EAAE,uBAAuB;YAChC,QAAQ,EAAE,OAAO;YACjB,UAAU,EAAE,4DAA4D;SACzE;QACD;YACE,EAAE,EAAE,sCAAsC;YAC1C,IAAI,EAAE,eAAe;YACrB,KAAK,EAAE,0BAA0B;YACjC,OAAO,EAAE,wBAAwB;YACjC,QAAQ,EAAE,OAAO;YACjB,UAAU,EAAE,0DAA0D;SACvE;KACF;CACF,CAAC,CAAC"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @fileoverview Process/planning artifact detection in comments.
|
|
3
|
+
*
|
|
4
|
+
* Detects "Phase 1", "Sprint 12", version stamps, and date stamps
|
|
5
|
+
* left in comments. These belong in the backlog, the changelog, or
|
|
6
|
+
* git history — not the source.
|
|
7
|
+
*
|
|
8
|
+
* Extracted from the former `comment-quality` umbrella in Phase C1.
|
|
9
|
+
*
|
|
10
|
+
* Migrated to defineRegexListCheck (Phase C6 / 2026-05-23 NF2). The
|
|
11
|
+
* original site truncated each line to 500 chars before running the
|
|
12
|
+
* regex; that ReDoS guard is unnecessary because every pattern
|
|
13
|
+
* already uses bounded quantifiers (`\d{1,3}`, `\s{0,5}`,
|
|
14
|
+
* `\d{1,5}`, etc.), so an unbounded line cannot trigger catastrophic
|
|
15
|
+
* backtracking. The `EXCLUDE_PATTERNS` algorithm-step exemption is
|
|
16
|
+
* routed through the helper's `skipLine` predicate.
|
|
17
|
+
*/
|
|
18
|
+
/**
|
|
19
|
+
* Check: quality/no-process-artifacts
|
|
20
|
+
*
|
|
21
|
+
* Detects process/planning artifacts (Phase X, Sprint X, version
|
|
22
|
+
* stamps, date stamps) in comments.
|
|
23
|
+
*/
|
|
24
|
+
export declare const noProcessArtifacts: import("@opensip-cli/fitness").Check;
|
|
25
|
+
//# sourceMappingURL=no-process-artifacts.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"no-process-artifacts.d.ts","sourceRoot":"","sources":["../../../../src/checks/quality/code-structure/no-process-artifacts.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAaH;;;;;GAKG;AACH,eAAO,MAAM,kBAAkB,sCAuE7B,CAAC"}
|
|
@@ -0,0 +1,104 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @fileoverview Process/planning artifact detection in comments.
|
|
3
|
+
*
|
|
4
|
+
* Detects "Phase 1", "Sprint 12", version stamps, and date stamps
|
|
5
|
+
* left in comments. These belong in the backlog, the changelog, or
|
|
6
|
+
* git history — not the source.
|
|
7
|
+
*
|
|
8
|
+
* Extracted from the former `comment-quality` umbrella in Phase C1.
|
|
9
|
+
*
|
|
10
|
+
* Migrated to defineRegexListCheck (Phase C6 / 2026-05-23 NF2). The
|
|
11
|
+
* original site truncated each line to 500 chars before running the
|
|
12
|
+
* regex; that ReDoS guard is unnecessary because every pattern
|
|
13
|
+
* already uses bounded quantifiers (`\d{1,3}`, `\s{0,5}`,
|
|
14
|
+
* `\d{1,5}`, etc.), so an unbounded line cannot trigger catastrophic
|
|
15
|
+
* backtracking. The `EXCLUDE_PATTERNS` algorithm-step exemption is
|
|
16
|
+
* routed through the helper's `skipLine` predicate.
|
|
17
|
+
*/
|
|
18
|
+
import { defineRegexListCheck } from '@opensip-cli/fitness';
|
|
19
|
+
// Exclusion: algorithm step comments like "Phase 1: Try primary
|
|
20
|
+
// operation" are allowed and should not fire the Phase pattern.
|
|
21
|
+
const ALGORITHM_PHASE_PATTERN = /\/\/\s{0,5}Phase\s{1,5}\d{1,3}\s{0,5}:\s{0,5}\w{1,50}/i;
|
|
22
|
+
const PHASE_FIX = 'Remove planning artifact; use backlog for tracking future work';
|
|
23
|
+
const SPRINT_FIX = 'Remove planning artifact; sprint references are not useful to code readers';
|
|
24
|
+
const VERSION_FIX = 'Remove version stamp; git history tracks this information';
|
|
25
|
+
const DATE_FIX = 'Remove date stamp; git history tracks this information';
|
|
26
|
+
/**
|
|
27
|
+
* Check: quality/no-process-artifacts
|
|
28
|
+
*
|
|
29
|
+
* Detects process/planning artifacts (Phase X, Sprint X, version
|
|
30
|
+
* stamps, date stamps) in comments.
|
|
31
|
+
*/
|
|
32
|
+
export const noProcessArtifacts = defineRegexListCheck({
|
|
33
|
+
id: '3aa07a17-4bde-4f17-9296-c035809bc938',
|
|
34
|
+
slug: 'no-process-artifacts',
|
|
35
|
+
scope: { languages: ['typescript'], concerns: ['backend', 'frontend', 'cli'] },
|
|
36
|
+
contentFilter: 'raw',
|
|
37
|
+
confidence: 'medium',
|
|
38
|
+
description: 'Detects process/planning artifacts (Phase X, Sprint X, version stamps) in comments',
|
|
39
|
+
longDescription: `**Purpose:** Process/planning artifacts in source code become stale and clutter file history. Tracking belongs in the backlog, changelogs, or git history.
|
|
40
|
+
|
|
41
|
+
**Detects:**
|
|
42
|
+
- \`// Phase N\` (excluding algorithm step comments like \`// Phase 1: Try primary operation\`)
|
|
43
|
+
- \`// Sprint N\`
|
|
44
|
+
- Version stamps (\`// v1.2.3\`)
|
|
45
|
+
- "Added in vN" comments
|
|
46
|
+
- Date stamps (\`// Updated 2024-01-01\`)
|
|
47
|
+
|
|
48
|
+
**Why it matters:** When the planning context shifts, these comments become misleading. Trim them at authorship time and rely on the backlog and version control for the real history.`,
|
|
49
|
+
tags: ['maintainability', 'code-quality', 'quality'],
|
|
50
|
+
fileTypes: ['ts', 'tsx'],
|
|
51
|
+
disabled: true,
|
|
52
|
+
options: {
|
|
53
|
+
// Comments are exactly what this check targets — do NOT skip them.
|
|
54
|
+
skipCommentLines: false,
|
|
55
|
+
// Original site emitted at most one violation per line via `break`
|
|
56
|
+
// after the first matching pattern.
|
|
57
|
+
oneViolationPerLine: true,
|
|
58
|
+
// Skip lines that look like algorithm-step comments.
|
|
59
|
+
skipLine: (_trimmed, rawLine) => ALGORITHM_PHASE_PATTERN.test(rawLine),
|
|
60
|
+
},
|
|
61
|
+
patterns: [
|
|
62
|
+
{
|
|
63
|
+
id: '274c1f41-817d-4b88-be5e-7907435d92f0',
|
|
64
|
+
slug: 'phase-artifact',
|
|
65
|
+
regex: /\/\/\s{0,5}Phase\s{1,5}\d{1,3}\s{0,5}(?:Enhancement|Implementation|:|$)/i,
|
|
66
|
+
message: `Process artifact comment found. ${PHASE_FIX}`,
|
|
67
|
+
severity: 'error',
|
|
68
|
+
suggestion: PHASE_FIX,
|
|
69
|
+
},
|
|
70
|
+
{
|
|
71
|
+
id: '0c6b412e-75e1-4a54-8642-ce9b27449568',
|
|
72
|
+
slug: 'sprint-artifact',
|
|
73
|
+
regex: /\/\/\s{0,5}Sprint\s{1,5}\d{1,5}\b/i,
|
|
74
|
+
message: `Process artifact comment found. ${SPRINT_FIX}`,
|
|
75
|
+
severity: 'error',
|
|
76
|
+
suggestion: SPRINT_FIX,
|
|
77
|
+
},
|
|
78
|
+
{
|
|
79
|
+
id: '939c4391-e010-45db-90d6-af3c50b6dd3c',
|
|
80
|
+
slug: 'version-stamp',
|
|
81
|
+
regex: /\/\/\s{0,5}v\d{1,3}\.\d{1,3}(?:\.\d{1,5})?\s{0,5}$/i,
|
|
82
|
+
message: `Process artifact comment found. ${VERSION_FIX}`,
|
|
83
|
+
severity: 'error',
|
|
84
|
+
suggestion: VERSION_FIX,
|
|
85
|
+
},
|
|
86
|
+
{
|
|
87
|
+
id: 'cdcdb9e5-36e3-4fc1-b315-b620354a835c',
|
|
88
|
+
slug: 'added-in-version',
|
|
89
|
+
regex: /\/\/\s{0,5}Added\s{1,5}in\s{1,5}v\d{1,5}\b/i,
|
|
90
|
+
message: `Process artifact comment found. ${VERSION_FIX}`,
|
|
91
|
+
severity: 'error',
|
|
92
|
+
suggestion: VERSION_FIX,
|
|
93
|
+
},
|
|
94
|
+
{
|
|
95
|
+
id: '5e8b6c7e-9197-4cd3-a33e-4b2247f4f65b',
|
|
96
|
+
slug: 'date-stamp',
|
|
97
|
+
regex: /\/\/\s{0,5}Updated?\s{1,5}\d{4}-\d{2}-\d{2}\b/i,
|
|
98
|
+
message: `Process artifact comment found. ${DATE_FIX}`,
|
|
99
|
+
severity: 'error',
|
|
100
|
+
suggestion: DATE_FIX,
|
|
101
|
+
},
|
|
102
|
+
],
|
|
103
|
+
});
|
|
104
|
+
//# sourceMappingURL=no-process-artifacts.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"no-process-artifacts.js","sourceRoot":"","sources":["../../../../src/checks/quality/code-structure/no-process-artifacts.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAEH,OAAO,EAAE,oBAAoB,EAAE,MAAM,sBAAsB,CAAC;AAE5D,gEAAgE;AAChE,gEAAgE;AAChE,MAAM,uBAAuB,GAAG,wDAAwD,CAAC;AAEzF,MAAM,SAAS,GAAG,gEAAgE,CAAC;AACnF,MAAM,UAAU,GAAG,4EAA4E,CAAC;AAChG,MAAM,WAAW,GAAG,2DAA2D,CAAC;AAChF,MAAM,QAAQ,GAAG,wDAAwD,CAAC;AAE1E;;;;;GAKG;AACH,MAAM,CAAC,MAAM,kBAAkB,GAAG,oBAAoB,CAAC;IACrD,EAAE,EAAE,sCAAsC;IAC1C,IAAI,EAAE,sBAAsB;IAC5B,KAAK,EAAE,EAAE,SAAS,EAAE,CAAC,YAAY,CAAC,EAAE,QAAQ,EAAE,CAAC,SAAS,EAAE,UAAU,EAAE,KAAK,CAAC,EAAE;IAC9E,aAAa,EAAE,KAAK;IACpB,UAAU,EAAE,QAAQ;IACpB,WAAW,EAAE,oFAAoF;IACjG,eAAe,EAAE;;;;;;;;;uLASoK;IACrL,IAAI,EAAE,CAAC,iBAAiB,EAAE,cAAc,EAAE,SAAS,CAAC;IACpD,SAAS,EAAE,CAAC,IAAI,EAAE,KAAK,CAAC;IACxB,QAAQ,EAAE,IAAI;IACd,OAAO,EAAE;QACP,mEAAmE;QACnE,gBAAgB,EAAE,KAAK;QACvB,mEAAmE;QACnE,oCAAoC;QACpC,mBAAmB,EAAE,IAAI;QACzB,qDAAqD;QACrD,QAAQ,EAAE,CAAC,QAAQ,EAAE,OAAO,EAAE,EAAE,CAAC,uBAAuB,CAAC,IAAI,CAAC,OAAO,CAAC;KACvE;IACD,QAAQ,EAAE;QACR;YACE,EAAE,EAAE,sCAAsC;YAC1C,IAAI,EAAE,gBAAgB;YACtB,KAAK,EAAE,0EAA0E;YACjF,OAAO,EAAE,mCAAmC,SAAS,EAAE;YACvD,QAAQ,EAAE,OAAO;YACjB,UAAU,EAAE,SAAS;SACtB;QACD;YACE,EAAE,EAAE,sCAAsC;YAC1C,IAAI,EAAE,iBAAiB;YACvB,KAAK,EAAE,oCAAoC;YAC3C,OAAO,EAAE,mCAAmC,UAAU,EAAE;YACxD,QAAQ,EAAE,OAAO;YACjB,UAAU,EAAE,UAAU;SACvB;QACD;YACE,EAAE,EAAE,sCAAsC;YAC1C,IAAI,EAAE,eAAe;YACrB,KAAK,EAAE,qDAAqD;YAC5D,OAAO,EAAE,mCAAmC,WAAW,EAAE;YACzD,QAAQ,EAAE,OAAO;YACjB,UAAU,EAAE,WAAW;SACxB;QACD;YACE,EAAE,EAAE,sCAAsC;YAC1C,IAAI,EAAE,kBAAkB;YACxB,KAAK,EAAE,6CAA6C;YACpD,OAAO,EAAE,mCAAmC,WAAW,EAAE;YACzD,QAAQ,EAAE,OAAO;YACjB,UAAU,EAAE,WAAW;SACxB;QACD;YACE,EAAE,EAAE,sCAAsC;YAC1C,IAAI,EAAE,YAAY;YAClB,KAAK,EAAE,gDAAgD;YACvD,OAAO,EAAE,mCAAmC,QAAQ,EAAE;YACtD,QAAQ,EAAE,OAAO;YACjB,UAAU,EAAE,QAAQ;SACrB;KACF;CACF,CAAC,CAAC"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @fileoverview Dependency Version Consistency check
|
|
3
|
+
*
|
|
4
|
+
* Ensures all packages in the monorepo use consistent dependency versions.
|
|
5
|
+
* This prevents version drift which can cause subtle bugs, inconsistent behavior,
|
|
6
|
+
* and bloated lockfiles.
|
|
7
|
+
*
|
|
8
|
+
* Checks:
|
|
9
|
+
* - Dev dependencies: vitest, typescript, tsx, tsc-esm-fix, @types/node
|
|
10
|
+
* - Runtime dependencies: zod, pino
|
|
11
|
+
* - Workspace dependencies use workspace:* protocol
|
|
12
|
+
*/
|
|
13
|
+
/**
|
|
14
|
+
* Check: quality/dependency-version-consistency
|
|
15
|
+
*
|
|
16
|
+
* Ensures all packages use consistent dependency versions and
|
|
17
|
+
* workspace dependencies use the workspace:* protocol.
|
|
18
|
+
*/
|
|
19
|
+
export declare const dependencyVersionConsistency: import("@opensip-cli/fitness").Check;
|
|
20
|
+
//# sourceMappingURL=dependency-version-consistency.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dependency-version-consistency.d.ts","sourceRoot":"","sources":["../../../src/checks/quality/dependency-version-consistency.ts"],"names":[],"mappings":"AAIA;;;;;;;;;;;GAWG;AAuNH;;;;;GAKG;AACH,eAAO,MAAM,4BAA4B,sCAwFvC,CAAC"}
|
|
@@ -0,0 +1,266 @@
|
|
|
1
|
+
// @fitness-ignore-file unused-config-options -- Config options reserved for future use or environment-specific
|
|
2
|
+
// @fitness-ignore-file fitness-check-standards -- Uses fs for package.json reading, not source file content
|
|
3
|
+
// @fitness-ignore-file file-length-limit -- Complex module with tightly coupled logic; refactoring would risk breaking changes
|
|
4
|
+
// @fitness-ignore-file performance-anti-patterns -- spread used to aggregate version sets across bounded workspace package list
|
|
5
|
+
/**
|
|
6
|
+
* @fileoverview Dependency Version Consistency check
|
|
7
|
+
*
|
|
8
|
+
* Ensures all packages in the monorepo use consistent dependency versions.
|
|
9
|
+
* This prevents version drift which can cause subtle bugs, inconsistent behavior,
|
|
10
|
+
* and bloated lockfiles.
|
|
11
|
+
*
|
|
12
|
+
* Checks:
|
|
13
|
+
* - Dev dependencies: vitest, typescript, tsx, tsc-esm-fix, @types/node
|
|
14
|
+
* - Runtime dependencies: zod, pino
|
|
15
|
+
* - Workspace dependencies use workspace:* protocol
|
|
16
|
+
*/
|
|
17
|
+
import * as fs from 'node:fs';
|
|
18
|
+
import * as path from 'node:path';
|
|
19
|
+
import { defineCheck } from '@opensip-cli/fitness';
|
|
20
|
+
/**
|
|
21
|
+
* Dependencies that should have consistent versions across all packages
|
|
22
|
+
*/
|
|
23
|
+
const TRACKED_DEPENDENCIES = [
|
|
24
|
+
// Dev dependencies
|
|
25
|
+
'vitest',
|
|
26
|
+
'typescript',
|
|
27
|
+
'tsx',
|
|
28
|
+
'tsc-esm-fix',
|
|
29
|
+
'@types/node',
|
|
30
|
+
'vite-tsconfig-paths',
|
|
31
|
+
'@vitest/coverage-v8',
|
|
32
|
+
// Runtime dependencies
|
|
33
|
+
'zod',
|
|
34
|
+
'pino',
|
|
35
|
+
'glob',
|
|
36
|
+
];
|
|
37
|
+
/**
|
|
38
|
+
* Workspace package prefixes that should use workspace:* protocol
|
|
39
|
+
*/
|
|
40
|
+
const WORKSPACE_PREFIXES = [];
|
|
41
|
+
/* v8 ignore start -- filesystem read helpers; error/file-size branches covered by integration */
|
|
42
|
+
/**
|
|
43
|
+
* Parse a package.json file safely
|
|
44
|
+
*/
|
|
45
|
+
function parsePackageJson(filePath) {
|
|
46
|
+
try {
|
|
47
|
+
const stats = fs.statSync(filePath);
|
|
48
|
+
if (stats.size > 10_000_000)
|
|
49
|
+
return null;
|
|
50
|
+
const content = fs.readFileSync(filePath, 'utf8');
|
|
51
|
+
return JSON.parse(content);
|
|
52
|
+
}
|
|
53
|
+
catch {
|
|
54
|
+
// @swallow-ok graceful degradation - return sentinel on failure
|
|
55
|
+
return null;
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
/* v8 ignore stop */
|
|
59
|
+
/**
|
|
60
|
+
* Get the root package.json canonical versions
|
|
61
|
+
*/
|
|
62
|
+
function getRootVersions(projectRoot) {
|
|
63
|
+
const rootPkg = parsePackageJson(path.join(projectRoot, 'package.json'));
|
|
64
|
+
const versions = new Map();
|
|
65
|
+
if (!rootPkg)
|
|
66
|
+
return versions;
|
|
67
|
+
const allDeps = {
|
|
68
|
+
...rootPkg.dependencies,
|
|
69
|
+
...rootPkg.devDependencies,
|
|
70
|
+
};
|
|
71
|
+
for (const [dep, version] of Object.entries(allDeps)) {
|
|
72
|
+
if (TRACKED_DEPENDENCIES.includes(dep)) {
|
|
73
|
+
versions.set(dep, version);
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
return versions;
|
|
77
|
+
}
|
|
78
|
+
/**
|
|
79
|
+
* Analyze dependency versions across all packages
|
|
80
|
+
*/
|
|
81
|
+
// eslint-disable-next-line sonarjs/cognitive-complexity -- inherent complexity: collects versions from all packages across deps/devDeps, then determines inconsistencies
|
|
82
|
+
function analyzeDependencyVersions(packageJsonFiles, projectRoot) {
|
|
83
|
+
const analysis = new Map();
|
|
84
|
+
const rootVersions = getRootVersions(projectRoot);
|
|
85
|
+
// Initialize analysis for tracked dependencies
|
|
86
|
+
for (const dep of TRACKED_DEPENDENCIES) {
|
|
87
|
+
analysis.set(dep, {
|
|
88
|
+
dependency: dep,
|
|
89
|
+
versions: new Map(),
|
|
90
|
+
canonicalVersion: rootVersions.get(dep) ?? '',
|
|
91
|
+
hasInconsistency: false,
|
|
92
|
+
});
|
|
93
|
+
}
|
|
94
|
+
// Collect versions from all packages
|
|
95
|
+
for (const pkgPath of packageJsonFiles) {
|
|
96
|
+
const pkg = parsePackageJson(pkgPath);
|
|
97
|
+
if (!pkg)
|
|
98
|
+
continue;
|
|
99
|
+
const pkgName = pkg.name ?? path.basename(path.dirname(pkgPath));
|
|
100
|
+
// Check both dependencies and devDependencies
|
|
101
|
+
const depSources = [
|
|
102
|
+
{ deps: pkg.dependencies, isDev: false },
|
|
103
|
+
{ deps: pkg.devDependencies, isDev: true },
|
|
104
|
+
];
|
|
105
|
+
for (const { deps, isDev } of depSources) {
|
|
106
|
+
if (!deps)
|
|
107
|
+
continue;
|
|
108
|
+
for (const [dep, version] of Object.entries(deps)) {
|
|
109
|
+
const depAnalysis = analysis.get(dep);
|
|
110
|
+
if (depAnalysis) {
|
|
111
|
+
const existing = depAnalysis.versions.get(version);
|
|
112
|
+
if (existing) {
|
|
113
|
+
existing.packages.push(pkgName);
|
|
114
|
+
}
|
|
115
|
+
else {
|
|
116
|
+
depAnalysis.versions.set(version, {
|
|
117
|
+
version,
|
|
118
|
+
packages: [pkgName],
|
|
119
|
+
isDevDep: isDev,
|
|
120
|
+
});
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
// Determine inconsistencies
|
|
127
|
+
for (const [, depAnalysis] of analysis) {
|
|
128
|
+
if (depAnalysis.versions.size > 1) {
|
|
129
|
+
depAnalysis.hasInconsistency = true;
|
|
130
|
+
}
|
|
131
|
+
else if (depAnalysis.versions.size === 1 && depAnalysis.canonicalVersion) {
|
|
132
|
+
const [usedVersion] = depAnalysis.versions.keys();
|
|
133
|
+
if (usedVersion !== depAnalysis.canonicalVersion) {
|
|
134
|
+
depAnalysis.hasInconsistency = true;
|
|
135
|
+
}
|
|
136
|
+
}
|
|
137
|
+
}
|
|
138
|
+
return analysis;
|
|
139
|
+
}
|
|
140
|
+
/**
|
|
141
|
+
* Check for workspace dependencies not using workspace:* protocol
|
|
142
|
+
*/
|
|
143
|
+
function findNonWorkspaceProtocolDeps(packageJsonFiles, projectRoot) {
|
|
144
|
+
const violations = [];
|
|
145
|
+
for (const pkgPath of packageJsonFiles) {
|
|
146
|
+
const pkg = parsePackageJson(pkgPath);
|
|
147
|
+
if (!pkg)
|
|
148
|
+
continue;
|
|
149
|
+
const pkgName = pkg.name ?? path.basename(path.dirname(pkgPath));
|
|
150
|
+
const allDeps = { ...pkg.dependencies, ...pkg.devDependencies };
|
|
151
|
+
for (const [dep, version] of Object.entries(allDeps)) {
|
|
152
|
+
// eslint-disable-next-line sonarjs/no-empty-collection -- WORKSPACE_PREFIXES is intentionally empty by default; consumers populate it via project config
|
|
153
|
+
const isWorkspaceDep = WORKSPACE_PREFIXES.some((prefix) => dep.startsWith(prefix));
|
|
154
|
+
if (isWorkspaceDep && !version.startsWith('workspace:')) {
|
|
155
|
+
violations.push({
|
|
156
|
+
pkgName,
|
|
157
|
+
pkgPath: path.relative(projectRoot, pkgPath),
|
|
158
|
+
dep,
|
|
159
|
+
version,
|
|
160
|
+
});
|
|
161
|
+
}
|
|
162
|
+
}
|
|
163
|
+
}
|
|
164
|
+
return violations;
|
|
165
|
+
}
|
|
166
|
+
/**
|
|
167
|
+
* Get the most common or highest semver version as the canonical choice
|
|
168
|
+
*/
|
|
169
|
+
function suggestCanonicalVersion(analysis) {
|
|
170
|
+
if (analysis.canonicalVersion) {
|
|
171
|
+
return analysis.canonicalVersion;
|
|
172
|
+
}
|
|
173
|
+
// Find version used by most packages
|
|
174
|
+
let maxCount = 0;
|
|
175
|
+
let suggested = '';
|
|
176
|
+
for (const [version, usage] of analysis.versions) {
|
|
177
|
+
if (usage.packages.length > maxCount) {
|
|
178
|
+
maxCount = usage.packages.length;
|
|
179
|
+
suggested = version;
|
|
180
|
+
}
|
|
181
|
+
}
|
|
182
|
+
return suggested;
|
|
183
|
+
}
|
|
184
|
+
/**
|
|
185
|
+
* Check: quality/dependency-version-consistency
|
|
186
|
+
*
|
|
187
|
+
* Ensures all packages use consistent dependency versions and
|
|
188
|
+
* workspace dependencies use the workspace:* protocol.
|
|
189
|
+
*/
|
|
190
|
+
export const dependencyVersionConsistency = defineCheck({
|
|
191
|
+
id: '05d7f95c-59e1-439c-965b-6c1179d3ae13',
|
|
192
|
+
slug: 'dependency-version-consistency',
|
|
193
|
+
scope: { languages: ['json', 'typescript', 'yaml'], concerns: ['config'] },
|
|
194
|
+
confidence: 'medium',
|
|
195
|
+
description: 'Ensures consistent dependency versions across all packages',
|
|
196
|
+
longDescription: `**Purpose:** Ensures all packages in the monorepo use consistent versions of tracked dependencies and workspace protocol for internal packages.
|
|
197
|
+
|
|
198
|
+
**Detects:**
|
|
199
|
+
- Version mismatches for tracked dependencies: vitest, typescript, tsx, tsc-esm-fix, @types/node, vite-tsconfig-paths, @vitest/coverage-v8, zod, pino, glob
|
|
200
|
+
- Workspace dependencies not using the \`workspace:*\` protocol
|
|
201
|
+
|
|
202
|
+
**Why it matters:** Version drift across packages causes subtle bugs, inconsistent behavior, and bloated lockfiles. Non-workspace protocol usage breaks monorepo linking.
|
|
203
|
+
|
|
204
|
+
**Scope:** Codebase-specific convention. Cross-file analysis (\`analyzeAll\`). Scans all \`package.json\` files against root canonical versions.`,
|
|
205
|
+
tags: ['quality', 'dependencies', 'monorepo'],
|
|
206
|
+
// @fitness-ignore-next-line concurrency-safety -- async keyword required by analyzeAll interface contract; synchronous analysis implementation
|
|
207
|
+
// eslint-disable-next-line @typescript-eslint/require-await -- AnalyzeAllCheckConfig requires Promise<CheckViolation[]>; this implementation is synchronous
|
|
208
|
+
async analyzeAll(files) {
|
|
209
|
+
const violations = [];
|
|
210
|
+
// Discover package.json files from the supplied set (NOT process.cwd()), so
|
|
211
|
+
// the check analyzes exactly the files in scope — identical behavior under
|
|
212
|
+
// `fit` (root + every package's package.json are in scope) and under tests.
|
|
213
|
+
// The shortest path is the topmost (root) package.json — the canonical
|
|
214
|
+
// version source; the rest are the workspace packages compared against it.
|
|
215
|
+
const pkgJsonPaths = files.paths
|
|
216
|
+
.filter((p) => path.basename(p) === 'package.json')
|
|
217
|
+
.sort((a, b) => a.length - b.length);
|
|
218
|
+
if (pkgJsonPaths.length === 0) {
|
|
219
|
+
return violations;
|
|
220
|
+
}
|
|
221
|
+
const projectRoot = path.dirname(pkgJsonPaths[0] ?? '');
|
|
222
|
+
const packageJsonFiles = pkgJsonPaths.slice(1);
|
|
223
|
+
// Analyze version consistency
|
|
224
|
+
const analysis = analyzeDependencyVersions(packageJsonFiles, projectRoot);
|
|
225
|
+
// Report version inconsistencies
|
|
226
|
+
for (const [dep, depAnalysis] of analysis) {
|
|
227
|
+
if (depAnalysis.hasInconsistency && depAnalysis.versions.size > 0) {
|
|
228
|
+
const canonical = suggestCanonicalVersion(depAnalysis);
|
|
229
|
+
const affectedPackages = [...depAnalysis.versions.values()]
|
|
230
|
+
.flatMap((u) => u.packages)
|
|
231
|
+
.filter((pkg) => {
|
|
232
|
+
const pkgVersion = [...depAnalysis.versions.entries()].find(([, u]) => u.packages.includes(pkg))?.[0];
|
|
233
|
+
return pkgVersion !== canonical;
|
|
234
|
+
});
|
|
235
|
+
for (const pkgName of affectedPackages) {
|
|
236
|
+
const pkgVersion = [...depAnalysis.versions.entries()].find(([, u]) => u.packages.includes(pkgName))?.[0];
|
|
237
|
+
violations.push({
|
|
238
|
+
line: 1,
|
|
239
|
+
message: `Package '${pkgName}' uses ${dep}@${pkgVersion} instead of canonical version ${canonical}`,
|
|
240
|
+
severity: 'warning',
|
|
241
|
+
// @fitness-ignore-next-line sql-injection -- Fitness check suggestion text, not SQL query
|
|
242
|
+
suggestion: `Update to ${dep}@${canonical} for consistency. Consider using pnpm catalog for centralized version management.`,
|
|
243
|
+
match: dep,
|
|
244
|
+
type: 'version-mismatch',
|
|
245
|
+
filePath: `${pkgName}/package.json`,
|
|
246
|
+
});
|
|
247
|
+
}
|
|
248
|
+
}
|
|
249
|
+
}
|
|
250
|
+
// Check workspace protocol usage
|
|
251
|
+
const nonWorkspaceViolations = findNonWorkspaceProtocolDeps(packageJsonFiles, projectRoot);
|
|
252
|
+
for (const violation of nonWorkspaceViolations) {
|
|
253
|
+
violations.push({
|
|
254
|
+
line: 1,
|
|
255
|
+
message: `Package '${violation.pkgName}' should use 'workspace:*' for ${violation.dep} instead of '${violation.version}'`,
|
|
256
|
+
severity: 'error',
|
|
257
|
+
suggestion: `Change "${violation.dep}": "${violation.version}" to "${violation.dep}": "workspace:*"`,
|
|
258
|
+
match: violation.dep,
|
|
259
|
+
type: 'workspace-protocol',
|
|
260
|
+
filePath: violation.pkgPath,
|
|
261
|
+
});
|
|
262
|
+
}
|
|
263
|
+
return violations;
|
|
264
|
+
},
|
|
265
|
+
});
|
|
266
|
+
//# sourceMappingURL=dependency-version-consistency.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dependency-version-consistency.js","sourceRoot":"","sources":["../../../src/checks/quality/dependency-version-consistency.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @fileoverview Fitness ignore hygiene check
|
|
3
|
+
*/
|
|
4
|
+
/**
|
|
5
|
+
* Check: quality/fitness-ignore-hygiene
|
|
6
|
+
*
|
|
7
|
+
* Validates that @fitness-ignore directives have valid check slugs and reason comments.
|
|
8
|
+
*/
|
|
9
|
+
export declare const fitnessIgnoreHygiene: import("@opensip-cli/fitness").Check;
|
|
10
|
+
//# sourceMappingURL=fitness-ignore-hygiene.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"fitness-ignore-hygiene.d.ts","sourceRoot":"","sources":["../../../src/checks/quality/fitness-ignore-hygiene.ts"],"names":[],"mappings":"AACA;;GAEG;AA2EH;;;;GAIG;AACH,eAAO,MAAM,oBAAoB,sCAqB/B,CAAC"}
|