@cadenza.io/core 3.0.8 → 3.0.9
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.
- package/dist/index.js +2 -2
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +2 -2
- package/dist/index.mjs.map +1 -1
- package/package.json +1 -1
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/index.ts","../src/utils/tools.ts","../src/engine/SignalBroker.ts","../src/engine/GraphRunner.ts","../src/engine/GraphRun.ts","../src/utils/ColorRandomizer.ts","../src/engine/exporters/vue-flow/VueFlowExportVisitor.ts","../src/engine/exporters/vue-flow/VueFlowExporter.ts","../src/graph/execution/GraphNode.ts","../src/graph/context/GraphContext.ts","../src/graph/iterators/GraphNodeIterator.ts","../src/interfaces/SignalEmitter.ts","../src/utils/promise.ts","../src/graph/definition/GraphRoutine.ts","../src/graph/iterators/TaskIterator.ts","../src/graph/definition/Task.ts","../src/registry/GraphRegistry.ts","../src/graph/definition/DebounceTask.ts","../src/graph/definition/EphemeralTask.ts","../src/interfaces/ExecutionChain.ts","../src/graph/iterators/GraphLayerIterator.ts","../src/interfaces/GraphLayer.ts","../src/graph/execution/SyncGraphLayer.ts","../src/interfaces/GraphBuilder.ts","../src/engine/builders/GraphBreadthFirstBuilder.ts","../src/interfaces/GraphRunStrategy.ts","../src/engine/ThrottleEngine.ts","../src/graph/execution/AsyncGraphLayer.ts","../src/engine/builders/GraphAsyncQueueBuilder.ts","../src/engine/strategy/GraphAsyncRun.ts","../src/engine/strategy/GraphStandardRun.ts","../src/Cadenza.ts","../src/graph/definition/SignalTask.ts"],"sourcesContent":["import Cadenza, { CadenzaMode, TaskOptions } from \"./Cadenza\";\nimport GraphRun from \"./engine/GraphRun\";\nimport GraphRunner from \"./engine/GraphRunner\";\nimport SignalBroker from \"./engine/SignalBroker\";\nimport GraphContext from \"./graph/context/GraphContext\";\nimport DebounceTask, { DebounceOptions } from \"./graph/definition/DebounceTask\";\nimport EphemeralTask, {\n EphemeralTaskOptions,\n} from \"./graph/definition/EphemeralTask\";\nimport GraphRoutine from \"./graph/definition/GraphRoutine\";\nimport SignalTask from \"./graph/definition/SignalTask\";\nimport Task, {\n TaskFunction,\n TaskResult,\n ThrottleTagGetter,\n} from \"./graph/definition/Task\";\nimport SignalEmitter from \"./interfaces/SignalEmitter\";\nimport GraphRegistry from \"./registry/GraphRegistry\";\nimport { AnyObject } from \"./types/global\";\nimport {\n SchemaConstraints,\n SchemaDefinition,\n SchemaType,\n} from \"./types/schema\";\n\nexport default Cadenza;\nexport {\n Task,\n GraphRoutine,\n DebounceTask,\n EphemeralTask,\n SignalTask,\n SignalEmitter,\n GraphContext,\n GraphRegistry,\n GraphRun,\n TaskResult,\n TaskOptions,\n AnyObject,\n SchemaDefinition,\n SchemaConstraints,\n SchemaType,\n ThrottleTagGetter,\n SignalBroker,\n GraphRunner,\n CadenzaMode,\n TaskFunction,\n DebounceOptions,\n EphemeralTaskOptions,\n};\n","/**\n * Deep clones an input with optional filter.\n * @param input The input to clone.\n * @param filterOut Predicate to skip keys (true = skip).\n * @returns Cloned input.\n * @edge Handles arrays/objects; skips cycles with visited.\n * @edge Primitives returned as-is; functions copied by reference.\n */\nexport function deepCloneFilter<T>(\n input: T,\n filterOut: (key: string) => boolean = () => false,\n): T {\n if (input === null || typeof input !== \"object\") {\n return input;\n }\n\n const visited = new WeakMap<any, any>(); // For cycle detection\n\n const stack: Array<{ source: any; target: any; key?: string }> = [];\n const output = Array.isArray(input) ? [] : {};\n\n stack.push({ source: input, target: output });\n visited.set(input, output);\n\n while (stack.length) {\n const { source, target, key } = stack.pop()!;\n const currentTarget = key !== undefined ? target[key] : target;\n\n for (const [k, value] of Object.entries(source)) {\n if (filterOut(k)) continue;\n\n if (value && typeof value === \"object\") {\n if (visited.has(value)) {\n currentTarget[k] = visited.get(value); // Cycle: link to existing clone\n continue;\n }\n\n const clonedValue = Array.isArray(value) ? [] : {};\n currentTarget[k] = clonedValue;\n visited.set(value, clonedValue);\n\n stack.push({ source: value, target: currentTarget, key: k });\n } else {\n currentTarget[k] = value;\n }\n }\n }\n\n return output as T;\n}\n\nexport function formatTimestamp(timestamp: number) {\n return new Date(timestamp).toISOString();\n}\n","import GraphRunner from \"./GraphRunner\";\nimport { AnyObject } from \"../types/global\";\nimport Task from \"../graph/definition/Task\";\nimport GraphRoutine from \"../graph/definition/GraphRoutine\";\nimport Cadenza from \"../Cadenza\";\nimport { formatTimestamp } from \"../utils/tools\";\n\nexport default class SignalBroker {\n static instance_: SignalBroker;\n\n /**\n * Singleton instance for signal management.\n * @returns The broker instance.\n */\n static get instance(): SignalBroker {\n if (!this.instance_) {\n this.instance_ = new SignalBroker();\n }\n return this.instance_;\n }\n\n debug: boolean = false;\n verbose: boolean = false;\n\n setDebug(value: boolean) {\n this.debug = value;\n }\n\n setVerbose(value: boolean) {\n this.verbose = value;\n }\n\n validateSignalName(signalName: string) {\n if (signalName.length > 100) {\n throw new Error(\n `Signal name must be less than 100 characters: ${signalName}`,\n );\n }\n\n if (signalName.includes(\" \")) {\n throw new Error(`Signal name must not contain spaces: ${signalName}\"`);\n }\n\n if (signalName.includes(\"\\\\\")) {\n throw new Error(\n `Signal name must not contain backslashes: ${signalName}`,\n );\n }\n\n if (/[A-Z]/.test(signalName.split(\":\")[0].split(\".\").slice(1).join(\".\"))) {\n throw new Error(\n `Signal name must not contain uppercase letters in the middle of the signal name. It is only allowed in the first part of the signal name: ${signalName}`,\n );\n }\n }\n\n runner: GraphRunner | undefined;\n metaRunner: GraphRunner | undefined;\n\n public getSignalsTask: Task | undefined;\n\n signalObservers: Map<\n string,\n {\n fn: (\n runner: GraphRunner,\n tasks: (Task | GraphRoutine)[],\n context: AnyObject,\n ) => void;\n tasks: Set<Task | GraphRoutine>;\n }\n > = new Map();\n\n emitStacks: Map<string, Map<string, AnyObject>> = new Map(); // execId -> emitted signals\n\n constructor() {\n this.addSignal(\"meta.signal_broker.added\");\n }\n\n /**\n * Initializes with runners.\n * @param runner Standard runner for user signals.\n * @param metaRunner Meta runner for 'meta.' signals (suppresses further meta-emits).\n */\n bootstrap(runner: GraphRunner, metaRunner: GraphRunner): void {\n this.runner = runner;\n this.metaRunner = metaRunner;\n }\n\n init() {\n Cadenza.createMetaTask(\n \"Execute and clear queued signals\",\n () => {\n for (const [id, signals] of this.emitStacks.entries()) {\n signals.forEach((context, signal) => {\n this.execute(signal, context);\n signals.delete(signal);\n });\n\n this.emitStacks.delete(id);\n }\n return true;\n },\n \"Executes queued signals and clears the stack\",\n )\n .doOn(\"meta.process_signal_queue_requested\")\n .emits(\"meta.signal_broker.queue_empty\");\n\n this.getSignalsTask = Cadenza.createMetaTask(\"Get signals\", (ctx) => {\n return {\n __signals: Array.from(this.signalObservers.keys()),\n ...ctx,\n };\n });\n }\n\n /**\n * Observes a signal with a routine/task.\n * @param signal The signal (e.g., 'domain.action', 'domain.*' for wildcards).\n * @param routineOrTask The observer.\n * @edge Duplicates ignored; supports wildcards for broad listening.\n */\n observe(signal: string, routineOrTask: Task | GraphRoutine): void {\n this.addSignal(signal);\n this.signalObservers.get(signal)!.tasks.add(routineOrTask);\n }\n\n /**\n * Unsubscribes a routine/task from a signal.\n * @param signal The signal.\n * @param routineOrTask The observer.\n * @edge Removes all instances if duplicate; deletes if empty.\n */\n unsubscribe(signal: string, routineOrTask: Task | GraphRoutine): void {\n const obs = this.signalObservers.get(signal);\n if (obs) {\n obs.tasks.delete(routineOrTask);\n if (obs.tasks.size === 0) {\n this.signalObservers.delete(signal);\n }\n }\n }\n\n /**\n * Emits a signal and bubbles to matching wildcards/parents (e.g., 'a.b.action' triggers 'a.b.action', 'a.b.*', 'a.*').\n * @param signal The signal name.\n * @param context The payload.\n * @edge Fire-and-forget; guards against loops per execId (from context.__graphExecId).\n * @edge For distribution, SignalTask can prefix and proxy remote.\n */\n emit(signal: string, context: AnyObject = {}): void {\n const execId = context.__routineExecId || \"global\"; // Assume from metadata\n delete context.__routineExecId;\n\n if (!this.emitStacks.has(execId)) this.emitStacks.set(execId, new Map());\n const stack = this.emitStacks.get(execId)!;\n stack.set(signal, context);\n\n let executed = false;\n try {\n executed = this.execute(signal, context);\n } finally {\n if (executed) stack.delete(signal);\n if (stack.size === 0) this.emitStacks.delete(execId);\n }\n }\n\n execute(signal: string, context: AnyObject): boolean {\n const isMeta = signal.startsWith(\"meta.\");\n const isSubMeta = signal.startsWith(\"sub_meta.\") || context.__isSubMeta;\n const isMetric = context.__signalEmission?.isMetric;\n\n if (!isSubMeta && (!isMeta || this.debug)) {\n const emittedAt = Date.now();\n context.__signalEmission = {\n ...context.__signalEmission,\n signalName: signal,\n emittedAt: formatTimestamp(emittedAt),\n consumed: false,\n consumedBy: null,\n isMeta,\n };\n } else if (isSubMeta) {\n context.__isSubMeta = true;\n delete context.__signalEmission;\n } else {\n delete context.__signalEmission;\n }\n\n if (this.debug && ((!isMetric && !isSubMeta) || this.verbose)) {\n console.log(\n `EMITTING ${signal} to listeners ${this.signalObservers.get(signal)?.tasks.size ?? 0} with context ${this.verbose ? JSON.stringify(context) : JSON.stringify(context).slice(0, 100)}`,\n );\n }\n\n let executed;\n executed = this.executeListener(signal, context); // Exact signal\n\n if (!isSubMeta) {\n const parts = signal\n .slice(0, Math.max(signal.lastIndexOf(\":\"), signal.lastIndexOf(\".\")))\n .split(\".\");\n for (let i = parts.length; i > -1; i--) {\n const parent = parts.slice(0, i).join(\".\");\n executed = executed || this.executeListener(parent + \".*\", context); // Wildcard\n }\n }\n\n return executed;\n }\n\n executeListener(signal: string, context: AnyObject): boolean {\n const obs = this.signalObservers.get(signal);\n const isMeta = signal.startsWith(\"meta\");\n const runner = isMeta ? this.metaRunner : this.runner;\n if (obs && obs.tasks.size && runner) {\n obs.fn(runner, Array.from(obs.tasks), context);\n return true;\n }\n return false;\n }\n\n addSignal(signal: string): void {\n let _signal = signal;\n if (!this.signalObservers.has(_signal)) {\n this.validateSignalName(_signal);\n this.signalObservers.set(_signal, {\n fn: (\n runner: GraphRunner,\n tasks: (Task | GraphRoutine)[],\n context: AnyObject,\n ) => runner.run(tasks, context),\n tasks: new Set(),\n });\n\n const sections = _signal.split(\":\");\n if (sections.length === 2) {\n _signal = sections[0];\n\n if (!this.signalObservers.has(sections[0])) {\n this.signalObservers.set(_signal, {\n fn: (\n runner: GraphRunner,\n tasks: (Task | GraphRoutine)[],\n context: AnyObject,\n ) => runner.run(tasks, context),\n tasks: new Set(),\n });\n } else {\n return;\n }\n }\n\n this.emit(\"meta.signal_broker.added\", { __signalName: _signal });\n }\n }\n\n // TODO schedule signals\n\n /**\n * Lists all observed signals.\n * @returns Array of signals.\n */\n listObservedSignals(): string[] {\n return Array.from(this.signalObservers.keys());\n }\n\n reset() {\n this.emitStacks.clear();\n this.signalObservers.clear();\n }\n}\n","import { v4 as uuid } from \"uuid\";\nimport Task from \"../graph/definition/Task\";\nimport GraphRun from \"./GraphRun\";\nimport GraphNode from \"../graph/execution/GraphNode\";\nimport GraphRunStrategy from \"../interfaces/GraphRunStrategy\";\nimport { AnyObject } from \"../types/global\";\nimport GraphRoutine from \"../graph/definition/GraphRoutine\";\nimport SignalEmitter from \"../interfaces/SignalEmitter\";\nimport Cadenza from \"../Cadenza\";\nimport GraphRegistry from \"../registry/GraphRegistry\";\nimport GraphContext from \"../graph/context/GraphContext\";\nimport { formatTimestamp } from \"../utils/tools\";\n\nexport default class GraphRunner extends SignalEmitter {\n currentRun: GraphRun;\n debug: boolean = false;\n verbose: boolean = false;\n isRunning: boolean = false;\n readonly isMeta: boolean = false;\n\n strategy: GraphRunStrategy;\n\n /**\n * Constructs a runner.\n * @param isMeta Meta flag (default false).\n * @edge Creates 'Start run' meta-task chained to registry gets.\n */\n constructor(isMeta: boolean = false) {\n super(isMeta);\n this.isMeta = isMeta;\n this.strategy = Cadenza.runStrategy.PARALLEL;\n this.currentRun = new GraphRun(this.strategy);\n }\n\n init() {\n if (this.isMeta) return;\n\n Cadenza.createMetaTask(\n \"Start run\",\n this.startRun.bind(this),\n \"Starts a run\",\n ).doAfter(\n GraphRegistry.instance.getTaskByName,\n GraphRegistry.instance.getRoutineByName,\n );\n }\n\n /**\n * Adds tasks/routines to current run.\n * @param tasks Tasks/routines.\n * @param context Context (defaults {}).\n * @edge Flattens routines to tasks; generates routineExecId if not in context.\n * @edge Emits 'meta.runner.added_tasks' with metadata.\n * @edge Empty tasks warns no-op.\n */\n addTasks(\n tasks: Task | GraphRoutine | (Task | GraphRoutine)[],\n context: AnyObject = {},\n ): void {\n let _tasks = Array.isArray(tasks) ? tasks : [tasks];\n if (_tasks.length === 0) {\n console.warn(\"No tasks/routines to add.\");\n return;\n }\n\n let routineName = _tasks.map((t) => t.name).join(\" | \");\n let routineVersion = null;\n let isMeta = _tasks.every((t) => t.isMeta);\n\n const allTasks = _tasks.flatMap((t) => {\n if (t instanceof GraphRoutine) {\n routineName = t.name;\n routineVersion = t.version;\n isMeta = t.isMeta;\n const routineTasks: Task[] = [];\n t.forEachTask((task: Task) => routineTasks.push(task));\n return routineTasks;\n }\n return t;\n });\n\n const isSubMeta =\n allTasks.some((t) => t.isSubMeta) || !!context.__isSubMeta;\n context.__isSubMeta = isSubMeta;\n\n const isNewTrace =\n !context.__routineExecId &&\n !context.__metadata?.__executionTraceId &&\n !context.__executionTraceId;\n\n const executionTraceId =\n context.__metadata?.__executionTraceId ??\n context.__executionTraceId ??\n uuid();\n\n context.__executionTraceId = executionTraceId;\n\n const routineExecId = context.__routineExecId ?? uuid();\n context.__routineExecId = routineExecId;\n\n const ctx = new GraphContext(context || {});\n\n if (!isSubMeta) {\n const contextData = ctx.export();\n if (isNewTrace) {\n this.emitMetrics(\"meta.runner.new_trace\", {\n data: {\n uuid: executionTraceId,\n issuer_type: \"service\", // TODO: Add issuer type\n issuer_id:\n context.__metadata?.__issuerId ?? context.__issuerId ?? null,\n issued_at: formatTimestamp(Date.now()),\n intent: context.__metadata?.__intent ?? context.__intent ?? null,\n context: contextData,\n is_meta: isMeta,\n },\n __metadata: {\n __executionTraceId: executionTraceId,\n },\n });\n }\n\n this.emitMetrics(\"meta.runner.added_tasks\", {\n data: {\n uuid: routineExecId,\n name: routineName,\n routineVersion,\n isMeta,\n executionTraceId,\n context: isNewTrace ? contextData.id : contextData,\n previousRoutineExecution: context.__metadata?.__routineExecId ?? null, // TODO: There is a chance this is not added to the database yet...\n created: formatTimestamp(Date.now()),\n },\n __metadata: {\n __executionTraceId: executionTraceId,\n },\n });\n }\n\n allTasks.forEach((task) =>\n this.currentRun.addNode(\n new GraphNode(task, ctx, routineExecId, [], this.debug, this.verbose),\n ),\n );\n }\n\n /**\n * Runs tasks/routines.\n * @param tasks Optional tasks/routines.\n * @param context Optional context.\n * @returns Current/last run (Promise if async).\n * @edge If running, returns current; else runs and resets.\n */\n public run(\n tasks?: Task | GraphRoutine | (Task | GraphRoutine)[],\n context?: AnyObject,\n ): GraphRun | Promise<GraphRun> {\n if (tasks) {\n this.addTasks(tasks, context ?? {});\n }\n\n if (this.isRunning) {\n return this.currentRun;\n }\n\n if (this.currentRun) {\n this.isRunning = true;\n const runResult = this.currentRun.run();\n\n if (runResult instanceof Promise) {\n return this.runAsync(runResult);\n }\n }\n\n return this.reset();\n }\n\n async runAsync(run: Promise<void>): Promise<GraphRun> {\n await run;\n return this.reset();\n }\n\n reset(): GraphRun {\n this.isRunning = false;\n\n const lastRun = this.currentRun;\n\n if (!this.debug) {\n this.destroy();\n }\n\n this.currentRun = new GraphRun(this.strategy);\n\n return lastRun;\n }\n\n public setDebug(value: boolean): void {\n this.debug = value;\n }\n\n public setVerbose(value: boolean): void {\n this.verbose = value;\n }\n\n public destroy(): void {\n this.currentRun.destroy();\n }\n\n public setStrategy(strategy: GraphRunStrategy): void {\n this.strategy = strategy;\n if (!this.isRunning) {\n this.currentRun = new GraphRun(this.strategy);\n }\n }\n\n startRun(context: AnyObject): boolean {\n if (context.__task || context.__routine) {\n const routine = context.__task ?? context.__routine;\n this.run(routine, context);\n return true;\n } else {\n context.errored = true;\n context.__error = \"No routine or task defined.\";\n return false;\n }\n }\n}\n","import { v4 as uuid } from \"uuid\";\nimport GraphNode from \"../graph/execution/GraphNode\";\nimport GraphExporter from \"../interfaces/GraphExporter\";\nimport SyncGraphLayer from \"../graph/execution/SyncGraphLayer\";\nimport GraphRunStrategy from \"../interfaces/GraphRunStrategy\";\nimport GraphLayer from \"../interfaces/GraphLayer\";\nimport VueFlowExporter from \"./exporters/vue-flow/VueFlowExporter\";\n\nexport interface RunJson {\n __id: string;\n __label: string;\n __graph: any;\n __data: any;\n}\n\n// A unique execution of the graph\nexport default class GraphRun {\n readonly id: string;\n graph: GraphLayer | undefined;\n // @ts-ignore\n strategy: GraphRunStrategy;\n exporter: GraphExporter | undefined;\n\n constructor(strategy: GraphRunStrategy) {\n this.id = uuid();\n this.strategy = strategy;\n this.strategy.setRunInstance(this);\n this.exporter = new VueFlowExporter();\n }\n\n setGraph(graph: GraphLayer) {\n this.graph = graph;\n }\n\n addNode(node: GraphNode) {\n this.strategy.addNode(node);\n }\n\n // Composite function / Command execution\n run(): void | Promise<void> {\n return this.strategy.run();\n }\n\n // Composite function\n destroy() {\n this.graph?.destroy();\n this.graph = undefined;\n this.exporter = undefined;\n }\n\n // Composite function\n log() {\n console.log(\"vvvvvvvvvvvvvvvvv\");\n console.log(\"GraphRun\");\n console.log(\"vvvvvvvvvvvvvvvvv\");\n this.graph?.log();\n console.log(\"=================\");\n }\n\n // Memento\n export(): RunJson {\n if (this.exporter && this.graph) {\n const data = this.strategy.export();\n return {\n __id: this.id,\n __label: data.__startTime ?? this.id,\n __graph: this.exporter?.exportGraph(this.graph as SyncGraphLayer),\n __data: data,\n };\n }\n\n return {\n __id: this.id,\n __label: this.id,\n __graph: undefined,\n __data: {},\n };\n }\n\n // Export Strategy\n setExporter(exporter: GraphExporter) {\n this.exporter = exporter;\n }\n}\n","export default class ColorRandomizer {\n numberOfSteps: number;\n stepCounter = 0;\n spread: number;\n range: number;\n\n constructor(numberOfSteps: number = 200, spread: number = 30) {\n this.numberOfSteps = numberOfSteps;\n this.spread = spread;\n this.range = Math.floor(numberOfSteps / this.spread);\n }\n\n rainbow(numOfSteps: number, step: number) {\n // This function generates vibrant, \"evenly spaced\" colours (i.e. no clustering). This is ideal for creating easily distinguishable vibrant markers in Google Maps and other apps.\n // Adam Cole, 2011-Sept-14\n // HSV to RBG adapted from: http://mjijackson.com/2008/02/rgb-to-hsl-and-rgb-to-hsv-color-model-conversion-algorithms-in-javascript\n let r, g, b;\n const h = step / numOfSteps;\n const i = ~~(h * 6);\n const f = h * 6 - i;\n const q = 1 - f;\n switch (i % 6) {\n case 0:\n r = 1;\n g = f;\n b = 0;\n break;\n case 1:\n r = q;\n g = 1;\n b = 0;\n break;\n case 2:\n r = 0;\n g = 1;\n b = f;\n break;\n case 3:\n r = 0;\n g = q;\n b = 1;\n break;\n case 4:\n r = f;\n g = 0;\n b = 1;\n break;\n case 5:\n r = 1;\n g = 0;\n b = q;\n break;\n default:\n r = 0;\n g = 0;\n b = 0;\n break;\n }\n // @ts-ignore\n const c =\n \"#\" +\n (\"00\" + (~~(r * 255)).toString(16)).slice(-2) +\n (\"00\" + (~~(g * 255)).toString(16)).slice(-2) +\n (\"00\" + (~~(b * 255)).toString(16)).slice(-2);\n return c;\n }\n\n getRandomColor() {\n this.stepCounter++;\n\n if (this.stepCounter > this.numberOfSteps) {\n this.stepCounter = 1;\n }\n\n const randomStep =\n ((this.stepCounter * this.range) % this.numberOfSteps) -\n this.range +\n Math.floor(this.stepCounter / this.spread);\n\n return this.rainbow(this.numberOfSteps, randomStep);\n }\n}\n","import GraphVisitor from \"../../../interfaces/GraphVisitor\";\nimport SyncGraphLayer from \"../../../graph/execution/SyncGraphLayer\";\nimport GraphNode from \"../../../graph/execution/GraphNode\";\nimport Task from \"../../../graph/definition/Task\";\nimport ColorRandomizer from \"../../../utils/ColorRandomizer\";\n\nexport default class VueFlowExportVisitor implements GraphVisitor {\n nodeCount = 0;\n elements: any[] = [];\n index = 0;\n numberOfLayerNodes = 0;\n contextToColor: { [id: string]: string } = {};\n colorRandomizer = new ColorRandomizer();\n\n visitLayer(layer: SyncGraphLayer): any {\n const snapshot = layer.export();\n\n this.numberOfLayerNodes = snapshot.__numberOfNodes;\n this.index = 0;\n }\n\n visitNode(node: GraphNode): any {\n const snapshot = node.export();\n\n if (!this.contextToColor[snapshot.__context.id]) {\n this.contextToColor[snapshot.__context.id] =\n this.colorRandomizer.getRandomColor();\n }\n\n const color = this.contextToColor[snapshot.__context.id];\n\n this.elements.push({\n id: snapshot.__id.slice(0, 8),\n label: snapshot.__task.__name,\n position: {\n x: snapshot.__task.__layerIndex * 500,\n y: -50 * this.numberOfLayerNodes * 0.5 + (this.index * 60 + 30),\n },\n sourcePosition: \"right\",\n targetPosition: \"left\",\n style: { backgroundColor: `${color}`, width: \"180px\" },\n data: {\n executionTime: snapshot.__executionTime,\n executionStart: snapshot.__executionStart,\n executionEnd: snapshot.__executionEnd,\n description: snapshot.__task.__description,\n functionString: snapshot.__task.__functionString,\n context: snapshot.__context.context,\n layerIndex: snapshot.__task.__layerIndex,\n },\n });\n\n for (const [index, nextNodeId] of snapshot.__nextNodes.entries()) {\n this.elements.push({\n id: `${snapshot.__id.slice(0, 8)}-${index}`,\n source: snapshot.__id.slice(0, 8),\n target: nextNodeId.slice(0, 8),\n });\n }\n\n this.index++;\n this.nodeCount++;\n }\n\n visitTask(task: Task) {\n const snapshot = task.export();\n\n this.elements.push({\n id: snapshot.__id.slice(0, 8),\n label: snapshot.__name,\n position: { x: snapshot.__layerIndex * 300, y: this.index * 50 + 30 },\n sourcePosition: \"right\",\n targetPosition: \"left\",\n data: {\n description: snapshot.__description,\n functionString: snapshot.__functionString,\n layerIndex: snapshot.__layerIndex,\n },\n });\n\n for (const [index, nextTaskId] of snapshot.__nextTasks.entries()) {\n this.elements.push({\n id: `${snapshot.__id.slice(0, 8)}-${index}`,\n source: snapshot.__id.slice(0, 8),\n target: nextTaskId.slice(0, 8),\n });\n }\n\n this.index++;\n this.nodeCount++;\n }\n\n getElements() {\n return this.elements;\n }\n\n getNodeCount() {\n return this.nodeCount;\n }\n}\n","import GraphExporter from \"../../../interfaces/GraphExporter\";\nimport SyncGraphLayer from \"../../../graph/execution/SyncGraphLayer\";\nimport VueFlowExportVisitor from \"./VueFlowExportVisitor\";\nimport Task from \"../../../graph/definition/Task\";\n\nexport default class VueFlowExporter implements GraphExporter {\n exportGraph(graph: SyncGraphLayer): any {\n const exporterVisitor = new VueFlowExportVisitor();\n const layers = graph.getIterator();\n while (layers.hasNext()) {\n const layer = layers.next();\n layer.accept(exporterVisitor);\n }\n\n return {\n elements: exporterVisitor.getElements(),\n numberOfNodes: exporterVisitor.getNodeCount(),\n };\n }\n\n exportStaticGraph(graph: Task[]) {\n const exporterVisitor = new VueFlowExportVisitor();\n\n let prevTask = null;\n for (const task of graph) {\n if (task === prevTask) {\n continue;\n }\n\n const tasks = task.getIterator();\n const exportedTaskNames: string[] = [];\n\n while (tasks.hasNext()) {\n const task = tasks.next();\n if (task && !exportedTaskNames.includes(task.name)) {\n exportedTaskNames.push(task.name);\n task.accept(exporterVisitor);\n }\n }\n\n prevTask = task;\n }\n\n return {\n elements: exporterVisitor.getElements(),\n numberOfNodes: exporterVisitor.getNodeCount(),\n };\n }\n}\n","import { v4 as uuid } from \"uuid\";\nimport Task, { TaskResult } from \"../definition/Task\";\nimport GraphContext from \"../context/GraphContext\";\nimport Graph from \"../../interfaces/Graph\";\nimport GraphVisitor from \"../../interfaces/GraphVisitor\";\nimport GraphNodeIterator from \"../iterators/GraphNodeIterator\";\nimport SignalEmitter from \"../../interfaces/SignalEmitter\";\nimport GraphLayer from \"../../interfaces/GraphLayer\";\nimport { AnyObject } from \"../../types/global\";\nimport { sleep } from \"../../utils/promise\";\nimport { formatTimestamp } from \"../../utils/tools\";\n\nexport default class GraphNode extends SignalEmitter implements Graph {\n id: string;\n routineExecId: string;\n task: Task;\n context: GraphContext;\n layer: GraphLayer | undefined;\n divided: boolean = false;\n splitGroupId: string = \"\";\n processing: boolean = false;\n subgraphComplete: boolean = false;\n graphComplete: boolean = false;\n result: TaskResult = false;\n retryCount: number = 0;\n retryDelay: number = 0;\n retries: number = 0;\n previousNodes: GraphNode[] = [];\n nextNodes: GraphNode[] = [];\n executionTime: number = 0;\n executionStart: number = 0;\n failed: boolean = false;\n errored: boolean = false;\n destroyed: boolean = false;\n debug: boolean = false;\n verbose: boolean = false;\n\n constructor(\n task: Task,\n context: GraphContext,\n routineExecId: string,\n prevNodes: GraphNode[] = [],\n debug: boolean = false,\n verbose: boolean = false,\n ) {\n super(\n (task.isMeta && !debug) ||\n task.isSubMeta ||\n context?.getMetadata()?.__isSubMeta,\n );\n this.id = uuid();\n this.task = task;\n this.context = context;\n this.retryCount = task.retryCount;\n this.retryDelay = task.retryDelay;\n this.previousNodes = prevNodes;\n this.routineExecId = routineExecId;\n this.splitGroupId = routineExecId;\n this.debug = debug;\n this.verbose = verbose;\n }\n\n setDebug(value: boolean) {\n this.debug = value;\n }\n\n public isUnique() {\n return this.task.isUnique;\n }\n\n public isMeta() {\n return this.task.isMeta;\n }\n\n public isProcessed() {\n return this.divided;\n }\n\n public isProcessing() {\n return this.processing;\n }\n\n public subgraphDone() {\n return this.subgraphComplete;\n }\n\n public graphDone() {\n return this.graphComplete;\n }\n\n public isEqualTo(node: GraphNode) {\n return (\n this.sharesTaskWith(node) &&\n this.sharesContextWith(node) &&\n this.isPartOfSameGraph(node)\n );\n }\n\n public isPartOfSameGraph(node: GraphNode) {\n return this.routineExecId === node.routineExecId;\n }\n\n public sharesTaskWith(node: GraphNode) {\n return this.task.name === node.task.name;\n }\n\n public sharesContextWith(node: GraphNode) {\n return this.context.id === node.context.id;\n }\n\n public getLayerIndex() {\n return this.task.layerIndex;\n }\n\n public getConcurrency() {\n return this.task.concurrency;\n }\n\n public getTag() {\n return this.task.getTag(this.context);\n }\n\n public scheduleOn(layer: GraphLayer) {\n let shouldSchedule = true;\n const nodes = layer.getNodesByRoutineExecId(this.routineExecId);\n for (const node of nodes) {\n if (node.isEqualTo(this)) {\n shouldSchedule = false;\n break;\n }\n\n if (node.sharesTaskWith(this) && node.isUnique()) {\n node.consume(this);\n shouldSchedule = false;\n break;\n }\n }\n\n if (shouldSchedule) {\n this.layer = layer;\n layer.add(this);\n\n const context = this.context.getFullContext();\n\n const scheduledAt = Date.now();\n this.emitMetricsWithMetadata(\"meta.node.scheduled\", {\n data: {\n uuid: this.id,\n routineExecutionId: this.routineExecId,\n executionTraceId:\n context.__executionTraceId ??\n context.__metadata?.__executionTraceId,\n context: this.context.export(),\n taskName: this.task.name,\n taskVersion: this.task.version,\n isMeta: this.isMeta(),\n isScheduled: true,\n splitGroupId: this.splitGroupId,\n created: formatTimestamp(scheduledAt),\n },\n });\n\n this.previousNodes.forEach((node) => {\n this.emitMetricsWithMetadata(\"meta.node.mapped\", {\n data: {\n taskExecutionId: this.id,\n previousTaskExecutionId: node.id,\n executionCount: \"increment\",\n },\n filter: {\n taskName: this.task.name,\n taskVersion: this.task.version,\n previousTaskName: node.task.name,\n previousTaskVersion: node.task.version,\n },\n });\n });\n\n if (\n context.__signalEmission?.consumed === false &&\n (!this.isMeta() || this.debug)\n ) {\n this.emitMetricsWithMetadata(\"meta.node.consumed_signal\", {\n data: {\n signalName: context.__signalEmission.signalName,\n taskName: this.task.name,\n taskVersion: this.task.version,\n taskExecutionId: this.id,\n consumedAt: formatTimestamp(scheduledAt),\n },\n });\n\n context.__signalEmission.consumed = true;\n context.__signalEmission.consumedBy = this.id;\n }\n }\n }\n\n public start() {\n if (this.executionStart === 0) {\n this.executionStart = Date.now();\n }\n\n if (this.previousNodes.length === 0) {\n this.emitMetricsWithMetadata(\"meta.node.started_routine_execution\", {\n data: {\n isRunning: true,\n started: formatTimestamp(this.executionStart),\n },\n filter: { uuid: this.routineExecId },\n });\n }\n\n if (\n (this.debug &&\n !this.task.isSubMeta &&\n !this.context.getMetadata().__isSubMeta) ||\n this.verbose\n ) {\n this.log();\n }\n\n this.emitMetricsWithMetadata(\"meta.node.started\", {\n data: {\n isRunning: true,\n started: formatTimestamp(this.executionStart),\n },\n filter: { uuid: this.id },\n });\n\n return this.executionStart;\n }\n\n public end() {\n if (this.executionStart === 0) {\n return 0;\n }\n\n this.processing = false;\n const end = Date.now();\n this.executionTime = end - this.executionStart;\n\n const context = this.context.getFullContext();\n\n if (this.errored || this.failed) {\n this.emitMetricsWithMetadata(\"meta.node.errored\", {\n data: {\n isRunning: false,\n errored: this.errored,\n failed: this.failed,\n errorMessage: context.__error,\n },\n filter: { uuid: this.id },\n });\n }\n\n this.emitMetricsWithMetadata(\"meta.node.ended\", {\n data: {\n isRunning: false,\n isComplete: true,\n resultContext: this.context.export(),\n errored: this.errored,\n failed: this.failed,\n errorMessage: context.__error,\n progress: 1.0,\n ended: formatTimestamp(end),\n },\n filter: { uuid: this.id },\n });\n\n if (this.graphDone()) {\n // TODO Reminder, Service registry should be listening to this event, (updateSelf)\n this.emitMetricsWithMetadata(\n `meta.node.ended_routine_execution:${this.routineExecId}`,\n {\n data: {\n isRunning: false,\n isComplete: true,\n resultContext: this.context.export(),\n progress: 1.0,\n ended: formatTimestamp(end),\n },\n filter: { uuid: this.routineExecId },\n },\n );\n }\n\n return end;\n }\n\n public execute() {\n if (!this.divided && !this.processing) {\n this.processing = true;\n\n const inputValidation = this.task.validateInput(\n this.isMeta() ? this.context.getMetadata() : this.context.getContext(),\n );\n if (inputValidation !== true) {\n this.onError(inputValidation.__validationErrors);\n this.postProcess();\n return this.nextNodes;\n }\n\n this.result = this.work();\n\n if (this.result instanceof Promise) {\n return this.executeAsync();\n }\n\n const nextNodes = this.postProcess();\n if (nextNodes instanceof Promise) {\n return nextNodes;\n }\n\n this.nextNodes = nextNodes;\n }\n\n return this.nextNodes;\n }\n\n async workAsync() {\n try {\n this.result = await this.result;\n if (\n typeof this.result === \"object\" &&\n (this.result.hasOwnProperty(\"errored\") ||\n this.result.hasOwnProperty(\"failed\"))\n ) {\n const result = await this.retryAsync(this.result);\n if (\n typeof result === \"object\" &&\n (result.hasOwnProperty(\"errored\") || result.hasOwnProperty(\"failed\"))\n ) {\n this.onError(result.error);\n }\n }\n } catch (e: unknown) {\n const result = await this.retryAsync(e);\n if (result === e) {\n this.onError(e);\n }\n }\n }\n\n async executeAsync() {\n await this.workAsync();\n const nextNodes = this.postProcess();\n if (nextNodes instanceof Promise) {\n return nextNodes;\n }\n this.nextNodes = nextNodes;\n return this.nextNodes;\n }\n\n work(): TaskResult | Promise<TaskResult> {\n try {\n const result = this.task.execute(\n this.context,\n this.emitWithMetadata.bind(this),\n this.onProgress.bind(this),\n );\n\n if ((result as any).errored || (result as any).failed) {\n return this.retry(result);\n }\n\n return result;\n } catch (e: unknown) {\n const result = this.retry(e);\n return result.then((result) => {\n if (result !== e) {\n return result;\n }\n\n this.onError(e);\n return this.result;\n });\n }\n }\n\n emitWithMetadata(signal: string, ctx: AnyObject) {\n const data = { ...ctx };\n if (!this.task.isHidden) {\n data.__signalEmission = {\n taskName: this.task.name,\n taskVersion: this.task.version,\n taskExecutionId: this.id,\n };\n const context = this.context.getMetadata();\n data.__metadata = {\n __routineExecId: this.routineExecId,\n __executionTraceId:\n context.__metadata?.__executionTraceId ?? context.__executionTraceId,\n };\n }\n\n this.emit(signal, data);\n }\n\n emitMetricsWithMetadata(signal: string, ctx: AnyObject) {\n const data = { ...ctx };\n if (!this.task.isHidden) {\n data.__signalEmission = {\n taskName: this.task.name,\n taskVersion: this.task.version,\n taskExecutionId: this.id,\n isMetric: true,\n };\n const context = this.context.getMetadata();\n data.__metadata = {\n __routineExecId: this.routineExecId,\n __executionTraceId:\n context.__metadata?.__executionTraceId ?? context.__executionTraceId,\n };\n }\n\n this.emitMetrics(signal, data);\n }\n\n onProgress(progress: number) {\n progress = Math.min(Math.max(0, progress), 1);\n\n this.emitMetricsWithMetadata(\"meta.node.progress\", {\n data: {\n progress,\n },\n filter: {\n uuid: this.id,\n },\n });\n\n this.emitMetricsWithMetadata(\n `meta.node.routine_execution_progress:${this.routineExecId}`,\n {\n data: {\n progress:\n (progress * this.task.progressWeight) /\n (this.layer?.getIdenticalNodes(this).length ?? 1),\n },\n filter: {\n uuid: this.routineExecId,\n },\n },\n );\n }\n\n postProcess() {\n if (typeof this.result === \"string\") {\n this.onError(\n `Returning strings is not allowed. Returned: ${this.result}`,\n );\n }\n\n if (Array.isArray(this.result)) {\n this.onError(`Returning arrays is not allowed. Returned: ${this.result}`);\n }\n\n const nextNodes = this.divide();\n\n if (nextNodes instanceof Promise) {\n return this.postProcessAsync(nextNodes);\n }\n\n this.nextNodes = nextNodes;\n this.finalize();\n return this.nextNodes;\n }\n\n async postProcessAsync(nextNodes: Promise<GraphNode[]>) {\n this.nextNodes = await nextNodes;\n this.finalize();\n return this.nextNodes;\n }\n\n finalize() {\n if (this.nextNodes.length === 0) {\n this.completeSubgraph();\n }\n\n if (this.errored || this.failed) {\n this.task.mapOnFailSignals((signal: string) =>\n this.emitWithMetadata(signal, this.context.getFullContext()),\n );\n } else if (this.result !== undefined && this.result !== false) {\n this.task.mapSignals((signal: string) =>\n this.emitWithMetadata(signal, this.context.getFullContext()),\n );\n }\n\n this.end();\n }\n\n onError(error: unknown, errorData: AnyObject = {}) {\n this.result = {\n ...this.context.getFullContext(),\n __error: `Node error: ${error}`,\n __retries: this.retries,\n error: `Node error: ${error}`,\n returnedValue: this.result,\n ...errorData,\n };\n this.migrate(this.result);\n this.errored = true;\n }\n\n async retry(prevResult?: any): Promise<TaskResult> {\n if (this.retryCount === 0) {\n return prevResult;\n }\n\n await this.delayRetry();\n return this.work();\n }\n\n async retryAsync(prevResult?: any): Promise<TaskResult> {\n if (this.retryCount === 0) {\n return prevResult;\n }\n\n await this.delayRetry();\n this.result = this.work();\n return this.workAsync();\n }\n\n async delayRetry() {\n this.retryCount--;\n this.retries++;\n await sleep(this.retryDelay);\n this.retryDelay *= this.task.retryDelayFactor;\n if (this.retryDelay > this.task.retryDelayMax) {\n this.retryDelay = this.task.retryDelayMax;\n }\n }\n\n divide(): GraphNode[] | Promise<GraphNode[]> {\n const newNodes: GraphNode[] = [];\n\n if (\n (this.result as Generator)?.next &&\n typeof (this.result as Generator).next === \"function\"\n ) {\n const generator = this.result as Generator;\n let current = generator.next();\n if (current instanceof Promise) {\n return this.divideAsync(current);\n }\n\n while (!current.done && current.value !== undefined) {\n const outputValidation = this.task.validateOutput(current.value as any);\n if (outputValidation !== true) {\n this.onError(outputValidation.__validationErrors);\n break;\n } else {\n newNodes.push(...this.generateNewNodes(current.value));\n current = generator.next();\n }\n }\n } else if (this.result !== undefined && !this.errored) {\n newNodes.push(...this.generateNewNodes(this.result));\n\n if (typeof this.result !== \"boolean\") {\n const outputValidation = this.task.validateOutput(this.result as any);\n if (outputValidation !== true) {\n this.onError(outputValidation.__validationErrors);\n }\n\n this.divided = true;\n this.migrate({\n ...this.result,\n ...this.context.getMetadata(),\n __nextNodes: newNodes.map((n) => n.id),\n __retries: this.retries,\n });\n\n return newNodes;\n }\n }\n\n if (this.errored) {\n newNodes.push(\n ...this.task.mapNext(\n (t: Task) =>\n this.clone()\n .split(uuid())\n .differentiate(t)\n .migrate({ ...(this.result as any) }),\n true,\n ),\n );\n }\n\n this.divided = true;\n this.migrate({\n ...this.context.getFullContext(),\n __nextNodes: newNodes.map((n) => n.id),\n __retries: this.retries,\n });\n\n return newNodes;\n }\n\n async divideAsync(\n current: Promise<IteratorResult<any>>,\n ): Promise<GraphNode[]> {\n const nextNodes: GraphNode[] = [];\n const _current = await current;\n\n const outputValidation = this.task.validateOutput(_current.value as any);\n if (outputValidation !== true) {\n this.onError(outputValidation.__validationErrors);\n return nextNodes;\n } else {\n nextNodes.push(...this.generateNewNodes(_current.value));\n }\n\n for await (const result of this.result as AsyncGenerator<any>) {\n const outputValidation = this.task.validateOutput(result);\n if (outputValidation !== true) {\n this.onError(outputValidation.__validationErrors);\n return [];\n } else {\n nextNodes.push(...this.generateNewNodes(result));\n }\n }\n\n this.divided = true;\n\n return nextNodes;\n }\n\n generateNewNodes(result: any) {\n const groupId = uuid();\n const newNodes = [];\n if (typeof result !== \"boolean\") {\n const failed =\n (result.failed !== undefined && result.failed) ||\n result.error !== undefined;\n newNodes.push(\n ...(this.task.mapNext((t: Task) => {\n const context = t.isUnique\n ? {\n joinedContexts: [\n { ...result, taskName: this.task.name, __nodeId: this.id },\n ],\n ...this.context.getMetadata(),\n }\n : { ...result, ...this.context.getMetadata() };\n return this.clone().split(groupId).differentiate(t).migrate(context);\n }, failed) as GraphNode[]),\n );\n\n this.failed = failed;\n } else {\n const shouldContinue = result;\n if (shouldContinue) {\n newNodes.push(\n ...(this.task.mapNext((t: Task) => {\n const newNode = this.clone().split(groupId).differentiate(t);\n if (t.isUnique) {\n newNode.migrate({\n joinedContexts: [\n {\n ...this.context.getContext(),\n taskName: this.task.name,\n __nodeId: this.id,\n },\n ],\n ...this.context.getMetadata(),\n });\n }\n\n return newNode;\n }) as GraphNode[]),\n );\n }\n }\n\n return newNodes;\n }\n\n differentiate(task: Task): GraphNode {\n this.task = task;\n this.retryCount = task.retryCount;\n this.retryDelay = task.retryDelay;\n this.silent =\n (task.isMeta && !this.debug) ||\n task.isSubMeta ||\n this.context?.getMetadata()?.__isSubMeta;\n return this;\n }\n\n migrate(ctx: any): GraphNode {\n this.context = new GraphContext(ctx);\n return this;\n }\n\n split(id: string): GraphNode {\n this.splitGroupId = id;\n return this;\n }\n\n public clone(): GraphNode {\n return new GraphNode(\n this.task,\n this.context,\n this.routineExecId,\n [this],\n this.debug,\n this.verbose,\n );\n }\n\n public consume(node: GraphNode) {\n this.context = this.context.combine(node.context);\n this.previousNodes = this.previousNodes.concat(node.previousNodes);\n node.completeSubgraph();\n node.changeIdentity(this.id);\n node.destroy();\n }\n\n changeIdentity(id: string) {\n this.id = id;\n }\n\n completeSubgraph() {\n for (const node of this.nextNodes) {\n if (!node.subgraphDone()) {\n return;\n }\n }\n\n this.subgraphComplete = true;\n\n if (this.previousNodes.length === 0) {\n this.completeGraph();\n return;\n }\n\n this.previousNodes.forEach((n) => n.completeSubgraph());\n }\n\n completeGraph() {\n this.graphComplete = true;\n this.nextNodes.forEach((n) => n.completeGraph());\n }\n\n public destroy() {\n // @ts-ignore\n this.context = null;\n // @ts-ignore\n this.task = null;\n this.nextNodes = [];\n this.previousNodes.forEach((n) =>\n n.nextNodes.splice(n.nextNodes.indexOf(this), 1),\n );\n this.previousNodes = [];\n this.result = undefined;\n this.layer = undefined;\n this.destroyed = true;\n }\n\n public getIterator() {\n return new GraphNodeIterator(this);\n }\n\n public mapNext(callback: (node: GraphNode) => any) {\n return this.nextNodes.map(callback);\n }\n\n public accept(visitor: GraphVisitor) {\n visitor.visitNode(this);\n }\n\n public export() {\n return {\n __id: this.id,\n __task: this.task.export(),\n __context: this.context.export(),\n __result: this.result,\n __executionTime: this.executionTime,\n __executionStart: this.executionStart,\n __executionEnd: this.executionStart + this.executionTime,\n __nextNodes: this.nextNodes.map((node) => node.id),\n __previousNodes: this.previousNodes.map((node) => node.id),\n __routineExecId: this.routineExecId,\n __isProcessing: this.processing,\n __isMeta: this.isMeta(),\n __graphComplete: this.graphComplete,\n __failed: this.failed,\n __errored: this.errored,\n __isUnique: this.isUnique(),\n __splitGroupId: this.splitGroupId,\n __tag: this.getTag(),\n };\n }\n\n lightExport() {\n return {\n __id: this.id,\n __task: {\n __name: this.task.name,\n __version: this.task.version,\n },\n __context: this.context.export(),\n __executionTime: this.executionTime,\n __executionStart: this.executionStart,\n __nextNodes: this.nextNodes.map((node) => node.id),\n __previousNodes: this.previousNodes.map((node) => node.id),\n __routineExecId: this.routineExecId,\n __isProcessing: this.processing,\n __graphComplete: this.graphComplete,\n __isMeta: this.isMeta(),\n __failed: this.failed,\n __errored: this.errored,\n __isUnique: this.isUnique(),\n __splitGroupId: this.splitGroupId,\n __tag: this.getTag(),\n };\n }\n\n public log() {\n console.log(\n \"Node EXECUTION:\",\n this.task.name,\n JSON.stringify(this.context.getFullContext()),\n );\n }\n}\n","import { v4 as uuid } from \"uuid\";\nimport { deepCloneFilter } from \"../../utils/tools\";\nimport { AnyObject } from \"../../types/global\";\n\nexport default class GraphContext {\n readonly id: string;\n readonly fullContext: AnyObject; // Raw (for internal)\n readonly userData: AnyObject; // Filtered, frozen\n readonly metadata: AnyObject; // __keys, frozen\n\n constructor(context: AnyObject) {\n if (Array.isArray(context)) {\n throw new Error(\"Array contexts not supported\"); // Per clarification\n }\n this.fullContext = context; // Clone once\n this.userData = Object.fromEntries(\n Object.entries(this.fullContext).filter(([key]) => !key.startsWith(\"__\")),\n );\n this.metadata = Object.fromEntries(\n Object.entries(this.fullContext).filter(([key]) => key.startsWith(\"__\")),\n );\n this.id = uuid();\n }\n\n /**\n * Gets frozen user data (read-only, no clone).\n * @returns Frozen user context.\n */\n getContext(): AnyObject {\n return this.userData;\n }\n\n getClonedContext(): AnyObject {\n return deepCloneFilter(this.userData);\n }\n\n /**\n * Gets full raw context (cloned for safety).\n * @returns Cloned full context.\n */\n getFullContext(): AnyObject {\n return this.fullContext;\n }\n\n getClonedFullContext(): AnyObject {\n return deepCloneFilter(this.fullContext);\n }\n\n /**\n * Gets frozen metadata (read-only).\n * @returns Frozen metadata object.\n */\n getMetadata(): AnyObject {\n return this.metadata;\n }\n\n /**\n * Clones this context (new instance).\n * @returns New GraphContext.\n */\n clone(): GraphContext {\n return this.mutate(this.fullContext);\n }\n\n /**\n * Creates new context from data (via registry).\n * @param context New data.\n * @returns New GraphContext.\n */\n mutate(context: AnyObject): GraphContext {\n return new GraphContext(context);\n }\n\n /**\n * Combines with another for uniques (joins userData).\n * @param otherContext The other.\n * @returns New combined GraphContext.\n * @edge Appends other.userData to joinedContexts in userData.\n */\n combine(otherContext: GraphContext): GraphContext {\n const newUser = { ...this.userData };\n newUser.joinedContexts = this.userData.joinedContexts\n ? [...this.userData.joinedContexts]\n : [this.userData];\n\n const otherUser = otherContext.userData;\n if (Array.isArray(otherUser.joinedContexts)) {\n newUser.joinedContexts.push(...otherUser.joinedContexts);\n } else {\n newUser.joinedContexts.push(otherUser);\n }\n\n const newFull = {\n ...this.fullContext,\n ...otherContext.fullContext,\n ...newUser,\n };\n return new GraphContext(newFull);\n }\n\n /**\n * Exports the context.\n * @returns Exported object.\n */\n export(): { id: string; context: AnyObject } {\n return {\n id: this.id,\n context: this.getFullContext(),\n };\n }\n}\n","import Iterator from \"../../interfaces/Iterator\";\nimport GraphNode from \"../execution/GraphNode\";\n\nexport default class GraphNodeIterator implements Iterator {\n currentNode: GraphNode | undefined;\n currentLayer: GraphNode[] = [];\n nextLayer: GraphNode[] = [];\n index: number = 0;\n\n constructor(node: GraphNode) {\n this.currentNode = node;\n this.currentLayer = [node];\n }\n\n hasNext(): boolean {\n return !!this.currentNode;\n }\n\n next(): any {\n const nextNode = this.currentNode;\n\n if (!nextNode) {\n return undefined;\n }\n\n this.nextLayer.push(...nextNode.mapNext((n: GraphNode) => n));\n\n this.index++;\n\n if (this.index === this.currentLayer.length) {\n this.currentLayer = this.nextLayer;\n this.nextLayer = [];\n this.index = 0;\n }\n\n this.currentNode = this.currentLayer.length\n ? this.currentLayer[this.index]\n : undefined;\n\n return nextNode;\n }\n}\n","import Cadenza from \"../Cadenza\";\nimport { AnyObject } from \"../types/global\";\n\nexport default abstract class SignalEmitter {\n silent: boolean;\n\n /**\n * Constructor for signal emitters.\n * @param silent If true, suppresses all emissions (e.g., for meta-runners to avoid loops; affects all emits).\n */\n constructor(silent: boolean = false) {\n this.silent = silent;\n }\n\n /**\n * Emits a signal via the broker.\n * @param signal The signal name.\n * @param data Optional payload (defaults to empty object).\n */\n emit(signal: string, data: AnyObject = {}): void {\n Cadenza.broker.emit(signal, data);\n }\n\n /**\n * Emits a signal via the broker if not silent.\n * @param signal The signal name.\n * @param data Optional payload (defaults to empty object).\n */\n emitMetrics(signal: string, data: AnyObject = {}): void {\n if (this.silent) {\n return;\n }\n Cadenza.broker.emit(signal, data);\n }\n}\n","export function sleep(ms: number) {\n return new Promise((resolve) => setTimeout(resolve, ms));\n}\n","import Task from \"./Task\";\nimport Cadenza from \"../../Cadenza\";\nimport SignalEmitter from \"../../interfaces/SignalEmitter\";\n\nexport default class GraphRoutine extends SignalEmitter {\n readonly name: string;\n version: number = 1;\n readonly description: string;\n readonly isMeta: boolean = false;\n tasks: Set<Task> = new Set();\n\n observedSignals: Set<string> = new Set();\n\n constructor(\n name: string,\n tasks: Task[],\n description: string,\n isMeta: boolean = false,\n ) {\n super();\n this.name = name;\n this.description = description;\n this.isMeta = isMeta;\n this.emit(\"meta.routine.created\", {\n data: {\n name: this.name,\n version: this.version,\n description: this.description,\n isMeta: this.isMeta,\n },\n __routineInstance: this,\n });\n tasks.forEach((t) => {\n this.tasks.add(t);\n this.emit(\"meta.routine.task_added\", {\n data: {\n taskName: t.name,\n taskVersion: t.version,\n routineName: this.name,\n routineVersion: this.version,\n },\n });\n });\n }\n\n /**\n * Applies callback to starting tasks.\n * @param callBack The callback.\n * @returns Promise if async.\n */\n public async forEachTask(callBack: (task: Task) => any): Promise<void> {\n const promises = [];\n for (const task of this.tasks) {\n const res = callBack(task);\n if (res instanceof Promise) promises.push(res);\n }\n await Promise.all(promises);\n }\n\n /**\n * Sets global Version.\n * @param version The Version.\n */\n public setVersion(version: number): void {\n this.version = version;\n this.emit(\"meta.routine.global_version_set\", { version: this.version });\n }\n\n /**\n * Subscribes to signals (chainable).\n * @param signals The signal names.\n * @returns This for chaining.\n * @edge Duplicates ignored; assumes broker.observe binds this as handler.\n */\n doOn(...signals: string[]): this {\n signals.forEach((signal) => {\n if (this.observedSignals.has(signal)) return;\n Cadenza.broker.observe(signal, this as any);\n this.observedSignals.add(signal);\n });\n return this;\n }\n\n /**\n * Unsubscribes from all observed signals.\n * @returns This for chaining.\n */\n unsubscribeAll(): this {\n this.observedSignals.forEach((signal) =>\n Cadenza.broker.unsubscribe(signal, this as any),\n );\n this.observedSignals.clear();\n return this;\n }\n\n /**\n * Unsubscribes from specific signals.\n * @param signals The signals.\n * @returns This for chaining.\n * @edge No-op if not subscribed.\n */\n unsubscribe(...signals: string[]): this {\n signals.forEach((signal) => {\n if (this.observedSignals.has(signal)) {\n Cadenza.broker.unsubscribe(signal, this as any);\n this.observedSignals.delete(signal);\n }\n });\n return this;\n }\n\n /**\n * Destroys the routine.\n */\n public destroy(): void {\n this.unsubscribeAll();\n this.tasks.clear();\n this.emit(\"meta.routine.destroyed\", {\n data: { deleted: true },\n filter: { name: this.name, version: this.version },\n });\n }\n}\n","import Iterator from \"../../interfaces/Iterator\";\nimport Task from \"../definition/Task\";\n\nexport default class TaskIterator implements Iterator {\n currentTask: Task | undefined;\n currentLayer: Set<Task> = new Set();\n nextLayer: Set<Task> = new Set();\n iterator: { next: () => { value: Task | undefined } } =\n this.currentLayer[Symbol.iterator]();\n\n constructor(task: Task) {\n this.currentTask = task;\n this.currentLayer.add(task);\n }\n hasNext(): boolean {\n return !!this.currentTask;\n }\n\n next(): Task | undefined {\n const nextTask = this.currentTask;\n\n if (!nextTask) {\n return undefined;\n }\n\n nextTask.mapNext((t: Task) => this.nextLayer.add(t));\n\n let next = this.iterator.next();\n\n if (next.value === undefined) {\n this.currentLayer.clear();\n this.currentLayer = this.nextLayer;\n this.nextLayer = new Set();\n this.iterator = this.currentLayer[Symbol.iterator]();\n next = this.iterator.next();\n }\n\n this.currentTask = next.value;\n\n return nextTask;\n }\n}\n","import GraphContext from \"../context/GraphContext\";\nimport GraphVisitor from \"../../interfaces/GraphVisitor\";\nimport TaskIterator from \"../iterators/TaskIterator\";\nimport Graph from \"../../interfaces/Graph\";\nimport { AnyObject } from \"../../types/global\";\nimport { SchemaDefinition } from \"../../types/schema\";\nimport SignalEmitter from \"../../interfaces/SignalEmitter\";\nimport Cadenza from \"../../Cadenza\";\n\nexport type TaskFunction = (\n context: AnyObject,\n emit: (signal: string, context: AnyObject) => void,\n progressCallback: (progress: number) => void,\n) => TaskResult;\nexport type TaskResult = boolean | AnyObject | Generator | Promise<any> | void;\nexport type ThrottleTagGetter = (context?: AnyObject, task?: Task) => string;\n\nexport default class Task extends SignalEmitter implements Graph {\n readonly name: string;\n readonly description: string;\n version: number = 1;\n concurrency: number;\n timeout: number;\n readonly isMeta: boolean = false;\n readonly isSubMeta: boolean = false;\n readonly isHidden: boolean = false;\n readonly isUnique: boolean = false;\n readonly throttled: boolean = false;\n\n readonly isSignal: boolean = false;\n readonly isDeputy: boolean = false;\n readonly isEphemeral: boolean = false;\n readonly isDebounce: boolean = false;\n\n inputContextSchema: SchemaDefinition | undefined = undefined;\n validateInputContext: boolean = false;\n outputContextSchema: SchemaDefinition | undefined = undefined;\n validateOutputContext: boolean = false;\n\n readonly retryCount: number = 0;\n readonly retryDelay: number = 0;\n readonly retryDelayMax: number = 0;\n readonly retryDelayFactor: number = 1;\n\n layerIndex: number = 0;\n progressWeight: number = 0;\n nextTasks: Set<Task> = new Set();\n onFailTasks: Set<Task> = new Set();\n predecessorTasks: Set<Task> = new Set();\n destroyed: boolean = false;\n\n emitsSignals: Set<string> = new Set();\n signalsToEmitAfter: Set<string> = new Set();\n signalsToEmitOnFail: Set<string> = new Set();\n observedSignals: Set<string> = new Set();\n\n readonly taskFunction: TaskFunction;\n\n /**\n * Constructs a Task (static definition).\n * @param name Name.\n * @param task Function.\n * @param description Description.\n * @param concurrency Limit.\n * @param timeout ms.\n * @param register Register via signal (default true).\n * @param isUnique\n * @param isMeta\n * @param isSubMeta\n * @param isHidden\n * @param getTagCallback\n * @param inputSchema\n * @param validateInputContext\n * @param outputSchema\n * @param validateOutputContext\n * @param retryCount\n * @param retryDelay\n * @param retryDelayMax\n * @param retryDelayFactor\n * @edge Emits 'meta.task.created' with { __task: this } for seed.\n */\n constructor(\n name: string,\n task: TaskFunction,\n description: string = \"\",\n concurrency: number = 0,\n timeout: number = 0,\n register: boolean = true,\n isUnique: boolean = false,\n isMeta: boolean = false,\n isSubMeta: boolean = false,\n isHidden: boolean = false,\n getTagCallback: ThrottleTagGetter | undefined = undefined,\n inputSchema: SchemaDefinition | undefined = undefined,\n validateInputContext: boolean = false,\n outputSchema: SchemaDefinition | undefined = undefined,\n validateOutputContext: boolean = false,\n retryCount: number = 0,\n retryDelay: number = 0,\n retryDelayMax: number = 0,\n retryDelayFactor: number = 1,\n ) {\n super(isSubMeta || isHidden);\n this.name = name;\n this.taskFunction = task.bind(this);\n this.description = description;\n this.concurrency = concurrency;\n this.timeout = timeout;\n this.isUnique = isUnique;\n this.isMeta = isMeta;\n this.isSubMeta = isSubMeta;\n this.isHidden = isHidden;\n this.inputContextSchema = inputSchema;\n this.validateInputContext = validateInputContext;\n this.outputContextSchema = outputSchema;\n this.validateOutputContext = validateOutputContext;\n this.retryCount = retryCount;\n this.retryDelay = retryDelay;\n this.retryDelayMax = retryDelayMax;\n this.retryDelayFactor = retryDelayFactor;\n\n if (getTagCallback) {\n this.getTag = (context?: AnyObject) => getTagCallback(context, this);\n this.throttled = true;\n }\n\n if (register && !this.isHidden && !this.isSubMeta) {\n const { __functionString, __getTagCallback } = this.export();\n this.emitWithMetadata(\"meta.task.created\", {\n data: {\n name: this.name,\n version: this.version,\n description: this.description,\n functionString: __functionString,\n tagIdGetter: __getTagCallback,\n layerIndex: this.layerIndex,\n concurrency: this.concurrency,\n retryCount: this.retryCount,\n retryDelay: this.retryDelay,\n retryDelayMax: this.retryDelayMax,\n retryDelayFactor: this.retryDelayFactor,\n timeout: this.timeout,\n isUnique: this.isUnique,\n isSignal: this.isSignal,\n isThrottled: this.throttled,\n isDebounce: this.isDebounce,\n isEphemeral: this.isEphemeral,\n isMeta: this.isMeta,\n validateInputContext: this.validateInputContext,\n validateOutputContext: this.validateOutputContext,\n // inputContextSchemaId: this.inputContextSchema,\n // outputContextSchemaId: this.outputContextSchema,\n },\n __taskInstance: this,\n });\n }\n }\n\n public getTag(context?: AnyObject): string {\n return this.name;\n }\n\n public setVersion(version: number): void {\n this.version = version;\n this.emitWithMetadata(\"meta.task.version_set\", {\n __version: this.version,\n });\n }\n\n public setTimeout(timeout: number): void {\n this.timeout = timeout;\n }\n\n public setConcurrency(concurrency: number): void {\n this.concurrency = concurrency;\n }\n\n public setProgressWeight(weight: number): void {\n this.progressWeight = weight;\n }\n\n public setInputContextSchema(schema: SchemaDefinition): void {\n this.inputContextSchema = schema;\n }\n\n public setOutputContextSchema(schema: SchemaDefinition): void {\n this.outputContextSchema = schema;\n }\n\n public setValidateInputContext(value: boolean): void {\n this.validateInputContext = value;\n }\n\n public setValidateOutputContext(value: boolean): void {\n this.validateOutputContext = value;\n }\n\n emitWithMetadata(signal: string, ctx: AnyObject = {}) {\n const data = { ...ctx };\n if (!this.isHidden && !this.isSubMeta) {\n data.__signalEmission = {\n taskName: this.name,\n taskVersion: this.version,\n };\n }\n\n this.emit(signal, data);\n }\n\n emitMetricsWithMetadata(signal: string, ctx: AnyObject = {}) {\n const data = { ...ctx };\n if (!this.isHidden && !this.isSubMeta) {\n data.__signalEmission = {\n taskName: this.name,\n taskVersion: this.version,\n isMetric: true,\n };\n }\n\n this.emitMetrics(signal, data);\n }\n\n /**\n * Validates a context deeply against a schema.\n * @param data - The data to validate (input context or output result).\n * @param schema - The schema definition.\n * @param path - The current path for error reporting (default: 'root').\n * @returns { { valid: boolean, errors: Record<string, string> } } - Validation result with detailed errors if invalid.\n * @description Recursively checks types, required fields, and constraints; allows extra properties not in schema.\n */\n validateSchema(\n data: any,\n schema: SchemaDefinition | undefined,\n path: string = \"context\",\n ): { valid: boolean; errors: Record<string, string> } {\n const errors: Record<string, string> = {};\n\n if (!schema || typeof schema !== \"object\") return { valid: true, errors };\n\n // Check required fields\n const required = schema.required || [];\n for (const key of required) {\n if (!(key in data)) {\n errors[`${path}.${key}`] = `Required field '${key}' is missing`;\n }\n }\n\n // Validate defined properties (ignore extras)\n const properties = schema.properties || {};\n for (const [key, value] of Object.entries(data)) {\n if (key in properties) {\n const prop = properties[key];\n const propType = prop.type;\n\n if (propType === \"any\") {\n continue;\n }\n\n if ((value === undefined || value === null) && !prop.strict) {\n continue;\n }\n\n if (propType === \"string\" && typeof value !== \"string\") {\n errors[`${path}.${key}`] =\n `Expected 'string' for '${key}', got '${typeof value}'`;\n } else if (propType === \"number\" && typeof value !== \"number\") {\n errors[`${path}.${key}`] =\n `Expected 'number' for '${key}', got '${typeof value}'`;\n } else if (propType === \"boolean\" && typeof value !== \"boolean\") {\n errors[`${path}.${key}`] =\n `Expected 'boolean' for '${key}', got '${typeof value}'`;\n } else if (propType === \"array\" && !Array.isArray(value)) {\n errors[`${path}.${key}`] =\n `Expected 'array' for '${key}', got '${typeof value}'`;\n } else if (\n propType === \"object\" &&\n (typeof value !== \"object\" || value === null || Array.isArray(value))\n ) {\n errors[`${path}.${key}`] =\n `Expected 'object' for '${key}', got '${typeof value}'`;\n } else if (propType === \"array\" && prop.items) {\n if (Array.isArray(value)) {\n value.forEach((item, index) => {\n const subValidation = this.validateSchema(\n item,\n prop.items,\n `${path}.${key}[${index}]`,\n );\n if (!subValidation.valid) {\n Object.assign(errors, subValidation.errors);\n }\n });\n }\n } else if (\n propType === \"object\" &&\n !Array.isArray(value) &&\n value !== null\n ) {\n const subValidation = this.validateSchema(\n value,\n prop,\n `${path}.${key}`,\n );\n if (!subValidation.valid) {\n Object.assign(errors, subValidation.errors);\n }\n }\n\n // Check constraints (extended as discussed)\n const constraints = prop.constraints || {};\n if (typeof value === \"string\") {\n if (constraints.minLength && value.length < constraints.minLength) {\n errors[`${path}.${key}`] =\n `String '${key}' shorter than minLength ${constraints.minLength}`;\n }\n if (constraints.maxLength && value.length > constraints.maxLength) {\n errors[`${path}.${key}`] =\n `String '${key}' exceeds maxLength ${constraints.maxLength}`;\n }\n if (\n constraints.pattern &&\n !new RegExp(constraints.pattern).test(value)\n ) {\n errors[`${path}.${key}`] =\n `String '${key}' does not match pattern ${constraints.pattern}`;\n }\n } else if (typeof value === \"number\") {\n if (constraints.min && value < constraints.min) {\n errors[`${path}.${key}`] =\n `Number '${key}' below min ${constraints.min}`;\n }\n if (constraints.max && value > constraints.max) {\n errors[`${path}.${key}`] =\n `Number '${key}' exceeds max ${constraints.max}`;\n }\n if (constraints.multipleOf && value % constraints.multipleOf !== 0) {\n errors[`${path}.${key}`] =\n `Number '${key}' not multiple of ${constraints.multipleOf}`;\n }\n } else if (constraints.enum && !constraints.enum.includes(value)) {\n errors[`${path}.${key}`] =\n `Value '${value}' for '${key}' not in enum ${JSON.stringify(constraints.enum)}`;\n } else if (constraints.format) {\n const formats = {\n email: /^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\\.[a-zA-Z]{2,}$/,\n url: /^(https?|ftp):\\/\\/[^\\s/$.?#].[^\\s]*$/,\n \"date-time\":\n /^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}(\\.\\d+)?(Z|[+-]\\d{2}:\\d{2})?$/,\n uuid: /^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}$/,\n custom: /.*/, // Placeholder; override with prop.constraints.pattern if present\n } as any;\n const regex =\n formats[constraints.format] ||\n new RegExp(constraints.pattern || \".*\");\n if (typeof value === \"string\" && !regex.test(value)) {\n errors[`${path}.${key}`] =\n `Value '${value}' for '${key}' does not match format '${constraints.format}'`;\n }\n } else if (constraints.oneOf && !constraints.oneOf.includes(value)) {\n errors[`${path}.${key}`] =\n `Value '${value}' for '${key}' not in oneOf ${JSON.stringify(constraints.oneOf)}`;\n }\n } else if (schema.strict) {\n errors[`${path}.${key}`] = `Key '${key}' is not allowed`;\n }\n }\n\n if (Object.keys(errors).length > 0) {\n return { valid: false, errors };\n }\n return { valid: true, errors: {} };\n }\n\n public validateInput(context: AnyObject): true | AnyObject {\n if (this.validateInputContext) {\n const validationResult = this.validateSchema(\n context,\n this.inputContextSchema,\n );\n if (!validationResult.valid) {\n this.emitWithMetadata(\"meta.task.input_validation_failed\", {\n __taskName: this.name,\n __taskVersion: this.version,\n __context: context,\n __errors: validationResult.errors,\n });\n return {\n errored: true,\n __error: \"Input context validation failed\",\n __validationErrors: JSON.stringify(validationResult.errors),\n };\n }\n }\n return true;\n }\n\n public validateOutput(context: AnyObject): true | AnyObject {\n if (this.validateOutputContext) {\n const validationResult = this.validateSchema(\n context,\n this.outputContextSchema,\n );\n if (!validationResult.valid) {\n this.emitWithMetadata(\"meta.task.outputValidationFailed\", {\n __taskName: this.name,\n __taskVersion: this.version,\n __result: context,\n __errors: validationResult.errors,\n });\n return {\n errored: true,\n __error: \"Output context validation failed\",\n __validationErrors: JSON.stringify(validationResult.errors),\n };\n }\n }\n return true;\n }\n\n /**\n * Executes the task function after optional input validation.\n * @param context - The GraphContext to validate and execute.\n * @param emit\n * @param progressCallback - Callback for progress updates.\n * @returns TaskResult from the taskFunction or error object on validation failure.\n * @edge If validateInputContext is true, validates context; on failure, emits 'meta.task.validationFailed' with detailed errors.\n * @edge If validateOutputContext is true, validates output; on failure, emits 'meta.task.outputValidationFailed' with detailed errors.\n */\n public execute(\n context: GraphContext,\n emit: (signal: string, context: AnyObject) => void,\n progressCallback: (progress: number) => void,\n ): TaskResult {\n return this.taskFunction(\n this.isMeta ? context.getClonedFullContext() : context.getClonedContext(),\n emit,\n progressCallback,\n );\n }\n\n public doAfter(...tasks: Task[]): this {\n for (const pred of tasks) {\n if (this.predecessorTasks.has(pred)) continue;\n\n pred.nextTasks.add(this);\n this.predecessorTasks.add(pred);\n this.updateLayerFromPredecessors();\n\n if (this.hasCycle()) {\n this.decouple(pred);\n throw new Error(`Cycle adding pred ${pred.name} to ${this.name}`);\n }\n\n this.emitMetricsWithMetadata(\"meta.task.relationship_added\", {\n data: {\n taskName: this.name,\n taskVersion: this.version,\n predecessorTaskName: pred.name,\n predecessorTaskVersion: pred.version,\n },\n });\n }\n\n this.updateProgressWeights();\n return this;\n }\n\n public then(...tasks: Task[]): this {\n for (const next of tasks) {\n if (this.nextTasks.has(next)) continue;\n\n this.nextTasks.add(next);\n next.predecessorTasks.add(this);\n next.updateLayerFromPredecessors();\n\n if (next.hasCycle()) {\n this.decouple(next);\n throw new Error(`Cycle adding next ${next.name} to ${this.name}`);\n }\n\n this.emitMetricsWithMetadata(\"meta.task.relationship_added\", {\n data: {\n taskName: next.name,\n taskVersion: next.version,\n predecessorTaskName: this.name,\n predecessorTaskVersion: this.version,\n },\n });\n }\n\n this.updateProgressWeights();\n return this;\n }\n\n public decouple(task: Task): void {\n if (task.nextTasks.has(this)) {\n task.nextTasks.delete(this);\n this.predecessorTasks.delete(task);\n }\n\n if (task.onFailTasks.has(this)) {\n task.onFailTasks.delete(this);\n this.predecessorTasks.delete(task);\n }\n\n // TODO: Delete task map instances\n\n this.updateLayerFromPredecessors();\n }\n\n updateProgressWeights(): void {\n const layers = this.getSubgraphLayers();\n const numLayers = layers.size;\n if (numLayers === 0) return;\n\n const weightPerLayer = 1 / numLayers;\n\n layers.forEach((tasksInLayer) => {\n const numTasks = tasksInLayer.size;\n if (numTasks === 0) return;\n tasksInLayer.forEach(\n (task) => (task.progressWeight = weightPerLayer / numTasks),\n );\n });\n }\n\n getSubgraphLayers(): Map<number, Set<Task>> {\n const layers = new Map<number, Set<Task>>();\n const queue = [this as Task];\n const visited = new Set<Task>();\n\n while (queue.length) {\n const task = queue.shift()!;\n if (visited.has(task)) continue;\n visited.add(task);\n\n if (!layers.has(task.layerIndex)) layers.set(task.layerIndex, new Set());\n layers.get(task.layerIndex)!.add(task);\n\n task.nextTasks.forEach((next) => queue.push(next));\n }\n\n return layers;\n }\n\n updateLayerFromPredecessors(): void {\n const prevLayerIndex = this.layerIndex;\n let maxPred = 0;\n this.predecessorTasks.forEach(\n (pred) => (maxPred = Math.max(maxPred, pred.layerIndex)),\n );\n this.layerIndex = maxPred + 1;\n\n if (prevLayerIndex !== this.layerIndex) {\n this.emitMetricsWithMetadata(\"meta.task.layer_index_changed\", {\n data: {\n layerIndex: this.layerIndex,\n },\n filter: { name: this.name, version: this.version },\n });\n }\n\n const queue = Array.from(this.nextTasks);\n while (queue.length) {\n const next = queue.shift()!;\n next.updateLayerFromPredecessors();\n next.nextTasks.forEach((n) => queue.push(n));\n }\n }\n\n hasCycle(): boolean {\n const visited = new Set<Task>();\n const recStack = new Set<Task>();\n\n const dfs = (task: Task): boolean => {\n if (recStack.has(task)) return true;\n if (visited.has(task)) return false;\n\n visited.add(task);\n recStack.add(task);\n\n for (const next of task.nextTasks) {\n if (dfs(next)) return true;\n }\n\n recStack.delete(task);\n return false;\n };\n\n return dfs(this);\n }\n\n public mapNext(\n callback: (task: Task) => any,\n failed: boolean = false,\n ): any[] {\n const tasks = failed\n ? Array.from(this.onFailTasks)\n : Array.from(this.nextTasks);\n return tasks.map(callback);\n }\n\n public mapPrevious(callback: (task: Task) => any): any[] {\n return Array.from(this.predecessorTasks).map(callback);\n }\n\n /**\n * Subscribes to signals (chainable).\n * @param signals The signal names.\n * @returns This for chaining.\n * @edge Duplicates ignored; assumes broker.observe binds this as handler.\n */\n doOn(...signals: string[]): this {\n signals.forEach((signal) => {\n if (this.observedSignals.has(signal)) return;\n Cadenza.broker.observe(signal, this as any);\n this.observedSignals.add(signal);\n this.emitWithMetadata(\"meta.task.observed_signal\", {\n data: {\n signalName: signal,\n taskName: this.name,\n taskVersion: this.version,\n },\n });\n });\n return this;\n }\n\n /**\n * Sets signals to emit post-execution (chainable).\n * @param signals The signal names.\n * @returns This for chaining.\n */\n emits(...signals: string[]): this {\n signals.forEach((signal) => {\n this.signalsToEmitAfter.add(signal);\n this.emitsSignals.add(signal);\n this.emitWithMetadata(\"meta.task.attached_signal\", {\n data: {\n signalName: signal,\n taskName: this.name,\n taskVersion: this.version,\n },\n });\n });\n return this;\n }\n\n emitsOnFail(...signals: string[]): this {\n signals.forEach((signal) => {\n this.signalsToEmitOnFail.add(signal);\n this.emitsSignals.add(signal);\n this.emitWithMetadata(\"meta.task.attached_signal\", {\n data: {\n signalName: signal,\n taskName: this.name,\n taskVersion: this.version,\n isOnFail: true,\n },\n });\n });\n return this;\n }\n\n /**\n * Unsubscribes from all observed signals.\n * @returns This for chaining.\n */\n unsubscribeAll(): this {\n this.observedSignals.forEach((signal) => {\n Cadenza.broker.unsubscribe(signal, this as any);\n this.emitWithMetadata(\"meta.task.unsubscribed_signal\", {\n filter: {\n signalName: signal,\n taskName: this.name,\n taskVersion: this.version,\n },\n });\n });\n this.observedSignals.clear();\n return this;\n }\n\n /**\n * Unsubscribes from specific signals.\n * @param signals The signals.\n * @returns This for chaining.\n * @edge No-op if not subscribed.\n */\n unsubscribe(...signals: string[]): this {\n signals.forEach((signal) => {\n if (this.observedSignals.has(signal)) {\n Cadenza.broker.unsubscribe(signal, this as any);\n this.observedSignals.delete(signal);\n this.emitWithMetadata(\"meta.task.unsubscribed_signal\", {\n filter: {\n signalName: signal,\n taskName: this.name,\n taskVersion: this.version,\n },\n });\n }\n });\n return this;\n }\n\n /**\n * Detaches specific emitted signals.\n * @param signals The signals.\n * @returns This for chaining.\n */\n detachSignals(...signals: string[]): this {\n signals.forEach((signal) => {\n this.signalsToEmitAfter.delete(signal);\n this.emitWithMetadata(\"meta.task.detached_signal\", {\n filter: {\n signalName: signal,\n taskName: this.name,\n taskVersion: this.version,\n },\n });\n });\n return this;\n }\n\n /**\n * Detaches all emitted signals.\n * @returns This for chaining.\n */\n detachAllSignals(): this {\n this.signalsToEmitAfter.forEach((signal) => {\n this.emitWithMetadata(\"meta.task.detached_signal\", {\n filter: {\n signalName: signal,\n taskName: this.name,\n taskVersion: this.version,\n },\n });\n });\n this.signalsToEmitAfter.clear();\n return this;\n }\n\n mapSignals(callback: (signal: string) => void) {\n return Array.from(this.signalsToEmitAfter).map(callback);\n }\n\n mapOnFailSignals(callback: (signal: string) => void) {\n return Array.from(this.signalsToEmitOnFail).map(callback);\n }\n\n /**\n * Emits attached signals.\n * @param context The context for emission.\n * @edge If isMeta (from Task), suppresses further \"meta.*\" to prevent loops.\n */\n emitSignals(context: GraphContext): void {\n this.signalsToEmitAfter.forEach((signal) => {\n this.emit(signal, context.getFullContext());\n });\n }\n\n /**\n * Emits attached fail signals.\n * @param context The context for emission.\n * @edge If isMeta (from Task), suppresses further \"meta.*\" to prevent loops.\n */\n emitOnFailSignals(context: GraphContext): void {\n this.signalsToEmitOnFail.forEach((signal) => {\n this.emit(signal, context.getFullContext());\n });\n }\n\n public destroy(): void {\n this.unsubscribeAll();\n this.detachAllSignals();\n\n this.predecessorTasks.forEach((pred) => pred.nextTasks.delete(this));\n this.nextTasks.forEach((next) => next.predecessorTasks.delete(this));\n this.onFailTasks.forEach((fail) => fail.predecessorTasks.delete(this));\n\n this.nextTasks.clear();\n this.predecessorTasks.clear();\n this.onFailTasks.clear();\n\n this.destroyed = true;\n\n this.emitMetricsWithMetadata(\"meta.task.destroyed\", {\n data: { deleted: true },\n filter: { name: this.name, version: this.version },\n });\n\n // TODO: Delete task map instances\n }\n\n public export(): AnyObject {\n return {\n __name: this.name,\n __description: this.description,\n __layerIndex: this.layerIndex,\n __isUnique: this.isUnique,\n __isMeta: this.isMeta,\n __isSignal: this.isSignal,\n __eventTriggers: this.observedSignals,\n __attachedEvents: this.signalsToEmitAfter,\n __isDeputy: this.isDeputy,\n __throttled: this.throttled,\n __isEphemeral: this.isEphemeral,\n __concurrency: this.concurrency,\n __timeout: this.timeout,\n __functionString: this.taskFunction.toString(),\n __getTagCallback: this.getTag.toString(),\n __inputSchema: this.inputContextSchema,\n __validateInputContext: this.validateInputContext,\n __outputSchema: this.outputContextSchema,\n __validateOutputContext: this.validateOutputContext,\n __nextTasks: Array.from(this.nextTasks).map((t) => t.name),\n __onFailTasks: Array.from(this.onFailTasks).map((t) => t.name),\n __previousTasks: Array.from(this.predecessorTasks).map((t) => t.name),\n };\n }\n\n public getIterator(): TaskIterator {\n return new TaskIterator(this);\n }\n\n public accept(visitor: GraphVisitor): void {\n visitor.visitTask(this);\n }\n\n public log(): void {\n console.log(this.name);\n }\n}\n","import Cadenza from \"../Cadenza\";\nimport Task from \"../graph/definition/Task\";\nimport GraphRoutine from \"../graph/definition/GraphRoutine\";\nimport { AnyObject } from \"../types/global\";\n\nexport default class GraphRegistry {\n static _instance: GraphRegistry;\n public static get instance(): GraphRegistry {\n if (!this._instance) this._instance = new GraphRegistry();\n return this._instance;\n }\n\n tasks: Map<string, Task> = new Map();\n routines: Map<string, GraphRoutine> = new Map();\n\n registerTask: Task;\n updateTaskInputSchema: Task;\n updateTaskOutputSchema: Task;\n getTaskByName: Task;\n getTasksByLayer: Task;\n getAllTasks: Task;\n doForEachTask: Task;\n deleteTask: Task;\n registerRoutine: Task;\n getRoutineByName: Task;\n getAllRoutines: Task;\n doForEachRoutine: Task;\n deleteRoutine: Task;\n\n constructor() {\n // Hardcode seed MetaTask (observes on existing broker)\n this.registerTask = new Task(\n \"Register task\",\n (context: AnyObject) => {\n const { __taskInstance } = context;\n if (__taskInstance && !this.tasks.has(__taskInstance.name)) {\n this.tasks.set(__taskInstance.name, __taskInstance);\n }\n delete context.__taskInstance;\n return true;\n },\n \"Registers tasks. Seed for meta.taskCreated\",\n 0,\n 0,\n true,\n false,\n true,\n ).doOn(\"meta.task.created\");\n\n // Manual seed register\n this.tasks.set(this.registerTask.name, this.registerTask);\n\n this.updateTaskInputSchema = Cadenza.createMetaTask(\n \"Update task input schema\",\n (context) => {\n const { __id, __schema } = context;\n const task = this.tasks.get(__id);\n if (!task) return true;\n task.setInputContextSchema(__schema);\n return true;\n },\n \"Updates task input schema.\",\n ).doOn(\"meta.task.input_schema_updated\");\n\n this.updateTaskOutputSchema = Cadenza.createMetaTask(\n \"Update task input schema\",\n (context) => {\n const { __id, __schema } = context;\n const task = this.tasks.get(__id);\n if (!task) return true;\n task.setOutputContextSchema(__schema);\n return true;\n },\n \"Updates task input schema.\",\n ).doOn(\"meta.task.output_schema_updated\");\n\n this.getTaskByName = Cadenza.createMetaTask(\n \"Get task by name\",\n (context) => {\n const { __name } = context;\n for (const task of this.tasks.values()) {\n if (task.name === __name) {\n return { ...context, __task: task };\n }\n }\n return context;\n },\n \"Gets task by name (first match).\",\n );\n\n this.getTasksByLayer = Cadenza.createMetaTask(\n \"Get tasks by layer\",\n (context) => {\n const { __layerIndex } = context;\n const layerTasks = Array.from(this.tasks.values()).filter(\n (task) => task.layerIndex === __layerIndex,\n );\n return { ...context, __tasks: layerTasks };\n },\n \"Gets tasks by layer index.\",\n );\n\n this.getAllTasks = Cadenza.createMetaTask(\n \"Get all tasks\",\n (context) => ({ ...context, __tasks: Array.from(this.tasks.values()) }), // Use arrow to capture this\n \"Gets all tasks.\",\n );\n\n this.doForEachTask = Cadenza.createMetaTask(\n \"Do for each task\",\n function* (context: AnyObject) {\n // @ts-ignore\n for (const task of this.tasks.values()) {\n yield { ...context, __task: task };\n }\n }.bind(this), // Bind to capture this in generator\n \"Yields each task for branching.\",\n );\n\n this.deleteTask = Cadenza.createMetaTask(\n \"Delete task\",\n (context) => {\n const { __name } = context;\n this.tasks.delete(__name);\n return context;\n },\n \"Deletes task.\",\n ).doOn(\"meta.task.destroyed\");\n\n this.registerRoutine = Cadenza.createMetaTask(\n \"Register routine\",\n (context) => {\n const { __routineInstance } = context;\n if (__routineInstance && !this.routines.has(__routineInstance.name)) {\n this.routines.set(__routineInstance.name, __routineInstance);\n }\n delete context.__routineInstance;\n return true;\n },\n \"Registers routine.\",\n ).doOn(\"meta.routine.created\");\n\n this.getRoutineByName = Cadenza.createMetaTask(\n \"Get routine by name\",\n (context) => {\n const { __name } = context;\n for (const routine of this.routines.values()) {\n if (routine.name === __name) {\n return { ...context, __routine: routine };\n }\n }\n return context;\n },\n \"Gets routine by name.\",\n );\n\n this.getAllRoutines = Cadenza.createMetaTask(\n \"Get all routines\",\n (context) => ({\n ...context,\n __routines: Array.from(this.routines.values()),\n }), // Use arrow to capture this\n \"Gets all routines.\",\n );\n\n this.doForEachRoutine = Cadenza.createMetaTask(\n \"Do for each routine\",\n function* (context: AnyObject) {\n // @ts-ignore\n for (const routine of this.routines.values()) {\n yield { ...context, __routine: routine };\n }\n }.bind(this),\n \"Yields each routine.\",\n );\n\n this.deleteRoutine = Cadenza.createMetaTask(\n \"Delete routine\",\n (context) => {\n const { __name } = context;\n this.routines.delete(__name);\n return context;\n },\n \"Deletes routine.\",\n );\n }\n\n reset() {\n this.tasks.clear();\n this.routines.clear();\n }\n}\n","import Task, { TaskFunction, TaskResult } from \"./Task\";\nimport GraphContext from \"../context/GraphContext\";\nimport { SchemaDefinition } from \"../../types/schema\";\n\nexport interface DebounceOptions {\n leading?: boolean;\n trailing?: boolean;\n maxWait?: number;\n}\n\nexport default class DebounceTask extends Task {\n readonly debounceTime: number;\n leading: boolean;\n trailing: boolean;\n maxWait: number;\n timer: NodeJS.Timeout | null = null;\n maxTimer: NodeJS.Timeout | null = null;\n hasLaterCall: boolean = false;\n lastResolve: ((value: unknown) => void) | null = null;\n lastReject: ((reason?: any) => void) | null = null;\n lastContext: GraphContext | null = null;\n lastTimeout: NodeJS.Timeout | null = null;\n lastProgressCallback: ((progress: number) => void) | null = null;\n lastEmitFunction: ((signal: string, context: any) => void) | null = null;\n\n constructor(\n name: string,\n task: TaskFunction,\n description: string = \"\",\n debounceTime: number = 1000,\n leading: boolean = false,\n trailing: boolean = true,\n maxWait: number = 0,\n concurrency: number = 0,\n timeout: number = 0,\n register: boolean = true,\n isUnique: boolean = false,\n isMeta: boolean = false,\n isSubMeta: boolean = false,\n isHidden: boolean = false,\n inputSchema: SchemaDefinition | undefined = undefined,\n validateInputSchema: boolean = false,\n outputSchema: SchemaDefinition | undefined = undefined,\n validateOutputSchema: boolean = false,\n ) {\n super(\n name,\n task,\n description,\n concurrency,\n timeout,\n register,\n isUnique,\n isMeta,\n isSubMeta,\n isHidden,\n undefined,\n inputSchema,\n validateInputSchema,\n outputSchema,\n validateOutputSchema,\n );\n this.debounceTime = debounceTime;\n this.leading = leading;\n this.trailing = trailing;\n this.maxWait = maxWait;\n }\n\n executeFunction(): void {\n if (this.lastTimeout) {\n clearTimeout(this.lastTimeout);\n }\n\n let result;\n try {\n result = this.taskFunction(\n this.lastContext!.getClonedContext(),\n this.lastEmitFunction!,\n this.lastProgressCallback!,\n );\n } catch (error) {\n if (this.lastResolve) {\n this.lastResolve(error);\n }\n return;\n }\n\n if (result instanceof Promise) {\n result.then(this.lastResolve!).catch(this.lastReject!);\n } else {\n if (this.lastResolve) {\n this.lastResolve(result);\n }\n }\n }\n\n debouncedTrigger(\n resolve: (value: unknown) => void,\n reject: (reason?: any) => void,\n context: GraphContext,\n timeout: NodeJS.Timeout,\n emit: (signal: string, context: any) => void,\n progressCallback: (progress: number) => void,\n ): void {\n const callNow = this.leading && this.timer === null;\n const isNewBurst = this.timer === null;\n\n if (this.timer !== null) {\n clearTimeout(this.timer);\n this.timer = null;\n }\n\n this.lastResolve = resolve;\n this.lastReject = reject;\n this.lastContext = context;\n this.lastTimeout = timeout;\n this.lastProgressCallback = progressCallback;\n this.lastEmitFunction = emit;\n\n if (!callNow) {\n this.hasLaterCall = true;\n }\n\n this.timer = setTimeout(() => {\n this.timer = null;\n if (this.trailing && this.hasLaterCall) {\n this.executeFunction();\n this.hasLaterCall = false;\n }\n if (this.maxTimer) {\n clearTimeout(this.maxTimer);\n this.maxTimer = null;\n }\n }, this.debounceTime);\n\n if (callNow) {\n this.executeFunction();\n this.hasLaterCall = false;\n }\n\n if (this.maxWait > 0 && isNewBurst) {\n this.maxTimer = setTimeout(() => {\n this.maxTimer = null;\n if (this.trailing && this.hasLaterCall) {\n if (this.timer) {\n clearTimeout(this.timer);\n this.timer = null;\n }\n this.executeFunction();\n this.hasLaterCall = false;\n }\n }, this.maxWait);\n }\n }\n\n execute(\n context: GraphContext,\n emit: (signal: string, context: any) => void,\n progressCallback: (progress: number) => void,\n ): TaskResult {\n return new Promise((resolve, reject) => {\n const timeout = setTimeout(() => {\n resolve(false);\n }, this.debounceTime + 1);\n\n this.debouncedTrigger(\n resolve,\n reject,\n context,\n timeout,\n emit,\n progressCallback,\n );\n });\n }\n}\n","import Task, { TaskFunction, ThrottleTagGetter } from \"./Task\";\nimport { SchemaDefinition } from \"../../types/schema\";\nimport { AnyObject } from \"../../types/global\";\n\nexport type EphemeralTaskOptions = {\n once?: boolean;\n destroyCondition?: (context: any) => boolean;\n};\n\nexport default class EphemeralTask extends Task {\n readonly once: boolean;\n readonly condition: (context: any) => boolean;\n readonly isEphemeral: boolean = true;\n\n constructor(\n name: string,\n task: TaskFunction,\n description: string = \"\",\n once: boolean = true,\n condition: (context: any) => boolean = () => true,\n concurrency: number = 0,\n timeout: number = 0,\n register: boolean = false,\n isUnique: boolean = false,\n isMeta: boolean = false,\n isSubMeta: boolean = false,\n isHidden: boolean = false,\n getTagCallback: ThrottleTagGetter | undefined = undefined,\n inputSchema: SchemaDefinition | undefined = undefined,\n validateInputContext: boolean = false,\n outputSchema: SchemaDefinition | undefined = undefined,\n validateOutputContext: boolean = false,\n retryCount: number = 0,\n retryDelay: number = 0,\n retryDelayMax: number = 0,\n retryDelayFactor: number = 1,\n ) {\n super(\n name,\n task,\n description,\n concurrency,\n timeout,\n register,\n isUnique,\n isMeta,\n isSubMeta,\n isHidden,\n getTagCallback,\n inputSchema,\n validateInputContext,\n outputSchema,\n validateOutputContext,\n retryCount,\n retryDelay,\n retryDelayMax,\n retryDelayFactor,\n );\n this.once = once;\n this.condition = condition;\n }\n\n public execute(\n context: any,\n emit: (signal: string, context: AnyObject) => void,\n progressCallback: (progress: number) => void,\n ) {\n const result = super.execute(context, emit, progressCallback);\n\n if (this.once || this.condition(result)) {\n this.destroy();\n return result;\n }\n }\n}\n","export default abstract class ExecutionChain {\n next: ExecutionChain | undefined;\n previous: ExecutionChain | undefined;\n\n public setNext(next: ExecutionChain): void {\n if (this.hasNext) {\n return;\n }\n\n next.previous = this;\n this.next = next;\n }\n\n get hasNext() {\n return !!this.next;\n }\n\n get hasPreceding() {\n return !!this.previous;\n }\n\n getNext() {\n return this.next;\n }\n\n getPreceding() {\n return this.previous;\n }\n\n decouple() {\n this.next = undefined;\n this.previous = undefined;\n }\n}\n","import Iterator from \"../../interfaces/Iterator\";\nimport SyncGraphLayer from \"../execution/SyncGraphLayer\";\nimport GraphLayer from \"../../interfaces/GraphLayer\";\n\nexport default class GraphLayerIterator implements Iterator {\n graph: GraphLayer;\n currentLayer: GraphLayer | undefined;\n\n constructor(graph: GraphLayer) {\n this.graph = graph;\n }\n hasNext() {\n return !this.currentLayer || this.currentLayer.hasNext;\n }\n\n hasPrevious(): boolean {\n return !this.currentLayer || this.currentLayer.hasPreceding;\n }\n\n next(): GraphLayer {\n if (!this.currentLayer) {\n return this.getFirst();\n } else if (this.hasNext()) {\n this.currentLayer = this.currentLayer.getNext() as GraphLayer;\n }\n\n // @ts-ignore\n return this.currentLayer;\n }\n\n previous(): GraphLayer {\n if (!this.currentLayer) {\n this.currentLayer = this.graph;\n } else if (this.hasPrevious()) {\n this.currentLayer = this.currentLayer.getPreceding() as SyncGraphLayer;\n }\n\n // @ts-ignore\n return this.currentLayer;\n }\n\n getFirst(): GraphLayer {\n if (!this.currentLayer) {\n this.currentLayer = this.graph;\n }\n\n while (this.hasPrevious()) {\n this.currentLayer = this.currentLayer?.getPreceding() as SyncGraphLayer;\n }\n\n return this.currentLayer;\n }\n\n getLast(): GraphLayer {\n if (!this.currentLayer) {\n this.currentLayer = this.graph;\n }\n\n while (this.hasNext()) {\n this.currentLayer = this.currentLayer?.getNext() as GraphLayer;\n }\n\n return this.currentLayer as GraphLayer;\n }\n}\n","import ExecutionChain from \"./ExecutionChain\";\nimport Graph from \"./Graph\";\nimport GraphNode from \"../graph/execution/GraphNode\";\nimport GraphLayerIterator from \"../graph/iterators/GraphLayerIterator\";\nimport GraphVisitor from \"./GraphVisitor\";\nimport GraphContext from \"../graph/context/GraphContext\";\n\nexport default abstract class GraphLayer\n extends ExecutionChain\n implements Graph\n{\n readonly index: number;\n nodes: GraphNode[] = [];\n executionTime: number = 0;\n executionStart: number = 0;\n debug: boolean = false;\n\n constructor(index: number) {\n super();\n this.index = index;\n }\n\n setDebug(value: boolean) {\n this.debug = value;\n for (const node of this.nodes) {\n node.setDebug(value);\n }\n }\n\n abstract execute(context?: GraphContext): unknown;\n\n get hasPreceding() {\n return !!this.previous && this.previous instanceof GraphLayer;\n }\n\n getNumberOfNodes() {\n return this.nodes.length;\n }\n\n getNodesByRoutineExecId(routineExecId: string) {\n return this.nodes.filter((node) => node.routineExecId === routineExecId);\n }\n\n getIdenticalNodes(node: GraphNode) {\n return this.nodes.filter(\n (n) => node.routineExecId === n.routineExecId && node.sharesTaskWith(n),\n );\n }\n\n isProcessed() {\n for (const node of this.nodes) {\n if (!node.isProcessed()) {\n return false;\n }\n }\n\n return true;\n }\n\n graphDone() {\n let done = true;\n\n let layer: GraphLayer | undefined = this;\n while (layer) {\n if (!layer.isProcessed()) {\n done = false;\n break;\n }\n layer = layer.getNext() as GraphLayer;\n }\n\n return done;\n }\n\n setNext(next: GraphLayer) {\n if (next.index <= this.index) {\n return;\n }\n\n if (next.previous !== undefined) {\n this.previous = next.previous;\n }\n\n super.setNext(next);\n }\n\n add(node: GraphNode) {\n this.nodes.push(node);\n }\n\n start() {\n if (!this.executionStart) {\n this.executionStart = Date.now();\n }\n return this.executionStart;\n }\n\n end() {\n if (!this.executionStart) {\n return 0;\n }\n\n const end = Date.now();\n this.executionTime = end - this.executionStart;\n return end;\n }\n\n destroy() {\n for (const node of this.nodes) {\n node.destroy();\n }\n\n this.nodes = [];\n\n if (this.hasNext) {\n const layer = this.getNext() as GraphLayer;\n layer?.destroy();\n }\n\n this.decouple();\n }\n\n getIterator(): GraphLayerIterator {\n return new GraphLayerIterator(this);\n }\n\n accept(visitor: GraphVisitor) {\n visitor.visitLayer(this);\n\n for (const node of this.nodes) {\n node.accept(visitor);\n }\n }\n\n export() {\n return {\n __index: this.index,\n __executionTime: this.executionTime,\n __numberOfNodes: this.getNumberOfNodes(),\n __hasNextLayer: this.hasNext,\n __hasPrecedingLayer: this.hasPreceding,\n __nodes: this.nodes.map((node) => node.id),\n };\n }\n\n log() {\n console.log(`---Layer ${this.index}---`);\n console.log(\"Execution time:\", this.executionTime);\n let prevNode;\n for (const node of this.nodes) {\n if (!prevNode || !prevNode.sharesContextWith(node)) {\n console.log(\"**********\");\n }\n node.log();\n prevNode = node;\n }\n console.log(\"***********\");\n if (this.hasNext) {\n (this.getNext() as GraphLayer).log();\n }\n }\n}\n","import GraphNode from \"./GraphNode\";\nimport GraphLayer from \"../../interfaces/GraphLayer\";\n\nexport default class SyncGraphLayer extends GraphLayer {\n execute(): GraphNode[] {\n this.start();\n\n const result: GraphNode[] = [];\n for (const node of this.nodes) {\n if (node.isProcessed()) {\n continue;\n }\n\n const newNodes = node.execute();\n\n if (newNodes instanceof Promise) {\n console.error(\"Asynchronous functions are not allowed in sync mode!\");\n continue;\n }\n\n result.push(...(newNodes as GraphNode[]));\n }\n\n this.end();\n\n return result;\n }\n}\n","import SyncGraphLayer from \"../graph/execution/SyncGraphLayer\";\nimport GraphNode from \"../graph/execution/GraphNode\";\nimport GraphLayer from \"./GraphLayer\";\n\nexport default abstract class GraphBuilder {\n graph: GraphLayer | undefined;\n topLayerIndex: number = 0;\n layers: GraphLayer[] = [];\n debug: boolean = false;\n\n setDebug(value: boolean) {\n this.debug = value;\n }\n\n getResult(): GraphLayer {\n return this.graph as GraphLayer;\n }\n\n compose() {\n throw \"Implement this in child class...\";\n }\n\n addNode(node: GraphNode) {\n const index = node.getLayerIndex();\n\n this.addLayer(index);\n const layer = this.getLayer(index);\n\n node.scheduleOn(layer);\n }\n\n addNodes(nodes: GraphNode[]) {\n for (const node of nodes) {\n this.addNode(node);\n }\n }\n\n addLayer(index: number) {\n if (!this.graph) {\n const layer = this.createLayer(index);\n this.graph = layer;\n this.layers.push(layer);\n this.topLayerIndex = index;\n return;\n }\n\n const lastLayerIndex = this.topLayerIndex + this.layers.length - 1;\n\n if (index >= this.topLayerIndex && index <= lastLayerIndex) {\n return;\n }\n\n if (this.topLayerIndex > index) {\n const layer = this.createLayer(this.topLayerIndex - 1);\n layer.setNext(this.layers[0]);\n this.graph = layer;\n this.layers.unshift(layer);\n this.topLayerIndex = this.topLayerIndex - 1;\n this.addLayer(index);\n } else {\n const layer = this.createLayer(lastLayerIndex + 1);\n this.layers[this.layers.length - 1].setNext(layer);\n this.layers.push(layer);\n this.addLayer(index);\n }\n }\n\n createLayer(index: number): GraphLayer {\n const layer = new SyncGraphLayer(index);\n layer.setDebug(this.debug);\n return layer;\n }\n\n getLayer(layerIndex: number) {\n return this.layers[layerIndex - this.topLayerIndex];\n }\n\n public reset() {\n this.graph = undefined;\n this.topLayerIndex = 0;\n this.layers = [];\n }\n}\n","import GraphBuilder from \"../../interfaces/GraphBuilder\";\nimport GraphNode from \"../../graph/execution/GraphNode\";\n\nexport default class GraphBreadthFirstBuilder extends GraphBuilder {\n compose() {\n if (!this.graph) {\n return;\n }\n\n const layers = this.graph.getIterator();\n while (layers.hasNext()) {\n const layer = layers.next();\n const newNodes = layer.execute() as GraphNode[];\n this.addNodes(newNodes);\n }\n }\n}\n","import GraphNode from \"../graph/execution/GraphNode\";\nimport GraphBuilder from \"./GraphBuilder\";\nimport GraphRun from \"../engine/GraphRun\";\nimport GraphBreadthFirstBuilder from \"../engine/builders/GraphBreadthFirstBuilder\";\n\nexport default abstract class GraphRunStrategy {\n graphBuilder: GraphBuilder;\n runInstance?: GraphRun;\n\n constructor() {\n this.graphBuilder = new GraphBreadthFirstBuilder();\n }\n\n setRunInstance(runInstance: GraphRun) {\n this.runInstance = runInstance;\n }\n\n changeStrategy(builder: GraphBuilder) {\n this.graphBuilder = builder;\n }\n\n reset() {\n this.graphBuilder.reset();\n }\n\n addNode(node: GraphNode) {\n this.graphBuilder.addNode(node);\n }\n\n updateRunInstance() {\n this.runInstance?.setGraph(this.graphBuilder.getResult());\n }\n\n abstract run(): void;\n abstract export(): any;\n}\n","import GraphNode from \"../graph/execution/GraphNode\";\n\ntype ProcessFunction = (node: GraphNode) => Promise<GraphNode[]> | GraphNode[];\n\nexport default class ThrottleEngine {\n static instance_: ThrottleEngine;\n\n static get instance() {\n if (!this.instance_) {\n this.instance_ = new ThrottleEngine();\n }\n return this.instance_;\n }\n\n queues: { [tag: string]: [ProcessFunction, GraphNode][] } = {};\n runningCounts: { [tag: string]: number } = {};\n maxConcurrencyPerTag: { [tag: string]: number } = {};\n\n functionIdToPromiseResolve: {\n [functionInstanceId: string]: (value: GraphNode[]) => void;\n } = {};\n\n /**\n * Set a custom concurrency limit for a specific tag\n */\n setConcurrencyLimit(tag: string, limit: number) {\n this.maxConcurrencyPerTag[tag] = limit;\n }\n\n throttle(\n fn: ProcessFunction,\n node: GraphNode,\n tag: string = \"default\",\n ): Promise<GraphNode[]> {\n const functionPromise = new Promise((resolve) => {\n this.functionIdToPromiseResolve[node.id] = resolve as (\n value: GraphNode[],\n ) => void;\n }) as Promise<GraphNode[]>;\n\n this.queues[tag] ??= [];\n this.queues[tag].push([fn, node]);\n\n // Default to 1 if not set\n this.maxConcurrencyPerTag[tag] ??= 1;\n\n this.processQueue(tag);\n\n return functionPromise;\n }\n\n processQueue(tag: string) {\n const maxAllowed = this.maxConcurrencyPerTag[tag];\n\n while (\n (this.queues[tag]?.length ?? 0) > 0 &&\n (this.runningCounts[tag] ?? 0) < maxAllowed\n ) {\n this.runningCounts[tag] = (this.runningCounts[tag] || 0) + 1;\n const item = this.queues[tag].shift()!;\n this.process(item).then(() => {\n this.runningCounts[tag]--;\n this.processQueue(tag); // Re-check queue\n });\n }\n\n // Clean up if done\n if (\n (this.queues[tag]?.length ?? 0) === 0 &&\n this.runningCounts[tag] === 0\n ) {\n delete this.queues[tag];\n delete this.runningCounts[tag];\n }\n }\n\n async process(item: [ProcessFunction, GraphNode]) {\n const fn = item[0];\n const node = item[1];\n\n const context = await fn(node);\n\n this.functionIdToPromiseResolve[node.id](context);\n delete this.functionIdToPromiseResolve[node.id];\n }\n}\n","import GraphNode from \"./GraphNode\";\nimport GraphLayer from \"../../interfaces/GraphLayer\";\nimport ThrottleEngine from \"../../engine/ThrottleEngine\";\n\nexport default class AsyncGraphLayer extends GraphLayer {\n waitingNodes: GraphNode[] = [];\n processingNodes: Set<GraphNode> = new Set();\n\n constructor(index: number) {\n super(index);\n }\n\n add(node: GraphNode) {\n this.nodes.push(node);\n this.waitingNodes.push(node);\n }\n\n execute() {\n if (this.waitingNodes.length === 0) {\n return {};\n }\n\n this.start();\n\n const result: {\n [routineExecId: string]: (GraphNode[] | Promise<GraphNode[]>)[];\n } = {};\n\n while (this.waitingNodes.length > 0) {\n const node = this.waitingNodes.shift();\n if (!node) {\n break;\n }\n\n this.processingNodes.add(node);\n\n result[node.routineExecId] ??= [];\n\n let nextNodes;\n if (node?.getConcurrency()) {\n const tag = node.getTag();\n ThrottleEngine.instance.setConcurrencyLimit(tag, node.getConcurrency());\n nextNodes = ThrottleEngine.instance.throttle(\n this.processNode.bind(this),\n node,\n tag,\n );\n } else {\n nextNodes = this.processNode(node);\n }\n\n result[node.routineExecId].push(nextNodes);\n }\n\n if (this.processingNodes.size === 0) {\n this.end();\n }\n\n return result;\n }\n\n processNode(node: GraphNode): Promise<GraphNode[]> | GraphNode[] {\n node.start();\n\n const nextNodes = node.execute();\n\n if (nextNodes instanceof Promise) {\n return this.processAsync(node, nextNodes);\n }\n\n this.processingNodes.delete(node);\n\n return nextNodes;\n }\n\n async processAsync(node: GraphNode, nextNodes: Promise<GraphNode[]>) {\n const result = await nextNodes;\n this.processingNodes.delete(node);\n return result;\n }\n\n destroy() {\n super.destroy();\n this.waitingNodes = [];\n this.processingNodes = new Set();\n }\n}\n","import GraphBuilder from \"../../interfaces/GraphBuilder\";\nimport { sleep } from \"../../utils/promise\";\nimport AsyncGraphLayer from \"../../graph/execution/AsyncGraphLayer\";\nimport GraphNode from \"../../graph/execution/GraphNode\";\n\nexport default class GraphAsyncQueueBuilder extends GraphBuilder {\n async compose() {\n if (!this.graph) {\n return;\n }\n\n const layers = this.graph.getIterator();\n\n while (true) {\n let layer = layers.getFirst();\n if (layer.graphDone()) {\n return;\n }\n\n this.processLayer(layer as AsyncGraphLayer);\n\n while (layers.hasNext()) {\n layer = layers.next();\n this.processLayer(layer as AsyncGraphLayer);\n }\n\n await sleep(0); // Take a breath\n }\n }\n\n processLayer(layer: AsyncGraphLayer) {\n const nextNodes = layer.execute();\n for (const routineExecId of Object.keys(nextNodes)) {\n const group = nextNodes[routineExecId];\n if (group.some((nodes) => nodes instanceof Promise)) {\n Promise.all(group).then((result) =>\n this.addNodes(result.flat() as GraphNode[]),\n );\n } else {\n this.addNodes(group.flat() as GraphNode[]);\n }\n }\n }\n\n createLayer(index: number) {\n const layer = new AsyncGraphLayer(index);\n layer.setDebug(this.debug);\n return layer;\n }\n}\n","import GraphRunStrategy from \"../../interfaces/GraphRunStrategy\";\nimport GraphAsyncQueueBuilder from \"../builders/GraphAsyncQueueBuilder\";\n\nexport default class GraphAsyncRun extends GraphRunStrategy {\n constructor() {\n super();\n this.graphBuilder = new GraphAsyncQueueBuilder();\n }\n\n async run() {\n await this.graphBuilder.compose();\n this.updateRunInstance();\n this.reset();\n }\n\n reset() {\n super.reset();\n }\n\n export(): any {\n return {};\n }\n}\n","import GraphRunStrategy from \"../../interfaces/GraphRunStrategy\";\n\nexport default class GraphStandardRun extends GraphRunStrategy {\n run() {\n this.graphBuilder.compose();\n this.updateRunInstance();\n this.reset();\n }\n\n export(): any {\n return {};\n }\n}\n","import SignalBroker from \"./engine/SignalBroker\";\nimport GraphRunner from \"./engine/GraphRunner\";\nimport GraphRegistry from \"./registry/GraphRegistry\";\nimport Task, { TaskFunction, ThrottleTagGetter } from \"./graph/definition/Task\";\nimport DebounceTask, { DebounceOptions } from \"./graph/definition/DebounceTask\";\nimport EphemeralTask, {\n EphemeralTaskOptions,\n} from \"./graph/definition/EphemeralTask\";\nimport GraphRoutine from \"./graph/definition/GraphRoutine\";\nimport GraphAsyncRun from \"./engine/strategy/GraphAsyncRun\";\nimport GraphStandardRun from \"./engine/strategy/GraphStandardRun\";\nimport { SchemaDefinition } from \"./types/schema\";\n\nexport interface TaskOptions {\n concurrency?: number;\n timeout?: number;\n register?: boolean;\n isUnique?: boolean;\n isMeta?: boolean;\n isSubMeta?: boolean;\n isHidden?: boolean;\n getTagCallback?: ThrottleTagGetter;\n inputSchema?: SchemaDefinition;\n validateInputContext?: boolean;\n outputSchema?: SchemaDefinition;\n validateOutputContext?: boolean;\n retryCount?: number;\n retryDelay?: number;\n retryDelayMax?: number;\n retryDelayFactor?: number;\n}\n\nexport type CadenzaMode = \"dev\" | \"debug\" | \"verbose\" | \"production\";\n\nexport default class Cadenza {\n public static broker: SignalBroker;\n public static runner: GraphRunner;\n public static metaRunner: GraphRunner;\n public static registry: GraphRegistry;\n static isBootstrapped = false;\n static mode: CadenzaMode = \"production\";\n\n public static bootstrap(): void {\n if (this.isBootstrapped) return;\n this.isBootstrapped = true;\n\n // 1. SignalBroker (empty, for observations)\n this.broker = SignalBroker.instance;\n\n // 2. Runners (now init broker with them)\n this.runner = new GraphRunner();\n this.metaRunner = new GraphRunner(true);\n this.broker.bootstrap(this.runner, this.metaRunner);\n\n if (this.mode === \"debug\" || this.mode === \"dev\") {\n this.broker.setDebug(true);\n this.runner.setDebug(true);\n this.metaRunner.setDebug(true);\n }\n\n // 3. GraphRegistry (seed observes on broker)\n this.registry = GraphRegistry.instance;\n\n // 4. Runners (create meta tasks)\n this.broker.init();\n this.runner.init();\n this.metaRunner.init();\n }\n\n public static get runStrategy() {\n return {\n PARALLEL: new GraphAsyncRun(),\n SEQUENTIAL: new GraphStandardRun(),\n };\n }\n\n public static setMode(mode: CadenzaMode) {\n this.mode = mode;\n\n this.bootstrap();\n\n if (mode === \"debug\" || mode === \"dev\") {\n this.broker.setDebug(true);\n this.runner.setDebug(true);\n }\n\n if (mode === \"verbose\") {\n this.broker.setDebug(true);\n this.broker.setVerbose(true);\n this.runner.setDebug(true);\n this.runner.setVerbose(true);\n }\n\n if (mode === \"production\") {\n this.broker.setDebug(false);\n this.broker.setVerbose(false);\n this.runner.setDebug(false);\n this.runner.setVerbose(false);\n }\n }\n\n /**\n * Validates a name for uniqueness and non-emptiness.\n * @param name The name to validate.\n * @throws Error if invalid.\n */\n public static validateName(name: string): void {\n if (!name || typeof name !== \"string\") {\n throw new Error(\"Task or Routine name must be a non-empty string.\");\n }\n // Further uniqueness check delegated to GraphRegistry.register*\n }\n\n /**\n * Creates a standard Task and registers it in the GraphRegistry.\n * @param name Unique identifier for the task.\n * @param func The function or async generator to execute.\n * @param description Optional human-readable description for introspection.\n * @param options Optional task options.\n * @returns The created Task instance.\n * @throws Error if name is invalid or duplicate in registry.\n */\n static createTask(\n name: string,\n func: TaskFunction,\n description?: string,\n options: TaskOptions = {},\n ): Task {\n this.bootstrap();\n this.validateName(name);\n\n options = {\n concurrency: 0,\n timeout: 0,\n register: true,\n isUnique: false,\n isMeta: false,\n isSubMeta: false,\n isHidden: false,\n getTagCallback: undefined,\n inputSchema: undefined,\n validateInputContext: false,\n outputSchema: undefined,\n validateOutputContext: false,\n retryCount: 0,\n retryDelay: 0,\n retryDelayMax: 0,\n retryDelayFactor: 1,\n ...options,\n };\n\n return new Task(\n name,\n func,\n description,\n options.concurrency,\n options.timeout,\n options.register,\n options.isUnique,\n options.isMeta,\n options.isSubMeta,\n options.isHidden,\n options.getTagCallback,\n options.inputSchema,\n options.validateInputContext,\n options.outputSchema,\n options.validateOutputContext,\n options.retryCount,\n options.retryDelay,\n options.retryDelayMax,\n options.retryDelayFactor,\n );\n }\n\n /**\n * Creates a MetaTask (for meta-layer graphs) and registers it.\n * MetaTasks suppress further meta-signal emissions to prevent loops.\n * @param name Unique identifier for the meta-task.\n * @param func The function or async generator to execute.\n * @param description Optional description.\n * @param options Optional task options.\n * @returns The created MetaTask instance.\n * @throws Error if name invalid or duplicate.\n */\n static createMetaTask(\n name: string,\n func: TaskFunction,\n description?: string,\n options: TaskOptions = {},\n ): Task {\n options.isMeta = true;\n return this.createTask(name, func, description, options);\n }\n\n /**\n * Creates a UniqueTask (executes once per execution ID, merging parents) and registers it.\n * Use for fan-in/joins after parallel branches.\n * @param name Unique identifier.\n * @param func Function receiving joinedContexts.\n * @param description Optional description.\n * @param options Optional task options.\n * @returns The created UniqueTask.\n * @throws Error if invalid.\n */\n static createUniqueTask(\n name: string,\n func: TaskFunction,\n description?: string,\n options: TaskOptions = {},\n ): Task {\n options.isUnique = true;\n return this.createTask(name, func, description, options);\n }\n\n /**\n * Creates a UniqueMetaTask for meta-layer joins.\n * @param name Unique identifier.\n * @param func Function.\n * @param description Optional.\n * @param options Optional task options.\n * @returns The created UniqueMetaTask.\n */\n static createUniqueMetaTask(\n name: string,\n func: TaskFunction,\n description?: string,\n options: TaskOptions = {},\n ): Task {\n options.isMeta = true;\n options.isUnique = true;\n return this.createUniqueTask(name, func, description, options);\n }\n\n /**\n * Creates a ThrottledTask (rate-limited by concurrency or custom groups) and registers it.\n * @param name Unique identifier.\n * @param func Function.\n * @param throttledIdGetter Optional getter for dynamic grouping (e.g., per-user).\n * @param description Optional.\n * @param options Optional task options.\n * @returns The created ThrottledTask.\n * @edge If no getter, throttles per task ID; use for resource protection.\n */\n static createThrottledTask(\n name: string,\n func: TaskFunction,\n throttledIdGetter: ThrottleTagGetter = () => \"default\",\n description?: string,\n options: TaskOptions = {},\n ): Task {\n options.concurrency = 1;\n options.getTagCallback = throttledIdGetter;\n return this.createTask(name, func, description, options);\n }\n\n /**\n * Creates a ThrottledMetaTask for meta-layer throttling.\n * @param name Identifier.\n * @param func Function.\n * @param throttledIdGetter Optional getter.\n * @param description Optional.\n * @param options Optional task options.\n * @returns The created ThrottledMetaTask.\n */\n static createThrottledMetaTask(\n name: string,\n func: TaskFunction,\n throttledIdGetter: ThrottleTagGetter,\n description?: string,\n options: TaskOptions = {},\n ): Task {\n options.isMeta = true;\n return this.createThrottledTask(\n name,\n func,\n throttledIdGetter,\n description,\n options,\n );\n }\n\n /**\n * Creates a DebounceTask (delays exec until quiet period) and registers it.\n * @param name Identifier.\n * @param func Function.\n * @param description Optional.\n * @param debounceTime Delay in ms (default 1000).\n * @param options Optional task options plus optional debounce config (e.g., leading/trailing).\n * @returns The created DebounceTask.\n * @edge Multiple triggers within time collapse to one exec.\n */\n static createDebounceTask(\n name: string,\n func: TaskFunction,\n description?: string,\n debounceTime: number = 1000,\n options: TaskOptions & DebounceOptions = {},\n ): DebounceTask {\n this.bootstrap();\n this.validateName(name);\n\n options = {\n concurrency: 0,\n timeout: 0,\n register: true,\n leading: false,\n trailing: true,\n maxWait: 0,\n isUnique: false,\n isMeta: false,\n isSubMeta: false,\n isHidden: false,\n inputSchema: undefined,\n validateInputContext: false,\n outputSchema: undefined,\n validateOutputContext: false,\n ...options,\n };\n\n return new DebounceTask(\n name,\n func,\n description,\n debounceTime,\n options.leading,\n options.trailing,\n options.maxWait,\n options.concurrency,\n options.timeout,\n options.register,\n options.isUnique,\n options.isMeta,\n options.isSubMeta,\n options.isHidden,\n options.inputSchema,\n options.validateInputContext,\n options.outputSchema,\n options.validateOutputContext,\n );\n }\n\n /**\n * Creates a DebouncedMetaTask for meta-layer debouncing.\n * @param name Identifier.\n * @param func Function.\n * @param description Optional.\n * @param debounceTime Delay in ms.\n * @param options Optional task options plus optional debounce config (e.g., leading/trailing).\n * @returns The created DebouncedMetaTask.\n */\n static createDebounceMetaTask(\n name: string,\n func: TaskFunction,\n description?: string,\n debounceTime: number = 1000,\n options: TaskOptions & DebounceOptions = {},\n ): DebounceTask {\n options.isMeta = true;\n return this.createDebounceTask(\n name,\n func,\n description,\n debounceTime,\n options,\n );\n }\n\n /**\n * Creates an EphemeralTask (self-destructs after exec or condition) without default registration.\n * Useful for transients; optionally register if needed.\n * @param name Identifier (may not be unique if not registered).\n * @param func Function.\n * @param description Optional.\n * @param options Optional task options plus optional \"once\" (true) and \"destroyCondition\" (ctx => boolean).\n * @returns The created EphemeralTask.\n * @edge Destruction triggered post-exec via Node/Builder; emits meta-signal for cleanup.\n */\n static createEphemeralTask(\n name: string,\n func: TaskFunction,\n description?: string,\n options: TaskOptions & EphemeralTaskOptions = {},\n ): EphemeralTask {\n this.bootstrap();\n this.validateName(name);\n\n options = {\n concurrency: 0,\n timeout: 0,\n register: true,\n isUnique: false,\n isMeta: false,\n isSubMeta: false,\n isHidden: false,\n once: true,\n destroyCondition: () => true,\n getTagCallback: undefined,\n inputSchema: undefined,\n validateInputContext: false,\n outputSchema: undefined,\n validateOutputContext: false,\n retryCount: 0,\n retryDelay: 0,\n retryDelayMax: 0,\n retryDelayFactor: 1,\n ...options,\n };\n\n return new EphemeralTask(\n name,\n func,\n description,\n options.once,\n options.destroyCondition,\n options.concurrency,\n options.timeout,\n options.register,\n options.isUnique,\n options.isMeta,\n options.isSubMeta,\n options.isHidden,\n options.getTagCallback,\n options.inputSchema,\n options.validateInputContext,\n options.outputSchema,\n options.validateOutputContext,\n options.retryCount,\n options.retryDelay,\n options.retryDelayMax,\n options.retryDelayFactor,\n );\n }\n\n /**\n * Creates an EphemeralMetaTask for meta-layer transients.\n * @param name Identifier.\n * @param func Function.\n * @param description Optional.\n * @param options Optional task options plus optional \"once\" (true) and \"destroyCondition\" (ctx => boolean).\n * @returns The created EphemeralMetaTask.\n */\n static createEphemeralMetaTask(\n name: string,\n func: TaskFunction,\n description?: string,\n options: TaskOptions & EphemeralTaskOptions = {},\n ): EphemeralTask {\n options.isMeta = true;\n return this.createEphemeralTask(name, func, description, options);\n }\n\n /**\n * Creates a GraphRoutine (named entry to starting tasks) and registers it.\n * @param name Unique identifier.\n * @param tasks Starting tasks (can be empty, but warns as no-op).\n * @param description Optional.\n * @returns The created GraphRoutine.\n * @edge If tasks empty, routine is valid but inert.\n */\n static createRoutine(\n name: string,\n tasks: Task[],\n description: string = \"\",\n ): GraphRoutine {\n this.bootstrap();\n this.validateName(name);\n if (tasks.length === 0) {\n console.warn(`Routine '${name}' created with no starting tasks (no-op).`);\n }\n return new GraphRoutine(name, tasks, description);\n }\n\n /**\n * Creates a MetaRoutine for meta-layer entry points.\n * @param name Identifier.\n * @param tasks Starting tasks.\n * @param description Optional.\n * @returns The created MetaRoutine.\n */\n static createMetaRoutine(\n name: string,\n tasks: Task[],\n description: string = \"\",\n ): GraphRoutine {\n this.bootstrap();\n this.validateName(name);\n if (tasks.length === 0) {\n console.warn(`Routine '${name}' created with no starting tasks (no-op).`);\n }\n return new GraphRoutine(name, tasks, description, true);\n }\n\n static reset() {\n this.broker?.reset();\n this.registry?.reset();\n this.isBootstrapped = false;\n }\n}\n","import Task from \"./Task\";\n\nexport default class SignalTask extends Task {\n constructor(signal: string, description: string = \"\") {\n super(signal, () => true, description);\n\n this.signalsToEmitAfter.add(signal);\n }\n}\n"],"mappings":"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","names":["import_uuid","task","uuid","import_uuid","import_uuid","uuid","uuid","result","outputValidation","uuid"]}
|
|
1
|
+
{"version":3,"sources":["../src/index.ts","../src/utils/tools.ts","../src/engine/SignalBroker.ts","../src/engine/GraphRunner.ts","../src/engine/GraphRun.ts","../src/utils/ColorRandomizer.ts","../src/engine/exporters/vue-flow/VueFlowExportVisitor.ts","../src/engine/exporters/vue-flow/VueFlowExporter.ts","../src/graph/execution/GraphNode.ts","../src/graph/context/GraphContext.ts","../src/graph/iterators/GraphNodeIterator.ts","../src/interfaces/SignalEmitter.ts","../src/utils/promise.ts","../src/graph/definition/GraphRoutine.ts","../src/graph/iterators/TaskIterator.ts","../src/graph/definition/Task.ts","../src/registry/GraphRegistry.ts","../src/graph/definition/DebounceTask.ts","../src/graph/definition/EphemeralTask.ts","../src/interfaces/ExecutionChain.ts","../src/graph/iterators/GraphLayerIterator.ts","../src/interfaces/GraphLayer.ts","../src/graph/execution/SyncGraphLayer.ts","../src/interfaces/GraphBuilder.ts","../src/engine/builders/GraphBreadthFirstBuilder.ts","../src/interfaces/GraphRunStrategy.ts","../src/engine/ThrottleEngine.ts","../src/graph/execution/AsyncGraphLayer.ts","../src/engine/builders/GraphAsyncQueueBuilder.ts","../src/engine/strategy/GraphAsyncRun.ts","../src/engine/strategy/GraphStandardRun.ts","../src/Cadenza.ts","../src/graph/definition/SignalTask.ts"],"sourcesContent":["import Cadenza, { CadenzaMode, TaskOptions } from \"./Cadenza\";\nimport GraphRun from \"./engine/GraphRun\";\nimport GraphRunner from \"./engine/GraphRunner\";\nimport SignalBroker from \"./engine/SignalBroker\";\nimport GraphContext from \"./graph/context/GraphContext\";\nimport DebounceTask, { DebounceOptions } from \"./graph/definition/DebounceTask\";\nimport EphemeralTask, {\n EphemeralTaskOptions,\n} from \"./graph/definition/EphemeralTask\";\nimport GraphRoutine from \"./graph/definition/GraphRoutine\";\nimport SignalTask from \"./graph/definition/SignalTask\";\nimport Task, {\n TaskFunction,\n TaskResult,\n ThrottleTagGetter,\n} from \"./graph/definition/Task\";\nimport SignalEmitter from \"./interfaces/SignalEmitter\";\nimport GraphRegistry from \"./registry/GraphRegistry\";\nimport { AnyObject } from \"./types/global\";\nimport {\n SchemaConstraints,\n SchemaDefinition,\n SchemaType,\n} from \"./types/schema\";\n\nexport default Cadenza;\nexport {\n Task,\n GraphRoutine,\n DebounceTask,\n EphemeralTask,\n SignalTask,\n SignalEmitter,\n GraphContext,\n GraphRegistry,\n GraphRun,\n TaskResult,\n TaskOptions,\n AnyObject,\n SchemaDefinition,\n SchemaConstraints,\n SchemaType,\n ThrottleTagGetter,\n SignalBroker,\n GraphRunner,\n CadenzaMode,\n TaskFunction,\n DebounceOptions,\n EphemeralTaskOptions,\n};\n","/**\n * Deep clones an input with optional filter.\n * @param input The input to clone.\n * @param filterOut Predicate to skip keys (true = skip).\n * @returns Cloned input.\n * @edge Handles arrays/objects; skips cycles with visited.\n * @edge Primitives returned as-is; functions copied by reference.\n */\nexport function deepCloneFilter<T>(\n input: T,\n filterOut: (key: string) => boolean = () => false,\n): T {\n if (input === null || typeof input !== \"object\") {\n return input;\n }\n\n const visited = new WeakMap<any, any>(); // For cycle detection\n\n const stack: Array<{ source: any; target: any; key?: string }> = [];\n const output = Array.isArray(input) ? [] : {};\n\n stack.push({ source: input, target: output });\n visited.set(input, output);\n\n while (stack.length) {\n const { source, target, key } = stack.pop()!;\n const currentTarget = key !== undefined ? target[key] : target;\n\n for (const [k, value] of Object.entries(source)) {\n if (filterOut(k)) continue;\n\n if (value && typeof value === \"object\") {\n if (visited.has(value)) {\n currentTarget[k] = visited.get(value); // Cycle: link to existing clone\n continue;\n }\n\n const clonedValue = Array.isArray(value) ? [] : {};\n currentTarget[k] = clonedValue;\n visited.set(value, clonedValue);\n\n stack.push({ source: value, target: currentTarget, key: k });\n } else {\n currentTarget[k] = value;\n }\n }\n }\n\n return output as T;\n}\n\nexport function formatTimestamp(timestamp: number) {\n return new Date(timestamp).toISOString();\n}\n","import GraphRunner from \"./GraphRunner\";\nimport { AnyObject } from \"../types/global\";\nimport Task from \"../graph/definition/Task\";\nimport GraphRoutine from \"../graph/definition/GraphRoutine\";\nimport Cadenza from \"../Cadenza\";\nimport { formatTimestamp } from \"../utils/tools\";\n\nexport default class SignalBroker {\n static instance_: SignalBroker;\n\n /**\n * Singleton instance for signal management.\n * @returns The broker instance.\n */\n static get instance(): SignalBroker {\n if (!this.instance_) {\n this.instance_ = new SignalBroker();\n }\n return this.instance_;\n }\n\n debug: boolean = false;\n verbose: boolean = false;\n\n setDebug(value: boolean) {\n this.debug = value;\n }\n\n setVerbose(value: boolean) {\n this.verbose = value;\n }\n\n validateSignalName(signalName: string) {\n if (signalName.length > 100) {\n throw new Error(\n `Signal name must be less than 100 characters: ${signalName}`,\n );\n }\n\n if (signalName.includes(\" \")) {\n throw new Error(`Signal name must not contain spaces: ${signalName}\"`);\n }\n\n if (signalName.includes(\"\\\\\")) {\n throw new Error(\n `Signal name must not contain backslashes: ${signalName}`,\n );\n }\n\n if (/[A-Z]/.test(signalName.split(\":\")[0].split(\".\").slice(1).join(\".\"))) {\n throw new Error(\n `Signal name must not contain uppercase letters in the middle of the signal name. It is only allowed in the first part of the signal name: ${signalName}`,\n );\n }\n }\n\n runner: GraphRunner | undefined;\n metaRunner: GraphRunner | undefined;\n\n public getSignalsTask: Task | undefined;\n\n signalObservers: Map<\n string,\n {\n fn: (\n runner: GraphRunner,\n tasks: (Task | GraphRoutine)[],\n context: AnyObject,\n ) => void;\n tasks: Set<Task | GraphRoutine>;\n }\n > = new Map();\n\n emitStacks: Map<string, Map<string, AnyObject>> = new Map(); // execId -> emitted signals\n\n constructor() {\n this.addSignal(\"meta.signal_broker.added\");\n }\n\n /**\n * Initializes with runners.\n * @param runner Standard runner for user signals.\n * @param metaRunner Meta runner for 'meta.' signals (suppresses further meta-emits).\n */\n bootstrap(runner: GraphRunner, metaRunner: GraphRunner): void {\n this.runner = runner;\n this.metaRunner = metaRunner;\n }\n\n init() {\n Cadenza.createMetaTask(\n \"Execute and clear queued signals\",\n () => {\n for (const [id, signals] of this.emitStacks.entries()) {\n signals.forEach((context, signal) => {\n this.execute(signal, context);\n signals.delete(signal);\n });\n\n this.emitStacks.delete(id);\n }\n return true;\n },\n \"Executes queued signals and clears the stack\",\n )\n .doOn(\"meta.process_signal_queue_requested\")\n .emits(\"meta.signal_broker.queue_empty\");\n\n this.getSignalsTask = Cadenza.createMetaTask(\"Get signals\", (ctx) => {\n return {\n __signals: Array.from(this.signalObservers.keys()),\n ...ctx,\n };\n });\n }\n\n /**\n * Observes a signal with a routine/task.\n * @param signal The signal (e.g., 'domain.action', 'domain.*' for wildcards).\n * @param routineOrTask The observer.\n * @edge Duplicates ignored; supports wildcards for broad listening.\n */\n observe(signal: string, routineOrTask: Task | GraphRoutine): void {\n this.addSignal(signal);\n this.signalObservers.get(signal)!.tasks.add(routineOrTask);\n }\n\n /**\n * Unsubscribes a routine/task from a signal.\n * @param signal The signal.\n * @param routineOrTask The observer.\n * @edge Removes all instances if duplicate; deletes if empty.\n */\n unsubscribe(signal: string, routineOrTask: Task | GraphRoutine): void {\n const obs = this.signalObservers.get(signal);\n if (obs) {\n obs.tasks.delete(routineOrTask);\n if (obs.tasks.size === 0) {\n this.signalObservers.delete(signal);\n }\n }\n }\n\n /**\n * Emits a signal and bubbles to matching wildcards/parents (e.g., 'a.b.action' triggers 'a.b.action', 'a.b.*', 'a.*').\n * @param signal The signal name.\n * @param context The payload.\n * @edge Fire-and-forget; guards against loops per execId (from context.__graphExecId).\n * @edge For distribution, SignalTask can prefix and proxy remote.\n */\n emit(signal: string, context: AnyObject = {}): void {\n const execId = context.__routineExecId || \"global\"; // Assume from metadata\n delete context.__routineExecId;\n\n if (!this.emitStacks.has(execId)) this.emitStacks.set(execId, new Map());\n const stack = this.emitStacks.get(execId)!;\n stack.set(signal, context);\n\n let executed = false;\n try {\n executed = this.execute(signal, context);\n } finally {\n if (executed) stack.delete(signal);\n if (stack.size === 0) this.emitStacks.delete(execId);\n }\n }\n\n execute(signal: string, context: AnyObject): boolean {\n const isMeta = signal.startsWith(\"meta.\");\n const isSubMeta = signal.startsWith(\"sub_meta.\") || context.__isSubMeta;\n const isMetric = context.__signalEmission?.isMetric;\n\n if (!isSubMeta && (!isMeta || this.debug)) {\n const emittedAt = Date.now();\n context.__signalEmission = {\n ...context.__signalEmission,\n signalName: signal,\n emittedAt: formatTimestamp(emittedAt),\n consumed: false,\n consumedBy: null,\n isMeta,\n };\n } else if (isSubMeta) {\n context.__isSubMeta = true;\n delete context.__signalEmission;\n } else {\n delete context.__signalEmission;\n }\n\n if (this.debug && ((!isMetric && !isSubMeta) || this.verbose)) {\n console.log(\n `EMITTING ${signal} to listeners ${this.signalObservers.get(signal)?.tasks.size ?? 0} with context ${this.verbose ? JSON.stringify(context) : JSON.stringify(context).slice(0, 100)}`,\n );\n }\n\n let executed;\n executed = this.executeListener(signal, context); // Exact signal\n\n if (!isSubMeta) {\n const parts = signal\n .slice(0, Math.max(signal.lastIndexOf(\":\"), signal.lastIndexOf(\".\")))\n .split(\".\");\n for (let i = parts.length; i > -1; i--) {\n const parent = parts.slice(0, i).join(\".\");\n executed = executed || this.executeListener(parent + \".*\", context); // Wildcard\n }\n }\n\n return executed;\n }\n\n executeListener(signal: string, context: AnyObject): boolean {\n const obs = this.signalObservers.get(signal);\n const isMeta = signal.startsWith(\"meta\");\n const runner = isMeta ? this.metaRunner : this.runner;\n if (obs && obs.tasks.size && runner) {\n obs.fn(runner, Array.from(obs.tasks), context);\n return true;\n }\n return false;\n }\n\n addSignal(signal: string): void {\n let _signal = signal;\n if (!this.signalObservers.has(_signal)) {\n this.validateSignalName(_signal);\n this.signalObservers.set(_signal, {\n fn: (\n runner: GraphRunner,\n tasks: (Task | GraphRoutine)[],\n context: AnyObject,\n ) => runner.run(tasks, context),\n tasks: new Set(),\n });\n\n const sections = _signal.split(\":\");\n if (sections.length === 2) {\n _signal = sections[0];\n\n if (!this.signalObservers.has(sections[0])) {\n this.signalObservers.set(_signal, {\n fn: (\n runner: GraphRunner,\n tasks: (Task | GraphRoutine)[],\n context: AnyObject,\n ) => runner.run(tasks, context),\n tasks: new Set(),\n });\n } else {\n return;\n }\n }\n\n this.emit(\"meta.signal_broker.added\", { __signalName: _signal });\n }\n }\n\n // TODO schedule signals\n\n /**\n * Lists all observed signals.\n * @returns Array of signals.\n */\n listObservedSignals(): string[] {\n return Array.from(this.signalObservers.keys());\n }\n\n reset() {\n this.emitStacks.clear();\n this.signalObservers.clear();\n }\n}\n","import { v4 as uuid } from \"uuid\";\nimport Task from \"../graph/definition/Task\";\nimport GraphRun from \"./GraphRun\";\nimport GraphNode from \"../graph/execution/GraphNode\";\nimport GraphRunStrategy from \"../interfaces/GraphRunStrategy\";\nimport { AnyObject } from \"../types/global\";\nimport GraphRoutine from \"../graph/definition/GraphRoutine\";\nimport SignalEmitter from \"../interfaces/SignalEmitter\";\nimport Cadenza from \"../Cadenza\";\nimport GraphRegistry from \"../registry/GraphRegistry\";\nimport GraphContext from \"../graph/context/GraphContext\";\nimport { formatTimestamp } from \"../utils/tools\";\n\nexport default class GraphRunner extends SignalEmitter {\n currentRun: GraphRun;\n debug: boolean = false;\n verbose: boolean = false;\n isRunning: boolean = false;\n readonly isMeta: boolean = false;\n\n strategy: GraphRunStrategy;\n\n /**\n * Constructs a runner.\n * @param isMeta Meta flag (default false).\n * @edge Creates 'Start run' meta-task chained to registry gets.\n */\n constructor(isMeta: boolean = false) {\n super(isMeta);\n this.isMeta = isMeta;\n this.strategy = Cadenza.runStrategy.PARALLEL;\n this.currentRun = new GraphRun(this.strategy);\n }\n\n init() {\n if (this.isMeta) return;\n\n Cadenza.createMetaTask(\n \"Start run\",\n this.startRun.bind(this),\n \"Starts a run\",\n ).doAfter(\n GraphRegistry.instance.getTaskByName,\n GraphRegistry.instance.getRoutineByName,\n );\n }\n\n /**\n * Adds tasks/routines to current run.\n * @param tasks Tasks/routines.\n * @param context Context (defaults {}).\n * @edge Flattens routines to tasks; generates routineExecId if not in context.\n * @edge Emits 'meta.runner.added_tasks' with metadata.\n * @edge Empty tasks warns no-op.\n */\n addTasks(\n tasks: Task | GraphRoutine | (Task | GraphRoutine)[],\n context: AnyObject = {},\n ): void {\n let _tasks = Array.isArray(tasks) ? tasks : [tasks];\n if (_tasks.length === 0) {\n console.warn(\"No tasks/routines to add.\");\n return;\n }\n\n let routineName = _tasks.map((t) => t.name).join(\" | \");\n let routineVersion = null;\n let isMeta = _tasks.every((t) => t.isMeta);\n\n const allTasks = _tasks.flatMap((t) => {\n if (t instanceof GraphRoutine) {\n routineName = t.name;\n routineVersion = t.version;\n isMeta = t.isMeta;\n const routineTasks: Task[] = [];\n t.forEachTask((task: Task) => routineTasks.push(task));\n return routineTasks;\n }\n return t;\n });\n\n const isSubMeta =\n allTasks.some((t) => t.isSubMeta) || !!context.__isSubMeta;\n context.__isSubMeta = isSubMeta;\n\n const isNewTrace =\n !context.__routineExecId &&\n !context.__metadata?.__executionTraceId &&\n !context.__executionTraceId;\n\n const executionTraceId =\n context.__metadata?.__executionTraceId ??\n context.__executionTraceId ??\n uuid();\n\n context.__executionTraceId = executionTraceId;\n\n const routineExecId = context.__routineExecId ?? uuid();\n context.__routineExecId = routineExecId;\n\n const ctx = new GraphContext(context || {});\n\n if (!isSubMeta) {\n const contextData = ctx.export();\n if (isNewTrace) {\n this.emitMetrics(\"meta.runner.new_trace\", {\n data: {\n uuid: executionTraceId,\n issuer_type: \"service\", // TODO: Add issuer type\n issuer_id:\n context.__metadata?.__issuerId ?? context.__issuerId ?? null,\n issued_at: formatTimestamp(Date.now()),\n intent: context.__metadata?.__intent ?? context.__intent ?? null,\n context: contextData,\n is_meta: isMeta,\n },\n __metadata: {\n __executionTraceId: executionTraceId,\n },\n });\n }\n\n this.emitMetrics(\"meta.runner.added_tasks\", {\n data: {\n uuid: routineExecId,\n name: routineName,\n routineVersion,\n isMeta,\n executionTraceId,\n context: isNewTrace ? contextData.id : contextData,\n previousRoutineExecution: context.__metadata?.__routineExecId ?? null, // TODO: There is a chance this is not added to the database yet...\n created: formatTimestamp(Date.now()),\n },\n __metadata: {\n __executionTraceId: executionTraceId,\n },\n });\n }\n\n allTasks.forEach((task) =>\n this.currentRun.addNode(\n new GraphNode(task, ctx, routineExecId, [], this.debug, this.verbose),\n ),\n );\n }\n\n /**\n * Runs tasks/routines.\n * @param tasks Optional tasks/routines.\n * @param context Optional context.\n * @returns Current/last run (Promise if async).\n * @edge If running, returns current; else runs and resets.\n */\n public run(\n tasks?: Task | GraphRoutine | (Task | GraphRoutine)[],\n context?: AnyObject,\n ): GraphRun | Promise<GraphRun> {\n if (tasks) {\n this.addTasks(tasks, context ?? {});\n }\n\n if (this.isRunning) {\n return this.currentRun;\n }\n\n if (this.currentRun) {\n this.isRunning = true;\n const runResult = this.currentRun.run();\n\n if (runResult instanceof Promise) {\n return this.runAsync(runResult);\n }\n }\n\n return this.reset();\n }\n\n async runAsync(run: Promise<void>): Promise<GraphRun> {\n await run;\n return this.reset();\n }\n\n reset(): GraphRun {\n this.isRunning = false;\n\n const lastRun = this.currentRun;\n\n if (!this.debug) {\n this.destroy();\n }\n\n this.currentRun = new GraphRun(this.strategy);\n\n return lastRun;\n }\n\n public setDebug(value: boolean): void {\n this.debug = value;\n }\n\n public setVerbose(value: boolean): void {\n this.verbose = value;\n }\n\n public destroy(): void {\n this.currentRun.destroy();\n }\n\n public setStrategy(strategy: GraphRunStrategy): void {\n this.strategy = strategy;\n if (!this.isRunning) {\n this.currentRun = new GraphRun(this.strategy);\n }\n }\n\n startRun(context: AnyObject): boolean {\n if (context.__task || context.__routine) {\n const routine = context.__task ?? context.__routine;\n this.run(routine, context);\n return true;\n } else {\n context.errored = true;\n context.__error = \"No routine or task defined.\";\n return false;\n }\n }\n}\n","import { v4 as uuid } from \"uuid\";\nimport GraphNode from \"../graph/execution/GraphNode\";\nimport GraphExporter from \"../interfaces/GraphExporter\";\nimport SyncGraphLayer from \"../graph/execution/SyncGraphLayer\";\nimport GraphRunStrategy from \"../interfaces/GraphRunStrategy\";\nimport GraphLayer from \"../interfaces/GraphLayer\";\nimport VueFlowExporter from \"./exporters/vue-flow/VueFlowExporter\";\n\nexport interface RunJson {\n __id: string;\n __label: string;\n __graph: any;\n __data: any;\n}\n\n// A unique execution of the graph\nexport default class GraphRun {\n readonly id: string;\n graph: GraphLayer | undefined;\n // @ts-ignore\n strategy: GraphRunStrategy;\n exporter: GraphExporter | undefined;\n\n constructor(strategy: GraphRunStrategy) {\n this.id = uuid();\n this.strategy = strategy;\n this.strategy.setRunInstance(this);\n this.exporter = new VueFlowExporter();\n }\n\n setGraph(graph: GraphLayer) {\n this.graph = graph;\n }\n\n addNode(node: GraphNode) {\n this.strategy.addNode(node);\n }\n\n // Composite function / Command execution\n run(): void | Promise<void> {\n return this.strategy.run();\n }\n\n // Composite function\n destroy() {\n this.graph?.destroy();\n this.graph = undefined;\n this.exporter = undefined;\n }\n\n // Composite function\n log() {\n console.log(\"vvvvvvvvvvvvvvvvv\");\n console.log(\"GraphRun\");\n console.log(\"vvvvvvvvvvvvvvvvv\");\n this.graph?.log();\n console.log(\"=================\");\n }\n\n // Memento\n export(): RunJson {\n if (this.exporter && this.graph) {\n const data = this.strategy.export();\n return {\n __id: this.id,\n __label: data.__startTime ?? this.id,\n __graph: this.exporter?.exportGraph(this.graph as SyncGraphLayer),\n __data: data,\n };\n }\n\n return {\n __id: this.id,\n __label: this.id,\n __graph: undefined,\n __data: {},\n };\n }\n\n // Export Strategy\n setExporter(exporter: GraphExporter) {\n this.exporter = exporter;\n }\n}\n","export default class ColorRandomizer {\n numberOfSteps: number;\n stepCounter = 0;\n spread: number;\n range: number;\n\n constructor(numberOfSteps: number = 200, spread: number = 30) {\n this.numberOfSteps = numberOfSteps;\n this.spread = spread;\n this.range = Math.floor(numberOfSteps / this.spread);\n }\n\n rainbow(numOfSteps: number, step: number) {\n // This function generates vibrant, \"evenly spaced\" colours (i.e. no clustering). This is ideal for creating easily distinguishable vibrant markers in Google Maps and other apps.\n // Adam Cole, 2011-Sept-14\n // HSV to RBG adapted from: http://mjijackson.com/2008/02/rgb-to-hsl-and-rgb-to-hsv-color-model-conversion-algorithms-in-javascript\n let r, g, b;\n const h = step / numOfSteps;\n const i = ~~(h * 6);\n const f = h * 6 - i;\n const q = 1 - f;\n switch (i % 6) {\n case 0:\n r = 1;\n g = f;\n b = 0;\n break;\n case 1:\n r = q;\n g = 1;\n b = 0;\n break;\n case 2:\n r = 0;\n g = 1;\n b = f;\n break;\n case 3:\n r = 0;\n g = q;\n b = 1;\n break;\n case 4:\n r = f;\n g = 0;\n b = 1;\n break;\n case 5:\n r = 1;\n g = 0;\n b = q;\n break;\n default:\n r = 0;\n g = 0;\n b = 0;\n break;\n }\n // @ts-ignore\n const c =\n \"#\" +\n (\"00\" + (~~(r * 255)).toString(16)).slice(-2) +\n (\"00\" + (~~(g * 255)).toString(16)).slice(-2) +\n (\"00\" + (~~(b * 255)).toString(16)).slice(-2);\n return c;\n }\n\n getRandomColor() {\n this.stepCounter++;\n\n if (this.stepCounter > this.numberOfSteps) {\n this.stepCounter = 1;\n }\n\n const randomStep =\n ((this.stepCounter * this.range) % this.numberOfSteps) -\n this.range +\n Math.floor(this.stepCounter / this.spread);\n\n return this.rainbow(this.numberOfSteps, randomStep);\n }\n}\n","import GraphVisitor from \"../../../interfaces/GraphVisitor\";\nimport SyncGraphLayer from \"../../../graph/execution/SyncGraphLayer\";\nimport GraphNode from \"../../../graph/execution/GraphNode\";\nimport Task from \"../../../graph/definition/Task\";\nimport ColorRandomizer from \"../../../utils/ColorRandomizer\";\n\nexport default class VueFlowExportVisitor implements GraphVisitor {\n nodeCount = 0;\n elements: any[] = [];\n index = 0;\n numberOfLayerNodes = 0;\n contextToColor: { [id: string]: string } = {};\n colorRandomizer = new ColorRandomizer();\n\n visitLayer(layer: SyncGraphLayer): any {\n const snapshot = layer.export();\n\n this.numberOfLayerNodes = snapshot.__numberOfNodes;\n this.index = 0;\n }\n\n visitNode(node: GraphNode): any {\n const snapshot = node.export();\n\n if (!this.contextToColor[snapshot.__context.id]) {\n this.contextToColor[snapshot.__context.id] =\n this.colorRandomizer.getRandomColor();\n }\n\n const color = this.contextToColor[snapshot.__context.id];\n\n this.elements.push({\n id: snapshot.__id.slice(0, 8),\n label: snapshot.__task.__name,\n position: {\n x: snapshot.__task.__layerIndex * 500,\n y: -50 * this.numberOfLayerNodes * 0.5 + (this.index * 60 + 30),\n },\n sourcePosition: \"right\",\n targetPosition: \"left\",\n style: { backgroundColor: `${color}`, width: \"180px\" },\n data: {\n executionTime: snapshot.__executionTime,\n executionStart: snapshot.__executionStart,\n executionEnd: snapshot.__executionEnd,\n description: snapshot.__task.__description,\n functionString: snapshot.__task.__functionString,\n context: snapshot.__context.context,\n layerIndex: snapshot.__task.__layerIndex,\n },\n });\n\n for (const [index, nextNodeId] of snapshot.__nextNodes.entries()) {\n this.elements.push({\n id: `${snapshot.__id.slice(0, 8)}-${index}`,\n source: snapshot.__id.slice(0, 8),\n target: nextNodeId.slice(0, 8),\n });\n }\n\n this.index++;\n this.nodeCount++;\n }\n\n visitTask(task: Task) {\n const snapshot = task.export();\n\n this.elements.push({\n id: snapshot.__id.slice(0, 8),\n label: snapshot.__name,\n position: { x: snapshot.__layerIndex * 300, y: this.index * 50 + 30 },\n sourcePosition: \"right\",\n targetPosition: \"left\",\n data: {\n description: snapshot.__description,\n functionString: snapshot.__functionString,\n layerIndex: snapshot.__layerIndex,\n },\n });\n\n for (const [index, nextTaskId] of snapshot.__nextTasks.entries()) {\n this.elements.push({\n id: `${snapshot.__id.slice(0, 8)}-${index}`,\n source: snapshot.__id.slice(0, 8),\n target: nextTaskId.slice(0, 8),\n });\n }\n\n this.index++;\n this.nodeCount++;\n }\n\n getElements() {\n return this.elements;\n }\n\n getNodeCount() {\n return this.nodeCount;\n }\n}\n","import GraphExporter from \"../../../interfaces/GraphExporter\";\nimport SyncGraphLayer from \"../../../graph/execution/SyncGraphLayer\";\nimport VueFlowExportVisitor from \"./VueFlowExportVisitor\";\nimport Task from \"../../../graph/definition/Task\";\n\nexport default class VueFlowExporter implements GraphExporter {\n exportGraph(graph: SyncGraphLayer): any {\n const exporterVisitor = new VueFlowExportVisitor();\n const layers = graph.getIterator();\n while (layers.hasNext()) {\n const layer = layers.next();\n layer.accept(exporterVisitor);\n }\n\n return {\n elements: exporterVisitor.getElements(),\n numberOfNodes: exporterVisitor.getNodeCount(),\n };\n }\n\n exportStaticGraph(graph: Task[]) {\n const exporterVisitor = new VueFlowExportVisitor();\n\n let prevTask = null;\n for (const task of graph) {\n if (task === prevTask) {\n continue;\n }\n\n const tasks = task.getIterator();\n const exportedTaskNames: string[] = [];\n\n while (tasks.hasNext()) {\n const task = tasks.next();\n if (task && !exportedTaskNames.includes(task.name)) {\n exportedTaskNames.push(task.name);\n task.accept(exporterVisitor);\n }\n }\n\n prevTask = task;\n }\n\n return {\n elements: exporterVisitor.getElements(),\n numberOfNodes: exporterVisitor.getNodeCount(),\n };\n }\n}\n","import { v4 as uuid } from \"uuid\";\nimport Task, { TaskResult } from \"../definition/Task\";\nimport GraphContext from \"../context/GraphContext\";\nimport Graph from \"../../interfaces/Graph\";\nimport GraphVisitor from \"../../interfaces/GraphVisitor\";\nimport GraphNodeIterator from \"../iterators/GraphNodeIterator\";\nimport SignalEmitter from \"../../interfaces/SignalEmitter\";\nimport GraphLayer from \"../../interfaces/GraphLayer\";\nimport { AnyObject } from \"../../types/global\";\nimport { sleep } from \"../../utils/promise\";\nimport { formatTimestamp } from \"../../utils/tools\";\n\nexport default class GraphNode extends SignalEmitter implements Graph {\n id: string;\n routineExecId: string;\n task: Task;\n context: GraphContext;\n layer: GraphLayer | undefined;\n divided: boolean = false;\n splitGroupId: string = \"\";\n processing: boolean = false;\n subgraphComplete: boolean = false;\n graphComplete: boolean = false;\n result: TaskResult = false;\n retryCount: number = 0;\n retryDelay: number = 0;\n retries: number = 0;\n previousNodes: GraphNode[] = [];\n nextNodes: GraphNode[] = [];\n executionTime: number = 0;\n executionStart: number = 0;\n failed: boolean = false;\n errored: boolean = false;\n destroyed: boolean = false;\n debug: boolean = false;\n verbose: boolean = false;\n\n constructor(\n task: Task,\n context: GraphContext,\n routineExecId: string,\n prevNodes: GraphNode[] = [],\n debug: boolean = false,\n verbose: boolean = false,\n ) {\n super(\n (task.isMeta && !debug) ||\n task.isSubMeta ||\n context?.getMetadata()?.__isSubMeta,\n );\n this.id = uuid();\n this.task = task;\n this.context = context;\n this.retryCount = task.retryCount;\n this.retryDelay = task.retryDelay;\n this.previousNodes = prevNodes;\n this.routineExecId = routineExecId;\n this.splitGroupId = routineExecId;\n this.debug = debug;\n this.verbose = verbose;\n }\n\n setDebug(value: boolean) {\n this.debug = value;\n }\n\n public isUnique() {\n return this.task.isUnique;\n }\n\n public isMeta() {\n return this.task.isMeta;\n }\n\n public isProcessed() {\n return this.divided;\n }\n\n public isProcessing() {\n return this.processing;\n }\n\n public subgraphDone() {\n return this.subgraphComplete;\n }\n\n public graphDone() {\n return this.graphComplete;\n }\n\n public isEqualTo(node: GraphNode) {\n return (\n this.sharesTaskWith(node) &&\n this.sharesContextWith(node) &&\n this.isPartOfSameGraph(node)\n );\n }\n\n public isPartOfSameGraph(node: GraphNode) {\n return this.routineExecId === node.routineExecId;\n }\n\n public sharesTaskWith(node: GraphNode) {\n return this.task.name === node.task.name;\n }\n\n public sharesContextWith(node: GraphNode) {\n return this.context.id === node.context.id;\n }\n\n public getLayerIndex() {\n return this.task.layerIndex;\n }\n\n public getConcurrency() {\n return this.task.concurrency;\n }\n\n public getTag() {\n return this.task.getTag(this.context);\n }\n\n public scheduleOn(layer: GraphLayer) {\n let shouldSchedule = true;\n const nodes = layer.getNodesByRoutineExecId(this.routineExecId);\n for (const node of nodes) {\n if (node.isEqualTo(this)) {\n shouldSchedule = false;\n break;\n }\n\n if (node.sharesTaskWith(this) && node.isUnique()) {\n node.consume(this);\n shouldSchedule = false;\n break;\n }\n }\n\n if (shouldSchedule) {\n this.layer = layer;\n layer.add(this);\n\n const context = this.context.getFullContext();\n\n const scheduledAt = Date.now();\n this.emitMetricsWithMetadata(\"meta.node.scheduled\", {\n data: {\n uuid: this.id,\n routineExecutionId: this.routineExecId,\n executionTraceId:\n context.__executionTraceId ??\n context.__metadata?.__executionTraceId,\n context: this.context.export(),\n taskName: this.task.name,\n taskVersion: this.task.version,\n isMeta: this.isMeta(),\n isScheduled: true,\n splitGroupId: this.splitGroupId,\n created: formatTimestamp(scheduledAt),\n },\n });\n\n this.previousNodes.forEach((node) => {\n this.emitMetricsWithMetadata(\"meta.node.mapped\", {\n data: {\n taskExecutionId: this.id,\n previousTaskExecutionId: node.id,\n executionCount: \"increment\",\n },\n filter: {\n taskName: this.task.name,\n taskVersion: this.task.version,\n previousTaskName: node.task.name,\n previousTaskVersion: node.task.version,\n },\n });\n });\n\n if (\n context.__signalEmission?.consumed === false &&\n (!this.isMeta() || this.debug)\n ) {\n this.emitMetricsWithMetadata(\"meta.node.consumed_signal\", {\n data: {\n signalName: context.__signalEmission.signalName,\n taskName: this.task.name,\n taskVersion: this.task.version,\n taskExecutionId: this.id,\n consumedAt: formatTimestamp(scheduledAt),\n },\n });\n\n context.__signalEmission.consumed = true;\n context.__signalEmission.consumedBy = this.id;\n }\n }\n }\n\n public start() {\n if (this.executionStart === 0) {\n this.executionStart = Date.now();\n }\n\n if (this.previousNodes.length === 0) {\n this.emitMetricsWithMetadata(\"meta.node.started_routine_execution\", {\n data: {\n isRunning: true,\n started: formatTimestamp(this.executionStart),\n },\n filter: { uuid: this.routineExecId },\n });\n }\n\n if (\n (this.debug &&\n !this.task.isSubMeta &&\n !this.context.getMetadata().__isSubMeta) ||\n this.verbose\n ) {\n this.log();\n }\n\n this.emitMetricsWithMetadata(\"meta.node.started\", {\n data: {\n isRunning: true,\n started: formatTimestamp(this.executionStart),\n },\n filter: { uuid: this.id },\n });\n\n return this.executionStart;\n }\n\n public end() {\n if (this.executionStart === 0) {\n return 0;\n }\n\n this.processing = false;\n const end = Date.now();\n this.executionTime = end - this.executionStart;\n\n const context = this.context.getFullContext();\n\n if (this.errored || this.failed) {\n this.emitMetricsWithMetadata(\"meta.node.errored\", {\n data: {\n isRunning: false,\n errored: this.errored,\n failed: this.failed,\n errorMessage: context.__error,\n },\n filter: { uuid: this.id },\n });\n }\n\n this.emitMetricsWithMetadata(\"meta.node.ended\", {\n data: {\n isRunning: false,\n isComplete: true,\n resultContext: this.context.export(),\n errored: this.errored,\n failed: this.failed,\n errorMessage: context.__error,\n progress: 1.0,\n ended: formatTimestamp(end),\n },\n filter: { uuid: this.id },\n });\n\n if (this.graphDone()) {\n // TODO Reminder, Service registry should be listening to this event, (updateSelf)\n this.emitMetricsWithMetadata(\n `meta.node.ended_routine_execution:${this.routineExecId}`,\n {\n data: {\n isRunning: false,\n isComplete: true,\n resultContext: this.context.export(),\n progress: 1.0,\n ended: formatTimestamp(end),\n },\n filter: { uuid: this.routineExecId },\n },\n );\n }\n\n return end;\n }\n\n public execute() {\n if (!this.divided && !this.processing) {\n this.processing = true;\n\n const inputValidation = this.task.validateInput(\n this.isMeta() ? this.context.getMetadata() : this.context.getContext(),\n );\n if (inputValidation !== true) {\n this.onError(inputValidation.__validationErrors);\n this.postProcess();\n return this.nextNodes;\n }\n\n this.result = this.work();\n\n if (this.result instanceof Promise) {\n return this.executeAsync();\n }\n\n const nextNodes = this.postProcess();\n if (nextNodes instanceof Promise) {\n return nextNodes;\n }\n\n this.nextNodes = nextNodes;\n }\n\n return this.nextNodes;\n }\n\n async workAsync() {\n try {\n this.result = await this.result;\n if (\n typeof this.result === \"object\" &&\n (this.result.hasOwnProperty(\"errored\") ||\n this.result.hasOwnProperty(\"failed\"))\n ) {\n const result = await this.retryAsync((this.result as any).__error);\n if (\n typeof result === \"object\" &&\n (result.hasOwnProperty(\"errored\") || result.hasOwnProperty(\"failed\"))\n ) {\n this.onError(result.__error);\n }\n }\n } catch (e: unknown) {\n const result = await this.retryAsync(e);\n if (result === e) {\n this.onError(e);\n }\n }\n }\n\n async executeAsync() {\n await this.workAsync();\n const nextNodes = this.postProcess();\n if (nextNodes instanceof Promise) {\n return nextNodes;\n }\n this.nextNodes = nextNodes;\n return this.nextNodes;\n }\n\n work(): TaskResult | Promise<TaskResult> {\n try {\n const result = this.task.execute(\n this.context,\n this.emitWithMetadata.bind(this),\n this.onProgress.bind(this),\n );\n\n if ((result as any).errored || (result as any).failed) {\n return this.retry(result);\n }\n\n return result;\n } catch (e: unknown) {\n const result = this.retry(e);\n return result.then((result) => {\n if (result !== e) {\n return result;\n }\n\n this.onError(e);\n return this.result;\n });\n }\n }\n\n emitWithMetadata(signal: string, ctx: AnyObject) {\n const data = { ...ctx };\n if (!this.task.isHidden) {\n data.__signalEmission = {\n taskName: this.task.name,\n taskVersion: this.task.version,\n taskExecutionId: this.id,\n };\n const context = this.context.getMetadata();\n data.__metadata = {\n __routineExecId: this.routineExecId,\n __executionTraceId:\n context.__metadata?.__executionTraceId ?? context.__executionTraceId,\n };\n }\n\n this.emit(signal, data);\n }\n\n emitMetricsWithMetadata(signal: string, ctx: AnyObject) {\n const data = { ...ctx };\n if (!this.task.isHidden) {\n data.__signalEmission = {\n taskName: this.task.name,\n taskVersion: this.task.version,\n taskExecutionId: this.id,\n isMetric: true,\n };\n const context = this.context.getMetadata();\n data.__metadata = {\n __routineExecId: this.routineExecId,\n __executionTraceId:\n context.__metadata?.__executionTraceId ?? context.__executionTraceId,\n };\n }\n\n this.emitMetrics(signal, data);\n }\n\n onProgress(progress: number) {\n progress = Math.min(Math.max(0, progress), 1);\n\n this.emitMetricsWithMetadata(\"meta.node.progress\", {\n data: {\n progress,\n },\n filter: {\n uuid: this.id,\n },\n });\n\n this.emitMetricsWithMetadata(\n `meta.node.routine_execution_progress:${this.routineExecId}`,\n {\n data: {\n progress:\n (progress * this.task.progressWeight) /\n (this.layer?.getIdenticalNodes(this).length ?? 1),\n },\n filter: {\n uuid: this.routineExecId,\n },\n },\n );\n }\n\n postProcess() {\n if (typeof this.result === \"string\") {\n this.onError(\n `Returning strings is not allowed. Returned: ${this.result}`,\n );\n }\n\n if (Array.isArray(this.result)) {\n this.onError(`Returning arrays is not allowed. Returned: ${this.result}`);\n }\n\n const nextNodes = this.divide();\n\n if (nextNodes instanceof Promise) {\n return this.postProcessAsync(nextNodes);\n }\n\n this.nextNodes = nextNodes;\n this.finalize();\n return this.nextNodes;\n }\n\n async postProcessAsync(nextNodes: Promise<GraphNode[]>) {\n this.nextNodes = await nextNodes;\n this.finalize();\n return this.nextNodes;\n }\n\n finalize() {\n if (this.nextNodes.length === 0) {\n this.completeSubgraph();\n }\n\n if (this.errored || this.failed) {\n this.task.mapOnFailSignals((signal: string) =>\n this.emitWithMetadata(signal, this.context.getFullContext()),\n );\n } else if (this.result !== undefined && this.result !== false) {\n this.task.mapSignals((signal: string) =>\n this.emitWithMetadata(signal, this.context.getFullContext()),\n );\n }\n\n this.end();\n }\n\n onError(error: unknown, errorData: AnyObject = {}) {\n this.result = {\n ...this.context.getFullContext(),\n __error: `Node error: ${error}`,\n __retries: this.retries,\n error: `Node error: ${error}`,\n returnedValue: this.result,\n ...errorData,\n };\n this.migrate(this.result);\n this.errored = true;\n }\n\n async retry(prevResult?: any): Promise<TaskResult> {\n if (this.retryCount === 0) {\n return prevResult;\n }\n\n await this.delayRetry();\n return this.work();\n }\n\n async retryAsync(prevResult?: any): Promise<TaskResult> {\n if (this.retryCount === 0) {\n return prevResult;\n }\n\n await this.delayRetry();\n this.result = this.work();\n return this.workAsync();\n }\n\n async delayRetry() {\n this.retryCount--;\n this.retries++;\n await sleep(this.retryDelay);\n this.retryDelay *= this.task.retryDelayFactor;\n if (this.retryDelay > this.task.retryDelayMax) {\n this.retryDelay = this.task.retryDelayMax;\n }\n }\n\n divide(): GraphNode[] | Promise<GraphNode[]> {\n const newNodes: GraphNode[] = [];\n\n if (\n (this.result as Generator)?.next &&\n typeof (this.result as Generator).next === \"function\"\n ) {\n const generator = this.result as Generator;\n let current = generator.next();\n if (current instanceof Promise) {\n return this.divideAsync(current);\n }\n\n while (!current.done && current.value !== undefined) {\n const outputValidation = this.task.validateOutput(current.value as any);\n if (outputValidation !== true) {\n this.onError(outputValidation.__validationErrors);\n break;\n } else {\n newNodes.push(...this.generateNewNodes(current.value));\n current = generator.next();\n }\n }\n } else if (this.result !== undefined && !this.errored) {\n newNodes.push(...this.generateNewNodes(this.result));\n\n if (typeof this.result !== \"boolean\") {\n const outputValidation = this.task.validateOutput(this.result as any);\n if (outputValidation !== true) {\n this.onError(outputValidation.__validationErrors);\n }\n\n this.divided = true;\n this.migrate({\n ...this.result,\n ...this.context.getMetadata(),\n __nextNodes: newNodes.map((n) => n.id),\n __retries: this.retries,\n });\n\n return newNodes;\n }\n }\n\n if (this.errored) {\n newNodes.push(\n ...this.task.mapNext(\n (t: Task) =>\n this.clone()\n .split(uuid())\n .differentiate(t)\n .migrate({ ...(this.result as any) }),\n true,\n ),\n );\n }\n\n this.divided = true;\n this.migrate({\n ...this.context.getFullContext(),\n __nextNodes: newNodes.map((n) => n.id),\n __retries: this.retries,\n });\n\n return newNodes;\n }\n\n async divideAsync(\n current: Promise<IteratorResult<any>>,\n ): Promise<GraphNode[]> {\n const nextNodes: GraphNode[] = [];\n const _current = await current;\n\n const outputValidation = this.task.validateOutput(_current.value as any);\n if (outputValidation !== true) {\n this.onError(outputValidation.__validationErrors);\n return nextNodes;\n } else {\n nextNodes.push(...this.generateNewNodes(_current.value));\n }\n\n for await (const result of this.result as AsyncGenerator<any>) {\n const outputValidation = this.task.validateOutput(result);\n if (outputValidation !== true) {\n this.onError(outputValidation.__validationErrors);\n return [];\n } else {\n nextNodes.push(...this.generateNewNodes(result));\n }\n }\n\n this.divided = true;\n\n return nextNodes;\n }\n\n generateNewNodes(result: any) {\n const groupId = uuid();\n const newNodes = [];\n if (typeof result !== \"boolean\") {\n const failed =\n (result.failed !== undefined && result.failed) ||\n result.error !== undefined;\n newNodes.push(\n ...(this.task.mapNext((t: Task) => {\n const context = t.isUnique\n ? {\n joinedContexts: [\n { ...result, taskName: this.task.name, __nodeId: this.id },\n ],\n ...this.context.getMetadata(),\n }\n : { ...result, ...this.context.getMetadata() };\n return this.clone().split(groupId).differentiate(t).migrate(context);\n }, failed) as GraphNode[]),\n );\n\n this.failed = failed;\n } else {\n const shouldContinue = result;\n if (shouldContinue) {\n newNodes.push(\n ...(this.task.mapNext((t: Task) => {\n const newNode = this.clone().split(groupId).differentiate(t);\n if (t.isUnique) {\n newNode.migrate({\n joinedContexts: [\n {\n ...this.context.getContext(),\n taskName: this.task.name,\n __nodeId: this.id,\n },\n ],\n ...this.context.getMetadata(),\n });\n }\n\n return newNode;\n }) as GraphNode[]),\n );\n }\n }\n\n return newNodes;\n }\n\n differentiate(task: Task): GraphNode {\n this.task = task;\n this.retryCount = task.retryCount;\n this.retryDelay = task.retryDelay;\n this.silent =\n (task.isMeta && !this.debug) ||\n task.isSubMeta ||\n this.context?.getMetadata()?.__isSubMeta;\n return this;\n }\n\n migrate(ctx: any): GraphNode {\n this.context = new GraphContext(ctx);\n return this;\n }\n\n split(id: string): GraphNode {\n this.splitGroupId = id;\n return this;\n }\n\n public clone(): GraphNode {\n return new GraphNode(\n this.task,\n this.context,\n this.routineExecId,\n [this],\n this.debug,\n this.verbose,\n );\n }\n\n public consume(node: GraphNode) {\n this.context = this.context.combine(node.context);\n this.previousNodes = this.previousNodes.concat(node.previousNodes);\n node.completeSubgraph();\n node.changeIdentity(this.id);\n node.destroy();\n }\n\n changeIdentity(id: string) {\n this.id = id;\n }\n\n completeSubgraph() {\n for (const node of this.nextNodes) {\n if (!node.subgraphDone()) {\n return;\n }\n }\n\n this.subgraphComplete = true;\n\n if (this.previousNodes.length === 0) {\n this.completeGraph();\n return;\n }\n\n this.previousNodes.forEach((n) => n.completeSubgraph());\n }\n\n completeGraph() {\n this.graphComplete = true;\n this.nextNodes.forEach((n) => n.completeGraph());\n }\n\n public destroy() {\n // @ts-ignore\n this.context = null;\n // @ts-ignore\n this.task = null;\n this.nextNodes = [];\n this.previousNodes.forEach((n) =>\n n.nextNodes.splice(n.nextNodes.indexOf(this), 1),\n );\n this.previousNodes = [];\n this.result = undefined;\n this.layer = undefined;\n this.destroyed = true;\n }\n\n public getIterator() {\n return new GraphNodeIterator(this);\n }\n\n public mapNext(callback: (node: GraphNode) => any) {\n return this.nextNodes.map(callback);\n }\n\n public accept(visitor: GraphVisitor) {\n visitor.visitNode(this);\n }\n\n public export() {\n return {\n __id: this.id,\n __task: this.task.export(),\n __context: this.context.export(),\n __result: this.result,\n __executionTime: this.executionTime,\n __executionStart: this.executionStart,\n __executionEnd: this.executionStart + this.executionTime,\n __nextNodes: this.nextNodes.map((node) => node.id),\n __previousNodes: this.previousNodes.map((node) => node.id),\n __routineExecId: this.routineExecId,\n __isProcessing: this.processing,\n __isMeta: this.isMeta(),\n __graphComplete: this.graphComplete,\n __failed: this.failed,\n __errored: this.errored,\n __isUnique: this.isUnique(),\n __splitGroupId: this.splitGroupId,\n __tag: this.getTag(),\n };\n }\n\n lightExport() {\n return {\n __id: this.id,\n __task: {\n __name: this.task.name,\n __version: this.task.version,\n },\n __context: this.context.export(),\n __executionTime: this.executionTime,\n __executionStart: this.executionStart,\n __nextNodes: this.nextNodes.map((node) => node.id),\n __previousNodes: this.previousNodes.map((node) => node.id),\n __routineExecId: this.routineExecId,\n __isProcessing: this.processing,\n __graphComplete: this.graphComplete,\n __isMeta: this.isMeta(),\n __failed: this.failed,\n __errored: this.errored,\n __isUnique: this.isUnique(),\n __splitGroupId: this.splitGroupId,\n __tag: this.getTag(),\n };\n }\n\n public log() {\n console.log(\n \"Node EXECUTION:\",\n this.task.name,\n JSON.stringify(this.context.getFullContext()),\n );\n }\n}\n","import { v4 as uuid } from \"uuid\";\nimport { deepCloneFilter } from \"../../utils/tools\";\nimport { AnyObject } from \"../../types/global\";\n\nexport default class GraphContext {\n readonly id: string;\n readonly fullContext: AnyObject; // Raw (for internal)\n readonly userData: AnyObject; // Filtered, frozen\n readonly metadata: AnyObject; // __keys, frozen\n\n constructor(context: AnyObject) {\n if (Array.isArray(context)) {\n throw new Error(\"Array contexts not supported\"); // Per clarification\n }\n this.fullContext = context; // Clone once\n this.userData = Object.fromEntries(\n Object.entries(this.fullContext).filter(([key]) => !key.startsWith(\"__\")),\n );\n this.metadata = Object.fromEntries(\n Object.entries(this.fullContext).filter(([key]) => key.startsWith(\"__\")),\n );\n this.id = uuid();\n }\n\n /**\n * Gets frozen user data (read-only, no clone).\n * @returns Frozen user context.\n */\n getContext(): AnyObject {\n return this.userData;\n }\n\n getClonedContext(): AnyObject {\n return deepCloneFilter(this.userData);\n }\n\n /**\n * Gets full raw context (cloned for safety).\n * @returns Cloned full context.\n */\n getFullContext(): AnyObject {\n return this.fullContext;\n }\n\n getClonedFullContext(): AnyObject {\n return deepCloneFilter(this.fullContext);\n }\n\n /**\n * Gets frozen metadata (read-only).\n * @returns Frozen metadata object.\n */\n getMetadata(): AnyObject {\n return this.metadata;\n }\n\n /**\n * Clones this context (new instance).\n * @returns New GraphContext.\n */\n clone(): GraphContext {\n return this.mutate(this.fullContext);\n }\n\n /**\n * Creates new context from data (via registry).\n * @param context New data.\n * @returns New GraphContext.\n */\n mutate(context: AnyObject): GraphContext {\n return new GraphContext(context);\n }\n\n /**\n * Combines with another for uniques (joins userData).\n * @param otherContext The other.\n * @returns New combined GraphContext.\n * @edge Appends other.userData to joinedContexts in userData.\n */\n combine(otherContext: GraphContext): GraphContext {\n const newUser = { ...this.userData };\n newUser.joinedContexts = this.userData.joinedContexts\n ? [...this.userData.joinedContexts]\n : [this.userData];\n\n const otherUser = otherContext.userData;\n if (Array.isArray(otherUser.joinedContexts)) {\n newUser.joinedContexts.push(...otherUser.joinedContexts);\n } else {\n newUser.joinedContexts.push(otherUser);\n }\n\n const newFull = {\n ...this.fullContext,\n ...otherContext.fullContext,\n ...newUser,\n };\n return new GraphContext(newFull);\n }\n\n /**\n * Exports the context.\n * @returns Exported object.\n */\n export(): { id: string; context: AnyObject } {\n return {\n id: this.id,\n context: this.getFullContext(),\n };\n }\n}\n","import Iterator from \"../../interfaces/Iterator\";\nimport GraphNode from \"../execution/GraphNode\";\n\nexport default class GraphNodeIterator implements Iterator {\n currentNode: GraphNode | undefined;\n currentLayer: GraphNode[] = [];\n nextLayer: GraphNode[] = [];\n index: number = 0;\n\n constructor(node: GraphNode) {\n this.currentNode = node;\n this.currentLayer = [node];\n }\n\n hasNext(): boolean {\n return !!this.currentNode;\n }\n\n next(): any {\n const nextNode = this.currentNode;\n\n if (!nextNode) {\n return undefined;\n }\n\n this.nextLayer.push(...nextNode.mapNext((n: GraphNode) => n));\n\n this.index++;\n\n if (this.index === this.currentLayer.length) {\n this.currentLayer = this.nextLayer;\n this.nextLayer = [];\n this.index = 0;\n }\n\n this.currentNode = this.currentLayer.length\n ? this.currentLayer[this.index]\n : undefined;\n\n return nextNode;\n }\n}\n","import Cadenza from \"../Cadenza\";\nimport { AnyObject } from \"../types/global\";\n\nexport default abstract class SignalEmitter {\n silent: boolean;\n\n /**\n * Constructor for signal emitters.\n * @param silent If true, suppresses all emissions (e.g., for meta-runners to avoid loops; affects all emits).\n */\n constructor(silent: boolean = false) {\n this.silent = silent;\n }\n\n /**\n * Emits a signal via the broker.\n * @param signal The signal name.\n * @param data Optional payload (defaults to empty object).\n */\n emit(signal: string, data: AnyObject = {}): void {\n Cadenza.broker.emit(signal, data);\n }\n\n /**\n * Emits a signal via the broker if not silent.\n * @param signal The signal name.\n * @param data Optional payload (defaults to empty object).\n */\n emitMetrics(signal: string, data: AnyObject = {}): void {\n if (this.silent) {\n return;\n }\n Cadenza.broker.emit(signal, data);\n }\n}\n","export function sleep(ms: number) {\n return new Promise((resolve) => setTimeout(resolve, ms));\n}\n","import Task from \"./Task\";\nimport Cadenza from \"../../Cadenza\";\nimport SignalEmitter from \"../../interfaces/SignalEmitter\";\n\nexport default class GraphRoutine extends SignalEmitter {\n readonly name: string;\n version: number = 1;\n readonly description: string;\n readonly isMeta: boolean = false;\n tasks: Set<Task> = new Set();\n\n observedSignals: Set<string> = new Set();\n\n constructor(\n name: string,\n tasks: Task[],\n description: string,\n isMeta: boolean = false,\n ) {\n super();\n this.name = name;\n this.description = description;\n this.isMeta = isMeta;\n this.emit(\"meta.routine.created\", {\n data: {\n name: this.name,\n version: this.version,\n description: this.description,\n isMeta: this.isMeta,\n },\n __routineInstance: this,\n });\n tasks.forEach((t) => {\n this.tasks.add(t);\n this.emit(\"meta.routine.task_added\", {\n data: {\n taskName: t.name,\n taskVersion: t.version,\n routineName: this.name,\n routineVersion: this.version,\n },\n });\n });\n }\n\n /**\n * Applies callback to starting tasks.\n * @param callBack The callback.\n * @returns Promise if async.\n */\n public async forEachTask(callBack: (task: Task) => any): Promise<void> {\n const promises = [];\n for (const task of this.tasks) {\n const res = callBack(task);\n if (res instanceof Promise) promises.push(res);\n }\n await Promise.all(promises);\n }\n\n /**\n * Sets global Version.\n * @param version The Version.\n */\n public setVersion(version: number): void {\n this.version = version;\n this.emit(\"meta.routine.global_version_set\", { version: this.version });\n }\n\n /**\n * Subscribes to signals (chainable).\n * @param signals The signal names.\n * @returns This for chaining.\n * @edge Duplicates ignored; assumes broker.observe binds this as handler.\n */\n doOn(...signals: string[]): this {\n signals.forEach((signal) => {\n if (this.observedSignals.has(signal)) return;\n Cadenza.broker.observe(signal, this as any);\n this.observedSignals.add(signal);\n });\n return this;\n }\n\n /**\n * Unsubscribes from all observed signals.\n * @returns This for chaining.\n */\n unsubscribeAll(): this {\n this.observedSignals.forEach((signal) =>\n Cadenza.broker.unsubscribe(signal, this as any),\n );\n this.observedSignals.clear();\n return this;\n }\n\n /**\n * Unsubscribes from specific signals.\n * @param signals The signals.\n * @returns This for chaining.\n * @edge No-op if not subscribed.\n */\n unsubscribe(...signals: string[]): this {\n signals.forEach((signal) => {\n if (this.observedSignals.has(signal)) {\n Cadenza.broker.unsubscribe(signal, this as any);\n this.observedSignals.delete(signal);\n }\n });\n return this;\n }\n\n /**\n * Destroys the routine.\n */\n public destroy(): void {\n this.unsubscribeAll();\n this.tasks.clear();\n this.emit(\"meta.routine.destroyed\", {\n data: { deleted: true },\n filter: { name: this.name, version: this.version },\n });\n }\n}\n","import Iterator from \"../../interfaces/Iterator\";\nimport Task from \"../definition/Task\";\n\nexport default class TaskIterator implements Iterator {\n currentTask: Task | undefined;\n currentLayer: Set<Task> = new Set();\n nextLayer: Set<Task> = new Set();\n iterator: { next: () => { value: Task | undefined } } =\n this.currentLayer[Symbol.iterator]();\n\n constructor(task: Task) {\n this.currentTask = task;\n this.currentLayer.add(task);\n }\n hasNext(): boolean {\n return !!this.currentTask;\n }\n\n next(): Task | undefined {\n const nextTask = this.currentTask;\n\n if (!nextTask) {\n return undefined;\n }\n\n nextTask.mapNext((t: Task) => this.nextLayer.add(t));\n\n let next = this.iterator.next();\n\n if (next.value === undefined) {\n this.currentLayer.clear();\n this.currentLayer = this.nextLayer;\n this.nextLayer = new Set();\n this.iterator = this.currentLayer[Symbol.iterator]();\n next = this.iterator.next();\n }\n\n this.currentTask = next.value;\n\n return nextTask;\n }\n}\n","import GraphContext from \"../context/GraphContext\";\nimport GraphVisitor from \"../../interfaces/GraphVisitor\";\nimport TaskIterator from \"../iterators/TaskIterator\";\nimport Graph from \"../../interfaces/Graph\";\nimport { AnyObject } from \"../../types/global\";\nimport { SchemaDefinition } from \"../../types/schema\";\nimport SignalEmitter from \"../../interfaces/SignalEmitter\";\nimport Cadenza from \"../../Cadenza\";\n\nexport type TaskFunction = (\n context: AnyObject,\n emit: (signal: string, context: AnyObject) => void,\n progressCallback: (progress: number) => void,\n) => TaskResult;\nexport type TaskResult = boolean | AnyObject | Generator | Promise<any> | void;\nexport type ThrottleTagGetter = (context?: AnyObject, task?: Task) => string;\n\nexport default class Task extends SignalEmitter implements Graph {\n readonly name: string;\n readonly description: string;\n version: number = 1;\n concurrency: number;\n timeout: number;\n readonly isMeta: boolean = false;\n readonly isSubMeta: boolean = false;\n readonly isHidden: boolean = false;\n readonly isUnique: boolean = false;\n readonly throttled: boolean = false;\n\n readonly isSignal: boolean = false;\n readonly isDeputy: boolean = false;\n readonly isEphemeral: boolean = false;\n readonly isDebounce: boolean = false;\n\n inputContextSchema: SchemaDefinition | undefined = undefined;\n validateInputContext: boolean = false;\n outputContextSchema: SchemaDefinition | undefined = undefined;\n validateOutputContext: boolean = false;\n\n readonly retryCount: number = 0;\n readonly retryDelay: number = 0;\n readonly retryDelayMax: number = 0;\n readonly retryDelayFactor: number = 1;\n\n layerIndex: number = 0;\n progressWeight: number = 0;\n nextTasks: Set<Task> = new Set();\n onFailTasks: Set<Task> = new Set();\n predecessorTasks: Set<Task> = new Set();\n destroyed: boolean = false;\n\n emitsSignals: Set<string> = new Set();\n signalsToEmitAfter: Set<string> = new Set();\n signalsToEmitOnFail: Set<string> = new Set();\n observedSignals: Set<string> = new Set();\n\n readonly taskFunction: TaskFunction;\n\n /**\n * Constructs a Task (static definition).\n * @param name Name.\n * @param task Function.\n * @param description Description.\n * @param concurrency Limit.\n * @param timeout ms.\n * @param register Register via signal (default true).\n * @param isUnique\n * @param isMeta\n * @param isSubMeta\n * @param isHidden\n * @param getTagCallback\n * @param inputSchema\n * @param validateInputContext\n * @param outputSchema\n * @param validateOutputContext\n * @param retryCount\n * @param retryDelay\n * @param retryDelayMax\n * @param retryDelayFactor\n * @edge Emits 'meta.task.created' with { __task: this } for seed.\n */\n constructor(\n name: string,\n task: TaskFunction,\n description: string = \"\",\n concurrency: number = 0,\n timeout: number = 0,\n register: boolean = true,\n isUnique: boolean = false,\n isMeta: boolean = false,\n isSubMeta: boolean = false,\n isHidden: boolean = false,\n getTagCallback: ThrottleTagGetter | undefined = undefined,\n inputSchema: SchemaDefinition | undefined = undefined,\n validateInputContext: boolean = false,\n outputSchema: SchemaDefinition | undefined = undefined,\n validateOutputContext: boolean = false,\n retryCount: number = 0,\n retryDelay: number = 0,\n retryDelayMax: number = 0,\n retryDelayFactor: number = 1,\n ) {\n super(isSubMeta || isHidden);\n this.name = name;\n this.taskFunction = task.bind(this);\n this.description = description;\n this.concurrency = concurrency;\n this.timeout = timeout;\n this.isUnique = isUnique;\n this.isMeta = isMeta;\n this.isSubMeta = isSubMeta;\n this.isHidden = isHidden;\n this.inputContextSchema = inputSchema;\n this.validateInputContext = validateInputContext;\n this.outputContextSchema = outputSchema;\n this.validateOutputContext = validateOutputContext;\n this.retryCount = retryCount;\n this.retryDelay = retryDelay;\n this.retryDelayMax = retryDelayMax;\n this.retryDelayFactor = retryDelayFactor;\n\n if (getTagCallback) {\n this.getTag = (context?: AnyObject) => getTagCallback(context, this);\n this.throttled = true;\n }\n\n if (register && !this.isHidden && !this.isSubMeta) {\n const { __functionString, __getTagCallback } = this.export();\n this.emitWithMetadata(\"meta.task.created\", {\n data: {\n name: this.name,\n version: this.version,\n description: this.description,\n functionString: __functionString,\n tagIdGetter: __getTagCallback,\n layerIndex: this.layerIndex,\n concurrency: this.concurrency,\n retryCount: this.retryCount,\n retryDelay: this.retryDelay,\n retryDelayMax: this.retryDelayMax,\n retryDelayFactor: this.retryDelayFactor,\n timeout: this.timeout,\n isUnique: this.isUnique,\n isSignal: this.isSignal,\n isThrottled: this.throttled,\n isDebounce: this.isDebounce,\n isEphemeral: this.isEphemeral,\n isMeta: this.isMeta,\n validateInputContext: this.validateInputContext,\n validateOutputContext: this.validateOutputContext,\n // inputContextSchemaId: this.inputContextSchema,\n // outputContextSchemaId: this.outputContextSchema,\n },\n __taskInstance: this,\n });\n }\n }\n\n public getTag(context?: AnyObject): string {\n return this.name;\n }\n\n public setVersion(version: number): void {\n this.version = version;\n this.emitWithMetadata(\"meta.task.version_set\", {\n __version: this.version,\n });\n }\n\n public setTimeout(timeout: number): void {\n this.timeout = timeout;\n }\n\n public setConcurrency(concurrency: number): void {\n this.concurrency = concurrency;\n }\n\n public setProgressWeight(weight: number): void {\n this.progressWeight = weight;\n }\n\n public setInputContextSchema(schema: SchemaDefinition): void {\n this.inputContextSchema = schema;\n }\n\n public setOutputContextSchema(schema: SchemaDefinition): void {\n this.outputContextSchema = schema;\n }\n\n public setValidateInputContext(value: boolean): void {\n this.validateInputContext = value;\n }\n\n public setValidateOutputContext(value: boolean): void {\n this.validateOutputContext = value;\n }\n\n emitWithMetadata(signal: string, ctx: AnyObject = {}) {\n const data = { ...ctx };\n if (!this.isHidden && !this.isSubMeta) {\n data.__signalEmission = {\n taskName: this.name,\n taskVersion: this.version,\n };\n }\n\n this.emit(signal, data);\n }\n\n emitMetricsWithMetadata(signal: string, ctx: AnyObject = {}) {\n const data = { ...ctx };\n if (!this.isHidden && !this.isSubMeta) {\n data.__signalEmission = {\n taskName: this.name,\n taskVersion: this.version,\n isMetric: true,\n };\n }\n\n this.emitMetrics(signal, data);\n }\n\n /**\n * Validates a context deeply against a schema.\n * @param data - The data to validate (input context or output result).\n * @param schema - The schema definition.\n * @param path - The current path for error reporting (default: 'root').\n * @returns { { valid: boolean, errors: Record<string, string> } } - Validation result with detailed errors if invalid.\n * @description Recursively checks types, required fields, and constraints; allows extra properties not in schema.\n */\n validateSchema(\n data: any,\n schema: SchemaDefinition | undefined,\n path: string = \"context\",\n ): { valid: boolean; errors: Record<string, string> } {\n const errors: Record<string, string> = {};\n\n if (!schema || typeof schema !== \"object\") return { valid: true, errors };\n\n // Check required fields\n const required = schema.required || [];\n for (const key of required) {\n if (!(key in data)) {\n errors[`${path}.${key}`] = `Required field '${key}' is missing`;\n }\n }\n\n // Validate defined properties (ignore extras)\n const properties = schema.properties || {};\n for (const [key, value] of Object.entries(data)) {\n if (key in properties) {\n const prop = properties[key];\n const propType = prop.type;\n\n if (propType === \"any\") {\n continue;\n }\n\n if ((value === undefined || value === null) && !prop.strict) {\n continue;\n }\n\n if (propType === \"string\" && typeof value !== \"string\") {\n errors[`${path}.${key}`] =\n `Expected 'string' for '${key}', got '${typeof value}'`;\n } else if (propType === \"number\" && typeof value !== \"number\") {\n errors[`${path}.${key}`] =\n `Expected 'number' for '${key}', got '${typeof value}'`;\n } else if (propType === \"boolean\" && typeof value !== \"boolean\") {\n errors[`${path}.${key}`] =\n `Expected 'boolean' for '${key}', got '${typeof value}'`;\n } else if (propType === \"array\" && !Array.isArray(value)) {\n errors[`${path}.${key}`] =\n `Expected 'array' for '${key}', got '${typeof value}'`;\n } else if (\n propType === \"object\" &&\n (typeof value !== \"object\" || value === null || Array.isArray(value))\n ) {\n errors[`${path}.${key}`] =\n `Expected 'object' for '${key}', got '${typeof value}'`;\n } else if (propType === \"array\" && prop.items) {\n if (Array.isArray(value)) {\n value.forEach((item, index) => {\n const subValidation = this.validateSchema(\n item,\n prop.items,\n `${path}.${key}[${index}]`,\n );\n if (!subValidation.valid) {\n Object.assign(errors, subValidation.errors);\n }\n });\n }\n } else if (\n propType === \"object\" &&\n !Array.isArray(value) &&\n value !== null\n ) {\n const subValidation = this.validateSchema(\n value,\n prop,\n `${path}.${key}`,\n );\n if (!subValidation.valid) {\n Object.assign(errors, subValidation.errors);\n }\n }\n\n // Check constraints (extended as discussed)\n const constraints = prop.constraints || {};\n if (typeof value === \"string\") {\n if (constraints.minLength && value.length < constraints.minLength) {\n errors[`${path}.${key}`] =\n `String '${key}' shorter than minLength ${constraints.minLength}`;\n }\n if (constraints.maxLength && value.length > constraints.maxLength) {\n errors[`${path}.${key}`] =\n `String '${key}' exceeds maxLength ${constraints.maxLength}`;\n }\n if (\n constraints.pattern &&\n !new RegExp(constraints.pattern).test(value)\n ) {\n errors[`${path}.${key}`] =\n `String '${key}' does not match pattern ${constraints.pattern}`;\n }\n } else if (typeof value === \"number\") {\n if (constraints.min && value < constraints.min) {\n errors[`${path}.${key}`] =\n `Number '${key}' below min ${constraints.min}`;\n }\n if (constraints.max && value > constraints.max) {\n errors[`${path}.${key}`] =\n `Number '${key}' exceeds max ${constraints.max}`;\n }\n if (constraints.multipleOf && value % constraints.multipleOf !== 0) {\n errors[`${path}.${key}`] =\n `Number '${key}' not multiple of ${constraints.multipleOf}`;\n }\n } else if (constraints.enum && !constraints.enum.includes(value)) {\n errors[`${path}.${key}`] =\n `Value '${value}' for '${key}' not in enum ${JSON.stringify(constraints.enum)}`;\n } else if (constraints.format) {\n const formats = {\n email: /^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\\.[a-zA-Z]{2,}$/,\n url: /^(https?|ftp):\\/\\/[^\\s/$.?#].[^\\s]*$/,\n \"date-time\":\n /^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}(\\.\\d+)?(Z|[+-]\\d{2}:\\d{2})?$/,\n uuid: /^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}$/,\n custom: /.*/, // Placeholder; override with prop.constraints.pattern if present\n } as any;\n const regex =\n formats[constraints.format] ||\n new RegExp(constraints.pattern || \".*\");\n if (typeof value === \"string\" && !regex.test(value)) {\n errors[`${path}.${key}`] =\n `Value '${value}' for '${key}' does not match format '${constraints.format}'`;\n }\n } else if (constraints.oneOf && !constraints.oneOf.includes(value)) {\n errors[`${path}.${key}`] =\n `Value '${value}' for '${key}' not in oneOf ${JSON.stringify(constraints.oneOf)}`;\n }\n } else if (schema.strict) {\n errors[`${path}.${key}`] = `Key '${key}' is not allowed`;\n }\n }\n\n if (Object.keys(errors).length > 0) {\n return { valid: false, errors };\n }\n return { valid: true, errors: {} };\n }\n\n public validateInput(context: AnyObject): true | AnyObject {\n if (this.validateInputContext) {\n const validationResult = this.validateSchema(\n context,\n this.inputContextSchema,\n );\n if (!validationResult.valid) {\n this.emitWithMetadata(\"meta.task.input_validation_failed\", {\n __taskName: this.name,\n __taskVersion: this.version,\n __context: context,\n __errors: validationResult.errors,\n });\n return {\n errored: true,\n __error: \"Input context validation failed\",\n __validationErrors: JSON.stringify(validationResult.errors),\n };\n }\n }\n return true;\n }\n\n public validateOutput(context: AnyObject): true | AnyObject {\n if (this.validateOutputContext) {\n const validationResult = this.validateSchema(\n context,\n this.outputContextSchema,\n );\n if (!validationResult.valid) {\n this.emitWithMetadata(\"meta.task.outputValidationFailed\", {\n __taskName: this.name,\n __taskVersion: this.version,\n __result: context,\n __errors: validationResult.errors,\n });\n return {\n errored: true,\n __error: \"Output context validation failed\",\n __validationErrors: JSON.stringify(validationResult.errors),\n };\n }\n }\n return true;\n }\n\n /**\n * Executes the task function after optional input validation.\n * @param context - The GraphContext to validate and execute.\n * @param emit\n * @param progressCallback - Callback for progress updates.\n * @returns TaskResult from the taskFunction or error object on validation failure.\n * @edge If validateInputContext is true, validates context; on failure, emits 'meta.task.validationFailed' with detailed errors.\n * @edge If validateOutputContext is true, validates output; on failure, emits 'meta.task.outputValidationFailed' with detailed errors.\n */\n public execute(\n context: GraphContext,\n emit: (signal: string, context: AnyObject) => void,\n progressCallback: (progress: number) => void,\n ): TaskResult {\n return this.taskFunction(\n this.isMeta ? context.getClonedFullContext() : context.getClonedContext(),\n emit,\n progressCallback,\n );\n }\n\n public doAfter(...tasks: Task[]): this {\n for (const pred of tasks) {\n if (this.predecessorTasks.has(pred)) continue;\n\n pred.nextTasks.add(this);\n this.predecessorTasks.add(pred);\n this.updateLayerFromPredecessors();\n\n if (this.hasCycle()) {\n this.decouple(pred);\n throw new Error(`Cycle adding pred ${pred.name} to ${this.name}`);\n }\n\n this.emitMetricsWithMetadata(\"meta.task.relationship_added\", {\n data: {\n taskName: this.name,\n taskVersion: this.version,\n predecessorTaskName: pred.name,\n predecessorTaskVersion: pred.version,\n },\n });\n }\n\n this.updateProgressWeights();\n return this;\n }\n\n public then(...tasks: Task[]): this {\n for (const next of tasks) {\n if (this.nextTasks.has(next)) continue;\n\n this.nextTasks.add(next);\n next.predecessorTasks.add(this);\n next.updateLayerFromPredecessors();\n\n if (next.hasCycle()) {\n this.decouple(next);\n throw new Error(`Cycle adding next ${next.name} to ${this.name}`);\n }\n\n this.emitMetricsWithMetadata(\"meta.task.relationship_added\", {\n data: {\n taskName: next.name,\n taskVersion: next.version,\n predecessorTaskName: this.name,\n predecessorTaskVersion: this.version,\n },\n });\n }\n\n this.updateProgressWeights();\n return this;\n }\n\n public decouple(task: Task): void {\n if (task.nextTasks.has(this)) {\n task.nextTasks.delete(this);\n this.predecessorTasks.delete(task);\n }\n\n if (task.onFailTasks.has(this)) {\n task.onFailTasks.delete(this);\n this.predecessorTasks.delete(task);\n }\n\n // TODO: Delete task map instances\n\n this.updateLayerFromPredecessors();\n }\n\n updateProgressWeights(): void {\n const layers = this.getSubgraphLayers();\n const numLayers = layers.size;\n if (numLayers === 0) return;\n\n const weightPerLayer = 1 / numLayers;\n\n layers.forEach((tasksInLayer) => {\n const numTasks = tasksInLayer.size;\n if (numTasks === 0) return;\n tasksInLayer.forEach(\n (task) => (task.progressWeight = weightPerLayer / numTasks),\n );\n });\n }\n\n getSubgraphLayers(): Map<number, Set<Task>> {\n const layers = new Map<number, Set<Task>>();\n const queue = [this as Task];\n const visited = new Set<Task>();\n\n while (queue.length) {\n const task = queue.shift()!;\n if (visited.has(task)) continue;\n visited.add(task);\n\n if (!layers.has(task.layerIndex)) layers.set(task.layerIndex, new Set());\n layers.get(task.layerIndex)!.add(task);\n\n task.nextTasks.forEach((next) => queue.push(next));\n }\n\n return layers;\n }\n\n updateLayerFromPredecessors(): void {\n const prevLayerIndex = this.layerIndex;\n let maxPred = 0;\n this.predecessorTasks.forEach(\n (pred) => (maxPred = Math.max(maxPred, pred.layerIndex)),\n );\n this.layerIndex = maxPred + 1;\n\n if (prevLayerIndex !== this.layerIndex) {\n this.emitMetricsWithMetadata(\"meta.task.layer_index_changed\", {\n data: {\n layerIndex: this.layerIndex,\n },\n filter: { name: this.name, version: this.version },\n });\n }\n\n const queue = Array.from(this.nextTasks);\n while (queue.length) {\n const next = queue.shift()!;\n next.updateLayerFromPredecessors();\n next.nextTasks.forEach((n) => queue.push(n));\n }\n }\n\n hasCycle(): boolean {\n const visited = new Set<Task>();\n const recStack = new Set<Task>();\n\n const dfs = (task: Task): boolean => {\n if (recStack.has(task)) return true;\n if (visited.has(task)) return false;\n\n visited.add(task);\n recStack.add(task);\n\n for (const next of task.nextTasks) {\n if (dfs(next)) return true;\n }\n\n recStack.delete(task);\n return false;\n };\n\n return dfs(this);\n }\n\n public mapNext(\n callback: (task: Task) => any,\n failed: boolean = false,\n ): any[] {\n const tasks = failed\n ? Array.from(this.onFailTasks)\n : Array.from(this.nextTasks);\n return tasks.map(callback);\n }\n\n public mapPrevious(callback: (task: Task) => any): any[] {\n return Array.from(this.predecessorTasks).map(callback);\n }\n\n /**\n * Subscribes to signals (chainable).\n * @param signals The signal names.\n * @returns This for chaining.\n * @edge Duplicates ignored; assumes broker.observe binds this as handler.\n */\n doOn(...signals: string[]): this {\n signals.forEach((signal) => {\n if (this.observedSignals.has(signal)) return;\n Cadenza.broker.observe(signal, this as any);\n this.observedSignals.add(signal);\n this.emitWithMetadata(\"meta.task.observed_signal\", {\n data: {\n signalName: signal,\n taskName: this.name,\n taskVersion: this.version,\n },\n });\n });\n return this;\n }\n\n /**\n * Sets signals to emit post-execution (chainable).\n * @param signals The signal names.\n * @returns This for chaining.\n */\n emits(...signals: string[]): this {\n signals.forEach((signal) => {\n this.signalsToEmitAfter.add(signal);\n this.emitsSignals.add(signal);\n this.emitWithMetadata(\"meta.task.attached_signal\", {\n data: {\n signalName: signal,\n taskName: this.name,\n taskVersion: this.version,\n },\n });\n });\n return this;\n }\n\n emitsOnFail(...signals: string[]): this {\n signals.forEach((signal) => {\n this.signalsToEmitOnFail.add(signal);\n this.emitsSignals.add(signal);\n this.emitWithMetadata(\"meta.task.attached_signal\", {\n data: {\n signalName: signal,\n taskName: this.name,\n taskVersion: this.version,\n isOnFail: true,\n },\n });\n });\n return this;\n }\n\n /**\n * Unsubscribes from all observed signals.\n * @returns This for chaining.\n */\n unsubscribeAll(): this {\n this.observedSignals.forEach((signal) => {\n Cadenza.broker.unsubscribe(signal, this as any);\n this.emitWithMetadata(\"meta.task.unsubscribed_signal\", {\n filter: {\n signalName: signal,\n taskName: this.name,\n taskVersion: this.version,\n },\n });\n });\n this.observedSignals.clear();\n return this;\n }\n\n /**\n * Unsubscribes from specific signals.\n * @param signals The signals.\n * @returns This for chaining.\n * @edge No-op if not subscribed.\n */\n unsubscribe(...signals: string[]): this {\n signals.forEach((signal) => {\n if (this.observedSignals.has(signal)) {\n Cadenza.broker.unsubscribe(signal, this as any);\n this.observedSignals.delete(signal);\n this.emitWithMetadata(\"meta.task.unsubscribed_signal\", {\n filter: {\n signalName: signal,\n taskName: this.name,\n taskVersion: this.version,\n },\n });\n }\n });\n return this;\n }\n\n /**\n * Detaches specific emitted signals.\n * @param signals The signals.\n * @returns This for chaining.\n */\n detachSignals(...signals: string[]): this {\n signals.forEach((signal) => {\n this.signalsToEmitAfter.delete(signal);\n this.emitWithMetadata(\"meta.task.detached_signal\", {\n filter: {\n signalName: signal,\n taskName: this.name,\n taskVersion: this.version,\n },\n });\n });\n return this;\n }\n\n /**\n * Detaches all emitted signals.\n * @returns This for chaining.\n */\n detachAllSignals(): this {\n this.signalsToEmitAfter.forEach((signal) => {\n this.emitWithMetadata(\"meta.task.detached_signal\", {\n filter: {\n signalName: signal,\n taskName: this.name,\n taskVersion: this.version,\n },\n });\n });\n this.signalsToEmitAfter.clear();\n return this;\n }\n\n mapSignals(callback: (signal: string) => void) {\n return Array.from(this.signalsToEmitAfter).map(callback);\n }\n\n mapOnFailSignals(callback: (signal: string) => void) {\n return Array.from(this.signalsToEmitOnFail).map(callback);\n }\n\n /**\n * Emits attached signals.\n * @param context The context for emission.\n * @edge If isMeta (from Task), suppresses further \"meta.*\" to prevent loops.\n */\n emitSignals(context: GraphContext): void {\n this.signalsToEmitAfter.forEach((signal) => {\n this.emit(signal, context.getFullContext());\n });\n }\n\n /**\n * Emits attached fail signals.\n * @param context The context for emission.\n * @edge If isMeta (from Task), suppresses further \"meta.*\" to prevent loops.\n */\n emitOnFailSignals(context: GraphContext): void {\n this.signalsToEmitOnFail.forEach((signal) => {\n this.emit(signal, context.getFullContext());\n });\n }\n\n public destroy(): void {\n this.unsubscribeAll();\n this.detachAllSignals();\n\n this.predecessorTasks.forEach((pred) => pred.nextTasks.delete(this));\n this.nextTasks.forEach((next) => next.predecessorTasks.delete(this));\n this.onFailTasks.forEach((fail) => fail.predecessorTasks.delete(this));\n\n this.nextTasks.clear();\n this.predecessorTasks.clear();\n this.onFailTasks.clear();\n\n this.destroyed = true;\n\n this.emitMetricsWithMetadata(\"meta.task.destroyed\", {\n data: { deleted: true },\n filter: { name: this.name, version: this.version },\n });\n\n // TODO: Delete task map instances\n }\n\n public export(): AnyObject {\n return {\n __name: this.name,\n __description: this.description,\n __layerIndex: this.layerIndex,\n __isUnique: this.isUnique,\n __isMeta: this.isMeta,\n __isSignal: this.isSignal,\n __eventTriggers: this.observedSignals,\n __attachedEvents: this.signalsToEmitAfter,\n __isDeputy: this.isDeputy,\n __throttled: this.throttled,\n __isEphemeral: this.isEphemeral,\n __concurrency: this.concurrency,\n __timeout: this.timeout,\n __functionString: this.taskFunction.toString(),\n __getTagCallback: this.getTag.toString(),\n __inputSchema: this.inputContextSchema,\n __validateInputContext: this.validateInputContext,\n __outputSchema: this.outputContextSchema,\n __validateOutputContext: this.validateOutputContext,\n __nextTasks: Array.from(this.nextTasks).map((t) => t.name),\n __onFailTasks: Array.from(this.onFailTasks).map((t) => t.name),\n __previousTasks: Array.from(this.predecessorTasks).map((t) => t.name),\n };\n }\n\n public getIterator(): TaskIterator {\n return new TaskIterator(this);\n }\n\n public accept(visitor: GraphVisitor): void {\n visitor.visitTask(this);\n }\n\n public log(): void {\n console.log(this.name);\n }\n}\n","import Cadenza from \"../Cadenza\";\nimport Task from \"../graph/definition/Task\";\nimport GraphRoutine from \"../graph/definition/GraphRoutine\";\nimport { AnyObject } from \"../types/global\";\n\nexport default class GraphRegistry {\n static _instance: GraphRegistry;\n public static get instance(): GraphRegistry {\n if (!this._instance) this._instance = new GraphRegistry();\n return this._instance;\n }\n\n tasks: Map<string, Task> = new Map();\n routines: Map<string, GraphRoutine> = new Map();\n\n registerTask: Task;\n updateTaskInputSchema: Task;\n updateTaskOutputSchema: Task;\n getTaskByName: Task;\n getTasksByLayer: Task;\n getAllTasks: Task;\n doForEachTask: Task;\n deleteTask: Task;\n registerRoutine: Task;\n getRoutineByName: Task;\n getAllRoutines: Task;\n doForEachRoutine: Task;\n deleteRoutine: Task;\n\n constructor() {\n // Hardcode seed MetaTask (observes on existing broker)\n this.registerTask = new Task(\n \"Register task\",\n (context: AnyObject) => {\n const { __taskInstance } = context;\n if (__taskInstance && !this.tasks.has(__taskInstance.name)) {\n this.tasks.set(__taskInstance.name, __taskInstance);\n }\n delete context.__taskInstance;\n return true;\n },\n \"Registers tasks. Seed for meta.taskCreated\",\n 0,\n 0,\n true,\n false,\n true,\n ).doOn(\"meta.task.created\");\n\n // Manual seed register\n this.tasks.set(this.registerTask.name, this.registerTask);\n\n this.updateTaskInputSchema = Cadenza.createMetaTask(\n \"Update task input schema\",\n (context) => {\n const { __id, __schema } = context;\n const task = this.tasks.get(__id);\n if (!task) return true;\n task.setInputContextSchema(__schema);\n return true;\n },\n \"Updates task input schema.\",\n ).doOn(\"meta.task.input_schema_updated\");\n\n this.updateTaskOutputSchema = Cadenza.createMetaTask(\n \"Update task input schema\",\n (context) => {\n const { __id, __schema } = context;\n const task = this.tasks.get(__id);\n if (!task) return true;\n task.setOutputContextSchema(__schema);\n return true;\n },\n \"Updates task input schema.\",\n ).doOn(\"meta.task.output_schema_updated\");\n\n this.getTaskByName = Cadenza.createMetaTask(\n \"Get task by name\",\n (context) => {\n const { __name } = context;\n for (const task of this.tasks.values()) {\n if (task.name === __name) {\n return { ...context, __task: task };\n }\n }\n return context;\n },\n \"Gets task by name (first match).\",\n );\n\n this.getTasksByLayer = Cadenza.createMetaTask(\n \"Get tasks by layer\",\n (context) => {\n const { __layerIndex } = context;\n const layerTasks = Array.from(this.tasks.values()).filter(\n (task) => task.layerIndex === __layerIndex,\n );\n return { ...context, __tasks: layerTasks };\n },\n \"Gets tasks by layer index.\",\n );\n\n this.getAllTasks = Cadenza.createMetaTask(\n \"Get all tasks\",\n (context) => ({ ...context, __tasks: Array.from(this.tasks.values()) }), // Use arrow to capture this\n \"Gets all tasks.\",\n );\n\n this.doForEachTask = Cadenza.createMetaTask(\n \"Do for each task\",\n function* (context: AnyObject) {\n // @ts-ignore\n for (const task of this.tasks.values()) {\n yield { ...context, __task: task };\n }\n }.bind(this), // Bind to capture this in generator\n \"Yields each task for branching.\",\n );\n\n this.deleteTask = Cadenza.createMetaTask(\n \"Delete task\",\n (context) => {\n const { __name } = context;\n this.tasks.delete(__name);\n return context;\n },\n \"Deletes task.\",\n ).doOn(\"meta.task.destroyed\");\n\n this.registerRoutine = Cadenza.createMetaTask(\n \"Register routine\",\n (context) => {\n const { __routineInstance } = context;\n if (__routineInstance && !this.routines.has(__routineInstance.name)) {\n this.routines.set(__routineInstance.name, __routineInstance);\n }\n delete context.__routineInstance;\n return true;\n },\n \"Registers routine.\",\n ).doOn(\"meta.routine.created\");\n\n this.getRoutineByName = Cadenza.createMetaTask(\n \"Get routine by name\",\n (context) => {\n const { __name } = context;\n for (const routine of this.routines.values()) {\n if (routine.name === __name) {\n return { ...context, __routine: routine };\n }\n }\n return context;\n },\n \"Gets routine by name.\",\n );\n\n this.getAllRoutines = Cadenza.createMetaTask(\n \"Get all routines\",\n (context) => ({\n ...context,\n __routines: Array.from(this.routines.values()),\n }), // Use arrow to capture this\n \"Gets all routines.\",\n );\n\n this.doForEachRoutine = Cadenza.createMetaTask(\n \"Do for each routine\",\n function* (context: AnyObject) {\n // @ts-ignore\n for (const routine of this.routines.values()) {\n yield { ...context, __routine: routine };\n }\n }.bind(this),\n \"Yields each routine.\",\n );\n\n this.deleteRoutine = Cadenza.createMetaTask(\n \"Delete routine\",\n (context) => {\n const { __name } = context;\n this.routines.delete(__name);\n return context;\n },\n \"Deletes routine.\",\n );\n }\n\n reset() {\n this.tasks.clear();\n this.routines.clear();\n }\n}\n","import Task, { TaskFunction, TaskResult } from \"./Task\";\nimport GraphContext from \"../context/GraphContext\";\nimport { SchemaDefinition } from \"../../types/schema\";\n\nexport interface DebounceOptions {\n leading?: boolean;\n trailing?: boolean;\n maxWait?: number;\n}\n\nexport default class DebounceTask extends Task {\n readonly debounceTime: number;\n leading: boolean;\n trailing: boolean;\n maxWait: number;\n timer: NodeJS.Timeout | null = null;\n maxTimer: NodeJS.Timeout | null = null;\n hasLaterCall: boolean = false;\n lastResolve: ((value: unknown) => void) | null = null;\n lastReject: ((reason?: any) => void) | null = null;\n lastContext: GraphContext | null = null;\n lastTimeout: NodeJS.Timeout | null = null;\n lastProgressCallback: ((progress: number) => void) | null = null;\n lastEmitFunction: ((signal: string, context: any) => void) | null = null;\n\n constructor(\n name: string,\n task: TaskFunction,\n description: string = \"\",\n debounceTime: number = 1000,\n leading: boolean = false,\n trailing: boolean = true,\n maxWait: number = 0,\n concurrency: number = 0,\n timeout: number = 0,\n register: boolean = true,\n isUnique: boolean = false,\n isMeta: boolean = false,\n isSubMeta: boolean = false,\n isHidden: boolean = false,\n inputSchema: SchemaDefinition | undefined = undefined,\n validateInputSchema: boolean = false,\n outputSchema: SchemaDefinition | undefined = undefined,\n validateOutputSchema: boolean = false,\n ) {\n super(\n name,\n task,\n description,\n concurrency,\n timeout,\n register,\n isUnique,\n isMeta,\n isSubMeta,\n isHidden,\n undefined,\n inputSchema,\n validateInputSchema,\n outputSchema,\n validateOutputSchema,\n );\n this.debounceTime = debounceTime;\n this.leading = leading;\n this.trailing = trailing;\n this.maxWait = maxWait;\n }\n\n executeFunction(): void {\n if (this.lastTimeout) {\n clearTimeout(this.lastTimeout);\n }\n\n let result;\n try {\n result = this.taskFunction(\n this.lastContext!.getClonedContext(),\n this.lastEmitFunction!,\n this.lastProgressCallback!,\n );\n } catch (error) {\n if (this.lastResolve) {\n this.lastResolve(error);\n }\n return;\n }\n\n if (result instanceof Promise) {\n result.then(this.lastResolve!).catch(this.lastReject!);\n } else {\n if (this.lastResolve) {\n this.lastResolve(result);\n }\n }\n }\n\n debouncedTrigger(\n resolve: (value: unknown) => void,\n reject: (reason?: any) => void,\n context: GraphContext,\n timeout: NodeJS.Timeout,\n emit: (signal: string, context: any) => void,\n progressCallback: (progress: number) => void,\n ): void {\n const callNow = this.leading && this.timer === null;\n const isNewBurst = this.timer === null;\n\n if (this.timer !== null) {\n clearTimeout(this.timer);\n this.timer = null;\n }\n\n this.lastResolve = resolve;\n this.lastReject = reject;\n this.lastContext = context;\n this.lastTimeout = timeout;\n this.lastProgressCallback = progressCallback;\n this.lastEmitFunction = emit;\n\n if (!callNow) {\n this.hasLaterCall = true;\n }\n\n this.timer = setTimeout(() => {\n this.timer = null;\n if (this.trailing && this.hasLaterCall) {\n this.executeFunction();\n this.hasLaterCall = false;\n }\n if (this.maxTimer) {\n clearTimeout(this.maxTimer);\n this.maxTimer = null;\n }\n }, this.debounceTime);\n\n if (callNow) {\n this.executeFunction();\n this.hasLaterCall = false;\n }\n\n if (this.maxWait > 0 && isNewBurst) {\n this.maxTimer = setTimeout(() => {\n this.maxTimer = null;\n if (this.trailing && this.hasLaterCall) {\n if (this.timer) {\n clearTimeout(this.timer);\n this.timer = null;\n }\n this.executeFunction();\n this.hasLaterCall = false;\n }\n }, this.maxWait);\n }\n }\n\n execute(\n context: GraphContext,\n emit: (signal: string, context: any) => void,\n progressCallback: (progress: number) => void,\n ): TaskResult {\n return new Promise((resolve, reject) => {\n const timeout = setTimeout(() => {\n resolve(false);\n }, this.debounceTime + 1);\n\n this.debouncedTrigger(\n resolve,\n reject,\n context,\n timeout,\n emit,\n progressCallback,\n );\n });\n }\n}\n","import Task, { TaskFunction, ThrottleTagGetter } from \"./Task\";\nimport { SchemaDefinition } from \"../../types/schema\";\nimport { AnyObject } from \"../../types/global\";\n\nexport type EphemeralTaskOptions = {\n once?: boolean;\n destroyCondition?: (context: any) => boolean;\n};\n\nexport default class EphemeralTask extends Task {\n readonly once: boolean;\n readonly condition: (context: any) => boolean;\n readonly isEphemeral: boolean = true;\n\n constructor(\n name: string,\n task: TaskFunction,\n description: string = \"\",\n once: boolean = true,\n condition: (context: any) => boolean = () => true,\n concurrency: number = 0,\n timeout: number = 0,\n register: boolean = false,\n isUnique: boolean = false,\n isMeta: boolean = false,\n isSubMeta: boolean = false,\n isHidden: boolean = false,\n getTagCallback: ThrottleTagGetter | undefined = undefined,\n inputSchema: SchemaDefinition | undefined = undefined,\n validateInputContext: boolean = false,\n outputSchema: SchemaDefinition | undefined = undefined,\n validateOutputContext: boolean = false,\n retryCount: number = 0,\n retryDelay: number = 0,\n retryDelayMax: number = 0,\n retryDelayFactor: number = 1,\n ) {\n super(\n name,\n task,\n description,\n concurrency,\n timeout,\n register,\n isUnique,\n isMeta,\n isSubMeta,\n isHidden,\n getTagCallback,\n inputSchema,\n validateInputContext,\n outputSchema,\n validateOutputContext,\n retryCount,\n retryDelay,\n retryDelayMax,\n retryDelayFactor,\n );\n this.once = once;\n this.condition = condition;\n }\n\n public execute(\n context: any,\n emit: (signal: string, context: AnyObject) => void,\n progressCallback: (progress: number) => void,\n ) {\n const result = super.execute(context, emit, progressCallback);\n\n if (this.once || this.condition(result)) {\n this.destroy();\n return result;\n }\n }\n}\n","export default abstract class ExecutionChain {\n next: ExecutionChain | undefined;\n previous: ExecutionChain | undefined;\n\n public setNext(next: ExecutionChain): void {\n if (this.hasNext) {\n return;\n }\n\n next.previous = this;\n this.next = next;\n }\n\n get hasNext() {\n return !!this.next;\n }\n\n get hasPreceding() {\n return !!this.previous;\n }\n\n getNext() {\n return this.next;\n }\n\n getPreceding() {\n return this.previous;\n }\n\n decouple() {\n this.next = undefined;\n this.previous = undefined;\n }\n}\n","import Iterator from \"../../interfaces/Iterator\";\nimport SyncGraphLayer from \"../execution/SyncGraphLayer\";\nimport GraphLayer from \"../../interfaces/GraphLayer\";\n\nexport default class GraphLayerIterator implements Iterator {\n graph: GraphLayer;\n currentLayer: GraphLayer | undefined;\n\n constructor(graph: GraphLayer) {\n this.graph = graph;\n }\n hasNext() {\n return !this.currentLayer || this.currentLayer.hasNext;\n }\n\n hasPrevious(): boolean {\n return !this.currentLayer || this.currentLayer.hasPreceding;\n }\n\n next(): GraphLayer {\n if (!this.currentLayer) {\n return this.getFirst();\n } else if (this.hasNext()) {\n this.currentLayer = this.currentLayer.getNext() as GraphLayer;\n }\n\n // @ts-ignore\n return this.currentLayer;\n }\n\n previous(): GraphLayer {\n if (!this.currentLayer) {\n this.currentLayer = this.graph;\n } else if (this.hasPrevious()) {\n this.currentLayer = this.currentLayer.getPreceding() as SyncGraphLayer;\n }\n\n // @ts-ignore\n return this.currentLayer;\n }\n\n getFirst(): GraphLayer {\n if (!this.currentLayer) {\n this.currentLayer = this.graph;\n }\n\n while (this.hasPrevious()) {\n this.currentLayer = this.currentLayer?.getPreceding() as SyncGraphLayer;\n }\n\n return this.currentLayer;\n }\n\n getLast(): GraphLayer {\n if (!this.currentLayer) {\n this.currentLayer = this.graph;\n }\n\n while (this.hasNext()) {\n this.currentLayer = this.currentLayer?.getNext() as GraphLayer;\n }\n\n return this.currentLayer as GraphLayer;\n }\n}\n","import ExecutionChain from \"./ExecutionChain\";\nimport Graph from \"./Graph\";\nimport GraphNode from \"../graph/execution/GraphNode\";\nimport GraphLayerIterator from \"../graph/iterators/GraphLayerIterator\";\nimport GraphVisitor from \"./GraphVisitor\";\nimport GraphContext from \"../graph/context/GraphContext\";\n\nexport default abstract class GraphLayer\n extends ExecutionChain\n implements Graph\n{\n readonly index: number;\n nodes: GraphNode[] = [];\n executionTime: number = 0;\n executionStart: number = 0;\n debug: boolean = false;\n\n constructor(index: number) {\n super();\n this.index = index;\n }\n\n setDebug(value: boolean) {\n this.debug = value;\n for (const node of this.nodes) {\n node.setDebug(value);\n }\n }\n\n abstract execute(context?: GraphContext): unknown;\n\n get hasPreceding() {\n return !!this.previous && this.previous instanceof GraphLayer;\n }\n\n getNumberOfNodes() {\n return this.nodes.length;\n }\n\n getNodesByRoutineExecId(routineExecId: string) {\n return this.nodes.filter((node) => node.routineExecId === routineExecId);\n }\n\n getIdenticalNodes(node: GraphNode) {\n return this.nodes.filter(\n (n) => node.routineExecId === n.routineExecId && node.sharesTaskWith(n),\n );\n }\n\n isProcessed() {\n for (const node of this.nodes) {\n if (!node.isProcessed()) {\n return false;\n }\n }\n\n return true;\n }\n\n graphDone() {\n let done = true;\n\n let layer: GraphLayer | undefined = this;\n while (layer) {\n if (!layer.isProcessed()) {\n done = false;\n break;\n }\n layer = layer.getNext() as GraphLayer;\n }\n\n return done;\n }\n\n setNext(next: GraphLayer) {\n if (next.index <= this.index) {\n return;\n }\n\n if (next.previous !== undefined) {\n this.previous = next.previous;\n }\n\n super.setNext(next);\n }\n\n add(node: GraphNode) {\n this.nodes.push(node);\n }\n\n start() {\n if (!this.executionStart) {\n this.executionStart = Date.now();\n }\n return this.executionStart;\n }\n\n end() {\n if (!this.executionStart) {\n return 0;\n }\n\n const end = Date.now();\n this.executionTime = end - this.executionStart;\n return end;\n }\n\n destroy() {\n for (const node of this.nodes) {\n node.destroy();\n }\n\n this.nodes = [];\n\n if (this.hasNext) {\n const layer = this.getNext() as GraphLayer;\n layer?.destroy();\n }\n\n this.decouple();\n }\n\n getIterator(): GraphLayerIterator {\n return new GraphLayerIterator(this);\n }\n\n accept(visitor: GraphVisitor) {\n visitor.visitLayer(this);\n\n for (const node of this.nodes) {\n node.accept(visitor);\n }\n }\n\n export() {\n return {\n __index: this.index,\n __executionTime: this.executionTime,\n __numberOfNodes: this.getNumberOfNodes(),\n __hasNextLayer: this.hasNext,\n __hasPrecedingLayer: this.hasPreceding,\n __nodes: this.nodes.map((node) => node.id),\n };\n }\n\n log() {\n console.log(`---Layer ${this.index}---`);\n console.log(\"Execution time:\", this.executionTime);\n let prevNode;\n for (const node of this.nodes) {\n if (!prevNode || !prevNode.sharesContextWith(node)) {\n console.log(\"**********\");\n }\n node.log();\n prevNode = node;\n }\n console.log(\"***********\");\n if (this.hasNext) {\n (this.getNext() as GraphLayer).log();\n }\n }\n}\n","import GraphNode from \"./GraphNode\";\nimport GraphLayer from \"../../interfaces/GraphLayer\";\n\nexport default class SyncGraphLayer extends GraphLayer {\n execute(): GraphNode[] {\n this.start();\n\n const result: GraphNode[] = [];\n for (const node of this.nodes) {\n if (node.isProcessed()) {\n continue;\n }\n\n const newNodes = node.execute();\n\n if (newNodes instanceof Promise) {\n console.error(\"Asynchronous functions are not allowed in sync mode!\");\n continue;\n }\n\n result.push(...(newNodes as GraphNode[]));\n }\n\n this.end();\n\n return result;\n }\n}\n","import SyncGraphLayer from \"../graph/execution/SyncGraphLayer\";\nimport GraphNode from \"../graph/execution/GraphNode\";\nimport GraphLayer from \"./GraphLayer\";\n\nexport default abstract class GraphBuilder {\n graph: GraphLayer | undefined;\n topLayerIndex: number = 0;\n layers: GraphLayer[] = [];\n debug: boolean = false;\n\n setDebug(value: boolean) {\n this.debug = value;\n }\n\n getResult(): GraphLayer {\n return this.graph as GraphLayer;\n }\n\n compose() {\n throw \"Implement this in child class...\";\n }\n\n addNode(node: GraphNode) {\n const index = node.getLayerIndex();\n\n this.addLayer(index);\n const layer = this.getLayer(index);\n\n node.scheduleOn(layer);\n }\n\n addNodes(nodes: GraphNode[]) {\n for (const node of nodes) {\n this.addNode(node);\n }\n }\n\n addLayer(index: number) {\n if (!this.graph) {\n const layer = this.createLayer(index);\n this.graph = layer;\n this.layers.push(layer);\n this.topLayerIndex = index;\n return;\n }\n\n const lastLayerIndex = this.topLayerIndex + this.layers.length - 1;\n\n if (index >= this.topLayerIndex && index <= lastLayerIndex) {\n return;\n }\n\n if (this.topLayerIndex > index) {\n const layer = this.createLayer(this.topLayerIndex - 1);\n layer.setNext(this.layers[0]);\n this.graph = layer;\n this.layers.unshift(layer);\n this.topLayerIndex = this.topLayerIndex - 1;\n this.addLayer(index);\n } else {\n const layer = this.createLayer(lastLayerIndex + 1);\n this.layers[this.layers.length - 1].setNext(layer);\n this.layers.push(layer);\n this.addLayer(index);\n }\n }\n\n createLayer(index: number): GraphLayer {\n const layer = new SyncGraphLayer(index);\n layer.setDebug(this.debug);\n return layer;\n }\n\n getLayer(layerIndex: number) {\n return this.layers[layerIndex - this.topLayerIndex];\n }\n\n public reset() {\n this.graph = undefined;\n this.topLayerIndex = 0;\n this.layers = [];\n }\n}\n","import GraphBuilder from \"../../interfaces/GraphBuilder\";\nimport GraphNode from \"../../graph/execution/GraphNode\";\n\nexport default class GraphBreadthFirstBuilder extends GraphBuilder {\n compose() {\n if (!this.graph) {\n return;\n }\n\n const layers = this.graph.getIterator();\n while (layers.hasNext()) {\n const layer = layers.next();\n const newNodes = layer.execute() as GraphNode[];\n this.addNodes(newNodes);\n }\n }\n}\n","import GraphNode from \"../graph/execution/GraphNode\";\nimport GraphBuilder from \"./GraphBuilder\";\nimport GraphRun from \"../engine/GraphRun\";\nimport GraphBreadthFirstBuilder from \"../engine/builders/GraphBreadthFirstBuilder\";\n\nexport default abstract class GraphRunStrategy {\n graphBuilder: GraphBuilder;\n runInstance?: GraphRun;\n\n constructor() {\n this.graphBuilder = new GraphBreadthFirstBuilder();\n }\n\n setRunInstance(runInstance: GraphRun) {\n this.runInstance = runInstance;\n }\n\n changeStrategy(builder: GraphBuilder) {\n this.graphBuilder = builder;\n }\n\n reset() {\n this.graphBuilder.reset();\n }\n\n addNode(node: GraphNode) {\n this.graphBuilder.addNode(node);\n }\n\n updateRunInstance() {\n this.runInstance?.setGraph(this.graphBuilder.getResult());\n }\n\n abstract run(): void;\n abstract export(): any;\n}\n","import GraphNode from \"../graph/execution/GraphNode\";\n\ntype ProcessFunction = (node: GraphNode) => Promise<GraphNode[]> | GraphNode[];\n\nexport default class ThrottleEngine {\n static instance_: ThrottleEngine;\n\n static get instance() {\n if (!this.instance_) {\n this.instance_ = new ThrottleEngine();\n }\n return this.instance_;\n }\n\n queues: { [tag: string]: [ProcessFunction, GraphNode][] } = {};\n runningCounts: { [tag: string]: number } = {};\n maxConcurrencyPerTag: { [tag: string]: number } = {};\n\n functionIdToPromiseResolve: {\n [functionInstanceId: string]: (value: GraphNode[]) => void;\n } = {};\n\n /**\n * Set a custom concurrency limit for a specific tag\n */\n setConcurrencyLimit(tag: string, limit: number) {\n this.maxConcurrencyPerTag[tag] = limit;\n }\n\n throttle(\n fn: ProcessFunction,\n node: GraphNode,\n tag: string = \"default\",\n ): Promise<GraphNode[]> {\n const functionPromise = new Promise((resolve) => {\n this.functionIdToPromiseResolve[node.id] = resolve as (\n value: GraphNode[],\n ) => void;\n }) as Promise<GraphNode[]>;\n\n this.queues[tag] ??= [];\n this.queues[tag].push([fn, node]);\n\n // Default to 1 if not set\n this.maxConcurrencyPerTag[tag] ??= 1;\n\n this.processQueue(tag);\n\n return functionPromise;\n }\n\n processQueue(tag: string) {\n const maxAllowed = this.maxConcurrencyPerTag[tag];\n\n while (\n (this.queues[tag]?.length ?? 0) > 0 &&\n (this.runningCounts[tag] ?? 0) < maxAllowed\n ) {\n this.runningCounts[tag] = (this.runningCounts[tag] || 0) + 1;\n const item = this.queues[tag].shift()!;\n this.process(item).then(() => {\n this.runningCounts[tag]--;\n this.processQueue(tag); // Re-check queue\n });\n }\n\n // Clean up if done\n if (\n (this.queues[tag]?.length ?? 0) === 0 &&\n this.runningCounts[tag] === 0\n ) {\n delete this.queues[tag];\n delete this.runningCounts[tag];\n }\n }\n\n async process(item: [ProcessFunction, GraphNode]) {\n const fn = item[0];\n const node = item[1];\n\n const context = await fn(node);\n\n this.functionIdToPromiseResolve[node.id](context);\n delete this.functionIdToPromiseResolve[node.id];\n }\n}\n","import GraphNode from \"./GraphNode\";\nimport GraphLayer from \"../../interfaces/GraphLayer\";\nimport ThrottleEngine from \"../../engine/ThrottleEngine\";\n\nexport default class AsyncGraphLayer extends GraphLayer {\n waitingNodes: GraphNode[] = [];\n processingNodes: Set<GraphNode> = new Set();\n\n constructor(index: number) {\n super(index);\n }\n\n add(node: GraphNode) {\n this.nodes.push(node);\n this.waitingNodes.push(node);\n }\n\n execute() {\n if (this.waitingNodes.length === 0) {\n return {};\n }\n\n this.start();\n\n const result: {\n [routineExecId: string]: (GraphNode[] | Promise<GraphNode[]>)[];\n } = {};\n\n while (this.waitingNodes.length > 0) {\n const node = this.waitingNodes.shift();\n if (!node) {\n break;\n }\n\n this.processingNodes.add(node);\n\n result[node.routineExecId] ??= [];\n\n let nextNodes;\n if (node?.getConcurrency()) {\n const tag = node.getTag();\n ThrottleEngine.instance.setConcurrencyLimit(tag, node.getConcurrency());\n nextNodes = ThrottleEngine.instance.throttle(\n this.processNode.bind(this),\n node,\n tag,\n );\n } else {\n nextNodes = this.processNode(node);\n }\n\n result[node.routineExecId].push(nextNodes);\n }\n\n if (this.processingNodes.size === 0) {\n this.end();\n }\n\n return result;\n }\n\n processNode(node: GraphNode): Promise<GraphNode[]> | GraphNode[] {\n node.start();\n\n const nextNodes = node.execute();\n\n if (nextNodes instanceof Promise) {\n return this.processAsync(node, nextNodes);\n }\n\n this.processingNodes.delete(node);\n\n return nextNodes;\n }\n\n async processAsync(node: GraphNode, nextNodes: Promise<GraphNode[]>) {\n const result = await nextNodes;\n this.processingNodes.delete(node);\n return result;\n }\n\n destroy() {\n super.destroy();\n this.waitingNodes = [];\n this.processingNodes = new Set();\n }\n}\n","import GraphBuilder from \"../../interfaces/GraphBuilder\";\nimport { sleep } from \"../../utils/promise\";\nimport AsyncGraphLayer from \"../../graph/execution/AsyncGraphLayer\";\nimport GraphNode from \"../../graph/execution/GraphNode\";\n\nexport default class GraphAsyncQueueBuilder extends GraphBuilder {\n async compose() {\n if (!this.graph) {\n return;\n }\n\n const layers = this.graph.getIterator();\n\n while (true) {\n let layer = layers.getFirst();\n if (layer.graphDone()) {\n return;\n }\n\n this.processLayer(layer as AsyncGraphLayer);\n\n while (layers.hasNext()) {\n layer = layers.next();\n this.processLayer(layer as AsyncGraphLayer);\n }\n\n await sleep(0); // Take a breath\n }\n }\n\n processLayer(layer: AsyncGraphLayer) {\n const nextNodes = layer.execute();\n for (const routineExecId of Object.keys(nextNodes)) {\n const group = nextNodes[routineExecId];\n if (group.some((nodes) => nodes instanceof Promise)) {\n Promise.all(group).then((result) =>\n this.addNodes(result.flat() as GraphNode[]),\n );\n } else {\n this.addNodes(group.flat() as GraphNode[]);\n }\n }\n }\n\n createLayer(index: number) {\n const layer = new AsyncGraphLayer(index);\n layer.setDebug(this.debug);\n return layer;\n }\n}\n","import GraphRunStrategy from \"../../interfaces/GraphRunStrategy\";\nimport GraphAsyncQueueBuilder from \"../builders/GraphAsyncQueueBuilder\";\n\nexport default class GraphAsyncRun extends GraphRunStrategy {\n constructor() {\n super();\n this.graphBuilder = new GraphAsyncQueueBuilder();\n }\n\n async run() {\n await this.graphBuilder.compose();\n this.updateRunInstance();\n this.reset();\n }\n\n reset() {\n super.reset();\n }\n\n export(): any {\n return {};\n }\n}\n","import GraphRunStrategy from \"../../interfaces/GraphRunStrategy\";\n\nexport default class GraphStandardRun extends GraphRunStrategy {\n run() {\n this.graphBuilder.compose();\n this.updateRunInstance();\n this.reset();\n }\n\n export(): any {\n return {};\n }\n}\n","import SignalBroker from \"./engine/SignalBroker\";\nimport GraphRunner from \"./engine/GraphRunner\";\nimport GraphRegistry from \"./registry/GraphRegistry\";\nimport Task, { TaskFunction, ThrottleTagGetter } from \"./graph/definition/Task\";\nimport DebounceTask, { DebounceOptions } from \"./graph/definition/DebounceTask\";\nimport EphemeralTask, {\n EphemeralTaskOptions,\n} from \"./graph/definition/EphemeralTask\";\nimport GraphRoutine from \"./graph/definition/GraphRoutine\";\nimport GraphAsyncRun from \"./engine/strategy/GraphAsyncRun\";\nimport GraphStandardRun from \"./engine/strategy/GraphStandardRun\";\nimport { SchemaDefinition } from \"./types/schema\";\n\nexport interface TaskOptions {\n concurrency?: number;\n timeout?: number;\n register?: boolean;\n isUnique?: boolean;\n isMeta?: boolean;\n isSubMeta?: boolean;\n isHidden?: boolean;\n getTagCallback?: ThrottleTagGetter;\n inputSchema?: SchemaDefinition;\n validateInputContext?: boolean;\n outputSchema?: SchemaDefinition;\n validateOutputContext?: boolean;\n retryCount?: number;\n retryDelay?: number;\n retryDelayMax?: number;\n retryDelayFactor?: number;\n}\n\nexport type CadenzaMode = \"dev\" | \"debug\" | \"verbose\" | \"production\";\n\nexport default class Cadenza {\n public static broker: SignalBroker;\n public static runner: GraphRunner;\n public static metaRunner: GraphRunner;\n public static registry: GraphRegistry;\n static isBootstrapped = false;\n static mode: CadenzaMode = \"production\";\n\n public static bootstrap(): void {\n if (this.isBootstrapped) return;\n this.isBootstrapped = true;\n\n // 1. SignalBroker (empty, for observations)\n this.broker = SignalBroker.instance;\n\n // 2. Runners (now init broker with them)\n this.runner = new GraphRunner();\n this.metaRunner = new GraphRunner(true);\n this.broker.bootstrap(this.runner, this.metaRunner);\n\n if (this.mode === \"debug\" || this.mode === \"dev\") {\n this.broker.setDebug(true);\n this.runner.setDebug(true);\n this.metaRunner.setDebug(true);\n }\n\n // 3. GraphRegistry (seed observes on broker)\n this.registry = GraphRegistry.instance;\n\n // 4. Runners (create meta tasks)\n this.broker.init();\n this.runner.init();\n this.metaRunner.init();\n }\n\n public static get runStrategy() {\n return {\n PARALLEL: new GraphAsyncRun(),\n SEQUENTIAL: new GraphStandardRun(),\n };\n }\n\n public static setMode(mode: CadenzaMode) {\n this.mode = mode;\n\n this.bootstrap();\n\n if (mode === \"debug\" || mode === \"dev\") {\n this.broker.setDebug(true);\n this.runner.setDebug(true);\n }\n\n if (mode === \"verbose\") {\n this.broker.setDebug(true);\n this.broker.setVerbose(true);\n this.runner.setDebug(true);\n this.runner.setVerbose(true);\n }\n\n if (mode === \"production\") {\n this.broker.setDebug(false);\n this.broker.setVerbose(false);\n this.runner.setDebug(false);\n this.runner.setVerbose(false);\n }\n }\n\n /**\n * Validates a name for uniqueness and non-emptiness.\n * @param name The name to validate.\n * @throws Error if invalid.\n */\n public static validateName(name: string): void {\n if (!name || typeof name !== \"string\") {\n throw new Error(\"Task or Routine name must be a non-empty string.\");\n }\n // Further uniqueness check delegated to GraphRegistry.register*\n }\n\n /**\n * Creates a standard Task and registers it in the GraphRegistry.\n * @param name Unique identifier for the task.\n * @param func The function or async generator to execute.\n * @param description Optional human-readable description for introspection.\n * @param options Optional task options.\n * @returns The created Task instance.\n * @throws Error if name is invalid or duplicate in registry.\n */\n static createTask(\n name: string,\n func: TaskFunction,\n description?: string,\n options: TaskOptions = {},\n ): Task {\n this.bootstrap();\n this.validateName(name);\n\n options = {\n concurrency: 0,\n timeout: 0,\n register: true,\n isUnique: false,\n isMeta: false,\n isSubMeta: false,\n isHidden: false,\n getTagCallback: undefined,\n inputSchema: undefined,\n validateInputContext: false,\n outputSchema: undefined,\n validateOutputContext: false,\n retryCount: 0,\n retryDelay: 0,\n retryDelayMax: 0,\n retryDelayFactor: 1,\n ...options,\n };\n\n return new Task(\n name,\n func,\n description,\n options.concurrency,\n options.timeout,\n options.register,\n options.isUnique,\n options.isMeta,\n options.isSubMeta,\n options.isHidden,\n options.getTagCallback,\n options.inputSchema,\n options.validateInputContext,\n options.outputSchema,\n options.validateOutputContext,\n options.retryCount,\n options.retryDelay,\n options.retryDelayMax,\n options.retryDelayFactor,\n );\n }\n\n /**\n * Creates a MetaTask (for meta-layer graphs) and registers it.\n * MetaTasks suppress further meta-signal emissions to prevent loops.\n * @param name Unique identifier for the meta-task.\n * @param func The function or async generator to execute.\n * @param description Optional description.\n * @param options Optional task options.\n * @returns The created MetaTask instance.\n * @throws Error if name invalid or duplicate.\n */\n static createMetaTask(\n name: string,\n func: TaskFunction,\n description?: string,\n options: TaskOptions = {},\n ): Task {\n options.isMeta = true;\n return this.createTask(name, func, description, options);\n }\n\n /**\n * Creates a UniqueTask (executes once per execution ID, merging parents) and registers it.\n * Use for fan-in/joins after parallel branches.\n * @param name Unique identifier.\n * @param func Function receiving joinedContexts.\n * @param description Optional description.\n * @param options Optional task options.\n * @returns The created UniqueTask.\n * @throws Error if invalid.\n */\n static createUniqueTask(\n name: string,\n func: TaskFunction,\n description?: string,\n options: TaskOptions = {},\n ): Task {\n options.isUnique = true;\n return this.createTask(name, func, description, options);\n }\n\n /**\n * Creates a UniqueMetaTask for meta-layer joins.\n * @param name Unique identifier.\n * @param func Function.\n * @param description Optional.\n * @param options Optional task options.\n * @returns The created UniqueMetaTask.\n */\n static createUniqueMetaTask(\n name: string,\n func: TaskFunction,\n description?: string,\n options: TaskOptions = {},\n ): Task {\n options.isMeta = true;\n options.isUnique = true;\n return this.createUniqueTask(name, func, description, options);\n }\n\n /**\n * Creates a ThrottledTask (rate-limited by concurrency or custom groups) and registers it.\n * @param name Unique identifier.\n * @param func Function.\n * @param throttledIdGetter Optional getter for dynamic grouping (e.g., per-user).\n * @param description Optional.\n * @param options Optional task options.\n * @returns The created ThrottledTask.\n * @edge If no getter, throttles per task ID; use for resource protection.\n */\n static createThrottledTask(\n name: string,\n func: TaskFunction,\n throttledIdGetter: ThrottleTagGetter = () => \"default\",\n description?: string,\n options: TaskOptions = {},\n ): Task {\n options.concurrency = 1;\n options.getTagCallback = throttledIdGetter;\n return this.createTask(name, func, description, options);\n }\n\n /**\n * Creates a ThrottledMetaTask for meta-layer throttling.\n * @param name Identifier.\n * @param func Function.\n * @param throttledIdGetter Optional getter.\n * @param description Optional.\n * @param options Optional task options.\n * @returns The created ThrottledMetaTask.\n */\n static createThrottledMetaTask(\n name: string,\n func: TaskFunction,\n throttledIdGetter: ThrottleTagGetter,\n description?: string,\n options: TaskOptions = {},\n ): Task {\n options.isMeta = true;\n return this.createThrottledTask(\n name,\n func,\n throttledIdGetter,\n description,\n options,\n );\n }\n\n /**\n * Creates a DebounceTask (delays exec until quiet period) and registers it.\n * @param name Identifier.\n * @param func Function.\n * @param description Optional.\n * @param debounceTime Delay in ms (default 1000).\n * @param options Optional task options plus optional debounce config (e.g., leading/trailing).\n * @returns The created DebounceTask.\n * @edge Multiple triggers within time collapse to one exec.\n */\n static createDebounceTask(\n name: string,\n func: TaskFunction,\n description?: string,\n debounceTime: number = 1000,\n options: TaskOptions & DebounceOptions = {},\n ): DebounceTask {\n this.bootstrap();\n this.validateName(name);\n\n options = {\n concurrency: 0,\n timeout: 0,\n register: true,\n leading: false,\n trailing: true,\n maxWait: 0,\n isUnique: false,\n isMeta: false,\n isSubMeta: false,\n isHidden: false,\n inputSchema: undefined,\n validateInputContext: false,\n outputSchema: undefined,\n validateOutputContext: false,\n ...options,\n };\n\n return new DebounceTask(\n name,\n func,\n description,\n debounceTime,\n options.leading,\n options.trailing,\n options.maxWait,\n options.concurrency,\n options.timeout,\n options.register,\n options.isUnique,\n options.isMeta,\n options.isSubMeta,\n options.isHidden,\n options.inputSchema,\n options.validateInputContext,\n options.outputSchema,\n options.validateOutputContext,\n );\n }\n\n /**\n * Creates a DebouncedMetaTask for meta-layer debouncing.\n * @param name Identifier.\n * @param func Function.\n * @param description Optional.\n * @param debounceTime Delay in ms.\n * @param options Optional task options plus optional debounce config (e.g., leading/trailing).\n * @returns The created DebouncedMetaTask.\n */\n static createDebounceMetaTask(\n name: string,\n func: TaskFunction,\n description?: string,\n debounceTime: number = 1000,\n options: TaskOptions & DebounceOptions = {},\n ): DebounceTask {\n options.isMeta = true;\n return this.createDebounceTask(\n name,\n func,\n description,\n debounceTime,\n options,\n );\n }\n\n /**\n * Creates an EphemeralTask (self-destructs after exec or condition) without default registration.\n * Useful for transients; optionally register if needed.\n * @param name Identifier (may not be unique if not registered).\n * @param func Function.\n * @param description Optional.\n * @param options Optional task options plus optional \"once\" (true) and \"destroyCondition\" (ctx => boolean).\n * @returns The created EphemeralTask.\n * @edge Destruction triggered post-exec via Node/Builder; emits meta-signal for cleanup.\n */\n static createEphemeralTask(\n name: string,\n func: TaskFunction,\n description?: string,\n options: TaskOptions & EphemeralTaskOptions = {},\n ): EphemeralTask {\n this.bootstrap();\n this.validateName(name);\n\n options = {\n concurrency: 0,\n timeout: 0,\n register: true,\n isUnique: false,\n isMeta: false,\n isSubMeta: false,\n isHidden: false,\n once: true,\n destroyCondition: () => true,\n getTagCallback: undefined,\n inputSchema: undefined,\n validateInputContext: false,\n outputSchema: undefined,\n validateOutputContext: false,\n retryCount: 0,\n retryDelay: 0,\n retryDelayMax: 0,\n retryDelayFactor: 1,\n ...options,\n };\n\n return new EphemeralTask(\n name,\n func,\n description,\n options.once,\n options.destroyCondition,\n options.concurrency,\n options.timeout,\n options.register,\n options.isUnique,\n options.isMeta,\n options.isSubMeta,\n options.isHidden,\n options.getTagCallback,\n options.inputSchema,\n options.validateInputContext,\n options.outputSchema,\n options.validateOutputContext,\n options.retryCount,\n options.retryDelay,\n options.retryDelayMax,\n options.retryDelayFactor,\n );\n }\n\n /**\n * Creates an EphemeralMetaTask for meta-layer transients.\n * @param name Identifier.\n * @param func Function.\n * @param description Optional.\n * @param options Optional task options plus optional \"once\" (true) and \"destroyCondition\" (ctx => boolean).\n * @returns The created EphemeralMetaTask.\n */\n static createEphemeralMetaTask(\n name: string,\n func: TaskFunction,\n description?: string,\n options: TaskOptions & EphemeralTaskOptions = {},\n ): EphemeralTask {\n options.isMeta = true;\n return this.createEphemeralTask(name, func, description, options);\n }\n\n /**\n * Creates a GraphRoutine (named entry to starting tasks) and registers it.\n * @param name Unique identifier.\n * @param tasks Starting tasks (can be empty, but warns as no-op).\n * @param description Optional.\n * @returns The created GraphRoutine.\n * @edge If tasks empty, routine is valid but inert.\n */\n static createRoutine(\n name: string,\n tasks: Task[],\n description: string = \"\",\n ): GraphRoutine {\n this.bootstrap();\n this.validateName(name);\n if (tasks.length === 0) {\n console.warn(`Routine '${name}' created with no starting tasks (no-op).`);\n }\n return new GraphRoutine(name, tasks, description);\n }\n\n /**\n * Creates a MetaRoutine for meta-layer entry points.\n * @param name Identifier.\n * @param tasks Starting tasks.\n * @param description Optional.\n * @returns The created MetaRoutine.\n */\n static createMetaRoutine(\n name: string,\n tasks: Task[],\n description: string = \"\",\n ): GraphRoutine {\n this.bootstrap();\n this.validateName(name);\n if (tasks.length === 0) {\n console.warn(`Routine '${name}' created with no starting tasks (no-op).`);\n }\n return new GraphRoutine(name, tasks, description, true);\n }\n\n static reset() {\n this.broker?.reset();\n this.registry?.reset();\n this.isBootstrapped = false;\n }\n}\n","import Task from \"./Task\";\n\nexport default class SignalTask extends Task {\n constructor(signal: string, description: string = \"\") {\n super(signal, () => true, description);\n\n this.signalsToEmitAfter.add(signal);\n }\n}\n"],"mappings":"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","names":["import_uuid","task","uuid","import_uuid","import_uuid","uuid","uuid","result","outputValidation","uuid"]}
|