@alwatr/signal 0.24.1 → 0.26.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,6 +3,21 @@
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.0](https://github.com/AliMD/alwatr/compare/v0.25.0...v0.26.0) (2022-12-22)
7
+
8
+ ### Bug Fixes
9
+
10
+ - set correct path ([d01ce6f](https://github.com/AliMD/alwatr/commit/d01ce6ffa749a5e3e0e11e35b4ed61d75d61fec9))
11
+ - tsconfig ([e96dcd3](https://github.com/AliMD/alwatr/commit/e96dcd30774a9f06f7d051e0504192cbbe019e35))
12
+
13
+ ### Features
14
+
15
+ - improve error debugging ([1fba504](https://github.com/AliMD/alwatr/commit/1fba50400a1e8ececc10bbe8ea11cc8dcea2289c))
16
+
17
+ # [0.25.0](https://github.com/AliMD/alwatr/compare/v0.24.1...v0.25.0) (2022-12-07)
18
+
19
+ **Note:** Version bump only for package @alwatr/signal
20
+
6
21
  ## [0.24.1](https://github.com/AliMD/alwatr/compare/v0.24.0...v0.24.1) (2022-12-01)
7
22
 
8
23
  **Note:** Version bump only for package @alwatr/signal
package/core.js CHANGED
@@ -48,13 +48,13 @@ function __callListeners(signal) {
48
48
  try {
49
49
  const ret = listener.callback(signal.value);
50
50
  if (ret instanceof Promise) {
51
- ret.catch((err) => logger.error('_callListeners', 'call_listener_failed', err.stack || err, {
51
+ ret.catch((err) => logger.error('_callListeners', 'call_listener_failed', err, {
52
52
  signalName: signal.name,
53
53
  }));
54
54
  }
55
55
  }
56
56
  catch (err) {
57
- logger.error('_callListeners', 'call_listener_failed', err.stack || err, {
57
+ logger.error('_callListeners', 'call_listener_failed', err, {
58
58
  signalName: signal.name,
59
59
  });
60
60
  }
@@ -74,10 +74,11 @@ function __callListeners(signal) {
74
74
  * ```
75
75
  */
76
76
  export function _addSignalListener(signal, listenerCallback, options = {}) {
77
- options.once ?? (options.once = false);
78
- options.disabled ?? (options.disabled = false);
79
- options.receivePrevious ?? (options.receivePrevious = true);
80
- options.priority ?? (options.priority = false);
77
+ var _a, _b, _c, _d;
78
+ (_a = options.once) !== null && _a !== void 0 ? _a : (options.once = false);
79
+ (_b = options.disabled) !== null && _b !== void 0 ? _b : (options.disabled = false);
80
+ (_c = options.receivePrevious) !== null && _c !== void 0 ? _c : (options.receivePrevious = true);
81
+ (_d = options.priority) !== null && _d !== void 0 ? _d : (options.priority = false);
81
82
  logger.logMethodArgs('_addSignalListener', { signalName: signal.name, options });
82
83
  const listener = {
83
84
  id: ++_lastListenerId,
@@ -98,7 +99,7 @@ export function _addSignalListener(signal, listenerCallback, options = {}) {
98
99
  listenerCallback(signal.value);
99
100
  }
100
101
  catch (err) {
101
- logger.error('_addSignalListener', 'call_signal_callback_failed', err.stack || err, {
102
+ logger.error('_addSignalListener', 'call_signal_callback_failed', err, {
102
103
  signalName: signal.name,
103
104
  });
104
105
  }
@@ -155,7 +156,8 @@ export function _removeSignalListener(signal, listenerId) {
155
156
  * _dispatchSignal(signal, content);
156
157
  */
157
158
  export function _dispatchSignal(signal, value, options = {}) {
158
- options.debounce ?? (options.debounce = true);
159
+ var _a;
160
+ (_a = options.debounce) !== null && _a !== void 0 ? _a : (options.debounce = true);
159
161
  logger.logMethodArgs('dispatchSignal', { signalName: signal.name, value, options });
160
162
  // set value before check signal.debounced for act like throttle (call listeners with last dispatch value).
161
163
  signal.value = value;
@@ -195,8 +197,9 @@ export function _dispatchSignal(signal, value, options = {}) {
195
197
  * ```
196
198
  */
197
199
  export function _setSignalProvider(signal, requestSignal, signalProvider, options = {}) {
198
- options.debounce ?? (options.debounce = true);
199
- options.receivePrevious ?? (options.receivePrevious = true);
200
+ var _a, _b;
201
+ (_a = options.debounce) !== null && _a !== void 0 ? _a : (options.debounce = true);
202
+ (_b = options.receivePrevious) !== null && _b !== void 0 ? _b : (options.receivePrevious = true);
200
203
  logger.logMethodArgs('_setSignalProvider', { signal: signal.name, requestSignal: requestSignal.name, options });
201
204
  if (requestSignal.listenerList.length > 0) {
202
205
  logger.accident('_setSignalProvider', 'another_signal_provider_exist', 'Another provider exist! It will be removed to fix the problem', {
package/core.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"core.js","sourceRoot":"","sources":["src/core.ts"],"names":[],"mappings":"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"}
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"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@alwatr/signal",
3
- "version": "0.24.1",
3
+ "version": "0.26.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",
@@ -25,15 +25,15 @@
25
25
  "repository": {
26
26
  "type": "git",
27
27
  "url": "https://github.com/AliMD/alwatr",
28
- "directory": "packages/core/signal"
28
+ "directory": "core/signal"
29
29
  },
30
- "homepage": "https://github.com/AliMD/alwatr/tree/main/packages/core/signal#readme",
30
+ "homepage": "https://github.com/AliMD/alwatr/tree/main/core/signal#readme",
31
31
  "bugs": {
32
32
  "url": "https://github.com/AliMD/alwatr/issues"
33
33
  },
34
34
  "dependencies": {
35
- "@alwatr/logger": "^0.24.1",
35
+ "@alwatr/logger": "^0.26.0",
36
36
  "tslib": "~2.4.1"
37
37
  },
38
- "gitHead": "5aee7500ddc3a20fd0690f47a954dc55daaffb06"
38
+ "gitHead": "95b0562adb46ab0266d860251e16aa0c4e9b4c09"
39
39
  }
package/signal.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"signal.js","sourceRoot":"","sources":["src/signal.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"signal.js","sourceRoot":"","sources":["src/signal.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,YAAY,EAAC,MAAM,gBAAgB,CAAC;AAE5C,OAAO,EACL,gBAAgB,EAChB,qBAAqB,EACrB,kBAAkB,EAClB,eAAe,EACf,kBAAkB,GACnB,MAAM,WAAW,CAAC;AAYnB;;GAEG;AACH,MAAM,OAAO,eAAe;IAK1B,YAAY,UAAsB;QAChC,IAAI,CAAC,OAAO,GAAG,YAAY,CAAC,UAAU,UAAU,GAAG,CAAC,CAAC;QACrD,IAAI,CAAC,OAAO,GAAG,gBAAgB,CAAC,UAAU,CAAC,CAAC;QAC5C,IAAI,CAAC,cAAc,GAAG,gBAAgB,CAAC,WAAW,UAAU,EAA2B,CAAC,CAAC;IAC3F,CAAC;IAED;;;;;;;;OAQG;IACH,IAAI,IAAI;QACN,OAAO,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC;IAC3B,CAAC;IAED;;;;;;;;;;;;OAYG;IACH,IAAI,KAAK;QACP,OAAO,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC;IAC5B,CAAC;IAED;;;;;;;;;;;OAWG;IACH,IAAI,UAAU;QACZ,OAAO,OAAO,IAAI,IAAI,CAAC,OAAO,CAAC;IACjC,CAAC;IAED;;;;;;;;OAQG;IACH,IAAI,QAAQ;QACV,OAAO,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC;IAC/B,CAAC;IACD,IAAI,QAAQ,CAAC,QAAiB;QAC5B,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,UAAU,EAAE,QAAQ,CAAC,CAAC;QAC/C,IAAI,CAAC,OAAO,CAAC,QAAQ,GAAG,QAAQ,CAAC;IACnC,CAAC;IAED;;;;;;;;;;;;;;OAcG;IACH,MAAM;QACJ,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC;QACjC,OAAO,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC;IAC5B,CAAC;IAED;;;;;;;;;;;;;;;;;OAiBG;IACH,WAAW,CACP,cAA0C,EAC1C,OAA+B;QAEjC,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,aAAa,EAAE,EAAC,OAAO,EAAC,CAAC,CAAC;QACrD,MAAM,QAAQ,GAAG,kBAAkB,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,cAAc,EAAE,cAAc,EAAE,OAAO,CAAC,CAAC;QAChG,OAAO,IAAI,iBAAiB,CAAC,IAAI,CAAC,cAAc,EAAE,QAAQ,CAAC,CAAC;IAC9D,CAAC;IAED;;;;;;;;;;;;OAYG;IACH,OAAO,CAAC,YAA8C;QACpD,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,SAAS,EAAE,EAAC,YAAY,EAAC,CAAC,CAAC;QACtD,MAAM,sBAAsB,GAAG,IAAI,CAAC,kBAAkB,EAAE,CAAC;QACzD,eAAe,CACX,IAAI,CAAC,cAAc,EACnB,YAAoD,CACvD,CAAC;QACF,OAAO,sBAAsB,CAAC;IAChC,CAAC;IAED;;;;;;;;;;OAUG;IACH,kBAAkB;QAChB,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,oBAAoB,CAAC,CAAC;QAC7C,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE;YAC7B,IAAI,CAAC,WAAW,CAAC,OAAO,EAAE;gBACxB,IAAI,EAAE,IAAI;gBACV,QAAQ,EAAE,IAAI;gBACd,eAAe,EAAE,KAAK;aACvB,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;IACL,CAAC;IAED;;;;;;;;;;;;OAYG;IACH,cAAc;QACZ,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,gBAAgB,CAAC,CAAC;QACzC,IAAI,IAAI,CAAC,OAAO,CAAC,KAAK,KAAK,SAAS,EAAE;YACpC,OAAO,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;SAC5C;aACI;YACH,OAAO,IAAI,CAAC,kBAAkB,EAAE,CAAC;SAClC;IACH,CAAC;IAED;;;;;;;;;OASG;IACH,QAAQ,CAAC,WAAsC,EAAE,OAAyB;QACxE,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,UAAU,EAAE,EAAC,WAAW,EAAE,OAAO,EAAC,CAAC,CAAC;QAC/D,eAAe,CAAC,IAAI,CAAC,OAAO,EAAE,WAAW,EAAE,OAAO,CAAC,CAAC;IACtD,CAAC;IAED;;;;;;;;;OASG;IACH,WAAW,CACP,gBAA8C,EAC9C,OAAyB;QAE3B,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,aAAa,EAAE,EAAC,OAAO,EAAC,CAAC,CAAC;QACrD,MAAM,QAAQ,GAAG,kBAAkB,CAAC,IAAI,CAAC,OAAO,EAAE,gBAAgB,EAAE,OAAO,CAAC,CAAC;QAC7E,OAAO,IAAI,iBAAiB,CAAC,IAAI,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;IACvD,CAAC;CACF;AAED;;GAEG;AACH,MAAM,OAAO,iBAAiB;IAE5B,YAAsB,OAAiC,EAAY,SAAqC;QAAlF,YAAO,GAAP,OAAO,CAA0B;QAAY,cAAS,GAAT,SAAS,CAA4B;QACtG,IAAI,CAAC,OAAO,GAAG,YAAY,CAAC,cAAc,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC7D,CAAC;IAED;;;;;;;;;;OAUG;IACH,IAAI,QAAQ;QACV,OAAO,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC;IACjC,CAAC;IACD,IAAI,QAAQ,CAAC,QAAiB;QAC5B,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,UAAU,EAAE,QAAQ,CAAC,CAAC;QAC/C,IAAI,CAAC,SAAS,CAAC,QAAQ,GAAG,QAAQ,CAAC;IACrC,CAAC;IAED;;;;;;;;;;;OAWG;IACH,MAAM;QACJ,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC;QACjC,qBAAqB,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC;IACzD,CAAC;CACF","sourcesContent":["import {createLogger} from '@alwatr/logger';\n\nimport {\n _getSignalObject,\n _removeSignalListener,\n _setSignalProvider,\n _dispatchSignal,\n _addSignalListener,\n} from './core.js';\n\nimport type {\n ListenerOptions,\n DispatchOptions,\n ListenerCallback,\n SignalProvider,\n SignalProviderOptions,\n ListenerObject,\n SignalObject,\n} from './type.js';\n\n/**\n * Signal API interface as a remote controller.\n */\nexport class SignalInterface<SignalName extends keyof AlwatrSignals> {\n protected _signal;\n protected _requestSignal;\n protected _logger;\n\n constructor(signalName: SignalName) {\n this._logger = createLogger(`signal<${signalName}>`);\n this._signal = _getSignalObject(signalName);\n this._requestSignal = _getSignalObject(`request-${signalName}` as unknown as SignalName);\n }\n\n /**\n * Get signal name.\n *\n * Example:\n *\n * ```ts\n * console.log(contentChangeSignal.name);\n * ```\n */\n get name(): SignalName {\n return this._signal.name;\n }\n\n /**\n * Get last dispatched signal value or undefined.\n *\n * Example:\n *\n * ```ts\n * const contentChangeSignal = new SignalInterface('content-change');\n * if (contentChangeSignal.dispatched) {\n * const content = contentChangeSignal.value!;\n * ...\n * }\n * ```\n */\n get value(): AlwatrSignals[SignalName] | undefined {\n return this._signal.value;\n }\n\n /**\n * Check signal dispatched before or not!\n *\n * Example\n *\n * ```ts\n * const contentChangeSignal = new SignalInterface('content-change');\n * if(contentChangeSignal.dispatched) {\n * // contentChangeSignal.value exist.\n * }\n * ```\n */\n get dispatched(): boolean {\n return 'value' in this._signal;\n }\n\n /**\n * Disable signal, all dispatch's ignored (just value updated) and no more listeners will be called.\n *\n * Example:\n *\n * ```ts\n * contentChangeSignal.disabled = true;\n * ```\n */\n get disabled(): boolean {\n return this._signal.disabled;\n }\n set disabled(disabled: boolean) {\n this._logger.logProperty('disabled', disabled);\n this._signal.disabled = disabled;\n }\n\n /**\n * Expire the signal by clear last dispatched value.\n *\n * dispatched and receivePrevious etc not work until new signal.\n *\n * Example:\n *\n * ```ts\n * const contentChangeSignal = new SignalInterface('content-change');\n * contentChangeSignal.dispatched; // true\n * contentChangeSignal.expire();\n * contentChangeSignal.value; // undefined\n * contentChangeSignal.dispatched; // false\n * ```\n */\n expire(): void {\n this._logger.logMethod('expire');\n delete this._signal.value;\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 contentChangeSignal = new SignalInterface('content-change');\n * contentChangeSignal.setProvider(async (requestParam) => {\n * const content = await fetchNewContent(requestParam);\n * if (content != null) {\n * return content; // Dispatch signal 'content-change' with content.\n * }\n * else {\n * // dispatch new signal: 'content-not-found'\n * }\n * });\n * ```\n */\n setProvider(\n signalProvider: SignalProvider<SignalName>,\n options?: SignalProviderOptions,\n ): ListenerInterface<SignalName> {\n this._logger.logMethodArgs('setProvider', {options});\n const listener = _setSignalProvider(this._signal, this._requestSignal, signalProvider, options);\n return new ListenerInterface(this._requestSignal, listener);\n }\n\n /**\n * Dispatch request signal and wait for answer (wait for new signal dispatched).\n *\n * Resolved with signal value when new signal received (getNextSignalValue).\n *\n * Example:\n *\n * ```ts\n * const contentChangeSignal = new SignalInterface('content-change');\n * // dispatch request signal and wait for answer (wait for NEW signal).\n * const newContent = await contentChangeSignal.request({foo: 'bar'});\n * ```\n */\n request(requestParam: AlwatrRequestSignals[SignalName]): Promise<AlwatrSignals[SignalName]> {\n this._logger.logMethodArgs('request', {requestParam});\n const nextSignalValuePromise = this.getNextSignalValue();\n _dispatchSignal(\n this._requestSignal,\n requestParam as unknown as AlwatrSignals[SignalName], // mastmalize to avoid type error\n );\n return nextSignalValuePromise;\n }\n\n /**\n * Resolved with signal value when new signal received.\n *\n * Example:\n *\n * ```ts\n * const contentChangeSignal = new SignalInterface('content-change');\n * // Wait for NEW signal received.\n * const newContent = await contentChangeSignal.getNextSignalValue();\n * ```\n */\n getNextSignalValue(): Promise<AlwatrSignals[SignalName]> {\n this._logger.logMethod('getNextSignalValue');\n return new Promise((resolve) => {\n this.addListener(resolve, {\n once: true,\n priority: true,\n receivePrevious: false,\n });\n });\n }\n\n /**\n * Resolved with signal value when signal is ready.\n *\n * Get signal value from last dispatched signal (if any) or wait for new signal received.\n *\n * Example:\n *\n * ```ts\n * const contentChangeSignal = new SignalInterface('content-change');\n * // get signal value from last dispatched signal (if any) or wait new signal received.\n * const content = await contentChangeSignal.getSignalValue();\n * ```\n */\n getSignalValue(): Promise<AlwatrSignals[SignalName]> {\n this._logger.logMethod('getSignalValue');\n if (this._signal.value !== undefined) {\n return Promise.resolve(this._signal.value);\n }\n else {\n return this.getNextSignalValue();\n }\n }\n\n /**\n * Dispatch signal to all listeners.\n *\n * Example:\n *\n * ```ts\n * const contentChangeSignal = new SignalInterface('content-change');\n * contentChangeSignal.dispatch(content);\n * ```\n */\n dispatch(signalValue: AlwatrSignals[SignalName], options?: DispatchOptions): void {\n this._logger.logMethodArgs('dispatch', {signalValue, options});\n _dispatchSignal(this._signal, signalValue, options);\n }\n\n /**\n * Adds a new listener to the signal.\n *\n * Example:\n *\n * ```ts\n * const contentChangeSignal = new SignalInterface('content-change');\n * const listener = contentChangeSignal.addListener((content) => console.log(content));\n * ```\n */\n addListener(\n listenerCallback: ListenerCallback<SignalName>,\n options?: ListenerOptions,\n ): ListenerInterface<SignalName> {\n this._logger.logMethodArgs('addListener', {options});\n const listener = _addSignalListener(this._signal, listenerCallback, options);\n return new ListenerInterface(this._signal, listener);\n }\n}\n\n/**\n * Signal Listener API interface as a remote controller.\n */\nexport class ListenerInterface<SignalName extends keyof AlwatrSignals> {\n protected _logger;\n constructor(protected _signal: SignalObject<SignalName>, protected _listener: ListenerObject<SignalName>) {\n this._logger = createLogger('Listener of ' + _signal.name);\n }\n\n /**\n * Disable the listener, not called anymore.\n *\n * Example:\n *\n * ```ts\n * const listener = contentChangeSignal.addListener((content) => console.log(content));\n * ...\n * listener.disabled = true;\n * ```\n */\n get disabled(): boolean {\n return this._listener.disabled;\n }\n set disabled(disabled: boolean) {\n this._logger.logProperty('disabled', disabled);\n this._listener.disabled = disabled;\n }\n\n /**\n * Removes a listener from the signal.\n *\n * Example:\n *\n * ```ts\n * const contentChangeSignal = new SignalInterface('content-change');\n * const listener = contentChangeSignal.addListener((content) => console.log(content));\n * ...\n * listener.remove();\n * ```\n */\n remove(): void {\n this._logger.logMethod('remove');\n _removeSignalListener(this._signal, this._listener.id);\n }\n}\n"]}
package/type.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"type.js","sourceRoot":"","sources":["src/type.ts"],"names":[],"mappings":""}
1
+ {"version":3,"file":"type.js","sourceRoot":"","sources":["src/type.ts"],"names":[],"mappings":"","sourcesContent":["declare global {\n /**\n * Global signals value type registry.\n */\n interface AlwatrSignals {\n readonly 'easter-egg': string;\n }\n\n /**\n * Global request signal parameters types.\n */\n interface AlwatrRequestSignals {\n readonly 'easter-egg': number;\n }\n}\n\n/**\n * addSignalListener options type\n */\nexport interface ListenerOptions {\n /**\n * If true, the listener will be called only once.\n * @default false\n */\n once?: boolean;\n\n /**\n * If true, the listener will be called before other.\n * @default false\n */\n priority?: boolean;\n\n /**\n * If true, the listener will be defined disabled by default.\n *\n * @default false\n */\n disabled?: boolean;\n\n /**\n * Calling this listener (callback) with preview signal value (if dispatched before).\n * If Immediate, the listener will be called immediately without any debounce for preview signal.\n *\n * @default true\n */\n receivePrevious?: boolean | 'Immediate';\n}\n\n/**\n * dispatchSignal options type\n */\nexport interface DispatchOptions {\n /**\n * If true, the dispatch will be send after animation frame debounce.\n * If false, every signal is matter and count.\n * tips: debounce work like throttle this means listeners call with last dispatch value.\n *\n * @default true\n */\n debounce?: boolean;\n}\n\nexport interface SignalProviderOptions {\n /**\n * Calling signal provider (request signal callback) with preview signal value (if dispatched before).\n * If Immediate, the listener will be called immediately without any debounce for preview signal.\n *\n * @default true\n */\n receivePrevious?: boolean | 'Immediate';\n\n /**\n * If true, the dispatch will be send after animation frame debounce.\n * If false, every signal is matter and count.\n * tips: debounce work like throttle this means listeners call with last dispatch value.\n *\n * @default true\n */\n debounce?: boolean;\n}\n\n/**\n * Signal listeners callback function type.\n */\nexport type ListenerCallback<SignalName extends keyof AlwatrSignals> = (\n signalValue: AlwatrSignals[SignalName]\n) => void | Promise<void>;\n\n/**\n * Signal provider function type used to setSignalProvider.\n */\nexport type SignalProvider<SignalName extends keyof AlwatrRequestSignals> = (\n requestParam: AlwatrRequestSignals[SignalName]\n) => AlwatrSignals[SignalName] | void | Promise<AlwatrSignals[SignalName] | void>;\n\n/**\n * Signal listeners object in database.\n */\nexport interface ListenerObject<SignalName extends keyof AlwatrSignals> {\n /**\n * Unique listener id\n */\n id: number;\n\n /**\n * If true, the listener will be called only once and removed automatically after first call\n */\n once: boolean;\n\n /**\n * If true, the listener will be disabled.\n */\n disabled: boolean;\n\n callback: ListenerCallback<SignalName>;\n}\n\n/**\n * Signal object in database.\n */\nexport interface SignalObject<SignalName extends keyof AlwatrSignals> {\n /**\n * Signal name for direct access.\n */\n name: SignalName;\n\n /**\n * Last dispatched value.\n */\n value?: AlwatrSignals[SignalName];\n\n /**\n * If true, the signal is disabled.\n */\n disabled: boolean;\n\n /**\n * Dispatches debounced (delayed).\n * Internal use case for debounce dispatch signal.\n */\n debounced: boolean;\n\n /**\n * Signal listeners list.\n */\n listenerList: Array<ListenerObject<SignalName>>;\n}\n\n/**\n * Signal stack database.\n */\nexport type SignalStack = {\n [SignalName in keyof AlwatrSignals]?: SignalObject<SignalName>;\n};\n"]}