web: add info/cause support to BackwardCompatibleError (OError-compatible) (#33766)

GitOrigin-RevId: 736ca3245f85f14df5a01e5c4a342b99742118e8
This commit is contained in:
Copilot
2026-05-27 17:13:49 +02:00
committed by Copybot
parent 9daa56becc
commit 016296cc07
2 changed files with 61 additions and 7 deletions
+16 -7
View File
@@ -6,16 +6,25 @@ const settings = require('@overleaf/settings')
// of object)
class BackwardCompatibleError extends OError {
/**
* @param {string | { message: string, info?: Object }} messageOrOptions
* @param {string | { message?: string, info?: Object, cause?: unknown }} messageOrOptions
* @param {Object} [info]
* @param {unknown} [cause]
*/
constructor(messageOrOptions) {
constructor(messageOrOptions, info, cause) {
if (typeof messageOrOptions === 'string') {
super(messageOrOptions)
} else if (messageOrOptions) {
const { message, info } = messageOrOptions
super(message, info)
super(messageOrOptions, info, cause)
} else if (
typeof messageOrOptions === 'object' &&
messageOrOptions !== null
) {
const {
message,
info: optionsInfo,
cause: optionsCause,
} = messageOrOptions
super(message, optionsInfo, optionsCause)
} else {
super()
super(undefined, info, cause)
}
}
}
@@ -0,0 +1,45 @@
import { describe, it, expect } from 'vitest'
import Errors from '../../../../app/src/Features/Errors/Errors.js'
describe('BackwardCompatibleError', function () {
it('supports OError signature with info and cause', function () {
const cause = new Error('root cause')
const error = new Errors.BackwardCompatibleError(
'message',
{ key: 'value' },
cause
)
expect(error).to.be.instanceOf(Error)
expect(error).to.be.instanceOf(Errors.BackwardCompatibleError)
expect(error.message).to.equal('message')
expect(error.info).to.eql({ key: 'value' })
expect(error.cause).to.equal(cause)
})
it('supports object options signature including cause', function () {
const cause = new Error('root cause')
const error = new Errors.BackwardCompatibleError({
message: 'message',
info: { key: 'value' },
cause,
})
expect(error.message).to.equal('message')
expect(error.info).to.eql({ key: 'value' })
expect(error.cause).to.equal(cause)
})
it('handles null message values', function () {
const cause = new Error('root cause')
const error = new Errors.BackwardCompatibleError(
null,
{ key: 'value' },
cause
)
expect(error.message).to.equal('')
expect(error.info).to.eql({ key: 'value' })
expect(error.cause).to.equal(cause)
})
})