{"record":{"id":"234df0970d37ce85","repo":"gohugoio/hugo","slug":"unsupported-target-v","errorCode":null,"errorMessage":"unsupported target: %v","messagePattern":"unsupported target: (.+?)","errorType":"validation","errorClass":null,"httpStatus":null,"severity":"error","filePath":"internal/js/esbuild/options.go","lineNumber":296,"sourceCode":"\n\tvar engines []api.Engine\n\nOUTER:\n\tfor _, value := range opts.Target {\n\t\tfor _, engine := range engineKeysSorted {\n\t\t\tif strings.HasPrefix(value, engine) {\n\t\t\t\tversion := value[len(engine):]\n\t\t\t\tif version == \"\" {\n\t\t\t\t\treturn fmt.Errorf(\"invalid engine version: %q\", value)\n\t\t\t\t}\n\t\t\t\tengines = append(engines, api.Engine{Name: engineName[engine], Version: version})\n\t\t\t\tcontinue OUTER\n\t\t\t}\n\t\t}\n\t}\n\n\tif target == 0 && len(engines) == 0 && len(opts.Target) > 0 {\n\t\treturn fmt.Errorf(\"unsupported target: %v\", opts.Target)\n\t}\n\n\tif target == 0 {\n\t\ttarget = api.ESNext\n\t}\n\n\tvar loaders map[string]api.Loader\n\tif opts.IsCSS {\n\t\tloaders = make(map[string]api.Loader)\n\t\t// Add default CSS file loaders.\n\t\t// May be overridden by opts.Loaders.\n\t\tmaps.Copy(loaders, extensionToLoaderMapCSS)\n\t}\n\tif opts.Loaders != nil {\n\t\tif loaders == nil {\n\t\t\tloaders = make(map[string]api.Loader)\n\t\t}\n","sourceCodeStart":278,"sourceCodeEnd":314,"githubUrl":"https://github.com/gohugoio/hugo/blob/52c9bd7908b4d02d4d0ff8f82a888834d6ee10d2/internal/js/esbuild/options.go#L278-L314","documentation":"Thrown when the Target slice is non-empty but none of its values match either a known ES language version (es5, esnext, etc.) nor any known engine prefix. The result is a wholly unrecognized target list.","triggerScenarios":"Setting Target to [\"web\"], [\"modern\"], or any string not present in nameTarget and not starting with a known engine name.","commonSituations":"User invents target names like \"modern\" or \"legacy\"; typo like es2200; expects case-variants (DecodeExternalOptions lowercases Target, but a value with no lowercase mapping like \"MODERN\" still won't resolve).","solutions":["Use only supported values: es5, es6/es2015, es2016 through es2024, esnext, or <engine><version> (e.g. chrome80)."],"exampleFix":"// before\n{{ $opts := dict \"targets\" (slice \"modern\") }}\n\n// after\n{{ $opts := dict \"targets\" (slice \"es2020\") }}","handlingStrategy":"validation","validationCode":"allowed := map[string]bool{\"es5\": true, \"es6\": true, \"es2015\": true, \"es2016\": true, \"es2017\": true, \"es2018\": true, \"es2019\": true, \"es2020\": true, \"es2021\": true, \"es2022\": true, \"es2023\": true, \"es2024\": true, \"esnext\": true, \"\": true}\nengineRe := regexp.MustCompile(`^(chrome|deno|edge|firefox|hermes|ie|ios|node|opera|rhino|safari)\\d+$`)\nfor _, t := range opts.Target {\n    if !allowed[t] && !engineRe.MatchString(t) {\n        return fmt.Errorf(\"unsupported target: %q\", t)\n    }\n}","typeGuard":null,"tryCatchPattern":null,"preventionTips":["Maintain a whitelist of accepted target strings in your config layer.","Lowercase Target values before validation (Hugo does this internally).","Reject unknown targets at config load rather than at build time."],"tags":["esbuild","options","target","validation"],"backgroundTag":null,"analyzedSha":"52c9bd7908b4d02d4d0ff8f82a888834d6ee10d2","analyzedAt":"2026-08-09T21:49:36.660Z","contentChangedAt":null,"schemaVersion":2},"datasetVersion":"2026-09-23T08:17:48.524Z"}