diff --git a/tools/release-packages/src/publish-dirs.ts b/tools/release-packages/src/publish-dirs.ts index 2777f88cc..e7e97b26f 100644 --- a/tools/release-packages/src/publish-dirs.ts +++ b/tools/release-packages/src/publish-dirs.ts @@ -66,16 +66,20 @@ interface PackageExports { [key: string]: PackageExports | string | undefined } -interface PublishPackageJSON extends Record { +interface PublishPackageJSON extends PackageJSON { exports?: PackageExports imports?: PackageExports } +function isPackageExports(value: unknown): value is PackageExports { + return typeof value === 'object' && value !== null && !Array.isArray(value) +} + function removeUnpublishedConditions(value: PackageExports | undefined): void { if (!value) return delete value.bun for (const child of Object.values(value)) { - if (typeof child === 'object' && child) removeUnpublishedConditions(child) + if (isPackageExports(child)) removeUnpublishedConditions(child) } } diff --git a/tools/release-packages/src/tarballs.ts b/tools/release-packages/src/tarballs.ts index cfcca7ab1..2c8d2db44 100644 --- a/tools/release-packages/src/tarballs.ts +++ b/tools/release-packages/src/tarballs.ts @@ -5,8 +5,14 @@ import { promisify } from 'node:util' const execFileAsync = promisify(execFile) +type PackageExports = { + [key: string]: PackageExports | string | null | undefined +} + type PackageJSON = { bin?: Record | string + exports?: PackageExports + imports?: PackageExports name: string } @@ -22,7 +28,7 @@ function packageExportTargets(value: unknown): string[] { return Object.values(value).flatMap(packageExportTargets) } -export function packageExportTargetPaths(packageJSON: { exports?: unknown }): string[] { +export function packageExportTargetPaths(packageJSON: Pick): string[] { return packageExportTargets(packageJSON.exports) } @@ -52,7 +58,7 @@ export async function validateTarballBinTargets(tarballPath: string): Promise { const entries = await tarballEntries(tarballPath) - const packageJSON = (await tarballPackageJSON(tarballPath)) as PackageJSON & { exports?: unknown } + const packageJSON = await tarballPackageJSON(tarballPath) for (const target of packageExportTargetPaths(packageJSON)) { if (!target.startsWith('./')) continue