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/comma-dangle': ['error', 'always-multiline'],
'@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 {
SingleCommands,
ChainedCommands,
Editor,
CommandSpec,
} from './Editor'
@ -58,7 +56,7 @@ export default class CommandManager {
}
return [name, method]
})) as SingleCommands
})) as Tiptap.SingleCommands
}
public createChain(startTr?: Transaction, shouldDispatch = true) {
@ -92,7 +90,7 @@ export default class CommandManager {
return proxy
}
},
}) as ChainedCommands
}) as Tiptap.ChainedCommands
}
public createCan(startTr?: Transaction) {
@ -105,7 +103,7 @@ export default class CommandManager {
.entries(commands)
.map(([name, command]) => {
return [name, (...args: any[]) => command(...args)({ ...props, dispatch })]
})) as SingleCommands
})) as Tiptap.SingleCommands
return {
...formattedCommands,

View File

@ -24,9 +24,9 @@ import style from './style'
export type Command = (props: {
editor: Editor,
tr: Transaction,
commands: SingleCommands,
can: () => SingleCommands & { chain: () => ChainedCommands },
chain: () => ChainedCommands,
commands: Tiptap.SingleCommands,
can: () => Tiptap.SingleCommands & { chain: () => Tiptap.ChainedCommands },
chain: () => Tiptap.ChainedCommands,
state: EditorState,
view: EditorView,
dispatch: ((args?: any) => any) | undefined,
@ -38,35 +38,71 @@ export interface CommandsSpec {
[key: string]: CommandSpec
}
export interface AllExtensions {}
declare global {
namespace Tiptap {
export interface AllExtensions {}
export type UnfilteredCommands = {
[Item in keyof 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
export type UnfilteredCommands = {
[Item in keyof 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 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, {}>>>>
// type blub = Tiptap.AllExtensions
export type SingleCommands = {
[Item in keyof AllCommands]: AllCommands[Item] extends (...args: any[]) => any
? (...args: Parameters<AllCommands[Item]>) => boolean
: never
}
// export interface AllExtensions {}
export type ChainedCommands = {
[Item in keyof AllCommands]: AllCommands[Item] extends (...args: any[]) => any
? (...args: Parameters<AllCommands[Item]>) => ChainedCommands
: never
} & {
run: () => boolean
}
// 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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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