58 lines
1.4 KiB
TypeScript
58 lines
1.4 KiB
TypeScript
|
import fs from 'fs-extra';
|
||
|
import watch from 'node-watch';
|
||
|
import path from 'path';
|
||
|
|
||
|
import { buildRepository } from './repository/build';
|
||
|
|
||
|
/**
|
||
|
* Create a filesystem watch task for a repository directory
|
||
|
* Equivalent to tsc -w
|
||
|
* @param location Repository path
|
||
|
* @param out Create output files. False - dry run.
|
||
|
* @param doDeploy Use deployment after build success
|
||
|
*/
|
||
|
export async function watchRepository(
|
||
|
location?: string,
|
||
|
out = true,
|
||
|
doDeploy?: string): Promise<void> {
|
||
|
|
||
|
if (!location) {
|
||
|
location = process.cwd();
|
||
|
}
|
||
|
|
||
|
const buildMetaFile = path.join(location, 'squeebot.repo.json');
|
||
|
if (!await fs.pathExists(buildMetaFile)) {
|
||
|
throw new Error(`${location} is not a valid squeebot repository development environment!`);
|
||
|
}
|
||
|
|
||
|
const meta = await fs.readJson(buildMetaFile);
|
||
|
if (!meta.name) {
|
||
|
throw new Error(`${location} is not a valid squeebot repository development environment!`);
|
||
|
}
|
||
|
|
||
|
console.log('Watching repository "%s"!', meta.name);
|
||
|
|
||
|
watch(location, {
|
||
|
recursive: true,
|
||
|
filter(f, skip): any {
|
||
|
if (/\/node_modules/.test(f) ||
|
||
|
/\.out/.test(f) ||
|
||
|
/\.git/.test(f) ||
|
||
|
/\.json$/.test(f)) {
|
||
|
return skip;
|
||
|
}
|
||
|
|
||
|
if (meta.typescript && /\.js$/.test(f)) {
|
||
|
return skip;
|
||
|
}
|
||
|
|
||
|
return true;
|
||
|
},
|
||
|
}, (evt, f) => {
|
||
|
console.log(`\n ==> ${f} changed, rebuilding...`);
|
||
|
buildRepository(location, out, doDeploy).catch((e) => {
|
||
|
console.error(e);
|
||
|
});
|
||
|
});
|
||
|
}
|