@waline/client 2.12.0 → 2.13.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/api.cjs CHANGED
@@ -1,2 +1,2 @@
1
- "use strict";Object.defineProperty(exports,"__esModule",{value:!0});const e={"Content-Type":"application/json"},t=(e,t="")=>{if("object"==typeof e&&e.errno)throw new TypeError(`Fetch ${t} failed with ${e.errno}: ${e.errmsg}`);return e},n=({serverURL:e,lang:n,paths:o,type:r,signal:a})=>fetch(`${e}/article?path=${encodeURIComponent(o.join(","))}&type=${encodeURIComponent(r.join(","))}&lang=${n}`,{signal:a}).then((e=>e.json())).then((e=>t(e,"article count"))),o=({serverURL:n,lang:o,path:r,type:a,action:s})=>fetch(`${n}/article?lang=${o}`,{method:"POST",headers:e,body:JSON.stringify({path:r,type:a,action:s})}).then((e=>e.json())).then((e=>t(e,"article count")));exports.deleteComment=({serverURL:e,lang:t,token:n,objectId:o})=>fetch(`${e}/comment/${o}?lang=${t}`,{method:"DELETE",headers:{Authorization:`Bearer ${n}`}}).then((e=>e.json())),exports.fetchArticleCounter=n,exports.fetchComment=({serverURL:e,lang:n,path:o,page:r,pageSize:a,sortBy:s,signal:i,token:h})=>{const c={};return h&&(c.Authorization=`Bearer ${h}`),fetch(`${e}/comment?path=${encodeURIComponent(o)}&pageSize=${a}&page=${r}&lang=${n}&sortBy=${s}`,{signal:i,headers:c}).then((e=>e.json())).then((e=>t(e,"comment data")))},exports.fetchCommentCount=({serverURL:e,lang:n,paths:o,signal:r})=>fetch(`${e}/comment?type=count&url=${encodeURIComponent(o.join(","))}&lang=${n}`,{signal:r,headers:{}}).then((e=>e.json())).then((e=>t(e,"comment count"))).then((e=>Array.isArray(e)?e:[e])),exports.fetchPageviews=({serverURL:e,lang:t,paths:o,signal:r})=>n({serverURL:e,lang:t,paths:o,type:["time"],signal:r}).then((e=>Array.isArray(e)?e:[e])),exports.fetchRecentComment=({serverURL:e,lang:n,count:o,signal:r,token:a})=>{const s={};return a&&(s.Authorization=`Bearer ${a}`),fetch(`${e}/comment?type=recent&count=${o}&lang=${n}`,{signal:r,headers:s}).then((e=>e.json())).then((e=>t(e,"recent comment")))},exports.likeComment=({serverURL:t,lang:n,objectId:o,like:r})=>fetch(`${t}/comment/${o}?lang=${n}`,{method:"PUT",headers:e,body:JSON.stringify({like:r})}).then((e=>e.json())),exports.login=({lang:e,serverURL:t})=>{const n=(window.innerWidth-450)/2,o=(window.innerHeight-450)/2,r=window.open(`${t}/ui/login?lng=${encodeURIComponent(e)}`,"_blank",`width=450,height=450,left=${n},top=${o},scrollbars=no,resizable=no,status=no,location=no,toolbar=no,menubar=no`);return r?.postMessage({type:"TOKEN",data:null},"*"),new Promise((e=>{const t=({data:n})=>{n&&"object"==typeof n&&"userInfo"===n.type&&n.data.token&&(r?.close(),window.removeEventListener("message",t),e(n.data))};window.addEventListener("message",t)}))},exports.postComment=({serverURL:e,lang:t,token:n,comment:o})=>{const r={"Content-Type":"application/json"};return n&&(r.Authorization=`Bearer ${n}`),o.eid?fetch(`${e}/comment/${o.eid}?lang=${t}`,{method:"PUT",headers:r,body:JSON.stringify(o)}).then((e=>e.json())):fetch(`${e}/comment?lang=${t}`,{method:"POST",headers:r,body:JSON.stringify(o)}).then((e=>e.json()))},exports.updateArticleCounter=o,exports.updateComment=({serverURL:t,lang:n,token:o,objectId:r,...a})=>fetch(`${t}/comment/${r}?lang=${n}`,{method:"PUT",headers:{...e,Authorization:`Bearer ${o}`},body:JSON.stringify(a)}).then((e=>e.json())),exports.updatePageviews=e=>o({...e,type:"time"});
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:!0});const e={"Content-Type":"application/json"},t=(e,t="")=>{if("object"==typeof e&&e.errno)throw new TypeError(`Fetch ${t} failed with ${e.errno}: ${e.errmsg}`);return e},n=({serverURL:e,lang:n,paths:o,type:r,signal:a})=>fetch(`${e}/article?path=${encodeURIComponent(o.join(","))}&type=${encodeURIComponent(r.join(","))}&lang=${n}`,{signal:a}).then((e=>e.json())).then((e=>t(e,"article count"))),o=({serverURL:n,lang:o,path:r,type:a,action:s})=>fetch(`${n}/article?lang=${o}`,{method:"POST",headers:e,body:JSON.stringify({path:r,type:a,action:s})}).then((e=>e.json())).then((e=>t(e,"article count")));exports.deleteComment=({serverURL:e,lang:t,token:n,objectId:o})=>fetch(`${e}/comment/${o}?lang=${t}`,{method:"DELETE",headers:{Authorization:`Bearer ${n}`}}).then((e=>e.json())),exports.fetchArticleCounter=n,exports.fetchComment=({serverURL:e,lang:n,path:o,page:r,pageSize:a,sortBy:s,signal:i,token:h})=>{const c={};return h&&(c.Authorization=`Bearer ${h}`),fetch(`${e}/comment?path=${encodeURIComponent(o)}&pageSize=${a}&page=${r}&lang=${n}&sortBy=${s}`,{signal:i,headers:c}).then((e=>e.json())).then((e=>t(e,"comment data")))},exports.fetchCommentCount=({serverURL:e,lang:n,paths:o,signal:r})=>fetch(`${e}/comment?type=count&url=${encodeURIComponent(o.join(","))}&lang=${n}`,{signal:r,headers:{}}).then((e=>e.json())).then((e=>t(e,"comment count"))).then((e=>Array.isArray(e)?e:[e])),exports.fetchPageviews=({serverURL:e,lang:t,paths:o,signal:r})=>n({serverURL:e,lang:t,paths:o,type:["time"],signal:r}).then((e=>Array.isArray(e)?e:[e])),exports.fetchRecentComment=({serverURL:e,lang:n,count:o,signal:r,token:a})=>{const s={};return a&&(s.Authorization=`Bearer ${a}`),fetch(`${e}/comment?type=recent&count=${o}&lang=${n}`,{signal:r,headers:s}).then((e=>e.json())).then((e=>t(e,"recent comment")))},exports.fetchUserList=({serverURL:e,signal:n,pageSize:o,lang:r})=>fetch(`${e}/user?pageSize=${o}&lang=${r}`,{signal:n}).then((e=>e.json())).then((e=>t(e,"user list"))).then((e=>e.data)),exports.likeComment=({serverURL:t,lang:n,objectId:o,like:r})=>fetch(`${t}/comment/${o}?lang=${n}`,{method:"PUT",headers:e,body:JSON.stringify({like:r})}).then((e=>e.json())),exports.login=({lang:e,serverURL:t})=>{const n=(window.innerWidth-450)/2,o=(window.innerHeight-450)/2,r=window.open(`${t}/ui/login?lng=${encodeURIComponent(e)}`,"_blank",`width=450,height=450,left=${n},top=${o},scrollbars=no,resizable=no,status=no,location=no,toolbar=no,menubar=no`);return r?.postMessage({type:"TOKEN",data:null},"*"),new Promise((e=>{const t=({data:n})=>{n&&"object"==typeof n&&"userInfo"===n.type&&n.data.token&&(r?.close(),window.removeEventListener("message",t),e(n.data))};window.addEventListener("message",t)}))},exports.postComment=({serverURL:e,lang:t,token:n,comment:o})=>{const r={"Content-Type":"application/json"};return n&&(r.Authorization=`Bearer ${n}`),o.eid?fetch(`${e}/comment/${o.eid}?lang=${t}`,{method:"PUT",headers:r,body:JSON.stringify(o)}).then((e=>e.json())):fetch(`${e}/comment?lang=${t}`,{method:"POST",headers:r,body:JSON.stringify(o)}).then((e=>e.json()))},exports.updateArticleCounter=o,exports.updateComment=({serverURL:t,lang:n,token:o,objectId:r,...a})=>fetch(`${t}/comment/${r}?lang=${n}`,{method:"PUT",headers:{...e,Authorization:`Bearer ${o}`},body:JSON.stringify(a)}).then((e=>e.json())),exports.updatePageviews=e=>o({...e,type:"time"});
2
2
  //# sourceMappingURL=api.cjs.map
package/dist/api.cjs.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"api.cjs","sources":["../src/api/utils.ts","../src/api/articleCounter.ts","../src/api/comment.ts","../src/api/commentCount.ts","../src/api/pageview.ts","../src/api/recentComment.ts","../src/api/login.ts"],"sourcesContent":["export interface FetchErrorData {\n errno: number;\n errmsg: string;\n}\n\nexport const JSON_HEADERS: Record<string, string> = {\n // eslint-disable-next-line @typescript-eslint/naming-convention\n 'Content-Type': 'application/json',\n};\n\nexport const errorCheck = <T = unknown>(\n data: T | FetchErrorData,\n name = ''\n): T => {\n if (typeof data === 'object' && (data as FetchErrorData).errno)\n throw new TypeError(\n `Fetch ${name} failed with ${(data as FetchErrorData).errno}: ${\n (data as FetchErrorData).errmsg\n }`\n );\n\n return data as T;\n};\n","import { JSON_HEADERS, errorCheck } from './utils';\n\nexport interface FetchArticleCounterOptions {\n serverURL: string;\n lang: string;\n paths: string[];\n signal: AbortSignal;\n type: string[];\n}\n\nexport const fetchArticleCounter = ({\n serverURL,\n lang,\n paths,\n type,\n signal,\n}: FetchArticleCounterOptions): Promise<\n Record<string, number>[] | Record<string, number> | number[] | number\n> =>\n fetch(\n `${serverURL}/article?path=${encodeURIComponent(\n paths.join(',')\n )}&type=${encodeURIComponent(type.join(','))}&lang=${lang}`,\n { signal }\n )\n .then(\n (resp) =>\n resp.json() as Promise<Record<string, number>[] | number[] | number>\n )\n .then((data) => errorCheck(data, 'article count'));\n\nexport interface UpdateArticleCounterOptions {\n serverURL: string;\n lang: string;\n path: string;\n type: string;\n action?: 'inc' | 'desc';\n}\n\nexport const updateArticleCounter = ({\n serverURL,\n lang,\n path,\n type,\n action,\n}: UpdateArticleCounterOptions): Promise<number> =>\n fetch(`${serverURL}/article?lang=${lang}`, {\n method: 'POST',\n headers: JSON_HEADERS,\n body: JSON.stringify({ path, type, action }),\n })\n .then((resp) => resp.json() as Promise<number>)\n .then((data) => errorCheck(data, 'article count'));\n","import { JSON_HEADERS, errorCheck } from './utils';\nimport type { WalineComment, WalineCommentData } from '../typings';\n\nexport interface FetchCommentOptions {\n serverURL: string;\n path: string;\n page: number;\n pageSize: number;\n sortBy: string;\n signal: AbortSignal;\n token?: string;\n lang: string;\n}\n\nexport interface CommentData {\n count: number;\n data: WalineComment[];\n totalPages: number;\n}\n\nexport const fetchComment = ({\n serverURL,\n lang,\n path,\n page,\n pageSize,\n sortBy,\n signal,\n token,\n}: FetchCommentOptions): Promise<CommentData> => {\n const headers: Record<string, string> = {};\n\n if (token) headers.Authorization = `Bearer ${token}`;\n\n return fetch(\n `${serverURL}/comment?path=${encodeURIComponent(\n path\n )}&pageSize=${pageSize}&page=${page}&lang=${lang}&sortBy=${sortBy}`,\n { signal, headers }\n )\n .then((resp) => resp.json() as Promise<CommentData>)\n .then((data) => errorCheck(data, 'comment data'));\n};\n\nexport interface PostCommentOptions {\n serverURL: string;\n lang: string;\n token?: string;\n comment: WalineCommentData;\n}\n\nexport interface PostCommentResponse {\n data?: WalineComment;\n errmsg?: string;\n}\n\nexport const postComment = ({\n serverURL,\n lang,\n token,\n comment,\n}: PostCommentOptions): Promise<PostCommentResponse> => {\n const headers: Record<string, string> = {\n // eslint-disable-next-line @typescript-eslint/naming-convention\n 'Content-Type': 'application/json',\n };\n\n if (token) headers.Authorization = `Bearer ${token}`;\n\n if (comment.eid) {\n return fetch(`${serverURL}/comment/${comment.eid}?lang=${lang}`, {\n method: 'PUT',\n headers,\n body: JSON.stringify(comment),\n }).then((resp) => resp.json() as Promise<PostCommentResponse>);\n }\n\n return fetch(`${serverURL}/comment?lang=${lang}`, {\n method: 'POST',\n headers,\n body: JSON.stringify(comment),\n }).then((resp) => resp.json() as Promise<PostCommentResponse>);\n};\n\nexport interface DeleteCommentOptions {\n serverURL: string;\n lang: string;\n token: string;\n objectId: string | number;\n}\n\nexport const deleteComment = ({\n serverURL,\n lang,\n token,\n objectId,\n}: DeleteCommentOptions): Promise<void> =>\n fetch(`${serverURL}/comment/${objectId}?lang=${lang}`, {\n method: 'DELETE',\n headers: {\n Authorization: `Bearer ${token}`,\n },\n }).then((resp) => resp.json() as Promise<void>);\n\nexport interface LikeCommentOptions {\n serverURL: string;\n lang: string;\n objectId: number | string;\n like: boolean;\n}\n\nexport const likeComment = ({\n serverURL,\n lang,\n objectId,\n like,\n}: LikeCommentOptions): Promise<void> =>\n fetch(`${serverURL}/comment/${objectId}?lang=${lang}`, {\n method: 'PUT',\n headers: JSON_HEADERS,\n body: JSON.stringify({ like }),\n }).then((resp) => resp.json() as Promise<void>);\n\nexport interface UpdateCommentOptions {\n serverURL: string;\n lang: string;\n token: string;\n objectId: number | string;\n status?: 'approved' | 'waiting' | 'spam';\n sticky?: number;\n}\n\nexport const updateComment = ({\n serverURL,\n lang,\n token,\n objectId,\n ...data\n}: UpdateCommentOptions): Promise<void> =>\n fetch(`${serverURL}/comment/${objectId}?lang=${lang}`, {\n method: 'PUT',\n headers: {\n ...JSON_HEADERS,\n Authorization: `Bearer ${token}`,\n },\n body: JSON.stringify(data),\n }).then((resp) => resp.json() as Promise<void>);\n","import { errorCheck } from './utils';\n\nexport interface FetchCommentCountOptions {\n serverURL: string;\n lang: string;\n paths: string[];\n signal: AbortSignal;\n}\n\nexport const fetchCommentCount = ({\n serverURL,\n lang,\n paths,\n signal,\n}: FetchCommentCountOptions): Promise<number[]> => {\n const headers: Record<string, string> = {};\n\n return (\n fetch(\n `${serverURL}/comment?type=count&url=${encodeURIComponent(\n paths.join(',')\n )}&lang=${lang}`,\n { signal, headers }\n )\n .then((resp) => resp.json() as Promise<number | number[]>)\n .then((data) => errorCheck(data, 'comment count'))\n // TODO: Improve this API\n .then((counts) => (Array.isArray(counts) ? counts : [counts]))\n );\n};\n","import { fetchArticleCounter, updateArticleCounter } from './articleCounter';\n\ninterface FetchPageviewOptions {\n serverURL: string;\n lang: string;\n paths: string[];\n signal: AbortSignal;\n}\n\nexport const fetchPageviews = ({\n serverURL,\n lang,\n paths,\n signal,\n}: FetchPageviewOptions): Promise<number[]> =>\n fetchArticleCounter({\n serverURL,\n lang,\n paths,\n type: ['time'],\n signal,\n })\n // TODO: Improve this API\n .then((counts) => (Array.isArray(counts) ? counts : [counts])) as Promise<\n number[]\n >;\n\nexport interface UpdatePageviewOptions {\n serverURL: string;\n lang: string;\n path: string;\n action?: 'inc' | 'desc';\n}\n\nexport const updatePageviews = (\n options: UpdatePageviewOptions\n): Promise<number> =>\n updateArticleCounter({\n ...options,\n type: 'time',\n });\n","import { errorCheck } from './utils';\nimport type { WalineComment } from '../typings';\n\nexport interface FetchRecentCommentOptions {\n serverURL: string;\n lang: string;\n count: number;\n signal: AbortSignal;\n token?: string;\n}\n\nexport const fetchRecentComment = ({\n serverURL,\n lang,\n count,\n signal,\n token,\n}: FetchRecentCommentOptions): Promise<WalineComment[]> => {\n const headers: Record<string, string> = {};\n\n if (token) headers.Authorization = `Bearer ${token}`;\n\n return fetch(`${serverURL}/comment?type=recent&count=${count}&lang=${lang}`, {\n signal,\n headers,\n })\n .then((resp) => resp.json() as Promise<WalineComment[]>)\n .then((data) => errorCheck(data, 'recent comment'));\n};\n","/* eslint-disable @typescript-eslint/no-unsafe-member-access */\n\nexport interface LoginOptions {\n lang: string;\n serverURL: string;\n}\n\nexport interface UserInfo {\n // eslint-disable-next-line @typescript-eslint/naming-convention\n display_name: string;\n email: string;\n url: string;\n token: string;\n avatar: string;\n mailMd5: string;\n objectId: string | number;\n type: 'administrator' | 'guest';\n}\n\nexport const login = ({\n lang,\n serverURL,\n}: LoginOptions): Promise<UserInfo & { remember: boolean }> => {\n const width = 450;\n const height = 450;\n const left = (window.innerWidth - width) / 2;\n const top = (window.innerHeight - height) / 2;\n\n const handler = window.open(\n `${serverURL}/ui/login?lng=${encodeURIComponent(lang)}`,\n '_blank',\n `width=${width},height=${height},left=${left},top=${top},scrollbars=no,resizable=no,status=no,location=no,toolbar=no,menubar=no`\n );\n\n handler?.postMessage({ type: 'TOKEN', data: null }, '*');\n\n return new Promise((resolve) => {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const receiver = ({ data }: any): void => {\n if (!data || typeof data !== 'object' || data.type !== 'userInfo') return;\n\n if (data.data.token) {\n handler?.close();\n\n window.removeEventListener('message', receiver);\n\n resolve(data.data as UserInfo & { remember: boolean });\n }\n };\n\n window.addEventListener('message', receiver);\n });\n};\n"],"names":["JSON_HEADERS","errorCheck","data","name","errno","TypeError","errmsg","fetchArticleCounter","serverURL","lang","paths","type","signal","fetch","encodeURIComponent","join","then","resp","json","updateArticleCounter","path","action","method","headers","body","JSON","stringify","token","objectId","Authorization","page","pageSize","sortBy","counts","Array","isArray","count","like","left","window","innerWidth","top","innerHeight","handler","open","postMessage","Promise","resolve","receiver","close","removeEventListener","addEventListener","comment","eid","options"],"mappings":"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"}
1
+ {"version":3,"file":"api.cjs","sources":["../src/api/utils.ts","../src/api/articleCounter.ts","../src/api/comment.ts","../src/api/commentCount.ts","../src/api/pageview.ts","../src/api/recentComment.ts","../src/api/user.ts","../src/api/login.ts"],"sourcesContent":["export interface FetchErrorData {\n errno: number;\n errmsg: string;\n}\n\nexport const JSON_HEADERS: Record<string, string> = {\n // eslint-disable-next-line @typescript-eslint/naming-convention\n 'Content-Type': 'application/json',\n};\n\nexport const errorCheck = <T = unknown>(\n data: T | FetchErrorData,\n name = ''\n): T => {\n if (typeof data === 'object' && (data as FetchErrorData).errno)\n throw new TypeError(\n `Fetch ${name} failed with ${(data as FetchErrorData).errno}: ${\n (data as FetchErrorData).errmsg\n }`\n );\n\n return data as T;\n};\n","import { JSON_HEADERS, errorCheck } from './utils';\n\nexport interface FetchArticleCounterOptions {\n serverURL: string;\n lang: string;\n paths: string[];\n signal: AbortSignal;\n type: string[];\n}\n\nexport const fetchArticleCounter = ({\n serverURL,\n lang,\n paths,\n type,\n signal,\n}: FetchArticleCounterOptions): Promise<\n Record<string, number>[] | Record<string, number> | number[] | number\n> =>\n fetch(\n `${serverURL}/article?path=${encodeURIComponent(\n paths.join(',')\n )}&type=${encodeURIComponent(type.join(','))}&lang=${lang}`,\n { signal }\n )\n .then(\n (resp) =>\n resp.json() as Promise<Record<string, number>[] | number[] | number>\n )\n .then((data) => errorCheck(data, 'article count'));\n\nexport interface UpdateArticleCounterOptions {\n serverURL: string;\n lang: string;\n path: string;\n type: string;\n action?: 'inc' | 'desc';\n}\n\nexport const updateArticleCounter = ({\n serverURL,\n lang,\n path,\n type,\n action,\n}: UpdateArticleCounterOptions): Promise<number> =>\n fetch(`${serverURL}/article?lang=${lang}`, {\n method: 'POST',\n headers: JSON_HEADERS,\n body: JSON.stringify({ path, type, action }),\n })\n .then((resp) => resp.json() as Promise<number>)\n .then((data) => errorCheck(data, 'article count'));\n","import { JSON_HEADERS, errorCheck } from './utils';\nimport type { WalineComment, WalineCommentData } from '../typings';\n\nexport interface FetchCommentOptions {\n serverURL: string;\n path: string;\n page: number;\n pageSize: number;\n sortBy: string;\n signal: AbortSignal;\n token?: string;\n lang: string;\n}\n\nexport interface CommentData {\n count: number;\n data: WalineComment[];\n totalPages: number;\n}\n\nexport const fetchComment = ({\n serverURL,\n lang,\n path,\n page,\n pageSize,\n sortBy,\n signal,\n token,\n}: FetchCommentOptions): Promise<CommentData> => {\n const headers: Record<string, string> = {};\n\n if (token) headers.Authorization = `Bearer ${token}`;\n\n return fetch(\n `${serverURL}/comment?path=${encodeURIComponent(\n path\n )}&pageSize=${pageSize}&page=${page}&lang=${lang}&sortBy=${sortBy}`,\n { signal, headers }\n )\n .then((resp) => resp.json() as Promise<CommentData>)\n .then((data) => errorCheck(data, 'comment data'));\n};\n\nexport interface PostCommentOptions {\n serverURL: string;\n lang: string;\n token?: string;\n comment: WalineCommentData;\n}\n\nexport interface PostCommentResponse {\n data?: WalineComment;\n errmsg?: string;\n}\n\nexport const postComment = ({\n serverURL,\n lang,\n token,\n comment,\n}: PostCommentOptions): Promise<PostCommentResponse> => {\n const headers: Record<string, string> = {\n // eslint-disable-next-line @typescript-eslint/naming-convention\n 'Content-Type': 'application/json',\n };\n\n if (token) headers.Authorization = `Bearer ${token}`;\n\n if (comment.eid) {\n return fetch(`${serverURL}/comment/${comment.eid}?lang=${lang}`, {\n method: 'PUT',\n headers,\n body: JSON.stringify(comment),\n }).then((resp) => resp.json() as Promise<PostCommentResponse>);\n }\n\n return fetch(`${serverURL}/comment?lang=${lang}`, {\n method: 'POST',\n headers,\n body: JSON.stringify(comment),\n }).then((resp) => resp.json() as Promise<PostCommentResponse>);\n};\n\nexport interface DeleteCommentOptions {\n serverURL: string;\n lang: string;\n token: string;\n objectId: string | number;\n}\n\nexport const deleteComment = ({\n serverURL,\n lang,\n token,\n objectId,\n}: DeleteCommentOptions): Promise<void> =>\n fetch(`${serverURL}/comment/${objectId}?lang=${lang}`, {\n method: 'DELETE',\n headers: {\n Authorization: `Bearer ${token}`,\n },\n }).then((resp) => resp.json() as Promise<void>);\n\nexport interface LikeCommentOptions {\n serverURL: string;\n lang: string;\n objectId: number | string;\n like: boolean;\n}\n\nexport const likeComment = ({\n serverURL,\n lang,\n objectId,\n like,\n}: LikeCommentOptions): Promise<void> =>\n fetch(`${serverURL}/comment/${objectId}?lang=${lang}`, {\n method: 'PUT',\n headers: JSON_HEADERS,\n body: JSON.stringify({ like }),\n }).then((resp) => resp.json() as Promise<void>);\n\nexport interface UpdateCommentOptions {\n serverURL: string;\n lang: string;\n token: string;\n objectId: number | string;\n status?: 'approved' | 'waiting' | 'spam';\n sticky?: number;\n}\n\nexport const updateComment = ({\n serverURL,\n lang,\n token,\n objectId,\n ...data\n}: UpdateCommentOptions): Promise<void> =>\n fetch(`${serverURL}/comment/${objectId}?lang=${lang}`, {\n method: 'PUT',\n headers: {\n ...JSON_HEADERS,\n Authorization: `Bearer ${token}`,\n },\n body: JSON.stringify(data),\n }).then((resp) => resp.json() as Promise<void>);\n","import { errorCheck } from './utils';\n\nexport interface FetchCommentCountOptions {\n serverURL: string;\n lang: string;\n paths: string[];\n signal: AbortSignal;\n}\n\nexport const fetchCommentCount = ({\n serverURL,\n lang,\n paths,\n signal,\n}: FetchCommentCountOptions): Promise<number[]> => {\n const headers: Record<string, string> = {};\n\n return (\n fetch(\n `${serverURL}/comment?type=count&url=${encodeURIComponent(\n paths.join(',')\n )}&lang=${lang}`,\n { signal, headers }\n )\n .then((resp) => resp.json() as Promise<number | number[]>)\n .then((data) => errorCheck(data, 'comment count'))\n // TODO: Improve this API\n .then((counts) => (Array.isArray(counts) ? counts : [counts]))\n );\n};\n","import { fetchArticleCounter, updateArticleCounter } from './articleCounter';\n\ninterface FetchPageviewOptions {\n serverURL: string;\n lang: string;\n paths: string[];\n signal: AbortSignal;\n}\n\nexport const fetchPageviews = ({\n serverURL,\n lang,\n paths,\n signal,\n}: FetchPageviewOptions): Promise<number[]> =>\n fetchArticleCounter({\n serverURL,\n lang,\n paths,\n type: ['time'],\n signal,\n })\n // TODO: Improve this API\n .then((counts) => (Array.isArray(counts) ? counts : [counts])) as Promise<\n number[]\n >;\n\nexport interface UpdatePageviewOptions {\n serverURL: string;\n lang: string;\n path: string;\n action?: 'inc' | 'desc';\n}\n\nexport const updatePageviews = (\n options: UpdatePageviewOptions\n): Promise<number> =>\n updateArticleCounter({\n ...options,\n type: 'time',\n });\n","import { errorCheck } from './utils';\nimport type { WalineComment } from '../typings';\n\nexport interface FetchRecentCommentOptions {\n serverURL: string;\n lang: string;\n count: number;\n signal: AbortSignal;\n token?: string;\n}\n\nexport const fetchRecentComment = ({\n serverURL,\n lang,\n count,\n signal,\n token,\n}: FetchRecentCommentOptions): Promise<WalineComment[]> => {\n const headers: Record<string, string> = {};\n\n if (token) headers.Authorization = `Bearer ${token}`;\n\n return fetch(`${serverURL}/comment?type=recent&count=${count}&lang=${lang}`, {\n signal,\n headers,\n })\n .then((resp) => resp.json() as Promise<WalineComment[]>)\n .then((data) => errorCheck(data, 'recent comment'));\n};\n","import { WalineComment } from '../typings';\nimport { errorCheck } from './utils';\n\nexport interface FetchUserListOptions {\n serverURL: string;\n pageSize: number;\n signal: AbortSignal;\n lang: string;\n}\n\nexport interface WalineUser\n extends Pick<WalineComment, 'nick' | 'link' | 'avatar' | 'label' | 'level'> {\n count: number;\n}\n\nexport const fetchUserList = ({\n serverURL,\n signal,\n pageSize,\n lang,\n}: FetchUserListOptions): Promise<WalineUser[]> => {\n return fetch(`${serverURL}/user?pageSize=${pageSize}&lang=${lang}`, {\n signal,\n })\n .then(\n (resp) =>\n resp.json() as Promise<{\n errno: number;\n message: string;\n data: WalineUser[];\n }>\n )\n .then((resp) => errorCheck(resp, 'user list'))\n .then((resp) => resp.data);\n};\n","/* eslint-disable @typescript-eslint/no-unsafe-member-access */\n\nexport interface LoginOptions {\n lang: string;\n serverURL: string;\n}\n\nexport interface UserInfo {\n // eslint-disable-next-line @typescript-eslint/naming-convention\n display_name: string;\n email: string;\n url: string;\n token: string;\n avatar: string;\n mailMd5: string;\n objectId: string | number;\n type: 'administrator' | 'guest';\n}\n\nexport const login = ({\n lang,\n serverURL,\n}: LoginOptions): Promise<UserInfo & { remember: boolean }> => {\n const width = 450;\n const height = 450;\n const left = (window.innerWidth - width) / 2;\n const top = (window.innerHeight - height) / 2;\n\n const handler = window.open(\n `${serverURL}/ui/login?lng=${encodeURIComponent(lang)}`,\n '_blank',\n `width=${width},height=${height},left=${left},top=${top},scrollbars=no,resizable=no,status=no,location=no,toolbar=no,menubar=no`\n );\n\n handler?.postMessage({ type: 'TOKEN', data: null }, '*');\n\n return new Promise((resolve) => {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const receiver = ({ data }: any): void => {\n if (!data || typeof data !== 'object' || data.type !== 'userInfo') return;\n\n if (data.data.token) {\n handler?.close();\n\n window.removeEventListener('message', receiver);\n\n resolve(data.data as UserInfo & { remember: boolean });\n }\n };\n\n window.addEventListener('message', receiver);\n });\n};\n"],"names":["JSON_HEADERS","errorCheck","data","name","errno","TypeError","errmsg","fetchArticleCounter","serverURL","lang","paths","type","signal","fetch","encodeURIComponent","join","then","resp","json","updateArticleCounter","path","action","method","headers","body","JSON","stringify","token","objectId","Authorization","page","pageSize","sortBy","counts","Array","isArray","count","like","left","window","innerWidth","top","innerHeight","handler","open","postMessage","Promise","resolve","receiver","close","removeEventListener","addEventListener","comment","eid","options"],"mappings":"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"}
package/dist/api.d.cts CHANGED
@@ -192,4 +192,15 @@ interface FetchRecentCommentOptions {
192
192
  }
193
193
  declare const fetchRecentComment: ({ serverURL, lang, count, signal, token, }: FetchRecentCommentOptions) => Promise<WalineComment[]>;
194
194
 
195
- export { CommentData, DeleteCommentOptions, FetchArticleCounterOptions, FetchCommentCountOptions, FetchCommentOptions, FetchRecentCommentOptions, LikeCommentOptions, LoginOptions, PostCommentOptions, PostCommentResponse, UpdateArticleCounterOptions, UpdateCommentOptions, UpdatePageviewOptions, UserInfo, deleteComment, fetchArticleCounter, fetchComment, fetchCommentCount, fetchPageviews, fetchRecentComment, likeComment, login, postComment, updateArticleCounter, updateComment, updatePageviews };
195
+ interface FetchUserListOptions {
196
+ serverURL: string;
197
+ pageSize: number;
198
+ signal: AbortSignal;
199
+ lang: string;
200
+ }
201
+ interface WalineUser extends Pick<WalineComment, 'nick' | 'link' | 'avatar' | 'label' | 'level'> {
202
+ count: number;
203
+ }
204
+ declare const fetchUserList: ({ serverURL, signal, pageSize, lang, }: FetchUserListOptions) => Promise<WalineUser[]>;
205
+
206
+ export { CommentData, DeleteCommentOptions, FetchArticleCounterOptions, FetchCommentCountOptions, FetchCommentOptions, FetchRecentCommentOptions, FetchUserListOptions, LikeCommentOptions, LoginOptions, PostCommentOptions, PostCommentResponse, UpdateArticleCounterOptions, UpdateCommentOptions, UpdatePageviewOptions, UserInfo, WalineUser, deleteComment, fetchArticleCounter, fetchComment, fetchCommentCount, fetchPageviews, fetchRecentComment, fetchUserList, likeComment, login, postComment, updateArticleCounter, updateComment, updatePageviews };
package/dist/api.d.mts CHANGED
@@ -192,4 +192,15 @@ interface FetchRecentCommentOptions {
192
192
  }
193
193
  declare const fetchRecentComment: ({ serverURL, lang, count, signal, token, }: FetchRecentCommentOptions) => Promise<WalineComment[]>;
194
194
 
195
- export { CommentData, DeleteCommentOptions, FetchArticleCounterOptions, FetchCommentCountOptions, FetchCommentOptions, FetchRecentCommentOptions, LikeCommentOptions, LoginOptions, PostCommentOptions, PostCommentResponse, UpdateArticleCounterOptions, UpdateCommentOptions, UpdatePageviewOptions, UserInfo, deleteComment, fetchArticleCounter, fetchComment, fetchCommentCount, fetchPageviews, fetchRecentComment, likeComment, login, postComment, updateArticleCounter, updateComment, updatePageviews };
195
+ interface FetchUserListOptions {
196
+ serverURL: string;
197
+ pageSize: number;
198
+ signal: AbortSignal;
199
+ lang: string;
200
+ }
201
+ interface WalineUser extends Pick<WalineComment, 'nick' | 'link' | 'avatar' | 'label' | 'level'> {
202
+ count: number;
203
+ }
204
+ declare const fetchUserList: ({ serverURL, signal, pageSize, lang, }: FetchUserListOptions) => Promise<WalineUser[]>;
205
+
206
+ export { CommentData, DeleteCommentOptions, FetchArticleCounterOptions, FetchCommentCountOptions, FetchCommentOptions, FetchRecentCommentOptions, FetchUserListOptions, LikeCommentOptions, LoginOptions, PostCommentOptions, PostCommentResponse, UpdateArticleCounterOptions, UpdateCommentOptions, UpdatePageviewOptions, UserInfo, WalineUser, deleteComment, fetchArticleCounter, fetchComment, fetchCommentCount, fetchPageviews, fetchRecentComment, fetchUserList, likeComment, login, postComment, updateArticleCounter, updateComment, updatePageviews };
package/dist/api.d.ts CHANGED
@@ -192,4 +192,15 @@ interface FetchRecentCommentOptions {
192
192
  }
193
193
  declare const fetchRecentComment: ({ serverURL, lang, count, signal, token, }: FetchRecentCommentOptions) => Promise<WalineComment[]>;
194
194
 
195
- export { CommentData, DeleteCommentOptions, FetchArticleCounterOptions, FetchCommentCountOptions, FetchCommentOptions, FetchRecentCommentOptions, LikeCommentOptions, LoginOptions, PostCommentOptions, PostCommentResponse, UpdateArticleCounterOptions, UpdateCommentOptions, UpdatePageviewOptions, UserInfo, deleteComment, fetchArticleCounter, fetchComment, fetchCommentCount, fetchPageviews, fetchRecentComment, likeComment, login, postComment, updateArticleCounter, updateComment, updatePageviews };
195
+ interface FetchUserListOptions {
196
+ serverURL: string;
197
+ pageSize: number;
198
+ signal: AbortSignal;
199
+ lang: string;
200
+ }
201
+ interface WalineUser extends Pick<WalineComment, 'nick' | 'link' | 'avatar' | 'label' | 'level'> {
202
+ count: number;
203
+ }
204
+ declare const fetchUserList: ({ serverURL, signal, pageSize, lang, }: FetchUserListOptions) => Promise<WalineUser[]>;
205
+
206
+ export { CommentData, DeleteCommentOptions, FetchArticleCounterOptions, FetchCommentCountOptions, FetchCommentOptions, FetchRecentCommentOptions, FetchUserListOptions, LikeCommentOptions, LoginOptions, PostCommentOptions, PostCommentResponse, UpdateArticleCounterOptions, UpdateCommentOptions, UpdatePageviewOptions, UserInfo, WalineUser, deleteComment, fetchArticleCounter, fetchComment, fetchCommentCount, fetchPageviews, fetchRecentComment, fetchUserList, likeComment, login, postComment, updateArticleCounter, updateComment, updatePageviews };
package/dist/api.mjs CHANGED
@@ -1,2 +1,2 @@
1
- const e={"Content-Type":"application/json"},n=(e,n="")=>{if("object"==typeof e&&e.errno)throw new TypeError(`Fetch ${n} failed with ${e.errno}: ${e.errmsg}`);return e},t=({serverURL:e,lang:t,paths:o,type:r,signal:a})=>fetch(`${e}/article?path=${encodeURIComponent(o.join(","))}&type=${encodeURIComponent(r.join(","))}&lang=${t}`,{signal:a}).then((e=>e.json())).then((e=>n(e,"article count"))),o=({serverURL:t,lang:o,path:r,type:a,action:s})=>fetch(`${t}/article?lang=${o}`,{method:"POST",headers:e,body:JSON.stringify({path:r,type:a,action:s})}).then((e=>e.json())).then((e=>n(e,"article count"))),r=({serverURL:e,lang:t,path:o,page:r,pageSize:a,sortBy:s,signal:i,token:h})=>{const c={};return h&&(c.Authorization=`Bearer ${h}`),fetch(`${e}/comment?path=${encodeURIComponent(o)}&pageSize=${a}&page=${r}&lang=${t}&sortBy=${s}`,{signal:i,headers:c}).then((e=>e.json())).then((e=>n(e,"comment data")))},a=({serverURL:e,lang:n,token:t,comment:o})=>{const r={"Content-Type":"application/json"};return t&&(r.Authorization=`Bearer ${t}`),o.eid?fetch(`${e}/comment/${o.eid}?lang=${n}`,{method:"PUT",headers:r,body:JSON.stringify(o)}).then((e=>e.json())):fetch(`${e}/comment?lang=${n}`,{method:"POST",headers:r,body:JSON.stringify(o)}).then((e=>e.json()))},s=({serverURL:e,lang:n,token:t,objectId:o})=>fetch(`${e}/comment/${o}?lang=${n}`,{method:"DELETE",headers:{Authorization:`Bearer ${t}`}}).then((e=>e.json())),i=({serverURL:n,lang:t,objectId:o,like:r})=>fetch(`${n}/comment/${o}?lang=${t}`,{method:"PUT",headers:e,body:JSON.stringify({like:r})}).then((e=>e.json())),h=({serverURL:n,lang:t,token:o,objectId:r,...a})=>fetch(`${n}/comment/${r}?lang=${t}`,{method:"PUT",headers:{...e,Authorization:`Bearer ${o}`},body:JSON.stringify(a)}).then((e=>e.json())),c=({serverURL:e,lang:t,paths:o,signal:r})=>fetch(`${e}/comment?type=count&url=${encodeURIComponent(o.join(","))}&lang=${t}`,{signal:r,headers:{}}).then((e=>e.json())).then((e=>n(e,"comment count"))).then((e=>Array.isArray(e)?e:[e])),l=({lang:e,serverURL:n})=>{const t=(window.innerWidth-450)/2,o=(window.innerHeight-450)/2,r=window.open(`${n}/ui/login?lng=${encodeURIComponent(e)}`,"_blank",`width=450,height=450,left=${t},top=${o},scrollbars=no,resizable=no,status=no,location=no,toolbar=no,menubar=no`);return r?.postMessage({type:"TOKEN",data:null},"*"),new Promise((e=>{const n=({data:t})=>{t&&"object"==typeof t&&"userInfo"===t.type&&t.data.token&&(r?.close(),window.removeEventListener("message",n),e(t.data))};window.addEventListener("message",n)}))},g=({serverURL:e,lang:n,paths:o,signal:r})=>t({serverURL:e,lang:n,paths:o,type:["time"],signal:r}).then((e=>Array.isArray(e)?e:[e])),d=e=>o({...e,type:"time"}),$=({serverURL:e,lang:t,count:o,signal:r,token:a})=>{const s={};return a&&(s.Authorization=`Bearer ${a}`),fetch(`${e}/comment?type=recent&count=${o}&lang=${t}`,{signal:r,headers:s}).then((e=>e.json())).then((e=>n(e,"recent comment")))};export{s as deleteComment,t as fetchArticleCounter,r as fetchComment,c as fetchCommentCount,g as fetchPageviews,$ as fetchRecentComment,i as likeComment,l as login,a as postComment,o as updateArticleCounter,h as updateComment,d as updatePageviews};
1
+ const e={"Content-Type":"application/json"},n=(e,n="")=>{if("object"==typeof e&&e.errno)throw new TypeError(`Fetch ${n} failed with ${e.errno}: ${e.errmsg}`);return e},t=({serverURL:e,lang:t,paths:o,type:a,signal:r})=>fetch(`${e}/article?path=${encodeURIComponent(o.join(","))}&type=${encodeURIComponent(a.join(","))}&lang=${t}`,{signal:r}).then((e=>e.json())).then((e=>n(e,"article count"))),o=({serverURL:t,lang:o,path:a,type:r,action:s})=>fetch(`${t}/article?lang=${o}`,{method:"POST",headers:e,body:JSON.stringify({path:a,type:r,action:s})}).then((e=>e.json())).then((e=>n(e,"article count"))),a=({serverURL:e,lang:t,path:o,page:a,pageSize:r,sortBy:s,signal:i,token:h})=>{const c={};return h&&(c.Authorization=`Bearer ${h}`),fetch(`${e}/comment?path=${encodeURIComponent(o)}&pageSize=${r}&page=${a}&lang=${t}&sortBy=${s}`,{signal:i,headers:c}).then((e=>e.json())).then((e=>n(e,"comment data")))},r=({serverURL:e,lang:n,token:t,comment:o})=>{const a={"Content-Type":"application/json"};return t&&(a.Authorization=`Bearer ${t}`),o.eid?fetch(`${e}/comment/${o.eid}?lang=${n}`,{method:"PUT",headers:a,body:JSON.stringify(o)}).then((e=>e.json())):fetch(`${e}/comment?lang=${n}`,{method:"POST",headers:a,body:JSON.stringify(o)}).then((e=>e.json()))},s=({serverURL:e,lang:n,token:t,objectId:o})=>fetch(`${e}/comment/${o}?lang=${n}`,{method:"DELETE",headers:{Authorization:`Bearer ${t}`}}).then((e=>e.json())),i=({serverURL:n,lang:t,objectId:o,like:a})=>fetch(`${n}/comment/${o}?lang=${t}`,{method:"PUT",headers:e,body:JSON.stringify({like:a})}).then((e=>e.json())),h=({serverURL:n,lang:t,token:o,objectId:a,...r})=>fetch(`${n}/comment/${a}?lang=${t}`,{method:"PUT",headers:{...e,Authorization:`Bearer ${o}`},body:JSON.stringify(r)}).then((e=>e.json())),c=({serverURL:e,lang:t,paths:o,signal:a})=>fetch(`${e}/comment?type=count&url=${encodeURIComponent(o.join(","))}&lang=${t}`,{signal:a,headers:{}}).then((e=>e.json())).then((e=>n(e,"comment count"))).then((e=>Array.isArray(e)?e:[e])),l=({lang:e,serverURL:n})=>{const t=(window.innerWidth-450)/2,o=(window.innerHeight-450)/2,a=window.open(`${n}/ui/login?lng=${encodeURIComponent(e)}`,"_blank",`width=450,height=450,left=${t},top=${o},scrollbars=no,resizable=no,status=no,location=no,toolbar=no,menubar=no`);return a?.postMessage({type:"TOKEN",data:null},"*"),new Promise((e=>{const n=({data:t})=>{t&&"object"==typeof t&&"userInfo"===t.type&&t.data.token&&(a?.close(),window.removeEventListener("message",n),e(t.data))};window.addEventListener("message",n)}))},g=({serverURL:e,lang:n,paths:o,signal:a})=>t({serverURL:e,lang:n,paths:o,type:["time"],signal:a}).then((e=>Array.isArray(e)?e:[e])),$=e=>o({...e,type:"time"}),d=({serverURL:e,lang:t,count:o,signal:a,token:r})=>{const s={};return r&&(s.Authorization=`Bearer ${r}`),fetch(`${e}/comment?type=recent&count=${o}&lang=${t}`,{signal:a,headers:s}).then((e=>e.json())).then((e=>n(e,"recent comment")))},m=({serverURL:e,signal:t,pageSize:o,lang:a})=>fetch(`${e}/user?pageSize=${o}&lang=${a}`,{signal:t}).then((e=>e.json())).then((e=>n(e,"user list"))).then((e=>e.data));export{s as deleteComment,t as fetchArticleCounter,a as fetchComment,c as fetchCommentCount,g as fetchPageviews,d as fetchRecentComment,m as fetchUserList,i as likeComment,l as login,r as postComment,o as updateArticleCounter,h as updateComment,$ as updatePageviews};
2
2
  //# sourceMappingURL=api.mjs.map
package/dist/api.mjs.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"api.mjs","sources":["../src/api/utils.ts","../src/api/articleCounter.ts","../src/api/comment.ts","../src/api/commentCount.ts","../src/api/login.ts","../src/api/pageview.ts","../src/api/recentComment.ts"],"sourcesContent":["export interface FetchErrorData {\n errno: number;\n errmsg: string;\n}\n\nexport const JSON_HEADERS: Record<string, string> = {\n // eslint-disable-next-line @typescript-eslint/naming-convention\n 'Content-Type': 'application/json',\n};\n\nexport const errorCheck = <T = unknown>(\n data: T | FetchErrorData,\n name = ''\n): T => {\n if (typeof data === 'object' && (data as FetchErrorData).errno)\n throw new TypeError(\n `Fetch ${name} failed with ${(data as FetchErrorData).errno}: ${\n (data as FetchErrorData).errmsg\n }`\n );\n\n return data as T;\n};\n","import { JSON_HEADERS, errorCheck } from './utils';\n\nexport interface FetchArticleCounterOptions {\n serverURL: string;\n lang: string;\n paths: string[];\n signal: AbortSignal;\n type: string[];\n}\n\nexport const fetchArticleCounter = ({\n serverURL,\n lang,\n paths,\n type,\n signal,\n}: FetchArticleCounterOptions): Promise<\n Record<string, number>[] | Record<string, number> | number[] | number\n> =>\n fetch(\n `${serverURL}/article?path=${encodeURIComponent(\n paths.join(',')\n )}&type=${encodeURIComponent(type.join(','))}&lang=${lang}`,\n { signal }\n )\n .then(\n (resp) =>\n resp.json() as Promise<Record<string, number>[] | number[] | number>\n )\n .then((data) => errorCheck(data, 'article count'));\n\nexport interface UpdateArticleCounterOptions {\n serverURL: string;\n lang: string;\n path: string;\n type: string;\n action?: 'inc' | 'desc';\n}\n\nexport const updateArticleCounter = ({\n serverURL,\n lang,\n path,\n type,\n action,\n}: UpdateArticleCounterOptions): Promise<number> =>\n fetch(`${serverURL}/article?lang=${lang}`, {\n method: 'POST',\n headers: JSON_HEADERS,\n body: JSON.stringify({ path, type, action }),\n })\n .then((resp) => resp.json() as Promise<number>)\n .then((data) => errorCheck(data, 'article count'));\n","import { JSON_HEADERS, errorCheck } from './utils';\nimport type { WalineComment, WalineCommentData } from '../typings';\n\nexport interface FetchCommentOptions {\n serverURL: string;\n path: string;\n page: number;\n pageSize: number;\n sortBy: string;\n signal: AbortSignal;\n token?: string;\n lang: string;\n}\n\nexport interface CommentData {\n count: number;\n data: WalineComment[];\n totalPages: number;\n}\n\nexport const fetchComment = ({\n serverURL,\n lang,\n path,\n page,\n pageSize,\n sortBy,\n signal,\n token,\n}: FetchCommentOptions): Promise<CommentData> => {\n const headers: Record<string, string> = {};\n\n if (token) headers.Authorization = `Bearer ${token}`;\n\n return fetch(\n `${serverURL}/comment?path=${encodeURIComponent(\n path\n )}&pageSize=${pageSize}&page=${page}&lang=${lang}&sortBy=${sortBy}`,\n { signal, headers }\n )\n .then((resp) => resp.json() as Promise<CommentData>)\n .then((data) => errorCheck(data, 'comment data'));\n};\n\nexport interface PostCommentOptions {\n serverURL: string;\n lang: string;\n token?: string;\n comment: WalineCommentData;\n}\n\nexport interface PostCommentResponse {\n data?: WalineComment;\n errmsg?: string;\n}\n\nexport const postComment = ({\n serverURL,\n lang,\n token,\n comment,\n}: PostCommentOptions): Promise<PostCommentResponse> => {\n const headers: Record<string, string> = {\n // eslint-disable-next-line @typescript-eslint/naming-convention\n 'Content-Type': 'application/json',\n };\n\n if (token) headers.Authorization = `Bearer ${token}`;\n\n if (comment.eid) {\n return fetch(`${serverURL}/comment/${comment.eid}?lang=${lang}`, {\n method: 'PUT',\n headers,\n body: JSON.stringify(comment),\n }).then((resp) => resp.json() as Promise<PostCommentResponse>);\n }\n\n return fetch(`${serverURL}/comment?lang=${lang}`, {\n method: 'POST',\n headers,\n body: JSON.stringify(comment),\n }).then((resp) => resp.json() as Promise<PostCommentResponse>);\n};\n\nexport interface DeleteCommentOptions {\n serverURL: string;\n lang: string;\n token: string;\n objectId: string | number;\n}\n\nexport const deleteComment = ({\n serverURL,\n lang,\n token,\n objectId,\n}: DeleteCommentOptions): Promise<void> =>\n fetch(`${serverURL}/comment/${objectId}?lang=${lang}`, {\n method: 'DELETE',\n headers: {\n Authorization: `Bearer ${token}`,\n },\n }).then((resp) => resp.json() as Promise<void>);\n\nexport interface LikeCommentOptions {\n serverURL: string;\n lang: string;\n objectId: number | string;\n like: boolean;\n}\n\nexport const likeComment = ({\n serverURL,\n lang,\n objectId,\n like,\n}: LikeCommentOptions): Promise<void> =>\n fetch(`${serverURL}/comment/${objectId}?lang=${lang}`, {\n method: 'PUT',\n headers: JSON_HEADERS,\n body: JSON.stringify({ like }),\n }).then((resp) => resp.json() as Promise<void>);\n\nexport interface UpdateCommentOptions {\n serverURL: string;\n lang: string;\n token: string;\n objectId: number | string;\n status?: 'approved' | 'waiting' | 'spam';\n sticky?: number;\n}\n\nexport const updateComment = ({\n serverURL,\n lang,\n token,\n objectId,\n ...data\n}: UpdateCommentOptions): Promise<void> =>\n fetch(`${serverURL}/comment/${objectId}?lang=${lang}`, {\n method: 'PUT',\n headers: {\n ...JSON_HEADERS,\n Authorization: `Bearer ${token}`,\n },\n body: JSON.stringify(data),\n }).then((resp) => resp.json() as Promise<void>);\n","import { errorCheck } from './utils';\n\nexport interface FetchCommentCountOptions {\n serverURL: string;\n lang: string;\n paths: string[];\n signal: AbortSignal;\n}\n\nexport const fetchCommentCount = ({\n serverURL,\n lang,\n paths,\n signal,\n}: FetchCommentCountOptions): Promise<number[]> => {\n const headers: Record<string, string> = {};\n\n return (\n fetch(\n `${serverURL}/comment?type=count&url=${encodeURIComponent(\n paths.join(',')\n )}&lang=${lang}`,\n { signal, headers }\n )\n .then((resp) => resp.json() as Promise<number | number[]>)\n .then((data) => errorCheck(data, 'comment count'))\n // TODO: Improve this API\n .then((counts) => (Array.isArray(counts) ? counts : [counts]))\n );\n};\n","/* eslint-disable @typescript-eslint/no-unsafe-member-access */\n\nexport interface LoginOptions {\n lang: string;\n serverURL: string;\n}\n\nexport interface UserInfo {\n // eslint-disable-next-line @typescript-eslint/naming-convention\n display_name: string;\n email: string;\n url: string;\n token: string;\n avatar: string;\n mailMd5: string;\n objectId: string | number;\n type: 'administrator' | 'guest';\n}\n\nexport const login = ({\n lang,\n serverURL,\n}: LoginOptions): Promise<UserInfo & { remember: boolean }> => {\n const width = 450;\n const height = 450;\n const left = (window.innerWidth - width) / 2;\n const top = (window.innerHeight - height) / 2;\n\n const handler = window.open(\n `${serverURL}/ui/login?lng=${encodeURIComponent(lang)}`,\n '_blank',\n `width=${width},height=${height},left=${left},top=${top},scrollbars=no,resizable=no,status=no,location=no,toolbar=no,menubar=no`\n );\n\n handler?.postMessage({ type: 'TOKEN', data: null }, '*');\n\n return new Promise((resolve) => {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const receiver = ({ data }: any): void => {\n if (!data || typeof data !== 'object' || data.type !== 'userInfo') return;\n\n if (data.data.token) {\n handler?.close();\n\n window.removeEventListener('message', receiver);\n\n resolve(data.data as UserInfo & { remember: boolean });\n }\n };\n\n window.addEventListener('message', receiver);\n });\n};\n","import { fetchArticleCounter, updateArticleCounter } from './articleCounter';\n\ninterface FetchPageviewOptions {\n serverURL: string;\n lang: string;\n paths: string[];\n signal: AbortSignal;\n}\n\nexport const fetchPageviews = ({\n serverURL,\n lang,\n paths,\n signal,\n}: FetchPageviewOptions): Promise<number[]> =>\n fetchArticleCounter({\n serverURL,\n lang,\n paths,\n type: ['time'],\n signal,\n })\n // TODO: Improve this API\n .then((counts) => (Array.isArray(counts) ? counts : [counts])) as Promise<\n number[]\n >;\n\nexport interface UpdatePageviewOptions {\n serverURL: string;\n lang: string;\n path: string;\n action?: 'inc' | 'desc';\n}\n\nexport const updatePageviews = (\n options: UpdatePageviewOptions\n): Promise<number> =>\n updateArticleCounter({\n ...options,\n type: 'time',\n });\n","import { errorCheck } from './utils';\nimport type { WalineComment } from '../typings';\n\nexport interface FetchRecentCommentOptions {\n serverURL: string;\n lang: string;\n count: number;\n signal: AbortSignal;\n token?: string;\n}\n\nexport const fetchRecentComment = ({\n serverURL,\n lang,\n count,\n signal,\n token,\n}: FetchRecentCommentOptions): Promise<WalineComment[]> => {\n const headers: Record<string, string> = {};\n\n if (token) headers.Authorization = `Bearer ${token}`;\n\n return fetch(`${serverURL}/comment?type=recent&count=${count}&lang=${lang}`, {\n signal,\n headers,\n })\n .then((resp) => resp.json() as Promise<WalineComment[]>)\n .then((data) => errorCheck(data, 'recent comment'));\n};\n"],"names":["JSON_HEADERS","errorCheck","data","name","errno","TypeError","errmsg","fetchArticleCounter","serverURL","lang","paths","type","signal","fetch","encodeURIComponent","join","then","resp","json","updateArticleCounter","path","action","method","headers","body","JSON","stringify","fetchComment","page","pageSize","sortBy","token","Authorization","postComment","comment","eid","deleteComment","objectId","likeComment","like","updateComment","fetchCommentCount","counts","Array","isArray","login","left","window","innerWidth","top","innerHeight","handler","open","postMessage","Promise","resolve","receiver","close","removeEventListener","addEventListener","fetchPageviews","updatePageviews","options","fetchRecentComment","count"],"mappings":"AAKO,MAAMA,EAAuC,CAElD,eAAgB,oBAGLC,EAAa,CACxBC,EACAC,EAAO,MAEP,GAAoB,iBAATD,GAAsBA,EAAwBE,MACvD,MAAM,IAAIC,UACR,SAASF,iBAAqBD,EAAwBE,UACnDF,EAAwBI,UAI/B,OAAOJ,CAAS,ECXLK,EAAsB,EACjCC,YACAC,OACAC,QACAC,OACAC,YAIAC,MACE,GAAGL,kBAA0BM,mBAC3BJ,EAAMK,KAAK,cACHD,mBAAmBH,EAAKI,KAAK,cAAcN,IACrD,CAAEG,WAEDI,MACEC,GACCA,EAAKC,SAERF,MAAMd,GAASD,EAAWC,EAAM,mBAUxBiB,EAAuB,EAClCX,YACAC,OACAW,OACAT,OACAU,YAEAR,MAAM,GAAGL,kBAA0BC,IAAQ,CACzCa,OAAQ,OACRC,QAASvB,EACTwB,KAAMC,KAAKC,UAAU,CAAEN,OAAMT,OAAMU,aAElCL,MAAMC,GAASA,EAAKC,SACpBF,MAAMd,GAASD,EAAWC,EAAM,mBChCxByB,EAAe,EAC1BnB,YACAC,OACAW,OACAQ,OACAC,WACAC,SACAlB,SACAmB,YAEA,MAAMR,EAAkC,CAAA,EAIxC,OAFIQ,IAAOR,EAAQS,cAAgB,UAAUD,KAEtClB,MACL,GAAGL,kBAA0BM,mBAC3BM,eACYS,UAAiBD,UAAanB,YAAeqB,IAC3D,CAAElB,SAAQW,YAETP,MAAMC,GAASA,EAAKC,SACpBF,MAAMd,GAASD,EAAWC,EAAM,iBAAgB,EAexC+B,EAAc,EACzBzB,YACAC,OACAsB,QACAG,cAEA,MAAMX,EAAkC,CAEtC,eAAgB,oBAKlB,OAFIQ,IAAOR,EAAQS,cAAgB,UAAUD,KAEzCG,EAAQC,IACHtB,MAAM,GAAGL,aAAqB0B,EAAQC,YAAY1B,IAAQ,CAC/Da,OAAQ,MACRC,UACAC,KAAMC,KAAKC,UAAUQ,KACpBlB,MAAMC,GAASA,EAAKC,SAGlBL,MAAM,GAAGL,kBAA0BC,IAAQ,CAChDa,OAAQ,OACRC,UACAC,KAAMC,KAAKC,UAAUQ,KACpBlB,MAAMC,GAASA,EAAKC,QAAuC,EAUnDkB,EAAgB,EAC3B5B,YACAC,OACAsB,QACAM,cAEAxB,MAAM,GAAGL,aAAqB6B,UAAiB5B,IAAQ,CACrDa,OAAQ,SACRC,QAAS,CACPS,cAAe,UAAUD,OAE1Bf,MAAMC,GAASA,EAAKC,SASZoB,EAAc,EACzB9B,YACAC,OACA4B,WACAE,UAEA1B,MAAM,GAAGL,aAAqB6B,UAAiB5B,IAAQ,CACrDa,OAAQ,MACRC,QAASvB,EACTwB,KAAMC,KAAKC,UAAU,CAAEa,WACtBvB,MAAMC,GAASA,EAAKC,SAWZsB,EAAgB,EAC3BhC,YACAC,OACAsB,QACAM,cACGnC,KAEHW,MAAM,GAAGL,aAAqB6B,UAAiB5B,IAAQ,CACrDa,OAAQ,MACRC,QAAS,IACJvB,EACHgC,cAAe,UAAUD,KAE3BP,KAAMC,KAAKC,UAAUxB,KACpBc,MAAMC,GAASA,EAAKC,SCzIZuB,EAAoB,EAC/BjC,YACAC,OACAC,QACAE,YAKEC,MACE,GAAGL,4BAAoCM,mBACrCJ,EAAMK,KAAK,cACHN,IACV,CAAEG,SAAQW,QAP0B,CAAA,IASnCP,MAAMC,GAASA,EAAKC,SACpBF,MAAMd,GAASD,EAAWC,EAAM,mBAEhCc,MAAM0B,GAAYC,MAAMC,QAAQF,GAAUA,EAAS,CAACA,KCR9CG,EAAQ,EACnBpC,OACAD,gBAEA,MAEMsC,GAAQC,OAAOC,WAFP,KAE6B,EACrCC,GAAOF,OAAOG,YAFL,KAE6B,EAEtCC,EAAUJ,OAAOK,KACrB,GAAG5C,kBAA0BM,mBAAmBL,KAChD,SACA,6BAAwCqC,SAAYG,4EAKtD,OAFAE,GAASE,YAAY,CAAE1C,KAAM,QAAST,KAAM,MAAQ,KAE7C,IAAIoD,SAASC,IAElB,MAAMC,EAAW,EAAGtD,WACbA,GAAwB,iBAATA,GAAmC,aAAdA,EAAKS,MAE1CT,EAAKA,KAAK6B,QACZoB,GAASM,QAETV,OAAOW,oBAAoB,UAAWF,GAEtCD,EAAQrD,EAAKA,MACd,EAGH6C,OAAOY,iBAAiB,UAAWH,EAAS,GAC5C,EC1CSI,EAAiB,EAC5BpD,YACAC,OACAC,QACAE,YAEAL,EAAoB,CAClBC,YACAC,OACAC,QACAC,KAAM,CAAC,QACPC,WAGCI,MAAM0B,GAAYC,MAAMC,QAAQF,GAAUA,EAAS,CAACA,KAW5CmB,EACXC,GAEA3C,EAAqB,IAChB2C,EACHnD,KAAM,SC5BGoD,EAAqB,EAChCvD,YACAC,OACAuD,QACApD,SACAmB,YAEA,MAAMR,EAAkC,CAAA,EAIxC,OAFIQ,IAAOR,EAAQS,cAAgB,UAAUD,KAEtClB,MAAM,GAAGL,+BAAuCwD,UAAcvD,IAAQ,CAC3EG,SACAW,YAECP,MAAMC,GAASA,EAAKC,SACpBF,MAAMd,GAASD,EAAWC,EAAM,mBAAkB"}
1
+ {"version":3,"file":"api.mjs","sources":["../src/api/utils.ts","../src/api/articleCounter.ts","../src/api/comment.ts","../src/api/commentCount.ts","../src/api/login.ts","../src/api/pageview.ts","../src/api/recentComment.ts","../src/api/user.ts"],"sourcesContent":["export interface FetchErrorData {\n errno: number;\n errmsg: string;\n}\n\nexport const JSON_HEADERS: Record<string, string> = {\n // eslint-disable-next-line @typescript-eslint/naming-convention\n 'Content-Type': 'application/json',\n};\n\nexport const errorCheck = <T = unknown>(\n data: T | FetchErrorData,\n name = ''\n): T => {\n if (typeof data === 'object' && (data as FetchErrorData).errno)\n throw new TypeError(\n `Fetch ${name} failed with ${(data as FetchErrorData).errno}: ${\n (data as FetchErrorData).errmsg\n }`\n );\n\n return data as T;\n};\n","import { JSON_HEADERS, errorCheck } from './utils';\n\nexport interface FetchArticleCounterOptions {\n serverURL: string;\n lang: string;\n paths: string[];\n signal: AbortSignal;\n type: string[];\n}\n\nexport const fetchArticleCounter = ({\n serverURL,\n lang,\n paths,\n type,\n signal,\n}: FetchArticleCounterOptions): Promise<\n Record<string, number>[] | Record<string, number> | number[] | number\n> =>\n fetch(\n `${serverURL}/article?path=${encodeURIComponent(\n paths.join(',')\n )}&type=${encodeURIComponent(type.join(','))}&lang=${lang}`,\n { signal }\n )\n .then(\n (resp) =>\n resp.json() as Promise<Record<string, number>[] | number[] | number>\n )\n .then((data) => errorCheck(data, 'article count'));\n\nexport interface UpdateArticleCounterOptions {\n serverURL: string;\n lang: string;\n path: string;\n type: string;\n action?: 'inc' | 'desc';\n}\n\nexport const updateArticleCounter = ({\n serverURL,\n lang,\n path,\n type,\n action,\n}: UpdateArticleCounterOptions): Promise<number> =>\n fetch(`${serverURL}/article?lang=${lang}`, {\n method: 'POST',\n headers: JSON_HEADERS,\n body: JSON.stringify({ path, type, action }),\n })\n .then((resp) => resp.json() as Promise<number>)\n .then((data) => errorCheck(data, 'article count'));\n","import { JSON_HEADERS, errorCheck } from './utils';\nimport type { WalineComment, WalineCommentData } from '../typings';\n\nexport interface FetchCommentOptions {\n serverURL: string;\n path: string;\n page: number;\n pageSize: number;\n sortBy: string;\n signal: AbortSignal;\n token?: string;\n lang: string;\n}\n\nexport interface CommentData {\n count: number;\n data: WalineComment[];\n totalPages: number;\n}\n\nexport const fetchComment = ({\n serverURL,\n lang,\n path,\n page,\n pageSize,\n sortBy,\n signal,\n token,\n}: FetchCommentOptions): Promise<CommentData> => {\n const headers: Record<string, string> = {};\n\n if (token) headers.Authorization = `Bearer ${token}`;\n\n return fetch(\n `${serverURL}/comment?path=${encodeURIComponent(\n path\n )}&pageSize=${pageSize}&page=${page}&lang=${lang}&sortBy=${sortBy}`,\n { signal, headers }\n )\n .then((resp) => resp.json() as Promise<CommentData>)\n .then((data) => errorCheck(data, 'comment data'));\n};\n\nexport interface PostCommentOptions {\n serverURL: string;\n lang: string;\n token?: string;\n comment: WalineCommentData;\n}\n\nexport interface PostCommentResponse {\n data?: WalineComment;\n errmsg?: string;\n}\n\nexport const postComment = ({\n serverURL,\n lang,\n token,\n comment,\n}: PostCommentOptions): Promise<PostCommentResponse> => {\n const headers: Record<string, string> = {\n // eslint-disable-next-line @typescript-eslint/naming-convention\n 'Content-Type': 'application/json',\n };\n\n if (token) headers.Authorization = `Bearer ${token}`;\n\n if (comment.eid) {\n return fetch(`${serverURL}/comment/${comment.eid}?lang=${lang}`, {\n method: 'PUT',\n headers,\n body: JSON.stringify(comment),\n }).then((resp) => resp.json() as Promise<PostCommentResponse>);\n }\n\n return fetch(`${serverURL}/comment?lang=${lang}`, {\n method: 'POST',\n headers,\n body: JSON.stringify(comment),\n }).then((resp) => resp.json() as Promise<PostCommentResponse>);\n};\n\nexport interface DeleteCommentOptions {\n serverURL: string;\n lang: string;\n token: string;\n objectId: string | number;\n}\n\nexport const deleteComment = ({\n serverURL,\n lang,\n token,\n objectId,\n}: DeleteCommentOptions): Promise<void> =>\n fetch(`${serverURL}/comment/${objectId}?lang=${lang}`, {\n method: 'DELETE',\n headers: {\n Authorization: `Bearer ${token}`,\n },\n }).then((resp) => resp.json() as Promise<void>);\n\nexport interface LikeCommentOptions {\n serverURL: string;\n lang: string;\n objectId: number | string;\n like: boolean;\n}\n\nexport const likeComment = ({\n serverURL,\n lang,\n objectId,\n like,\n}: LikeCommentOptions): Promise<void> =>\n fetch(`${serverURL}/comment/${objectId}?lang=${lang}`, {\n method: 'PUT',\n headers: JSON_HEADERS,\n body: JSON.stringify({ like }),\n }).then((resp) => resp.json() as Promise<void>);\n\nexport interface UpdateCommentOptions {\n serverURL: string;\n lang: string;\n token: string;\n objectId: number | string;\n status?: 'approved' | 'waiting' | 'spam';\n sticky?: number;\n}\n\nexport const updateComment = ({\n serverURL,\n lang,\n token,\n objectId,\n ...data\n}: UpdateCommentOptions): Promise<void> =>\n fetch(`${serverURL}/comment/${objectId}?lang=${lang}`, {\n method: 'PUT',\n headers: {\n ...JSON_HEADERS,\n Authorization: `Bearer ${token}`,\n },\n body: JSON.stringify(data),\n }).then((resp) => resp.json() as Promise<void>);\n","import { errorCheck } from './utils';\n\nexport interface FetchCommentCountOptions {\n serverURL: string;\n lang: string;\n paths: string[];\n signal: AbortSignal;\n}\n\nexport const fetchCommentCount = ({\n serverURL,\n lang,\n paths,\n signal,\n}: FetchCommentCountOptions): Promise<number[]> => {\n const headers: Record<string, string> = {};\n\n return (\n fetch(\n `${serverURL}/comment?type=count&url=${encodeURIComponent(\n paths.join(',')\n )}&lang=${lang}`,\n { signal, headers }\n )\n .then((resp) => resp.json() as Promise<number | number[]>)\n .then((data) => errorCheck(data, 'comment count'))\n // TODO: Improve this API\n .then((counts) => (Array.isArray(counts) ? counts : [counts]))\n );\n};\n","/* eslint-disable @typescript-eslint/no-unsafe-member-access */\n\nexport interface LoginOptions {\n lang: string;\n serverURL: string;\n}\n\nexport interface UserInfo {\n // eslint-disable-next-line @typescript-eslint/naming-convention\n display_name: string;\n email: string;\n url: string;\n token: string;\n avatar: string;\n mailMd5: string;\n objectId: string | number;\n type: 'administrator' | 'guest';\n}\n\nexport const login = ({\n lang,\n serverURL,\n}: LoginOptions): Promise<UserInfo & { remember: boolean }> => {\n const width = 450;\n const height = 450;\n const left = (window.innerWidth - width) / 2;\n const top = (window.innerHeight - height) / 2;\n\n const handler = window.open(\n `${serverURL}/ui/login?lng=${encodeURIComponent(lang)}`,\n '_blank',\n `width=${width},height=${height},left=${left},top=${top},scrollbars=no,resizable=no,status=no,location=no,toolbar=no,menubar=no`\n );\n\n handler?.postMessage({ type: 'TOKEN', data: null }, '*');\n\n return new Promise((resolve) => {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const receiver = ({ data }: any): void => {\n if (!data || typeof data !== 'object' || data.type !== 'userInfo') return;\n\n if (data.data.token) {\n handler?.close();\n\n window.removeEventListener('message', receiver);\n\n resolve(data.data as UserInfo & { remember: boolean });\n }\n };\n\n window.addEventListener('message', receiver);\n });\n};\n","import { fetchArticleCounter, updateArticleCounter } from './articleCounter';\n\ninterface FetchPageviewOptions {\n serverURL: string;\n lang: string;\n paths: string[];\n signal: AbortSignal;\n}\n\nexport const fetchPageviews = ({\n serverURL,\n lang,\n paths,\n signal,\n}: FetchPageviewOptions): Promise<number[]> =>\n fetchArticleCounter({\n serverURL,\n lang,\n paths,\n type: ['time'],\n signal,\n })\n // TODO: Improve this API\n .then((counts) => (Array.isArray(counts) ? counts : [counts])) as Promise<\n number[]\n >;\n\nexport interface UpdatePageviewOptions {\n serverURL: string;\n lang: string;\n path: string;\n action?: 'inc' | 'desc';\n}\n\nexport const updatePageviews = (\n options: UpdatePageviewOptions\n): Promise<number> =>\n updateArticleCounter({\n ...options,\n type: 'time',\n });\n","import { errorCheck } from './utils';\nimport type { WalineComment } from '../typings';\n\nexport interface FetchRecentCommentOptions {\n serverURL: string;\n lang: string;\n count: number;\n signal: AbortSignal;\n token?: string;\n}\n\nexport const fetchRecentComment = ({\n serverURL,\n lang,\n count,\n signal,\n token,\n}: FetchRecentCommentOptions): Promise<WalineComment[]> => {\n const headers: Record<string, string> = {};\n\n if (token) headers.Authorization = `Bearer ${token}`;\n\n return fetch(`${serverURL}/comment?type=recent&count=${count}&lang=${lang}`, {\n signal,\n headers,\n })\n .then((resp) => resp.json() as Promise<WalineComment[]>)\n .then((data) => errorCheck(data, 'recent comment'));\n};\n","import { WalineComment } from '../typings';\nimport { errorCheck } from './utils';\n\nexport interface FetchUserListOptions {\n serverURL: string;\n pageSize: number;\n signal: AbortSignal;\n lang: string;\n}\n\nexport interface WalineUser\n extends Pick<WalineComment, 'nick' | 'link' | 'avatar' | 'label' | 'level'> {\n count: number;\n}\n\nexport const fetchUserList = ({\n serverURL,\n signal,\n pageSize,\n lang,\n}: FetchUserListOptions): Promise<WalineUser[]> => {\n return fetch(`${serverURL}/user?pageSize=${pageSize}&lang=${lang}`, {\n signal,\n })\n .then(\n (resp) =>\n resp.json() as Promise<{\n errno: number;\n message: string;\n data: WalineUser[];\n }>\n )\n .then((resp) => errorCheck(resp, 'user list'))\n .then((resp) => resp.data);\n};\n"],"names":["JSON_HEADERS","errorCheck","data","name","errno","TypeError","errmsg","fetchArticleCounter","serverURL","lang","paths","type","signal","fetch","encodeURIComponent","join","then","resp","json","updateArticleCounter","path","action","method","headers","body","JSON","stringify","fetchComment","page","pageSize","sortBy","token","Authorization","postComment","comment","eid","deleteComment","objectId","likeComment","like","updateComment","fetchCommentCount","counts","Array","isArray","login","left","window","innerWidth","top","innerHeight","handler","open","postMessage","Promise","resolve","receiver","close","removeEventListener","addEventListener","fetchPageviews","updatePageviews","options","fetchRecentComment","count","fetchUserList"],"mappings":"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"}
package/dist/comment.cjs CHANGED
@@ -1,2 +1,2 @@
1
- "use strict";Object.defineProperty(exports,"__esModule",{value:!0});const e=({serverURL:e,lang:t,paths:r,signal:n})=>fetch(`${e}/comment?type=count&url=${encodeURIComponent(r.join(","))}&lang=${t}`,{signal:n,headers:{}}).then((e=>e.json())).then((e=>((e,t="")=>{if("object"==typeof e&&e.errno)throw new TypeError(`Fetch ${t} failed with ${e.errno}: ${e.errmsg}`);return e})(e,"comment count"))).then((e=>Array.isArray(e)?e:[e])),t=e=>{const t=((e="")=>e.replace(/\/$/u,""))(e);return/^(https?:)?\/\//.test(t)?t:`https://${t}`},r=e=>{"AbortError"!==e.name&&console.error(e.message)};exports.commentCount=({serverURL:n,path:o=window.location.pathname,selector:a=".waline-comment-count",lang:s="zh-CN"})=>{const c=new AbortController,l=document.querySelectorAll(a);return l.length&&e({serverURL:t(n),paths:Array.from(l).map((e=>(e=>{try{e=decodeURI(e)}catch(e){}return e})(e.dataset.path||e.getAttribute("id")||o))),lang:s,signal:c.signal}).then((e=>{l.forEach(((t,r)=>{t.innerText=e[r].toString()}))})).catch(r),c.abort.bind(c)},exports.version="2.12.0";
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:!0});const e=({serverURL:e,lang:t,paths:r,signal:n})=>fetch(`${e}/comment?type=count&url=${encodeURIComponent(r.join(","))}&lang=${t}`,{signal:n,headers:{}}).then((e=>e.json())).then((e=>((e,t="")=>{if("object"==typeof e&&e.errno)throw new TypeError(`Fetch ${t} failed with ${e.errno}: ${e.errmsg}`);return e})(e,"comment count"))).then((e=>Array.isArray(e)?e:[e])),t=e=>{const t=((e="")=>e.replace(/\/$/u,""))(e);return/^(https?:)?\/\//.test(t)?t:`https://${t}`},r=e=>{"AbortError"!==e.name&&console.error(e.message)};exports.commentCount=({serverURL:n,path:o=window.location.pathname,selector:a=".waline-comment-count",lang:s="zh-CN"})=>{const c=new AbortController,l=document.querySelectorAll(a);return l.length&&e({serverURL:t(n),paths:Array.from(l).map((e=>(e=>{try{e=decodeURI(e)}catch(e){}return e})(e.dataset.path||e.getAttribute("id")||o))),lang:s,signal:c.signal}).then((e=>{l.forEach(((t,r)=>{t.innerText=e[r].toString()}))})).catch(r),c.abort.bind(c)},exports.version="2.13.0";
2
2
  //# sourceMappingURL=comment.cjs.map
package/dist/comment.js CHANGED
@@ -1,2 +1,2 @@
1
- !function(e,t){if("function"==typeof define&&define.amd)define("Waline",["exports"],t);else if("undefined"!=typeof exports)t(exports);else{var n={exports:{}};t(n.exports),e.Waline=n.exports}}("undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:this,(function(e){Object.defineProperty(e,"__esModule",{value:!0}),e.version=e.commentCount=void 0;const t=e=>{let{serverURL:t,lang:n,paths:r,signal:o}=e;return fetch(`${t}/comment?type=count&url=${encodeURIComponent(r.join(","))}&lang=${n}`,{signal:o,headers:{}}).then((e=>e.json())).then((e=>function(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"";if("object"==typeof e&&e.errno)throw new TypeError(`Fetch ${t} failed with ${e.errno}: ${e.errmsg}`);return e}(e,"comment count"))).then((e=>Array.isArray(e)?e:[e]))},n=e=>{const t=function(){return(arguments.length>0&&void 0!==arguments[0]?arguments[0]:"").replace(/\/$/u,"")}(e);return/^(https?:)?\/\//.test(t)?t:`https://${t}`},r=e=>{"AbortError"!==e.name&&console.error(e.message)};e.commentCount=e=>{let{serverURL:o,path:i=window.location.pathname,selector:s=".waline-comment-count",lang:a="zh-CN"}=e;const l=new AbortController,c=document.querySelectorAll(s);return c.length&&t({serverURL:n(o),paths:Array.from(c).map((e=>(e=>{try{e=decodeURI(e)}catch(e){}return e})(e.dataset.path||e.getAttribute("id")||i))),lang:a,signal:l.signal}).then((e=>{c.forEach(((t,n)=>{t.innerText=e[n].toString()}))})).catch(r),l.abort.bind(l)};e.version="2.12.0"}));
1
+ !function(e,t){if("function"==typeof define&&define.amd)define("Waline",["exports"],t);else if("undefined"!=typeof exports)t(exports);else{var n={exports:{}};t(n.exports),e.Waline=n.exports}}("undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:this,(function(e){Object.defineProperty(e,"__esModule",{value:!0}),e.version=e.commentCount=void 0;const t=e=>{let{serverURL:t,lang:n,paths:r,signal:o}=e;return fetch(`${t}/comment?type=count&url=${encodeURIComponent(r.join(","))}&lang=${n}`,{signal:o,headers:{}}).then((e=>e.json())).then((e=>function(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"";if("object"==typeof e&&e.errno)throw new TypeError(`Fetch ${t} failed with ${e.errno}: ${e.errmsg}`);return e}(e,"comment count"))).then((e=>Array.isArray(e)?e:[e]))},n=e=>{const t=function(){return(arguments.length>0&&void 0!==arguments[0]?arguments[0]:"").replace(/\/$/u,"")}(e);return/^(https?:)?\/\//.test(t)?t:`https://${t}`},r=e=>{"AbortError"!==e.name&&console.error(e.message)};e.commentCount=e=>{let{serverURL:o,path:i=window.location.pathname,selector:s=".waline-comment-count",lang:a="zh-CN"}=e;const l=new AbortController,c=document.querySelectorAll(s);return c.length&&t({serverURL:n(o),paths:Array.from(c).map((e=>(e=>{try{e=decodeURI(e)}catch(e){}return e})(e.dataset.path||e.getAttribute("id")||i))),lang:a,signal:l.signal}).then((e=>{c.forEach(((t,n)=>{t.innerText=e[n].toString()}))})).catch(r),l.abort.bind(l)};e.version="2.13.0"}));
2
2
  //# sourceMappingURL=comment.js.map
package/dist/comment.mjs CHANGED
@@ -1,2 +1,2 @@
1
- const e=({serverURL:e,lang:t,paths:r,signal:n})=>fetch(`${e}/comment?type=count&url=${encodeURIComponent(r.join(","))}&lang=${t}`,{signal:n,headers:{}}).then((e=>e.json())).then((e=>((e,t="")=>{if("object"==typeof e&&e.errno)throw new TypeError(`Fetch ${t} failed with ${e.errno}: ${e.errmsg}`);return e})(e,"comment count"))).then((e=>Array.isArray(e)?e:[e])),t=e=>{const t=((e="")=>e.replace(/\/$/u,""))(e);return/^(https?:)?\/\//.test(t)?t:`https://${t}`},r=e=>{"AbortError"!==e.name&&console.error(e.message)},n=({serverURL:n,path:o=window.location.pathname,selector:a=".waline-comment-count",lang:c="zh-CN"})=>{const s=new AbortController,h=document.querySelectorAll(a);return h.length&&e({serverURL:t(n),paths:Array.from(h).map((e=>(e=>{try{e=decodeURI(e)}catch(e){}return e})(e.dataset.path||e.getAttribute("id")||o))),lang:c,signal:s.signal}).then((e=>{h.forEach(((t,r)=>{t.innerText=e[r].toString()}))})).catch(r),s.abort.bind(s)},o="2.12.0";export{n as commentCount,o as version};
1
+ const e=({serverURL:e,lang:t,paths:r,signal:n})=>fetch(`${e}/comment?type=count&url=${encodeURIComponent(r.join(","))}&lang=${t}`,{signal:n,headers:{}}).then((e=>e.json())).then((e=>((e,t="")=>{if("object"==typeof e&&e.errno)throw new TypeError(`Fetch ${t} failed with ${e.errno}: ${e.errmsg}`);return e})(e,"comment count"))).then((e=>Array.isArray(e)?e:[e])),t=e=>{const t=((e="")=>e.replace(/\/$/u,""))(e);return/^(https?:)?\/\//.test(t)?t:`https://${t}`},r=e=>{"AbortError"!==e.name&&console.error(e.message)},n=({serverURL:n,path:o=window.location.pathname,selector:a=".waline-comment-count",lang:c="zh-CN"})=>{const s=new AbortController,h=document.querySelectorAll(a);return h.length&&e({serverURL:t(n),paths:Array.from(h).map((e=>(e=>{try{e=decodeURI(e)}catch(e){}return e})(e.dataset.path||e.getAttribute("id")||o))),lang:c,signal:s.signal}).then((e=>{h.forEach(((t,r)=>{t.innerText=e[r].toString()}))})).catch(r),s.abort.bind(s)},o="2.13.0";export{n as commentCount,o as version};
2
2
  //# sourceMappingURL=comment.mjs.map