From 08db0adfe400a5ef9384c542b32d8908b40d41ac Mon Sep 17 00:00:00 2001 From: zhiyuanzmj <260480378@qq.com> Date: Sat, 22 Feb 2025 20:37:42 +0800 Subject: [PATCH 1/5] feat(runtime-vapor): support functional component for defineVaporComponent --- packages/runtime-vapor/src/apiDefineComponent.ts | 16 ++++++++++++++-- 1 file changed, 14 insertions(+), 2 deletions(-) diff --git a/packages/runtime-vapor/src/apiDefineComponent.ts b/packages/runtime-vapor/src/apiDefineComponent.ts index ed70a6495a5..5b82383089b 100644 --- a/packages/runtime-vapor/src/apiDefineComponent.ts +++ b/packages/runtime-vapor/src/apiDefineComponent.ts @@ -1,7 +1,19 @@ -import type { VaporComponent } from './component' +import type { ObjectVaporComponent, VaporComponent } from './component' +import { extend, isFunction } from '@vue/shared' /*! #__NO_SIDE_EFFECTS__ */ -export function defineVaporComponent(comp: VaporComponent): VaporComponent { +export function defineVaporComponent( + comp: VaporComponent, + extraOptions?: Omit, +): VaporComponent { + if (isFunction(comp)) { + // #8236: extend call and options.name access are considered side-effects + // by Rollup, so we have to wrap it in a pure-annotated IIFE. + return /*@__PURE__*/ (() => + extend({ name: comp.name }, extraOptions, { + setup: comp, + }))() + } // TODO type inference comp.__vapor = true return comp From a553a29f2d2591da452c41a3dffa9a09ec22fa04 Mon Sep 17 00:00:00 2001 From: zhiyuanzmj <260480378@qq.com> Date: Sat, 22 Feb 2025 20:59:57 +0800 Subject: [PATCH 2/5] feat: add __vapor --- packages/runtime-vapor/src/apiDefineComponent.ts | 1 + 1 file changed, 1 insertion(+) diff --git a/packages/runtime-vapor/src/apiDefineComponent.ts b/packages/runtime-vapor/src/apiDefineComponent.ts index 5b82383089b..430f87cdd50 100644 --- a/packages/runtime-vapor/src/apiDefineComponent.ts +++ b/packages/runtime-vapor/src/apiDefineComponent.ts @@ -12,6 +12,7 @@ export function defineVaporComponent( return /*@__PURE__*/ (() => extend({ name: comp.name }, extraOptions, { setup: comp, + __vapor: true, }))() } // TODO type inference From 52f633f0ad36a17c055527f39931069b36772e3b Mon Sep 17 00:00:00 2001 From: zhiyuanzmj <260480378@qq.com> Date: Tue, 25 Feb 2025 17:09:47 +0800 Subject: [PATCH 3/5] ci(pkg-pr-new): add vapor --- .github/workflows/ci.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 40ceb8a2611..6b69e4727e4 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -9,6 +9,7 @@ on: branches: - main - minor + - vapor jobs: test: From dc910ac971c72cefded31355c17bb8fc87ae7ece Mon Sep 17 00:00:00 2001 From: zhiyuanzmj <260480378@qq.com> Date: Tue, 25 Feb 2025 20:09:29 +0800 Subject: [PATCH 4/5] fix: test --- packages/runtime-vapor/__tests__/_utils.ts | 5 +++-- .../__tests__/componentProps.spec.ts | 21 +++++++++++++++++++ 2 files changed, 24 insertions(+), 2 deletions(-) diff --git a/packages/runtime-vapor/__tests__/_utils.ts b/packages/runtime-vapor/__tests__/_utils.ts index c34eb05a05c..0ed64554478 100644 --- a/packages/runtime-vapor/__tests__/_utils.ts +++ b/packages/runtime-vapor/__tests__/_utils.ts @@ -1,4 +1,4 @@ -import { createVaporApp, defineVaporComponent } from '../src' +import { createVaporApp } from '../src' import type { App } from '@vue/runtime-dom' import type { VaporComponent, VaporComponentInstance } from '../src/component' import type { RawProps } from '../src/componentProps' @@ -36,7 +36,8 @@ export function makeRender( }) function define(comp: C) { - const component = defineVaporComponent(comp as any) + const component = comp as any + component.__vapor = true let instance: VaporComponentInstance | undefined let app: App diff --git a/packages/runtime-vapor/__tests__/componentProps.spec.ts b/packages/runtime-vapor/__tests__/componentProps.spec.ts index 2fd0e9df1a0..c068e8044cb 100644 --- a/packages/runtime-vapor/__tests__/componentProps.spec.ts +++ b/packages/runtime-vapor/__tests__/componentProps.spec.ts @@ -127,6 +127,27 @@ describe('component: props', () => { expect(props).toBe(attrs) }) + test('functional defineVaporComponent without declaration', () => { + let props: any + let attrs: any + + const { render } = define( + defineVaporComponent((_props: any, { attrs: _attrs }: any) => { + props = _props + attrs = _attrs + return [] + }), + ) + + render({ foo: () => 1 }) + expect(props).toEqual({}) + expect(attrs).toEqual({ foo: 1 }) + + render({ bar: () => 2 }) + expect(props).toEqual({}) + expect(attrs).toEqual({ bar: 2 }) + }) + test('boolean casting', () => { let props: any const { render } = define({ From b6e14c766beb6d3a506a58787bea157e72b91037 Mon Sep 17 00:00:00 2001 From: zhiyuanzmj <260480378@qq.com> Date: Tue, 25 Feb 2025 20:43:12 +0800 Subject: [PATCH 5/5] ci: revert --- .github/workflows/ci.yml | 1 - 1 file changed, 1 deletion(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 6b69e4727e4..40ceb8a2611 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -9,7 +9,6 @@ on: branches: - main - minor - - vapor jobs: test: