1
0
mirror of https://github.com/S2-/gitlit synced 2025-08-03 21:00:04 +02:00
Files
gitlit/node_modules/asar/lib/snapshot.js
2018-06-03 13:57:23 +02:00

63 lines
2.0 KiB
JavaScript

'use strict'
const fs = process.versions.electron ? require('original-fs') : require('fs')
const path = require('path')
const mksnapshot = require('mksnapshot')
const vm = require('vm')
const stripBOM = function (content) {
if (content.charCodeAt(0) === 0xFEFF) {
content = content.slice(1)
}
return content
}
const wrapModuleCode = function (script) {
script = script.replace(/^#!.*/, '')
return `(function(exports, require, module, __filename, __dirname) { ${script} \n});`
}
const dumpObjectToJS = function (content) {
let result = 'var __ATOM_SHELL_SNAPSHOT = {\n'
for (const filename in content) {
const func = content[filename].toString()
result += ` '${filename}': ${func},\n`
}
result += '};\n'
return result
}
const createSnapshot = function (src, dest, filenames, metadata, options, callback) {
const content = {}
try {
src = path.resolve(src)
for (const filename of filenames) {
const file = metadata[filename]
if ((file.type === 'file' || file.type === 'link') && filename.substr(-3) === '.js') {
const script = wrapModuleCode(stripBOM(fs.readFileSync(filename, 'utf8')))
const relativeFilename = path.relative(src, filename)
try {
const compiled = vm.runInThisContext(script, {filename: relativeFilename})
content[relativeFilename] = compiled
} catch (error) {
console.error('Ignoring ' + relativeFilename + ' for ' + error.name)
}
}
}
} catch (error) {
return callback(error)
}
// run mksnapshot
const str = dumpObjectToJS(content)
const version = options.version
const arch = options.arch
const builddir = options.builddir
let snapshotdir = options.snapshotdir
if (typeof snapshotdir === 'undefined' || snapshotdir === null) { snapshotdir = path.dirname(dest) }
const target = path.resolve(snapshotdir, 'snapshot_blob.bin')
return mksnapshot(str, target, version, arch, builddir, callback)
}
module.exports = createSnapshot