{"version":3,"file":"wiki-saikou.1DPaxo4l.cjs","sources":["../../src/models/MwParamNormalizer.ts","../../src/models/errors.ts","../../src/models/FexiosSaikou.ts","../../src/utils/resolveLegacyCtor.ts","../../src/utils/useRetry.ts","../../src/WikiSaikou.ts"],"sourcesContent":["import { isPlainObject } from 'fexios'\n\nexport namespace MwParamNormalizer {\n  export function normalizeParamValue(item: any): string | Blob | undefined {\n    if (Array.isArray(item)) {\n      return item.join('|')\n    } else if (typeof item === 'boolean' || item === null) {\n      return item ? '1' : undefined\n    } else if (typeof item === 'number') {\n      return '' + item\n    } else {\n      return item\n    }\n  }\n\n  export function normalizeBody(body: any): FormData | undefined {\n    const isFormLike = (body: any): body is URLSearchParams | FormData =>\n      body && (body instanceof URLSearchParams || body instanceof FormData)\n\n    if (body === void 0 || body === null) {\n      return void 0\n    }\n\n    const formData = new FormData()\n\n    if (isFormLike(body)) {\n      body.forEach((value, key) => {\n        const data = normalizeParamValue(value)\n        if (data !== null && data !== void 0) {\n          formData.append(key, data as any)\n        }\n      })\n      return formData\n    }\n\n    if (isPlainObject(body)) {\n      Object.entries(body).forEach(([key, value]) => {\n        const data = normalizeParamValue(value)\n        if (data !== null && data !== void 0) {\n          formData.append(key, data as any)\n        }\n      })\n      return formData\n    }\n\n    return void 0\n  }\n}\n","import type { FexiosFinalContext } from 'fexios'\nimport { MwApiResponse, MwApiResponseError } from '../types.js'\n\n/**\n * Error codes for WikiSaikouError\n */\nexport enum WikiSaikouErrorCode {\n  HTTP_ERROR = 'HTTP_ERROR',\n  LOGIN_FAILED = 'LOGIN_FAILED',\n  LOGIN_RETRY_LIMIT_EXCEEDED = 'LOGIN_RETRY_LIMIT_EXCEEDED',\n  TOKEN_RETRY_LIMIT_EXCEEDED = 'TOKEN_RETRY_LIMIT_EXCEEDED',\n}\n\n/**\n * WikiSaikou Error:\n * - Transport/network failures (e.g., fetch failure, HTTP layer issues)\n * - SDK behavioral errors such as exhausted internal retries or misconfigurations\n * Note: When MediaWiki API responds with JSON containing error/errors, a MediaWikiApiError should be thrown instead\n */\nexport class WikiSaikouError extends Error {\n  readonly name = 'WikiSaikouError'\n  constructor(\n    readonly code: WikiSaikouErrorCode,\n    readonly message: string = '',\n    readonly cause?: FexiosFinalContext\n  ) {\n    super()\n  }\n  static is(data?: any, code?: WikiSaikouErrorCode): data is WikiSaikouError {\n    return data instanceof this && (code === undefined || data.code === code)\n  }\n}\n\n/**\n * Server-side (MediaWiki API) business error:\n * - fetch succeeded but JSON includes `error` or `errors.length > 0`\n * - Special states (e.g., login NeedToken/WrongToken) are also considered API-side errors\n * Note: network/retry issues belong to WikiSaikouError, not this class\n */\nexport class MediaWikiApiError extends Error {\n  readonly name = 'MediaWikiApiError'\n  readonly code: string\n  constructor(\n    readonly errors: MwApiResponseError[],\n    readonly cause?: FexiosFinalContext\n  ) {\n    super()\n    this.errors = MediaWikiApiError.normalizeErrors(errors)\n    this.message = errors\n      .map((error) => error.text)\n      .filter(Boolean)\n      .join('\\n')\n    this.code = this.isBadTokenError()\n      ? 'badtoken'\n      : this.errors[0]?.code || 'Unknown Error'\n  }\n  get firstError() {\n    return this.errors[0]\n  }\n  isBadTokenError() {\n    return (\n      this.errors.some((error) => error.code === 'badtoken') ||\n      ['NeedToken', 'WrongToken'].includes(this.cause?.data?.login?.result)\n    )\n  }\n  toString() {\n    return `[${this.name} ${this.code}]`\n  }\n  static is(data?: any): data is MediaWikiApiError {\n    return data instanceof this\n  }\n  static normalizeErrors(errors: MwApiResponseError[]): MwApiResponseError[] {\n    if (Array.isArray(errors) === false) {\n      return []\n    }\n    return errors\n      .filter((e) => typeof e === 'object' && !!e?.code)\n      .map((error: any) => {\n        if (!error.text) {\n          if (error.info) {\n            // in rare cases, `info` appears instead of `text`\n            return { ...error, text: error.info }\n          } else if (error['*']) {\n            // for formatversion=1, `*` is preferred over `text`\n            return { ...error, text: error['*'] }\n          } else {\n            return { ...error, text: '' }\n          }\n        }\n        return error\n      })\n  }\n}\n\n/**\n * Helper functions for WikiSaikouError and MediaWikiApiError\n */\nexport namespace WikiSaikouError {\n  function extractResponseDataFromAny<T = any>(data?: any): T | undefined {\n    if (data == null) return undefined\n    // Prefer FexiosResponseError.response.data if present\n    if (data?.response?.data !== undefined) return data.response.data as T\n    // Then prefer context-like objects that already have data\n    if (data?.data !== undefined) return data.data as T\n    // Fall back to Error.cause chain\n    const cause = data instanceof Error ? (data as any).cause : undefined\n    if (cause?.response?.data !== undefined) return cause.response.data as T\n    if (cause?.data !== undefined) return cause.data as T\n    return (data as T) || undefined\n  }\n\n  export function includesMediaWikiApiError(data?: any) {\n    return extractMediaWikiApiErrors(data).length > 0\n  }\n\n  export const normalizeMwApiErrors = MediaWikiApiError.normalizeErrors\n\n  export function extractMediaWikiApiErrors(data?: any): MwApiResponseError[] {\n    let r = extractResponseDataFromAny<MwApiResponse>(data)\n    if (typeof r !== 'object' || r === null) {\n      return []\n    }\n    const error = r?.error\n    const errors = r?.errors\n    const result: MwApiResponseError[] = []\n    if (error) {\n      result.push(error)\n    }\n    if (Array.isArray(errors)) {\n      result.push(...errors)\n    }\n    return normalizeMwApiErrors(result)\n  }\n\n  export function isBadTokenError(data?: any): boolean {\n    if (MediaWikiApiError.is(data)) {\n      return data.isBadTokenError()\n    } else {\n      const errors = extractMediaWikiApiErrors(data)\n      return new MediaWikiApiError(errors).isBadTokenError()\n    }\n  }\n}\n","import { Fexios, FexiosQueryBuilder } from 'fexios'\nimport { MwParamNormalizer } from './MwParamNormalizer.js'\nimport { WikiSaikouError } from './errors.js'\nimport { MwTokenName } from '../types.js'\n\nexport interface FexiosSaikou extends Fexios {\n  _tokens: Map<string, string>\n}\n\nconst FEXIOS_SAIKOU_MARKER = Symbol.for('__FEXIOS_SAIKOU__')\n\n/**\n * FexiosSaikou\n *\n * A pre-configured Fexios instance with MediaWiki-friendly defaults:\n * - MediaWiki-specific request/response params normalization\n * - built-in token management\n * - error handling\n *\n * @author dragon-fish <dragon-fish@qq.com>\n * @license MIT\n *\n * @param {string|URL} payload create a new FexiosSaikou instance with the given baseURL\n * @param {Fexios} payload or make the given Fexios instance a FexiosSaikou instance\n */\nexport function createFexiosSaikou(\n  payload: string | URL | Fexios\n): FexiosSaikou {\n  const instance = (\n    payload instanceof Fexios\n      ? payload\n      : new Fexios({\n          baseURL:\n            payload instanceof URL ? payload.toString() : String(payload),\n          responseType: 'json',\n        })\n  ) as FexiosSaikou\n\n  if ((instance as any)[FEXIOS_SAIKOU_MARKER]) {\n    return instance\n  } else {\n    Reflect.defineProperty(instance, FEXIOS_SAIKOU_MARKER, {\n      get: () => true,\n      enumerable: false,\n      configurable: false,\n    })\n  }\n\n  // Adjust request body for POST requests\n  instance.on('beforeInit', (ctx) => {\n    if (ctx.request.method?.toLowerCase() !== 'post') {\n      return ctx\n    }\n\n    if (ctx.request.body === void 0 || ctx.request.body === null) {\n      ctx.request.body = void 0\n      return ctx\n    }\n\n    const body = (ctx.request.body = MwParamNormalizer.normalizeBody(\n      ctx.request.body\n    )!)\n\n    // Remove duplicate params: prefer body over query for these keys\n    const query = new URLSearchParams(ctx.request.query as any)\n    if (body.has('format')) {\n      query.delete('format')\n    }\n    if (body.has('formatversion')) {\n      query.delete('formatversion')\n    }\n    if (body.has('action')) {\n      query.delete('action')\n    }\n    // `origin` must be in query due to CORS requirements\n    if (body.has('origin')) {\n      query.set('origin', '' + body.get('origin'))\n      body.delete('origin')\n    }\n    ctx.request.query = Object.fromEntries(query.entries())\n\n    return ctx\n  })\n\n  // Normalize query into FormData-like object\n  instance.on('beforeInit', (ctx) => {\n    ctx.request.query = FexiosQueryBuilder.mergeQueries(\n      {},\n      MwParamNormalizer.normalizeBody(ctx.request.query)\n    )\n    return ctx\n  })\n\n  // Adjust origin parameter and CORS related runtime configs\n  instance.on('beforeRequest', (ctx) => {\n    const url = new URL(ctx.request.url!)\n    // Convert ctx.query to a plain object for easier manipulation\n    const query = FexiosQueryBuilder.mergeQueries(url.searchParams, ctx.query)\n\n    // Automatically add/remove origin based on current location and baseURL\n    if (globalThis.location) {\n      if (!query.origin && location.origin !== url.origin) {\n        query.origin = location.origin\n        instance.baseConfigs.credentials = 'include'\n        instance.baseConfigs.mode = 'cors'\n      } else if (location.origin === url.origin) {\n        delete query.origin\n        instance.baseConfigs.credentials = undefined\n        instance.baseConfigs.mode = undefined\n      }\n    }\n\n    if (query.origin) {\n      const origin = encodeURIComponent(query.origin).replace(/\\./g, '%2E')\n      // Remove origin from query record, it will be added to URL directly\n      delete query.origin\n      ctx.request.query = query\n      // Append origin to URL directly with proper encoding\n      ctx.request.url = `${url.origin}${url.pathname}?origin=${origin}`\n    } else {\n      ctx.request.query = query\n    }\n    return ctx\n  })\n\n  // Token handler\n  instance._tokens = new Map<MwTokenName, string>()\n  instance.on('afterResponse', (ctx) => {\n    const { data } = ctx\n    // Remove bad token\n    const tokenName = ctx.runtime.customEnv?.mwTokenName as MwTokenName\n    if (tokenName && WikiSaikouError.isBadTokenError(data)) {\n      instance._tokens.delete(tokenName)\n    }\n\n    // Store new tokens\n    const tokens = data?.query?.tokens\n    if (tokens && typeof tokens === 'object') {\n      Object.entries(tokens).forEach(([type, token]) => {\n        typeof token === 'string' &&\n          instance._tokens.set(type.replace(/token$/i, '').toLowerCase(), token)\n      })\n    }\n    const loginToken = data?.login?.token\n    if (typeof loginToken === 'string') {\n      instance._tokens.set('login', loginToken)\n    }\n    return ctx\n  })\n\n  return instance\n}\n","import type { FexiosConfigs } from 'fexios'\nimport {\n  WikiSaikouCore,\n  WikiSaikouConfig,\n  WikiSaikouInitConfig,\n} from '../WikiSaikou.js'\nimport { deepMerge } from '../utils/deepMerge.js'\nimport { MwApiParams } from '../types.js'\n\nexport const resolveLegacyCtor = (\n  configOrBaseURL?: WikiSaikouInitConfig | string,\n  defaultOptions?: Partial<FexiosConfigs>,\n  defaultParams?: MwApiParams\n) => {\n  let config: Required<WikiSaikouConfig> = { ...WikiSaikouCore.DEFAULT_CONFIGS }\n  if (typeof configOrBaseURL === 'string') {\n    config = deepMerge(config, {\n      baseURL: configOrBaseURL,\n      fexiosConfigs: defaultOptions || {},\n      defaultParams: defaultParams || {},\n      throwOnApiError: false, // Set a default value for throwOnApiError\n    })\n  } else if (typeof configOrBaseURL === 'object' && configOrBaseURL !== null) {\n    config = deepMerge(config, configOrBaseURL)\n  }\n  // For MediaWiki browser environment\n  if (\n    !config.baseURL &&\n    typeof window === 'object' &&\n    (window as any).mediaWiki\n  ) {\n    const { wgServer, wgScriptPath } =\n      (window as any).mediaWiki?.config?.get(['wgServer', 'wgScriptPath']) || {}\n    if (typeof wgServer === 'string' && typeof wgScriptPath === 'string') {\n      config.baseURL = `${wgServer}${wgScriptPath}/api.php`\n    }\n  }\n  if (typeof config.baseURL !== 'string') {\n    throw new Error('baseURL is required')\n  }\n  return config\n}\n","const noop = () => {}\n\nexport const useRetry = async <T>(\n  fn: () => Promise<T>,\n  options: {\n    retry?: number\n    onRetry?: (error: Error, retryCount: number) => void\n    shouldRetry?: (error: Error, retryCount: number) => boolean\n  }\n): Promise<T> => {\n  let retryCount = 0\n  const { retry = 3, onRetry = noop, shouldRetry = () => true } = options\n  let lastError: unknown\n  do {\n    try {\n      return await fn()\n    } catch (error) {\n      lastError = error\n      if (shouldRetry(error as Error, retryCount)) {\n        onRetry(error as Error, retryCount)\n        retryCount++\n      } else {\n        throw error\n      }\n    }\n  } while (retryCount < retry)\n  throw (lastError as Error) || new Error('Retry failed')\n}\n","import type {\n  FexiosConfigs,\n  FexiosRequestOptions,\n  FexiosFinalContext,\n} from 'fexios'\nimport { FexiosQueryBuilder } from 'fexios'\nimport { createFexiosSaikou, FexiosSaikou } from './models/FexiosSaikou.js'\nimport { resolveLegacyCtor } from './utils/resolveLegacyCtor.js'\nimport { deepMerge } from './utils/deepMerge.js'\nimport { useRetry } from './utils/useRetry.js'\nimport {\n  MediaWikiApiError,\n  WikiSaikouError,\n  WikiSaikouErrorCode,\n} from './models/errors.js'\nimport { MwApiParams, MwApiResponse, MwTokenName } from './types.js'\n\nexport interface WikiSaikouConfig {\n  /**\n   * @default undefined // required in Node.js environment\n   * @default `${wgServer}${wgScriptPath}/api.php` // in MW pages\n   * @description The MediaWiki API endpoint, e.g. \"https://www.mediawiki.org/w/api.php\"\n   * @optional In real MediaWiki browser pages, `baseURL` can be omitted and will be inferred automatically based on `window.mw`\n   */\n  baseURL: string\n  /**\n   * Transport/runtime options passed to the underlying Fexios instance (headers, fetch, credentials, etc.).\n   * @default { responseType: 'json' }\n   */\n  fexiosConfigs: Partial<FexiosConfigs>\n  /**\n   * Default query parameters merged into every request.\n   * @default { action: 'query' }\n   */\n  defaultParams: MwApiParams\n  /**\n   * When true, responses whose JSON body contains `error`/`errors` will throw `MediaWikiApiError` even if HTTP status is 2xx.\n   * @default false\n   */\n  throwOnApiError: boolean\n}\n\nexport type WikiSaikouInitConfig = Omit<\n  Partial<WikiSaikouConfig>,\n  'baseURL'\n> & {\n  baseURL: string\n}\n\n/**\n * WikiSaikou Core class\n * @internal You **SHOULD NOT** use this class directly, instead, use the `MediaWikiApi` class.\n * @author dragon-fish <dragon-fish@qq.com>\n * @license MIT\n */\nexport class WikiSaikouCore {\n  readonly config: Required<WikiSaikouConfig>\n  readonly version = import.meta.env.__VERSION__\n  readonly request: FexiosSaikou\n\n  static INIT_DEFAULT_PARAMS: MwApiParams = {\n    action: 'query',\n    errorformat: 'plaintext',\n    format: 'json',\n    formatversion: 2,\n  }\n  static DEFAULT_CONFIGS: Required<WikiSaikouConfig> = {\n    baseURL: undefined as unknown as string,\n    fexiosConfigs: {\n      responseType: 'json',\n    },\n    defaultParams: this.INIT_DEFAULT_PARAMS,\n    throwOnApiError: false,\n  }\n\n  /** @deprecated Use `new MediaWikiApi(config)` instead */\n  constructor(\n    baseURL?: string,\n    defaultOptions?: Partial<FexiosConfigs>,\n    defaultParams?: MwApiParams\n  )\n  constructor(config?: WikiSaikouInitConfig)\n  constructor(\n    configOrBaseURL?: WikiSaikouInitConfig | string,\n    defaultOptions?: Partial<FexiosConfigs>,\n    defaultParams?: MwApiParams\n  ) {\n    const config = (this.config = resolveLegacyCtor(\n      configOrBaseURL,\n      defaultOptions,\n      defaultParams\n    ))\n    this.request = createFexiosSaikou(config.baseURL)\n  }\n\n  setBaseURL(baseURL: string) {\n    this.config.baseURL = baseURL\n    this.request.baseConfigs.baseURL = baseURL\n    return this\n  }\n\n  /** Base methods encapsulation */\n  async get<T = any>(\n    query: MwApiParams,\n    options?: Partial<FexiosRequestOptions>\n  ): Promise<FexiosFinalContext<MwApiResponse<T>>> {\n    const payload = deepMerge<Partial<FexiosRequestOptions>>(\n      {},\n      this.config.fexiosConfigs as Partial<FexiosRequestOptions>,\n      {\n        query: FexiosQueryBuilder.mergeQueries(\n          this.config.defaultParams,\n          query\n        ),\n      },\n      options\n    )\n    return this.runRequestWithApiErrorMapping(() =>\n      this.request.get<MwApiResponse<T>>('', payload)\n    )\n  }\n  async post<T = any>(\n    data: MwApiParams | URLSearchParams | FormData,\n    options?: Partial<FexiosRequestOptions>\n  ): Promise<FexiosFinalContext<MwApiResponse<T>>> {\n    return this.runRequestWithApiErrorMapping(() =>\n      this.request.post<MwApiResponse<T>>(\n        '',\n        data,\n        deepMerge<Partial<FexiosRequestOptions>>(\n          {},\n          this.config.fexiosConfigs as Partial<FexiosRequestOptions>,\n          {\n            query: this.config.defaultParams,\n          },\n          options\n        )\n      )\n    )\n  }\n\n  /**\n   * Wrap a request to map non-2xx responses containing MediaWiki API error bodies\n   * into MediaWikiApiError when throwOnApiError=true, and then pass 2xx responses\n   * through handleApiResponse for unified processing.\n   */\n  private async runRequestWithApiErrorMapping<T = any>(\n    doRequest: () => Promise<FexiosFinalContext<MwApiResponse<T>>>\n  ): Promise<FexiosFinalContext<MwApiResponse<T>>> {\n    try {\n      const res = await doRequest()\n      return this.handleApiResponse(res)\n    } catch (err) {\n      // If HTTP is non-2xx but body includes MW API error, convert to MediaWikiApiError\n      if (\n        this.config.throwOnApiError &&\n        WikiSaikouError.includesMediaWikiApiError(err)\n      ) {\n        throw new MediaWikiApiError(\n          WikiSaikouError.extractMediaWikiApiErrors(err),\n          err as any\n        )\n      }\n      throw err as any\n    }\n  }\n\n  private throwIfApiError(data?: any) {\n    const errors = WikiSaikouError.extractMediaWikiApiErrors(data)\n    if (errors.length > 0) {\n      throw new MediaWikiApiError(errors, data)\n    }\n  }\n  private handleApiResponse<T = any>(\n    res: FexiosFinalContext<MwApiResponse<T>>\n  ) {\n    if (this.config.throwOnApiError) {\n      this.throwIfApiError(res.data)\n    }\n    return res\n  }\n\n  /** Token Handler */\n  get tokens() {\n    return this.request._tokens\n  }\n  async fetchTokens(types: MwTokenName[] = ['csrf']) {\n    this.config.fexiosConfigs.credentials = 'include'\n    await this.get<{\n      query: { tokens: Record<MwTokenName, string> }\n    }>({\n      action: 'query',\n      meta: 'tokens',\n      type: types,\n    })\n    return this.tokens\n  }\n  async getToken(type: MwTokenName = 'csrf', noCache = false) {\n    if (!this.tokens.get(type) || noCache) {\n      this.tokens.delete(type)\n      await this.fetchTokens([type])\n    }\n    return this.tokens.get(type)!\n  }\n  badToken(type: MwTokenName) {\n    this.tokens.delete(type)\n    return this.tokens\n  }\n\n  async postWithToken<T = any>(\n    tokenType: MwTokenName,\n    body: MwApiParams,\n    options?: {\n      tokenName?: string\n      retry?: number\n      noCache?: boolean\n      fexiosOptions?: Partial<FexiosRequestOptions>\n    }\n  ): Promise<FexiosFinalContext<MwApiResponse<T>>> {\n    const {\n      tokenName = 'token',\n      retry = 3,\n      noCache = false,\n      fexiosOptions,\n    } = options || {}\n\n    if (retry < 1) {\n      throw new WikiSaikouError(\n        WikiSaikouErrorCode.TOKEN_RETRY_LIMIT_EXCEEDED,\n        'The limit of the number of times to automatically re-acquire the token has been exceeded'\n      )\n    }\n\n    let attemptIndex = 0\n    return useRetry<FexiosFinalContext<MwApiResponse<T>>>(\n      async () => {\n        const token = await this.getToken(\n          tokenType,\n          noCache || attemptIndex > 0\n        )\n\n        try {\n          const ctx = await this.post<MwApiResponse<T>>(\n            {\n              [tokenName]: token,\n              ...body,\n            },\n            deepMerge(fexiosOptions || {}, {\n              customEnv: {\n                mwTokenName: tokenType,\n              },\n            })\n          )\n\n          if (WikiSaikouError.isBadTokenError(ctx.data)) {\n            throw ctx\n          }\n          return ctx\n        } catch (err: any) {\n          if (WikiSaikouError.isBadTokenError(err) || err?.ok === false) {\n            throw err\n          } else if (MediaWikiApiError.is(err)) {\n            // MW 业务错误，直接透传\n            throw err\n          } else {\n            throw new WikiSaikouError(\n              WikiSaikouErrorCode.HTTP_ERROR,\n              'Network/transport or SDK-internal error (not a MediaWiki API error)',\n              err\n            )\n          }\n        }\n      },\n      {\n        retry,\n        onRetry: (_error, count) => {\n          attemptIndex = count + 1\n        },\n        shouldRetry: (error) =>\n          WikiSaikouError.isBadTokenError(error) ||\n          (error as any)?.ok === false,\n      }\n    ).catch((err) => {\n      // Map exhausted retry of retryable errors into SDK-level error\n      if (WikiSaikouError.isBadTokenError(err) || (err as any)?.ok === false) {\n        throw new WikiSaikouError(\n          WikiSaikouErrorCode.TOKEN_RETRY_LIMIT_EXCEEDED,\n          'Retry attempts for acquiring/using token exhausted',\n          err as any\n        )\n      }\n      // For non-retryable errors like MediaWikiApiError, keep propagation as is\n      throw err\n    })\n  }\n  postWithEditToken<T = any>(\n    body: MwApiParams\n  ): Promise<FexiosFinalContext<MwApiResponse<T>>> {\n    return this.postWithToken<T>('csrf', body)\n  }\n\n  // for backward compatibility\n  /** @deprecated Use `this.config.baseURL` instead */\n  get baseURL() {\n    return this.config.baseURL\n  }\n  /** @deprecated Use `this.config.defaultParams` instead */\n  get defaultParams(): MwApiParams {\n    return this.config.defaultParams\n  }\n  /** @deprecated Use `this.config.fexiosConfigs` instead */\n  get defaultOptions(): Partial<FexiosConfigs> {\n    return this.config.fexiosConfigs\n  }\n  /** @deprecated Use `createFexiosSaikou` instead */\n  static readonly createRequestHandler = createFexiosSaikou\n  /** @deprecated Use `this.getToken` instead */\n  token = this.getToken\n}\n\n// re-export for library users\nexport * from './models/errors.js'\nexport * from './models/FexiosSaikou.js'\nexport * from './models/MwParamNormalizer.js'\nexport * from './types.js'\nexport * from 'fexios'\n\n// for backward compatibility\nexport {\n  /** @deprecated Use `WikiSaikou` instead */\n  WikiSaikouCore as MwApiBase,\n}\n"],"names":["MwParamNormalizer","body","isPlainObject","WikiSaikouErrorCode","WikiSaikouError","Fexios","FexiosQueryBuilder","deepMerge"],"mappings":"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"}