https://github.com/midrissi/func-loc
A simple tool that helps you to retrieve the function location from its reference.
https://github.com/midrissi/func-loc
function inspector javascript location nodejs reference
Last synced: 6 months ago
JSON representation
A simple tool that helps you to retrieve the function location from its reference.
- Host: GitHub
- URL: https://github.com/midrissi/func-loc
- Owner: midrissi
- License: mit
- Created: 2019-03-12T23:02:06.000Z (almost 7 years ago)
- Default Branch: master
- Last Pushed: 2024-12-15T13:34:42.000Z (about 1 year ago)
- Last Synced: 2025-05-09T17:03:28.529Z (10 months ago)
- Topics: function, inspector, javascript, location, nodejs, reference
- Language: TypeScript
- Size: 2.18 MB
- Stars: 117
- Watchers: 4
- Forks: 3
- Open Issues: 11
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# func-loc
[![Coveralls][coverage-badge]][coverage]
[![Build Status][travis-badge]][travis]
[![Codacy Badge][codacy-badge]][codacy]








[![npm version][npm-badge]][npm]
[![vulnerabilities][vulnerabilities-badge]][vulnerabilities]
[![PRs Welcome][prs-badge]][prs]
[![MIT License][license-badge]][license]
A simple tool that help you to retrieve the function location from its reference.
## How to install
```bash
$ npm i func-loc
```
## How to use
```javascript
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](https://nodejs.org/api/inspector.html) session. So it is always a good idea to call the `disconnect` method when you are done.
2. `disconnect()` : will [`disconnect`](https://nodejs.org/api/inspector.html#inspector_session_disconnect) the [inspector](https://nodejs.org/api/inspector.html) [session](https://nodejs.org/api/inspector.html#inspector_class_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](https://developer.mozilla.org/en-US/docs/Tools/Debugger/How_to/Use_a_source_map):
Lets say that you have a typescript file containing:
```typescript
// File: `module.ts`
export function inner() {
const fn3 = () => {};
return fn3;
}
```
Transpiling this file using [typescript compiler](https://www.typescriptlang.org/) will generate a source map file like:
```json
{
"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:
```javascript
"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
```javascript
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`:
```json
{
"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
[coverage-badge]: https://coveralls.io/repos/github/midrissi/func-loc/badge.svg?branch=master&service=github
[coverage]: https://coveralls.io/github/midrissi/func-loc?branch=master
[travis-badge]: https://travis-ci.org/midrissi/func-loc.svg?branch=master
[travis]: https://travis-ci.org/midrissi/func-loc
[codacy-badge]: https://api.codacy.com/project/badge/Grade/fd744ba304a244629886dfb19c85af40
[codacy]: https://www.codacy.com/app/midrissi/func-loc?utm_source=github.com&utm_medium=referral&utm_content=midrissi/func-loc&utm_campaign=Badge_Grade
[prs-badge]: https://img.shields.io/badge/PRs-welcome-brightgreen.svg
[prs]: http://makeapullrequest.com
[npm-badge]: https://badge.fury.io/js/func-loc.svg
[npm]: https://www.npmjs.com/package/func-loc
[vulnerabilities-badge]: https://snyk.io/test/github/midrissi/func-loc/badge.svg?targetFile=package.json
[vulnerabilities]: https://snyk.io/test/github/midrissi/func-loc?targetFile=package.json
[license-badge]: https://img.shields.io/badge/license-MIT-blue.svg
[license]: https://github.com/midrissi/func-loc/blob/master/LICENSE