tool-shack 0.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/.editorconfig ADDED
@@ -0,0 +1,16 @@
1
+ # Editor configuration, see https://editorconfig.org
2
+ root = true
3
+
4
+ [*]
5
+ charset = utf-8
6
+ indent_style = space
7
+ indent_size = 2
8
+ insert_final_newline = true
9
+ trim_trailing_whitespace = true
10
+
11
+ [*.ts]
12
+ quote_type = single
13
+
14
+ [*.md]
15
+ max_line_length = off
16
+ trim_trailing_whitespace = false
package/README.md ADDED
@@ -0,0 +1 @@
1
+ # tool-shack
@@ -0,0 +1 @@
1
+ export declare const addAsyncEventListener: (elementSelector: string, listeners: Record<string, EventListener | EventListener[]>, acceptBubbling?: boolean) => void;
@@ -0,0 +1,18 @@
1
+ export const addAsyncEventListener = (elementSelector, listeners, acceptBubbling = true) => {
2
+ for (let eventName in listeners) {
3
+ const functionList = (listeners[eventName] instanceof Array ? listeners[eventName] : [listeners[eventName]]);
4
+ functionList.forEach((fn) => document.addEventListener(eventName, (event) => {
5
+ const target = event.target;
6
+ if (!target) {
7
+ return;
8
+ }
9
+ if (!acceptBubbling && target.matches(elementSelector)) {
10
+ fn.call(this, event);
11
+ }
12
+ else if (acceptBubbling && target.closest(elementSelector)) {
13
+ fn.call(this, event);
14
+ }
15
+ }));
16
+ }
17
+ };
18
+ //# sourceMappingURL=addAsyncEventListener.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"addAsyncEventListener.js","sourceRoot":"","sources":["../../src/dom/addAsyncEventListener.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,qBAAqB,GAAG,CACnC,eAAuB,EACvB,SAA0D,EAC1D,cAAc,GAAG,IAAI,EACf,EAAE;IACR,KAAK,IAAI,SAAS,IAAI,SAAS,EAAE;QAC/B,MAAM,YAAY,GAAG,CACnB,SAAS,CAAC,SAAS,CAAC,YAAY,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC,CACnE,CAAC;QAErB,YAAY,CAAC,OAAO,CAAC,CAAC,EAAiB,EAAE,EAAE,CAAC,QAAQ,CAAC,gBAAgB,CAAC,SAAS,EAAE,CAAC,KAAY,EAAE,EAAE;YAChG,MAAM,MAAM,GAAG,KAAK,CAAC,MAAqB,CAAC;YAC3C,IAAI,CAAC,MAAM,EAAE;gBACX,OAAO;aACR;YAED,IAAI,CAAC,cAAc,IAAI,MAAM,CAAC,OAAO,CAAC,eAAe,CAAC,EAAE;gBACtD,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;aACtB;iBAAM,IAAI,cAAc,IAAI,MAAM,CAAC,OAAO,CAAC,eAAe,CAAC,EAAE;gBAC5D,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;aACtB;QACH,CAAC,CAAC,CAAC,CAAC;KACL;AACH,CAAC,CAAA"}
@@ -0,0 +1 @@
1
+ export declare const addEventListener: (element: HTMLElement | HTMLElement[] | NodeListOf<HTMLElement> | HTMLCollectionOf<HTMLElement>, listeners: Record<string, EventListenerOrEventListenerObject | EventListenerOrEventListenerObject[]>) => void;
@@ -0,0 +1,12 @@
1
+ export const addEventListener = (element, listeners) => {
2
+ const elementList = (element instanceof Array || element instanceof HTMLCollection || element instanceof NodeList ?
3
+ Array.from(element) :
4
+ [element]);
5
+ elementList.forEach((element) => {
6
+ for (let eventName in listeners) {
7
+ const functionList = (listeners[eventName] instanceof Array ? listeners[eventName] : [listeners[eventName]]);
8
+ functionList.forEach((fn) => element.addEventListener(eventName, fn));
9
+ }
10
+ });
11
+ };
12
+ //# sourceMappingURL=addEventListener.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"addEventListener.js","sourceRoot":"","sources":["../../src/dom/addEventListener.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAC9B,OAA8F,EAC9F,SAAoG,EAC9F,EAAE;IACR,MAAM,WAAW,GAAG,CAClB,OAAO,YAAY,KAAK,IAAI,OAAO,YAAY,cAAc,IAAI,OAAO,YAAY,QAAQ,CAAC,CAAC;QAC5F,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC;QACrB,CAAC,OAAO,CAAC,CACO,CAAC;IAErB,WAAW,CAAC,OAAO,CAAC,CAAC,OAAoB,EAAE,EAAE;QAC3C,KAAK,IAAI,SAAS,IAAI,SAAS,EAAE;YAC/B,MAAM,YAAY,GAAG,CACnB,SAAS,CAAC,SAAS,CAAC,YAAY,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC,CAC9C,CAAC;YAE1C,YAAY,CAAC,OAAO,CAAC,CAAC,EAAsC,EAAE,EAAE,CAAC,OAAO,CAAC,gBAAgB,CAAC,SAAS,EAAE,EAAE,CAAC,CAAC,CAAC;SAC3G;IACH,CAAC,CAAC,CAAC;AACL,CAAC,CAAA"}
@@ -0,0 +1,2 @@
1
+ import { IExtendingElementProps } from './interfaces/createElement';
2
+ export declare const createElement: <T = HTMLElement>(tagName: string, props?: (Partial<T> & IExtendingElementProps) | undefined) => T;
@@ -0,0 +1,21 @@
1
+ export const createElement = (tagName, props) => {
2
+ const element = document.createElement(tagName);
3
+ if (props) {
4
+ for (let key in props) {
5
+ if (key === 'children') {
6
+ props.children.forEach((child) => element.appendChild(child));
7
+ }
8
+ else if (key === 'listeners') {
9
+ for (let eventName in props.listeners) {
10
+ const functionList = (props.listeners[eventName] instanceof Array ? props.listeners[eventName] : [props.listeners[eventName]]);
11
+ functionList.forEach((fn) => element.addEventListener(eventName, fn));
12
+ }
13
+ }
14
+ else {
15
+ element[key] = props[key];
16
+ }
17
+ }
18
+ }
19
+ return element;
20
+ };
21
+ //# sourceMappingURL=createElement.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"createElement.js","sourceRoot":"","sources":["../../src/dom/createElement.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,MAAM,aAAa,GAAG,CAAmB,OAAe,EAAE,KAA2C,EAAK,EAAE;IACjH,MAAM,OAAO,GAAgB,QAAQ,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC;IAE7D,IAAI,KAAK,EAAE;QACT,KAAK,IAAI,GAAG,IAAI,KAAK,EAAE;YACrB,IAAI,GAAG,KAAG,UAAU,EAAE;gBACpB,KAAK,CAAC,QAAS,CAAC,OAAO,CAAC,CAAC,KAAkB,EAAE,EAAE,CAAC,OAAO,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC,CAAC;aAC7E;iBAAM,IAAI,GAAG,KAAG,WAAW,EAAE;gBAC5B,KAAK,IAAI,SAAS,IAAI,KAAK,CAAC,SAAU,EAAE;oBACtC,MAAM,YAAY,GAAG,CACnB,KAAK,CAAC,SAAU,CAAC,SAAS,CAAC,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,SAAU,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,SAAU,CAAC,SAAS,CAAC,CAAC,CACnE,CAAC;oBAE1C,YAAY,CAAC,OAAO,CAAC,CAAC,EAAsC,EAAE,EAAE,CAAC,OAAO,CAAC,gBAAgB,CAAC,SAAS,EAAE,EAAE,CAAC,CAAC,CAAC;iBAC3G;aACF;iBAAM;gBACJ,OAAe,CAAC,GAAG,CAAC,GAAI,KAAa,CAAC,GAAG,CAAC,CAAC;aAC7C;SACF;KACF;IAED,OAAO,OAAuB,CAAC;AACjC,CAAC,CAAC"}
@@ -0,0 +1,3 @@
1
+ export * from './addAsyncEventListener';
2
+ export * from './addEventListener';
3
+ export * from './createElement';
@@ -0,0 +1,4 @@
1
+ export * from './addAsyncEventListener';
2
+ export * from './addEventListener';
3
+ export * from './createElement';
4
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/dom/index.ts"],"names":[],"mappings":"AAAA,cAAc,yBAAyB,CAAC;AACxC,cAAc,oBAAoB,CAAC;AACnC,cAAc,iBAAiB,CAAC"}
@@ -0,0 +1,4 @@
1
+ export interface IExtendingElementProps {
2
+ children?: HTMLElement[];
3
+ listeners?: Record<string, EventListenerOrEventListenerObject | EventListenerOrEventListenerObject[]>;
4
+ }
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=createElement.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"createElement.js","sourceRoot":"","sources":["../../../src/dom/interfaces/createElement.ts"],"names":[],"mappings":""}
@@ -0,0 +1,2 @@
1
+ export * from './dom';
2
+ export * from './schedule';
package/dist/index.js ADDED
@@ -0,0 +1,3 @@
1
+ export * from './dom';
2
+ export * from './schedule';
3
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,OAAO,CAAC;AACtB,cAAc,YAAY,CAAA"}
@@ -0,0 +1 @@
1
+ export * from './runAsync';
@@ -0,0 +1,2 @@
1
+ export * from './runAsync';
2
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/schedule/index.ts"],"names":[],"mappings":"AAAA,cAAc,YAAY,CAAC"}
@@ -0,0 +1 @@
1
+ export declare const runAsync: <T>(fn: () => any) => Promise<T>;
@@ -0,0 +1,14 @@
1
+ export const runAsync = (fn) => {
2
+ const worker = new Worker(URL.createObjectURL(new Blob([`postMessage((${fn})());`])));
3
+ return new Promise((res, rej) => {
4
+ worker.onmessage = ({ data }) => {
5
+ res(data);
6
+ worker.terminate();
7
+ };
8
+ worker.onerror = err => {
9
+ rej(err);
10
+ worker.terminate();
11
+ };
12
+ });
13
+ };
14
+ //# sourceMappingURL=runAsync.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"runAsync.js","sourceRoot":"","sources":["../../src/schedule/runAsync.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,QAAQ,GAAG,CAAK,EAAa,EAAc,EAAE;IACxD,MAAM,MAAM,GAAG,IAAI,MAAM,CACvB,GAAG,CAAC,eAAe,CAAC,IAAI,IAAI,CAAC,CAAC,gBAAgB,EAAE,OAAO,CAAC,CAAC,CAAC,CAC3D,CAAC;IAEF,OAAO,IAAI,OAAO,CAAC,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE;QAC9B,MAAM,CAAC,SAAS,GAAG,CAAC,EAAE,IAAI,EAAE,EAAE,EAAE;YAC9B,GAAG,CAAC,IAAI,CAAC,CAAC;YACV,MAAM,CAAC,SAAS,EAAE,CAAC;QACrB,CAAC,CAAC;QAEF,MAAM,CAAC,OAAO,GAAG,GAAG,CAAC,EAAE;YACrB,GAAG,CAAC,GAAG,CAAC,CAAC;YACT,MAAM,CAAC,SAAS,EAAE,CAAC;QACrB,CAAC,CAAC;IACJ,CAAC,CAAC,CAAC;AACL,CAAC,CAAC"}
package/package.json ADDED
@@ -0,0 +1,22 @@
1
+ {
2
+ "name": "tool-shack",
3
+ "version": "0.0.1",
4
+ "description": "Collection of usefull functions to ease work",
5
+ "main": "src",
6
+ "author": "David Myška",
7
+ "license": "MIT",
8
+ "bugs": {
9
+ "url": "https://www.davidmyska.com/tool-shack/issues"
10
+ },
11
+ "homepage": "https://www.davidmyska.com/tool-shack#readme",
12
+ "repository": {
13
+ "type": "git",
14
+ "url": "git+https://www.davidmyska.com/tool-shack.git"
15
+ },
16
+ "scripts": {
17
+ "build": "tsc -p ."
18
+ },
19
+ "devDependencies": {
20
+ "typescript": "^4.5.2"
21
+ }
22
+ }
@@ -0,0 +1,24 @@
1
+ export const addAsyncEventListener = (
2
+ elementSelector: string,
3
+ listeners: Record<string, EventListener | EventListener[]>,
4
+ acceptBubbling = true
5
+ ): void => {
6
+ for (let eventName in listeners) {
7
+ const functionList = (
8
+ listeners[eventName] instanceof Array ? listeners[eventName] : [listeners[eventName]]
9
+ ) as EventListener[];
10
+
11
+ functionList.forEach((fn: EventListener) => document.addEventListener(eventName, (event: Event) => {
12
+ const target = event.target as HTMLElement;
13
+ if (!target) {
14
+ return;
15
+ }
16
+
17
+ if (!acceptBubbling && target.matches(elementSelector)) {
18
+ fn.call(this, event);
19
+ } else if (acceptBubbling && target.closest(elementSelector)) {
20
+ fn.call(this, event);
21
+ }
22
+ }));
23
+ }
24
+ }
@@ -0,0 +1,20 @@
1
+ export const addEventListener = (
2
+ element: HTMLElement | HTMLElement[] | NodeListOf<HTMLElement> | HTMLCollectionOf<HTMLElement>,
3
+ listeners: Record<string, EventListenerOrEventListenerObject | EventListenerOrEventListenerObject[]>
4
+ ): void => {
5
+ const elementList = (
6
+ element instanceof Array || element instanceof HTMLCollection || element instanceof NodeList ?
7
+ Array.from(element) :
8
+ [element]
9
+ ) as HTMLElement[];
10
+
11
+ elementList.forEach((element: HTMLElement) => {
12
+ for (let eventName in listeners) {
13
+ const functionList = (
14
+ listeners[eventName] instanceof Array ? listeners[eventName] : [listeners[eventName]]
15
+ ) as EventListenerOrEventListenerObject[];
16
+
17
+ functionList.forEach((fn: EventListenerOrEventListenerObject) => element.addEventListener(eventName, fn));
18
+ }
19
+ });
20
+ }
@@ -0,0 +1,25 @@
1
+ import { IExtendingElementProps } from './interfaces/createElement';
2
+
3
+ export const createElement = <T = HTMLElement> (tagName: string, props?: Partial<T> & IExtendingElementProps): T => {
4
+ const element: HTMLElement = document.createElement(tagName);
5
+
6
+ if (props) {
7
+ for (let key in props) {
8
+ if (key==='children') {
9
+ props.children!.forEach((child: HTMLElement) => element.appendChild(child));
10
+ } else if (key==='listeners') {
11
+ for (let eventName in props.listeners!) {
12
+ const functionList = (
13
+ props.listeners![eventName] instanceof Array ? props.listeners![eventName] : [props.listeners![eventName]]
14
+ ) as EventListenerOrEventListenerObject[];
15
+
16
+ functionList.forEach((fn: EventListenerOrEventListenerObject) => element.addEventListener(eventName, fn));
17
+ }
18
+ } else {
19
+ (element as any)[key] = (props as any)[key];
20
+ }
21
+ }
22
+ }
23
+
24
+ return element as unknown as T;
25
+ };
@@ -0,0 +1,3 @@
1
+ export * from './addAsyncEventListener';
2
+ export * from './addEventListener';
3
+ export * from './createElement';
@@ -0,0 +1,4 @@
1
+ export interface IExtendingElementProps {
2
+ children?: HTMLElement[];
3
+ listeners?: Record<string, EventListenerOrEventListenerObject | EventListenerOrEventListenerObject[]>;
4
+ }
package/src/index.ts ADDED
@@ -0,0 +1,2 @@
1
+ export * from './dom';
2
+ export * from './schedule'
@@ -0,0 +1 @@
1
+ export * from './runAsync';
@@ -0,0 +1,17 @@
1
+ export const runAsync = <T> (fn: () => any): Promise<T> => {
2
+ const worker = new Worker(
3
+ URL.createObjectURL(new Blob([`postMessage((${fn})());`])),
4
+ );
5
+
6
+ return new Promise((res, rej) => {
7
+ worker.onmessage = ({ data }) => {
8
+ res(data);
9
+ worker.terminate();
10
+ };
11
+
12
+ worker.onerror = err => {
13
+ rej(err);
14
+ worker.terminate();
15
+ };
16
+ });
17
+ };
package/tsconfig.json ADDED
@@ -0,0 +1,24 @@
1
+ {
2
+ "compilerOptions": {
3
+ "target": "ES6",
4
+ "module": "esnext",
5
+ "moduleResolution": "node",
6
+ "strict": true,
7
+ "noImplicitThis": true,
8
+ "alwaysStrict": true,
9
+ "esModuleInterop": true,
10
+ "preserveConstEnums": true,
11
+ "sourceMap": true,
12
+ "importHelpers": true,
13
+ "baseUrl": ".",
14
+ "declaration": true,
15
+ "outDir": "./dist",
16
+ "lib": [
17
+ "dom",
18
+ "es2018"
19
+ ],
20
+ },
21
+ "include": [
22
+ "src/**/*.ts"
23
+ ]
24
+ }