@payloadcms/richtext-lexical 4.0.0-internal.e55ccef → 4.0.0-internal.ea6e8f8
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/dist/exports/client/Field-MT4FK3IP.js +2 -0
- package/dist/exports/client/Field-MT4FK3IP.js.map +7 -0
- package/dist/exports/client/chunk-3LRZDIIG.js +2 -0
- package/dist/exports/client/{chunk-X3D4LZS7.js.map → chunk-3LRZDIIG.js.map} +4 -4
- package/dist/exports/client/chunk-E6LSRRP2.js +2 -0
- package/dist/exports/client/chunk-E6LSRRP2.js.map +7 -0
- package/dist/exports/client/chunk-ZQX5HXUL.js +2 -0
- package/dist/exports/client/chunk-ZQX5HXUL.js.map +7 -0
- package/dist/exports/client/component-6DQLENIE.js +2 -0
- package/dist/exports/client/component-6DQLENIE.js.map +7 -0
- package/dist/exports/client/componentInline-HNE5G4TE.js +2 -0
- package/dist/exports/client/index.d.ts +1 -1
- package/dist/exports/client/index.d.ts.map +1 -1
- package/dist/exports/client/index.js +23 -23
- package/dist/exports/client/index.js.map +4 -4
- package/dist/features/blocks/client/component/BlockReordering/index.d.ts +11 -0
- package/dist/features/blocks/client/component/BlockReordering/index.d.ts.map +1 -0
- package/dist/features/blocks/client/component/BlockReordering/index.js +18 -0
- package/dist/features/blocks/client/component/BlockReordering/index.js.map +1 -0
- package/dist/features/blocks/client/component/index.d.ts +0 -6
- package/dist/features/blocks/client/component/index.d.ts.map +1 -1
- package/dist/features/blocks/client/component/index.js +169 -101
- package/dist/features/blocks/client/component/index.js.map +1 -1
- package/dist/features/blocks/client/component/useBlockReordering.d.ts +16 -0
- package/dist/features/blocks/client/component/useBlockReordering.d.ts.map +1 -0
- package/dist/features/blocks/client/component/useBlockReordering.js +178 -0
- package/dist/features/blocks/client/component/useBlockReordering.js.map +1 -0
- package/dist/features/blocks/client/componentInline/index.css +0 -1
- package/dist/features/blocks/client/componentInline/index.d.ts.map +1 -1
- package/dist/features/blocks/client/componentInline/index.js +30 -22
- package/dist/features/blocks/client/componentInline/index.js.map +1 -1
- package/dist/features/blocks/client/getCachedFormStateIfDataMatches.d.ts +9 -0
- package/dist/features/blocks/client/getCachedFormStateIfDataMatches.d.ts.map +1 -0
- package/dist/features/blocks/client/getCachedFormStateIfDataMatches.js +95 -0
- package/dist/features/blocks/client/getCachedFormStateIfDataMatches.js.map +1 -0
- package/dist/features/blocks/client/nodes/BlocksNode.d.ts.map +1 -1
- package/dist/features/blocks/client/nodes/BlocksNode.js +0 -10
- package/dist/features/blocks/client/nodes/BlocksNode.js.map +1 -1
- package/dist/features/blocks/server/index.js +2 -2
- package/dist/features/blocks/server/index.js.map +1 -1
- package/dist/features/blocks/server/nodes/BlocksNode.d.ts.map +1 -1
- package/dist/features/blocks/server/nodes/BlocksNode.js +1 -12
- package/dist/features/blocks/server/nodes/BlocksNode.js.map +1 -1
- package/dist/features/blocks/server/nodes/InlineBlocksNode.js +2 -2
- package/dist/features/blocks/server/nodes/InlineBlocksNode.js.map +1 -1
- package/dist/features/blocks/server/schema.d.ts +2 -0
- package/dist/features/blocks/server/schema.d.ts.map +1 -1
- package/dist/features/blocks/server/schema.js +7 -9
- package/dist/features/blocks/server/schema.js.map +1 -1
- package/dist/features/blocks/server/validate.js +1 -1
- package/dist/features/blocks/server/validate.js.map +1 -1
- package/dist/features/converters/lexicalToHtml/async/converters/heading.js +1 -1
- package/dist/features/converters/lexicalToHtml/async/converters/heading.js.map +1 -1
- package/dist/features/converters/lexicalToHtml/async/converters/list.d.ts.map +1 -1
- package/dist/features/converters/lexicalToHtml/async/converters/list.js +4 -3
- package/dist/features/converters/lexicalToHtml/async/converters/list.js.map +1 -1
- package/dist/features/converters/lexicalToHtml/async/converters/upload.js +3 -3
- package/dist/features/converters/lexicalToHtml/async/converters/upload.js.map +1 -1
- package/dist/features/converters/lexicalToHtml/shared/findConverterForNode.d.ts.map +1 -1
- package/dist/features/converters/lexicalToHtml/shared/findConverterForNode.js +3 -2
- package/dist/features/converters/lexicalToHtml/shared/findConverterForNode.js.map +1 -1
- package/dist/features/converters/lexicalToHtml/sync/converters/heading.js +1 -1
- package/dist/features/converters/lexicalToHtml/sync/converters/heading.js.map +1 -1
- package/dist/features/converters/lexicalToHtml/sync/converters/list.d.ts.map +1 -1
- package/dist/features/converters/lexicalToHtml/sync/converters/list.js +4 -3
- package/dist/features/converters/lexicalToHtml/sync/converters/list.js.map +1 -1
- package/dist/features/converters/lexicalToHtml/sync/converters/upload.js +3 -3
- package/dist/features/converters/lexicalToHtml/sync/converters/upload.js.map +1 -1
- package/dist/features/converters/lexicalToJSX/converter/converters/heading.d.ts.map +1 -1
- package/dist/features/converters/lexicalToJSX/converter/converters/heading.js +2 -1
- package/dist/features/converters/lexicalToJSX/converter/converters/heading.js.map +1 -1
- package/dist/features/converters/lexicalToJSX/converter/converters/list.d.ts.map +1 -1
- package/dist/features/converters/lexicalToJSX/converter/converters/list.js +2 -1
- package/dist/features/converters/lexicalToJSX/converter/converters/list.js.map +1 -1
- package/dist/features/converters/lexicalToJSX/converter/converters/upload.d.ts.map +1 -1
- package/dist/features/converters/lexicalToJSX/converter/converters/upload.js +4 -5
- package/dist/features/converters/lexicalToJSX/converter/converters/upload.js.map +1 -1
- package/dist/features/converters/utilities/payloadPopulateFn.d.ts.map +1 -1
- package/dist/features/converters/utilities/payloadPopulateFn.js +4 -2
- package/dist/features/converters/utilities/payloadPopulateFn.js.map +1 -1
- package/dist/features/debug/testRecorder/client/plugin/index.css +0 -1
- package/dist/features/heading/constants.d.ts +2 -0
- package/dist/features/heading/constants.d.ts.map +1 -0
- package/dist/features/heading/constants.js +2 -0
- package/dist/features/heading/constants.js.map +1 -0
- package/dist/features/heading/server/index.d.ts.map +1 -1
- package/dist/features/heading/server/index.js +5 -1
- package/dist/features/heading/server/index.js.map +1 -1
- package/dist/features/heading/server/validate.d.ts +6 -0
- package/dist/features/heading/server/validate.d.ts.map +1 -0
- package/dist/features/heading/server/validate.js +15 -0
- package/dist/features/heading/server/validate.js.map +1 -0
- package/dist/features/horizontalRule/client/nodes/HorizontalRuleNode.d.ts +12 -2
- package/dist/features/horizontalRule/client/nodes/HorizontalRuleNode.d.ts.map +1 -1
- package/dist/features/horizontalRule/client/nodes/HorizontalRuleNode.js +18 -1
- package/dist/features/horizontalRule/client/nodes/HorizontalRuleNode.js.map +1 -1
- package/dist/features/horizontalRule/server/nodes/HorizontalRuleNode.d.ts +1 -1
- package/dist/features/horizontalRule/server/nodes/HorizontalRuleNode.d.ts.map +1 -1
- package/dist/features/horizontalRule/server/nodes/HorizontalRuleNode.js +3 -3
- package/dist/features/horizontalRule/server/nodes/HorizontalRuleNode.js.map +1 -1
- package/dist/features/horizontalRule/server/schema.d.ts +1 -0
- package/dist/features/horizontalRule/server/schema.d.ts.map +1 -1
- package/dist/features/horizontalRule/server/schema.js +6 -5
- package/dist/features/horizontalRule/server/schema.js.map +1 -1
- package/dist/features/indent/client/IndentPlugin.d.ts.map +1 -1
- package/dist/features/indent/client/IndentPlugin.js +122 -1
- package/dist/features/indent/client/IndentPlugin.js.map +1 -1
- package/dist/features/indent/server/i18n.d.ts.map +1 -1
- package/dist/features/indent/server/i18n.js +74 -37
- package/dist/features/indent/server/i18n.js.map +1 -1
- package/dist/features/link/client/plugins/floatingLinkEditor/LinkEditor/index.d.ts.map +1 -1
- package/dist/features/link/client/plugins/floatingLinkEditor/LinkEditor/index.js +8 -5
- package/dist/features/link/client/plugins/floatingLinkEditor/LinkEditor/index.js.map +1 -1
- package/dist/features/link/client/plugins/floatingLinkEditor/index.css +0 -2
- package/dist/features/link/nodes/AutoLinkNode.d.ts +1 -1
- package/dist/features/link/nodes/AutoLinkNode.d.ts.map +1 -1
- package/dist/features/link/nodes/AutoLinkNode.js +2 -10
- package/dist/features/link/nodes/AutoLinkNode.js.map +1 -1
- package/dist/features/link/nodes/LinkNode.d.ts +1 -1
- package/dist/features/link/nodes/LinkNode.d.ts.map +1 -1
- package/dist/features/link/nodes/LinkNode.js +2 -15
- package/dist/features/link/nodes/LinkNode.js.map +1 -1
- package/dist/features/link/server/index.js +2 -2
- package/dist/features/link/server/index.js.map +1 -1
- package/dist/features/link/server/validate.js +1 -1
- package/dist/features/link/server/validate.js.map +1 -1
- package/dist/features/lists/checklist/server/index.d.ts.map +1 -1
- package/dist/features/lists/checklist/server/index.js +5 -2
- package/dist/features/lists/checklist/server/index.js.map +1 -1
- package/dist/features/lists/orderedList/server/index.d.ts.map +1 -1
- package/dist/features/lists/orderedList/server/index.js +5 -2
- package/dist/features/lists/orderedList/server/index.js.map +1 -1
- package/dist/features/lists/shared/constants.d.ts +2 -0
- package/dist/features/lists/shared/constants.d.ts.map +1 -0
- package/dist/features/lists/shared/constants.js +2 -0
- package/dist/features/lists/shared/constants.js.map +1 -0
- package/dist/features/lists/shared/validate.d.ts +5 -0
- package/dist/features/lists/shared/validate.d.ts.map +1 -0
- package/dist/features/lists/shared/validate.js +15 -0
- package/dist/features/lists/shared/validate.js.map +1 -0
- package/dist/features/lists/unorderedList/server/index.d.ts.map +1 -1
- package/dist/features/lists/unorderedList/server/index.js +5 -2
- package/dist/features/lists/unorderedList/server/index.js.map +1 -1
- package/dist/features/relationship/client/components/index.css +3 -6
- package/dist/features/relationship/client/index.d.ts +2 -2
- package/dist/features/relationship/client/index.d.ts.map +1 -1
- package/dist/features/relationship/client/index.js.map +1 -1
- package/dist/features/relationship/client/nodes/RelationshipNode.d.ts.map +1 -1
- package/dist/features/relationship/client/nodes/RelationshipNode.js +0 -3
- package/dist/features/relationship/client/nodes/RelationshipNode.js.map +1 -1
- package/dist/features/relationship/client/plugins/index.d.ts +2 -2
- package/dist/features/relationship/client/plugins/index.d.ts.map +1 -1
- package/dist/features/relationship/client/plugins/index.js +27 -31
- package/dist/features/relationship/client/plugins/index.js.map +1 -1
- package/dist/features/relationship/client/utils/useEnabledRelationships.d.ts +2 -4
- package/dist/features/relationship/client/utils/useEnabledRelationships.d.ts.map +1 -1
- package/dist/features/relationship/client/utils/useEnabledRelationships.js +53 -20
- package/dist/features/relationship/client/utils/useEnabledRelationships.js.map +1 -1
- package/dist/features/relationship/server/graphQLPopulationPromise.d.ts +2 -2
- package/dist/features/relationship/server/graphQLPopulationPromise.d.ts.map +1 -1
- package/dist/features/relationship/server/graphQLPopulationPromise.js +2 -2
- package/dist/features/relationship/server/graphQLPopulationPromise.js.map +1 -1
- package/dist/features/relationship/server/index.d.ts +8 -1
- package/dist/features/relationship/server/index.d.ts.map +1 -1
- package/dist/features/relationship/server/index.js +28 -11
- package/dist/features/relationship/server/index.js.map +1 -1
- package/dist/features/relationship/server/nodes/RelationshipNode.d.ts.map +1 -1
- package/dist/features/relationship/server/nodes/RelationshipNode.js +1 -5
- package/dist/features/relationship/server/nodes/RelationshipNode.js.map +1 -1
- package/dist/features/relationship/server/schema.d.ts +3 -2
- package/dist/features/relationship/server/schema.d.ts.map +1 -1
- package/dist/features/relationship/server/schema.js +9 -12
- package/dist/features/relationship/server/schema.js.map +1 -1
- package/dist/features/relationship/shared/filterEnabledRelationshipCollections.d.ts +1 -6
- package/dist/features/relationship/shared/filterEnabledRelationshipCollections.d.ts.map +1 -1
- package/dist/features/relationship/shared/filterEnabledRelationshipCollections.js +1 -5
- package/dist/features/relationship/shared/filterEnabledRelationshipCollections.js.map +1 -1
- package/dist/features/table/client/index.d.ts.map +1 -0
- package/dist/features/table/client/index.js.map +1 -0
- package/dist/features/table/client/plugins/TableActionMenuPlugin/computeSelectionCount.d.ts +8 -0
- package/dist/features/table/client/plugins/TableActionMenuPlugin/computeSelectionCount.d.ts.map +1 -0
- package/dist/features/table/client/plugins/TableActionMenuPlugin/computeSelectionCount.js +19 -0
- package/dist/features/table/client/plugins/TableActionMenuPlugin/computeSelectionCount.js.map +1 -0
- package/dist/features/{experimental_table → table}/client/plugins/TableActionMenuPlugin/index.css +0 -1
- package/dist/features/table/client/plugins/TableActionMenuPlugin/index.d.ts.map +1 -0
- package/dist/features/{experimental_table → table}/client/plugins/TableActionMenuPlugin/index.js +17 -44
- package/dist/features/table/client/plugins/TableActionMenuPlugin/index.js.map +1 -0
- package/dist/features/table/client/plugins/TableCellResizerPlugin/index.d.ts.map +1 -0
- package/dist/features/{experimental_table → table}/client/plugins/TableCellResizerPlugin/index.js +41 -18
- package/dist/features/table/client/plugins/TableCellResizerPlugin/index.js.map +1 -0
- package/dist/features/table/client/plugins/TableHoverActionsPlugin/index.d.ts.map +1 -0
- package/dist/features/table/client/plugins/TableHoverActionsPlugin/index.js.map +1 -0
- package/dist/features/{experimental_table → table}/client/plugins/TablePlugin/TableGridPopup/index.css +0 -3
- package/dist/features/table/client/plugins/TablePlugin/TableGridPopup/index.d.ts.map +1 -0
- package/dist/features/table/client/plugins/TablePlugin/TableGridPopup/index.js.map +1 -0
- package/dist/features/table/client/plugins/TablePlugin/index.d.ts.map +1 -0
- package/dist/features/table/client/plugins/TablePlugin/index.js.map +1 -0
- package/dist/features/table/client/utils/debounce.d.ts.map +1 -0
- package/dist/features/table/client/utils/debounce.js.map +1 -0
- package/dist/features/table/client/utils/useDebounce.d.ts.map +1 -0
- package/dist/features/table/client/utils/useDebounce.js.map +1 -0
- package/dist/features/table/markdownTransformer.d.ts.map +1 -0
- package/dist/features/table/markdownTransformer.js.map +1 -0
- package/dist/features/table/server/index.d.ts +3 -0
- package/dist/features/table/server/index.d.ts.map +1 -0
- package/dist/features/{experimental_table → table}/server/index.js +4 -4
- package/dist/features/table/server/index.js.map +1 -0
- package/dist/features/table/server/schema.d.ts.map +1 -0
- package/dist/features/table/server/schema.js.map +1 -0
- package/dist/features/toolbars/fixed/client/Toolbar/horizontalWheelScroll.d.ts +8 -0
- package/dist/features/toolbars/fixed/client/Toolbar/horizontalWheelScroll.d.ts.map +1 -0
- package/dist/features/toolbars/fixed/client/Toolbar/horizontalWheelScroll.js +80 -0
- package/dist/features/toolbars/fixed/client/Toolbar/horizontalWheelScroll.js.map +1 -0
- package/dist/features/toolbars/fixed/client/Toolbar/index.css +78 -6
- package/dist/features/toolbars/fixed/client/Toolbar/index.d.ts.map +1 -1
- package/dist/features/toolbars/fixed/client/Toolbar/index.js +4 -1
- package/dist/features/toolbars/fixed/client/Toolbar/index.js.map +1 -1
- package/dist/features/toolbars/inline/client/Toolbar/index.css +0 -1
- package/dist/features/toolbars/inline/client/Toolbar/index.d.ts.map +1 -1
- package/dist/features/toolbars/inline/client/Toolbar/index.js +2 -2
- package/dist/features/toolbars/inline/client/Toolbar/index.js.map +1 -1
- package/dist/features/toolbars/shared/ToolbarButton/index.d.ts.map +1 -1
- package/dist/features/toolbars/shared/ToolbarButton/index.js +1 -0
- package/dist/features/toolbars/shared/ToolbarButton/index.js.map +1 -1
- package/dist/features/toolbars/shared/ToolbarDropdown/DropDown.d.ts.map +1 -1
- package/dist/features/toolbars/shared/ToolbarDropdown/DropDown.js +85 -32
- package/dist/features/toolbars/shared/ToolbarDropdown/DropDown.js.map +1 -1
- package/dist/features/toolbars/shared/ToolbarDropdown/index.css +16 -14
- package/dist/features/typesServer.d.ts +17 -12
- package/dist/features/typesServer.d.ts.map +1 -1
- package/dist/features/typesServer.js.map +1 -1
- package/dist/features/upload/client/component/index.css +0 -2
- package/dist/features/upload/client/component/index.js +2 -1
- package/dist/features/upload/client/component/index.js.map +1 -1
- package/dist/features/upload/client/index.d.ts +3 -2
- package/dist/features/upload/client/index.d.ts.map +1 -1
- package/dist/features/upload/client/index.js.map +1 -1
- package/dist/features/upload/client/nodes/UploadNode.d.ts.map +1 -1
- package/dist/features/upload/client/nodes/UploadNode.js +0 -7
- package/dist/features/upload/client/nodes/UploadNode.js.map +1 -1
- package/dist/features/upload/client/plugin/index.d.ts.map +1 -1
- package/dist/features/upload/client/plugin/index.js +50 -53
- package/dist/features/upload/client/plugin/index.js.map +1 -1
- package/dist/features/upload/server/graphQLPopulationPromise.d.ts +2 -2
- package/dist/features/upload/server/graphQLPopulationPromise.d.ts.map +1 -1
- package/dist/features/upload/server/graphQLPopulationPromise.js +1 -1
- package/dist/features/upload/server/graphQLPopulationPromise.js.map +1 -1
- package/dist/features/upload/server/index.d.ts +7 -3
- package/dist/features/upload/server/index.d.ts.map +1 -1
- package/dist/features/upload/server/index.js +20 -16
- package/dist/features/upload/server/index.js.map +1 -1
- package/dist/features/upload/server/nodes/UploadNode.d.ts.map +1 -1
- package/dist/features/upload/server/nodes/UploadNode.js +1 -9
- package/dist/features/upload/server/nodes/UploadNode.js.map +1 -1
- package/dist/features/upload/server/schema.d.ts +4 -16
- package/dist/features/upload/server/schema.d.ts.map +1 -1
- package/dist/features/upload/server/schema.js +8 -10
- package/dist/features/upload/server/schema.js.map +1 -1
- package/dist/features/upload/server/validate.d.ts +2 -2
- package/dist/features/upload/server/validate.d.ts.map +1 -1
- package/dist/features/upload/server/validate.js +4 -1
- package/dist/features/upload/server/validate.js.map +1 -1
- package/dist/field/Diff/converters/listitem/index.d.ts.map +1 -1
- package/dist/field/Diff/converters/listitem/index.js +2 -1
- package/dist/field/Diff/converters/listitem/index.js.map +1 -1
- package/dist/field/Diff/converters/relationship/index.css +0 -1
- package/dist/field/Diff/converters/unknown/index.css +0 -1
- package/dist/field/Diff/converters/upload/index.css +0 -1
- package/dist/field/Diff/converters/upload/index.js.map +1 -1
- package/dist/field/Diff/index.css +0 -2
- package/dist/field/Diff/index.d.ts +3 -2
- package/dist/field/Diff/index.d.ts.map +1 -1
- package/dist/field/Diff/index.js +3 -2
- package/dist/field/Diff/index.js.map +1 -1
- package/dist/field/Field.d.ts.map +1 -1
- package/dist/field/Field.js +8 -1
- package/dist/field/Field.js.map +1 -1
- package/dist/field/RenderLexical/index.d.ts +3 -1
- package/dist/field/RenderLexical/index.d.ts.map +1 -1
- package/dist/field/RenderLexical/index.js +23 -23
- package/dist/field/RenderLexical/index.js.map +1 -1
- package/dist/field/ViewSelector.d.ts.map +1 -1
- package/dist/field/ViewSelector.js +1 -0
- package/dist/field/ViewSelector.js.map +1 -1
- package/dist/field/bundled.css +1 -1
- package/dist/field/index.css +10 -11
- package/dist/i18n.d.ts.map +1 -1
- package/dist/i18n.js +68 -0
- package/dist/i18n.js.map +1 -1
- package/dist/index.d.ts +2 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +27 -5
- package/dist/index.js.map +1 -1
- package/dist/lexical/LexicalEditor.css +30 -21
- package/dist/lexical/LexicalEditor.d.ts.map +1 -1
- package/dist/lexical/LexicalEditor.js +61 -64
- package/dist/lexical/LexicalEditor.js.map +1 -1
- package/dist/lexical/config/server/loader.d.ts +1 -1
- package/dist/lexical/config/server/loader.d.ts.map +1 -1
- package/dist/lexical/config/server/loader.js +2 -2
- package/dist/lexical/config/server/loader.js.map +1 -1
- package/dist/lexical/config/server/sanitize.d.ts +1 -1
- package/dist/lexical/config/server/sanitize.d.ts.map +1 -1
- package/dist/lexical/config/server/sanitize.js +2 -2
- package/dist/lexical/config/server/sanitize.js.map +1 -1
- package/dist/lexical/plugins/DecoratorPlugin/index.d.ts.map +1 -1
- package/dist/lexical/plugins/DecoratorPlugin/index.js +24 -21
- package/dist/lexical/plugins/DecoratorPlugin/index.js.map +1 -1
- package/dist/lexical/plugins/InsertParagraphAtEnd/index.css +18 -25
- package/dist/lexical/plugins/InsertParagraphAtEnd/index.d.ts.map +1 -1
- package/dist/lexical/plugins/InsertParagraphAtEnd/index.js +27 -14
- package/dist/lexical/plugins/InsertParagraphAtEnd/index.js.map +1 -1
- package/dist/lexical/plugins/SlashMenu/LexicalTypeaheadMenuPlugin/LexicalMenu.d.ts +0 -1
- package/dist/lexical/plugins/SlashMenu/LexicalTypeaheadMenuPlugin/LexicalMenu.d.ts.map +1 -1
- package/dist/lexical/plugins/SlashMenu/LexicalTypeaheadMenuPlugin/LexicalMenu.js +2 -21
- package/dist/lexical/plugins/SlashMenu/LexicalTypeaheadMenuPlugin/LexicalMenu.js.map +1 -1
- package/dist/lexical/plugins/SlashMenu/index.css +0 -2
- package/dist/lexical/plugins/handles/AddBlockHandlePlugin/index.css +1 -0
- package/dist/lexical/plugins/handles/AddBlockHandlePlugin/index.js +2 -2
- package/dist/lexical/plugins/handles/AddBlockHandlePlugin/index.js.map +1 -1
- package/dist/lexical/plugins/handles/DraggableBlockPlugin/index.css +1 -0
- package/dist/lexical/plugins/handles/DraggableBlockPlugin/index.d.ts.map +1 -1
- package/dist/lexical/plugins/handles/DraggableBlockPlugin/index.js +16 -2
- package/dist/lexical/plugins/handles/DraggableBlockPlugin/index.js.map +1 -1
- package/dist/lexical/plugins/handles/DraggableBlockPlugin/useKeyboardReordering.d.ts +7 -0
- package/dist/lexical/plugins/handles/DraggableBlockPlugin/useKeyboardReordering.d.ts.map +1 -0
- package/dist/lexical/plugins/handles/DraggableBlockPlugin/useKeyboardReordering.js +65 -0
- package/dist/lexical/plugins/handles/DraggableBlockPlugin/useKeyboardReordering.js.map +1 -0
- package/dist/lexical/plugins/handles/utils/setHandlePosition.d.ts.map +1 -1
- package/dist/lexical/plugins/handles/utils/setHandlePosition.js +2 -0
- package/dist/lexical/plugins/handles/utils/setHandlePosition.js.map +1 -1
- package/dist/lexical/theme/EditorTheme.css +0 -2
- package/dist/lexical/ui/ContentEditable.css +16 -15
- package/dist/lexical/ui/ContentEditable.d.ts +2 -1
- package/dist/lexical/ui/ContentEditable.d.ts.map +1 -1
- package/dist/lexical/ui/ContentEditable.js +21 -7
- package/dist/lexical/ui/ContentEditable.js.map +1 -1
- package/dist/lexical/ui/icons/H3/index.d.ts.map +1 -1
- package/dist/lexical/ui/icons/H3/index.js +13 -6
- package/dist/lexical/ui/icons/H3/index.js.map +1 -1
- package/dist/lexical/ui/icons/H4/index.d.ts.map +1 -1
- package/dist/lexical/ui/icons/H4/index.js +13 -6
- package/dist/lexical/ui/icons/H4/index.js.map +1 -1
- package/dist/lexical/ui/icons/H5/index.d.ts.map +1 -1
- package/dist/lexical/ui/icons/H5/index.js +13 -6
- package/dist/lexical/ui/icons/H5/index.js.map +1 -1
- package/dist/lexical/ui/icons/H6/index.d.ts.map +1 -1
- package/dist/lexical/ui/icons/H6/index.js +13 -6
- package/dist/lexical/ui/icons/H6/index.js.map +1 -1
- package/dist/lexical-proxy/@lexical-react/ExtensionComponent.d.ts +2 -0
- package/dist/lexical-proxy/@lexical-react/ExtensionComponent.d.ts.map +1 -0
- package/dist/lexical-proxy/@lexical-react/ExtensionComponent.js +2 -0
- package/dist/lexical-proxy/@lexical-react/ExtensionComponent.js.map +1 -0
- package/dist/lexical-proxy/@lexical-react/LexicalExtensionComposer.d.ts +2 -0
- package/dist/lexical-proxy/@lexical-react/LexicalExtensionComposer.d.ts.map +1 -0
- package/dist/lexical-proxy/@lexical-react/LexicalExtensionComposer.js +2 -0
- package/dist/lexical-proxy/@lexical-react/LexicalExtensionComposer.js.map +1 -0
- package/dist/lexical-proxy/@lexical-react/LexicalExtensionEditorComposer.d.ts +2 -0
- package/dist/lexical-proxy/@lexical-react/LexicalExtensionEditorComposer.d.ts.map +1 -0
- package/dist/lexical-proxy/@lexical-react/LexicalExtensionEditorComposer.js +2 -0
- package/dist/lexical-proxy/@lexical-react/LexicalExtensionEditorComposer.js.map +1 -0
- package/dist/lexical-proxy/@lexical-react/LexicalSelectionAlwaysOnDisplay.d.ts +2 -0
- package/dist/lexical-proxy/@lexical-react/LexicalSelectionAlwaysOnDisplay.d.ts.map +1 -0
- package/dist/lexical-proxy/@lexical-react/LexicalSelectionAlwaysOnDisplay.js +2 -0
- package/dist/lexical-proxy/@lexical-react/LexicalSelectionAlwaysOnDisplay.js.map +1 -0
- package/dist/lexical-proxy/@lexical-react/ReactExtension.d.ts +2 -0
- package/dist/lexical-proxy/@lexical-react/ReactExtension.d.ts.map +1 -0
- package/dist/lexical-proxy/@lexical-react/ReactExtension.js +2 -0
- package/dist/lexical-proxy/@lexical-react/ReactExtension.js.map +1 -0
- package/dist/lexical-proxy/@lexical-react/ReactPluginHostExtension.d.ts +2 -0
- package/dist/lexical-proxy/@lexical-react/ReactPluginHostExtension.d.ts.map +1 -0
- package/dist/lexical-proxy/@lexical-react/ReactPluginHostExtension.js +2 -0
- package/dist/lexical-proxy/@lexical-react/ReactPluginHostExtension.js.map +1 -0
- package/dist/lexical-proxy/@lexical-react/ReactProviderExtension.d.ts +2 -0
- package/dist/lexical-proxy/@lexical-react/ReactProviderExtension.d.ts.map +1 -0
- package/dist/lexical-proxy/@lexical-react/ReactProviderExtension.js +2 -0
- package/dist/lexical-proxy/@lexical-react/ReactProviderExtension.js.map +1 -0
- package/dist/lexical-proxy/@lexical-react/TreeViewExtension.d.ts +2 -0
- package/dist/lexical-proxy/@lexical-react/TreeViewExtension.d.ts.map +1 -0
- package/dist/lexical-proxy/@lexical-react/TreeViewExtension.js +2 -0
- package/dist/lexical-proxy/@lexical-react/TreeViewExtension.js.map +1 -0
- package/dist/lexical-proxy/@lexical-react/useExtensionComponent.d.ts +2 -0
- package/dist/lexical-proxy/@lexical-react/useExtensionComponent.d.ts.map +1 -0
- package/dist/lexical-proxy/@lexical-react/useExtensionComponent.js +2 -0
- package/dist/lexical-proxy/@lexical-react/useExtensionComponent.js.map +1 -0
- package/dist/lexical-proxy/@lexical-react/useExtensionSignalValue.d.ts +2 -0
- package/dist/lexical-proxy/@lexical-react/useExtensionSignalValue.d.ts.map +1 -0
- package/dist/lexical-proxy/@lexical-react/useExtensionSignalValue.js +2 -0
- package/dist/lexical-proxy/@lexical-react/useExtensionSignalValue.js.map +1 -0
- package/dist/lexical-proxy/@lexical-react/useLexicalAriaLiveRegion.d.ts +2 -0
- package/dist/lexical-proxy/@lexical-react/useLexicalAriaLiveRegion.d.ts.map +1 -0
- package/dist/lexical-proxy/@lexical-react/useLexicalAriaLiveRegion.js +2 -0
- package/dist/lexical-proxy/@lexical-react/useLexicalAriaLiveRegion.js.map +1 -0
- package/dist/lexical-proxy/@lexical-react/useLexicalFocusManagerRef.d.ts +2 -0
- package/dist/lexical-proxy/@lexical-react/useLexicalFocusManagerRef.d.ts.map +1 -0
- package/dist/lexical-proxy/@lexical-react/useLexicalFocusManagerRef.js +2 -0
- package/dist/lexical-proxy/@lexical-react/useLexicalFocusManagerRef.js.map +1 -0
- package/dist/lexical-proxy/@lexical-react/useLexicalFocusTrapRef.d.ts +2 -0
- package/dist/lexical-proxy/@lexical-react/useLexicalFocusTrapRef.d.ts.map +1 -0
- package/dist/lexical-proxy/@lexical-react/useLexicalFocusTrapRef.js +2 -0
- package/dist/lexical-proxy/@lexical-react/useLexicalFocusTrapRef.js.map +1 -0
- package/dist/lexical-proxy/@lexical-react/useLexicalRovingTabIndexRef.d.ts +2 -0
- package/dist/lexical-proxy/@lexical-react/useLexicalRovingTabIndexRef.d.ts.map +1 -0
- package/dist/lexical-proxy/@lexical-react/useLexicalRovingTabIndexRef.js +2 -0
- package/dist/lexical-proxy/@lexical-react/useLexicalRovingTabIndexRef.js.map +1 -0
- package/dist/lexical-proxy/@lexical-react/useLexicalSlotRef.d.ts +2 -0
- package/dist/lexical-proxy/@lexical-react/useLexicalSlotRef.d.ts.map +1 -0
- package/dist/lexical-proxy/@lexical-react/useLexicalSlotRef.js +2 -0
- package/dist/lexical-proxy/@lexical-react/useLexicalSlotRef.js.map +1 -0
- package/dist/populateGraphQL/populate.d.ts.map +1 -1
- package/dist/populateGraphQL/populate.js +2 -1
- package/dist/populateGraphQL/populate.js.map +1 -1
- package/dist/presets/llmInstructions.d.ts +2 -0
- package/dist/presets/llmInstructions.d.ts.map +1 -0
- package/dist/presets/llmInstructions.js +13 -0
- package/dist/presets/llmInstructions.js.map +1 -0
- package/dist/types/builtInNodes.d.ts +1 -1
- package/dist/types/builtInNodes.d.ts.map +1 -1
- package/dist/types/builtInNodes.js +8 -3
- package/dist/types/builtInNodes.js.map +1 -1
- package/dist/types/index.d.ts +3 -3
- package/dist/types/index.d.ts.map +1 -1
- package/dist/types/index.js.map +1 -1
- package/dist/types/jsonSchemaHelpers.d.ts +5 -1
- package/dist/types/jsonSchemaHelpers.d.ts.map +1 -1
- package/dist/types/jsonSchemaHelpers.js +7 -2
- package/dist/types/jsonSchemaHelpers.js.map +1 -1
- package/dist/types/nodeTypes.d.ts +6 -1
- package/dist/types/nodeTypes.d.ts.map +1 -1
- package/dist/types/nodeTypes.js.map +1 -1
- package/dist/utilities/buildInitialState.d.ts +3 -2
- package/dist/utilities/buildInitialState.d.ts.map +1 -1
- package/dist/utilities/buildInitialState.js +1 -0
- package/dist/utilities/buildInitialState.js.map +1 -1
- package/dist/utilities/createServerFeature.d.ts +1 -1
- package/dist/utilities/createServerFeature.d.ts.map +1 -1
- package/dist/utilities/createServerFeature.js +2 -2
- package/dist/utilities/createServerFeature.js.map +1 -1
- package/dist/utilities/editorConfigFactory.d.ts +6 -6
- package/dist/utilities/editorConfigFactory.d.ts.map +1 -1
- package/dist/utilities/editorConfigFactory.js +9 -9
- package/dist/utilities/editorConfigFactory.js.map +1 -1
- package/dist/utilities/getDefaultSanitizedEditorConfig.d.ts +2 -2
- package/dist/utilities/getDefaultSanitizedEditorConfig.d.ts.map +1 -1
- package/dist/utilities/getDefaultSanitizedEditorConfig.js +6 -17
- package/dist/utilities/getDefaultSanitizedEditorConfig.js.map +1 -1
- package/dist/utilities/upgradeLexicalData/index.js +6 -3
- package/dist/utilities/upgradeLexicalData/index.js.map +1 -1
- package/dist/validate/hasText.d.ts +2 -2
- package/dist/validate/hasText.d.ts.map +1 -1
- package/dist/validate/hasText.js.map +1 -1
- package/dist/validate/index.d.ts +1 -1
- package/dist/validate/index.d.ts.map +1 -1
- package/package.json +99 -25
- package/dist/dependencyChecker.spec.js +0 -16
- package/dist/dependencyChecker.spec.js.map +0 -1
- package/dist/exports/client/Field-QGSHF22S.js +0 -2
- package/dist/exports/client/Field-QGSHF22S.js.map +0 -7
- package/dist/exports/client/bundled.css +0 -1
- package/dist/exports/client/chunk-ESITTE3C.js +0 -2
- package/dist/exports/client/chunk-ESITTE3C.js.map +0 -7
- package/dist/exports/client/chunk-UD4DQ4AK.js +0 -2
- package/dist/exports/client/chunk-UD4DQ4AK.js.map +0 -7
- package/dist/exports/client/chunk-X3D4LZS7.js +0 -2
- package/dist/exports/client/component-PHZQBOJE.js +0 -2
- package/dist/exports/client/component-PHZQBOJE.js.map +0 -7
- package/dist/exports/client/componentInline-H24N7GUG.js +0 -2
- package/dist/features/blocks/client/component/removeEmptyArrayValues.d.ts +0 -11
- package/dist/features/blocks/client/component/removeEmptyArrayValues.d.ts.map +0 -1
- package/dist/features/blocks/client/component/removeEmptyArrayValues.js +0 -20
- package/dist/features/blocks/client/component/removeEmptyArrayValues.js.map +0 -1
- package/dist/features/converters/lexicalToPlaintext/convertLexicalToPlaintext.spec.js +0 -180
- package/dist/features/converters/lexicalToPlaintext/convertLexicalToPlaintext.spec.js.map +0 -1
- package/dist/features/experimental_table/client/index.d.ts.map +0 -1
- package/dist/features/experimental_table/client/index.js.map +0 -1
- package/dist/features/experimental_table/client/plugins/TableActionMenuPlugin/index.d.ts.map +0 -1
- package/dist/features/experimental_table/client/plugins/TableActionMenuPlugin/index.js.map +0 -1
- package/dist/features/experimental_table/client/plugins/TableCellResizerPlugin/index.d.ts.map +0 -1
- package/dist/features/experimental_table/client/plugins/TableCellResizerPlugin/index.js.map +0 -1
- package/dist/features/experimental_table/client/plugins/TableHoverActionsPlugin/index.d.ts.map +0 -1
- package/dist/features/experimental_table/client/plugins/TableHoverActionsPlugin/index.js.map +0 -1
- package/dist/features/experimental_table/client/plugins/TablePlugin/TableGridPopup/index.d.ts.map +0 -1
- package/dist/features/experimental_table/client/plugins/TablePlugin/TableGridPopup/index.js.map +0 -1
- package/dist/features/experimental_table/client/plugins/TablePlugin/index.d.ts.map +0 -1
- package/dist/features/experimental_table/client/plugins/TablePlugin/index.js.map +0 -1
- package/dist/features/experimental_table/client/utils/debounce.d.ts.map +0 -1
- package/dist/features/experimental_table/client/utils/debounce.js.map +0 -1
- package/dist/features/experimental_table/client/utils/useDebounce.d.ts.map +0 -1
- package/dist/features/experimental_table/client/utils/useDebounce.js.map +0 -1
- package/dist/features/experimental_table/markdownTransformer.d.ts.map +0 -1
- package/dist/features/experimental_table/markdownTransformer.js.map +0 -1
- package/dist/features/experimental_table/server/index.d.ts +0 -3
- package/dist/features/experimental_table/server/index.d.ts.map +0 -1
- package/dist/features/experimental_table/server/index.js.map +0 -1
- package/dist/features/experimental_table/server/schema.d.ts.map +0 -1
- package/dist/features/experimental_table/server/schema.js.map +0 -1
- package/dist/features/link/markdownTransformer.spec.js +0 -195
- package/dist/features/link/markdownTransformer.spec.js.map +0 -1
- package/dist/lexical/utils/markdown/convertFromMarkdownString.spec.js +0 -88
- package/dist/lexical/utils/markdown/convertFromMarkdownString.spec.js.map +0 -1
- package/dist/lexical/utils/url.spec.js +0 -114
- package/dist/lexical/utils/url.spec.js.map +0 -1
- package/dist/utilities/jsx/jsx.spec.js +0 -178
- package/dist/utilities/jsx/jsx.spec.js.map +0 -1
- /package/dist/exports/client/{componentInline-H24N7GUG.js.map → componentInline-HNE5G4TE.js.map} +0 -0
- /package/dist/features/{experimental_table → table}/client/index.d.ts +0 -0
- /package/dist/features/{experimental_table → table}/client/index.js +0 -0
- /package/dist/features/{experimental_table → table}/client/plugins/TableActionMenuPlugin/index.d.ts +0 -0
- /package/dist/features/{experimental_table → table}/client/plugins/TableCellResizerPlugin/index.css +0 -0
- /package/dist/features/{experimental_table → table}/client/plugins/TableCellResizerPlugin/index.d.ts +0 -0
- /package/dist/features/{experimental_table → table}/client/plugins/TableHoverActionsPlugin/index.d.ts +0 -0
- /package/dist/features/{experimental_table → table}/client/plugins/TableHoverActionsPlugin/index.js +0 -0
- /package/dist/features/{experimental_table → table}/client/plugins/TablePlugin/TableGridPopup/index.d.ts +0 -0
- /package/dist/features/{experimental_table → table}/client/plugins/TablePlugin/TableGridPopup/index.js +0 -0
- /package/dist/features/{experimental_table → table}/client/plugins/TablePlugin/index.css +0 -0
- /package/dist/features/{experimental_table → table}/client/plugins/TablePlugin/index.d.ts +0 -0
- /package/dist/features/{experimental_table → table}/client/plugins/TablePlugin/index.js +0 -0
- /package/dist/features/{experimental_table → table}/client/utils/debounce.d.ts +0 -0
- /package/dist/features/{experimental_table → table}/client/utils/debounce.js +0 -0
- /package/dist/features/{experimental_table → table}/client/utils/useDebounce.d.ts +0 -0
- /package/dist/features/{experimental_table → table}/client/utils/useDebounce.js +0 -0
- /package/dist/features/{experimental_table → table}/markdownTransformer.d.ts +0 -0
- /package/dist/features/{experimental_table → table}/markdownTransformer.js +0 -0
- /package/dist/features/{experimental_table → table}/server/schema.d.ts +0 -0
- /package/dist/features/{experimental_table → table}/server/schema.js +0 -0
|
@@ -1,195 +0,0 @@
|
|
|
1
|
-
import { createHeadlessEditor } from '@lexical/headless';
|
|
2
|
-
import { $createParagraphNode, $createTextNode, $getRoot } from 'lexical';
|
|
3
|
-
import { describe, expect, it } from 'vitest';
|
|
4
|
-
import { $convertToMarkdownString } from '@lexical/markdown';
|
|
5
|
-
import { AutoLinkNode } from './nodes/AutoLinkNode.js';
|
|
6
|
-
import { $createLinkNode, LinkNode } from './nodes/LinkNode.js';
|
|
7
|
-
import { PAYLOAD_LINK, createPayloadLinkTransformer } from './markdownTransformer.js';
|
|
8
|
-
function createEditor() {
|
|
9
|
-
return createHeadlessEditor({
|
|
10
|
-
nodes: [LinkNode, AutoLinkNode]
|
|
11
|
-
});
|
|
12
|
-
}
|
|
13
|
-
function toMarkdown(setupFn, transformer = PAYLOAD_LINK) {
|
|
14
|
-
const editor = createEditor();
|
|
15
|
-
editor.update(setupFn, {
|
|
16
|
-
discrete: true
|
|
17
|
-
});
|
|
18
|
-
let markdown = '';
|
|
19
|
-
editor.getEditorState().read(() => {
|
|
20
|
-
markdown = $convertToMarkdownString([transformer]);
|
|
21
|
-
});
|
|
22
|
-
return markdown;
|
|
23
|
-
}
|
|
24
|
-
describe('createPayloadLinkTransformer', () => {
|
|
25
|
-
describe('custom links', () => {
|
|
26
|
-
it('should export a custom link with its url', () => {
|
|
27
|
-
const markdown = toMarkdown(() => {
|
|
28
|
-
const link = $createLinkNode({
|
|
29
|
-
fields: {
|
|
30
|
-
linkType: 'custom',
|
|
31
|
-
url: 'https://payloadcms.com',
|
|
32
|
-
newTab: false,
|
|
33
|
-
doc: null
|
|
34
|
-
}
|
|
35
|
-
});
|
|
36
|
-
link.append($createTextNode('Payload'));
|
|
37
|
-
$getRoot().append($createParagraphNode().append(link));
|
|
38
|
-
});
|
|
39
|
-
expect(markdown).toBe('[Payload](https://payloadcms.com)');
|
|
40
|
-
});
|
|
41
|
-
it('should export a custom link that opens in a new tab', () => {
|
|
42
|
-
// newTab is a Payload field — markdown has no equivalent, so it is intentionally dropped
|
|
43
|
-
const markdown = toMarkdown(() => {
|
|
44
|
-
const link = $createLinkNode({
|
|
45
|
-
fields: {
|
|
46
|
-
linkType: 'custom',
|
|
47
|
-
url: 'https://payloadcms.com',
|
|
48
|
-
newTab: true,
|
|
49
|
-
doc: null
|
|
50
|
-
}
|
|
51
|
-
});
|
|
52
|
-
link.append($createTextNode('Payload'));
|
|
53
|
-
$getRoot().append($createParagraphNode().append(link));
|
|
54
|
-
});
|
|
55
|
-
expect(markdown).toBe('[Payload](https://payloadcms.com)');
|
|
56
|
-
});
|
|
57
|
-
it('should produce an empty href when url is null or undefined', () => {
|
|
58
|
-
const markdownNull = toMarkdown(() => {
|
|
59
|
-
const link = $createLinkNode({
|
|
60
|
-
fields: {
|
|
61
|
-
linkType: 'custom',
|
|
62
|
-
url: null,
|
|
63
|
-
newTab: false,
|
|
64
|
-
doc: null
|
|
65
|
-
}
|
|
66
|
-
});
|
|
67
|
-
link.append($createTextNode('Broken'));
|
|
68
|
-
$getRoot().append($createParagraphNode().append(link));
|
|
69
|
-
});
|
|
70
|
-
const markdownUndefined = toMarkdown(() => {
|
|
71
|
-
const link = $createLinkNode({
|
|
72
|
-
fields: {
|
|
73
|
-
linkType: 'custom',
|
|
74
|
-
newTab: false,
|
|
75
|
-
doc: null
|
|
76
|
-
}
|
|
77
|
-
});
|
|
78
|
-
link.append($createTextNode('Broken'));
|
|
79
|
-
$getRoot().append($createParagraphNode().append(link));
|
|
80
|
-
});
|
|
81
|
-
expect(markdownNull).toBe('[Broken]()');
|
|
82
|
-
expect(markdownUndefined).toBe('[Broken]()');
|
|
83
|
-
});
|
|
84
|
-
});
|
|
85
|
-
describe('internal links', () => {
|
|
86
|
-
it('should export an empty href when no internalDocToHref is provided', () => {
|
|
87
|
-
const markdown = toMarkdown(() => {
|
|
88
|
-
const link = $createLinkNode({
|
|
89
|
-
fields: {
|
|
90
|
-
linkType: 'internal',
|
|
91
|
-
doc: {
|
|
92
|
-
relationTo: 'pages',
|
|
93
|
-
value: {
|
|
94
|
-
id: '1',
|
|
95
|
-
slug: 'about'
|
|
96
|
-
}
|
|
97
|
-
},
|
|
98
|
-
newTab: false
|
|
99
|
-
}
|
|
100
|
-
});
|
|
101
|
-
link.append($createTextNode('About'));
|
|
102
|
-
$getRoot().append($createParagraphNode().append(link));
|
|
103
|
-
});
|
|
104
|
-
expect(markdown).toBe('[About]()');
|
|
105
|
-
});
|
|
106
|
-
it('should call internalDocToHref and use the returned url', () => {
|
|
107
|
-
const transformer = createPayloadLinkTransformer({
|
|
108
|
-
internalDocToHref: ({
|
|
109
|
-
linkNode
|
|
110
|
-
}) => {
|
|
111
|
-
const value = linkNode.fields.doc?.value;
|
|
112
|
-
if (value && typeof value === 'object' && 'slug' in value) {
|
|
113
|
-
return `/${value.slug}`;
|
|
114
|
-
}
|
|
115
|
-
return '/';
|
|
116
|
-
}
|
|
117
|
-
});
|
|
118
|
-
const markdown = toMarkdown(() => {
|
|
119
|
-
const link = $createLinkNode({
|
|
120
|
-
fields: {
|
|
121
|
-
linkType: 'internal',
|
|
122
|
-
doc: {
|
|
123
|
-
relationTo: 'pages',
|
|
124
|
-
value: {
|
|
125
|
-
id: '1',
|
|
126
|
-
slug: 'about'
|
|
127
|
-
}
|
|
128
|
-
},
|
|
129
|
-
newTab: false
|
|
130
|
-
}
|
|
131
|
-
});
|
|
132
|
-
link.append($createTextNode('About'));
|
|
133
|
-
$getRoot().append($createParagraphNode().append(link));
|
|
134
|
-
}, transformer);
|
|
135
|
-
expect(markdown).toBe('[About](/about)');
|
|
136
|
-
});
|
|
137
|
-
it('should pass the full serialized link node to internalDocToHref', () => {
|
|
138
|
-
let capturedLinkNode = null;
|
|
139
|
-
const transformer = createPayloadLinkTransformer({
|
|
140
|
-
internalDocToHref: ({
|
|
141
|
-
linkNode
|
|
142
|
-
}) => {
|
|
143
|
-
capturedLinkNode = linkNode;
|
|
144
|
-
return '/captured';
|
|
145
|
-
}
|
|
146
|
-
});
|
|
147
|
-
toMarkdown(() => {
|
|
148
|
-
const link = $createLinkNode({
|
|
149
|
-
fields: {
|
|
150
|
-
linkType: 'internal',
|
|
151
|
-
doc: {
|
|
152
|
-
relationTo: 'pages',
|
|
153
|
-
value: {
|
|
154
|
-
id: '42',
|
|
155
|
-
title: 'Home'
|
|
156
|
-
}
|
|
157
|
-
},
|
|
158
|
-
newTab: true
|
|
159
|
-
}
|
|
160
|
-
});
|
|
161
|
-
link.append($createTextNode('Home'));
|
|
162
|
-
$getRoot().append($createParagraphNode().append(link));
|
|
163
|
-
}, transformer);
|
|
164
|
-
expect(capturedLinkNode).not.toBeNull();
|
|
165
|
-
expect(capturedLinkNode.fields.linkType).toBe('internal');
|
|
166
|
-
expect(capturedLinkNode.fields.doc?.relationTo).toBe('pages');
|
|
167
|
-
expect(capturedLinkNode.fields.doc?.value).toMatchObject({
|
|
168
|
-
id: '42',
|
|
169
|
-
title: 'Home'
|
|
170
|
-
});
|
|
171
|
-
expect(capturedLinkNode.fields.newTab).toBe(true);
|
|
172
|
-
});
|
|
173
|
-
});
|
|
174
|
-
describe('PAYLOAD_LINK (static export)', () => {
|
|
175
|
-
it('should behave identically to createPayloadLinkTransformer() with no args', () => {
|
|
176
|
-
const setup = () => {
|
|
177
|
-
const link = $createLinkNode({
|
|
178
|
-
fields: {
|
|
179
|
-
linkType: 'custom',
|
|
180
|
-
url: 'https://example.com',
|
|
181
|
-
newTab: false,
|
|
182
|
-
doc: null
|
|
183
|
-
}
|
|
184
|
-
});
|
|
185
|
-
link.append($createTextNode('Example'));
|
|
186
|
-
$getRoot().append($createParagraphNode().append(link));
|
|
187
|
-
};
|
|
188
|
-
const fromStatic = toMarkdown(setup, PAYLOAD_LINK);
|
|
189
|
-
const fromFactory = toMarkdown(setup, createPayloadLinkTransformer());
|
|
190
|
-
expect(fromStatic).toBe(fromFactory);
|
|
191
|
-
expect(fromStatic).toBe('[Example](https://example.com)');
|
|
192
|
-
});
|
|
193
|
-
});
|
|
194
|
-
});
|
|
195
|
-
//# sourceMappingURL=markdownTransformer.spec.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"markdownTransformer.spec.js","names":["createHeadlessEditor","$createParagraphNode","$createTextNode","$getRoot","describe","expect","it","$convertToMarkdownString","AutoLinkNode","$createLinkNode","LinkNode","PAYLOAD_LINK","createPayloadLinkTransformer","createEditor","nodes","toMarkdown","setupFn","transformer","editor","update","discrete","markdown","getEditorState","read","link","fields","linkType","url","newTab","doc","append","toBe","markdownNull","markdownUndefined","relationTo","value","id","slug","internalDocToHref","linkNode","capturedLinkNode","title","not","toBeNull","toMatchObject","setup","fromStatic","fromFactory"],"sources":["../../../src/features/link/markdownTransformer.spec.ts"],"sourcesContent":["import { createHeadlessEditor } from '@lexical/headless'\nimport { $createParagraphNode, $createTextNode, $getRoot } from 'lexical'\nimport { describe, expect, it } from 'vitest'\n\nimport { $convertToMarkdownString } from '@lexical/markdown'\nimport { AutoLinkNode } from './nodes/AutoLinkNode.js'\nimport { $createLinkNode, LinkNode } from './nodes/LinkNode.js'\nimport type { SerializedLinkNode } from './server/schema.js'\nimport { PAYLOAD_LINK, createPayloadLinkTransformer } from './markdownTransformer.js'\n\nfunction createEditor() {\n return createHeadlessEditor({ nodes: [LinkNode, AutoLinkNode] })\n}\n\nfunction toMarkdown(setupFn: () => void, transformer = PAYLOAD_LINK): string {\n const editor = createEditor()\n editor.update(setupFn, { discrete: true })\n let markdown = ''\n editor.getEditorState().read(() => {\n markdown = $convertToMarkdownString([transformer])\n })\n return markdown\n}\n\ndescribe('createPayloadLinkTransformer', () => {\n describe('custom links', () => {\n it('should export a custom link with its url', () => {\n const markdown = toMarkdown(() => {\n const link = $createLinkNode({\n fields: { linkType: 'custom', url: 'https://payloadcms.com', newTab: false, doc: null },\n })\n link.append($createTextNode('Payload'))\n $getRoot().append($createParagraphNode().append(link))\n })\n\n expect(markdown).toBe('[Payload](https://payloadcms.com)')\n })\n\n it('should export a custom link that opens in a new tab', () => {\n // newTab is a Payload field — markdown has no equivalent, so it is intentionally dropped\n const markdown = toMarkdown(() => {\n const link = $createLinkNode({\n fields: { linkType: 'custom', url: 'https://payloadcms.com', newTab: true, doc: null },\n })\n link.append($createTextNode('Payload'))\n $getRoot().append($createParagraphNode().append(link))\n })\n\n expect(markdown).toBe('[Payload](https://payloadcms.com)')\n })\n\n it('should produce an empty href when url is null or undefined', () => {\n const markdownNull = toMarkdown(() => {\n const link = $createLinkNode({\n fields: { linkType: 'custom', url: null as unknown as string, newTab: false, doc: null },\n })\n link.append($createTextNode('Broken'))\n $getRoot().append($createParagraphNode().append(link))\n })\n\n const markdownUndefined = toMarkdown(() => {\n const link = $createLinkNode({\n fields: { linkType: 'custom', newTab: false, doc: null },\n })\n link.append($createTextNode('Broken'))\n $getRoot().append($createParagraphNode().append(link))\n })\n\n expect(markdownNull).toBe('[Broken]()')\n expect(markdownUndefined).toBe('[Broken]()')\n })\n })\n\n describe('internal links', () => {\n it('should export an empty href when no internalDocToHref is provided', () => {\n const markdown = toMarkdown(() => {\n const link = $createLinkNode({\n fields: {\n linkType: 'internal',\n doc: { relationTo: 'pages', value: { id: '1', slug: 'about' } },\n newTab: false,\n },\n })\n link.append($createTextNode('About'))\n $getRoot().append($createParagraphNode().append(link))\n })\n\n expect(markdown).toBe('[About]()')\n })\n\n it('should call internalDocToHref and use the returned url', () => {\n const transformer = createPayloadLinkTransformer({\n internalDocToHref: ({ linkNode }) => {\n const value = linkNode.fields.doc?.value\n if (value && typeof value === 'object' && 'slug' in value) {\n return `/${value.slug}`\n }\n return '/'\n },\n })\n\n const markdown = toMarkdown(() => {\n const link = $createLinkNode({\n fields: {\n linkType: 'internal',\n doc: { relationTo: 'pages', value: { id: '1', slug: 'about' } },\n newTab: false,\n },\n })\n link.append($createTextNode('About'))\n $getRoot().append($createParagraphNode().append(link))\n }, transformer)\n\n expect(markdown).toBe('[About](/about)')\n })\n\n it('should pass the full serialized link node to internalDocToHref', () => {\n let capturedLinkNode: SerializedLinkNode | null = null\n\n const transformer = createPayloadLinkTransformer({\n internalDocToHref: ({ linkNode }) => {\n capturedLinkNode = linkNode\n return '/captured'\n },\n })\n\n toMarkdown(() => {\n const link = $createLinkNode({\n fields: {\n linkType: 'internal',\n doc: { relationTo: 'pages', value: { id: '42', title: 'Home' } },\n newTab: true,\n },\n })\n link.append($createTextNode('Home'))\n $getRoot().append($createParagraphNode().append(link))\n }, transformer)\n\n expect(capturedLinkNode).not.toBeNull()\n expect(capturedLinkNode!.fields.linkType).toBe('internal')\n expect(capturedLinkNode!.fields.doc?.relationTo).toBe('pages')\n expect(capturedLinkNode!.fields.doc?.value).toMatchObject({ id: '42', title: 'Home' })\n expect(capturedLinkNode!.fields.newTab).toBe(true)\n })\n })\n\n describe('PAYLOAD_LINK (static export)', () => {\n it('should behave identically to createPayloadLinkTransformer() with no args', () => {\n const setup = () => {\n const link = $createLinkNode({\n fields: { linkType: 'custom', url: 'https://example.com', newTab: false, doc: null },\n })\n link.append($createTextNode('Example'))\n $getRoot().append($createParagraphNode().append(link))\n }\n\n const fromStatic = toMarkdown(setup, PAYLOAD_LINK)\n const fromFactory = toMarkdown(setup, createPayloadLinkTransformer())\n\n expect(fromStatic).toBe(fromFactory)\n expect(fromStatic).toBe('[Example](https://example.com)')\n })\n })\n})\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -1,88 +0,0 @@
|
|
|
1
|
-
import { createHeadlessEditor } from '@lexical/headless';
|
|
2
|
-
import { LinkNode } from '@lexical/link';
|
|
3
|
-
import { ListItemNode, ListNode } from '@lexical/list';
|
|
4
|
-
import { $convertToMarkdownString } from '@lexical/markdown';
|
|
5
|
-
import { HeadingNode, QuoteNode } from '@lexical/rich-text';
|
|
6
|
-
import { $getRoot, $isElementNode, $isLineBreakNode } from 'lexical';
|
|
7
|
-
import { describe, expect, it } from 'vitest';
|
|
8
|
-
import { $convertFromMarkdownString } from './convertFromMarkdownString.js';
|
|
9
|
-
function createEditor() {
|
|
10
|
-
return createHeadlessEditor({
|
|
11
|
-
nodes: [HeadingNode, QuoteNode, ListNode, ListItemNode, LinkNode]
|
|
12
|
-
});
|
|
13
|
-
}
|
|
14
|
-
// Payload's editor imports markdown with shouldMergeAdjacentLines = true, so the
|
|
15
|
-
// specs exercise that path: hard line breaks must survive even when adjacent lines
|
|
16
|
-
// are merged, while soft wraps collapse to a single space.
|
|
17
|
-
function importMarkdown(markdown) {
|
|
18
|
-
const editor = createEditor();
|
|
19
|
-
editor.update(() => $convertFromMarkdownString(markdown, undefined, undefined, false, true), {
|
|
20
|
-
discrete: true
|
|
21
|
-
});
|
|
22
|
-
let result = {
|
|
23
|
-
hasLineBreak: false,
|
|
24
|
-
textContent: ''
|
|
25
|
-
};
|
|
26
|
-
editor.getEditorState().read(() => {
|
|
27
|
-
const firstChild = $getRoot().getFirstChild();
|
|
28
|
-
if (!$isElementNode(firstChild)) {
|
|
29
|
-
throw new Error('Expected an element block');
|
|
30
|
-
}
|
|
31
|
-
result = {
|
|
32
|
-
hasLineBreak: firstChild.getChildren().some(child => $isLineBreakNode(child)),
|
|
33
|
-
textContent: firstChild.getTextContent()
|
|
34
|
-
};
|
|
35
|
-
});
|
|
36
|
-
return result;
|
|
37
|
-
}
|
|
38
|
-
function roundTrip(markdown) {
|
|
39
|
-
const editor = createEditor();
|
|
40
|
-
editor.update(() => $convertFromMarkdownString(markdown, undefined, undefined, false, true), {
|
|
41
|
-
discrete: true
|
|
42
|
-
});
|
|
43
|
-
let output = '';
|
|
44
|
-
editor.getEditorState().read(() => {
|
|
45
|
-
output = $convertToMarkdownString();
|
|
46
|
-
});
|
|
47
|
-
return output;
|
|
48
|
-
}
|
|
49
|
-
describe('markdown hard line break import', () => {
|
|
50
|
-
it('should import a trailing-space hard break as a line break node with the marker stripped', () => {
|
|
51
|
-
const {
|
|
52
|
-
hasLineBreak,
|
|
53
|
-
textContent
|
|
54
|
-
} = importMarkdown(['foo ', 'bar'].join('\n'));
|
|
55
|
-
expect(hasLineBreak).toBe(true);
|
|
56
|
-
expect(textContent).toBe('foo\nbar');
|
|
57
|
-
});
|
|
58
|
-
it('should import a backslash hard break as a line break node with the marker stripped', () => {
|
|
59
|
-
const {
|
|
60
|
-
hasLineBreak,
|
|
61
|
-
textContent
|
|
62
|
-
} = importMarkdown('foo\\\nbar');
|
|
63
|
-
expect(hasLineBreak).toBe(true);
|
|
64
|
-
expect(textContent).toBe('foo\nbar');
|
|
65
|
-
});
|
|
66
|
-
});
|
|
67
|
-
describe('markdown hard line break round trip', () => {
|
|
68
|
-
it('should round trip a trailing-space hard break', () => {
|
|
69
|
-
const md = ['foo ', 'bar'].join('\n');
|
|
70
|
-
expect(roundTrip(md)).toBe(md);
|
|
71
|
-
});
|
|
72
|
-
it('should round trip a backslash hard break', () => {
|
|
73
|
-
const md = 'foo\\\nbar';
|
|
74
|
-
expect(roundTrip(md)).toBe(md);
|
|
75
|
-
});
|
|
76
|
-
it('should not introduce a hard break for a soft wrap', () => {
|
|
77
|
-
expect(roundTrip(['foo', 'bar'].join('\n'))).toBe('foo bar');
|
|
78
|
-
});
|
|
79
|
-
it('should round trip a hard break after formatted text', () => {
|
|
80
|
-
const md = '**foo** \nbar';
|
|
81
|
-
expect(roundTrip(md)).toBe(md);
|
|
82
|
-
});
|
|
83
|
-
it('should round trip a hard break after a link', () => {
|
|
84
|
-
const md = '[foo](https://payloadcms.com) \nbar';
|
|
85
|
-
expect(roundTrip(md)).toBe(md);
|
|
86
|
-
});
|
|
87
|
-
});
|
|
88
|
-
//# sourceMappingURL=convertFromMarkdownString.spec.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"convertFromMarkdownString.spec.js","names":["createHeadlessEditor","LinkNode","ListItemNode","ListNode","$convertToMarkdownString","HeadingNode","QuoteNode","$getRoot","$isElementNode","$isLineBreakNode","describe","expect","it","$convertFromMarkdownString","createEditor","nodes","importMarkdown","markdown","editor","update","undefined","discrete","result","hasLineBreak","textContent","getEditorState","read","firstChild","getFirstChild","Error","getChildren","some","child","getTextContent","roundTrip","output","join","toBe","md"],"sources":["../../../../src/lexical/utils/markdown/convertFromMarkdownString.spec.ts"],"sourcesContent":["import { createHeadlessEditor } from '@lexical/headless'\nimport { LinkNode } from '@lexical/link'\nimport { ListItemNode, ListNode } from '@lexical/list'\nimport { $convertToMarkdownString } from '@lexical/markdown'\nimport { HeadingNode, QuoteNode } from '@lexical/rich-text'\nimport { $getRoot, $isElementNode, $isLineBreakNode } from 'lexical'\nimport { describe, expect, it } from 'vitest'\n\nimport { $convertFromMarkdownString } from './convertFromMarkdownString.js'\n\nfunction createEditor() {\n return createHeadlessEditor({\n nodes: [HeadingNode, QuoteNode, ListNode, ListItemNode, LinkNode],\n })\n}\n\n// Payload's editor imports markdown with shouldMergeAdjacentLines = true, so the\n// specs exercise that path: hard line breaks must survive even when adjacent lines\n// are merged, while soft wraps collapse to a single space.\nfunction importMarkdown(markdown: string): { hasLineBreak: boolean; textContent: string } {\n const editor = createEditor()\n editor.update(() => $convertFromMarkdownString(markdown, undefined, undefined, false, true), {\n discrete: true,\n })\n let result = { hasLineBreak: false, textContent: '' }\n editor.getEditorState().read(() => {\n const firstChild = $getRoot().getFirstChild()\n if (!$isElementNode(firstChild)) {\n throw new Error('Expected an element block')\n }\n result = {\n hasLineBreak: firstChild.getChildren().some((child) => $isLineBreakNode(child)),\n textContent: firstChild.getTextContent(),\n }\n })\n return result\n}\n\nfunction roundTrip(markdown: string): string {\n const editor = createEditor()\n editor.update(() => $convertFromMarkdownString(markdown, undefined, undefined, false, true), {\n discrete: true,\n })\n let output = ''\n editor.getEditorState().read(() => {\n output = $convertToMarkdownString()\n })\n return output\n}\n\ndescribe('markdown hard line break import', () => {\n it('should import a trailing-space hard break as a line break node with the marker stripped', () => {\n const { hasLineBreak, textContent } = importMarkdown(['foo ', 'bar'].join('\\n'))\n\n expect(hasLineBreak).toBe(true)\n expect(textContent).toBe('foo\\nbar')\n })\n\n it('should import a backslash hard break as a line break node with the marker stripped', () => {\n const { hasLineBreak, textContent } = importMarkdown('foo\\\\\\nbar')\n\n expect(hasLineBreak).toBe(true)\n expect(textContent).toBe('foo\\nbar')\n })\n})\n\ndescribe('markdown hard line break round trip', () => {\n it('should round trip a trailing-space hard break', () => {\n const md = ['foo ', 'bar'].join('\\n')\n expect(roundTrip(md)).toBe(md)\n })\n\n it('should round trip a backslash hard break', () => {\n const md = 'foo\\\\\\nbar'\n expect(roundTrip(md)).toBe(md)\n })\n\n it('should not introduce a hard break for a soft wrap', () => {\n expect(roundTrip(['foo', 'bar'].join('\\n'))).toBe('foo bar')\n })\n\n it('should round trip a hard break after formatted text', () => {\n const md = '**foo** \\nbar'\n expect(roundTrip(md)).toBe(md)\n })\n\n it('should round trip a hard break after a link', () => {\n const md = '[foo](https://payloadcms.com) \\nbar'\n expect(roundTrip(md)).toBe(md)\n })\n})\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -1,114 +0,0 @@
|
|
|
1
|
-
import { describe, it, expect } from 'vitest';
|
|
2
|
-
import { absoluteRegExp, relativeOrAnchorRegExp, validateUrl } from './url.js';
|
|
3
|
-
describe('Lexical URL Regex Matchers', () => {
|
|
4
|
-
describe('relativeOrAnchorRegExp', () => {
|
|
5
|
-
it('validation for links it should match', async () => {
|
|
6
|
-
const shouldMatch = ['/path/to/resource', '/file-name.html', '/', '/dir/', '/path.with.dots/', '#anchor', '#section-title', '/path#fragment', '/page?id=123', '/page?id=123#section', '/search?q=test', '/?global=true'];
|
|
7
|
-
shouldMatch.forEach(testCase => {
|
|
8
|
-
expect(relativeOrAnchorRegExp.test(testCase)).toBe(true);
|
|
9
|
-
});
|
|
10
|
-
});
|
|
11
|
-
it('validation for links it should not match', async () => {
|
|
12
|
-
const shouldNotMatch = ['match', 'http://example.com', 'relative/path', 'file.html', 'some#fragment', '#', '/#', '/path/with spaces', '', 'ftp://example.com'];
|
|
13
|
-
shouldNotMatch.forEach(testCase => {
|
|
14
|
-
expect(relativeOrAnchorRegExp.test(testCase)).not.toBe(true);
|
|
15
|
-
});
|
|
16
|
-
});
|
|
17
|
-
});
|
|
18
|
-
describe('absoluteRegExp', () => {
|
|
19
|
-
it('validation for links it should match', async () => {
|
|
20
|
-
const shouldMatch = ['http://example.com', 'https://example.com', 'ftp://files.example.com', 'http://example.com/resource', 'https://example.com/resource?key=value', 'http://example.com/resource#anchor', 'http://www.example.com', 'https://sub.example.com/path/file', 'mailto:email@example.com', 'tel:+1234567890', 'http://user:pass@example.com', 'www.example.com', 'www.example.com/resource', 'www.example.com/resource?query=1', 'www.example.com#fragment'];
|
|
21
|
-
shouldMatch.forEach(testCase => {
|
|
22
|
-
expect(absoluteRegExp.test(testCase)).toBe(true);
|
|
23
|
-
});
|
|
24
|
-
});
|
|
25
|
-
it('validation for links it should not match', async () => {
|
|
26
|
-
const shouldNotMatch = ['/relative/path', '#anchor', 'example.com', '://missing.scheme', 'http://', 'http:/example.com', 'ftp://example .com', 'http://example', 'not-a-url', 'http//example.com', 'https://example.com/ spaces'];
|
|
27
|
-
shouldNotMatch.forEach(testCase => {
|
|
28
|
-
expect(absoluteRegExp.test(testCase)).not.toBe(true);
|
|
29
|
-
});
|
|
30
|
-
});
|
|
31
|
-
});
|
|
32
|
-
describe('validateUrl', () => {
|
|
33
|
-
describe('absolute URLs', () => {
|
|
34
|
-
it('should validate http and https URLs', () => {
|
|
35
|
-
const validUrls = ['http://example.com', 'https://example.com', 'http://www.example.com', 'https://sub.example.com/path/file', 'http://example.com/resource', 'https://example.com/resource?key=value', 'http://example.com/resource#anchor'];
|
|
36
|
-
validUrls.forEach(url => {
|
|
37
|
-
expect(validateUrl(url)).toBe(true);
|
|
38
|
-
});
|
|
39
|
-
});
|
|
40
|
-
it('should validate other protocol URLs', () => {
|
|
41
|
-
const validUrls = ['ftp://files.example.com', 'mailto:email@example.com', 'tel:+1234567890'];
|
|
42
|
-
validUrls.forEach(url => {
|
|
43
|
-
expect(validateUrl(url)).toBe(true);
|
|
44
|
-
});
|
|
45
|
-
});
|
|
46
|
-
it('should validate www URLs without protocol', () => {
|
|
47
|
-
const validUrls = ['www.example.com', 'www.example.com/resource', 'www.example.com/resource?query=1', 'www.example.com#fragment'];
|
|
48
|
-
validUrls.forEach(url => {
|
|
49
|
-
expect(validateUrl(url)).toBe(true);
|
|
50
|
-
});
|
|
51
|
-
});
|
|
52
|
-
});
|
|
53
|
-
describe('relative URLs', () => {
|
|
54
|
-
it('should validate relative paths', () => {
|
|
55
|
-
const validUrls = ['/path/to/resource', '/file-name.html', '/', '/dir/', '/path.with.dots/', '/path#fragment'];
|
|
56
|
-
validUrls.forEach(url => {
|
|
57
|
-
expect(validateUrl(url)).toBe(true);
|
|
58
|
-
});
|
|
59
|
-
});
|
|
60
|
-
});
|
|
61
|
-
describe('anchor links', () => {
|
|
62
|
-
it('should validate anchor links', () => {
|
|
63
|
-
const validUrls = ['#anchor', '#section-title'];
|
|
64
|
-
validUrls.forEach(url => {
|
|
65
|
-
expect(validateUrl(url)).toBe(true);
|
|
66
|
-
});
|
|
67
|
-
});
|
|
68
|
-
});
|
|
69
|
-
describe('with query params', () => {
|
|
70
|
-
it('should validate relative URLs with query parameters', () => {
|
|
71
|
-
const validUrls = ['/page?id=123', '/search?q=test', '/products?category=electronics&sort=price', '/path?key=value&another=param', '/page?id=123&filter=active', '/?global=true'];
|
|
72
|
-
validUrls.forEach(url => {
|
|
73
|
-
expect(validateUrl(url)).toBe(true);
|
|
74
|
-
});
|
|
75
|
-
});
|
|
76
|
-
it('should validate absolute URLs with query parameters', () => {
|
|
77
|
-
const validUrls = ['https://example.com?id=123', 'http://example.com/page?key=value', 'www.example.com?search=query', 'https://example.com/path?a=1&b=2&c=3'];
|
|
78
|
-
validUrls.forEach(url => {
|
|
79
|
-
expect(validateUrl(url)).toBe(true);
|
|
80
|
-
});
|
|
81
|
-
});
|
|
82
|
-
it('should validate URLs with query parameters and anchors', () => {
|
|
83
|
-
const validUrls = ['/page?id=123#section', 'https://example.com?key=value#anchor', '/search?q=test#results'];
|
|
84
|
-
validUrls.forEach(url => {
|
|
85
|
-
expect(validateUrl(url)).toBe(true);
|
|
86
|
-
});
|
|
87
|
-
});
|
|
88
|
-
});
|
|
89
|
-
describe('edge cases', () => {
|
|
90
|
-
it('should handle the default https:// case', () => {
|
|
91
|
-
expect(validateUrl('https://')).toBe(true);
|
|
92
|
-
});
|
|
93
|
-
it('should return false for empty or invalid URLs', () => {
|
|
94
|
-
const invalidUrls = ['', 'not-a-url', 'example.com', 'relative/path', 'file.html', 'some#fragment', 'http://', 'http:/example.com', 'http//example.com'];
|
|
95
|
-
invalidUrls.forEach(url => {
|
|
96
|
-
expect(validateUrl(url)).toBe(false);
|
|
97
|
-
});
|
|
98
|
-
});
|
|
99
|
-
it('should return false for URLs with spaces', () => {
|
|
100
|
-
const invalidUrls = ['/path/with spaces', 'http://example.com/ spaces', 'https://example.com/path with spaces'];
|
|
101
|
-
invalidUrls.forEach(url => {
|
|
102
|
-
expect(validateUrl(url)).toBe(false);
|
|
103
|
-
});
|
|
104
|
-
});
|
|
105
|
-
it('should return false for malformed URLs', () => {
|
|
106
|
-
const invalidUrls = ['://missing.scheme', 'ftp://example .com', 'http://example', '#', '/#'];
|
|
107
|
-
invalidUrls.forEach(url => {
|
|
108
|
-
expect(validateUrl(url)).toBe(false);
|
|
109
|
-
});
|
|
110
|
-
});
|
|
111
|
-
});
|
|
112
|
-
});
|
|
113
|
-
});
|
|
114
|
-
//# sourceMappingURL=url.spec.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"url.spec.js","names":["describe","it","expect","absoluteRegExp","relativeOrAnchorRegExp","validateUrl","shouldMatch","forEach","testCase","test","toBe","shouldNotMatch","not","validUrls","url","invalidUrls"],"sources":["../../../src/lexical/utils/url.spec.ts"],"sourcesContent":["import { describe, it, expect } from 'vitest'\nimport { absoluteRegExp, relativeOrAnchorRegExp, validateUrl } from './url.js'\n\ndescribe('Lexical URL Regex Matchers', () => {\n describe('relativeOrAnchorRegExp', () => {\n it('validation for links it should match', async () => {\n const shouldMatch = [\n '/path/to/resource',\n '/file-name.html',\n '/',\n '/dir/',\n '/path.with.dots/',\n '#anchor',\n '#section-title',\n '/path#fragment',\n '/page?id=123',\n '/page?id=123#section',\n '/search?q=test',\n '/?global=true',\n ]\n\n shouldMatch.forEach((testCase) => {\n expect(relativeOrAnchorRegExp.test(testCase)).toBe(true)\n })\n })\n\n it('validation for links it should not match', async () => {\n const shouldNotMatch = [\n 'match',\n 'http://example.com',\n 'relative/path',\n 'file.html',\n 'some#fragment',\n '#',\n '/#',\n '/path/with spaces',\n '',\n 'ftp://example.com',\n ]\n\n shouldNotMatch.forEach((testCase) => {\n expect(relativeOrAnchorRegExp.test(testCase)).not.toBe(true)\n })\n })\n })\n\n describe('absoluteRegExp', () => {\n it('validation for links it should match', async () => {\n const shouldMatch = [\n 'http://example.com',\n 'https://example.com',\n 'ftp://files.example.com',\n 'http://example.com/resource',\n 'https://example.com/resource?key=value',\n 'http://example.com/resource#anchor',\n 'http://www.example.com',\n 'https://sub.example.com/path/file',\n 'mailto:email@example.com',\n 'tel:+1234567890',\n 'http://user:pass@example.com',\n 'www.example.com',\n 'www.example.com/resource',\n 'www.example.com/resource?query=1',\n 'www.example.com#fragment',\n ]\n\n shouldMatch.forEach((testCase) => {\n expect(absoluteRegExp.test(testCase)).toBe(true)\n })\n })\n\n it('validation for links it should not match', async () => {\n const shouldNotMatch = [\n '/relative/path',\n '#anchor',\n 'example.com',\n '://missing.scheme',\n 'http://',\n 'http:/example.com',\n 'ftp://example .com',\n 'http://example',\n 'not-a-url',\n 'http//example.com',\n 'https://example.com/ spaces',\n ]\n\n shouldNotMatch.forEach((testCase) => {\n expect(absoluteRegExp.test(testCase)).not.toBe(true)\n })\n })\n })\n\n describe('validateUrl', () => {\n describe('absolute URLs', () => {\n it('should validate http and https URLs', () => {\n const validUrls = [\n 'http://example.com',\n 'https://example.com',\n 'http://www.example.com',\n 'https://sub.example.com/path/file',\n 'http://example.com/resource',\n 'https://example.com/resource?key=value',\n 'http://example.com/resource#anchor',\n ]\n\n validUrls.forEach((url) => {\n expect(validateUrl(url)).toBe(true)\n })\n })\n\n it('should validate other protocol URLs', () => {\n const validUrls = ['ftp://files.example.com', 'mailto:email@example.com', 'tel:+1234567890']\n\n validUrls.forEach((url) => {\n expect(validateUrl(url)).toBe(true)\n })\n })\n\n it('should validate www URLs without protocol', () => {\n const validUrls = [\n 'www.example.com',\n 'www.example.com/resource',\n 'www.example.com/resource?query=1',\n 'www.example.com#fragment',\n ]\n\n validUrls.forEach((url) => {\n expect(validateUrl(url)).toBe(true)\n })\n })\n })\n\n describe('relative URLs', () => {\n it('should validate relative paths', () => {\n const validUrls = [\n '/path/to/resource',\n '/file-name.html',\n '/',\n '/dir/',\n '/path.with.dots/',\n '/path#fragment',\n ]\n\n validUrls.forEach((url) => {\n expect(validateUrl(url)).toBe(true)\n })\n })\n })\n\n describe('anchor links', () => {\n it('should validate anchor links', () => {\n const validUrls = ['#anchor', '#section-title']\n\n validUrls.forEach((url) => {\n expect(validateUrl(url)).toBe(true)\n })\n })\n })\n\n describe('with query params', () => {\n it('should validate relative URLs with query parameters', () => {\n const validUrls = [\n '/page?id=123',\n '/search?q=test',\n '/products?category=electronics&sort=price',\n '/path?key=value&another=param',\n '/page?id=123&filter=active',\n '/?global=true',\n ]\n\n validUrls.forEach((url) => {\n expect(validateUrl(url)).toBe(true)\n })\n })\n\n it('should validate absolute URLs with query parameters', () => {\n const validUrls = [\n 'https://example.com?id=123',\n 'http://example.com/page?key=value',\n 'www.example.com?search=query',\n 'https://example.com/path?a=1&b=2&c=3',\n ]\n\n validUrls.forEach((url) => {\n expect(validateUrl(url)).toBe(true)\n })\n })\n\n it('should validate URLs with query parameters and anchors', () => {\n const validUrls = [\n '/page?id=123#section',\n 'https://example.com?key=value#anchor',\n '/search?q=test#results',\n ]\n\n validUrls.forEach((url) => {\n expect(validateUrl(url)).toBe(true)\n })\n })\n })\n\n describe('edge cases', () => {\n it('should handle the default https:// case', () => {\n expect(validateUrl('https://')).toBe(true)\n })\n\n it('should return false for empty or invalid URLs', () => {\n const invalidUrls = [\n '',\n 'not-a-url',\n 'example.com',\n 'relative/path',\n 'file.html',\n 'some#fragment',\n 'http://',\n 'http:/example.com',\n 'http//example.com',\n ]\n\n invalidUrls.forEach((url) => {\n expect(validateUrl(url)).toBe(false)\n })\n })\n\n it('should return false for URLs with spaces', () => {\n const invalidUrls = [\n '/path/with spaces',\n 'http://example.com/ spaces',\n 'https://example.com/path with spaces',\n ]\n\n invalidUrls.forEach((url) => {\n expect(validateUrl(url)).toBe(false)\n })\n })\n\n it('should return false for malformed URLs', () => {\n const invalidUrls = ['://missing.scheme', 'ftp://example .com', 'http://example', '#', '/#']\n\n invalidUrls.forEach((url) => {\n expect(validateUrl(url)).toBe(false)\n })\n })\n })\n })\n})\n"],"mappings":"AAAA,SAASA,QAAQ,EAAEC,EAAE,EAAEC,MAAM,QAAQ;AACrC,SAASC,cAAc,EAAEC,sBAAsB,EAAEC,WAAW,QAAQ;AAEpEL,QAAA,CAAS,8BAA8B;EACrCA,QAAA,CAAS,0BAA0B;IACjCC,EAAA,CAAG,wCAAwC;MACzC,MAAMK,WAAA,GAAc,CAClB,qBACA,mBACA,KACA,SACA,oBACA,WACA,kBACA,kBACA,gBACA,wBACA,kBACA,gBACD;MAEDA,WAAA,CAAYC,OAAO,CAAEC,QAAA;QACnBN,MAAA,CAAOE,sBAAA,CAAuBK,IAAI,CAACD,QAAA,GAAWE,IAAI,CAAC;MACrD;IACF;IAEAT,EAAA,CAAG,4CAA4C;MAC7C,MAAMU,cAAA,GAAiB,CACrB,SACA,sBACA,iBACA,aACA,iBACA,KACA,MACA,qBACA,IACA,oBACD;MAEDA,cAAA,CAAeJ,OAAO,CAAEC,QAAA;QACtBN,MAAA,CAAOE,sBAAA,CAAuBK,IAAI,CAACD,QAAA,GAAWI,GAAG,CAACF,IAAI,CAAC;MACzD;IACF;EACF;EAEAV,QAAA,CAAS,kBAAkB;IACzBC,EAAA,CAAG,wCAAwC;MACzC,MAAMK,WAAA,GAAc,CAClB,sBACA,uBACA,2BACA,+BACA,0CACA,sCACA,0BACA,qCACA,4BACA,mBACA,gCACA,mBACA,4BACA,oCACA,2BACD;MAEDA,WAAA,CAAYC,OAAO,CAAEC,QAAA;QACnBN,MAAA,CAAOC,cAAA,CAAeM,IAAI,CAACD,QAAA,GAAWE,IAAI,CAAC;MAC7C;IACF;IAEAT,EAAA,CAAG,4CAA4C;MAC7C,MAAMU,cAAA,GAAiB,CACrB,kBACA,WACA,eACA,qBACA,WACA,qBACA,sBACA,kBACA,aACA,qBACA,8BACD;MAEDA,cAAA,CAAeJ,OAAO,CAAEC,QAAA;QACtBN,MAAA,CAAOC,cAAA,CAAeM,IAAI,CAACD,QAAA,GAAWI,GAAG,CAACF,IAAI,CAAC;MACjD;IACF;EACF;EAEAV,QAAA,CAAS,eAAe;IACtBA,QAAA,CAAS,iBAAiB;MACxBC,EAAA,CAAG,uCAAuC;QACxC,MAAMY,SAAA,GAAY,CAChB,sBACA,uBACA,0BACA,qCACA,+BACA,0CACA,qCACD;QAEDA,SAAA,CAAUN,OAAO,CAAEO,GAAA;UACjBZ,MAAA,CAAOG,WAAA,CAAYS,GAAA,GAAMJ,IAAI,CAAC;QAChC;MACF;MAEAT,EAAA,CAAG,uCAAuC;QACxC,MAAMY,SAAA,GAAY,CAAC,2BAA2B,4BAA4B,kBAAkB;QAE5FA,SAAA,CAAUN,OAAO,CAAEO,GAAA;UACjBZ,MAAA,CAAOG,WAAA,CAAYS,GAAA,GAAMJ,IAAI,CAAC;QAChC;MACF;MAEAT,EAAA,CAAG,6CAA6C;QAC9C,MAAMY,SAAA,GAAY,CAChB,mBACA,4BACA,oCACA,2BACD;QAEDA,SAAA,CAAUN,OAAO,CAAEO,GAAA;UACjBZ,MAAA,CAAOG,WAAA,CAAYS,GAAA,GAAMJ,IAAI,CAAC;QAChC;MACF;IACF;IAEAV,QAAA,CAAS,iBAAiB;MACxBC,EAAA,CAAG,kCAAkC;QACnC,MAAMY,SAAA,GAAY,CAChB,qBACA,mBACA,KACA,SACA,oBACA,iBACD;QAEDA,SAAA,CAAUN,OAAO,CAAEO,GAAA;UACjBZ,MAAA,CAAOG,WAAA,CAAYS,GAAA,GAAMJ,IAAI,CAAC;QAChC;MACF;IACF;IAEAV,QAAA,CAAS,gBAAgB;MACvBC,EAAA,CAAG,gCAAgC;QACjC,MAAMY,SAAA,GAAY,CAAC,WAAW,iBAAiB;QAE/CA,SAAA,CAAUN,OAAO,CAAEO,GAAA;UACjBZ,MAAA,CAAOG,WAAA,CAAYS,GAAA,GAAMJ,IAAI,CAAC;QAChC;MACF;IACF;IAEAV,QAAA,CAAS,qBAAqB;MAC5BC,EAAA,CAAG,uDAAuD;QACxD,MAAMY,SAAA,GAAY,CAChB,gBACA,kBACA,6CACA,iCACA,8BACA,gBACD;QAEDA,SAAA,CAAUN,OAAO,CAAEO,GAAA;UACjBZ,MAAA,CAAOG,WAAA,CAAYS,GAAA,GAAMJ,IAAI,CAAC;QAChC;MACF;MAEAT,EAAA,CAAG,uDAAuD;QACxD,MAAMY,SAAA,GAAY,CAChB,8BACA,qCACA,gCACA,uCACD;QAEDA,SAAA,CAAUN,OAAO,CAAEO,GAAA;UACjBZ,MAAA,CAAOG,WAAA,CAAYS,GAAA,GAAMJ,IAAI,CAAC;QAChC;MACF;MAEAT,EAAA,CAAG,0DAA0D;QAC3D,MAAMY,SAAA,GAAY,CAChB,wBACA,wCACA,yBACD;QAEDA,SAAA,CAAUN,OAAO,CAAEO,GAAA;UACjBZ,MAAA,CAAOG,WAAA,CAAYS,GAAA,GAAMJ,IAAI,CAAC;QAChC;MACF;IACF;IAEAV,QAAA,CAAS,cAAc;MACrBC,EAAA,CAAG,2CAA2C;QAC5CC,MAAA,CAAOG,WAAA,CAAY,aAAaK,IAAI,CAAC;MACvC;MAEAT,EAAA,CAAG,iDAAiD;QAClD,MAAMc,WAAA,GAAc,CAClB,IACA,aACA,eACA,iBACA,aACA,iBACA,WACA,qBACA,oBACD;QAEDA,WAAA,CAAYR,OAAO,CAAEO,GAAA;UACnBZ,MAAA,CAAOG,WAAA,CAAYS,GAAA,GAAMJ,IAAI,CAAC;QAChC;MACF;MAEAT,EAAA,CAAG,4CAA4C;QAC7C,MAAMc,WAAA,GAAc,CAClB,qBACA,8BACA,uCACD;QAEDA,WAAA,CAAYR,OAAO,CAAEO,GAAA;UACnBZ,MAAA,CAAOG,WAAA,CAAYS,GAAA,GAAMJ,IAAI,CAAC;QAChC;MACF;MAEAT,EAAA,CAAG,0CAA0C;QAC3C,MAAMc,WAAA,GAAc,CAAC,qBAAqB,sBAAsB,kBAAkB,KAAK,KAAK;QAE5FA,WAAA,CAAYR,OAAO,CAAEO,GAAA;UACnBZ,MAAA,CAAOG,WAAA,CAAYS,GAAA,GAAMJ,IAAI,CAAC;QAChC;MACF;IACF;EACF;AACF","ignoreList":[]}
|
|
@@ -1,178 +0,0 @@
|
|
|
1
|
-
import { describe, it, expect } from 'vitest';
|
|
2
|
-
import { extractPropsFromJSXPropsString } from './extractPropsFromJSXPropsString.js';
|
|
3
|
-
import { propsToJSXString } from './jsx.js';
|
|
4
|
-
describe('jsx', () => {
|
|
5
|
-
describe('prop string to object', () => {
|
|
6
|
-
const INPUT_AND_OUTPUT = [{
|
|
7
|
-
input: 'key="value"',
|
|
8
|
-
output: {
|
|
9
|
-
key: 'value'
|
|
10
|
-
}
|
|
11
|
-
}, {
|
|
12
|
-
input: "key='value'",
|
|
13
|
-
output: {
|
|
14
|
-
key: 'value'
|
|
15
|
-
},
|
|
16
|
-
inputFromOutput: 'key="value"'
|
|
17
|
-
}, {
|
|
18
|
-
input: 'key={[1, 2, 3]}',
|
|
19
|
-
output: {
|
|
20
|
-
key: [1, 2, 3]
|
|
21
|
-
}
|
|
22
|
-
}, {
|
|
23
|
-
input: 'key={[1, 2, 3, [1, 2]]}',
|
|
24
|
-
output: {
|
|
25
|
-
key: [1, 2, 3, [1, 2]]
|
|
26
|
-
}
|
|
27
|
-
}, {
|
|
28
|
-
input: 'object={4}',
|
|
29
|
-
output: {
|
|
30
|
-
object: 4
|
|
31
|
-
}
|
|
32
|
-
}, {
|
|
33
|
-
input: 'object={{"test": 1}}',
|
|
34
|
-
output: {
|
|
35
|
-
object: {
|
|
36
|
-
test: 1
|
|
37
|
-
}
|
|
38
|
-
}
|
|
39
|
-
}, {
|
|
40
|
-
input: 'object={[1, 2, 3, [1, 2]]}',
|
|
41
|
-
output: {
|
|
42
|
-
object: [1, 2, 3, [1, 2]]
|
|
43
|
-
}
|
|
44
|
-
}, {
|
|
45
|
-
input: 'object={[1, 2]}',
|
|
46
|
-
output: {
|
|
47
|
-
object: [1, 2]
|
|
48
|
-
}
|
|
49
|
-
}, {
|
|
50
|
-
input: 'key="value" object={{key: "value"}}',
|
|
51
|
-
inputFromOutput: 'key="value" object={{"key": "value"}}',
|
|
52
|
-
output: {
|
|
53
|
-
key: 'value',
|
|
54
|
-
object: {
|
|
55
|
-
key: 'value'
|
|
56
|
-
}
|
|
57
|
-
}
|
|
58
|
-
}, {
|
|
59
|
-
input: 'global packageId="myId" uniqueId="some unique id!" update',
|
|
60
|
-
output: {
|
|
61
|
-
global: true,
|
|
62
|
-
packageId: 'myId',
|
|
63
|
-
uniqueId: 'some unique id!',
|
|
64
|
-
update: true
|
|
65
|
-
}
|
|
66
|
-
}, {
|
|
67
|
-
input: 'global key="value" object={{key: "value", something: "test", hello: 1}} packageId="myId" uniqueId="some unique id!" update',
|
|
68
|
-
inputFromOutput: 'global key="value" object={{"hello": 1, "key": "value", "something": "test"}} packageId="myId" uniqueId="some unique id!" update',
|
|
69
|
-
output: {
|
|
70
|
-
global: true,
|
|
71
|
-
key: 'value',
|
|
72
|
-
object: {
|
|
73
|
-
hello: 1,
|
|
74
|
-
key: 'value',
|
|
75
|
-
something: 'test'
|
|
76
|
-
},
|
|
77
|
-
packageId: 'myId',
|
|
78
|
-
uniqueId: 'some unique id!',
|
|
79
|
-
update: true
|
|
80
|
-
}
|
|
81
|
-
}, {
|
|
82
|
-
input: 'object={{hello: 1, key: "value", nested: { key: "value" }, something: "test", test: [1, 2, 3]}}',
|
|
83
|
-
inputFromOutput: 'object={{"hello": 1, "key": "value", "nested": {"key": "value"}, "something": "test", "test": [1, 2, 3]}}',
|
|
84
|
-
output: {
|
|
85
|
-
object: {
|
|
86
|
-
hello: 1,
|
|
87
|
-
key: 'value',
|
|
88
|
-
nested: {
|
|
89
|
-
key: 'value'
|
|
90
|
-
},
|
|
91
|
-
something: 'test',
|
|
92
|
-
test: [1, 2, 3]
|
|
93
|
-
}
|
|
94
|
-
}
|
|
95
|
-
}, {
|
|
96
|
-
input: 'global key="value" object={{hello: 1, key: "value", nested: { key: "value" }, something: "test", test: [1, 2, 3]}} packageId="myId" uniqueId="some unique id!" update',
|
|
97
|
-
inputFromOutput: 'global key="value" object={{"hello": 1, "key": "value", "nested": { "key": "value" }, "something": "test", "test": [1, 2, 3]}} packageId="myId" uniqueId="some unique id!" update',
|
|
98
|
-
output: {
|
|
99
|
-
global: true,
|
|
100
|
-
key: 'value',
|
|
101
|
-
object: {
|
|
102
|
-
hello: 1,
|
|
103
|
-
key: 'value',
|
|
104
|
-
nested: {
|
|
105
|
-
key: 'value'
|
|
106
|
-
},
|
|
107
|
-
something: 'test',
|
|
108
|
-
test: [1, 2, 3]
|
|
109
|
-
},
|
|
110
|
-
packageId: 'myId',
|
|
111
|
-
uniqueId: 'some unique id!',
|
|
112
|
-
update: true
|
|
113
|
-
}
|
|
114
|
-
}, {
|
|
115
|
-
// Test if unquoted property keys in objects within arrays are supprted. This is
|
|
116
|
-
// supported through the more lenient JSOX parser, instead of using JSON.parse()
|
|
117
|
-
input: 'key={[1, 2, { hello: "there" }]}',
|
|
118
|
-
inputFromOutput: 'key={[1, 2, { "hello": "there" }]}',
|
|
119
|
-
output: {
|
|
120
|
-
key: [1, 2, {
|
|
121
|
-
hello: 'there'
|
|
122
|
-
}]
|
|
123
|
-
}
|
|
124
|
-
}, {
|
|
125
|
-
// Test if ` strings work
|
|
126
|
-
input: `key={[1, 2, { hello: \`there\` }]}`,
|
|
127
|
-
inputFromOutput: 'key={[1, 2, { "hello": "there" }]}',
|
|
128
|
-
output: {
|
|
129
|
-
key: [1, 2, {
|
|
130
|
-
hello: 'there'
|
|
131
|
-
}]
|
|
132
|
-
}
|
|
133
|
-
}, {
|
|
134
|
-
// Test if multiline ` strings work
|
|
135
|
-
input: `key={[1, 2, { hello: \`Hello
|
|
136
|
-
there\` }]}`,
|
|
137
|
-
inputFromOutput: 'key={[1, 2, { "hello": "Hello\\nthere" }]}',
|
|
138
|
-
output: {
|
|
139
|
-
key: [1, 2, {
|
|
140
|
-
hello: 'Hello\nthere'
|
|
141
|
-
}]
|
|
142
|
-
}
|
|
143
|
-
}];
|
|
144
|
-
for (const {
|
|
145
|
-
input,
|
|
146
|
-
output
|
|
147
|
-
} of INPUT_AND_OUTPUT) {
|
|
148
|
-
it(`can correctly convert to object: "${input.replace(/\n/g, '\\n')}"`, () => {
|
|
149
|
-
const propsObject = extractPropsFromJSXPropsString({
|
|
150
|
-
propsString: input
|
|
151
|
-
});
|
|
152
|
-
console.log({
|
|
153
|
-
output,
|
|
154
|
-
propsObject
|
|
155
|
-
});
|
|
156
|
-
expect(propsObject).toStrictEqual(output);
|
|
157
|
-
});
|
|
158
|
-
}
|
|
159
|
-
for (const {
|
|
160
|
-
input: originalInput,
|
|
161
|
-
inputFromOutput,
|
|
162
|
-
output
|
|
163
|
-
} of INPUT_AND_OUTPUT) {
|
|
164
|
-
const input = inputFromOutput || originalInput;
|
|
165
|
-
it(`can correctly convert from object: "${input.replace(/\n/g, '\\n')}"`, () => {
|
|
166
|
-
const propsString = propsToJSXString({
|
|
167
|
-
props: output
|
|
168
|
-
});
|
|
169
|
-
console.log({
|
|
170
|
-
input,
|
|
171
|
-
propsString
|
|
172
|
-
});
|
|
173
|
-
expect(propsString.replaceAll(' ', '')).toBe(input.replaceAll(' ', ''));
|
|
174
|
-
});
|
|
175
|
-
}
|
|
176
|
-
});
|
|
177
|
-
});
|
|
178
|
-
//# sourceMappingURL=jsx.spec.js.map
|