reviewflow 3.34.0 → 3.36.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/CHANGELOG.md +30 -0
- package/dist/dashboard/index.html +63 -2
- package/dist/dashboard/modules/i18n.d.ts.map +1 -1
- package/dist/dashboard/modules/i18n.js +10 -0
- package/dist/dashboard/modules/i18n.js.map +1 -1
- package/dist/dashboard/setup.html +17 -1
- package/dist/dashboard/styles.css +75 -0
- package/dist/frameworks/settings/runtimeSettings.d.ts +7 -0
- package/dist/frameworks/settings/runtimeSettings.d.ts.map +1 -1
- package/dist/frameworks/settings/runtimeSettings.js +14 -0
- package/dist/frameworks/settings/runtimeSettings.js.map +1 -1
- package/dist/main/routes.d.ts.map +1 -1
- package/dist/main/routes.js +63 -30
- package/dist/main/routes.js.map +1 -1
- package/dist/modules/cli-configuration/interface-adapters/controllers/http/settings.routes.d.ts.map +1 -1
- package/dist/modules/cli-configuration/interface-adapters/controllers/http/settings.routes.js +19 -1
- package/dist/modules/cli-configuration/interface-adapters/controllers/http/settings.routes.js.map +1 -1
- package/dist/modules/platform-integration/interface-adapters/controllers/webhook/github.controller.d.ts +4 -0
- package/dist/modules/platform-integration/interface-adapters/controllers/webhook/github.controller.d.ts.map +1 -1
- package/dist/modules/platform-integration/interface-adapters/controllers/webhook/github.controller.js +54 -46
- package/dist/modules/platform-integration/interface-adapters/controllers/webhook/github.controller.js.map +1 -1
- package/dist/modules/platform-integration/interface-adapters/gateways/cli/noteCommentPost.github.cli.gateway.d.ts.map +1 -1
- package/dist/modules/platform-integration/interface-adapters/gateways/cli/noteCommentPost.github.cli.gateway.js +4 -1
- package/dist/modules/platform-integration/interface-adapters/gateways/cli/noteCommentPost.github.cli.gateway.js.map +1 -1
- package/dist/modules/platform-integration/interface-adapters/gateways/cli/noteCommentPost.gitlab.cli.gateway.d.ts.map +1 -1
- package/dist/modules/platform-integration/interface-adapters/gateways/cli/noteCommentPost.gitlab.cli.gateway.js +4 -1
- package/dist/modules/platform-integration/interface-adapters/gateways/cli/noteCommentPost.gitlab.cli.gateway.js.map +1 -1
- package/dist/modules/platform-integration/interface-adapters/gateways/threadFetch.gitlab.gateway.d.ts.map +1 -1
- package/dist/modules/platform-integration/interface-adapters/gateways/threadFetch.gitlab.gateway.js +3 -0
- package/dist/modules/platform-integration/interface-adapters/gateways/threadFetch.gitlab.gateway.js.map +1 -1
- package/dist/modules/platform-integration/services/scopedExecutorEnvironment.d.ts +1 -0
- package/dist/modules/platform-integration/services/scopedExecutorEnvironment.d.ts.map +1 -1
- package/dist/modules/platform-integration/services/scopedExecutorEnvironment.js +10 -3
- package/dist/modules/platform-integration/services/scopedExecutorEnvironment.js.map +1 -1
- package/dist/modules/review-execution/interface-adapters/controllers/http/pendingReviews.routes.d.ts.map +1 -1
- package/dist/modules/review-execution/interface-adapters/controllers/http/pendingReviews.routes.js +5 -1
- package/dist/modules/review-execution/interface-adapters/controllers/http/pendingReviews.routes.js.map +1 -1
- package/dist/modules/review-execution/interface-adapters/gateways/cli/reviewAction.github.cli.gateway.d.ts.map +1 -1
- package/dist/modules/review-execution/interface-adapters/gateways/cli/reviewAction.github.cli.gateway.js +6 -4
- package/dist/modules/review-execution/interface-adapters/gateways/cli/reviewAction.github.cli.gateway.js.map +1 -1
- package/dist/modules/review-execution/services/contextActionsExecutor.d.ts.map +1 -1
- package/dist/modules/review-execution/services/contextActionsExecutor.js +23 -1
- package/dist/modules/review-execution/services/contextActionsExecutor.js.map +1 -1
- package/dist/modules/review-execution/usecases/confirmPendingReview.usecase.d.ts +4 -0
- package/dist/modules/review-execution/usecases/confirmPendingReview.usecase.d.ts.map +1 -1
- package/dist/modules/review-execution/usecases/confirmPendingReview.usecase.js +6 -1
- package/dist/modules/review-execution/usecases/confirmPendingReview.usecase.js.map +1 -1
- package/dist/modules/review-execution/usecases/gateClaudeInvocation.usecase.d.ts +3 -2
- package/dist/modules/review-execution/usecases/gateClaudeInvocation.usecase.d.ts.map +1 -1
- package/dist/modules/review-execution/usecases/gateClaudeInvocation.usecase.js +2 -1
- package/dist/modules/review-execution/usecases/gateClaudeInvocation.usecase.js.map +1 -1
- package/dist/modules/setup-wizard/interface-adapters/controllers/http/setupWizard.routes.d.ts.map +1 -1
- package/dist/modules/setup-wizard/interface-adapters/controllers/http/setupWizard.routes.js +9 -0
- package/dist/modules/setup-wizard/interface-adapters/controllers/http/setupWizard.routes.js.map +1 -1
- package/dist/modules/setup-wizard/usecases/streamSetupRun.usecase.d.ts +14 -1
- package/dist/modules/setup-wizard/usecases/streamSetupRun.usecase.d.ts.map +1 -1
- package/dist/modules/setup-wizard/usecases/streamSetupRun.usecase.js +50 -6
- package/dist/modules/setup-wizard/usecases/streamSetupRun.usecase.js.map +1 -1
- package/dist/modules/shared-kernel/entities/triggerMode/triggerMode.schema.d.ts +7 -0
- package/dist/modules/shared-kernel/entities/triggerMode/triggerMode.schema.d.ts.map +1 -0
- package/dist/modules/shared-kernel/entities/triggerMode/triggerMode.schema.js +3 -0
- package/dist/modules/shared-kernel/entities/triggerMode/triggerMode.schema.js.map +1 -0
- package/dist/modules/tracking/interface-adapters/controllers/http/mrTrackingAdvanced.routes.d.ts.map +1 -1
- package/dist/modules/tracking/interface-adapters/controllers/http/mrTrackingAdvanced.routes.js +14 -6
- package/dist/modules/tracking/interface-adapters/controllers/http/mrTrackingAdvanced.routes.js.map +1 -1
- package/dist/tests/acceptance/174-semi-auto-review-trigger-mode.acceptance.test.js +4 -3
- package/dist/tests/acceptance/174-semi-auto-review-trigger-mode.acceptance.test.js.map +1 -1
- package/dist/tests/acceptance/202-confirm-pending-review-runs-review.acceptance.test.d.ts +2 -0
- package/dist/tests/acceptance/202-confirm-pending-review-runs-review.acceptance.test.d.ts.map +1 -0
- package/dist/tests/acceptance/202-confirm-pending-review-runs-review.acceptance.test.js +173 -0
- package/dist/tests/acceptance/202-confirm-pending-review-runs-review.acceptance.test.js.map +1 -0
- package/dist/tests/factories/pendingReviewRequest.factory.d.ts +1 -0
- package/dist/tests/factories/pendingReviewRequest.factory.d.ts.map +1 -1
- package/dist/tests/factories/pendingReviewRequest.factory.js +22 -0
- package/dist/tests/factories/pendingReviewRequest.factory.js.map +1 -1
- package/dist/tests/stubs/claudeSession.stub.d.ts +8 -0
- package/dist/tests/stubs/claudeSession.stub.d.ts.map +1 -1
- package/dist/tests/stubs/claudeSession.stub.js +24 -2
- package/dist/tests/stubs/claudeSession.stub.js.map +1 -1
- package/dist/tests/units/entities/insight/teamInsight.guard.test.d.ts +2 -0
- package/dist/tests/units/entities/insight/teamInsight.guard.test.d.ts.map +1 -0
- package/dist/tests/units/entities/insight/teamInsight.guard.test.js +45 -0
- package/dist/tests/units/entities/insight/teamInsight.guard.test.js.map +1 -0
- package/dist/tests/units/frameworks/settings/runtimeSettings.test.js +48 -3
- package/dist/tests/units/frameworks/settings/runtimeSettings.test.js.map +1 -1
- package/dist/tests/units/interface-adapters/controllers/http/settings.routes.test.js +36 -1
- package/dist/tests/units/interface-adapters/controllers/http/settings.routes.test.js.map +1 -1
- package/dist/tests/units/interface-adapters/controllers/http/stats.routes.test.d.ts +2 -0
- package/dist/tests/units/interface-adapters/controllers/http/stats.routes.test.d.ts.map +1 -0
- package/dist/tests/units/interface-adapters/controllers/http/stats.routes.test.js +208 -0
- package/dist/tests/units/interface-adapters/controllers/http/stats.routes.test.js.map +1 -0
- package/dist/tests/units/interface-adapters/controllers/mcp/addAction.handler.test.js +92 -0
- package/dist/tests/units/interface-adapters/controllers/mcp/addAction.handler.test.js.map +1 -1
- package/dist/tests/units/interface-adapters/controllers/webhook/github.controller.test.js +303 -0
- package/dist/tests/units/interface-adapters/controllers/webhook/github.controller.test.js.map +1 -1
- package/dist/tests/units/interface-adapters/controllers/webhook/gitlab.controller.test.js +360 -2
- package/dist/tests/units/interface-adapters/controllers/webhook/gitlab.controller.test.js.map +1 -1
- package/dist/tests/units/interface-adapters/gateways/cli/reviewAction.github.cli.gateway.test.js +10 -3
- package/dist/tests/units/interface-adapters/gateways/cli/reviewAction.github.cli.gateway.test.js.map +1 -1
- package/dist/tests/units/modules/claude-invocation/usecases/awaitSessionCompletion.usecase.test.js +66 -0
- package/dist/tests/units/modules/claude-invocation/usecases/awaitSessionCompletion.usecase.test.js.map +1 -1
- package/dist/tests/units/modules/claude-invocation/usecases/cleanupClaudeSession.usecase.test.js +62 -0
- package/dist/tests/units/modules/claude-invocation/usecases/cleanupClaudeSession.usecase.test.js.map +1 -1
- package/dist/tests/units/modules/cli-configuration/interface-adapters/controllers/http/cliStatus.routes.test.d.ts +2 -0
- package/dist/tests/units/modules/cli-configuration/interface-adapters/controllers/http/cliStatus.routes.test.d.ts.map +1 -0
- package/dist/tests/units/modules/cli-configuration/interface-adapters/controllers/http/cliStatus.routes.test.js +182 -0
- package/dist/tests/units/modules/cli-configuration/interface-adapters/controllers/http/cliStatus.routes.test.js.map +1 -0
- package/dist/tests/units/modules/cli-configuration/interface-adapters/controllers/http/projectConfig.routes.test.js +225 -0
- package/dist/tests/units/modules/cli-configuration/interface-adapters/controllers/http/projectConfig.routes.test.js.map +1 -1
- package/dist/tests/units/modules/ember-chat/gateways/emberAnswerTransport.claude.gateway.test.d.ts +2 -0
- package/dist/tests/units/modules/ember-chat/gateways/emberAnswerTransport.claude.gateway.test.d.ts.map +1 -0
- package/dist/tests/units/modules/ember-chat/gateways/emberAnswerTransport.claude.gateway.test.js +171 -0
- package/dist/tests/units/modules/ember-chat/gateways/emberAnswerTransport.claude.gateway.test.js.map +1 -0
- package/dist/tests/units/modules/platform-integration/controllers/githubProcessorProvenance.test.d.ts +2 -0
- package/dist/tests/units/modules/platform-integration/controllers/githubProcessorProvenance.test.d.ts.map +1 -0
- package/dist/tests/units/modules/platform-integration/controllers/githubProcessorProvenance.test.js +70 -0
- package/dist/tests/units/modules/platform-integration/controllers/githubProcessorProvenance.test.js.map +1 -0
- package/dist/tests/units/modules/platform-integration/entities/transport/cidr.test.d.ts +2 -0
- package/dist/tests/units/modules/platform-integration/entities/transport/cidr.test.d.ts.map +1 -0
- package/dist/tests/units/modules/platform-integration/entities/transport/cidr.test.js +51 -0
- package/dist/tests/units/modules/platform-integration/entities/transport/cidr.test.js.map +1 -0
- package/dist/tests/units/modules/platform-integration/gateways/scopedGitLabExecutor.test.js +4 -0
- package/dist/tests/units/modules/platform-integration/gateways/scopedGitLabExecutor.test.js.map +1 -1
- package/dist/tests/units/modules/platform-integration/interface-adapters/gateways/cli/noteCommentPost.cli.shellSafety.test.d.ts +2 -0
- package/dist/tests/units/modules/platform-integration/interface-adapters/gateways/cli/noteCommentPost.cli.shellSafety.test.d.ts.map +1 -0
- package/dist/tests/units/modules/platform-integration/interface-adapters/gateways/cli/noteCommentPost.cli.shellSafety.test.js +39 -0
- package/dist/tests/units/modules/platform-integration/interface-adapters/gateways/cli/noteCommentPost.cli.shellSafety.test.js.map +1 -0
- package/dist/tests/units/modules/platform-integration/services/scopedExecutorEnvironment.test.js +15 -2
- package/dist/tests/units/modules/platform-integration/services/scopedExecutorEnvironment.test.js.map +1 -1
- package/dist/tests/units/modules/review-execution/entities/reviewRequest/reviewRequest.guard.test.d.ts +2 -0
- package/dist/tests/units/modules/review-execution/entities/reviewRequest/reviewRequest.guard.test.d.ts.map +1 -0
- package/dist/tests/units/modules/review-execution/entities/reviewRequest/reviewRequest.guard.test.js +34 -0
- package/dist/tests/units/modules/review-execution/entities/reviewRequest/reviewRequest.guard.test.js.map +1 -0
- package/dist/tests/units/modules/review-execution/interface-adapters/controllers/http/pendingReviews.routes.test.js +21 -2
- package/dist/tests/units/modules/review-execution/interface-adapters/controllers/http/pendingReviews.routes.test.js.map +1 -1
- package/dist/tests/units/modules/review-execution/interface-adapters/controllers/http/reviews.routes.test.d.ts +2 -0
- package/dist/tests/units/modules/review-execution/interface-adapters/controllers/http/reviews.routes.test.d.ts.map +1 -0
- package/dist/tests/units/modules/review-execution/interface-adapters/controllers/http/reviews.routes.test.js +210 -0
- package/dist/tests/units/modules/review-execution/interface-adapters/controllers/http/reviews.routes.test.js.map +1 -0
- package/dist/tests/units/modules/review-execution/interface-adapters/gateways/fileSystem/reviewFile.fileSystem.test.d.ts +2 -0
- package/dist/tests/units/modules/review-execution/interface-adapters/gateways/fileSystem/reviewFile.fileSystem.test.d.ts.map +1 -0
- package/dist/tests/units/modules/review-execution/interface-adapters/gateways/fileSystem/reviewFile.fileSystem.test.js +103 -0
- package/dist/tests/units/modules/review-execution/interface-adapters/gateways/fileSystem/reviewFile.fileSystem.test.js.map +1 -0
- package/dist/tests/units/modules/review-execution/usecases/confirmPendingReview.usecase.test.js +25 -0
- package/dist/tests/units/modules/review-execution/usecases/confirmPendingReview.usecase.test.js.map +1 -1
- package/dist/tests/units/modules/review-execution/usecases/gateClaudeInvocation.usecase.test.js +34 -7
- package/dist/tests/units/modules/review-execution/usecases/gateClaudeInvocation.usecase.test.js.map +1 -1
- package/dist/tests/units/modules/setup-wizard/gateways/serverConfig.fileSystem.gateway.test.d.ts +2 -0
- package/dist/tests/units/modules/setup-wizard/gateways/serverConfig.fileSystem.gateway.test.d.ts.map +1 -0
- package/dist/tests/units/modules/setup-wizard/gateways/serverConfig.fileSystem.gateway.test.js +98 -0
- package/dist/tests/units/modules/setup-wizard/gateways/serverConfig.fileSystem.gateway.test.js.map +1 -0
- package/dist/tests/units/modules/setup-wizard/interface-adapters/controllers/http/setupWizard.routes.test.js +12 -0
- package/dist/tests/units/modules/setup-wizard/interface-adapters/controllers/http/setupWizard.routes.test.js.map +1 -1
- package/dist/tests/units/modules/setup-wizard/interface-adapters/gateways/skillTemplate.fileSystem.gateway.test.d.ts +2 -0
- package/dist/tests/units/modules/setup-wizard/interface-adapters/gateways/skillTemplate.fileSystem.gateway.test.d.ts.map +1 -0
- package/dist/tests/units/modules/setup-wizard/interface-adapters/gateways/skillTemplate.fileSystem.gateway.test.js +51 -0
- package/dist/tests/units/modules/setup-wizard/interface-adapters/gateways/skillTemplate.fileSystem.gateway.test.js.map +1 -0
- package/dist/tests/units/modules/setup-wizard/interface-adapters/gateways/validation.adapter.gateway.test.d.ts +2 -0
- package/dist/tests/units/modules/setup-wizard/interface-adapters/gateways/validation.adapter.gateway.test.d.ts.map +1 -0
- package/dist/tests/units/modules/setup-wizard/interface-adapters/gateways/validation.adapter.gateway.test.js +70 -0
- package/dist/tests/units/modules/setup-wizard/interface-adapters/gateways/validation.adapter.gateway.test.js.map +1 -0
- package/dist/tests/units/modules/setup-wizard/usecases/streamSetupRun.usecase.test.js +60 -1
- package/dist/tests/units/modules/setup-wizard/usecases/streamSetupRun.usecase.test.js.map +1 -1
- package/dist/tests/units/modules/shared-kernel/entities/triggerMode/triggerMode.schema.test.d.ts +2 -0
- package/dist/tests/units/modules/shared-kernel/entities/triggerMode/triggerMode.schema.test.d.ts.map +1 -0
- package/dist/tests/units/modules/shared-kernel/entities/triggerMode/triggerMode.schema.test.js +14 -0
- package/dist/tests/units/modules/shared-kernel/entities/triggerMode/triggerMode.schema.test.js.map +1 -0
- package/dist/tests/units/modules/statistics-insights/entities/insight/developerInsight.guard.test.d.ts +2 -0
- package/dist/tests/units/modules/statistics-insights/entities/insight/developerInsight.guard.test.d.ts.map +1 -0
- package/dist/tests/units/modules/statistics-insights/entities/insight/developerInsight.guard.test.js +49 -0
- package/dist/tests/units/modules/statistics-insights/entities/insight/developerInsight.guard.test.js.map +1 -0
- package/dist/tests/units/modules/statistics-insights/entities/insight/persistedInsightsData.guard.test.d.ts +2 -0
- package/dist/tests/units/modules/statistics-insights/entities/insight/persistedInsightsData.guard.test.d.ts.map +1 -0
- package/dist/tests/units/modules/statistics-insights/entities/insight/persistedInsightsData.guard.test.js +29 -0
- package/dist/tests/units/modules/statistics-insights/entities/insight/persistedInsightsData.guard.test.js.map +1 -0
- package/dist/tests/units/modules/statistics-insights/gateways/aiInsightsSession.claude.gateway.test.d.ts +2 -0
- package/dist/tests/units/modules/statistics-insights/gateways/aiInsightsSession.claude.gateway.test.d.ts.map +1 -0
- package/dist/tests/units/modules/statistics-insights/gateways/aiInsightsSession.claude.gateway.test.js +63 -0
- package/dist/tests/units/modules/statistics-insights/gateways/aiInsightsSession.claude.gateway.test.js.map +1 -0
- package/dist/tests/units/modules/statistics-insights/gateways/stats.fileSystem.test.d.ts +2 -0
- package/dist/tests/units/modules/statistics-insights/gateways/stats.fileSystem.test.d.ts.map +1 -0
- package/dist/tests/units/modules/statistics-insights/gateways/stats.fileSystem.test.js +73 -0
- package/dist/tests/units/modules/statistics-insights/gateways/stats.fileSystem.test.js.map +1 -0
- package/dist/tests/units/modules/statistics-insights/interface-adapters/presenters/overview.presenter.test.js +99 -0
- package/dist/tests/units/modules/statistics-insights/interface-adapters/presenters/overview.presenter.test.js.map +1 -1
- package/dist/tests/units/modules/supervisor-management/gateways/supervisorLock.fileSystem.gateway.test.js +60 -2
- package/dist/tests/units/modules/supervisor-management/gateways/supervisorLock.fileSystem.gateway.test.js.map +1 -1
- package/dist/tests/units/modules/tracking/interface-adapters/controllers/http/mrTrackingAdvanced.routes.test.js +499 -18
- package/dist/tests/units/modules/tracking/interface-adapters/controllers/http/mrTrackingAdvanced.routes.test.js.map +1 -1
- package/dist/tests/units/modules/tracking/interface-adapters/gateways/fileSystem/reviewRequestTracking.fileSystem.test.d.ts +2 -0
- package/dist/tests/units/modules/tracking/interface-adapters/gateways/fileSystem/reviewRequestTracking.fileSystem.test.d.ts.map +1 -0
- package/dist/tests/units/modules/tracking/interface-adapters/gateways/fileSystem/reviewRequestTracking.fileSystem.test.js +273 -0
- package/dist/tests/units/modules/tracking/interface-adapters/gateways/fileSystem/reviewRequestTracking.fileSystem.test.js.map +1 -0
- package/dist/tests/units/modules/worktree-management/entities/worktree/worktree.test.js +47 -1
- package/dist/tests/units/modules/worktree-management/entities/worktree/worktree.test.js.map +1 -1
- package/dist/tests/units/modules/worktree-management/usecases/sweepStaleWorktrees.usecase.test.js +98 -0
- package/dist/tests/units/modules/worktree-management/usecases/sweepStaleWorktrees.usecase.test.js.map +1 -1
- package/dist/tests/units/services/contextActionsExecutor.test.js +67 -0
- package/dist/tests/units/services/contextActionsExecutor.test.js.map +1 -1
- package/dist/tests/units/services/statsService.branches.test.d.ts +2 -0
- package/dist/tests/units/services/statsService.branches.test.d.ts.map +1 -0
- package/dist/tests/units/services/statsService.branches.test.js +266 -0
- package/dist/tests/units/services/statsService.branches.test.js.map +1 -0
- package/dist/tests/units/shared/services/logFileReader.test.d.ts +2 -0
- package/dist/tests/units/shared/services/logFileReader.test.d.ts.map +1 -0
- package/dist/tests/units/shared/services/logFileReader.test.js +70 -0
- package/dist/tests/units/shared/services/logFileReader.test.js.map +1 -0
- package/dist/tests/units/usecases/insights/buildAiInsightsPrompt.test.js +206 -0
- package/dist/tests/units/usecases/insights/buildAiInsightsPrompt.test.js.map +1 -1
- package/dist/tests/units/usecases/insights/computeDeveloperInsights.usecase.test.js +40 -0
- package/dist/tests/units/usecases/insights/computeDeveloperInsights.usecase.test.js.map +1 -1
- package/dist/tests/units/usecases/insights/computeInsightsWithPersistence.usecase.test.js +204 -0
- package/dist/tests/units/usecases/insights/computeInsightsWithPersistence.usecase.test.js.map +1 -1
- package/dist/tests/units/usecases/insights/getInsightsWithAiStatus.usecase.test.js +57 -0
- package/dist/tests/units/usecases/insights/getInsightsWithAiStatus.usecase.test.js.map +1 -1
- package/dist/tests/units/usecases/insights/insightLevelComputation.service.test.js +391 -1
- package/dist/tests/units/usecases/insights/insightLevelComputation.service.test.js.map +1 -1
- package/package.json +4 -1
|
@@ -1,6 +1,18 @@
|
|
|
1
1
|
import { describe, it, expect } from 'vitest';
|
|
2
|
-
import { normalizeHigherIsBetter, normalizeLowerIsBetter, computeDeveloperMetrics, computeTeamMetrics, computeCategoryLevels, } from '../../../../modules/statistics-insights/usecases/insights/insightLevelComputation.service.js';
|
|
2
|
+
import { normalizeHigherIsBetter, normalizeLowerIsBetter, computeDeveloperMetrics, computeTeamMetrics, computeCategoryLevels, average, averageOfScores, averageCodeVolume, clampLevel, trendToScore, invertTrend, computeTrendForMetric, computeCodeVolumeTrend, identifyStrengths, identifyWeaknesses, identifyTopPriority, computeTitle, computeOverallLevel, } from '../../../../modules/statistics-insights/usecases/insights/insightLevelComputation.service.js';
|
|
3
3
|
import { ReviewStatsFactory } from '../../../../tests/factories/projectStats.factory.js';
|
|
4
|
+
function categoryLevel(level, trend = 'stable') {
|
|
5
|
+
return { level, trend };
|
|
6
|
+
}
|
|
7
|
+
function createCategoryLevels(overrides = {}) {
|
|
8
|
+
return {
|
|
9
|
+
quality: categoryLevel(5),
|
|
10
|
+
responsiveness: categoryLevel(5),
|
|
11
|
+
codeVolume: categoryLevel(5),
|
|
12
|
+
iteration: categoryLevel(5),
|
|
13
|
+
...overrides,
|
|
14
|
+
};
|
|
15
|
+
}
|
|
4
16
|
function createReviewsForDeveloper(developerName, count, overrides = {}) {
|
|
5
17
|
return Array.from({ length: count }, (_, index) => ReviewStatsFactory.create({
|
|
6
18
|
id: `${developerName}-${index}`,
|
|
@@ -122,4 +134,382 @@ describe('level calibration with real-world data', () => {
|
|
|
122
134
|
expect(lowLevels.quality.level).toBeLessThanOrEqual(3);
|
|
123
135
|
});
|
|
124
136
|
});
|
|
137
|
+
describe('average', () => {
|
|
138
|
+
it('should return 0 for an empty array', () => {
|
|
139
|
+
expect(average([])).toBe(0);
|
|
140
|
+
});
|
|
141
|
+
it('should return the arithmetic mean for a non-empty array', () => {
|
|
142
|
+
expect(average([2, 4, 6])).toBe(4);
|
|
143
|
+
});
|
|
144
|
+
});
|
|
145
|
+
describe('averageOfScores', () => {
|
|
146
|
+
it('should return the neutral fallback of 5 when no review has a score', () => {
|
|
147
|
+
const reviews = [
|
|
148
|
+
ReviewStatsFactory.create({ score: null }),
|
|
149
|
+
ReviewStatsFactory.create({ score: null }),
|
|
150
|
+
];
|
|
151
|
+
expect(averageOfScores(reviews)).toBe(5);
|
|
152
|
+
});
|
|
153
|
+
it('should average only the scored reviews', () => {
|
|
154
|
+
const reviews = [
|
|
155
|
+
ReviewStatsFactory.create({ score: 8 }),
|
|
156
|
+
ReviewStatsFactory.create({ score: null }),
|
|
157
|
+
ReviewStatsFactory.create({ score: 6 }),
|
|
158
|
+
];
|
|
159
|
+
expect(averageOfScores(reviews)).toBe(7);
|
|
160
|
+
});
|
|
161
|
+
});
|
|
162
|
+
describe('averageCodeVolume', () => {
|
|
163
|
+
it('should return 0 when no review has diff stats', () => {
|
|
164
|
+
const reviews = [
|
|
165
|
+
ReviewStatsFactory.create({ diffStats: null }),
|
|
166
|
+
ReviewStatsFactory.create({ diffStats: undefined }),
|
|
167
|
+
];
|
|
168
|
+
expect(averageCodeVolume(reviews)).toBe(0);
|
|
169
|
+
});
|
|
170
|
+
it('should sum additions and deletions across reviews with diff stats', () => {
|
|
171
|
+
const reviews = [
|
|
172
|
+
ReviewStatsFactory.withDiffStats({ commitsCount: 1, additions: 100, deletions: 20 }),
|
|
173
|
+
ReviewStatsFactory.create({ diffStats: null }),
|
|
174
|
+
ReviewStatsFactory.withDiffStats({ commitsCount: 1, additions: 30, deletions: 10 }),
|
|
175
|
+
];
|
|
176
|
+
expect(averageCodeVolume(reviews)).toBe(80);
|
|
177
|
+
});
|
|
178
|
+
});
|
|
179
|
+
describe('clampLevel', () => {
|
|
180
|
+
it('should clamp below the minimum to 1', () => {
|
|
181
|
+
expect(clampLevel(-3)).toBe(1);
|
|
182
|
+
});
|
|
183
|
+
it('should clamp above the maximum to 10', () => {
|
|
184
|
+
expect(clampLevel(42)).toBe(10);
|
|
185
|
+
});
|
|
186
|
+
it('should pass through values inside the range', () => {
|
|
187
|
+
expect(clampLevel(6)).toBe(6);
|
|
188
|
+
});
|
|
189
|
+
});
|
|
190
|
+
describe('trendToScore', () => {
|
|
191
|
+
it('should map improving to 0.8', () => {
|
|
192
|
+
expect(trendToScore('improving')).toBe(0.8);
|
|
193
|
+
});
|
|
194
|
+
it('should map stable to 0.5', () => {
|
|
195
|
+
expect(trendToScore('stable')).toBe(0.5);
|
|
196
|
+
});
|
|
197
|
+
it('should map declining to 0.2', () => {
|
|
198
|
+
expect(trendToScore('declining')).toBe(0.2);
|
|
199
|
+
});
|
|
200
|
+
});
|
|
201
|
+
describe('invertTrend', () => {
|
|
202
|
+
it('should invert improving to declining', () => {
|
|
203
|
+
expect(invertTrend('improving')).toBe('declining');
|
|
204
|
+
});
|
|
205
|
+
it('should invert declining to improving', () => {
|
|
206
|
+
expect(invertTrend('declining')).toBe('improving');
|
|
207
|
+
});
|
|
208
|
+
it('should keep stable unchanged', () => {
|
|
209
|
+
expect(invertTrend('stable')).toBe('stable');
|
|
210
|
+
});
|
|
211
|
+
});
|
|
212
|
+
describe('computeTrendForMetric', () => {
|
|
213
|
+
const extractScore = (review) => review.score ?? 0;
|
|
214
|
+
function reviewsWithScores(scores) {
|
|
215
|
+
return scores.map((score, index) => ReviewStatsFactory.create({
|
|
216
|
+
id: `r-${index}`,
|
|
217
|
+
score,
|
|
218
|
+
timestamp: `2024-01-${String(index + 1).padStart(2, '0')}T10:00:00Z`,
|
|
219
|
+
}));
|
|
220
|
+
}
|
|
221
|
+
it('should return stable when there are fewer reviews than the trend window', () => {
|
|
222
|
+
const reviews = reviewsWithScores([5, 6, 7]);
|
|
223
|
+
expect(computeTrendForMetric(reviews, extractScore)).toBe('stable');
|
|
224
|
+
});
|
|
225
|
+
it('should return stable when the previous window is empty', () => {
|
|
226
|
+
const reviews = reviewsWithScores(new Array(10).fill(5));
|
|
227
|
+
expect(computeTrendForMetric(reviews, extractScore)).toBe('stable');
|
|
228
|
+
});
|
|
229
|
+
it('should return stable when both windows average exactly 0', () => {
|
|
230
|
+
const reviews = reviewsWithScores(new Array(15).fill(0));
|
|
231
|
+
expect(computeTrendForMetric(reviews, extractScore)).toBe('stable');
|
|
232
|
+
});
|
|
233
|
+
it('should return improving when the recent window is clearly higher', () => {
|
|
234
|
+
const reviews = reviewsWithScores([1, 1, 1, 1, 1, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9]);
|
|
235
|
+
expect(computeTrendForMetric(reviews, extractScore)).toBe('improving');
|
|
236
|
+
});
|
|
237
|
+
it('should return declining when the recent window is clearly lower', () => {
|
|
238
|
+
const reviews = reviewsWithScores([9, 9, 9, 9, 9, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1]);
|
|
239
|
+
expect(computeTrendForMetric(reviews, extractScore)).toBe('declining');
|
|
240
|
+
});
|
|
241
|
+
it('should return stable when the change stays within the threshold', () => {
|
|
242
|
+
const reviews = reviewsWithScores(new Array(15).fill(5));
|
|
243
|
+
expect(computeTrendForMetric(reviews, extractScore)).toBe('stable');
|
|
244
|
+
});
|
|
245
|
+
});
|
|
246
|
+
describe('computeCodeVolumeTrend', () => {
|
|
247
|
+
function volumeReviews(volumes) {
|
|
248
|
+
return volumes.map((volume, index) => ReviewStatsFactory.withDiffStats({ commitsCount: 1, additions: volume, deletions: 0 }, { id: `v-${index}`, timestamp: `2024-01-${String(index + 1).padStart(2, '0')}T10:00:00Z` }));
|
|
249
|
+
}
|
|
250
|
+
it('should return stable when there are fewer reviews than the trend window', () => {
|
|
251
|
+
expect(computeCodeVolumeTrend(volumeReviews([10, 20]))).toBe('stable');
|
|
252
|
+
});
|
|
253
|
+
it('should return stable when the previous window is empty', () => {
|
|
254
|
+
expect(computeCodeVolumeTrend(volumeReviews(new Array(10).fill(100)))).toBe('stable');
|
|
255
|
+
});
|
|
256
|
+
it('should return stable when the previous window volume is 0', () => {
|
|
257
|
+
const reviews = [
|
|
258
|
+
...new Array(5).fill(0).map((_, index) => ReviewStatsFactory.create({
|
|
259
|
+
id: `z-${index}`,
|
|
260
|
+
diffStats: null,
|
|
261
|
+
timestamp: `2024-01-0${index + 1}T10:00:00Z`,
|
|
262
|
+
})),
|
|
263
|
+
...volumeReviews(new Array(10).fill(100)).map((review, index) => ({
|
|
264
|
+
...review,
|
|
265
|
+
timestamp: `2024-01-${String(index + 6).padStart(2, '0')}T10:00:00Z`,
|
|
266
|
+
})),
|
|
267
|
+
];
|
|
268
|
+
expect(computeCodeVolumeTrend(reviews)).toBe('stable');
|
|
269
|
+
});
|
|
270
|
+
it('should return improving when recent volume grows beyond 15%', () => {
|
|
271
|
+
const reviews = volumeReviews([
|
|
272
|
+
100, 100, 100, 100, 100, 300, 300, 300, 300, 300, 300, 300, 300, 300, 300,
|
|
273
|
+
]);
|
|
274
|
+
expect(computeCodeVolumeTrend(reviews)).toBe('improving');
|
|
275
|
+
});
|
|
276
|
+
it('should return declining when recent volume drops beyond 15%', () => {
|
|
277
|
+
const reviews = volumeReviews([
|
|
278
|
+
300, 300, 300, 300, 300, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100,
|
|
279
|
+
]);
|
|
280
|
+
expect(computeCodeVolumeTrend(reviews)).toBe('declining');
|
|
281
|
+
});
|
|
282
|
+
it('should return stable when the volume change stays within 15%', () => {
|
|
283
|
+
const reviews = volumeReviews(new Array(15).fill(100));
|
|
284
|
+
expect(computeCodeVolumeTrend(reviews)).toBe('stable');
|
|
285
|
+
});
|
|
286
|
+
});
|
|
287
|
+
describe('identifyStrengths', () => {
|
|
288
|
+
it('should include a category whose level meets the strength threshold', () => {
|
|
289
|
+
const levels = createCategoryLevels({ quality: categoryLevel(8) });
|
|
290
|
+
expect(identifyStrengths(levels)).toContain('quality');
|
|
291
|
+
});
|
|
292
|
+
it('should include a category improving above the trend threshold even below the level threshold', () => {
|
|
293
|
+
const levels = createCategoryLevels({
|
|
294
|
+
responsiveness: categoryLevel(5, 'improving'),
|
|
295
|
+
});
|
|
296
|
+
expect(identifyStrengths(levels)).toContain('responsiveness');
|
|
297
|
+
});
|
|
298
|
+
it('should return an empty array when no category qualifies', () => {
|
|
299
|
+
const levels = createCategoryLevels({
|
|
300
|
+
quality: categoryLevel(4, 'declining'),
|
|
301
|
+
responsiveness: categoryLevel(4, 'declining'),
|
|
302
|
+
codeVolume: categoryLevel(4, 'declining'),
|
|
303
|
+
iteration: categoryLevel(4, 'declining'),
|
|
304
|
+
});
|
|
305
|
+
expect(identifyStrengths(levels)).toEqual([]);
|
|
306
|
+
});
|
|
307
|
+
});
|
|
308
|
+
describe('identifyWeaknesses', () => {
|
|
309
|
+
it('should include a category whose level is at or below the weakness threshold', () => {
|
|
310
|
+
const levels = createCategoryLevels({ quality: categoryLevel(4) });
|
|
311
|
+
expect(identifyWeaknesses(levels)).toContain('quality');
|
|
312
|
+
});
|
|
313
|
+
it('should include a declining category below the trend threshold even above the level threshold', () => {
|
|
314
|
+
const levels = createCategoryLevels({
|
|
315
|
+
responsiveness: categoryLevel(6, 'declining'),
|
|
316
|
+
});
|
|
317
|
+
expect(identifyWeaknesses(levels)).toContain('responsiveness');
|
|
318
|
+
});
|
|
319
|
+
it('should return an empty array when no category qualifies', () => {
|
|
320
|
+
const levels = createCategoryLevels({
|
|
321
|
+
quality: categoryLevel(8, 'improving'),
|
|
322
|
+
responsiveness: categoryLevel(8, 'improving'),
|
|
323
|
+
codeVolume: categoryLevel(8, 'improving'),
|
|
324
|
+
iteration: categoryLevel(8, 'improving'),
|
|
325
|
+
});
|
|
326
|
+
expect(identifyWeaknesses(levels)).toEqual([]);
|
|
327
|
+
});
|
|
328
|
+
});
|
|
329
|
+
describe('identifyTopPriority', () => {
|
|
330
|
+
it('should return the lowest category when it is at or below 6', () => {
|
|
331
|
+
const levels = createCategoryLevels({
|
|
332
|
+
quality: categoryLevel(8),
|
|
333
|
+
responsiveness: categoryLevel(3),
|
|
334
|
+
codeVolume: categoryLevel(7),
|
|
335
|
+
iteration: categoryLevel(9),
|
|
336
|
+
});
|
|
337
|
+
expect(identifyTopPriority(levels)).toBe('responsiveness');
|
|
338
|
+
});
|
|
339
|
+
it('should weight a declining category by lowering its priority score', () => {
|
|
340
|
+
const levels = createCategoryLevels({
|
|
341
|
+
quality: categoryLevel(5),
|
|
342
|
+
responsiveness: categoryLevel(6, 'declining'),
|
|
343
|
+
codeVolume: categoryLevel(7),
|
|
344
|
+
iteration: categoryLevel(8),
|
|
345
|
+
});
|
|
346
|
+
expect(identifyTopPriority(levels)).toBe('responsiveness');
|
|
347
|
+
});
|
|
348
|
+
it('should return null when the lowest category is still above 6', () => {
|
|
349
|
+
const levels = createCategoryLevels({
|
|
350
|
+
quality: categoryLevel(7),
|
|
351
|
+
responsiveness: categoryLevel(8),
|
|
352
|
+
codeVolume: categoryLevel(9),
|
|
353
|
+
iteration: categoryLevel(10),
|
|
354
|
+
});
|
|
355
|
+
expect(identifyTopPriority(levels)).toBeNull();
|
|
356
|
+
});
|
|
357
|
+
});
|
|
358
|
+
describe('computeTitle', () => {
|
|
359
|
+
it('should return polyvalent when the level spread is within the balanced threshold', () => {
|
|
360
|
+
const levels = createCategoryLevels({
|
|
361
|
+
quality: categoryLevel(6),
|
|
362
|
+
responsiveness: categoryLevel(7),
|
|
363
|
+
codeVolume: categoryLevel(8),
|
|
364
|
+
iteration: categoryLevel(6),
|
|
365
|
+
});
|
|
366
|
+
expect(computeTitle(levels)).toBe('polyvalent');
|
|
367
|
+
});
|
|
368
|
+
it('should return risingStar when the lowest category is improving', () => {
|
|
369
|
+
const levels = createCategoryLevels({
|
|
370
|
+
quality: categoryLevel(9),
|
|
371
|
+
responsiveness: categoryLevel(8),
|
|
372
|
+
codeVolume: categoryLevel(2, 'improving'),
|
|
373
|
+
iteration: categoryLevel(7),
|
|
374
|
+
});
|
|
375
|
+
expect(computeTitle(levels)).toBe('risingStar');
|
|
376
|
+
});
|
|
377
|
+
it('should map a dominant quality category to architect', () => {
|
|
378
|
+
const levels = createCategoryLevels({
|
|
379
|
+
quality: categoryLevel(10),
|
|
380
|
+
responsiveness: categoryLevel(4),
|
|
381
|
+
codeVolume: categoryLevel(3),
|
|
382
|
+
iteration: categoryLevel(5),
|
|
383
|
+
});
|
|
384
|
+
expect(computeTitle(levels)).toBe('architect');
|
|
385
|
+
});
|
|
386
|
+
it('should map a dominant responsiveness category to firefighter', () => {
|
|
387
|
+
const levels = createCategoryLevels({
|
|
388
|
+
quality: categoryLevel(4),
|
|
389
|
+
responsiveness: categoryLevel(10),
|
|
390
|
+
codeVolume: categoryLevel(3),
|
|
391
|
+
iteration: categoryLevel(5),
|
|
392
|
+
});
|
|
393
|
+
expect(computeTitle(levels)).toBe('firefighter');
|
|
394
|
+
});
|
|
395
|
+
it('should map a dominant codeVolume category to workhorse', () => {
|
|
396
|
+
const levels = createCategoryLevels({
|
|
397
|
+
quality: categoryLevel(4),
|
|
398
|
+
responsiveness: categoryLevel(3),
|
|
399
|
+
codeVolume: categoryLevel(10),
|
|
400
|
+
iteration: categoryLevel(5),
|
|
401
|
+
});
|
|
402
|
+
expect(computeTitle(levels)).toBe('workhorse');
|
|
403
|
+
});
|
|
404
|
+
it('should map a dominant iteration category to sentinel', () => {
|
|
405
|
+
const levels = createCategoryLevels({
|
|
406
|
+
quality: categoryLevel(4),
|
|
407
|
+
responsiveness: categoryLevel(3),
|
|
408
|
+
codeVolume: categoryLevel(5),
|
|
409
|
+
iteration: categoryLevel(10),
|
|
410
|
+
});
|
|
411
|
+
expect(computeTitle(levels)).toBe('sentinel');
|
|
412
|
+
});
|
|
413
|
+
});
|
|
414
|
+
describe('computeOverallLevel', () => {
|
|
415
|
+
it('should clamp the rounded average of all category levels', () => {
|
|
416
|
+
const levels = createCategoryLevels({
|
|
417
|
+
quality: categoryLevel(8),
|
|
418
|
+
responsiveness: categoryLevel(7),
|
|
419
|
+
codeVolume: categoryLevel(6),
|
|
420
|
+
iteration: categoryLevel(7),
|
|
421
|
+
});
|
|
422
|
+
expect(computeOverallLevel(levels)).toBe(7);
|
|
423
|
+
});
|
|
424
|
+
});
|
|
425
|
+
describe('computeDeveloperMetrics', () => {
|
|
426
|
+
it('should report zero code volume and zero correlation when no diff stats exist', () => {
|
|
427
|
+
const reviews = [
|
|
428
|
+
ReviewStatsFactory.create({ diffStats: null }),
|
|
429
|
+
ReviewStatsFactory.create({ diffStats: undefined }),
|
|
430
|
+
];
|
|
431
|
+
const metrics = computeDeveloperMetrics(reviews);
|
|
432
|
+
expect(metrics.averageCodeVolume).toBe(0);
|
|
433
|
+
expect(metrics.codeVolumeScoreCorrelation).toBe(0);
|
|
434
|
+
});
|
|
435
|
+
it('should return zero correlation with fewer than three scored reviews carrying diff stats', () => {
|
|
436
|
+
const reviews = [
|
|
437
|
+
ReviewStatsFactory.withDiffStats({ commitsCount: 1, additions: 50, deletions: 10 }, { score: 8 }),
|
|
438
|
+
ReviewStatsFactory.withDiffStats({ commitsCount: 1, additions: 30, deletions: 5 }, { score: 6 }),
|
|
439
|
+
];
|
|
440
|
+
expect(computeDeveloperMetrics(reviews).codeVolumeScoreCorrelation).toBe(0);
|
|
441
|
+
});
|
|
442
|
+
it('should return zero correlation when volume has no variance', () => {
|
|
443
|
+
const reviews = new Array(4).fill(0).map((_, index) => ReviewStatsFactory.withDiffStats({ commitsCount: 1, additions: 100, deletions: 0 }, { id: `c-${index}`, score: index + 1 }));
|
|
444
|
+
expect(computeDeveloperMetrics(reviews).codeVolumeScoreCorrelation).toBe(0);
|
|
445
|
+
});
|
|
446
|
+
it('should compute a positive correlation when score grows with volume', () => {
|
|
447
|
+
const reviews = [
|
|
448
|
+
ReviewStatsFactory.withDiffStats({ commitsCount: 1, additions: 10, deletions: 0 }, { id: 'p-1', score: 2 }),
|
|
449
|
+
ReviewStatsFactory.withDiffStats({ commitsCount: 1, additions: 50, deletions: 0 }, { id: 'p-2', score: 5 }),
|
|
450
|
+
ReviewStatsFactory.withDiffStats({ commitsCount: 1, additions: 100, deletions: 0 }, { id: 'p-3', score: 9 }),
|
|
451
|
+
];
|
|
452
|
+
expect(computeDeveloperMetrics(reviews).codeVolumeScoreCorrelation).toBeGreaterThan(0);
|
|
453
|
+
});
|
|
454
|
+
});
|
|
455
|
+
describe('computeTeamMetrics', () => {
|
|
456
|
+
it('should aggregate reviews across all developers', () => {
|
|
457
|
+
const reviewsByDeveloper = new Map();
|
|
458
|
+
reviewsByDeveloper.set('alice', [
|
|
459
|
+
ReviewStatsFactory.create({ id: 'a-1', score: 8, blocking: 0, warnings: 1 }),
|
|
460
|
+
]);
|
|
461
|
+
reviewsByDeveloper.set('bob', [
|
|
462
|
+
ReviewStatsFactory.create({ id: 'b-1', score: 6, blocking: 2, warnings: 3 }),
|
|
463
|
+
]);
|
|
464
|
+
const metrics = computeTeamMetrics(reviewsByDeveloper);
|
|
465
|
+
expect(metrics.averageScore).toBe(7);
|
|
466
|
+
expect(metrics.averageBlocking).toBe(1);
|
|
467
|
+
expect(metrics.averageWarnings).toBe(2);
|
|
468
|
+
});
|
|
469
|
+
it('should fall back to neutral score and zero volume for an empty team', () => {
|
|
470
|
+
const metrics = computeTeamMetrics(new Map());
|
|
471
|
+
expect(metrics.averageScore).toBe(5);
|
|
472
|
+
expect(metrics.averageCodeVolume).toBe(0);
|
|
473
|
+
});
|
|
474
|
+
});
|
|
475
|
+
describe('computeCategoryLevels code volume and iteration branches', () => {
|
|
476
|
+
it('should use the neutral volume score when the team code volume is 0', () => {
|
|
477
|
+
const reviews = [ReviewStatsFactory.create({ diffStats: null })];
|
|
478
|
+
const metrics = computeDeveloperMetrics(reviews);
|
|
479
|
+
const teamMetrics = computeTeamMetrics(new Map([['solo', reviews]]));
|
|
480
|
+
const levels = computeCategoryLevels(reviews, metrics, teamMetrics);
|
|
481
|
+
expect(levels.codeVolume.level).toBeGreaterThanOrEqual(1);
|
|
482
|
+
expect(levels.codeVolume.level).toBeLessThanOrEqual(10);
|
|
483
|
+
});
|
|
484
|
+
it('should use the neutral suggestion fallback when reviews carry no suggestions', () => {
|
|
485
|
+
const reviews = [
|
|
486
|
+
ReviewStatsFactory.create({ id: 'it-1', suggestions: undefined, blocking: 0, warnings: 0 }),
|
|
487
|
+
ReviewStatsFactory.create({ id: 'it-2', suggestions: undefined, blocking: 0, warnings: 0 }),
|
|
488
|
+
];
|
|
489
|
+
const metrics = computeDeveloperMetrics(reviews);
|
|
490
|
+
const teamMetrics = computeTeamMetrics(new Map([['solo', reviews]]));
|
|
491
|
+
const levels = computeCategoryLevels(reviews, metrics, teamMetrics);
|
|
492
|
+
expect(levels.iteration.level).toBeGreaterThanOrEqual(1);
|
|
493
|
+
expect(levels.iteration.level).toBeLessThanOrEqual(10);
|
|
494
|
+
});
|
|
495
|
+
it('should fall back to neutral iteration scores for an empty review set', () => {
|
|
496
|
+
const metrics = computeDeveloperMetrics([]);
|
|
497
|
+
const teamMetrics = computeTeamMetrics(new Map());
|
|
498
|
+
const levels = computeCategoryLevels([], metrics, teamMetrics);
|
|
499
|
+
expect(levels.iteration.level).toBeGreaterThanOrEqual(1);
|
|
500
|
+
expect(levels.iteration.level).toBeLessThanOrEqual(10);
|
|
501
|
+
});
|
|
502
|
+
it('should reward a positive code volume correlation', () => {
|
|
503
|
+
const reviews = [
|
|
504
|
+
ReviewStatsFactory.withDiffStats({ commitsCount: 1, additions: 10, deletions: 0 }, { id: 'cv-1', score: 2 }),
|
|
505
|
+
ReviewStatsFactory.withDiffStats({ commitsCount: 1, additions: 50, deletions: 0 }, { id: 'cv-2', score: 5 }),
|
|
506
|
+
ReviewStatsFactory.withDiffStats({ commitsCount: 1, additions: 100, deletions: 0 }, { id: 'cv-3', score: 9 }),
|
|
507
|
+
];
|
|
508
|
+
const metrics = computeDeveloperMetrics(reviews);
|
|
509
|
+
const teamMetrics = computeTeamMetrics(new Map([['solo', reviews]]));
|
|
510
|
+
const levels = computeCategoryLevels(reviews, metrics, teamMetrics);
|
|
511
|
+
expect(levels.codeVolume.level).toBeGreaterThanOrEqual(1);
|
|
512
|
+
expect(metrics.codeVolumeScoreCorrelation).toBeGreaterThan(0);
|
|
513
|
+
});
|
|
514
|
+
});
|
|
125
515
|
//# sourceMappingURL=insightLevelComputation.service.test.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"insightLevelComputation.service.test.js","sourceRoot":"","sources":["../../../../../src/tests/units/usecases/insights/insightLevelComputation.service.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAC9C,OAAO,EACL,uBAAuB,EACvB,sBAAsB,EACtB,uBAAuB,EACvB,kBAAkB,EAClB,qBAAqB,GACtB,MAAM,oFAAoF,CAAC;AAC5F,OAAO,EAAE,kBAAkB,EAAE,MAAM,2CAA2C,CAAC;AAG/E,SAAS,yBAAyB,CAChC,aAAqB,EACrB,KAAa,EACb,YAAkC,EAAE;IAEpC,OAAO,KAAK,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,EAAE,CAAC,CAAC,EAAE,KAAK,EAAE,EAAE,CAChD,kBAAkB,CAAC,MAAM,CAAC;QACxB,EAAE,EAAE,GAAG,aAAa,IAAI,KAAK,EAAE;QAC/B,UAAU,EAAE,aAAa;QACzB,QAAQ,EAAE,KAAK,GAAG,CAAC;QACnB,GAAG,SAAS;KACb,CAAC,CACH,CAAC;AACJ,CAAC;AAED,QAAQ,CAAC,yBAAyB,EAAE,GAAG,EAAE;IACvC,EAAE,CAAC,kDAAkD,EAAE,GAAG,EAAE;QAC1D,MAAM,MAAM,GAAG,uBAAuB,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC;QAEjD,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAC3B,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,0DAA0D,EAAE,GAAG,EAAE;QAClE,MAAM,MAAM,GAAG,uBAAuB,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE,CAAC,CAAC;QAErD,MAAM,CAAC,MAAM,CAAC,CAAC,eAAe,CAAC,GAAG,CAAC,CAAC;IACtC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,0DAA0D,EAAE,GAAG,EAAE;QAClE,MAAM,MAAM,GAAG,uBAAuB,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE,CAAC,CAAC;QAErD,MAAM,CAAC,MAAM,CAAC,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC;IACnC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,wCAAwC,EAAE,GAAG,EAAE;QAChD,MAAM,MAAM,GAAG,uBAAuB,CAAC,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC;QAElD,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACzB,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,uCAAuC,EAAE,GAAG,EAAE;QAC/C,MAAM,MAAM,GAAG,uBAAuB,CAAC,CAAC,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC;QAElD,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACzB,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,4CAA4C,EAAE,GAAG,EAAE;QACpD,MAAM,MAAM,GAAG,uBAAuB,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC;QAEjD,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAC3B,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEH,QAAQ,CAAC,wBAAwB,EAAE,GAAG,EAAE;IACtC,EAAE,CAAC,kDAAkD,EAAE,GAAG,EAAE;QAC1D,MAAM,MAAM,GAAG,sBAAsB,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;QAEhD,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAC3B,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,mFAAmF,EAAE,GAAG,EAAE;QAC3F,MAAM,MAAM,GAAG,sBAAsB,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;QAEhD,MAAM,CAAC,MAAM,CAAC,CAAC,eAAe,CAAC,GAAG,CAAC,CAAC;IACtC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,iFAAiF,EAAE,GAAG,EAAE;QACzF,MAAM,MAAM,GAAG,sBAAsB,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;QAEhD,MAAM,CAAC,MAAM,CAAC,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC;IACnC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,uDAAuD,EAAE,GAAG,EAAE;QAC/D,MAAM,MAAM,GAAG,sBAAsB,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;QAE5C,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACzB,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,8DAA8D,EAAE,GAAG,EAAE;QACtE,MAAM,MAAM,GAAG,sBAAsB,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;QAE5C,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACzB,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEH,QAAQ,CAAC,wCAAwC,EAAE,GAAG,EAAE;IACtD,EAAE,CAAC,gFAAgF,EAAE,GAAG,EAAE;QACxF,MAAM,aAAa,GAAG,yBAAyB,CAAC,QAAQ,EAAE,EAAE,EAAE;YAC5D,KAAK,EAAE,GAAG;YACV,QAAQ,EAAE,CAAC;YACX,QAAQ,EAAE,CAAC;YACX,QAAQ,EAAE,KAAK;SAChB,CAAC,CAAC;QACH,MAAM,UAAU,GAAG,yBAAyB,CAAC,KAAK,EAAE,EAAE,EAAE;YACtD,KAAK,EAAE,GAAG;YACV,QAAQ,EAAE,CAAC;YACX,QAAQ,EAAE,CAAC;YACX,QAAQ,EAAE,KAAK;SAChB,CAAC,CAAC;QACH,MAAM,aAAa,GAAG,yBAAyB,CAAC,QAAQ,EAAE,EAAE,EAAE;YAC5D,KAAK,EAAE,GAAG;YACV,QAAQ,EAAE,CAAC;YACX,QAAQ,EAAE,CAAC;YACX,QAAQ,EAAE,KAAK;SAChB,CAAC,CAAC;QACH,MAAM,aAAa,GAAG,yBAAyB,CAAC,QAAQ,EAAE,CAAC,EAAE;YAC3D,KAAK,EAAE,GAAG;YACV,QAAQ,EAAE,CAAC;YACX,QAAQ,EAAE,CAAC;YACX,QAAQ,EAAE,KAAK;SAChB,CAAC,CAAC;QAEH,MAAM,kBAAkB,GAAG,IAAI,GAAG,EAAyB,CAAC;QAC5D,kBAAkB,CAAC,GAAG,CAAC,QAAQ,EAAE,aAAa,CAAC,CAAC;QAChD,kBAAkB,CAAC,GAAG,CAAC,KAAK,EAAE,UAAU,CAAC,CAAC;QAC1C,kBAAkB,CAAC,GAAG,CAAC,QAAQ,EAAE,aAAa,CAAC,CAAC;QAChD,kBAAkB,CAAC,GAAG,CAAC,QAAQ,EAAE,aAAa,CAAC,CAAC;QAEhD,MAAM,WAAW,GAAG,kBAAkB,CAAC,kBAAkB,CAAC,CAAC;QAC3D,MAAM,aAAa,GAAG,uBAAuB,CAAC,aAAa,CAAC,CAAC;QAC7D,MAAM,aAAa,GAAG,uBAAuB,CAAC,aAAa,CAAC,CAAC;QAE7D,MAAM,YAAY,GAAG,qBAAqB,CAAC,aAAa,EAAE,aAAa,EAAE,WAAW,CAAC,CAAC;QACtF,MAAM,YAAY,GAAG,qBAAqB,CAAC,aAAa,EAAE,aAAa,EAAE,WAAW,CAAC,CAAC;QAEtF,MAAM,CAAC,YAAY,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,sBAAsB,CAAC,CAAC,CAAC,CAAC;QAC7D,MAAM,CAAC,YAAY,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,mBAAmB,CAAC,CAAC,CAAC,CAAC;QAC1D,MAAM,CAAC,YAAY,CAAC,OAAO,CAAC,KAAK,GAAG,YAAY,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,sBAAsB,CAAC,CAAC,CAAC,CAAC;IAC5F,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,oEAAoE,EAAE,GAAG,EAAE;QAC5E,MAAM,aAAa,GAAG,yBAAyB,CAAC,MAAM,EAAE,EAAE,EAAE;YAC1D,KAAK,EAAE,CAAC;YACR,QAAQ,EAAE,CAAC;YACX,QAAQ,EAAE,CAAC;YACX,QAAQ,EAAE,KAAK;SAChB,CAAC,CAAC;QACH,MAAM,YAAY,GAAG,yBAAyB,CAAC,KAAK,EAAE,EAAE,EAAE;YACxD,KAAK,EAAE,CAAC;YACR,QAAQ,EAAE,CAAC;YACX,QAAQ,EAAE,CAAC;YACX,QAAQ,EAAE,MAAM;SACjB,CAAC,CAAC;QAEH,MAAM,kBAAkB,GAAG,IAAI,GAAG,EAAyB,CAAC;QAC5D,kBAAkB,CAAC,GAAG,CAAC,MAAM,EAAE,aAAa,CAAC,CAAC;QAC9C,kBAAkB,CAAC,GAAG,CAAC,KAAK,EAAE,YAAY,CAAC,CAAC;QAE5C,MAAM,WAAW,GAAG,kBAAkB,CAAC,kBAAkB,CAAC,CAAC;QAC3D,MAAM,WAAW,GAAG,uBAAuB,CAAC,aAAa,CAAC,CAAC;QAC3D,MAAM,UAAU,GAAG,uBAAuB,CAAC,YAAY,CAAC,CAAC;QAEzD,MAAM,UAAU,GAAG,qBAAqB,CAAC,aAAa,EAAE,WAAW,EAAE,WAAW,CAAC,CAAC;QAClF,MAAM,SAAS,GAAG,qBAAqB,CAAC,YAAY,EAAE,UAAU,EAAE,WAAW,CAAC,CAAC;QAE/E,MAAM,CAAC,UAAU,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,sBAAsB,CAAC,CAAC,CAAC,CAAC;QAC3D,MAAM,CAAC,SAAS,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,mBAAmB,CAAC,CAAC,CAAC,CAAC;IACzD,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
|
|
1
|
+
{"version":3,"file":"insightLevelComputation.service.test.js","sourceRoot":"","sources":["../../../../../src/tests/units/usecases/insights/insightLevelComputation.service.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAC9C,OAAO,EACL,uBAAuB,EACvB,sBAAsB,EACtB,uBAAuB,EACvB,kBAAkB,EAClB,qBAAqB,EACrB,OAAO,EACP,eAAe,EACf,iBAAiB,EACjB,UAAU,EACV,YAAY,EACZ,WAAW,EACX,qBAAqB,EACrB,sBAAsB,EACtB,iBAAiB,EACjB,kBAAkB,EAClB,mBAAmB,EACnB,YAAY,EACZ,mBAAmB,GACpB,MAAM,oFAAoF,CAAC;AAC5F,OAAO,EAAE,kBAAkB,EAAE,MAAM,2CAA2C,CAAC;AAQ/E,SAAS,aAAa,CAAC,KAAa,EAAE,QAAsB,QAAQ;IAClE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC;AAC1B,CAAC;AAED,SAAS,oBAAoB,CAAC,YAAqC,EAAE;IACnE,OAAO;QACL,OAAO,EAAE,aAAa,CAAC,CAAC,CAAC;QACzB,cAAc,EAAE,aAAa,CAAC,CAAC,CAAC;QAChC,UAAU,EAAE,aAAa,CAAC,CAAC,CAAC;QAC5B,SAAS,EAAE,aAAa,CAAC,CAAC,CAAC;QAC3B,GAAG,SAAS;KACb,CAAC;AACJ,CAAC;AAED,SAAS,yBAAyB,CAChC,aAAqB,EACrB,KAAa,EACb,YAAkC,EAAE;IAEpC,OAAO,KAAK,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,EAAE,CAAC,CAAC,EAAE,KAAK,EAAE,EAAE,CAChD,kBAAkB,CAAC,MAAM,CAAC;QACxB,EAAE,EAAE,GAAG,aAAa,IAAI,KAAK,EAAE;QAC/B,UAAU,EAAE,aAAa;QACzB,QAAQ,EAAE,KAAK,GAAG,CAAC;QACnB,GAAG,SAAS;KACb,CAAC,CACH,CAAC;AACJ,CAAC;AAED,QAAQ,CAAC,yBAAyB,EAAE,GAAG,EAAE;IACvC,EAAE,CAAC,kDAAkD,EAAE,GAAG,EAAE;QAC1D,MAAM,MAAM,GAAG,uBAAuB,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC;QAEjD,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAC3B,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,0DAA0D,EAAE,GAAG,EAAE;QAClE,MAAM,MAAM,GAAG,uBAAuB,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE,CAAC,CAAC;QAErD,MAAM,CAAC,MAAM,CAAC,CAAC,eAAe,CAAC,GAAG,CAAC,CAAC;IACtC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,0DAA0D,EAAE,GAAG,EAAE;QAClE,MAAM,MAAM,GAAG,uBAAuB,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE,CAAC,CAAC;QAErD,MAAM,CAAC,MAAM,CAAC,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC;IACnC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,wCAAwC,EAAE,GAAG,EAAE;QAChD,MAAM,MAAM,GAAG,uBAAuB,CAAC,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC;QAElD,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACzB,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,uCAAuC,EAAE,GAAG,EAAE;QAC/C,MAAM,MAAM,GAAG,uBAAuB,CAAC,CAAC,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC;QAElD,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACzB,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,4CAA4C,EAAE,GAAG,EAAE;QACpD,MAAM,MAAM,GAAG,uBAAuB,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC;QAEjD,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAC3B,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEH,QAAQ,CAAC,wBAAwB,EAAE,GAAG,EAAE;IACtC,EAAE,CAAC,kDAAkD,EAAE,GAAG,EAAE;QAC1D,MAAM,MAAM,GAAG,sBAAsB,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;QAEhD,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAC3B,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,mFAAmF,EAAE,GAAG,EAAE;QAC3F,MAAM,MAAM,GAAG,sBAAsB,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;QAEhD,MAAM,CAAC,MAAM,CAAC,CAAC,eAAe,CAAC,GAAG,CAAC,CAAC;IACtC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,iFAAiF,EAAE,GAAG,EAAE;QACzF,MAAM,MAAM,GAAG,sBAAsB,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;QAEhD,MAAM,CAAC,MAAM,CAAC,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC;IACnC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,uDAAuD,EAAE,GAAG,EAAE;QAC/D,MAAM,MAAM,GAAG,sBAAsB,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;QAE5C,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACzB,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,8DAA8D,EAAE,GAAG,EAAE;QACtE,MAAM,MAAM,GAAG,sBAAsB,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;QAE5C,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACzB,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEH,QAAQ,CAAC,wCAAwC,EAAE,GAAG,EAAE;IACtD,EAAE,CAAC,gFAAgF,EAAE,GAAG,EAAE;QACxF,MAAM,aAAa,GAAG,yBAAyB,CAAC,QAAQ,EAAE,EAAE,EAAE;YAC5D,KAAK,EAAE,GAAG;YACV,QAAQ,EAAE,CAAC;YACX,QAAQ,EAAE,CAAC;YACX,QAAQ,EAAE,KAAK;SAChB,CAAC,CAAC;QACH,MAAM,UAAU,GAAG,yBAAyB,CAAC,KAAK,EAAE,EAAE,EAAE;YACtD,KAAK,EAAE,GAAG;YACV,QAAQ,EAAE,CAAC;YACX,QAAQ,EAAE,CAAC;YACX,QAAQ,EAAE,KAAK;SAChB,CAAC,CAAC;QACH,MAAM,aAAa,GAAG,yBAAyB,CAAC,QAAQ,EAAE,EAAE,EAAE;YAC5D,KAAK,EAAE,GAAG;YACV,QAAQ,EAAE,CAAC;YACX,QAAQ,EAAE,CAAC;YACX,QAAQ,EAAE,KAAK;SAChB,CAAC,CAAC;QACH,MAAM,aAAa,GAAG,yBAAyB,CAAC,QAAQ,EAAE,CAAC,EAAE;YAC3D,KAAK,EAAE,GAAG;YACV,QAAQ,EAAE,CAAC;YACX,QAAQ,EAAE,CAAC;YACX,QAAQ,EAAE,KAAK;SAChB,CAAC,CAAC;QAEH,MAAM,kBAAkB,GAAG,IAAI,GAAG,EAAyB,CAAC;QAC5D,kBAAkB,CAAC,GAAG,CAAC,QAAQ,EAAE,aAAa,CAAC,CAAC;QAChD,kBAAkB,CAAC,GAAG,CAAC,KAAK,EAAE,UAAU,CAAC,CAAC;QAC1C,kBAAkB,CAAC,GAAG,CAAC,QAAQ,EAAE,aAAa,CAAC,CAAC;QAChD,kBAAkB,CAAC,GAAG,CAAC,QAAQ,EAAE,aAAa,CAAC,CAAC;QAEhD,MAAM,WAAW,GAAG,kBAAkB,CAAC,kBAAkB,CAAC,CAAC;QAC3D,MAAM,aAAa,GAAG,uBAAuB,CAAC,aAAa,CAAC,CAAC;QAC7D,MAAM,aAAa,GAAG,uBAAuB,CAAC,aAAa,CAAC,CAAC;QAE7D,MAAM,YAAY,GAAG,qBAAqB,CAAC,aAAa,EAAE,aAAa,EAAE,WAAW,CAAC,CAAC;QACtF,MAAM,YAAY,GAAG,qBAAqB,CAAC,aAAa,EAAE,aAAa,EAAE,WAAW,CAAC,CAAC;QAEtF,MAAM,CAAC,YAAY,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,sBAAsB,CAAC,CAAC,CAAC,CAAC;QAC7D,MAAM,CAAC,YAAY,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,mBAAmB,CAAC,CAAC,CAAC,CAAC;QAC1D,MAAM,CAAC,YAAY,CAAC,OAAO,CAAC,KAAK,GAAG,YAAY,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,sBAAsB,CAAC,CAAC,CAAC,CAAC;IAC5F,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,oEAAoE,EAAE,GAAG,EAAE;QAC5E,MAAM,aAAa,GAAG,yBAAyB,CAAC,MAAM,EAAE,EAAE,EAAE;YAC1D,KAAK,EAAE,CAAC;YACR,QAAQ,EAAE,CAAC;YACX,QAAQ,EAAE,CAAC;YACX,QAAQ,EAAE,KAAK;SAChB,CAAC,CAAC;QACH,MAAM,YAAY,GAAG,yBAAyB,CAAC,KAAK,EAAE,EAAE,EAAE;YACxD,KAAK,EAAE,CAAC;YACR,QAAQ,EAAE,CAAC;YACX,QAAQ,EAAE,CAAC;YACX,QAAQ,EAAE,MAAM;SACjB,CAAC,CAAC;QAEH,MAAM,kBAAkB,GAAG,IAAI,GAAG,EAAyB,CAAC;QAC5D,kBAAkB,CAAC,GAAG,CAAC,MAAM,EAAE,aAAa,CAAC,CAAC;QAC9C,kBAAkB,CAAC,GAAG,CAAC,KAAK,EAAE,YAAY,CAAC,CAAC;QAE5C,MAAM,WAAW,GAAG,kBAAkB,CAAC,kBAAkB,CAAC,CAAC;QAC3D,MAAM,WAAW,GAAG,uBAAuB,CAAC,aAAa,CAAC,CAAC;QAC3D,MAAM,UAAU,GAAG,uBAAuB,CAAC,YAAY,CAAC,CAAC;QAEzD,MAAM,UAAU,GAAG,qBAAqB,CAAC,aAAa,EAAE,WAAW,EAAE,WAAW,CAAC,CAAC;QAClF,MAAM,SAAS,GAAG,qBAAqB,CAAC,YAAY,EAAE,UAAU,EAAE,WAAW,CAAC,CAAC;QAE/E,MAAM,CAAC,UAAU,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,sBAAsB,CAAC,CAAC,CAAC,CAAC;QAC3D,MAAM,CAAC,SAAS,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,mBAAmB,CAAC,CAAC,CAAC,CAAC;IACzD,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEH,QAAQ,CAAC,SAAS,EAAE,GAAG,EAAE;IACvB,EAAE,CAAC,oCAAoC,EAAE,GAAG,EAAE;QAC5C,MAAM,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAC9B,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,yDAAyD,EAAE,GAAG,EAAE;QACjE,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACrC,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEH,QAAQ,CAAC,iBAAiB,EAAE,GAAG,EAAE;IAC/B,EAAE,CAAC,oEAAoE,EAAE,GAAG,EAAE;QAC5E,MAAM,OAAO,GAAG;YACd,kBAAkB,CAAC,MAAM,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC;YAC1C,kBAAkB,CAAC,MAAM,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC;SAC3C,CAAC;QAEF,MAAM,CAAC,eAAe,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAC3C,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,wCAAwC,EAAE,GAAG,EAAE;QAChD,MAAM,OAAO,GAAG;YACd,kBAAkB,CAAC,MAAM,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC;YACvC,kBAAkB,CAAC,MAAM,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC;YAC1C,kBAAkB,CAAC,MAAM,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC;SACxC,CAAC;QAEF,MAAM,CAAC,eAAe,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAC3C,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEH,QAAQ,CAAC,mBAAmB,EAAE,GAAG,EAAE;IACjC,EAAE,CAAC,+CAA+C,EAAE,GAAG,EAAE;QACvD,MAAM,OAAO,GAAG;YACd,kBAAkB,CAAC,MAAM,CAAC,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC;YAC9C,kBAAkB,CAAC,MAAM,CAAC,EAAE,SAAS,EAAE,SAAS,EAAE,CAAC;SACpD,CAAC;QAEF,MAAM,CAAC,iBAAiB,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAC7C,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,mEAAmE,EAAE,GAAG,EAAE;QAC3E,MAAM,OAAO,GAAG;YACd,kBAAkB,CAAC,aAAa,CAAC,EAAE,YAAY,EAAE,CAAC,EAAE,SAAS,EAAE,GAAG,EAAE,SAAS,EAAE,EAAE,EAAE,CAAC;YACpF,kBAAkB,CAAC,MAAM,CAAC,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC;YAC9C,kBAAkB,CAAC,aAAa,CAAC,EAAE,YAAY,EAAE,CAAC,EAAE,SAAS,EAAE,EAAE,EAAE,SAAS,EAAE,EAAE,EAAE,CAAC;SACpF,CAAC;QAEF,MAAM,CAAC,iBAAiB,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAC9C,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEH,QAAQ,CAAC,YAAY,EAAE,GAAG,EAAE;IAC1B,EAAE,CAAC,qCAAqC,EAAE,GAAG,EAAE;QAC7C,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACjC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,sCAAsC,EAAE,GAAG,EAAE;QAC9C,MAAM,CAAC,UAAU,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAClC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,6CAA6C,EAAE,GAAG,EAAE;QACrD,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAChC,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEH,QAAQ,CAAC,cAAc,EAAE,GAAG,EAAE;IAC5B,EAAE,CAAC,6BAA6B,EAAE,GAAG,EAAE;QACrC,MAAM,CAAC,YAAY,CAAC,WAAW,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAC9C,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,0BAA0B,EAAE,GAAG,EAAE;QAClC,MAAM,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAC3C,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,6BAA6B,EAAE,GAAG,EAAE;QACrC,MAAM,CAAC,YAAY,CAAC,WAAW,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAC9C,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEH,QAAQ,CAAC,aAAa,EAAE,GAAG,EAAE;IAC3B,EAAE,CAAC,sCAAsC,EAAE,GAAG,EAAE;QAC9C,MAAM,CAAC,WAAW,CAAC,WAAW,CAAC,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;IACrD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,sCAAsC,EAAE,GAAG,EAAE;QAC9C,MAAM,CAAC,WAAW,CAAC,WAAW,CAAC,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;IACrD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,8BAA8B,EAAE,GAAG,EAAE;QACtC,MAAM,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IAC/C,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEH,QAAQ,CAAC,uBAAuB,EAAE,GAAG,EAAE;IACrC,MAAM,YAAY,GAAG,CAAC,MAAmB,EAAU,EAAE,CAAC,MAAM,CAAC,KAAK,IAAI,CAAC,CAAC;IAExE,SAAS,iBAAiB,CAAC,MAAgB;QACzC,OAAO,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE,CACjC,kBAAkB,CAAC,MAAM,CAAC;YACxB,EAAE,EAAE,KAAK,KAAK,EAAE;YAChB,KAAK;YACL,SAAS,EAAE,WAAW,MAAM,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,YAAY;SACrE,CAAC,CACH,CAAC;IACJ,CAAC;IAED,EAAE,CAAC,yEAAyE,EAAE,GAAG,EAAE;QACjF,MAAM,OAAO,GAAG,iBAAiB,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;QAE7C,MAAM,CAAC,qBAAqB,CAAC,OAAO,EAAE,YAAY,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IACtE,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,wDAAwD,EAAE,GAAG,EAAE;QAChE,MAAM,OAAO,GAAG,iBAAiB,CAAC,IAAI,KAAK,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;QAEzD,MAAM,CAAC,qBAAqB,CAAC,OAAO,EAAE,YAAY,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IACtE,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,0DAA0D,EAAE,GAAG,EAAE;QAClE,MAAM,OAAO,GAAG,iBAAiB,CAAC,IAAI,KAAK,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;QAEzD,MAAM,CAAC,qBAAqB,CAAC,OAAO,EAAE,YAAY,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IACtE,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,kEAAkE,EAAE,GAAG,EAAE;QAC1E,MAAM,OAAO,GAAG,iBAAiB,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;QAEjF,MAAM,CAAC,qBAAqB,CAAC,OAAO,EAAE,YAAY,CAAC,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;IACzE,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,iEAAiE,EAAE,GAAG,EAAE;QACzE,MAAM,OAAO,GAAG,iBAAiB,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;QAEjF,MAAM,CAAC,qBAAqB,CAAC,OAAO,EAAE,YAAY,CAAC,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;IACzE,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,iEAAiE,EAAE,GAAG,EAAE;QACzE,MAAM,OAAO,GAAG,iBAAiB,CAAC,IAAI,KAAK,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;QAEzD,MAAM,CAAC,qBAAqB,CAAC,OAAO,EAAE,YAAY,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IACtE,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEH,QAAQ,CAAC,wBAAwB,EAAE,GAAG,EAAE;IACtC,SAAS,aAAa,CAAC,OAAiB;QACtC,OAAO,OAAO,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,KAAK,EAAE,EAAE,CACnC,kBAAkB,CAAC,aAAa,CAC9B,EAAE,YAAY,EAAE,CAAC,EAAE,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,CAAC,EAAE,EACpD,EAAE,EAAE,EAAE,KAAK,KAAK,EAAE,EAAE,SAAS,EAAE,WAAW,MAAM,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,YAAY,EAAE,CAC3F,CACF,CAAC;IACJ,CAAC;IAED,EAAE,CAAC,yEAAyE,EAAE,GAAG,EAAE;QACjF,MAAM,CAAC,sBAAsB,CAAC,aAAa,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IACzE,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,wDAAwD,EAAE,GAAG,EAAE;QAChE,MAAM,CAAC,sBAAsB,CAAC,aAAa,CAAC,IAAI,KAAK,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IACxF,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,2DAA2D,EAAE,GAAG,EAAE;QACnE,MAAM,OAAO,GAAG;YACd,GAAG,IAAI,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,EAAE,CACvC,kBAAkB,CAAC,MAAM,CAAC;gBACxB,EAAE,EAAE,KAAK,KAAK,EAAE;gBAChB,SAAS,EAAE,IAAI;gBACf,SAAS,EAAE,YAAY,KAAK,GAAG,CAAC,YAAY;aAC7C,CAAC,CACH;YACD,GAAG,aAAa,CAAC,IAAI,KAAK,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,KAAK,EAAE,EAAE,CAAC,CAAC;gBAChE,GAAG,MAAM;gBACT,SAAS,EAAE,WAAW,MAAM,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,YAAY;aACrE,CAAC,CAAC;SACJ,CAAC;QAEF,MAAM,CAAC,sBAAsB,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IACzD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,6DAA6D,EAAE,GAAG,EAAE;QACrE,MAAM,OAAO,GAAG,aAAa,CAAC;YAC5B,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;SAC1E,CAAC,CAAC;QAEH,MAAM,CAAC,sBAAsB,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;IAC5D,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,6DAA6D,EAAE,GAAG,EAAE;QACrE,MAAM,OAAO,GAAG,aAAa,CAAC;YAC5B,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;SAC1E,CAAC,CAAC;QAEH,MAAM,CAAC,sBAAsB,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;IAC5D,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,8DAA8D,EAAE,GAAG,EAAE;QACtE,MAAM,OAAO,GAAG,aAAa,CAAC,IAAI,KAAK,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;QAEvD,MAAM,CAAC,sBAAsB,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IACzD,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEH,QAAQ,CAAC,mBAAmB,EAAE,GAAG,EAAE;IACjC,EAAE,CAAC,oEAAoE,EAAE,GAAG,EAAE;QAC5E,MAAM,MAAM,GAAG,oBAAoB,CAAC,EAAE,OAAO,EAAE,aAAa,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;QAEnE,MAAM,CAAC,iBAAiB,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC;IACzD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,8FAA8F,EAAE,GAAG,EAAE;QACtG,MAAM,MAAM,GAAG,oBAAoB,CAAC;YAClC,cAAc,EAAE,aAAa,CAAC,CAAC,EAAE,WAAW,CAAC;SAC9C,CAAC,CAAC;QAEH,MAAM,CAAC,iBAAiB,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC,gBAAgB,CAAC,CAAC;IAChE,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,yDAAyD,EAAE,GAAG,EAAE;QACjE,MAAM,MAAM,GAAG,oBAAoB,CAAC;YAClC,OAAO,EAAE,aAAa,CAAC,CAAC,EAAE,WAAW,CAAC;YACtC,cAAc,EAAE,aAAa,CAAC,CAAC,EAAE,WAAW,CAAC;YAC7C,UAAU,EAAE,aAAa,CAAC,CAAC,EAAE,WAAW,CAAC;YACzC,SAAS,EAAE,aAAa,CAAC,CAAC,EAAE,WAAW,CAAC;SACzC,CAAC,CAAC;QAEH,MAAM,CAAC,iBAAiB,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;IAChD,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEH,QAAQ,CAAC,oBAAoB,EAAE,GAAG,EAAE;IAClC,EAAE,CAAC,6EAA6E,EAAE,GAAG,EAAE;QACrF,MAAM,MAAM,GAAG,oBAAoB,CAAC,EAAE,OAAO,EAAE,aAAa,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;QAEnE,MAAM,CAAC,kBAAkB,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC;IAC1D,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,8FAA8F,EAAE,GAAG,EAAE;QACtG,MAAM,MAAM,GAAG,oBAAoB,CAAC;YAClC,cAAc,EAAE,aAAa,CAAC,CAAC,EAAE,WAAW,CAAC;SAC9C,CAAC,CAAC;QAEH,MAAM,CAAC,kBAAkB,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC,gBAAgB,CAAC,CAAC;IACjE,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,yDAAyD,EAAE,GAAG,EAAE;QACjE,MAAM,MAAM,GAAG,oBAAoB,CAAC;YAClC,OAAO,EAAE,aAAa,CAAC,CAAC,EAAE,WAAW,CAAC;YACtC,cAAc,EAAE,aAAa,CAAC,CAAC,EAAE,WAAW,CAAC;YAC7C,UAAU,EAAE,aAAa,CAAC,CAAC,EAAE,WAAW,CAAC;YACzC,SAAS,EAAE,aAAa,CAAC,CAAC,EAAE,WAAW,CAAC;SACzC,CAAC,CAAC;QAEH,MAAM,CAAC,kBAAkB,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;IACjD,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEH,QAAQ,CAAC,qBAAqB,EAAE,GAAG,EAAE;IACnC,EAAE,CAAC,4DAA4D,EAAE,GAAG,EAAE;QACpE,MAAM,MAAM,GAAG,oBAAoB,CAAC;YAClC,OAAO,EAAE,aAAa,CAAC,CAAC,CAAC;YACzB,cAAc,EAAE,aAAa,CAAC,CAAC,CAAC;YAChC,UAAU,EAAE,aAAa,CAAC,CAAC,CAAC;YAC5B,SAAS,EAAE,aAAa,CAAC,CAAC,CAAC;SAC5B,CAAC,CAAC;QAEH,MAAM,CAAC,mBAAmB,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;IAC7D,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,mEAAmE,EAAE,GAAG,EAAE;QAC3E,MAAM,MAAM,GAAG,oBAAoB,CAAC;YAClC,OAAO,EAAE,aAAa,CAAC,CAAC,CAAC;YACzB,cAAc,EAAE,aAAa,CAAC,CAAC,EAAE,WAAW,CAAC;YAC7C,UAAU,EAAE,aAAa,CAAC,CAAC,CAAC;YAC5B,SAAS,EAAE,aAAa,CAAC,CAAC,CAAC;SAC5B,CAAC,CAAC;QAEH,MAAM,CAAC,mBAAmB,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;IAC7D,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,8DAA8D,EAAE,GAAG,EAAE;QACtE,MAAM,MAAM,GAAG,oBAAoB,CAAC;YAClC,OAAO,EAAE,aAAa,CAAC,CAAC,CAAC;YACzB,cAAc,EAAE,aAAa,CAAC,CAAC,CAAC;YAChC,UAAU,EAAE,aAAa,CAAC,CAAC,CAAC;YAC5B,SAAS,EAAE,aAAa,CAAC,EAAE,CAAC;SAC7B,CAAC,CAAC;QAEH,MAAM,CAAC,mBAAmB,CAAC,MAAM,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC;IACjD,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEH,QAAQ,CAAC,cAAc,EAAE,GAAG,EAAE;IAC5B,EAAE,CAAC,iFAAiF,EAAE,GAAG,EAAE;QACzF,MAAM,MAAM,GAAG,oBAAoB,CAAC;YAClC,OAAO,EAAE,aAAa,CAAC,CAAC,CAAC;YACzB,cAAc,EAAE,aAAa,CAAC,CAAC,CAAC;YAChC,UAAU,EAAE,aAAa,CAAC,CAAC,CAAC;YAC5B,SAAS,EAAE,aAAa,CAAC,CAAC,CAAC;SAC5B,CAAC,CAAC;QAEH,MAAM,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;IAClD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,gEAAgE,EAAE,GAAG,EAAE;QACxE,MAAM,MAAM,GAAG,oBAAoB,CAAC;YAClC,OAAO,EAAE,aAAa,CAAC,CAAC,CAAC;YACzB,cAAc,EAAE,aAAa,CAAC,CAAC,CAAC;YAChC,UAAU,EAAE,aAAa,CAAC,CAAC,EAAE,WAAW,CAAC;YACzC,SAAS,EAAE,aAAa,CAAC,CAAC,CAAC;SAC5B,CAAC,CAAC;QAEH,MAAM,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;IAClD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,qDAAqD,EAAE,GAAG,EAAE;QAC7D,MAAM,MAAM,GAAG,oBAAoB,CAAC;YAClC,OAAO,EAAE,aAAa,CAAC,EAAE,CAAC;YAC1B,cAAc,EAAE,aAAa,CAAC,CAAC,CAAC;YAChC,UAAU,EAAE,aAAa,CAAC,CAAC,CAAC;YAC5B,SAAS,EAAE,aAAa,CAAC,CAAC,CAAC;SAC5B,CAAC,CAAC;QAEH,MAAM,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;IACjD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,8DAA8D,EAAE,GAAG,EAAE;QACtE,MAAM,MAAM,GAAG,oBAAoB,CAAC;YAClC,OAAO,EAAE,aAAa,CAAC,CAAC,CAAC;YACzB,cAAc,EAAE,aAAa,CAAC,EAAE,CAAC;YACjC,UAAU,EAAE,aAAa,CAAC,CAAC,CAAC;YAC5B,SAAS,EAAE,aAAa,CAAC,CAAC,CAAC;SAC5B,CAAC,CAAC;QAEH,MAAM,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;IACnD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,wDAAwD,EAAE,GAAG,EAAE;QAChE,MAAM,MAAM,GAAG,oBAAoB,CAAC;YAClC,OAAO,EAAE,aAAa,CAAC,CAAC,CAAC;YACzB,cAAc,EAAE,aAAa,CAAC,CAAC,CAAC;YAChC,UAAU,EAAE,aAAa,CAAC,EAAE,CAAC;YAC7B,SAAS,EAAE,aAAa,CAAC,CAAC,CAAC;SAC5B,CAAC,CAAC;QAEH,MAAM,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;IACjD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,sDAAsD,EAAE,GAAG,EAAE;QAC9D,MAAM,MAAM,GAAG,oBAAoB,CAAC;YAClC,OAAO,EAAE,aAAa,CAAC,CAAC,CAAC;YACzB,cAAc,EAAE,aAAa,CAAC,CAAC,CAAC;YAChC,UAAU,EAAE,aAAa,CAAC,CAAC,CAAC;YAC5B,SAAS,EAAE,aAAa,CAAC,EAAE,CAAC;SAC7B,CAAC,CAAC;QAEH,MAAM,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;IAChD,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEH,QAAQ,CAAC,qBAAqB,EAAE,GAAG,EAAE;IACnC,EAAE,CAAC,yDAAyD,EAAE,GAAG,EAAE;QACjE,MAAM,MAAM,GAAG,oBAAoB,CAAC;YAClC,OAAO,EAAE,aAAa,CAAC,CAAC,CAAC;YACzB,cAAc,EAAE,aAAa,CAAC,CAAC,CAAC;YAChC,UAAU,EAAE,aAAa,CAAC,CAAC,CAAC;YAC5B,SAAS,EAAE,aAAa,CAAC,CAAC,CAAC;SAC5B,CAAC,CAAC;QAEH,MAAM,CAAC,mBAAmB,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAC9C,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEH,QAAQ,CAAC,yBAAyB,EAAE,GAAG,EAAE;IACvC,EAAE,CAAC,8EAA8E,EAAE,GAAG,EAAE;QACtF,MAAM,OAAO,GAAG;YACd,kBAAkB,CAAC,MAAM,CAAC,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC;YAC9C,kBAAkB,CAAC,MAAM,CAAC,EAAE,SAAS,EAAE,SAAS,EAAE,CAAC;SACpD,CAAC;QAEF,MAAM,OAAO,GAAG,uBAAuB,CAAC,OAAO,CAAC,CAAC;QAEjD,MAAM,CAAC,OAAO,CAAC,iBAAiB,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAC1C,MAAM,CAAC,OAAO,CAAC,0BAA0B,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACrD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,yFAAyF,EAAE,GAAG,EAAE;QACjG,MAAM,OAAO,GAAG;YACd,kBAAkB,CAAC,aAAa,CAAC,EAAE,YAAY,EAAE,CAAC,EAAE,SAAS,EAAE,EAAE,EAAE,SAAS,EAAE,EAAE,EAAE,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC;YACjG,kBAAkB,CAAC,aAAa,CAAC,EAAE,YAAY,EAAE,CAAC,EAAE,SAAS,EAAE,EAAE,EAAE,SAAS,EAAE,CAAC,EAAE,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC;SACjG,CAAC;QAEF,MAAM,CAAC,uBAAuB,CAAC,OAAO,CAAC,CAAC,0BAA0B,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAC9E,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,4DAA4D,EAAE,GAAG,EAAE;QACpE,MAAM,OAAO,GAAG,IAAI,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,EAAE,CACpD,kBAAkB,CAAC,aAAa,CAC9B,EAAE,YAAY,EAAE,CAAC,EAAE,SAAS,EAAE,GAAG,EAAE,SAAS,EAAE,CAAC,EAAE,EACjD,EAAE,EAAE,EAAE,KAAK,KAAK,EAAE,EAAE,KAAK,EAAE,KAAK,GAAG,CAAC,EAAE,CACvC,CACF,CAAC;QAEF,MAAM,CAAC,uBAAuB,CAAC,OAAO,CAAC,CAAC,0BAA0B,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAC9E,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,oEAAoE,EAAE,GAAG,EAAE;QAC5E,MAAM,OAAO,GAAG;YACd,kBAAkB,CAAC,aAAa,CAAC,EAAE,YAAY,EAAE,CAAC,EAAE,SAAS,EAAE,EAAE,EAAE,SAAS,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC;YAC3G,kBAAkB,CAAC,aAAa,CAAC,EAAE,YAAY,EAAE,CAAC,EAAE,SAAS,EAAE,EAAE,EAAE,SAAS,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC;YAC3G,kBAAkB,CAAC,aAAa,CAAC,EAAE,YAAY,EAAE,CAAC,EAAE,SAAS,EAAE,GAAG,EAAE,SAAS,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC;SAC7G,CAAC;QAEF,MAAM,CAAC,uBAAuB,CAAC,OAAO,CAAC,CAAC,0BAA0B,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC;IACzF,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEH,QAAQ,CAAC,oBAAoB,EAAE,GAAG,EAAE;IAClC,EAAE,CAAC,gDAAgD,EAAE,GAAG,EAAE;QACxD,MAAM,kBAAkB,GAAG,IAAI,GAAG,EAAyB,CAAC;QAC5D,kBAAkB,CAAC,GAAG,CAAC,OAAO,EAAE;YAC9B,kBAAkB,CAAC,MAAM,CAAC,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,EAAE,QAAQ,EAAE,CAAC,EAAE,QAAQ,EAAE,CAAC,EAAE,CAAC;SAC7E,CAAC,CAAC;QACH,kBAAkB,CAAC,GAAG,CAAC,KAAK,EAAE;YAC5B,kBAAkB,CAAC,MAAM,CAAC,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,EAAE,QAAQ,EAAE,CAAC,EAAE,QAAQ,EAAE,CAAC,EAAE,CAAC;SAC7E,CAAC,CAAC;QAEH,MAAM,OAAO,GAAG,kBAAkB,CAAC,kBAAkB,CAAC,CAAC;QAEvD,MAAM,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QACrC,MAAM,CAAC,OAAO,CAAC,eAAe,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QACxC,MAAM,CAAC,OAAO,CAAC,eAAe,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAC1C,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,qEAAqE,EAAE,GAAG,EAAE;QAC7E,MAAM,OAAO,GAAG,kBAAkB,CAAC,IAAI,GAAG,EAAyB,CAAC,CAAC;QAErE,MAAM,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QACrC,MAAM,CAAC,OAAO,CAAC,iBAAiB,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAC5C,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEH,QAAQ,CAAC,0DAA0D,EAAE,GAAG,EAAE;IACxE,EAAE,CAAC,oEAAoE,EAAE,GAAG,EAAE;QAC5E,MAAM,OAAO,GAAG,CAAC,kBAAkB,CAAC,MAAM,CAAC,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;QACjE,MAAM,OAAO,GAAG,uBAAuB,CAAC,OAAO,CAAC,CAAC;QACjD,MAAM,WAAW,GAAG,kBAAkB,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC;QAErE,MAAM,MAAM,GAAG,qBAAqB,CAAC,OAAO,EAAE,OAAO,EAAE,WAAW,CAAC,CAAC;QAEpE,MAAM,CAAC,MAAM,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,sBAAsB,CAAC,CAAC,CAAC,CAAC;QAC1D,MAAM,CAAC,MAAM,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,mBAAmB,CAAC,EAAE,CAAC,CAAC;IAC1D,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,8EAA8E,EAAE,GAAG,EAAE;QACtF,MAAM,OAAO,GAAG;YACd,kBAAkB,CAAC,MAAM,CAAC,EAAE,EAAE,EAAE,MAAM,EAAE,WAAW,EAAE,SAAS,EAAE,QAAQ,EAAE,CAAC,EAAE,QAAQ,EAAE,CAAC,EAAE,CAAC;YAC3F,kBAAkB,CAAC,MAAM,CAAC,EAAE,EAAE,EAAE,MAAM,EAAE,WAAW,EAAE,SAAS,EAAE,QAAQ,EAAE,CAAC,EAAE,QAAQ,EAAE,CAAC,EAAE,CAAC;SAC5F,CAAC;QACF,MAAM,OAAO,GAAG,uBAAuB,CAAC,OAAO,CAAC,CAAC;QACjD,MAAM,WAAW,GAAG,kBAAkB,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC;QAErE,MAAM,MAAM,GAAG,qBAAqB,CAAC,OAAO,EAAE,OAAO,EAAE,WAAW,CAAC,CAAC;QAEpE,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,sBAAsB,CAAC,CAAC,CAAC,CAAC;QACzD,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,mBAAmB,CAAC,EAAE,CAAC,CAAC;IACzD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,sEAAsE,EAAE,GAAG,EAAE;QAC9E,MAAM,OAAO,GAAG,uBAAuB,CAAC,EAAE,CAAC,CAAC;QAC5C,MAAM,WAAW,GAAG,kBAAkB,CAAC,IAAI,GAAG,EAAyB,CAAC,CAAC;QAEzE,MAAM,MAAM,GAAG,qBAAqB,CAAC,EAAE,EAAE,OAAO,EAAE,WAAW,CAAC,CAAC;QAE/D,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,sBAAsB,CAAC,CAAC,CAAC,CAAC;QACzD,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,mBAAmB,CAAC,EAAE,CAAC,CAAC;IACzD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,kDAAkD,EAAE,GAAG,EAAE;QAC1D,MAAM,OAAO,GAAG;YACd,kBAAkB,CAAC,aAAa,CAAC,EAAE,YAAY,EAAE,CAAC,EAAE,SAAS,EAAE,EAAE,EAAE,SAAS,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC;YAC5G,kBAAkB,CAAC,aAAa,CAAC,EAAE,YAAY,EAAE,CAAC,EAAE,SAAS,EAAE,EAAE,EAAE,SAAS,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC;YAC5G,kBAAkB,CAAC,aAAa,CAAC,EAAE,YAAY,EAAE,CAAC,EAAE,SAAS,EAAE,GAAG,EAAE,SAAS,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC;SAC9G,CAAC;QACF,MAAM,OAAO,GAAG,uBAAuB,CAAC,OAAO,CAAC,CAAC;QACjD,MAAM,WAAW,GAAG,kBAAkB,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC;QAErE,MAAM,MAAM,GAAG,qBAAqB,CAAC,OAAO,EAAE,OAAO,EAAE,WAAW,CAAC,CAAC;QAEpE,MAAM,CAAC,MAAM,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,sBAAsB,CAAC,CAAC,CAAC,CAAC;QAC1D,MAAM,CAAC,OAAO,CAAC,0BAA0B,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC;IAChE,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "reviewflow",
|
|
3
|
-
"version": "3.
|
|
3
|
+
"version": "3.36.0",
|
|
4
4
|
"description": "AI-powered code review automation for GitLab/GitHub using Claude Code",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "dist/main/server.js",
|
|
@@ -46,6 +46,7 @@
|
|
|
46
46
|
"test:ui": "vitest --ui",
|
|
47
47
|
"test:ci": "vitest --run",
|
|
48
48
|
"coverage": "vitest --coverage",
|
|
49
|
+
"test:mutation": "stryker run",
|
|
49
50
|
"lint": "biome check src/",
|
|
50
51
|
"lint:fix": "biome check --write src/",
|
|
51
52
|
"verify": "yarn typecheck && yarn lint && yarn test:ci",
|
|
@@ -69,6 +70,8 @@
|
|
|
69
70
|
},
|
|
70
71
|
"devDependencies": {
|
|
71
72
|
"@biomejs/biome": "^1.9.0",
|
|
73
|
+
"@stryker-mutator/core": "^9.6.1",
|
|
74
|
+
"@stryker-mutator/vitest-runner": "^9.6.1",
|
|
72
75
|
"@types/node": "^20.0.0",
|
|
73
76
|
"@types/ws": "^8.18.1",
|
|
74
77
|
"@vitest/coverage-v8": "^4.0.18",
|