@runium/types-core 0.0.7

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (2) hide show
  1. package/index.d.ts +414 -0
  2. package/package.json +22 -0
package/index.d.ts ADDED
@@ -0,0 +1,414 @@
1
+ declare module '@runium/core' {
2
+ import { ChildProcessWithoutNullStreams } from 'node:child_process';
3
+ import { EventEmitter } from 'node:events';
4
+ import { WriteStream } from 'node:fs';
5
+
6
+ export function applyMacros(text: string, macros: MacrosCollection): string;
7
+
8
+ export class EventTrigger extends RuniumTrigger<EventTriggerOptions> {
9
+ constructor(options: EventTriggerOptions, project: RuniumTriggerProjectAccessible);
10
+ enable(): void;
11
+ disable(): void;
12
+ }
13
+
14
+ export interface EventTriggerOptions extends RuniumTriggerOptions {
15
+ event: string;
16
+ }
17
+
18
+ export function extendProjectSchema(schema: object, extensions: ProjectSchemaExtension): object;
19
+
20
+ export enum FileErrorCode {
21
+ READ_JSON = "file-read-json",
22
+ WRITE_JSON = "file-write-json"
23
+ }
24
+
25
+ export function getProjectSchema(): object;
26
+
27
+ export const ID_REGEX: RegExp;
28
+
29
+ export class IntervalTrigger extends RuniumTrigger<IntervalTriggerOptions> {
30
+ constructor(options: IntervalTriggerOptions, project: RuniumTriggerProjectAccessible);
31
+ enable(): void;
32
+ disable(): void;
33
+ }
34
+
35
+ export interface IntervalTriggerOptions extends RuniumTriggerOptions {
36
+ interval: number;
37
+ }
38
+
39
+ export function isCustomAction(action: ProjectAction): action is ProjectCustomAction;
40
+
41
+ export function isCustomTrigger(trigger: ProjectTrigger): trigger is ProjectCustomTrigger;
42
+
43
+ export function isProcessTaskAction(action: ProjectAction): action is ProjectActionProcessTask;
44
+
45
+ export function isRuniumError(error: unknown): boolean;
46
+
47
+ export function isToggleTriggerAction(action: ProjectAction): action is ProjectActionToggleTrigger;
48
+
49
+ export interface JSONObject {
50
+ [x: string]: JSONValue;
51
+ }
52
+
53
+ export type JSONValue = string | number | boolean | JSONObject | JSONValue[];
54
+
55
+ export type Macro = (...params: string[]) => string;
56
+
57
+ export type MacrosCollection = Record<string, Macro>;
58
+
59
+ export enum MacrosErrorCode {
60
+ MACRO_APPLY_ERROR = "macro-apply-error"
61
+ }
62
+
63
+ export class Project extends EventEmitter {
64
+ constructor(config: ProjectConfig);
65
+ validate(): void;
66
+ getConfig(): ProjectConfig;
67
+ setConfig(config: ProjectConfig): void;
68
+ getState(): ProjectState;
69
+ start(): Promise<void>;
70
+ stop(reason?: string): Promise<void>;
71
+ extendValidationSchema(extensions: ProjectSchemaExtension): void;
72
+ registerAction(type: string, processor: RuniumActionProcessor): void;
73
+ registerTask(type: string, processor: RuniumTaskConstructor<unknown, any>): void;
74
+ registerTrigger(type: string, processor: RuniumTriggerConstructor<any>): void;
75
+ }
76
+
77
+ export type ProjectAction = ProjectCustomAction | ProjectActionEmitEvent | ProjectActionProcessTask | ProjectActionStopProject | ProjectActionToggleTrigger;
78
+
79
+ export interface ProjectActionEmitEvent {
80
+ type: ProjectActionType.EMIT_EVENT;
81
+ event: string;
82
+ }
83
+
84
+ export interface ProjectActionProcessTask {
85
+ type: ProjectActionType.START_TASK | ProjectActionType.RESTART_TASK | ProjectActionType.STOP_TASK;
86
+ taskId: string;
87
+ }
88
+
89
+ export interface ProjectActionStopProject {
90
+ type: ProjectActionType.STOP_PROJECT;
91
+ }
92
+
93
+ export interface ProjectActionToggleTrigger {
94
+ type: ProjectActionType.ENABLE_TRIGGER | ProjectActionType.DISABLE_TRIGGER;
95
+ triggerId: string;
96
+ }
97
+
98
+ export enum ProjectActionType {
99
+ EMIT_EVENT = "emit-event",
100
+ START_TASK = "start-task",
101
+ RESTART_TASK = "restart-task",
102
+ STOP_TASK = "stop-task",
103
+ STOP_PROJECT = "stop-project",
104
+ ENABLE_TRIGGER = "enable-trigger",
105
+ DISABLE_TRIGGER = "disable-trigger"
106
+ }
107
+
108
+ export interface ProjectConfig {
109
+ id: string;
110
+ name?: string;
111
+ tasks: ProjectTaskConfig[];
112
+ triggers?: ProjectTrigger[];
113
+ }
114
+
115
+ export enum ProjectConfigErrorCode {
116
+ INCORRECT_DATA = "project-config-incorrect-data",
117
+ TASKS_CIRCULAR_DEPENDENCY = "project-config-tasks-circular-dependency",
118
+ TASK_NOT_EXISTS = "project-config-task-not-exists",
119
+ TRIGGER_NOT_EXISTS = "project-config-trigger-not-exists"
120
+ }
121
+
122
+ export interface ProjectCustomAction {
123
+ type: string;
124
+ payload?: unknown;
125
+ }
126
+
127
+ export interface ProjectCustomTrigger extends ProjectTriggerBase {
128
+ type: string;
129
+ payload?: unknown;
130
+ }
131
+
132
+ export interface ProjectDefaultTaskConfig extends ProjectTaskConfig<TaskOptions> {
133
+ type?: ProjectTaskType.DEFAULT;
134
+ }
135
+
136
+ export enum ProjectErrorCode {
137
+ ACTION_PROCESSOR_ALREADY_REGISTERED = "project-action-processor-already-registered",
138
+ ACTION_PROCESSOR_INCORRECT = "project-action-processor-incorrect",
139
+ TASK_PROCESSOR_NOT_FOUND = "project-task-processor-not-found",
140
+ TASK_PROCESSOR_ALREADY_REGISTERED = "project-task-processor-already-registered",
141
+ TASK_PROCESSOR_INCORRECT = "project-task-processor-incorrect",
142
+ TRIGGER_PROCESSOR_ALREADY_REGISTERED = "project-trigger-processor-already-registered",
143
+ TRIGGER_PROCESSOR_INCORRECT = "project-trigger-processor-incorrect"
144
+ }
145
+
146
+ export enum ProjectEvent {
147
+ STATE_CHANGE = "state-change",
148
+ START_TASK = "start-task",
149
+ RESTART_TASK = "restart-task",
150
+ STOP_TASK = "stop-task",
151
+ PROCESS_ACTION = "process-action",
152
+ ENABLE_TRIGGER = "enable-trigger",
153
+ DISABLE_TRIGGER = "disable-trigger",
154
+ TASK_STATE_CHANGE = "task-state-change",
155
+ TASK_STDOUT = "task-stdout",
156
+ TASK_STDERR = "task-stderr"
157
+ }
158
+
159
+ export enum ProjectSchemaErrorCode {
160
+ ACTION_TYPE_ALREADY_USED = "project-schema-action-type-already-used",
161
+ TASK_TYPE_ALREADY_USED = "project-schema-task-type-already-used",
162
+ TRIGGER_TYPE_ALREADY_USED = "project-schema-trigger-type-already-used"
163
+ }
164
+
165
+ export interface ProjectSchemaExtension {
166
+ project?: {
167
+ properties: unknown;
168
+ required?: string[];
169
+ };
170
+ tasks?: Record<string, {
171
+ type: string;
172
+ options: unknown;
173
+ }>;
174
+ definitions?: Record<string, unknown>;
175
+ actions?: Record<string, {
176
+ type: string;
177
+ payload?: unknown;
178
+ }>;
179
+ triggers?: Record<string, {
180
+ type: string;
181
+ payload?: unknown;
182
+ }>;
183
+ }
184
+
185
+ export interface ProjectState {
186
+ status: ProjectStatus;
187
+ timestamp: number;
188
+ reason?: string;
189
+ }
190
+
191
+ export enum ProjectStatus {
192
+ IDLE = "idle",
193
+ STARTING = "starting",
194
+ STARTED = "started",
195
+ STOPPING = "stopping",
196
+ STOPPED = "stopped"
197
+ }
198
+
199
+ export interface ProjectTaskConfig<Options = unknown> {
200
+ id: string;
201
+ options: Options;
202
+ type?: ProjectTaskType | string;
203
+ name?: string;
204
+ mode?: ProjectTaskStartMode;
205
+ dependencies?: ProjectTaskDependency[];
206
+ handlers?: ProjectTaskHandler[];
207
+ restart?: ProjectTaskRestartPolicy;
208
+ }
209
+
210
+ export interface ProjectTaskDependency {
211
+ taskId: string;
212
+ condition: ProjectTaskStateCondition;
213
+ }
214
+
215
+ export interface ProjectTaskHandler {
216
+ condition: ProjectTaskStateCondition;
217
+ action: ProjectAction;
218
+ }
219
+
220
+ export type ProjectTaskRestartPolicy = ProjectTaskRestartPolicyAlways | ProjectTaskRestartPolicyOnFailure;
221
+
222
+ export interface ProjectTaskRestartPolicyAlways {
223
+ policy: ProjectTaskRestartPolicyType.ALWAYS;
224
+ delay?: number;
225
+ }
226
+
227
+ export interface ProjectTaskRestartPolicyOnFailure {
228
+ policy: ProjectTaskRestartPolicyType.ON_FAILURE;
229
+ delay?: number;
230
+ maxRetries?: number;
231
+ }
232
+
233
+ export enum ProjectTaskRestartPolicyType {
234
+ ALWAYS = "always",
235
+ ON_FAILURE = "on-failure"
236
+ }
237
+
238
+ export enum ProjectTaskStartMode {
239
+ IMMEDIATE = "immediate",
240
+ DEFERRED = "deferred",
241
+ IGNORE = "ignore"
242
+ }
243
+
244
+ export type ProjectTaskStateCondition = string | boolean | Partial<RuniumTaskState> | ((state: RuniumTaskState) => boolean);
245
+
246
+ export enum ProjectTaskType {
247
+ DEFAULT = "default"
248
+ }
249
+
250
+ export type ProjectTrigger = ProjectTriggerEvent | ProjectTriggerInterval | ProjectTriggerTimeout | ProjectCustomTrigger;
251
+
252
+ interface ProjectTriggerBase {
253
+ id: string;
254
+ type: ProjectTriggerType | string;
255
+ action: ProjectAction;
256
+ disabled?: boolean;
257
+ }
258
+
259
+ export interface ProjectTriggerEvent extends ProjectTriggerBase {
260
+ type: ProjectTriggerType.EVENT;
261
+ event: string;
262
+ }
263
+
264
+ export interface ProjectTriggerInterval extends ProjectTriggerBase {
265
+ type: ProjectTriggerType.INTERVAL;
266
+ interval: number;
267
+ }
268
+
269
+ export interface ProjectTriggerTimeout extends ProjectTriggerBase {
270
+ type: ProjectTriggerType.TIMEOUT;
271
+ timeout: number;
272
+ }
273
+
274
+ export enum ProjectTriggerType {
275
+ EVENT = "event",
276
+ TIMEOUT = "timeout",
277
+ INTERVAL = "interval"
278
+ }
279
+
280
+ export function readJsonFile<T = JSONValue>(path: string): Promise<T>;
281
+
282
+ type RuniumActionProcessor = (payload: unknown) => void;
283
+
284
+ export class RuniumError extends Error {
285
+ code: string;
286
+ payload: unknown;
287
+ constructor(message: string, code: string, payload?: unknown);
288
+ }
289
+
290
+ export abstract class RuniumTask<Options = unknown, State = RuniumTaskState> extends EventEmitter {
291
+ protected options: Options;
292
+ protected constructor(options: Options);
293
+ abstract getOptions(): Options;
294
+ abstract getState(): State;
295
+ abstract start(): Promise<void>;
296
+ abstract stop(reason?: string): Promise<void>;
297
+ abstract restart(): Promise<void>;
298
+ }
299
+
300
+ export type RuniumTaskConstructor<Options = unknown, State extends RuniumTaskState = RuniumTaskState> = new (options: any) => RuniumTask<Options, State>;
301
+
302
+ export interface RuniumTaskState {
303
+ status: TaskStatus;
304
+ timestamp: number;
305
+ iteration: number;
306
+ exitCode?: number;
307
+ error?: Error;
308
+ reason?: string;
309
+ }
310
+
311
+ export abstract class RuniumTrigger<Options extends RuniumTriggerOptions> {
312
+ protected project: RuniumTriggerProjectAccessible;
313
+ protected id: string;
314
+ protected action: ProjectAction;
315
+ protected disabled: boolean;
316
+ constructor(options: Options, project: RuniumTriggerProjectAccessible);
317
+ abstract enable(): void;
318
+ abstract disable(): void;
319
+ getId(): string;
320
+ isDisabled(): boolean;
321
+ }
322
+
323
+ export type RuniumTriggerConstructor<Options extends RuniumTriggerOptions> = new (options: Options, project: RuniumTriggerProjectAccessible) => RuniumTrigger<Options>;
324
+
325
+ export interface RuniumTriggerOptions {
326
+ id: string;
327
+ action: ProjectAction;
328
+ disabled?: boolean;
329
+ }
330
+
331
+ export interface RuniumTriggerProjectAccessible {
332
+ processAction(action: ProjectAction): void;
333
+ on: NodeJS.EventEmitter['on'];
334
+ off: NodeJS.EventEmitter['off'];
335
+ }
336
+
337
+ export const SILENT_EXIT_CODE = -1;
338
+
339
+ export class Task extends RuniumTask<TaskOptions, TaskState> {
340
+ protected readonly options: TaskOptions;
341
+ protected state: TaskState;
342
+ protected process: ChildProcessWithoutNullStreams | null;
343
+ protected stdoutStream: WriteStream | null;
344
+ protected stderrStream: WriteStream | null;
345
+ protected ttlTimer: NodeJS.Timeout | null;
346
+ constructor(options: TaskOptions);
347
+ getState(): TaskState;
348
+ getOptions(): TaskOptions;
349
+ protected canStart(): boolean;
350
+ start(): Promise<void>;
351
+ protected canStop(): boolean;
352
+ stop(reason?: string): Promise<void>;
353
+ restart(): Promise<void>;
354
+ protected updateState(state: Partial<TaskState>): void;
355
+ protected initLogStreams(): Promise<void>;
356
+ protected setTTLTimer(): void;
357
+ protected addProcessListeners(): void;
358
+ protected onStdOutData(data: Buffer): void;
359
+ protected onStdErrData(data: Buffer): void;
360
+ protected onExit(code: number | null): void;
361
+ protected onError(error: Error): void;
362
+ protected cleanup(): void;
363
+ }
364
+
365
+ export enum TaskEvent {
366
+ STATE_CHANGE = "state-change",
367
+ STDOUT = "stdout",
368
+ STDERR = "stderr"
369
+ }
370
+
371
+ export interface TaskOptions {
372
+ command: string;
373
+ arguments?: string[];
374
+ shell?: boolean;
375
+ stopSignal?: string;
376
+ cwd?: string;
377
+ env?: {
378
+ [key: string]: string | number | boolean;
379
+ };
380
+ ttl?: number;
381
+ log?: {
382
+ stdout?: string | null;
383
+ stderr?: string | null;
384
+ };
385
+ }
386
+
387
+ export interface TaskState extends RuniumTaskState {
388
+ pid: number;
389
+ }
390
+
391
+ export enum TaskStatus {
392
+ IDLE = "idle",
393
+ STARTING = "starting",
394
+ STARTED = "started",
395
+ COMPLETED = "completed",
396
+ FAILED = "failed",
397
+ STOPPING = "stopping",
398
+ STOPPED = "stopped"
399
+ }
400
+
401
+ export class TimeoutTrigger extends RuniumTrigger<TimeoutTriggerOptions> {
402
+ constructor(options: TimeoutTriggerOptions, project: RuniumTriggerProjectAccessible);
403
+ enable(): void;
404
+ disable(): void;
405
+ }
406
+
407
+ export interface TimeoutTriggerOptions extends RuniumTriggerOptions {
408
+ timeout: number;
409
+ }
410
+
411
+ export function validateProject(project: ProjectConfig, schema: object): void;
412
+
413
+ export function writeJsonFile<T = JSONValue>(path: string, data: T): Promise<void>;
414
+ }
package/package.json ADDED
@@ -0,0 +1,22 @@
1
+ {
2
+ "name": "@runium/types-core",
3
+ "version": "0.0.7",
4
+ "description": "TypeScript type definitions for Runium Core",
5
+ "author": "TheBeastApp",
6
+ "license": "MIT",
7
+ "type": "module",
8
+ "main": "index.d.ts",
9
+ "types": "index.d.ts",
10
+ "files": [
11
+ "index.d.ts"
12
+ ],
13
+ "keywords": [
14
+ "runium",
15
+ "core",
16
+ "types",
17
+ "typescript"
18
+ ],
19
+ "devDependencies": {
20
+ "@types/node": "^22.18.0"
21
+ }
22
+ }