Source: core/src/plugins/input/types.jsdoc

/**
 * @typedef module:@citation-js/core.plugins.input~format
 * @type String
 */

/**
 * @typedef module:@citation-js/core.plugins.input~parsers
 * @type Object
 *
 * @property {module:@citation-js/core.plugins.input~dataParser} parse
 * @property {module:@citation-js/core.plugins.input~asyncDataParser} parseAsync
 * @property {module:@citation-js/core.plugins.input~typeParser} parseType
 */

/**
 * @callback module:@citation-js/core.plugins.input~dataParser
 * @param {InputData} input
 * @return parsed data
 */

/**
 * @async
 * @callback module:@citation-js/core.plugins.input~asyncDataParser
 * @param {InputData} input
 * @return parsed data
 */

/**
 * @typedef module:@citation-js/core.plugins.input~typeParser
 * @type Object
 *
 * @property {module:@citation-js/core.plugins.input~dataType} dataType
 * @property {module:@citation-js/core.plugins.input~predicate|RegExp} predicate
 * @property {module:@citation-js/core.plugins.input~tokenList|RegExp} tokenList
 * @property {module:@citation-js/core.plugins.input~propertyConstraint|Array<module:@citation-js/core.plugins.input~propertyConstraint>} propertyConstraint
 * @property {module:@citation-js/core.plugins.input~elementConstraint|Array<module:@citation-js/core.plugins.input~elementConstraint>} elementConstraint
 * @property {module:@citation-js/core.plugins.input~format} extends
 */

/**
 * @typedef module:@citation-js/core.plugins.input~dataType
 * @type String
 */

/**
 * @callback module:@citation-js/core.plugins.input~predicate
 * @param {InputData} input
 * @return {Boolean} pass
 */

/**
 * @typedef module:@citation-js/core.plugins.input~tokenList
 * @type Object
 * @property {RegExp} token - token pattern
 * @property {RegExp} [split=/\s+/] - token delimiter
 * @property {Boolean} [every=true] - match every token, or only some
 * @property {Boolean} [trim=true] - trim input whitespace before testing
 */

/**
 * @typedef module:@citation-js/core.plugins.input~propertyConstraint
 * @type Object
 * @property {String|Array<String>} [props=[]]
 * @property {String} [match='every']
 * @property {module:@citation-js/core.plugins.input~valuePredicate} [value]
 */

/**
 * @callback module:@citation-js/core.plugins.input~valuePredicate
 * @param value
 * @return {Boolean} pass
 */

/**
 * @typedef module:@citation-js/core.plugins.input~elementConstraint
 * @type module:@citation-js/core.plugins.input~format
 */