TP-5555 | symbolicator enahnce ment
This commit is contained in:
@@ -1,2 +1,4 @@
|
||||
node_modules
|
||||
yarn
|
||||
.idea
|
||||
source-map-cache
|
||||
|
||||
@@ -38,53 +38,53 @@ class SymbolicationContext {
|
||||
}
|
||||
symbolicate(stackTrace) {
|
||||
return stackTrace.replace(
|
||||
/(?:([^@: \n(]+)(@|:))?(?:(?:([^@: \n(]+):)?(\d+):(\d+)|\[native code\])/g,
|
||||
(match, func, delimiter, fileName, line, column) => {
|
||||
if (delimiter === ":" && func && !fileName) {
|
||||
fileName = func;
|
||||
func = null;
|
||||
/(?:([^@: \n(]+)(@|:))?(?:(?:([^@: \n(]+):)?(\d+):(\d+)|\[native code\])/g,
|
||||
(match, func, delimiter, fileName, line, column) => {
|
||||
if (delimiter === ":" && func && !fileName) {
|
||||
fileName = func;
|
||||
func = null;
|
||||
}
|
||||
const original = this.getOriginalPositionFor(
|
||||
line,
|
||||
column,
|
||||
this.parseFileName(fileName || "")
|
||||
);
|
||||
return (
|
||||
(original.source ?? "null") +
|
||||
":" +
|
||||
(original.line ?? "null") +
|
||||
":" +
|
||||
(original.name ?? "null")
|
||||
);
|
||||
}
|
||||
const original = this.getOriginalPositionFor(
|
||||
line,
|
||||
column,
|
||||
this.parseFileName(fileName || "")
|
||||
);
|
||||
return (
|
||||
(original.source ?? "null") +
|
||||
":" +
|
||||
(original.line ?? "null") +
|
||||
":" +
|
||||
(original.name ?? "null")
|
||||
);
|
||||
}
|
||||
);
|
||||
}
|
||||
symbolicateProfilerMap(mapFile) {
|
||||
return fs
|
||||
.readFileSync(mapFile, "utf8")
|
||||
.split("\n")
|
||||
.slice(0, -1)
|
||||
.map((line) => {
|
||||
const line_list = line.split(" ");
|
||||
const trampoline = line_list[0];
|
||||
const js_name = line_list[1];
|
||||
const offset = parseInt(line_list[2], 10);
|
||||
if (!offset) {
|
||||
return trampoline + " " + trampoline;
|
||||
}
|
||||
const original = this.getOriginalPositionFor(
|
||||
this.options.inputLineStart,
|
||||
offset
|
||||
);
|
||||
return (
|
||||
trampoline +
|
||||
" " +
|
||||
(original.name || js_name) +
|
||||
"::" +
|
||||
[original.source, original.line, original.column].join(":")
|
||||
);
|
||||
})
|
||||
.join("\n");
|
||||
.readFileSync(mapFile, "utf8")
|
||||
.split("\n")
|
||||
.slice(0, -1)
|
||||
.map((line) => {
|
||||
const line_list = line.split(" ");
|
||||
const trampoline = line_list[0];
|
||||
const js_name = line_list[1];
|
||||
const offset = parseInt(line_list[2], 10);
|
||||
if (!offset) {
|
||||
return trampoline + " " + trampoline;
|
||||
}
|
||||
const original = this.getOriginalPositionFor(
|
||||
this.options.inputLineStart,
|
||||
offset
|
||||
);
|
||||
return (
|
||||
trampoline +
|
||||
" " +
|
||||
(original.name || js_name) +
|
||||
"::" +
|
||||
[original.source, original.line, original.column].join(":")
|
||||
);
|
||||
})
|
||||
.join("\n");
|
||||
}
|
||||
symbolicateAttribution(obj) {
|
||||
const loc = obj.location;
|
||||
@@ -93,16 +93,16 @@ class SymbolicationContext {
|
||||
const file = loc.filename ? this.parseFileName(loc.filename) : null;
|
||||
let original = this.getOriginalPositionFor(line, column, file);
|
||||
const isBytecodeRange =
|
||||
loc.bytecodeSize != null &&
|
||||
loc.virtualOffset != null &&
|
||||
loc.column == null;
|
||||
loc.bytecodeSize != null &&
|
||||
loc.virtualOffset != null &&
|
||||
loc.column == null;
|
||||
const virtualOffset = Number(loc.virtualOffset);
|
||||
const bytecodeSize = Number(loc.bytecodeSize);
|
||||
while (
|
||||
isBytecodeRange &&
|
||||
original.source == null &&
|
||||
++column < virtualOffset + bytecodeSize
|
||||
) {
|
||||
isBytecodeRange &&
|
||||
original.source == null &&
|
||||
++column < virtualOffset + bytecodeSize
|
||||
) {
|
||||
original = this.getOriginalPositionFor(line, column, file);
|
||||
}
|
||||
obj.location = {
|
||||
@@ -147,15 +147,15 @@ class SymbolicationContext {
|
||||
frameName = entry.name;
|
||||
if (funcLine != null && funcColumn != null) {
|
||||
const funcOriginal = this.getOriginalPositionFor(
|
||||
funcLine,
|
||||
funcColumn
|
||||
funcLine,
|
||||
funcColumn
|
||||
);
|
||||
if (funcOriginal.name != null) {
|
||||
frameName = funcOriginal.name;
|
||||
}
|
||||
} else {
|
||||
(stderr || stdout).write(
|
||||
"Warning: no function prolog line/column info; name may be wrong\n"
|
||||
"Warning: no function prolog line/column info; name may be wrong\n"
|
||||
);
|
||||
}
|
||||
}
|
||||
@@ -175,9 +175,9 @@ class SymbolicationContext {
|
||||
}
|
||||
getOriginalPositionFor(lineNumber, columnNumber, moduleIds) {
|
||||
const position = this.getOriginalPositionDetailsFor(
|
||||
lineNumber,
|
||||
columnNumber,
|
||||
moduleIds,
|
||||
lineNumber,
|
||||
columnNumber,
|
||||
moduleIds,
|
||||
);
|
||||
return {
|
||||
start: position.start,
|
||||
@@ -192,9 +192,9 @@ class SymbolicationContext {
|
||||
}
|
||||
symbolicateHeapSnapshot(snapshotContents) {
|
||||
const snapshotData =
|
||||
typeof snapshotContents === "string"
|
||||
? JSON.parse(snapshotContents)
|
||||
: snapshotContents;
|
||||
typeof snapshotContents === "string"
|
||||
? JSON.parse(snapshotContents)
|
||||
: snapshotContents;
|
||||
const processor = new ChromeHeapSnapshotProcessor(snapshotData);
|
||||
for (const frame of processor.traceFunctionInfos()) {
|
||||
const moduleIds = this.parseFileName(frame.getString("script_name"));
|
||||
@@ -209,24 +209,24 @@ class SymbolicationContext {
|
||||
source: originalSource,
|
||||
functionName: originalFunctionName,
|
||||
} = this.getOriginalPositionDetailsFor(
|
||||
frame.getNumber("line") - 1 + this.options.inputLineStart,
|
||||
frame.getNumber("column") - 1 + this.options.inputColumnStart,
|
||||
moduleIds
|
||||
frame.getNumber("line") - 1 + this.options.inputLineStart,
|
||||
frame.getNumber("column") - 1 + this.options.inputColumnStart,
|
||||
moduleIds
|
||||
);
|
||||
if (originalSource != null) {
|
||||
frame.setString("script_name", originalSource);
|
||||
if (originalLine != null) {
|
||||
frame.setNumber(
|
||||
"line",
|
||||
originalLine - this.options.outputLineStart + 1
|
||||
"line",
|
||||
originalLine - this.options.outputLineStart + 1
|
||||
);
|
||||
} else {
|
||||
frame.setNumber("line", 0);
|
||||
}
|
||||
if (originalColumn != null) {
|
||||
frame.setNumber(
|
||||
"column",
|
||||
originalColumn - this.options.outputColumnStart + 1
|
||||
"column",
|
||||
originalColumn - this.options.outputColumnStart + 1
|
||||
);
|
||||
} else {
|
||||
frame.setNumber("column", 0);
|
||||
@@ -245,9 +245,9 @@ class SymbolicationContext {
|
||||
const generatedLine = line + this.options.inputLineStart;
|
||||
const generatedColumn = column + this.options.inputColumnStart;
|
||||
const originalPosition = this.getOriginalPositionDetailsFor(
|
||||
generatedLine,
|
||||
generatedColumn,
|
||||
this.parseFileName(SourceURL || "")
|
||||
generatedLine,
|
||||
generatedColumn,
|
||||
this.parseFileName(SourceURL || "")
|
||||
);
|
||||
symbolicatedTrace.push(originalPosition);
|
||||
}
|
||||
@@ -266,9 +266,9 @@ class SingleMapSymbolicationContext extends SymbolicationContext {
|
||||
super(options);
|
||||
this._SourceMapConsumer = SourceMapConsumer;
|
||||
const sourceMapJson =
|
||||
typeof sourceMapContent === "string"
|
||||
? JSON.parse(sourceMapContent.replace(/^\)\]\}'/, ""))
|
||||
: sourceMapContent;
|
||||
typeof sourceMapContent === "string"
|
||||
? JSON.parse(sourceMapContent.replace(/^\)\]\}'/, ""))
|
||||
: sourceMapContent;
|
||||
const segments = {
|
||||
0: this._initSegment(sourceMapJson),
|
||||
};
|
||||
@@ -279,8 +279,8 @@ class SingleMapSymbolicationContext extends SymbolicationContext {
|
||||
}
|
||||
}
|
||||
this._legacyFormat =
|
||||
sourceMapJson.x_facebook_segments != null ||
|
||||
sourceMapJson.x_facebook_offsets != null;
|
||||
sourceMapJson.x_facebook_segments != null ||
|
||||
sourceMapJson.x_facebook_offsets != null;
|
||||
this._segments = segments;
|
||||
}
|
||||
_initSegment(map) {
|
||||
@@ -325,14 +325,14 @@ class SingleMapSymbolicationContext extends SymbolicationContext {
|
||||
ByteCodeOffset: localOffset,
|
||||
} = stackItem;
|
||||
const cjsModuleOffsetOrSegmentID = nullthrows(
|
||||
CJSModuleOffset ?? SegmentID,
|
||||
"Either CJSModuleOffset or SegmentID must be specified in the Hermes stack frame"
|
||||
CJSModuleOffset ?? SegmentID,
|
||||
"Either CJSModuleOffset or SegmentID must be specified in the Hermes stack frame"
|
||||
);
|
||||
const moduleInformation = this.parseFileName(SourceURL);
|
||||
const generatedLine =
|
||||
cjsModuleOffsetOrSegmentID + this.options.inputLineStart;
|
||||
cjsModuleOffsetOrSegmentID + this.options.inputLineStart;
|
||||
const segment =
|
||||
this._segments[moduleInformation.segmentId.toString()];
|
||||
this._segments[moduleInformation.segmentId.toString()];
|
||||
const hermesOffsets = segment?.hermesOffsets;
|
||||
if (!hermesOffsets) {
|
||||
symbolicatedTrace.push({
|
||||
@@ -345,15 +345,15 @@ class SingleMapSymbolicationContext extends SymbolicationContext {
|
||||
});
|
||||
} else {
|
||||
const segmentOffsets =
|
||||
hermesOffsets[Number(cjsModuleOffsetOrSegmentID)];
|
||||
hermesOffsets[Number(cjsModuleOffsetOrSegmentID)];
|
||||
const generatedColumn =
|
||||
segmentOffsets[FunctionID] +
|
||||
localOffset +
|
||||
this.options.inputColumnStart;
|
||||
segmentOffsets[FunctionID] +
|
||||
localOffset +
|
||||
this.options.inputColumnStart;
|
||||
const originalPosition = this.getOriginalPositionDetailsFor(
|
||||
generatedLine,
|
||||
generatedColumn,
|
||||
moduleInformation
|
||||
generatedLine,
|
||||
generatedColumn,
|
||||
moduleInformation
|
||||
);
|
||||
symbolicatedTrace.push(originalPosition);
|
||||
}
|
||||
@@ -371,9 +371,9 @@ class SingleMapSymbolicationContext extends SymbolicationContext {
|
||||
const generatedLine = line + this.options.inputLineStart;
|
||||
const generatedColumn = column + this.options.inputColumnStart;
|
||||
const originalPosition = this.getOriginalPositionDetailsFor(
|
||||
generatedLine,
|
||||
generatedColumn,
|
||||
this.parseFileName(SourceURL || "")
|
||||
generatedLine,
|
||||
generatedColumn,
|
||||
this.parseFileName(SourceURL || "")
|
||||
);
|
||||
symbolicatedTrace.push(originalPosition);
|
||||
}
|
||||
@@ -382,13 +382,13 @@ class SingleMapSymbolicationContext extends SymbolicationContext {
|
||||
}
|
||||
getOriginalPositionDetailsFor(lineNumber, columnNumber, moduleIds) {
|
||||
lineNumber =
|
||||
lineNumber != null
|
||||
? lineNumber - this.options.inputLineStart + 1
|
||||
: lineNumber;
|
||||
lineNumber != null
|
||||
? lineNumber - this.options.inputLineStart + 1
|
||||
: lineNumber;
|
||||
columnNumber =
|
||||
columnNumber != null
|
||||
? columnNumber - this.options.inputColumnStart + 0
|
||||
: columnNumber;
|
||||
columnNumber != null
|
||||
? columnNumber - this.options.inputColumnStart + 0
|
||||
: columnNumber;
|
||||
if (!moduleIds) {
|
||||
moduleIds = UNKNOWN_MODULE_IDS;
|
||||
}
|
||||
@@ -399,7 +399,7 @@ class SingleMapSymbolicationContext extends SymbolicationContext {
|
||||
const { moduleOffsets } = metadata;
|
||||
if (!moduleOffsets) {
|
||||
throw new Error(
|
||||
"Module ID given for a source map that does not have " +
|
||||
"Module ID given for a source map that does not have " +
|
||||
"an x_facebook_offsets field"
|
||||
);
|
||||
}
|
||||
@@ -412,7 +412,13 @@ class SingleMapSymbolicationContext extends SymbolicationContext {
|
||||
line: Number(lineNumber) + moduleLineOffset,
|
||||
column: Number(columnNumber),
|
||||
});
|
||||
const sourceContent = metadata.consumer.sourceContentFor(original.source);
|
||||
let sourceContent = ""
|
||||
try {
|
||||
sourceContent = metadata.consumer.sourceContentFor(original.source);
|
||||
}
|
||||
catch (e) {
|
||||
//console.log("error", original);
|
||||
}
|
||||
const lines = sourceContent.split('\n');
|
||||
|
||||
|
||||
@@ -426,7 +432,7 @@ class SingleMapSymbolicationContext extends SymbolicationContext {
|
||||
// Extract the 10 lines before, original line, and 10 lines after
|
||||
const surroundingLines = lines.slice(startLine, endLine + 1);
|
||||
|
||||
// console.log("error happened in", lines[originalLine])
|
||||
// console.log("error happened in", lines[originalLine])
|
||||
|
||||
// if (metadata.sourceFunctionsConsumer) {
|
||||
// original.functionName =
|
||||
@@ -435,7 +441,7 @@ class SingleMapSymbolicationContext extends SymbolicationContext {
|
||||
// original.functionName = null;
|
||||
// }
|
||||
//console.log(surroundingLines)
|
||||
original.isIgnored = metadata.googleIgnoreListConsumer.isIgnored(original);
|
||||
//original.isIgnored = metadata.googleIgnoreListConsumer.isIgnored(original);
|
||||
return {
|
||||
...original,
|
||||
original_line: original.line - 1 + this.options.outputLineStart,
|
||||
@@ -469,15 +475,15 @@ class DirectorySymbolicationContext extends SymbolicationContext {
|
||||
}
|
||||
_loadMap(mapFilename) {
|
||||
invariant(
|
||||
fs.existsSync(mapFilename),
|
||||
`Could not read source map from '${mapFilename}'`
|
||||
fs.existsSync(mapFilename),
|
||||
`Could not read source map from '${mapFilename}'`
|
||||
);
|
||||
let fileMap = this._fileMaps.get(mapFilename);
|
||||
if (fileMap == null) {
|
||||
fileMap = new SingleMapSymbolicationContext(
|
||||
this._SourceMapConsumer,
|
||||
fs.readFileSync(mapFilename, "utf8"),
|
||||
this.options
|
||||
this._SourceMapConsumer,
|
||||
fs.readFileSync(mapFilename, "utf8"),
|
||||
this.options
|
||||
);
|
||||
this._fileMaps.set(mapFilename, fileMap);
|
||||
}
|
||||
@@ -485,30 +491,30 @@ class DirectorySymbolicationContext extends SymbolicationContext {
|
||||
}
|
||||
getOriginalPositionDetailsFor(lineNumber, columnNumber, filename) {
|
||||
invariant(
|
||||
filename != null,
|
||||
"filename is required for DirectorySymbolicationContext"
|
||||
filename != null,
|
||||
"filename is required for DirectorySymbolicationContext"
|
||||
);
|
||||
let mapFilename;
|
||||
const relativeFilename = path.relative(
|
||||
this._rootDir,
|
||||
path.resolve(this._rootDir, filename)
|
||||
this._rootDir,
|
||||
path.resolve(this._rootDir, filename)
|
||||
);
|
||||
if (!relativeFilename.startsWith("..")) {
|
||||
mapFilename = path.join(this._rootDir, relativeFilename + ".map");
|
||||
}
|
||||
if (mapFilename == null || !fs.existsSync(mapFilename)) {
|
||||
lineNumber =
|
||||
lineNumber != null
|
||||
? lineNumber -
|
||||
this.options.inputLineStart +
|
||||
this.options.outputLineStart
|
||||
: lineNumber;
|
||||
lineNumber != null
|
||||
? lineNumber -
|
||||
this.options.inputLineStart +
|
||||
this.options.outputLineStart
|
||||
: lineNumber;
|
||||
columnNumber =
|
||||
columnNumber != null
|
||||
? columnNumber -
|
||||
this.options.inputColumnStart +
|
||||
this.options.outputColumnStart
|
||||
: columnNumber;
|
||||
columnNumber != null
|
||||
? columnNumber -
|
||||
this.options.inputColumnStart +
|
||||
this.options.outputColumnStart
|
||||
: columnNumber;
|
||||
return {
|
||||
line: lineNumber,
|
||||
column: columnNumber,
|
||||
@@ -519,8 +525,8 @@ class DirectorySymbolicationContext extends SymbolicationContext {
|
||||
};
|
||||
}
|
||||
return this._loadMap(mapFilename).getOriginalPositionDetailsFor(
|
||||
lineNumber,
|
||||
columnNumber
|
||||
lineNumber,
|
||||
columnNumber
|
||||
);
|
||||
}
|
||||
parseFileName(str) {
|
||||
@@ -546,15 +552,15 @@ function parseSingleMapFileName(str) {
|
||||
}
|
||||
function createContext(SourceMapConsumer, sourceMapContent, options = {}) {
|
||||
return new SingleMapSymbolicationContext(
|
||||
SourceMapConsumer,
|
||||
sourceMapContent,
|
||||
options
|
||||
SourceMapConsumer,
|
||||
sourceMapContent,
|
||||
options
|
||||
);
|
||||
}
|
||||
function unstable_createDirectoryContext(
|
||||
SourceMapConsumer,
|
||||
rootDir,
|
||||
options = {}
|
||||
SourceMapConsumer,
|
||||
rootDir,
|
||||
options = {}
|
||||
) {
|
||||
return new DirectorySymbolicationContext(SourceMapConsumer, rootDir, options);
|
||||
}
|
||||
|
||||
@@ -9,25 +9,24 @@ const read = (fileName) => fs.readFileSync(fileName, "utf8");
|
||||
|
||||
try {
|
||||
|
||||
const frames = JSON.parse(process.argv[2])//{"frames":[{"filename":"app:///index.android.bundle","function":"callFunctionReturnFlushedQueue","in_app":true,"lineno":1,"colno":177331,"source_map_path":"source-map-cache/123/2.12.14/index.android.bundle.map"},{"filename":"app:///index.android.bundle","function":"__guard","in_app":true,"lineno":1,"colno":178310,"source_map_path":"source-map-cache/123/2.12.14/index.android.bundle.map"},{"filename":"app:///index.android.bundle","function":"anonymous","in_app":true,"lineno":1,"colno":177373,"source_map_path":"source-map-cache/123/2.12.14/index.android.bundle.map"},{"filename":"app:///index.android.bundle","function":"__callFunction","in_app":true,"lineno":1,"colno":178820,"source_map_path":"source-map-cache/123/2.12.14/index.android.bundle.map"},{"filename":"app:///index.android.bundle","function":"receiveTouches","in_app":true,"lineno":1,"colno":160610,"source_map_path":"source-map-cache/123/2.12.14/index.android.bundle.map"},{"filename":"app:///index.android.bundle","function":"_receiveRootNodeIDEvent","in_app":true,"lineno":1,"colno":107803,"source_map_path":"source-map-cache/123/2.12.14/index.android.bundle.map"},{"filename":"app:///index.android.bundle","function":"batchedUpdates","in_app":true,"lineno":1,"colno":107530,"source_map_path":"source-map-cache/123/2.12.14/index.android.bundle.map"},{"filename":"app:///index.android.bundle","function":"batchedUpdatesImpl","in_app":true,"lineno":1,"colno":165717,"source_map_path":"source-map-cache/123/2.12.14/index.android.bundle.map"},{"filename":"app:///index.android.bundle","function":"flushSyncCallbacks","in_app":true,"lineno":1,"colno":114645,"source_map_path":"source-map-cache/123/2.12.14/index.android.bundle.map"},{"filename":"app:///index.android.bundle","function":"performSyncWorkOnRoot","in_app":true,"lineno":1,"colno":149365,"source_map_path":"source-map-cache/123/2.12.14/index.android.bundle.map"},{"filename":"app:///index.android.bundle","function":"renderRootSync","in_app":true,"lineno":1,"colno":151872,"source_map_path":"source-map-cache/123/2.12.14/index.android.bundle.map"},{"filename":"app:///index.android.bundle","function":"workLoopSync","in_app":true,"lineno":1,"colno":151988,"source_map_path":"source-map-cache/123/2.12.14/index.android.bundle.map"},{"filename":"app:///index.android.bundle","function":"performUnitOfWork","in_app":true,"lineno":1,"colno":152085,"source_map_path":"source-map-cache/123/2.12.14/index.android.bundle.map"},{"filename":"app:///index.android.bundle","function":"beginWork$1","in_app":true,"lineno":1,"colno":165344,"source_map_path":"source-map-cache/123/2.12.14/index.android.bundle.map"},{"filename":"app:///index.android.bundle","function":"renderWithHooks","in_app":true,"lineno":1,"colno":124679,"source_map_path":"source-map-cache/123/2.12.14/index.android.bundle.map"},{"filename":"app:///index.android.bundle","function":"Profile","in_app":true,"lineno":1,"colno":2426339,"source_map_path":"source-map-cache/123/2.12.14/index.android.bundle.map"}]}
|
||||
if (!frames) {
|
||||
const frames = JSON.parse(process.argv[2])
|
||||
if (!frames && frames?.frames?.length) {
|
||||
throw new Error("please pass frames as first argument");
|
||||
}
|
||||
const MAP_FILE_PATH = `${frames?.frames?.[0].source_map_path}`;
|
||||
const map = read(MAP_FILE_PATH);
|
||||
const processedFrame = [];
|
||||
const context = Symbolication.createContext(SourceMapConsumer, map);
|
||||
frames.frames.forEach(frame => {
|
||||
const MAP_FILE_PATH = `${frame.source_map_path}`;
|
||||
const map = read(MAP_FILE_PATH);
|
||||
const context = Symbolication.createContext(SourceMapConsumer, map);
|
||||
|
||||
processedFrame.push(Symbolication.getOriginalPositionFor(frame.lineno, frame.colno, Symbolication.parseFileName(frame.filename), context));
|
||||
|
||||
})
|
||||
console.log(JSON.stringify({
|
||||
symbolicated_frames: processedFrame
|
||||
symbolicated_frames: processedFrame
|
||||
}))
|
||||
}
|
||||
catch (err) {
|
||||
console.log('payload', process.argv[2]);
|
||||
console.error(err.message);
|
||||
console.log('payload', process.argv[2]);
|
||||
console.error(err);
|
||||
process.exit(1);
|
||||
}
|
||||
|
||||
17
bins/cybertron-symbolicator-react-native/readme.md
Normal file
17
bins/cybertron-symbolicator-react-native/readme.md
Normal file
@@ -0,0 +1,17 @@
|
||||
# Cybertron Symbolicator for React native
|
||||
|
||||
This is a react native module for symbolication of stack traces. It uses the Cybertron symbolication service to symbolicate stack traces this
|
||||
is based on metro source maps.
|
||||
|
||||
## How To use
|
||||
|
||||
```sh
|
||||
yarn
|
||||
node index.js <frame>
|
||||
```
|
||||
|
||||
## Sample Frame
|
||||
|
||||
```js
|
||||
{"frames":[{"filename":"app:///index.android.bundle","function":"callFunctionReturnFlushedQueue","in_app":true,"lineno":1,"colno":177331,"source_map_path":"source-map-cache/123/2.12.14/index.android.bundle.map"},{"filename":"app:///index.android.bundle","function":"__guard","in_app":true,"lineno":1,"colno":178310,"source_map_path":"source-map-cache/123/2.12.14/index.android.bundle.map"},{"filename":"app:///index.android.bundle","function":"anonymous","in_app":true,"lineno":1,"colno":177373,"source_map_path":"source-map-cache/123/2.12.14/index.android.bundle.map"},{"filename":"app:///index.android.bundle","function":"__callFunction","in_app":true,"lineno":1,"colno":178820,"source_map_path":"source-map-cache/123/2.12.14/index.android.bundle.map"},{"filename":"app:///index.android.bundle","function":"receiveTouches","in_app":true,"lineno":1,"colno":160610,"source_map_path":"source-map-cache/123/2.12.14/index.android.bundle.map"},{"filename":"app:///index.android.bundle","function":"_receiveRootNodeIDEvent","in_app":true,"lineno":1,"colno":107803,"source_map_path":"source-map-cache/123/2.12.14/index.android.bundle.map"},{"filename":"app:///index.android.bundle","function":"batchedUpdates","in_app":true,"lineno":1,"colno":107530,"source_map_path":"source-map-cache/123/2.12.14/index.android.bundle.map"},{"filename":"app:///index.android.bundle","function":"batchedUpdatesImpl","in_app":true,"lineno":1,"colno":165717,"source_map_path":"source-map-cache/123/2.12.14/index.android.bundle.map"},{"filename":"app:///index.android.bundle","function":"flushSyncCallbacks","in_app":true,"lineno":1,"colno":114645,"source_map_path":"source-map-cache/123/2.12.14/index.android.bundle.map"},{"filename":"app:///index.android.bundle","function":"performSyncWorkOnRoot","in_app":true,"lineno":1,"colno":149365,"source_map_path":"source-map-cache/123/2.12.14/index.android.bundle.map"},{"filename":"app:///index.android.bundle","function":"renderRootSync","in_app":true,"lineno":1,"colno":151872,"source_map_path":"source-map-cache/123/2.12.14/index.android.bundle.map"},{"filename":"app:///index.android.bundle","function":"workLoopSync","in_app":true,"lineno":1,"colno":151988,"source_map_path":"source-map-cache/123/2.12.14/index.android.bundle.map"},{"filename":"app:///index.android.bundle","function":"performUnitOfWork","in_app":true,"lineno":1,"colno":152085,"source_map_path":"source-map-cache/123/2.12.14/index.android.bundle.map"},{"filename":"app:///index.android.bundle","function":"beginWork$1","in_app":true,"lineno":1,"colno":165344,"source_map_path":"source-map-cache/123/2.12.14/index.android.bundle.map"},{"filename":"app:///index.android.bundle","function":"renderWithHooks","in_app":true,"lineno":1,"colno":124679,"source_map_path":"source-map-cache/123/2.12.14/index.android.bundle.map"},{"filename":"app:///index.android.bundle","function":"Profile","in_app":true,"lineno":1,"colno":2426339,"source_map_path":"source-map-cache/123/2.12.14/index.android.bundle.map"}]}
|
||||
```
|
||||
@@ -4,7 +4,7 @@
|
||||
|
||||
"@babel/code-frame@^7.25.9":
|
||||
version "7.26.2"
|
||||
resolved "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.26.2.tgz"
|
||||
resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.26.2.tgz#4b5fab97d33338eff916235055f0ebc21e573a85"
|
||||
integrity sha512-RJlIHRueQgwWitWgF8OdFYGZX328Ax5BCemNGlqHfplnRT9ESi8JkFlvaVYbS+UubVY6dpv87Fs2u5M29iNFVQ==
|
||||
dependencies:
|
||||
"@babel/helper-validator-identifier" "^7.25.9"
|
||||
@@ -13,7 +13,7 @@
|
||||
|
||||
"@babel/generator@^7.25.9":
|
||||
version "7.26.2"
|
||||
resolved "https://registry.npmjs.org/@babel/generator/-/generator-7.26.2.tgz"
|
||||
resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.26.2.tgz#87b75813bec87916210e5e01939a4c823d6bb74f"
|
||||
integrity sha512-zevQbhbau95nkoxSq3f/DC/SC+EEOUZd3DYqfSkMhY2/wfSeaHV1Ew4vk8e+x8lja31IbyuUa2uQ3JONqKbysw==
|
||||
dependencies:
|
||||
"@babel/parser" "^7.26.2"
|
||||
@@ -24,46 +24,33 @@
|
||||
|
||||
"@babel/helper-string-parser@^7.25.9":
|
||||
version "7.25.9"
|
||||
resolved "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.25.9.tgz"
|
||||
resolved "https://registry.yarnpkg.com/@babel/helper-string-parser/-/helper-string-parser-7.25.9.tgz#1aabb72ee72ed35789b4bbcad3ca2862ce614e8c"
|
||||
integrity sha512-4A/SCr/2KLd5jrtOMFzaKjVtAei3+2r/NChoBNoZ3EyP/+GlhoaEGoWOZUmFmoITP7zOJyHIMm+DYRd8o3PvHA==
|
||||
|
||||
"@babel/helper-validator-identifier@^7.25.9":
|
||||
version "7.25.9"
|
||||
resolved "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.25.9.tgz"
|
||||
resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.25.9.tgz#24b64e2c3ec7cd3b3c547729b8d16871f22cbdc7"
|
||||
integrity sha512-Ed61U6XJc3CVRfkERJWDz4dJwKe7iLmmJsbOGu9wSloNSFttHV0I8g6UAgb7qnK5ly5bGLPd4oXZlxCdANBOWQ==
|
||||
|
||||
"@babel/parser@^7.25.9", "@babel/parser@^7.26.2":
|
||||
version "7.26.2"
|
||||
resolved "https://registry.npmjs.org/@babel/parser/-/parser-7.26.2.tgz"
|
||||
resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.26.2.tgz#fd7b6f487cfea09889557ef5d4eeb9ff9a5abd11"
|
||||
integrity sha512-DWMCZH9WA4Maitz2q21SRKHo9QXZxkDsbNZoVD62gusNtNBBqDg9i7uOhASfTfIGNzW+O+r7+jAlM8dwphcJKQ==
|
||||
dependencies:
|
||||
"@babel/types" "^7.26.0"
|
||||
|
||||
"@babel/template@^7.25.9":
|
||||
version "7.25.9"
|
||||
resolved "https://registry.npmjs.org/@babel/template/-/template-7.25.9.tgz"
|
||||
resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.25.9.tgz#ecb62d81a8a6f5dc5fe8abfc3901fc52ddf15016"
|
||||
integrity sha512-9DGttpmPvIxBb/2uwpVo3dqJ+O6RooAFOS+lB+xDqoE2PVCE8nfoHMdZLpfCQRLwvohzXISPZcgxt80xLfsuwg==
|
||||
dependencies:
|
||||
"@babel/code-frame" "^7.25.9"
|
||||
"@babel/parser" "^7.25.9"
|
||||
"@babel/types" "^7.25.9"
|
||||
|
||||
"@babel/traverse--for-generate-function-map@npm:@babel/traverse@^7.25.3":
|
||||
"@babel/traverse--for-generate-function-map@npm:@babel/traverse@^7.25.3", "@babel/traverse@^7.25.3":
|
||||
version "7.25.9"
|
||||
resolved "https://registry.npmjs.org/@babel/traverse/-/traverse-7.25.9.tgz"
|
||||
integrity sha512-ZCuvfwOwlz/bawvAuvcj8rrithP2/N55Tzz342AkTvq4qaWbGfmCk/tKhNaV2cthijKrPAA8SRJV5WWe7IBMJw==
|
||||
dependencies:
|
||||
"@babel/code-frame" "^7.25.9"
|
||||
"@babel/generator" "^7.25.9"
|
||||
"@babel/parser" "^7.25.9"
|
||||
"@babel/template" "^7.25.9"
|
||||
"@babel/types" "^7.25.9"
|
||||
debug "^4.3.1"
|
||||
globals "^11.1.0"
|
||||
|
||||
"@babel/traverse@^7.25.3":
|
||||
version "7.25.9"
|
||||
resolved "https://registry.npmjs.org/@babel/traverse/-/traverse-7.25.9.tgz"
|
||||
resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.25.9.tgz#a50f8fe49e7f69f53de5bea7e413cd35c5e13c84"
|
||||
integrity sha512-ZCuvfwOwlz/bawvAuvcj8rrithP2/N55Tzz342AkTvq4qaWbGfmCk/tKhNaV2cthijKrPAA8SRJV5WWe7IBMJw==
|
||||
dependencies:
|
||||
"@babel/code-frame" "^7.25.9"
|
||||
@@ -76,7 +63,7 @@
|
||||
|
||||
"@babel/types@^7.25.2", "@babel/types@^7.25.9", "@babel/types@^7.26.0":
|
||||
version "7.26.0"
|
||||
resolved "https://registry.npmjs.org/@babel/types/-/types-7.26.0.tgz"
|
||||
resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.26.0.tgz#deabd08d6b753bc8e0f198f8709fb575e31774ff"
|
||||
integrity sha512-Z/yiTPj+lDVnF7lWeKCIJzaIkI0vYO87dMpZ4bg4TDrFe4XXLFWL1TbXU27gBP3QccxV9mZICCrnjnYlJjXHOA==
|
||||
dependencies:
|
||||
"@babel/helper-string-parser" "^7.25.9"
|
||||
@@ -84,7 +71,7 @@
|
||||
|
||||
"@jridgewell/gen-mapping@^0.3.5":
|
||||
version "0.3.5"
|
||||
resolved "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.5.tgz"
|
||||
resolved "https://registry.yarnpkg.com/@jridgewell/gen-mapping/-/gen-mapping-0.3.5.tgz#dcce6aff74bdf6dad1a95802b69b04a2fcb1fb36"
|
||||
integrity sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg==
|
||||
dependencies:
|
||||
"@jridgewell/set-array" "^1.2.1"
|
||||
@@ -93,22 +80,22 @@
|
||||
|
||||
"@jridgewell/resolve-uri@^3.1.0":
|
||||
version "3.1.2"
|
||||
resolved "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz"
|
||||
resolved "https://registry.yarnpkg.com/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz#7a0ee601f60f99a20c7c7c5ff0c80388c1189bd6"
|
||||
integrity sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==
|
||||
|
||||
"@jridgewell/set-array@^1.2.1":
|
||||
version "1.2.1"
|
||||
resolved "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.2.1.tgz"
|
||||
resolved "https://registry.yarnpkg.com/@jridgewell/set-array/-/set-array-1.2.1.tgz#558fb6472ed16a4c850b889530e6b36438c49280"
|
||||
integrity sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==
|
||||
|
||||
"@jridgewell/sourcemap-codec@^1.4.10", "@jridgewell/sourcemap-codec@^1.4.14":
|
||||
version "1.5.0"
|
||||
resolved "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.0.tgz"
|
||||
resolved "https://registry.yarnpkg.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.0.tgz#3188bcb273a414b0d215fd22a58540b989b9409a"
|
||||
integrity sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==
|
||||
|
||||
"@jridgewell/trace-mapping@^0.3.24", "@jridgewell/trace-mapping@^0.3.25":
|
||||
version "0.3.25"
|
||||
resolved "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz"
|
||||
resolved "https://registry.yarnpkg.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz#15f190e98895f3fc23276ee14bc76b675c2e50f0"
|
||||
integrity sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==
|
||||
dependencies:
|
||||
"@jridgewell/resolve-uri" "^3.1.0"
|
||||
@@ -116,63 +103,63 @@
|
||||
|
||||
core-util-is@~1.0.0:
|
||||
version "1.0.3"
|
||||
resolved "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz"
|
||||
resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.3.tgz#a6042d3634c2b27e9328f837b965fac83808db85"
|
||||
integrity sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==
|
||||
|
||||
debug@^4.3.1:
|
||||
version "4.3.7"
|
||||
resolved "https://registry.npmjs.org/debug/-/debug-4.3.7.tgz"
|
||||
resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.7.tgz#87945b4151a011d76d95a198d7111c865c360a52"
|
||||
integrity sha512-Er2nc/H7RrMXZBFCEim6TCmMk02Z8vLC2Rbi1KEBggpo0fS6l0S1nnapwmIi3yW/+GOJap1Krg4w0Hg80oCqgQ==
|
||||
dependencies:
|
||||
ms "^2.1.3"
|
||||
|
||||
flow-enums-runtime@^0.0.6:
|
||||
version "0.0.6"
|
||||
resolved "https://registry.npmjs.org/flow-enums-runtime/-/flow-enums-runtime-0.0.6.tgz"
|
||||
resolved "https://registry.yarnpkg.com/flow-enums-runtime/-/flow-enums-runtime-0.0.6.tgz#5bb0cd1b0a3e471330f4d109039b7eba5cb3e787"
|
||||
integrity sha512-3PYnM29RFXwvAN6Pc/scUfkI7RwhQ/xqyLUyPNlXUp9S40zI8nup9tUSrTLSVnWGBN38FNiGWbwZOB6uR4OGdw==
|
||||
|
||||
globals@^11.1.0:
|
||||
version "11.12.0"
|
||||
resolved "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz"
|
||||
resolved "https://registry.yarnpkg.com/globals/-/globals-11.12.0.tgz#ab8795338868a0babd8525758018c2a7eb95c42e"
|
||||
integrity sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==
|
||||
|
||||
inherits@~2.0.3:
|
||||
version "2.0.4"
|
||||
resolved "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz"
|
||||
resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c"
|
||||
integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==
|
||||
|
||||
invariant@^2.2.4:
|
||||
version "2.2.4"
|
||||
resolved "https://registry.npmjs.org/invariant/-/invariant-2.2.4.tgz"
|
||||
resolved "https://registry.yarnpkg.com/invariant/-/invariant-2.2.4.tgz#610f3c92c9359ce1db616e538008d23ff35158e6"
|
||||
integrity sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA==
|
||||
dependencies:
|
||||
loose-envify "^1.0.0"
|
||||
|
||||
isarray@~1.0.0:
|
||||
version "1.0.0"
|
||||
resolved "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz"
|
||||
resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11"
|
||||
integrity sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==
|
||||
|
||||
"js-tokens@^3.0.0 || ^4.0.0", js-tokens@^4.0.0:
|
||||
version "4.0.0"
|
||||
resolved "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz"
|
||||
resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499"
|
||||
integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==
|
||||
|
||||
jsesc@^3.0.2:
|
||||
version "3.0.2"
|
||||
resolved "https://registry.npmjs.org/jsesc/-/jsesc-3.0.2.tgz"
|
||||
resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-3.0.2.tgz#bb8b09a6597ba426425f2e4a07245c3d00b9343e"
|
||||
integrity sha512-xKqzzWXDttJuOcawBt4KnKHHIf5oQ/Cxax+0PWFG+DFDgHNAdi+TXECADI+RYiFUMmx8792xsMbbgXj4CwnP4g==
|
||||
|
||||
loose-envify@^1.0.0:
|
||||
version "1.4.0"
|
||||
resolved "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz"
|
||||
resolved "https://registry.yarnpkg.com/loose-envify/-/loose-envify-1.4.0.tgz#71ee51fa7be4caec1a63839f7e682d8132d30caf"
|
||||
integrity sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==
|
||||
dependencies:
|
||||
js-tokens "^3.0.0 || ^4.0.0"
|
||||
|
||||
metro-source-map@^0.81.0, metro-source-map@0.81.0:
|
||||
metro-source-map@0.81.0, metro-source-map@^0.81.0:
|
||||
version "0.81.0"
|
||||
resolved "https://registry.npmjs.org/metro-source-map/-/metro-source-map-0.81.0.tgz"
|
||||
resolved "https://registry.yarnpkg.com/metro-source-map/-/metro-source-map-0.81.0.tgz#ca83964124bb227d5f0bdb1ee304dbfe635f869e"
|
||||
integrity sha512-TzsVxhH83dyxg4A4+L1nzNO12I7ps5IHLjKGZH3Hrf549eiZivkdjYiq/S5lOB+p2HiQ+Ykcwtmcja95LIC62g==
|
||||
dependencies:
|
||||
"@babel/traverse" "^7.25.3"
|
||||
@@ -188,7 +175,7 @@ metro-source-map@^0.81.0, metro-source-map@0.81.0:
|
||||
|
||||
metro-symbolicate@0.81.0:
|
||||
version "0.81.0"
|
||||
resolved "https://registry.npmjs.org/metro-symbolicate/-/metro-symbolicate-0.81.0.tgz"
|
||||
resolved "https://registry.yarnpkg.com/metro-symbolicate/-/metro-symbolicate-0.81.0.tgz#b7b1eae8bfd6ad2a922fa2bcb9f2144e464adafb"
|
||||
integrity sha512-C/1rWbNTPYp6yzID8IPuQPpVGzJ2rbWYBATxlvQ9dfK5lVNoxcwz77hjcY8ISLsRRR15hyd/zbjCNKPKeNgE1Q==
|
||||
dependencies:
|
||||
flow-enums-runtime "^0.0.6"
|
||||
@@ -201,34 +188,34 @@ metro-symbolicate@0.81.0:
|
||||
|
||||
ms@^2.1.3:
|
||||
version "2.1.3"
|
||||
resolved "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz"
|
||||
resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.3.tgz#574c8138ce1d2b5861f0b44579dbadd60c6615b2"
|
||||
integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==
|
||||
|
||||
nullthrows@^1.1.1:
|
||||
version "1.1.1"
|
||||
resolved "https://registry.npmjs.org/nullthrows/-/nullthrows-1.1.1.tgz"
|
||||
resolved "https://registry.yarnpkg.com/nullthrows/-/nullthrows-1.1.1.tgz#7818258843856ae971eae4208ad7d7eb19a431b1"
|
||||
integrity sha512-2vPPEi+Z7WqML2jZYddDIfy5Dqb0r2fze2zTxNNknZaFpVHU3mFB3R+DWeJWGVx0ecvttSGlJTI+WG+8Z4cDWw==
|
||||
|
||||
ob1@0.81.0:
|
||||
version "0.81.0"
|
||||
resolved "https://registry.npmjs.org/ob1/-/ob1-0.81.0.tgz"
|
||||
resolved "https://registry.yarnpkg.com/ob1/-/ob1-0.81.0.tgz#dc3154cca7aa9c2eb58f5ac63e9ee23ff4c6f520"
|
||||
integrity sha512-6Cvrkxt1tqaRdWqTAMcVYEiO5i1xcF9y7t06nFdjFqkfPsEloCf8WwhXdwBpNUkVYSQlSGS7cDgVQR86miBfBQ==
|
||||
dependencies:
|
||||
flow-enums-runtime "^0.0.6"
|
||||
|
||||
picocolors@^1.0.0:
|
||||
version "1.1.1"
|
||||
resolved "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz"
|
||||
resolved "https://registry.yarnpkg.com/picocolors/-/picocolors-1.1.1.tgz#3d321af3eab939b083c8f929a1d12cda81c26b6b"
|
||||
integrity sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==
|
||||
|
||||
process-nextick-args@~2.0.0:
|
||||
version "2.0.1"
|
||||
resolved "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz"
|
||||
resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-2.0.1.tgz#7820d9b16120cc55ca9ae7792680ae7dba6d7fe2"
|
||||
integrity sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==
|
||||
|
||||
readable-stream@~2.3.6:
|
||||
version "2.3.8"
|
||||
resolved "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz"
|
||||
resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.8.tgz#91125e8042bba1b9887f49345f6277027ce8be9b"
|
||||
integrity sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==
|
||||
dependencies:
|
||||
core-util-is "~1.0.0"
|
||||
@@ -241,24 +228,24 @@ readable-stream@~2.3.6:
|
||||
|
||||
safe-buffer@~5.1.0, safe-buffer@~5.1.1:
|
||||
version "5.1.2"
|
||||
resolved "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz"
|
||||
resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d"
|
||||
integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==
|
||||
|
||||
source-map@^0.5.6:
|
||||
version "0.5.7"
|
||||
resolved "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz"
|
||||
resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.5.7.tgz#8a039d2d1021d22d1ea14c80d8ea468ba2ef3fcc"
|
||||
integrity sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==
|
||||
|
||||
string_decoder@~1.1.1:
|
||||
version "1.1.1"
|
||||
resolved "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz"
|
||||
resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.1.1.tgz#9cf1611ba62685d7030ae9e4ba34149c3af03fc8"
|
||||
integrity sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==
|
||||
dependencies:
|
||||
safe-buffer "~5.1.0"
|
||||
|
||||
through2@^2.0.1:
|
||||
version "2.0.5"
|
||||
resolved "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz"
|
||||
resolved "https://registry.yarnpkg.com/through2/-/through2-2.0.5.tgz#01c1e39eb31d07cb7d03a96a70823260b23132cd"
|
||||
integrity sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==
|
||||
dependencies:
|
||||
readable-stream "~2.3.6"
|
||||
@@ -266,20 +253,20 @@ through2@^2.0.1:
|
||||
|
||||
util-deprecate@~1.0.1:
|
||||
version "1.0.2"
|
||||
resolved "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz"
|
||||
resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf"
|
||||
integrity sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==
|
||||
|
||||
vlq@^1.0.0:
|
||||
version "1.0.1"
|
||||
resolved "https://registry.npmjs.org/vlq/-/vlq-1.0.1.tgz"
|
||||
resolved "https://registry.yarnpkg.com/vlq/-/vlq-1.0.1.tgz#c003f6e7c0b4c1edd623fd6ee50bbc0d6a1de468"
|
||||
integrity sha512-gQpnTgkubC6hQgdIcRdYGDSDc+SaujOdyesZQMv6JlfQee/9Mp0Qhnys6WxDWvQnL5WZdT7o2Ul187aSt0Rq+w==
|
||||
|
||||
vlq@^2.0.4:
|
||||
version "2.0.4"
|
||||
resolved "https://registry.npmjs.org/vlq/-/vlq-2.0.4.tgz"
|
||||
resolved "https://registry.yarnpkg.com/vlq/-/vlq-2.0.4.tgz#6057b85729245b9829e3cc7755f95b228d4fe041"
|
||||
integrity sha512-aodjPa2wPQFkra1G8CzJBTHXhgk3EVSwxSWXNPr1fgdFLUb8kvLV1iEb6rFgasIsjP82HWI6dsb5Io26DDnasA==
|
||||
|
||||
xtend@~4.0.1:
|
||||
version "4.0.2"
|
||||
resolved "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz"
|
||||
resolved "https://registry.yarnpkg.com/xtend/-/xtend-4.0.2.tgz#bb72779f5fa465186b1f438f674fa347fdb5db54"
|
||||
integrity sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==
|
||||
|
||||
Reference in New Issue
Block a user