repo-source-code-document

Valibot Source Code Documentation

Safety Notice

This listing is imported from skills.sh public index metadata. Review upstream SKILL.md and repository scripts before running.

Copy this and send it to your AI assistant to learn

Install skill "repo-source-code-document" with this command: npx skills add open-circle/valibot/open-circle-valibot-repo-source-code-document

Valibot Source Code Documentation

Documentation patterns for library source code in /library/src/ .

JSDoc Patterns

Interface Documentation

/**

  • String issue interface. / export interface StringIssue extends BaseIssue<unknown> { /*
    • The issue kind. / readonly kind: 'schema'; /*
    • The issue type. */ readonly type: 'string'; }

Rules:

  • First line: [Name] [category] interface. (e.g., "String issue interface.")

  • Property comments: The [description]. (always start with "The", end with period)

  • All properties use readonly

  • No blank lines between property and its comment

Function Overloads

Each overload gets its own complete JSDoc:

/**

  • Creates a string schema.
  • @returns A string schema. */ export function string(): StringSchema<undefined>;

/**

  • Creates a string schema.
  • @param message The error message.
  • @returns A string schema. */ export function string< const TMessage extends ErrorMessage<StringIssue> | undefined,

(message: TMessage): StringSchema<TMessage>;

Rules:

  • First line: Creates a [name] [category]. (use "a" vs "an" correctly)

  • Blank line after description

  • @param name The [description]. (start with "The", end with period)

  • Blank line after params

  • @returns A [name] [category]. or @returns The [description].

Hints

Add hints after the main description, before @param :

/**

  • Creates an object schema.
  • Hint: This schema removes unknown entries. To include unknown entries, use
  • looseObject. To reject unknown entries, use strictObject.
  • @param entries The entries schema.
  • @returns An object schema. */

Links

Link to external resources when relevant using markdown format:

/**

  • Creates an email validation action. */

Implementation Function

The implementation has NO JSDoc but uses // @NO_SIDE_EFFECTS :

// @NO_SIDE_EFFECTS export function string( message?: ErrorMessage<StringIssue> ): StringSchema<ErrorMessage<StringIssue> | undefined> { return { /* ... */ }; }

// @NO_SIDE_EFFECTS rules:

  • Add for pure functions (no external state mutation, no I/O)

  • Most schema/action/method factories are pure

  • Do NOT add for functions that mutate arguments (like _addIssue )

  • Used by bundlers for tree-shaking

Utility Functions

/**

  • Stringifies an unknown input to a literal or type string.
  • @param input The unknown input.
  • @returns A literal or type string.
  • @internal */ // @NO_SIDE_EFFECTS export function _stringify(input: unknown): string { // ... }

Rules:

  • Use @internal tag for internal utilities

  • Prefix internal functions with _

  • Only add // @NO_SIDE_EFFECTS if function is pure

Inline Comment Patterns

Section Headers

'~run'(dataset, config) { // Get input value from dataset const input = dataset.value;

// If root type is valid, check nested types if (Array.isArray(input)) { // Set typed to true and value to empty array dataset.typed = true; dataset.value = [];

// Parse schema of each array item
for (let key = 0; key &#x3C; input.length; key++) {
  // ...
}

} }

Rules:

  • Describe WHAT the next code block does

  • Present tense verbs: "Get", "Parse", "Check", "Set", "Add", "Create"

  • Omit articles ("the", "a", "an"): "Get input value" not "Get the input value"

  • No period at end

  • Blank line before comment, no blank line after

Conditional Logic

// If root type is valid, check nested types if (input && typeof input === 'object') { // ... }

// Otherwise, add issue else { _addIssue(this, 'type', dataset, config); }

Rules:

  • Use "If [condition], [action]"

  • Use "Otherwise, [action]" for else branches

  • Omit articles

Hint Comments (Exception)

// Hint: The issue is deliberately not constructed with the spread operator // for performance reasons const issue: BaseIssue<unknown> = { /* ... */ };

Rules:

  • Start with "Hint:"

  • Explain WHY, not just what

  • CAN use articles (unlike other inline comments)

  • Document performance decisions, non-obvious logic

TODO Comments

// TODO: Should we add "n" suffix to bigints? if (type === 'bigint') { /* ... */ }

@ts-expect-error

Used for internal dataset mutations TypeScript can't track:

// @ts-expect-error dataset.typed = true;

File Type Patterns

Schema Files (string.ts , object.ts , etc.)

  • Issue interface with JSDoc

  • Schema interface with JSDoc

  • Function overloads with full JSDoc each

  • Implementation with // @NO_SIDE_EFFECTS

  • Return object with '~run' method containing inline comments

Action Files (email.ts , minLength.ts , etc.)

  • Issue interface (for validation actions)

  • Action interface with JSDoc

  • Function overloads with JSDoc

  • Implementation with // @NO_SIDE_EFFECTS

Method Files (parse.ts , pipe.ts , etc.)

More complex logic, require more inline comments.

Utility Files (_addIssue.ts , _stringify.ts )

  • Single function with JSDoc including @internal

  • // @NO_SIDE_EFFECTS only if pure

Terminology Consistency

JSDoc descriptions must match the kind property if present:

kind Property JSDoc Wording

'schema'

"Creates a ... schema."

'validation'

"Creates a ... validation action."

'transformation'

"Creates a ... transformation action."

Quick Reference

JSDoc First Lines

Type Pattern

Interface [Name] [category] interface.

Type [Name] [category] type.

Function Creates a [name] [category].

Utility [Verb]s [description].

Inline Comment Starters

Pattern Example

// Get [what]

// Get input value from dataset

// If [condition], [action]

// If root type is valid, check nested types

// Otherwise, [action]

// Otherwise, add issue

// Create [what]

// Create object path item

// Add [what] to [where]

// Add issues to dataset

// Parse [what]

// Parse schema of each array item

// Set [property] to [value]

// Set typed to true

// Hint: [explanation]

// Hint: This is for performance

// TODO: [task]

// TODO: Add bigint suffix

Terminology

Use consistently:

  • Schema (not "validator")

  • Action (not "validation" for the object)

  • Issue (not "error" in type names)

  • Dataset (internal data structure)

  • Config/Configuration (not "options")

Checklist

  • Interfaces: [Name] [category] interface.

  • Properties: The [description].

  • Overloads: Complete JSDoc each

  • Implementation: NO JSDoc

  • Pure functions: // @NO_SIDE_EFFECTS

  • Impure functions (mutate args): NO @NO_SIDE_EFFECTS

  • Internal utilities: @internal tag

  • Inline comments: No articles (except Hint), no periods

  • JSDoc comments: End with periods

Source Transparency

This detail page is rendered from real SKILL.md content. Trust labels are metadata-based hints, not a safety guarantee.

Related Skills

Related by shared tags or category signals.

Coding

repo-source-code-review

No summary provided by upstream source.

Repository SourceNeeds Review
Automation

valibot

No summary provided by upstream source.

Repository SourceNeeds Review
Automation

repo-website-api-create

No summary provided by upstream source.

Repository SourceNeeds Review
Automation

repo-website-guide-create

No summary provided by upstream source.

Repository SourceNeeds Review