public ReactRunner(string file, bool enableFileWatcher, bool enableCompilation, bool disableGlobalMembers, JsonSerializerSettings serializationSettings) { //setup assembly resolver so it can find the v8 dlls AssemblyResolver.Initialize(); JsFile = file; EnableFileWatcher = enableFileWatcher; EnableCompilation = enableCompilation; DisableGlobalMembers = disableGlobalMembers; SerializationSettings = serializationSettings; //Initialize the v8 runtime Runtime = new V8Runtime(); //Read the scripts text content ScriptRaw = File.ReadAllText(JsFile); if (EnableCompilation) { //If compilation is enabled, we compile the scripts Compiled = Runtime.Compile(ScriptRaw); CompiledShimms = Runtime.Compile(JavascriptShimms.ConsoleShim); } if (EnableFileWatcher) { fileWatcher = new FileSystemWatcher(); fileWatcher.Path = Path.GetDirectoryName(JsFile); fileWatcher.Filter = Path.GetFileName(JsFile); fileWatcher.NotifyFilter = NotifyFilters.LastWrite | NotifyFilters.Attributes | NotifyFilters.Size; fileWatcher.Changed += fileWatcher_Changed; fileWatcher.EnableRaisingEvents = true; } }
public V8Script Compile(string scriptId, string code, bool addToCache = true, int?cacheExpirationSeconds = null) { CachedV8Script cachedScript; if (TryGetCached(scriptId, out cachedScript)) { return(cachedScript.Script); } V8Script compiledScript = _v8Runtime.Compile(scriptId, code); if (addToCache) { if (!cacheExpirationSeconds.HasValue) { cacheExpirationSeconds = _settings.ScriptCacheExpirationSeconds; } if (cacheExpirationSeconds > 0) { var cacheEntry = new CachedV8Script(compiledScript, cacheExpirationSeconds.Value); _scriptCache.AddOrUpdate(scriptId, cacheEntry, (key, original) => cacheEntry); } } return(compiledScript); }