예제 #1
0
        /// <summary>
        /// Initializes compiler
        /// </summary>
        private void Initialize()
        {
            if (_initialized)
            {
                return;
            }

            lock (_initializationSynchronizer)
            {
                if (_initialized)
                {
                    return;
                }

                _jsEngine.EmbedHostObject(LESS_ENVIRONMENT_VARIABLE_NAME, LessEnvironment.Instance);
                _jsEngine.EmbedHostObject(VIRTUAL_FILE_MANAGER_VARIABLE_NAME, _virtualFileManager);

                Assembly assembly = GetType().Assembly;

                _jsEngine.ExecuteResource(RESOURCES_NAMESPACE + "." + LESS_LIBRARY_FILE_NAME, assembly);
                _jsEngine.ExecuteResource(RESOURCES_NAMESPACE + "." + LESSC_HELPER_FILE_NAME, assembly);

                _initialized = true;
            }
        }
예제 #2
0
        CustomScriptInstance(IJsEngine engine)
        {
            this.engine = engine;

            engine.EmbedHostObject("_debug", new Action <object>(debug));
            engine.EmbedHostObject("_info", new Action <object>(push));
            engine.EmbedHostObject("_error", new Action <object>(push_error));
            engine.EmbedHostObject("_warning", new Action <object>(push_warning));
            engine.EmbedHostObject("_register", new Action <string, string, string, string>(register));
        }
예제 #3
0
        static void Main(string[] args)
        {
            var jsEngineSwitcher = JsEngineSwitcher.Current;

            jsEngineSwitcher.EngineFactories.Add(new ChakraCoreJsEngineFactory());
            jsEngineSwitcher.DefaultEngineName = ChakraCoreJsEngine.EngineName;

            ServiceRow b = new ServiceRow();

            b.Add("test", "test1");

            ServiceRow a = new ServiceRow(b);

            a.Add("c1", "c2");
            b.Add("arr", new List <ServiceRow>()
            {
                a
            });

            IJsEngine jsEngine = JsEngineSwitcher.Current.CreateDefaultEngine();

            jsEngine.EmbedHostType("ServiceRow", typeof(ServiceRow));
            jsEngine.EmbedHostObject("root", a);
            jsEngine.Execute(@" var a = root.GetParent(); var t= a.GetListItem('arr',0); a.SetItem('test',t.GetItem('c1'));");
        }
예제 #4
0
        public override object Evaluate(string script, params KeyValuePair <string, object>[] kvp)
        {
            object result = null;

            if (kvp != null)
            {
                foreach (var obj in kvp)
                {
                    //判定是否为值类型
                    if (obj.Value.GetType().IsValueType || obj.Value is string)
                    {
                        js.SetVariableValue(obj.Key, obj.Value);
                    }
                    else
                    {
                        js.EmbedHostObject(obj.Key, obj.Value);
                    }
                }
            }
            try
            {
                result = js.Evaluate(script);
            }
            catch (JavaScriptEngineSwitcher.Core.JsException jse)
            {
                if (jse.InnerException != null)
                {
                    if (jse.InnerException is VroomJs.JsException)
                    {
                        var vjse = (VroomJs.JsException)jse.InnerException;
                        throw new HostJsException(jse.Message, script, vjse.Line, vjse.Column);
                    }
                }
                else
                {
                    throw new HostJsException(jse.Message, script, 0, 0);
                }
            }

            return(result);
        }
예제 #5
0
        /// <summary>
        /// Initializes compiler
        /// </summary>
        private void Initialize()
        {
            if (_initializedFlag.Set())
            {
                _jsEngine.EmbedHostObject(VIRTUAL_FILE_MANAGER_VARIABLE_NAME, _virtualFileManager);

                Assembly assembly = GetType().Assembly;

                _jsEngine.ExecuteResource(ResourceHelpers.GetResourceName(TYPESCRIPT_LIBRARY_FILE_NAME), assembly);
                _jsEngine.ExecuteResource(ResourceHelpers.GetResourceName(TSC_HELPER_FILE_NAME), assembly);
            }
        }
예제 #6
0
        /// <summary>
        /// Initializes CSS autoprefixer
        /// </summary>
        private void Initialize()
        {
            if (_initializedFlag.Set())
            {
                _jsEngine.EmbedHostObject(COUNTRY_STATISTICS_SERVICE_VARIABLE_NAME, CountryStatisticsService.Instance);

                Assembly assembly = GetType().Assembly;

                _jsEngine.ExecuteResource(ResourceHelpers.GetResourceName(AUTOPREFIXER_LIBRARY_FILE_NAME), assembly);
                _jsEngine.ExecuteResource(ResourceHelpers.GetResourceName(AUTOPREFIXER_HELPER_FILE_NAME), assembly);
            }
        }
예제 #7
0
        /// <summary>
        /// Initializes a Sass compiler
        /// </summary>
        private void InitializeCompiler()
        {
            if (_initialized)
            {
                return;
            }

            lock (_initializationSynchronizer)
            {
                if (_initialized)
                {
                    return;
                }

                string serializedOptions = _jsonSerializer.SerializeObject(_options);

                try
                {
                    _jsEngine = _createJsEngineInstance();
                    _jsEngine.EmbedHostObject(FILE_MANAGER_VARIABLE_NAME, _fileManager);
                    _jsEngine.SetVariableValue(CURRENT_OS_PLATFORM_NAME, GetCurrentOSPlatformName());

                    Assembly assembly = this.GetType()
#if !NET40
                                        .GetTypeInfo()
#endif
                                        .Assembly
                    ;

                    _jsEngine.ExecuteResource(ResourceHelpers.GetResourceName(ES6_POLYFILLS_FILE_NAME), assembly, true);
                    _jsEngine.ExecuteResource(ResourceHelpers.GetResourceName(SASS_LIBRARY_FILE_NAME), assembly, true);
                    _jsEngine.ExecuteResource(ResourceHelpers.GetResourceName(SASS_HELPER_FILE_NAME), assembly, true);
                    _jsEngine.Execute($"var sassHelper = new SassHelper({serializedOptions});");

                    _version = _jsEngine.Evaluate <string>("SassHelper.getVersion();");
                }
                catch (JsEngineLoadException e)
                {
                    throw SassErrorHelpers.WrapCompilerLoadException(e);
                }
                catch (JsException e)
                {
                    throw SassErrorHelpers.WrapCompilerLoadException(e, true);
                }

                _initialized = true;
            }
        }
예제 #8
0
        static void Main(string[] args)
        {
            Console.WriteLine("Hello World!");
            var engineSwitcher = JsEngineSwitcher.Current;

            engineSwitcher.EngineFactories.Add(new ChakraCoreJsEngineFactory());
            engineSwitcher.DefaultEngineName = ChakraCoreJsEngine.EngineName;
            IJsEngine engine = JsEngineSwitcher.Current.CreateDefaultEngine();

            engine.EmbedHostType("Test", typeof(Test));
            var t = new Test();

            engine.EmbedHostObject("TestA", t);
            engine.Execute("var a=1+3;if(1)a=5;TestA.Name=a");
            Console.WriteLine(t.Name);
            Console.ReadKey();
        }
예제 #9
0
        /// <summary>
        /// Initializes a Autoprefixer
        /// </summary>
        private void Initialize()
        {
            if (_initialized)
            {
                return;
            }

            lock (_initializationSynchronizer)
            {
                if (_initialized)
                {
                    return;
                }

                try
                {
                    _jsEngine.EmbedHostObject(COUNTRY_STATISTICS_SERVICE_VARIABLE_NAME,
                                              CountryStatisticsService.Instance);

                    Assembly assembly = this.GetType()
#if !NET40
                                        .GetTypeInfo()
#endif
                                        .Assembly
                    ;

                    _jsEngine.ExecuteResource(ResourceHelpers.GetResourceName(AUTOPREFIXER_LIBRARY_FILE_NAME),
                                              assembly);
                    _jsEngine.ExecuteResource(ResourceHelpers.GetResourceName(AUTOPREFIXER_HELPER_FILE_NAME),
                                              assembly);
                    _jsEngine.Execute($"var autoprefixerHelper = new AutoprefixerHelper({_serializedOptions});");
                }
                catch (JsException e)
                {
                    throw AutoprefixerErrorHelpers.WrapAutoprefixerLoadException(e, true);
                }

                _initialized = true;
            }
        }
예제 #10
0
        /// <summary>
        /// Initializes compiler
        /// </summary>
        private void Initialize()
        {
            if (_initialized)
            {
                return;
            }

            lock (_initializationSynchronizer)
            {
                if (_initialized)
                {
                    return;
                }

                _jsEngine.EmbedHostObject(VIRTUAL_FILE_MANAGER_VARIABLE_NAME, _virtualFileManager);

                Assembly assembly = GetType().Assembly;

                _jsEngine.ExecuteResource(ResourceHelpers.GetResourceName(TYPESCRIPT_LIBRARY_FILE_NAME), assembly);
                _jsEngine.ExecuteResource(ResourceHelpers.GetResourceName(TSC_HELPER_FILE_NAME), assembly);

                _initialized = true;
            }
        }
예제 #11
0
 public void EmbedHostObject(string itemName, object value)
 {
     CheckDisposed();
     _engine.EmbedHostObject(itemName, value);
 }
예제 #12
0
 public void RegisterJsObject(string itemName, object value)
 {
     jsEngine.EmbedHostObject(itemName, value);
 }