mirror of
https://github.com/element-plus/element-plus.git
synced 2025-01-06 10:38:31 +08:00
53 lines
1.4 KiB
TypeScript
53 lines
1.4 KiB
TypeScript
import { EP_PREFIX } from '../constants'
|
|
import { epPackage } from './paths'
|
|
import {
|
|
getWorkspacePackages,
|
|
getPackageDependencies,
|
|
getWorkspaceNames,
|
|
pathRewriter,
|
|
} from './pkg'
|
|
import type { Module } from '../info'
|
|
|
|
import type { OutputOptions, RollupBuild } from 'rollup'
|
|
|
|
export const generateExternal = async (options: { full: boolean }) => {
|
|
const monoPackages = (await getWorkspacePackages())
|
|
.map((pkg) => pkg.manifest.name)
|
|
// filter root package
|
|
.filter((name): name is string => !!name)
|
|
|
|
return (id: string) => {
|
|
const packages: string[] = ['vue']
|
|
if (!options.full) {
|
|
const depPackages = getPackageDependencies(epPackage)
|
|
packages.push('@vue', ...monoPackages, ...depPackages)
|
|
}
|
|
|
|
return [...new Set(packages)].some(
|
|
(pkg) => id === pkg || id.startsWith(`${pkg}/`)
|
|
)
|
|
}
|
|
}
|
|
|
|
export function writeBundles(bundle: RollupBuild, options: OutputOptions[]) {
|
|
return Promise.all(options.map((option) => bundle.write(option)))
|
|
}
|
|
|
|
export const rollupPathRewriter = async () => {
|
|
const workspacePkgs = (await getWorkspaceNames()).filter((pkg) =>
|
|
pkg.startsWith(EP_PREFIX)
|
|
)
|
|
|
|
return (module: Module) => {
|
|
const rewriter = pathRewriter(module, false)
|
|
|
|
return (id: string) => {
|
|
if (workspacePkgs.some((pkg) => id.startsWith(pkg))) {
|
|
return rewriter(id)
|
|
} else {
|
|
return ''
|
|
}
|
|
}
|
|
}
|
|
}
|