@directus/api
Version:
Directus is a real-time API and App dashboard for managing SQL database content
50 lines (48 loc) • 1.74 kB
JavaScript
import { getGraphQLType } from "../../../utils/get-graphql-type.js";
import { GraphQLBoolean, GraphQLInt, GraphQLNonNull, GraphQLString } from "graphql";
//#region src/services/graphql/resolvers/get-field-type.ts
function getFieldType(schemaComposer, schema, action) {
const prefix = action === "read" ? "" : "write_";
const Field = schemaComposer.createObjectTC({ name: `${prefix}directus_fields` });
if ("directus_fields" in schema.read.collections === false) return Field;
Field.addFields({
collection: GraphQLString,
field: GraphQLString,
type: GraphQLString,
meta: schemaComposer.createObjectTC({
name: `${prefix}directus_fields_meta`,
fields: Object.values(schema.read.collections["directus_fields"].fields).reduce((acc, field) => {
acc[field.field] = {
type: field.nullable || action === "write" ? getGraphQLType(field.type, field.special) : new GraphQLNonNull(getGraphQLType(field.type, field.special)),
description: field.note
};
return acc;
}, {})
}),
schema: schemaComposer.createObjectTC({
name: `${prefix}directus_fields_schema`,
fields: {
name: GraphQLString,
table: GraphQLString,
data_type: GraphQLString,
default_value: GraphQLString,
max_length: GraphQLInt,
numeric_precision: GraphQLInt,
numeric_scale: GraphQLInt,
is_generated: GraphQLBoolean,
generation_expression: GraphQLString,
is_indexed: GraphQLBoolean,
is_nullable: GraphQLBoolean,
is_unique: GraphQLBoolean,
is_primary_key: GraphQLBoolean,
has_auto_increment: GraphQLBoolean,
foreign_key_column: GraphQLString,
foreign_key_table: GraphQLString,
comment: GraphQLString
}
})
});
return Field;
}
//#endregion
export { getFieldType };