_errToStr.mjs

/**
 * 錯誤值轉字串且保證不拋錯,內部共用不對外
 *
 * 一般Error同其toString('名稱: 訊息'),拋出之值為null、undefined時為'null'、'undefined';無法轉字串者(無原型物件、已撤銷之Proxy、toString會拋錯者)退取字串message,仍無則為'unknown error'
 *
 * 使用端: catch內須把呼叫端可能拋出之任意值轉為字串者(try內會執行呼叫端之toJSON、getter、Proxy陷阱、回調或注入之fs等),如o2j、obj2str、obj2stru8arr
 *
 * 刻意不匯入任何模組(含getErrorMessage): 本模組供基礎轉換函數(含cint等被getErrorMessage匯入者)使用, 有匯入即可能形成循環匯入
 *
 * @param {*} err 輸入錯誤值
 * @returns {String} 回傳字串
 */
function errToStr(err) {
    try {
        return String(err)
    }
    catch (e) {}
    try {
        let m = err.message
        if (typeof m === 'string' && m !== '') {
            return m
        }
    }
    catch (e) {}
    return 'unknown error'
}


export default errToStr