1 | // shim for using process in browser
|
---|
2 | var process = module.exports = {};
|
---|
3 |
|
---|
4 | // cached from whatever global is present so that test runners that stub it
|
---|
5 | // don't break things. But we need to wrap it in a try catch in case it is
|
---|
6 | // wrapped in strict mode code which doesn't define any globals. It's inside a
|
---|
7 | // function because try/catches deoptimize in certain engines.
|
---|
8 |
|
---|
9 | var cachedSetTimeout;
|
---|
10 | var cachedClearTimeout;
|
---|
11 |
|
---|
12 | function defaultSetTimout() {
|
---|
13 | throw new Error('setTimeout has not been defined');
|
---|
14 | }
|
---|
15 | function defaultClearTimeout () {
|
---|
16 | throw new Error('clearTimeout has not been defined');
|
---|
17 | }
|
---|
18 | (function () {
|
---|
19 | try {
|
---|
20 | if (typeof setTimeout === 'function') {
|
---|
21 | cachedSetTimeout = setTimeout;
|
---|
22 | } else {
|
---|
23 | cachedSetTimeout = defaultSetTimout;
|
---|
24 | }
|
---|
25 | } catch (e) {
|
---|
26 | cachedSetTimeout = defaultSetTimout;
|
---|
27 | }
|
---|
28 | try {
|
---|
29 | if (typeof clearTimeout === 'function') {
|
---|
30 | cachedClearTimeout = clearTimeout;
|
---|
31 | } else {
|
---|
32 | cachedClearTimeout = defaultClearTimeout;
|
---|
33 | }
|
---|
34 | } catch (e) {
|
---|
35 | cachedClearTimeout = defaultClearTimeout;
|
---|
36 | }
|
---|
37 | } ())
|
---|
38 | function runTimeout(fun) {
|
---|
39 | if (cachedSetTimeout === setTimeout) {
|
---|
40 | //normal enviroments in sane situations
|
---|
41 | return setTimeout(fun, 0);
|
---|
42 | }
|
---|
43 | // if setTimeout wasn't available but was latter defined
|
---|
44 | if ((cachedSetTimeout === defaultSetTimout || !cachedSetTimeout) && setTimeout) {
|
---|
45 | cachedSetTimeout = setTimeout;
|
---|
46 | return setTimeout(fun, 0);
|
---|
47 | }
|
---|
48 | try {
|
---|
49 | // when when somebody has screwed with setTimeout but no I.E. maddness
|
---|
50 | return cachedSetTimeout(fun, 0);
|
---|
51 | } catch(e){
|
---|
52 | try {
|
---|
53 | // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally
|
---|
54 | return cachedSetTimeout.call(null, fun, 0);
|
---|
55 | } catch(e){
|
---|
56 | // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error
|
---|
57 | return cachedSetTimeout.call(this, fun, 0);
|
---|
58 | }
|
---|
59 | }
|
---|
60 |
|
---|
61 |
|
---|
62 | }
|
---|
63 | function runClearTimeout(marker) {
|
---|
64 | if (cachedClearTimeout === clearTimeout) {
|
---|
65 | //normal enviroments in sane situations
|
---|
66 | return clearTimeout(marker);
|
---|
67 | }
|
---|
68 | // if clearTimeout wasn't available but was latter defined
|
---|
69 | if ((cachedClearTimeout === defaultClearTimeout || !cachedClearTimeout) && clearTimeout) {
|
---|
70 | cachedClearTimeout = clearTimeout;
|
---|
71 | return clearTimeout(marker);
|
---|
72 | }
|
---|
73 | try {
|
---|
74 | // when when somebody has screwed with setTimeout but no I.E. maddness
|
---|
75 | return cachedClearTimeout(marker);
|
---|
76 | } catch (e){
|
---|
77 | try {
|
---|
78 | // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally
|
---|
79 | return cachedClearTimeout.call(null, marker);
|
---|
80 | } catch (e){
|
---|
81 | // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error.
|
---|
82 | // Some versions of I.E. have different rules for clearTimeout vs setTimeout
|
---|
83 | return cachedClearTimeout.call(this, marker);
|
---|
84 | }
|
---|
85 | }
|
---|
86 |
|
---|
87 |
|
---|
88 |
|
---|
89 | }
|
---|
90 | var queue = [];
|
---|
91 | var draining = false;
|
---|
92 | var currentQueue;
|
---|
93 | var queueIndex = -1;
|
---|
94 |
|
---|
95 | function cleanUpNextTick() {
|
---|
96 | if (!draining || !currentQueue) {
|
---|
97 | return;
|
---|
98 | }
|
---|
99 | draining = false;
|
---|
100 | if (currentQueue.length) {
|
---|
101 | queue = currentQueue.concat(queue);
|
---|
102 | } else {
|
---|
103 | queueIndex = -1;
|
---|
104 | }
|
---|
105 | if (queue.length) {
|
---|
106 | drainQueue();
|
---|
107 | }
|
---|
108 | }
|
---|
109 |
|
---|
110 | function drainQueue() {
|
---|
111 | if (draining) {
|
---|
112 | return;
|
---|
113 | }
|
---|
114 | var timeout = runTimeout(cleanUpNextTick);
|
---|
115 | draining = true;
|
---|
116 |
|
---|
117 | var len = queue.length;
|
---|
118 | while(len) {
|
---|
119 | currentQueue = queue;
|
---|
120 | queue = [];
|
---|
121 | while (++queueIndex < len) {
|
---|
122 | if (currentQueue) {
|
---|
123 | currentQueue[queueIndex].run();
|
---|
124 | }
|
---|
125 | }
|
---|
126 | queueIndex = -1;
|
---|
127 | len = queue.length;
|
---|
128 | }
|
---|
129 | currentQueue = null;
|
---|
130 | draining = false;
|
---|
131 | runClearTimeout(timeout);
|
---|
132 | }
|
---|
133 |
|
---|
134 | process.nextTick = function (fun) {
|
---|
135 | var args = new Array(arguments.length - 1);
|
---|
136 | if (arguments.length > 1) {
|
---|
137 | for (var i = 1; i < arguments.length; i++) {
|
---|
138 | args[i - 1] = arguments[i];
|
---|
139 | }
|
---|
140 | }
|
---|
141 | queue.push(new Item(fun, args));
|
---|
142 | if (queue.length === 1 && !draining) {
|
---|
143 | runTimeout(drainQueue);
|
---|
144 | }
|
---|
145 | };
|
---|
146 |
|
---|
147 | // v8 likes predictible objects
|
---|
148 | function Item(fun, array) {
|
---|
149 | this.fun = fun;
|
---|
150 | this.array = array;
|
---|
151 | }
|
---|
152 | Item.prototype.run = function () {
|
---|
153 | this.fun.apply(null, this.array);
|
---|
154 | };
|
---|
155 | process.title = 'browser';
|
---|
156 | process.browser = true;
|
---|
157 | process.env = {};
|
---|
158 | process.argv = [];
|
---|
159 | process.version = ''; // empty string to avoid regexp issues
|
---|
160 | process.versions = {};
|
---|
161 |
|
---|
162 | function noop() {}
|
---|
163 |
|
---|
164 | process.on = noop;
|
---|
165 | process.addListener = noop;
|
---|
166 | process.once = noop;
|
---|
167 | process.off = noop;
|
---|
168 | process.removeListener = noop;
|
---|
169 | process.removeAllListeners = noop;
|
---|
170 | process.emit = noop;
|
---|
171 | process.prependListener = noop;
|
---|
172 | process.prependOnceListener = noop;
|
---|
173 |
|
---|
174 | process.listeners = function (name) { return [] }
|
---|
175 |
|
---|
176 | process.binding = function (name) {
|
---|
177 | throw new Error('process.binding is not supported');
|
---|
178 | };
|
---|
179 |
|
---|
180 | process.cwd = function () { return '/' };
|
---|
181 | process.chdir = function (dir) {
|
---|
182 | throw new Error('process.chdir is not supported');
|
---|
183 | };
|
---|
184 | process.umask = function() { return 0; };
|
---|