diff --git a/packages/app/next.config.js b/packages/app/next.config.js index 478bbfa12..b71ade010 100644 --- a/packages/app/next.config.js +++ b/packages/app/next.config.js @@ -15,6 +15,8 @@ const profileTarget = { local: '127.0.0.1:3000', }; +// 100.77.180.48:11001 + const getRedirectConfig = profile => { const target = profileTarget[profile || 'dev'] || profileTarget['dev']; diff --git a/packages/app/package.json b/packages/app/package.json index 9bc91a925..aece2897f 100644 --- a/packages/app/package.json +++ b/packages/app/package.json @@ -11,10 +11,10 @@ "dependencies": { "@affine/datacenter": "workspace:*", "@affine/i18n": "workspace:*", - "@blocksuite/blocks": "0.4.0-20230110112105-ef07332", - "@blocksuite/editor": "0.4.0-20230110112105-ef07332", + "@blocksuite/blocks": "0.3.1-20230109032243-37ad3ba", + "@blocksuite/editor": "0.3.1-20230109032243-37ad3ba", "@blocksuite/icons": "^2.0.2", - "@blocksuite/store": "0.4.0-20230110112105-ef07332", + "@blocksuite/store": "0.3.1-20230109032243-37ad3ba", "@emotion/css": "^11.10.0", "@emotion/react": "^11.10.4", "@emotion/server": "^11.10.0", diff --git a/packages/app/src/components/create-workspace/index.tsx b/packages/app/src/components/create-workspace/index.tsx index 2f33317c1..7b473afbf 100644 --- a/packages/app/src/components/create-workspace/index.tsx +++ b/packages/app/src/components/create-workspace/index.tsx @@ -1,5 +1,4 @@ import { styled } from '@/styles'; -import { useRouter } from 'next/router'; import { Modal, ModalWrapper, ModalCloseButton } from '@/ui/modal'; import { Button } from '@/ui/button'; import { useState } from 'react'; @@ -7,6 +6,9 @@ import Input from '@/ui/input'; import { KeyboardEvent } from 'react'; import { useTranslation } from '@affine/i18n'; import { useWorkspaceHelper } from '@/hooks/use-workspace-helper'; +import { useRouter } from 'next/router'; +import { toast } from '@/ui/toast'; + interface ModalProps { open: boolean; onClose: () => void; @@ -18,11 +20,11 @@ export const CreateWorkspaceModal = ({ open, onClose }: ModalProps) => { const router = useRouter(); const handleCreateWorkspace = async () => { const workspace = await createWorkspace(workspaceName); - if (workspace && workspace.room) { - router.replace(`/workspace/${workspace.room}`); + if (workspace && workspace.id) { + router.replace(`/workspace/${workspace.id}`); onClose(); } else { - console.log('create error'); + toast('create error'); } }; const handleKeyDown = (event: KeyboardEvent) => { diff --git a/packages/app/src/components/editor/index.tsx b/packages/app/src/components/editor/index.tsx index b0edaa684..3d62a9323 100644 --- a/packages/app/src/components/editor/index.tsx +++ b/packages/app/src/components/editor/index.tsx @@ -31,7 +31,6 @@ export const Editor = ({ page, workspace, setEditor }: Props) => { const editor = new EditorContainer(); editor.page = page; - editorContainer.current?.appendChild(editor); if (page.isEmpty) { const isFirstPage = workspace?.meta.pageMetas.length === 1; diff --git a/packages/app/src/components/header/QuickSearchButton.tsx b/packages/app/src/components/header/QuickSearchButton.tsx index 0b28e43b0..ffe1fe7e1 100644 --- a/packages/app/src/components/header/QuickSearchButton.tsx +++ b/packages/app/src/components/header/QuickSearchButton.tsx @@ -4,6 +4,20 @@ import { Tooltip } from '@/ui/tooltip'; import { ArrowDownIcon } from '@blocksuite/icons'; import { useModal } from '@/providers/GlobalModalProvider'; import { useTranslation } from '@affine/i18n'; +import { styled } from '@/styles'; + +const StyledIconButtonWithAnimate = styled(IconButton)(() => { + return { + svg: { + transition: 'transform 0.15s ease-in-out', + }, + ':hover': { + svg: { + transform: 'translateY(3px)', + }, + }, + }; +}); export const QuickSearchButton = ({ onClick, ...props @@ -12,7 +26,7 @@ export const QuickSearchButton = ({ const { t } = useTranslation(); return ( - { @@ -21,7 +35,7 @@ export const QuickSearchButton = ({ }} > - + ); }; diff --git a/packages/app/src/components/header/header-right-items/TrashButtonGroup.tsx b/packages/app/src/components/header/header-right-items/TrashButtonGroup.tsx index 615648e97..af0a12a8d 100644 --- a/packages/app/src/components/header/header-right-items/TrashButtonGroup.tsx +++ b/packages/app/src/components/header/header-right-items/TrashButtonGroup.tsx @@ -8,7 +8,7 @@ import { useTranslation } from '@affine/i18n'; export const TrashButtonGroup = () => { const { permanentlyDeletePage } = usePageHelper(); - const { currentWorkspaceId } = useAppState(); + const { currentWorkspace } = useAppState(); const { toggleDeletePage } = usePageHelper(); const { confirm } = useConfirm(); const router = useRouter(); @@ -38,7 +38,7 @@ export const TrashButtonGroup = () => { confirmType: 'danger', }).then(confirm => { if (confirm) { - router.push(`/workspace/${currentWorkspaceId}/all`); + router.push(`/workspace/${currentWorkspace?.id}/all`); permanentlyDeletePage(id); } }); diff --git a/packages/app/src/components/import/index.tsx b/packages/app/src/components/import/index.tsx index df621a9c9..111648138 100644 --- a/packages/app/src/components/import/index.tsx +++ b/packages/app/src/components/import/index.tsx @@ -22,11 +22,11 @@ export const ImportModal = ({ open, onClose }: ImportModalProps) => { const { currentWorkspace } = useAppState(); const { t } = useTranslation(); const _applyTemplate = function (pageId: string, template: Template) { - const page = currentWorkspace?.getPage(pageId); + const page = currentWorkspace?.blocksuiteWorkspace?.getPage(pageId); const title = template.name; if (page) { - currentWorkspace?.setPageMeta(page.id, { title }); + currentWorkspace?.blocksuiteWorkspace?.setPageMeta(page.id, { title }); if (page && page.root === null) { setTimeout(() => { const editor = document.querySelector('editor-container'); diff --git a/packages/app/src/components/loading/styled.ts b/packages/app/src/components/loading/styled.ts index b98a8bfaa..31906e1b7 100644 --- a/packages/app/src/components/loading/styled.ts +++ b/packages/app/src/components/loading/styled.ts @@ -1,19 +1,22 @@ import { styled } from '@/styles'; // Inspired by https://codepen.io/graphilla/pen/rNvBMYY -export const StyledLoadingWrapper = styled.div<{ size?: number }>( - ({ size = 40 }) => { - return { - width: size * 4, - height: size * 4, - position: 'relative', - }; - } -); +export const StyledLoadingWrapper = styled('div', { + shouldForwardProp: prop => { + return !['size'].includes(prop); + }, +})<{ size?: number }>(({ size = 40 }) => { + return { + width: size * 4, + height: size * 4, + position: 'relative', + }; +}); export const StyledLoading = styled.div` position: absolute; left: 25%; - top: 25%; + top: 50%; + transform: rotateX(55deg) rotateZ(-45deg); @keyframes slide { 0% { transform: translate(var(--sx), var(--sy)); diff --git a/packages/app/src/components/page-list/index.tsx b/packages/app/src/components/page-list/index.tsx index 2501f13ba..c275e8295 100644 --- a/packages/app/src/components/page-list/index.tsx +++ b/packages/app/src/components/page-list/index.tsx @@ -51,7 +51,7 @@ const FavoriteTag = ({ style={{ color: favorite ? theme.colors.primaryColor : theme.colors.iconColor, }} - className="favorite-button" + className={favorite ? '' : 'favorite-button'} > {favorite ? ( @@ -67,13 +67,15 @@ export const PageList = ({ pageList, showFavoriteTag = false, isTrash = false, + isPublic = false, }: { pageList: PageMeta[]; showFavoriteTag?: boolean; isTrash?: boolean; + isPublic?: boolean; }) => { const router = useRouter(); - const { currentWorkspaceId } = useAppState(); + const { currentWorkspace } = useAppState(); const { t } = useTranslation(); if (pageList.length === 0) { return ; @@ -98,9 +100,15 @@ export const PageList = ({ { - router.push( - `/workspace/${currentWorkspaceId}/${pageMeta.id}` - ); + if (isPublic) { + router.push( + `/public-workspace/${router.query.workspaceId}/${pageMeta.id}` + ); + } else { + router.push( + `/workspace/${currentWorkspace?.id}/${pageMeta.id}` + ); + } }} > @@ -124,19 +132,21 @@ export const PageList = ({ dateKey={isTrash ? 'trashDate' : 'updatedDate'} backupKey={isTrash ? 'trashDate' : 'createDate'} /> - { - e.stopPropagation(); - }} - > - {isTrash ? ( - - ) : ( - - )} - + {!isPublic ? ( + { + e.stopPropagation(); + }} + > + {isTrash ? ( + + ) : ( + + )} + + ) : null} ); })} diff --git a/packages/app/src/components/quick-search/Input.tsx b/packages/app/src/components/quick-search/Input.tsx index 69d47a16a..83ff131f7 100644 --- a/packages/app/src/components/quick-search/Input.tsx +++ b/packages/app/src/components/quick-search/Input.tsx @@ -17,10 +17,8 @@ export const Input = (props: { const [isComposition, setIsComposition] = useState(false); const [inputValue, setInputValue] = useState(''); const inputRef = useRef(null); - const { currentWorkspaceId, workspaceList, currentWorkspace } = useAppState(); - const isPublish = workspaceList.find( - meta => String(meta.id) === String(currentWorkspaceId) - )?.isPublish; + const { currentWorkspace } = useAppState(); + useEffect(() => { inputRef.current?.addEventListener( 'blur', @@ -79,8 +77,8 @@ export const Input = (props: { } }} placeholder={ - isPublish - ? `Search in ${currentWorkspace?.meta.name}` + currentWorkspace?.isPublish + ? `Search in ${currentWorkspace?.blocksuiteWorkspace?.meta.name}` : 'Quick Search...' } /> diff --git a/packages/app/src/components/quick-search/Results.tsx b/packages/app/src/components/quick-search/Results.tsx index a11206f33..fe9cc5d88 100644 --- a/packages/app/src/components/quick-search/Results.tsx +++ b/packages/app/src/components/quick-search/Results.tsx @@ -9,7 +9,6 @@ import { useSwitchToConfig } from './config'; import { NoResultSVG } from './NoResultSVG'; import { useTranslation } from '@affine/i18n'; import usePageHelper from '@/hooks/use-page-helper'; -import usePageMetaList from '@/hooks/use-page-meta-list'; export const Results = (props: { query: string; loading: boolean; @@ -21,12 +20,11 @@ export const Results = (props: { const setLoading = props.setLoading; const setShowCreatePage = props.setShowCreatePage; const { triggerQuickSearchModal } = useModal(); - const pageMetaList = usePageMetaList(); const { openPage } = usePageHelper(); const router = useRouter(); - const { currentWorkspaceId } = useAppState(); + const { currentWorkspace, pageList } = useAppState(); const { search } = usePageHelper(); - const List = useSwitchToConfig(currentWorkspaceId); + const List = useSwitchToConfig(currentWorkspace?.id); const [results, setResults] = useState(new Map()); const { t } = useTranslation(); useEffect(() => { @@ -37,12 +35,12 @@ export const Results = (props: { }, [query, setResults, setLoading]); const pageIds = [...results.values()]; - const resultsPageMeta = pageMetaList.filter( + const resultsPageMeta = pageList.filter( page => pageIds.indexOf(page.id) > -1 && !page.trash ); useEffect(() => { - setShowCreatePage(resultsPageMeta.length ? false : true); + setShowCreatePage(!resultsPageMeta.length); //Determine whether to display the ‘+ New page’ }, [resultsPageMeta, setShowCreatePage]); return loading ? null : ( diff --git a/packages/app/src/components/quick-search/config.ts b/packages/app/src/components/quick-search/config.ts index ce99ad562..4738e9355 100644 --- a/packages/app/src/components/quick-search/config.ts +++ b/packages/app/src/components/quick-search/config.ts @@ -1,15 +1,16 @@ +import { FC, SVGProps } from 'react'; import { AllPagesIcon, FavouritesIcon, TrashIcon } from '@blocksuite/icons'; import { useTranslation } from '@affine/i18n'; export const useSwitchToConfig = ( - currentWorkspaceId: string + currentWorkspaceId?: string ): { title: string; href: string; - icon: React.FC>; + icon: FC>; }[] => { const { t } = useTranslation(); - const List = [ + return [ { title: t('All pages'), href: currentWorkspaceId ? `/workspace/${currentWorkspaceId}/all` : '', @@ -28,5 +29,4 @@ export const useSwitchToConfig = ( icon: TrashIcon, }, ]; - return List; }; diff --git a/packages/app/src/components/quick-search/index.tsx b/packages/app/src/components/quick-search/index.tsx index 8199493a4..4000ce775 100644 --- a/packages/app/src/components/quick-search/index.tsx +++ b/packages/app/src/components/quick-search/index.tsx @@ -22,15 +22,13 @@ const isMac = () => { return getUaHelper().isMacOs; }; export const QuickSearch = ({ open, onClose }: TransitionsModalProps) => { - const { currentMetaWorkSpace } = useAppState(); + const { currentWorkspace } = useAppState(); const [query, setQuery] = useState(''); const [loading, setLoading] = useState(true); const [showCreatePage, setShowCreatePage] = useState(true); const { triggerQuickSearchModal } = useModal(); - const isPublish = currentMetaWorkSpace?.isPublish; - // Add ‘⌘+K’ shortcut keys as switches useEffect(() => { const down = (e: KeyboardEvent) => { @@ -96,7 +94,7 @@ export const QuickSearch = ({ open, onClose }: TransitionsModalProps) => { setShowCreatePage={setShowCreatePage} /> - {isPublish ? ( + {currentWorkspace?.isPublish ? ( <> ) : showCreatePage ? ( <> diff --git a/packages/app/src/components/workspace-avatar/index.tsx b/packages/app/src/components/workspace-avatar/index.tsx index 8300f1563..22f5fdd04 100644 --- a/packages/app/src/components/workspace-avatar/index.tsx +++ b/packages/app/src/components/workspace-avatar/index.tsx @@ -1,7 +1,4 @@ -import { useAppState } from '@/providers/app-state-provider'; import { stringToColour } from '@/utils'; -import { useEffect, useState } from 'react'; - interface IWorkspaceAvatar { size: number; name: string; @@ -25,7 +22,9 @@ export const WorkspaceAvatar = (props: IWorkspaceAvatar) => { overflow: 'hidden', }} > - + + + ) : (
{ const [createWorkspaceOpen, setCreateWorkspaceOpen] = useState(false); - // const { confirm } = useConfirm(); - const { workspaceList, currentWorkspace } = useAppState(); - const { login, user } = useUserHelper(); + const { confirm } = useConfirm(); + const { workspaceList, currentWorkspace, login, user, logout } = + useAppState(); const router = useRouter(); return (
@@ -55,7 +53,7 @@ export const WorkspaceModal = ({ open, onClose }: WorkspaceModalProps) => { router.replace(`/workspace/${item.id}`); onClose(); }} - active={item.id === currentWorkspace.room} + active={item.id === currentWorkspace?.id} key={index} > @@ -101,7 +99,7 @@ export const WorkspaceModal = ({ open, onClose }: WorkspaceModalProps) => { {item.provider === 'affine' && ( )} - {item.isPublish && } + {item.published && } {/* {item.isLocal ? 'isLocal' : ''}/ */} @@ -137,9 +135,9 @@ export const WorkspaceModal = ({ open, onClose }: WorkspaceModalProps) => {
{!user ? ( - { - setIsInviteModalShow(false); - }} - onInviteSuccess={() => { - setMembersList(); - setIsInviteModalShow(false); - // refreshMembers(); - }} - workspaceId={workspace.id} - open={isInviteModalShow} - > - - - ) : ( - - <>Collaborating with other members requires AFFiNE Cloud service. - - - - - )} -
- ); -}; diff --git a/packages/app/src/components/workspace-setting/PublishPage.tsx b/packages/app/src/components/workspace-setting/PublishPage.tsx index e931041fa..6cc17f68f 100644 --- a/packages/app/src/components/workspace-setting/PublishPage.tsx +++ b/packages/app/src/components/workspace-setting/PublishPage.tsx @@ -9,20 +9,16 @@ import { import { Button } from '@/ui/button'; import Input from '@/ui/input'; import { toast } from '@/ui/toast'; -import { useConfirm } from '@/providers/ConfirmProvider'; // import { useAppState } from '@/providers/app-state-provider3'; +import { WorkspaceUnit } from '@affine/datacenter'; import { useWorkspaceHelper } from '@/hooks/use-workspace-helper'; -import { WorkspaceInfo } from '@affine/datacenter'; -export const PublishPage = ({ workspace }: { workspace: WorkspaceInfo }) => { - const shareUrl = - window.location.host + '/workspace/' + workspace.id + '?share=true'; - const { publishWorkspace } = useWorkspaceHelper(); +export const PublishPage = ({ workspace }: { workspace: WorkspaceUnit }) => { + const shareUrl = window.location.host + '/public-workspace/' + workspace.id; + const { publishWorkspace, enableWorkspace } = useWorkspaceHelper(); - const { confirm } = useConfirm(); - - const togglePublic = (flag: boolean) => { - workspace.id && publishWorkspace(workspace?.id, flag); + const togglePublic = async (flag: boolean) => { + await publishWorkspace(workspace.id.toString(), flag); }; const copyUrl = () => { @@ -30,30 +26,15 @@ export const PublishPage = ({ workspace }: { workspace: WorkspaceInfo }) => { toast('Copied url to clipboard'); }; - const enableAffineCloud = () => { - confirm({ - title: 'Enable AFFiNE Cloud?', - content: `If enabled, the data in this workspace will be backed up and synchronized via AFFiNE Cloud.`, - confirmText: - workspace.provider === 'local' ? 'Enable' : 'Sign in and Enable', - cancelText: 'Skip', - }).then(confirm => { - if (confirm) { - // if (user) { - // updateWorkspaceMeta(workspace.id, { type: 'cloud' }); - // } else { - // login(); - // updateWorkspaceMeta(workspace.id, { type: 'cloud' }); - // } - } - }); + const enableAffineCloud = async () => { + await enableWorkspace(); }; return ( <> - {workspace.provider === 'cloud' ? ( + {workspace.provider === 'affine' ? (
- {workspace?.isPublish ? ( + {workspace?.published ? ( <> Publishing to web requires AFFiNE Cloud service . @@ -75,7 +56,7 @@ export const PublishPage = ({ workspace }: { workspace: WorkspaceInfo }) => { )} - {workspace.isPublish ? ( + {workspace.published ? ( { + setShowDelete(false); + }} workspace={workspace} /> ) : ( <> - { + setShowLeave(false); + }} /> )} diff --git a/packages/app/src/components/workspace-setting/general/delete/Delete.tsx b/packages/app/src/components/workspace-setting/general/delete/Delete.tsx index e459addea..59e73f738 100644 --- a/packages/app/src/components/workspace-setting/general/delete/Delete.tsx +++ b/packages/app/src/components/workspace-setting/general/delete/Delete.tsx @@ -12,17 +12,14 @@ import { useState } from 'react'; import { ModalCloseButton } from '@/ui/modal'; import { Button } from '@/ui/button'; import { useRouter } from 'next/router'; -import { - deleteWorkspace, - getWorkspaces, - // Workspace, -} from '@/hooks/mock-data/mock'; -import { WorkspaceInfo } from '@affine/datacenter'; + +import { WorkspaceUnit } from '@affine/datacenter'; +import { useWorkspaceHelper } from '@/hooks/use-workspace-helper'; interface WorkspaceDeleteProps { open: boolean; onClose: () => void; - workspace: WorkspaceInfo; + workspace: WorkspaceUnit; } export const WorkspaceDelete = ({ @@ -32,23 +29,15 @@ export const WorkspaceDelete = ({ }: WorkspaceDeleteProps) => { const [deleteStr, setDeleteStr] = useState(''); const router = useRouter(); - + const { deleteWorkSpace } = useWorkspaceHelper(); const handlerInputChange = (workspaceName: string) => { setDeleteStr(workspaceName); }; const handleDelete = async () => { - // const dc = await getDataCenter(); - // await dc.apis.deleteWorkspace({ id: workspaceId }); - // router.push(`/workspace/${nextWorkSpaceId}`); - deleteWorkspace(workspace.id); - const workspaceList = getWorkspaces(); - if (workspaceList.length) { - router.push(`/workspace/${workspaceList[0].id}`); - } else { - router.push(`/workspace`); - } + await deleteWorkSpace(); onClose(); + router.push(`/workspace`); }; return ( diff --git a/packages/app/src/components/workspace-setting/general/leave/Leave.tsx b/packages/app/src/components/workspace-setting/general/leave/Leave.tsx index e34b4ac25..aed3617ab 100644 --- a/packages/app/src/components/workspace-setting/general/leave/Leave.tsx +++ b/packages/app/src/components/workspace-setting/general/leave/Leave.tsx @@ -7,29 +7,19 @@ import { } from './style'; import { ModalCloseButton } from '@/ui/modal'; import { Button } from '@/ui/button'; +import { useWorkspaceHelper } from '@/hooks/use-workspace-helper'; // import { getDataCenter } from '@affine/datacenter'; // import { useAppState } from '@/providers/app-state-provider'; interface WorkspaceDeleteProps { open: boolean; onClose: () => void; - workspaceName: string; - workspaceId: string; } -export const WorkspaceLeave = ({ - open, - onClose, - workspaceId, -}: WorkspaceDeleteProps) => { - console.log('workspaceId: ', workspaceId); - // const router = useRouter(); - // const { refreshWorkspacesMeta } = useAppState(); +export const WorkspaceLeave = ({ open, onClose }: WorkspaceDeleteProps) => { + const { leaveWorkSpace } = useWorkspaceHelper(); const handleLeave = async () => { - // const dc = await getDataCenter(); - // await dc.apis.leaveWorkspace({ id: workspaceId }); - // // router.push(`/workspace/${nextWorkSpaceId}`); - // refreshWorkspacesMeta(); + await leaveWorkSpace(); onClose(); }; diff --git a/packages/app/src/components/workspace-setting/general/style.ts b/packages/app/src/components/workspace-setting/general/style.ts index 4a82017e9..739ec24ae 100644 --- a/packages/app/src/components/workspace-setting/general/style.ts +++ b/packages/app/src/components/workspace-setting/general/style.ts @@ -26,11 +26,3 @@ export const StyledSettingAvatarContent = styled('div')(() => { export const StyledSettingAvatar = styled(MuiAvatar)(() => { return { height: '72px', width: '72px', marginRight: '24px' }; }); - -export const StyledMemberWarp = styled('div')(() => { - return { - display: 'flex', - flexDirection: 'column', - padding: '40px 0', - }; -}); diff --git a/packages/app/src/components/workspace-setting/index.ts b/packages/app/src/components/workspace-setting/index.ts index c0eea1cfb..0468074d2 100644 --- a/packages/app/src/components/workspace-setting/index.ts +++ b/packages/app/src/components/workspace-setting/index.ts @@ -1,5 +1,5 @@ export * from './general'; export * from './ExportPage'; -export * from './MembersPage'; +export * from './member'; export * from './SyncPage'; export * from './PublishPage'; diff --git a/packages/app/src/components/invite-members/index.tsx b/packages/app/src/components/workspace-setting/member/InviteMemberModal.tsx similarity index 77% rename from packages/app/src/components/invite-members/index.tsx rename to packages/app/src/components/workspace-setting/member/InviteMemberModal.tsx index 6fb020fc5..c066908ed 100644 --- a/packages/app/src/components/invite-members/index.tsx +++ b/packages/app/src/components/workspace-setting/member/InviteMemberModal.tsx @@ -4,9 +4,9 @@ import { Modal, ModalWrapper, ModalCloseButton } from '@/ui/modal'; import { Button } from '@/ui/button'; import Input from '@/ui/input'; import { useState } from 'react'; -// import { getDataCenter } from '@affine/datacenter'; import { Avatar } from '@mui/material'; -import { setMember } from '@/hooks/mock-data/mock'; +import useMembers from '@/hooks/use-members'; +import { User } from '@affine/datacenter'; interface LoginModalProps { open: boolean; onClose: () => void; @@ -43,46 +43,27 @@ export const debounce = any>( }; const gmailReg = /^[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+@gmail\.com$/; -export const InviteMembers = ({ +export const InviteMemberModal = ({ open, onClose, - workspaceId, onInviteSuccess, }: LoginModalProps) => { const [email, setEmail] = useState(''); const [showMember, setShowMember] = useState(false); const [showTip, setShowTip] = useState(false); - // eslint-disable-next-line @typescript-eslint/no-explicit-any - const [userData, setUserData] = useState({}); + const [userData, setUserData] = useState(null); + const { inviteMember, getUserByEmail } = useMembers(); const inputChange = (value: string) => { setShowMember(true); if (gmailReg.test(value)) { setEmail(value); setShowTip(false); - setUserData({ - name: 'wxl', - avatar: 'https://avatars.githubusercontent.com/u/20501502?v=4', - email: value, + getUserByEmail(value).then(data => { + if (data?.name) { + setUserData(data); + setShowTip(false); + } }); - // debounce( - // () => { - // getDataCenter() - // .then(dc => - // dc.apis.getUserByEmail({ - // email: value, - // workspace_id: workspaceId, - // }) - // ) - // .then(data => { - // if (data?.name) { - // setUserData(data); - // setShowTip(false); - // } - // }); - // }, - // 300, - // true - // )(); } else { setShowTip(true); } @@ -118,8 +99,8 @@ export const InviteMembers = ({ Non-Gmail is not supported ) : ( - {userData?.avatar_url ? ( - + {userData?.avatar ? ( + ) : ( @@ -139,19 +120,9 @@ export const InviteMembers = ({ + { + setIsInviteModalShow(false); + }} + onInviteSuccess={() => { + setIsInviteModalShow(false); + // refreshMembers(); + }} + workspaceId={workspace.id} + open={isInviteModalShow} + > + + + ); + } + + return ( + + <>Collaborating with other members requires AFFiNE Cloud service. + + + + + ); +}; diff --git a/packages/app/src/components/workspace-setting/member/index.ts b/packages/app/src/components/workspace-setting/member/index.ts new file mode 100644 index 000000000..aced79efe --- /dev/null +++ b/packages/app/src/components/workspace-setting/member/index.ts @@ -0,0 +1 @@ +export * from './MembersPage'; diff --git a/packages/app/src/components/workspace-setting/member/style.ts b/packages/app/src/components/workspace-setting/member/style.ts new file mode 100644 index 000000000..eeea67d6d --- /dev/null +++ b/packages/app/src/components/workspace-setting/member/style.ts @@ -0,0 +1,106 @@ +import { styled } from '@/styles'; +import MuiAvatar from '@mui/material/Avatar'; + +export const StyledMemberTitleContainer = styled('div')(() => { + return { + display: 'flex', + marginTop: '60px', + fontWeight: '500', + flex: 1, + }; +}); + +export const StyledMemberAvatar = styled(MuiAvatar)(() => { + return { height: '40px', width: '40px' }; +}); + +export const StyledMemberNameContainer = styled('div')(() => { + return { + display: 'flex', + alignItems: 'center', + width: '402px', + }; +}); + +export const StyledMemberRoleContainer = styled('div')(() => { + return { + display: 'flex', + alignItems: 'center', + width: '222px', + }; +}); + +export const StyledMemberListContainer = styled('ul')(() => { + return { + marginTop: '15px', + overflowY: 'scroll', + }; +}); + +export const StyledMemberListItem = styled('li')(() => { + return { + display: 'flex', + alignItems: 'center', + height: '72px', + }; +}); + +export const StyledMemberInfo = styled('div')(() => { + return { + paddingLeft: '12px', + }; +}); + +export const StyledMemberName = styled('div')(({ theme }) => { + return { + fontWeight: '400', + fontSize: '18px', + lineHeight: '16px', + color: theme.colors.textColor, + }; +}); + +export const StyledMemberEmail = styled('div')(({ theme }) => { + return { + fontWeight: '400', + fontSize: '16px', + lineHeight: '22px', + color: theme.colors.iconColor, + }; +}); + +export const StyledMemberButtonContainer = styled('div')(() => { + return { + marginTop: '14px', + }; +}); + +export const StyledMoreVerticalButton = styled('button')(() => { + return { + display: 'flex', + justifyContent: 'center', + alignItems: 'center', + width: '24px', + height: '24px', + cursor: 'pointer', + }; +}); + +export const StyledPublishExplanation = styled('div')(() => { + return { + paddingRight: '48px', + fontWeight: '500', + fontSize: '18px', + lineHeight: '26px', + flex: 1, + marginTop: '60px', + }; +}); + +export const StyledMemberWarp = styled('div')(() => { + return { + display: 'flex', + flexDirection: 'column', + padding: '40px 0', + }; +}); diff --git a/packages/app/src/components/workspace-setting/style.ts b/packages/app/src/components/workspace-setting/style.ts index a6b162fab..f3177fe4d 100644 --- a/packages/app/src/components/workspace-setting/style.ts +++ b/packages/app/src/components/workspace-setting/style.ts @@ -1,8 +1,6 @@ import { styled } from '@/styles'; -import { Button } from '@/ui/button'; -import MuiAvatar from '@mui/material/Avatar'; -export const StyledSettingContainer = styled('div')(({ theme }) => { +export const StyledSettingContainer = styled('div')(() => { return { display: 'flex', padding: '50px', @@ -12,7 +10,7 @@ export const StyledSettingContainer = styled('div')(({ theme }) => { }; }); -export const StyledSettingSidebar = styled('div')(({ theme }) => { +export const StyledSettingSidebar = styled('div')(() => { { return { flexShrink: 0, @@ -96,99 +94,6 @@ export const StyledSettingH2 = styled('h2')<{ marginTop?: number }>( } ); -export const StyledAvatarUploadBtn = styled(Button)(({ theme }) => { - return { - backgroundColor: theme.colors.hoverBackground, - color: theme.colors.primaryColor, - margin: '0 12px 0 24px', - }; -}); - -export const StyledMemberTitleContainer = styled('div')(() => { - return { - display: 'flex', - marginTop: '60px', - fontWeight: '500', - flex: 1, - }; -}); - -export const StyledMemberAvatar = styled(MuiAvatar)(() => { - return { height: '40px', width: '40px' }; -}); - -export const StyledMemberNameContainer = styled('div')(() => { - return { - display: 'flex', - alignItems: 'center', - width: '402px', - }; -}); - -export const StyledMemberRoleContainer = styled('div')(() => { - return { - display: 'flex', - alignItems: 'center', - width: '222px', - }; -}); - -export const StyledMemberListContainer = styled('ul')(() => { - return { - marginTop: '15px', - overflowY: 'scroll', - }; -}); - -export const StyledMemberListItem = styled('li')(() => { - return { - display: 'flex', - alignItems: 'center', - height: '72px', - }; -}); - -export const StyledMemberInfo = styled('div')(() => { - return { - paddingLeft: '12px', - }; -}); - -export const StyledMemberName = styled('div')(({ theme }) => { - return { - fontWeight: '400', - fontSize: '18px', - lineHeight: '16px', - color: theme.colors.textColor, - }; -}); - -export const StyledMemberEmail = styled('div')(({ theme }) => { - return { - fontWeight: '400', - fontSize: '16px', - lineHeight: '22px', - color: theme.colors.iconColor, - }; -}); - -export const StyledMemberButtonContainer = styled('div')(() => { - return { - marginTop: '14px', - }; -}); - -export const StyledMoreVerticalButton = styled('button')(() => { - return { - display: 'flex', - justifyContent: 'center', - alignItems: 'center', - width: '24px', - height: '24px', - cursor: 'pointer', - }; -}); - export const StyledPublishExplanation = styled('div')(() => { return { paddingRight: '48px', diff --git a/packages/app/src/components/workspace-slider-bar/WorkspaceSelector/WorkspaceSelector.tsx b/packages/app/src/components/workspace-slider-bar/WorkspaceSelector/WorkspaceSelector.tsx index 2a19bd7d9..5997106ee 100644 --- a/packages/app/src/components/workspace-slider-bar/WorkspaceSelector/WorkspaceSelector.tsx +++ b/packages/app/src/components/workspace-slider-bar/WorkspaceSelector/WorkspaceSelector.tsx @@ -5,7 +5,7 @@ import { WorkspaceAvatar } from '@/components/workspace-avatar'; import { useAppState } from '@/providers/app-state-provider'; export const WorkspaceSelector = () => { const [workspaceListShow, setWorkspaceListShow] = useState(false); - const { currentMetaWorkSpace, workspaceList } = useAppState(); + const { currentWorkspace, workspaceList } = useAppState(); useEffect(() => { if (workspaceList.length === 0) { @@ -23,7 +23,7 @@ export const WorkspaceSelector = () => {
{ >
- {currentMetaWorkSpace?.name ?? 'AFFiNE'} + {currentWorkspace?.name ?? 'AFFiNE'} { const { openPage } = usePageHelper(); - const pageList = usePageMetaList(); + const { pageList } = useAppState(); const router = useRouter(); const { t } = useTranslation(); const favoriteList = pageList.filter(p => p.favorite && !p.trash); @@ -71,13 +67,13 @@ const FavoriteList = ({ showList }: { showList: boolean }) => { export const WorkSpaceSliderBar = () => { const { triggerQuickSearchModal, triggerImportModal } = useModal(); const [showSubFavorite, setShowSubFavorite] = useState(true); - const { currentWorkspaceId } = useAppState(); + const { currentWorkspace } = useAppState(); const { openPage, createPage } = usePageHelper(); const router = useRouter(); const { t } = useTranslation(); const [showTip, setShowTip] = useState(false); const [show, setShow] = useLocalStorage('AFFiNE_SLIDE_BAR', false, true); - + const currentWorkspaceId = currentWorkspace?.id; const paths = { all: currentWorkspaceId ? `/workspace/${currentWorkspaceId}/all` : '', favorite: currentWorkspaceId diff --git a/packages/app/src/hooks/mock-data/mock.ts b/packages/app/src/hooks/mock-data/mock.ts deleted file mode 100644 index 9a091e202..000000000 --- a/packages/app/src/hooks/mock-data/mock.ts +++ /dev/null @@ -1,160 +0,0 @@ -export interface Workspace { - name: string; // 名称 - id: string; //唯一标识 - isPublish?: boolean; // 是否公开 - isLocal?: boolean; // 是否全部数据都在本地 - avatar?: string; // 封面 - type: 'local' | 'cloud' | 'join'; // cloud: 云端(本次暂不支持),local: 本地,join : 加入别人的 - workspaceOwner?: User; // 本地工作空间的拥有者 -} - -export interface User { - name: string; - id: string; - email: string; - avatar: string; -} - -export function updateWorkspaceMeta( - workspaceId: string, - workspaceData: { - name?: string; - avatar?: string; - type?: 'local' | 'cloud' | 'join'; - } -) { - const workspacesMeta = getWorkspaces(); - const newWorkspacesMeta = workspacesMeta.map((workspace: Workspace) => { - if (workspace.id === workspaceId) { - workspaceData.name && (workspace.name = workspaceData.name); - workspaceData.avatar && (workspace.avatar = workspaceData.avatar); - workspaceData.type && (workspace.type = workspaceData.type); - return workspaceData; - } - return workspace; - }); - localStorage.setItem('affine-workspace', JSON.stringify(newWorkspacesMeta)); - const activeWorkspace = getActiveWorkspace(); - workspaceData.name && (activeWorkspace.name = workspaceData.name); - workspaceData.avatar && (activeWorkspace.avatar = workspaceData.avatar); - - workspaceData.type && (activeWorkspace.type = workspaceData.type); - console.log(workspaceData); - setActiveWorkspace(activeWorkspace); -} -export function createWorkspace(workspaceName: string) { - const workspaceId = 'workspace-' + Date.now(); - const workspaceData = { - name: workspaceName, - id: workspaceId, - isPublish: false, - isLocal: true, - avatar: '', - type: 'local', - } as Workspace; - const workspacesMeta = getWorkspaces(); - workspacesMeta.push(workspaceData); - localStorage.setItem('affine-workspace', JSON.stringify(workspacesMeta)); - setActiveWorkspace(workspaceData); - return { workspaceId }; -} - -export function getWorkspaces(): Workspace[] { - const workspacesMeta = JSON.parse( - localStorage.getItem('affine-workspace') ?? '[]' - ); - return workspacesMeta; -} - -export function deleteWorkspace(workspaceId: string) { - const workspacesMeta = getWorkspaces(); - const newWorkspacesMeta = workspacesMeta.filter(() => { - return workspaceId !== workspaceId; - }); - localStorage.setItem('affine-workspace', JSON.stringify(newWorkspacesMeta)); -} - -export function getMembers(id: string): User[] { - const memberMap = JSON.parse(localStorage.getItem('affine-member') ?? '{}'); - return memberMap[id] || []; -} - -export function setMember(workspaceId: string, member: User) { - const memberMap = JSON.parse(localStorage.getItem('affine-member') ?? '{}'); - memberMap[workspaceId] = memberMap[workspaceId] || []; - memberMap[workspaceId].push(member); - localStorage.setItem('affine-member', JSON.stringify(memberMap)); -} - -export function deleteMember(workspaceId: string, index: number) { - const memberMap = JSON.parse(localStorage.getItem('affine-member') ?? '{}'); - const memberList = memberMap[workspaceId]; - memberList.splice(index, 1); - memberMap[workspaceId] = memberList; - localStorage.setItem('affine-member', JSON.stringify(memberMap)); -} -export function leaveWorkspace() { - return true; -} - -export function setWorkspacePublish(id: string, isPublish: boolean): boolean { - const workspacesMeta = getWorkspaces(); - const newWorkspacesMeta = workspacesMeta.map((workspace: Workspace) => { - if (workspace.id === id) { - workspace.isPublish = isPublish; - } - return workspace; - }); - localStorage.setItem('affine-workspace', JSON.stringify(newWorkspacesMeta)); - return isPublish; -} - -export function getWorkspaceById(id: string) { - const workspacesMeta = getWorkspaces(); - return workspacesMeta.find((workspace: Workspace) => { - return workspace.id === id; - }); -} - -export function getPagesByWorkspaceId(workspaceId: string) { - if (!workspaceId) return []; - const workspacesMeta = []; - for (let i = 0; i < 10; i++) { - workspacesMeta.push({ - id: 'page-' + i, - name: 'page ' + i, - }); - } -} - -export function getActiveWorkspace(): Workspace { - return JSON.parse(localStorage.getItem('affine-active-workspace') ?? '{}'); -} - -export function setActiveWorkspace(workspaceData: Workspace) { - console.log('workspaceData: ', workspaceData); - localStorage.setItem( - 'affine-active-workspace', - JSON.stringify(workspaceData) - ); -} - -export function getUserInfo(): User { - return JSON.parse(localStorage.getItem('affine-user') ?? 'null'); -} - -export function Login(): void { - localStorage.setItem( - 'affine-user', - JSON.stringify({ - name: 'Diamond', - id: 'ttt', - email: 'diamond.shx@gmail.com', - avatar: 'string', - }) - ); -} - -export function SignOut(): void { - localStorage.removeItem('affine-user'); -} diff --git a/packages/app/src/hooks/use-change-page-meta.ts b/packages/app/src/hooks/use-change-page-meta.ts index 1b553f209..a01b7f186 100644 --- a/packages/app/src/hooks/use-change-page-meta.ts +++ b/packages/app/src/hooks/use-change-page-meta.ts @@ -11,7 +11,7 @@ export const useChangePageMeta = () => { return useCallback( (pageId, pageMeta) => { - currentWorkspace?.setPageMeta(pageId, { + currentWorkspace?.blocksuiteWorkspace?.setPageMeta(pageId, { ...pageMeta, }); }, diff --git a/packages/app/src/hooks/use-current-page-meta.ts b/packages/app/src/hooks/use-current-page-meta.ts index 14db9ae2a..5ce191935 100644 --- a/packages/app/src/hooks/use-current-page-meta.ts +++ b/packages/app/src/hooks/use-current-page-meta.ts @@ -9,7 +9,7 @@ export const useCurrentPageMeta = (): PageMeta | null => { return null; } return ( - (currentWorkspace.meta.pageMetas.find( + (currentWorkspace.blocksuiteWorkspace?.meta.pageMetas.find( p => p.id === currentPage.id ) as PageMeta) ?? null ); @@ -22,9 +22,11 @@ export const useCurrentPageMeta = (): PageMeta | null => { useEffect(() => { setCurrentPageMeta(pageMetaHandler); - const dispose = currentWorkspace?.meta.pagesUpdated.on(() => { - setCurrentPageMeta(pageMetaHandler); - }).dispose; + const dispose = currentWorkspace?.blocksuiteWorkspace?.meta.pagesUpdated.on( + () => { + setCurrentPageMeta(pageMetaHandler); + } + ).dispose; return () => { dispose?.(); diff --git a/packages/app/src/hooks/use-ensure-workspace.ts b/packages/app/src/hooks/use-ensure-workspace.ts index 205443aee..0ef15580a 100644 --- a/packages/app/src/hooks/use-ensure-workspace.ts +++ b/packages/app/src/hooks/use-ensure-workspace.ts @@ -1,15 +1,15 @@ import { useState, useEffect } from 'react'; import { useAppState } from '@/providers/app-state-provider'; import { useRouter } from 'next/router'; -const defaultOutLineWorkspaceId = 'affine'; -// 'local-first-' + '85b4ca0b9081421d903bbc2501ea280f'; // It is a fully effective hook // Cause it not just ensure workspace loaded, but also have router change. export const useEnsureWorkspace = () => { const [workspaceLoaded, setWorkspaceLoaded] = useState(false); const { workspaceList, loadWorkspace, user } = useAppState(); - console.log('workspaceList: ', workspaceList); const router = useRouter(); + const [activeWorkspaceId, setActiveWorkspaceId] = useState( + router.query.workspaceId as string + ); // const defaultOutLineWorkspaceId = '99ce7eb7'; // console.log(defaultOutLineWorkspaceId); @@ -18,7 +18,8 @@ export const useEnsureWorkspace = () => { // If workspaceList is empty, we need to create a default workspace but not jump to 404 if ( workspaceList.length && - router.query.workspaceId && + // FIXME: router is not ready when this hook is called + location.pathname.startsWith(`/workspace/${router.query.workspaceId}`) && workspaceList.findIndex( meta => meta.id.toString() === router.query.workspaceId ) === -1 @@ -35,18 +36,17 @@ export const useEnsureWorkspace = () => { // router.push('/404'); // return; // } - - const workspaceId = user - ? (router.query.workspaceId as string) || workspaceList[0]?.id - : (router.query.workspaceId as string) || defaultOutLineWorkspaceId; - + const workspaceId = + (router.query.workspaceId as string) || workspaceList[0]?.id; loadWorkspace(workspaceId).finally(() => { setWorkspaceLoaded(true); + setActiveWorkspaceId(activeWorkspaceId); }); - }, [loadWorkspace, router, user, workspaceList]); + }, [loadWorkspace, router, user, workspaceList, activeWorkspaceId]); return { workspaceLoaded, + activeWorkspaceId, }; }; diff --git a/packages/app/src/hooks/use-init-workspace.ts b/packages/app/src/hooks/use-init-workspace.ts deleted file mode 100644 index 4f916365c..000000000 --- a/packages/app/src/hooks/use-init-workspace.ts +++ /dev/null @@ -1,34 +0,0 @@ -import { useRouter } from 'next/router'; -import { useAppState } from '@/providers/app-state-provider'; -import { useEffect, useRef, useState } from 'react'; - -export const useInitWorkspace = (disabled?: boolean) => { - const [loading, setLoading] = useState(true); - // Do not set as a constant, or it will trigger a hell of re-rendering - const defaultOutLineWorkspaceId = useRef(new Date().getTime().toString()); - - const router = useRouter(); - const { workspaceList, loadWorkspace, currentWorkspace, currentWorkspaceId } = - useAppState(); - const workspaceId = - (router.query.workspaceId as string) || - workspaceList?.[0]?.id || - defaultOutLineWorkspaceId.current; - - useEffect(() => { - if (disabled) { - setLoading(false); - return; - } - setLoading(true); - loadWorkspace(workspaceId).finally(() => { - setLoading(false); - }); - }, [workspaceId, disabled, loadWorkspace]); - - return { - workspaceId, - workspace: workspaceId === currentWorkspaceId ? currentWorkspace : null, - loading, - }; -}; diff --git a/packages/app/src/hooks/use-members.ts b/packages/app/src/hooks/use-members.ts new file mode 100644 index 000000000..3011c94f8 --- /dev/null +++ b/packages/app/src/hooks/use-members.ts @@ -0,0 +1,51 @@ +import { useCallback, useEffect, useState } from 'react'; +import { Member } from '@affine/datacenter'; +import { useAppState } from '@/providers/app-state-provider'; +export const useMembers = () => { + const { dataCenter, currentWorkspace } = useAppState(); + const [members, setMembers] = useState([]); + const [loaded, setLoaded] = useState(false); + const refreshMembers = useCallback(async () => { + if (!currentWorkspace || !dataCenter) return; + const members = await dataCenter.getMembers(currentWorkspace.id); + setMembers(members); + }, [dataCenter, currentWorkspace]); + + useEffect(() => { + const init = async () => { + await refreshMembers(); + setLoaded(true); + }; + init(); + }, [refreshMembers]); + + const inviteMember = async (email: string) => { + currentWorkspace && + dataCenter && + (await dataCenter.inviteMember(currentWorkspace?.id, email)); + }; + + const removeMember = async (permissionId: number) => { + if (!currentWorkspace || !dataCenter) { + return; + } + setLoaded(false); + await dataCenter.removeMember(currentWorkspace.id, permissionId); + await refreshMembers(); + setLoaded(true); + }; + + const getUserByEmail = async (email: string) => { + if (!currentWorkspace) return null; + return dataCenter?.getUserByEmail(currentWorkspace.id, email); + }; + return { + members, + removeMember, + inviteMember, + getUserByEmail, + loaded, + }; +}; + +export default useMembers; diff --git a/packages/app/src/hooks/use-page-helper.ts b/packages/app/src/hooks/use-page-helper.ts index e4bf4f295..00133b03e 100644 --- a/packages/app/src/hooks/use-page-helper.ts +++ b/packages/app/src/hooks/use-page-helper.ts @@ -1,9 +1,10 @@ -import { Workspace, uuidv4 } from '@blocksuite/store'; +import { uuidv4 } from '@blocksuite/store'; import { QueryContent } from '@blocksuite/store/dist/workspace/search'; import { PageMeta, useAppState } from '@/providers/app-state-provider'; import { EditorContainer } from '@blocksuite/editor'; import { useChangePageMeta } from '@/hooks/use-change-page-meta'; import { useRouter } from 'next/router'; +import { WorkspaceUnit } from '@affine/datacenter'; export type EditorHandlers = { createPage: (params?: { @@ -27,13 +28,15 @@ export type EditorHandlers = { ) => Promise; }; -const getPageMeta = (workspace: Workspace | null, pageId: string) => { - return workspace?.meta.pageMetas.find(p => p.id === pageId); +const getPageMeta = (workspace: WorkspaceUnit | null, pageId: string) => { + return workspace?.blocksuiteWorkspace?.meta.pageMetas.find( + p => p.id === pageId + ); }; export const usePageHelper = (): EditorHandlers => { const router = useRouter(); const changePageMeta = useChangePageMeta(); - const { currentWorkspace, editor, currentWorkspaceId } = useAppState(); + const { currentWorkspace, editor } = useAppState(); return { createPage: ({ @@ -44,11 +47,15 @@ export const usePageHelper = (): EditorHandlers => { if (!currentWorkspace) { return resolve(null); } - currentWorkspace.createPage(pageId); - currentWorkspace.signals.pageAdded.once(addedPageId => { - currentWorkspace.setPageMeta(addedPageId, { title }); - resolve(addedPageId); - }); + currentWorkspace.blocksuiteWorkspace?.createPage(pageId); + currentWorkspace.blocksuiteWorkspace?.signals.pageAdded.once( + addedPageId => { + currentWorkspace.blocksuiteWorkspace?.setPageMeta(addedPageId, { + title, + }); + resolve(addedPageId); + } + ); }); }, toggleFavoritePage: async pageId => { @@ -78,7 +85,7 @@ export const usePageHelper = (): EditorHandlers => { }, search: (query: QueryContent) => { // eslint-disable-next-line @typescript-eslint/no-non-null-assertion - return currentWorkspace!.search(query); + return currentWorkspace!.blocksuiteWorkspace!.search(query); }, changePageMode: async (pageId, mode) => { const pageMeta = getPageMeta(currentWorkspace, pageId); @@ -96,17 +103,17 @@ export const usePageHelper = (): EditorHandlers => { permanentlyDeletePage: pageId => { // TODO: workspace.meta.removePage or workspace.removePage? // eslint-disable-next-line @typescript-eslint/no-non-null-assertion - currentWorkspace!.meta.removePage(pageId); + currentWorkspace!.blocksuiteWorkspace?.meta.removePage(pageId); }, openPage: (pageId, query = {}, newTab = false) => { pageId = pageId.replace('space:', ''); if (newTab) { - window.open(`/workspace/${currentWorkspaceId}/${pageId}`, '_blank'); + window.open(`/workspace/${currentWorkspace?.id}/${pageId}`, '_blank'); return Promise.resolve(true); } return router.push({ - pathname: `/workspace/${currentWorkspaceId}/${pageId}`, + pathname: `/workspace/${currentWorkspace?.id}/${pageId}`, query, }); }, @@ -116,7 +123,7 @@ export const usePageHelper = (): EditorHandlers => { } return ( - (currentWorkspace.meta.pageMetas.find( + (currentWorkspace.blocksuiteWorkspace?.meta.pageMetas.find( page => page.id === pageId ) as PageMeta) || null ); diff --git a/packages/app/src/hooks/use-page-meta-list.ts b/packages/app/src/hooks/use-page-meta-list.ts deleted file mode 100644 index b500cca7b..000000000 --- a/packages/app/src/hooks/use-page-meta-list.ts +++ /dev/null @@ -1,25 +0,0 @@ -import { useEffect, useState } from 'react'; -import { PageMeta } from '@/providers/app-state-provider'; -import { useAppState } from '@/providers/app-state-provider'; - -export const usePageMetaList = () => { - const { currentWorkspace } = useAppState(); - const [pageList, setPageList] = useState([]); - - useEffect(() => { - if (!currentWorkspace) { - return; - } - setPageList(currentWorkspace.meta.pageMetas as PageMeta[]); - const dispose = currentWorkspace.meta.pagesUpdated.on(() => { - setPageList(currentWorkspace.meta.pageMetas as PageMeta[]); - }).dispose; - return () => { - dispose(); - }; - }, [currentWorkspace]); - - return pageList; -}; - -export default usePageMetaList; diff --git a/packages/app/src/hooks/use-user-helper.ts b/packages/app/src/hooks/use-user-helper.ts deleted file mode 100644 index 7d837cec5..000000000 --- a/packages/app/src/hooks/use-user-helper.ts +++ /dev/null @@ -1,28 +0,0 @@ -import { useAppState } from '@/providers/app-state-provider'; -import { User } from '@affine/datacenter'; -import { useEffect, useState } from 'react'; - -export const useUserHelper = () => { - const { dataCenter } = useAppState(); - const [user, setUser] = useState(undefined); - useEffect(() => { - dataCenter - .getUserInfo() - .then(user => { - setUser(user); - }) - .catch(e => { - setUser(undefined); - }); - }, []); - - const login = async () => { - await dataCenter.login(); - const user = await dataCenter.getUserInfo(); - setUser(user); - }; - return { - user, - login, - }; -}; diff --git a/packages/app/src/hooks/use-workspace-helper.ts b/packages/app/src/hooks/use-workspace-helper.ts index 4d6493a25..f1dee901d 100644 --- a/packages/app/src/hooks/use-workspace-helper.ts +++ b/packages/app/src/hooks/use-workspace-helper.ts @@ -1,14 +1,18 @@ import { useAppState } from '@/providers/app-state-provider'; -import { Workspace } from '@blocksuite/store'; +import { useConfirm } from '@/providers/ConfirmProvider'; +import { toast } from '@/ui/toast'; +import { WorkspaceUnit } from '@affine/datacenter'; +import router from 'next/router'; + export const useWorkspaceHelper = () => { - const { dataCenter } = useAppState(); + const { confirm } = useConfirm(); + const { dataCenter, currentWorkspace, user, login } = useAppState(); const createWorkspace = async (name: string) => { const workspaceInfo = await dataCenter.createWorkspace({ name: name, }); - if (workspaceInfo && workspaceInfo.room) { - const workspace = await dataCenter.loadWorkspace(workspaceInfo.room); - return workspace; + if (workspaceInfo && workspaceInfo.id) { + return await dataCenter.loadWorkspace(workspaceInfo.id); } return null; }; @@ -16,31 +20,56 @@ export const useWorkspaceHelper = () => { // const updateWorkspace = async (workspace: Workspace) => {}; const publishWorkspace = async (workspaceId: string, publish: boolean) => { - dataCenter.setWorkspacePublish(workspaceId, publish); + await dataCenter.setWorkspacePublish(workspaceId, publish); }; const updateWorkspace = async ( { name, avatarBlob }: { name?: string; avatarBlob?: Blob }, - workspace: Workspace + workspace: WorkspaceUnit ) => { if (name) { await dataCenter.updateWorkspaceMeta({ name }, workspace); } if (avatarBlob) { - const blobId = await dataCenter.setBlob(workspace, avatarBlob); - await dataCenter.updateWorkspaceMeta({ avatar: blobId }, workspace); + // const blobId = await dataCenter.setBlob(workspace, avatarBlob); + // await dataCenter.updateWorkspaceMeta({ avatar: blobId }, workspace); } }; - const enableWorkspace = async (workspace: Workspace) => { - const newWorkspaceId = await dataCenter.enableWorkspaceCloud(workspace); - // console.log('newWorkspace: ', newWorkspace); - return newWorkspaceId; + const enableWorkspace = async () => { + confirm({ + title: 'Enable AFFiNE Cloud?', + content: `If enabled, the data in this workspace will be backed up and synchronized via AFFiNE Cloud.`, + confirmText: user ? 'Enable' : 'Sign in and Enable', + cancelText: 'Skip', + }).then(async confirm => { + if (confirm && currentWorkspace) { + if (!user) { + await login(); + } + const workspace = await dataCenter.enableWorkspaceCloud( + currentWorkspace + ); + workspace && router.push(`/workspace/${workspace.id}/setting`); + toast('Enabled success'); + } + }); }; + + const deleteWorkSpace = async () => { + currentWorkspace && + (await dataCenter.deleteWorkspace(currentWorkspace?.id)); + }; + const leaveWorkSpace = async () => { + currentWorkspace && (await dataCenter.leaveWorkspace(currentWorkspace?.id)); + }; + return { createWorkspace, publishWorkspace, updateWorkspace, enableWorkspace, + deleteWorkSpace, + leaveWorkSpace, }; }; diff --git a/packages/app/src/pages/_app.tsx b/packages/app/src/pages/_app.tsx index c6cb2f6e6..bc06e51a4 100644 --- a/packages/app/src/pages/_app.tsx +++ b/packages/app/src/pages/_app.tsx @@ -21,7 +21,6 @@ import { useAppState } from '@/providers/app-state-provider'; import { PageLoading } from '@/components/loading'; import Head from 'next/head'; import '@affine/i18n'; -import TemporaryHelperProvider from '@/providers/temporary-helper-provider'; const ThemeProvider = dynamic(() => import('@/providers/ThemeProvider'), { ssr: false, @@ -55,10 +54,8 @@ const App = ({ Component, pageProps }: AppPropsWithLayout) => { , , , - // , , , ]} diff --git a/packages/app/src/pages/new-workspace/index.tsx b/packages/app/src/pages/new-workspace/index.tsx deleted file mode 100644 index 1a1d9e1a4..000000000 --- a/packages/app/src/pages/new-workspace/index.tsx +++ /dev/null @@ -1,47 +0,0 @@ -import { WorkspaceModal } from '@/components/workspace-modal'; -import { getWorkspaces } from '@/hooks/mock-data/mock'; -import { useEffect, useState } from 'react'; -import { styled } from '@/styles'; -import Button from '@/ui/button/Button'; - -const Page = () => { - const [open, setOpen] = useState(false); - - useEffect(() => { - const data = getWorkspaces(); - if (!data.length) { - setOpen(true); - } - }, []); - return ( - -

workspace

-
- -
- { - setOpen(false); - }} - > -
- ); -}; -export default Page; - -const Workspace = styled.div(({ theme }) => { - return { - height: '100vh', - background: theme.colors.pageBackground, - color: '#FFFFFF', - fontSize: '18px', - fontWeight: 500, - }; -}); diff --git a/packages/app/src/pages/playground/templates.tsx b/packages/app/src/pages/playground/templates.tsx index 3dc825b1e..e30fdbee6 100644 --- a/packages/app/src/pages/playground/templates.tsx +++ b/packages/app/src/pages/playground/templates.tsx @@ -37,11 +37,11 @@ const All = () => { const { openPage, createPage } = usePageHelper(); const { currentWorkspace } = useAppState(); const _applyTemplate = function (pageId: string, template: Template) { - const page = currentWorkspace?.getPage(pageId); + const page = currentWorkspace?.blocksuiteWorkspace?.getPage(pageId); const title = template.name; if (page) { - currentWorkspace?.setPageMeta(page.id, { title }); + currentWorkspace?.blocksuiteWorkspace?.setPageMeta(page.id, { title }); if (page && page.root === null) { setTimeout(async () => { const editor = document.querySelector('editor-container'); diff --git a/packages/app/src/pages/public-workspace/[workspaceId]/[pageId].tsx b/packages/app/src/pages/public-workspace/[workspaceId]/[pageId].tsx new file mode 100644 index 000000000..734e627f3 --- /dev/null +++ b/packages/app/src/pages/public-workspace/[workspaceId]/[pageId].tsx @@ -0,0 +1,69 @@ +import { ReactElement, useEffect, useState } from 'react'; +import { useAppState } from '@/providers/app-state-provider'; +import type { NextPageWithLayout } from '../..//_app'; +import { styled } from '@/styles'; +import dynamic from 'next/dynamic'; +import { useRouter } from 'next/router'; +import { Page as PageStore, Workspace } from '@blocksuite/store'; +const DynamicBlocksuite = dynamic(() => import('@/components/editor'), { + ssr: false, +}); +const Page: NextPageWithLayout = () => { + const [workspace, setWorkspace] = useState(); + const [page, setPage] = useState(); + const { dataCenter } = useAppState(); + const router = useRouter(); + useEffect(() => { + dataCenter + .loadPublicWorkspace(router.query.workspaceId as string) + .then(data => { + if (data && data.blocksuiteWorkspace) { + setWorkspace(data.blocksuiteWorkspace); + if ( + router.query.pageId && + data.blocksuiteWorkspace.meta.pageMetas.find( + p => p.id === router.query.pageId + ) + ) { + const page = data.blocksuiteWorkspace?.getPage( + router.query.pageId as string + ); + page && setPage(page); + } else { + router.push('/404'); + } + } + }) + .catch(() => { + router.push('/404'); + }); + }, [router, dataCenter]); + return ( + + {workspace && page && ( + { + editor.readonly = true; + }} + /> + )} + + ); +}; + +Page.getLayout = function getLayout(page: ReactElement) { + return
{page}
; +}; + +export default Page; + +export const PageContainer = styled.div(({ theme }) => { + return { + height: 'calc(100vh)', + padding: '78px 72px', + overflowY: 'auto', + backgroundColor: theme.colors.pageBackground, + }; +}); diff --git a/packages/app/src/pages/public-workspace/[workspaceId]/index.tsx b/packages/app/src/pages/public-workspace/[workspaceId]/index.tsx new file mode 100644 index 000000000..113c61c2a --- /dev/null +++ b/packages/app/src/pages/public-workspace/[workspaceId]/index.tsx @@ -0,0 +1,36 @@ +import { PageList } from '@/components/page-list'; +import { ReactElement, useEffect, useState } from 'react'; +import { PageMeta, useAppState } from '@/providers/app-state-provider'; +import { useRouter } from 'next/router'; +import { PageContainer } from './[pageId]'; +const All = () => { + const { dataCenter } = useAppState(); + const router = useRouter(); + const [pageList, setPageList] = useState([]); + useEffect(() => { + dataCenter + .loadPublicWorkspace(router.query.workspaceId as string) + .then(data => { + setPageList(data.blocksuiteWorkspace?.meta.pageMetas as PageMeta[]); + }) + .catch(() => { + router.push('/404'); + }); + }, [router, dataCenter]); + + return ( + + !p.trash)} + showFavoriteTag={false} + isPublic={true} + /> + + ); +}; + +All.getLayout = function getLayout(page: ReactElement) { + return
{page}
; +}; + +export default All; diff --git a/packages/app/src/pages/workspace/[workspaceId]/[pageId].tsx b/packages/app/src/pages/workspace/[workspaceId]/[pageId].tsx index 2fc86ff58..ebb5b8b93 100644 --- a/packages/app/src/pages/workspace/[workspaceId]/[pageId].tsx +++ b/packages/app/src/pages/workspace/[workspaceId]/[pageId].tsx @@ -1,4 +1,3 @@ -/* eslint-disable @typescript-eslint/no-non-null-assertion */ import { PropsWithChildren, ReactElement, @@ -31,10 +30,10 @@ const Page: NextPageWithLayout = () => { - {currentPage && ( + {currentPage && currentWorkspace?.blocksuiteWorkspace && ( )} @@ -52,9 +51,10 @@ const PageDefender = ({ children }: PropsWithChildren) => { useEffect(() => { const initPage = async () => { const pageId = router.query.pageId as string; - const isPageExist = !!currentWorkspace!.meta.pageMetas.find( - p => p.id === pageId - ); + const isPageExist = + currentWorkspace?.blocksuiteWorkspace?.meta?.pageMetas.find( + p => p.id === pageId + ); if (!isPageExist) { await createPage({ pageId }); } diff --git a/packages/app/src/pages/workspace/[workspaceId]/all.tsx b/packages/app/src/pages/workspace/[workspaceId]/all.tsx index 155a4303e..27718d02e 100644 --- a/packages/app/src/pages/workspace/[workspaceId]/all.tsx +++ b/packages/app/src/pages/workspace/[workspaceId]/all.tsx @@ -1,18 +1,18 @@ import { PageList } from '@/components/page-list'; import { AllPagesIcon } from '@blocksuite/icons'; -import usePageMetaList from '@/hooks/use-page-meta-list'; import { PageListHeader } from '@/components/header'; import { ReactElement } from 'react'; import WorkspaceLayout from '@/components/workspace-layout'; import { useTranslation } from '@affine/i18n'; +import { useAppState } from '@/providers/app-state-provider'; const All = () => { - const pageMetaList = usePageMetaList(); + const { pageList } = useAppState(); const { t } = useTranslation(); return ( <> }>{t('All pages')} !p.trash)} + pageList={pageList.filter(p => !p.trash)} showFavoriteTag={true} /> diff --git a/packages/app/src/pages/workspace/[workspaceId]/favorite.tsx b/packages/app/src/pages/workspace/[workspaceId]/favorite.tsx index bc64db309..5e9e9ad75 100644 --- a/packages/app/src/pages/workspace/[workspaceId]/favorite.tsx +++ b/packages/app/src/pages/workspace/[workspaceId]/favorite.tsx @@ -1,19 +1,19 @@ import { PageListHeader } from '@/components/header'; import { PageList } from '@/components/page-list'; import { FavouritesIcon } from '@blocksuite/icons'; -import usePageMetaList from '@/hooks/use-page-meta-list'; import { ReactElement } from 'react'; import WorkspaceLayout from '@/components/workspace-layout'; import { useTranslation } from '@affine/i18n'; +import { useAppState } from '@/providers/app-state-provider'; export const Favorite = () => { - const pageMetaList = usePageMetaList(); + const { pageList } = useAppState(); const { t } = useTranslation(); return ( <> }> {t('Favourites')} - p.favorite && !p.trash)} /> + p.favorite && !p.trash)} /> ); }; diff --git a/packages/app/src/pages/workspace/[workspaceId]/index.tsx b/packages/app/src/pages/workspace/[workspaceId]/index.tsx index d502f5798..f946e2926 100644 --- a/packages/app/src/pages/workspace/[workspaceId]/index.tsx +++ b/packages/app/src/pages/workspace/[workspaceId]/index.tsx @@ -7,31 +7,32 @@ import usePageHelper from '@/hooks/use-page-helper'; const WorkspaceIndex = () => { const router = useRouter(); - const { currentWorkspaceId, currentWorkspace } = useAppState(); + const { currentWorkspace } = useAppState(); const { createPage } = usePageHelper(); - const { workspaceLoaded } = useEnsureWorkspace(); + const { workspaceLoaded, activeWorkspaceId } = useEnsureWorkspace(); useEffect(() => { const initPage = async () => { if (!workspaceLoaded) { return; } - const savedPageId = currentWorkspace?.meta.pageMetas[0]?.id; + const savedPageId = + currentWorkspace?.blocksuiteWorkspace?.meta.pageMetas[0]?.id; if (savedPageId) { - router.replace(`/workspace/${currentWorkspaceId}/${savedPageId}`); + router.replace(`/workspace/${activeWorkspaceId}/${savedPageId}`); return; } const pageId = await createPage(); - router.replace(`/workspace/${currentWorkspaceId}/${pageId}`); + router.replace(`/workspace/${activeWorkspaceId}/${pageId}`); }; initPage(); }, [ currentWorkspace, - currentWorkspaceId, createPage, router, workspaceLoaded, + activeWorkspaceId, ]); return ; diff --git a/packages/app/src/pages/workspace/[workspaceId]/setting.tsx b/packages/app/src/pages/workspace/[workspaceId]/setting.tsx index 48255cab3..e39a42416 100644 --- a/packages/app/src/pages/workspace/[workspaceId]/setting.tsx +++ b/packages/app/src/pages/workspace/[workspaceId]/setting.tsx @@ -23,14 +23,14 @@ import { } from '@/components/workspace-setting'; import { useAppState } from '@/providers/app-state-provider'; import WorkspaceLayout from '@/components/workspace-layout'; -import { WorkspaceInfo } from '@affine/datacenter'; +import { WorkspaceUnit } from '@affine/datacenter'; type TabNames = 'general' | 'members' | 'publish' | 'sync' | 'export'; const tabMap: { name: TabNames; icon: ReactNode; - panelRender: (workspace: WorkspaceInfo) => ReactNode; + panelRender: (workspace: WorkspaceUnit) => ReactNode; }[] = [ { name: 'general', @@ -60,7 +60,7 @@ const tabMap: { ]; const WorkspaceSetting = () => { - const { currentMetaWorkSpace } = useAppState(); + const { currentWorkspace, isOwner } = useAppState(); const [activeTab, setActiveTab] = useState(tabMap[0].name); const handleTabChange = (tab: TabNames) => { @@ -70,7 +70,20 @@ const WorkspaceSetting = () => { const activeTabPanelRender = tabMap.find( tab => tab.name === activeTab )?.panelRender; - + let tableArr: { + name: TabNames; + icon: ReactNode; + panelRender: (workspace: WorkspaceUnit) => ReactNode; + }[] = tabMap; + if (!isOwner) { + tableArr = [ + { + name: 'general', + icon: , + panelRender: workspace => , + }, + ]; + } return ( @@ -78,7 +91,7 @@ const WorkspaceSetting = () => { Workspace Settings - {tabMap.map(({ icon, name }) => { + {tableArr.map(({ icon, name }) => { return ( { - {currentMetaWorkSpace && activeTabPanelRender?.(currentMetaWorkSpace)} + {currentWorkspace && activeTabPanelRender?.(currentWorkspace)} ); diff --git a/packages/app/src/pages/workspace/[workspaceId]/trash.tsx b/packages/app/src/pages/workspace/[workspaceId]/trash.tsx index 07fa7ea1f..bbcc742a6 100644 --- a/packages/app/src/pages/workspace/[workspaceId]/trash.tsx +++ b/packages/app/src/pages/workspace/[workspaceId]/trash.tsx @@ -1,17 +1,17 @@ import { PageListHeader } from '@/components/header'; import { PageList } from '@/components/page-list'; import { TrashIcon } from '@blocksuite/icons'; -import usePageMetaList from '@/hooks/use-page-meta-list'; import { ReactElement } from 'react'; import WorkspaceLayout from '@/components/workspace-layout'; import { useTranslation } from '@affine/i18n'; +import { useAppState } from '@/providers/app-state-provider'; export const Trash = () => { - const pageMetaList = usePageMetaList(); + const { pageList } = useAppState(); const { t } = useTranslation(); return ( <> }>{t('Trash')} - p.trash)} isTrash={true} /> + p.trash)} isTrash={true} /> ); }; diff --git a/packages/app/src/pages/workspace/index.tsx b/packages/app/src/pages/workspace/index.tsx index 1fe3ba2c1..ec96879e5 100644 --- a/packages/app/src/pages/workspace/index.tsx +++ b/packages/app/src/pages/workspace/index.tsx @@ -6,14 +6,14 @@ import { PageLoading } from '@/components/loading'; export const WorkspaceIndex = () => { const router = useRouter(); - const { currentWorkspaceId } = useAppState(); + const { currentWorkspace } = useAppState(); const { workspaceLoaded } = useEnsureWorkspace(); useEffect(() => { if (workspaceLoaded) { - router.push(`/workspace/${currentWorkspaceId}`); + router.push(`/workspace/${currentWorkspace?.id}`); } - }, [currentWorkspaceId, router, workspaceLoaded]); + }, [currentWorkspace, router, workspaceLoaded]); return ; }; diff --git a/packages/app/src/providers/app-state-provider/Provider.tsx b/packages/app/src/providers/app-state-provider/Provider.tsx index 2c85e560e..3e864b76d 100644 --- a/packages/app/src/providers/app-state-provider/Provider.tsx +++ b/packages/app/src/providers/app-state-provider/Provider.tsx @@ -8,7 +8,7 @@ import { PageMeta, } from './interface'; import { createDefaultWorkspace } from './utils'; -import { WorkspaceInfo } from '@affine/datacenter'; +import { User } from '@affine/datacenter'; type AppStateContextProps = PropsWithChildren>; @@ -20,63 +20,61 @@ export const AppStateProvider = ({ children, }: PropsWithChildren) => { const [appState, setAppState] = useState({} as AppStateValue); - useEffect(() => { - const init = async () => { + const initState = async () => { const dataCenter = await getDataCenter(); - + // Ensure datacenter has at least one workspace if (dataCenter.workspaces.length === 0) { await createDefaultWorkspace(dataCenter); } - const currentWorkspace = await dataCenter.loadWorkspace( - dataCenter.workspaces[0].id - ); - const currentMetaWorkSpace = dataCenter.workspaces.find(item => { - return item.id === currentWorkspace.room; - }); setAppState({ dataCenter, user: (await dataCenter.getUserInfo()) || null, workspaceList: dataCenter.workspaces, - currentWorkspaceId: dataCenter.workspaces[0].id, - currentWorkspace, - pageList: currentWorkspace.meta.pageMetas as PageMeta[], + currentWorkspace: null, + pageList: [], currentPage: null, editor: null, synced: true, - currentMetaWorkSpace: currentMetaWorkSpace ?? null, + isOwner: false, }); }; - init(); + initState(); }, []); useEffect(() => { - if (!appState?.currentWorkspace) { + if (!appState?.currentWorkspace?.blocksuiteWorkspace) { return; } const currentWorkspace = appState.currentWorkspace; - const dispose = currentWorkspace.meta.pagesUpdated.on(() => { - setAppState({ - ...appState, - pageList: currentWorkspace.meta.pageMetas as PageMeta[], - }); - }).dispose; + const dispose = currentWorkspace?.blocksuiteWorkspace?.meta.pagesUpdated.on( + () => { + setAppState({ + ...appState, + pageList: currentWorkspace.blocksuiteWorkspace?.meta + .pageMetas as PageMeta[], + }); + } + ).dispose; return () => { - dispose(); + dispose && dispose(); }; }, [appState]); useEffect(() => { const { dataCenter } = appState; // FIXME: onWorkspacesChange should have dispose function - dataCenter?.onWorkspacesChange(() => { - setAppState({ - ...appState, - workspaceList: dataCenter.workspaces, - }); - }); + dataCenter?.onWorkspacesChange( + () => { + setAppState({ + ...appState, + workspaceList: dataCenter.workspaces, + }); + }, + { immediate: false } + ); }, [appState]); const loadPage = useRef(); @@ -85,7 +83,7 @@ export const AppStateProvider = ({ if (pageId === currentPage?.id) { return; } - const page = currentWorkspace?.getPage(pageId) || null; + const page = currentWorkspace?.blocksuiteWorkspace?.getPage(pageId) || null; setAppState({ ...appState, currentPage: page, @@ -94,28 +92,30 @@ export const AppStateProvider = ({ const loadWorkspace = useRef(); loadWorkspace.current = async (workspaceId: string) => { - const { dataCenter, workspaceList, currentWorkspaceId, currentWorkspace } = - appState; - if (!workspaceList.find(v => v.id === workspaceId)) { + const { dataCenter, workspaceList, currentWorkspace, user } = appState; + if (!workspaceList.find(v => v.id.toString() === workspaceId)) { return null; } - if (workspaceId === currentWorkspaceId) { + if (workspaceId === currentWorkspace?.id) { return currentWorkspace; } - const workspace = await dataCenter.loadWorkspace(workspaceId); - const currentMetaWorkSpace = dataCenter.workspaces.find( - (item: WorkspaceInfo) => { - return item.id === workspace.room; - } - ); + const workspace = (await dataCenter.loadWorkspace(workspaceId)) ?? null; + let isOwner; + if (workspace.provider === 'local') { + // isOwner is useful only in the cloud + isOwner = true; + } else { + isOwner = workspace?.owner && user?.id === workspace?.owner?.id; + } + const pageList = + (workspace?.blocksuiteWorkspace?.meta.pageMetas as PageMeta[]) ?? []; setAppState({ ...appState, currentWorkspace: workspace, - currentWorkspaceId: workspaceId, - currentMetaWorkSpace: currentMetaWorkSpace ?? null, - pageList: currentWorkspace.meta.pageMetas as PageMeta[], + pageList: pageList, currentPage: null, editor: null, + isOwner, }); return workspace; @@ -130,6 +130,26 @@ export const AppStateProvider = ({ }); }; + const login = async () => { + const { dataCenter } = appState; + await dataCenter.login(); + const user = (await dataCenter.getUserInfo()) as User; + setAppState({ + ...appState, + user, + }); + return user; + }; + + const logout = async () => { + const { dataCenter } = appState; + await dataCenter.logout(); + setAppState({ + ...appState, + user: null, + }); + }; + return ( {children} diff --git a/packages/app/src/providers/app-state-provider/interface.ts b/packages/app/src/providers/app-state-provider/interface.ts index 4e5ec6a9b..c76b2993c 100644 --- a/packages/app/src/providers/app-state-provider/interface.ts +++ b/packages/app/src/providers/app-state-provider/interface.ts @@ -1,9 +1,8 @@ -import { DataCenter, User, WorkspaceInfo } from '@affine/datacenter'; +import { DataCenter, User, WorkspaceUnit } from '@affine/datacenter'; import type { EditorContainer } from '@blocksuite/editor'; import type { Page as StorePage, - Workspace as StoreWorkspace, PageMeta as StorePageMeta, } from '@blocksuite/store'; import { MutableRefObject } from 'react'; @@ -18,21 +17,23 @@ export interface PageMeta extends StorePageMeta { export type AppStateValue = { dataCenter: DataCenter; user: User | null; - workspaceList: WorkspaceInfo[]; - currentWorkspace: StoreWorkspace; - currentMetaWorkSpace: WorkspaceInfo | null; - currentWorkspaceId: string; + workspaceList: WorkspaceUnit[]; + currentWorkspace: WorkspaceUnit | null; pageList: PageMeta[]; currentPage: StorePage | null; editor?: EditorContainer | null; synced: boolean; + isOwner?: boolean; }; export type AppStateFunction = { setEditor: MutableRefObject<(page: EditorContainer) => void>; - loadWorkspace: (workspaceId: string) => Promise; + loadWorkspace: (workspaceId: string) => Promise; loadPage: (pageId: string) => void; + + login: () => Promise; + logout: () => Promise; }; export type AppStateContext = AppStateValue & AppStateFunction; diff --git a/packages/app/src/providers/app-state-provider/utils.ts b/packages/app/src/providers/app-state-provider/utils.ts index 066ef7a2c..6dc3c8cca 100644 --- a/packages/app/src/providers/app-state-provider/utils.ts +++ b/packages/app/src/providers/app-state-provider/utils.ts @@ -4,7 +4,6 @@ const DEFAULT_WORKSPACE_NAME = 'affine'; export const createDefaultWorkspace = async (dataCenter: DataCenter) => { return dataCenter.createWorkspace({ - avatar: 'test', name: DEFAULT_WORKSPACE_NAME, }); }; diff --git a/packages/app/src/providers/temporary-helper-provider.tsx b/packages/app/src/providers/temporary-helper-provider.tsx deleted file mode 100644 index 5731646a1..000000000 --- a/packages/app/src/providers/temporary-helper-provider.tsx +++ /dev/null @@ -1,183 +0,0 @@ -import { createContext, useContext, useEffect, useState } from 'react'; -import type { PropsWithChildren } from 'react'; -import { getWorkspaces, User, Workspace } from '@/hooks/mock-data/mock'; - -type TemporaryContextValue = { - workspaceMetaList: Workspace[]; - currentWorkspace: Workspace | null; - user: User | null; - - updateWorkspaceMeta: ( - workspaceId: string, - workspaceData: { - name?: string; - avatar?: string; - isPublish?: boolean; - type?: 'local' | 'cloud' | 'join'; - } - ) => void; - - createWorkspace: (workspaceName: string) => Workspace; - - deleteWorkspace: (workspaceId: string) => void; - - setWorkspacePublish: (id: string, isPublish: boolean) => void; - - setActiveWorkspace: (workspaceData: Workspace) => void; - - login: () => void; - - signOut: () => void; -}; -type TemporaryContextProps = PropsWithChildren>; - -export const TemporaryContext = createContext({ - workspaceMetaList: [], - currentWorkspace: null, - user: null, - - // eslint-disable-next-line @typescript-eslint/no-empty-function - updateWorkspaceMeta: () => {}, - - createWorkspace: () => { - return {} as Workspace; - }, - // eslint-disable-next-line @typescript-eslint/no-empty-function - deleteWorkspace: () => {}, - // eslint-disable-next-line @typescript-eslint/no-empty-function - setWorkspacePublish: () => {}, - // eslint-disable-next-line @typescript-eslint/no-empty-function - setActiveWorkspace: () => {}, - // eslint-disable-next-line @typescript-eslint/no-empty-function - login: () => {}, - // eslint-disable-next-line @typescript-eslint/no-empty-function - signOut: () => {}, -}); - -export const useTemporaryHelper = () => useContext(TemporaryContext); - -export const TemporaryHelperProvider = ({ - children, -}: PropsWithChildren) => { - const [workspaceMetaList, setWorkspaceMetaList] = useState([]); - const [currentWorkspace, setCurrentWorkspace] = useState( - null - ); - const [user, setUser] = useState(null); - - useEffect(() => { - setWorkspaceMetaList(getWorkspaces()); - setCurrentWorkspace( - JSON.parse(localStorage.getItem('affine-active-workspace') ?? '{}') - ); - }, []); - - return ( - { - const workspacesMeta = getWorkspaces(); - const newWorkspacesMeta = workspacesMeta.map( - (workspace: Workspace) => { - if (workspace.id === workspaceId) { - const workspaceObj = Object.assign(workspace, workspaceData); - return workspaceObj; - } - return workspace; - } - ); - localStorage.setItem( - 'affine-workspace', - JSON.stringify(newWorkspacesMeta) - ); - setWorkspaceMetaList(newWorkspacesMeta); - if (workspaceId === currentWorkspace?.id) { - setCurrentWorkspace( - // eslint-disable-next-line @typescript-eslint/ban-ts-comment - // @ts-ignore - newWorkspacesMeta.find(v => v.id === currentWorkspace.id) - ); - } - }, - createWorkspace: workspaceName => { - const workspaceData = { - name: workspaceName, - id: 'workspace-' + Date.now(), - isPublish: false, - isLocal: true, - avatar: '', - type: 'local', - } as Workspace; - const workspacesMeta = getWorkspaces(); - workspacesMeta.push(workspaceData); - localStorage.setItem( - 'affine-workspace', - JSON.stringify(workspacesMeta) - ); - - setWorkspaceMetaList([...workspacesMeta]); - return workspaceData; - }, - deleteWorkspace: workspaceId => { - const workspacesMeta = getWorkspaces(); - const newWorkspacesMeta = workspacesMeta.filter(() => { - return workspaceId !== workspaceId; - }); - localStorage.setItem( - 'affine-workspace', - JSON.stringify(newWorkspacesMeta) - ); - setWorkspaceMetaList(workspacesMeta); - }, - - setWorkspacePublish: (id, isPublish) => { - const workspacesMeta = getWorkspaces(); - const newWorkspacesMeta = workspacesMeta.map( - (workspace: Workspace) => { - if (workspace.id === id) { - workspace.isPublish = isPublish; - } - return workspace; - } - ); - localStorage.setItem( - 'affine-workspace', - JSON.stringify(newWorkspacesMeta) - ); - setWorkspaceMetaList(workspacesMeta); - }, - setActiveWorkspace(workspaceData) { - localStorage.setItem( - 'affine-active-workspace', - JSON.stringify(workspaceData) - ); - setCurrentWorkspace(workspaceData); - }, - - login: () => { - const userInfo = { - name: 'Diamond', - id: 'ttt', - email: 'diamond.shx@gmail.com', - avatar: 'string', - }; - localStorage.setItem('affine-user', JSON.stringify(userInfo)); - setUser(userInfo); - }, - - signOut(): void { - localStorage.removeItem('affine-user'); - setUser(null); - }, - }} - > - {children} - - ); -}; - -export default TemporaryHelperProvider; diff --git a/packages/app/src/ui/table/styles.ts b/packages/app/src/ui/table/styles.ts index 009888e8b..ab1a2629d 100644 --- a/packages/app/src/ui/table/styles.ts +++ b/packages/app/src/ui/table/styles.ts @@ -9,7 +9,7 @@ export const StyledTable = styled.table<{ tableLayout: 'auto' | 'fixed' }>( tableLayout, width: '100%', borderCollapse: 'separate', - borderSpacing: '0 25px', + borderSpacing: '0', }; } ); @@ -52,7 +52,6 @@ export const StyledTableHead = styled.thead(() => { export const StyledTableRow = styled.tr(({ theme }) => { return { - marginBottom: '25px', td: { transition: 'background .15s', }, diff --git a/packages/data-center/package.json b/packages/data-center/package.json index bff567a3d..4dce08d73 100644 --- a/packages/data-center/package.json +++ b/packages/data-center/package.json @@ -26,9 +26,8 @@ "typescript": "^4.8.4" }, "dependencies": { - "@blocksuite/blocks": "0.4.0-20230110112105-ef07332", - "@blocksuite/store": "0.4.0-20230110112105-ef07332", - "@tauri-apps/api": "^1.2.0", + "@blocksuite/blocks": "0.3.1-20230109032243-37ad3ba", + "@blocksuite/store": "0.3.1-20230109032243-37ad3ba", "debug": "^4.3.4", "encoding": "^0.1.13", "firebase": "^9.15.0", @@ -37,8 +36,7 @@ "ky-universal": "^0.11.0", "lib0": "^0.2.58", "swr": "^2.0.0", - "y-protocols": "^1.0.5", - "yjs": "^13.5.44" + "y-protocols": "^1.0.5" }, "peerDependencies": { "@blocksuite/blocks": "0.3.1-*", diff --git a/packages/data-center/src/datacenter.ts b/packages/data-center/src/datacenter.ts index 2d275e5ca..306b9f018 100644 --- a/packages/data-center/src/datacenter.ts +++ b/packages/data-center/src/datacenter.ts @@ -13,7 +13,7 @@ import assert from 'assert'; import { getLogger } from './logger'; import { createBlocksuiteWorkspace } from './utils/index.js'; import { MessageCenter } from './message'; -import type { WorkspaceUnit } from './workspace-unit'; +import { WorkspaceUnit } from './workspace-unit'; /** * @class DataCenter @@ -105,12 +105,7 @@ export class DataCenter { 'There is no provider. You should add provider first.' ); - const workspaceMeta = await this._mainProvider.createWorkspaceInfo(params); - - const workspace = createBlocksuiteWorkspace(workspaceMeta.id); - - await this._mainProvider.createWorkspace(workspace, workspaceMeta); - const workspaceUnit = this._workspaceUnitCollection.find(workspaceMeta.id); + const workspaceUnit = await this._mainProvider.createWorkspace(params); return workspaceUnit; } @@ -131,8 +126,8 @@ export class DataCenter { * @param {string} workspaceId workspace id */ private _getBlocksuiteWorkspace(workspaceId: string) { - const workspaceInfo = this._workspaceUnitCollection.find(workspaceId); - assert(workspaceInfo, 'Workspace not found'); + // const workspaceInfo = this._workspaceUnitCollection.find(workspaceId); + // assert(workspaceInfo, 'Workspace not found'); return ( // this._workspaceInstances.get(workspaceId) || createBlocksuiteWorkspace(workspaceId) @@ -178,12 +173,36 @@ export class DataCenter { this._workspaceInstances.set(workspaceId, workspace); await provider.warpWorkspace(workspace); this._workspaceUnitCollection.workspaces.forEach(workspaceUnit => { - workspaceUnit.setBlocksuiteWorkspace(null); + const provider = this.providerMap.get(workspaceUnit.provider); + assert(provider); + provider.closeWorkspace(workspaceUnit.id); }); workspaceUnit.setBlocksuiteWorkspace(workspace); return workspaceUnit; } + public async loadPublicWorkspace(workspaceId: string) { + // FIXME: hard code for public workspace + const provider = this.providerMap.get('affine'); + assert(provider); + const blocksuiteWorkspace = this._getBlocksuiteWorkspace(workspaceId); + await provider.loadPublicWorkspace(blocksuiteWorkspace); + + const workspaceUnitForPublic = new WorkspaceUnit({ + id: workspaceId, + name: blocksuiteWorkspace.meta.name, + avatar: blocksuiteWorkspace.meta.avatar, + owner: undefined, + published: true, + provider: 'affine', + memberCount: 1, + syncMode: 'core', + }); + + workspaceUnitForPublic.setBlocksuiteWorkspace(blocksuiteWorkspace); + return workspaceUnitForPublic; + } + /** * get user info by provider id * @param {string} providerId the provider name of workspace @@ -309,55 +328,33 @@ export class DataCenter { } } - private async _transWorkspaceProvider( - workspace: BlocksuiteWorkspace, - providerId: string + public async enableProvider( + workspaceUnit: WorkspaceUnit, + providerId = 'affine' ) { - assert(workspace.room, 'No workspace id'); - const workspaceInfo = this._workspaceUnitCollection.find(workspace.room); - assert(workspaceInfo, 'Workspace not found'); - if (workspaceInfo.provider === providerId) { + if (workspaceUnit.provider === providerId) { this._logger('Workspace provider is same'); return; } - const currentProvider = this.providerMap.get(workspaceInfo.provider); - assert(currentProvider, 'Provider not found'); - const newProvider = this.providerMap.get(providerId); - assert(newProvider, `provide '${providerId}' is not registered`); - this._logger(`create ${providerId} workspace: `, workspaceInfo.name); - const newWorkspaceInfo = await newProvider.createWorkspaceInfo({ - name: workspaceInfo.name, - // avatar: workspaceInfo.avatar, - }); - const newWorkspace = createBlocksuiteWorkspace(newWorkspaceInfo.id); - // TODO optimize this function - await newProvider.createWorkspace(newWorkspace, { - ...newWorkspaceInfo, - name: workspaceInfo.name, - avatar: workspaceInfo.avatar, - }); + const provider = this.providerMap.get(providerId); + assert(provider); + const newWorkspaceUnit = await provider.extendWorkspace(workspaceUnit); - assert(newWorkspace, 'Create workspace failed'); - this._logger( - `update workspace data from ${workspaceInfo.provider} to ${providerId}` - ); - await newProvider.assign(newWorkspace, workspace); - assert(newWorkspace, 'Create workspace failed'); - await currentProvider.deleteWorkspace(workspace.room); - return newWorkspace.room; + // Currently we only allow enable one provider, so after enable new provider, + // delete the old workspace from its provider. + const oldProvider = this.providerMap.get(workspaceUnit.provider); + assert(oldProvider); + await oldProvider.deleteWorkspace(workspaceUnit.id); + + return newWorkspaceUnit; } /** * Enable workspace cloud * @param {string} id ID of workspace. */ - public async enableWorkspaceCloud(workspace: WorkspaceUnit) { - assert(workspace?.id, 'No workspace to enable cloud'); - assert(workspace.blocksuiteWorkspace); - return await this._transWorkspaceProvider( - workspace.blocksuiteWorkspace, - 'affine' - ); + public async enableWorkspaceCloud(workspaceUnit: WorkspaceUnit) { + return this.enableProvider(workspaceUnit); } /** @@ -425,6 +422,18 @@ export class DataCenter { return []; } + /** + * accept invitation + * @param {string} inviteCode + */ + async acceptInvitation(inviteCode: string, providerStr = 'affine') { + const provider = this.providerMap.get(providerStr); + if (provider) { + return await provider.acceptInvitation(inviteCode); + } + return []; + } + onMessage(cb: (message: Message) => void) { return this._messageCenter.onMessage(cb); } diff --git a/packages/data-center/src/index.ts b/packages/data-center/src/index.ts index b0a5a7b37..591a83b14 100644 --- a/packages/data-center/src/index.ts +++ b/packages/data-center/src/index.ts @@ -26,7 +26,8 @@ const _initializeDataCenter = () => { export const getDataCenter = _initializeDataCenter(); export type { DataCenter }; -export type { AccessTokenMessage } from './provider/affine/apis'; +export * from './provider/affine/apis'; export { WorkspaceUnit } from './workspace-unit'; export { getLogger } from './logger'; export * from './message'; +export * from './types'; diff --git a/packages/data-center/src/provider/affine/affine.ts b/packages/data-center/src/provider/affine/affine.ts index 977edb557..f33080fc3 100644 --- a/packages/data-center/src/provider/affine/affine.ts +++ b/packages/data-center/src/provider/affine/affine.ts @@ -6,17 +6,30 @@ import type { } from '../base'; import type { User } from '../../types'; import { Workspace as BlocksuiteWorkspace } from '@blocksuite/store'; -import { BlockSchema } from '@blocksuite/blocks/models'; import { storage } from './storage.js'; import assert from 'assert'; import { WebsocketProvider } from './sync.js'; // import { IndexedDBProvider } from '../local/indexeddb'; -import { getApis } from './apis/index.js'; +import { getApis, Workspace } from './apis/index.js'; import type { Apis, WorkspaceDetail, Callback } from './apis'; import { setDefaultAvatar } from '../utils.js'; -import { MessageCode } from '../../message'; +import { MessageCode } from '../../message/index.js'; import { token } from './apis/token.js'; import { WebsocketClient } from './channel'; +import { + loadWorkspaceUnit, + createWorkspaceUnit, + syncToCloud, +} from './utils.js'; +import { WorkspaceUnit } from '../../workspace-unit.js'; +import { createBlocksuiteWorkspace, applyUpdate } from '../../utils/index.js'; +import type { SyncMode } from '../../workspace-unit'; + +type ChannelMessage = { + ws_list: Workspace[]; + ws_details: Record; + metadata: Record; +}; export interface AffineProviderConstructorParams extends ProviderConstructorParams { @@ -24,7 +37,7 @@ export interface AffineProviderConstructorParams } const { - Y: { applyUpdate, encodeStateAsUpdate }, + Y: { encodeStateAsUpdate }, } = BlocksuiteWorkspace; export class AffineProvider extends BaseProvider { @@ -33,21 +46,12 @@ export class AffineProvider extends BaseProvider { private _onTokenRefresh?: Callback = undefined; private _wsMap: Map = new Map(); private _apis: Apis; - private _channel: WebsocketClient; + private _channel?: WebsocketClient; // private _idbMap: Map = new Map(); constructor({ apis, ...params }: AffineProviderConstructorParams) { super(params); this._apis = apis || getApis(); - this._channel = new WebsocketClient( - `${window.location.protocol === 'https:' ? 'wss' : 'ws'}://${ - window.location.host - }/global/sync/`, - this._logger - ); - if (token.isLogin) { - this._connectChannel(); - } } override async init() { @@ -76,14 +80,59 @@ export class AffineProvider extends BaseProvider { } else { storage.setItem('token', this._apis.token.refresh); } + + if (token.isLogin) { + this._connectChannel(); + } } private _connectChannel() { - this._channel.connect(); + if (!this._channel) { + this._channel = new WebsocketClient( + `${window.location.protocol === 'https:' ? 'wss' : 'ws'}://${ + window.location.host + }/api/global/sync/`, + this._logger, + { + params: { + token: this._apis.token.refresh, + }, + } + ); + } + this._channel.on('message', (msg: ChannelMessage) => { + this._handlerAffineListMessage(msg); + }); + } - // eslint-disable-next-line @typescript-eslint/no-explicit-any - this._channel.on('message', (message: any) => { - console.log('message', message); + private _handlerAffineListMessage({ ws_details, metadata }: ChannelMessage) { + this._logger('receive server message'); + Object.entries(ws_details).forEach(async ([id, detail]) => { + const { name, avatar } = metadata[id]; + assert(name); + const workspace = { + name: name, + avatar, + owner: { + name: detail.owner.name, + id: detail.owner.id, + email: detail.owner.email, + avatar: detail.owner.avatar_url, + }, + published: detail.public, + memberCount: detail.member_count, + provider: 'affine', + syncMode: 'core' as SyncMode, + }; + if (this._workspaces.get(id)) { + this._workspaces.update(id, workspace); + } else { + const workspaceUnit = await loadWorkspaceUnit( + { id, ...workspace }, + this._apis + ); + this._workspaces.add(workspaceUnit); + } }); } @@ -104,16 +153,19 @@ export class AffineProvider extends BaseProvider { return ws; } - private async _applyCloudUpdates(blocksuiteWorkspace: BlocksuiteWorkspace) { - const { doc, room: workspaceId } = blocksuiteWorkspace; + private async _applyCloudUpdates( + blocksuiteWorkspace: BlocksuiteWorkspace, + published = false + ) { + const { room: workspaceId } = blocksuiteWorkspace; assert(workspaceId, 'Blocksuite Workspace without room(workspaceId).'); - const updates = await this._apis.downloadWorkspace(workspaceId); - if (updates && updates.byteLength) { - await new Promise(resolve => { - doc.once('update', resolve); - BlocksuiteWorkspace.Y.applyUpdate(doc, new Uint8Array(updates)); - }); - } + const updates = await this._apis.downloadWorkspace(workspaceId, published); + await applyUpdate(blocksuiteWorkspace, new Uint8Array(updates)); + } + + override async loadPublicWorkspace(blocksuiteWorkspace: BlocksuiteWorkspace) { + await this._applyCloudUpdates(blocksuiteWorkspace, true); + return blocksuiteWorkspace; } override async warpWorkspace(workspace: BlocksuiteWorkspace) { @@ -145,78 +197,25 @@ export class AffineProvider extends BaseProvider { return []; } const workspacesList = await this._apis.getWorkspaces(); - const workspaces: WorkspaceMeta0[] = workspacesList.map(w => { - return { - ...w, - memberCount: 0, - name: '', - provider: 'affine', - syncMode: 'core', - }; - }); - const workspaceInstances = workspaces.map(({ id }) => { - const workspace = - this._workspacesCache.get(id) || - new BlocksuiteWorkspace({ - room: id, - }).register(BlockSchema); - this._workspacesCache.set(id, workspace); - if (workspace) { - return new Promise(resolve => { - this._apis.downloadWorkspace(id).then(data => { - applyUpdate(workspace.doc, new Uint8Array(data)); - resolve(workspace); - }); - }); - } else { - return Promise.resolve(null); - } - }); - - (await Promise.all(workspaceInstances)).forEach((workspace, i) => { - if (workspace) { - workspaces[i] = { - ...workspaces[i], - name: workspace.meta.name, - avatar: workspace.meta.avatar, - }; - } - }); - const getDetailList = workspacesList.map(w => { - const { id } = w; - return new Promise<{ id: string; detail: WorkspaceDetail | null }>( - resolve => { - this._apis.getWorkspaceDetail({ id }).then(data => { - resolve({ id, detail: data || null }); - }); - } - ); - }); - const ownerList = await Promise.all(getDetailList); - (await Promise.all(ownerList)).forEach(detail => { - if (detail) { - const { id, detail: workspaceDetail } = detail; - if (workspaceDetail) { - const { owner, member_count } = workspaceDetail; - const currentWorkspace = workspaces.find(w => w.id === id); - if (currentWorkspace) { - currentWorkspace.owner = { - id: owner.id, - name: owner.name, - avatar: owner.avatar_url, - email: owner.email, - }; - currentWorkspace.memberCount = member_count; - } - } - } - }); - - workspaces.forEach(workspace => { - this._workspaces.add(workspace); - }); - - return workspaces; + const workspaceUnits = await Promise.all( + workspacesList.map(w => { + return loadWorkspaceUnit( + { + id: w.id, + name: '', + avatar: undefined, + owner: undefined, + published: w.public, + memberCount: 1, + provider: 'affine', + syncMode: 'core', + }, + this._apis + ); + }) + ); + this._workspaces.add(workspaceUnits); + return workspaceUnits; } override async auth() { @@ -229,7 +228,7 @@ export class AffineProvider extends BaseProvider { } } const user = await this._apis.signInWithGoogle?.(); - if (!this._channel.connected) { + if (!this._channel?.connected) { this._connectChannel(); } if (!user) { @@ -238,6 +237,7 @@ export class AffineProvider extends BaseProvider { } public override async getUserInfo(): Promise { + await this.init(); const user = this._apis.token.user; await this.init; return user @@ -302,52 +302,29 @@ export class AffineProvider extends BaseProvider { // return workspace; } - public override async createWorkspaceInfo( + public override async createWorkspace( meta: CreateWorkspaceInfoParams - ): Promise { + ): Promise { const { id } = await this._apis.createWorkspace(meta); - const workspaceInfo: WorkspaceMeta0 = { + const workspaceUnit = await createWorkspaceUnit({ + id, name: meta.name, - id: id, - published: false, - avatar: '', + avatar: undefined, owner: await this.getUserInfo(), - syncMode: 'core', - memberCount: 1, - provider: 'affine', - }; - return workspaceInfo; - } - - public override async createWorkspace( - blocksuiteWorkspace: BlocksuiteWorkspace, - meta: WorkspaceMeta0 - ): Promise { - const workspaceId = blocksuiteWorkspace.room; - assert(workspaceId, 'Blocksuite Workspace without room(workspaceId).'); - this._logger('Creating affine workspace'); - - this._applyCloudUpdates(blocksuiteWorkspace); - this.linkLocal(blocksuiteWorkspace); - - const workspaceInfo: WorkspaceMeta0 = { - name: meta.name, - id: workspaceId, published: false, - avatar: '', - owner: undefined, - syncMode: 'core', memberCount: 1, provider: 'affine', - }; + syncMode: 'core', + }); - if (!blocksuiteWorkspace.meta.avatar) { - await setDefaultAvatar(blocksuiteWorkspace); - workspaceInfo.avatar = blocksuiteWorkspace.meta.avatar; - } - this._workspaces.add(workspaceInfo); - return blocksuiteWorkspace; + await syncToCloud( + workspaceUnit.blocksuiteWorkspace!, + this._apis.token.refresh + ); + this._workspaces.add(workspaceUnit); + + return workspaceUnit; } public override async publish(id: string, isPublish: boolean): Promise { @@ -358,38 +335,52 @@ export class AffineProvider extends BaseProvider { workspace_id: string, email: string ): Promise { - const user = await this._apis.getUserByEmail({ workspace_id, email }); - return user + const users = await this._apis.getUserByEmail({ workspace_id, email }); + return users?.length ? { - id: user.id, - name: user.name, - avatar: user.avatar_url, - email: user.email, + id: users[0].id, + name: users[0].name, + avatar: users[0].avatar_url, + email: users[0].email, } : null; } - public override async assign( - to: BlocksuiteWorkspace, - from: BlocksuiteWorkspace - ): Promise { - assert(to.room, 'Blocksuite Workspace without room(workspaceId).'); - const ws = this._getWebsocketProvider(to); - applyUpdate(to.doc, encodeStateAsUpdate(from.doc)); - // TODO: upload blobs and make sure doc is synced - await new Promise((resolve, reject) => { - ws.once('synced', () => { - setTimeout(() => resolve(), 1000); - }); - ws.once('lost-connection', () => reject()); - ws.once('connection-error', () => reject()); + public override async extendWorkspace( + workspaceUnit: WorkspaceUnit + ): Promise { + const { id } = await this._apis.createWorkspace({ + name: workspaceUnit.name, }); - return to; + const newWorkspaceUnit = new WorkspaceUnit({ + id, + name: workspaceUnit.name, + avatar: undefined, + owner: await this.getUserInfo(), + published: false, + memberCount: 1, + provider: 'affine', + syncMode: 'core', + }); + + const blocksuiteWorkspace = createBlocksuiteWorkspace(id); + assert(workspaceUnit.blocksuiteWorkspace); + await applyUpdate( + blocksuiteWorkspace, + encodeStateAsUpdate(workspaceUnit.blocksuiteWorkspace.doc) + ); + + await syncToCloud(blocksuiteWorkspace, this._apis.token.refresh); + + newWorkspaceUnit.setBlocksuiteWorkspace(blocksuiteWorkspace); + + this._workspaces.add(newWorkspaceUnit); + return newWorkspaceUnit; } public override async logout(): Promise { token.clear(); - this._channel.disconnect(); + this._channel?.disconnect(); this._wsMap.forEach(ws => ws.disconnect()); storage.removeItem('token'); } @@ -397,4 +388,8 @@ export class AffineProvider extends BaseProvider { public override async getWorkspaceMembers(id: string) { return this._apis.getWorkspaceMembers({ id }); } + + public override async acceptInvitation(invitingCode: string): Promise { + await this._apis.acceptInviting({ invitingCode }); + } } diff --git a/packages/data-center/src/provider/affine/apis/user.ts b/packages/data-center/src/provider/affine/apis/user.ts index 2848a9b67..58ede20fc 100644 --- a/packages/data-center/src/provider/affine/apis/user.ts +++ b/packages/data-center/src/provider/affine/apis/user.ts @@ -15,7 +15,7 @@ export interface User { export async function getUserByEmail( params: GetUserByEmailParams -): Promise { +): Promise { const searchParams = new URLSearchParams({ ...params }); - return client.get('api/user', { searchParams }).json(); + return client.get('api/user', { searchParams }).json(); } diff --git a/packages/data-center/src/provider/affine/apis/workspace.ts b/packages/data-center/src/provider/affine/apis/workspace.ts index cff089fc3..050875ea1 100644 --- a/packages/data-center/src/provider/affine/apis/workspace.ts +++ b/packages/data-center/src/provider/affine/apis/workspace.ts @@ -84,7 +84,10 @@ export interface CreateWorkspaceParams { export async function createWorkspace( params: CreateWorkspaceParams ): Promise<{ id: string }> { - return client.post('api/workspace', { json: params }).json(); + // FIXME: avatar should be optional + return client + .post('api/workspace', { json: { ...params, avatar: '123' } }) + .json(); } export interface UpdateWorkspaceParams { @@ -169,7 +172,11 @@ export async function leaveWorkspace({ id }: LeaveWorkspaceParams) { } export async function downloadWorkspace( - workspaceId: string + workspaceId: string, + published = false ): Promise { + if (published) { + return bareClient.get(`api/public/doc/${workspaceId}`).arrayBuffer(); + } return client.get(`api/workspace/${workspaceId}/doc`).arrayBuffer(); } diff --git a/packages/data-center/src/provider/affine/channel.ts b/packages/data-center/src/provider/affine/channel.ts index 4dc95004c..1503a8b45 100644 --- a/packages/data-center/src/provider/affine/channel.ts +++ b/packages/data-center/src/provider/affine/channel.ts @@ -1,6 +1,7 @@ import * as websocket from 'lib0/websocket'; import { Logger } from 'src/types'; import { token } from './apis/token'; +import * as url from 'lib0/url'; const RECONNECT_INTERVAL_TIME = 5000; const MAX_RECONNECT_TIMES = 50; @@ -10,11 +11,21 @@ export class WebsocketClient extends websocket.WebsocketClient { private _reconnectInterval: number | null = null; private _logger: Logger; constructor( - url: string, + serverUrl: string, logger: Logger, - options?: { binaryType: 'arraybuffer' | 'blob' | null } + options?: ConstructorParameters[1] & { + params: Record; + } ) { - super(url, options); + const params = options?.params || {}; + // ensure that url is always ends with / + while (serverUrl[serverUrl.length - 1] === '/') { + serverUrl = serverUrl.slice(0, serverUrl.length - 1); + } + const encodedParams = url.encodeQueryParams(params); + const newUrl = + serverUrl + '/' + (encodedParams.length === 0 ? '' : '?' + encodedParams); + super(newUrl, options); this._logger = logger; this._setupChannel(); } diff --git a/packages/data-center/src/provider/affine/utils.ts b/packages/data-center/src/provider/affine/utils.ts new file mode 100644 index 000000000..93c2f5600 --- /dev/null +++ b/packages/data-center/src/provider/affine/utils.ts @@ -0,0 +1,90 @@ +import assert from 'assert'; +import { Workspace as BlocksuiteWorkspace } from '@blocksuite/store'; +import { WorkspaceUnit } from '../../workspace-unit.js'; +import type { WorkspaceUnitCtorParams } from '../../workspace-unit'; +import { createBlocksuiteWorkspace } from '../../utils/index.js'; +import type { Apis } from './apis'; +import { WebsocketProvider } from './sync.js'; +import { setDefaultAvatar } from '../utils.js'; +import { applyUpdate } from '../../utils/index.js'; + +export const loadWorkspaceUnit = async ( + params: WorkspaceUnitCtorParams, + apis: Apis +) => { + const workspaceUnit = new WorkspaceUnit(params); + const blocksuiteWorkspace = createBlocksuiteWorkspace(workspaceUnit.id); + + const updates = await apis.downloadWorkspace( + workspaceUnit.id, + params.published + ); + applyUpdate(blocksuiteWorkspace, new Uint8Array(updates)); + + const details = await apis.getWorkspaceDetail({ id: workspaceUnit.id }); + const owner = details?.owner; + + workspaceUnit.setBlocksuiteWorkspace(blocksuiteWorkspace); + workspaceUnit.update({ + name: blocksuiteWorkspace.meta.name, + avatar: blocksuiteWorkspace.meta.avatar, + memberCount: details?.member_count || 1, + owner: owner + ? { + id: owner.id, + name: owner.name, + avatar: owner.avatar_url, + email: owner.email, + } + : undefined, + }); + + return workspaceUnit; +}; + +export const syncToCloud = async ( + blocksuiteWorkspace: BlocksuiteWorkspace, + refreshToken: string +) => { + const workspaceId = blocksuiteWorkspace.room; + assert(workspaceId, 'Blocksuite workspace without room(workspaceId).'); + + const wsUrl = `${window.location.protocol === 'https:' ? 'wss' : 'ws'}://${ + window.location.host + }/api/sync/`; + + const ws = new WebsocketProvider( + wsUrl, + workspaceId, + blocksuiteWorkspace.doc, + { + params: { token: refreshToken }, + } + ); + + await new Promise((resolve, reject) => { + ws.once('synced', () => { + // FIXME: we don't when send local data to cloud successfully, so hack to wait 1s. + // Server will support this by add a new api. + setTimeout(resolve, 1000); + }); + ws.once('lost-connection', () => reject()); + ws.once('connection-error', () => reject()); + }); +}; + +export const createWorkspaceUnit = async (params: WorkspaceUnitCtorParams) => { + const workspaceUnit = new WorkspaceUnit(params); + + const blocksuiteWorkspace = createBlocksuiteWorkspace(workspaceUnit.id); + + blocksuiteWorkspace.meta.setName(workspaceUnit.name); + if (!workspaceUnit.avatar) { + await setDefaultAvatar(blocksuiteWorkspace); + workspaceUnit.update({ avatar: blocksuiteWorkspace.meta.avatar }); + } + + workspaceUnit.setBlocksuiteWorkspace(blocksuiteWorkspace); + + return workspaceUnit; +}; diff --git a/packages/data-center/src/provider/base.ts b/packages/data-center/src/provider/base.ts index 17834abf3..653efb6bc 100644 --- a/packages/data-center/src/provider/base.ts +++ b/packages/data-center/src/provider/base.ts @@ -1,8 +1,8 @@ -import { Workspace as BlocksuiteWorkspace, uuidv4 } from '@blocksuite/store'; +import { Workspace as BlocksuiteWorkspace } from '@blocksuite/store'; import { MessageCenter } from '../message'; import { Logger, User } from '../types'; import type { WorkspaceUnitCollectionScope } from '../workspace-unit-collection'; -import type { WorkspaceUnitCtorParams } from '../workspace-unit'; +import type { WorkspaceUnitCtorParams, WorkspaceUnit } from '../workspace-unit'; import { Member } from './affine/apis'; const defaultLogger = () => { @@ -44,12 +44,6 @@ export class BaseProvider { return; } - public async createWorkspaceInfo( - params: CreateWorkspaceInfoParams - ): Promise { - throw new Error(`provider: ${this.id} createWorkspaceInfo Not implemented`); - } - /** * auth provider */ @@ -75,10 +69,19 @@ export class BaseProvider { return workspace; } + /** + * @deprecated Temporary for public workspace + * @param blocksuiteWorkspace + * @returns + */ + public async loadPublicWorkspace(blocksuiteWorkspace: BlocksuiteWorkspace) { + return blocksuiteWorkspace; + } + /** * load workspaces **/ - public async loadWorkspaces(): Promise { + public async loadWorkspaces(): Promise { throw new Error(`provider: ${this.id} loadWorkSpace Not implemented`); } @@ -174,13 +177,18 @@ export class BaseProvider { /** * create workspace by workspace meta - * @param {WorkspaceMeta} meta + * @param {CreateWorkspaceInfoParams} meta */ public async createWorkspace( - blocksuiteWorkspace: BlocksuiteWorkspace, - meta: WorkspaceMeta0 - ): Promise { - return blocksuiteWorkspace; + meta: CreateWorkspaceInfoParams + ): Promise { + throw new Error(`provider: ${this.id} createWorkspace not implemented`); + } + + public async extendWorkspace( + workspaceUnit: WorkspaceUnit + ): Promise { + throw new Error(`provider: ${this.id} extendWorkspace not implemented`); } /** @@ -205,16 +213,6 @@ export class BaseProvider { return workspace; } - /** - * merge one workspaces to another - * @param workspace - * @returns - */ - public async assign(to: BlocksuiteWorkspace, from: BlocksuiteWorkspace) { - from; - return to; - } - /** * get workspace members * @param {string} workspaceId @@ -224,4 +222,14 @@ export class BaseProvider { workspaceId; return Promise.resolve([]); } + + /** + * accept invitation + * @param {string} inviteCode + * @returns + */ + public async acceptInvitation(inviteCode: string): Promise { + inviteCode; + return; + } } diff --git a/packages/data-center/src/provider/local/indexeddb/utils.ts b/packages/data-center/src/provider/local/indexeddb/utils.ts index 8ca5c9b46..0a83282a6 100644 --- a/packages/data-center/src/provider/local/indexeddb/utils.ts +++ b/packages/data-center/src/provider/local/indexeddb/utils.ts @@ -1,10 +1,13 @@ import assert from 'assert'; import * as idb from 'lib0/indexeddb.js'; import { Workspace as BlocksuiteWorkspace } from '@blocksuite/store'; +import { applyUpdate } from '../../../utils/index.js'; -const { encodeStateAsUpdate } = BlocksuiteWorkspace.Y; +const { encodeStateAsUpdate, mergeUpdates } = BlocksuiteWorkspace.Y; -export const initStore = async (blocksuiteWorkspace: BlocksuiteWorkspace) => { +export const writeUpdatesToLocal = async ( + blocksuiteWorkspace: BlocksuiteWorkspace +) => { const workspaceId = blocksuiteWorkspace.room; assert(workspaceId); await idb.deleteDB(workspaceId); @@ -18,3 +21,21 @@ export const initStore = async (blocksuiteWorkspace: BlocksuiteWorkspace) => { await idb.addAutoKey(updatesStore, currState); } }; + +export const applyLocalUpdates = async ( + blocksuiteWorkspace: BlocksuiteWorkspace +) => { + const workspaceId = blocksuiteWorkspace.room; + assert(workspaceId, 'Blocksuite workspace without room(workspaceId).'); + const db = await idb.openDB(workspaceId, db => + idb.createStores(db, [['updates', { autoIncrement: true }], ['custom']]) + ); + + const [updatesStore] = idb.transact(db, ['updates']); // , 'readonly') + if (updatesStore) { + const updates = await idb.getAll(updatesStore); + const mergedUpdates = mergeUpdates(updates); + await applyUpdate(blocksuiteWorkspace, mergedUpdates); + } + return blocksuiteWorkspace; +}; diff --git a/packages/data-center/src/provider/local/local.spec.ts b/packages/data-center/src/provider/local/local.spec.ts index e60ce31aa..ba9cb8b66 100644 --- a/packages/data-center/src/provider/local/local.spec.ts +++ b/packages/data-center/src/provider/local/local.spec.ts @@ -16,12 +16,10 @@ test.describe.serial('local provider', () => { let workspaceId: string | undefined; test('create workspace', async () => { - const workspaceInfo = await provider.createWorkspaceInfo({ + const workspaceUnit = await provider.createWorkspace({ name: workspaceName, }); - workspaceId = workspaceInfo.id; - const blocksuiteWorkspace = createBlocksuiteWorkspace(workspaceId); - await provider.createWorkspace(blocksuiteWorkspace, workspaceInfo); + workspaceId = workspaceUnit?.id; expect(workspaceMetaCollection.workspaces.length).toEqual(1); expect(workspaceMetaCollection.workspaces[0].name).toEqual(workspaceName); diff --git a/packages/data-center/src/provider/local/local.ts b/packages/data-center/src/provider/local/local.ts index 12ed43011..3ecb7ea2e 100644 --- a/packages/data-center/src/provider/local/local.ts +++ b/packages/data-center/src/provider/local/local.ts @@ -8,9 +8,9 @@ import type { import { varStorage as storage } from 'lib0/storage'; import { Workspace as BlocksuiteWorkspace, uuidv4 } from '@blocksuite/store'; import { IndexedDBProvider } from './indexeddb/indexeddb.js'; -import { initStore } from './indexeddb/utils.js'; import assert from 'assert'; -import { setDefaultAvatar } from '../utils.js'; +import { loadWorkspaceUnit, createWorkspaceUnit } from './utils.js'; +import type { WorkspaceUnit } from '../../workspace-unit'; const WORKSPACE_KEY = 'workspaces'; @@ -22,21 +22,12 @@ export class LocalProvider extends BaseProvider { super(params); } - private _storeWorkspaces(workspaces: WorkspaceMeta0[]) { + private _storeWorkspaces(workspaceUnits: WorkspaceUnit[]) { storage.setItem( WORKSPACE_KEY, JSON.stringify( - workspaces.map(w => { - return { - id: w.id, - name: w.name, - avatar: w.avatar, - owner: w.owner, - published: w.published, - memberCount: w.memberCount, - provider: w.provider, - syncMode: w.syncMode, - }; + workspaceUnits.map(w => { + return w.toJSON(); }) ) ); @@ -61,20 +52,23 @@ export class LocalProvider extends BaseProvider { return workspace; } - override loadWorkspaces(): Promise { + override async loadWorkspaces(): Promise { const workspaceStr = storage.getItem(WORKSPACE_KEY); - let workspaces: WorkspaceMeta0[] = []; if (workspaceStr) { try { - workspaces = JSON.parse(workspaceStr) as WorkspaceMeta0[]; - workspaces.forEach(workspace => { - this._workspaces.add(workspace); - }); + const workspaceMetas = JSON.parse(workspaceStr) as WorkspaceMeta0[]; + const workspaceUnits = await Promise.all( + workspaceMetas.map(meta => { + return loadWorkspaceUnit(meta); + }) + ); + this._workspaces.add(workspaceUnits); + return workspaceUnits; } catch (error) { this._logger(`Failed to parse workspaces from storage`); } } - return Promise.resolve(workspaces); + return []; } public override async deleteWorkspace(id: string): Promise { @@ -96,10 +90,10 @@ export class LocalProvider extends BaseProvider { this._storeWorkspaces(this._workspaces.list()); } - public override async createWorkspaceInfo( + public override async createWorkspace( meta: CreateWorkspaceInfoParams - ): Promise { - const workspaceInfo: WorkspaceMeta0 = { + ): Promise { + const workspaceUnit = await createWorkspaceUnit({ name: meta.name, id: uuidv4(), published: false, @@ -108,35 +102,10 @@ export class LocalProvider extends BaseProvider { syncMode: 'core', memberCount: 1, provider: 'local', - }; - return Promise.resolve(workspaceInfo); - } - - public override async createWorkspace( - blocksuiteWorkspace: BlocksuiteWorkspace, - meta: WorkspaceMeta0 - ): Promise { - const workspaceId = blocksuiteWorkspace.room; - assert(workspaceId, 'Blocksuite Workspace without room(workspaceId).'); - this._logger('Creating affine workspace'); - - const workspaceInfo: WorkspaceMeta0 = { - ...meta, - }; - - blocksuiteWorkspace.meta.setName(meta.name); - - if (!meta.avatar) { - await setDefaultAvatar(blocksuiteWorkspace); - workspaceInfo.avatar = blocksuiteWorkspace.meta.avatar; - } - - await initStore(blocksuiteWorkspace); - - this._workspaces.add(workspaceInfo); + }); + this._workspaces.add(workspaceUnit); this._storeWorkspaces(this._workspaces.list()); - - return blocksuiteWorkspace; + return workspaceUnit; } public override async clear(): Promise { diff --git a/packages/data-center/src/provider/local/utils.ts b/packages/data-center/src/provider/local/utils.ts new file mode 100644 index 000000000..bd5654c51 --- /dev/null +++ b/packages/data-center/src/provider/local/utils.ts @@ -0,0 +1,34 @@ +import { WorkspaceUnit } from '../../workspace-unit.js'; +import type { WorkspaceUnitCtorParams } from '../../workspace-unit'; +import { createBlocksuiteWorkspace } from '../../utils/index.js'; +import { applyLocalUpdates, writeUpdatesToLocal } from './indexeddb/utils.js'; +import { setDefaultAvatar } from '../utils.js'; + +export const loadWorkspaceUnit = async (params: WorkspaceUnitCtorParams) => { + const workspaceUnit = new WorkspaceUnit(params); + + const blocksuiteWorkspace = createBlocksuiteWorkspace(workspaceUnit.id); + + await applyLocalUpdates(blocksuiteWorkspace); + + workspaceUnit.setBlocksuiteWorkspace(blocksuiteWorkspace); + + return workspaceUnit; +}; + +export const createWorkspaceUnit = async (params: WorkspaceUnitCtorParams) => { + const workspaceUnit = new WorkspaceUnit(params); + + const blocksuiteWorkspace = createBlocksuiteWorkspace(workspaceUnit.id); + blocksuiteWorkspace.meta.setName(workspaceUnit.name); + if (!workspaceUnit.avatar) { + await setDefaultAvatar(blocksuiteWorkspace); + workspaceUnit.update({ avatar: blocksuiteWorkspace.meta.avatar }); + } + + await writeUpdatesToLocal(blocksuiteWorkspace); + + workspaceUnit.setBlocksuiteWorkspace(blocksuiteWorkspace); + + return workspaceUnit; +}; diff --git a/packages/data-center/src/utils/index.ts b/packages/data-center/src/utils/index.ts index 2f2c516d8..9b3489bea 100644 --- a/packages/data-center/src/utils/index.ts +++ b/packages/data-center/src/utils/index.ts @@ -45,3 +45,25 @@ export async function getDefaultHeadImgBlob( } }); } + +export const applyUpdate = async ( + blocksuiteWorkspace: BlocksuiteWorkspace, + updates: Uint8Array +) => { + if (updates && updates.byteLength) { + await new Promise(resolve => { + // FIXME: if we merge two empty doc, there will no update event. + // So we set a timer to cancel update listener. + const doc = blocksuiteWorkspace.doc; + const timer = setTimeout(() => { + doc.off('update', resolve); + resolve(undefined); + }, 1000); + doc.once('update', () => { + clearTimeout(timer); + setTimeout(resolve, 100); + }); + BlocksuiteWorkspace.Y.applyUpdate(doc, new Uint8Array(updates)); + }); + } +}; diff --git a/packages/data-center/src/workspace-unit-collection.spec.ts b/packages/data-center/src/workspace-unit-collection.spec.ts index f010c31d1..405fc8237 100644 --- a/packages/data-center/src/workspace-unit-collection.spec.ts +++ b/packages/data-center/src/workspace-unit-collection.spec.ts @@ -1,6 +1,7 @@ import { test, expect } from '@playwright/test'; import { WorkspaceUnitCollection } from './workspace-unit-collection.js'; import type { WorkspaceUnitCollectionChangeEvent } from './workspace-unit-collection'; +import { WorkspaceUnit } from './workspace-unit.js'; test.describe.serial('workspace meta collection observable', () => { const workspaceUnitCollection = new WorkspaceUnitCollection(); @@ -14,13 +15,15 @@ test.describe.serial('workspace meta collection observable', () => { expect(event.added?.[0]?.id).toEqual('123'); } ); - scope.add({ + const workspaceUnit = new WorkspaceUnit({ id: '123', name: 'test', + avatar: undefined, memberCount: 1, provider: '', syncMode: 'core', }); + scope.add(workspaceUnit); }); test('list workspace', () => { diff --git a/packages/data-center/src/workspace-unit-collection.ts b/packages/data-center/src/workspace-unit-collection.ts index 58770e212..7d5576256 100644 --- a/packages/data-center/src/workspace-unit-collection.ts +++ b/packages/data-center/src/workspace-unit-collection.ts @@ -1,19 +1,18 @@ import { Observable } from 'lib0/observable'; -import { WorkspaceUnit } from './workspace-unit.js'; import type { - WorkspaceUnitCtorParams, + WorkspaceUnit, UpdateWorkspaceUnitParams, } from './workspace-unit'; export interface WorkspaceUnitCollectionScope { get: (workspaceId: string) => WorkspaceUnit | undefined; list: () => WorkspaceUnit[]; - add: (workspace: WorkspaceUnitCtorParams) => void; + add: (workspace: WorkspaceUnit | WorkspaceUnit[]) => void; remove: (workspaceId: string) => boolean; clear: () => void; update: ( workspaceId: string, - workspaceMeta: UpdateWorkspaceUnitParams + workspaceUnit: UpdateWorkspaceUnitParams ) => void; } @@ -59,19 +58,23 @@ export class WorkspaceUnitCollection { return this._workspaceUnitMap.get(workspaceId); }; - const add = (workspace: WorkspaceUnitCtorParams) => { - if (this._workspaceUnitMap.has(workspace.id)) { - throw new Error(`Duplicate workspace id.`); - } + const add = (workspaceUnit: WorkspaceUnit | WorkspaceUnit[]) => { + const workspaceUnits = Array.isArray(workspaceUnit) + ? workspaceUnit + : [workspaceUnit]; - const workspaceUnit = new WorkspaceUnit(workspace); - this._workspaceUnitMap.set(workspace.id, workspaceUnit); - - scopedWorkspaceIds.add(workspace.id); + workspaceUnits.forEach(workspaceUnit => { + if (this._workspaceUnitMap.has(workspaceUnit.id)) { + // FIXME: multiple add same workspace + return; + } + this._workspaceUnitMap.set(workspaceUnit.id, workspaceUnit); + scopedWorkspaceIds.add(workspaceUnit.id); + }); this._events.emit('change', [ { - added: [workspaceUnit], + added: workspaceUnits, } as WorkspaceUnitCollectionChangeEvent, ]); }; @@ -106,10 +109,7 @@ export class WorkspaceUnitCollection { }); }; - const update = ( - workspaceId: string, - workspaceMeta: UpdateWorkspaceUnitParams - ) => { + const update = (workspaceId: string, meta: UpdateWorkspaceUnitParams) => { if (!scopedWorkspaceIds.has(workspaceId)) { return true; } @@ -119,7 +119,7 @@ export class WorkspaceUnitCollection { return true; } - workspaceUnit.update(workspaceMeta); + workspaceUnit.update(meta); this._events.emit('change', [ { diff --git a/packages/data-center/src/workspace-unit.ts b/packages/data-center/src/workspace-unit.ts index b7244c0b5..5bc4bf8ae 100644 --- a/packages/data-center/src/workspace-unit.ts +++ b/packages/data-center/src/workspace-unit.ts @@ -37,6 +37,16 @@ export class WorkspaceUnit { this.update(params); } + get isPublish() { + console.error('Suggest changing to published'); + return this.published; + } + + get isLocal() { + console.error('Suggest changing to syncMode'); + return this.syncMode === 'all'; + } + get blocksuiteWorkspace() { return this._blocksuiteWorkspace; } @@ -52,13 +62,16 @@ export class WorkspaceUnit { Object.assign(this, params); } - get isPublish() { - console.error('Suggest changing to published'); - return this.published; - } - - get isLocal() { - console.error('Suggest changing to syncMode'); - return this.syncMode === 'all'; + toJSON(): Omit { + return { + id: this.id, + name: this.name, + avatar: this.avatar, + owner: this.owner, + published: this.published, + memberCount: this.memberCount, + provider: this.provider, + syncMode: this.syncMode, + }; } } diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index cef1e93fa..4844bc6a2 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -11,8 +11,6 @@ importers: '@types/node': ^18.11.17 '@typescript-eslint/eslint-plugin': ^5.47.0 '@typescript-eslint/parser': ^5.47.0 - concurrently: ^7.6.0 - cross-env: ^7.0.3 eslint: ^8.30.0 eslint-config-next: 12.3.1 eslint-config-prettier: ^8.5.0 @@ -32,8 +30,6 @@ importers: '@types/node': 18.11.18 '@typescript-eslint/eslint-plugin': 5.48.0_wxmz6cyorqfuzhhglktlvr5lve '@typescript-eslint/parser': 5.48.0_p4cjf2r47dnfiqufepc5hp43sq - concurrently: 7.6.0 - cross-env: 7.0.3 eslint: 8.31.0 eslint-config-next: 12.3.1_p4cjf2r47dnfiqufepc5hp43sq eslint-config-prettier: 8.5.0_eslint@8.31.0 @@ -46,113 +42,14 @@ importers: prettier: 2.7.1 typescript: 4.9.3 - client-app: - specifiers: - '@blocksuite/store': ^0.3.1 - '@emotion/react': ^11.10.5 - '@emotion/styled': ^11.10.5 - '@tauri-apps/api': ^1.2.0 - '@tauri-apps/cli': ^1.2.2 - '@types/node': ^18.11.17 - '@types/react': ^18.0.26 - '@types/react-dom': ^18.0.9 - '@typescript-eslint/eslint-plugin': 5.47.0 - '@typescript-eslint/parser': 5.47.0 - cross-env: ^7.0.3 - esbuild: ^0.16.10 - eslint: 8.30.0 - eslint-config-prettier: 8.5.0 - eslint-config-standard: ^17.0.0 - eslint-config-standard-with-typescript: 24.0.0 - eslint-import-resolver-alias: 1.1.2 - eslint-import-resolver-typescript: 3.5.2 - eslint-plugin-autofix: 1.1.0 - eslint-plugin-html: 7.1.0 - eslint-plugin-import: ^2.26.0 - eslint-plugin-n: ^15.6.0 - eslint-plugin-node: 11.1.0 - eslint-plugin-prettier: 4.2.1 - eslint-plugin-promise: ^6.1.1 - eslint-plugin-react: 7.31.11 - eslint-plugin-react-hooks: 4.6.0 - eslint-plugin-security: 1.5.0 - eslint-plugin-security-node: 1.1.1 - eslint-plugin-typescript-sort-keys: 2.1.0 - eslint-plugin-unicorn: 45.0.2 - eslint-plugin-unused-imports: 2.0.0 - json-schema-to-typescript: ^11.0.2 - lib0: ^0.2.58 - prettier: 2.8.1 - react: ^18.2.0 - react-dom: ^18.2.0 - react-is: ^18.2.0 - react-router: ^6.5.0 - react-router-dom: ^6.5.0 - rimraf: ^3.0.2 - typescript: ^4.9.4 - typesync: ^0.9.2 - vite: ^4.0.2 - y-protocols: ^1.0.5 - yjs: ^13.5.43 - zx: ^7.1.1 - dependencies: - '@blocksuite/store': 0.3.1_yjs@13.5.44 - '@emotion/react': 11.10.5_kzbn2opkn2327fwg5yzwzya5o4 - '@emotion/styled': 11.10.5_qvatmowesywn4ye42qoh247szu - '@tauri-apps/api': 1.2.0 - json-schema-to-typescript: 11.0.2 - lib0: 0.2.58 - react: 18.2.0 - react-dom: 18.2.0_react@18.2.0 - react-is: 18.2.0 - react-router: 6.6.2_react@18.2.0 - react-router-dom: 6.6.2_biqbaboplfbrettd7655fr4n2y - y-protocols: 1.0.5 - yjs: 13.5.44 - devDependencies: - '@tauri-apps/cli': 1.2.2 - '@types/node': 18.11.18 - '@types/react': 18.0.26 - '@types/react-dom': 18.0.10 - '@typescript-eslint/eslint-plugin': 5.47.0_ncmi6noazr3nzas7jxykisekym - '@typescript-eslint/parser': 5.47.0_lzzuuodtsqwxnvqeq4g4likcqa - cross-env: 7.0.3 - esbuild: 0.16.16 - eslint: 8.30.0 - eslint-config-prettier: 8.5.0_eslint@8.30.0 - eslint-config-standard: 17.0.0_bdcrn6xmt4gzw7vnrxwhbmoneu - eslint-config-standard-with-typescript: 24.0.0_cptoufat74nryxrbzitaihscju - eslint-import-resolver-alias: 1.1.2_fkfqfehjtk7sk2efaqbgxsuasa - eslint-import-resolver-typescript: 3.5.2_2lbwmhbr7bncddqbzzpg77o75m - eslint-plugin-autofix: 1.1.0_eslint@8.30.0 - eslint-plugin-html: 7.1.0 - eslint-plugin-import: 2.26.0_p6eswnf3xl3aaa2djfyukgz5eq - eslint-plugin-n: 15.6.1_eslint@8.30.0 - eslint-plugin-node: 11.1.0_eslint@8.30.0 - eslint-plugin-prettier: 4.2.1_kl4pe43v5b43npmso5hoplpbyi - eslint-plugin-promise: 6.1.1_eslint@8.30.0 - eslint-plugin-react: 7.31.11_eslint@8.30.0 - eslint-plugin-react-hooks: 4.6.0_eslint@8.30.0 - eslint-plugin-security: 1.5.0 - eslint-plugin-security-node: 1.1.1 - eslint-plugin-typescript-sort-keys: 2.1.0_ncmi6noazr3nzas7jxykisekym - eslint-plugin-unicorn: 45.0.2_eslint@8.30.0 - eslint-plugin-unused-imports: 2.0.0_juver2u3xbiwnjfu6d55vmnoem - prettier: 2.8.1 - rimraf: 3.0.2 - typescript: 4.9.4 - typesync: 0.9.2 - vite: 4.0.4_@types+node@18.11.18 - zx: 7.1.1 - packages/app: specifiers: '@affine/datacenter': workspace:* '@affine/i18n': workspace:* - '@blocksuite/blocks': 0.4.0-20230110112105-ef07332 - '@blocksuite/editor': 0.4.0-20230110112105-ef07332 + '@blocksuite/blocks': 0.3.1-20230109032243-37ad3ba + '@blocksuite/editor': 0.3.1-20230109032243-37ad3ba '@blocksuite/icons': ^2.0.2 - '@blocksuite/store': 0.4.0-20230110112105-ef07332 + '@blocksuite/store': 0.3.1-20230109032243-37ad3ba '@emotion/css': ^11.10.0 '@emotion/react': ^11.10.4 '@emotion/server': ^11.10.0 @@ -190,10 +87,10 @@ importers: dependencies: '@affine/datacenter': link:../data-center '@affine/i18n': link:../i18n - '@blocksuite/blocks': 0.4.0-20230110112105-ef07332_yjs@13.5.44 - '@blocksuite/editor': 0.4.0-20230110112105-ef07332_yjs@13.5.44 + '@blocksuite/blocks': 0.3.1-20230109032243-37ad3ba_yjs@13.5.44 + '@blocksuite/editor': 0.3.1-20230109032243-37ad3ba_yjs@13.5.44 '@blocksuite/icons': 2.0.4_w5j4k42lgipnm43s3brx6h3c34 - '@blocksuite/store': 0.4.0-20230110112105-ef07332_yjs@13.5.44 + '@blocksuite/store': 0.3.1-20230109032243-37ad3ba_yjs@13.5.44 '@emotion/css': 11.10.0 '@emotion/react': 11.10.4_w5j4k42lgipnm43s3brx6h3c34 '@emotion/server': 11.10.0_@emotion+css@11.10.0 @@ -232,10 +129,9 @@ importers: packages/data-center: specifiers: - '@blocksuite/blocks': 0.4.0-20230110112105-ef07332 - '@blocksuite/store': 0.4.0-20230110112105-ef07332 + '@blocksuite/blocks': 0.3.1-20230109032243-37ad3ba + '@blocksuite/store': 0.3.1-20230109032243-37ad3ba '@playwright/test': ^1.29.1 - '@tauri-apps/api': ^1.2.0 '@types/debug': ^4.1.7 debug: ^4.3.4 encoding: ^0.1.13 @@ -248,11 +144,9 @@ importers: swr: ^2.0.0 typescript: ^4.8.4 y-protocols: ^1.0.5 - yjs: ^13.5.44 dependencies: - '@blocksuite/blocks': 0.4.0-20230110112105-ef07332_yjs@13.5.44 - '@blocksuite/store': 0.4.0-20230110112105-ef07332_yjs@13.5.44 - '@tauri-apps/api': 1.2.0 + '@blocksuite/blocks': 0.3.1-20230109032243-37ad3ba + '@blocksuite/store': 0.3.1-20230109032243-37ad3ba debug: 4.3.4 encoding: 0.1.13 firebase: 9.15.0_encoding@0.1.13 @@ -262,7 +156,6 @@ importers: lib0: 0.2.58 swr: 2.0.0 y-protocols: 1.0.5 - yjs: 13.5.44 devDependencies: '@playwright/test': 1.29.1 '@types/debug': 4.1.7 @@ -1602,24 +1495,15 @@ packages: to-fast-properties: 2.0.0 dev: true - /@bcherny/json-schema-ref-parser/9.0.9: - resolution: {integrity: sha512-vmEmnJCfpkLdas++9OYg6riIezTYqTHpqUTODJzHLzs5UnXujbOJW9VwcVCnyo1mVRt32FRr23iXBx/sX8YbeQ==} - dependencies: - '@jsdevtools/ono': 7.1.3 - '@types/json-schema': 7.0.11 - call-me-maybe: 1.0.2 - js-yaml: 4.1.0 - dev: false - /@bcoe/v8-coverage/0.2.3: resolution: {integrity: sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==} dev: true - /@blocksuite/blocks/0.4.0-20230110112105-ef07332_yjs@13.5.44: - resolution: {integrity: sha512-dtwZRCWtirmheRQaITPOC/D9LZ3yFuYztqL/y2mz/BRSfHj8I71OVcX0HjFXx2TUdzhkea1GNYbp4226zZIiRA==} + /@blocksuite/blocks/0.3.1-20230109032243-37ad3ba: + resolution: {integrity: sha512-UTlbk0Is7TMRBbvUyM2nivbqM/TLwRj1qArMYbOmvDGUNYadWo68cTwv/Ej2WwiKn22q4/4JHryGsv3gTCRz1Q==} dependencies: - '@blocksuite/phasor': 0.4.0-20230110112105-ef07332_yjs@13.5.44 - '@blocksuite/store': 0.4.0-20230110112105-ef07332_yjs@13.5.44 + '@blocksuite/phasor': 0.3.1-20230109032243-37ad3ba + '@blocksuite/store': 0.3.1-20230109032243-37ad3ba '@tldraw/intersect': 1.8.0 autosize: 5.0.2 highlight.js: 11.7.0 @@ -1635,11 +1519,31 @@ packages: - yjs dev: false - /@blocksuite/editor/0.4.0-20230110112105-ef07332_yjs@13.5.44: - resolution: {integrity: sha512-UqLVEZq/bKRJfe3e/Teur7grlnSo6oG55s00WSWu+nTIHnvgasIePJ6rpGC/pXwYdsuvVQnQzGesnrapNVtXqA==} + /@blocksuite/blocks/0.3.1-20230109032243-37ad3ba_yjs@13.5.44: + resolution: {integrity: sha512-UTlbk0Is7TMRBbvUyM2nivbqM/TLwRj1qArMYbOmvDGUNYadWo68cTwv/Ej2WwiKn22q4/4JHryGsv3gTCRz1Q==} dependencies: - '@blocksuite/blocks': 0.4.0-20230110112105-ef07332_yjs@13.5.44 - '@blocksuite/store': 0.4.0-20230110112105-ef07332_yjs@13.5.44 + '@blocksuite/phasor': 0.3.1-20230109032243-37ad3ba_yjs@13.5.44 + '@blocksuite/store': 0.3.1-20230109032243-37ad3ba_yjs@13.5.44 + '@tldraw/intersect': 1.8.0 + autosize: 5.0.2 + highlight.js: 11.7.0 + hotkeys-js: 3.10.1 + lit: 2.5.0 + perfect-freehand: 1.2.0 + quill: 1.3.7 + quill-cursors: 4.0.0 + transitivePeerDependencies: + - bufferutil + - supports-color + - utf-8-validate + - yjs + dev: false + + /@blocksuite/editor/0.3.1-20230109032243-37ad3ba_yjs@13.5.44: + resolution: {integrity: sha512-bYbMn4EL/od+xP4K3u2kJT08kJBpK6H7b4cbRb9No3SUwgNHvvVNxia/QH1AQXyKaZQj/DHFgVxrw9GKo2GIPA==} + dependencies: + '@blocksuite/blocks': 0.3.1-20230109032243-37ad3ba_yjs@13.5.44 + '@blocksuite/store': 0.3.1-20230109032243-37ad3ba_yjs@13.5.44 lit: 2.5.0 marked: 4.2.5 turndown: 7.1.1 @@ -1660,16 +1564,22 @@ packages: react: 18.2.0 dev: false - /@blocksuite/phasor/0.4.0-20230110112105-ef07332_yjs@13.5.44: - resolution: {integrity: sha512-R5j/iK7WBFSk7vSk8HEAsxDwr+xDeY7JuzdGzzwnkcOaxuM6Eea6g0vMw7DPuWDAkvlcP7JsgXLnzWgFZh7qmA==} + /@blocksuite/phasor/0.3.1-20230109032243-37ad3ba: + resolution: {integrity: sha512-mL1gSQ3rzrjdQSbWPtgyMXpbbl266UUjw26d0aIjkOh+iMMI6rWtmKWDoiDkO7tejIjwSNQ4w5zJOjJRIj+mSA==} + peerDependencies: + yjs: ^13 + dev: false + + /@blocksuite/phasor/0.3.1-20230109032243-37ad3ba_yjs@13.5.44: + resolution: {integrity: sha512-mL1gSQ3rzrjdQSbWPtgyMXpbbl266UUjw26d0aIjkOh+iMMI6rWtmKWDoiDkO7tejIjwSNQ4w5zJOjJRIj+mSA==} peerDependencies: yjs: ^13 dependencies: yjs: 13.5.44 dev: false - /@blocksuite/store/0.3.1_yjs@13.5.44: - resolution: {integrity: sha512-kynVTDfNCSChz2JI2rtGHxRIV2YrLzvAgVajcbfDVCuXKG0siBoEjLasG1a0kvevbvW/FabrNAj+xaIplklioA==} + /@blocksuite/store/0.3.1-20230109032243-37ad3ba: + resolution: {integrity: sha512-zOUz19jfhuhsUkx9BGEQPZWbPyD/AgX0LB7ShVRdd3YM73x25hD6tPLLz1HEV2b69XokC0P9oSru4aNomm4jkg==} peerDependencies: yjs: ^13 dependencies: @@ -1682,15 +1592,14 @@ packages: lib0: 0.2.58 y-protocols: 1.0.5 y-webrtc: 10.2.3 - yjs: 13.5.44 transitivePeerDependencies: - bufferutil - supports-color - utf-8-validate dev: false - /@blocksuite/store/0.4.0-20230110112105-ef07332_yjs@13.5.44: - resolution: {integrity: sha512-NisHLf0uSyFu5DUZD13QSsp33C9vnd7Jf7jdLOAPztQ2U05NcGFopjM2InhwBmtmQSHrd/qi25PjgnAJ7/HSNQ==} + /@blocksuite/store/0.3.1-20230109032243-37ad3ba_yjs@13.5.44: + resolution: {integrity: sha512-zOUz19jfhuhsUkx9BGEQPZWbPyD/AgX0LB7ShVRdd3YM73x25hD6tPLLz1HEV2b69XokC0P9oSru4aNomm4jkg==} peerDependencies: yjs: ^13 dependencies: @@ -1723,7 +1632,7 @@ packages: fs-extra: 7.0.1 lodash.startcase: 4.4.0 outdent: 0.5.0 - prettier: 2.8.1 + prettier: 2.7.1 resolve-from: 5.0.0 semver: 5.7.1 dev: true @@ -1891,7 +1800,7 @@ packages: '@changesets/types': 5.2.1 fs-extra: 7.0.1 human-id: 1.0.2 - prettier: 2.8.1 + prettier: 2.7.1 dev: true /@emotion/babel-plugin/11.10.2: @@ -1913,25 +1822,6 @@ packages: stylis: 4.0.13 dev: false - /@emotion/babel-plugin/11.10.5: - resolution: {integrity: sha512-xE7/hyLHJac7D2Ve9dKroBBZqBT7WuPQmWcq7HSGb84sUuP4mlOWoB8dvVfD9yk5DHkU1m6RW7xSoDtnQHNQeA==} - peerDependencies: - '@babel/core': ^7.0.0 - dependencies: - '@babel/helper-module-imports': 7.18.6 - '@babel/plugin-syntax-jsx': 7.18.6 - '@babel/runtime': 7.20.7 - '@emotion/hash': 0.9.0 - '@emotion/memoize': 0.8.0 - '@emotion/serialize': 1.1.1 - babel-plugin-macros: 3.1.0 - convert-source-map: 1.9.0 - escape-string-regexp: 4.0.0 - find-root: 1.1.0 - source-map: 0.5.7 - stylis: 4.1.3 - dev: false - /@emotion/cache/11.10.3: resolution: {integrity: sha512-Psmp/7ovAa8appWh3g51goxu/z3iVms7JXOreq136D8Bbn6dYraPnmL6mdM8GThEx9vwSn92Fz+mGSjBzN8UPQ==} dependencies: @@ -1942,16 +1832,6 @@ packages: stylis: 4.0.13 dev: false - /@emotion/cache/11.10.5: - resolution: {integrity: sha512-dGYHWyzTdmK+f2+EnIGBpkz1lKc4Zbj2KHd4cX3Wi8/OWr5pKslNjc3yABKH4adRGCvSX4VDC0i04mrrq0aiRA==} - dependencies: - '@emotion/memoize': 0.8.0 - '@emotion/sheet': 1.2.1 - '@emotion/utils': 1.2.0 - '@emotion/weak-memoize': 0.3.0 - stylis: 4.1.3 - dev: false - /@emotion/css/11.10.0: resolution: {integrity: sha512-dH9f+kSCucc8ilMg0MUA1AemabcyzYpe5EKX24F528PJjD7HyIY/VBNJHxfUdc8l400h2ncAjR6yEDu+DBj2cg==} peerDependencies: @@ -2005,30 +1885,6 @@ packages: react: 18.2.0 dev: false - /@emotion/react/11.10.5_kzbn2opkn2327fwg5yzwzya5o4: - resolution: {integrity: sha512-TZs6235tCJ/7iF6/rvTaOH4oxQg2gMAcdHemjwLKIjKz4rRuYe1HJ2TQJKnAcRAfOUDdU8XoDadCe1rl72iv8A==} - peerDependencies: - '@babel/core': ^7.0.0 - '@types/react': '*' - react: '>=16.8.0' - peerDependenciesMeta: - '@babel/core': - optional: true - '@types/react': - optional: true - dependencies: - '@babel/runtime': 7.20.7 - '@emotion/babel-plugin': 11.10.5 - '@emotion/cache': 11.10.5 - '@emotion/serialize': 1.1.1 - '@emotion/use-insertion-effect-with-fallbacks': 1.0.0_react@18.2.0 - '@emotion/utils': 1.2.0 - '@emotion/weak-memoize': 0.3.0 - '@types/react': 18.0.26 - hoist-non-react-statics: 3.3.2 - react: 18.2.0 - dev: false - /@emotion/serialize/1.1.0: resolution: {integrity: sha512-F1ZZZW51T/fx+wKbVlwsfchr5q97iW8brAnXmsskz4d0hVB4O3M/SiA3SaeH06x02lSNzkkQv+n3AX3kCXKSFA==} dependencies: @@ -2039,16 +1895,6 @@ packages: csstype: 3.1.1 dev: false - /@emotion/serialize/1.1.1: - resolution: {integrity: sha512-Zl/0LFggN7+L1liljxXdsVSVlg6E/Z/olVWpfxUTxOAmi8NU7YoeWeLfi1RmnB2TATHoaWwIBRoL+FvAJiTUQA==} - dependencies: - '@emotion/hash': 0.9.0 - '@emotion/memoize': 0.8.0 - '@emotion/unitless': 0.8.0 - '@emotion/utils': 1.2.0 - csstype: 3.1.1 - dev: false - /@emotion/server/11.10.0_@emotion+css@11.10.0: resolution: {integrity: sha512-MTvJ21JPo9aS02GdjFW4nhdwOi2tNNpMmAM/YED0pkxzjDNi5WbiTwXqaCnvLc2Lr8NFtjhT0az1vTJyLIHYcw==} peerDependencies: @@ -2068,10 +1914,6 @@ packages: resolution: {integrity: sha512-OiTkRgpxescko+M51tZsMq7Puu/KP55wMT8BgpcXVG2hqXc0Vo0mfymJ/Uj24Hp0i083ji/o0aLddh08UEjq8w==} dev: false - /@emotion/sheet/1.2.1: - resolution: {integrity: sha512-zxRBwl93sHMsOj4zs+OslQKg/uhF38MB+OMKoCrVuS0nyTkqnau+BM3WGEoOptg9Oz45T/aIGs1qbVAsEFo3nA==} - dev: false - /@emotion/styled/11.10.4_yiaqs725o7pcd7rteavrnhgj4y: resolution: {integrity: sha512-pRl4R8Ez3UXvOPfc2bzIoV8u9P97UedgHS4FPX594ntwEuAMA114wlaHvOK24HB48uqfXiGlYIZYCxVJ1R1ttQ==} peerDependencies: @@ -2096,30 +1938,6 @@ packages: react: 18.2.0 dev: false - /@emotion/styled/11.10.5_qvatmowesywn4ye42qoh247szu: - resolution: {integrity: sha512-8EP6dD7dMkdku2foLoruPCNkRevzdcBaY6q0l0OsbyJK+x8D9HWjX27ARiSIKNF634hY9Zdoedh8bJCiva8yZw==} - peerDependencies: - '@babel/core': ^7.0.0 - '@emotion/react': ^11.0.0-rc.0 - '@types/react': '*' - react: '>=16.8.0' - peerDependenciesMeta: - '@babel/core': - optional: true - '@types/react': - optional: true - dependencies: - '@babel/runtime': 7.20.7 - '@emotion/babel-plugin': 11.10.5 - '@emotion/is-prop-valid': 1.2.0 - '@emotion/react': 11.10.5_kzbn2opkn2327fwg5yzwzya5o4 - '@emotion/serialize': 1.1.1 - '@emotion/use-insertion-effect-with-fallbacks': 1.0.0_react@18.2.0 - '@emotion/utils': 1.2.0 - '@types/react': 18.0.26 - react: 18.2.0 - dev: false - /@emotion/unitless/0.8.0: resolution: {integrity: sha512-VINS5vEYAscRl2ZUDiT3uMPlrFQupiKgHz5AA4bCH1miKBg4qtwkim1qPmJj/4WG6TreYMY111rEFsjupcOKHw==} dev: false @@ -2140,214 +1958,6 @@ packages: resolution: {integrity: sha512-AHPmaAx+RYfZz0eYu6Gviiagpmiyw98ySSlQvCUhVGDRtDFe4DBS0x1bSjdF3gqUDYOczB+yYvBTtEylYSdRhg==} dev: false - /@esbuild/android-arm/0.16.16: - resolution: {integrity: sha512-BUuWMlt4WSXod1HSl7aGK8fJOsi+Tab/M0IDK1V1/GstzoOpqc/v3DqmN8MkuapPKQ9Br1WtLAN4uEgWR8x64A==} - engines: {node: '>=12'} - cpu: [arm] - os: [android] - requiresBuild: true - dev: true - optional: true - - /@esbuild/android-arm64/0.16.16: - resolution: {integrity: sha512-hFHVAzUKp9Tf8psGq+bDVv+6hTy1bAOoV/jJMUWwhUnIHsh6WbFMhw0ZTkqDuh7TdpffFoHOiIOIxmHc7oYRBQ==} - engines: {node: '>=12'} - cpu: [arm64] - os: [android] - requiresBuild: true - dev: true - optional: true - - /@esbuild/android-x64/0.16.16: - resolution: {integrity: sha512-9WhxJpeb6XumlfivldxqmkJepEcELekmSw3NkGrs+Edq6sS5KRxtUBQuKYDD7KqP59dDkxVbaoPIQFKWQG0KLg==} - engines: {node: '>=12'} - cpu: [x64] - os: [android] - requiresBuild: true - dev: true - optional: true - - /@esbuild/darwin-arm64/0.16.16: - resolution: {integrity: sha512-8Z+wld+vr/prHPi2O0X7o1zQOfMbXWGAw9hT0jEyU/l/Yrg+0Z3FO9pjPho72dVkZs4ewZk0bDOFLdZHm8jEfw==} - engines: {node: '>=12'} - cpu: [arm64] - os: [darwin] - requiresBuild: true - dev: true - optional: true - - /@esbuild/darwin-x64/0.16.16: - resolution: {integrity: sha512-CYkxVvkZzGCqFrt7EgjFxQKhlUPyDkuR9P0Y5wEcmJqVI8ncerOIY5Kej52MhZyzOBXkYrJgZeVZC9xXXoEg9A==} - engines: {node: '>=12'} - cpu: [x64] - os: [darwin] - requiresBuild: true - dev: true - optional: true - - /@esbuild/freebsd-arm64/0.16.16: - resolution: {integrity: sha512-fxrw4BYqQ39z/3Ja9xj/a1gMsVq0xEjhSyI4a9MjfvDDD8fUV8IYliac96i7tzZc3+VytyXX+XNsnpEk5sw5Wg==} - engines: {node: '>=12'} - cpu: [arm64] - os: [freebsd] - requiresBuild: true - dev: true - optional: true - - /@esbuild/freebsd-x64/0.16.16: - resolution: {integrity: sha512-8p3v1D+du2jiDvSoNVimHhj7leSfST9YlKsAEO7etBfuqjaBMndo0fmjNLp0JCMld+XIx9L80tooOkyUv1a1PQ==} - engines: {node: '>=12'} - cpu: [x64] - os: [freebsd] - requiresBuild: true - dev: true - optional: true - - /@esbuild/linux-arm/0.16.16: - resolution: {integrity: sha512-bYaocE1/PTMRmkgSckZ0D0Xn2nox8v2qlk+MVVqm+VECNKDdZvghVZtH41dNtBbwADSvA6qkCHGYeWm9LrNCBw==} - engines: {node: '>=12'} - cpu: [arm] - os: [linux] - requiresBuild: true - dev: true - optional: true - - /@esbuild/linux-arm64/0.16.16: - resolution: {integrity: sha512-N3u6BBbCVY3xeP2D8Db7QY8I+nZ+2AgOopUIqk+5yCoLnsWkcVxD2ay5E9iIdvApFi1Vg1lZiiwaVp8bOpAc4A==} - engines: {node: '>=12'} - cpu: [arm64] - os: [linux] - requiresBuild: true - dev: true - optional: true - - /@esbuild/linux-ia32/0.16.16: - resolution: {integrity: sha512-dxjqLKUW8GqGemoRT9v8IgHk+T4tRm1rn1gUcArsp26W9EkK/27VSjBVUXhEG5NInHZ92JaQ3SSMdTwv/r9a2A==} - engines: {node: '>=12'} - cpu: [ia32] - os: [linux] - requiresBuild: true - dev: true - optional: true - - /@esbuild/linux-loong64/0.16.16: - resolution: {integrity: sha512-MdUFggHjRiCCwNE9+1AibewoNq6wf94GLB9Q9aXwl+a75UlRmbRK3h6WJyrSGA6ZstDJgaD2wiTSP7tQNUYxwA==} - engines: {node: '>=12'} - cpu: [loong64] - os: [linux] - requiresBuild: true - dev: true - optional: true - - /@esbuild/linux-mips64el/0.16.16: - resolution: {integrity: sha512-CO3YmO7jYMlGqGoeFeKzdwx/bx8Vtq/SZaMAi+ZLDUnDUdfC7GmGwXzIwDJ70Sg+P9pAemjJyJ1icKJ9R3q/Fg==} - engines: {node: '>=12'} - cpu: [mips64el] - os: [linux] - requiresBuild: true - dev: true - optional: true - - /@esbuild/linux-ppc64/0.16.16: - resolution: {integrity: sha512-DSl5Czh5hCy/7azX0Wl9IdzPHX2H8clC6G87tBnZnzUpNgRxPFhfmArbaHoAysu4JfqCqbB/33u/GL9dUgCBAw==} - engines: {node: '>=12'} - cpu: [ppc64] - os: [linux] - requiresBuild: true - dev: true - optional: true - - /@esbuild/linux-riscv64/0.16.16: - resolution: {integrity: sha512-sSVVMEXsqf1fQu0j7kkhXMViroixU5XoaJXl1u/u+jbXvvhhCt9YvA/B6VM3aM/77HuRQ94neS5bcisijGnKFQ==} - engines: {node: '>=12'} - cpu: [riscv64] - os: [linux] - requiresBuild: true - dev: true - optional: true - - /@esbuild/linux-s390x/0.16.16: - resolution: {integrity: sha512-jRqBCre9gZGoCdCN/UWCCMwCMsOg65IpY9Pyj56mKCF5zXy9d60kkNRdDN6YXGjr3rzcC4DXnS/kQVCGcC4yPQ==} - engines: {node: '>=12'} - cpu: [s390x] - os: [linux] - requiresBuild: true - dev: true - optional: true - - /@esbuild/linux-x64/0.16.16: - resolution: {integrity: sha512-G1+09TopOzo59/55lk5Q0UokghYLyHTKKzD5lXsAOOlGDbieGEFJpJBr3BLDbf7cz89KX04sBeExAR/pL/26sA==} - engines: {node: '>=12'} - cpu: [x64] - os: [linux] - requiresBuild: true - dev: true - optional: true - - /@esbuild/netbsd-x64/0.16.16: - resolution: {integrity: sha512-xwjGJB5wwDEujLaJIrSMRqWkbigALpBNcsF9SqszoNKc+wY4kPTdKrSxiY5ik3IatojePP+WV108MvF6q6np4w==} - engines: {node: '>=12'} - cpu: [x64] - os: [netbsd] - requiresBuild: true - dev: true - optional: true - - /@esbuild/openbsd-x64/0.16.16: - resolution: {integrity: sha512-yeERkoxG2nR2oxO5n+Ms7MsCeNk23zrby2GXCqnfCpPp7KNc0vxaaacIxb21wPMfXXRhGBrNP4YLIupUBrWdlg==} - engines: {node: '>=12'} - cpu: [x64] - os: [openbsd] - requiresBuild: true - dev: true - optional: true - - /@esbuild/sunos-x64/0.16.16: - resolution: {integrity: sha512-nHfbEym0IObXPhtX6Va3H5GaKBty2kdhlAhKmyCj9u255ktAj0b1YACUs9j5H88NRn9cJCthD1Ik/k9wn8YKVg==} - engines: {node: '>=12'} - cpu: [x64] - os: [sunos] - requiresBuild: true - dev: true - optional: true - - /@esbuild/win32-arm64/0.16.16: - resolution: {integrity: sha512-pdD+M1ZOFy4hE15ZyPX09fd5g4DqbbL1wXGY90YmleVS6Y5YlraW4BvHjim/X/4yuCpTsAFvsT4Nca2lbyDH/A==} - engines: {node: '>=12'} - cpu: [arm64] - os: [win32] - requiresBuild: true - dev: true - optional: true - - /@esbuild/win32-ia32/0.16.16: - resolution: {integrity: sha512-IPEMfU9p0c3Vb8PqxaPX6BM9rYwlTZGYOf9u+kMdhoILZkVKEjq6PKZO0lB+isojWwAnAqh4ZxshD96njTXajg==} - engines: {node: '>=12'} - cpu: [ia32] - os: [win32] - requiresBuild: true - dev: true - optional: true - - /@esbuild/win32-x64/0.16.16: - resolution: {integrity: sha512-1YYpoJ39WV/2bnShPwgdzJklc+XS0bysN6Tpnt1cWPdeoKOG4RMEY1g7i534QxXX/rPvNx/NLJQTTCeORYzipg==} - engines: {node: '>=12'} - cpu: [x64] - os: [win32] - requiresBuild: true - dev: true - optional: true - - /@eslint-community/eslint-utils/4.1.2_eslint@8.30.0: - resolution: {integrity: sha512-7qELuQWWjVDdVsFQ5+beUl+KPczrEDA7S3zM4QUd/bJl7oXgsmpXaEVqrRTnOBqenOV4rWf2kVZk2Ot085zPWA==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - peerDependencies: - eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 - dependencies: - eslint: 8.30.0 - eslint-visitor-keys: 3.3.0 - dev: true - /@eslint/eslintrc/1.3.2: resolution: {integrity: sha512-AXYd23w1S/bv3fTs3Lz0vjiYemS08jWkI3hYyS9I1ry+0f+Yjs1wm+sU0BS8qDOPrBIkp4qHYC16I8uVtpLajQ==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} @@ -3192,10 +2802,6 @@ packages: '@jridgewell/sourcemap-codec': 1.4.14 dev: true - /@jsdevtools/ono/7.1.3: - resolution: {integrity: sha512-4JQNk+3mVzK3xh2rqd6RB4J46qUR19azEHBneZyTZM+c456qOrbbM/5xcR8huNCCcbVt7+UmizG6GuUvPvKUYg==} - dev: false - /@lit/reactive-element/1.4.1: resolution: {integrity: sha512-qDv4851VFSaBWzpS02cXHclo40jsbAjRXnebNXpm0uVg32kCneZPo9RYVQtrTNICtZ+1wAYHu1ZtxWSWMbKrBw==} dev: false @@ -3336,7 +2942,7 @@ packages: optional: true dependencies: '@babel/runtime': 7.20.7 - '@emotion/cache': 11.10.5 + '@emotion/cache': 11.10.3 '@emotion/react': 11.10.4_w5j4k42lgipnm43s3brx6h3c34 '@emotion/styled': 11.10.4_yiaqs725o7pcd7rteavrnhgj4y csstype: 3.1.1 @@ -3405,6 +3011,7 @@ packages: /@next/env/13.1.0: resolution: {integrity: sha512-6iNixFzCndH+Bl4FetQzOMjxCJqg8fs0LAlZviig1K6mIjOWH2m2oPcHcOg1Ta5VCe7Bx5KG1Hs+NrWDUkBt9A==} + dev: false /@next/eslint-plugin-next/12.3.1: resolution: {integrity: sha512-sw+lTf6r6P0j+g/n9y4qdWWI2syPqZx+uc0+B/fRENqfR3KpSid6MIKqc9gNwGhJASazEQ5b3w8h4cAET213jw==} @@ -3427,6 +3034,7 @@ packages: cpu: [arm] os: [android] requiresBuild: true + dev: false optional: true /@next/swc-android-arm64/12.3.1: @@ -3444,6 +3052,7 @@ packages: cpu: [arm64] os: [android] requiresBuild: true + dev: false optional: true /@next/swc-darwin-arm64/12.3.1: @@ -3461,6 +3070,7 @@ packages: cpu: [arm64] os: [darwin] requiresBuild: true + dev: false optional: true /@next/swc-darwin-x64/12.3.1: @@ -3478,6 +3088,7 @@ packages: cpu: [x64] os: [darwin] requiresBuild: true + dev: false optional: true /@next/swc-freebsd-x64/12.3.1: @@ -3495,6 +3106,7 @@ packages: cpu: [x64] os: [freebsd] requiresBuild: true + dev: false optional: true /@next/swc-linux-arm-gnueabihf/12.3.1: @@ -3512,6 +3124,7 @@ packages: cpu: [arm] os: [linux] requiresBuild: true + dev: false optional: true /@next/swc-linux-arm64-gnu/12.3.1: @@ -3529,6 +3142,7 @@ packages: cpu: [arm64] os: [linux] requiresBuild: true + dev: false optional: true /@next/swc-linux-arm64-musl/12.3.1: @@ -3546,6 +3160,7 @@ packages: cpu: [arm64] os: [linux] requiresBuild: true + dev: false optional: true /@next/swc-linux-x64-gnu/12.3.1: @@ -3563,6 +3178,7 @@ packages: cpu: [x64] os: [linux] requiresBuild: true + dev: false optional: true /@next/swc-linux-x64-musl/12.3.1: @@ -3580,6 +3196,7 @@ packages: cpu: [x64] os: [linux] requiresBuild: true + dev: false optional: true /@next/swc-win32-arm64-msvc/12.3.1: @@ -3597,6 +3214,7 @@ packages: cpu: [arm64] os: [win32] requiresBuild: true + dev: false optional: true /@next/swc-win32-ia32-msvc/12.3.1: @@ -3614,6 +3232,7 @@ packages: cpu: [ia32] os: [win32] requiresBuild: true + dev: false optional: true /@next/swc-win32-x64-msvc/12.3.1: @@ -3631,6 +3250,7 @@ packages: cpu: [x64] os: [win32] requiresBuild: true + dev: false optional: true /@nodelib/fs.scandir/2.1.5: @@ -3654,18 +3274,6 @@ packages: fastq: 1.13.0 dev: true - /@pkgr/utils/2.3.1: - resolution: {integrity: sha512-wfzX8kc1PMyUILA+1Z/EqoE4UCXGy0iRGMhPwdfae1+f0OXlLqCk+By+aMzgJBzR9AzS4CDizioG6Ss1gvAFJw==} - engines: {node: ^12.20.0 || ^14.18.0 || >=16.0.0} - dependencies: - cross-spawn: 7.0.3 - is-glob: 4.0.3 - open: 8.4.0 - picocolors: 1.0.0 - tiny-glob: 0.2.9 - tslib: 2.4.0 - dev: true - /@playwright/test/1.29.1: resolution: {integrity: sha512-iQxk2DX5U9wOGV3+/Jh9OHPsw5H3mleUL2S4BgQuwtlAfK3PnKvn38m4Rg9zIViGHVW24opSm99HQm/UFLEy6w==} engines: {node: '>=14'} @@ -3907,11 +3515,6 @@ packages: react: 18.2.0 dev: false - /@remix-run/router/1.2.1: - resolution: {integrity: sha512-XiY0IsyHR+DXYS5vBxpoBe/8veTeoRpMHP+vDosLZxL5bnpetzI0igkxkLZS235ldLzyfkxF+2divEwWHP3vMQ==} - engines: {node: '>=14'} - dev: false - /@rollup/plugin-babel/5.3.1_opjstonlpkhafnz76jsxdwq25a: resolution: {integrity: sha512-WFfdLWU/xVWKeRQnKmIAQULUI7Il0gZnBIH/ZFO069wYIfPu+8zrfp/KMW0atmELoRDq8FbiP3VCss9MhCut7Q==} engines: {node: '>= 10.0.0'} @@ -3997,7 +3600,7 @@ packages: ejs: 3.1.8 json5: 2.2.1 magic-string: 0.25.9 - string.prototype.matchall: 4.0.8 + string.prototype.matchall: 4.0.7 dev: true /@swc/helpers/0.4.11: @@ -4010,6 +3613,7 @@ packages: resolution: {integrity: sha512-4C7nX/dvpzB7za4Ql9K81xK3HPxCpHMgwTZVyf+9JQ6VUbn9jjZVN7/Nkdz/Ugzs2CSjqnL/UPXroiVBVHUWUw==} dependencies: tslib: 2.4.0 + dev: false /@szmarczak/http-timer/5.0.1: resolution: {integrity: sha512-+PmQX0PiAYPMeVYe237LJAYvOMYW1j2rH5YROyS3b4CTVJum34HfRvKvAzozHAQG0TnHNdUfY9nCeUyRAs//cw==} @@ -4018,108 +3622,6 @@ packages: defer-to-connect: 2.0.1 dev: true - /@tauri-apps/api/1.2.0: - resolution: {integrity: sha512-lsI54KI6HGf7VImuf/T9pnoejfgkNoXveP14pVV7XarrQ46rOejIVJLFqHI9sRReJMGdh2YuCoI3cc/yCWCsrw==} - engines: {node: '>= 14.6.0', npm: '>= 6.6.0', yarn: '>= 1.19.1'} - dev: false - - /@tauri-apps/cli-darwin-arm64/1.2.2: - resolution: {integrity: sha512-W+Cp2weUMlvmGkRJeUjypbz9Lpl6o98xkgKAtobZSum5SNwpsBQfawJTESakNoD+FXyVg/snIk5sRdHge+tAaA==} - engines: {node: '>= 10'} - cpu: [arm64] - os: [darwin] - requiresBuild: true - dev: true - optional: true - - /@tauri-apps/cli-darwin-x64/1.2.2: - resolution: {integrity: sha512-vmVAqt+ECH2d6cbcGJ7ddcCAZgmKe5xmxlL5r4xoaphu7OqU4gnv4VFURYkVltOfwzIFQVOPVSqwYyIDToCYNQ==} - engines: {node: '>= 10'} - cpu: [x64] - os: [darwin] - requiresBuild: true - dev: true - optional: true - - /@tauri-apps/cli-linux-arm-gnueabihf/1.2.2: - resolution: {integrity: sha512-yYTdQurgi4QZR8z+fANjl522jdQz/VtesFpw+C/A0+zXg7tiRjicsywBDdPsvNzCqFeGKKkmTR+Lny5qxhGaeQ==} - engines: {node: '>= 10'} - cpu: [arm] - os: [linux] - requiresBuild: true - dev: true - optional: true - - /@tauri-apps/cli-linux-arm64-gnu/1.2.2: - resolution: {integrity: sha512-ZSOVT6Eq1ay2+27B8KfA0MnpO7KYzONU6TjenH7DNcQki6eWGG5JoNu8QQ9Mdn3dAzY0XBP9i1ZHQOFu4iPtEg==} - engines: {node: '>= 10'} - cpu: [arm64] - os: [linux] - requiresBuild: true - dev: true - optional: true - - /@tauri-apps/cli-linux-arm64-musl/1.2.2: - resolution: {integrity: sha512-/NHSkqNQ+Pr4PshvyD1CeNFaPCaCpe1OeuAQgVi0rboSecC9fXN96G5dQbSBoxOUcCo6f8aTVE7zkZ4WchFVog==} - engines: {node: '>= 10'} - cpu: [arm64] - os: [linux] - requiresBuild: true - dev: true - optional: true - - /@tauri-apps/cli-linux-x64-gnu/1.2.2: - resolution: {integrity: sha512-4YTmfPuyvlHsvCkATDMwhklfuQm3HKxYXv/IOW9H0ra6pS9efVhrFYIC9Vfv6XaKN85Vnn/FYTEGMJLwCxZw2Q==} - engines: {node: '>= 10'} - cpu: [x64] - os: [linux] - requiresBuild: true - dev: true - optional: true - - /@tauri-apps/cli-linux-x64-musl/1.2.2: - resolution: {integrity: sha512-wr46tbscwFuCcA931R+ItOiUTT0djMmgKLd1HFCmFF82V9BKE2reIjr6O9l0NCXCo2WeD4pe3jA/Pt1dxDu+JA==} - engines: {node: '>= 10'} - cpu: [x64] - os: [linux] - requiresBuild: true - dev: true - optional: true - - /@tauri-apps/cli-win32-ia32-msvc/1.2.2: - resolution: {integrity: sha512-6VmbVJOWUZJK5/JKhb3mNFKrKGfq0KV7lJGumfN95WJgkHeyL61p8bZit+o6ZgUGUhrOabkAawhDkrRY+ZQhIw==} - engines: {node: '>= 10'} - cpu: [ia32] - os: [win32] - requiresBuild: true - dev: true - optional: true - - /@tauri-apps/cli-win32-x64-msvc/1.2.2: - resolution: {integrity: sha512-YRPJguJma+zSuRZpFoSZqls6+laggG1vqG0FPQWQTi+ywATgMpai2b2RZnffDlpHKp9mt4V/s2dtqOy6bpGZHg==} - engines: {node: '>= 10'} - cpu: [x64] - os: [win32] - requiresBuild: true - dev: true - optional: true - - /@tauri-apps/cli/1.2.2: - resolution: {integrity: sha512-D8zib3A0vWCvPPSyYLxww/OdDlVcY7fpcDVBH6qUvheOjj2aCyU7H9AYMRBwpgCfz8zY5+vomee+laLeB0H13w==} - engines: {node: '>= 10'} - hasBin: true - optionalDependencies: - '@tauri-apps/cli-darwin-arm64': 1.2.2 - '@tauri-apps/cli-darwin-x64': 1.2.2 - '@tauri-apps/cli-linux-arm-gnueabihf': 1.2.2 - '@tauri-apps/cli-linux-arm64-gnu': 1.2.2 - '@tauri-apps/cli-linux-arm64-musl': 1.2.2 - '@tauri-apps/cli-linux-x64-gnu': 1.2.2 - '@tauri-apps/cli-linux-x64-musl': 1.2.2 - '@tauri-apps/cli-win32-ia32-msvc': 1.2.2 - '@tauri-apps/cli-win32-x64-msvc': 1.2.2 - dev: true - /@tldraw/intersect/1.8.0: resolution: {integrity: sha512-0UarshNpyq2+O4o0xHMJIBgF0E630mes5CkMoO+D5xgYppSBIkeqYDcv0ujsmAhMKX1O6Y0ShuuHeflBEULUoQ==} dependencies: @@ -4180,17 +3682,12 @@ packages: resolution: {integrity: sha512-HXwADeHEP4exXkCIwy2n1+i0f1ilP1ETQOH5KDOugjkTFZPntWo0Gr8stZOaebkxsdx+k0X/K6obU/+it07ocg==} dev: false - /@types/fs-extra/9.0.13: - resolution: {integrity: sha512-nEnwB++1u5lVDM2UI4c1+5R+FYaKfaAzS4OococimjVm3nQw3TuzH5UNsocrcTBbhnerblyHj4A49qXbIiZdpA==} - dependencies: - '@types/node': 18.11.18 - dev: true - /@types/glob/7.2.0: resolution: {integrity: sha512-ZUxbzKl0IfJILTS6t7ip5fQQM/J3TJYubDm3nMbgubNNYS62eXeUpoLUC8/7fJNiFYHTrGPQn7hspDUzIHX3UA==} dependencies: '@types/minimatch': 5.1.2 - '@types/node': 18.11.18 + '@types/node': 18.7.18 + dev: true /@types/graceful-fs/4.1.6: resolution: {integrity: sha512-Sig0SNORX9fdW+bQuTEovKj3uHcUL6LQKbCrrqb1X7J6/ReAbhCXRAhc+SMejhLELFj2QcyuxmUooZ4bt5ReSw==} @@ -4226,21 +3723,19 @@ packages: /@types/json-schema/7.0.11: resolution: {integrity: sha512-wOuvG1SN4Us4rez+tylwwwCV1psiNVOkJeM3AUWUNWg/jDQY2+HE/444y5gc+jBmRqASOm2Oeh5c1axHobwRKQ==} + dev: true /@types/json5/0.0.29: resolution: {integrity: sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==} dev: true - /@types/lodash/4.14.191: - resolution: {integrity: sha512-BdZ5BCCvho3EIXw6wUCXHe7rS53AIDPLE+JzwgT+OsJk53oBfbSmZZ7CX4VaRoN78N+TJpFi9QPlfIVNmJYWxQ==} - dev: false - /@types/long/4.0.2: resolution: {integrity: sha512-MqTGEo5bj5t157U6fA/BiDynNkn0YknVdh48CMPkTSpFTVmvao5UQmm7uEF6xBEo7qIMAlY/JSleYaE6VOdpaA==} dev: false /@types/minimatch/5.1.2: resolution: {integrity: sha512-K0VQKziLUWkVKiRVrx4a40iPaxTUefQmjtkQofBkYRcoaaL/8rhwDWww9qWbrgicNOgnpIsMxyNIUM4+n6dUIA==} + dev: true /@types/minimist/1.2.2: resolution: {integrity: sha512-jhuKLIRrhvCPLqwPcx6INqmKeiA5EWrsCOPhrlFSrbrmU4ZMPjj5Ul/oLCMDO98XRUIwVm78xICz4EPCektzeQ==} @@ -4267,45 +3762,37 @@ packages: /@types/parse-json/4.0.0: resolution: {integrity: sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA==} + dev: false /@types/prettier/2.7.2: resolution: {integrity: sha512-KufADq8uQqo1pYKVIYzfKbJfBAc0sOeXqGbFaSpv8MRmC/zXgowNZmFcbngndGk922QDmOASEXUZCaY48gs4cg==} + dev: true /@types/prop-types/15.7.5: resolution: {integrity: sha512-JCB8C6SnDoQf0cNycqd/35A7MjcnK+ZTqE7judS6o7utxUCg6imJg3QK2qzHKszlTjcj2cn+NwMB2i96ubpj7w==} - /@types/ps-tree/1.1.2: - resolution: {integrity: sha512-ZREFYlpUmPQJ0esjxoG1fMvB2HNaD3z+mjqdSosZvd3RalncI9NEur73P8ZJz4YQdL64CmV1w0RuqoRUlhQRBw==} - dev: true - /@types/quill/1.3.10: resolution: {integrity: sha512-IhW3fPW+bkt9MLNlycw8u8fWb7oO7W5URC9MfZYHBlA24rex9rs23D5DETChu1zvgVdc5ka64ICjJOgQMr6Shw==} dependencies: parchment: 1.1.4 dev: false - /@types/react-dom/18.0.10: - resolution: {integrity: sha512-E42GW/JA4Qv15wQdqJq8DL4JhNpB3prJgjgapN3qJT9K2zO5IIAQh4VXvCEDupoqAwnz0cY4RlXeC/ajX5SFHg==} - dependencies: - '@types/react': 18.0.26 - dev: true - /@types/react-dom/18.0.6: resolution: {integrity: sha512-/5OFZgfIPSwy+YuIBP/FgJnQnsxhZhjjrnxudMddeblOouIodEQ75X14Rr4wGSG/bknL+Omy9iWlLo1u/9GzAA==} dependencies: - '@types/react': 18.0.26 + '@types/react': 18.0.20 dev: true /@types/react-is/17.0.3: resolution: {integrity: sha512-aBTIWg1emtu95bLTLx0cpkxwGW3ueZv71nE2YFBpL8k/z5czEW8yYpOo8Dp+UUAFAtKwNaOsh/ioSeQnWlZcfw==} dependencies: - '@types/react': 18.0.26 + '@types/react': 18.0.20 dev: false /@types/react-transition-group/4.4.5: resolution: {integrity: sha512-juKD/eiSM3/xZYzjuzH6ZwpP+/lejltmiS3QEzV/vmb/Q8+HfDmxu+Baga8UEMGBqV88Nbg4l2hY/K2DkyaLLA==} dependencies: - '@types/react': 18.0.26 + '@types/react': 18.0.20 dev: false /@types/react/18.0.20: @@ -4323,17 +3810,10 @@ packages: csstype: 3.1.1 dev: true - /@types/react/18.0.26: - resolution: {integrity: sha512-hCR3PJQsAIXyxhTNSiDFY//LhnMZWpNNr5etoCqx/iUfGc5gXWtQR2Phl908jVR6uPXacojQWTg4qRpkxTuGug==} - dependencies: - '@types/prop-types': 15.7.5 - '@types/scheduler': 0.16.2 - csstype: 3.1.1 - /@types/resolve/1.17.1: resolution: {integrity: sha512-yy7HuzQhj0dhGpD8RLXSZWEkLsV9ibvxvi6EiJ3bkqLAO1RGo0WbkWQiwpRlSFymTJRz0d3k5LM3kkx8ArDbLw==} dependencies: - '@types/node': 18.11.18 + '@types/node': 18.7.18 dev: true /@types/scheduler/0.16.2: @@ -4354,10 +3834,6 @@ packages: /@types/trusted-types/2.0.2: resolution: {integrity: sha512-F5DIZ36YVLE+PN+Zwws4kJogq47hNgX3Nx6WyDJ3kcplxyke3XIzB8uK5n/Lpm1HBsbGzd6nmGehL8cPekP+Tg==} - /@types/which/2.0.1: - resolution: {integrity: sha512-Jjakcv8Roqtio6w1gr0D7y6twbhx6gGgFGF5BLwajPpnOIOxFkakFhCq+LmyyeAz7BX6ULrjBOxdKaCDy+4+dQ==} - dev: true - /@types/wicg-file-system-access/2020.9.5: resolution: {integrity: sha512-UYK244awtmcUYQfs7FR8710MJcefL2WvkyHMjA8yJzxd1mo0Gfn88sRZ1Bls7hiUhA2w7ne1gpJ9T5g3G0wOyA==} dev: true @@ -4372,33 +3848,6 @@ packages: '@types/yargs-parser': 21.0.0 dev: true - /@typescript-eslint/eslint-plugin/5.47.0_ncmi6noazr3nzas7jxykisekym: - resolution: {integrity: sha512-AHZtlXAMGkDmyLuLZsRpH3p4G/1iARIwc/T0vIem2YB+xW6pZaXYXzCBnZSF/5fdM97R9QqZWZ+h3iW10XgevQ==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - peerDependencies: - '@typescript-eslint/parser': ^5.0.0 - eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 - typescript: '*' - peerDependenciesMeta: - typescript: - optional: true - dependencies: - '@typescript-eslint/parser': 5.47.0_lzzuuodtsqwxnvqeq4g4likcqa - '@typescript-eslint/scope-manager': 5.47.0 - '@typescript-eslint/type-utils': 5.47.0_lzzuuodtsqwxnvqeq4g4likcqa - '@typescript-eslint/utils': 5.47.0_lzzuuodtsqwxnvqeq4g4likcqa - debug: 4.3.4 - eslint: 8.30.0 - ignore: 5.2.0 - natural-compare-lite: 1.4.0 - regexpp: 3.2.0 - semver: 7.3.7 - tsutils: 3.21.0_typescript@4.9.4 - typescript: 4.9.4 - transitivePeerDependencies: - - supports-color - dev: true - /@typescript-eslint/eslint-plugin/5.48.0_wxmz6cyorqfuzhhglktlvr5lve: resolution: {integrity: sha512-SVLafp0NXpoJY7ut6VFVUU9I+YeFsDzeQwtK0WZ+xbRN3mtxJ08je+6Oi2N89qDn087COdO0u3blKZNv9VetRQ==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} @@ -4426,39 +3875,6 @@ packages: - supports-color dev: true - /@typescript-eslint/experimental-utils/5.48.1_lzzuuodtsqwxnvqeq4g4likcqa: - resolution: {integrity: sha512-8OoIZZuOeqsm5cxn2f01qHWtVC3M4iixSsfZXPiQUg4Sl4LiU+b5epcJFwxNfqeoLl+SGncELyi3x99zI6C0ng==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - peerDependencies: - eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 - dependencies: - '@typescript-eslint/utils': 5.48.1_lzzuuodtsqwxnvqeq4g4likcqa - eslint: 8.30.0 - transitivePeerDependencies: - - supports-color - - typescript - dev: true - - /@typescript-eslint/parser/5.47.0_lzzuuodtsqwxnvqeq4g4likcqa: - resolution: {integrity: sha512-udPU4ckK+R1JWCGdQC4Qa27NtBg7w020ffHqGyAK8pAgOVuNw7YaKXGChk+udh+iiGIJf6/E/0xhVXyPAbsczw==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - peerDependencies: - eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 - typescript: '*' - peerDependenciesMeta: - typescript: - optional: true - dependencies: - '@typescript-eslint/scope-manager': 5.47.0 - '@typescript-eslint/types': 5.47.0 - '@typescript-eslint/typescript-estree': 5.47.0_typescript@4.9.4 - debug: 4.3.4 - eslint: 8.30.0 - typescript: 4.9.4 - transitivePeerDependencies: - - supports-color - dev: true - /@typescript-eslint/parser/5.48.0_76twfck5d7crjqrmw4yltga7zm: resolution: {integrity: sha512-1mxNA8qfgxX8kBvRDIHEzrRGrKHQfQlbW6iHyfHYS0Q4X1af+S6mkLNtgCOsGVl8+/LUPrqdHMssAemkrQ01qg==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} @@ -4479,26 +3895,6 @@ packages: - supports-color dev: true - /@typescript-eslint/parser/5.48.0_lzzuuodtsqwxnvqeq4g4likcqa: - resolution: {integrity: sha512-1mxNA8qfgxX8kBvRDIHEzrRGrKHQfQlbW6iHyfHYS0Q4X1af+S6mkLNtgCOsGVl8+/LUPrqdHMssAemkrQ01qg==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - peerDependencies: - eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 - typescript: '*' - peerDependenciesMeta: - typescript: - optional: true - dependencies: - '@typescript-eslint/scope-manager': 5.48.0 - '@typescript-eslint/types': 5.48.0 - '@typescript-eslint/typescript-estree': 5.48.0_typescript@4.9.4 - debug: 4.3.4 - eslint: 8.30.0 - typescript: 4.9.4 - transitivePeerDependencies: - - supports-color - dev: true - /@typescript-eslint/parser/5.48.0_p4cjf2r47dnfiqufepc5hp43sq: resolution: {integrity: sha512-1mxNA8qfgxX8kBvRDIHEzrRGrKHQfQlbW6iHyfHYS0Q4X1af+S6mkLNtgCOsGVl8+/LUPrqdHMssAemkrQ01qg==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} @@ -4519,14 +3915,6 @@ packages: - supports-color dev: true - /@typescript-eslint/scope-manager/5.47.0: - resolution: {integrity: sha512-dvJab4bFf7JVvjPuh3sfBUWsiD73aiftKBpWSfi3sUkysDQ4W8x+ZcFpNp7Kgv0weldhpmMOZBjx1wKN8uWvAw==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - dependencies: - '@typescript-eslint/types': 5.47.0 - '@typescript-eslint/visitor-keys': 5.47.0 - dev: true - /@typescript-eslint/scope-manager/5.48.0: resolution: {integrity: sha512-0AA4LviDtVtZqlyUQnZMVHydDATpD9SAX/RC5qh6cBd3xmyWvmXYF+WT1oOmxkeMnWDlUVTwdODeucUnjz3gow==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} @@ -4535,34 +3923,6 @@ packages: '@typescript-eslint/visitor-keys': 5.48.0 dev: true - /@typescript-eslint/scope-manager/5.48.1: - resolution: {integrity: sha512-S035ueRrbxRMKvSTv9vJKIWgr86BD8s3RqoRZmsSh/s8HhIs90g6UlK8ZabUSjUZQkhVxt7nmZ63VJ9dcZhtDQ==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - dependencies: - '@typescript-eslint/types': 5.48.1 - '@typescript-eslint/visitor-keys': 5.48.1 - dev: true - - /@typescript-eslint/type-utils/5.47.0_lzzuuodtsqwxnvqeq4g4likcqa: - resolution: {integrity: sha512-1J+DFFrYoDUXQE1b7QjrNGARZE6uVhBqIvdaXTe5IN+NmEyD68qXR1qX1g2u4voA+nCaelQyG8w30SAOihhEYg==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - peerDependencies: - eslint: '*' - typescript: '*' - peerDependenciesMeta: - typescript: - optional: true - dependencies: - '@typescript-eslint/typescript-estree': 5.47.0_typescript@4.9.4 - '@typescript-eslint/utils': 5.47.0_lzzuuodtsqwxnvqeq4g4likcqa - debug: 4.3.4 - eslint: 8.30.0 - tsutils: 3.21.0_typescript@4.9.4 - typescript: 4.9.4 - transitivePeerDependencies: - - supports-color - dev: true - /@typescript-eslint/type-utils/5.48.0_p4cjf2r47dnfiqufepc5hp43sq: resolution: {integrity: sha512-vbtPO5sJyFjtHkGlGK4Sthmta0Bbls4Onv0bEqOGm7hP9h8UpRsHJwsrCiWtCUndTRNQO/qe6Ijz9rnT/DB+7g==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} @@ -4583,42 +3943,11 @@ packages: - supports-color dev: true - /@typescript-eslint/types/5.47.0: - resolution: {integrity: sha512-eslFG0Qy8wpGzDdYKu58CEr3WLkjwC5Usa6XbuV89ce/yN5RITLe1O8e+WFEuxnfftHiJImkkOBADj58ahRxSg==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - dev: true - /@typescript-eslint/types/5.48.0: resolution: {integrity: sha512-UTe67B0Ypius0fnEE518NB2N8gGutIlTojeTg4nt0GQvikReVkurqxd2LvYa9q9M5MQ6rtpNyWTBxdscw40Xhw==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} dev: true - /@typescript-eslint/types/5.48.1: - resolution: {integrity: sha512-xHyDLU6MSuEEdIlzrrAerCGS3T7AA/L8Hggd0RCYBi0w3JMvGYxlLlXHeg50JI9Tfg5MrtsfuNxbS/3zF1/ATg==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - dev: true - - /@typescript-eslint/typescript-estree/5.47.0_typescript@4.9.4: - resolution: {integrity: sha512-LxfKCG4bsRGq60Sqqu+34QT5qT2TEAHvSCCJ321uBWywgE2dS0LKcu5u+3sMGo+Vy9UmLOhdTw5JHzePV/1y4Q==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - peerDependencies: - typescript: '*' - peerDependenciesMeta: - typescript: - optional: true - dependencies: - '@typescript-eslint/types': 5.47.0 - '@typescript-eslint/visitor-keys': 5.47.0 - debug: 4.3.4 - globby: 11.1.0 - is-glob: 4.0.3 - semver: 7.3.8 - tsutils: 3.21.0_typescript@4.9.4 - typescript: 4.9.4 - transitivePeerDependencies: - - supports-color - dev: true - /@typescript-eslint/typescript-estree/5.48.0_typescript@4.8.3: resolution: {integrity: sha512-7pjd94vvIjI1zTz6aq/5wwE/YrfIyEPLtGJmRfyNR9NYIW+rOvzzUv3Cmq2hRKpvt6e9vpvPUQ7puzX7VSmsEw==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} @@ -4661,68 +3990,6 @@ packages: - supports-color dev: true - /@typescript-eslint/typescript-estree/5.48.0_typescript@4.9.4: - resolution: {integrity: sha512-7pjd94vvIjI1zTz6aq/5wwE/YrfIyEPLtGJmRfyNR9NYIW+rOvzzUv3Cmq2hRKpvt6e9vpvPUQ7puzX7VSmsEw==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - peerDependencies: - typescript: '*' - peerDependenciesMeta: - typescript: - optional: true - dependencies: - '@typescript-eslint/types': 5.48.0 - '@typescript-eslint/visitor-keys': 5.48.0 - debug: 4.3.4 - globby: 11.1.0 - is-glob: 4.0.3 - semver: 7.3.7 - tsutils: 3.21.0_typescript@4.9.4 - typescript: 4.9.4 - transitivePeerDependencies: - - supports-color - dev: true - - /@typescript-eslint/typescript-estree/5.48.1_typescript@4.9.4: - resolution: {integrity: sha512-Hut+Osk5FYr+sgFh8J/FHjqX6HFcDzTlWLrFqGoK5kVUN3VBHF/QzZmAsIXCQ8T/W9nQNBTqalxi1P3LSqWnRA==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - peerDependencies: - typescript: '*' - peerDependenciesMeta: - typescript: - optional: true - dependencies: - '@typescript-eslint/types': 5.48.1 - '@typescript-eslint/visitor-keys': 5.48.1 - debug: 4.3.4 - globby: 11.1.0 - is-glob: 4.0.3 - semver: 7.3.8 - tsutils: 3.21.0_typescript@4.9.4 - typescript: 4.9.4 - transitivePeerDependencies: - - supports-color - dev: true - - /@typescript-eslint/utils/5.47.0_lzzuuodtsqwxnvqeq4g4likcqa: - resolution: {integrity: sha512-U9xcc0N7xINrCdGVPwABjbAKqx4GK67xuMV87toI+HUqgXj26m6RBp9UshEXcTrgCkdGYFzgKLt8kxu49RilDw==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - peerDependencies: - eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 - dependencies: - '@types/json-schema': 7.0.11 - '@types/semver': 7.3.13 - '@typescript-eslint/scope-manager': 5.47.0 - '@typescript-eslint/types': 5.47.0 - '@typescript-eslint/typescript-estree': 5.47.0_typescript@4.9.4 - eslint: 8.30.0 - eslint-scope: 5.1.1 - eslint-utils: 3.0.0_eslint@8.30.0 - semver: 7.3.8 - transitivePeerDependencies: - - supports-color - - typescript - dev: true - /@typescript-eslint/utils/5.48.0_p4cjf2r47dnfiqufepc5hp43sq: resolution: {integrity: sha512-x2jrMcPaMfsHRRIkL+x96++xdzvrdBCnYRd5QiW5Wgo1OB4kDYPbC1XjWP/TNqlfK93K/lUL92erq5zPLgFScQ==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} @@ -4743,34 +4010,6 @@ packages: - typescript dev: true - /@typescript-eslint/utils/5.48.1_lzzuuodtsqwxnvqeq4g4likcqa: - resolution: {integrity: sha512-SmQuSrCGUOdmGMwivW14Z0Lj8dxG1mOFZ7soeJ0TQZEJcs3n5Ndgkg0A4bcMFzBELqLJ6GTHnEU+iIoaD6hFGA==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - peerDependencies: - eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 - dependencies: - '@types/json-schema': 7.0.11 - '@types/semver': 7.3.13 - '@typescript-eslint/scope-manager': 5.48.1 - '@typescript-eslint/types': 5.48.1 - '@typescript-eslint/typescript-estree': 5.48.1_typescript@4.9.4 - eslint: 8.30.0 - eslint-scope: 5.1.1 - eslint-utils: 3.0.0_eslint@8.30.0 - semver: 7.3.8 - transitivePeerDependencies: - - supports-color - - typescript - dev: true - - /@typescript-eslint/visitor-keys/5.47.0: - resolution: {integrity: sha512-ByPi5iMa6QqDXe/GmT/hR6MZtVPi0SqMQPDx15FczCBXJo/7M8T88xReOALAfpBLm+zxpPfmhuEvPb577JRAEg==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - dependencies: - '@typescript-eslint/types': 5.47.0 - eslint-visitor-keys: 3.3.0 - dev: true - /@typescript-eslint/visitor-keys/5.48.0: resolution: {integrity: sha512-5motVPz5EgxQ0bHjut3chzBkJ3Z3sheYVcSwS5BpHZpLqSptSmELNtGixmgj65+rIfhvtQTz5i9OP2vtzdDH7Q==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} @@ -4779,14 +4018,6 @@ packages: eslint-visitor-keys: 3.3.0 dev: true - /@typescript-eslint/visitor-keys/5.48.1: - resolution: {integrity: sha512-Ns0XBwmfuX7ZknznfXozgnydyR8F6ev/KEGePP4i74uL3ArsKbEhJ7raeKr1JSa997DBDwol/4a0Y+At82c9dA==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - dependencies: - '@typescript-eslint/types': 5.48.1 - eslint-visitor-keys: 3.3.0 - dev: true - /abort-controller/3.0.0: resolution: {integrity: sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg==} engines: {node: '>=6.5'} @@ -4884,10 +4115,6 @@ packages: engines: {node: '>=12'} dev: true - /any-promise/1.3.0: - resolution: {integrity: sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==} - dev: false - /anymatch/3.1.3: resolution: {integrity: sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==} engines: {node: '>= 8'} @@ -4904,6 +4131,7 @@ packages: /argparse/2.0.1: resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==} + dev: true /aria-hidden/1.2.2_w5j4k42lgipnm43s3brx6h3c34: resolution: {integrity: sha512-6y/ogyDTk/7YAe91T3E2PR1ALVKyM2QbTio5HwM+N1Q6CMlCKhvClyIjkckBswa0f2xJhjsfzIGa1yVSe1UMVA==} @@ -4939,17 +4167,6 @@ packages: is-string: 1.0.7 dev: true - /array-includes/3.1.6: - resolution: {integrity: sha512-sgTbLvL6cNnw24FnbaDyjmvddQ2ML8arZsgaJhoABMoplz/4QRhtrYS+alr1BUM1Bwp6dhx8vVCBSLG+StwOFw==} - engines: {node: '>= 0.4'} - dependencies: - call-bind: 1.0.2 - define-properties: 1.1.4 - es-abstract: 1.21.1 - get-intrinsic: 1.1.3 - is-string: 1.0.7 - dev: true - /array-union/1.0.2: resolution: {integrity: sha512-Dxr6QJj/RdU/hCaBjOfxW+q6lyuVE6JFWIrAUpuOOhoJJoQ99cUn3igRaHVB5P9WrgFVN0FfArM3x0cueOU8ng==} engines: {node: '>=0.10.0'} @@ -4987,26 +4204,6 @@ packages: es-shim-unscopables: 1.0.0 dev: true - /array.prototype.flatmap/1.3.1: - resolution: {integrity: sha512-8UGn9O1FDVvMNB0UlLv4voxRMze7+FpHyF5mSMRjWHUMlpoDViniy05870VlxhfgTnLbpuwTzvD76MTtWxB/mQ==} - engines: {node: '>= 0.4'} - dependencies: - call-bind: 1.0.2 - define-properties: 1.1.4 - es-abstract: 1.21.1 - es-shim-unscopables: 1.0.0 - dev: true - - /array.prototype.tosorted/1.1.1: - resolution: {integrity: sha512-pZYPXPRl2PqWcsUs6LOMn+1f1532nEoPTYowBtqLwAW+W8vSVhkIGnmOX1t/UQjD6YGI0vcD2B1U7ZFGQH9jnQ==} - dependencies: - call-bind: 1.0.2 - define-properties: 1.1.4 - es-abstract: 1.21.1 - es-shim-unscopables: 1.0.0 - get-intrinsic: 1.1.3 - dev: true - /arrify/1.0.1: resolution: {integrity: sha512-3CYzex9M9FGQjCGMGyi6/31c8GJbgb0qGyrx5HWxPd0aCwh4cB2YjMb2Xf9UuoogrMrlO9cTqnB5rI5GHZTcUA==} engines: {node: '>=0.10.0'} @@ -5025,10 +4222,6 @@ packages: resolution: {integrity: sha512-iAB+JbDEGXhyIUavoDl9WP/Jj106Kz9DEn1DPgYw5ruDn0e3Wgi3sKFm55sASdGBNOQB8F59d9qQ7deqrHA8wQ==} dev: true - /asynckit/0.4.0: - resolution: {integrity: sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==} - dev: true - /at-least-node/1.0.0: resolution: {integrity: sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==} engines: {node: '>= 4.0.0'} @@ -5038,33 +4231,11 @@ packages: resolution: {integrity: sha512-FPVt5ynkqUAA9gcMZnJHka1XfQgr1WNd/yRfIjmj5WGmjua+u5Hl9hn8M2nU5CNy2bEIcj1ZUwXq7IOHsfZG9w==} dev: false - /available-typed-arrays/1.0.5: - resolution: {integrity: sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw==} - engines: {node: '>= 0.4'} - dev: true - - /awilix/7.0.3: - resolution: {integrity: sha512-4Nmjyh9qloDwXfDK0DBuWd8WyFApyknoaKbE3leQflGLgNfNsBHy2/VYrlyy/mzMobjJ3J8XtNpbjzG3KRkIFQ==} - engines: {node: '>=12.0.0'} - dependencies: - camel-case: 4.1.2 - fast-glob: 3.2.12 - dev: true - /axe-core/4.4.3: resolution: {integrity: sha512-32+ub6kkdhhWick/UjvEwRchgoetXqTK14INLqbGm5U2TzBkBNF3nQtLYm8ovxSkQWArjEQvftCKryjZaATu3w==} engines: {node: '>=4'} dev: true - /axios/0.27.2: - resolution: {integrity: sha512-t+yRIyySRTp/wua5xEr+z1q60QmLq8ABsS5O9Me1AsE5dfKqgnCFzwiCZZ/cGNd1lq4/7akDWMxdhVlucjmnOQ==} - dependencies: - follow-redirects: 1.15.2 - form-data: 4.0.0 - transitivePeerDependencies: - - debug - dev: true - /axobject-query/2.2.0: resolution: {integrity: sha512-Td525n+iPOOyUQIeBfcASuG6uJsDOITl7Mds5gFyerkWiX7qhUTdYUBlSgNMyVqtSJqwpt1kXGLdUt6SykLMRA==} dev: true @@ -5201,6 +4372,7 @@ packages: /balanced-match/1.0.2: resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} + dev: true /base64-arraybuffer-es6/0.7.0: resolution: {integrity: sha512-ESyU/U1CFZDJUdr+neHRhNozeCv72Y7Vm0m1DCbjX3KBjT6eYocvAJlSk6+8+HkVwXlT1FNxhGW6q3UKAlCvvw==} @@ -5209,6 +4381,7 @@ packages: /base64-js/1.5.1: resolution: {integrity: sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==} + dev: false /better-path-resolve/1.0.0: resolution: {integrity: sha512-pbnl5XzGBdrFU/wT4jqmJVPn2B6UHPBOhzMQkY/SPUPB6QtUXtmBHBIwCbXJol93mOpGMnQyP/+BB19q04xj7g==} @@ -5221,19 +4394,12 @@ packages: resolution: {integrity: sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==} dev: true - /bl/4.1.0: - resolution: {integrity: sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==} - dependencies: - buffer: 5.7.1 - inherits: 2.0.4 - readable-stream: 3.6.0 - dev: true - /brace-expansion/1.1.11: resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==} dependencies: balanced-match: 1.0.2 concat-map: 0.0.1 + dev: true /brace-expansion/2.0.1: resolution: {integrity: sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==} @@ -5279,13 +4445,6 @@ packages: resolution: {integrity: sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==} dev: true - /buffer/5.7.1: - resolution: {integrity: sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==} - dependencies: - base64-js: 1.5.1 - ieee754: 1.2.1 - dev: true - /buffer/6.0.3: resolution: {integrity: sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==} dependencies: @@ -5298,12 +4457,6 @@ packages: engines: {node: '>=6'} dev: true - /builtins/5.0.1: - resolution: {integrity: sha512-qwVpFEHNfhYJIzNRBvd2C1kyo6jz3ZSMPyyuR47OPdiKWlbYnZNyDWuyR175qDnAJLiCo5fBBqPb3RiXgWlkOQ==} - dependencies: - semver: 7.3.8 - dev: true - /cacheable-lookup/7.0.0: resolution: {integrity: sha512-+qJyx4xiKra8mZrcwhjMRMUhD5NR1R8esPkzIYxX96JiecFoxAXFuz/GpR3+ev4PE1WamHip78wV0vcmPQtp8w==} engines: {node: '>=14.16'} @@ -5328,21 +4481,10 @@ packages: function-bind: 1.1.1 get-intrinsic: 1.1.3 - /call-me-maybe/1.0.2: - resolution: {integrity: sha512-HpX65o1Hnr9HH25ojC1YGs7HCQLq0GCOibSaWER0eNpgJ/Z1MZv2mTc7+xh6WOPxbRVcmgbv4hGU+uSQ/2xFZQ==} - dev: false - /callsites/3.1.0: resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==} engines: {node: '>=6'} - /camel-case/4.1.2: - resolution: {integrity: sha512-gxGWBrTT1JuMx6R+o5PTXMmUnhnVzLQ9SNutD4YqKtI6ap897t3tKECYla6gCWEkplXnlNybEkZg9GEGxKFCgw==} - dependencies: - pascal-case: 3.1.2 - tslib: 2.4.0 - dev: true - /camelcase-keys/6.2.2: resolution: {integrity: sha512-YrwaA0vEKazPBkn0ipTiMpSajYDSe+KjQfrjhcBMxJt/znbvlHd8Pw/Vamaz5EB4Wfhs3SUR3Z9mwRu/P3s3Yg==} engines: {node: '>=8'} @@ -5381,11 +4523,6 @@ packages: supports-color: 7.2.0 dev: true - /chalk/5.2.0: - resolution: {integrity: sha512-ree3Gqw/nazQAPuJJEy+avdl7QfZMcUvmHIKgEZkGL+xOBzRvup5Hxo6LHuMceSxOabuJLJm5Yp/92R9eMmMvA==} - engines: {node: ^12.17.0 || ^14.13 || >=16.0.0} - dev: true - /char-regex/1.0.2: resolution: {integrity: sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw==} engines: {node: '>=10'} @@ -5404,13 +4541,6 @@ packages: resolution: {integrity: sha512-cOU9usZw8/dXIXKtwa8pM0OTJQuJkxMN6w30csNRUerHfeQ5R6U3kkU/FtJeIf3M202OHfY2U8ccInBG7/xogA==} dev: true - /clean-regexp/1.0.0: - resolution: {integrity: sha512-GfisEZEJvzKrmGWkvfhgzcz/BllN1USeqD2V6tg14OAOgaCD2Z/PUEuxnAZ/nPvmaHRG7a8y77p1T/IRQ4D1Hw==} - engines: {node: '>=4'} - dependencies: - escape-string-regexp: 1.0.5 - dev: true - /clean-stack/2.2.0: resolution: {integrity: sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==} engines: {node: '>=6'} @@ -5425,17 +4555,6 @@ packages: del: 4.1.1 dev: true - /cli-color/2.0.3: - resolution: {integrity: sha512-OkoZnxyC4ERN3zLzZaY9Emb7f/MhBOIpePv0Ycok0fJYT+Ouo00UBEIwsVsr0yoow++n5YWlSUgST9GKhNHiRQ==} - engines: {node: '>=0.10'} - dependencies: - d: 1.0.1 - es5-ext: 0.10.62 - es6-iterator: 2.0.3 - memoizee: 0.4.15 - timers-ext: 0.1.7 - dev: false - /cli-cursor/3.1.0: resolution: {integrity: sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==} engines: {node: '>=8'} @@ -5443,11 +4562,6 @@ packages: restore-cursor: 3.1.0 dev: true - /cli-spinners/2.7.0: - resolution: {integrity: sha512-qu3pN8Y3qHNgE2AFweciB1IfMnmZ/fsNTEE+NOFjmGB2F/7rLhnhzppvpCnN4FovtP26k8lHyy9ptEbNwWFLzw==} - engines: {node: '>=6'} - dev: true - /cli-truncate/2.1.0: resolution: {integrity: sha512-n8fOixwDD6b/ObinzTrp1ZKFzbgvKZvuz/TvejnLn1aQfC6r52XEx85FmuC+3HI+JM7coBRXUvNqEU2PHVrHpg==} engines: {node: '>=8'} @@ -5466,6 +4580,7 @@ packages: /client-only/0.0.1: resolution: {integrity: sha512-IV3Ou0jSMzZrd3pZ48nLkT9DA7Ag1pnPzaiQhpW7c3RbcqqzvzzVu+L8gfqMp/8IM2MQtSiqaCxrrcfu8I8rMA==} + dev: false /cliui/6.0.0: resolution: {integrity: sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ==} @@ -5551,13 +4666,6 @@ packages: resolution: {integrity: sha512-3tlv/dIP7FWvj3BsbHrGLJ6l/oKh1O3TcgBqMn+yyCagOxc23fyzDS6HypQbgxWbkpDnf52p1LuR4eWDQ/K9WQ==} dev: true - /combined-stream/1.0.8: - resolution: {integrity: sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==} - engines: {node: '>= 0.8'} - dependencies: - delayed-stream: 1.0.0 - dev: true - /command-score/0.1.2: resolution: {integrity: sha512-VtDvQpIJBvBatnONUsPzXYFVKQQAhuf3XTNOAsdBxCNO/QCtUUd8LSgjn0GVarBkCad6aJCZfXgrjYbl/KRr7w==} dev: false @@ -5582,21 +4690,6 @@ packages: /concat-map/0.0.1: resolution: {integrity: sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=} - - /concurrently/7.6.0: - resolution: {integrity: sha512-BKtRgvcJGeZ4XttiDiNcFiRlxoAeZOseqUvyYRUp/Vtd+9p1ULmeoSqGsDA+2ivdeDFpqrJvGvmI+StKfKl5hw==} - engines: {node: ^12.20.0 || ^14.13.0 || >=16.0.0} - hasBin: true - dependencies: - chalk: 4.1.2 - date-fns: 2.29.3 - lodash: 4.17.21 - rxjs: 7.8.0 - shell-quote: 1.7.4 - spawn-command: 0.0.2-1 - supports-color: 8.1.1 - tree-kill: 1.2.2 - yargs: 17.6.2 dev: true /convert-source-map/1.9.0: @@ -5630,14 +4723,7 @@ packages: parse-json: 5.2.0 path-type: 4.0.0 yaml: 1.10.2 - - /cross-env/7.0.3: - resolution: {integrity: sha512-+/HKd6EgcQCJGh2PSjZuUitQBQynKor4wrFbRg4DtAgS1aWO+gU52xpH7M9ScGgXSYmAVS9bIJ8EzuaGw0oNAw==} - engines: {node: '>=10.14', npm: '>=6', yarn: '>=1'} - hasBin: true - dependencies: - cross-spawn: 7.0.3 - dev: true + dev: false /cross-spawn/5.1.0: resolution: {integrity: sha512-pTgQJ5KC0d2hcY8eyL1IzlBPYjTkyH72XRZPnLyKus2mBfNjQs3klqbJU2VILqZryAZUt9JOb3h/mWMy23/f5A==} @@ -5692,13 +4778,6 @@ packages: stream-transform: 2.1.3 dev: true - /d/1.0.1: - resolution: {integrity: sha512-m62ShEObQ39CfralilEQRjH6oAMtNCV1xJyEx5LpRYUVN+EviphDgUc/F3hnYbADmkiNs67Y+3ylmlG7Lnu+FA==} - dependencies: - es5-ext: 0.10.62 - type: 1.2.0 - dev: false - /damerau-levenshtein/1.0.8: resolution: {integrity: sha512-sdQSFB7+llfUcQHUQO3+B8ERRj0Oa4w9POWMI/puGtuf7gFywGmkaLCElnudfTiKZV+NvHqL0ifzdrI8Ro7ESA==} dev: true @@ -5706,11 +4785,7 @@ packages: /data-uri-to-buffer/4.0.0: resolution: {integrity: sha512-Vr3mLBA8qWmcuschSLAOogKgQ/Jwxulv3RNE4FXnYWRGujzrRWQI4m12fQqRkwX06C0KanhLr4hK+GydchZsaA==} engines: {node: '>= 12'} - - /date-fns/2.29.3: - resolution: {integrity: sha512-dDCnyH2WnnKusqvZZ6+jA1O51Ibt8ZMRNkDZdyAyK4YfbDwa/cEmuztzG5pk6hqlp9aSBPYcjOlktquahGwGeA==} - engines: {node: '>=0.11'} - dev: true + dev: false /dayjs/1.11.7: resolution: {integrity: sha512-+Yw9U6YO5TQohxLcIkrXBeY73WP3ejHWVvx8XCk3gxvQDCTEmS48ZrSZCKciI7Bhl/uCMyxYtE9UqRILmFphkQ==} @@ -5804,11 +4879,6 @@ packages: engines: {node: '>=10'} dev: true - /define-lazy-prop/2.0.0: - resolution: {integrity: sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og==} - engines: {node: '>=8'} - dev: true - /define-properties/1.1.4: resolution: {integrity: sha512-uckOqKcfaVvtBdsVkdPv3XjveQJsNQqmhXgRi8uhvWWuPYZCNlzT8qAyblUgNoXdHdjMTzAqeGjAoli8f+bzPA==} engines: {node: '>= 0.4'} @@ -5829,11 +4899,6 @@ packages: rimraf: 2.7.1 dev: true - /delayed-stream/1.0.0: - resolution: {integrity: sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==} - engines: {node: '>=0.4.0'} - dev: true - /detect-indent/6.1.0: resolution: {integrity: sha512-reYkTUJAZb9gUuZ2RvVCNhVHdg62RHnJ7WJl8ftMi4diZ6NWlciOzQN88pUhSELEwflJht4oQDv0F0BMlwaYtA==} engines: {node: '>=8'} @@ -5881,47 +4946,16 @@ packages: csstype: 3.1.1 dev: false - /dom-serializer/2.0.0: - resolution: {integrity: sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg==} - dependencies: - domelementtype: 2.3.0 - domhandler: 5.0.3 - entities: 4.4.0 - dev: true - - /domelementtype/2.3.0: - resolution: {integrity: sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==} - dev: true - /domexception/1.0.1: resolution: {integrity: sha512-raigMkn7CJNNo6Ihro1fzG7wr3fHuYVytzquZKX5n0yizGsTcYgzdIUwj1X9pK0VvjeihV+XiclP+DjwbsSKug==} dependencies: webidl-conversions: 4.0.2 dev: true - /domhandler/5.0.3: - resolution: {integrity: sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w==} - engines: {node: '>= 4'} - dependencies: - domelementtype: 2.3.0 - dev: true - /domino/2.1.6: resolution: {integrity: sha512-3VdM/SXBZX2omc9JF9nOPCtDaYQ67BGp5CoLpIQlO2KCAPETs8TcDHacF26jXadGbvUteZzRTeos2fhID5+ucQ==} dev: false - /domutils/3.0.1: - resolution: {integrity: sha512-z08c1l761iKhDFtfXO04C7kTdPBLi41zwOZl00WS8b5eiaebNpY00HKbztwBq+e3vyqWNwWF3mP9YLUeqIrF+Q==} - dependencies: - dom-serializer: 2.0.0 - domelementtype: 2.3.0 - domhandler: 5.0.3 - dev: true - - /duplexer/0.1.2: - resolution: {integrity: sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg==} - dev: true - /duplexer2/0.1.4: resolution: {integrity: sha512-asLFVfWWtJ90ZyOUHMqk7/S2w2guQKxUI2itj3d92ADHhxUSbCMGi1f1cBcJ7xM1To+pE/Khbwo1yuNbMEPKeA==} dependencies: @@ -5967,14 +5001,6 @@ packages: iconv-lite: 0.6.3 dev: false - /enhanced-resolve/5.12.0: - resolution: {integrity: sha512-QHTXI/sZQmko1cbDoNAa3mJ5qhWUUNAq3vR0/YiD379fWQrcfuoX1+HW2S0MTt7XmoPLapdaDKUtelUSPic7hQ==} - engines: {node: '>=10.13.0'} - dependencies: - graceful-fs: 4.2.10 - tapable: 2.2.1 - dev: true - /enquirer/2.3.6: resolution: {integrity: sha512-yjNnPr315/FjS4zIsUxYguYUPP2e1NK4d7E7ZOLiyYCcbFBiTMyID+2wvm2w6+pZ/odMA7cRkjhsPbltwBOrLg==} engines: {node: '>=8.6'} @@ -5982,11 +5008,6 @@ packages: ansi-colors: 4.1.3 dev: true - /entities/4.4.0: - resolution: {integrity: sha512-oYp7156SP8LkeGD0GF85ad1X9Ai79WtRsZ2gxJqtBuzH+98YUV6jkHEKlZkMbcrjJjIVJNIDP/3WL9wQkoPbWA==} - engines: {node: '>=0.12'} - dev: true - /err-code/3.0.1: resolution: {integrity: sha512-GiaH0KJUewYok+eeY05IIgjtAe4Yltygk9Wqp1V5yVWLdhf0hYZchRjNIT9bb0mSwRcIusT3cx7PJUf3zEIfUA==} dev: false @@ -6025,54 +5046,6 @@ packages: unbox-primitive: 1.0.2 dev: true - /es-abstract/1.21.1: - resolution: {integrity: sha512-QudMsPOz86xYz/1dG1OuGBKOELjCh99IIWHLzy5znUB6j8xG2yMA7bfTV86VSqKF+Y/H08vQPR+9jyXpuC6hfg==} - engines: {node: '>= 0.4'} - dependencies: - available-typed-arrays: 1.0.5 - call-bind: 1.0.2 - es-set-tostringtag: 2.0.1 - es-to-primitive: 1.2.1 - function-bind: 1.1.1 - function.prototype.name: 1.1.5 - get-intrinsic: 1.1.3 - get-symbol-description: 1.0.0 - globalthis: 1.0.3 - gopd: 1.0.1 - has: 1.0.3 - has-property-descriptors: 1.0.0 - has-proto: 1.0.1 - has-symbols: 1.0.3 - internal-slot: 1.0.4 - is-array-buffer: 3.0.1 - is-callable: 1.2.7 - is-negative-zero: 2.0.2 - is-regex: 1.1.4 - is-shared-array-buffer: 1.0.2 - is-string: 1.0.7 - is-typed-array: 1.1.10 - is-weakref: 1.0.2 - object-inspect: 1.12.2 - object-keys: 1.1.1 - object.assign: 4.1.4 - regexp.prototype.flags: 1.4.3 - safe-regex-test: 1.0.0 - string.prototype.trimend: 1.0.6 - string.prototype.trimstart: 1.0.6 - typed-array-length: 1.0.4 - unbox-primitive: 1.0.2 - which-typed-array: 1.1.9 - dev: true - - /es-set-tostringtag/2.0.1: - resolution: {integrity: sha512-g3OMbtlwY3QewlqAiMLI47KywjWZoEytKr8pf6iTC8uJq5bIAH52Z9pnQ8pVL6whrCto53JZDuUIsifGeLorTg==} - engines: {node: '>= 0.4'} - dependencies: - get-intrinsic: 1.1.3 - has: 1.0.3 - has-tostringtag: 1.0.0 - dev: true - /es-shim-unscopables/1.0.0: resolution: {integrity: sha512-Jm6GPcCdC30eMLbZ2x8z2WuRwAws3zTBBKuusffYVUrNj/GVSUAZ+xKMaUpfNDR5IbyNA5LJbaecoUVbmUcB1w==} dependencies: @@ -6083,75 +5056,11 @@ packages: resolution: {integrity: sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==} engines: {node: '>= 0.4'} dependencies: - is-callable: 1.2.7 + is-callable: 1.2.6 is-date-object: 1.0.5 is-symbol: 1.0.4 dev: true - /es5-ext/0.10.62: - resolution: {integrity: sha512-BHLqn0klhEpnOKSrzn/Xsz2UIW8j+cGmo9JLzr8BiUapV8hPL9+FliFqjwr9ngW7jWdnxv6eO+/LqyhJVqgrjA==} - engines: {node: '>=0.10'} - requiresBuild: true - dependencies: - es6-iterator: 2.0.3 - es6-symbol: 3.1.3 - next-tick: 1.1.0 - dev: false - - /es6-iterator/2.0.3: - resolution: {integrity: sha512-zw4SRzoUkd+cl+ZoE15A9o1oQd920Bb0iOJMQkQhl3jNc03YqVjAhG7scf9C5KWRU/R13Orf588uCC6525o02g==} - dependencies: - d: 1.0.1 - es5-ext: 0.10.62 - es6-symbol: 3.1.3 - dev: false - - /es6-symbol/3.1.3: - resolution: {integrity: sha512-NJ6Yn3FuDinBaBRWl/q5X/s4koRHBrgKAu+yGI6JCBeiu3qrcbJhwT2GeR/EXVfylRk8dpQVJoLEFhK+Mu31NA==} - dependencies: - d: 1.0.1 - ext: 1.7.0 - dev: false - - /es6-weak-map/2.0.3: - resolution: {integrity: sha512-p5um32HOTO1kP+w7PRnB+5lQ43Z6muuMuIMffvDN8ZB4GcnjLBV6zGStpbASIMk4DCAvEaamhe2zhyCb/QXXsA==} - dependencies: - d: 1.0.1 - es5-ext: 0.10.62 - es6-iterator: 2.0.3 - es6-symbol: 3.1.3 - dev: false - - /esbuild/0.16.16: - resolution: {integrity: sha512-24JyKq10KXM5EBIgPotYIJ2fInNWVVqflv3gicIyQqfmUqi4HvDW1VR790cBgLJHCl96Syy7lhoz7tLFcmuRmg==} - engines: {node: '>=12'} - hasBin: true - requiresBuild: true - optionalDependencies: - '@esbuild/android-arm': 0.16.16 - '@esbuild/android-arm64': 0.16.16 - '@esbuild/android-x64': 0.16.16 - '@esbuild/darwin-arm64': 0.16.16 - '@esbuild/darwin-x64': 0.16.16 - '@esbuild/freebsd-arm64': 0.16.16 - '@esbuild/freebsd-x64': 0.16.16 - '@esbuild/linux-arm': 0.16.16 - '@esbuild/linux-arm64': 0.16.16 - '@esbuild/linux-ia32': 0.16.16 - '@esbuild/linux-loong64': 0.16.16 - '@esbuild/linux-mips64el': 0.16.16 - '@esbuild/linux-ppc64': 0.16.16 - '@esbuild/linux-riscv64': 0.16.16 - '@esbuild/linux-s390x': 0.16.16 - '@esbuild/linux-x64': 0.16.16 - '@esbuild/netbsd-x64': 0.16.16 - '@esbuild/openbsd-x64': 0.16.16 - '@esbuild/sunos-x64': 0.16.16 - '@esbuild/win32-arm64': 0.16.16 - '@esbuild/win32-ia32': 0.16.16 - '@esbuild/win32-x64': 0.16.16 - dev: true - /escalade/3.1.1: resolution: {integrity: sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==} engines: {node: '>=6'} @@ -6228,15 +5137,6 @@ packages: eslint: 8.22.0 dev: true - /eslint-config-prettier/8.5.0_eslint@8.30.0: - resolution: {integrity: sha512-obmWKLUNCnhtQRKc+tmnYuQl0pFU1ibYJQ5BGhTVB08bHe9wC8qUeG7c08dj9XX+AuPj1YSGSQIHl1pnDHZR0Q==} - hasBin: true - peerDependencies: - eslint: '>=7.0.0' - dependencies: - eslint: 8.30.0 - dev: true - /eslint-config-prettier/8.5.0_eslint@8.31.0: resolution: {integrity: sha512-obmWKLUNCnhtQRKc+tmnYuQl0pFU1ibYJQ5BGhTVB08bHe9wC8qUeG7c08dj9XX+AuPj1YSGSQIHl1pnDHZR0Q==} hasBin: true @@ -6246,51 +5146,6 @@ packages: eslint: 8.31.0 dev: true - /eslint-config-standard-with-typescript/24.0.0_cptoufat74nryxrbzitaihscju: - resolution: {integrity: sha512-vEnGXZ5aiR1enl9652iIP4nTpY3GPcNEwuhrsPbKO3Ce3D6T3yCqZdkUPk8nJetfdL/yO0DLsHg2d/l9iECIdg==} - peerDependencies: - '@typescript-eslint/eslint-plugin': ^5.0.0 - eslint: ^8.0.1 - eslint-plugin-import: ^2.25.2 - eslint-plugin-n: ^15.0.0 - eslint-plugin-promise: ^6.0.0 - typescript: '*' - dependencies: - '@typescript-eslint/eslint-plugin': 5.47.0_ncmi6noazr3nzas7jxykisekym - '@typescript-eslint/parser': 5.48.0_lzzuuodtsqwxnvqeq4g4likcqa - eslint: 8.30.0 - eslint-config-standard: 17.0.0_bdcrn6xmt4gzw7vnrxwhbmoneu - eslint-plugin-import: 2.26.0_p6eswnf3xl3aaa2djfyukgz5eq - eslint-plugin-n: 15.6.1_eslint@8.30.0 - eslint-plugin-promise: 6.1.1_eslint@8.30.0 - typescript: 4.9.4 - transitivePeerDependencies: - - supports-color - dev: true - - /eslint-config-standard/17.0.0_bdcrn6xmt4gzw7vnrxwhbmoneu: - resolution: {integrity: sha512-/2ks1GKyqSOkH7JFvXJicu0iMpoojkwB+f5Du/1SC0PtBL+s8v30k9njRZ21pm2drKYm2342jFnGWzttxPmZVg==} - peerDependencies: - eslint: ^8.0.1 - eslint-plugin-import: ^2.25.2 - eslint-plugin-n: ^15.0.0 - eslint-plugin-promise: ^6.0.0 - dependencies: - eslint: 8.30.0 - eslint-plugin-import: 2.26.0_p6eswnf3xl3aaa2djfyukgz5eq - eslint-plugin-n: 15.6.1_eslint@8.30.0 - eslint-plugin-promise: 6.1.1_eslint@8.30.0 - dev: true - - /eslint-import-resolver-alias/1.1.2_fkfqfehjtk7sk2efaqbgxsuasa: - resolution: {integrity: sha512-WdviM1Eu834zsfjHtcGHtGfcu+F30Od3V7I9Fi57uhBEwPkjDcii7/yW8jAT+gOhn4P/vOxxNAXbFAKsrrc15w==} - engines: {node: '>= 4'} - peerDependencies: - eslint-plugin-import: '>=1.4.0' - dependencies: - eslint-plugin-import: 2.26.0_p6eswnf3xl3aaa2djfyukgz5eq - dev: true - /eslint-import-resolver-node/0.3.6: resolution: {integrity: sha512-0En0w03NRVMn9Uiyn8YRPDKvWjxCWkslUEhGNTdGx15RvPJYQ+lbOlqrlNI2vEAs4pDYK4f/HN2TbDmk5TP0iw==} dependencies: @@ -6336,26 +5191,6 @@ packages: - supports-color dev: true - /eslint-import-resolver-typescript/3.5.2_2lbwmhbr7bncddqbzzpg77o75m: - resolution: {integrity: sha512-zX4ebnnyXiykjhcBvKIf5TNvt8K7yX6bllTRZ14MiurKPjDpCAZujlszTdB8pcNXhZcOf+god4s9SjQa5GnytQ==} - engines: {node: ^14.18.0 || >=16.0.0} - peerDependencies: - eslint: '*' - eslint-plugin-import: '*' - dependencies: - debug: 4.3.4 - enhanced-resolve: 5.12.0 - eslint: 8.30.0 - eslint-plugin-import: 2.26.0_p6eswnf3xl3aaa2djfyukgz5eq - get-tsconfig: 4.3.0 - globby: 13.1.3 - is-core-module: 2.10.0 - is-glob: 4.0.3 - synckit: 0.8.4 - transitivePeerDependencies: - - supports-color - dev: true - /eslint-module-utils/2.7.4_rwfyzivsgbql5kqdd6lovekmku: resolution: {integrity: sha512-j4GT+rqzCoRKHwURX7pddtIPGySnX9Si/cgMI5ztrcqOPtk5dDEeZ34CQVPphnqkJytlc97Vuk05Um2mJ3gEQA==} engines: {node: '>=4'} @@ -6416,78 +5251,6 @@ packages: - supports-color dev: true - /eslint-module-utils/2.7.4_zdsb5ko3hocyqbh4wogr2krc6u: - resolution: {integrity: sha512-j4GT+rqzCoRKHwURX7pddtIPGySnX9Si/cgMI5ztrcqOPtk5dDEeZ34CQVPphnqkJytlc97Vuk05Um2mJ3gEQA==} - engines: {node: '>=4'} - peerDependencies: - '@typescript-eslint/parser': '*' - eslint: '*' - eslint-import-resolver-node: '*' - eslint-import-resolver-typescript: '*' - eslint-import-resolver-webpack: '*' - peerDependenciesMeta: - '@typescript-eslint/parser': - optional: true - eslint: - optional: true - eslint-import-resolver-node: - optional: true - eslint-import-resolver-typescript: - optional: true - eslint-import-resolver-webpack: - optional: true - dependencies: - '@typescript-eslint/parser': 5.47.0_lzzuuodtsqwxnvqeq4g4likcqa - debug: 3.2.7 - eslint: 8.30.0 - eslint-import-resolver-node: 0.3.6 - eslint-import-resolver-typescript: 3.5.2_2lbwmhbr7bncddqbzzpg77o75m - transitivePeerDependencies: - - supports-color - dev: true - - /eslint-plugin-autofix/1.1.0_eslint@8.30.0: - resolution: {integrity: sha512-aKQ7s6CTeJRJgnhSlsGI7kQhnNCa1q3UYBM+9PTEgvdC5b+GjV/SZA233VNqkoBldb7/BkeWBRjorUjxeUfrxA==} - engines: {node: '>=8'} - peerDependencies: - eslint: '>= 5.12.1' - dependencies: - eslint: 8.30.0 - eslint-rule-composer: 0.3.0 - espree: 9.4.0 - esutils: 2.0.3 - lodash: 4.17.21 - string-similarity: 4.0.4 - dev: true - - /eslint-plugin-es/3.0.1_eslint@8.30.0: - resolution: {integrity: sha512-GUmAsJaN4Fc7Gbtl8uOBlayo2DqhwWvEzykMHSCZHU3XdJ+NSzzZcVhXh3VxX5icqQ+oQdIEawXX8xkR3mIFmQ==} - engines: {node: '>=8.10.0'} - peerDependencies: - eslint: '>=4.19.1' - dependencies: - eslint: 8.30.0 - eslint-utils: 2.1.0 - regexpp: 3.2.0 - dev: true - - /eslint-plugin-es/4.1.0_eslint@8.30.0: - resolution: {integrity: sha512-GILhQTnjYE2WorX5Jyi5i4dz5ALWxBIdQECVQavL6s7cI76IZTDWleTHkxz/QT3kvcs2QlGHvKLYsSlPOlPXnQ==} - engines: {node: '>=8.10.0'} - peerDependencies: - eslint: '>=4.19.1' - dependencies: - eslint: 8.30.0 - eslint-utils: 2.1.0 - regexpp: 3.2.0 - dev: true - - /eslint-plugin-html/7.1.0: - resolution: {integrity: sha512-fNLRraV/e6j8e3XYOC9xgND4j+U7b1Rq+OygMlLcMg+wI/IpVbF+ubQa3R78EjKB9njT6TQOlcK5rFKBVVtdfg==} - dependencies: - htmlparser2: 8.0.1 - dev: true - /eslint-plugin-import/2.26.0_o2ymnzkcx6ynnxgq4q5neiwzpe: resolution: {integrity: sha512-hYfi3FXaM8WPLf4S1cikh/r4IxnO6zrhZbEGz2b660EJRbuxgpDS5gkCuYgGWg2xxh2rBuIr4Pvhve/7c31koA==} engines: {node: '>=4'} @@ -6519,37 +5282,6 @@ packages: - supports-color dev: true - /eslint-plugin-import/2.26.0_p6eswnf3xl3aaa2djfyukgz5eq: - resolution: {integrity: sha512-hYfi3FXaM8WPLf4S1cikh/r4IxnO6zrhZbEGz2b660EJRbuxgpDS5gkCuYgGWg2xxh2rBuIr4Pvhve/7c31koA==} - engines: {node: '>=4'} - peerDependencies: - '@typescript-eslint/parser': '*' - eslint: ^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8 - peerDependenciesMeta: - '@typescript-eslint/parser': - optional: true - dependencies: - '@typescript-eslint/parser': 5.47.0_lzzuuodtsqwxnvqeq4g4likcqa - array-includes: 3.1.5 - array.prototype.flat: 1.3.0 - debug: 2.6.9 - doctrine: 2.1.0 - eslint: 8.30.0 - eslint-import-resolver-node: 0.3.6 - eslint-module-utils: 2.7.4_zdsb5ko3hocyqbh4wogr2krc6u - has: 1.0.3 - is-core-module: 2.10.0 - is-glob: 4.0.3 - minimatch: 3.1.2 - object.values: 1.1.5 - resolve: 1.22.1 - tsconfig-paths: 3.14.1 - transitivePeerDependencies: - - eslint-import-resolver-typescript - - eslint-import-resolver-webpack - - supports-color - dev: true - /eslint-plugin-import/2.26.0_zznokraecjt4ixvvqcdste35vq: resolution: {integrity: sha512-hYfi3FXaM8WPLf4S1cikh/r4IxnO6zrhZbEGz2b660EJRbuxgpDS5gkCuYgGWg2xxh2rBuIr4Pvhve/7c31koA==} engines: {node: '>=4'} @@ -6625,38 +5357,6 @@ packages: semver: 6.3.0 dev: true - /eslint-plugin-n/15.6.1_eslint@8.30.0: - resolution: {integrity: sha512-R9xw9OtCRxxaxaszTQmQAlPgM+RdGjaL1akWuY/Fv9fRAi8Wj4CUKc6iYVG8QNRjRuo8/BqVYIpfqberJUEacA==} - engines: {node: '>=12.22.0'} - peerDependencies: - eslint: '>=7.0.0' - dependencies: - builtins: 5.0.1 - eslint: 8.30.0 - eslint-plugin-es: 4.1.0_eslint@8.30.0 - eslint-utils: 3.0.0_eslint@8.30.0 - ignore: 5.2.0 - is-core-module: 2.11.0 - minimatch: 3.1.2 - resolve: 1.22.1 - semver: 7.3.8 - dev: true - - /eslint-plugin-node/11.1.0_eslint@8.30.0: - resolution: {integrity: sha512-oUwtPJ1W0SKD0Tr+wqu92c5xuCeQqB3hSCHasn/ZgjFdA9iDGNkNf2Zi9ztY7X+hNuMib23LNGRm6+uN+KLE3g==} - engines: {node: '>=8.10.0'} - peerDependencies: - eslint: '>=5.16.0' - dependencies: - eslint: 8.30.0 - eslint-plugin-es: 3.0.1_eslint@8.30.0 - eslint-utils: 2.1.0 - ignore: 5.2.0 - minimatch: 3.1.2 - resolve: 1.22.1 - semver: 6.3.0 - dev: true - /eslint-plugin-prettier/4.2.1_i2cojdczqdiurzgttlwdgf764e: resolution: {integrity: sha512-f/0rXLXUt0oFYs8ra4w49wYZBG5GKZpAYsJSm6rnYL5uVDjd+zowwMwVZHnAjf4edNrKpCDYfXDgmRE/Ak7QyQ==} engines: {node: '>=12.0.0'} @@ -6674,23 +5374,6 @@ packages: prettier-linter-helpers: 1.0.0 dev: true - /eslint-plugin-prettier/4.2.1_kl4pe43v5b43npmso5hoplpbyi: - resolution: {integrity: sha512-f/0rXLXUt0oFYs8ra4w49wYZBG5GKZpAYsJSm6rnYL5uVDjd+zowwMwVZHnAjf4edNrKpCDYfXDgmRE/Ak7QyQ==} - engines: {node: '>=12.0.0'} - peerDependencies: - eslint: '>=7.28.0' - eslint-config-prettier: '*' - prettier: '>=2.0.0' - peerDependenciesMeta: - eslint-config-prettier: - optional: true - dependencies: - eslint: 8.30.0 - eslint-config-prettier: 8.5.0_eslint@8.30.0 - prettier: 2.8.1 - prettier-linter-helpers: 1.0.0 - dev: true - /eslint-plugin-prettier/4.2.1_vkmhlldugy3fnk7p2bqhsfnaiq: resolution: {integrity: sha512-f/0rXLXUt0oFYs8ra4w49wYZBG5GKZpAYsJSm6rnYL5uVDjd+zowwMwVZHnAjf4edNrKpCDYfXDgmRE/Ak7QyQ==} engines: {node: '>=12.0.0'} @@ -6708,15 +5391,6 @@ packages: prettier-linter-helpers: 1.0.0 dev: true - /eslint-plugin-promise/6.1.1_eslint@8.30.0: - resolution: {integrity: sha512-tjqWDwVZQo7UIPMeDReOpUgHCmCiH+ePnVT+5zVapL0uuHnegBUs2smM13CzOs2Xb5+MHMRFTs9v24yjba4Oig==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - peerDependencies: - eslint: ^7.0.0 || ^8.0.0 - dependencies: - eslint: 8.30.0 - dev: true - /eslint-plugin-react-hooks/4.6.0_eslint@8.22.0: resolution: {integrity: sha512-oFc7Itz9Qxh2x4gNHStv3BqJq54ExXmfC+a1NjAta66IAN87Wu0R/QArgIS9qKzX3dXKPI9H5crl9QchNMY9+g==} engines: {node: '>=10'} @@ -6726,15 +5400,6 @@ packages: eslint: 8.22.0 dev: true - /eslint-plugin-react-hooks/4.6.0_eslint@8.30.0: - resolution: {integrity: sha512-oFc7Itz9Qxh2x4gNHStv3BqJq54ExXmfC+a1NjAta66IAN87Wu0R/QArgIS9qKzX3dXKPI9H5crl9QchNMY9+g==} - engines: {node: '>=10'} - peerDependencies: - eslint: ^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0 - dependencies: - eslint: 8.30.0 - dev: true - /eslint-plugin-react-hooks/4.6.0_eslint@8.31.0: resolution: {integrity: sha512-oFc7Itz9Qxh2x4gNHStv3BqJq54ExXmfC+a1NjAta66IAN87Wu0R/QArgIS9qKzX3dXKPI9H5crl9QchNMY9+g==} engines: {node: '>=10'} @@ -6744,30 +5409,6 @@ packages: eslint: 8.31.0 dev: true - /eslint-plugin-react/7.31.11_eslint@8.30.0: - resolution: {integrity: sha512-TTvq5JsT5v56wPa9OYHzsrOlHzKZKjV+aLgS+55NJP/cuzdiQPC7PfYoUjMoxlffKtvijpk7vA/jmuqRb9nohw==} - engines: {node: '>=4'} - peerDependencies: - eslint: ^3 || ^4 || ^5 || ^6 || ^7 || ^8 - dependencies: - array-includes: 3.1.6 - array.prototype.flatmap: 1.3.1 - array.prototype.tosorted: 1.1.1 - doctrine: 2.1.0 - eslint: 8.30.0 - estraverse: 5.3.0 - jsx-ast-utils: 3.3.3 - minimatch: 3.1.2 - object.entries: 1.1.6 - object.fromentries: 2.0.6 - object.hasown: 1.1.2 - object.values: 1.1.6 - prop-types: 15.8.1 - resolve: 2.0.0-next.4 - semver: 6.3.0 - string.prototype.matchall: 4.0.8 - dev: true - /eslint-plugin-react/7.31.8_eslint@8.22.0: resolution: {integrity: sha512-5lBTZmgQmARLLSYiwI71tiGVTLUuqXantZM6vlSY39OaDSV0M7+32K5DnLkmFrwTe+Ksz0ffuLUC91RUviVZfw==} engines: {node: '>=4'} @@ -6814,80 +5455,6 @@ packages: string.prototype.matchall: 4.0.7 dev: true - /eslint-plugin-security-node/1.1.1: - resolution: {integrity: sha512-PXl5uKQOglpIpU13YIwWhhXK9Sw14KHbzCdVthDWoIsUPOuMYbrGOCWJSEVVuZ1uJK2ciN+45ogPeErrKtNm0Q==} - engines: {node: '>=0.10.0'} - dev: true - - /eslint-plugin-security/1.5.0: - resolution: {integrity: sha512-hAFVwLZ/UeXrlyVD2TDarv/x00CoFVpaY0IUZhKjPjiFxqkuQVixsK4f2rxngeQOqSxi6OUjzJM/jMwKEVjJ8g==} - dependencies: - safe-regex: 2.1.1 - dev: true - - /eslint-plugin-typescript-sort-keys/2.1.0_ncmi6noazr3nzas7jxykisekym: - resolution: {integrity: sha512-ET7ABypdz19m47QnKynzNfWPi4CTNQ5jQQC1X5d0gojIwblkbGiCa5IilsqzBTmqxZ0yXDqKBO/GBkBFQCOFsg==} - engines: {node: 10 - 12 || >= 13.9} - peerDependencies: - '@typescript-eslint/parser': ^1 || ^2 || ^3 || ^4 || ^5 - eslint: ^5 || ^6 || ^7 || ^8 - typescript: ^3 || ^4 - dependencies: - '@typescript-eslint/experimental-utils': 5.48.1_lzzuuodtsqwxnvqeq4g4likcqa - '@typescript-eslint/parser': 5.47.0_lzzuuodtsqwxnvqeq4g4likcqa - eslint: 8.30.0 - json-schema: 0.4.0 - natural-compare-lite: 1.4.0 - typescript: 4.9.4 - transitivePeerDependencies: - - supports-color - dev: true - - /eslint-plugin-unicorn/45.0.2_eslint@8.30.0: - resolution: {integrity: sha512-Y0WUDXRyGDMcKLiwgL3zSMpHrXI00xmdyixEGIg90gHnj0PcHY4moNv3Ppje/kDivdAy5vUeUr7z211ImPv2gw==} - engines: {node: '>=14.18'} - peerDependencies: - eslint: '>=8.28.0' - dependencies: - '@babel/helper-validator-identifier': 7.19.1 - '@eslint-community/eslint-utils': 4.1.2_eslint@8.30.0 - ci-info: 3.7.0 - clean-regexp: 1.0.0 - eslint: 8.30.0 - esquery: 1.4.0 - indent-string: 4.0.0 - is-builtin-module: 3.2.0 - jsesc: 3.0.2 - lodash: 4.17.21 - pluralize: 8.0.0 - read-pkg-up: 7.0.1 - regexp-tree: 0.1.24 - regjsparser: 0.9.1 - safe-regex: 2.1.1 - semver: 7.3.8 - strip-indent: 3.0.0 - dev: true - - /eslint-plugin-unused-imports/2.0.0_juver2u3xbiwnjfu6d55vmnoem: - resolution: {integrity: sha512-3APeS/tQlTrFa167ThtP0Zm0vctjr4M44HMpeg1P4bK6wItarumq0Ma82xorMKdFsWpphQBlRPzw/pxiVELX1A==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - peerDependencies: - '@typescript-eslint/eslint-plugin': ^5.0.0 - eslint: ^8.0.0 - peerDependenciesMeta: - '@typescript-eslint/eslint-plugin': - optional: true - dependencies: - '@typescript-eslint/eslint-plugin': 5.47.0_ncmi6noazr3nzas7jxykisekym - eslint: 8.30.0 - eslint-rule-composer: 0.3.0 - dev: true - - /eslint-rule-composer/0.3.0: - resolution: {integrity: sha512-bt+Sh8CtDmn2OajxvNO+BX7Wn4CIWMpTRm3MaiKPCQcnnlm0CS2mhui6QaoeQugs+3Kj2ESKEEGJUdVafwhiCg==} - engines: {node: '>=4.0.0'} - dev: true - /eslint-scope/5.1.1: resolution: {integrity: sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==} engines: {node: '>=8.0.0'} @@ -6904,13 +5471,6 @@ packages: estraverse: 5.3.0 dev: true - /eslint-utils/2.1.0: - resolution: {integrity: sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg==} - engines: {node: '>=6'} - dependencies: - eslint-visitor-keys: 1.3.0 - dev: true - /eslint-utils/3.0.0_eslint@8.22.0: resolution: {integrity: sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA==} engines: {node: ^10.0.0 || ^12.0.0 || >= 14.0.0} @@ -6921,16 +5481,6 @@ packages: eslint-visitor-keys: 2.1.0 dev: true - /eslint-utils/3.0.0_eslint@8.30.0: - resolution: {integrity: sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA==} - engines: {node: ^10.0.0 || ^12.0.0 || >= 14.0.0} - peerDependencies: - eslint: '>=5' - dependencies: - eslint: 8.30.0 - eslint-visitor-keys: 2.1.0 - dev: true - /eslint-utils/3.0.0_eslint@8.31.0: resolution: {integrity: sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA==} engines: {node: ^10.0.0 || ^12.0.0 || >= 14.0.0} @@ -6941,11 +5491,6 @@ packages: eslint-visitor-keys: 2.1.0 dev: true - /eslint-visitor-keys/1.3.0: - resolution: {integrity: sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==} - engines: {node: '>=4'} - dev: true - /eslint-visitor-keys/2.1.0: resolution: {integrity: sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==} engines: {node: '>=10'} @@ -7003,54 +5548,6 @@ packages: - supports-color dev: true - /eslint/8.30.0: - resolution: {integrity: sha512-MGADB39QqYuzEGov+F/qb18r4i7DohCDOfatHaxI2iGlPuC65bwG2gxgO+7DkyL38dRFaRH7RaRAgU6JKL9rMQ==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - hasBin: true - dependencies: - '@eslint/eslintrc': 1.4.1 - '@humanwhocodes/config-array': 0.11.8 - '@humanwhocodes/module-importer': 1.0.1 - '@nodelib/fs.walk': 1.2.8 - ajv: 6.12.6 - chalk: 4.1.2 - cross-spawn: 7.0.3 - debug: 4.3.4 - doctrine: 3.0.0 - escape-string-regexp: 4.0.0 - eslint-scope: 7.1.1 - eslint-utils: 3.0.0_eslint@8.30.0 - eslint-visitor-keys: 3.3.0 - espree: 9.4.0 - esquery: 1.4.0 - esutils: 2.0.3 - fast-deep-equal: 3.1.3 - file-entry-cache: 6.0.1 - find-up: 5.0.0 - glob-parent: 6.0.2 - globals: 13.19.0 - grapheme-splitter: 1.0.4 - ignore: 5.2.0 - import-fresh: 3.3.0 - imurmurhash: 0.1.4 - is-glob: 4.0.3 - is-path-inside: 3.0.3 - js-sdsl: 4.2.0 - js-yaml: 4.1.0 - json-stable-stringify-without-jsonify: 1.0.1 - levn: 0.4.1 - lodash.merge: 4.6.2 - minimatch: 3.1.2 - natural-compare: 1.4.0 - optionator: 0.9.1 - regexpp: 3.2.0 - strip-ansi: 6.0.1 - strip-json-comments: 3.1.1 - text-table: 0.2.0 - transitivePeerDependencies: - - supports-color - dev: true - /eslint/8.31.0: resolution: {integrity: sha512-0tQQEVdmPZ1UtUKXjX7EMm9BlgJ08G90IhWh0PKDCb3ZLsgAOHI8fYSIzYVZej92zsgq+ft0FGsxhJ3xo2tbuA==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} @@ -7147,25 +5644,6 @@ packages: engines: {node: '>=0.10.0'} dev: true - /event-emitter/0.3.5: - resolution: {integrity: sha512-D9rRn9y7kLPnJ+hMq7S/nhvoKwwvVJahBi2BPmx3bvbsEdK3W9ii8cBSGjP+72/LnM4n6fo3+dkCX5FeTQruXA==} - dependencies: - d: 1.0.1 - es5-ext: 0.10.62 - dev: false - - /event-stream/3.3.4: - resolution: {integrity: sha512-QHpkERcGsR0T7Qm3HNJSyXKEEj8AHNxkY3PK8TS2KJvQ7NiSHe3DDpwVKKtoYprL/AreyzFBeIkBIWChAqn60g==} - dependencies: - duplexer: 0.1.2 - from: 0.1.7 - map-stream: 0.1.0 - pause-stream: 0.0.11 - split: 0.3.3 - stream-combiner: 0.0.4 - through: 2.3.8 - dev: true - /event-target-shim/5.0.1: resolution: {integrity: sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ==} engines: {node: '>=6'} @@ -7221,12 +5699,6 @@ packages: jest-util: 29.3.1 dev: true - /ext/1.7.0: - resolution: {integrity: sha512-6hxeJYaL110a9b5TEJSj0gojyHQAmA2ch5Os+ySCiA1QGdS697XWY1pzsrSjqA9LDEEgdB/KypIlR59RcLuHYw==} - dependencies: - type: 2.7.2 - dev: false - /extend/3.0.2: resolution: {integrity: sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==} dev: false @@ -7306,6 +5778,7 @@ packages: dependencies: node-domexception: 1.0.0 web-streams-polyfill: 3.2.1 + dev: false /file-entry-cache/6.0.1: resolution: {integrity: sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==} @@ -7412,54 +5885,17 @@ packages: resolution: {integrity: sha512-W7cHV7Hrwjid6lWmy0IhsWDFQboWSng25U3VVywpHOTJnnAZNPScog67G+cVpeX9f7yDD21ih0WDrMMT+JoaYg==} dev: false - /follow-redirects/1.15.2: - resolution: {integrity: sha512-VQLG33o04KaQ8uYi2tVNbdrWp1QWxNNea+nmIB4EVM28v0hmP17z7aG1+wAkNzVq4KeXTq3221ye5qTJP91JwA==} - engines: {node: '>=4.0'} - peerDependencies: - debug: '*' - peerDependenciesMeta: - debug: - optional: true - dev: true - - /for-each/0.3.3: - resolution: {integrity: sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==} - dependencies: - is-callable: 1.2.7 - dev: true - /form-data-encoder/2.1.4: resolution: {integrity: sha512-yDYSgNMraqvnxiEXO4hi88+YZxaHC6QKzb5N84iRCTDeRO7ZALpir/lVmf/uXUhnwUr2O4HU8s/n6x+yNjQkHw==} engines: {node: '>= 14.17'} dev: true - /form-data/4.0.0: - resolution: {integrity: sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==} - engines: {node: '>= 6'} - dependencies: - asynckit: 0.4.0 - combined-stream: 1.0.8 - mime-types: 2.1.35 - dev: true - /formdata-polyfill/4.0.10: resolution: {integrity: sha512-buewHzMvYL29jdeQTVILecSaZKnt/RJWjoZCF5OW60Z67/GmSLBkOFM7qh1PI3zFNtJbaZL5eQu1vLfazOwj4g==} engines: {node: '>=12.20.0'} dependencies: fetch-blob: 3.2.0 - - /from/0.1.7: - resolution: {integrity: sha512-twe20eF1OxVxp/ML/kq2p1uc6KvFK/+vs8WjEbeKmV2He22MKm7YF2ANIt+EOqhJ5L3K/SuuPhk0hWQDjOM23g==} - dev: true - - /fs-extra/10.1.0: - resolution: {integrity: sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==} - engines: {node: '>=12'} - dependencies: - graceful-fs: 4.2.10 - jsonfile: 6.1.0 - universalify: 2.0.0 - dev: true + dev: false /fs-extra/7.0.1: resolution: {integrity: sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw==} @@ -7491,6 +5927,7 @@ packages: /fs.realpath/1.0.0: resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==} + dev: true /fsevents/2.3.2: resolution: {integrity: sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==} @@ -7509,7 +5946,7 @@ packages: dependencies: call-bind: 1.0.2 define-properties: 1.1.4 - es-abstract: 1.21.1 + es-abstract: 1.20.2 functions-have-names: 1.2.3 dev: true @@ -7554,11 +5991,6 @@ packages: engines: {node: '>=8.0.0'} dev: true - /get-stdin/8.0.0: - resolution: {integrity: sha512-sY22aA6xchAzprjyqmSEQv4UbAAzRN0L2dQB0NlN5acTTK9Don6nhoc3eAbUnpZiCANAMfd/+40kVdKfFygohg==} - engines: {node: '>=10'} - dev: false - /get-stream/6.0.1: resolution: {integrity: sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==} engines: {node: '>=10'} @@ -7572,10 +6004,6 @@ packages: get-intrinsic: 1.1.3 dev: true - /get-tsconfig/4.3.0: - resolution: {integrity: sha512-YCcF28IqSay3fqpIu5y3Krg/utCBHBeoflkZyHj/QcqI2nrLPC3ZegS9CmIo+hJb8K7aiGsuUl7PwWVjNG2HQQ==} - dev: true - /glob-parent/5.1.2: resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==} engines: {node: '>= 6'} @@ -7590,16 +6018,6 @@ packages: is-glob: 4.0.3 dev: true - /glob-promise/4.2.2_glob@7.2.3: - resolution: {integrity: sha512-xcUzJ8NWN5bktoTIX7eOclO1Npxd/dyVqUJxlLIDasT4C7KZyqlPIwkdJ0Ypiy3p2ZKahTjK4M9uC3sNSfNMzw==} - engines: {node: '>=12'} - peerDependencies: - glob: ^7.1.6 - dependencies: - '@types/glob': 7.2.0 - glob: 7.2.3 - dev: false - /glob/7.1.7: resolution: {integrity: sha512-OvD9ENzPLbegENnYP5UUfJIirTg4+XwMWGaQfQTY0JenxNvvIKP3U3/tAQSPIu/lHxXYSZmpXlUHeqAIdKzBLQ==} dependencies: @@ -7620,6 +6038,7 @@ packages: minimatch: 3.1.2 once: 1.4.0 path-is-absolute: 1.0.1 + dev: true /globals/11.12.0: resolution: {integrity: sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==} @@ -7640,17 +6059,6 @@ packages: type-fest: 0.20.2 dev: true - /globalthis/1.0.3: - resolution: {integrity: sha512-sFdI5LyBiNTHjRd7cGPWapiHWMOXKyuBNX/cWJ3NfzrZQVa8GI/8cofCl74AOVqq9W5kNmguTIzJ/1s2gyI9wA==} - engines: {node: '>= 0.4'} - dependencies: - define-properties: 1.1.4 - dev: true - - /globalyzer/0.1.0: - resolution: {integrity: sha512-40oNTM9UfG6aBmuKxk/giHn5nQ8RVz/SS4Ir6zgzOv9/qC3kKZ9v4etGTcJbEl/NyVQH7FGU7d+X1egr57Md2Q==} - dev: true - /globby/11.1.0: resolution: {integrity: sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==} engines: {node: '>=10'} @@ -7663,17 +6071,6 @@ packages: slash: 3.0.0 dev: true - /globby/13.1.3: - resolution: {integrity: sha512-8krCNHXvlCgHDpegPzleMq07yMYTO2sXKASmZmquEYWEmCx6J5UTRbp5RwMJkTJGtcQ44YpiUYUiN0b9mzy8Bw==} - engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} - dependencies: - dir-glob: 3.0.1 - fast-glob: 3.2.12 - ignore: 5.2.0 - merge2: 1.4.1 - slash: 4.0.0 - dev: true - /globby/6.1.0: resolution: {integrity: sha512-KVbFv2TQtbzCoxAnfD6JcHZTYCzyliEaaeM/gH8qQdkKr5s0OP9scEgvdcngyk7AVdY6YVW/TJHd+lQ/Df3Daw==} engines: {node: '>=0.10.0'} @@ -7685,16 +6082,6 @@ packages: pinkie-promise: 2.0.1 dev: true - /globrex/0.1.2: - resolution: {integrity: sha512-uHJgbwAMwNFf5mLst7IWLNg14x1CkeqglJb/K3doi4dw6q2IvAAmM/Y81kevy83wP+Sst+nutFTYOGg3d1lsxg==} - dev: true - - /gopd/1.0.1: - resolution: {integrity: sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==} - dependencies: - get-intrinsic: 1.1.3 - dev: true - /got/12.5.3: resolution: {integrity: sha512-8wKnb9MGU8IPGRIo+/ukTy9XLJBwDiCpIf5TVzQ9Cpol50eMTpBq2GAuDsuDIz7hTYmZgMgC1e9ydr6kSDWs3w==} engines: {node: '>=14.16'} @@ -7743,11 +6130,6 @@ packages: dependencies: get-intrinsic: 1.1.3 - /has-proto/1.0.1: - resolution: {integrity: sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg==} - engines: {node: '>= 0.4'} - dev: true - /has-symbols/1.0.3: resolution: {integrity: sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==} engines: {node: '>= 0.4'} @@ -7803,15 +6185,6 @@ packages: through2: 0.4.2 dev: false - /htmlparser2/8.0.1: - resolution: {integrity: sha512-4lVbmc1diZC7GUJQtRQ5yBAeUCL1exyMwmForWkRLnwyzWBFxN633SALPMGYaWZvKe9j1pRZJpauvmxENSp/EA==} - dependencies: - domelementtype: 2.3.0 - domhandler: 5.0.3 - domutils: 3.0.1 - entities: 4.4.0 - dev: true - /http-cache-semantics/4.1.0: resolution: {integrity: sha512-carPklcUh7ROWRK7Cv27RPtdhYhUsela/ue5/jKzjegVvXDqM2ILE9Q2BGn9JZJh1g87cp56su/FgQSzcWS8cQ==} dev: true @@ -7884,6 +6257,7 @@ packages: /ieee754/1.2.1: resolution: {integrity: sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==} + dev: false /ignore/5.2.0: resolution: {integrity: sha512-CmxgYGiEPCLhfLnpPp1MoRmifwEIOgjcHXxOBjv7mY96c+eWScsOP9c112ZyLdWHi0FxHjI+4uVhKYp/gcdRmQ==} @@ -7921,6 +6295,7 @@ packages: dependencies: once: 1.4.0 wrappy: 1.0.2 + dev: true /inherits/2.0.4: resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==} @@ -7934,15 +6309,6 @@ packages: side-channel: 1.0.4 dev: true - /internal-slot/1.0.4: - resolution: {integrity: sha512-tA8URYccNzMo94s5MQZgH8NB/XTa6HsOo0MLfXTKKEnHVVdegzaQoFZ7Jp44bdvLvY2waT5dc+j5ICEswhi7UQ==} - engines: {node: '>= 0.4'} - dependencies: - get-intrinsic: 1.1.3 - has: 1.0.3 - side-channel: 1.0.4 - dev: true - /invariant/2.2.4: resolution: {integrity: sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA==} dependencies: @@ -7957,14 +6323,6 @@ packages: has-tostringtag: 1.0.0 dev: false - /is-array-buffer/3.0.1: - resolution: {integrity: sha512-ASfLknmY8Xa2XtB4wmbz13Wu202baeA18cJBCeCy0wXUHZF0IPyVEXqKEcd+t2fNSLLL1vC6k7lxZEojNbISXQ==} - dependencies: - call-bind: 1.0.2 - get-intrinsic: 1.1.3 - is-typed-array: 1.1.10 - dev: true - /is-arrayish/0.2.1: resolution: {integrity: sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==} @@ -7982,23 +6340,11 @@ packages: has-tostringtag: 1.0.0 dev: true - /is-builtin-module/3.2.0: - resolution: {integrity: sha512-phDA4oSGt7vl1n5tJvTWooWWAsXLY+2xCnxNqvKhGEzujg+A43wPlPOyDg3C8XQHN+6k/JTQWJ/j0dQh/qr+Hw==} - engines: {node: '>=6'} - dependencies: - builtin-modules: 3.3.0 - dev: true - /is-callable/1.2.6: resolution: {integrity: sha512-krO72EO2NptOGAX2KYyqbP9vYMlNAXdB53rq6f8LXY6RY7JdSR/3BD6wLUlPHSAesmY9vstNrjvqGaCiRK/91Q==} engines: {node: '>= 0.4'} dev: true - /is-callable/1.2.7: - resolution: {integrity: sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==} - engines: {node: '>= 0.4'} - dev: true - /is-ci/3.0.1: resolution: {integrity: sha512-ZYvCgrefwqoQ6yTyYUbQu64HsITZ3NfKX1lzaEYdkTDcfKzzCI/wthRRYKkdjHKFVgNiXKAKm65Zo1pk2as/QQ==} hasBin: true @@ -8011,27 +6357,16 @@ packages: dependencies: has: 1.0.3 - /is-core-module/2.11.0: - resolution: {integrity: sha512-RRjxlvLDkD1YJwDbroBHMb+cukurkDWNyHx7D3oNB5x9rb5ogcksMC5wHCadcXoo67gVr/+3GFySh3134zi6rw==} - dependencies: - has: 1.0.3 - dev: true - /is-date-object/1.0.5: resolution: {integrity: sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==} engines: {node: '>= 0.4'} dependencies: has-tostringtag: 1.0.0 - /is-docker/2.2.1: - resolution: {integrity: sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==} - engines: {node: '>=8'} - hasBin: true - dev: true - /is-extglob/2.1.1: resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==} engines: {node: '>=0.10.0'} + dev: true /is-fullwidth-code-point/3.0.0: resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==} @@ -8052,10 +6387,6 @@ packages: engines: {node: '>=0.10.0'} dependencies: is-extglob: 2.1.1 - - /is-interactive/1.0.0: - resolution: {integrity: sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w==} - engines: {node: '>=8'} dev: true /is-module/1.0.0: @@ -8113,10 +6444,6 @@ packages: engines: {node: '>=0.10.0'} dev: true - /is-promise/2.2.2: - resolution: {integrity: sha512-+lP4/6lKUBfQjZ2pdxThZvLUAafmZb8OAxFb8XXtiQmS35INgr85hdOGoEs124ez1FCnZJt6jau/T+alh58QFQ==} - dev: false - /is-regex/1.1.4: resolution: {integrity: sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==} engines: {node: '>= 0.4'} @@ -8166,22 +6493,6 @@ packages: has-symbols: 1.0.3 dev: true - /is-typed-array/1.1.10: - resolution: {integrity: sha512-PJqgEHiWZvMpaFZ3uTc8kHPM4+4ADTlDniuQL7cU/UDA0Ql7F70yGfHph3cLNe+c9toaigv+DFzTJKhc2CtO6A==} - engines: {node: '>= 0.4'} - dependencies: - available-typed-arrays: 1.0.5 - call-bind: 1.0.2 - for-each: 0.3.3 - gopd: 1.0.1 - has-tostringtag: 1.0.0 - dev: true - - /is-unicode-supported/0.1.0: - resolution: {integrity: sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==} - engines: {node: '>=10'} - dev: true - /is-weakref/1.0.2: resolution: {integrity: sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==} dependencies: @@ -8193,13 +6504,6 @@ packages: engines: {node: '>=0.10.0'} dev: true - /is-wsl/2.2.0: - resolution: {integrity: sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==} - engines: {node: '>=8'} - dependencies: - is-docker: 2.2.1 - dev: true - /isarray/0.0.1: resolution: {integrity: sha512-D2S+3GLxWH+uhrNEcoh/fnmYeP8E8/zHl644d/jdA0g2uyXvy3sb0qxotE+ne0LtccHknQzWwZEzhak7oJ0COQ==} dev: false @@ -8609,7 +6913,7 @@ packages: jest-util: 29.3.1 natural-compare: 1.4.0 pretty-format: 29.3.1 - semver: 7.3.8 + semver: 7.3.7 transitivePeerDependencies: - supports-color dev: true @@ -8656,7 +6960,7 @@ packages: resolution: {integrity: sha512-KWYVV1c4i+jbMpaBC+U++4Va0cp8OisU185o73T1vo99hqi7w8tSJfUXYswwqqrjzwxa6KpRK54WhPvwf5w6PQ==} engines: {node: '>= 10.13.0'} dependencies: - '@types/node': 18.11.18 + '@types/node': 18.7.18 merge-stream: 2.0.0 supports-color: 7.2.0 dev: true @@ -8665,7 +6969,7 @@ packages: resolution: {integrity: sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg==} engines: {node: '>= 10.13.0'} dependencies: - '@types/node': 18.11.18 + '@types/node': 18.7.18 merge-stream: 2.0.0 supports-color: 8.1.1 dev: true @@ -8719,6 +7023,7 @@ packages: resolution: {integrity: sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==} dependencies: argparse: 2.0.1 + dev: true /jsesc/0.5.0: resolution: {integrity: sha512-uZz5UnB7u4T9LvwmFqXii7pZSouaRPorGs5who1Ip7VO0wxanFvBL7GkM6dTHlgX+jhBApRetaWpnDabOeTcnA==} @@ -8731,12 +7036,6 @@ packages: hasBin: true dev: true - /jsesc/3.0.2: - resolution: {integrity: sha512-xKqzzWXDttJuOcawBt4KnKHHIf5oQ/Cxax+0PWFG+DFDgHNAdi+TXECADI+RYiFUMmx8792xsMbbgXj4CwnP4g==} - engines: {node: '>=6'} - hasBin: true - dev: true - /json-buffer/3.0.1: resolution: {integrity: sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==} dev: true @@ -8744,27 +7043,6 @@ packages: /json-parse-even-better-errors/2.3.1: resolution: {integrity: sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==} - /json-schema-to-typescript/11.0.2: - resolution: {integrity: sha512-XRyeXBJeo/IH4eTP5D1ptX78vCvH86nMDt2k3AxO28C3uYWEDmy4mgPyMpb8bLJ/pJMElOGuQbnKR5Y6NSh3QQ==} - engines: {node: '>=12.0.0'} - hasBin: true - dependencies: - '@bcherny/json-schema-ref-parser': 9.0.9 - '@types/json-schema': 7.0.11 - '@types/lodash': 4.14.191 - '@types/prettier': 2.7.2 - cli-color: 2.0.3 - get-stdin: 8.0.0 - glob: 7.2.3 - glob-promise: 4.2.2_glob@7.2.3 - is-glob: 4.0.3 - lodash: 4.17.21 - minimist: 1.2.6 - mkdirp: 1.0.4 - mz: 2.7.0 - prettier: 2.8.1 - dev: false - /json-schema-traverse/0.4.1: resolution: {integrity: sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==} dev: true @@ -8885,6 +7163,13 @@ packages: type-check: 0.4.0 dev: true + /lib0/0.2.52: + resolution: {integrity: sha512-CjxlM7UgICfN6b2OPALBXchIBiNk6jE+1g7JP8ha+dh1xKRDSYpH0WQl1+rMqCju49xUnwPG34v4CR5/rPOZhg==} + engines: {node: '>=14'} + dependencies: + isomorphic.js: 0.2.5 + dev: false + /lib0/0.2.58: resolution: {integrity: sha512-6ovqPaYfOKU7GkkVxz/wjMR0zsqmNsISLvH+h9Lx5YNtWDZey69aYsTGXaSVpUPpJ+ZFtIvcZHsTGL3MbwOM8A==} engines: {node: '>=14'} @@ -9033,14 +7318,6 @@ packages: /lodash/4.17.21: resolution: {integrity: sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==} - /log-symbols/4.1.0: - resolution: {integrity: sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==} - engines: {node: '>=10'} - dependencies: - chalk: 4.1.2 - is-unicode-supported: 0.1.0 - dev: true - /log-update/4.0.0: resolution: {integrity: sha512-9fkkDevMefjg0mmzWFBW8YkFP91OrizzkW3diF7CpG+S2EYdy4+TVfGwz1zeF8x7hCx1ovSPTOE9Ngib74qqUg==} engines: {node: '>=10'} @@ -9064,12 +7341,6 @@ packages: dependencies: js-tokens: 4.0.0 - /lower-case/2.0.2: - resolution: {integrity: sha512-7fm3l3NAF9WfN6W3JOmf5drwpVqX78JtoGJ3A6W0a6ZnldM41w2fV5D490psKFTpMds8TJse/eHLFFsNHHjHgg==} - dependencies: - tslib: 2.4.0 - dev: true - /lowercase-keys/3.0.0: resolution: {integrity: sha512-ozCC6gdQ+glXOQsveKD0YsDy8DSQFjDTz4zyzEHNV5+JP5D62LmfDZ6o1cycFx9ouG940M5dE8C8CTewdj2YWQ==} engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} @@ -9095,12 +7366,6 @@ packages: yallist: 4.0.0 dev: true - /lru-queue/0.1.0: - resolution: {integrity: sha512-BpdYkt9EvGl8OfWHDQPISVpcl5xZthb+XPsbELj5AQXxIC8IriDZIQYjBJPEm5rS420sjZ0TLEzRcq5KdBhYrQ==} - dependencies: - es5-ext: 0.10.62 - dev: false - /magic-string/0.25.9: resolution: {integrity: sha512-RmF0AsMzgt25qzqqLc1+MbHmhdx0ojF2Fvs4XnOqz2ZOBXzzkEwc/dJQZCYHAn7v1jbVOjAZfK8msRn4BxO4VQ==} dependencies: @@ -9130,29 +7395,12 @@ packages: engines: {node: '>=8'} dev: true - /map-stream/0.1.0: - resolution: {integrity: sha512-CkYQrPYZfWnu/DAmVCpTSX/xHpKZ80eKh2lAkyA6AJTef6bW+6JpbQZN5rofum7da+SyN1bi5ctTm+lTfcCW3g==} - dev: true - /marked/4.2.5: resolution: {integrity: sha512-jPueVhumq7idETHkb203WDD4fMA3yV9emQ5vLwop58lu8bTclMghBWcYAavlDqIEMaisADinV1TooIFCfqOsYQ==} engines: {node: '>= 12'} hasBin: true dev: false - /memoizee/0.4.15: - resolution: {integrity: sha512-UBWmJpLZd5STPm7PMUlOw/TSy972M+z8gcyQ5veOnSDRREz/0bmpyTfKt3/51DhEBqCZQn1udM/5flcSPYhkdQ==} - dependencies: - d: 1.0.1 - es5-ext: 0.10.62 - es6-weak-map: 2.0.3 - event-emitter: 0.3.5 - is-promise: 2.2.2 - lru-queue: 0.1.0 - next-tick: 1.1.0 - timers-ext: 0.1.7 - dev: false - /meow/6.1.1: resolution: {integrity: sha512-3YffViIt2QWgTy6Pale5QpopX/IvU3LPL03jOTqp6pGj3VjesdO/U8CuHMKpnQr4shCNCM5fd5XFFvIIl6JBHg==} engines: {node: '>=8'} @@ -9187,18 +7435,6 @@ packages: picomatch: 2.3.1 dev: true - /mime-db/1.52.0: - resolution: {integrity: sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==} - engines: {node: '>= 0.6'} - dev: true - - /mime-types/2.1.35: - resolution: {integrity: sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==} - engines: {node: '>= 0.6'} - dependencies: - mime-db: 1.52.0 - dev: true - /mimic-fn/2.1.0: resolution: {integrity: sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==} engines: {node: '>=6'} @@ -9228,6 +7464,7 @@ packages: resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==} dependencies: brace-expansion: 1.1.11 + dev: true /minimatch/5.1.2: resolution: {integrity: sha512-bNH9mmM9qsJ2X4r2Nat1B//1dJVcn3+iBLa3IgqJ7EbGaDNepL9QSHOxN4ng33s52VMMhhIfgCYDk3C4ZmlDAg==} @@ -9253,12 +7490,6 @@ packages: engines: {node: '>= 8.0.0'} dev: true - /mkdirp/1.0.4: - resolution: {integrity: sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==} - engines: {node: '>=10'} - hasBin: true - dev: false - /ms/2.0.0: resolution: {integrity: sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==} dev: true @@ -9277,18 +7508,11 @@ packages: object-assign: 4.1.1 dev: false - /mz/2.7.0: - resolution: {integrity: sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==} - dependencies: - any-promise: 1.3.0 - object-assign: 4.1.1 - thenify-all: 1.6.0 - dev: false - /nanoid/3.3.4: resolution: {integrity: sha512-MqBkQh/OHTS2egovRtLk45wEyNXwF+cokD+1YPf9u5VfJiRdAiRwB2froX5Co9Rh20xs4siNPm8naNotSD6RBw==} engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} hasBin: true + dev: false /natural-compare-lite/1.4.0: resolution: {integrity: sha512-Tj+HTDSJJKaZnfiuw+iaF9skdPpTo2GtEly5JHnWV/hfv2Qj/9RKsGISQtLh2ox3l5EAGw487hnBee0sIJ6v2g==} @@ -9324,10 +7548,6 @@ packages: - webpack dev: true - /next-tick/1.1.0: - resolution: {integrity: sha512-CXdUiJembsNjuToQvxayPZF9Vqht7hewsvy2sOWafLvi2awflj9mOC6bHIg50orX8IJvWKY9wYQ/zB2kogPslQ==} - dev: false - /next/12.3.1_biqbaboplfbrettd7655fr4n2y: resolution: {integrity: sha512-l7bvmSeIwX5lp07WtIiP9u2ytZMv7jIeB8iacR28PuUEFG5j0HGAPnMqyG5kbZNBG2H7tRsrQ4HCjuMOPnANZw==} engines: {node: '>=12.22.0'} @@ -9415,17 +7635,12 @@ packages: transitivePeerDependencies: - '@babel/core' - babel-plugin-macros - - /no-case/3.0.4: - resolution: {integrity: sha512-fgAN3jGAh+RoxUGZHTSOLJIqUc2wmoBwGR4tbpNAKmmovFoWq0OdRkb0VkldReO2a2iBT/OEulG9XSUc10r3zg==} - dependencies: - lower-case: 2.0.2 - tslib: 2.4.0 - dev: true + dev: false /node-domexception/1.0.0: resolution: {integrity: sha512-/jKZoMpw0F8GRwl4/eLROPA3cfcXtLApP0QzLmUT/HuPCZWyB7IY9ZrMeKw2O/nFIqPQB3PVM9aYm0F312AXDQ==} engines: {node: '>=10.5.0'} + dev: false /node-fetch/2.6.7_encoding@0.1.13: resolution: {integrity: sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ==} @@ -9440,15 +7655,6 @@ packages: whatwg-url: 5.0.0 dev: false - /node-fetch/3.2.10: - resolution: {integrity: sha512-MhuzNwdURnZ1Cp4XTazr69K0BTizsBroX7Zx3UgDSVcZYKF/6p0CBe4EUb/hLqmzVhl0UpYfgRljQ4yxE+iCxA==} - engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} - dependencies: - data-uri-to-buffer: 4.0.0 - fetch-blob: 3.2.0 - formdata-polyfill: 4.0.10 - dev: true - /node-fetch/3.3.0: resolution: {integrity: sha512-BKwRP/O0UvoMKp7GNdwPlObhYGB5DQqwhEDQlNKuoqwVYSxkSZCSbHjnFFmUEtwSKRPU4kNK8PbDYYitwaE3QA==} engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} @@ -9542,15 +7748,6 @@ packages: es-abstract: 1.20.2 dev: true - /object.entries/1.1.6: - resolution: {integrity: sha512-leTPzo4Zvg3pmbQ3rDK69Rl8GQvIqMWubrkxONG9/ojtFE2rD9fjMKfSI5BxW3osRH1m6VdzmqK8oAY9aT4x5w==} - engines: {node: '>= 0.4'} - dependencies: - call-bind: 1.0.2 - define-properties: 1.1.4 - es-abstract: 1.21.1 - dev: true - /object.fromentries/2.0.5: resolution: {integrity: sha512-CAyG5mWQRRiBU57Re4FKoTBjXfDoNwdFVH2Y1tS9PqCsfUTymAohOkEMSG3aRNKmv4lV3O7p1et7c187q6bynw==} engines: {node: '>= 0.4'} @@ -9560,15 +7757,6 @@ packages: es-abstract: 1.20.2 dev: true - /object.fromentries/2.0.6: - resolution: {integrity: sha512-VciD13dswC4j1Xt5394WR4MzmAQmlgN72phd/riNp9vtD7tp4QQWJ0R4wvclXcafgcYK8veHRed2W6XeGBvcfg==} - engines: {node: '>= 0.4'} - dependencies: - call-bind: 1.0.2 - define-properties: 1.1.4 - es-abstract: 1.21.1 - dev: true - /object.hasown/1.1.1: resolution: {integrity: sha512-LYLe4tivNQzq4JdaWW6WO3HMZZJWzkkH8fnI6EebWl0VZth2wL2Lovm74ep2/gZzlaTdV62JZHEqHQ2yVn8Q/A==} dependencies: @@ -9576,13 +7764,6 @@ packages: es-abstract: 1.20.2 dev: true - /object.hasown/1.1.2: - resolution: {integrity: sha512-B5UIT3J1W+WuWIU55h0mjlwaqxiE5vYENJXIXZ4VFe05pNYrkKuK0U/6aFcb0pKywYJh7IhfoqUfKVmrJJHZHw==} - dependencies: - define-properties: 1.1.4 - es-abstract: 1.21.1 - dev: true - /object.values/1.1.5: resolution: {integrity: sha512-QUZRW0ilQ3PnPpbNtgdNV1PDbEqLIiSFB3l+EnGtBQ/8SUTLj1PZwtQHABZtLgwpJZTSZhuGLOGk57Drx2IvYg==} engines: {node: '>= 0.4'} @@ -9592,19 +7773,11 @@ packages: es-abstract: 1.20.2 dev: true - /object.values/1.1.6: - resolution: {integrity: sha512-FVVTkD1vENCsAcwNs9k6jea2uHC/X0+JcjG8YA60FN5CMaJmG95wT9jek/xX9nornqGRrBkKtzuAu2wuHpKqvw==} - engines: {node: '>= 0.4'} - dependencies: - call-bind: 1.0.2 - define-properties: 1.1.4 - es-abstract: 1.21.1 - dev: true - /once/1.4.0: resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==} dependencies: wrappy: 1.0.2 + dev: true /onetime/5.1.2: resolution: {integrity: sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==} @@ -9620,15 +7793,6 @@ packages: mimic-fn: 4.0.0 dev: true - /open/8.4.0: - resolution: {integrity: sha512-XgFPPM+B28FtCCgSb9I+s9szOC1vZRSwgWsRUA5ylIxRTgKozqjOCrVOqGsYABPYK5qnfqClxZTFBa8PKt2v6Q==} - engines: {node: '>=12'} - dependencies: - define-lazy-prop: 2.0.0 - is-docker: 2.2.1 - is-wsl: 2.2.0 - dev: true - /optionator/0.9.1: resolution: {integrity: sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw==} engines: {node: '>= 0.8.0'} @@ -9641,21 +7805,6 @@ packages: word-wrap: 1.2.3 dev: true - /ora/5.4.1: - resolution: {integrity: sha512-5b6Y85tPxZZ7QytO+BQzysW31HJku27cRIlkbAXaNx+BdcVi+LlRFmVXzeF6a7JCwJpyw5c4b+YSVImQIrBpuQ==} - engines: {node: '>=10'} - dependencies: - bl: 4.1.0 - chalk: 4.1.2 - cli-cursor: 3.1.0 - cli-spinners: 2.7.0 - is-interactive: 1.0.0 - is-unicode-supported: 0.1.0 - log-symbols: 4.1.0 - strip-ansi: 6.0.1 - wcwidth: 1.0.1 - dev: true - /os-tmpdir/1.0.2: resolution: {integrity: sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g==} engines: {node: '>=0.10.0'} @@ -9741,13 +7890,6 @@ packages: json-parse-even-better-errors: 2.3.1 lines-and-columns: 1.2.4 - /pascal-case/3.1.2: - resolution: {integrity: sha512-uWlGT3YSnK9x3BQJaOdcZwrnV6hPpd8jFH1/ucpiLRPh/2zCVJKS19E4GvYHvaCcACn3foXZ0cLB9Wrx1KGe5g==} - dependencies: - no-case: 3.0.4 - tslib: 2.4.0 - dev: true - /path-exists/4.0.0: resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==} engines: {node: '>=8'} @@ -9756,6 +7898,7 @@ packages: /path-is-absolute/1.0.1: resolution: {integrity: sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==} engines: {node: '>=0.10.0'} + dev: true /path-is-inside/1.0.2: resolution: {integrity: sha512-DUWJr3+ULp4zXmol/SZkFf3JGsS9/SIv+Y3Rt93/UjPpDpklB5f1er4O3POIbUuUJ3FXgqte2Q7SrU6zAqwk8w==} @@ -9778,12 +7921,6 @@ packages: resolution: {integrity: sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==} engines: {node: '>=8'} - /pause-stream/0.0.11: - resolution: {integrity: sha512-e3FBlXLmN/D1S+zHzanP4E/4Z60oFAa3O051qt1pxa7DEJWKAyil6upYVXCWadEnuoqa4Pkc9oUx9zsxYeRv8A==} - dependencies: - through: 2.3.8 - dev: true - /perfect-freehand/1.2.0: resolution: {integrity: sha512-h/0ikF1M3phW7CwpZ5MMvKnfpHficWoOEyr//KVNTxV4F6deRK1eYMtHyBKEAKFK0aXIEUK9oBvlF6PNXMDsAw==} dev: false @@ -9842,11 +7979,6 @@ packages: hasBin: true dev: true - /pluralize/8.0.0: - resolution: {integrity: sha512-Nc3IT5yHzflTfbjgqWcCPpo7DaKy4FnpB0l/zCAW0Tc7jxAiuqSxHasntB3D7887LSrA93kDJ9IXovxJYxyLCA==} - engines: {node: '>=4'} - dev: true - /postcss/8.4.14: resolution: {integrity: sha512-E398TUmfAYFPBSdzgeieK2Y1+1cpdxJx8yXbK/m57nRhKSmk1GB2tO4lbLBtlkfPQTDKfe4Xqv1ASWPpayPEig==} engines: {node: ^10 || ^12 || >=14} @@ -9854,15 +7986,7 @@ packages: nanoid: 3.3.4 picocolors: 1.0.0 source-map-js: 1.0.2 - - /postcss/8.4.21: - resolution: {integrity: sha512-tP7u/Sn/dVxK2NnruI4H9BG+x+Wxz6oeZ1cJ8P6G/PZY0IKk4k/63TDsQf2kQq3+qoJeLm2kIBUNlZe3zgb4Zg==} - engines: {node: ^10 || ^12 || >=14} - dependencies: - nanoid: 3.3.4 - picocolors: 1.0.0 - source-map-js: 1.0.2 - dev: true + dev: false /preferred-pm/3.0.3: resolution: {integrity: sha512-+wZgbxNES/KlJs9q40F/1sfOd/j7f1O9JaHcW5Dsn3aUUOZg3L2bjpVUcKV2jvtElYfoTuQiNeMfQJ4kwUAhCQ==} @@ -9891,11 +8015,6 @@ packages: engines: {node: '>=10.13.0'} hasBin: true - /prettier/2.8.1: - resolution: {integrity: sha512-lqGoSJBQNJidqCHE80vqZJHWHRFoNYsSpP9AjFhlhi9ODCJA541svILes/+/1GM3VaL/abZi7cpFzOpdR9UPKg==} - engines: {node: '>=10.13.0'} - hasBin: true - /pretty-bytes/5.6.0: resolution: {integrity: sha512-FFw039TmrBqFK8ma/7OL3sDz/VytdtJr044/QUJtH0wK9lb9jLq9tJyIxUwtQJHwar2BqtiA4iCWSwo9JLkzFg==} engines: {node: '>=6'} @@ -9968,14 +8087,6 @@ packages: long: 5.2.1 dev: false - /ps-tree/1.2.0: - resolution: {integrity: sha512-0VnamPPYHl4uaU/nSFeZZpR21QAWRz+sRv4iW9+v/GS/J5U5iZB5BNN6J0RMoOvdx2gWM2+ZFMIm58q24e4UYA==} - engines: {node: '>= 0.10'} - hasBin: true - dependencies: - event-stream: 3.3.4 - dev: true - /pseudomap/1.0.2: resolution: {integrity: sha512-b/YwNhb8lk1Zz2+bXXpS/LK9OisiZZ1SNsSLxN1x2OXVEhW2Ckr/7mWE5vrC1ZTiJlD9g19jWszTmJsB+oEpFQ==} dev: true @@ -10045,6 +8156,7 @@ packages: loose-envify: 1.4.0 react: 18.2.0 scheduler: 0.23.0 + dev: false /react-i18next/11.18.6_i18next@21.10.0: resolution: {integrity: sha512-yHb2F9BiT0lqoQDt8loZ5gWP331GwctHz9tYQ8A2EIEUu+CcEdjBLQWli1USG3RdWQt3W+jqQLg/d4rrQR96LA==} @@ -10105,29 +8217,6 @@ packages: use-sidecar: 1.1.2_w5j4k42lgipnm43s3brx6h3c34 dev: false - /react-router-dom/6.6.2_biqbaboplfbrettd7655fr4n2y: - resolution: {integrity: sha512-6SCDXxRQqW5af8ImOqKza7icmQ47/EMbz572uFjzvcArg3lZ+04PxSPp8qGs+p2Y+q+b+S/AjXv8m8dyLndIIA==} - engines: {node: '>=14'} - peerDependencies: - react: '>=16.8' - react-dom: '>=16.8' - dependencies: - '@remix-run/router': 1.2.1 - react: 18.2.0 - react-dom: 18.2.0_react@18.2.0 - react-router: 6.6.2_react@18.2.0 - dev: false - - /react-router/6.6.2_react@18.2.0: - resolution: {integrity: sha512-uJPG55Pek3orClbURDvfljhqFvMgJRo59Pktywkk8hUUkTY2aRfza8Yhl/vZQXs+TNQyr6tu+uqz/fLxPICOGQ==} - engines: {node: '>=14'} - peerDependencies: - react: '>=16.8' - dependencies: - '@remix-run/router': 1.2.1 - react: 18.2.0 - dev: false - /react-style-singleton/2.2.1_w5j4k42lgipnm43s3brx6h3c34: resolution: {integrity: sha512-ZWj0fHEMyWkHzKYUr2Bs/4zU6XLmq9HsgBURm7g5pAVfyn49DgUiNgY2d4lXRlYSiCif9YBGpQleewkcqddc7g==} engines: {node: '>=10'} @@ -10164,6 +8253,7 @@ packages: engines: {node: '>=0.10.0'} dependencies: loose-envify: 1.4.0 + dev: false /read-pkg-up/7.0.1: resolution: {integrity: sha512-zK0TB7Xd6JpCLmlLmufqykGE+/TlOePD6qKClNW7hHDKFh/J7/7gCWGR7joEQEW1bKq3a3yUZSObOoWLFQ4ohg==} @@ -10222,6 +8312,7 @@ packages: inherits: 2.0.4 string_decoder: 1.3.0 util-deprecate: 1.0.2 + dev: false /realistic-structured-clone/3.0.0: resolution: {integrity: sha512-rOjh4nuWkAqf9PWu6JVpOWD4ndI+JHfgiZeMmujYcPi+fvILUu7g6l26TC1K5aBIp34nV+jE1cDO75EKOfHC5Q==} @@ -10262,11 +8353,6 @@ packages: '@babel/runtime': 7.20.7 dev: true - /regexp-tree/0.1.24: - resolution: {integrity: sha512-s2aEVuLhvnVJW6s/iPgEGK6R+/xngd2jNQ+xy4bXNDKxZKJH6jpPHY6kVeVv1IeLCHgswRj+Kl3ELaDjG6V1iw==} - hasBin: true - dev: true - /regexp.prototype.flags/1.4.3: resolution: {integrity: sha512-fjggEOO3slI6Wvgjwflkc4NFRCTZAu5CnNfBd5qOMYhWdn67nJBBu34/TkD++eeFmd8C9r9jfXJ27+nSiRkSUA==} engines: {node: '>= 0.4'} @@ -10343,6 +8429,7 @@ packages: /resolve/1.22.1: resolution: {integrity: sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw==} + hasBin: true dependencies: is-core-module: 2.10.0 path-parse: 1.0.7 @@ -10389,7 +8476,6 @@ packages: /rimraf/3.0.2: resolution: {integrity: sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==} - hasBin: true dependencies: glob: 7.2.3 dev: true @@ -10415,14 +8501,6 @@ packages: fsevents: 2.3.2 dev: true - /rollup/3.9.1: - resolution: {integrity: sha512-GswCYHXftN8ZKGVgQhTFUJB/NBXxrRGgO2NCy6E8s1rwEJ4Q9/VttNqcYfEvx4dTo4j58YqdC3OVztPzlKSX8w==} - engines: {node: '>=14.18.0', npm: '>=8.0.0'} - hasBin: true - optionalDependencies: - fsevents: 2.3.2 - dev: true - /run-parallel/1.2.0: resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==} dependencies: @@ -10446,20 +8524,6 @@ packages: /safe-buffer/5.2.1: resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==} - /safe-regex-test/1.0.0: - resolution: {integrity: sha512-JBUUzyOgEwXQY1NuPtvcj/qcBDbDmEvWufhlnXZIm75DEHp+afM1r1ujJpJsV/gSM4t59tpDyPi1sd6ZaPFfsA==} - dependencies: - call-bind: 1.0.2 - get-intrinsic: 1.1.3 - is-regex: 1.1.4 - dev: true - - /safe-regex/2.1.1: - resolution: {integrity: sha512-rx+x8AMzKb5Q5lQ95Zoi6ZbJqwCLkqi3XuJXp5P3rT8OEc6sZCJG5AE5dU3lsgRr/F4Bs31jSlVN+j5KrsGu9A==} - dependencies: - regexp-tree: 0.1.24 - dev: true - /safer-buffer/2.1.2: resolution: {integrity: sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==} @@ -10467,6 +8531,7 @@ packages: resolution: {integrity: sha512-CtuThmgHNg7zIZWAXi3AsyIzA3n4xx7aNyjwC2VJldO2LMVDhFK+63xGqq6CsJH4rTAt6/M+N4GhZiDYPx9eUw==} dependencies: loose-envify: 1.4.0 + dev: false /schema-utils/2.7.1: resolution: {integrity: sha512-SHiNtMOUGWBQJwzISiVYKu82GiV4QYGePp3odlY1tuKO7gPtphAT5R/py0fA6xtbgLL/RvtJZnU9b8s0F1q0Xg==} @@ -10504,14 +8569,6 @@ packages: lru-cache: 6.0.0 dev: true - /semver/7.3.8: - resolution: {integrity: sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==} - engines: {node: '>=10'} - hasBin: true - dependencies: - lru-cache: 6.0.0 - dev: true - /serialize-javascript/4.0.0: resolution: {integrity: sha512-GaNA54380uFefWghODBWEGisLZFj00nS5ACs6yHa9nLqlLpVLO8ChDGeKRjZnV4Nh4n0Qi7nhYZD/9fCPzEqkw==} dependencies: @@ -10552,10 +8609,6 @@ packages: engines: {node: '>=8'} dev: true - /shell-quote/1.7.4: - resolution: {integrity: sha512-8o/QEhSSRb1a5i7TFR0iM4G16Z0vYB2OQVs4G3aAFXjn3T6yEx8AZxy1PgDF7I00LZHYA3WxaSYIf5e5sAX8Rw==} - dev: true - /side-channel/1.0.4: resolution: {integrity: sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==} dependencies: @@ -10591,11 +8644,6 @@ packages: engines: {node: '>=8'} dev: true - /slash/4.0.0: - resolution: {integrity: sha512-3dOsAHXXUkQTpOYcoAxLIorMTp4gIQr5IW3iVb7A7lFIp0VHhnynm9izx6TssdrIcVIESAlVjtnO2K8bg+Coew==} - engines: {node: '>=12'} - dev: true - /slice-ansi/3.0.0: resolution: {integrity: sha512-pSyv7bSTC7ig9Dcgbw9AuRNUb5k5V6oDudjZoMBSr13qpLBG7tB+zgCkARjq7xIUgdz5P1Qe8u+rSGdouOOIyQ==} engines: {node: '>=8'} @@ -10642,6 +8690,7 @@ packages: /source-map-js/1.0.2: resolution: {integrity: sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==} engines: {node: '>=0.10.0'} + dev: false /source-map-support/0.5.13: resolution: {integrity: sha512-SHSKFHadjVA5oR4PPqhtAVdcBWwRYVd6g6cAXnIbRiIwc2EhPrTuKUBdSLvlEKyIP3GCf89fltvcZiP9MMFA1w==} @@ -10679,10 +8728,6 @@ packages: deprecated: Please use @jridgewell/sourcemap-codec instead dev: true - /spawn-command/0.0.2-1: - resolution: {integrity: sha512-n98l9E2RMSJ9ON1AKisHzz7V42VDiBQGY6PB1BwRglz99wpVsSuGzQ+jOi6lFXBGVTCrRpltvjm+/XA+tpeJrg==} - dev: true - /spawndamnit/2.0.0: resolution: {integrity: sha512-j4JKEcncSjFlqIwU5L/rp2N5SIPsdxaRsIv678+TZxZ0SRDJTm8JrxJMjE/XuiEZNEir3S8l0Fa3Ke339WI4qA==} dependencies: @@ -10712,12 +8757,6 @@ packages: resolution: {integrity: sha512-rr+VVSXtRhO4OHbXUiAF7xW3Bo9DuuF6C5jH+q/x15j2jniycgKbxU09Hr0WqlSLUs4i4ltHGXqTe7VHclYWyA==} dev: true - /split/0.3.3: - resolution: {integrity: sha512-wD2AeVmxXRBoX44wAycgjVpMhvbwdI2aZjCkvfNcH1YqHQvJVa1duWc73OyVGJUc05fhFaTZeQ/PYsrmyH0JVA==} - dependencies: - through: 2.3.8 - dev: true - /sprintf-js/1.0.3: resolution: {integrity: sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==} dev: true @@ -10729,12 +8768,6 @@ packages: escape-string-regexp: 2.0.0 dev: true - /stream-combiner/0.0.4: - resolution: {integrity: sha512-rT00SPnTVyRsaSz5zgSPma/aHSOic5U1prhYdRy5HS2kTZviFpmDgzilbtsJsxiroqACmayynDN/9VzIbX5DOw==} - dependencies: - duplexer: 0.1.2 - dev: true - /stream-transform/2.1.3: resolution: {integrity: sha512-9GHUiM5hMiCi6Y03jD2ARC1ettBXkQBoQAe7nJsPknnI0ow10aXjTnew8QtYQmLjzn974BnmWEAJgCY6ZP1DeQ==} dependencies: @@ -10754,10 +8787,6 @@ packages: strip-ansi: 6.0.1 dev: true - /string-similarity/4.0.4: - resolution: {integrity: sha512-/q/8Q4Bl4ZKAPjj8WerIBJWALKkaPRfrvhfF8k/B23i4nzrlRj2/go1m90In7nG/3XDSbOo0+pu6RvCTM9RGMQ==} - dev: true - /string-width/4.2.3: resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==} engines: {node: '>=8'} @@ -10788,33 +8817,12 @@ packages: side-channel: 1.0.4 dev: true - /string.prototype.matchall/4.0.8: - resolution: {integrity: sha512-6zOCOcJ+RJAQshcTvXPHoxoQGONa3e/Lqx90wUA+wEzX78sg5Bo+1tQo4N0pohS0erG9qtCqJDjNCQBjeWVxyg==} - dependencies: - call-bind: 1.0.2 - define-properties: 1.1.4 - es-abstract: 1.21.1 - get-intrinsic: 1.1.3 - has-symbols: 1.0.3 - internal-slot: 1.0.3 - regexp.prototype.flags: 1.4.3 - side-channel: 1.0.4 - dev: true - /string.prototype.trimend/1.0.5: resolution: {integrity: sha512-I7RGvmjV4pJ7O3kdf+LXFpVfdNOxtCW/2C8f6jNiW4+PQchwxkCDzlk1/7p+Wl4bqFIZeF47qAHXLuHHWKAxog==} dependencies: call-bind: 1.0.2 define-properties: 1.1.4 - es-abstract: 1.21.1 - dev: true - - /string.prototype.trimend/1.0.6: - resolution: {integrity: sha512-JySq+4mrPf9EsDBEDYMOb/lM7XQLulwg5R/m1r0PXEFqrV0qHvl58sdTilSXtKOflCsK2E8jxf+GKC0T07RWwQ==} - dependencies: - call-bind: 1.0.2 - define-properties: 1.1.4 - es-abstract: 1.21.1 + es-abstract: 1.20.2 dev: true /string.prototype.trimstart/1.0.5: @@ -10822,15 +8830,7 @@ packages: dependencies: call-bind: 1.0.2 define-properties: 1.1.4 - es-abstract: 1.21.1 - dev: true - - /string.prototype.trimstart/1.0.6: - resolution: {integrity: sha512-omqjMDaY92pbn5HOX7f9IccLA+U1tA9GvtU4JrodiXFfYB7jPzzHpRzpglLAjtUV6bB557zwClJezTqnAiYnQA==} - dependencies: - call-bind: 1.0.2 - define-properties: 1.1.4 - es-abstract: 1.21.1 + es-abstract: 1.20.2 dev: true /string_decoder/0.10.31: @@ -10847,6 +8847,7 @@ packages: resolution: {integrity: sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==} dependencies: safe-buffer: 5.2.1 + dev: false /stringify-object/3.3.0: resolution: {integrity: sha512-rHqiFh1elqCQ9WPLIC8I0Q/g/wj5J1eMkyoiD6eoQApWHP0FtlK7rqnhmabL5VUY9JQCcqwwvlOaSuutekgyrw==} @@ -10938,15 +8939,12 @@ packages: dependencies: client-only: 0.0.1 react: 18.2.0 + dev: false /stylis/4.0.13: resolution: {integrity: sha512-xGPXiFVl4YED9Jh7Euv2V220mriG9u4B2TA6Ybjc1catrstKD2PpIdU3U0RKpkVBC2EhmL/F0sPCr9vrFTNRag==} dev: false - /stylis/4.1.3: - resolution: {integrity: sha512-GP6WDNWf+o403jrEp9c5jibKavrtLW+/qYGhFxFrG8maXhwTBI7gLLhiBb0o7uFccWN+EOS9aMO6cGHWAO07OA==} - dev: false - /supports-color/5.5.0: resolution: {integrity: sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==} engines: {node: '>=4'} @@ -10980,19 +8978,6 @@ packages: use-sync-external-store: 1.2.0 dev: false - /synckit/0.8.4: - resolution: {integrity: sha512-Dn2ZkzMdSX827QbowGbU/4yjWuvNaCoScLLoMo/yKbu+P4GBR6cRGKZH27k6a9bRzdqcyd1DE96pQtQ6uNkmyw==} - engines: {node: ^14.18.0 || >=16.0.0} - dependencies: - '@pkgr/utils': 2.3.1 - tslib: 2.4.0 - dev: true - - /tapable/2.2.1: - resolution: {integrity: sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==} - engines: {node: '>=6'} - dev: true - /temp-dir/2.0.0: resolution: {integrity: sha512-aoBAniQmmwtcKp/7BzsH8Cxzv8OL736p7v1ihGb5e9DJ9kTwGWHrQrVB5+lfVDzfGrdRzXch+ig7LHaY1JTOrg==} engines: {node: '>=8'} @@ -11060,19 +9045,6 @@ packages: resolution: {integrity: sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==} dev: true - /thenify-all/1.6.0: - resolution: {integrity: sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA==} - engines: {node: '>=0.8'} - dependencies: - thenify: 3.3.1 - dev: false - - /thenify/3.3.1: - resolution: {integrity: sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==} - dependencies: - any-promise: 1.3.0 - dev: false - /through/2.3.8: resolution: {integrity: sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==} @@ -11083,20 +9055,6 @@ packages: xtend: 2.1.2 dev: false - /timers-ext/0.1.7: - resolution: {integrity: sha512-b85NUNzTSdodShTIbky6ZF02e8STtVVfD+fu4aXXShEELpozH+bCpJLYMPZbsABN2wDH7fJpqIoXxJpzbf0NqQ==} - dependencies: - es5-ext: 0.10.62 - next-tick: 1.1.0 - dev: false - - /tiny-glob/0.2.9: - resolution: {integrity: sha512-g/55ssRPUjShh+xkfx9UPDXqhckHEsHr4Vd9zX55oSdGZc/MD0m3sferOkwWtp98bv+kcVfEHtRJgBVJzelrzg==} - dependencies: - globalyzer: 0.1.0 - globrex: 0.1.2 - dev: true - /tmp/0.0.33: resolution: {integrity: sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==} engines: {node: '>=0.6.0'} @@ -11136,11 +9094,6 @@ packages: punycode: 2.1.1 dev: true - /tree-kill/1.2.2: - resolution: {integrity: sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A==} - hasBin: true - dev: true - /trim-newlines/3.0.1: resolution: {integrity: sha512-c1PTsA3tYrIsLGkJkzHF+w9F2EyxfXGo4UyJc4pFL++FMjnq0HJS69T3M7d//gKrFKwy429bouPescbjecU+Zw==} engines: {node: '>=8'} @@ -11182,16 +9135,6 @@ packages: typescript: 4.9.3 dev: true - /tsutils/3.21.0_typescript@4.9.4: - resolution: {integrity: sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==} - engines: {node: '>= 6'} - peerDependencies: - typescript: '>=2.8.0 || >= 3.2.0-dev || >= 3.3.0-dev || >= 3.4.0-dev || >= 3.5.0-dev || >= 3.6.0-dev || >= 3.6.0-beta || >= 3.7.0-dev || >= 3.7.0-beta' - dependencies: - tslib: 1.14.1 - typescript: 4.9.4 - dev: true - /tty-table/4.1.6: resolution: {integrity: sha512-kRj5CBzOrakV4VRRY5kUWbNYvo/FpOsz65DzI5op9P+cHov3+IqPbo1JE1ZnQGkHdZgNFDsrEjrfqqy/Ply9fw==} engines: {node: '>=8.0.0'} @@ -11254,22 +9197,6 @@ packages: engines: {node: '>=8'} dev: true - /type/1.2.0: - resolution: {integrity: sha512-+5nt5AAniqsCnu2cEQQdpzCAh33kVx8n0VoFidKpB1dVVLAN/F+bgVOqOJqOnEnrhp222clB5p3vUlD+1QAnfg==} - dev: false - - /type/2.7.2: - resolution: {integrity: sha512-dzlvlNlt6AXU7EBSfpAscydQ7gXB+pPGsPnfJnZpiNJBDj7IaJzQlBZYGdEi4R9HmPdBv2XmWJ6YUtoTa7lmCw==} - dev: false - - /typed-array-length/1.0.4: - resolution: {integrity: sha512-KjZypGq+I/H7HI5HlOoGHkWUUGq+Q0TPhQurLbyrVrvnKTBgzLhIJ7j6J/XTQOi0d1RjyZ0wdas8bKs2p0x3Ng==} - dependencies: - call-bind: 1.0.2 - for-each: 0.3.3 - is-typed-array: 1.1.10 - dev: true - /typescript/4.8.3: resolution: {integrity: sha512-goMHfm00nWPa8UvR/CPSvykqf6dVV8x/dp0c5mFTMTIu0u0FlGWRioyy7Nn0PGAdHxpJZnuO/ut+PpQ8UiHAig==} engines: {node: '>=4.2.0'} @@ -11288,12 +9215,6 @@ packages: hasBin: true dev: true - /typescript/4.9.4: - resolution: {integrity: sha512-Uz+dTXYzxXXbsFpM86Wh3dKCxrQqUcVMxwU54orwlJjOpO3ao8L7j5lH+dWfTwgCwIuM9GQ2kvVotzYJMXTBZg==} - engines: {node: '>=4.2.0'} - hasBin: true - dev: true - /typeson-registry/1.0.0-alpha.39: resolution: {integrity: sha512-NeGDEquhw+yfwNhguLPcZ9Oj0fzbADiX4R0WxvoY8nGhy98IbzQy1sezjoEFWOywOboj/DWehI+/aUlRVrJnnw==} engines: {node: '>=10.0.0'} @@ -11308,23 +9229,6 @@ packages: engines: {node: '>=0.1.14'} dev: true - /typesync/0.9.2: - resolution: {integrity: sha512-FnHhbgECgkcGOR/DVmE0V9Z81Od7Icu2qkXGM91GFFzVO9HaQ9fYwmSY9ibKoydN4k7IV0hRRKGLLgfenWjRFw==} - engines: {node: '>=10.0.0'} - hasBin: true - dependencies: - awilix: 7.0.3 - axios: 0.27.2 - chalk: 4.1.2 - cosmiconfig: 7.0.1 - detect-indent: 6.1.0 - glob: 7.2.3 - ora: 5.4.1 - semver: 7.3.8 - transitivePeerDependencies: - - debug - dev: true - /unbox-primitive/1.0.2: resolution: {integrity: sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==} dependencies: @@ -11443,6 +9347,7 @@ packages: /util-deprecate/1.0.2: resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==} + dev: false /v8-compile-cache/2.3.0: resolution: {integrity: sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA==} @@ -11464,40 +9369,6 @@ packages: spdx-expression-parse: 3.0.1 dev: true - /vite/4.0.4_@types+node@18.11.18: - resolution: {integrity: sha512-xevPU7M8FU0i/80DMR+YhgrzR5KS2ORy1B4xcX/cXLsvnUWvfHuqMmVU6N0YiJ4JWGRJJsLCgjEzKjG9/GKoSw==} - engines: {node: ^14.18.0 || >=16.0.0} - hasBin: true - peerDependencies: - '@types/node': '>= 14' - less: '*' - sass: '*' - stylus: '*' - sugarss: '*' - terser: ^5.4.0 - peerDependenciesMeta: - '@types/node': - optional: true - less: - optional: true - sass: - optional: true - stylus: - optional: true - sugarss: - optional: true - terser: - optional: true - dependencies: - '@types/node': 18.11.18 - esbuild: 0.16.16 - postcss: 8.4.21 - resolve: 1.22.1 - rollup: 3.9.1 - optionalDependencies: - fsevents: 2.3.2 - dev: true - /void-elements/3.1.0: resolution: {integrity: sha512-Dhxzh5HZuiHQhbvTW9AMetFfBHDMYpo23Uo9btPXgdYP+3T5S+p+jgNy7spra+veYhBP2dCSgxR/i2Y02h5/6w==} engines: {node: '>=0.10.0'} @@ -11518,6 +9389,7 @@ packages: /web-streams-polyfill/3.2.1: resolution: {integrity: sha512-e0MO3wdXWKrLbL0DgGnUV7WHVuw9OUvL4hjgnPkIeEvESk74gAITi5G606JtZPp39cd8HA9VQzCIvA49LpPN5Q==} engines: {node: '>= 8'} + dev: false /webidl-conversions/3.0.1: resolution: {integrity: sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==} @@ -11599,18 +9471,6 @@ packages: path-exists: 4.0.0 dev: true - /which-typed-array/1.1.9: - resolution: {integrity: sha512-w9c4xkx6mPidwp7180ckYWfMmvxpjlZuIudNtDf4N/tTAUB8VJbX25qZoAsrtGuYNnGw3pa0AXgbGKRB8/EceA==} - engines: {node: '>= 0.4'} - dependencies: - available-typed-arrays: 1.0.5 - call-bind: 1.0.2 - for-each: 0.3.3 - gopd: 1.0.1 - has-tostringtag: 1.0.0 - is-typed-array: 1.1.10 - dev: true - /which/1.3.1: resolution: {integrity: sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==} hasBin: true @@ -11811,6 +9671,7 @@ packages: /wrappy/1.0.2: resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==} + dev: true /write-file-atomic/4.0.2: resolution: {integrity: sha512-7KxauUdBmSdWnmpaGFg+ppNjKF8uNLry8LyzjauQDOVONfFLNKrKvQOxZ/VuTIcS/gge/YNahf5RIIQWTSarlg==} @@ -11887,6 +9748,7 @@ packages: /yaml/1.10.2: resolution: {integrity: sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==} engines: {node: '>= 6'} + dev: false /yaml/2.2.1: resolution: {integrity: sha512-e0WHiYql7+9wr4cWMx3TVQrNwejKaEe7/rHNmQmqRjazfOP5W8PB6Jpebb5o6fIapbz9o9+2ipcaTM2ZwDI6lw==} @@ -11957,30 +9819,10 @@ packages: /yjs/13.5.44: resolution: {integrity: sha512-UL+abIh2lQonqXfaJ+en7z9eGshpY11j1zNLc2kDYs0vrTjee4gZJUXC3ZsuhP6geQt0IRU04epCGRaVPQAVCA==} dependencies: - lib0: 0.2.58 + lib0: 0.2.52 dev: false /yocto-queue/0.1.0: resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==} engines: {node: '>=10'} dev: true - - /zx/7.1.1: - resolution: {integrity: sha512-5YlTO2AJ+Ku2YuZKSSSqnUKuagcM/f/j4LmHs15O84Ch80Z9gzR09ZK3gR7GV+rc8IFpz2H/XNFtFVmj31yrZA==} - engines: {node: '>= 16.0.0'} - hasBin: true - dependencies: - '@types/fs-extra': 9.0.13 - '@types/minimist': 1.2.2 - '@types/node': 18.11.18 - '@types/ps-tree': 1.1.2 - '@types/which': 2.0.1 - chalk: 5.2.0 - fs-extra: 10.1.0 - globby: 13.1.3 - minimist: 1.2.6 - node-fetch: 3.2.10 - ps-tree: 1.2.0 - which: 2.0.2 - yaml: 2.2.1 - dev: true