import {GraphQLEnumType, GraphQLFieldConfigMap, GraphQLList, GraphQLNonNull} from "graphql"; import {getMetaData, getMetaDataList, MetaDataType} from "./metadata"; import {AdapterMaps, GenerateAdapterConfig} from "../../utils"; import {ModelCtor} from "sequelize"; import {JSONType} from "../../sequelizeImpl/types"; import {tableList2Map} from "@puti94/gql-utils/dist/adapterUtils"; /** * * @param adapters * @param options * @return {{_metadataMap: {resolve: () => TableFieldsMap, description: string, type: GraphQLScalarType}, _metadata: {args: {name: {description: string, type: GraphQLNonNull}}, resolve: (source: any, {name}: {name: string}) => TableMetaData, description: string, type: GraphQLObjectType}, _metadataList: {resolve: () => TableMetaData[], description: string, type: GraphQLList}, _typeNameMap: {resolve: () => {[p: string]: string}, description: string, type: GraphQLScalarType}}} */ export default function }>(adapters: AdapterMaps, options: GenerateAdapterConfig): GraphQLFieldConfigMap { return { _metadataList: { type: new GraphQLList(MetaDataType), description: "获取源数据列表", resolve: () => { return getMetaDataList(adapters, options); } }, _metadataMap: { type: JSONType, description: "基本数据,以类型名为键值", resolve: () => { return tableList2Map(getMetaDataList(adapters, options)); } }, _metadata: { type: MetaDataType, description: "获取单个表格源数据", args: { name: { type: new GraphQLNonNull(new GraphQLEnumType({ name: "GqlAdapterEnum", values: Object.keys(adapters).reduce((memo, key) => { const name = adapters[key].name; memo[name] = {value: key}; return memo; }, {}) })), description: "模型" } }, resolve: (source: any, {name}: { name: string }) => { return getMetaData(adapters[name], options); } }, }; }