{"record":{"id":"8a66449e50afb45d","repo":"lovell/sharp","slug":"invalid-input-options-inputoptions","errorCode":null,"errorMessage":"Invalid input options ${inputOptions}","messagePattern":"Invalid input options (.+?)","errorType":"exception","errorClass":"Error","httpStatus":null,"severity":"error","filePath":"lib/input.mjs","lineNumber":519,"sourceCode":"          if (is.string(inputOptions.join.halign) && is.string(this.constructor.align[inputOptions.join.halign])) {\n            inputDescriptor.joinHalign = this.constructor.align[inputOptions.join.halign];\n          } else {\n            throw is.invalidParameterError('join.halign', 'valid alignment', inputOptions.join.halign);\n          }\n        }\n        if (is.defined(inputOptions.join.valign)) {\n          if (is.string(inputOptions.join.valign) && is.string(this.constructor.align[inputOptions.join.valign])) {\n            inputDescriptor.joinValign = this.constructor.align[inputOptions.join.valign];\n          } else {\n            throw is.invalidParameterError('join.valign', 'valid alignment', inputOptions.join.valign);\n          }\n        }\n      } else {\n        throw new Error('Expected input to be an array of images to join');\n      }\n    }\n  } else if (is.defined(inputOptions)) {\n    throw new Error(`Invalid input options ${inputOptions}`);\n  }\n  return inputDescriptor;\n}\n\n/**\n * Handle incoming Buffer chunk on Writable Stream.\n * @private\n * @param {Buffer} chunk\n * @param {string} encoding - unused\n * @param {Function} callback\n */\nfunction _write (chunk, _encoding, callback) {\n  if (Array.isArray(this.options.input.buffer)) {\n    if (is.buffer(chunk)) {\n      if (this.options.input.buffer.length === 0) {\n        this.on('finish', () => {\n          this.streamInFinished = true;\n        });","sourceCodeStart":501,"sourceCodeEnd":537,"githubUrl":"https://github.com/lovell/sharp/blob/56676c69180a32b468123e090f87bfee30539b49/lib/input.mjs#L501-L537","documentation":"Thrown when inputOptions is defined (not undefined) but is not an object. Sharp's input options must be a plain object; passing a number, string, array, boolean, or null as the second argument is rejected at the end of the descriptor builder. The message interpolates the offending value for visibility.","triggerScenarios":"sharp(input, 72) (passing a dpi number directly), sharp(input, 'png'), sharp(input, ['raw']), sharp(input, null). Mis-counting arguments so a non-options value lands in the options slot.","commonSituations":"Confusing sharp's options-object API with positional APIs from other libraries. Passing a partial value intending it to be a key inside options (e.g., raw density number instead of { density }). Argument-order mistakes after refactors.","solutions":["Pass options as a plain object: sharp(input, { density: 72 }).","Double-check argument order: input first, options object second.","If you have no options, omit the second argument entirely rather than passing null."],"exampleFix":"// before\nsharp(input, 72)\n\n// after\nsharp(input, { density: 72 })","handlingStrategy":"type-guard","validationCode":"function sharpWithOptions(input, options) {\n  if (options !== undefined && (options === null || typeof options !== 'object' || Array.isArray(options))) {\n    throw new Error(`input options must be a plain object, got ${typeof options}`);\n  }\n  return sharp(input, options);\n}","typeGuard":"function isPlainOptionsObject(v) {\n  return v === undefined || (v !== null && typeof v === 'object' && !Array.isArray(v));\n}","tryCatchPattern":null,"preventionTips":["Pass options as a plain object only.","Keep input first, options object second.","Omit the second argument rather than passing null when there are no options."],"tags":["input","options","validation","type-mismatch"],"backgroundTag":null,"analyzedSha":"56676c69180a32b468123e090f87bfee30539b49","analyzedAt":"2026-08-13T04:44:31.201Z","schemaVersion":2},"datasetVersion":"2026-08-13T09:17:06.757Z"}