diff --git a/packages/logger/src/logger.ts b/packages/logger/src/logger.ts index b0774f3..067d717 100644 --- a/packages/logger/src/logger.ts +++ b/packages/logger/src/logger.ts @@ -44,7 +44,7 @@ export class GecutLogger { timeEnd?: (label: string) => void; sub(domain: string, _devMode = this.devMode) { - return new GecutLogger(`${this.domain} ⬅️ ${domain}`, _devMode); + return new GecutLogger(`${this.domain} ⬅ ${domain}`, _devMode); } private static stabilizeDomain(domain: string): string { diff --git a/packages/signal/package.json b/packages/signal/package.json index cf7f179..905ca1a 100644 --- a/packages/signal/package.json +++ b/packages/signal/package.json @@ -39,6 +39,7 @@ "directory": "packages/signal" }, "dependencies": { - "@gecut/logger": "workspace:^" + "@gecut/logger": "workspace:^", + "@gecut/types": "workspace:^" } } diff --git a/packages/signal/src/libraries/_signal.ts b/packages/signal/src/libraries/_signal.ts index 4b023ba..197bcec 100644 --- a/packages/signal/src/libraries/_signal.ts +++ b/packages/signal/src/libraries/_signal.ts @@ -1,6 +1,6 @@ -import { GecutLogger } from '@gecut/logger'; +import {GecutLogger} from '@gecut/logger'; -import type { SubscribeOptions, Subscriber } from '../type.js'; +import type {SubscribeOptions, Subscriber} from '../type.js'; /** * A Signal object allows for subscribing to notifications with callbacks. @@ -17,7 +17,7 @@ export abstract class Signal { options: Required; }[] = []; - protected value?: T; + protected value: T | undefined; protected hasDispatched = false; protected log: GecutLogger; @@ -26,11 +26,9 @@ export abstract class Signal { * @param {Subscriber} callback - The callback to unsubscribe. */ unsubscribe(callback: Subscriber): void { - this.log.methodArgs?.('unsubscribe', { callback }); + this.log.methodArgs?.('unsubscribe', {callback}); - this.subscribers = this.subscribers.filter( - (subscriber) => subscriber.callback !== callback - ); + this.subscribers = this.subscribers.filter((subscriber) => subscriber.callback !== callback); } /** @@ -40,36 +38,28 @@ export abstract class Signal { * @return {unknown} The `subscribe` method returns an object with a single property `unsubscribe`, which is a * function that can be called to unsubscribe from the subscription. */ - subscribe( - callback: Subscriber, - options: SubscribeOptions = {} - ): { unsubscribe: () => void } { + subscribe(callback: Subscriber, options: SubscribeOptions = {}): {unsubscribe: () => void} { const resolvedOptions: Required = { once: false, priority: 0, disabled: false, receivePrevious: false, - ...options + ...options, }; - const newSubscriber = { callback, options: resolvedOptions }; + const newSubscriber = {callback, options: resolvedOptions}; this.log.methodArgs?.('subscribe', newSubscriber); this.subscribers.push(newSubscriber); this.subscribers.sort((a, b) => b.options.priority - a.options.priority); - if ( - resolvedOptions.receivePrevious && - this.hasDispatched && - this.value && - !resolvedOptions.disabled - ) { + if (resolvedOptions.receivePrevious && this.hasDispatched && this.value && !resolvedOptions.disabled) { callback(this.value); } return { - unsubscribe: this.unsubscribe.bind(this, callback) + unsubscribe: this.unsubscribe.bind(this, callback), }; } @@ -103,7 +93,7 @@ export abstract class Signal { this.subscribe(resolve, { once: true, priority: 1_000, - receivePrevious: false + receivePrevious: false, }); }); } diff --git a/packages/signal/src/libraries/context.ts b/packages/signal/src/libraries/context.ts index bd2b732..6b274ad 100644 --- a/packages/signal/src/libraries/context.ts +++ b/packages/signal/src/libraries/context.ts @@ -51,8 +51,8 @@ export class ContextSignal extends Signal { const value = this.getValue(); - if (value) { - this.setValue(value); + if (this.hasDispatched) { + this.setValue(value as T); } } } diff --git a/packages/signal/tsconfig.json b/packages/signal/tsconfig.json index 7bdc446..8b5da8c 100644 --- a/packages/signal/tsconfig.json +++ b/packages/signal/tsconfig.json @@ -9,5 +9,5 @@ "include": ["src/**/*.ts"], "exclude": [], - "references": [{"path": "../logger"}] + "references": [{"path": "../logger"}, {"path": "../types"}] } diff --git a/yarn.lock b/yarn.lock index 8dab72b..5b43e7d 100644 --- a/yarn.lock +++ b/yarn.lock @@ -105,6 +105,7 @@ __metadata: resolution: "@gecut/signal@workspace:packages/signal" dependencies: "@gecut/logger": "workspace:^" + "@gecut/types": "workspace:^" languageName: unknown linkType: soft