@oneuptime/common 12.0.13 → 12.0.14
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/DatabaseModels/OnCallDutyPolicySchedule.ts +14 -0
- package/Models/DatabaseModels/UserCall.ts +94 -3
- package/Models/DatabaseModels/UserEmail.ts +94 -3
- package/Models/DatabaseModels/UserIncomingCallNumber.ts +94 -3
- package/Models/DatabaseModels/UserPush.ts +37 -0
- package/Models/DatabaseModels/UserSMS.ts +94 -3
- package/Models/DatabaseModels/UserWhatsApp.ts +93 -2
- package/Server/API/BaseAPI.ts +79 -14
- package/Server/API/UserCallAPI.ts +53 -45
- package/Server/API/UserEmailAPI.ts +53 -44
- package/Server/API/UserIncomingCallNumberAPI.ts +48 -38
- package/Server/API/UserNotificationMethodAdminAPI.ts +481 -0
- package/Server/API/UserPushAPI.ts +126 -2
- package/Server/API/UserSmsAPI.ts +53 -44
- package/Server/API/UserWhatsAppAPI.ts +53 -50
- package/Server/Infrastructure/Postgres/SchemaMigrations/1787142779538-MigrationName.ts +154 -0
- package/Server/Infrastructure/Postgres/SchemaMigrations/1787156982416-MigrationName.ts +17 -0
- package/Server/Infrastructure/Postgres/SchemaMigrations/1787700000000-FixTotpOtpUrlAlgorithm.ts +45 -0
- package/Server/Infrastructure/Postgres/SchemaMigrations/Index.ts +6 -0
- package/Server/Middleware/VerificationCodeRateLimit.ts +586 -0
- package/Server/Services/AnalyticsDatabaseService.ts +169 -0
- package/Server/Services/DatabaseService.ts +101 -0
- package/Server/Services/LogAggregationService.ts +5 -0
- package/Server/Services/PushNotificationService.ts +127 -12
- package/Server/Services/TeamMemberService.ts +53 -13
- package/Server/Services/UserCallService.ts +55 -24
- package/Server/Services/UserEmailService.ts +83 -17
- package/Server/Services/UserIncomingCallNumberService.ts +49 -85
- package/Server/Services/UserNotificationMethodAdminService.ts +1527 -0
- package/Server/Services/UserNotificationRuleService.ts +26 -0
- package/Server/Services/UserPushService.ts +89 -0
- package/Server/Services/UserSmsService.ts +50 -17
- package/Server/Services/UserWhatsAppService.ts +48 -15
- package/Server/Types/Database/QueryHelper.ts +30 -0
- package/Server/Utils/AnalyticsDatabase/QuerySettingsHelper.ts +59 -0
- package/Server/Utils/ChannelVerification.ts +510 -0
- package/Server/Utils/Monitor/Criteria/IncomingRequestCriteria.ts +13 -16
- package/Server/Utils/Monitor/MonitorAlert.ts +24 -21
- package/Server/Utils/Monitor/MonitorIncident.ts +21 -18
- package/Server/Utils/Monitor/MonitorResourceContext.ts +107 -0
- package/Server/Utils/Monitor/MonitorStepResourceIdentity.ts +442 -0
- package/Server/Utils/Monitor/SeriesResourceLabels.ts +3 -3
- package/Server/Utils/Monitor/SeriesResourceLinker.ts +96 -28
- package/Server/Utils/TotpAuth.ts +137 -9
- package/Server/Utils/UserRegistrationToken.ts +182 -0
- package/Server/Utils/VerificationCode.ts +134 -0
- package/Tests/App/Dashboard/AdminNotificationRulesPage.test.tsx +173 -94
- package/Tests/App/Dashboard/AdminUserNotificationMethodsPage.test.tsx +1151 -0
- package/Tests/App/Dashboard/AdminUserOnCallPages.test.tsx +905 -0
- package/Tests/App/Dashboard/DashboardCommandPalette.test.tsx +338 -0
- package/Tests/App/Dashboard/InvestigationPanel.test.tsx +1 -1
- package/Tests/App/Dashboard/MonitorTypePicker.test.tsx +28 -0
- package/Tests/Models/UserPushCriticalAlertColumn.test.ts +172 -0
- package/Tests/Server/API/BaseAPIGetListParallel.test.ts +519 -0
- package/Tests/Server/API/NotificationChannelVerificationAPI.test.ts +543 -0
- package/Tests/Server/API/UserIncomingCallNumberApi.test.ts +108 -18
- package/Tests/Server/API/UserNotificationMethodAdminAPI.test.ts +963 -0
- package/Tests/Server/API/UserPushCriticalAlertsApi.test.ts +114 -0
- package/Tests/Server/API/UserSmsApi.test.ts +107 -14
- package/Tests/Server/API/UserTotpAuthAPI.test.ts +427 -0
- package/Tests/Server/Infrastructure/Postgres/FixTotpOtpUrlAlgorithmMigration.test.ts +315 -0
- package/Tests/Server/Middleware/VerificationCodeRateLimit.test.ts +775 -0
- package/Tests/Server/Services/AddNetworkDeviceReachabilityColumnsMigration.test.ts +10 -62
- package/Tests/Server/Services/AnalyticsDatabasePaginationStability.test.ts +33 -13
- package/Tests/Server/Services/AnalyticsDatabaseSortKeyBoundary.test.ts +658 -0
- package/Tests/Server/Services/CriticalOnCallAlertDelivery.test.ts +458 -0
- package/Tests/Server/Services/CriticalPushAlertPayload.test.ts +301 -0
- package/Tests/Server/Services/DatabaseServiceAtomicIncrement.test.ts +143 -0
- package/Tests/Server/Services/DeliverNotificationForRuleExtraction.test.ts +1 -0
- package/Tests/Server/Services/LogAggregationScanMemory.test.ts +421 -0
- package/Tests/Server/Services/LogAggregationService.test.ts +2 -2
- package/Tests/Server/Services/NotificationChannelCodeIssuance.test.ts +401 -0
- package/Tests/Server/Services/PushNotificationDeliveryOptions.test.ts +204 -0
- package/Tests/Server/Services/TeamMemberAutoAcceptInvitation.test.ts +21 -1
- package/Tests/Server/Services/TeamMemberInviteRegistrationToken.test.ts +290 -0
- package/Tests/Server/Services/UserNotificationMethodAdminService.test.ts +948 -0
- package/Tests/Server/Services/UserNotificationRuleExecuteItem.test.ts +1 -0
- package/Tests/Server/Services/UserPushCriticalAlertToggle.test.ts +255 -0
- package/Tests/Server/Services/UserTotpAuthEnrolment.test.ts +218 -0
- package/Tests/Server/TestingUtils/AuthenticatorApp.ts +248 -0
- package/Tests/Server/Types/Database/Permissions/NotificationChannelVerificationColumns.test.ts +135 -0
- package/Tests/Server/Types/Database/Permissions/OnCallScheduleRelationSelect.test.ts +504 -0
- package/Tests/Server/Types/Database/QueryHelperFindWithSameTextAnyOf.test.ts +91 -0
- package/Tests/Server/Types/Workflow/Components/JsonToText.test.ts +384 -0
- package/Tests/Server/Types/Workflow/Components/MergeJson.test.ts +403 -0
- package/Tests/Server/Utils/Browser.test.ts +162 -0
- package/Tests/Server/Utils/ChannelVerification.test.ts +689 -0
- package/Tests/Server/Utils/Express.test.ts +371 -0
- package/Tests/Server/Utils/Monitor/Criteria/CustomCodeMonitorCriteria.test.ts +707 -0
- package/Tests/Server/Utils/Monitor/Criteria/DnsMonitorCriteria.test.ts +698 -0
- package/Tests/Server/Utils/Monitor/Criteria/IncomingEmailBodyCriteria.test.ts +243 -0
- package/Tests/Server/Utils/Monitor/Criteria/IncomingRequestBodyCriteria.test.ts +278 -0
- package/Tests/Server/Utils/Monitor/MonitorAlertResourceLinking.test.ts +160 -20
- package/Tests/Server/Utils/Monitor/MonitorDependencySuppressionCreatorSkip.test.ts +13 -8
- package/Tests/Server/Utils/Monitor/MonitorIncidentResourceLinking.test.ts +162 -18
- package/Tests/Server/Utils/Monitor/MonitorResourceContext.test.ts +349 -0
- package/Tests/Server/Utils/Monitor/MonitorStepResourceIdentity.test.ts +690 -0
- package/Tests/Server/Utils/Monitor/MonitorSummaryPersistence.test.ts +7 -2
- package/Tests/Server/Utils/Monitor/SeriesResourceLinker.test.ts +92 -18
- package/Tests/Server/Utils/PushNotificationUtilCreators.test.ts +267 -0
- package/Tests/Server/Utils/Telemetry/OneuptimeLabel.test.ts +439 -0
- package/Tests/Server/Utils/TotpAuth.test.ts +719 -0
- package/Tests/Server/Utils/UserRegistrationToken.test.ts +322 -0
- package/Tests/Server/Utils/VerificationCode.test.ts +296 -0
- package/Tests/Types/AutoRemediation/AutoRemediationSuggestionStatus.test.ts +192 -0
- package/Tests/Types/Call/CallRequest.test.ts +189 -0
- package/Tests/Types/Dashboard/DashboardSize.test.ts +226 -0
- package/Tests/Types/Incident/IncidentSlaStatus.test.ts +191 -0
- package/Tests/Types/Metrics/MetricDashboardMetricType.test.ts +278 -0
- package/Tests/Types/Metrics/MetricPipelineRuleType.test.ts +517 -0
- package/Tests/Types/Monitor/IncomingMonitorDefaultCriteria.test.ts +470 -0
- package/Tests/Types/Monitor/MonitorCriteriaInstance.test.ts +6 -4
- package/Tests/Types/Monitor/Recommendation/MonitorRecommendationCatalog.test.ts +262 -5
- package/Tests/Types/Monitor/Recommendation/MonitorRecommendationCoverage.test.ts +1 -1
- package/Tests/Types/Monitor/Recommendation/MonitorRecommendationNotificationMode.test.ts +1 -1
- package/Tests/Types/Monitor/ServiceAlertTemplates.test.ts +905 -0
- package/Tests/Types/Service/ServiceLanguage.test.ts +255 -0
- package/Tests/Types/TextRandomGeneration.test.ts +211 -0
- package/Tests/UI/Components/Button.test.tsx +175 -1
- package/Tests/UI/Components/CodeBlockLanguages.test.tsx +236 -0
- package/Tests/UI/Components/CommandPalette/CommandPalette.test.tsx +568 -0
- package/Tests/UI/Components/CommandPalette/CommandPaletteKeyboard.test.tsx +239 -0
- package/Tests/UI/Components/CommandPalette/CommandPaletteProviders.test.tsx +400 -0
- package/Tests/UI/Components/CommandPalette/PaletteFilter.test.ts +234 -0
- package/Tests/UI/Components/CommandPalette/RecentCommands.test.ts +97 -0
- package/Tests/UI/Components/CountModelSideMenuItemGuard.test.tsx +198 -0
- package/Tests/UI/Components/FeedItemSafeMode.test.tsx +1 -1
- package/Tests/UI/Components/Forms/Utils/FormFieldSchemaTypeUtil.test.ts +267 -0
- package/Tests/UI/Components/List.test.tsx +9 -2
- package/Tests/UI/Components/ListLoadingStates.test.tsx +173 -0
- package/Tests/UI/Components/MarkdownLazy.test.tsx +113 -0
- package/Tests/UI/Components/MarkdownMermaidRetry.test.tsx +110 -0
- package/Tests/UI/Components/ModelTable/useCustomFieldColumns.test.tsx +8 -0
- package/Tests/UI/Components/MonitorTemplateVariables/TemplateVariablesCatalog.test.ts +692 -0
- package/Tests/UI/Components/MoreMenuMotion.test.tsx +118 -0
- package/Tests/UI/Components/NavBarCommandKGating.test.tsx +178 -0
- package/Tests/UI/Components/OrderedStatesList.test.tsx +19 -2
- package/Tests/UI/Components/SideOverMotion.test.tsx +109 -0
- package/Tests/UI/Components/Skeleton.test.tsx +71 -0
- package/Tests/UI/Components/TableLoadingStates.test.tsx +279 -0
- package/Tests/UI/Components/Tabs.test.tsx +24 -0
- package/Tests/UI/Components/Toast.test.tsx +130 -7
- package/Tests/UI/Components/ToastStacking.test.tsx +198 -0
- package/Tests/UI/Utils/Dropdown.test.ts +423 -0
- package/Tests/UI/Utils/ModelAPITenantHeader.test.ts +122 -0
- package/Tests/UI/Utils/ModelListCache.test.ts +338 -0
- package/Tests/UI/Utils/ProjectListCacheInvalidation.test.ts +225 -0
- package/Tests/Utils/API.test.ts +16 -2
- package/Tests/Utils/Dashboard/Components/DashboardKubernetesResourceListShared.test.ts +347 -0
- package/Tests/Utils/Dashboard/Components/DashboardListSharedArgs.test.ts +259 -0
- package/Tests/Utils/Dashboard/Components/DashboardMonitorListComponent.test.ts +466 -0
- package/Tests/Utils/Rum/UrlScrubberSegments.test.ts +362 -0
- package/Types/Email/EmailTemplateType.ts +1 -0
- package/Types/Monitor/MonitorCriteriaInstance.ts +41 -20
- package/Types/Monitor/Recommendation/MonitorRecommendationCatalog.ts +131 -8
- package/Types/Monitor/Recommendation/MonitorRecommendationTypes.ts +48 -8
- package/Types/Monitor/ServiceAlertTemplates.ts +1352 -0
- package/Types/Permission.ts +35 -0
- package/Types/PushNotification/AndroidNotificationChannel.ts +26 -0
- package/Types/PushNotification/PushNotificationMessage.ts +15 -0
- package/Types/PushNotification/PushNotificationRequest.ts +8 -16
- package/Types/Service/ServiceLanguage.ts +144 -0
- package/Types/Text.ts +111 -19
- package/UI/Components/Button/Button.tsx +27 -14
- package/UI/Components/CodeBlock/CodeBlock.tsx +54 -7
- package/UI/Components/CodeBlock/LanguageRegistry.ts +103 -0
- package/UI/Components/CommandPalette/CommandPalette.tsx +790 -0
- package/UI/Components/CommandPalette/PaletteFilter.ts +196 -0
- package/UI/Components/CommandPalette/PaletteRow.tsx +173 -0
- package/UI/Components/CommandPalette/RecentCommands.ts +57 -0
- package/UI/Components/CommandPalette/Types.ts +49 -0
- package/UI/Components/CommandPalette/UseProviderSearch.ts +129 -0
- package/UI/Components/Dropdown/Dropdown.tsx +6 -1
- package/UI/Components/Feed/FeedItem.tsx +1 -1
- package/UI/Components/List/List.tsx +37 -5
- package/UI/Components/List/ListSkeleton.tsx +54 -0
- package/UI/Components/Markdown.tsx/LazyMarkdownViewer.tsx +6 -1
- package/UI/Components/Markdown.tsx/MarkdownViewer.tsx +71 -26
- package/UI/Components/Modal/Modal.tsx +2 -2
- package/UI/Components/ModelTable/BaseModelTable.tsx +1 -1
- package/UI/Components/ModelTable/useCustomFieldColumns.ts +11 -5
- package/UI/Components/MoreMenu/MoreMenu.tsx +39 -1
- package/UI/Components/Navbar/NavBar.tsx +14 -1
- package/UI/Components/OrderedStatesList/OrderedStatesList.tsx +50 -5
- package/UI/Components/SideMenu/CountModelSideMenuItem.tsx +40 -1
- package/UI/Components/SideOver/SideOver.tsx +37 -2
- package/UI/Components/Skeleton/Skeleton.tsx +53 -0
- package/UI/Components/Table/Table.tsx +74 -44
- package/UI/Components/Table/TableSkeletonRows.tsx +141 -0
- package/UI/Components/Tabs/Tab.tsx +1 -1
- package/UI/Components/Toast/Toast.tsx +118 -53
- package/UI/Components/Toast/ToastInit.tsx +82 -32
- package/UI/Styles/Theme.css +40 -0
- package/UI/Utils/ModelAPI/ModelAPI.ts +20 -10
- package/UI/Utils/ModelListCache.ts +188 -0
- package/UI/Utils/Project.ts +29 -0
- package/Utils/API.ts +6 -1
- package/build/dist/Models/DatabaseModels/OnCallDutyPolicySchedule.js +14 -0
- package/build/dist/Models/DatabaseModels/OnCallDutyPolicySchedule.js.map +1 -1
- package/build/dist/Models/DatabaseModels/UserCall.js +101 -3
- package/build/dist/Models/DatabaseModels/UserCall.js.map +1 -1
- package/build/dist/Models/DatabaseModels/UserEmail.js +101 -3
- package/build/dist/Models/DatabaseModels/UserEmail.js.map +1 -1
- package/build/dist/Models/DatabaseModels/UserIncomingCallNumber.js +101 -3
- package/build/dist/Models/DatabaseModels/UserIncomingCallNumber.js.map +1 -1
- package/build/dist/Models/DatabaseModels/UserPush.js +38 -0
- package/build/dist/Models/DatabaseModels/UserPush.js.map +1 -1
- package/build/dist/Models/DatabaseModels/UserSMS.js +101 -3
- package/build/dist/Models/DatabaseModels/UserSMS.js.map +1 -1
- package/build/dist/Models/DatabaseModels/UserWhatsApp.js +100 -2
- package/build/dist/Models/DatabaseModels/UserWhatsApp.js.map +1 -1
- package/build/dist/Server/API/BaseAPI.js +69 -13
- package/build/dist/Server/API/BaseAPI.js.map +1 -1
- package/build/dist/Server/API/UserCallAPI.js +42 -38
- package/build/dist/Server/API/UserCallAPI.js.map +1 -1
- package/build/dist/Server/API/UserEmailAPI.js +42 -38
- package/build/dist/Server/API/UserEmailAPI.js.map +1 -1
- package/build/dist/Server/API/UserIncomingCallNumberAPI.js +37 -32
- package/build/dist/Server/API/UserIncomingCallNumberAPI.js.map +1 -1
- package/build/dist/Server/API/UserNotificationMethodAdminAPI.js +341 -0
- package/build/dist/Server/API/UserNotificationMethodAdminAPI.js.map +1 -0
- package/build/dist/Server/API/UserPushAPI.js +95 -2
- package/build/dist/Server/API/UserPushAPI.js.map +1 -1
- package/build/dist/Server/API/UserSmsAPI.js +42 -38
- package/build/dist/Server/API/UserSmsAPI.js.map +1 -1
- package/build/dist/Server/API/UserWhatsAppAPI.js +42 -40
- package/build/dist/Server/API/UserWhatsAppAPI.js.map +1 -1
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1787142779538-MigrationName.js +89 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1787142779538-MigrationName.js.map +1 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1787156982416-MigrationName.js +12 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1787156982416-MigrationName.js.map +1 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1787700000000-FixTotpOtpUrlAlgorithm.js +40 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1787700000000-FixTotpOtpUrlAlgorithm.js.map +1 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/Index.js +6 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/Index.js.map +1 -1
- package/build/dist/Server/Middleware/VerificationCodeRateLimit.js +393 -0
- package/build/dist/Server/Middleware/VerificationCodeRateLimit.js.map +1 -0
- package/build/dist/Server/Services/AnalyticsDatabaseService.js +136 -0
- package/build/dist/Server/Services/AnalyticsDatabaseService.js.map +1 -1
- package/build/dist/Server/Services/DatabaseService.js +74 -0
- package/build/dist/Server/Services/DatabaseService.js.map +1 -1
- package/build/dist/Server/Services/LogAggregationService.js +5 -0
- package/build/dist/Server/Services/LogAggregationService.js.map +1 -1
- package/build/dist/Server/Services/PushNotificationService.js +69 -30
- package/build/dist/Server/Services/PushNotificationService.js.map +1 -1
- package/build/dist/Server/Services/TeamMemberService.js +43 -7
- package/build/dist/Server/Services/TeamMemberService.js.map +1 -1
- package/build/dist/Server/Services/UserCallService.js +54 -22
- package/build/dist/Server/Services/UserCallService.js.map +1 -1
- package/build/dist/Server/Services/UserEmailService.js +78 -17
- package/build/dist/Server/Services/UserEmailService.js.map +1 -1
- package/build/dist/Server/Services/UserIncomingCallNumberService.js +45 -74
- package/build/dist/Server/Services/UserIncomingCallNumberService.js.map +1 -1
- package/build/dist/Server/Services/UserNotificationMethodAdminService.js +1117 -0
- package/build/dist/Server/Services/UserNotificationMethodAdminService.js.map +1 -0
- package/build/dist/Server/Services/UserNotificationRuleService.js +20 -0
- package/build/dist/Server/Services/UserNotificationRuleService.js.map +1 -1
- package/build/dist/Server/Services/UserPushService.js +77 -0
- package/build/dist/Server/Services/UserPushService.js.map +1 -1
- package/build/dist/Server/Services/UserSmsService.js +50 -17
- package/build/dist/Server/Services/UserSmsService.js.map +1 -1
- package/build/dist/Server/Services/UserWhatsAppService.js +48 -15
- package/build/dist/Server/Services/UserWhatsAppService.js.map +1 -1
- package/build/dist/Server/Types/Database/QueryHelper.js +27 -0
- package/build/dist/Server/Types/Database/QueryHelper.js.map +1 -1
- package/build/dist/Server/Utils/AnalyticsDatabase/QuerySettingsHelper.js +46 -0
- package/build/dist/Server/Utils/AnalyticsDatabase/QuerySettingsHelper.js.map +1 -1
- package/build/dist/Server/Utils/ChannelVerification.js +348 -0
- package/build/dist/Server/Utils/ChannelVerification.js.map +1 -0
- package/build/dist/Server/Utils/Monitor/Criteria/IncomingRequestCriteria.js +13 -12
- package/build/dist/Server/Utils/Monitor/Criteria/IncomingRequestCriteria.js.map +1 -1
- package/build/dist/Server/Utils/Monitor/MonitorAlert.js +20 -17
- package/build/dist/Server/Utils/Monitor/MonitorAlert.js.map +1 -1
- package/build/dist/Server/Utils/Monitor/MonitorIncident.js +17 -14
- package/build/dist/Server/Utils/Monitor/MonitorIncident.js.map +1 -1
- package/build/dist/Server/Utils/Monitor/MonitorResourceContext.js +95 -0
- package/build/dist/Server/Utils/Monitor/MonitorResourceContext.js.map +1 -0
- package/build/dist/Server/Utils/Monitor/MonitorStepResourceIdentity.js +313 -0
- package/build/dist/Server/Utils/Monitor/MonitorStepResourceIdentity.js.map +1 -0
- package/build/dist/Server/Utils/Monitor/SeriesResourceLabels.js +3 -3
- package/build/dist/Server/Utils/Monitor/SeriesResourceLinker.js +67 -26
- package/build/dist/Server/Utils/Monitor/SeriesResourceLinker.js.map +1 -1
- package/build/dist/Server/Utils/TotpAuth.js +127 -8
- package/build/dist/Server/Utils/TotpAuth.js.map +1 -1
- package/build/dist/Server/Utils/UserRegistrationToken.js +170 -0
- package/build/dist/Server/Utils/UserRegistrationToken.js.map +1 -0
- package/build/dist/Server/Utils/VerificationCode.js +120 -0
- package/build/dist/Server/Utils/VerificationCode.js.map +1 -0
- package/build/dist/Types/Email/EmailTemplateType.js +1 -0
- package/build/dist/Types/Email/EmailTemplateType.js.map +1 -1
- package/build/dist/Types/Monitor/MonitorCriteriaInstance.js +42 -21
- package/build/dist/Types/Monitor/MonitorCriteriaInstance.js.map +1 -1
- package/build/dist/Types/Monitor/Recommendation/MonitorRecommendationCatalog.js +77 -5
- package/build/dist/Types/Monitor/Recommendation/MonitorRecommendationCatalog.js.map +1 -1
- package/build/dist/Types/Monitor/Recommendation/MonitorRecommendationTypes.js +18 -6
- package/build/dist/Types/Monitor/Recommendation/MonitorRecommendationTypes.js.map +1 -1
- package/build/dist/Types/Monitor/ServiceAlertTemplates.js +1028 -0
- package/build/dist/Types/Monitor/ServiceAlertTemplates.js.map +1 -0
- package/build/dist/Types/Permission.js +33 -0
- package/build/dist/Types/Permission.js.map +1 -1
- package/build/dist/Types/PushNotification/AndroidNotificationChannel.js +27 -0
- package/build/dist/Types/PushNotification/AndroidNotificationChannel.js.map +1 -0
- package/build/dist/Types/Service/ServiceLanguage.js +96 -0
- package/build/dist/Types/Service/ServiceLanguage.js.map +1 -0
- package/build/dist/Types/Text.js +82 -17
- package/build/dist/Types/Text.js.map +1 -1
- package/build/dist/UI/Components/Button/Button.js +22 -14
- package/build/dist/UI/Components/Button/Button.js.map +1 -1
- package/build/dist/UI/Components/CodeBlock/CodeBlock.js +35 -3
- package/build/dist/UI/Components/CodeBlock/CodeBlock.js.map +1 -1
- package/build/dist/UI/Components/CodeBlock/LanguageRegistry.js +57 -0
- package/build/dist/UI/Components/CodeBlock/LanguageRegistry.js.map +1 -0
- package/build/dist/UI/Components/CommandPalette/CommandPalette.js +439 -0
- package/build/dist/UI/Components/CommandPalette/CommandPalette.js.map +1 -0
- package/build/dist/UI/Components/CommandPalette/PaletteFilter.js +135 -0
- package/build/dist/UI/Components/CommandPalette/PaletteFilter.js.map +1 -0
- package/build/dist/UI/Components/CommandPalette/PaletteRow.js +83 -0
- package/build/dist/UI/Components/CommandPalette/PaletteRow.js.map +1 -0
- package/build/dist/UI/Components/CommandPalette/RecentCommands.js +47 -0
- package/build/dist/UI/Components/CommandPalette/RecentCommands.js.map +1 -0
- package/build/dist/UI/Components/CommandPalette/Types.js +2 -0
- package/build/dist/UI/Components/CommandPalette/Types.js.map +1 -0
- package/build/dist/UI/Components/CommandPalette/UseProviderSearch.js +88 -0
- package/build/dist/UI/Components/CommandPalette/UseProviderSearch.js.map +1 -0
- package/build/dist/UI/Components/Dropdown/Dropdown.js +6 -1
- package/build/dist/UI/Components/Dropdown/Dropdown.js.map +1 -1
- package/build/dist/UI/Components/Feed/FeedItem.js +1 -1
- package/build/dist/UI/Components/Feed/FeedItem.js.map +1 -1
- package/build/dist/UI/Components/List/List.js +19 -5
- package/build/dist/UI/Components/List/List.js.map +1 -1
- package/build/dist/UI/Components/List/ListSkeleton.js +21 -0
- package/build/dist/UI/Components/List/ListSkeleton.js.map +1 -0
- package/build/dist/UI/Components/Markdown.tsx/LazyMarkdownViewer.js.map +1 -1
- package/build/dist/UI/Components/Markdown.tsx/MarkdownViewer.js +52 -25
- package/build/dist/UI/Components/Markdown.tsx/MarkdownViewer.js.map +1 -1
- package/build/dist/UI/Components/Modal/Modal.js +2 -2
- package/build/dist/UI/Components/ModelTable/BaseModelTable.js +1 -1
- package/build/dist/UI/Components/ModelTable/BaseModelTable.js.map +1 -1
- package/build/dist/UI/Components/ModelTable/useCustomFieldColumns.js +9 -2
- package/build/dist/UI/Components/ModelTable/useCustomFieldColumns.js.map +1 -1
- package/build/dist/UI/Components/MoreMenu/MoreMenu.js +32 -1
- package/build/dist/UI/Components/MoreMenu/MoreMenu.js.map +1 -1
- package/build/dist/UI/Components/Navbar/NavBar.js +5 -1
- package/build/dist/UI/Components/Navbar/NavBar.js.map +1 -1
- package/build/dist/UI/Components/OrderedStatesList/OrderedStatesList.js +29 -5
- package/build/dist/UI/Components/OrderedStatesList/OrderedStatesList.js.map +1 -1
- package/build/dist/UI/Components/SideMenu/CountModelSideMenuItem.js +23 -1
- package/build/dist/UI/Components/SideMenu/CountModelSideMenuItem.js.map +1 -1
- package/build/dist/UI/Components/SideOver/SideOver.js +23 -2
- package/build/dist/UI/Components/SideOver/SideOver.js.map +1 -1
- package/build/dist/UI/Components/Skeleton/Skeleton.js +23 -0
- package/build/dist/UI/Components/Skeleton/Skeleton.js.map +1 -0
- package/build/dist/UI/Components/Table/Table.js +35 -24
- package/build/dist/UI/Components/Table/Table.js.map +1 -1
- package/build/dist/UI/Components/Table/TableSkeletonRows.js +52 -0
- package/build/dist/UI/Components/Table/TableSkeletonRows.js.map +1 -0
- package/build/dist/UI/Components/Tabs/Tab.js +1 -1
- package/build/dist/UI/Components/Tabs/Tab.js.map +1 -1
- package/build/dist/UI/Components/Toast/Toast.js +77 -23
- package/build/dist/UI/Components/Toast/Toast.js.map +1 -1
- package/build/dist/UI/Components/Toast/ToastInit.js +37 -15
- package/build/dist/UI/Components/Toast/ToastInit.js.map +1 -1
- package/build/dist/UI/Utils/ModelAPI/ModelAPI.js +18 -9
- package/build/dist/UI/Utils/ModelAPI/ModelAPI.js.map +1 -1
- package/build/dist/UI/Utils/ModelListCache.js +126 -0
- package/build/dist/UI/Utils/ModelListCache.js.map +1 -0
- package/build/dist/UI/Utils/Project.js +24 -1
- package/build/dist/UI/Utils/Project.js.map +1 -1
- package/build/dist/Utils/API.js +6 -1
- package/build/dist/Utils/API.js.map +1 -1
- package/jest.config.json +1 -1
- package/package.json +2 -3
- package/Server/Utils/Monitor/MonitorClusterContext.ts +0 -182
- package/Tests/__mocks__/otpauth.js +0 -30
- package/build/dist/Server/Utils/Monitor/MonitorClusterContext.js +0 -141
- package/build/dist/Server/Utils/Monitor/MonitorClusterContext.js.map +0 -1
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* Android delivers a notification with the settings of the channel it names,
|
|
3
|
+
* not the settings in the payload - importance, sound and Do Not Disturb
|
|
4
|
+
* bypass are all fixed when the app creates the channel and cannot be raised
|
|
5
|
+
* afterwards. So "ring through silent mode" is expressed by picking a channel,
|
|
6
|
+
* and these ids are the contract for that choice.
|
|
7
|
+
*
|
|
8
|
+
* The app creates channels with exactly these ids in
|
|
9
|
+
* MobileApp/src/notifications/channels.ts. An id sent from here that the app
|
|
10
|
+
* never created does not fail loudly: Android falls back to a default channel
|
|
11
|
+
* and the page arrives with default settings, which for an on-call page means
|
|
12
|
+
* silently. Keep the two lists in step.
|
|
13
|
+
*/
|
|
14
|
+
var AndroidNotificationChannel;
|
|
15
|
+
(function (AndroidNotificationChannel) {
|
|
16
|
+
/*
|
|
17
|
+
* Do Not Disturb bypass, alarm audio stream, MAX importance. Reserved for
|
|
18
|
+
* on-call pages from a device whose owner opted in and granted the app Do
|
|
19
|
+
* Not Disturb access.
|
|
20
|
+
*/
|
|
21
|
+
AndroidNotificationChannel["Critical"] = "oncall_critical";
|
|
22
|
+
AndroidNotificationChannel["High"] = "oncall_high";
|
|
23
|
+
AndroidNotificationChannel["Normal"] = "oncall_normal";
|
|
24
|
+
AndroidNotificationChannel["Low"] = "oncall_low";
|
|
25
|
+
})(AndroidNotificationChannel || (AndroidNotificationChannel = {}));
|
|
26
|
+
export default AndroidNotificationChannel;
|
|
27
|
+
//# sourceMappingURL=AndroidNotificationChannel.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"AndroidNotificationChannel.js","sourceRoot":"","sources":["../../../../Types/PushNotification/AndroidNotificationChannel.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AACH,IAAK,0BAUJ;AAVD,WAAK,0BAA0B;IAC7B;;;;OAIG;IACH,0DAA4B,CAAA;IAC5B,kDAAoB,CAAA;IACpB,sDAAwB,CAAA;IACxB,gDAAkB,CAAA;AACpB,CAAC,EAVI,0BAA0B,KAA1B,0BAA0B,QAU9B;AAED,eAAe,0BAA0B,CAAC"}
|
|
@@ -0,0 +1,96 @@
|
|
|
1
|
+
import TechStack from "./TechStack";
|
|
2
|
+
export const SERVICE_LANGUAGE_DISPLAY_NAMES = {
|
|
3
|
+
java: "Java",
|
|
4
|
+
dotnet: ".NET",
|
|
5
|
+
nodejs: "Node.js",
|
|
6
|
+
python: "Python",
|
|
7
|
+
go: "Go",
|
|
8
|
+
ruby: "Ruby",
|
|
9
|
+
php: "PHP",
|
|
10
|
+
rust: "Rust",
|
|
11
|
+
erlang: "Erlang / Elixir",
|
|
12
|
+
swift: "Swift",
|
|
13
|
+
cpp: "C++",
|
|
14
|
+
webjs: "Browser JS",
|
|
15
|
+
};
|
|
16
|
+
const KNOWN_LANGUAGES = Object.keys(SERVICE_LANGUAGE_DISPLAY_NAMES);
|
|
17
|
+
/*
|
|
18
|
+
* process.runtime.name values seen in the wild → language. Checked as
|
|
19
|
+
* case-insensitive substrings, so "OpenJDK Runtime Environment" → java.
|
|
20
|
+
* Ordered: more specific markers first ("graalvm" before "go").
|
|
21
|
+
*/
|
|
22
|
+
const RUNTIME_NAME_MARKERS = [
|
|
23
|
+
{ marker: "openjdk", lang: "java" },
|
|
24
|
+
{ marker: "graalvm", lang: "java" },
|
|
25
|
+
{ marker: "java", lang: "java" },
|
|
26
|
+
{ marker: "dotnet", lang: "dotnet" },
|
|
27
|
+
{ marker: ".net", lang: "dotnet" },
|
|
28
|
+
{ marker: "node", lang: "nodejs" },
|
|
29
|
+
{ marker: "deno", lang: "nodejs" },
|
|
30
|
+
{ marker: "bun", lang: "nodejs" },
|
|
31
|
+
{ marker: "cpython", lang: "python" },
|
|
32
|
+
{ marker: "pypy", lang: "python" },
|
|
33
|
+
{ marker: "python", lang: "python" },
|
|
34
|
+
{ marker: "beam", lang: "erlang" },
|
|
35
|
+
{ marker: "erlang", lang: "erlang" },
|
|
36
|
+
{ marker: "ruby", lang: "ruby" },
|
|
37
|
+
{ marker: "php", lang: "php" },
|
|
38
|
+
{ marker: "rust", lang: "rust" },
|
|
39
|
+
{ marker: "swift", lang: "swift" },
|
|
40
|
+
{ marker: "go", lang: "go" },
|
|
41
|
+
];
|
|
42
|
+
// Manual tech-stack selections → language (JVM languages map to java).
|
|
43
|
+
const TECH_STACK_LANGUAGES = {
|
|
44
|
+
[TechStack.Java]: "java",
|
|
45
|
+
[TechStack.Kotlin]: "java",
|
|
46
|
+
[TechStack.CSharp]: "dotnet",
|
|
47
|
+
[TechStack.NodeJS]: "nodejs",
|
|
48
|
+
[TechStack.TypeScript]: "nodejs",
|
|
49
|
+
[TechStack.JavaScript]: "nodejs",
|
|
50
|
+
[TechStack.React]: "webjs",
|
|
51
|
+
[TechStack.Python]: "python",
|
|
52
|
+
[TechStack.Go]: "go",
|
|
53
|
+
[TechStack.Ruby]: "ruby",
|
|
54
|
+
[TechStack.PHP]: "php",
|
|
55
|
+
[TechStack.Rust]: "rust",
|
|
56
|
+
[TechStack.Swift]: "swift",
|
|
57
|
+
[TechStack.CPlusPlus]: "cpp",
|
|
58
|
+
};
|
|
59
|
+
/*
|
|
60
|
+
* Best-effort language for a service, in descending order of trust:
|
|
61
|
+
*
|
|
62
|
+
* 1. `telemetry.sdk.language` — stamped by the SDK itself, so it is what the
|
|
63
|
+
* process actually runs on rather than what anyone believes it runs on.
|
|
64
|
+
* 2. `process.runtime.name` — present when runtime instrumentation is on but
|
|
65
|
+
* the SDK attribute did not survive a collector hop.
|
|
66
|
+
* 3. The manually-chosen tech stack — a human's answer, used only when the
|
|
67
|
+
* telemetry has not answered.
|
|
68
|
+
*
|
|
69
|
+
* Returns null when nothing identifies the runtime. Callers must treat that as
|
|
70
|
+
* "unknown", never as a default language: recommending JVM heap monitors to a
|
|
71
|
+
* service that turns out to be Go is worse than recommending nothing.
|
|
72
|
+
*/
|
|
73
|
+
export const detectServiceLanguage = (data) => {
|
|
74
|
+
const sdkLanguage = (data.telemetrySdkLanguage || "")
|
|
75
|
+
.trim()
|
|
76
|
+
.toLowerCase();
|
|
77
|
+
if (sdkLanguage && KNOWN_LANGUAGES.includes(sdkLanguage)) {
|
|
78
|
+
return sdkLanguage;
|
|
79
|
+
}
|
|
80
|
+
const runtimeName = (data.runtimeName || "").trim().toLowerCase();
|
|
81
|
+
if (runtimeName) {
|
|
82
|
+
for (const entry of RUNTIME_NAME_MARKERS) {
|
|
83
|
+
if (runtimeName.includes(entry.marker)) {
|
|
84
|
+
return entry.lang;
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
for (const stack of data.techStack || []) {
|
|
89
|
+
const lang = TECH_STACK_LANGUAGES[stack];
|
|
90
|
+
if (lang) {
|
|
91
|
+
return lang;
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
return null;
|
|
95
|
+
};
|
|
96
|
+
//# sourceMappingURL=ServiceLanguage.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ServiceLanguage.js","sourceRoot":"","sources":["../../../../Types/Service/ServiceLanguage.ts"],"names":[],"mappings":"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"}
|
package/build/dist/Types/Text.js
CHANGED
|
@@ -183,18 +183,86 @@ class Text {
|
|
|
183
183
|
}
|
|
184
184
|
return null;
|
|
185
185
|
}
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
186
|
+
/*
|
|
187
|
+
* Cryptographically secure random bytes, or null if this runtime has no
|
|
188
|
+
* CSPRNG at all.
|
|
189
|
+
*
|
|
190
|
+
* `globalThis.crypto` is the Web Crypto API: present in every browser, and a
|
|
191
|
+
* global in Node since 19. It is used here rather than `require("crypto")`
|
|
192
|
+
* because this file is bundled into the dashboard as well as the server, so
|
|
193
|
+
* it cannot reach for a Node built-in.
|
|
194
|
+
*/
|
|
195
|
+
static getSecureRandomBytes(byteCount) {
|
|
196
|
+
const webCrypto = globalThis.crypto || {};
|
|
197
|
+
if (typeof webCrypto.getRandomValues !== "function") {
|
|
198
|
+
return null;
|
|
189
199
|
}
|
|
190
|
-
|
|
191
|
-
|
|
200
|
+
return webCrypto.getRandomValues(new Uint8Array(byteCount));
|
|
201
|
+
}
|
|
202
|
+
/*
|
|
203
|
+
* Draw `length` characters uniformly at random from `characters`.
|
|
204
|
+
*
|
|
205
|
+
* TWO properties here are load-bearing, and this used to have neither:
|
|
206
|
+
*
|
|
207
|
+
* 1. The source is a CSPRNG. Math.random is a fast non-cryptographic PRNG
|
|
208
|
+
* (xorshift128+ in V8) whose entire internal state can be recovered from
|
|
209
|
+
* a handful of observed outputs and then run forwards AND backwards. For
|
|
210
|
+
* a value used as a secret that is worse than a short code: an attacker
|
|
211
|
+
* who sees one generated value predicts the next one exactly, with no
|
|
212
|
+
* guessing at all.
|
|
213
|
+
*
|
|
214
|
+
* 2. The draw is unbiased. `byte % n` is only uniform when n divides 256.
|
|
215
|
+
* Rejection sampling discards the short tail of the byte range instead of
|
|
216
|
+
* folding it, which is what keeps a k-character code at its full
|
|
217
|
+
* k * log2(n) bits of entropy.
|
|
218
|
+
*
|
|
219
|
+
* The Math.random fallback survives ONLY for the case where no CSPRNG exists
|
|
220
|
+
* at all, which is unreachable on any supported runtime. It is there so the
|
|
221
|
+
* non-secret callers - SQL alias suffixes in QueryHelper and friends, which
|
|
222
|
+
* run on every query - cannot be broken by an exotic environment. Secrets
|
|
223
|
+
* must NOT come through here: notification-channel codes go through
|
|
224
|
+
* Common/Server/Utils/VerificationCode.ts, which throws rather than
|
|
225
|
+
* downgrading.
|
|
226
|
+
*/
|
|
227
|
+
static generateRandomString(length, characters) {
|
|
192
228
|
const charactersLength = characters.length;
|
|
193
|
-
|
|
194
|
-
|
|
229
|
+
/*
|
|
230
|
+
* The largest multiple of charactersLength that fits in a byte. Bytes at
|
|
231
|
+
* or above it are thrown away rather than folded - that is the whole of
|
|
232
|
+
* the rejection sampling, and skipping it is what biases the result.
|
|
233
|
+
*/
|
|
234
|
+
const unbiasedCeiling = 256 - (256 % charactersLength);
|
|
235
|
+
let result = "";
|
|
236
|
+
while (result.length < length) {
|
|
237
|
+
const remaining = length - result.length;
|
|
238
|
+
/*
|
|
239
|
+
* Over-draw a little so a rejected byte usually does not cost a second
|
|
240
|
+
* trip into the CSPRNG. With a 10-character alphabet fewer than 3% of
|
|
241
|
+
* bytes are rejected, so one pass almost always finishes the job.
|
|
242
|
+
*/
|
|
243
|
+
const bytes = Text.getSecureRandomBytes(remaining + Math.ceil(remaining / 4) + 4);
|
|
244
|
+
if (!bytes) {
|
|
245
|
+
while (result.length < length) {
|
|
246
|
+
result += characters.charAt(Math.floor(Math.random() * charactersLength));
|
|
247
|
+
}
|
|
248
|
+
return result;
|
|
249
|
+
}
|
|
250
|
+
for (let i = 0; i < bytes.length; i++) {
|
|
251
|
+
if (result.length >= length) {
|
|
252
|
+
break;
|
|
253
|
+
}
|
|
254
|
+
const byte = bytes[i];
|
|
255
|
+
if (byte === undefined || byte >= unbiasedCeiling) {
|
|
256
|
+
continue;
|
|
257
|
+
}
|
|
258
|
+
result += characters.charAt(byte % charactersLength);
|
|
259
|
+
}
|
|
195
260
|
}
|
|
196
261
|
return result;
|
|
197
262
|
}
|
|
263
|
+
static generateRandomText(length) {
|
|
264
|
+
return Text.generateRandomString(length || 10, "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz");
|
|
265
|
+
}
|
|
198
266
|
static trimLines(text) {
|
|
199
267
|
return text
|
|
200
268
|
.split("\n")
|
|
@@ -203,17 +271,14 @@ class Text {
|
|
|
203
271
|
})
|
|
204
272
|
.join("\n");
|
|
205
273
|
}
|
|
274
|
+
/*
|
|
275
|
+
* The alphabet used to be the string "12134567890" - eleven characters, with
|
|
276
|
+
* "1" written twice and every digit therefore NOT equally likely. Combined
|
|
277
|
+
* with Math.random that made a six-digit code both biased and predictable.
|
|
278
|
+
* Both halves are fixed in generateRandomString above.
|
|
279
|
+
*/
|
|
206
280
|
static generateRandomNumber(length) {
|
|
207
|
-
|
|
208
|
-
length = 10;
|
|
209
|
-
}
|
|
210
|
-
let result = "";
|
|
211
|
-
const characters = "12134567890";
|
|
212
|
-
const charactersLength = characters.length;
|
|
213
|
-
for (let i = 0; i < length; i++) {
|
|
214
|
-
result += characters.charAt(Math.floor(Math.random() * charactersLength));
|
|
215
|
-
}
|
|
216
|
-
return result;
|
|
281
|
+
return Text.generateRandomString(length || 10, "0123456789");
|
|
217
282
|
}
|
|
218
283
|
static convertNumberToWords(num) {
|
|
219
284
|
const words = [
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Text.js","sourceRoot":"","sources":["../../../Types/Text.ts"],"names":[],"mappings":"AAAA,MAAqB,IAAI;IAChB,MAAM,CAAC,kBAAkB,CAAC,YAAoB;QACnD,IAAI,CAAC,YAAY,EAAE,CAAC;YAClB,OAAO,YAAY,CAAC;QACtB,CAAC;QAED,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,YAAY,CAAC,EAAE,CAAC;YACjC,OAAO,YAAY,CAAC;QACtB,CAAC;QAED,MAAM,GAAG,GAAW,MAAM,CAAC,IAAI,CAAC,YAAY,EAAE,QAAQ,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;QACxE,OAAO,GAAG,CAAC;IACb,CAAC;IASD;;;;;;;;;;OAUG;IACI,MAAM,CAAC,kBAAkB,CAAC,KAAyB;QACxD,IAAI,CAAC,KAAK,EAAE,CAAC;YACX,OAAO,EAAE,CAAC;QACZ,CAAC;QAED,IAAI,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC;YACvC,OAAO,KAAK,CAAC,WAAW,EAAE,CAAC;QAC7B,CAAC;QAED,IAAI,CAAC;YACH,OAAO,IAAI,CAAC,kBAAkB,CAAC,KAAK,CAAC,CAAC;QACxC,CAAC;QAAC,WAAM,CAAC;YACP,OAAO,EAAE,CAAC;QACZ,CAAC;IACH,CAAC;IAEM,MAAM,CAAC,sBAAsB,CAAC,MAAc;QACjD,OAAO,MAAM,CAAC,YAAY,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC;IACzD,CAAC;IAEM,MAAM,CAAC,sBAAsB,CAAC,MAAc;QACjD,MAAM,QAAQ,GAAW,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;QAC9C,MAAM,UAAU,GAAW,MAAM,CAAC,YAAY,CAAC,QAAQ,GAAG,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC;QACxE,OAAO,UAAU,CAAC;IACpB,CAAC;IAEM,MAAM,CAAC,sBAAsB,CAAC,IAAY;QAC/C,IAAI,MAAM,GAAW,IAAI,CAAC,OAAO,CAAC,UAAU,EAAE,KAAK,CAAC,CAAC;QACrD,MAAM,GAAG,MAAM,CAAC,IAAI,EAAE,CAAC;QACvB,MAAM,GAAG,MAAM,CAAC,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;QACrC,OAAO,MAAM,CAAC,WAAW,EAAE,CAAC;IAC9B,CAAC;IAED;;;;;;;;;;;;;;;;OAgBG;IACI,MAAM,CAAC,wBAAwB,CAAC,IAAY;QACjD,IAAI,CAAC,IAAI,EAAE,CAAC;YACV,OAAO,IAAI,CAAC;QACd,CAAC;QAED,OAAO,CACL,IAAI;YACF,yDAAyD;aACxD,OAAO,CAAC,oBAAoB,EAAE,OAAO,CAAC;YACvC,mEAAmE;aAClE,OAAO,CAAC,uBAAuB,EAAE,OAAO,CAAC;aACzC,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC;aACpB,IAAI,EAAE,CACV,CAAC;IACJ,CAAC;IAEM,MAAM,CAAC,YAAY,CAAC,IAAY;QACrC,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC/B,OAAO,IAAI,CAAC;QACd,CAAC;QAED,MAAM,OAAO,GAAkB,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QAE/C,IAAI,UAAU,GAAW,CAAC,CAAC;QAE3B,OAAO,UAAU,GAAG,OAAO,CAAC,MAAM,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,EAAE,CAAC;YAC3D,UAAU,EAAE,CAAC;QACf,CAAC;QAED,OAAO,OAAO,CAAC,UAAU,CAAC,IAAI,IAAI,CAAC;IACrC,CAAC;IAEM,MAAM,CAAC,WAAW,CAAC,IAAY;QACpC,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC/B,OAAO,IAAI,CAAC;QACd,CAAC;QAED,MAAM,OAAO,GAAkB,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QAE/C,IAAI,SAAS,GAAW,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC;QAE3C,OAAO,SAAS,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,EAAE,CAAC;YAC7C,SAAS,EAAE,CAAC;QACd,CAAC;QAED,OAAO,OAAO,CAAC,SAAS,CAAC,IAAI,IAAI,CAAC;IACpC,CAAC;IAEM,MAAM,CAAC,sBAAsB,CAAC,IAAY,EAAE,IAAY;QAC7D,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC/B,OAAO,IAAI,CAAC;QACd,CAAC;QAED,MAAM,KAAK,GAAW,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;QACzC,IAAI,KAAK,KAAK,CAAC,CAAC,EAAE,CAAC;YACjB,OAAO,IAAI,CAAC;QACd,CAAC;QAED,OAAO,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;IAC/B,CAAC;IAEM,MAAM,CAAC,2BAA2B,CAAC,IAAY;QACpD,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC/B,OAAO,IAAI,CAAC;QACd,CAAC;QAED,IAAI,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;YAChD,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;QAC3B,CAAC;QAED,IAAI,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;YAChD,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC,EAAE,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;QAC5C,CAAC;QAED,0BAA0B;QAE1B,IAAI,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;YAChD,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;QAC3B,CAAC;QAED,IAAI,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;YAChD,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC,EAAE,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;QAC5C,CAAC;QAED,OAAO,IAAI,CAAC;IACd,CAAC;IAEM,MAAM,CAAC,oBAAoB,CAAC,IAAY,EAAE,IAAY;QAC3D,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC/B,OAAO,IAAI,CAAC;QACd,CAAC;QAED,MAAM,KAAK,GAAW,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;QAC7C,IAAI,KAAK,KAAK,CAAC,CAAC,EAAE,CAAC;YACjB,OAAO,IAAI,CAAC;QACd,CAAC;QAED,OAAO,IAAI,CAAC,SAAS,CAAC,CAAC,EAAE,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC;IAChD,CAAC;IAEM,MAAM,CAAC,QAAQ,CAAC,IAAY;QACjC,IAAI,CAAC,IAAI,IAAI,OAAO,IAAI,KAAK,QAAQ,EAAE,CAAC;YACtC,OAAO,KAAK,CAAC;QACf,CAAC;QAED,oEAAoE;QACpE,MAAM,YAAY,GAAW,IAAI,CAAC,OAAO,CAAC,qBAAqB,EAAE,EAAE,CAAC,CAAC;QAErE,iDAAiD;QACjD,IAAI,CAAC,YAAY,EAAE,CAAC;YAClB,OAAO,KAAK,CAAC;QACf,CAAC;QAED,iDAAiD;QACjD,IAAI,YAAY,CAAC,MAAM,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC;YAClC,OAAO,KAAK,CAAC;QACf,CAAC;QAED,uCAAuC;QACvC,MAAM,KAAK,GAAW,wBAAwB,CAAC;QAC/C,OAAO,KAAK,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;IAClC,CAAC;IAEM,MAAM,CAAC,wBAAwB,CAAC,IAAY;QACjD,IAAI,CAAC,IAAI,IAAI,OAAO,IAAI,KAAK,QAAQ,EAAE,CAAC;YACtC,OAAO,IAAI,CAAC;QACd,CAAC;QAED,2BAA2B;QAC3B,IAAI,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC;YAC7B,MAAM,WAAW,GAAW,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;YACrD,IAAI,WAAW,KAAK,CAAC,CAAC,EAAE,CAAC;gBACvB,OAAO,IAAI,CAAC,SAAS,CAAC,WAAW,GAAG,CAAC,CAAC,CAAC,CAAC,4BAA4B;YACtE,CAAC;QACH,CAAC;QAED,2CAA2C;QAC3C,OAAO,IAAI,CAAC;IACd,CAAC;IAEM,MAAM,CAAC,0BAA0B,CAAC,IAAY;QACnD,IAAI,CAAC,IAAI,IAAI,OAAO,IAAI,KAAK,QAAQ,EAAE,CAAC;YACtC,OAAO,IAAI,CAAC;QACd,CAAC;QAED,2BAA2B;QAC3B,IAAI,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC;YAC7B,MAAM,WAAW,GAAW,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;YAC9C,IAAI,WAAW,KAAK,CAAC,CAAC,EAAE,CAAC;gBACvB,OAAO,IAAI,CAAC,SAAS,CAAC,CAAC,EAAE,WAAW,CAAC,CAAC,CAAC,yBAAyB;YAClE,CAAC;QACH,CAAC;QAED,OAAO,IAAI,CAAC;IACd,CAAC;
|
|
1
|
+
{"version":3,"file":"Text.js","sourceRoot":"","sources":["../../../Types/Text.ts"],"names":[],"mappings":"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"}
|
|
@@ -36,21 +36,23 @@ const Button = ({ title, onClick, disabled, id, shortcutKey, type = ButtonType.B
|
|
|
36
36
|
const translatedTitle = translateString(title);
|
|
37
37
|
const translatedTooltip = translateString(tooltip);
|
|
38
38
|
useEffect(() => {
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
window.addEventListener(`keydown`, (e) => {
|
|
42
|
-
return handleKeyboard(e);
|
|
43
|
-
});
|
|
39
|
+
if (!shortcutKey) {
|
|
40
|
+
return undefined;
|
|
44
41
|
}
|
|
45
|
-
|
|
42
|
+
/*
|
|
43
|
+
* One stable function for the whole subscription. The previous version
|
|
44
|
+
* passed a fresh arrow function to removeEventListener, which never
|
|
45
|
+
* matches the one that was added — every render leaked a live keydown
|
|
46
|
+
* listener for the lifetime of the page.
|
|
47
|
+
*/
|
|
48
|
+
const onKeyDown = (event) => {
|
|
49
|
+
return handleKeyboard(event);
|
|
50
|
+
};
|
|
51
|
+
window.addEventListener(`keydown`, onKeyDown);
|
|
46
52
|
return () => {
|
|
47
|
-
|
|
48
|
-
window.removeEventListener(`keydown`, (e) => {
|
|
49
|
-
return handleKeyboard(e);
|
|
50
|
-
});
|
|
51
|
-
}
|
|
53
|
+
window.removeEventListener(`keydown`, onKeyDown);
|
|
52
54
|
};
|
|
53
|
-
});
|
|
55
|
+
}, [shortcutKey, onClick]);
|
|
54
56
|
const handleKeyboard = (event) => {
|
|
55
57
|
if (event.target instanceof HTMLBodyElement && event.key && shortcutKey) {
|
|
56
58
|
switch (event.key) {
|
|
@@ -76,13 +78,13 @@ const Button = ({ title, onClick, disabled, id, shortcutKey, type = ButtonType.B
|
|
|
76
78
|
iconClassName += ` m-1`;
|
|
77
79
|
}
|
|
78
80
|
if (buttonStyle === ButtonStyleType.LINK) {
|
|
79
|
-
buttonStyleCssClass = `text-indigo-600 hover:text-indigo-900 space-x-2`;
|
|
81
|
+
buttonStyleCssClass = `text-indigo-600 hover:text-indigo-900 space-x-2 focus:outline-none focus-visible:ring-2 focus-visible:ring-indigo-500 focus-visible:ring-offset-2`;
|
|
80
82
|
if (icon) {
|
|
81
83
|
buttonStyleCssClass += ` flex`;
|
|
82
84
|
}
|
|
83
85
|
}
|
|
84
86
|
if (buttonStyle === ButtonStyleType.SECONDARY_LINK) {
|
|
85
|
-
buttonStyleCssClass = `text-sm text-gray-400 hover:text-gray-500 space-x-2`;
|
|
87
|
+
buttonStyleCssClass = `text-sm text-gray-400 hover:text-gray-500 space-x-2 focus:outline-none focus-visible:ring-2 focus-visible:ring-indigo-500 focus-visible:ring-offset-2`;
|
|
86
88
|
if (icon) {
|
|
87
89
|
buttonStyleCssClass += ` flex`;
|
|
88
90
|
}
|
|
@@ -134,6 +136,12 @@ const Button = ({ title, onClick, disabled, id, shortcutKey, type = ButtonType.B
|
|
|
134
136
|
if (buttonStyle === ButtonStyleType.WARNING_OUTLINE) {
|
|
135
137
|
buttonStyleCssClass = `inline-flex w-full justify-center rounded-md border border-yellow-700 bg-white text-base font-medium text-yellow-700 shadow-sm ${disabled ? "" : "hover:bg-yellow-50"} focus:outline-none focus:ring-2 focus:ring-yellow-500 focus:ring-offset-2 md:mt-0 md:ml-3 md:w-auto md:text-sm`;
|
|
136
138
|
}
|
|
139
|
+
/*
|
|
140
|
+
* The one shared point every variant funnels through: hover/focus colour
|
|
141
|
+
* changes ease in instead of snapping, at the same 150ms the other
|
|
142
|
+
* primitives use.
|
|
143
|
+
*/
|
|
144
|
+
buttonStyleCssClass += ` transition-colors duration-150 ease-out`;
|
|
137
145
|
buttonStyleCssClass += ` ` + buttonSize;
|
|
138
146
|
if (className) {
|
|
139
147
|
buttonStyleCssClass += ` ` + className;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Button.js","sourceRoot":"","sources":["../../../../../UI/Components/Button/Button.tsx"],"names":[],"mappings":"AACA,OAAO,IAAkB,MAAM,cAAc,CAAC;AAE9C,OAAO,UAAU,MAAM,eAAe,CAAC;AACvC,OAAO,QAAQ,MAAM,8BAA8B,CAAC;AACpD,OAAO,iBAAiB,MAAM,yBAAyB,CAAC;AACxD,OAAO,KAAK,EAAE,EAAmC,SAAS,EAAE,MAAM,OAAO,CAAC;AAC1E,OAAO,OAAO,MAAM,oBAAoB,CAAC;AAGzC,MAAM,CAAN,IAAY,eAkBX;AAlBD,WAAY,eAAe;IACzB,2DAAO,CAAA;IACP,+DAAS,CAAA;IACT,2DAAO,CAAA;IACP,yDAAM,CAAA;IACN,yDAAM,CAAA;IACN,yEAAc,CAAA;IACd,2DAAO,CAAA;IACP,2EAAe,CAAA;IACf,2DAAO,CAAA;IACP,2EAAe,CAAA;IACf,kEAAU,CAAA;IACV,sDAAI,CAAA;IACJ,0EAAc,CAAA;IACd,sDAAI,CAAA;IACJ,sFAAoB,CAAA;IACpB,wFAAqB,CAAA;IACrB,wFAAqB,CAAA;AACvB,CAAC,EAlBW,eAAe,KAAf,eAAe,QAkB1B;AAED,MAAM,CAAN,IAAY,UAKX;AALD,WAAY,UAAU;IACpB,kCAAoB,CAAA;IACpB,iCAAmB,CAAA;IACnB,iCAAmB,CAAA;IACnB,sCAAwB,CAAA;AAC1B,CAAC,EALW,UAAU,KAAV,UAAU,QAKrB;AAiCD,MAAM,MAAM,GAAsC,CAAC,EACjD,KAAK,EACL,OAAO,EACP,QAAQ,EACR,EAAE,EACF,WAAW,EACX,IAAI,GAAG,UAAU,CAAC,MAAM,EACxB,SAAS,GAAG,KAAK,EACjB,KAAK,EACL,IAAI,EACJ,QAAQ,EACR,WAAW,GAAG,eAAe,CAAC,MAAM,EACpC,UAAU,GAAG,UAAU,CAAC,MAAM,EAC9B,UAAU,EACV,SAAS,EACT,OAAO,EACP,SAAS,EACT,YAAY,EACZ,YAAY,EACZ,YAAY,GACG,EAAgB,EAAE;IACjC,MAAM,EAAE,eAAe,EAAE,GAAG,iBAAiB,EAAE,CAAC;IAChD,MAAM,eAAe,GAAuB,eAAe,CAAC,KAAK,CAAC,CAAC;IACnE,MAAM,iBAAiB,GAAuB,eAAe,CAAC,OAAO,CAAC,CAAC;IACvE,SAAS,CAAC,GAAG,EAAE;QACb,
|
|
1
|
+
{"version":3,"file":"Button.js","sourceRoot":"","sources":["../../../../../UI/Components/Button/Button.tsx"],"names":[],"mappings":"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"}
|
|
@@ -1,6 +1,11 @@
|
|
|
1
1
|
import "highlight.js/styles/a11y-dark.css";
|
|
2
|
-
import React, { useState } from "react";
|
|
3
|
-
|
|
2
|
+
import React, { useMemo, useState, } from "react";
|
|
3
|
+
/*
|
|
4
|
+
* Trimmed highlight.js instance — lib/core plus only the languages CodeBlock
|
|
5
|
+
* callers actually pass (see the audit in LanguageRegistry.ts). Replaces
|
|
6
|
+
* react-highlight, which imported all 194 grammars (~1.5MB) eagerly.
|
|
7
|
+
*/
|
|
8
|
+
import hljs, { resolveRegisteredLanguage } from "./LanguageRegistry";
|
|
4
9
|
import Icon from "../Icon/Icon";
|
|
5
10
|
import IconProp from "../../../Types/Icon/IconProp";
|
|
6
11
|
const CodeBlock = (props) => {
|
|
@@ -18,11 +23,38 @@ const CodeBlock = (props) => {
|
|
|
18
23
|
};
|
|
19
24
|
const maxHeight = props.maxHeight || "500px";
|
|
20
25
|
const showCopyButton = props.showCopyButton !== false;
|
|
26
|
+
/*
|
|
27
|
+
* react-highlight rendered <pre><code className>…</code></pre> and then ran
|
|
28
|
+
* hljs.highlightBlock over the DOM after mount (reading the language from
|
|
29
|
+
* the `language-*` class and adding the theme's `hljs` class). We keep that
|
|
30
|
+
* exact DOM shape but highlight synchronously: registered language → hljs
|
|
31
|
+
* token markup (hljs.highlight escapes the source before wrapping it in
|
|
32
|
+
* spans, so the HTML is safe to inject); unregistered language or a
|
|
33
|
+
* ReactElement child → plain React-escaped rendering. hljs is never called
|
|
34
|
+
* with an unknown language, so it never logs lookup warnings.
|
|
35
|
+
*/
|
|
36
|
+
const registeredLanguage = typeof props.code === "string"
|
|
37
|
+
? resolveRegisteredLanguage(props.language)
|
|
38
|
+
: null;
|
|
39
|
+
const highlightedHtml = useMemo(() => {
|
|
40
|
+
if (typeof props.code !== "string" || !registeredLanguage) {
|
|
41
|
+
return null;
|
|
42
|
+
}
|
|
43
|
+
return hljs.highlight(props.code, {
|
|
44
|
+
language: registeredLanguage,
|
|
45
|
+
ignoreIllegals: true,
|
|
46
|
+
}).value;
|
|
47
|
+
}, [props.code, registeredLanguage]);
|
|
48
|
+
/*
|
|
49
|
+
* `hljs` carries the a11y-dark theme background; react-highlight added it
|
|
50
|
+
* post-mount, we add it up front so there is no unstyled first paint.
|
|
51
|
+
*/
|
|
52
|
+
const codeClassName = `hljs p-4 language-${props.language} text-sm leading-relaxed`;
|
|
21
53
|
return (React.createElement("div", { className: "relative group" },
|
|
22
54
|
showCopyButton && typeof props.code === "string" && (React.createElement("button", { onClick: handleCopy, className: "absolute top-2 right-2 p-2 rounded-md bg-gray-700 hover:bg-gray-600 text-gray-300 hover:text-white transition-all opacity-70 hover:opacity-100 focus-visible:opacity-100 group-hover:opacity-100 z-10", title: copied ? "Copied!" : "Copy to clipboard", "aria-label": copied ? "Copied" : "Copy to clipboard", type: "button" },
|
|
23
55
|
React.createElement(Icon, { icon: copied ? IconProp.Check : IconProp.Copy, className: "h-4 w-4" }))),
|
|
24
56
|
React.createElement("div", { className: "overflow-auto rounded-lg border border-gray-700", style: { maxHeight: maxHeight } },
|
|
25
|
-
React.createElement(
|
|
57
|
+
React.createElement("pre", null, highlightedHtml !== null ? (React.createElement("code", { className: codeClassName, dangerouslySetInnerHTML: { __html: highlightedHtml } })) : (React.createElement("code", { className: codeClassName }, props.code))))));
|
|
26
58
|
};
|
|
27
59
|
export default CodeBlock;
|
|
28
60
|
//# sourceMappingURL=CodeBlock.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CodeBlock.js","sourceRoot":"","sources":["../../../../../UI/Components/CodeBlock/CodeBlock.tsx"],"names":[],"mappings":"AAAA,OAAO,mCAAmC,CAAC;AAC3C,OAAO,KAAK,EAAE,
|
|
1
|
+
{"version":3,"file":"CodeBlock.js","sourceRoot":"","sources":["../../../../../UI/Components/CodeBlock/CodeBlock.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
import hljs from "highlight.js/lib/core";
|
|
2
|
+
import bash from "highlight.js/lib/languages/bash";
|
|
3
|
+
import cpp from "highlight.js/lib/languages/cpp";
|
|
4
|
+
import csharp from "highlight.js/lib/languages/csharp";
|
|
5
|
+
import css from "highlight.js/lib/languages/css";
|
|
6
|
+
import dockerfile from "highlight.js/lib/languages/dockerfile";
|
|
7
|
+
import elixir from "highlight.js/lib/languages/elixir";
|
|
8
|
+
import go from "highlight.js/lib/languages/go";
|
|
9
|
+
import javascript from "highlight.js/lib/languages/javascript";
|
|
10
|
+
import json from "highlight.js/lib/languages/json";
|
|
11
|
+
import markdown from "highlight.js/lib/languages/markdown";
|
|
12
|
+
import php from "highlight.js/lib/languages/php";
|
|
13
|
+
import plaintext from "highlight.js/lib/languages/plaintext";
|
|
14
|
+
import python from "highlight.js/lib/languages/python";
|
|
15
|
+
import ruby from "highlight.js/lib/languages/ruby";
|
|
16
|
+
import rust from "highlight.js/lib/languages/rust";
|
|
17
|
+
import shell from "highlight.js/lib/languages/shell";
|
|
18
|
+
import sql from "highlight.js/lib/languages/sql";
|
|
19
|
+
import swift from "highlight.js/lib/languages/swift";
|
|
20
|
+
import typescript from "highlight.js/lib/languages/typescript";
|
|
21
|
+
import xml from "highlight.js/lib/languages/xml";
|
|
22
|
+
import yaml from "highlight.js/lib/languages/yaml";
|
|
23
|
+
hljs.registerLanguage("bash", bash);
|
|
24
|
+
hljs.registerLanguage("cpp", cpp);
|
|
25
|
+
hljs.registerLanguage("csharp", csharp);
|
|
26
|
+
hljs.registerLanguage("css", css);
|
|
27
|
+
hljs.registerLanguage("dockerfile", dockerfile);
|
|
28
|
+
hljs.registerLanguage("elixir", elixir);
|
|
29
|
+
hljs.registerLanguage("go", go);
|
|
30
|
+
hljs.registerLanguage("javascript", javascript);
|
|
31
|
+
hljs.registerLanguage("json", json);
|
|
32
|
+
hljs.registerLanguage("markdown", markdown);
|
|
33
|
+
hljs.registerLanguage("php", php);
|
|
34
|
+
hljs.registerLanguage("plaintext", plaintext);
|
|
35
|
+
hljs.registerLanguage("python", python);
|
|
36
|
+
hljs.registerLanguage("ruby", ruby);
|
|
37
|
+
hljs.registerLanguage("rust", rust);
|
|
38
|
+
hljs.registerLanguage("shell", shell);
|
|
39
|
+
hljs.registerLanguage("sql", sql);
|
|
40
|
+
hljs.registerLanguage("swift", swift);
|
|
41
|
+
hljs.registerLanguage("typescript", typescript);
|
|
42
|
+
hljs.registerLanguage("xml", xml);
|
|
43
|
+
hljs.registerLanguage("yaml", yaml);
|
|
44
|
+
/*
|
|
45
|
+
* Maps a caller-supplied language string to a name highlight.js can actually
|
|
46
|
+
* highlight with, or null when the language (or one of its aliases) is not
|
|
47
|
+
* registered above. Callers must treat null as "render plain text".
|
|
48
|
+
*/
|
|
49
|
+
export const resolveRegisteredLanguage = (language) => {
|
|
50
|
+
const normalized = language.trim().toLowerCase();
|
|
51
|
+
if (!normalized) {
|
|
52
|
+
return null;
|
|
53
|
+
}
|
|
54
|
+
return hljs.getLanguage(normalized) ? normalized : null;
|
|
55
|
+
};
|
|
56
|
+
export default hljs;
|
|
57
|
+
//# sourceMappingURL=LanguageRegistry.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"LanguageRegistry.js","sourceRoot":"","sources":["../../../../../UI/Components/CodeBlock/LanguageRegistry.ts"],"names":[],"mappings":"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"}
|