Files
30-seconds-of-code/node_modules/mdast-util-definitions/index.js
2019-08-20 15:52:05 +02:00

52 lines
1.1 KiB
JavaScript

'use strict'
var visit = require('unist-util-visit')
module.exports = getDefinitionFactory
var own = {}.hasOwnProperty
// Get a definition in `node` by `identifier`.
function getDefinitionFactory(node, options) {
return getterFactory(gather(node, options))
}
// Gather all definitions in `node`
function gather(node, options) {
var cache = {}
if (!node || !node.type) {
throw new Error('mdast-util-definitions expected node')
}
visit(node, 'definition', options && options.commonmark ? commonmark : normal)
return cache
function commonmark(definition) {
var id = normalise(definition.identifier)
if (!own.call(cache, id)) {
cache[id] = definition
}
}
function normal(definition) {
cache[normalise(definition.identifier)] = definition
}
}
// Factory to get a node from the given definition-cache.
function getterFactory(cache) {
return getter
// Get a node from the bound definition-cache.
function getter(identifier) {
var id = identifier && normalise(identifier)
return id && own.call(cache, id) ? cache[id] : null
}
}
function normalise(identifier) {
return identifier.toUpperCase()
}