Schema
Every Slate editor has a "schema" associated with it, which contains information about the structure of its content. For the most basic cases, you'll just rely on Slate's default core schema. But for advanced use cases, you can enforce rules about what the content of a Slate document can contain.
Properties
The top-level properties of a schema give you a way to define validation "rules" that the schema enforces.
document
document
Object
A set of validation rules that apply to the top-level document.
blocks
blocks
Object
A dictionary of blocks by type, each with its own set of validation rules.
inlines
inlines
Object
A dictionary of inlines by type, each with its own set of validation rules.
Rule Properties
Slate schemas are built using a set of validation rules. Each of the properties will validate certain pieces of the document based on the properties it defines.
data
data
Object
A dictionary of data attributes and their corresponding values or validation functions. The functions should return a boolean indicating whether the data value is valid or not.
first
first
Object|Array
Will validate the first child node against a match
.
isVoid
isVoid
Boolean
Will determine whether the node is treated as a "void" node or not, making its content a black box that Slate doesn't control editing for.
last
last
Object|Array
Will validate the last child node against a match
.
next
next
Object|Array
Will validate the next sibling node against a match
.
nodes
nodes
Array
Will validate a node's children. The nodes
definitions can declare a match
as well as min
and max
properties.
🤖 The
nodes
array is order-sensitive! The example above will require that the first node be either animage
orvideo
, and that it be followed by one or moreparagraph
nodes.
marks
marks
Array
Will validate a node's marks. The marks
definitions can declare the type
property, providing a list of mark types to be allowed. If declared, any marks that are not in the list will be removed.
normalize
normalize
normalize(change: Change, error: SlateError) => Void
A function that can be provided to override the default behavior in the case of a rule being invalid. By default, Slate will do what it can, but since it doesn't know much about your schema, it will often remove invalid nodes. If you want to override this behavior and "fix" the node instead of removing it, pass a custom normalize
function.
For more information on the arguments passed to normalize
, see the Errors section.
parent
parent
Object|Array
Will validate a node's parent against a match
.
previous
previous
Object|Array
Will validate the previous sibling node against a match
.
text
text
RegExp|Function
Will validate a node's text with a regex or function.
Static Methods
Schema.create
Schema.create
Schema.create(properties: Object) => Schema
Create a new Schema
instance with properties
.
Schema.fromJSON
Schema.fromJSON
Schema.fromJSON(object: Object) => Schema
Create a schema from a JSON object
.
Schema.isSchema
Schema.isSchema
Schema.isSchema(maybeSchema: Any) => Boolean
Returns a boolean if the passed in argument is a Schema
.
Instance Methods
toJSON
toJSON
toJSON() => Object
Returns a JSON representation of the schema.
Errors
When supplying your own normalize
property for a schema rule, it will be called with (change, error)
. The error code
will be one of a set of potential code strings, and it will contain additional helpful properties depending on the type of error.
'child_object_invalid'
'child_object_invalid'
Raised when the object
property of a child node is invalid.
'child_required'
'child_required'
Raised when a child node was required but none was found.
'child_type_invalid'
'child_type_invalid'
Raised when the type
property of a child node is invalid.
'child_unknown'
'child_unknown'
Raised when a child was not expected but one was found.
'first_child_object_invalid'
'first_child_object_invalid'
Raised when the object
property of the first child node is invalid, when a specific first
rule was defined in a schema.
'first_child_type_invalid'
'first_child_type_invalid'
Raised when the type
property of the first child node is invalid, when a specific first
rule was defined in a schema.
'last_child_object_invalid'
'last_child_object_invalid'
Raised when the object
property of the last child node is invalid, when a specific last
rule was defined in a schema.
'last_child_type_invalid'
'last_child_type_invalid'
Raised when the type
property of the last child node is invalid, when a specific last
rule was defined in a schema.
'next_sibling_object_invalid'
'next_sibling_object_invalid'
Raised when the object
property of the next sibling node is invalid, when a specific next
rule was defined in a schema.
'next_sibling_type_invalid'
'next_sibling_type_invalid'
Raised when the type
property of the next sibling node is invalid, when a specific next
rule was defined in a schema.
'node_data_invalid'
'node_data_invalid'
Raised when the data
property of a node contains an invalid entry.
'node_is_void_invalid'
'node_is_void_invalid'
Raised when the isVoid
property of a node is invalid.
'node_mark_invalid'
'node_mark_invalid'
Raised when one of the marks in a node is invalid.
'node_text_invalid'
'node_text_invalid'
Raised when the text content of a node is invalid.
'parent_object_invalid'
'parent_object_invalid'
Raised when the object
property of the parent of a node is invalid, when a specific parent
rule was defined in a schema.
'parent_type_invalid'
'parent_type_invalid'
Raised when the type
property of the parent of a node is invalid, when a specific parent
rule was defined in a schema.
'previous_sibling_object_invalid'
'previous_sibling_object_invalid'
Raised when the object
property of the previous sibling node is invalid, when a specific previous
rule was defined in a schema.
'previous_sibling_type_invalid'
'previous_sibling_type_invalid'
Raised when the type
property of the previous sibling node is invalid, when a specific previous
rule was defined in a schema.
Last updated