3.62.3 • Published 8 months ago

@sanity/block-tools v3.62.3

Weekly downloads
25,385
License
MIT
Repository
github
Last release
8 months ago

Sanity Block Tools

Various tools for processing Sanity block content

Interface

Let's start with a complete example:

import Schema from '@sanity/schema'
import blockTools from '@sanity/block-tools'


// Start with compiling a schema we can work against
const schema = Schema.compile({
  name: 'myBlog',
  types: [
    {
      type: 'object',
      name: 'blogPost',
      fields: [
        {
          title: 'Title',
          type: 'string',
          name: 'title'
        },
        {
          title: 'Body',
          name: 'body',
          type: 'array',
          of: [{type: 'block'}]
        }
      ]
    }
  ]
})

// The compiled schema type for the content type that holds the block array
const blockContentType = defaultSchema.get('blogPost')
  .fields.find(field => field.name === 'body').type


// Convert HTML to blocks
const blocks = blockTools.htmlToBlocks(
  '<html><body><h1>Hello world!</h1><body></html>',
  {blockContentType}
)

// Convert a Slate state to blocks
const blocks = blockTools.slateStateToBlocks(slateJson, blockContentType)

// Convert blocks to a JSON serialized Slate state
const slateState = blockTools.blocksToSlateState(blocks, blockContentType)

// Get the feature-set of a blockContentType
const features = blockTools.getBlockContentFeatures(blockContentType)

Methods

htmlToBlocks(html, options) (html deserializer)

This will deserialize the input html (string) into blocks.

Options

blockContentType

A compiled version of the block content schema type. When you give this option, the deserializer will respect the schema when deserializing to blocks. I.e. if the schema doesn't allow h2-styles, all h2 html-elements will deserialized to normal styled blocks.

parseHtml

The HTML-deserialization is done by default by the browser's native DOMParser. On the server side you can give the function parseHtml that parses the html into a DOMParser compatible model / API.

JSDOM example
const jsdom = require('jsdom')
const {JSDOM} = jsdom

const blocks = blockTools.htmlToBlocks(
  '<html><body><h1>Hello world!</h1><body></html>',
  {
    blockContentType,
    parseHtml: html => new JSDOM(html).window.document
  }
)
rules

You may add your own rules to deal with special HTML cases.

blockTools.htmlToBlocks(
  '<html><body><pre><code>const foo = "bar"</code></pre></body></html>',
  {
    blockContentType: compiledBlockContentType,
    parseHtml: html => new JSDOM(html),
    rules: [

      // Special rule for code blocks (wrapped in pre and code tag)
      {
        deserialize(el, next) {
          if (el.tagName.toLowerCase() != 'pre') {
            return undefined
          }
          const code = el.children[0]
          const childNodes = code && code.tagName.toLowerCase() === 'code'
            ? code.childNodes
            : el.childNodes
          let text = ''
          childNodes.forEach(node => {
            text += node.textContent
          })
          return {
            _type: 'span',
            marks: ['code'],
            text: text
          }
        }
      }

    ]
  }
)

blocksToSlateState(blocks, blockContentTypeSchema)

Convert blocks to a serialized Slate state respecting the input schema.

slateStateToBlocks(slateState, blockContentTypeSchema)

Convert a slate state to blocks respecting the input schema.

getBlockContentFeatures(blockContentType)

Will return an object with the features enabled for the input block content type.

{
  enabledBlockAnnotations: ['link'],
  enabledSpanDecorators: [
    'strong',
    'em',
    'code',
    'underline',
    'strike-through'
  ],
  enabledBlockStyles: [
    'normal',
    'h1',
    'h2',
    'h3',
    'h4',
    'h5',
    'h6',
    'blockquote'
  ]
}
3.59.2-corel.333

8 months ago

3.59.2-corel.334

8 months ago

3.62.3

9 months ago

3.59.2-corel.316

8 months ago

3.59.2-corel.312

8 months ago

3.59.2-corel.279

9 months ago

3.59.2-corel.277

9 months ago

3.59.2-corel.272

9 months ago

3.59.2-corel.293

9 months ago

3.62.2

9 months ago

3.62.1

9 months ago

3.62.0

9 months ago

3.61.0

9 months ago

3.60.0

9 months ago

3.59.2-canary.19

9 months ago

3.59.2-canary.33

9 months ago

3.59.1

9 months ago

3.59.0

9 months ago

3.57.2-manifests.67

10 months ago

3.57.2-manifests.69

10 months ago

3.58.1-canary.22

9 months ago

3.57.4

10 months ago

3.58.0

10 months ago

3.57.3

10 months ago

3.57.2

10 months ago

3.57.2-canary.16

10 months ago

3.57.1-manifests.46

10 months ago

3.56.1-manifests.41

10 months ago

3.57.1

10 months ago

3.57.0

10 months ago

3.56.1-manifests.37

11 months ago

3.56.1-manifests.39

11 months ago

3.56.0

11 months ago

3.40.0

1 year ago

3.51.0

12 months ago

3.29.1

1 year ago

3.29.0

1 year ago

3.38.0

1 year ago

3.49.0

1 year ago

3.27.1

1 year ago

3.27.0

1 year ago

3.24.2-canary.1

2 years ago

3.24.0

2 years ago

3.35.0

1 year ago

3.24.1

2 years ago

3.43.1-next.47

1 year ago

3.37.0

1 year ago

3.37.1

1 year ago

3.37.2

1 year ago

3.48.0

1 year ago

3.48.1

1 year ago

3.33.0

1 year ago

3.46.0

1 year ago

3.36.5-next.85

1 year ago

3.36.5-next.86

1 year ago

3.37.2-canary.9

1 year ago

3.36.5-next.82

1 year ago

3.35.1

1 year ago

3.35.2

1 year ago

3.46.1

1 year ago

3.31.0

1 year ago

3.44.0

1 year ago

3.55.0

11 months ago

3.42.0

1 year ago

3.42.1

1 year ago

3.53.0

11 months ago

3.50.1-canary.9

12 months ago

3.50.0

1 year ago

3.28.0

1 year ago

3.26.0

1 year ago

3.26.1

1 year ago

3.39.0

1 year ago

3.39.1

1 year ago

3.36.0

1 year ago

3.36.1

1 year ago

3.36.2

1 year ago

3.36.3

1 year ago

3.36.4

1 year ago

3.47.0

1 year ago

3.47.1

1 year ago

3.25.0

1 year ago

3.45.0

1 year ago

3.34.0

1 year ago

3.52.5-canary.18

11 months ago

3.43.0

1 year ago

3.54.0

11 months ago

3.52.5-canary.41

11 months ago

3.32.0

1 year ago

3.41.0

1 year ago

3.41.1

1 year ago

3.41.2

1 year ago

3.52.4

12 months ago

3.52.3

12 months ago

3.52.2

12 months ago

3.52.1

12 months ago

3.52.0

12 months ago

3.30.0

1 year ago

3.30.1

1 year ago

3.23.4-canary.1

2 years ago

3.23.4-canary.0

2 years ago

3.23.3

2 years ago

3.23.4

2 years ago

3.22.3

2 years ago

3.23.2-canary.8

2 years ago

3.23.2

2 years ago

3.23.2-EDX937.1

2 years ago

3.22.0

2 years ago

3.22.2

2 years ago

3.22.1

2 years ago

3.23.1-canary.1

2 years ago

3.23.1

2 years ago

3.23.0

2 years ago

3.21.4-canary.6

2 years ago

3.21.3

2 years ago

3.21.2

2 years ago

3.21.2-i18n.15

2 years ago

3.21.2-canary.17

2 years ago

3.21.1

2 years ago

3.21.0

2 years ago

3.20.3-i18n.262

2 years ago

3.14.5-i18n.46

2 years ago

3.14.5-i18n.47

2 years ago

3.14.5-i18n.45

2 years ago

3.16.8-sdx-736.1

2 years ago

3.18.2-i18n.179

2 years ago

3.18.1

2 years ago

3.18.0

2 years ago

3.16.7

2 years ago

3.16.6

2 years ago

3.16.1

2 years ago

3.16.0

2 years ago

3.16.3

2 years ago

3.16.2

2 years ago

3.16.5

2 years ago

3.16.4

2 years ago

3.20.3-i18n.242

2 years ago

3.20.3-i18n.243

2 years ago

3.20.3-i18n.247

2 years ago

3.14.2-i18n.10

2 years ago

3.15.1-canary.6

2 years ago

3.20.0

2 years ago

3.20.2

2 years ago

3.20.1

2 years ago

3.14.6-pte.52

2 years ago

3.20.1-i18n.244

2 years ago

3.19.3

2 years ago

3.19.0

2 years ago

3.19.2

2 years ago

3.19.1

2 years ago

3.18.2-next.66

2 years ago

3.17.0

2 years ago

3.15.0

2 years ago

3.15.1

2 years ago

3.19.3-sdx-722.2

2 years ago

3.16.2-canary.19

2 years ago

3.14.1

2 years ago

3.14.0

2 years ago

3.14.3

2 years ago

3.14.2

2 years ago

3.14.5

2 years ago

3.14.4

2 years ago

3.15.2-canary.44

2 years ago

3.20.2-i18n.241

2 years ago

3.20.2-i18n.239

2 years ago

3.15.2-canary.1

2 years ago

2.36.2

2 years ago

3.19.4-canary.2

2 years ago

3.19.4-canary.6

2 years ago

3.13.0

2 years ago

3.10.1-canary.1

2 years ago

3.9.2-canary.18

2 years ago

3.9.2-canary.26

2 years ago

3.11.3

2 years ago

3.11.5

2 years ago

3.11.0

2 years ago

3.11.2

2 years ago

3.11.1

2 years ago

3.9.2-next.27

2 years ago

3.10.2-alpha.13

2 years ago

3.12.1

2 years ago

3.12.0

2 years ago

3.10.1

2 years ago

3.10.0

2 years ago

3.10.3

2 years ago

3.10.2

2 years ago

3.12.2

2 years ago

3.8.1-canary.5

2 years ago

3.8.1-canary.6

2 years ago

3.5.1

2 years ago

3.9.2-canary.12

2 years ago

3.9.2-canary.16

2 years ago

3.8.0

2 years ago

3.8.2-canary.4

2 years ago

3.8.2-canary.2

2 years ago

3.8.3

2 years ago

3.8.2

2 years ago

3.8.1

2 years ago

3.8.4-next.27

2 years ago

3.5.2-next.19

2 years ago

3.6.0

2 years ago

3.7.2-canary.49

2 years ago

3.9.1

2 years ago

3.9.0

2 years ago

3.7.1

2 years ago

3.7.0

2 years ago

3.9.1-canary.38

2 years ago

3.9.1-canary.39

2 years ago

3.9.1-canary.24

2 years ago

3.5.0

2 years ago

3.3.1

2 years ago

3.3.0

2 years ago

3.2.6

2 years ago

3.4.0

2 years ago

3.5.1-next.11

2 years ago

3.2.2

2 years ago

3.2.1

2 years ago

3.2.0

3 years ago

3.2.5

2 years ago

3.2.4

2 years ago

3.2.3

2 years ago

3.1.3

3 years ago

3.1.2

3 years ago

3.1.1

3 years ago

3.1.0

3 years ago

3.1.4

3 years ago

3.0.0-v3-pte.88

2 years ago

3.0.4

3 years ago

3.0.3

3 years ago

3.0.2

3 years ago

3.0.1

3 years ago

3.0.6

3 years ago

3.0.5

3 years ago

3.0.7-canary.14

3 years ago

3.1.5-next.38

3 years ago

3.1.5-next.39

3 years ago

3.1.5-next.43

3 years ago

3.1.5-next.44

3 years ago

3.1.5-next.42

3 years ago

3.1.5-next.45

3 years ago

3.1.5-next.46

3 years ago

3.1.5-next.40

3 years ago

3.0.7-canary.7

3 years ago

3.1.5-canary.15

3 years ago

3.1.5-canary.14

3 years ago

3.2.4-next.5

2 years ago

3.0.1-canary.23

3 years ago

3.1.5-canary.40

3 years ago

3.2.2-next.0

2 years ago

3.0.0-canary.186

3 years ago

3.0.0-v3-pte.87

3 years ago

3.0.0

3 years ago

3.0.0-v3-pte.30

3 years ago

3.0.0-v3-pte.31

3 years ago

3.0.0-v3-pte.33

3 years ago

2.34.3-cdr-ga.20

3 years ago

2.34.1-canary.0

3 years ago

3.0.0-rc.2

3 years ago

3.0.0-rc.1

3 years ago

3.0.0-rc.0

3 years ago

3.0.0-rc.3

3 years ago

2.35.0

3 years ago

3.0.0-v3-pte.58

3 years ago

3.0.0-v3-pte.55

3 years ago

3.0.0-v3-pte.69

3 years ago

3.0.0-v3-pte.80

3 years ago

3.0.0-v3-pte.79

3 years ago

2.33.2

3 years ago

2.33.4-shopify.8

3 years ago

2.33.3-edge.8

3 years ago

2.31.0

3 years ago

3.0.0-v3-pte.48

3 years ago

3.0.0-v3-pte.49

3 years ago

3.0.0-v3-esm.54

3 years ago

3.0.0-v3-esm.52

3 years ago

3.0.0-v3-esm.53

3 years ago

2.32.1-next.22

3 years ago

2.32.1-next.21

3 years ago

3.0.0-v3-pte.56

3 years ago

2.29.5-edge.1030

3 years ago

3.0.0-v3-pte.57

3 years ago

3.0.0-v3-pte.59

3 years ago

2.29.5-edge.1044

3 years ago

3.0.0-v3-pte.61

3 years ago

3.0.0-v3-pte.12

3 years ago

3.0.0-v3-pte.13

3 years ago

3.0.0-v3-pte.16

3 years ago

3.0.0-v3-pte.17

3 years ago

2.30.5

3 years ago

2.29.5-edge.1050

3 years ago

2.30.3-shopify.5

3 years ago

2.30.3-shopify.3

3 years ago

2.30.3-shopify.4

3 years ago

2.30.2-shopify.2

3 years ago

2.30.2-shopify.0

3 years ago

2.29.3

3 years ago

2.28.0

3 years ago

2.25.5-next.6

3 years ago

2.24.1-pte.127

3 years ago

2.24.1-pte.113

3 years ago

2.24.1-pte.115

3 years ago

2.23.4-pte.99

4 years ago

2.23.4-pte.96

4 years ago

2.23.4-pte.95

4 years ago

2.23.5-next.19

4 years ago

2.27.0

3 years ago

2.23.4-pte.107

4 years ago

2.23.4-pte.101

4 years ago

2.23.4-pte.102

4 years ago

2.24.0

4 years ago

2.24.3-pte.128

3 years ago

2.22.0

4 years ago

2.22.3

4 years ago

2.23.3-canary.84

4 years ago

2.23.3-next.34

4 years ago

2.23.3-next.35

4 years ago

2.23.3-next.4

4 years ago

2.22.6-next.121

4 years ago

2.23.2-canary.28

4 years ago

2.22.3-next.5

4 years ago

2.22.6-next.104

4 years ago

2.22.6-next.102

4 years ago

2.23.3-canary.59

4 years ago

2.23.2-next.3

4 years ago

2.23.1-next.10

4 years ago

2.23.0

4 years ago

2.21.8-canary.4

4 years ago

2.21.5

4 years ago

2.21.0

4 years ago

2.21.1-canary.2

4 years ago

2.20.0

4 years ago

2.19.1-canary.1

4 years ago

2.18.1-canary.9

4 years ago

2.18.0

4 years ago

2.17.3-canary.0

4 years ago

2.17.2

4 years ago

2.16.0

4 years ago

2.15.1-canary.4

4 years ago

2.15.0

4 years ago

2.14.1-canary.4

4 years ago

2.14.1-canary.36

4 years ago

2.14.0

4 years ago

2.13.2-canary.13

4 years ago

2.13.2-canary.9

4 years ago

2.13.2-canary.7

4 years ago

2.12.3-rc.0

4 years ago

2.13.0

4 years ago

2.12.0

4 years ago

2.11.3-canary.6

4 years ago

2.11.0

4 years ago

2.10.2-next.0

4 years ago

2.10.0

4 years ago

2.9.1-canary.15

4 years ago

2.9.0

4 years ago

2.8.2-canary.40

4 years ago

2.9.1

4 years ago

2.7.5-next.41

4 years ago

2.7.4

4 years ago

2.5.1-canary.79

4 years ago

2.5.0

4 years ago

2.4.4-canary.81

4 years ago

2.4.4-canary.75

4 years ago

2.3.9-canary.32

4 years ago

2.3.7-canary.22

4 years ago

2.3.5-canary.23

4 years ago

2.3.5-canary.22

4 years ago

2.3.5-canary.17

4 years ago

2.3.5-canary.18

4 years ago

2.2.6

4 years ago

2.2.0

4 years ago

2.1.7-next.22

4 years ago

2.1.7-next.21

4 years ago

2.1.5-canary.2

4 years ago

2.1.5-canary.3

4 years ago

2.1.4

5 years ago

2.1.2-ui.11

5 years ago

2.1.1-ui.14

5 years ago

2.1.1-ui.13

5 years ago

2.1.1-ui.18

5 years ago

2.1.0

5 years ago

2.0.10-next.46

5 years ago

2.0.10-next.47

5 years ago

2.0.10-canary.11

5 years ago

2.0.10-canary.0

5 years ago

2.0.9

5 years ago

2.0.1

5 years ago

2.0.0

5 years ago

1.150.6

5 years ago

1.150.5-canary.6

5 years ago

1.150.3

5 years ago

1.150.2-canary.0

5 years ago

1.150.2-canary.1

5 years ago

1.150.0

5 years ago

1.150.1

5 years ago

1.149.19

5 years ago

1.149.16

5 years ago

1.149.4

5 years ago

1.149.0

5 years ago

1.148.3

5 years ago

1.148.1

5 years ago

1.148.0

5 years ago

0.147.10-next.23

5 years ago

0.147.10-next.22

5 years ago

0.147.6

6 years ago

0.147.0

6 years ago

0.147.0-alpha.1

6 years ago

0.147.0-alpha.2

6 years ago

0.147.0-alpha.0

6 years ago

0.146.0

6 years ago

0.146.0-alpha.2

6 years ago

0.146.0-alpha.1

6 years ago

0.145.0

6 years ago

0.145.0-alpha.32

6 years ago

0.144.0

6 years ago

0.142.9

6 years ago

0.142.8

6 years ago

0.142.6

6 years ago

0.142.0

6 years ago

0.141.7-next.20

6 years ago

0.141.7-next.19

6 years ago

0.141.7-next.18

6 years ago

0.141.5

6 years ago

0.141.4

6 years ago

0.141.3

6 years ago

0.141.1

6 years ago

0.141.0

6 years ago

0.140.30

6 years ago

0.140.17

6 years ago

0.140.12

6 years ago

0.140.9

6 years ago

0.141.0-alpha.12

6 years ago

0.140.3

6 years ago

0.140.0

6 years ago

0.139.6

7 years ago

0.139.4

7 years ago

0.139.3-parrot.0

7 years ago

0.139.3-canary.0

7 years ago

0.139.2

7 years ago

0.139.1

7 years ago

0.140.0-alpha.4

7 years ago

0.140.0-alpha.3

7 years ago

0.140.0-alpha.1

7 years ago

0.139.0

7 years ago

0.139.0-rc.0

7 years ago

0.138.0

7 years ago

0.138.0-alpha.21

7 years ago

0.138.0-alpha.20

7 years ago

0.138.0-alpha.14

7 years ago

0.137.0

7 years ago

0.136.2

7 years ago

0.136.1-canary.5

7 years ago

0.136.0

7 years ago

0.135.3

7 years ago

0.135.3-next.6

7 years ago

0.135.0

7 years ago

0.135.0-next.2

7 years ago

0.135.0-next.1

7 years ago

0.135.0-next.0

7 years ago

0.134.1

7 years ago

0.135.0-beta.0

7 years ago

0.134.0

7 years ago

0.133.2

7 years ago

0.133.1

7 years ago

0.133.0

7 years ago

0.132.12

7 years ago

0.132.10

7 years ago

0.132.8

7 years ago

0.132.6

7 years ago

0.132.5

7 years ago

0.132.4-next.0

7 years ago

0.132.2

7 years ago

0.132.0

7 years ago

0.131.0

7 years ago

0.130.0

7 years ago

0.129.1

7 years ago

0.129.0

7 years ago

0.128.5

7 years ago

0.128.3

7 years ago

0.128.2

7 years ago

0.128.0

7 years ago

0.127.1

7 years ago

0.126.2

7 years ago

0.126.1

7 years ago

0.126.0

7 years ago

0.125.8

7 years ago

0.125.7

7 years ago

0.125.6

7 years ago

0.125.0

7 years ago

0.125.0-rc.4

7 years ago

0.124.12

7 years ago

0.125.0-rc.3

7 years ago

0.125.0-rc.2

7 years ago

0.125.0-rc.1

7 years ago

0.125.0-rc.0

7 years ago

0.124.10

7 years ago

0.124.0

8 years ago

0.123.1

8 years ago

0.123.0

8 years ago

0.122.5

8 years ago

0.122.4

8 years ago

0.122.3

8 years ago

0.120.0

8 years ago

0.119.0

8 years ago