
Research
2025 Report: Destructive Malware in Open Source Packages
Destructive malware is rising across open source registries, using delays and kill switches to wipe code, break builds, and disrupt CI/CD.
line-column
Advanced tools
Node module to convert efficiently index to/from line-column in a string.
npm install line-column
Returns a LineColumnFinder instance for given string str.
| Key | Description | Default |
|---|---|---|
origin | The origin value of line number and column number | 1 |
This is just a shorthand for lineColumn(str).fromIndex(index).
Find line and column from index in the string.
Parameters:
index - number Index in the string. (0-origin)Returns:
{ line: x, col: y } Found line number and column number.null if the given index is out of range.Find index from line and column in the string.
Parameters:
line - number Line number in the string.column - number Column number in the string.or
{ line: x, col: y } - Object line and column numbers in the string.column can be used instead of col.or
[ line, col ] - Array line and column numbers in the string.Returns:
number Found index in the string.-1 if the given line or column is out of range.var lineColumn = require("line-column");
var testString = [
"ABCDEFG\n", // line:0, index:0
"HIJKLMNOPQRSTU\n", // line:1, index:8
"VWXYZ\n", // line:2, index:23
"日本語の文字\n", // line:3, index:29
"English words" // line:4, index:36
].join(""); // length:49
lineColumn(testString).fromIndex(3) // { line: 1, col: 4 }
lineColumn(testString).fromIndex(33) // { line: 4, col: 5 }
lineColumn(testString).toIndex(1, 4) // 3
lineColumn(testString).toIndex(4, 5) // 33
// Shorthand of .fromIndex (compatible with find-line-column)
lineColumn(testString, 33) // { line:4, col: 5 }
// Object or Array is also acceptable
lineColumn(testString).toIndex({ line: 4, col: 5 }) // 33
lineColumn(testString).toIndex({ line: 4, column: 5 }) // 33
lineColumn(testString).toIndex([4, 5]) // 33
// You can cache it for the same string. It is so efficient. (See benchmark)
var finder = lineColumn(testString);
finder.fromIndex(33) // { line: 4, column: 5 }
finder.toIndex(4, 5) // 33
// For 0-origin line and column numbers
var oneOrigin = lineColumn(testString, { origin: 0 });
oneOrigin.fromIndex(33) // { line: 3, column: 4 }
oneOrigin.toIndex(3, 4) // 33
npm test
The popular package find-line-column provides the same "index to line-column" feature.
Here is some benchmarking on line-column vs find-line-column. You can run this benchmark by npm run benchmark. See benchmark/ for the source code.
long text + line-column (not cached) x 72,989 ops/sec ±0.83% (89 runs sampled)
long text + line-column (cached) x 13,074,242 ops/sec ±0.32% (89 runs sampled)
long text + find-line-column x 33,887 ops/sec ±0.54% (84 runs sampled)
short text + line-column (not cached) x 1,636,766 ops/sec ±0.77% (82 runs sampled)
short text + line-column (cached) x 21,699,686 ops/sec ±1.04% (82 runs sampled)
short text + find-line-column x 382,145 ops/sec ±1.04% (85 runs sampled)
As you might have noticed, even not cached version of line-column is 2x - 4x faster than find-line-column, and cached version of line-column is remarkable 50x - 380x faster.
git checkout -b my-new-featuregit commit -am 'Add some feature'git push origin my-new-featureMIT (See LICENSE)
The line-column-path package provides similar functionality by allowing conversion between line-column pairs and character offsets. It also supports file paths, which can be useful for applications dealing with multiple files. Compared to line-column, it offers additional features for handling file paths.
FAQs
Convert efficiently index to/from line-column in a string
The npm package line-column receives a total of 295,572 weekly downloads. As such, line-column popularity was classified as popular.
We found that line-column demonstrated a not healthy version release cadence and project activity because the last version was released a year ago. It has 1 open source maintainer collaborating on the project.
Did you know?

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Research
Destructive malware is rising across open source registries, using delays and kill switches to wipe code, break builds, and disrupt CI/CD.

Security News
Socket CTO Ahmad Nassri shares practical AI coding techniques, tools, and team workflows, plus what still feels noisy and why shipping remains human-led.

Research
/Security News
A five-month operation turned 27 npm packages into durable hosting for browser-run lures that mimic document-sharing portals and Microsoft sign-in, targeting 25 organizations across manufacturing, industrial automation, plastics, and healthcare for credential theft.