All files async-action.js

0% Statements 0/127
0% Branches 0/99
0% Functions 0/24
0% Lines 0/87

Press n or j to go to the next uncovered block, b, p or k for the previous block.

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 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148                                                                                                                                                                                                                                                                                                       
"use strict";
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
    return new (P || (P = Promise))(function (resolve, reject) {
        function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
        function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
        function step(result) { result.done ? resolve(result.value) : new P(function (resolve) { resolve(result.value); }).then(fulfilled, rejected); }
        step((generator = generator.apply(thisArg, _arguments || [])).next());
    });
};
var __generator = (this && this.__generator) || function (thisArg, body) {
    var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
    return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
    function verb(n) { return function (v) { return step([n, v]); }; }
    function step(op) {
        if (f) throw new TypeError("Generator is already executing.");
        while (_) try {
            if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
            if (y = 0, t) op = [op[0] & 2, t.value];
            switch (op[0]) {
                case 0: case 1: t = op; break;
                case 4: _.label++; return { value: op[1], done: false };
                case 5: _.label++; y = op[1]; op = [0]; continue;
                case 7: op = _.ops.pop(); _.trys.pop(); continue;
                default:
                    if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
                    if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
                    if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
                    if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
                    if (t[2]) _.ops.pop();
                    _.trys.pop(); continue;
            }
            op = body.call(thisArg, _);
        } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
        if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
    }
};
exports.__esModule = true;
/*
 * @Author: lijianzhang
 * @Date: 2018-03-31 21:30:17
 * @Last Modified by: lijianzhang
 * @Last Modified time: 2018-08-30 01:43:25
 */
var action_1 = require("./action");
var utils_1 = require("./utils");
/**
 * Check if `obj` is a generator.
 *
 * @param {Mixed} obj
 * @return {Boolean}
 * @api private
 */
function isGenerator(obj) {
    if (!obj)
        return false;
    return typeof obj.next === 'function' && typeof obj["throw"] === 'function';
}
/**
 * Check if `obj` is a generator function.
 *
 * @param {Mixed} obj
 * @return {Boolean}
 * @api private
 */
function isGeneratorFunction(obj) {
    var constructor = obj.constructor;
    if (!constructor)
        return false;
    if (constructor.name === 'GeneratorFunction' || constructor.displayName === 'GeneratorFunction')
        return true;
    return isGenerator(constructor.prototype);
}
function loopNext(gen, res) {
    if (res === void 0) { res = { done: false, value: null }; }
    return __awaiter(this, void 0, void 0, function () {
        var _a;
        return __generator(this, function (_b) {
            switch (_b.label) {
                case 0:
                    if (res.done)
                        return [2 /*return*/, res.value];
                    res = action_1.runAction.call(gen, gen.next, res.value);
                    if (!(res.value && res.value.then)) return [3 /*break*/, 2];
                    _a = res;
                    return [4 /*yield*/, res.value];
                case 1:
                    _a.value = _b.sent();
                    _b.label = 2;
                case 2: return [2 /*return*/, loopNext(gen, res)];
            }
        });
    });
}
function asyncAction(fn) {
    var args = [];
    for (var _i = 1; _i < arguments.length; _i++) {
        args[_i - 1] = arguments[_i];
    }
    return __awaiter(this, void 0, void 0, function () {
        var generator, res;
        return __generator(this, function (_a) {
            switch (_a.label) {
                case 0:
                    utils_1.invariant(isGeneratorFunction(fn), (fn.name || 'fn') + " must be a generator function");
                    generator = fn.call.apply(fn, [this].concat(args));
                    return [4 /*yield*/, loopNext(generator)];
                case 1:
                    res = _a.sent();
                    return [2 /*return*/, res];
            }
        });
    });
}
exports.asyncAction = asyncAction;
function decorativeAsyncAction(target, key, descriptor) {
    if (key && descriptor) {
        var value_1 = descriptor.value, initializer_1 = descriptor.initializer;
        if (value_1) {
            descriptor.value = function wrapAction() {
                var args = [];
                for (var _i = 0; _i < arguments.length; _i++) {
                    args[_i] = arguments[_i];
                }
                return asyncAction.call.apply(asyncAction, [this, value_1].concat(args));
            };
        }
        else if (initializer_1) {
            descriptor.value = function wrapAction() {
                var args = [];
                for (var _i = 0; _i < arguments.length; _i++) {
                    args[_i] = arguments[_i];
                }
                return asyncAction.call.apply(asyncAction, [this, initializer_1()].concat(args));
            };
            delete descriptor.initializer;
        }
        return descriptor;
    }
    return function () {
        var args = [];
        for (var _i = 0; _i < arguments.length; _i++) {
            args[_i] = arguments[_i];
        }
        return asyncAction.apply(void 0, [target].concat(args));
    };
}
exports["default"] = decorativeAsyncAction;