{"version":3,"file":"getStreamUsage.js","sourceRoot":"","sources":["../../src/execution/getStreamUsage.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,iCAAgC;AAEpD,OAAO,EAAE,iBAAiB,EAAE,4BAA2B;AAEvD,OAAO,EAAE,sBAAsB,EAAE,+BAA8B;AAI/D,OAAO,EAAE,kBAAkB,EAAE,qBAAoB;AAgBjD,MAAM,UAAU,cAAc,CAC5B,sBAA8C,EAC9C,gBAAkC;IAElC,MAAM,EAAE,SAAS,EAAE,cAAc,EAAE,GAAG,sBAAsB,CAAC;IAG7D,MAAM,MAAM,GAAG,kBAAkB,CAC/B,sBAAsB,EACtB,gBAAgB,CAAC,CAAC,CAAC,CAAC,IAAI,EACxB,cAAc,EACd,gBAAgB,CAAC,CAAC,CAAC,CAAC,sBAAsB,CAC3C,CAAC;IAEF,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,OAAO;IACT,CAAC;IAED,IAAI,MAAM,CAAC,EAAE,KAAK,KAAK,EAAE,CAAC;QACxB,OAAO;IACT,CAAC;UAGC,OAAO,MAAM,CAAC,YAAY,KAAK,QAAQ;QADzC,SAAS,QAEP,+BAA+B;UAI/B,MAAM,CAAC,YAAY,IAAI,CAAC;QAD1B,SAAS,QAEP,yCAAyC;UAIzC,SAAS,CAAC,SAAS,KAAK,iBAAiB,CAAC,YAAY;QADxD,SAAS,QAEP,0HAA0H;IAG5H,MAAM,wBAAwB,GAAqB,gBAAgB,CAAC,GAAG,CACrE,CAAC,YAAY,EAAE,EAAE,CAAC,CAAC;QACjB,IAAI,EAAE,YAAY,CAAC,IAAI;QACvB,UAAU,EAAE,SAAS;QACrB,sBAAsB,EAAE,YAAY,CAAC,sBAAsB;KAC5D,CAAC,CACH,CAAC;IAEF,OAAO;QACL,YAAY,EAAE,MAAM,CAAC,YAAY;QACjC,KAAK,EAAE,OAAO,MAAM,CAAC,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS;QAClE,gBAAgB,EAAE,wBAAwB;KAC3C,CAAC;AACJ,CAAC","sourcesContent":["import { invariant } from '../jsutils/invariant.ts';\n\nimport { OperationTypeNode } from '../language/ast.ts';\n\nimport { GraphQLStreamDirective } from '../type/directives.ts';\n\nimport type { FieldDetailsList } from './collectFields.ts';\nimport type { ValidatedExecutionArgs } from './ExecutionArgs.ts';\nimport { getDirectiveValues } from './values.ts';\n\n/** @internal */\nexport interface StreamUsage {\n  label: string | undefined;\n  initialCount: number;\n  fieldDetailsList: FieldDetailsList;\n}\n\n/**\n * Returns an object containing info for streaming if a field should be\n * streamed based on the experimental flag, stream directive present and\n * not disabled by the \"if\" argument.\n *\n * @internal\n */\nexport function getStreamUsage(\n  validatedExecutionArgs: ValidatedExecutionArgs,\n  fieldDetailsList: FieldDetailsList,\n): StreamUsage | undefined {\n  const { operation, variableValues } = validatedExecutionArgs;\n  // validation only allows equivalent streams on multiple fields, so it is\n  // safe to only check the first fieldNode for the stream directive\n  const stream = getDirectiveValues(\n    GraphQLStreamDirective,\n    fieldDetailsList[0].node,\n    variableValues,\n    fieldDetailsList[0].fragmentVariableValues,\n  );\n\n  if (!stream) {\n    return;\n  }\n\n  if (stream.if === false) {\n    return;\n  }\n\n  invariant(\n    typeof stream.initialCount === 'number',\n    'initialCount must be a number',\n  );\n\n  invariant(\n    stream.initialCount >= 0,\n    'initialCount must be a positive integer',\n  );\n\n  invariant(\n    operation.operation !== OperationTypeNode.SUBSCRIPTION,\n    '`@stream` directive not supported on subscription operations. Disable `@stream` by setting the `if` argument to `false`.',\n  );\n\n  const streamedFieldDetailsList: FieldDetailsList = fieldDetailsList.map(\n    (fieldDetails) => ({\n      node: fieldDetails.node,\n      deferUsage: undefined,\n      fragmentVariableValues: fieldDetails.fragmentVariableValues,\n    }),\n  );\n\n  return {\n    initialCount: stream.initialCount,\n    label: typeof stream.label === 'string' ? stream.label : undefined,\n    fieldDetailsList: streamedFieldDetailsList,\n  };\n}\n"]}