wallet-core/node_modules/code-excerpt/index.js
2017-05-28 00:40:43 +02:00

39 lines
842 B
JavaScript

'use strict';
const tabsToSpaces = require('convert-to-spaces');
const generateLineNumbers = (line, around) => {
const lineNumbers = [];
const min = line - around;
const max = line + around;
for (let lineNumber = min; lineNumber <= max; lineNumber++) {
lineNumbers.push(lineNumber);
}
return lineNumbers;
};
module.exports = (source, line, options) => {
if (typeof source !== 'string') {
throw new TypeError('Source code is missing.');
}
if (!line || line < 1) {
throw new TypeError('Line number must start from `1`.');
}
source = tabsToSpaces(source).split('\n');
if (line > source.length) {
return null;
}
options = Object.assign({around: 3}, options);
return generateLineNumbers(line, options.around)
.filter(line => source[line - 1] !== undefined)
.map(line => ({line, value: source[line - 1]}));
};