diff --git a/commons/src/utils/deep-partial.ts b/commons/src/utils/deep-partial.ts new file mode 100644 index 000000000..e076087a7 --- /dev/null +++ b/commons/src/utils/deep-partial.ts @@ -0,0 +1,13 @@ +/* + * SPDX-FileCopyrightText: 2023 The HedgeDoc developers (see AUTHORS file) + * + * SPDX-License-Identifier: AGPL-3.0-only + */ + +export type DeepPartial = T extends null | undefined + ? T + : T extends Array + ? Array> + : T extends Record + ? { [P in keyof T]?: DeepPartial } + : T diff --git a/commons/src/utils/index.ts b/commons/src/utils/index.ts index 8c5efc05d..de8f49526 100644 --- a/commons/src/utils/index.ts +++ b/commons/src/utils/index.ts @@ -5,3 +5,4 @@ */ export * from './wait-for-other-promises-to-finish.js' +export type { DeepPartial } from './deep-partial.js' diff --git a/frontend/src/test-utils/mock-app-state.ts b/frontend/src/test-utils/mock-app-state.ts index 38df25b51..729c7afb8 100644 --- a/frontend/src/test-utils/mock-app-state.ts +++ b/frontend/src/test-utils/mock-app-state.ts @@ -5,7 +5,6 @@ */ import * as useApplicationStateModule from '../hooks/common/use-application-state' import type { ApplicationState } from '../redux/application-state' -import type { DeepPartial } from 'redux' import { initialState as initialStateDarkMode } from '../redux/dark-mode/reducers' import { initialState as initialStateEditorConfig } from '../redux/editor/reducers' import { initialState as initialStateNoteDetails } from '../redux/note-details/initial-state' @@ -13,7 +12,7 @@ import { initialState as initialStateRealtimeStatus } from '../redux/realtime/re import { initialState as initialStateRendererStatus } from '../redux/renderer-status/reducers' import type { NoteDetails } from '../redux/note-details/types/note-details' import type { RealtimeStatus } from '../redux/realtime/types' -import type { HistoryEntryWithOrigin } from '../api/history/types' +import type { DeepPartial } from '@hedgedoc/commons' jest.mock('../redux/editor/methods', () => ({ loadFromLocalStorage: jest.fn().mockReturnValue(undefined) @@ -37,7 +36,7 @@ export const mockAppState = (state?: DeepPartial) => { ...initialStateEditorConfig, ...state?.editorConfig }, - history: (state?.history ?? []) as HistoryEntryWithOrigin[], + history: state?.history ?? [], noteDetails: { ...initialStateNoteDetails, ...state?.noteDetails diff --git a/frontend/src/test-utils/mock-note-permissions.ts b/frontend/src/test-utils/mock-note-permissions.ts index df9be71de..4ca09453b 100644 --- a/frontend/src/test-utils/mock-note-permissions.ts +++ b/frontend/src/test-utils/mock-note-permissions.ts @@ -4,10 +4,8 @@ * SPDX-License-Identifier: AGPL-3.0-only */ import type { ApplicationState } from '../redux/application-state' -import type { DeepPartial } from 'redux' import { mockAppState } from './mock-app-state' -import type { LoginUserInfo } from '../api/me/types' -import type { NotePermissions } from '@hedgedoc/commons' +import type { DeepPartial, NotePermissions } from '@hedgedoc/commons' /** * Mocks the {@link NotePermissions} field of a note in the {@link ApplicationState }for a test. @@ -38,6 +36,6 @@ export const mockNotePermissions = ( user: { ...additionalState?.user, username: ownUsername - } as LoginUserInfo - }) + } + } as DeepPartial) }