@alwatr/signal 2.0.0 → 2.0.1

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,15 +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
+ ## [2.0.1](https://github.com/AliMD/alwatr-signal/compare/@alwatr/signal@2.0.0...@alwatr/signal@2.0.1) (2023-10-23)
7
+
8
+ ### Bug Fixes
9
+
10
+ * **signal:** compatible with new logger api ([0a3b1c0](https://github.com/AliMD/alwatr-signal/commit/0a3b1c02b285daa66491104a14596e6a19895e11)) by @
11
+
6
12
  # 2.0.0 (2023-09-19)
7
13
 
8
14
  ### Bug Fixes
9
15
 
10
- * all new repo path and packages dependencies ([21a6afa](https://github.com/AliMD/alwatr-signal/commit/21a6afa0badafe4051617d9a9e3bbfbaabd0c4ad)) by @AliMD
11
- * cleanup old signal and fsm v1 ([bde0bea](https://github.com/AliMD/alwatr-signal/commit/bde0bea06a6750bebad49a127b75b57fd5e55ddd)) by @AliMD
12
- * **signal:** package name ([4791b54](https://github.com/AliMD/alwatr-signal/commit/4791b54c8da75cf43eb9c86180f1ed94b0e28c4e)) by @AliMD
13
- * **signal:** signal2 name ([70b71e3](https://github.com/AliMD/alwatr-signal/commit/70b71e312cb5e5d4c54c37c5c327712200f90be5)) by @AliMD
14
- * ts refrence path ([c2baa44](https://github.com/AliMD/alwatr-signal/commit/c2baa44999c72a0015481fc8fea25439329c3f37)) by @AliMD
16
+ - all new repo path and packages dependencies ([21a6afa](https://github.com/AliMD/alwatr-signal/commit/21a6afa0badafe4051617d9a9e3bbfbaabd0c4ad)) by @AliMD
17
+ - cleanup old signal and fsm v1 ([bde0bea](https://github.com/AliMD/alwatr-signal/commit/bde0bea06a6750bebad49a127b75b57fd5e55ddd)) by @AliMD
18
+ - **signal:** package name ([4791b54](https://github.com/AliMD/alwatr-signal/commit/4791b54c8da75cf43eb9c86180f1ed94b0e28c4e)) by @AliMD
19
+ - **signal:** signal2 name ([70b71e3](https://github.com/AliMD/alwatr-signal/commit/70b71e312cb5e5d4c54c37c5c327712200f90be5)) by @AliMD
20
+ - ts refrence path ([c2baa44](https://github.com/AliMD/alwatr-signal/commit/c2baa44999c72a0015481fc8fea25439329c3f37)) by @AliMD
15
21
 
16
22
  ## [1.1.2](https://github.com/AliMD/alwatr-signal/compare/@alwatr/signal@1.1.1...@alwatr/signal@1.1.2) (2023-09-12)
17
23
 
package/index.d.ts CHANGED
@@ -1,6 +1,7 @@
1
+ export * from './observable.js';
1
2
  export * from './simple-signal.js';
2
3
  export * from './signal.js';
3
4
  export * from './context.js';
4
5
  export * from './multithread-context.js';
5
- export * from './type.js';
6
+ export type * from './type.js';
6
7
  //# sourceMappingURL=index.d.ts.map
package/index.d.ts.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["src/index.ts"],"names":[],"mappings":"AAEA,cAAc,oBAAoB,CAAC;AACnC,cAAc,aAAa,CAAC;AAC5B,cAAc,cAAc,CAAC;AAC7B,cAAc,0BAA0B,CAAC;AACzC,cAAc,WAAW,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["src/index.ts"],"names":[],"mappings":"AAAA,cAAc,iBAAiB,CAAC;AAChC,cAAc,oBAAoB,CAAC;AACnC,cAAc,aAAa,CAAC;AAC5B,cAAc,cAAc,CAAC;AAC7B,cAAc,0BAA0B,CAAC;AACzC,mBAAmB,WAAW,CAAC"}
package/index.js CHANGED
@@ -1,11 +1,6 @@
1
- import { globalAlwatr } from '@alwatr/logger';
1
+ export * from './observable.js';
2
2
  export * from './simple-signal.js';
3
3
  export * from './signal.js';
4
4
  export * from './context.js';
5
5
  export * from './multithread-context.js';
6
- export * from './type.js';
7
- globalAlwatr.registeredList.push({
8
- name: '@alwatr/signal',
9
- version: _ALWATR_VERSION_,
10
- });
11
6
  //# sourceMappingURL=index.js.map
package/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,YAAY,EAAC,MAAM,gBAAgB,CAAC;AAE5C,cAAc,oBAAoB,CAAC;AACnC,cAAc,aAAa,CAAC;AAC5B,cAAc,cAAc,CAAC;AAC7B,cAAc,0BAA0B,CAAC;AACzC,cAAc,WAAW,CAAC;AAE1B,YAAY,CAAC,cAAc,CAAC,IAAI,CAAC;IAC/B,IAAI,EAAE,gBAAgB;IACtB,OAAO,EAAE,gBAAgB;CAC1B,CAAC,CAAC","sourcesContent":["import {globalAlwatr} from '@alwatr/logger';\n\nexport * from './simple-signal.js';\nexport * from './signal.js';\nexport * from './context.js';\nexport * from './multithread-context.js';\nexport * from './type.js';\n\nglobalAlwatr.registeredList.push({\n name: '@alwatr/signal',\n version: _ALWATR_VERSION_,\n});\n"]}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["src/index.ts"],"names":[],"mappings":"AAAA,cAAc,iBAAiB,CAAC;AAChC,cAAc,oBAAoB,CAAC;AACnC,cAAc,aAAa,CAAC;AAC5B,cAAc,cAAc,CAAC;AAC7B,cAAc,0BAA0B,CAAC","sourcesContent":["export * from './observable.js';\nexport * from './simple-signal.js';\nexport * from './signal.js';\nexport * from './context.js';\nexport * from './multithread-context.js';\nexport type * from './type.js';\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"observable.d.ts","sourceRoot":"","sources":["src/observable.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EACV,gBAAgB,EAChB,gBAAgB,EAChB,QAAQ,EACR,eAAe,EACf,yBAAyB,EAC1B,MAAM,WAAW,CAAC;AAEnB;;GAEG;AACH,8BAAsB,gBAAgB,CAAC,CAAC,CAAE,YAAW,yBAAyB,CAAC,CAAC,CAAC;IAC/E,SAAS,CAAC,KAAK,SAAC;IAChB,SAAS,CAAC,OAAO,wCAAC;IAClB,SAAS,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;IACrB,SAAS,CAAC,WAAW,EAAE,QAAQ,CAAC,IAAI,EAAE,CAAC,CAAC,EAAE,CAAM;gBAEpC,MAAM,EAAE;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,YAAY,CAAC,EAAE,MAAM,CAAA;KAAC;IAOzD;;;;OAIG;IACH,SAAS,CAAC,QAAQ,IAAI,CAAC,GAAG,SAAS;IAKnC;;OAEG;IACH,SAAS,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC,GAAG,IAAI;IAMhC;;OAEG;IACH,SAAS,CAAC,UAAU,CAAC,IAAI,EAAE,CAAC,GAAG,IAAI;IAuBnC;;OAEG;IACH,SAAS,CAAC,gBAAgB,EAAE,gBAAgB,CAAC,IAAI,EAAE,CAAC,CAAC,EAAE,OAAO,GAAE,gBAAqB,GAAG,eAAe;IAyCvG;;OAEG;IACH,WAAW,CAAC,gBAAgB,EAAE,gBAAgB,CAAC,IAAI,EAAE,CAAC,CAAC,GAAG,IAAI;IAQ9D;;;;OAIG;IACH,SAAS,CAAC,MAAM,IAAI,IAAI;IAKxB;;OAEG;IACH,SAAS,CAAC,eAAe,IAAI,OAAO,CAAC,CAAC,CAAC;CAUxC"}
1
+ {"version":3,"file":"observable.d.ts","sourceRoot":"","sources":["src/observable.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAC,gBAAgB,EAAE,gBAAgB,EAAE,QAAQ,EAAE,eAAe,EAAE,yBAAyB,EAAC,MAAM,WAAW,CAAC;AAIxH;;GAEG;AACH,8BAAsB,gBAAgB,CAAC,CAAC,CAAE,YAAW,yBAAyB,CAAC,CAAC,CAAC;IAC/E,SAAS,CAAC,KAAK,SAAC;IAChB,SAAS,CAAC,OAAO,wCAAC;IAClB,SAAS,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;IACrB,SAAS,CAAC,WAAW,EAAE,QAAQ,CAAC,IAAI,EAAE,CAAC,CAAC,EAAE,CAAM;gBAEpC,MAAM,EAAE;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,YAAY,CAAC,EAAE,MAAM,CAAA;KAAC;IAOzD;;;;OAIG;IACH,SAAS,CAAC,QAAQ,IAAI,CAAC,GAAG,SAAS;IAKnC;;OAEG;IACH,SAAS,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC,GAAG,IAAI;IAMhC;;OAEG;IACH,SAAS,CAAC,UAAU,CAAC,IAAI,EAAE,CAAC,GAAG,IAAI;IAuBnC;;OAEG;IACH,SAAS,CAAC,gBAAgB,EAAE,gBAAgB,CAAC,IAAI,EAAE,CAAC,CAAC,EAAE,OAAO,GAAE,gBAAqB,GAAG,eAAe;IAyCvG;;OAEG;IACH,WAAW,CAAC,gBAAgB,EAAE,gBAAgB,CAAC,IAAI,EAAE,CAAC,CAAC,GAAG,IAAI;IAQ9D;;;;OAIG;IACH,SAAS,CAAC,MAAM,IAAI,IAAI;IAKxB;;OAEG;IACH,SAAS,CAAC,eAAe,IAAI,OAAO,CAAC,CAAC,CAAC;CAUxC"}
package/observable.js CHANGED
@@ -1,4 +1,5 @@
1
- import { createLogger } from '@alwatr/logger';
1
+ import { createLogger, definePackage } from '@alwatr/logger';
2
+ definePackage('signal', '2.x');
2
3
  /**
3
4
  * Alwatr base signal.
4
5
  */
package/observable.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"observable.js","sourceRoot":"","sources":["src/observable.ts"],"names":[],"mappings":"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","sourcesContent":["import {createLogger} from '@alwatr/logger';\n\nimport type {\n SubscribeOptions,\n ListenerCallback,\n Observer,\n SubscribeResult,\n AlwatrObservableInterface,\n} from './type.js';\n\n/**\n * Alwatr base signal.\n */\nexport abstract class AlwatrObservable<T> implements AlwatrObservableInterface<T> {\n protected _name;\n protected _logger;\n protected _$data?: T;\n protected _$observers: Observer<this, T>[] = [];\n\n constructor(config: {name: string; loggerPrefix?: string}) {\n config.loggerPrefix ??= 'signal';\n this._name = config.name;\n this._logger = createLogger(`{${config.loggerPrefix}: ${this._name}}`);\n this._logger.logMethod?.('constructor');\n }\n\n /**\n * Get data.\n *\n * Return undefined if signal not notify before or expired.\n */\n protected _getData(): T | undefined {\n this._logger.logMethodFull?.('_getData', {}, this._$data);\n return this._$data;\n }\n\n /**\n * Execute all observers and remember data.\n */\n protected _notify(data: T): void {\n this._logger.logMethodArgs?.('_notify', data);\n this._$data = data;\n setTimeout(() => this._$dispatch(data), 0);\n }\n\n /**\n * Execute all observers callback.\n */\n protected _$dispatch(data: T): void {\n const removeList: Observer<this, T>[] = [];\n\n for (const listener of this._$observers) {\n if (listener.options.disabled) continue;\n if (listener.options.once) removeList.push(listener);\n\n try {\n const ret = listener.callback.call(this, data);\n if (ret instanceof Promise) {\n ret.catch((err) => this._logger.error('_$dispatch', 'call_listener_failed', err));\n }\n }\n catch (err) {\n this._logger.error('_$dispatch', 'call_listener_failed', err);\n }\n }\n\n for (const listener of removeList) {\n this.unsubscribe(listener.callback);\n }\n }\n\n /**\n * Subscribe to context changes.\n */\n subscribe(listenerCallback: ListenerCallback<this, T>, options: SubscribeOptions = {}): SubscribeResult {\n this._logger.logMethodArgs?.('subscribe', {options});\n\n const _listenerObject: Observer<this, T> = {\n callback: listenerCallback,\n options,\n };\n\n let callbackExecuted = false;\n const data = this._$data;\n if (data !== undefined && options.receivePrevious === true && options.disabled !== true) {\n // Run callback for old dispatch signal\n callbackExecuted = true;\n setTimeout(() => {\n try {\n const ret = listenerCallback.call(this, data);\n if (ret instanceof Promise) {\n ret.catch((err) => this._logger.error('subscribe.receivePrevious', 'call_signal_callback_failed', err));\n }\n }\n catch (err) {\n this._logger.error('subscribe.receivePrevious', 'call_signal_callback_failed', err);\n }\n }, 0);\n }\n\n // If once then must remove listener after first callback called! then why push it to listenerList?!\n if (options.once !== true || callbackExecuted === true) {\n if (options.priority === true) {\n this._$observers.unshift(_listenerObject);\n }\n else {\n this._$observers.push(_listenerObject);\n }\n }\n\n return {\n unsubscribe: this.unsubscribe.bind(this, listenerCallback),\n };\n }\n\n /**\n * Unsubscribe from context.\n */\n unsubscribe(listenerCallback: ListenerCallback<this, T>): void {\n this._logger.logMethod?.('unsubscribe');\n const listenerIndex = this._$observers.findIndex((listener) => listener.callback === listenerCallback);\n if (listenerIndex !== -1) {\n void this._$observers.splice(listenerIndex, 1);\n }\n }\n\n /**\n * Clear current data without notify subscribers.\n *\n * `receivePrevious` in new subscribers not work until new a notify changes the data.\n */\n protected _clear(): void {\n this._logger.logMethod?.('_clear');\n this._$data = undefined;\n }\n\n /**\n * Get the data of next notify.\n */\n protected _untilNewNotify(): Promise<T> {\n this._logger.logMethod?.('_untilNewNotify');\n return new Promise((resolve) => {\n this.subscribe(resolve, {\n once: true,\n priority: true,\n receivePrevious: false,\n });\n });\n }\n}\n"]}
1
+ {"version":3,"file":"observable.js","sourceRoot":"","sources":["src/observable.ts"],"names":[],"mappings":"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","sourcesContent":["import {createLogger, definePackage} from '@alwatr/logger';\n\nimport type {SubscribeOptions, ListenerCallback, Observer, SubscribeResult, AlwatrObservableInterface} from './type.js';\n\ndefinePackage('signal', '2.x');\n\n/**\n * Alwatr base signal.\n */\nexport abstract class AlwatrObservable<T> implements AlwatrObservableInterface<T> {\n protected _name;\n protected _logger;\n protected _$data?: T;\n protected _$observers: Observer<this, T>[] = [];\n\n constructor(config: {name: string; loggerPrefix?: string}) {\n config.loggerPrefix ??= 'signal';\n this._name = config.name;\n this._logger = createLogger(`{${config.loggerPrefix}: ${this._name}}`);\n this._logger.logMethod?.('constructor');\n }\n\n /**\n * Get data.\n *\n * Return undefined if signal not notify before or expired.\n */\n protected _getData(): T | undefined {\n this._logger.logMethodFull?.('_getData', {}, this._$data);\n return this._$data;\n }\n\n /**\n * Execute all observers and remember data.\n */\n protected _notify(data: T): void {\n this._logger.logMethodArgs?.('_notify', data);\n this._$data = data;\n setTimeout(() => this._$dispatch(data), 0);\n }\n\n /**\n * Execute all observers callback.\n */\n protected _$dispatch(data: T): void {\n const removeList: Observer<this, T>[] = [];\n\n for (const listener of this._$observers) {\n if (listener.options.disabled) continue;\n if (listener.options.once) removeList.push(listener);\n\n try {\n const ret = listener.callback.call(this, data);\n if (ret instanceof Promise) {\n ret.catch((err) => this._logger.error('_$dispatch', 'call_listener_failed', err));\n }\n }\n catch (err) {\n this._logger.error('_$dispatch', 'call_listener_failed', err);\n }\n }\n\n for (const listener of removeList) {\n this.unsubscribe(listener.callback);\n }\n }\n\n /**\n * Subscribe to context changes.\n */\n subscribe(listenerCallback: ListenerCallback<this, T>, options: SubscribeOptions = {}): SubscribeResult {\n this._logger.logMethodArgs?.('subscribe', {options});\n\n const _listenerObject: Observer<this, T> = {\n callback: listenerCallback,\n options,\n };\n\n let callbackExecuted = false;\n const data = this._$data;\n if (data !== undefined && options.receivePrevious === true && options.disabled !== true) {\n // Run callback for old dispatch signal\n callbackExecuted = true;\n setTimeout(() => {\n try {\n const ret = listenerCallback.call(this, data);\n if (ret instanceof Promise) {\n ret.catch((err) => this._logger.error('subscribe.receivePrevious', 'call_signal_callback_failed', err));\n }\n }\n catch (err) {\n this._logger.error('subscribe.receivePrevious', 'call_signal_callback_failed', err);\n }\n }, 0);\n }\n\n // If once then must remove listener after first callback called! then why push it to listenerList?!\n if (options.once !== true || callbackExecuted === true) {\n if (options.priority === true) {\n this._$observers.unshift(_listenerObject);\n }\n else {\n this._$observers.push(_listenerObject);\n }\n }\n\n return {\n unsubscribe: this.unsubscribe.bind(this, listenerCallback),\n };\n }\n\n /**\n * Unsubscribe from context.\n */\n unsubscribe(listenerCallback: ListenerCallback<this, T>): void {\n this._logger.logMethod?.('unsubscribe');\n const listenerIndex = this._$observers.findIndex((listener) => listener.callback === listenerCallback);\n if (listenerIndex !== -1) {\n void this._$observers.splice(listenerIndex, 1);\n }\n }\n\n /**\n * Clear current data without notify subscribers.\n *\n * `receivePrevious` in new subscribers not work until new a notify changes the data.\n */\n protected _clear(): void {\n this._logger.logMethod?.('_clear');\n this._$data = undefined;\n }\n\n /**\n * Get the data of next notify.\n */\n protected _untilNewNotify(): Promise<T> {\n this._logger.logMethod?.('_untilNewNotify');\n return new Promise((resolve) => {\n this.subscribe(resolve, {\n once: true,\n priority: true,\n receivePrevious: false,\n });\n });\n }\n}\n"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@alwatr/signal",
3
- "version": "2.0.0",
3
+ "version": "2.0.1",
4
4
  "description": "Elegant powerful event system for handle global signals and states written in tiny TypeScript module.",
5
5
  "keywords": [
6
6
  "signal",
@@ -29,10 +29,10 @@
29
29
  "url": "https://github.com/AliMD/alwatr-signal/issues"
30
30
  },
31
31
  "dependencies": {
32
- "@alwatr/logger": "^1.1.5",
32
+ "@alwatr/logger": "^2.1.1",
33
33
  "@alwatr/type": "^1.1.4",
34
- "@alwatr/util": "^1.2.3",
34
+ "@alwatr/util": "^1.2.8",
35
35
  "tslib": "^2.6.2"
36
36
  },
37
- "gitHead": "1196deebb143a163b2a4b520ff3bb60bfd5399c4"
37
+ "gitHead": "df6d5933c54152dae9d782644448bb7f95550765"
38
38
  }