UNPKG

electron-edge-js

Version:

Edge.js: run .NET and Node.js in-process on Electron

60 lines (50 loc) 1.96 kB
// Fix #176 for GUI applications on Windows try { var stdout = process.stdout; } catch (e) { // This is a Windows GUI application without stdout and stderr defined. // Define process.stdout and process.stderr so that all output is discarded. (function () { var stream = require('stream'); var NullStream = function (o) { stream.Writable.call(this); this._write = function (c, e, cb) { cb && cb(); }; } require('util').inherits(NullStream, stream.Writable); var nullStream = new NullStream(); process.__defineGetter__('stdout', function () { return nullStream; }); process.__defineGetter__('stderr', function () { return nullStream; }); })(); } process.env['EDGE_NATIVE'] = process.env['EDGE_NATIVE'] || __dirname + (process.arch === 'x64' ? '\\x64\\edge_nativeclr.node' : '\\x86\\edge_nativeclr.node'); var edge = require('./edge.js'); var assemblyFile = __dirname + '\\..\\EdgeJs.dll'; const edgeSwitch = "-EdgeJs:"; process.argv.forEach(e => { if(e.startsWith(edgeSwitch)) { const path = e.substring(edgeSwitch.length); assemblyFile = path; } }) var initialize = edge.func({ assemblyFile, typeName: 'EdgeJs.Edge', methodName: 'InitializeInternal' }); var compileFunc = function (data, callback) { var wrapper = '(function () { ' + data + ' })'; var funcFactory = eval(wrapper); var func = funcFactory(); if (typeof func !== 'function') { throw new Error('Node.js code must return an instance of a JavaScript function. ' + 'Please use `return` statement to return a function.'); } callback(null, func); }; initialize(compileFunc, function (error, data) { if (error) throw error; }); // prevent the V8 thread from exiting for the lifetime of the CLR application setInterval(function () {}, 3600000);