{"record":{"id":"8fe17c95d084b1bc","repo":"medusajs/medusa","slug":"zone-property-at-the-j-index-of-the-forms-p-8fe17c","errorCode":null,"errorMessage":"'zone' property at the ${j} index of the 'forms' property cannot be a template literal (e.g. `general`).","messagePattern":"'zone' property at the (.+?) index of the 'forms' property cannot be a template literal \\(e\\.g\\. `general`\\)\\.","errorType":"console","errorClass":null,"httpStatus":null,"severity":"warning","filePath":"packages/admin/admin-vite-plugin/src/custom-fields/generate-custom-field-forms.ts","lineNumber":541,"sourceCode":"        { file }\n      )\n      return\n    }\n\n    const zoneProperty = element.properties.find(\n      (p) => isObjectProperty(p) && isIdentifier(p.key, { name: \"zone\" })\n    ) as ObjectProperty | undefined\n\n    if (!zoneProperty) {\n      logger.warn(\n        `'zone' property is missing from the ${j} index of the 'forms' property.`,\n        { file }\n      )\n      return\n    }\n\n    if (isTemplateLiteral(zoneProperty.value)) {\n      logger.warn(\n        `'zone' property at the ${j} index of the 'forms' property cannot be a template literal (e.g. \\`general\\`).`,\n        { file }\n      )\n      return\n    }\n\n    if (!isStringLiteral(zoneProperty.value)) {\n      logger.warn(\n        `'zone' property at the ${j} index of the 'forms' property is not a string literal (e.g. 'general' or 'attributes').`,\n        { file }\n      )\n      return\n    }\n\n    const zone = zoneProperty.value.value\n    const fullPath = getFormEntryConfigPath(model, zone)\n\n    if (","sourceCodeStart":523,"sourceCodeEnd":559,"githubUrl":"https://github.com/medusajs/medusa/blob/5e06e544a296b9033f20f71f11c559f81a0e5739/packages/admin/admin-vite-plugin/src/custom-fields/generate-custom-field-forms.ts#L523-L559","documentation":"The plugin rejects template literals for 'zone' even though they look like strings, because it requires a StringLiteral AST node for static resolution. If zoneProperty.value is a TemplateLiteral, this warning is emitted and the entry is skipped.","triggerScenarios":"zone: `general` with backticks instead of quotes.","commonSituations":"Prettier/editor auto-converting quotes to backticks, or developers using template literals by habit; the dedicated message exists because `general` superficially looks valid.","solutions":["Change backticks to single or double quotes: zone: 'general'","Disable template-literal formatting for these config files if a tool is rewriting them"],"exampleFix":"// before\nforms: [{ zone: `general`, fields: { ... } }]\n// after\nforms: [{ zone: 'general', fields: { ... } }]","handlingStrategy":"type-guard","validationCode":"// static check: source must use quotes, not backticks\n// runtime sanity:\nif (typeof f.zone !== 'string') throw new Error('zone must be a plain string')","typeGuard":"const isQuotedString = (v: unknown): v is string => typeof v === 'string' && !v.includes('${')","tryCatchPattern":null,"preventionTips":["Use single quotes in config files","Check editor/prettier settings are not converting strings to template literals"],"tags":["admin","custom-fields","template-literal","ast-parsing"],"backgroundTag":"admin-custom-field-form-validation","analyzedSha":"5e06e544a296b9033f20f71f11c559f81a0e5739","analyzedAt":"2026-08-27T07:24:39.599Z","schemaVersion":2},"datasetVersion":"2026-08-27T08:17:20.692Z"}