Skip to content

Commit

Permalink
feat(esbuild-meta): filter out dynamic imports from output chunks
Browse files Browse the repository at this point in the history
  • Loading branch information
ChristopherPHolder committed Apr 15, 2024
1 parent 74ddbb0 commit bc6cf16
Show file tree
Hide file tree
Showing 2 changed files with 30 additions and 2 deletions.
20 changes: 18 additions & 2 deletions packages/esbuild-meta/src/lib/filter-meta.ts
Original file line number Diff line number Diff line change
@@ -1,5 +1,11 @@
import { CommandModule, CommandBuilder, Options, InferredOptionTypes, Argv } from 'yargs';
import { extractEntryFromManifest, filterMetaFromEntryPoints, getJson, makeJson } from './utils.js';
import {
extractEntryFromManifest,
filterMetaFromEntryPoints,
getJson,
makeJson,
removeDynamicImports,
} from './utils.js';

const distPath = {
alias: 'd',
Expand All @@ -22,7 +28,14 @@ const outPath = {
default: 'initial-stats.json'
} as const satisfies Options;

const filterMetaOptions = { distPath, appDist, outPath };
const excludeDynamicImports = {
alias: 'eDI',
type: 'boolean',
description: 'Should the dynamic imports be filtered out of the output chunk imports',
default: true,
} as const satisfies Options

const filterMetaOptions = { distPath, appDist, outPath, excludeDynamicImports };

type FilterMetaOptions = InferredOptionTypes<typeof filterMetaOptions>;
type FilterMetaCommandModule = CommandModule<unknown, FilterMetaOptions>;
Expand All @@ -36,6 +49,9 @@ const filterMetaHandler: FilterMetaCommandModule['handler'] = (argv: FilterMetaO
const entryPoints = extractEntryFromManifest(manifest);
const meta = getJson([argv.distPath, argv.appDist, 'stats.json']);
filterMetaFromEntryPoints(meta, entryPoints);
if (argv.excludeDynamicImports) {
removeDynamicImports(meta);
}
makeJson(argv.outPath, meta);
console.log('Filter Meta File was successfully created as ' + argv.outPath);
}
Expand Down
12 changes: 12 additions & 0 deletions packages/esbuild-meta/src/lib/utils.ts
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,18 @@ export function extractEntryFromManifest(manifest: any) {
return [main, polyfills];
}

export function removeDynamicImports(meta: Metafile): void {
const chunksPaths = Object.keys(meta.outputs);
for (const chunkPath of chunksPaths) {
const imports = meta.outputs[chunkPath].imports;
for (const importIndex in imports) {
if (imports[importIndex].kind === "dynamic-import") {
delete meta.outputs[chunkPath].imports[importIndex];
}
}
}
}

export function filterMetaFromEntryPoints(meta: Metafile, entryPoints: string[]) {
const extractedChunks = new Set<string>();
const alreadyExtractedChildren = (chunk: string) => extractedChunks.has(chunk);
Expand Down

0 comments on commit bc6cf16

Please sign in to comment.