forked from reactjs/React.NET
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathshims.js
69 lines (63 loc) · 1.85 KB
/
shims.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
/*
* Copyright (c) 2014-Present, Facebook, Inc.
* All rights reserved.
*
* This source code is licensed under the BSD-style license found in the
* LICENSE file in the root directory of this source tree. An additional grant
* of patent rights can be found in the PATENTS file in the same directory.
*/
var global = global || {};
var React, ReactDOM, ReactDOMServer;
// Basic console shim. Caches all calls to console methods.
function MockConsole() {
this._calls = [];
['log', 'error', 'warn', 'debug', 'info', 'dir', 'group', 'groupEnd', 'groupCollapsed'].forEach(function (methodName) {
this[methodName] = this._handleCall.bind(this, methodName);
}, this);
}
MockConsole.prototype = {
_handleCall: function(methodName/*, ...args*/) {
var serializedArgs = [];
for (var i = 1; i < arguments.length; i++) {
serializedArgs.push(JSON.stringify(arguments[i]));
}
this._calls.push({
method: methodName,
args: serializedArgs,
stack: '\nCall stack: ' + (new Error().stack || 'not available')
});
},
_formatCall: function(call) {
return 'console.' + call.method + '("[.NET]", ' + call.args.join(', ') + ', ' + JSON.stringify(call.stack) + ');';
},
getCalls: function() {
return this._calls.map(this._formatCall).join('\n');
}
};
var console = new MockConsole();
if (!Object.freeze) {
Object.freeze = function() { };
}
/**
* Finds a user-supplied version of React and ensures it's exposed globally.
*
* @return {bool}
*/
function ReactNET_initReact() {
if (
typeof React !== 'undefined' &&
typeof ReactDOM !== 'undefined' &&
typeof ReactDOMServer !== 'undefined'
) {
// React is already a global, woohoo
return true;
}
if (global.React && global.ReactDOM && global.ReactDOMServer) {
React = global.React;
ReactDOM = global.ReactDOM;
ReactDOMServer = global.ReactDOMServer;
return true;
}
// :'(
return false;
}