diff --git a/packages/esbuild-meta/src/lib/filter-meta.ts b/packages/esbuild-meta/src/lib/filter-meta.ts index 2096b6c..418e69e 100644 --- a/packages/esbuild-meta/src/lib/filter-meta.ts +++ b/packages/esbuild-meta/src/lib/filter-meta.ts @@ -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', @@ -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; type FilterMetaCommandModule = CommandModule; @@ -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); } diff --git a/packages/esbuild-meta/src/lib/utils.ts b/packages/esbuild-meta/src/lib/utils.ts index ed8cef5..53a1510 100644 --- a/packages/esbuild-meta/src/lib/utils.ts +++ b/packages/esbuild-meta/src/lib/utils.ts @@ -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(); const alreadyExtractedChildren = (chunk: string) => extractedChunks.has(chunk);