{"record":{"id":"e85514348b7ba377","repo":"remix-run/remix","slug":"files-globaltransforms-must-be-an-array","errorCode":null,"errorMessage":"files.globalTransforms must be an array","messagePattern":"files\\.globalTransforms must be an array","errorType":"validation","errorClass":"TypeError","httpStatus":null,"severity":"error","filePath":"packages/assets/src/lib/files/config.ts","lineNumber":258,"sourceCode":"      transform.param !== undefined &&\n      transform.param !== true &&\n      transform.param !== 'optional'\n    ) {\n      throw new TypeError(`files.transforms.${name}.param must be true or \"optional\"`)\n    }\n\n    normalizedTransforms.set(name, {\n      ...transform,\n      extensions: normalizeTransformExtensions(\n        transform.extensions,\n        `files.transforms.${name}.extensions`,\n      ),\n    })\n  }\n\n  let globalTransforms = files.globalTransforms ?? []\n  if (!Array.isArray(globalTransforms)) {\n    throw new TypeError('files.globalTransforms must be an array')\n  }\n\n  let normalizedGlobalTransforms: ResolvedAssetGlobalTransform[] = []\n\n  for (let [index, transform] of globalTransforms.entries()) {\n    if (typeof transform === 'function') {\n      normalizedGlobalTransforms.push({ transform })\n      continue\n    }\n\n    if (transform === null || typeof transform !== 'object') {\n      throw new TypeError(`files.globalTransforms[${index}] must be a function or object`)\n    }\n\n    if ('name' in transform && transform.name !== undefined && typeof transform.name !== 'string') {\n      throw new TypeError(`files.globalTransforms[${index}].name must be a string`)\n    }\n","sourceCodeStart":240,"sourceCodeEnd":276,"githubUrl":"https://github.com/remix-run/remix/blob/9696913134be3a4423513d2775f7b31d6917c049/packages/assets/src/lib/files/config.ts#L240-L276","documentation":"`files.globalTransforms` must be an array of transform functions or transform-definition objects applied to all matching files. This error fires when it is set to a non-array value such as a single function, an object, or a string.","triggerScenarios":"Passing `globalTransforms: fn` (a bare function), an object map, or other non-array value under `files`.","commonSituations":"Confusing the array-based `globalTransforms` with the map-based `transforms`; passing a single transform without wrapping it in an array.","solutions":["Wrap in an array: `globalTransforms: [fn]`","For named, URL-addressable transforms use the `files.transforms` object map instead"],"exampleFix":"// before\nfiles: { globalTransforms: minify }\n// after\nfiles: { globalTransforms: [minify] }","handlingStrategy":"type-guard","validationCode":"if (files.globalTransforms !== undefined && !Array.isArray(files.globalTransforms)) {\n  throw new Error('files.globalTransforms must be an array')\n}","typeGuard":"function isGlobalTransformList(v: unknown): v is unknown[] {\n  return Array.isArray(v)\n}","tryCatchPattern":null,"preventionTips":["Single transform? Wrap it: [fn]","Keep transforms vs globalTransforms shapes straight with a typed config interface"],"tags":["config","files","transforms","validation"],"backgroundTag":"config-type-validation","analyzedSha":"9696913134be3a4423513d2775f7b31d6917c049","analyzedAt":"2026-08-27T19:55:01.024Z","schemaVersion":2},"datasetVersion":"2026-08-28T00:17:15.603Z"}