{"record":{"id":"0e3f5f3c4a97ee3b","repo":"remix-run/remix","slug":"file-transform-not-supported","errorCode":"FILE_TRANSFORM_NOT_SUPPORTED","errorMessage":"File transform \"${requestTransform.name}\" does not support ${currentExtension} inputs for ${filePath}","messagePattern":"File transform \"(.+?)\" does not support (.+?) inputs for (.+?)","errorType":"exception","errorClass":"AssetServerCompilationError","httpStatus":null,"severity":"error","filePath":"packages/assets/src/lib/files/compiler.ts","lineNumber":380,"sourceCode":"    filePath: string,\n    source: EmittedFile,\n    transforms: readonly ParsedRequestTransform[],\n  ): Promise<{ body: Uint8Array; extension: string } | null> {\n    let currentBody = source.body\n    let currentExtension = source.extension\n    let appliedTransform = false\n\n    for (let requestTransform of transforms) {\n      let transform = resolvedOptions.transforms.get(requestTransform.name)\n      if (transform === undefined) {\n        throw createAssetServerCompilationError(\n          `Unknown file transform \"${requestTransform.name}\" requested for ${filePath}`,\n          { code: 'FILE_TRANSFORM_QUERY_INVALID' },\n        )\n      }\n\n      if (!supportsTransformExtension(transform.extensions, currentExtension)) {\n        throw createAssetServerCompilationError(\n          `File transform \"${requestTransform.name}\" does not support ${currentExtension} inputs for ${filePath}`,\n          { code: 'FILE_TRANSFORM_NOT_SUPPORTED' },\n        )\n      }\n\n      let result: unknown\n      let transformSubject: FileTransformSubject = {\n        kind: 'request',\n        name: requestTransform.name,\n      }\n      try {\n        result = await transform.transform(currentBody, {\n          extension: currentExtension,\n          filePath,\n          param: requestTransform.param,\n        })\n      } catch (error) {\n        throw toFileTransformFailedError(error, filePath, transformSubject)","sourceCodeStart":362,"sourceCodeEnd":398,"githubUrl":"https://github.com/remix-run/remix/blob/9696913134be3a4423513d2775f7b31d6917c049/packages/assets/src/lib/files/compiler.ts#L362-L398","documentation":"A requested transform exists, but its declared supported input extensions don't include the current file's extension, so the compiler throws FILE_TRANSFORM_NOT_SUPPORTED. After each transform the current extension may change, so later transforms are validated against the intermediate extension.","triggerScenarios":"Applying e.g. a sass transform to a .css file, or chaining transforms where the first changes the extension to one the next transform doesn't accept (e.g. ts→js followed by a ts-only transform).","commonSituations":"Mismatched transform chains in config; applying a preprocessor transform to already-compiled output; changing a file's extension without updating transform config.","solutions":["Match transform names to the actual source extension of the file","Reorder or trim transform chains so each transform's input extension matches the file at that stage","Rename the file to the extension the transform expects (e.g. .scss)"],"exampleFix":"// before\nhref=\"/styles.css?transform=sass\"\n// after\nhref=\"/styles.scss?transform=sass\"","handlingStrategy":"validation","validationCode":"const supported = transformExtensions.has(currentExtension)\nif (!supported) useDifferentTransformOrFile()","typeGuard":"const extensionSupported = (ext: string, supported: readonly string[]) => supported.includes(ext)","tryCatchPattern":"try { applyTransforms(file, transforms) } catch (e) { if (e.code === 'FILE_TRANSFORM_NOT_SUPPORTED') retryWithoutTransform() else throw e }","preventionTips":["Match each transform to the source file's real extension","Verify transform chains stage-by-stage since extensions change mid-chain"],"tags":["assets","transform","extension","configuration"],"backgroundTag":"unsupported-file-transform","analyzedSha":"9696913134be3a4423513d2775f7b31d6917c049","analyzedAt":"2026-08-27T19:55:01.024Z","schemaVersion":2},"datasetVersion":"2026-08-28T00:17:15.603Z"}