UNPKG

@bugsplat/symbol-upload

Version:
91 lines 4.05 kB
"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.uploadSymbolFiles = uploadSymbolFiles; const js_api_client_1 = require("@bugsplat/js-api-client"); const promises_1 = require("node:fs/promises"); const node_os_1 = require("node:os"); const node_path_1 = require("node:path"); const pretty_bytes_1 = __importDefault(require("pretty-bytes")); const workerpool_1 = require("workerpool"); const dsym_1 = require("./dsym"); const elf_1 = require("./elf"); const pdb_1 = require("./pdb"); const preload_1 = require("./preload"); const sym_1 = require("./sym"); const worker_1 = require("./worker"); const maxWorkers = (0, node_os_1.availableParallelism)(); const workerPool = (0, workerpool_1.pool)((0, preload_1.findCompressionWorkerPath)(), { maxWorkers }); async function uploadSymbolFiles(bugsplat, database, application, version, symbolFilePaths) { console.log(`About to upload symbols for ${database}-${application}-${version}...`); const startTime = new Date(); const symbolsApiClient = new js_api_client_1.SymbolsApiClient(bugsplat); const versionsApiClient = new js_api_client_1.VersionsApiClient(bugsplat); const symbolFiles = await Promise.all(symbolFilePaths.map(async (symbolFilePath) => await createSymbolFileInfos(symbolFilePath))).then(array => array.flat()); const workers = (0, worker_1.createWorkersFromSymbolFiles)(workerPool, maxWorkers, symbolFiles, [symbolsApiClient, versionsApiClient]); const uploads = workers.map((worker) => worker.upload(database, application, version)); const stats = await Promise.all(uploads).then(stats => stats.flat()); const endTime = new Date(); const size = stats.reduce((acc, curr) => acc + curr.size, 0); const seconds = (endTime.getTime() - startTime.getTime()) / 1000; console.log(`Uploaded ${symbolFiles.length} symbols totaling ${(0, pretty_bytes_1.default)(size)} @ ${(0, pretty_bytes_1.default)(size / seconds)}/sec`); } async function createSymbolFileInfos(symbolFilePath) { const path = symbolFilePath; const isFolder = await (0, promises_1.stat)(path).then((stats) => stats.isDirectory()); const extLowerCase = (0, node_path_1.extname)(path).toLowerCase(); const isSymFile = extLowerCase.includes('.sym') && !isFolder; const isPdbFile = extLowerCase.includes('.pdb') && !isFolder; const isPeFile = extLowerCase.includes('.exe') || extLowerCase.includes('.dll') && !isFolder; const isDsymBundle = extLowerCase.includes('.dsym'); const isElfFile = elfExtensions.some((ext) => extLowerCase.includes(ext) && !isFolder); if (isPdbFile) { const dbgId = await (0, pdb_1.tryGetPdbGuid)(path); const moduleName = (0, node_path_1.basename)(path); return [{ path, dbgId, moduleName, }]; } if (isPeFile) { const dbgId = await (0, pdb_1.tryGetPeGuid)(path); const moduleName = (0, node_path_1.basename)(path); return [{ path, dbgId, moduleName, }]; } if (isSymFile) { const { dbgId, moduleName } = await (0, sym_1.getSymFileInfo)(path); return [{ path, dbgId, moduleName, }]; } if (isDsymBundle) { return (0, dsym_1.getDSymFileInfos)(path); } if (isElfFile) { const dbgId = await (0, elf_1.tryGetElfUUID)(path); const moduleName = (0, node_path_1.basename)(path); return [{ path, dbgId, moduleName, }]; } const dbgId = ''; const moduleName = (0, node_path_1.basename)(path); return [{ path, dbgId, moduleName, }]; } const elfExtensions = ['.elf', '.self', '.prx', '.sprx', '.nss']; //# sourceMappingURL=upload.js.map