Skip to content

Entity fields

Кастомные поля на core-сущностях без изменения Keystone lists. Расширения декларируют метаданные; хост хранит значения в EAV.

Главный принцип: всё — строка

СлойПравило
Storage (EntityFieldValue.value)text, NOT NULL
Host API setValuesRecord<string, string>
Hook context fieldsRecord<string, string>
GraphQL filter valueString

Семантика boolean / number / JSON — ответственность расширения: сериализует при записи ("true", "42", '{"a":1}'), парсит при чтении. Ядро не интерпретирует тип beyond maxLength и optional validate().

Поддерживаемые entity types

space | artifact | user | template | spaceMember

Что ядро не делает

  • Не рендерит формы по registry (app.entityFieldEditors — out of scope).
  • Не добавляет поля в auto-generated Keystone WhereInput.
  • Не валидирует бизнес-смысл значения (только ключ зарегистрирован, длина, optional extension validate).

Registry

backend.entityFields — metadata only:

ts
interface EntityFieldDefinition {
  entityType: 'space' | 'artifact' | ...
  key: string           // namespaced, уникален в extension
  label: string         // админка / логи
  filterable?: boolean  // участие в fieldFilters
  defaultValue?: string
  maxLength?: number
  validate?(value: string): void | Promise<void>
}

Документация по слоям

Краткий registry guide.

AI workspace для командных материалов и знаний