JavaScript (Node.js), 57 bytes
A less interesting version with input validationExpects an array of characters and returns a string.
s=>Buffer(s.flatMap(c=>c=="-"?a--:(a+=c=="+",[]),a=0))+""
JavaScript (Node.js), 49 bytes
Expects an array of characters and returns a string.
s=>Buffer(s.flatMap(c=>a>(a-=c+1)?[]:1-a,a=0))+""
Commented
s => // s[] = input array
Buffer( // turn into a Buffer:
s.flatMap(c => // for each character c in s[]:
a > ( // compare the current value of the accumulator
a -= // with the updated value obtained by subtracting
c + 1 // either +1 or -1, according to c
) ? // if the accumulator was decremented (c = '+'):
[] // force flatMap() to ignore this entry
: // else (c = '-'):
1 - a // return -(accumulator - 1)
// (with implicit modulo 256)
a = 0 // start with accumulator = 0
) // end of flatMap()
) + "" // end of Buffer(); coerce it to a string