export function onTaskDispatched()

in src/v2/providers/https.ts [274:340]


export function onTaskDispatched<Args = any>(
  handler: (request: TaskRequest<Args>) => void | Promise<void>
): TaskQueueFunction<Args>;

/** Handle a request sent to a Cloud Tasks queue. */
export function onTaskDispatched<Args = any>(
  options: TaskQueueOptions,
  handler: (request: TaskRequest<Args>) => void | Promise<void>
): TaskQueueFunction<Args>;

export function onTaskDispatched<Args = any>(
  optsOrHandler:
    | TaskQueueOptions
    | ((request: TaskRequest<Args>) => void | Promise<void>),
  handler?: (request: TaskRequest<Args>) => void | Promise<void>
): TaskQueueFunction<Args> {
  let opts: TaskQueueOptions;
  if (arguments.length == 1) {
    opts = {};
    handler = optsOrHandler as (
      request: TaskRequest<Args>
    ) => void | Promise<void>;
  } else {
    opts = optsOrHandler as TaskQueueOptions;
  }

  // onEnqueueHandler sniffs the function length to determine which API to present.
  // fix the length to prevent api versions from being mismatched.
  const fixedLen = (req: TaskRequest<Args>) => handler(req);
  const func: any = onDispatchHandler(fixedLen);

  Object.defineProperty(func, '__trigger', {
    get: () => {
      const baseOpts = options.optionsToTriggerAnnotations(
        options.getGlobalOptions()
      );
      // global options calls region a scalar and https allows it to be an array,
      // but optionsToTriggerAnnotations handles both cases.
      const specificOpts = options.optionsToTriggerAnnotations(
        opts as options.GlobalOptions
      );
      const taskQueueTrigger: Record<string, unknown> = {};
      copyIfPresent(taskQueueTrigger, opts, 'retryConfig', 'rateLimits');
      convertIfPresent(
        taskQueueTrigger,
        opts,
        'invoker',
        'invoker',
        convertInvoker
      );
      return {
        apiVersion: 2,
        platform: 'gcfv2',
        ...baseOpts,
        ...specificOpts,
        labels: {
          ...baseOpts?.labels,
          ...specificOpts?.labels,
        },
        taskQueueTrigger,
      };
    },
  });

  func.run = handler;
  return func;
}