From b20bcf1fb6ad8cd31125e9695f0d5f9f365edcbb Mon Sep 17 00:00:00 2001 From: Evan You Date: Mon, 3 Feb 2025 15:46:40 +0800 Subject: [PATCH] chore: fix runtime-vapor dts build --- packages/runtime-core/src/componentProps.ts | 5 +---- packages/runtime-core/src/index.ts | 22 +++++++++++-------- .../runtime-vapor/__tests__/block.spec.ts | 14 ++++++++---- .../src/apiCreateDynamicComponent.ts | 4 ++-- packages/runtime-vapor/src/apiCreateFor.ts | 13 +++++++---- packages/runtime-vapor/src/block.ts | 10 ++++----- packages/runtime-vapor/src/component.ts | 6 ++--- packages/runtime-vapor/src/componentSlots.ts | 12 +++++----- packages/runtime-vapor/src/index.ts | 10 ++------- packages/vue/src/index-with-vapor.ts | 3 +++ rollup.dts.config.js | 2 +- 11 files changed, 55 insertions(+), 46 deletions(-) create mode 100644 packages/vue/src/index-with-vapor.ts diff --git a/packages/runtime-core/src/componentProps.ts b/packages/runtime-core/src/componentProps.ts index bc9f537cf80..c5ce317f7c1 100644 --- a/packages/runtime-core/src/componentProps.ts +++ b/packages/runtime-core/src/componentProps.ts @@ -187,12 +187,9 @@ type NormalizedProp = PropOptions & { /** * normalized value is a tuple of the actual normalized options * and an array of prop keys that need value casting (booleans and defaults) - * @internal */ export type NormalizedProps = Record -/** - * @internal - */ + export type NormalizedPropsOptions = [NormalizedProps, string[]] | [] export function initProps( diff --git a/packages/runtime-core/src/index.ts b/packages/runtime-core/src/index.ts index 7679c8b8706..4a1d4472762 100644 --- a/packages/runtime-core/src/index.ts +++ b/packages/runtime-core/src/index.ts @@ -487,11 +487,22 @@ export const DeprecationTypes = ( // **IMPORTANT** These APIs are exposed solely for @vue/runtime-vapor and may // change without notice between versions. User code should never rely on them. +/** + * these types cannot be marked internal because runtime-vapor's type relies on + * them, but they should be considered internal + * @private + */ +export { + type ComponentInternalOptions, + type GenericComponentInstance, + type LifecycleHook, +} from './component' +export { type NormalizedPropsOptions } from './componentProps' + /** * @internal */ export { - type NormalizedPropsOptions, baseNormalizePropsOptions, resolvePropValue, validateProps, @@ -507,14 +518,7 @@ export { type SchedulerJob, queueJob, flushOnAppMount } from './scheduler' /** * @internal */ -export { - type ComponentInternalOptions, - type GenericComponentInstance, - type LifecycleHook, - expose, - nextUid, - validateComponentName, -} from './component' +export { expose, nextUid, validateComponentName } from './component' /** * @internal */ diff --git a/packages/runtime-vapor/__tests__/block.spec.ts b/packages/runtime-vapor/__tests__/block.spec.ts index 306a1281010..9f76c7f0333 100644 --- a/packages/runtime-vapor/__tests__/block.spec.ts +++ b/packages/runtime-vapor/__tests__/block.spec.ts @@ -1,4 +1,10 @@ -import { Fragment, insert, normalizeBlock, prepend, remove } from '../src/block' +import { + VaporFragment, + insert, + normalizeBlock, + prepend, + remove, +} from '../src/block' const node1 = document.createTextNode('node1') const node2 = document.createTextNode('node2') @@ -13,7 +19,7 @@ describe('block + node ops', () => { node2, node3, ]) - const frag = new Fragment(node2) + const frag = new VaporFragment(node2) frag.anchor = anchor expect(normalizeBlock([node1, frag, [node3]])).toEqual([ node1, @@ -39,14 +45,14 @@ describe('block + node ops', () => { test('prepend', () => { const container = document.createElement('div') prepend(container, [node1], node2) - prepend(container, new Fragment(node3)) + prepend(container, new VaporFragment(node3)) expect(Array.from(container.childNodes)).toEqual([node3, node1, node2]) }) test('remove', () => { const container = document.createElement('div') container.append(node1, node2, node3) - const frag = new Fragment(node3) + const frag = new VaporFragment(node3) remove([node1], container) remove(frag, container) expect(Array.from(container.childNodes)).toEqual([node2]) diff --git a/packages/runtime-vapor/src/apiCreateDynamicComponent.ts b/packages/runtime-vapor/src/apiCreateDynamicComponent.ts index 3cd65c837c0..2126611d718 100644 --- a/packages/runtime-vapor/src/apiCreateDynamicComponent.ts +++ b/packages/runtime-vapor/src/apiCreateDynamicComponent.ts @@ -1,5 +1,5 @@ import { resolveDynamicComponent } from '@vue/runtime-dom' -import { DynamicFragment, type Fragment } from './block' +import { DynamicFragment, type VaporFragment } from './block' import { createComponentWithFallback } from './component' import { renderEffect } from './renderEffect' import type { RawProps } from './componentProps' @@ -10,7 +10,7 @@ export function createDynamicComponent( rawProps?: RawProps | null, rawSlots?: RawSlots | null, isSingleRoot?: boolean, -): Fragment { +): VaporFragment { const frag = __DEV__ ? new DynamicFragment('dynamic-component') : new DynamicFragment() diff --git a/packages/runtime-vapor/src/apiCreateFor.ts b/packages/runtime-vapor/src/apiCreateFor.ts index 8f8e62c30b3..07b1e34bb3d 100644 --- a/packages/runtime-vapor/src/apiCreateFor.ts +++ b/packages/runtime-vapor/src/apiCreateFor.ts @@ -9,13 +9,18 @@ import { } from '@vue/reactivity' import { getSequence, isArray, isObject, isString } from '@vue/shared' import { createComment, createTextNode } from './dom/node' -import { type Block, Fragment, insert, remove as removeBlock } from './block' +import { + type Block, + VaporFragment, + insert, + remove as removeBlock, +} from './block' import { warn } from '@vue/runtime-dom' import { currentInstance, isVaporComponent } from './component' import type { DynamicSlot } from './componentSlots' import { renderEffect } from './renderEffect' -class ForBlock extends Fragment { +class ForBlock extends VaporFragment { scope: EffectScope | undefined key: any @@ -64,13 +69,13 @@ export const createFor = ( isComponent = false, once?: boolean, // hydrationNode?: Node, -): Fragment => { +): VaporFragment => { let isMounted = false let oldBlocks: ForBlock[] = [] let newBlocks: ForBlock[] let parent: ParentNode | undefined | null const parentAnchor = __DEV__ ? createComment('for') : createTextNode() - const ref = new Fragment(oldBlocks) + const ref = new VaporFragment(oldBlocks) const instance = currentInstance! if (__DEV__ && !instance) { diff --git a/packages/runtime-vapor/src/block.ts b/packages/runtime-vapor/src/block.ts index df14aeb3163..bd4948f894d 100644 --- a/packages/runtime-vapor/src/block.ts +++ b/packages/runtime-vapor/src/block.ts @@ -10,14 +10,14 @@ import { EffectScope, pauseTracking, resetTracking } from '@vue/reactivity' export type Block = | Node - | Fragment + | VaporFragment | DynamicFragment | VaporComponentInstance | Block[] export type BlockFn = (...args: any[]) => Block -export class Fragment { +export class VaporFragment { nodes: Block anchor?: Node @@ -26,7 +26,7 @@ export class Fragment { } } -export class DynamicFragment extends Fragment { +export class DynamicFragment extends VaporFragment { anchor: Node scope: EffectScope | undefined current?: BlockFn @@ -76,8 +76,8 @@ export class DynamicFragment extends Fragment { } } -export function isFragment(val: NonNullable): val is Fragment { - return val instanceof Fragment +export function isFragment(val: NonNullable): val is VaporFragment { + return val instanceof VaporFragment } export function isBlock(val: NonNullable): val is Block { diff --git a/packages/runtime-vapor/src/component.ts b/packages/runtime-vapor/src/component.ts index 06f169c3e17..7049041f876 100644 --- a/packages/runtime-vapor/src/component.ts +++ b/packages/runtime-vapor/src/component.ts @@ -64,8 +64,8 @@ import { setDynamicProps } from './dom/prop' import { type DynamicSlotSource, type RawSlots, - type Slot, type StaticSlots, + type VaporSlot, dynamicSlotsProxyHandlers, getSlot, } from './componentSlots' @@ -97,7 +97,7 @@ export interface ObjectVaporComponent props?: any, emit?: EmitFn, attrs?: any, - slots?: Record, + slots?: Record, ): Block name?: string @@ -135,7 +135,7 @@ export type LooseRawProps = Record< $?: DynamicPropsSource[] } -type LooseRawSlots = Record & { +type LooseRawSlots = Record & { $?: DynamicSlotSource[] } diff --git a/packages/runtime-vapor/src/componentSlots.ts b/packages/runtime-vapor/src/componentSlots.ts index 31d94f0726d..2830e9b0540 100644 --- a/packages/runtime-vapor/src/componentSlots.ts +++ b/packages/runtime-vapor/src/componentSlots.ts @@ -10,14 +10,14 @@ import { currentInstance } from '@vue/runtime-core' import type { LooseRawProps, VaporComponentInstance } from './component' import { renderEffect } from './renderEffect' -export type RawSlots = Record & { +export type RawSlots = Record & { $?: DynamicSlotSource[] } -export type StaticSlots = Record +export type StaticSlots = Record -export type Slot = BlockFn -export type DynamicSlot = { name: string; fn: Slot } +export type VaporSlot = BlockFn +export type DynamicSlot = { name: string; fn: VaporSlot } export type DynamicSlotFn = () => DynamicSlot | DynamicSlot[] export type DynamicSlotSource = StaticSlots | DynamicSlotFn @@ -61,7 +61,7 @@ export const dynamicSlotsProxyHandlers: ProxyHandler = { export function getSlot( target: RawSlots, key: string, -): (Slot & { _bound?: Slot }) | undefined { +): (VaporSlot & { _bound?: VaporSlot }) | undefined { if (key === '$') return const dynamicSources = target.$ if (dynamicSources) { @@ -112,7 +112,7 @@ const dynamicSlotsPropsProxyHandlers: ProxyHandler = { export function createSlot( name: string | (() => string), rawProps?: LooseRawProps | null, - fallback?: Slot, + fallback?: VaporSlot, ): Block { const instance = currentInstance as VaporComponentInstance const rawSlots = instance.rawSlots diff --git a/packages/runtime-vapor/src/index.ts b/packages/runtime-vapor/src/index.ts index 5e96f98621e..808a5f46e45 100644 --- a/packages/runtime-vapor/src/index.ts +++ b/packages/runtime-vapor/src/index.ts @@ -1,16 +1,11 @@ // public APIs export { createVaporApp } from './apiCreateApp' export { defineVaporComponent } from './apiDefineComponent' +export { vaporInteropPlugin } from './vdomInterop' // compiler-use only export { insert, prepend, remove } from './block' -export { - createComponent, - createComponentWithFallback, - mountComponent, - unmountComponent, - type VaporComponentInstance, -} from './component' +export { createComponent, createComponentWithFallback } from './component' export { renderEffect } from './renderEffect' export { createSlot } from './componentSlots' export { template, children, next } from './dom/template' @@ -44,4 +39,3 @@ export { applySelectModel, applyDynamicModel, } from './directives/vModel' -export { vaporInteropPlugin } from './vdomInterop' diff --git a/packages/vue/src/index-with-vapor.ts b/packages/vue/src/index-with-vapor.ts new file mode 100644 index 00000000000..21f4c8073cf --- /dev/null +++ b/packages/vue/src/index-with-vapor.ts @@ -0,0 +1,3 @@ +// for type generation only +export * from './index' +export * from '@vue/runtime-vapor' diff --git a/rollup.dts.config.js b/rollup.dts.config.js index d9af98f1306..5ec8f321137 100644 --- a/rollup.dts.config.js +++ b/rollup.dts.config.js @@ -22,7 +22,7 @@ export default targetPackages.map( /** @returns {import('rollup').RollupOptions} */ pkg => { return { - input: `./temp/packages/${pkg}/src/index.d.ts`, + input: `./temp/packages/${pkg}/src/index${pkg === 'vue' ? '-with-vapor' : ''}.d.ts`, output: { file: `packages/${pkg}/dist/${pkg}.d.ts`, format: 'es',