From a6a769844f208cea363aeb98d6f4bedcd97701cc Mon Sep 17 00:00:00 2001 From: ChristopherPHolder Date: Thu, 18 Apr 2024 20:30:23 +0200 Subject: [PATCH] feat(esbuild-meta): specify entry and dist --- packages/esbuild-meta/src/lib/filter-meta.ts | 26 ++++++++++---------- packages/esbuild-meta/src/lib/utils.ts | 12 ++++----- 2 files changed, 19 insertions(+), 19 deletions(-) diff --git a/packages/esbuild-meta/src/lib/filter-meta.ts b/packages/esbuild-meta/src/lib/filter-meta.ts index 7fee8fa..eb9094a 100644 --- a/packages/esbuild-meta/src/lib/filter-meta.ts +++ b/packages/esbuild-meta/src/lib/filter-meta.ts @@ -1,10 +1,10 @@ import { CommandModule, CommandBuilder, Options, InferredOptionTypes, Argv } from 'yargs'; import { - extractEntryFromManifest, + extractEntryPoints, filterMetaFromEntryPoints, + removeDynamicImports, getJson, makeJson, - removeDynamicImports, } from './utils.js'; const distPath = { @@ -14,13 +14,6 @@ const distPath = { description: 'The path to the dist folder' } as const satisfies Options; -const appDist = { - alias: 'ad', - type: 'string', - default: '', - description: 'The path to the dist folder of the build excluding base dist', -} as const satisfies Options; - const outPath = { alias: 'o', type: 'string', @@ -35,7 +28,15 @@ const excludeDynamicImports = { default: false, } as const satisfies Options; -const filterMetaOptions = { distPath, appDist, outPath, excludeDynamicImports }; +const entryPoints = { + alias: 'e', + type: 'array', + default: ['main-', 'polyfills-'], + coerce: (i) => i.map((value: never) => String(value)), + description: 'Entry points that should be considered for the bundle', +} as const satisfies Options; + +const filterMetaOptions = { distPath, outPath, excludeDynamicImports, entryPoints }; type FilterMetaOptions = InferredOptionTypes; type FilterMetaCommandModule = CommandModule; @@ -45,9 +46,8 @@ const filterMetaBuilder: CommandBuilder = (argv: Arg } const filterMetaHandler: FilterMetaCommandModule['handler'] = (argv: FilterMetaOptions) => { - const manifest = getJson([argv.distPath, argv.appDist, 'manifest.json']); - const entryPoints = extractEntryFromManifest(manifest); - const meta = getJson([argv.distPath, argv.appDist, 'stats.json']); + const meta = getJson([argv.distPath]); + const entryPoints = extractEntryPoints(meta, argv.entryPoints); filterMetaFromEntryPoints(meta, entryPoints); if (argv.excludeDynamicImports) { removeDynamicImports(meta); diff --git a/packages/esbuild-meta/src/lib/utils.ts b/packages/esbuild-meta/src/lib/utils.ts index 53a1510..7a9db12 100644 --- a/packages/esbuild-meta/src/lib/utils.ts +++ b/packages/esbuild-meta/src/lib/utils.ts @@ -10,12 +10,6 @@ export function makeJson(path: string, file: any) { writeFileSync(join(...[path]), JSON.stringify(file, null, 4), {encoding: 'utf-8'}); } -export function extractEntryFromManifest(manifest: any) { - const polyfills = manifest["polyfills.js"].replace('/ClientDist/', ''); - const main = manifest["main.js"].replace('/ClientDist/', ''); - return [main, polyfills]; -} - export function removeDynamicImports(meta: Metafile): void { const chunksPaths = Object.keys(meta.outputs); for (const chunkPath of chunksPaths) { @@ -28,6 +22,12 @@ export function removeDynamicImports(meta: Metafile): void { } } +const matchesPattern = (fileName: string, patterns: string[]) => patterns.some(substring => fileName.includes(substring)); + +export function extractEntryPoints(meta: Metafile, patterns: string[]): string[] { + return Object.keys(meta.outputs).filter(fileName => matchesPattern(fileName, patterns)); +} + export function filterMetaFromEntryPoints(meta: Metafile, entryPoints: string[]) { const extractedChunks = new Set(); const alreadyExtractedChildren = (chunk: string) => extractedChunks.has(chunk);