Files
jiapuapp/services/api/response-normalizers.js

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')}`
}