From 62e8c8ff6d2188ecc0e3334cc012a3f499b094a1 Mon Sep 17 00:00:00 2001 From: cexbrayat Date: Sat, 16 May 2020 19:38:44 +0200 Subject: [PATCH 1/4] chore: add overloads for attributes method --- src/dom-wrapper.ts | 8 +++++--- src/vue-wrapper.ts | 4 +++- test-dts/wrapper.d-test.ts | 6 ++++++ 3 files changed, 14 insertions(+), 4 deletions(-) diff --git a/src/dom-wrapper.ts b/src/dom-wrapper.ts index e095c7d80..5bb67613e 100644 --- a/src/dom-wrapper.ts +++ b/src/dom-wrapper.ts @@ -18,11 +18,13 @@ export class DOMWrapper { return Array.from(classes) } - attributes(key?: string) { + attributes(): { [key: string]: string } + attributes(key: string): string + attributes(key?: string): { [key: string]: string } | string { const attributes = this.element.attributes - const attributeMap = {} + const attributeMap: { [key: string]: string } = {} for (let i = 0; i < attributes.length; i++) { - const att = attributes.item(i) + const att = attributes.item(i)! attributeMap[att.localName] = att.value } diff --git a/src/vue-wrapper.ts b/src/vue-wrapper.ts index e4f0f6f4d..8aeed72fd 100644 --- a/src/vue-wrapper.ts +++ b/src/vue-wrapper.ts @@ -54,7 +54,9 @@ export class VueWrapper { return new DOMWrapper(this.element).classes(className) } - attributes(key?: string) { + attributes(): { [key: string]: string } + attributes(key: string): string + attributes(key?: string): { [key: string]: string } | string { return new DOMWrapper(this.element).attributes(key) } diff --git a/test-dts/wrapper.d-test.ts b/test-dts/wrapper.d-test.ts index b71a50b68..4b3512f4f 100644 --- a/test-dts/wrapper.d-test.ts +++ b/test-dts/wrapper.d-test.ts @@ -86,3 +86,9 @@ expectType(line.element) // string selector byClass = domWrapper.get('.todo') expectType(byClass.element) + +// attributes +expectType<{ [key: string]: string }>(wrapper.attributes()) +expectType(wrapper.attributes('key')) +expectType<{ [key: string]: string }>(domWrapper.attributes()) +expectType(domWrapper.attributes('key')) From b8fe144774a7d31abcc9823f1accc79cf7d79d5b Mon Sep 17 00:00:00 2001 From: cexbrayat Date: Sat, 16 May 2020 19:44:05 +0200 Subject: [PATCH 2/4] chore: add overloads for classes method --- src/dom-wrapper.ts | 4 +++- src/vue-wrapper.ts | 4 +++- test-dts/wrapper.d-test.ts | 6 ++++++ 3 files changed, 12 insertions(+), 2 deletions(-) diff --git a/src/dom-wrapper.ts b/src/dom-wrapper.ts index 5bb67613e..7a991498a 100644 --- a/src/dom-wrapper.ts +++ b/src/dom-wrapper.ts @@ -10,7 +10,9 @@ export class DOMWrapper { this.element = element } - classes(className?: string) { + classes(): string[] + classes(className: string): boolean + classes(className?: string): string[] | boolean { const classes = this.element.classList if (className) return classes.contains(className) diff --git a/src/vue-wrapper.ts b/src/vue-wrapper.ts index 8aeed72fd..619d20a47 100644 --- a/src/vue-wrapper.ts +++ b/src/vue-wrapper.ts @@ -50,7 +50,9 @@ export class VueWrapper { return selector ? props[selector] : props } - classes(className?: string) { + classes(): string[] + classes(className: string): boolean + classes(className?: string): string[] | boolean { return new DOMWrapper(this.element).classes(className) } diff --git a/test-dts/wrapper.d-test.ts b/test-dts/wrapper.d-test.ts index 4b3512f4f..ed16fff3f 100644 --- a/test-dts/wrapper.d-test.ts +++ b/test-dts/wrapper.d-test.ts @@ -92,3 +92,9 @@ expectType<{ [key: string]: string }>(wrapper.attributes()) expectType(wrapper.attributes('key')) expectType<{ [key: string]: string }>(domWrapper.attributes()) expectType(domWrapper.attributes('key')) + +// classes +expectType>(wrapper.classes()) +expectType(wrapper.classes('class')) +expectType>(domWrapper.classes()) +expectType(domWrapper.classes('class')) From f2c7e9778436410388597c5c0189c1985e22f40c Mon Sep 17 00:00:00 2001 From: cexbrayat Date: Sat, 16 May 2020 19:53:11 +0200 Subject: [PATCH 3/4] chore: add overloads for props method --- src/dom-wrapper.ts | 2 +- src/vue-wrapper.ts | 4 +++- test-dts/wrapper.d-test.ts | 4 ++++ 3 files changed, 8 insertions(+), 2 deletions(-) diff --git a/src/dom-wrapper.ts b/src/dom-wrapper.ts index 7a991498a..2dc28d060 100644 --- a/src/dom-wrapper.ts +++ b/src/dom-wrapper.ts @@ -24,7 +24,7 @@ export class DOMWrapper { attributes(key: string): string attributes(key?: string): { [key: string]: string } | string { const attributes = this.element.attributes - const attributeMap: { [key: string]: string } = {} + const attributeMap: Record = {} for (let i = 0; i < attributes.length; i++) { const att = attributes.item(i)! attributeMap[att.localName] = att.value diff --git a/src/vue-wrapper.ts b/src/vue-wrapper.ts index 619d20a47..019ebae1d 100644 --- a/src/vue-wrapper.ts +++ b/src/vue-wrapper.ts @@ -45,7 +45,9 @@ export class VueWrapper { return this.componentVM } - props(selector?: string) { + props(): { [key: string]: any } + props(selector: string): any + props(selector?: string): { [key: string]: any } | any { const props = this.componentVM.$props as { [key: string]: any } return selector ? props[selector] : props } diff --git a/test-dts/wrapper.d-test.ts b/test-dts/wrapper.d-test.ts index ed16fff3f..0a2c12c84 100644 --- a/test-dts/wrapper.d-test.ts +++ b/test-dts/wrapper.d-test.ts @@ -98,3 +98,7 @@ expectType>(wrapper.classes()) expectType(wrapper.classes('class')) expectType>(domWrapper.classes()) expectType(domWrapper.classes('class')) + +// props +expectType<{ [key: string]: any }>(wrapper.props()) +expectType(wrapper.props('prop')) From 60d048a7260514d6f8482157d46cbd703d6c8a7a Mon Sep 17 00:00:00 2001 From: cexbrayat Date: Mon, 18 May 2020 16:25:05 +0200 Subject: [PATCH 4/4] refactor: use forof to iterate over attributes --- src/dom-wrapper.ts | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/src/dom-wrapper.ts b/src/dom-wrapper.ts index 2dc28d060..723e3521b 100644 --- a/src/dom-wrapper.ts +++ b/src/dom-wrapper.ts @@ -23,11 +23,10 @@ export class DOMWrapper { attributes(): { [key: string]: string } attributes(key: string): string attributes(key?: string): { [key: string]: string } | string { - const attributes = this.element.attributes + const attributes = Array.from(this.element.attributes) const attributeMap: Record = {} - for (let i = 0; i < attributes.length; i++) { - const att = attributes.item(i)! - attributeMap[att.localName] = att.value + for (const attribute of attributes) { + attributeMap[attribute.localName] = attribute.value } return key ? attributeMap[key] : attributeMap