chore: Adding mainFn helpers

This commit is contained in:
BluJ
2023-04-07 11:43:05 -06:00
parent 74e765511e
commit 49277bfc78
35 changed files with 457 additions and 183 deletions

View File

@@ -0,0 +1,4 @@
export type TriggerInput = {
lastResult: "success" | "failure" | null;
hadSuccess: boolean;
};

View File

@@ -0,0 +1,28 @@
import { TriggerInput } from "./TriggerInput";
import { Trigger } from "./index";
export function changeOnFirstSuccess(o: {
beforeFirstSuccess: Trigger;
afterFirstSuccess: Trigger;
}) {
return async function* () {
const beforeFirstSuccess = o.beforeFirstSuccess();
let currentValue: TriggerInput = yield;
beforeFirstSuccess.next(currentValue);
for (
let res = await beforeFirstSuccess.next(currentValue);
currentValue?.lastResult !== "success" && !res.done;
res = await beforeFirstSuccess.next(currentValue)
) {
currentValue = yield;
}
const afterFirstSuccess = o.afterFirstSuccess();
for (
let res = await afterFirstSuccess.next(currentValue);
!res.done;
res = await afterFirstSuccess.next(currentValue)
) {
currentValue = yield;
}
};
}

View File

@@ -0,0 +1,8 @@
export function cooldownTrigger(timeMs: number) {
return async function* () {
while (true) {
await new Promise((resolve) => setTimeout(resolve, timeMs));
yield;
}
};
}

View File

@@ -0,0 +1,7 @@
import { cooldownTrigger } from "./cooldownTrigger";
import { changeOnFirstSuccess } from "./changeOnFirstSuccess";
export const defaultTrigger = changeOnFirstSuccess({
beforeFirstSuccess: cooldownTrigger(0),
afterFirstSuccess: cooldownTrigger(30000),
});

View File

@@ -0,0 +1,5 @@
import { TriggerInput } from "./TriggerInput";
export { changeOnFirstSuccess } from "./changeOnFirstSuccess";
export { cooldownTrigger } from "./cooldownTrigger";
export type Trigger = () => AsyncIterator<unknown, unknown, TriggerInput>;