mirror of
https://github.com/pulsar-edit/pulsar.git
synced 2024-09-21 07:58:04 +03:00
45 lines
1.5 KiB
JavaScript
45 lines
1.5 KiB
JavaScript
'use strict'
|
|
|
|
const fs = require('fs-extra')
|
|
const glob = require('glob')
|
|
const path = require('path')
|
|
|
|
const CONFIG = require('../config')
|
|
module.exports = function () {
|
|
if (process.platform === 'win32') {
|
|
console.log('Skipping symbol dumping because minidump is not supported on Windows'.gray)
|
|
return Promise.resolve()
|
|
} else {
|
|
console.log(`Dumping symbols in ${CONFIG.symbolsPath}`)
|
|
const binaryPaths = glob.sync(path.join(CONFIG.intermediateAppPath, 'node_modules', '**', '*.node'))
|
|
return Promise.all(binaryPaths.map(dumpSymbol))
|
|
}
|
|
}
|
|
|
|
function dumpSymbol (binaryPath) {
|
|
const minidump = require('minidump')
|
|
|
|
return new Promise(function (resolve, reject) {
|
|
minidump.dumpSymbol(binaryPath, function (error, content) {
|
|
if (error) {
|
|
console.error(error)
|
|
throw new Error(error)
|
|
} else {
|
|
const moduleLine = /MODULE [^ ]+ [^ ]+ ([0-9A-F]+) (.*)\n/.exec(content)
|
|
if (moduleLine.length !== 3) {
|
|
const errorMessage = `Invalid output when dumping symbol for ${binaryPath}`
|
|
console.error(errorMessage)
|
|
throw new Error(errorMessage)
|
|
} else {
|
|
const filename = moduleLine[2]
|
|
const symbolDirPath = path.join(CONFIG.symbolsPath, filename, moduleLine[1])
|
|
const symbolFilePath = path.join(symbolDirPath, `${filename}.sym`)
|
|
fs.mkdirpSync(symbolDirPath)
|
|
fs.writeFileSync(symbolFilePath)
|
|
resolve()
|
|
}
|
|
}
|
|
})
|
|
})
|
|
}
|