UNPKG

kapix-typegraphql-prisma

Version:

![integration logo](https://raw.githubusercontent.com/MichalLytek/typegraphql-prisma/main/img/integration.png)

278 lines 11.4 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.generateInputTypeClassFromType = exports.generateImportsPostGis = exports.transformTypeGraphQLTypePostGis = exports.transformTSTypePostGis = exports.generateOutputTypeClassFromType = void 0; const tslib_1 = require("tslib"); const ts_morph_1 = require("ts-morph"); const path_1 = tslib_1.__importDefault(require("path")); const config_1 = require("./config"); const imports_1 = require("./imports"); const helpers_1 = require("./helpers"); function generateOutputTypeClassFromType(project, dirPath, type, dmmfDocument, generatorOptions) { const fileDirPath = path_1.default.resolve(dirPath, config_1.outputsFolderName); const filePath = path_1.default.resolve(fileDirPath, `${type.typeName}.ts`); const sourceFile = project.createSourceFile(filePath, undefined, { overwrite: true, }); const fieldArgsTypeNames = type.fields .filter(it => it.argsTypeName) .map(it => it.argsTypeName); (0, imports_1.generateTypeGraphQLImport)(sourceFile); (0, imports_1.generateGraphQLScalarsImport)(sourceFile); (0, imports_1.generatePrismaNamespaceImport)(sourceFile, dmmfDocument.options, 2); (0, imports_1.generateCustomScalarsImport)(sourceFile, 2); (0, imports_1.generateArgsImports)(sourceFile, fieldArgsTypeNames, 0); (0, imports_1.generateOutputsImports)(sourceFile, type.fields .filter(field => field.outputType.location === "outputObjectTypes") .map(field => field.outputType.type), 1); (0, imports_1.generateEnumsImports)(sourceFile, type.fields .map(field => field.outputType) .filter(fieldType => fieldType.location === "enumTypes") .map(fieldType => fieldType.type), 2); sourceFile.addClass({ name: type.typeName, isExported: true, decorators: [ { name: "TypeGraphQL.ObjectType", arguments: [ `"${type.typeName}"`, ts_morph_1.Writers.object({ ...(dmmfDocument.options.emitIsAbstract && { isAbstract: "true", }), ...(dmmfDocument.options.simpleResolvers && { simpleResolvers: "true", }), }), ], }, ], properties: [ ...type.fields .filter(field => !field.argsTypeName) .map(field => ({ name: field.name, type: field.fieldTSType, hasExclamationToken: true, hasQuestionToken: false, trailingTrivia: "\r\n", decorators: [ { name: "TypeGraphQL.Field", arguments: [ `_type => ${field.typeGraphQLType}`, ts_morph_1.Writers.object({ nullable: `${!field.isRequired}`, }), ], }, ], })), ...type.fields .filter(field => field.argsTypeName) .map(field => ({ name: field.name, type: field.fieldTSType, hasExclamationToken: true, hasQuestionToken: false, })), ], methods: type.fields .filter(field => field.argsTypeName) .map(field => ({ name: `get${(0, helpers_1.pascalCase)(field.name)}`, returnType: field.fieldTSType, trailingTrivia: "\r\n", decorators: [ { name: "TypeGraphQL.Field", arguments: [ `_type => ${field.typeGraphQLType}`, ts_morph_1.Writers.object({ name: `"${field.name}"`, nullable: `${!field.isRequired}`, }), ], }, ], parameters: [ { name: "root", type: type.typeName, decorators: [{ name: "TypeGraphQL.Root", arguments: [] }], }, { name: "args", type: field.argsTypeName, decorators: [ { name: "TypeGraphQL.Args", arguments: generatorOptions.emitRedundantTypesInfo ? [`_type => ${field.argsTypeName}`] : [], }, ], }, ], statements: [ts_morph_1.Writers.returnStatement(`root.${field.name}`)], })), }); } exports.generateOutputTypeClassFromType = generateOutputTypeClassFromType; function transformTSTypePostGis(fieldTSType, isGeometry, action) { if (!isGeometry) return fieldTSType; switch (action) { case "Create": return "GeometryInput"; case "Update": return "GeometryInput | undefined"; case "Where": return "DistanceFilter | undefined"; default: return fieldTSType; } } exports.transformTSTypePostGis = transformTSTypePostGis; function transformTypeGraphQLTypePostGis(typeGraphQLType, isGeometry, action) { if (!isGeometry) return typeGraphQLType; switch (action) { case "Create": return "GeometryInput"; case "Update": return "GeometryInput"; case "Where": return "DistanceFilter"; default: return typeGraphQLType; } } exports.transformTypeGraphQLTypePostGis = transformTypeGraphQLTypePostGis; function generateImportsPostGis(typeName, sourceFile, fieldsToEmit) { let method = ""; if (typeName.includes("Create")) method = "Create"; else if (typeName.includes("Update")) method = "Update"; else if (typeName.includes("Where")) method = "Where"; if (method !== "") { if (fieldsToEmit.filter(field => field.isGeometry).length > 0) { if (method === "Where") { sourceFile.addImportDeclaration({ namedImports: ["DistanceFilter"], moduleSpecifier: "../inputs/GeometryInput", }); } else { sourceFile.addImportDeclaration({ namedImports: ["GeometryInput"], moduleSpecifier: "../inputs/GeometryInput", }); } return method; } } return null; } exports.generateImportsPostGis = generateImportsPostGis; function generateInputTypeClassFromType(project, dirPath, inputType, options) { const filePath = path_1.default.resolve(dirPath, config_1.inputsFolderName, `${inputType.typeName}.ts`); const sourceFile = project.createSourceFile(filePath, undefined, { overwrite: true, }); (0, imports_1.generateTypeGraphQLImport)(sourceFile); (0, imports_1.generateGraphQLScalarsImport)(sourceFile); (0, imports_1.generatePrismaNamespaceImport)(sourceFile, options, 2); (0, imports_1.generateCustomScalarsImport)(sourceFile, 2); (0, imports_1.generateInputsImports)(sourceFile, inputType.fields .filter(field => field.selectedInputType.location === "inputObjectTypes") .map(field => field.selectedInputType.type) .filter(fieldType => fieldType !== inputType.typeName)); (0, imports_1.generateEnumsImports)(sourceFile, inputType.fields .map(field => field.selectedInputType) .filter(fieldType => fieldType.location === "enumTypes") .map(fieldType => fieldType.type), 2); const fieldsToEmit = inputType.fields.filter(field => !field.isOmitted); const mappedFields = fieldsToEmit.filter(field => field.hasMappedName); const action = generateImportsPostGis(inputType.typeName, sourceFile, fieldsToEmit); sourceFile.addClass({ name: inputType.typeName, isExported: true, decorators: [ { name: "TypeGraphQL.InputType", arguments: [ `"${inputType.typeName}"`, ts_morph_1.Writers.object({ ...(options.emitIsAbstract && { isAbstract: "true", }), }), ], }, ], properties: fieldsToEmit.map(field => { return { name: field.name, type: transformTSTypePostGis(field.fieldTSType, field.isGeometry, action), hasExclamationToken: !!field.isRequired, hasQuestionToken: !field.isRequired, trailingTrivia: "\r\n", decorators: field.hasMappedName ? [] : [ { name: "TypeGraphQL.Field", arguments: [ `_type => ${transformTypeGraphQLTypePostGis(field.typeGraphQLType, field.isGeometry, action)}`, ts_morph_1.Writers.object({ nullable: `${!field.isRequired}`, }), ], }, ], }; }), getAccessors: mappedFields.map(field => { return { name: field.typeName, type: transformTSTypePostGis(field.fieldTSType, field.isGeometry, action), hasExclamationToken: field.isRequired, hasQuestionToken: !field.isRequired, trailingTrivia: "\r\n", statements: [`return this.${field.name};`], decorators: [ { name: "TypeGraphQL.Field", arguments: [ `_type => ${transformTypeGraphQLTypePostGis(field.typeGraphQLType, field.isGeometry, action)}`, ts_morph_1.Writers.object({ nullable: `${!field.isRequired}`, }), ], }, ], }; }), setAccessors: mappedFields.map(field => { return { name: field.typeName, type: transformTSTypePostGis(field.fieldTSType, field.isGeometry, action), hasExclamationToken: field.isRequired, hasQuestionToken: !field.isRequired, trailingTrivia: "\r\n", parameters: [ { name: field.name, type: transformTypeGraphQLTypePostGis(field.typeGraphQLType, field.isGeometry, action), }, ], statements: [`this.${field.name} = ${field.name};`], }; }), }); } exports.generateInputTypeClassFromType = generateInputTypeClassFromType; //# sourceMappingURL=type-class.js.map