repo-source-code-document
8
总安装量
2
周安装量
#35906
全站排名
安装命令
npx skills add https://github.com/open-circle/valibot --skill repo-source-code-document
Agent 安装分布
windsurf
1
amp
1
opencode
1
kimi-cli
1
codex
1
github-copilot
1
Skill 文档
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](https://en.wikipedia.org/wiki/Email_address) 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
@internaltag 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 < 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:
@internaltag - Inline comments: No articles (except Hint), no periods
- JSDoc comments: End with periods