mirror of
https://github.com/ianstormtaylor/slate.git
synced 2025-08-31 10:51:44 +02:00
improve perf on marks functions on nodes (#677)
* refactor benchmarks, add get-marks benchmarks * fix benchmark running * cleanup benchmarks * switch getMarks implementation, add getMarksByType
This commit is contained in:
@@ -1,19 +0,0 @@
|
||||
|
||||
export function before(state) {
|
||||
return state
|
||||
.transform()
|
||||
.select({
|
||||
anchorKey: '_cursor_',
|
||||
anchorOffset: 10,
|
||||
focusKey: '_cursor_',
|
||||
focusOffset: 10
|
||||
})
|
||||
.apply()
|
||||
}
|
||||
|
||||
export default function (state) {
|
||||
state
|
||||
.transform()
|
||||
.deleteBackward()
|
||||
.apply()
|
||||
}
|
@@ -1,71 +0,0 @@
|
||||
nodes:
|
||||
# Same than normalize-document-normal, but nested in 3 levels of paragraphs
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: text
|
||||
ranges:
|
||||
- text: 'This is editable '
|
||||
- text: 'rich'
|
||||
marks:
|
||||
- type: bold
|
||||
- text: ' text, '
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: text
|
||||
ranges:
|
||||
- text: 'much'
|
||||
marks:
|
||||
- type: italic
|
||||
- text: ' better than a '
|
||||
- text: '<textarea>'
|
||||
marks:
|
||||
- type: code
|
||||
- text: '!'
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: text
|
||||
key: _cursor_
|
||||
ranges:
|
||||
- text: 'Since it''s rich text, you can do things like turn a selection of text '
|
||||
- text: 'bold'
|
||||
marks:
|
||||
- type: bold
|
||||
- text: ', or add a semantically rendered block quote in the middle of the page,
|
||||
like this:'
|
||||
- kind: block
|
||||
type: block-quote
|
||||
nodes:
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: text
|
||||
text: 'A wise quote.'
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: text
|
||||
text: 'Try it out for yourself!'
|
@@ -1,19 +0,0 @@
|
||||
|
||||
export function before(state) {
|
||||
return state
|
||||
.transform()
|
||||
.select({
|
||||
anchorKey: '_cursor_',
|
||||
anchorOffset: 10,
|
||||
focusKey: '_cursor_',
|
||||
focusOffset: 10
|
||||
})
|
||||
.apply()
|
||||
}
|
||||
|
||||
export default function (state) {
|
||||
state
|
||||
.transform()
|
||||
.deleteBackward()
|
||||
.apply()
|
||||
}
|
@@ -1,120 +0,0 @@
|
||||
nodes:
|
||||
# Same than normalize-document-normal, but concatened 3 times
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: text
|
||||
ranges:
|
||||
- text: 'This is editable '
|
||||
- text: 'rich'
|
||||
marks:
|
||||
- type: bold
|
||||
- text: ' text, '
|
||||
- text: 'much'
|
||||
marks:
|
||||
- type: italic
|
||||
- text: ' better than a '
|
||||
- text: '<textarea>'
|
||||
marks:
|
||||
- type: code
|
||||
- text: '!'
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: text
|
||||
key: _cursor_
|
||||
ranges:
|
||||
- text: 'Since it''s rich text, you can do things like turn a selection of text '
|
||||
- text: 'bold'
|
||||
marks:
|
||||
- type: bold
|
||||
- text: ', or add a semantically rendered block quote in the middle of the page,
|
||||
like this:'
|
||||
- kind: block
|
||||
type: block-quote
|
||||
nodes:
|
||||
- kind: text
|
||||
text: 'A wise quote.'
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: text
|
||||
text: 'Try it out for yourself!'
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: text
|
||||
ranges:
|
||||
- text: 'This is editable '
|
||||
- text: 'rich'
|
||||
marks:
|
||||
- type: bold
|
||||
- text: ' text, '
|
||||
- text: 'much'
|
||||
marks:
|
||||
- type: italic
|
||||
- text: ' better than a '
|
||||
- text: '<textarea>'
|
||||
marks:
|
||||
- type: code
|
||||
- text: '!'
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: text
|
||||
ranges:
|
||||
- text: 'Since it''s rich text, you can do things like turn a selection of text '
|
||||
- text: 'bold'
|
||||
marks:
|
||||
- type: bold
|
||||
- text: ', or add a semantically rendered block quote in the middle of the page,
|
||||
like this:'
|
||||
- kind: block
|
||||
type: block-quote
|
||||
nodes:
|
||||
- kind: text
|
||||
text: 'A wise quote.'
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: text
|
||||
text: 'Try it out for yourself!'
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: text
|
||||
ranges:
|
||||
- text: 'This is editable '
|
||||
- text: 'rich'
|
||||
marks:
|
||||
- type: bold
|
||||
- text: ' text, '
|
||||
- text: 'much'
|
||||
marks:
|
||||
- type: italic
|
||||
- text: ' better than a '
|
||||
- text: '<textarea>'
|
||||
marks:
|
||||
- type: code
|
||||
- text: '!'
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: text
|
||||
ranges:
|
||||
- text: 'Since it''s rich text, you can do things like turn a selection of text '
|
||||
- text: 'bold'
|
||||
marks:
|
||||
- type: bold
|
||||
- text: ', or add a semantically rendered block quote in the middle of the page,
|
||||
like this:'
|
||||
- kind: block
|
||||
type: block-quote
|
||||
nodes:
|
||||
- kind: text
|
||||
text: 'A wise quote.'
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: text
|
||||
text: 'Try it out for yourself!'
|
@@ -1,10 +0,0 @@
|
||||
|
||||
import { Editor } from '../../..'
|
||||
import React from 'react'
|
||||
import ReactDOM from 'react-dom'
|
||||
|
||||
export default function (state) {
|
||||
const div = document.createElement('div')
|
||||
const props = { state }
|
||||
ReactDOM.render(<Editor {...props} />, div)
|
||||
}
|
@@ -1,40 +0,0 @@
|
||||
nodes:
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: text
|
||||
ranges:
|
||||
- text: 'This is editable '
|
||||
- text: 'rich'
|
||||
marks:
|
||||
- type: bold
|
||||
- text: ' text, '
|
||||
- text: 'much'
|
||||
marks:
|
||||
- type: italic
|
||||
- text: ' better than a '
|
||||
- text: '<textarea>'
|
||||
marks:
|
||||
- type: code
|
||||
- text: '!'
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: text
|
||||
ranges:
|
||||
- text: 'Since it''s rich text, you can do things like turn a selection of text '
|
||||
- text: 'bold'
|
||||
marks:
|
||||
- type: bold
|
||||
- text: ', or add a semantically rendered block quote in the middle of the page,
|
||||
like this:'
|
||||
- kind: block
|
||||
type: block-quote
|
||||
nodes:
|
||||
- kind: text
|
||||
text: 'A wise quote.'
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: text
|
||||
text: 'Try it out for yourself!'
|
@@ -1,4 +0,0 @@
|
||||
|
||||
export default function (state) {
|
||||
state.document.getTexts()
|
||||
}
|
@@ -1,40 +0,0 @@
|
||||
nodes:
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: text
|
||||
ranges:
|
||||
- text: 'This is editable '
|
||||
- text: 'rich'
|
||||
marks:
|
||||
- type: bold
|
||||
- text: ' text, '
|
||||
- text: 'much'
|
||||
marks:
|
||||
- type: italic
|
||||
- text: ' better than a '
|
||||
- text: '<textarea>'
|
||||
marks:
|
||||
- type: code
|
||||
- text: '!'
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: text
|
||||
ranges:
|
||||
- text: 'Since it''s rich text, you can do things like turn a selection of text '
|
||||
- text: 'bold'
|
||||
marks:
|
||||
- type: bold
|
||||
- text: ', or add a semantically rendered block quote in the middle of the page,
|
||||
like this:'
|
||||
- kind: block
|
||||
type: block-quote
|
||||
nodes:
|
||||
- kind: text
|
||||
text: 'A wise quote.'
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: text
|
||||
text: 'Try it out for yourself!'
|
@@ -1,41 +0,0 @@
|
||||
nodes:
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: text
|
||||
ranges:
|
||||
- text: 'This is editable '
|
||||
- text: 'rich'
|
||||
marks:
|
||||
- type: bold
|
||||
- text: ' text, '
|
||||
- text: 'much'
|
||||
marks:
|
||||
- type: italic
|
||||
- text: ' better than a '
|
||||
- text: '<textarea>'
|
||||
marks:
|
||||
- type: code
|
||||
- text: '!'
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: text
|
||||
key: _cursor_
|
||||
ranges:
|
||||
- text: 'Since it''s rich text, you can do things like turn a selection of text '
|
||||
- text: 'bold'
|
||||
marks:
|
||||
- type: bold
|
||||
- text: ', or add a semantically rendered block quote in the middle of the page,
|
||||
like this:'
|
||||
- kind: block
|
||||
type: block-quote
|
||||
nodes:
|
||||
- kind: text
|
||||
text: 'A wise quote.'
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: text
|
||||
text: 'Try it out for yourself!'
|
@@ -1,70 +0,0 @@
|
||||
nodes:
|
||||
# Same than normalize-document-normal, but nested in 3 levels of paragraphs
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: text
|
||||
ranges:
|
||||
- text: 'This is editable '
|
||||
- text: 'rich'
|
||||
marks:
|
||||
- type: bold
|
||||
- text: ' text, '
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: text
|
||||
ranges:
|
||||
- text: 'much'
|
||||
marks:
|
||||
- type: italic
|
||||
- text: ' better than a '
|
||||
- text: '<textarea>'
|
||||
marks:
|
||||
- type: code
|
||||
- text: '!'
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: text
|
||||
ranges:
|
||||
- text: 'Since it''s rich text, you can do things like turn a selection of text '
|
||||
- text: 'bold'
|
||||
marks:
|
||||
- type: bold
|
||||
- text: ', or add a semantically rendered block quote in the middle of the page,
|
||||
like this:'
|
||||
- kind: block
|
||||
type: block-quote
|
||||
nodes:
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: text
|
||||
text: 'A wise quote.'
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: text
|
||||
text: 'Try it out for yourself!'
|
@@ -1,9 +0,0 @@
|
||||
|
||||
import SCHEMA from '../../../lib/constants/schema'
|
||||
|
||||
export default function (state) {
|
||||
state
|
||||
.transform({ normalized: false })
|
||||
.normalize(SCHEMA)
|
||||
.apply()
|
||||
}
|
@@ -1,40 +0,0 @@
|
||||
nodes:
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: text
|
||||
ranges:
|
||||
- text: 'This is editable '
|
||||
- text: 'rich'
|
||||
marks:
|
||||
- type: bold
|
||||
- text: ' text, '
|
||||
- text: 'much'
|
||||
marks:
|
||||
- type: italic
|
||||
- text: ' better than a '
|
||||
- text: '<textarea>'
|
||||
marks:
|
||||
- type: code
|
||||
- text: '!'
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: text
|
||||
ranges:
|
||||
- text: 'Since it''s rich text, you can do things like turn a selection of text '
|
||||
- text: 'bold'
|
||||
marks:
|
||||
- type: bold
|
||||
- text: ', or add a semantically rendered block quote in the middle of the page,
|
||||
like this:'
|
||||
- kind: block
|
||||
type: block-quote
|
||||
nodes:
|
||||
- kind: text
|
||||
text: 'A wise quote.'
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: text
|
||||
text: 'Try it out for yourself!'
|
@@ -1,23 +0,0 @@
|
||||
|
||||
import SCHEMA from '../../../lib/constants/schema'
|
||||
|
||||
export default function (state) {
|
||||
const selection = state.selection.merge({
|
||||
anchorKey: '_cursor_',
|
||||
anchorOffset: 0,
|
||||
focusKey: '_cursor_',
|
||||
focusOffset: 0
|
||||
})
|
||||
|
||||
state
|
||||
.transform({ normalized: false })
|
||||
.normalize(SCHEMA)
|
||||
.apply()
|
||||
.transform()
|
||||
// Make a fast, dummy change
|
||||
.select(selection)
|
||||
.insertText('inserted text')
|
||||
// We want to compare the speed of that second normalize (optimized through memoization, or other means)
|
||||
.normalize(SCHEMA)
|
||||
.apply()
|
||||
}
|
File diff suppressed because it is too large
Load Diff
@@ -1,9 +0,0 @@
|
||||
|
||||
import SCHEMA from '../../../lib/constants/schema'
|
||||
|
||||
export default function (state) {
|
||||
state
|
||||
.transform({ normalized: false })
|
||||
.normalize(SCHEMA)
|
||||
.apply()
|
||||
}
|
@@ -1,119 +0,0 @@
|
||||
nodes:
|
||||
# Same than normalize-document-normal, but concatened 3 times
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: text
|
||||
ranges:
|
||||
- text: 'This is editable '
|
||||
- text: 'rich'
|
||||
marks:
|
||||
- type: bold
|
||||
- text: ' text, '
|
||||
- text: 'much'
|
||||
marks:
|
||||
- type: italic
|
||||
- text: ' better than a '
|
||||
- text: '<textarea>'
|
||||
marks:
|
||||
- type: code
|
||||
- text: '!'
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: text
|
||||
ranges:
|
||||
- text: 'Since it''s rich text, you can do things like turn a selection of text '
|
||||
- text: 'bold'
|
||||
marks:
|
||||
- type: bold
|
||||
- text: ', or add a semantically rendered block quote in the middle of the page,
|
||||
like this:'
|
||||
- kind: block
|
||||
type: block-quote
|
||||
nodes:
|
||||
- kind: text
|
||||
text: 'A wise quote.'
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: text
|
||||
text: 'Try it out for yourself!'
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: text
|
||||
ranges:
|
||||
- text: 'This is editable '
|
||||
- text: 'rich'
|
||||
marks:
|
||||
- type: bold
|
||||
- text: ' text, '
|
||||
- text: 'much'
|
||||
marks:
|
||||
- type: italic
|
||||
- text: ' better than a '
|
||||
- text: '<textarea>'
|
||||
marks:
|
||||
- type: code
|
||||
- text: '!'
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: text
|
||||
ranges:
|
||||
- text: 'Since it''s rich text, you can do things like turn a selection of text '
|
||||
- text: 'bold'
|
||||
marks:
|
||||
- type: bold
|
||||
- text: ', or add a semantically rendered block quote in the middle of the page,
|
||||
like this:'
|
||||
- kind: block
|
||||
type: block-quote
|
||||
nodes:
|
||||
- kind: text
|
||||
text: 'A wise quote.'
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: text
|
||||
text: 'Try it out for yourself!'
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: text
|
||||
ranges:
|
||||
- text: 'This is editable '
|
||||
- text: 'rich'
|
||||
marks:
|
||||
- type: bold
|
||||
- text: ' text, '
|
||||
- text: 'much'
|
||||
marks:
|
||||
- type: italic
|
||||
- text: ' better than a '
|
||||
- text: '<textarea>'
|
||||
marks:
|
||||
- type: code
|
||||
- text: '!'
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: text
|
||||
ranges:
|
||||
- text: 'Since it''s rich text, you can do things like turn a selection of text '
|
||||
- text: 'bold'
|
||||
marks:
|
||||
- type: bold
|
||||
- text: ', or add a semantically rendered block quote in the middle of the page,
|
||||
like this:'
|
||||
- kind: block
|
||||
type: block-quote
|
||||
nodes:
|
||||
- kind: text
|
||||
text: 'A wise quote.'
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: text
|
||||
text: 'Try it out for yourself!'
|
@@ -1,22 +0,0 @@
|
||||
|
||||
import { Editor } from '../../..'
|
||||
import React from 'react'
|
||||
import ReactDOM from 'react-dom'
|
||||
|
||||
export function before(state) {
|
||||
return state.transform()
|
||||
.select({
|
||||
anchorKey: '_cursor_',
|
||||
anchorOffset: 10,
|
||||
focusKey: '_cursor_',
|
||||
focusOffset: 10
|
||||
})
|
||||
.apply()
|
||||
}
|
||||
|
||||
export default function (state) {
|
||||
const div = document.createElement('div')
|
||||
ReactDOM.render(<Editor state={state} />, div)
|
||||
state = state.transform().splitBlock().apply()
|
||||
ReactDOM.render(<Editor state={state} />, div)
|
||||
}
|
@@ -1,41 +0,0 @@
|
||||
nodes:
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: text
|
||||
ranges:
|
||||
- text: 'This is editable '
|
||||
- text: 'rich'
|
||||
marks:
|
||||
- type: bold
|
||||
- text: ' text, '
|
||||
- text: 'much'
|
||||
marks:
|
||||
- type: italic
|
||||
- text: ' better than a '
|
||||
- text: '<textarea>'
|
||||
marks:
|
||||
- type: code
|
||||
- text: '!'
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: text
|
||||
key: _cursor_
|
||||
ranges:
|
||||
- text: 'Since it''s rich text, you can do things like turn a selection of text '
|
||||
- text: 'bold'
|
||||
marks:
|
||||
- type: bold
|
||||
- text: ', or add a semantically rendered block quote in the middle of the page,
|
||||
like this:'
|
||||
- kind: block
|
||||
type: block-quote
|
||||
nodes:
|
||||
- kind: text
|
||||
text: 'A wise quote.'
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: text
|
||||
text: 'Try it out for yourself!'
|
@@ -1,71 +0,0 @@
|
||||
nodes:
|
||||
# Same than normalize-document-normal, but nested in 3 levels of paragraphs
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: text
|
||||
ranges:
|
||||
- text: 'This is editable '
|
||||
- text: 'rich'
|
||||
marks:
|
||||
- type: bold
|
||||
- text: ' text, '
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: text
|
||||
ranges:
|
||||
- text: 'much'
|
||||
marks:
|
||||
- type: italic
|
||||
- text: ' better than a '
|
||||
- text: '<textarea>'
|
||||
marks:
|
||||
- type: code
|
||||
- text: '!'
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: text
|
||||
key: _cursor_
|
||||
ranges:
|
||||
- text: 'Since it''s rich text, you can do things like turn a selection of text '
|
||||
- text: 'bold'
|
||||
marks:
|
||||
- type: bold
|
||||
- text: ', or add a semantically rendered block quote in the middle of the page,
|
||||
like this:'
|
||||
- kind: block
|
||||
type: block-quote
|
||||
nodes:
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: text
|
||||
text: 'A wise quote.'
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: text
|
||||
text: 'Try it out for yourself!'
|
@@ -1,19 +0,0 @@
|
||||
|
||||
export function before(state) {
|
||||
return state
|
||||
.transform()
|
||||
.select({
|
||||
anchorKey: '_cursor_',
|
||||
anchorOffset: 10,
|
||||
focusKey: '_cursor_',
|
||||
focusOffset: 10
|
||||
})
|
||||
.apply()
|
||||
}
|
||||
|
||||
export default function (state) {
|
||||
state
|
||||
.transform()
|
||||
.splitBlock()
|
||||
.apply()
|
||||
}
|
@@ -1,41 +0,0 @@
|
||||
nodes:
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: text
|
||||
ranges:
|
||||
- text: 'This is editable '
|
||||
- text: 'rich'
|
||||
marks:
|
||||
- type: bold
|
||||
- text: ' text, '
|
||||
- text: 'much'
|
||||
marks:
|
||||
- type: italic
|
||||
- text: ' better than a '
|
||||
- text: '<textarea>'
|
||||
marks:
|
||||
- type: code
|
||||
- text: '!'
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: text
|
||||
key: _cursor_
|
||||
ranges:
|
||||
- text: 'Since it''s rich text, you can do things like turn a selection of text '
|
||||
- text: 'bold'
|
||||
marks:
|
||||
- type: bold
|
||||
- text: ', or add a semantically rendered block quote in the middle of the page,
|
||||
like this:'
|
||||
- kind: block
|
||||
type: block-quote
|
||||
nodes:
|
||||
- kind: text
|
||||
text: 'A wise quote.'
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: text
|
||||
text: 'Try it out for yourself!'
|
@@ -1,19 +0,0 @@
|
||||
|
||||
export function before(state) {
|
||||
return state
|
||||
.transform()
|
||||
.select({
|
||||
anchorKey: '_cursor_',
|
||||
anchorOffset: 10,
|
||||
focusKey: '_cursor_',
|
||||
focusOffset: 10
|
||||
})
|
||||
.apply()
|
||||
}
|
||||
|
||||
export default function (state) {
|
||||
state
|
||||
.transform()
|
||||
.splitBlock()
|
||||
.apply()
|
||||
}
|
@@ -1,120 +0,0 @@
|
||||
nodes:
|
||||
# Same than normalize-document-normal, but concatened 3 times
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: text
|
||||
ranges:
|
||||
- text: 'This is editable '
|
||||
- text: 'rich'
|
||||
marks:
|
||||
- type: bold
|
||||
- text: ' text, '
|
||||
- text: 'much'
|
||||
marks:
|
||||
- type: italic
|
||||
- text: ' better than a '
|
||||
- text: '<textarea>'
|
||||
marks:
|
||||
- type: code
|
||||
- text: '!'
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: text
|
||||
key: _cursor_
|
||||
ranges:
|
||||
- text: 'Since it''s rich text, you can do things like turn a selection of text '
|
||||
- text: 'bold'
|
||||
marks:
|
||||
- type: bold
|
||||
- text: ', or add a semantically rendered block quote in the middle of the page,
|
||||
like this:'
|
||||
- kind: block
|
||||
type: block-quote
|
||||
nodes:
|
||||
- kind: text
|
||||
text: 'A wise quote.'
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: text
|
||||
text: 'Try it out for yourself!'
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: text
|
||||
ranges:
|
||||
- text: 'This is editable '
|
||||
- text: 'rich'
|
||||
marks:
|
||||
- type: bold
|
||||
- text: ' text, '
|
||||
- text: 'much'
|
||||
marks:
|
||||
- type: italic
|
||||
- text: ' better than a '
|
||||
- text: '<textarea>'
|
||||
marks:
|
||||
- type: code
|
||||
- text: '!'
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: text
|
||||
ranges:
|
||||
- text: 'Since it''s rich text, you can do things like turn a selection of text '
|
||||
- text: 'bold'
|
||||
marks:
|
||||
- type: bold
|
||||
- text: ', or add a semantically rendered block quote in the middle of the page,
|
||||
like this:'
|
||||
- kind: block
|
||||
type: block-quote
|
||||
nodes:
|
||||
- kind: text
|
||||
text: 'A wise quote.'
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: text
|
||||
text: 'Try it out for yourself!'
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: text
|
||||
ranges:
|
||||
- text: 'This is editable '
|
||||
- text: 'rich'
|
||||
marks:
|
||||
- type: bold
|
||||
- text: ' text, '
|
||||
- text: 'much'
|
||||
marks:
|
||||
- type: italic
|
||||
- text: ' better than a '
|
||||
- text: '<textarea>'
|
||||
marks:
|
||||
- type: code
|
||||
- text: '!'
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: text
|
||||
ranges:
|
||||
- text: 'Since it''s rich text, you can do things like turn a selection of text '
|
||||
- text: 'bold'
|
||||
marks:
|
||||
- type: bold
|
||||
- text: ', or add a semantically rendered block quote in the middle of the page,
|
||||
like this:'
|
||||
- kind: block
|
||||
type: block-quote
|
||||
nodes:
|
||||
- kind: text
|
||||
text: 'A wise quote.'
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: text
|
||||
text: 'Try it out for yourself!'
|
@@ -1,48 +0,0 @@
|
||||
|
||||
/**
|
||||
* Polyfills.
|
||||
*/
|
||||
|
||||
require('jsdom-global/register')
|
||||
|
||||
/**
|
||||
* Dependencies.
|
||||
*/
|
||||
|
||||
const fs = require('fs')
|
||||
const path = require('path')
|
||||
const readMetadata = require('read-metadata')
|
||||
const { __clear } = require('../lib/utils/memoize')
|
||||
const { Raw } = require('..')
|
||||
|
||||
/**
|
||||
* Benchmarks.
|
||||
*/
|
||||
|
||||
suite('benchmarks', () => {
|
||||
set('iterations', 200) // eslint-disable-line no-undef
|
||||
set('mintime', 2000) // eslint-disable-line no-undef
|
||||
|
||||
const fixtures = path.resolve(__dirname, './fixtures')
|
||||
const benchmarks = fs.readdirSync(fixtures)
|
||||
|
||||
benchmarks.forEach((benchmark) => {
|
||||
if (benchmark[0] === '.') return
|
||||
if (benchmark === 'normalize-document-twice') return
|
||||
|
||||
const dir = path.resolve(fixtures, benchmark)
|
||||
const input = readMetadata.sync(path.resolve(dir, 'input.yaml'))
|
||||
const initial = Raw.deserialize(input, { terse: true })
|
||||
const module = require(dir)
|
||||
const run = module.default
|
||||
const state = module.before ? module.before(initial) : initial
|
||||
|
||||
bench(benchmark, () => { // eslint-disable-line no-undef
|
||||
run(state)
|
||||
})
|
||||
|
||||
after(() => {
|
||||
__clear()
|
||||
})
|
||||
})
|
||||
})
|
@@ -1,8 +1,8 @@
|
||||
/* eslint-disable no-console */
|
||||
|
||||
import chalk from 'chalk'
|
||||
import baseline from '../tmp/bench-baseline'
|
||||
import comparison from '../tmp/bench-comparison'
|
||||
import baseline from '../tmp/benchmark-baseline'
|
||||
import comparison from '../tmp/benchmark-comparison'
|
||||
|
||||
/**
|
||||
* Constants.
|
||||
@@ -14,14 +14,16 @@ const THRESHOLD = 0.2
|
||||
* Print.
|
||||
*/
|
||||
|
||||
console.log()
|
||||
console.log(` benchmarks`)
|
||||
|
||||
baseline.forEach((suite, i) => {
|
||||
console.log()
|
||||
console.log(` ${suite.name}`)
|
||||
console.log(` ${suite.name}`)
|
||||
|
||||
suite.benchmarks.forEach((base, j) => {
|
||||
const comp = comparison[i].benchmarks[j]
|
||||
const b = (base.iterations / base.elapsed)
|
||||
const c = (comp.iterations / comp.elapsed)
|
||||
const b = base.iterations / base.elapsed * 100
|
||||
const c = comp.iterations / comp.elapsed * 100
|
||||
const threshold = b * THRESHOLD
|
||||
const slower = (b - c) > threshold
|
||||
const faster = (b - c) < (0 - threshold)
|
||||
@@ -31,9 +33,9 @@ baseline.forEach((suite, i) => {
|
||||
if (slower) output = chalk.red(`${output} (${percent}% slower)`)
|
||||
if (faster) output = chalk.green(`${output} (${percent}% faster)`)
|
||||
|
||||
console.log(` ${base.title}`)
|
||||
console.log(` ${output}`)
|
||||
console.log(` ${base.title}`)
|
||||
console.log(` ${output}`)
|
||||
})
|
||||
|
||||
console.log()
|
||||
})
|
||||
|
||||
console.log()
|
10
benchmark/fixtures/models/get-marks/index.js
Normal file
10
benchmark/fixtures/models/get-marks/index.js
Normal file
@@ -0,0 +1,10 @@
|
||||
|
||||
import { __clear } from '../../../../lib/utils/memoize'
|
||||
|
||||
export default function (state) {
|
||||
state.document.getMarks()
|
||||
}
|
||||
|
||||
export function after() {
|
||||
__clear()
|
||||
}
|
683
benchmark/fixtures/models/get-marks/input.yaml
Normal file
683
benchmark/fixtures/models/get-marks/input.yaml
Normal file
@@ -0,0 +1,683 @@
|
||||
nodes:
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: text
|
||||
ranges:
|
||||
- text: 'This is editable '
|
||||
- text: 'rich'
|
||||
marks:
|
||||
- type: bold
|
||||
- text: ' text, '
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: text
|
||||
ranges:
|
||||
- text: 'much'
|
||||
marks:
|
||||
- type: italic
|
||||
- text: ' better than a '
|
||||
- text: '<textarea>'
|
||||
marks:
|
||||
- type: code
|
||||
- text: '!'
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: text
|
||||
key: _cursor_
|
||||
ranges:
|
||||
- text: 'Since it''s rich text, you can do things like turn a selection of text '
|
||||
- text: 'bold'
|
||||
marks:
|
||||
- type: bold
|
||||
- text: ', or add a semantically rendered block quote in the middle of the page,
|
||||
like this:'
|
||||
- kind: block
|
||||
type: block-quote
|
||||
nodes:
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: text
|
||||
text: 'A wise quote.'
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: text
|
||||
text: 'Try it out for yourself!'
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: text
|
||||
ranges:
|
||||
- text: 'This is editable '
|
||||
- text: 'rich'
|
||||
marks:
|
||||
- type: bold
|
||||
- text: ' text, '
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: text
|
||||
ranges:
|
||||
- text: 'much'
|
||||
marks:
|
||||
- type: italic
|
||||
- text: ' better than a '
|
||||
- text: '<textarea>'
|
||||
marks:
|
||||
- type: code
|
||||
- text: '!'
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: text
|
||||
ranges:
|
||||
- text: 'Since it''s rich text, you can do things like turn a selection of text '
|
||||
- text: 'bold'
|
||||
marks:
|
||||
- type: bold
|
||||
- text: ', or add a semantically rendered block quote in the middle of the page,
|
||||
like this:'
|
||||
- kind: block
|
||||
type: block-quote
|
||||
nodes:
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: text
|
||||
text: 'A wise quote.'
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: text
|
||||
text: 'Try it out for yourself!'
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: text
|
||||
ranges:
|
||||
- text: 'This is editable '
|
||||
- text: 'rich'
|
||||
marks:
|
||||
- type: bold
|
||||
- text: ' text, '
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: text
|
||||
ranges:
|
||||
- text: 'much'
|
||||
marks:
|
||||
- type: italic
|
||||
- text: ' better than a '
|
||||
- text: '<textarea>'
|
||||
marks:
|
||||
- type: code
|
||||
- text: '!'
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: text
|
||||
ranges:
|
||||
- text: 'Since it''s rich text, you can do things like turn a selection of text '
|
||||
- text: 'bold'
|
||||
marks:
|
||||
- type: bold
|
||||
- text: ', or add a semantically rendered block quote in the middle of the page,
|
||||
like this:'
|
||||
- kind: block
|
||||
type: block-quote
|
||||
nodes:
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: text
|
||||
text: 'A wise quote.'
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: text
|
||||
text: 'Try it out for yourself!'
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: text
|
||||
ranges:
|
||||
- text: 'This is editable '
|
||||
- text: 'rich'
|
||||
marks:
|
||||
- type: bold
|
||||
- text: ' text, '
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: text
|
||||
ranges:
|
||||
- text: 'much'
|
||||
marks:
|
||||
- type: italic
|
||||
- text: ' better than a '
|
||||
- text: '<textarea>'
|
||||
marks:
|
||||
- type: code
|
||||
- text: '!'
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: text
|
||||
ranges:
|
||||
- text: 'Since it''s rich text, you can do things like turn a selection of text '
|
||||
- text: 'bold'
|
||||
marks:
|
||||
- type: bold
|
||||
- text: ', or add a semantically rendered block quote in the middle of the page,
|
||||
like this:'
|
||||
- kind: block
|
||||
type: block-quote
|
||||
nodes:
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: text
|
||||
text: 'A wise quote.'
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: text
|
||||
text: 'Try it out for yourself!'
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: text
|
||||
ranges:
|
||||
- text: 'This is editable '
|
||||
- text: 'rich'
|
||||
marks:
|
||||
- type: bold
|
||||
- text: ' text, '
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: text
|
||||
ranges:
|
||||
- text: 'much'
|
||||
marks:
|
||||
- type: italic
|
||||
- text: ' better than a '
|
||||
- text: '<textarea>'
|
||||
marks:
|
||||
- type: code
|
||||
- text: '!'
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: text
|
||||
ranges:
|
||||
- text: 'Since it''s rich text, you can do things like turn a selection of text '
|
||||
- text: 'bold'
|
||||
marks:
|
||||
- type: bold
|
||||
- text: ', or add a semantically rendered block quote in the middle of the page,
|
||||
like this:'
|
||||
- kind: block
|
||||
type: block-quote
|
||||
nodes:
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: text
|
||||
text: 'A wise quote.'
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: text
|
||||
text: 'Try it out for yourself!'
|
||||
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: text
|
||||
ranges:
|
||||
- text: 'This is editable '
|
||||
- text: 'rich'
|
||||
marks:
|
||||
- type: bold
|
||||
- text: ' text, '
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: text
|
||||
ranges:
|
||||
- text: 'much'
|
||||
marks:
|
||||
- type: italic
|
||||
- text: ' better than a '
|
||||
- text: '<textarea>'
|
||||
marks:
|
||||
- type: code
|
||||
- text: '!'
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: text
|
||||
ranges:
|
||||
- text: 'Since it''s rich text, you can do things like turn a selection of text '
|
||||
- text: 'bold'
|
||||
marks:
|
||||
- type: bold
|
||||
- text: ', or add a semantically rendered block quote in the middle of the page,
|
||||
like this:'
|
||||
- kind: block
|
||||
type: block-quote
|
||||
nodes:
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: text
|
||||
text: 'A wise quote.'
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: text
|
||||
text: 'Try it out for yourself!'
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: text
|
||||
ranges:
|
||||
- text: 'This is editable '
|
||||
- text: 'rich'
|
||||
marks:
|
||||
- type: bold
|
||||
- text: ' text, '
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: text
|
||||
ranges:
|
||||
- text: 'much'
|
||||
marks:
|
||||
- type: italic
|
||||
- text: ' better than a '
|
||||
- text: '<textarea>'
|
||||
marks:
|
||||
- type: code
|
||||
- text: '!'
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: text
|
||||
ranges:
|
||||
- text: 'Since it''s rich text, you can do things like turn a selection of text '
|
||||
- text: 'bold'
|
||||
marks:
|
||||
- type: bold
|
||||
- text: ', or add a semantically rendered block quote in the middle of the page,
|
||||
like this:'
|
||||
- kind: block
|
||||
type: block-quote
|
||||
nodes:
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: text
|
||||
text: 'A wise quote.'
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: text
|
||||
text: 'Try it out for yourself!'
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: text
|
||||
ranges:
|
||||
- text: 'This is editable '
|
||||
- text: 'rich'
|
||||
marks:
|
||||
- type: bold
|
||||
- text: ' text, '
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: text
|
||||
ranges:
|
||||
- text: 'much'
|
||||
marks:
|
||||
- type: italic
|
||||
- text: ' better than a '
|
||||
- text: '<textarea>'
|
||||
marks:
|
||||
- type: code
|
||||
- text: '!'
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: text
|
||||
ranges:
|
||||
- text: 'Since it''s rich text, you can do things like turn a selection of text '
|
||||
- text: 'bold'
|
||||
marks:
|
||||
- type: bold
|
||||
- text: ', or add a semantically rendered block quote in the middle of the page,
|
||||
like this:'
|
||||
- kind: block
|
||||
type: block-quote
|
||||
nodes:
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: text
|
||||
text: 'A wise quote.'
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: text
|
||||
text: 'Try it out for yourself!'
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: text
|
||||
ranges:
|
||||
- text: 'This is editable '
|
||||
- text: 'rich'
|
||||
marks:
|
||||
- type: bold
|
||||
- text: ' text, '
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: text
|
||||
ranges:
|
||||
- text: 'much'
|
||||
marks:
|
||||
- type: italic
|
||||
- text: ' better than a '
|
||||
- text: '<textarea>'
|
||||
marks:
|
||||
- type: code
|
||||
- text: '!'
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: text
|
||||
ranges:
|
||||
- text: 'Since it''s rich text, you can do things like turn a selection of text '
|
||||
- text: 'bold'
|
||||
marks:
|
||||
- type: bold
|
||||
- text: ', or add a semantically rendered block quote in the middle of the page,
|
||||
like this:'
|
||||
- kind: block
|
||||
type: block-quote
|
||||
nodes:
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: text
|
||||
text: 'A wise quote.'
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: text
|
||||
text: 'Try it out for yourself!'
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: text
|
||||
ranges:
|
||||
- text: 'This is editable '
|
||||
- text: 'rich'
|
||||
marks:
|
||||
- type: bold
|
||||
- text: ' text, '
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: text
|
||||
ranges:
|
||||
- text: 'much'
|
||||
marks:
|
||||
- type: italic
|
||||
- text: ' better than a '
|
||||
- text: '<textarea>'
|
||||
marks:
|
||||
- type: code
|
||||
- text: '!'
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: text
|
||||
ranges:
|
||||
- text: 'Since it''s rich text, you can do things like turn a selection of text '
|
||||
- text: 'bold'
|
||||
marks:
|
||||
- type: bold
|
||||
- text: ', or add a semantically rendered block quote in the middle of the page,
|
||||
like this:'
|
||||
- kind: block
|
||||
type: block-quote
|
||||
nodes:
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: text
|
||||
text: 'A wise quote.'
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: text
|
||||
text: 'Try it out for yourself!'
|
11
benchmark/fixtures/models/get-texts/index.js
Normal file
11
benchmark/fixtures/models/get-texts/index.js
Normal file
@@ -0,0 +1,11 @@
|
||||
|
||||
import { __clear } from '../../../../lib/utils/memoize'
|
||||
|
||||
export default function (state) {
|
||||
state.document.getTexts()
|
||||
}
|
||||
|
||||
export function after() {
|
||||
__clear()
|
||||
}
|
||||
|
683
benchmark/fixtures/models/get-texts/input.yaml
Normal file
683
benchmark/fixtures/models/get-texts/input.yaml
Normal file
@@ -0,0 +1,683 @@
|
||||
nodes:
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: text
|
||||
ranges:
|
||||
- text: 'This is editable '
|
||||
- text: 'rich'
|
||||
marks:
|
||||
- type: bold
|
||||
- text: ' text, '
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: text
|
||||
ranges:
|
||||
- text: 'much'
|
||||
marks:
|
||||
- type: italic
|
||||
- text: ' better than a '
|
||||
- text: '<textarea>'
|
||||
marks:
|
||||
- type: code
|
||||
- text: '!'
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: text
|
||||
key: _cursor_
|
||||
ranges:
|
||||
- text: 'Since it''s rich text, you can do things like turn a selection of text '
|
||||
- text: 'bold'
|
||||
marks:
|
||||
- type: bold
|
||||
- text: ', or add a semantically rendered block quote in the middle of the page,
|
||||
like this:'
|
||||
- kind: block
|
||||
type: block-quote
|
||||
nodes:
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: text
|
||||
text: 'A wise quote.'
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: text
|
||||
text: 'Try it out for yourself!'
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: text
|
||||
ranges:
|
||||
- text: 'This is editable '
|
||||
- text: 'rich'
|
||||
marks:
|
||||
- type: bold
|
||||
- text: ' text, '
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: text
|
||||
ranges:
|
||||
- text: 'much'
|
||||
marks:
|
||||
- type: italic
|
||||
- text: ' better than a '
|
||||
- text: '<textarea>'
|
||||
marks:
|
||||
- type: code
|
||||
- text: '!'
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: text
|
||||
ranges:
|
||||
- text: 'Since it''s rich text, you can do things like turn a selection of text '
|
||||
- text: 'bold'
|
||||
marks:
|
||||
- type: bold
|
||||
- text: ', or add a semantically rendered block quote in the middle of the page,
|
||||
like this:'
|
||||
- kind: block
|
||||
type: block-quote
|
||||
nodes:
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: text
|
||||
text: 'A wise quote.'
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: text
|
||||
text: 'Try it out for yourself!'
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: text
|
||||
ranges:
|
||||
- text: 'This is editable '
|
||||
- text: 'rich'
|
||||
marks:
|
||||
- type: bold
|
||||
- text: ' text, '
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: text
|
||||
ranges:
|
||||
- text: 'much'
|
||||
marks:
|
||||
- type: italic
|
||||
- text: ' better than a '
|
||||
- text: '<textarea>'
|
||||
marks:
|
||||
- type: code
|
||||
- text: '!'
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: text
|
||||
ranges:
|
||||
- text: 'Since it''s rich text, you can do things like turn a selection of text '
|
||||
- text: 'bold'
|
||||
marks:
|
||||
- type: bold
|
||||
- text: ', or add a semantically rendered block quote in the middle of the page,
|
||||
like this:'
|
||||
- kind: block
|
||||
type: block-quote
|
||||
nodes:
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: text
|
||||
text: 'A wise quote.'
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: text
|
||||
text: 'Try it out for yourself!'
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: text
|
||||
ranges:
|
||||
- text: 'This is editable '
|
||||
- text: 'rich'
|
||||
marks:
|
||||
- type: bold
|
||||
- text: ' text, '
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: text
|
||||
ranges:
|
||||
- text: 'much'
|
||||
marks:
|
||||
- type: italic
|
||||
- text: ' better than a '
|
||||
- text: '<textarea>'
|
||||
marks:
|
||||
- type: code
|
||||
- text: '!'
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: text
|
||||
ranges:
|
||||
- text: 'Since it''s rich text, you can do things like turn a selection of text '
|
||||
- text: 'bold'
|
||||
marks:
|
||||
- type: bold
|
||||
- text: ', or add a semantically rendered block quote in the middle of the page,
|
||||
like this:'
|
||||
- kind: block
|
||||
type: block-quote
|
||||
nodes:
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: text
|
||||
text: 'A wise quote.'
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: text
|
||||
text: 'Try it out for yourself!'
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: text
|
||||
ranges:
|
||||
- text: 'This is editable '
|
||||
- text: 'rich'
|
||||
marks:
|
||||
- type: bold
|
||||
- text: ' text, '
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: text
|
||||
ranges:
|
||||
- text: 'much'
|
||||
marks:
|
||||
- type: italic
|
||||
- text: ' better than a '
|
||||
- text: '<textarea>'
|
||||
marks:
|
||||
- type: code
|
||||
- text: '!'
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: text
|
||||
ranges:
|
||||
- text: 'Since it''s rich text, you can do things like turn a selection of text '
|
||||
- text: 'bold'
|
||||
marks:
|
||||
- type: bold
|
||||
- text: ', or add a semantically rendered block quote in the middle of the page,
|
||||
like this:'
|
||||
- kind: block
|
||||
type: block-quote
|
||||
nodes:
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: text
|
||||
text: 'A wise quote.'
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: text
|
||||
text: 'Try it out for yourself!'
|
||||
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: text
|
||||
ranges:
|
||||
- text: 'This is editable '
|
||||
- text: 'rich'
|
||||
marks:
|
||||
- type: bold
|
||||
- text: ' text, '
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: text
|
||||
ranges:
|
||||
- text: 'much'
|
||||
marks:
|
||||
- type: italic
|
||||
- text: ' better than a '
|
||||
- text: '<textarea>'
|
||||
marks:
|
||||
- type: code
|
||||
- text: '!'
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: text
|
||||
ranges:
|
||||
- text: 'Since it''s rich text, you can do things like turn a selection of text '
|
||||
- text: 'bold'
|
||||
marks:
|
||||
- type: bold
|
||||
- text: ', or add a semantically rendered block quote in the middle of the page,
|
||||
like this:'
|
||||
- kind: block
|
||||
type: block-quote
|
||||
nodes:
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: text
|
||||
text: 'A wise quote.'
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: text
|
||||
text: 'Try it out for yourself!'
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: text
|
||||
ranges:
|
||||
- text: 'This is editable '
|
||||
- text: 'rich'
|
||||
marks:
|
||||
- type: bold
|
||||
- text: ' text, '
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: text
|
||||
ranges:
|
||||
- text: 'much'
|
||||
marks:
|
||||
- type: italic
|
||||
- text: ' better than a '
|
||||
- text: '<textarea>'
|
||||
marks:
|
||||
- type: code
|
||||
- text: '!'
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: text
|
||||
ranges:
|
||||
- text: 'Since it''s rich text, you can do things like turn a selection of text '
|
||||
- text: 'bold'
|
||||
marks:
|
||||
- type: bold
|
||||
- text: ', or add a semantically rendered block quote in the middle of the page,
|
||||
like this:'
|
||||
- kind: block
|
||||
type: block-quote
|
||||
nodes:
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: text
|
||||
text: 'A wise quote.'
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: text
|
||||
text: 'Try it out for yourself!'
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: text
|
||||
ranges:
|
||||
- text: 'This is editable '
|
||||
- text: 'rich'
|
||||
marks:
|
||||
- type: bold
|
||||
- text: ' text, '
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: text
|
||||
ranges:
|
||||
- text: 'much'
|
||||
marks:
|
||||
- type: italic
|
||||
- text: ' better than a '
|
||||
- text: '<textarea>'
|
||||
marks:
|
||||
- type: code
|
||||
- text: '!'
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: text
|
||||
ranges:
|
||||
- text: 'Since it''s rich text, you can do things like turn a selection of text '
|
||||
- text: 'bold'
|
||||
marks:
|
||||
- type: bold
|
||||
- text: ', or add a semantically rendered block quote in the middle of the page,
|
||||
like this:'
|
||||
- kind: block
|
||||
type: block-quote
|
||||
nodes:
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: text
|
||||
text: 'A wise quote.'
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: text
|
||||
text: 'Try it out for yourself!'
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: text
|
||||
ranges:
|
||||
- text: 'This is editable '
|
||||
- text: 'rich'
|
||||
marks:
|
||||
- type: bold
|
||||
- text: ' text, '
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: text
|
||||
ranges:
|
||||
- text: 'much'
|
||||
marks:
|
||||
- type: italic
|
||||
- text: ' better than a '
|
||||
- text: '<textarea>'
|
||||
marks:
|
||||
- type: code
|
||||
- text: '!'
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: text
|
||||
ranges:
|
||||
- text: 'Since it''s rich text, you can do things like turn a selection of text '
|
||||
- text: 'bold'
|
||||
marks:
|
||||
- type: bold
|
||||
- text: ', or add a semantically rendered block quote in the middle of the page,
|
||||
like this:'
|
||||
- kind: block
|
||||
type: block-quote
|
||||
nodes:
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: text
|
||||
text: 'A wise quote.'
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: text
|
||||
text: 'Try it out for yourself!'
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: text
|
||||
ranges:
|
||||
- text: 'This is editable '
|
||||
- text: 'rich'
|
||||
marks:
|
||||
- type: bold
|
||||
- text: ' text, '
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: text
|
||||
ranges:
|
||||
- text: 'much'
|
||||
marks:
|
||||
- type: italic
|
||||
- text: ' better than a '
|
||||
- text: '<textarea>'
|
||||
marks:
|
||||
- type: code
|
||||
- text: '!'
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: text
|
||||
ranges:
|
||||
- text: 'Since it''s rich text, you can do things like turn a selection of text '
|
||||
- text: 'bold'
|
||||
marks:
|
||||
- type: bold
|
||||
- text: ', or add a semantically rendered block quote in the middle of the page,
|
||||
like this:'
|
||||
- kind: block
|
||||
type: block-quote
|
||||
nodes:
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: text
|
||||
text: 'A wise quote.'
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: text
|
||||
text: 'Try it out for yourself!'
|
8
benchmark/fixtures/regular/normal/index.js
Normal file
8
benchmark/fixtures/regular/normal/index.js
Normal file
@@ -0,0 +1,8 @@
|
||||
|
||||
import React from 'react'
|
||||
import ReactDOM from 'react-dom/server'
|
||||
import { Editor } from '../../../..'
|
||||
|
||||
export default function (state) {
|
||||
ReactDOM.renderToStaticMarkup(<Editor state={state} />)
|
||||
}
|
683
benchmark/fixtures/regular/normal/input.yaml
Normal file
683
benchmark/fixtures/regular/normal/input.yaml
Normal file
@@ -0,0 +1,683 @@
|
||||
nodes:
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: text
|
||||
ranges:
|
||||
- text: 'This is editable '
|
||||
- text: 'rich'
|
||||
marks:
|
||||
- type: bold
|
||||
- text: ' text, '
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: text
|
||||
ranges:
|
||||
- text: 'much'
|
||||
marks:
|
||||
- type: italic
|
||||
- text: ' better than a '
|
||||
- text: '<textarea>'
|
||||
marks:
|
||||
- type: code
|
||||
- text: '!'
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: text
|
||||
key: _cursor_
|
||||
ranges:
|
||||
- text: 'Since it''s rich text, you can do things like turn a selection of text '
|
||||
- text: 'bold'
|
||||
marks:
|
||||
- type: bold
|
||||
- text: ', or add a semantically rendered block quote in the middle of the page,
|
||||
like this:'
|
||||
- kind: block
|
||||
type: block-quote
|
||||
nodes:
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: text
|
||||
text: 'A wise quote.'
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: text
|
||||
text: 'Try it out for yourself!'
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: text
|
||||
ranges:
|
||||
- text: 'This is editable '
|
||||
- text: 'rich'
|
||||
marks:
|
||||
- type: bold
|
||||
- text: ' text, '
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: text
|
||||
ranges:
|
||||
- text: 'much'
|
||||
marks:
|
||||
- type: italic
|
||||
- text: ' better than a '
|
||||
- text: '<textarea>'
|
||||
marks:
|
||||
- type: code
|
||||
- text: '!'
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: text
|
||||
ranges:
|
||||
- text: 'Since it''s rich text, you can do things like turn a selection of text '
|
||||
- text: 'bold'
|
||||
marks:
|
||||
- type: bold
|
||||
- text: ', or add a semantically rendered block quote in the middle of the page,
|
||||
like this:'
|
||||
- kind: block
|
||||
type: block-quote
|
||||
nodes:
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: text
|
||||
text: 'A wise quote.'
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: text
|
||||
text: 'Try it out for yourself!'
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: text
|
||||
ranges:
|
||||
- text: 'This is editable '
|
||||
- text: 'rich'
|
||||
marks:
|
||||
- type: bold
|
||||
- text: ' text, '
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: text
|
||||
ranges:
|
||||
- text: 'much'
|
||||
marks:
|
||||
- type: italic
|
||||
- text: ' better than a '
|
||||
- text: '<textarea>'
|
||||
marks:
|
||||
- type: code
|
||||
- text: '!'
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: text
|
||||
ranges:
|
||||
- text: 'Since it''s rich text, you can do things like turn a selection of text '
|
||||
- text: 'bold'
|
||||
marks:
|
||||
- type: bold
|
||||
- text: ', or add a semantically rendered block quote in the middle of the page,
|
||||
like this:'
|
||||
- kind: block
|
||||
type: block-quote
|
||||
nodes:
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: text
|
||||
text: 'A wise quote.'
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: text
|
||||
text: 'Try it out for yourself!'
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: text
|
||||
ranges:
|
||||
- text: 'This is editable '
|
||||
- text: 'rich'
|
||||
marks:
|
||||
- type: bold
|
||||
- text: ' text, '
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: text
|
||||
ranges:
|
||||
- text: 'much'
|
||||
marks:
|
||||
- type: italic
|
||||
- text: ' better than a '
|
||||
- text: '<textarea>'
|
||||
marks:
|
||||
- type: code
|
||||
- text: '!'
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: text
|
||||
ranges:
|
||||
- text: 'Since it''s rich text, you can do things like turn a selection of text '
|
||||
- text: 'bold'
|
||||
marks:
|
||||
- type: bold
|
||||
- text: ', or add a semantically rendered block quote in the middle of the page,
|
||||
like this:'
|
||||
- kind: block
|
||||
type: block-quote
|
||||
nodes:
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: text
|
||||
text: 'A wise quote.'
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: text
|
||||
text: 'Try it out for yourself!'
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: text
|
||||
ranges:
|
||||
- text: 'This is editable '
|
||||
- text: 'rich'
|
||||
marks:
|
||||
- type: bold
|
||||
- text: ' text, '
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: text
|
||||
ranges:
|
||||
- text: 'much'
|
||||
marks:
|
||||
- type: italic
|
||||
- text: ' better than a '
|
||||
- text: '<textarea>'
|
||||
marks:
|
||||
- type: code
|
||||
- text: '!'
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: text
|
||||
ranges:
|
||||
- text: 'Since it''s rich text, you can do things like turn a selection of text '
|
||||
- text: 'bold'
|
||||
marks:
|
||||
- type: bold
|
||||
- text: ', or add a semantically rendered block quote in the middle of the page,
|
||||
like this:'
|
||||
- kind: block
|
||||
type: block-quote
|
||||
nodes:
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: text
|
||||
text: 'A wise quote.'
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: text
|
||||
text: 'Try it out for yourself!'
|
||||
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: text
|
||||
ranges:
|
||||
- text: 'This is editable '
|
||||
- text: 'rich'
|
||||
marks:
|
||||
- type: bold
|
||||
- text: ' text, '
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: text
|
||||
ranges:
|
||||
- text: 'much'
|
||||
marks:
|
||||
- type: italic
|
||||
- text: ' better than a '
|
||||
- text: '<textarea>'
|
||||
marks:
|
||||
- type: code
|
||||
- text: '!'
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: text
|
||||
ranges:
|
||||
- text: 'Since it''s rich text, you can do things like turn a selection of text '
|
||||
- text: 'bold'
|
||||
marks:
|
||||
- type: bold
|
||||
- text: ', or add a semantically rendered block quote in the middle of the page,
|
||||
like this:'
|
||||
- kind: block
|
||||
type: block-quote
|
||||
nodes:
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: text
|
||||
text: 'A wise quote.'
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: text
|
||||
text: 'Try it out for yourself!'
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: text
|
||||
ranges:
|
||||
- text: 'This is editable '
|
||||
- text: 'rich'
|
||||
marks:
|
||||
- type: bold
|
||||
- text: ' text, '
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: text
|
||||
ranges:
|
||||
- text: 'much'
|
||||
marks:
|
||||
- type: italic
|
||||
- text: ' better than a '
|
||||
- text: '<textarea>'
|
||||
marks:
|
||||
- type: code
|
||||
- text: '!'
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: text
|
||||
ranges:
|
||||
- text: 'Since it''s rich text, you can do things like turn a selection of text '
|
||||
- text: 'bold'
|
||||
marks:
|
||||
- type: bold
|
||||
- text: ', or add a semantically rendered block quote in the middle of the page,
|
||||
like this:'
|
||||
- kind: block
|
||||
type: block-quote
|
||||
nodes:
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: text
|
||||
text: 'A wise quote.'
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: text
|
||||
text: 'Try it out for yourself!'
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: text
|
||||
ranges:
|
||||
- text: 'This is editable '
|
||||
- text: 'rich'
|
||||
marks:
|
||||
- type: bold
|
||||
- text: ' text, '
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: text
|
||||
ranges:
|
||||
- text: 'much'
|
||||
marks:
|
||||
- type: italic
|
||||
- text: ' better than a '
|
||||
- text: '<textarea>'
|
||||
marks:
|
||||
- type: code
|
||||
- text: '!'
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: text
|
||||
ranges:
|
||||
- text: 'Since it''s rich text, you can do things like turn a selection of text '
|
||||
- text: 'bold'
|
||||
marks:
|
||||
- type: bold
|
||||
- text: ', or add a semantically rendered block quote in the middle of the page,
|
||||
like this:'
|
||||
- kind: block
|
||||
type: block-quote
|
||||
nodes:
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: text
|
||||
text: 'A wise quote.'
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: text
|
||||
text: 'Try it out for yourself!'
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: text
|
||||
ranges:
|
||||
- text: 'This is editable '
|
||||
- text: 'rich'
|
||||
marks:
|
||||
- type: bold
|
||||
- text: ' text, '
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: text
|
||||
ranges:
|
||||
- text: 'much'
|
||||
marks:
|
||||
- type: italic
|
||||
- text: ' better than a '
|
||||
- text: '<textarea>'
|
||||
marks:
|
||||
- type: code
|
||||
- text: '!'
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: text
|
||||
ranges:
|
||||
- text: 'Since it''s rich text, you can do things like turn a selection of text '
|
||||
- text: 'bold'
|
||||
marks:
|
||||
- type: bold
|
||||
- text: ', or add a semantically rendered block quote in the middle of the page,
|
||||
like this:'
|
||||
- kind: block
|
||||
type: block-quote
|
||||
nodes:
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: text
|
||||
text: 'A wise quote.'
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: text
|
||||
text: 'Try it out for yourself!'
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: text
|
||||
ranges:
|
||||
- text: 'This is editable '
|
||||
- text: 'rich'
|
||||
marks:
|
||||
- type: bold
|
||||
- text: ' text, '
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: text
|
||||
ranges:
|
||||
- text: 'much'
|
||||
marks:
|
||||
- type: italic
|
||||
- text: ' better than a '
|
||||
- text: '<textarea>'
|
||||
marks:
|
||||
- type: code
|
||||
- text: '!'
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: text
|
||||
ranges:
|
||||
- text: 'Since it''s rich text, you can do things like turn a selection of text '
|
||||
- text: 'bold'
|
||||
marks:
|
||||
- type: bold
|
||||
- text: ', or add a semantically rendered block quote in the middle of the page,
|
||||
like this:'
|
||||
- kind: block
|
||||
type: block-quote
|
||||
nodes:
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: text
|
||||
text: 'A wise quote.'
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: text
|
||||
text: 'Try it out for yourself!'
|
@@ -1,4 +1,11 @@
|
||||
|
||||
export default function (state) {
|
||||
state
|
||||
.transform()
|
||||
.deleteBackward()
|
||||
.apply()
|
||||
}
|
||||
|
||||
export function before(state) {
|
||||
return state
|
||||
.transform()
|
||||
@@ -10,10 +17,3 @@ export function before(state) {
|
||||
})
|
||||
.apply()
|
||||
}
|
||||
|
||||
export default function (state) {
|
||||
state
|
||||
.transform()
|
||||
.deleteBackward()
|
||||
.apply()
|
||||
}
|
683
benchmark/fixtures/transforms/delete-backward/input.yaml
Normal file
683
benchmark/fixtures/transforms/delete-backward/input.yaml
Normal file
@@ -0,0 +1,683 @@
|
||||
nodes:
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: text
|
||||
ranges:
|
||||
- text: 'This is editable '
|
||||
- text: 'rich'
|
||||
marks:
|
||||
- type: bold
|
||||
- text: ' text, '
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: text
|
||||
ranges:
|
||||
- text: 'much'
|
||||
marks:
|
||||
- type: italic
|
||||
- text: ' better than a '
|
||||
- text: '<textarea>'
|
||||
marks:
|
||||
- type: code
|
||||
- text: '!'
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: text
|
||||
key: _cursor_
|
||||
ranges:
|
||||
- text: 'Since it''s rich text, you can do things like turn a selection of text '
|
||||
- text: 'bold'
|
||||
marks:
|
||||
- type: bold
|
||||
- text: ', or add a semantically rendered block quote in the middle of the page,
|
||||
like this:'
|
||||
- kind: block
|
||||
type: block-quote
|
||||
nodes:
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: text
|
||||
text: 'A wise quote.'
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: text
|
||||
text: 'Try it out for yourself!'
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: text
|
||||
ranges:
|
||||
- text: 'This is editable '
|
||||
- text: 'rich'
|
||||
marks:
|
||||
- type: bold
|
||||
- text: ' text, '
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: text
|
||||
ranges:
|
||||
- text: 'much'
|
||||
marks:
|
||||
- type: italic
|
||||
- text: ' better than a '
|
||||
- text: '<textarea>'
|
||||
marks:
|
||||
- type: code
|
||||
- text: '!'
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: text
|
||||
ranges:
|
||||
- text: 'Since it''s rich text, you can do things like turn a selection of text '
|
||||
- text: 'bold'
|
||||
marks:
|
||||
- type: bold
|
||||
- text: ', or add a semantically rendered block quote in the middle of the page,
|
||||
like this:'
|
||||
- kind: block
|
||||
type: block-quote
|
||||
nodes:
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: text
|
||||
text: 'A wise quote.'
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: text
|
||||
text: 'Try it out for yourself!'
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: text
|
||||
ranges:
|
||||
- text: 'This is editable '
|
||||
- text: 'rich'
|
||||
marks:
|
||||
- type: bold
|
||||
- text: ' text, '
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: text
|
||||
ranges:
|
||||
- text: 'much'
|
||||
marks:
|
||||
- type: italic
|
||||
- text: ' better than a '
|
||||
- text: '<textarea>'
|
||||
marks:
|
||||
- type: code
|
||||
- text: '!'
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: text
|
||||
ranges:
|
||||
- text: 'Since it''s rich text, you can do things like turn a selection of text '
|
||||
- text: 'bold'
|
||||
marks:
|
||||
- type: bold
|
||||
- text: ', or add a semantically rendered block quote in the middle of the page,
|
||||
like this:'
|
||||
- kind: block
|
||||
type: block-quote
|
||||
nodes:
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: text
|
||||
text: 'A wise quote.'
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: text
|
||||
text: 'Try it out for yourself!'
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: text
|
||||
ranges:
|
||||
- text: 'This is editable '
|
||||
- text: 'rich'
|
||||
marks:
|
||||
- type: bold
|
||||
- text: ' text, '
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: text
|
||||
ranges:
|
||||
- text: 'much'
|
||||
marks:
|
||||
- type: italic
|
||||
- text: ' better than a '
|
||||
- text: '<textarea>'
|
||||
marks:
|
||||
- type: code
|
||||
- text: '!'
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: text
|
||||
ranges:
|
||||
- text: 'Since it''s rich text, you can do things like turn a selection of text '
|
||||
- text: 'bold'
|
||||
marks:
|
||||
- type: bold
|
||||
- text: ', or add a semantically rendered block quote in the middle of the page,
|
||||
like this:'
|
||||
- kind: block
|
||||
type: block-quote
|
||||
nodes:
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: text
|
||||
text: 'A wise quote.'
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: text
|
||||
text: 'Try it out for yourself!'
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: text
|
||||
ranges:
|
||||
- text: 'This is editable '
|
||||
- text: 'rich'
|
||||
marks:
|
||||
- type: bold
|
||||
- text: ' text, '
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: text
|
||||
ranges:
|
||||
- text: 'much'
|
||||
marks:
|
||||
- type: italic
|
||||
- text: ' better than a '
|
||||
- text: '<textarea>'
|
||||
marks:
|
||||
- type: code
|
||||
- text: '!'
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: text
|
||||
ranges:
|
||||
- text: 'Since it''s rich text, you can do things like turn a selection of text '
|
||||
- text: 'bold'
|
||||
marks:
|
||||
- type: bold
|
||||
- text: ', or add a semantically rendered block quote in the middle of the page,
|
||||
like this:'
|
||||
- kind: block
|
||||
type: block-quote
|
||||
nodes:
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: text
|
||||
text: 'A wise quote.'
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: text
|
||||
text: 'Try it out for yourself!'
|
||||
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: text
|
||||
ranges:
|
||||
- text: 'This is editable '
|
||||
- text: 'rich'
|
||||
marks:
|
||||
- type: bold
|
||||
- text: ' text, '
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: text
|
||||
ranges:
|
||||
- text: 'much'
|
||||
marks:
|
||||
- type: italic
|
||||
- text: ' better than a '
|
||||
- text: '<textarea>'
|
||||
marks:
|
||||
- type: code
|
||||
- text: '!'
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: text
|
||||
ranges:
|
||||
- text: 'Since it''s rich text, you can do things like turn a selection of text '
|
||||
- text: 'bold'
|
||||
marks:
|
||||
- type: bold
|
||||
- text: ', or add a semantically rendered block quote in the middle of the page,
|
||||
like this:'
|
||||
- kind: block
|
||||
type: block-quote
|
||||
nodes:
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: text
|
||||
text: 'A wise quote.'
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: text
|
||||
text: 'Try it out for yourself!'
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: text
|
||||
ranges:
|
||||
- text: 'This is editable '
|
||||
- text: 'rich'
|
||||
marks:
|
||||
- type: bold
|
||||
- text: ' text, '
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: text
|
||||
ranges:
|
||||
- text: 'much'
|
||||
marks:
|
||||
- type: italic
|
||||
- text: ' better than a '
|
||||
- text: '<textarea>'
|
||||
marks:
|
||||
- type: code
|
||||
- text: '!'
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: text
|
||||
ranges:
|
||||
- text: 'Since it''s rich text, you can do things like turn a selection of text '
|
||||
- text: 'bold'
|
||||
marks:
|
||||
- type: bold
|
||||
- text: ', or add a semantically rendered block quote in the middle of the page,
|
||||
like this:'
|
||||
- kind: block
|
||||
type: block-quote
|
||||
nodes:
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: text
|
||||
text: 'A wise quote.'
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: text
|
||||
text: 'Try it out for yourself!'
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: text
|
||||
ranges:
|
||||
- text: 'This is editable '
|
||||
- text: 'rich'
|
||||
marks:
|
||||
- type: bold
|
||||
- text: ' text, '
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: text
|
||||
ranges:
|
||||
- text: 'much'
|
||||
marks:
|
||||
- type: italic
|
||||
- text: ' better than a '
|
||||
- text: '<textarea>'
|
||||
marks:
|
||||
- type: code
|
||||
- text: '!'
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: text
|
||||
ranges:
|
||||
- text: 'Since it''s rich text, you can do things like turn a selection of text '
|
||||
- text: 'bold'
|
||||
marks:
|
||||
- type: bold
|
||||
- text: ', or add a semantically rendered block quote in the middle of the page,
|
||||
like this:'
|
||||
- kind: block
|
||||
type: block-quote
|
||||
nodes:
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: text
|
||||
text: 'A wise quote.'
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: text
|
||||
text: 'Try it out for yourself!'
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: text
|
||||
ranges:
|
||||
- text: 'This is editable '
|
||||
- text: 'rich'
|
||||
marks:
|
||||
- type: bold
|
||||
- text: ' text, '
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: text
|
||||
ranges:
|
||||
- text: 'much'
|
||||
marks:
|
||||
- type: italic
|
||||
- text: ' better than a '
|
||||
- text: '<textarea>'
|
||||
marks:
|
||||
- type: code
|
||||
- text: '!'
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: text
|
||||
ranges:
|
||||
- text: 'Since it''s rich text, you can do things like turn a selection of text '
|
||||
- text: 'bold'
|
||||
marks:
|
||||
- type: bold
|
||||
- text: ', or add a semantically rendered block quote in the middle of the page,
|
||||
like this:'
|
||||
- kind: block
|
||||
type: block-quote
|
||||
nodes:
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: text
|
||||
text: 'A wise quote.'
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: text
|
||||
text: 'Try it out for yourself!'
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: text
|
||||
ranges:
|
||||
- text: 'This is editable '
|
||||
- text: 'rich'
|
||||
marks:
|
||||
- type: bold
|
||||
- text: ' text, '
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: text
|
||||
ranges:
|
||||
- text: 'much'
|
||||
marks:
|
||||
- type: italic
|
||||
- text: ' better than a '
|
||||
- text: '<textarea>'
|
||||
marks:
|
||||
- type: code
|
||||
- text: '!'
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: text
|
||||
ranges:
|
||||
- text: 'Since it''s rich text, you can do things like turn a selection of text '
|
||||
- text: 'bold'
|
||||
marks:
|
||||
- type: bold
|
||||
- text: ', or add a semantically rendered block quote in the middle of the page,
|
||||
like this:'
|
||||
- kind: block
|
||||
type: block-quote
|
||||
nodes:
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: text
|
||||
text: 'A wise quote.'
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: text
|
||||
text: 'Try it out for yourself!'
|
@@ -1,4 +1,11 @@
|
||||
|
||||
export default function (state) {
|
||||
state
|
||||
.transform()
|
||||
.insertText('a')
|
||||
.apply()
|
||||
}
|
||||
|
||||
export function before(state) {
|
||||
return state
|
||||
.transform()
|
||||
@@ -10,10 +17,3 @@ export function before(state) {
|
||||
})
|
||||
.apply()
|
||||
}
|
||||
|
||||
export default function (state) {
|
||||
state
|
||||
.transform()
|
||||
.insertText('a')
|
||||
.apply()
|
||||
}
|
@@ -1,5 +1,5 @@
|
||||
|
||||
import SCHEMA from '../../../lib/constants/schema'
|
||||
import SCHEMA from '../../../../lib/constants/schema'
|
||||
|
||||
export default function (state) {
|
||||
state
|
683
benchmark/fixtures/transforms/normalize/input.yaml
Normal file
683
benchmark/fixtures/transforms/normalize/input.yaml
Normal file
@@ -0,0 +1,683 @@
|
||||
nodes:
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: text
|
||||
ranges:
|
||||
- text: 'This is editable '
|
||||
- text: 'rich'
|
||||
marks:
|
||||
- type: bold
|
||||
- text: ' text, '
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: text
|
||||
ranges:
|
||||
- text: 'much'
|
||||
marks:
|
||||
- type: italic
|
||||
- text: ' better than a '
|
||||
- text: '<textarea>'
|
||||
marks:
|
||||
- type: code
|
||||
- text: '!'
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: text
|
||||
key: _cursor_
|
||||
ranges:
|
||||
- text: 'Since it''s rich text, you can do things like turn a selection of text '
|
||||
- text: 'bold'
|
||||
marks:
|
||||
- type: bold
|
||||
- text: ', or add a semantically rendered block quote in the middle of the page,
|
||||
like this:'
|
||||
- kind: block
|
||||
type: block-quote
|
||||
nodes:
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: text
|
||||
text: 'A wise quote.'
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: text
|
||||
text: 'Try it out for yourself!'
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: text
|
||||
ranges:
|
||||
- text: 'This is editable '
|
||||
- text: 'rich'
|
||||
marks:
|
||||
- type: bold
|
||||
- text: ' text, '
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: text
|
||||
ranges:
|
||||
- text: 'much'
|
||||
marks:
|
||||
- type: italic
|
||||
- text: ' better than a '
|
||||
- text: '<textarea>'
|
||||
marks:
|
||||
- type: code
|
||||
- text: '!'
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: text
|
||||
ranges:
|
||||
- text: 'Since it''s rich text, you can do things like turn a selection of text '
|
||||
- text: 'bold'
|
||||
marks:
|
||||
- type: bold
|
||||
- text: ', or add a semantically rendered block quote in the middle of the page,
|
||||
like this:'
|
||||
- kind: block
|
||||
type: block-quote
|
||||
nodes:
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: text
|
||||
text: 'A wise quote.'
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: text
|
||||
text: 'Try it out for yourself!'
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: text
|
||||
ranges:
|
||||
- text: 'This is editable '
|
||||
- text: 'rich'
|
||||
marks:
|
||||
- type: bold
|
||||
- text: ' text, '
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: text
|
||||
ranges:
|
||||
- text: 'much'
|
||||
marks:
|
||||
- type: italic
|
||||
- text: ' better than a '
|
||||
- text: '<textarea>'
|
||||
marks:
|
||||
- type: code
|
||||
- text: '!'
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: text
|
||||
ranges:
|
||||
- text: 'Since it''s rich text, you can do things like turn a selection of text '
|
||||
- text: 'bold'
|
||||
marks:
|
||||
- type: bold
|
||||
- text: ', or add a semantically rendered block quote in the middle of the page,
|
||||
like this:'
|
||||
- kind: block
|
||||
type: block-quote
|
||||
nodes:
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: text
|
||||
text: 'A wise quote.'
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: text
|
||||
text: 'Try it out for yourself!'
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: text
|
||||
ranges:
|
||||
- text: 'This is editable '
|
||||
- text: 'rich'
|
||||
marks:
|
||||
- type: bold
|
||||
- text: ' text, '
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: text
|
||||
ranges:
|
||||
- text: 'much'
|
||||
marks:
|
||||
- type: italic
|
||||
- text: ' better than a '
|
||||
- text: '<textarea>'
|
||||
marks:
|
||||
- type: code
|
||||
- text: '!'
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: text
|
||||
ranges:
|
||||
- text: 'Since it''s rich text, you can do things like turn a selection of text '
|
||||
- text: 'bold'
|
||||
marks:
|
||||
- type: bold
|
||||
- text: ', or add a semantically rendered block quote in the middle of the page,
|
||||
like this:'
|
||||
- kind: block
|
||||
type: block-quote
|
||||
nodes:
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: text
|
||||
text: 'A wise quote.'
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: text
|
||||
text: 'Try it out for yourself!'
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: text
|
||||
ranges:
|
||||
- text: 'This is editable '
|
||||
- text: 'rich'
|
||||
marks:
|
||||
- type: bold
|
||||
- text: ' text, '
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: text
|
||||
ranges:
|
||||
- text: 'much'
|
||||
marks:
|
||||
- type: italic
|
||||
- text: ' better than a '
|
||||
- text: '<textarea>'
|
||||
marks:
|
||||
- type: code
|
||||
- text: '!'
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: text
|
||||
ranges:
|
||||
- text: 'Since it''s rich text, you can do things like turn a selection of text '
|
||||
- text: 'bold'
|
||||
marks:
|
||||
- type: bold
|
||||
- text: ', or add a semantically rendered block quote in the middle of the page,
|
||||
like this:'
|
||||
- kind: block
|
||||
type: block-quote
|
||||
nodes:
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: text
|
||||
text: 'A wise quote.'
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: text
|
||||
text: 'Try it out for yourself!'
|
||||
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: text
|
||||
ranges:
|
||||
- text: 'This is editable '
|
||||
- text: 'rich'
|
||||
marks:
|
||||
- type: bold
|
||||
- text: ' text, '
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: text
|
||||
ranges:
|
||||
- text: 'much'
|
||||
marks:
|
||||
- type: italic
|
||||
- text: ' better than a '
|
||||
- text: '<textarea>'
|
||||
marks:
|
||||
- type: code
|
||||
- text: '!'
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: text
|
||||
ranges:
|
||||
- text: 'Since it''s rich text, you can do things like turn a selection of text '
|
||||
- text: 'bold'
|
||||
marks:
|
||||
- type: bold
|
||||
- text: ', or add a semantically rendered block quote in the middle of the page,
|
||||
like this:'
|
||||
- kind: block
|
||||
type: block-quote
|
||||
nodes:
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: text
|
||||
text: 'A wise quote.'
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: text
|
||||
text: 'Try it out for yourself!'
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: text
|
||||
ranges:
|
||||
- text: 'This is editable '
|
||||
- text: 'rich'
|
||||
marks:
|
||||
- type: bold
|
||||
- text: ' text, '
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: text
|
||||
ranges:
|
||||
- text: 'much'
|
||||
marks:
|
||||
- type: italic
|
||||
- text: ' better than a '
|
||||
- text: '<textarea>'
|
||||
marks:
|
||||
- type: code
|
||||
- text: '!'
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: text
|
||||
ranges:
|
||||
- text: 'Since it''s rich text, you can do things like turn a selection of text '
|
||||
- text: 'bold'
|
||||
marks:
|
||||
- type: bold
|
||||
- text: ', or add a semantically rendered block quote in the middle of the page,
|
||||
like this:'
|
||||
- kind: block
|
||||
type: block-quote
|
||||
nodes:
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: text
|
||||
text: 'A wise quote.'
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: text
|
||||
text: 'Try it out for yourself!'
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: text
|
||||
ranges:
|
||||
- text: 'This is editable '
|
||||
- text: 'rich'
|
||||
marks:
|
||||
- type: bold
|
||||
- text: ' text, '
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: text
|
||||
ranges:
|
||||
- text: 'much'
|
||||
marks:
|
||||
- type: italic
|
||||
- text: ' better than a '
|
||||
- text: '<textarea>'
|
||||
marks:
|
||||
- type: code
|
||||
- text: '!'
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: text
|
||||
ranges:
|
||||
- text: 'Since it''s rich text, you can do things like turn a selection of text '
|
||||
- text: 'bold'
|
||||
marks:
|
||||
- type: bold
|
||||
- text: ', or add a semantically rendered block quote in the middle of the page,
|
||||
like this:'
|
||||
- kind: block
|
||||
type: block-quote
|
||||
nodes:
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: text
|
||||
text: 'A wise quote.'
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: text
|
||||
text: 'Try it out for yourself!'
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: text
|
||||
ranges:
|
||||
- text: 'This is editable '
|
||||
- text: 'rich'
|
||||
marks:
|
||||
- type: bold
|
||||
- text: ' text, '
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: text
|
||||
ranges:
|
||||
- text: 'much'
|
||||
marks:
|
||||
- type: italic
|
||||
- text: ' better than a '
|
||||
- text: '<textarea>'
|
||||
marks:
|
||||
- type: code
|
||||
- text: '!'
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: text
|
||||
ranges:
|
||||
- text: 'Since it''s rich text, you can do things like turn a selection of text '
|
||||
- text: 'bold'
|
||||
marks:
|
||||
- type: bold
|
||||
- text: ', or add a semantically rendered block quote in the middle of the page,
|
||||
like this:'
|
||||
- kind: block
|
||||
type: block-quote
|
||||
nodes:
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: text
|
||||
text: 'A wise quote.'
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: text
|
||||
text: 'Try it out for yourself!'
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: text
|
||||
ranges:
|
||||
- text: 'This is editable '
|
||||
- text: 'rich'
|
||||
marks:
|
||||
- type: bold
|
||||
- text: ' text, '
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: text
|
||||
ranges:
|
||||
- text: 'much'
|
||||
marks:
|
||||
- type: italic
|
||||
- text: ' better than a '
|
||||
- text: '<textarea>'
|
||||
marks:
|
||||
- type: code
|
||||
- text: '!'
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: text
|
||||
ranges:
|
||||
- text: 'Since it''s rich text, you can do things like turn a selection of text '
|
||||
- text: 'bold'
|
||||
marks:
|
||||
- type: bold
|
||||
- text: ', or add a semantically rendered block quote in the middle of the page,
|
||||
like this:'
|
||||
- kind: block
|
||||
type: block-quote
|
||||
nodes:
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: text
|
||||
text: 'A wise quote.'
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: text
|
||||
text: 'Try it out for yourself!'
|
@@ -1,4 +1,11 @@
|
||||
|
||||
export default function (state) {
|
||||
state
|
||||
.transform()
|
||||
.splitBlock()
|
||||
.apply()
|
||||
}
|
||||
|
||||
export function before(state) {
|
||||
return state
|
||||
.transform()
|
||||
@@ -10,10 +17,3 @@ export function before(state) {
|
||||
})
|
||||
.apply()
|
||||
}
|
||||
|
||||
export default function (state) {
|
||||
state
|
||||
.transform()
|
||||
.splitBlock()
|
||||
.apply()
|
||||
}
|
683
benchmark/fixtures/transforms/split-block-wide/input.yaml
Normal file
683
benchmark/fixtures/transforms/split-block-wide/input.yaml
Normal file
@@ -0,0 +1,683 @@
|
||||
nodes:
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: text
|
||||
ranges:
|
||||
- text: 'This is editable '
|
||||
- text: 'rich'
|
||||
marks:
|
||||
- type: bold
|
||||
- text: ' text, '
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: text
|
||||
ranges:
|
||||
- text: 'much'
|
||||
marks:
|
||||
- type: italic
|
||||
- text: ' better than a '
|
||||
- text: '<textarea>'
|
||||
marks:
|
||||
- type: code
|
||||
- text: '!'
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: text
|
||||
key: _cursor_
|
||||
ranges:
|
||||
- text: 'Since it''s rich text, you can do things like turn a selection of text '
|
||||
- text: 'bold'
|
||||
marks:
|
||||
- type: bold
|
||||
- text: ', or add a semantically rendered block quote in the middle of the page,
|
||||
like this:'
|
||||
- kind: block
|
||||
type: block-quote
|
||||
nodes:
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: text
|
||||
text: 'A wise quote.'
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: text
|
||||
text: 'Try it out for yourself!'
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: text
|
||||
ranges:
|
||||
- text: 'This is editable '
|
||||
- text: 'rich'
|
||||
marks:
|
||||
- type: bold
|
||||
- text: ' text, '
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: text
|
||||
ranges:
|
||||
- text: 'much'
|
||||
marks:
|
||||
- type: italic
|
||||
- text: ' better than a '
|
||||
- text: '<textarea>'
|
||||
marks:
|
||||
- type: code
|
||||
- text: '!'
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: text
|
||||
ranges:
|
||||
- text: 'Since it''s rich text, you can do things like turn a selection of text '
|
||||
- text: 'bold'
|
||||
marks:
|
||||
- type: bold
|
||||
- text: ', or add a semantically rendered block quote in the middle of the page,
|
||||
like this:'
|
||||
- kind: block
|
||||
type: block-quote
|
||||
nodes:
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: text
|
||||
text: 'A wise quote.'
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: text
|
||||
text: 'Try it out for yourself!'
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: text
|
||||
ranges:
|
||||
- text: 'This is editable '
|
||||
- text: 'rich'
|
||||
marks:
|
||||
- type: bold
|
||||
- text: ' text, '
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: text
|
||||
ranges:
|
||||
- text: 'much'
|
||||
marks:
|
||||
- type: italic
|
||||
- text: ' better than a '
|
||||
- text: '<textarea>'
|
||||
marks:
|
||||
- type: code
|
||||
- text: '!'
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: text
|
||||
ranges:
|
||||
- text: 'Since it''s rich text, you can do things like turn a selection of text '
|
||||
- text: 'bold'
|
||||
marks:
|
||||
- type: bold
|
||||
- text: ', or add a semantically rendered block quote in the middle of the page,
|
||||
like this:'
|
||||
- kind: block
|
||||
type: block-quote
|
||||
nodes:
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: text
|
||||
text: 'A wise quote.'
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: text
|
||||
text: 'Try it out for yourself!'
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: text
|
||||
ranges:
|
||||
- text: 'This is editable '
|
||||
- text: 'rich'
|
||||
marks:
|
||||
- type: bold
|
||||
- text: ' text, '
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: text
|
||||
ranges:
|
||||
- text: 'much'
|
||||
marks:
|
||||
- type: italic
|
||||
- text: ' better than a '
|
||||
- text: '<textarea>'
|
||||
marks:
|
||||
- type: code
|
||||
- text: '!'
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: text
|
||||
ranges:
|
||||
- text: 'Since it''s rich text, you can do things like turn a selection of text '
|
||||
- text: 'bold'
|
||||
marks:
|
||||
- type: bold
|
||||
- text: ', or add a semantically rendered block quote in the middle of the page,
|
||||
like this:'
|
||||
- kind: block
|
||||
type: block-quote
|
||||
nodes:
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: text
|
||||
text: 'A wise quote.'
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: text
|
||||
text: 'Try it out for yourself!'
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: text
|
||||
ranges:
|
||||
- text: 'This is editable '
|
||||
- text: 'rich'
|
||||
marks:
|
||||
- type: bold
|
||||
- text: ' text, '
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: text
|
||||
ranges:
|
||||
- text: 'much'
|
||||
marks:
|
||||
- type: italic
|
||||
- text: ' better than a '
|
||||
- text: '<textarea>'
|
||||
marks:
|
||||
- type: code
|
||||
- text: '!'
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: text
|
||||
ranges:
|
||||
- text: 'Since it''s rich text, you can do things like turn a selection of text '
|
||||
- text: 'bold'
|
||||
marks:
|
||||
- type: bold
|
||||
- text: ', or add a semantically rendered block quote in the middle of the page,
|
||||
like this:'
|
||||
- kind: block
|
||||
type: block-quote
|
||||
nodes:
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: text
|
||||
text: 'A wise quote.'
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: text
|
||||
text: 'Try it out for yourself!'
|
||||
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: text
|
||||
ranges:
|
||||
- text: 'This is editable '
|
||||
- text: 'rich'
|
||||
marks:
|
||||
- type: bold
|
||||
- text: ' text, '
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: text
|
||||
ranges:
|
||||
- text: 'much'
|
||||
marks:
|
||||
- type: italic
|
||||
- text: ' better than a '
|
||||
- text: '<textarea>'
|
||||
marks:
|
||||
- type: code
|
||||
- text: '!'
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: text
|
||||
ranges:
|
||||
- text: 'Since it''s rich text, you can do things like turn a selection of text '
|
||||
- text: 'bold'
|
||||
marks:
|
||||
- type: bold
|
||||
- text: ', or add a semantically rendered block quote in the middle of the page,
|
||||
like this:'
|
||||
- kind: block
|
||||
type: block-quote
|
||||
nodes:
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: text
|
||||
text: 'A wise quote.'
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: text
|
||||
text: 'Try it out for yourself!'
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: text
|
||||
ranges:
|
||||
- text: 'This is editable '
|
||||
- text: 'rich'
|
||||
marks:
|
||||
- type: bold
|
||||
- text: ' text, '
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: text
|
||||
ranges:
|
||||
- text: 'much'
|
||||
marks:
|
||||
- type: italic
|
||||
- text: ' better than a '
|
||||
- text: '<textarea>'
|
||||
marks:
|
||||
- type: code
|
||||
- text: '!'
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: text
|
||||
ranges:
|
||||
- text: 'Since it''s rich text, you can do things like turn a selection of text '
|
||||
- text: 'bold'
|
||||
marks:
|
||||
- type: bold
|
||||
- text: ', or add a semantically rendered block quote in the middle of the page,
|
||||
like this:'
|
||||
- kind: block
|
||||
type: block-quote
|
||||
nodes:
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: text
|
||||
text: 'A wise quote.'
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: text
|
||||
text: 'Try it out for yourself!'
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: text
|
||||
ranges:
|
||||
- text: 'This is editable '
|
||||
- text: 'rich'
|
||||
marks:
|
||||
- type: bold
|
||||
- text: ' text, '
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: text
|
||||
ranges:
|
||||
- text: 'much'
|
||||
marks:
|
||||
- type: italic
|
||||
- text: ' better than a '
|
||||
- text: '<textarea>'
|
||||
marks:
|
||||
- type: code
|
||||
- text: '!'
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: text
|
||||
ranges:
|
||||
- text: 'Since it''s rich text, you can do things like turn a selection of text '
|
||||
- text: 'bold'
|
||||
marks:
|
||||
- type: bold
|
||||
- text: ', or add a semantically rendered block quote in the middle of the page,
|
||||
like this:'
|
||||
- kind: block
|
||||
type: block-quote
|
||||
nodes:
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: text
|
||||
text: 'A wise quote.'
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: text
|
||||
text: 'Try it out for yourself!'
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: text
|
||||
ranges:
|
||||
- text: 'This is editable '
|
||||
- text: 'rich'
|
||||
marks:
|
||||
- type: bold
|
||||
- text: ' text, '
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: text
|
||||
ranges:
|
||||
- text: 'much'
|
||||
marks:
|
||||
- type: italic
|
||||
- text: ' better than a '
|
||||
- text: '<textarea>'
|
||||
marks:
|
||||
- type: code
|
||||
- text: '!'
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: text
|
||||
ranges:
|
||||
- text: 'Since it''s rich text, you can do things like turn a selection of text '
|
||||
- text: 'bold'
|
||||
marks:
|
||||
- type: bold
|
||||
- text: ', or add a semantically rendered block quote in the middle of the page,
|
||||
like this:'
|
||||
- kind: block
|
||||
type: block-quote
|
||||
nodes:
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: text
|
||||
text: 'A wise quote.'
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: text
|
||||
text: 'Try it out for yourself!'
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: text
|
||||
ranges:
|
||||
- text: 'This is editable '
|
||||
- text: 'rich'
|
||||
marks:
|
||||
- type: bold
|
||||
- text: ' text, '
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: text
|
||||
ranges:
|
||||
- text: 'much'
|
||||
marks:
|
||||
- type: italic
|
||||
- text: ' better than a '
|
||||
- text: '<textarea>'
|
||||
marks:
|
||||
- type: code
|
||||
- text: '!'
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: text
|
||||
ranges:
|
||||
- text: 'Since it''s rich text, you can do things like turn a selection of text '
|
||||
- text: 'bold'
|
||||
marks:
|
||||
- type: bold
|
||||
- text: ', or add a semantically rendered block quote in the middle of the page,
|
||||
like this:'
|
||||
- kind: block
|
||||
type: block-quote
|
||||
nodes:
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: text
|
||||
text: 'A wise quote.'
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: block
|
||||
type: paragraph
|
||||
nodes:
|
||||
- kind: text
|
||||
text: 'Try it out for yourself!'
|
38
benchmark/index.js
Normal file
38
benchmark/index.js
Normal file
@@ -0,0 +1,38 @@
|
||||
|
||||
import fs from 'fs'
|
||||
import path from 'path'
|
||||
import readMetadata from 'read-metadata'
|
||||
import { Raw } from '..'
|
||||
|
||||
/**
|
||||
* Benchmarks.
|
||||
*/
|
||||
|
||||
const outer = path.resolve(__dirname, './fixtures')
|
||||
const types = fs.readdirSync(outer)
|
||||
|
||||
types.forEach((type) => {
|
||||
suite(type, () => {
|
||||
set('iterations', 100) // eslint-disable-line no-undef
|
||||
set('mintime', 2000) // eslint-disable-line no-undef
|
||||
|
||||
const inner = path.resolve(outer, type)
|
||||
const benchmarks = fs.readdirSync(inner)
|
||||
|
||||
benchmarks.forEach((benchmark) => {
|
||||
if (benchmark[0] === '.') return
|
||||
|
||||
const dir = path.resolve(inner, benchmark)
|
||||
const input = readMetadata.sync(path.resolve(dir, 'input.yaml'))
|
||||
const initial = Raw.deserialize(input, { terse: true })
|
||||
const module = require(dir)
|
||||
const run = module.default
|
||||
const state = module.before ? module.before(initial) : initial
|
||||
|
||||
bench(benchmark, () => { // eslint-disable-line no-undef
|
||||
run(state)
|
||||
if (module.after) module.after()
|
||||
})
|
||||
})
|
||||
})
|
||||
})
|
@@ -93,8 +93,8 @@
|
||||
"lint": "eslint --ignore-pattern 'build.dev.js' --ignore-pattern 'build.prod.js' '{examples,src}/**/*.js'",
|
||||
"open": "open http://localhost:8080/dev.html",
|
||||
"bench": "npm-run-all build:npm benchs",
|
||||
"benchs": "babel-node ./node_modules/.bin/_matcha --reporter ./bench/reporter bench/index.js > ./tmp/bench-comparison.json && babel-node ./bench/compare",
|
||||
"benchs:save": "babel-node ./node_modules/.bin/_matcha --reporter ./bench/reporter bench/index.js > ./tmp/bench-baseline.json",
|
||||
"benchs": "babel-node ./node_modules/.bin/_matcha --reporter ./benchmark/reporter ./benchmark/index.js > ./tmp/benchmark-comparison.json && babel-node ./benchmark/compare",
|
||||
"benchs:save": "babel-node ./node_modules/.bin/_matcha --reporter ./benchmark/reporter ./benchmark/index.js > ./tmp/benchmark-baseline.json",
|
||||
"prepublish": "npm run build",
|
||||
"postpublish": "npm run gh-pages",
|
||||
"release": "np",
|
||||
|
@@ -143,7 +143,7 @@ const Node = {
|
||||
*/
|
||||
|
||||
findDescendant(iterator) {
|
||||
let found
|
||||
let found = null
|
||||
|
||||
this.forEachDescendant((node, i, nodes) => {
|
||||
if (iterator(node, i, nodes)) {
|
||||
@@ -245,9 +245,11 @@ const Node = {
|
||||
*/
|
||||
|
||||
getCharacters() {
|
||||
return this
|
||||
.getTexts()
|
||||
.reduce((chars, text) => chars.concat(text.characters), new List())
|
||||
return this.nodes.reduce((chars, node) => {
|
||||
return node.kind == 'text'
|
||||
? chars.concat(node.characters)
|
||||
: chars.concat(node.getCharacters())
|
||||
}, new List())
|
||||
},
|
||||
|
||||
/**
|
||||
@@ -612,7 +614,7 @@ const Node = {
|
||||
},
|
||||
|
||||
/**
|
||||
* Get the furthest inline nodes for each text node in the node.
|
||||
* Get the closest inline nodes for each text node in the node.
|
||||
*
|
||||
* @return {List<Node>}
|
||||
*/
|
||||
@@ -620,7 +622,7 @@ const Node = {
|
||||
getInlines() {
|
||||
return this
|
||||
.getTexts()
|
||||
.map(text => this.getFurthestInline(text.key))
|
||||
.map(text => this.getClosestInline(text.key))
|
||||
.filter(exists => exists)
|
||||
.toOrderedSet()
|
||||
.toList()
|
||||
@@ -679,20 +681,20 @@ const Node = {
|
||||
/**
|
||||
* Get all of the marks for all of the characters of every text node.
|
||||
*
|
||||
* @return {Set<Mark>}
|
||||
* @return {OrderedSet<Mark>}
|
||||
*/
|
||||
|
||||
getMarks() {
|
||||
return this
|
||||
.getCharacters()
|
||||
.reduce((marks, char) => marks.union(char.marks), new OrderedSet())
|
||||
return this.nodes.reduce((marks, node) => {
|
||||
return marks.union(node.getMarks())
|
||||
}, new OrderedSet())
|
||||
},
|
||||
|
||||
/**
|
||||
* Get a set of the marks in a `range`.
|
||||
*
|
||||
* @param {Selection} range
|
||||
* @return {Set<Mark>}
|
||||
* @return {OrderedSet<Mark>}
|
||||
*/
|
||||
|
||||
getMarksAtRange(range) {
|
||||
@@ -720,6 +722,21 @@ const Node = {
|
||||
.reduce((memo, char) => memo.union(char.marks), new OrderedSet())
|
||||
},
|
||||
|
||||
/**
|
||||
* Get all of the marks that match a `type`.
|
||||
*
|
||||
* @param {String} type
|
||||
* @return {OrderedSet<Mark>}
|
||||
*/
|
||||
|
||||
getMarksByType(type) {
|
||||
return this.nodes.reduce((marks, node) => {
|
||||
return node.kind == 'text'
|
||||
? node.getMarks().filter(m => m.type == type)
|
||||
: node.getMarksByType(type)
|
||||
}, new OrderedSet())
|
||||
},
|
||||
|
||||
/**
|
||||
* Get the block node before a descendant text node by `key`.
|
||||
*
|
||||
@@ -944,14 +961,14 @@ const Node = {
|
||||
},
|
||||
|
||||
/**
|
||||
* Get the concatenated text `string` of all child nodes.
|
||||
* Get the concatenated text string of all child nodes.
|
||||
*
|
||||
* @return {String}
|
||||
*/
|
||||
|
||||
getText() {
|
||||
return this.nodes.reduce((result, node) => {
|
||||
return result + node.text
|
||||
return this.nodes.reduce((string, node) => {
|
||||
return string + node.text
|
||||
}, '')
|
||||
},
|
||||
|
||||
|
@@ -4,7 +4,7 @@ import Mark from './mark'
|
||||
import Range from './range'
|
||||
import memoize from '../utils/memoize'
|
||||
import generateKey from '../utils/generate-key'
|
||||
import { List, Record, Set } from 'immutable'
|
||||
import { List, Record, OrderedSet, Set } from 'immutable'
|
||||
|
||||
/**
|
||||
* Default properties.
|
||||
@@ -175,6 +175,18 @@ class Text extends new Record(DEFAULTS) {
|
||||
return schema.__getDecorators(this)
|
||||
}
|
||||
|
||||
/**
|
||||
* Get all of the marks on the text.
|
||||
*
|
||||
* @return {OrderedSet<Mark>}
|
||||
*/
|
||||
|
||||
getMarks() {
|
||||
return this.characters.reduce((marks, char) => {
|
||||
return marks.union(char.marks)
|
||||
}, new OrderedSet())
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the marks on the text at `index`.
|
||||
*
|
||||
|
Reference in New Issue
Block a user