/**
* @namespace plugins
* @memberof Cite
*/
import * as input from '../parse/interface/'
import * as output from '../get/registrar'
import * as dict from '../get/dict'
import * as config from './config'
const registers = {
input,
output,
dict,
config
}
const indices = {}
/**
* @access public
* @method add
* @memberof Cite.plugins
* @param {Cite.plugins~pluginRef} ref - plugin reference/name
* @param {Cite.plugins~plugins} [plugins={}]
*/
export const add = (ref, plugins = {}) => {
let mainIndex = indices[ref] = {}
if ('config' in plugins) {
registers.config.add(ref, plugins.config)
delete plugins.config
}
for (let type in plugins) {
let typeIndex = mainIndex[type] = {}
let typePlugins = plugins[type]
for (let name in typePlugins) {
let typePlugin = typePlugins[name]
typeIndex[name] = true
registers[type].add(name, typePlugin)
}
}
}
/**
* @access public
* @method remove
* @memberof Cite.plugins
* @param {Cite.plugins~pluginRef} ref - plugin reference/name
*/
export const remove = (ref) => {
let mainIndex = indices[ref]
for (let type in mainIndex) {
let typeIndex = mainIndex[type]
for (let name in typeIndex) {
registers[type].remove(name)
}
}
delete indices[ref]
}
/**
* @access public
* @method has
* @memberof Cite.plugins
* @param {Cite.plugins~pluginRef} ref - plugin reference/name
* @returns {Boolean} plugin is registered
*/
export const has = (ref) => ref in indices
/**
* @access public
* @method list
* @memberof Cite.plugins
* @returns {Array<Cite.plugins~pluginRef>} list of registered plugins
*/
export const list = () => Object.keys(indices)
export {input, output, dict, config}