All files / cli/src/vite export-metadata-plugin.ts

0% Statements 0/6
0% Branches 0/4
0% Functions 0/3
0% Lines 0/6

Press n or j to go to the next uncovered block, b, p or k for the previous block.

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33                                                                 
import type { Plugin } from 'vite';
 
type BundleMetadata = {
  exports: string[];
  external: string[];
};
 
/**
 * Rollup plugin that captures export metadata from the bundle.
 *
 * Uses the `generateBundle` hook to extract the exports array from the
 * entry chunk.
 *
 * @returns A plugin with an additional `getMetadata()` method.
 */
export function exportMetadataPlugin(): Plugin & {
  getMetadata: () => BundleMetadata;
} {
  const metadata: BundleMetadata = { exports: [], external: [] };
 
  return {
    name: 'export-metadata',
    generateBundle(_, bundle) {
      for (const chunk of Object.values(bundle)) {
        if (chunk.type === 'chunk' && chunk.isEntry) {
          metadata.exports = chunk.exports;
        }
      }
    },
    getMetadata: () => metadata,
  };
}