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

'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;
}