From 5283a51931a0ba71a5ae4a155a7814532fa31277 Mon Sep 17 00:00:00 2001 From: Nick the Sick Date: Wed, 24 Jul 2024 13:59:10 +0200 Subject: [PATCH] chore: widen the typing for GlobalAttributes --- packages/core/src/types.ts | 313 +++++++++++++++++++------------------ 1 file changed, 157 insertions(+), 156 deletions(-) diff --git a/packages/core/src/types.ts b/packages/core/src/types.ts index 1eb4f3ef8..a83281e2f 100644 --- a/packages/core/src/types.ts +++ b/packages/core/src/types.ts @@ -1,5 +1,8 @@ import { - Mark as ProseMirrorMark, Node as ProseMirrorNode, NodeType, ParseOptions, + Mark as ProseMirrorMark, + Node as ProseMirrorNode, + NodeType, + ParseOptions, } from '@tiptap/pm/model' import { EditorState, Transaction } from '@tiptap/pm/state' import { @@ -14,267 +17,265 @@ import { import { Mark } from './Mark.js' import { Node } from './Node.js' -export type AnyConfig = ExtensionConfig | NodeConfig | MarkConfig -export type AnyExtension = Extension | Node | Mark -export type Extensions = AnyExtension[] +export type AnyConfig = ExtensionConfig | NodeConfig | MarkConfig; +export type AnyExtension = Extension | Node | Mark; +export type Extensions = AnyExtension[]; export type ParentConfig = Partial<{ [P in keyof T]: Required[P] extends (...args: any) => any ? (...args: Parameters[P]>) => ReturnType[P]> - : T[P] -}> + : T[P]; +}>; -export type Primitive = null | undefined | string | number | boolean | symbol | bigint +export type Primitive = null | undefined | string | number | boolean | symbol | bigint; export type RemoveThis = T extends (...args: any) => any ? (...args: Parameters) => ReturnType - : T + : T; -export type MaybeReturnType = T extends (...args: any) => any ? ReturnType : T +export type MaybeReturnType = T extends (...args: any) => any ? ReturnType : T; export type MaybeThisParameterType = Exclude extends (...args: any) => any ? ThisParameterType> - : any + : any; export interface EditorEvents { - beforeCreate: { editor: Editor } - create: { editor: Editor } + beforeCreate: { editor: Editor }; + create: { editor: Editor }; contentError: { - editor: Editor, - error: Error, + editor: Editor; + error: Error; /** * If called, will re-initialize the editor with the collaboration extension removed. * This will prevent syncing back deletions of content not present in the current schema. */ - disableCollaboration: () => void - } - update: { editor: Editor; transaction: Transaction } - selectionUpdate: { editor: Editor; transaction: Transaction } - beforeTransaction: { editor: Editor; transaction: Transaction, nextState: EditorState } - transaction: { editor: Editor; transaction: Transaction } - focus: { editor: Editor; event: FocusEvent; transaction: Transaction } - blur: { editor: Editor; event: FocusEvent; transaction: Transaction } - destroy: void + disableCollaboration: () => void; + }; + update: { editor: Editor; transaction: Transaction }; + selectionUpdate: { editor: Editor; transaction: Transaction }; + beforeTransaction: { editor: Editor; transaction: Transaction; nextState: EditorState }; + transaction: { editor: Editor; transaction: Transaction }; + focus: { editor: Editor; event: FocusEvent; transaction: Transaction }; + blur: { editor: Editor; event: FocusEvent; transaction: Transaction }; + destroy: void; } -export type EnableRules = (AnyExtension | string)[] | boolean +export type EnableRules = (AnyExtension | string)[] | boolean; export interface EditorOptions { - element: Element - content: Content - extensions: Extensions - injectCSS: boolean - injectNonce: string | undefined - autofocus: FocusPosition - editable: boolean - editorProps: EditorProps - parseOptions: ParseOptions + element: Element; + content: Content; + extensions: Extensions; + injectCSS: boolean; + injectNonce: string | undefined; + autofocus: FocusPosition; + editable: boolean; + editorProps: EditorProps; + parseOptions: ParseOptions; coreExtensionOptions?: { clipboardTextSerializer?: { - blockSeparator?: string - } - } - enableInputRules: EnableRules - enablePasteRules: EnableRules - enableCoreExtensions: boolean + blockSeparator?: string; + }; + }; + enableInputRules: EnableRules; + enablePasteRules: EnableRules; + enableCoreExtensions: boolean; /** * If `true`, the editor will check the content for errors on initialization. * Emitting the `contentError` event if the content is invalid. * Which can be used to show a warning or error message to the user. * @default false */ - enableContentCheck: boolean - onBeforeCreate: (props: EditorEvents['beforeCreate']) => void - onCreate: (props: EditorEvents['create']) => void + enableContentCheck: boolean; + onBeforeCreate: (props: EditorEvents['beforeCreate']) => void; + onCreate: (props: EditorEvents['create']) => void; /** * Called when the editor encounters an error while parsing the content. * Only enabled if `enableContentCheck` is `true`. */ - onContentError: (props: EditorEvents['contentError']) => void - onUpdate: (props: EditorEvents['update']) => void - onSelectionUpdate: (props: EditorEvents['selectionUpdate']) => void - onTransaction: (props: EditorEvents['transaction']) => void - onFocus: (props: EditorEvents['focus']) => void - onBlur: (props: EditorEvents['blur']) => void - onDestroy: (props: EditorEvents['destroy']) => void + onContentError: (props: EditorEvents['contentError']) => void; + onUpdate: (props: EditorEvents['update']) => void; + onSelectionUpdate: (props: EditorEvents['selectionUpdate']) => void; + onTransaction: (props: EditorEvents['transaction']) => void; + onFocus: (props: EditorEvents['focus']) => void; + onBlur: (props: EditorEvents['blur']) => void; + onDestroy: (props: EditorEvents['destroy']) => void; } -export type HTMLContent = string +export type HTMLContent = string; export type JSONContent = { - type?: string - attrs?: Record - content?: JSONContent[] + type?: string; + attrs?: Record; + content?: JSONContent[]; marks?: { - type: string - attrs?: Record - [key: string]: any - }[] - text?: string - [key: string]: any -} + type: string; + attrs?: Record; + [key: string]: any; + }[]; + text?: string; + [key: string]: any; +}; -export type Content = HTMLContent | JSONContent | JSONContent[] | null +export type Content = HTMLContent | JSONContent | JSONContent[] | null; export type CommandProps = { - editor: Editor - tr: Transaction - commands: SingleCommands - can: () => CanCommands - chain: () => ChainedCommands - state: EditorState - view: EditorView - dispatch: ((args?: any) => any) | undefined -} + editor: Editor; + tr: Transaction; + commands: SingleCommands; + can: () => CanCommands; + chain: () => ChainedCommands; + state: EditorState; + view: EditorView; + dispatch: ((args?: any) => any) | undefined; +}; -export type Command = (props: CommandProps) => boolean +export type Command = (props: CommandProps) => boolean; -export type CommandSpec = (...args: any[]) => Command +export type CommandSpec = (...args: any[]) => Command; -export type KeyboardShortcutCommand = (props: { editor: Editor }) => boolean +export type KeyboardShortcutCommand = (props: { editor: Editor }) => boolean; export type Attribute = { - default?: any - rendered?: boolean - renderHTML?: ((attributes: Record) => Record | null) | null - parseHTML?: ((element: HTMLElement) => any | null) | null - keepOnSplit?: boolean - isRequired?: boolean -} + default?: any; + rendered?: boolean; + renderHTML?: ((attributes: Record) => Record | null) | null; + parseHTML?: ((element: HTMLElement) => any | null) | null; + keepOnSplit?: boolean; + isRequired?: boolean; +}; export type Attributes = { - [key: string]: Attribute -} + [key: string]: Attribute; +}; export type ExtensionAttribute = { - type: string - name: string - attribute: Required -} + type: string; + name: string; + attribute: Required; +}; export type GlobalAttributes = { /** * The node & mark types this attribute should be applied to. */ - types: string[] + types: string[]; /** * The attributes to add to the node or mark types. */ - attributes: { - [key: string]: Attribute - } -}[] + attributes: Record; +}[]; -export type PickValue = T[K] +export type PickValue = T[K]; export type UnionToIntersection = (U extends any ? (k: U) => void : never) extends ( - k: infer I, + k: infer I ) => void ? I - : never + : never; export type Diff = ({ [P in T]: P } & { - [P in U]: never -} & { [x: string]: never })[T] + [P in U]: never; +} & { [x: string]: never })[T]; -export type Overwrite = Pick> & U +export type Overwrite = Pick> & U; -export type ValuesOf = T[keyof T] +export type ValuesOf = T[keyof T]; -export type KeysWithTypeOf = { [P in keyof T]: T[P] extends Type ? P : never }[keyof T] +export type KeysWithTypeOf = { [P in keyof T]: T[P] extends Type ? P : never }[keyof T]; export type DecorationWithType = Decoration & { - type: NodeType -} + type: NodeType; +}; export type NodeViewProps = { - editor: Editor - node: ProseMirrorNode - decorations: DecorationWithType[] - selected: boolean - extension: Node - getPos: () => number - updateAttributes: (attributes: Record) => void - deleteNode: () => void -} + editor: Editor; + node: ProseMirrorNode; + decorations: DecorationWithType[]; + selected: boolean; + extension: Node; + getPos: () => number; + updateAttributes: (attributes: Record) => void; + deleteNode: () => void; +}; export interface NodeViewRendererOptions { - stopEvent: ((props: { event: Event }) => boolean) | null + stopEvent: ((props: { event: Event }) => boolean) | null; ignoreMutation: | ((props: { mutation: MutationRecord | { type: 'selection'; target: Element } }) => boolean) - | null - contentDOMElementTag: string + | null; + contentDOMElementTag: string; } export type NodeViewRendererProps = { - editor: Editor - node: ProseMirrorNode - getPos: (() => number) | boolean - HTMLAttributes: Record - decorations: Decoration[] - extension: Node -} + editor: Editor; + node: ProseMirrorNode; + getPos: (() => number) | boolean; + HTMLAttributes: Record; + decorations: Decoration[]; + extension: Node; +}; -export type NodeViewRenderer = (props: NodeViewRendererProps) => NodeView | {} +export type NodeViewRenderer = (props: NodeViewRendererProps) => NodeView | {}; -export type AnyCommands = Record Command> +export type AnyCommands = Record Command>; export type UnionCommands = UnionToIntersection< ValuesOf, KeysWithTypeOf, {}>>> -> +>; export type RawCommands = { - [Item in keyof UnionCommands]: UnionCommands[Item] -} + [Item in keyof UnionCommands]: UnionCommands[Item]; +}; export type SingleCommands = { - [Item in keyof UnionCommands]: UnionCommands[Item] -} + [Item in keyof UnionCommands]: UnionCommands[Item]; +}; export type ChainedCommands = { - [Item in keyof UnionCommands]: UnionCommands[Item] + [Item in keyof UnionCommands]: UnionCommands[Item]; } & { - run: () => boolean -} + run: () => boolean; +}; -export type CanCommands = SingleCommands & { chain: () => ChainedCommands } +export type CanCommands = SingleCommands & { chain: () => ChainedCommands }; -export type FocusPosition = 'start' | 'end' | 'all' | number | boolean | null +export type FocusPosition = 'start' | 'end' | 'all' | number | boolean | null; export type Range = { - from: number - to: number -} + from: number; + to: number; +}; export type NodeRange = { - node: ProseMirrorNode - from: number - to: number -} + node: ProseMirrorNode; + from: number; + to: number; +}; export type MarkRange = { - mark: ProseMirrorMark - from: number - to: number -} + mark: ProseMirrorMark; + from: number; + to: number; +}; -export type Predicate = (node: ProseMirrorNode) => boolean +export type Predicate = (node: ProseMirrorNode) => boolean; export type NodeWithPos = { - node: ProseMirrorNode - pos: number -} + node: ProseMirrorNode; + pos: number; +}; export type TextSerializer = (props: { - node: ProseMirrorNode - pos: number - parent: ProseMirrorNode - index: number - range: Range -}) => string + node: ProseMirrorNode; + pos: number; + parent: ProseMirrorNode; + index: number; + range: Range; +}) => string; export type ExtendedRegExpMatchArray = RegExpMatchArray & { - data?: Record -} + data?: Record; +}; -export type Dispatch = ((args?: any) => any) | undefined +export type Dispatch = ((args?: any) => any) | undefined;