]> git.ipfire.org Git - thirdparty/vuejs/core.git/commitdiff
build: use `stripInternal` (#9379)
authorHaoqun Jiang <haoqunjiang@gmail.com>
Tue, 17 Oct 2023 13:10:14 +0000 (21:10 +0800)
committerGitHub <noreply@github.com>
Tue, 17 Oct 2023 13:10:14 +0000 (21:10 +0800)
Unlike our custom plugin, TypeScript won't automatically remove
re-exports of internal types, so we need to explicitly mark them as
`@internal`.

packages/runtime-core/src/index.ts
rollup.dts.config.js
tsconfig.build.json

index 0d5fc39d5f6f20bcae1ecde039cf18f905493c4f..98aee757dab1b653f0ab12d6aa1f8aa72dd0fae7 100644 (file)
@@ -73,8 +73,13 @@ export {
   defineSlots,
   defineModel,
   withDefaults,
-  useModel,
-  // internal
+  useModel
+} from './apiSetupHelpers'
+
+/**
+ * @internal
+ */
+export {
   mergeDefaults,
   mergeModels,
   createPropsRestProxy,
@@ -111,7 +116,9 @@ export { useSSRContext, ssrContextKey } from './helpers/useSsrContext'
 
 export { createRenderer, createHydrationRenderer } from './renderer'
 export { queuePostFlushCb } from './scheduler'
-export { warn, assertNumber } from './warning'
+export { warn } from './warning'
+/** @internal */
+export { assertNumber } from './warning'
 export {
   handleError,
   callWithErrorHandling,
index f2d33d0e8f8a1d7a21f30d55fd023eb9b28672e5..39d2331e5f769b6ee2b718f26488f555de3ed68e 100644 (file)
@@ -3,7 +3,6 @@ import { parse } from '@babel/parser'
 import { existsSync, readdirSync, readFileSync, writeFileSync } from 'fs'
 import MagicString from 'magic-string'
 import dts from 'rollup-plugin-dts'
-import { walk } from 'estree-walker'
 
 if (!existsSync('temp/packages')) {
   console.warn(
@@ -41,12 +40,11 @@ export default targetPackages.map(pkg => {
 
 /**
  * Patch the dts generated by rollup-plugin-dts
- * 1. remove exports marked as @internal
- * 2. Convert all types to inline exports
+ * 1. Convert all types to inline exports
  *    and remove them from the big export {} declaration
  *    otherwise it gets weird in vitepress `defineComponent` call with
  *    "the inferred type cannot be named without a reference"
- * 3. Append custom augmentations (jsx, macros)
+ * 2. Append custom augmentations (jsx, macros)
  * @returns {import('rollup').Plugin}
  */
 function patchTypes(pkg) {
@@ -73,64 +71,12 @@ function patchTypes(pkg) {
           return
         }
         shouldRemoveExport.add(name)
-        if (!removeInternal(parentDecl || node)) {
-          if (isExported.has(name)) {
-            // @ts-ignore
-            s.prependLeft((parentDecl || node).start, `export `)
-          }
-          // traverse further for internal properties
-          if (
-            node.type === 'TSInterfaceDeclaration' ||
-            node.type === 'ClassDeclaration'
-          ) {
-            node.body.body.forEach(removeInternal)
-          } else if (node.type === 'TSTypeAliasDeclaration') {
-            // @ts-ignore
-            walk(node.typeAnnotation, {
-              enter(node) {
-                // @ts-ignore
-                if (removeInternal(node)) this.skip()
-              }
-            })
-          }
+        if (isExported.has(name)) {
+          // @ts-ignore
+          s.prependLeft((parentDecl || node).start, `export `)
         }
       }
 
-      /**
-       * @param {import('@babel/types').Node} node
-       * @returns {boolean}
-       */
-      function removeInternal(node) {
-        if (
-          node.leadingComments &&
-          node.leadingComments.some(c => {
-            return c.type === 'CommentBlock' && /@internal\b/.test(c.value)
-          })
-        ) {
-          /** @type {any} */
-          const n = node
-          let id
-          if (n.id && n.id.type === 'Identifier') {
-            id = n.id.name
-          } else if (n.key && n.key.type === 'Identifier') {
-            id = n.key.name
-          }
-          if (id) {
-            s.overwrite(
-              // @ts-ignore
-              node.leadingComments[0].start,
-              node.end,
-              `/* removed internal: ${id} */`
-            )
-          } else {
-            // @ts-ignore
-            s.remove(node.leadingComments[0].start, node.end)
-          }
-          return true
-        }
-        return false
-      }
-
       const isExported = new Set()
       const shouldRemoveExport = new Set()
 
@@ -146,7 +92,7 @@ function patchTypes(pkg) {
         }
       }
 
-      // pass 1: remove internals + add exports
+      // pass 1: add exports
       for (const node of ast.program.body) {
         if (node.type === 'VariableDeclaration') {
           processDeclaration(node.declarations[0], node)
@@ -167,10 +113,6 @@ function patchTypes(pkg) {
           node.type === 'ClassDeclaration'
         ) {
           processDeclaration(node)
-        } else if (removeInternal(node)) {
-          throw new Error(
-            `unhandled export type marked as @internal: ${node.type}`
-          )
         }
       }
 
@@ -213,12 +155,6 @@ function patchTypes(pkg) {
       }
       code = s.toString()
 
-      if (/@internal/.test(code)) {
-        throw new Error(
-          `unhandled @internal declarations detected in ${chunk.fileName}.`
-        )
-      }
-
       // append pkg specific types
       const additionalTypeDir = `packages/${pkg}/types`
       if (existsSync(additionalTypeDir)) {
index 89aaa2278f410cf031eea08d9664b1a42c0d7d6e..954103c0f2f66d05033a949956d1bb0e4006df68 100644 (file)
@@ -2,7 +2,8 @@
   "extends": "./tsconfig.json",
   "compilerOptions": {
     "declaration": true,
-    "emitDeclarationOnly": true
+    "emitDeclarationOnly": true,
+    "stripInternal": true
   },
   "exclude": [
     "packages/*/__tests__",