-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathtypes.ts
84 lines (73 loc) · 2.61 KB
/
types.ts
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
/**
* Scribe is an innovative context-aware workflow orchestrator.
* Copyright (C) 2023 We Can Do Better
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <https://www.gnu.org/licenses/>.
*/
import type Graph from "./lib/Graph.ts";
import type Pipeline from "./lib/Pipeline.ts";
/**
* An object with string keys, can contain any value.
*/
export type AnyRecord = Record<string, any>;
/**
* Executes the next task in the workflow.
*/
export type Next = () => Promise<void>;
/**
* A task is a function that takes a context and a next function.
* @template Ctx The context type.
* @param ctx The context.
* @param next The next function.
* @returns A promise that resolves when the task is done.
*/
export type Task<Ctx> = (ctx: Ctx, next: Next) => Promise<void>;
/**
* A workflow is a task, a pipeline or a graph.
* @template Ctx The context type.
*/
export type Workflow<Ctx = any> = Task<Ctx> | Pipeline<Ctx> | Graph<Ctx>;
/**
* A tail is a function that is called when the workflow is done.
* @returns A promise that resolves when the tail is done.
*/
export type Tail<Ctx> = (ctx: Ctx) => Promise<void>;
/**
* The metadata of a workflow. This is an object with string keys, can contain any value.
*/
export type Metadata = AnyRecord;
/**
* A partial type that makes some properties optional.
* @template T The type to make partial.
* @template K The keys of the type to make partial.
*/
export type PartialBy<T, K extends keyof T> = Omit<T, K> & Partial<Pick<T, K>>;
/**
* A reaadonly version of WeakSet.
* @template T The type of the values in the set.
*/
export type ReadonlyWeakSet<T> = {
/** Checks whether the set has a value. */
has(value: T): boolean;
};
/**
* Extracts the context type from a workflow.
* @template W The workflow type.
*/
export type WorkflowCtx<W extends Workflow<any>> = W extends Workflow<infer Ctx> ? Ctx : never;
/**
* Makes the `ops` property of the type optional.
* @template T The type to make partial.
*/
export type PartialOps<T extends { ops: Record<string, Workflow<any>> }> = Omit<T, "ops"> & Partial<Pick<T, "ops">>;