Skip to content

Commit

Permalink
fix(@angular/build): warn when using both isolatedModules and `emit…
Browse files Browse the repository at this point in the history
…DecoratorMetadata`

If both the `isolatedModules` and `emitDecoratorMetadata` Typescript
options are enabled within a project, a warning will now be issued
explaining that not all metadata may be emitting for each decorator.
Isolated modules may not have access to non-local type information
that would otherwise be needed for complete metadata emit.

The `emitDecoratorMetadata` option is not required by Angular and can cause
runtime errors due to its underlying implementation when used with
ES2015+ output. The option is only compatible with the experimental
decorators and cannot be used with standard decorators. New Angular
projects also do not enable this option.

(cherry picked from commit 61e8185)
  • Loading branch information
clydin committed Jan 14, 2025
1 parent d52f853 commit 6a19c21
Showing 1 changed file with 14 additions and 0 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -689,6 +689,20 @@ function createCompilerOptionsTransformer(
});
}

if (compilerOptions.isolatedModules && compilerOptions.emitDecoratorMetadata) {
setupWarnings?.push({
text: `TypeScript compiler option 'isolatedModules' may prevent the 'emitDecoratorMetadata' option from emitting all metadata.`,
location: null,
notes: [
{
text:
`The 'emitDecoratorMetadata' option is not required by Angular` +
'and can be removed if not explictly required by the project.',
},
],
});
}

// Synchronize custom resolve conditions.
// Set if using the supported bundler resolution mode (bundler is the default in new projects)
if (compilerOptions.moduleResolution === 100 /* ModuleResolutionKind.Bundler */) {
Expand Down

0 comments on commit 6a19c21

Please sign in to comment.