venom-generator
Version:
In the way of code generation, complete the storage model->computation model (business API) transformation to achieve the goal of design and implementation
109 lines (100 loc) • 3.52 kB
JavaScript
"use strict";
// 代码模板模块
Object.defineProperty(exports, "__esModule", { value: true });
const util = require("./util");
// 用于生产schema.ts文件code
exports.SCHEMACODE = `import { makePrismaSchema } from 'nexus-prisma'
import * as path from 'path'
import datamodelInfo from './nexus-prisma'
import { prisma } from './prisma-client'
import * as generatedTypes from './resolvers'
// 判断是否阿里云函数计算环境
let outputPath = process.env.SERVERNAME != undefined ? '/tmp/' : path.join(__dirname, './')
export const gSchema = makePrismaSchema({
types: generatedTypes,
prisma: {
datamodelInfo,
client: prisma
},
outputs: {
schema: outputPath + 'schema.graphql',
typegen: outputPath + 'nexus.ts'
},
nonNullDefaults: {
input: true,
output: true
}
})`;
// 用于query.ts或mutation.ts是否导入权限code
function calcAuthorizationCode(againCommon, calcAuthorization) {
return againCommon && calcAuthorization !== '' ? `import { ${calcAuthorization} } from '../../poclicy/resolvers/poclicy'\n` : calcAuthorization !== '' ? `import { ${calcAuthorization} } from '../common/poclicy/resolvers/poclicy'\n` : '';
}
exports.calcAuthorizationCode = calcAuthorizationCode;
// 用于方法权限的code
function calcAuthorizationMethodCode(checkCalcAuthorization, calcAuthorization, authAud, methodName) {
return checkCalcAuthorization === true ? `await ${calcAuthorization}(${authAud}, '${methodName}', ctx)` : '// 无须检查权限';
}
exports.calcAuthorizationMethodCode = calcAuthorizationMethodCode;
// 用于生产schema.ts文件code
function schemaCode(server, imServer, typeDef, gSchema, resolver) {
return `import { makePrismaSchema } from 'nexus-prisma'
import * as path from 'path'
import datamodelInfo from './nexus-prisma'
import { prisma } from './prisma-client'
import * as generatedTypes from './resolvers'
import { mergeSchemas } from 'graphql-tools'
${imServer}
// 判断是否阿里云函数计算环境
let outputPath = process.env.SERVERNAME != undefined ? '/tmp/' : path.join(__dirname, './')
export const ${server}gSchema = makePrismaSchema({
types: generatedTypes,
prisma: {
datamodelInfo,
client: prisma
},
outputs: {
schema: outputPath + 'schema.graphql',
typegen: outputPath + 'nexus.ts'
},
nonNullDefaults: {
input: true,
output: true
}
})
const typeDefs = \`${typeDef}\`
export const gSchema = mergeSchemas({
schemas: [${server}gSchema, ${gSchema} typeDefs],
resolvers: [
${util.trim(util.trim(resolver, '\n', 'right'), ',', 'right')}
]
})`;
}
exports.schemaCode = schemaCode;
// index.ts文件code
function indexCode(server, poclicy, context) {
return `import { IncomingMessage, ServerResponse } from 'http'
import { ApolloServer } from 'apollo-server-micro'
import {gSchema as schema } from './generated/schema'
import { prisma as p${server} } from './generated/prisma-client'
${poclicy}
interface GContext {
readonly req: IncomingMessage
readonly res: ServerResponse
}
const apolloServer = new ApolloServer({
schema,
context: (request: GContext) => {
//从HTTP Headers处,取出token{"Authorization": "Bearer $token"}
let token = ''
if (request.req.headers.authorization != null) {
token = request.req.headers.authorization.replace('Bearer ', '')
}
return {
${context}
}
}
})
export default apolloServer.createHandler()`;
}
exports.indexCode = indexCode;
//# sourceMappingURL=code.js.map