@cadenza.io/core 3.13.3 → 3.14.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 +3 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.js +237 -5
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +237 -5
- package/dist/index.mjs.map +1 -1
- package/package.json +1 -1
package/dist/index.d.mts
CHANGED
|
@@ -1431,6 +1431,7 @@ declare class SignalBroker {
|
|
|
1431
1431
|
validateSignalName(signalName: string): void;
|
|
1432
1432
|
runner: GraphRunner | undefined;
|
|
1433
1433
|
metaRunner: GraphRunner | undefined;
|
|
1434
|
+
debouncedEmitters: Map<string, any>;
|
|
1434
1435
|
clearSignalsTask: Task | undefined;
|
|
1435
1436
|
getSignalsTask: Task | undefined;
|
|
1436
1437
|
registerSignalTask: Task | undefined;
|
|
@@ -1488,6 +1489,7 @@ declare class SignalBroker {
|
|
|
1488
1489
|
* @returns a handle with `clear()` to stop the loop.
|
|
1489
1490
|
*/
|
|
1490
1491
|
throttle(signal: string, context: AnyObject, intervalMs?: number, leading?: boolean, startDateTime?: Date): ThrottleHandle;
|
|
1492
|
+
debounce(signal: string, context: any, delayMs?: number): void;
|
|
1491
1493
|
/**
|
|
1492
1494
|
* Emits a signal with the specified context, triggering any associated handlers for that signal.
|
|
1493
1495
|
*
|
|
@@ -1804,6 +1806,7 @@ declare class Cadenza {
|
|
|
1804
1806
|
static emit(event: string, data?: AnyObject): void;
|
|
1805
1807
|
static schedule(taskName: string, context: AnyObject, timeoutMs: number, exactDateTime?: Date): void;
|
|
1806
1808
|
static throttle(taskName: string, context: AnyObject, intervalMs: number, leading?: boolean, startDateTime?: Date): void;
|
|
1809
|
+
static debounce(signalName: string, context: any, delayMs: number): void;
|
|
1807
1810
|
static get(taskName: string): Task | undefined;
|
|
1808
1811
|
/**
|
|
1809
1812
|
* Creates and registers a new task with the specified parameters and options.
|
package/dist/index.d.ts
CHANGED
|
@@ -1431,6 +1431,7 @@ declare class SignalBroker {
|
|
|
1431
1431
|
validateSignalName(signalName: string): void;
|
|
1432
1432
|
runner: GraphRunner | undefined;
|
|
1433
1433
|
metaRunner: GraphRunner | undefined;
|
|
1434
|
+
debouncedEmitters: Map<string, any>;
|
|
1434
1435
|
clearSignalsTask: Task | undefined;
|
|
1435
1436
|
getSignalsTask: Task | undefined;
|
|
1436
1437
|
registerSignalTask: Task | undefined;
|
|
@@ -1488,6 +1489,7 @@ declare class SignalBroker {
|
|
|
1488
1489
|
* @returns a handle with `clear()` to stop the loop.
|
|
1489
1490
|
*/
|
|
1490
1491
|
throttle(signal: string, context: AnyObject, intervalMs?: number, leading?: boolean, startDateTime?: Date): ThrottleHandle;
|
|
1492
|
+
debounce(signal: string, context: any, delayMs?: number): void;
|
|
1491
1493
|
/**
|
|
1492
1494
|
* Emits a signal with the specified context, triggering any associated handlers for that signal.
|
|
1493
1495
|
*
|
|
@@ -1804,6 +1806,7 @@ declare class Cadenza {
|
|
|
1804
1806
|
static emit(event: string, data?: AnyObject): void;
|
|
1805
1807
|
static schedule(taskName: string, context: AnyObject, timeoutMs: number, exactDateTime?: Date): void;
|
|
1806
1808
|
static throttle(taskName: string, context: AnyObject, intervalMs: number, leading?: boolean, startDateTime?: Date): void;
|
|
1809
|
+
static debounce(signalName: string, context: any, delayMs: number): void;
|
|
1807
1810
|
static get(taskName: string): Task | undefined;
|
|
1808
1811
|
/**
|
|
1809
1812
|
* Creates and registers a new task with the specified parameters and options.
|
package/dist/index.js
CHANGED
|
@@ -79,11 +79,227 @@ function formatTimestamp(timestamp) {
|
|
|
79
79
|
|
|
80
80
|
// src/engine/SignalBroker.ts
|
|
81
81
|
var import_uuid = require("uuid");
|
|
82
|
+
|
|
83
|
+
// node_modules/lodash-es/isObject.js
|
|
84
|
+
function isObject(value) {
|
|
85
|
+
var type = typeof value;
|
|
86
|
+
return value != null && (type == "object" || type == "function");
|
|
87
|
+
}
|
|
88
|
+
var isObject_default = isObject;
|
|
89
|
+
|
|
90
|
+
// node_modules/lodash-es/_freeGlobal.js
|
|
91
|
+
var freeGlobal = typeof global == "object" && global && global.Object === Object && global;
|
|
92
|
+
var freeGlobal_default = freeGlobal;
|
|
93
|
+
|
|
94
|
+
// node_modules/lodash-es/_root.js
|
|
95
|
+
var freeSelf = typeof self == "object" && self && self.Object === Object && self;
|
|
96
|
+
var root = freeGlobal_default || freeSelf || Function("return this")();
|
|
97
|
+
var root_default = root;
|
|
98
|
+
|
|
99
|
+
// node_modules/lodash-es/now.js
|
|
100
|
+
var now = function() {
|
|
101
|
+
return root_default.Date.now();
|
|
102
|
+
};
|
|
103
|
+
var now_default = now;
|
|
104
|
+
|
|
105
|
+
// node_modules/lodash-es/_trimmedEndIndex.js
|
|
106
|
+
var reWhitespace = /\s/;
|
|
107
|
+
function trimmedEndIndex(string) {
|
|
108
|
+
var index = string.length;
|
|
109
|
+
while (index-- && reWhitespace.test(string.charAt(index))) {
|
|
110
|
+
}
|
|
111
|
+
return index;
|
|
112
|
+
}
|
|
113
|
+
var trimmedEndIndex_default = trimmedEndIndex;
|
|
114
|
+
|
|
115
|
+
// node_modules/lodash-es/_baseTrim.js
|
|
116
|
+
var reTrimStart = /^\s+/;
|
|
117
|
+
function baseTrim(string) {
|
|
118
|
+
return string ? string.slice(0, trimmedEndIndex_default(string) + 1).replace(reTrimStart, "") : string;
|
|
119
|
+
}
|
|
120
|
+
var baseTrim_default = baseTrim;
|
|
121
|
+
|
|
122
|
+
// node_modules/lodash-es/_Symbol.js
|
|
123
|
+
var Symbol2 = root_default.Symbol;
|
|
124
|
+
var Symbol_default = Symbol2;
|
|
125
|
+
|
|
126
|
+
// node_modules/lodash-es/_getRawTag.js
|
|
127
|
+
var objectProto = Object.prototype;
|
|
128
|
+
var hasOwnProperty = objectProto.hasOwnProperty;
|
|
129
|
+
var nativeObjectToString = objectProto.toString;
|
|
130
|
+
var symToStringTag = Symbol_default ? Symbol_default.toStringTag : void 0;
|
|
131
|
+
function getRawTag(value) {
|
|
132
|
+
var isOwn = hasOwnProperty.call(value, symToStringTag), tag = value[symToStringTag];
|
|
133
|
+
try {
|
|
134
|
+
value[symToStringTag] = void 0;
|
|
135
|
+
var unmasked = true;
|
|
136
|
+
} catch (e) {
|
|
137
|
+
}
|
|
138
|
+
var result = nativeObjectToString.call(value);
|
|
139
|
+
if (unmasked) {
|
|
140
|
+
if (isOwn) {
|
|
141
|
+
value[symToStringTag] = tag;
|
|
142
|
+
} else {
|
|
143
|
+
delete value[symToStringTag];
|
|
144
|
+
}
|
|
145
|
+
}
|
|
146
|
+
return result;
|
|
147
|
+
}
|
|
148
|
+
var getRawTag_default = getRawTag;
|
|
149
|
+
|
|
150
|
+
// node_modules/lodash-es/_objectToString.js
|
|
151
|
+
var objectProto2 = Object.prototype;
|
|
152
|
+
var nativeObjectToString2 = objectProto2.toString;
|
|
153
|
+
function objectToString(value) {
|
|
154
|
+
return nativeObjectToString2.call(value);
|
|
155
|
+
}
|
|
156
|
+
var objectToString_default = objectToString;
|
|
157
|
+
|
|
158
|
+
// node_modules/lodash-es/_baseGetTag.js
|
|
159
|
+
var nullTag = "[object Null]";
|
|
160
|
+
var undefinedTag = "[object Undefined]";
|
|
161
|
+
var symToStringTag2 = Symbol_default ? Symbol_default.toStringTag : void 0;
|
|
162
|
+
function baseGetTag(value) {
|
|
163
|
+
if (value == null) {
|
|
164
|
+
return value === void 0 ? undefinedTag : nullTag;
|
|
165
|
+
}
|
|
166
|
+
return symToStringTag2 && symToStringTag2 in Object(value) ? getRawTag_default(value) : objectToString_default(value);
|
|
167
|
+
}
|
|
168
|
+
var baseGetTag_default = baseGetTag;
|
|
169
|
+
|
|
170
|
+
// node_modules/lodash-es/isObjectLike.js
|
|
171
|
+
function isObjectLike(value) {
|
|
172
|
+
return value != null && typeof value == "object";
|
|
173
|
+
}
|
|
174
|
+
var isObjectLike_default = isObjectLike;
|
|
175
|
+
|
|
176
|
+
// node_modules/lodash-es/isSymbol.js
|
|
177
|
+
var symbolTag = "[object Symbol]";
|
|
178
|
+
function isSymbol(value) {
|
|
179
|
+
return typeof value == "symbol" || isObjectLike_default(value) && baseGetTag_default(value) == symbolTag;
|
|
180
|
+
}
|
|
181
|
+
var isSymbol_default = isSymbol;
|
|
182
|
+
|
|
183
|
+
// node_modules/lodash-es/toNumber.js
|
|
184
|
+
var NAN = 0 / 0;
|
|
185
|
+
var reIsBadHex = /^[-+]0x[0-9a-f]+$/i;
|
|
186
|
+
var reIsBinary = /^0b[01]+$/i;
|
|
187
|
+
var reIsOctal = /^0o[0-7]+$/i;
|
|
188
|
+
var freeParseInt = parseInt;
|
|
189
|
+
function toNumber(value) {
|
|
190
|
+
if (typeof value == "number") {
|
|
191
|
+
return value;
|
|
192
|
+
}
|
|
193
|
+
if (isSymbol_default(value)) {
|
|
194
|
+
return NAN;
|
|
195
|
+
}
|
|
196
|
+
if (isObject_default(value)) {
|
|
197
|
+
var other = typeof value.valueOf == "function" ? value.valueOf() : value;
|
|
198
|
+
value = isObject_default(other) ? other + "" : other;
|
|
199
|
+
}
|
|
200
|
+
if (typeof value != "string") {
|
|
201
|
+
return value === 0 ? value : +value;
|
|
202
|
+
}
|
|
203
|
+
value = baseTrim_default(value);
|
|
204
|
+
var isBinary = reIsBinary.test(value);
|
|
205
|
+
return isBinary || reIsOctal.test(value) ? freeParseInt(value.slice(2), isBinary ? 2 : 8) : reIsBadHex.test(value) ? NAN : +value;
|
|
206
|
+
}
|
|
207
|
+
var toNumber_default = toNumber;
|
|
208
|
+
|
|
209
|
+
// node_modules/lodash-es/debounce.js
|
|
210
|
+
var FUNC_ERROR_TEXT = "Expected a function";
|
|
211
|
+
var nativeMax = Math.max;
|
|
212
|
+
var nativeMin = Math.min;
|
|
213
|
+
function debounce(func, wait, options) {
|
|
214
|
+
var lastArgs, lastThis, maxWait, result, timerId, lastCallTime, lastInvokeTime = 0, leading = false, maxing = false, trailing = true;
|
|
215
|
+
if (typeof func != "function") {
|
|
216
|
+
throw new TypeError(FUNC_ERROR_TEXT);
|
|
217
|
+
}
|
|
218
|
+
wait = toNumber_default(wait) || 0;
|
|
219
|
+
if (isObject_default(options)) {
|
|
220
|
+
leading = !!options.leading;
|
|
221
|
+
maxing = "maxWait" in options;
|
|
222
|
+
maxWait = maxing ? nativeMax(toNumber_default(options.maxWait) || 0, wait) : maxWait;
|
|
223
|
+
trailing = "trailing" in options ? !!options.trailing : trailing;
|
|
224
|
+
}
|
|
225
|
+
function invokeFunc(time) {
|
|
226
|
+
var args = lastArgs, thisArg = lastThis;
|
|
227
|
+
lastArgs = lastThis = void 0;
|
|
228
|
+
lastInvokeTime = time;
|
|
229
|
+
result = func.apply(thisArg, args);
|
|
230
|
+
return result;
|
|
231
|
+
}
|
|
232
|
+
function leadingEdge(time) {
|
|
233
|
+
lastInvokeTime = time;
|
|
234
|
+
timerId = setTimeout(timerExpired, wait);
|
|
235
|
+
return leading ? invokeFunc(time) : result;
|
|
236
|
+
}
|
|
237
|
+
function remainingWait(time) {
|
|
238
|
+
var timeSinceLastCall = time - lastCallTime, timeSinceLastInvoke = time - lastInvokeTime, timeWaiting = wait - timeSinceLastCall;
|
|
239
|
+
return maxing ? nativeMin(timeWaiting, maxWait - timeSinceLastInvoke) : timeWaiting;
|
|
240
|
+
}
|
|
241
|
+
function shouldInvoke(time) {
|
|
242
|
+
var timeSinceLastCall = time - lastCallTime, timeSinceLastInvoke = time - lastInvokeTime;
|
|
243
|
+
return lastCallTime === void 0 || timeSinceLastCall >= wait || timeSinceLastCall < 0 || maxing && timeSinceLastInvoke >= maxWait;
|
|
244
|
+
}
|
|
245
|
+
function timerExpired() {
|
|
246
|
+
var time = now_default();
|
|
247
|
+
if (shouldInvoke(time)) {
|
|
248
|
+
return trailingEdge(time);
|
|
249
|
+
}
|
|
250
|
+
timerId = setTimeout(timerExpired, remainingWait(time));
|
|
251
|
+
}
|
|
252
|
+
function trailingEdge(time) {
|
|
253
|
+
timerId = void 0;
|
|
254
|
+
if (trailing && lastArgs) {
|
|
255
|
+
return invokeFunc(time);
|
|
256
|
+
}
|
|
257
|
+
lastArgs = lastThis = void 0;
|
|
258
|
+
return result;
|
|
259
|
+
}
|
|
260
|
+
function cancel() {
|
|
261
|
+
if (timerId !== void 0) {
|
|
262
|
+
clearTimeout(timerId);
|
|
263
|
+
}
|
|
264
|
+
lastInvokeTime = 0;
|
|
265
|
+
lastArgs = lastCallTime = lastThis = timerId = void 0;
|
|
266
|
+
}
|
|
267
|
+
function flush() {
|
|
268
|
+
return timerId === void 0 ? result : trailingEdge(now_default());
|
|
269
|
+
}
|
|
270
|
+
function debounced() {
|
|
271
|
+
var time = now_default(), isInvoking = shouldInvoke(time);
|
|
272
|
+
lastArgs = arguments;
|
|
273
|
+
lastThis = this;
|
|
274
|
+
lastCallTime = time;
|
|
275
|
+
if (isInvoking) {
|
|
276
|
+
if (timerId === void 0) {
|
|
277
|
+
return leadingEdge(lastCallTime);
|
|
278
|
+
}
|
|
279
|
+
if (maxing) {
|
|
280
|
+
clearTimeout(timerId);
|
|
281
|
+
timerId = setTimeout(timerExpired, wait);
|
|
282
|
+
return invokeFunc(lastCallTime);
|
|
283
|
+
}
|
|
284
|
+
}
|
|
285
|
+
if (timerId === void 0) {
|
|
286
|
+
timerId = setTimeout(timerExpired, wait);
|
|
287
|
+
}
|
|
288
|
+
return result;
|
|
289
|
+
}
|
|
290
|
+
debounced.cancel = cancel;
|
|
291
|
+
debounced.flush = flush;
|
|
292
|
+
return debounced;
|
|
293
|
+
}
|
|
294
|
+
var debounce_default = debounce;
|
|
295
|
+
|
|
296
|
+
// src/engine/SignalBroker.ts
|
|
82
297
|
var SignalBroker = class _SignalBroker {
|
|
83
298
|
// execId -> emitted signals
|
|
84
299
|
constructor() {
|
|
85
300
|
this.debug = false;
|
|
86
301
|
this.verbose = false;
|
|
302
|
+
this.debouncedEmitters = /* @__PURE__ */ new Map();
|
|
87
303
|
// TODO: Signals should be a class with a the observers, registered flag and other data.
|
|
88
304
|
this.signalObservers = /* @__PURE__ */ new Map();
|
|
89
305
|
this.emitStacks = /* @__PURE__ */ new Map();
|
|
@@ -247,20 +463,20 @@ var SignalBroker = class _SignalBroker {
|
|
|
247
463
|
}
|
|
248
464
|
const emit = () => this.emit(signal, context);
|
|
249
465
|
if (leading) {
|
|
250
|
-
const
|
|
466
|
+
const now2 = Date.now();
|
|
251
467
|
const start = startDateTime?.getTime();
|
|
252
|
-
if (!start || start <=
|
|
468
|
+
if (!start || start <= now2) {
|
|
253
469
|
emit();
|
|
254
470
|
}
|
|
255
471
|
}
|
|
256
472
|
let firstDelay = intervalMs;
|
|
257
473
|
if (startDateTime) {
|
|
258
474
|
let slot = startDateTime.getTime();
|
|
259
|
-
const
|
|
260
|
-
while (slot <
|
|
475
|
+
const now2 = Date.now();
|
|
476
|
+
while (slot < now2) {
|
|
261
477
|
slot += intervalMs;
|
|
262
478
|
}
|
|
263
|
-
firstDelay = slot -
|
|
479
|
+
firstDelay = slot - now2;
|
|
264
480
|
}
|
|
265
481
|
let timer = null;
|
|
266
482
|
let stopped = false;
|
|
@@ -277,6 +493,19 @@ var SignalBroker = class _SignalBroker {
|
|
|
277
493
|
}
|
|
278
494
|
};
|
|
279
495
|
}
|
|
496
|
+
debounce(signal, context, delayMs = 500) {
|
|
497
|
+
let debouncedEmitter = this.debouncedEmitters.get(signal);
|
|
498
|
+
if (!debouncedEmitter) {
|
|
499
|
+
this.debouncedEmitters.set(
|
|
500
|
+
signal,
|
|
501
|
+
debounce_default((ctx) => {
|
|
502
|
+
this.emit(signal, ctx);
|
|
503
|
+
}, delayMs)
|
|
504
|
+
);
|
|
505
|
+
debouncedEmitter = this.debouncedEmitters.get(signal);
|
|
506
|
+
}
|
|
507
|
+
debouncedEmitter(context);
|
|
508
|
+
}
|
|
280
509
|
/**
|
|
281
510
|
* Emits a signal with the specified context, triggering any associated handlers for that signal.
|
|
282
511
|
*
|
|
@@ -4325,6 +4554,9 @@ var Cadenza = class {
|
|
|
4325
4554
|
startDateTime
|
|
4326
4555
|
);
|
|
4327
4556
|
}
|
|
4557
|
+
static debounce(signalName, context, delayMs) {
|
|
4558
|
+
this.broker?.debounce(signalName, context, delayMs);
|
|
4559
|
+
}
|
|
4328
4560
|
static get(taskName) {
|
|
4329
4561
|
return this.registry?.tasks.get(taskName);
|
|
4330
4562
|
}
|