From ea1693fb53791ed2211a51c48db869e54759a5e7 Mon Sep 17 00:00:00 2001 From: adventure-yunfei Date: Sat, 10 Jul 2021 20:55:27 +0800 Subject: [PATCH 1/4] fix: avoid entity name "default" --- apps/api-extractor/src/collector/Collector.ts | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/apps/api-extractor/src/collector/Collector.ts b/apps/api-extractor/src/collector/Collector.ts index 57d2d342e26..743841bba2b 100644 --- a/apps/api-extractor/src/collector/Collector.ts +++ b/apps/api-extractor/src/collector/Collector.ts @@ -529,7 +529,11 @@ export class Collector { let nameForEmit: string = idealNameForEmit; // Choose a name that doesn't conflict with usedNames or a global name - while (usedNames.has(nameForEmit) || this.globalVariableAnalyzer.hasGlobalName(nameForEmit)) { + while ( + nameForEmit === 'default' || + usedNames.has(nameForEmit) || + this.globalVariableAnalyzer.hasGlobalName(nameForEmit) + ) { nameForEmit = `${idealNameForEmit}_${++suffix}`; } entity.nameForEmit = nameForEmit; From d9f492639aac648a7daef965379b593f1dc2bc2c Mon Sep 17 00:00:00 2001 From: adventure-yunfei Date: Mon, 12 Jul 2021 20:34:44 +0800 Subject: [PATCH 2/4] add test case for default NamedImports --- .../config/build-config.json | 1 + .../api-extractor-scenarios.api.json | 276 ++++++++++++++++++ .../api-extractor-scenarios.api.md | 21 ++ .../namedDefaultImport/rollup.d.ts | 10 + .../src/namedDefaultImport/index.ts | 9 + .../src/namedDefaultImport/re-export.ts | 1 + 6 files changed, 318 insertions(+) create mode 100644 build-tests/api-extractor-scenarios/etc/test-outputs/namedDefaultImport/api-extractor-scenarios.api.json create mode 100644 build-tests/api-extractor-scenarios/etc/test-outputs/namedDefaultImport/api-extractor-scenarios.api.md create mode 100644 build-tests/api-extractor-scenarios/etc/test-outputs/namedDefaultImport/rollup.d.ts create mode 100644 build-tests/api-extractor-scenarios/src/namedDefaultImport/index.ts create mode 100644 build-tests/api-extractor-scenarios/src/namedDefaultImport/re-export.ts diff --git a/build-tests/api-extractor-scenarios/config/build-config.json b/build-tests/api-extractor-scenarios/config/build-config.json index c0f53c6482f..dc194fe5192 100644 --- a/build-tests/api-extractor-scenarios/config/build-config.json +++ b/build-tests/api-extractor-scenarios/config/build-config.json @@ -33,6 +33,7 @@ "importType", "inconsistentReleaseTags", "internationalCharacters", + "namedDefaultImport", "preapproved", "spanSorting", "typeOf", diff --git a/build-tests/api-extractor-scenarios/etc/test-outputs/namedDefaultImport/api-extractor-scenarios.api.json b/build-tests/api-extractor-scenarios/etc/test-outputs/namedDefaultImport/api-extractor-scenarios.api.json new file mode 100644 index 00000000000..f4e5fc38a1d --- /dev/null +++ b/build-tests/api-extractor-scenarios/etc/test-outputs/namedDefaultImport/api-extractor-scenarios.api.json @@ -0,0 +1,276 @@ +{ + "metadata": { + "toolPackage": "@microsoft/api-extractor", + "toolVersion": "[test mode]", + "schemaVersion": 1004, + "oldestForwardsCompatibleVersion": 1001, + "tsdocConfig": { + "$schema": "https://developer.microsoft.com/json-schemas/tsdoc/v0/tsdoc.schema.json", + "noStandardTags": true, + "tagDefinitions": [ + { + "tagName": "@alpha", + "syntaxKind": "modifier" + }, + { + "tagName": "@beta", + "syntaxKind": "modifier" + }, + { + "tagName": "@defaultValue", + "syntaxKind": "block" + }, + { + "tagName": "@decorator", + "syntaxKind": "block", + "allowMultiple": true + }, + { + "tagName": "@deprecated", + "syntaxKind": "block" + }, + { + "tagName": "@eventProperty", + "syntaxKind": "modifier" + }, + { + "tagName": "@example", + "syntaxKind": "block", + "allowMultiple": true + }, + { + "tagName": "@experimental", + "syntaxKind": "modifier" + }, + { + "tagName": "@inheritDoc", + "syntaxKind": "inline" + }, + { + "tagName": "@internal", + "syntaxKind": "modifier" + }, + { + "tagName": "@label", + "syntaxKind": "inline" + }, + { + "tagName": "@link", + "syntaxKind": "inline", + "allowMultiple": true + }, + { + "tagName": "@override", + "syntaxKind": "modifier" + }, + { + "tagName": "@packageDocumentation", + "syntaxKind": "modifier" + }, + { + "tagName": "@param", + "syntaxKind": "block", + "allowMultiple": true + }, + { + "tagName": "@privateRemarks", + "syntaxKind": "block" + }, + { + "tagName": "@public", + "syntaxKind": "modifier" + }, + { + "tagName": "@readonly", + "syntaxKind": "modifier" + }, + { + "tagName": "@remarks", + "syntaxKind": "block" + }, + { + "tagName": "@returns", + "syntaxKind": "block" + }, + { + "tagName": "@sealed", + "syntaxKind": "modifier" + }, + { + "tagName": "@see", + "syntaxKind": "block" + }, + { + "tagName": "@throws", + "syntaxKind": "block", + "allowMultiple": true + }, + { + "tagName": "@typeParam", + "syntaxKind": "block", + "allowMultiple": true + }, + { + "tagName": "@virtual", + "syntaxKind": "modifier" + }, + { + "tagName": "@betaDocumentation", + "syntaxKind": "modifier" + }, + { + "tagName": "@internalRemarks", + "syntaxKind": "block" + }, + { + "tagName": "@preapproved", + "syntaxKind": "modifier" + } + ], + "supportForTags": { + "@alpha": true, + "@beta": true, + "@defaultValue": true, + "@decorator": true, + "@deprecated": true, + "@eventProperty": true, + "@example": true, + "@experimental": true, + "@inheritDoc": true, + "@internal": true, + "@label": true, + "@link": true, + "@override": true, + "@packageDocumentation": true, + "@param": true, + "@privateRemarks": true, + "@public": true, + "@readonly": true, + "@remarks": true, + "@returns": true, + "@sealed": true, + "@see": true, + "@throws": true, + "@typeParam": true, + "@virtual": true, + "@betaDocumentation": true, + "@internalRemarks": true, + "@preapproved": true + } + } + }, + "kind": "Package", + "canonicalReference": "api-extractor-scenarios!", + "docComment": "", + "name": "api-extractor-scenarios", + "members": [ + { + "kind": "EntryPoint", + "canonicalReference": "api-extractor-scenarios!", + "name": "", + "members": [ + { + "kind": "Interface", + "canonicalReference": "api-extractor-scenarios!DefaultImportTypes:interface", + "docComment": "/**\n * @public\n */\n", + "excerptTokens": [ + { + "kind": "Content", + "text": "export interface DefaultImportTypes " + } + ], + "releaseTag": "Public", + "name": "DefaultImportTypes", + "members": [ + { + "kind": "PropertySignature", + "canonicalReference": "api-extractor-scenarios!DefaultImportTypes#dynamicImport:member", + "docComment": "", + "excerptTokens": [ + { + "kind": "Content", + "text": "dynamicImport: " + }, + { + "kind": "Content", + "text": "import('api-extractor-lib2-test')." + }, + { + "kind": "Reference", + "text": "default", + "canonicalReference": "api-extractor-lib2-test!~DefaultClass:class" + }, + { + "kind": "Content", + "text": ";" + } + ], + "isOptional": false, + "releaseTag": "Public", + "name": "dynamicImport", + "propertyTypeTokenRange": { + "startIndex": 1, + "endIndex": 3 + } + }, + { + "kind": "PropertySignature", + "canonicalReference": "api-extractor-scenarios!DefaultImportTypes#namedImport:member", + "docComment": "", + "excerptTokens": [ + { + "kind": "Content", + "text": "namedImport: " + }, + { + "kind": "Reference", + "text": "DefaultClass_namedImport", + "canonicalReference": "api-extractor-lib2-test!~DefaultClass:class" + }, + { + "kind": "Content", + "text": ";" + } + ], + "isOptional": false, + "releaseTag": "Public", + "name": "namedImport", + "propertyTypeTokenRange": { + "startIndex": 1, + "endIndex": 2 + } + }, + { + "kind": "PropertySignature", + "canonicalReference": "api-extractor-scenarios!DefaultImportTypes#reExport:member", + "docComment": "", + "excerptTokens": [ + { + "kind": "Content", + "text": "reExport: " + }, + { + "kind": "Reference", + "text": "DefaultClass_reExport", + "canonicalReference": "api-extractor-lib2-test!~DefaultClass:class" + }, + { + "kind": "Content", + "text": ";" + } + ], + "isOptional": false, + "releaseTag": "Public", + "name": "reExport", + "propertyTypeTokenRange": { + "startIndex": 1, + "endIndex": 2 + } + } + ], + "extendsTokenRanges": [] + } + ] + } + ] +} diff --git a/build-tests/api-extractor-scenarios/etc/test-outputs/namedDefaultImport/api-extractor-scenarios.api.md b/build-tests/api-extractor-scenarios/etc/test-outputs/namedDefaultImport/api-extractor-scenarios.api.md new file mode 100644 index 00000000000..286bbca3991 --- /dev/null +++ b/build-tests/api-extractor-scenarios/etc/test-outputs/namedDefaultImport/api-extractor-scenarios.api.md @@ -0,0 +1,21 @@ +## API Report File for "api-extractor-scenarios" + +> Do not edit this file. It is a report generated by [API Extractor](https://api-extractor.com/). + +```ts + +import { default as default_2 } from 'api-extractor-lib2-test'; + +// @public (undocumented) +export interface DefaultImportTypes { + // (undocumented) + dynamicImport: default_2; + // (undocumented) + namedImport: default_2; + // (undocumented) + reExport: default_2; +} + +// (No @packageDocumentation comment for this package) + +``` diff --git a/build-tests/api-extractor-scenarios/etc/test-outputs/namedDefaultImport/rollup.d.ts b/build-tests/api-extractor-scenarios/etc/test-outputs/namedDefaultImport/rollup.d.ts new file mode 100644 index 00000000000..0bf69c07b82 --- /dev/null +++ b/build-tests/api-extractor-scenarios/etc/test-outputs/namedDefaultImport/rollup.d.ts @@ -0,0 +1,10 @@ +import { default as default_2 } from 'api-extractor-lib2-test'; + +/** @public */ +export declare interface DefaultImportTypes { + namedImport: default_2; + reExport: default_2; + dynamicImport: default_2; +} + +export { } diff --git a/build-tests/api-extractor-scenarios/src/namedDefaultImport/index.ts b/build-tests/api-extractor-scenarios/src/namedDefaultImport/index.ts new file mode 100644 index 00000000000..46104f65f52 --- /dev/null +++ b/build-tests/api-extractor-scenarios/src/namedDefaultImport/index.ts @@ -0,0 +1,9 @@ +import { default as DefaultClass_namedImport } from 'api-extractor-lib2-test'; +import { DefaultClass_reExport } from './re-export'; + +/** @public */ +export interface DefaultImportTypes { + namedImport: DefaultClass_namedImport; + reExport: DefaultClass_reExport; + dynamicImport: import('api-extractor-lib2-test').default; +} diff --git a/build-tests/api-extractor-scenarios/src/namedDefaultImport/re-export.ts b/build-tests/api-extractor-scenarios/src/namedDefaultImport/re-export.ts new file mode 100644 index 00000000000..41904089db3 --- /dev/null +++ b/build-tests/api-extractor-scenarios/src/namedDefaultImport/re-export.ts @@ -0,0 +1 @@ +export { default as DefaultClass_reExport } from 'api-extractor-lib2-test'; From 9da824a2b32c392906a267b661fa3c582c716aaa Mon Sep 17 00:00:00 2001 From: adventure-yunfei Date: Tue, 13 Jul 2021 09:58:18 +0800 Subject: [PATCH 3/4] rush change --- .../fix-avoid-name-default_2021-07-12-12-38.json | 11 +++++++++++ 1 file changed, 11 insertions(+) create mode 100644 common/changes/@microsoft/api-extractor/fix-avoid-name-default_2021-07-12-12-38.json diff --git a/common/changes/@microsoft/api-extractor/fix-avoid-name-default_2021-07-12-12-38.json b/common/changes/@microsoft/api-extractor/fix-avoid-name-default_2021-07-12-12-38.json new file mode 100644 index 00000000000..1d9c6f5e108 --- /dev/null +++ b/common/changes/@microsoft/api-extractor/fix-avoid-name-default_2021-07-12-12-38.json @@ -0,0 +1,11 @@ +{ + "changes": [ + { + "packageName": "@microsoft/api-extractor", + "comment": "Fix to avoid \"default\" keyword as var name for dts rollup with default import", + "type": "patch" + } + ], + "packageName": "@microsoft/api-extractor", + "email": "adventure-yunfei@users.noreply.github.com" +} \ No newline at end of file From 06af07752b4193bb44e5c87882541d8d2cf65f47 Mon Sep 17 00:00:00 2001 From: Pete Gonzalez <4673363+octogonz@users.noreply.github.com> Date: Tue, 13 Jul 2021 22:13:38 -0700 Subject: [PATCH 4/4] Clarify change log --- .../api-extractor/fix-avoid-name-default_2021-07-12-12-38.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/common/changes/@microsoft/api-extractor/fix-avoid-name-default_2021-07-12-12-38.json b/common/changes/@microsoft/api-extractor/fix-avoid-name-default_2021-07-12-12-38.json index 1d9c6f5e108..fded11314a7 100644 --- a/common/changes/@microsoft/api-extractor/fix-avoid-name-default_2021-07-12-12-38.json +++ b/common/changes/@microsoft/api-extractor/fix-avoid-name-default_2021-07-12-12-38.json @@ -2,7 +2,7 @@ "changes": [ { "packageName": "@microsoft/api-extractor", - "comment": "Fix to avoid \"default\" keyword as var name for dts rollup with default import", + "comment": "Fix an issue where the .d.ts rollup sometimes used \"default\" as an identifier name causing a syntax error (GitHub #2804)", "type": "patch" } ],