{"version":3,"file":"comment.cjs","sources":["../src/api/commentCount.ts","../src/utils/config.ts","../src/utils/path.ts","../src/utils/error.ts","../src/comment.ts","../src/version.ts"],"sourcesContent":["import type { BaseAPIOptions } from './utils';\n\nexport interface GetCommentCountOptions extends BaseAPIOptions {\n  /**\n   * 待获取评论数的 path\n   *\n   * Path of pages to be fetched\n   */\n  paths: string[];\n\n  /**\n   * 取消请求的信号\n   *\n   * AbortSignal to cancel request\n   */\n  signal?: AbortSignal;\n}\n\nexport const fetchCommentCount = ({\n  serverURL,\n  lang,\n  paths,\n  signal,\n}: GetCommentCountOptions): Promise<number[]> =>\n  fetch(\n    `${serverURL}/comment?type=count&url=${encodeURIComponent(\n      paths.join(',')\n    )}&lang=${lang}`,\n    { signal }\n  )\n    .then((resp) => <Promise<number | number[]>>resp.json())\n    // TODO: Improve this API\n    .then((counts) => (Array.isArray(counts) ? counts : [counts]));\n","import {\n  defaultLang,\n  defaultLocales,\n  defaultReaction,\n  defaultUploadImage,\n  defaultHighlighter,\n  defaultTexRenderer,\n  getDefaultSearchOptions,\n  getMeta,\n} from '../config';\n\nimport { decodePath, isLinkHttp, removeEndingSplash } from './path';\n\nimport type {\n  WalineEmojiInfo,\n  WalineEmojiMaps,\n  WalineLocale,\n  WalineProps,\n} from '../typings';\n\nexport interface WalineEmojiConfig {\n  tabs: Pick<WalineEmojiInfo, 'name' | 'icon' | 'items'>[];\n  map: WalineEmojiMaps;\n}\n\nexport interface WalineConfig\n  extends Required<Omit<WalineProps, 'wordLimit' | 'reaction'>> {\n  locale: WalineLocale;\n  wordLimit: [number, number] | false;\n  reaction: string[];\n}\n\nexport const getServerURL = (serverURL: string): string => {\n  const result = removeEndingSplash(serverURL);\n\n  return isLinkHttp(result) ? result : `https://${result}`;\n};\n\nconst getWordLimit = (\n  wordLimit: WalineProps['wordLimit']\n): [number, number] | false =>\n  Array.isArray(wordLimit) ? wordLimit : wordLimit ? [0, wordLimit] : false;\n\nconst fallback = <T = unknown>(\n  value: T | false | undefined,\n  fallback: T\n): T | false =>\n  typeof value === 'function' ? value : value === false ? false : fallback;\n\nexport const getConfig = ({\n  serverURL,\n\n  path = location.pathname,\n  lang = defaultLang,\n  locale,\n  emoji = ['//unpkg.com/@waline/emojis@1.1.0/weibo'],\n  meta = ['nick', 'mail', 'link'],\n  requiredMeta = [],\n  dark = false,\n  pageSize = 10,\n  wordLimit,\n  imageUploader,\n  highlighter,\n  texRenderer,\n  copyright = true,\n  login = 'enable',\n  search,\n  reaction,\n  recaptchaV3Key = '',\n  commentSorting = 'latest',\n  ...more\n}: WalineProps): WalineConfig => ({\n  serverURL: getServerURL(serverURL),\n  path: decodePath(path),\n  locale: {\n    ...(defaultLocales[lang] || defaultLocales[defaultLang]),\n    ...(typeof locale === 'object' ? locale : {}),\n  } as WalineLocale,\n  wordLimit: getWordLimit(wordLimit),\n  meta: getMeta(meta),\n  requiredMeta: getMeta(requiredMeta),\n  imageUploader: fallback(imageUploader, defaultUploadImage),\n  highlighter: fallback(highlighter, defaultHighlighter),\n  texRenderer: fallback(texRenderer, defaultTexRenderer),\n  lang,\n  dark,\n  emoji,\n  pageSize,\n  login,\n  copyright,\n  search: search ?? getDefaultSearchOptions(lang),\n  recaptchaV3Key,\n  reaction: Array.isArray(reaction)\n    ? reaction\n    : reaction === true\n    ? defaultReaction\n    : [],\n  commentSorting,\n  ...more,\n});\n","export const decodePath = (path: string): string => {\n  try {\n    path = decodeURI(path);\n  } catch (err) {\n    // ignore error\n  }\n\n  return path;\n};\n\nexport const removeEndingSplash = (content = ''): string =>\n  content.replace(/\\/$/u, '');\n\nexport const isLinkHttp = (link: string): boolean =>\n  /^(https?:)?\\/\\//.test(link);\n","export const errorHandler = (err: Error): void => {\n  if (err.name !== 'AbortError') console.error(err.message);\n};\n","import { fetchCommentCount } from './api';\nimport { decodePath, errorHandler, getServerURL } from './utils';\nimport type { WalineAbort } from './typings';\n\nexport interface WalineCommentCountOptions {\n  /**\n   * Waline 服务端地址\n   *\n   * Waline server url\n   */\n  serverURL: string;\n\n  /**\n   * 评论数 CSS 选择器\n   *\n   * Comment count CSS selector\n   *\n   * @default '.waline-comment-count'\n   */\n  selector?: string;\n\n  /**\n   * 需要获取的默认路径\n   *\n   * Path to be fetched by default\n   *\n   * @default window.location.pathname\n   */\n  path?: string;\n\n  /**\n   * 错误提示消息所使用的语言\n   *\n   * Language of error message\n   *\n   * @default 'zh-CN'\n   */\n  lang?: string;\n}\n\nexport const commentCount = ({\n  serverURL,\n  path = window.location.pathname,\n  selector = '.waline-comment-count',\n  lang = 'zh-CN',\n}: // eslint-disable-next-line @typescript-eslint/no-explicit-any\nWalineCommentCountOptions): WalineAbort => {\n  const controller = new AbortController();\n\n  // comment count\n  const elements = document.querySelectorAll<HTMLElement>(selector);\n\n  if (elements.length)\n    void fetchCommentCount({\n      serverURL: getServerURL(serverURL),\n      paths: Array.from(elements).map((element) =>\n        decodePath(element.dataset.path || element.getAttribute('id') || path)\n      ),\n      lang,\n      signal: controller.signal,\n    })\n      .then((counts) => {\n        elements.forEach((element, index) => {\n          element.innerText = counts[index].toString();\n        });\n      })\n      .catch(errorHandler);\n\n  return controller.abort.bind(controller);\n};\n","declare const VERSION: string;\n\nexport const version = VERSION;\n"],"names":["getServerURL","serverURL","result","content","replace","removeEndingSplash","test","errorHandler","err","name","console","error","message","path","window","location","pathname","selector","lang","controller","AbortController","elements","document","querySelectorAll","length","paths","signal","fetch","encodeURIComponent","join","then","resp","json","counts","Array","isArray","fetchCommentCount","from","map","element","decodeURI","decodePath","dataset","getAttribute","forEach","index","innerText","toString","catch","abort","bind"],"mappings":"aAkBO,MCcMA,EAAgBC,IAC3B,MAAMC,ECvB0B,EAACC,EAAU,KAC3CA,EAAQC,QAAQ,OAAQ,IDsBTC,CAAmBJ,GAElC,MCrBA,kBAAkBK,KDqBAJ,GAAUA,EAAS,WAAWA,GAAQ,EEnC7CK,EAAgBC,IACV,eAAbA,EAAIC,MAAuBC,QAAQC,MAAMH,EAAII,QAAQ,uBCuC/B,EAC1BX,YACAY,OAAOC,OAAOC,SAASC,SACvBC,WAAW,wBACXC,OAAO,YAGP,MAAMC,EAAa,IAAIC,gBAGjBC,EAAWC,SAASC,iBAA8BN,GAkBxD,OAhBII,EAASG,QJlCkB,GAC/BvB,YACAiB,OACAO,QACAC,YAEAC,MACE,GAAG1B,4BAAoC2B,mBACrCH,EAAMI,KAAK,cACHX,IACV,CAAEQ,WAEDI,MAAMC,GAAqCA,EAAKC,SAEhDF,MAAMG,GAAYC,MAAMC,QAAQF,GAAUA,EAAS,CAACA,KIqBhDG,CAAkB,CACrBnC,UAAWD,EAAaC,GACxBwB,MAAOS,MAAMG,KAAKhB,GAAUiB,KAAKC,GFvDb,CAAC1B,IACzB,IACEA,EAAO2B,UAAU3B,EAGlB,CAFC,MAAOL,GAER,CAED,OAAOK,CAAI,EEiDL4B,CAAWF,EAAQG,QAAQ7B,MAAQ0B,EAAQI,aAAa,OAAS9B,KAEnEK,OACAQ,OAAQP,EAAWO,SAElBI,MAAMG,IACLZ,EAASuB,SAAQ,CAACL,EAASM,KACzBN,EAAQO,UAAYb,EAAOY,GAAOE,UAAU,GAC5C,IAEHC,MAAMzC,GAEJY,EAAW8B,MAAMC,KAAK/B,EAAW,kBClEnB"}