![Oracle Drags Its Feet in the JavaScript Trademark Dispute](https://cdn.sanity.io/images/cgdhsj6q/production/919c3b22c24f93884c548d60cbb338e819ff2435-1024x1024.webp?w=400&fit=max&auto=format)
Security News
Oracle Drags Its Feet in the JavaScript Trademark Dispute
Oracle seeks to dismiss fraud claims in the JavaScript trademark dispute, delaying the case and avoiding questions about its right to the name.
stacktrace-gps
Advanced tools
The stacktrace-gps npm package is a library for enhancing JavaScript stack traces. It provides functionalities to map minified stack traces back to their original source locations, retrieve function names, and resolve source maps. This is particularly useful for debugging and error tracking in production environments where code is often minified.
Pinpointing Original Source Locations
This feature allows you to pinpoint the original source location of a stack frame. The `pinpoint` method takes a stack frame object and returns a promise that resolves to the original position in the source code.
const StackTraceGPS = require('stacktrace-gps');
const stackFrame = { fileName: 'http://example.com/app.min.js', lineNumber: 1, columnNumber: 32 };
const gps = new StackTraceGPS();
gps.pinpoint(stackFrame).then(function(originalPosition) {
console.log(originalPosition);
}).catch(function(error) {
console.error(error);
});
Getting Function Names
This feature allows you to retrieve the function name from a stack frame. The `findFunctionName` method takes a stack frame object and returns a promise that resolves to the function name.
const StackTraceGPS = require('stacktrace-gps');
const stackFrame = { fileName: 'http://example.com/app.min.js', lineNumber: 1, columnNumber: 32 };
const gps = new StackTraceGPS();
gps.findFunctionName(stackFrame).then(function(functionName) {
console.log(functionName);
}).catch(function(error) {
console.error(error);
});
Resolving Source Maps
This feature allows you to resolve source maps for a given stack frame. The `getMappedLocation` method takes a stack frame object and returns a promise that resolves to the mapped location in the source code.
const StackTraceGPS = require('stacktrace-gps');
const stackFrame = { fileName: 'http://example.com/app.min.js', lineNumber: 1, columnNumber: 32 };
const gps = new StackTraceGPS();
gps.getMappedLocation(stackFrame).then(function(mappedLocation) {
console.log(mappedLocation);
}).catch(function(error) {
console.error(error);
});
The source-map package provides a library for working with source maps. It allows you to parse, generate, and manipulate source maps, which can be used to map minified code back to its original source. Compared to stacktrace-gps, source-map offers more low-level control over source map manipulation but does not provide higher-level functionalities like finding function names.
The stacktrace-js package is a library for generating, parsing, and enhancing JavaScript stack traces. It provides functionalities to capture stack traces, map them to original source locations, and integrate with source maps. Compared to stacktrace-gps, stacktrace-js offers a more comprehensive solution for working with stack traces, including capturing stack traces and integrating with various error tracking services.
This library accepts a code location (in the form of a StackFrame) and returns a new StackFrame with a more accurate location (using source maps) and guessed function names.
This is primarily a browser-centric library, but can be used with node.js. See the Offline Usage section below.
var stackframe = new StackFrame({fileName: 'http://localhost:3000/file.min.js', lineNumber: 1, columnNumber: 3284});
var callback = function myCallback(foundFunctionName) { console.log(foundFunctionName); };
// Such meta. Wow
var errback = function myErrback(error) { console.log(StackTrace.fromError(error)); };
var gps = new StackTraceGPS();
// Pinpoint actual function name and source-mapped location
gps.pinpoint(stackframe).then(callback, errback);
//===> Promise(StackFrame({functionName: 'fun', fileName: 'file.js', lineNumber: 203, columnNumber: 9}), Error)
// Better location/name information from source maps
gps.getMappedLocation(stackframe).then(callback, errback);
//===> Promise(StackFrame({fileName: 'file.js', lineNumber: 203, columnNumber: 9}), Error)
// Get function name from location information
gps.findFunctionName(stackframe).then(callback, errback);
//===> Promise(StackFrame({functionName: 'fun', fileName: 'http://localhost:3000/file.min.js', lineNumber: 1, columnNumber: 3284}), Error)
With a bit of preparation, you can use this library offline in any environment. Any encountered fileNames not in the cache return resolved Promises with the original StackFrame. StackTraceGPS will make a best effort to provide as good of response with what is given and will fallback to the original StackFrame if nothing better could be found.
var stack = ErrorStackParser.parse(new Error('boom'));
console.assert(stack[0] == new StackFrame({fileName: 'http://localhost:9999/file.min.js', lineNumber: 1, columnNumber: 32}));
var sourceCache = {'http://localhost:9999/file.min.js': 'var foo=function(){};function bar(){}var baz=eval("XXX");\n//# sourceMappingURL=file.js.map'};
var sourceMap = '{"version":3,"sources":["./file.js"],"sourceRoot":"http://localhost:4000/","names":["foo","bar","baz","eval"],"mappings":"AAAA,GAAIA,KAAM,YACV,SAASC,QACT,GAAIC,KAAMC,KAAK","file":"file.min.js"}';
var sourceMapConsumerCache = {'http://localhost:4000/file.js.map': new SourceMap.SourceMapConsumer(sourceMap)};
var gps = new StackTraceGPS({offline: true, sourceCache: sourceCache, sourceMapConsumerCache: sourceMapConsumerCache});
gps.pinpoint(stack[0]).then(function(betterStackFrame) {
console.assert(betterStackFrame === new StackFrame({functionName: 'bar', fileName: 'http://localhost:9999/file.js', lineNumber: 2, columnNumber: 9}));
});
npm install stacktrace-gps
bower install stacktrace-gps
https://raw.githubusercontent.com/stacktracejs/stacktrace-gps/master/dist/stacktrace-gps.min.js
new StackTraceGPS(/*optional*/ options)
=> StackTraceGPSoptions: Object
true
to prevent all network requests.pinpoint(stackframe)
=> Promise(StackFrame)Enhance function name and use source maps to produce a better StackFrame.
.findFunctionName(stackframe)
=> Promise(StackFrame)Enhance function name and use source maps to produce a better StackFrame.
.getMappedLocation(stackframe)
=> Promise(StackFrame)Enhance function name and use source maps to produce a better StackFrame.
Functions that rely on Source Maps
(pinpoint
and getMappedLocation
) require recent browsers.
Want to be listed as a Contributor? Start with the Contributing Guide!
FAQs
Turns partial code location into precise code location
The npm package stacktrace-gps receives a total of 562,059 weekly downloads. As such, stacktrace-gps popularity was classified as popular.
We found that stacktrace-gps demonstrated a not healthy version release cadence and project activity because the last version was released a year ago. It has 4 open source maintainers 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.
Security News
Oracle seeks to dismiss fraud claims in the JavaScript trademark dispute, delaying the case and avoiding questions about its right to the name.
Security News
The Linux Foundation is warning open source developers that compliance with global sanctions is mandatory, highlighting legal risks and restrictions on contributions.
Security News
Maven Central now validates Sigstore signatures, making it easier for developers to verify the provenance of Java packages.