/**
* @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
*/