"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); const tslib_1 = require("tslib"); const debug_1 = require("debug"); const debug = debug_1.default('axm:profiling'); const module_1 = require("../utils/module"); const configuration_1 = require("../configuration"); class ProfilingHeapFallback { constructor() { this.MODULE_NAME = 'v8-profiler-node8'; this.FALLBACK_MODULE_NAME = 'v8-profiler'; } init() { return tslib_1.__awaiter(this, void 0, void 0, function* () { let path; let moduleName = this.MODULE_NAME; try { path = yield module_1.default.getModulePath(this.MODULE_NAME); } catch (e) { try { moduleName = this.FALLBACK_MODULE_NAME; path = yield module_1.default.getModulePath(this.FALLBACK_MODULE_NAME); } catch (err) { configuration_1.default.configureModule({ heapdump: false }); throw new Error('Profiler not loaded !'); } } this.profiler = module_1.default.loadModule(path, moduleName); const enable = !(this.profiler instanceof Error); configuration_1.default.configureModule({ heapdump: enable }); }); } destroy() { debug('Profiler destroyed !'); } start() { this.snapshot = this.profiler.takeSnapshot('km-heap-snapshot'); } stop() { return tslib_1.__awaiter(this, void 0, void 0, function* () { return this.getProfileInfo(); }); } takeSnapshot() { return tslib_1.__awaiter(this, void 0, void 0, function* () { this.start(); return this.stop(); }); } getProfileInfo() { return new Promise(resolve => { let buffer = ''; this.snapshot.serialize((data, length) => { buffer += data; }, () => { this.snapshot.delete(); resolve(buffer); }); }).then((buffer) => { return buffer; }); } } exports.default = ProfilingHeapFallback; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvZmlsaW5nSGVhcEZhbGxiYWNrLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL3Byb2ZpbGluZy9wcm9maWxpbmdIZWFwRmFsbGJhY2sudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsaUNBQXlCO0FBQ3pCLE1BQU0sS0FBSyxHQUFHLGVBQUssQ0FBQyxlQUFlLENBQUMsQ0FBQTtBQUVwQyw0Q0FBbUM7QUFDbkMsb0RBQTRDO0FBRTVDO0lBQUE7UUFJVSxnQkFBVyxHQUFHLG1CQUFtQixDQUFBO1FBQ2pDLHlCQUFvQixHQUFHLGFBQWEsQ0FBQTtJQStEOUMsQ0FBQztJQTdETyxJQUFJOztZQUNSLElBQUksSUFBSSxDQUFBO1lBQ1IsSUFBSSxVQUFVLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQTtZQUVqQyxJQUFJO2dCQUNGLElBQUksR0FBRyxNQUFNLGdCQUFLLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQTthQUNuRDtZQUFDLE9BQU8sQ0FBQyxFQUFFO2dCQUNWLElBQUk7b0JBQ0YsVUFBVSxHQUFHLElBQUksQ0FBQyxvQkFBb0IsQ0FBQTtvQkFDdEMsSUFBSSxHQUFHLE1BQU0sZ0JBQUssQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLG9CQUFvQixDQUFDLENBQUE7aUJBQzVEO2dCQUFDLE9BQU8sR0FBRyxFQUFFO29CQUNaLHVCQUFhLENBQUMsZUFBZSxDQUFDO3dCQUM1QixRQUFRLEVBQUcsS0FBSztxQkFDakIsQ0FBQyxDQUFBO29CQUNGLE1BQU0sSUFBSSxLQUFLLENBQUMsdUJBQXVCLENBQUMsQ0FBQTtpQkFDekM7YUFDRjtZQUVELElBQUksQ0FBQyxRQUFRLEdBQUcsZ0JBQUssQ0FBQyxVQUFVLENBQUMsSUFBSSxFQUFFLFVBQVUsQ0FBQyxDQUFBO1lBRWxELE1BQU0sTUFBTSxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsUUFBUSxZQUFZLEtBQUssQ0FBQyxDQUFBO1lBRWhELHVCQUFhLENBQUMsZUFBZSxDQUFDO2dCQUM1QixRQUFRLEVBQUcsTUFBTTthQUNsQixDQUFDLENBQUE7UUFDSixDQUFDO0tBQUE7SUFFRCxPQUFPO1FBQ0wsS0FBSyxDQUFDLHNCQUFzQixDQUFDLENBQUE7SUFDL0IsQ0FBQztJQUVELEtBQUs7UUFDSCxJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsWUFBWSxDQUFDLGtCQUFrQixDQUFDLENBQUE7SUFDaEUsQ0FBQztJQUVLLElBQUk7O1lBQ1IsT0FBTyxJQUFJLENBQUMsY0FBYyxFQUFFLENBQUE7UUFDOUIsQ0FBQztLQUFBO0lBRUssWUFBWTs7WUFDaEIsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFBO1lBQ1osT0FBTyxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUE7UUFDcEIsQ0FBQztLQUFBO0lBRU8sY0FBYztRQUNwQixPQUFPLElBQUksT0FBTyxDQUFDLE9BQU8sQ0FBQyxFQUFFO1lBQzNCLElBQUksTUFBTSxHQUFHLEVBQUUsQ0FBQTtZQUNmLElBQUksQ0FBQyxRQUFRLENBQUMsU0FBUyxDQUNyQixDQUFDLElBQUksRUFBRSxNQUFNLEVBQUUsRUFBRTtnQkFDZixNQUFNLElBQUksSUFBSSxDQUFBO1lBQ2hCLENBQUMsRUFDRCxHQUFHLEVBQUU7Z0JBQ0gsSUFBSSxDQUFDLFFBQVEsQ0FBQyxNQUFNLEVBQUUsQ0FBQTtnQkFFdEIsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFBO1lBQ2pCLENBQUMsQ0FDRixDQUFBO1FBQ0gsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsTUFBTSxFQUFFLEVBQUU7WUFDakIsT0FBTyxNQUFNLENBQUE7UUFDZixDQUFDLENBQUMsQ0FBQTtJQUNKLENBQUM7Q0FDRjtBQXBFRCx3Q0FvRUMifQ==