1*a5fb1ba8SEvan Bacon"use strict"; 226ad19fcSEvan Bacon/** 326ad19fcSEvan Bacon * Copyright (c) 650 Industries. 426ad19fcSEvan Bacon * Copyright (c) Meta Platforms, Inc. and affiliates. 526ad19fcSEvan Bacon * 626ad19fcSEvan Bacon * This source code is licensed under the MIT license found in the 726ad19fcSEvan Bacon * LICENSE file in the root directory of this source tree. 826ad19fcSEvan Bacon */ 9*a5fb1ba8SEvan Baconvar __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) { 10*a5fb1ba8SEvan Bacon if (k2 === undefined) k2 = k; 11*a5fb1ba8SEvan Bacon var desc = Object.getOwnPropertyDescriptor(m, k); 12*a5fb1ba8SEvan Bacon if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) { 13*a5fb1ba8SEvan Bacon desc = { enumerable: true, get: function() { return m[k]; } }; 14*a5fb1ba8SEvan Bacon } 15*a5fb1ba8SEvan Bacon Object.defineProperty(o, k2, desc); 16*a5fb1ba8SEvan Bacon}) : (function(o, m, k, k2) { 17*a5fb1ba8SEvan Bacon if (k2 === undefined) k2 = k; 18*a5fb1ba8SEvan Bacon o[k2] = m[k]; 19*a5fb1ba8SEvan Bacon})); 20*a5fb1ba8SEvan Baconvar __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) { 21*a5fb1ba8SEvan Bacon Object.defineProperty(o, "default", { enumerable: true, value: v }); 22*a5fb1ba8SEvan Bacon}) : function(o, v) { 23*a5fb1ba8SEvan Bacon o["default"] = v; 24*a5fb1ba8SEvan Bacon}); 25*a5fb1ba8SEvan Baconvar __importStar = (this && this.__importStar) || function (mod) { 26*a5fb1ba8SEvan Bacon if (mod && mod.__esModule) return mod; 27*a5fb1ba8SEvan Bacon var result = {}; 28*a5fb1ba8SEvan Bacon if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k); 29*a5fb1ba8SEvan Bacon __setModuleDefault(result, mod); 30*a5fb1ba8SEvan Bacon return result; 31*a5fb1ba8SEvan Bacon}; 32*a5fb1ba8SEvan BaconObject.defineProperty(exports, "__esModule", { value: true }); 33*a5fb1ba8SEvan Baconexports.LogBoxLog = void 0; 34*a5fb1ba8SEvan Baconconst LogBoxSymbolication = __importStar(require("./LogBoxSymbolication")); 3526ad19fcSEvan Baconfunction componentStackToStack(componentStack) { 3626ad19fcSEvan Bacon return componentStack.map((stack) => ({ 3726ad19fcSEvan Bacon file: stack.fileName, 3826ad19fcSEvan Bacon methodName: stack.content, 3926ad19fcSEvan Bacon lineNumber: stack.location?.row ?? 0, 4026ad19fcSEvan Bacon column: stack.location?.column ?? 0, 4126ad19fcSEvan Bacon arguments: [], 4226ad19fcSEvan Bacon })); 4326ad19fcSEvan Bacon} 44*a5fb1ba8SEvan Baconclass LogBoxLog { 4526ad19fcSEvan Bacon message; 4626ad19fcSEvan Bacon type; 4726ad19fcSEvan Bacon category; 4826ad19fcSEvan Bacon componentStack; 4926ad19fcSEvan Bacon stack; 5026ad19fcSEvan Bacon count; 5126ad19fcSEvan Bacon level; 5226ad19fcSEvan Bacon codeFrame; 5326ad19fcSEvan Bacon isComponentError; 5426ad19fcSEvan Bacon symbolicated = { 5526ad19fcSEvan Bacon stack: { 5626ad19fcSEvan Bacon error: null, 5726ad19fcSEvan Bacon stack: null, 5826ad19fcSEvan Bacon status: 'NONE', 5926ad19fcSEvan Bacon }, 6026ad19fcSEvan Bacon component: { 6126ad19fcSEvan Bacon error: null, 6226ad19fcSEvan Bacon stack: null, 6326ad19fcSEvan Bacon status: 'NONE', 6426ad19fcSEvan Bacon }, 6526ad19fcSEvan Bacon }; 6626ad19fcSEvan Bacon callbacks = new Map(); 6726ad19fcSEvan Bacon constructor(data) { 6826ad19fcSEvan Bacon this.level = data.level; 6926ad19fcSEvan Bacon this.type = data.type ?? 'error'; 7026ad19fcSEvan Bacon this.message = data.message; 7126ad19fcSEvan Bacon this.stack = data.stack; 7226ad19fcSEvan Bacon this.category = data.category; 7326ad19fcSEvan Bacon this.componentStack = data.componentStack; 7426ad19fcSEvan Bacon this.codeFrame = data.codeFrame; 7526ad19fcSEvan Bacon this.isComponentError = data.isComponentError; 7626ad19fcSEvan Bacon this.count = 1; 7726ad19fcSEvan Bacon this.symbolicated = data.symbolicated ?? this.symbolicated; 7826ad19fcSEvan Bacon } 7926ad19fcSEvan Bacon incrementCount() { 8026ad19fcSEvan Bacon this.count += 1; 8126ad19fcSEvan Bacon } 8226ad19fcSEvan Bacon getAvailableStack(type) { 8326ad19fcSEvan Bacon if (this.symbolicated[type].status === 'COMPLETE') { 8426ad19fcSEvan Bacon return this.symbolicated[type].stack; 8526ad19fcSEvan Bacon } 8626ad19fcSEvan Bacon return this.getStack(type); 8726ad19fcSEvan Bacon } 8826ad19fcSEvan Bacon flushCallbacks(type) { 8926ad19fcSEvan Bacon const callbacks = this.callbacks.get(type); 9026ad19fcSEvan Bacon const status = this.symbolicated[type].status; 9126ad19fcSEvan Bacon if (callbacks) { 9226ad19fcSEvan Bacon for (const callback of callbacks) { 9326ad19fcSEvan Bacon callback(status); 9426ad19fcSEvan Bacon } 9526ad19fcSEvan Bacon callbacks.clear(); 9626ad19fcSEvan Bacon } 9726ad19fcSEvan Bacon } 9826ad19fcSEvan Bacon pushCallback(type, callback) { 9926ad19fcSEvan Bacon let callbacks = this.callbacks.get(type); 10026ad19fcSEvan Bacon if (!callbacks) { 10126ad19fcSEvan Bacon callbacks = new Set(); 10226ad19fcSEvan Bacon this.callbacks.set(type, callbacks); 10326ad19fcSEvan Bacon } 10426ad19fcSEvan Bacon callbacks.add(callback); 10526ad19fcSEvan Bacon } 10626ad19fcSEvan Bacon retrySymbolicate(type, callback) { 10726ad19fcSEvan Bacon this._symbolicate(type, true, callback); 10826ad19fcSEvan Bacon } 10926ad19fcSEvan Bacon symbolicate(type, callback) { 11026ad19fcSEvan Bacon this._symbolicate(type, false, callback); 11126ad19fcSEvan Bacon } 11226ad19fcSEvan Bacon _symbolicate(type, retry, callback) { 11326ad19fcSEvan Bacon if (callback) { 11426ad19fcSEvan Bacon this.pushCallback(type, callback); 11526ad19fcSEvan Bacon } 11626ad19fcSEvan Bacon const status = this.symbolicated[type].status; 11726ad19fcSEvan Bacon if (status === 'COMPLETE') { 11826ad19fcSEvan Bacon return this.flushCallbacks(type); 11926ad19fcSEvan Bacon } 12026ad19fcSEvan Bacon if (retry) { 12126ad19fcSEvan Bacon LogBoxSymbolication.deleteStack(this.getStack(type)); 12226ad19fcSEvan Bacon this.handleSymbolicate(type); 12326ad19fcSEvan Bacon } 12426ad19fcSEvan Bacon else { 12526ad19fcSEvan Bacon if (status === 'NONE') { 12626ad19fcSEvan Bacon this.handleSymbolicate(type); 12726ad19fcSEvan Bacon } 12826ad19fcSEvan Bacon } 12926ad19fcSEvan Bacon } 13026ad19fcSEvan Bacon componentStackCache = null; 13126ad19fcSEvan Bacon getStack(type) { 13226ad19fcSEvan Bacon if (type === 'component') { 13326ad19fcSEvan Bacon if (this.componentStackCache == null) { 13426ad19fcSEvan Bacon this.componentStackCache = componentStackToStack(this.componentStack); 13526ad19fcSEvan Bacon } 13626ad19fcSEvan Bacon return this.componentStackCache; 13726ad19fcSEvan Bacon } 13826ad19fcSEvan Bacon return this.stack; 13926ad19fcSEvan Bacon } 14026ad19fcSEvan Bacon handleSymbolicate(type) { 14126ad19fcSEvan Bacon if (type === 'component' && !this.componentStack?.length) { 14226ad19fcSEvan Bacon return; 14326ad19fcSEvan Bacon } 14426ad19fcSEvan Bacon if (this.symbolicated[type].status !== 'PENDING') { 14526ad19fcSEvan Bacon this.updateStatus(type, null, null, null); 14626ad19fcSEvan Bacon LogBoxSymbolication.symbolicate(this.getStack(type)).then((data) => { 14726ad19fcSEvan Bacon this.updateStatus(type, null, data?.stack, data?.codeFrame); 14826ad19fcSEvan Bacon }, (error) => { 14926ad19fcSEvan Bacon this.updateStatus(type, error, null, null); 15026ad19fcSEvan Bacon }); 15126ad19fcSEvan Bacon } 15226ad19fcSEvan Bacon } 15326ad19fcSEvan Bacon updateStatus(type, error, stack, codeFrame) { 15426ad19fcSEvan Bacon const lastStatus = this.symbolicated[type].status; 15526ad19fcSEvan Bacon if (error != null) { 15626ad19fcSEvan Bacon this.symbolicated[type] = { 15726ad19fcSEvan Bacon error, 15826ad19fcSEvan Bacon stack: null, 15926ad19fcSEvan Bacon status: 'FAILED', 16026ad19fcSEvan Bacon }; 16126ad19fcSEvan Bacon } 16226ad19fcSEvan Bacon else if (stack != null) { 16326ad19fcSEvan Bacon if (codeFrame) { 16426ad19fcSEvan Bacon this.codeFrame = codeFrame; 16526ad19fcSEvan Bacon } 16626ad19fcSEvan Bacon this.symbolicated[type] = { 16726ad19fcSEvan Bacon error: null, 16826ad19fcSEvan Bacon stack, 16926ad19fcSEvan Bacon status: 'COMPLETE', 17026ad19fcSEvan Bacon }; 17126ad19fcSEvan Bacon } 17226ad19fcSEvan Bacon else { 17326ad19fcSEvan Bacon this.symbolicated[type] = { 17426ad19fcSEvan Bacon error: null, 17526ad19fcSEvan Bacon stack: null, 17626ad19fcSEvan Bacon status: 'PENDING', 17726ad19fcSEvan Bacon }; 17826ad19fcSEvan Bacon } 17926ad19fcSEvan Bacon const status = this.symbolicated[type].status; 18026ad19fcSEvan Bacon if (lastStatus !== status) { 18126ad19fcSEvan Bacon if (['COMPLETE', 'FAILED'].includes(status)) { 18226ad19fcSEvan Bacon this.flushCallbacks(type); 18326ad19fcSEvan Bacon } 18426ad19fcSEvan Bacon } 18526ad19fcSEvan Bacon } 18626ad19fcSEvan Bacon} 187*a5fb1ba8SEvan Baconexports.LogBoxLog = LogBoxLog; 18826ad19fcSEvan Bacon//# sourceMappingURL=LogBoxLog.js.map