Skip to content

fix(js): dalLoadLanguage tree-shaking — przywróć polskie i18n DAL (2.6) - #649

Merged
mpasternak merged 1 commit into
devfrom
fix/dal-load-language
Jul 24, 2026
Merged

fix(js): dalLoadLanguage tree-shaking — przywróć polskie i18n DAL (2.6)#649
mpasternak merged 1 commit into
devfrom
fix/dal-load-language

Conversation

@mpasternak

Copy link
Copy Markdown
Member

Problem

dalLoadLanguage był w produkcyjnym bundlu JS odwoływany, ale niezadeklarowany
— esbuild tree-shakował dal/i18n/pl.js jako side-effect-free. Efekt: DAL select2
tracił polskie i18n i rzucał ReferenceError. Problem zastany, inny mechanizm
niż mangling naprawiony w #627 (poz. 2.6 audytu).

Zmiana

Nowy wrapper src/bpp/static/bpp/js/dal-i18n-pl.js ustawia
window.dalLoadLanguage = function(...) i odtwarza side-effect (dispatch eventu
dal-language-loaded); bundle-entry.js importuje wrapper zamiast vendored
pl.js. Wzorzec 1:1 z istniejącym select2-pl.js. Bundle gitignored → commit
zawiera tylko źródło.

Odrzucone warianty: --inject (więcej magii), sideEffects w package.json
(red herring — moduł ma side-effect, wycinany jest tylko wewnętrzny var).

Dowód

Realny build esbuild: 0 deklaracji → 1 deklaracja window.dalLoadLanguage.
Review potwierdziło empirycznie (build PRE/POST), że gołe wywołanie
dalLoadLanguage(...) z autocomplete_light.js rozwiązuje się do
window.dalLoadLanguage — brak przesłaniającego leksykalnego bindingu, więc
klasa błędu #627 tu nie zachodzi. Kolejność wykonania potwierdzona bajtowo,
i18n kompletne (8 komunikatów), JS 46/46.

Weryfikacji w przeglądarce (brak ReferenceError w konsoli) nie odtwarzano —
dowód oparty na deklaracji w bundlu + analizie scope. Zalecany szybki smoke po
merge: otworzyć widżet DAL i sprawdzić polskie komunikaty + czystą konsolę.

Poz. 2.6 audytu.

🤖 Generated with Claude Code

https://claude.ai/code/session_019GmViAsaif9MXeuDMA5NHX

Vendored dal/i18n/pl.js deklaruje `var dalLoadLanguage` w zasięgu
globalnym, ale esbuild bundluje każdy plik w osobnym scope. Binding jest
nieużywany w module i wolny od side-effectów, więc tree-shaking go wycina
(zostaje tylko dispatch eventu). autocomplete_light.js odwołuje się do
`dalLoadLanguage` jako do globala → cichy ReferenceError, DAL select2
traci polskie i18n.

To inny mechanizm niż łata shell:patchBundle (#627, aliasowanie
zmangowanego `yl` na window.yl), więc tamta łata tego nie obejmuje.

Naprawa: lokalny wrapper dal-i18n-pl.js eksportuje dalLoadLanguage na
window (odporny na tree-shaking, wzorzec jak select2-pl.js) i odtwarza
side-effect (rejestracja select2/i18n/pl + event dal-language-loaded).
bundle-entry.js importuje wrapper zamiast vendored i18n/pl.js.

Dowód (grep w zbudowanym bundlu): przed 0 deklaracji, po 1 deklaracja
(window.dalLoadLanguage=function).

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_019GmViAsaif9MXeuDMA5NHX
@mpasternak
mpasternak merged commit aedf1fb into dev Jul 24, 2026
22 checks passed
@mpasternak
mpasternak deleted the fix/dal-load-language branch July 24, 2026 15:19
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant