ui: identify password columns by field type, add password Cell - #1016
Conversation
- Default column derivation in ListViewClient, standalone ListTable, and deriveItemView's Relationship-table columns now excludes a password column by field type instead of matching the field name "password". - Register a password Cell in the cell registry that renders a fixed mask regardless of value, so an explicitly-shown password column no longer depends on HashedPassword.toJSON() redaction for safety. - Remove the dead, uncalled getFieldDisplayValue export. Closes #982
🦋 Changeset detectedLatest commit: aa6c6c6 The changes in this PR will be included in the next version bump. This PR includes changesets to release 9 packages
Not sure what this means? Click here to learn what changesets are. Click here if you're a maintainer who wants to add another changeset to this PR |
|
Deployment failed for project stack-docs with the following error: Learn More: https://vercel.com/open-saas?upgradeToPro=build-rate-limit |
Code reviewRan a full review pass (line-by-line diff, removed-behavior audit, cross-file tracing, reuse/simplification/efficiency/altitude, CLAUDE.md conventions). Findings: none.
Generated by Claude Code |
|
The Generated by Claude Code |
Coverage Report for Core Package Coverage (./packages/core)
File CoverageNo changed files found. |
Coverage Report for UI Package Coverage (./packages/ui)
File Coverage
|
||||||||||||||||||||||||||||||||||||||
Coverage Report for CLI Package Coverage (./packages/cli)
File CoverageNo changed files found. |
Coverage Report for Auth Package Coverage (./packages/auth)
File CoverageNo changed files found. |
Coverage Report for Storage Package Coverage (./packages/storage)
File CoverageNo changed files found. |
Coverage Report for RAG Package Coverage (./packages/rag)
File CoverageNo changed files found. |
Coverage Report for Storage S3 Package Coverage (./packages/storage-s3)
File CoverageNo changed files found. |
Coverage Report for Storage Vercel Package Coverage (./packages/storage-vercel)
File CoverageNo changed files found. |
Summary
"password", in all three places that curated default columns:ListViewClient(main list view), the standaloneListTable, andderiveItemView's Relationship-table column derivation. A field declaredsecret: password()is now excluded from default columns; a field merely namedpasswordthat isn'tpassword()-typed (e.g.password: text()) is no longer excluded.passwordCell in the cell registry (cellComponentRegistry) that renders a fixed••••••••mask, ignoring the value entirely. A password-typed column shown deliberately via an explicitcolumnsprop now renders the mask instead of falling through to the default text Cell (previously[object Object], saved only incidentally byHashedPassword.toJSON()redaction).getFieldDisplayValueexport from@opensaas/stack-ui— it had zero callers in the actual rendering path (Cells render each field type directly) and disagreed with what was actually rendered.Test plan
ListViewClient,ListTable,deriveItemView), a field merely namedpasswordis not excluded when it isn't password-typed, and the newPasswordCell(direct render + viaCellRenderertype resolution) renders a fixed mask ignoring the raw value.pnpm testinpackages/ui— 594/594 passingpnpm buildinpackages/ui(typecheck viatsc) — passespnpm lint— no new warnings/errorspnpm manypkg fix/pnpm format— cleanCloses #982
Generated by Claude Code