Chris@0: /** Chris@0: * @file Chris@0: * Chris@0: * Watch changes to *.es6.js files and compile them to ES5 during development. Chris@0: * Chris@0: * @internal This file is part of the core javascript build process and is only Chris@0: * meant to be used in that context. Chris@0: */ Chris@0: Chris@0: 'use strict'; Chris@0: Chris@0: const fs = require('fs'); Chris@0: const path = require('path'); Chris@0: const chokidar = require('chokidar'); Chris@0: Chris@0: const changeOrAdded = require('./changeOrAdded'); Chris@0: const log = require('./log'); Chris@0: Chris@0: // Match only on .es6.js files. Chris@0: const fileMatch = './**/*.es6.js'; Chris@0: // Ignore everything in node_modules Chris@0: const watcher = chokidar.watch(fileMatch, { Chris@0: ignoreInitial: true, Chris@0: ignored: './node_modules/**' Chris@0: }); Chris@0: Chris@0: const unlinkHandler = (err) => { Chris@0: if (err) { Chris@0: log(err); Chris@0: } Chris@0: }; Chris@0: Chris@0: // Watch for filesystem changes. Chris@0: watcher Chris@0: .on('add', changeOrAdded) Chris@0: .on('change', changeOrAdded) Chris@0: .on('unlink', (filePath) => { Chris@0: const fileName = filePath.slice(0, -7); Chris@0: fs.stat(`${fileName}.js`, () => { Chris@0: fs.unlink(`${fileName}.js`, unlinkHandler); Chris@0: }); Chris@0: }) Chris@0: .on('ready', () => log(`Watching '${fileMatch}' for changes.`));