1 |
|
2 | const has = require('has')
|
3 | const xtend = require('xtend')
|
4 |
|
5 |
|
6 | module.exports = one
|
7 |
|
8 |
|
9 | const handlers = {}
|
10 |
|
11 | handlers.root = require('./all')
|
12 | handlers.heading = require('./types/heading')
|
13 | handlers.paragraph = require('./types/paragraph')
|
14 | handlers.comment = require('./types/comment')
|
15 |
|
16 | handlers.text = require('./types/text')
|
17 | handlers.link = require('./types/link')
|
18 | handlers.list = require('./types/list')
|
19 | handlers.listItem = require('./types/listItem')
|
20 | handlers.break = require('./types/break')
|
21 | handlers.code = require('./types/code')
|
22 | handlers.strong = require('./types/strong')
|
23 | handlers.emphasis = require('./types/emphasis')
|
24 | handlers.delete = require('./types/delete')
|
25 | handlers.inlineCode = require('./types/inlinecode')
|
26 | handlers.blockquote = require('./types/blockquote')
|
27 | handlers.tableCell = require('./types/tableCell')
|
28 | handlers.tableRow = require('./types/tableRow')
|
29 | handlers.table = require('./types/table')
|
30 | handlers.thematicBreak = require('./types/thematic-break')
|
31 | handlers.footnote = require('./types/footnote')
|
32 | handlers.footnoteDefinition = require('./types/footnoteDefinition')
|
33 | handlers.footnoteReference = require('./types/footnoteReference')
|
34 | handlers.linkReference = require('./types/linkReference')
|
35 | handlers.definition = require('./types/definition')
|
36 | handlers.tableHeader = require('./types/tableHeader')
|
37 | handlers.image = require('./types/image')
|
38 |
|
39 |
|
40 | function 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 | }
|