35 lines
885 B
JavaScript
35 lines
885 B
JavaScript
|
/**
|
||
|
* @typedef {import('hast').Nodes} Nodes
|
||
|
*/
|
||
|
|
||
|
// HTML whitespace expression.
|
||
|
// See <https://infra.spec.whatwg.org/#ascii-whitespace>.
|
||
|
const re = /[ \t\n\f\r]/g
|
||
|
|
||
|
/**
|
||
|
* Check if the given value is *inter-element whitespace*.
|
||
|
*
|
||
|
* @param {Nodes | string} thing
|
||
|
* Thing to check (`Node` or `string`).
|
||
|
* @returns {boolean}
|
||
|
* Whether the `value` is inter-element whitespace (`boolean`): consisting of
|
||
|
* zero or more of space, tab (`\t`), line feed (`\n`), carriage return
|
||
|
* (`\r`), or form feed (`\f`); if a node is passed it must be a `Text` node,
|
||
|
* whose `value` field is checked.
|
||
|
*/
|
||
|
export function whitespace(thing) {
|
||
|
return typeof thing === 'object'
|
||
|
? thing.type === 'text'
|
||
|
? empty(thing.value)
|
||
|
: false
|
||
|
: empty(thing)
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* @param {string} value
|
||
|
* @returns {boolean}
|
||
|
*/
|
||
|
function empty(value) {
|
||
|
return value.replace(re, '') === ''
|
||
|
}
|