58 lines
2.1 KiB
JavaScript
58 lines
2.1 KiB
JavaScript
import { createRequestError } from './request-client.js'
|
|
import { isNormalDisableStatus } from './normal-disable-status.js'
|
|
|
|
export const normalizeOptionalNumericId = (value, label, code) => {
|
|
if (value === undefined || value === null || value === '') return null
|
|
if (typeof value === 'string' && /^[1-9]\d*$/.test(value)) return value
|
|
if (typeof value === 'number' && Number.isSafeInteger(value) && value > 0) return String(value)
|
|
throw createRequestError(`${label}无效`, code)
|
|
}
|
|
|
|
export const normalizeResponseText = (
|
|
value,
|
|
label,
|
|
{ code = 'API_RESPONSE_INVALID', subject = '接口响应' } = {}
|
|
) => {
|
|
if (value === undefined || value === null) return ''
|
|
if (typeof value !== 'string') {
|
|
throw createRequestError(`${subject}字段 ${label} 无效`, code)
|
|
}
|
|
return value.trim()
|
|
}
|
|
|
|
export const normalizeOptionalResponseText = (value, field, label, code) => {
|
|
if (value === undefined || value === null) return ''
|
|
if (typeof value !== 'string') {
|
|
throw createRequestError(`${label}字段 ${field} 无效`, code)
|
|
}
|
|
return value.trim()
|
|
}
|
|
|
|
export const normalizeNormalDisableResponseStatus = (value, label, code) => {
|
|
const status = normalizeResponseText(value, label, { code })
|
|
if (!status) return ''
|
|
if (!isNormalDisableStatus(status)) {
|
|
throw createRequestError(`${label}无效`, code)
|
|
}
|
|
return status
|
|
}
|
|
|
|
export const normalizeOptionalNonnegativeInteger = (value, label, code) => {
|
|
if (value === undefined || value === null) return 0
|
|
if (!Number.isSafeInteger(value) || value < 0) {
|
|
throw createRequestError(`${label}无效`, code)
|
|
}
|
|
return value
|
|
}
|
|
|
|
export const normalizeOptionalCurrencyAmount = (value, label, code, { required = false } = {}) => {
|
|
if (value === undefined || value === null || value === '') {
|
|
if (required) throw createRequestError(`${label}缺失`, code)
|
|
return ''
|
|
}
|
|
if (typeof value !== 'string') throw createRequestError(`${label}无效`, code)
|
|
const match = value.trim().match(/^(0|[1-9]\d*)(?:\.(\d{1,2}))?$/)
|
|
if (!match) throw createRequestError(`${label}无效`, code)
|
|
return `${match[1]}.${(match[2] || '').padEnd(2, '0')}`
|
|
}
|