@getcronit/pylon-dev 2.0.0-canary-20250407132843.ea8a1401ef28f146aae21fca3098b60183e44b81 → 2.0.0-canary-20250408150641.1fa40562959367481e90835352afa3522b2edbec
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.js +11 -10
- package/dist/index.js.map +2 -2
- package/package.json +2 -2
package/dist/index.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import{program as Y}from"commander";import
|
|
1
|
+
import{program as Y}from"commander";import W from"consola";import Me from"dotenv";import B from"pm2";var se="2.0.0-canary-20250408150641.1fa40562959367481e90835352afa3522b2edbec";import{PostHog as Se}from"posthog-node";import ve from"conf";import{readFileSync as Pe}from"fs";import{randomUUID as re}from"crypto";var Fe={distinctId:{type:"string",default:re()}},Ne=new ve({projectName:"pylon",schema:Fe}),O=Ne.get("distinctId"),x=re(),D=new Se("phc_KN4qCOcCdkXp6sHLIuMWGRfzZWuNht69oqv5Kw5rGxj",{host:"https://eu.i.posthog.com",disabled:process.env.PYLON_DISABLE_TELEMETRY==="true"}),xe=()=>{let o;try{o=JSON.parse(Pe("./package.json","utf8"))}catch{o={}}let s=o.dependencies||{},t=o.devDependencies||{},e=o.peerDependencies||{};return{dependencies:s,devDependencies:t,peerDependencies:e}},E=xe(),V=async()=>{try{let s=(await import(`${process.cwd()}/.pylon/config.js`)).config,t=JSON.parse(JSON.stringify(s));return Object.keys(t).length===0?!1:t}catch{return!1}};import Ae from"path";import{context as Ee}from"esbuild";import $e from"esbuild-plugin-tsc";import A from"path";import ue from"fs/promises";import M from"path";import De from"fs/promises";import oe from"fs/promises";async function F(o,s){try{if(await oe.readFile(o,"utf8")===s)return!1}catch(t){if(t.code!=="ENOENT")throw t}return await oe.writeFile(o,s,"utf8"),!0}var ae=({getBuildDefs:o,outputDir:s})=>({name:"inject-code",setup(t){t.onLoad({filter:/src[\/\\]index\.ts$/,namespace:"file"},async e=>{if(M.relative(process.cwd(),e.path)!==M.join("src","index.ts"))return;let{typeDefs:i,resolvers:a}=o(),n=ce(a),c=await De.readFile(e.path,"utf-8"),p=M.join(process.cwd(),s,"schema.graphql");await F(p,i);let l=M.join(process.cwd(),s,"resolvers.js");return await F(l,`export const resolvers = ${n}`),{loader:"ts",contents:`import {executeConfig} from "@getcronit/pylon"
|
|
2
2
|
|
|
3
3
|
const __internalPylonConfig = await import(".pylon/config.js")
|
|
4
4
|
await executeConfig(__internalPylonConfig.config)
|
|
@@ -12,11 +12,11 @@ import{program as Y}from"commander";import K from"consola";import Me from"dotenv
|
|
|
12
12
|
graphql,
|
|
13
13
|
resolvers: ${n},
|
|
14
14
|
}))
|
|
15
|
-
`}})}});function ce(o){return`{${Object.entries(o).map(([t,e])=>{if(e!==void 0)return typeof e=="string"?`${t}:${e}`:typeof e=="function"?`${t}:${e.toString()}`:typeof e=="object"&&!Array.isArray(e)?`${t}:${ce(e)}`:`${t}:${JSON.stringify(e)}`}).join(",")}}`}import Ce from"path";import pe from"fs/promises";import
|
|
15
|
+
`}})}});function ce(o){return`{${Object.entries(o).map(([t,e])=>{if(e!==void 0)return typeof e=="string"?`${t}:${e}`:typeof e=="function"?`${t}:${e.toString()}`:typeof e=="object"&&!Array.isArray(e)?`${t}:${ce(e)}`:`${t}:${JSON.stringify(e)}`}).join(",")}}`}import Ce from"path";import pe from"fs/promises";import $ from"consola";var le=({dir:o,onBuild:s})=>({name:"notify",async setup(t){let e=async()=>{let a=Ce.join(o,"schema.graphql");try{await pe.access(a)}catch{return null}return await pe.readFile(a,"utf-8")},r=await e(),i=Date.now();t.onStart(async()=>{i=Date.now(),$.start("[Pylon]: Building...")}),t.onEnd(async a=>{if(a.errors.length>0){for(let u of a.errors)$.error(`[Pylon]: ${u.text}
|
|
16
16
|
${u.location?`at ${u.location.file}:${u.location.line}:${u.location.column}`:""}
|
|
17
|
-
${u.detail?u.detail:""}`);throw new Error("Failed to build Pylon")}if(a.warnings.length>0)for(let u of a.warnings)
|
|
17
|
+
${u.detail?u.detail:""}`);throw new Error("Failed to build Pylon")}if(a.warnings.length>0)for(let u of a.warnings)$.warn(u);let n=Date.now()-i,c=Object.keys(a.metafile.inputs).length,p=Object.values(a.metafile.outputs).reduce((u,g)=>u+g.bytes,0),l=await e();$.success(`[Pylon]: Built in ${n}ms`);let f=l!==r;f&&($.info("[Pylon]: Schema updated"),r=l),s&&await s({totalFiles:c,totalSize:p,schemaChanged:f,duration:n})})}});import Ie from"esbuild";import{readFileSync as je}from"fs";import{dirname as ke,resolve as Oe}from"path";import C from"typescript";async function fe(o,s=".pylon/config.js"){let t=Oe(o),e=je(t,"utf8"),r=C.createSourceFile(t,e,C.ScriptTarget.ESNext,!0),i="",a=[];C.forEachChild(r,c=>{if(C.isImportDeclaration(c)){let p=c.getFullText(r).trim();a.push(p)}if(C.isVariableStatement(c)&&c.declarationList.declarations.length>0){let p=c.declarationList.declarations[0];C.isIdentifier(p.name)&&p.name.text==="config"&&p.initializer&&(i=`export const config = ${p.initializer.getText(r)}`)}}),i||(i="export const config = {}");let n=[...a,i].join(`
|
|
18
18
|
|
|
19
|
-
`);await
|
|
19
|
+
`);await Ie.build({stdin:{contents:n,resolveDir:ke(t),sourcefile:t,loader:"ts"},bundle:!0,format:"esm",outfile:s,packages:"external"})}var U=class{sfiFilePath;outputDir;constructor(s,t="./.pylon"){this.sfiFilePath=s,this.outputDir=t}async initBuildPlugins(s){let t=A.join(process.cwd(),this.outputDir,"config.js");await fe(this.sfiFilePath,t);let e;try{e=(await import(t)).config}catch(a){console.error("Error loading config",a)}let r=[],i=e?.plugins||[];for(let a of i)if(a.build){let n=a.build({onBuild:s.onBuild});r.push(n)}return r}async build(s){let t=A.join(process.cwd(),this.sfiFilePath),e=A.join(process.cwd(),this.outputDir);await ue.mkdir(e,{recursive:!0});let r={name:"write-on-end",setup(n){n.onEnd(async c=>{await Promise.all(c.outputFiles.map(async p=>{await ue.mkdir(A.dirname(p.path),{recursive:!0}),await F(p.path,p.text)}))})}},i=await Ee({write:!1,logLevel:"silent",metafile:!0,entryPoints:[t],outdir:e,bundle:!0,format:"esm",sourcemap:"inline",packages:"external",plugins:[le({dir:e,onBuild:async n=>{await s.onBuild?.(n)}}),ae({getBuildDefs:s.getBuildDefs,outputDir:this.outputDir}),$e({tsconfigPath:A.join(process.cwd(),"tsconfig.json")}),r]});await i.rebuild();let a=await this.initBuildPlugins({onBuild:()=>{s.onBuild?.({totalFiles:0,totalSize:0,schemaChanged:!1,duration:0})}});return await Promise.all(a.map(async n=>{await(await n).rebuild()})),{watch:async()=>{for(let n of a)await(await n).watch();return await i.watch()},rebuild:async()=>{for(let n of a)await(await n).rebuild();await i.rebuild()},dispose:async()=>{for(let n of a)await(await n).dispose();await i.dispose()},cancel:async()=>{for(let n of a)await(await n).cancel();await i.cancel()}}}};import S from"typescript";import v from"typescript";import d from"typescript";var me=o=>o.flags&d.TypeFlags.Object&&o.getProperties().length===0&&o.getCallSignatures().length===0,N=(o,s)=>{let t=o.typeToTypeNode(s,void 0,void 0),e=!!(t&&(t.kind===d.SyntaxKind.ArrayType||t.kind===d.SyntaxKind.TupleType));return!e&&s.getSymbol()?.getName()==="Array"?!0:e};var b=o=>o.flags&d.TypeFlags.String||o.flags&d.TypeFlags.Number||o.flags&d.TypeFlags.Boolean||o.flags&d.TypeFlags.StringLiteral||o.flags&d.TypeFlags.NumberLiteral||o.flags&d.TypeFlags.BooleanLiteral,q=o=>o.getCallSignatures().length>0,I=o=>b(o)?!1:!!(o.types?.length>1&&o.types.every(e=>e.flags&d.TypeFlags.StringLiteral||e.flags&d.TypeFlags.NumberLiteral||e.flags&d.TypeFlags.BooleanLiteral)),R=o=>o.getSymbol()?.getName()==="Promise",_=o=>{if(o.objectFlags&d.ObjectFlags.Reference){let e=o.typeArguments;if(e&&e.length>0)return e[0]}},de=o=>{if(!o.isUnion())return{type:o,wasOptional:!1};let t=o.types.filter(e=>!(e.flags&d.TypeFlags.Undefined||e.flags&d.TypeFlags.Null)).length!==o.types.length;return{type:o.getNonNullableType(),wasOptional:t}};function ye(o,s){let t=s;if(t.isUnion()){let i=t.types.filter(c=>!(c.flags&d.TypeFlags.Object&&c.objectFlags&d.ObjectFlags.Reference&&c.typeArguments?.length)),a=t.types.filter(c=>c.flags&d.TypeFlags.Object&&c.objectFlags&d.ObjectFlags.Reference&&c.typeArguments?.length).map(c=>c.typeArguments[0]),n=i.filter(c=>!a.some(p=>p===c));t=o.getUnionType(n)}let e=[];if(N(o,t)||b(t)||I(t))return e;let r=[];r=t.resolvedProperties||t.getProperties()||[];for(let i of r)(i.valueDeclaration&&!(d.getCombinedModifierFlags(i.valueDeclaration)&d.ModifierFlags.Private)&&!i.getName().startsWith("#"))!==!1&&e.push(i);return e}var j=o=>o.replace(/[^0-9a-zA-Z_]/g,"_"),z=o=>!!o.getSymbol()?.getDeclarations()?.some(s=>s.getSourceFile().fileName.includes("@repeaterjs"));import w from"typescript";var Q=class{checker;schema;typesNameMap=new Map;inputsNameMap=new Map;unions=[];enums=[];constructor(s,t){this.checker=s,this.schema=t}getTypeDefinition=(s,t={isInputType:!1})=>{let{type:e,wasOptional:r}=de(s);if(e.flags&w.TypeFlags.Void||e.flags&w.TypeFlags.Undefined||e.flags&w.TypeFlags.Null)return{name:"Void",isList:!1,isRequired:!1};if(z(e)){let p=this.checker.getTypeArguments(e)[0];if(p)return this.getTypeDefinition(p,t)}if(R(e)){let p=_(e);if(p)return this.getTypeDefinition(p,t)}let i=t.isRequired!==void 0?t.isRequired:!r;if(me(e))return{name:"Object",isList:!1,isRequired:i};let a=t.isInputType?this.inputsNameMap:this.typesNameMap;if(a.has(e))return{name:a.get(e),isList:!1,isRequired:i};let n=e.aliasSymbol?.escapedName?.toString()||e.symbol?.escapedName.toString();(n==="__type"||n==="__object")&&(t.propertyName?n=t.propertyName.charAt(0).toUpperCase()+t.propertyName.slice(1):n=void 0),n&&(n=j(n));let c=p=>Array.from(a.values()).includes(p);if(n&&!this.schema.scalars.includes(n)){t.isInputType&&(n=`${n}Input`);let p=1,l=n;for(;c(n);)n=`${l}_${p}`,p++}if(n&&this.schema.scalars.includes(n))return{name:n,isList:!1,isRequired:i};if(N(this.checker,e)){let p=this.checker.getIndexTypeOfType(e,w.IndexKind.Number);if(p){let l=this.getTypeDefinition(p,t);return{name:l.name,isList:!0,isRequired:l.isRequired,isListRequired:i}}}else if(I(e)){let p=this.checker.typeToTypeNode(e,void 0,void 0),f=e.types.map(u=>{if(u.isLiteral()){let g=u.value?.toString();if(!g)throw new Error("Enum member name is undefined");return j(g)}throw new Error("Invalid type for enum member")});f.length>0&&(n=n||p.typeName?.symbol?.escapedName,n||(n=f.join("_").toUpperCase(),n=t.isInputType?`${n}Input`:n),this.enums.push({name:n,values:f,rawType:e}))}else if(b(e)){let p=this.checker.typeToString(e);return e.flags&w.TypeFlags.StringLiteral?p="String":e.flags&w.TypeFlags.NumberLiteral?p="Number":e.flags&w.TypeFlags.BooleanLiteral?p="Boolean":e.flags&w.TypeFlags.String?p="String":e.flags&w.TypeFlags.Number?p="Number":e.flags&w.TypeFlags.Boolean&&(p="Boolean"),{name:j(p),isList:!1,isRequired:i}}else if(e.isIntersection()){let l=e.types.map(f=>this.getTypeDefinition(f,t).name);n=j(n||l.join("And"))}else if(e.isUnion()){let p=e.types,l=e.types.length===p.length,f=p.some(m=>{let h=N(this.checker,m)?this.checker.getIndexTypeOfType(m,w.IndexKind.Number):m;return h?b(h)||I(h):!0}),u=[...new Set(p.map(m=>this.getTypeDefinition(m,{...t,isRequired:l})))],g=u.filter(m=>m.isList);for(let m of g){let h=u.findIndex(T=>T.name===m.name&&!T.isList);h>-1&&u.splice(h,1)}let y=u.map(m=>m.name);if(n=j(n||y.join("Or")),n){let m=1,h=n;for(;c(n);)n=`${h}_${m}`,m++}if(u.length>1&&!t.isInputType&&!f)this.unions.push({name:n,types:y,rawType:e});else{let m=u[0];if(!m)throw new Error("Cannot get type definition");let h=u.some(T=>T.isList&&T.name===m.name);return{name:m.name,isList:h,isRequired:i}}}else if(q(e)){let l=e.getCallSignatures()[0]?.getReturnType();if(l&&R(l)){let f=_(l);f&&(l=f)}if(l)return this.getTypeDefinition(l,t)}return n||(n="Any"),a.set(e,n),{name:n,isList:!1,isRequired:i}};getUnions(){return this.unions}getEnums(){return this.enums}typeDefinitionToGraphQLType=s=>{let t=s.name,{isList:e,isRequired:r,isListRequired:i}=s;return r&&(t=`${t}!`),e&&(t=`[${t}]`,i&&(t=`${t}!`)),t}};import Z from"consola";var J=class{schema;checker;program;sfiFile;typeDefinitionBuilder;constructor(s,t,e){this.schema={types:[],inputs:[],interfaces:[],unions:[],enums:[],scalars:["ID","Int","Float","Number","Any","Void","Object","File","Date","JSON","String","Boolean"]},this.checker=s,this.sfiFile=t,this.program=e,this.typeDefinitionBuilder=new Q(s,this.schema)}parse(s){let t=this.makeReferenceSchema(s);for(let[e,r]of t.types){let i;s.Query===e?i="Query":s.Mutation===e?i="Mutation":s.Subscription===e&&(i="Subscription"),this.processSchemaReference(e,r,i,"types")}for(let[e,r]of t.inputs)this.processSchemaReference(e,r,void 0,"inputs");this.extractForbiddenFieldNamesFromSchema(),this.schema.unions=this.typeDefinitionBuilder.getUnions().map(e=>({...e,description:this.getTypeDocumentation(e.rawType)})),this.schema.enums=this.typeDefinitionBuilder.getEnums().map(e=>({...e,description:this.getTypeDocumentation(e.rawType)})),this.schema.types=this.schema.types.filter(e=>!this.schema.enums.find(r=>r.name===e.name)),this.schema.inputs=this.schema.inputs.filter(e=>!this.schema.enums.find(r=>r.name===e.name)),this.schema.unions.forEach(e=>{let r=this.checkIfInterfaceIsPossibleForUnion(e,this.schema.types);r&&(this.schema.interfaces.push(r),this.schema.unions=this.schema.unions.filter(i=>i.name!==e.name),this.schema.types.map(i=>{if(e.types.includes(i.name))return i.implements||(i.implements=[]),i.implements.push(r.name),i}))});for(let[e,r]of t.classImplementsMap){this.schema.types.map(i=>{let a=this.schema.types.find(n=>n.rawType===e);return a&&(a.implements=Array.from(new Set([...a.implements||[],...r.map(n=>this.checker.typeToString(n))]))),i});for(let i of r){let a=this.schema.types.find(n=>n.rawType===i);a&&(this.schema.interfaces.push({name:this.checker.typeToString(i),description:this.getTypeDocumentation(i),fields:a.fields}),this.schema.types=this.schema.types.filter(n=>n.rawType!==i))}}this.schema.types=this.schema.types.map(e=>((e.implements||this.schema.unions.find(r=>r.types.includes(e.name)))&&(e.fields=e.fields.filter(r=>r.type.name!=="Void")),e)),this.schema.unions=this.schema.unions.map(e=>({...e,__resolveType:this.getResolveTypeForUnionOrInterface(e,this.schema.types)})),this.schema.interfaces=this.schema.interfaces.map(e=>({...e,__resolveType:this.getResolveTypeForUnionOrInterface(e,this.schema.types)}))}checkIfInterfaceIsPossibleForUnion(s,t){let e=s.types.map(a=>{let n=t.find(c=>c.name===a);if(!n)throw new Error(`Type ${a} not found`);return n}),i=e[0].fields.filter(a=>e.every(n=>n.fields.some(c=>JSON.stringify(c)===JSON.stringify(a))));return i.length>0?{name:s.name,description:s.description,fields:i}:null}getResolveTypeForUnionOrInterface(s,t){let e="types"in s?t.filter(n=>s.types.includes(n.name)):t.filter(n=>n.implements?.includes(s.name));e.sort((n,c)=>c.fields.length-n.fields.length);let r=new Map;e.forEach(n=>{let c=n.fields.map(p=>p.name).sort().join(", ");if(r.has(c)){let p=r.get(c);Z.warn(`Warning: Union types "${n.name}" and "${p?.name}" have the same fields: [${c}].
|
|
20
20
|
Consider differentiating these types by adding unique fields or using different type names.
|
|
21
21
|
This may cause ambiguity in type resolution.`)}else r.set(c,n)});let a=`function resolveType(node) { if (node && typeof node === 'object') { ${e.map(n=>`if (${n.fields.map(l=>`"${l.name}" in node`).join(" && ")}) {return '${n.name}'};`).join(" ")} } }`;return new Function("return "+a)()}toString(){let{typeDefinitionToGraphQLType:s}=this.typeDefinitionBuilder,t=r=>r?`"""
|
|
22
22
|
${r}
|
|
@@ -36,13 +36,13 @@ ${r}
|
|
|
36
36
|
`;for(let r of this.schema.enums){e+=t(r.description),e+=`enum ${r.name} {
|
|
37
37
|
`;for(let i of r.values)e+=` ${i}
|
|
38
38
|
`;e+=`}
|
|
39
|
-
`}return e}getSchema(){return this.schema}getResolvers(){let s={};for(let t of this.schema.unions)s[t.name]={__resolveType:t.__resolveType};for(let t of this.schema.interfaces)s[t.name]={__resolveType:t.__resolveType};return s}processSchemaReference(s,t,e,r="types"){let{getTypeDefinition:i}=this.typeDefinitionBuilder,a=r==="inputs",n=i(s,{isInputType:a}),c=e||n.name,p=this.schema[r].find(l=>l.name===c);if(!p){if(this.schema.scalars.includes(c))return;this.schema[r].push({name:c,description:this.getTypeDocumentation(s),fields:[],rawType:N(this.checker,s)&&(s.getNumberIndexType()||s.getStringIndexType())||s}),p=this.schema[r][this.schema[r].length-1]}for(let[l,f]of Object.entries(t)){let u=f.returnType,g=i(u,{isInputType:a,propertyName:l});if(r==="types"){let
|
|
39
|
+
`}return e}getSchema(){return this.schema}getResolvers(){let s={};for(let t of this.schema.unions)s[t.name]={__resolveType:t.__resolveType};for(let t of this.schema.interfaces)s[t.name]={__resolveType:t.__resolveType};return s}processSchemaReference(s,t,e,r="types"){let{getTypeDefinition:i}=this.typeDefinitionBuilder,a=r==="inputs",n=i(s,{isInputType:a}),c=e||n.name,p=this.schema[r].find(l=>l.name===c);if(!p){if(this.schema.scalars.includes(c))return;this.schema[r].push({name:c,description:this.getTypeDocumentation(s),fields:[],rawType:N(this.checker,s)&&(s.getNumberIndexType()||s.getStringIndexType())||s}),p=this.schema[r][this.schema[r].length-1]}for(let[l,f]of Object.entries(t)){let u=f.returnType,g=i(u,{isInputType:a,propertyName:l});if(r==="types"){let y={name:l,type:{...g,description:this.getSymbolDocumentation(f.symbol)},args:[]};if(f.args)for(let[m,h]of Object.entries(f.args)){let T=h,P=i(T.type,{isInputType:!0,propertyName:m,isRequired:h.isRequired});this.schema.scalars.includes(this.checker.typeToString(T.type))&&(P.name=this.checker.typeToString(T.type)),y.args.push({name:m,type:{...P,description:T.documentation}})}p.fields.push(y)}else if(r==="inputs"){let y={name:l,type:{...g,description:this.getTypeDocumentation(u)}};p.fields.find(m=>m.name===y.name)||p.fields.push(y)}}}getSymbolDocumentation(s){let t="";t+=v.displayPartsToString(s.getDocumentationComment(this.checker));let e=s.getJsDocTags(this.checker).map(r=>`@${r.name} ${v.displayPartsToString(r.text)}`).join(`
|
|
40
40
|
`);return e&&(t+=`
|
|
41
|
-
`+e),t}getTypeDocumentation=s=>{let t=s.getSymbol();return t?this.getSymbolDocumentation(t):""};extractForbiddenFieldNamesFromSchema(){let s=/^[_A-Za-z][_0-9A-Za-z]*$/,t=e=>s.test(e)?e.startsWith("__"):!0;for(let e of this.schema.types)e.fields=e.fields.filter(r=>!t(r.name));for(let e of this.schema.inputs)e.fields=e.fields.filter(r=>!t(r.name))}makeReferenceSchema(s){let t={types:new Map,inputs:new Map,classImplementsMap:new Map},e=(i,a={},n="types",c=[])=>{if(t[n].has(i))return;if(z(i)){let l=this.checker.getTypeArguments(i)[0];e(l,a,n,[...c,"REPEATER_ITEM"]);return}if(this.checker.typeToString(i)!=="[]"&&!this.schema.scalars.includes(this.checker.typeToString(i))&&!b(i)){if(R(i)){if(n==="inputs")return;let l=_(i);l&&e(l,a,n,[...c,"PROMISE"]);return}if(i.isClass()){let l=i.getBaseTypes();l&&l.forEach(f=>{t.classImplementsMap.has(f)||t.classImplementsMap.set(f,[]),t.classImplementsMap.get(f).push(i)})}if(i.isUnion())if(
|
|
41
|
+
`+e),t}getTypeDocumentation=s=>{let t=s.getSymbol();return t?this.getSymbolDocumentation(t):""};extractForbiddenFieldNamesFromSchema(){let s=/^[_A-Za-z][_0-9A-Za-z]*$/,t=e=>s.test(e)?e.startsWith("__"):!0;for(let e of this.schema.types)e.fields=e.fields.filter(r=>!t(r.name));for(let e of this.schema.inputs)e.fields=e.fields.filter(r=>!t(r.name))}makeReferenceSchema(s){let t={types:new Map,inputs:new Map,classImplementsMap:new Map},e=(i,a={},n="types",c=[])=>{if(t[n].has(i))return;if(z(i)){let l=this.checker.getTypeArguments(i)[0];e(l,a,n,[...c,"REPEATER_ITEM"]);return}if(this.checker.typeToString(i)!=="[]"&&!this.schema.scalars.includes(this.checker.typeToString(i))&&!b(i)){if(R(i)){if(n==="inputs")return;let l=_(i);l&&e(l,a,n,[...c,"PROMISE"]);return}if(i.isClass()){let l=i.getBaseTypes();l&&l.forEach(f=>{t.classImplementsMap.has(f)||t.classImplementsMap.set(f,[]),t.classImplementsMap.get(f).push(i)})}if(i.isUnion())if(I(i))t[n].has(i)||t[n].set(i,{}),e(i,a,n,[...c,"ENUM"]);else if(n==="types")i.types.forEach(l=>{l.flags&v.TypeFlags.Null||l.flags&v.TypeFlags.Undefined||b(l)||e(l,a,n,[...c,l.symbol?.getName()||`N/A ${this.checker.typeToString(l)}`])});else{let l=i.getNonNullableType();l.isUnion()&&!b(l)&&(Z.warn(`Warning: Union types in input fields are not supported yet. Defaulting to the first type (${this.checker.typeToString(l)}) at path: ${c.join(" > ")}`),l=l.types[0]),e(l,a,n,[...c,"NON_NULLABLE"])}else if(q(i)){if(n==="inputs")return;if(!a.parentType)throw new Error("Cannot have a function without a parent type");let l=i.getCallSignatures()[0],f=l?.getParameters()||[],u=l?.getReturnType(),g=t[n].get(a.parentType)[a.propetyName];f.forEach(y=>{let m=this.checker.getTypeOfSymbolAtLocation(y,this.sfiFile);if(this.checker.isTupleType(m))m.target.labeledElementDeclarations.forEach((P,ze)=>{let ie=this.checker.getTypeAtLocation(P),ne=P.name.text,Te=this.checker.getSymbolAtLocation(P),be=this.getSymbolDocumentation(Te||y);g.args[ne]={type:ie,isRequired:P.initializer===void 0?void 0:!1,documentation:be},e(ie,{parentType:i},"inputs",[...c,ne])});else if(y.valueDeclaration&&v.isParameter(y.valueDeclaration)&&y.valueDeclaration.dotDotDotToken)Z.warn(`Warning: Rest parameters without explicit names are not supported. Skipping rest parameter at path: ${c.join(" > ")}.
|
|
42
42
|
|
|
43
43
|
Unsupported: \`function example(...args: any[]) { }\`.
|
|
44
44
|
Supported: \`function example(...namedArgs: [first: string, second: number]) { }\`.
|
|
45
|
-
Please provide named rest parameters to ensure proper type resolution.`);else{let h=
|
|
45
|
+
Please provide named rest parameters to ensure proper type resolution.`);else{let h=y.valueDeclaration;g.args&&(g.args[y.escapedName]={type:m,isRequired:h.initializer===void 0?void 0:!1,documentation:this.getSymbolDocumentation(y)},e(m,{parentType:i},"inputs",[...c,y.escapedName]))}}),u&&e(u,a,n,[...c,"RETURN_TYPE"])}else if(N(this.checker,i)){let l=this.checker.getIndexTypeOfType(i,v.IndexKind.Number);l&&!b(l)&&(t[n].has(i)||t[n].set(i,{}),e(l,a,n,[...c,"ITEM_TYPE"]))}else if(!b(i)){let l=ye(this.checker,i);t[n].has(i)||t[n].set(i,{}),l.forEach(f=>{let u=this.checker.getTypeOfSymbolAtLocation(f,this.sfiFile);t[n].get(i)[f.escapedName]||(t[n].get(i)[f.escapedName]={symbol:f,returnType:u,args:{}}),e(u,{propetyName:f.escapedName,parentType:i},n,[...c,f.escapedName])})}}};s.Query&&e(s.Query),s.Mutation&&e(s.Mutation),s.Subscription&&e(s.Subscription);let r=this.program.getSourceFiles();for(let i of r)v.forEachChild(i,a=>{if(v.isClassDeclaration(a)){let n=a.heritageClauses?.flatMap(c=>c.types.map(p=>p))||[];if(n.length>0)for(let c of n)t.types.has(this.checker.getTypeAtLocation(c))&&(t.classImplementsMap.set(this.checker.getTypeAtLocation(a),[this.checker.getTypeAtLocation(c)]),e(this.checker.getTypeAtLocation(a)))}});return t}};import k from"path";var H=class{program;checker;sfiFile;sfi;sfiFilePath;constructor(s){this.sfiFilePath=s;let t=this.loadTsConfigOptions(),e=S.sys.readDirectory(k.dirname(this.sfiFilePath),[".ts"],[".d.ts"]).concat([k.join(k.dirname(this.sfiFilePath),"..","pylon.d.ts")]);this.program=S.createProgram(e,t),this.checker=this.program.getTypeChecker(),this.loadSfi()}loadSfi(){let t=this.program.getSourceFiles().find(a=>k.resolve(a.fileName)===this.sfiFilePath);if(!t)throw new Error("Could not find index.ts (pylon entrypoint)");this.sfiFile=t;let e=this.checker.getSymbolAtLocation(t),i=this.checker.getExportsOfModule(e).find(a=>a.escapedName==="graphql");if(!i)throw new Error("Could not find graphql export");this.sfi=i}loadTsConfigOptions(){let s={target:S.ScriptTarget.ESNext,module:S.ModuleKind.CommonJS,strict:!0,esModuleInterop:!0,skipLibCheck:!1,forceConsistentCasingInFileNames:!0,noImplicitAny:!0,experimentalDecorators:!0},t=S.findConfigFile(k.dirname(this.sfiFilePath),S.sys.fileExists,"tsconfig.json");if(!t)return console.log("Could not find tsconfig.json"),s;let e=S.readConfigFile(t,S.sys.readFile);return e.error?(console.log("Could not read tsconfig.json",e.error),s):S.parseJsonConfigFileContent(e.config,S.sys,k.dirname(t)).options}build(){let s=this.checker.getTypeOfSymbolAtLocation(this.sfi,this.sfiFile),t=s.getProperty("Query"),e=s.getProperty("Mutation"),r=s.getProperty("Subscription"),i=t?this.checker.getTypeOfSymbolAtLocation(t,this.sfiFile):void 0,a=e?this.checker.getTypeOfSymbolAtLocation(e,this.sfiFile):void 0,n=r?this.checker.getTypeOfSymbolAtLocation(r,this.sfiFile):void 0,c=new J(this.checker,this.sfiFile,this.program);return c.parse({Query:i,Mutation:a,Subscription:n}),{typeDefs:c.toString(),schema:c.getSchema(),resolvers:c.getResolvers()}}};var X=async o=>await new U(o.sfiFilePath,o.outputFilePath).build({getBuildDefs:()=>{let e=new H(Ae.join(process.cwd(),o.sfiFilePath)).build();return{typeDefs:e.typeDefs,resolvers:e.resolvers}},onBuild:o.onBuild});import K from"path";import G from"fs/promises";import{generateClient as Re}from"@gqty/cli";import _e from"esbuild";import{buildSchema as Le}from"graphql";var he=K.join(process.cwd(),".pylon/schema.graphql"),L=K.join(process.cwd(),".pylon/client/index.ts"),ee=async({schemaChanged:o})=>{try{await G.access(he)}catch{throw new Error("Schema not found. Please run `pylon build` or `pylon dev` first.")}if(!o)try{await G.access(L);return}catch{}let s=await G.readFile(he,"utf-8"),t=Le(s);await G.mkdir(K.dirname(L),{recursive:!0}),await F(L,Be),await Re(t,{endpoint:"will-be-overwritten",frameworks:["react"],destination:L,react:!0,scalarTypes:{Number:"number",Object:"Record<string, unknown>"}}),await _e.build({entryPoints:[L],bundle:!0,outfile:K.join(process.cwd(),".pylon/client/index.js"),packages:"external",format:"esm",platform:"node"})},Be=`/**
|
|
46
46
|
* GQty: You can safely modify this file based on your needs.
|
|
47
47
|
*/
|
|
48
48
|
|
|
@@ -77,7 +77,8 @@ const queryFetcher: QueryFetcher = async function (
|
|
|
77
77
|
const response = await browserOrInternalFetch('/graphql', {
|
|
78
78
|
method: 'POST',
|
|
79
79
|
headers: {
|
|
80
|
-
'Content-Type': 'application/json'
|
|
80
|
+
'Content-Type': 'application/json',
|
|
81
|
+
'Authorization': typeof process !== 'undefined' ? process.env.PYLON_CLIENT_TOKEN : undefined,
|
|
81
82
|
},
|
|
82
83
|
body: JSON.stringify({
|
|
83
84
|
query,
|
|
@@ -139,12 +140,12 @@ export const {
|
|
|
139
140
|
}
|
|
140
141
|
})
|
|
141
142
|
|
|
142
|
-
export * from './schema.generated'`;var ge=`pylon-dev-${x}`;Me.config();Y.name("pylon-dev").description("Pylon Development CLI").version(se);Y.command("build").description("Build the Pylon Schema").action(async()=>{let o=await X({sfiFilePath:"./src/index.ts",outputFilePath:"./.pylon",onBuild:async({totalFiles:s,totalSize:t,duration:e,schemaChanged:r})=>{D.capture({distinctId:O,event:"build completed",properties:{duration:e,totalFiles:s,totalSize:t,schemaChanged:r,dependencies
|
|
143
|
+
export * from './schema.generated'`;var ge=`pylon-dev-${x}`;Me.config();Y.name("pylon-dev").description("Pylon Development CLI").version(se);Y.command("build").description("Build the Pylon Schema").action(async()=>{let o=await X({sfiFilePath:"./src/index.ts",outputFilePath:"./.pylon",onBuild:async({totalFiles:s,totalSize:t,duration:e,schemaChanged:r})=>{D.capture({distinctId:O,event:"build completed",properties:{duration:e,totalFiles:s,totalSize:t,schemaChanged:r,dependencies:E,isDevelopment:!1,$session_id:x}}),await ee({schemaChanged:r})}});await o.rebuild(),await o.dispose()});Y.command("dev").description("Start the Pylon Development Server").option("-c, --command <command>","Command to run the server","bun run .pylon/index.js").action(async o=>{await new Promise(async(s,t)=>{try{await Ue();let e=await X({sfiFilePath:"./src/index.ts",outputFilePath:"./.pylon",onBuild:async({schemaChanged:r,totalFiles:i,totalSize:a,duration:n})=>{await ee({schemaChanged:r}),D.capture({distinctId:O,event:"build completed",properties:{duration:n,totalFiles:i,totalSize:a,schemaChanged:r,dependencies:E,pylonConfig:await V(),isDevelopment:!0,$session_id:x}})}});await e.watch(),await qe(o.command),W.box(`Pylon is up and running!
|
|
143
144
|
|
|
144
145
|
Press \`Ctrl + C\` to stop the server.
|
|
145
146
|
|
|
146
147
|
Encounter any issues? Report them here:
|
|
147
148
|
https://github.com/getcronit/pylon/issues
|
|
148
149
|
|
|
149
|
-
We value your feedback\u2014help us make Pylon even better!`),process.on("SIGINT",async()=>{await e.cancel(),await te(),s()}),process.on("SIGTERM",async()=>{await e.cancel(),await te(),s()}),D.capture({distinctId:O,event:"dev server started",properties:{command:o.command,dependencies
|
|
150
|
+
We value your feedback\u2014help us make Pylon even better!`),process.on("SIGINT",async()=>{await e.cancel(),await te(),s()}),process.on("SIGTERM",async()=>{await e.cancel(),await te(),s()}),D.capture({distinctId:O,event:"dev server started",properties:{command:o.command,dependencies:E,pylonConfig:await V(),$session_id:x}})}catch(e){await te(),t(e)}})});var Ue=()=>new Promise((o,s)=>{B.connect(t=>{t?s(t):o()})}),qe=o=>new Promise((s,t)=>{B.launchBus((e,r)=>{e&&t(e),r.on("log:out",i=>{W.log(i.data.trim())}),r.on("log:err",i=>{W.error(i.data)})}),B.start({name:ge,script:o,exec_mode:"fork",instances:1,autorestart:!0,watch:["./.pylon"],restart_delay:5e3,watch_delay:1e3,ignore_watch:["node_modules"],env:{...process.env,NODE_ENV:"development"}},function(e,r){e?t(e):s()})}),te=async()=>{try{await new Promise((o,s)=>{B.delete(ge,function(t){t?s(t):o()})})}catch{}finally{B.disconnect()}};try{await Y.parseAsync(process.argv)}catch(o){W.error(o),D.captureException(o,O,{$session_id:x,dependencies:E})}finally{await D.shutdown()}
|
|
150
151
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../src/index.ts", "../package.json", "../src/analytics.ts", "../src/builder/index.ts", "../src/builder/bundler/bundler.ts", "../src/builder/bundler/plugins/inject-code-plugin.ts", "../src/builder/update-file-if-changed.ts", "../src/builder/bundler/plugins/notify-plugin.ts", "../src/builder/bundler/extract-config.ts", "../src/builder/schema/builder.ts", "../src/builder/schema/schema-parser.ts", "../src/builder/schema/types-helper.ts", "../src/builder/schema/type-definition-builder.ts", "../src/builder/build-client.ts"],
|
|
4
|
-
"sourcesContent": ["import {program, type Command} from 'commander'\n\nimport consola from 'consola'\nimport dotenv from 'dotenv'\nimport pm2 from 'pm2'\nimport {version} from '../package.json'\nimport {\n analytics,\n distinctId,\n sessionId,\n dependencies,\n readPylonConfig\n} from './analytics'\nimport {build} from './builder'\nimport {buildClient} from './builder/build-client'\n\nconst processName = `pylon-dev-${sessionId}`\n\ndotenv.config()\n\nprogram.name('pylon-dev').description('Pylon Development CLI').version(version)\n\nprogram\n .command('build')\n .description('Build the Pylon Schema')\n .action(async () => {\n const ctx = await build({\n sfiFilePath: './src/index.ts',\n outputFilePath: './.pylon',\n onBuild: async ({totalFiles, totalSize, duration, schemaChanged}) => {\n analytics.capture({\n distinctId,\n event: 'build completed',\n properties: {\n duration,\n totalFiles,\n totalSize,\n schemaChanged,\n dependencies,\n isDevelopment: false,\n $session_id: sessionId\n }\n })\n\n await buildClient({schemaChanged})\n }\n })\n\n await ctx.rebuild()\n await ctx.dispose()\n })\n\nprogram\n .command('dev')\n .description('Start the Pylon Development Server')\n .option(\n '-c, --command <command>',\n 'Command to run the server',\n 'bun run .pylon/index.js'\n )\n .action(async options => {\n await new Promise<void>(async (resolve, reject) => {\n try {\n await connectPM2()\n\n const ctx = await build({\n sfiFilePath: './src/index.ts',\n outputFilePath: `./.pylon`,\n onBuild: async ({schemaChanged, totalFiles, totalSize, duration}) => {\n await buildClient({schemaChanged})\n\n analytics.capture({\n distinctId,\n event: 'build completed',\n properties: {\n duration,\n totalFiles,\n totalSize,\n schemaChanged,\n dependencies,\n pylonConfig: await readPylonConfig(),\n isDevelopment: true,\n $session_id: sessionId\n }\n })\n }\n })\n\n await ctx.watch()\n\n await startDevServer(options.command)\n\n consola.box(`Pylon is up and running!\n \nPress \\`Ctrl + C\\` to stop the server.\n \nEncounter any issues? Report them here:\nhttps://github.com/getcronit/pylon/issues\n \nWe value your feedback\u2014help us make Pylon even better!`)\n\n process.on('SIGINT', async () => {\n await ctx.cancel()\n await stopDevServerAndDisconnect()\n\n resolve()\n })\n\n process.on('SIGTERM', async () => {\n await ctx.cancel()\n await stopDevServerAndDisconnect()\n\n resolve()\n })\n\n analytics.capture({\n distinctId,\n event: 'dev server started',\n properties: {\n command: options.command,\n dependencies,\n pylonConfig: await readPylonConfig(),\n $session_id: sessionId\n }\n })\n } catch (error) {\n await stopDevServerAndDisconnect()\n reject(error)\n }\n })\n })\n\nconst connectPM2 = () => {\n return new Promise<void>((resolve, reject) => {\n pm2.connect(err => {\n if (err) {\n reject(err)\n } else {\n resolve()\n }\n })\n })\n}\n\nconst startDevServer = (command: string) => {\n return new Promise<void>((resolve, reject) => {\n pm2.launchBus((err, bus) => {\n if (err) {\n reject(err)\n }\n\n bus.on('log:out', data => {\n consola.log(data.data.trim())\n })\n\n bus.on('log:err', data => {\n consola.error(data.data)\n })\n })\n\n pm2.start(\n {\n name: processName,\n script: command,\n exec_mode: 'fork',\n instances: 1,\n autorestart: true,\n watch: ['./.pylon'],\n restart_delay: 5000,\n watch_delay: 1000 as any,\n ignore_watch: ['node_modules'],\n env: {\n ...process.env,\n NODE_ENV: 'development'\n }\n } as any,\n function (err, apps) {\n if (err) {\n reject(err)\n } else {\n resolve()\n }\n }\n )\n })\n}\n\nconst stopDevServerAndDisconnect = async () => {\n try {\n await new Promise<void>((resolve, reject) => {\n pm2.delete(processName, function (err) {\n if (err) {\n reject(err)\n } else {\n resolve()\n }\n })\n })\n } catch {\n } finally {\n pm2.disconnect()\n }\n}\n\ntry {\n await program.parseAsync(process.argv)\n} catch (error) {\n consola.error(error)\n\n analytics.captureException(error, distinctId, {\n $session_id: sessionId,\n dependencies\n })\n} finally {\n await analytics.shutdown()\n}\n", "{\n \"name\": \"@getcronit/pylon-dev\",\n \"type\": \"module\",\n \"version\": \"2.0.0-canary-20250407132843.ea8a1401ef28f146aae21fca3098b60183e44b81\",\n \"description\": \"CLI for creating a Pylon\",\n \"scripts\": {\n \"build\": \"rimraf ./dist && esbuild ./src/index.ts --bundle --platform=node --target=node18 --format=esm --minify --outdir=./dist --sourcemap=linked --packages=external\"\n },\n \"bin\": {\n \"pylon\": \"./dist/index.js\"\n },\n \"files\": [\n \"dist\"\n ],\n \"author\": \"Nico Schett <nico.schett@cronit.io>\",\n \"license\": \"Apache-2.0\",\n \"repository\": {\n \"type\": \"git\",\n \"url\": \"https://github.com/getcronit/pylon.git\",\n \"directory\": \"packages/create-pylon\"\n },\n \"homepage\": \"https://pylon.cronit.io\",\n \"dependencies\": {\n \"@gqty/cli\": \"^4.2.5\",\n \"commander\": \"^12.1.0\",\n \"conf\": \"^13.1.0\",\n \"consola\": \"^3.2.3\",\n \"dotenv\": \"^16.4.5\",\n \"esbuild\": \"^0.23.1\",\n \"esbuild-plugin-tsc\": \"^0.4.0\",\n \"pm2\": \"^5.4.3\",\n \"posthog-node\": \"^4.10.1\"\n },\n \"publishConfig\": {\n \"access\": \"public\"\n },\n \"engines\": {\n \"node\": \">=18.0.0\"\n },\n \"devDependencies\": {\n \"typescript\": \"^5.7.3\"\n },\n \"peerDependencies\": {\n \"@getcronit/pylon\": \"workspace:3.0.0-canary-20250407132843.ea8a1401ef28f146aae21fca3098b60183e44b81\",\n \"graphql\": \"^16.9.0\"\n }\n}\n", "import {PostHog} from 'posthog-node'\nimport Conf from 'conf'\nimport {readFileSync} from 'fs'\nimport {randomUUID} from 'crypto'\n\nconst schema = {\n distinctId: {\n type: 'string',\n default: randomUUID()\n }\n}\n\nconst config = new Conf<{\n distinctId: string\n}>({\n projectName: 'pylon',\n schema\n})\n\nexport const distinctId = config.get('distinctId')\nexport const sessionId = randomUUID()\n\nexport const analytics = new PostHog(\n 'phc_KN4qCOcCdkXp6sHLIuMWGRfzZWuNht69oqv5Kw5rGxj',\n {\n host: 'https://eu.i.posthog.com',\n disabled: process.env.PYLON_DISABLE_TELEMETRY === 'true'\n }\n)\n\nconst getPylonDependencies = () => {\n // Read the package.json file in the current directory\n let packageJson\n\n try {\n packageJson = JSON.parse(readFileSync('./package.json', 'utf8'))\n } catch (error) {\n packageJson = {}\n }\n\n // Extract the dependencies\n const dependencies: object = packageJson.dependencies || {}\n const devDependencies: object = packageJson.devDependencies || {}\n const peerDependencies: object = packageJson.peerDependencies || {}\n\n return {dependencies, devDependencies, peerDependencies}\n}\n\nexport const dependencies = getPylonDependencies()\n\nexport const readPylonConfig = async () => {\n try {\n const config = await import(`${process.cwd()}/.pylon/config.js`)\n const data = config.config\n\n // Sanitize the config values\n const sanitizedData = JSON.parse(JSON.stringify(data)) as object\n\n // Check if the config is a empty object\n if (Object.keys(sanitizedData).length === 0) {\n return false\n }\n\n return sanitizedData\n } catch (error) {\n return false\n }\n}\n", "import path from 'path'\nimport {Bundler} from './bundler/bundler.js'\nimport {SchemaBuilder} from './schema/builder.js'\n\nexport interface BuildOptions {\n sfiFilePath: string\n outputFilePath: string\n onBuild?: (output: {\n totalFiles: number\n totalSize: number\n schemaChanged: boolean\n duration: number\n }) => void\n}\n\nexport {SchemaBuilder}\n\nexport const build = async (options: BuildOptions) => {\n const bundler = new Bundler(options.sfiFilePath, options.outputFilePath)\n\n return await bundler.build({\n getBuildDefs: () => {\n const builder = new SchemaBuilder(\n path.join(process.cwd(), options.sfiFilePath)\n )\n\n const built = builder.build()\n\n const typeDefs = built.typeDefs\n\n return {\n typeDefs: typeDefs,\n resolvers: built.resolvers\n }\n },\n onBuild: options.onBuild\n })\n}\n", "// bundler.ts\nimport esbuild, {context} from 'esbuild'\nimport esbuildPluginTsc from 'esbuild-plugin-tsc'\nimport type {PylonConfig, Plugin} from '@getcronit/pylon'\n\nimport path from 'path'\nimport fs from 'fs/promises'\nimport {\n InjectCodePluginOptions,\n injectCodePlugin\n} from './plugins/inject-code-plugin'\nimport {NotifyPluginOptions, notifyPlugin} from './plugins/notify-plugin'\nimport {updateFileIfChanged} from '../update-file-if-changed'\nimport {extractConfig} from './extract-config'\n\nexport interface BundlerBuildOptions {\n getBuildDefs: InjectCodePluginOptions['getBuildDefs']\n onBuild?: NotifyPluginOptions['onBuild']\n}\n\nexport class Bundler {\n sfiFilePath: string\n outputDir: string\n\n constructor(sfiFilePath: string, outputDir: string = './.pylon') {\n this.sfiFilePath = sfiFilePath\n this.outputDir = outputDir\n }\n\n private async initBuildPlugins(args: {onBuild: () => void}) {\n const configPath = path.join(process.cwd(), this.outputDir, 'config.js')\n\n await extractConfig(this.sfiFilePath, configPath)\n\n let config: PylonConfig | undefined\n try {\n let configModule = await import(configPath)\n\n config = configModule.config\n } catch (e) {\n console.error('Error loading config', e)\n }\n\n const buildContexts: ReturnType<NonNullable<Plugin['build']>>[] = []\n\n const plugins = config?.plugins || []\n\n for (const plugin of plugins) {\n if (plugin.build) {\n const ctx = plugin.build({onBuild: args.onBuild})\n\n buildContexts.push(ctx)\n }\n }\n\n return buildContexts\n }\n\n public async build(options: BundlerBuildOptions) {\n const inputPath = path.join(process.cwd(), this.sfiFilePath)\n const dir = path.join(process.cwd(), this.outputDir)\n\n // Create directory if it doesn't exist\n await fs.mkdir(dir, {recursive: true})\n\n const writeOnEndPlugin: esbuild.Plugin = {\n name: 'write-on-end',\n setup(build) {\n build.onEnd(async result => {\n await Promise.all(\n result.outputFiles!.map(async file => {\n await fs.mkdir(path.dirname(file.path), {recursive: true})\n await updateFileIfChanged(file.path, file.text)\n })\n )\n })\n }\n }\n\n const ctx = await context({\n write: false,\n logLevel: 'silent',\n metafile: true,\n entryPoints: [inputPath],\n outdir: dir,\n bundle: true,\n format: 'esm',\n sourcemap: 'inline',\n packages: 'external',\n\n plugins: [\n notifyPlugin({\n dir,\n onBuild: async output => {\n await options.onBuild?.(output)\n }\n }),\n injectCodePlugin({\n getBuildDefs: options.getBuildDefs,\n outputDir: this.outputDir\n }),\n esbuildPluginTsc({\n tsconfigPath: path.join(process.cwd(), 'tsconfig.json')\n }),\n writeOnEndPlugin\n ]\n })\n\n await ctx.rebuild()\n\n const pluginCtxs = await this.initBuildPlugins({\n onBuild: () => {\n options.onBuild?.({\n totalFiles: 0,\n totalSize: 0,\n schemaChanged: false,\n duration: 0\n })\n }\n })\n\n await Promise.all(\n pluginCtxs.map(async c => {\n await (await c).rebuild()\n })\n )\n\n return {\n watch: async () => {\n for (const ctx of pluginCtxs) {\n const c = await ctx\n\n await c.watch()\n }\n\n return await ctx.watch()\n },\n rebuild: async () => {\n for (const ctx of pluginCtxs) {\n const c = await ctx\n\n await c.rebuild()\n }\n\n await ctx.rebuild()\n },\n dispose: async () => {\n for (const ctx of pluginCtxs) {\n const c = await ctx\n\n await c.dispose()\n }\n\n await ctx.dispose()\n },\n cancel: async () => {\n for (const ctx of pluginCtxs) {\n const c = await ctx\n\n await c.cancel()\n }\n\n await ctx.cancel()\n }\n }\n }\n}\n", "import {Plugin} from 'esbuild'\nimport path from 'path'\nimport fs from 'fs/promises'\nimport {updateFileIfChanged} from '../../update-file-if-changed'\n\nexport interface InjectCodePluginOptions {\n getBuildDefs: () => {\n typeDefs: string\n resolvers: Record<\n string,\n {\n __resolveType?: (obj: any) => string\n }\n >\n }\n outputDir: string\n}\n\nexport const injectCodePlugin = ({\n getBuildDefs,\n outputDir\n}: InjectCodePluginOptions): Plugin => ({\n name: 'inject-code',\n setup(build) {\n build.onLoad(\n {filter: /src[\\/\\\\]index\\.ts$/, namespace: 'file'},\n async args => {\n // Convert to relative path to ensure we match `src/index.ts` at root\n const relativePath = path.relative(process.cwd(), args.path)\n\n if (relativePath !== path.join('src', 'index.ts')) {\n return\n }\n\n const {typeDefs, resolvers} = getBuildDefs()\n\n const preparedResolvers = prepareObjectInjection(resolvers)\n\n const contents = await fs.readFile(args.path, 'utf-8')\n\n // Write the typeDefs to a file\n const typeDefsPath = path.join(\n process.cwd(),\n outputDir,\n 'schema.graphql'\n )\n\n await updateFileIfChanged(typeDefsPath, typeDefs)\n\n // Write base resolvers to a file\n\n const resolversPath = path.join(\n process.cwd(),\n outputDir,\n 'resolvers.js'\n )\n\n await updateFileIfChanged(\n resolversPath,\n `export const resolvers = ${preparedResolvers}`\n )\n\n return {\n loader: 'ts',\n contents:\n `import {executeConfig} from \"@getcronit/pylon\"\n \n const __internalPylonConfig = await import(\".pylon/config.js\")\n await executeConfig(__internalPylonConfig.config)\n\n \n` +\n contents +\n `\n import {handler as __internalPylonHandler} from \"@getcronit/pylon\"\n\n app.use(__internalPylonHandler({\n typeDefs: ${JSON.stringify(typeDefs)},\n graphql,\n resolvers: ${preparedResolvers},\n }))\n `\n }\n }\n )\n }\n})\n\nfunction prepareObjectInjection(obj: object) {\n const entries = Object.entries(obj).map(([key, value]) => {\n if (value === undefined) {\n return undefined\n } else if (typeof value === 'string') {\n return `${key}:${value}`\n } else if (typeof value === 'function') {\n return `${key}:${value.toString()}`\n } else if (typeof value === 'object' && !Array.isArray(value)) {\n return `${key}:${prepareObjectInjection(value)}`\n } else {\n return `${key}:${JSON.stringify(value)}`\n }\n })\n\n return `{${entries.join(',')}}`\n}\n", "import fs from 'fs/promises'\n\nexport async function updateFileIfChanged(path: string, newContent: string) {\n try {\n const currentContent = await fs.readFile(path, 'utf8')\n if (currentContent === newContent) {\n return false // No update needed\n }\n } catch (err: any) {\n if (err.code !== 'ENOENT') throw err // Ignore file not found error\n }\n\n await fs.writeFile(path, newContent, 'utf8')\n return true // File created or updated\n}\n", "import {Plugin} from 'esbuild'\nimport path from 'path'\nimport fs from 'fs/promises'\nimport consola from 'consola'\n\nexport interface NotifyPluginOptions {\n onBuild?: (output: {\n totalFiles: number\n totalSize: number\n schemaChanged: boolean\n duration: number\n }) => Promise<void> | void\n dir: string\n}\n\nexport const notifyPlugin = ({dir, onBuild}: NotifyPluginOptions): Plugin => ({\n name: 'notify',\n async setup(build) {\n const loadSchema = async () => {\n const schemaPath = path.join(dir, 'schema.graphql')\n\n try {\n await fs.access(schemaPath)\n } catch {\n return null\n }\n\n return await fs.readFile(schemaPath, 'utf-8')\n }\n\n let cachedSchema: string | null = await loadSchema()\n\n let startTime = Date.now()\n build.onStart(async () => {\n startTime = Date.now()\n consola.start('[Pylon]: Building...')\n })\n\n build.onEnd(async result => {\n if (result.errors.length > 0) {\n for (const error of result.errors) {\n consola.error(`[Pylon]: ${error.text}\n${\n error.location\n ? `at ${error.location.file}:${error.location.line}:${error.location.column}`\n : ''\n}\n${error.detail ? error.detail : ''}`)\n }\n\n throw new Error('Failed to build Pylon')\n }\n\n if (result.warnings.length > 0) {\n for (const warning of result.warnings) {\n consola.warn(warning)\n }\n }\n\n const duration = Date.now() - startTime\n\n const totalFiles = Object.keys(result.metafile!.inputs).length\n\n const totalSize = Object.values(result.metafile!.outputs).reduce(\n (acc, output) => acc + output.bytes,\n 0\n )\n\n const latestSchema = await loadSchema()\n\n consola.success(`[Pylon]: Built in ${duration}ms`)\n\n const schemaChanged = latestSchema !== cachedSchema\n\n if (schemaChanged) {\n consola.info('[Pylon]: Schema updated')\n\n cachedSchema = latestSchema\n }\n\n if (onBuild) {\n await onBuild({\n totalFiles,\n totalSize,\n schemaChanged,\n duration\n })\n }\n })\n }\n})\n", "import esbuild from 'esbuild'\nimport {readFileSync} from 'fs'\nimport {dirname, resolve} from 'path'\nimport ts from 'typescript'\n\n/**\n * Extracts the `config` export from a TypeScript file and writes it to `.pylon/config.js`\n * @param inputFile The path to the source file (e.g., `server.ts`)\n * @param outputFile The path to save the extracted config (default: `.pylon/config.js`)\n */\nexport async function extractConfig(\n inputFile: string,\n outputFile: string = '.pylon/config.js'\n) {\n const filePath = resolve(inputFile)\n const source = readFileSync(filePath, 'utf8')\n const sourceFile = ts.createSourceFile(\n filePath,\n source,\n ts.ScriptTarget.ESNext,\n true\n )\n\n let configCode = ''\n const importStatements: string[] = []\n\n // Iterate over the AST nodes\n ts.forEachChild(sourceFile, node => {\n // Collect import statements\n if (ts.isImportDeclaration(node)) {\n const importText = node.getFullText(sourceFile).trim()\n importStatements.push(importText)\n }\n\n // Find `export const config = {...}`\n if (\n ts.isVariableStatement(node) &&\n node.declarationList.declarations.length > 0\n ) {\n const declaration = node.declarationList.declarations[0]\n if (\n ts.isIdentifier(declaration.name) &&\n declaration.name.text === 'config' &&\n declaration.initializer\n ) {\n configCode = `export const config = ${declaration.initializer.getText(\n sourceFile\n )}`\n }\n }\n })\n\n if (!configCode) {\n configCode = 'export const config = {}'\n }\n\n // Write extracted config to file\n const finalConfig = [...importStatements, configCode].join('\\n\\n')\n\n await esbuild.build({\n stdin: {\n contents: finalConfig,\n resolveDir: dirname(filePath),\n sourcefile: filePath,\n loader: 'ts'\n },\n bundle: true,\n format: 'esm',\n outfile: outputFile,\n packages: 'external'\n })\n}\n", "import ts from 'typescript'\nimport {SchemaParser} from './schema-parser'\nimport path from 'path'\n\nexport class SchemaBuilder {\n private program: ts.Program\n private checker: ts.TypeChecker\n private sfiFile!: ts.SourceFile\n private sfi!: ts.Symbol\n private sfiFilePath: string\n\n constructor(sfiFilePath: string) {\n this.sfiFilePath = sfiFilePath\n\n const tsConfigOptions = this.loadTsConfigOptions()\n\n const filesInSfiDir = ts.sys\n .readDirectory(path.dirname(this.sfiFilePath), ['.ts'], ['.d.ts'])\n .concat([path.join(path.dirname(this.sfiFilePath), '..', 'pylon.d.ts')])\n\n this.program = ts.createProgram(filesInSfiDir, tsConfigOptions)\n\n this.checker = this.program.getTypeChecker()\n\n this.loadSfi()\n }\n\n private loadSfi() {\n const sourceFiles = this.program.getSourceFiles()\n\n const file = sourceFiles.find(\n file => path.resolve(file.fileName) === this.sfiFilePath\n )\n\n if (!file) {\n throw new Error('Could not find index.ts (pylon entrypoint)')\n }\n\n this.sfiFile = file\n\n const sfiFileSymbol = this.checker.getSymbolAtLocation(file)!\n const sfiFileExports = this.checker.getExportsOfModule(sfiFileSymbol!)\n const sfiFileDefaultExport = sfiFileExports.find(\n exportSymbol => exportSymbol.escapedName === 'graphql'\n )\n\n if (!sfiFileDefaultExport) {\n throw new Error('Could not find graphql export')\n }\n\n this.sfi = sfiFileDefaultExport\n }\n\n private loadTsConfigOptions() {\n const defaultOptions: ts.CompilerOptions = {\n target: ts.ScriptTarget.ESNext,\n module: ts.ModuleKind.CommonJS,\n strict: true,\n esModuleInterop: true,\n skipLibCheck: false,\n forceConsistentCasingInFileNames: true,\n noImplicitAny: true,\n experimentalDecorators: true\n }\n\n // Find the tsconfig.json file\n const configPath = ts.findConfigFile(\n path.dirname(this.sfiFilePath), // Directory to start searching from\n ts.sys.fileExists, // Function to check if a file exists\n 'tsconfig.json' // File name to search for\n )\n\n if (!configPath) {\n console.log('Could not find tsconfig.json')\n return defaultOptions\n }\n\n // Read the tsconfig.json file\n const configFile = ts.readConfigFile(configPath, ts.sys.readFile)\n\n if (configFile.error) {\n console.log('Could not read tsconfig.json', configFile.error)\n return defaultOptions\n }\n\n // Parse the tsconfig.json file\n const parsedConfig = ts.parseJsonConfigFileContent(\n configFile.config,\n ts.sys,\n path.dirname(configPath)\n )\n\n return parsedConfig.options\n }\n\n public build() {\n const sfiType = this.checker.getTypeOfSymbolAtLocation(\n this.sfi,\n this.sfiFile\n )\n\n // const plainResolversProperty = sfiType.getProperty('plainResolvers')\n\n // if (!plainResolversProperty) {\n // throw new Error('Could not find plainResolvers property')\n // }\n\n // const plainResolversType = this.checker.getTypeOfSymbolAtLocation(\n // plainResolversProperty,\n // this.sfiFile\n // )\n\n const queryProperty = sfiType.getProperty('Query')\n const mutationProperty = sfiType.getProperty('Mutation')\n const subscriptionProperty = sfiType.getProperty('Subscription')\n\n const queryType = queryProperty\n ? this.checker.getTypeOfSymbolAtLocation(queryProperty, this.sfiFile)\n : undefined\n const mutationType = mutationProperty\n ? this.checker.getTypeOfSymbolAtLocation(mutationProperty, this.sfiFile)\n : undefined\n const subscriptionType = subscriptionProperty\n ? this.checker.getTypeOfSymbolAtLocation(\n subscriptionProperty,\n this.sfiFile\n )\n : undefined\n\n const parser = new SchemaParser(this.checker, this.sfiFile, this.program)\n\n parser.parse({\n Query: queryType,\n Mutation: mutationType,\n Subscription: subscriptionType\n })\n\n return {\n typeDefs: parser.toString(),\n schema: parser.getSchema(),\n resolvers: parser.getResolvers()\n }\n }\n}\n", "import ts from 'typescript'\nimport {\n getPromiseType,\n getPublicPropertiesOfType,\n isPrimitiveUnion,\n isFunction,\n isList,\n isPrimitive,\n isPromise,\n isSubscriptionRepeater\n} from './types-helper.js'\nimport {\n TypeDefinitionBuilder,\n Union as _Union,\n Enum as _Enum\n} from './type-definition-builder.js'\nimport consola from 'consola'\n\ntype Union = _Union & {\n description: string\n __resolveType?: (obj: any) => string\n}\n\ntype Interface = {\n name: string\n description: string\n fields: Array<Field>\n __resolveType?: (obj: any) => string\n}\n\ntype Enum = _Enum & {\n description: string\n}\n\ninterface TypeDefinition {\n name: string\n isList: boolean\n isRequired: boolean\n description: string\n}\n\ninterface Field {\n name: string\n type: TypeDefinition\n}\n\ninterface Input {\n name: string\n description: string\n fields: Array<{\n name: string\n type: TypeDefinition\n }>\n}\n\ninterface Type {\n name: string\n description: string\n fields: Array<\n Field & {\n args: Array<{\n name: string\n type: TypeDefinition\n }>\n }\n >\n implements?: Array<string>\n rawType: ts.Type\n}\n\nexport interface Schema {\n types: Array<Type>\n inputs: Array<Input>\n interfaces: Array<Interface>\n unions: Array<Union>\n enums: Array<Enum>\n scalars: Array<string>\n}\n\ntype ReferenceSchemaType = {\n returnType: ts.Type\n symbol: ts.Symbol\n args: {\n // value needs to be inputs type\n [key: string]: {\n type: ts.Type\n isRequired?: boolean\n documentation: string\n }\n }\n}\n\ninterface ReferenceSchema {\n types: Map<\n ts.Type,\n {\n [key: string]: ReferenceSchemaType\n }\n >\n classImplementsMap: Map<ts.Type, ts.Type[]>\n inputs: ReferenceSchema['types']\n}\n\ninterface Index {\n Query?: ts.Type\n Mutation?: ts.Type\n Subscription?: ts.Type\n}\n\nexport class SchemaParser {\n private schema: Schema\n private checker: ts.TypeChecker\n private program: ts.Program\n private sfiFile: ts.SourceFile\n private typeDefinitionBuilder: TypeDefinitionBuilder\n\n constructor(\n checker: ts.TypeChecker,\n sfiFile: ts.SourceFile,\n program: ts.Program\n ) {\n this.schema = {\n types: [],\n inputs: [],\n interfaces: [],\n unions: [],\n enums: [],\n scalars: [\n 'ID',\n 'Int',\n 'Float',\n 'Number',\n 'Any',\n 'Void',\n 'Object',\n 'File',\n 'Date',\n 'JSON',\n 'String',\n 'Boolean'\n ]\n }\n\n this.checker = checker\n this.sfiFile = sfiFile\n this.program = program\n\n this.typeDefinitionBuilder = new TypeDefinitionBuilder(checker, this.schema)\n }\n\n public parse(index: Index) {\n const referenceSchema = this.makeReferenceSchema(index)\n\n for (const [type, properties] of referenceSchema.types) {\n let typeName: string | undefined = undefined\n\n if (index.Query === type) {\n typeName = 'Query'\n } else if (index.Mutation === type) {\n typeName = 'Mutation'\n } else if (index.Subscription === type) {\n typeName = 'Subscription'\n }\n\n this.processSchemaReference(type, properties, typeName, 'types')\n }\n\n for (const [type, properties] of referenceSchema.inputs) {\n this.processSchemaReference(type, properties, undefined, 'inputs')\n }\n\n this.extractForbiddenFieldNamesFromSchema()\n\n this.schema.unions = this.typeDefinitionBuilder\n .getUnions()\n .map((union): Union => {\n return {\n ...union,\n description: this.getTypeDocumentation(union.rawType)\n }\n })\n\n this.schema.enums = this.typeDefinitionBuilder\n .getEnums()\n .map((enumType): Enum => {\n return {\n ...enumType,\n description: this.getTypeDocumentation(enumType.rawType)\n }\n })\n\n // Remove `types` and `inputs` that are represented as enums\n this.schema.types = this.schema.types.filter(type => {\n return !this.schema.enums.find(e => e.name === type.name)\n })\n\n this.schema.inputs = this.schema.inputs.filter(input => {\n return !this.schema.enums.find(e => e.name === input.name)\n })\n\n // Go through all unions and check if it could be an interface\n\n this.schema.unions.forEach(union => {\n const interfaceUnion = this.checkIfInterfaceIsPossibleForUnion(\n union,\n this.schema.types\n )\n\n if (interfaceUnion) {\n this.schema.interfaces.push(interfaceUnion)\n\n // Remove the union from the types\n this.schema.unions = this.schema.unions.filter(\n type => type.name !== union.name\n )\n\n // Add the `implements` field to the types that implement the interface\n this.schema.types.map(type => {\n if (union.types.includes(type.name)) {\n if (!type.implements) {\n type.implements = []\n }\n\n type.implements.push(interfaceUnion.name)\n\n return type\n }\n })\n }\n })\n\n // // Go through all types and check if a type is an interface\n\n for (const [\n classType,\n implementingTypes\n ] of referenceSchema.classImplementsMap) {\n this.schema.types.map(type => {\n const schemaType = this.schema.types.find(t => t.rawType === classType)\n\n if (schemaType) {\n schemaType.implements = Array.from(\n new Set([\n ...(schemaType.implements || []),\n ...implementingTypes.map(t => this.checker.typeToString(t))\n ])\n )\n }\n\n return type\n })\n\n // Add the implementing types to the interfaces\n for (const implementingType of implementingTypes) {\n const schemaType = this.schema.types.find(\n t => t.rawType === implementingType\n )\n\n // Remove the implementing type from the types and add it to the interfaces\n\n if (schemaType) {\n this.schema.interfaces.push({\n name: this.checker.typeToString(implementingType),\n description: this.getTypeDocumentation(implementingType),\n fields: schemaType.fields\n })\n\n this.schema.types = this.schema.types.filter(\n type => type.rawType !== implementingType\n )\n }\n }\n }\n\n // Remove `Void` fields from types when they have a implementation or are part of a union\n this.schema.types = this.schema.types.map(type => {\n if (\n type.implements ||\n this.schema.unions.find(u => u.types.includes(type.name))\n ) {\n // Remove Void fields\n type.fields = type.fields.filter(field => {\n return field.type.name !== 'Void'\n })\n }\n\n return type\n })\n\n // Generate the __resolveType function for the unions\n this.schema.unions = this.schema.unions.map(union => {\n return {\n ...union,\n __resolveType: this.getResolveTypeForUnionOrInterface(\n union,\n this.schema.types\n )\n }\n })\n\n // Generate the __resolveType function for the interfaces\n this.schema.interfaces = this.schema.interfaces.map(intf => {\n return {\n ...intf,\n __resolveType: this.getResolveTypeForUnionOrInterface(\n intf,\n this.schema.types\n )\n }\n })\n }\n\n private checkIfInterfaceIsPossibleForUnion(\n union: Union,\n types: Array<Type>\n ): Interface | null {\n const unionTypes = union.types.map(t => {\n const type = types.find(type => type.name === t)\n\n if (!type) {\n throw new Error(`Type ${t} not found`)\n }\n\n return type\n })\n\n const baseType = unionTypes[0]\n\n // Check which fields are common in all types\n\n const commonFields = baseType.fields.filter(field => {\n return unionTypes.every(type => {\n return type.fields.some(\n f => JSON.stringify(f) === JSON.stringify(field)\n )\n })\n })\n\n if (commonFields.length > 0) {\n return {\n name: union.name,\n description: union.description,\n fields: commonFields\n }\n }\n\n return null\n }\n\n private getResolveTypeForUnionOrInterface(\n entity: Union | Interface,\n types: Array<Type>\n ) {\n const entityTypes =\n 'types' in entity\n ? types.filter(t => entity.types.includes(t.name))\n : types.filter(t => t.implements?.includes(entity.name))\n\n // Sort fieldTypes by the number of fields in descending order.\n // This prioritizes types with more properties, which are more likely\n // to match a given node, thus reducing ambiguity in type resolution.\n entityTypes.sort((a, b) => b.fields.length - a.fields.length)\n\n // Check for unions with the exact same fields\n const fieldSignatures = new Map<string, Type>()\n\n entityTypes.forEach(type => {\n // Create a signature based on sorted field names\n const fieldNames = type.fields\n .map(field => field.name)\n .sort()\n .join(', ')\n\n if (fieldSignatures.has(fieldNames)) {\n const existingType = fieldSignatures.get(fieldNames)\n consola.warn(\n `Warning: Union types \"${type.name}\" and \"${existingType?.name}\" have the same fields: [${fieldNames}]. ` +\n `\\nConsider differentiating these types by adding unique fields or using different type names.` +\n `\\nThis may cause ambiguity in type resolution.`\n )\n } else {\n fieldSignatures.set(fieldNames, type)\n }\n })\n\n const checks = entityTypes.map(type => {\n const fields = type.fields\n\n const fieldChecks = fields\n .map(field => `\"${field.name}\" in node`)\n .join(' && ')\n\n return `if (${fieldChecks}) {return '${type.name}'};`\n })\n\n const str = `function resolveType(node) { if (node && typeof node === 'object') { ${checks.join(\n ' '\n )} } }`\n\n return new Function('return ' + str)()\n }\n\n public toString() {\n const {typeDefinitionToGraphQLType} = this.typeDefinitionBuilder\n\n const addDescription = (description: string) => {\n if (!description) return ''\n\n return `\"\"\"\\n${description}\\n\"\"\"\\n`\n }\n\n // build a valid GraphQL schema string from the schema object\n let schemaString = ''\n\n // loop over the input objects in the schema\n for (const input of this.schema.inputs) {\n // add the input object to the schema string\n\n schemaString += addDescription(input.description)\n schemaString += `input ${input.name} {\\n`\n\n // add a nop field to the input object if it has no fields\n if (input.fields.length === 0) {\n schemaString += `\\t_ : String\\n`\n }\n\n // loop over the fields in the input object\n for (const field of input.fields) {\n // add the field to the input object in the schema string\n schemaString += `${addDescription(field.type.description)}`\n schemaString += `\\t${field.name}: ${typeDefinitionToGraphQLType(\n field.type\n )}\\n`\n }\n\n schemaString += `}\\n`\n }\n\n // loop over the type objects in the schema\n for (const type of this.schema.types) {\n if (type.fields.length === 0) continue\n\n // add the type object to the schema string\n schemaString += addDescription(type.description)\n schemaString += `type ${type.name}`\n if (type.implements) {\n schemaString += ` implements ${type.implements.join(' & ')}`\n }\n schemaString += ` {\\n`\n\n\n // loop over the fields in the type object\n for (const field of type.fields) {\n // build the argument list for the field if there is at least one argument\n let args = ''\n\n if (field.args.length > 0) {\n args = `(${field.args\n .map(\n arg =>\n `${addDescription(arg.type.description)}${\n arg.name\n }: ${typeDefinitionToGraphQLType(arg.type)}`\n )\n .join(', ')})`\n }\n\n // add the field to the type object in the schema string\n schemaString += `${addDescription(field.type.description)}`\n schemaString += `${field.name}${args}: ${typeDefinitionToGraphQLType(\n field.type\n )}\\n`\n }\n\n schemaString += `}\\n`\n }\n\n // loop over the union objects in the schema\n for (const union of this.schema.unions) {\n // add the union object to the schema string\n schemaString += addDescription(union.description)\n schemaString += `union ${union.name} = ${union.types.join(' | ')}\\n`\n }\n\n // loop over the interface objects in the schema\n for (const intf of this.schema.interfaces) {\n // add the interface object to the schema string\n schemaString += addDescription(intf.description)\n schemaString += `interface ${intf.name} {\\n`\n\n // loop over the fields in the interface object\n for (const field of intf.fields) {\n // add the field to the interface object in the schema string\n schemaString += `${addDescription(field.type.description)}`\n schemaString += `${field.name}: ${typeDefinitionToGraphQLType(\n field.type\n )}\\n`\n }\n\n schemaString += `}\\n`\n }\n\n // loop over the scalar objects in the schema\n for (const scalar of this.schema.scalars) {\n // add the scalar object to the schema string\n schemaString += `scalar ${scalar}\\n`\n }\n\n // loop over the enum objects in the schema\n for (const enumType of this.schema.enums) {\n // add the enum object to the schema string\n schemaString += addDescription(enumType.description)\n schemaString += `enum ${enumType.name} {\\n`\n\n // loop over the values in the enum object\n for (const value of enumType.values) {\n // add the value to the enum object in the schema string\n schemaString += `\\t${value}\\n`\n }\n\n schemaString += `}\\n`\n }\n\n // return the schema string\n return schemaString\n }\n\n public getSchema() {\n return this.schema\n }\n\n public getResolvers() {\n // Get union and interface resolvers\n\n const resolvers: Record<\n string,\n {\n __resolveType?: (obj: any) => string\n }\n > = {}\n\n // loop over the union objects in the schema\n for (const union of this.schema.unions) {\n resolvers[union.name] = {\n __resolveType: union.__resolveType\n }\n }\n\n // loop over the interface objects in the schema\n for (const intf of this.schema.interfaces) {\n resolvers[intf.name] = {\n __resolveType: intf.__resolveType\n }\n }\n\n return resolvers\n }\n\n private processSchemaReference(\n type: ts.Type,\n properties: {[key: string]: ReferenceSchemaType},\n typeName?: string,\n processing: 'inputs' | 'types' = 'types'\n ) {\n const {getTypeDefinition} = this.typeDefinitionBuilder\n\n const isInputType = processing === 'inputs'\n\n const def = getTypeDefinition(type, {isInputType})\n\n const name = typeName || def.name\n\n let root = this.schema[processing].find(t => t.name === name)\n\n if (!root) {\n if (this.schema.scalars.includes(name)) {\n return\n } else {\n this.schema[processing].push({\n name,\n description: this.getTypeDocumentation(type),\n fields: [],\n rawType: isList(this.checker, type)\n ? type.getNumberIndexType() || type.getStringIndexType() || type\n : type\n })\n\n root = this.schema[processing][this.schema[processing].length - 1]!\n }\n }\n\n for (const [propertyName, property] of Object.entries(properties)) {\n const fieldType = property.returnType\n\n const fieldDef = getTypeDefinition(fieldType, {\n isInputType,\n propertyName\n })\n\n if (processing === 'types') {\n const field: Type['fields'][number] = {\n name: propertyName,\n type: {\n ...fieldDef,\n description: this.getSymbolDocumentation(property.symbol)\n },\n args: []\n }\n\n if (property.args) {\n for (const [argName, arg] of Object.entries(property.args)) {\n const argType = arg\n\n const fieldDef = getTypeDefinition(argType.type, {\n isInputType: true,\n propertyName: argName,\n isRequired: arg.isRequired\n })\n\n if (\n this.schema.scalars.includes(\n this.checker.typeToString(argType.type)\n )\n ) {\n fieldDef.name = this.checker.typeToString(argType.type)\n }\n\n field.args.push({\n name: argName,\n type: {\n ...fieldDef,\n description: argType.documentation\n }\n })\n }\n }\n\n root.fields.push(field)\n } else if (processing === 'inputs') {\n const field: Input['fields'][number] = {\n name: propertyName,\n type: {\n ...fieldDef,\n description: this.getTypeDocumentation(fieldType)\n }\n }\n\n if (!root.fields.find(f => f.name === field.name)) {\n root.fields.push(field)\n }\n }\n }\n }\n\n private getSymbolDocumentation(symbol: ts.Symbol) {\n let header = ''\n\n header += ts.displayPartsToString(\n symbol.getDocumentationComment(this.checker)\n )\n\n const tags = symbol\n .getJsDocTags(this.checker)\n .map(t => `@${t.name} ${ts.displayPartsToString(t.text)}`)\n .join('\\n')\n\n if (tags) {\n header += '\\n' + tags\n }\n\n return header\n }\n\n private getTypeDocumentation = (type: ts.Type) => {\n const symbol = type.getSymbol()\n\n if (symbol) {\n return this.getSymbolDocumentation(symbol)\n }\n\n return ''\n }\n\n /**\n * Extracts reserved field names from the schema by removing them from their respective types and inputs.\n */\n private extractForbiddenFieldNamesFromSchema(): void {\n // Define a regular expression to check if a field name is a valid GraphQL field name.\n const validFieldNameRegExp = /^[_A-Za-z][_0-9A-Za-z]*$/\n\n // Define a helper function to check if a field name is reserved.\n const isReserved = (name: string): boolean => {\n if (!validFieldNameRegExp.test(name)) {\n // console.warn(\n // `\\x1b[33mWarning: forbidden field name \"${name}\" detected\\x1b[0m`\n // )\n return true\n }\n // Fields starting with \"__\" are considered reserved.\n return name.startsWith('__')\n }\n\n // Loop over each type in the schema and remove any reserved fields.\n for (const type of this.schema.types) {\n type.fields = type.fields.filter(field => {\n if (isReserved(field.name)) {\n // console.warn(\n // `\\x1b[33mWarning: forbidden field \"${field.name}\" detected in type \"${type.name}\". This field will be excluded from the schema.\\x1b[0m`\n // )\n return false\n }\n return true\n })\n }\n\n // Loop over each input in the schema and remove any reserved fields.\n for (const input of this.schema.inputs) {\n input.fields = input.fields.filter(field => {\n if (isReserved(field.name)) {\n // console.warn(\n // `\\x1b[33mWarning: reserved field \"${field.name}\" detected in input \"${input.name}\". This field will be excluded from the schema.\\x1b[0m`\n // )\n return false\n }\n return true\n })\n }\n }\n\n private makeReferenceSchema(index: Index): ReferenceSchema {\n const referenceSchema: ReferenceSchema = {\n types: new Map(),\n inputs: new Map(),\n classImplementsMap: new Map()\n }\n\n const recLoop = (\n type: ts.Type,\n info: {\n propetyName?: string\n parentType?: ts.Type\n } = {},\n processing: 'inputs' | 'types' = 'types',\n path: Array<string> = []\n ) => {\n if (referenceSchema[processing].has(type)) {\n return\n }\n\n if (isSubscriptionRepeater(type)) {\n // type: Repeater<{ id: number; title: string; content: string; }, any, unknown>\n\n const repeaterItemType = this.checker.getTypeArguments(type as any)[0]\n\n recLoop(repeaterItemType, info, processing, [...path, 'REPEATER_ITEM'])\n\n return\n }\n\n // check if argType is a real type to ignore '[]'\n const wrongType = this.checker.typeToString(type) === '[]'\n\n if (wrongType) {\n return\n }\n\n // skip if scalar\n if (this.schema.scalars.includes(this.checker.typeToString(type))) {\n return\n }\n\n if (isPrimitive(type)) {\n return\n }\n\n if (isPromise(type)) {\n // skip if input\n if (processing === 'inputs') {\n return\n }\n\n const promiseType = getPromiseType(type)\n\n if (promiseType) {\n recLoop(promiseType, info, processing, [...path, 'PROMISE'])\n }\n\n return\n }\n\n if (type.isClass()) {\n const baseTypes = type.getBaseTypes()\n if (baseTypes) {\n baseTypes.forEach(baseType => {\n if (!referenceSchema.classImplementsMap.has(baseType)) {\n referenceSchema.classImplementsMap.set(baseType, [])\n }\n referenceSchema.classImplementsMap.get(baseType)!.push(type)\n })\n }\n }\n\n if (type.isUnion()) {\n if (isPrimitiveUnion(type)) {\n if (!referenceSchema[processing].has(type)) {\n referenceSchema[processing].set(type, {})\n }\n\n recLoop(type, info, processing, [...path, 'ENUM'])\n } else {\n if (processing === 'types') {\n type.types.forEach(t => {\n // if null or undefined, skip\n if (\n t.flags & ts.TypeFlags.Null ||\n t.flags & ts.TypeFlags.Undefined ||\n isPrimitive(t)\n ) {\n return\n }\n\n recLoop(t, info, processing, [\n ...path,\n t.symbol?.getName() || `N/A ${this.checker.typeToString(t)}`\n ])\n })\n } else {\n let firstType = type.getNonNullableType()\n\n if (firstType.isUnion() && !isPrimitive(firstType)) {\n consola.warn(\n `Warning: Union types in input fields are not supported yet. Defaulting to the first type (${this.checker.typeToString(\n firstType\n )}) at path: ${path.join(' > ')}`\n )\n\n firstType = firstType.types[0]\n }\n\n recLoop(firstType, info, processing, [...path, 'NON_NULLABLE'])\n }\n }\n } else if (isFunction(type)) {\n // skip fn for inputs\n if (processing === 'inputs') {\n return\n }\n\n if (!info.parentType) {\n throw new Error('Cannot have a function without a parent type')\n }\n\n const signature = type.getCallSignatures()[0]\n const args = signature?.getParameters() || []\n const returnType = signature?.getReturnType()\n\n const schemaType = referenceSchema[processing].get(info.parentType)![\n info.propetyName!\n ]!\n\n args.forEach(arg => {\n const argType = this.checker.getTypeOfSymbolAtLocation(\n arg,\n this.sfiFile\n )\n\n if (this.checker.isTupleType(argType)) {\n // Iterate over the rest of the arguments\n const tupleType = argType as ts.TupleType\n\n const elements = (tupleType.target as any)\n .labeledElementDeclarations\n\n elements.forEach((element, idx: number) => {\n const elementType = this.checker.getTypeAtLocation(element)\n\n const elementName = element.name.text\n const elementSymbol = this.checker.getSymbolAtLocation(element)\n\n const elementDocumentation = this.getSymbolDocumentation(\n elementSymbol || arg\n )\n\n schemaType.args[elementName] = {\n type: elementType,\n isRequired:\n element.initializer === undefined ? undefined : false,\n documentation: elementDocumentation\n }\n\n recLoop(\n elementType,\n {\n parentType: type\n },\n 'inputs',\n [...path, elementName]\n )\n })\n } else if (\n arg.valueDeclaration &&\n ts.isParameter(arg.valueDeclaration) &&\n arg.valueDeclaration.dotDotDotToken\n ) {\n consola.warn(\n `Warning: Rest parameters without explicit names are not supported. ` +\n `Skipping rest parameter at path: ${path.join(' > ')}.\\n\\n` +\n `Unsupported: \\`function example(...args: any[]) { }\\`.\\n` +\n `Supported: \\`function example(...namedArgs: [first: string, second: number]) { }\\`.\\n` +\n `Please provide named rest parameters to ensure proper type resolution.`\n )\n } else {\n const valueDeclaration =\n arg.valueDeclaration as ts.ParameterDeclaration\n\n // set args to empty object if not set\n if (schemaType.args) {\n schemaType.args[arg.escapedName as string] = {\n type: argType,\n isRequired:\n valueDeclaration.initializer === undefined\n ? undefined\n : false,\n documentation: this.getSymbolDocumentation(arg)\n }\n\n recLoop(\n argType,\n {\n parentType: type\n },\n 'inputs',\n [...path, arg.escapedName as string]\n )\n }\n }\n })\n\n if (returnType) {\n recLoop(returnType, info, processing, [...path, 'RETURN_TYPE'])\n }\n } else if (isList(this.checker, type)) {\n const itemType = this.checker.getIndexTypeOfType(\n type,\n ts.IndexKind.Number\n )\n\n if (itemType && !isPrimitive(itemType)) {\n if (!referenceSchema[processing].has(type)) {\n referenceSchema[processing].set(type, {})\n }\n\n recLoop(itemType, info, processing, [...path, 'ITEM_TYPE'])\n }\n } else if (!isPrimitive(type)) {\n const properties = getPublicPropertiesOfType(this.checker, type)\n\n if (!referenceSchema[processing].has(type)) {\n referenceSchema[processing].set(type, {})\n }\n\n properties.forEach(property => {\n const propertyType = this.checker.getTypeOfSymbolAtLocation(\n property,\n this.sfiFile\n )\n\n if (\n !referenceSchema[processing].get(type)![\n property.escapedName as string\n ]\n ) {\n referenceSchema[processing].get(type)![\n property.escapedName as string\n ] = {\n symbol: property,\n returnType: propertyType,\n args: {}\n }\n }\n\n recLoop(\n propertyType,\n {\n propetyName: property.escapedName as string,\n parentType: type\n },\n processing,\n [...path, property.escapedName as string]\n )\n })\n }\n }\n\n if (index.Query) {\n recLoop(index.Query)\n }\n\n if (index.Mutation) {\n recLoop(index.Mutation)\n }\n\n if (index.Subscription) {\n recLoop(index.Subscription)\n }\n\n // Handle classes that implement interfaces of the schema\n const sourceFiles = this.program.getSourceFiles()\n\n for (const sourceFile of sourceFiles) {\n ts.forEachChild(sourceFile, node => {\n if (ts.isClassDeclaration(node)) {\n const baseTypes =\n node.heritageClauses?.flatMap(heritage =>\n heritage.types.map(type => {\n return type\n })\n ) || []\n\n // Check if the class implements an interface\n if (baseTypes.length > 0) {\n for (const baseType of baseTypes) {\n if (\n referenceSchema.types.has(\n this.checker.getTypeAtLocation(baseType)\n )\n ) {\n referenceSchema.classImplementsMap.set(\n this.checker.getTypeAtLocation(node),\n [this.checker.getTypeAtLocation(baseType)]\n )\n\n recLoop(this.checker.getTypeAtLocation(node))\n }\n }\n }\n }\n })\n }\n\n return referenceSchema\n }\n}\n", "import ts from 'typescript'\n\nexport const isEmptyObject = (type: ts.Type) => {\n return (\n type.flags & ts.TypeFlags.Object &&\n type.getProperties().length === 0 &&\n type.getCallSignatures().length === 0\n )\n}\n\nexport const isList = (checker: ts.TypeChecker, type: ts.Type) => {\n const typeNode = checker.typeToTypeNode(type, undefined, undefined)\n\n const is = !!(\n typeNode &&\n (typeNode.kind === ts.SyntaxKind.ArrayType ||\n typeNode.kind === ts.SyntaxKind.TupleType)\n )\n\n if (!is) {\n // Check if type references an array\n const isArray = type.getSymbol()?.getName() === 'Array'\n\n if (isArray) {\n return true\n }\n }\n\n return is\n}\n\nexport const isBoolean = (type: ts.Type) => {\n // check if is union and all types are boolean\n if (type.isUnion()) {\n const isAllBooleans = type.types.every(\n t => t.flags & ts.TypeFlags.BooleanLiteral\n )\n\n return isAllBooleans\n }\n\n return false\n}\n\nexport const isPrimitive = (type: ts.Type) => {\n const primitive =\n type.flags & ts.TypeFlags.String ||\n type.flags & ts.TypeFlags.Number ||\n type.flags & ts.TypeFlags.Boolean ||\n type.flags & ts.TypeFlags.StringLiteral ||\n type.flags & ts.TypeFlags.NumberLiteral ||\n type.flags & ts.TypeFlags.BooleanLiteral\n\n return primitive\n}\n\nexport const isFunction = (type: ts.Type) => {\n return type.getCallSignatures().length > 0\n}\n\nexport const isPrimitiveUnion = (type: ts.Type) => {\n if (isPrimitive(type)) return false\n\n const isUnion = (type as ts.UnionType).types?.length > 1\n\n if (isUnion) {\n // check if all types are primitives\n const isAllPrimitives = (type as ts.UnionType).types.every(\n t =>\n t.flags & ts.TypeFlags.StringLiteral ||\n t.flags & ts.TypeFlags.NumberLiteral ||\n t.flags & ts.TypeFlags.BooleanLiteral\n )\n\n if (isAllPrimitives) {\n return true\n }\n }\n\n return false\n}\n\nexport const isPromise = (type: ts.Type) => {\n // check if type is a promise\n return type.getSymbol()?.getName() === 'Promise'\n}\n\nexport const getPromiseType = (type: ts.Type) => {\n let objectType = type as ts.ObjectType\n\n if (objectType.objectFlags & ts.ObjectFlags.Reference) {\n const reference = type as ts.TypeReference\n const typeArguments = reference.typeArguments\n if (typeArguments && typeArguments.length > 0) {\n return typeArguments[0]\n }\n }\n}\n\nexport const excludeNullUndefinedFromType = (type: ts.Type) => {\n if (!type.isUnion())\n return {\n type,\n wasOptional: false\n }\n\n const types = type.types.filter(\n t => !(t.flags & ts.TypeFlags.Undefined || t.flags & ts.TypeFlags.Null)\n )\n\n const wasOptional = types.length !== type.types.length\n\n return {\n type: type.getNonNullableType(),\n wasOptional\n }\n}\n\nexport function getPublicPropertiesOfType(\n checker: ts.TypeChecker,\n _type: ts.Type\n): ts.Symbol[] {\n let type = _type\n\n if (type.isUnion()) {\n // Filter out array types from the union if their non-array counterparts are also present\n const nonArrayTypes = type.types.filter(\n t =>\n !(\n t.flags & ts.TypeFlags.Object &&\n (t as ts.ObjectType).objectFlags & ts.ObjectFlags.Reference &&\n (t as ts.TypeReference).typeArguments?.length\n )\n )\n const arrayElementTypes = type.types\n .filter(\n t =>\n t.flags & ts.TypeFlags.Object &&\n (t as ts.ObjectType).objectFlags & ts.ObjectFlags.Reference &&\n (t as ts.TypeReference).typeArguments?.length\n )\n .map(t => (t as ts.TypeReference).typeArguments![0])\n const filteredTypes = nonArrayTypes.filter(\n t => !arrayElementTypes.some(et => et === t)\n )\n // .filter(t => {\n // // filter out primitive types\n // return !isPrimitive(t)\n // })\n\n // Create a new type that is the union of all the types in the union\n // This is necessary because the type checker will not resolve properties\n // that are only present on some types in the union\n // getUnionType is not available in TS 3.7, so we have to use the private API\n type = (checker as any).getUnionType(filteredTypes) as ts.Type\n }\n\n const properties: ts.Symbol[] = []\n\n // if type is a primitive, return empty array\n if (isList(checker, type) || isPrimitive(type) || isPrimitiveUnion(type))\n return properties\n\n let typeProperties: ts.Symbol[] = []\n\n typeProperties =\n (type as any).resolvedProperties || type.getProperties() || []\n\n for (const prop of typeProperties) {\n const isPublic =\n prop.valueDeclaration &&\n !(\n ts.getCombinedModifierFlags(prop.valueDeclaration) &\n ts.ModifierFlags.Private\n ) &&\n !prop.getName().startsWith('#')\n\n if (isPublic === false) {\n continue\n }\n\n properties.push(prop)\n }\n\n return properties\n}\n\nexport const safeTypeName = (name: string) => {\n return name.replace(/[^0-9a-zA-Z_]/g, '_')\n}\n\nexport const isSubscriptionRepeater = (type: ts.Type) => {\n return !!type\n .getSymbol()\n ?.getDeclarations()\n ?.some(d => {\n const sourceFile = d.getSourceFile().fileName\n\n return sourceFile.includes('@repeaterjs')\n })\n}\n", "import ts from 'typescript'\nimport {\n excludeNullUndefinedFromType,\n getPromiseType,\n isEmptyObject,\n isPrimitiveUnion,\n isFunction,\n isList,\n isPrimitive,\n isPromise,\n isSubscriptionRepeater,\n safeTypeName\n} from './types-helper.js'\nimport {Schema} from './schema-parser.js'\n\nexport interface Union {\n name: string\n rawType: ts.Type\n types: Array<string>\n}\n\nexport interface Enum {\n name: string\n rawType: ts.Type\n values: Array<string>\n}\n\ninterface FieldDefinition {\n name: string\n isList: boolean\n isRequired: boolean\n isListRequired?: boolean\n}\n\nexport class TypeDefinitionBuilder {\n private checker: ts.TypeChecker\n private schema: Schema\n\n private typesNameMap: Map<ts.Type, string> = new Map()\n private inputsNameMap: Map<ts.Type, string> = new Map()\n\n private unions: Array<Union> = []\n private enums: Array<Enum> = []\n\n constructor(checker: ts.TypeChecker, schema: Schema) {\n this.checker = checker\n this.schema = schema\n }\n\n getTypeDefinition = (\n rawType: ts.Type,\n options: {\n isInputType?: boolean\n isRequired?: boolean\n propertyName?: string\n } = {\n isInputType: false\n }\n ): FieldDefinition => {\n const {type, wasOptional} = excludeNullUndefinedFromType(rawType)\n\n if (\n type.flags & ts.TypeFlags.Void ||\n type.flags & ts.TypeFlags.Undefined ||\n type.flags & ts.TypeFlags.Null\n ) {\n return {\n name: 'Void',\n isList: false,\n isRequired: false\n }\n }\n\n if (isSubscriptionRepeater(type)) {\n const repeaterItemType = this.checker.getTypeArguments(type as any)[0]\n\n if (repeaterItemType) {\n return this.getTypeDefinition(repeaterItemType, options)\n }\n }\n\n if (isPromise(type)) {\n const promiseType = getPromiseType(type)\n if (promiseType) {\n return this.getTypeDefinition(promiseType, options)\n }\n }\n\n const isRequired =\n options.isRequired !== undefined ? options.isRequired : !wasOptional\n\n if (isEmptyObject(type)) {\n return {\n name: 'Object',\n isList: false,\n isRequired\n }\n }\n\n let nameMap = options.isInputType ? this.inputsNameMap : this.typesNameMap\n\n if (nameMap.has(type)) {\n const typeName = nameMap.get(type) as string\n\n return {\n name: typeName,\n isList: false,\n isRequired\n }\n }\n\n let typeName: string | undefined =\n type.aliasSymbol?.escapedName?.toString() ||\n type.symbol?.escapedName.toString()\n\n if (typeName === '__type' || typeName === '__object') {\n if (!options.propertyName) {\n typeName = undefined\n } else {\n const capitalizedPropertyName =\n options.propertyName.charAt(0).toUpperCase() +\n options.propertyName.slice(1)\n\n typeName = capitalizedPropertyName\n }\n }\n\n if (typeName) {\n typeName = safeTypeName(typeName)\n }\n\n const duplicateName = (name: string) => {\n // find name in typeNameMap\n return Array.from(nameMap.values()).includes(name)\n }\n\n if (typeName && !this.schema.scalars.includes(typeName)) {\n if (options.isInputType) {\n typeName = `${typeName}Input`\n }\n\n let i = 1\n let originalTypeName = typeName\n while (duplicateName(typeName as string)) {\n typeName = `${originalTypeName}_${i}`\n\n i++\n }\n }\n\n if (typeName && this.schema.scalars.includes(typeName)) {\n return {\n name: typeName,\n isList: false,\n isRequired\n }\n }\n\n if (isList(this.checker, type)) {\n const listType = this.checker.getIndexTypeOfType(\n type,\n ts.IndexKind.Number\n )\n\n if (listType) {\n const def = this.getTypeDefinition(listType, options)\n\n return {\n name: def.name,\n isList: true,\n isRequired: def.isRequired,\n isListRequired: isRequired\n }\n }\n } else if (isPrimitiveUnion(type)) {\n const typeNode = this.checker.typeToTypeNode(\n type,\n undefined,\n undefined\n ) as any | undefined\n\n const types = (type as ts.UnionType).types\n\n // enumerate all members of the enum\n const members = types.map((t: ts.Type) => {\n if (t.isLiteral()) {\n const name = t.value?.toString()\n\n if (!name) {\n throw new Error('Enum member name is undefined')\n }\n\n return safeTypeName(name)\n }\n\n throw new Error('Invalid type for enum member')\n })\n\n if (members.length > 0) {\n typeName = typeName || typeNode.typeName?.symbol?.escapedName\n\n if (!typeName) {\n typeName = members.join('_').toUpperCase()\n typeName = options.isInputType ? `${typeName}Input` : typeName\n }\n\n this.enums.push({\n name: typeName,\n values: members,\n rawType: type\n })\n }\n }\n // handle primitives\n else if (isPrimitive(type)) {\n let typeName = this.checker.typeToString(type)\n\n if (type.flags & ts.TypeFlags.StringLiteral) {\n typeName = 'String'\n } else if (type.flags & ts.TypeFlags.NumberLiteral) {\n typeName = 'Number'\n } else if (type.flags & ts.TypeFlags.BooleanLiteral) {\n typeName = 'Boolean'\n } else if (type.flags & ts.TypeFlags.String) {\n typeName = 'String'\n } else if (type.flags & ts.TypeFlags.Number) {\n typeName = 'Number'\n } else if (type.flags & ts.TypeFlags.Boolean) {\n typeName = 'Boolean'\n }\n\n return {\n name: safeTypeName(typeName),\n isList: false,\n isRequired\n }\n } else if (type.isIntersection()) {\n const intersectionTypes = type.types\n\n const typeNames = intersectionTypes.map(t => {\n const typeDef = this.getTypeDefinition(t, options)\n\n return typeDef.name\n })\n\n typeName = safeTypeName(typeName || typeNames.join('And'))\n } else if (type.isUnion()) {\n const unionTypes = type.types\n const required = type.types.length === unionTypes.length\n\n const hasPrimitivesOrEnum = unionTypes.some(t => {\n // If t is a array take the element type\n const type = isList(this.checker, t)\n ? this.checker.getIndexTypeOfType(t, ts.IndexKind.Number)\n : t\n\n if (!type) {\n // Return true if the type is undefined because we don't know what it is\n // Marking it as a primitive or enum will make it more error prone\n return true\n }\n\n return isPrimitive(type) || isPrimitiveUnion(type)\n })\n\n const unionTypeDefs = [\n ...new Set(\n unionTypes.map(t =>\n this.getTypeDefinition(t, {...options, isRequired: required})\n )\n )\n ]\n\n // If the union contains a array of some type, remove the type from the union because\n // the array type will be handled by the list type\n\n const listTypes = unionTypeDefs.filter(t => t.isList)\n\n // Check if the union contains the same type as a list\n for (const listType of listTypes) {\n const index = unionTypeDefs.findIndex(\n t => t.name === listType.name && !t.isList\n )\n\n if (index > -1) {\n unionTypeDefs.splice(index, 1)\n }\n }\n\n const typeNames = unionTypeDefs.map(t => t.name)\n\n typeName = safeTypeName(typeName || typeNames.join('Or'))\n\n // check if typeName is a duplicate\n if (typeName) {\n let i = 1\n let originalTypeName = typeName\n while (duplicateName(typeName as string)) {\n typeName = `${originalTypeName}_${i}`\n\n i++\n }\n }\n\n if (\n unionTypeDefs.length > 1 &&\n !options.isInputType &&\n !hasPrimitivesOrEnum\n ) {\n this.unions.push({\n name: typeName,\n types: typeNames,\n rawType: type\n })\n } else {\n // We only care about the first type in the union since GraphQL doesn't support unions of input types\n const typeDef = unionTypeDefs[0]\n\n if (!typeDef) {\n throw new Error('Cannot get type definition')\n }\n\n // If the types contain a list of the same type as the first type, then we can make the first type a list\n const isList = unionTypeDefs.some(t => {\n return t.isList && t.name === typeDef.name\n })\n\n return {\n name: typeDef.name,\n isList,\n isRequired\n }\n }\n }\n // handle functions\n else if (isFunction(type)) {\n const signature = type.getCallSignatures()[0]\n let returnType = signature?.getReturnType()\n\n if (returnType) {\n if (isPromise(returnType)) {\n const pt = getPromiseType(returnType)\n\n if (pt) {\n returnType = pt\n }\n }\n }\n\n if (returnType) {\n const def = this.getTypeDefinition(returnType, options)\n\n return def\n }\n }\n\n if (!typeName) {\n typeName = 'Any'\n }\n\n nameMap.set(type, typeName)\n\n return {\n name: typeName,\n isList: false,\n isRequired\n }\n }\n\n public getUnions(): Array<Union> {\n return this.unions\n }\n\n public getEnums(): Array<Enum> {\n return this.enums\n }\n\n public typeDefinitionToGraphQLType = (\n typeDefinition: FieldDefinition\n ): string => {\n let type = typeDefinition.name\n const {isList, isRequired, isListRequired} = typeDefinition\n\n if (isRequired) {\n type = `${type}!`\n }\n\n if (isList) {\n type = `[${type}]`\n\n if (isListRequired) {\n type = `${type}!`\n }\n }\n\n return type\n }\n}\n", "import path from 'path'\nimport fs from 'fs/promises'\nimport {generateClient} from '@gqty/cli'\nimport esbuild from 'esbuild'\nimport {buildSchema} from 'graphql'\nimport {updateFileIfChanged} from './update-file-if-changed'\n\nconst PYLON_SCHEMA_PATH = path.join(process.cwd(), '.pylon/schema.graphql')\nconst PYLON_CLIENT_PATH = path.join(process.cwd(), '.pylon/client/index.ts')\n\nexport interface BuildClientOptions {\n /**\n * Client will be generated if the schema has changed or if the client does not exist\n */\n schemaChanged: boolean\n}\n\nexport const buildClient = async ({schemaChanged}: BuildClientOptions) => {\n // Check if the schema exists\n\n try {\n await fs.access(PYLON_SCHEMA_PATH)\n } catch (e) {\n throw new Error(\n 'Schema not found. Please run `pylon build` or `pylon dev` first.'\n )\n }\n\n // Check if the client exists\n if (!schemaChanged) {\n // If the schema has not changed, we need to check if the client exists\n try {\n await fs.access(PYLON_CLIENT_PATH)\n return\n } catch (e) {\n // If the client does not exist, we need to generate it\n }\n }\n\n const schema = await fs.readFile(PYLON_SCHEMA_PATH, 'utf-8')\n\n const schemaObj = buildSchema(schema)\n\n // Write the custom client index file because the default one is not compatible with Pylon\n await fs.mkdir(path.dirname(PYLON_CLIENT_PATH), {recursive: true})\n await updateFileIfChanged(PYLON_CLIENT_PATH, customClientIndex)\n\n await generateClient(schemaObj, {\n endpoint: 'will-be-overwritten',\n frameworks: ['react'],\n destination: PYLON_CLIENT_PATH,\n react: true,\n scalarTypes: {\n Number: 'number',\n Object: 'Record<string, unknown>'\n }\n })\n\n await esbuild.build({\n entryPoints: [PYLON_CLIENT_PATH],\n bundle: true,\n outfile: path.join(process.cwd(), '.pylon/client/index.js'),\n packages: 'external',\n format: 'esm',\n platform: 'node'\n })\n}\n\nconst customClientIndex = `/**\n * GQty: You can safely modify this file based on your needs.\n */\n\nimport {createReactClient} from '@gqty/react'\nimport {\n Cache,\n createClient,\n defaultResponseHandler,\n type QueryFetcher\n} from 'gqty'\nimport {\n generatedSchema,\n scalarsEnumsHash,\n type GeneratedSchema\n} from './schema.generated'\n\nconst queryFetcher: QueryFetcher = async function (\n {query, variables, operationName},\n fetchOptions\n) {\n let browserOrInternalFetch: typeof fetch | typeof app.request = fetch\n\n try {\n const moduleNameToPreventBundling = '@getcronit/pylon'\n const {app} = await import(moduleNameToPreventBundling)\n\n browserOrInternalFetch = app.request\n } catch (error) {\n // Pylon is not found. Maybe we are running in a different environment.\n }\n\n const response = await browserOrInternalFetch('/graphql', {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json'\n },\n body: JSON.stringify({\n query,\n variables,\n operationName\n }),\n mode: 'cors',\n ...fetchOptions\n })\n\n return await defaultResponseHandler(response)\n}\n\nconst cache = new Cache(\n undefined,\n /**\n * Default option is immediate cache expiry but keep it for 5 minutes,\n * allowing soft refetches in background.\n */\n {\n maxAge: Infinity,\n staleWhileRevalidate: 5 * 60 * 1000,\n normalization: true\n }\n)\n\nexport const client = createClient<GeneratedSchema>({\n schema: generatedSchema,\n scalars: scalarsEnumsHash,\n cache,\n fetchOptions: {\n fetcher: queryFetcher\n }\n})\n\n// Core functions\nexport const {resolve, subscribe, schema} = client\n\n// Legacy functions\nexport const {query, mutation, mutate, subscription, resolved, refetch, track} =\n client\n\nexport const {\n graphql,\n useQuery,\n usePaginatedQuery,\n useTransactionQuery,\n useLazyQuery,\n useRefetch,\n useMutation,\n useMetaState,\n prepareReactRender,\n useHydrateCache,\n prepareQuery\n} = createReactClient<GeneratedSchema>(client, {\n defaults: {\n // Enable Suspense, you can override this option for each hook.\n suspense: false\n }\n})\n\nexport * from './schema.generated'`\n"],
|
|
5
|
-
"mappings": "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",
|
|
4
|
+
"sourcesContent": ["import {program, type Command} from 'commander'\n\nimport consola from 'consola'\nimport dotenv from 'dotenv'\nimport pm2 from 'pm2'\nimport {version} from '../package.json'\nimport {\n analytics,\n distinctId,\n sessionId,\n dependencies,\n readPylonConfig\n} from './analytics'\nimport {build} from './builder'\nimport {buildClient} from './builder/build-client'\n\nconst processName = `pylon-dev-${sessionId}`\n\ndotenv.config()\n\nprogram.name('pylon-dev').description('Pylon Development CLI').version(version)\n\nprogram\n .command('build')\n .description('Build the Pylon Schema')\n .action(async () => {\n const ctx = await build({\n sfiFilePath: './src/index.ts',\n outputFilePath: './.pylon',\n onBuild: async ({totalFiles, totalSize, duration, schemaChanged}) => {\n analytics.capture({\n distinctId,\n event: 'build completed',\n properties: {\n duration,\n totalFiles,\n totalSize,\n schemaChanged,\n dependencies,\n isDevelopment: false,\n $session_id: sessionId\n }\n })\n\n await buildClient({schemaChanged})\n }\n })\n\n await ctx.rebuild()\n await ctx.dispose()\n })\n\nprogram\n .command('dev')\n .description('Start the Pylon Development Server')\n .option(\n '-c, --command <command>',\n 'Command to run the server',\n 'bun run .pylon/index.js'\n )\n .action(async options => {\n await new Promise<void>(async (resolve, reject) => {\n try {\n await connectPM2()\n\n const ctx = await build({\n sfiFilePath: './src/index.ts',\n outputFilePath: `./.pylon`,\n onBuild: async ({schemaChanged, totalFiles, totalSize, duration}) => {\n await buildClient({schemaChanged})\n\n analytics.capture({\n distinctId,\n event: 'build completed',\n properties: {\n duration,\n totalFiles,\n totalSize,\n schemaChanged,\n dependencies,\n pylonConfig: await readPylonConfig(),\n isDevelopment: true,\n $session_id: sessionId\n }\n })\n }\n })\n\n await ctx.watch()\n\n await startDevServer(options.command)\n\n consola.box(`Pylon is up and running!\n \nPress \\`Ctrl + C\\` to stop the server.\n \nEncounter any issues? Report them here:\nhttps://github.com/getcronit/pylon/issues\n \nWe value your feedback\u2014help us make Pylon even better!`)\n\n process.on('SIGINT', async () => {\n await ctx.cancel()\n await stopDevServerAndDisconnect()\n\n resolve()\n })\n\n process.on('SIGTERM', async () => {\n await ctx.cancel()\n await stopDevServerAndDisconnect()\n\n resolve()\n })\n\n analytics.capture({\n distinctId,\n event: 'dev server started',\n properties: {\n command: options.command,\n dependencies,\n pylonConfig: await readPylonConfig(),\n $session_id: sessionId\n }\n })\n } catch (error) {\n await stopDevServerAndDisconnect()\n reject(error)\n }\n })\n })\n\nconst connectPM2 = () => {\n return new Promise<void>((resolve, reject) => {\n pm2.connect(err => {\n if (err) {\n reject(err)\n } else {\n resolve()\n }\n })\n })\n}\n\nconst startDevServer = (command: string) => {\n return new Promise<void>((resolve, reject) => {\n pm2.launchBus((err, bus) => {\n if (err) {\n reject(err)\n }\n\n bus.on('log:out', data => {\n consola.log(data.data.trim())\n })\n\n bus.on('log:err', data => {\n consola.error(data.data)\n })\n })\n\n pm2.start(\n {\n name: processName,\n script: command,\n exec_mode: 'fork',\n instances: 1,\n autorestart: true,\n watch: ['./.pylon'],\n restart_delay: 5000,\n watch_delay: 1000 as any,\n ignore_watch: ['node_modules'],\n env: {\n ...process.env,\n NODE_ENV: 'development'\n }\n } as any,\n function (err, apps) {\n if (err) {\n reject(err)\n } else {\n resolve()\n }\n }\n )\n })\n}\n\nconst stopDevServerAndDisconnect = async () => {\n try {\n await new Promise<void>((resolve, reject) => {\n pm2.delete(processName, function (err) {\n if (err) {\n reject(err)\n } else {\n resolve()\n }\n })\n })\n } catch {\n } finally {\n pm2.disconnect()\n }\n}\n\ntry {\n await program.parseAsync(process.argv)\n} catch (error) {\n consola.error(error)\n\n analytics.captureException(error, distinctId, {\n $session_id: sessionId,\n dependencies\n })\n} finally {\n await analytics.shutdown()\n}\n", "{\n \"name\": \"@getcronit/pylon-dev\",\n \"type\": \"module\",\n \"version\": \"2.0.0-canary-20250408150641.1fa40562959367481e90835352afa3522b2edbec\",\n \"description\": \"CLI for creating a Pylon\",\n \"scripts\": {\n \"build\": \"rimraf ./dist && esbuild ./src/index.ts --bundle --platform=node --target=node18 --format=esm --minify --outdir=./dist --sourcemap=linked --packages=external\"\n },\n \"bin\": {\n \"pylon\": \"./dist/index.js\"\n },\n \"files\": [\n \"dist\"\n ],\n \"author\": \"Nico Schett <nico.schett@cronit.io>\",\n \"license\": \"Apache-2.0\",\n \"repository\": {\n \"type\": \"git\",\n \"url\": \"https://github.com/getcronit/pylon.git\",\n \"directory\": \"packages/create-pylon\"\n },\n \"homepage\": \"https://pylon.cronit.io\",\n \"dependencies\": {\n \"@gqty/cli\": \"^4.2.5\",\n \"commander\": \"^12.1.0\",\n \"conf\": \"^13.1.0\",\n \"consola\": \"^3.2.3\",\n \"dotenv\": \"^16.4.5\",\n \"esbuild\": \"^0.23.1\",\n \"esbuild-plugin-tsc\": \"^0.4.0\",\n \"pm2\": \"^5.4.3\",\n \"posthog-node\": \"^4.10.1\"\n },\n \"publishConfig\": {\n \"access\": \"public\"\n },\n \"engines\": {\n \"node\": \">=18.0.0\"\n },\n \"devDependencies\": {\n \"typescript\": \"^5.7.3\"\n },\n \"peerDependencies\": {\n \"@getcronit/pylon\": \"workspace:3.0.0-canary-20250408150641.1fa40562959367481e90835352afa3522b2edbec\",\n \"graphql\": \"^16.9.0\"\n }\n}\n", "import {PostHog} from 'posthog-node'\nimport Conf from 'conf'\nimport {readFileSync} from 'fs'\nimport {randomUUID} from 'crypto'\n\nconst schema = {\n distinctId: {\n type: 'string',\n default: randomUUID()\n }\n}\n\nconst config = new Conf<{\n distinctId: string\n}>({\n projectName: 'pylon',\n schema\n})\n\nexport const distinctId = config.get('distinctId')\nexport const sessionId = randomUUID()\n\nexport const analytics = new PostHog(\n 'phc_KN4qCOcCdkXp6sHLIuMWGRfzZWuNht69oqv5Kw5rGxj',\n {\n host: 'https://eu.i.posthog.com',\n disabled: process.env.PYLON_DISABLE_TELEMETRY === 'true'\n }\n)\n\nconst getPylonDependencies = () => {\n // Read the package.json file in the current directory\n let packageJson\n\n try {\n packageJson = JSON.parse(readFileSync('./package.json', 'utf8'))\n } catch (error) {\n packageJson = {}\n }\n\n // Extract the dependencies\n const dependencies: object = packageJson.dependencies || {}\n const devDependencies: object = packageJson.devDependencies || {}\n const peerDependencies: object = packageJson.peerDependencies || {}\n\n return {dependencies, devDependencies, peerDependencies}\n}\n\nexport const dependencies = getPylonDependencies()\n\nexport const readPylonConfig = async () => {\n try {\n const config = await import(`${process.cwd()}/.pylon/config.js`)\n const data = config.config\n\n // Sanitize the config values\n const sanitizedData = JSON.parse(JSON.stringify(data)) as object\n\n // Check if the config is a empty object\n if (Object.keys(sanitizedData).length === 0) {\n return false\n }\n\n return sanitizedData\n } catch (error) {\n return false\n }\n}\n", "import path from 'path'\nimport {Bundler} from './bundler/bundler.js'\nimport {SchemaBuilder} from './schema/builder.js'\n\nexport interface BuildOptions {\n sfiFilePath: string\n outputFilePath: string\n onBuild?: (output: {\n totalFiles: number\n totalSize: number\n schemaChanged: boolean\n duration: number\n }) => void\n}\n\nexport {SchemaBuilder}\n\nexport const build = async (options: BuildOptions) => {\n const bundler = new Bundler(options.sfiFilePath, options.outputFilePath)\n\n return await bundler.build({\n getBuildDefs: () => {\n const builder = new SchemaBuilder(\n path.join(process.cwd(), options.sfiFilePath)\n )\n\n const built = builder.build()\n\n const typeDefs = built.typeDefs\n\n return {\n typeDefs: typeDefs,\n resolvers: built.resolvers\n }\n },\n onBuild: options.onBuild\n })\n}\n", "// bundler.ts\nimport esbuild, {context} from 'esbuild'\nimport esbuildPluginTsc from 'esbuild-plugin-tsc'\nimport type {PylonConfig, Plugin} from '@getcronit/pylon'\n\nimport path from 'path'\nimport fs from 'fs/promises'\nimport {\n InjectCodePluginOptions,\n injectCodePlugin\n} from './plugins/inject-code-plugin'\nimport {NotifyPluginOptions, notifyPlugin} from './plugins/notify-plugin'\nimport {updateFileIfChanged} from '../update-file-if-changed'\nimport {extractConfig} from './extract-config'\n\nexport interface BundlerBuildOptions {\n getBuildDefs: InjectCodePluginOptions['getBuildDefs']\n onBuild?: NotifyPluginOptions['onBuild']\n}\n\nexport class Bundler {\n sfiFilePath: string\n outputDir: string\n\n constructor(sfiFilePath: string, outputDir: string = './.pylon') {\n this.sfiFilePath = sfiFilePath\n this.outputDir = outputDir\n }\n\n private async initBuildPlugins(args: {onBuild: () => void}) {\n const configPath = path.join(process.cwd(), this.outputDir, 'config.js')\n\n await extractConfig(this.sfiFilePath, configPath)\n\n let config: PylonConfig | undefined\n try {\n let configModule = await import(configPath)\n\n config = configModule.config\n } catch (e) {\n console.error('Error loading config', e)\n }\n\n const buildContexts: ReturnType<NonNullable<Plugin['build']>>[] = []\n\n const plugins = config?.plugins || []\n\n for (const plugin of plugins) {\n if (plugin.build) {\n const ctx = plugin.build({onBuild: args.onBuild})\n\n buildContexts.push(ctx)\n }\n }\n\n return buildContexts\n }\n\n public async build(options: BundlerBuildOptions) {\n const inputPath = path.join(process.cwd(), this.sfiFilePath)\n const dir = path.join(process.cwd(), this.outputDir)\n\n // Create directory if it doesn't exist\n await fs.mkdir(dir, {recursive: true})\n\n const writeOnEndPlugin: esbuild.Plugin = {\n name: 'write-on-end',\n setup(build) {\n build.onEnd(async result => {\n await Promise.all(\n result.outputFiles!.map(async file => {\n await fs.mkdir(path.dirname(file.path), {recursive: true})\n await updateFileIfChanged(file.path, file.text)\n })\n )\n })\n }\n }\n\n const ctx = await context({\n write: false,\n logLevel: 'silent',\n metafile: true,\n entryPoints: [inputPath],\n outdir: dir,\n bundle: true,\n format: 'esm',\n sourcemap: 'inline',\n packages: 'external',\n\n plugins: [\n notifyPlugin({\n dir,\n onBuild: async output => {\n await options.onBuild?.(output)\n }\n }),\n injectCodePlugin({\n getBuildDefs: options.getBuildDefs,\n outputDir: this.outputDir\n }),\n esbuildPluginTsc({\n tsconfigPath: path.join(process.cwd(), 'tsconfig.json')\n }),\n writeOnEndPlugin\n ]\n })\n\n await ctx.rebuild()\n\n const pluginCtxs = await this.initBuildPlugins({\n onBuild: () => {\n options.onBuild?.({\n totalFiles: 0,\n totalSize: 0,\n schemaChanged: false,\n duration: 0\n })\n }\n })\n\n await Promise.all(\n pluginCtxs.map(async c => {\n await (await c).rebuild()\n })\n )\n\n return {\n watch: async () => {\n for (const ctx of pluginCtxs) {\n const c = await ctx\n\n await c.watch()\n }\n\n return await ctx.watch()\n },\n rebuild: async () => {\n for (const ctx of pluginCtxs) {\n const c = await ctx\n\n await c.rebuild()\n }\n\n await ctx.rebuild()\n },\n dispose: async () => {\n for (const ctx of pluginCtxs) {\n const c = await ctx\n\n await c.dispose()\n }\n\n await ctx.dispose()\n },\n cancel: async () => {\n for (const ctx of pluginCtxs) {\n const c = await ctx\n\n await c.cancel()\n }\n\n await ctx.cancel()\n }\n }\n }\n}\n", "import {Plugin} from 'esbuild'\nimport path from 'path'\nimport fs from 'fs/promises'\nimport {updateFileIfChanged} from '../../update-file-if-changed'\n\nexport interface InjectCodePluginOptions {\n getBuildDefs: () => {\n typeDefs: string\n resolvers: Record<\n string,\n {\n __resolveType?: (obj: any) => string\n }\n >\n }\n outputDir: string\n}\n\nexport const injectCodePlugin = ({\n getBuildDefs,\n outputDir\n}: InjectCodePluginOptions): Plugin => ({\n name: 'inject-code',\n setup(build) {\n build.onLoad(\n {filter: /src[\\/\\\\]index\\.ts$/, namespace: 'file'},\n async args => {\n // Convert to relative path to ensure we match `src/index.ts` at root\n const relativePath = path.relative(process.cwd(), args.path)\n\n if (relativePath !== path.join('src', 'index.ts')) {\n return\n }\n\n const {typeDefs, resolvers} = getBuildDefs()\n\n const preparedResolvers = prepareObjectInjection(resolvers)\n\n const contents = await fs.readFile(args.path, 'utf-8')\n\n // Write the typeDefs to a file\n const typeDefsPath = path.join(\n process.cwd(),\n outputDir,\n 'schema.graphql'\n )\n\n await updateFileIfChanged(typeDefsPath, typeDefs)\n\n // Write base resolvers to a file\n\n const resolversPath = path.join(\n process.cwd(),\n outputDir,\n 'resolvers.js'\n )\n\n await updateFileIfChanged(\n resolversPath,\n `export const resolvers = ${preparedResolvers}`\n )\n\n return {\n loader: 'ts',\n contents:\n `import {executeConfig} from \"@getcronit/pylon\"\n \n const __internalPylonConfig = await import(\".pylon/config.js\")\n await executeConfig(__internalPylonConfig.config)\n\n \n` +\n contents +\n `\n import {handler as __internalPylonHandler} from \"@getcronit/pylon\"\n\n app.use(__internalPylonHandler({\n typeDefs: ${JSON.stringify(typeDefs)},\n graphql,\n resolvers: ${preparedResolvers},\n }))\n `\n }\n }\n )\n }\n})\n\nfunction prepareObjectInjection(obj: object) {\n const entries = Object.entries(obj).map(([key, value]) => {\n if (value === undefined) {\n return undefined\n } else if (typeof value === 'string') {\n return `${key}:${value}`\n } else if (typeof value === 'function') {\n return `${key}:${value.toString()}`\n } else if (typeof value === 'object' && !Array.isArray(value)) {\n return `${key}:${prepareObjectInjection(value)}`\n } else {\n return `${key}:${JSON.stringify(value)}`\n }\n })\n\n return `{${entries.join(',')}}`\n}\n", "import fs from 'fs/promises'\n\nexport async function updateFileIfChanged(path: string, newContent: string) {\n try {\n const currentContent = await fs.readFile(path, 'utf8')\n if (currentContent === newContent) {\n return false // No update needed\n }\n } catch (err: any) {\n if (err.code !== 'ENOENT') throw err // Ignore file not found error\n }\n\n await fs.writeFile(path, newContent, 'utf8')\n return true // File created or updated\n}\n", "import {Plugin} from 'esbuild'\nimport path from 'path'\nimport fs from 'fs/promises'\nimport consola from 'consola'\n\nexport interface NotifyPluginOptions {\n onBuild?: (output: {\n totalFiles: number\n totalSize: number\n schemaChanged: boolean\n duration: number\n }) => Promise<void> | void\n dir: string\n}\n\nexport const notifyPlugin = ({dir, onBuild}: NotifyPluginOptions): Plugin => ({\n name: 'notify',\n async setup(build) {\n const loadSchema = async () => {\n const schemaPath = path.join(dir, 'schema.graphql')\n\n try {\n await fs.access(schemaPath)\n } catch {\n return null\n }\n\n return await fs.readFile(schemaPath, 'utf-8')\n }\n\n let cachedSchema: string | null = await loadSchema()\n\n let startTime = Date.now()\n build.onStart(async () => {\n startTime = Date.now()\n consola.start('[Pylon]: Building...')\n })\n\n build.onEnd(async result => {\n if (result.errors.length > 0) {\n for (const error of result.errors) {\n consola.error(`[Pylon]: ${error.text}\n${\n error.location\n ? `at ${error.location.file}:${error.location.line}:${error.location.column}`\n : ''\n}\n${error.detail ? error.detail : ''}`)\n }\n\n throw new Error('Failed to build Pylon')\n }\n\n if (result.warnings.length > 0) {\n for (const warning of result.warnings) {\n consola.warn(warning)\n }\n }\n\n const duration = Date.now() - startTime\n\n const totalFiles = Object.keys(result.metafile!.inputs).length\n\n const totalSize = Object.values(result.metafile!.outputs).reduce(\n (acc, output) => acc + output.bytes,\n 0\n )\n\n const latestSchema = await loadSchema()\n\n consola.success(`[Pylon]: Built in ${duration}ms`)\n\n const schemaChanged = latestSchema !== cachedSchema\n\n if (schemaChanged) {\n consola.info('[Pylon]: Schema updated')\n\n cachedSchema = latestSchema\n }\n\n if (onBuild) {\n await onBuild({\n totalFiles,\n totalSize,\n schemaChanged,\n duration\n })\n }\n })\n }\n})\n", "import esbuild from 'esbuild'\nimport {readFileSync} from 'fs'\nimport {dirname, resolve} from 'path'\nimport ts from 'typescript'\n\n/**\n * Extracts the `config` export from a TypeScript file and writes it to `.pylon/config.js`\n * @param inputFile The path to the source file (e.g., `server.ts`)\n * @param outputFile The path to save the extracted config (default: `.pylon/config.js`)\n */\nexport async function extractConfig(\n inputFile: string,\n outputFile: string = '.pylon/config.js'\n) {\n const filePath = resolve(inputFile)\n const source = readFileSync(filePath, 'utf8')\n const sourceFile = ts.createSourceFile(\n filePath,\n source,\n ts.ScriptTarget.ESNext,\n true\n )\n\n let configCode = ''\n const importStatements: string[] = []\n\n // Iterate over the AST nodes\n ts.forEachChild(sourceFile, node => {\n // Collect import statements\n if (ts.isImportDeclaration(node)) {\n const importText = node.getFullText(sourceFile).trim()\n importStatements.push(importText)\n }\n\n // Find `export const config = {...}`\n if (\n ts.isVariableStatement(node) &&\n node.declarationList.declarations.length > 0\n ) {\n const declaration = node.declarationList.declarations[0]\n if (\n ts.isIdentifier(declaration.name) &&\n declaration.name.text === 'config' &&\n declaration.initializer\n ) {\n configCode = `export const config = ${declaration.initializer.getText(\n sourceFile\n )}`\n }\n }\n })\n\n if (!configCode) {\n configCode = 'export const config = {}'\n }\n\n // Write extracted config to file\n const finalConfig = [...importStatements, configCode].join('\\n\\n')\n\n await esbuild.build({\n stdin: {\n contents: finalConfig,\n resolveDir: dirname(filePath),\n sourcefile: filePath,\n loader: 'ts'\n },\n bundle: true,\n format: 'esm',\n outfile: outputFile,\n packages: 'external'\n })\n}\n", "import ts from 'typescript'\nimport {SchemaParser} from './schema-parser'\nimport path from 'path'\n\nexport class SchemaBuilder {\n private program: ts.Program\n private checker: ts.TypeChecker\n private sfiFile!: ts.SourceFile\n private sfi!: ts.Symbol\n private sfiFilePath: string\n\n constructor(sfiFilePath: string) {\n this.sfiFilePath = sfiFilePath\n\n const tsConfigOptions = this.loadTsConfigOptions()\n\n const filesInSfiDir = ts.sys\n .readDirectory(path.dirname(this.sfiFilePath), ['.ts'], ['.d.ts'])\n .concat([path.join(path.dirname(this.sfiFilePath), '..', 'pylon.d.ts')])\n\n this.program = ts.createProgram(filesInSfiDir, tsConfigOptions)\n\n this.checker = this.program.getTypeChecker()\n\n this.loadSfi()\n }\n\n private loadSfi() {\n const sourceFiles = this.program.getSourceFiles()\n\n const file = sourceFiles.find(\n file => path.resolve(file.fileName) === this.sfiFilePath\n )\n\n if (!file) {\n throw new Error('Could not find index.ts (pylon entrypoint)')\n }\n\n this.sfiFile = file\n\n const sfiFileSymbol = this.checker.getSymbolAtLocation(file)!\n const sfiFileExports = this.checker.getExportsOfModule(sfiFileSymbol!)\n const sfiFileDefaultExport = sfiFileExports.find(\n exportSymbol => exportSymbol.escapedName === 'graphql'\n )\n\n if (!sfiFileDefaultExport) {\n throw new Error('Could not find graphql export')\n }\n\n this.sfi = sfiFileDefaultExport\n }\n\n private loadTsConfigOptions() {\n const defaultOptions: ts.CompilerOptions = {\n target: ts.ScriptTarget.ESNext,\n module: ts.ModuleKind.CommonJS,\n strict: true,\n esModuleInterop: true,\n skipLibCheck: false,\n forceConsistentCasingInFileNames: true,\n noImplicitAny: true,\n experimentalDecorators: true\n }\n\n // Find the tsconfig.json file\n const configPath = ts.findConfigFile(\n path.dirname(this.sfiFilePath), // Directory to start searching from\n ts.sys.fileExists, // Function to check if a file exists\n 'tsconfig.json' // File name to search for\n )\n\n if (!configPath) {\n console.log('Could not find tsconfig.json')\n return defaultOptions\n }\n\n // Read the tsconfig.json file\n const configFile = ts.readConfigFile(configPath, ts.sys.readFile)\n\n if (configFile.error) {\n console.log('Could not read tsconfig.json', configFile.error)\n return defaultOptions\n }\n\n // Parse the tsconfig.json file\n const parsedConfig = ts.parseJsonConfigFileContent(\n configFile.config,\n ts.sys,\n path.dirname(configPath)\n )\n\n return parsedConfig.options\n }\n\n public build() {\n const sfiType = this.checker.getTypeOfSymbolAtLocation(\n this.sfi,\n this.sfiFile\n )\n\n // const plainResolversProperty = sfiType.getProperty('plainResolvers')\n\n // if (!plainResolversProperty) {\n // throw new Error('Could not find plainResolvers property')\n // }\n\n // const plainResolversType = this.checker.getTypeOfSymbolAtLocation(\n // plainResolversProperty,\n // this.sfiFile\n // )\n\n const queryProperty = sfiType.getProperty('Query')\n const mutationProperty = sfiType.getProperty('Mutation')\n const subscriptionProperty = sfiType.getProperty('Subscription')\n\n const queryType = queryProperty\n ? this.checker.getTypeOfSymbolAtLocation(queryProperty, this.sfiFile)\n : undefined\n const mutationType = mutationProperty\n ? this.checker.getTypeOfSymbolAtLocation(mutationProperty, this.sfiFile)\n : undefined\n const subscriptionType = subscriptionProperty\n ? this.checker.getTypeOfSymbolAtLocation(\n subscriptionProperty,\n this.sfiFile\n )\n : undefined\n\n const parser = new SchemaParser(this.checker, this.sfiFile, this.program)\n\n parser.parse({\n Query: queryType,\n Mutation: mutationType,\n Subscription: subscriptionType\n })\n\n return {\n typeDefs: parser.toString(),\n schema: parser.getSchema(),\n resolvers: parser.getResolvers()\n }\n }\n}\n", "import ts from 'typescript'\nimport {\n getPromiseType,\n getPublicPropertiesOfType,\n isPrimitiveUnion,\n isFunction,\n isList,\n isPrimitive,\n isPromise,\n isSubscriptionRepeater\n} from './types-helper.js'\nimport {\n TypeDefinitionBuilder,\n Union as _Union,\n Enum as _Enum\n} from './type-definition-builder.js'\nimport consola from 'consola'\n\ntype Union = _Union & {\n description: string\n __resolveType?: (obj: any) => string\n}\n\ntype Interface = {\n name: string\n description: string\n fields: Array<Field>\n __resolveType?: (obj: any) => string\n}\n\ntype Enum = _Enum & {\n description: string\n}\n\ninterface TypeDefinition {\n name: string\n isList: boolean\n isRequired: boolean\n description: string\n}\n\ninterface Field {\n name: string\n type: TypeDefinition\n}\n\ninterface Input {\n name: string\n description: string\n fields: Array<{\n name: string\n type: TypeDefinition\n }>\n}\n\ninterface Type {\n name: string\n description: string\n fields: Array<\n Field & {\n args: Array<{\n name: string\n type: TypeDefinition\n }>\n }\n >\n implements?: Array<string>\n rawType: ts.Type\n}\n\nexport interface Schema {\n types: Array<Type>\n inputs: Array<Input>\n interfaces: Array<Interface>\n unions: Array<Union>\n enums: Array<Enum>\n scalars: Array<string>\n}\n\ntype ReferenceSchemaType = {\n returnType: ts.Type\n symbol: ts.Symbol\n args: {\n // value needs to be inputs type\n [key: string]: {\n type: ts.Type\n isRequired?: boolean\n documentation: string\n }\n }\n}\n\ninterface ReferenceSchema {\n types: Map<\n ts.Type,\n {\n [key: string]: ReferenceSchemaType\n }\n >\n classImplementsMap: Map<ts.Type, ts.Type[]>\n inputs: ReferenceSchema['types']\n}\n\ninterface Index {\n Query?: ts.Type\n Mutation?: ts.Type\n Subscription?: ts.Type\n}\n\nexport class SchemaParser {\n private schema: Schema\n private checker: ts.TypeChecker\n private program: ts.Program\n private sfiFile: ts.SourceFile\n private typeDefinitionBuilder: TypeDefinitionBuilder\n\n constructor(\n checker: ts.TypeChecker,\n sfiFile: ts.SourceFile,\n program: ts.Program\n ) {\n this.schema = {\n types: [],\n inputs: [],\n interfaces: [],\n unions: [],\n enums: [],\n scalars: [\n 'ID',\n 'Int',\n 'Float',\n 'Number',\n 'Any',\n 'Void',\n 'Object',\n 'File',\n 'Date',\n 'JSON',\n 'String',\n 'Boolean'\n ]\n }\n\n this.checker = checker\n this.sfiFile = sfiFile\n this.program = program\n\n this.typeDefinitionBuilder = new TypeDefinitionBuilder(checker, this.schema)\n }\n\n public parse(index: Index) {\n const referenceSchema = this.makeReferenceSchema(index)\n\n for (const [type, properties] of referenceSchema.types) {\n let typeName: string | undefined = undefined\n\n if (index.Query === type) {\n typeName = 'Query'\n } else if (index.Mutation === type) {\n typeName = 'Mutation'\n } else if (index.Subscription === type) {\n typeName = 'Subscription'\n }\n\n this.processSchemaReference(type, properties, typeName, 'types')\n }\n\n for (const [type, properties] of referenceSchema.inputs) {\n this.processSchemaReference(type, properties, undefined, 'inputs')\n }\n\n this.extractForbiddenFieldNamesFromSchema()\n\n this.schema.unions = this.typeDefinitionBuilder\n .getUnions()\n .map((union): Union => {\n return {\n ...union,\n description: this.getTypeDocumentation(union.rawType)\n }\n })\n\n this.schema.enums = this.typeDefinitionBuilder\n .getEnums()\n .map((enumType): Enum => {\n return {\n ...enumType,\n description: this.getTypeDocumentation(enumType.rawType)\n }\n })\n\n // Remove `types` and `inputs` that are represented as enums\n this.schema.types = this.schema.types.filter(type => {\n return !this.schema.enums.find(e => e.name === type.name)\n })\n\n this.schema.inputs = this.schema.inputs.filter(input => {\n return !this.schema.enums.find(e => e.name === input.name)\n })\n\n // Go through all unions and check if it could be an interface\n\n this.schema.unions.forEach(union => {\n const interfaceUnion = this.checkIfInterfaceIsPossibleForUnion(\n union,\n this.schema.types\n )\n\n if (interfaceUnion) {\n this.schema.interfaces.push(interfaceUnion)\n\n // Remove the union from the types\n this.schema.unions = this.schema.unions.filter(\n type => type.name !== union.name\n )\n\n // Add the `implements` field to the types that implement the interface\n this.schema.types.map(type => {\n if (union.types.includes(type.name)) {\n if (!type.implements) {\n type.implements = []\n }\n\n type.implements.push(interfaceUnion.name)\n\n return type\n }\n })\n }\n })\n\n // // Go through all types and check if a type is an interface\n\n for (const [\n classType,\n implementingTypes\n ] of referenceSchema.classImplementsMap) {\n this.schema.types.map(type => {\n const schemaType = this.schema.types.find(t => t.rawType === classType)\n\n if (schemaType) {\n schemaType.implements = Array.from(\n new Set([\n ...(schemaType.implements || []),\n ...implementingTypes.map(t => this.checker.typeToString(t))\n ])\n )\n }\n\n return type\n })\n\n // Add the implementing types to the interfaces\n for (const implementingType of implementingTypes) {\n const schemaType = this.schema.types.find(\n t => t.rawType === implementingType\n )\n\n // Remove the implementing type from the types and add it to the interfaces\n\n if (schemaType) {\n this.schema.interfaces.push({\n name: this.checker.typeToString(implementingType),\n description: this.getTypeDocumentation(implementingType),\n fields: schemaType.fields\n })\n\n this.schema.types = this.schema.types.filter(\n type => type.rawType !== implementingType\n )\n }\n }\n }\n\n // Remove `Void` fields from types when they have a implementation or are part of a union\n this.schema.types = this.schema.types.map(type => {\n if (\n type.implements ||\n this.schema.unions.find(u => u.types.includes(type.name))\n ) {\n // Remove Void fields\n type.fields = type.fields.filter(field => {\n return field.type.name !== 'Void'\n })\n }\n\n return type\n })\n\n // Generate the __resolveType function for the unions\n this.schema.unions = this.schema.unions.map(union => {\n return {\n ...union,\n __resolveType: this.getResolveTypeForUnionOrInterface(\n union,\n this.schema.types\n )\n }\n })\n\n // Generate the __resolveType function for the interfaces\n this.schema.interfaces = this.schema.interfaces.map(intf => {\n return {\n ...intf,\n __resolveType: this.getResolveTypeForUnionOrInterface(\n intf,\n this.schema.types\n )\n }\n })\n }\n\n private checkIfInterfaceIsPossibleForUnion(\n union: Union,\n types: Array<Type>\n ): Interface | null {\n const unionTypes = union.types.map(t => {\n const type = types.find(type => type.name === t)\n\n if (!type) {\n throw new Error(`Type ${t} not found`)\n }\n\n return type\n })\n\n const baseType = unionTypes[0]\n\n // Check which fields are common in all types\n\n const commonFields = baseType.fields.filter(field => {\n return unionTypes.every(type => {\n return type.fields.some(\n f => JSON.stringify(f) === JSON.stringify(field)\n )\n })\n })\n\n if (commonFields.length > 0) {\n return {\n name: union.name,\n description: union.description,\n fields: commonFields\n }\n }\n\n return null\n }\n\n private getResolveTypeForUnionOrInterface(\n entity: Union | Interface,\n types: Array<Type>\n ) {\n const entityTypes =\n 'types' in entity\n ? types.filter(t => entity.types.includes(t.name))\n : types.filter(t => t.implements?.includes(entity.name))\n\n // Sort fieldTypes by the number of fields in descending order.\n // This prioritizes types with more properties, which are more likely\n // to match a given node, thus reducing ambiguity in type resolution.\n entityTypes.sort((a, b) => b.fields.length - a.fields.length)\n\n // Check for unions with the exact same fields\n const fieldSignatures = new Map<string, Type>()\n\n entityTypes.forEach(type => {\n // Create a signature based on sorted field names\n const fieldNames = type.fields\n .map(field => field.name)\n .sort()\n .join(', ')\n\n if (fieldSignatures.has(fieldNames)) {\n const existingType = fieldSignatures.get(fieldNames)\n consola.warn(\n `Warning: Union types \"${type.name}\" and \"${existingType?.name}\" have the same fields: [${fieldNames}]. ` +\n `\\nConsider differentiating these types by adding unique fields or using different type names.` +\n `\\nThis may cause ambiguity in type resolution.`\n )\n } else {\n fieldSignatures.set(fieldNames, type)\n }\n })\n\n const checks = entityTypes.map(type => {\n const fields = type.fields\n\n const fieldChecks = fields\n .map(field => `\"${field.name}\" in node`)\n .join(' && ')\n\n return `if (${fieldChecks}) {return '${type.name}'};`\n })\n\n const str = `function resolveType(node) { if (node && typeof node === 'object') { ${checks.join(\n ' '\n )} } }`\n\n return new Function('return ' + str)()\n }\n\n public toString() {\n const {typeDefinitionToGraphQLType} = this.typeDefinitionBuilder\n\n const addDescription = (description: string) => {\n if (!description) return ''\n\n return `\"\"\"\\n${description}\\n\"\"\"\\n`\n }\n\n // build a valid GraphQL schema string from the schema object\n let schemaString = ''\n\n // loop over the input objects in the schema\n for (const input of this.schema.inputs) {\n // add the input object to the schema string\n\n schemaString += addDescription(input.description)\n schemaString += `input ${input.name} {\\n`\n\n // add a nop field to the input object if it has no fields\n if (input.fields.length === 0) {\n schemaString += `\\t_ : String\\n`\n }\n\n // loop over the fields in the input object\n for (const field of input.fields) {\n // add the field to the input object in the schema string\n schemaString += `${addDescription(field.type.description)}`\n schemaString += `\\t${field.name}: ${typeDefinitionToGraphQLType(\n field.type\n )}\\n`\n }\n\n schemaString += `}\\n`\n }\n\n // loop over the type objects in the schema\n for (const type of this.schema.types) {\n if (type.fields.length === 0) continue\n\n // add the type object to the schema string\n schemaString += addDescription(type.description)\n schemaString += `type ${type.name}`\n if (type.implements) {\n schemaString += ` implements ${type.implements.join(' & ')}`\n }\n schemaString += ` {\\n`\n\n\n // loop over the fields in the type object\n for (const field of type.fields) {\n // build the argument list for the field if there is at least one argument\n let args = ''\n\n if (field.args.length > 0) {\n args = `(${field.args\n .map(\n arg =>\n `${addDescription(arg.type.description)}${\n arg.name\n }: ${typeDefinitionToGraphQLType(arg.type)}`\n )\n .join(', ')})`\n }\n\n // add the field to the type object in the schema string\n schemaString += `${addDescription(field.type.description)}`\n schemaString += `${field.name}${args}: ${typeDefinitionToGraphQLType(\n field.type\n )}\\n`\n }\n\n schemaString += `}\\n`\n }\n\n // loop over the union objects in the schema\n for (const union of this.schema.unions) {\n // add the union object to the schema string\n schemaString += addDescription(union.description)\n schemaString += `union ${union.name} = ${union.types.join(' | ')}\\n`\n }\n\n // loop over the interface objects in the schema\n for (const intf of this.schema.interfaces) {\n // add the interface object to the schema string\n schemaString += addDescription(intf.description)\n schemaString += `interface ${intf.name} {\\n`\n\n // loop over the fields in the interface object\n for (const field of intf.fields) {\n // add the field to the interface object in the schema string\n schemaString += `${addDescription(field.type.description)}`\n schemaString += `${field.name}: ${typeDefinitionToGraphQLType(\n field.type\n )}\\n`\n }\n\n schemaString += `}\\n`\n }\n\n // loop over the scalar objects in the schema\n for (const scalar of this.schema.scalars) {\n // add the scalar object to the schema string\n schemaString += `scalar ${scalar}\\n`\n }\n\n // loop over the enum objects in the schema\n for (const enumType of this.schema.enums) {\n // add the enum object to the schema string\n schemaString += addDescription(enumType.description)\n schemaString += `enum ${enumType.name} {\\n`\n\n // loop over the values in the enum object\n for (const value of enumType.values) {\n // add the value to the enum object in the schema string\n schemaString += `\\t${value}\\n`\n }\n\n schemaString += `}\\n`\n }\n\n // return the schema string\n return schemaString\n }\n\n public getSchema() {\n return this.schema\n }\n\n public getResolvers() {\n // Get union and interface resolvers\n\n const resolvers: Record<\n string,\n {\n __resolveType?: (obj: any) => string\n }\n > = {}\n\n // loop over the union objects in the schema\n for (const union of this.schema.unions) {\n resolvers[union.name] = {\n __resolveType: union.__resolveType\n }\n }\n\n // loop over the interface objects in the schema\n for (const intf of this.schema.interfaces) {\n resolvers[intf.name] = {\n __resolveType: intf.__resolveType\n }\n }\n\n return resolvers\n }\n\n private processSchemaReference(\n type: ts.Type,\n properties: {[key: string]: ReferenceSchemaType},\n typeName?: string,\n processing: 'inputs' | 'types' = 'types'\n ) {\n const {getTypeDefinition} = this.typeDefinitionBuilder\n\n const isInputType = processing === 'inputs'\n\n const def = getTypeDefinition(type, {isInputType})\n\n const name = typeName || def.name\n\n let root = this.schema[processing].find(t => t.name === name)\n\n if (!root) {\n if (this.schema.scalars.includes(name)) {\n return\n } else {\n this.schema[processing].push({\n name,\n description: this.getTypeDocumentation(type),\n fields: [],\n rawType: isList(this.checker, type)\n ? type.getNumberIndexType() || type.getStringIndexType() || type\n : type\n })\n\n root = this.schema[processing][this.schema[processing].length - 1]!\n }\n }\n\n for (const [propertyName, property] of Object.entries(properties)) {\n const fieldType = property.returnType\n\n const fieldDef = getTypeDefinition(fieldType, {\n isInputType,\n propertyName\n })\n\n if (processing === 'types') {\n const field: Type['fields'][number] = {\n name: propertyName,\n type: {\n ...fieldDef,\n description: this.getSymbolDocumentation(property.symbol)\n },\n args: []\n }\n\n if (property.args) {\n for (const [argName, arg] of Object.entries(property.args)) {\n const argType = arg\n\n const fieldDef = getTypeDefinition(argType.type, {\n isInputType: true,\n propertyName: argName,\n isRequired: arg.isRequired\n })\n\n if (\n this.schema.scalars.includes(\n this.checker.typeToString(argType.type)\n )\n ) {\n fieldDef.name = this.checker.typeToString(argType.type)\n }\n\n field.args.push({\n name: argName,\n type: {\n ...fieldDef,\n description: argType.documentation\n }\n })\n }\n }\n\n root.fields.push(field)\n } else if (processing === 'inputs') {\n const field: Input['fields'][number] = {\n name: propertyName,\n type: {\n ...fieldDef,\n description: this.getTypeDocumentation(fieldType)\n }\n }\n\n if (!root.fields.find(f => f.name === field.name)) {\n root.fields.push(field)\n }\n }\n }\n }\n\n private getSymbolDocumentation(symbol: ts.Symbol) {\n let header = ''\n\n header += ts.displayPartsToString(\n symbol.getDocumentationComment(this.checker)\n )\n\n const tags = symbol\n .getJsDocTags(this.checker)\n .map(t => `@${t.name} ${ts.displayPartsToString(t.text)}`)\n .join('\\n')\n\n if (tags) {\n header += '\\n' + tags\n }\n\n return header\n }\n\n private getTypeDocumentation = (type: ts.Type) => {\n const symbol = type.getSymbol()\n\n if (symbol) {\n return this.getSymbolDocumentation(symbol)\n }\n\n return ''\n }\n\n /**\n * Extracts reserved field names from the schema by removing them from their respective types and inputs.\n */\n private extractForbiddenFieldNamesFromSchema(): void {\n // Define a regular expression to check if a field name is a valid GraphQL field name.\n const validFieldNameRegExp = /^[_A-Za-z][_0-9A-Za-z]*$/\n\n // Define a helper function to check if a field name is reserved.\n const isReserved = (name: string): boolean => {\n if (!validFieldNameRegExp.test(name)) {\n // console.warn(\n // `\\x1b[33mWarning: forbidden field name \"${name}\" detected\\x1b[0m`\n // )\n return true\n }\n // Fields starting with \"__\" are considered reserved.\n return name.startsWith('__')\n }\n\n // Loop over each type in the schema and remove any reserved fields.\n for (const type of this.schema.types) {\n type.fields = type.fields.filter(field => {\n if (isReserved(field.name)) {\n // console.warn(\n // `\\x1b[33mWarning: forbidden field \"${field.name}\" detected in type \"${type.name}\". This field will be excluded from the schema.\\x1b[0m`\n // )\n return false\n }\n return true\n })\n }\n\n // Loop over each input in the schema and remove any reserved fields.\n for (const input of this.schema.inputs) {\n input.fields = input.fields.filter(field => {\n if (isReserved(field.name)) {\n // console.warn(\n // `\\x1b[33mWarning: reserved field \"${field.name}\" detected in input \"${input.name}\". This field will be excluded from the schema.\\x1b[0m`\n // )\n return false\n }\n return true\n })\n }\n }\n\n private makeReferenceSchema(index: Index): ReferenceSchema {\n const referenceSchema: ReferenceSchema = {\n types: new Map(),\n inputs: new Map(),\n classImplementsMap: new Map()\n }\n\n const recLoop = (\n type: ts.Type,\n info: {\n propetyName?: string\n parentType?: ts.Type\n } = {},\n processing: 'inputs' | 'types' = 'types',\n path: Array<string> = []\n ) => {\n if (referenceSchema[processing].has(type)) {\n return\n }\n\n if (isSubscriptionRepeater(type)) {\n // type: Repeater<{ id: number; title: string; content: string; }, any, unknown>\n\n const repeaterItemType = this.checker.getTypeArguments(type as any)[0]\n\n recLoop(repeaterItemType, info, processing, [...path, 'REPEATER_ITEM'])\n\n return\n }\n\n // check if argType is a real type to ignore '[]'\n const wrongType = this.checker.typeToString(type) === '[]'\n\n if (wrongType) {\n return\n }\n\n // skip if scalar\n if (this.schema.scalars.includes(this.checker.typeToString(type))) {\n return\n }\n\n if (isPrimitive(type)) {\n return\n }\n\n if (isPromise(type)) {\n // skip if input\n if (processing === 'inputs') {\n return\n }\n\n const promiseType = getPromiseType(type)\n\n if (promiseType) {\n recLoop(promiseType, info, processing, [...path, 'PROMISE'])\n }\n\n return\n }\n\n if (type.isClass()) {\n const baseTypes = type.getBaseTypes()\n if (baseTypes) {\n baseTypes.forEach(baseType => {\n if (!referenceSchema.classImplementsMap.has(baseType)) {\n referenceSchema.classImplementsMap.set(baseType, [])\n }\n referenceSchema.classImplementsMap.get(baseType)!.push(type)\n })\n }\n }\n\n if (type.isUnion()) {\n if (isPrimitiveUnion(type)) {\n if (!referenceSchema[processing].has(type)) {\n referenceSchema[processing].set(type, {})\n }\n\n recLoop(type, info, processing, [...path, 'ENUM'])\n } else {\n if (processing === 'types') {\n type.types.forEach(t => {\n // if null or undefined, skip\n if (\n t.flags & ts.TypeFlags.Null ||\n t.flags & ts.TypeFlags.Undefined ||\n isPrimitive(t)\n ) {\n return\n }\n\n recLoop(t, info, processing, [\n ...path,\n t.symbol?.getName() || `N/A ${this.checker.typeToString(t)}`\n ])\n })\n } else {\n let firstType = type.getNonNullableType()\n\n if (firstType.isUnion() && !isPrimitive(firstType)) {\n consola.warn(\n `Warning: Union types in input fields are not supported yet. Defaulting to the first type (${this.checker.typeToString(\n firstType\n )}) at path: ${path.join(' > ')}`\n )\n\n firstType = firstType.types[0]\n }\n\n recLoop(firstType, info, processing, [...path, 'NON_NULLABLE'])\n }\n }\n } else if (isFunction(type)) {\n // skip fn for inputs\n if (processing === 'inputs') {\n return\n }\n\n if (!info.parentType) {\n throw new Error('Cannot have a function without a parent type')\n }\n\n const signature = type.getCallSignatures()[0]\n const args = signature?.getParameters() || []\n const returnType = signature?.getReturnType()\n\n const schemaType = referenceSchema[processing].get(info.parentType)![\n info.propetyName!\n ]!\n\n args.forEach(arg => {\n const argType = this.checker.getTypeOfSymbolAtLocation(\n arg,\n this.sfiFile\n )\n\n if (this.checker.isTupleType(argType)) {\n // Iterate over the rest of the arguments\n const tupleType = argType as ts.TupleType\n\n const elements = (tupleType.target as any)\n .labeledElementDeclarations\n\n elements.forEach((element, idx: number) => {\n const elementType = this.checker.getTypeAtLocation(element)\n\n const elementName = element.name.text\n const elementSymbol = this.checker.getSymbolAtLocation(element)\n\n const elementDocumentation = this.getSymbolDocumentation(\n elementSymbol || arg\n )\n\n schemaType.args[elementName] = {\n type: elementType,\n isRequired:\n element.initializer === undefined ? undefined : false,\n documentation: elementDocumentation\n }\n\n recLoop(\n elementType,\n {\n parentType: type\n },\n 'inputs',\n [...path, elementName]\n )\n })\n } else if (\n arg.valueDeclaration &&\n ts.isParameter(arg.valueDeclaration) &&\n arg.valueDeclaration.dotDotDotToken\n ) {\n consola.warn(\n `Warning: Rest parameters without explicit names are not supported. ` +\n `Skipping rest parameter at path: ${path.join(' > ')}.\\n\\n` +\n `Unsupported: \\`function example(...args: any[]) { }\\`.\\n` +\n `Supported: \\`function example(...namedArgs: [first: string, second: number]) { }\\`.\\n` +\n `Please provide named rest parameters to ensure proper type resolution.`\n )\n } else {\n const valueDeclaration =\n arg.valueDeclaration as ts.ParameterDeclaration\n\n // set args to empty object if not set\n if (schemaType.args) {\n schemaType.args[arg.escapedName as string] = {\n type: argType,\n isRequired:\n valueDeclaration.initializer === undefined\n ? undefined\n : false,\n documentation: this.getSymbolDocumentation(arg)\n }\n\n recLoop(\n argType,\n {\n parentType: type\n },\n 'inputs',\n [...path, arg.escapedName as string]\n )\n }\n }\n })\n\n if (returnType) {\n recLoop(returnType, info, processing, [...path, 'RETURN_TYPE'])\n }\n } else if (isList(this.checker, type)) {\n const itemType = this.checker.getIndexTypeOfType(\n type,\n ts.IndexKind.Number\n )\n\n if (itemType && !isPrimitive(itemType)) {\n if (!referenceSchema[processing].has(type)) {\n referenceSchema[processing].set(type, {})\n }\n\n recLoop(itemType, info, processing, [...path, 'ITEM_TYPE'])\n }\n } else if (!isPrimitive(type)) {\n const properties = getPublicPropertiesOfType(this.checker, type)\n\n if (!referenceSchema[processing].has(type)) {\n referenceSchema[processing].set(type, {})\n }\n\n properties.forEach(property => {\n const propertyType = this.checker.getTypeOfSymbolAtLocation(\n property,\n this.sfiFile\n )\n\n if (\n !referenceSchema[processing].get(type)![\n property.escapedName as string\n ]\n ) {\n referenceSchema[processing].get(type)![\n property.escapedName as string\n ] = {\n symbol: property,\n returnType: propertyType,\n args: {}\n }\n }\n\n recLoop(\n propertyType,\n {\n propetyName: property.escapedName as string,\n parentType: type\n },\n processing,\n [...path, property.escapedName as string]\n )\n })\n }\n }\n\n if (index.Query) {\n recLoop(index.Query)\n }\n\n if (index.Mutation) {\n recLoop(index.Mutation)\n }\n\n if (index.Subscription) {\n recLoop(index.Subscription)\n }\n\n // Handle classes that implement interfaces of the schema\n const sourceFiles = this.program.getSourceFiles()\n\n for (const sourceFile of sourceFiles) {\n ts.forEachChild(sourceFile, node => {\n if (ts.isClassDeclaration(node)) {\n const baseTypes =\n node.heritageClauses?.flatMap(heritage =>\n heritage.types.map(type => {\n return type\n })\n ) || []\n\n // Check if the class implements an interface\n if (baseTypes.length > 0) {\n for (const baseType of baseTypes) {\n if (\n referenceSchema.types.has(\n this.checker.getTypeAtLocation(baseType)\n )\n ) {\n referenceSchema.classImplementsMap.set(\n this.checker.getTypeAtLocation(node),\n [this.checker.getTypeAtLocation(baseType)]\n )\n\n recLoop(this.checker.getTypeAtLocation(node))\n }\n }\n }\n }\n })\n }\n\n return referenceSchema\n }\n}\n", "import ts from 'typescript'\n\nexport const isEmptyObject = (type: ts.Type) => {\n return (\n type.flags & ts.TypeFlags.Object &&\n type.getProperties().length === 0 &&\n type.getCallSignatures().length === 0\n )\n}\n\nexport const isList = (checker: ts.TypeChecker, type: ts.Type) => {\n const typeNode = checker.typeToTypeNode(type, undefined, undefined)\n\n const is = !!(\n typeNode &&\n (typeNode.kind === ts.SyntaxKind.ArrayType ||\n typeNode.kind === ts.SyntaxKind.TupleType)\n )\n\n if (!is) {\n // Check if type references an array\n const isArray = type.getSymbol()?.getName() === 'Array'\n\n if (isArray) {\n return true\n }\n }\n\n return is\n}\n\nexport const isBoolean = (type: ts.Type) => {\n // check if is union and all types are boolean\n if (type.isUnion()) {\n const isAllBooleans = type.types.every(\n t => t.flags & ts.TypeFlags.BooleanLiteral\n )\n\n return isAllBooleans\n }\n\n return false\n}\n\nexport const isPrimitive = (type: ts.Type) => {\n const primitive =\n type.flags & ts.TypeFlags.String ||\n type.flags & ts.TypeFlags.Number ||\n type.flags & ts.TypeFlags.Boolean ||\n type.flags & ts.TypeFlags.StringLiteral ||\n type.flags & ts.TypeFlags.NumberLiteral ||\n type.flags & ts.TypeFlags.BooleanLiteral\n\n return primitive\n}\n\nexport const isFunction = (type: ts.Type) => {\n return type.getCallSignatures().length > 0\n}\n\nexport const isPrimitiveUnion = (type: ts.Type) => {\n if (isPrimitive(type)) return false\n\n const isUnion = (type as ts.UnionType).types?.length > 1\n\n if (isUnion) {\n // check if all types are primitives\n const isAllPrimitives = (type as ts.UnionType).types.every(\n t =>\n t.flags & ts.TypeFlags.StringLiteral ||\n t.flags & ts.TypeFlags.NumberLiteral ||\n t.flags & ts.TypeFlags.BooleanLiteral\n )\n\n if (isAllPrimitives) {\n return true\n }\n }\n\n return false\n}\n\nexport const isPromise = (type: ts.Type) => {\n // check if type is a promise\n return type.getSymbol()?.getName() === 'Promise'\n}\n\nexport const getPromiseType = (type: ts.Type) => {\n let objectType = type as ts.ObjectType\n\n if (objectType.objectFlags & ts.ObjectFlags.Reference) {\n const reference = type as ts.TypeReference\n const typeArguments = reference.typeArguments\n if (typeArguments && typeArguments.length > 0) {\n return typeArguments[0]\n }\n }\n}\n\nexport const excludeNullUndefinedFromType = (type: ts.Type) => {\n if (!type.isUnion())\n return {\n type,\n wasOptional: false\n }\n\n const types = type.types.filter(\n t => !(t.flags & ts.TypeFlags.Undefined || t.flags & ts.TypeFlags.Null)\n )\n\n const wasOptional = types.length !== type.types.length\n\n return {\n type: type.getNonNullableType(),\n wasOptional\n }\n}\n\nexport function getPublicPropertiesOfType(\n checker: ts.TypeChecker,\n _type: ts.Type\n): ts.Symbol[] {\n let type = _type\n\n if (type.isUnion()) {\n // Filter out array types from the union if their non-array counterparts are also present\n const nonArrayTypes = type.types.filter(\n t =>\n !(\n t.flags & ts.TypeFlags.Object &&\n (t as ts.ObjectType).objectFlags & ts.ObjectFlags.Reference &&\n (t as ts.TypeReference).typeArguments?.length\n )\n )\n const arrayElementTypes = type.types\n .filter(\n t =>\n t.flags & ts.TypeFlags.Object &&\n (t as ts.ObjectType).objectFlags & ts.ObjectFlags.Reference &&\n (t as ts.TypeReference).typeArguments?.length\n )\n .map(t => (t as ts.TypeReference).typeArguments![0])\n const filteredTypes = nonArrayTypes.filter(\n t => !arrayElementTypes.some(et => et === t)\n )\n // .filter(t => {\n // // filter out primitive types\n // return !isPrimitive(t)\n // })\n\n // Create a new type that is the union of all the types in the union\n // This is necessary because the type checker will not resolve properties\n // that are only present on some types in the union\n // getUnionType is not available in TS 3.7, so we have to use the private API\n type = (checker as any).getUnionType(filteredTypes) as ts.Type\n }\n\n const properties: ts.Symbol[] = []\n\n // if type is a primitive, return empty array\n if (isList(checker, type) || isPrimitive(type) || isPrimitiveUnion(type))\n return properties\n\n let typeProperties: ts.Symbol[] = []\n\n typeProperties =\n (type as any).resolvedProperties || type.getProperties() || []\n\n for (const prop of typeProperties) {\n const isPublic =\n prop.valueDeclaration &&\n !(\n ts.getCombinedModifierFlags(prop.valueDeclaration) &\n ts.ModifierFlags.Private\n ) &&\n !prop.getName().startsWith('#')\n\n if (isPublic === false) {\n continue\n }\n\n properties.push(prop)\n }\n\n return properties\n}\n\nexport const safeTypeName = (name: string) => {\n return name.replace(/[^0-9a-zA-Z_]/g, '_')\n}\n\nexport const isSubscriptionRepeater = (type: ts.Type) => {\n return !!type\n .getSymbol()\n ?.getDeclarations()\n ?.some(d => {\n const sourceFile = d.getSourceFile().fileName\n\n return sourceFile.includes('@repeaterjs')\n })\n}\n", "import ts from 'typescript'\nimport {\n excludeNullUndefinedFromType,\n getPromiseType,\n isEmptyObject,\n isPrimitiveUnion,\n isFunction,\n isList,\n isPrimitive,\n isPromise,\n isSubscriptionRepeater,\n safeTypeName\n} from './types-helper.js'\nimport {Schema} from './schema-parser.js'\n\nexport interface Union {\n name: string\n rawType: ts.Type\n types: Array<string>\n}\n\nexport interface Enum {\n name: string\n rawType: ts.Type\n values: Array<string>\n}\n\ninterface FieldDefinition {\n name: string\n isList: boolean\n isRequired: boolean\n isListRequired?: boolean\n}\n\nexport class TypeDefinitionBuilder {\n private checker: ts.TypeChecker\n private schema: Schema\n\n private typesNameMap: Map<ts.Type, string> = new Map()\n private inputsNameMap: Map<ts.Type, string> = new Map()\n\n private unions: Array<Union> = []\n private enums: Array<Enum> = []\n\n constructor(checker: ts.TypeChecker, schema: Schema) {\n this.checker = checker\n this.schema = schema\n }\n\n getTypeDefinition = (\n rawType: ts.Type,\n options: {\n isInputType?: boolean\n isRequired?: boolean\n propertyName?: string\n } = {\n isInputType: false\n }\n ): FieldDefinition => {\n const {type, wasOptional} = excludeNullUndefinedFromType(rawType)\n\n if (\n type.flags & ts.TypeFlags.Void ||\n type.flags & ts.TypeFlags.Undefined ||\n type.flags & ts.TypeFlags.Null\n ) {\n return {\n name: 'Void',\n isList: false,\n isRequired: false\n }\n }\n\n if (isSubscriptionRepeater(type)) {\n const repeaterItemType = this.checker.getTypeArguments(type as any)[0]\n\n if (repeaterItemType) {\n return this.getTypeDefinition(repeaterItemType, options)\n }\n }\n\n if (isPromise(type)) {\n const promiseType = getPromiseType(type)\n if (promiseType) {\n return this.getTypeDefinition(promiseType, options)\n }\n }\n\n const isRequired =\n options.isRequired !== undefined ? options.isRequired : !wasOptional\n\n if (isEmptyObject(type)) {\n return {\n name: 'Object',\n isList: false,\n isRequired\n }\n }\n\n let nameMap = options.isInputType ? this.inputsNameMap : this.typesNameMap\n\n if (nameMap.has(type)) {\n const typeName = nameMap.get(type) as string\n\n return {\n name: typeName,\n isList: false,\n isRequired\n }\n }\n\n let typeName: string | undefined =\n type.aliasSymbol?.escapedName?.toString() ||\n type.symbol?.escapedName.toString()\n\n if (typeName === '__type' || typeName === '__object') {\n if (!options.propertyName) {\n typeName = undefined\n } else {\n const capitalizedPropertyName =\n options.propertyName.charAt(0).toUpperCase() +\n options.propertyName.slice(1)\n\n typeName = capitalizedPropertyName\n }\n }\n\n if (typeName) {\n typeName = safeTypeName(typeName)\n }\n\n const duplicateName = (name: string) => {\n // find name in typeNameMap\n return Array.from(nameMap.values()).includes(name)\n }\n\n if (typeName && !this.schema.scalars.includes(typeName)) {\n if (options.isInputType) {\n typeName = `${typeName}Input`\n }\n\n let i = 1\n let originalTypeName = typeName\n while (duplicateName(typeName as string)) {\n typeName = `${originalTypeName}_${i}`\n\n i++\n }\n }\n\n if (typeName && this.schema.scalars.includes(typeName)) {\n return {\n name: typeName,\n isList: false,\n isRequired\n }\n }\n\n if (isList(this.checker, type)) {\n const listType = this.checker.getIndexTypeOfType(\n type,\n ts.IndexKind.Number\n )\n\n if (listType) {\n const def = this.getTypeDefinition(listType, options)\n\n return {\n name: def.name,\n isList: true,\n isRequired: def.isRequired,\n isListRequired: isRequired\n }\n }\n } else if (isPrimitiveUnion(type)) {\n const typeNode = this.checker.typeToTypeNode(\n type,\n undefined,\n undefined\n ) as any | undefined\n\n const types = (type as ts.UnionType).types\n\n // enumerate all members of the enum\n const members = types.map((t: ts.Type) => {\n if (t.isLiteral()) {\n const name = t.value?.toString()\n\n if (!name) {\n throw new Error('Enum member name is undefined')\n }\n\n return safeTypeName(name)\n }\n\n throw new Error('Invalid type for enum member')\n })\n\n if (members.length > 0) {\n typeName = typeName || typeNode.typeName?.symbol?.escapedName\n\n if (!typeName) {\n typeName = members.join('_').toUpperCase()\n typeName = options.isInputType ? `${typeName}Input` : typeName\n }\n\n this.enums.push({\n name: typeName,\n values: members,\n rawType: type\n })\n }\n }\n // handle primitives\n else if (isPrimitive(type)) {\n let typeName = this.checker.typeToString(type)\n\n if (type.flags & ts.TypeFlags.StringLiteral) {\n typeName = 'String'\n } else if (type.flags & ts.TypeFlags.NumberLiteral) {\n typeName = 'Number'\n } else if (type.flags & ts.TypeFlags.BooleanLiteral) {\n typeName = 'Boolean'\n } else if (type.flags & ts.TypeFlags.String) {\n typeName = 'String'\n } else if (type.flags & ts.TypeFlags.Number) {\n typeName = 'Number'\n } else if (type.flags & ts.TypeFlags.Boolean) {\n typeName = 'Boolean'\n }\n\n return {\n name: safeTypeName(typeName),\n isList: false,\n isRequired\n }\n } else if (type.isIntersection()) {\n const intersectionTypes = type.types\n\n const typeNames = intersectionTypes.map(t => {\n const typeDef = this.getTypeDefinition(t, options)\n\n return typeDef.name\n })\n\n typeName = safeTypeName(typeName || typeNames.join('And'))\n } else if (type.isUnion()) {\n const unionTypes = type.types\n const required = type.types.length === unionTypes.length\n\n const hasPrimitivesOrEnum = unionTypes.some(t => {\n // If t is a array take the element type\n const type = isList(this.checker, t)\n ? this.checker.getIndexTypeOfType(t, ts.IndexKind.Number)\n : t\n\n if (!type) {\n // Return true if the type is undefined because we don't know what it is\n // Marking it as a primitive or enum will make it more error prone\n return true\n }\n\n return isPrimitive(type) || isPrimitiveUnion(type)\n })\n\n const unionTypeDefs = [\n ...new Set(\n unionTypes.map(t =>\n this.getTypeDefinition(t, {...options, isRequired: required})\n )\n )\n ]\n\n // If the union contains a array of some type, remove the type from the union because\n // the array type will be handled by the list type\n\n const listTypes = unionTypeDefs.filter(t => t.isList)\n\n // Check if the union contains the same type as a list\n for (const listType of listTypes) {\n const index = unionTypeDefs.findIndex(\n t => t.name === listType.name && !t.isList\n )\n\n if (index > -1) {\n unionTypeDefs.splice(index, 1)\n }\n }\n\n const typeNames = unionTypeDefs.map(t => t.name)\n\n typeName = safeTypeName(typeName || typeNames.join('Or'))\n\n // check if typeName is a duplicate\n if (typeName) {\n let i = 1\n let originalTypeName = typeName\n while (duplicateName(typeName as string)) {\n typeName = `${originalTypeName}_${i}`\n\n i++\n }\n }\n\n if (\n unionTypeDefs.length > 1 &&\n !options.isInputType &&\n !hasPrimitivesOrEnum\n ) {\n this.unions.push({\n name: typeName,\n types: typeNames,\n rawType: type\n })\n } else {\n // We only care about the first type in the union since GraphQL doesn't support unions of input types\n const typeDef = unionTypeDefs[0]\n\n if (!typeDef) {\n throw new Error('Cannot get type definition')\n }\n\n // If the types contain a list of the same type as the first type, then we can make the first type a list\n const isList = unionTypeDefs.some(t => {\n return t.isList && t.name === typeDef.name\n })\n\n return {\n name: typeDef.name,\n isList,\n isRequired\n }\n }\n }\n // handle functions\n else if (isFunction(type)) {\n const signature = type.getCallSignatures()[0]\n let returnType = signature?.getReturnType()\n\n if (returnType) {\n if (isPromise(returnType)) {\n const pt = getPromiseType(returnType)\n\n if (pt) {\n returnType = pt\n }\n }\n }\n\n if (returnType) {\n const def = this.getTypeDefinition(returnType, options)\n\n return def\n }\n }\n\n if (!typeName) {\n typeName = 'Any'\n }\n\n nameMap.set(type, typeName)\n\n return {\n name: typeName,\n isList: false,\n isRequired\n }\n }\n\n public getUnions(): Array<Union> {\n return this.unions\n }\n\n public getEnums(): Array<Enum> {\n return this.enums\n }\n\n public typeDefinitionToGraphQLType = (\n typeDefinition: FieldDefinition\n ): string => {\n let type = typeDefinition.name\n const {isList, isRequired, isListRequired} = typeDefinition\n\n if (isRequired) {\n type = `${type}!`\n }\n\n if (isList) {\n type = `[${type}]`\n\n if (isListRequired) {\n type = `${type}!`\n }\n }\n\n return type\n }\n}\n", "import path from 'path'\nimport fs from 'fs/promises'\nimport {generateClient} from '@gqty/cli'\nimport esbuild from 'esbuild'\nimport {buildSchema} from 'graphql'\nimport {updateFileIfChanged} from './update-file-if-changed'\n\nconst PYLON_SCHEMA_PATH = path.join(process.cwd(), '.pylon/schema.graphql')\nconst PYLON_CLIENT_PATH = path.join(process.cwd(), '.pylon/client/index.ts')\n\nexport interface BuildClientOptions {\n /**\n * Client will be generated if the schema has changed or if the client does not exist\n */\n schemaChanged: boolean\n}\n\nexport const buildClient = async ({schemaChanged}: BuildClientOptions) => {\n // Check if the schema exists\n\n try {\n await fs.access(PYLON_SCHEMA_PATH)\n } catch (e) {\n throw new Error(\n 'Schema not found. Please run `pylon build` or `pylon dev` first.'\n )\n }\n\n // Check if the client exists\n if (!schemaChanged) {\n // If the schema has not changed, we need to check if the client exists\n try {\n await fs.access(PYLON_CLIENT_PATH)\n return\n } catch (e) {\n // If the client does not exist, we need to generate it\n }\n }\n\n const schema = await fs.readFile(PYLON_SCHEMA_PATH, 'utf-8')\n\n const schemaObj = buildSchema(schema)\n\n // Write the custom client index file because the default one is not compatible with Pylon\n await fs.mkdir(path.dirname(PYLON_CLIENT_PATH), {recursive: true})\n await updateFileIfChanged(PYLON_CLIENT_PATH, customClientIndex)\n\n await generateClient(schemaObj, {\n endpoint: 'will-be-overwritten',\n frameworks: ['react'],\n destination: PYLON_CLIENT_PATH,\n react: true,\n scalarTypes: {\n Number: 'number',\n Object: 'Record<string, unknown>'\n }\n })\n\n await esbuild.build({\n entryPoints: [PYLON_CLIENT_PATH],\n bundle: true,\n outfile: path.join(process.cwd(), '.pylon/client/index.js'),\n packages: 'external',\n format: 'esm',\n platform: 'node'\n })\n}\n\nconst customClientIndex = `/**\n * GQty: You can safely modify this file based on your needs.\n */\n\nimport {createReactClient} from '@gqty/react'\nimport {\n Cache,\n createClient,\n defaultResponseHandler,\n type QueryFetcher\n} from 'gqty'\nimport {\n generatedSchema,\n scalarsEnumsHash,\n type GeneratedSchema\n} from './schema.generated'\n\nconst queryFetcher: QueryFetcher = async function (\n {query, variables, operationName},\n fetchOptions\n) {\n let browserOrInternalFetch: typeof fetch | typeof app.request = fetch\n\n try {\n const moduleNameToPreventBundling = '@getcronit/pylon'\n const {app} = await import(moduleNameToPreventBundling)\n\n browserOrInternalFetch = app.request\n } catch (error) {\n // Pylon is not found. Maybe we are running in a different environment.\n }\n\n const response = await browserOrInternalFetch('/graphql', {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n 'Authorization': typeof process !== 'undefined' ? process.env.PYLON_CLIENT_TOKEN : undefined,\n },\n body: JSON.stringify({\n query,\n variables,\n operationName\n }),\n mode: 'cors',\n ...fetchOptions\n })\n\n return await defaultResponseHandler(response)\n}\n\nconst cache = new Cache(\n undefined,\n /**\n * Default option is immediate cache expiry but keep it for 5 minutes,\n * allowing soft refetches in background.\n */\n {\n maxAge: Infinity,\n staleWhileRevalidate: 5 * 60 * 1000,\n normalization: true\n }\n)\n\nexport const client = createClient<GeneratedSchema>({\n schema: generatedSchema,\n scalars: scalarsEnumsHash,\n cache,\n fetchOptions: {\n fetcher: queryFetcher\n }\n})\n\n// Core functions\nexport const {resolve, subscribe, schema} = client\n\n// Legacy functions\nexport const {query, mutation, mutate, subscription, resolved, refetch, track} =\n client\n\nexport const {\n graphql,\n useQuery,\n usePaginatedQuery,\n useTransactionQuery,\n useLazyQuery,\n useRefetch,\n useMutation,\n useMetaState,\n prepareReactRender,\n useHydrateCache,\n prepareQuery\n} = createReactClient<GeneratedSchema>(client, {\n defaults: {\n // Enable Suspense, you can override this option for each hook.\n suspense: false\n }\n})\n\nexport * from './schema.generated'`\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
6
|
"names": ["program", "consola", "dotenv", "pm2", "version", "PostHog", "Conf", "readFileSync", "randomUUID", "schema", "config", "distinctId", "sessionId", "analytics", "getPylonDependencies", "packageJson", "dependencies", "devDependencies", "peerDependencies", "readPylonConfig", "data", "sanitizedData", "path", "context", "esbuildPluginTsc", "path", "fs", "path", "fs", "fs", "updateFileIfChanged", "path", "newContent", "err", "injectCodePlugin", "getBuildDefs", "outputDir", "build", "args", "path", "typeDefs", "resolvers", "preparedResolvers", "prepareObjectInjection", "contents", "fs", "typeDefsPath", "updateFileIfChanged", "resolversPath", "obj", "key", "value", "path", "fs", "consola", "notifyPlugin", "dir", "onBuild", "build", "loadSchema", "schemaPath", "cachedSchema", "startTime", "result", "error", "warning", "duration", "totalFiles", "totalSize", "acc", "output", "latestSchema", "schemaChanged", "esbuild", "readFileSync", "dirname", "resolve", "ts", "extractConfig", "inputFile", "outputFile", "filePath", "source", "sourceFile", "configCode", "importStatements", "node", "importText", "declaration", "finalConfig", "Bundler", "sfiFilePath", "outputDir", "args", "configPath", "path", "extractConfig", "config", "e", "buildContexts", "plugins", "plugin", "ctx", "options", "inputPath", "dir", "fs", "writeOnEndPlugin", "build", "result", "file", "updateFileIfChanged", "context", "notifyPlugin", "output", "injectCodePlugin", "esbuildPluginTsc", "pluginCtxs", "c", "ts", "ts", "ts", "isEmptyObject", "type", "isList", "checker", "typeNode", "is", "isPrimitive", "type", "ts", "isFunction", "isPrimitiveUnion", "t", "isPromise", "getPromiseType", "typeArguments", "excludeNullUndefinedFromType", "wasOptional", "getPublicPropertiesOfType", "checker", "_type", "nonArrayTypes", "arrayElementTypes", "filteredTypes", "et", "properties", "isList", "typeProperties", "prop", "safeTypeName", "name", "isSubscriptionRepeater", "d", "ts", "TypeDefinitionBuilder", "checker", "schema", "rawType", "options", "type", "wasOptional", "excludeNullUndefinedFromType", "ts", "isSubscriptionRepeater", "repeaterItemType", "isPromise", "promiseType", "getPromiseType", "isRequired", "isEmptyObject", "nameMap", "typeName", "safeTypeName", "duplicateName", "name", "i", "originalTypeName", "isList", "listType", "def", "isPrimitiveUnion", "typeNode", "members", "t", "isPrimitive", "typeNames", "unionTypes", "required", "hasPrimitivesOrEnum", "unionTypeDefs", "listTypes", "index", "typeDef", "isFunction", "returnType", "pt", "typeDefinition", "isListRequired", "consola", "SchemaParser", "checker", "sfiFile", "program", "TypeDefinitionBuilder", "index", "referenceSchema", "type", "properties", "typeName", "union", "enumType", "e", "input", "interfaceUnion", "classType", "implementingTypes", "schemaType", "t", "implementingType", "u", "field", "intf", "types", "unionTypes", "commonFields", "f", "entity", "entityTypes", "a", "b", "fieldSignatures", "fieldNames", "existingType", "str", "typeDefinitionToGraphQLType", "addDescription", "description", "schemaString", "args", "arg", "scalar", "value", "resolvers", "processing", "getTypeDefinition", "isInputType", "def", "name", "root", "isList", "propertyName", "property", "fieldType", "fieldDef", "argName", "argType", "symbol", "header", "ts", "tags", "validFieldNameRegExp", "isReserved", "recLoop", "info", "path", "isSubscriptionRepeater", "repeaterItemType", "isPrimitive", "isPromise", "promiseType", "getPromiseType", "baseTypes", "baseType", "isPrimitiveUnion", "firstType", "isFunction", "signature", "returnType", "element", "idx", "elementType", "elementName", "elementSymbol", "elementDocumentation", "valueDeclaration", "itemType", "getPublicPropertiesOfType", "propertyType", "sourceFiles", "sourceFile", "node", "heritage", "path", "SchemaBuilder", "sfiFilePath", "tsConfigOptions", "filesInSfiDir", "ts", "file", "sfiFileSymbol", "sfiFileDefaultExport", "exportSymbol", "defaultOptions", "configPath", "configFile", "sfiType", "queryProperty", "mutationProperty", "subscriptionProperty", "queryType", "mutationType", "subscriptionType", "parser", "SchemaParser", "build", "options", "Bundler", "built", "SchemaBuilder", "path", "path", "fs", "generateClient", "esbuild", "buildSchema", "PYLON_SCHEMA_PATH", "path", "PYLON_CLIENT_PATH", "buildClient", "schemaChanged", "fs", "schema", "schemaObj", "buildSchema", "updateFileIfChanged", "customClientIndex", "generateClient", "esbuild", "processName", "sessionId", "dotenv", "program", "version", "ctx", "build", "totalFiles", "totalSize", "duration", "schemaChanged", "analytics", "distinctId", "dependencies", "buildClient", "options", "resolve", "reject", "connectPM2", "readPylonConfig", "startDevServer", "consola", "stopDevServerAndDisconnect", "error", "pm2", "err", "command", "bus", "data", "apps"]
|
|
7
7
|
}
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@getcronit/pylon-dev",
|
|
3
3
|
"type": "module",
|
|
4
|
-
"version": "2.0.0-canary-
|
|
4
|
+
"version": "2.0.0-canary-20250408150641.1fa40562959367481e90835352afa3522b2edbec",
|
|
5
5
|
"description": "CLI for creating a Pylon",
|
|
6
6
|
"bin": {
|
|
7
7
|
"pylon": "./dist/index.js"
|
|
@@ -38,7 +38,7 @@
|
|
|
38
38
|
"typescript": "^5.7.3"
|
|
39
39
|
},
|
|
40
40
|
"peerDependencies": {
|
|
41
|
-
"@getcronit/pylon": "3.0.0-canary-
|
|
41
|
+
"@getcronit/pylon": "3.0.0-canary-20250408150641.1fa40562959367481e90835352afa3522b2edbec",
|
|
42
42
|
"graphql": "^16.9.0"
|
|
43
43
|
},
|
|
44
44
|
"scripts": {
|