func-loc
A simple tool that help you to retrieve the function location from its reference.
How to install
$ npm i func-loc
How to use
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 }
})();
APIs
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()
: will disconnect
the inspector session, cleans the cache and delete temporary created objects from the global object.
Using Source Maps
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"
}
License
MIT © Mohamed IDRISSI