| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263 |
- '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
|