63 lines
1.7 KiB
JavaScript
63 lines
1.7 KiB
JavaScript
/*
|
|
* 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;
|