_maxminsLimits.mjs

import get from 'lodash-es/get.js'
import each from 'lodash-es/each.js'
import isenum from './isenum.mjs'


//本檔為內部使用, 不由index匯出


/**
 * 檢測maxmins各區間之上下限並取值(arrGroupByMaxmin、arrLookupByMaxmin共用, 單一擁有者)
 *
 * 使用者2026-11-02: 區間上下限屬使用方設定之邊界, 以isenum判定, Infinity、'0x10'、包裝物件等皆為非預期, 表「無上下限」由呼叫端給適當之有限極值;
 * 上下限無效(含未給、null)即throw Error(`invalid maxmins[索引].鍵: must be a valid number`), 訊息不帶輸入值; 設定錯即報錯, 不靜默略過該區間
 *
 * 先檢測全部區間再回傳, 故是否報錯與arr之內容無關; 每個鍵只讀一次, 回傳轉換後之數值(檢測之值即使用之值)
 *
 * @param {Array} maxmins 輸入maxmins陣列(呼叫端已確認為有效陣列)
 * @param {String} keyMax 輸入各區間儲存最大值之欄位字串
 * @param {String} keyMin 輸入各區間儲存最小值之欄位字串
 * @returns {Array} 回傳與maxmins逐位對應之[{ rmax, rmin }],皆為number
 */
function maxminsLimits(maxmins, keyMax, keyMin) {
    let rs = []
    each(maxmins, (mm, kmm) => {

        //rmax
        let rmax = get(mm, keyMax, null)
        if (!isenum(rmax)) {
            throw new Error(`invalid maxmins[${kmm}].${keyMax}: must be a valid number`)
        }

        //rmin
        let rmin = get(mm, keyMin, null)
        if (!isenum(rmin)) {
            throw new Error(`invalid maxmins[${kmm}].${keyMin}: must be a valid number`)
        }

        rs.push({
            rmax: Number(rmax),
            rmin: Number(rmin),
        })
    })
    return rs
}


export default maxminsLimits