Skip to content

[api-extractor] bundledPackages does not work if the package to be bundled has no version field #5730

@denis-sokolov

Description

@denis-sokolov

Summary

When using the bundledPackages option, if the target package has no version field, it is silently not bundled.

Repro steps

  1. Take any existing api-extractor setup in a monorepo.
  2. Remove the version field in the package.json of a local package (say, it’s called "foo"). Example foo/package.json: { "name": "foo" }.
  3. Add bundledPackages: ["foo"] to the api-extractor configuration.
  4. Run the api-extractor.

Expected result: there are no instances of from "foo" in the output.

Actual result: there are instances of from "foo" in the output.

Details

The root of the issue is we depend on the TypeScript’s packageId field to get the name of a resolved module to match that name against the bundlePackages option configuration. But TypeScript does not generate a packageId field if a package is missing a name or version field (TypeScript issue).

const packageName: string | undefined = resolvedModule.packageId?.name;
if (packageName !== undefined && this._bundledPackageNames.has(packageName)) {
return false;
}

It’s not obvious how to get the module name without TypeScript’s help, so the root fix is probably upstream. That said, api-extractor does silently produce a highly unexpected result, primarily due to the casual use of the optional chaining operator.

Perhaps a strict crash is something we should have instead:

if (!resolvedModule.packageId) throw new InternalError("Compiler did not generate the packageId");

Given that we know the scenario, we could even suggest a remedy:

if (!resolvedModule.packageId) throw Error('Compiler did not generate the packageId. This is most likely a package you have has no version field. Try to add `version: ""` field for all your packages. https://github.com/microsoft/TypeScript/issues/63307');

Standard questions

Question Answer
@microsoft/api-extractor version? 7.57.7
Operating system? Mac
API Extractor scenario? rollups (.d.ts)
Would you consider contributing a PR? Yes
TypeScript compiler version? 5.9.3
Node.js version (node -v)? 22.22.0

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type
    No fields configured for issues without a type.

    Projects

    Status

    Needs triage

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions