Convert to object default json value (#8041)

* convert to object default json value

* return same value if falsy or parse fail
This commit is contained in:
José Varela
2021-09-29 00:16:30 +01:00
committed by GitHub
parent d082836e0a
commit 1ff3adbb46

View File

@@ -1,10 +1,12 @@
import { SchemaOverview } from '@directus/schema/dist/types/overview';
import { Column } from 'knex-schema-inspector/dist/types/column';
import getLocalType from './get-local-type';
import logger from '../logger';
import env from '../env';
export default function getDefaultValue(
column: SchemaOverview[string]['columns'][string] | Column
): string | boolean | null {
): string | boolean | number | Record<string, any> | any[] | null {
const { type } = getLocalType(column);
let defaultValue = column.default_value ?? null;
@@ -29,6 +31,8 @@ export default function getDefaultValue(
return Number.isNaN(Number(defaultValue)) === false ? Number(defaultValue) : defaultValue;
case 'boolean':
return castToBoolean(defaultValue);
case 'json':
return castToObject(defaultValue);
default:
return defaultValue;
}
@@ -45,3 +49,23 @@ function castToBoolean(value: any): boolean {
return Boolean(value);
}
function castToObject(value: any): any | any[] {
if (!value) return value;
if (typeof value === 'object') return value;
if (typeof value === 'string') {
try {
return JSON.parse(value);
} catch (err: any) {
if (env.NODE_ENV === 'development') {
logger.error(err);
}
return value;
}
}
return {};
}