Code coverage report for lib/common/decorators.js

Statements: 76% (38 / 50)      Branches: 81.82% (9 / 11)      Functions: 75% (9 / 12)      Lines: 75.51% (37 / 49)      Ignored: none     

All files » lib/common/ » decorators.js
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    1 1 1 1 1 14 13 13 10 10 2   10 10 10 10 10     1 1   1   9 31     9 8     6     13     1 1 14 14 11 11 11 7     4         3       1                                 1  
///<reference path=".d.ts"/>
"use strict";
var Promise = require("bluebird");
var fiberBootstrap = require("./fiber-bootstrap");
var assert = require("assert");
var helpers_1 = require("./helpers");
function exportedPromise(moduleName) {
    return function (target, propertyKey, descriptor) {
        $injector.publicApi.__modules__[moduleName] = $injector.publicApi.__modules__[moduleName] || {};
        $injector.publicApi.__modules__[moduleName][propertyKey] = function () {
            var args = [];
            for (var _i = 0; _i < arguments.length; _i++) {
                args[_i - 0] = arguments[_i];
            }
            var originalModule = $injector.resolve(moduleName);
            var originalMethod = originalModule[propertyKey];
            var result;
            try {
                result = originalMethod.apply(originalModule, args);
            }
            catch (err) {
                var promise = new Promise(function (onFulfilled, onRejected) {
                    onRejected(err);
                });
                return promise;
            }
            var types = _(result)
                .groupBy(function (f) { return typeof f; })
                .keys()
                .value();
            if (_.isArray(result) && types.length === 1 && helpers_1.isFuture(_.first(result))) {
                return _.map(result, function (future) { return getPromise(future); });
            }
            else {
                return getPromise(result);
            }
        };
        return descriptor;
    };
}
exports.exportedPromise = exportedPromise;
function getPromise(originalValue) {
    return new Promise(function (onFulfilled, onRejected) {
        if (helpers_1.isFuture(originalValue)) {
            fiberBootstrap.run(function () {
                try {
                    var realResult = originalValue.wait();
                    onFulfilled(realResult);
                }
                catch (err) {
                    onRejected(err);
                }
            });
        }
        else {
            onFulfilled(originalValue);
        }
    });
}
function exported(moduleName) {
    return function (target, propertyKey, descriptor) {
        $injector.publicApi.__modules__[moduleName] = $injector.publicApi.__modules__[moduleName] || {};
        $injector.publicApi.__modules__[moduleName][propertyKey] = function () {
            var args = [];
            for (var _i = 0; _i < arguments.length; _i++) {
                args[_i - 0] = arguments[_i];
            }
            var originalModule = $injector.resolve(moduleName);
            var originalMethod = target[propertyKey];
            var result = originalMethod.apply(originalModule, args);
            assert.strictEqual(helpers_1.isFuture(result), false, "Cannot use exported decorator with function returning IFuture<T>.");
            return result;
        };
        return descriptor;
    };
}
exports.exported = exported;