1 |
|
2 | (function() {
|
3 | var async, call, follow, isFunction, isGeneratorFunction, isObject, isPromise, lift, promise, ref, reject, resolve, unhandled,
|
4 | slice = [].slice;
|
5 |
|
6 | ref = require("./type"), isPromise = ref.isPromise, isObject = ref.isObject, isFunction = ref.isFunction, isGeneratorFunction = ref.isGeneratorFunction;
|
7 |
|
8 | unhandled = new Map;
|
9 |
|
10 | process.on("unhandledRejection", function(reason, p) {
|
11 | return console.warn("Warning: unhandled rejection for", p);
|
12 | });
|
13 |
|
14 | promise = function(executor) {
|
15 | return new Promise(executor);
|
16 | };
|
17 |
|
18 | reject = function(x) {
|
19 | return Promise.reject(x);
|
20 | };
|
21 |
|
22 | resolve = function(x) {
|
23 | return Promise.resolve(x);
|
24 | };
|
25 |
|
26 | follow = resolve;
|
27 |
|
28 | lift = function(f) {
|
29 | var key, proxy, value;
|
30 | if (isObject(f)) {
|
31 | proxy = {};
|
32 | for (key in f) {
|
33 | value = f[key];
|
34 | if (isFunction(value)) {
|
35 | proxy[key] = lift(value);
|
36 | }
|
37 | }
|
38 | return proxy;
|
39 | } else {
|
40 | return function() {
|
41 | var args;
|
42 | args = 1 <= arguments.length ? slice.call(arguments, 0) : [];
|
43 | return promise(function(resolve, reject) {
|
44 | var error, error1;
|
45 | try {
|
46 | return f.apply(null, slice.call(args).concat([function() {
|
47 | var _args, error;
|
48 | error = arguments[0], _args = 2 <= arguments.length ? slice.call(arguments, 1) : [];
|
49 | if (error == null) {
|
50 | return resolve.apply(null, _args);
|
51 | } else {
|
52 | return reject(error);
|
53 | }
|
54 | }]));
|
55 | } catch (error1) {
|
56 | error = error1;
|
57 | return reject(error);
|
58 | }
|
59 | });
|
60 | };
|
61 | }
|
62 | };
|
63 |
|
64 | async = function(g) {
|
65 | if (!(isGeneratorFunction(g))) {
|
66 | throw new TypeError(g + " is not a generator function");
|
67 | }
|
68 | return function() {
|
69 | var args, self;
|
70 | args = 1 <= arguments.length ? slice.call(arguments, 0) : [];
|
71 | self = this;
|
72 | return promise(function(resolve, reject) {
|
73 | var f, i, step;
|
74 | i = g.apply(self, args);
|
75 | f = function() {
|
76 | return i.next();
|
77 | };
|
78 | return (step = function(f) {
|
79 | var done, error, error1, ref1, value;
|
80 | try {
|
81 | ref1 = f(), done = ref1.done, value = ref1.value;
|
82 | } catch (error1) {
|
83 | error = error1;
|
84 | reject(error);
|
85 | }
|
86 | if (done) {
|
87 | return resolve(value);
|
88 | } else {
|
89 | return follow(value).then(function(value) {
|
90 | return step(function() {
|
91 | return i.next(value);
|
92 | });
|
93 | })["catch"](function(error) {
|
94 | return step(function() {
|
95 | return i["throw"](error);
|
96 | });
|
97 | });
|
98 | }
|
99 | })(f);
|
100 | });
|
101 | };
|
102 | };
|
103 |
|
104 | call = function(f) {
|
105 | return async(f)();
|
106 | };
|
107 |
|
108 | module.exports = {
|
109 | promise: promise,
|
110 | resolve: resolve,
|
111 | follow: follow,
|
112 | reject: reject,
|
113 | lift: lift,
|
114 | async: async,
|
115 | call: call
|
116 | };
|
117 |
|
118 | }).call(this);
|