@motorcycle/types
Version:
A shared-kernel of types for Motorcycle
314 lines (166 loc) • 3.4 kB
Markdown
# @motorcycle/types -- 2.1.0
A shared-kernel of types for Motorcycle
## Get it
```sh
yarn add @motorcycle/types
# or
npm install --save @motorcycle/types
```
## API Documentation
All functions are curried!
#### Component
<p>
Component function type signature
</p>
```typescript
export type Component<
Sources extends { readonly [key: string]: any },
Sinks extends { readonly [key: string]: Stream<any> }
> = (sources: Sources) => Sinks
```
#### Delay
<p>
Delay time offset
</p>
```typescript
export type Delay = number
```
#### Disposable
<p>
Interface of a resource that can be disposed
</p>
```typescript
export interface Disposable {
dispose(): void;
}
```
#### Handle
<p>
Opaque handle type produced by functions like setTimeout
</p>
```typescript
export type Handle = any
```
#### IOComponent
<p>
An IO Component function signature.
</p>
```typescript
export type IOComponent<
Sinks extends { readonly [key: string]: Stream<any> },
Sources extends { readonly [key: string]: any }
> = (sinks: Sinks) => Sources
```
#### Offset
<p>
Relative offset between to Clocks / schedulers
</p>
```typescript
export type Offset = number
```
#### Period
<p>
Span of time between time instants
</p>
```typescript
export type Period = number
```
#### ScheduledTask
<p>
A Task scheduled for a particular time
</p>
```typescript
export interface ScheduledTask {
task: Task;
run(): void;
error(err: Error): void;
dispose(): void;
}
```
#### Scheduler
<p>
A Scheduler
</p>
```typescript
export interface Scheduler {
now(): Time;
asap (task: Task): ScheduledTask;
delay (delay: Delay, task: Task): ScheduledTask;
periodic (period: Period, task: Task): ScheduledTask;
schedule (delay: Delay, period: Period, task: Task): ScheduledTask;
scheduleTask (offset: Offset, delay: Delay, period: Period, task: Task): ScheduledTask;
relative(offset: Offset): Scheduler;
cancel(task: ScheduledTask): void;
cancelAll(predicate: (task: ScheduledTask) => boolean): void;
}
```
#### Sink\<A\>
<p>
Motorcycle Sink type. Used to propagate events.
</p>
```typescript
export interface Sink<A> {
event(time: Time, value: A): void;
end(time: Time): void;
error(time: Time, err: Error): void;
}
```
#### Stream\<A\>
<p>
Motorcycle Stream type
</p>
```typescript
export interface Stream<A> {
run(sink: Sink<A>, scheduler: Scheduler): Disposable
}
```
#### Task
<p>
A generic Task type
</p>
```typescript
export interface Task {
run(time: Time): void;
error(time: Time, e: Error): void;
dispose(): void;
}
```
#### TaskRunner
<p>
Runs a ScheduledTask
</p>
```typescript
export type TaskRunner = (st: ScheduledTask) => any;
```
#### Time
<p>
An instant in time.
</p>
```typescript
export type Time = number
```
#### Timeline
<p>
Keeps track of time
</p>
```typescript
export interface Timeline {
add(scheduledTask: ScheduledTask): void;
remove(scheduledTask: ScheduledTask): boolean;
removeAll(f: (scheduledTask: ScheduledTask) => boolean): void;
isEmpty(): boolean;
nextArrival(): Time;
runTasks(time: Time, runTask: TaskRunner): void;
}
```
#### Timer
<p>
A Timer interface
</p>
```typescript
export interface Timer {
now(): Time;
setTimer(f: () => any, delayTime: Delay): Handle;
clearTimer(timerHandle: Handle): void;
}
```