'How to simultaneously validate a single object AND an array of single objects using OW?

I'm using the OW library to to validate incoming json objects. Currently, it can validate a single transaction object with this snippet below but how can I validate a single AND multiples of a single object in an array at the same time?

    // ... like this
    // ... both should be validated
    {
       transaction: 1,
       transaction: [1,1]
    }

Successfully validates a single object

    ow(event, 'websocket-event', validEvent()) // triggers the validation

    const validEvent = ow.optional.object.exactShape({
      //.... 
      transaction: ow.optional.object.exactShape({
        id: ow.optional.string,
        hash: ow.optional.string.is(validTxHash),
        txid: ow.optional.string.is(validTxid),
        startTime: ow.optional.number.is(wholePosNum),
        status: ow.optional.string,
        gas: ow.any(ow.optional.string.is(wholePosNum), ow.optional.number),
        gasPrice: ow.any(ow.optional.string.is(wholePosNum), ow.optional.number),
        value: ow.any(ow.optional.string.is(wholePosNum), ow.optional.number),
        input: ow.optional.string,
        to: ow.optional.string.is(validAddress),
        from: ow.optional.string.is(validAddress),
        originalHash: ow.optional.string.is(validTxHash)
      })
      //....
    })

But how can OW validate if the transaction object is an ARRAY of transaction objects? So far I have tried ow.any but that didn't work. There are not a lot of real world examples of OW being used :(

Not working: not validating an array of objects

    transaction: ow.any(
        ow.optional.transactionPredicate, // check the single case
        ow.optional.array.is(transactionPredicate) // check the multi case (likely incorrect)
    )

OW Library: https://www.npmjs.com/package/ow



Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source