Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We鈥檒l occasionally send you account related emails.

Already on GitHub? Sign in to your account

fix: Error with angular and specific fast web components in multiple components like checkbox #4793

Closed
LaraAu opened this issue May 27, 2021 · 5 comments
Labels
area:dev-ops Pertains to build, CI, and other dev-ops work bug A bug community:request Issues specifically reported by a member of the community. status:blocked Any issue blocked by another
Projects

Comments

@LaraAu
Copy link

LaraAu commented May 27, 2021

馃悰 Bug Report

Using angular/cli with FAST webcomponents. I used the page https://www.fast.design/docs/integrations/angular for reference. Everything worked properly using "ng serve" but using it in production mode ("ng serve --configuration production") made an error occur for many components like FASTCheckbox.

馃捇 Repro or Code Sample

The issue did not occur in Stackblitz but occured with this code when I downloaded it and ran it locally with ng serve --configuration production
https://stackblitz.com/edit/angular-fast-checkbox?file=src/app/app.component.ts

馃 Expected Behavior

The checkbox should be visible and no error should occur when running it outside of Stackblitz.

馃槸 Current Behavior

The checkbox is not shown but an error occurs:

Uncaught InternalError: too much recursion
getValue main.js:27461
get main.js:27292
watch main.js:27395
track main.js:27278
getValue main.js:27462
get main.js:27292
watch main.js:27395
track main.js:27278
getValue main.js:27462
get main.js:27292
watch main.js:27395
track main.js:27278
getValue main.js:27462
get main.js:27292
watch main.js:27395
track main.js:27278
getValue main.js:27462
get main.js:27292
watch main.js:27395
track main.js:27278
getValue main.js:27462
get main.js:27292
watch main.js:27395
track main.js:27278
getValue main.js:27462
get main.js:27292
watch main.js:27395
track main.js:27278
getValue main.js:27462
get main.js:27292
watch main.js:27395
track main.js:27278
getValue main.js:27462
get main.js:27292
watch main.js:27395
track main.js:27278
getValue main.js:27462
get main.js:27292
watch main.js:27395
track main.js:27278
getValue main.js:27462
get main.js:27292
watch main.js:27395
track main.js:27278
getValue main.js:27462
get main.js:27292
watch main.js:27395
track main.js:27278
getValue main.js:27462
get main.js:27292
watch main.js:27395
track main.js:27278
getValue main.js:27462
get main.js:27292
watch main.js:27395
track main.js:27278
getValue main.js:27462
get main.js:27292
watch main.js:27395
track main.js:27278
getValue main.js:27462
get main.js:27292
watch main.js:27395
track main.js:27278
getValue main.js:27462
get main.js:27292
watch main.js:27395
track main.js:27278
getValue main.js:27462
get main.js:27292
watch main.js:27395
track main.js:27278
getValue main.js:27462
get main.js:27292
watch main.js:27395
track main.js:27278
getValue main.js:27462
get main.js:27292
watch main.js:27395
track main.js:27278
getValue main.js:27462
get main.js:27292
watch main.js:27395
track main.js:27278
getValue main.js:27462
get main.js:27292
watch main.js:27395
track main.js:27278
getValue main.js:27462
get main.js:27292
watch main.js:27395
track main.js:27278
getValue main.js:27462
get main.js:27292
watch main.js:27395
track main.js:27278
getValue main.js:27462
get main.js:27292
watch main.js:27395
track main.js:27278
getValue main.js:27462
get main.js:27292
watch main.js:27395
track main.js:27278
getValue main.js:27462
get main.js:27292
watch main.js:27395
track main.js:27278
getValue main.js:27462
get main.js:27292
watch main.js:27395
track main.js:27278
getValue main.js:27462
get main.js:27292
watch main.js:27395
track main.js:27278
getValue main.js:27462
get main.js:27292
watch main.js:27395
track main.js:27278
getValue main.js:27462
get main.js:27292
watch main.js:27395
track main.js:27278
getValue main.js:27462
get main.js:27292
watch main.js:27395
track main.js:27278
main.js:formatted:27461
getValue main.js:27461
get main.js:27292
watch main.js:27395
track main.js:27278
getValue main.js:27462
get main.js:27292
watch main.js:27395
track main.js:27278
getValue main.js:27462
get main.js:27292
watch main.js:27395
track main.js:27278
getValue main.js:27462
get main.js:27292
watch main.js:27395
track main.js:27278
getValue main.js:27462
get main.js:27292
watch main.js:27395
track main.js:27278
getValue main.js:27462
get main.js:27292
watch main.js:27395
track main.js:27278
getValue main.js:27462
get main.js:27292
watch main.js:27395
track main.js:27278
getValue main.js:27462
get main.js:27292
watch main.js:27395
track main.js:27278
getValue main.js:27462
get main.js:27292
watch main.js:27395
track main.js:27278
getValue main.js:27462
get main.js:27292
watch main.js:27395
track main.js:27278
getValue main.js:27462
get main.js:27292
watch main.js:27395
track main.js:27278
getValue main.js:27462
get main.js:27292
watch main.js:27395
track main.js:27278
getValue main.js:27462
get main.js:27292
watch main.js:27395
track main.js:27278
getValue main.js:27462
get main.js:27292
watch main.js:27395
track main.js:27278
getValue main.js:27462
get main.js:27292
watch main.js:27395
track main.js:27278
getValue main.js:27462
get main.js:27292
watch main.js:27395
track main.js:27278
getValue main.js:27462
get main.js:27292
watch main.js:27395
track main.js:27278
getValue main.js:27462
get main.js:27292
watch main.js:27395
track main.js:27278
getValue main.js:27462
get main.js:27292
watch main.js:27395
track main.js:27278
getValue main.js:27462
get main.js:27292
watch main.js:27395
track main.js:27278
getValue main.js:27462
get main.js:27292
watch main.js:27395
track main.js:27278
getValue main.js:27462
get main.js:27292
watch main.js:27395
track main.js:27278
getValue main.js:27462
get main.js:27292
watch main.js:27395
track main.js:27278
getValue main.js:27462
get main.js:27292
watch main.js:27395
track main.js:27278
getValue main.js:27462
get main.js:27292
watch main.js:27395
track main.js:27278
getValue main.js:27462
get main.js:27292
watch main.js:27395
track main.js:27278
getValue main.js:27462
get main.js:27292
watch main.js:27395
track main.js:27278
getValue main.js:27462
get main.js:27292
watch main.js:27395
track main.js:27278
getValue main.js:27462
get main.js:27292
watch main.js:27395
track main.js:27278
getValue main.js:27462
get main.js:27292
watch main.js:27395
track main.js:27278
getValue main.js:27462
get main.js:27292
watch main.js:27395
track main.js:27278
getValue main.js:27462
get main.js:27292
watch main.js:27395
track main.js:27278

ERROR InternalError: too much recursion
watch main.js:27386
track main.js:27278
getValue main.js:27462
get main.js:27292
watch main.js:27395
track main.js:27278
getValue main.js:27462
get main.js:27292
watch main.js:27395
track main.js:27278
getValue main.js:27462
get main.js:27292
watch main.js:27395
track main.js:27278
getValue main.js:27462
get main.js:27292
watch main.js:27395
track main.js:27278
getValue main.js:27462
get main.js:27292
watch main.js:27395
track main.js:27278
getValue main.js:27462
get main.js:27292
watch main.js:27395
track main.js:27278
getValue main.js:27462
get main.js:27292
watch main.js:27395
track main.js:27278
getValue main.js:27462
get main.js:27292
watch main.js:27395
track main.js:27278
getValue main.js:27462
get main.js:27292
watch main.js:27395
track main.js:27278
getValue main.js:27462
get main.js:27292
watch main.js:27395
track main.js:27278
getValue main.js:27462
get main.js:27292
watch main.js:27395
track main.js:27278
getValue main.js:27462
get main.js:27292
watch main.js:27395
track main.js:27278
getValue main.js:27462
get main.js:27292
watch main.js:27395
track main.js:27278
getValue main.js:27462
get main.js:27292
watch main.js:27395
track main.js:27278
getValue main.js:27462
get main.js:27292
watch main.js:27395
track main.js:27278
getValue main.js:27462
get main.js:27292
watch main.js:27395
track main.js:27278
getValue main.js:27462
get main.js:27292
watch main.js:27395
track main.js:27278
getValue main.js:27462
get main.js:27292
watch main.js:27395
track main.js:27278
getValue main.js:27462
get main.js:27292
watch main.js:27395
track main.js:27278
getValue main.js:27462
get main.js:27292
watch main.js:27395
track main.js:27278
getValue main.js:27462
get main.js:27292
watch main.js:27395
track main.js:27278
getValue main.js:27462
get main.js:27292
watch main.js:27395
track main.js:27278
getValue main.js:27462
get main.js:27292
watch main.js:27395
track main.js:27278
getValue main.js:27462
get main.js:27292
watch main.js:27395
track main.js:27278
getValue main.js:27462
get main.js:27292
watch main.js:27395
track main.js:27278
getValue main.js:27462
get main.js:27292
watch main.js:27395
track main.js:27278
getValue main.js:27462
get main.js:27292
watch main.js:27395
track main.js:27278
getValue main.js:27462
get main.js:27292
watch main.js:27395
track main.js:27278
getValue main.js:27462
get main.js:27292
watch main.js:27395
track main.js:27278
getValue main.js:27462
get main.js:27292
watch main.js:27395
track main.js:27278
getValue main.js:27462
get main.js:27292
watch main.js:27395
track main.js:27278
getValue main.js:27462
get main.js:27292

馃拋 Possible Solution

Not entirely sure what happens but preventing the scripts from optimizing prevents the problem. (Maybe treeshaking/dead code removal?)

馃敠 Context

I tried to use Fluent Components in a Angular Webapp but the issue occured when I tried to deploy it. I realized that it wasn't soley a Fluent problem but had the issue with Fast web components as well. For Fluent I tried including the CDN instead and when then running it in production there weren't any errors and everything worked properly but this is not a real solution for us.

馃實 Your Environment

  • OS & Device: Windows on PC
  • Browser Microsoft Edge (Version 90.0.818.66), Google Chrome, Mozilla FireFox (Version 88.0.1)
  • Versions see above
@LaraAu LaraAu added the status:triage New Issue - needs triage label May 27, 2021
@EisenbergEffect EisenbergEffect added area:dev-ops Pertains to build, CI, and other dev-ops work bug A bug community:request Issues specifically reported by a member of the community. status:blocked Any issue blocked by another and removed status:triage New Issue - needs triage labels Jun 21, 2021
@EisenbergEffect EisenbergEffect added this to Triage in Components via automation Jun 21, 2021
@EisenbergEffect
Copy link
Contributor

Can you provide Angular version info? This seems like a duplicate of another issue we saw reported where the Angular compiler was using internal settings that broke getters. If that's the case, then Angular needs to provide some way to adjust that setting.

@rajsite
Copy link

rajsite commented Jul 9, 2021

I think we hit the same issue. It looks like one of the optimization passes used for production builds in Angular (terser configured with pure_getters) results in this behavior. The behavior is not seen in dev builds which skip the optimization pass.

There is an open feature request to make the optimization passes more configurable but there has not been much activity for a few years: angular/angular-cli#15761

The workaround of disabling buildOptimizer completely allowed fast-elements to run. Completely disabling buildOptimizer resulted in a pretty big bundle size increase in my sample app. Currently weighing against the option of hackier solutions like a script to modify the pure_getters setting of files in node_modules during build which in local testing prevented the error and did not have a significant change in bundle size for a sample app.

@EisenbergEffect
Copy link
Contributor

Thanks for the update. Please let me know how that works out. We can add this to our docs based on what you learn as well, to help other community members.

@rajsite
Copy link

rajsite commented Aug 6, 2021

Updating to fast-element 1.4.1 as a result of the changes from #4969 solved the issue for me. I was able to re-enable buildOptimizer:true in angular.json.

Unfortunate that Fast needed a change to accommodate Angular's Terser configuration. Hopefully more pressure can be put on addressing angular/angular-cli#15761 馃槈

@nicholasrice
Copy link
Contributor

Thanks @rajsite. This does look like the same issue described #4969 and fixed in fast-element@1.4.1 by #4999. I'm going to close this out as fixed, but please re-open if the problem persists.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
area:dev-ops Pertains to build, CI, and other dev-ops work bug A bug community:request Issues specifically reported by a member of the community. status:blocked Any issue blocked by another
Projects
No open projects
Components
  
Done
Development

No branches or pull requests

4 participants