@wiggindev/utils 0.2.12 → 0.2.13
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/package.json +8 -3
- package/__tests__/events.test.ts +0 -30
- package/src/events/document.ts +0 -31
- package/src/events/element.ts +0 -34
- package/src/events/eventTypes.ts +0 -9
- package/src/events/index.ts +0 -11
- package/src/events/window.ts +0 -31
- package/src/index.ts +0 -5
- package/src/noop.ts +0 -1
- package/src/throttle.ts +0 -22
- package/src/types/Callback.ts +0 -2
- package/src/types/LiteralUnion.ts +0 -7
- package/src/types/index.ts +0 -2
- package/tsconfig.json +0 -8
package/package.json
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
{
|
2
2
|
"name": "@wiggindev/utils",
|
3
3
|
"description": "Various utilities that I use in my projects",
|
4
|
-
"version": "0.2.
|
4
|
+
"version": "0.2.13",
|
5
5
|
"author": {
|
6
6
|
"name": "Andrew Wiggin",
|
7
7
|
"email": "andrew@wiggin.dev",
|
@@ -12,6 +12,10 @@
|
|
12
12
|
"url": "https://github.com/wiggindev/-wiggindev.git",
|
13
13
|
"directory": "packages/utils"
|
14
14
|
},
|
15
|
+
"files": [
|
16
|
+
"dist",
|
17
|
+
"README.md"
|
18
|
+
],
|
15
19
|
"type": "module",
|
16
20
|
"source": "src/index.ts",
|
17
21
|
"exports": {
|
@@ -23,8 +27,9 @@
|
|
23
27
|
"unpkg": "dist/index.umd.js",
|
24
28
|
"types": "dist/index.d.ts",
|
25
29
|
"scripts": {
|
26
|
-
"
|
27
|
-
"
|
30
|
+
"clean": "rm -rf dist",
|
31
|
+
"build": "yarn clean && microbundle",
|
32
|
+
"dev": "microbundle watch"
|
28
33
|
},
|
29
34
|
"devDependencies": {
|
30
35
|
"microbundle": "^0.15.0"
|
package/__tests__/events.test.ts
DELETED
@@ -1,30 +0,0 @@
|
|
1
|
-
import { EventName, events, EventListener, noop } from '../src';
|
2
|
-
|
3
|
-
type DocumentEventName = EventName<DocumentEventMap>;
|
4
|
-
type DocumentEventListener = EventListener<DocumentEventMap, DocumentEventName>;
|
5
|
-
|
6
|
-
describe('document events', () => {
|
7
|
-
let eventMap: Partial<Record<DocumentEventName, DocumentEventListener>> =
|
8
|
-
{};
|
9
|
-
|
10
|
-
beforeEach(() => {
|
11
|
-
eventMap = {};
|
12
|
-
|
13
|
-
document.addEventListener = jest.fn(
|
14
|
-
(event: DocumentEventName, callback: DocumentEventListener) =>
|
15
|
-
(eventMap[event] = callback)
|
16
|
-
);
|
17
|
-
document.removeEventListener = jest.fn(
|
18
|
-
(event: DocumentEventName, callback: DocumentEventListener) =>
|
19
|
-
delete eventMap[event]
|
20
|
-
);
|
21
|
-
});
|
22
|
-
|
23
|
-
it('should add an event listener to the document', () => {
|
24
|
-
jest.spyOn(document, 'addEventListener');
|
25
|
-
events.document.on('testEvent', noop);
|
26
|
-
expect(eventMap['testEvent']).toBeDefined();
|
27
|
-
// eslint-disable-next-line @typescript-eslint/unbound-method
|
28
|
-
expect(document.addEventListener).toHaveBeenCalled();
|
29
|
-
});
|
30
|
-
});
|
package/src/events/document.ts
DELETED
@@ -1,31 +0,0 @@
|
|
1
|
-
import { EventListener, EventName, DomEventListener } from './eventTypes';
|
2
|
-
|
3
|
-
export const on = <E extends EventName<DocumentEventMap>>(
|
4
|
-
event: E,
|
5
|
-
listener: EventListener<DocumentEventMap, E>
|
6
|
-
) => {
|
7
|
-
document.addEventListener(event, listener as DomEventListener);
|
8
|
-
};
|
9
|
-
|
10
|
-
export const off = <E extends EventName<DocumentEventMap>>(
|
11
|
-
event: E,
|
12
|
-
listener: EventListener<DocumentEventMap, E>
|
13
|
-
) => {
|
14
|
-
document.removeEventListener(event, listener as DomEventListener);
|
15
|
-
};
|
16
|
-
|
17
|
-
export const once = <E extends EventName<DocumentEventMap>>(
|
18
|
-
event: E,
|
19
|
-
listener: EventListener<DocumentEventMap, E>
|
20
|
-
) => {
|
21
|
-
const wrappedListener: EventListener<DocumentEventMap, E> = e => {
|
22
|
-
listener(e);
|
23
|
-
off(event, wrappedListener);
|
24
|
-
};
|
25
|
-
on(event, wrappedListener);
|
26
|
-
};
|
27
|
-
|
28
|
-
export const trigger = (event: string) => {
|
29
|
-
const customEvent = new CustomEvent(event);
|
30
|
-
document.dispatchEvent(customEvent);
|
31
|
-
};
|
package/src/events/element.ts
DELETED
@@ -1,34 +0,0 @@
|
|
1
|
-
import { EventListener, EventName, DomEventListener } from './eventTypes';
|
2
|
-
|
3
|
-
export const on = <E extends EventName<HTMLElementEventMap>>(
|
4
|
-
element: HTMLElement,
|
5
|
-
event: E,
|
6
|
-
listener: EventListener<HTMLElementEventMap, E>
|
7
|
-
) => {
|
8
|
-
element.addEventListener(event, listener as DomEventListener);
|
9
|
-
};
|
10
|
-
|
11
|
-
export const off = <E extends EventName<HTMLElementEventMap>>(
|
12
|
-
element: HTMLElement,
|
13
|
-
event: E,
|
14
|
-
listener: EventListener<HTMLElementEventMap, E>
|
15
|
-
) => {
|
16
|
-
element.removeEventListener(event, listener as DomEventListener);
|
17
|
-
};
|
18
|
-
|
19
|
-
export const once = <E extends EventName<HTMLElementEventMap>>(
|
20
|
-
element: HTMLElement,
|
21
|
-
event: E,
|
22
|
-
listener: EventListener<HTMLElementEventMap, E>
|
23
|
-
) => {
|
24
|
-
const wrappedListener: EventListener<HTMLElementEventMap, E> = e => {
|
25
|
-
listener(e);
|
26
|
-
off(element, event, wrappedListener);
|
27
|
-
};
|
28
|
-
on(element, event, wrappedListener);
|
29
|
-
};
|
30
|
-
|
31
|
-
export const trigger = (element: HTMLElement, event: string) => {
|
32
|
-
const customEvent = new CustomEvent(event);
|
33
|
-
element.dispatchEvent(customEvent);
|
34
|
-
};
|
package/src/events/eventTypes.ts
DELETED
@@ -1,9 +0,0 @@
|
|
1
|
-
import { LiteralUnion } from '../types';
|
2
|
-
|
3
|
-
type EventMap = WindowEventMap | DocumentEventMap | HTMLElementEventMap;
|
4
|
-
|
5
|
-
export type EventName<M extends EventMap> = LiteralUnion<keyof M, string>;
|
6
|
-
export type EventListener<M extends EventMap, N extends EventName<M>> = (
|
7
|
-
event: N extends keyof M ? M[N] : Event
|
8
|
-
) => void;
|
9
|
-
export type DomEventListener = (event: Event) => void;
|
package/src/events/index.ts
DELETED
@@ -1,11 +0,0 @@
|
|
1
|
-
import * as documentEvents from './document';
|
2
|
-
import * as windowEvents from './window';
|
3
|
-
import * as elementEvents from './element';
|
4
|
-
|
5
|
-
export const events = {
|
6
|
-
document: documentEvents,
|
7
|
-
window: windowEvents,
|
8
|
-
element: elementEvents,
|
9
|
-
};
|
10
|
-
|
11
|
-
export type { EventListener, EventName } from './eventTypes';
|
package/src/events/window.ts
DELETED
@@ -1,31 +0,0 @@
|
|
1
|
-
import { EventListener, EventName, DomEventListener } from './eventTypes';
|
2
|
-
|
3
|
-
export const on = <E extends EventName<WindowEventMap>>(
|
4
|
-
event: E,
|
5
|
-
listener: EventListener<WindowEventMap, E>
|
6
|
-
) => {
|
7
|
-
window.addEventListener(event, listener as DomEventListener);
|
8
|
-
};
|
9
|
-
|
10
|
-
export const off = <E extends EventName<WindowEventMap>>(
|
11
|
-
event: E,
|
12
|
-
listener: EventListener<WindowEventMap, E>
|
13
|
-
) => {
|
14
|
-
window.removeEventListener(event, listener as DomEventListener);
|
15
|
-
};
|
16
|
-
|
17
|
-
export const once = <E extends EventName<WindowEventMap>>(
|
18
|
-
event: E,
|
19
|
-
listener: EventListener<WindowEventMap, E>
|
20
|
-
) => {
|
21
|
-
const wrappedListener: EventListener<WindowEventMap, E> = e => {
|
22
|
-
listener(e);
|
23
|
-
off(event, wrappedListener);
|
24
|
-
};
|
25
|
-
on(event, wrappedListener);
|
26
|
-
};
|
27
|
-
|
28
|
-
export const trigger = (event: string) => {
|
29
|
-
const customEvent = new CustomEvent(event);
|
30
|
-
window.dispatchEvent(customEvent);
|
31
|
-
};
|
package/src/index.ts
DELETED
package/src/noop.ts
DELETED
@@ -1 +0,0 @@
|
|
1
|
-
export const noop = () => undefined;
|
package/src/throttle.ts
DELETED
@@ -1,22 +0,0 @@
|
|
1
|
-
import { Callback } from './types';
|
2
|
-
|
3
|
-
type ThrottledFunction<C extends Callback> = (
|
4
|
-
...args: Parameters<C>
|
5
|
-
) => ReturnType<C>;
|
6
|
-
|
7
|
-
export const throttle = <C extends Callback>(
|
8
|
-
callback: C,
|
9
|
-
limit: number
|
10
|
-
): ThrottledFunction<C> => {
|
11
|
-
let waiting: boolean;
|
12
|
-
let prev: ReturnType<C>;
|
13
|
-
return (...args: Parameters<C>) => {
|
14
|
-
if (!waiting) {
|
15
|
-
waiting = true;
|
16
|
-
setTimeout(() => (waiting = false), limit);
|
17
|
-
prev = callback.apply(this, args) as ReturnType<C>;
|
18
|
-
}
|
19
|
-
// eslint-disable-next-line @typescript-eslint/no-unsafe-return
|
20
|
-
return prev;
|
21
|
-
};
|
22
|
-
};
|
package/src/types/Callback.ts
DELETED
@@ -1,7 +0,0 @@
|
|
1
|
-
/** from type-fest: https://github.com/sindresorhus/type-fest/blob/main/source/literal-union.d.ts */
|
2
|
-
|
3
|
-
type Primitive = null | undefined | string | number | boolean | symbol | bigint;
|
4
|
-
|
5
|
-
export type LiteralUnion<LiteralType, BaseType extends Primitive> =
|
6
|
-
| LiteralType
|
7
|
-
| (BaseType & Record<never, never>);
|
package/src/types/index.ts
DELETED