UNPKG

1.84 kBJavaScriptView Raw
1/* Dependencies. */
2const has = require('has')
3const xtend = require('xtend')
4
5/* Expose. */
6module.exports = one
7
8/* Handlers. */
9const handlers = {}
10
11handlers.root = require('./all')
12handlers.heading = require('./types/heading')
13handlers.paragraph = require('./types/paragraph')
14handlers.comment = require('./types/comment')
15
16handlers.text = require('./types/text')
17handlers.link = require('./types/link')
18handlers.list = require('./types/list')
19handlers.listItem = require('./types/listItem')
20handlers.break = require('./types/break')
21handlers.code = require('./types/code')
22handlers.strong = require('./types/strong')
23handlers.emphasis = require('./types/emphasis')
24handlers.delete = require('./types/delete')
25handlers.inlineCode = require('./types/inlinecode')
26handlers.blockquote = require('./types/blockquote')
27handlers.tableCell = require('./types/tableCell')
28handlers.tableRow = require('./types/tableRow')
29handlers.table = require('./types/table')
30handlers.thematicBreak = require('./types/thematic-break')
31handlers.footnote = require('./types/footnote')
32handlers.footnoteDefinition = require('./types/footnoteDefinition')
33handlers.footnoteReference = require('./types/footnoteReference')
34handlers.linkReference = require('./types/linkReference')
35handlers.definition = require('./types/definition')
36handlers.tableHeader = require('./types/tableHeader')
37handlers.image = require('./types/image')
38
39/* Stringify `node`. */
40function one (ctx, node, index, parent, root) {
41 const handlersOverride = has(ctx, 'override') ? ctx.override : {}
42 const h = xtend(handlers, handlersOverride)
43
44 const type = node && node.type
45
46 if (!type) {
47 throw new Error(`Expected node, not \`${node}\``)
48 }
49
50 if (!has(h, type)) {
51 throw new Error(`Cannot compile unknown node \`${type}\``)
52 }
53
54 return h[type](ctx, node, index, parent, root)
55}