From f70be77e39b37d78aa89221dd79ae632e562025c Mon Sep 17 00:00:00 2001 From: David Wilson Date: Fri, 11 Jan 2019 11:07:14 -0800 Subject: [PATCH] Remove cached-run-in-this-context and use Node's 'vm' script caching --- src/native-compile-cache.js | 26 ++++++++++++++++++++++---- 1 file changed, 22 insertions(+), 4 deletions(-) diff --git a/src/native-compile-cache.js b/src/native-compile-cache.js index cc947e84b..d8211b9f4 100644 --- a/src/native-compile-cache.js +++ b/src/native-compile-cache.js @@ -1,7 +1,7 @@ const Module = require('module') const path = require('path') -const cachedVm = require('cached-run-in-this-context') const crypto = require('crypto') +const vm = require('vm') function computeHash (contents) { return crypto.createHash('sha1').update(contents, 'utf8').digest('hex') @@ -34,6 +34,24 @@ class NativeCompileCache { this.previousModuleCompile = Module.prototype._compile } + runInThisContext (code, filename) { + // produceCachedData is deprecated after Node 10.6, will need to update + // this for Electron 4.0 to use script.createCachedData() + const script = new vm.Script(code, {filename, produceCachedData: true}) + return { + result: script.runInThisContext(), + cacheBuffer: script.cachedData + } + } + + runInThisContextCached (code, filename, cachedData) { + const script = new vm.Script(code, {filename, cachedData}) + return { + result: script.runInThisContext(), + wasRejected: script.cachedDataRejected + } + } + overrideModuleCompile () { let self = this // Here we override Node's module.js @@ -64,7 +82,7 @@ class NativeCompileCache { let compiledWrapper = null if (self.cacheStore.has(cacheKey)) { let buffer = self.cacheStore.get(cacheKey) - let compilationResult = cachedVm.runInThisContextCached(wrapper, filename, buffer) + let compilationResult = self.runInThisContextCached(wrapper, filename, buffer) compiledWrapper = compilationResult.result if (compilationResult.wasRejected) { self.cacheStore.delete(cacheKey) @@ -72,12 +90,12 @@ class NativeCompileCache { } else { let compilationResult try { - compilationResult = cachedVm.runInThisContext(wrapper, filename) + compilationResult = self.runInThisContext(wrapper, filename) } catch (err) { console.error(`Error running script ${filename}`) throw err } - if (compilationResult.cacheBuffer) { + if (compilationResult.cacheBuffer !== null) { self.cacheStore.set(cacheKey, compilationResult.cacheBuffer) } compiledWrapper = compilationResult.result