Merge pull request #34 from navi-ppl/TP-5555/optimise-symbolicator

TP-5555 | symbolicator enahnce ment
This commit is contained in:
Varnit Goyal
2024-11-14 14:37:10 +05:30
committed by GitHub
6 changed files with 199 additions and 188 deletions

View File

@@ -1,2 +1,4 @@
node_modules
yarn
.idea
source-map-cache

View File

@@ -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);
}

View File

@@ -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);
}

View 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"}]}
```

View File

@@ -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==