Secure your code as it's written. Use Snyk Code to scan source code in minutes - no build needed - and fix issues immediately.
public generate() {
const resolvers = {
Query: {},
Mutation: {},
Subscription: {}
};
for (const resolverElement of this.inputContext) {
if (resolverElement.config.disableGen) {
continue;
}
const objectName = resolverElement.name.toLowerCase();
if (resolverElement.config.create) {
const resolverCreateField = getFieldName(resolverElement.name, GraphbackOperationType.CREATE);
// tslint:disable-next-line: no-any
resolvers.Mutation[resolverCreateField] = (parent: any, args: any, context: any) => {
return this.service.create(objectName, args.input, {
publishEvent: resolverElement.config.subCreate
}, context)
}
}
if (resolverElement.config.update) {
const updateField = getFieldName(resolverElement.name, GraphbackOperationType.UPDATE);
// tslint:disable-next-line: no-any
resolvers.Mutation[updateField] = (parent: any, args: any, context: any) => {
return this.service.update(objectName, args.id, args.input, {
publishEvent: resolverElement.config.subUpdate
}, context)
}
}
const createMutationTS = (t: InputModelTypeContext, imports: string) => {
const fieldName = getFieldName(t.name, GraphbackOperationType.CREATE)
return `${imports}
export const ${fieldName} = gql\`
${createMutation(t)}
\$\{${t.name}Fragment}
\`
`
}
types.forEach((t: InputModelTypeContext) => {
const imports = `import gql from "graphql-tag"
import { ${t.name}Fragment } from "../fragments/${t.name}"`
if (t.config.create) {
mutations.push({
name: getFieldName(t.name, GraphbackOperationType.CREATE),
implementation: createMutationTS(t, imports)
})
}
if (t.config.update) {
mutations.push({
name: getFieldName(t.name, GraphbackOperationType.UPDATE),
implementation: updateMutationTS(t, imports)
})
}
if (t.config.delete) {
mutations.push({
name: getFieldName(t.name, GraphbackOperationType.DELETE),
implementation: deleteMutationTS(t, imports)
})
.map((t: InputModelTypeContext) => {
const fieldName = getFieldName(t.name, GraphbackOperationType.CREATE)
return `${fieldName}(input: ${t.name}Input!): ${t.name}!`
})
}
const createResolver = (t: InputModelTypeContext): string | undefined => {
if (t.config.create) {
return templates.createTemplate(getFieldName(t.name, GraphbackOperationType.CREATE), t.name, t.config.subCreate)
}
return undefined
}
public subscribeToCreate(name: string, context?: GraphbackRuntimeContext): AsyncIterator | undefined {
if (!this.pubSub) {
this.logger.log(`Cannot subscribe to events for ${name}`)
throw Error(`Missing PubSub implementation in CRUDService`);
}
const createSubKey = subscriptionTopicMapping(GraphbackOperationType.CREATE, name);
return this.pubSub.asyncIterator(createSubKey)
}
export const createMutation = (t: InputModelTypeContext) => {
const fieldName = getFieldName(t.name, GraphbackOperationType.CREATE)
return `mutation ${fieldName}(${inputVariableFields(t)}) {
${fieldName}(input: {${inputVariables(t)}}) {
...${t.name}Fields
}
}
`
}