diff --git a/.changeset/hot-gorillas-repair.md b/.changeset/hot-gorillas-repair.md new file mode 100644 index 0000000..ad20efb --- /dev/null +++ b/.changeset/hot-gorillas-repair.md @@ -0,0 +1,5 @@ +--- +"@arethetypeswrong/core": patch +--- + +Fix false positive MissingExportEquals that can occur when `--moduleResolution bundler` resolves to ESM JS diff --git a/packages/core/src/internal/checks/exportDefaultDisagreement.ts b/packages/core/src/internal/checks/exportDefaultDisagreement.ts index 5c83695..df27860 100644 --- a/packages/core/src/internal/checks/exportDefaultDisagreement.ts +++ b/packages/core/src/internal/checks/exportDefaultDisagreement.ts @@ -46,7 +46,7 @@ export default defineCheck({ } const implementationSourceFile = host.getSourceFile(implementationFileName)!; ts.bindSourceFile(implementationSourceFile, bindOptions); - if (!implementationSourceFile.symbol?.exports) { + if (!implementationSourceFile.symbol?.exports || implementationSourceFile.externalModuleIndicator) { return; } @@ -115,6 +115,7 @@ export default defineCheck({ }; } + // TODO: does not account for export * const typesHaveNonDefaultValueExport = Array.from(typesSourceFile.symbol.exports.values()).some((s) => { if (s.escapedName === "default") { return false; diff --git a/packages/core/test/problems/exportDefaultDisagreement.test.ts b/packages/core/test/problems/exportDefaultDisagreement.test.ts index c8dbe05..2d17b70 100644 --- a/packages/core/test/problems/exportDefaultDisagreement.test.ts +++ b/packages/core/test/problems/exportDefaultDisagreement.test.ts @@ -262,4 +262,22 @@ var index_default = { a, b };`, ), ); }); + + test("does not run on ESM", () => { + assert( + isOk( + `export * from 'foo'; + declare const _default: { Type: string, Schema: string }; + export default _default;`, + `var Type = "Type"; + var Schema = "Schema"; + var jsYaml = { + Type, + Schema + }; + export default jsYaml; + export { Type, Schema };`, + ), + ); + }); });