Skip to content

Commit

Permalink
fix: proper debouncing of fs events in '--watch'
Browse files Browse the repository at this point in the history
  • Loading branch information
hstove committed Nov 18, 2022
1 parent fa41cd0 commit 7c9073e
Show file tree
Hide file tree
Showing 6 changed files with 62 additions and 11 deletions.
5 changes: 5 additions & 0 deletions .changeset/blue-plums-chew.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
---
"clarigen-deno": patch
---

Fixed an issue with `clarigen --watch`, where the "file watcher" would be triggered multiple times in a row, where it should have been debounced.
6 changes: 3 additions & 3 deletions contracts/tester.clar
Original file line number Diff line number Diff line change
Expand Up @@ -4,8 +4,6 @@

(define-map demo-map { a: uint } bool)

(define-non-fungible-token names { name: (buff 48), namespace: (buff 20) })

(define-read-only (square (n uint)) (* n n))

(define-read-only (get-tup) {
Expand Down Expand Up @@ -36,4 +34,6 @@
(buffa (buff 10))
)
(ok true)
)
)

(define-non-fungible-token names { name: (buff 48), namespace: (buff 20) })
13 changes: 11 additions & 2 deletions src/cli/commands/default.ts
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
import { getLevelByName } from '../../deps.ts';
import { getLevelByName, Kia } from '../../deps.ts';
import { Command } from '../cli-deps.ts';
import { VERSION } from '../version.ts';
import { log } from '../logger.ts';
import { log, makeSpinner } from '../logger.ts';
import { generate } from '../generate.ts';
import { watch } from '../watch.ts';

Expand All @@ -12,6 +12,15 @@ type Options = ActionArgs[0];
export async function defaultAction(opts: Options) {
log.debug(`Starting default command with options: %j`, opts);
if (opts.watch) {
let spinner: Kia | undefined;
if (log.level > getLevelByName('DEBUG')) {
spinner = makeSpinner('Generating types');
spinner.start();
}
await generate();
if (spinner?.isSpinning()) {
spinner.succeed('Watching for file changes');
}
await watch();
} else {
await generate();
Expand Down
18 changes: 17 additions & 1 deletion src/cli/logger.ts
Original file line number Diff line number Diff line change
@@ -1,4 +1,12 @@
import { colors, ConsoleHandler, logger, LogRecord, sprintf } from '../deps.ts';
import {
colors,
ConsoleHandler,
Kia,
logger,
LogRecord,
Spinners,
sprintf,
} from '../deps.ts';

const LEVEL_PREFIX: { [key: number]: string } = {
[logger.LogLevels.INFO]: colors.blue('info'),
Expand Down Expand Up @@ -32,3 +40,11 @@ await logger.setup({
});

export const log = logger.getLogger();

export function makeSpinner(text: string) {
return new Kia({
spinner: Spinners.arc,
text,
prefixText: colors.magenta(`[Clarigen] `),
});
}
29 changes: 24 additions & 5 deletions src/cli/watch.ts
Original file line number Diff line number Diff line change
Expand Up @@ -6,11 +6,18 @@ import { cwdRelative } from './cli-utils.ts';

const runDelay = 3000;
let lastRun = new Date().getTime();
let isRunning = false;

export function shouldRun(_event: Deno.FsEvent) {
const isDelayed = new Date().getTime() - lastRun > runDelay;
const isDelayed = (new Date().getTime() - lastRun) > runDelay;
let filesOk = false;
_event.paths.forEach((f) => {
if (f.endsWith('.clar') || f.endsWith('.toml')) {
filesOk = true;
}
});
lastRun = new Date().getTime();
return isDelayed;
return isDelayed && filesOk && !isRunning;
}

export function logFsEvent(event: Deno.FsEvent) {
Expand All @@ -33,11 +40,23 @@ export async function watch() {
const watcher = Deno.watchFs(paths);
for await (const event of watcher) {
if (shouldRun(event)) {
isRunning = true;
logFsEvent(event);
const start = new Date().getTime();
await generate();
const diff = new Date().getTime() - start;
log.debug(colors.black('Done in %.3fs'), diff / 1000);
setTimeout(async () => {
try {
await generate();
} catch (error) {
if ('message' in error) {
log.error(error.message);
} else {
log.error(error);
}
}
const diff = new Date().getTime() - start;
log.debug(colors.black('Done in %.3fs'), diff / 1000);
isRunning = false;
}, 1);
}
}
}
2 changes: 2 additions & 0 deletions src/deps.ts
Original file line number Diff line number Diff line change
Expand Up @@ -39,3 +39,5 @@ export {
unknown,
} from 'https://denoporter.sirjosh.workers.dev/v1/deno.land/x/computed_types/src/index.ts';
export type { Type } from 'https://denoporter.sirjosh.workers.dev/v1/deno.land/x/computed_types/src/index.ts';
export { default as Kia } from 'https://deno.land/x/kia@0.4.1b/mod.ts';
export { Spinners } from 'https://deno.land/x/kia@0.4.1b/spinners.ts';

0 comments on commit 7c9073e

Please sign in to comment.