Add docstrings for event high-order functions

This commit is contained in:
2023-10-08 18:34:03 +02:00
parent 6b8d1b4608
commit 89a0f8a0a3

View File

@ -8,6 +8,12 @@ import {
} from "zifferjs"; } from "zifferjs";
export abstract class Event { export abstract class Event {
/**
* The Event class is the base class for all events. It provides a set of
* functions that can be used to transform an Event. The functions are used
* to create a chain of transformations that are applied to the Event.
*/
seedValue: string | undefined = undefined; seedValue: string | undefined = undefined;
randomGen: Function = Math.random; randomGen: Function = Math.random;
app: Editor; app: Editor;
@ -20,7 +26,55 @@ export abstract class Event {
} }
} }
evenbar = (func: Function) => {
/**
* Returns a transformed Event if the current bar is even.
*
* @param func - The function to be applied to the Event
* @returns The transformed Event
*/
if (this.app.clock.time_position.bar % 2 === 0) {
return this.modify(func);
} else {
return this;
}
};
even = (func: Function) => {
/**
* Returns a transformed Event if the current beat is even.
* @param func - The function to be applied to the Event
* @returns The transformed Event
*
*/
if (this.app.clock.time_position.beat % 2 === 0) {
return this.modify(func);
} else {
return this;
}
};
odd = (func: Function) => {
/**
* Returns a transformed Event if the current beat is odd.
*
* @param func - The function to be applied to the Event
* @returns The transformed Event
*/
if (this.app.clock.time_position.beat % 2 !== 0) {
return this.modify(func);
} else {
return this;
}
};
odds = (probability: number, func: Function): Event => { odds = (probability: number, func: Function): Event => {
/**
* Returns a transformed Event with a given probability.
*
* @param probability - The probability of the Event being transformed
* @param func - The function to be applied to the Event
*/
if (this.randomGen() < probability) { if (this.randomGen() < probability) {
return this.modify(func); return this.modify(func);
} }
@ -29,57 +83,124 @@ export abstract class Event {
// @ts-ignore // @ts-ignore
never = (func: Function): Event => { never = (func: Function): Event => {
/**
* Never return a transformed Event.
*
* @param func - The function to be applied to the Event
* @remarks This function is here for user convenience.
*/
return this; return this;
}; };
almostNever = (func: Function): Event => { almostNever = (func: Function): Event => {
/**
* Returns a transformed Event with a probability of 0.025.
* @param func - The function to be applied to the Event
* @returns The transformed Event
*/
return this.odds(0.025, func); return this.odds(0.025, func);
}; };
rarely = (func: Function): Event => { rarely = (func: Function): Event => {
/**
* Returns a transformed Event with a probability of 0.1.
* @param func - The function to be applied to the Event
* @returns The transformed Event
*/
return this.odds(0.1, func); return this.odds(0.1, func);
}; };
scarcely = (func: Function): Event => { scarcely = (func: Function): Event => {
/**
* Returns a transformed Event with a probability of 0.25.
* @param func - The function to be applied to the Event
* @returns The transformed Event
*/
return this.odds(0.25, func); return this.odds(0.25, func);
}; };
sometimes = (func: Function): Event => { sometimes = (func: Function): Event => {
/**
* Returns a transformed Event with a probability of 0.5.
* @param func - The function to be applied to the Event
* @returns The transformed Event
*/
return this.odds(0.5, func); return this.odds(0.5, func);
}; };
often = (func: Function): Event => { often = (func: Function): Event => {
/**
* Returns a transformed Event with a probability of 0.75.
* @param func - The function to be applied to the Event
* @returns The transformed Event
*/
return this.odds(0.75, func); return this.odds(0.75, func);
}; };
frequently = (func: Function): Event => { frequently = (func: Function): Event => {
/**
* Returns a transformed Event with a probability of 0.9.
* @param func - The function to be applied to the Event
* @returns The transformed Event
*/
return this.odds(0.9, func); return this.odds(0.9, func);
}; };
almostAlways = (func: Function): Event => { almostAlways = (func: Function): Event => {
/**
* Returns a transformed Event with a probability of 0.985.
* @param func - The function to be applied to the Event
* @returns The transformed Event
*/
return this.odds(0.985, func); return this.odds(0.985, func);
}; };
always = (func: Function): Event => { always = (func: Function): Event => {
/**
* Returns a transformed Event with a probability of 1.
* @param func - The function to be applied to the Event
* @remarks This function is here for user convenience.
*/
return this.modify(func); return this.modify(func);
}; };
modify = (func: Function): Event => { private modify = (func: Function): Event => {
/**
* Returns a transformed Event. This function is used internally by the
* other functions of this class. It is just a wrapper for the function
* application.
*/
return func(this); return func(this);
}; };
seed = (value: string | number): Event => { seed = (value: string | number): Event => {
/**
* This function is used to set the seed of the random number generator.
* @param value - The seed value
* @returns The Event
*/
this.seedValue = value.toString(); this.seedValue = value.toString();
this.randomGen = this.app.api.localSeededRandom(this.seedValue); this.randomGen = this.app.api.localSeededRandom(this.seedValue);
return this; return this;
}; };
clear = (): Event => { clear = (): Event => {
/**
* This function is used to clear the seed of the random number generator.
* @returns The Event
*/
this.app.api.clearLocalSeed(this.seedValue); this.app.api.clearLocalSeed(this.seedValue);
return this; return this;
}; };
apply = (func: Function): Event => { apply = (func: Function): Event => {
/**
* This function is used to apply a function to the Event.
* Simple function applicator
*
* @param func - The function to be applied to the Event
* @returns The transformed Event
*/
return this.modify(func); return this.modify(func);
}; };