Skip to content

#38 feat: add metadata support for Valsans with titles and descriptions - #46

Merged
DrewImm merged 1 commit into
mainfrom
valsan/38
Oct 4, 2026
Merged

DrewImm merged 1 commit into
mainfrom
valsan/38

Conversation

@DrewImm

@DrewImm DrewImm commented Oct 4, 2026

Copy link
Copy Markdown
Member
  • Introduced title and description fields in ValSanOptions for schema documentation and JSON Schema output.
  • Implemented getTitle() and getDescription() methods in BaseValSan to retrieve metadata.
  • Enhanced various Valsans (e.g., MacAddressValSan, EmailValidator, ComposedValSan, etc.) with default titles and descriptions.
  • Updated validation descriptions to include helper texts from rules.
  • Added tests to verify metadata functionality and ensure proper integration across built-in Valsans.

- Introduced `title` and `description` fields in `ValSanOptions` for schema documentation and JSON Schema output.
- Implemented `getTitle()` and `getDescription()` methods in `BaseValSan` to retrieve metadata.
- Enhanced various Valsans (e.g., `MacAddressValSan`, `EmailValidator`, `ComposedValSan`, etc.) with default titles and descriptions.
- Updated validation descriptions to include helper texts from rules.
- Added tests to verify metadata functionality and ensure proper integration across built-in Valsans.

Copilot AI left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Copilot review overview

🟡 Changes recommended

Validation descriptions can advertise inactive constraints or omit active composed constraints.

Review effort: Balanced
Findings: 2 Medium severity · 1 Low severity

Open (3)
What changed in this PR

Adds schema metadata and validation descriptions across the ValSan API.

Changes:

  • Adds title/description metadata APIs and defaults.
  • Builds validation descriptions from rule helper text.
  • Adds metadata tests and documentation.
File Description
test/​spec/​valsan/​metadata.spec.ts Tests metadata behavior.
src/​valsan.ts Extends public metadata API.
src/​valsan-composed.ts Adds composed metadata support.
src/​valsan-base.ts Implements metadata retrieval and aggregation.
src/​primitives/​utility/​enum-validator.ts Adds enum metadata.
src/​primitives/​string/​uppercase-sanitizer.ts Adds uppercase metadata.
src/​primitives/​string/​trim-sanitizer.ts Adds trim metadata.
src/​primitives/​string/​slug-validator.ts Adds slug metadata.
src/​primitives/​string/​pattern-validator.ts Adds pattern metadata.
src/​primitives/​string/​min-length-validator.ts Adds minimum-length metadata.
src/​primitives/​string/​max-length-validator.ts Adds maximum-length metadata.
src/​primitives/​string/​lowercase-sanitizer.ts Adds lowercase metadata.
src/​primitives/​string/​length-validator.ts Adds length metadata.
src/​primitives/​string/​alphanumeric-validator.ts Adds alphanumeric metadata.
src/​primitives/​string/​alpha-validator.ts Adds alphabetic metadata.
src/​primitives/​person/​email-validator.ts Adds email metadata.
src/​primitives/​object/​object-valsan.ts Adds object metadata.
src/​primitives/​number/​string-to-number.ts Adds numeric conversion metadata.
src/​primitives/​number/​range-validator.ts Adds range metadata and detailed helpers.
src/​primitives/​number/​min-validator.ts Adds minimum-value metadata.
src/​primitives/​number/​max-validator.ts Adds maximum-value metadata.
src/​primitives/​number/​integer-validator.ts Adds integer metadata.
src/​primitives/​number/​decimal-validator.ts Adds decimal metadata.
src/​primitives/​network/​url-valsan.ts Adds URL metadata.
src/​primitives/​network/​port-number-valsan.ts Adds port metadata.
src/​primitives/​network/​mac-address-valsan.ts Adds MAC address metadata.
src/​primitives/​network/​ip-address-valsan.ts Adds IP address metadata.
src/​primitives/​network/​fqdn-valsan.ts Adds domain-name metadata.
src/​primitives/​json/​json-valsan.ts Adds JSON metadata.
src/​primitives/​encoding/​uuid-valsan.ts Adds UUID metadata.
src/​primitives/​encoding/​semver-valsan.ts Adds semantic-version metadata.
src/​primitives/​date-time/​string-to-date.ts Adds date metadata.
src/​primitives/​date-time/​iso8601-timestamp-valsan.ts Adds timestamp metadata.
src/​primitives/​color/​hex-color-valsan.ts Adds color metadata.
src/​primitives/​bool/​string-to-boolean.ts Adds boolean-string metadata.
src/​primitives/​auth/​bearer-token-valsan.ts Adds bearer-token metadata.
src/​primitives/​array/​array-valsan.ts Adds array metadata.
docs/​using-options.md Documents metadata options.
docs/​composed-valsan.md Documents composed descriptions.

💡 Add a code-review agent skill or configure MCP servers for context-aware, tailored reviews. Learn more in the docs.

Comment thread src/valsan-base.ts
Comment on lines +45 to +49
return Object.entries(rules).flatMap(([key, rule]) => {
if (ignoreRuleKeys.has(key)) {
return [];
}

Comment thread src/valsan-composed.ts
Comment on lines +110 to +111
public getRuleHelperTexts(): string[] {
return this.collectRuleHelperTexts(this.rules());
Comment thread docs/using-options.md
console.log(macAddress.getDescription()); // "The MAC address of the Wi-Fi NIC"
```

`getValidationDescription()` combines the Valsan description with its rule helper text. Composed Valsans include helper text from each step.
@DrewImm
DrewImm merged commit 2698aa2 into main Oct 4, 2026
1 check passed
@DrewImm
DrewImm deleted the valsan/38 branch October 4, 2026 14:25
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.

2 participants