@alwatr/signal 0.26.1 → 0.28.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/CHANGELOG.md CHANGED
@@ -3,7 +3,11 @@
3
3
  All notable changes to this project will be documented in this file.
4
4
  See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
5
5
 
6
- ## [0.26.1](https://github.com/AliMD/alwatr/compare/v0.26.0...v0.26.1) (2022-12-25)
6
+ # [0.28.0](https://github.com/AliMD/alwatr/compare/v0.27.0...v0.28.0) (2023-01-20)
7
+
8
+ **Note:** Version bump only for package @alwatr/signal
9
+
10
+ # [0.27.0](https://github.com/AliMD/alwatr/compare/v0.26.0...v0.27.0) (2022-12-29)
7
11
 
8
12
  **Note:** Version bump only for package @alwatr/signal
9
13
 
package/core.d.ts.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"core.d.ts","sourceRoot":"","sources":["src/core.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EACV,eAAe,EACf,gBAAgB,EAChB,cAAc,EACd,eAAe,EACf,YAAY,EACZ,cAAc,EACd,qBAAqB,EAEtB,MAAM,WAAW,CAAC;AAEnB,eAAO,MAAM,MAAM,uCAAgC,CAAC;AAiBpD;;;;;;;;;GASG;AACH,wBAAgB,gBAAgB,CAAC,UAAU,SAAS,MAAM,aAAa,EACnE,UAAU,EAAE,UAAU,GACvB,YAAY,CAAC,UAAU,CAAC,CAU1B;AAoCD;;;;;;;;;GASG;AACH,wBAAgB,kBAAkB,CAAC,UAAU,SAAS,MAAM,aAAa,EACrE,MAAM,EAAE,YAAY,CAAC,UAAU,CAAC,EAChC,gBAAgB,EAAE,gBAAgB,CAAC,UAAU,CAAC,EAC9C,OAAO,GAAE,eAAoB,GAC9B,cAAc,CAAC,UAAU,CAAC,CA6D5B;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,qBAAqB,CAAC,UAAU,SAAS,MAAM,aAAa,EACxE,MAAM,EAAE,YAAY,CAAC,UAAU,CAAC,EAChC,UAAU,EAAE,MAAM,GACnB,IAAI,CAMN;AAED;;;;;;GAMG;AACH,wBAAgB,eAAe,CAAC,UAAU,SAAS,MAAM,aAAa,EAClE,MAAM,EAAE,YAAY,CAAC,UAAU,CAAC,EAChC,KAAK,EAAE,aAAa,CAAC,UAAU,CAAC,EAChC,OAAO,GAAE,eAAoB,GAC9B,IAAI,CAsBN;AAED;;;;;;;;;;;;;;;;;;GAkBG;AACH,wBAAgB,kBAAkB,CAAC,UAAU,SAAS,MAAM,aAAa,EACrE,MAAM,EAAE,YAAY,CAAC,UAAU,CAAC,EAChC,aAAa,EAAE,YAAY,CAAC,UAAU,CAAC,EACvC,cAAc,EAAE,cAAc,CAAC,UAAU,CAAC,EAC1C,OAAO,GAAE,qBAA0B,GACpC,cAAc,CAAC,UAAU,CAAC,CA6B5B"}
1
+ {"version":3,"file":"core.d.ts","sourceRoot":"","sources":["src/core.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EACV,eAAe,EACf,gBAAgB,EAChB,cAAc,EACd,eAAe,EACf,YAAY,EACZ,cAAc,EACd,qBAAqB,EAEtB,MAAM,WAAW,CAAC;AAEnB,eAAO,MAAM,MAAM,uCAAgC,CAAC;AAiBpD;;;;;;;;;GASG;AACH,wBAAgB,gBAAgB,CAAC,UAAU,SAAS,MAAM,aAAa,EACnE,UAAU,EAAE,UAAU,GACvB,YAAY,CAAC,UAAU,CAAC,CAU1B;AAoCD;;;;;;;;;GASG;AACH,wBAAgB,kBAAkB,CAAC,UAAU,SAAS,MAAM,aAAa,EACrE,MAAM,EAAE,YAAY,CAAC,UAAU,CAAC,EAChC,gBAAgB,EAAE,gBAAgB,CAAC,UAAU,CAAC,EAC9C,OAAO,GAAE,eAAoB,GAC9B,cAAc,CAAC,UAAU,CAAC,CAqD5B;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,qBAAqB,CAAC,UAAU,SAAS,MAAM,aAAa,EACxE,MAAM,EAAE,YAAY,CAAC,UAAU,CAAC,EAChC,UAAU,EAAE,MAAM,GACnB,IAAI,CAMN;AAED;;;;;;GAMG;AACH,wBAAgB,eAAe,CAAC,UAAU,SAAS,MAAM,aAAa,EAClE,MAAM,EAAE,YAAY,CAAC,UAAU,CAAC,EAChC,KAAK,EAAE,aAAa,CAAC,UAAU,CAAC,EAChC,OAAO,GAAE,eAAoB,GAC9B,IAAI,CAsBN;AAED;;;;;;;;;;;;;;;;;;GAkBG;AACH,wBAAgB,kBAAkB,CAAC,UAAU,SAAS,MAAM,aAAa,EACrE,MAAM,EAAE,YAAY,CAAC,UAAU,CAAC,EAChC,aAAa,EAAE,YAAY,CAAC,UAAU,CAAC,EACvC,cAAc,EAAE,cAAc,CAAC,UAAU,CAAC,EAC1C,OAAO,GAAE,qBAA0B,GACpC,cAAc,CAAC,UAAU,CAAC,CA6B5B"}
package/core.js CHANGED
@@ -1,8 +1,8 @@
1
- import { createLogger, alwatrRegisteredList } from '@alwatr/logger';
1
+ import { createLogger, globalAlwatr } from '@alwatr/logger';
2
2
  export const logger = createLogger('alwatr/signal');
3
- alwatrRegisteredList.push({
3
+ globalAlwatr.registeredList.push({
4
4
  name: '@alwatr/signal',
5
- version: '{{ALWATR_VERSION}}',
5
+ version: _ALWATR_VERSION_,
6
6
  });
7
7
  /**
8
8
  * Listener `id`
@@ -91,10 +91,6 @@ export function _addSignalListener(signal, listenerCallback, options = {}) {
91
91
  if (signal.value !== undefined) {
92
92
  // null is a valid value for signal.
93
93
  if (options.receivePrevious === 'Immediate') {
94
- logger.incident('_addSignalListener', 'call_signal_callback', 'run callback with previous signal value', {
95
- signalName: signal.name,
96
- mode: 'Immediate',
97
- });
98
94
  try {
99
95
  listenerCallback(signal.value);
100
96
  }
@@ -109,10 +105,6 @@ export function _addSignalListener(signal, listenerCallback, options = {}) {
109
105
  requestAnimationFrame(() => {
110
106
  if (signal.value !== undefined) {
111
107
  // null is a valid value for signal.
112
- logger.incident('_addSignalListener', 'call_signal_callback', 'run callback with previous signal value', {
113
- signalName: signal.name,
114
- mode: 'Delay',
115
- });
116
108
  listenerCallback(signal.value);
117
109
  }
118
110
  });
package/core.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"core.js","sourceRoot":"","sources":["src/core.ts"],"names":[],"mappings":"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","sourcesContent":["import {createLogger, alwatrRegisteredList} from '@alwatr/logger';\n\nimport type {\n DispatchOptions,\n ListenerCallback,\n ListenerObject,\n ListenerOptions,\n SignalObject,\n SignalProvider,\n SignalProviderOptions,\n SignalStack,\n} from './type.js';\n\nexport const logger = createLogger('alwatr/signal');\n\nalwatrRegisteredList.push({\n name: '@alwatr/signal',\n version: '{{ALWATR_VERSION}}',\n});\n\n/**\n * Listener `id`\n */\nlet _lastListenerId = 0;\n\n/**\n * Signal stack database.\n */\nconst _signalStack: SignalStack = {};\n\n/**\n * Get signal object by name, If not available, it will create a new signal with default options.\n *\n * Example:\n *\n * ```ts\n * const signal = _getSignalObject('content-change');\n * signal.disabled = true;\n * ```\n */\nexport function _getSignalObject<SignalName extends keyof AlwatrSignals>(\n signalName: SignalName,\n): SignalObject<SignalName> {\n if (!_signalStack[signalName]) {\n _signalStack[signalName] = {\n name: signalName,\n disabled: false,\n debounced: false,\n listenerList: [],\n };\n }\n return _signalStack[signalName] as unknown as SignalObject<SignalName>;\n}\n\nfunction __callListeners<SignalName extends keyof AlwatrSignals>(signal: SignalObject<SignalName>): void {\n logger.logMethodArgs('_callListeners', {signalName: signal.name, signalValue: signal.value});\n if (signal.value === undefined) {\n // null is a valid value for signal.\n logger.accident('_callListeners', 'no_signal_value', 'signal must have a value', {\n signalName: signal.name,\n });\n return;\n }\n\n for (const listener of signal.listenerList) {\n if (listener.disabled) continue;\n try {\n const ret = listener.callback(signal.value);\n if (ret instanceof Promise) {\n ret.catch((err) =>\n logger.error('_callListeners', 'call_listener_failed', err, {\n signalName: signal.name,\n }),\n );\n }\n }\n catch (err) {\n logger.error('_callListeners', 'call_listener_failed', err, {\n signalName: signal.name,\n });\n }\n }\n\n signal.listenerList\n .filter((listener) => !listener.disabled && listener.once)\n .forEach((listener) => _removeSignalListener(signal, listener.id));\n}\n\n/**\n * Adds a new listener to the signal.\n *\n * Example:\n *\n * ```ts\n * const signal = _getSignalObject('content-change')\n * const listener = _addSignalListener(signal, (content) => console.log(content));\n * ```\n */\nexport function _addSignalListener<SignalName extends keyof AlwatrSignals>(\n signal: SignalObject<SignalName>,\n listenerCallback: ListenerCallback<SignalName>,\n options: ListenerOptions = {},\n): ListenerObject<SignalName> {\n options.once ??= false;\n options.disabled ??= false;\n options.receivePrevious ??= true;\n options.priority ??= false;\n\n logger.logMethodArgs('_addSignalListener', {signalName: signal.name, options});\n\n const listener: ListenerObject<SignalName> = {\n id: ++_lastListenerId,\n once: options.once,\n disabled: options.disabled,\n callback: listenerCallback,\n };\n\n let callbackCalled = false;\n\n // Run callback for old dispatch signal\n if (signal.value !== undefined) {\n // null is a valid value for signal.\n if (options.receivePrevious === 'Immediate') {\n logger.incident('_addSignalListener', 'call_signal_callback', 'run callback with previous signal value', {\n signalName: signal.name,\n mode: 'Immediate',\n });\n try {\n listenerCallback(signal.value);\n }\n catch (err) {\n logger.error('_addSignalListener', 'call_signal_callback_failed', err, {\n signalName: signal.name,\n });\n }\n callbackCalled = true;\n }\n else if (options.receivePrevious === true) {\n requestAnimationFrame(() => {\n if (signal.value !== undefined) {\n // null is a valid value for signal.\n logger.incident('_addSignalListener', 'call_signal_callback', 'run callback with previous signal value', {\n signalName: signal.name,\n mode: 'Delay',\n });\n listenerCallback(signal.value);\n }\n });\n callbackCalled = true; // must be outside of requestAnimationFrame.\n }\n }\n\n // if once then must remove listener after fist callback called! then why push it to listenerList?!\n if (!(options.once === true && callbackCalled === true)) {\n if (options.priority === true) {\n signal.listenerList.unshift(listener);\n }\n else {\n signal.listenerList.push(listener);\n }\n }\n\n return listener;\n}\n\n/**\n * Removes a listener from the signal.\n *\n * Example:\n *\n * ```ts\n * const signal = _getSignalObject('content-change')\n * const listener = _addSignalListener(signal, ...);\n * _removeSignalListener(signal, listener);\n * ```\n */\nexport function _removeSignalListener<SignalName extends keyof AlwatrSignals>(\n signal: SignalObject<SignalName>,\n listenerId: number,\n): void {\n logger.logMethodArgs('_removeSignalListener', {signalName: signal.name, listenerId});\n const listenerIndex = signal.listenerList.findIndex((_listener) => _listener.id === listenerId);\n if (listenerIndex !== -1) {\n signal.listenerList.splice(listenerIndex, 1);\n }\n}\n\n/**\n * Dispatch (send) signal to all listeners.\n *\n * @example\n * const signal = _getSignalObject('content-change')\n * _dispatchSignal(signal, content);\n */\nexport function _dispatchSignal<SignalName extends keyof AlwatrSignals>(\n signal: SignalObject<SignalName>,\n value: AlwatrSignals[SignalName],\n options: DispatchOptions = {},\n): void {\n options.debounce ??= true;\n\n logger.logMethodArgs('dispatchSignal', {signalName: signal.name, value, options});\n\n // set value before check signal.debounced for act like throttle (call listeners with last dispatch value).\n signal.value = value;\n\n if (signal.disabled) return; // signal is disabled.\n if (options.debounce === true && signal.debounced === true) return; // last dispatch in progress.\n\n if (options.debounce !== true) {\n // call listeners immediately.\n __callListeners(signal);\n return;\n }\n // else: call listeners in next frame.\n signal.debounced = true;\n requestAnimationFrame(() => {\n __callListeners(signal);\n signal.debounced = false;\n });\n}\n\n/**\n * Defines the provider of the signal that will be called when the signal requested (addRequestSignalListener).\n *\n * Example:\n *\n * ```ts\n * const signal = _getSignalObject('content-change');\n * const requestSignal = _getSignalObject('request-content-change');\n * _setSignalProvider(signal, requestSignal, async (requestParam) => {\n * const content = await fetchNewContent(requestParam);\n * if (content != null) {\n * return content; // dispatchSignal('content-change', content);\n * }\n * else {\n * dispatchSignal('content-not-found');\n * }\n * }\n * ```\n */\nexport function _setSignalProvider<SignalName extends keyof AlwatrSignals>(\n signal: SignalObject<SignalName>,\n requestSignal: SignalObject<SignalName>,\n signalProvider: SignalProvider<SignalName>,\n options: SignalProviderOptions = {},\n): ListenerObject<SignalName> {\n options.debounce ??= true;\n options.receivePrevious ??= true;\n\n logger.logMethodArgs('_setSignalProvider', {signal: signal.name, requestSignal: requestSignal.name, options});\n\n if (requestSignal.listenerList.length > 0) {\n logger.accident(\n '_setSignalProvider',\n 'another_signal_provider_exist',\n 'Another provider exist! It will be removed to fix the problem',\n {\n signalName: signal.name,\n },\n );\n requestSignal.listenerList = [];\n }\n\n const _callback = async (requestParam: AlwatrRequestSignals[SignalName]): Promise<void> => {\n const signalValue = await signalProvider(requestParam);\n if (signalValue !== undefined) {\n // null is a valid value for signal.\n _dispatchSignal(signal, signalValue, {debounce: options.debounce});\n }\n };\n\n return _addSignalListener(requestSignal, _callback as unknown as ListenerCallback<SignalName>, {\n receivePrevious: options.receivePrevious,\n });\n}\n"]}
1
+ {"version":3,"file":"core.js","sourceRoot":"","sources":["src/core.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,YAAY,EAAE,YAAY,EAAC,MAAM,gBAAgB,CAAC;AAa1D,MAAM,CAAC,MAAM,MAAM,GAAG,YAAY,CAAC,eAAe,CAAC,CAAC;AAEpD,YAAY,CAAC,cAAc,CAAC,IAAI,CAAC;IAC/B,IAAI,EAAE,gBAAgB;IACtB,OAAO,EAAE,gBAAgB;CAC1B,CAAC,CAAC;AAEH;;GAEG;AACH,IAAI,eAAe,GAAG,CAAC,CAAC;AAExB;;GAEG;AACH,MAAM,YAAY,GAAgB,EAAE,CAAC;AAErC;;;;;;;;;GASG;AACH,MAAM,UAAU,gBAAgB,CAC5B,UAAsB;IAExB,IAAI,CAAC,YAAY,CAAC,UAAU,CAAC,EAAE;QAC7B,YAAY,CAAC,UAAU,CAAC,GAAG;YACzB,IAAI,EAAE,UAAU;YAChB,QAAQ,EAAE,KAAK;YACf,SAAS,EAAE,KAAK;YAChB,YAAY,EAAE,EAAE;SACjB,CAAC;KACH;IACD,OAAO,YAAY,CAAC,UAAU,CAAwC,CAAC;AACzE,CAAC;AAED,SAAS,eAAe,CAAyC,MAAgC;IAC/F,MAAM,CAAC,aAAa,CAAC,gBAAgB,EAAE,EAAC,UAAU,EAAE,MAAM,CAAC,IAAI,EAAE,WAAW,EAAE,MAAM,CAAC,KAAK,EAAC,CAAC,CAAC;IAC7F,IAAI,MAAM,CAAC,KAAK,KAAK,SAAS,EAAE;QAC9B,oCAAoC;QACpC,MAAM,CAAC,QAAQ,CAAC,gBAAgB,EAAE,iBAAiB,EAAE,0BAA0B,EAAE;YAC/E,UAAU,EAAE,MAAM,CAAC,IAAI;SACxB,CAAC,CAAC;QACH,OAAO;KACR;IAED,KAAK,MAAM,QAAQ,IAAI,MAAM,CAAC,YAAY,EAAE;QAC1C,IAAI,QAAQ,CAAC,QAAQ;YAAE,SAAS;QAChC,IAAI;YACF,MAAM,GAAG,GAAG,QAAQ,CAAC,QAAQ,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;YAC5C,IAAI,GAAG,YAAY,OAAO,EAAE;gBAC1B,GAAG,CAAC,KAAK,CAAC,CAAC,GAAG,EAAE,EAAE,CAChB,MAAM,CAAC,KAAK,CAAC,gBAAgB,EAAE,sBAAsB,EAAE,GAAG,EAAE;oBAC1D,UAAU,EAAE,MAAM,CAAC,IAAI;iBACxB,CAAC,CACH,CAAC;aACH;SACF;QACD,OAAO,GAAG,EAAE;YACV,MAAM,CAAC,KAAK,CAAC,gBAAgB,EAAE,sBAAsB,EAAE,GAAG,EAAE;gBAC1D,UAAU,EAAE,MAAM,CAAC,IAAI;aACxB,CAAC,CAAC;SACJ;KACF;IAED,MAAM,CAAC,YAAY;SACd,MAAM,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC,QAAQ,CAAC,QAAQ,IAAI,QAAQ,CAAC,IAAI,CAAC;SACzD,OAAO,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,qBAAqB,CAAC,MAAM,EAAE,QAAQ,CAAC,EAAE,CAAC,CAAC,CAAC;AACzE,CAAC;AAED;;;;;;;;;GASG;AACH,MAAM,UAAU,kBAAkB,CAC9B,MAAgC,EAChC,gBAA8C,EAC9C,UAA2B,EAAE;;IAE/B,MAAA,OAAO,CAAC,IAAI,oCAAZ,OAAO,CAAC,IAAI,GAAK,KAAK,EAAC;IACvB,MAAA,OAAO,CAAC,QAAQ,oCAAhB,OAAO,CAAC,QAAQ,GAAK,KAAK,EAAC;IAC3B,MAAA,OAAO,CAAC,eAAe,oCAAvB,OAAO,CAAC,eAAe,GAAK,IAAI,EAAC;IACjC,MAAA,OAAO,CAAC,QAAQ,oCAAhB,OAAO,CAAC,QAAQ,GAAK,KAAK,EAAC;IAE3B,MAAM,CAAC,aAAa,CAAC,oBAAoB,EAAE,EAAC,UAAU,EAAE,MAAM,CAAC,IAAI,EAAE,OAAO,EAAC,CAAC,CAAC;IAE/E,MAAM,QAAQ,GAA+B;QAC3C,EAAE,EAAE,EAAE,eAAe;QACrB,IAAI,EAAE,OAAO,CAAC,IAAI;QAClB,QAAQ,EAAE,OAAO,CAAC,QAAQ;QAC1B,QAAQ,EAAE,gBAAgB;KAC3B,CAAC;IAEF,IAAI,cAAc,GAAG,KAAK,CAAC;IAE3B,uCAAuC;IACvC,IAAI,MAAM,CAAC,KAAK,KAAK,SAAS,EAAE;QAC9B,oCAAoC;QACpC,IAAI,OAAO,CAAC,eAAe,KAAK,WAAW,EAAE;YAC3C,IAAI;gBACF,gBAAgB,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;aAChC;YACD,OAAO,GAAG,EAAE;gBACV,MAAM,CAAC,KAAK,CAAC,oBAAoB,EAAE,6BAA6B,EAAE,GAAG,EAAE;oBACrE,UAAU,EAAE,MAAM,CAAC,IAAI;iBACxB,CAAC,CAAC;aACJ;YACD,cAAc,GAAG,IAAI,CAAC;SACvB;aACI,IAAI,OAAO,CAAC,eAAe,KAAK,IAAI,EAAE;YACzC,qBAAqB,CAAC,GAAG,EAAE;gBACzB,IAAI,MAAM,CAAC,KAAK,KAAK,SAAS,EAAE;oBAC9B,oCAAoC;oBACpC,gBAAgB,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;iBAChC;YACH,CAAC,CAAC,CAAC;YACH,cAAc,GAAG,IAAI,CAAC,CAAC,4CAA4C;SACpE;KACF;IAED,mGAAmG;IACnG,IAAI,CAAC,CAAC,OAAO,CAAC,IAAI,KAAK,IAAI,IAAI,cAAc,KAAK,IAAI,CAAC,EAAE;QACvD,IAAI,OAAO,CAAC,QAAQ,KAAK,IAAI,EAAE;YAC7B,MAAM,CAAC,YAAY,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;SACvC;aACI;YACH,MAAM,CAAC,YAAY,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;SACpC;KACF;IAED,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED;;;;;;;;;;GAUG;AACH,MAAM,UAAU,qBAAqB,CACjC,MAAgC,EAChC,UAAkB;IAEpB,MAAM,CAAC,aAAa,CAAC,uBAAuB,EAAE,EAAC,UAAU,EAAE,MAAM,CAAC,IAAI,EAAE,UAAU,EAAC,CAAC,CAAC;IACrF,MAAM,aAAa,GAAG,MAAM,CAAC,YAAY,CAAC,SAAS,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,SAAS,CAAC,EAAE,KAAK,UAAU,CAAC,CAAC;IAChG,IAAI,aAAa,KAAK,CAAC,CAAC,EAAE;QACxB,MAAM,CAAC,YAAY,CAAC,MAAM,CAAC,aAAa,EAAE,CAAC,CAAC,CAAC;KAC9C;AACH,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,eAAe,CAC3B,MAAgC,EAChC,KAAgC,EAChC,UAA2B,EAAE;;IAE/B,MAAA,OAAO,CAAC,QAAQ,oCAAhB,OAAO,CAAC,QAAQ,GAAK,IAAI,EAAC;IAE1B,MAAM,CAAC,aAAa,CAAC,gBAAgB,EAAE,EAAC,UAAU,EAAE,MAAM,CAAC,IAAI,EAAE,KAAK,EAAE,OAAO,EAAC,CAAC,CAAC;IAElF,2GAA2G;IAC3G,MAAM,CAAC,KAAK,GAAG,KAAK,CAAC;IAErB,IAAI,MAAM,CAAC,QAAQ;QAAE,OAAO,CAAC,sBAAsB;IACnD,IAAI,OAAO,CAAC,QAAQ,KAAK,IAAI,IAAI,MAAM,CAAC,SAAS,KAAK,IAAI;QAAE,OAAO,CAAC,6BAA6B;IAEjG,IAAI,OAAO,CAAC,QAAQ,KAAK,IAAI,EAAE;QAC7B,8BAA8B;QAC9B,eAAe,CAAC,MAAM,CAAC,CAAC;QACxB,OAAO;KACR;IACD,sCAAsC;IACtC,MAAM,CAAC,SAAS,GAAG,IAAI,CAAC;IACxB,qBAAqB,CAAC,GAAG,EAAE;QACzB,eAAe,CAAC,MAAM,CAAC,CAAC;QACxB,MAAM,CAAC,SAAS,GAAG,KAAK,CAAC;IAC3B,CAAC,CAAC,CAAC;AACL,CAAC;AAED;;;;;;;;;;;;;;;;;;GAkBG;AACH,MAAM,UAAU,kBAAkB,CAC9B,MAAgC,EAChC,aAAuC,EACvC,cAA0C,EAC1C,UAAiC,EAAE;;IAErC,MAAA,OAAO,CAAC,QAAQ,oCAAhB,OAAO,CAAC,QAAQ,GAAK,IAAI,EAAC;IAC1B,MAAA,OAAO,CAAC,eAAe,oCAAvB,OAAO,CAAC,eAAe,GAAK,IAAI,EAAC;IAEjC,MAAM,CAAC,aAAa,CAAC,oBAAoB,EAAE,EAAC,MAAM,EAAE,MAAM,CAAC,IAAI,EAAE,aAAa,EAAE,aAAa,CAAC,IAAI,EAAE,OAAO,EAAC,CAAC,CAAC;IAE9G,IAAI,aAAa,CAAC,YAAY,CAAC,MAAM,GAAG,CAAC,EAAE;QACzC,MAAM,CAAC,QAAQ,CACX,oBAAoB,EACpB,+BAA+B,EAC/B,+DAA+D,EAC/D;YACE,UAAU,EAAE,MAAM,CAAC,IAAI;SACxB,CACJ,CAAC;QACF,aAAa,CAAC,YAAY,GAAG,EAAE,CAAC;KACjC;IAED,MAAM,SAAS,GAAG,KAAK,EAAE,YAA8C,EAAiB,EAAE;QACxF,MAAM,WAAW,GAAG,MAAM,cAAc,CAAC,YAAY,CAAC,CAAC;QACvD,IAAI,WAAW,KAAK,SAAS,EAAE;YAC7B,oCAAoC;YACpC,eAAe,CAAC,MAAM,EAAE,WAAW,EAAE,EAAC,QAAQ,EAAE,OAAO,CAAC,QAAQ,EAAC,CAAC,CAAC;SACpE;IACH,CAAC,CAAC;IAEF,OAAO,kBAAkB,CAAC,aAAa,EAAE,SAAoD,EAAE;QAC7F,eAAe,EAAE,OAAO,CAAC,eAAe;KACzC,CAAC,CAAC;AACL,CAAC","sourcesContent":["import {createLogger, globalAlwatr} from '@alwatr/logger';\n\nimport type {\n DispatchOptions,\n ListenerCallback,\n ListenerObject,\n ListenerOptions,\n SignalObject,\n SignalProvider,\n SignalProviderOptions,\n SignalStack,\n} from './type.js';\n\nexport const logger = createLogger('alwatr/signal');\n\nglobalAlwatr.registeredList.push({\n name: '@alwatr/signal',\n version: _ALWATR_VERSION_,\n});\n\n/**\n * Listener `id`\n */\nlet _lastListenerId = 0;\n\n/**\n * Signal stack database.\n */\nconst _signalStack: SignalStack = {};\n\n/**\n * Get signal object by name, If not available, it will create a new signal with default options.\n *\n * Example:\n *\n * ```ts\n * const signal = _getSignalObject('content-change');\n * signal.disabled = true;\n * ```\n */\nexport function _getSignalObject<SignalName extends keyof AlwatrSignals>(\n signalName: SignalName,\n): SignalObject<SignalName> {\n if (!_signalStack[signalName]) {\n _signalStack[signalName] = {\n name: signalName,\n disabled: false,\n debounced: false,\n listenerList: [],\n };\n }\n return _signalStack[signalName] as unknown as SignalObject<SignalName>;\n}\n\nfunction __callListeners<SignalName extends keyof AlwatrSignals>(signal: SignalObject<SignalName>): void {\n logger.logMethodArgs('_callListeners', {signalName: signal.name, signalValue: signal.value});\n if (signal.value === undefined) {\n // null is a valid value for signal.\n logger.accident('_callListeners', 'no_signal_value', 'signal must have a value', {\n signalName: signal.name,\n });\n return;\n }\n\n for (const listener of signal.listenerList) {\n if (listener.disabled) continue;\n try {\n const ret = listener.callback(signal.value);\n if (ret instanceof Promise) {\n ret.catch((err) =>\n logger.error('_callListeners', 'call_listener_failed', err, {\n signalName: signal.name,\n }),\n );\n }\n }\n catch (err) {\n logger.error('_callListeners', 'call_listener_failed', err, {\n signalName: signal.name,\n });\n }\n }\n\n signal.listenerList\n .filter((listener) => !listener.disabled && listener.once)\n .forEach((listener) => _removeSignalListener(signal, listener.id));\n}\n\n/**\n * Adds a new listener to the signal.\n *\n * Example:\n *\n * ```ts\n * const signal = _getSignalObject('content-change')\n * const listener = _addSignalListener(signal, (content) => console.log(content));\n * ```\n */\nexport function _addSignalListener<SignalName extends keyof AlwatrSignals>(\n signal: SignalObject<SignalName>,\n listenerCallback: ListenerCallback<SignalName>,\n options: ListenerOptions = {},\n): ListenerObject<SignalName> {\n options.once ??= false;\n options.disabled ??= false;\n options.receivePrevious ??= true;\n options.priority ??= false;\n\n logger.logMethodArgs('_addSignalListener', {signalName: signal.name, options});\n\n const listener: ListenerObject<SignalName> = {\n id: ++_lastListenerId,\n once: options.once,\n disabled: options.disabled,\n callback: listenerCallback,\n };\n\n let callbackCalled = false;\n\n // Run callback for old dispatch signal\n if (signal.value !== undefined) {\n // null is a valid value for signal.\n if (options.receivePrevious === 'Immediate') {\n try {\n listenerCallback(signal.value);\n }\n catch (err) {\n logger.error('_addSignalListener', 'call_signal_callback_failed', err, {\n signalName: signal.name,\n });\n }\n callbackCalled = true;\n }\n else if (options.receivePrevious === true) {\n requestAnimationFrame(() => {\n if (signal.value !== undefined) {\n // null is a valid value for signal.\n listenerCallback(signal.value);\n }\n });\n callbackCalled = true; // must be outside of requestAnimationFrame.\n }\n }\n\n // if once then must remove listener after fist callback called! then why push it to listenerList?!\n if (!(options.once === true && callbackCalled === true)) {\n if (options.priority === true) {\n signal.listenerList.unshift(listener);\n }\n else {\n signal.listenerList.push(listener);\n }\n }\n\n return listener;\n}\n\n/**\n * Removes a listener from the signal.\n *\n * Example:\n *\n * ```ts\n * const signal = _getSignalObject('content-change')\n * const listener = _addSignalListener(signal, ...);\n * _removeSignalListener(signal, listener);\n * ```\n */\nexport function _removeSignalListener<SignalName extends keyof AlwatrSignals>(\n signal: SignalObject<SignalName>,\n listenerId: number,\n): void {\n logger.logMethodArgs('_removeSignalListener', {signalName: signal.name, listenerId});\n const listenerIndex = signal.listenerList.findIndex((_listener) => _listener.id === listenerId);\n if (listenerIndex !== -1) {\n signal.listenerList.splice(listenerIndex, 1);\n }\n}\n\n/**\n * Dispatch (send) signal to all listeners.\n *\n * @example\n * const signal = _getSignalObject('content-change')\n * _dispatchSignal(signal, content);\n */\nexport function _dispatchSignal<SignalName extends keyof AlwatrSignals>(\n signal: SignalObject<SignalName>,\n value: AlwatrSignals[SignalName],\n options: DispatchOptions = {},\n): void {\n options.debounce ??= true;\n\n logger.logMethodArgs('dispatchSignal', {signalName: signal.name, value, options});\n\n // set value before check signal.debounced for act like throttle (call listeners with last dispatch value).\n signal.value = value;\n\n if (signal.disabled) return; // signal is disabled.\n if (options.debounce === true && signal.debounced === true) return; // last dispatch in progress.\n\n if (options.debounce !== true) {\n // call listeners immediately.\n __callListeners(signal);\n return;\n }\n // else: call listeners in next frame.\n signal.debounced = true;\n requestAnimationFrame(() => {\n __callListeners(signal);\n signal.debounced = false;\n });\n}\n\n/**\n * Defines the provider of the signal that will be called when the signal requested (addRequestSignalListener).\n *\n * Example:\n *\n * ```ts\n * const signal = _getSignalObject('content-change');\n * const requestSignal = _getSignalObject('request-content-change');\n * _setSignalProvider(signal, requestSignal, async (requestParam) => {\n * const content = await fetchNewContent(requestParam);\n * if (content != null) {\n * return content; // dispatchSignal('content-change', content);\n * }\n * else {\n * dispatchSignal('content-not-found');\n * }\n * }\n * ```\n */\nexport function _setSignalProvider<SignalName extends keyof AlwatrSignals>(\n signal: SignalObject<SignalName>,\n requestSignal: SignalObject<SignalName>,\n signalProvider: SignalProvider<SignalName>,\n options: SignalProviderOptions = {},\n): ListenerObject<SignalName> {\n options.debounce ??= true;\n options.receivePrevious ??= true;\n\n logger.logMethodArgs('_setSignalProvider', {signal: signal.name, requestSignal: requestSignal.name, options});\n\n if (requestSignal.listenerList.length > 0) {\n logger.accident(\n '_setSignalProvider',\n 'another_signal_provider_exist',\n 'Another provider exist! It will be removed to fix the problem',\n {\n signalName: signal.name,\n },\n );\n requestSignal.listenerList = [];\n }\n\n const _callback = async (requestParam: AlwatrRequestSignals[SignalName]): Promise<void> => {\n const signalValue = await signalProvider(requestParam);\n if (signalValue !== undefined) {\n // null is a valid value for signal.\n _dispatchSignal(signal, signalValue, {debounce: options.debounce});\n }\n };\n\n return _addSignalListener(requestSignal, _callback as unknown as ListenerCallback<SignalName>, {\n receivePrevious: options.receivePrevious,\n });\n}\n"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@alwatr/signal",
3
- "version": "0.26.1",
3
+ "version": "0.28.0",
4
4
  "description": "Elegant powerful event system for handle global signals and states written in tiny TypeScript module.",
5
5
  "keywords": [
6
6
  "signal",
@@ -32,8 +32,8 @@
32
32
  "url": "https://github.com/AliMD/alwatr/issues"
33
33
  },
34
34
  "dependencies": {
35
- "@alwatr/logger": "^0.26.1",
36
- "tslib": "~2.4.1"
35
+ "@alwatr/logger": "^0.28.0",
36
+ "tslib": "^2.4.1"
37
37
  },
38
- "gitHead": "73d4fc82563cd616ccb9b5b4ab7eb94870a4c51b"
38
+ "gitHead": "f4f63e7db916fda3ceac8b1d448068fc46da6334"
39
39
  }