function writableStreamOnly()

in src/ResponseStream.js [36:117]


function writableStreamOnly(inner) {
  const fns = [
    // stream.Writable
    'cork',
    'destroy',
    'end',
    'uncork',
    'write',

    // EventEmitter
    'addListener',
    'emit',
    'eventNames',
    'getMaxListeners',
    'listenerCount',
    'listeners',
    'off',
    'on',
    'once',
    'prependListener',
    'prependOnceListener',
    'rawListeners',
    'removeAllListeners',
    'removeListener',
    'setMaxListeners',

    // AWS
    'setContentType',
  ];

  const propsReadWrite = ['destroyed', 'writable', '_onBeforeFirstWrite'];

  const propsReadOnly = [
    'writableFinished',
    'writableObjectMode',
    'writableBuffer',
    'writableEnded',
    'writableNeedDrain',
    'writableHighWaterMark',
    'writableCorked',
    'writableLength',
  ];

  const stream = Object.fromEntries(
    fns.map((fn) => {
      return [fn, inner[fn].bind(inner)];
    }),
  );

  Object.defineProperties(
    stream,
    Object.fromEntries(
      propsReadWrite.map((prop) => [
        prop,
        {
          get() {
            return inner[prop];
          },
          set(value) {
            inner[prop] = value;
          },
        },
      ]),
    ),
  );

  Object.defineProperties(
    stream,
    Object.fromEntries(
      propsReadOnly.map((prop) => [
        prop,
        {
          get() {
            return inner[prop];
          },
        },
      ]),
    ),
  );

  return stream;
}