Coveralls Build Status Codacy Badge David David node npm npm GitHub issues GitHub top language GitHub contributors npm version vulnerabilities PRs Welcome MIT License
A simple tool that help you to retrieve the function location from its reference.
$ npm i func-loc
const { locate } = require('func-loc'); const fn = () => { console.log('Hello there'); }; (async () => { const result = await locate(fn); console.log(result); // Will result: { source: 'file://__BASE_FOLDER__/func-loc/this-file.js', line: 3, column: 12 } })();
locate(fn: Function): Will retrieve the location of a given function, and will cache it so that the second call will be faster.
The result of the call will be an object that contains these attributes:
source: The source file.line: The line where the function was defined.column: The exact column where the function was declared.
Internally, this function will open an inspector session. So it is always a good idea to call the disconnect method when you are done.
disconnect(): willdisconnectthe inspector session, cleans the cache and delete temporary created objects from the global object.
This library can also locate the original code using source-map:
Lets say that you have a typescript file containing:
// File: `module.ts` export function inner() { const fn3 = () => {}; return fn3; }
Transpiling this file using typescript compiler will generate a source map file like:
{
"origin": {
"path": "/BASE_FOLDER/module.js",
"column": 24,
"line": 5,
"source": "file:///BASE_FOLDER/module.js"
},
"line": 3,
"column": 14,
"path": "/BASE_FOLDER/module.ts",
"source": "file:///BASE_FOLDER/module.ts"
}And a javascript file containing:
"use strict"; exports.__esModule = true; // File: `module.ts` function inner() { var fn3 = function () { }; return fn3; } exports.inner = inner; //# sourceMappingURL=module.js.map
If you execute the following code
const { locate } = require('func-loc'); const { inner } = require('../__tests__/assets/module'); (async () => { const loc = await locate(inner(), { sourceMap: true }); console.log(loc); })();
It will output the line of the inner function f3 of the file module.ts:
{
"origin": {
"path": "/BASE_FOLDER/module.js",
"column": 24,
"line": 5,
"source": "file:///BASE_FOLDER/module.js"
},
"line": 3,
"column": 14,
"path": "/BASE_FOLDER/module.ts",
"source": "file:///BASE_FOLDER/module.ts"
}MIT © Mohamed IDRISSI