@@ -20,13 +20,26 @@ See [**nlcst**][nlcst] for more information on **retext** nodes,
20
20
[ ** mdast** ] [ mdast ] for information on ** remark** nodes, and
21
21
[ ` hast#nodes ` ] [ hast-nodes ] for information on ** hast** nodes.
22
22
23
+ Subsets of Unist can define new properties on new nodes, and plug-ins
24
+ and utilities can define new [ ` data ` ] [ data ] properties on nodes. But,
25
+ the values on those properties ** must** be JSON values: ` string ` ,
26
+ ` number ` , ` object ` , ` array ` , ` true ` , ` false ` , or ` null ` . This means
27
+ that the syntax tree should be able to be converted to and from JSON
28
+ and produce the same tree. For example, in JavaScript, a tree should
29
+ be able to be passed through ` JSON.parse(JSON.stringify(tree)) ` and
30
+ result in the same values.
31
+
23
32
### ` Node `
24
33
25
34
Node represents any unit in the Unist hierarchy. It is an abstract
26
35
class. Interfaces inheriting from ** Node** must have a ` type ` property,
27
36
and may have ` data ` or ` location ` properties. ` type ` s are defined by
28
37
their namespace.
29
38
39
+ Subsets of Unist are allowed to define properties on interfaces which
40
+ subclass Unist’s abstract interfaces. For example, [ mdast] [ ] defines
41
+ a ` link ` node (subclassing [ Parent] [ ] ) with a ` url ` property.
42
+
30
43
``` idl
31
44
interface Node {
32
45
type: string;
@@ -37,9 +50,10 @@ interface Node {
37
50
38
51
#### ` Data `
39
52
40
- Data represents data associated with any node. Data is a scope for plug-ins
41
- to store any information. Its only limitation being that each property should
42
- by ` stringify ` able: not throw when passed to ` JSON.stringify() ` .
53
+ Data represents data associated with any node. ` Data ` is a scope for
54
+ plug-ins to store any information. For example, [ ` remark-html ` ] [ remark-html ]
55
+ uses ` htmlAttributes ` to let other plug-ins specify attributes added
56
+ to the compiled HTML element.
43
57
44
58
``` idl
45
59
interface Data { }
@@ -175,3 +189,9 @@ A list of **VFile**-related utilities can be found at [**vfile**][vfile].
175
189
[ hast-nodes ] : https://github.com/wooorm/hast#nodes
176
190
177
191
[ vfile ] : https://github.com/wooorm/vfile
192
+
193
+ [ remark-html ] : https://github.com/wooorm/remark-html
194
+
195
+ [ parent ] : #parent
196
+
197
+ [ data ] : #data
0 commit comments