{"version":3,"sources":["../src/server-fn.ts"],"sourcesContent":["import { getServerActionExecutionContext, getServerActionSignal } from \"./server-action-security\";\nimport { _resolveCurrentRequest } from \"./server/request-bridge\";\nimport { applyFarmCacheInvalidationTargets, type FarmCacheInvalidationTarget } from \"./cache\";\nimport { ServerActionError, ServerFnFailure } from \"./server-fn-error\";\n\nexport {\n  FARM_SERVER_FN_FAILURE_SYMBOL,\n  ServerActionError,\n  ServerFnFailure,\n  createServerFnTransportError,\n  isServerFnFailure,\n} from \"./server-fn-error\";\nexport type { SerializedServerFnFailure } from \"./server-fn-error\";\n\ntype MaybePromise<T> = T | Promise<T>;\n\n// Generic schema type that works with Zod v3/v4 and similar validator APIs.\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport type ServerFnSchema = {\n  _input?: any;\n  _output?: any;\n  parse?: (data: unknown) => any;\n  parseAsync?: (data: unknown) => Promise<any>;\n  safeParse?: (data: unknown) => any;\n  safeParseAsync?: (data: unknown) => Promise<any>;\n};\n\nexport type InferServerFnSchemaInput<T> = T extends { _input: infer I } ? I : unknown;\nexport type InferServerFnSchemaOutput<T> = T extends { _output: infer O }\n  ? O\n  : T extends { parse: (data: unknown) => infer R }\n    ? R\n    : unknown;\n\nexport type ServerFnErrorSchema = ServerFnSchema &\n  ({ parse: (data: unknown) => unknown } | { safeParse: (data: unknown) => unknown });\n\nexport type ServerFnErrorDefinition<\n  TSchema extends ServerFnErrorSchema = ServerFnErrorSchema,\n  TStatus extends number = number,\n> = {\n  status: TStatus;\n  /** Schema for the public error payload exposed to callers. */\n  data: TSchema;\n  /** Public message safe to expose to callers. */\n  message?: string;\n};\n\nexport type ServerFnErrorDefinitions = Record<\n  string,\n  ServerFnErrorDefinition<ServerFnErrorSchema, number>\n>;\n\nexport type ServerFnDeclaredError<TErrors extends ServerFnErrorDefinitions> = {\n  [TCode in keyof TErrors]: ServerFnFailure<\n    TCode & string,\n    InferServerFnSchemaOutput<TErrors[TCode][\"data\"]>,\n    TErrors[TCode][\"status\"]\n  >;\n}[keyof TErrors];\n\nexport type ServerFnError<TErrors extends ServerFnErrorDefinitions> = keyof TErrors extends never\n  ? Error\n  : ServerActionError | ServerFnDeclaredError<TErrors>;\n\nexport type ServerFnErrorHandler<TErrors extends ServerFnErrorDefinitions> = <\n  TCode extends keyof TErrors & string,\n>(\n  code: TCode,\n  data: InferServerFnSchemaInput<TErrors[TCode][\"data\"]>,\n) => never;\n\nexport type ServerFnFormInput = FormData;\n\ntype Simplify<T> = { [TKey in keyof T]: T[TKey] } & {};\ntype AssignContext<TCurrent extends object, TNext extends object> = Simplify<\n  Omit<TCurrent, keyof TNext> & TNext\n>;\ntype MiddlewareContext<TMiddleware> =\n  TMiddleware extends ServerFnMiddleware<infer TContext> ? TContext : {};\n\nexport type ServerFnMiddlewareContext<\n  TMiddlewares extends readonly AnyServerFnMiddleware[],\n  TContext extends object = {},\n> = TMiddlewares extends readonly [infer TMiddleware, ...infer TRest]\n  ? TMiddleware extends AnyServerFnMiddleware\n    ? TRest extends readonly AnyServerFnMiddleware[]\n      ? ServerFnMiddlewareContext<TRest, AssignContext<TContext, MiddlewareContext<TMiddleware>>>\n      : TContext\n    : TContext\n  : number extends TMiddlewares[\"length\"]\n    ? Simplify<TContext & MiddlewareContext<TMiddlewares[number]>>\n    : Simplify<TContext>;\n\ndeclare const SERVER_FN_MIDDLEWARE_CONTEXT: unique symbol;\n\nexport type ServerFnMiddlewareContinuation<TContext extends object = {}> = {\n  readonly [SERVER_FN_MIDDLEWARE_CONTEXT]: TContext;\n};\n\nexport type ServerFnMiddlewareNext = <TContext extends object = {}>(options?: {\n  context?: TContext;\n}) => Promise<ServerFnMiddlewareContinuation<TContext>>;\n\nexport type ServerFnContext<TInput, TContext extends object = {}> = {\n  input: TInput;\n  rawInput: unknown;\n  formData?: FormData;\n  /** The action request when invoked across the network. Undefined for direct server calls. */\n  request?: Request;\n  /** Aborts when the underlying action request is cancelled. */\n  signal: AbortSignal;\n  /** Context produced by this server function's middleware chain. */\n  context: Readonly<TContext>;\n};\n\nexport type ServerFnHandlerContext<\n  TInput,\n  TContext extends object = {},\n  TErrors extends ServerFnErrorDefinitions = {},\n> = ServerFnContext<TInput, TContext> & {\n  /** Return a declared, validated error from this server function. */\n  error: ServerFnErrorHandler<TErrors>;\n};\n\nexport type ServerFnHandler<\n  TInput,\n  TResult,\n  TContext extends object = {},\n  TErrors extends ServerFnErrorDefinitions = {},\n> = (ctx: ServerFnHandlerContext<TInput, TContext, TErrors>) => MaybePromise<TResult>;\n\nexport type ServerFnInvalidationContext<\n  TInput,\n  TResult,\n  TContext extends object = {},\n> = ServerFnContext<TInput, TContext> & {\n  /** Parsed value returned by the successful server function. */\n  result: TResult;\n};\n\nexport type ServerFnInvalidations<TInput, TResult, TContext extends object = {}> =\n  | readonly FarmCacheInvalidationTarget[]\n  | ((\n      context: ServerFnInvalidationContext<TInput, TResult, TContext>,\n    ) => readonly FarmCacheInvalidationTarget[] | Promise<readonly FarmCacheInvalidationTarget[]>);\n\nexport type ServerFnMiddlewareHandlerContext<TContext extends object = {}> = ServerFnContext<\n  unknown,\n  TContext\n> & {\n  next: ServerFnMiddlewareNext;\n};\n\nexport type ServerFnMiddlewareHandler<\n  TContext extends object = {},\n  TProvidedContext extends object = {},\n> = (\n  ctx: ServerFnMiddlewareHandlerContext<TContext>,\n) => MaybePromise<ServerFnMiddlewareContinuation<TProvidedContext>>;\n\nexport type ServerFnMiddleware<TContext extends object = {}> = {\n  readonly __farmServerFnMiddleware: true;\n  readonly __farmServerFnMiddlewareContext?: TContext;\n  readonly middleware: readonly AnyServerFnMiddleware[];\n  readonly handler: ServerFnMiddlewareHandler<any, any>;\n};\n\nexport type AnyServerFnMiddleware = ServerFnMiddleware<any>;\n\nexport type ServerFnMiddlewareOptions<\n  TMiddlewares extends readonly AnyServerFnMiddleware[],\n  TProvidedContext extends object,\n> = {\n  middleware?: TMiddlewares;\n  handler: ServerFnMiddlewareHandler<ServerFnMiddlewareContext<TMiddlewares>, TProvidedContext>;\n};\n\nexport type ServerFnOptions<\n  TSchema extends ServerFnSchema | undefined,\n  TResult,\n  TMiddlewares extends readonly AnyServerFnMiddleware[] = readonly [],\n  TErrors extends ServerFnErrorDefinitions = {},\n> = {\n  input?: TSchema;\n  output?: undefined;\n  middleware?: TMiddlewares;\n  errors?: TErrors;\n  invalidates?: ServerFnInvalidations<\n    TSchema extends ServerFnSchema ? InferServerFnSchemaOutput<TSchema> : unknown,\n    Awaited<TResult>,\n    ServerFnMiddlewareContext<TMiddlewares>\n  >;\n  handler: ServerFnHandler<\n    TSchema extends ServerFnSchema ? InferServerFnSchemaOutput<TSchema> : unknown,\n    TResult,\n    ServerFnMiddlewareContext<TMiddlewares>,\n    TErrors\n  >;\n};\n\nexport type ServerFnOutputOptions<\n  TInputSchema extends ServerFnSchema | undefined,\n  TOutputSchema extends ServerFnSchema,\n  TMiddlewares extends readonly AnyServerFnMiddleware[] = readonly [],\n  TErrors extends ServerFnErrorDefinitions = {},\n> = {\n  input?: TInputSchema;\n  output: TOutputSchema;\n  middleware?: TMiddlewares;\n  errors?: TErrors;\n  invalidates?: ServerFnInvalidations<\n    TInputSchema extends ServerFnSchema ? InferServerFnSchemaOutput<TInputSchema> : unknown,\n    Awaited<InferServerFnSchemaOutput<TOutputSchema>>,\n    ServerFnMiddlewareContext<TMiddlewares>\n  >;\n  handler: ServerFnHandler<\n    TInputSchema extends ServerFnSchema ? InferServerFnSchemaOutput<TInputSchema> : unknown,\n    unknown,\n    ServerFnMiddlewareContext<TMiddlewares>,\n    TErrors\n  >;\n};\n\nexport type ServerFn<TInput, TResult, TError extends Error = Error> = ([unknown] extends [TInput]\n  ? (input?: TInput | FormData) => Promise<TResult>\n  : (input: TInput | FormData) => Promise<TResult>) & {\n  readonly __farmServerFn: true;\n  readonly __farmServerFnInput?: unknown;\n  readonly __farmServerFnOutput?: unknown;\n  readonly __farmServerFnError: TError;\n};\n\nexport type InferServerFnError<TServerFn> =\n  TServerFn extends ServerFn<any, any, infer TError> ? TError : Error;\n\nexport const FARM_SERVER_FN_SYMBOL = Symbol.for(\"farm.server-fn\");\n\nconst UNSAFE_FORM_KEYS = new Set([\"__proto__\", \"constructor\", \"prototype\"]);\n\nexport function createServerMiddleware<\n  const TMiddlewares extends readonly AnyServerFnMiddleware[] = readonly [],\n  TProvidedContext extends object = {},\n>(\n  options: ServerFnMiddlewareOptions<TMiddlewares, TProvidedContext>,\n): ServerFnMiddleware<AssignContext<ServerFnMiddlewareContext<TMiddlewares>, TProvidedContext>>;\nexport function createServerMiddleware(options: {\n  middleware?: readonly AnyServerFnMiddleware[];\n  handler: ServerFnMiddlewareHandler<any, any>;\n}): ServerFnMiddleware<any> {\n  if (!options || typeof options.handler !== \"function\") {\n    throw new TypeError(\"createServerMiddleware requires a handler function\");\n  }\n\n  const middleware = Object.freeze([...(options.middleware ?? [])]);\n  for (const entry of middleware) {\n    assertServerFnMiddleware(entry);\n  }\n\n  return Object.freeze({\n    __farmServerFnMiddleware: true as const,\n    middleware,\n    handler: options.handler,\n  });\n}\n\nexport function createServerFn<\n  TInputSchema extends ServerFnSchema,\n  TOutputSchema extends ServerFnSchema,\n  const TMiddlewares extends readonly AnyServerFnMiddleware[] = readonly [],\n  const TErrors extends ServerFnErrorDefinitions = {},\n>(\n  options: ServerFnOutputOptions<TInputSchema, TOutputSchema, TMiddlewares, TErrors>,\n): ServerFn<\n  InferServerFnSchemaInput<TInputSchema>,\n  Awaited<InferServerFnSchemaOutput<TOutputSchema>>,\n  ServerFnError<TErrors>\n>;\nexport function createServerFn<\n  TOutputSchema extends ServerFnSchema,\n  const TMiddlewares extends readonly AnyServerFnMiddleware[] = readonly [],\n  const TErrors extends ServerFnErrorDefinitions = {},\n>(\n  options: ServerFnOutputOptions<undefined, TOutputSchema, TMiddlewares, TErrors>,\n): ServerFn<unknown, Awaited<InferServerFnSchemaOutput<TOutputSchema>>, ServerFnError<TErrors>>;\nexport function createServerFn<\n  TSchema extends ServerFnSchema,\n  TResult,\n  const TMiddlewares extends readonly AnyServerFnMiddleware[] = readonly [],\n  const TErrors extends ServerFnErrorDefinitions = {},\n>(\n  options: ServerFnOptions<TSchema, TResult, TMiddlewares, TErrors>,\n): ServerFn<InferServerFnSchemaInput<TSchema>, Awaited<TResult>, ServerFnError<TErrors>>;\nexport function createServerFn<\n  TResult,\n  const TMiddlewares extends readonly AnyServerFnMiddleware[] = readonly [],\n  const TErrors extends ServerFnErrorDefinitions = {},\n>(\n  options: ServerFnOptions<undefined, TResult, TMiddlewares, TErrors>,\n): ServerFn<unknown, Awaited<TResult>, ServerFnError<TErrors>>;\nexport function createServerFn(options: {\n  input?: ServerFnSchema;\n  output?: ServerFnSchema;\n  middleware?: readonly AnyServerFnMiddleware[];\n  errors?: ServerFnErrorDefinitions;\n  invalidates?: ServerFnInvalidations<any, any, any>;\n  // eslint-disable-next-line @typescript-eslint/no-explicit-any\n  handler: ServerFnHandler<any, any, any, any>;\n}) {\n  if (!options || typeof options.handler !== \"function\") {\n    throw new TypeError(\"createServerFn requires a handler function\");\n  }\n\n  const middleware = resolveServerFnMiddleware(options.middleware);\n  const errors = normalizeServerFnErrors(options.errors);\n  const error = createServerFnErrorHandler(errors);\n  const serverFn = async (value: unknown) => {\n    const formData = isFormData(value) ? value : undefined;\n    const rawInput = formData ? formDataToObject(formData) : value;\n    const input = await _parseServerFnSchema(options.input, rawInput, \"input\");\n    const executionContext = getServerActionExecutionContext();\n    const request = executionContext?.request ?? _resolveCurrentRequest();\n    const signal = executionContext?.signal ?? request?.signal ?? getServerActionSignal();\n    const handlerContext = {\n      input,\n      rawInput,\n      formData,\n      request,\n      signal,\n    };\n    let resolvedContext: Readonly<object> = Object.freeze(Object.create(null));\n    const result = await runServerFnMiddleware(middleware, handlerContext, async (context) => {\n      resolvedContext = context.context;\n      return options.handler({ ...context, error });\n    });\n    const parsedResult = await _parseServerFnSchema(options.output, result, \"output\");\n\n    if (options.invalidates) {\n      const declaration =\n        typeof options.invalidates === \"function\"\n          ? await options.invalidates({\n              ...handlerContext,\n              context: resolvedContext,\n              result: parsedResult,\n            })\n          : options.invalidates;\n      await applyFarmCacheInvalidationTargets(declaration);\n    }\n\n    return parsedResult;\n  };\n\n  Object.defineProperties(serverFn, {\n    [FARM_SERVER_FN_SYMBOL]: {\n      value: true,\n      enumerable: false,\n    },\n    __farmServerFn: {\n      value: true,\n      enumerable: false,\n    },\n    __farmServerFnInput: {\n      value: options.input,\n      enumerable: false,\n    },\n    __farmServerFnOutput: {\n      value: options.output,\n      enumerable: false,\n    },\n    __farmServerFnError: {\n      value: undefined,\n      enumerable: false,\n    },\n    __farmServerFnMiddleware: {\n      value: middleware,\n      enumerable: false,\n    },\n    __farmServerFnInvalidates: {\n      value: options.invalidates,\n      enumerable: false,\n    },\n  });\n\n  return serverFn as ServerFn<unknown, unknown, Error>;\n}\n\ntype ServerFnBaseContext = Omit<ServerFnContext<unknown, {}>, \"context\">;\n\nasync function runServerFnMiddleware(\n  middleware: readonly AnyServerFnMiddleware[],\n  handlerContext: ServerFnBaseContext,\n  handler: (context: ServerFnContext<any, any>) => MaybePromise<unknown>,\n) {\n  const dispatch = async (index: number, context: Readonly<object>): Promise<unknown> => {\n    const current = middleware[index];\n    if (!current) {\n      return handler({ ...handlerContext, context });\n    }\n\n    let nextCalled = false;\n    const result = await current.handler({\n      ...handlerContext,\n      context,\n      next: async (nextOptions) => {\n        if (nextCalled) {\n          throw new Error(\"Server function middleware next() can only be called once\");\n        }\n        nextCalled = true;\n\n        return dispatch(index + 1, mergeServerFnContext(context, nextOptions?.context)) as Promise<\n          ServerFnMiddlewareContinuation<any>\n        >;\n      },\n    });\n\n    if (!nextCalled) {\n      throw new Error(\"Server function middleware must call next()\");\n    }\n\n    return result;\n  };\n\n  return dispatch(0, Object.freeze(Object.create(null)));\n}\n\nfunction normalizeServerFnErrors(\n  definitions: ServerFnErrorDefinitions | undefined,\n): Readonly<ServerFnErrorDefinitions> {\n  if (definitions === undefined) return Object.freeze({});\n  if (!isPlainServerFnObject(definitions)) {\n    throw new TypeError(\"createServerFn errors must be an object\");\n  }\n\n  const normalized: ServerFnErrorDefinitions = Object.create(null);\n  for (const [code, definition] of Object.entries(definitions)) {\n    if (!code.trim()) {\n      throw new TypeError(\"Server function error codes cannot be empty\");\n    }\n    if (!definition || typeof definition !== \"object\") {\n      throw new TypeError(`Server function error \"${code}\" must be an object`);\n    }\n    if (\n      !Number.isInteger(definition.status) ||\n      definition.status < 400 ||\n      definition.status > 599\n    ) {\n      throw new TypeError(\n        `Server function error \"${code}\" status must be an integer between 400 and 599`,\n      );\n    }\n    if (\n      !definition.data ||\n      (typeof definition.data.parse !== \"function\" &&\n        typeof definition.data.safeParse !== \"function\")\n    ) {\n      throw new TypeError(\n        `Server function error \"${code}\" data must provide synchronous parse() or safeParse()`,\n      );\n    }\n    if (definition.message !== undefined && typeof definition.message !== \"string\") {\n      throw new TypeError(`Server function error \"${code}\" message must be a string`);\n    }\n\n    normalized[code] = Object.freeze({ ...definition });\n  }\n\n  return Object.freeze(normalized);\n}\n\nfunction createServerFnErrorHandler(\n  definitions: Readonly<ServerFnErrorDefinitions>,\n): ServerFnErrorHandler<ServerFnErrorDefinitions> {\n  return ((code: string, data: unknown): never => {\n    const definition = definitions[code];\n    if (!definition) {\n      throw new TypeError(`Server function error \"${code}\" is not declared`);\n    }\n\n    const parsed = parseServerFnFailureData(code, definition.data, data);\n    throw new ServerFnFailure(code, parsed, {\n      status: definition.status,\n      message: definition.message ?? \"Server function failed\",\n    });\n  }) as ServerFnErrorHandler<ServerFnErrorDefinitions>;\n}\n\nfunction parseServerFnFailureData(code: string, schema: ServerFnSchema, value: unknown) {\n  if (typeof schema.safeParse === \"function\") {\n    const result = schema.safeParse(value);\n    if (isPromiseLike(result)) {\n      throw new TypeError(`Server function error \"${code}\" data schema must parse synchronously`);\n    }\n    return unwrapSafeParseResult(result);\n  }\n\n  const result = schema.parse!(value);\n  if (isPromiseLike(result)) {\n    throw new TypeError(`Server function error \"${code}\" data schema must parse synchronously`);\n  }\n  return result;\n}\n\nfunction isPlainServerFnObject(value: unknown): value is Record<string, unknown> {\n  if (!value || typeof value !== \"object\" || Array.isArray(value)) return false;\n  const prototype = Object.getPrototypeOf(value);\n  return prototype === Object.prototype || prototype === null;\n}\n\nfunction isPromiseLike(value: unknown): value is PromiseLike<unknown> {\n  return Boolean(\n    value &&\n    (typeof value === \"object\" || typeof value === \"function\") &&\n    \"then\" in value &&\n    typeof (value as PromiseLike<unknown>).then === \"function\",\n  );\n}\n\nfunction resolveServerFnMiddleware(\n  middleware: readonly AnyServerFnMiddleware[] | undefined,\n): readonly AnyServerFnMiddleware[] {\n  const resolved: AnyServerFnMiddleware[] = [];\n  const seen = new Set<AnyServerFnMiddleware>();\n  const visiting = new Set<AnyServerFnMiddleware>();\n\n  const visit = (entry: AnyServerFnMiddleware) => {\n    assertServerFnMiddleware(entry);\n    if (seen.has(entry)) return;\n    if (visiting.has(entry)) {\n      throw new Error(\"Server function middleware dependencies cannot contain a cycle\");\n    }\n\n    visiting.add(entry);\n    for (const dependency of entry.middleware) {\n      visit(dependency);\n    }\n    visiting.delete(entry);\n    seen.add(entry);\n    resolved.push(entry);\n  };\n\n  for (const entry of middleware ?? []) {\n    visit(entry);\n  }\n\n  return Object.freeze(resolved);\n}\n\nfunction assertServerFnMiddleware(value: unknown): asserts value is AnyServerFnMiddleware {\n  if (\n    !value ||\n    typeof value !== \"object\" ||\n    (value as { __farmServerFnMiddleware?: unknown }).__farmServerFnMiddleware !== true ||\n    typeof (value as { handler?: unknown }).handler !== \"function\" ||\n    !Array.isArray((value as { middleware?: unknown }).middleware)\n  ) {\n    throw new TypeError(\"createServerFn middleware must be created with createServerMiddleware\");\n  }\n}\n\nfunction mergeServerFnContext(current: Readonly<object>, added: object | undefined) {\n  if (\n    added !== undefined &&\n    (added === null || typeof added !== \"object\" || Array.isArray(added))\n  ) {\n    throw new TypeError(\"Server function middleware context must be an object\");\n  }\n\n  return Object.freeze(Object.assign(Object.create(null), current, added));\n}\n\nexport async function _parseServerFnSchema(\n  schema: ServerFnSchema | undefined,\n  value: unknown,\n  contract: \"input\" | \"output\",\n  owner = \"createServerFn\",\n) {\n  if (!schema) return value;\n\n  if (typeof schema.safeParseAsync === \"function\") {\n    const result = await schema.safeParseAsync(value);\n    return unwrapSafeParseResult(result);\n  }\n\n  if (typeof schema.safeParse === \"function\") {\n    const result = schema.safeParse(value);\n    return unwrapSafeParseResult(await result);\n  }\n\n  if (typeof schema.parseAsync === \"function\") {\n    return schema.parseAsync(value);\n  }\n\n  if (typeof schema.parse === \"function\") {\n    return schema.parse(value);\n  }\n\n  throw new TypeError(`${owner} ${contract} must provide parse, parseAsync, or safeParse`);\n}\n\nfunction unwrapSafeParseResult(result: unknown) {\n  if (\n    result &&\n    typeof result === \"object\" &&\n    \"success\" in result &&\n    (result as { success: boolean }).success === false\n  ) {\n    throw (result as { error?: unknown }).error;\n  }\n\n  if (\n    result &&\n    typeof result === \"object\" &&\n    \"success\" in result &&\n    (result as { success: boolean }).success === true\n  ) {\n    return (result as unknown as { data: unknown }).data;\n  }\n\n  return result;\n}\n\nfunction formDataToObject(formData: FormData) {\n  const output: Record<string, FormDataEntryValue | FormDataEntryValue[]> = Object.create(null);\n\n  for (const [key, value] of formData.entries()) {\n    if (!isSafeFormKey(key)) continue;\n\n    const existing = output[key];\n    if (existing === undefined) {\n      output[key] = value;\n    } else if (Array.isArray(existing)) {\n      existing.push(value);\n    } else {\n      output[key] = [existing, value];\n    }\n  }\n\n  return output;\n}\n\nfunction isSafeFormKey(key: string) {\n  return !key.startsWith(\"$ACTION_\") && !UNSAFE_FORM_KEYS.has(key);\n}\n\nfunction isFormData(value: unknown): value is FormData {\n  if (!value || typeof value !== \"object\") return false;\n\n  if (typeof FormData !== \"undefined\" && value instanceof FormData) {\n    return true;\n  }\n\n  return (\n    Object.prototype.toString.call(value) === \"[object FormData]\" &&\n    typeof (value as { entries?: unknown }).entries === \"function\"\n  );\n}\n"],"mappings":";;;;;;;;;;;;;;;;AA4OO,IAAM,wBAAwB,uBAAO,IAAI,gBAAgB;AAEhE,IAAM,mBAAmB,oBAAI,IAAI,CAAC,aAAa,eAAe,WAAW,CAAC;AAQnE,SAAS,uBAAuB,SAGX;AAC1B,MAAI,CAAC,WAAW,OAAO,QAAQ,YAAY,YAAY;AACrD,UAAM,IAAI,UAAU,oDAAoD;AAAA,EAC1E;AAEA,QAAM,aAAa,OAAO,OAAO,CAAC,GAAI,QAAQ,cAAc,CAAC,CAAE,CAAC;AAChE,aAAW,SAAS,YAAY;AAC9B,6BAAyB,KAAK;AAAA,EAChC;AAEA,SAAO,OAAO,OAAO;AAAA,IACnB,0BAA0B;AAAA,IAC1B;AAAA,IACA,SAAS,QAAQ;AAAA,EACnB,CAAC;AACH;AAlBgB;AAsDT,SAAS,eAAe,SAQ5B;AACD,MAAI,CAAC,WAAW,OAAO,QAAQ,YAAY,YAAY;AACrD,UAAM,IAAI,UAAU,4CAA4C;AAAA,EAClE;AAEA,QAAM,aAAa,0BAA0B,QAAQ,UAAU;AAC/D,QAAM,SAAS,wBAAwB,QAAQ,MAAM;AACrD,QAAM,QAAQ,2BAA2B,MAAM;AAC/C,QAAM,WAAW,8BAAO,UAAmB;AACzC,UAAM,WAAW,WAAW,KAAK,IAAI,QAAQ;AAC7C,UAAM,WAAW,WAAW,iBAAiB,QAAQ,IAAI;AACzD,UAAM,QAAQ,MAAM,qBAAqB,QAAQ,OAAO,UAAU,OAAO;AACzE,UAAM,mBAAmB,gCAAgC;AACzD,UAAM,UAAU,kBAAkB,WAAW,uBAAuB;AACpE,UAAM,SAAS,kBAAkB,UAAU,SAAS,UAAU,sBAAsB;AACpF,UAAM,iBAAiB;AAAA,MACrB;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF;AACA,QAAI,kBAAoC,OAAO,OAAO,uBAAO,OAAO,IAAI,CAAC;AACzE,UAAM,SAAS,MAAM,sBAAsB,YAAY,gBAAgB,OAAO,YAAY;AACxF,wBAAkB,QAAQ;AAC1B,aAAO,QAAQ,QAAQ,EAAE,GAAG,SAAS,MAAM,CAAC;AAAA,IAC9C,CAAC;AACD,UAAM,eAAe,MAAM,qBAAqB,QAAQ,QAAQ,QAAQ,QAAQ;AAEhF,QAAI,QAAQ,aAAa;AACvB,YAAM,cACJ,OAAO,QAAQ,gBAAgB,aAC3B,MAAM,QAAQ,YAAY;AAAA,QACxB,GAAG;AAAA,QACH,SAAS;AAAA,QACT,QAAQ;AAAA,MACV,CAAC,IACD,QAAQ;AACd,YAAM,kCAAkC,WAAW;AAAA,IACrD;AAEA,WAAO;AAAA,EACT,GAlCiB;AAoCjB,SAAO,iBAAiB,UAAU;AAAA,IAChC,CAAC,qBAAqB,GAAG;AAAA,MACvB,OAAO;AAAA,MACP,YAAY;AAAA,IACd;AAAA,IACA,gBAAgB;AAAA,MACd,OAAO;AAAA,MACP,YAAY;AAAA,IACd;AAAA,IACA,qBAAqB;AAAA,MACnB,OAAO,QAAQ;AAAA,MACf,YAAY;AAAA,IACd;AAAA,IACA,sBAAsB;AAAA,MACpB,OAAO,QAAQ;AAAA,MACf,YAAY;AAAA,IACd;AAAA,IACA,qBAAqB;AAAA,MACnB,OAAO;AAAA,MACP,YAAY;AAAA,IACd;AAAA,IACA,0BAA0B;AAAA,MACxB,OAAO;AAAA,MACP,YAAY;AAAA,IACd;AAAA,IACA,2BAA2B;AAAA,MACzB,OAAO,QAAQ;AAAA,MACf,YAAY;AAAA,IACd;AAAA,EACF,CAAC;AAED,SAAO;AACT;AApFgB;AAwFhB,eAAe,sBACb,YACA,gBACA,SACA;AACA,QAAM,WAAW,8BAAO,OAAe,YAAgD;AACrF,UAAM,UAAU,WAAW,KAAK;AAChC,QAAI,CAAC,SAAS;AACZ,aAAO,QAAQ,EAAE,GAAG,gBAAgB,QAAQ,CAAC;AAAA,IAC/C;AAEA,QAAI,aAAa;AACjB,UAAM,SAAS,MAAM,QAAQ,QAAQ;AAAA,MACnC,GAAG;AAAA,MACH;AAAA,MACA,MAAM,8BAAO,gBAAgB;AAC3B,YAAI,YAAY;AACd,gBAAM,IAAI,MAAM,2DAA2D;AAAA,QAC7E;AACA,qBAAa;AAEb,eAAO,SAAS,QAAQ,GAAG,qBAAqB,SAAS,aAAa,OAAO,CAAC;AAAA,MAGhF,GATM;AAAA,IAUR,CAAC;AAED,QAAI,CAAC,YAAY;AACf,YAAM,IAAI,MAAM,6CAA6C;AAAA,IAC/D;AAEA,WAAO;AAAA,EACT,GA3BiB;AA6BjB,SAAO,SAAS,GAAG,OAAO,OAAO,uBAAO,OAAO,IAAI,CAAC,CAAC;AACvD;AAnCe;AAqCf,SAAS,wBACP,aACoC;AACpC,MAAI,gBAAgB,OAAW,QAAO,OAAO,OAAO,CAAC,CAAC;AACtD,MAAI,CAAC,sBAAsB,WAAW,GAAG;AACvC,UAAM,IAAI,UAAU,yCAAyC;AAAA,EAC/D;AAEA,QAAM,aAAuC,uBAAO,OAAO,IAAI;AAC/D,aAAW,CAAC,MAAM,UAAU,KAAK,OAAO,QAAQ,WAAW,GAAG;AAC5D,QAAI,CAAC,KAAK,KAAK,GAAG;AAChB,YAAM,IAAI,UAAU,6CAA6C;AAAA,IACnE;AACA,QAAI,CAAC,cAAc,OAAO,eAAe,UAAU;AACjD,YAAM,IAAI,UAAU,0BAA0B,IAAI,qBAAqB;AAAA,IACzE;AACA,QACE,CAAC,OAAO,UAAU,WAAW,MAAM,KACnC,WAAW,SAAS,OACpB,WAAW,SAAS,KACpB;AACA,YAAM,IAAI;AAAA,QACR,0BAA0B,IAAI;AAAA,MAChC;AAAA,IACF;AACA,QACE,CAAC,WAAW,QACX,OAAO,WAAW,KAAK,UAAU,cAChC,OAAO,WAAW,KAAK,cAAc,YACvC;AACA,YAAM,IAAI;AAAA,QACR,0BAA0B,IAAI;AAAA,MAChC;AAAA,IACF;AACA,QAAI,WAAW,YAAY,UAAa,OAAO,WAAW,YAAY,UAAU;AAC9E,YAAM,IAAI,UAAU,0BAA0B,IAAI,4BAA4B;AAAA,IAChF;AAEA,eAAW,IAAI,IAAI,OAAO,OAAO,EAAE,GAAG,WAAW,CAAC;AAAA,EACpD;AAEA,SAAO,OAAO,OAAO,UAAU;AACjC;AA1CS;AA4CT,SAAS,2BACP,aACgD;AAChD,UAAQ,CAAC,MAAc,SAAyB;AAC9C,UAAM,aAAa,YAAY,IAAI;AACnC,QAAI,CAAC,YAAY;AACf,YAAM,IAAI,UAAU,0BAA0B,IAAI,mBAAmB;AAAA,IACvE;AAEA,UAAM,SAAS,yBAAyB,MAAM,WAAW,MAAM,IAAI;AACnE,UAAM,IAAI,gBAAgB,MAAM,QAAQ;AAAA,MACtC,QAAQ,WAAW;AAAA,MACnB,SAAS,WAAW,WAAW;AAAA,IACjC,CAAC;AAAA,EACH;AACF;AAfS;AAiBT,SAAS,yBAAyB,MAAc,QAAwB,OAAgB;AACtF,MAAI,OAAO,OAAO,cAAc,YAAY;AAC1C,UAAMA,UAAS,OAAO,UAAU,KAAK;AACrC,QAAI,cAAcA,OAAM,GAAG;AACzB,YAAM,IAAI,UAAU,0BAA0B,IAAI,wCAAwC;AAAA,IAC5F;AACA,WAAO,sBAAsBA,OAAM;AAAA,EACrC;AAEA,QAAM,SAAS,OAAO,MAAO,KAAK;AAClC,MAAI,cAAc,MAAM,GAAG;AACzB,UAAM,IAAI,UAAU,0BAA0B,IAAI,wCAAwC;AAAA,EAC5F;AACA,SAAO;AACT;AAdS;AAgBT,SAAS,sBAAsB,OAAkD;AAC/E,MAAI,CAAC,SAAS,OAAO,UAAU,YAAY,MAAM,QAAQ,KAAK,EAAG,QAAO;AACxE,QAAM,YAAY,OAAO,eAAe,KAAK;AAC7C,SAAO,cAAc,OAAO,aAAa,cAAc;AACzD;AAJS;AAMT,SAAS,cAAc,OAA+C;AACpE,SAAO;AAAA,IACL,UACC,OAAO,UAAU,YAAY,OAAO,UAAU,eAC/C,UAAU,SACV,OAAQ,MAA+B,SAAS;AAAA,EAClD;AACF;AAPS;AAST,SAAS,0BACP,YACkC;AAClC,QAAM,WAAoC,CAAC;AAC3C,QAAM,OAAO,oBAAI,IAA2B;AAC5C,QAAM,WAAW,oBAAI,IAA2B;AAEhD,QAAM,QAAQ,wBAAC,UAAiC;AAC9C,6BAAyB,KAAK;AAC9B,QAAI,KAAK,IAAI,KAAK,EAAG;AACrB,QAAI,SAAS,IAAI,KAAK,GAAG;AACvB,YAAM,IAAI,MAAM,gEAAgE;AAAA,IAClF;AAEA,aAAS,IAAI,KAAK;AAClB,eAAW,cAAc,MAAM,YAAY;AACzC,YAAM,UAAU;AAAA,IAClB;AACA,aAAS,OAAO,KAAK;AACrB,SAAK,IAAI,KAAK;AACd,aAAS,KAAK,KAAK;AAAA,EACrB,GAdc;AAgBd,aAAW,SAAS,cAAc,CAAC,GAAG;AACpC,UAAM,KAAK;AAAA,EACb;AAEA,SAAO,OAAO,OAAO,QAAQ;AAC/B;AA5BS;AA8BT,SAAS,yBAAyB,OAAwD;AACxF,MACE,CAAC,SACD,OAAO,UAAU,YAChB,MAAiD,6BAA6B,QAC/E,OAAQ,MAAgC,YAAY,cACpD,CAAC,MAAM,QAAS,MAAmC,UAAU,GAC7D;AACA,UAAM,IAAI,UAAU,uEAAuE;AAAA,EAC7F;AACF;AAVS;AAYT,SAAS,qBAAqB,SAA2B,OAA2B;AAClF,MACE,UAAU,WACT,UAAU,QAAQ,OAAO,UAAU,YAAY,MAAM,QAAQ,KAAK,IACnE;AACA,UAAM,IAAI,UAAU,sDAAsD;AAAA,EAC5E;AAEA,SAAO,OAAO,OAAO,OAAO,OAAO,uBAAO,OAAO,IAAI,GAAG,SAAS,KAAK,CAAC;AACzE;AATS;AAWT,eAAsB,qBACpB,QACA,OACA,UACA,QAAQ,kBACR;AACA,MAAI,CAAC,OAAQ,QAAO;AAEpB,MAAI,OAAO,OAAO,mBAAmB,YAAY;AAC/C,UAAM,SAAS,MAAM,OAAO,eAAe,KAAK;AAChD,WAAO,sBAAsB,MAAM;AAAA,EACrC;AAEA,MAAI,OAAO,OAAO,cAAc,YAAY;AAC1C,UAAM,SAAS,OAAO,UAAU,KAAK;AACrC,WAAO,sBAAsB,MAAM,MAAM;AAAA,EAC3C;AAEA,MAAI,OAAO,OAAO,eAAe,YAAY;AAC3C,WAAO,OAAO,WAAW,KAAK;AAAA,EAChC;AAEA,MAAI,OAAO,OAAO,UAAU,YAAY;AACtC,WAAO,OAAO,MAAM,KAAK;AAAA,EAC3B;AAEA,QAAM,IAAI,UAAU,GAAG,KAAK,IAAI,QAAQ,+CAA+C;AACzF;AA3BsB;AA6BtB,SAAS,sBAAsB,QAAiB;AAC9C,MACE,UACA,OAAO,WAAW,YAClB,aAAa,UACZ,OAAgC,YAAY,OAC7C;AACA,UAAO,OAA+B;AAAA,EACxC;AAEA,MACE,UACA,OAAO,WAAW,YAClB,aAAa,UACZ,OAAgC,YAAY,MAC7C;AACA,WAAQ,OAAwC;AAAA,EAClD;AAEA,SAAO;AACT;AApBS;AAsBT,SAAS,iBAAiB,UAAoB;AAC5C,QAAM,SAAoE,uBAAO,OAAO,IAAI;AAE5F,aAAW,CAAC,KAAK,KAAK,KAAK,SAAS,QAAQ,GAAG;AAC7C,QAAI,CAAC,cAAc,GAAG,EAAG;AAEzB,UAAM,WAAW,OAAO,GAAG;AAC3B,QAAI,aAAa,QAAW;AAC1B,aAAO,GAAG,IAAI;AAAA,IAChB,WAAW,MAAM,QAAQ,QAAQ,GAAG;AAClC,eAAS,KAAK,KAAK;AAAA,IACrB,OAAO;AACL,aAAO,GAAG,IAAI,CAAC,UAAU,KAAK;AAAA,IAChC;AAAA,EACF;AAEA,SAAO;AACT;AAjBS;AAmBT,SAAS,cAAc,KAAa;AAClC,SAAO,CAAC,IAAI,WAAW,UAAU,KAAK,CAAC,iBAAiB,IAAI,GAAG;AACjE;AAFS;AAIT,SAAS,WAAW,OAAmC;AACrD,MAAI,CAAC,SAAS,OAAO,UAAU,SAAU,QAAO;AAEhD,MAAI,OAAO,aAAa,eAAe,iBAAiB,UAAU;AAChE,WAAO;AAAA,EACT;AAEA,SACE,OAAO,UAAU,SAAS,KAAK,KAAK,MAAM,uBAC1C,OAAQ,MAAgC,YAAY;AAExD;AAXS;","names":["result"]}