◆ 関数順番に通す処理するなら関数合成

const compose=(...f)=>x=>f.reduce((a,b)=>b.apply(null,[a]),x)

function a(opt, input){/* */}
function b(opt, input){/* */}
function c(opt, input){/* */}
function d(opt, input){/* */}

compose(
a.bind(null, {a: true})
b.bind(null, {b: false})
c.bind(null, {c: 13})
d.bind(null, {d: "d"})
)("input")

実行サンプル

function a(opt, input){return Object.assign(input, opt)}
function b(opt, input){return Object.assign(input, opt)}
function c(opt, input){return Object.assign(input, opt)}
function d(opt, input){return Object.assign(input, opt)}

compose(
a.bind(null, {a: true}),
b.bind(null, {b: false}),
c.bind(null, {c: 13}),
d.bind(null, {d: "d"})
)({z: 99})
{
  a: true
  b: false
  c: 13
  d: "d"
  z: 99
}