import type * as Hasura from "hasura-metadata-types"; import type { EntityMetadata } from "typeorm"; import { generateRelationships } from "./relationships"; import { generateTableConfiguration } from "./tableConfiguration"; import { DataSourceOptions } from "../types"; import { generatePermissions } from "./permissions"; import { internalStorage } from "../internalStorage"; export function generateTable( dataSourceOptions: DataSourceOptions, table: EntityMetadata ): Hasura.MetadataTable { const entityWorkspace = internalStorage.getEntityWorkspace(table.target); const metadata: Hasura.MetadataTable = { table: { name: table.tableName, schema: table.schema || ('schema' in table.connection.options && table.connection.options.schema) || 'public', }, configuration: generateTableConfiguration(table, entityWorkspace), ...generateRelationships(table.relations), ...generatePermissions(dataSourceOptions, table, entityWorkspace), } // be consistent with hasura if (!metadata.object_relationships?.length) delete metadata.object_relationships; if (!metadata.array_relationships?.length) delete metadata.array_relationships; if (!metadata.insert_permissions?.length) delete metadata.insert_permissions; if (!metadata.select_permissions?.length) delete metadata.select_permissions; if (!metadata.update_permissions?.length) delete metadata.update_permissions; if (!metadata.delete_permissions?.length) delete metadata.delete_permissions; return metadata; }