UNPKG

3.54 kBJavaScriptView Raw
1const chalk = require('chalk');
2const path = require('path');
3const fse = require('fs-extra');
4const copy = require('recursive-copy');
5const through = require('through2');
6const build = require('../build');
7const translate = require('../translate');
8
9const afterLastSlashRegex = /\/*([^/]*)$/;
10
11let transformFiles = {
12 'main.js': (_str, src, output) => {
13 let str = _str.toString();
14
15 let pathRegex = new RegExp('(.*' + src + '.*:.*)(' + src + ')', 'g');
16 let appIdRegex = new RegExp('(.*applicationId.*)(' + src + ')', 'g');
17
18 let replacer = (match, p1) => {
19 return p1 + output;
20 };
21
22 return str
23 .replace(pathRegex, replacer)
24 .replace(appIdRegex, replacer);
25 },
26 '__build.js': (_str, src, output) => {
27 let str = _str.toString();
28 let pathRegex = new RegExp('(:.*)(' + src + ')', 'g');
29
30 let replacer = (match, p1) => {
31 return p1 + output;
32 };
33
34 return str
35 .replace(pathRegex, replacer);
36 },
37 'index.html': (_str, src, output) => {
38 let str = _str.toString();
39
40 let appIdRegex = new RegExp('(.*applicationRootPath.*)(' + src + ')', 'g');
41
42 let replacer = (match, p1) => {
43 return p1 + output;
44 };
45
46 return str
47 .replace(appIdRegex, replacer);
48 }
49};
50
51module.exports = function buildApp(_args, _outputPath, _configPath) {
52 let apps = [];
53
54 if (typeof _configPath !== 'undefined') {
55 let configPath = path.resolve(_configPath);
56 let config = require(configPath);
57 if (_args.length > 0) {
58 apps = config.apps.filter(element => _args.some(e => e === element.name));
59 } else {
60 apps = config.apps;
61 }
62
63 apps = apps.map(element => {
64 element.src = path.resolve(element.src);
65 element.output = path.resolve(element.output);
66 return element;
67 });
68 } else if (typeof _outputPath !== 'undefined' && _args.length > 0) {
69 let outputPath = path.resolve(_outputPath);
70 let srcPath = path.resolve(_args[0]);
71
72 apps.push({
73 src: srcPath,
74 output: outputPath
75 });
76 }
77
78 apps.forEach((element) => {
79 let srcDirname = element.src.match(afterLastSlashRegex)[1];
80 let outputDirname = element.output.match(afterLastSlashRegex)[1];
81 fse.emptyDirSync(element.output);
82 copy(element.src, element.output, {
83 overwrite: true,
84 dot: true,
85 filter: [
86 '**/*',
87 '!**/.git',
88 '!**/*.spec.js',
89 '!**/node_modules',
90 '!**/bower_components',
91 '!**/karma.conf.js',
92 '!**/main.karma.js',
93 '!**/*.md'
94 ],
95 transform: (_src, _dest, _stats) => {
96 let srcName = path.basename(_src);
97 if (srcName !== 'main.js' && srcName !== 'index.html' &&
98 srcName !== '__build.js') {
99 return null;
100 }
101 return through(function(chunk, enc, done) {
102 let output = chunk.toString();
103 if (typeof transformFiles[srcName] === 'function') {
104 output = transformFiles[srcName](output, srcDirname, outputDirname);
105 }
106 done(null, output);
107 });
108 }
109 }).then((_results) => {
110 console.info(chalk.magenta(_results.length + ' file(s) copied to ',
111 element.output));
112
113 translate
114 .replaceText([element.output])
115 .then(() => {
116 build([element.output], true);
117 })
118 .catch(() => {
119 console.log(chalk.red(element.output + ': translation failed'));
120 build([element.output], true);
121 });
122 /** @todo: translate */
123 }).catch(_err => {
124 console.error(_err);
125 throw _err;
126 });
127 });
128};
129