UNPKG

3.07 kBJavaScriptView Raw
1// Generated by CoffeeScript 1.10.0
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);