/func-loc

A simple tool that helps you to retrieve the function location from its reference.

Primary LanguageTypeScriptMIT LicenseMIT

func-loc

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.

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

  1. 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.

  1. 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