@waline/client 3.0.0-alpha.8 → 3.0.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/README.md +3 -1
- package/dist/{comment.mjs → comment.js} +2 -2
- package/dist/comment.js.map +1 -0
- package/dist/component.js +9 -8
- package/dist/component.js.map +1 -1
- package/dist/pageview.js +1 -1
- package/dist/pageview.js.map +1 -1
- package/dist/slim.d.ts +4 -0
- package/dist/slim.js +9 -8
- package/dist/slim.js.map +1 -1
- package/dist/waline.css +1 -1
- package/dist/waline.css.map +1 -1
- package/dist/waline.d.ts +4 -0
- package/dist/waline.js +47 -30
- package/dist/waline.js.map +1 -1
- package/dist/waline.umd.js +59 -42
- package/dist/waline.umd.js.map +1 -1
- package/package.json +19 -17
- package/dist/comment.mjs.map +0 -1
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@waline/client",
|
|
3
|
-
"version": "3.0.0
|
|
3
|
+
"version": "3.0.0",
|
|
4
4
|
"description": "client for waline comment system",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"valine",
|
|
@@ -8,7 +8,6 @@
|
|
|
8
8
|
"comment",
|
|
9
9
|
"blog"
|
|
10
10
|
],
|
|
11
|
-
"type": "module",
|
|
12
11
|
"repository": {
|
|
13
12
|
"url": "https://github.com/walinejs/waline",
|
|
14
13
|
"directory": "packages/client"
|
|
@@ -19,6 +18,7 @@
|
|
|
19
18
|
"email": "mister-hope@outlook.com",
|
|
20
19
|
"url": "https://mister-hope.com"
|
|
21
20
|
},
|
|
21
|
+
"type": "module",
|
|
22
22
|
"exports": {
|
|
23
23
|
".": {
|
|
24
24
|
"types": "./dist/slim.d.ts",
|
|
@@ -43,6 +43,8 @@
|
|
|
43
43
|
"import": "./dist/pageview.js",
|
|
44
44
|
"default": "./dist/pageview.umd.js"
|
|
45
45
|
},
|
|
46
|
+
"./style": "./dist/waline.css",
|
|
47
|
+
"./meta": "./dist/waline-meta.css",
|
|
46
48
|
"./waline.css": "./dist/waline.css",
|
|
47
49
|
"./waline-meta.css": "./dist/waline-meta.css",
|
|
48
50
|
"./package.json": "./package.json"
|
|
@@ -64,9 +66,6 @@
|
|
|
64
66
|
"style:main": "sass ./src/styles/index.scss ./dist/waline.css --style=compressed",
|
|
65
67
|
"style:meta": "sass ./src/styles/meta.scss ./dist/waline-meta.css --style=compressed"
|
|
66
68
|
},
|
|
67
|
-
"publishConfig": {
|
|
68
|
-
"provenance": true
|
|
69
|
-
},
|
|
70
69
|
"browserslist": {
|
|
71
70
|
"production": [
|
|
72
71
|
">0.5%",
|
|
@@ -82,26 +81,29 @@
|
|
|
82
81
|
"last 2 safari version"
|
|
83
82
|
]
|
|
84
83
|
},
|
|
85
|
-
"engines": {
|
|
86
|
-
"node": ">=18"
|
|
87
|
-
},
|
|
88
84
|
"dependencies": {
|
|
89
|
-
"@vueuse/core": "^10.7.
|
|
90
|
-
"@waline/api": "
|
|
85
|
+
"@vueuse/core": "^10.7.2",
|
|
86
|
+
"@waline/api": "workspace:1.0.0-alpha.5",
|
|
91
87
|
"autosize": "^6.0.1",
|
|
92
|
-
"marked": "^
|
|
93
|
-
"marked-highlight": "^2.1.
|
|
88
|
+
"marked": "^12.0.0",
|
|
89
|
+
"marked-highlight": "^2.1.1",
|
|
94
90
|
"recaptcha-v3": "^1.10.0",
|
|
95
|
-
"vue": "^3.
|
|
91
|
+
"vue": "^3.4.15"
|
|
96
92
|
},
|
|
97
93
|
"devDependencies": {
|
|
98
|
-
"@babel/core": "7.23.
|
|
99
|
-
"@babel/preset-env": "7.23.
|
|
94
|
+
"@babel/core": "7.23.9",
|
|
95
|
+
"@babel/preset-env": "7.23.9",
|
|
100
96
|
"@giphy/js-types": "5.0.0",
|
|
101
97
|
"@types/autosize": "4.0.3",
|
|
102
98
|
"@types/marked": "5.0.2",
|
|
103
|
-
"@vitejs/plugin-vue": "
|
|
99
|
+
"@vitejs/plugin-vue": "5.0.3",
|
|
104
100
|
"user-agent-data-types": "0.4.2",
|
|
105
|
-
"vite": "5.0.
|
|
101
|
+
"vite": "5.0.12"
|
|
102
|
+
},
|
|
103
|
+
"engines": {
|
|
104
|
+
"node": ">=18"
|
|
105
|
+
},
|
|
106
|
+
"publishConfig": {
|
|
107
|
+
"provenance": true
|
|
106
108
|
}
|
|
107
109
|
}
|
package/dist/comment.mjs.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"comment.mjs","sources":["../../api/dist/api.js","../src/utils/path.ts","../src/utils/config.ts","../src/utils/error.ts","../src/utils/query.ts","../src/comment.ts","../src/version.ts"],"sourcesContent":["const m={\"Content-Type\":\"application/json\"},s=t=>`${t.replace(/\\/?$/,\"/\")}api/`,h=(t,n=\"\")=>{if(typeof t==\"object\"&&t.errno)throw new TypeError(`${n} failed with ${t.errno}: ${t.errmsg}`);return t},p=({serverURL:t,lang:n,paths:o,type:a,signal:e})=>fetch(`${s(t)}article?path=${encodeURIComponent(o.join(\",\"))}&type=${encodeURIComponent(a.join(\",\"))}&lang=${n}`,{signal:e}).then(r=>r.json()),d=({serverURL:t,lang:n,path:o,type:a,action:e})=>fetch(`${s(t)}article?lang=${n}`,{method:\"POST\",headers:m,body:JSON.stringify({path:o,type:a,action:e})}).then(r=>r.json()).then(r=>h(r,\"Update counter\").data),$=({serverURL:t,lang:n,path:o,page:a,pageSize:e,sortBy:r,signal:c,token:i})=>{const l={};return i&&(l.Authorization=`Bearer ${i}`),fetch(`${s(t)}comment?path=${encodeURIComponent(o)}&pageSize=${e}&page=${a}&lang=${n}&sortBy=${r}`,{signal:c,headers:l}).then(g=>g.json()).then(g=>h(g,\"Get comment data\").data)},u=({serverURL:t,lang:n,token:o,comment:a})=>{const e={\"Content-Type\":\"application/json\"};return o&&(e.Authorization=`Bearer ${o}`),fetch(`${s(t)}comment?lang=${n}`,{method:\"POST\",headers:e,body:JSON.stringify(a)}).then(r=>r.json())},y=({serverURL:t,lang:n,token:o,objectId:a})=>fetch(`${s(t)}comment/${a}?lang=${n}`,{method:\"DELETE\",headers:{Authorization:`Bearer ${o}`}}).then(e=>e.json()).then(e=>h(e,\"Delete comment\")),U=({serverURL:t,lang:n,token:o,objectId:a,comment:e})=>fetch(`${s(t)}comment/${a}?lang=${n}`,{method:\"PUT\",headers:{...m,Authorization:`Bearer ${o}`},body:JSON.stringify(e)}).then(r=>r.json()).then(r=>h(r,\"Update comment\")),f=({serverURL:t,lang:n,paths:o,signal:a})=>fetch(`${s(t)}comment?type=count&url=${encodeURIComponent(o.join(\",\"))}&lang=${n}`,{signal:a}).then(e=>e.json()).then(e=>h(e,\"Get comment count\").data),R=({lang:t,serverURL:n})=>{const o=(window.innerWidth-450)/2,a=(window.innerHeight-450)/2,e=window.open(`${n.replace(/\\/$/,\"\")}/ui/login?lng=${encodeURIComponent(t)}`,\"_blank\",`width=450,height=450,left=${o},top=${a},scrollbars=no,resizable=no,status=no,location=no,toolbar=no,menubar=no`);return e?.postMessage({type:\"TOKEN\",data:null},\"*\"),new Promise(r=>{const c=({data:i})=>{!i||typeof i!=\"object\"||i.type!==\"userInfo\"||i.data.token&&(e?.close(),window.removeEventListener(\"message\",c),r(i.data))};window.addEventListener(\"message\",c)})},j=({serverURL:t,lang:n,paths:o,signal:a})=>p({serverURL:t,lang:n,paths:o,type:[\"time\"],signal:a}).then(e=>Array.isArray(e)?e:[e]),v=t=>d({...t,type:\"time\",action:\"inc\"}),w=({serverURL:t,lang:n,count:o,signal:a,token:e})=>{const r={};return e&&(r.Authorization=`Bearer ${e}`),fetch(`${s(t)}comment?type=recent&count=${o}&lang=${n}`,{signal:a,headers:r}).then(c=>c.json())},C=({serverURL:t,signal:n,pageSize:o,lang:a})=>fetch(`${s(t)}user?pageSize=${o}&lang=${a}`,{signal:n}).then(e=>e.json()).then(e=>h(e,\"user list\")).then(e=>e.data);export{u as addComment,y as deleteComment,f as fetchCommentCount,p as getArticleCounter,$ as getComment,j as getPageview,w as getRecentComment,C as getUserList,R as login,d as updateArticleCounter,U as updateComment,v as updatePageview};\n//# sourceMappingURL=api.js.map\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","import { decodePath, isLinkHttp, removeEndingSplash } from './path.js';\nimport {\n DEFAULT_EMOJI,\n DEFAULT_LANG,\n DEFAULT_LOCALES,\n DEFAULT_REACTION,\n defaultUploadImage,\n defaultHighlighter,\n defaultTeXRenderer,\n getDefaultSearchOptions,\n getMeta,\n} from '../config/index.js';\nimport {\n type WalineEmojiInfo,\n type WalineEmojiMaps,\n type WalineLocale,\n type WalineProps,\n} from '../typings/index.js';\n\nexport interface WalineEmojiConfig {\n tabs: Pick<WalineEmojiInfo, 'name' | 'icon' | 'items'>[];\n map: WalineEmojiMaps;\n}\n\nexport interface WalineConfig\n extends Required<\n Omit<\n WalineProps,\n | 'emoji'\n | 'imageUploader'\n | 'highlighter'\n | 'texRenderer'\n | 'wordLimit'\n | 'reaction'\n | 'search'\n >\n > {\n locale: WalineLocale;\n wordLimit: [number, number] | false;\n reaction: string[];\n emoji: Exclude<WalineProps['emoji'], boolean | undefined>;\n highlighter: Exclude<WalineProps['highlighter'], true | undefined>;\n imageUploader: Exclude<WalineProps['imageUploader'], true | undefined>;\n texRenderer: Exclude<WalineProps['texRenderer'], true | undefined>;\n search: Exclude<WalineProps['search'], true | undefined>;\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 | boolean | 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 = typeof navigator === 'undefined' ? 'en-US' : navigator.language,\n locale,\n emoji = DEFAULT_EMOJI,\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 turnstileKey = '',\n commentSorting = 'latest',\n ...more\n}: WalineProps): WalineConfig => ({\n serverURL: getServerURL(serverURL),\n path: decodePath(path),\n locale: {\n ...(DEFAULT_LOCALES[lang] || DEFAULT_LOCALES[DEFAULT_LANG]),\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: Object.keys(DEFAULT_LOCALES).includes(lang) ? lang : 'en-US',\n dark,\n emoji: typeof emoji === 'boolean' ? (emoji ? DEFAULT_EMOJI : []) : emoji,\n pageSize,\n login,\n copyright,\n search:\n search === false\n ? false\n : typeof search === 'object'\n ? search\n : getDefaultSearchOptions(lang),\n recaptchaV3Key,\n turnstileKey,\n reaction: Array.isArray(reaction)\n ? reaction\n : reaction === true\n ? DEFAULT_REACTION\n : [],\n commentSorting,\n ...more,\n});\n","export const errorHandler = (err: Error): void => {\n if (err.name !== 'AbortError') console.error(err.message);\n};\n","export const getQuery = (element: HTMLElement): string | null =>\n element.dataset.path || null;\n","import { fetchCommentCount } from '@waline/api';\n\nimport { type WalineAbort } from './typings/index.js';\nimport {\n decodePath,\n errorHandler,\n getQuery,\n getServerURL,\n} from './utils/index.js';\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 navigator.language\n */\n lang?: string;\n}\n\nexport { type WalineAbort } from './typings/index.js';\n\nexport const commentCount = ({\n serverURL,\n path = window.location.pathname,\n selector = '.waline-comment-count',\n lang = navigator.language,\n}: WalineCommentCountOptions): 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(getQuery(element) || 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":["s","t","h","n","f","o","a","e","decodePath","path","removeEndingSplash","content","isLinkHttp","link","getServerURL","serverURL","result","errorHandler","err","getQuery","element","commentCount","selector","lang","controller","elements","fetchCommentCount","counts","index","version"],"mappings":"AAAA,MAA4CA,EAAEC,GAAG,GAAGA,EAAE,QAAQ,OAAO,GAAG,CAAC,OAAOC,EAAE,CAACD,EAAEE,EAAE,KAAK,CAAC,GAAG,OAAOF,GAAG,UAAUA,EAAE,MAAM,MAAM,IAAI,UAAU,GAAGE,CAAC,gBAAgBF,EAAE,KAAK,KAAKA,EAAE,MAAM,EAAE,EAAE,OAAOA,CAAC,EAA+0CG,EAAE,CAAC,CAAC,UAAUH,EAAE,KAAKE,EAAE,MAAME,EAAE,OAAOC,CAAC,IAAI,MAAM,GAAGN,EAAEC,CAAC,CAAC,0BAA0B,mBAAmBI,EAAE,KAAK,GAAG,CAAC,CAAC,SAASF,CAAC,GAAG,CAAC,OAAOG,CAAC,CAAC,EAAE,KAAKC,GAAGA,EAAE,KAAM,CAAA,EAAE,KAAKA,GAAGL,EAAEK,EAAE,mBAAmB,EAAE,IAAI,ECAvsDC,EAAcC,GAAyB,CAClD,GAAI,CACFA,EAAO,UAAUA,CAAI,CACvB,MAAc,CAAA,CAId,OAAOA,CACT,EAEaC,EAAqB,CAACC,EAAU,KAC3CA,EAAQ,QAAQ,OAAQ,EAAE,EAEfC,EAAcC,GACzB,kBAAkB,KAAKA,CAAI,ECiChBC,EAAgBC,GAA8B,CACzD,MAAMC,EAASN,EAAmBK,CAAS,EAE3C,OAAOH,EAAWI,CAAM,EAAIA,EAAS,WAAWA,CAAM,EACxD,ECnDaC,EAAgBC,GAAqB,CAC5CA,EAAI,OAAS,cAAc,QAAQ,MAAMA,EAAI,OAAO,CAC1D,ECFaC,EAAYC,GACvBA,EAAQ,QAAQ,MAAQ,KC+CbC,EAAe,CAAC,CAC3B,UAAAN,EACA,KAAAN,EAAO,OAAO,SAAS,SACvB,SAAAa,EAAW,wBACX,KAAAC,EAAO,UAAU,QACnB,IAA8C,CAC5C,MAAMC,EAAa,IAAI,gBAGjBC,EAAW,SAAS,iBAA8BH,CAAQ,EAEhE,OAAIG,EAAS,QACNC,EAAkB,CACrB,UAAWZ,EAAaC,CAAS,EACjC,MAAO,MAAM,KAAKU,CAAQ,EAAE,IAAKL,GAC/BZ,EAAWW,EAASC,CAAO,GAAKX,CAAI,CACtC,EACA,KAAAc,EACA,OAAQC,EAAW,MACrB,CAAC,EACE,KAAMG,GAAW,CAChBF,EAAS,QAAQ,CAACL,EAASQ,IAAU,CACnCR,EAAQ,UAAYO,EAAOC,CAAK,EAAE,SAAS,CAC7C,CAAC,CACH,CAAC,EACA,MAAMX,CAAY,EAEhBO,EAAW,MAAM,KAAKA,CAAU,CACzC,EC1EaK,EAAU"}
|