graphql
Version:
A Query Language and Runtime which can target any service.
1 lines • 3.4 kB
Source Map (JSON)
{"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"]}