From dc7b02d9251e2e01b4fd4f93dc0ad59de78e3b42 Mon Sep 17 00:00:00 2001 From: somebody1234 Date: Fri, 13 Dec 2024 23:38:11 +1000 Subject: [PATCH 01/15] Move some dashboard utility files to `common` package --- app/common/package.json | 15 +- app/common/src/detect.ts | 16 - app/common/src/services/Backend.ts | 64 +- .../src}/utilities/__tests__/error.test.ts | 10 +- .../src}/utilities/convertCSSUnits.ts | 2 - .../utilities/data/__tests__/array.test.ts | 28 +- .../data}/__tests__/dateTime.test.ts | 18 +- .../utilities/data/__tests__/email.test.ts} | 12 +- .../utilities/data/__tests__/fileInfo.test.ts | 10 + .../utilities/data/__tests__/iterator.test.ts | 48 +- app/common/src/utilities/data/dateTime.ts | 8 - .../src/utilities/data/email.ts} | 6 +- .../src/utilities/data}/fileInfo.ts | 4 - app/common/src/utilities/data/newtype.ts | 4 - .../src/utilities/data}/path.ts | 28 +- app/common/src/utilities/data/string.ts | 46 ++ .../src}/utilities/download.ts | 8 - app/common/src/utilities/error.ts | 147 ++++ app/common/src/utilities/functions.ts | 4 + .../src}/utilities/github.ts | 22 +- app/common/src/utilities/permissions.ts | 12 - .../integration-test/dashboard/actions/api.ts | 12 +- .../dashboard/assetPanel.spec.ts | 5 +- .../dashboard/assetSearchBar.spec.ts | 2 +- .../integration-test/dashboard/labels.spec.ts | 2 +- .../integration-test/dashboard/sort.spec.ts | 2 +- app/gui/src/dashboard/App.tsx | 279 ++++---- .../src/dashboard/authentication/cognito.ts | 166 +++-- .../AriaComponents/Checkbox/CheckboxGroup.tsx | 29 +- .../AriaComponents/Radio/RadioGroup.tsx | 66 +- .../src/dashboard/components/ColorPicker.tsx | 57 +- .../components/Devtools/EnsoDevtools.tsx | 122 ++-- .../Devtools/EnsoDevtoolsProvider.tsx | 41 +- .../dashboard/components/JSONSchemaInput.tsx | 12 +- .../src/dashboard/components/SubmitButton.tsx | 40 -- .../components/dashboard/AssetIcon.tsx | 28 +- .../components/dashboard/AssetRow.tsx | 183 +++-- .../components/dashboard/AssetSummary.tsx | 35 +- .../dashboard/DatalinkNameColumn.tsx | 42 +- .../dashboard/DirectoryNameColumn.tsx | 70 +- .../components/dashboard/FileNameColumn.tsx | 50 +- .../dashboard/components/dashboard/Label.tsx | 8 +- .../components/dashboard/Permission.tsx | 91 ++- .../dashboard/PermissionSelector.tsx | 106 ++- .../dashboard/PermissionTypeSelector.tsx | 105 ++- .../components/dashboard/ProjectIcon.tsx | 154 ++-- .../dashboard/ProjectNameColumn.tsx | 89 ++- .../components/dashboard/SecretNameColumn.tsx | 65 +- .../dashboard/components/dashboard/column.ts | 11 +- .../dashboard/column/LabelsColumn.tsx | 52 +- .../dashboard/column/ModifiedColumn.tsx | 3 +- .../dashboard/column/NameColumn.tsx | 32 +- .../dashboard/column/SharedWithColumn.tsx | 11 +- .../dashboard/column/columnUtils.ts | 27 +- app/gui/src/dashboard/events/assetEvent.ts | 38 +- .../src/dashboard/events/assetListEvent.ts | 46 +- app/gui/src/dashboard/hooks/backendHooks.tsx | 266 ++++--- .../hooks/billing/FeaturesConfiguration.ts | 38 +- .../dashboard/hooks/billing/paywallHooks.ts | 55 +- app/gui/src/dashboard/hooks/projectHooks.ts | 120 ++-- app/gui/src/dashboard/hooks/setAssetHooks.ts | 21 +- .../src/dashboard/hooks/spotlightHooks.tsx | 3 +- .../dashboard/layouts/AssetContextMenu.tsx | 208 +++--- .../layouts/AssetDiffView/AssetDiffView.tsx | 17 +- .../AssetDiffView/useFetchVersionContent.ts | 26 +- .../dashboard/layouts/AssetDocs/AssetDocs.tsx | 20 +- .../layouts/AssetPanel/AssetPanelState.ts | 39 +- .../dashboard/layouts/AssetProjectSession.tsx | 8 +- .../layouts/AssetProjectSessions.tsx | 11 +- .../src/dashboard/layouts/AssetProperties.tsx | 25 +- .../src/dashboard/layouts/AssetSearchBar.tsx | 246 +++---- .../layouts/AssetVersions/AssetVersion.tsx | 33 +- .../layouts/AssetVersions/AssetVersions.tsx | 69 +- .../layouts/AssetVersions/useAssetVersions.ts | 18 +- app/gui/src/dashboard/layouts/AssetsTable.tsx | 38 +- .../layouts/AssetsTableContextMenu.tsx | 56 +- .../dashboard/layouts/CategorySwitcher.tsx | 142 ++-- .../layouts/CategorySwitcher/Category.ts | 15 +- app/gui/src/dashboard/layouts/Chat.tsx | 274 ++++---- app/gui/src/dashboard/layouts/Drive.tsx | 119 ++-- .../layouts/Drive/assetsTableItemsHooks.tsx | 9 +- app/gui/src/dashboard/layouts/DriveBar.tsx | 21 +- app/gui/src/dashboard/layouts/Editor.tsx | 125 ++-- .../dashboard/layouts/GlobalContextMenu.tsx | 10 +- app/gui/src/dashboard/layouts/Labels.tsx | 52 +- .../Settings/ActivityLogSettingsSection.tsx | 26 +- .../KeyboardShortcutsSettingsSection.tsx | 17 +- .../Settings/MembersSettingsSection.tsx | 97 ++- .../layouts/Settings/MembersTable.tsx | 5 +- .../OrganizationProfilePictureInput.tsx | 37 +- .../layouts/Settings/ProfilePictureInput.tsx | 37 +- .../layouts/Settings/UserGroupRow.tsx | 57 +- .../layouts/Settings/UserGroupUserRow.tsx | 59 +- .../Settings/UserGroupsSettingsSection.tsx | 19 +- .../dashboard/layouts/Settings/UserRow.tsx | 82 +-- .../src/dashboard/layouts/Settings/data.tsx | 28 +- .../src/dashboard/layouts/Settings/index.tsx | 11 +- app/gui/src/dashboard/layouts/TabBar.tsx | 85 +-- app/gui/src/dashboard/layouts/UserBar.tsx | 3 +- app/gui/src/dashboard/layouts/UserMenu.tsx | 7 +- .../src/dashboard/layouts/VersionChecker.tsx | 22 +- .../dashboard/modals/DuplicateAssetsModal.tsx | 149 ++-- .../InviteUsersModal/InviteUsersForm.tsx | 77 +- .../InviteUsersModal/InviteUsersModal.tsx | 58 +- .../dashboard/modals/ManageLabelsModal.tsx | 16 +- .../modals/ManagePermissionsModal.tsx | 37 +- .../src/dashboard/modals/NewLabelModal.tsx | 9 +- .../dashboard/modals/NewUserGroupModal.tsx | 72 +- .../src/dashboard/modals/ProjectLogsModal.tsx | 32 +- .../SetupOrganizationAfterSubscribe.tsx | 72 +- .../dashboard/modals/UpsertSecretModal.tsx | 7 +- .../payments/api/useSubscriptionPrice.ts | 9 +- .../components/PlanSelector/PlanSelector.tsx | 3 +- .../components/PlanSelectorDialog.tsx | 16 +- .../PlanSelector/getComponentForPlan.tsx | 75 +- .../dashboard/modules/payments/constants.ts | 51 +- .../pages/authentication/Setup/Setup.tsx | 165 ++--- .../dashboard/pages/dashboard/Dashboard.tsx | 156 ++--- .../pages/dashboard/DashboardTabBar.tsx | 7 +- .../pages/dashboard/DashboardTabPanels.tsx | 6 +- .../pages/subscribe/Subscribe/Subscribe.tsx | 3 +- .../pages/subscribe/SubscribeSuccess.tsx | 41 +- .../src/dashboard/providers/AuthProvider.tsx | 259 ++++--- .../dashboard/providers/BackendProvider.tsx | 22 +- .../dashboard/providers/ProjectsProvider.tsx | 62 +- .../src/dashboard/providers/TextProvider.tsx | 61 +- .../__test__/SessionProvider.test.tsx | 9 +- app/gui/src/dashboard/services/Backend.ts | 3 - app/gui/src/dashboard/services/Chat.ts | 15 +- .../src/dashboard/services/LocalBackend.ts | 330 +++++---- .../src/dashboard/services/ProjectManager.ts | 61 +- .../src/dashboard/services/RemoteBackend.ts | 662 ++++++++++-------- .../dashboard/services/remoteBackendPaths.ts | 74 +- .../src/dashboard/utilities/AssetTreeNode.ts | 49 +- .../src/dashboard/utilities/LocalStorage.ts | 11 +- .../src/dashboard/utilities/Navigator2D.ts | 2 +- app/gui/src/dashboard/utilities/Visibility.ts | 4 - .../utilities/__tests__/array.test.ts | 30 - .../utilities/__tests__/fileInfo.test.ts | 14 - app/gui/src/dashboard/utilities/array.ts | 3 - app/gui/src/dashboard/utilities/dateTime.ts | 3 - app/gui/src/dashboard/utilities/drag.ts | 29 +- app/gui/src/dashboard/utilities/error.ts | 162 +---- app/gui/src/dashboard/utilities/event.ts | 37 +- app/gui/src/dashboard/utilities/functions.ts | 8 - app/gui/src/dashboard/utilities/indent.ts | 4 - app/gui/src/dashboard/utilities/input.ts | 4 +- .../src/dashboard/utilities/inputBindings.ts | 43 +- app/gui/src/dashboard/utilities/jsonSchema.ts | 21 +- app/gui/src/dashboard/utilities/newtype.ts | 2 - app/gui/src/dashboard/utilities/object.ts | 3 - .../src/dashboard/utilities/permissions.ts | 35 +- .../dashboard/utilities/preventNavigation.tsx | 3 +- app/gui/src/dashboard/utilities/sorting.ts | 8 - app/gui/src/dashboard/utilities/string.ts | 69 -- app/gui/src/dashboard/utilities/style.ts | 4 - .../src/dashboard/utilities/tailwindMerge.ts | 14 +- .../dashboard/utilities/tailwindVariants.ts | 4 - app/gui/src/dashboard/utilities/validation.ts | 4 - pnpm-lock.yaml | 4 + 160 files changed, 3873 insertions(+), 4589 deletions(-) rename app/{gui/src/dashboard => common/src}/utilities/__tests__/error.test.ts (79%) rename app/{gui/src/dashboard => common/src}/utilities/convertCSSUnits.ts (93%) rename app/{gui/src/dashboard/utilities => common/src/utilities/data}/__tests__/dateTime.test.ts (78%) rename app/{gui/src/dashboard/utilities/__tests__/parseUserEmails.test.ts => common/src/utilities/data/__tests__/email.test.ts} (88%) create mode 100644 app/common/src/utilities/data/__tests__/fileInfo.test.ts rename app/{gui/src/dashboard/utilities/parseUserEmails.ts => common/src/utilities/data/email.ts} (89%) rename app/{gui/src/dashboard/utilities => common/src/utilities/data}/fileInfo.ts (92%) rename app/{gui/src/dashboard/utilities => common/src/utilities/data}/path.ts (58%) rename app/{gui/src/dashboard => common/src}/utilities/download.ts (86%) create mode 100644 app/common/src/utilities/error.ts create mode 100644 app/common/src/utilities/functions.ts rename app/{gui/src/dashboard => common/src}/utilities/github.ts (87%) delete mode 100644 app/gui/src/dashboard/components/SubmitButton.tsx delete mode 100644 app/gui/src/dashboard/services/Backend.ts delete mode 100644 app/gui/src/dashboard/utilities/__tests__/array.test.ts delete mode 100644 app/gui/src/dashboard/utilities/__tests__/fileInfo.test.ts delete mode 100644 app/gui/src/dashboard/utilities/array.ts delete mode 100644 app/gui/src/dashboard/utilities/dateTime.ts delete mode 100644 app/gui/src/dashboard/utilities/functions.ts delete mode 100644 app/gui/src/dashboard/utilities/newtype.ts delete mode 100644 app/gui/src/dashboard/utilities/object.ts delete mode 100644 app/gui/src/dashboard/utilities/string.ts diff --git a/app/common/package.json b/app/common/package.json index a3bda304841a..5cbc28aa45d9 100644 --- a/app/common/package.json +++ b/app/common/package.json @@ -14,17 +14,25 @@ "./src/load": "./src/load.ts", "./src/backendQuery": "./src/backendQuery.ts", "./src/queryClient": "./src/queryClient.ts", + "./src/utilities/convertCSSUnits": "./src/utilities/convertCSSUnits.ts", "./src/utilities/data/array": "./src/utilities/data/array.ts", "./src/utilities/data/dateTime": "./src/utilities/data/dateTime.ts", + "./src/utilities/data/email": "./src/utilities/data/email.ts", + "./src/utilities/data/fileInfo": "./src/utilities/data/fileInfo.ts", "./src/utilities/data/newtype": "./src/utilities/data/newtype.ts", "./src/utilities/data/object": "./src/utilities/data/object.ts", + "./src/utilities/data/path": "./src/utilities/data/path.ts", "./src/utilities/data/string": "./src/utilities/data/string.ts", "./src/utilities/data/iter": "./src/utilities/data/iter.ts", + "./src/utilities/download": "./src/utilities/download.ts", + "./src/utilities/error": "./src/utilities/error.ts", + "./src/utilities/functions": "./src/utilities/functions.ts", + "./src/utilities/github": "./src/utilities/github.ts", + "./src/utilities/permissions": "./src/utilities/permissions.ts", "./src/utilities/style/tabBar": "./src/utilities/style/tabBar.ts", "./src/utilities/uniqueString": "./src/utilities/uniqueString.ts", - "./src/text": "./src/text/index.ts", - "./src/utilities/permissions": "./src/utilities/permissions.ts", "./src/services/Backend": "./src/services/Backend.ts", + "./src/text": "./src/text/index.ts", "./src/types": "./src/types.d.ts" }, "scripts": { @@ -42,5 +50,8 @@ "react": "^18.3.1", "vitest": "^1.3.1", "vue": "^3.5.2" + }, + "devDependencies": { + "@fast-check/vitest": "^0.0.8" } } diff --git a/app/common/src/detect.ts b/app/common/src/detect.ts index 7dbd00aa2a5d..f56c2418291e 100644 --- a/app/common/src/detect.ts +++ b/app/common/src/detect.ts @@ -1,16 +1,8 @@ /** @file Helper functions for environment detection. */ -// =================== -// === IS_DEV_MODE === -// =================== - /** Return whether the current build is in development mode */ export const IS_DEV_MODE = process.env.NODE_ENV === 'development' -// ================ -// === Platform === -// ================ - /** Possible platforms that the app may run on. */ export enum Platform { unknown = 'Unknown platform', @@ -82,10 +74,6 @@ export function isOnUnknownOS() { return platform() === Platform.unknown } -// =============== -// === Browser === -// =============== - /** Possible browsers that the app may run on. */ export enum Browser { unknown = 'Unknown browser', @@ -160,10 +148,6 @@ export function isOnUnknownBrowser() { return browser() === Browser.unknown } -// ==================== -// === Architecture === -// ==================== - let detectedArchitecture: string | null = null // Only implemented by Chromium. // @ts-expect-error This API exists, but no typings exist for it yet. diff --git a/app/common/src/services/Backend.ts b/app/common/src/services/Backend.ts index 118b795c5567..a065b78c7562 100644 --- a/app/common/src/services/Backend.ts +++ b/app/common/src/services/Backend.ts @@ -1,5 +1,4 @@ /** @file Type definitions common between all backends. */ - import * as array from '../utilities/data/array' import * as dateTime from '../utilities/data/dateTime' import * as newtype from '../utilities/data/newtype' @@ -9,10 +8,6 @@ import * as uniqueString from '../utilities/uniqueString' /** The size, in bytes, of the chunks which the backend accepts. */ export const S3_CHUNK_SIZE_BYTES = 10_000_000 -// ================ -// === Newtypes === -// ================ - /** Unique identifier for an organization. */ export type OrganizationId = newtype.Newtype export const OrganizationId = newtype.newtypeConstructor() @@ -145,10 +140,6 @@ export function newPlaceholderUserGroupId() { return UserGroupId(`${PLACEHOLDER_USER_GROUP_PREFIX}${uniqueString.uniqueString()}`) } -// ============= -// === Types === -// ============= - /** The {@link Backend} variant. If a new variant is created, it should be added to this enum. */ export enum BackendType { local = 'local', @@ -685,10 +676,6 @@ export function findLeastUsedColor(labels: Iterable