@gqty/cli
Version:
Interactive codegen for GQty
4 lines (3 loc) • 3.62 kB
JavaScript
;Object.defineProperty(exports,"__esModule",{value:!0});const promises=require("fs/promises"),path=require("path");require("@commander-js/extra-typings"),require("@graphql-codegen/core"),require("@graphql-codegen/typescript"),require("@graphql-tools/utils");const wrap=require("@graphql-tools/wrap"),inquirer=require("@inquirer/prompts");require("cosmiconfig");const crossFetch=require("cross-fetch"),fastGlob=require("fast-glob"),graphql=require("graphql");require("lodash-es/sortBy.js"),require("prettier");const convertHeadersInput=require("./convertHeadersInput.js"),logger=require("./logger.js");function _interopDefaultLegacy(e){return e&&typeof e=="object"&&"default"in e?e:{default:e}}function _interopNamespace(e){if(e&&e.__esModule)return e;const r=Object.create(null);if(e){for(const t in e)if(t!=="default"){const s=Object.getOwnPropertyDescriptor(e,t);Object.defineProperty(r,t,s.get?s:{enumerable:!0,get:function(){return e[t]}})}}return r.default=e,Object.freeze(r)}const inquirer__namespace=_interopNamespace(inquirer),fastGlob__default=_interopDefaultLegacy(fastGlob);var __defProp=Object.defineProperty,__defNormalProp=(e,r,t)=>r in e?__defProp(e,r,{enumerable:!0,configurable:!0,writable:!0,value:t}):e[r]=t,__publicField=(e,r,t)=>__defNormalProp(e,typeof r!="symbol"?r+"":r,t);const schemaFileExtensions=[".gql",".graphql"];class FetchError extends Error{constructor(r,t){super(`Received status code ${t.status} when introspecting ${t.url}`),this.request=r,this.response=t,__publicField(this,"name","FetchError")}}async function fetchSchema(e,r={}){const t=[];r.headersByEndpoint||(r.headersByEndpoint={}),Array.isArray(e)||(e=[e]);for(const s of e){const{headers:n,headersByEndpoint:i}=r,a=async()=>{const o=await doIntrospection(s,{headers:n??i[s]?.headers,silent:r.silent});o!==void 0&&t.push(o)};try{await a()}catch(o){if(o instanceof FetchError&&o.response.status===401&&n===void 0&&i[s]?.headers===void 0){process.stdout.write("\r");const c=await promptHeaders();if(c===void 0)throw o;i[o.response.url]={headers:c},await a()}else throw o}}if(t.length===0)throw new Error("No schemas found.");return r.silent||(logger.logger.successProgress("Schema introspection completed."),console.log("")),graphql.buildSchema(t.join(`
`))}const doIntrospection=async(e,r)=>{if(isURL(e)){r?.silent||logger.logger.infoProgress(`Fetching schema from remote endpoint '${e}'...`);const t=async({document:n,variables:i,extensions:a={}})=>{const{print:o}=await import("graphql"),c={method:"POST",headers:{"Content-Type":"application/json",...r?.headers},body:JSON.stringify({query:o(n),variables:i,extensions:{...a,endpoint:e}})},l=await crossFetch.fetch(e,c);if(l.status>=400)throw new FetchError(c,l);const u=await l.text();try{return JSON.parse(u)}catch{throw new SyntaxError(`Invalid JSON received from ${e}: "${u.length>50?u.slice(0,50).replace(/\n/g,"")+"...":u}".`)}},s=await wrap.schemaFromExecutor(t);return graphql.printSchema(s)}else{const t=await fastGlob__default.default(e).then(n=>n.filter(i=>schemaFileExtensions.includes(path.extname(i))));if(t.length===0)return;const s=[];for(const n of t)r?.silent||logger.logger.infoProgress(`Reading schema file ${n} ...`),s.push(await promises.readFile(n,{encoding:"utf-8"}));return s.join(`
`)}},promptHeaders=async()=>{if(!process.stdin.isTTY)return;const e=await inquirer__namespace.input({message:"Any request headers? (Authorization: Bearer <token>, X-Foo: <bar>)"});return convertHeadersInput.convertHeadersInput(e.split(/,/))},isURL=e=>/^https?:\/\//.test(e);exports.FetchError=FetchError,exports.fetchSchema=fetchSchema,exports.isURL=isURL;