Transformation of static blocks breaks existing code
Ninguém assumiu esta issue ainda.
Avaliação
- Dificuldade
- 4/5
- Tempo estimado
- 3-5 dias
- Facilidade para iniciantes
- 48/100
- Tipo de issue
- Bug
- Clareza
- Razoavelmente clara
- Status de atividade
- Pouca atividade
- Stack de tecnologia
- angular, babel, typescript, webpack
- Domínio
- build-system, cli
Direção de pesquisa
Comece pelo repositório angular-monaco-repro vinculado e compare os builds usando @babel/plugin-transform-class-static-block 7.27.1 e 7.28.3 por meio do Webpack builder. Rastreie onde o plugin entra no build do Angular CLI e, em seguida, verifique se o CodeEditorWidget gerado não lança mais o erro de super-constructor relatado com a versão atual do plugin.
Escrita pelo modelo de indexação a partir do texto da issue.
Descrição
Command
build
Is this a regression?
- Yes, this behavior used to work in the previous version
The previous version in which this bug was not present was
No response
Description
It appears that when Angular compiles using a recent version of Babel's plugin-transform-class-static-block, with the Webpack builder, the output is transformed in such a way it breaks existing code.
Angular code compiled and bundled with @babel/plugin-transform-class-static-block@7.27.1:
let CodeEditorWidget = class CodeEditorWidget extends _base_common_lifecycle_js__WEBPACK_IMPORTED_MODULE_5__.Disposable {
static #_ = CodeEditorWidget_1 = this;
static #_2 = this.dropIntoEditorDecorationOptions = _common_model_textModel_js__WEBPACK_IMPORTED_MODULE_27__.ModelDecorationOptions.register({
description: 'workbench-dnd-target',
className: 'dnd-target'
}); //#endregion
get isSimpleWidget() {
return this._configuration.isSimpleWidget;
}
get contextMenuId() {
return this._configuration.contextMenuId;
}
constructor(domElement, _options, codeEditorWidgetOptions, instantiationService, codeEditorService, commandService, contextKeyService, themeService, notificationService, accessibilityService, languageConfigurationService, languageFeaturesService) {
var _this;
super();
_this = this;
// Omitted for brevity
};
Angular code compiled and bundled with @babel/plugin-transform-class-static-block@7.28.3:
let CodeEditorWidget = (class CodeEditorWidget extends _base_common_lifecycle_js__WEBPACK_IMPORTED_MODULE_5__.Disposable {
//#endregion
get isSimpleWidget() {
return this._configuration.isSimpleWidget;
}
get contextMenuId() {
return this._configuration.contextMenuId;
}
constructor(domElement, _options, codeEditorWidgetOptions, instantiationService, codeEditorService, commandService, contextKeyService, themeService, notificationService, accessibilityService, languageConfigurationService, languageFeaturesService) {
var _this = this;
super();
// Omitted for brevity
static #_ = _staticBlock = () => (CodeEditorWidget_1 = this, this.dropIntoEditorDecorationOptions = _common_model_textModel_js__WEBPACK_IMPORTED_MODULE_27__.ModelDecorationOptions.register({
description: 'workbench-dnd-target',
className: 'dnd-target'
}), this);
}, _staticBlock());
The workaround, which you will also see explained in the attached reproducer, is to override the version of the Babel's plugin to 7.27.1.
I don't understand why, and under which circumstance, that plugin is injected into the compilation process.
Minimal Reproduction
Steps to reproduce can be found on the reproducer's repository: https://github.com/lppedd/angular-monaco-repro
Exception or Error
ERROR ReferenceError: Must call super constructor in derived class before accessing 'this' or returning from derived constructor
at new CodeEditorWidget (codeEditorWidget.js:69:252)
at new StandaloneCodeEditor (standaloneCodeEditor.js:69:9)
at new StandaloneEditor (standaloneCodeEditor.js:188:9)
at InstantiationService._createInstance (instantiationService.js:130:24)
at InstantiationService.createInstance (instantiationService.js:101:27)
at Object.create (standaloneEditor.js:43:33)
at App.ngAfterViewInit (app.ts:16:33)
at callHookInternal (debug_node.mjs:860:14)
at callHook (debug_node.mjs:887:13)
at callHooks (debug_node.mjs:841:17)
Your Environment
Angular CLI: 20.3.8
Node: 22.18.0
Package Manager: npm 11.6.2
OS: win32 x64
Angular: 20.3.9
... common, compiler, compiler-cli, core, forms
... platform-browser, router
Package Version
---------------------------------------
@angular-devkit/architect 0.2003.8
@angular-devkit/build-angular 20.3.8
@angular-devkit/core 20.3.8
@angular-devkit/schematics 20.3.8
@angular/build 20.3.8
@angular/cli 20.3.8
@schematics/angular 20.3.8
rxjs 7.8.2
typescript 5.9.3
zone.js 0.15.1
Anything else relevant?
No response
- Linguagem predominante
- TypeScript
- Estrelas
- 27k
- Forks
- 11.8k
- Merge médio
- 16h 35min
- PRs com merge (30d)
- 176
Guia de contribuição
Primeiros passos
- Leia a issue inteira e depois o guia de contribuição do projeto.
- Comente na issue dizendo que vai assumir — evita que duas pessoas façam o mesmo trabalho.
- Faça um fork do repositório e trabalhe em uma branch.
- Abra um pull request que referencie o número da issue.
Mais de angular/angular-cli
-
area: @angular/build gemini-triaged
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 74/100
angular/angular-cli#33955 ·
-
area: @angular/cli gemini-triaged
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 72/100
angular/angular-cli#33055 · 1 comentário · 3 reações ·
-
unit-test: with --coverage, a setup file's hooks reach only the first spec file of each worker Abertaarea: @angular/build gemini-triaged
Dificuldade 4/5 3-5 dias Facilidade para iniciantes 72/100
angular/angular-cli#34137 ·
-
angular/build:library area: @angular/build gemini-triaged
angular/angular-cli#34131 · 1 responsável ·
-
angular/build:library area: @angular/build gemini-triaged
angular/angular-cli#34130 · 1 responsável ·
Todas as issues de angular/angular-cli
Issues semelhantes
-
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 74/100
ontola/atomic-server#1625 ·
-
bug
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 70/100
melgarafael/DeskcommCRM#1451 ·
-
Dificuldade 1/5 Menos de uma hora Facilidade para iniciantes 82/100
-
bug via-triage
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 78/100
-
bot:ai-assisted component:compact-js status:untriaged
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 84/100
midnightntwrk/midnight-sdk#403 ·