get/modules/csl/citation.js

/**
 * @module output/csl
 */

import prepareEngine from './engines'

/**
 * @access protected
 * @method citation
 *
 * @param {Array<CSL>} data
 * @param {Object} [options={}]
 * @param {String} [options.template='apa']
 * @param {String} [options.lang='en-US']
 * @param {String} [options.format='text']
 * @param {String|Array<String>} [options.entry] - list of ids of entries to include in the citation. defaults to all entries
 *
 * @return {String} output
 */
export default function citation (data, options = {}) {
  const {template = 'apa', lang = 'en-US', format = 'text'} = options
  const ids = data.map(({id}) => id)
  const entries = options.entry ? [].concat(options.entry) : ids

  const citeproc = prepareEngine(data, template, lang, format)
  citeproc.updateItems(ids)

  const citation = citeproc.previewCitationCluster({
    citationItems: entries.map(id => ({id})),
    properties: {noteIndex: 0}
  }, [], [], format)

  return citation
}