i18n-array-groq-query-migration

Обнаружение и обновление устаревших шаблонов GROQ, где язык считывается из _key для sanity-plugin-internationalized-array, когда пользователи упоминают миграцию с v4 на v5, или…

npx skills add https://github.com/sanity-io/plugins --skill i18n-array-groq-query-migration

Internationalized Array GROQ Migration

Goal

Help users find GROQ queries that still read locale from _key and rewrite them safely for v5.

When To Use

Use this skill when a user asks to:

  • migrate sanity-plugin-internationalized-array from v4 to v5
  • migrate @sanity/document-internationalization from v5 to v6 alongside sanity-plugin-internationalized-array language field changes
  • find queries that still use _key for language lookup
  • update GROQ filters like _key == "en" or _key == $language

Detection Workflow

Detection commands below use grep. If your environment differs, use your editor's global search with equivalent patterns.

  1. Search for direct language comparisons on _key:
grep -REn --exclude-dir=node_modules "_key[[:space:]]*==[[:space:]]*(\"[^\"]+\"|'[^']+'|\\$[A-Za-z_][A-Za-z0-9_]*)" .
  1. Search for any localized-array filters that mention _key:
grep -REn --exclude-dir=node_modules "\[[^]]*_key[^]]*\]" .
  1. Prioritize matches that look like localized-value reads, for example:
  • field[_key == ...][0].value
  • select(...) branches that compare _key to a language value
  1. Check for uses of groq and verify if they use _key as the language, if it is using it, update them.

  2. Explicitly check for template-interpolated language expressions and keep the same operand, for example:

    • _key == "${language}"
    • _key == "${locale}"
  3. Review each match to avoid false positives where _key is used for unrelated array item identity.

Rewrite Rules

Use the same language operand from the original query. The language operand can be a string literal (for example "en"), a variable (for example $language), or a template-interpolated expression (for example "${language}").

  • Before data migration is executed (backwards compatible):
    • _key == <languageExpr> -> language == <languageExpr> || _key == <languageExpr>
  • After migration is complete:
    • language == <languageExpr> || _key == <languageExpr> -> language == <languageExpr>

Examples

Legacy:

*[_type == "person"]{
  "greeting": greeting[_key == $language][0].value
}

Backwards compatible:

*[_type == "person"]{
  "greeting": greeting[language == $language || _key == $language][0].value
}

Post-migration final form:

*[_type == "person"]{
  "greeting": greeting[language == $language][0].value
}

Response Template

When reporting findings to a user:

  1. List each query location that still uses _key as language source.
  2. Show the exact replacement using the same language expression.
  3. Label each replacement as:
    • backwards-compatible (pre-migration), or
    • final (post-migration complete).
  4. Label each match category as runtime, docs/example, or ambiguous.
  5. Call out any ambiguous _key usage that needs manual review.

Больше skills от sanity-io

performance-optimization
sanity-io
Оптимизирует производительность приложений. Используйте, когда есть требования к производительности, при подозрении на регрессию производительности, а также при проблемах с Core Web Vitals или временем загрузки…
official
rxjs-like-a-pro
sanity-io
Этот навык помогает писать идиоматичный, композируемый код на RxJS, свободный от типичных ошибок. Основная философия: держите логику внутри цепочки observable. Каждый раз, когда вы тянетесь к .subscribe(), спросите себя, можно ли выразить эту работу как трансформацию внутри .pipe().
official
find-skills
sanity-io
Помогает пользователям находить и устанавливать навыки агентов, когда они задают вопросы вроде «как мне сделать X», «найди навык для X», «есть ли навык, который может...» или выражают...
official
next-cache-components
sanity-io
Компоненты кэша Next.js 16 - PPR, директива use cache, cacheLife, cacheTag, updateTag
official
vercel-react-best-practices
sanity-io
Рекомендации по оптимизации производительности React и Next.js от инженеров Vercel. Этот навык следует использовать при написании, рецензировании или рефакторинге React/Next.js…
official
frontend-design
sanity-io
Создавайте отличительные интерфейсы фронтенда производственного уровня с высоким качеством дизайна. Используйте этот навык, когда пользователь просит создать веб-компоненты, страницы или…
official
plugin-transfer
sanity-io
Помогает агентам перенести существующий плагин в этот монорепозиторий с помощью рабочего процесса генератора copy-plugin.
official
test-studio-script-runner
sanity-io
Объясняет инструмент Script Runner в dev/test-studio. Используйте при добавлении, редактировании, запуске или документировании скриптов в dev/test-studio/src/script-runner, или когда…
official