1 | 'use strict';
|
2 |
|
3 | var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; };
|
4 |
|
5 | Object.defineProperty(exports, "__esModule", {
|
6 | value: true
|
7 | });
|
8 | exports.default = undefined;
|
9 |
|
10 | var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
|
11 |
|
12 | var _desc, _value, _class;
|
13 |
|
14 | var _debugDecorator = require('./debug-decorator');
|
15 |
|
16 | Function.prototype.$asyncbind = function $asyncbind(self, catcher) {
|
17 | "use strict";
|
18 |
|
19 | if (!Function.prototype.$asyncbind) {
|
20 | Object.defineProperty(Function.prototype, "$asyncbind", {
|
21 | value: $asyncbind,
|
22 | enumerable: false,
|
23 | configurable: true,
|
24 | writable: true
|
25 | });
|
26 | }
|
27 |
|
28 | if (!$asyncbind.trampoline) {
|
29 | $asyncbind.trampoline = function trampoline(t, x, s, e, u) {
|
30 | return function b(q) {
|
31 | while (q) {
|
32 | if (q.then) {
|
33 | q = q.then(b, e);
|
34 | return u ? undefined : q;
|
35 | }
|
36 |
|
37 | try {
|
38 | if (q.pop) {
|
39 | if (q.length) return q.pop() ? x.call(t) : q;
|
40 | q = s;
|
41 | } else q = q.call(t);
|
42 | } catch (r) {
|
43 | return e(r);
|
44 | }
|
45 | }
|
46 | };
|
47 | };
|
48 | }
|
49 |
|
50 | if (!$asyncbind.LazyThenable) {
|
51 | $asyncbind.LazyThenable = function () {
|
52 | function isThenable(obj) {
|
53 | return obj && obj instanceof Object && typeof obj.then === "function";
|
54 | }
|
55 |
|
56 | function resolution(p, r, how) {
|
57 | try {
|
58 | var x = how ? how(r) : r;
|
59 | if (p === x) return p.reject(new TypeError("Promise resolution loop"));
|
60 |
|
61 | if (isThenable(x)) {
|
62 | x.then(function (y) {
|
63 | resolution(p, y);
|
64 | }, function (e) {
|
65 | p.reject(e);
|
66 | });
|
67 | } else {
|
68 | p.resolve(x);
|
69 | }
|
70 | } catch (ex) {
|
71 | p.reject(ex);
|
72 | }
|
73 | }
|
74 |
|
75 | function Chained() {}
|
76 |
|
77 | ;
|
78 | Chained.prototype = {
|
79 | resolve: _unchained,
|
80 | reject: _unchained,
|
81 | then: thenChain
|
82 | };
|
83 |
|
84 | function _unchained(v) {}
|
85 |
|
86 | function thenChain(res, rej) {
|
87 | this.resolve = res;
|
88 | this.reject = rej;
|
89 | }
|
90 |
|
91 | function then(res, rej) {
|
92 | var chain = new Chained();
|
93 |
|
94 | try {
|
95 | this._resolver(function (value) {
|
96 | return isThenable(value) ? value.then(res, rej) : resolution(chain, value, res);
|
97 | }, function (ex) {
|
98 | resolution(chain, ex, rej);
|
99 | });
|
100 | } catch (ex) {
|
101 | resolution(chain, ex, rej);
|
102 | }
|
103 |
|
104 | return chain;
|
105 | }
|
106 |
|
107 | function Thenable(resolver) {
|
108 | this._resolver = resolver;
|
109 | this.then = then;
|
110 | }
|
111 |
|
112 | ;
|
113 |
|
114 | Thenable.resolve = function (v) {
|
115 | return Thenable.isThenable(v) ? v : {
|
116 | then: function then(resolve) {
|
117 | return resolve(v);
|
118 | }
|
119 | };
|
120 | };
|
121 |
|
122 | Thenable.isThenable = isThenable;
|
123 | return Thenable;
|
124 | }();
|
125 |
|
126 | $asyncbind.EagerThenable = $asyncbind.Thenable = ($asyncbind.EagerThenableFactory = function (tick) {
|
127 | tick = tick || (typeof process === 'undefined' ? 'undefined' : _typeof(process)) === "object" && process.nextTick || typeof setImmediate === "function" && setImmediate || function (f) {
|
128 | setTimeout(f, 0);
|
129 | };
|
130 |
|
131 | var soon = function () {
|
132 | var fq = [],
|
133 | fqStart = 0,
|
134 | bufferSize = 1024;
|
135 |
|
136 | function callQueue() {
|
137 | while (fq.length - fqStart) {
|
138 | fq[fqStart]();
|
139 | fq[fqStart++] = undefined;
|
140 |
|
141 | if (fqStart === bufferSize) {
|
142 | fq.splice(0, bufferSize);
|
143 | fqStart = 0;
|
144 | }
|
145 | }
|
146 | }
|
147 |
|
148 | return function (fn) {
|
149 | fq.push(fn);
|
150 | if (fq.length - fqStart === 1) tick(callQueue);
|
151 | };
|
152 | }();
|
153 |
|
154 | function Zousan(func) {
|
155 | if (func) {
|
156 | var me = this;
|
157 | func(function (arg) {
|
158 | me.resolve(arg);
|
159 | }, function (arg) {
|
160 | me.reject(arg);
|
161 | });
|
162 | }
|
163 | }
|
164 |
|
165 | Zousan.prototype = {
|
166 | resolve: function resolve(value) {
|
167 | if (this.state !== undefined) return;
|
168 | if (value === this) return this.reject(new TypeError("Attempt to resolve promise with self"));
|
169 | var me = this;
|
170 |
|
171 | if (value && (typeof value === "function" || (typeof value === 'undefined' ? 'undefined' : _typeof(value)) === "object")) {
|
172 | try {
|
173 | var first = 0;
|
174 | var then = value.then;
|
175 |
|
176 | if (typeof then === "function") {
|
177 | then.call(value, function (ra) {
|
178 | if (!first++) {
|
179 | me.resolve(ra);
|
180 | }
|
181 | }, function (rr) {
|
182 | if (!first++) {
|
183 | me.reject(rr);
|
184 | }
|
185 | });
|
186 | return;
|
187 | }
|
188 | } catch (e) {
|
189 | if (!first) this.reject(e);
|
190 | return;
|
191 | }
|
192 | }
|
193 |
|
194 | this.state = STATE_FULFILLED;
|
195 | this.v = value;
|
196 | if (me.c) soon(function () {
|
197 | for (var n = 0, l = me.c.length; n < l; n++) {
|
198 | STATE_FULFILLED(me.c[n], value);
|
199 | }
|
200 | });
|
201 | },
|
202 | reject: function reject(reason) {
|
203 | if (this.state !== undefined) return;
|
204 | this.state = STATE_REJECTED;
|
205 | this.v = reason;
|
206 | var clients = this.c;
|
207 | if (clients) soon(function () {
|
208 | for (var n = 0, l = clients.length; n < l; n++) {
|
209 | STATE_REJECTED(clients[n], reason);
|
210 | }
|
211 | });
|
212 | },
|
213 | then: function then(onF, onR) {
|
214 | var p = new Zousan();
|
215 | var client = {
|
216 | y: onF,
|
217 | n: onR,
|
218 | p: p
|
219 | };
|
220 |
|
221 | if (this.state === undefined) {
|
222 | if (this.c) this.c.push(client);else this.c = [client];
|
223 | } else {
|
224 | var s = this.state,
|
225 | a = this.v;
|
226 | soon(function () {
|
227 | s(client, a);
|
228 | });
|
229 | }
|
230 |
|
231 | return p;
|
232 | }
|
233 | };
|
234 |
|
235 | function STATE_FULFILLED(c, arg) {
|
236 | if (typeof c.y === "function") {
|
237 | try {
|
238 | var yret = c.y.call(undefined, arg);
|
239 | c.p.resolve(yret);
|
240 | } catch (err) {
|
241 | c.p.reject(err);
|
242 | }
|
243 | } else c.p.resolve(arg);
|
244 | }
|
245 |
|
246 | function STATE_REJECTED(c, reason) {
|
247 | if (typeof c.n === "function") {
|
248 | try {
|
249 | var yret = c.n.call(undefined, reason);
|
250 | c.p.resolve(yret);
|
251 | } catch (err) {
|
252 | c.p.reject(err);
|
253 | }
|
254 | } else c.p.reject(reason);
|
255 | }
|
256 |
|
257 | Zousan.resolve = function (val) {
|
258 | if (val && val instanceof Zousan) return val;
|
259 | var z = new Zousan();
|
260 | z.resolve(val);
|
261 | return z;
|
262 | };
|
263 |
|
264 | Zousan.reject = function (err) {
|
265 | if (err && err instanceof Zousan) return err;
|
266 | var z = new Zousan();
|
267 | z.reject(err);
|
268 | return z;
|
269 | };
|
270 |
|
271 | Zousan.version = "2.3.2-nodent";
|
272 | return Zousan;
|
273 | })();
|
274 | }
|
275 |
|
276 | var resolver = this;
|
277 |
|
278 | switch (catcher) {
|
279 | case true:
|
280 | return new $asyncbind.Thenable(boundThen);
|
281 |
|
282 | case 0:
|
283 | return new $asyncbind.LazyThenable(boundThen);
|
284 |
|
285 | case undefined:
|
286 | boundThen.then = boundThen;
|
287 | return boundThen;
|
288 |
|
289 | default:
|
290 | return function () {
|
291 | try {
|
292 | return resolver.apply(self, arguments);
|
293 | } catch (ex) {
|
294 | return catcher(ex);
|
295 | }
|
296 | };
|
297 | }
|
298 |
|
299 | function boundThen() {
|
300 | return resolver.apply(self, arguments);
|
301 | }
|
302 | };
|
303 |
|
304 | function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
|
305 |
|
306 | function _applyDecoratedDescriptor(target, property, decorators, descriptor, context) {
|
307 | var desc = {};
|
308 | Object['ke' + 'ys'](descriptor).forEach(function (key) {
|
309 | desc[key] = descriptor[key];
|
310 | });
|
311 | desc.enumerable = !!desc.enumerable;
|
312 | desc.configurable = !!desc.configurable;
|
313 |
|
314 | if ('value' in desc || desc.initializer) {
|
315 | desc.writable = true;
|
316 | }
|
317 |
|
318 | desc = decorators.slice().reverse().reduce(function (desc, decorator) {
|
319 | return decorator(target, property, desc) || desc;
|
320 | }, desc);
|
321 |
|
322 | if (context && desc.initializer !== void 0) {
|
323 | desc.value = desc.initializer ? desc.initializer.call(context) : void 0;
|
324 | desc.initializer = undefined;
|
325 | }
|
326 |
|
327 | if (desc.initializer === void 0) {
|
328 | Object['define' + 'Property'](target, property, desc);
|
329 | desc = null;
|
330 | }
|
331 |
|
332 | return desc;
|
333 | }
|
334 |
|
335 | var FallbackTransport = (_class = function () {
|
336 |
|
337 |
|
338 |
|
339 | function FallbackTransport(transports) {
|
340 | _classCallCheck(this, FallbackTransport);
|
341 |
|
342 | this.name = 'FallbackTransport';
|
343 | this.activeName = '';
|
344 | this.debug = false;
|
345 | this.requestNeeded = false;
|
346 |
|
347 | this.transports = transports;
|
348 | }
|
349 |
|
350 |
|
351 |
|
352 |
|
353 | _createClass(FallbackTransport, [{
|
354 | key: '_tryInitTransports',
|
355 | value: function _tryInitTransports() {
|
356 | return new Promise(function ($return, $error) {
|
357 | var $Try_1_Finally = function ($Try_1_Exit) {
|
358 | return function ($Try_1_Value) {
|
359 | try {
|
360 | if (!_iteratorNormalCompletion && _iterator.return) {
|
361 | _iterator.return();
|
362 | }
|
363 | } catch ($exception_4) {
|
364 | return $Try_3_Finally($error)($exception_4);
|
365 | } finally {
|
366 | if (_didIteratorError) {
|
367 | return $error(_iteratorError);
|
368 | }
|
369 | }
|
370 |
|
371 | return $Try_1_Exit && $Try_1_Exit.call(this, $Try_1_Value);
|
372 | }.$asyncbind(this, $error);
|
373 | }.$asyncbind(this);
|
374 |
|
375 | var res, lastError, _iteratorNormalCompletion, _didIteratorError, _iteratorError, _iterator, _step, transport;
|
376 |
|
377 | res = [];
|
378 | lastError = null;
|
379 | _iteratorNormalCompletion = true;
|
380 | _didIteratorError = false;
|
381 | _iteratorError = undefined;
|
382 |
|
383 | function $Try_1_Post() {
|
384 | if (res.length === 0) {
|
385 | return $error(lastError || new Error('No transport could be initialized.'));
|
386 | }
|
387 | return $return(res);
|
388 | }
|
389 |
|
390 | var $Try_1_Catch = function (err) {
|
391 | _didIteratorError = true;
|
392 | _iteratorError = err;
|
393 | return $Try_1_Finally($Try_1_Post).call(this);
|
394 | }.$asyncbind(this, $Try_1_Finally($error));
|
395 |
|
396 | try {
|
397 | _iterator = this.transports[Symbol.iterator]();
|
398 | return Function.$asyncbind.trampoline(this, $Loop_9_exit, $Loop_9_step, $Try_1_Catch, true)($Loop_9);
|
399 |
|
400 | function $Loop_9() {
|
401 | if (!(_iteratorNormalCompletion = (_step = _iterator.next()).done)) {
|
402 | transport = _step.value;
|
403 |
|
404 | function $Try_2_Post() {
|
405 | return $Loop_9_step;
|
406 | }
|
407 |
|
408 | var $Try_2_Catch = function (e) {
|
409 | lastError = e;
|
410 | return $Try_2_Post.call(this);
|
411 | }.$asyncbind(this, $Try_1_Catch);
|
412 | try {
|
413 | return transport.init(this.debug).then(function ($await_13) {
|
414 | res.push(transport);
|
415 | return $Try_2_Post.call(this);
|
416 | }.$asyncbind(this, $Try_2_Catch), $Try_2_Catch);
|
417 | } catch (e) {
|
418 | $Try_2_Catch(e)
|
419 | }
|
420 | } else return [1];
|
421 | }
|
422 |
|
423 | function $Loop_9_step() {
|
424 | _iteratorNormalCompletion = true;
|
425 | return $Loop_9;
|
426 | }
|
427 |
|
428 | function $Loop_9_exit() {
|
429 | return $Try_1_Finally($Try_1_Post).call(this);
|
430 | }
|
431 | } catch (err) {
|
432 | $Try_1_Catch(err)
|
433 | }
|
434 | }.$asyncbind(this));
|
435 | }
|
436 |
|
437 |
|
438 |
|
439 | }, {
|
440 | key: '_tryConfigureTransports',
|
441 | value: function _tryConfigureTransports(data) {
|
442 | return new Promise(function ($return, $error) {
|
443 | var $Try_5_Finally = function ($Try_5_Exit) {
|
444 | return function ($Try_5_Value) {
|
445 | try {
|
446 | if (!_iteratorNormalCompletion2 && _iterator2.return) {
|
447 | _iterator2.return();
|
448 | }
|
449 | } catch ($exception_8) {
|
450 | return $Try_7_Finally($error)($exception_8);
|
451 | } finally {
|
452 | if (_didIteratorError2) {
|
453 | return $error(_iteratorError2);
|
454 | }
|
455 | }
|
456 |
|
457 | return $Try_5_Exit && $Try_5_Exit.call(this, $Try_5_Value);
|
458 | }.$asyncbind(this, $error);
|
459 | }.$asyncbind(this);
|
460 |
|
461 | var lastError, _iteratorNormalCompletion2, _didIteratorError2, _iteratorError2, _iterator2, _step2, transport;
|
462 |
|
463 | lastError = null;
|
464 | _iteratorNormalCompletion2 = true;
|
465 | _didIteratorError2 = false;
|
466 | _iteratorError2 = undefined;
|
467 |
|
468 | function $Try_5_Post() {
|
469 | return $error(lastError || new Error('No transport could be initialized.'));
|
470 | }
|
471 |
|
472 | var $Try_5_Catch = function (err) {
|
473 | _didIteratorError2 = true;
|
474 | _iteratorError2 = err;
|
475 | return $Try_5_Finally($Try_5_Post).call(this);
|
476 | }.$asyncbind(this, $Try_5_Finally($error));
|
477 | try {
|
478 | _iterator2 = this._availableTransports[Symbol.iterator]();
|
479 | return Function.$asyncbind.trampoline(this, $Loop_11_exit, $Loop_11_step, $Try_5_Catch, true)($Loop_11);
|
480 |
|
481 | function $Loop_11() {
|
482 | if (!(_iteratorNormalCompletion2 = (_step2 = _iterator2.next()).done)) {
|
483 | transport = _step2.value;
|
484 | var $Try_6_Catch = function (e) {
|
485 | lastError = e;
|
486 | return $Loop_11_step;
|
487 | }.$asyncbind(this, $Try_5_Catch);
|
488 | try {
|
489 | return transport.configure(data).then(function ($await_14) {
|
490 | return $Try_5_Finally($return)(transport);
|
491 | }.$asyncbind(this, $Try_6_Catch), $Try_6_Catch);
|
492 | } catch (e) {
|
493 | $Try_6_Catch(e)
|
494 | }
|
495 | } else return [1];
|
496 | }
|
497 |
|
498 | function $Loop_11_step() {
|
499 | _iteratorNormalCompletion2 = true;
|
500 | return $Loop_11;
|
501 | }
|
502 |
|
503 | function $Loop_11_exit() {
|
504 | return $Try_5_Finally($Try_5_Post).call(this);
|
505 | }
|
506 | } catch (err) {
|
507 | $Try_5_Catch(err)
|
508 | }
|
509 | }.$asyncbind(this));
|
510 | }
|
511 | }, {
|
512 | key: 'init',
|
513 | value: function init(debug) {
|
514 | return new Promise(function ($return, $error) {
|
515 | var transports;
|
516 |
|
517 | this.debug = !!debug;
|
518 |
|
519 |
|
520 | return this._tryInitTransports().then(function ($await_15) {
|
521 | transports = $await_15;
|
522 | this._availableTransports = transports;
|
523 |
|
524 |
|
525 |
|
526 | this.version = transports[0].version;
|
527 | this.configured = false;
|
528 | return $return();
|
529 | }.$asyncbind(this, $error), $error);
|
530 | }.$asyncbind(this));
|
531 | }
|
532 | }, {
|
533 | key: 'configure',
|
534 | value: function configure(signedData) {
|
535 | return new Promise(function ($return, $error) {
|
536 | return this._tryConfigureTransports(signedData).then(function ($await_16) {
|
537 | this.activeTransport = $await_16;
|
538 | this.configured = this.activeTransport.configured;
|
539 | this.version = this.activeTransport.version;
|
540 | this.activeName = this.activeTransport.name;
|
541 | this.requestNeeded = this.activeTransport.requestNeeded;
|
542 | return $return();
|
543 | }.$asyncbind(this, $error), $error);
|
544 | }.$asyncbind(this));
|
545 | }
|
546 |
|
547 |
|
548 |
|
549 | }, {
|
550 | key: 'enumerate',
|
551 | value: function enumerate() {
|
552 | return new Promise(function ($return, $error) {
|
553 | return $return(this.activeTransport.enumerate());
|
554 | }.$asyncbind(this));
|
555 | }
|
556 | }, {
|
557 | key: 'listen',
|
558 | value: function listen(old) {
|
559 | return new Promise(function ($return, $error) {
|
560 | return $return(this.activeTransport.listen(old));
|
561 | }.$asyncbind(this));
|
562 | }
|
563 | }, {
|
564 | key: 'acquire',
|
565 | value: function acquire(input) {
|
566 | return new Promise(function ($return, $error) {
|
567 | return $return(this.activeTransport.acquire(input));
|
568 | }.$asyncbind(this));
|
569 | }
|
570 | }, {
|
571 | key: 'release',
|
572 | value: function release(session) {
|
573 | return new Promise(function ($return, $error) {
|
574 | return $return(this.activeTransport.release(session));
|
575 | }.$asyncbind(this));
|
576 | }
|
577 | }, {
|
578 | key: 'call',
|
579 | value: function call(session, name, data) {
|
580 | return new Promise(function ($return, $error) {
|
581 | return $return(this.activeTransport.call(session, name, data));
|
582 | }.$asyncbind(this));
|
583 | }
|
584 | }, {
|
585 | key: 'requestDevice',
|
586 | value: function requestDevice() {
|
587 | return new Promise(function ($return, $error) {
|
588 | return $return(this.activeTransport.requestDevice());
|
589 | }.$asyncbind(this));
|
590 | }
|
591 | }]);
|
592 |
|
593 | return FallbackTransport;
|
594 | }(), (_applyDecoratedDescriptor(_class.prototype, 'init', [_debugDecorator.debugInOut], Object.getOwnPropertyDescriptor(_class.prototype, 'init'), _class.prototype)), _class);
|
595 | exports.default = FallbackTransport;
|
596 | module.exports = exports['default']; |
\ | No newline at end of file |