improve api

This commit is contained in:
Rene Haas
2022-10-22 13:13:36 +02:00
parent ef7466bb56
commit 77e8fdf064
3 changed files with 28 additions and 20 deletions
+21 -18
View File
@@ -66,14 +66,16 @@ export interface Environment {
* Sets a new default Initialization. * Sets a new default Initialization.
* If the new default Initialization is partially filled, its deeply merged with the current default Initialization. * If the new default Initialization is partially filled, its deeply merged with the current default Initialization.
* @param newDefaultInitialization The new default Initialization. * @param newDefaultInitialization The new default Initialization.
* @returns The current default Initialization.
*/ */
setDefaultInitialization(newDefaultInitialization: DeepPartial<Initialization>): void; setDefaultInitialization(newDefaultInitialization: DeepPartial<Initialization>): Initialization;
/** /**
* Sets new default Options. * Sets new default Options.
* If the new default Options are partially filled, they're deeply merged with the current default Options. * If the new default Options are partially filled, they're deeply merged with the current default Options.
* @param newDefaultOptions The new default Options. * @param newDefaultOptions The new default Options.
* @returns The current default options.
*/ */
setDefaultOptions(newDefaultOptions: DeepPartial<Options>): void; setDefaultOptions(newDefaultOptions: DeepPartial<Options>): Options;
} }
export interface InternalEnvironment { export interface InternalEnvironment {
@@ -87,9 +89,9 @@ export interface InternalEnvironment {
readonly _staticDefaultOptions: Options; readonly _staticDefaultOptions: Options;
_addListener(listener: EventListener<EnvironmentEventMap, '_'>): () => void; _addListener(listener: EventListener<EnvironmentEventMap, '_'>): () => void;
_getDefaultInitialization(): Initialization; _getDefaultInitialization(): Initialization;
_setDefaultInitialization(newInitialization: DeepPartial<Initialization>): void; _setDefaultInitialization(newInitialization: DeepPartial<Initialization>): Initialization;
_getDefaultOptions(): Options; _getDefaultOptions(): Options;
_setDefaultOptions(newDefaultOptions: DeepPartial<Options>): void; _setDefaultOptions(newDefaultOptions: DeepPartial<Options>): Options;
} }
let environmentInstance: InternalEnvironment; let environmentInstance: InternalEnvironment;
@@ -210,6 +212,14 @@ const createEnvironment = (): InternalEnvironment => {
}, },
}; };
const staticDefaultOptions = assignDeep({}, defaultOptions); const staticDefaultOptions = assignDeep({}, defaultOptions);
const getDefaultOptions = (assignDeep as typeof assignDeep<Options, Options>).bind(
0,
{} as Options,
staticDefaultOptions
);
const getDefaultInitialization = (
assignDeep as typeof assignDeep<Initialization, Initialization>
).bind(0, {} as Initialization, staticDefaultInitialization);
const env: InternalEnvironment = { const env: InternalEnvironment = {
_nativeScrollbarsSize: nativeScrollbarsSize, _nativeScrollbarsSize: nativeScrollbarsSize,
@@ -219,20 +229,13 @@ const createEnvironment = (): InternalEnvironment => {
_rtlScrollBehavior: getRtlScrollBehavior(envElm, envChildElm), _rtlScrollBehavior: getRtlScrollBehavior(envElm, envChildElm),
_flexboxGlue: getFlexboxGlue(envElm, envChildElm), _flexboxGlue: getFlexboxGlue(envElm, envChildElm),
_addListener: (listener) => addEvent('_', listener), _addListener: (listener) => addEvent('_', listener),
_getDefaultInitialization: ( _getDefaultInitialization: getDefaultInitialization,
assignDeep as typeof assignDeep<Initialization, Initialization> _setDefaultInitialization: (newInitializationStrategy) =>
).bind(0, {} as Initialization, staticDefaultInitialization), assignDeep(staticDefaultInitialization, newInitializationStrategy) &&
_setDefaultInitialization(newInitializationStrategy) { getDefaultInitialization(),
assignDeep(staticDefaultInitialization, newInitializationStrategy); _getDefaultOptions: getDefaultOptions,
}, _setDefaultOptions: (newDefaultOptions) =>
_getDefaultOptions: (assignDeep as typeof assignDeep<Options, Options>).bind( assignDeep(staticDefaultOptions, newDefaultOptions) && getDefaultOptions(),
0,
{} as Options,
staticDefaultOptions
),
_setDefaultOptions(newDefaultOptions) {
assignDeep(staticDefaultOptions, newDefaultOptions);
},
_staticDefaultInitialization: assignDeep({}, staticDefaultInitialization), _staticDefaultInitialization: assignDeep({}, staticDefaultInitialization),
_staticDefaultOptions: assignDeep({}, staticDefaultOptions), _staticDefaultOptions: assignDeep({}, staticDefaultOptions),
}; };
@@ -166,6 +166,7 @@ export interface OverlayScrollbars {
* Sets the options of the instance. * Sets the options of the instance.
* If the new options are partially filled, they're deeply merged with the current options. * If the new options are partially filled, they're deeply merged with the current options.
* @param newOptions The new options. * @param newOptions The new options.
* @returns Returns the current options of the instance.
*/ */
options(newOptions: DeepPartial<Options>): Options; options(newOptions: DeepPartial<Options>): Options;
@@ -173,12 +174,14 @@ export interface OverlayScrollbars {
* Adds an event listener to the instance. * Adds an event listener to the instance.
* @param name The name of the event. * @param name The name of the event.
* @param listener The listener which is invoked on that event. * @param listener The listener which is invoked on that event.
* @returns Returns a function which removes the added listeners.
*/ */
on<N extends keyof EventListenerMap>(name: N, listener: EventListener<N>): () => void; on<N extends keyof EventListenerMap>(name: N, listener: EventListener<N>): () => void;
/** /**
* Adds multiple event listeners to the instance. * Adds multiple event listeners to the instance.
* @param name The name of the event. * @param name The name of the event.
* @param listener The listeners which are invoked on that event. * @param listener The listeners which are invoked on that event.
* @returns Returns a function which removes the added listeners.
*/ */
on<N extends keyof EventListenerMap>(name: N, listener: EventListener<N>[]): () => void; on<N extends keyof EventListenerMap>(name: N, listener: EventListener<N>[]): () => void;
@@ -90,7 +90,7 @@ describe('environment', () => {
expect(_getDefaultOptions()).not.toBe(defaultOptions); expect(_getDefaultOptions()).not.toBe(defaultOptions);
expect(_getDefaultOptions()).toEqual(defaultOptions); expect(_getDefaultOptions()).toEqual(defaultOptions);
_setDefaultOptions(newDefaultOptions); expect(_setDefaultOptions(newDefaultOptions)).toEqual(_getDefaultOptions());
expect(_getDefaultOptions()).toEqual({ expect(_getDefaultOptions()).toEqual({
...defaultOptions, ...defaultOptions,
@@ -125,7 +125,9 @@ describe('environment', () => {
expect(_getDefaultInitialization()).not.toBe(defaultInitialization); expect(_getDefaultInitialization()).not.toBe(defaultInitialization);
expect(_getDefaultInitialization()).toEqual(defaultInitialization); expect(_getDefaultInitialization()).toEqual(defaultInitialization);
_setDefaultInitialization(newDefaultInitialization); expect(_setDefaultInitialization(newDefaultInitialization)).toEqual(
_getDefaultInitialization()
);
expect(_getDefaultInitialization()).toEqual({ expect(_getDefaultInitialization()).toEqual({
...defaultInitialization, ...defaultInitialization,