schunder-madre/web/libraries/mmenu/gulp/js.js

96 lines
2.3 KiB
JavaScript

/*
JS tasks.
*) The "module" file is transpiled from the specified "custom input" dir.
*/
const { src, dest, watch, series } = require('gulp');
const typescript = require('gulp-typescript');
const webpack = require('webpack-stream');
const dirs = require('./dirs.js');
var dir = {};
/** Run all scripts. */
exports.all = JSall = (cb) => {
dir = dirs(false);
series(JStranspile, JSpack)(cb);
};
exports.custom = JScustom = (cb) => {
dir = dirs(true);
series(JSpack)(cb);
};
/** Put a watch on all files. */
exports.watch = JSwatch = (cb) => {
dir = dirs(false);
watch(dir.input + '/**/*.ts', {
ignored: [
dir.input + '/**/*.d.ts', // Exclude all typings.
],
}).on('change', (path) => {
console.log('Change detected to .ts file "' + path + '"');
var cb = () => {
console.log('JS transpiled and concatenated.');
};
// Changing any file only affects the files in the same directory:
// - transpile only the directory to js;
// - pack all.
var files = path.split('/');
files.pop();
files.shift();
files = files.join('/');
var input = dir.input + '/' + files + '/*.ts',
output = dir.output + '/' + files;
var JStranspileOne = (cb) => JStranspile(cb, input, output);
series(JStranspileOne, JSpack)(cb);
});
cb();
};
// *) Transpile all TS files to JS.
const JStranspile = (cb, input, output) => {
return src([
dir.input + '/**/*.d.ts', // Include all typings.
input || (dir.input + '/**/*.ts'), // Include the needed ts files.
])
.pipe(
typescript({
target: 'es5',
module: 'es6',
moduleResolution: 'node',
resolveJsonModule: true,
})
)
.pipe(dest(output || dir.output));
};
// Pack the files.
const JSpack = () => {
var input = dir.build || dir.input;
return src(input + '/mmenu.js')
.pipe(
webpack({
// mode: 'development',
mode: 'production',
output: {
filename: 'mmenu.js',
},
// optimization: {
// minimize: false
// }
})
)
.pipe(dest(dir.output));
};