sanity-config-reducers

Adicione e revise propriedades de configuração do Sanity que são reduzidas entre a configuração raiz e os plugins. Use ao adicionar sinalizadores beta, configuração de recursos, opções de workspace/fonte,...

npx skills add https://github.com/sanity-io/sanity --skill sanity-config-reducers

Sanity Config Reducers

Start Here

Use this skill when a config value can be supplied by root config or plugins and needs deterministic merge behavior.

Inspect these files first:

  • packages/sanity/src/core/config/types.ts
  • packages/sanity/src/core/config/configPropertyReducers.ts
  • packages/sanity/src/core/config/prepareConfig.tsx
  • packages/sanity/src/core/config/flattenConfig.ts
  • packages/sanity/src/core/config/resolveDefaultPlugins.ts if the config gates default plugin injection.

Reducer Pattern

Reducers usually:

  1. Call flattenConfig(config, []).
  2. Reduce from an explicit initialValue.
  3. Read the property from each innerConfig.
  4. Ignore undefined.
  5. Accept only the documented type.
  6. Throw with getPrintableType(value) for invalid values.

Config namespaces should usually be objects, even when they initially only contain one flag. This keeps room for future options without changing the public shape. For booleans, prefer feature.enabled and follow this shape:

export const featureEnabledReducer = (opts: {
  config: PluginOptions
  initialValue: boolean
}): boolean => {
  const {config, initialValue} = opts
  const flattenedConfig = flattenConfig(config, [])

  return flattenedConfig.reduce((acc, {config: innerConfig}) => {
    const enabled = innerConfig.feature?.enabled

    if (typeof enabled === 'undefined') return acc
    if (typeof enabled === 'boolean') return enabled

    throw new Error(
      `Expected \`feature.enabled\` to be a boolean, but received ${getPrintableType(enabled)}`,
    )
  }, initialValue)
}

Root config is flattened after plugin config, so root values usually win when a reducer overwrites with the latest defined value.

Types And Exposure

When adding a config property:

  • Declare the public or internal input type in PluginOptions, WorkspaceOptions, or the relevant nested type in types.ts.
  • Prefer extensible object namespaces such as beta.feature.enabled over direct booleans such as beta.feature.
  • If runtime code needs the resolved value, expose it on Source, Workspace, or the relevant prepared object in prepareConfig.tsx.
  • Keep raw config access through source.__internal.options as an implementation detail, not the primary runtime API.

Default Plugin Gates

Default plugin lists are computed before full source resolution. If a config value controls default plugin injection:

  • Compute the reduced value early enough in prepareConfig.tsx, before calling getDefaultPlugins.
  • Thread that reduced value into getDefaultPluginsOptions or the options passed to getDefaultPlugins.
  • Use the same reducer later when exposing the resolved runtime value, so gating and runtime context agree.
  • Add tests for default false/true behavior and invalid values.

Beta Flags

Beta flags live under BetaFeatures in types.ts and resolved runtime values under source.beta.

Prefer a dedicated reducer when:

  • Plugins can set or override the flag.
  • Invalid values should produce helpful errors.
  • The flag gates default plugin injection.

Do not special-case beta flags in components by reading raw config if a resolved value can be exposed instead.

Verification

Add focused config tests for:

  • Default value.
  • Root config value.
  • Plugin-provided value.
  • Root-over-plugin precedence when relevant.
  • Invalid namespace object error message when the top-level config is malformed.
  • Invalid nested property error message, for example when enabled is not the documented type.

Mais skills de sanity-io

tdd
sanity-io
Desenvolvimento orientado a testes com ciclo red-green-refactor. Use quando o usuário quiser construir funcionalidades ou corrigir bugs usando TDD, mencionar "red-green-refactor", quiser…
performance-optimization
sanity-io
Otimiza o desempenho da aplicação. Use quando existirem requisitos de desempenho, quando suspeitar de regressões de desempenho, ou quando os Core Web Vitals ou tempos de carregamento…
content-experimentation-best-practices
sanity-io
Orientação estruturada para projetar, executar e analisar experimentos de conteúdo visando melhorar conversão e engajamento. Abrange frameworks de hipóteses, seleção de métricas, cálculo de tamanho amostral e testes de significância estatística em experimentos A/B e multivariados. Inclui recursos detalhados sobre valores-p, intervalos de confiança, análise de poder e métodos bayesianos para interpretação de resultados. Fornece padrões de integração com CMS para gerenciar variantes no nível de campo e conectar sistemas externos...
content-modeling-best-practices
sanity-io
Orientação para modelagem de conteúdo estruturado voltada ao design de esquemas, reutilização e entrega multicanal. Aborda princípios fundamentais: tratar conteúdo como dados, e não como páginas; manter fontes únicas de verdade; projetar para canais futuros; e otimizar fluxos de trabalho editoriais. Inclui estruturas de decisão para referências versus objetos incorporados, separação de responsabilidades e padrões de reutilização de conteúdo. Oferece orientação sobre taxonomia e classificação para abordagens planas, hierárquicas e facetadas. Aplica-se a...
portable-text-conversion
sanity-io
Converta conteúdo HTML e Markdown em blocos Portable Text para Sanity. Use ao migrar conteúdo de CMSs legados, importando HTML ou Markdown para o Sanity,…
portable-text-serialization
sanity-io
Renderize e serialize Portable Text para React, Svelte, Vue, Astro, HTML, Markdown e texto simples. Use ao implementar a renderização de Portable Text em qualquer frontend…
sanity-best-practices
sanity-io
Práticas recomendadas abrangentes e guias de integração para desenvolvimento no Sanity CMS em diferentes frameworks e tópicos. Abrange mais de 10 integrações de frameworks, incluindo Next.js, Nuxt, Astro, Remix, SvelteKit e Angular, com padrões específicos de cada framework e orientações de configuração. Inclui guias de tópicos para design de esquemas, otimização de consultas GROQ, Edição Visual, Portable Text, imagens, TypeGen, localização e migrações de conteúdo. Fornece uma estrutura de referência rápida para carregar apenas guias relevantes com base no tipo de tarefa,...
sanity-migration
sanity-io
Planeja, implementa e revisa migrações de outros CMSs e sistemas de conteúdo para o Sanity. Use ao migrar ou replataformar para o Sanity a partir de AEM, Adobe Experience Manager, Contentful, Strapi, Webflow, WordPress, Payload, Drupal, arquivos Markdown/MDX/frontmatter, exportações WXR/XML, APIs de CMS, dumps de banco de dados, HTML estático, ou ao projetar fluxos de extração, transformação, conversão de Portable Text, migração de ativos, redirecionamentos, validação e cutover.
data-analysisdatabasedevelopment