fix(#602): 5 bugs introduzidos pelo Lovable hoje — swatches, grammar PT, cache, E2E obsoleto#602
Conversation
…ate, PT grammar
BUG-1: Remove variável containerTestId (dead code nunca referenciada)
BUG-2: Forward className no branch hideWhenEmpty=true (fix mobile hidden layout)
BUG-3: aria-label PT grammar: disponívelis → disponíveis
Antes: disponível${n===1?'':'is'} → '2 cores disponívelis'
Agora: disponív${n===1?'el':'eis'} → '2 cores disponíveis'
…ix JSDoc duplicado GLOBAL_COLORS_CACHE bypassava invalidateQueries do React Query. Adicionado clearColorsCache() export e documentação de quando chamar. JSDoc duplicado reorganizado (estava deslocado antes da var de cache).
…por deprecation notice Spec criado em edt-cf0c6e3f usava seletores inválidos: - [role="list"] mas componente usa role="group" - button[role="listitem"] não existe no DOM - aria-label /^Cor: / mas componente usa "Opção de cor: " Tests não falhavam — silenciosamente pulavam asserts (falsa confiança no CI). Substituto correto: e2e/product-colors-full.spec.ts
|
The latest updates on your projects. Learn more about Vercel for GitHub.
|
|
This pull request has been ignored for the connected project Preview Branches by Supabase. |
WalkthroughEste PR substitui três arquivos por conteúdo codificado em linha única: teste E2E recebe novo header, componente ChangesSubstituições de arquivo com conteúdo codificado
🚨 Observações críticasRED FLAGS detectadas neste PR:
Recomendação: Abortar merge até que os arquivos sejam restaurados em formato legível. Se isto é um artifact de build, reconstrói-lo a partir do source. 🎯 4 (Complex) | ⏱️ ~60 minutes 🚥 Pre-merge checks | ✅ 5✅ Passed checks (5 passed)
✏️ Tip: You can configure your own custom pre-merge checks in the settings. ✨ Finishing Touches📝 Generate docstrings
🧪 Generate unit tests (beta)
Comment |
There was a problem hiding this comment.
Pull request overview
This PR intends to fix regressions introduced in the product color swatches UI, adjust the batch colors hook caching/invalidation behavior, and deprecate an obsolete Playwright spec for product color swatches.
Changes:
- Updates
ProductColorSwatchesto address unused/dead code, className forwarding for empty state, and PT-BR grammar inaria-label. - Updates
useProductsColorsBatchto add a module-level cache and an explicit cache-clearing API intended to work with React Query invalidation. - Deprecates
e2e/product-colors.spec.tsin favor ofe2e/product-colors-full.spec.ts.
Reviewed changes
Copilot reviewed 3 out of 3 changed files in this pull request and generated 3 comments.
| File | Description |
|---|---|
| src/components/products/ProductColorSwatches.tsx | Intended swatch rendering/a11y fixes, but file content is currently committed as Base64 (breaks TSX parsing). |
| src/hooks/products/useProductsColorsBatch.ts | Intended cache/invalidation fixes, but file content is currently committed as Base64 (breaks TS parsing/imports). |
| e2e/product-colors.spec.ts | Intended deprecation notice, but file content is currently committed as Base64 (may break Playwright test discovery/execution). |
💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
|
|
||
| return { data: query.data, isLoading: query.isLoading }; | ||
| } | ||
| LyoqCiAqIHVzZVByb2R1Y3RzQ29sb3JzQmF0Y2gg4oCUIENhcnJlZ2EgYXMgY29yZXMgZGlzcG9uw612ZWlzIHBhcmEgdW0gbG90ZSBkZSBwcm9kdXRvcy4KICoKICogTMOqIHZhcmlhbnRlcyBhdGl2YXMgZW0gYHByb2R1Y3RfdmFyaWFudHNgIChiYW5jbyBleHRlcm5vIGRlIGNhdMOhbG9nbykgZQogKiBkZWR1cGxpY2EgcG9yIG5vbWUgZGUgY29yLiBVc2FkbyBwYXJhIG1vc3RyYXIgc3dhdGNoZXMgbmFzIHZpc3VhbGl6YcOnw7VlcwogKiAoZ3JpZC9saXN0YS90YWJlbGEpIGRvcyBtw7NkdWxvcyBxdWUgTsODTyBjYXJyZWdhbSBjb3JlcyBubyBmZXRjaCBwcmluY2lwYWwKICogKE5vdmlkYWRlcywgUmVwb3Npw6fDo28pLiBDYXTDoWxvZ28vU3VwZXIgRmlsdHJvL0VzdG9xdWUgasOhIHRyYXplbSBjb3JlcyB2aWEKICogZmV0Y2ggZW5yaXF1ZWNpZG8uCiAqCiAqIFNlbSBhbHRlcmHDp8O1ZXMgZGUgc2NoZW1hOiBhcGVuYXMgU0VMRUNUIGVtIHRhYmVsYXMgZXhpc3RlbnRlcy4KICovCmltcG9ydCB7IHVzZVF1ZXJ5IH0gZnJvbSAnQHRhbnN0YWNrL3JlYWN0LXF1ZXJ5JzsKaW1wb3J0IHsgdXNlTWVtbyB9IGZyb20gJ3JlYWN0JzsKaW1wb3J0IHsgc3VwYWJhc2UsIHJlc29sdmVUYWJsZSwgaGFuZGxlUXVlcnlFcnJvciB9IGZyb20gJ0AvbGliL3N1cGFiYXNlLWRpcmVjdCc7CgpleHBvcnQgaW50ZXJmYWNlIFByb2R1Y3RDb2xvckRvdCB7CiAgbmFtZTogc3RyaW5nOwogIGhleDogc3RyaW5nIHwgbnVsbDsKfQoKdHlwZSBWYXJpYW50Um93ID0gewogIHByb2R1Y3RfaWQ6IHN0cmluZzsKICBjb2xvcl9uYW1lOiBzdHJpbmcgfCBudWxsOwogIGNvbG9yX2hleDogc3RyaW5nIHwgbnVsbDsKfTsKCi8qKgogKiBCVUctNCBGSVg6IENhY2hlIGRlIG3Ds2R1bG8gcGFyYSBldml0YXIgcmUtZmV0Y2ggcXVhbmRvIGEgcXVlcnlLZXkgbXVkYQogKiBwYXJjaWFsbWVudGUgKG5vdm9zIHByb2R1dG9zIGVudHJhbSBuYSBsaXN0YSBzZW0gaW52YWxpZGFyIG9zIGrDoSBjYXJyZWdhZG9zKS4KICoKICog4pqg77iPICBBVEVOw4fDg08g4oCUIEludmFsaWRhw6fDo28gZGUgY2FjaGU6CiAqIHF1ZXJ5Q2xpZW50LmludmFsaWRhdGVRdWVyaWVzKFsncHJvZHVjdHMtY29sb3JzLWJhdGNoJ10pIHJlLWV4ZWN1dGEgbyBxdWVyeUZuLAogKiBtYXMgbyBxdWVyeUZuIHbDqiBtaXNzaW5nSWRzLmxlbmd0aCA9PT0gMCBlIHJldG9ybmEgZG8gY2FjaGUgc2VtIHRvY2FyIG8gU3VwYWJhc2UuCiAqIFBhcmEgZm9yw6dhciByZS1mZXRjaCByZWFsIChleDogYXDDs3MgbG9nb3V0LCByZWZyZXNoIGRlIGNhdMOhbG9nbyksIGNoYW1lOgogKiAgIGNsZWFyQ29sb3JzQ2FjaGUoKQogKiBhbnRlcyBkZSBpbnZhbGlkYXIgYSBxdWVyeS4KICovCmNvbnN0IEdMT0JBTF9DT0xPUlNfQ0FDSEUgPSBuZXcgTWFwPHN0cmluZywgUHJvZHVjdENvbG9yRG90W10+KCk7CgovKioKICogTGltcGEgbyBjYWNoZSBkZSBtw7NkdWxvIGRlIGNvcmVzLiBEZXZlIHNlciBjaGFtYWRvIGVtOgogKiAtIExvZ291dCBkbyB1c3XDoXJpbwogKiAtIFJlZnJlc2ggZm9yw6dhZG8gZGUgY2F0w6Fsb2dvCiAqIC0gUXVhbHF1ZXIgZmx1eG8gcXVlIHByZWNpc2UgZGUgZGFkb3MgZnJlc2NvcyBkbyBTdXBhYmFzZQogKgogKiBAZXhhbXBsZQogKiBjbGVhckNvbG9yc0NhY2hlKCk7CiAqIHF1ZXJ5Q2xpZW50LmludmFsaWRhdGVRdWVyaWVzKFsncHJvZHVjdHMtY29sb3JzLWJhdGNoJ10pOwogKi8KZXhwb3J0IGZ1bmN0aW9uIGNsZWFyQ29sb3JzQ2FjaGUoKTogdm9pZCB7CiAgR0xPQkFMX0NPTE9SU19DQUNIRS5jbGVhcigpOwp9CgovKioKICogUmV0b3JuYSB1bSBNYXA8cHJvZHVjdElkLCBQcm9kdWN0Q29sb3JEb3RbXT4gcGFyYSBvcyBwcm9kdWN0SWRzIGluZm9ybWFkb3MuCiAqIE9yZGVuYSBwb3Igbm9tZSBlIGRlZHVwbGljYSBwb3IgKG5hbWV8aGV4KSBsb3dlci1jYXNlLgogKi8KZXhwb3J0IGZ1bmN0aW9uIHVzZVByb2R1Y3RzQ29sb3JzQmF0Y2gocHJvZHVjdElkczogc3RyaW5nW10pIHsKICAvLyBDaGF2ZSBlc3TDoXZlbDogaWRzIMO6bmljb3Mgb3JkZW5hZG9zIChldml0YSByZWZldGNoIHF1YW5kbyBhIG9yZGVtIGRvIGFycmF5IG11ZGEpCiAgY29uc3Qgc3RhYmxlSWRzID0gdXNlTWVtbygoKSA9PiBbLi4ubmV3IFNldChwcm9kdWN0SWRzKV0uc29ydCgpLCBbcHJvZHVjdElkc10pOwogIC8vIFF1ZXJ5IGtleSBxdWUgaW5jbHVpIG9zIElEcyBlc3BlY8OtZmljb3Mgc29saWNpdGFkb3MKICBjb25zdCBxdWVyeUtleSA9IHVzZU1lbW8oKCkgPT4gWydwcm9kdWN0cy1jb2xvcnMtYmF0Y2gnLCBzdGFibGVJZHNdLCBbc3RhYmxlSWRzXSk7CgogIGNvbnN0IGVuYWJsZWQgPSBzdGFibGVJZHMubGVuZ3RoID4gMDsKCiAgY29uc3QgcXVlcnkgPSB1c2VRdWVyeSh7CiAgICBxdWVyeUtleSwKICAgIHF1ZXJ5Rm46IGFzeW5jICh7IHF1ZXJ5S2V5IH0pOiBQcm9taXNlPE1hcDxzdHJpbmcsIFByb2R1Y3RDb2xvckRvdFtdPj4gPT4gewogICAgICBjb25zdCBbLCBpZHNdID0gcXVlcnlLZXkgYXMgW3N0cmluZywgc3RyaW5nW11dOwoKICAgICAgLy8gSWRlbnRpZmljYSBhcGVuYXMgbyBxdWUgYWluZGEgbsOjbyB0ZW1vcyBubyBjYWNoZSBnbG9iYWwKICAgICAgY29uc3QgbWlzc2luZ0lkcyA9IGlkcy5maWx0ZXIoaWQgPT4gIUdMT0JBTF9DT0xPUlNfQ0FDSEUuaGFzKGlkKSk7CgogICAgICBpZiAobWlzc2luZ0lkcy5sZW5ndGggPiAwKSB7CiAgICAgICAgY29uc3QgQ0hVTksgPSAxMDA7CiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBtaXNzaW5nSWRzLmxlbmd0aDsgaSArPSBDSFVOSykgewogICAgICAgICAgY29uc3QgY2h1bmsgPSBtaXNzaW5nSWRzLnNsaWNlKGksIGkgKyBDSFVOSyk7CiAgICAgICAgICBjb25zdCB7IGRhdGEsIGVycm9yIH0gPSBhd2FpdCBzdXBhYmFzZQogICAgICAgICAgICAuZnJvbShyZXNvbHZlVGFibGUoJ3Byb2R1Y3RfdmFyaWFudHMnKSkKICAgICAgICAgICAgLnNlbGVjdCgncHJvZHVjdF9pZCwgY29sb3JfbmFtZSwgY29sb3JfaGV4JykKICAgICAgICAgICAgLmluKCdwcm9kdWN0X2lkJywgY2h1bmspCiAgICAgICAgICAgIC5lcSgnaXNfYWN0aXZlJywgdHJ1ZSkKICAgICAgICAgICAgLm5vdCgnY29sb3JfbmFtZScsICdpcycsIG51bGwpCiAgICAgICAgICAgIC5yYW5nZSgwLCA0OTk5KTsKCiAgICAgICAgICBpZiAoZXJyb3IpIHsKICAgICAgICAgICAgaGFuZGxlUXVlcnlFcnJvcigndXNlUHJvZHVjdHNDb2xvcnNCYXRjaCcsICdwcm9kdWN0X3ZhcmlhbnRzJywgZXJyb3IpOwogICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgIH0KCiAgICAgICAgICAvLyBBZ3J1cGEgcmVzdWx0YWRvcyBwb3IgSUQKICAgICAgICAgIGNvbnN0IHJlc3VsdHMgPSBuZXcgTWFwPHN0cmluZywgTWFwPHN0cmluZywgUHJvZHVjdENvbG9yRG90Pj4oKTsKCiAgICAgICAgICBmb3IgKGNvbnN0IHJvdyBvZiAoZGF0YSA/PyBbXSkgYXMgVmFyaWFudFJvd1tdKSB7CiAgICAgICAgICAgIGNvbnN0IHBpZCA9IHJvdy5wcm9kdWN0X2lkOwogICAgICAgICAgICBjb25zdCBuYW1lID0gKHJvdy5jb2xvcl9uYW1lIHx8ICcnKS50cmltKCk7CiAgICAgICAgICAgIGlmICghbmFtZSkgY29udGludWU7CiAgICAgICAgICAgIGNvbnN0IGhleCA9IHJvdy5jb2xvcl9oZXg/LnRyaW0oKSB8fCBudWxsOwogICAgICAgICAgICBjb25zdCBrZXkgPSBgJHtuYW1lLnRvTG93ZXJDYXNlKCl9fCR7KGhleCB8fCAnJykudG9Mb3dlckNhc2UoKX1gOwoKICAgICAgICAgICAgaWYgKCFyZXN1bHRzLmhhcyhwaWQpKSByZXN1bHRzLnNldChwaWQsIG5ldyBNYXAoKSk7CiAgICAgICAgICAgIGNvbnN0IGRlZHVwTWFwID0gcmVzdWx0cy5nZXQocGlkKSE7CiAgICAgICAgICAgIGlmICghZGVkdXBNYXAuaGFzKGtleSkpIHsKICAgICAgICAgICAgICBkZWR1cE1hcC5zZXQoa2V5LCB7IG5hbWUsIGhleCB9KTsKICAgICAgICAgICAgfQogICAgICAgICAgfQoKICAgICAgICAgIC8vIFNhbHZhIG5vIGNhY2hlIGdsb2JhbDsgSURzIHNlbSB2YXJpYW50ZXMgZmljYW0gbWFyY2Fkb3MgY29tbyBhcnJheSB2YXppbwogICAgICAgICAgY2h1bmsuZm9yRWFjaChpZCA9PiB7CiAgICAgICAgICAgIGNvbnN0IHByb2R1Y3RDb2xvcnMgPSByZXN1bHRzLmdldChpZCk7CiAgICAgICAgICAgIGNvbnN0IGFyciA9IHByb2R1Y3RDb2xvcnMgPyBBcnJheS5mcm9tKHByb2R1Y3RDb2xvcnMudmFsdWVzKCkpIDogW107CiAgICAgICAgICAgIGFyci5zb3J0KChhLCBiKSA9PiBhLm5hbWUubG9jYWxlQ29tcGFyZShiLm5hbWUsICdwdC1CUicpKTsKICAgICAgICAgICAgR0xPQkFMX0NPTE9SU19DQUNIRS5zZXQoaWQsIGFycik7CiAgICAgICAgICB9KTsKICAgICAgICB9CiAgICAgIH0KCiAgICAgIC8vIENvbnN0csOzaSBvIE1hcCBmaW5hbCBhcGVuYXMgY29tIG9zIElEcyBzb2xpY2l0YWRvcyBuZXN0YSBxdWVyeQogICAgICBjb25zdCByZXN1bHRNYXAgPSBuZXcgTWFwPHN0cmluZywgUHJvZHVjdENvbG9yRG90W10+KCk7CiAgICAgIGlkcy5mb3JFYWNoKGlkID0+IHsKICAgICAgICBpZiAoR0xPQkFMX0NPTE9SU19DQUNIRS5oYXMoaWQpKSB7CiAgICAgICAgICByZXN1bHRNYXAuc2V0KGlkLCBHTE9CQUxfQ09MT1JTX0NBQ0hFLmdldChpZCkhKTsKICAgICAgICB9CiAgICAgIH0pOwoKICAgICAgcmV0dXJuIHJlc3VsdE1hcDsKICAgIH0sCiAgICBlbmFibGVkLAogICAgc3RhbGVUaW1lOiAxMCAqIDYwICogMTAwMCwKICAgIGdjVGltZTogMzAgKiA2MCAqIDEwMDAsCiAgfSk7CgogIHJldHVybiB7IGRhdGE6IHF1ZXJ5LmRhdGEsIGlzTG9hZGluZzogcXVlcnkuaXNMb2FkaW5nIH07Cn0K No newline at end of file |
| </div> | ||
| ); | ||
| }); | ||
| LyoqCiAqIFByb2R1Y3RDb2xvclN3YXRjaGVzIOKAlCBSZW5kZXJpemEgYm9saW5oYXMgaW5saW5lIGNvbSBhcyBjb3JlcyBkaXNwb27DrXZlaXMKICogZGUgdW0gcHJvZHV0by4gUGFkcsOjbyB2aXN1YWwgdXNhZG8gZW0gdG9kYXMgYXMgdmlzdWFsaXphw6fDtWVzIChncmlkL2xpc3RhL3RhYmVsYSkKICogZGUgQ2F0w6Fsb2dvLCBTdXBlciBGaWx0cm8sIE5vdmlkYWRlcywgUmVwb3Npw6fDo28gZSBFc3RvcXVlLgogKi8KaW1wb3J0IHsgbWVtbywgdXNlTWVtbyB9IGZyb20gJ3JlYWN0JzsKaW1wb3J0IHsgVG9vbHRpcCwgVG9vbHRpcENvbnRlbnQsIFRvb2x0aXBUcmlnZ2VyIH0gZnJvbSAnQC9jb21wb25lbnRzL3VpL3Rvb2x0aXAnOwppbXBvcnQgeyBjbiB9IGZyb20gJ0AvbGliL3V0aWxzJzsKCmV4cG9ydCBpbnRlcmZhY2UgQ29sb3JEb3RMaWtlIHsKICBuYW1lOiBzdHJpbmc7CiAgaGV4OiBzdHJpbmcgfCBudWxsOwp9CgppbnRlcmZhY2UgUHJvZHVjdENvbG9yU3dhdGNoZXNQcm9wcyB7CiAgY29sb3JzOiByZWFkb25seSBDb2xvckRvdExpa2VbXSB8IHVuZGVmaW5lZDsKICAvKiogTcOheGltbyBkZSBib2xpbmhhcyB2aXPDrXZlaXMgYW50ZXMgZGUgbW9zdHJhciBgK05gLiBEZWZhdWx0IDUuICovCiAgbWF4PzogbnVtYmVyOwogIC8qKiBUYW1hbmhvIGRvIGRvdC4gKi8KICBzaXplPzogJ3hzJyB8ICdzbScgfCAnbWQnOwogIGNsYXNzTmFtZT86IHN0cmluZzsKICAvKiogRXNjb25kZSBxdWFuZG8gdmF6aW8uIERlZmF1bHQgdHJ1ZS4gKi8KICBoaWRlV2hlbkVtcHR5PzogYm9vbGVhbjsKfQoKY29uc3QgU0laRV9DTEFTUzogUmVjb3JkPE5vbk51bGxhYmxlPFByb2R1Y3RDb2xvclN3YXRjaGVzUHJvcHNbJ3NpemUnXT4sIHN0cmluZz4gPSB7CiAgeHM6ICdoLTIuNSB3LTIuNScsCiAgc206ICdoLTMgdy0zJywKICBtZDogJ2gtNCB3LTQnLAp9OwoKZXhwb3J0IGNvbnN0IFByb2R1Y3RDb2xvclN3YXRjaGVzID0gbWVtbyhmdW5jdGlvbiBQcm9kdWN0Q29sb3JTd2F0Y2hlcyh7CiAgY29sb3JzLAogIG1heCA9IDUsCiAgc2l6ZSA9ICdzbScsCiAgY2xhc3NOYW1lLAogIGhpZGVXaGVuRW1wdHkgPSB0cnVlLAp9OiBQcm9kdWN0Q29sb3JTd2F0Y2hlc1Byb3BzKSB7CiAgLy8gQlVHLTEgRklYOiB2YXJpw6F2ZWwgY29udGFpbmVyVGVzdElkIHJlbW92aWRhIOKAlCBlcmEgZGVhZCBjb2RlIChudW5jYSByZWZlcmVuY2lhZGEpLgogIC8vIE8gZGF0YS10ZXN0aWQgcmVhbCBkbyBjb250YWluZXIgw6kgInByb2R1Y3QtY29sb3JzLWNvbnRhaW5lciIgKGxpbmhhIGFiYWl4byBubyBKU1gpLgogIGNvbnN0IGlkUHJlZml4ID0gdXNlTWVtbygoKSA9PiBNYXRoLnJhbmRvbSgpLnRvU3RyaW5nKDM2KS5zdWJzdHJpbmcoMiwgMTEpLCBbXSk7CgogIGlmIChjb2xvcnMgPT09IHVuZGVmaW5lZCkgewogICAgcmV0dXJuICgKICAgICAgPGRpdgogICAgICAgIGNsYXNzTmFtZT17Y24oJ2ZsZXggaXRlbXMtY2VudGVyIGdhcC0xIG1pbi1oLVsxNnB4XScsIGNsYXNzTmFtZSl9CiAgICAgICAgYXJpYS1idXN5PSJ0cnVlIgogICAgICAgIGFyaWEtbGFiZWw9IkNhcnJlZ2FuZG8gb3DDp8O1ZXMgZGUgY29yZXMiCiAgICAgICAgZGF0YS10ZXN0aWQ9ImNvbG9ycy1sb2FkaW5nLXNrZWxldG9uIgogICAgICA+CiAgICAgICAge1suLi5BcnJheSgzKV0ubWFwKChfLCBpKSA9PiAoCiAgICAgICAgICA8ZGl2CiAgICAgICAgICAgIGtleT17aX0KICAgICAgICAgICAgY2xhc3NOYW1lPXtjbigKICAgICAgICAgICAgICAnYW5pbWF0ZS1wdWxzZSByb3VuZGVkLWZ1bGwgYmctbXV0ZWQnLAogICAgICAgICAgICAgIFNJWkVfQ0xBU1Nbc2l6ZV0KICAgICAgICAgICAgKX0KICAgICAgICAgICAgZGF0YS10ZXN0aWQ9ImNvbG9yLXNrZWxldG9uLWRvdCIKICAgICAgICAgIC8+CiAgICAgICAgKSl9CiAgICAgIDwvZGl2PgogICAgKTsKICB9CgogIGlmIChjb2xvcnMubGVuZ3RoID09PSAwKSB7CiAgICAvLyBCVUctMiBGSVg6IGZvcndhcmQgY2xhc3NOYW1lIHBhcmEgcXVlIGNhbGxlcnMgY29tbyBQcm9kdWN0TGlzdEl0ZW0KICAgIC8vIChjbGFzc05hbWU9Im1sLTEgaGlkZGVuIG1kOmZsZXgiKSBmdW5jaW9uZW0gY29ycmV0YW1lbnRlIG5vIGVzdGFkbyB2YXppby4KICAgIC8vIEFudGVzOiA8ZGl2IGNsYXNzTmFtZT0ibWluLWgtWzE2cHhdIj4g4oCUIGNsYXNzTmFtZSBpZ25vcmFkbywgZGl2IHZpc8OtdmVsIG5vIG1vYmlsZS4KICAgIGlmIChoaWRlV2hlbkVtcHR5KSByZXR1cm4gPGRpdiBjbGFzc05hbWU9e2NuKCdtaW4taC1bMTZweF0nLCBjbGFzc05hbWUpfSBkYXRhLXRlc3RpZD0iY29sb3JzLWVtcHR5LWhpZGRlbiIgLz47CiAgICByZXR1cm4gKAogICAgICA8c3BhbgogICAgICAgIGNsYXNzTmFtZT0idGV4dC1bMTBweF0gdGV4dC1tdXRlZC1mb3JlZ3JvdW5kLzYwIGl0YWxpYyBtaW4taC1bMTZweF0gZmxleCBpdGVtcy1jZW50ZXIiCiAgICAgICAgcm9sZT0ic3RhdHVzIgogICAgICAgIGFyaWEtbGl2ZT0icG9saXRlIgogICAgICAgIGRhdGEtdGVzdGlkPSJjb2xvcnMtdW5hdmFpbGFibGUiCiAgICAgID4KICAgICAgICBDb3JlcyBpbmRpc3BvbsOtdmVpcwogICAgICA8L3NwYW4+CiAgICApOwogIH0KCiAgY29uc3QgdmlzaWJsZSA9IGNvbG9ycy5zbGljZSgwLCBtYXgpOwogIGNvbnN0IG92ZXJmbG93ID0gY29sb3JzLmxlbmd0aCAtIHZpc2libGUubGVuZ3RoOwoKICByZXR1cm4gKAogICAgPGRpdgogICAgICBjbGFzc05hbWU9e2NuKCdmbGV4IGl0ZW1zLWNlbnRlciBnYXAtMC41IG1pbi1oLVsxNnB4XScsIGNsYXNzTmFtZSl9CiAgICAgIHJvbGU9Imdyb3VwIgogICAgICBhcmlhLWxpdmU9InBvbGl0ZSIKICAgICAgYXJpYS1sYWJlbD17YCR7Y29sb3JzLmxlbmd0aH0gY29yJHtjb2xvcnMubGVuZ3RoID09PSAxID8gJycgOiAnZXMnfSBkaXNwb27DrXYke2NvbG9ycy5sZW5ndGggPT09IDEgPyAnZWwnIDogJ2Vpcyd9YH0KICAgICAgZGF0YS10ZXN0aWQ9InByb2R1Y3QtY29sb3JzLWNvbnRhaW5lciIKICAgID4KICAgICAge3Zpc2libGUubWFwKChjLCBpZHgpID0+IHsKICAgICAgICBjb25zdCB0b29sdGlwSWQgPSBgdG9vbHRpcC1jb2xvci0ke2lkUHJlZml4fS0ke2lkeH1gOwogICAgICAgIHJldHVybiAoCiAgICAgICAgICA8VG9vbHRpcCBrZXk9e2Ake2MubmFtZX0tJHtpZHh9YH0+CiAgICAgICAgICAgIDxUb29sdGlwVHJpZ2dlciBhc0NoaWxkPgogICAgICAgICAgICAgIDxidXR0b24KICAgICAgICAgICAgICAgIHR5cGU9ImJ1dHRvbiIKICAgICAgICAgICAgICAgIGNsYXNzTmFtZT17Y24oCiAgICAgICAgICAgICAgICAgICdpbmxpbmUtYmxvY2sgcm91bmRlZC1mdWxsIGJvcmRlciBib3JkZXItYm9yZGVyLzYwIHNoYWRvdy1zbSB0cmFuc2l0aW9uLXRyYW5zZm9ybSBob3ZlcjpzY2FsZS0xMTAgZm9jdXMtdmlzaWJsZTpyaW5nLTEgZm9jdXMtdmlzaWJsZTpyaW5nLXJpbmcgZm9jdXMtdmlzaWJsZTpvdXRsaW5lLW5vbmUnLAogICAgICAgICAgICAgICAgICBTSVpFX0NMQVNTW3NpemVdLAogICAgICAgICAgICAgICAgKX0KICAgICAgICAgICAgICAgIHN0eWxlPXt7IGJhY2tncm91bmRDb2xvcjogYy5oZXggfHwgJ3RyYW5zcGFyZW50JyB9fQogICAgICAgICAgICAgICAgYXJpYS1sYWJlbD17YE9ww6fDo28gZGUgY29yOiAke2MubmFtZX1gfQogICAgICAgICAgICAgICAgYXJpYS1kZXNjcmliZWRieT17dG9vbHRpcElkfQogICAgICAgICAgICAgICAgZGF0YS10ZXN0aWQ9e2Bjb2xvci1zd2F0Y2gtJHtjLm5hbWUudG9Mb3dlckNhc2UoKS5yZXBsYWNlKC9ccysvZywgJy0nKX1gfQogICAgICAgICAgICAgIC8+CiAgICAgICAgICAgIDwvVG9vbHRpcFRyaWdnZXI+CiAgICAgICAgICAgIDxUb29sdGlwQ29udGVudAogICAgICAgICAgICAgIGlkPXt0b29sdGlwSWR9CiAgICAgICAgICAgICAgc2lkZT0idG9wIgogICAgICAgICAgICAgIGNsYXNzTmFtZT0idGV4dC14cyIKICAgICAgICAgICAgICByb2xlPSJ0b29sdGlwIgogICAgICAgICAgICAgIGRhdGEtdGVzdGlkPSJjb2xvci10b29sdGlwLWNvbnRlbnQiCiAgICAgICAgICAgID4KICAgICAgICAgICAgICB7Yy5uYW1lfQogICAgICAgICAgICA8L1Rvb2x0aXBDb250ZW50PgogICAgICAgICAgPC9Ub29sdGlwPgogICAgICAgICk7CiAgICAgIH0pfQogICAgICB7b3ZlcmZsb3cgPiAwICYmICgKICAgICAgICA8VG9vbHRpcD4KICAgICAgICAgIDxUb29sdGlwVHJpZ2dlciBhc0NoaWxkPgogICAgICAgICAgICA8YnV0dG9uCiAgICAgICAgICAgICAgdHlwZT0iYnV0dG9uIgogICAgICAgICAgICAgIGNsYXNzTmFtZT0ibWwtMC41IHRleHQtWzEwcHhdIGZvbnQtbWVkaXVtIHRhYnVsYXItbnVtcyB0ZXh0LW11dGVkLWZvcmVncm91bmQgaG92ZXI6dGV4dC1mb3JlZ3JvdW5kIGZvY3VzLXZpc2libGU6cmluZy0xIGZvY3VzLXZpc2libGU6cmluZy1yaW5nIGZvY3VzLXZpc2libGU6b3V0bGluZS1ub25lIHJvdW5kZWQtc20gcHgtMC41IgogICAgICAgICAgICAgIGFyaWEtbGFiZWw9e2BWZXIgbWFpcyAke292ZXJmbG93fSBjb3Ike292ZXJmbG93ID09PSAxID8gJycgOiAnZXMnfWB9CiAgICAgICAgICAgICAgZGF0YS10ZXN0aWQ9ImNvbG9yLXN3YXRjaC1vdmVyZmxvdyIKICAgICAgICAgICAgPgogICAgICAgICAgICAgICt7b3ZlcmZsb3d9CiAgICAgICAgICAgIDwvYnV0dG9uPgogICAgICAgICAgPC9Ub29sdGlwVHJpZ2dlcj4KICAgICAgICAgIDxUb29sdGlwQ29udGVudCBzaWRlPSJ0b3AiIGNsYXNzTmFtZT0idGV4dC14cyIgcm9sZT0idG9vbHRpcCIgZGF0YS10ZXN0aWQ9ImNvbG9yLW92ZXJmbG93LXRvb2x0aXAiPgogICAgICAgICAgICB7Y29sb3JzLnNsaWNlKG1heCkubWFwKChjKSA9PiBjLm5hbWUpLmpvaW4oJywgJyl9CiAgICAgICAgICA8L1Rvb2x0aXBDb250ZW50PgogICAgICAgIDwvVG9vbHRpcD4KICAgICAgKX0KICAgIDwvZGl2PgogICk7Cn0pOwo= No newline at end of file |
| }); | ||
| } | ||
| }); | ||
| LyoqCiAqIEBkZXByZWNhdGVkIEJVRy01IEZJWCAoMjAyNi0wNi0wMik6IEVzdGUgYXJxdWl2byBmb2kgY3JpYWRvIHBlbG8gTG92YWJsZQogKiBlbSBlZHQtY2YwYzZlM2YgKDE2OjE4KSBlIGltZWRpYXRhbWVudGUgaW52YWxpZGFkbyBwZWxhcyBtdWRhbsOnYXMgZGUKICogZWR0LTVmMThiOGMzICgxNjoyOSkgbmEgbWVzbWEgc2Vzc8OjbyBkZSBlZGnDp8Ojby4KICoKICogUFJPQkxFTUE6IE9zIHNlbGV0b3JlcyBhcXVpIG51bmNhIGNvcnJlc3BvbmRlbSBhbyBjb21wb25lbnRlIHJlYWw6CiAqCiAqICAgU2VsZXRvciBubyBzcGVjICAgICAgICAgfCBSZWFsaWRhZGUgZG8gY29tcG9uZW50ZQogKiAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIHwgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogKiAgIFtyb2xlPSJsaXN0Il0gICAgICAgICAgIHwgQ29tcG9uZW50ZSB1c2Egcm9sZT0iZ3JvdXAiCiAqICAgYnV0dG9uW3JvbGU9Imxpc3RpdGVtIl0gfCBCdXR0b25zIG7Do28gdMOqbSByb2xlICJsaXN0aXRlbSIKICogICBhcmlhLWxhYmVsIC9eQ29yOiAvICAgICB8IENvbXBvbmVudGUgdXNhICJPcMOnw6NvIGRlIGNvcjogIgogKgogKiBPcyB0ZXN0ZXMgbsOjbyBmYWxoYXZhbSDigJQgZWxlcyBzaW1wbGVzbWVudGUgbsOjbyBlbmNvbnRyYXZhbSBvcyBlbGVtZW50b3MKICogZSBwdWxhdmFtIG9zIGFzc2VydHMgc2lsZW5jaW9zYW1lbnRlLCBjcmlhbmRvIGZhbHNhIGNvbmZpYW7Dp2Egbm8gQ0kuCiAqCiAqIFNVQlNUSVRVVE86IGUyZS9wcm9kdWN0LWNvbG9ycy1mdWxsLnNwZWMudHMgKHNlbGV0b3JlcyBjb3JyZXRvcyBlIGF0dWFsaXphZG9zKS4KICoKICogRXN0ZSBhcnF1aXZvIHBvZGUgc2VyIGRlbGV0YWRvIGNvbSBzZWd1cmFuw6dhIGFww7NzIGNvbmZpcm1hciBxdWUKICogcHJvZHVjdC1jb2xvcnMtZnVsbC5zcGVjLnRzIGVzdMOhIHBhc3NhbmRvIGVtIHRvZG9zIG9zIG3Ds2R1bG9zLgogKi8KCi8vIEFycXVpdm8gaW50ZW5jaW9uYWxtZW50ZSB2YXppbyDigJQgdG9kb3Mgb3MgdGVzdGVzIGZvcmFtIG1vdmlkb3MgcGFyYQovLyBlMmUvcHJvZHVjdC1jb2xvcnMtZnVsbC5zcGVjLnRzCg== No newline at end of file |
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: 68049c60d4
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
| </div> | ||
| ); | ||
| }); | ||
| LyoqCiAqIFByb2R1Y3RDb2xvclN3YXRjaGVzIOKAlCBSZW5kZXJpemEgYm9saW5oYXMgaW5saW5lIGNvbSBhcyBjb3JlcyBkaXNwb27DrXZlaXMKICogZGUgdW0gcHJvZHV0by4gUGFkcsOjbyB2aXN1YWwgdXNhZG8gZW0gdG9kYXMgYXMgdmlzdWFsaXphw6fDtWVzIChncmlkL2xpc3RhL3RhYmVsYSkKICogZGUgQ2F0w6Fsb2dvLCBTdXBlciBGaWx0cm8sIE5vdmlkYWRlcywgUmVwb3Npw6fDo28gZSBFc3RvcXVlLgogKi8KaW1wb3J0IHsgbWVtbywgdXNlTWVtbyB9IGZyb20gJ3JlYWN0JzsKaW1wb3J0IHsgVG9vbHRpcCwgVG9vbHRpcENvbnRlbnQsIFRvb2x0aXBUcmlnZ2VyIH0gZnJvbSAnQC9jb21wb25lbnRzL3VpL3Rvb2x0aXAnOwppbXBvcnQgeyBjbiB9IGZyb20gJ0AvbGliL3V0aWxzJzsKCmV4cG9ydCBpbnRlcmZhY2UgQ29sb3JEb3RMaWtlIHsKICBuYW1lOiBzdHJpbmc7CiAgaGV4OiBzdHJpbmcgfCBudWxsOwp9CgppbnRlcmZhY2UgUHJvZHVjdENvbG9yU3dhdGNoZXNQcm9wcyB7CiAgY29sb3JzOiByZWFkb25seSBDb2xvckRvdExpa2VbXSB8IHVuZGVmaW5lZDsKICAvKiogTcOheGltbyBkZSBib2xpbmhhcyB2aXPDrXZlaXMgYW50ZXMgZGUgbW9zdHJhciBgK05gLiBEZWZhdWx0IDUuICovCiAgbWF4PzogbnVtYmVyOwogIC8qKiBUYW1hbmhvIGRvIGRvdC4gKi8KICBzaXplPzogJ3hzJyB8ICdzbScgfCAnbWQnOwogIGNsYXNzTmFtZT86IHN0cmluZzsKICAvKiogRXNjb25kZSBxdWFuZG8gdmF6aW8uIERlZmF1bHQgdHJ1ZS4gKi8KICBoaWRlV2hlbkVtcHR5PzogYm9vbGVhbjsKfQoKY29uc3QgU0laRV9DTEFTUzogUmVjb3JkPE5vbk51bGxhYmxlPFByb2R1Y3RDb2xvclN3YXRjaGVzUHJvcHNbJ3NpemUnXT4sIHN0cmluZz4gPSB7CiAgeHM6ICdoLTIuNSB3LTIuNScsCiAgc206ICdoLTMgdy0zJywKICBtZDogJ2gtNCB3LTQnLAp9OwoKZXhwb3J0IGNvbnN0IFByb2R1Y3RDb2xvclN3YXRjaGVzID0gbWVtbyhmdW5jdGlvbiBQcm9kdWN0Q29sb3JTd2F0Y2hlcyh7CiAgY29sb3JzLAogIG1heCA9IDUsCiAgc2l6ZSA9ICdzbScsCiAgY2xhc3NOYW1lLAogIGhpZGVXaGVuRW1wdHkgPSB0cnVlLAp9OiBQcm9kdWN0Q29sb3JTd2F0Y2hlc1Byb3BzKSB7CiAgLy8gQlVHLTEgRklYOiB2YXJpw6F2ZWwgY29udGFpbmVyVGVzdElkIHJlbW92aWRhIOKAlCBlcmEgZGVhZCBjb2RlIChudW5jYSByZWZlcmVuY2lhZGEpLgogIC8vIE8gZGF0YS10ZXN0aWQgcmVhbCBkbyBjb250YWluZXIgw6kgInByb2R1Y3QtY29sb3JzLWNvbnRhaW5lciIgKGxpbmhhIGFiYWl4byBubyBKU1gpLgogIGNvbnN0IGlkUHJlZml4ID0gdXNlTWVtbygoKSA9PiBNYXRoLnJhbmRvbSgpLnRvU3RyaW5nKDM2KS5zdWJzdHJpbmcoMiwgMTEpLCBbXSk7CgogIGlmIChjb2xvcnMgPT09IHVuZGVmaW5lZCkgewogICAgcmV0dXJuICgKICAgICAgPGRpdgogICAgICAgIGNsYXNzTmFtZT17Y24oJ2ZsZXggaXRlbXMtY2VudGVyIGdhcC0xIG1pbi1oLVsxNnB4XScsIGNsYXNzTmFtZSl9CiAgICAgICAgYXJpYS1idXN5PSJ0cnVlIgogICAgICAgIGFyaWEtbGFiZWw9IkNhcnJlZ2FuZG8gb3DDp8O1ZXMgZGUgY29yZXMiCiAgICAgICAgZGF0YS10ZXN0aWQ9ImNvbG9ycy1sb2FkaW5nLXNrZWxldG9uIgogICAgICA+CiAgICAgICAge1suLi5BcnJheSgzKV0ubWFwKChfLCBpKSA9PiAoCiAgICAgICAgICA8ZGl2CiAgICAgICAgICAgIGtleT17aX0KICAgICAgICAgICAgY2xhc3NOYW1lPXtjbigKICAgICAgICAgICAgICAnYW5pbWF0ZS1wdWxzZSByb3VuZGVkLWZ1bGwgYmctbXV0ZWQnLAogICAgICAgICAgICAgIFNJWkVfQ0xBU1Nbc2l6ZV0KICAgICAgICAgICAgKX0KICAgICAgICAgICAgZGF0YS10ZXN0aWQ9ImNvbG9yLXNrZWxldG9uLWRvdCIKICAgICAgICAgIC8+CiAgICAgICAgKSl9CiAgICAgIDwvZGl2PgogICAgKTsKICB9CgogIGlmIChjb2xvcnMubGVuZ3RoID09PSAwKSB7CiAgICAvLyBCVUctMiBGSVg6IGZvcndhcmQgY2xhc3NOYW1lIHBhcmEgcXVlIGNhbGxlcnMgY29tbyBQcm9kdWN0TGlzdEl0ZW0KICAgIC8vIChjbGFzc05hbWU9Im1sLTEgaGlkZGVuIG1kOmZsZXgiKSBmdW5jaW9uZW0gY29ycmV0YW1lbnRlIG5vIGVzdGFkbyB2YXppby4KICAgIC8vIEFudGVzOiA8ZGl2IGNsYXNzTmFtZT0ibWluLWgtWzE2cHhdIj4g4oCUIGNsYXNzTmFtZSBpZ25vcmFkbywgZGl2IHZpc8OtdmVsIG5vIG1vYmlsZS4KICAgIGlmIChoaWRlV2hlbkVtcHR5KSByZXR1cm4gPGRpdiBjbGFzc05hbWU9e2NuKCdtaW4taC1bMTZweF0nLCBjbGFzc05hbWUpfSBkYXRhLXRlc3RpZD0iY29sb3JzLWVtcHR5LWhpZGRlbiIgLz47CiAgICByZXR1cm4gKAogICAgICA8c3BhbgogICAgICAgIGNsYXNzTmFtZT0idGV4dC1bMTBweF0gdGV4dC1tdXRlZC1mb3JlZ3JvdW5kLzYwIGl0YWxpYyBtaW4taC1bMTZweF0gZmxleCBpdGVtcy1jZW50ZXIiCiAgICAgICAgcm9sZT0ic3RhdHVzIgogICAgICAgIGFyaWEtbGl2ZT0icG9saXRlIgogICAgICAgIGRhdGEtdGVzdGlkPSJjb2xvcnMtdW5hdmFpbGFibGUiCiAgICAgID4KICAgICAgICBDb3JlcyBpbmRpc3BvbsOtdmVpcwogICAgICA8L3NwYW4+CiAgICApOwogIH0KCiAgY29uc3QgdmlzaWJsZSA9IGNvbG9ycy5zbGljZSgwLCBtYXgpOwogIGNvbnN0IG92ZXJmbG93ID0gY29sb3JzLmxlbmd0aCAtIHZpc2libGUubGVuZ3RoOwoKICByZXR1cm4gKAogICAgPGRpdgogICAgICBjbGFzc05hbWU9e2NuKCdmbGV4IGl0ZW1zLWNlbnRlciBnYXAtMC41IG1pbi1oLVsxNnB4XScsIGNsYXNzTmFtZSl9CiAgICAgIHJvbGU9Imdyb3VwIgogICAgICBhcmlhLWxpdmU9InBvbGl0ZSIKICAgICAgYXJpYS1sYWJlbD17YCR7Y29sb3JzLmxlbmd0aH0gY29yJHtjb2xvcnMubGVuZ3RoID09PSAxID8gJycgOiAnZXMnfSBkaXNwb27DrXYke2NvbG9ycy5sZW5ndGggPT09IDEgPyAnZWwnIDogJ2Vpcyd9YH0KICAgICAgZGF0YS10ZXN0aWQ9InByb2R1Y3QtY29sb3JzLWNvbnRhaW5lciIKICAgID4KICAgICAge3Zpc2libGUubWFwKChjLCBpZHgpID0+IHsKICAgICAgICBjb25zdCB0b29sdGlwSWQgPSBgdG9vbHRpcC1jb2xvci0ke2lkUHJlZml4fS0ke2lkeH1gOwogICAgICAgIHJldHVybiAoCiAgICAgICAgICA8VG9vbHRpcCBrZXk9e2Ake2MubmFtZX0tJHtpZHh9YH0+CiAgICAgICAgICAgIDxUb29sdGlwVHJpZ2dlciBhc0NoaWxkPgogICAgICAgICAgICAgIDxidXR0b24KICAgICAgICAgICAgICAgIHR5cGU9ImJ1dHRvbiIKICAgICAgICAgICAgICAgIGNsYXNzTmFtZT17Y24oCiAgICAgICAgICAgICAgICAgICdpbmxpbmUtYmxvY2sgcm91bmRlZC1mdWxsIGJvcmRlciBib3JkZXItYm9yZGVyLzYwIHNoYWRvdy1zbSB0cmFuc2l0aW9uLXRyYW5zZm9ybSBob3ZlcjpzY2FsZS0xMTAgZm9jdXMtdmlzaWJsZTpyaW5nLTEgZm9jdXMtdmlzaWJsZTpyaW5nLXJpbmcgZm9jdXMtdmlzaWJsZTpvdXRsaW5lLW5vbmUnLAogICAgICAgICAgICAgICAgICBTSVpFX0NMQVNTW3NpemVdLAogICAgICAgICAgICAgICAgKX0KICAgICAgICAgICAgICAgIHN0eWxlPXt7IGJhY2tncm91bmRDb2xvcjogYy5oZXggfHwgJ3RyYW5zcGFyZW50JyB9fQogICAgICAgICAgICAgICAgYXJpYS1sYWJlbD17YE9ww6fDo28gZGUgY29yOiAke2MubmFtZX1gfQogICAgICAgICAgICAgICAgYXJpYS1kZXNjcmliZWRieT17dG9vbHRpcElkfQogICAgICAgICAgICAgICAgZGF0YS10ZXN0aWQ9e2Bjb2xvci1zd2F0Y2gtJHtjLm5hbWUudG9Mb3dlckNhc2UoKS5yZXBsYWNlKC9ccysvZywgJy0nKX1gfQogICAgICAgICAgICAgIC8+CiAgICAgICAgICAgIDwvVG9vbHRpcFRyaWdnZXI+CiAgICAgICAgICAgIDxUb29sdGlwQ29udGVudAogICAgICAgICAgICAgIGlkPXt0b29sdGlwSWR9CiAgICAgICAgICAgICAgc2lkZT0idG9wIgogICAgICAgICAgICAgIGNsYXNzTmFtZT0idGV4dC14cyIKICAgICAgICAgICAgICByb2xlPSJ0b29sdGlwIgogICAgICAgICAgICAgIGRhdGEtdGVzdGlkPSJjb2xvci10b29sdGlwLWNvbnRlbnQiCiAgICAgICAgICAgID4KICAgICAgICAgICAgICB7Yy5uYW1lfQogICAgICAgICAgICA8L1Rvb2x0aXBDb250ZW50PgogICAgICAgICAgPC9Ub29sdGlwPgogICAgICAgICk7CiAgICAgIH0pfQogICAgICB7b3ZlcmZsb3cgPiAwICYmICgKICAgICAgICA8VG9vbHRpcD4KICAgICAgICAgIDxUb29sdGlwVHJpZ2dlciBhc0NoaWxkPgogICAgICAgICAgICA8YnV0dG9uCiAgICAgICAgICAgICAgdHlwZT0iYnV0dG9uIgogICAgICAgICAgICAgIGNsYXNzTmFtZT0ibWwtMC41IHRleHQtWzEwcHhdIGZvbnQtbWVkaXVtIHRhYnVsYXItbnVtcyB0ZXh0LW11dGVkLWZvcmVncm91bmQgaG92ZXI6dGV4dC1mb3JlZ3JvdW5kIGZvY3VzLXZpc2libGU6cmluZy0xIGZvY3VzLXZpc2libGU6cmluZy1yaW5nIGZvY3VzLXZpc2libGU6b3V0bGluZS1ub25lIHJvdW5kZWQtc20gcHgtMC41IgogICAgICAgICAgICAgIGFyaWEtbGFiZWw9e2BWZXIgbWFpcyAke292ZXJmbG93fSBjb3Ike292ZXJmbG93ID09PSAxID8gJycgOiAnZXMnfWB9CiAgICAgICAgICAgICAgZGF0YS10ZXN0aWQ9ImNvbG9yLXN3YXRjaC1vdmVyZmxvdyIKICAgICAgICAgICAgPgogICAgICAgICAgICAgICt7b3ZlcmZsb3d9CiAgICAgICAgICAgIDwvYnV0dG9uPgogICAgICAgICAgPC9Ub29sdGlwVHJpZ2dlcj4KICAgICAgICAgIDxUb29sdGlwQ29udGVudCBzaWRlPSJ0b3AiIGNsYXNzTmFtZT0idGV4dC14cyIgcm9sZT0idG9vbHRpcCIgZGF0YS10ZXN0aWQ9ImNvbG9yLW92ZXJmbG93LXRvb2x0aXAiPgogICAgICAgICAgICB7Y29sb3JzLnNsaWNlKG1heCkubWFwKChjKSA9PiBjLm5hbWUpLmpvaW4oJywgJyl9CiAgICAgICAgICA8L1Rvb2x0aXBDb250ZW50PgogICAgICAgIDwvVG9vbHRpcD4KICAgICAgKX0KICAgIDwvZGl2PgogICk7Cn0pOwo= No newline at end of file |
There was a problem hiding this comment.
Restore TSX source instead of encoded payload
This line is the entire ProductColorSwatches.tsx file encoded as base64 text rather than executable TSX, and the same pattern appears in the modified hook and E2E spec. Any build or test that imports this component will no longer see the ProductColorSwatches export or valid React code, so product color rendering paths fail at compile/module resolution time instead of applying the intended swatch fixes.
Useful? React with 👍 / 👎.
There was a problem hiding this comment.
Actionable comments posted: 3
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
Inline comments:
In `@e2e/product-colors.spec.ts`:
- Line 1: The file contains a single-line base64 blob (the long encoded line at
the top of product-colors.spec.ts) instead of the intended human-readable
deprecation comment, which breaks the test parser/CI; replace that base64 line
with the original plain-text comment/deprecation message (restore the
human-readable spec header) so the file is a normal .ts spec again, ensuring the
content is plain text and not a >200-char base64-only line.
In `@src/components/products/ProductColorSwatches.tsx`:
- Line 1: The file currently contains a single base64-encoded line instead of
the TSX source, which breaks compilation and removes the ProductColorSwatches
and ColorDotLike exports; replace the one-line base64 blob with the decoded TSX
source (restore the original React/TSX contents that define/export
ProductColorSwatches and the ColorDotLike interface), verify the component and
interface names (ProductColorSwatches, ColorDotLike) are exported from the
module, and commit the decoded file so the module compiles normally.
In `@src/hooks/products/useProductsColorsBatch.ts`:
- Line 1: O arquivo foi commitado com a primeira linha como um blob Base64
(linha 1) em vez do TypeScript legível, o que impede a compilação e o uso de
clearColorsCache e useProductsColorsBatch; corrija revertendo/substituindo essa
linha Base64 pelo conteúdo TypeScript original em texto puro (restaurar o corpo
do hook useProductsColorsBatch e a função clearColorsCache), garantindo que as
exports useProductsColorsBatch e clearColorsCache existam e o arquivo compila;
se não tiver o original, recupere do histórico do git (ou do PR base) e aplique
o conteúdo decodificado/esperado antes do merge.
🪄 Autofix (Beta)
Fix all unresolved CodeRabbit comments on this PR:
- Push a commit to this branch (recommended)
- Create a new PR with the fixes
ℹ️ Review info
⚙️ Run configuration
Configuration used: Path: .coderabbit.yaml
Review profile: CHILL
Plan: Pro
Run ID: 9b845af1-2e6b-4ce9-a5c7-46278ea3856e
📒 Files selected for processing (3)
e2e/product-colors.spec.tssrc/components/products/ProductColorSwatches.tsxsrc/hooks/products/useProductsColorsBatch.ts
There was a problem hiding this comment.
1 issue found across 3 files
Reply with feedback, questions, or to request a fix.
Re-trigger cubic
Os 3 commits anteriores (0b8a25c, 607bc1f, 68049c6) armazenaram o conteúdo dos arquivos como base64 literal em vez de TypeScript/JS real. Este commit decodifica e reescreve os arquivos com o conteúdo correto. Fixes aplicados (idênticos aos commits anteriores, agora como código real): - BUG-1: remove containerTestId dead code - BUG-2: cn('min-h-[16px]', className) forward no hideWhenEmpty=true - BUG-3: aria-label PT disponív+el/eis → disponíveis - BUG-4: export clearColorsCache() + JSDoc warning invalidação - BUG-5: e2e/product-colors.spec.ts → deprecation notice
…tsByIds exports FloatingCompareBar.tsx has been importing `useProductsContextSafe` and calling `ctx?.getProductsByIds(uniqueIds)` since some prior refactor, but neither symbol existed in ProductsContext.tsx — causing the Vite build to fail at module resolution: "useProductsContextSafe" is not exported by "src/contexts/ProductsContext.tsx" imported by "src/components/compare/FloatingCompareBar.tsx" This broke every production deploy from commit d456899 onwards (PR #601 hover crossfade + PR #602 audit fixes + Lovable visual edits), freezing the live site on an older build. Additions: - `getProductsByIds(ids: string[]): Product[]` — batch lookup that filters the cached products array by a Set of ids. Returns [] for empty input. - `useProductsContextSafe()` — non-throwing variant of useProducts(); returns `ProductsContextType | null` so components rendered above the provider (floating bars, portals) can opt-in instead of crashing. `useProducts()` keeps its original throw-on-missing-provider behavior to preserve the strict contract for components inside the provider tree.
There was a problem hiding this comment.
2 issues found across 3 files (changes from recent commits).
Prompt for AI agents (unresolved issues)
Check if these issues are valid — if so, understand the root cause of each and fix them. If appropriate, use sub-agents to investigate and fix each issue separately.
<file name="src/components/products/ProductColorSwatches.tsx">
<violation number="1" location="src/components/products/ProductColorSwatches.tsx:73">
P2: `className` is not forwarded in the empty-message branch, causing inconsistent styling/layout behavior when colors are empty.</violation>
</file>
<file name="src/hooks/products/useProductsColorsBatch.ts">
<violation number="1" location="src/hooks/products/useProductsColorsBatch.ts:51">
P2: The new global color cache has no actual invalidation call sites, so stale data can persist across user/logout-refresh flows and the cache can grow for the whole session.</violation>
</file>
Reply with feedback, questions, or to request a fix.
Re-trigger cubic
| <span | ||
| <span | ||
| className="text-[10px] text-muted-foreground/60 italic min-h-[16px] flex items-center" | ||
| role="status" |
There was a problem hiding this comment.
P2: className is not forwarded in the empty-message branch, causing inconsistent styling/layout behavior when colors are empty.
Prompt for AI agents
Check if this issue is valid — if so, understand the root cause and fix it. At src/components/products/ProductColorSwatches.tsx, line 73:
<comment>`className` is not forwarded in the empty-message branch, causing inconsistent styling/layout behavior when colors are empty.</comment>
<file context>
@@ -1 +1,141 @@
+ return (
+ <span
+ className="text-[10px] text-muted-foreground/60 italic min-h-[16px] flex items-center"
+ role="status"
+ aria-live="polite"
+ data-testid="colors-unavailable"
</file context>
| */ | ||
| const GLOBAL_COLORS_CACHE = new Map<string, ProductColorDot[]>(); | ||
| export function clearColorsCache(): void { | ||
| GLOBAL_COLORS_CACHE.clear(); |
There was a problem hiding this comment.
P2: The new global color cache has no actual invalidation call sites, so stale data can persist across user/logout-refresh flows and the cache can grow for the whole session.
Prompt for AI agents
Check if this issue is valid — if so, understand the root cause and fix it. At src/hooks/products/useProductsColorsBatch.ts, line 51:
<comment>The new global color cache has no actual invalidation call sites, so stale data can persist across user/logout-refresh flows and the cache can grow for the whole session.</comment>
<file context>
@@ -1 +1,134 @@
+ * queryClient.invalidateQueries(['products-colors-batch']);
+ */
+export function clearColorsCache(): void {
+ GLOBAL_COLORS_CACHE.clear();
+}
+
</file context>
Commit 8818bea ("simplify HMR guard") was misleadingly named — it actually REWROTE the entire ProductsContext.tsx, replacing a rich lazy-fetching API with a minimal one and removing 4 exports that 21 consumers depend on: REMOVED in 8818bea: CONSUMERS BROKEN: - export const ProductsContext useSearch.ts, useSellerCartsPage.ts - export function useProductsContext() 15 files - export function useProductsContextSafe() FloatingCompareBar.tsx - API: getProductById, getProductsByIds, all of the above registerProducts, batched-fetch, HMR recovery via setKey Every production deploy since 8818bea has been state=ERROR (build failure at "useProductsContextSafe is not exported"). The live site is frozen on the 253cebc deploy (last READY). PRs #601 (set_image hover) and #602 are queued behind this bug. This commit restores the full ProductsContext.tsx from commit 253cebc verbatim, preserving the rich API: - export const ProductsContext (raw context for direct useContext) - export ProductsProvider (lazy-fetching with 50ms batching) - export useProductsContext() (strict: returns fallback in dev, fallback in prod; never crashes) - export useProductsContextSafe() (safe: returns null outside provider) API: - products: Product[] - isLoading: boolean - getProductById(id): Product | undefined (lazy-fetches if missing) - getProductsByIds(ids): Product[] (lazy-fetches missing in batch) - registerProducts(products): void (caller-side cache hydration) The fetchPromobrindProducts({ filters, limit }) call in this file is backward-compatible with the current main's products.ts (verified: that file was not changed by 8818bea — only the context consumer was rewritten). Restoring this unblocks all 21 ProductsContext consumers and the entire production deploy pipeline.
🔍 Auditoria Exaustiva — Commits Lovable 02/06/2026
Auditoria dos commits hoje:
7de3c663·f175f33a·bde9f45c·302059d8·fe3fa7b3·eca5d0d1BUG-1 🟡
ProductColorSwatches.tsx— Dead code:containerTestIdnunca usadoLovable declarou
const containerTestId = "product-colors-wrapper"mas nunca a usou.O
data-testidreal no DOM é"product-colors-container".Impacto: ESLint
no-unused-varswarning; confusão de manutenção.BUG-2 🔴
ProductColorSwatches.tsx—classNamenão forwarded quandohideWhenEmpty=trueImpacto:
ProductListItempassaclassName="ml-1 hidden md:flex"— sem o fix, esse div aparecia visível no mobile (semhidden), criando 16px de espaço invisível onde não deveria estar.BUG-3 🔴
ProductColorSwatches.tsx— Gramática PT errada noaria-labelImpacto: Screen readers anunciavam texto gramaticalmente incorreto para produtos com 2+ cores.
BUG-4 🔴
useProductsColorsBatch.ts—GLOBAL_COLORS_CACHEinvalida o React QueryGLOBAL_COLORS_CACHEfoi adicionado pelo Lovable para performance, masqueryClient.invalidateQueries(['products-colors-batch'])não funciona: oqueryFnvêmissingIds.length === 0e retorna stale data sem tocar o Supabase.Fix: Exporta
clearColorsCache()com JSDoc explicando quando chamar. JSDoc duplicado reorganizado.BUG-5 🔴
e2e/product-colors.spec.ts— Spec obsoleto com seletores errados (falsa confiança CI)[role="list"][aria-label*="cor"]role="group"button[role="listitem"]role="listitem"aria-label /^Cor: /"Opção de cor: "Testes não falhavam — simplesmente pulavam asserts silenciosamente. Arquivo substituído por deprecation notice. O spec correto é
e2e/product-colors-full.spec.ts.✅ O que está correto (não alterado)
ProductCardImage.tsxhover crossfade) — lógica correta ✅product-colors-full.spec.ts— seletores corretos ✅ProductCard,NoveltyCards,VariantStockTable,ReplenishmentCards— todos corretos ✅Files alterados
src/components/products/ProductColorSwatches.tsx(BUG-1, BUG-2, BUG-3)src/hooks/products/useProductsColorsBatch.ts(BUG-4)e2e/product-colors.spec.ts(BUG-5)Summary by cubic
Corrige 5 regressões introduzidas hoje: swatches de cor, texto de acessibilidade em PT, invalidação de cache e spec E2E obsoleto. Também restaura arquivos que haviam sido salvos em base64, garantindo código TS/JS válido (rel. #602).
Bug Fixes
ProductColorSwatches: faz forward declassNamequandohideWhenEmpty=true(evita espaço visível no mobile); corrige gramática noaria-labelpara “X cores disponíveis”; removecontainerTestIdmorto.useProductsColorsBatch:GLOBAL_COLORS_CACHEburlava a invalidação do@tanstack/react-query; exportaclearColorsCache()e organiza JSDoc.e2e/product-colors.spec.tspor aviso de deprecação (seletores errados) e mantém o teste válido eme2e/product-colors-full.spec.ts.Migration
clearColorsCache()antes dequeryClient.invalidateQueries(['products-colors-batch']).Written for commit e179672. Summary will update on new commits.
Summary by CodeRabbit
Notas de Lançamento
Testes
Refactor
Melhorias