@gravity-ui/markdown-editor 15.1.0 → 15.2.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/build/cjs/bundle/Editor.d.ts +3 -0
- package/build/cjs/bundle/Editor.js +21 -2
- package/build/cjs/bundle/Editor.js.map +1 -1
- package/build/cjs/bundle/MarkdownEditorView.js +2 -1
- package/build/cjs/bundle/MarkdownEditorView.js.map +1 -1
- package/build/cjs/bundle/MarkupEditorView.js +6 -1
- package/build/cjs/bundle/MarkupEditorView.js.map +1 -1
- package/build/cjs/bundle/MarkupManager.d.ts +3 -6
- package/build/cjs/bundle/MarkupManager.js +5 -5
- package/build/cjs/bundle/MarkupManager.js.map +1 -1
- package/build/cjs/bundle/WysiwygEditorView.js +6 -1
- package/build/cjs/bundle/WysiwygEditorView.js.map +1 -1
- package/build/cjs/bundle/types.d.ts +2 -0
- package/build/cjs/bundle/types.js.map +1 -1
- package/build/cjs/bundle/useMarkdownEditor.js +4 -2
- package/build/cjs/bundle/useMarkdownEditor.js.map +1 -1
- package/build/cjs/core/Editor.d.ts +3 -1
- package/build/cjs/core/Editor.js +6 -3
- package/build/cjs/core/Editor.js.map +1 -1
- package/build/cjs/core/ExtensionBuilder.d.ts +3 -1
- package/build/cjs/core/ExtensionBuilder.js +6 -1
- package/build/cjs/core/ExtensionBuilder.js.map +1 -1
- package/build/cjs/core/ExtensionsManager.d.ts +4 -2
- package/build/cjs/core/ExtensionsManager.js +6 -5
- package/build/cjs/core/ExtensionsManager.js.map +1 -1
- package/build/cjs/core/ParserTokensRegistry.d.ts +6 -0
- package/build/cjs/core/ParserTokensRegistry.js +9 -1
- package/build/cjs/core/ParserTokensRegistry.js.map +1 -1
- package/build/cjs/core/index.d.ts +1 -0
- package/build/cjs/core/index.js +3 -1
- package/build/cjs/core/index.js.map +1 -1
- package/build/cjs/core/markdown/MarkdownParser.d.ts +9 -1
- package/build/cjs/core/markdown/MarkdownParser.js +7 -3
- package/build/cjs/core/markdown/MarkdownParser.js.map +1 -1
- package/build/cjs/core/utils/logger.d.ts +3 -0
- package/build/cjs/core/utils/logger.js +12 -0
- package/build/cjs/core/utils/logger.js.map +1 -0
- package/build/cjs/core/utils/metrics.d.ts +2 -1
- package/build/cjs/core/utils/metrics.js +8 -2
- package/build/cjs/core/utils/metrics.js.map +1 -1
- package/build/cjs/extensions/additional/YfmHtmlBlock/utils.d.ts +1 -1
- package/build/cjs/extensions/additional/YfmHtmlBlock/utils.js +2 -2
- package/build/cjs/extensions/additional/YfmHtmlBlock/utils.js.map +1 -1
- package/build/cjs/extensions/behavior/Autocomplete/handler.d.ts +3 -1
- package/build/cjs/extensions/behavior/Autocomplete/handler.js +16 -10
- package/build/cjs/extensions/behavior/Autocomplete/handler.js.map +1 -1
- package/build/cjs/extensions/behavior/Autocomplete/index.js +1 -1
- package/build/cjs/extensions/behavior/Autocomplete/index.js.map +1 -1
- package/build/cjs/extensions/behavior/Clipboard/clipboard.d.ts +3 -1
- package/build/cjs/extensions/behavior/Clipboard/clipboard.js +31 -3
- package/build/cjs/extensions/behavior/Clipboard/clipboard.js.map +1 -1
- package/build/cjs/extensions/behavior/Clipboard/index.js +4 -0
- package/build/cjs/extensions/behavior/Clipboard/index.js.map +1 -1
- package/build/cjs/extensions/behavior/CommandMenu/handler.d.ts +3 -1
- package/build/cjs/extensions/behavior/CommandMenu/handler.js +6 -3
- package/build/cjs/extensions/behavior/CommandMenu/handler.js.map +1 -1
- package/build/cjs/extensions/behavior/CommandMenu/index.js +5 -3
- package/build/cjs/extensions/behavior/CommandMenu/index.js.map +1 -1
- package/build/cjs/extensions/behavior/EditorModeKeymap/index.js +13 -2
- package/build/cjs/extensions/behavior/EditorModeKeymap/index.js.map +1 -1
- package/build/cjs/extensions/behavior/FilePaste/index.d.ts +1 -1
- package/build/cjs/extensions/behavior/FilePaste/index.js +12 -0
- package/build/cjs/extensions/behavior/FilePaste/index.js.map +1 -1
- package/build/cjs/extensions/behavior/SelectionContext/index.js +3 -3
- package/build/cjs/extensions/behavior/SelectionContext/index.js.map +1 -1
- package/build/cjs/extensions/behavior/SelectionContext/tooltip.d.ts +3 -1
- package/build/cjs/extensions/behavior/SelectionContext/tooltip.js +7 -2
- package/build/cjs/extensions/behavior/SelectionContext/tooltip.js.map +1 -1
- package/build/cjs/extensions/behavior/utils/upload.d.ts +2 -0
- package/build/cjs/extensions/behavior/utils/upload.js +3 -0
- package/build/cjs/extensions/behavior/utils/upload.js.map +1 -1
- package/build/cjs/extensions/markdown/Breaks/index.js +2 -1
- package/build/cjs/extensions/markdown/Breaks/index.js.map +1 -1
- package/build/cjs/extensions/markdown/CodeBlock/CodeBlockHighlight/CodeBlockHighlight.js +2 -1
- package/build/cjs/extensions/markdown/CodeBlock/CodeBlockHighlight/CodeBlockHighlight.js.map +1 -1
- package/build/cjs/extensions/markdown/Deflist/DeflistSpecs/index.js +2 -2
- package/build/cjs/extensions/markdown/Deflist/DeflistSpecs/index.js.map +1 -1
- package/build/cjs/extensions/markdown/Html/index.js +2 -1
- package/build/cjs/extensions/markdown/Html/index.js.map +1 -1
- package/build/cjs/extensions/markdown/Html/schema.js +2 -2
- package/build/cjs/extensions/markdown/Html/schema.js.map +1 -1
- package/build/cjs/extensions/markdown/Link/paste-plugin.d.ts +1 -1
- package/build/cjs/extensions/markdown/Link/paste-plugin.js +11 -0
- package/build/cjs/extensions/markdown/Link/paste-plugin.js.map +1 -1
- package/build/cjs/extensions/markdown/Superscript/SuperscriptSpecs/index.js +3 -3
- package/build/cjs/extensions/markdown/Superscript/SuperscriptSpecs/index.js.map +1 -1
- package/build/cjs/extensions/yfm/Checkbox/CheckboxSpecs/index.js +2 -2
- package/build/cjs/extensions/yfm/Checkbox/CheckboxSpecs/index.js.map +1 -1
- package/build/cjs/extensions/yfm/Emoji/EmojiSpecs/EmojiSpecs.js +2 -2
- package/build/cjs/extensions/yfm/Emoji/EmojiSpecs/EmojiSpecs.js.map +1 -1
- package/build/cjs/extensions/yfm/ImgSize/ImagePaste/index.d.ts +1 -1
- package/build/cjs/extensions/yfm/ImgSize/ImagePaste/index.js +14 -0
- package/build/cjs/extensions/yfm/ImgSize/ImagePaste/index.js.map +1 -1
- package/build/cjs/extensions/yfm/ImgSize/ImagePaste/upload.js +6 -5
- package/build/cjs/extensions/yfm/ImgSize/ImagePaste/upload.js.map +1 -1
- package/build/cjs/extensions/yfm/ImgSize/ImgSizeSpecs/const.d.ts +1 -1
- package/build/cjs/extensions/yfm/ImgSize/ImgSizeSpecs/const.js +6 -6
- package/build/cjs/extensions/yfm/ImgSize/ImgSizeSpecs/const.js.map +1 -1
- package/build/cjs/extensions/yfm/ImgSize/ImgSizeSpecs/index.js +3 -3
- package/build/cjs/extensions/yfm/ImgSize/ImgSizeSpecs/index.js.map +1 -1
- package/build/cjs/extensions/yfm/ImgSize/utils.d.ts +2 -1
- package/build/cjs/extensions/yfm/ImgSize/utils.js +3 -2
- package/build/cjs/extensions/yfm/ImgSize/utils.js.map +1 -1
- package/build/cjs/extensions/yfm/Monospace/MonospaceSpecs/index.js +3 -3
- package/build/cjs/extensions/yfm/Monospace/MonospaceSpecs/index.js.map +1 -1
- package/build/cjs/extensions/yfm/Video/VideoSpecs/index.js +2 -2
- package/build/cjs/extensions/yfm/Video/VideoSpecs/index.js.map +1 -1
- package/build/cjs/extensions/yfm/Video/VideoSpecs/md-video.d.ts +4 -4
- package/build/cjs/extensions/yfm/Video/VideoSpecs/md-video.js +7 -7
- package/build/cjs/extensions/yfm/Video/VideoSpecs/md-video.js.map +1 -1
- package/build/cjs/extensions/yfm/YfmConfigs/index.d.ts +2 -2
- package/build/cjs/extensions/yfm/YfmConfigs/index.js +2 -2
- package/build/cjs/extensions/yfm/YfmConfigs/index.js.map +1 -1
- package/build/cjs/extensions/yfm/YfmFile/YfmFilePaste/index.d.ts +1 -1
- package/build/cjs/extensions/yfm/YfmFile/YfmFilePaste/index.js +15 -1
- package/build/cjs/extensions/yfm/YfmFile/YfmFilePaste/index.js.map +1 -1
- package/build/cjs/extensions/yfm/YfmNote/YfmNoteSpecs/index.js +3 -3
- package/build/cjs/extensions/yfm/YfmNote/YfmNoteSpecs/index.js.map +1 -1
- package/build/cjs/extensions/yfm/YfmTable/YfmTableSpecs/index.js +3 -3
- package/build/cjs/extensions/yfm/YfmTable/YfmTableSpecs/index.js.map +1 -1
- package/build/cjs/extensions/yfm/YfmTabs/actions.js +4 -4
- package/build/cjs/extensions/yfm/YfmTabs/actions.js.map +1 -1
- package/build/cjs/extensions/yfm/YfmTabs/plugins.js +11 -11
- package/build/cjs/extensions/yfm/YfmTabs/plugins.js.map +1 -1
- package/build/cjs/i18n/yfm-note/index.d.ts +1 -1
- package/build/cjs/logger.d.ts +75 -0
- package/build/cjs/logger.js +89 -1
- package/build/cjs/logger.js.map +1 -1
- package/build/cjs/markdown-it/emoji.d.ts +2 -2
- package/build/cjs/markdown-it/emoji.js +4 -4
- package/build/cjs/markdown-it/emoji.js.map +1 -1
- package/build/cjs/markup/codemirror/create.d.ts +2 -0
- package/build/cjs/markup/codemirror/create.js +15 -4
- package/build/cjs/markup/codemirror/create.js.map +1 -1
- package/build/cjs/markup/codemirror/files-upload-plugin/plugin.js +13 -0
- package/build/cjs/markup/codemirror/files-upload-plugin/plugin.js.map +1 -1
- package/build/cjs/markup/codemirror/logger-facet.d.ts +3 -0
- package/build/cjs/markup/codemirror/logger-facet.js +9 -0
- package/build/cjs/markup/codemirror/logger-facet.js.map +1 -0
- package/build/cjs/utils/event-emitter.d.ts +1 -0
- package/build/cjs/utils/event-emitter.js +3 -0
- package/build/cjs/utils/event-emitter.js.map +1 -1
- package/build/cjs/utils/facet.d.ts +1 -0
- package/build/cjs/utils/facet.js +33 -0
- package/build/cjs/utils/facet.js.map +1 -0
- package/build/cjs/utils/keymap.js +7 -2
- package/build/cjs/utils/keymap.js.map +1 -1
- package/build/cjs/version.js +1 -1
- package/build/cjs/version.js.map +1 -1
- package/build/esm/bundle/Editor.d.ts +3 -0
- package/build/esm/bundle/Editor.js +22 -3
- package/build/esm/bundle/Editor.js.map +1 -1
- package/build/esm/bundle/MarkdownEditorView.js +3 -2
- package/build/esm/bundle/MarkdownEditorView.js.map +1 -1
- package/build/esm/bundle/MarkupEditorView.js +7 -2
- package/build/esm/bundle/MarkupEditorView.js.map +1 -1
- package/build/esm/bundle/MarkupManager.d.ts +3 -6
- package/build/esm/bundle/MarkupManager.js +5 -5
- package/build/esm/bundle/MarkupManager.js.map +1 -1
- package/build/esm/bundle/WysiwygEditorView.js +7 -2
- package/build/esm/bundle/WysiwygEditorView.js.map +1 -1
- package/build/esm/bundle/types.d.ts +2 -0
- package/build/esm/bundle/types.js.map +1 -1
- package/build/esm/bundle/useMarkdownEditor.js +5 -3
- package/build/esm/bundle/useMarkdownEditor.js.map +1 -1
- package/build/esm/core/Editor.d.ts +3 -1
- package/build/esm/core/Editor.js +6 -3
- package/build/esm/core/Editor.js.map +1 -1
- package/build/esm/core/ExtensionBuilder.d.ts +3 -1
- package/build/esm/core/ExtensionBuilder.js +6 -1
- package/build/esm/core/ExtensionBuilder.js.map +1 -1
- package/build/esm/core/ExtensionsManager.d.ts +4 -2
- package/build/esm/core/ExtensionsManager.js +6 -5
- package/build/esm/core/ExtensionsManager.js.map +1 -1
- package/build/esm/core/ParserTokensRegistry.d.ts +6 -0
- package/build/esm/core/ParserTokensRegistry.js +9 -1
- package/build/esm/core/ParserTokensRegistry.js.map +1 -1
- package/build/esm/core/index.d.ts +1 -0
- package/build/esm/core/index.js +1 -0
- package/build/esm/core/index.js.map +1 -1
- package/build/esm/core/markdown/MarkdownParser.d.ts +9 -1
- package/build/esm/core/markdown/MarkdownParser.js +7 -3
- package/build/esm/core/markdown/MarkdownParser.js.map +1 -1
- package/build/esm/core/utils/logger.d.ts +3 -0
- package/build/esm/core/utils/logger.js +8 -0
- package/build/esm/core/utils/logger.js.map +1 -0
- package/build/esm/core/utils/metrics.d.ts +2 -1
- package/build/esm/core/utils/metrics.js +8 -2
- package/build/esm/core/utils/metrics.js.map +1 -1
- package/build/esm/extensions/additional/YfmHtmlBlock/utils.d.ts +1 -1
- package/build/esm/extensions/additional/YfmHtmlBlock/utils.js +1 -1
- package/build/esm/extensions/additional/YfmHtmlBlock/utils.js.map +1 -1
- package/build/esm/extensions/behavior/Autocomplete/handler.d.ts +3 -1
- package/build/esm/extensions/behavior/Autocomplete/handler.js +15 -9
- package/build/esm/extensions/behavior/Autocomplete/handler.js.map +1 -1
- package/build/esm/extensions/behavior/Autocomplete/index.js +1 -1
- package/build/esm/extensions/behavior/Autocomplete/index.js.map +1 -1
- package/build/esm/extensions/behavior/Clipboard/clipboard.d.ts +3 -1
- package/build/esm/extensions/behavior/Clipboard/clipboard.js +32 -4
- package/build/esm/extensions/behavior/Clipboard/clipboard.js.map +1 -1
- package/build/esm/extensions/behavior/Clipboard/index.js +4 -0
- package/build/esm/extensions/behavior/Clipboard/index.js.map +1 -1
- package/build/esm/extensions/behavior/CommandMenu/handler.d.ts +3 -1
- package/build/esm/extensions/behavior/CommandMenu/handler.js +7 -4
- package/build/esm/extensions/behavior/CommandMenu/handler.js.map +1 -1
- package/build/esm/extensions/behavior/CommandMenu/index.js +6 -4
- package/build/esm/extensions/behavior/CommandMenu/index.js.map +1 -1
- package/build/esm/extensions/behavior/EditorModeKeymap/index.js +13 -2
- package/build/esm/extensions/behavior/EditorModeKeymap/index.js.map +1 -1
- package/build/esm/extensions/behavior/FilePaste/index.d.ts +1 -1
- package/build/esm/extensions/behavior/FilePaste/index.js +12 -0
- package/build/esm/extensions/behavior/FilePaste/index.js.map +1 -1
- package/build/esm/extensions/behavior/SelectionContext/index.js +3 -3
- package/build/esm/extensions/behavior/SelectionContext/index.js.map +1 -1
- package/build/esm/extensions/behavior/SelectionContext/tooltip.d.ts +3 -1
- package/build/esm/extensions/behavior/SelectionContext/tooltip.js +8 -3
- package/build/esm/extensions/behavior/SelectionContext/tooltip.js.map +1 -1
- package/build/esm/extensions/behavior/utils/upload.d.ts +2 -0
- package/build/esm/extensions/behavior/utils/upload.js +3 -0
- package/build/esm/extensions/behavior/utils/upload.js.map +1 -1
- package/build/esm/extensions/markdown/Breaks/index.js +3 -2
- package/build/esm/extensions/markdown/Breaks/index.js.map +1 -1
- package/build/esm/extensions/markdown/CodeBlock/CodeBlockHighlight/CodeBlockHighlight.js +3 -2
- package/build/esm/extensions/markdown/CodeBlock/CodeBlockHighlight/CodeBlockHighlight.js.map +1 -1
- package/build/esm/extensions/markdown/Deflist/DeflistSpecs/index.js +1 -1
- package/build/esm/extensions/markdown/Deflist/DeflistSpecs/index.js.map +1 -1
- package/build/esm/extensions/markdown/Html/index.js +3 -2
- package/build/esm/extensions/markdown/Html/index.js.map +1 -1
- package/build/esm/extensions/markdown/Html/schema.js +1 -1
- package/build/esm/extensions/markdown/Html/schema.js.map +1 -1
- package/build/esm/extensions/markdown/Link/paste-plugin.d.ts +1 -1
- package/build/esm/extensions/markdown/Link/paste-plugin.js +11 -0
- package/build/esm/extensions/markdown/Link/paste-plugin.js.map +1 -1
- package/build/esm/extensions/markdown/Superscript/SuperscriptSpecs/index.js +2 -2
- package/build/esm/extensions/markdown/Superscript/SuperscriptSpecs/index.js.map +1 -1
- package/build/esm/extensions/yfm/Checkbox/CheckboxSpecs/index.js +1 -1
- package/build/esm/extensions/yfm/Checkbox/CheckboxSpecs/index.js.map +1 -1
- package/build/esm/extensions/yfm/Emoji/EmojiSpecs/EmojiSpecs.js +1 -1
- package/build/esm/extensions/yfm/Emoji/EmojiSpecs/EmojiSpecs.js.map +1 -1
- package/build/esm/extensions/yfm/ImgSize/ImagePaste/index.d.ts +1 -1
- package/build/esm/extensions/yfm/ImgSize/ImagePaste/index.js +14 -0
- package/build/esm/extensions/yfm/ImgSize/ImagePaste/index.js.map +1 -1
- package/build/esm/extensions/yfm/ImgSize/ImagePaste/upload.js +7 -6
- package/build/esm/extensions/yfm/ImgSize/ImagePaste/upload.js.map +1 -1
- package/build/esm/extensions/yfm/ImgSize/ImgSizeSpecs/const.d.ts +1 -1
- package/build/esm/extensions/yfm/ImgSize/ImgSizeSpecs/const.js +1 -1
- package/build/esm/extensions/yfm/ImgSize/ImgSizeSpecs/const.js.map +1 -1
- package/build/esm/extensions/yfm/ImgSize/ImgSizeSpecs/index.js +2 -2
- package/build/esm/extensions/yfm/ImgSize/ImgSizeSpecs/index.js.map +1 -1
- package/build/esm/extensions/yfm/ImgSize/utils.d.ts +2 -1
- package/build/esm/extensions/yfm/ImgSize/utils.js +4 -3
- package/build/esm/extensions/yfm/ImgSize/utils.js.map +1 -1
- package/build/esm/extensions/yfm/Monospace/MonospaceSpecs/index.js +2 -2
- package/build/esm/extensions/yfm/Monospace/MonospaceSpecs/index.js.map +1 -1
- package/build/esm/extensions/yfm/Video/VideoSpecs/index.js +1 -1
- package/build/esm/extensions/yfm/Video/VideoSpecs/index.js.map +1 -1
- package/build/esm/extensions/yfm/Video/VideoSpecs/md-video.d.ts +4 -4
- package/build/esm/extensions/yfm/Video/VideoSpecs/md-video.js +3 -3
- package/build/esm/extensions/yfm/Video/VideoSpecs/md-video.js.map +1 -1
- package/build/esm/extensions/yfm/YfmConfigs/index.d.ts +2 -2
- package/build/esm/extensions/yfm/YfmConfigs/index.js +2 -2
- package/build/esm/extensions/yfm/YfmConfigs/index.js.map +1 -1
- package/build/esm/extensions/yfm/YfmFile/YfmFilePaste/index.d.ts +1 -1
- package/build/esm/extensions/yfm/YfmFile/YfmFilePaste/index.js +15 -1
- package/build/esm/extensions/yfm/YfmFile/YfmFilePaste/index.js.map +1 -1
- package/build/esm/extensions/yfm/YfmNote/YfmNoteSpecs/index.js +2 -2
- package/build/esm/extensions/yfm/YfmNote/YfmNoteSpecs/index.js.map +1 -1
- package/build/esm/extensions/yfm/YfmTable/YfmTableSpecs/index.js +2 -2
- package/build/esm/extensions/yfm/YfmTable/YfmTableSpecs/index.js.map +1 -1
- package/build/esm/extensions/yfm/YfmTabs/actions.js +1 -1
- package/build/esm/extensions/yfm/YfmTabs/actions.js.map +1 -1
- package/build/esm/extensions/yfm/YfmTabs/plugins.js +1 -1
- package/build/esm/extensions/yfm/YfmTabs/plugins.js.map +1 -1
- package/build/esm/i18n/yfm-note/index.d.ts +1 -1
- package/build/esm/logger.d.ts +75 -0
- package/build/esm/logger.js +87 -0
- package/build/esm/logger.js.map +1 -1
- package/build/esm/markdown-it/emoji.d.ts +2 -2
- package/build/esm/markdown-it/emoji.js +2 -2
- package/build/esm/markdown-it/emoji.js.map +1 -1
- package/build/esm/markup/codemirror/create.d.ts +2 -0
- package/build/esm/markup/codemirror/create.js +16 -5
- package/build/esm/markup/codemirror/create.js.map +1 -1
- package/build/esm/markup/codemirror/files-upload-plugin/plugin.js +13 -0
- package/build/esm/markup/codemirror/files-upload-plugin/plugin.js.map +1 -1
- package/build/esm/markup/codemirror/logger-facet.d.ts +3 -0
- package/build/esm/markup/codemirror/logger-facet.js +6 -0
- package/build/esm/markup/codemirror/logger-facet.js.map +1 -0
- package/build/esm/utils/event-emitter.d.ts +1 -0
- package/build/esm/utils/event-emitter.js +3 -0
- package/build/esm/utils/event-emitter.js.map +1 -1
- package/build/esm/utils/facet.d.ts +1 -0
- package/build/esm/utils/facet.js +29 -0
- package/build/esm/utils/facet.js.map +1 -0
- package/build/esm/utils/keymap.js +7 -2
- package/build/esm/utils/keymap.js.map +1 -1
- package/build/esm/version.js +1 -1
- package/build/esm/version.js.map +1 -1
- package/package.json +1 -1
|
@@ -10,7 +10,7 @@ const Editor_1 = require("./Editor.js");
|
|
|
10
10
|
const wysiwyg_preset_1 = require("./wysiwyg-preset.js");
|
|
11
11
|
function useMarkdownEditor(props, deps = []) {
|
|
12
12
|
const editor = (0, react_1.useMemo)(() => {
|
|
13
|
-
const { md = {}, initial = {}, handlers = {}, experimental = {}, markupConfig = {}, wysiwygConfig = {}, } = props;
|
|
13
|
+
const { md = {}, initial = {}, handlers = {}, experimental = {}, markupConfig = {}, wysiwygConfig = {}, logger = new logger_1.Logger2(), } = props;
|
|
14
14
|
const preset = props.preset ?? 'full';
|
|
15
15
|
const renderStorage = new extensions_1.ReactRenderStorage();
|
|
16
16
|
const pmTransformers = (0, getTransformers_1.getPMTransformers)({
|
|
@@ -48,6 +48,7 @@ function useMarkdownEditor(props, deps = []) {
|
|
|
48
48
|
};
|
|
49
49
|
return new Editor_1.EditorImpl({
|
|
50
50
|
...props,
|
|
51
|
+
logger,
|
|
51
52
|
preset,
|
|
52
53
|
renderStorage,
|
|
53
54
|
directiveSyntax,
|
|
@@ -65,7 +66,8 @@ function useMarkdownEditor(props, deps = []) {
|
|
|
65
66
|
}, deps);
|
|
66
67
|
(0, react_1.useLayoutEffect)(() => {
|
|
67
68
|
function onToolbarAction({ editorMode, id }) {
|
|
68
|
-
logger_1.
|
|
69
|
+
logger_1.globalLogger.action({ mode: editorMode, source: 'toolbar', action: id });
|
|
70
|
+
editor.logger.action({ mode: editorMode, source: 'toolbar', action: id });
|
|
69
71
|
}
|
|
70
72
|
editor.on('toolbar-action', onToolbarAction);
|
|
71
73
|
return () => {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useMarkdownEditor.js","sourceRoot":"../../../src","sources":["bundle/useMarkdownEditor.ts"],"names":[],"mappings":";;AAmBA,
|
|
1
|
+
{"version":3,"file":"useMarkdownEditor.js","sourceRoot":"../../../src","sources":["bundle/useMarkdownEditor.ts"],"names":[],"mappings":"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","sourcesContent":["import {useLayoutEffect, useMemo} from 'react';\n\nimport type {Extension} from '../core';\nimport {getPMTransformers} from '../core/markdown/ProseMirrorTransformer/getTransformers';\nimport {ReactRenderStorage} from '../extensions';\nimport {Logger2, globalLogger} from '../logger';\nimport {DirectiveSyntaxContext} from '../utils/directive';\n\nimport {EditorImpl, type EditorInt} from './Editor';\nimport type {\n MarkdownEditorInstance,\n MarkdownEditorMode,\n MarkdownEditorOptions,\n MarkdownEditorPreset,\n} from './types';\nimport {BundlePreset} from './wysiwyg-preset';\n\nexport type UseMarkdownEditorProps = MarkdownEditorOptions;\n\nexport function useMarkdownEditor(\n props: UseMarkdownEditorProps,\n deps: React.DependencyList = [],\n): MarkdownEditorInstance {\n const editor = useMemo<EditorInt>(() => {\n const {\n md = {},\n initial = {},\n handlers = {},\n experimental = {},\n markupConfig = {},\n wysiwygConfig = {},\n logger = new Logger2(),\n } = props;\n\n const preset: MarkdownEditorPreset = props.preset ?? 'full';\n const renderStorage = new ReactRenderStorage();\n\n const pmTransformers = getPMTransformers({\n emptyRowTransformer: experimental.preserveEmptyRows,\n });\n\n const directiveSyntax = new DirectiveSyntaxContext(experimental.directiveSyntax);\n\n const extensions: Extension = (builder) => {\n const extensionOptions = wysiwygConfig.extensionOptions;\n\n builder.use(BundlePreset, {\n ...extensionOptions,\n directiveSyntax,\n preset,\n reactRenderer: renderStorage,\n onCancel: () => {\n editor.emit('cancel', null);\n return true;\n },\n onSubmit: () => {\n editor.emit('submit', null);\n return true;\n },\n preserveEmptyRows: experimental.preserveEmptyRows,\n placeholderOptions: wysiwygConfig.placeholderOptions,\n mdBreaks: md.breaks,\n fileUploadHandler: handlers.uploadFile,\n needToSetDimensionsForUploadedImages:\n experimental.needToSetDimensionsForUploadedImages,\n enableNewImageSizeCalculation: experimental.enableNewImageSizeCalculation,\n });\n {\n const extraExtensions = wysiwygConfig.extensions;\n if (extraExtensions) {\n builder.use(extraExtensions, props.wysiwygConfig?.extensionOptions);\n }\n }\n };\n\n return new EditorImpl({\n ...props,\n logger,\n preset,\n renderStorage,\n directiveSyntax,\n pmTransformers,\n md,\n initial,\n handlers,\n experimental,\n markupConfig,\n wysiwygConfig: {\n ...wysiwygConfig,\n extensions,\n },\n });\n }, deps);\n\n useLayoutEffect(() => {\n function onToolbarAction({editorMode, id}: {editorMode: MarkdownEditorMode; id: string}) {\n globalLogger.action({mode: editorMode, source: 'toolbar', action: id});\n editor.logger.action({mode: editorMode, source: 'toolbar', action: id});\n }\n\n editor.on('toolbar-action', onToolbarAction);\n return () => {\n editor.off('toolbar-action', onToolbarAction);\n editor.destroy();\n };\n }, [editor]);\n return editor;\n}\n"]}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import type { PresetName } from 'markdown-it';
|
|
2
2
|
import type { CommonEditor, MarkupString } from "../common/index.js";
|
|
3
|
+
import { Logger2 } from "../logger.js";
|
|
3
4
|
import type { TransformFn } from "./markdown/ProseMirrorTransformer/index.js";
|
|
4
5
|
import type { ActionStorage } from "./types/actions.js";
|
|
5
6
|
import type { Extension } from "./types/extension.js";
|
|
@@ -26,6 +27,7 @@ export type WysiwygEditorOptions = {
|
|
|
26
27
|
onChange?: OnChange;
|
|
27
28
|
/** Call only if document change */
|
|
28
29
|
onDocChange?: OnChange;
|
|
30
|
+
logger?: Logger2.ILogger;
|
|
29
31
|
};
|
|
30
32
|
export declare class WysiwygEditor implements CommonEditor, ActionStorage {
|
|
31
33
|
#private;
|
|
@@ -33,7 +35,7 @@ export declare class WysiwygEditor implements CommonEditor, ActionStorage {
|
|
|
33
35
|
get serializer(): Serializer;
|
|
34
36
|
get parser(): Parser;
|
|
35
37
|
get actions(): WysiwygEditor.Actions;
|
|
36
|
-
constructor({ domElem, initialContent, extensions, allowHTML, mdPreset, linkify, pmTransformers, linkifyTlds, escapeConfig, onChange, onDocChange, modifiers, }: WysiwygEditorOptions);
|
|
38
|
+
constructor({ domElem, initialContent, extensions, allowHTML, mdPreset, linkify, pmTransformers, linkifyTlds, escapeConfig, onChange, onDocChange, modifiers, logger, }: WysiwygEditorOptions);
|
|
37
39
|
action<T extends keyof WysiwygEditor.Actions>(actionName: T): WysiwygEditor.Actions[T];
|
|
38
40
|
focus(): void;
|
|
39
41
|
hasFocus(): boolean;
|
package/build/cjs/core/Editor.js
CHANGED
|
@@ -3,6 +3,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
3
3
|
exports.WysiwygEditor = void 0;
|
|
4
4
|
const prosemirror_state_1 = require("prosemirror-state");
|
|
5
5
|
const prosemirror_view_1 = require("prosemirror-view");
|
|
6
|
+
const logger_1 = require("../logger.js");
|
|
6
7
|
const ContentHandler_1 = require("./ContentHandler.js");
|
|
7
8
|
const ExtensionsManager_1 = require("./ExtensionsManager.js");
|
|
8
9
|
const SchemaDynamicModifier_1 = require("./SchemaDynamicModifier.js");
|
|
@@ -10,6 +11,7 @@ const MarkdownParser_1 = require("./markdown/MarkdownParser.js");
|
|
|
10
11
|
const MarkdownSerializerDynamicModifier_1 = require("./markdown/MarkdownSerializerDynamicModifier.js");
|
|
11
12
|
const actions_1 = require("./utils/actions.js");
|
|
12
13
|
const dynamicModifiers_1 = require("./utils/dynamicModifiers.js");
|
|
14
|
+
const logger_2 = require("./utils/logger.js");
|
|
13
15
|
const metrics_1 = require("./utils/metrics.js");
|
|
14
16
|
class WysiwygEditor {
|
|
15
17
|
#view;
|
|
@@ -34,7 +36,7 @@ class WysiwygEditor {
|
|
|
34
36
|
get view() {
|
|
35
37
|
return this.#view;
|
|
36
38
|
}
|
|
37
|
-
constructor({ domElem, initialContent = '', extensions = () => { }, allowHTML, mdPreset, linkify, pmTransformers, linkifyTlds, escapeConfig, onChange, onDocChange, modifiers, }) {
|
|
39
|
+
constructor({ domElem, initialContent = '', extensions = () => { }, allowHTML, mdPreset, linkify, pmTransformers, linkifyTlds, escapeConfig, onChange, onDocChange, modifiers, logger = new logger_1.Logger2(), }) {
|
|
38
40
|
const dynamicModifiersConfig = modifiers
|
|
39
41
|
? (0, dynamicModifiers_1.convertDynamicModifiersConfigs)(modifiers)
|
|
40
42
|
: undefined;
|
|
@@ -51,7 +53,8 @@ class WysiwygEditor {
|
|
|
51
53
|
linkifyTlds,
|
|
52
54
|
pmTransformers,
|
|
53
55
|
dynamicModifiers,
|
|
54
|
-
});
|
|
56
|
+
}, logger);
|
|
57
|
+
plugins.unshift(logger_2.LoggerFacet.of(logger));
|
|
55
58
|
const state = prosemirror_state_1.EditorState.create({
|
|
56
59
|
schema,
|
|
57
60
|
doc: parser.parse(initialContent),
|
|
@@ -71,7 +74,7 @@ class WysiwygEditor {
|
|
|
71
74
|
if (tr.docChanged) {
|
|
72
75
|
thisOnDocChange();
|
|
73
76
|
}
|
|
74
|
-
(0, metrics_1.logTransactionMetrics)(tr);
|
|
77
|
+
(0, metrics_1.logTransactionMetrics)(tr, logger);
|
|
75
78
|
},
|
|
76
79
|
});
|
|
77
80
|
this.#actions = actions.setActions((0, actions_1.bindActions)(rawActions)(this.#view));
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Editor.js","sourceRoot":"../../../src","sources":["core/Editor.ts"],"names":[],"mappings":"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","sourcesContent":["import type {PresetName} from 'markdown-it';\nimport {EditorState} from 'prosemirror-state';\nimport {EditorView} from 'prosemirror-view';\n\nimport type {CommonEditor, ContentHandler, MarkupString} from '../common';\n\nimport type {ActionsManager} from './ActionsManager';\nimport {WysiwygContentHandler} from './ContentHandler';\nimport {ExtensionsManager} from './ExtensionsManager';\nimport {SchemaDynamicModifier} from './SchemaDynamicModifier';\nimport {MarkdownParserDynamicModifier} from './markdown/MarkdownParser';\nimport {MarkdownSerializerDynamicModifier} from './markdown/MarkdownSerializerDynamicModifier';\nimport type {TransformFn} from './markdown/ProseMirrorTransformer';\nimport type {ActionStorage} from './types/actions';\nimport type {DynamicModifiers} from './types/dynamicModifiers';\nimport type {Extension} from './types/extension';\nimport type {Parser} from './types/parser';\nimport type {Serializer} from './types/serializer';\nimport {bindActions} from './utils/actions';\nimport {convertDynamicModifiersConfigs} from './utils/dynamicModifiers';\nimport {logTransactionMetrics} from './utils/metrics';\n\ntype OnChange = (editor: WysiwygEditor) => void;\n\nexport type EscapeConfig = {\n commonEscape?: RegExp;\n startOfLineEscape?: RegExp;\n};\n\nexport type WysiwygEditorOptions = {\n domElem?: Element;\n /** markdown markup */\n initialContent?: string;\n extensions?: Extension;\n /** @default 'default' */\n mdPreset?: PresetName;\n allowHTML?: boolean;\n linkify?: boolean;\n pmTransformers?: TransformFn[];\n linkifyTlds?: string | string[];\n escapeConfig?: EscapeConfig;\n /** Call on any state change (move cursor, change selection, etc...) */\n onChange?: OnChange;\n /** Call only if document change */\n onDocChange?: OnChange;\n /** @internal Modifiers adjust the parser and serializer */\n modifiers?: DynamicModifiers[];\n};\n\nexport class WysiwygEditor implements CommonEditor, ActionStorage {\n #view: EditorView;\n #serializer: Serializer;\n #parser: Parser;\n #actions: ActionsManager;\n #contentHandler: ContentHandler;\n #escapeConfig?: EscapeConfig;\n\n get dom() {\n return this.#view.dom;\n }\n\n get serializer() {\n return this.#serializer;\n }\n\n get parser() {\n return this.#parser;\n }\n\n get actions() {\n return this.#actions.actions;\n }\n\n /** @internal used for prosemirror-dev-tools in demo */\n get view() {\n return this.#view;\n }\n\n constructor({\n domElem,\n initialContent = '',\n extensions = () => {},\n allowHTML,\n mdPreset,\n linkify,\n pmTransformers,\n linkifyTlds,\n escapeConfig,\n onChange,\n onDocChange,\n modifiers,\n }: WysiwygEditorOptions) {\n const dynamicModifiersConfig = modifiers\n ? convertDynamicModifiersConfigs(modifiers)\n : undefined;\n const dynamicModifiers = dynamicModifiersConfig\n ? {\n schema: new SchemaDynamicModifier(dynamicModifiersConfig.schema),\n parser: new MarkdownParserDynamicModifier(dynamicModifiersConfig.parser),\n serializer: new MarkdownSerializerDynamicModifier(\n dynamicModifiersConfig.serializer,\n ),\n }\n : undefined;\n\n const {\n schema,\n markupParser: parser,\n serializer,\n nodeViews,\n markViews,\n plugins,\n rawActions,\n actions,\n } = ExtensionsManager.process(extensions, {\n // \"breaks\" option only affects the renderer, but not the parser\n mdOpts: {html: allowHTML, linkify, breaks: true, preset: mdPreset},\n linkifyTlds,\n pmTransformers,\n dynamicModifiers,\n });\n\n const state = EditorState.create({\n schema,\n doc: parser.parse(initialContent),\n plugins,\n });\n\n const thisOnChange = () => this.tryOnChange(onChange);\n const thisOnDocChange = () => this.tryOnChange(onDocChange);\n\n this.#view = new EditorView(domElem ?? null, {\n state,\n nodeViews,\n markViews,\n dispatchTransaction(tr) {\n const newState = this.state.apply(tr);\n // @ts-expect-error\n this.updateState(newState);\n thisOnChange();\n if (tr.docChanged) {\n thisOnDocChange();\n }\n logTransactionMetrics(tr);\n },\n });\n this.#actions = actions.setActions(\n bindActions<keyof WysiwygEditor.Actions>(rawActions)(\n this.#view,\n ) as WysiwygEditor.Actions,\n );\n this.#serializer = serializer;\n this.#parser = parser;\n this.#contentHandler = new WysiwygContentHandler(this.#view, parser);\n this.#escapeConfig = escapeConfig;\n }\n\n action<T extends keyof WysiwygEditor.Actions>(actionName: T): WysiwygEditor.Actions[T] {\n return this.#actions.action(actionName);\n }\n\n focus() {\n return this.#view.focus();\n }\n\n hasFocus() {\n return this.#view.hasFocus();\n }\n\n getValue(): MarkupString {\n return this.#serializer.serialize(this.#view.state.doc, this.#escapeConfig);\n }\n\n isEmpty(): boolean {\n const {doc} = this.#view.state;\n return (\n doc.childCount === 1 &&\n doc.firstChild?.type.name === 'paragraph' &&\n doc.firstChild.childCount === 0\n );\n }\n\n clear(): void {\n return this.#contentHandler.clear();\n }\n\n replace(newMarkup: MarkupString): void {\n return this.#contentHandler.replace(newMarkup);\n }\n\n prepend(markup: MarkupString): void {\n return this.#contentHandler.prepend(markup);\n }\n\n append(markup: MarkupString): void {\n return this.#contentHandler.append(markup);\n }\n\n moveCursor(position: 'start' | 'end'): void {\n return this.#contentHandler.moveCursor(position);\n }\n\n destroy() {\n this.#view.destroy();\n }\n\n private tryOnChange(cb?: OnChange) {\n if (cb) {\n try {\n cb(this);\n } catch (err) {\n console.error(err);\n }\n }\n }\n}\n\ndeclare global {\n namespace WysiwygEditor {\n // eslint-disable-next-line @typescript-eslint/no-empty-interface\n interface Actions {}\n }\n}\n"]}
|
|
1
|
+
{"version":3,"file":"Editor.js","sourceRoot":"../../../src","sources":["core/Editor.ts"],"names":[],"mappings":"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","sourcesContent":["import type {PresetName} from 'markdown-it';\nimport {EditorState} from 'prosemirror-state';\nimport {EditorView} from 'prosemirror-view';\n\nimport type {CommonEditor, ContentHandler, MarkupString} from '../common';\nimport {Logger2} from '../logger';\n\nimport type {ActionsManager} from './ActionsManager';\nimport {WysiwygContentHandler} from './ContentHandler';\nimport {ExtensionsManager} from './ExtensionsManager';\nimport {SchemaDynamicModifier} from './SchemaDynamicModifier';\nimport {MarkdownParserDynamicModifier} from './markdown/MarkdownParser';\nimport {MarkdownSerializerDynamicModifier} from './markdown/MarkdownSerializerDynamicModifier';\nimport type {TransformFn} from './markdown/ProseMirrorTransformer';\nimport type {ActionStorage} from './types/actions';\nimport type {DynamicModifiers} from './types/dynamicModifiers';\nimport type {Extension} from './types/extension';\nimport type {Parser} from './types/parser';\nimport type {Serializer} from './types/serializer';\nimport {bindActions} from './utils/actions';\nimport {convertDynamicModifiersConfigs} from './utils/dynamicModifiers';\nimport {LoggerFacet} from './utils/logger';\nimport {logTransactionMetrics} from './utils/metrics';\n\ntype OnChange = (editor: WysiwygEditor) => void;\n\nexport type EscapeConfig = {\n commonEscape?: RegExp;\n startOfLineEscape?: RegExp;\n};\n\nexport type WysiwygEditorOptions = {\n domElem?: Element;\n /** markdown markup */\n initialContent?: string;\n extensions?: Extension;\n /** @default 'default' */\n mdPreset?: PresetName;\n allowHTML?: boolean;\n linkify?: boolean;\n pmTransformers?: TransformFn[];\n linkifyTlds?: string | string[];\n escapeConfig?: EscapeConfig;\n /** Call on any state change (move cursor, change selection, etc...) */\n onChange?: OnChange;\n /** Call only if document change */\n onDocChange?: OnChange;\n /** @internal Modifiers adjust the parser and serializer */\n modifiers?: DynamicModifiers[];\n logger?: Logger2.ILogger;\n};\n\nexport class WysiwygEditor implements CommonEditor, ActionStorage {\n #view: EditorView;\n #serializer: Serializer;\n #parser: Parser;\n #actions: ActionsManager;\n #contentHandler: ContentHandler;\n #escapeConfig?: EscapeConfig;\n\n get dom() {\n return this.#view.dom;\n }\n\n get serializer() {\n return this.#serializer;\n }\n\n get parser() {\n return this.#parser;\n }\n\n get actions() {\n return this.#actions.actions;\n }\n\n /** @internal used for prosemirror-dev-tools in demo */\n get view() {\n return this.#view;\n }\n\n constructor({\n domElem,\n initialContent = '',\n extensions = () => {},\n allowHTML,\n mdPreset,\n linkify,\n pmTransformers,\n linkifyTlds,\n escapeConfig,\n onChange,\n onDocChange,\n modifiers,\n logger = new Logger2(),\n }: WysiwygEditorOptions) {\n const dynamicModifiersConfig = modifiers\n ? convertDynamicModifiersConfigs(modifiers)\n : undefined;\n const dynamicModifiers = dynamicModifiersConfig\n ? {\n schema: new SchemaDynamicModifier(dynamicModifiersConfig.schema),\n parser: new MarkdownParserDynamicModifier(dynamicModifiersConfig.parser),\n serializer: new MarkdownSerializerDynamicModifier(\n dynamicModifiersConfig.serializer,\n ),\n }\n : undefined;\n\n const {\n schema,\n markupParser: parser,\n serializer,\n nodeViews,\n markViews,\n plugins,\n rawActions,\n actions,\n } = ExtensionsManager.process(\n extensions,\n {\n // \"breaks\" option only affects the renderer, but not the parser\n mdOpts: {html: allowHTML, linkify, breaks: true, preset: mdPreset},\n linkifyTlds,\n pmTransformers,\n dynamicModifiers,\n },\n logger,\n );\n\n plugins.unshift(LoggerFacet.of(logger));\n\n const state = EditorState.create({\n schema,\n doc: parser.parse(initialContent),\n plugins,\n });\n\n const thisOnChange = () => this.tryOnChange(onChange);\n const thisOnDocChange = () => this.tryOnChange(onDocChange);\n\n this.#view = new EditorView(domElem ?? null, {\n state,\n nodeViews,\n markViews,\n dispatchTransaction(tr) {\n const newState = this.state.apply(tr);\n // @ts-expect-error\n this.updateState(newState);\n thisOnChange();\n if (tr.docChanged) {\n thisOnDocChange();\n }\n logTransactionMetrics(tr, logger);\n },\n });\n this.#actions = actions.setActions(\n bindActions<keyof WysiwygEditor.Actions>(rawActions)(\n this.#view,\n ) as WysiwygEditor.Actions,\n );\n this.#serializer = serializer;\n this.#parser = parser;\n this.#contentHandler = new WysiwygContentHandler(this.#view, parser);\n this.#escapeConfig = escapeConfig;\n }\n\n action<T extends keyof WysiwygEditor.Actions>(actionName: T): WysiwygEditor.Actions[T] {\n return this.#actions.action(actionName);\n }\n\n focus() {\n return this.#view.focus();\n }\n\n hasFocus() {\n return this.#view.hasFocus();\n }\n\n getValue(): MarkupString {\n return this.#serializer.serialize(this.#view.state.doc, this.#escapeConfig);\n }\n\n isEmpty(): boolean {\n const {doc} = this.#view.state;\n return (\n doc.childCount === 1 &&\n doc.firstChild?.type.name === 'paragraph' &&\n doc.firstChild.childCount === 0\n );\n }\n\n clear(): void {\n return this.#contentHandler.clear();\n }\n\n replace(newMarkup: MarkupString): void {\n return this.#contentHandler.replace(newMarkup);\n }\n\n prepend(markup: MarkupString): void {\n return this.#contentHandler.prepend(markup);\n }\n\n append(markup: MarkupString): void {\n return this.#contentHandler.append(markup);\n }\n\n moveCursor(position: 'start' | 'end'): void {\n return this.#contentHandler.moveCursor(position);\n }\n\n destroy() {\n this.#view.destroy();\n }\n\n private tryOnChange(cb?: OnChange) {\n if (cb) {\n try {\n cb(this);\n } catch (err) {\n console.error(err);\n }\n }\n }\n}\n\ndeclare global {\n namespace WysiwygEditor {\n // eslint-disable-next-line @typescript-eslint/no-empty-interface\n interface Actions {}\n }\n}\n"]}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import type MarkdownIt from 'markdown-it';
|
|
2
2
|
import { inputRules } from 'prosemirror-inputrules';
|
|
3
3
|
import type { Plugin } from 'prosemirror-state';
|
|
4
|
+
import type { Logger2 } from "../logger.js";
|
|
4
5
|
import type { ActionSpec } from "./types/actions.js";
|
|
5
6
|
import type { Extension, ExtensionDeps, ExtensionMarkSpec, ExtensionNodeSpec, ExtensionSpec, ExtensionWithOptions } from "./types/extension.js";
|
|
6
7
|
import type { Keymap } from "./types/keymap.js";
|
|
@@ -52,7 +53,8 @@ export declare class ExtensionBuilder {
|
|
|
52
53
|
static readonly Priority: typeof Priority;
|
|
53
54
|
readonly Priority: typeof Priority;
|
|
54
55
|
readonly context: BuilderContext<WysiwygEditor.Context>;
|
|
55
|
-
constructor(context?: BuilderContext<WysiwygEditor.Context>);
|
|
56
|
+
constructor(logger: Logger2.ILogger, context?: BuilderContext<WysiwygEditor.Context>);
|
|
57
|
+
get logger(): Logger2.ILogger;
|
|
56
58
|
use(extension: Extension): this;
|
|
57
59
|
use<T>(extension: ExtensionWithOptions<T>, options: T): this;
|
|
58
60
|
configureMd(cb: ConfigureMdCallback, params?: ConfigureMdParams): this;
|
|
@@ -24,15 +24,20 @@ class ExtensionBuilder {
|
|
|
24
24
|
static Priority = Priority;
|
|
25
25
|
Priority = ExtensionBuilder.Priority;
|
|
26
26
|
/* eslint-enable @typescript-eslint/member-ordering */
|
|
27
|
+
#logger;
|
|
27
28
|
#confMdCbs = [];
|
|
28
29
|
#nodeSpecs = {};
|
|
29
30
|
#markSpecs = {};
|
|
30
31
|
#plugins = [];
|
|
31
32
|
#actions = [];
|
|
32
33
|
context;
|
|
33
|
-
constructor(context) {
|
|
34
|
+
constructor(logger, context) {
|
|
35
|
+
this.#logger = logger;
|
|
34
36
|
this.context = context ?? ExtensionBuilder.createContext();
|
|
35
37
|
}
|
|
38
|
+
get logger() {
|
|
39
|
+
return this.#logger;
|
|
40
|
+
}
|
|
36
41
|
use(extension, ...params) {
|
|
37
42
|
extension(this, ...params);
|
|
38
43
|
return this;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ExtensionBuilder.js","sourceRoot":"../../../src","sources":["core/ExtensionBuilder.ts"],"names":[],"mappings":";;;;AACA,oEAAoC,CAAC,wDAAwD;AAC7F,mEAAkD;AAClD,2DAA0C;AAuC1C,IAAK,QAQJ;AARD,WAAK,QAAQ;IACT,mDAAmB,CAAA;IACnB,oDAAkB,CAAA;IAClB,2CAAa,CAAA;IACb,8CAAc,CAAA;IACd,uCAAS,CAAA;IACT,8CAAY,CAAA;IACZ,2CAAU,CAAA;AACd,CAAC,EARI,QAAQ,KAAR,QAAQ,QAQZ;AAED,MAAM,gBAAgB,GAAG,QAAQ,CAAC,MAAM,CAAC;AAczC,MAAa,gBAAgB;IACzB,MAAM,CAAC,aAAa;QAChB,OAAO,IAAI,GAAG,EAAE,CAAC;IACrB,CAAC;IAED,uDAAuD;IACvD,MAAM,CAAU,QAAQ,GAAG,QAAQ,CAAC;IAC3B,QAAQ,GAAG,gBAAgB,CAAC,QAAQ,CAAC;IAC9C,sDAAsD;IAEtD,UAAU,GAAqE,EAAE,CAAC;IAClF,UAAU,GAA0D,EAAE,CAAC;IACvE,UAAU,GAA4E,EAAE,CAAC;IACzF,QAAQ,GAAkD,EAAE,CAAC;IAC7D,QAAQ,GAAkC,EAAE,CAAC;IAEpC,OAAO,CAAwC;IAExD,YAAY,OAA+C;QACvD,IAAI,CAAC,OAAO,GAAG,OAAO,IAAI,gBAAgB,CAAC,aAAa,EAAE,CAAC;IAC/D,CAAC;IAID,GAAG,CAAC,SAA8B,EAAE,GAAG,MAAa;QAChD,SAAS,CAAC,IAAI,EAAE,GAAG,MAAM,CAAC,CAAC;QAC3B,OAAO,IAAI,CAAC;IAChB,CAAC;IAED,WAAW,CAAC,EAAuB,EAAE,SAA4B,EAAE;QAC/D,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC;YACjB,EAAE;YACF,MAAM,EAAE;gBACJ,IAAI,EAAE,MAAM,CAAC,IAAI,IAAI,IAAI;gBACzB,MAAM,EAAE,MAAM,CAAC,MAAM,IAAI,IAAI;aAChC;SACJ,CAAC,CAAC;QACH,OAAO,IAAI,CAAC;IAChB,CAAC;IAED,OAAO,CAAC,IAAY,EAAE,EAAqB;QACvC,IAAI,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;YACxB,MAAM,IAAI,KAAK,CAAC,oCAAoC,IAAI,iBAAiB,CAAC,CAAC;QAC/E,CAAC;QACD,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,GAAG,EAAC,IAAI,EAAE,EAAE,EAAC,CAAC;QACnC,OAAO,IAAI,CAAC;IAChB,CAAC;IAED,OAAO,CAAC,IAAY,EAAE,EAAqB,EAAE,QAAQ,GAAG,gBAAgB;QACpE,IAAI,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;YACxB,MAAM,IAAI,KAAK,CAAC,oCAAoC,IAAI,iBAAiB,CAAC,CAAC;QAC/E,CAAC;QACD,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,GAAG,EAAC,IAAI,EAAE,EAAE,EAAE,QAAQ,EAAC,CAAC;QAC7C,OAAO,IAAI,CAAC;IAChB,CAAC;IAED,SAAS,CAAC,EAAuB,EAAE,QAAQ,GAAG,gBAAgB;QAC1D,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAC,EAAE,EAAE,QAAQ,EAAC,CAAC,CAAC;QACnC,OAAO,IAAI,CAAC;IAChB,CAAC;IAED,SAAS,CAAC,EAAuB,EAAE,QAAQ,GAAG,gBAAgB;QAC1D,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAC,EAAE,EAAE,CAAC,GAAG,IAAI,EAAE,EAAE,CAAC,IAAA,2BAAM,EAAC,EAAE,CAAC,GAAG,IAAI,CAAC,CAAC,EAAE,QAAQ,EAAC,CAAC,CAAC;QACrE,OAAO,IAAI,CAAC;IAChB,CAAC;IAED,aAAa,CAAC,EAA2B,EAAE,QAAQ,GAAG,gBAAgB;QAClE,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAC,EAAE,EAAE,CAAC,GAAG,IAAI,EAAE,EAAE,CAAC,IAAA,mCAAU,EAAC,EAAE,CAAC,GAAG,IAAI,CAAC,CAAC,EAAE,QAAQ,EAAC,CAAC,CAAC;QACzE,OAAO,IAAI,CAAC;IAChB,CAAC;IAED,SAAS,CAAC,IAAY,EAAE,EAAqB;QACzC,IAAI,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,UAAU,CAAC,EAAE,EAAE,CAAC,UAAU,KAAK,IAAI,CAAC,EAAE,CAAC;YAC5D,MAAM,IAAI,KAAK,CACX,oDAAoD,IAAI,iBAAiB,CAC5E,CAAC;QACN,CAAC;QACD,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,CAAC;QAC/B,OAAO,IAAI,CAAC;IAChB,CAAC;IAED,KAAK;QACD,MAAM,MAAM,GAAG,IAAI,CAAC,UAAU,CAAC,KAAK,EAAE,CAAC;QACvC,MAAM,KAAK,GAAG,EAAC,GAAG,IAAI,CAAC,UAAU,EAAC,CAAC;QACnC,MAAM,KAAK,GAAG,EAAC,GAAG,IAAI,CAAC,UAAU,EAAC,CAAC;QACnC,MAAM,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAC,KAAK,EAAE,CAAC;QACtC,MAAM,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAC,KAAK,EAAE,CAAC;QAEtC,OAAO;YACH,WAAW,EAAE,CAAC,EAAE,EAAE,UAAU,EAAE,EAAE,CAC5B,MAAM,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,EAAC,EAAE,EAAE,MAAM,EAAC,EAAE,EAAE;gBAChC,IAAI,UAAU,KAAK,MAAM,IAAI,MAAM,CAAC,IAAI,EAAE,CAAC;oBACvC,OAAO,EAAE,CAAC,GAAG,CAAC,CAAC;gBACnB,CAAC;gBACD,IAAI,UAAU,KAAK,QAAQ,IAAI,MAAM,CAAC,MAAM,EAAE,CAAC;oBAC3C,OAAO,EAAE,CAAC,GAAG,CAAC,CAAC;gBACnB,CAAC;gBACD,OAAO,GAAG,CAAC;YACf,CAAC,EAAE,EAAE,CAAC;YACV,KAAK,EAAE,GAAG,EAAE;gBACR,IAAI,GAAG,GAAG,oBAAU,CAAC,IAAI,CAAoB,EAAE,CAAC,CAAC;gBACjD,KAAK,MAAM,EAAC,IAAI,EAAE,EAAE,EAAC,IAAI,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC;oBAC5C,GAAG,GAAG,GAAG,CAAC,QAAQ,CAAC,IAAI,EAAE,EAAE,EAAE,CAAC,CAAC;gBACnC,CAAC;gBACD,OAAO,GAAG,CAAC;YACf,CAAC;YACD,KAAK,EAAE,GAAG,EAAE;gBACR,0FAA0F;gBAC1F,wDAAwD;gBACxD,MAAM,WAAW,GAAG,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,GAAG,CAAC,CAAC,QAAQ,CAAC,CAAC;gBACjF,IAAI,GAAG,GAAG,oBAAU,CAAC,IAAI,CAAoB,EAAE,CAAC,CAAC;gBACjD,KAAK,MAAM,EAAC,IAAI,EAAE,EAAE,EAAC,IAAI,WAAW,EAAE,CAAC;oBACnC,GAAG,GAAG,GAAG,CAAC,QAAQ,CAAC,IAAI,EAAE,EAAE,EAAE,CAAC,CAAC;gBACnC,CAAC;gBACD,OAAO,GAAG,CAAC;YACf,CAAC;YACD,OAAO,EAAE,CAAC,IAAI,EAAE,EAAE;gBACd,OAAO,OAAO;qBACT,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,GAAG,CAAC,CAAC,QAAQ,CAAC;qBACvC,MAAM,CAAW,CAAC,GAAG,EAAE,EAAC,EAAE,EAAC,EAAE,EAAE;oBAC5B,MAAM,GAAG,GAAG,EAAE,CAAC,IAAI,CAAC,CAAC;oBACrB,IAAI,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC;wBAAE,GAAG,CAAC,IAAI,CAAC,GAAG,GAAG,CAAC,CAAC;;wBACpC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;oBACnB,OAAO,GAAG,CAAC;gBACf,CAAC,EAAE,EAAE,CAAC,CAAC;YACf,CAAC;YACD,OAAO,EAAE,CAAC,IAAI,EAAE,EAAE,CACd,OAAO,CAAC,MAAM,CACV,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,EAAE,EAAE;gBAChB,GAAG,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,CAAC;gBACrB,OAAO,GAAG,CAAC;YACf,CAAC,EACD,EAAgC,CACnC;SACR,CAAC;IACN,CAAC;;AAvIL,4CAwIC","sourcesContent":["import type MarkdownIt from 'markdown-it';\nimport OrderedMap from 'orderedmap'; // eslint-disable-line import/no-extraneous-dependencies\nimport {inputRules} from 'prosemirror-inputrules';\nimport {keymap} from 'prosemirror-keymap';\nimport type {Plugin} from 'prosemirror-state';\n\nimport type {ActionSpec} from './types/actions';\nimport type {\n Extension,\n ExtensionDeps,\n ExtensionMarkSpec,\n ExtensionNodeSpec,\n ExtensionSpec,\n ExtensionWithOptions,\n} from './types/extension';\nimport type {Keymap} from './types/keymap';\n\ntype InputRulesConfig = Parameters<typeof inputRules>[0];\ntype ExtensionWithParams = (builder: ExtensionBuilder, ...params: any[]) => void;\ntype ConfigureMdParams = {\n /**\n * Apply this configurtion to text parser\n *\n * @default true\n */\n text?: boolean;\n /**\n * Apply this configurtion to markup parser\n *\n * @default true\n */\n markup?: boolean;\n};\n\ntype ConfigureMdCallback = (md: MarkdownIt) => MarkdownIt;\ntype AddPmNodeCallback = () => ExtensionNodeSpec;\ntype AddPmMarkCallback = () => ExtensionMarkSpec;\ntype AddPmPluginCallback = (deps: ExtensionDeps) => Plugin | Plugin[];\ntype AddPmKeymapCallback = (deps: ExtensionDeps) => Keymap;\ntype AddPmInputRulesCallback = (deps: ExtensionDeps) => InputRulesConfig;\ntype AddActionCallback = (deps: ExtensionDeps) => ActionSpec;\n\nenum Priority {\n Highest = 1_000_000,\n VeryHigh = 100_000,\n High = 10_000,\n Medium = 1_000,\n Low = 100,\n VeryLow = 10,\n Lowest = 0,\n}\n\nconst DEFAULT_PRIORITY = Priority.Medium;\n\ntype BuilderContext<T extends object> = {\n has(key: keyof T): boolean;\n get<K extends keyof T>(key: K): T[K] | undefined;\n set<K extends keyof T>(key: K, value: T[K]): BuilderContext<T>;\n};\n\ndeclare global {\n namespace WysiwygEditor {\n interface Context {}\n }\n}\n\nexport class ExtensionBuilder {\n static createContext(): BuilderContext<WysiwygEditor.Context> {\n return new Map();\n }\n\n /* eslint-disable @typescript-eslint/member-ordering */\n static readonly Priority = Priority;\n readonly Priority = ExtensionBuilder.Priority;\n /* eslint-enable @typescript-eslint/member-ordering */\n\n #confMdCbs: {cb: ConfigureMdCallback; params: Required<ConfigureMdParams>}[] = [];\n #nodeSpecs: Record<string, {name: string; cb: AddPmNodeCallback}> = {};\n #markSpecs: Record<string, {name: string; cb: AddPmMarkCallback; priority: number}> = {};\n #plugins: {cb: AddPmPluginCallback; priority: number}[] = [];\n #actions: [string, AddActionCallback][] = [];\n\n readonly context: BuilderContext<WysiwygEditor.Context>;\n\n constructor(context?: BuilderContext<WysiwygEditor.Context>) {\n this.context = context ?? ExtensionBuilder.createContext();\n }\n\n use(extension: Extension): this;\n use<T>(extension: ExtensionWithOptions<T>, options: T): this;\n use(extension: ExtensionWithParams, ...params: any[]): this {\n extension(this, ...params);\n return this;\n }\n\n configureMd(cb: ConfigureMdCallback, params: ConfigureMdParams = {}): this {\n this.#confMdCbs.push({\n cb,\n params: {\n text: params.text ?? true,\n markup: params.markup ?? true,\n },\n });\n return this;\n }\n\n addNode(name: string, cb: AddPmNodeCallback): this {\n if (this.#nodeSpecs[name]) {\n throw new Error(`ProseMirror node with this name \"${name}\" already exist`);\n }\n this.#nodeSpecs[name] = {name, cb};\n return this;\n }\n\n addMark(name: string, cb: AddPmMarkCallback, priority = DEFAULT_PRIORITY): this {\n if (this.#markSpecs[name]) {\n throw new Error(`ProseMirror mark with this name \"${name}\" already exist`);\n }\n this.#markSpecs[name] = {name, cb, priority};\n return this;\n }\n\n addPlugin(cb: AddPmPluginCallback, priority = DEFAULT_PRIORITY): this {\n this.#plugins.push({cb, priority});\n return this;\n }\n\n addKeymap(cb: AddPmKeymapCallback, priority = DEFAULT_PRIORITY): this {\n this.#plugins.push({cb: (...args) => keymap(cb(...args)), priority});\n return this;\n }\n\n addInputRules(cb: AddPmInputRulesCallback, priority = DEFAULT_PRIORITY): this {\n this.#plugins.push({cb: (...args) => inputRules(cb(...args)), priority});\n return this;\n }\n\n addAction(name: string, cb: AddActionCallback): this {\n if (this.#actions.some(([actionName]) => actionName === name)) {\n throw new Error(\n `[Markdown Wysiwyg Editor] action with this name \"${name}\" already exist`,\n );\n }\n this.#actions.push([name, cb]);\n return this;\n }\n\n build(): ExtensionSpec {\n const confMd = this.#confMdCbs.slice();\n const nodes = {...this.#nodeSpecs};\n const marks = {...this.#markSpecs};\n const plugins = this.#plugins.slice();\n const actions = this.#actions.slice();\n\n return {\n configureMd: (md, parserType) =>\n confMd.reduce((pMd, {cb, params}) => {\n if (parserType === 'text' && params.text) {\n return cb(pMd);\n }\n if (parserType === 'markup' && params.markup) {\n return cb(pMd);\n }\n return pMd;\n }, md),\n nodes: () => {\n let map = OrderedMap.from<ExtensionNodeSpec>({});\n for (const {name, cb} of Object.values(nodes)) {\n map = map.addToEnd(name, cb());\n }\n return map;\n },\n marks: () => {\n // The order of marks in schema is important when serializing pm-document to DOM or markup\n // https://discuss.prosemirror.net/t/marks-priority/4463\n const sortedMarks = Object.values(marks).sort((a, b) => b.priority - a.priority);\n let map = OrderedMap.from<ExtensionMarkSpec>({});\n for (const {name, cb} of sortedMarks) {\n map = map.addToEnd(name, cb());\n }\n return map;\n },\n plugins: (deps) => {\n return plugins\n .sort((a, b) => b.priority - a.priority)\n .reduce<Plugin[]>((acc, {cb}) => {\n const res = cb(deps);\n if (Array.isArray(res)) acc.push(...res);\n else acc.push(res);\n return acc;\n }, []);\n },\n actions: (deps) =>\n actions.reduce(\n (obj, [name, cb]) => {\n obj[name] = cb(deps);\n return obj;\n },\n {} as Record<string, ActionSpec>,\n ),\n };\n }\n}\n"]}
|
|
1
|
+
{"version":3,"file":"ExtensionBuilder.js","sourceRoot":"../../../src","sources":["core/ExtensionBuilder.ts"],"names":[],"mappings":"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","sourcesContent":["import type MarkdownIt from 'markdown-it';\nimport OrderedMap from 'orderedmap'; // eslint-disable-line import/no-extraneous-dependencies\nimport {inputRules} from 'prosemirror-inputrules';\nimport {keymap} from 'prosemirror-keymap';\nimport type {Plugin} from 'prosemirror-state';\n\nimport type {Logger2} from '../logger';\n\nimport type {ActionSpec} from './types/actions';\nimport type {\n Extension,\n ExtensionDeps,\n ExtensionMarkSpec,\n ExtensionNodeSpec,\n ExtensionSpec,\n ExtensionWithOptions,\n} from './types/extension';\nimport type {Keymap} from './types/keymap';\n\ntype InputRulesConfig = Parameters<typeof inputRules>[0];\ntype ExtensionWithParams = (builder: ExtensionBuilder, ...params: any[]) => void;\ntype ConfigureMdParams = {\n /**\n * Apply this configurtion to text parser\n *\n * @default true\n */\n text?: boolean;\n /**\n * Apply this configurtion to markup parser\n *\n * @default true\n */\n markup?: boolean;\n};\n\ntype ConfigureMdCallback = (md: MarkdownIt) => MarkdownIt;\ntype AddPmNodeCallback = () => ExtensionNodeSpec;\ntype AddPmMarkCallback = () => ExtensionMarkSpec;\ntype AddPmPluginCallback = (deps: ExtensionDeps) => Plugin | Plugin[];\ntype AddPmKeymapCallback = (deps: ExtensionDeps) => Keymap;\ntype AddPmInputRulesCallback = (deps: ExtensionDeps) => InputRulesConfig;\ntype AddActionCallback = (deps: ExtensionDeps) => ActionSpec;\n\nenum Priority {\n Highest = 1_000_000,\n VeryHigh = 100_000,\n High = 10_000,\n Medium = 1_000,\n Low = 100,\n VeryLow = 10,\n Lowest = 0,\n}\n\nconst DEFAULT_PRIORITY = Priority.Medium;\n\ntype BuilderContext<T extends object> = {\n has(key: keyof T): boolean;\n get<K extends keyof T>(key: K): T[K] | undefined;\n set<K extends keyof T>(key: K, value: T[K]): BuilderContext<T>;\n};\n\ndeclare global {\n namespace WysiwygEditor {\n interface Context {}\n }\n}\n\nexport class ExtensionBuilder {\n static createContext(): BuilderContext<WysiwygEditor.Context> {\n return new Map();\n }\n\n /* eslint-disable @typescript-eslint/member-ordering */\n static readonly Priority = Priority;\n readonly Priority = ExtensionBuilder.Priority;\n /* eslint-enable @typescript-eslint/member-ordering */\n\n readonly #logger: Logger2.ILogger;\n #confMdCbs: {cb: ConfigureMdCallback; params: Required<ConfigureMdParams>}[] = [];\n #nodeSpecs: Record<string, {name: string; cb: AddPmNodeCallback}> = {};\n #markSpecs: Record<string, {name: string; cb: AddPmMarkCallback; priority: number}> = {};\n #plugins: {cb: AddPmPluginCallback; priority: number}[] = [];\n #actions: [string, AddActionCallback][] = [];\n\n readonly context: BuilderContext<WysiwygEditor.Context>;\n\n constructor(logger: Logger2.ILogger, context?: BuilderContext<WysiwygEditor.Context>) {\n this.#logger = logger;\n this.context = context ?? ExtensionBuilder.createContext();\n }\n\n get logger(): Logger2.ILogger {\n return this.#logger;\n }\n\n use(extension: Extension): this;\n use<T>(extension: ExtensionWithOptions<T>, options: T): this;\n use(extension: ExtensionWithParams, ...params: any[]): this {\n extension(this, ...params);\n return this;\n }\n\n configureMd(cb: ConfigureMdCallback, params: ConfigureMdParams = {}): this {\n this.#confMdCbs.push({\n cb,\n params: {\n text: params.text ?? true,\n markup: params.markup ?? true,\n },\n });\n return this;\n }\n\n addNode(name: string, cb: AddPmNodeCallback): this {\n if (this.#nodeSpecs[name]) {\n throw new Error(`ProseMirror node with this name \"${name}\" already exist`);\n }\n this.#nodeSpecs[name] = {name, cb};\n return this;\n }\n\n addMark(name: string, cb: AddPmMarkCallback, priority = DEFAULT_PRIORITY): this {\n if (this.#markSpecs[name]) {\n throw new Error(`ProseMirror mark with this name \"${name}\" already exist`);\n }\n this.#markSpecs[name] = {name, cb, priority};\n return this;\n }\n\n addPlugin(cb: AddPmPluginCallback, priority = DEFAULT_PRIORITY): this {\n this.#plugins.push({cb, priority});\n return this;\n }\n\n addKeymap(cb: AddPmKeymapCallback, priority = DEFAULT_PRIORITY): this {\n this.#plugins.push({cb: (...args) => keymap(cb(...args)), priority});\n return this;\n }\n\n addInputRules(cb: AddPmInputRulesCallback, priority = DEFAULT_PRIORITY): this {\n this.#plugins.push({cb: (...args) => inputRules(cb(...args)), priority});\n return this;\n }\n\n addAction(name: string, cb: AddActionCallback): this {\n if (this.#actions.some(([actionName]) => actionName === name)) {\n throw new Error(\n `[Markdown Wysiwyg Editor] action with this name \"${name}\" already exist`,\n );\n }\n this.#actions.push([name, cb]);\n return this;\n }\n\n build(): ExtensionSpec {\n const confMd = this.#confMdCbs.slice();\n const nodes = {...this.#nodeSpecs};\n const marks = {...this.#markSpecs};\n const plugins = this.#plugins.slice();\n const actions = this.#actions.slice();\n\n return {\n configureMd: (md, parserType) =>\n confMd.reduce((pMd, {cb, params}) => {\n if (parserType === 'text' && params.text) {\n return cb(pMd);\n }\n if (parserType === 'markup' && params.markup) {\n return cb(pMd);\n }\n return pMd;\n }, md),\n nodes: () => {\n let map = OrderedMap.from<ExtensionNodeSpec>({});\n for (const {name, cb} of Object.values(nodes)) {\n map = map.addToEnd(name, cb());\n }\n return map;\n },\n marks: () => {\n // The order of marks in schema is important when serializing pm-document to DOM or markup\n // https://discuss.prosemirror.net/t/marks-priority/4463\n const sortedMarks = Object.values(marks).sort((a, b) => b.priority - a.priority);\n let map = OrderedMap.from<ExtensionMarkSpec>({});\n for (const {name, cb} of sortedMarks) {\n map = map.addToEnd(name, cb());\n }\n return map;\n },\n plugins: (deps) => {\n return plugins\n .sort((a, b) => b.priority - a.priority)\n .reduce<Plugin[]>((acc, {cb}) => {\n const res = cb(deps);\n if (Array.isArray(res)) acc.push(...res);\n else acc.push(res);\n return acc;\n }, []);\n },\n actions: (deps) =>\n actions.reduce(\n (obj, [name, cb]) => {\n obj[name] = cb(deps);\n return obj;\n },\n {} as Record<string, ActionSpec>,\n ),\n };\n }\n}\n"]}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import MarkdownIt, { type PresetName } from 'markdown-it';
|
|
2
2
|
import type { Schema } from 'prosemirror-model';
|
|
3
3
|
import type { Plugin } from 'prosemirror-state';
|
|
4
|
+
import { Logger2 } from "../logger.js";
|
|
4
5
|
import { ActionsManager } from "./ActionsManager.js";
|
|
5
6
|
import type { SchemaDynamicModifier } from "./SchemaDynamicModifier.js";
|
|
6
7
|
import type { MarkdownParserDynamicModifier } from "./markdown/MarkdownParser.js";
|
|
@@ -10,6 +11,7 @@ import type { ActionSpec } from "./types/actions.js";
|
|
|
10
11
|
import type { Extension, ExtensionDeps } from "./types/extension.js";
|
|
11
12
|
import type { MarkViewConstructor, NodeViewConstructor } from "./types/node-views.js";
|
|
12
13
|
type ExtensionsManagerParams = {
|
|
14
|
+
logger?: Logger2.ILogger;
|
|
13
15
|
extensions: Extension;
|
|
14
16
|
options?: ExtensionsManagerOptions;
|
|
15
17
|
};
|
|
@@ -27,7 +29,7 @@ type ExtensionsManagerOptions = {
|
|
|
27
29
|
};
|
|
28
30
|
export declare class ExtensionsManager {
|
|
29
31
|
#private;
|
|
30
|
-
static process(extensions: Extension, options: ExtensionsManagerOptions): {
|
|
32
|
+
static process(extensions: Extension, options: ExtensionsManagerOptions, logger?: Logger2.ILogger): {
|
|
31
33
|
actions: ActionsManager;
|
|
32
34
|
rawActions: Record<string, ActionSpec>;
|
|
33
35
|
plugins: Plugin<any>[];
|
|
@@ -38,7 +40,7 @@ export declare class ExtensionsManager {
|
|
|
38
40
|
markupParser: import("./index.js").Parser;
|
|
39
41
|
serializer: import("./index.js").Serializer;
|
|
40
42
|
};
|
|
41
|
-
constructor({ extensions, options }: ExtensionsManagerParams);
|
|
43
|
+
constructor({ extensions, options, logger }: ExtensionsManagerParams);
|
|
42
44
|
build(): {
|
|
43
45
|
actions: ActionsManager;
|
|
44
46
|
rawActions: Record<string, ActionSpec>;
|
|
@@ -3,14 +3,15 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
3
3
|
exports.ExtensionsManager = void 0;
|
|
4
4
|
const tslib_1 = require("tslib");
|
|
5
5
|
const markdown_it_1 = tslib_1.__importDefault(require("markdown-it"));
|
|
6
|
+
const logger_1 = require("../logger.js");
|
|
6
7
|
const ActionsManager_1 = require("./ActionsManager.js");
|
|
7
8
|
const ExtensionBuilder_1 = require("./ExtensionBuilder.js");
|
|
8
9
|
const ParserTokensRegistry_1 = require("./ParserTokensRegistry.js");
|
|
9
10
|
const SchemaSpecRegistry_1 = require("./SchemaSpecRegistry.js");
|
|
10
11
|
const SerializerTokensRegistry_1 = require("./SerializerTokensRegistry.js");
|
|
11
12
|
class ExtensionsManager {
|
|
12
|
-
static process(extensions, options) {
|
|
13
|
-
return new this({ extensions, options }).build();
|
|
13
|
+
static process(extensions, options, logger) {
|
|
14
|
+
return new this({ extensions, options, logger }).build();
|
|
14
15
|
}
|
|
15
16
|
#schemaRegistry;
|
|
16
17
|
#parserRegistry;
|
|
@@ -30,9 +31,9 @@ class ExtensionsManager {
|
|
|
30
31
|
#markViews = {};
|
|
31
32
|
#serializerDynamicModifier;
|
|
32
33
|
#parserDynamicModifier;
|
|
33
|
-
constructor({ extensions, options = {} }) {
|
|
34
|
+
constructor({ extensions, options = {}, logger = new logger_1.Logger2() }) {
|
|
34
35
|
this.#schemaRegistry = new SchemaSpecRegistry_1.SchemaSpecRegistry(undefined, options.dynamicModifiers?.schema);
|
|
35
|
-
this.#parserRegistry = new ParserTokensRegistry_1.ParserTokensRegistry();
|
|
36
|
+
this.#parserRegistry = new ParserTokensRegistry_1.ParserTokensRegistry({ logger });
|
|
36
37
|
this.#serializerRegistry = new SerializerTokensRegistry_1.SerializerTokensRegistry();
|
|
37
38
|
if (options.dynamicModifiers) {
|
|
38
39
|
this.#parserDynamicModifier = options.dynamicModifiers?.parser;
|
|
@@ -50,7 +51,7 @@ class ExtensionsManager {
|
|
|
50
51
|
this.#pmTransformers = options.pmTransformers;
|
|
51
52
|
}
|
|
52
53
|
// TODO: add prefilled context
|
|
53
|
-
this.#builder = new ExtensionBuilder_1.ExtensionBuilder();
|
|
54
|
+
this.#builder = new ExtensionBuilder_1.ExtensionBuilder(logger);
|
|
54
55
|
}
|
|
55
56
|
build() {
|
|
56
57
|
this.processExtensions();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ExtensionsManager.js","sourceRoot":"../../../src","sources":["core/ExtensionsManager.ts"],"names":[],"mappings":"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","sourcesContent":["import MarkdownIt, {type PresetName} from 'markdown-it';\nimport type {Schema} from 'prosemirror-model';\nimport type {Plugin} from 'prosemirror-state';\n\nimport {ActionsManager} from './ActionsManager';\nimport {ExtensionBuilder} from './ExtensionBuilder';\nimport {ParserTokensRegistry} from './ParserTokensRegistry';\nimport type {SchemaDynamicModifier} from './SchemaDynamicModifier';\nimport {SchemaSpecRegistry} from './SchemaSpecRegistry';\nimport {SerializerTokensRegistry} from './SerializerTokensRegistry';\nimport type {MarkdownParserDynamicModifier} from './markdown/MarkdownParser';\nimport type {MarkdownSerializerDynamicModifier} from './markdown/MarkdownSerializerDynamicModifier';\nimport type {TransformFn} from './markdown/ProseMirrorTransformer';\nimport type {ActionSpec} from './types/actions';\nimport type {\n Extension,\n ExtensionDeps,\n ExtensionMarkSpec,\n ExtensionNodeSpec,\n ExtensionSpec,\n} from './types/extension';\nimport type {MarkViewConstructor, NodeViewConstructor} from './types/node-views';\n\ntype ExtensionsManagerParams = {\n extensions: Extension;\n options?: ExtensionsManagerOptions;\n};\n\ntype ExtensionsManagerOptions = {\n mdOpts?: MarkdownIt.Options & {preset?: PresetName};\n linkifyTlds?: string | string[];\n pmTransformers?: TransformFn[];\n dynamicModifiers?: {\n parser?: MarkdownParserDynamicModifier;\n serializer?: MarkdownSerializerDynamicModifier;\n schema?: SchemaDynamicModifier;\n };\n};\n\nexport class ExtensionsManager {\n static process(extensions: Extension, options: ExtensionsManagerOptions) {\n return new this({extensions, options}).build();\n }\n\n #schemaRegistry;\n #parserRegistry;\n #serializerRegistry;\n\n #nodeViewCreators = new Map<string, (deps: ExtensionDeps) => NodeViewConstructor>();\n #markViewCreators = new Map<string, (deps: ExtensionDeps) => MarkViewConstructor>();\n\n #pmTransformers: TransformFn[] = [];\n\n #mdForMarkup: MarkdownIt;\n #mdForText: MarkdownIt;\n #extensions: Extension;\n #builder: ExtensionBuilder;\n\n #spec!: ExtensionSpec;\n #deps!: ExtensionDeps;\n #plugins: Plugin[] = [];\n #actions: Record<string, ActionSpec> = {};\n #nodeViews: Record<string, NodeViewConstructor> = {};\n #markViews: Record<string, MarkViewConstructor> = {};\n #serializerDynamicModifier?: MarkdownSerializerDynamicModifier;\n #parserDynamicModifier?: MarkdownParserDynamicModifier;\n\n constructor({extensions, options = {}}: ExtensionsManagerParams) {\n this.#schemaRegistry = new SchemaSpecRegistry(undefined, options.dynamicModifiers?.schema);\n this.#parserRegistry = new ParserTokensRegistry();\n this.#serializerRegistry = new SerializerTokensRegistry();\n if (options.dynamicModifiers) {\n this.#parserDynamicModifier = options.dynamicModifiers?.parser;\n this.#serializerDynamicModifier = options.dynamicModifiers?.serializer;\n }\n\n this.#extensions = extensions;\n\n const mdPreset: PresetName = options.mdOpts?.preset ?? 'default';\n this.#mdForMarkup = new MarkdownIt(mdPreset, options.mdOpts ?? {});\n this.#mdForText = new MarkdownIt(mdPreset, options.mdOpts ?? {});\n\n if (options.linkifyTlds) {\n this.#mdForMarkup.linkify.tlds(options.linkifyTlds, true);\n this.#mdForText.linkify.tlds(options.linkifyTlds, true);\n }\n\n if (options.pmTransformers) {\n this.#pmTransformers = options.pmTransformers;\n }\n\n // TODO: add prefilled context\n this.#builder = new ExtensionBuilder();\n }\n\n build() {\n this.processExtensions();\n this.createDeps();\n this.createDerived();\n\n return {\n ...this.#deps,\n actions: this.#deps.actions as ActionsManager,\n rawActions: this.#actions,\n plugins: this.#plugins,\n nodeViews: this.#nodeViews,\n markViews: this.#markViews,\n };\n }\n\n buildDeps() {\n this.processExtensions();\n this.createDeps();\n return this.#deps;\n }\n\n private processExtensions() {\n this.#spec = this.#builder.use(this.#extensions).build();\n this.#mdForMarkup = this.#spec.configureMd(this.#mdForMarkup, 'markup');\n this.#mdForText = this.#spec.configureMd(this.#mdForText, 'text');\n this.#spec.nodes().forEach(this.processNode);\n this.#spec.marks().forEach(this.processMark);\n }\n\n private processNode = (name: string, {spec, fromMd, toMd: toMd, view}: ExtensionNodeSpec) => {\n this.#schemaRegistry.addNode(name, spec);\n\n this.#parserRegistry.addToken(fromMd.tokenName || name, fromMd.tokenSpec);\n this.#serializerRegistry.addNode(name, toMd);\n if (view) {\n this.#nodeViewCreators.set(name, view);\n }\n };\n\n private processMark = (name: string, {spec, fromMd, toMd, view}: ExtensionMarkSpec) => {\n this.#schemaRegistry.addMark(name, spec);\n this.#parserRegistry.addToken(fromMd.tokenName || name, fromMd.tokenSpec);\n this.#serializerRegistry.addMark(name, toMd);\n if (view) {\n this.#markViewCreators.set(name, view);\n }\n };\n\n private createParser(schema: Schema, mdInstance: MarkdownIt) {\n return this.#parserRegistry.createParser(\n schema,\n mdInstance,\n this.#pmTransformers,\n this.#parserDynamicModifier,\n );\n }\n\n private createDeps() {\n const actions = new ActionsManager();\n\n const schema = this.#schemaRegistry.createSchema();\n const markupParser = this.createParser(schema, this.#mdForMarkup);\n const textParser = this.createParser(schema, this.#mdForText);\n const serializer = this.#serializerRegistry.createSerializer(\n this.#serializerDynamicModifier,\n );\n\n this.#deps = {\n schema,\n actions,\n markupParser,\n textParser,\n serializer,\n };\n }\n\n private createDerived() {\n this.#plugins = this.#spec.plugins(this.#deps);\n Object.assign(this.#actions, this.#spec.actions(this.#deps));\n\n for (const [name, view] of this.#nodeViewCreators) {\n this.#nodeViews[name] = view(this.#deps);\n }\n\n for (const [name, view] of this.#markViewCreators) {\n this.#markViews[name] = view(this.#deps);\n }\n }\n}\n"]}
|
|
1
|
+
{"version":3,"file":"ExtensionsManager.js","sourceRoot":"../../../src","sources":["core/ExtensionsManager.ts"],"names":[],"mappings":"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","sourcesContent":["import MarkdownIt, {type PresetName} from 'markdown-it';\nimport type {Schema} from 'prosemirror-model';\nimport type {Plugin} from 'prosemirror-state';\n\nimport {Logger2} from '../logger';\n\nimport {ActionsManager} from './ActionsManager';\nimport {ExtensionBuilder} from './ExtensionBuilder';\nimport {ParserTokensRegistry} from './ParserTokensRegistry';\nimport type {SchemaDynamicModifier} from './SchemaDynamicModifier';\nimport {SchemaSpecRegistry} from './SchemaSpecRegistry';\nimport {SerializerTokensRegistry} from './SerializerTokensRegistry';\nimport type {MarkdownParserDynamicModifier} from './markdown/MarkdownParser';\nimport type {MarkdownSerializerDynamicModifier} from './markdown/MarkdownSerializerDynamicModifier';\nimport type {TransformFn} from './markdown/ProseMirrorTransformer';\nimport type {ActionSpec} from './types/actions';\nimport type {\n Extension,\n ExtensionDeps,\n ExtensionMarkSpec,\n ExtensionNodeSpec,\n ExtensionSpec,\n} from './types/extension';\nimport type {MarkViewConstructor, NodeViewConstructor} from './types/node-views';\n\ntype ExtensionsManagerParams = {\n logger?: Logger2.ILogger;\n extensions: Extension;\n options?: ExtensionsManagerOptions;\n};\n\ntype ExtensionsManagerOptions = {\n mdOpts?: MarkdownIt.Options & {preset?: PresetName};\n linkifyTlds?: string | string[];\n pmTransformers?: TransformFn[];\n dynamicModifiers?: {\n parser?: MarkdownParserDynamicModifier;\n serializer?: MarkdownSerializerDynamicModifier;\n schema?: SchemaDynamicModifier;\n };\n};\n\nexport class ExtensionsManager {\n static process(\n extensions: Extension,\n options: ExtensionsManagerOptions,\n logger?: Logger2.ILogger,\n ) {\n return new this({extensions, options, logger}).build();\n }\n\n #schemaRegistry;\n #parserRegistry;\n #serializerRegistry;\n\n #nodeViewCreators = new Map<string, (deps: ExtensionDeps) => NodeViewConstructor>();\n #markViewCreators = new Map<string, (deps: ExtensionDeps) => MarkViewConstructor>();\n\n #pmTransformers: TransformFn[] = [];\n\n #mdForMarkup: MarkdownIt;\n #mdForText: MarkdownIt;\n #extensions: Extension;\n #builder: ExtensionBuilder;\n\n #spec!: ExtensionSpec;\n #deps!: ExtensionDeps;\n #plugins: Plugin[] = [];\n #actions: Record<string, ActionSpec> = {};\n #nodeViews: Record<string, NodeViewConstructor> = {};\n #markViews: Record<string, MarkViewConstructor> = {};\n #serializerDynamicModifier?: MarkdownSerializerDynamicModifier;\n #parserDynamicModifier?: MarkdownParserDynamicModifier;\n\n constructor({extensions, options = {}, logger = new Logger2()}: ExtensionsManagerParams) {\n this.#schemaRegistry = new SchemaSpecRegistry(undefined, options.dynamicModifiers?.schema);\n this.#parserRegistry = new ParserTokensRegistry({logger});\n this.#serializerRegistry = new SerializerTokensRegistry();\n if (options.dynamicModifiers) {\n this.#parserDynamicModifier = options.dynamicModifiers?.parser;\n this.#serializerDynamicModifier = options.dynamicModifiers?.serializer;\n }\n\n this.#extensions = extensions;\n\n const mdPreset: PresetName = options.mdOpts?.preset ?? 'default';\n this.#mdForMarkup = new MarkdownIt(mdPreset, options.mdOpts ?? {});\n this.#mdForText = new MarkdownIt(mdPreset, options.mdOpts ?? {});\n\n if (options.linkifyTlds) {\n this.#mdForMarkup.linkify.tlds(options.linkifyTlds, true);\n this.#mdForText.linkify.tlds(options.linkifyTlds, true);\n }\n\n if (options.pmTransformers) {\n this.#pmTransformers = options.pmTransformers;\n }\n\n // TODO: add prefilled context\n this.#builder = new ExtensionBuilder(logger);\n }\n\n build() {\n this.processExtensions();\n this.createDeps();\n this.createDerived();\n\n return {\n ...this.#deps,\n actions: this.#deps.actions as ActionsManager,\n rawActions: this.#actions,\n plugins: this.#plugins,\n nodeViews: this.#nodeViews,\n markViews: this.#markViews,\n };\n }\n\n buildDeps() {\n this.processExtensions();\n this.createDeps();\n return this.#deps;\n }\n\n private processExtensions() {\n this.#spec = this.#builder.use(this.#extensions).build();\n this.#mdForMarkup = this.#spec.configureMd(this.#mdForMarkup, 'markup');\n this.#mdForText = this.#spec.configureMd(this.#mdForText, 'text');\n this.#spec.nodes().forEach(this.processNode);\n this.#spec.marks().forEach(this.processMark);\n }\n\n private processNode = (name: string, {spec, fromMd, toMd: toMd, view}: ExtensionNodeSpec) => {\n this.#schemaRegistry.addNode(name, spec);\n\n this.#parserRegistry.addToken(fromMd.tokenName || name, fromMd.tokenSpec);\n this.#serializerRegistry.addNode(name, toMd);\n if (view) {\n this.#nodeViewCreators.set(name, view);\n }\n };\n\n private processMark = (name: string, {spec, fromMd, toMd, view}: ExtensionMarkSpec) => {\n this.#schemaRegistry.addMark(name, spec);\n this.#parserRegistry.addToken(fromMd.tokenName || name, fromMd.tokenSpec);\n this.#serializerRegistry.addMark(name, toMd);\n if (view) {\n this.#markViewCreators.set(name, view);\n }\n };\n\n private createParser(schema: Schema, mdInstance: MarkdownIt) {\n return this.#parserRegistry.createParser(\n schema,\n mdInstance,\n this.#pmTransformers,\n this.#parserDynamicModifier,\n );\n }\n\n private createDeps() {\n const actions = new ActionsManager();\n\n const schema = this.#schemaRegistry.createSchema();\n const markupParser = this.createParser(schema, this.#mdForMarkup);\n const textParser = this.createParser(schema, this.#mdForText);\n const serializer = this.#serializerRegistry.createSerializer(\n this.#serializerDynamicModifier,\n );\n\n this.#deps = {\n schema,\n actions,\n markupParser,\n textParser,\n serializer,\n };\n }\n\n private createDerived() {\n this.#plugins = this.#spec.plugins(this.#deps);\n Object.assign(this.#actions, this.#spec.actions(this.#deps));\n\n for (const [name, view] of this.#nodeViewCreators) {\n this.#nodeViews[name] = view(this.#deps);\n }\n\n for (const [name, view] of this.#markViewCreators) {\n this.#markViews[name] = view(this.#deps);\n }\n }\n}\n"]}
|
|
@@ -1,10 +1,16 @@
|
|
|
1
1
|
import type MarkdownIt from 'markdown-it';
|
|
2
2
|
import type { Schema } from 'prosemirror-model';
|
|
3
|
+
import type { Logger2 } from "../logger.js";
|
|
3
4
|
import { type MarkdownParserDynamicModifier } from "./markdown/MarkdownParser.js";
|
|
4
5
|
import type { TransformFn } from "./markdown/ProseMirrorTransformer/index.js";
|
|
5
6
|
import type { Parser, ParserToken } from "./types/parser.js";
|
|
7
|
+
type ParserTokensRegistryOptions = {
|
|
8
|
+
logger: Logger2.ILogger;
|
|
9
|
+
};
|
|
6
10
|
export declare class ParserTokensRegistry {
|
|
7
11
|
#private;
|
|
12
|
+
constructor(opts: ParserTokensRegistryOptions);
|
|
8
13
|
addToken(name: string, token: ParserToken): this;
|
|
9
14
|
createParser(schema: Schema, tokenizer: MarkdownIt, pmTransformers: TransformFn[], dynamicModifier?: MarkdownParserDynamicModifier): Parser;
|
|
10
15
|
}
|
|
16
|
+
export {};
|
|
@@ -4,12 +4,20 @@ exports.ParserTokensRegistry = void 0;
|
|
|
4
4
|
const MarkdownParser_1 = require("./markdown/MarkdownParser.js");
|
|
5
5
|
class ParserTokensRegistry {
|
|
6
6
|
#tokens = {};
|
|
7
|
+
#logger;
|
|
8
|
+
constructor(opts) {
|
|
9
|
+
this.#logger = opts.logger;
|
|
10
|
+
}
|
|
7
11
|
addToken(name, token) {
|
|
8
12
|
this.#tokens[name] = token;
|
|
9
13
|
return this;
|
|
10
14
|
}
|
|
11
15
|
createParser(schema, tokenizer, pmTransformers, dynamicModifier) {
|
|
12
|
-
return new MarkdownParser_1.MarkdownParser(schema, tokenizer, this.#tokens,
|
|
16
|
+
return new MarkdownParser_1.MarkdownParser(schema, tokenizer, this.#tokens, {
|
|
17
|
+
logger: this.#logger,
|
|
18
|
+
pmTransformers,
|
|
19
|
+
dynamicModifier,
|
|
20
|
+
});
|
|
13
21
|
}
|
|
14
22
|
}
|
|
15
23
|
exports.ParserTokensRegistry = ParserTokensRegistry;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ParserTokensRegistry.js","sourceRoot":"../../../src","sources":["core/ParserTokensRegistry.ts"],"names":[],"mappings":";;;
|
|
1
|
+
{"version":3,"file":"ParserTokensRegistry.js","sourceRoot":"../../../src","sources":["core/ParserTokensRegistry.ts"],"names":[],"mappings":";;;AAKA,iEAA6F;AAQ7F,MAAa,oBAAoB;IAC7B,OAAO,GAAgC,EAAE,CAAC;IAC1C,OAAO,CAAkB;IAEzB,YAAY,IAAiC;QACzC,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,MAAM,CAAC;IAC/B,CAAC;IAED,QAAQ,CAAC,IAAY,EAAE,KAAkB;QACrC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC;QAC3B,OAAO,IAAI,CAAC;IAChB,CAAC;IAED,YAAY,CACR,MAAc,EACd,SAAqB,EACrB,cAA6B,EAC7B,eAA+C;QAE/C,OAAO,IAAI,+BAAc,CAAC,MAAM,EAAE,SAAS,EAAE,IAAI,CAAC,OAAO,EAAE;YACvD,MAAM,EAAE,IAAI,CAAC,OAAO;YACpB,cAAc;YACd,eAAe;SAClB,CAAC,CAAC;IACP,CAAC;CACJ;AAzBD,oDAyBC","sourcesContent":["import type MarkdownIt from 'markdown-it';\nimport type {Schema} from 'prosemirror-model';\n\nimport type {Logger2} from '../logger';\n\nimport {MarkdownParser, type MarkdownParserDynamicModifier} from './markdown/MarkdownParser';\nimport type {TransformFn} from './markdown/ProseMirrorTransformer';\nimport type {Parser, ParserToken} from './types/parser';\n\ntype ParserTokensRegistryOptions = {\n logger: Logger2.ILogger;\n};\n\nexport class ParserTokensRegistry {\n #tokens: Record<string, ParserToken> = {};\n #logger: Logger2.ILogger;\n\n constructor(opts: ParserTokensRegistryOptions) {\n this.#logger = opts.logger;\n }\n\n addToken(name: string, token: ParserToken) {\n this.#tokens[name] = token;\n return this;\n }\n\n createParser(\n schema: Schema,\n tokenizer: MarkdownIt,\n pmTransformers: TransformFn[],\n dynamicModifier?: MarkdownParserDynamicModifier,\n ): Parser {\n return new MarkdownParser(schema, tokenizer, this.#tokens, {\n logger: this.#logger,\n pmTransformers,\n dynamicModifier,\n });\n }\n}\n"]}
|
|
@@ -2,6 +2,7 @@ export * from "./Editor.js";
|
|
|
2
2
|
export * from "./ExtensionBuilder.js";
|
|
3
3
|
export * from "./ExtensionsManager.js";
|
|
4
4
|
export { bindActions } from "./utils/actions.js";
|
|
5
|
+
export { getLoggerFromState } from "./utils/logger.js";
|
|
5
6
|
export { trackTransactionMetrics } from "./utils/metrics.js";
|
|
6
7
|
export type { Keymap } from "./types/keymap.js";
|
|
7
8
|
export type { ActionSpec, Action, ActionStorage, CommandWithAttrs } from "./types/actions.js";
|
package/build/cjs/core/index.js
CHANGED
|
@@ -1,12 +1,14 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.trackTransactionMetrics = exports.bindActions = void 0;
|
|
3
|
+
exports.trackTransactionMetrics = exports.getLoggerFromState = exports.bindActions = void 0;
|
|
4
4
|
const tslib_1 = require("tslib");
|
|
5
5
|
tslib_1.__exportStar(require("./Editor.js"), exports);
|
|
6
6
|
tslib_1.__exportStar(require("./ExtensionBuilder.js"), exports);
|
|
7
7
|
tslib_1.__exportStar(require("./ExtensionsManager.js"), exports);
|
|
8
8
|
var actions_1 = require("./utils/actions.js");
|
|
9
9
|
Object.defineProperty(exports, "bindActions", { enumerable: true, get: function () { return actions_1.bindActions; } });
|
|
10
|
+
var logger_1 = require("./utils/logger.js");
|
|
11
|
+
Object.defineProperty(exports, "getLoggerFromState", { enumerable: true, get: function () { return logger_1.getLoggerFromState; } });
|
|
10
12
|
var metrics_1 = require("./utils/metrics.js");
|
|
11
13
|
Object.defineProperty(exports, "trackTransactionMetrics", { enumerable: true, get: function () { return metrics_1.trackTransactionMetrics; } });
|
|
12
14
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"../../../src","sources":["core/index.ts"],"names":[],"mappings":";;;;AAAA,sDAAyB;AACzB,gEAAmC;AACnC,iEAAoC;AACpC,8CAA4C;AAApC,sGAAA,WAAW,OAAA;AACnB,8CAAwD;AAAhD,kHAAA,uBAAuB,OAAA","sourcesContent":["export * from './Editor';\nexport * from './ExtensionBuilder';\nexport * from './ExtensionsManager';\nexport {bindActions} from './utils/actions';\nexport {trackTransactionMetrics} from './utils/metrics';\nexport type {Keymap} from './types/keymap';\nexport type {ActionSpec, Action, ActionStorage, CommandWithAttrs} from './types/actions';\nexport type {\n Extension,\n ExtensionAuto,\n ExtensionWithOptions,\n ExtensionDeps,\n ExtensionNodeSpec,\n ExtensionMarkSpec,\n} from './types/extension';\nexport type {Parser, ParserToken} from './types/parser';\nexport type {\n Serializer,\n SerializerState,\n SerializerNodeToken,\n SerializerMarkToken,\n} from './types/serializer';\nexport type {NodeViewConstructor, MarkViewConstructor} from './types/node-views';\n\nexport type {MarkdownParserDynamicModifierConfig} from './markdown/MarkdownParser';\nexport type {MarkdownSerializerDynamicModifierConfig} from './markdown/MarkdownSerializerDynamicModifier';\n"]}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"../../../src","sources":["core/index.ts"],"names":[],"mappings":";;;;AAAA,sDAAyB;AACzB,gEAAmC;AACnC,iEAAoC;AACpC,8CAA4C;AAApC,sGAAA,WAAW,OAAA;AACnB,4CAAkD;AAA1C,4GAAA,kBAAkB,OAAA;AAC1B,8CAAwD;AAAhD,kHAAA,uBAAuB,OAAA","sourcesContent":["export * from './Editor';\nexport * from './ExtensionBuilder';\nexport * from './ExtensionsManager';\nexport {bindActions} from './utils/actions';\nexport {getLoggerFromState} from './utils/logger';\nexport {trackTransactionMetrics} from './utils/metrics';\nexport type {Keymap} from './types/keymap';\nexport type {ActionSpec, Action, ActionStorage, CommandWithAttrs} from './types/actions';\nexport type {\n Extension,\n ExtensionAuto,\n ExtensionWithOptions,\n ExtensionDeps,\n ExtensionNodeSpec,\n ExtensionMarkSpec,\n} from './types/extension';\nexport type {Parser, ParserToken} from './types/parser';\nexport type {\n Serializer,\n SerializerState,\n SerializerNodeToken,\n SerializerMarkToken,\n} from './types/serializer';\nexport type {NodeViewConstructor, MarkViewConstructor} from './types/node-views';\n\nexport type {MarkdownParserDynamicModifierConfig} from './markdown/MarkdownParser';\nexport type {MarkdownSerializerDynamicModifierConfig} from './markdown/MarkdownSerializerDynamicModifier';\n"]}
|
|
@@ -2,11 +2,17 @@ import type { Match } from 'linkify-it';
|
|
|
2
2
|
import type MarkdownIt from 'markdown-it';
|
|
3
3
|
import type Token from 'markdown-it/lib/token';
|
|
4
4
|
import { Mark, type Node, type NodeType, type Schema } from 'prosemirror-model';
|
|
5
|
+
import { type Logger2 } from "../../logger.js";
|
|
5
6
|
import type { Parser, ParserToken } from "../types/parser.js";
|
|
6
7
|
import { type TransformFn } from "./ProseMirrorTransformer/index.js";
|
|
7
8
|
export type TokenAttrs = {
|
|
8
9
|
[name: string]: unknown;
|
|
9
10
|
};
|
|
11
|
+
type MarkdownParserOptions = {
|
|
12
|
+
logger: Logger2.ILogger;
|
|
13
|
+
pmTransformers: TransformFn[];
|
|
14
|
+
dynamicModifier?: MarkdownParserDynamicModifier;
|
|
15
|
+
};
|
|
10
16
|
export declare class MarkdownParser implements Parser {
|
|
11
17
|
schema: Schema;
|
|
12
18
|
stack: Array<{
|
|
@@ -19,7 +25,8 @@ export declare class MarkdownParser implements Parser {
|
|
|
19
25
|
tokenizer: MarkdownIt;
|
|
20
26
|
pmTransformers: TransformFn[];
|
|
21
27
|
dynamicModifier: MarkdownParserDynamicModifier | null;
|
|
22
|
-
|
|
28
|
+
private logger;
|
|
29
|
+
constructor(schema: Schema, tokenizer: MarkdownIt, tokens: Record<string, ParserToken>, opts: MarkdownParserOptions);
|
|
23
30
|
validateLink(url: string): boolean;
|
|
24
31
|
normalizeLink(url: string): string;
|
|
25
32
|
normalizeLinkText(url: string): string;
|
|
@@ -46,3 +53,4 @@ export declare class MarkdownParser implements Parser {
|
|
|
46
53
|
}
|
|
47
54
|
export type ProcessNodeAttrs = (token: Token, attrs: TokenAttrs, allowedAttrs?: string[]) => TokenAttrs;
|
|
48
55
|
export type ProcessNode = (node: Node) => Node;
|
|
56
|
+
export {};
|
|
@@ -28,13 +28,15 @@ class MarkdownParser {
|
|
|
28
28
|
tokenizer;
|
|
29
29
|
pmTransformers;
|
|
30
30
|
dynamicModifier;
|
|
31
|
-
|
|
31
|
+
logger;
|
|
32
|
+
constructor(schema, tokenizer, tokens, opts) {
|
|
32
33
|
this.schema = schema;
|
|
33
34
|
this.marks = prosemirror_model_1.Mark.none;
|
|
34
35
|
this.tokens = tokens;
|
|
35
36
|
this.tokenizer = tokenizer;
|
|
36
|
-
this.pmTransformers = pmTransformers;
|
|
37
|
-
this.dynamicModifier = dynamicModifier ?? null;
|
|
37
|
+
this.pmTransformers = opts.pmTransformers;
|
|
38
|
+
this.dynamicModifier = opts.dynamicModifier ?? null;
|
|
39
|
+
this.logger = opts.logger.nested({ module: 'markdown-parser' });
|
|
38
40
|
}
|
|
39
41
|
validateLink(url) {
|
|
40
42
|
return this.tokenizer.validateLink(url);
|
|
@@ -62,6 +64,7 @@ class MarkdownParser {
|
|
|
62
64
|
catch (err) {
|
|
63
65
|
const e = err;
|
|
64
66
|
e.message = 'Unable to parse your markup. Please check for errors. ' + e.message;
|
|
67
|
+
this.logger.error(e);
|
|
65
68
|
throw e;
|
|
66
69
|
}
|
|
67
70
|
this.parseTokens(mdItTokens);
|
|
@@ -75,6 +78,7 @@ class MarkdownParser {
|
|
|
75
78
|
}
|
|
76
79
|
finally {
|
|
77
80
|
logger_1.logger.metrics({ component: 'parser', event: 'parse', duration: Date.now() - time });
|
|
81
|
+
this.logger.metrics({ component: 'parser', event: 'parse', duration: Date.now() - time });
|
|
78
82
|
}
|
|
79
83
|
}
|
|
80
84
|
top() {
|