aboutsummaryrefslogtreecommitdiff
path: root/node_modules/code-excerpt/index.js
blob: f9a2d51b3544ca222f0b8b626b4c8aa4a23ac848 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
'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]}));
};