{"version":3,"file":"printer.js","sourceRoot":"","sources":["../../src/language/printer.ts"],"names":[],"mappings":"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","sourcesContent":["/** @category Printing */\n\nimport type { Maybe } from '../jsutils/Maybe.ts';\n\nimport type { ASTNode } from './ast.ts';\nimport { printBlockString } from './blockString.ts';\nimport { printString } from './printString.ts';\nimport type { ASTReducer } from './visitor.ts';\nimport { visit } from './visitor.ts';\n\n/**\n * Converts an AST into a string, using one set of reasonable\n * formatting rules.\n * @param ast - The GraphQL AST node to print.\n * @returns A stable string representation of the AST.\n * @example\n * ```ts\n * import { parse, print } from 'graphql';\n *\n * const ast = parse('{ hero { name } }');\n * const text = print(ast);\n *\n * text; // => '{\\n  hero {\\n    name\\n  }\\n}'\n * ```\n */\nexport function print(ast: ASTNode): string {\n  return visit(ast, printDocASTReducer);\n}\n\nconst MAX_LINE_LENGTH = 80;\n\nconst printDocASTReducer: ASTReducer<string> = {\n  Name: { leave: (node) => node.value },\n  Variable: { leave: (node) => '$' + node.name },\n\n  // Document\n\n  Document: {\n    leave: (node) => join(node.definitions, '\\n\\n'),\n  },\n\n  OperationDefinition: {\n    leave(node) {\n      const varDefs = hasMultilineItems(node.variableDefinitions)\n        ? wrap('(\\n', join(node.variableDefinitions, '\\n'), '\\n)')\n        : wrap('(', join(node.variableDefinitions, ', '), ')');\n      const prefix =\n        wrap('', node.description, '\\n') +\n        join(\n          [\n            node.operation,\n            join([node.name, varDefs]),\n            join(node.directives, ' '),\n          ],\n          ' ',\n        );\n\n      // Anonymous queries with no directives or variable definitions can use\n      // the query short form.\n      return (prefix === 'query' ? '' : prefix + ' ') + node.selectionSet;\n    },\n  },\n\n  VariableDefinition: {\n    leave: ({ variable, type, defaultValue, directives, description }) =>\n      wrap('', description, '\\n') +\n      variable +\n      ': ' +\n      type +\n      wrap(' = ', defaultValue) +\n      wrap(' ', join(directives, ' ')),\n  },\n  SelectionSet: { leave: ({ selections }) => block(selections) },\n\n  Field: {\n    leave({ alias, name, arguments: args, directives, selectionSet }) {\n      const prefix = join([wrap('', alias, ': '), name], '');\n\n      return join([\n        wrappedLineAndArgs(prefix, args),\n        wrap(' ', join(directives, ' ')),\n        wrap(' ', selectionSet),\n      ]);\n    },\n  },\n  Argument: { leave: ({ name, value }) => name + ': ' + value },\n  FragmentArgument: { leave: ({ name, value }) => name + ': ' + value },\n\n  // Fragments\n\n  FragmentSpread: {\n    leave: ({ name, arguments: args, directives }) => {\n      const prefix = '...' + name;\n      return (\n        wrappedLineAndArgs(prefix, args) + wrap(' ', join(directives, ' '))\n      );\n    },\n  },\n\n  InlineFragment: {\n    leave: ({ typeCondition, directives, selectionSet }) =>\n      join(\n        [\n          '...',\n          wrap('on ', typeCondition),\n          join(directives, ' '),\n          selectionSet,\n        ],\n        ' ',\n      ),\n  },\n\n  FragmentDefinition: {\n    leave: ({\n      name,\n      typeCondition,\n      variableDefinitions,\n      directives,\n      selectionSet,\n      description,\n    }) =>\n      wrap('', description, '\\n') +\n      // Note: fragment variable definitions are experimental and may be changed\n      // or removed in the future.\n      `fragment ${name}${wrap('(', join(variableDefinitions, ', '), ')')} ` +\n      `on ${typeCondition} ${wrap('', join(directives, ' '), ' ')}` +\n      selectionSet,\n  },\n\n  // Value\n\n  IntValue: { leave: ({ value }) => value },\n  FloatValue: { leave: ({ value }) => value },\n  StringValue: {\n    leave: ({ value, block: isBlockString }) =>\n      isBlockString === true ? printBlockString(value) : printString(value),\n  },\n  BooleanValue: { leave: ({ value }) => (value ? 'true' : 'false') },\n  NullValue: { leave: () => 'null' },\n  EnumValue: { leave: ({ value }) => value },\n  ListValue: {\n    leave: ({ values }) => {\n      const valuesLine = '[' + join(values, ', ') + ']';\n\n      if (valuesLine.length > MAX_LINE_LENGTH) {\n        return '[\\n' + indent(join(values, '\\n')) + '\\n]';\n      }\n      return valuesLine;\n    },\n  },\n  ObjectValue: {\n    leave: ({ fields }) => {\n      const fieldsLine = '{ ' + join(fields, ', ') + ' }';\n      return fieldsLine.length > MAX_LINE_LENGTH ? block(fields) : fieldsLine;\n    },\n  },\n  ObjectField: { leave: ({ name, value }) => name + ': ' + value },\n\n  // Directive\n\n  Directive: {\n    leave: ({ name, arguments: args }) =>\n      '@' + name + wrap('(', join(args, ', '), ')'),\n  },\n\n  // Type\n\n  NamedType: { leave: ({ name }) => name },\n  ListType: { leave: ({ type }) => '[' + type + ']' },\n  NonNullType: { leave: ({ type }) => type + '!' },\n\n  // Type System Definitions\n\n  SchemaDefinition: {\n    leave: ({ description, directives, operationTypes }) =>\n      wrap('', description, '\\n') +\n      join(['schema', join(directives, ' '), block(operationTypes)], ' '),\n  },\n\n  OperationTypeDefinition: {\n    leave: ({ operation, type }) => operation + ': ' + type,\n  },\n\n  ScalarTypeDefinition: {\n    leave: ({ description, name, directives }) =>\n      wrap('', description, '\\n') +\n      join(['scalar', name, join(directives, ' ')], ' '),\n  },\n\n  ObjectTypeDefinition: {\n    leave: ({ description, name, interfaces, directives, fields }) =>\n      wrap('', description, '\\n') +\n      join(\n        [\n          'type',\n          name,\n          wrap('implements ', join(interfaces, ' & ')),\n          join(directives, ' '),\n          block(fields),\n        ],\n        ' ',\n      ),\n  },\n\n  FieldDefinition: {\n    leave: ({ description, name, arguments: args, type, directives }) =>\n      wrap('', description, '\\n') +\n      name +\n      (hasMultilineItems(args)\n        ? wrap('(\\n', indent(join(args, '\\n')), '\\n)')\n        : wrap('(', join(args, ', '), ')')) +\n      ': ' +\n      type +\n      wrap(' ', join(directives, ' ')),\n  },\n\n  InputValueDefinition: {\n    leave: ({ description, name, type, defaultValue, directives }) =>\n      wrap('', description, '\\n') +\n      join(\n        [name + ': ' + type, wrap('= ', defaultValue), join(directives, ' ')],\n        ' ',\n      ),\n  },\n\n  InterfaceTypeDefinition: {\n    leave: ({ description, name, interfaces, directives, fields }) =>\n      wrap('', description, '\\n') +\n      join(\n        [\n          'interface',\n          name,\n          wrap('implements ', join(interfaces, ' & ')),\n          join(directives, ' '),\n          block(fields),\n        ],\n        ' ',\n      ),\n  },\n\n  UnionTypeDefinition: {\n    leave: ({ description, name, directives, types }) =>\n      wrap('', description, '\\n') +\n      join(\n        ['union', name, join(directives, ' '), wrap('= ', join(types, ' | '))],\n        ' ',\n      ),\n  },\n\n  EnumTypeDefinition: {\n    leave: ({ description, name, directives, values }) =>\n      wrap('', description, '\\n') +\n      join(['enum', name, join(directives, ' '), block(values)], ' '),\n  },\n\n  EnumValueDefinition: {\n    leave: ({ description, name, directives }) =>\n      wrap('', description, '\\n') + join([name, join(directives, ' ')], ' '),\n  },\n\n  InputObjectTypeDefinition: {\n    leave: ({ description, name, directives, fields }) =>\n      wrap('', description, '\\n') +\n      join(['input', name, join(directives, ' '), block(fields)], ' '),\n  },\n\n  DirectiveDefinition: {\n    leave: ({\n      description,\n      name,\n      arguments: args,\n      directives,\n      repeatable,\n      locations,\n    }) =>\n      wrap('', description, '\\n') +\n      'directive @' +\n      name +\n      (hasMultilineItems(args)\n        ? wrap('(\\n', indent(join(args, '\\n')), '\\n)')\n        : wrap('(', join(args, ', '), ')')) +\n      wrap(' ', join(directives, ' ')) +\n      (repeatable ? ' repeatable' : '') +\n      ' on ' +\n      join(locations, ' | '),\n  },\n\n  SchemaExtension: {\n    leave: ({ directives, operationTypes }) =>\n      join(\n        ['extend schema', join(directives, ' '), block(operationTypes)],\n        ' ',\n      ),\n  },\n\n  ScalarTypeExtension: {\n    leave: ({ name, directives }) =>\n      join(['extend scalar', name, join(directives, ' ')], ' '),\n  },\n\n  ObjectTypeExtension: {\n    leave: ({ name, interfaces, directives, fields }) =>\n      join(\n        [\n          'extend type',\n          name,\n          wrap('implements ', join(interfaces, ' & ')),\n          join(directives, ' '),\n          block(fields),\n        ],\n        ' ',\n      ),\n  },\n\n  InterfaceTypeExtension: {\n    leave: ({ name, interfaces, directives, fields }) =>\n      join(\n        [\n          'extend interface',\n          name,\n          wrap('implements ', join(interfaces, ' & ')),\n          join(directives, ' '),\n          block(fields),\n        ],\n        ' ',\n      ),\n  },\n\n  UnionTypeExtension: {\n    leave: ({ name, directives, types }) =>\n      join(\n        [\n          'extend union',\n          name,\n          join(directives, ' '),\n          wrap('= ', join(types, ' | ')),\n        ],\n        ' ',\n      ),\n  },\n\n  EnumTypeExtension: {\n    leave: ({ name, directives, values }) =>\n      join(['extend enum', name, join(directives, ' '), block(values)], ' '),\n  },\n\n  InputObjectTypeExtension: {\n    leave: ({ name, directives, fields }) =>\n      join(['extend input', name, join(directives, ' '), block(fields)], ' '),\n  },\n\n  DirectiveExtension: {\n    leave: ({ name, directives }) =>\n      join(['extend directive @' + name, join(directives, ' ')], ' '),\n  },\n\n  // Schema Coordinates\n\n  TypeCoordinate: { leave: ({ name }) => name },\n\n  MemberCoordinate: {\n    leave: ({ name, memberName }) => join([name, wrap('.', memberName)]),\n  },\n\n  ArgumentCoordinate: {\n    leave: ({ name, fieldName, argumentName }) =>\n      join([name, wrap('.', fieldName), wrap('(', argumentName, ':)')]),\n  },\n\n  DirectiveCoordinate: { leave: ({ name }) => join(['@', name]) },\n\n  DirectiveArgumentCoordinate: {\n    leave: ({ name, argumentName }) =>\n      join(['@', name, wrap('(', argumentName, ':)')]),\n  },\n};\n\n/**\n * Given maybeArray, print an empty string if it is null or empty, otherwise\n * print all items together separated by separator if provided\n *\n * @internal\n */\nfunction join(\n  maybeArray: Maybe<ReadonlyArray<string | undefined>>,\n  separator = '',\n): string {\n  return (\n    maybeArray?.filter((x) => x !== undefined && x !== '').join(separator) ?? ''\n  );\n}\n\n/**\n * Given array, print each item on its own line, wrapped in an indented `{ }` block.\n *\n * @internal\n */\nfunction block(array: Maybe<ReadonlyArray<string | undefined>>): string {\n  return wrap('{\\n', indent(join(array, '\\n')), '\\n}');\n}\n\n/**\n * If maybeString is not null or empty, then wrap with start and end, otherwise print an empty string.\n *\n * @internal\n */\nfunction wrap(\n  start: string,\n  maybeString: Maybe<string>,\n  end: string = '',\n): string {\n  return maybeString != null && maybeString !== ''\n    ? start + maybeString + end\n    : '';\n}\n\nfunction indent(str: string): string {\n  return wrap('  ', str.replaceAll('\\n', '\\n  '));\n}\n\nfunction hasMultilineItems(maybeArray: Maybe<ReadonlyArray<string>>): boolean {\n  return maybeArray?.some((str) => str.includes('\\n')) ?? false;\n}\n\nfunction wrappedLineAndArgs(\n  prefix: string,\n  args: ReadonlyArray<string> | undefined,\n): string {\n  let argsLine = prefix + wrap('(', join(args, ', '), ')');\n\n  if (argsLine.length > MAX_LINE_LENGTH) {\n    argsLine = prefix + wrap('(\\n', indent(join(args, '\\n')), '\\n)');\n  }\n  return argsLine;\n}\n"]}