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';
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);
14
const defaultValue = column.default_value ?? null;
15
if (defaultValue === null) return null;
16
if (defaultValue === '0000-00-00 00:00:00') return null;
23
return Number.isNaN(Number(defaultValue)) === false ? Number(defaultValue) : defaultValue;
25
return castToBoolean(defaultValue);
27
return castToObject(defaultValue);
33
function castToBoolean(value: any): boolean {
34
if (typeof value === 'boolean') return value;
36
if (value === 0 || value === '0') return false;
37
if (value === 1 || value === '1') return true;
39
if (value === 'false' || value === false) return false;
40
if (value === 'true' || value === true) return true;
42
return Boolean(value);
45
function castToObject(value: any): any | any[] {
46
const logger = useLogger();
48
if (!value) return value;
50
if (typeof value === 'object') return value;
52
if (typeof value === 'string') {
54
return parseJSON(value);
56
if (getNodeEnv() === 'development') {