From 270b4453e60abf4c126adc97c7f5c92a8da132db Mon Sep 17 00:00:00 2001 From: Rene Haas Date: Wed, 9 Nov 2022 11:01:30 +0100 Subject: [PATCH] improve types --- .../src/overlayscrollbars.component.ts | 10 +-- .../test/overlayscrollbars.component.spec.ts | 10 +-- .../src/OverlayScrollbarsComponent.vue | 14 ++-- packages/overlayscrollbars/src/environment.ts | 8 +- .../overlayscrollbars/src/eventListeners.ts | 14 ++-- packages/overlayscrollbars/src/index.ts | 6 +- .../src/overlayscrollbars.ts | 10 +-- .../src/support/eventListeners.ts | 78 +++++++++---------- 8 files changed, 75 insertions(+), 75 deletions(-) diff --git a/packages/overlayscrollbars-ngx/src/overlayscrollbars.component.ts b/packages/overlayscrollbars-ngx/src/overlayscrollbars.component.ts index 2d0b04d..24fde99 100644 --- a/packages/overlayscrollbars-ngx/src/overlayscrollbars.component.ts +++ b/packages/overlayscrollbars-ngx/src/overlayscrollbars.component.ts @@ -10,7 +10,7 @@ import { AfterViewInit, } from '@angular/core'; import { OverlayScrollbars } from 'overlayscrollbars'; -import type { PartialOptions, EventListeners, EventListenerMap } from 'overlayscrollbars'; +import type { PartialOptions, EventListeners, EventListenerArgs } from 'overlayscrollbars'; import { OverlayScrollbarsDirective } from './overlayscrollbars.directive'; const mergeEventListeners = (emits: EventListeners, events: EventListeners) => @@ -43,13 +43,13 @@ export class OverlayScrollbarsComponent implements OnDestroy, AfterViewInit { events?: EventListeners | false | null; @Output('osInitialized') - onInitialized = new EventEmitter(); + onInitialized = new EventEmitter(); @Output('osUpdated') - onUpdated = new EventEmitter(); + onUpdated = new EventEmitter(); @Output('osDestroyed') - onDestroyed = new EventEmitter(); + onDestroyed = new EventEmitter(); @Output('osScroll') - onScroll = new EventEmitter(); + onScroll = new EventEmitter(); @ViewChild('content') private contentRef?: ElementRef; diff --git a/packages/overlayscrollbars-ngx/test/overlayscrollbars.component.spec.ts b/packages/overlayscrollbars-ngx/test/overlayscrollbars.component.spec.ts index f6c6c86..3993039 100644 --- a/packages/overlayscrollbars-ngx/test/overlayscrollbars.component.spec.ts +++ b/packages/overlayscrollbars-ngx/test/overlayscrollbars.component.spec.ts @@ -7,7 +7,7 @@ import { OverlayscrollbarsModule, } from '~/public-api'; import type { ComponentFixture } from '@angular/core/testing'; -import type { EventListenerMap } from 'overlayscrollbars'; +import type { EventListenerArgs } from 'overlayscrollbars'; @Component({ template: ` @@ -45,19 +45,19 @@ class Test { @ViewChild('ref', { read: OverlayScrollbarsComponent }) ref?: OverlayScrollbarsComponent; - onInitialized(args: EventListenerMap['initialized']) { + onInitialized(args: EventListenerArgs['initialized']) { this.initialized?.(args); } - onUpdated(args: EventListenerMap['updated']) { + onUpdated(args: EventListenerArgs['updated']) { this.updated?.(args); } - onDestroyed(args: EventListenerMap['destroyed']) { + onDestroyed(args: EventListenerArgs['destroyed']) { this.destroyed?.(args); } - onScroll(args: EventListenerMap['scroll']) { + onScroll(args: EventListenerArgs['scroll']) { this.scroll?.(args); } diff --git a/packages/overlayscrollbars-vue/src/OverlayScrollbarsComponent.vue b/packages/overlayscrollbars-vue/src/OverlayScrollbarsComponent.vue index 793f08b..f6ebaee 100644 --- a/packages/overlayscrollbars-vue/src/OverlayScrollbarsComponent.vue +++ b/packages/overlayscrollbars-vue/src/OverlayScrollbarsComponent.vue @@ -6,10 +6,10 @@ import type { OverlayScrollbarsComponentRef, } from './OverlayScrollbarsComponent.types'; import type { PropType } from 'vue'; -import type { EventListeners, EventListenerMap } from 'overlayscrollbars'; +import type { EventListeners, EventListenerArgs } from 'overlayscrollbars'; type EmitEventsMap = { - [N in keyof EventListenerMap]: `os${Capitalize}`; + [N in keyof EventListenerArgs]: `os${Capitalize}`; }; const emitEvents: EmitEventsMap = { @@ -27,10 +27,10 @@ const props = defineProps({ events: { type: Object as PropType }, }); const emits = defineEmits<{ - (name: 'osInitialized', ...args: EventListenerMap['initialized']): void; - (name: 'osUpdated', ...args: EventListenerMap['updated']): void; - (name: 'osDestroyed', ...args: EventListenerMap['destroyed']): void; - (name: 'osScroll', ...args: EventListenerMap['scroll']): void; + (name: 'osInitialized', ...args: EventListenerArgs['initialized']): void; + (name: 'osUpdated', ...args: EventListenerArgs['updated']): void; + (name: 'osDestroyed', ...args: EventListenerArgs['destroyed']): void; + (name: 'osScroll', ...args: EventListenerArgs['scroll']): void; }>(); const elementRef = shallowRef(null); @@ -72,7 +72,7 @@ watch( ).reduce((obj: EventListeners, name: N) => { const eventListener = currEvents[name]; obj[name] = [ - (...args: EventListenerMap[N]) => + (...args: EventListenerArgs[N]) => emits( emitEvents[name], // @ts-ignore diff --git a/packages/overlayscrollbars/src/environment.ts b/packages/overlayscrollbars/src/environment.ts index c3ce5c0..dabc763 100644 --- a/packages/overlayscrollbars/src/environment.ts +++ b/packages/overlayscrollbars/src/environment.ts @@ -32,7 +32,7 @@ import type { Options, PartialOptions } from '~/options'; import type { ScrollbarsHidingPluginInstance } from '~/plugins'; import type { Initialization, PartialInitialization } from '~/initialization'; -type EnvironmentEventMap = { +type EnvironmentEventArgs = { z: []; r: []; }; @@ -88,8 +88,8 @@ export interface InternalEnvironment { readonly _cssCustomProperties: boolean; readonly _staticDefaultInitialization: Initialization; readonly _staticDefaultOptions: Options; - _addZoomListener(listener: EventListener): () => void; - _addResizeListener(listener: EventListener): () => void; + _addZoomListener(listener: EventListener): () => void; + _addResizeListener(listener: EventListener): () => void; _getDefaultInitialization(): Initialization; _setDefaultInitialization(newInitialization: PartialInitialization): Initialization; _getDefaultOptions(): Options; @@ -183,7 +183,7 @@ const createEnvironment = (): InternalEnvironment => { const envDOM = createDOM(`
`); const envElm = envDOM[0] as HTMLElement; const envChildElm = envElm.firstChild as HTMLElement; - const [addEvent, , triggerEvent] = createEventListenerHub(); + const [addEvent, , triggerEvent] = createEventListenerHub(); const [updateNativeScrollbarSizeCache, getNativeScrollbarSizeCache] = createCache( { _initialValue: getNativeScrollbarSize(body, envElm, envChildElm), diff --git a/packages/overlayscrollbars/src/eventListeners.ts b/packages/overlayscrollbars/src/eventListeners.ts index 8ff2bc6..dfe7df2 100644 --- a/packages/overlayscrollbars/src/eventListeners.ts +++ b/packages/overlayscrollbars/src/eventListeners.ts @@ -40,7 +40,7 @@ export interface OnUpdatedEventListenerArgs { /** * A mapping between event names and their listener arguments. */ -export type EventListenerMap = { +export type EventListenerArgs = { /** Triggered after all elements are initialized and appended. */ initialized: [instance: OverlayScrollbars]; /** Triggered after an update. */ @@ -58,19 +58,19 @@ export type EventListenerMap = { * [eventName: string]: EventListener | EventListener[] * } */ -export type EventListeners = GeneralEventListeners; +export type EventListeners = GeneralEventListeners; /** An event listener. */ -export type EventListener = GeneralEventListener< - EventListenerMap, +export type EventListener = GeneralEventListener< + EventListenerArgs, N >; /** A function which adds event listeners. */ -export type AddEvent = GeneralAddEvent; +export type AddEvent = GeneralAddEvent; /** A function which removes event listeners. */ -export type RemoveEvent = GeneralRemoveEvent; +export type RemoveEvent = GeneralRemoveEvent; /** A function which triggers event listeners. */ -export type TriggerEvent = GeneralTriggerEvent; +export type TriggerEvent = GeneralTriggerEvent; diff --git a/packages/overlayscrollbars/src/index.ts b/packages/overlayscrollbars/src/index.ts index c6a723e..38f40f3 100644 --- a/packages/overlayscrollbars/src/index.ts +++ b/packages/overlayscrollbars/src/index.ts @@ -8,13 +8,13 @@ export type { PartialOptions, ReadonlyOptions, OverflowBehavior, - ScrollbarsVisibilityBehavior as ScrollbarVisibilityBehavior, - ScrollbarsAutoHideBehavior as ScrollbarAutoHideBehavior, + ScrollbarsVisibilityBehavior, + ScrollbarsAutoHideBehavior, } from '~/options'; export type { - EventListenerMap, EventListener, EventListeners, + EventListenerArgs, OnUpdatedEventListenerArgs, } from '~/eventListeners'; export type { diff --git a/packages/overlayscrollbars/src/overlayscrollbars.ts b/packages/overlayscrollbars/src/overlayscrollbars.ts index f2ee169..8e48105 100644 --- a/packages/overlayscrollbars/src/overlayscrollbars.ts +++ b/packages/overlayscrollbars/src/overlayscrollbars.ts @@ -20,7 +20,7 @@ import type { Options, PartialOptions, ReadonlyOptions } from '~/options'; import type { Plugin, OptionsValidationPluginInstance, PluginInstance } from '~/plugins'; import type { InitializationTarget } from '~/initialization'; import type { OverflowStyle } from '~/typings'; -import type { EventListenerMap, EventListener, EventListeners } from '~/eventListeners'; +import type { EventListenerArgs, EventListener, EventListeners } from '~/eventListeners'; import type { ScrollbarsSetupElement, ScrollbarStructure, @@ -184,27 +184,27 @@ export interface OverlayScrollbars { * @param listener The listener which is invoked on that event. * @returns Returns a function which removes the added listeners. */ - on(name: N, listener: EventListener): () => void; + on(name: N, listener: EventListener): () => void; /** * Adds multiple event listeners to the instance. * @param name The name of the event. * @param listener The listeners which are invoked on that event. * @returns Returns a function which removes the added listeners. */ - on(name: N, listener: EventListener[]): () => void; + on(name: N, listener: EventListener[]): () => void; /** * Removes an event listener from the instance. * @param name The name of the event. * @param listener The listener which shall be removed. */ - off(name: N, listener: EventListener): void; + off(name: N, listener: EventListener): void; /** * Removes multiple event listeners from the instance. * @param name The name of the event. * @param listener The listeners which shall be removed. */ - off(name: N, listener: EventListener[]): void; + off(name: N, listener: EventListener[]): void; /** * Updates the instance. diff --git a/packages/overlayscrollbars/src/support/eventListeners.ts b/packages/overlayscrollbars/src/support/eventListeners.ts index a2c97c6..6c61349 100644 --- a/packages/overlayscrollbars/src/support/eventListeners.ts +++ b/packages/overlayscrollbars/src/support/eventListeners.ts @@ -2,56 +2,56 @@ import { isArray, isBoolean, isFunction, isString } from '~/support/utils/types' import { keys } from '~/support/utils/object'; import { each, push, from, isEmptyArray, runEachAndClear } from '~/support/utils/array'; -export type EventListener, N extends keyof EventMap> = ( - ...args: EventMap[N] +export type EventListener, N extends keyof EventArgs> = ( + ...args: EventArgs[N] ) => void; -export type EventListeners> = { - [K in keyof EventMap]?: EventListener | EventListener[] | null; +export type EventListeners> = { + [K in keyof EventArgs]?: EventListener | EventListener[] | null; }; -export type RemoveEvent> = { - (name?: N, listener?: EventListener): void; - (name?: N, listener?: EventListener[]): void; - ( +export type RemoveEvent> = { + (name?: N, listener?: EventListener): void; + (name?: N, listener?: EventListener[]): void; + ( name?: N, - listener?: EventListener | EventListener[] + listener?: EventListener | EventListener[] ): void; }; -export type AddEvent> = { - (eventListeners: EventListeners, pure?: boolean): () => void; - (name: N, listener: EventListener): () => void; - (name: N, listener: EventListener[]): () => void; - ( - nameOrEventListeners: N | EventListeners, - listener?: EventListener | EventListener[] | boolean +export type AddEvent> = { + (eventListeners: EventListeners, pure?: boolean): () => void; + (name: N, listener: EventListener): () => void; + (name: N, listener: EventListener[]): () => void; + ( + nameOrEventListeners: N | EventListeners, + listener?: EventListener | EventListener[] | boolean ): () => void; }; -export type TriggerEvent> = { - (name: N, args?: EventMap[N]): void; +export type TriggerEvent> = { + (name: N, args?: EventArgs[N]): void; }; -export type EventListenerHub> = [ - AddEvent, - RemoveEvent, - TriggerEvent +export type EventListenerHub> = [ + AddEvent, + RemoveEvent, + TriggerEvent ]; -const manageListener = , N extends keyof EventMap>( - callback: (listener?: EventListener) => void, - listener?: EventListener | EventListener[] +const manageListener = , N extends keyof EventArgs>( + callback: (listener?: EventListener) => void, + listener?: EventListener | EventListener[] ) => { each(isArray(listener) ? listener : [listener], callback); }; -export const createEventListenerHub = >( - initialEventListeners?: EventListeners -): EventListenerHub => { - const events = new Map>>(); +export const createEventListenerHub = >( + initialEventListeners?: EventListeners +): EventListenerHub => { + const events = new Map>>(); - const removeEvent: RemoveEvent = (name, listener) => { + const removeEvent: RemoveEvent = (name, listener) => { if (name) { const eventSet = events.get(name); manageListener((currListener) => { @@ -67,11 +67,11 @@ export const createEventListenerHub = >( } }; - const addEvent: AddEvent = (( - nameOrEventListeners: keyof EventMap | EventListeners, + const addEvent: AddEvent = (( + nameOrEventListeners: keyof EventArgs | EventListeners, listenerOrPure: - | EventListener - | EventListener[] + | EventListener + | EventListener[] | boolean ) => { if (isString(nameOrEventListeners)) { @@ -88,22 +88,22 @@ export const createEventListenerHub = >( removeEvent(); } - const eventListenerKeys = keys(nameOrEventListeners) as (keyof EventListeners)[]; + const eventListenerKeys = keys(nameOrEventListeners) as (keyof EventListeners)[]; const offFns: (() => void)[] = []; each(eventListenerKeys, (key) => { - const eventListener = (nameOrEventListeners as EventListeners)[key]; + const eventListener = (nameOrEventListeners as EventListeners)[key]; eventListener && push(offFns, addEvent(key, eventListener)); }); return runEachAndClear.bind(0, offFns); - }) as AddEvent; // sorry! + }) as AddEvent; // sorry! - const triggerEvent: TriggerEvent = (name, args) => { + const triggerEvent: TriggerEvent = (name, args) => { const eventSet = events.get(name); each(from(eventSet), (event) => { if (args && !isEmptyArray(args)) { - (event as (...eventArgs: EventMap[keyof EventMap]) => void).apply(0, args as any); + (event as (...eventArgs: EventArgs[keyof EventArgs]) => void).apply(0, args as any); } else { (event as () => void)(); }