{"version":3,"file":"OperationClient.mjs","sources":["../../../../src/plugins/operationModule/OperationClient.ts"],"sourcesContent":["import type { Convergence } from '../../Convergence';\nimport {\n  OperationConstructor,\n  Operation,\n  KeyOfOperation,\n  InputOfOperation,\n  OutputOfOperation,\n  OperationHandler,\n  OperationOptions,\n  OperationScope,\n} from '../../types';\nimport { Disposable, DisposableScope } from '../../utils';\nimport { OperationHandlerMissingError } from '../../errors';\nimport { AsyncCollection, toCollection } from './AsyncCollection';\n\n/**\n * @group Modules\n */\nexport class OperationClient {\n  /**\n   * Maps the name of an operation with its operation handler.\n   * Whilst the types on the Map are relatively loose, we ensure\n   * operations match with their handlers when registering them.\n   */\n  protected operationHandlers: Map<\n    string,\n    OperationHandler<any, any, any, any>\n  > = new Map();\n  constructor(protected readonly convergence: Convergence) {}\n\n  register<\n    T extends Operation<K, I, O>,\n    K extends string = KeyOfOperation<T>,\n    I = InputOfOperation<T>,\n    O = OutputOfOperation<T>\n  >(\n    operationConstructor: OperationConstructor<T, K, I, O>,\n    operationHandler: OperationHandler<T, K, I, O>\n  ) {\n    this.operationHandlers.set(operationConstructor.key, operationHandler);\n    return this;\n  }\n\n  get<\n    T extends Operation<K, I, O>,\n    K extends string = KeyOfOperation<T>,\n    I = InputOfOperation<T>,\n    O = OutputOfOperation<T>\n  >(operation: T): OperationHandler<T, K, I, O> {\n    const operationHandler = this.operationHandlers.get(operation.key) as\n      | OperationHandler<T, K, I, O>\n      | undefined;\n\n    if (!operationHandler) {\n      throw new OperationHandlerMissingError(operation.key);\n    }\n\n    return operationHandler;\n  }\n\n  async execute<\n    T extends Operation<K, I, O>,\n    K extends string = KeyOfOperation<T>,\n    I = InputOfOperation<T>,\n    O = OutputOfOperation<T>\n  >(operation: T, options: OperationOptions = {}): Promise<O> {\n    const operationHandler = this.get<T, K, I, O>(operation);\n    const signal = options.signal ?? new AbortController().signal;\n\n    const process = async (scope: DisposableScope): Promise<O> => {\n      const result = operationHandler.handle(\n        operation,\n        this.convergence,\n        this.getOperationScope(options, scope)\n      );\n\n      if (Symbol.asyncIterator in Object(result)) {\n        // throw new TypeError('You cannot call execute ')\n        const values: O[] = [];\n        for await (const value of result as AsyncGenerator<O, void, void>) {\n          values.push(value);\n        }\n        return values as O | Promise<O>;\n      }\n      return (await result) as O | Promise<O>;\n    };\n\n    return new Disposable(signal).run(process);\n  }\n\n  toCollection<\n    T extends Operation<K, I, O>,\n    K extends string = KeyOfOperation<T>,\n    I = InputOfOperation<T>,\n    O = OutputOfOperation<T>\n  >(operation: T, options: OperationOptions = {}): AsyncCollection<O> {\n    const operationHandler = this.get<T, K, I, O>(operation);\n    const signal = options.signal ?? new AbortController().signal;\n\n    const process = (scope: DisposableScope) => {\n      const result = operationHandler.handle(\n        operation,\n        this.convergence,\n        this.getOperationScope(options, scope)\n      );\n\n      if (Symbol.asyncIterator in Object(result)) {\n        const generator = result as AsyncGenerator<O, void, void>;\n        return toCollection<O>(() => generator);\n      }\n      throw new TypeError('toCollection not supported');\n    };\n\n    return new Disposable(signal).runSync(process);\n  }\n\n  protected getOperationScope(\n    options: OperationOptions,\n    scope: DisposableScope\n  ): OperationScope {\n    if (!!options.commitment && !options.confirmOptions) {\n      options.confirmOptions = { commitment: options.commitment };\n    }\n\n    const payer = options.payer ?? this.convergence.rpc().getDefaultFeePayer();\n    return { ...options, ...scope, payer };\n  }\n}\n"],"names":["OperationClient","convergence","_classCallCheck","_defineProperty","Map","_createClass","key","value","register","operationConstructor","operationHandler","operationHandlers","set","get","operation","OperationHandlerMissingError","_execute","_asyncToGenerator","_regeneratorRuntime","mark","_callee2","_options$signal","_this","options","signal","process","_args2","arguments","wrap","_callee2$","_context2","prev","next","length","undefined","AbortController","_ref","_callee","scope","result","values","_iteratorAbruptCompletion","_didIteratorError","_iteratorError","_iterator","_step","_callee$","_context","handle","getOperationScope","Symbol","asyncIterator","Object","_asyncIterator","sent","done","push","t0","finish","abrupt","stop","_x2","apply","Disposable","run","execute","_x","toCollection","_options$signal2","_this2","generator","TypeError","runSync","_options$payer","commitment","confirmOptions","payer","rpc","getDefaultFeePayer","_objectSpread"],"mappings":"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"}