@getcronit/pylon-builder 2.3.0 → 2.4.1

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 CHANGED
@@ -223,6 +223,12 @@ function getPublicPropertiesOfType(checker, _type) {
223
223
  var safeTypeName = (name) => {
224
224
  return name.replace(/[^0-9a-zA-Z_]/g, "_");
225
225
  };
226
+ var isSubscriptionRepeater = (type) => {
227
+ return !!type.getSymbol()?.getDeclarations()?.some((d) => {
228
+ const sourceFile = d.getSourceFile().fileName;
229
+ return sourceFile.includes("@repeaterjs");
230
+ });
231
+ };
226
232
 
227
233
  // src/schema/type-definition-builder.ts
228
234
  import ts2 from "typescript";
@@ -241,6 +247,12 @@ class TypeDefinitionBuilder {
241
247
  isInputType: false
242
248
  }) => {
243
249
  const { type, wasOptional } = excludeNullUndefinedFromType(rawType);
250
+ if (isSubscriptionRepeater(type)) {
251
+ const repeaterItemType = this.checker.getTypeArguments(type)[0];
252
+ if (repeaterItemType) {
253
+ return this.getTypeDefinition(repeaterItemType, options);
254
+ }
255
+ }
244
256
  if (isPromise(type)) {
245
257
  const promiseType = getPromiseType(type);
246
258
  if (promiseType) {
@@ -501,6 +513,8 @@ class SchemaParser {
501
513
  typeName = "Query";
502
514
  } else if (index.Mutation === type) {
503
515
  typeName = "Mutation";
516
+ } else if (index.Subscription === type) {
517
+ typeName = "Subscription";
504
518
  }
505
519
  this.processSchemaReference(type, properties, typeName, "types");
506
520
  }
@@ -606,7 +620,9 @@ class SchemaParser {
606
620
  const fieldNames = type.fields.map((field) => field.name).sort().join(", ");
607
621
  if (fieldSignatures.has(fieldNames)) {
608
622
  const existingType = fieldSignatures.get(fieldNames);
609
- consola2.warn(`Warning: Union types "${type.name}" and "${existingType?.name}" have the same fields: [${fieldNames}]. ` + `\nConsider differentiating these types by adding unique fields or using different type names.` + `\nThis may cause ambiguity in type resolution.`);
623
+ consola2.warn(`Warning: Union types "${type.name}" and "${existingType?.name}" have the same fields: [${fieldNames}]. ` + `
624
+ Consider differentiating these types by adding unique fields or using different type names.` + `
625
+ This may cause ambiguity in type resolution.`);
610
626
  } else {
611
627
  fieldSignatures.set(fieldNames, type);
612
628
  }
@@ -624,20 +640,27 @@ class SchemaParser {
624
640
  const addDescription = (description) => {
625
641
  if (!description)
626
642
  return "";
627
- return `"""\n${description}\n"""\n`;
643
+ return `"""
644
+ ${description}
645
+ """
646
+ `;
628
647
  };
629
648
  let schemaString = "";
630
649
  for (const input of this.schema.inputs) {
631
650
  schemaString += addDescription(input.description);
632
- schemaString += `input ${input.name} {\n`;
651
+ schemaString += `input ${input.name} {
652
+ `;
633
653
  if (input.fields.length === 0) {
634
- schemaString += `\t_ : String\n`;
654
+ schemaString += `\t_ : String
655
+ `;
635
656
  }
636
657
  for (const field of input.fields) {
637
658
  schemaString += `${addDescription(field.type.description)}`;
638
- schemaString += `\t${field.name}: ${typeDefinitionToGraphQLType(field.type)}\n`;
659
+ schemaString += `\t${field.name}: ${typeDefinitionToGraphQLType(field.type)}
660
+ `;
639
661
  }
640
- schemaString += `}\n`;
662
+ schemaString += `}
663
+ `;
641
664
  }
642
665
  for (const type of this.schema.types) {
643
666
  if (type.fields.length === 0)
@@ -647,40 +670,51 @@ class SchemaParser {
647
670
  if (type.implements) {
648
671
  schemaString += ` implements ${type.implements.join(" & ")}`;
649
672
  }
650
- schemaString += ` {\n`;
673
+ schemaString += ` {
674
+ `;
651
675
  for (const field of type.fields) {
652
676
  let args = "";
653
677
  if (field.args.length > 0) {
654
678
  args = `(${field.args.map((arg) => `${addDescription(arg.type.description)}${arg.name}: ${typeDefinitionToGraphQLType(arg.type)}`).join(", ")})`;
655
679
  }
656
680
  schemaString += `${addDescription(field.type.description)}`;
657
- schemaString += `${field.name}${args}: ${typeDefinitionToGraphQLType(field.type)}\n`;
681
+ schemaString += `${field.name}${args}: ${typeDefinitionToGraphQLType(field.type)}
682
+ `;
658
683
  }
659
- schemaString += `}\n`;
684
+ schemaString += `}
685
+ `;
660
686
  }
661
687
  for (const union of this.schema.unions) {
662
688
  schemaString += addDescription(union.description);
663
- schemaString += `union ${union.name} = ${union.types.join(" | ")}\n`;
689
+ schemaString += `union ${union.name} = ${union.types.join(" | ")}
690
+ `;
664
691
  }
665
692
  for (const intf of this.schema.interfaces) {
666
693
  schemaString += addDescription(intf.description);
667
- schemaString += `interface ${intf.name} {\n`;
694
+ schemaString += `interface ${intf.name} {
695
+ `;
668
696
  for (const field of intf.fields) {
669
697
  schemaString += `${addDescription(field.type.description)}`;
670
- schemaString += `${field.name}: ${typeDefinitionToGraphQLType(field.type)}\n`;
698
+ schemaString += `${field.name}: ${typeDefinitionToGraphQLType(field.type)}
699
+ `;
671
700
  }
672
- schemaString += `}\n`;
701
+ schemaString += `}
702
+ `;
673
703
  }
674
704
  for (const scalar of this.schema.scalars) {
675
- schemaString += `scalar ${scalar}\n`;
705
+ schemaString += `scalar ${scalar}
706
+ `;
676
707
  }
677
708
  for (const enumType of this.schema.enums) {
678
709
  schemaString += addDescription(enumType.description);
679
- schemaString += `enum ${enumType.name} {\n`;
710
+ schemaString += `enum ${enumType.name} {
711
+ `;
680
712
  for (const value of enumType.values) {
681
- schemaString += `\t${value}\n`;
713
+ schemaString += `\t${value}
714
+ `;
682
715
  }
683
- schemaString += `}\n`;
716
+ schemaString += `}
717
+ `;
684
718
  }
685
719
  return schemaString;
686
720
  }
@@ -773,9 +807,11 @@ class SchemaParser {
773
807
  getSymbolDocumentation(symbol) {
774
808
  let header = "";
775
809
  header += ts3.displayPartsToString(symbol.getDocumentationComment(this.checker));
776
- const tags = symbol.getJsDocTags(this.checker).map((t) => `@${t.name} ${ts3.displayPartsToString(t.text)}`).join("\n");
810
+ const tags = symbol.getJsDocTags(this.checker).map((t) => `@${t.name} ${ts3.displayPartsToString(t.text)}`).join(`
811
+ `);
777
812
  if (tags) {
778
- header += "\n" + tags;
813
+ header += `
814
+ ` + tags;
779
815
  }
780
816
  return header;
781
817
  }
@@ -821,6 +857,11 @@ class SchemaParser {
821
857
  if (referenceSchema[processing].has(type)) {
822
858
  return;
823
859
  }
860
+ if (isSubscriptionRepeater(type)) {
861
+ const repeaterItemType = this.checker.getTypeArguments(type)[0];
862
+ recLoop(repeaterItemType, info, processing, [...path2, "REPEATER_ITEM"]);
863
+ return;
864
+ }
824
865
  const wrongType = this.checker.typeToString(type) === "[]";
825
866
  if (wrongType) {
826
867
  return;
@@ -910,7 +951,7 @@ class SchemaParser {
910
951
  if (schemaType.args) {
911
952
  schemaType.args[arg.escapedName] = {
912
953
  type: argType,
913
- isRequired: valueDeclaration.initializer === undefined,
954
+ isRequired: valueDeclaration.initializer === undefined ? undefined : false,
914
955
  documentation: this.getSymbolDocumentation(arg)
915
956
  };
916
957
  recLoop(argType, {
@@ -956,6 +997,9 @@ class SchemaParser {
956
997
  if (index.Mutation) {
957
998
  recLoop(index.Mutation);
958
999
  }
1000
+ if (index.Subscription) {
1001
+ recLoop(index.Subscription);
1002
+ }
959
1003
  const sourceFiles = this.program.getSourceFiles();
960
1004
  for (const sourceFile of sourceFiles) {
961
1005
  ts3.forEachChild(sourceFile, (node) => {
@@ -1038,12 +1082,15 @@ class SchemaBuilder {
1038
1082
  const sfiType = this.checker.getTypeOfSymbolAtLocation(this.sfi, this.sfiFile);
1039
1083
  const queryProperty = sfiType.getProperty("Query");
1040
1084
  const mutationProperty = sfiType.getProperty("Mutation");
1085
+ const subscriptionProperty = sfiType.getProperty("Subscription");
1041
1086
  const queryType = queryProperty ? this.checker.getTypeOfSymbolAtLocation(queryProperty, this.sfiFile) : undefined;
1042
1087
  const mutationType = mutationProperty ? this.checker.getTypeOfSymbolAtLocation(mutationProperty, this.sfiFile) : undefined;
1088
+ const subscriptionType = subscriptionProperty ? this.checker.getTypeOfSymbolAtLocation(subscriptionProperty, this.sfiFile) : undefined;
1043
1089
  const parser = new SchemaParser(this.checker, this.sfiFile, this.program);
1044
1090
  parser.parse({
1045
1091
  Query: queryType,
1046
- Mutation: mutationType
1092
+ Mutation: mutationType,
1093
+ Subscription: subscriptionType
1047
1094
  });
1048
1095
  return {
1049
1096
  typeDefs: parser.toString(),
@@ -1075,4 +1122,4 @@ export {
1075
1122
  SchemaBuilder
1076
1123
  };
1077
1124
 
1078
- //# debugId=5E79782CD6EA51D164756E2164756E21
1125
+ //# debugId=7618DC6F33A0359864756E2164756E21
package/dist/index.js.map CHANGED
@@ -4,12 +4,12 @@
4
4
  "sourcesContent": [
5
5
  "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 watch?: boolean\n onWatch?: (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 watch: options.watch,\n onWatch: options.onWatch\n })\n}\n",
6
6
  "// bundler.ts\nimport fs from 'fs'\nimport chokidar from 'chokidar'\nimport {Plugin, build} from 'esbuild'\nimport esbuildPluginTsc from 'esbuild-plugin-tsc'\n\nimport path from 'path'\nimport consola from 'consola'\n\nexport interface BundlerBuildOptions {\n getBuildDefs: () => {\n typeDefs: string\n resolvers: Record<\n string,\n {\n __resolveType?: (obj: any) => string\n }\n >\n }\n watch?: boolean\n onWatch?: (output: {\n totalFiles: number\n totalSize: number\n schemaChanged: boolean\n duration: number\n }) => void\n}\n\nexport class Bundler {\n sfiFilePath: string\n outputDir: string\n\n private cachedTypeDefs: string | null = null\n\n constructor(sfiFilePath: string, outputDir: string = './.pylon') {\n this.sfiFilePath = sfiFilePath\n this.outputDir = outputDir\n }\n\n public async build(options: BundlerBuildOptions) {\n const buildOnce = async () => {\n const startTime = Date.now()\n\n const {typeDefs, resolvers: baseResolvers} = options.getBuildDefs()\n\n const injectCodePlugin: Plugin = {\n name: 'inject-code',\n setup(build) {\n build.onLoad(\n {filter: /(\\/src\\/index\\.ts|\\\\src\\\\index\\.ts)$/, namespace: 'file'},\n async args => {\n const contents = await fs.promises.readFile(args.path, 'utf-8')\n\n return {\n loader: 'ts',\n contents:\n contents +\n `\n import {graphqlHandler} from \"@getcronit/pylon\" \n app.use('/graphql', async c => {\n const typeDefs = ${JSON.stringify(typeDefs)}\n const resolvers = {\n ...graphql,\n ...${prepareObjectInjection(baseResolvers)}\n }\n\n let pylonConfig = undefined\n\n try {\n pylonConfig = config\n } catch {\n // config is not declared, pylonConfig remains undefined\n }\n \n let exCtx = undefined\n \n try {\n exCtx = c.executionCtx\n } catch (e) {}\n \n return graphqlHandler(c)({\n typeDefs,\n resolvers,\n config: pylonConfig\n }).fetch(c.req.raw, c.env, exCtx || {})\n })\n `\n }\n }\n )\n }\n }\n\n const inputPath = path.join(process.cwd(), this.sfiFilePath)\n const dir = path.join(process.cwd(), this.outputDir)\n\n const output = await build({\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 plugins: [\n injectCodePlugin,\n esbuildPluginTsc({\n tsconfigPath: path.join(process.cwd(), 'tsconfig.json')\n })\n ]\n })\n\n if (output.errors.length > 0) {\n for (const error of output.errors) {\n consola.error(error)\n }\n\n throw new Error('Failed to build Pylon')\n }\n\n if (output.warnings.length > 0) {\n for (const warning of output.warnings) {\n consola.warn(warning)\n }\n }\n\n const schemaChanged = this.cachedTypeDefs !== typeDefs\n\n this.cachedTypeDefs = typeDefs\n\n const duration = Date.now() - startTime\n\n const totalFiles = Object.keys(output.metafile.inputs).length\n const totalSize = Object.values(output.metafile.outputs).reduce(\n (acc, output) => acc + output.bytes,\n 0\n )\n\n return {\n totalFiles,\n totalSize,\n schemaChanged,\n duration\n }\n }\n\n if (options.watch) {\n const folder = path.dirname(this.sfiFilePath)\n\n chokidar.watch(folder).on('change', async () => {\n try {\n const output = await buildOnce()\n\n if (options.onWatch) {\n options.onWatch(output)\n }\n } catch (e) {\n consola.error(e)\n }\n })\n }\n\n return await buildOnce()\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",
7
- "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.readDirectory(\n path.dirname(this.sfiFilePath),\n ['.ts'],\n ['.d.ts']\n )\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\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\n const parser = new SchemaParser(this.checker, this.sfiFile, this.program)\n\n parser.parse({\n Query: queryType,\n Mutation: mutationType\n })\n\n return {\n typeDefs: parser.toString(),\n schema: parser.getSchema(),\n resolvers: parser.getResolvers()\n }\n }\n}\n",
8
- "import ts from 'typescript'\nimport {\n getPromiseType,\n getPublicPropertiesOfType,\n isFunction,\n isList,\n isPrimitive,\n isPromise\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 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}\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 '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 }\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 // 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 // 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 // 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.getTypeDocumentation(fieldType)\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 // 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 (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 properties = getPublicPropertiesOfType(\n this.checker,\n type.getNonNullableType()\n )\n\n if (properties.length === 0) {\n //get first union type of non nullable type\n const nt = type.getNonNullableType()\n if (nt.isUnion()) {\n properties = getPublicPropertiesOfType(this.checker, nt.types[0]!)\n }\n }\n\n if (properties.length > 0) {\n if (!referenceSchema[processing].has(type)) {\n referenceSchema[processing].set(type, {})\n }\n\n // Go through all properties of the union type and add them to the reference schema\n properties.forEach(property => {\n const propertyType = this.checker.getTypeOfSymbolAtLocation(\n property,\n this.sfiFile\n )\n\n if (!isFunction(propertyType)) {\n referenceSchema[processing].get(type)![\n property.escapedName as string\n ] = {\n returnType: propertyType,\n args: {}\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 } 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 if (\n arg.valueDeclaration &&\n ts.isParameter(arg.valueDeclaration) &&\n arg.valueDeclaration.dotDotDotToken\n ) {\n console.warn(\n 'Cannot handle rest parameters yet, skipping',\n arg.escapedName\n )\n } else {\n const argType = this.checker.getTypeOfSymbolAtLocation(\n arg,\n this.sfiFile\n )\n\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: valueDeclaration.initializer === undefined,\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 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 // 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",
9
- "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 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 isEnum = (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) || isEnum(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",
10
- "import ts from 'typescript'\nimport {\n excludeNullUndefinedFromType,\n getPromiseType,\n isEmptyObject,\n isEnum,\n isFunction,\n isList,\n isPrimitive,\n isPromise,\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 (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) {\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 (isEnum(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.filter(\n t => t.flags & ts.TypeFlags.StringLiteral\n )\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) || isEnum(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"
7
+ "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.readDirectory(\n path.dirname(this.sfiFilePath),\n ['.ts'],\n ['.d.ts']\n )\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",
8
+ "import ts from 'typescript'\nimport {\n getPromiseType,\n getPublicPropertiesOfType,\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 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 '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 // 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 // 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 // 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.getTypeDocumentation(fieldType)\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 (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 properties = getPublicPropertiesOfType(\n this.checker,\n type.getNonNullableType()\n )\n\n if (properties.length === 0) {\n //get first union type of non nullable type\n const nt = type.getNonNullableType()\n if (nt.isUnion()) {\n properties = getPublicPropertiesOfType(this.checker, nt.types[0]!)\n }\n }\n\n if (properties.length > 0) {\n if (!referenceSchema[processing].has(type)) {\n referenceSchema[processing].set(type, {})\n }\n\n // Go through all properties of the union type and add them to the reference schema\n properties.forEach(property => {\n const propertyType = this.checker.getTypeOfSymbolAtLocation(\n property,\n this.sfiFile\n )\n\n if (!isFunction(propertyType)) {\n referenceSchema[processing].get(type)![\n property.escapedName as string\n ] = {\n returnType: propertyType,\n args: {}\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 } 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 if (\n arg.valueDeclaration &&\n ts.isParameter(arg.valueDeclaration) &&\n arg.valueDeclaration.dotDotDotToken\n ) {\n console.warn(\n 'Cannot handle rest parameters yet, skipping',\n arg.escapedName\n )\n } else {\n const argType = this.checker.getTypeOfSymbolAtLocation(\n arg,\n this.sfiFile\n )\n\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 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",
9
+ "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 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 isEnum = (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) || isEnum(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",
10
+ "import ts from 'typescript'\nimport {\n excludeNullUndefinedFromType,\n getPromiseType,\n isEmptyObject,\n isEnum,\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 (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) {\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 (isEnum(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.filter(\n t => t.flags & ts.TypeFlags.StringLiteral\n )\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) || isEnum(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"
11
11
  ],
12
- "mappings": "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",
13
- "debugId": "5E79782CD6EA51D164756E2164756E21",
12
+ "mappings": "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",
13
+ "debugId": "7618DC6F33A0359864756E2164756E21",
14
14
  "names": []
15
15
  }
@@ -54,6 +54,7 @@ export interface Schema {
54
54
  interface Index {
55
55
  Query?: ts.Type;
56
56
  Mutation?: ts.Type;
57
+ Subscription?: ts.Type;
57
58
  }
58
59
  export declare class SchemaParser {
59
60
  private schema;
@@ -13,3 +13,4 @@ export declare const excludeNullUndefinedFromType: (type: ts.Type) => {
13
13
  };
14
14
  export declare function getPublicPropertiesOfType(checker: ts.TypeChecker, _type: ts.Type): ts.Symbol[];
15
15
  export declare const safeTypeName: (name: string) => string;
16
+ export declare const isSubscriptionRepeater: (type: ts.Type) => boolean;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@getcronit/pylon-builder",
3
- "version": "2.3.0",
3
+ "version": "2.4.1",
4
4
  "type": "module",
5
5
  "main": "dist/index.js",
6
6
  "types": "dist/index.d.ts",