Compare commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
0738e6e782 | ||
|
|
bb804cdb37 | ||
|
|
1c53c52564 | ||
|
|
06133012f7 | ||
|
|
80b879e02a | ||
|
|
fe0e95ddbd | ||
|
|
dcf9297ac6 | ||
|
|
b0f04c55e0 | ||
|
|
c01a65ccbd | ||
|
|
34b25f8d1c | ||
|
|
44b3f1f100 | ||
|
|
8743d79d56 | ||
|
|
2deea89c1b | ||
|
|
ce8bea8efa | ||
|
|
81c4031d2f | ||
|
|
a993601f76 | ||
|
|
2b0ab60ee6 | ||
|
|
7719f9bcc7 | ||
|
|
e25f4a965d | ||
|
|
2cf81ea592 | ||
|
|
6747a7133e | ||
|
|
a80beaf182 | ||
|
|
9a6312d388 | ||
|
|
7b7caafcb6 | ||
|
|
1f8f5d5f0b | ||
|
|
e0cd30baf9 | ||
|
|
bfe0ee4fc2 | ||
|
|
431258ca0c | ||
|
|
9941522ce6 | ||
|
|
25256f5e0a | ||
|
|
b8eb5cf283 | ||
|
|
e9560857d9 | ||
|
|
9b1a83f44f | ||
|
|
d54b3eeb72 |
No files matched your search
@@ -4,7 +4,7 @@ orbs:
|
||||
jobs:
|
||||
build:
|
||||
docker:
|
||||
- image: 'cimg/node:16.15.0'
|
||||
- image: 'cimg/node:16.15.1'
|
||||
steps:
|
||||
- node/install
|
||||
- checkout
|
||||
@@ -13,7 +13,7 @@ jobs:
|
||||
command: node -v
|
||||
- run:
|
||||
name: Install pnpm
|
||||
command: npm i -g pnpm@7.1.2
|
||||
command: npm i -g pnpm@7.2.1
|
||||
- run:
|
||||
name: Install Dependencies
|
||||
command: pnpm install --frozen-lockfile
|
||||
|
||||
@@ -16,9 +16,9 @@ jobs:
|
||||
uses: actions/checkout@v3
|
||||
|
||||
- name: Use pnpm
|
||||
uses: pnpm/action-setup@v2.2.1
|
||||
uses: pnpm/action-setup@v2.2.2
|
||||
with:
|
||||
version: 7.1.2
|
||||
version: 7.2.1
|
||||
|
||||
- name: Set node version to 16.x
|
||||
uses: actions/setup-node@v3
|
||||
|
||||
@@ -14,9 +14,9 @@ jobs:
|
||||
uses: actions/checkout@v3
|
||||
|
||||
- name: Use pnpm
|
||||
uses: pnpm/action-setup@v2.2.1
|
||||
uses: pnpm/action-setup@v2.2.2
|
||||
with:
|
||||
version: 7.1.2
|
||||
version: 7.2.1
|
||||
|
||||
- name: Set node version to 16.x
|
||||
uses: actions/setup-node@v3
|
||||
|
||||
+1
-1
@@ -12,7 +12,7 @@ cache:
|
||||
directories:
|
||||
- "~/.pnpm-store"
|
||||
before_install:
|
||||
- curl -f https://get.pnpm.io/v6.16.js | node - add --global pnpm@7.1.2
|
||||
- curl -fsSL https://get.pnpm.io/install.sh | sh -
|
||||
- pnpm config set store-dir ~/.pnpm-store
|
||||
install:
|
||||
- pnpm install
|
||||
@@ -1,5 +1,5 @@
|
||||
<p align="center">
|
||||
<img src="https://user-images.githubusercontent.com/22412567/137740516-d9e97af0-fb3b-4dab-b331-671a9a2a3a63.png" alt="Artalk" width="100%">
|
||||
<img src="https://user-images.githubusercontent.com/22412567/171680920-6e74b77c-c565-487b-bff1-4f94976ecbe7.png" alt="Artalk" width="100%">
|
||||
</p>
|
||||
|
||||
# Artalk
|
||||
@@ -17,28 +17,28 @@
|
||||
|
||||
- 🍃 轻量 (~30kB)
|
||||
- 👨👧👦 安全 (自托管)
|
||||
- 🐳 易上手 (防秃顶)
|
||||
- 🐳 易上手 (防脱发)
|
||||
- 🍱 Golang 后端 (快速 / 跨平台)
|
||||
- 🌊 TypeScript × Vanilla × Vite (纯天然 / 无依赖)
|
||||
- 🌊 Vanilla x TypeScript × Vite (纯天然 / 无依赖)
|
||||
|
||||
## 特性
|
||||
|
||||
- 侧 边 栏 :多站点集中化管理
|
||||
- 通知中心:红点的标记 / 已读记录
|
||||
- 侧 边 栏 :支持多站点集中化管理
|
||||
- 通知中心:红点的标记 / 提及列表
|
||||
- 身份验证:徽标自定义 / 密码验证
|
||||
- 评论审核:反垃圾检测 / 验证码频率限制
|
||||
- 表情符号:插入表情包 / 快速导入表情包
|
||||
- 邮件提醒:模版自定义 / 多管理员通知
|
||||
- 站点隔离:多站点管理 / 管理员分配
|
||||
- 评论审核:反垃圾检测 / 频率限制
|
||||
- 表情符号:插入表情包 / 快速导入
|
||||
- 邮件提醒:模版自定义 / 多管理员
|
||||
- 站点隔离:管理员分配 / 多个站点
|
||||
- 页面管理:标题可显示 / 快速跳转
|
||||
- 图片上传:上传到本地 / 多种图床
|
||||
- 树洞模式:仅自己可见 / 说说功能
|
||||
- 多元推送:支持钉钉飞书 TG
|
||||
- 多元推送:支持 钉钉 飞书 TG
|
||||
- 无限层级:可切换为平铺模式
|
||||
- 评论投票:赞同还是反对评论
|
||||
- 评论排序:按热度或时间排序
|
||||
- 评论置顶:重要消息置顶显示
|
||||
- 只看作者:仅显示作者的评论
|
||||
- 说说模式:仅自己可发布评论
|
||||
- 异步处理:发送评论无需等待
|
||||
- 滚动加载:评论内容分页处置
|
||||
- 自动保存:用户输入防丢功能
|
||||
@@ -47,15 +47,14 @@
|
||||
- 暗黑模式:防止眼部疾病伤害
|
||||
- 评论折叠:这个不打算给你康
|
||||
- 数据备份:防止评论数据丢失
|
||||
- 数据迁移:在不同评论系统之间来回切换
|
||||
- 一页多评:一页多个评论区(似乎没啥用
|
||||
- Markdown:语法默认支持
|
||||
- 支持 Latex:引入 Artalk 的 Katex 插件
|
||||
- 使用 [Vite](https://github.com/vitejs/vite):开发者的极致体验
|
||||
- 数据迁移:快速切换评论系统
|
||||
- Markdown:默认支持 MD 语法
|
||||
- 支持 Latex:提供集成 Katex 插件
|
||||
- 使用 [Vite](https://github.com/vitejs/vite):属于开发者的极致体验
|
||||
|
||||
## 食用方针
|
||||
|
||||
前往:[“**文档 · 部署**”](https://artalk.js.org/guide/deploy.html)
|
||||
前往:[“**部署文档**”](https://artalk.js.org/guide/deploy.html)
|
||||
|
||||
```sh
|
||||
$ pnpm add artalk
|
||||
@@ -80,13 +79,19 @@ new Artalk({
|
||||
mkdir Artalk
|
||||
cd Artalk
|
||||
|
||||
# 下载配置文件模版
|
||||
curl -L https://raw.githubusercontent.com/ArtalkJS/ArtalkGo/master/artalk-go.example.yml > conf.yml
|
||||
# 拉取 docker 镜像
|
||||
docker pull artalk/artalk-go
|
||||
|
||||
# 生成配置文件
|
||||
docker run -it -v $(pwd)/data:/data --rm artalk/artalk-go gen config data/artalk-go.yml
|
||||
|
||||
# 编辑配置文件
|
||||
vim data/artalk-go.yml
|
||||
|
||||
# 运行 docker 容器
|
||||
docker run -d \
|
||||
--name artalk \
|
||||
--name artalk-go \
|
||||
-p 0.0.0.0:8080:23366 \
|
||||
-v $(pwd)/conf.yml:/conf.yml \
|
||||
-v $(pwd)/data:/data \
|
||||
artalk/artalk-go
|
||||
```
|
||||
@@ -107,9 +112,8 @@ services:
|
||||
container_name: artalk
|
||||
image: artalk/artalk-go
|
||||
ports:
|
||||
- 8080:23366
|
||||
- 端口号:23366
|
||||
volumes:
|
||||
- ./conf.yml:/conf.yml
|
||||
- ./data:/data
|
||||
```
|
||||
|
||||
@@ -125,6 +129,10 @@ docker-compose up -d
|
||||
|
||||
[](https://github.com/ArtalkJS/Artalk/stargazers)
|
||||
|
||||
## 特别致谢
|
||||
|
||||
感谢社区提供的帮助与反馈,若有好的建议与意见欢迎前往 [ISSUES](https://github.com/ArtalkJS/Artalk/issues) 随时告知。
|
||||
|
||||
## TODOs
|
||||
|
||||
- [x] [Golang 后端](https://github.com/ArtalkJS/ArtalkGo)
|
||||
@@ -190,7 +198,7 @@ docker-compose up -d
|
||||
- [x] Bark
|
||||
- [x] Slack
|
||||
- [x] LINE
|
||||
- [ ] 自定义 HTTP 回调
|
||||
- [x] 自定义 HTTP 回调
|
||||
- [ ] 命令行管理
|
||||
- [ ] 博客邮件订阅
|
||||
- [x] 用户鉴权机制
|
||||
@@ -200,7 +208,7 @@ docker-compose up -d
|
||||
- [x] 时区自定义
|
||||
- [x] 只看作者功能
|
||||
- [ ] AT 提及 (@)
|
||||
- [ ] 评论提及 (#)
|
||||
- [ ] 评论话题 (#)
|
||||
- [ ] 表情包统一管理
|
||||
- [ ] 导入表情包
|
||||
- [ ] 表情包图片地址控制
|
||||
@@ -214,13 +222,9 @@ docker-compose up -d
|
||||
- [ ] 扩展中心
|
||||
- [ ] 开放用户注册
|
||||
- [ ] 接入第三方登录
|
||||
- [ ] 国际化 (i18n)
|
||||
- [x] 国际化 (i18n)
|
||||
- [x] 一键升级
|
||||
|
||||
## 特别致谢
|
||||
|
||||
感谢社区提供的帮助与反馈,若有好的建议与意见欢迎前往 [ISSUES](https://github.com/ArtalkJS/Artalk/issues) 随时告知。
|
||||
|
||||
## Stargazers over time
|
||||
|
||||
[](https://starchart.cc/ArtalkJS/Artalk)
|
||||
|
||||
+10
-10
@@ -11,24 +11,24 @@
|
||||
},
|
||||
"devDependencies": {
|
||||
"@rollup/plugin-dynamic-import-vars": "1.4.3",
|
||||
"@types/node": "16.11.36",
|
||||
"@typescript-eslint/eslint-plugin": "5.25.0",
|
||||
"@typescript-eslint/parser": "5.25.0",
|
||||
"@types/node": "16.11.41",
|
||||
"@typescript-eslint/eslint-plugin": "5.28.0",
|
||||
"@typescript-eslint/parser": "5.28.0",
|
||||
"autoprefixer": "10.4.7",
|
||||
"eslint": "8.16.0",
|
||||
"eslint": "8.17.0",
|
||||
"eslint-config-airbnb-base": "15.0.0",
|
||||
"eslint-config-airbnb-typescript": "17.0.0",
|
||||
"eslint-config-prettier": "8.5.0",
|
||||
"eslint-import-resolver-typescript": "2.7.1",
|
||||
"eslint-plugin-compat": "4.0.2",
|
||||
"eslint-plugin-import": "2.26.0",
|
||||
"less": "4.1.2",
|
||||
"less": "4.1.3",
|
||||
"postcss": "8.4.14",
|
||||
"prettier": "2.6.2",
|
||||
"rollup": "2.74.1",
|
||||
"typescript": "4.6.4",
|
||||
"vite": "2.9.9",
|
||||
"vite-tsconfig-paths": "3.4.1"
|
||||
"prettier": "2.7.1",
|
||||
"rollup": "2.75.6",
|
||||
"typescript": "4.7.3",
|
||||
"vite": "2.9.12",
|
||||
"vite-tsconfig-paths": "3.5.0"
|
||||
},
|
||||
"browserslist": [
|
||||
"supports es6 and supports es6-class and supports es6-generators and supports es6-module-dynamic-import and supports es6-module and supports es6-number and supports es6-string-includes"
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
{
|
||||
"name": "artalk",
|
||||
"version": "2.3.2",
|
||||
"backendMinVersion": "2.1.7",
|
||||
"version": "2.3.4",
|
||||
"backendMinVersion": "2.1.10",
|
||||
"license": "LGPL-3.0",
|
||||
"description": "A Selfhosted Comment System",
|
||||
"keywords": [
|
||||
@@ -40,7 +40,7 @@
|
||||
"dependencies": {
|
||||
"hanabi": "^0.4.0",
|
||||
"insane": "^2.6.2",
|
||||
"marked": "^4.0.16",
|
||||
"marked": "^4.0.17",
|
||||
"abortcontroller-polyfill": "^1.7.3"
|
||||
}
|
||||
}
|
||||
@@ -1,7 +1,7 @@
|
||||
import { CommentData, ListData, UserData, PageData, SiteData, NotifyData } from '~/types/artalk-data'
|
||||
import ArtalkConfig from '~/types/artalk-config'
|
||||
import Context from '~/types/context'
|
||||
import { Fetch, ToFormData, POST, GET } from './request'
|
||||
import { Fetch, ToFormData, POST } from './request'
|
||||
import * as Utils from '../lib/utils'
|
||||
import 'abortcontroller-polyfill/dist/polyfill-patch-fetch'
|
||||
|
||||
@@ -58,7 +58,7 @@ export default class Api {
|
||||
}
|
||||
|
||||
/** 评论 · 修改 */
|
||||
public async commentEdit(data: CommentData) {
|
||||
public async commentEdit(data: Partial<CommentData>) {
|
||||
const params: any = {
|
||||
...data,
|
||||
}
|
||||
@@ -126,6 +126,11 @@ export default class Api {
|
||||
return (data || { is_login: false, is_admin: false }) as { is_login: boolean, is_admin: boolean }
|
||||
}
|
||||
|
||||
/** 用户 · 注销 */
|
||||
public async logout() {
|
||||
return POST(this.ctx, `${this.baseURL}/logout`)
|
||||
}
|
||||
|
||||
// ============================
|
||||
// 页面 Page
|
||||
// ============================
|
||||
|
||||
@@ -9,6 +9,9 @@ export async function Fetch(ctx: Context, input: RequestInfo, init: RequestInit,
|
||||
init.headers = headers
|
||||
}
|
||||
|
||||
// 跨域请求携带 cookie (无需)
|
||||
// init.credentials = 'include'
|
||||
|
||||
// 请求操作
|
||||
const resp = await timeoutFetch(ctx, input, timeout || ctx.conf.reqTimeout || 15000, init)
|
||||
|
||||
@@ -60,19 +63,20 @@ export async function POST<T>(ctx: Context, url: string, data?: {[key: string]:
|
||||
const init: RequestInit = {
|
||||
method: 'POST',
|
||||
}
|
||||
if (data) init.body = ToFormData(data)
|
||||
data = { site_name: ctx.conf.site || '', ...(data || {}) } // 总是携带 site_name
|
||||
init.body = ToFormData(data)
|
||||
|
||||
const json = await Fetch(ctx, url, init)
|
||||
return ((json.data || {}) as T)
|
||||
}
|
||||
|
||||
/** 公共 GET 请求 */
|
||||
export async function GET<T>(ctx: Context, url: string, data?: {[key: string]: any}) {
|
||||
const json = await Fetch(ctx, url + (data ? (`?${new URLSearchParams(data)}`) : ''), {
|
||||
method: 'GET',
|
||||
})
|
||||
return ((json.data || {}) as T)
|
||||
}
|
||||
/** 公共 GET 请求 (无 GET 方式 API) */
|
||||
// export async function GET<T>(ctx: Context, url: string, data?: {[key: string]: any}) {
|
||||
// const json = await Fetch(ctx, url + (data ? (`?${new URLSearchParams(data)}`) : ''), {
|
||||
// method: 'GET',
|
||||
// })
|
||||
// return ((json.data || {}) as T)
|
||||
// }
|
||||
|
||||
/** 对象转 FormData */
|
||||
export function ToFormData(object: {[key: string]: any}): FormData {
|
||||
|
||||
@@ -13,7 +13,7 @@ import Editor from './editor'
|
||||
import List from './list'
|
||||
import SidebarLayer from './layer/sidebar-layer'
|
||||
|
||||
import Layer, { GetLayerWrap } from './layer'
|
||||
import Layer from './layer'
|
||||
import * as Utils from './lib/utils'
|
||||
import * as Ui from './lib/ui'
|
||||
import * as Stat from './lib/stat'
|
||||
@@ -35,9 +35,11 @@ export default class Artalk {
|
||||
public list!: List
|
||||
public sidebarLayer!: SidebarLayer
|
||||
|
||||
protected static Plugins: ArtalkPlug[] = [
|
||||
Stat.PvCountWidget
|
||||
]
|
||||
/** Plugins (in global scope) */
|
||||
protected static Plugins: ArtalkPlug[] = [ Stat.PvCountWidget ]
|
||||
|
||||
/** Plugins (in a instance scope) */
|
||||
protected instancePlugins: ArtalkPlug[] = []
|
||||
|
||||
constructor(customConf: Partial<ArtalkConfig>) {
|
||||
/* 初始化基本配置 */
|
||||
@@ -86,7 +88,7 @@ export default class Artalk {
|
||||
// 事件绑定初始化
|
||||
this.initEventBind()
|
||||
|
||||
// 插件初始化
|
||||
// 插件初始化 (global scope)
|
||||
Artalk.Plugins.forEach(plugin => {
|
||||
if (typeof plugin === 'function')
|
||||
plugin(this.ctx)
|
||||
@@ -198,30 +200,6 @@ export default class Artalk {
|
||||
}
|
||||
}
|
||||
|
||||
/** 设置暗黑模式 */
|
||||
public setDarkMode(darkMode: boolean) {
|
||||
const darkModeClassName = 'atk-dark-mode'
|
||||
|
||||
this.ctx.conf.darkMode = darkMode
|
||||
this.ctx.trigger('conf-updated')
|
||||
|
||||
if (this.conf.darkMode) {
|
||||
this.$root.classList.add(darkModeClassName)
|
||||
} else {
|
||||
this.$root.classList.remove(darkModeClassName)
|
||||
}
|
||||
|
||||
// for Layer
|
||||
const { $wrap: $layerWrap } = GetLayerWrap(this.ctx)
|
||||
if ($layerWrap) {
|
||||
if (this.conf.darkMode) {
|
||||
$layerWrap.classList.add(darkModeClassName)
|
||||
} else {
|
||||
$layerWrap.classList.remove(darkModeClassName)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/** 监听事件 */
|
||||
public on<K extends keyof EventPayloadMap>(name: K, handler: Handler<EventPayloadMap[K]>) {
|
||||
this.ctx.on(name, handler, 'external')
|
||||
@@ -242,11 +220,28 @@ export default class Artalk {
|
||||
this.ctx.listReload()
|
||||
}
|
||||
|
||||
/** Use Plugin */
|
||||
public static Use(plugin: ArtalkPlug) {
|
||||
/** 设置暗黑模式 */
|
||||
public setDarkMode(darkMode: boolean) {
|
||||
this.ctx.setDarkMode(darkMode)
|
||||
}
|
||||
|
||||
/** Use Plugin (specific instance) */
|
||||
public use(plugin: ArtalkPlug) {
|
||||
this.instancePlugins.push(plugin)
|
||||
if (typeof plugin === 'function') plugin(this.ctx)
|
||||
}
|
||||
|
||||
/** Use Plugin (static method for global scope) */
|
||||
public static use(plugin: ArtalkPlug) {
|
||||
this.Plugins.push(plugin)
|
||||
}
|
||||
|
||||
/** @deprecated Please replace it with lowercase function name `use(...)`. */
|
||||
public static Use(plugin: ArtalkPlug) {
|
||||
this.use(plugin)
|
||||
console.warn('`Use(...)` is deprecated, replace it with lowercase `use(...)`.')
|
||||
}
|
||||
|
||||
/** 装载数量统计元素 */
|
||||
public static LoadCountWidget(customConf: Partial<ArtalkConfig>) {
|
||||
const conf = this.HandelBaseConf(customConf)
|
||||
|
||||
@@ -214,7 +214,7 @@ export default class CommentRender {
|
||||
}
|
||||
}
|
||||
|
||||
// 绑定回复按钮事件
|
||||
// 回复按钮
|
||||
if (this.data.is_allow_reply) {
|
||||
const replyBtn = Utils.createElement(`<span>${this.ctx.$t('reply')}</span>`)
|
||||
this.$actions.append(replyBtn)
|
||||
@@ -228,7 +228,7 @@ export default class CommentRender {
|
||||
})
|
||||
}
|
||||
|
||||
// 绑定折叠按钮事件
|
||||
// 折叠按钮
|
||||
const collapseBtn = new ActionBtn(this.ctx, {
|
||||
text: () => (this.data.is_collapsed ? this.ctx.$t('expand') : this.ctx.$t('collapse')),
|
||||
adminOnly: true
|
||||
@@ -238,7 +238,7 @@ export default class CommentRender {
|
||||
this.comment.getActions().adminEdit('collapsed', collapseBtn)
|
||||
})
|
||||
|
||||
// 绑定待审核按钮事件
|
||||
// 审核按钮
|
||||
const pendingBtn = new ActionBtn(this.ctx, {
|
||||
text: () => (this.data.is_pending ? this.ctx.$t('pending') : this.ctx.$t('approved')),
|
||||
adminOnly: true
|
||||
@@ -248,7 +248,27 @@ export default class CommentRender {
|
||||
this.comment.getActions().adminEdit('pending', pendingBtn)
|
||||
})
|
||||
|
||||
// 绑定删除按钮事件
|
||||
// 置顶按钮
|
||||
const pinnedBtn = new ActionBtn(this.ctx, {
|
||||
text: () => (this.data.is_pinned ? this.ctx.$t('unpin') : this.ctx.$t('pin')),
|
||||
adminOnly: true
|
||||
})
|
||||
pinnedBtn.appendTo(this.$actions)
|
||||
pinnedBtn.setClick(() => {
|
||||
this.comment.getActions().adminEdit('pinned', pendingBtn)
|
||||
})
|
||||
|
||||
// 编辑按钮
|
||||
const editBtn = new ActionBtn(this.ctx, {
|
||||
text: this.ctx.$t('edit'),
|
||||
adminOnly: true
|
||||
})
|
||||
editBtn.appendTo(this.$actions)
|
||||
editBtn.setClick(() => {
|
||||
this.ctx.editComment(this.data, this.$el)
|
||||
})
|
||||
|
||||
// 删除按钮
|
||||
const delBtn = new ActionBtn(this.ctx, {
|
||||
text: this.ctx.$t('delete'),
|
||||
confirm: true,
|
||||
@@ -259,16 +279,6 @@ export default class CommentRender {
|
||||
delBtn.setClick(() => {
|
||||
this.comment.getActions().adminDelete(delBtn)
|
||||
})
|
||||
|
||||
// 绑定置顶按钮事件
|
||||
const pinnedBtn = new ActionBtn(this.ctx, {
|
||||
text: () => (this.data.is_pinned ? this.ctx.$t('unpin') : this.ctx.$t('pin')),
|
||||
adminOnly: true
|
||||
})
|
||||
pinnedBtn.appendTo(this.$actions)
|
||||
pinnedBtn.setClick(() => {
|
||||
this.comment.getActions().adminEdit('pinned', pendingBtn)
|
||||
})
|
||||
}
|
||||
|
||||
/** 内容限高检测 */
|
||||
|
||||
@@ -115,6 +115,10 @@ export default class Context implements ContextApi {
|
||||
this.list.insertComment(commentData)
|
||||
}
|
||||
|
||||
public updateComment(commentData: CommentData): void {
|
||||
this.list.updateComment(commentData)
|
||||
}
|
||||
|
||||
public replyComment(commentData: CommentData, $comment: HTMLElement, scroll?: boolean): void {
|
||||
this.editor.setReply(commentData, $comment, scroll)
|
||||
}
|
||||
@@ -123,6 +127,14 @@ export default class Context implements ContextApi {
|
||||
this.editor.cancelReply()
|
||||
}
|
||||
|
||||
public editComment(commentData: CommentData, $comment: HTMLElement): void {
|
||||
this.editor.setEditComment(commentData, $comment)
|
||||
}
|
||||
|
||||
public cancelEditComment(): void {
|
||||
this.editor.cancelEditComment()
|
||||
}
|
||||
|
||||
public updateNotifies(notifies: NotifyData[]): void {
|
||||
this.list.updateUnread(notifies)
|
||||
}
|
||||
@@ -132,6 +144,10 @@ export default class Context implements ContextApi {
|
||||
this.list.reload()
|
||||
}
|
||||
|
||||
public reload(): void {
|
||||
this.listReload()
|
||||
}
|
||||
|
||||
public listRefreshUI(): void {
|
||||
this.list.refreshUI()
|
||||
}
|
||||
@@ -234,4 +250,27 @@ export default class Context implements ContextApi {
|
||||
|
||||
return str
|
||||
}
|
||||
|
||||
public setDarkMode(darkMode: boolean): void {
|
||||
const darkModeClassName = 'atk-dark-mode'
|
||||
|
||||
this.conf.darkMode = darkMode
|
||||
this.trigger('conf-updated')
|
||||
|
||||
if (this.conf.darkMode) {
|
||||
this.$root.classList.add(darkModeClassName)
|
||||
} else {
|
||||
this.$root.classList.remove(darkModeClassName)
|
||||
}
|
||||
|
||||
// for Layer
|
||||
const { $wrap: $layerWrap } = GetLayerWrap(this)
|
||||
if ($layerWrap) {
|
||||
if (this.conf.darkMode) {
|
||||
$layerWrap.classList.add(darkModeClassName)
|
||||
} else {
|
||||
$layerWrap.classList.remove(darkModeClassName)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -31,10 +31,18 @@ export default class Editor extends Component {
|
||||
public $submitBtn: HTMLButtonElement
|
||||
public $notifyWrap: HTMLElement
|
||||
|
||||
// Editor 的不同状态
|
||||
private isTraveling = false
|
||||
|
||||
/** 回复评论 */
|
||||
private replyComment: CommentData|null = null
|
||||
private $sendReply: HTMLElement|null = null
|
||||
public get isReplyMode() { return this.replyComment !== null }
|
||||
|
||||
private isTraveling = false
|
||||
/** 编辑评论 */
|
||||
private editComment: CommentData|null = null
|
||||
private $editCancelBtn: HTMLElement|null = null
|
||||
public get isEditMode() { return this.editComment !== null }
|
||||
|
||||
/** 启用的插件 */
|
||||
private readonly ENABLED_PLUGS = [ EmoticonsPlug, UploadPlug, PreviewPlug, HeaderInputPlug ]
|
||||
@@ -98,6 +106,8 @@ export default class Editor extends Component {
|
||||
}
|
||||
|
||||
private onHeaderInput(key: string, $input: HTMLInputElement) {
|
||||
if (this.isEditMode) return // 评论编辑模式,不修改个人信息
|
||||
|
||||
this.user.update({
|
||||
[key]: $input.value.trim()
|
||||
})
|
||||
@@ -128,8 +138,13 @@ export default class Editor extends Component {
|
||||
})
|
||||
}
|
||||
|
||||
private refreshSendBtnText() {
|
||||
if (this.isEditMode) this.$submitBtn.innerText = this.$t('save')
|
||||
else this.$submitBtn.innerText = this.ctx.conf.sendBtn || this.$t('send')
|
||||
}
|
||||
|
||||
private initSubmitBtn() {
|
||||
this.$submitBtn.innerText = this.ctx.conf.sendBtn || this.$t('send')
|
||||
this.refreshSendBtnText()
|
||||
this.$submitBtn.addEventListener('click', () => (this.submit()))
|
||||
}
|
||||
|
||||
@@ -186,21 +201,16 @@ export default class Editor extends Component {
|
||||
}
|
||||
}
|
||||
|
||||
public clearEditor() {
|
||||
this.setContent('')
|
||||
this.cancelReply()
|
||||
}
|
||||
|
||||
private adjustTextareaHeight() {
|
||||
const diff = this.$textarea.offsetHeight - this.$textarea.clientHeight
|
||||
this.$textarea.style.height = '0px' // it's a magic. 若不加此行,内容减少,高度回不去
|
||||
this.$textarea.style.height = `${this.$textarea.scrollHeight + diff}px`
|
||||
}
|
||||
|
||||
/** 设置回复评论 */
|
||||
public setReply(commentData: CommentData, $comment: HTMLElement, scroll = true) {
|
||||
if (this.replyComment !== null) {
|
||||
this.cancelReply()
|
||||
}
|
||||
if (this.isEditMode) this.cancelEditComment()
|
||||
if (this.isReplyMode) this.cancelReply()
|
||||
|
||||
if (this.$sendReply === null) {
|
||||
this.$sendReply = Utils.createElement(`<div class="atk-send-reply">${this.$t('reply')} <span class="atk-text"></span><span class="atk-cancel">×</span></div>`);
|
||||
@@ -221,6 +231,7 @@ export default class Editor extends Component {
|
||||
this.$textarea.focus()
|
||||
}
|
||||
|
||||
/** 取消回复评论 */
|
||||
public cancelReply() {
|
||||
if (this.$sendReply !== null) {
|
||||
this.$sendReply.remove()
|
||||
@@ -233,6 +244,53 @@ export default class Editor extends Component {
|
||||
}
|
||||
}
|
||||
|
||||
/** 设置编辑评论 */
|
||||
public setEditComment(commentData: CommentData, $comment: HTMLElement) {
|
||||
if (this.isEditMode) this.cancelEditComment()
|
||||
if (this.isReplyMode) this.cancelReply()
|
||||
|
||||
if (this.$editCancelBtn === null) {
|
||||
this.$editCancelBtn = Utils.createElement(`<div class="atk-send-reply">${this.$t('editCancel')}<span class="atk-cancel">×</span></div>`);
|
||||
this.$editCancelBtn.onclick = () => {
|
||||
this.cancelEditComment()
|
||||
}
|
||||
this.$textareaWrap.append(this.$editCancelBtn)
|
||||
}
|
||||
this.editComment = commentData
|
||||
|
||||
this.$header.style.display = 'none' // TODO 暂时隐藏
|
||||
|
||||
this.travel($comment)
|
||||
|
||||
this.$nick.value = commentData.nick
|
||||
this.$email.value = commentData.email || ''
|
||||
this.$link.value = commentData.link
|
||||
|
||||
this.setContent(commentData.content)
|
||||
this.$textarea.focus()
|
||||
|
||||
this.refreshSendBtnText()
|
||||
}
|
||||
|
||||
/** 取消编辑评论 */
|
||||
public cancelEditComment() {
|
||||
if (this.$editCancelBtn !== null) {
|
||||
this.$editCancelBtn.remove()
|
||||
this.$editCancelBtn = null
|
||||
}
|
||||
|
||||
this.editComment = null
|
||||
this.travelBack()
|
||||
|
||||
this.$nick.value = this.user.data.nick
|
||||
this.$email.value = this.user.data.email
|
||||
this.$link.value = this.user.data.link
|
||||
|
||||
this.setContent('')
|
||||
this.refreshSendBtnText()
|
||||
this.$header.style.display = '' // TODO
|
||||
}
|
||||
|
||||
public showNotify(msg: string, type: "i"|"s"|"w"|"e") {
|
||||
Ui.showNotify(this.$notifyWrap, msg, type)
|
||||
}
|
||||
@@ -245,7 +303,7 @@ export default class Editor extends Component {
|
||||
Ui.hideLoading(this.$el)
|
||||
}
|
||||
|
||||
/** 提交评论 */
|
||||
/** 点击评论提交按钮事件 */
|
||||
public async submit() {
|
||||
if (this.getFinalContent().trim() === '') {
|
||||
this.$textarea.focus()
|
||||
@@ -256,6 +314,17 @@ export default class Editor extends Component {
|
||||
|
||||
this.showLoading()
|
||||
|
||||
if (!this.isEditMode) {
|
||||
await this.submitAdd()
|
||||
} else {
|
||||
await this.submitEdit()
|
||||
}
|
||||
|
||||
this.hideLoading()
|
||||
}
|
||||
|
||||
/** 创建评论 */
|
||||
public async submitAdd() {
|
||||
try {
|
||||
const nComment = await this.ctx.getApi().add({
|
||||
content: this.getFinalContent(),
|
||||
@@ -274,14 +343,40 @@ export default class Editor extends Component {
|
||||
}
|
||||
|
||||
this.ctx.insertComment(nComment)
|
||||
this.clearEditor() // 清空编辑器
|
||||
|
||||
// 复原编辑器
|
||||
this.setContent('')
|
||||
this.cancelReply()
|
||||
|
||||
this.ctx.trigger('editor-submitted')
|
||||
} catch (err: any) {
|
||||
console.error(err)
|
||||
this.showNotify(`${this.$t('commentFail')},${err.msg || String(err)}`, 'e')
|
||||
}
|
||||
}
|
||||
|
||||
/** 修改评论 */
|
||||
public async submitEdit() {
|
||||
try {
|
||||
const saveData = {
|
||||
content: this.getFinalContent(),
|
||||
nick: this.$nick.value,
|
||||
email: this.$email.value,
|
||||
link: this.$link.value,
|
||||
}
|
||||
const nComment = await this.ctx.getApi().commentEdit({
|
||||
...this.editComment, ...saveData
|
||||
})
|
||||
this.ctx.updateComment(nComment)
|
||||
|
||||
// 复原编辑器
|
||||
this.setContent('')
|
||||
this.cancelEditComment()
|
||||
|
||||
this.ctx.trigger('editor-submitted')
|
||||
} catch (err: any) {
|
||||
console.error(err)
|
||||
this.showNotify(`${this.$t('commentFail')},${err.msg || String(err)}`, 'e')
|
||||
return
|
||||
} finally {
|
||||
this.hideLoading()
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -265,8 +265,8 @@ export default class EmoticonsPlug extends EditorPlug {
|
||||
}
|
||||
})
|
||||
|
||||
this.$grpSwitcher.querySelectorAll('span.active').forEach(item => item.classList.remove('active'))
|
||||
this.$grpSwitcher.querySelector(`span[data-index="${index}"]`)?.classList.add('active')
|
||||
this.$grpSwitcher?.querySelectorAll('span.active').forEach(item => item.classList.remove('active'))
|
||||
this.$grpSwitcher?.querySelector(`span[data-index="${index}"]`)?.classList.add('active')
|
||||
|
||||
this.changeListHeight()
|
||||
}
|
||||
|
||||
@@ -3,6 +3,7 @@ export default {
|
||||
placeholder: 'Leave a comment',
|
||||
noComment: 'No Comment',
|
||||
send: 'Send',
|
||||
save: 'Save',
|
||||
nick: 'Nickname',
|
||||
email: 'Email',
|
||||
link: 'Website',
|
||||
@@ -42,6 +43,8 @@ export default {
|
||||
approved: 'Approved',
|
||||
pending: 'Pending',
|
||||
pendingMsg: 'Pending, visible only to commenter.',
|
||||
edit: 'Edit',
|
||||
editCancel: 'Cancel Edit',
|
||||
delete: 'Delete',
|
||||
deleteConfirm: 'Confirm',
|
||||
pin: 'Pin',
|
||||
|
||||
@@ -5,8 +5,9 @@ const zhCN: I18n = {
|
||||
placeholder: '键入内容...',
|
||||
noComment: '「此时无声胜有声」',
|
||||
send: '发送评论',
|
||||
save: '保存评论',
|
||||
nick: '昵称',
|
||||
email: '邮件',
|
||||
email: '邮箱',
|
||||
link: '网址',
|
||||
emoticon: '表情',
|
||||
preview: '预览',
|
||||
@@ -40,10 +41,12 @@ const zhCN: I18n = {
|
||||
collapse: '折叠',
|
||||
collapsed: '已折叠',
|
||||
collapsedMsg: '该评论已被系统或管理员折叠',
|
||||
expand: '取消折叠',
|
||||
expand: '展开',
|
||||
approved: '已审',
|
||||
pending: '待审',
|
||||
pendingMsg: '审核中,仅本人可见。',
|
||||
edit: '编辑',
|
||||
editCancel: '取消编辑',
|
||||
delete: '删除',
|
||||
deleteConfirm: '确认删除',
|
||||
pin: '置顶',
|
||||
|
||||
@@ -429,6 +429,14 @@ export default class ListLite extends Component {
|
||||
this.ctx.trigger('list-inserted', commentData)
|
||||
}
|
||||
|
||||
/** 更新评论 */
|
||||
public updateComment(commentData: CommentData) {
|
||||
const comment = this.ctx.findComment(commentData.id)
|
||||
if (comment) {
|
||||
comment.setData(commentData)
|
||||
}
|
||||
}
|
||||
|
||||
/** 更新未读数据 */
|
||||
public updateUnread(notifies: NotifyData[]) {
|
||||
this.unread = notifies
|
||||
|
||||
@@ -258,9 +258,8 @@
|
||||
color: var(--at-color-red);
|
||||
}
|
||||
|
||||
&:not(:first-child):not(.atk-hide) {
|
||||
margin-left: 8px;
|
||||
padding-left: 8px;
|
||||
&:not(:last-child):not(.atk-hide) {
|
||||
margin-right: 16px;
|
||||
}
|
||||
|
||||
&:hover {
|
||||
|
||||
@@ -0,0 +1,26 @@
|
||||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<meta http-equiv="X-UA-Compatible" content="IE=edge">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<title>CSRF Test</title>
|
||||
|
||||
<!-- 解除注释来测试当 referer 为空时的行为 -->
|
||||
<!-- <meta name="referrer" content="never"> -->
|
||||
</head>
|
||||
<body>
|
||||
|
||||
<form action="http://localhost:23366/api/add" method="post">
|
||||
<input type="text" name="name" value="admin">
|
||||
<input type="text" name="email" value="test@example.com">
|
||||
<input type="text" name="link" value="">
|
||||
<input type="text" name="content" value="CSRF Success">
|
||||
<input type="text" name="rid" value="0">
|
||||
<input type="text" name="page_key" value="https://artalk.js.org/">
|
||||
<input type="text" name="site_name" value="ArtalkDocs">
|
||||
<button type="submit">Fire!</button>
|
||||
</form>
|
||||
|
||||
</body>
|
||||
</html>
|
||||
+3
@@ -8,6 +8,9 @@ export interface CommentData {
|
||||
/** 用户昵称 */
|
||||
nick: string
|
||||
|
||||
/** 用户邮箱 (该字段仅管理员可见) */
|
||||
email?: string
|
||||
|
||||
/** 用户邮箱(已加密) */
|
||||
email_encrypted: string
|
||||
|
||||
|
||||
Vendored
+15
@@ -63,18 +63,30 @@ export default interface ContextApi {
|
||||
/** 插入评论 */
|
||||
insertComment(commentData: CommentData): void
|
||||
|
||||
/** 更新评论 */
|
||||
updateComment(commentData: CommentData): void
|
||||
|
||||
/** 评论回复 */
|
||||
replyComment(commentData: CommentData, $comment: HTMLElement, scroll?: boolean): void
|
||||
|
||||
/** 取消回复评论 */
|
||||
cancelReplyComment(): void
|
||||
|
||||
/** 编辑评论 */
|
||||
editComment(commentData: CommentData, $comment: HTMLElement): void
|
||||
|
||||
/** 取消编辑评论 */
|
||||
cancelEditComment(): void
|
||||
|
||||
/** 更新通知数据 */
|
||||
updateNotifies(notifies: NotifyData[]): void
|
||||
|
||||
/** 列表 - 重新加载数据 */
|
||||
listReload(): void
|
||||
|
||||
/** 列表 - 重新加载数据 (别名) */
|
||||
reload(): void
|
||||
|
||||
/** 列表 - UI 更新 */
|
||||
listRefreshUI(): void
|
||||
|
||||
@@ -125,4 +137,7 @@ export default interface ContextApi {
|
||||
|
||||
/** i18n 翻译 */
|
||||
$t(key: keyof I18n, args?: {[key: string]: string}): string
|
||||
|
||||
/** 设置暗黑模式 */
|
||||
setDarkMode(darkMode: boolean): void
|
||||
}
|
||||
@@ -4,7 +4,7 @@ import Artalk from 'artalk'
|
||||
import katex from 'katex'
|
||||
|
||||
// @link https://github.com/markedjs/marked/issues/1538#issuecomment-575838181
|
||||
Artalk.Use((ctx) => {
|
||||
Artalk.use((ctx) => {
|
||||
let i = 0
|
||||
const nextID = () => `__atk_katext_id_${i++}__`
|
||||
const mathExpressions: { [key: string]: { type: 'block' | 'inline', expression: string } } = {}
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@artalkjs/plugin-katex",
|
||||
"version": "0.1.2",
|
||||
"version": "0.1.3",
|
||||
"license": "LGPL-3.0",
|
||||
"description": "The katex plugin of artalk",
|
||||
"repository": {
|
||||
@@ -23,7 +23,7 @@
|
||||
},
|
||||
"dependencies": {
|
||||
"artalk": "workspace: *",
|
||||
"katex": "^0.15.6"
|
||||
"katex": "^0.16.0"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@types/katex": "0.14.0"
|
||||
|
||||
Generated
+159
-145
@@ -5,44 +5,44 @@ importers:
|
||||
.:
|
||||
specifiers:
|
||||
'@rollup/plugin-dynamic-import-vars': 1.4.3
|
||||
'@types/node': 16.11.36
|
||||
'@typescript-eslint/eslint-plugin': 5.25.0
|
||||
'@typescript-eslint/parser': 5.25.0
|
||||
'@types/node': 16.11.41
|
||||
'@typescript-eslint/eslint-plugin': 5.28.0
|
||||
'@typescript-eslint/parser': 5.28.0
|
||||
autoprefixer: 10.4.7
|
||||
eslint: 8.16.0
|
||||
eslint: 8.17.0
|
||||
eslint-config-airbnb-base: 15.0.0
|
||||
eslint-config-airbnb-typescript: 17.0.0
|
||||
eslint-config-prettier: 8.5.0
|
||||
eslint-import-resolver-typescript: 2.7.1
|
||||
eslint-plugin-compat: 4.0.2
|
||||
eslint-plugin-import: 2.26.0
|
||||
less: 4.1.2
|
||||
less: 4.1.3
|
||||
postcss: 8.4.14
|
||||
prettier: 2.6.2
|
||||
rollup: 2.74.1
|
||||
typescript: 4.6.4
|
||||
vite: 2.9.9
|
||||
vite-tsconfig-paths: 3.4.1
|
||||
prettier: 2.7.1
|
||||
rollup: 2.75.6
|
||||
typescript: 4.7.3
|
||||
vite: 2.9.12
|
||||
vite-tsconfig-paths: 3.5.0
|
||||
devDependencies:
|
||||
'@rollup/plugin-dynamic-import-vars': 1.4.3_rollup@2.74.1
|
||||
'@types/node': 16.11.36
|
||||
'@typescript-eslint/eslint-plugin': 5.25.0_jorowkvdqu6pwramweg5le7ncu
|
||||
'@typescript-eslint/parser': 5.25.0_utdtartgf6fqqgkivzeynh76la
|
||||
'@rollup/plugin-dynamic-import-vars': 1.4.3_rollup@2.75.6
|
||||
'@types/node': 16.11.41
|
||||
'@typescript-eslint/eslint-plugin': 5.28.0_7yumg2qjgbp7maccqlfhx2vudu
|
||||
'@typescript-eslint/parser': 5.28.0_ud6rd4xtew5bv4yhvkvu24pzm4
|
||||
autoprefixer: 10.4.7_postcss@8.4.14
|
||||
eslint: 8.16.0
|
||||
eslint-config-airbnb-base: 15.0.0_btspkuwbqkl4adpiufzbathtpi
|
||||
eslint-config-airbnb-typescript: 17.0.0_ap2wief2ko4jllacu34d7dt3q4
|
||||
eslint-config-prettier: 8.5.0_eslint@8.16.0
|
||||
eslint-import-resolver-typescript: 2.7.1_btspkuwbqkl4adpiufzbathtpi
|
||||
eslint-plugin-compat: 4.0.2_eslint@8.16.0
|
||||
eslint-plugin-import: 2.26.0_fc3ah3mafsevgtah47p4cah6me
|
||||
less: 4.1.2
|
||||
eslint: 8.17.0
|
||||
eslint-config-airbnb-base: 15.0.0_3yxiwxzsqipdmy4jwrlv6vgfmy
|
||||
eslint-config-airbnb-typescript: 17.0.0_yqtkbzkfygi36jbq264kxf5k4i
|
||||
eslint-config-prettier: 8.5.0_eslint@8.17.0
|
||||
eslint-import-resolver-typescript: 2.7.1_3yxiwxzsqipdmy4jwrlv6vgfmy
|
||||
eslint-plugin-compat: 4.0.2_eslint@8.17.0
|
||||
eslint-plugin-import: 2.26.0_sjsolishy5r5hg73i5w4jemvma
|
||||
less: 4.1.3
|
||||
postcss: 8.4.14
|
||||
prettier: 2.6.2
|
||||
rollup: 2.74.1
|
||||
typescript: 4.6.4
|
||||
vite: 2.9.9_less@4.1.2
|
||||
vite-tsconfig-paths: 3.4.1_vite@2.9.9
|
||||
prettier: 2.7.1
|
||||
rollup: 2.75.6
|
||||
typescript: 4.7.3
|
||||
vite: 2.9.12_less@4.1.3
|
||||
vite-tsconfig-paths: 3.5.0_vite@2.9.12
|
||||
|
||||
packages/artalk:
|
||||
specifiers:
|
||||
@@ -50,12 +50,12 @@ importers:
|
||||
abortcontroller-polyfill: ^1.7.3
|
||||
hanabi: ^0.4.0
|
||||
insane: ^2.6.2
|
||||
marked: ^4.0.16
|
||||
marked: ^4.0.17
|
||||
dependencies:
|
||||
abortcontroller-polyfill: 1.7.3
|
||||
hanabi: 0.4.0
|
||||
insane: 2.6.2
|
||||
marked: 4.0.16
|
||||
marked: 4.0.17
|
||||
devDependencies:
|
||||
'@types/marked': 4.0.3
|
||||
|
||||
@@ -69,10 +69,10 @@ importers:
|
||||
specifiers:
|
||||
'@types/katex': 0.14.0
|
||||
artalk: 'workspace: *'
|
||||
katex: ^0.15.6
|
||||
katex: ^0.16.0
|
||||
dependencies:
|
||||
artalk: link:../artalk
|
||||
katex: 0.15.6
|
||||
katex: 0.16.0
|
||||
devDependencies:
|
||||
'@types/katex': 0.14.0
|
||||
|
||||
@@ -143,7 +143,7 @@ packages:
|
||||
fastq: 1.13.0
|
||||
dev: true
|
||||
|
||||
/@rollup/plugin-dynamic-import-vars/1.4.3_rollup@2.74.1:
|
||||
/@rollup/plugin-dynamic-import-vars/1.4.3_rollup@2.75.6:
|
||||
resolution: {integrity: sha512-VYP9BBVI0pcYpLp/DkFT8YP+EmqmWFMmWXoTObDH6OouERxJyPsIj0tC3HxhjNBOKgcRc7eV75IQItzELt7QSg==}
|
||||
engines: {node: '>= 10.0.0'}
|
||||
peerDependencies:
|
||||
@@ -153,7 +153,7 @@ packages:
|
||||
estree-walker: 2.0.2
|
||||
fast-glob: 3.2.11
|
||||
magic-string: 0.25.9
|
||||
rollup: 2.74.1
|
||||
rollup: 2.75.6
|
||||
dev: true
|
||||
|
||||
/@rollup/pluginutils/4.2.1:
|
||||
@@ -180,12 +180,12 @@ packages:
|
||||
resolution: {integrity: sha512-HnMWQkLJEf/PnxZIfbm0yGJRRZYYMhb++O9M36UCTA9z53uPvVoSlAwJr3XOpDEryb7Hwl1qAx/MV6YIW1RXxg==}
|
||||
dev: true
|
||||
|
||||
/@types/node/16.11.36:
|
||||
resolution: {integrity: sha512-FR5QJe+TaoZ2GsMHkjuwoNabr+UrJNRr2HNOo+r/7vhcuntM6Ee/pRPOnRhhL2XE9OOvX9VLEq+BcXl3VjNoWA==}
|
||||
/@types/node/16.11.41:
|
||||
resolution: {integrity: sha512-mqoYK2TnVjdkGk8qXAVGc/x9nSaTpSrFaGFm43BUH3IdoBV0nta6hYaGmdOvIMlbHJbUEVen3gvwpwovAZKNdQ==}
|
||||
dev: true
|
||||
|
||||
/@typescript-eslint/eslint-plugin/5.25.0_jorowkvdqu6pwramweg5le7ncu:
|
||||
resolution: {integrity: sha512-icYrFnUzvm+LhW0QeJNKkezBu6tJs9p/53dpPLFH8zoM9w1tfaKzVurkPotEpAqQ8Vf8uaFyL5jHd0Vs6Z0ZQg==}
|
||||
/@typescript-eslint/eslint-plugin/5.28.0_7yumg2qjgbp7maccqlfhx2vudu:
|
||||
resolution: {integrity: sha512-DXVU6Cg29H2M6EybqSg2A+x8DgO9TCUBRp4QEXQHJceLS7ogVDP0g3Lkg/SZCqcvkAP/RruuQqK0gdlkgmhSUA==}
|
||||
engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
|
||||
peerDependencies:
|
||||
'@typescript-eslint/parser': ^5.0.0
|
||||
@@ -195,24 +195,24 @@ packages:
|
||||
typescript:
|
||||
optional: true
|
||||
dependencies:
|
||||
'@typescript-eslint/parser': 5.25.0_utdtartgf6fqqgkivzeynh76la
|
||||
'@typescript-eslint/scope-manager': 5.25.0
|
||||
'@typescript-eslint/type-utils': 5.25.0_utdtartgf6fqqgkivzeynh76la
|
||||
'@typescript-eslint/utils': 5.25.0_utdtartgf6fqqgkivzeynh76la
|
||||
'@typescript-eslint/parser': 5.28.0_ud6rd4xtew5bv4yhvkvu24pzm4
|
||||
'@typescript-eslint/scope-manager': 5.28.0
|
||||
'@typescript-eslint/type-utils': 5.28.0_ud6rd4xtew5bv4yhvkvu24pzm4
|
||||
'@typescript-eslint/utils': 5.28.0_ud6rd4xtew5bv4yhvkvu24pzm4
|
||||
debug: 4.3.4
|
||||
eslint: 8.16.0
|
||||
eslint: 8.17.0
|
||||
functional-red-black-tree: 1.0.1
|
||||
ignore: 5.2.0
|
||||
regexpp: 3.2.0
|
||||
semver: 7.3.7
|
||||
tsutils: 3.21.0_typescript@4.6.4
|
||||
typescript: 4.6.4
|
||||
tsutils: 3.21.0_typescript@4.7.3
|
||||
typescript: 4.7.3
|
||||
transitivePeerDependencies:
|
||||
- supports-color
|
||||
dev: true
|
||||
|
||||
/@typescript-eslint/parser/5.25.0_utdtartgf6fqqgkivzeynh76la:
|
||||
resolution: {integrity: sha512-r3hwrOWYbNKP1nTcIw/aZoH+8bBnh/Lh1iDHoFpyG4DnCpvEdctrSl6LOo19fZbzypjQMHdajolxs6VpYoChgA==}
|
||||
/@typescript-eslint/parser/5.28.0_ud6rd4xtew5bv4yhvkvu24pzm4:
|
||||
resolution: {integrity: sha512-ekqoNRNK1lAcKhZESN/PdpVsWbP9jtiNqzFWkp/yAUdZvJalw2heCYuqRmM5eUJSIYEkgq5sGOjq+ZqsLMjtRA==}
|
||||
engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
|
||||
peerDependencies:
|
||||
eslint: ^6.0.0 || ^7.0.0 || ^8.0.0
|
||||
@@ -221,26 +221,26 @@ packages:
|
||||
typescript:
|
||||
optional: true
|
||||
dependencies:
|
||||
'@typescript-eslint/scope-manager': 5.25.0
|
||||
'@typescript-eslint/types': 5.25.0
|
||||
'@typescript-eslint/typescript-estree': 5.25.0_typescript@4.6.4
|
||||
'@typescript-eslint/scope-manager': 5.28.0
|
||||
'@typescript-eslint/types': 5.28.0
|
||||
'@typescript-eslint/typescript-estree': 5.28.0_typescript@4.7.3
|
||||
debug: 4.3.4
|
||||
eslint: 8.16.0
|
||||
typescript: 4.6.4
|
||||
eslint: 8.17.0
|
||||
typescript: 4.7.3
|
||||
transitivePeerDependencies:
|
||||
- supports-color
|
||||
dev: true
|
||||
|
||||
/@typescript-eslint/scope-manager/5.25.0:
|
||||
resolution: {integrity: sha512-p4SKTFWj+2VpreUZ5xMQsBMDdQ9XdRvODKXN4EksyBjFp2YvQdLkyHqOffakYZPuWJUDNu3jVXtHALDyTv3cww==}
|
||||
/@typescript-eslint/scope-manager/5.28.0:
|
||||
resolution: {integrity: sha512-LeBLTqF/he1Z+boRhSqnso6YrzcKMTQ8bO/YKEe+6+O/JGof9M0g3IJlIsqfrK/6K03MlFIlycbf1uQR1IjE+w==}
|
||||
engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
|
||||
dependencies:
|
||||
'@typescript-eslint/types': 5.25.0
|
||||
'@typescript-eslint/visitor-keys': 5.25.0
|
||||
'@typescript-eslint/types': 5.28.0
|
||||
'@typescript-eslint/visitor-keys': 5.28.0
|
||||
dev: true
|
||||
|
||||
/@typescript-eslint/type-utils/5.25.0_utdtartgf6fqqgkivzeynh76la:
|
||||
resolution: {integrity: sha512-B6nb3GK3Gv1Rsb2pqalebe/RyQoyG/WDy9yhj8EE0Ikds4Xa8RR28nHz+wlt4tMZk5bnAr0f3oC8TuDAd5CPrw==}
|
||||
/@typescript-eslint/type-utils/5.28.0_ud6rd4xtew5bv4yhvkvu24pzm4:
|
||||
resolution: {integrity: sha512-SyKjKh4CXPglueyC6ceAFytjYWMoPHMswPQae236zqe1YbhvCVQyIawesYywGiu98L9DwrxsBN69vGIVxJ4mQQ==}
|
||||
engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
|
||||
peerDependencies:
|
||||
eslint: '*'
|
||||
@@ -249,22 +249,22 @@ packages:
|
||||
typescript:
|
||||
optional: true
|
||||
dependencies:
|
||||
'@typescript-eslint/utils': 5.25.0_utdtartgf6fqqgkivzeynh76la
|
||||
'@typescript-eslint/utils': 5.28.0_ud6rd4xtew5bv4yhvkvu24pzm4
|
||||
debug: 4.3.4
|
||||
eslint: 8.16.0
|
||||
tsutils: 3.21.0_typescript@4.6.4
|
||||
typescript: 4.6.4
|
||||
eslint: 8.17.0
|
||||
tsutils: 3.21.0_typescript@4.7.3
|
||||
typescript: 4.7.3
|
||||
transitivePeerDependencies:
|
||||
- supports-color
|
||||
dev: true
|
||||
|
||||
/@typescript-eslint/types/5.25.0:
|
||||
resolution: {integrity: sha512-7fWqfxr0KNHj75PFqlGX24gWjdV/FDBABXL5dyvBOWHpACGyveok8Uj4ipPX/1fGU63fBkzSIycEje4XsOxUFA==}
|
||||
/@typescript-eslint/types/5.28.0:
|
||||
resolution: {integrity: sha512-2OOm8ZTOQxqkPbf+DAo8oc16sDlVR5owgJfKheBkxBKg1vAfw2JsSofH9+16VPlN9PWtv8Wzhklkqw3k/zCVxA==}
|
||||
engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
|
||||
dev: true
|
||||
|
||||
/@typescript-eslint/typescript-estree/5.25.0_typescript@4.6.4:
|
||||
resolution: {integrity: sha512-MrPODKDych/oWs/71LCnuO7NyR681HuBly2uLnX3r5i4ME7q/yBqC4hW33kmxtuauLTM0OuBOhhkFaxCCOjEEw==}
|
||||
/@typescript-eslint/typescript-estree/5.28.0_typescript@4.7.3:
|
||||
resolution: {integrity: sha512-9GX+GfpV+F4hdTtYc6OV9ZkyYilGXPmQpm6AThInpBmKJEyRSIjORJd1G9+bknb7OTFYL+Vd4FBJAO6T78OVqA==}
|
||||
engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
|
||||
peerDependencies:
|
||||
typescript: '*'
|
||||
@@ -272,41 +272,41 @@ packages:
|
||||
typescript:
|
||||
optional: true
|
||||
dependencies:
|
||||
'@typescript-eslint/types': 5.25.0
|
||||
'@typescript-eslint/visitor-keys': 5.25.0
|
||||
'@typescript-eslint/types': 5.28.0
|
||||
'@typescript-eslint/visitor-keys': 5.28.0
|
||||
debug: 4.3.4
|
||||
globby: 11.1.0
|
||||
is-glob: 4.0.3
|
||||
semver: 7.3.7
|
||||
tsutils: 3.21.0_typescript@4.6.4
|
||||
typescript: 4.6.4
|
||||
tsutils: 3.21.0_typescript@4.7.3
|
||||
typescript: 4.7.3
|
||||
transitivePeerDependencies:
|
||||
- supports-color
|
||||
dev: true
|
||||
|
||||
/@typescript-eslint/utils/5.25.0_utdtartgf6fqqgkivzeynh76la:
|
||||
resolution: {integrity: sha512-qNC9bhnz/n9Kba3yI6HQgQdBLuxDoMgdjzdhSInZh6NaDnFpTUlwNGxplUFWfY260Ya0TRPvkg9dd57qxrJI9g==}
|
||||
/@typescript-eslint/utils/5.28.0_ud6rd4xtew5bv4yhvkvu24pzm4:
|
||||
resolution: {integrity: sha512-E60N5L0fjv7iPJV3UGc4EC+A3Lcj4jle9zzR0gW7vXhflO7/J29kwiTGITA2RlrmPokKiZbBy2DgaclCaEUs6g==}
|
||||
engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
|
||||
peerDependencies:
|
||||
eslint: ^6.0.0 || ^7.0.0 || ^8.0.0
|
||||
dependencies:
|
||||
'@types/json-schema': 7.0.11
|
||||
'@typescript-eslint/scope-manager': 5.25.0
|
||||
'@typescript-eslint/types': 5.25.0
|
||||
'@typescript-eslint/typescript-estree': 5.25.0_typescript@4.6.4
|
||||
eslint: 8.16.0
|
||||
'@typescript-eslint/scope-manager': 5.28.0
|
||||
'@typescript-eslint/types': 5.28.0
|
||||
'@typescript-eslint/typescript-estree': 5.28.0_typescript@4.7.3
|
||||
eslint: 8.17.0
|
||||
eslint-scope: 5.1.1
|
||||
eslint-utils: 3.0.0_eslint@8.16.0
|
||||
eslint-utils: 3.0.0_eslint@8.17.0
|
||||
transitivePeerDependencies:
|
||||
- supports-color
|
||||
- typescript
|
||||
dev: true
|
||||
|
||||
/@typescript-eslint/visitor-keys/5.25.0:
|
||||
resolution: {integrity: sha512-yd26vFgMsC4h2dgX4+LR+GeicSKIfUvZREFLf3DDjZPtqgLx5AJZr6TetMNwFP9hcKreTTeztQYBTNbNoOycwA==}
|
||||
/@typescript-eslint/visitor-keys/5.28.0:
|
||||
resolution: {integrity: sha512-BtfP1vCor8cWacovzzPFOoeW4kBQxzmhxGoOpt0v1SFvG+nJ0cWaVdJk7cky1ArTcFHHKNIxyo2LLr3oNkSuXA==}
|
||||
engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
|
||||
dependencies:
|
||||
'@typescript-eslint/types': 5.25.0
|
||||
'@typescript-eslint/types': 5.28.0
|
||||
eslint-visitor-keys: 3.3.0
|
||||
dev: true
|
||||
|
||||
@@ -867,7 +867,7 @@ packages:
|
||||
engines: {node: '>=10'}
|
||||
dev: true
|
||||
|
||||
/eslint-config-airbnb-base/15.0.0_btspkuwbqkl4adpiufzbathtpi:
|
||||
/eslint-config-airbnb-base/15.0.0_3yxiwxzsqipdmy4jwrlv6vgfmy:
|
||||
resolution: {integrity: sha512-xaX3z4ZZIcFLvh2oUNvcX5oEofXda7giYmuplVxoOg5A7EXJMrUyqRgR+mhDhPK8LZ4PttFOBvCYDbX3sUoUig==}
|
||||
engines: {node: ^10.12.0 || >=12.0.0}
|
||||
peerDependencies:
|
||||
@@ -875,14 +875,14 @@ packages:
|
||||
eslint-plugin-import: ^2.25.2
|
||||
dependencies:
|
||||
confusing-browser-globals: 1.0.11
|
||||
eslint: 8.16.0
|
||||
eslint-plugin-import: 2.26.0_fc3ah3mafsevgtah47p4cah6me
|
||||
eslint: 8.17.0
|
||||
eslint-plugin-import: 2.26.0_sjsolishy5r5hg73i5w4jemvma
|
||||
object.assign: 4.1.2
|
||||
object.entries: 1.1.5
|
||||
semver: 6.3.0
|
||||
dev: true
|
||||
|
||||
/eslint-config-airbnb-typescript/17.0.0_ap2wief2ko4jllacu34d7dt3q4:
|
||||
/eslint-config-airbnb-typescript/17.0.0_yqtkbzkfygi36jbq264kxf5k4i:
|
||||
resolution: {integrity: sha512-elNiuzD0kPAPTXjFWg+lE24nMdHMtuxgYoD30OyMD6yrW1AhFZPAg27VX7d3tzOErw+dgJTNWfRSDqEcXb4V0g==}
|
||||
peerDependencies:
|
||||
'@typescript-eslint/eslint-plugin': ^5.13.0
|
||||
@@ -890,20 +890,20 @@ packages:
|
||||
eslint: ^7.32.0 || ^8.2.0
|
||||
eslint-plugin-import: ^2.25.3
|
||||
dependencies:
|
||||
'@typescript-eslint/eslint-plugin': 5.25.0_jorowkvdqu6pwramweg5le7ncu
|
||||
'@typescript-eslint/parser': 5.25.0_utdtartgf6fqqgkivzeynh76la
|
||||
eslint: 8.16.0
|
||||
eslint-config-airbnb-base: 15.0.0_btspkuwbqkl4adpiufzbathtpi
|
||||
eslint-plugin-import: 2.26.0_fc3ah3mafsevgtah47p4cah6me
|
||||
'@typescript-eslint/eslint-plugin': 5.28.0_7yumg2qjgbp7maccqlfhx2vudu
|
||||
'@typescript-eslint/parser': 5.28.0_ud6rd4xtew5bv4yhvkvu24pzm4
|
||||
eslint: 8.17.0
|
||||
eslint-config-airbnb-base: 15.0.0_3yxiwxzsqipdmy4jwrlv6vgfmy
|
||||
eslint-plugin-import: 2.26.0_sjsolishy5r5hg73i5w4jemvma
|
||||
dev: true
|
||||
|
||||
/eslint-config-prettier/8.5.0_eslint@8.16.0:
|
||||
/eslint-config-prettier/8.5.0_eslint@8.17.0:
|
||||
resolution: {integrity: sha512-obmWKLUNCnhtQRKc+tmnYuQl0pFU1ibYJQ5BGhTVB08bHe9wC8qUeG7c08dj9XX+AuPj1YSGSQIHl1pnDHZR0Q==}
|
||||
hasBin: true
|
||||
peerDependencies:
|
||||
eslint: '>=7.0.0'
|
||||
dependencies:
|
||||
eslint: 8.16.0
|
||||
eslint: 8.17.0
|
||||
dev: true
|
||||
|
||||
/eslint-import-resolver-node/0.3.6:
|
||||
@@ -915,7 +915,7 @@ packages:
|
||||
- supports-color
|
||||
dev: true
|
||||
|
||||
/eslint-import-resolver-typescript/2.7.1_btspkuwbqkl4adpiufzbathtpi:
|
||||
/eslint-import-resolver-typescript/2.7.1_3yxiwxzsqipdmy4jwrlv6vgfmy:
|
||||
resolution: {integrity: sha512-00UbgGwV8bSgUv34igBDbTOtKhqoRMy9bFjNehT40bXg6585PNIct8HhXZ0SybqB9rWtXj9crcku8ndDn/gIqQ==}
|
||||
engines: {node: '>=4'}
|
||||
peerDependencies:
|
||||
@@ -923,8 +923,8 @@ packages:
|
||||
eslint-plugin-import: '*'
|
||||
dependencies:
|
||||
debug: 4.3.4
|
||||
eslint: 8.16.0
|
||||
eslint-plugin-import: 2.26.0_fc3ah3mafsevgtah47p4cah6me
|
||||
eslint: 8.17.0
|
||||
eslint-plugin-import: 2.26.0_sjsolishy5r5hg73i5w4jemvma
|
||||
glob: 7.2.0
|
||||
is-glob: 4.0.3
|
||||
resolve: 1.22.0
|
||||
@@ -933,7 +933,7 @@ packages:
|
||||
- supports-color
|
||||
dev: true
|
||||
|
||||
/eslint-module-utils/2.7.3_rak4pgp43wdbzd6xmlhzgag4yu:
|
||||
/eslint-module-utils/2.7.3_pbmiczca3qpqvnkfcriol7sq7u:
|
||||
resolution: {integrity: sha512-088JEC7O3lDZM9xGe0RerkOMd0EjFl+Yvd1jPWIkMT5u3H9+HC34mWWPnqPrN13gieT9pBOO+Qt07Nb/6TresQ==}
|
||||
engines: {node: '>=4'}
|
||||
peerDependencies:
|
||||
@@ -951,16 +951,16 @@ packages:
|
||||
eslint-import-resolver-webpack:
|
||||
optional: true
|
||||
dependencies:
|
||||
'@typescript-eslint/parser': 5.25.0_utdtartgf6fqqgkivzeynh76la
|
||||
'@typescript-eslint/parser': 5.28.0_ud6rd4xtew5bv4yhvkvu24pzm4
|
||||
debug: 3.2.7
|
||||
eslint-import-resolver-node: 0.3.6
|
||||
eslint-import-resolver-typescript: 2.7.1_btspkuwbqkl4adpiufzbathtpi
|
||||
eslint-import-resolver-typescript: 2.7.1_3yxiwxzsqipdmy4jwrlv6vgfmy
|
||||
find-up: 2.1.0
|
||||
transitivePeerDependencies:
|
||||
- supports-color
|
||||
dev: true
|
||||
|
||||
/eslint-plugin-compat/4.0.2_eslint@8.16.0:
|
||||
/eslint-plugin-compat/4.0.2_eslint@8.17.0:
|
||||
resolution: {integrity: sha512-xqvoO54CLTVaEYGMzhu35Wzwk/As7rCvz/2dqwnFiWi0OJccEtGIn+5qq3zqIu9nboXlpdBN579fZcItC73Ycg==}
|
||||
engines: {node: '>=9.x'}
|
||||
peerDependencies:
|
||||
@@ -971,13 +971,13 @@ packages:
|
||||
browserslist: 4.20.2
|
||||
caniuse-lite: 1.0.30001332
|
||||
core-js: 3.22.4
|
||||
eslint: 8.16.0
|
||||
eslint: 8.17.0
|
||||
find-up: 5.0.0
|
||||
lodash.memoize: 4.1.2
|
||||
semver: 7.3.5
|
||||
dev: true
|
||||
|
||||
/eslint-plugin-import/2.26.0_fc3ah3mafsevgtah47p4cah6me:
|
||||
/eslint-plugin-import/2.26.0_sjsolishy5r5hg73i5w4jemvma:
|
||||
resolution: {integrity: sha512-hYfi3FXaM8WPLf4S1cikh/r4IxnO6zrhZbEGz2b660EJRbuxgpDS5gkCuYgGWg2xxh2rBuIr4Pvhve/7c31koA==}
|
||||
engines: {node: '>=4'}
|
||||
peerDependencies:
|
||||
@@ -987,14 +987,14 @@ packages:
|
||||
'@typescript-eslint/parser':
|
||||
optional: true
|
||||
dependencies:
|
||||
'@typescript-eslint/parser': 5.25.0_utdtartgf6fqqgkivzeynh76la
|
||||
'@typescript-eslint/parser': 5.28.0_ud6rd4xtew5bv4yhvkvu24pzm4
|
||||
array-includes: 3.1.4
|
||||
array.prototype.flat: 1.3.0
|
||||
debug: 2.6.9
|
||||
doctrine: 2.1.0
|
||||
eslint: 8.16.0
|
||||
eslint: 8.17.0
|
||||
eslint-import-resolver-node: 0.3.6
|
||||
eslint-module-utils: 2.7.3_rak4pgp43wdbzd6xmlhzgag4yu
|
||||
eslint-module-utils: 2.7.3_pbmiczca3qpqvnkfcriol7sq7u
|
||||
has: 1.0.3
|
||||
is-core-module: 2.9.0
|
||||
is-glob: 4.0.3
|
||||
@@ -1024,13 +1024,13 @@ packages:
|
||||
estraverse: 5.3.0
|
||||
dev: true
|
||||
|
||||
/eslint-utils/3.0.0_eslint@8.16.0:
|
||||
/eslint-utils/3.0.0_eslint@8.17.0:
|
||||
resolution: {integrity: sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA==}
|
||||
engines: {node: ^10.0.0 || ^12.0.0 || >= 14.0.0}
|
||||
peerDependencies:
|
||||
eslint: '>=5'
|
||||
dependencies:
|
||||
eslint: 8.16.0
|
||||
eslint: 8.17.0
|
||||
eslint-visitor-keys: 2.1.0
|
||||
dev: true
|
||||
|
||||
@@ -1044,8 +1044,8 @@ packages:
|
||||
engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
|
||||
dev: true
|
||||
|
||||
/eslint/8.16.0:
|
||||
resolution: {integrity: sha512-MBndsoXY/PeVTDJeWsYj7kLZ5hQpJOfMYLsF6LicLHQWbRDG19lK5jOix4DPl8yY4SUFcE3txy86OzFLWT+yoA==}
|
||||
/eslint/8.17.0:
|
||||
resolution: {integrity: sha512-gq0m0BTJfci60Fz4nczYxNAlED+sMcihltndR8t9t1evnU/azx53x3t2UHXC/uRjcbvRw/XctpaNygSTcQD+Iw==}
|
||||
engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
|
||||
hasBin: true
|
||||
dependencies:
|
||||
@@ -1058,7 +1058,7 @@ packages:
|
||||
doctrine: 3.0.0
|
||||
escape-string-regexp: 4.0.0
|
||||
eslint-scope: 7.1.1
|
||||
eslint-utils: 3.0.0_eslint@8.16.0
|
||||
eslint-utils: 3.0.0_eslint@8.17.0
|
||||
eslint-visitor-keys: 3.3.0
|
||||
espree: 9.3.2
|
||||
esquery: 1.4.0
|
||||
@@ -1150,7 +1150,7 @@ packages:
|
||||
dev: true
|
||||
|
||||
/fast-levenshtein/2.0.6:
|
||||
resolution: {integrity: sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=}
|
||||
resolution: {integrity: sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==}
|
||||
dev: true
|
||||
|
||||
/fastq/1.13.0:
|
||||
@@ -1221,7 +1221,7 @@ packages:
|
||||
dev: true
|
||||
|
||||
/functional-red-black-tree/1.0.1:
|
||||
resolution: {integrity: sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=}
|
||||
resolution: {integrity: sha512-dsKNQNdj6xA3T+QlADDA7mOSlX0qiMINjn0cgr+eGHGsbSHzTabcIogz2+p/iqP1Xs6EP/sS2SbqH+brGTbq0g==}
|
||||
dev: true
|
||||
|
||||
/get-intrinsic/1.1.1:
|
||||
@@ -1343,8 +1343,8 @@ packages:
|
||||
hasBin: true
|
||||
dev: false
|
||||
|
||||
/iconv-lite/0.4.24:
|
||||
resolution: {integrity: sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==}
|
||||
/iconv-lite/0.6.3:
|
||||
resolution: {integrity: sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==}
|
||||
engines: {node: '>=0.10.0'}
|
||||
dependencies:
|
||||
safer-buffer: 2.1.2
|
||||
@@ -1357,7 +1357,7 @@ packages:
|
||||
dev: true
|
||||
|
||||
/image-size/0.5.5:
|
||||
resolution: {integrity: sha1-Cd/Uq50g4p6xw+gLiZA3jfnjy5w=}
|
||||
resolution: {integrity: sha512-6TDAlDPZxUFCv+fuOkIoXT/V/f3Qbq8e37p+YOiYrUv3v9cc3/6x78VdfPgFVaB9dZYeLUfKgHRebpkm/oP2VQ==}
|
||||
engines: {node: '>=0.10.0'}
|
||||
hasBin: true
|
||||
requiresBuild: true
|
||||
@@ -1373,7 +1373,7 @@ packages:
|
||||
dev: true
|
||||
|
||||
/imurmurhash/0.1.4:
|
||||
resolution: {integrity: sha1-khi5srkoojixPcT7a21XbyMUU+o=}
|
||||
resolution: {integrity: sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==}
|
||||
engines: {node: '>=0.8.19'}
|
||||
dev: true
|
||||
|
||||
@@ -1504,7 +1504,7 @@ packages:
|
||||
dev: true
|
||||
|
||||
/isexe/2.0.0:
|
||||
resolution: {integrity: sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=}
|
||||
resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==}
|
||||
dev: true
|
||||
|
||||
/js-yaml/4.1.0:
|
||||
@@ -1519,7 +1519,7 @@ packages:
|
||||
dev: true
|
||||
|
||||
/json-stable-stringify-without-jsonify/1.0.1:
|
||||
resolution: {integrity: sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE=}
|
||||
resolution: {integrity: sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==}
|
||||
dev: true
|
||||
|
||||
/json5/1.0.1:
|
||||
@@ -1529,15 +1529,21 @@ packages:
|
||||
minimist: 1.2.6
|
||||
dev: true
|
||||
|
||||
/katex/0.15.6:
|
||||
resolution: {integrity: sha512-UpzJy4yrnqnhXvRPhjEuLA4lcPn6eRngixW7Q3TJErjg3Aw2PuLFBzTkdUb89UtumxjhHTqL3a5GDGETMSwgJA==}
|
||||
/json5/2.2.1:
|
||||
resolution: {integrity: sha512-1hqLFMSrGHRHxav9q9gNjJ5EXznIxGVO09xQRrwplcS8qs28pZ8s8hupZAmqDwZUmVZ2Qb2jnyPOWcDH8m8dlA==}
|
||||
engines: {node: '>=6'}
|
||||
hasBin: true
|
||||
dev: true
|
||||
|
||||
/katex/0.16.0:
|
||||
resolution: {integrity: sha512-wPRB4iUPysfH97wTgG5/tRLYxmKVq6Q4jRAWRVOUxXB1dsiv4cvcNjqabHkrOvJHM1Bpk3WrgmllSO1vIvP24w==}
|
||||
hasBin: true
|
||||
dependencies:
|
||||
commander: 8.3.0
|
||||
dev: false
|
||||
|
||||
/less/4.1.2:
|
||||
resolution: {integrity: sha512-EoQp/Et7OSOVu0aJknJOtlXZsnr8XE8KwuzTHOLeVSEx8pVWUICc8Q0VYRHgzyjX78nMEyC/oztWFbgyhtNfDA==}
|
||||
/less/4.1.3:
|
||||
resolution: {integrity: sha512-w16Xk/Ta9Hhyei0Gpz9m7VS8F28nieJaL/VyShID7cYvP6IL5oHeL6p4TXSDJqZE/lNv0oJ2pGVjJsRkfwm5FA==}
|
||||
engines: {node: '>=6'}
|
||||
hasBin: true
|
||||
dependencies:
|
||||
@@ -1550,7 +1556,7 @@ packages:
|
||||
image-size: 0.5.5
|
||||
make-dir: 2.1.0
|
||||
mime: 1.6.0
|
||||
needle: 2.9.1
|
||||
needle: 3.1.0
|
||||
source-map: 0.6.1
|
||||
transitivePeerDependencies:
|
||||
- supports-color
|
||||
@@ -1610,8 +1616,8 @@ packages:
|
||||
dev: true
|
||||
optional: true
|
||||
|
||||
/marked/4.0.16:
|
||||
resolution: {integrity: sha512-wahonIQ5Jnyatt2fn8KqF/nIqZM8mh3oRu2+l5EANGMhu6RFjiSG52QNE2eWzFMI94HqYSgN184NurgNG6CztA==}
|
||||
/marked/4.0.17:
|
||||
resolution: {integrity: sha512-Wfk0ATOK5iPxM4ptrORkFemqroz0ZDxp5MWfYA7H/F+wO17NRWV5Ypxi6p3g2Xmw2bKeiYOl6oVnLHKxBA0VhA==}
|
||||
engines: {node: '>= 12'}
|
||||
hasBin: true
|
||||
dev: false
|
||||
@@ -1648,7 +1654,7 @@ packages:
|
||||
dev: true
|
||||
|
||||
/ms/2.0.0:
|
||||
resolution: {integrity: sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=}
|
||||
resolution: {integrity: sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==}
|
||||
dev: true
|
||||
|
||||
/ms/2.1.2:
|
||||
@@ -1666,17 +1672,17 @@ packages:
|
||||
dev: true
|
||||
|
||||
/natural-compare/1.4.0:
|
||||
resolution: {integrity: sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=}
|
||||
resolution: {integrity: sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==}
|
||||
dev: true
|
||||
|
||||
/needle/2.9.1:
|
||||
resolution: {integrity: sha512-6R9fqJ5Zcmf+uYaFgdIHmLwNldn5HbK8L5ybn7Uz+ylX/rnOsSp1AHcvQSrCaFN+qNM1wpymHqD7mVasEOlHGQ==}
|
||||
/needle/3.1.0:
|
||||
resolution: {integrity: sha512-gCE9weDhjVGCRqS8dwDR/D3GTAeyXLXuqp7I8EzH6DllZGXSUyxuqqLh+YX9rMAWaaTFyVAg6rHGL25dqvczKw==}
|
||||
engines: {node: '>= 4.4.x'}
|
||||
hasBin: true
|
||||
requiresBuild: true
|
||||
dependencies:
|
||||
debug: 3.2.7
|
||||
iconv-lite: 0.4.24
|
||||
iconv-lite: 0.6.3
|
||||
sax: 1.2.4
|
||||
transitivePeerDependencies:
|
||||
- supports-color
|
||||
@@ -1854,14 +1860,14 @@ packages:
|
||||
engines: {node: '>= 0.8.0'}
|
||||
dev: true
|
||||
|
||||
/prettier/2.6.2:
|
||||
resolution: {integrity: sha512-PkUpF+qoXTqhOeWL9fu7As8LXsIUZ1WYaJiY/a7McAQzxjk82OF0tibkFXVCDImZtWxbvojFjerkiLb0/q8mew==}
|
||||
/prettier/2.7.1:
|
||||
resolution: {integrity: sha512-ujppO+MkdPqoVINuDFDRLClm7D78qbDt0/NR+wp5FqEZOoTNAjPHWj17QRhu7geIHJfcNhRk1XVQmF8Bp3ye+g==}
|
||||
engines: {node: '>=10.13.0'}
|
||||
hasBin: true
|
||||
dev: true
|
||||
|
||||
/prr/1.0.1:
|
||||
resolution: {integrity: sha1-0/wRS6BplaRexok/SEzrHXj19HY=}
|
||||
resolution: {integrity: sha512-yPw4Sng1gWghHQWj0B3ZggWUm4qVbPwPFcRG8KyxiU7J2OHFSoEHKS+EZ3fv5l1t9CyCiop6l/ZYeWbrgoQejw==}
|
||||
dev: true
|
||||
optional: true
|
||||
|
||||
@@ -1914,8 +1920,8 @@ packages:
|
||||
glob: 7.2.0
|
||||
dev: true
|
||||
|
||||
/rollup/2.74.1:
|
||||
resolution: {integrity: sha512-K2zW7kV8Voua5eGkbnBtWYfMIhYhT9Pel2uhBk2WO5eMee161nPze/XRfvEQPFYz7KgrCCnmh2Wy0AMFLGGmMA==}
|
||||
/rollup/2.75.6:
|
||||
resolution: {integrity: sha512-OEf0TgpC9vU6WGROJIk1JA3LR5vk/yvqlzxqdrE2CzzXnqKXNzbAwlWUXis8RS3ZPe7LAq+YUxsRa0l3r27MLA==}
|
||||
engines: {node: '>=10.0.0'}
|
||||
hasBin: true
|
||||
optionalDependencies:
|
||||
@@ -2050,7 +2056,7 @@ packages:
|
||||
dev: true
|
||||
|
||||
/text-table/0.2.0:
|
||||
resolution: {integrity: sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=}
|
||||
resolution: {integrity: sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==}
|
||||
dev: true
|
||||
|
||||
/to-regex-range/5.0.1:
|
||||
@@ -2069,6 +2075,14 @@ packages:
|
||||
strip-bom: 3.0.0
|
||||
dev: true
|
||||
|
||||
/tsconfig-paths/4.0.0:
|
||||
resolution: {integrity: sha512-SLBg2GBKlR6bVtMgJJlud/o3waplKtL7skmLkExomIiaAtLGtVsoXIqP3SYdjbcH9lq/KVv7pMZeCBpLYOit6Q==}
|
||||
dependencies:
|
||||
json5: 2.2.1
|
||||
minimist: 1.2.6
|
||||
strip-bom: 3.0.0
|
||||
dev: true
|
||||
|
||||
/tslib/1.14.1:
|
||||
resolution: {integrity: sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==}
|
||||
dev: true
|
||||
@@ -2077,14 +2091,14 @@ packages:
|
||||
resolution: {integrity: sha512-77EbyPPpMz+FRFRuAFlWMtmgUWGe9UOG2Z25NqCwiIjRhOf5iKGuzSe5P2w1laq+FkRy4p+PCuVkJSGkzTEKVw==}
|
||||
dev: true
|
||||
|
||||
/tsutils/3.21.0_typescript@4.6.4:
|
||||
/tsutils/3.21.0_typescript@4.7.3:
|
||||
resolution: {integrity: sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==}
|
||||
engines: {node: '>= 6'}
|
||||
peerDependencies:
|
||||
typescript: '>=2.8.0 || >= 3.2.0-dev || >= 3.3.0-dev || >= 3.4.0-dev || >= 3.5.0-dev || >= 3.6.0-dev || >= 3.6.0-beta || >= 3.7.0-dev || >= 3.7.0-beta'
|
||||
dependencies:
|
||||
tslib: 1.14.1
|
||||
typescript: 4.6.4
|
||||
typescript: 4.7.3
|
||||
dev: true
|
||||
|
||||
/type-check/0.4.0:
|
||||
@@ -2099,8 +2113,8 @@ packages:
|
||||
engines: {node: '>=10'}
|
||||
dev: true
|
||||
|
||||
/typescript/4.6.4:
|
||||
resolution: {integrity: sha512-9ia/jWHIEbo49HfjrLGfKbZSuWo9iTMwXO+Ca3pRsSpbsMbc7/IU8NKdCZVRRBafVPGnoJeFL76ZOAA84I9fEg==}
|
||||
/typescript/4.7.3:
|
||||
resolution: {integrity: sha512-WOkT3XYvrpXx4vMMqlD+8R8R37fZkjyLGlxavMc4iB8lrl8L0DeTcHbYgw/v0N/z9wAFsgBhcsF0ruoySS22mA==}
|
||||
engines: {node: '>=4.2.0'}
|
||||
hasBin: true
|
||||
dev: true
|
||||
@@ -2124,22 +2138,22 @@ packages:
|
||||
resolution: {integrity: sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA==}
|
||||
dev: true
|
||||
|
||||
/vite-tsconfig-paths/3.4.1_vite@2.9.9:
|
||||
resolution: {integrity: sha512-SgK3/pnTuJ3i+gMSAWLR6VCPSw26bnxawrmXGvCDjJgk8MAQgmbCrFrAzfwbwZBXSqSuvWEuX04Wt73qJKx8fQ==}
|
||||
/vite-tsconfig-paths/3.5.0_vite@2.9.12:
|
||||
resolution: {integrity: sha512-NKIubr7gXgh/3uniQaOytSg+aKWPrjquP6anAy+zCWEn6h9fB8z2/qdlfQrTgZWaXJ2pHVlllrSdRZltHn9P4g==}
|
||||
peerDependencies:
|
||||
vite: '>2.0.0-0'
|
||||
dependencies:
|
||||
debug: 4.3.4
|
||||
globrex: 0.1.2
|
||||
recrawl-sync: 2.2.2
|
||||
tsconfig-paths: 3.14.1
|
||||
vite: 2.9.9_less@4.1.2
|
||||
tsconfig-paths: 4.0.0
|
||||
vite: 2.9.12_less@4.1.3
|
||||
transitivePeerDependencies:
|
||||
- supports-color
|
||||
dev: true
|
||||
|
||||
/vite/2.9.9_less@4.1.2:
|
||||
resolution: {integrity: sha512-ffaam+NgHfbEmfw/Vuh6BHKKlI/XIAhxE5QSS7gFLIngxg171mg1P3a4LSRME0z2ZU1ScxoKzphkipcYwSD5Ew==}
|
||||
/vite/2.9.12_less@4.1.3:
|
||||
resolution: {integrity: sha512-suxC36dQo9Rq1qMB2qiRorNJtJAdxguu5TMvBHOc/F370KvqAe9t48vYp+/TbPKRNrMh/J55tOUmkuIqstZaew==}
|
||||
engines: {node: '>=12.2.0'}
|
||||
hasBin: true
|
||||
peerDependencies:
|
||||
@@ -2155,10 +2169,10 @@ packages:
|
||||
optional: true
|
||||
dependencies:
|
||||
esbuild: 0.14.37
|
||||
less: 4.1.2
|
||||
less: 4.1.3
|
||||
postcss: 8.4.14
|
||||
resolve: 1.22.0
|
||||
rollup: 2.74.1
|
||||
rollup: 2.75.6
|
||||
optionalDependencies:
|
||||
fsevents: 2.3.2
|
||||
dev: true
|
||||
|
||||
Reference in new issue
Block a user