diff --git a/src/serializers/html.js b/src/serializers/html.js
index c67769c2f..f6646bbe4 100644
--- a/src/serializers/html.js
+++ b/src/serializers/html.js
@@ -98,6 +98,11 @@ class Html {
const children = $.children().toArray()
let nodes = this.deserializeElements(children)
+ const { defaultBlockType } = this
+ const defaults = typeof defaultBlockType == 'string'
+ ? { type: defaultBlockType }
+ : defaultBlockType
+
// HACK: ensure for now that all top-level inline are wrapped into a block.
nodes = nodes.reduce((memo, node, i, original) => {
if (node.kind == 'block') {
@@ -111,11 +116,6 @@ class Html {
return memo
}
- const { defaultBlockType } = this
- const defaults = typeof defaultBlockType == 'string'
- ? { type: defaultBlockType }
- : defaultBlockType
-
const block = {
kind: 'block',
nodes: [node],
@@ -126,6 +126,14 @@ class Html {
return memo
}, [])
+ if (nodes.length === 0) {
+ nodes = [{
+ kind: 'block',
+ nodes: [],
+ ...defaults
+ }]
+ }
+
const raw = {
kind: 'state',
document: {
diff --git a/test/serializers/fixtures/html/deserialize/empty-string/index.js b/test/serializers/fixtures/html/deserialize/empty-string/index.js
new file mode 100644
index 000000000..56004c9f9
--- /dev/null
+++ b/test/serializers/fixtures/html/deserialize/empty-string/index.js
@@ -0,0 +1 @@
+export default {}
\ No newline at end of file
diff --git a/test/serializers/fixtures/html/deserialize/empty-string/input.html b/test/serializers/fixtures/html/deserialize/empty-string/input.html
new file mode 100644
index 000000000..e69de29bb
diff --git a/test/serializers/fixtures/html/deserialize/empty-string/output.yaml b/test/serializers/fixtures/html/deserialize/empty-string/output.yaml
new file mode 100644
index 000000000..b90a670ca
--- /dev/null
+++ b/test/serializers/fixtures/html/deserialize/empty-string/output.yaml
@@ -0,0 +1,7 @@
+data: {}
+nodes:
+ - type: paragraph
+ isVoid: false
+ data: {}
+ nodes:
+ - characters: []
\ No newline at end of file