@oneuptime/common 11.7.2 → 11.7.4
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/Models/AnalyticsModels/KubernetesCostAllocation.ts +103 -0
- package/Models/DatabaseModels/AlertEpisodeStateTimeline.ts +1 -0
- package/Models/DatabaseModels/AlertStateTimeline.ts +1 -0
- package/Models/DatabaseModels/IncidentEpisodeStateTimeline.ts +1 -0
- package/Models/DatabaseModels/IncidentStateTimeline.ts +1 -0
- package/Models/DatabaseModels/Index.ts +5 -0
- package/Models/DatabaseModels/LogDropFilter.ts +89 -0
- package/Models/DatabaseModels/NetworkDeviceDiscoveryScan.ts +13 -3
- package/Models/DatabaseModels/RecommendationDismissal.ts +463 -0
- package/Models/DatabaseModels/ScheduledMaintenanceStateTimeline.ts +1 -0
- package/Models/DatabaseModels/StatusPageGroup.ts +95 -0
- package/Models/DatabaseModels/TableView.ts +40 -0
- package/Models/DatabaseModels/TraceDropFilter.ts +89 -0
- package/Models/DatabaseModels/WorkflowVariable.ts +5 -1
- package/Server/API/AlertAPI.ts +32 -17
- package/Server/API/BaseAPI.ts +31 -2
- package/Server/API/BaseAnalyticsAPI.ts +36 -2
- package/Server/API/CommonAPI.ts +57 -0
- package/Server/API/IncidentAPI.ts +60 -33
- package/Server/API/IncidentEpisodeAPI.ts +31 -16
- package/Server/API/MonitorAPI.ts +30 -0
- package/Server/API/MonitorTemplateAPI.ts +8 -0
- package/Server/API/ProbeAPI.ts +196 -15
- package/Server/API/ProjectAPI.ts +79 -1
- package/Server/API/ScheduledMaintenanceAPI.ts +33 -18
- package/Server/API/StatusPageAPI.ts +74 -37
- package/Server/API/WorkspaceNotificationRuleAPI.ts +34 -4
- package/Server/Infrastructure/Postgres/SchemaMigrations/1785241000000-AddColumnsToTableView.ts +13 -0
- package/Server/Infrastructure/Postgres/SchemaMigrations/1785320000000-RepairCrossProjectIncidentReferences.ts +527 -0
- package/Server/Infrastructure/Postgres/SchemaMigrations/1785329453269-AddParentGroupToStatusPageGroup.ts +31 -0
- package/Server/Infrastructure/Postgres/SchemaMigrations/1785397674289-AddRecommendationDismissalTable.ts +55 -0
- package/Server/Infrastructure/Postgres/SchemaMigrations/1785405581596-AddDroppedCountersToDropFilters.ts +53 -0
- package/Server/Infrastructure/Postgres/SchemaMigrations/Index.ts +10 -0
- package/Server/Services/AlertEpisodeService.ts +47 -0
- package/Server/Services/AlertService.ts +125 -0
- package/Server/Services/BillingService.ts +98 -0
- package/Server/Services/DatabaseService.ts +184 -20
- package/Server/Services/IncidentEpisodeService.ts +47 -0
- package/Server/Services/IncidentService.ts +123 -0
- package/Server/Services/IncidentTemplateService.ts +123 -1
- package/Server/Services/Index.ts +2 -0
- package/Server/Services/LogDropFilterService.ts +133 -0
- package/Server/Services/MonitorProbeService.ts +94 -4
- package/Server/Services/MonitorService.ts +48 -43
- package/Server/Services/NetworkDeviceDiscoveryScanService.ts +70 -0
- package/Server/Services/ProbeService.ts +66 -0
- package/Server/Services/ProjectService.ts +131 -7
- package/Server/Services/RecommendationDismissalService.ts +52 -0
- package/Server/Services/RunbookAgentJobService.ts +68 -7
- package/Server/Services/ScheduledMaintenanceService.ts +103 -0
- package/Server/Services/ScheduledMaintenanceTemplateService.ts +90 -0
- package/Server/Services/StatusPageGroupService.ts +186 -0
- package/Server/Services/TraceDropFilterService.ts +133 -0
- package/Server/Types/Workflow/Components/API/Delete.ts +12 -0
- package/Server/Types/Workflow/Components/API/Get.ts +12 -0
- package/Server/Types/Workflow/Components/API/Patch.ts +12 -0
- package/Server/Types/Workflow/Components/API/Post.ts +12 -0
- package/Server/Types/Workflow/Components/API/Put.ts +13 -0
- package/Server/Utils/Database/ProjectScopedReferenceValidator.ts +212 -0
- package/Server/Utils/DropFilterValidation.ts +127 -0
- package/Server/Utils/Errors.ts +5 -0
- package/Server/Utils/Monitor/MonitorAlert.ts +28 -1
- package/Server/Utils/Monitor/MonitorIncident.ts +31 -2
- package/Server/Utils/Telemetry/AppMetrics.ts +31 -0
- package/Tests/Models/AnalyticsModels/KubernetesCostAllocation.test.ts +16 -0
- package/Tests/Models/DatabaseModels/MonitorProbeColumnAccessControl.test.ts +196 -0
- package/Tests/Models/RecommendationDismissalModel.test.ts +269 -0
- package/Tests/Server/API/BaseAPIUpdatePayloadValidation.test.ts +320 -0
- package/Tests/Server/API/BaseAnalyticsAPIUpdatePayloadValidation.test.ts +293 -0
- package/Tests/Server/API/CommonAPIAuthGuard.test.ts +164 -0
- package/Tests/Server/API/ProbeAPI.test.ts +422 -53
- package/Tests/Server/API/ProjectAPI.test.ts +180 -0
- package/Tests/Server/API/ProjectAPIExtendTrialBillingDisabled.test.ts +138 -0
- package/Tests/Server/API/ProjectScopedCustomRouteAuth.test.ts +458 -0
- package/Tests/Server/Infrastructure/ContainerBootConfiguration.test.ts +359 -0
- package/Tests/Server/Infrastructure/ProcessSignalDelivery.test.ts +427 -0
- package/Tests/Server/Services/BillingServiceExtendTrial.test.ts +439 -0
- package/Tests/Server/Services/CrossProjectReferenceWriteGuard.test.ts +810 -0
- package/Tests/Server/Services/DatabaseServiceAtomicAddToColumns.test.ts +269 -0
- package/Tests/Server/Services/DatabaseServiceEmptyUpdate.test.ts +277 -0
- package/Tests/Server/Services/DatabaseServiceSortColumnSelect.test.ts +201 -0
- package/Tests/Server/Services/DiscoveryScanClaimHookFreeSafety.test.ts +81 -23
- package/Tests/Server/Services/DropFilterSaveValidation.test.ts +398 -0
- package/Tests/Server/Services/MonitorProbeDeleteHooks.test.ts +280 -0
- package/Tests/Server/Services/MonitorProbeServiceProbeTenancy.test.ts +304 -0
- package/Tests/Server/Services/NetworkDeviceDiscoveryScanService.test.ts +262 -0
- package/Tests/Server/Services/ProjectServiceExtendTrial.test.ts +614 -0
- package/Tests/Server/Services/RecommendationDismissalService.test.ts +306 -0
- package/Tests/Server/Services/RepairCrossProjectIncidentReferencesMigration.test.ts +528 -0
- package/Tests/Server/Services/StatusPageGroupNesting.test.ts +395 -0
- package/Tests/Server/TestingUtils/Services/BillingServiceHelper.ts +26 -21
- package/Tests/Server/Types/Database/Permissions/WorkflowVariableColumnPermission.test.ts +227 -0
- package/Tests/Server/Types/Workflow/Components/ApiComponentErrorPort.test.ts +285 -0
- package/Tests/Server/Utils/Database/ProjectScopedReferenceValidator.test.ts +463 -0
- package/Tests/Server/Utils/DropFilterValidation.test.ts +269 -0
- package/Tests/Server/Utils/Telemetry/SpanUtil.test.ts +94 -0
- package/Tests/Types/DateUserTimezone.test.ts +52 -0
- package/Tests/Types/JSONFunctions.test.ts +103 -1
- package/Tests/Types/Monitor/KubernetesAlertTemplates.test.ts +177 -9
- package/Tests/Types/Monitor/MonitorStepDnsMonitor.test.ts +105 -0
- package/Tests/Types/Monitor/MonitorStepDnssecMonitor.test.ts +131 -0
- package/Tests/Types/Monitor/MonitorStepDomainMonitor.test.ts +60 -0
- package/Tests/Types/Monitor/MonitorStepExternalStatusPageMonitor.test.ts +82 -0
- package/Tests/Types/Monitor/MonitorStepInfrastructureMonitors.test.ts +268 -0
- package/Tests/Types/Monitor/MonitorStepMetricMonitor.test.ts +386 -0
- package/Tests/Types/Monitor/MonitorStepProfileMonitor.test.ts +185 -0
- package/Tests/Types/Monitor/MonitorStepSnmpMonitor.test.ts +156 -0
- package/Tests/Types/Monitor/Recommendation/MonitorRecommendationCatalog.test.ts +371 -0
- package/Tests/Types/Monitor/Recommendation/MonitorRecommendationCoverage.test.ts +901 -0
- package/Tests/Types/Monitor/Recommendation/MonitorRecommendationNotificationMode.test.ts +607 -0
- package/Tests/Types/Monitor/Recommendation/MonitorRecommendationSeverityMapper.test.ts +754 -0
- package/Tests/Types/Monitor/Recommendation/MonitorRecommendationUtil.test.ts +960 -0
- package/Tests/Types/RollingTime/RollingTimeUtil.test.ts +186 -0
- package/Tests/Types/Runbook/RunbookStepTimeout.test.ts +410 -0
- package/Tests/Types/Telemetry/DropFilterSampling.test.ts +241 -0
- package/Tests/Types/Workspace/NotificationRuleConditionUtil.test.ts +353 -0
- package/Tests/Types/Workspace/NotificationRuleUtil.test.ts +566 -0
- package/Tests/UI/Components/CodeEditor.test.tsx +174 -0
- package/Tests/UI/Components/ErrorBoundary.test.tsx +555 -24
- package/Tests/UI/Components/InfoCard.test.tsx +358 -0
- package/Tests/UI/Components/LogTimeRangePicker.test.tsx +138 -0
- package/Tests/UI/Components/Modal.test.tsx +43 -5
- package/Tests/UI/Components/ModelTable/BaseModelTableColumnCustomization.test.tsx +679 -0
- package/Tests/UI/Components/ModelTable/BaseModelTableSearchLabels.test.tsx +397 -0
- package/Tests/UI/Components/ModelTable/ColumnCustomizationModal.test.tsx +999 -0
- package/Tests/UI/Components/ModelTable/ColumnPreference.test.ts +1678 -0
- package/Tests/UI/Components/ModelTable/CustomFieldColumns.test.tsx +1094 -0
- package/Tests/UI/Components/Runbook/StepTimeoutInput.test.tsx +386 -0
- package/Tests/UI/Components/StatusPage/ResourceGroupSection.test.tsx +671 -0
- package/Tests/UI/Components/TelemetryTimeRangePicker.test.tsx +404 -0
- package/Tests/UI/Utils/DropdownAlignment.test.ts +306 -0
- package/Tests/UI/Utils/TableFilterUrlState.test.ts +292 -0
- package/Tests/Utils/Monitor/MonitorSummaryProbeUtil.test.ts +263 -0
- package/Tests/Utils/NetworkDiscovery/ScanTargetUtil.test.ts +583 -0
- package/Tests/Utils/StatusPage/GroupNestingLayout.test.ts +1072 -0
- package/Tests/Utils/StatusPage/GroupTree.test.ts +583 -0
- package/Tests/Utils/StatusPage/ResourceUptime.test.ts +411 -0
- package/Tests/Utils/UserPreferences.test.ts +563 -0
- package/Types/Date.ts +15 -6
- package/Types/JSONFunctions.ts +7 -2
- package/Types/Kubernetes/KubernetesCostIngest.ts +37 -1
- package/Types/Monitor/KubernetesAlertTemplates.ts +205 -0
- package/Types/Monitor/MonitorStep.ts +10 -1
- package/Types/Monitor/MonitorStepMetricMonitor.ts +46 -1
- package/Types/Monitor/Recommendation/MonitorRecommendationCatalog.ts +413 -0
- package/Types/Monitor/Recommendation/MonitorRecommendationSeverityMapper.ts +168 -0
- package/Types/Monitor/Recommendation/MonitorRecommendationTypes.ts +175 -0
- package/Types/Monitor/Recommendation/MonitorRecommendationUtil.ts +743 -0
- package/Types/Permission.ts +45 -0
- package/Types/Recommendation/RecommendationType.ts +20 -0
- package/Types/Runbook/RunbookExecutionDeadline.ts +129 -0
- package/Types/Runbook/RunbookStepTimeout.ts +202 -0
- package/Types/Telemetry/DropFilterSampling.ts +92 -0
- package/UI/Components/AI/GenerateFromAIModal.tsx +0 -2
- package/UI/Components/Accordion/Accordion.tsx +10 -2
- package/UI/Components/BulkUpdate/BulkLabelActions.tsx +0 -1
- package/UI/Components/CodeEditor/CodeEditor.tsx +34 -20
- package/UI/Components/Date/RangeStartAndEndDateView.tsx +0 -1
- package/UI/Components/EditionLabel/EditionLabel.tsx +1 -27
- package/UI/Components/Error/PageError.tsx +0 -4
- package/UI/Components/ErrorBoundary.tsx +252 -15
- package/UI/Components/InfoCard/InfoCard.tsx +58 -1
- package/UI/Components/LogsViewer/components/LogTimeRangePicker.tsx +34 -1
- package/UI/Components/MasterPage/MasterPage.tsx +65 -0
- package/UI/Components/Modal/Modal.tsx +16 -60
- package/UI/Components/ModelFormModal/ModelFormModal.tsx +0 -8
- package/UI/Components/ModelTable/BaseModelTable.tsx +503 -71
- package/UI/Components/ModelTable/Column.ts +17 -0
- package/UI/Components/ModelTable/ColumnCustomizationModal.tsx +523 -0
- package/UI/Components/ModelTable/ColumnPreference.ts +482 -0
- package/UI/Components/ModelTable/CustomFieldColumns.tsx +326 -0
- package/UI/Components/ModelTable/TableView.tsx +24 -2
- package/UI/Components/ModelTable/useCustomFieldColumns.ts +150 -0
- package/UI/Components/Runbook/StepTimeoutInput.tsx +173 -0
- package/UI/Components/SideMenu/SideMenu.tsx +24 -4
- package/UI/Components/StatusPage/ResourceGroupSection.tsx +231 -0
- package/UI/Components/Table/Table.tsx +14 -1
- package/UI/Components/Table/TableRow.tsx +180 -175
- package/UI/Components/Table/Types/Column.ts +2 -0
- package/UI/Components/TelemetryViewer/components/TelemetryTimeRangePicker.tsx +34 -1
- package/UI/Utils/DropdownAlignment.ts +162 -0
- package/UI/Utils/TableFilterUrlState.ts +59 -20
- package/Utils/API.ts +106 -2
- package/Utils/Monitor/MonitorSummaryProbeUtil.ts +130 -0
- package/Utils/NetworkDiscovery/ScanTargetUtil.ts +434 -0
- package/Utils/StatusPage/GroupNestingLayout.ts +343 -0
- package/Utils/StatusPage/GroupTree.ts +307 -0
- package/Utils/StatusPage/ResourceUptime.ts +90 -17
- package/Utils/UserPreferences.ts +53 -0
- package/build/dist/Models/AnalyticsModels/KubernetesCostAllocation.js +86 -0
- package/build/dist/Models/AnalyticsModels/KubernetesCostAllocation.js.map +1 -1
- package/build/dist/Models/DatabaseModels/AlertEpisodeStateTimeline.js +1 -0
- package/build/dist/Models/DatabaseModels/AlertEpisodeStateTimeline.js.map +1 -1
- package/build/dist/Models/DatabaseModels/AlertStateTimeline.js +1 -0
- package/build/dist/Models/DatabaseModels/AlertStateTimeline.js.map +1 -1
- package/build/dist/Models/DatabaseModels/IncidentEpisodeStateTimeline.js +1 -0
- package/build/dist/Models/DatabaseModels/IncidentEpisodeStateTimeline.js.map +1 -1
- package/build/dist/Models/DatabaseModels/IncidentStateTimeline.js +1 -0
- package/build/dist/Models/DatabaseModels/IncidentStateTimeline.js.map +1 -1
- package/build/dist/Models/DatabaseModels/Index.js +2 -0
- package/build/dist/Models/DatabaseModels/Index.js.map +1 -1
- package/build/dist/Models/DatabaseModels/LogDropFilter.js +91 -0
- package/build/dist/Models/DatabaseModels/LogDropFilter.js.map +1 -1
- package/build/dist/Models/DatabaseModels/NetworkDeviceDiscoveryScan.js +14 -4
- package/build/dist/Models/DatabaseModels/NetworkDeviceDiscoveryScan.js.map +1 -1
- package/build/dist/Models/DatabaseModels/RecommendationDismissal.js +484 -0
- package/build/dist/Models/DatabaseModels/RecommendationDismissal.js.map +1 -0
- package/build/dist/Models/DatabaseModels/ScheduledMaintenanceStateTimeline.js +1 -0
- package/build/dist/Models/DatabaseModels/ScheduledMaintenanceStateTimeline.js.map +1 -1
- package/build/dist/Models/DatabaseModels/StatusPageGroup.js +94 -0
- package/build/dist/Models/DatabaseModels/StatusPageGroup.js.map +1 -1
- package/build/dist/Models/DatabaseModels/TableView.js +40 -0
- package/build/dist/Models/DatabaseModels/TableView.js.map +1 -1
- package/build/dist/Models/DatabaseModels/TraceDropFilter.js +91 -0
- package/build/dist/Models/DatabaseModels/TraceDropFilter.js.map +1 -1
- package/build/dist/Models/DatabaseModels/WorkflowVariable.js +5 -1
- package/build/dist/Models/DatabaseModels/WorkflowVariable.js.map +1 -1
- package/build/dist/Server/API/AlertAPI.js +22 -13
- package/build/dist/Server/API/AlertAPI.js.map +1 -1
- package/build/dist/Server/API/BaseAPI.js +22 -1
- package/build/dist/Server/API/BaseAPI.js.map +1 -1
- package/build/dist/Server/API/BaseAnalyticsAPI.js +24 -1
- package/build/dist/Server/API/BaseAnalyticsAPI.js.map +1 -1
- package/build/dist/Server/API/CommonAPI.js +42 -0
- package/build/dist/Server/API/CommonAPI.js.map +1 -1
- package/build/dist/Server/API/IncidentAPI.js +43 -26
- package/build/dist/Server/API/IncidentAPI.js.map +1 -1
- package/build/dist/Server/API/IncidentEpisodeAPI.js +21 -12
- package/build/dist/Server/API/IncidentEpisodeAPI.js.map +1 -1
- package/build/dist/Server/API/MonitorAPI.js +23 -0
- package/build/dist/Server/API/MonitorAPI.js.map +1 -1
- package/build/dist/Server/API/MonitorTemplateAPI.js +4 -0
- package/build/dist/Server/API/MonitorTemplateAPI.js.map +1 -1
- package/build/dist/Server/API/ProbeAPI.js +131 -15
- package/build/dist/Server/API/ProbeAPI.js.map +1 -1
- package/build/dist/Server/API/ProjectAPI.js +62 -3
- package/build/dist/Server/API/ProjectAPI.js.map +1 -1
- package/build/dist/Server/API/ScheduledMaintenanceAPI.js +23 -14
- package/build/dist/Server/API/ScheduledMaintenanceAPI.js.map +1 -1
- package/build/dist/Server/API/StatusPageAPI.js +61 -33
- package/build/dist/Server/API/StatusPageAPI.js.map +1 -1
- package/build/dist/Server/API/WorkspaceNotificationRuleAPI.js +26 -2
- package/build/dist/Server/API/WorkspaceNotificationRuleAPI.js.map +1 -1
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1785241000000-AddColumnsToTableView.js +12 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1785241000000-AddColumnsToTableView.js.map +1 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1785320000000-RepairCrossProjectIncidentReferences.js +397 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1785320000000-RepairCrossProjectIncidentReferences.js.map +1 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1785329453269-AddParentGroupToStatusPageGroup.js +16 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1785329453269-AddParentGroupToStatusPageGroup.js.map +1 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1785397674289-AddRecommendationDismissalTable.js +30 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1785397674289-AddRecommendationDismissalTable.js.map +1 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1785405581596-AddDroppedCountersToDropFilters.js +34 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1785405581596-AddDroppedCountersToDropFilters.js.map +1 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/Index.js +10 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/Index.js.map +1 -1
- package/build/dist/Server/Services/AlertEpisodeService.js +39 -0
- package/build/dist/Server/Services/AlertEpisodeService.js.map +1 -1
- package/build/dist/Server/Services/AlertService.js +95 -0
- package/build/dist/Server/Services/AlertService.js.map +1 -1
- package/build/dist/Server/Services/BillingService.js +71 -0
- package/build/dist/Server/Services/BillingService.js.map +1 -1
- package/build/dist/Server/Services/DatabaseService.js +140 -17
- package/build/dist/Server/Services/DatabaseService.js.map +1 -1
- package/build/dist/Server/Services/IncidentEpisodeService.js +39 -0
- package/build/dist/Server/Services/IncidentEpisodeService.js.map +1 -1
- package/build/dist/Server/Services/IncidentService.js +100 -0
- package/build/dist/Server/Services/IncidentService.js.map +1 -1
- package/build/dist/Server/Services/IncidentTemplateService.js +97 -0
- package/build/dist/Server/Services/IncidentTemplateService.js.map +1 -1
- package/build/dist/Server/Services/Index.js +2 -0
- package/build/dist/Server/Services/Index.js.map +1 -1
- package/build/dist/Server/Services/LogDropFilterService.js +93 -0
- package/build/dist/Server/Services/LogDropFilterService.js.map +1 -1
- package/build/dist/Server/Services/MonitorProbeService.js +73 -5
- package/build/dist/Server/Services/MonitorProbeService.js.map +1 -1
- package/build/dist/Server/Services/MonitorService.js +34 -39
- package/build/dist/Server/Services/MonitorService.js.map +1 -1
- package/build/dist/Server/Services/NetworkDeviceDiscoveryScanService.js +71 -0
- package/build/dist/Server/Services/NetworkDeviceDiscoveryScanService.js.map +1 -1
- package/build/dist/Server/Services/ProbeService.js +64 -0
- package/build/dist/Server/Services/ProbeService.js.map +1 -1
- package/build/dist/Server/Services/ProjectService.js +103 -7
- package/build/dist/Server/Services/ProjectService.js.map +1 -1
- package/build/dist/Server/Services/RecommendationDismissalService.js +50 -0
- package/build/dist/Server/Services/RecommendationDismissalService.js.map +1 -0
- package/build/dist/Server/Services/RunbookAgentJobService.js +63 -5
- package/build/dist/Server/Services/RunbookAgentJobService.js.map +1 -1
- package/build/dist/Server/Services/ScheduledMaintenanceService.js +83 -0
- package/build/dist/Server/Services/ScheduledMaintenanceService.js.map +1 -1
- package/build/dist/Server/Services/ScheduledMaintenanceTemplateService.js +65 -0
- package/build/dist/Server/Services/ScheduledMaintenanceTemplateService.js.map +1 -1
- package/build/dist/Server/Services/StatusPageGroupService.js +136 -0
- package/build/dist/Server/Services/StatusPageGroupService.js.map +1 -1
- package/build/dist/Server/Services/TraceDropFilterService.js +93 -0
- package/build/dist/Server/Services/TraceDropFilterService.js.map +1 -1
- package/build/dist/Server/Types/Workflow/Components/API/Delete.js +11 -0
- package/build/dist/Server/Types/Workflow/Components/API/Delete.js.map +1 -1
- package/build/dist/Server/Types/Workflow/Components/API/Get.js +11 -0
- package/build/dist/Server/Types/Workflow/Components/API/Get.js.map +1 -1
- package/build/dist/Server/Types/Workflow/Components/API/Patch.js +11 -0
- package/build/dist/Server/Types/Workflow/Components/API/Patch.js.map +1 -1
- package/build/dist/Server/Types/Workflow/Components/API/Post.js +11 -0
- package/build/dist/Server/Types/Workflow/Components/API/Post.js.map +1 -1
- package/build/dist/Server/Types/Workflow/Components/API/Put.js +12 -0
- package/build/dist/Server/Types/Workflow/Components/API/Put.js.map +1 -1
- package/build/dist/Server/Utils/Database/ProjectScopedReferenceValidator.js +132 -0
- package/build/dist/Server/Utils/Database/ProjectScopedReferenceValidator.js.map +1 -0
- package/build/dist/Server/Utils/DropFilterValidation.js +80 -0
- package/build/dist/Server/Utils/DropFilterValidation.js.map +1 -0
- package/build/dist/Server/Utils/Errors.js +3 -0
- package/build/dist/Server/Utils/Errors.js.map +1 -1
- package/build/dist/Server/Utils/Monitor/MonitorAlert.js +30 -12
- package/build/dist/Server/Utils/Monitor/MonitorAlert.js.map +1 -1
- package/build/dist/Server/Utils/Monitor/MonitorIncident.js +38 -18
- package/build/dist/Server/Utils/Monitor/MonitorIncident.js.map +1 -1
- package/build/dist/Server/Utils/Telemetry/AppMetrics.js +26 -0
- package/build/dist/Server/Utils/Telemetry/AppMetrics.js.map +1 -1
- package/build/dist/Types/Date.js +14 -4
- package/build/dist/Types/Date.js.map +1 -1
- package/build/dist/Types/JSONFunctions.js +8 -3
- package/build/dist/Types/JSONFunctions.js.map +1 -1
- package/build/dist/Types/Kubernetes/KubernetesCostIngest.js.map +1 -1
- package/build/dist/Types/Monitor/KubernetesAlertTemplates.js +192 -0
- package/build/dist/Types/Monitor/KubernetesAlertTemplates.js.map +1 -1
- package/build/dist/Types/Monitor/MonitorStep.js +6 -1
- package/build/dist/Types/Monitor/MonitorStep.js.map +1 -1
- package/build/dist/Types/Monitor/MonitorStepMetricMonitor.js +32 -1
- package/build/dist/Types/Monitor/MonitorStepMetricMonitor.js.map +1 -1
- package/build/dist/Types/Monitor/Recommendation/MonitorRecommendationCatalog.js +294 -0
- package/build/dist/Types/Monitor/Recommendation/MonitorRecommendationCatalog.js.map +1 -0
- package/build/dist/Types/Monitor/Recommendation/MonitorRecommendationSeverityMapper.js +110 -0
- package/build/dist/Types/Monitor/Recommendation/MonitorRecommendationSeverityMapper.js.map +1 -0
- package/build/dist/Types/Monitor/Recommendation/MonitorRecommendationTypes.js +58 -0
- package/build/dist/Types/Monitor/Recommendation/MonitorRecommendationTypes.js.map +1 -0
- package/build/dist/Types/Monitor/Recommendation/MonitorRecommendationUtil.js +451 -0
- package/build/dist/Types/Monitor/Recommendation/MonitorRecommendationUtil.js.map +1 -0
- package/build/dist/Types/Permission.js +40 -0
- package/build/dist/Types/Permission.js.map +1 -1
- package/build/dist/Types/Recommendation/RecommendationType.js +21 -0
- package/build/dist/Types/Recommendation/RecommendationType.js.map +1 -0
- package/build/dist/Types/Runbook/RunbookExecutionDeadline.js +93 -0
- package/build/dist/Types/Runbook/RunbookExecutionDeadline.js.map +1 -0
- package/build/dist/Types/Runbook/RunbookStepTimeout.js +142 -0
- package/build/dist/Types/Runbook/RunbookStepTimeout.js.map +1 -0
- package/build/dist/Types/Telemetry/DropFilterSampling.js +75 -0
- package/build/dist/Types/Telemetry/DropFilterSampling.js.map +1 -0
- package/build/dist/UI/Components/AI/GenerateFromAIModal.js +1 -2
- package/build/dist/UI/Components/AI/GenerateFromAIModal.js.map +1 -1
- package/build/dist/UI/Components/Accordion/Accordion.js +9 -2
- package/build/dist/UI/Components/Accordion/Accordion.js.map +1 -1
- package/build/dist/UI/Components/BulkUpdate/BulkLabelActions.js +1 -1
- package/build/dist/UI/Components/BulkUpdate/BulkLabelActions.js.map +1 -1
- package/build/dist/UI/Components/CodeEditor/CodeEditor.js +27 -14
- package/build/dist/UI/Components/CodeEditor/CodeEditor.js.map +1 -1
- package/build/dist/UI/Components/Date/RangeStartAndEndDateView.js +1 -1
- package/build/dist/UI/Components/Date/RangeStartAndEndDateView.js.map +1 -1
- package/build/dist/UI/Components/EditionLabel/EditionLabel.js +2 -20
- package/build/dist/UI/Components/EditionLabel/EditionLabel.js.map +1 -1
- package/build/dist/UI/Components/Error/PageError.js +1 -3
- package/build/dist/UI/Components/Error/PageError.js.map +1 -1
- package/build/dist/UI/Components/ErrorBoundary.js +145 -11
- package/build/dist/UI/Components/ErrorBoundary.js.map +1 -1
- package/build/dist/UI/Components/InfoCard/InfoCard.js +28 -1
- package/build/dist/UI/Components/InfoCard/InfoCard.js.map +1 -1
- package/build/dist/UI/Components/LogsViewer/components/LogTimeRangePicker.js +13 -2
- package/build/dist/UI/Components/LogsViewer/components/LogTimeRangePicker.js.map +1 -1
- package/build/dist/UI/Components/MasterPage/MasterPage.js +50 -1
- package/build/dist/UI/Components/MasterPage/MasterPage.js.map +1 -1
- package/build/dist/UI/Components/Modal/Modal.js +4 -32
- package/build/dist/UI/Components/Modal/Modal.js.map +1 -1
- package/build/dist/UI/Components/ModelFormModal/ModelFormModal.js.map +1 -1
- package/build/dist/UI/Components/ModelTable/BaseModelTable.js +308 -40
- package/build/dist/UI/Components/ModelTable/BaseModelTable.js.map +1 -1
- package/build/dist/UI/Components/ModelTable/ColumnCustomizationModal.js +230 -0
- package/build/dist/UI/Components/ModelTable/ColumnCustomizationModal.js.map +1 -0
- package/build/dist/UI/Components/ModelTable/ColumnPreference.js +258 -0
- package/build/dist/UI/Components/ModelTable/ColumnPreference.js.map +1 -0
- package/build/dist/UI/Components/ModelTable/CustomFieldColumns.js +168 -0
- package/build/dist/UI/Components/ModelTable/CustomFieldColumns.js.map +1 -0
- package/build/dist/UI/Components/ModelTable/TableView.js +13 -2
- package/build/dist/UI/Components/ModelTable/TableView.js.map +1 -1
- package/build/dist/UI/Components/ModelTable/useCustomFieldColumns.js +84 -0
- package/build/dist/UI/Components/ModelTable/useCustomFieldColumns.js.map +1 -0
- package/build/dist/UI/Components/Runbook/StepTimeoutInput.js +101 -0
- package/build/dist/UI/Components/Runbook/StepTimeoutInput.js.map +1 -0
- package/build/dist/UI/Components/SideMenu/SideMenu.js +15 -5
- package/build/dist/UI/Components/SideMenu/SideMenu.js.map +1 -1
- package/build/dist/UI/Components/StatusPage/ResourceGroupSection.js +73 -0
- package/build/dist/UI/Components/StatusPage/ResourceGroupSection.js.map +1 -0
- package/build/dist/UI/Components/Table/Table.js +15 -2
- package/build/dist/UI/Components/Table/Table.js.map +1 -1
- package/build/dist/UI/Components/Table/TableRow.js +11 -6
- package/build/dist/UI/Components/Table/TableRow.js.map +1 -1
- package/build/dist/UI/Components/TelemetryViewer/components/TelemetryTimeRangePicker.js +13 -2
- package/build/dist/UI/Components/TelemetryViewer/components/TelemetryTimeRangePicker.js.map +1 -1
- package/build/dist/UI/Utils/DropdownAlignment.js +98 -0
- package/build/dist/UI/Utils/DropdownAlignment.js.map +1 -0
- package/build/dist/UI/Utils/TableFilterUrlState.js +48 -15
- package/build/dist/UI/Utils/TableFilterUrlState.js.map +1 -1
- package/build/dist/Utils/API.js +39 -2
- package/build/dist/Utils/API.js.map +1 -1
- package/build/dist/Utils/Monitor/MonitorSummaryProbeUtil.js +97 -0
- package/build/dist/Utils/Monitor/MonitorSummaryProbeUtil.js.map +1 -0
- package/build/dist/Utils/NetworkDiscovery/ScanTargetUtil.js +330 -0
- package/build/dist/Utils/NetworkDiscovery/ScanTargetUtil.js.map +1 -0
- package/build/dist/Utils/StatusPage/GroupNestingLayout.js +280 -0
- package/build/dist/Utils/StatusPage/GroupNestingLayout.js.map +1 -0
- package/build/dist/Utils/StatusPage/GroupTree.js +214 -0
- package/build/dist/Utils/StatusPage/GroupTree.js.map +1 -0
- package/build/dist/Utils/StatusPage/ResourceUptime.js +60 -16
- package/build/dist/Utils/StatusPage/ResourceUptime.js.map +1 -1
- package/build/dist/Utils/UserPreferences.js +33 -0
- package/build/dist/Utils/UserPreferences.js.map +1 -1
- package/package.json +1 -1
|
@@ -0,0 +1,359 @@
|
|
|
1
|
+
import { describe, expect, test } from "@jest/globals";
|
|
2
|
+
import fs from "fs";
|
|
3
|
+
import path from "path";
|
|
4
|
+
|
|
5
|
+
/*
|
|
6
|
+
* Regression tests for container boot time.
|
|
7
|
+
*
|
|
8
|
+
* Every production image already runs `npm run compile` (tsc) at BUILD time, so
|
|
9
|
+
* the codebase is fully type-checked before the image is published. The runtime
|
|
10
|
+
* entrypoint then boots through `node --require ts-node/register Index.ts`,
|
|
11
|
+
* which throws that away and re-runs the entire type-check inside every
|
|
12
|
+
* container, on every start, before the HTTP listener binds.
|
|
13
|
+
*
|
|
14
|
+
* That is minutes of boot per pod. It is the amplifier behind the rolling-update
|
|
15
|
+
* capacity hole: a tier cannot be replaced faster than its pods can start, and
|
|
16
|
+
* recovery from a node failure or OOM kill is just as slow.
|
|
17
|
+
*
|
|
18
|
+
* TS_NODE_TRANSPILE_ONLY=1 strips the types without re-checking them. The dev
|
|
19
|
+
* loop already does exactly this via nodemon; only production did not.
|
|
20
|
+
*
|
|
21
|
+
* The end state is what KubernetesCostAgent and KubernetesLogTailer already do:
|
|
22
|
+
* `CMD ["node", "build/dist/Index.js"]`, with no ts-node in the image at all.
|
|
23
|
+
* These tests encode the rule that gets us there safely: if you boot through
|
|
24
|
+
* ts-node, you must not re-type-check at boot.
|
|
25
|
+
*/
|
|
26
|
+
|
|
27
|
+
const REPO_ROOT: string = path.resolve(__dirname, "..", "..", "..", "..");
|
|
28
|
+
|
|
29
|
+
interface ServiceImage {
|
|
30
|
+
service: string;
|
|
31
|
+
/*
|
|
32
|
+
* The part of the Dockerfile that produces the production image. Templated
|
|
33
|
+
* Dockerfiles carry a `{{ if eq .Env.ENVIRONMENT "development" }}` branch that
|
|
34
|
+
* we must not confuse with the production one.
|
|
35
|
+
*/
|
|
36
|
+
productionStanza: string;
|
|
37
|
+
// The `start` script the production CMD ultimately runs, if it runs one.
|
|
38
|
+
startScript: string | null;
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
// CMD forms that hand control to `npm start`.
|
|
42
|
+
const CMD_NPM_START_EXEC_FORM: RegExp = /CMD\s*\[\s*"npm"\s*,\s*"start"\s*\]/;
|
|
43
|
+
const CMD_NPM_START_SHELL_FORM: RegExp = /CMD\s+npm\s+start/;
|
|
44
|
+
const CMD_INVOKES_TS_NODE: RegExp = /CMD.*ts-node\/register/;
|
|
45
|
+
const TRANSPILE_ONLY_ENV: RegExp = /ENV\s+TS_NODE_TRANSPILE_ONLY=1/;
|
|
46
|
+
const CMD_PRECOMPILED_ENTRYPOINT: RegExp =
|
|
47
|
+
/CMD\s*\[\s*"node"\s*,\s*"build\/dist\/Index\.js"\s*\]/;
|
|
48
|
+
const TS_NODE_ANYWHERE: RegExp = /ts-node\/register/;
|
|
49
|
+
/*
|
|
50
|
+
* The actual build step, anchored to a RUN instruction. A plain substring
|
|
51
|
+
* search would also match a comment that merely mentions `npm run compile`.
|
|
52
|
+
*/
|
|
53
|
+
const RUN_COMPILE_INSTRUCTION: RegExp = /^\s*RUN\s+npm\s+run\s+compile\s*$/m;
|
|
54
|
+
// Captures the body of a tsconfig `"include": [ ... ]` array.
|
|
55
|
+
const INCLUDE_ARRAY_BLOCK: RegExp = /"include"\s*:\s*\[([^\]]*)\]/;
|
|
56
|
+
const QUOTED_STRING: RegExp = /"[^"]*"/g;
|
|
57
|
+
|
|
58
|
+
const listServiceImages: () => Array<ServiceImage> =
|
|
59
|
+
(): Array<ServiceImage> => {
|
|
60
|
+
const images: Array<ServiceImage> = [];
|
|
61
|
+
|
|
62
|
+
for (const entry of fs.readdirSync(REPO_ROOT, { withFileTypes: true })) {
|
|
63
|
+
if (!entry.isDirectory() || entry.name === "node_modules") {
|
|
64
|
+
continue;
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
const dockerfilePath: string = path.join(
|
|
68
|
+
REPO_ROOT,
|
|
69
|
+
entry.name,
|
|
70
|
+
"Dockerfile.tpl",
|
|
71
|
+
);
|
|
72
|
+
if (!fs.existsSync(dockerfilePath)) {
|
|
73
|
+
continue;
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
const dockerfile: string = fs.readFileSync(dockerfilePath, "utf8");
|
|
77
|
+
|
|
78
|
+
/*
|
|
79
|
+
* Everything after the last `{{ else }}` is the production branch. Files
|
|
80
|
+
* with no dev/prod split are production in their entirety.
|
|
81
|
+
*/
|
|
82
|
+
const elseIndex: number = dockerfile.lastIndexOf("{{ else }}");
|
|
83
|
+
const productionStanza: string =
|
|
84
|
+
elseIndex === -1 ? dockerfile : dockerfile.slice(elseIndex);
|
|
85
|
+
|
|
86
|
+
let startScript: string | null = null;
|
|
87
|
+
const packageJsonPath: string = path.join(
|
|
88
|
+
REPO_ROOT,
|
|
89
|
+
entry.name,
|
|
90
|
+
"package.json",
|
|
91
|
+
);
|
|
92
|
+
if (fs.existsSync(packageJsonPath)) {
|
|
93
|
+
const parsed: { scripts?: Record<string, string> } = JSON.parse(
|
|
94
|
+
fs.readFileSync(packageJsonPath, "utf8"),
|
|
95
|
+
) as { scripts?: Record<string, string> };
|
|
96
|
+
startScript = parsed.scripts?.["start"] ?? null;
|
|
97
|
+
}
|
|
98
|
+
|
|
99
|
+
images.push({ service: entry.name, productionStanza, startScript });
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
return images;
|
|
103
|
+
};
|
|
104
|
+
|
|
105
|
+
// Does this image's production entrypoint go through ts-node?
|
|
106
|
+
const bootsThroughTsNode: (image: ServiceImage) => boolean = (
|
|
107
|
+
image: ServiceImage,
|
|
108
|
+
): boolean => {
|
|
109
|
+
const runsNpmStart: boolean =
|
|
110
|
+
CMD_NPM_START_EXEC_FORM.test(image.productionStanza) ||
|
|
111
|
+
CMD_NPM_START_SHELL_FORM.test(image.productionStanza);
|
|
112
|
+
|
|
113
|
+
if (
|
|
114
|
+
runsNpmStart &&
|
|
115
|
+
image.startScript !== null &&
|
|
116
|
+
image.startScript.includes("ts-node/register")
|
|
117
|
+
) {
|
|
118
|
+
return true;
|
|
119
|
+
}
|
|
120
|
+
|
|
121
|
+
// Some images invoke ts-node straight from CMD or via a wrapper script.
|
|
122
|
+
return CMD_INVOKES_TS_NODE.test(image.productionStanza);
|
|
123
|
+
};
|
|
124
|
+
|
|
125
|
+
const SERVICE_IMAGES: Array<ServiceImage> = listServiceImages();
|
|
126
|
+
|
|
127
|
+
// The nginx image boots run.sh, which calls `npm start` internally.
|
|
128
|
+
const NGINX_WRAPPER_SERVICES: Array<string> = ["Nginx"];
|
|
129
|
+
|
|
130
|
+
const bootsThroughTsNodeIncludingWrappers: (image: ServiceImage) => boolean = (
|
|
131
|
+
image: ServiceImage,
|
|
132
|
+
): boolean => {
|
|
133
|
+
if (NGINX_WRAPPER_SERVICES.includes(image.service)) {
|
|
134
|
+
return (
|
|
135
|
+
image.startScript !== null &&
|
|
136
|
+
image.startScript.includes("ts-node/register")
|
|
137
|
+
);
|
|
138
|
+
}
|
|
139
|
+
return bootsThroughTsNode(image);
|
|
140
|
+
};
|
|
141
|
+
|
|
142
|
+
describe("Container boot configuration", () => {
|
|
143
|
+
test("the repository actually has service images to check", () => {
|
|
144
|
+
/*
|
|
145
|
+
* Guards against the discovery above silently matching nothing, which would
|
|
146
|
+
* make every test below vacuously pass.
|
|
147
|
+
*/
|
|
148
|
+
expect(SERVICE_IMAGES.length).toBeGreaterThan(5);
|
|
149
|
+
});
|
|
150
|
+
|
|
151
|
+
describe("images that boot through ts-node must not re-type-check at boot", () => {
|
|
152
|
+
const tsNodeImages: Array<ServiceImage> = SERVICE_IMAGES.filter(
|
|
153
|
+
bootsThroughTsNodeIncludingWrappers,
|
|
154
|
+
);
|
|
155
|
+
|
|
156
|
+
test("at least one such image exists", () => {
|
|
157
|
+
expect(tsNodeImages.length).toBeGreaterThan(0);
|
|
158
|
+
});
|
|
159
|
+
|
|
160
|
+
test.each(
|
|
161
|
+
tsNodeImages.map((i: ServiceImage) => {
|
|
162
|
+
return i.service;
|
|
163
|
+
}),
|
|
164
|
+
)(
|
|
165
|
+
"%s sets TS_NODE_TRANSPILE_ONLY=1 in its production image",
|
|
166
|
+
(service: string) => {
|
|
167
|
+
const image: ServiceImage | undefined = SERVICE_IMAGES.find(
|
|
168
|
+
(i: ServiceImage) => {
|
|
169
|
+
return i.service === service;
|
|
170
|
+
},
|
|
171
|
+
);
|
|
172
|
+
|
|
173
|
+
expect(image).toBeDefined();
|
|
174
|
+
expect(image?.productionStanza).toMatch(TRANSPILE_ONLY_ENV);
|
|
175
|
+
},
|
|
176
|
+
);
|
|
177
|
+
});
|
|
178
|
+
|
|
179
|
+
describe("no image disables the boot check without a build-time check", () => {
|
|
180
|
+
/*
|
|
181
|
+
* The two halves must stay together. Disabling the boot-time type-check on a
|
|
182
|
+
* service whose image never runs `npm run compile` would leave its types
|
|
183
|
+
* verified NOWHERE -- not at build, not at boot, not in CI.
|
|
184
|
+
*/
|
|
185
|
+
test("every ts-node image type-checks at build time", () => {
|
|
186
|
+
const gaps: Array<string> = SERVICE_IMAGES.filter(
|
|
187
|
+
(image: ServiceImage) => {
|
|
188
|
+
return (
|
|
189
|
+
bootsThroughTsNodeIncludingWrappers(image) &&
|
|
190
|
+
!RUN_COMPILE_INSTRUCTION.test(image.productionStanza)
|
|
191
|
+
);
|
|
192
|
+
},
|
|
193
|
+
).map((image: ServiceImage) => {
|
|
194
|
+
return image.service;
|
|
195
|
+
});
|
|
196
|
+
|
|
197
|
+
expect(gaps).toEqual([]);
|
|
198
|
+
});
|
|
199
|
+
});
|
|
200
|
+
|
|
201
|
+
describe("images that run precompiled JavaScript need no such flag", () => {
|
|
202
|
+
/*
|
|
203
|
+
* KubernetesCostAgent and KubernetesLogTailer boot `build/dist/Index.js`
|
|
204
|
+
* directly. They are the model the ts-node services should eventually
|
|
205
|
+
* follow, and they must not regress back to ts-node without the flag.
|
|
206
|
+
*/
|
|
207
|
+
const precompiledImages: Array<ServiceImage> = SERVICE_IMAGES.filter(
|
|
208
|
+
(image: ServiceImage) => {
|
|
209
|
+
return CMD_PRECOMPILED_ENTRYPOINT.test(image.productionStanza);
|
|
210
|
+
},
|
|
211
|
+
);
|
|
212
|
+
|
|
213
|
+
test("the precompiled pattern is still in use somewhere", () => {
|
|
214
|
+
expect(precompiledImages.length).toBeGreaterThan(0);
|
|
215
|
+
});
|
|
216
|
+
|
|
217
|
+
test.each(
|
|
218
|
+
precompiledImages.map((i: ServiceImage) => {
|
|
219
|
+
return i.service;
|
|
220
|
+
}),
|
|
221
|
+
)("%s does not boot through ts-node", (service: string) => {
|
|
222
|
+
const image: ServiceImage | undefined = SERVICE_IMAGES.find(
|
|
223
|
+
(i: ServiceImage) => {
|
|
224
|
+
return i.service === service;
|
|
225
|
+
},
|
|
226
|
+
);
|
|
227
|
+
|
|
228
|
+
expect(image).toBeDefined();
|
|
229
|
+
expect(image?.productionStanza).not.toMatch(TS_NODE_ANYWHERE);
|
|
230
|
+
});
|
|
231
|
+
});
|
|
232
|
+
|
|
233
|
+
describe("build-time type checking is still in place", () => {
|
|
234
|
+
/*
|
|
235
|
+
* transpile-only is only safe because tsc already ran at build time. If a
|
|
236
|
+
* service ever drops `npm run compile`, disabling the boot check would mean
|
|
237
|
+
* its types are never verified at all.
|
|
238
|
+
*/
|
|
239
|
+
const tsNodeImages: Array<ServiceImage> = SERVICE_IMAGES.filter(
|
|
240
|
+
(image: ServiceImage) => {
|
|
241
|
+
return (
|
|
242
|
+
bootsThroughTsNodeIncludingWrappers(image) &&
|
|
243
|
+
TRANSPILE_ONLY_ENV.test(image.productionStanza)
|
|
244
|
+
);
|
|
245
|
+
},
|
|
246
|
+
);
|
|
247
|
+
|
|
248
|
+
test.each(
|
|
249
|
+
tsNodeImages.map((i: ServiceImage) => {
|
|
250
|
+
return i.service;
|
|
251
|
+
}),
|
|
252
|
+
)("%s still runs `npm run compile` at build time", (service: string) => {
|
|
253
|
+
const image: ServiceImage | undefined = SERVICE_IMAGES.find(
|
|
254
|
+
(i: ServiceImage) => {
|
|
255
|
+
return i.service === service;
|
|
256
|
+
},
|
|
257
|
+
);
|
|
258
|
+
|
|
259
|
+
expect(image).toBeDefined();
|
|
260
|
+
expect(image?.productionStanza).toMatch(RUN_COMPILE_INSTRUCTION);
|
|
261
|
+
});
|
|
262
|
+
});
|
|
263
|
+
|
|
264
|
+
describe("the dev loop keeps its existing transpile-only behaviour", () => {
|
|
265
|
+
const nodemonServices: Array<string> = [
|
|
266
|
+
"App",
|
|
267
|
+
"AIAgent",
|
|
268
|
+
"Home",
|
|
269
|
+
"Probe",
|
|
270
|
+
"TestServer",
|
|
271
|
+
];
|
|
272
|
+
|
|
273
|
+
test.each(nodemonServices)(
|
|
274
|
+
"%s nodemon config still uses transpile-only",
|
|
275
|
+
(service: string) => {
|
|
276
|
+
const nodemonPath: string = path.join(
|
|
277
|
+
REPO_ROOT,
|
|
278
|
+
service,
|
|
279
|
+
"nodemon.json",
|
|
280
|
+
);
|
|
281
|
+
|
|
282
|
+
expect(fs.existsSync(nodemonPath)).toBe(true);
|
|
283
|
+
expect(fs.readFileSync(nodemonPath, "utf8")).toContain(
|
|
284
|
+
"TS_NODE_TRANSPILE_ONLY",
|
|
285
|
+
);
|
|
286
|
+
},
|
|
287
|
+
);
|
|
288
|
+
});
|
|
289
|
+
|
|
290
|
+
describe("build-time type checking actually has inputs to check", () => {
|
|
291
|
+
/*
|
|
292
|
+
* A tsconfig `include` entry beginning with "/" is an ABSOLUTE glob rooted
|
|
293
|
+
* at the filesystem, not at the tsconfig's directory. AIAgent, Probe and
|
|
294
|
+
* RunbookAgent all shipped `["/**\/*.ts"]`, which meant `npm run compile`
|
|
295
|
+
* matched whatever .ts files happened to lie within tsc's glob reach of `/`
|
|
296
|
+
* -- nothing at all on a developer machine (tsc exits 2 with TS18003), and
|
|
297
|
+
* an arbitrary set inside the container, where /usr/src/app sits shallow
|
|
298
|
+
* enough to match.
|
|
299
|
+
*
|
|
300
|
+
* That made the build-time type-check environment-dependent and, on the
|
|
301
|
+
* services above, effectively absent -- while the CI compile jobs stayed
|
|
302
|
+
* green. Since TS_NODE_TRANSPILE_ONLY hands ALL type verification to that
|
|
303
|
+
* build step, a broken `include` silently means no type checking anywhere.
|
|
304
|
+
*/
|
|
305
|
+
const tsConfigPaths: Array<string> = fs
|
|
306
|
+
.readdirSync(REPO_ROOT, { withFileTypes: true })
|
|
307
|
+
.filter((entry: fs.Dirent) => {
|
|
308
|
+
return entry.isDirectory() && entry.name !== "node_modules";
|
|
309
|
+
})
|
|
310
|
+
.map((entry: fs.Dirent) => {
|
|
311
|
+
return path.join(entry.name, "tsconfig.json");
|
|
312
|
+
})
|
|
313
|
+
.filter((candidate: string) => {
|
|
314
|
+
return fs.existsSync(path.join(REPO_ROOT, candidate));
|
|
315
|
+
});
|
|
316
|
+
|
|
317
|
+
test("there are tsconfigs to check", () => {
|
|
318
|
+
expect(tsConfigPaths.length).toBeGreaterThan(0);
|
|
319
|
+
});
|
|
320
|
+
|
|
321
|
+
test.each(tsConfigPaths)(
|
|
322
|
+
"%s has no absolute include glob",
|
|
323
|
+
(tsConfigPath: string) => {
|
|
324
|
+
/*
|
|
325
|
+
* These tsconfigs are JSONC (comments and trailing commas), so they are
|
|
326
|
+
* not valid JSON. Extract the include array textually instead of
|
|
327
|
+
* hand-rolling a JSONC parser.
|
|
328
|
+
*/
|
|
329
|
+
const raw: string = fs.readFileSync(
|
|
330
|
+
path.join(REPO_ROOT, tsConfigPath),
|
|
331
|
+
"utf8",
|
|
332
|
+
);
|
|
333
|
+
const includeBlock: RegExpMatchArray | null =
|
|
334
|
+
raw.match(INCLUDE_ARRAY_BLOCK);
|
|
335
|
+
|
|
336
|
+
if (includeBlock === null) {
|
|
337
|
+
// No `include` at all: tsc defaults to the tsconfig's own directory.
|
|
338
|
+
return;
|
|
339
|
+
}
|
|
340
|
+
|
|
341
|
+
const patterns: Array<string> = (
|
|
342
|
+
includeBlock[1]?.match(QUOTED_STRING) ?? []
|
|
343
|
+
).map((quoted: string) => {
|
|
344
|
+
return quoted.slice(1, -1);
|
|
345
|
+
});
|
|
346
|
+
|
|
347
|
+
expect(patterns.length).toBeGreaterThan(0);
|
|
348
|
+
|
|
349
|
+
for (const pattern of patterns) {
|
|
350
|
+
expect({
|
|
351
|
+
tsConfigPath,
|
|
352
|
+
pattern,
|
|
353
|
+
absolute: pattern.startsWith("/"),
|
|
354
|
+
}).toEqual({ tsConfigPath, pattern, absolute: false });
|
|
355
|
+
}
|
|
356
|
+
},
|
|
357
|
+
);
|
|
358
|
+
});
|
|
359
|
+
});
|