1 | const chalk = require('chalk');
|
2 | const path = require('path');
|
3 | const fse = require('fs-extra');
|
4 | const copy = require('recursive-copy');
|
5 | const through = require('through2');
|
6 | const build = require('../build');
|
7 | const translate = require('../translate');
|
8 |
|
9 | const afterLastSlashRegex = /\/*([^/]*)$/;
|
10 |
|
11 | let 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 |
|
51 | module.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 |
|
123 | }).catch(_err => {
|
124 | console.error(_err);
|
125 | throw _err;
|
126 | });
|
127 | });
|
128 | };
|
129 |
|