artalk 2.8.5 → 2.8.7
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/Artalk.cjs +1 -1
- package/dist/Artalk.cjs.map +1 -1
- package/dist/Artalk.iife.js +1 -1
- package/dist/Artalk.iife.js.map +1 -1
- package/dist/Artalk.js +1 -1
- package/dist/Artalk.js.map +1 -1
- package/dist/Artalk.mjs +592 -358
- package/dist/Artalk.mjs.map +1 -1
- package/dist/ArtalkLite.cjs +2 -2
- package/dist/ArtalkLite.cjs.map +1 -1
- package/dist/ArtalkLite.iife.js +2 -2
- package/dist/ArtalkLite.iife.js.map +1 -1
- package/dist/ArtalkLite.js +2 -2
- package/dist/ArtalkLite.js.map +1 -1
- package/dist/ArtalkLite.mjs +590 -357
- package/dist/ArtalkLite.mjs.map +1 -1
- package/dist/i18n/jp.cjs +1 -1
- package/dist/i18n/jp.js +1 -1
- package/dist/i18n/jp.mjs +21 -0
- package/dist/i18n/zh-TW.cjs +1 -1
- package/dist/i18n/zh-TW.js +1 -1
- package/dist/i18n/zh-TW.mjs +21 -4
- package/dist/main.d.cts +213 -12
- package/dist/main.d.ts +213 -12
- package/package.json +9 -11
package/dist/main.d.ts
CHANGED
|
@@ -1,5 +1,3 @@
|
|
|
1
|
-
import { marked } from 'marked';
|
|
2
|
-
|
|
3
1
|
/**
|
|
4
2
|
* 通用操作按钮
|
|
5
3
|
*/
|
|
@@ -8,7 +6,7 @@ declare class ActionBtn {
|
|
|
8
6
|
$el: HTMLElement;
|
|
9
7
|
isLoading: boolean;
|
|
10
8
|
msgRecTimer?: number;
|
|
11
|
-
msgRecTimerFunc?:
|
|
9
|
+
msgRecTimerFunc?: () => void;
|
|
12
10
|
get isMessaging(): boolean;
|
|
13
11
|
isConfirming: boolean;
|
|
14
12
|
confirmRecTimer?: number;
|
|
@@ -19,7 +17,7 @@ declare class ActionBtn {
|
|
|
19
17
|
/** 获取按钮文字(动态/静态) */
|
|
20
18
|
private getText;
|
|
21
19
|
/** 设置点击事件 */
|
|
22
|
-
setClick(func:
|
|
20
|
+
setClick(func: () => void): void;
|
|
23
21
|
/** 文字刷新(动态/静态) */
|
|
24
22
|
updateText(text?: (() => string) | string): void;
|
|
25
23
|
/** 设置加载状态 */
|
|
@@ -31,7 +29,7 @@ declare class ActionBtn {
|
|
|
31
29
|
/** 成功消息 */
|
|
32
30
|
setSuccess(text: string): void;
|
|
33
31
|
/** 设置消息 */
|
|
34
|
-
setMsg(text: string, className?: string, duringTime?: number, after?:
|
|
32
|
+
setMsg(text: string, className?: string, duringTime?: number, after?: () => void): void;
|
|
35
33
|
/** 设置消息复原操作定时器 */
|
|
36
34
|
private setMsgRecTimer;
|
|
37
35
|
/** 立刻触发器复原定时器 */
|
|
@@ -75,6 +73,115 @@ declare class Api extends Api_2<void> {
|
|
|
75
73
|
* Artalk is a modern comment system based on Golang.
|
|
76
74
|
*/
|
|
77
75
|
declare class Api_2<SecurityDataType extends unknown> extends HttpClient<SecurityDataType> {
|
|
76
|
+
auth: {
|
|
77
|
+
/**
|
|
78
|
+
* @description Login by email with verify code (Need send email verify code first) or password
|
|
79
|
+
*
|
|
80
|
+
* @tags Auth
|
|
81
|
+
* @name LoginByEmail
|
|
82
|
+
* @summary Login by email
|
|
83
|
+
* @request POST:/auth/email/login
|
|
84
|
+
* @response `200` `HandlerResponseUserLogin` OK
|
|
85
|
+
* @response `400` `(HandlerMap & {
|
|
86
|
+
msg?: string,
|
|
87
|
+
|
|
88
|
+
})` Bad Request
|
|
89
|
+
* @response `500` `(HandlerMap & {
|
|
90
|
+
msg?: string,
|
|
91
|
+
|
|
92
|
+
})` Internal Server Error
|
|
93
|
+
*/
|
|
94
|
+
loginByEmail: (data: HandlerRequestAuthEmailLogin, params?: RequestParams) => Promise<HttpResponse<HandlerResponseUserLogin, HandlerMap & {
|
|
95
|
+
msg?: string | undefined;
|
|
96
|
+
}>>;
|
|
97
|
+
/**
|
|
98
|
+
* @description Register by email and verify code (if user exists, will update user, like forget password. Need send email verify code first)
|
|
99
|
+
*
|
|
100
|
+
* @tags Auth
|
|
101
|
+
* @name RegisterByEmail
|
|
102
|
+
* @summary Register by email
|
|
103
|
+
* @request POST:/auth/email/register
|
|
104
|
+
* @response `200` `HandlerResponseUserLogin` OK
|
|
105
|
+
* @response `400` `(HandlerMap & {
|
|
106
|
+
msg?: string,
|
|
107
|
+
|
|
108
|
+
})` Bad Request
|
|
109
|
+
* @response `500` `(HandlerMap & {
|
|
110
|
+
msg?: string,
|
|
111
|
+
|
|
112
|
+
})` Internal Server Error
|
|
113
|
+
*/
|
|
114
|
+
registerByEmail: (data: HandlerRequestAuthEmailRegister, params?: RequestParams) => Promise<HttpResponse<HandlerResponseUserLogin, HandlerMap & {
|
|
115
|
+
msg?: string | undefined;
|
|
116
|
+
}>>;
|
|
117
|
+
/**
|
|
118
|
+
* @description Send email including verify code to user
|
|
119
|
+
*
|
|
120
|
+
* @tags Auth
|
|
121
|
+
* @name SendVerifyEmail
|
|
122
|
+
* @summary Send verify email
|
|
123
|
+
* @request POST:/auth/email/send
|
|
124
|
+
* @response `200` `(HandlerMap & {
|
|
125
|
+
msg?: string,
|
|
126
|
+
|
|
127
|
+
})` OK
|
|
128
|
+
* @response `400` `(HandlerMap & {
|
|
129
|
+
msg?: string,
|
|
130
|
+
|
|
131
|
+
})` Bad Request
|
|
132
|
+
* @response `500` `(HandlerMap & {
|
|
133
|
+
msg?: string,
|
|
134
|
+
|
|
135
|
+
})` Internal Server Error
|
|
136
|
+
*/
|
|
137
|
+
sendVerifyEmail: (data: HandlerRequestAuthEmailSend, params?: RequestParams) => Promise<HttpResponse<HandlerMap & {
|
|
138
|
+
msg?: string | undefined;
|
|
139
|
+
}, HandlerMap & {
|
|
140
|
+
msg?: string | undefined;
|
|
141
|
+
}>>;
|
|
142
|
+
/**
|
|
143
|
+
* @description Get all users with same email, if there are more than one user with same email, need merge
|
|
144
|
+
*
|
|
145
|
+
* @tags Auth
|
|
146
|
+
* @name CheckDataMerge
|
|
147
|
+
* @summary Check data merge
|
|
148
|
+
* @request GET:/auth/merge
|
|
149
|
+
* @secure
|
|
150
|
+
* @response `200` `HandlerResponseAuthDataMergeCheck` OK
|
|
151
|
+
* @response `400` `(HandlerMap & {
|
|
152
|
+
msg?: string,
|
|
153
|
+
|
|
154
|
+
})` Bad Request
|
|
155
|
+
* @response `500` `(HandlerMap & {
|
|
156
|
+
msg?: string,
|
|
157
|
+
|
|
158
|
+
})` Internal Server Error
|
|
159
|
+
*/
|
|
160
|
+
checkDataMerge: (params?: RequestParams) => Promise<HttpResponse<HandlerResponseAuthDataMergeCheck, HandlerMap & {
|
|
161
|
+
msg?: string | undefined;
|
|
162
|
+
}>>;
|
|
163
|
+
/**
|
|
164
|
+
* @description This function is to solve the problem of multiple users with the same email address, should be called after user login and then check, and perform data merge.
|
|
165
|
+
*
|
|
166
|
+
* @tags Auth
|
|
167
|
+
* @name ApplyDataMerge
|
|
168
|
+
* @summary Apply data merge
|
|
169
|
+
* @request POST:/auth/merge
|
|
170
|
+
* @secure
|
|
171
|
+
* @response `200` `HandlerResponseAuthDataMergeApply` OK
|
|
172
|
+
* @response `400` `(HandlerMap & {
|
|
173
|
+
msg?: string,
|
|
174
|
+
|
|
175
|
+
})` Bad Request
|
|
176
|
+
* @response `500` `(HandlerMap & {
|
|
177
|
+
msg?: string,
|
|
178
|
+
|
|
179
|
+
})` Internal Server Error
|
|
180
|
+
*/
|
|
181
|
+
applyDataMerge: (data: HandlerRequestAuthDataMergeApply, params?: RequestParams) => Promise<HttpResponse<HandlerResponseAuthDataMergeApply, HandlerMap & {
|
|
182
|
+
msg?: string | undefined;
|
|
183
|
+
}>>;
|
|
184
|
+
};
|
|
78
185
|
cache: {
|
|
79
186
|
/**
|
|
80
187
|
* @description Flush all cache on the server
|
|
@@ -323,6 +430,22 @@ declare class Api_2<SecurityDataType extends unknown> extends HttpClient<Securit
|
|
|
323
430
|
* @response `200` `CommonConfData` OK
|
|
324
431
|
*/
|
|
325
432
|
conf: (params?: RequestParams) => Promise<HttpResponse<CommonConfData, any>>;
|
|
433
|
+
/**
|
|
434
|
+
* @description Get social login providers
|
|
435
|
+
*
|
|
436
|
+
* @tags System
|
|
437
|
+
* @name GetSocialLoginProviders
|
|
438
|
+
* @summary Get Social Login Providers
|
|
439
|
+
* @request GET:/conf/auth/providers
|
|
440
|
+
* @response `200` `HandlerResponseConfAuthProviders` OK
|
|
441
|
+
* @response `404` `(HandlerMap & {
|
|
442
|
+
msg?: string,
|
|
443
|
+
|
|
444
|
+
})` Not Found
|
|
445
|
+
*/
|
|
446
|
+
getSocialLoginProviders: (params?: RequestParams) => Promise<HttpResponse<HandlerResponseConfAuthProviders, HandlerMap & {
|
|
447
|
+
msg?: string | undefined;
|
|
448
|
+
}>>;
|
|
326
449
|
/**
|
|
327
450
|
* @description Get Domain Info
|
|
328
451
|
*
|
|
@@ -1078,8 +1201,8 @@ declare interface ApiHandlerPayload {
|
|
|
1078
1201
|
img_data?: string;
|
|
1079
1202
|
iframe?: string;
|
|
1080
1203
|
};
|
|
1081
|
-
need_login:
|
|
1082
|
-
need_auth_login:
|
|
1204
|
+
need_login: object;
|
|
1205
|
+
need_auth_login: object;
|
|
1083
1206
|
}
|
|
1084
1207
|
|
|
1085
1208
|
declare interface ApiHandlers {
|
|
@@ -1207,6 +1330,8 @@ export declare interface ArtalkConfig {
|
|
|
1207
1330
|
countEl: string;
|
|
1208
1331
|
/** PV 数绑定元素 Selector */
|
|
1209
1332
|
pvEl: string;
|
|
1333
|
+
/** 统计组件 PageKey 属性名 */
|
|
1334
|
+
statPageKeyAttr: string;
|
|
1210
1335
|
/** 夜间模式 */
|
|
1211
1336
|
darkMode: boolean | 'auto';
|
|
1212
1337
|
/** 请求超时(单位:秒) */
|
|
@@ -1225,6 +1350,8 @@ export declare interface ArtalkConfig {
|
|
|
1225
1350
|
imgUpload: boolean;
|
|
1226
1351
|
/** 图片上传器 */
|
|
1227
1352
|
imgUploader?: (file: File) => Promise<string>;
|
|
1353
|
+
/** Image lazy load */
|
|
1354
|
+
imgLazyLoad?: 'native' | 'data-src';
|
|
1228
1355
|
/** 版本检测 */
|
|
1229
1356
|
versionCheck: boolean;
|
|
1230
1357
|
/** 引用后端配置 */
|
|
@@ -1237,6 +1364,8 @@ export declare interface ArtalkConfig {
|
|
|
1237
1364
|
pluginURLs?: string[];
|
|
1238
1365
|
/** Replacer for marked */
|
|
1239
1366
|
markedReplacers?: ((raw: string) => string)[];
|
|
1367
|
+
/** Marked options */
|
|
1368
|
+
markedOptions?: any;
|
|
1240
1369
|
/** 列表请求参数修改器 */
|
|
1241
1370
|
listFetchParamsModifier?: (params: any) => void;
|
|
1242
1371
|
remoteConfModifier?: (conf: Partial<ArtalkConfig>) => void;
|
|
@@ -1282,6 +1411,13 @@ declare namespace ArtalkType {
|
|
|
1282
1411
|
}
|
|
1283
1412
|
export { ArtalkType }
|
|
1284
1413
|
|
|
1414
|
+
declare interface AuthAuthProviderInfo {
|
|
1415
|
+
icon: string;
|
|
1416
|
+
label: string;
|
|
1417
|
+
name: string;
|
|
1418
|
+
path?: string;
|
|
1419
|
+
}
|
|
1420
|
+
|
|
1285
1421
|
declare type CancelToken = Symbol | string | number;
|
|
1286
1422
|
|
|
1287
1423
|
declare interface Checker<T = any> {
|
|
@@ -1483,7 +1619,7 @@ declare type CommentNode_2 = {
|
|
|
1483
1619
|
|
|
1484
1620
|
declare interface CommentOptions {
|
|
1485
1621
|
onAfterRender?: () => void;
|
|
1486
|
-
onDelete?:
|
|
1622
|
+
onDelete?: (c: CommentNode) => void;
|
|
1487
1623
|
/** The comment being replied to (linked comment) */
|
|
1488
1624
|
replyTo?: CommentData;
|
|
1489
1625
|
flatMode: boolean;
|
|
@@ -1548,7 +1684,7 @@ export declare interface ContextApi extends EventManagerFuncs<EventPayloadMap> {
|
|
|
1548
1684
|
/** 配置对象 */
|
|
1549
1685
|
conf: ArtalkConfig;
|
|
1550
1686
|
/** marked 依赖对象 */
|
|
1551
|
-
getMarked():
|
|
1687
|
+
getMarked(): any | undefined;
|
|
1552
1688
|
/** 获取 API 以供 HTTP 请求 */
|
|
1553
1689
|
getApi(): Api;
|
|
1554
1690
|
/** Get API handlers */
|
|
@@ -1805,6 +1941,8 @@ declare const en: {
|
|
|
1805
1941
|
placeholder: string;
|
|
1806
1942
|
noComment: string;
|
|
1807
1943
|
send: string;
|
|
1944
|
+
signIn: string;
|
|
1945
|
+
signUp: string;
|
|
1808
1946
|
save: string;
|
|
1809
1947
|
nick: string;
|
|
1810
1948
|
email: string;
|
|
@@ -1858,7 +1996,25 @@ declare const en: {
|
|
|
1858
1996
|
cancel: string;
|
|
1859
1997
|
msgCenter: string;
|
|
1860
1998
|
ctrlCenter: string;
|
|
1999
|
+
noAccountPrompt: string;
|
|
2000
|
+
haveAccountPrompt: string;
|
|
2001
|
+
forgetPassword: string;
|
|
2002
|
+
resetPassword: string;
|
|
2003
|
+
verificationCode: string;
|
|
2004
|
+
verifySend: string;
|
|
2005
|
+
verifyResend: string;
|
|
2006
|
+
waitSeconds: string;
|
|
1861
2007
|
emailVerified: string;
|
|
2008
|
+
password: string;
|
|
2009
|
+
username: string;
|
|
2010
|
+
nextStep: string;
|
|
2011
|
+
skipNotVerify: string;
|
|
2012
|
+
logoutConfirm: string;
|
|
2013
|
+
accountMergeNotice: string;
|
|
2014
|
+
accountMergeSelectOne: string;
|
|
2015
|
+
accountMergeConfirm: string;
|
|
2016
|
+
dismiss: string;
|
|
2017
|
+
merge: string;
|
|
1862
2018
|
frontend: string;
|
|
1863
2019
|
backend: string;
|
|
1864
2020
|
loading: string;
|
|
@@ -1914,6 +2070,7 @@ declare interface EntityCookedNotify {
|
|
|
1914
2070
|
|
|
1915
2071
|
declare interface EntityCookedPage {
|
|
1916
2072
|
admin_only: boolean;
|
|
2073
|
+
date: string;
|
|
1917
2074
|
id: number;
|
|
1918
2075
|
key: string;
|
|
1919
2076
|
pv: number;
|
|
@@ -2154,7 +2311,7 @@ declare interface HandlerParamsSiteUpdate {
|
|
|
2154
2311
|
}
|
|
2155
2312
|
|
|
2156
2313
|
declare interface HandlerParamsTransferImport {
|
|
2157
|
-
/** Automatically answer yes for all questions
|
|
2314
|
+
/** Automatically answer yes for all questions */
|
|
2158
2315
|
assumeyes?: boolean;
|
|
2159
2316
|
/** The JSON data */
|
|
2160
2317
|
json_data?: string;
|
|
@@ -2164,6 +2321,8 @@ declare interface HandlerParamsTransferImport {
|
|
|
2164
2321
|
target_site_name?: string;
|
|
2165
2322
|
/** The target site url */
|
|
2166
2323
|
target_site_url?: string;
|
|
2324
|
+
/** Keep domain */
|
|
2325
|
+
url_keep_domain?: boolean;
|
|
2167
2326
|
/** Enable URL resolver */
|
|
2168
2327
|
url_resolver?: boolean;
|
|
2169
2328
|
}
|
|
@@ -2222,11 +2381,47 @@ declare interface HandlerParamsVote {
|
|
|
2222
2381
|
name?: string;
|
|
2223
2382
|
}
|
|
2224
2383
|
|
|
2384
|
+
declare interface HandlerRequestAuthDataMergeApply {
|
|
2385
|
+
user_name: string;
|
|
2386
|
+
}
|
|
2387
|
+
|
|
2388
|
+
declare interface HandlerRequestAuthEmailLogin {
|
|
2389
|
+
code?: string;
|
|
2390
|
+
email: string;
|
|
2391
|
+
password?: string;
|
|
2392
|
+
}
|
|
2393
|
+
|
|
2394
|
+
declare interface HandlerRequestAuthEmailRegister {
|
|
2395
|
+
code: string;
|
|
2396
|
+
email: string;
|
|
2397
|
+
link?: string;
|
|
2398
|
+
name?: string;
|
|
2399
|
+
password: string;
|
|
2400
|
+
}
|
|
2401
|
+
|
|
2402
|
+
declare interface HandlerRequestAuthEmailSend {
|
|
2403
|
+
email: string;
|
|
2404
|
+
}
|
|
2405
|
+
|
|
2225
2406
|
declare interface HandlerResponseAdminUserList {
|
|
2226
2407
|
count: number;
|
|
2227
2408
|
users: EntityCookedUserForAdmin[];
|
|
2228
2409
|
}
|
|
2229
2410
|
|
|
2411
|
+
declare interface HandlerResponseAuthDataMergeApply {
|
|
2412
|
+
deleted_user_count: number;
|
|
2413
|
+
update_comments_count: number;
|
|
2414
|
+
update_notifies_count: number;
|
|
2415
|
+
update_votes_count: number;
|
|
2416
|
+
/** Empty if login user is target user no need to re-login */
|
|
2417
|
+
user_token: string;
|
|
2418
|
+
}
|
|
2419
|
+
|
|
2420
|
+
declare interface HandlerResponseAuthDataMergeCheck {
|
|
2421
|
+
need_merge: boolean;
|
|
2422
|
+
user_names: string[];
|
|
2423
|
+
}
|
|
2424
|
+
|
|
2230
2425
|
declare interface HandlerResponseCaptchaGet {
|
|
2231
2426
|
img_data: string;
|
|
2232
2427
|
}
|
|
@@ -2303,6 +2498,11 @@ declare interface HandlerResponseCommentUpdate {
|
|
|
2303
2498
|
vote_up: number;
|
|
2304
2499
|
}
|
|
2305
2500
|
|
|
2501
|
+
declare interface HandlerResponseConfAuthProviders {
|
|
2502
|
+
anonymous: boolean;
|
|
2503
|
+
providers: AuthAuthProviderInfo[];
|
|
2504
|
+
}
|
|
2505
|
+
|
|
2306
2506
|
declare interface HandlerResponseConfDomain {
|
|
2307
2507
|
/** Is the domain trusted */
|
|
2308
2508
|
is_trusted: boolean;
|
|
@@ -2317,6 +2517,7 @@ declare interface HandlerResponseNotifyList {
|
|
|
2317
2517
|
|
|
2318
2518
|
declare interface HandlerResponsePageFetch {
|
|
2319
2519
|
admin_only: boolean;
|
|
2520
|
+
date: string;
|
|
2320
2521
|
id: number;
|
|
2321
2522
|
key: string;
|
|
2322
2523
|
pv: number;
|
|
@@ -2349,6 +2550,7 @@ declare interface HandlerResponsePagePV {
|
|
|
2349
2550
|
|
|
2350
2551
|
declare interface HandlerResponsePageUpdate {
|
|
2351
2552
|
admin_only: boolean;
|
|
2553
|
+
date: string;
|
|
2352
2554
|
id: number;
|
|
2353
2555
|
key: string;
|
|
2354
2556
|
pv: number;
|
|
@@ -2808,6 +3010,7 @@ declare class SidebarLayer extends Component {
|
|
|
2808
3010
|
private authCheck;
|
|
2809
3011
|
private initLayer;
|
|
2810
3012
|
private createIframe;
|
|
3013
|
+
private getDarkMode;
|
|
2811
3014
|
private iframeLoad;
|
|
2812
3015
|
}
|
|
2813
3016
|
|
|
@@ -2838,8 +3041,6 @@ declare type TKeysOnlyReturn<T extends TObjectWithFuncs, V> = {
|
|
|
2838
3041
|
[K in keyof T]: ReturnType<T[K]> extends V ? K : never;
|
|
2839
3042
|
}[keyof T];
|
|
2840
3043
|
|
|
2841
|
-
declare type TMarked = typeof marked;
|
|
2842
|
-
|
|
2843
3044
|
declare type TObjectWithFuncs = {
|
|
2844
3045
|
[k: string]: (...args: any) => any;
|
|
2845
3046
|
};
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "artalk",
|
|
3
|
-
"version": "2.8.
|
|
3
|
+
"version": "2.8.7",
|
|
4
4
|
"description": "A self-hosted comment system",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"comment-system",
|
|
@@ -105,22 +105,20 @@
|
|
|
105
105
|
"abortcontroller-polyfill": "^1.7.5",
|
|
106
106
|
"hanabi": "^0.4.0",
|
|
107
107
|
"insane": "^2.6.2",
|
|
108
|
-
"marked": "^12.0.
|
|
108
|
+
"marked": "^12.0.2"
|
|
109
109
|
},
|
|
110
110
|
"scripts": {
|
|
111
|
-
"
|
|
111
|
+
"dev": "vite",
|
|
112
|
+
"build": "pnpm build:main && pnpm build:lite && pnpm build:i18n",
|
|
113
|
+
"build:main": "tsc --noEmit && vite build",
|
|
112
114
|
"build:lite": "cross-env ARTALK_LITE=1 vite build",
|
|
113
115
|
"build:i18n": "tsx scripts/build-i18n.ts",
|
|
114
|
-
"
|
|
115
|
-
"predeploy": "pnpm build && pnpm build:demo && pnpm copy:deploy",
|
|
116
|
-
"deploy": "gh-pages -d deploy",
|
|
117
|
-
"dev": "vite",
|
|
116
|
+
"preview": "vite preview",
|
|
118
117
|
"test": "vitest",
|
|
119
118
|
"coverage": "vitest run --coverage",
|
|
120
|
-
"lint": "eslint './src/**/*.{js,ts}'",
|
|
121
|
-
"attw": "pnpx @arethetypeswrong/cli --pack .",
|
|
122
|
-
"serve": "vite preview",
|
|
123
119
|
"test:e2e": "playwright test",
|
|
124
|
-
"test:report": "playwright show-report"
|
|
120
|
+
"test:e2e-report": "playwright show-report",
|
|
121
|
+
"test:attw": "pnpx @arethetypeswrong/cli --pack .",
|
|
122
|
+
"lint": "eslint ."
|
|
125
123
|
}
|
|
126
124
|
}
|