var gulp = require('gulp'); var sass = require('gulp-sass'); var babel = require('gulp-babel'); var concat = require('gulp-concat'); var rename = require('gulp-rename'); var uglify = require('gulp-uglify'); var rollup = require('rollup-stream'); var sourcemaps = require('gulp-sourcemaps'); var browserSync = require('browser-sync'); var jsonld = require('jsonld'); var source = require('vinyl-source-stream'); var buffer = require('vinyl-buffer'); var through = require('through2') // todo: rollup for d3 & possibly jsonld var paths = { "styles": { "src": "./src/scss/*.scss", "dest": "./assets/css/" }, "scripts": { "src": "./src/js/portfolio.js", "dest": "./assets/js/", "d3src": "./src/js/d3.bundle.js", "d3destDir": "./assets/js/" }, "data": { "src": "./rubenvandeven.jsonld", "dest": "./assets/js/" } }; gulp.task('styles', function() { gulp.src(paths.styles.src, { sourcemaps: true }) .pipe(sass().on('error', sass.logError)) .pipe(gulp.dest(paths.styles.dest)) .pipe(browserSync.reload({ stream: true })); }); gulp.task('scripts', function() { return gulp.src(paths.scripts.src) .pipe(sourcemaps.init()) .pipe(babel({ ignore: [ './src/js/d3.v5.js', ] })) .pipe(concat('portfolio.js')) .pipe(gulp.dest(paths.scripts.dest)) // save .js .pipe(uglify()) .pipe(rename({ extname: '.min.js' })) // .pipe(sourcemaps.write('maps')) .pipe(gulp.dest(paths.scripts.d3destDir)) // save .min.js }); gulp.task('d3', function() { return rollup( 'rollup.config.js' ) .pipe(source('d3.bundle.js')) .pipe(gulp.dest(paths.scripts.d3destDir)) // save .js .pipe(buffer()) .pipe(uglify()) .pipe(rename({ extname: '.min.js' })) .pipe(sourcemaps.write('maps')) .pipe(gulp.dest(paths.scripts.d3destDir)) // save .min.js }); gulp.task('jsonld', function(){ return gulp.src(paths.data.src) .pipe(through.obj(function (file, enc, callback) { let data = JSON.parse(file.contents.toString(enc)); var transformedFile = file.clone(); // console.log(data); jsonld.flatten(data, {}, (err, flattened)=> { transformedFile.contents = Buffer.from(JSON.stringify(flattened), enc); callback(null, transformedFile) }); })) .pipe(gulp.dest(paths.data.dest)); }); var watchStylesAndScripts = function() { gulp.watch(paths.styles.src,['styles']); gulp.watch(paths.scripts.src,['scripts', browserSync.reload]); gulp.watch(paths.scripts.d3src,['d3', browserSync.reload]); gulp.watch([paths.data.src], ['jsonld', browserSync.reload]); } gulp.task('watch', watchStylesAndScripts); // watch files for changes and reload gulp.task('serve', function() { browserSync({ server: { baseDir: '.' } }); gulp.watch(['index.html','rubenvandeven.jsonld'], browserSync.reload({stream: true})); watchStylesAndScripts(); }); gulp.task('default', function() { gulp.parallel('styles', 'scripts'); });