Files
supabase/studio/components/interfaces/TableGridEditor/SidePanelEditor/SidePanelEditor.constants.ts
2023-02-02 14:00:44 +08:00

129 lines
3.1 KiB
TypeScript

import { sortBy, concat } from 'lodash'
import { PostgresDataTypeOption } from './SidePanelEditor.types'
export const DATE_FORMAT = 'YYYY-MM-DDTHH:mm:ssZ'
export const NUMERICAL_TYPES = ['int2', 'int4', 'int8', 'float4', 'float8', 'numeric']
export const JSON_TYPES = ['json', 'jsonb']
export const TEXT_TYPES = ['text', 'varchar']
export const TIMESTAMP_TYPES = ['timestamp', 'timestamptz']
export const DATE_TYPES = ['date']
export const TIME_TYPES = ['time', 'timetz']
export const DATETIME_TYPES = concat(TIMESTAMP_TYPES, DATE_TYPES, TIME_TYPES)
export const OTHER_DATA_TYPES = ['uuid', 'bool']
export const POSTGRES_DATA_TYPES = sortBy(
concat(NUMERICAL_TYPES, JSON_TYPES, TEXT_TYPES, DATETIME_TYPES, OTHER_DATA_TYPES)
)
export const RECOMMENDED_ALTERNATIVE_DATA_TYPE: {
[key: string]: { alternative: string; reference: string }
} = {
varchar: {
alternative: 'text',
reference:
"https://wiki.postgresql.org/wiki/Don't_Do_This#Don.27t_use_varchar.28n.29_by_default",
},
json: {
alternative: 'jsonb',
reference: 'https://www.postgresql.org/docs/current/datatype-json.html',
},
timetz: {
alternative: 'timestamptz',
reference: "https://wiki.postgresql.org/wiki/Don't_Do_This#Don.27t_use_timetz",
},
timestamp: {
alternative: 'timestamptz',
reference:
"https://wiki.postgresql.org/wiki/Don't_Do_This#Don.27t_use_timestamp_.28without_time_zone.29",
},
}
export const POSTGRES_DATA_TYPE_OPTIONS: PostgresDataTypeOption[] = [
{
name: 'int2',
description: 'Signed two-byte integer',
type: 'number',
},
{
name: 'int4',
description: 'Signed four-byte integer',
type: 'number',
},
{
name: 'int8',
description: 'Signed eight-byte integer',
type: 'number',
},
{
name: 'float4',
description: 'Single precision floating-point number (4 bytes)',
type: 'number',
},
{
name: 'float8',
description: 'Double precision floating-point number (8 bytes)',
type: 'number',
},
{
name: 'numeric',
description: 'Exact numeric of selectable precision',
type: 'number',
},
{
name: 'json',
description: 'Textual JSON data',
type: 'json',
},
{
name: 'jsonb',
description: 'Binary JSON data, decomposed',
type: 'json',
},
{
name: 'text',
description: 'Variable-length character string',
type: 'text',
},
{
name: 'varchar',
description: 'Variable-length character string',
type: 'text',
},
{
name: 'uuid',
description: 'Universally unique identifier',
type: 'text',
},
{
name: 'date',
description: 'Calendar date (year, month, day)',
type: 'time',
},
{
name: 'time',
description: 'Time of day (no time zone)',
type: 'time',
},
{
name: 'timetz',
description: 'Time of day, including time zone',
type: 'time',
},
{
name: 'timestamp',
description: 'Date and time (no time zone)',
type: 'time',
},
{
name: 'timestamptz',
description: 'Date and time, including time zone',
type: 'time',
},
{
name: 'bool',
description: 'Logical boolean (true/false)',
type: 'bool',
},
]