'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() }