@cadenza.io/core 1.6.0 → 1.7.0

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.d.mts CHANGED
@@ -605,6 +605,9 @@ declare class SignalBroker {
605
605
  * @returns The broker instance.
606
606
  */
607
607
  static get instance(): SignalBroker;
608
+ private debug;
609
+ setDebug(value: boolean): void;
610
+ protected sanitizeSignalName(signalName: string): void;
608
611
  protected runner: GraphRunner | undefined;
609
612
  protected metaRunner: GraphRunner | undefined;
610
613
  getSignalsTask: Task | undefined;
@@ -652,7 +655,6 @@ declare class SignalBroker {
652
655
  * @returns Array of signals.
653
656
  */
654
657
  listObservedSignals(): string[];
655
- private getRunner;
656
658
  reset(): void;
657
659
  }
658
660
 
@@ -733,17 +735,20 @@ interface TaskOptions {
733
735
  outputSchema?: SchemaDefinition;
734
736
  validateOutputContext?: boolean;
735
737
  }
738
+ type CadenzaMode = "dev" | "debug" | "production";
736
739
  declare class Cadenza {
737
740
  static broker: SignalBroker;
738
741
  static runner: GraphRunner;
739
742
  static metaRunner: GraphRunner;
740
743
  static registry: GraphRegistry;
741
744
  protected static isBootstrapped: boolean;
745
+ protected static mode: CadenzaMode;
742
746
  protected static bootstrap(): void;
743
747
  static get runStrategy(): {
744
748
  PARALLEL: GraphAsyncRun;
745
749
  SEQUENTIAL: GraphStandardRun;
746
750
  };
751
+ static setMode(mode: CadenzaMode): void;
747
752
  /**
748
753
  * Validates a name for uniqueness and non-emptiness.
749
754
  * @param name The name to validate.
package/dist/index.d.ts CHANGED
@@ -605,6 +605,9 @@ declare class SignalBroker {
605
605
  * @returns The broker instance.
606
606
  */
607
607
  static get instance(): SignalBroker;
608
+ private debug;
609
+ setDebug(value: boolean): void;
610
+ protected sanitizeSignalName(signalName: string): void;
608
611
  protected runner: GraphRunner | undefined;
609
612
  protected metaRunner: GraphRunner | undefined;
610
613
  getSignalsTask: Task | undefined;
@@ -652,7 +655,6 @@ declare class SignalBroker {
652
655
  * @returns Array of signals.
653
656
  */
654
657
  listObservedSignals(): string[];
655
- private getRunner;
656
658
  reset(): void;
657
659
  }
658
660
 
@@ -733,17 +735,20 @@ interface TaskOptions {
733
735
  outputSchema?: SchemaDefinition;
734
736
  validateOutputContext?: boolean;
735
737
  }
738
+ type CadenzaMode = "dev" | "debug" | "production";
736
739
  declare class Cadenza {
737
740
  static broker: SignalBroker;
738
741
  static runner: GraphRunner;
739
742
  static metaRunner: GraphRunner;
740
743
  static registry: GraphRegistry;
741
744
  protected static isBootstrapped: boolean;
745
+ protected static mode: CadenzaMode;
742
746
  protected static bootstrap(): void;
743
747
  static get runStrategy(): {
744
748
  PARALLEL: GraphAsyncRun;
745
749
  SEQUENTIAL: GraphStandardRun;
746
750
  };
751
+ static setMode(mode: CadenzaMode): void;
747
752
  /**
748
753
  * Validates a name for uniqueness and non-emptiness.
749
754
  * @param name The name to validate.
package/dist/index.js CHANGED
@@ -38,9 +38,10 @@ module.exports = __toCommonJS(index_exports);
38
38
  var SignalBroker = class _SignalBroker {
39
39
  // execId -> emitted signals
40
40
  constructor() {
41
+ this.debug = false;
41
42
  this.signalObservers = /* @__PURE__ */ new Map();
42
43
  this.emitStacks = /* @__PURE__ */ new Map();
43
- this.addSignal("meta.signal.added");
44
+ this.addSignal("meta.signal_broker.added");
44
45
  }
45
46
  /**
46
47
  * Singleton instance for signal management.
@@ -52,6 +53,28 @@ var SignalBroker = class _SignalBroker {
52
53
  }
53
54
  return this.instance_;
54
55
  }
56
+ setDebug(value) {
57
+ this.debug = value;
58
+ }
59
+ sanitizeSignalName(signalName) {
60
+ if (signalName.length > 100) {
61
+ throw new Error("Signal name must be less than 100 characters");
62
+ }
63
+ if (signalName.includes(" ")) {
64
+ throw new Error("Signal name must not contain spaces");
65
+ }
66
+ if (signalName.includes("/")) {
67
+ throw new Error("Signal name must not contain slashes");
68
+ }
69
+ if (signalName.includes("\\")) {
70
+ throw new Error("Signal name must not contain backslashes");
71
+ }
72
+ if (/[A-Z]/.test(signalName.split(".").slice(1).join("."))) {
73
+ throw new Error(
74
+ "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."
75
+ );
76
+ }
77
+ }
55
78
  /**
56
79
  * Initializes with runners.
57
80
  * @param runner Standard runner for user signals.
@@ -117,7 +140,7 @@ var SignalBroker = class _SignalBroker {
117
140
  * @throws Error on detected loop.
118
141
  */
119
142
  emit(signal, context = {}) {
120
- const execId = context.__graphExecId || "global";
143
+ const execId = context.__routineExecId || "global";
121
144
  if (!this.emitStacks.has(execId)) this.emitStacks.set(execId, /* @__PURE__ */ new Map());
122
145
  const stack = this.emitStacks.get(execId);
123
146
  stack.set(signal, context);
@@ -140,20 +163,26 @@ var SignalBroker = class _SignalBroker {
140
163
  }
141
164
  executeListener(signal, context) {
142
165
  const obs = this.signalObservers.get(signal);
143
- const runner = this.getRunner(signal);
166
+ const runner = signal.startsWith("meta") ? this.metaRunner : this.runner;
144
167
  if (obs && obs.tasks.size && runner) {
145
168
  obs.fn(runner, Array.from(obs.tasks), context);
169
+ if (this.debug) {
170
+ console.log(
171
+ `Emitted signal ${signal} with context ${JSON.stringify(context)}`
172
+ );
173
+ }
146
174
  return true;
147
175
  }
148
176
  return false;
149
177
  }
150
178
  addSignal(signal) {
151
179
  if (!this.signalObservers.has(signal)) {
180
+ this.sanitizeSignalName(signal);
152
181
  this.signalObservers.set(signal, {
153
182
  fn: (runner, tasks, context) => runner.run(tasks, context),
154
183
  tasks: /* @__PURE__ */ new Set()
155
184
  });
156
- this.emit("meta.signal.added", { __signal: signal });
185
+ this.emit("meta.signal_broker.added", { __signalName: signal });
157
186
  }
158
187
  }
159
188
  /**
@@ -163,9 +192,6 @@ var SignalBroker = class _SignalBroker {
163
192
  listObservedSignals() {
164
193
  return Array.from(this.signalObservers.keys());
165
194
  }
166
- getRunner(signal) {
167
- return signal.startsWith("meta") ? this.metaRunner : this.runner;
168
- }
169
195
  reset() {
170
196
  this.emitStacks.clear();
171
197
  this.signalObservers.clear();
@@ -1851,6 +1877,7 @@ var GraphRunner = class extends SignalEmitter {
1851
1877
  });
1852
1878
  const ctx = new GraphContext(context || {});
1853
1879
  const routineExecId = (_a = context.__routineExecId) != null ? _a : (0, import_uuid6.v4)();
1880
+ context.__routineExecId = routineExecId;
1854
1881
  const data = {
1855
1882
  __routineExecId: routineExecId,
1856
1883
  __routineName: routineName,
@@ -1865,6 +1892,11 @@ var GraphRunner = class extends SignalEmitter {
1865
1892
  __scheduled: Date.now()
1866
1893
  };
1867
1894
  this.emit("meta.runner.added_tasks", data);
1895
+ if (this.debug) {
1896
+ console.log(
1897
+ `Running routine ${routineName} with context ${JSON.stringify(ctx.getContext())}`
1898
+ );
1899
+ }
1868
1900
  allTasks.forEach(
1869
1901
  (task) => this.currentRun.addNode(new GraphNode(task, ctx, routineExecId))
1870
1902
  );
@@ -2578,6 +2610,12 @@ var Cadenza = class {
2578
2610
  SEQUENTIAL: new GraphStandardRun()
2579
2611
  };
2580
2612
  }
2613
+ static setMode(mode) {
2614
+ this.mode = mode;
2615
+ if (mode === "debug" || mode === "dev") {
2616
+ this.broker.setDebug(true);
2617
+ }
2618
+ }
2581
2619
  /**
2582
2620
  * Validates a name for uniqueness and non-emptiness.
2583
2621
  * @param name The name to validate.
@@ -2941,6 +2979,7 @@ var Cadenza = class {
2941
2979
  }
2942
2980
  };
2943
2981
  Cadenza.isBootstrapped = false;
2982
+ Cadenza.mode = "production";
2944
2983
 
2945
2984
  // src/graph/definition/SignalTask.ts
2946
2985
  var SignalTask = class extends Task {