mirror of https://github.com/lukechilds/node.git
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
50 lines
925 B
50 lines
925 B
'use strict';
|
|
|
|
var own = {}.hasOwnProperty;
|
|
|
|
module.exports = stringify;
|
|
|
|
function stringify(value) {
|
|
/* Nothing. */
|
|
if (!value || typeof value !== 'object') {
|
|
return null;
|
|
}
|
|
|
|
/* Node. */
|
|
if (own.call(value, 'position') || own.call(value, 'type')) {
|
|
return location(value.position);
|
|
}
|
|
|
|
/* Location. */
|
|
if (own.call(value, 'start') || own.call(value, 'end')) {
|
|
return location(value);
|
|
}
|
|
|
|
/* Position. */
|
|
if (own.call(value, 'line') || own.call(value, 'column')) {
|
|
return position(value);
|
|
}
|
|
|
|
/* ? */
|
|
return null;
|
|
}
|
|
|
|
function position(pos) {
|
|
if (!pos || typeof pos !== 'object') {
|
|
pos = {};
|
|
}
|
|
|
|
return index(pos.line) + ':' + index(pos.column);
|
|
}
|
|
|
|
function location(loc) {
|
|
if (!loc || typeof loc !== 'object') {
|
|
loc = {};
|
|
}
|
|
|
|
return position(loc.start) + '-' + position(loc.end);
|
|
}
|
|
|
|
function index(value) {
|
|
return value && typeof value === 'number' ? value : 1;
|
|
}
|
|
|