rushstack icon indicating copy to clipboard operation
rushstack copied to clipboard

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

Open jason-ha opened this issue 8 months ago • 1 comments

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

jason-ha avatar Jun 15 '24 03:06 jason-ha