Skills DirectorySkills Directory
SkillsLearnSecurityCategoriesDocsBlogPro
Sign InSubmit Skill
Skills Directory

Security-tested agent skills for Claude, coding agents, and AI workflows.

Directory

  • Browse Skills
  • All Skills A–Z
  • Claude Skills
  • Claude Code Skills
  • Agent Skills
  • Categories
  • Authors
  • Submit a Skill

Learn

  • Learn Hub
  • Install Claude Skills
  • Write SKILL.md
  • Skills vs MCP
  • Directories Compared

Security

  • Security
  • Methodology
  • Secure Claude Skills
  • Security Badges

Company

  • About
  • Community
  • Blog
  • API Docs
  • Advertise

2026 Skills Directory. All rights reserved.

ProTermsPrivacyRefunds
Back to skills

Handsontable Validator Dev

ASecurity

Use when creating or modifying a Handsontable cell validator - async callback-based validation functions that determine if cell values are valid

22,052 stars
0 votes
0 copies
0 views
Added 9/19/2026
developmentapi

Works with

cliapi

Security Analysis

A100/100

Scanned 9/19/2026

$npx -y skills add handsontable/handsontable --skill handsontable-validator-dev --agent claude-code

Installs into .claude/skills of the current project.

Are you the author of Handsontable Validator Dev?

Add the live security badge to your README — it updates automatically with every re-scan.

Security grade badge for Handsontable Validator Dev
[![Security: A — Skills Directory](https://www.skillsdirectory.com/api/skills/handsontable-handsontable-validator-dev/badge)](https://www.skillsdirectory.com/skills/handsontable-handsontable-validator-dev)

More formats (shields.io, HTML) on the badges page.

Download with Pro
Files
SKILL.md
---
name: handsontable-validator-dev
path: handsontable/src/validators/**
description: Use when creating or modifying a Handsontable cell validator - async callback-based validation functions that determine if cell values are valid
---

# Handsontable Validator Development

## Function signature

Validators use the **callback pattern** and must always invoke the callback:

```js
function myValidator(value, callback) {
  // `this` is bound to the cell's cellProperties object
  if (this.allowEmpty && (value === null || value === void 0 || value === '')) {
    return callback(true);
  }
  callback(isValid(value)); // true = valid, false = invalid
}
```

## Key rules

- **Always call the callback.** Forgetting to call `callback` hangs the validation pipeline.
- **Context-aware.** `this` is the cell's `cellProperties` object. Use `this.allowEmpty`, `this.instance` (the Handsontable instance), and other cell meta properties.
- **Single responsibility.** Validators only determine validity. Never modify data, DOM, or cell state.
- **Async-compatible.** The callback can be called after async operations (API calls, timeouts). The editor enters WAITING state until the callback resolves.

## File structure

```
src/validators/{validatorName}/
  {validatorName}.ts    # Validator function
  index.ts              # Re-exports
```

Registry: `src/validators/registry.ts`.

## Registration

```js
import { registerValidator } from '../../validators/registry';
registerValidator('myValidator', myValidator);
```

## How validators are triggered

- Automatically by the editor system during `finishEditing()`.
- Programmatically via `validateCells()`, `validateRows()`, or `validateColumns()` API methods.
- Invalid cells receive the `htInvalid` CSS class (applied by the renderer pipeline, not the validator).

## Reference implementations

- `src/validators/numericValidator/numericValidator.ts` - Numeric validation with `allowEmpty` support.
- `src/validators/dateValidator/dateValidator.ts` - Date format validation.
- `src/validators/autocompleteValidator/autocompleteValidator.ts` - Validates against a list of allowed values.

## Correcting cell values inside a validator

Validators may correct a cell's value before passing it to the callback. If your validator calls `setDataAtCell` to write a corrected value, **pass a source string that ends with `'Validator'`** (e.g. `'myCustomValidator'`):

```js
this.instance.setDataAtCell(row, col, correctedValue, 'myCustomValidator');
```

This is required so that `validateChanges()` in `core.js` can track the correction and prevent it from being overwritten when an async validator in the same batch resolves later. Without the suffix, the correction is silently lost when the batch includes columns with async `source` callbacks (e.g. async autocomplete with `strict: true`).

## Common mistakes

- Forgetting to call `callback`, which silently blocks editing and validation.
- Not respecting `this.allowEmpty` for empty values.
- Calling `setDataAtCell` inside a validator without a source ending in `'Validator'` - the correction will be overwritten when the batch contains async validators (see above).
- Using arrow functions for the validator body (breaks `this` binding to cellProperties).
- Reading a meta flag that an editor forces in `prepare()`. `DropdownEditor.prepare()` writes `strict = true` onto the one cell it prepares, and only when that cell is selected. A validator that reads `this.strict` therefore sees the column's own `strict: false` on every cell the user never clicked - a paste, `setDataAtCell()`, `validateCells()`, and any `updateSettings()` that rebuilds the cell meta. That made a `strict: false` dropdown strict only in clicked cells (DEV-2911). When a cell type has a fixed behavior, pass it to the shared logic explicitly - `dropdownValidator` calls `validateAgainstSource(this, value, callback, true)` - and never infer it from the meta. A test for this must write to a cell that was never selected: selecting it first hides the bug.

Attribution

handsontablehandsontable
View sourceMore from handsontable →
SSkills DirectorySkills Directory

Your tool, in front of Claude Code builders.

3 founder slots · $299/mo · GSC-verified traffic · sponsors can never buy grades.

See placements

Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.

Comments (0)

No comments yet. Be the first to comment!

SSkills DirectorySkills Directory

Your tool, in front of Claude Code builders.

3 founder slots · $299/mo · GSC-verified traffic · sponsors can never buy grades.

See placements

Related Skills

Browser Extension Developer

Use this skill when developing or maintaining browser extension code in the `browser/` directory, including Chrome/Firefox/Edge compatibility, content scripts, background scripts, or i18n updates.

285172 votes

Seo Optimizer

SEO optimization with keyword analysis, readability assessment, technical validation, content quality. Use for search rankings, blog posts, content audits, or encountering keyword density, readability scores, meta tags, schema markup errors.

2222 votes

Google Official Seo Guide

Official Google SEO guide covering search optimization, best practices, Search Console, crawling, indexing, and improving website search visibility based on official Google documentation

1862 votes

Tanstack Start

Build a full-stack TanStack Start app on Cloudflare Workers from scratch — SSR, file-based routing, server functions, D1+Drizzle, better-auth, Tailwind v4+shadcn/ui. Use whenever the user mentions TanStack Start, asks to scaffold a full-stack Cloudflare app with SSR, wants an SSR dashboard, or asks for a React 19 + Cloudflare Workers app with file-based routing and server functions — even if they don't name TanStack Start specifically. No template repo — Claude generates every file fresh per ...

10311 votes

Pentest

PTES-aligned adversarial security audit for backend, frontend, and mobile applications. Produces a CVSS-scored Hacker Report with verified PoCs and phased remediation.

5491 votes
View all in development →