| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495 |
- /**
- * @typedef {import('unist').Node} Node
- * @typedef {import('unist').Point} Point
- * @typedef {import('unist').Position} Position
- */
- /**
- * @typedef NodeLike
- * @property {string} type
- * @property {PositionLike | null | undefined} [position]
- *
- * @typedef PositionLike
- * @property {PointLike | null | undefined} [start]
- * @property {PointLike | null | undefined} [end]
- *
- * @typedef PointLike
- * @property {number | null | undefined} [line]
- * @property {number | null | undefined} [column]
- * @property {number | null | undefined} [offset]
- */
- /**
- * Get the ending point of `node`.
- *
- * @param node
- * Node.
- * @returns
- * Point.
- */
- export const pointEnd = point('end')
- /**
- * Get the starting point of `node`.
- *
- * @param node
- * Node.
- * @returns
- * Point.
- */
- export const pointStart = point('start')
- /**
- * Get the positional info of `node`.
- *
- * @param {'end' | 'start'} type
- * Side.
- * @returns
- * Getter.
- */
- function point(type) {
- return point
- /**
- * Get the point info of `node` at a bound side.
- *
- * @param {Node | NodeLike | null | undefined} [node]
- * @returns {Point | undefined}
- */
- function point(node) {
- const point = (node && node.position && node.position[type]) || {}
- if (
- typeof point.line === 'number' &&
- point.line > 0 &&
- typeof point.column === 'number' &&
- point.column > 0
- ) {
- return {
- line: point.line,
- column: point.column,
- offset:
- typeof point.offset === 'number' && point.offset > -1
- ? point.offset
- : undefined
- }
- }
- }
- }
- /**
- * Get the positional info of `node`.
- *
- * @param {Node | NodeLike | null | undefined} [node]
- * Node.
- * @returns {Position | undefined}
- * Position.
- */
- export function position(node) {
- const start = pointStart(node)
- const end = pointEnd(node)
- if (start && end) {
- return {start, end}
- }
- }
|