@portabletext/editor 1.48.7 → 1.48.8
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/lib/_chunks-cjs/behavior.core.cjs +20 -8
- package/lib/_chunks-cjs/behavior.core.cjs.map +1 -1
- package/lib/_chunks-cjs/behavior.markdown.cjs +5 -5
- package/lib/_chunks-cjs/behavior.markdown.cjs.map +1 -1
- package/lib/_chunks-cjs/editor-provider.cjs +121 -90
- package/lib/_chunks-cjs/editor-provider.cjs.map +1 -1
- package/lib/_chunks-cjs/selector.get-focus-inline-object.cjs +2 -2
- package/lib/_chunks-cjs/selector.get-focus-inline-object.cjs.map +1 -1
- package/lib/_chunks-cjs/selector.get-text-before.cjs +7 -4
- package/lib/_chunks-cjs/selector.get-text-before.cjs.map +1 -1
- package/lib/_chunks-cjs/selector.is-overlapping-selection.cjs +63 -47
- package/lib/_chunks-cjs/selector.is-overlapping-selection.cjs.map +1 -1
- package/lib/_chunks-cjs/selector.is-selecting-entire-blocks.cjs +29 -23
- package/lib/_chunks-cjs/selector.is-selecting-entire-blocks.cjs.map +1 -1
- package/lib/_chunks-cjs/util.merge-text-blocks.cjs +3 -3
- package/lib/_chunks-cjs/util.merge-text-blocks.cjs.map +1 -1
- package/lib/_chunks-cjs/util.selection-point-to-block-offset.cjs +15 -15
- package/lib/_chunks-cjs/util.selection-point-to-block-offset.cjs.map +1 -1
- package/lib/_chunks-cjs/util.slice-blocks.cjs +258 -38
- package/lib/_chunks-cjs/util.slice-blocks.cjs.map +1 -1
- package/lib/_chunks-es/behavior.core.js +21 -10
- package/lib/_chunks-es/behavior.core.js.map +1 -1
- package/lib/_chunks-es/behavior.markdown.js +5 -6
- package/lib/_chunks-es/behavior.markdown.js.map +1 -1
- package/lib/_chunks-es/editor-provider.js +75 -46
- package/lib/_chunks-es/editor-provider.js.map +1 -1
- package/lib/_chunks-es/selector.get-focus-inline-object.js +1 -2
- package/lib/_chunks-es/selector.get-focus-inline-object.js.map +1 -1
- package/lib/_chunks-es/selector.get-text-before.js +7 -4
- package/lib/_chunks-es/selector.get-text-before.js.map +1 -1
- package/lib/_chunks-es/selector.is-overlapping-selection.js +61 -46
- package/lib/_chunks-es/selector.is-overlapping-selection.js.map +1 -1
- package/lib/_chunks-es/selector.is-selecting-entire-blocks.js +30 -26
- package/lib/_chunks-es/selector.is-selecting-entire-blocks.js.map +1 -1
- package/lib/_chunks-es/util.merge-text-blocks.js +1 -1
- package/lib/_chunks-es/util.selection-point-to-block-offset.js +15 -16
- package/lib/_chunks-es/util.selection-point-to-block-offset.js.map +1 -1
- package/lib/_chunks-es/util.slice-blocks.js +258 -38
- package/lib/_chunks-es/util.slice-blocks.js.map +1 -1
- package/lib/behaviors/index.d.cts +2552 -251
- package/lib/behaviors/index.d.ts +2552 -251
- package/lib/index.cjs +45 -21
- package/lib/index.cjs.map +1 -1
- package/lib/index.d.cts +2350 -51
- package/lib/index.d.ts +2350 -51
- package/lib/index.js +44 -21
- package/lib/index.js.map +1 -1
- package/lib/plugins/index.cjs +16 -7
- package/lib/plugins/index.cjs.map +1 -1
- package/lib/plugins/index.d.cts +2324 -24
- package/lib/plugins/index.d.ts +2324 -24
- package/lib/plugins/index.js +16 -7
- package/lib/plugins/index.js.map +1 -1
- package/lib/selectors/index.cjs +5 -5
- package/lib/selectors/index.cjs.map +1 -1
- package/lib/selectors/index.d.cts +2321 -28
- package/lib/selectors/index.d.ts +2321 -28
- package/lib/selectors/index.js +5 -6
- package/lib/selectors/index.js.map +1 -1
- package/lib/utils/index.cjs +30 -24
- package/lib/utils/index.cjs.map +1 -1
- package/lib/utils/index.d.cts +2350 -44
- package/lib/utils/index.d.ts +2350 -44
- package/lib/utils/index.js +30 -24
- package/lib/utils/index.js.map +1 -1
- package/package.json +1 -2
- package/src/behavior-actions/behavior.action.block.unset.ts +1 -1
- package/src/behavior-actions/behavior.action.decorator.add.ts +20 -5
- package/src/behaviors/behavior.abstract.decorator.ts +1 -1
- package/src/behaviors/behavior.abstract.delete.ts +1 -1
- package/src/behaviors/behavior.abstract.insert.ts +2 -2
- package/src/behaviors/behavior.abstract.select.ts +16 -4
- package/src/behaviors/behavior.abstract.split.ts +9 -6
- package/src/behaviors/behavior.core.block-objects.ts +5 -5
- package/src/behaviors/behavior.core.insert-break.ts +16 -4
- package/src/behaviors/behavior.core.lists.ts +4 -6
- package/src/behaviors/behavior.decorator-pair.ts +13 -4
- package/src/behaviors/behavior.default.ts +1 -1
- package/src/behaviors/behavior.markdown.ts +5 -5
- package/src/converters/converter.portable-text.ts +1 -1
- package/src/converters/converter.text-html.ts +1 -1
- package/src/converters/converter.text-plain.ts +4 -4
- package/src/editor/plugins/__tests__/withEditableAPIGetFragment.test.tsx +10 -2
- package/src/editor/plugins/createWithSchemaTypes.ts +12 -19
- package/src/internal-utils/__tests__/dmpToOperations.test.ts +13 -12
- package/src/internal-utils/drag-selection.ts +16 -4
- package/src/internal-utils/event-position.ts +20 -8
- package/src/internal-utils/parse-blocks.ts +17 -5
- package/src/internal-utils/validateValue.ts +6 -6
- package/src/plugins/plugin.decorator-shortcut.ts +2 -2
- package/src/selectors/selector.get-active-annotations.ts +5 -2
- package/src/selectors/selector.get-active-list-item.ts +4 -3
- package/src/selectors/selector.get-active-style.ts +4 -3
- package/src/selectors/selector.get-anchor-text-block.ts +3 -6
- package/src/selectors/selector.get-block-offsets.ts +2 -2
- package/src/selectors/selector.get-caret-word-selection.ts +11 -5
- package/src/selectors/selector.get-selected-slice.ts +1 -1
- package/src/selectors/selector.get-selected-spans.ts +11 -15
- package/src/selectors/selector.get-selected-text-blocks.ts +3 -3
- package/src/selectors/selector.get-selection-text.ts +3 -3
- package/src/selectors/selector.get-text-before.ts +5 -2
- package/src/selectors/selector.get-trimmed-selection.ts +20 -14
- package/src/selectors/selector.is-active-annotation.ts +4 -2
- package/src/selectors/selector.is-active-decorator.test.ts +3 -3
- package/src/selectors/selector.is-at-the-end-of-block.ts +4 -1
- package/src/selectors/selector.is-at-the-start-of-block.ts +4 -1
- package/src/selectors/selector.is-point-after-selection.ts +7 -6
- package/src/selectors/selector.is-point-before-selection.ts +7 -6
- package/src/selectors/selector.is-selecting-entire-blocks.ts +8 -2
- package/src/selectors/selectors.ts +25 -28
- package/src/utils/util.block-offset-to-block-selection-point.ts +4 -4
- package/src/utils/util.block-offset-to-selection-point.ts +5 -5
- package/src/utils/util.block-offset.test.ts +219 -156
- package/src/utils/util.block-offset.ts +14 -17
- package/src/utils/util.block-offsets-to-selection.ts +5 -5
- package/src/utils/util.child-selection-point-to-block-offset.ts +7 -10
- package/src/utils/util.get-block-end-point.ts +15 -15
- package/src/utils/util.get-block-start-point.ts +13 -12
- package/src/utils/util.is-empty-text-block.ts +9 -8
- package/src/utils/util.selection-point-to-block-offset.ts +4 -4
- package/src/utils/util.slice-blocks.test.ts +178 -121
- package/src/utils/util.slice-blocks.ts +25 -24
- package/src/utils/util.split-text-block.ts +18 -12
- package/lib/_chunks-cjs/parse-blocks.cjs +0 -205
- package/lib/_chunks-cjs/parse-blocks.cjs.map +0 -1
- package/lib/_chunks-es/parse-blocks.js +0 -206
- package/lib/_chunks-es/parse-blocks.js.map +0 -1
- package/src/behavior-actions/behavior.guards.ts +0 -24
|
@@ -1,24 +1,21 @@
|
|
|
1
|
-
import {
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
type PortableTextBlock,
|
|
6
|
-
} from '@sanity/types'
|
|
7
|
-
import type {EditorSelection} from '..'
|
|
1
|
+
import type {PortableTextBlock} from '@sanity/types'
|
|
2
|
+
import type {EditorContext} from '..'
|
|
3
|
+
import {isSpan, isTextBlock} from '../internal-utils/parse-blocks'
|
|
4
|
+
import {isKeyedSegment} from './util.is-keyed-segment'
|
|
8
5
|
|
|
9
6
|
/**
|
|
10
7
|
* @public
|
|
11
8
|
*/
|
|
12
9
|
export function sliceBlocks({
|
|
10
|
+
context,
|
|
13
11
|
blocks,
|
|
14
|
-
selection,
|
|
15
12
|
}: {
|
|
13
|
+
context: Pick<EditorContext, 'schema' | 'selection'>
|
|
16
14
|
blocks: Array<PortableTextBlock>
|
|
17
|
-
selection: EditorSelection
|
|
18
15
|
}): Array<PortableTextBlock> {
|
|
19
16
|
const slice: Array<PortableTextBlock> = []
|
|
20
17
|
|
|
21
|
-
if (!selection) {
|
|
18
|
+
if (!context.selection) {
|
|
22
19
|
return slice
|
|
23
20
|
}
|
|
24
21
|
|
|
@@ -26,19 +23,23 @@ export function sliceBlocks({
|
|
|
26
23
|
const middleBlocks: PortableTextBlock[] = []
|
|
27
24
|
let endBlock: PortableTextBlock | undefined
|
|
28
25
|
|
|
29
|
-
const startPoint = selection.backward
|
|
30
|
-
|
|
26
|
+
const startPoint = context.selection.backward
|
|
27
|
+
? context.selection.focus
|
|
28
|
+
: context.selection.anchor
|
|
29
|
+
const endPoint = context.selection.backward
|
|
30
|
+
? context.selection.anchor
|
|
31
|
+
: context.selection.focus
|
|
31
32
|
|
|
32
|
-
const startBlockKey =
|
|
33
|
+
const startBlockKey = isKeyedSegment(startPoint.path[0])
|
|
33
34
|
? startPoint.path[0]._key
|
|
34
35
|
: undefined
|
|
35
|
-
const endBlockKey =
|
|
36
|
+
const endBlockKey = isKeyedSegment(endPoint.path[0])
|
|
36
37
|
? endPoint.path[0]._key
|
|
37
38
|
: undefined
|
|
38
|
-
const startChildKey =
|
|
39
|
+
const startChildKey = isKeyedSegment(startPoint.path[2])
|
|
39
40
|
? startPoint.path[2]._key
|
|
40
41
|
: undefined
|
|
41
|
-
const endChildKey =
|
|
42
|
+
const endChildKey = isKeyedSegment(endPoint.path[2])
|
|
42
43
|
? endPoint.path[2]._key
|
|
43
44
|
: undefined
|
|
44
45
|
|
|
@@ -47,7 +48,7 @@ export function sliceBlocks({
|
|
|
47
48
|
}
|
|
48
49
|
|
|
49
50
|
for (const block of blocks) {
|
|
50
|
-
if (!
|
|
51
|
+
if (!isTextBlock(context, block)) {
|
|
51
52
|
if (block._key === startBlockKey && block._key === endBlockKey) {
|
|
52
53
|
startBlock = block
|
|
53
54
|
break
|
|
@@ -55,7 +56,7 @@ export function sliceBlocks({
|
|
|
55
56
|
}
|
|
56
57
|
|
|
57
58
|
if (block._key === startBlockKey) {
|
|
58
|
-
if (!
|
|
59
|
+
if (!isTextBlock(context, block)) {
|
|
59
60
|
startBlock = block
|
|
60
61
|
continue
|
|
61
62
|
}
|
|
@@ -63,7 +64,7 @@ export function sliceBlocks({
|
|
|
63
64
|
if (startChildKey) {
|
|
64
65
|
for (const child of block.children) {
|
|
65
66
|
if (child._key === startChildKey) {
|
|
66
|
-
if (
|
|
67
|
+
if (isSpan(context, child)) {
|
|
67
68
|
const text =
|
|
68
69
|
child._key === endChildKey
|
|
69
70
|
? child.text.slice(startPoint.offset, endPoint.offset)
|
|
@@ -91,11 +92,11 @@ export function sliceBlocks({
|
|
|
91
92
|
continue
|
|
92
93
|
}
|
|
93
94
|
|
|
94
|
-
if (startBlock &&
|
|
95
|
+
if (startBlock && isTextBlock(context, startBlock)) {
|
|
95
96
|
if (
|
|
96
97
|
endChildKey &&
|
|
97
98
|
child._key === endChildKey &&
|
|
98
|
-
|
|
99
|
+
isSpan(context, child)
|
|
99
100
|
) {
|
|
100
101
|
startBlock.children.push({
|
|
101
102
|
...child,
|
|
@@ -130,7 +131,7 @@ export function sliceBlocks({
|
|
|
130
131
|
}
|
|
131
132
|
|
|
132
133
|
if (block._key === endBlockKey) {
|
|
133
|
-
if (!
|
|
134
|
+
if (!isTextBlock(context, block)) {
|
|
134
135
|
endBlock = block
|
|
135
136
|
break
|
|
136
137
|
}
|
|
@@ -142,8 +143,8 @@ export function sliceBlocks({
|
|
|
142
143
|
}
|
|
143
144
|
|
|
144
145
|
for (const child of block.children) {
|
|
145
|
-
if (endBlock &&
|
|
146
|
-
if (child._key === endChildKey &&
|
|
146
|
+
if (endBlock && isTextBlock(context, endBlock)) {
|
|
147
|
+
if (child._key === endChildKey && isSpan(context, child)) {
|
|
147
148
|
endBlock.children.push({
|
|
148
149
|
...child,
|
|
149
150
|
text: child.text.slice(0, endPoint.offset),
|
|
@@ -25,24 +25,30 @@ export function splitTextBlock({
|
|
|
25
25
|
}
|
|
26
26
|
|
|
27
27
|
const before = sliceBlocks({
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
28
|
+
context: {
|
|
29
|
+
schema: context.schema,
|
|
30
|
+
selection: {
|
|
31
|
+
anchor: {
|
|
32
|
+
path: [{_key: block._key}, 'children', {_key: firstChild._key}],
|
|
33
|
+
offset: 0,
|
|
34
|
+
},
|
|
35
|
+
focus: point,
|
|
33
36
|
},
|
|
34
|
-
focus: point,
|
|
35
37
|
},
|
|
38
|
+
blocks: [block],
|
|
36
39
|
}).at(0)
|
|
37
40
|
const after = sliceBlocks({
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
41
|
+
context: {
|
|
42
|
+
schema: context.schema,
|
|
43
|
+
selection: {
|
|
44
|
+
anchor: point,
|
|
45
|
+
focus: {
|
|
46
|
+
path: [{_key: block._key}, 'children', {_key: lastChild._key}],
|
|
47
|
+
offset: isSpan(context, lastChild) ? lastChild.text.length : 0,
|
|
48
|
+
},
|
|
44
49
|
},
|
|
45
50
|
},
|
|
51
|
+
blocks: [block],
|
|
46
52
|
}).at(0)
|
|
47
53
|
|
|
48
54
|
if (!before || !after) {
|
|
@@ -1,205 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
function isTypedObject(object) {
|
|
3
|
-
return isRecord(object) && typeof object._type == "string";
|
|
4
|
-
}
|
|
5
|
-
function isRecord(value) {
|
|
6
|
-
return !!value && (typeof value == "object" || typeof value == "function");
|
|
7
|
-
}
|
|
8
|
-
function parseBlocks({
|
|
9
|
-
context,
|
|
10
|
-
blocks,
|
|
11
|
-
options
|
|
12
|
-
}) {
|
|
13
|
-
return Array.isArray(blocks) ? blocks.flatMap((block) => {
|
|
14
|
-
const parsedBlock = parseBlock({
|
|
15
|
-
context,
|
|
16
|
-
block,
|
|
17
|
-
options
|
|
18
|
-
});
|
|
19
|
-
return parsedBlock ? [parsedBlock] : [];
|
|
20
|
-
}) : [];
|
|
21
|
-
}
|
|
22
|
-
function parseBlock({
|
|
23
|
-
context,
|
|
24
|
-
block,
|
|
25
|
-
options
|
|
26
|
-
}) {
|
|
27
|
-
return parseTextBlock({
|
|
28
|
-
block,
|
|
29
|
-
context,
|
|
30
|
-
options
|
|
31
|
-
}) ?? parseBlockObject({
|
|
32
|
-
blockObject: block,
|
|
33
|
-
context,
|
|
34
|
-
options
|
|
35
|
-
});
|
|
36
|
-
}
|
|
37
|
-
function parseBlockObject({
|
|
38
|
-
blockObject,
|
|
39
|
-
context,
|
|
40
|
-
options
|
|
41
|
-
}) {
|
|
42
|
-
if (!isTypedObject(blockObject))
|
|
43
|
-
return;
|
|
44
|
-
const schemaType = context.schema.blockObjects.find(({
|
|
45
|
-
name
|
|
46
|
-
}) => name === blockObject._type);
|
|
47
|
-
if (schemaType)
|
|
48
|
-
return parseObject({
|
|
49
|
-
object: blockObject,
|
|
50
|
-
context: {
|
|
51
|
-
keyGenerator: context.keyGenerator,
|
|
52
|
-
schemaType
|
|
53
|
-
},
|
|
54
|
-
options
|
|
55
|
-
});
|
|
56
|
-
}
|
|
57
|
-
function isTextBlock(schema, block) {
|
|
58
|
-
return parseTextBlock({
|
|
59
|
-
block,
|
|
60
|
-
context: {
|
|
61
|
-
schema,
|
|
62
|
-
keyGenerator: () => ""
|
|
63
|
-
},
|
|
64
|
-
options: {
|
|
65
|
-
refreshKeys: !1
|
|
66
|
-
}
|
|
67
|
-
}) !== void 0;
|
|
68
|
-
}
|
|
69
|
-
function parseTextBlock({
|
|
70
|
-
block,
|
|
71
|
-
context,
|
|
72
|
-
options
|
|
73
|
-
}) {
|
|
74
|
-
if (!isTypedObject(block) || block._type !== context.schema.block.name)
|
|
75
|
-
return;
|
|
76
|
-
const _key = options.refreshKeys ? context.keyGenerator() : typeof block._key == "string" ? block._key : context.keyGenerator(), unparsedMarkDefs = Array.isArray(block.markDefs) ? block.markDefs : [], markDefKeyMap = /* @__PURE__ */ new Map(), markDefs = unparsedMarkDefs.flatMap((markDef) => {
|
|
77
|
-
if (!isTypedObject(markDef))
|
|
78
|
-
return [];
|
|
79
|
-
const schemaType = context.schema.annotations.find(({
|
|
80
|
-
name
|
|
81
|
-
}) => name === markDef._type);
|
|
82
|
-
if (!schemaType)
|
|
83
|
-
return [];
|
|
84
|
-
if (typeof markDef._key != "string")
|
|
85
|
-
return [];
|
|
86
|
-
const parsedAnnotation = parseObject({
|
|
87
|
-
object: markDef,
|
|
88
|
-
context: {
|
|
89
|
-
schemaType,
|
|
90
|
-
keyGenerator: context.keyGenerator
|
|
91
|
-
},
|
|
92
|
-
options
|
|
93
|
-
});
|
|
94
|
-
return parsedAnnotation ? (markDefKeyMap.set(markDef._key, parsedAnnotation._key), [parsedAnnotation]) : [];
|
|
95
|
-
}), children = (Array.isArray(block.children) ? block.children : []).map((child) => parseSpan({
|
|
96
|
-
span: child,
|
|
97
|
-
context,
|
|
98
|
-
markDefKeyMap,
|
|
99
|
-
options
|
|
100
|
-
}) ?? parseInlineObject({
|
|
101
|
-
inlineObject: child,
|
|
102
|
-
context,
|
|
103
|
-
options
|
|
104
|
-
})).filter((child) => child !== void 0), parsedBlock = {
|
|
105
|
-
_type: context.schema.block.name,
|
|
106
|
-
_key,
|
|
107
|
-
children: children.length > 0 ? children : [{
|
|
108
|
-
_key: context.keyGenerator(),
|
|
109
|
-
_type: context.schema.span.name,
|
|
110
|
-
text: "",
|
|
111
|
-
marks: []
|
|
112
|
-
}],
|
|
113
|
-
markDefs
|
|
114
|
-
};
|
|
115
|
-
if (typeof block.style == "string" && context.schema.styles.find((style) => style.name === block.style))
|
|
116
|
-
parsedBlock.style = block.style;
|
|
117
|
-
else {
|
|
118
|
-
const defaultStyle = context.schema.styles.at(0)?.name;
|
|
119
|
-
defaultStyle !== void 0 ? parsedBlock.style = defaultStyle : console.error("Expected default style");
|
|
120
|
-
}
|
|
121
|
-
return typeof block.listItem == "string" && context.schema.lists.find((list) => list.name === block.listItem) && (parsedBlock.listItem = block.listItem), typeof block.level == "number" && (parsedBlock.level = block.level), parsedBlock;
|
|
122
|
-
}
|
|
123
|
-
function parseSpan({
|
|
124
|
-
span,
|
|
125
|
-
context,
|
|
126
|
-
markDefKeyMap,
|
|
127
|
-
options
|
|
128
|
-
}) {
|
|
129
|
-
if (!isTypedObject(span) || span._type !== context.schema.span.name || span._type !== "span")
|
|
130
|
-
return;
|
|
131
|
-
const marks = (Array.isArray(span.marks) ? span.marks : []).flatMap((mark) => {
|
|
132
|
-
if (typeof mark != "string")
|
|
133
|
-
return [];
|
|
134
|
-
const markDefKey = markDefKeyMap.get(mark);
|
|
135
|
-
return markDefKey !== void 0 ? [markDefKey] : context.schema.decorators.some((decorator) => decorator.name === mark) ? [mark] : [];
|
|
136
|
-
});
|
|
137
|
-
return {
|
|
138
|
-
_type: "span",
|
|
139
|
-
_key: options.refreshKeys ? context.keyGenerator() : typeof span._key == "string" ? span._key : context.keyGenerator(),
|
|
140
|
-
text: typeof span.text == "string" ? span.text : "",
|
|
141
|
-
marks
|
|
142
|
-
};
|
|
143
|
-
}
|
|
144
|
-
function parseInlineObject({
|
|
145
|
-
inlineObject,
|
|
146
|
-
context,
|
|
147
|
-
options
|
|
148
|
-
}) {
|
|
149
|
-
if (!isTypedObject(inlineObject))
|
|
150
|
-
return;
|
|
151
|
-
const schemaType = context.schema.inlineObjects.find(({
|
|
152
|
-
name
|
|
153
|
-
}) => name === inlineObject._type);
|
|
154
|
-
if (schemaType)
|
|
155
|
-
return parseObject({
|
|
156
|
-
object: inlineObject,
|
|
157
|
-
context: {
|
|
158
|
-
keyGenerator: context.keyGenerator,
|
|
159
|
-
schemaType
|
|
160
|
-
},
|
|
161
|
-
options
|
|
162
|
-
});
|
|
163
|
-
}
|
|
164
|
-
function parseAnnotation({
|
|
165
|
-
annotation,
|
|
166
|
-
context,
|
|
167
|
-
options
|
|
168
|
-
}) {
|
|
169
|
-
if (!isTypedObject(annotation))
|
|
170
|
-
return;
|
|
171
|
-
const schemaType = context.schema.annotations.find(({
|
|
172
|
-
name
|
|
173
|
-
}) => name === annotation._type);
|
|
174
|
-
if (schemaType)
|
|
175
|
-
return parseObject({
|
|
176
|
-
object: annotation,
|
|
177
|
-
context: {
|
|
178
|
-
keyGenerator: context.keyGenerator,
|
|
179
|
-
schemaType
|
|
180
|
-
},
|
|
181
|
-
options
|
|
182
|
-
});
|
|
183
|
-
}
|
|
184
|
-
function parseObject({
|
|
185
|
-
object,
|
|
186
|
-
context,
|
|
187
|
-
options
|
|
188
|
-
}) {
|
|
189
|
-
const values = context.schemaType.fields.reduce((fieldValues, field) => {
|
|
190
|
-
const fieldValue = object[field.name];
|
|
191
|
-
return fieldValue !== void 0 && (fieldValues[field.name] = fieldValue), fieldValues;
|
|
192
|
-
}, {});
|
|
193
|
-
return {
|
|
194
|
-
_type: context.schemaType.name,
|
|
195
|
-
_key: options.refreshKeys ? context.keyGenerator() : typeof object._key == "string" ? object._key : context.keyGenerator(),
|
|
196
|
-
...values
|
|
197
|
-
};
|
|
198
|
-
}
|
|
199
|
-
exports.isTextBlock = isTextBlock;
|
|
200
|
-
exports.isTypedObject = isTypedObject;
|
|
201
|
-
exports.parseAnnotation = parseAnnotation;
|
|
202
|
-
exports.parseBlock = parseBlock;
|
|
203
|
-
exports.parseBlocks = parseBlocks;
|
|
204
|
-
exports.parseInlineObject = parseInlineObject;
|
|
205
|
-
//# sourceMappingURL=parse-blocks.cjs.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"parse-blocks.cjs","sources":["../../src/internal-utils/asserters.ts","../../src/internal-utils/parse-blocks.ts"],"sourcesContent":["import type {TypedObject} from '@sanity/types'\n\nexport function isTypedObject(object: unknown): object is TypedObject {\n return isRecord(object) && typeof object._type === 'string'\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return !!value && (typeof value === 'object' || typeof value === 'function')\n}\n","import type {\n PortableTextBlock,\n PortableTextObject,\n PortableTextSpan,\n PortableTextTextBlock,\n TypedObject,\n} from '@sanity/types'\nimport type {EditorSchema} from '../editor/editor-schema'\nimport type {EditorContext} from '../editor/editor-snapshot'\nimport {isTypedObject} from './asserters'\n\nexport function parseBlocks({\n context,\n blocks,\n options,\n}: {\n context: Pick<EditorContext, 'keyGenerator' | 'schema'>\n blocks: unknown\n options: {\n refreshKeys: boolean\n }\n}): Array<PortableTextBlock> {\n if (!Array.isArray(blocks)) {\n return []\n }\n\n return blocks.flatMap((block) => {\n const parsedBlock = parseBlock({context, block, options})\n\n return parsedBlock ? [parsedBlock] : []\n })\n}\n\nexport function parseBlock({\n context,\n block,\n options,\n}: {\n context: Pick<EditorContext, 'keyGenerator' | 'schema'>\n block: unknown\n options: {\n refreshKeys: boolean\n }\n}): PortableTextBlock | undefined {\n return (\n parseTextBlock({block, context, options}) ??\n parseBlockObject({blockObject: block, context, options})\n )\n}\n\nfunction parseBlockObject({\n blockObject,\n context,\n options,\n}: {\n blockObject: unknown\n context: Pick<EditorContext, 'keyGenerator' | 'schema'>\n options: {refreshKeys: boolean}\n}): PortableTextObject | undefined {\n if (!isTypedObject(blockObject)) {\n return undefined\n }\n\n const schemaType = context.schema.blockObjects.find(\n ({name}) => name === blockObject._type,\n )\n\n if (!schemaType) {\n return undefined\n }\n\n return parseObject({\n object: blockObject,\n context: {\n keyGenerator: context.keyGenerator,\n schemaType,\n },\n options,\n })\n}\n\nexport function isTextBlock(\n schema: EditorSchema,\n block: unknown,\n): block is PortableTextTextBlock {\n return (\n parseTextBlock({\n block,\n context: {schema, keyGenerator: () => ''},\n options: {refreshKeys: false},\n }) !== undefined\n )\n}\n\nfunction parseTextBlock({\n block,\n context,\n options,\n}: {\n block: unknown\n context: Pick<EditorContext, 'keyGenerator' | 'schema'>\n options: {refreshKeys: boolean}\n}): PortableTextTextBlock | undefined {\n if (!isTypedObject(block)) {\n return undefined\n }\n\n if (block._type !== context.schema.block.name) {\n return undefined\n }\n\n const _key = options.refreshKeys\n ? context.keyGenerator()\n : typeof block._key === 'string'\n ? block._key\n : context.keyGenerator()\n\n const unparsedMarkDefs: Array<unknown> = Array.isArray(block.markDefs)\n ? block.markDefs\n : []\n const markDefKeyMap = new Map<string, string>()\n const markDefs = unparsedMarkDefs.flatMap((markDef) => {\n if (!isTypedObject(markDef)) {\n return []\n }\n\n const schemaType = context.schema.annotations.find(\n ({name}) => name === markDef._type,\n )\n\n if (!schemaType) {\n return []\n }\n\n if (typeof markDef._key !== 'string') {\n // If the `markDef` doesn't have a `_key` then we don't know what spans\n // it belongs to and therefore we have to discard it.\n return []\n }\n\n const parsedAnnotation = parseObject({\n object: markDef,\n context: {\n schemaType,\n keyGenerator: context.keyGenerator,\n },\n options,\n })\n\n if (!parsedAnnotation) {\n return []\n }\n\n markDefKeyMap.set(markDef._key, parsedAnnotation._key)\n\n return [parsedAnnotation]\n })\n\n const unparsedChildren: Array<unknown> = Array.isArray(block.children)\n ? block.children\n : []\n\n const children = unparsedChildren\n .map(\n (child) =>\n parseSpan({span: child, context, markDefKeyMap, options}) ??\n parseInlineObject({inlineObject: child, context, options}),\n )\n .filter((child) => child !== undefined)\n\n const parsedBlock: PortableTextTextBlock = {\n _type: context.schema.block.name,\n _key,\n children:\n children.length > 0\n ? children\n : [\n {\n _key: context.keyGenerator(),\n _type: context.schema.span.name,\n text: '',\n marks: [],\n },\n ],\n markDefs,\n }\n\n if (\n typeof block.style === 'string' &&\n context.schema.styles.find((style) => style.name === block.style)\n ) {\n parsedBlock.style = block.style\n } else {\n const defaultStyle = context.schema.styles.at(0)?.name\n\n if (defaultStyle !== undefined) {\n parsedBlock.style = defaultStyle\n } else {\n console.error('Expected default style')\n }\n }\n\n if (\n typeof block.listItem === 'string' &&\n context.schema.lists.find((list) => list.name === block.listItem)\n ) {\n parsedBlock.listItem = block.listItem\n }\n\n if (typeof block.level === 'number') {\n parsedBlock.level = block.level\n }\n\n return parsedBlock\n}\n\nexport function isSpan(\n schema: EditorSchema,\n child: PortableTextSpan | PortableTextObject,\n): child is PortableTextSpan {\n return (\n parseSpan({\n span: child,\n markDefKeyMap: new Map(),\n context: {schema, keyGenerator: () => ''},\n options: {refreshKeys: false},\n }) !== undefined\n )\n}\n\nexport function parseSpan({\n span,\n context,\n markDefKeyMap,\n options,\n}: {\n span: unknown\n context: Pick<EditorContext, 'keyGenerator' | 'schema'>\n markDefKeyMap: Map<string, string>\n options: {refreshKeys: boolean}\n}): PortableTextSpan | undefined {\n if (!isTypedObject(span)) {\n return undefined\n }\n\n // In reality, the span schema name is always 'span', but we only the check here anyway\n if (span._type !== context.schema.span.name || span._type !== 'span') {\n return undefined\n }\n\n const unparsedMarks: Array<unknown> = Array.isArray(span.marks)\n ? span.marks\n : []\n const marks = unparsedMarks.flatMap((mark) => {\n if (typeof mark !== 'string') {\n return []\n }\n\n const markDefKey = markDefKeyMap.get(mark)\n\n if (markDefKey !== undefined) {\n return [markDefKey]\n }\n\n if (\n context.schema.decorators.some((decorator) => decorator.name === mark)\n ) {\n return [mark]\n }\n\n return []\n })\n\n return {\n _type: 'span',\n _key: options.refreshKeys\n ? context.keyGenerator()\n : typeof span._key === 'string'\n ? span._key\n : context.keyGenerator(),\n text: typeof span.text === 'string' ? span.text : '',\n marks,\n }\n}\n\nexport function parseInlineObject({\n inlineObject,\n context,\n options,\n}: {\n inlineObject: unknown\n context: Pick<EditorContext, 'keyGenerator' | 'schema'>\n options: {refreshKeys: boolean}\n}): PortableTextObject | undefined {\n if (!isTypedObject(inlineObject)) {\n return undefined\n }\n\n const schemaType = context.schema.inlineObjects.find(\n ({name}) => name === inlineObject._type,\n )\n\n if (!schemaType) {\n return undefined\n }\n\n return parseObject({\n object: inlineObject,\n context: {\n keyGenerator: context.keyGenerator,\n schemaType,\n },\n options,\n })\n}\n\nexport function parseAnnotation({\n annotation,\n context,\n options,\n}: {\n annotation: TypedObject\n context: Pick<EditorContext, 'keyGenerator' | 'schema'>\n options: {refreshKeys: boolean}\n}): PortableTextObject | undefined {\n if (!isTypedObject(annotation)) {\n return undefined\n }\n\n const schemaType = context.schema.annotations.find(\n ({name}) => name === annotation._type,\n )\n\n if (!schemaType) {\n return undefined\n }\n\n return parseObject({\n object: annotation,\n context: {\n keyGenerator: context.keyGenerator,\n schemaType,\n },\n options,\n })\n}\n\nfunction parseObject({\n object,\n context,\n options,\n}: {\n object: TypedObject\n context: Pick<EditorContext, 'keyGenerator'> & {\n schemaType: EditorSchema['blockObjects'][0]\n }\n options: {refreshKeys: boolean}\n}): PortableTextObject {\n // Validates all props on the object and only takes those that match\n // the name of a field\n const values = context.schemaType.fields.reduce<Record<string, unknown>>(\n (fieldValues, field) => {\n const fieldValue = object[field.name]\n\n if (fieldValue !== undefined) {\n fieldValues[field.name] = fieldValue\n }\n\n return fieldValues\n },\n {},\n )\n\n return {\n _type: context.schemaType.name,\n _key: options.refreshKeys\n ? context.keyGenerator()\n : typeof object._key === 'string'\n ? object._key\n : context.keyGenerator(),\n ...values,\n }\n}\n"],"names":["isTypedObject","object","isRecord","_type","value","parseBlocks","context","blocks","options","Array","isArray","flatMap","block","parsedBlock","parseBlock","parseTextBlock","parseBlockObject","blockObject","schemaType","schema","blockObjects","find","name","parseObject","keyGenerator","isTextBlock","refreshKeys","undefined","_key","unparsedMarkDefs","markDefs","markDefKeyMap","Map","markDef","annotations","parsedAnnotation","set","children","map","child","parseSpan","span","parseInlineObject","inlineObject","filter","length","text","marks","style","styles","defaultStyle","at","console","error","listItem","lists","list","level","mark","markDefKey","get","decorators","some","decorator","inlineObjects","parseAnnotation","annotation","values","fields","reduce","fieldValues","field","fieldValue"],"mappings":"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"}
|
|
@@ -1,206 +0,0 @@
|
|
|
1
|
-
function isTypedObject(object) {
|
|
2
|
-
return isRecord(object) && typeof object._type == "string";
|
|
3
|
-
}
|
|
4
|
-
function isRecord(value) {
|
|
5
|
-
return !!value && (typeof value == "object" || typeof value == "function");
|
|
6
|
-
}
|
|
7
|
-
function parseBlocks({
|
|
8
|
-
context,
|
|
9
|
-
blocks,
|
|
10
|
-
options
|
|
11
|
-
}) {
|
|
12
|
-
return Array.isArray(blocks) ? blocks.flatMap((block) => {
|
|
13
|
-
const parsedBlock = parseBlock({
|
|
14
|
-
context,
|
|
15
|
-
block,
|
|
16
|
-
options
|
|
17
|
-
});
|
|
18
|
-
return parsedBlock ? [parsedBlock] : [];
|
|
19
|
-
}) : [];
|
|
20
|
-
}
|
|
21
|
-
function parseBlock({
|
|
22
|
-
context,
|
|
23
|
-
block,
|
|
24
|
-
options
|
|
25
|
-
}) {
|
|
26
|
-
return parseTextBlock({
|
|
27
|
-
block,
|
|
28
|
-
context,
|
|
29
|
-
options
|
|
30
|
-
}) ?? parseBlockObject({
|
|
31
|
-
blockObject: block,
|
|
32
|
-
context,
|
|
33
|
-
options
|
|
34
|
-
});
|
|
35
|
-
}
|
|
36
|
-
function parseBlockObject({
|
|
37
|
-
blockObject,
|
|
38
|
-
context,
|
|
39
|
-
options
|
|
40
|
-
}) {
|
|
41
|
-
if (!isTypedObject(blockObject))
|
|
42
|
-
return;
|
|
43
|
-
const schemaType = context.schema.blockObjects.find(({
|
|
44
|
-
name
|
|
45
|
-
}) => name === blockObject._type);
|
|
46
|
-
if (schemaType)
|
|
47
|
-
return parseObject({
|
|
48
|
-
object: blockObject,
|
|
49
|
-
context: {
|
|
50
|
-
keyGenerator: context.keyGenerator,
|
|
51
|
-
schemaType
|
|
52
|
-
},
|
|
53
|
-
options
|
|
54
|
-
});
|
|
55
|
-
}
|
|
56
|
-
function isTextBlock(schema, block) {
|
|
57
|
-
return parseTextBlock({
|
|
58
|
-
block,
|
|
59
|
-
context: {
|
|
60
|
-
schema,
|
|
61
|
-
keyGenerator: () => ""
|
|
62
|
-
},
|
|
63
|
-
options: {
|
|
64
|
-
refreshKeys: !1
|
|
65
|
-
}
|
|
66
|
-
}) !== void 0;
|
|
67
|
-
}
|
|
68
|
-
function parseTextBlock({
|
|
69
|
-
block,
|
|
70
|
-
context,
|
|
71
|
-
options
|
|
72
|
-
}) {
|
|
73
|
-
if (!isTypedObject(block) || block._type !== context.schema.block.name)
|
|
74
|
-
return;
|
|
75
|
-
const _key = options.refreshKeys ? context.keyGenerator() : typeof block._key == "string" ? block._key : context.keyGenerator(), unparsedMarkDefs = Array.isArray(block.markDefs) ? block.markDefs : [], markDefKeyMap = /* @__PURE__ */ new Map(), markDefs = unparsedMarkDefs.flatMap((markDef) => {
|
|
76
|
-
if (!isTypedObject(markDef))
|
|
77
|
-
return [];
|
|
78
|
-
const schemaType = context.schema.annotations.find(({
|
|
79
|
-
name
|
|
80
|
-
}) => name === markDef._type);
|
|
81
|
-
if (!schemaType)
|
|
82
|
-
return [];
|
|
83
|
-
if (typeof markDef._key != "string")
|
|
84
|
-
return [];
|
|
85
|
-
const parsedAnnotation = parseObject({
|
|
86
|
-
object: markDef,
|
|
87
|
-
context: {
|
|
88
|
-
schemaType,
|
|
89
|
-
keyGenerator: context.keyGenerator
|
|
90
|
-
},
|
|
91
|
-
options
|
|
92
|
-
});
|
|
93
|
-
return parsedAnnotation ? (markDefKeyMap.set(markDef._key, parsedAnnotation._key), [parsedAnnotation]) : [];
|
|
94
|
-
}), children = (Array.isArray(block.children) ? block.children : []).map((child) => parseSpan({
|
|
95
|
-
span: child,
|
|
96
|
-
context,
|
|
97
|
-
markDefKeyMap,
|
|
98
|
-
options
|
|
99
|
-
}) ?? parseInlineObject({
|
|
100
|
-
inlineObject: child,
|
|
101
|
-
context,
|
|
102
|
-
options
|
|
103
|
-
})).filter((child) => child !== void 0), parsedBlock = {
|
|
104
|
-
_type: context.schema.block.name,
|
|
105
|
-
_key,
|
|
106
|
-
children: children.length > 0 ? children : [{
|
|
107
|
-
_key: context.keyGenerator(),
|
|
108
|
-
_type: context.schema.span.name,
|
|
109
|
-
text: "",
|
|
110
|
-
marks: []
|
|
111
|
-
}],
|
|
112
|
-
markDefs
|
|
113
|
-
};
|
|
114
|
-
if (typeof block.style == "string" && context.schema.styles.find((style) => style.name === block.style))
|
|
115
|
-
parsedBlock.style = block.style;
|
|
116
|
-
else {
|
|
117
|
-
const defaultStyle = context.schema.styles.at(0)?.name;
|
|
118
|
-
defaultStyle !== void 0 ? parsedBlock.style = defaultStyle : console.error("Expected default style");
|
|
119
|
-
}
|
|
120
|
-
return typeof block.listItem == "string" && context.schema.lists.find((list) => list.name === block.listItem) && (parsedBlock.listItem = block.listItem), typeof block.level == "number" && (parsedBlock.level = block.level), parsedBlock;
|
|
121
|
-
}
|
|
122
|
-
function parseSpan({
|
|
123
|
-
span,
|
|
124
|
-
context,
|
|
125
|
-
markDefKeyMap,
|
|
126
|
-
options
|
|
127
|
-
}) {
|
|
128
|
-
if (!isTypedObject(span) || span._type !== context.schema.span.name || span._type !== "span")
|
|
129
|
-
return;
|
|
130
|
-
const marks = (Array.isArray(span.marks) ? span.marks : []).flatMap((mark) => {
|
|
131
|
-
if (typeof mark != "string")
|
|
132
|
-
return [];
|
|
133
|
-
const markDefKey = markDefKeyMap.get(mark);
|
|
134
|
-
return markDefKey !== void 0 ? [markDefKey] : context.schema.decorators.some((decorator) => decorator.name === mark) ? [mark] : [];
|
|
135
|
-
});
|
|
136
|
-
return {
|
|
137
|
-
_type: "span",
|
|
138
|
-
_key: options.refreshKeys ? context.keyGenerator() : typeof span._key == "string" ? span._key : context.keyGenerator(),
|
|
139
|
-
text: typeof span.text == "string" ? span.text : "",
|
|
140
|
-
marks
|
|
141
|
-
};
|
|
142
|
-
}
|
|
143
|
-
function parseInlineObject({
|
|
144
|
-
inlineObject,
|
|
145
|
-
context,
|
|
146
|
-
options
|
|
147
|
-
}) {
|
|
148
|
-
if (!isTypedObject(inlineObject))
|
|
149
|
-
return;
|
|
150
|
-
const schemaType = context.schema.inlineObjects.find(({
|
|
151
|
-
name
|
|
152
|
-
}) => name === inlineObject._type);
|
|
153
|
-
if (schemaType)
|
|
154
|
-
return parseObject({
|
|
155
|
-
object: inlineObject,
|
|
156
|
-
context: {
|
|
157
|
-
keyGenerator: context.keyGenerator,
|
|
158
|
-
schemaType
|
|
159
|
-
},
|
|
160
|
-
options
|
|
161
|
-
});
|
|
162
|
-
}
|
|
163
|
-
function parseAnnotation({
|
|
164
|
-
annotation,
|
|
165
|
-
context,
|
|
166
|
-
options
|
|
167
|
-
}) {
|
|
168
|
-
if (!isTypedObject(annotation))
|
|
169
|
-
return;
|
|
170
|
-
const schemaType = context.schema.annotations.find(({
|
|
171
|
-
name
|
|
172
|
-
}) => name === annotation._type);
|
|
173
|
-
if (schemaType)
|
|
174
|
-
return parseObject({
|
|
175
|
-
object: annotation,
|
|
176
|
-
context: {
|
|
177
|
-
keyGenerator: context.keyGenerator,
|
|
178
|
-
schemaType
|
|
179
|
-
},
|
|
180
|
-
options
|
|
181
|
-
});
|
|
182
|
-
}
|
|
183
|
-
function parseObject({
|
|
184
|
-
object,
|
|
185
|
-
context,
|
|
186
|
-
options
|
|
187
|
-
}) {
|
|
188
|
-
const values = context.schemaType.fields.reduce((fieldValues, field) => {
|
|
189
|
-
const fieldValue = object[field.name];
|
|
190
|
-
return fieldValue !== void 0 && (fieldValues[field.name] = fieldValue), fieldValues;
|
|
191
|
-
}, {});
|
|
192
|
-
return {
|
|
193
|
-
_type: context.schemaType.name,
|
|
194
|
-
_key: options.refreshKeys ? context.keyGenerator() : typeof object._key == "string" ? object._key : context.keyGenerator(),
|
|
195
|
-
...values
|
|
196
|
-
};
|
|
197
|
-
}
|
|
198
|
-
export {
|
|
199
|
-
isTextBlock,
|
|
200
|
-
isTypedObject,
|
|
201
|
-
parseAnnotation,
|
|
202
|
-
parseBlock,
|
|
203
|
-
parseBlocks,
|
|
204
|
-
parseInlineObject
|
|
205
|
-
};
|
|
206
|
-
//# sourceMappingURL=parse-blocks.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"parse-blocks.js","sources":["../../src/internal-utils/asserters.ts","../../src/internal-utils/parse-blocks.ts"],"sourcesContent":["import type {TypedObject} from '@sanity/types'\n\nexport function isTypedObject(object: unknown): object is TypedObject {\n return isRecord(object) && typeof object._type === 'string'\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return !!value && (typeof value === 'object' || typeof value === 'function')\n}\n","import type {\n PortableTextBlock,\n PortableTextObject,\n PortableTextSpan,\n PortableTextTextBlock,\n TypedObject,\n} from '@sanity/types'\nimport type {EditorSchema} from '../editor/editor-schema'\nimport type {EditorContext} from '../editor/editor-snapshot'\nimport {isTypedObject} from './asserters'\n\nexport function parseBlocks({\n context,\n blocks,\n options,\n}: {\n context: Pick<EditorContext, 'keyGenerator' | 'schema'>\n blocks: unknown\n options: {\n refreshKeys: boolean\n }\n}): Array<PortableTextBlock> {\n if (!Array.isArray(blocks)) {\n return []\n }\n\n return blocks.flatMap((block) => {\n const parsedBlock = parseBlock({context, block, options})\n\n return parsedBlock ? [parsedBlock] : []\n })\n}\n\nexport function parseBlock({\n context,\n block,\n options,\n}: {\n context: Pick<EditorContext, 'keyGenerator' | 'schema'>\n block: unknown\n options: {\n refreshKeys: boolean\n }\n}): PortableTextBlock | undefined {\n return (\n parseTextBlock({block, context, options}) ??\n parseBlockObject({blockObject: block, context, options})\n )\n}\n\nfunction parseBlockObject({\n blockObject,\n context,\n options,\n}: {\n blockObject: unknown\n context: Pick<EditorContext, 'keyGenerator' | 'schema'>\n options: {refreshKeys: boolean}\n}): PortableTextObject | undefined {\n if (!isTypedObject(blockObject)) {\n return undefined\n }\n\n const schemaType = context.schema.blockObjects.find(\n ({name}) => name === blockObject._type,\n )\n\n if (!schemaType) {\n return undefined\n }\n\n return parseObject({\n object: blockObject,\n context: {\n keyGenerator: context.keyGenerator,\n schemaType,\n },\n options,\n })\n}\n\nexport function isTextBlock(\n schema: EditorSchema,\n block: unknown,\n): block is PortableTextTextBlock {\n return (\n parseTextBlock({\n block,\n context: {schema, keyGenerator: () => ''},\n options: {refreshKeys: false},\n }) !== undefined\n )\n}\n\nfunction parseTextBlock({\n block,\n context,\n options,\n}: {\n block: unknown\n context: Pick<EditorContext, 'keyGenerator' | 'schema'>\n options: {refreshKeys: boolean}\n}): PortableTextTextBlock | undefined {\n if (!isTypedObject(block)) {\n return undefined\n }\n\n if (block._type !== context.schema.block.name) {\n return undefined\n }\n\n const _key = options.refreshKeys\n ? context.keyGenerator()\n : typeof block._key === 'string'\n ? block._key\n : context.keyGenerator()\n\n const unparsedMarkDefs: Array<unknown> = Array.isArray(block.markDefs)\n ? block.markDefs\n : []\n const markDefKeyMap = new Map<string, string>()\n const markDefs = unparsedMarkDefs.flatMap((markDef) => {\n if (!isTypedObject(markDef)) {\n return []\n }\n\n const schemaType = context.schema.annotations.find(\n ({name}) => name === markDef._type,\n )\n\n if (!schemaType) {\n return []\n }\n\n if (typeof markDef._key !== 'string') {\n // If the `markDef` doesn't have a `_key` then we don't know what spans\n // it belongs to and therefore we have to discard it.\n return []\n }\n\n const parsedAnnotation = parseObject({\n object: markDef,\n context: {\n schemaType,\n keyGenerator: context.keyGenerator,\n },\n options,\n })\n\n if (!parsedAnnotation) {\n return []\n }\n\n markDefKeyMap.set(markDef._key, parsedAnnotation._key)\n\n return [parsedAnnotation]\n })\n\n const unparsedChildren: Array<unknown> = Array.isArray(block.children)\n ? block.children\n : []\n\n const children = unparsedChildren\n .map(\n (child) =>\n parseSpan({span: child, context, markDefKeyMap, options}) ??\n parseInlineObject({inlineObject: child, context, options}),\n )\n .filter((child) => child !== undefined)\n\n const parsedBlock: PortableTextTextBlock = {\n _type: context.schema.block.name,\n _key,\n children:\n children.length > 0\n ? children\n : [\n {\n _key: context.keyGenerator(),\n _type: context.schema.span.name,\n text: '',\n marks: [],\n },\n ],\n markDefs,\n }\n\n if (\n typeof block.style === 'string' &&\n context.schema.styles.find((style) => style.name === block.style)\n ) {\n parsedBlock.style = block.style\n } else {\n const defaultStyle = context.schema.styles.at(0)?.name\n\n if (defaultStyle !== undefined) {\n parsedBlock.style = defaultStyle\n } else {\n console.error('Expected default style')\n }\n }\n\n if (\n typeof block.listItem === 'string' &&\n context.schema.lists.find((list) => list.name === block.listItem)\n ) {\n parsedBlock.listItem = block.listItem\n }\n\n if (typeof block.level === 'number') {\n parsedBlock.level = block.level\n }\n\n return parsedBlock\n}\n\nexport function isSpan(\n schema: EditorSchema,\n child: PortableTextSpan | PortableTextObject,\n): child is PortableTextSpan {\n return (\n parseSpan({\n span: child,\n markDefKeyMap: new Map(),\n context: {schema, keyGenerator: () => ''},\n options: {refreshKeys: false},\n }) !== undefined\n )\n}\n\nexport function parseSpan({\n span,\n context,\n markDefKeyMap,\n options,\n}: {\n span: unknown\n context: Pick<EditorContext, 'keyGenerator' | 'schema'>\n markDefKeyMap: Map<string, string>\n options: {refreshKeys: boolean}\n}): PortableTextSpan | undefined {\n if (!isTypedObject(span)) {\n return undefined\n }\n\n // In reality, the span schema name is always 'span', but we only the check here anyway\n if (span._type !== context.schema.span.name || span._type !== 'span') {\n return undefined\n }\n\n const unparsedMarks: Array<unknown> = Array.isArray(span.marks)\n ? span.marks\n : []\n const marks = unparsedMarks.flatMap((mark) => {\n if (typeof mark !== 'string') {\n return []\n }\n\n const markDefKey = markDefKeyMap.get(mark)\n\n if (markDefKey !== undefined) {\n return [markDefKey]\n }\n\n if (\n context.schema.decorators.some((decorator) => decorator.name === mark)\n ) {\n return [mark]\n }\n\n return []\n })\n\n return {\n _type: 'span',\n _key: options.refreshKeys\n ? context.keyGenerator()\n : typeof span._key === 'string'\n ? span._key\n : context.keyGenerator(),\n text: typeof span.text === 'string' ? span.text : '',\n marks,\n }\n}\n\nexport function parseInlineObject({\n inlineObject,\n context,\n options,\n}: {\n inlineObject: unknown\n context: Pick<EditorContext, 'keyGenerator' | 'schema'>\n options: {refreshKeys: boolean}\n}): PortableTextObject | undefined {\n if (!isTypedObject(inlineObject)) {\n return undefined\n }\n\n const schemaType = context.schema.inlineObjects.find(\n ({name}) => name === inlineObject._type,\n )\n\n if (!schemaType) {\n return undefined\n }\n\n return parseObject({\n object: inlineObject,\n context: {\n keyGenerator: context.keyGenerator,\n schemaType,\n },\n options,\n })\n}\n\nexport function parseAnnotation({\n annotation,\n context,\n options,\n}: {\n annotation: TypedObject\n context: Pick<EditorContext, 'keyGenerator' | 'schema'>\n options: {refreshKeys: boolean}\n}): PortableTextObject | undefined {\n if (!isTypedObject(annotation)) {\n return undefined\n }\n\n const schemaType = context.schema.annotations.find(\n ({name}) => name === annotation._type,\n )\n\n if (!schemaType) {\n return undefined\n }\n\n return parseObject({\n object: annotation,\n context: {\n keyGenerator: context.keyGenerator,\n schemaType,\n },\n options,\n })\n}\n\nfunction parseObject({\n object,\n context,\n options,\n}: {\n object: TypedObject\n context: Pick<EditorContext, 'keyGenerator'> & {\n schemaType: EditorSchema['blockObjects'][0]\n }\n options: {refreshKeys: boolean}\n}): PortableTextObject {\n // Validates all props on the object and only takes those that match\n // the name of a field\n const values = context.schemaType.fields.reduce<Record<string, unknown>>(\n (fieldValues, field) => {\n const fieldValue = object[field.name]\n\n if (fieldValue !== undefined) {\n fieldValues[field.name] = fieldValue\n }\n\n return fieldValues\n },\n {},\n )\n\n return {\n _type: context.schemaType.name,\n _key: options.refreshKeys\n ? context.keyGenerator()\n : typeof object._key === 'string'\n ? object._key\n : context.keyGenerator(),\n ...values,\n }\n}\n"],"names":["isTypedObject","object","isRecord","_type","value","parseBlocks","context","blocks","options","Array","isArray","flatMap","block","parsedBlock","parseBlock","parseTextBlock","parseBlockObject","blockObject","schemaType","schema","blockObjects","find","name","parseObject","keyGenerator","isTextBlock","refreshKeys","undefined","_key","unparsedMarkDefs","markDefs","markDefKeyMap","Map","markDef","annotations","parsedAnnotation","set","children","map","child","parseSpan","span","parseInlineObject","inlineObject","filter","length","text","marks","style","styles","defaultStyle","at","console","error","listItem","lists","list","level","mark","markDefKey","get","decorators","some","decorator","inlineObjects","parseAnnotation","annotation","values","fields","reduce","fieldValues","field","fieldValue"],"mappings":"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"}
|
|
@@ -1,24 +0,0 @@
|
|
|
1
|
-
import {
|
|
2
|
-
isPortableTextListBlock,
|
|
3
|
-
isPortableTextTextBlock,
|
|
4
|
-
type PortableTextListBlock,
|
|
5
|
-
type PortableTextTextBlock,
|
|
6
|
-
} from '@sanity/types'
|
|
7
|
-
import type {EditorSchema} from '../editor/editor-schema'
|
|
8
|
-
|
|
9
|
-
/**
|
|
10
|
-
* @alpha
|
|
11
|
-
*/
|
|
12
|
-
export type BehaviorGuards = ReturnType<typeof createGuards>
|
|
13
|
-
|
|
14
|
-
export function createGuards({schema}: {schema: EditorSchema}) {
|
|
15
|
-
function isListBlock(block: unknown): block is PortableTextListBlock {
|
|
16
|
-
return isPortableTextListBlock(block) && block._type === schema.block.name
|
|
17
|
-
}
|
|
18
|
-
|
|
19
|
-
function isTextBlock(block: unknown): block is PortableTextTextBlock {
|
|
20
|
-
return isPortableTextTextBlock(block) && block._type === schema.block.name
|
|
21
|
-
}
|
|
22
|
-
|
|
23
|
-
return {isListBlock, isTextBlock}
|
|
24
|
-
}
|