34 lines
1015 B
TypeScript
34 lines
1015 B
TypeScript
|
|
import { Smartenv } from '@push.rocks/smartenv';
|
||
|
|
import type { IWatcher, IWatcherOptions, IWatchEvent, TWatchEventType } from './interfaces.js';
|
||
|
|
|
||
|
|
export type { IWatcher, IWatcherOptions, IWatchEvent, TWatchEventType };
|
||
|
|
|
||
|
|
/**
|
||
|
|
* Creates a platform-appropriate file watcher based on the current runtime
|
||
|
|
* Uses @push.rocks/smartenv for runtime detection
|
||
|
|
*/
|
||
|
|
export async function createWatcher(options: IWatcherOptions): Promise<IWatcher> {
|
||
|
|
const env = new Smartenv();
|
||
|
|
|
||
|
|
if (env.isDeno) {
|
||
|
|
// Deno runtime - use Deno.watchFs
|
||
|
|
const { DenoWatcher } = await import('./watcher.deno.js');
|
||
|
|
return new DenoWatcher(options);
|
||
|
|
} else {
|
||
|
|
// Node.js or Bun - both use fs.watch (Bun has Node.js compatibility)
|
||
|
|
const { NodeWatcher } = await import('./watcher.node.js');
|
||
|
|
return new NodeWatcher(options);
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
/**
|
||
|
|
* Default watcher options
|
||
|
|
*/
|
||
|
|
export const defaultWatcherOptions: IWatcherOptions = {
|
||
|
|
basePaths: [],
|
||
|
|
depth: 4,
|
||
|
|
followSymlinks: false,
|
||
|
|
stabilityThreshold: 300,
|
||
|
|
pollInterval: 100
|
||
|
|
};
|