144 lines
4.0 KiB
JavaScript
144 lines
4.0 KiB
JavaScript
|
|
||
|
// Initialize some variables before react-native code would access them
|
||
|
var onmessage=null, self=global;
|
||
|
// Cache Node's original require as __debug__.require
|
||
|
global.__debug__={require: require};
|
||
|
// avoid Node's GLOBAL deprecation warning
|
||
|
Object.defineProperty(global, "GLOBAL", {
|
||
|
configurable: true,
|
||
|
writable: true,
|
||
|
enumerable: true,
|
||
|
value: global
|
||
|
});
|
||
|
// Prevent leaking process.versions from debugger process to
|
||
|
// worker because pure React Native doesn't do that and some packages as js-md5 rely on this behavior
|
||
|
Object.defineProperty(process, "versions", {
|
||
|
value: undefined
|
||
|
});
|
||
|
var vscodeHandlers = {
|
||
|
'vscode_reloadApp': function () {
|
||
|
try {
|
||
|
global.require('NativeModules').DevMenu.reload();
|
||
|
} catch (err) {
|
||
|
// ignore
|
||
|
}
|
||
|
},
|
||
|
'vscode_showDevMenu': function () {
|
||
|
try {
|
||
|
var DevMenu = global.require('NativeModules').DevMenu.show();
|
||
|
} catch (err) {
|
||
|
// ignore
|
||
|
}
|
||
|
}
|
||
|
};
|
||
|
process.on("message", function (message) {
|
||
|
if (message.data && vscodeHandlers[message.data.method]) {
|
||
|
vscodeHandlers[message.data.method]();
|
||
|
} else if(onmessage) {
|
||
|
onmessage(message);
|
||
|
}
|
||
|
});
|
||
|
var postMessage = function(message){
|
||
|
process.send(message);
|
||
|
};
|
||
|
if (!self.postMessage) {
|
||
|
self.postMessage = postMessage;
|
||
|
}
|
||
|
var importScripts = (function(){
|
||
|
var fs=require('fs'), vm=require('vm');
|
||
|
return function(scriptUrl){
|
||
|
var scriptCode = fs.readFileSync(scriptUrl, "utf8");
|
||
|
vm.runInThisContext(scriptCode, {filename: scriptUrl});
|
||
|
};
|
||
|
})();
|
||
|
|
||
|
/**
|
||
|
* Copyright (c) 2015-present, Facebook, Inc.
|
||
|
*
|
||
|
* This source code is licensed under the MIT license found in the
|
||
|
* LICENSE file in the root directory of this source tree.
|
||
|
*
|
||
|
* @format
|
||
|
*/
|
||
|
|
||
|
/* global __fbBatchedBridge, self, importScripts, postMessage, onmessage: true */
|
||
|
/* eslint no-unused-vars: 0 */
|
||
|
|
||
|
'use strict';
|
||
|
|
||
|
onmessage = (function() {
|
||
|
var visibilityState;
|
||
|
var showVisibilityWarning = (function() {
|
||
|
var hasWarned = false;
|
||
|
return function() {
|
||
|
// Wait until `YellowBox` gets initialized before displaying the warning.
|
||
|
if (hasWarned || console.warn.toString().includes('[native code]')) {
|
||
|
return;
|
||
|
}
|
||
|
hasWarned = true;
|
||
|
console.warn(
|
||
|
'Remote debugger is in a background tab which may cause apps to ' +
|
||
|
'perform slowly. Fix this by foregrounding the tab (or opening it in ' +
|
||
|
'a separate window).',
|
||
|
);
|
||
|
};
|
||
|
})();
|
||
|
|
||
|
var messageHandlers = {
|
||
|
executeApplicationScript: function(message, sendReply) {
|
||
|
for (var key in message.inject) {
|
||
|
self[key] = JSON.parse(message.inject[key]);
|
||
|
}
|
||
|
var error;
|
||
|
try {
|
||
|
importScripts(message.url);
|
||
|
} catch (err) {
|
||
|
error = err.message;
|
||
|
}
|
||
|
sendReply(null /* result */, error);
|
||
|
},
|
||
|
setDebuggerVisibility: function(message) {
|
||
|
visibilityState = message.visibilityState;
|
||
|
},
|
||
|
};
|
||
|
|
||
|
return function(message) {
|
||
|
if (visibilityState === 'hidden') {
|
||
|
showVisibilityWarning();
|
||
|
}
|
||
|
|
||
|
var object = message.data;
|
||
|
|
||
|
var sendReply = function(result, error) {
|
||
|
postMessage({replyID: object.id, result: result, error: error});
|
||
|
};
|
||
|
|
||
|
var handler = messageHandlers[object.method];
|
||
|
if (handler) {
|
||
|
// Special cased handlers
|
||
|
handler(object, sendReply);
|
||
|
} else {
|
||
|
// Other methods get called on the bridge
|
||
|
var returnValue = [[], [], [], 0];
|
||
|
var error;
|
||
|
try {
|
||
|
if (typeof __fbBatchedBridge === 'object') {
|
||
|
returnValue = __fbBatchedBridge[object.method].apply(
|
||
|
null,
|
||
|
object.arguments,
|
||
|
);
|
||
|
} else {
|
||
|
error = 'Failed to call function, __fbBatchedBridge is undefined';
|
||
|
}
|
||
|
} catch (err) {
|
||
|
error = err.message;
|
||
|
} finally {
|
||
|
sendReply(JSON.stringify(returnValue), error);
|
||
|
}
|
||
|
}
|
||
|
};
|
||
|
})();
|
||
|
|
||
|
// Notify debugger that we're done with loading
|
||
|
// and started listening for IPC messages
|
||
|
postMessage({workerLoaded:true});
|