diff --git a/.eslintrc.js b/.eslintrc.js index 62d531c696..c09b044b12 100644 --- a/.eslintrc.js +++ b/.eslintrc.js @@ -1,3 +1,43 @@ +const createPattern = packageName => [ + { + group: ['**/dist', '**/dist/**'], + message: 'Do not import from dist', + allowTypeImports: false, + }, + { + group: ['**/src', '**/src/**'], + message: 'Do not import from src', + allowTypeImports: false, + }, + { + group: [`@affine/${packageName}`], + message: 'Do not import package itself', + allowTypeImports: false, + }, + { + group: [`@toeverything/${packageName}`], + message: 'Do not import package itself', + allowTypeImports: false, + }, +]; + +const allPackages = [ + 'cli', + 'component', + 'debug', + 'env', + 'graphql', + 'hooks', + 'i18n', + 'jotai', + 'native', + 'plugin-infra', + 'templates', + 'theme', + 'workspace', + 'y-indexeddb', +]; + /** * @type {import('eslint').Linter.Config} */ @@ -96,6 +136,17 @@ const config = { '@typescript-eslint/no-var-requires': 0, }, }, + ...allPackages.map(pkg => ({ + files: [`packages/${pkg}/src/**/*.ts`, `packages/${pkg}/src/**/*.tsx`], + rules: { + '@typescript-eslint/no-restricted-imports': [ + 'error', + { + patterns: createPattern(pkg), + }, + ], + }, + })), ], }; diff --git a/packages/component/src/components/app-sidebar/index.stories.tsx b/packages/component/src/components/app-sidebar/index.stories.tsx index 38ddd2ab08..4246306a26 100644 --- a/packages/component/src/components/app-sidebar/index.stories.tsx +++ b/packages/component/src/components/app-sidebar/index.stories.tsx @@ -1,4 +1,3 @@ -import { IconButton } from '@affine/component'; import { DeleteTemporarilyIcon, SettingsIcon, @@ -8,6 +7,7 @@ import type { Meta, StoryFn } from '@storybook/react'; import { useAtom } from 'jotai'; import { type PropsWithChildren, useState } from 'react'; +import { IconButton } from '../..'; import { AppSidebar, AppSidebarFallback, appSidebarOpenAtom } from '.'; import { AddPageButton } from './add-page-button'; import { CategoryDivider } from './category-divider'; diff --git a/packages/component/src/components/app-sidebar/sidebar-header/index.tsx b/packages/component/src/components/app-sidebar/sidebar-header/index.tsx index 7e7fc942e1..8b461c9a9d 100644 --- a/packages/component/src/components/app-sidebar/sidebar-header/index.tsx +++ b/packages/component/src/components/app-sidebar/sidebar-header/index.tsx @@ -1,4 +1,3 @@ -import { IconButton } from '@affine/component'; import { getEnvironment } from '@affine/env/config'; import { ArrowLeftSmallIcon, @@ -7,6 +6,7 @@ import { } from '@blocksuite/icons'; import { useAtom } from 'jotai'; +import { IconButton } from '../../..'; import type { History } from '..'; import { navHeaderStyle, sidebarButtonStyle } from '../index.css'; import { appSidebarOpenAtom } from '../index.jotai'; diff --git a/packages/component/src/components/block-suite-editor/plugins/bookmark.tsx b/packages/component/src/components/block-suite-editor/plugins/bookmark.tsx index 84c0212757..0f2e525dc2 100644 --- a/packages/component/src/components/block-suite-editor/plugins/bookmark.tsx +++ b/packages/component/src/components/block-suite-editor/plugins/bookmark.tsx @@ -1,5 +1,3 @@ -import { MenuItem, MuiClickAwayListener, PureMenu } from '@affine/component'; -import type { EditorPlugin } from '@affine/component/block-suite-editor'; import type { SerializedBlock } from '@blocksuite/blocks'; import { getCurrentBlockRange, @@ -10,6 +8,9 @@ import type { Page } from '@blocksuite/store'; import { assertExists } from '@blocksuite/store'; import { useCallback, useEffect, useMemo, useState } from 'react'; +import { MenuItem, MuiClickAwayListener, PureMenu } from '../../..'; +import type { EditorPlugin } from '..'; + type ShortcutMap = { [key: string]: (e: KeyboardEvent, page: Page) => void; }; diff --git a/packages/component/src/components/contact-modal/index.tsx b/packages/component/src/components/contact-modal/index.tsx index f657641f5c..c7f3ac2a16 100644 --- a/packages/component/src/components/contact-modal/index.tsx +++ b/packages/component/src/components/contact-modal/index.tsx @@ -1,11 +1,6 @@ -import { - FlexWrapper, - Modal, - ModalCloseButton, - ModalWrapper, -} from '@affine/component'; import { useAFFiNEI18N } from '@affine/i18n/hooks'; +import { FlexWrapper, Modal, ModalCloseButton, ModalWrapper } from '../..'; import { DiscordIcon, DocIcon, diff --git a/packages/component/src/components/contact-modal/style.ts b/packages/component/src/components/contact-modal/style.ts index 7b78df4f35..3a21f226d5 100644 --- a/packages/component/src/components/contact-modal/style.ts +++ b/packages/component/src/components/contact-modal/style.ts @@ -1,4 +1,4 @@ -import { absoluteCenter, displayFlex, styled } from '@affine/component'; +import { absoluteCenter, displayFlex, styled } from '../..'; export const StyledBigLink = styled('a')(() => { return { diff --git a/packages/component/src/components/page-list/all-page.tsx b/packages/component/src/components/page-list/all-page.tsx index 024ba6b8c2..4bdf28342e 100644 --- a/packages/component/src/components/page-list/all-page.tsx +++ b/packages/component/src/components/page-list/all-page.tsx @@ -1,10 +1,3 @@ -import { - Table, - TableBody, - TableCell, - TableHead, - TableRow, -} from '@affine/component'; import { DEFAULT_SORT_KEY } from '@affine/env/constant'; import { useAFFiNEI18N } from '@affine/i18n/hooks'; import { ArrowDownBigIcon, ArrowUpBigIcon } from '@blocksuite/icons'; @@ -12,6 +5,7 @@ import { useMediaQuery, useTheme } from '@mui/material'; import type React from 'react'; import { type CSSProperties } from 'react'; +import { Table, TableBody, TableCell, TableHead, TableRow } from '../..'; import { AllPagesBody } from './all-pages-body'; import { NewPageButton } from './components/new-page-buttton'; import { TitleCell } from './components/title-cell'; diff --git a/packages/component/src/components/page-list/all-pages-body.tsx b/packages/component/src/components/page-list/all-pages-body.tsx index ee98535a55..00c2337a19 100644 --- a/packages/component/src/components/page-list/all-pages-body.tsx +++ b/packages/component/src/components/page-list/all-pages-body.tsx @@ -1,9 +1,9 @@ -import { styled, TableBody, TableCell } from '@affine/component'; import { useAFFiNEI18N } from '@affine/i18n/hooks'; import { useDraggable } from '@dnd-kit/core'; import type { ReactNode } from 'react'; import { Fragment } from 'react'; +import { styled, TableBody, TableCell } from '../../..'; import { FavoriteTag } from './components/favorite-tag'; import { TitleCell } from './components/title-cell'; import { OperationCell } from './operation-cell'; diff --git a/packages/component/src/components/page-list/components/favorite-tag.tsx b/packages/component/src/components/page-list/components/favorite-tag.tsx index 419e351dd6..b9beabb716 100644 --- a/packages/component/src/components/page-list/components/favorite-tag.tsx +++ b/packages/component/src/components/page-list/components/favorite-tag.tsx @@ -1,9 +1,10 @@ -import type { IconButtonProps } from '@affine/component'; -import { IconButton, Tooltip } from '@affine/component'; import { useAFFiNEI18N } from '@affine/i18n/hooks'; import { FavoritedIcon, FavoriteIcon } from '@blocksuite/icons'; import { forwardRef } from 'react'; +import type { IconButtonProps } from '../../..'; +import { IconButton, Tooltip } from '../../..'; + export const FavoriteTag = forwardRef< HTMLButtonElement, { diff --git a/packages/component/src/components/page-list/components/title-cell.tsx b/packages/component/src/components/page-list/components/title-cell.tsx index 58ed823e3a..6e198e575e 100644 --- a/packages/component/src/components/page-list/components/title-cell.tsx +++ b/packages/component/src/components/page-list/components/title-cell.tsx @@ -1,7 +1,7 @@ -import type { TableCellProps } from '@affine/component'; -import { Content, TableCell } from '@affine/component'; import React, { useCallback } from 'react'; +import type { TableCellProps } from '../../..'; +import { Content, TableCell } from '../../..'; import { StyledTitleContentWrapper, StyledTitleLink, diff --git a/packages/component/src/components/page-list/filter/filter-list.tsx b/packages/component/src/components/page-list/filter/filter-list.tsx index 181ee607b3..2bb88cdf4c 100644 --- a/packages/component/src/components/page-list/filter/filter-list.tsx +++ b/packages/component/src/components/page-list/filter/filter-list.tsx @@ -1,5 +1,4 @@ -import { Menu } from '@affine/component'; - +import { Menu } from '../../..'; import { Condition } from './condition'; import type { Filter } from './vars'; import { CreateFilterMenu } from './vars'; diff --git a/packages/component/src/components/page-list/mobile.tsx b/packages/component/src/components/page-list/mobile.tsx index c1b8175cb1..2c96d6c095 100644 --- a/packages/component/src/components/page-list/mobile.tsx +++ b/packages/component/src/components/page-list/mobile.tsx @@ -1,3 +1,5 @@ +import { useAFFiNEI18N } from '@affine/i18n/hooks'; + import { Content, Table, @@ -5,9 +7,7 @@ import { TableCell, TableHead, TableRow, -} from '@affine/component'; -import { useAFFiNEI18N } from '@affine/i18n/hooks'; - +} from '../../..'; import { AllPagesBody } from './all-pages-body'; import { NewPageButton } from './components/new-page-buttton'; import { diff --git a/packages/component/src/components/page-list/operation-cell.tsx b/packages/component/src/components/page-list/operation-cell.tsx index 1a3a064a9c..2fefe861b4 100644 --- a/packages/component/src/components/page-list/operation-cell.tsx +++ b/packages/component/src/components/page-list/operation-cell.tsx @@ -1,11 +1,3 @@ -import { - Confirm, - FlexWrapper, - IconButton, - Menu, - MenuItem, - Tooltip, -} from '@affine/component'; import { useAFFiNEI18N } from '@affine/i18n/hooks'; import { DeletePermanentlyIcon, @@ -18,6 +10,14 @@ import { import type React from 'react'; import { useState } from 'react'; +import { + Confirm, + FlexWrapper, + IconButton, + Menu, + MenuItem, + Tooltip, +} from '../../..'; import { DisablePublicSharing, MoveToTrash } from './operation-menu-items'; export type OperationCellProps = { diff --git a/packages/component/src/components/page-list/operation-menu-items/copy-link.tsx b/packages/component/src/components/page-list/operation-menu-items/copy-link.tsx index 8a22e38f2e..60022de360 100644 --- a/packages/component/src/components/page-list/operation-menu-items/copy-link.tsx +++ b/packages/component/src/components/page-list/operation-menu-items/copy-link.tsx @@ -1,8 +1,8 @@ -import { MenuItem, toast } from '@affine/component'; import { useAFFiNEI18N } from '@affine/i18n/hooks'; import { CopyIcon } from '@blocksuite/icons'; import { useCallback } from 'react'; +import { MenuItem, toast } from '../../..'; import type { CommonMenuItemProps } from './types'; export const CopyLink = ({ onItemClick, onSelect }: CommonMenuItemProps) => { diff --git a/packages/component/src/components/page-list/operation-menu-items/disable-public-sharing.tsx b/packages/component/src/components/page-list/operation-menu-items/disable-public-sharing.tsx index 5cae69591d..f905aa02fe 100644 --- a/packages/component/src/components/page-list/operation-menu-items/disable-public-sharing.tsx +++ b/packages/component/src/components/page-list/operation-menu-items/disable-public-sharing.tsx @@ -1,8 +1,8 @@ -import { MenuItem, styled } from '@affine/component'; -import { PublicLinkDisableModal } from '@affine/component/share-menu'; import { useAFFiNEI18N } from '@affine/i18n/hooks'; import { ShareIcon } from '@blocksuite/icons'; +import { MenuItem, styled } from '../../../'; +import { PublicLinkDisableModal } from '../../share-menu'; import type { CommonMenuItemProps } from './types'; const StyledMenuItem = styled(MenuItem)(({ theme }) => { diff --git a/packages/component/src/components/page-list/operation-menu-items/export.tsx b/packages/component/src/components/page-list/operation-menu-items/export.tsx index b0379b5547..27a85f3c41 100644 --- a/packages/component/src/components/page-list/operation-menu-items/export.tsx +++ b/packages/component/src/components/page-list/operation-menu-items/export.tsx @@ -1,4 +1,3 @@ -import { Menu, MenuItem } from '@affine/component'; import { useAFFiNEI18N } from '@affine/i18n/hooks'; import type { PageBlockModel } from '@blocksuite/blocks'; import { ContentParser } from '@blocksuite/blocks/content-parser'; @@ -12,6 +11,7 @@ import { } from '@blocksuite/icons'; import { useRef } from 'react'; +import { Menu, MenuItem } from '../../..'; import type { CommonMenuItemProps } from './types'; export const Export = ({ diff --git a/packages/component/src/components/page-list/operation-menu-items/move-to-trash.tsx b/packages/component/src/components/page-list/operation-menu-items/move-to-trash.tsx index b762200f17..7e2a8128ae 100644 --- a/packages/component/src/components/page-list/operation-menu-items/move-to-trash.tsx +++ b/packages/component/src/components/page-list/operation-menu-items/move-to-trash.tsx @@ -1,8 +1,8 @@ -import type { ConfirmProps } from '@affine/component'; -import { Confirm, MenuItem } from '@affine/component'; import { useAFFiNEI18N } from '@affine/i18n/hooks'; import { DeleteTemporarilyIcon } from '@blocksuite/icons'; +import type { ConfirmProps } from '../../..'; +import { Confirm, MenuItem } from '../../..'; import type { CommonMenuItemProps } from './types'; export const MoveToTrash = ({ diff --git a/packages/component/src/components/page-list/styles.ts b/packages/component/src/components/page-list/styles.ts index cbf80b5333..a88f498856 100644 --- a/packages/component/src/components/page-list/styles.ts +++ b/packages/component/src/components/page-list/styles.ts @@ -1,5 +1,5 @@ -import { Content, displayFlex, styled } from '@affine/component'; -import { TableRow } from '@affine/component'; +import { TableRow } from '../..'; +import { Content, displayFlex, styled } from '../../'; export const StyledTableContainer = styled('div')(({ theme }) => { return { diff --git a/packages/component/src/components/page-list/view/create-view.tsx b/packages/component/src/components/page-list/view/create-view.tsx index 1299dcdd89..043452efba 100644 --- a/packages/component/src/components/page-list/view/create-view.tsx +++ b/packages/component/src/components/page-list/view/create-view.tsx @@ -1,7 +1,7 @@ -import { Button, Input, Modal, ModalWrapper } from '@affine/component'; import { uuidv4 } from '@blocksuite/store'; import { useState } from 'react'; +import { Button, Input, Modal, ModalWrapper } from '../../..'; import { FilterList } from '../filter'; import type { Filter } from '../filter/vars'; import type { View } from '../use-all-page-setting'; diff --git a/packages/component/src/components/page-list/view/view-list.tsx b/packages/component/src/components/page-list/view/view-list.tsx index 3a9853cab2..c5da3f6727 100644 --- a/packages/component/src/components/page-list/view/view-list.tsx +++ b/packages/component/src/components/page-list/view/view-list.tsx @@ -1,6 +1,6 @@ -import { Button, MenuItem } from '@affine/component'; import { FilteredIcon } from '@blocksuite/icons'; +import { Button, MenuItem } from '../../..'; import Menu from '../../../ui/menu/menu'; import { CreateFilterMenu } from '../filter/vars'; import type { useAllPageSetting } from '../use-all-page-setting'; diff --git a/packages/component/src/components/share-menu/disable-public-link/style.ts b/packages/component/src/components/share-menu/disable-public-link/style.ts index ee2251be49..56ff275fa4 100644 --- a/packages/component/src/components/share-menu/disable-public-link/style.ts +++ b/packages/component/src/components/share-menu/disable-public-link/style.ts @@ -1,4 +1,4 @@ -import { styled, TextButton } from '@affine/component'; +import { styled, TextButton } from '../../..'; export const StyledModalWrapper = styled('div')(() => { return { diff --git a/packages/component/src/stories/card.stories.tsx b/packages/component/src/stories/card.stories.tsx index f3d838ed51..a5943a3a4f 100644 --- a/packages/component/src/stories/card.stories.tsx +++ b/packages/component/src/stories/card.stories.tsx @@ -1,8 +1,8 @@ -import { BlockCard } from '@affine/component/card/block-card'; import { WorkspaceFlavour } from '@affine/workspace/type'; import { EdgelessIcon, PageIcon } from '@blocksuite/icons'; import { Workspace } from '@blocksuite/store'; +import { BlockCard } from '../components/card/block-card'; import { WorkspaceCard } from '../components/card/workspace-card'; import { toast } from '../ui/toast'; diff --git a/packages/component/src/stories/contact-modal.stories.tsx b/packages/component/src/stories/contact-modal.stories.tsx index 97d7440de7..54df0255c1 100644 --- a/packages/component/src/stories/contact-modal.stories.tsx +++ b/packages/component/src/stories/contact-modal.stories.tsx @@ -1,9 +1,9 @@ -import { Button } from '@affine/component'; import type { StoryFn } from '@storybook/react'; import { useState } from 'react'; import type { ContactModalProps } from '../components/contact-modal'; import { ContactModal } from '../components/contact-modal'; +import { Button } from '../ui/button'; export default { title: 'AFFiNE/ContactModal', diff --git a/packages/debug/src/__tests__/index.spec.ts b/packages/debug/src/__tests__/index.spec.ts index 0c26fe3a60..a073189de9 100644 --- a/packages/debug/src/__tests__/index.spec.ts +++ b/packages/debug/src/__tests__/index.spec.ts @@ -1,9 +1,10 @@ /** * @vitest-environment happy-dom */ -import { DebugLogger } from '@affine/debug'; import { describe, expect, test, vi } from 'vitest'; +import { DebugLogger } from '..'; + describe('debug', () => { test('disabled', () => { const logger = new DebugLogger('test'); diff --git a/packages/hooks/src/__tests__/index.spec.ts b/packages/hooks/src/__tests__/index.spec.ts index 6436142416..f94e136972 100644 --- a/packages/hooks/src/__tests__/index.spec.ts +++ b/packages/hooks/src/__tests__/index.spec.ts @@ -9,14 +9,14 @@ import type { Page } from '@blocksuite/store'; import { assertExists } from '@blocksuite/store'; import { Workspace as BlockSuiteWorkspace } from '@blocksuite/store'; import { renderHook } from '@testing-library/react'; -import { useBlockSuitePagePreview } from '@toeverything/hooks/use-block-suite-page-preview'; -import { useBlockSuiteWorkspacePageIsPublic } from '@toeverything/hooks/use-block-suite-workspace-page-is-public'; -import { useBlockSuiteWorkspacePageTitle } from '@toeverything/hooks/use-block-suite-workspace-page-title'; import { useAtomValue } from 'jotai'; import { describe, expect, test, vitest } from 'vitest'; import { beforeEach } from 'vitest'; +import { useBlockSuitePagePreview } from '../use-block-suite-page-preview'; import { useBlockSuiteWorkspaceName } from '../use-block-suite-workspace-name'; +import { useBlockSuiteWorkspacePageIsPublic } from '../use-block-suite-workspace-page-is-public'; +import { useBlockSuiteWorkspacePageTitle } from '../use-block-suite-workspace-page-title'; let blockSuiteWorkspace: BlockSuiteWorkspace; diff --git a/packages/hooks/src/__tests__/use-blocksuite-workspace-helper.spec.ts b/packages/hooks/src/__tests__/use-blocksuite-workspace-helper.spec.ts index f950277baa..fb33273715 100644 --- a/packages/hooks/src/__tests__/use-blocksuite-workspace-helper.spec.ts +++ b/packages/hooks/src/__tests__/use-blocksuite-workspace-helper.spec.ts @@ -7,10 +7,11 @@ import { initPage } from '@affine/env/blocksuite'; import { __unstableSchemas, AffineSchemas } from '@blocksuite/blocks/models'; import { Workspace } from '@blocksuite/store'; import { renderHook } from '@testing-library/react'; -import { useBlockSuitePageMeta } from '@toeverything/hooks/use-block-suite-page-meta'; -import { useBlockSuiteWorkspaceHelper } from '@toeverything/hooks/use-block-suite-workspace-helper'; import { beforeEach, describe, expect, test } from 'vitest'; +import { useBlockSuitePageMeta } from '../use-block-suite-page-meta'; +import { useBlockSuiteWorkspaceHelper } from '../use-block-suite-workspace-helper'; + let blockSuiteWorkspace: Workspace; beforeEach(() => { diff --git a/packages/workspace/src/affine/__tests__/api.spec.ts b/packages/workspace/src/affine/__tests__/api.spec.ts index feb9f0f77a..613abf4b56 100644 --- a/packages/workspace/src/affine/__tests__/api.spec.ts +++ b/packages/workspace/src/affine/__tests__/api.spec.ts @@ -6,10 +6,6 @@ import 'fake-indexeddb/auto'; import { readFile } from 'node:fs/promises'; import { MessageCode } from '@affine/env/constant'; -import { createStatusApis } from '@affine/workspace/affine/api/status'; -import { KeckProvider } from '@affine/workspace/affine/keck'; -import { WorkspaceFlavour } from '@affine/workspace/type'; -import { createEmptyBlockSuiteWorkspace } from '@affine/workspace/utils'; import user1 from '@affine-test/fixtures/built-in-user1.json'; import user2 from '@affine-test/fixtures/built-in-user2.json'; import { __unstableSchemas, AffineSchemas } from '@blocksuite/blocks/models'; @@ -22,6 +18,8 @@ import { beforeEach, describe, expect, test, vi } from 'vitest'; import { WebSocket } from 'ws'; import { applyUpdate } from 'yjs'; +import { WorkspaceFlavour } from '../../type'; +import { createEmptyBlockSuiteWorkspace } from '../../utils'; import { createUserApis, createWorkspaceApis, @@ -29,6 +27,8 @@ import { RequestError, usageResponseSchema, } from '../api'; +import { createStatusApis } from '../api/status'; +import { KeckProvider } from '../keck'; import { createAffineAuth, getLoginStorage, diff --git a/packages/workspace/src/affine/__tests__/login.spec.ts b/packages/workspace/src/affine/__tests__/login.spec.ts index ad0f361687..de686257af 100644 --- a/packages/workspace/src/affine/__tests__/login.spec.ts +++ b/packages/workspace/src/affine/__tests__/login.spec.ts @@ -1,14 +1,15 @@ /** * @vitest-environment happy-dom */ -import type { AccessTokenMessage } from '@affine/workspace/affine/login'; +import { describe, expect, test } from 'vitest'; + +import type { AccessTokenMessage } from '../login'; import { getLoginStorage, isExpired, setLoginStorage, STORAGE_KEY, -} from '@affine/workspace/affine/login'; -import { describe, expect, test } from 'vitest'; +} from '../login'; describe('storage', () => { test('should work', () => { diff --git a/packages/workspace/src/affine/__tests__/sync.spec.ts b/packages/workspace/src/affine/__tests__/sync.spec.ts index e43ffe0942..459f756700 100644 --- a/packages/workspace/src/affine/__tests__/sync.spec.ts +++ b/packages/workspace/src/affine/__tests__/sync.spec.ts @@ -3,16 +3,6 @@ */ import 'fake-indexeddb/auto'; -import type { Workspace } from '@affine/workspace/affine/api'; -import { - createWorkspaceApis, - PermissionType, -} from '@affine/workspace/affine/api'; -import { KeckProvider } from '@affine/workspace/affine/keck'; -import type { LoginResponse } from '@affine/workspace/affine/login'; -import { loginResponseSchema } from '@affine/workspace/affine/login'; -import { WorkspaceFlavour } from '@affine/workspace/type'; -import { createEmptyBlockSuiteWorkspace } from '@affine/workspace/utils'; import user1 from '@affine-test/fixtures/built-in-user1.json'; import user2 from '@affine-test/fixtures/built-in-user2.json'; import type { ParagraphBlockModel } from '@blocksuite/blocks/models'; @@ -21,6 +11,14 @@ import { uuidv4, Workspace as BlockSuiteWorkspace } from '@blocksuite/store'; import { beforeEach, describe, expect, test, vi } from 'vitest'; import { WebSocket } from 'ws'; +import type { LoginResponse } from '../../affine/login'; +import { loginResponseSchema } from '../../affine/login'; +import { WorkspaceFlavour } from '../../type'; +import { createEmptyBlockSuiteWorkspace } from '../../utils'; +import type { Workspace } from '../api'; +import { createWorkspaceApis, PermissionType } from '../api'; +import { KeckProvider } from '../keck'; + declare module '@blocksuite/store' { interface PageMeta { foo: string; diff --git a/packages/workspace/src/affine/atom.ts b/packages/workspace/src/affine/atom.ts index 7ccf20bdb6..413e2f1904 100644 --- a/packages/workspace/src/affine/atom.ts +++ b/packages/workspace/src/affine/atom.ts @@ -1,6 +1,7 @@ -import type { AccessTokenMessage } from '@affine/workspace/affine/login'; import { atomWithStorage } from 'jotai/utils'; +import type { AccessTokenMessage } from '../affine/login'; + export const currentAffineUserAtom = atomWithStorage( 'affine-user-atom', null diff --git a/packages/workspace/src/affine/channel.ts b/packages/workspace/src/affine/channel.ts index 9351bcf439..d7bde9c4f8 100644 --- a/packages/workspace/src/affine/channel.ts +++ b/packages/workspace/src/affine/channel.ts @@ -1,15 +1,12 @@ import { DebugLogger } from '@affine/debug'; -import { - getLoginStorage, - isExpired, - parseIdToken, -} from '@affine/workspace/affine/login'; -import { WorkspaceFlavour } from '@affine/workspace/type'; -import { cleanupWorkspace } from '@affine/workspace/utils'; import { assertExists } from '@blocksuite/global/utils'; import * as url from 'lib0/url'; import * as websocket from 'lib0/websocket'; +import { getLoginStorage, isExpired, parseIdToken } from '../affine/login'; +import { WorkspaceFlavour } from '../type'; +import { cleanupWorkspace } from '../utils'; + const RECONNECT_INTERVAL_TIME = 500; const MAX_RECONNECT_TIMES = 50; diff --git a/packages/workspace/src/affine/sync.ts b/packages/workspace/src/affine/sync.ts index 60501febeb..168a7f5c2d 100644 --- a/packages/workspace/src/affine/sync.ts +++ b/packages/workspace/src/affine/sync.ts @@ -1,18 +1,16 @@ import { DebugLogger } from '@affine/debug'; import { websocketPrefixUrl } from '@affine/env/api'; -import { - workspaceDetailSchema, - workspaceSchema, -} from '@affine/workspace/affine/api'; -import { WebsocketClient } from '@affine/workspace/affine/channel'; -import { storageChangeSlot } from '@affine/workspace/affine/login'; -import { rootStore, rootWorkspacesMetadataAtom } from '@affine/workspace/atom'; -import type { WorkspaceCRUD } from '@affine/workspace/type'; -import type { WorkspaceFlavour } from '@affine/workspace/type'; import { assertExists } from '@blocksuite/global/utils'; import type { Disposable } from '@blocksuite/store'; import { z } from 'zod'; +import { workspaceDetailSchema, workspaceSchema } from '../affine/api'; +import { WebsocketClient } from '../affine/channel'; +import { storageChangeSlot } from '../affine/login'; +import { rootStore, rootWorkspacesMetadataAtom } from '../atom'; +import type { WorkspaceCRUD } from '../type'; +import type { WorkspaceFlavour } from '../type'; + const logger = new DebugLogger('affine-sync'); const channelMessageSchema = z.object({ diff --git a/packages/workspace/src/blob/index.ts b/packages/workspace/src/blob/index.ts index eb0d749cb3..d6589437e7 100644 --- a/packages/workspace/src/blob/index.ts +++ b/packages/workspace/src/blob/index.ts @@ -1,9 +1,10 @@ -import type { createWorkspaceApis } from '@affine/workspace/affine/api'; import type { BlobStorage } from '@blocksuite/store'; import { createIndexeddbStorage } from '@blocksuite/store'; import { openDB } from 'idb'; import type { DBSchema } from 'idb/build/entry'; +import type { createWorkspaceApis } from '../affine/api'; + type UploadingBlob = { key: string; arrayBuffer: ArrayBuffer; diff --git a/packages/workspace/src/local/__tests__/crud.spec.ts b/packages/workspace/src/local/__tests__/crud.spec.ts index ac19dadf37..89ff940a5e 100644 --- a/packages/workspace/src/local/__tests__/crud.spec.ts +++ b/packages/workspace/src/local/__tests__/crud.spec.ts @@ -3,12 +3,12 @@ */ import 'fake-indexeddb/auto'; -import type { LocalWorkspace, WorkspaceCRUD } from '@affine/workspace/type'; -import { WorkspaceFlavour } from '@affine/workspace/type'; import { __unstableSchemas, AffineSchemas } from '@blocksuite/blocks/models'; import { Workspace } from '@blocksuite/store'; import { afterEach, assertType, describe, expect, test } from 'vitest'; +import type { LocalWorkspace, WorkspaceCRUD } from '../../type'; +import { WorkspaceFlavour } from '../../type'; import { CRUD } from '../crud'; afterEach(() => { diff --git a/packages/workspace/src/providers/__tests__/sqlite-provider.spec.ts b/packages/workspace/src/providers/__tests__/sqlite-provider.spec.ts index bc7747cff8..f4563a4641 100644 --- a/packages/workspace/src/providers/__tests__/sqlite-provider.spec.ts +++ b/packages/workspace/src/providers/__tests__/sqlite-provider.spec.ts @@ -1,9 +1,9 @@ -import type { SQLiteProvider } from '@affine/workspace/type'; import { __unstableSchemas, AffineSchemas } from '@blocksuite/blocks/models'; import type { Y as YType } from '@blocksuite/store'; import { uuidv4, Workspace } from '@blocksuite/store'; import { beforeEach, describe, expect, test, vi } from 'vitest'; +import type { SQLiteProvider } from '../../type'; import { createSQLiteProvider } from '../index'; const Y = Workspace.Y; diff --git a/packages/workspace/src/providers/broad-cast-channel/index.ts b/packages/workspace/src/providers/broad-cast-channel/index.ts index 5ec51bd8e9..2833fb9f1a 100644 --- a/packages/workspace/src/providers/broad-cast-channel/index.ts +++ b/packages/workspace/src/providers/broad-cast-channel/index.ts @@ -1,4 +1,3 @@ -import { CallbackSet } from '@affine/workspace/utils'; import { Workspace as BlockSuiteWorkspace } from '@blocksuite/store'; import { assertExists } from '@blocksuite/store'; import type { Awareness } from 'y-protocols/awareness'; @@ -8,6 +7,7 @@ import { } from 'y-protocols/awareness'; import type { BroadCastChannelProvider } from '../../type'; +import { CallbackSet } from '../../utils'; import { localProviderLogger } from '../logger'; import type { AwarenessChanges, diff --git a/packages/workspace/src/type.ts b/packages/workspace/src/type.ts index 5e72905ee5..a100439f2d 100644 --- a/packages/workspace/src/type.ts +++ b/packages/workspace/src/type.ts @@ -1,13 +1,14 @@ // eslint-disable-next-line @typescript-eslint/triple-slash-reference /// import type { View } from '@affine/component/page-list'; -import type { Workspace as RemoteWorkspace } from '@affine/workspace/affine/api'; import type { EditorContainer } from '@blocksuite/editor'; import type { Page } from '@blocksuite/store'; import type { Workspace as BlockSuiteWorkspace } from '@blocksuite/store'; import type { createStore } from 'jotai'; import type { FC, PropsWithChildren } from 'react'; +import type { Workspace as RemoteWorkspace } from './affine/api'; + export type JotaiStore = ReturnType; export const enum WorkspaceSubPath { diff --git a/packages/workspace/src/utils.ts b/packages/workspace/src/utils.ts index b653744823..6e340a08a3 100644 --- a/packages/workspace/src/utils.ts +++ b/packages/workspace/src/utils.ts @@ -1,10 +1,10 @@ -import type { createWorkspaceApis } from '@affine/workspace/affine/api'; -import { rootStore, rootWorkspacesMetadataAtom } from '@affine/workspace/atom'; -import { createAffineBlobStorage } from '@affine/workspace/blob'; import { __unstableSchemas, AffineSchemas } from '@blocksuite/blocks/models'; import type { Generator, StoreOptions } from '@blocksuite/store'; import { createIndexeddbStorage, Workspace } from '@blocksuite/store'; +import type { createWorkspaceApis } from './affine/api'; +import { rootStore, rootWorkspacesMetadataAtom } from './atom'; +import { createAffineBlobStorage } from './blob'; import { createSQLiteStorage } from './blob/sqlite-blob-storage'; import { WorkspaceFlavour } from './type';