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.
 
 
 

62 lines
1.7 KiB

/*
* MIT License http://opensource.org/licenses/MIT
* Author: Ben Holloway @bholloway
*/
'use strict';
/**
* Given a sourcemap position create a new maybeObject with only line and column properties.
*
* @param {*|{line: number, column: number}} maybeObj Possible location hash
* @returns {{line: number, column: number}} Location hash with possible NaN values
*/
function sanitise(maybeObj) {
var obj = !!maybeObj && typeof maybeObj === 'object' && maybeObj || {};
return {
line: isNaN(obj.line) ? NaN : obj.line,
column: isNaN(obj.column) ? NaN : obj.column
};
}
exports.sanitise = sanitise;
/**
* Infer a line and position delta based on the linebreaks in the given string.
*
* @param candidate {string} A string with possible linebreaks
* @returns {{line: number, column: number}} A position object where line and column are deltas
*/
function strToOffset(candidate) {
var split = candidate.split(/\r\n|\n/g);
var last = split[split.length - 1];
return {
line: split.length - 1,
column: last.length
};
}
exports.strToOffset = strToOffset;
/**
* Add together a list of position elements.
*
* Lines are added. If the new line is zero the column is added otherwise it is overwritten.
*
* @param {{line: number, column: number}[]} list One or more sourcemap position elements to add
* @returns {{line: number, column: number}} Resultant position element
*/
function add(list) {
return list
.slice(1)
.reduce(
function (accumulator, element) {
return {
line: accumulator.line + element.line,
column: element.line > 0 ? element.column : accumulator.column + element.column,
};
},
list[0]
);
}
exports.add = add;