directus

Форк
0
/
get-default-value.ts 
65 строк · 1.7 Кб
1
import type { Column, SchemaOverview } from '@directus/schema';
2
import type { FieldMeta } from '@directus/types';
3
import { parseJSON } from '@directus/utils';
4
import { getNodeEnv } from '@directus/utils/node';
5
import { useLogger } from '../logger.js';
6
import getLocalType from './get-local-type.js';
7

8
export default function getDefaultValue(
9
	column: SchemaOverview[string]['columns'][string] | Column,
10
	field?: { special?: FieldMeta['special'] },
11
): string | boolean | number | Record<string, any> | any[] | null {
12
	const type = getLocalType(column, field);
13

14
	const defaultValue = column.default_value ?? null;
15
	if (defaultValue === null) return null;
16
	if (defaultValue === '0000-00-00 00:00:00') return null;
17

18
	switch (type) {
19
		case 'bigInteger':
20
		case 'integer':
21
		case 'decimal':
22
		case 'float':
23
			return Number.isNaN(Number(defaultValue)) === false ? Number(defaultValue) : defaultValue;
24
		case 'boolean':
25
			return castToBoolean(defaultValue);
26
		case 'json':
27
			return castToObject(defaultValue);
28
		default:
29
			return defaultValue;
30
	}
31
}
32

33
function castToBoolean(value: any): boolean {
34
	if (typeof value === 'boolean') return value;
35

36
	if (value === 0 || value === '0') return false;
37
	if (value === 1 || value === '1') return true;
38

39
	if (value === 'false' || value === false) return false;
40
	if (value === 'true' || value === true) return true;
41

42
	return Boolean(value);
43
}
44

45
function castToObject(value: any): any | any[] {
46
	const logger = useLogger();
47

48
	if (!value) return value;
49

50
	if (typeof value === 'object') return value;
51

52
	if (typeof value === 'string') {
53
		try {
54
			return parseJSON(value);
55
		} catch (err: any) {
56
			if (getNodeEnv() === 'development') {
57
				logger.error(err);
58
			}
59

60
			return value;
61
		}
62
	}
63

64
	return {};
65
}
66

Использование cookies

Мы используем файлы cookie в соответствии с Политикой конфиденциальности и Политикой использования cookies.

Нажимая кнопку «Принимаю», Вы даете АО «СберТех» согласие на обработку Ваших персональных данных в целях совершенствования нашего веб-сайта и Сервиса GitVerse, а также повышения удобства их использования.

Запретить использование cookies Вы можете самостоятельно в настройках Вашего браузера.