diff --git a/rollup/rollup-metadata-plugin.ts b/rollup/rollup-metadata-plugin.ts index 54d1b7de..644b29f9 100644 --- a/rollup/rollup-metadata-plugin.ts +++ b/rollup/rollup-metadata-plugin.ts @@ -1,6 +1,5 @@ -import type { OutputBundle, OutputChunk, OutputOptions, Plugin, PluginContext } from 'rollup' +import type { OutputBundle, OutputOptions, Plugin, PluginContext } from 'rollup' import { builtinModules } from 'module' -import path from 'path' interface Group { name: string @@ -22,7 +21,7 @@ interface GroupResult { interface Options { stage?: 'generateBundle' | 'writeBundle' getGroup?: (entryPoint: string, options: OutputOptions) => { name: string, publicName?: string, priority?: number } - handle (this: PluginContext, group: GroupResult, moduleGroupName: Map, options: OutputOptions, bundle: OutputBundle): void | Promise + handle (this: PluginContext, group: GroupResult, moduleGroupName: Map, otherDependencies: Set, options: OutputOptions, bundle: OutputBundle): void | Promise } export default ({ handle, getGroup = () => ({ name: 'main' }), stage = 'generateBundle' }: Options): Plugin => ({ @@ -31,13 +30,6 @@ export default ({ handle, getGroup = () => ({ name: 'main' }), stage = 'generate const dependencyCache = new Map>() const externalDependencyCache = new Map>() - const inputToOutput = Object.fromEntries(Object.values(bundle) - .filter((chunk): chunk is OutputChunk => 'code' in chunk) - .map(chunk => [ - chunk.facadeModuleId, - path.resolve(options.dir!, chunk.preliminaryFileName) - ])) - const moduleExternalDependencies = new Map>() const getModuleDependencies = (id: string, paths: string[]): { internal: Set, external: Set } => { if (paths.includes(id)) { @@ -61,7 +53,7 @@ export default ({ handle, getGroup = () => ({ name: 'main' }), stage = 'generate const dependencies = [...moduleInfo.importedIds, ...moduleInfo.dynamicallyImportedIds].map(depId => { return getModuleDependencies(depId, [...paths, id]) }) - dependencyCache.set(id, new Set([inputToOutput[id] ?? id, ...dependencies.flatMap(d => Array.from(d.internal))])) + dependencyCache.set(id, new Set([id, ...dependencies.flatMap(d => Array.from(d.internal))])) externalDependencyCache.set(id, new Set(dependencies.flatMap(d => Array.from(d.external)))) } @@ -137,8 +129,15 @@ export default ({ handle, getGroup = () => ({ name: 'main' }), stage = 'generate } }) + const otherDependencies = new Set(Array.from(moduleExternalDependencies.values()).map(set => Array.from(set)).flat()) + for (const group of groupResults) { + for (const directDependency of group.directDependencies) { + otherDependencies.delete(directDependency) + } + } + await Promise.all(groupResults.map(async (group) => { - await handle.call(this, group, moduleGroupName, options, bundle) + await handle.call(this, group, moduleGroupName, otherDependencies, options, bundle) })) } }) diff --git a/rollup/rollup.config.ts b/rollup/rollup.config.ts index 68057798..ff180442 100644 --- a/rollup/rollup.config.ts +++ b/rollup/rollup.config.ts @@ -713,9 +713,10 @@ export default (args: Record): rollup.RollupOptions[] => { priority: 1 } }, - async handle (group, moduleGroupName, options, bundle) { + async handle (group, moduleGroupName, otherDependencies, options, bundle) { if (group.name === 'main') { // Generate package.json + const dependencies = new Set([...group.directDependencies, ...otherDependencies]) const packageJson: PackageJson = { ...Object.fromEntries(Object.entries(pkg).filter(([key]) => ['name', 'description', 'version', 'keywords', 'author', 'license', 'repository', 'type'].includes(key))), private: false, @@ -802,8 +803,8 @@ export default (args: Record): rollup.RollupOptions[] => { } }, dependencies: { - ...Object.fromEntries(Object.entries(pkg.dependencies).filter(([key]) => group.directDependencies.has(key))), - ...Object.fromEntries(Array.from(group.directDependencies).filter(dep => dep.startsWith('@codingame/monaco-vscode-')).map(dep => [dep, pkg.version])) + ...Object.fromEntries(Object.entries(pkg.dependencies).filter(([key]) => dependencies.has(key))), + ...Object.fromEntries(Array.from(dependencies).filter(dep => dep.startsWith('@codingame/monaco-vscode-')).map(dep => [dep, pkg.version])) } } this.emitFile({ diff --git a/rollup/rollup.default-extensions.ts b/rollup/rollup.default-extensions.ts index 1f7aa1e8..0da926e6 100644 --- a/rollup/rollup.default-extensions.ts +++ b/rollup/rollup.default-extensions.ts @@ -89,7 +89,7 @@ export default rollup.defineConfig([ } }), metadataPlugin({ - handle ({ directDependencies }, moduleGroupName, options, bundle) { + handle ({ directDependencies }, moduleGroupName, otherDependencies, options, bundle) { const entrypoint = Object.values(bundle).filter(v => (v as rollup.OutputChunk).isEntry)[0]!.fileName const packageJson: PackageJson = { name: `@codingame/monaco-vscode-${name}-default-extension`, @@ -158,7 +158,7 @@ ${extensions.map(name => ` whenReady${pascalCase(name)}()`).join(',\n')} } }, metadataPlugin({ - handle ({ directDependencies }, moduleGroupName, options, bundle) { + handle ({ directDependencies }, moduleGroupName, otherDependencies, options, bundle) { const entrypoint = Object.values(bundle).filter(v => (v as rollup.OutputChunk).isEntry)[0]!.fileName const packageJson: PackageJson = { name, diff --git a/rollup/rollup.rollup-plugins.config.ts b/rollup/rollup.rollup-plugins.config.ts index 39fbedcd..a82cddcd 100644 --- a/rollup/rollup.rollup-plugins.config.ts +++ b/rollup/rollup.rollup-plugins.config.ts @@ -56,7 +56,7 @@ const config: rollup.RollupOptions[] = [{ preferConst: false }), metadataPlugin({ - handle (_, dependencies) { + handle ({ directDependencies }) { const packageJson: PackageJson = { name: `@codingame/monaco-vscode-${path.basename(output)}`, ...Object.fromEntries(Object.entries(pkg).filter(([key]) => ['version', 'keywords', 'author', 'license', 'repository', 'type'].includes(key))), @@ -67,7 +67,7 @@ const config: rollup.RollupOptions[] = [{ types: `${path.basename(output)}.d.ts`, dependencies: { vscode: `npm:${pkg.name}@^${pkg.version}`, - ...Object.fromEntries(Object.entries(pkg.dependencies).filter(([key]) => dependencies.has(key))) + ...Object.fromEntries(Object.entries(pkg.dependencies).filter(([key]) => directDependencies.has(key))) } } this.emitFile({ diff --git a/rollup/rollup.types.config.ts b/rollup/rollup.types.config.ts index b608f047..6a62ad16 100644 --- a/rollup/rollup.types.config.ts +++ b/rollup/rollup.types.config.ts @@ -122,7 +122,7 @@ export default rollup.defineConfig((<{input: Record, output: str priority: 1 } }, - async handle ({ name: groupName, exclusiveModules, entrypoints }, moduleGroupName, options, bundle) { + async handle ({ name: groupName, exclusiveModules, entrypoints }, moduleGroupName, otherDependencies, options, bundle) { if (groupName === 'main') { return }