From 5e1720d2601e05add43cd11e5c4ad5f73d887939 Mon Sep 17 00:00:00 2001 From: sand4rt Date: Fri, 19 May 2023 00:22:05 +0200 Subject: [PATCH 1/2] feat(ct): vue type safe mount props --- package-lock.json | 16 +++++++-- packages/playwright-ct-vue/index.d.ts | 42 ++++++++++------------ packages/playwright-ct-vue/package.json | 3 +- tests/components/ct-vue-vite/tsconfig.json | 2 +- 4 files changed, 35 insertions(+), 28 deletions(-) diff --git a/package-lock.json b/package-lock.json index cbe2db9208f5c..fec61f84e9b19 100644 --- a/package-lock.json +++ b/package-lock.json @@ -6038,6 +6038,11 @@ "csstype": "^3.1.0" } }, + "node_modules/vue-component-type-helpers": { + "version": "1.6.5", + "resolved": "https://registry.npmjs.org/vue-component-type-helpers/-/vue-component-type-helpers-1.6.5.tgz", + "integrity": "sha512-iGdlqtajmiqed8ptURKPJ/Olz0/mwripVZszg6tygfZSIL9kYFPJTNY6+Q6OjWGznl2L06vxG5HvNvAnWrnzbg==" + }, "node_modules/vue/node_modules/@vue/compiler-sfc": { "version": "2.7.14", "resolved": "https://registry.npmjs.org/@vue/compiler-sfc/-/compiler-sfc-2.7.14.tgz", @@ -6428,7 +6433,8 @@ "license": "Apache-2.0", "dependencies": { "@playwright/experimental-ct-core": "1.37.0-next", - "@vitejs/plugin-vue": "^4.2.1" + "@vitejs/plugin-vue": "^4.2.1", + "vue-component-type-helpers": "^1.6.5" }, "bin": { "playwright": "cli.js" @@ -7420,7 +7426,8 @@ "version": "file:packages/playwright-ct-vue", "requires": { "@playwright/experimental-ct-core": "1.37.0-next", - "@vitejs/plugin-vue": "^4.2.1" + "@vitejs/plugin-vue": "^4.2.1", + "vue-component-type-helpers": "^1.6.5" }, "dependencies": { "@vitejs/plugin-vue": { @@ -10516,6 +10523,11 @@ } } }, + "vue-component-type-helpers": { + "version": "1.6.5", + "resolved": "https://registry.npmjs.org/vue-component-type-helpers/-/vue-component-type-helpers-1.6.5.tgz", + "integrity": "sha512-iGdlqtajmiqed8ptURKPJ/Olz0/mwripVZszg6tygfZSIL9kYFPJTNY6+Q6OjWGznl2L06vxG5HvNvAnWrnzbg==" + }, "web": { "version": "file:packages/web", "requires": { diff --git a/packages/playwright-ct-vue/index.d.ts b/packages/playwright-ct-vue/index.d.ts index f992773bee5af..6861582239188 100644 --- a/packages/playwright-ct-vue/index.d.ts +++ b/packages/playwright-ct-vue/index.d.ts @@ -25,6 +25,7 @@ import type { } from '@playwright/test'; import type { JsonObject } from '@playwright/experimental-ct-core/types/component'; import type { InlineConfig } from 'vite'; +import type { ComponentProps } from 'vue-component-type-helpers'; export type PlaywrightTestConfig = Omit, 'use'> & { use?: BasePlaywrightTestConfig['use'] & { @@ -35,21 +36,24 @@ export type PlaywrightTestConfig = Omit & { default?: ComponentSlot }; +type ComponentEvents = Record; -export interface MountOptions< - HooksConfig extends JsonObject, - Props extends Record -> { - props?: Props; - slots?: Record & { default?: Slot }; - on?: Record; +export interface MountOptions< HooksConfig extends JsonObject, Component> { + props?: ComponentProps; + slots?: ComponentSlots; + on?: ComponentEvents; hooksConfig?: HooksConfig; } -interface MountResult> extends Locator { +interface MountResult extends Locator { unmount(): Promise; - update(options: Omit, 'hooksConfig'>): Promise; + update(options: { + props?: Partial>; + slots?: Partial; + on?: Partial; + }): Promise; } interface MountResultJsx extends Locator { @@ -59,17 +63,10 @@ interface MountResultJsx extends Locator { export interface ComponentFixtures { mount(component: JSX.Element): Promise; - mount( - component: any, - options?: MountOptions> - ): Promise>>; - mount< - HooksConfig extends JsonObject, - Props extends Record = Record - >( - component: any, - options: MountOptions & { props: Props } - ): Promise>; + mount( + component: Component, + options?: MountOptions + ): Promise>; } export const test: TestType< @@ -77,9 +74,6 @@ export const test: TestType< PlaywrightWorkerArgs & PlaywrightWorkerOptions >; -/** - * Defines Playwright config - */ export function defineConfig(config: PlaywrightTestConfig): PlaywrightTestConfig; export function defineConfig(config: PlaywrightTestConfig): PlaywrightTestConfig; export function defineConfig(config: PlaywrightTestConfig): PlaywrightTestConfig; diff --git a/packages/playwright-ct-vue/package.json b/packages/playwright-ct-vue/package.json index 0ccebc381f90f..867de11c5349e 100644 --- a/packages/playwright-ct-vue/package.json +++ b/packages/playwright-ct-vue/package.json @@ -27,7 +27,8 @@ }, "dependencies": { "@playwright/experimental-ct-core": "1.37.0-next", - "@vitejs/plugin-vue": "^4.2.1" + "@vitejs/plugin-vue": "^4.2.1", + "vue-component-type-helpers": "^1.6.5" }, "bin": { "playwright": "./cli.js" diff --git a/tests/components/ct-vue-vite/tsconfig.json b/tests/components/ct-vue-vite/tsconfig.json index d6d2007656811..a1d96a55c5e56 100644 --- a/tests/components/ct-vue-vite/tsconfig.json +++ b/tests/components/ct-vue-vite/tsconfig.json @@ -1,6 +1,6 @@ { "extends": "@vue/tsconfig/tsconfig.web.json", - "include": ["env.d.ts", "src/**/*", "src/**/*.vue", "playwright"], + "include": ["env.d.ts", "src/**/*", "src/**/*.vue", "tests/**/*", "playwright"], "compilerOptions": { "baseUrl": ".", "paths": { From 3f42ed6212b902b6329384b3ecaf84e728d58c33 Mon Sep 17 00:00:00 2001 From: sand4rt Date: Sat, 29 Jul 2023 21:53:03 +0200 Subject: [PATCH 2/2] chore(vue): remove vue-component-type-helpers --- package-lock.json | 16 ++-------------- packages/playwright-ct-vue/index.d.ts | 10 ++++++++-- packages/playwright-ct-vue/package.json | 3 +-- 3 files changed, 11 insertions(+), 18 deletions(-) diff --git a/package-lock.json b/package-lock.json index fec61f84e9b19..cbe2db9208f5c 100644 --- a/package-lock.json +++ b/package-lock.json @@ -6038,11 +6038,6 @@ "csstype": "^3.1.0" } }, - "node_modules/vue-component-type-helpers": { - "version": "1.6.5", - "resolved": "https://registry.npmjs.org/vue-component-type-helpers/-/vue-component-type-helpers-1.6.5.tgz", - "integrity": "sha512-iGdlqtajmiqed8ptURKPJ/Olz0/mwripVZszg6tygfZSIL9kYFPJTNY6+Q6OjWGznl2L06vxG5HvNvAnWrnzbg==" - }, "node_modules/vue/node_modules/@vue/compiler-sfc": { "version": "2.7.14", "resolved": "https://registry.npmjs.org/@vue/compiler-sfc/-/compiler-sfc-2.7.14.tgz", @@ -6433,8 +6428,7 @@ "license": "Apache-2.0", "dependencies": { "@playwright/experimental-ct-core": "1.37.0-next", - "@vitejs/plugin-vue": "^4.2.1", - "vue-component-type-helpers": "^1.6.5" + "@vitejs/plugin-vue": "^4.2.1" }, "bin": { "playwright": "cli.js" @@ -7426,8 +7420,7 @@ "version": "file:packages/playwright-ct-vue", "requires": { "@playwright/experimental-ct-core": "1.37.0-next", - "@vitejs/plugin-vue": "^4.2.1", - "vue-component-type-helpers": "^1.6.5" + "@vitejs/plugin-vue": "^4.2.1" }, "dependencies": { "@vitejs/plugin-vue": { @@ -10523,11 +10516,6 @@ } } }, - "vue-component-type-helpers": { - "version": "1.6.5", - "resolved": "https://registry.npmjs.org/vue-component-type-helpers/-/vue-component-type-helpers-1.6.5.tgz", - "integrity": "sha512-iGdlqtajmiqed8ptURKPJ/Olz0/mwripVZszg6tygfZSIL9kYFPJTNY6+Q6OjWGznl2L06vxG5HvNvAnWrnzbg==" - }, "web": { "version": "file:packages/web", "requires": { diff --git a/packages/playwright-ct-vue/index.d.ts b/packages/playwright-ct-vue/index.d.ts index 6861582239188..41b7575f02db8 100644 --- a/packages/playwright-ct-vue/index.d.ts +++ b/packages/playwright-ct-vue/index.d.ts @@ -25,7 +25,6 @@ import type { } from '@playwright/test'; import type { JsonObject } from '@playwright/experimental-ct-core/types/component'; import type { InlineConfig } from 'vite'; -import type { ComponentProps } from 'vue-component-type-helpers'; export type PlaywrightTestConfig = Omit, 'use'> & { use?: BasePlaywrightTestConfig['use'] & { @@ -38,9 +37,16 @@ export type PlaywrightTestConfig = Omit & { default?: ComponentSlot }; + type ComponentEvents = Record; -export interface MountOptions< HooksConfig extends JsonObject, Component> { +// Copied from: https://github.com/vuejs/language-tools/blob/master/packages/vue-component-type-helpers/index.d.ts#L10-L13 +type ComponentProps = + T extends new () => { $props: infer P; } ? NonNullable

: + T extends (props: infer P, ...args: any) => any ? P : + {}; + +export interface MountOptions { props?: ComponentProps; slots?: ComponentSlots; on?: ComponentEvents; diff --git a/packages/playwright-ct-vue/package.json b/packages/playwright-ct-vue/package.json index 867de11c5349e..0ccebc381f90f 100644 --- a/packages/playwright-ct-vue/package.json +++ b/packages/playwright-ct-vue/package.json @@ -27,8 +27,7 @@ }, "dependencies": { "@playwright/experimental-ct-core": "1.37.0-next", - "@vitejs/plugin-vue": "^4.2.1", - "vue-component-type-helpers": "^1.6.5" + "@vitejs/plugin-vue": "^4.2.1" }, "bin": { "playwright": "./cli.js"