Esempio n. 1
0
        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);
        }