diff --git a/browser/src/resolveId.ts b/browser/src/resolveId.ts index c36b095ced1..47772a9a981 100644 --- a/browser/src/resolveId.ts +++ b/browser/src/resolveId.ts @@ -1,9 +1,5 @@ -import type { - CustomPluginOptions, - Plugin, - ResolvedId, - ResolveIdResult -} from '../../src/rollup/types'; +import { ModuleLoaderResolveId } from '../../src/ModuleLoader'; +import type { CustomPluginOptions, Plugin, ResolveIdResult } from '../../src/rollup/types'; import type { PluginDriver } from '../../src/utils/PluginDriver'; import { resolveIdViaPlugins } from '../../src/utils/resolveIdViaPlugins'; import { throwNoFileSystem } from './error'; @@ -13,14 +9,7 @@ export async function resolveId( importer: string | undefined, _preserveSymlinks: boolean, pluginDriver: PluginDriver, - moduleLoaderResolveId: ( - source: string, - importer: string | undefined, - customOptions: CustomPluginOptions | undefined, - isEntry: boolean | undefined, - assertions: Record, - skip: readonly { importer: string | undefined; plugin: Plugin; source: string }[] | null - ) => Promise, + moduleLoaderResolveId: ModuleLoaderResolveId, skip: readonly { importer: string | undefined; plugin: Plugin; source: string }[] | null, customOptions: CustomPluginOptions | undefined, isEntry: boolean diff --git a/src/ModuleLoader.ts b/src/ModuleLoader.ts index 526f66053a6..d70b9193ed0 100644 --- a/src/ModuleLoader.ts +++ b/src/ModuleLoader.ts @@ -43,6 +43,15 @@ export interface UnresolvedModule { name: string | null; } +export type ModuleLoaderResolveId = ( + source: string, + importer: string | undefined, + customOptions: CustomPluginOptions | undefined, + isEntry: boolean | undefined, + assertions: Record, + skip?: readonly { importer: string | undefined; plugin: Plugin; source: string }[] | null +) => Promise; + type NormalizedResolveIdWithoutDefaults = Partial> & { external?: boolean | 'absolute'; id: string; @@ -184,14 +193,14 @@ export class ModuleLoader { return module.info; } - resolveId = async ( - source: string, - importer: string | undefined, - customOptions: CustomPluginOptions | undefined, - isEntry: boolean | undefined, - assertions: Record, - skip: readonly { importer: string | undefined; plugin: Plugin; source: string }[] | null = null - ): Promise => + resolveId: ModuleLoaderResolveId = async ( + source, + importer, + customOptions, + isEntry, + assertions, + skip = null + ) => this.getResolvedIdWithDefaults( this.getNormalizedResolvedIdWithoutDefaults( this.options.external(source, importer, false) @@ -672,13 +681,10 @@ export class ModuleLoader { if (!resolution) { return null; } - // TODO Lukas use withDefaults logic instead? Merge with other resolution case? - return { - assertions, - external: false, - moduleSideEffects: true, - ...resolution - } as ResolvedId; + return this.getResolvedIdWithDefaults( + resolution as NormalizedResolveIdWithoutDefaults, + assertions + ); } if (resolution == null) { // TODO Lukas handle existing resolved id conflicts diff --git a/src/utils/PluginContext.ts b/src/utils/PluginContext.ts index 45bb21c9253..686feb6d2e4 100644 --- a/src/utils/PluginContext.ts +++ b/src/utils/PluginContext.ts @@ -99,7 +99,7 @@ export function getPluginContext( importer, custom, isEntry, - // TODO Lukas use correct assertions + // TODO Lukas allow to provide assertions EMPTY_OBJECT, skipSelf ? [{ importer, plugin, source }] : null ); diff --git a/src/utils/options/normalizeOutputOptions.ts b/src/utils/options/normalizeOutputOptions.ts index ded7a7d6709..6451375503f 100644 --- a/src/utils/options/normalizeOutputOptions.ts +++ b/src/utils/options/normalizeOutputOptions.ts @@ -48,7 +48,6 @@ export function normalizeOutputOptions( esModule: config.esModule ?? 'if-default-prop', exports: getExports(config, unsetOptions), extend: config.extend || false, - // TODO Lukas for truly dynamic imports, setting `false` should still prevent assertions externalImportAssertions: config.externalImportAssertions ?? true, externalLiveBindings: config.externalLiveBindings ?? true, file, diff --git a/src/utils/resolveId.ts b/src/utils/resolveId.ts index 1695342189e..19505e3d88a 100644 --- a/src/utils/resolveId.ts +++ b/src/utils/resolveId.ts @@ -1,4 +1,5 @@ -import type { CustomPluginOptions, Plugin, ResolvedId, ResolveIdResult } from '../rollup/types'; +import { ModuleLoaderResolveId } from '../ModuleLoader'; +import type { CustomPluginOptions, Plugin, ResolveIdResult } from '../rollup/types'; import type { PluginDriver } from './PluginDriver'; import { promises as fs } from './fs'; import { basename, dirname, isAbsolute, resolve } from './path'; @@ -9,15 +10,7 @@ export async function resolveId( importer: string | undefined, preserveSymlinks: boolean, pluginDriver: PluginDriver, - // TODO Lukas extract/reuse type - moduleLoaderResolveId: ( - source: string, - importer: string | undefined, - customOptions: CustomPluginOptions | undefined, - isEntry: boolean | undefined, - assertions: Record, - skip: readonly { importer: string | undefined; plugin: Plugin; source: string }[] | null - ) => Promise, + moduleLoaderResolveId: ModuleLoaderResolveId, skip: readonly { importer: string | undefined; plugin: Plugin; source: string }[] | null, customOptions: CustomPluginOptions | undefined, isEntry: boolean diff --git a/src/utils/resolveIdViaPlugins.ts b/src/utils/resolveIdViaPlugins.ts index a4b77c14691..85e580185a7 100644 --- a/src/utils/resolveIdViaPlugins.ts +++ b/src/utils/resolveIdViaPlugins.ts @@ -1,10 +1,5 @@ -import type { - CustomPluginOptions, - Plugin, - PluginContext, - ResolvedId, - ResolveIdResult -} from '../rollup/types'; +import { ModuleLoaderResolveId } from '../ModuleLoader'; +import type { CustomPluginOptions, Plugin, PluginContext, ResolveIdResult } from '../rollup/types'; import type { PluginDriver, ReplaceContext } from './PluginDriver'; import { BLANK, EMPTY_OBJECT } from './blank'; @@ -12,15 +7,7 @@ export function resolveIdViaPlugins( source: string, importer: string | undefined, pluginDriver: PluginDriver, - // TODO Lukas extract/reuse type - moduleLoaderResolveId: ( - source: string, - importer: string | undefined, - customOptions: CustomPluginOptions | undefined, - isEntry: boolean | undefined, - assertions: Record, - skip: readonly { importer: string | undefined; plugin: Plugin; source: string }[] | null - ) => Promise, + moduleLoaderResolveId: ModuleLoaderResolveId, skip: readonly { importer: string | undefined; plugin: Plugin; source: string }[] | null, customOptions: CustomPluginOptions | undefined, isEntry: boolean diff --git a/test/function/samples/output-options-hook/_config.js b/test/function/samples/output-options-hook/_config.js index ab64f6f952a..3c98cf8c830 100644 --- a/test/function/samples/output-options-hook/_config.js +++ b/test/function/samples/output-options-hook/_config.js @@ -29,6 +29,7 @@ module.exports = { esModule: 'if-default-prop', exports: 'auto', extend: false, + externalImportAssertions: true, externalLiveBindings: true, format: 'cjs', freeze: true,