UNPKG

3.83 kBTypeScriptView Raw
1import { Resolver } from '@stoplight/json-ref-resolver';
2import { IDisposable } from '@stoplight/lifecycle';
3import { IDiagnostic } from '@stoplight/types';
4import { IPatchableGraph, SelectableNode } from '../graph';
5import { INodeFinder, JsonPatch } from '../graph/dom';
6import { INodeSelector, NodeInstance } from '../graph/nodes';
7import { ITraceData } from '../types';
8export interface ISchedulerStateSnapshot {
9 running: Array<{
10 id: string;
11 op: GraphTaskOp;
12 type?: NodeInstance['type'];
13 spec?: string;
14 path?: NodeInstance['path'];
15 language?: string;
16 }>;
17 tasks: GraphTask[];
18 queued: string[];
19}
20export interface IScheduler {
21 queue: (task: GraphTask) => Promise<void>;
22 queueAll: (tasks: GraphTask[]) => Array<Promise<void>>;
23 queueLength: () => number;
24 run: (task: GraphTask) => Promise<void>;
25 registerHandler: <T extends GraphTask = GraphTask, N extends NodeInstance = NodeInstance>(op: T['op'], handler: ITaskHandler<T, N>) => IDisposable;
26 drain: () => Promise<any>;
27 snapshot: () => ISchedulerStateSnapshot;
28 isBusy: boolean;
29 mightBeStuck: boolean;
30 queuedCount: number;
31}
32export declare enum GraphTaskOp {
33 ReadSourceNode = 1,
34 WriteSourceNode = 2,
35 DeleteSourceNode = 3,
36 MoveSourceNode = 4,
37 SerializeSourceNode = 5,
38 DeserializeSourceNode = 6,
39 DiffRawToParsed = 7,
40 ComputeSourceMap = 8,
41 ResolveSourceNode = 9,
42 ValidateSourceNode = 10,
43 TransformParsed = 11
44}
45export declare type GraphTask = IReadSourceNode | IWriteSourceNode | IDeleteSourceNode | IMoveSourceNode | IDeserializeSourceNode | ISerializeSourceNode | IComputeSourceMap | ITransformedParsedData | IResolveSourceNode | IDiagnoseSourceNode;
46export declare type GraphTaskResult<T extends GraphTask = GraphTask> = T[] | void;
47export declare type TaskRunFunc<T extends GraphTask = GraphTask, N extends NodeInstance = NodeInstance> = (node: N, api: ITaskHandlerApi<T>) => Promise<GraphTaskResult<T>> | GraphTaskResult<T>;
48export interface ITaskHandler<T extends GraphTask = GraphTask, N extends NodeInstance = NodeInstance> extends INodeSelector<N> {
49 id: string;
50 selector(node: SelectableNode): node is N;
51 run: TaskRunFunc<T, N>;
52}
53export interface ITaskHandlerApi<T extends GraphTask = GraphTask> extends Omit<IPatchableGraph, 'setSourceNodeDiagnostics'>, INodeFinder {
54 task: T;
55 runTask: (task: T) => Promise<void>;
56 queueTask: (task: T) => Promise<void>;
57 setSourceNodeDiagnostics(id: string, source: string, diagnostics: IDiagnostic[], trace?: ITraceData): void;
58 resolver: Resolver;
59}
60export interface ITaskBase {
61 op: GraphTaskOp;
62 nodeId: string;
63 trace?: ITraceData;
64}
65export interface IReadSourceNode extends ITaskBase {
66 op: GraphTaskOp.ReadSourceNode;
67}
68export interface IWriteSourceNode extends ITaskBase {
69 op: GraphTaskOp.WriteSourceNode;
70}
71export interface IDeleteSourceNode extends ITaskBase {
72 op: GraphTaskOp.DeleteSourceNode;
73}
74export interface IMoveSourceNode extends ITaskBase {
75 op: GraphTaskOp.MoveSourceNode;
76 newPath?: string;
77 newParentId?: string | null;
78}
79export interface ISerializeSourceNode extends ITaskBase {
80 op: GraphTaskOp.SerializeSourceNode;
81}
82export interface IDeserializeSourceNode extends ITaskBase {
83 op: GraphTaskOp.DeserializeSourceNode;
84 recomputeOnly?: boolean;
85}
86export interface ITransformedParsedData extends ITaskBase {
87 op: GraphTaskOp.TransformParsed;
88 oldValue?: any;
89}
90export interface IComputeSourceMap extends ITaskBase {
91 op: GraphTaskOp.ComputeSourceMap;
92 patch?: JsonPatch;
93}
94export interface IResolveSourceNode extends ITaskBase {
95 op: GraphTaskOp.ResolveSourceNode;
96 tabu?: string[];
97}
98export interface IDiagnoseSourceNode extends ITaskBase {
99 op: GraphTaskOp.ValidateSourceNode;
100}