build: use `stripInternal` (#9379)

Unlike our custom plugin, TypeScript won't automatically remove
re-exports of internal types, so we need to explicitly mark them as
`@internal`.
This commit is contained in:
Haoqun Jiang 2023-10-17 21:10:14 +08:00 committed by GitHub
parent 2857a59e61
commit 0a8be4537a
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 18 additions and 74 deletions

View File

@ -73,8 +73,13 @@ export {
defineSlots, defineSlots,
defineModel, defineModel,
withDefaults, withDefaults,
useModel, useModel
// internal } from './apiSetupHelpers'
/**
* @internal
*/
export {
mergeDefaults, mergeDefaults,
mergeModels, mergeModels,
createPropsRestProxy, createPropsRestProxy,
@ -111,7 +116,9 @@ export { useSSRContext, ssrContextKey } from './helpers/useSsrContext'
export { createRenderer, createHydrationRenderer } from './renderer' export { createRenderer, createHydrationRenderer } from './renderer'
export { queuePostFlushCb } from './scheduler' export { queuePostFlushCb } from './scheduler'
export { warn, assertNumber } from './warning' export { warn } from './warning'
/** @internal */
export { assertNumber } from './warning'
export { export {
handleError, handleError,
callWithErrorHandling, callWithErrorHandling,

View File

@ -3,7 +3,6 @@ import { parse } from '@babel/parser'
import { existsSync, readdirSync, readFileSync, writeFileSync } from 'fs' import { existsSync, readdirSync, readFileSync, writeFileSync } from 'fs'
import MagicString from 'magic-string' import MagicString from 'magic-string'
import dts from 'rollup-plugin-dts' import dts from 'rollup-plugin-dts'
import { walk } from 'estree-walker'
if (!existsSync('temp/packages')) { if (!existsSync('temp/packages')) {
console.warn( console.warn(
@ -41,12 +40,11 @@ export default targetPackages.map(pkg => {
/** /**
* Patch the dts generated by rollup-plugin-dts * Patch the dts generated by rollup-plugin-dts
* 1. remove exports marked as @internal * 1. Convert all types to inline exports
* 2. Convert all types to inline exports
* and remove them from the big export {} declaration * and remove them from the big export {} declaration
* otherwise it gets weird in vitepress `defineComponent` call with * otherwise it gets weird in vitepress `defineComponent` call with
* "the inferred type cannot be named without a reference" * "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} * @returns {import('rollup').Plugin}
*/ */
function patchTypes(pkg) { function patchTypes(pkg) {
@ -73,62 +71,10 @@ function patchTypes(pkg) {
return return
} }
shouldRemoveExport.add(name) shouldRemoveExport.add(name)
if (!removeInternal(parentDecl || node)) {
if (isExported.has(name)) { if (isExported.has(name)) {
// @ts-ignore // @ts-ignore
s.prependLeft((parentDecl || node).start, `export `) 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()
}
})
}
}
}
/**
* @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 isExported = 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) { for (const node of ast.program.body) {
if (node.type === 'VariableDeclaration') { if (node.type === 'VariableDeclaration') {
processDeclaration(node.declarations[0], node) processDeclaration(node.declarations[0], node)
@ -167,10 +113,6 @@ function patchTypes(pkg) {
node.type === 'ClassDeclaration' node.type === 'ClassDeclaration'
) { ) {
processDeclaration(node) 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() code = s.toString()
if (/@internal/.test(code)) {
throw new Error(
`unhandled @internal declarations detected in ${chunk.fileName}.`
)
}
// append pkg specific types // append pkg specific types
const additionalTypeDir = `packages/${pkg}/types` const additionalTypeDir = `packages/${pkg}/types`
if (existsSync(additionalTypeDir)) { if (existsSync(additionalTypeDir)) {

View File

@ -2,7 +2,8 @@
"extends": "./tsconfig.json", "extends": "./tsconfig.json",
"compilerOptions": { "compilerOptions": {
"declaration": true, "declaration": true,
"emitDeclarationOnly": true "emitDeclarationOnly": true,
"stripInternal": true
}, },
"exclude": [ "exclude": [
"packages/*/__tests__", "packages/*/__tests__",