feat: expand backend admin marketplace and scaling
فشلت بعض الفحوصات
/ deploy (push) Failing after 1m22s

هذا الالتزام موجود في:
2026-05-14 16:17:12 +03:00
الأصل 0e76a4a9fc
التزام 5bd5e19a89
158 ملفات معدلة مع 19563 إضافات و3315 حذوفات

عرض الملف

@@ -0,0 +1,69 @@
import { TransformFnParams } from 'class-transformer';
const parseArrayInput = (value: unknown): unknown[] | unknown | undefined => {
if (value === undefined || value === null) {
return undefined;
}
if (Array.isArray(value)) {
return value.flatMap((item) => {
const parsed = parseArrayInput(item);
if (typeof parsed === 'undefined') {
return [];
}
return Array.isArray(parsed) ? parsed : [parsed];
});
}
if (typeof value !== 'string') {
return value;
}
const trimmed = value.trim();
if (!trimmed) {
return undefined;
}
if (trimmed.startsWith('[') && trimmed.endsWith(']')) {
try {
return parseArrayInput(JSON.parse(trimmed));
} catch {
return [trimmed];
}
}
if (trimmed.includes(',')) {
return trimmed
.split(',')
.map((part) => part.trim())
.filter(Boolean);
}
return [trimmed];
};
export const toStringArray = ({ value }: TransformFnParams): string[] | unknown | undefined => {
const parsed = parseArrayInput(value);
if (typeof parsed === 'undefined') {
return undefined;
}
if (!Array.isArray(parsed)) {
return parsed;
}
return parsed.map((item) => String(item).trim()).filter(Boolean);
};
export const toNumberArray = ({ value }: TransformFnParams): number[] | unknown | undefined => {
const parsed = parseArrayInput(value);
if (typeof parsed === 'undefined') {
return undefined;
}
if (!Array.isArray(parsed)) {
return parsed;
}
return parsed.map((item) => Number(item));
};