Skip to content

[api-extractor] lodash.merge() counterintuitively applies $extends for reportVariants setting #4786

@jason-ha

Description

@jason-ha

Summary

Using a base configuration with long reportVariants such as

	"apiReport": {
		"reportVariants": ["public", "beta"]
	},

cannot be shortened in a derived config.

If the derived specifies:

	"apiReport": {
		"reportVariants": ["alpha"]
	},

The result using loadash.merge is

	"apiReport": {
		"reportVariants": ["alpha", "beta"]
	},

Workaround

Use array with duplicate entries to mask base config.
"reportVariants": ["alpha", "alpha"]

will produce internal "reportConfigs":

  "reportConfigs": [
    {
      "fileName": "fluid-framework.alpha.api.md",
      "variant": "alpha"
    },
    {
      "fileName": "fluid-framework.alpha.api.md",
      "variant": "alpha"
    }
  ],

but won't fail.

Details

Problem occurs in ExtractorConfig.ts line 614:

        // Merge extractorConfig into baseConfig, mutating baseConfig
        lodash.merge(baseConfig, configObject);
        configObject = baseConfig;

Standard questions

Please answer these questions to help us investigate your issue more quickly:

Question Answer
@microsoft/api-extractor version? 7.45.1
Operating system? Windows
API Extractor scenario? reporting (.api.md)
Would you consider contributing a PR? No
TypeScript compiler version? 5.4.2
Node.js version (node -v)? 18.20.2

Metadata

Metadata

Assignees

No one assigned

    Labels

    enhancementThe issue is asking for a new feature or design changehelp wantedIf you're looking to contribute, this issue is a good place to start!repro confirmedThe issue comments included repro instructions, and the maintainers reproduced the problem

    Type

    No type

    Projects

    Status

    Closed

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions