Compare commits

..
34 Commits
Author SHA1 Message Date
qwqcode 0738e6e782 v2.3.4
Signed-off-by: qwqcode <qwqcode@gmail.com>
2022-06-17 18:51:53 +08:00
renovate[bot] bb804cdb37 chore(deps): update typescript-eslint monorepo to v5.28.0 (#198)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2022-06-17 18:41:04 +08:00
renovate[bot] 1c53c52564 chore(deps): update dependency eslint to v8.17.0 (#196)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2022-06-17 18:39:12 +08:00
renovate[bot] 06133012f7 chore(deps): update dependency rollup to v2.75.6 (#192)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2022-06-17 18:38:31 +08:00
renovate[bot] 80b879e02a chore(deps): update dependency typescript to v4.7.3 (#193)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2022-06-17 18:36:30 +08:00
renovate[bot] fe0e95ddbd fix(deps): update dependency katex to ^0.16.0 (#199)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2022-06-17 18:34:57 +08:00
renovate[bot] dcf9297ac6 chore(deps): update dependency prettier to v2.7.1 (#197)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2022-06-17 18:32:54 +08:00
renovate[bot] b0f04c55e0 chore(deps): update node.js to v16.15.1 (#195)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2022-06-17 18:31:17 +08:00
renovate[bot] c01a65ccbd chore(deps): update dependency vite to v2.9.12 (#194)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2022-06-17 18:31:05 +08:00
renovate[bot] 34b25f8d1c chore(deps): update dependency @types/node to v16.11.41 (#191)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2022-06-17 18:28:57 +08:00
renovate[bot] 44b3f1f100 fix(deps): update dependency marked to ^4.0.17 (#190)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2022-06-17 18:27:59 +08:00
qwqcode 8743d79d56 chore: plugin-katex v0.1.3
Signed-off-by: qwqcode <qwqcode@gmail.com>
2022-06-17 18:21:57 +08:00
qwqcode 2deea89c1b refactor(func-use): Use lowercase function name instead (#189)
Signed-off-by: qwqcode <qwqcode@gmail.com>
2022-06-17 18:19:28 +08:00
qwqcode ce8bea8efa refactor(i18n): Modify zh-CN expand locale
Signed-off-by: qwqcode <qwqcode@gmail.com>
2022-06-17 17:40:55 +08:00
qwqcode 81c4031d2f style: Modify some details
Signed-off-by: qwqcode <qwqcode@gmail.com>
2022-06-17 17:38:58 +08:00
qwqcode a993601f76 feat: comment edit (#188)
* feat(comment-edit): Support submit for editing a comment

Signed-off-by: qwqcode <qwqcode@gmail.com>

* feat(comment-edit): Provide entrance for editing comment

Signed-off-by: qwqcode <qwqcode@gmail.com>
2022-06-17 13:04:10 +08:00
qwqcode 2b0ab60ee6 refactor(api): Always pass parameter site_name to api call
Signed-off-by: qwqcode <qwqcode@gmail.com>
2022-06-15 18:32:27 +08:00
qwqcode 7719f9bcc7 chore(pkg-manager): Upgrade pnpm to 7.2.1
Signed-off-by: qwqcode <qwqcode@gmail.com>
2022-06-15 13:47:06 +08:00
renovate[bot]andRenovate Bot e25f4a965d chore(deps): update dependency @types/node to v16.11.39 (#186)
Co-authored-by: Renovate Bot <bot@renovateapp.com>
2022-06-14 17:40:00 +08:00
renovate[bot]andRenovate Bot 2cf81ea592 chore(deps): update dependency less to v4.1.3 (#187)
Co-authored-by: Renovate Bot <bot@renovateapp.com>
2022-06-14 17:39:46 +08:00
qwqcode 6747a7133e chore(ctx): Add setDarkMode method to context obj
Signed-off-by: qwqcode <qwqcode@gmail.com>
2022-06-11 13:32:45 +08:00
qwqcode a80beaf182 chore(docs): Update README.md
Signed-off-by: qwqcode <qwqcode@gmail.com>
2022-06-09 21:53:21 +08:00
renovate[bot]andRenovate Bot 9a6312d388 chore(deps): update dependency rollup to v2.75.5 (#179)
Co-authored-by: Renovate Bot <bot@renovateapp.com>
2022-06-06 22:38:16 +08:00
renovate[bot] 7b7caafcb6 chore(deps): update dependency @types/node to v16.11.38 (#178) 2022-06-06 22:38:16 +08:00
qwqcode 1f8f5d5f0b chore(docs): Replace cover image 2022-06-06 22:38:16 +08:00
qwqcode e0cd30baf9 chore(docs): Update README.md
Signed-off-by: qwqcode <qwqcode@gmail.com>
2022-06-06 22:38:16 +08:00
qwqcode bfe0ee4fc2 v2.3.3
Signed-off-by: qwqcode <qwqcode@gmail.com>
2022-05-31 09:30:12 +08:00
qwqcode 431258ca0c chore(typo): Fix typo in zh-CN for email
Signed-off-by: qwqcode <qwqcode@gmail.com>
2022-05-31 09:28:42 +08:00
Renovate Bot 9941522ce6 chore(deps): update pnpm/action-setup action to v2.2.2 2022-05-30 21:16:25 +08:00
Renovate Bot 25256f5e0a chore(deps): update dependency rollup to v2.75.3 2022-05-30 21:15:48 +08:00
Renovate Bot b8eb5cf283 chore(deps): update typescript-eslint monorepo to v5.26.0 2022-05-27 13:10:44 +08:00
renovate[bot] e9560857d9 chore(deps): update dependency vite-tsconfig-paths to v3.5.0 (#172) 2022-05-27 13:09:04 +08:00
renovate[bot] 9b1a83f44f chore(deps): update dependency typescript to v4.7.2 (#171) 2022-05-27 13:08:33 +08:00
inkss d54b3eeb72 fix(emoticons): Hide grpSwitcher error when there is only one grp 2022-05-23 17:28:19 +08:00
24 changed files with 498 additions and 275 deletions

No files matched your search

+2 -2
View File
@@ -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
+2 -2
View File
@@ -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
+2 -2
View File
@@ -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
View File
@@ -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
+34 -30
View File
@@ -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
[![Stargazers repo roster for @ArtalkJS/Artalk](https://reporoster.com/stars/ArtalkJS/Artalk)](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
[![Stargazers over time](https://starchart.cc/ArtalkJS/Artalk.svg)](https://starchart.cc/ArtalkJS/Artalk)
+10 -10
View File
@@ -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"
+3 -3
View File
@@ -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"
}
}
+7 -2
View File
@@ -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
// ============================
+12 -8
View File
@@ -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 {
+26 -31
View File
@@ -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)
+24 -14
View File
@@ -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)
})
}
/** 内容限高检测 */
+39
View File
@@ -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)
}
}
}
}
+110 -15
View File
@@ -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
View File
@@ -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 -2
View File
@@ -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: '置顶',
+8
View File
@@ -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
+2 -3
View File
@@ -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 {
+26
View File
@@ -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
View File
@@ -8,6 +8,9 @@ export interface CommentData {
/** 用户昵称 */
nick: string
/** 用户邮箱 (该字段仅管理员可见) */
email?: string
/** 用户邮箱(已加密) */
email_encrypted: string
+15
View File
@@ -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
}
+1 -1
View File
@@ -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 } } = {}
+2 -2
View File
@@ -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"
+159 -145
View File
@@ -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