From 0f68f1237c2ac26a4cb3c3e8c45bb93c85900492 Mon Sep 17 00:00:00 2001 From: John Obelenus Date: Wed, 14 Jan 2026 09:20:39 -0500 Subject: [PATCH] Upgrading linting from eslint v8 to v9, get everything back working, and in vscode --- BUCK | 1 - app/auth-portal/.eslintrc.cjs | 3 - app/auth-portal/.eslintrc.js | 9 + app/auth-portal/BUCK | 3 +- app/auth-portal/eslint.config.ts | 239 + app/auth-portal/package.json | 28 +- .../src/pages/WorkspaceAuthTokensPage.vue | 2 +- app/auth-portal/src/shims.d.ts | 14 +- app/docs/eslint.config.ts | 32 + app/docs/package.json | 17 +- app/web/.eslintignore | 3 - app/web/.eslintrc.cjs | 28 - app/web/.eslintrc.js | 9 + app/web/.prettierrc.cjs | 1 + app/web/BUCK | 5 +- app/web/README.md | 53 +- app/web/eslint.config.ts | 247 + app/web/package.json | 35 +- app/web/src/App.vue | 41 +- app/web/src/api/sdf/dal/component.ts | 24 +- app/web/src/api/sdf/dal/edit_field.ts | 5 +- app/web/src/api/sdf/dal/func.ts | 35 +- app/web/src/api/sdf/dal/schema.ts | 30 +- app/web/src/api/sdf/dal/views.ts | 8 +- .../src/components/AbandonChangeSetModal.vue | 12 +- app/web/src/components/Actions/ActionCard.vue | 100 +- .../components/Actions/ActionRunnerCard.vue | 29 +- .../components/Actions/ActionRunnerCardV2.vue | 34 +- .../Actions/ActionRunnerDetails.vue | 6 +- .../src/components/Actions/ActionWidget.vue | 34 +- .../src/components/Actions/ActionsList.vue | 62 +- .../components/Actions/ConfirmHoldModal.vue | 19 +- .../components/Actions/FuncRunTabGroup.vue | 12 +- .../AdminDashboard/ValidateSnapshot.vue | 19 +- .../AdminDashboard/WorkspaceAdmin.vue | 169 +- .../src/components/ApplyChangeSetButton.vue | 26 +- app/web/src/components/ApplyHistoryItem.vue | 34 +- app/web/src/components/ApprovalFlowModal.vue | 23 +- .../src/components/ApprovalPendingModal.vue | 7 +- .../components/ApprovalPendingModalCard.vue | 14 +- .../src/components/AssetActionsDetails.vue | 14 +- app/web/src/components/AssetCard.vue | 81 +- .../src/components/AssetContributeModal.vue | 34 +- .../components/AssetDetailIntrinsicInput.vue | 65 +- app/web/src/components/AssetDetailsPanel.vue | 204 +- app/web/src/components/AssetDiffDetails.vue | 17 +- app/web/src/components/AssetEditor.vue | 37 +- app/web/src/components/AssetEditorHeader.vue | 32 +- .../components/AssetFuncAttachDropdown.vue | 6 +- .../src/components/AssetFuncAttachModal.vue | 154 +- app/web/src/components/AssetFuncListPanel.vue | 19 +- app/web/src/components/AssetListItem.vue | 26 +- app/web/src/components/AssetListPanel.vue | 63 +- app/web/src/components/AssetNameModal.vue | 4 +- app/web/src/components/AuditLogCell.vue | 10 +- app/web/src/components/AuditLogDrawer.vue | 6 +- app/web/src/components/AuditLogHeader.vue | 41 +- .../src/components/CachedAppNotification.vue | 10 +- app/web/src/components/ChangeCard.vue | 23 +- .../src/components/ChangesPanelHistory.vue | 32 +- .../ChangesPanelHistorySubpanelTab.vue | 4 +- .../src/components/ChangesPanelProposed.vue | 27 +- .../src/components/ChangesetRenameModal.vue | 42 +- app/web/src/components/CodeEditor.vue | 86 +- app/web/src/components/CodeViewer.vue | 51 +- .../src/components/ComponentDetailsCode.vue | 18 +- .../components/ComponentDetailsManagement.vue | 48 +- .../components/ComponentDetailsResource.vue | 44 +- app/web/src/components/Connection.vue | 33 +- app/web/src/components/ConnectionEndCard.vue | 17 +- app/web/src/components/CustomizeTabs.vue | 3 +- app/web/src/components/DebugNavbar.vue | 9 +- .../src/components/DetailsPanelMenuIcon.vue | 7 +- .../src/components/DetailsPanelTimestamps.vue | 38 +- app/web/src/components/EdgeDetailsPanel.vue | 59 +- app/web/src/components/EmptyStateCard.vue | 8 +- app/web/src/components/EmptyStateIcon.vue | 4 +- .../components/FuncEditor/ActionDetails.vue | 13 +- .../FuncEditor/AttributeBindings.vue | 80 +- .../FuncEditor/AttributeBindingsModal.vue | 101 +- .../FuncEditor/AuthenticationDetails.vue | 13 +- .../FuncEditor/CodeGenerationDetails.vue | 11 +- .../components/FuncEditor/FuncArguments.vue | 25 +- .../src/components/FuncEditor/FuncDetails.vue | 85 +- .../src/components/FuncEditor/FuncEditor.vue | 24 +- .../src/components/FuncEditor/FuncList.vue | 11 +- .../src/components/FuncEditor/FuncTest.vue | 236 +- .../FuncEditor/FuncTestSelector.vue | 47 +- .../src/components/FuncEditor/LeafInputs.vue | 33 +- .../FuncEditor/QualificationDetails.vue | 11 +- .../components/FuncEditor/RunOnSelector.vue | 14 +- app/web/src/components/FuncEditor/utils.ts | 11 +- .../Management/ManagementHistoryCard.vue | 29 +- .../Management/ManagementHistoryList.vue | 6 +- .../src/components/ManagementRunPrototype.vue | 50 +- .../ModelingDiagram/diagram_types.ts | 94 +- app/web/src/components/NodeSkeleton.vue | 20 +- app/web/src/components/Popover.vue | 25 +- .../components/RealtimeStatusPageState.vue | 14 +- app/web/src/components/RightPanelDrawer.vue | 5 +- app/web/src/components/SelectMenu.vue | 85 +- app/web/src/components/SiArrow.vue | 6 +- app/web/src/components/SiCheckBox.vue | 29 +- app/web/src/components/SiChip.vue | 10 +- app/web/src/components/SiFuncListItem.vue | 4 +- app/web/src/components/SiNodeSprite.vue | 5 +- app/web/src/components/SiProfileButton.vue | 4 +- app/web/src/components/SiSelect.vue | 33 +- app/web/src/components/SiSidebarContent.vue | 4 +- app/web/src/components/SiValidation.vue | 7 +- .../src/components/SidebarSubpanelTitle.vue | 17 +- .../src/components/StatusIndicatorIcon.vue | 91 +- .../Workspace/WorkspaceAdminDashboard.vue | 28 +- .../Workspace/WorkspaceAuditLog.vue | 86 +- .../Workspace/WorkspaceCustomizeAssets.vue | 83 +- .../Workspace/WorkspaceCustomizeModules.vue | 20 +- .../Workspace/WorkspaceDevDashboard.vue | 39 +- .../WorkspaceCustomizeEmptyState.vue | 12 +- .../src/components/WorkspaceExportModal.vue | 29 +- .../src/components/WorkspaceImportModal.vue | 145 +- .../components/WorkspaceIntegrationsModal.vue | 6 +- app/web/src/components/layout/AppLayout.vue | 3 +- .../layout/navbar/ChangeSetPanel.vue | 58 +- .../layout/navbar/Collaborators.vue | 74 +- .../src/components/layout/navbar/Navbar.vue | 6 +- .../components/layout/navbar/NavbarButton.vue | 5 +- .../layout/navbar/NavbarPanelCenter.vue | 4 +- .../layout/navbar/NavbarPanelLeft.vue | 25 +- .../layout/navbar/NavbarPanelRight.vue | 10 +- .../layout/navbar/NavbarThemeSwitcher.vue | 14 +- .../layout/navbar/Notifications.vue | 28 +- .../layout/navbar/ProfileButton.vue | 60 +- .../src/components/layout/navbar/UserCard.vue | 15 +- .../src/components/layout/navbar/UserIcon.vue | 15 +- .../layout/navbar/WorkspaceSettingsMenu.vue | 3 +- .../navbar/WorkspaceSettingsMenuItems.vue | 49 +- .../components/modules/ModuleDetailsPanel.vue | 13 +- .../src/components/modules/ModuleDisplay.vue | 139 +- app/web/src/components/modules/ModuleList.vue | 18 +- .../src/components/modules/ModuleListItem.vue | 4 +- .../components/modules/ModuleListPanel.vue | 29 +- .../toasts/ApprovalFlowCancelled.vue | 4 +- .../components/toasts/ComponentUpgrading.vue | 4 +- .../components/toasts/CreatingTemplate.vue | 32 +- .../components/toasts/FiveHundredError.vue | 14 +- .../src/components/toasts/MaintenanceMode.vue | 11 +- app/web/src/components/toasts/MovedToHead.vue | 9 +- .../src/components/toasts/RebaseOnBase.vue | 4 +- .../src/components/toasts/SecretUpdate.vue | 4 +- .../components/toasts/UnscheduledDowntime.vue | 15 +- app/web/src/main.ts | 29 +- app/web/src/mead-hall/ActionCard.vue | 78 +- app/web/src/mead-hall/ActionCardLayout.vue | 9 +- app/web/src/mead-hall/ActionHistoryCard.vue | 12 +- app/web/src/mead-hall/ActionWidget.vue | 40 +- app/web/src/mead-hall/ActionsList.vue | 67 +- app/web/src/newhotness/ActionCard.vue | 52 +- app/web/src/newhotness/ActionCardLayout.vue | 8 +- app/web/src/newhotness/ActionPills.vue | 19 +- .../src/newhotness/ActionQueueList.test.ts | 15 +- app/web/src/newhotness/ActionQueueList.vue | 49 +- .../newhotness/ActionQueueListItem.test.ts | 12 +- .../src/newhotness/ActionQueueListItem.vue | 53 +- app/web/src/newhotness/ActionWidget.vue | 13 +- app/web/src/newhotness/ActionsPanel.vue | 20 +- app/web/src/newhotness/AddComponentModal.vue | 224 +- .../newhotness/AddComponentModalListRow.vue | 56 +- app/web/src/newhotness/AddViewModal.vue | 32 +- .../src/newhotness/ApplyChangeSetButton.vue | 18 +- .../src/newhotness/ApplyChangeSetModal.vue | 67 +- app/web/src/newhotness/ApprovalFlow.vue | 125 +- app/web/src/newhotness/AttributePanel.test.ts | 125 +- app/web/src/newhotness/AttributePanel.vue | 232 +- app/web/src/newhotness/CodeEditorModal.vue | 29 +- app/web/src/newhotness/CodePanel.vue | 13 +- app/web/src/newhotness/ComponentCard.vue | 32 +- .../src/newhotness/ComponentContextMenu.vue | 118 +- .../src/newhotness/ComponentDebugPanel.vue | 297 +- app/web/src/newhotness/ComponentDetails.vue | 387 +- .../src/newhotness/ComponentFuncRunList.vue | 65 +- app/web/src/newhotness/ComponentHistory.vue | 158 +- .../src/newhotness/ComponentImportModal.vue | 5 +- app/web/src/newhotness/ComponentListItem.vue | 42 +- .../ComponentTileQualificationStatus.vue | 30 +- app/web/src/newhotness/ConfirmHoldModal.vue | 26 +- app/web/src/newhotness/ConnectionsPanel.vue | 27 +- app/web/src/newhotness/CopyableTextBlock.vue | 30 +- .../newhotness/DefaultSubscriptionsButton.vue | 9 +- app/web/src/newhotness/DeleteModal.vue | 42 +- app/web/src/newhotness/DiffPanel.vue | 7 +- app/web/src/newhotness/DocumentationPanel.vue | 16 +- .../newhotness/DuplicateComponentsModal.vue | 6 +- app/web/src/newhotness/EditViewModal.vue | 54 +- app/web/src/newhotness/EmptyState.vue | 18 +- app/web/src/newhotness/EraseModal.vue | 31 +- app/web/src/newhotness/Explore.vue | 476 +- app/web/src/newhotness/ExploreModeTile.vue | 4 +- app/web/src/newhotness/FuncRunCard.vue | 46 +- app/web/src/newhotness/FuncRunDetails.vue | 90 +- app/web/src/newhotness/FuncRunList.vue | 56 +- app/web/src/newhotness/FuncRunStatusBadge.vue | 24 +- .../src/newhotness/LatestFuncRunDetails.vue | 67 +- app/web/src/newhotness/Lobby.vue | 25 +- .../newhotness/ManagementConnectionCard.vue | 21 +- .../newhotness/ManagementConnectionInput.vue | 24 +- .../newhotness/ManagementConnectionsList.vue | 13 +- app/web/src/newhotness/ManagementFuncCard.vue | 30 +- app/web/src/newhotness/ManagementPanel.vue | 44 +- app/web/src/newhotness/Map.vue | 327 +- app/web/src/newhotness/MarkdownRender.vue | 10 +- app/web/src/newhotness/MiniMap.vue | 66 +- .../MinimizedComponentQualificationStatus.vue | 21 +- app/web/src/newhotness/Onboarding.vue | 842 +-- .../newhotness/OnboardingCollapsingArea.vue | 6 +- .../src/newhotness/OnboardingProviderTile.vue | 5 +- .../src/newhotness/OnboardingStepBlock.vue | 10 +- app/web/src/newhotness/PolicyDetail.vue | 47 +- app/web/src/newhotness/QualificationPanel.vue | 38 +- app/web/src/newhotness/QualificationView.vue | 69 +- app/web/src/newhotness/README.md | 7 +- app/web/src/newhotness/RequiredAsterisk.vue | 4 +- app/web/src/newhotness/ResourcePanel.vue | 16 +- .../src/newhotness/ResourceValuesPanel.vue | 57 +- app/web/src/newhotness/Review.vue | 307 +- .../src/newhotness/ReviewAttributeItem.vue | 43 +- .../ReviewAttributeItemSourceAndValue.vue | 19 +- .../src/newhotness/ScrollingOutputLine.vue | 17 +- app/web/src/newhotness/ShortcutModal.vue | 66 +- app/web/src/newhotness/StatusPanel.vue | 152 +- app/web/src/newhotness/StatusPanelIcon.vue | 13 +- app/web/src/newhotness/WelcomeBanner.vue | 39 +- app/web/src/newhotness/Workspace.vue | 269 +- .../newhotness/api_composables/component.ts | 11 +- .../newhotness/api_composables/func_run.ts | 31 +- .../src/newhotness/api_composables/index.ts | 71 +- .../management_func_job_state.ts | 7 +- .../composables/useComponentDeletion.ts | 20 +- .../explore_grid/AttributePanelBulk.vue | 236 +- .../newhotness/explore_grid/ExploreGrid.vue | 49 +- .../explore_grid/ExploreGridRow.vue | 190 +- .../explore_grid/ExploreGridTile.vue | 97 +- .../layout_components/AttrComponentList.vue | 29 +- .../layout_components/AttrValue.vue | 17 +- .../AttributeChildLayout.vue | 14 +- .../layout_components/AttributeInput.test.ts | 34 +- .../layout_components/AttributeInput.vue | 565 +- .../AttributeInputPossibleConnection.vue | 35 +- .../AttributeInputRequiredProperty.vue | 7 +- .../layout_components/CollapsingFlexItem.vue | 36 +- .../layout_components/CollapsingGridItem.vue | 25 +- .../layout_components/ComponentAttribute.vue | 229 +- .../ComponentSecretAttribute.test.ts | 11 +- .../ComponentSecretAttribute.vue | 131 +- .../layout_components/ConfirmModal.vue | 13 +- .../layout_components/ConnectionLayout.vue | 54 +- .../DefaultSubscriptionsEmptyState.vue | 39 +- .../DetailsPanelMenuIcon.vue | 5 +- .../layout_components/FilterTile.vue | 20 +- .../FuncRunDetailsLayout.vue | 59 +- .../layout_components/FuncRunListLayout.vue | 33 +- .../GridItemWithLiveHeader.vue | 21 +- .../InstructiveVormInput.vue | 14 +- .../layout_components/PolicyList.vue | 29 +- .../layout_components/SecretInput.vue | 24 +- .../layout_components/ShimmeringTextLine.vue | 9 +- .../layout_components/StatusBox.vue | 28 +- .../src/newhotness/logic_composables/async.ts | 20 +- .../logic_composables/attribute_tree.ts | 33 +- .../logic_composables/change_set.ts | 19 +- .../component_actions.test.ts | 21 +- .../logic_composables/component_actions.ts | 54 +- .../logic_composables/connections.ts | 101 +- .../newhotness/logic_composables/controls.ts | 4 +- .../default_subscriptions.ts | 5 +- .../newhotness/logic_composables/dom_funcs.ts | 5 +- .../newhotness/logic_composables/emitters.ts | 39 +- .../logic_composables/management.ts | 25 +- .../newhotness/logic_composables/mock_data.ts | 4 +- .../logic_composables/navigation_stack.ts | 7 +- .../newhotness/logic_composables/search.ts | 46 +- .../newhotness/logic_composables/tokens.ts | 4 +- .../newhotness/logic_composables/upgrade.ts | 10 +- .../src/newhotness/logic_composables/view.ts | 33 +- .../logic_composables/watched_form.ts | 22 +- .../newhotness/nav/AbandonChangeSetModal.vue | 27 +- .../newhotness/nav/ApprovalPendingModal.vue | 3 +- .../nav/ApprovalPendingModalCard.vue | 6 +- app/web/src/newhotness/nav/ChangeSetPanel.vue | 60 +- app/web/src/newhotness/nav/Collaborators.vue | 67 +- .../src/newhotness/nav/NavbarPanelCenter.vue | 21 +- .../src/newhotness/nav/NavbarPanelLeft.vue | 41 +- .../src/newhotness/nav/NavbarPanelRight.vue | 37 +- app/web/src/newhotness/nav/Notifications.vue | 47 +- app/web/src/newhotness/nav/ProfileButton.vue | 60 +- .../src/newhotness/nav/ToastApplyFailed.vue | 11 +- app/web/src/newhotness/nav/UserCard.vue | 12 +- app/web/src/newhotness/nav/UserIcon.vue | 15 +- .../nav/WorkspaceIntegrationsModal.vue | 10 +- .../newhotness/nav/WorkspaceSettingsMenu.vue | 3 +- .../nav/WorkspaceSettingsMenuItems.vue | 53 +- .../skeletons/ComponentDetailsSkeleton.vue | 85 +- .../skeletons/ExploreGridSkeleton.vue | 10 +- .../skeletons/ExploreMapSkeleton.vue | 158 +- .../skeletons/ExploreRightColumnSkeleton.vue | 28 +- .../skeletons/ExploreSearchBarSkeleton.vue | 25 +- .../newhotness/skeletons/GridTileSkeleton.vue | 24 +- app/web/src/newhotness/testing/fixture1.ts | 86 +- app/web/src/newhotness/types.ts | 17 +- app/web/src/newhotness/util.ts | 41 +- app/web/src/pages/DebugPage.vue | 113 +- app/web/src/pages/HomePage.vue | 52 +- app/web/src/pages/NotFound.vue | 4 +- app/web/src/pages/OopsPage.vue | 8 +- app/web/src/pages/WorkspaceSinglePage.vue | 48 +- app/web/src/pages/auth/AuthConnectPage.vue | 16 +- app/web/src/router.ts | 38 +- app/web/src/shared/CommandBar.vue | 70 +- app/web/src/shared/command.ts | 9 +- app/web/src/store/actions.store.ts | 487 +- app/web/src/store/admin.store.ts | 32 +- app/web/src/store/apis.web.ts | 34 +- app/web/src/store/asset.store.ts | 229 +- app/web/src/store/auth.store.ts | 48 +- app/web/src/store/change_sets.store.ts | 95 +- app/web/src/store/components.store.ts | 2123 +++--- app/web/src/store/errors.ts | 14 +- app/web/src/store/feature_flags.store.ts | 30 +- app/web/src/store/func/funcs.store.ts | 311 +- app/web/src/store/func_runs.store.ts | 25 +- app/web/src/store/index.ts | 12 +- app/web/src/store/logs.store.ts | 295 +- app/web/src/store/management_runs.store.ts | 41 +- app/web/src/store/module.store.ts | 816 ++- app/web/src/store/presence.store.ts | 168 +- app/web/src/store/qualifications.store.ts | 156 +- app/web/src/store/realtime/heimdall.ts | 241 +- app/web/src/store/realtime/heimdall_inner.ts | 20 +- app/web/src/store/realtime/realtime.store.ts | 58 +- app/web/src/store/realtime/realtime_events.ts | 31 +- app/web/src/store/router.store.ts | 23 +- app/web/src/store/status.store.ts | 312 +- app/web/src/store/system_status.store.ts | 1 - app/web/src/store/views.store.ts | 1152 ++-- app/web/src/store/viz.store.ts | 11 +- app/web/src/store/workspaces.store.ts | 150 +- app/web/src/types/vue-konva.d.ts | 4 +- app/web/src/utils/defaultmap.ts | 6 +- app/web/src/utils/input_validations.ts | 4 +- app/web/src/utils/keyedDebouncer.ts | 5 +- app/web/src/utils/load_editor_ts.ts | 1 - app/web/src/utils/messageEncryption.ts | 5 +- app/web/src/utils/omit.ts | 5 +- app/web/src/utils/typescriptLinter.ts | 118 +- app/web/src/utils/typescriptLinterSnippets.ts | 11 +- app/web/src/utils/useFontLoaded.ts | 3 +- app/web/src/vite-env.d.ts | 4 + app/web/src/workers/locks.ts | 55 +- app/web/src/workers/mjolnir_queue.ts | 15 +- app/web/src/workers/shared_webworker.ts | 197 +- app/web/src/workers/types/dbinterface.ts | 261 +- .../src/workers/types/entity_kind_types.ts | 22 +- app/web/src/workers/utils.ts | 20 +- app/web/src/workers/webworker.mess.ts | 80 +- app/web/src/workers/webworker.perf.ts | 88 +- app/web/src/workers/webworker.test.ts | 176 +- app/web/src/workers/webworker.ts | 1169 +--- app/web/tsconfig.json | 15 +- app/web/vite.config.ts | 16 +- bin/auth-api/.eslintignore | 1 - bin/auth-api/.eslintrc.cjs | 15 - bin/auth-api/.eslintrc.js | 9 + bin/auth-api/BUCK | 3 +- bin/auth-api/eslint.config.ts | 249 + bin/auth-api/package.json | 21 +- bin/auth-api/src/custom-state.ts | 25 +- bin/auth-api/src/routes/auth_token.routes.ts | 4 +- bin/auth-api/src/routes/user.routes.ts | 6 +- bin/auth-api/src/routes/workspace.routes.ts | 2 +- bin/auth-api/src/services/auth.service.ts | 2 +- bin/auth-api/src/services/auth0.service.ts | 2 +- bin/auth-api/src/services/users.service.ts | 21 +- bin/auth-api/test/.eslintrc.cjs | 13 - bin/auth-api/test/auth-routes.test.ts | 283 +- bin/auth-api/test/validation-helpers.test.ts | 419 +- bin/auth-api/tsconfig.json | 7 +- bin/lang-js/.eslintignore | 4 - bin/lang-js/.eslintrc.cjs | 22 - bin/lang-js/.eslintrc.js | 9 + bin/lang-js/eslint.config.ts | 32 + bin/lang-js/package.json | 9 + bin/si-discord-bot/.eslintignore | 3 - lib/eslint-config/.eslintrc.base.js | 133 - lib/eslint-config/.eslintrc.vue.js | 68 - lib/eslint-config/BUCK | 17 - lib/eslint-config/package.json | 32 - lib/ts-lib-deno/package.json | 1 - lib/ts-lib/.eslintrc.cjs | 3 - lib/ts-lib/.eslintrc.js | 9 + lib/ts-lib/BUCK | 3 +- lib/ts-lib/eslint.config.ts | 161 + lib/ts-lib/package.json | 19 +- lib/tsconfig/tsconfig.node.json | 2 +- lib/vue-lib/.eslintrc.cjs | 3 - lib/vue-lib/.eslintrc.js | 9 + lib/vue-lib/BUCK | 3 +- lib/vue-lib/eslint.config.ts | 245 + lib/vue-lib/package.json | 25 +- .../JsonTreeExplorer/JsonTreeExplorer.vue | 2 +- .../JsonTreeExplorer/JsonTreeExplorerItem.vue | 2 +- .../src/design-system/icons/icon_set.ts | 3 +- .../src/design-system/menus/DropdownMenu.vue | 68 +- .../design-system/panels/ResizablePanel.vue | 2 +- .../src/design-system/tabs/TabGroup.vue | 50 +- lib/vue-lib/src/utils/vue_utils.ts | 2 +- pnpm-lock.yaml | 5965 +++++++++-------- pnpm-workspace.yaml | 1 - prelude-si/pnpm.bzl | 3 +- 417 files changed, 11500 insertions(+), 21022 deletions(-) delete mode 100644 app/auth-portal/.eslintrc.cjs create mode 100644 app/auth-portal/.eslintrc.js create mode 100644 app/auth-portal/eslint.config.ts create mode 100644 app/docs/eslint.config.ts delete mode 100644 app/web/.eslintignore delete mode 100644 app/web/.eslintrc.cjs create mode 100644 app/web/.eslintrc.js create mode 100644 app/web/eslint.config.ts delete mode 100644 bin/auth-api/.eslintignore delete mode 100644 bin/auth-api/.eslintrc.cjs create mode 100644 bin/auth-api/.eslintrc.js create mode 100644 bin/auth-api/eslint.config.ts delete mode 100644 bin/auth-api/test/.eslintrc.cjs delete mode 100644 bin/lang-js/.eslintignore delete mode 100644 bin/lang-js/.eslintrc.cjs create mode 100644 bin/lang-js/.eslintrc.js create mode 100644 bin/lang-js/eslint.config.ts create mode 100644 bin/lang-js/package.json delete mode 100644 bin/si-discord-bot/.eslintignore delete mode 100644 lib/eslint-config/.eslintrc.base.js delete mode 100644 lib/eslint-config/.eslintrc.vue.js delete mode 100644 lib/eslint-config/BUCK delete mode 100644 lib/eslint-config/package.json delete mode 100644 lib/ts-lib/.eslintrc.cjs create mode 100644 lib/ts-lib/.eslintrc.js create mode 100644 lib/ts-lib/eslint.config.ts delete mode 100644 lib/vue-lib/.eslintrc.cjs create mode 100644 lib/vue-lib/.eslintrc.js create mode 100644 lib/vue-lib/eslint.config.ts diff --git a/BUCK b/BUCK index d3d038e40a..a667aa22f0 100644 --- a/BUCK +++ b/BUCK @@ -106,7 +106,6 @@ pnpm_workspace( "//app/auth-portal:package.json", "//app/web:package.json", "//bin/auth-api:package.json", - "//lib/eslint-config:package.json", "//lib/ts-lib:package.json", "//lib/tsconfig:package.json", "//lib/vue-lib:package.json", diff --git a/app/auth-portal/.eslintrc.cjs b/app/auth-portal/.eslintrc.cjs deleted file mode 100644 index 2d44205b7f..0000000000 --- a/app/auth-portal/.eslintrc.cjs +++ /dev/null @@ -1,3 +0,0 @@ -module.exports = { - extends: ["@si/eslint-config/vue"], -}; diff --git a/app/auth-portal/.eslintrc.js b/app/auth-portal/.eslintrc.js new file mode 100644 index 0000000000..9fc387baac --- /dev/null +++ b/app/auth-portal/.eslintrc.js @@ -0,0 +1,9 @@ +import eslint from "@eslint/js"; +import pluginVue from "eslint-plugin-vue"; +import eslintPluginPrettierRecommended from "eslint-plugin-prettier/recommended"; + +export default [ + eslint.configs.recommended, + ...pluginVue.configs["flat/recommended"], + eslintPluginPrettierRecommended, +]; diff --git a/app/auth-portal/BUCK b/app/auth-portal/BUCK index 42e5c93b78..ae9562c79c 100644 --- a/app/auth-portal/BUCK +++ b/app/auth-portal/BUCK @@ -46,7 +46,6 @@ prod_deps_srcs = { } dev_deps_srcs = { - "lib/eslint-config": "//lib/eslint-config:src", "lib/tsconfig": "//lib/tsconfig:src", } @@ -60,7 +59,7 @@ vite_app( eslint( name = "check-lint-typescript", - srcs = [":src"] + glob([".eslint*"]), + srcs = [":src"] + glob(["*eslint*"]), prod_deps_srcs = prod_deps_srcs, dev_deps_srcs = dev_deps_srcs, ) diff --git a/app/auth-portal/eslint.config.ts b/app/auth-portal/eslint.config.ts new file mode 100644 index 0000000000..742a5d1877 --- /dev/null +++ b/app/auth-portal/eslint.config.ts @@ -0,0 +1,239 @@ +import { globalIgnores } from "eslint/config"; +import { + defineConfigWithVueTs, + vueTsConfigs, +} from "@vue/eslint-config-typescript"; +import pluginVue from "eslint-plugin-vue"; +import pluginVitest from "@vitest/eslint-plugin"; +import skipFormatting from "@vue/eslint-config-prettier/skip-formatting"; +import importPlugin from "eslint-plugin-import"; +import tselint from "typescript-eslint"; +import vueParser from "vue-eslint-parser"; +import { fileURLToPath } from "url"; +import path from "path"; + +const __filename = fileURLToPath(import.meta.url); +const __dirname = path.dirname(__filename); + +// To allow more languages other than `ts` in `.vue` files, uncomment the following lines: +// import { configureVueProject } from '@vue/eslint-config-typescript' +// configureVueProject({ scriptLangs: ['ts', 'tsx'] }) +// More info at https://github.com/vuejs/eslint-config-typescript/#advanced-setup + +export default defineConfigWithVueTs( + { + name: "app/files-to-lint", + files: ["**/*.{vue,ts,mts,tsx}"], + }, + + globalIgnores([ + "**/dist/**", + "**/dist-ssr/**", + "**/coverage/**", + "eslint.config.ts", + ]), + + ...pluginVue.configs["flat/essential"], + vueTsConfigs.recommended, + importPlugin.flatConfigs["recommended"], + tselint.configs["recommendedTypeChecked"], + { + languageOptions: { + parser: vueParser, + parserOptions: { + parser: "@typescript-eslint/parser", + // project: [`${__dirname}/tsconfig.json`], + tsconfigRootDir: __dirname, + // project: [`./tsconfig.json`, `./tsconfig.node.json`], + // parserOptions: { + // ecmaVersion: "latest", + // sourceType: "module", + // // project: ["./tsconfig.json", "./tsconfig.node.json"], + // // TODO: figure our correct settings here + // // project: [`${__dirname}/tsconfig.json`], + // }, + }, + }, + }, + + { + ...pluginVitest.configs.recommended, + files: ["src/**/__tests__/*"], + }, + + skipFormatting, + + { + settings: { + "import/resolver": { + node: { + extensions: [".js", ".jsx", ".ts", ".tsx", ".d.ts"], + }, + typescript: { + // Optional: Specify the path to your tsconfig.json if it's not in the root + project: "./tsconfig.json", + }, + }, + }, + }, + + { + rules: { + // dont want this + "@typescript-eslint/consistent-type-imports": 0, + "import/named": 0, + + // warning on this because we have some shenanigans where it is a promise but a literal `await` is not present + "@typescript-eslint/require-await": "warn", + + // "prettier/prettier": "warn", + "@typescript-eslint/quotes": 0, + + // this is currently breaking, so turning it off + "@typescript-eslint/unbound-method": 0, + + // some strict rules from TS / airbnb presets to relax ----------- + camelcase: "off", + // "@typescript-eslint/ban-ts-comment": "off", + // "import/prefer-default-export": 0, + "no-plusplus": 0, + radix: 0, + "prefer-destructuring": 0, + "no-else-return": 0, // sometimes clearer even though unnecessary + "prefer-arrow-callback": 0, + "arrow-body-style": 0, + "@typescript-eslint/lines-between-class-members": 0, // often nice to group related one-liners + "max-classes-per-file": 0, // can make sense to colocate small classes + "consistent-return": 0, // often can make sense to return (undefined) early + "no-useless-return": 0, // sometimes helps clarify you are bailing early + "no-continue": 0, + "no-underscore-dangle": 0, + "no-await-in-loop": 0, + "no-lonely-if": 0, + "@typescript-eslint/no-unused-vars": [ + "warn", + { + argsIgnorePattern: "^_|^(response)$", + varsIgnorePattern: "^_|^(props|emit)$", + }, + ], + "@typescript-eslint/return-await": 0, + + // other ----------------------------------------------------- + "no-undef": 0, // handled by typescript, which is better aware of global types + // curly: ["error", "multi-line"], + // "brace-style": "error", + "max-len": [ + "warn", // just a warning since prettier will enforce + 120, + 2, + { + // bumped to 120, otherwise same as airbnb's rule but ignoring comments + ignoreUrls: true, + ignoreComments: true, + ignoreRegExpLiterals: true, + ignoreStrings: true, + ignoreTemplateLiterals: true, + }, + ], + "max-statements-per-line": ["error", { max: 1 }], + // "@typescript-eslint/no-floating-promises": "error", + + // custom plugin configs ------------------------------------------ + // make import/order understand our alias paths + // "import/order": [ + // "warn", + // { + // pathGroups: [ + // { + // pattern: "@/**", + // group: "internal", + // position: "after", + // }, + // ], + // pathGroupsExcludedImportTypes: ["internal", "external", "builtins"], + // groups: [ + // "builtin", + // "external", + // "unknown", + // "internal", + // ["sibling", "parent"], + // "index", + // "object", + // "type", + // ], + // }, + // ], + + // rules to disable for now, but will likely be turned back on -------- + // TODO: review these rules, infractions case by case, probably turn back on? + "@typescript-eslint/no-use-before-define": 0, + // "import/no-cycle": 0, + "no-param-reassign": 0, + "no-restricted-syntax": 0, + "@typescript-eslint/naming-convention": 0, + "@typescript-eslint/no-shadow": 0, + "guard-for-in": 0, + + // some rules to downgrade to warning while developing -------------------- + // useful so things dont crash when code is temporarily commented out + "no-console": "warn", + "@typescript-eslint/no-empty-function": "warn", + "no-debugger": "warn", + "no-alert": "warn", + "no-empty": "warn", + + // good to warn people + "@typescript-eslint/no-base-to-string": "warn", + "@typescript-eslint/restrict-template-expressions": "warn", + // dont want to error here because we often have async funcs used with other lib calls that dont await, but they do not have to await! + "@typescript-eslint/no-misused-promises": "warn", + + // turning this off, b/c our instances are actually for meaning & clarity + "@typescript-eslint/no-redundant-type-constituents": 0, + + // rules that we want to warn, but disable agressive auto-fixing ----------- + "prefer-const": 0, + "no-unreachable": 0, // handy when you return early or throw an error while debugging + // unreachable code will be removed by default, so we disable autofix, but leave a warning + // "no-autofix/no-unreachable": 1, + // useful while debugging and commenting things out, otherwise gets automatically changed from let to const + // "no-autofix/prefer-const": "warn", + + "vue/block-order": [ + "error", + { + order: [ + "template", + "script[setup]", + "script:not([setup])", // necessary for default exports to not get hoisted below imports in setup block + "style:not([scoped])", + "style[scoped]", + ], + }, + ], + "vue/no-undef-components": [ + "error", + { + ignorePatterns: [ + "v-.*", // vue-konva requires global registration :( will hopefully fix soon! + "router-(view|link)", // vue router is fairly standard to use via global registration + ], + }, + ], + "vue/multi-word-component-names": "off", + "vue/require-default-prop": "off", + "vue/padding-line-between-blocks": "error", + "vue/prefer-true-attribute-shorthand": "error", + "vue/eqeqeq": "error", + "vue/no-multiple-template-root": "error", + + "vue/attribute-hyphenation": ["error", "never", { ignore: [] }], + "vue/v-on-event-hyphenation": "off", + + "@typescript-eslint/ban-ts-comment": 0, + // skipping for now, but should re-enable + "@typescript-eslint/no-floating-promises": 0, + }, + }, +); diff --git a/app/auth-portal/package.json b/app/auth-portal/package.json index b3d30a6770..882fbea64e 100644 --- a/app/auth-portal/package.json +++ b/app/auth-portal/package.json @@ -8,11 +8,12 @@ "dev": "vite", "build": "vite-ssg build", "build2": "vite build", + "build:check": "vue-tsc --noEmit", "build:analyze": "RUN_BUILD_ANALYZER=1 pnpm run build", "preview": "vite preview", "lint": "eslint src --ext .ts,.js,.cjs,.vue", - "lint:strict": "pnpm run lint --max-warnings=0", - "lint:fix": "pnpm run lint --fix", + "lint:strict": "pnpm run lint --quiet", + "lint:fix": "pnpm run lint --fix --quiet", "deploy": "pnpm run build && netlify deploy --dir=dist --prod", "test": "vitest --run", "test:validation": "vitest run src/lib/validations.test.ts" @@ -29,28 +30,39 @@ "less": "^4.2.0", "local-storage-fallback": "^5.0.0", "lodash-es": "^4.17.21", - "pinia": "^2.2.4", + "pinia": "^3.0.0", "posthog-js": "^1.176.0", "vite-ssg": "^0.23.8", "vue": "^3.5.13", "vue-router": "^4.4.5" }, "devDependencies": { - "@si/eslint-config": "workspace:*", "@si/tsconfig": "workspace:*", "@types/lodash-es": "^4.17.12", "@types/node": "^18.19.59", + "@typescript-eslint/eslint-plugin": "8.47.0", + "@typescript-eslint/parser": "8.47.0", "@vitejs/plugin-vue": "^5.1.4", - "eslint": "^8.57.1", + "@vitest/eslint-plugin": "1.6.6", + "@vue/eslint-config-prettier": "10.2.0", + "@vue/eslint-config-typescript": "^14.6.0", + "eslint": "^9.39.2", + "eslint-config-prettier": "^8.5.0", + "eslint-import-resolver-typescript": "^4.4.4", + "eslint-plugin-import": "2.32.0", + "eslint-plugin-vue": "^10.6.2", "netlify-cli": "^23.1.1", + "prettier": "~2.8.4", "rollup-plugin-visualizer": "^5.12.0", - "typescript": "^5.0.4", + "typescript": "^5.9.3", + "typescript-eslint": "^8.53.0", "unplugin-icons": "^0.17.4", "vite": "^5.4.21", - "vite-plugin-checker": "^0.6.4", + "vite-plugin-checker": "^0.12.0", "vite-plugin-markdown": "^2.2.0", "vite-svg-loader": "^3.4.0", "vitest": "^3.2.4", - "vue-tsc": "^1.8.27" + "vue-eslint-parser": "^10.2.0", + "vue-tsc": "^3.2.0" } } diff --git a/app/auth-portal/src/pages/WorkspaceAuthTokensPage.vue b/app/auth-portal/src/pages/WorkspaceAuthTokensPage.vue index e80c712b49..5d0acd65c8 100644 --- a/app/auth-portal/src/pages/WorkspaceAuthTokensPage.vue +++ b/app/auth-portal/src/pages/WorkspaceAuthTokensPage.vue @@ -184,7 +184,7 @@ const listedTokens = computed(() => { return ( _.reverse( _.sortBy(_.values(authTokens.state.value), "createdAt"), - ) as Array + ) ).map((token) => { const d = new Date(token.expiresAt as unknown as string); const isExpired = d.getTime() < now.value; diff --git a/app/auth-portal/src/shims.d.ts b/app/auth-portal/src/shims.d.ts index b5d540d31f..cd7b1cf1a7 100644 --- a/app/auth-portal/src/shims.d.ts +++ b/app/auth-portal/src/shims.d.ts @@ -9,11 +9,6 @@ declare module "*.md" { // When "Mode.HTML" is requested const html: string; - // When "Mode.React" is requested. VFC could take a generic like React.VFC<{ MyComponent: TypeOfMyComponent }> - import React from "react"; - - const ReactComponent: React.VFC; - // When "Mode.Vue" is requested import { ComponentOptions, Component } from "vue"; @@ -23,12 +18,5 @@ declare module "*.md" { ) => ComponentOptions; // Modify below per your usage - export { - attributes, - toc, - html, - ReactComponent, - VueComponent, - VueComponentWith, - }; + export { attributes, toc, html, VueComponent, VueComponentWith }; } diff --git a/app/docs/eslint.config.ts b/app/docs/eslint.config.ts new file mode 100644 index 0000000000..626a82f891 --- /dev/null +++ b/app/docs/eslint.config.ts @@ -0,0 +1,32 @@ +import { globalIgnores } from "eslint/config"; +import { + defineConfigWithVueTs, + vueTsConfigs, +} from "@vue/eslint-config-typescript"; +import pluginVue from "eslint-plugin-vue"; +import pluginVitest from "@vitest/eslint-plugin"; +import skipFormatting from "@vue/eslint-config-prettier/skip-formatting"; + +// To allow more languages other than `ts` in `.vue` files, uncomment the following lines: +// import { configureVueProject } from '@vue/eslint-config-typescript' +// configureVueProject({ scriptLangs: ['ts', 'tsx'] }) +// More info at https://github.com/vuejs/eslint-config-typescript/#advanced-setup + +export default defineConfigWithVueTs( + { + name: "app/files-to-lint", + files: ["**/*.{vue,ts,mts,tsx}"], + }, + + globalIgnores(["**/dist/**", "**/dist-ssr/**", "**/coverage/**"]), + + ...pluginVue.configs["flat/essential"], + vueTsConfigs.recommended, + + { + ...pluginVitest.configs.recommended, + files: ["src/**/__tests__/*"], + }, + + skipFormatting, +); diff --git a/app/docs/package.json b/app/docs/package.json index 2f3dd8607d..31a74d74b9 100644 --- a/app/docs/package.json +++ b/app/docs/package.json @@ -11,21 +11,32 @@ }, "devDependencies": { "@braintree/sanitize-url": "^7.1.1", - "@si/eslint-config": "workspace:*", - "@types/jest": "^30.0.0", "@si/tsconfig": "workspace:*", + "@types/jest": "^30.0.0", "@types/node": "^18.19.127", + "@typescript-eslint/eslint-plugin": "8.47.0", + "@typescript-eslint/parser": "8.47.0", + "@vitest/eslint-plugin": "1.6.6", + "@vue/eslint-config-prettier": "10.2.0", + "@vue/eslint-config-typescript": "^14.6.0", "cytoscape": "^3.33.1", "cytoscape-cose-bilkent": "^4.1.0", "dayjs": "^1.11.18", "debug": "^4.3.4", - "eslint": "^8.57.1", + "eslint": "^9.39.2", + "eslint-config-prettier": "^8.5.0", + "eslint-import-resolver-typescript": "^4.4.4", + "eslint-plugin-import": "2.32.0", + "eslint-plugin-vue": "^10.6.2", "medium-zoom": "^1.1.0", "mermaid": "^11.12.0", + "prettier": "~2.8.4", "typescript": "^4.9.5", + "typescript-eslint": "^8.53.0", "vitepress": "^1.6.4", "vitepress-plugin-lightbox": "^1.0.3", "vitepress-plugin-mermaid": "^2.0.17", + "vue-eslint-parser": "^10.2.0", "widdershins": "^4.0.1" }, "dependencies": { diff --git a/app/web/.eslintignore b/app/web/.eslintignore deleted file mode 100644 index 99db336401..0000000000 --- a/app/web/.eslintignore +++ /dev/null @@ -1,3 +0,0 @@ -*.css -*.less -*.jpg \ No newline at end of file diff --git a/app/web/.eslintrc.cjs b/app/web/.eslintrc.cjs deleted file mode 100644 index 01f5ca3cee..0000000000 --- a/app/web/.eslintrc.cjs +++ /dev/null @@ -1,28 +0,0 @@ -module.exports = { - extends: ["@si/eslint-config/vue"], - rules: { - "@typescript-eslint/ban-ts-comment": 0, - // skipping for now, but should re-enable - "@typescript-eslint/no-floating-promises": 0, - }, - overrides: [ - // overrides for files at the root - which are all for config/build - { - files: ["./*", "./build-src/*"], - env: { node: true }, - rules: { - // these files often refer to dev dependencies - "import/no-extraneous-dependencies": 0, - "import/extensions": 0, - }, - }, - { - files: ["./src/newhotness/testing/*"], - env: { node: true }, - rules: { - // these files often refer to dev dependencies - "import/no-extraneous-dependencies": 0, - }, - }, - ], -}; diff --git a/app/web/.eslintrc.js b/app/web/.eslintrc.js new file mode 100644 index 0000000000..9fc387baac --- /dev/null +++ b/app/web/.eslintrc.js @@ -0,0 +1,9 @@ +import eslint from "@eslint/js"; +import pluginVue from "eslint-plugin-vue"; +import eslintPluginPrettierRecommended from "eslint-plugin-prettier/recommended"; + +export default [ + eslint.configs.recommended, + ...pluginVue.configs["flat/recommended"], + eslintPluginPrettierRecommended, +]; diff --git a/app/web/.prettierrc.cjs b/app/web/.prettierrc.cjs index 4ce72b3a05..d68b57bf8c 100644 --- a/app/web/.prettierrc.cjs +++ b/app/web/.prettierrc.cjs @@ -3,4 +3,5 @@ module.exports = { trailingComma: "all", tabWidth: 2, bracketSpacing: true, + printWidth: 120, }; diff --git a/app/web/BUCK b/app/web/BUCK index e159f1d26d..fc5adaaf1d 100644 --- a/app/web/BUCK +++ b/app/web/BUCK @@ -55,7 +55,6 @@ prod_deps_srcs = { } dev_deps_srcs = { - "lib/eslint-config": "//lib/eslint-config:src", "lib/tsconfig": "//lib/tsconfig:src", } @@ -68,7 +67,7 @@ vite_app( eslint( name = "check-lint-typescript", - srcs = [":src"] + glob([".eslint*"]), + srcs = [":src"] + glob(["*eslint*"]), prod_deps_srcs = prod_deps_srcs, dev_deps_srcs = dev_deps_srcs, ) @@ -104,7 +103,7 @@ test_suite( pnpm_task_binary( name = "fix-lint", - command = "lint:fix", + command = "lint:fix --quiet", srcs = glob(["src/**/*"]), path = "app/web", deps = [ diff --git a/app/web/README.md b/app/web/README.md index f5b1071cd9..eb2c93fb77 100644 --- a/app/web/README.md +++ b/app/web/README.md @@ -1,36 +1,43 @@ # app/web ## Project setup + ``` pnpm install ``` ### Compiles and hot-reloads for development + ``` pnpm run start ``` ### Compiles and minifies for production + ``` pnpm run build ``` ### Lint check (no fix) + ``` pnpm run lint ``` ### Type check (no fix) + ``` pnpm run build:check ``` ### Code formatting check (no fix) + ``` pnpm run fmt:check ``` ### Format code (WILL FIX) + ``` pnpm run fmt ``` @@ -40,48 +47,40 @@ pnpm run fmt This template should help get you started developing with Vue 3 and Typescript in Vite. The template uses Vue 3 ` + + - - - diff --git a/app/web/src/components/Workspace/WorkspaceAdminDashboard.vue b/app/web/src/components/Workspace/WorkspaceAdminDashboard.vue index 7960fd4334..026ae210a7 100644 --- a/app/web/src/components/Workspace/WorkspaceAdminDashboard.vue +++ b/app/web/src/components/Workspace/WorkspaceAdminDashboard.vue @@ -39,10 +39,7 @@

KILL FUNCTION EXECUTION

- +
{{ flag.name }}:
-
+
{{ flag.value }}
@@ -90,12 +75,7 @@ diff --git a/app/web/src/components/layout/navbar/Navbar.vue b/app/web/src/components/layout/navbar/Navbar.vue index c28e775253..5a36b541bc 100644 --- a/app/web/src/components/layout/navbar/Navbar.vue +++ b/app/web/src/components/layout/navbar/Navbar.vue @@ -31,11 +31,7 @@ import NavbarPanelLeft from "./NavbarPanelLeft.vue"; const workspacesStore = useWorkspacesStore(); const invalidWorkspace = computed( - () => - !!( - workspacesStore.urlSelectedWorkspaceId && - !workspacesStore.selectedWorkspace - ), + () => !!(workspacesStore.urlSelectedWorkspaceId && !workspacesStore.selectedWorkspace), ); // top bar is always dark, so this keeps the workspace and change set dropdowns looking correct diff --git a/app/web/src/components/layout/navbar/NavbarButton.vue b/app/web/src/components/layout/navbar/NavbarButton.vue index 53c0a8db1a..6bed701726 100644 --- a/app/web/src/components/layout/navbar/NavbarButton.vue +++ b/app/web/src/components/layout/navbar/NavbarButton.vue @@ -24,10 +24,7 @@ - + diff --git a/app/web/src/components/layout/navbar/NavbarPanelCenter.vue b/app/web/src/components/layout/navbar/NavbarPanelCenter.vue index 0f574602b1..961a95d213 100644 --- a/app/web/src/components/layout/navbar/NavbarPanelCenter.vue +++ b/app/web/src/components/layout/navbar/NavbarPanelCenter.vue @@ -1,7 +1,5 @@