67 lines
2.7 KiB
JavaScript
67 lines
2.7 KiB
JavaScript
import { createRequestError } from './request-client.js'
|
|
import {
|
|
normalizeOptionalNonnegativeInteger,
|
|
normalizeOptionalNumericId
|
|
} from './response-normalizers.js'
|
|
|
|
export const normalizeResourceCapabilities = (value, label, code) => {
|
|
const capabilities = {}
|
|
for (const field of ['canEdit', 'canDelete']) {
|
|
if (value[field] !== undefined && typeof value[field] !== 'boolean') {
|
|
throw createRequestError(`${label}权限字段 ${field} 无效`, code)
|
|
}
|
|
capabilities[field] = value[field] === true
|
|
}
|
|
return capabilities
|
|
}
|
|
|
|
export const normalizeContentProtectionCapabilities = (value, label, code) => {
|
|
const capabilities = {}
|
|
for (const field of ['contentProtected', 'contentUnlocked', 'canManageProtection']) {
|
|
if (value[field] !== undefined && typeof value[field] !== 'boolean') {
|
|
throw createRequestError(`${label}内容保护字段 ${field} 无效`, code)
|
|
}
|
|
capabilities[field] = value[field] === true
|
|
}
|
|
return capabilities
|
|
}
|
|
|
|
export const normalizeBusinessFileAccess = (value, label, code, { required = false } = {}) => {
|
|
if (value === undefined || value === null) {
|
|
if (required) throw createRequestError(`${label}缺失`, code)
|
|
return null
|
|
}
|
|
if (!value || typeof value !== 'object' || Array.isArray(value)) {
|
|
throw createRequestError(`${label}无效`, code)
|
|
}
|
|
const fileId = normalizeOptionalNumericId(value.fileId, `${label}文件标识`, code)
|
|
const ossId = normalizeOptionalNumericId(value.ossId, `${label}存储标识`, code)
|
|
if (!fileId || !ossId) throw createRequestError(`${label}缺少文件标识`, code)
|
|
const normalizeText = (field) => {
|
|
const fieldValue = value[field]
|
|
if (fieldValue === undefined || fieldValue === null) return ''
|
|
if (typeof fieldValue !== 'string') throw createRequestError(`${label}${field}无效`, code)
|
|
return fieldValue.trim()
|
|
}
|
|
const accessUrl = normalizeText('accessUrl')
|
|
if (required && !accessUrl) throw createRequestError(`${label}缺少授权访问地址`, code)
|
|
if (accessUrl && !/^https:\/\/[^\s]+$/.test(accessUrl)) {
|
|
throw createRequestError(`${label}授权访问地址必须使用 HTTPS`, code)
|
|
}
|
|
return {
|
|
fileId,
|
|
ossId,
|
|
fileName: normalizeText('fileName'),
|
|
mediaType: normalizeText('mediaType'),
|
|
fileSize: normalizeOptionalNonnegativeInteger(value.fileSize, `${label}文件大小`, code),
|
|
accessUrl,
|
|
expiresAt: normalizeText('expiresAt')
|
|
}
|
|
}
|
|
|
|
export const normalizeBusinessFileAccessRows = (value, label, code) => {
|
|
if (value === undefined || value === null) return []
|
|
if (!Array.isArray(value)) throw createRequestError(`${label}不是列表`, code)
|
|
return value.map((item) => normalizeBusinessFileAccess(item, label, code, { required: true }))
|
|
}
|