{"version":3,"file":"index.mjs","names":["box","PipelineBuilder","PipelineBuilder"],"sources":["../src/common.ts","../src/parameter/Fetcher.ts","../src/parameter/Producer.ts","../src/pipeline/builder.ts","../src/pipeline/executor.ts","../src/pipeline/Pipeline.ts","../src/typed.ts","../src/index.ts"],"sourcesContent":["import type Pipe from './pipeline/Pipe'\nimport type { InputPipe } from './pipeline/Pipe'\n\nexport const RE_IS_OBJ_STRING = /^{.+}$/\n\nexport class NextCalledTwiceError extends Error {\n  constructor() {\n    super('\"next\" could not be called more than once in a pipe.')\n    this.name = 'NextCalledTwiceError'\n  }\n}\n\nexport class OutputNameError extends Error {\n  constructor(message: string) {\n    super(message)\n    this.name = 'OutputNameError'\n  }\n}\n\nexport class OutputKeyError extends Error {\n  constructor(message: string) {\n    super(message)\n    this.name = 'OutputKeyError'\n  }\n}\n\nexport class AmbiguousContinuationError extends Error {\n  constructor(message: string) {\n    super(message)\n    this.name = 'AmbiguousContinuationError'\n  }\n}\n\nexport class PipelineAbortedError extends Error {\n  readonly reason: unknown\n\n  constructor(reason?: unknown) {\n    super('Pipeline aborted.')\n    this.name = 'AbortError'\n    this.reason = reason\n  }\n}\n\nexport interface AbortSignalLike {\n  readonly aborted: boolean\n  readonly reason?: unknown\n  addEventListener(type: string, listener: () => void): void\n  removeEventListener(type: string, listener: () => void): void\n}\n\nexport interface AsyncPipelineRunner {\n  (...args: unknown[]): Promise<PipeOutput>\n  withSignal(signal: AbortSignalLike, ...args: unknown[]): Promise<PipeOutput>\n}\n\nexport function signalAborted(signal: AbortSignalLike): boolean {\n  try {\n    return signal.aborted === true\n  } catch {\n    return false\n  }\n}\n\nexport function signalReason(signal: AbortSignalLike): unknown {\n  try {\n    return signal.reason\n  } catch {\n    return undefined\n  }\n}\n\nexport type AnyFunction = (...args: never[]) => unknown\n\nexport type PipeResult = unknown\nexport type PipeOutput = PipeResult | PipeResult[] | { [key: string]: PipeResult }\nexport type ResultValue<T> = { value: T; reason?: never }\nexport type ResultReason<R> = { reason: R; value?: never }\nexport type Result<T, R> = ResultValue<T> | ResultReason<R>\n\nexport type PipelineExitVia = 'value' | 'reason' | 'halt' | 'error' | 'abort'\n\nexport interface PipelineExit {\n  via: PipelineExitVia\n  step: number | null\n  name: string | null\n  reason?: PipeResult\n  error: unknown\n}\n\nexport type ExitHandler = (exit: PipelineExit, container: ResultContainer) => void\n\nexport type ReasonHandler = (\n  reason: PipeResult,\n  exit: PipelineExit,\n  container: ResultContainer,\n) => void\n\nexport interface ResultContainer {\n  [key: string]: PipeResult\n}\n\nexport type PipeFunction = string | AnyFunction | Function\n\nexport type PipeName = string\nexport type PipeRename = `${string}:${string}`\nexport type PipeParameter = PipeName | PipeRename | string[]\n\nexport interface FunctionContainer {\n  [key: string]: unknown\n}\n\nexport interface PipelineBase {\n  readonly name: string\n  readonly pipes: Pipe[]\n  readonly inputPipes?: InputPipe[]\n  readonly functions: FunctionContainer\n  readonly errorHandler?: AnyFunction\n  readonly exitHandlers?: ExitHandler[]\n  readonly reasonHandler?: ReasonHandler\n}\n\nfunction objectStringIsNotAllowed(item: string): string {\n  if (RE_IS_OBJ_STRING.test(item)) {\n    throw new Error(`Object string ${item} is not allowed in array argument`)\n  }\n  return item\n}\n\nexport function objectStringToArray(objString: string): string[] {\n  return objString\n    .slice(1, -1)\n    .split(',')\n    .map((key): string => key.trim())\n}\n\nexport function isNonEmptyString<T>(item: T): boolean {\n  return item && 'string' === typeof item\n}\n\nexport function isValidArrayParameters<T>(array: T): boolean {\n  return (\n    Array.isArray(array) &&\n    array.length > 0 &&\n    array.map(objectStringIsNotAllowed).every(isNonEmptyString)\n  )\n}\n\nexport function throwNoErrorHandlerError(error: unknown): never {\n  if (error instanceof Error) {\n    throw error\n  }\n  throw new Error(`Pipeline error: ${String(error)}`)\n}\n\nexport function setEntry(target: Record<string, PipeResult>, key: string, value: PipeResult): void {\n  if (key === '__proto__') {\n    Object.defineProperty(target, key, {\n      value,\n      enumerable: true,\n      writable: true,\n      configurable: true,\n    })\n    return\n  }\n  target[key] = value\n}\n","import {\n  type AnyFunction,\n  type FunctionContainer,\n  isValidArrayParameters,\n  NextCalledTwiceError,\n  objectStringToArray,\n  type PipeOutput,\n  type PipeParameter,\n  type PipeResult,\n  RE_IS_OBJ_STRING,\n} from '../common'\n\nexport interface NextCallback {\n  (error?: Error, value?: PipeResult): void\n\n  disable: () => void\n}\n\nexport interface NextCallbacks {\n  wrappers: NextCallback[]\n  holding: boolean\n  held: { error?: Error; value?: PipeResult }[]\n  onConsumed?: () => void\n\n  onError?: (err: Error) => boolean\n\n  pipeIndex?: number\n}\n\nfunction once(next: AnyFunction, callbacks?: NextCallbacks): NextCallback {\n  let called = false\n  let disabled = false\n\n  let counted = true\n  const consume = (): void => {\n    if (counted) {\n      counted = false\n      callbacks?.onConsumed?.()\n    }\n  }\n\n  let advance: ((error?: Error, value?: PipeResult, fromStep?: number) => void) | null = next as (\n    error?: Error,\n    value?: PipeResult,\n    fromStep?: number,\n  ) => void\n  const wrapped = ((error?: Error, value?: PipeResult): void => {\n    if (disabled) {\n      return\n    }\n    if (called) {\n      const duplicate = new NextCalledTwiceError()\n      if (callbacks?.onError?.(duplicate)) {\n        return\n      }\n      throw duplicate\n    }\n    called = true\n    consume()\n    if (callbacks?.holding) {\n      callbacks.held.push({ error, value })\n      return\n    }\n    advance?.(error, value, callbacks?.pipeIndex)\n  }) as NextCallback\n  wrapped.disable = (): void => {\n    if (disabled) {\n      return\n    }\n    disabled = true\n    consume()\n    advance = null\n  }\n  return wrapped\n}\n\nexport default class Fetcher {\n  private keys: string[] = []\n\n  private _fetch: (\n    container: PipeResult,\n    args: PipeResult[],\n    functions?: FunctionContainer,\n    nextCallbacks?: NextCallbacks,\n  ) => PipeOutput = this.fetchNothing\n\n  private raw: boolean = false\n\n  hasNext: boolean = false\n\n  constructor(parameter: PipeParameter | undefined, flag?: string) {\n    if (flag === 'raw') {\n      this.raw = true\n    }\n\n    if (typeof parameter === 'string') {\n      if (RE_IS_OBJ_STRING.test(parameter)) {\n        this.keys = objectStringToArray(parameter)\n        this._fetch = this.fetchAsObject\n      } else if (this.raw) {\n        this.keys = [parameter]\n        this._fetch = this.fetchSingle\n      }\n\n      parameter = [parameter]\n    }\n\n    if (this._fetch === this.fetchNothing) {\n      if (isValidArrayParameters(parameter)) {\n        this.keys = parameter as string[]\n        this._fetch = this.fetchAsArray\n      } else if (parameter == null) {\n        this.keys = []\n        this._fetch = this.fetchNothing\n      } else {\n        throw new Error(\n          'Pipe input parameter must be non-empty string or array of non-empty strings',\n        )\n      }\n    }\n\n    this.hasNext = this.keys.indexOf('next') > -1\n  }\n\n  fetch(\n    container: PipeResult,\n    args?: PipeResult[],\n    functions?: FunctionContainer,\n    nextCallbacks?: NextCallbacks,\n  ): PipeOutput {\n    return this._fetch(container, args || [], functions, nextCallbacks)\n  }\n\n  private lookup(\n    container: PipeResult,\n    functions: FunctionContainer | undefined,\n    key: string,\n  ): PipeResult {\n    const box = container as { [key: string]: PipeResult }\n    if (Object.prototype.hasOwnProperty.call(box, key)) {\n      return box[key]\n    }\n    if (functions && Object.prototype.hasOwnProperty.call(functions, key)) {\n      return functions[key]\n    }\n    return undefined\n  }\n\n  private value(\n    container: PipeResult,\n    functions: FunctionContainer | undefined,\n    key: string,\n    nextCallbacks?: NextCallbacks,\n  ): PipeResult {\n    if (key !== 'next') {\n      return this.lookup(container, functions, key)\n    }\n    const box = container as { [key: string]: PipeResult }\n    const wrapped = once(box.next as AnyFunction, nextCallbacks)\n    if (nextCallbacks) {\n      nextCallbacks.wrappers.push(wrapped)\n    }\n    return wrapped\n  }\n\n  hasUnresolved(container: PipeResult, functions?: FunctionContainer): boolean {\n    return this.keys.some(\n      (key: string): boolean =>\n        key !== 'next' && this.lookup(container, functions, key) === undefined,\n    )\n  }\n\n  fetchNothing(\n    _container: PipeResult,\n    args: PipeResult[],\n    _functions?: FunctionContainer,\n    _nextCallbacks?: NextCallbacks,\n  ): PipeOutput {\n    return args\n  }\n\n  fetchSingle(\n    container: PipeResult,\n    _args: PipeResult[],\n    functions?: FunctionContainer,\n    _nextCallbacks?: NextCallbacks,\n  ): PipeOutput {\n    return this.lookup(container, functions, this.keys[0])\n  }\n\n  fetchAsArray(\n    container: PipeResult,\n    _args: PipeResult[],\n    functions?: FunctionContainer,\n    nextCallbacks?: NextCallbacks,\n  ): PipeOutput {\n    return this.keys.map(\n      (key: string): PipeResult => this.value(container, functions, key, nextCallbacks),\n    )\n  }\n\n  fetchAsObject(\n    container: PipeResult,\n    _args: PipeResult[],\n    functions?: FunctionContainer,\n    nextCallbacks?: NextCallbacks,\n  ): PipeOutput {\n    const result: Record<string, PipeResult> = {}\n\n    for (const key of this.keys) {\n      if (key === 'next' && result.next !== undefined) {\n        continue\n      }\n      result[key] = this.value(container, functions, key, nextCallbacks)\n    }\n\n    return this.raw ? result : [result]\n  }\n}\n","import {\n  isValidArrayParameters,\n  OutputKeyError,\n  objectStringToArray,\n  type PipeOutput,\n  type PipeParameter,\n  type PipeResult,\n  RE_IS_OBJ_STRING,\n  setEntry,\n} from '../common'\n\nconst RE_RENAME = /^([^:]+):([^:]+)$/\n\nconst SPREAD_ALL = '...'\n\nfunction applyKey(output: Record<string, PipeResult>, key: string, value: PipeResult): void {\n  const rename = RE_RENAME.exec(key)\n  setEntry(output, rename ? rename[2] : key, value)\n}\n\ntype OutputForm = 'single' | 'object-string' | 'array' | 'spread' | 'none'\n\nexport interface ResultOutput {\n  output: PipeOutput\n  terminal: boolean\n}\n\nexport default class Producer {\n  private keys: string[] = []\n\n  private _produce: (result: PipeResult) => PipeOutput\n\n  private inputMode: boolean = false\n\n  private form: OutputForm = 'none'\n\n  private resultName?: string\n\n  constructor(parameter: PipeParameter | undefined, flag?: string) {\n    if (flag === 'input') {\n      this.inputMode = true\n    }\n\n    if (this.inputMode) {\n      if (typeof parameter === 'string') {\n        if (RE_IS_OBJ_STRING.test(parameter)) {\n          this.keys = objectStringToArray(parameter)\n          this._produce = this.produceFromObject\n        } else {\n          this.keys[0] = parameter\n          this._produce = this.produceSingle\n        }\n      } else if (isValidArrayParameters(parameter)) {\n        this.keys = parameter as string[]\n        this._produce = this.produceFromArray\n      } else {\n        throw new Error(\n          'Pipe input parameter must be non-empty string or array of non-empty strings',\n        )\n      }\n      return\n    }\n\n    if (parameter === '') {\n      throw new Error('Pipe output must be a non-empty string or array of non-empty strings')\n    }\n    if (typeof parameter === 'string') {\n      if (parameter.startsWith('result:')) {\n        const name = parameter.slice('result:'.length)\n        if (!name || name.includes(':')) {\n          throw new Error('Result output must use the form \"result:<name>\".')\n        }\n        this.form = 'object-string'\n        this.resultName = name\n        this.keys = [parameter]\n      } else if (RE_IS_OBJ_STRING.test(parameter)) {\n        const keys = objectStringToArray(parameter)\n        if (keys.length === 1 && keys[0] === SPREAD_ALL) {\n          this.form = 'spread'\n        } else {\n          this.form = 'object-string'\n          this.keys = keys\n        }\n      } else if (RE_RENAME.test(parameter)) {\n        this.form = 'object-string'\n        this.keys = [parameter]\n      } else {\n        this.form = 'single'\n        this.keys = [parameter]\n      }\n    } else if (Array.isArray(parameter)) {\n      if (parameter.length > 0 && !isValidArrayParameters(parameter)) {\n        throw new Error('Pipe input/output parameter must be string or array of strings')\n      }\n      this.form = parameter.length > 0 ? 'array' : 'none'\n      this.keys = parameter\n    } else if (typeof parameter === 'undefined') {\n      this.form = 'none'\n      this.keys = []\n    } else {\n      throw new Error('Pipe input/output parameter must be string or array of strings')\n    }\n    if (this.form !== 'spread') {\n      for (const key of this.keys) {\n        const destination = RE_RENAME.exec(key)?.[2] ?? key\n        if (destination === '...' || destination.startsWith('...')) {\n          throw new Error(\n            `Output name \"${key}\" is not valid — the \"...\" marker only works as the entire spec: '{...}' (merge every key), or list names without it.`,\n          )\n        }\n      }\n    }\n    this._produce = this.produceOutput\n  }\n\n  produce(result: PipeResult, errorPath?: boolean): PipeOutput {\n    if (this.inputMode || !errorPath) {\n      return this._produce(result)\n    }\n    return this.produceOutput(result, true)\n  }\n\n  get isResult(): boolean {\n    return this.resultName !== undefined\n  }\n\n  produceResult(result: PipeResult): ResultOutput {\n    if (this.resultName === undefined) {\n      return { output: this.produce(result), terminal: false }\n    }\n\n    if (result !== null && typeof result === 'object' && !Array.isArray(result)) {\n      const box = result as Record<string, PipeResult>\n      const hasValue = Object.prototype.hasOwnProperty.call(box, 'value')\n      const hasReason = Object.prototype.hasOwnProperty.call(box, 'reason')\n      if (hasValue !== hasReason && Object.keys(box).length === 1) {\n        return {\n          output: { [this.resultName]: hasValue ? box.value : box.reason },\n          terminal: hasReason,\n        }\n      }\n      if ('result' in box) {\n        return { output: this.produceOutput(result), terminal: false }\n      }\n    }\n\n    throw new OutputKeyError(\n      `Output spec \"result:${this.resultName}\" requires an object with exactly one of \"value\" or \"reason\".`,\n    )\n  }\n\n  expectValue(): void {\n    if (this.inputMode || this.form === 'single' || this.form === 'none') {\n      return\n    }\n    throw new OutputKeyError(\n      `Output spec ${this.specLabel()} requires the pipe to return a value, but it returned none.`,\n    )\n  }\n\n  private specLabel(): string {\n    if (this.form === 'spread') {\n      return '\"{...}\"'\n    }\n    if (this.form === 'array') {\n      return `[${this.keys.map((key) => `'${key}'`).join(', ')}]`\n    }\n    return `\"{${this.keys.join(', ')}}\"`\n  }\n\n  produceOutput(result: PipeResult, errorPath?: boolean): PipeOutput {\n    if (this.form === 'none') {\n      return {}\n    }\n\n    if (this.form === 'spread') {\n      if (Array.isArray(result) || result === null || typeof result !== 'object') {\n        if (errorPath) {\n          return {}\n        }\n        throw new OutputKeyError(\n          `Output spec \"{...}\" requires a plain-object return, got ${typeof result}.`,\n        )\n      }\n      return result\n    }\n\n    const output: Record<string, PipeResult> = {}\n    const keys = this.keys\n    const isArray = Array.isArray(result)\n    const isObject = !isArray && result !== null && typeof result === 'object'\n\n    if (this.form === 'object-string') {\n      if (!isObject) {\n        if (errorPath) {\n          return {}\n        }\n        throw new OutputKeyError(\n          `Output spec \"{${keys.join(', ')}}\" picks properties, but the pipe returned ${\n            isArray ? 'an array' : typeof result\n          }.`,\n        )\n      }\n      for (const key of keys) {\n        const rename = RE_RENAME.exec(key)\n        const source = rename ? rename[1] : key\n        if (!errorPath && !(source in (result as object))) {\n          throw new OutputKeyError(`Output \"${source}\" is missing from the pipe's returned object.`)\n        }\n        setEntry(output, rename ? rename[2] : key, (result as Record<string, PipeResult>)[source])\n      }\n      return output\n    }\n\n    if (this.form === 'array' && (isArray || isObject)) {\n      if (isArray) {\n        let i = 0\n        for (const key of keys) {\n          if (!errorPath && i >= result.length) {\n            throw new OutputKeyError(\n              `Output \"${key}\" maps position ${i}, but the pipe's array return has ${result.length} element(s).`,\n            )\n          }\n          applyKey(output, key, result[i])\n          i += 1\n        }\n        return output\n      }\n      for (const key of keys) {\n        const rename = RE_RENAME.exec(key)\n        const source = rename ? rename[1] : key\n        if (!errorPath && !(source in (result as object))) {\n          throw new OutputKeyError(`Output \"${source}\" is missing from the pipe's returned object.`)\n        }\n        setEntry(output, rename ? rename[2] : key, (result as Record<string, PipeResult>)[source])\n      }\n      return output\n    }\n\n    if (this.form === 'array') {\n      if (errorPath) {\n        return {}\n      }\n      throw new OutputKeyError(\n        `Output spec [${keys.map((key) => `'${key}'`).join(', ')}] destructures, but the pipe returned ${typeof result}.`,\n      )\n    }\n\n    if (this.form === 'single') {\n      applyKey(output, keys[0], result)\n      return output\n    }\n\n    return {}\n  }\n\n  produceSingle(result: PipeResult): PipeOutput {\n    return { [this.keys[0]]: this.inputSource(result) }\n  }\n\n  produceFromArray(result: PipeResult): PipeOutput {\n    const output: Record<string, PipeResult> = {}\n\n    let i = 0\n    for (const key of this.keys) {\n      setEntry(output, key, (result as PipeResult[])[i])\n      i += 1\n    }\n    return output\n  }\n\n  produceFromObject(result: PipeResult): PipeOutput {\n    const output: Record<string, PipeResult> = {}\n    const source = this.inputSource(result) as Record<string, PipeResult> | null | undefined\n    for (const key of this.keys) {\n      setEntry(output, key, source == null ? undefined : source[key])\n    }\n    return output\n  }\n\n  private inputSource(result: PipeResult): PipeResult {\n    return Array.isArray(result) ? result[0] : result\n  }\n}\n","import {\n  type AnyFunction,\n  type FunctionContainer,\n  isNonEmptyString,\n  type PipeFunction,\n  type PipeParameter,\n  type PipeResult,\n  setEntry,\n} from '../common'\nimport Fetcher from '../parameter/Fetcher'\nimport Producer from '../parameter/Producer'\nimport type Pipe from './Pipe'\nimport type { InputPipe } from './Pipe'\n\nexport enum FN_TYPE {\n  END = 'end',\n  ERROR = 'error',\n  INPUT = 'input',\n}\n\nexport function createPipe(\n  fn: PipeFunction,\n  input?: PipeParameter,\n  output?: PipeParameter,\n): Pipe | never {\n  const pipe: Pipe = {\n    fn: null,\n    fnName: 'unknown',\n    fetcher: new Fetcher(input),\n    producer: new Producer(output),\n    injected: false,\n  }\n\n  if (isNonEmptyString(fn)) {\n    fn = fn as string\n\n    pipe.not = /^!/.test(fn)\n    if (pipe.not) {\n      fn = fn.slice(1)\n    }\n\n    pipe.optional = /^\\?/.test(fn)\n    if (pipe.optional) {\n      fn = fn.slice(1)\n    }\n\n    pipe.fnName = fn\n    pipe.injected = true\n  } else if (typeof fn === 'function') {\n    pipe.fn = fn\n    pipe.fnName = fn.name || 'anonymous'\n  } else {\n    throw new Error(`Unsupported pipe function type \"${typeof fn}\".`)\n  }\n\n  return pipe\n}\n\nexport function createInputPipe(input: PipeParameter): InputPipe {\n  const pipe: InputPipe = {\n    fnName: 'input',\n    producer: new Producer(input, 'input'),\n  }\n\n  return pipe\n}\n\nexport function createErrorPipe(errorFn: PipeFunction, input?: PipeParameter): AnyFunction {\n  const fetcher = new Fetcher(input === undefined ? 'error' : input)\n\n  if (fetcher.hasNext) {\n    throw new Error('\"next\" could not be used in error pipe.')\n  }\n\n  let getErrorFn: (container: PipeResult, functions: FunctionContainer) => unknown\n\n  if (isNonEmptyString(errorFn)) {\n    const fnName: string = errorFn as string\n    getErrorFn = (container: PipeResult, functions: FunctionContainer): AnyFunction => {\n      const box = container as Record<string, unknown>\n      if (Object.prototype.hasOwnProperty.call(box, fnName)) {\n        return box[fnName] as AnyFunction\n      }\n      return functions[fnName] as AnyFunction\n    }\n  } else if (typeof errorFn === 'function') {\n    getErrorFn = (): AnyFunction => errorFn as AnyFunction\n  } else {\n    throw new Error('Error handler must be a string or function.')\n  }\n\n  return function errorHandler(\n    container: PipeResult,\n    functions: FunctionContainer,\n    error?: Error,\n  ): void {\n    const source: Record<string, PipeResult> = {}\n    for (const key of Object.keys(container as Record<string, PipeResult>)) {\n      setEntry(source, key, (container as Record<string, PipeResult>)[key])\n    }\n    source.error = error as PipeResult\n    const inputArgs = fetcher.fetch(source, [], functions)\n    const fn = getErrorFn(container, functions) as AnyFunction | undefined\n    if (typeof fn === 'function') {\n      ;(fn as (...args: PipeResult[]) => unknown)(...(inputArgs as PipeResult[]))\n    } else {\n      throw new Error(`Error handler \"${errorFn}\" is not a function.`)\n    }\n  }\n}\n","import {\n  AmbiguousContinuationError,\n  type AnyFunction,\n  type FunctionContainer,\n  NextCalledTwiceError,\n  OutputKeyError,\n  OutputNameError,\n  PipelineAbortedError,\n  type PipelineBase,\n  type PipelineExit,\n  type PipelineExitVia,\n  type PipeOutput,\n  type PipeResult,\n  type ReasonHandler,\n  type ResultContainer,\n  setEntry,\n  throwNoErrorHandlerError,\n} from '../common'\nimport type { NextCallbacks } from '../parameter/Fetcher'\nimport type Pipe from './Pipe'\n\nfunction holdNextCallbacks(callbacks: NextCallbacks): void {\n  callbacks.holding = true\n}\n\nfunction flushNextCallbacks(\n  state: PipeState,\n  pipeline: PipelineBase,\n  next: Continuation,\n  callbacks: NextCallbacks,\n): void {\n  callbacks.holding = false\n  while (callbacks.held.length > 0) {\n    const held = callbacks.held.shift()\n    if (held) {\n      next(state, pipeline, held.error, held.value, callbacks.pipeIndex)\n    }\n  }\n}\n\nfunction invalidateNextCallbacks(callbacks: NextCallbacks): void {\n  for (const wrapper of callbacks.wrappers) {\n    wrapper.disable()\n  }\n  callbacks.held.length = 0\n}\n\ntype Continuation = (\n  state: PipeState,\n  pipeline: PipelineBase,\n  error?: Error | null,\n  value?: PipeResult,\n  fromStep?: number,\n) => void\n\ntype ErrorHandler = (\n  container: ResultContainer,\n  functions: FunctionContainer,\n  error?: Error,\n) => void\n\nconst RESERVED_OUTPUT_NAMES = ['next']\n\nfunction hasConfiguredDependency(functions: FunctionContainer, key: string): boolean {\n  for (let obj: unknown = functions; obj != null; obj = Object.getPrototypeOf(obj)) {\n    if (obj === Object.prototype) return false\n    if (Object.prototype.hasOwnProperty.call(obj, key)) return true\n  }\n  return false\n}\n\nfunction swallow(value: unknown): void {\n  Promise.resolve(value).then(\n    () => {},\n    () => {},\n  )\n}\n\nfunction ignoreReason(): void {}\n\nfunction isNativePromiseBrand(value: PipeResult): boolean {\n  try {\n    return value instanceof Promise\n  } catch {\n    return false\n  }\n}\n\nfunction observeOriginalRejection(value: PipeResult): boolean {\n  if (!isNativePromiseBrand(value)) {\n    return false\n  }\n  try {\n    Reflect.apply(Promise.prototype.then, value, [swallow, ignoreReason])\n    return true\n  } catch {\n    return false\n  }\n}\n\nfunction mergeIntoContainer(\n  state: PipeState,\n  pipeline: PipelineBase,\n  step: number,\n  fnName: string,\n  produced: PipeOutput,\n  isInvocationInput: boolean,\n): void {\n  for (const key of Object.keys(produced as Record<string, PipeResult>)) {\n    if (RESERVED_OUTPUT_NAMES.includes(key)) {\n      throw new OutputNameError(\n        `Pipeline [${pipeline.name}] step [${step}|${fnName}] : Output name \"${key}\" is reserved.`,\n      )\n    }\n    if (!isInvocationInput && hasConfiguredDependency(pipeline.functions, key)) {\n      throw new OutputNameError(\n        `Pipeline [${pipeline.name}] step [${step}|${fnName}] : Output name \"${key}\" shadows a configured dependency of the same name.`,\n      )\n    }\n    setEntry(state.container, key, (produced as Record<string, PipeResult>)[key])\n  }\n}\n\ninterface QueuedContinuation {\n  error?: Error\n  value?: PipeResult\n  fromStep?: number\n}\n\ninterface PipeState {\n  step: 0\n  container: ResultContainer\n\n  args: PipeResult[]\n\n  activeError: Error | null\n\n  handlingError: boolean\n\n  settled: boolean\n\n  settling: boolean\n\n  pending: number\n\n  halted: boolean\n\n  aborted: boolean\n\n  nextRegistries: NextCallbacks[]\n\n  driving: boolean\n\n  queue: QueuedContinuation[]\n\n  onSettled?: (outcome: { container: ResultContainer; error: Error | null }) => void\n\n  pipeline: PipelineBase\n\n  exit: PipelineExit | null\n\n  exited: boolean\n\n  mergeStep: number | null\n\n  queueCursor: number\n\n  deferredValueSettle: boolean\n\n  observed: boolean\n}\n\nfunction hasExitObservers(pipeline: PipelineBase): boolean {\n  const { exitHandlers, reasonHandler } = pipeline\n  return reasonHandler !== undefined || (exitHandlers !== undefined && exitHandlers.length > 0)\n}\n\nfunction recordExit(\n  state: PipeState,\n  via: PipelineExitVia,\n  step: number | null,\n  name: string | null,\n  reason: PipeResult,\n  error: unknown,\n): void {\n  if (!state.observed) {\n    return\n  }\n  if (state.exit != null) {\n    if (error != null && state.exit.error == null) {\n      state.exit.error = error\n    }\n    return\n  }\n  state.exit = { via, step, name, reason, error }\n}\n\nfunction observableContainer(container: ResultContainer): ResultContainer {\n  const view: ResultContainer = {}\n  for (const key of Object.keys(container)) {\n    if (key !== 'next') {\n      setEntry(view, key, container[key])\n    }\n  }\n  return view\n}\n\nfunction containHandler(invoke: () => unknown): void {\n  let returned: unknown\n  try {\n    returned = invoke()\n  } catch {\n    return\n  }\n  if (returned == null || (typeof returned !== 'object' && typeof returned !== 'function')) {\n    return\n  }\n  try {\n    const thenFn = (returned as { then?: unknown }).then\n    if (typeof thenFn === 'function') {\n      Reflect.apply(thenFn as AnyFunction, returned, [swallow, ignoreReason])\n    }\n  } catch {}\n}\n\nexport function dispatchExit(\n  pipeline: PipelineBase,\n  exit: PipelineExit,\n  container: ResultContainer,\n): void {\n  const { reasonHandler, exitHandlers } = pipeline\n  const handlers = exitHandlers && exitHandlers.length > 0 ? exitHandlers : null\n  const callsReason = exit.via === 'reason' && reasonHandler !== undefined\n  if (!handlers && !callsReason) {\n    return\n  }\n  const view = observableContainer(container)\n  if (callsReason) {\n    containHandler((): unknown => (reasonHandler as ReasonHandler)(exit.reason, exit, view))\n  }\n  if (!handlers) {\n    return\n  }\n  for (const handler of handlers) {\n    containHandler((): unknown => handler(exit, view))\n  }\n}\n\nexport function dispatchAbortExit(pipeline: PipelineBase, error: unknown): void {\n  dispatchExit(pipeline, { via: 'abort', step: null, name: null, error }, {})\n}\n\nfunction runExitHandlers(state: PipeState, error: unknown): void {\n  if (!state.observed || state.exited) {\n    return\n  }\n  state.exited = true\n  recordExit(state, error == null ? 'value' : 'error', null, null, undefined, error)\n  dispatchExit(state.pipeline, state.exit as PipelineExit, state.container)\n}\n\nfunction recordFailure(state: PipeState, error: unknown, failedStep?: number): void {\n  const { pipes } = state.pipeline\n  const known = failedStep !== undefined && failedStep >= 0 && failedStep < pipes.length\n  recordExit(\n    state,\n    'error',\n    known ? (failedStep as number) : null,\n    known ? pipes[failedStep as number].fnName : null,\n    undefined,\n    error,\n  )\n}\n\nfunction settle(state: PipeState, error: Error | null, failedStep?: number): void {\n  if (error != null) {\n    recordFailure(state, error, failedStep)\n  } else if (state.observed && state.driving && state.queue.length > state.queueCursor) {\n    state.deferredValueSettle = true\n    return\n  }\n  if (!state.onSettled) {\n    runExitHandlers(state, error)\n    return\n  }\n  if (error == null) {\n    if (state.settled || state.settling) {\n      return\n    }\n    state.settling = true\n    Promise.resolve().then(() => {\n      if (state.settled) {\n        return\n      }\n      state.settled = true\n      runExitHandlers(state, null)\n      state.onSettled?.({ container: state.container, error: null })\n    })\n    return\n  }\n\n  if (state.settled) {\n    return\n  }\n\n  if (state.activeError == null) {\n    state.activeError = error\n  }\n  state.settled = true\n  runExitHandlers(state, error)\n  state.onSettled?.({ container: state.container, error })\n}\n\nfunction cancelRun(state: PipeState, reason: unknown): void {\n  for (const callbacks of state.nextRegistries) {\n    invalidateNextCallbacks(callbacks)\n  }\n  if (state.settled || state.aborted) {\n    return\n  }\n  state.aborted = true\n  const aborted = new PipelineAbortedError(reason)\n  recordExit(state, 'abort', null, null, undefined, aborted)\n  settle(state, aborted)\n}\n\nfunction haltRun(state: PipeState): void {\n  state.halted = true\n  for (const callbacks of state.nextRegistries) {\n    invalidateNextCallbacks(callbacks)\n  }\n}\n\nfunction executePipe(\n  pipe: Pipe,\n  state: PipeState,\n  pipeline: PipelineBase,\n  next: AnyFunction,\n): void {\n  const { fnName } = pipe\n  const { container, args } = state\n  const { functions } = pipeline\n\n  const fn = pipe.injected\n    ? Object.prototype.hasOwnProperty.call(container, fnName)\n      ? container[fnName]\n      : functions[fnName]\n    : pipe.fn\n\n  const nextCallbacks: NextCallbacks = {\n    wrappers: [],\n    holding: false,\n    held: [],\n    onConsumed: (): void => {\n      state.pending -= 1\n    },\n    onError: (err: Error): boolean => {\n      if (!state.onSettled) {\n        return false\n      }\n\n      if (!state.settled) {\n        settle(state, err, nextCallbacks.pipeIndex)\n      }\n      return true\n    },\n    pipeIndex: state.step - 1,\n  }\n\n  state.nextRegistries.push(nextCallbacks)\n  const inputArgs = pipe.fetcher.fetch(container, args, functions, nextCallbacks)\n\n  state.pending += nextCallbacks.wrappers.length\n\n  if (state.aborted) {\n    invalidateNextCallbacks(nextCallbacks)\n    return\n  }\n  const advance = next as unknown as Continuation\n\n  let result: PipeResult\n\n  if (pipe.optional && (fn === undefined || pipe.fetcher.hasUnresolved(container, functions))) {\n    invalidateNextCallbacks(nextCallbacks)\n    advance(state, pipeline, null, undefined, -1)\n    return\n  } else if (typeof fn === 'function') {\n    holdNextCallbacks(nextCallbacks)\n    try {\n      result = fn.apply(0, inputArgs as PipeResult[])\n    } catch (err) {\n      flushNextCallbacks(state, pipeline, advance, nextCallbacks)\n\n      if (\n        err instanceof NextCalledTwiceError ||\n        err instanceof OutputNameError ||\n        err instanceof OutputKeyError ||\n        err instanceof AmbiguousContinuationError\n      ) {\n        throw err\n      }\n\n      if (state.handlingError) {\n        state.handlingError = false\n        throw err\n      }\n\n      advance(state, pipeline, (err || new Error('Pipe threw a falsey value')) as Error)\n      return\n    }\n  } else if (typeof fn === 'boolean') {\n    invalidateNextCallbacks(nextCallbacks)\n    result = fn\n  } else {\n    throw new Error(\n      `Pipeline [${pipeline.name}] step [${state.step}|${\n        pipe.fnName\n      }] : Dependency \"${fnName}\" is not a function or boolean.`,\n    )\n  }\n\n  if (pipe.not && typeof result === 'boolean') {\n    result = !result\n  }\n\n  const isFlowControl = pipe.not === true || typeof fn === 'boolean'\n\n  let thenFn: unknown\n  if (result !== null && (typeof result === 'object' || typeof result === 'function')) {\n    try {\n      thenFn = (result as { then?: unknown }).then\n    } catch (err) {\n      invalidateNextCallbacks(nextCallbacks)\n\n      observeOriginalRejection(result)\n\n      const failure = (err || new Error('Pipe promise rejected with a falsey value')) as Error\n      Promise.reject(failure).catch((reason: Error): void => {\n        advance(state, pipeline, reason)\n      })\n      return\n    }\n  }\n  const thenable = typeof thenFn === 'function'\n\n  if (pipe.fetcher.hasNext && thenable) {\n    invalidateNextCallbacks(nextCallbacks)\n    Promise.resolve().then(() => {\n      observeOriginalRejection(result)\n      try {\n        Reflect.apply(thenFn as AnyFunction, result, [swallow, ignoreReason])\n      } catch {}\n    })\n    throw new AmbiguousContinuationError(\n      `Pipeline [${pipeline.name}] step [${state.step}|${pipe.fnName}] : Pipe declares \"next\" as an input and returned a thenable — use one continuation channel, not both.`,\n    )\n  }\n\n  if (pipe.fetcher.hasNext === false && thenable) {\n    const pipeIndex = state.step - 1\n\n    state.pending += 1\n    const onFulfilled = (value: PipeResult): void => {\n      state.pending -= 1\n\n      if (state.activeError != null || state.halted || state.aborted) {\n        if (state.halted && !state.aborted && state.pending === 0) {\n          settle(state, null)\n        }\n        return\n      }\n\n      let resolved = value\n      if (pipe.not && typeof resolved === 'boolean') {\n        resolved = !resolved\n      }\n      if (isFlowControl && resolved === false) {\n        recordExit(state, 'halt', pipeIndex, pipe.fnName, undefined, null)\n        state.halted = true\n        if (state.pending === 0) {\n          settle(state, null)\n        }\n        return\n      }\n      if (resolved == null) {\n        try {\n          pipe.producer.expectValue()\n        } catch (err) {\n          if (state.onSettled) {\n            if (!state.settled) {\n              settle(state, err as Error, pipeIndex)\n              return\n            }\n            throw err\n          }\n          settle(state, err as Error, pipeIndex)\n          throw err\n        }\n      }\n      advance(state, pipeline, null, resolved, pipeIndex)\n    }\n    const onRejected = (reason: unknown): void => {\n      state.pending -= 1\n      if (state.activeError != null || state.halted || state.aborted) {\n        if (state.halted && !state.aborted && state.pending === 0) {\n          settle(state, null)\n        }\n        return\n      }\n\n      advance(\n        state,\n        pipeline,\n        (reason || new Error('Pipe promise rejected with a falsey value')) as Error,\n        undefined,\n        pipeIndex,\n      )\n    }\n\n    if (thenFn === Promise.prototype.then) {\n      try {\n        Reflect.apply(thenFn as AnyFunction, result, [onFulfilled, onRejected])\n      } catch (err) {\n        Promise.reject(err).catch(onRejected)\n        observeOriginalRejection(result)\n      }\n      return\n    }\n\n    Promise.resolve(result).then(onFulfilled, onRejected)\n    observeOriginalRejection(result)\n    return\n  }\n\n  flushNextCallbacks(state, pipeline, advance, nextCallbacks)\n\n  const ownsContinuation = pipe.fetcher.hasNext && typeof fn !== 'boolean'\n  if (!ownsContinuation && !(isFlowControl && result === false)) {\n    if (result == null) {\n      pipe.producer.expectValue()\n    }\n    advance(state, pipeline, null, result)\n  } else if (!ownsContinuation) {\n    recordExit(state, 'halt', state.step - 1, pipe.fnName, undefined, null)\n    state.halted = true\n    if (state.pending === 0) {\n      settle(state, null)\n    }\n  }\n}\n\nfunction next(\n  state: PipeState,\n  pipeline: PipelineBase,\n  error?: Error,\n  value?: PipeResult,\n  fromStep?: number,\n): void {\n  if (state.settled) {\n    return\n  }\n\n  if (state.driving) {\n    state.queue.push({ error, value, fromStep })\n    return\n  }\n\n  state.driving = true\n  try {\n    let cursor = 0\n    for (;;) {\n      state.queueCursor = cursor\n      try {\n        continuePipeline(state, pipeline, error, value, fromStep)\n      } catch (err) {\n        const failedStep = state.mergeStep === null ? state.step - 1 : state.mergeStep\n        if (!state.onSettled) {\n          settle(\n            state,\n            (err || new Error('Pipe continuation threw a falsey value')) as Error,\n            failedStep,\n          )\n          throw err\n        }\n        if (!state.settled) {\n          settle(\n            state,\n            (err || new Error('Pipe continuation threw a falsey value')) as Error,\n            state.mergeStep === null ? state.step - 1 : state.mergeStep,\n          )\n        }\n      }\n      if (state.settled || cursor >= state.queue.length) {\n        break\n      }\n      const item = state.queue[cursor]\n      cursor += 1\n      error = item.error\n      value = item.value\n      fromStep = item.fromStep\n    }\n    state.queue.length = 0\n    state.queueCursor = 0\n    if (state.deferredValueSettle) {\n      state.deferredValueSettle = false\n      settle(state, null)\n    }\n  } finally {\n    state.driving = false\n  }\n}\n\nfunction continuePipeline(\n  state: PipeState,\n  pipeline: PipelineBase,\n  error?: Error,\n  value?: PipeResult,\n  fromStep?: number,\n): void {\n  const { pipes, errorHandler } = pipeline\n  const { step } = state\n\n  if (state.halted || state.aborted) {\n    if (state.halted && !state.aborted && state.pending === 0) {\n      settle(state, null)\n    }\n    return\n  }\n\n  if (value != null) {\n    const producerIndex = fromStep === undefined ? step - 1 : fromStep\n    state.mergeStep = producerIndex\n    const producer = pipes[producerIndex].producer\n    const result =\n      producer.isResult && error == null\n        ? producer.produceResult(value)\n        : { output: producer.produce(value, error != null), terminal: false }\n    mergeIntoContainer(\n      state,\n      pipeline,\n      producerIndex,\n      pipes[producerIndex].fnName,\n      result.output,\n      false,\n    )\n    state.mergeStep = null\n    if (result.terminal) {\n      recordExit(\n        state,\n        'reason',\n        producerIndex,\n        pipes[producerIndex].fnName,\n        Object.values(result.output as ResultContainer)[0],\n        null,\n      )\n      haltRun(state)\n    }\n  }\n\n  if (error != null) {\n    const failedIndex = fromStep === undefined ? step - 1 : fromStep\n    const failed = failedIndex >= 0 && failedIndex < pipes.length ? pipes[failedIndex] : null\n    recordExit(\n      state,\n      'error',\n      failed ? failedIndex : null,\n      failed ? failed.fnName : null,\n      undefined,\n      error,\n    )\n    state.activeError = error\n  }\n\n  if (state.activeError == null) {\n    state.handlingError = false\n    if (state.aborted) {\n      return\n    }\n    if (state.halted) {\n      if (state.pending === 0) {\n        settle(state, null)\n      }\n      return\n    }\n    if (state.pending > 0) {\n      return\n    }\n    if (pipes.length > state.step) {\n      executePipe(pipes[state.step++], state, pipeline, next)\n    } else {\n      settle(state, null)\n    }\n    return\n  }\n\n  state.handlingError = true\n\n  settle(state, state.activeError)\n  if (errorHandler) {\n    ;(errorHandler as ErrorHandler)(state.container, pipeline.functions, state.activeError)\n  } else if (!state.onSettled) {\n    throwNoErrorHandlerError(state.activeError)\n  }\n}\n\nexport function runPipeline(\n  args: PipeResult,\n  pipeline: PipelineBase,\n  onSettled?: (outcome: { container: ResultContainer; error: Error | null }) => void,\n  registerCancel?: (cancel: (reason: unknown) => void) => void,\n): ResultContainer {\n  const state: PipeState = {\n    step: 0,\n\n    container: {\n      next: (error?: Error, value?: PipeResult, fromStep?: number): void => {\n        next(state, pipeline, error, value, fromStep)\n      },\n    },\n    args: Array.isArray(args) ? args : args === undefined ? [] : [args],\n    activeError: null,\n    handlingError: false,\n    settled: false,\n    settling: false,\n    pending: 0,\n    halted: false,\n    aborted: false,\n    nextRegistries: [],\n    driving: false,\n    queue: [],\n    onSettled,\n    pipeline,\n    exit: null,\n    exited: false,\n    mergeStep: null,\n    queueCursor: 0,\n    deferredValueSettle: false,\n    observed: hasExitObservers(pipeline),\n  }\n\n  registerCancel?.((reason: unknown): void => {\n    cancelRun(state, reason)\n  })\n\n  try {\n    for (const inputPipe of pipeline.inputPipes || []) {\n      mergeIntoContainer(\n        state,\n        pipeline,\n        0,\n        inputPipe.fnName,\n        inputPipe.producer.produce(state.args),\n        true,\n      )\n    }\n\n    next(state, pipeline)\n  } catch (err) {\n    const thrown = (err || new Error('Pipeline threw a falsey value')) as Error\n    const failedIndex = state.step - 1\n    const failed =\n      failedIndex >= 0 && failedIndex < pipeline.pipes.length ? pipeline.pipes[failedIndex] : null\n    recordExit(\n      state,\n      'error',\n      failed ? failedIndex : null,\n      failed ? failed.fnName : null,\n      undefined,\n      thrown,\n    )\n    runExitHandlers(state, thrown)\n    throw err\n  }\n\n  return state.container\n}\n","import {\n  type AbortSignalLike,\n  type AnyFunction,\n  type AsyncPipelineRunner,\n  type ExitHandler,\n  type FunctionContainer,\n  type PipeFunction,\n  PipelineAbortedError,\n  type PipelineBase,\n  type PipeOutput,\n  type PipeParameter,\n  type PipeResult,\n  type ReasonHandler,\n  signalAborted,\n  signalReason,\n} from '../common'\nimport Fetcher from '../parameter/Fetcher'\nimport { createErrorPipe, createInputPipe, createPipe } from './builder'\nimport { dispatchAbortExit, runPipeline } from './executor'\nimport type Pipe from './Pipe'\nimport type { InputPipe } from './Pipe'\n\nexport default class Pipeline implements PipelineBase {\n  name: string\n\n  pipes: Pipe[] = []\n\n  functions: FunctionContainer\n\n  inputPipes: InputPipe[] = []\n\n  errorHandler?: AnyFunction\n\n  exitHandlers: ExitHandler[] = []\n\n  reasonHandler?: ReasonHandler\n\n  constructor(name: string, functions?: FunctionContainer) {\n    this.name = name\n\n    this.functions = functions || {}\n  }\n\n  input(input?: PipeParameter): Pipeline {\n    if (this.pipes.length > 0) {\n      throw new Error('Input pipe must be the first pipe in the pipeline.')\n    }\n    if (input == null || input === '' || (Array.isArray(input) && input.length === 0)) {\n      throw new Error('Input pipe requires a non-empty string or array of non-empty strings.')\n    }\n\n    this.inputPipes.push(createInputPipe(input))\n    return this\n  }\n\n  pipe(fn: PipeFunction, input?: PipeParameter, output?: PipeParameter): Pipeline {\n    if (this.errorHandler) {\n      throw new Error('Adding new pipe after error pipe is not allowed.')\n    }\n\n    if (fn === 'input') {\n      return this.input(input)\n    }\n    if (fn === 'error') {\n      return this.error(input as PipeFunction, output)\n    }\n    const pipe = createPipe(fn, input, output)\n    this.pipes.push(pipe)\n    return this\n  }\n\n  error(fn: PipeFunction, input?: PipeParameter): Pipeline {\n    if (this.errorHandler) {\n      throw new Error('Each pipeline could only have one error handler.')\n    }\n    this.errorHandler = createErrorPipe(fn, input)\n    return this\n  }\n\n  onExit(handler: ExitHandler): Pipeline {\n    if (typeof handler !== 'function') {\n      throw new Error('Exit handler must be a function.')\n    }\n    this.exitHandlers.push(handler)\n    return this\n  }\n\n  reason(handler: ReasonHandler): Pipeline {\n    if (this.reasonHandler) {\n      throw new Error('Each pipeline could only have one reason handler.')\n    }\n    if (typeof handler !== 'function') {\n      throw new Error('Reason handler must be a function.')\n    }\n    this.reasonHandler = handler\n    return this\n  }\n\n  end(output?: PipeParameter): (...args: unknown[]) => PipeOutput {\n    const fetcher = new Fetcher(output, 'raw')\n\n    const pipeline: PipelineBase = {\n      name: this.name,\n      pipes: [...this.pipes],\n      inputPipes: [...this.inputPipes],\n      functions: this.functions,\n      errorHandler: this.errorHandler,\n      exitHandlers: [...this.exitHandlers],\n      reasonHandler: this.reasonHandler,\n    }\n\n    if (output === undefined) {\n      return function (): undefined {\n        runPipeline(Array.prototype.slice.apply(arguments), pipeline)\n      }\n    }\n\n    return function (): PipeOutput {\n      const args: PipeResult = Array.prototype.slice.apply(arguments)\n\n      const container = runPipeline(args, pipeline)\n      return fetcher.fetch(container, [], pipeline.functions)\n    }\n  }\n\n  endAsync(output?: PipeParameter): AsyncPipelineRunner {\n    const fetcher = output === undefined ? null : new Fetcher(output, 'raw')\n\n    const pipeline: PipelineBase = {\n      name: this.name,\n      pipes: [...this.pipes],\n      inputPipes: [...this.inputPipes],\n      functions: this.functions,\n      errorHandler: this.errorHandler,\n      exitHandlers: [...this.exitHandlers],\n      reasonHandler: this.reasonHandler,\n    }\n\n    const runPipelinePromise = (\n      args: PipeResult,\n      onRegisterCancel?: (cancel: (reason: unknown) => void) => void,\n    ): Promise<PipeOutput> =>\n      new Promise<PipeOutput>((resolve, reject) => {\n        runPipeline(\n          args,\n          pipeline,\n          (outcome) => {\n            if (outcome.error != null) {\n              reject(outcome.error)\n              return\n            }\n\n            if (fetcher === null) {\n              resolve(undefined as PipeOutput)\n              return\n            }\n            try {\n              resolve(fetcher.fetch(outcome.container, [], pipeline.functions) as PipeOutput)\n            } catch (err) {\n              reject(err as Error)\n            }\n          },\n          onRegisterCancel,\n        )\n      })\n\n    const run = function (): Promise<PipeOutput> {\n      return runPipelinePromise(Array.prototype.slice.apply(arguments))\n    } as AsyncPipelineRunner\n\n    run.withSignal = (signal: AbortSignalLike, ...args: unknown[]): Promise<PipeOutput> => {\n      if (signalAborted(signal)) {\n        const aborted = new PipelineAbortedError(signalReason(signal))\n        dispatchAbortExit(pipeline, aborted)\n        return Promise.reject(aborted)\n      }\n\n      let cancelRun: ((reason: unknown) => void) | undefined\n      const onAbort = (): void => {\n        cancelRun?.(signalReason(signal))\n      }\n\n      try {\n        signal.addEventListener('abort', onAbort)\n      } catch (err) {\n        return Promise.reject(err)\n      }\n\n      return runPipelinePromise(args, (cancel) => {\n        cancelRun = cancel\n        if (signalAborted(signal)) {\n          onAbort()\n        }\n      }).finally(() => {\n        try {\n          signal.removeEventListener('abort', onAbort)\n        } catch {}\n      })\n    }\n\n    return run\n  }\n}\n","import type {\n  AbortSignalLike,\n  ExitHandler,\n  FunctionContainer,\n  PipelineExit,\n  Result,\n  ResultContainer,\n} from './common'\nimport PipelineBuilder from './pipeline/Pipeline'\n\nexport interface TypedState {\n  deps: object\n  args: readonly unknown[]\n  ctx: object\n  gates: object\n  skipped: string\n  late: string\n  stopped: boolean\n  async: boolean\n  started: boolean\n  handled: boolean\n  observed: boolean\n}\n\nexport interface TypedError<Message extends string> {\n  readonly problem: Message\n}\n\ntype Empty = Record<never, never>\n\ntype Flat<T> = { [K in keyof T]: T[K] }\n\ntype Merge<A, B> = Flat<Omit<A, keyof B> & B>\n\ntype Keys<T> = keyof T & string\n\ntype Either<A extends boolean, B extends boolean> = A extends true ? true : B\n\ntype IsAny<T> = 0 extends 1 & T ? true : false\n\ntype IsAsync<R> =\n  IsAny<R> extends true ? false : [Extract<R, PromiseLike<unknown>>] extends [never] ? false : true\n\ntype RequiredKeys<V> = {\n  [K in keyof V]-?: Record<never, never> extends Pick<V, K> ? never : K\n}[keyof V]\n\ntype IsOpen<D> = string extends Keys<D> ? true : false\n\ntype ReservedOutput<S extends TypedState> =\n  | 'next'\n  | (IsOpen<S['deps']> extends true ? never : Keys<S['deps']>)\n\ntype Checked<Problem, Ok> = [Problem] extends [never] ? Ok : TypedError<Problem & string>\n\nexport type TypedNext = (error?: unknown, value?: unknown) => void\n\ntype KnownName<S extends TypedState> = Keys<S['ctx']> | Keys<S['deps']>\n\ntype InputName<S extends TypedState> = KnownName<S> | 'next'\n\ntype InputValue<S extends TypedState, K> = K extends 'next'\n  ? TypedNext\n  : K extends Keys<S['ctx']>\n    ? S['ctx'][K] | (K extends S['skipped'] ? undefined : never)\n    : K extends Keys<S['deps']>\n      ? S['deps'][K]\n      : never\n\nexport type InputSpec<S extends TypedState> =\n  | InputName<S>\n  | readonly InputName<S>[]\n  | null\n  | undefined\n\ntype InputTuple<S extends TypedState, K> = K extends readonly string[]\n  ? [...{ [I in keyof K]: InputValue<S, K[I]> }]\n  : K extends string\n    ? [InputValue<S, K>]\n    : [...S['args']]\n\ntype UsesNext<K> = K extends readonly string[]\n  ? 'next' extends K[number]\n    ? true\n    : false\n  : K extends 'next'\n    ? true\n    : false\n\ntype Produced<K, R> = UsesNext<K> extends true ? unknown : R\n\nexport type OutputSpec = string | readonly string[] | undefined\n\ntype ValueArm<R> = Extract<R, { value: unknown }>['value']\n\ntype ReasonArm<R> = Extract<R, { reason: unknown }>['reason']\n\ntype Positional<O extends readonly string[], V extends readonly unknown[]> = {\n  [I in keyof O as I extends `${number}`\n    ? O[I] extends string\n      ? O[I]\n      : never\n    : never]: I extends keyof V ? V[I] : V[number]\n}\n\ntype FitsTuple<\n  O extends readonly string[],\n  V extends readonly unknown[],\n> = number extends V['length'] ? true : O['length'] extends Partial<V>['length'] ? true : false\n\ntype BuiltIn =\n  | Date\n  | RegExp\n  | Error\n  | Promise<unknown>\n  | Map<unknown, unknown>\n  | Set<unknown>\n  | WeakMap<object, unknown>\n  | WeakSet<object>\n  | ArrayBuffer\n\ntype AllMethods<V> = [Keys<V>] extends [never]\n  ? true\n  : V[Keys<V>] extends AnyCallable\n    ? true\n    : false\n\ntype IsPlainObject<V> = V extends AnyCallable\n  ? false\n  : V extends readonly unknown[]\n    ? false\n    : V extends BuiltIn\n      ? false\n      : V extends object\n        ? AllMethods<V> extends true\n          ? false\n          : true\n        : false\n\ntype IsEmptyArray<K> = K extends readonly [] ? true : false\n\ntype Picked<O extends readonly string[], V> = {\n  [K in O[number]]: K extends keyof V ? V[K] : never\n}\n\ntype Destructured<O extends readonly string[], V> = V extends readonly unknown[]\n  ? Positional<O, V>\n  : Picked<O, V>\n\ntype Bound<O, R> = O extends `result:${infer N}`\n  ? { [P in N]: ValueArm<Awaited<R>> }\n  : O extends '{...}'\n    ? Awaited<R>\n    : O extends readonly string[]\n      ? Destructured<O, Awaited<R>>\n      : O extends string\n        ? { [P in O]: Awaited<R> }\n        : Empty\n\ntype GateBindings<S extends TypedState, O, R> = O extends `result:${infer N}`\n  ? Merge<\n      S['gates'],\n      {\n        [P in N]: (N extends Keys<S['gates']> ? S['gates'][N] : never) | ReasonArm<Awaited<R>>\n      }\n    >\n  : S['gates']\n\ntype IsGate<O> = O extends `result:${string}` ? true : false\n\ninterface Change {\n  add: unknown\n  optional: boolean\n  stop: boolean\n  async: boolean\n  gates: object\n  start: boolean\n}\n\ntype Bind<S extends TypedState, C extends Change> = {\n  deps: S['deps']\n  args: S['args']\n  ctx: Merge<S['ctx'], C['add']>\n  gates: C['gates']\n  skipped:\n    | Exclude<S['skipped'], Keys<C['add']>>\n    | (C['optional'] extends true ? Keys<C['add']> : never)\n  late: S['late'] | (S['stopped'] extends true ? Keys<C['add']> : never)\n  stopped: Either<S['stopped'], C['stop']>\n  async: Either<S['async'], C['async']>\n  started: Either<S['started'], C['start']>\n  handled: S['handled']\n  observed: S['observed']\n}\n\ntype SetFlag<S extends TypedState, F extends 'handled' | 'observed'> = Flat<\n  Omit<S, F> & { [P in F]: true }\n>\n\ntype GateNeedsResult = 'A \"result:<name>\" output requires the pipe to return { value } | { reason }'\n\ntype SpreadNeedsObject = 'A \"{...}\" output requires the pipe to return a plain object'\n\ntype NotTypedYet =\n  'Brace picks and src:dst renames are not typed yet; use an array output or a single name'\n\ntype ReservedName = 'This output name is reserved or shadows a configured dependency'\n\ntype DestructureMismatch =\n  'An array output requires the pipe to return an array or an object with every named key'\n\ntype DestructureTooLong = 'An array output names more positions than the returned tuple has'\n\ntype EmptyNames = 'An input, output, or end spec cannot be an empty array'\n\ntype EmptyName = 'A name cannot be an empty string'\n\ntype BraceInArray = 'A brace spec is not allowed inside an array'\n\ntype MalformedResultName = 'A \"result:<name>\" output needs a non-empty name without \":\"'\n\ntype HandlerNotCallable = 'This error handler dependency is not a function'\n\ntype InterceptedName =\n  'The names \"input\" and \"error\" are dispatched to .input() and .error() by the runtime; rename the dependency'\n\ntype OptionalKey =\n  'An array output names an optional property; the runtime throws when it is absent'\n\ntype OutputProblem<S extends TypedState, O, R> = O extends undefined\n  ? never\n  : O extends ''\n    ? EmptyName\n    : O extends `result:${infer N}`\n      ? N extends '' | `${string}:${string}`\n        ? MalformedResultName\n        : N extends ReservedOutput<S>\n          ? ReservedName\n          : IsAny<Awaited<R>> extends true\n            ? never\n            : Awaited<R> extends Result<unknown, unknown>\n              ? never\n              : GateNeedsResult\n      : O extends '{...}'\n        ? IsAny<Awaited<R>> extends true\n          ? never\n          : IsPlainObject<Awaited<R>> extends true\n            ? [Keys<Awaited<R>> & ReservedOutput<S>] extends [never]\n              ? never\n              : ReservedName\n            : SpreadNeedsObject\n        : O extends `{${string}}` | `${string}:${string}`\n          ? NotTypedYet\n          : O extends readonly string[]\n            ? IsEmptyArray<O> extends true\n              ? EmptyNames\n              : '' extends O[number]\n                ? EmptyName\n                : [Extract<O[number], `{${string}}`>] extends [never]\n                  ? [Extract<O[number], `${string}:${string}`>] extends [never]\n                    ? [O[number] & ReservedOutput<S>] extends [never]\n                      ? IsAny<Awaited<R>> extends true\n                        ? never\n                        : Awaited<R> extends readonly unknown[]\n                          ? FitsTuple<O, Awaited<R>> extends true\n                            ? never\n                            : DestructureTooLong\n                          : O[number] extends keyof Awaited<R>\n                            ? O[number] extends RequiredKeys<Awaited<R>>\n                              ? never\n                              : OptionalKey\n                            : DestructureMismatch\n                      : ReservedName\n                    : NotTypedYet\n                  : BraceInArray\n            : O extends ReservedOutput<S>\n              ? ReservedName\n              : never\n\ntype AfterFunctionPipe<S extends TypedState, K, O, R> = Bind<\n  S,\n  {\n    add: Bound<O, Produced<K, R>>\n    optional: false\n    stop: IsGate<O>\n    async: Either<IsAsync<R>, UsesNext<K>>\n    gates: GateBindings<S, O, Produced<K, R>>\n    start: true\n  }\n>\n\ntype Sigils<N> = N extends `!${infer Rest}`\n  ? Rest extends `?${infer Base}`\n    ? { base: Base; not: true; optional: true }\n    : { base: Rest; not: true; optional: false }\n  : N extends `?${infer Base}`\n    ? { base: Base; not: false; optional: true }\n    : { base: N; not: false; optional: false }\n\ntype InjectedSpec<S extends TypedState> =\n  | KnownName<S>\n  | `!${KnownName<S>}`\n  | `?${string}`\n  | `!?${string}`\n\ntype Resolved<S extends TypedState, N> = InputValue<S, Sigils<N>['base']>\n\ntype AnyCallable = (...args: never[]) => unknown\n\ntype Callable<F> = [F] extends [never]\n  ? (...args: unknown[]) => unknown\n  : F extends AnyCallable\n    ? F\n    : never\n\ntype IsFlowControl<F, Not extends boolean> = Not extends true\n  ? true\n  : [F] extends [never]\n    ? false\n    : [F] extends [boolean]\n      ? true\n      : false\n\ntype InjectedReturn<S extends TypedState, N> = ReturnType<Callable<Resolved<S, N>>>\n\ntype InjectedResult<S extends TypedState, N, K> = Produced<K, InjectedReturn<S, N>>\n\ntype InjectedInputMismatch =\n  'The declared inputs do not match the parameters of the injected function'\n\ntype InjectedNotCallable = 'This dependency is neither a function nor a boolean'\n\ntype InjectedKindProblem<S extends TypedState, N> = N extends 'input' | 'error'\n  ? InterceptedName\n  : [Resolved<S, N>] extends [never]\n    ? never\n    : [Resolved<S, N>] extends [boolean]\n      ? never\n      : Resolved<S, N> extends AnyCallable\n        ? never\n        : InjectedNotCallable\n\ntype EmptyNamesProblem<K> = IsEmptyArray<K> extends true ? EmptyNames : never\n\ntype AmbiguousContinuation =\n  'A pipe that declares \"next\" must not return a thenable; use one continuation channel'\n\ntype ContinuationProblem<K, R> =\n  UsesNext<K> extends true ? (IsAsync<R> extends true ? AmbiguousContinuation : never) : never\n\ntype InjectedInputProblem<S extends TypedState, N, K> =\n  IsFlowControl<Resolved<S, N>, Sigils<N>['not']> extends true\n    ? never\n    : [InputTuple<S, K>] extends [Parameters<Callable<Resolved<S, N>>>]\n      ? never\n      : InjectedInputMismatch\n\ntype AfterInjectedPipe<S extends TypedState, N, K, O> =\n  IsFlowControl<Resolved<S, N>, Sigils<N>['not']> extends true\n    ? Bind<\n        S,\n        {\n          add: Empty\n          optional: false\n          stop: true\n          async: IsAsync<InjectedReturn<S, N>>\n          gates: S['gates']\n          start: true\n        }\n      >\n    : Bind<\n        S,\n        {\n          add: Bound<O, InjectedResult<S, N, K>>\n          optional: Sigils<N>['optional']\n          stop: IsGate<O>\n          async: Either<IsAsync<InjectedReturn<S, N>>, UsesNext<K>>\n          gates: GateBindings<S, O, InjectedResult<S, N, K>>\n          start: true\n        }\n      >\n\ntype ArgAt<Args extends readonly unknown[], I> = I extends keyof Args\n  ? Args[I]\n  : number extends Args['length']\n    ? Args[number] | undefined\n    : undefined\n\ntype InputBindings<S extends TypedState, K> = K extends readonly string[]\n  ? {\n      [I in keyof K as I extends `${number}` ? (K[I] extends string ? K[I] : never) : never]: ArgAt<\n        S['args'],\n        I\n      >\n    }\n  : K extends string\n    ? { [P in K]: ArgAt<S['args'], '0'> }\n    : Empty\n\ntype InputNamesProblem<K> = K extends ''\n  ? EmptyName\n  : K extends `{${string}}`\n    ? NotTypedYet\n    : K extends 'next'\n      ? ReservedName\n      : K extends readonly string[]\n        ? IsEmptyArray<K> extends true\n          ? EmptyNames\n          : '' extends K[number]\n            ? EmptyName\n            : [Extract<K[number], `{${string}}`>] extends [never]\n              ? 'next' extends K[number]\n                ? ReservedName\n                : never\n              : BraceInArray\n        : never\n\ntype AfterInput<S extends TypedState, K> = Bind<\n  S,\n  {\n    add: InputBindings<S, K>\n    optional: false\n    stop: false\n    async: false\n    gates: S['gates']\n    start: false\n  }\n>\n\ntype ErrorInputName<S extends TypedState> = 'error' | KnownName<S>\n\ntype ErrorValue<S extends TypedState, K> = K extends 'error'\n  ? unknown\n  : K extends Keys<S['ctx']>\n    ? S['ctx'][K] | undefined\n    : K extends Keys<S['deps']>\n      ? S['deps'][K]\n      : never\n\ntype ErrorTuple<S extends TypedState, K> = K extends readonly string[]\n  ? [...{ [I in keyof K]: ErrorValue<S, K[I]> }]\n  : K extends string\n    ? [ErrorValue<S, K>]\n    : [unknown]\n\ntype Reasons<S extends TypedState> = S['gates'][Keys<S['gates']>]\n\ntype EndSpec<S extends TypedState> = KnownName<S> | readonly KnownName<S>[]\n\ntype EndSingle<S extends TypedState, N> =\n  N extends Keys<S['ctx']>\n    ?\n        | S['ctx'][N]\n        | (N extends Keys<S['gates']> ? S['gates'][N] : never)\n        | (N extends S['skipped'] | S['late'] ? undefined : never)\n    : N extends Keys<S['deps']>\n      ? S['deps'][N]\n      : never\n\ntype EndValue<S extends TypedState, O> = O extends readonly string[]\n  ? [...{ [I in keyof O]: EndSingle<S, O[I]> }]\n  : EndSingle<S, O>\n\ntype SyncRunner<S extends TypedState, Out> = (...args: [...S['args']]) => Out\n\ntype SyncEndUnavailable = 'This pipeline has an async pipe; use endAsync()'\n\ninterface SyncEnd<S extends TypedState> {\n  (): SyncRunner<S, undefined>\n  <const O extends EndSpec<S>>(\n    output: O,\n  ): Checked<EmptyNamesProblem<O>, SyncRunner<S, EndValue<S, O>>>\n}\n\ninterface SyncEndWhenAsync<S extends TypedState> {\n  (): SyncRunner<S, undefined>\n  (output: SyncEndUnavailable): never\n}\n\nexport interface TypedAsyncRunner<Args extends readonly unknown[], Out> {\n  (...args: [...Args]): Promise<Out>\n  withSignal(signal: AbortSignalLike, ...args: [...Args]): Promise<Out>\n}\n\ntype InputAfterPipe = 'An input pipe must come before the first pipe'\n\ntype PipeAfterError = 'Adding a pipe after the error handler is not allowed'\n\ntype SecondErrorHandler = 'Each pipeline can have only one error handler'\n\ntype SecondReasonHandler = 'Each pipeline can have only one reason handler'\n\ntype InputMethod<S extends TypedState> = <const K extends string | readonly string[]>(\n  names: K,\n) => Checked<InputNamesProblem<K>, TypedPipeline<AfterInput<S, K>>>\n\ninterface PipeMethod<S extends TypedState> {\n  <\n    const N extends InjectedSpec<S>,\n    const K extends InputSpec<S> = undefined,\n    const O extends OutputSpec = undefined,\n  >(\n    name: N,\n    input?: K,\n    output?: O,\n  ): Checked<\n    | InjectedKindProblem<S, N>\n    | EmptyNamesProblem<K>\n    | ContinuationProblem<K, InjectedReturn<S, N>>\n    | InjectedInputProblem<S, N, K>\n    | OutputProblem<S, O, InjectedResult<S, N, K>>,\n    TypedPipeline<AfterInjectedPipe<S, N, K, O>>\n  >\n\n  <R, const K extends InputSpec<S> = undefined, const O extends OutputSpec = undefined>(\n    fn: (...args: InputTuple<S, K>) => R,\n    input?: K,\n    output?: O,\n  ): Checked<\n    EmptyNamesProblem<K> | ContinuationProblem<K, R> | OutputProblem<S, O, Produced<K, R>>,\n    TypedPipeline<AfterFunctionPipe<S, K, O, R>>\n  >\n}\n\ntype ErrorHandlerProblem<S extends TypedState, H, K> = H extends string\n  ? InputValue<S, H> extends AnyCallable\n    ? [ErrorTuple<S, K>] extends [Parameters<InputValue<S, H>>]\n      ? never\n      : InjectedInputMismatch\n    : HandlerNotCallable\n  : never\n\ntype ErrorMethod<S extends TypedState> = <\n  H extends ((...args: ErrorTuple<S, K>) => unknown) | KnownName<S>,\n  const K extends ErrorInputName<S> | readonly ErrorInputName<S>[] = 'error',\n>(\n  handler: H,\n  input?: K,\n) => Checked<\n  EmptyNamesProblem<K> | ErrorHandlerProblem<S, H, K>,\n  TypedPipeline<SetFlag<S, 'handled'>>\n>\n\ntype ReasonMethod<S extends TypedState> = (\n  handler: (reason: Reasons<S>, exit: PipelineExit, container: ResultContainer) => unknown,\n) => TypedPipeline<SetFlag<S, 'observed'>>\n\nexport interface TypedPipeline<S extends TypedState> {\n  readonly input: S['started'] extends true ? (names: InputAfterPipe) => never : InputMethod<S>\n\n  readonly pipe: S['handled'] extends true ? (fn: PipeAfterError) => never : PipeMethod<S>\n\n  readonly error: S['handled'] extends true\n    ? (handler: SecondErrorHandler) => never\n    : ErrorMethod<S>\n\n  readonly reason: S['observed'] extends true\n    ? (handler: SecondReasonHandler) => never\n    : ReasonMethod<S>\n\n  onExit(handler: ExitHandler): TypedPipeline<S>\n\n  readonly end: S['async'] extends true ? SyncEndWhenAsync<S> : SyncEnd<S>\n\n  endAsync(): TypedAsyncRunner<S['args'], undefined>\n  endAsync<const O extends EndSpec<S>>(\n    output: O,\n  ): Checked<EmptyNamesProblem<O>, TypedAsyncRunner<S['args'], EndValue<S, O>>>\n}\n\ntype InitialState<D extends object, Args extends readonly unknown[]> = {\n  deps: D\n  args: Args\n  ctx: Empty\n  gates: Empty\n  skipped: never\n  late: never\n  stopped: false\n  async: false\n  started: false\n  handled: false\n  observed: false\n}\n\nexport type TypedFactory<D extends object> = <Args extends readonly unknown[] = unknown[]>(\n  name: string,\n) => TypedPipeline<InitialState<D, Args>>\n\nexport function typed<D extends object = Empty>(deps?: D): TypedFactory<D> {\n  const factory = (name: string): PipelineBuilder =>\n    new PipelineBuilder(name, deps as FunctionContainer | undefined)\n  return factory as unknown as TypedFactory<D>\n}\n","import type {\n  AsyncPipelineRunner,\n  ExitHandler,\n  FunctionContainer,\n  PipeFunction,\n  PipeParameter,\n  ReasonHandler,\n} from './common'\nimport { FN_TYPE } from './pipeline/builder'\nimport type { PipeDefinition } from './pipeline/Pipe'\nimport PipelineBuilder from './pipeline/Pipeline'\n\nexport default function superpipe<T extends FunctionContainer = FunctionContainer>(\n  functions?: T,\n): SuperPipeFactory {\n  const factory = (\n    name: string,\n    defs?: PipeDefinition[],\n  ): PipelineAPI | ((...args: unknown[]) => void) => {\n    let endOutput: PipeParameter | undefined\n    const pipeline = new PipelineBuilder(name, functions)\n\n    if (Array.isArray(defs)) {\n      defs.forEach((pipeDef: PipeDefinition): void => {\n        const [fn, input, output] = pipeDef\n        switch (fn) {\n          case FN_TYPE.INPUT:\n            pipeline.input(input)\n            break\n          case FN_TYPE.ERROR:\n            pipeline.error(input as PipeFunction, output)\n            break\n          case FN_TYPE.END:\n            endOutput = input\n            break\n          default:\n            pipeline.pipe(fn, input, output)\n        }\n      })\n\n      return pipeline.end(endOutput)\n    }\n\n    return pipeline\n  }\n  return factory as SuperPipeFactory\n}\n\nexport type {\n  AbortSignalLike,\n  AnyFunction,\n  AsyncPipelineRunner,\n  ExitHandler,\n  FunctionContainer,\n  PipeFunction,\n  PipelineBase,\n  PipelineExit,\n  PipelineExitVia,\n  PipeName,\n  PipeOutput,\n  PipeParameter,\n  PipeRename,\n  PipeResult,\n  ReasonHandler,\n  Result,\n  ResultContainer,\n  ResultReason,\n  ResultValue,\n} from './common'\n\nexport {\n  AmbiguousContinuationError,\n  NextCalledTwiceError,\n  OutputKeyError,\n  OutputNameError,\n  PipelineAbortedError,\n} from './common'\nexport type { PipeDefinition, PipeDefinition as PipelineDefinition } from './pipeline/Pipe'\nexport type {\n  InputSpec,\n  OutputSpec,\n  TypedAsyncRunner,\n  TypedError,\n  TypedFactory,\n  TypedNext,\n  TypedPipeline,\n  TypedState,\n} from './typed'\nexport { typed } from './typed'\n\nexport interface Pipeline {\n  name: string\n  pipes: Pipe[]\n  errorHandler?: Pipe\n  deps: FunctionContainer\n}\n\nexport interface Pipe {\n  fn: ((...args: unknown[]) => unknown) | null\n  fnName: string | undefined\n  input: string[]\n  output?: string[]\n  not?: boolean\n  optional?: boolean\n}\nexport type { FunctionContainer as Dependencies } from './common'\n\nexport interface PipelineAPI {\n  input: (input?: PipeParameter) => PipelineAPI\n  pipe: (fn: PipeFunction, input?: PipeParameter, output?: PipeParameter) => PipelineAPI\n  error: (fn: PipeFunction, input?: PipeParameter) => PipelineAPI\n\n  onExit: (handler: ExitHandler) => PipelineAPI\n\n  reason: (handler: ReasonHandler) => PipelineAPI\n\n  end: (output?: PipeParameter) => Function\n\n  endAsync: (output?: PipeParameter) => AsyncPipelineRunner\n}\n\nexport interface SuperPipeFactory {\n  (name: string): PipelineAPI\n  (name: string, defs: PipeDefinition[]): (...args: unknown[]) => void\n  (name: string, defs?: PipeDefinition[]): PipelineAPI | ((...args: unknown[]) => void)\n}\nexport type Store = {\n  next: (error?: unknown, value?: unknown) => void\n  error?: unknown\n  [key: string]: unknown\n}\n\nexport interface PipeState {\n  fn: ((...args: unknown[]) => unknown) | null\n  not?: boolean\n  deps: FunctionContainer\n  input: string[]\n  output?: string[]\n  fnName: string | undefined\n  autoNext: boolean | 0\n  optional?: boolean\n  name: string\n  error?: unknown\n  result?: unknown\n  fnReturned?: boolean\n}\n"],"mappings":"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"}