✨Discover storytelling in the AI age with Pixar's Matthew Luhn at Sanity Connect, May 8th—register now

Block-Tools - What are the conditions that should create a `_key` ?

15 replies
Last updated: Apr 17, 2020
Looking at your tests for `block-tools`https://github.com/sanity-io/sanity/tree/master/packages/%40sanity/block-tools/test/tests/HtmlDeserializer
What are the conditions that should create a
_key
? From this source https://github.com/portabletext/portabletext#markdefs-array it sounds like it is only used with
markDefs
, but in the test folder,
randomKey
s are inserted everywhere!Also I created this example
https://codesandbox.io/s/wizardly-dhawan-2iq4w?file=/input.html Where there are keys, but running this locally, there are no keys
Apr 17, 2020, 7:43 AM
I believe we always place a random
_key
in all arrays with objects because of how JSONmatch work, aka it makes it possible/easier to patch values within an array in real-time settings. https://www.sanity.io/docs/json-match#arrays-v5QlpWPa
Apr 17, 2020, 7:45 AM
The portable text spec might not be completely up to par on this (we should fix that)
Apr 17, 2020, 7:46 AM
But why the different behaviour in Browser vs locally on my computer? The only difference is the use JSDOM locally.
Apr 17, 2020, 7:49 AM
Sorry, didn't catch that. How is the behaviour different?
Apr 17, 2020, 7:50 AM
output locally (with JSDOM):
[
  {
    "_type": "block",
    "markDefs": [],
    "style": "h3",
    "children": [
      {
        "_type": "span",
        "marks": [],
        "text": "Hello world"
      }
    ]
  }
]
output in CodeSandbox (no JSDOM):


[
  {
    "_type": "block",
    "markDefs": [],
    "style": "h3",
    "children": [
      {
        "_type": "span",
        "marks": [],
        "text": "Hello world",
        "_key": "07d8b8b47ba70"
      }
    ],
    "_key": "07d8b8b47ba7"
  }
]
Apr 17, 2020, 7:52 AM
Aha, gotcha. I don't actually know. I'll have to check with the team once they're up and about
Apr 17, 2020, 7:54 AM
user R
- try using JSDOM 12.
Apr 17, 2020, 8:00 AM
All our tests are written with that one and everything is passing.
Apr 17, 2020, 8:00 AM
Hmm. Tried deleting
node_modules
and the lock files, installed jsdom 12, still different results on my computer (no
_key
), for
<h3>Hello world</h3>
Apr 17, 2020, 8:05 AM
Hmm
Apr 17, 2020, 8:06 AM
That's so strange.
Apr 17, 2020, 8:07 AM
Did you import JSDOM like
import {JSDOM} from 'jsdom'
?
Apr 17, 2020, 8:09 AM
As a last resort, you could
import {normalizeBlock}
from blocktools and map the result through that.
Apr 17, 2020, 8:14 AM
yes. sorry, I have to take it back, I guess there is a mismatch in implementation between my local and CodeSandbox implementation, cause downloading the CodeSandbox as zip and simply adding JSDOM produces the
_key
s locally as well


I was looking at the wrong output file... 🤦‍♂️
Apr 17, 2020, 8:14 AM

Sanity– build remarkable experiences at scale

Sanity is a modern headless CMS that treats content as data to power your digital business. Free to get started, and pay-as-you-go on all plans.

Was this answer helpful?