Code coverage report for lib/tools/broccoli/builder.js

Statements: 63.93% (39 / 61)      Branches: 30% (6 / 20)      Functions: 70% (7 / 10)      Lines: 65% (39 / 60)      Ignored: none     

All files » lib/tools/broccoli/ » builder.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 79 80 81 82 83 84 85 86 87 88 89 90    1 1 1 1 1 1 1 1 1 2 2 2 2 2 2   1 2 2 2 2 2 2 2                                                   2                   2 2 2 7 7     2     1 2 2 2 2             2     1   1 1  
///<reference path="../../.d.ts"/>
"use strict";
var constants = require("../../../lib/constants");
var path = require("path");
var Future = require("fibers/future");
var destCopyLib = require("./node-modules-dest-copy");
var gulp = require("gulp");
var vinylFilterSince = require("vinyl-filter-since");
var through = require("through2");
var Builder = (function () {
    function Builder($fs, $nodeModulesTree, $projectData, $projectDataService, $injector, $logger) {
        this.$fs = $fs;
        this.$nodeModulesTree = $nodeModulesTree;
        this.$projectData = $projectData;
        this.$projectDataService = $projectDataService;
        this.$injector = $injector;
        this.$logger = $logger;
    }
    Builder.prototype.getChangedNodeModules = function (absoluteOutputPath, platform, lastModifiedTime) {
        var _this = this;
        return (function () {
            var projectDir = _this.$projectData.projectDir;
            var isNodeModulesModified = false;
            var nodeModulesPath = path.join(projectDir, constants.NODE_MODULES_FOLDER_NAME);
            var nodeModules = {};
            Iif (lastModifiedTime) {
                var pipeline = gulp.src(path.join(projectDir, "node_modules/**"))
                    .pipe(vinylFilterSince(lastModifiedTime))
                    .pipe(through.obj(function (chunk, enc, cb) {
                    if (chunk.path === nodeModulesPath) {
                        isNodeModulesModified = true;
                    }
                    if (!isNodeModulesModified) {
                        var rootModuleName = chunk.path.split(nodeModulesPath)[1].split(path.sep)[1];
                        var rootModuleFullPath = path.join(nodeModulesPath, rootModuleName);
                        nodeModules[rootModuleFullPath] = rootModuleFullPath;
                    }
                    cb(null);
                }))
                    .pipe(gulp.dest(absoluteOutputPath));
                var future = new Future();
                pipeline.on('end', function (err, data) {
                    if (err) {
                        future.throw(err);
                    }
                    else {
                        future.return();
                    }
                });
                future.wait();
            }
            Iif (isNodeModulesModified && _this.$fs.exists(absoluteOutputPath).wait()) {
                var currentPreparedTnsModules = _this.$fs.readDirectory(absoluteOutputPath).wait();
                var tnsModulesPath = path.join(projectDir, constants.APP_FOLDER_NAME, constants.TNS_MODULES_FOLDER_NAME);
                if (!_this.$fs.exists(tnsModulesPath).wait()) {
                    tnsModulesPath = path.join(projectDir, constants.NODE_MODULES_FOLDER_NAME, constants.TNS_CORE_MODULES_NAME);
                }
                var tnsModulesInApp = _this.$fs.readDirectory(tnsModulesPath).wait();
                var modulesToDelete = _.difference(currentPreparedTnsModules, tnsModulesInApp);
                _.each(modulesToDelete, function (moduleName) { return _this.$fs.deleteDirectory(path.join(absoluteOutputPath, moduleName)).wait(); });
            }
            Eif (!lastModifiedTime || isNodeModulesModified) {
                var nodeModulesDirectories = _this.$fs.exists(nodeModulesPath).wait() ? _this.$fs.readDirectory(nodeModulesPath).wait() : [];
                _.each(nodeModulesDirectories, function (nodeModuleDirectoryName) {
                    var nodeModuleFullPath = path.join(nodeModulesPath, nodeModuleDirectoryName);
                    nodeModules[nodeModuleFullPath] = nodeModuleFullPath;
                });
            }
            return nodeModules;
        }).future()();
    };
    Builder.prototype.prepareNodeModules = function (absoluteOutputPath, platform, lastModifiedTime) {
        var _this = this;
        return (function () {
            var nodeModules = _this.getChangedNodeModules(absoluteOutputPath, platform, lastModifiedTime).wait();
            var destCopy = _this.$injector.resolve(destCopyLib.DestCopy, {
                inputPath: _this.$projectData.projectDir,
                cachePath: "",
                outputRoot: absoluteOutputPath,
                projectDir: _this.$projectData.projectDir,
                platform: platform
            });
            destCopy.rebuildChangedDirectories(_.keys(nodeModules));
        }).future()();
    };
    return Builder;
})();
exports.Builder = Builder;
$injector.register("broccoliBuilder", Builder);