1 |
|
2 |
|
3 |
|
4 |
|
5 | const
|
6 | gulp = require('gulp'),
|
7 |
|
8 |
|
9 | console = require('better-console'),
|
10 |
|
11 |
|
12 | chmod = require('gulp-chmod'),
|
13 | concat = require('gulp-concat'),
|
14 | dedupe = require('gulp-dedupe'),
|
15 | flatten = require('gulp-flatten'),
|
16 | gulpif = require('gulp-if'),
|
17 | header = require('gulp-header'),
|
18 | normalize = require('normalize-path'),
|
19 | plumber = require('gulp-plumber'),
|
20 | print = require('gulp-print').default,
|
21 | rename = require('gulp-rename'),
|
22 | replace = require('gulp-replace'),
|
23 | uglify = require('gulp-uglify'),
|
24 |
|
25 |
|
26 | config = require('./../config/user'),
|
27 | docsConfig = require('./../config/docs'),
|
28 | tasks = require('../config/tasks'),
|
29 | install = require('../config/project/install'),
|
30 |
|
31 |
|
32 | globs = config.globs,
|
33 | assets = config.paths.assets,
|
34 |
|
35 | banner = tasks.banner,
|
36 | filenames = tasks.filenames,
|
37 | comments = tasks.regExp.comments,
|
38 | log = tasks.log,
|
39 | settings = tasks.settings
|
40 | ;
|
41 |
|
42 |
|
43 |
|
44 |
|
45 |
|
46 |
|
47 |
|
48 |
|
49 | function build(src, type, config) {
|
50 | return gulp.src(src)
|
51 | .pipe(plumber())
|
52 | .pipe(flatten())
|
53 | .pipe(replace(comments.license.in, comments.license.out))
|
54 | .pipe(gulpif(config.hasPermissions, chmod(config.parsedPermissions)))
|
55 | .pipe(gulp.dest(config.paths.output.uncompressed))
|
56 | .pipe(print(log.created))
|
57 | .pipe(uglify(settings.uglify))
|
58 | .pipe(rename(settings.rename.minJS))
|
59 | .pipe(header(banner, settings.header))
|
60 | .pipe(gulpif(config.hasPermissions, chmod(config.parsedPermissions)))
|
61 | .pipe(gulp.dest(config.paths.output.compressed))
|
62 | .pipe(print(log.created))
|
63 | ;
|
64 | }
|
65 |
|
66 |
|
67 |
|
68 |
|
69 |
|
70 |
|
71 | function pack(type, compress) {
|
72 | const output = type === 'docs' ? docsConfig.paths.output : config.paths.output;
|
73 | const concatenatedJS = compress ? filenames.concatenatedMinifiedJS : filenames.concatenatedJS;
|
74 |
|
75 | return gulp.src(output.uncompressed + '/**/' + globs.components + globs.ignored + '.js')
|
76 | .pipe(plumber())
|
77 | .pipe(dedupe())
|
78 | .pipe(replace(assets.uncompressed, assets.packaged))
|
79 | .pipe(concat(concatenatedJS))
|
80 | .pipe(gulpif(compress, uglify(settings.concatUglify)))
|
81 | .pipe(header(banner, settings.header))
|
82 | .pipe(gulpif(config.hasPermissions, chmod(config.parsedPermissions)))
|
83 | .pipe(gulp.dest(output.packaged))
|
84 | .pipe(print(log.created))
|
85 | ;
|
86 | }
|
87 |
|
88 | function buildJS(src, type, config, callback) {
|
89 | if (!install.isSetup()) {
|
90 | console.error('Cannot build Javascript. Run "gulp install" to set-up Semantic');
|
91 | callback();
|
92 | return;
|
93 | }
|
94 |
|
95 | if (callback === undefined) {
|
96 | callback = config;
|
97 | config = type;
|
98 | type = src;
|
99 | src = config.paths.source.definitions + '/**/' + config.globs.components + (config.globs.ignored || '') + '.js';
|
100 | }
|
101 |
|
102 | if (globs.individuals !== undefined && typeof src === 'string') {
|
103 | const individuals = config.globs.individuals.replace('{','');
|
104 | const components = config.globs.components.replace('}',',').concat(individuals);
|
105 |
|
106 | src = config.paths.source.definitions + '/**/' + components + (config.globs.ignored || '') + '.js';
|
107 | }
|
108 |
|
109 |
|
110 | const js = () => build(src, type, config);
|
111 | js.displayName = "Building un/compressed Javascript";
|
112 |
|
113 | const packUncompressed = () => pack(type, false);
|
114 | packUncompressed.displayName = 'Packing uncompressed Javascript';
|
115 |
|
116 | const packCompressed = () => pack(type, true);
|
117 | packCompressed.displayName = 'Packing compressed Javascript';
|
118 |
|
119 | gulp.series(js, gulp.parallel(packUncompressed, packCompressed))(callback);
|
120 | }
|
121 |
|
122 | module.exports = function (callback) {
|
123 | buildJS(false, config, callback);
|
124 | };
|
125 |
|
126 |
|
127 | let timeout, files = [];
|
128 |
|
129 | module.exports.watch = function (type, config) {
|
130 | gulp
|
131 | .watch([normalize(config.paths.source.definitions + '/**/*.js')])
|
132 | .on('all', function (event, path) {
|
133 |
|
134 | if (event === 'unlink' || event === 'unlinkDir') {
|
135 | return;
|
136 | }
|
137 |
|
138 |
|
139 | timeout && clearTimeout(timeout);
|
140 |
|
141 |
|
142 | if (!files.includes(path)) {
|
143 | files.push(path);
|
144 | }
|
145 |
|
146 |
|
147 | timeout = setTimeout(() => {
|
148 | console.log('Change in javascript detected');
|
149 |
|
150 | const buildFiles = [...files];
|
151 |
|
152 | gulp.series((callback) => buildJS(buildFiles, type, config, callback))();
|
153 |
|
154 | files = [];
|
155 | }, 1000);
|
156 | });
|
157 | };
|
158 |
|
159 | module.exports.buildJS = buildJS; |
\ | No newline at end of file |