import { MutationSegment } from './gql-segments/types'; export const MAX_UNIQUE_ID = 10000000000; function uniqueId(): string { return Math.floor(Math.random() * MAX_UNIQUE_ID).toString(); } function segment(startMatch: RegExp, endMatch: RegExp, seg: string): string { const startIndex = seg.search(startMatch); const endIndex = seg.search(endMatch); return seg.substring(startIndex + startMatch.toString().length - 2, endIndex); } export default function generateMutationGql( fullGql: string, mutationName: string, ): MutationSegment { const mutationUniqueId = `${mutationName}_${uniqueId()}`; const mutationFunctionName = segment( /compass {\n/, /\(input/, fullGql, ).trim(); const mutation = `${mutationUniqueId}: ${mutationFunctionName}(input: $${mutationUniqueId}) { success errors { message } } `; const inputType = segment(/input: /, /\) \{/, fullGql).replace('\n', ''); return { mutationGql: mutation, params: [`$${mutationUniqueId}: ${inputType}`], inputId: mutationUniqueId, }; }