fix(types/jsx): move JSX DOM types back to `@vue/runtime-dom` (#7979)

This commit is contained in:
Haoqun Jiang 2023-03-29 20:22:29 +08:00 committed by GitHub
parent ff60b933ae
commit ffe679c490
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
6 changed files with 48 additions and 35 deletions

View File

@ -252,3 +252,5 @@ export const initDirectivesForSSR = __SSR__
// re-export everything from core
// h, Component, reactivity API, nextTick, flags & types
export * from '@vue/runtime-core'
export * from './jsx'

View File

@ -1319,3 +1319,17 @@ type EventHandlers<E> = {
? E[K]
: (payload: E[K]) => void
}
import { VNodeRef } from '@vue/runtime-core'
export type ReservedProps = {
key?: string | number | symbol
ref?: VNodeRef
ref_for?: boolean
ref_key?: string
}
export type NativeElements = {
[K in keyof IntrinsicElementAttributes]: IntrinsicElementAttributes[K] &
ReservedProps
}

View File

@ -1,17 +1,9 @@
import { VNode, VNodeRef } from '@vue/runtime-dom'
import { IntrinsicElementAttributes } from './dom'
export type ReservedProps = {
key?: string | number | symbol
ref?: VNodeRef
ref_for?: boolean
ref_key?: string
}
export type NativeElements = {
[K in keyof IntrinsicElementAttributes]: IntrinsicElementAttributes[K] &
ReservedProps
}
import type {
VNode,
IntrinsicElementAttributes,
ReservedProps,
NativeElements
} from '@vue/runtime-dom'
/**
* JSX namespace for usage with @jsxImportsSource directive

22
packages/vue/jsx.d.ts vendored
View File

@ -1,21 +1,11 @@
// global JSX namespace registration
// somehow we have to copy=pase the jsx-runtime types here to make TypeScript happy
import { VNode, VNodeRef } from '@vue/runtime-dom'
import { IntrinsicElementAttributes } from './jsx-runtime/dom'
export * from './jsx-runtime/dom'
export type ReservedProps = {
key?: string | number | symbol
ref?: VNodeRef
ref_for?: boolean
ref_key?: string
}
export type NativeElements = {
[K in keyof IntrinsicElementAttributes]: IntrinsicElementAttributes[K] &
ReservedProps
}
import type {
VNode,
IntrinsicElementAttributes,
ReservedProps,
NativeElements
} from '@vue/runtime-dom'
declare global {
namespace JSX {

View File

@ -2,5 +2,3 @@
// imports the global JSX namespace registration for compat.
// TODO: remove in 3.4
import '../jsx'
export * from '../jsx-runtime/dom'

View File

@ -88,7 +88,21 @@ function patchTypes(pkg) {
return false
}
const isExported = new Set()
const shouldRemoveExport = new Set()
// pass 0: check all exported types
for (const node of ast.program.body) {
if (node.type === 'ExportNamedDeclaration' && !node.source) {
for (let i = 0; i < node.specifiers.length; i++) {
const spec = node.specifiers[i]
if (spec.type === 'ExportSpecifier') {
isExported.add(spec.local.name)
}
}
}
}
// pass 1: remove internals + add exports
for (const node of ast.program.body) {
if (
@ -96,10 +110,13 @@ function patchTypes(pkg) {
node.type === 'TSInterfaceDeclaration') &&
!node.id.name.startsWith(`_`)
) {
shouldRemoveExport.add(node.id.name)
const name = node.id.name
shouldRemoveExport.add(name)
if (!removeInternal(node)) {
// @ts-ignore
s.prependLeft(node.start, `export `)
if (isExported.has(name)) {
// @ts-ignore
s.prependLeft(node.start, `export `)
}
// traverse further for internal properties
if (node.type === 'TSInterfaceDeclaration') {
node.body.body.forEach(removeInternal)