@gqty/cli
Version:
Interactive codegen for GQty
9 lines (7 loc) • 3.78 kB
JavaScript
import{promises as b}from"fs";import{createRequire as j}from"module";import{resolve as O}from"path";import"@commander-js/extra-typings";import"@graphql-codegen/core";import"@graphql-codegen/typescript";import"@graphql-tools/utils";import"@graphql-tools/wrap";import"@inquirer/prompts";import{cosmiconfig as h}from"cosmiconfig";import"cross-fetch";import"fast-glob";import"graphql";import"lodash-es/sortBy.js";import"prettier";import{__innerState as S}from"./innerState.mjs";import{formatPrettier as $}from"./prettier.mjs";const l=globalThis.require||j(import.meta.url.toString());function f(i){return i!=null&&typeof i=="object"&&!Array.isArray(i)}function d(i){return f(i)&&Object.values(i).every(n=>typeof n=="string")}const m="SPECIFY_ENDPOINT_OR_SCHEMA_FILE_PATH_HERE",o={frameworks:(()=>{const i=[];try{l.resolve("react"),i.push("react")}catch{}try{l.resolve("solid-js"),i.push("solid-js")}catch{}return i})(),scalarTypes:{DateTime:"string"},introspection:{endpoint:m,headers:{}},endpoint:"/api/graphql",destination:"./src/gqty/index.ts",subscriptions:!1,javascriptOutput:!1,enumStyle:"enum",enumsAsStrings:!1,enumsAsConst:!1,preImport:""};function c(i,n,e,t){console.warn(`Warning, invalid config ${i}, got: ${JSON.stringify(n)}, expected ${e}. ${JSON.stringify(t)} used instead.`)}function y(i){if(f(i)){const n={};typeof i.javascriptOutput=="boolean"&&(n.javascriptOutput=i.javascriptOutput);for(const[e,t]of Object.entries(i))if(t!==void 0)switch(e){case"destination":case"preImport":{typeof t=="string"?n[e]=t:c(e,t,"string",o[e]);break}case"javascriptOutput":case"react":case"subscriptions":case"enumsAsStrings":{typeof t=="boolean"?n[e]=t:c(e,t,"boolean",o[e]);break}case"enumsAsConst":{typeof t=="boolean"?n[e]=t:c(e,t,"boolean",o[e]);break}case"scalarTypes":{d(t)?n[e]=t:c(e,t,'"object of strings"',o[e]);break}case"endpoint":{t&&typeof t=="string"?n[e]=t:c(e,t,"string",o[e]);break}case"introspection":{if(f(t)){const a={};for(const[r,s]of Object.entries(t))if(s!==void 0)switch(r){case"endpoint":{typeof s=="string"?a[r]=s:c(`${e}.${r}`,s,"string",o.introspection.endpoint);break}case"headers":{d(s)?a[r]=s:c(`${e}.${r}`,s,'"object of strings"',o.introspection.headers);break}default:console.warn(`Warning, invalid and unused config property "${e}.${r}": ${JSON.stringify(t)}`)}n[e]=a}else c(e,t,"object",o[e]);break}case"introspections":{if(f(t)){const a={};for(const[r,s]of Object.entries(t))f(s)?a[r]=s:c(`${e}.${r}`,s,'"object of strings"',{});n[e]=a}else c(e,t,"object",o[e]);break}case"transformSchema":{typeof t=="function"?n[e]=t:c(e,t,"function","undefined");break}default:console.warn(`Warning, invalid and unused config property "${e}": ${JSON.stringify(t)}`)}return n}else return console.warn("Invalid config, using instead: "+JSON.stringify(o,null,2)),o}const u=O(process.cwd(),"gqty.config.cjs"),v={filepath:u,config:o};let g;const w=async({writeConfigFile:i=!1}={})=>(g===void 0&&(g=(async()=>{try{const e=a=>l(a),t=await h("gqty",{searchPlaces:["gqty.config.cjs","gqty.config.js","package.json"],loaders:{".cjs":e,".js":e}}).search();if(!t||t.isEmpty){const a=t?.filepath||u,r=process.env.NODE_ENV;if(r!=="test"&&r!=="production"&&S.isCLI){const{format:s}=$({parser:"typescript"}),p={...o};delete p.preImport,delete p.enumsAsStrings,i&&await b.writeFile(u,await s(`
/**
* @type {import("@gqty/cli").GQtyConfig}
*/
const config = ${JSON.stringify(p)};
module.exports = config;`))}return{filepath:a,config:o}}return{config:y(t.config),filepath:t.filepath}}catch(e){return console.error(e),v}})()),g);export{m as DUMMY_ENDPOINT,o as defaultConfig,y as getValidConfig,w as loadOrGenerateConfig};