UNPKG

1.8 kBJavaScriptView Raw
1var _ = require('lodash');
2var async = require('async');
3var fs = require('fs');
4var path = require('path');
5var mkdirp = require('mkdirp');
6var debug = require('debug')('4front:cli:basedir');
7var log = require('./log');
8
9require('simple-errors');
10
11module.exports = function(options, callback) {
12 var baseDir;
13
14 if (_.isString(options.virtualAppManifest.baseDir)) {
15 debug("using basedir from package.json");
16 mkdirp(options.virtualAppManifest.baseDir, function(err) {
17 if (err) return callback(err);
18
19 return callback(null, options.virtualAppManifest.baseDir);
20 });
21 }
22 else if (_.isObject(options.virtualAppManifest.baseDir)) {
23 debug("using build-specific basedir from package.json");
24 buildDirName = options.virtualAppManifest.baseDir[options.buildType];
25 if (!buildDirName)
26 return callback(Error.create("No baseDir specified for buildType " + options.buildType));
27
28 var baseDir = path.join(options.cwd, buildDirName);
29 mkdirp(baseDir, function(err) {
30 if (err) return callback(err);
31
32 return callback(null, baseDir);
33 });
34 }
35 // If there was no explicit baseDir specified in package.json, fallback to convention.
36 else {
37 var baseDirConventions = {
38 debug: ['src', 'app'],
39 release: ['dist', 'build']
40 };
41
42 takeFirstExistsPath(options.cwd,
43 baseDirConventions[options.buildType], callback);
44 }
45};
46
47function takeFirstExistsPath(cwd, candidates, callback) {
48 var baseDir;
49 var i = 0;
50 async.whilst(function() {
51 return _.isUndefined(baseDir) && i < candidates.length;
52 }, function(cb) {
53 var checkDir = path.join(cwd, candidates[i]);
54 fs.exists(checkDir, function(exists) {
55 if (exists === true)
56 baseDir = checkDir;
57
58 i++;
59 cb();
60 });
61 }, function() {
62 if (_.isUndefined(baseDir))
63 baseDir = cwd;
64
65 callback(null, baseDir);
66 });
67}