use global namespace

This commit is contained in:
Philipp Kühn
2020-11-16 15:40:05 +01:00
parent 3a6479eeca
commit 24c3a9abd3
39 changed files with 243 additions and 138 deletions

View File

@@ -70,6 +70,8 @@ module.exports = {
'@typescript-eslint/ban-types': 'off', '@typescript-eslint/ban-types': 'off',
'@typescript-eslint/comma-dangle': ['error', 'always-multiline'], '@typescript-eslint/comma-dangle': ['error', 'always-multiline'],
'@typescript-eslint/explicit-module-boundary-types': 'off', '@typescript-eslint/explicit-module-boundary-types': 'off',
'@typescript-eslint/no-namespace': 'off',
'no-undef': 'off',
}, },
}, },
], ],

View File

@@ -1,7 +1,5 @@
import { EditorState, Transaction } from 'prosemirror-state' import { EditorState, Transaction } from 'prosemirror-state'
import { import {
SingleCommands,
ChainedCommands,
Editor, Editor,
CommandSpec, CommandSpec,
} from './Editor' } from './Editor'
@@ -58,7 +56,7 @@ export default class CommandManager {
} }
return [name, method] return [name, method]
})) as SingleCommands })) as Tiptap.SingleCommands
} }
public createChain(startTr?: Transaction, shouldDispatch = true) { public createChain(startTr?: Transaction, shouldDispatch = true) {
@@ -92,7 +90,7 @@ export default class CommandManager {
return proxy return proxy
} }
}, },
}) as ChainedCommands }) as Tiptap.ChainedCommands
} }
public createCan(startTr?: Transaction) { public createCan(startTr?: Transaction) {
@@ -105,7 +103,7 @@ export default class CommandManager {
.entries(commands) .entries(commands)
.map(([name, command]) => { .map(([name, command]) => {
return [name, (...args: any[]) => command(...args)({ ...props, dispatch })] return [name, (...args: any[]) => command(...args)({ ...props, dispatch })]
})) as SingleCommands })) as Tiptap.SingleCommands
return { return {
...formattedCommands, ...formattedCommands,

View File

@@ -24,9 +24,9 @@ import style from './style'
export type Command = (props: { export type Command = (props: {
editor: Editor, editor: Editor,
tr: Transaction, tr: Transaction,
commands: SingleCommands, commands: Tiptap.SingleCommands,
can: () => SingleCommands & { chain: () => ChainedCommands }, can: () => Tiptap.SingleCommands & { chain: () => Tiptap.ChainedCommands },
chain: () => ChainedCommands, chain: () => Tiptap.ChainedCommands,
state: EditorState, state: EditorState,
view: EditorView, view: EditorView,
dispatch: ((args?: any) => any) | undefined, dispatch: ((args?: any) => any) | undefined,
@@ -38,9 +38,11 @@ export interface CommandsSpec {
[key: string]: CommandSpec [key: string]: CommandSpec
} }
export interface AllExtensions {} declare global {
namespace Tiptap {
export interface AllExtensions {}
export type UnfilteredCommands = { export type UnfilteredCommands = {
[Item in keyof AllExtensions]: AllExtensions[Item] extends Extension<any, infer ExtensionCommands> [Item in keyof AllExtensions]: AllExtensions[Item] extends Extension<any, infer ExtensionCommands>
? ExtensionCommands ? ExtensionCommands
: AllExtensions[Item] extends Node<any, infer NodeCommands> : AllExtensions[Item] extends Node<any, infer NodeCommands>
@@ -48,26 +50,60 @@ export type UnfilteredCommands = {
: AllExtensions[Item] extends Mark<any, infer MarkCommands> : AllExtensions[Item] extends Mark<any, infer MarkCommands>
? MarkCommands ? MarkCommands
: never : never
} }
type ValuesOf<T> = T[keyof T]; type ValuesOf<T> = T[keyof T];
type KeysWithTypeOf<T, Type> = ({[P in keyof T]: T[P] extends Type ? P : never })[keyof T] type KeysWithTypeOf<T, Type> = ({[P in keyof T]: T[P] extends Type ? P : never })[keyof T]
type AllCommands = UnionToIntersection<ValuesOf<Pick<UnfilteredCommands, KeysWithTypeOf<UnfilteredCommands, {}>>>> type AllCommands = UnionToIntersection<ValuesOf<Pick<UnfilteredCommands, KeysWithTypeOf<UnfilteredCommands, {}>>>>
export type SingleCommands = { export type SingleCommands = {
[Item in keyof AllCommands]: AllCommands[Item] extends (...args: any[]) => any [Item in keyof AllCommands]: AllCommands[Item] extends (...args: any[]) => any
? (...args: Parameters<AllCommands[Item]>) => boolean ? (...args: Parameters<AllCommands[Item]>) => boolean
: never : never
} }
export type ChainedCommands = { export type ChainedCommands = {
[Item in keyof AllCommands]: AllCommands[Item] extends (...args: any[]) => any [Item in keyof AllCommands]: AllCommands[Item] extends (...args: any[]) => any
? (...args: Parameters<AllCommands[Item]>) => ChainedCommands ? (...args: Parameters<AllCommands[Item]>) => ChainedCommands
: never : never
} & { } & {
run: () => boolean run: () => boolean
}
}
} }
// type blub = Tiptap.AllExtensions
// export interface AllExtensions {}
// export type UnfilteredCommands = {
// [Item in keyof Tiptap.AllExtensions]: AllExtensions[Item] extends Extension<any, infer ExtensionCommands>
// ? ExtensionCommands
// : AllExtensions[Item] extends Node<any, infer NodeCommands>
// ? NodeCommands
// : AllExtensions[Item] extends Mark<any, infer MarkCommands>
// ? MarkCommands
// : never
// }
// type ValuesOf<T> = T[keyof T];
// type KeysWithTypeOf<T, Type> = ({[P in keyof T]: T[P] extends Type ? P : never })[keyof T]
// type AllCommands = UnionToIntersection<ValuesOf<Pick<UnfilteredCommands, KeysWithTypeOf<UnfilteredCommands, {}>>>>
// export type SingleCommands = {
// [Item in keyof AllCommands]: AllCommands[Item] extends (...args: any[]) => any
// ? (...args: Parameters<AllCommands[Item]>) => boolean
// : never
// }
// export type ChainedCommands = {
// [Item in keyof AllCommands]: AllCommands[Item] extends (...args: any[]) => any
// ? (...args: Parameters<AllCommands[Item]>) => ChainedCommands
// : never
// } & {
// run: () => boolean
// }
type EditorContent = string | JSON | null type EditorContent = string | JSON | null
interface HTMLElement { interface HTMLElement {

View File

@@ -147,8 +147,10 @@ export const Commands = Extension.create({
}, },
}) })
declare module '@tiptap/core' { declare global {
namespace Tiptap {
interface AllExtensions { interface AllExtensions {
Commands: typeof Commands, Commands: typeof Commands,
} }
}
} }

View File

@@ -14,8 +14,10 @@ export const Editable = Extension.create({
}, },
}) })
declare module '@tiptap/core' { declare global {
namespace Tiptap {
interface AllExtensions { interface AllExtensions {
Editable: typeof Editable, Editable: typeof Editable,
} }
}
} }

View File

@@ -36,8 +36,10 @@ export const FocusEvents = Extension.create({
}, },
}) })
declare module '@tiptap/core' { declare global {
namespace Tiptap {
interface AllExtensions { interface AllExtensions {
FocusEvents: typeof FocusEvents, FocusEvents: typeof FocusEvents,
} }
}
} }

View File

@@ -45,8 +45,10 @@ export const Keymap = Extension.create({
}, },
}) })
declare module '@tiptap/core' { declare global {
namespace Tiptap {
interface AllExtensions { interface AllExtensions {
Keymap: typeof Keymap, Keymap: typeof Keymap,
} }
}
} }

View File

@@ -2,7 +2,6 @@ export {
Editor, Editor,
Command, Command,
CommandsSpec, CommandsSpec,
AllExtensions,
} from './Editor' } from './Editor'
export * from './Extension' export * from './Extension'

View File

@@ -58,8 +58,10 @@ const Blockquote = Node.create({
export default Blockquote export default Blockquote
declare module '@tiptap/core' { declare global {
namespace Tiptap {
interface AllExtensions { interface AllExtensions {
Blockquote: typeof Blockquote, Blockquote: typeof Blockquote,
} }
}
} }

View File

@@ -74,8 +74,10 @@ const Bold = Mark.create({
export default Bold export default Bold
declare module '@tiptap/core' { declare global {
namespace Tiptap {
interface AllExtensions { interface AllExtensions {
Bold: typeof Bold, Bold: typeof Bold,
} }
}
} }

View File

@@ -56,8 +56,10 @@ const BulletList = Node.create({
export default BulletList export default BulletList
declare module '@tiptap/core' { declare global {
namespace Tiptap {
interface AllExtensions { interface AllExtensions {
BulletList: typeof BulletList, BulletList: typeof BulletList,
} }
}
} }

View File

@@ -99,8 +99,10 @@ const CodeBlock = Node.create({
export default CodeBlock export default CodeBlock
declare module '@tiptap/core' { declare global {
namespace Tiptap {
interface AllExtensions { interface AllExtensions {
CodeBlock: typeof CodeBlock, CodeBlock: typeof CodeBlock,
} }
}
} }

View File

@@ -65,8 +65,10 @@ const Code = Mark.create({
export default Code export default Code
declare module '@tiptap/core' { declare global {
namespace Tiptap {
interface AllExtensions { interface AllExtensions {
Code: typeof Code, Code: typeof Code,
} }
}
} }

View File

@@ -64,8 +64,10 @@ const CollaborationCursor = Extension.create({
export default CollaborationCursor export default CollaborationCursor
declare module '@tiptap/core' { declare global {
namespace Tiptap {
interface AllExtensions { interface AllExtensions {
CollaborationCursor: typeof CollaborationCursor, CollaborationCursor: typeof CollaborationCursor,
} }
}
} }

View File

@@ -32,8 +32,10 @@ const Collaboration = Extension.create({
export default Collaboration export default Collaboration
declare module '@tiptap/core' { declare global {
namespace Tiptap {
interface AllExtensions { interface AllExtensions {
Collaboration: typeof Collaboration, Collaboration: typeof Collaboration,
} }
}
} }

View File

@@ -8,8 +8,10 @@ const Document = Node.create({
export default Document export default Document
declare module '@tiptap/core' { declare global {
namespace Tiptap {
interface AllExtensions { interface AllExtensions {
Document: typeof Document, Document: typeof Document,
} }
}
} }

View File

@@ -11,8 +11,10 @@ const Dropcursor = Extension.create({
export default Dropcursor export default Dropcursor
declare module '@tiptap/core' { declare global {
namespace Tiptap {
interface AllExtensions { interface AllExtensions {
Dropcursor: typeof Dropcursor, Dropcursor: typeof Dropcursor,
} }
}
} }

View File

@@ -50,8 +50,10 @@ const FocusClasses = Extension.create({
export default FocusClasses export default FocusClasses
declare module '@tiptap/core' { declare global {
namespace Tiptap {
interface AllExtensions { interface AllExtensions {
FocusClasses: typeof FocusClasses, FocusClasses: typeof FocusClasses,
} }
}
} }

View File

@@ -52,8 +52,10 @@ const FontFamily = Extension.create({
export default FontFamily export default FontFamily
declare module '@tiptap/core' { declare global {
namespace Tiptap {
interface AllExtensions { interface AllExtensions {
FontFamily: typeof FontFamily, FontFamily: typeof FontFamily,
} }
}
} }

View File

@@ -11,8 +11,10 @@ const Gapcursor = Extension.create({
export default Gapcursor export default Gapcursor
declare module '@tiptap/core' { declare global {
namespace Tiptap {
interface AllExtensions { interface AllExtensions {
Gapcursor: typeof Gapcursor, Gapcursor: typeof Gapcursor,
} }
}
} }

View File

@@ -50,8 +50,10 @@ const HardBreak = Node.create({
export default HardBreak export default HardBreak
declare module '@tiptap/core' { declare global {
namespace Tiptap {
interface AllExtensions { interface AllExtensions {
HardBreak: typeof HardBreak, HardBreak: typeof HardBreak,
} }
}
} }

View File

@@ -83,8 +83,10 @@ const Heading = Node.create({
export default Heading export default Heading
declare module '@tiptap/core' { declare global {
namespace Tiptap {
interface AllExtensions { interface AllExtensions {
Heading: typeof Heading, Heading: typeof Heading,
} }
}
} }

View File

@@ -88,8 +88,10 @@ const Highlight = Mark.create({
export default Highlight export default Highlight
declare module '@tiptap/core' { declare global {
namespace Tiptap {
interface AllExtensions { interface AllExtensions {
Highlight: typeof Highlight, Highlight: typeof Highlight,
} }
}
} }

View File

@@ -46,8 +46,10 @@ const History = Extension.create({
export default History export default History
declare module '@tiptap/core' { declare global {
namespace Tiptap {
interface AllExtensions { interface AllExtensions {
History: typeof History, History: typeof History,
} }
}
} }

View File

@@ -47,8 +47,10 @@ const HorizontalRule = Node.create({
export default HorizontalRule export default HorizontalRule
declare module '@tiptap/core' { declare global {
namespace Tiptap {
interface AllExtensions { interface AllExtensions {
HorizontalRule: typeof HorizontalRule, HorizontalRule: typeof HorizontalRule,
} }
}
} }

View File

@@ -82,8 +82,10 @@ const Image = Node.create({
export default Image export default Image
declare module '@tiptap/core' { declare global {
namespace Tiptap {
interface AllExtensions { interface AllExtensions {
Image: typeof Image, Image: typeof Image,
} }
}
} }

View File

@@ -76,8 +76,10 @@ const Italic = Mark.create({
export default Italic export default Italic
declare module '@tiptap/core' { declare global {
namespace Tiptap {
interface AllExtensions { interface AllExtensions {
Italic: typeof Italic, Italic: typeof Italic,
} }
}
} }

View File

@@ -93,8 +93,10 @@ const Link = Mark.create({
export default Link export default Link
declare module '@tiptap/core' { declare global {
namespace Tiptap {
interface AllExtensions { interface AllExtensions {
Link: typeof Link, Link: typeof Link,
} }
}
} }

View File

@@ -40,8 +40,10 @@ const ListItem = Node.create({
export default ListItem export default ListItem
declare module '@tiptap/core' { declare global {
namespace Tiptap {
interface AllExtensions { interface AllExtensions {
ListItem: typeof ListItem, ListItem: typeof ListItem,
} }
}
} }

View File

@@ -80,8 +80,10 @@ const OrderedList = Node.create({
export default OrderedList export default OrderedList
declare module '@tiptap/core' { declare global {
namespace Tiptap {
interface AllExtensions { interface AllExtensions {
OrderedList: typeof OrderedList, OrderedList: typeof OrderedList,
} }
}
} }

View File

@@ -47,8 +47,10 @@ const Paragraph = Node.create({
export default Paragraph export default Paragraph
declare module '@tiptap/core' { declare global {
namespace Tiptap {
interface AllExtensions { interface AllExtensions {
Paragraph: typeof Paragraph, Paragraph: typeof Paragraph,
} }
}
} }

View File

@@ -74,8 +74,10 @@ const Strike = Mark.create({
export default Strike export default Strike
declare module '@tiptap/core' { declare global {
namespace Tiptap {
interface AllExtensions { interface AllExtensions {
Strike: typeof Strike, Strike: typeof Strike,
} }
}
} }

View File

@@ -125,8 +125,10 @@ const TaskItem = Node.create({
export default TaskItem export default TaskItem
declare module '@tiptap/core' { declare global {
namespace Tiptap {
interface AllExtensions { interface AllExtensions {
TaskItem: typeof TaskItem, TaskItem: typeof TaskItem,
} }
}
} }

View File

@@ -44,8 +44,10 @@ const TaskList = Node.create({
export default TaskList export default TaskList
declare module '@tiptap/core' { declare global {
namespace Tiptap {
interface AllExtensions { interface AllExtensions {
TaskList: typeof TaskList, TaskList: typeof TaskList,
} }
}
} }

View File

@@ -65,8 +65,10 @@ const TextAlign = Extension.create({
export default TextAlign export default TextAlign
declare module '@tiptap/core' { declare global {
namespace Tiptap {
interface AllExtensions { interface AllExtensions {
TextAlign: typeof TextAlign, TextAlign: typeof TextAlign,
} }
}
} }

View File

@@ -46,8 +46,10 @@ const TextStyle = Mark.create({
export default TextStyle export default TextStyle
declare module '@tiptap/core' { declare global {
namespace Tiptap {
interface AllExtensions { interface AllExtensions {
TextStyle: typeof TextStyle, TextStyle: typeof TextStyle,
} }
}
} }

View File

@@ -7,8 +7,10 @@ const Text = Node.create({
export default Text export default Text
declare module '@tiptap/core' { declare global {
namespace Tiptap {
interface AllExtensions { interface AllExtensions {
Text: typeof Text, Text: typeof Text,
} }
}
} }

View File

@@ -45,8 +45,10 @@ const Typography = Extension.create({
export default Typography export default Typography
declare module '@tiptap/core' { declare global {
namespace Tiptap {
interface AllExtensions { interface AllExtensions {
Typography: typeof Typography, Typography: typeof Typography,
} }
}
} }

View File

@@ -45,8 +45,10 @@ const Underline = Mark.create({
export default Underline export default Underline
declare module '@tiptap/core' { declare global {
namespace Tiptap {
interface AllExtensions { interface AllExtensions {
Underline: typeof Underline, Underline: typeof Underline,
} }
}
} }