@envelop/execute-subscription-event 0.0.3-alpha-e19f3a5.0 → 0.0.5-alpha-52fc7d2.0
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/index.js +2 -3
- package/index.mjs +2 -3
- package/package.json +1 -1
- package/index.js.map +0 -1
- package/index.mjs.map +0 -1
package/index.js
CHANGED
|
@@ -5,7 +5,7 @@ Object.defineProperty(exports, '__esModule', { value: true });
|
|
|
5
5
|
function _interopDefault (ex) { return (ex && (typeof ex === 'object') && 'default' in ex) ? ex['default'] : ex; }
|
|
6
6
|
|
|
7
7
|
const graphql = require('graphql');
|
|
8
|
-
const mapAsyncIterator = _interopDefault(require('graphql/subscription/mapAsyncIterator'));
|
|
8
|
+
const mapAsyncIterator = _interopDefault(require('graphql/subscription/mapAsyncIterator.js'));
|
|
9
9
|
|
|
10
10
|
/**
|
|
11
11
|
* Returns true if the provided object implements the AsyncIterator protocol via
|
|
@@ -90,7 +90,7 @@ const useExtendContextValuePerExecuteSubscriptionEvent = (createContext) => {
|
|
|
90
90
|
var _a;
|
|
91
91
|
const context = await createContext({ args });
|
|
92
92
|
try {
|
|
93
|
-
return graphql.execute({
|
|
93
|
+
return await graphql.execute({
|
|
94
94
|
...executionArgs,
|
|
95
95
|
contextValue: { ...executionArgs.contextValue, ...context === null || context === void 0 ? void 0 : context.contextPartial },
|
|
96
96
|
});
|
|
@@ -105,4 +105,3 @@ const useExtendContextValuePerExecuteSubscriptionEvent = (createContext) => {
|
|
|
105
105
|
};
|
|
106
106
|
|
|
107
107
|
exports.useExtendContextValuePerExecuteSubscriptionEvent = useExtendContextValuePerExecuteSubscriptionEvent;
|
|
108
|
-
//# sourceMappingURL=index.js.map
|
package/index.mjs
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { createSourceEventStream, execute } from 'graphql';
|
|
2
|
-
import mapAsyncIterator from 'graphql/subscription/mapAsyncIterator';
|
|
2
|
+
import mapAsyncIterator from 'graphql/subscription/mapAsyncIterator.js';
|
|
3
3
|
|
|
4
4
|
/**
|
|
5
5
|
* Returns true if the provided object implements the AsyncIterator protocol via
|
|
@@ -84,7 +84,7 @@ const useExtendContextValuePerExecuteSubscriptionEvent = (createContext) => {
|
|
|
84
84
|
var _a;
|
|
85
85
|
const context = await createContext({ args });
|
|
86
86
|
try {
|
|
87
|
-
return execute({
|
|
87
|
+
return await execute({
|
|
88
88
|
...executionArgs,
|
|
89
89
|
contextValue: { ...executionArgs.contextValue, ...context === null || context === void 0 ? void 0 : context.contextPartial },
|
|
90
90
|
});
|
|
@@ -99,4 +99,3 @@ const useExtendContextValuePerExecuteSubscriptionEvent = (createContext) => {
|
|
|
99
99
|
};
|
|
100
100
|
|
|
101
101
|
export { useExtendContextValuePerExecuteSubscriptionEvent };
|
|
102
|
-
//# sourceMappingURL=index.mjs.map
|
package/package.json
CHANGED
package/index.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sources":["../../../packages/types/dist/index.mjs","../../../packages/core/dist/index.mjs","../../../dist/plugins/execute-subscription-event/src/subscribe.js","../../../dist/plugins/execute-subscription-event/src/index.js"],"sourcesContent":["/**\n * Returns true if the provided object implements the AsyncIterator protocol via\n * implementing a `Symbol.asyncIterator` method.\n *\n * Source: https://github.com/graphql/graphql-js/blob/main/src/jsutils/isAsyncIterable.ts\n */\nfunction isAsyncIterable(maybeAsyncIterable) {\n return typeof (maybeAsyncIterable === null || maybeAsyncIterable === void 0 ? void 0 : maybeAsyncIterable[Symbol.asyncIterator]) === 'function';\n}\n/**\n * A utility function for hanlding `onExecuteDone` hook result, for simplifying the hanlding of AsyncIterable returned from `execute`.\n *\n * @param payload The payload send to `onExecuteDone` hook function\n * @param fn The handler to be executed on each result\n * @returns a subscription for streamed results, or undefined in case of an non-async\n */\nfunction handleStreamOrSingleExecutionResult(payload, fn) {\n if (isAsyncIterable(payload.result)) {\n return { onNext: fn };\n }\n else {\n fn({\n result: payload.result,\n setResult: payload.setResult,\n });\n return undefined;\n }\n}\n\nexport { handleStreamOrSingleExecutionResult, isAsyncIterable };\n//# sourceMappingURL=index.mjs.map\n","import { isAsyncIterable, handleStreamOrSingleExecutionResult } from '@envelop/types';\nexport * from '@envelop/types';\nimport { isIntrospectionType, isObjectType, defaultFieldResolver, Kind, visit, BREAK, parse, specifiedRules, validate, execute, subscribe, GraphQLSchema, getOperationAST, GraphQLError } from 'graphql';\n\nconst trackedSchemaSymbol = Symbol('TRACKED_SCHEMA');\nconst resolversHooksSymbol = Symbol('RESOLVERS_HOOKS');\nfunction prepareTracedSchema(schema) {\n if (!schema || schema[trackedSchemaSymbol]) {\n return;\n }\n schema[trackedSchemaSymbol] = true;\n const entries = Object.values(schema.getTypeMap());\n for (const type of entries) {\n if (!isIntrospectionType(type) && isObjectType(type)) {\n const fields = Object.values(type.getFields());\n for (const field of fields) {\n let resolverFn = (field.resolve || defaultFieldResolver);\n field.resolve = async (root, args, context, info) => {\n if (context && context[resolversHooksSymbol]) {\n const hooks = context[resolversHooksSymbol];\n const afterCalls = [];\n for (const hook of hooks) {\n const afterFn = await hook({\n root,\n args,\n context,\n info,\n resolverFn,\n replaceResolverFn: newFn => {\n resolverFn = newFn;\n },\n });\n afterFn && afterCalls.push(afterFn);\n }\n try {\n let result = await resolverFn(root, args, context, info);\n for (const afterFn of afterCalls) {\n afterFn({\n result,\n setResult: newResult => {\n result = newResult;\n },\n });\n }\n return result;\n }\n catch (e) {\n let resultErr = e;\n for (const afterFn of afterCalls) {\n afterFn({\n result: resultErr,\n setResult: newResult => {\n resultErr = newResult;\n },\n });\n }\n throw resultErr;\n }\n }\n else {\n return resolverFn(root, args, context, info);\n }\n };\n }\n }\n }\n}\n\nconst envelopIsIntrospectionSymbol = Symbol('ENVELOP_IS_INTROSPECTION');\nfunction isOperationDefinition(def) {\n return def.kind === Kind.OPERATION_DEFINITION;\n}\nfunction isIntrospectionOperation(operation) {\n if (operation.kind === 'OperationDefinition') {\n let hasIntrospectionField = false;\n visit(operation, {\n Field: node => {\n if (node.name.value === '__schema') {\n hasIntrospectionField = true;\n return BREAK;\n }\n },\n });\n return hasIntrospectionField;\n }\n return false;\n}\nfunction isIntrospectionDocument(document) {\n const operations = document.definitions.filter(isOperationDefinition);\n return operations.some(op => isIntrospectionOperation(op));\n}\nfunction isIntrospectionOperationString(operation) {\n return (typeof operation === 'string' ? operation : operation.body).indexOf('__schema') !== -1;\n}\nfunction getSubscribeArgs(args) {\n return args.length === 1\n ? args[0]\n : {\n schema: args[0],\n document: args[1],\n rootValue: args[2],\n contextValue: args[3],\n variableValues: args[4],\n operationName: args[5],\n fieldResolver: args[6],\n subscribeFieldResolver: args[7],\n };\n}\n/**\n * Utility function for making a subscribe function that handles polymorphic arguments.\n */\nconst makeSubscribe = (subscribeFn) => ((...polyArgs) => subscribeFn(getSubscribeArgs(polyArgs)));\nasync function* mapAsyncIterator(asyncIterable, map) {\n for await (const value of asyncIterable) {\n yield map(value);\n }\n}\nfunction getExecuteArgs(args) {\n return args.length === 1\n ? args[0]\n : {\n schema: args[0],\n document: args[1],\n rootValue: args[2],\n contextValue: args[3],\n variableValues: args[4],\n operationName: args[5],\n fieldResolver: args[6],\n typeResolver: args[7],\n };\n}\n/**\n * Utility function for making a execute function that handles polymorphic arguments.\n */\nconst makeExecute = (executeFn) => ((...polyArgs) => executeFn(getExecuteArgs(polyArgs)));\nasync function* finalAsyncIterator(asyncIterable, onFinal) {\n try {\n yield* asyncIterable;\n }\n finally {\n onFinal();\n }\n}\n\nfunction createEnvelopOrchestrator(plugins) {\n let schema = null;\n let initDone = false;\n // Define the initial method for replacing the GraphQL schema, this is needed in order\n // to allow setting the schema from the onPluginInit callback. We also need to make sure\n // here not to call the same plugin that initiated the schema switch.\n const replaceSchema = (newSchema, ignorePluginIndex = -1) => {\n prepareTracedSchema(newSchema);\n schema = newSchema;\n if (initDone) {\n for (const [i, plugin] of plugins.entries()) {\n if (i !== ignorePluginIndex) {\n plugin.onSchemaChange &&\n plugin.onSchemaChange({\n schema,\n replaceSchema: schemaToSet => {\n replaceSchema(schemaToSet, i);\n },\n });\n }\n }\n }\n };\n // Iterate all plugins and trigger onPluginInit\n for (const [i, plugin] of plugins.entries()) {\n plugin.onPluginInit &&\n plugin.onPluginInit({\n plugins,\n addPlugin: newPlugin => {\n plugins.push(newPlugin);\n },\n setSchema: modifiedSchema => replaceSchema(modifiedSchema, i),\n });\n }\n // A set of before callbacks defined here in order to allow it to be used later\n const beforeCallbacks = {\n init: [],\n parse: [],\n validate: [],\n subscribe: [],\n execute: [],\n context: [],\n };\n for (const { onContextBuilding, onExecute, onParse, onSubscribe, onValidate, onEnveloped } of plugins) {\n onEnveloped && beforeCallbacks.init.push(onEnveloped);\n onContextBuilding && beforeCallbacks.context.push(onContextBuilding);\n onExecute && beforeCallbacks.execute.push(onExecute);\n onParse && beforeCallbacks.parse.push(onParse);\n onSubscribe && beforeCallbacks.subscribe.push(onSubscribe);\n onValidate && beforeCallbacks.validate.push(onValidate);\n }\n const init = initialContext => {\n for (const [i, onEnveloped] of beforeCallbacks.init.entries()) {\n onEnveloped({\n context: initialContext,\n extendContext: extension => {\n if (!initialContext) {\n return;\n }\n Object.assign(initialContext, extension);\n },\n setSchema: modifiedSchema => replaceSchema(modifiedSchema, i),\n });\n }\n };\n const customParse = beforeCallbacks.parse.length\n ? initialContext => (source, parseOptions) => {\n let result = null;\n let parseFn = parse;\n const context = initialContext;\n const afterCalls = [];\n for (const onParse of beforeCallbacks.parse) {\n const afterFn = onParse({\n context,\n extendContext: extension => {\n Object.assign(context, extension);\n },\n params: { source, options: parseOptions },\n parseFn,\n setParseFn: newFn => {\n parseFn = newFn;\n },\n setParsedDocument: newDoc => {\n result = newDoc;\n },\n });\n afterFn && afterCalls.push(afterFn);\n }\n if (result === null) {\n try {\n result = parseFn(source, parseOptions);\n }\n catch (e) {\n result = e;\n }\n }\n for (const afterCb of afterCalls) {\n afterCb({\n context,\n extendContext: extension => {\n Object.assign(context, extension);\n },\n replaceParseResult: newResult => {\n result = newResult;\n },\n result,\n });\n }\n if (result === null) {\n throw new Error(`Failed to parse document.`);\n }\n if (result instanceof Error) {\n throw result;\n }\n return result;\n }\n : () => parse;\n const customValidate = beforeCallbacks.validate.length\n ? initialContext => (schema, documentAST, rules, typeInfo, validationOptions) => {\n let actualRules = rules ? [...rules] : undefined;\n let validateFn = validate;\n let result = null;\n const context = initialContext;\n const afterCalls = [];\n for (const onValidate of beforeCallbacks.validate) {\n const afterFn = onValidate({\n context,\n extendContext: extension => {\n Object.assign(context, extension);\n },\n params: {\n schema,\n documentAST,\n rules: actualRules,\n typeInfo,\n options: validationOptions,\n },\n validateFn,\n addValidationRule: rule => {\n if (!actualRules) {\n actualRules = [...specifiedRules];\n }\n actualRules.push(rule);\n },\n setValidationFn: newFn => {\n validateFn = newFn;\n },\n setResult: newResults => {\n result = newResults;\n },\n });\n afterFn && afterCalls.push(afterFn);\n }\n if (!result) {\n result = validateFn(schema, documentAST, actualRules, typeInfo, validationOptions);\n }\n const valid = result.length === 0;\n for (const afterCb of afterCalls) {\n afterCb({\n valid,\n result,\n context,\n extendContext: extension => {\n Object.assign(context, extension);\n },\n });\n }\n return result;\n }\n : () => validate;\n const customContextFactory = beforeCallbacks.context.length\n ? initialContext => async (orchestratorCtx) => {\n const afterCalls = [];\n let context = orchestratorCtx ? { ...initialContext, ...orchestratorCtx } : initialContext;\n for (const onContext of beforeCallbacks.context) {\n const afterFn = await onContext({\n context,\n extendContext: extension => {\n context = { ...context, ...extension };\n },\n });\n afterFn && afterCalls.push(afterFn);\n }\n for (const afterCb of afterCalls) {\n afterCb({\n context,\n extendContext: extension => {\n context = { ...context, ...extension };\n },\n });\n }\n return context;\n }\n : initialContext => orchestratorCtx => orchestratorCtx ? { ...initialContext, ...orchestratorCtx } : initialContext;\n const customSubscribe = makeSubscribe(async (args) => {\n const onResolversHandlers = [];\n let subscribeFn = subscribe;\n const afterCalls = [];\n let context = args.contextValue || {};\n for (const onSubscribe of beforeCallbacks.subscribe) {\n const after = await onSubscribe({\n subscribeFn,\n setSubscribeFn: newSubscribeFn => {\n subscribeFn = newSubscribeFn;\n },\n extendContext: extension => {\n context = { ...context, ...extension };\n },\n args: args,\n });\n if (after) {\n if (after.onSubscribeResult) {\n afterCalls.push(after.onSubscribeResult);\n }\n if (after.onResolverCalled) {\n onResolversHandlers.push(after.onResolverCalled);\n }\n }\n }\n if (onResolversHandlers.length) {\n context[resolversHooksSymbol] = onResolversHandlers;\n }\n let result = await subscribeFn({\n ...args,\n contextValue: context,\n });\n const onNextHandler = [];\n const onEndHandler = [];\n for (const afterCb of afterCalls) {\n const hookResult = afterCb({\n result,\n setResult: newResult => {\n result = newResult;\n },\n });\n if (hookResult) {\n if (hookResult.onNext) {\n onNextHandler.push(hookResult.onNext);\n }\n if (hookResult.onEnd) {\n onEndHandler.push(hookResult.onEnd);\n }\n }\n }\n if (onNextHandler.length && isAsyncIterable(result)) {\n result = mapAsyncIterator(result, async (result) => {\n for (const onNext of onNextHandler) {\n await onNext({ result, setResult: newResult => (result = newResult) });\n }\n return result;\n });\n }\n if (onEndHandler.length && isAsyncIterable(result)) {\n result = finalAsyncIterator(result, () => {\n for (const onEnd of onEndHandler) {\n onEnd();\n }\n });\n }\n return result;\n });\n const customExecute = beforeCallbacks.execute.length\n ? makeExecute(async (args) => {\n const onResolversHandlers = [];\n let executeFn = execute;\n let result;\n const afterCalls = [];\n let context = args.contextValue || {};\n for (const onExecute of beforeCallbacks.execute) {\n let stopCalled = false;\n const after = await onExecute({\n executeFn,\n setExecuteFn: newExecuteFn => {\n executeFn = newExecuteFn;\n },\n setResultAndStopExecution: stopResult => {\n stopCalled = true;\n result = stopResult;\n },\n extendContext: extension => {\n if (typeof extension === 'object') {\n context = {\n ...(context || {}),\n ...extension,\n };\n }\n else {\n throw new Error(`Invalid context extension provided! Expected \"object\", got: \"${JSON.stringify(extension)}\" (${typeof extension})`);\n }\n },\n args: args,\n });\n if (stopCalled) {\n return result;\n }\n if (after) {\n if (after.onExecuteDone) {\n afterCalls.push(after.onExecuteDone);\n }\n if (after.onResolverCalled) {\n onResolversHandlers.push(after.onResolverCalled);\n }\n }\n }\n if (onResolversHandlers.length) {\n context[resolversHooksSymbol] = onResolversHandlers;\n }\n result = await executeFn({\n ...args,\n contextValue: context,\n });\n const onNextHandler = [];\n const onEndHandler = [];\n for (const afterCb of afterCalls) {\n const hookResult = afterCb({\n result,\n setResult: newResult => {\n result = newResult;\n },\n });\n if (hookResult) {\n if (hookResult.onNext) {\n onNextHandler.push(hookResult.onNext);\n }\n if (hookResult.onEnd) {\n onEndHandler.push(hookResult.onEnd);\n }\n }\n }\n if (onNextHandler.length && isAsyncIterable(result)) {\n result = mapAsyncIterator(result, async (result) => {\n for (const onNext of onNextHandler) {\n await onNext({ result, setResult: newResult => (result = newResult) });\n }\n return result;\n });\n }\n if (onEndHandler.length && isAsyncIterable(result)) {\n result = finalAsyncIterator(result, () => {\n for (const onEnd of onEndHandler) {\n onEnd();\n }\n });\n }\n return result;\n })\n : execute;\n initDone = true;\n // This is done in order to trigger the first schema available, to allow plugins that needs the schema\n // eagerly to have it.\n if (schema) {\n for (const [i, plugin] of plugins.entries()) {\n plugin.onSchemaChange &&\n plugin.onSchemaChange({\n schema,\n replaceSchema: modifiedSchema => replaceSchema(modifiedSchema, i),\n });\n }\n }\n return {\n getCurrentSchema() {\n return schema;\n },\n init,\n parse: customParse,\n validate: customValidate,\n execute: customExecute,\n subscribe: customSubscribe,\n contextFactory: customContextFactory,\n };\n}\n\nconst HR_TO_NS = 1e9;\nconst NS_TO_MS = 1e6;\nconst deltaFrom = (hrtime) => {\n const delta = process.hrtime(hrtime);\n const ns = delta[0] * HR_TO_NS + delta[1];\n return ns / NS_TO_MS;\n};\nfunction traceOrchestrator(orchestrator) {\n const createTracer = (name, ctx) => {\n const hrtime = process.hrtime();\n return () => {\n const time = deltaFrom(hrtime);\n ctx._envelopTracing[name] = time;\n };\n };\n return {\n ...orchestrator,\n init: (ctx = {}) => {\n ctx._envelopTracing = ctx._envelopTracing || {};\n const done = createTracer('init', ctx || {});\n try {\n return orchestrator.init(ctx);\n }\n finally {\n done();\n }\n },\n parse: (ctx = {}) => {\n ctx._envelopTracing = ctx._envelopTracing || {};\n const actualFn = orchestrator.parse(ctx);\n return (...args) => {\n const done = createTracer('parse', ctx);\n try {\n return actualFn(...args);\n }\n finally {\n done();\n }\n };\n },\n validate: (ctx = {}) => {\n ctx._envelopTracing = ctx._envelopTracing || {};\n const actualFn = orchestrator.validate(ctx);\n return (...args) => {\n const done = createTracer('validate', ctx);\n try {\n return actualFn(...args);\n }\n finally {\n done();\n }\n };\n },\n execute: async (argsOrSchema, document, rootValue, contextValue, variableValues, operationName, fieldResolver, typeResolver) => {\n const args = argsOrSchema instanceof GraphQLSchema\n ? {\n schema: argsOrSchema,\n document: document,\n rootValue,\n contextValue,\n variableValues,\n operationName,\n fieldResolver,\n typeResolver,\n }\n : argsOrSchema;\n const done = createTracer('execute', args.contextValue || {});\n try {\n const result = await orchestrator.execute(args);\n done();\n if (!isAsyncIterable(result)) {\n result.extensions = result.extensions || {};\n result.extensions.envelopTracing = args.contextValue._envelopTracing;\n }\n else {\n // eslint-disable-next-line no-console\n console.warn(`\"traceOrchestrator\" encountered a AsyncIterator which is not supported yet, so tracing data is not available for the operation.`);\n }\n return result;\n }\n catch (e) {\n done();\n throw e;\n }\n },\n subscribe: async (argsOrSchema, document, rootValue, contextValue, variableValues, operationName, fieldResolver, subscribeFieldResolver) => {\n const args = argsOrSchema instanceof GraphQLSchema\n ? {\n schema: argsOrSchema,\n document: document,\n rootValue,\n contextValue,\n variableValues,\n operationName,\n fieldResolver,\n subscribeFieldResolver,\n }\n : argsOrSchema;\n const done = createTracer('subscribe', args.contextValue || {});\n try {\n return await orchestrator.subscribe(args);\n }\n finally {\n done();\n }\n },\n contextFactory: (ctx = {}) => {\n const actualFn = orchestrator.contextFactory(ctx);\n return async (childCtx) => {\n const done = createTracer('contextFactory', ctx);\n try {\n return await actualFn(childCtx);\n }\n finally {\n done();\n }\n };\n },\n };\n}\n\nfunction envelop(options) {\n let orchestrator = createEnvelopOrchestrator(options.plugins);\n if (options.enableInternalTracing) {\n orchestrator = traceOrchestrator(orchestrator);\n }\n const getEnveloped = (initialContext = {}) => {\n const typedOrchestrator = orchestrator;\n typedOrchestrator.init(initialContext);\n return {\n parse: typedOrchestrator.parse(initialContext),\n validate: typedOrchestrator.validate(initialContext),\n contextFactory: typedOrchestrator.contextFactory(initialContext),\n execute: typedOrchestrator.execute,\n subscribe: typedOrchestrator.subscribe,\n schema: typedOrchestrator.getCurrentSchema(),\n };\n };\n getEnveloped._plugins = options.plugins;\n return getEnveloped;\n}\n\nconst useEnvelop = (envelop) => {\n return {\n onPluginInit({ addPlugin }) {\n for (const plugin of envelop._plugins) {\n addPlugin(plugin);\n }\n },\n };\n};\n\nconst DEFAULT_OPTIONS = {\n logFn: console.log,\n};\nconst useLogger = (rawOptions = DEFAULT_OPTIONS) => {\n const options = {\n DEFAULT_OPTIONS,\n ...rawOptions,\n };\n return {\n onParse({ extendContext, params }) {\n if (options.skipIntrospection && isIntrospectionOperationString(params.source)) {\n extendContext({\n [envelopIsIntrospectionSymbol]: true,\n });\n }\n },\n onExecute({ args }) {\n if (args.contextValue[envelopIsIntrospectionSymbol]) {\n return;\n }\n options.logFn('execute-start', { args });\n return {\n onExecuteDone: ({ result }) => {\n options.logFn('execute-end', { args, result });\n },\n };\n },\n onSubscribe({ args }) {\n if (args.contextValue[envelopIsIntrospectionSymbol]) {\n return;\n }\n options.logFn('subscribe-start', { args });\n return {\n onSubscribeResult: ({ result }) => {\n options.logFn('subscribe-end', { args, result });\n },\n };\n },\n };\n};\n\nconst HR_TO_NS$1 = 1e9;\nconst NS_TO_MS$1 = 1e6;\nconst DEFAULT_OPTIONS$1 = {\n onExecutionMeasurement: (args, timing) => console.log(`Operation execution \"${args.operationName}\" done in ${timing.ms}ms`),\n onSubscriptionMeasurement: (args, timing) => console.log(`Operation subsctiption \"${args.operationName}\" done in ${timing.ms}ms`),\n onParsingMeasurement: (source, timing) => console.log(`Parsing \"${source}\" done in ${timing.ms}ms`),\n onValidationMeasurement: (document, timing) => { var _a, _b; return console.log(`Validation \"${((_b = (_a = getOperationAST(document)) === null || _a === void 0 ? void 0 : _a.name) === null || _b === void 0 ? void 0 : _b.value) || '-'}\" done in ${timing.ms}ms`); },\n onResolverMeasurement: (info, timing) => console.log(`\\tResolver of \"${info.parentType.toString()}.${info.fieldName}\" done in ${timing.ms}ms`),\n onContextBuildingMeasurement: (timing) => console.log(`Context building done in ${timing.ms}ms`),\n};\nconst deltaFrom$1 = (hrtime) => {\n const delta = process.hrtime(hrtime);\n const ns = delta[0] * HR_TO_NS$1 + delta[1];\n return {\n ns,\n get ms() {\n return ns / NS_TO_MS$1;\n },\n };\n};\nconst useTiming = (rawOptions) => {\n const options = {\n ...DEFAULT_OPTIONS$1,\n ...(rawOptions || {}),\n };\n const result = {};\n if (options.onContextBuildingMeasurement) {\n result.onContextBuilding = ({ context }) => {\n if (context[envelopIsIntrospectionSymbol]) {\n return;\n }\n const contextStartTime = process.hrtime();\n return () => {\n options.onContextBuildingMeasurement(deltaFrom$1(contextStartTime));\n };\n };\n }\n if (options.onParsingMeasurement) {\n result.onParse = ({ params, extendContext }) => {\n if (options.skipIntrospection && isIntrospectionOperationString(params.source)) {\n extendContext({\n [envelopIsIntrospectionSymbol]: true,\n });\n return;\n }\n const parseStartTime = process.hrtime();\n return () => {\n options.onParsingMeasurement(params.source, deltaFrom$1(parseStartTime));\n };\n };\n }\n if (options.onValidationMeasurement) {\n result.onValidate = ({ params, context }) => {\n if (context[envelopIsIntrospectionSymbol]) {\n return;\n }\n const validateStartTime = process.hrtime();\n return () => {\n options.onValidationMeasurement(params.documentAST, deltaFrom$1(validateStartTime));\n };\n };\n }\n if (options.onExecutionMeasurement) {\n if (options.onResolverMeasurement) {\n result.onExecute = ({ args }) => {\n if (args.contextValue[envelopIsIntrospectionSymbol]) {\n return;\n }\n const executeStartTime = process.hrtime();\n return {\n onExecuteDone: () => {\n options.onExecutionMeasurement(args, deltaFrom$1(executeStartTime));\n },\n onResolverCalled: ({ info }) => {\n const resolverStartTime = process.hrtime();\n return () => {\n options.onResolverMeasurement(info, deltaFrom$1(resolverStartTime));\n };\n },\n };\n };\n }\n else {\n result.onExecute = ({ args }) => {\n if (args.contextValue[envelopIsIntrospectionSymbol]) {\n return;\n }\n const executeStartTime = process.hrtime();\n return {\n onExecuteDone: () => {\n options.onExecutionMeasurement(args, deltaFrom$1(executeStartTime));\n },\n };\n };\n }\n }\n if (options.onSubscriptionMeasurement) {\n if (options.onResolverMeasurement) {\n result.onSubscribe = ({ args }) => {\n if (args.contextValue[envelopIsIntrospectionSymbol]) {\n return;\n }\n const subscribeStartTime = process.hrtime();\n return {\n onSubscribeResult: () => {\n options.onSubscriptionMeasurement && options.onSubscriptionMeasurement(args, deltaFrom$1(subscribeStartTime));\n },\n onResolverCalled: ({ info }) => {\n const resolverStartTime = process.hrtime();\n return () => {\n options.onResolverMeasurement && options.onResolverMeasurement(info, deltaFrom$1(resolverStartTime));\n };\n },\n };\n };\n }\n else {\n result.onSubscribe = ({ args }) => {\n if (args.contextValue[envelopIsIntrospectionSymbol]) {\n return;\n }\n const subscribeStartTime = process.hrtime();\n return {\n onSubscribeResult: () => {\n options.onSubscriptionMeasurement && options.onSubscriptionMeasurement(args, deltaFrom$1(subscribeStartTime));\n },\n };\n };\n }\n }\n return result;\n};\n\nconst useSchema = (schema) => {\n return {\n onPluginInit({ setSchema }) {\n setSchema(schema);\n },\n };\n};\nconst useLazyLoadedSchema = (schemaLoader) => {\n return {\n onEnveloped({ setSchema, context }) {\n setSchema(schemaLoader(context));\n },\n };\n};\nconst useAsyncSchema = (schemaPromise) => {\n return {\n onPluginInit({ setSchema }) {\n schemaPromise.then(schemaObj => {\n setSchema(schemaObj);\n });\n },\n };\n};\n\nconst makeHandleResult = (errorHandler) => ({ result }) => {\n var _a;\n if ((_a = result.errors) === null || _a === void 0 ? void 0 : _a.length) {\n errorHandler(result.errors);\n }\n};\nconst useErrorHandler = (errorHandler) => ({\n onExecute() {\n const handleResult = makeHandleResult(errorHandler);\n return {\n onExecuteDone(payload) {\n return handleStreamOrSingleExecutionResult(payload, handleResult);\n },\n };\n },\n});\n\nconst useExtendContext = (contextFactory) => ({\n async onContextBuilding({ context, extendContext }) {\n extendContext((await contextFactory(context)));\n },\n});\n\nconst makeHandleResult$1 = (formatter) => ({ result, setResult }) => {\n const modified = formatter(result);\n if (modified !== false) {\n setResult(modified);\n }\n};\nconst usePayloadFormatter = (formatter) => ({\n onExecute() {\n const handleResult = makeHandleResult$1(formatter);\n return {\n onExecuteDone(payload) {\n return handleStreamOrSingleExecutionResult(payload, handleResult);\n },\n };\n },\n});\n\nclass EnvelopError extends GraphQLError {\n constructor(message, extensions) {\n super(message, undefined, undefined, undefined, undefined, undefined, extensions);\n }\n}\nconst formatError = err => {\n if (err.originalError && err.originalError instanceof EnvelopError === false) {\n return new GraphQLError('Unexpected error.', err.nodes, err.source, err.positions, err.path, undefined);\n }\n return err;\n};\nconst makeHandleResult$2 = (format) => ({ result, setResult }) => {\n if (result.errors != null) {\n setResult({ ...result, errors: result.errors.map(error => format(error)) });\n }\n};\nconst useMaskedErrors = (opts) => {\n var _a;\n const format = (_a = opts === null || opts === void 0 ? void 0 : opts.formatError) !== null && _a !== void 0 ? _a : formatError;\n const handleResult = makeHandleResult$2(format);\n return {\n onExecute() {\n return {\n onExecuteDone(payload) {\n return handleStreamOrSingleExecutionResult(payload, handleResult);\n },\n };\n },\n };\n};\n\nexport { EnvelopError, envelop, envelopIsIntrospectionSymbol, finalAsyncIterator, formatError, isIntrospectionDocument, isIntrospectionOperation, isIntrospectionOperationString, isOperationDefinition, makeExecute, makeSubscribe, mapAsyncIterator, useAsyncSchema, useEnvelop, useErrorHandler, useExtendContext, useLazyLoadedSchema, useLogger, useMaskedErrors, usePayloadFormatter, useSchema, useTiming };\n//# sourceMappingURL=index.mjs.map\n","import { createSourceEventStream } from 'graphql';\nimport { makeSubscribe } from '@envelop/core';\nimport { isAsyncIterable } from '@envelop/types';\nimport mapAsyncIterator from 'graphql/subscription/mapAsyncIterator';\n/**\n * This is a almost identical port from graphql-js subscribe.\n * The only difference is that a custom `execute` function can be injected for customizing the behavior.\n */\nexport const subscribe = (execute) => makeSubscribe(async (args) => {\n const { schema, document, rootValue, contextValue, variableValues, operationName, fieldResolver, subscribeFieldResolver } = args;\n const resultOrStream = await createSourceEventStream(schema, document, rootValue, contextValue, variableValues !== null && variableValues !== void 0 ? variableValues : undefined, operationName, subscribeFieldResolver);\n if (!isAsyncIterable(resultOrStream)) {\n return resultOrStream;\n }\n // For each payload yielded from a subscription, map it over the normal\n // GraphQL `execute` function, with `payload` as the rootValue.\n // This implements the \"MapSourceToResponseEvent\" algorithm described in\n // the GraphQL specification. The `execute` function provides the\n // \"ExecuteSubscriptionEvent\" algorithm, as it is nearly identical to the\n // \"ExecuteQuery\" algorithm, for which `execute` is also used.\n const mapSourceToResponse = async (payload) => execute({\n schema,\n document,\n rootValue: payload,\n contextValue,\n variableValues,\n operationName,\n fieldResolver,\n });\n // Map every source value to a ExecutionResult value as described above.\n return mapAsyncIterator(resultOrStream, mapSourceToResponse);\n});\n//# sourceMappingURL=subscribe.js.map","import { execute } from 'graphql';\nimport { makeExecute } from '@envelop/core';\nimport { subscribe } from './subscribe';\nexport const useExtendContextValuePerExecuteSubscriptionEvent = (createContext) => {\n return {\n onSubscribe({ args, setSubscribeFn }) {\n const executeNew = makeExecute(async (executionArgs) => {\n var _a;\n const context = await createContext({ args });\n try {\n return execute({\n ...executionArgs,\n contextValue: { ...executionArgs.contextValue, ...context === null || context === void 0 ? void 0 : context.contextPartial },\n });\n }\n finally {\n (_a = context === null || context === void 0 ? void 0 : context.onEnd) === null || _a === void 0 ? void 0 : _a.call(context);\n }\n });\n setSubscribeFn(subscribe(executeNew));\n },\n };\n};\n//# sourceMappingURL=index.js.map"],"names":["createSourceEventStream","execute"],"mappings":";;;;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS,eAAe,CAAC,kBAAkB,EAAE;AAC7C,IAAI,OAAO,QAAQ,kBAAkB,KAAK,IAAI,IAAI,kBAAkB,KAAK,KAAK,CAAC,GAAG,KAAK,CAAC,GAAG,kBAAkB,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC,KAAK,UAAU,CAAC;AACpJ;;ACsFA,SAAS,gBAAgB,CAAC,IAAI,EAAE;AAChC,IAAI,OAAO,IAAI,CAAC,MAAM,KAAK,CAAC;AAC5B,UAAU,IAAI,CAAC,CAAC,CAAC;AACjB,UAAU;AACV,YAAY,MAAM,EAAE,IAAI,CAAC,CAAC,CAAC;AAC3B,YAAY,QAAQ,EAAE,IAAI,CAAC,CAAC,CAAC;AAC7B,YAAY,SAAS,EAAE,IAAI,CAAC,CAAC,CAAC;AAC9B,YAAY,YAAY,EAAE,IAAI,CAAC,CAAC,CAAC;AACjC,YAAY,cAAc,EAAE,IAAI,CAAC,CAAC,CAAC;AACnC,YAAY,aAAa,EAAE,IAAI,CAAC,CAAC,CAAC;AAClC,YAAY,aAAa,EAAE,IAAI,CAAC,CAAC,CAAC;AAClC,YAAY,sBAAsB,EAAE,IAAI,CAAC,CAAC,CAAC;AAC3C,SAAS,CAAC;AACV,CAAC;AACD;AACA;AACA;AACA,MAAM,aAAa,GAAG,CAAC,WAAW,MAAM,CAAC,GAAG,QAAQ,KAAK,WAAW,CAAC,gBAAgB,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;AAMlG,SAAS,cAAc,CAAC,IAAI,EAAE;AAC9B,IAAI,OAAO,IAAI,CAAC,MAAM,KAAK,CAAC;AAC5B,UAAU,IAAI,CAAC,CAAC,CAAC;AACjB,UAAU;AACV,YAAY,MAAM,EAAE,IAAI,CAAC,CAAC,CAAC;AAC3B,YAAY,QAAQ,EAAE,IAAI,CAAC,CAAC,CAAC;AAC7B,YAAY,SAAS,EAAE,IAAI,CAAC,CAAC,CAAC;AAC9B,YAAY,YAAY,EAAE,IAAI,CAAC,CAAC,CAAC;AACjC,YAAY,cAAc,EAAE,IAAI,CAAC,CAAC,CAAC;AACnC,YAAY,aAAa,EAAE,IAAI,CAAC,CAAC,CAAC;AAClC,YAAY,aAAa,EAAE,IAAI,CAAC,CAAC,CAAC;AAClC,YAAY,YAAY,EAAE,IAAI,CAAC,CAAC,CAAC;AACjC,SAAS,CAAC;AACV,CAAC;AACD;AACA;AACA;AACA,MAAM,WAAW,GAAG,CAAC,SAAS,MAAM,CAAC,GAAG,QAAQ,KAAK,SAAS,CAAC,cAAc,CAAC,QAAQ,CAAC,CAAC,CAAC;;AClIzF;AACA;AACA;AACA;AACO,MAAM,SAAS,GAAG,CAAC,OAAO,KAAK,aAAa,CAAC,OAAO,IAAI,KAAK;AACpE,IAAI,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,SAAS,EAAE,YAAY,EAAE,cAAc,EAAE,aAAa,EAAE,aAAa,EAAE,sBAAsB,EAAE,GAAG,IAAI,CAAC;AACrI,IAAI,MAAM,cAAc,GAAG,MAAMA,+BAAuB,CAAC,MAAM,EAAE,QAAQ,EAAE,SAAS,EAAE,YAAY,EAAE,cAAc,KAAK,IAAI,IAAI,cAAc,KAAK,KAAK,CAAC,GAAG,cAAc,GAAG,SAAS,EAAE,aAAa,EAAE,sBAAsB,CAAC,CAAC;AAC9N,IAAI,IAAI,CAAC,eAAe,CAAC,cAAc,CAAC,EAAE;AAC1C,QAAQ,OAAO,cAAc,CAAC;AAC9B,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA,IAAI,MAAM,mBAAmB,GAAG,OAAO,OAAO,KAAK,OAAO,CAAC;AAC3D,QAAQ,MAAM;AACd,QAAQ,QAAQ;AAChB,QAAQ,SAAS,EAAE,OAAO;AAC1B,QAAQ,YAAY;AACpB,QAAQ,cAAc;AACtB,QAAQ,aAAa;AACrB,QAAQ,aAAa;AACrB,KAAK,CAAC,CAAC;AACP;AACA,IAAI,OAAO,gBAAgB,CAAC,cAAc,EAAE,mBAAmB,CAAC,CAAC;AACjE,CAAC,CAAC;;AC5BU,MAAC,gDAAgD,GAAG,CAAC,aAAa,KAAK;AACnF,IAAI,OAAO;AACX,QAAQ,WAAW,CAAC,EAAE,IAAI,EAAE,cAAc,EAAE,EAAE;AAC9C,YAAY,MAAM,UAAU,GAAG,WAAW,CAAC,OAAO,aAAa,KAAK;AACpE,gBAAgB,IAAI,EAAE,CAAC;AACvB,gBAAgB,MAAM,OAAO,GAAG,MAAM,aAAa,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC;AAC9D,gBAAgB,IAAI;AACpB,oBAAoB,OAAOC,eAAO,CAAC;AACnC,wBAAwB,GAAG,aAAa;AACxC,wBAAwB,YAAY,EAAE,EAAE,GAAG,aAAa,CAAC,YAAY,EAAE,GAAG,OAAO,KAAK,IAAI,IAAI,OAAO,KAAK,KAAK,CAAC,GAAG,KAAK,CAAC,GAAG,OAAO,CAAC,cAAc,EAAE;AACpJ,qBAAqB,CAAC,CAAC;AACvB,iBAAiB;AACjB,wBAAwB;AACxB,oBAAoB,CAAC,EAAE,GAAG,OAAO,KAAK,IAAI,IAAI,OAAO,KAAK,KAAK,CAAC,GAAG,KAAK,CAAC,GAAG,OAAO,CAAC,KAAK,MAAM,IAAI,IAAI,EAAE,KAAK,KAAK,CAAC,GAAG,KAAK,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;AACjJ,iBAAiB;AACjB,aAAa,CAAC,CAAC;AACf,YAAY,cAAc,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC,CAAC;AAClD,SAAS;AACT,KAAK,CAAC;AACN;;;;"}
|
package/index.mjs.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.mjs","sources":["../../../packages/types/dist/index.mjs","../../../packages/core/dist/index.mjs","../../../dist/plugins/execute-subscription-event/src/subscribe.js","../../../dist/plugins/execute-subscription-event/src/index.js"],"sourcesContent":["/**\n * Returns true if the provided object implements the AsyncIterator protocol via\n * implementing a `Symbol.asyncIterator` method.\n *\n * Source: https://github.com/graphql/graphql-js/blob/main/src/jsutils/isAsyncIterable.ts\n */\nfunction isAsyncIterable(maybeAsyncIterable) {\n return typeof (maybeAsyncIterable === null || maybeAsyncIterable === void 0 ? void 0 : maybeAsyncIterable[Symbol.asyncIterator]) === 'function';\n}\n/**\n * A utility function for hanlding `onExecuteDone` hook result, for simplifying the hanlding of AsyncIterable returned from `execute`.\n *\n * @param payload The payload send to `onExecuteDone` hook function\n * @param fn The handler to be executed on each result\n * @returns a subscription for streamed results, or undefined in case of an non-async\n */\nfunction handleStreamOrSingleExecutionResult(payload, fn) {\n if (isAsyncIterable(payload.result)) {\n return { onNext: fn };\n }\n else {\n fn({\n result: payload.result,\n setResult: payload.setResult,\n });\n return undefined;\n }\n}\n\nexport { handleStreamOrSingleExecutionResult, isAsyncIterable };\n//# sourceMappingURL=index.mjs.map\n","import { isAsyncIterable, handleStreamOrSingleExecutionResult } from '@envelop/types';\nexport * from '@envelop/types';\nimport { isIntrospectionType, isObjectType, defaultFieldResolver, Kind, visit, BREAK, parse, specifiedRules, validate, execute, subscribe, GraphQLSchema, getOperationAST, GraphQLError } from 'graphql';\n\nconst trackedSchemaSymbol = Symbol('TRACKED_SCHEMA');\nconst resolversHooksSymbol = Symbol('RESOLVERS_HOOKS');\nfunction prepareTracedSchema(schema) {\n if (!schema || schema[trackedSchemaSymbol]) {\n return;\n }\n schema[trackedSchemaSymbol] = true;\n const entries = Object.values(schema.getTypeMap());\n for (const type of entries) {\n if (!isIntrospectionType(type) && isObjectType(type)) {\n const fields = Object.values(type.getFields());\n for (const field of fields) {\n let resolverFn = (field.resolve || defaultFieldResolver);\n field.resolve = async (root, args, context, info) => {\n if (context && context[resolversHooksSymbol]) {\n const hooks = context[resolversHooksSymbol];\n const afterCalls = [];\n for (const hook of hooks) {\n const afterFn = await hook({\n root,\n args,\n context,\n info,\n resolverFn,\n replaceResolverFn: newFn => {\n resolverFn = newFn;\n },\n });\n afterFn && afterCalls.push(afterFn);\n }\n try {\n let result = await resolverFn(root, args, context, info);\n for (const afterFn of afterCalls) {\n afterFn({\n result,\n setResult: newResult => {\n result = newResult;\n },\n });\n }\n return result;\n }\n catch (e) {\n let resultErr = e;\n for (const afterFn of afterCalls) {\n afterFn({\n result: resultErr,\n setResult: newResult => {\n resultErr = newResult;\n },\n });\n }\n throw resultErr;\n }\n }\n else {\n return resolverFn(root, args, context, info);\n }\n };\n }\n }\n }\n}\n\nconst envelopIsIntrospectionSymbol = Symbol('ENVELOP_IS_INTROSPECTION');\nfunction isOperationDefinition(def) {\n return def.kind === Kind.OPERATION_DEFINITION;\n}\nfunction isIntrospectionOperation(operation) {\n if (operation.kind === 'OperationDefinition') {\n let hasIntrospectionField = false;\n visit(operation, {\n Field: node => {\n if (node.name.value === '__schema') {\n hasIntrospectionField = true;\n return BREAK;\n }\n },\n });\n return hasIntrospectionField;\n }\n return false;\n}\nfunction isIntrospectionDocument(document) {\n const operations = document.definitions.filter(isOperationDefinition);\n return operations.some(op => isIntrospectionOperation(op));\n}\nfunction isIntrospectionOperationString(operation) {\n return (typeof operation === 'string' ? operation : operation.body).indexOf('__schema') !== -1;\n}\nfunction getSubscribeArgs(args) {\n return args.length === 1\n ? args[0]\n : {\n schema: args[0],\n document: args[1],\n rootValue: args[2],\n contextValue: args[3],\n variableValues: args[4],\n operationName: args[5],\n fieldResolver: args[6],\n subscribeFieldResolver: args[7],\n };\n}\n/**\n * Utility function for making a subscribe function that handles polymorphic arguments.\n */\nconst makeSubscribe = (subscribeFn) => ((...polyArgs) => subscribeFn(getSubscribeArgs(polyArgs)));\nasync function* mapAsyncIterator(asyncIterable, map) {\n for await (const value of asyncIterable) {\n yield map(value);\n }\n}\nfunction getExecuteArgs(args) {\n return args.length === 1\n ? args[0]\n : {\n schema: args[0],\n document: args[1],\n rootValue: args[2],\n contextValue: args[3],\n variableValues: args[4],\n operationName: args[5],\n fieldResolver: args[6],\n typeResolver: args[7],\n };\n}\n/**\n * Utility function for making a execute function that handles polymorphic arguments.\n */\nconst makeExecute = (executeFn) => ((...polyArgs) => executeFn(getExecuteArgs(polyArgs)));\nasync function* finalAsyncIterator(asyncIterable, onFinal) {\n try {\n yield* asyncIterable;\n }\n finally {\n onFinal();\n }\n}\n\nfunction createEnvelopOrchestrator(plugins) {\n let schema = null;\n let initDone = false;\n // Define the initial method for replacing the GraphQL schema, this is needed in order\n // to allow setting the schema from the onPluginInit callback. We also need to make sure\n // here not to call the same plugin that initiated the schema switch.\n const replaceSchema = (newSchema, ignorePluginIndex = -1) => {\n prepareTracedSchema(newSchema);\n schema = newSchema;\n if (initDone) {\n for (const [i, plugin] of plugins.entries()) {\n if (i !== ignorePluginIndex) {\n plugin.onSchemaChange &&\n plugin.onSchemaChange({\n schema,\n replaceSchema: schemaToSet => {\n replaceSchema(schemaToSet, i);\n },\n });\n }\n }\n }\n };\n // Iterate all plugins and trigger onPluginInit\n for (const [i, plugin] of plugins.entries()) {\n plugin.onPluginInit &&\n plugin.onPluginInit({\n plugins,\n addPlugin: newPlugin => {\n plugins.push(newPlugin);\n },\n setSchema: modifiedSchema => replaceSchema(modifiedSchema, i),\n });\n }\n // A set of before callbacks defined here in order to allow it to be used later\n const beforeCallbacks = {\n init: [],\n parse: [],\n validate: [],\n subscribe: [],\n execute: [],\n context: [],\n };\n for (const { onContextBuilding, onExecute, onParse, onSubscribe, onValidate, onEnveloped } of plugins) {\n onEnveloped && beforeCallbacks.init.push(onEnveloped);\n onContextBuilding && beforeCallbacks.context.push(onContextBuilding);\n onExecute && beforeCallbacks.execute.push(onExecute);\n onParse && beforeCallbacks.parse.push(onParse);\n onSubscribe && beforeCallbacks.subscribe.push(onSubscribe);\n onValidate && beforeCallbacks.validate.push(onValidate);\n }\n const init = initialContext => {\n for (const [i, onEnveloped] of beforeCallbacks.init.entries()) {\n onEnveloped({\n context: initialContext,\n extendContext: extension => {\n if (!initialContext) {\n return;\n }\n Object.assign(initialContext, extension);\n },\n setSchema: modifiedSchema => replaceSchema(modifiedSchema, i),\n });\n }\n };\n const customParse = beforeCallbacks.parse.length\n ? initialContext => (source, parseOptions) => {\n let result = null;\n let parseFn = parse;\n const context = initialContext;\n const afterCalls = [];\n for (const onParse of beforeCallbacks.parse) {\n const afterFn = onParse({\n context,\n extendContext: extension => {\n Object.assign(context, extension);\n },\n params: { source, options: parseOptions },\n parseFn,\n setParseFn: newFn => {\n parseFn = newFn;\n },\n setParsedDocument: newDoc => {\n result = newDoc;\n },\n });\n afterFn && afterCalls.push(afterFn);\n }\n if (result === null) {\n try {\n result = parseFn(source, parseOptions);\n }\n catch (e) {\n result = e;\n }\n }\n for (const afterCb of afterCalls) {\n afterCb({\n context,\n extendContext: extension => {\n Object.assign(context, extension);\n },\n replaceParseResult: newResult => {\n result = newResult;\n },\n result,\n });\n }\n if (result === null) {\n throw new Error(`Failed to parse document.`);\n }\n if (result instanceof Error) {\n throw result;\n }\n return result;\n }\n : () => parse;\n const customValidate = beforeCallbacks.validate.length\n ? initialContext => (schema, documentAST, rules, typeInfo, validationOptions) => {\n let actualRules = rules ? [...rules] : undefined;\n let validateFn = validate;\n let result = null;\n const context = initialContext;\n const afterCalls = [];\n for (const onValidate of beforeCallbacks.validate) {\n const afterFn = onValidate({\n context,\n extendContext: extension => {\n Object.assign(context, extension);\n },\n params: {\n schema,\n documentAST,\n rules: actualRules,\n typeInfo,\n options: validationOptions,\n },\n validateFn,\n addValidationRule: rule => {\n if (!actualRules) {\n actualRules = [...specifiedRules];\n }\n actualRules.push(rule);\n },\n setValidationFn: newFn => {\n validateFn = newFn;\n },\n setResult: newResults => {\n result = newResults;\n },\n });\n afterFn && afterCalls.push(afterFn);\n }\n if (!result) {\n result = validateFn(schema, documentAST, actualRules, typeInfo, validationOptions);\n }\n const valid = result.length === 0;\n for (const afterCb of afterCalls) {\n afterCb({\n valid,\n result,\n context,\n extendContext: extension => {\n Object.assign(context, extension);\n },\n });\n }\n return result;\n }\n : () => validate;\n const customContextFactory = beforeCallbacks.context.length\n ? initialContext => async (orchestratorCtx) => {\n const afterCalls = [];\n let context = orchestratorCtx ? { ...initialContext, ...orchestratorCtx } : initialContext;\n for (const onContext of beforeCallbacks.context) {\n const afterFn = await onContext({\n context,\n extendContext: extension => {\n context = { ...context, ...extension };\n },\n });\n afterFn && afterCalls.push(afterFn);\n }\n for (const afterCb of afterCalls) {\n afterCb({\n context,\n extendContext: extension => {\n context = { ...context, ...extension };\n },\n });\n }\n return context;\n }\n : initialContext => orchestratorCtx => orchestratorCtx ? { ...initialContext, ...orchestratorCtx } : initialContext;\n const customSubscribe = makeSubscribe(async (args) => {\n const onResolversHandlers = [];\n let subscribeFn = subscribe;\n const afterCalls = [];\n let context = args.contextValue || {};\n for (const onSubscribe of beforeCallbacks.subscribe) {\n const after = await onSubscribe({\n subscribeFn,\n setSubscribeFn: newSubscribeFn => {\n subscribeFn = newSubscribeFn;\n },\n extendContext: extension => {\n context = { ...context, ...extension };\n },\n args: args,\n });\n if (after) {\n if (after.onSubscribeResult) {\n afterCalls.push(after.onSubscribeResult);\n }\n if (after.onResolverCalled) {\n onResolversHandlers.push(after.onResolverCalled);\n }\n }\n }\n if (onResolversHandlers.length) {\n context[resolversHooksSymbol] = onResolversHandlers;\n }\n let result = await subscribeFn({\n ...args,\n contextValue: context,\n });\n const onNextHandler = [];\n const onEndHandler = [];\n for (const afterCb of afterCalls) {\n const hookResult = afterCb({\n result,\n setResult: newResult => {\n result = newResult;\n },\n });\n if (hookResult) {\n if (hookResult.onNext) {\n onNextHandler.push(hookResult.onNext);\n }\n if (hookResult.onEnd) {\n onEndHandler.push(hookResult.onEnd);\n }\n }\n }\n if (onNextHandler.length && isAsyncIterable(result)) {\n result = mapAsyncIterator(result, async (result) => {\n for (const onNext of onNextHandler) {\n await onNext({ result, setResult: newResult => (result = newResult) });\n }\n return result;\n });\n }\n if (onEndHandler.length && isAsyncIterable(result)) {\n result = finalAsyncIterator(result, () => {\n for (const onEnd of onEndHandler) {\n onEnd();\n }\n });\n }\n return result;\n });\n const customExecute = beforeCallbacks.execute.length\n ? makeExecute(async (args) => {\n const onResolversHandlers = [];\n let executeFn = execute;\n let result;\n const afterCalls = [];\n let context = args.contextValue || {};\n for (const onExecute of beforeCallbacks.execute) {\n let stopCalled = false;\n const after = await onExecute({\n executeFn,\n setExecuteFn: newExecuteFn => {\n executeFn = newExecuteFn;\n },\n setResultAndStopExecution: stopResult => {\n stopCalled = true;\n result = stopResult;\n },\n extendContext: extension => {\n if (typeof extension === 'object') {\n context = {\n ...(context || {}),\n ...extension,\n };\n }\n else {\n throw new Error(`Invalid context extension provided! Expected \"object\", got: \"${JSON.stringify(extension)}\" (${typeof extension})`);\n }\n },\n args: args,\n });\n if (stopCalled) {\n return result;\n }\n if (after) {\n if (after.onExecuteDone) {\n afterCalls.push(after.onExecuteDone);\n }\n if (after.onResolverCalled) {\n onResolversHandlers.push(after.onResolverCalled);\n }\n }\n }\n if (onResolversHandlers.length) {\n context[resolversHooksSymbol] = onResolversHandlers;\n }\n result = await executeFn({\n ...args,\n contextValue: context,\n });\n const onNextHandler = [];\n const onEndHandler = [];\n for (const afterCb of afterCalls) {\n const hookResult = afterCb({\n result,\n setResult: newResult => {\n result = newResult;\n },\n });\n if (hookResult) {\n if (hookResult.onNext) {\n onNextHandler.push(hookResult.onNext);\n }\n if (hookResult.onEnd) {\n onEndHandler.push(hookResult.onEnd);\n }\n }\n }\n if (onNextHandler.length && isAsyncIterable(result)) {\n result = mapAsyncIterator(result, async (result) => {\n for (const onNext of onNextHandler) {\n await onNext({ result, setResult: newResult => (result = newResult) });\n }\n return result;\n });\n }\n if (onEndHandler.length && isAsyncIterable(result)) {\n result = finalAsyncIterator(result, () => {\n for (const onEnd of onEndHandler) {\n onEnd();\n }\n });\n }\n return result;\n })\n : execute;\n initDone = true;\n // This is done in order to trigger the first schema available, to allow plugins that needs the schema\n // eagerly to have it.\n if (schema) {\n for (const [i, plugin] of plugins.entries()) {\n plugin.onSchemaChange &&\n plugin.onSchemaChange({\n schema,\n replaceSchema: modifiedSchema => replaceSchema(modifiedSchema, i),\n });\n }\n }\n return {\n getCurrentSchema() {\n return schema;\n },\n init,\n parse: customParse,\n validate: customValidate,\n execute: customExecute,\n subscribe: customSubscribe,\n contextFactory: customContextFactory,\n };\n}\n\nconst HR_TO_NS = 1e9;\nconst NS_TO_MS = 1e6;\nconst deltaFrom = (hrtime) => {\n const delta = process.hrtime(hrtime);\n const ns = delta[0] * HR_TO_NS + delta[1];\n return ns / NS_TO_MS;\n};\nfunction traceOrchestrator(orchestrator) {\n const createTracer = (name, ctx) => {\n const hrtime = process.hrtime();\n return () => {\n const time = deltaFrom(hrtime);\n ctx._envelopTracing[name] = time;\n };\n };\n return {\n ...orchestrator,\n init: (ctx = {}) => {\n ctx._envelopTracing = ctx._envelopTracing || {};\n const done = createTracer('init', ctx || {});\n try {\n return orchestrator.init(ctx);\n }\n finally {\n done();\n }\n },\n parse: (ctx = {}) => {\n ctx._envelopTracing = ctx._envelopTracing || {};\n const actualFn = orchestrator.parse(ctx);\n return (...args) => {\n const done = createTracer('parse', ctx);\n try {\n return actualFn(...args);\n }\n finally {\n done();\n }\n };\n },\n validate: (ctx = {}) => {\n ctx._envelopTracing = ctx._envelopTracing || {};\n const actualFn = orchestrator.validate(ctx);\n return (...args) => {\n const done = createTracer('validate', ctx);\n try {\n return actualFn(...args);\n }\n finally {\n done();\n }\n };\n },\n execute: async (argsOrSchema, document, rootValue, contextValue, variableValues, operationName, fieldResolver, typeResolver) => {\n const args = argsOrSchema instanceof GraphQLSchema\n ? {\n schema: argsOrSchema,\n document: document,\n rootValue,\n contextValue,\n variableValues,\n operationName,\n fieldResolver,\n typeResolver,\n }\n : argsOrSchema;\n const done = createTracer('execute', args.contextValue || {});\n try {\n const result = await orchestrator.execute(args);\n done();\n if (!isAsyncIterable(result)) {\n result.extensions = result.extensions || {};\n result.extensions.envelopTracing = args.contextValue._envelopTracing;\n }\n else {\n // eslint-disable-next-line no-console\n console.warn(`\"traceOrchestrator\" encountered a AsyncIterator which is not supported yet, so tracing data is not available for the operation.`);\n }\n return result;\n }\n catch (e) {\n done();\n throw e;\n }\n },\n subscribe: async (argsOrSchema, document, rootValue, contextValue, variableValues, operationName, fieldResolver, subscribeFieldResolver) => {\n const args = argsOrSchema instanceof GraphQLSchema\n ? {\n schema: argsOrSchema,\n document: document,\n rootValue,\n contextValue,\n variableValues,\n operationName,\n fieldResolver,\n subscribeFieldResolver,\n }\n : argsOrSchema;\n const done = createTracer('subscribe', args.contextValue || {});\n try {\n return await orchestrator.subscribe(args);\n }\n finally {\n done();\n }\n },\n contextFactory: (ctx = {}) => {\n const actualFn = orchestrator.contextFactory(ctx);\n return async (childCtx) => {\n const done = createTracer('contextFactory', ctx);\n try {\n return await actualFn(childCtx);\n }\n finally {\n done();\n }\n };\n },\n };\n}\n\nfunction envelop(options) {\n let orchestrator = createEnvelopOrchestrator(options.plugins);\n if (options.enableInternalTracing) {\n orchestrator = traceOrchestrator(orchestrator);\n }\n const getEnveloped = (initialContext = {}) => {\n const typedOrchestrator = orchestrator;\n typedOrchestrator.init(initialContext);\n return {\n parse: typedOrchestrator.parse(initialContext),\n validate: typedOrchestrator.validate(initialContext),\n contextFactory: typedOrchestrator.contextFactory(initialContext),\n execute: typedOrchestrator.execute,\n subscribe: typedOrchestrator.subscribe,\n schema: typedOrchestrator.getCurrentSchema(),\n };\n };\n getEnveloped._plugins = options.plugins;\n return getEnveloped;\n}\n\nconst useEnvelop = (envelop) => {\n return {\n onPluginInit({ addPlugin }) {\n for (const plugin of envelop._plugins) {\n addPlugin(plugin);\n }\n },\n };\n};\n\nconst DEFAULT_OPTIONS = {\n logFn: console.log,\n};\nconst useLogger = (rawOptions = DEFAULT_OPTIONS) => {\n const options = {\n DEFAULT_OPTIONS,\n ...rawOptions,\n };\n return {\n onParse({ extendContext, params }) {\n if (options.skipIntrospection && isIntrospectionOperationString(params.source)) {\n extendContext({\n [envelopIsIntrospectionSymbol]: true,\n });\n }\n },\n onExecute({ args }) {\n if (args.contextValue[envelopIsIntrospectionSymbol]) {\n return;\n }\n options.logFn('execute-start', { args });\n return {\n onExecuteDone: ({ result }) => {\n options.logFn('execute-end', { args, result });\n },\n };\n },\n onSubscribe({ args }) {\n if (args.contextValue[envelopIsIntrospectionSymbol]) {\n return;\n }\n options.logFn('subscribe-start', { args });\n return {\n onSubscribeResult: ({ result }) => {\n options.logFn('subscribe-end', { args, result });\n },\n };\n },\n };\n};\n\nconst HR_TO_NS$1 = 1e9;\nconst NS_TO_MS$1 = 1e6;\nconst DEFAULT_OPTIONS$1 = {\n onExecutionMeasurement: (args, timing) => console.log(`Operation execution \"${args.operationName}\" done in ${timing.ms}ms`),\n onSubscriptionMeasurement: (args, timing) => console.log(`Operation subsctiption \"${args.operationName}\" done in ${timing.ms}ms`),\n onParsingMeasurement: (source, timing) => console.log(`Parsing \"${source}\" done in ${timing.ms}ms`),\n onValidationMeasurement: (document, timing) => { var _a, _b; return console.log(`Validation \"${((_b = (_a = getOperationAST(document)) === null || _a === void 0 ? void 0 : _a.name) === null || _b === void 0 ? void 0 : _b.value) || '-'}\" done in ${timing.ms}ms`); },\n onResolverMeasurement: (info, timing) => console.log(`\\tResolver of \"${info.parentType.toString()}.${info.fieldName}\" done in ${timing.ms}ms`),\n onContextBuildingMeasurement: (timing) => console.log(`Context building done in ${timing.ms}ms`),\n};\nconst deltaFrom$1 = (hrtime) => {\n const delta = process.hrtime(hrtime);\n const ns = delta[0] * HR_TO_NS$1 + delta[1];\n return {\n ns,\n get ms() {\n return ns / NS_TO_MS$1;\n },\n };\n};\nconst useTiming = (rawOptions) => {\n const options = {\n ...DEFAULT_OPTIONS$1,\n ...(rawOptions || {}),\n };\n const result = {};\n if (options.onContextBuildingMeasurement) {\n result.onContextBuilding = ({ context }) => {\n if (context[envelopIsIntrospectionSymbol]) {\n return;\n }\n const contextStartTime = process.hrtime();\n return () => {\n options.onContextBuildingMeasurement(deltaFrom$1(contextStartTime));\n };\n };\n }\n if (options.onParsingMeasurement) {\n result.onParse = ({ params, extendContext }) => {\n if (options.skipIntrospection && isIntrospectionOperationString(params.source)) {\n extendContext({\n [envelopIsIntrospectionSymbol]: true,\n });\n return;\n }\n const parseStartTime = process.hrtime();\n return () => {\n options.onParsingMeasurement(params.source, deltaFrom$1(parseStartTime));\n };\n };\n }\n if (options.onValidationMeasurement) {\n result.onValidate = ({ params, context }) => {\n if (context[envelopIsIntrospectionSymbol]) {\n return;\n }\n const validateStartTime = process.hrtime();\n return () => {\n options.onValidationMeasurement(params.documentAST, deltaFrom$1(validateStartTime));\n };\n };\n }\n if (options.onExecutionMeasurement) {\n if (options.onResolverMeasurement) {\n result.onExecute = ({ args }) => {\n if (args.contextValue[envelopIsIntrospectionSymbol]) {\n return;\n }\n const executeStartTime = process.hrtime();\n return {\n onExecuteDone: () => {\n options.onExecutionMeasurement(args, deltaFrom$1(executeStartTime));\n },\n onResolverCalled: ({ info }) => {\n const resolverStartTime = process.hrtime();\n return () => {\n options.onResolverMeasurement(info, deltaFrom$1(resolverStartTime));\n };\n },\n };\n };\n }\n else {\n result.onExecute = ({ args }) => {\n if (args.contextValue[envelopIsIntrospectionSymbol]) {\n return;\n }\n const executeStartTime = process.hrtime();\n return {\n onExecuteDone: () => {\n options.onExecutionMeasurement(args, deltaFrom$1(executeStartTime));\n },\n };\n };\n }\n }\n if (options.onSubscriptionMeasurement) {\n if (options.onResolverMeasurement) {\n result.onSubscribe = ({ args }) => {\n if (args.contextValue[envelopIsIntrospectionSymbol]) {\n return;\n }\n const subscribeStartTime = process.hrtime();\n return {\n onSubscribeResult: () => {\n options.onSubscriptionMeasurement && options.onSubscriptionMeasurement(args, deltaFrom$1(subscribeStartTime));\n },\n onResolverCalled: ({ info }) => {\n const resolverStartTime = process.hrtime();\n return () => {\n options.onResolverMeasurement && options.onResolverMeasurement(info, deltaFrom$1(resolverStartTime));\n };\n },\n };\n };\n }\n else {\n result.onSubscribe = ({ args }) => {\n if (args.contextValue[envelopIsIntrospectionSymbol]) {\n return;\n }\n const subscribeStartTime = process.hrtime();\n return {\n onSubscribeResult: () => {\n options.onSubscriptionMeasurement && options.onSubscriptionMeasurement(args, deltaFrom$1(subscribeStartTime));\n },\n };\n };\n }\n }\n return result;\n};\n\nconst useSchema = (schema) => {\n return {\n onPluginInit({ setSchema }) {\n setSchema(schema);\n },\n };\n};\nconst useLazyLoadedSchema = (schemaLoader) => {\n return {\n onEnveloped({ setSchema, context }) {\n setSchema(schemaLoader(context));\n },\n };\n};\nconst useAsyncSchema = (schemaPromise) => {\n return {\n onPluginInit({ setSchema }) {\n schemaPromise.then(schemaObj => {\n setSchema(schemaObj);\n });\n },\n };\n};\n\nconst makeHandleResult = (errorHandler) => ({ result }) => {\n var _a;\n if ((_a = result.errors) === null || _a === void 0 ? void 0 : _a.length) {\n errorHandler(result.errors);\n }\n};\nconst useErrorHandler = (errorHandler) => ({\n onExecute() {\n const handleResult = makeHandleResult(errorHandler);\n return {\n onExecuteDone(payload) {\n return handleStreamOrSingleExecutionResult(payload, handleResult);\n },\n };\n },\n});\n\nconst useExtendContext = (contextFactory) => ({\n async onContextBuilding({ context, extendContext }) {\n extendContext((await contextFactory(context)));\n },\n});\n\nconst makeHandleResult$1 = (formatter) => ({ result, setResult }) => {\n const modified = formatter(result);\n if (modified !== false) {\n setResult(modified);\n }\n};\nconst usePayloadFormatter = (formatter) => ({\n onExecute() {\n const handleResult = makeHandleResult$1(formatter);\n return {\n onExecuteDone(payload) {\n return handleStreamOrSingleExecutionResult(payload, handleResult);\n },\n };\n },\n});\n\nclass EnvelopError extends GraphQLError {\n constructor(message, extensions) {\n super(message, undefined, undefined, undefined, undefined, undefined, extensions);\n }\n}\nconst formatError = err => {\n if (err.originalError && err.originalError instanceof EnvelopError === false) {\n return new GraphQLError('Unexpected error.', err.nodes, err.source, err.positions, err.path, undefined);\n }\n return err;\n};\nconst makeHandleResult$2 = (format) => ({ result, setResult }) => {\n if (result.errors != null) {\n setResult({ ...result, errors: result.errors.map(error => format(error)) });\n }\n};\nconst useMaskedErrors = (opts) => {\n var _a;\n const format = (_a = opts === null || opts === void 0 ? void 0 : opts.formatError) !== null && _a !== void 0 ? _a : formatError;\n const handleResult = makeHandleResult$2(format);\n return {\n onExecute() {\n return {\n onExecuteDone(payload) {\n return handleStreamOrSingleExecutionResult(payload, handleResult);\n },\n };\n },\n };\n};\n\nexport { EnvelopError, envelop, envelopIsIntrospectionSymbol, finalAsyncIterator, formatError, isIntrospectionDocument, isIntrospectionOperation, isIntrospectionOperationString, isOperationDefinition, makeExecute, makeSubscribe, mapAsyncIterator, useAsyncSchema, useEnvelop, useErrorHandler, useExtendContext, useLazyLoadedSchema, useLogger, useMaskedErrors, usePayloadFormatter, useSchema, useTiming };\n//# sourceMappingURL=index.mjs.map\n","import { createSourceEventStream } from 'graphql';\nimport { makeSubscribe } from '@envelop/core';\nimport { isAsyncIterable } from '@envelop/types';\nimport mapAsyncIterator from 'graphql/subscription/mapAsyncIterator';\n/**\n * This is a almost identical port from graphql-js subscribe.\n * The only difference is that a custom `execute` function can be injected for customizing the behavior.\n */\nexport const subscribe = (execute) => makeSubscribe(async (args) => {\n const { schema, document, rootValue, contextValue, variableValues, operationName, fieldResolver, subscribeFieldResolver } = args;\n const resultOrStream = await createSourceEventStream(schema, document, rootValue, contextValue, variableValues !== null && variableValues !== void 0 ? variableValues : undefined, operationName, subscribeFieldResolver);\n if (!isAsyncIterable(resultOrStream)) {\n return resultOrStream;\n }\n // For each payload yielded from a subscription, map it over the normal\n // GraphQL `execute` function, with `payload` as the rootValue.\n // This implements the \"MapSourceToResponseEvent\" algorithm described in\n // the GraphQL specification. The `execute` function provides the\n // \"ExecuteSubscriptionEvent\" algorithm, as it is nearly identical to the\n // \"ExecuteQuery\" algorithm, for which `execute` is also used.\n const mapSourceToResponse = async (payload) => execute({\n schema,\n document,\n rootValue: payload,\n contextValue,\n variableValues,\n operationName,\n fieldResolver,\n });\n // Map every source value to a ExecutionResult value as described above.\n return mapAsyncIterator(resultOrStream, mapSourceToResponse);\n});\n//# sourceMappingURL=subscribe.js.map","import { execute } from 'graphql';\nimport { makeExecute } from '@envelop/core';\nimport { subscribe } from './subscribe';\nexport const useExtendContextValuePerExecuteSubscriptionEvent = (createContext) => {\n return {\n onSubscribe({ args, setSubscribeFn }) {\n const executeNew = makeExecute(async (executionArgs) => {\n var _a;\n const context = await createContext({ args });\n try {\n return execute({\n ...executionArgs,\n contextValue: { ...executionArgs.contextValue, ...context === null || context === void 0 ? void 0 : context.contextPartial },\n });\n }\n finally {\n (_a = context === null || context === void 0 ? void 0 : context.onEnd) === null || _a === void 0 ? void 0 : _a.call(context);\n }\n });\n setSubscribeFn(subscribe(executeNew));\n },\n };\n};\n//# sourceMappingURL=index.js.map"],"names":[],"mappings":"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"}
|