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