diff --git a/bins/cybertron-symbolicator-react-native/.gitignore b/bins/cybertron-symbolicator-react-native/.gitignore index 3893436..80b1f3c 100644 --- a/bins/cybertron-symbolicator-react-native/.gitignore +++ b/bins/cybertron-symbolicator-react-native/.gitignore @@ -1,2 +1,4 @@ node_modules yarn +.idea +source-map-cache diff --git a/bins/cybertron-symbolicator-react-native/Symbolication.js b/bins/cybertron-symbolicator-react-native/Symbolication.js index a27dfab..6f77637 100644 --- a/bins/cybertron-symbolicator-react-native/Symbolication.js +++ b/bins/cybertron-symbolicator-react-native/Symbolication.js @@ -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); } diff --git a/bins/cybertron-symbolicator-react-native/index.js b/bins/cybertron-symbolicator-react-native/index.js index f12d8c6..1cd2a91 100644 --- a/bins/cybertron-symbolicator-react-native/index.js +++ b/bins/cybertron-symbolicator-react-native/index.js @@ -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); } diff --git a/bins/cybertron-symbolicator-react-native/readme.md b/bins/cybertron-symbolicator-react-native/readme.md new file mode 100644 index 0000000..5bebae0 --- /dev/null +++ b/bins/cybertron-symbolicator-react-native/readme.md @@ -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 +``` + +## 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"}]} +``` diff --git a/bins/cybertron-symbolicator-react-native/yarn.lock b/bins/cybertron-symbolicator-react-native/yarn.lock index 38c4aa8..24941f8 100644 --- a/bins/cybertron-symbolicator-react-native/yarn.lock +++ b/bins/cybertron-symbolicator-react-native/yarn.lock @@ -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== diff --git a/cybertron-symbolicator-react-native b/cybertron-symbolicator-react-native index 1690aa4..3b8d60d 160000 --- a/cybertron-symbolicator-react-native +++ b/cybertron-symbolicator-react-native @@ -1 +1 @@ -Subproject commit 1690aa4b4892cdfa87cd7eda54625e64e2d1f70d +Subproject commit 3b8d60db2381a127c369773346bf63c5bef60116