@replit/graphql-codegen-persisted-queries
Version:
GraphQL Codegen plugin to generate persisted query manifests for server and client
4 lines (3 loc) • 2.19 kB
JavaScript
import {Kind,print,visit}from'graphql';import*as u from'node:crypto';function d(r,n){let o=n.algorithm||"sha256",e=u.createHash(o).update(r,"utf8").digest().toString("hex");return n.includeAlgorithmPrefix===true?`${o}:${e}`:e}var x={kind:Kind.FIELD,name:{kind:Kind.NAME,value:"__typename"}};function g(r){return r.map(print).join(`
`)}function l(r){return visit(r,{SelectionSet:{enter(n,o,e){if(e&&e.kind==="OperationDefinition")return;let{selections:t}=n;if(!t)return;let s=t.some(a=>a.kind==="Field"&&a.name.value==="__typename"),i=t.some(a=>a.kind==="Field"&&a.name.value.startsWith("__"));if(!(s||i))return {...n,selections:[...t,x]}}}})}function N(r){let n=new Map;for(let o of r)visit(o,{FragmentDefinition:{enter(e){n.set(e.name.value,e);}}});return n}function m(r,n,o){let e=o||new Map;return visit(r,{FragmentSpread:{enter(t){let s=t.name.value,i=n.get(s);if(i){if(e.has(s))return;e.set(s,i),m(i,n,e);}else throw new Error(`Unknown fragment: ${s}`)}}}),e}function F(r,n){let o=r.map(l),e=[],t=N(o);for(let s of o)visit(s,{OperationDefinition:{enter(i){if(!i.name)throw new Error("OperationDefinition missing name");let a=i.name.value,f=m(i,t),p=g([i,...f.values()]),M=d(p,n);e.push({name:a,hash:M,type:i.operation,query:p,definition:i,fragments:Array.from(f.values())});}}});return e}function h(r,n){let o=F(r,n),e={};for(let t of o)e[t.name]=t.hash;return e}function y(r,n){let o=F(r,n),e={format:"apollo-persisted-query-manifest",version:1,operations:{}};for(let t of o){let s={type:t.type,name:t.name,body:t.query};e.operations[t.hash]=s;}return e}var R=(r,n,o)=>{if(!n||n.length===0||n.some(t=>!t?.document))throw new Error("Found no documents to generate persisted operation ids.");let e=n.map(t=>t.document).filter(t=>t!==void 0);if(o.output==="client")return JSON.stringify(h(e,o),null," ");if(o.output==="server")return JSON.stringify(y(e,o),null," ");throw new Error("Must configure output to 'server' or 'client'")};export{l as addTypenameToDocument,d as createHash,N as findFragments,m as findUsedFragments,h as generateClientManifest,y as generateServerManifest,R as plugin,g as printDefinitions};//# sourceMappingURL=index.mjs.map
//# sourceMappingURL=index.mjs.map