UNPKG

@directus/api

Version:

Directus is a real-time API and App dashboard for managing SQL database content

93 lines (92 loc) 2.88 kB
import { pick } from 'lodash-es'; /** * Pick certain database vendor specific collection properties that should be compared when performing diff * * @param collection collection to sanitize * @returns sanitized collection */ export function sanitizeCollection(collection) { return pick(collection, ['collection', 'fields', 'meta', 'schema.name']); } /** * Pick certain database vendor specific field properties that should be compared when performing diff * * @param field field to sanitize * @param sanitizeAllSchema Whether or not the whole field schema should be sanitized. Mainly used to prevent modifying autoincrement fields * @returns sanitized field */ export function sanitizeField(field, sanitizeAllSchema = false) { const defaultPaths = ['collection', 'field', 'type', 'meta', 'name', 'children']; const pickedPaths = sanitizeAllSchema ? defaultPaths : [ ...defaultPaths, 'schema.name', 'schema.table', 'schema.data_type', 'schema.default_value', 'schema.max_length', 'schema.numeric_precision', 'schema.numeric_scale', 'schema.is_nullable', 'schema.is_unique', 'schema.is_indexed', 'schema.is_primary_key', 'schema.is_generated', 'schema.generation_expression', 'schema.has_auto_increment', 'schema.foreign_key_table', 'schema.foreign_key_column', ]; return pick(field, pickedPaths); } export function sanitizeColumn(column) { return pick(column, [ 'name', 'table', 'data_type', 'default_value', 'max_length', 'numeric_precision', 'numeric_scale', 'is_nullable', 'is_unique', 'is_indexed', 'is_primary_key', 'is_generated', 'generation_expression', 'has_auto_increment', 'foreign_key_table', 'foreign_key_column', ]); } /** * Pick certain database vendor specific relation properties that should be compared when performing diff * * @param relation relation to sanitize * @returns sanitized relation */ export function sanitizeRelation(relation) { return pick(relation, [ 'collection', 'field', 'related_collection', 'meta', 'schema.table', 'schema.column', 'schema.foreign_key_table', 'schema.foreign_key_column', 'schema.constraint_name', 'schema.on_update', 'schema.on_delete', ]); } /** * Pick certain specific system field properties that should be compared when performing diff * * @param field field to sanitize * @returns sanitized system field */ export function sanitizeSystemField(field) { return pick(field, ['collection', 'field', 'schema.is_indexed']); }