@407dev/field-types
v0.2.0
Published
- Registry and built-in field type definitions for scalar and semantic CMS field types (`text`, `number`, `toggle`, `select`, `image`, `video`, `richtext`, `media.videoList`, `geo.area`, `address`, `address.list`). - Validates field constraints, default v
Readme
@407dev/field-types
Purpose
- Registry and built-in field type definitions for scalar and semantic CMS field types (
text,number,toggle,select,image,video,richtext,media.videoList,geo.area,address,address.list). - Validates field constraints, default values, safe URI schemes, and ProseMirror rich text documents against node/mark whitelists.
- Provides normalization repairs (e.g. polygon ring closure) for editor commit workflows.
Surface
registry.ts:registerFieldType(),getFieldType(),hasFieldType(),listFieldTypeIds(),listFieldTypes(),fieldTypeAliases(),resolveTypeAlias(),normalizeFieldValue(),unknownTypeIds(),validateFieldValue(),resetRegistry(),registerBaseTypes().url.ts:stripUrlControlChars(),isSafeMediaSrc(),isSafeActionHref().richtext.ts:validateProseMirrorDoc(),isValidLinkHref(),isValidImageSrc(),RichTextConstraints.types.ts:FieldTypeDefinition,FieldValidationError,FieldValidationResult.- Built-in types:
textType,numberType,toggleType,selectType,imageType,videoType,richtextType,videoListType,geoAreaType,addressType,addressListType.
Patterns
- Pure validation functions that never throw on invalid input, returning
{ valid: boolean; errors?: FieldValidationError[] }. - Safe URI sanitizer strips Unicode and ASCII control characters (
\x00–\x1F,\x7F–\x9F) before evaluating scheme allowlist. - In-house $O(n^2)$ orientation-based self-intersection test for polygon rings without external geometry libraries.
Integrations
- Consumed by
apps/apifor manifest field type verification and validation during entry/field writes. - Consumed by
packages/astroto dynamically generate synchronous field helper methods and render components. - Consumed by
packages/cliduring AST extraction and manifest type checking. - Consumed by
apps/webfor field popovers, group modal normalization, and widget form validation.
Constraints
- Published package: builds to ESM and
.d.tsviatsup. - Must not depend on
apps/*or Astro runtime packages. - Zero external runtime dependencies: no Turf.js, no validator packages.
Gotchas
normalize?(value)is called exclusively by the editor before save;apps/apistores values as received.geo.areaself-intersection algorithm validates that exterior boundary edges do not self-intersect; hole-inside-shell containment validation is explicitly out of scope.
