Skip to content

Commit e79e0fe

Browse files
committed
refactor: use type defs to declare defaultBlocks properties for perf of the TS compiler
1 parent e905344 commit e79e0fe

File tree

1 file changed

+111
-24
lines changed

1 file changed

+111
-24
lines changed

packages/core/src/blocks/defaultBlocks.ts

Lines changed: 111 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
import type { Mark } from "@tiptap/core";
12
import Bold from "@tiptap/extension-bold";
23
import Code from "@tiptap/extension-code";
34
import Italic from "@tiptap/extension-italic";
@@ -7,17 +8,22 @@ import { COLORS_DEFAULT } from "../editor/defaultColors.js";
78
import {
89
BlockNoDefaults,
910
BlockSchema,
11+
BlockSpec,
12+
createStyleSpec,
13+
createStyleSpecFromTipTapMark,
14+
getInlineContentSchemaFromSpecs,
15+
getStyleSchemaFromSpecs,
1016
InlineContentSchema,
1117
InlineContentSpecs,
1218
PartialBlockNoDefaults,
1319
StyleSchema,
1420
StyleSpecs,
15-
createStyleSpec,
16-
createStyleSpecFromTipTapMark,
17-
getInlineContentSchemaFromSpecs,
18-
getStyleSchemaFromSpecs,
1921
} from "../schema/index.js";
2022
import {
23+
AudioBlockConfig,
24+
BulletListItemBlockConfig,
25+
CheckListItemBlockConfig,
26+
CodeBlockConfig,
2127
createAudioBlockSpec,
2228
createBulletListItemBlockSpec,
2329
createCheckListItemBlockSpec,
@@ -32,24 +38,90 @@ import {
3238
createToggleListItemBlockSpec,
3339
createVideoBlockSpec,
3440
defaultProps,
41+
DividerBlockConfig,
42+
FileBlockConfig,
43+
HeadingBlockConfig,
44+
ImageBlockConfig,
45+
NumberedListItemBlockConfig,
46+
ParagraphBlockConfig,
47+
QuoteBlockConfig,
48+
ToggleListItemBlockConfig,
49+
VideoBlockConfig,
3550
} from "./index.js";
36-
import { createTableBlockSpec } from "./Table/block.js";
51+
import { createTableBlockSpec, TableBlockConfig } from "./Table/block.js";
3752

3853
export const defaultBlockSpecs = {
39-
audio: createAudioBlockSpec(),
40-
bulletListItem: createBulletListItemBlockSpec(),
41-
checkListItem: createCheckListItemBlockSpec(),
42-
codeBlock: createCodeBlockSpec(),
43-
divider: createDividerBlockSpec(),
44-
file: createFileBlockSpec(),
45-
heading: createHeadingBlockSpec(),
46-
image: createImageBlockSpec(),
47-
numberedListItem: createNumberedListItemBlockSpec(),
48-
paragraph: createParagraphBlockSpec(),
49-
quote: createQuoteBlockSpec(),
50-
table: createTableBlockSpec(),
51-
toggleListItem: createToggleListItemBlockSpec(),
52-
video: createVideoBlockSpec(),
54+
// To speed up TS compilation, we re-use the type assertions to avoid TS needing to compare types all the time
55+
audio: createAudioBlockSpec() as BlockSpec<
56+
AudioBlockConfig["type"],
57+
AudioBlockConfig["propSchema"],
58+
AudioBlockConfig["content"]
59+
>,
60+
bulletListItem: createBulletListItemBlockSpec() as BlockSpec<
61+
BulletListItemBlockConfig["type"],
62+
BulletListItemBlockConfig["propSchema"],
63+
BulletListItemBlockConfig["content"]
64+
>,
65+
checkListItem: createCheckListItemBlockSpec() as BlockSpec<
66+
CheckListItemBlockConfig["type"],
67+
CheckListItemBlockConfig["propSchema"],
68+
CheckListItemBlockConfig["content"]
69+
>,
70+
codeBlock: createCodeBlockSpec() as BlockSpec<
71+
CodeBlockConfig["type"],
72+
CodeBlockConfig["propSchema"],
73+
CodeBlockConfig["content"]
74+
>,
75+
divider: createDividerBlockSpec() as BlockSpec<
76+
DividerBlockConfig["type"],
77+
DividerBlockConfig["propSchema"],
78+
DividerBlockConfig["content"]
79+
>,
80+
file: createFileBlockSpec() as BlockSpec<
81+
FileBlockConfig["type"],
82+
FileBlockConfig["propSchema"],
83+
FileBlockConfig["content"]
84+
>,
85+
heading: createHeadingBlockSpec() as BlockSpec<
86+
HeadingBlockConfig["type"],
87+
HeadingBlockConfig["propSchema"],
88+
HeadingBlockConfig["content"]
89+
>,
90+
image: createImageBlockSpec() as BlockSpec<
91+
ImageBlockConfig["type"],
92+
ImageBlockConfig["propSchema"],
93+
ImageBlockConfig["content"]
94+
>,
95+
numberedListItem: createNumberedListItemBlockSpec() as BlockSpec<
96+
NumberedListItemBlockConfig["type"],
97+
NumberedListItemBlockConfig["propSchema"],
98+
NumberedListItemBlockConfig["content"]
99+
>,
100+
paragraph: createParagraphBlockSpec() as BlockSpec<
101+
ParagraphBlockConfig["type"],
102+
ParagraphBlockConfig["propSchema"],
103+
ParagraphBlockConfig["content"]
104+
>,
105+
quote: createQuoteBlockSpec() as BlockSpec<
106+
QuoteBlockConfig["type"],
107+
QuoteBlockConfig["propSchema"],
108+
QuoteBlockConfig["content"]
109+
>,
110+
table: createTableBlockSpec() as BlockSpec<
111+
TableBlockConfig["type"],
112+
TableBlockConfig["propSchema"],
113+
TableBlockConfig["content"]
114+
>,
115+
toggleListItem: createToggleListItemBlockSpec() as BlockSpec<
116+
ToggleListItemBlockConfig["type"],
117+
ToggleListItemBlockConfig["propSchema"],
118+
ToggleListItemBlockConfig["content"]
119+
>,
120+
video: createVideoBlockSpec() as BlockSpec<
121+
VideoBlockConfig["type"],
122+
VideoBlockConfig["propSchema"],
123+
VideoBlockConfig["content"]
124+
>,
53125
} as const;
54126

55127
// underscore is used that in case a user overrides DefaultBlockSchema,
@@ -137,11 +209,26 @@ const BackgroundColor = createStyleSpec(
137209
);
138210

139211
export const defaultStyleSpecs = {
140-
bold: createStyleSpecFromTipTapMark(Bold, "boolean"),
141-
italic: createStyleSpecFromTipTapMark(Italic, "boolean"),
142-
underline: createStyleSpecFromTipTapMark(Underline, "boolean"),
143-
strike: createStyleSpecFromTipTapMark(Strike, "boolean"),
144-
code: createStyleSpecFromTipTapMark(Code, "boolean"),
212+
bold: createStyleSpecFromTipTapMark(
213+
Bold as Mark & { name: "bold" },
214+
"boolean",
215+
),
216+
italic: createStyleSpecFromTipTapMark(
217+
Italic as Mark & { name: "italic" },
218+
"boolean",
219+
),
220+
underline: createStyleSpecFromTipTapMark(
221+
Underline as Mark & { name: "underline" },
222+
"boolean",
223+
),
224+
strike: createStyleSpecFromTipTapMark(
225+
Strike as Mark & { name: "strike" },
226+
"boolean",
227+
),
228+
code: createStyleSpecFromTipTapMark(
229+
Code as Mark & { name: "code" },
230+
"boolean",
231+
),
145232
textColor: TextColor,
146233
backgroundColor: BackgroundColor,
147234
} satisfies StyleSpecs;

0 commit comments

Comments
 (0)