Bläddra i källkod

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

Haoqun Jiang 3 år sedan
förälder
incheckning
ffe679c490

+ 2 - 0
packages/runtime-dom/src/index.ts

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

+ 14 - 0
packages/vue/jsx-runtime/dom.d.ts → packages/runtime-dom/src/jsx.ts

@@ -1319,3 +1319,17 @@ type EventHandlers<E> = {
     ? E[K]
     ? E[K]
     : (payload: E[K]) => void
     : (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
+}

+ 6 - 14
packages/vue/jsx-runtime/index.d.ts

@@ -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
  * JSX namespace for usage with @jsxImportsSource directive

+ 6 - 16
packages/vue/jsx.d.ts

@@ -1,21 +1,11 @@
 // global JSX namespace registration
 // global JSX namespace registration
 // somehow we have to copy=pase the jsx-runtime types here to make TypeScript happy
 // 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 {
 declare global {
   namespace JSX {
   namespace JSX {

+ 0 - 2
packages/vue/types/jsx-register.d.ts

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

+ 20 - 3
rollup.dts.config.js

@@ -88,7 +88,21 @@ function patchTypes(pkg) {
         return false
         return false
       }
       }
 
 
+      const isExported = new Set()
       const shouldRemoveExport = 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
       // pass 1: remove internals + add exports
       for (const node of ast.program.body) {
       for (const node of ast.program.body) {
         if (
         if (
@@ -96,10 +110,13 @@ function patchTypes(pkg) {
             node.type === 'TSInterfaceDeclaration') &&
             node.type === 'TSInterfaceDeclaration') &&
           !node.id.name.startsWith(`_`)
           !node.id.name.startsWith(`_`)
         ) {
         ) {
-          shouldRemoveExport.add(node.id.name)
+          const name = node.id.name
+          shouldRemoveExport.add(name)
           if (!removeInternal(node)) {
           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
             // traverse further for internal properties
             if (node.type === 'TSInterfaceDeclaration') {
             if (node.type === 'TSInterfaceDeclaration') {
               node.body.body.forEach(removeInternal)
               node.body.body.forEach(removeInternal)