feat(timezone): operator schedules and filters use Beijing wall clock.
Cron matching, audit/alert date filters, and schedule UI align on Asia/Shanghai while JWT/TOTP/heartbeat stay UTC; follow-ups add WS alert timestamps, fixed install timezone copy, and 422 on invalid date filters. Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
@@ -0,0 +1,46 @@
|
|||||||
|
# 审计 — 运维时区全局北京(2026-06-09)
|
||||||
|
|
||||||
|
**Changelog**: `docs/changelog/2026-06-09-operator-timezone-beijing.md`
|
||||||
|
**报告**: `docs/reports/2026-06-09-operator-timezone-beijing-audit.md`
|
||||||
|
|
||||||
|
## 变更文件清单
|
||||||
|
|
||||||
|
| 文件 | 说明 |
|
||||||
|
|------|------|
|
||||||
|
| `server/utils/display_time.py` | `operator_wall`、`beijing_day_range_utc` |
|
||||||
|
| `server/background/schedule_runner.py` | 北京墙钟 cron 匹配 |
|
||||||
|
| `server/infrastructure/database/audit_log_repo.py` | 审计日期北京日界 |
|
||||||
|
| `server/api/settings.py` | 告警 date 筛选、`utcnow` 修复 |
|
||||||
|
| `frontend/src/utils/datetime.ts` | `beijingWallParts` |
|
||||||
|
| `frontend/src/utils/scheduleCycle.ts` | 与 runner 对齐 |
|
||||||
|
| `ScheduleCyclePicker.vue` | 北京时间提示 |
|
||||||
|
| `tests/test_operator_tz.py` | 运维时区单测 |
|
||||||
|
| `tests/test_schedule_next_run.py` | 更新北京语义断言 |
|
||||||
|
|
||||||
|
## Step 3 规则扫描
|
||||||
|
|
||||||
|
| 规则 | 结论 |
|
||||||
|
|------|------|
|
||||||
|
| PY-11 naive/aware | PASS — `to_naive_utc` / `ensure_utc` |
|
||||||
|
| 调度双触发 | PASS — 60s 冷却保留 |
|
||||||
|
| SQL 注入 | PASS — 日期 `fromisoformat`,无拼接 |
|
||||||
|
| 静默吞错 | RISK-P3 — 非法 date 仍 `pass`(沿用旧模式) |
|
||||||
|
| 存量 cron 语义 | RISK-P2 — 无迁移;部署后人工核对调度列表 |
|
||||||
|
|
||||||
|
## Closure
|
||||||
|
|
||||||
|
| 项 | 结果 |
|
||||||
|
|----|------|
|
||||||
|
| `test_operator_tz.py` | passed |
|
||||||
|
| `test_schedule_next_run.py` | passed |
|
||||||
|
| `scripts/local_verify.sh` | All local checks passed |
|
||||||
|
| `npm run type-check` | passed |
|
||||||
|
| ruff F | 0 violations |
|
||||||
|
|
||||||
|
## DoD
|
||||||
|
|
||||||
|
- [x] cron 按北京时间匹配,`next_run` 与表单时:分一致
|
||||||
|
- [x] `cycleFromSchedule` 用 `parseApiDateTime` + 北京时:分
|
||||||
|
- [x] 审计 `date_from` 覆盖北京当日 00:00–23:59
|
||||||
|
- [x] design spec + plan + changelog
|
||||||
|
- [ ] 生产部署后人工核对启用中的调度(用户确认几乎无)
|
||||||
@@ -0,0 +1,39 @@
|
|||||||
|
# 2026-06-09 — 运维时区全局北京(存储 UTC + 语义北京)
|
||||||
|
|
||||||
|
## 变更摘要
|
||||||
|
|
||||||
|
调度 cron/单次执行、审计日期筛选统一按 **Asia/Shanghai** 解释;DB/API 仍存 UTC naive。修复 cron 按 UTC 跑而界面按北京展示、单次编辑回显错误、审计「选今天」漏北京 0–8 点。
|
||||||
|
|
||||||
|
## 动机
|
||||||
|
|
||||||
|
运维按北京时间填时:分,runner 却在 UTC 匹配;`next_run` 列与表单不一致。
|
||||||
|
|
||||||
|
## 涉及文件
|
||||||
|
|
||||||
|
- `server/utils/display_time.py` — `operator_wall`、`beijing_day_range_utc`
|
||||||
|
- `server/background/schedule_runner.py` — 北京墙钟 cron 匹配
|
||||||
|
- `server/infrastructure/database/audit_log_repo.py` — 北京日界
|
||||||
|
- `server/api/settings.py` — 告警 date 筛选、`utcnow` 修复
|
||||||
|
- `frontend/src/utils/datetime.ts` — `beijingWallParts`
|
||||||
|
- `frontend/src/utils/scheduleCycle.ts` — 与 runner 对齐
|
||||||
|
- `frontend/src/components/schedules/ScheduleCyclePicker.vue` — 时区提示
|
||||||
|
- `tests/test_operator_tz.py`、`tests/test_schedule_next_run.py`
|
||||||
|
- `frontend/e2e/pages/schedules-timezone.spec.mjs`
|
||||||
|
- `docs/design/specs/2026-06-09-operator-timezone-beijing-design.md`
|
||||||
|
- `docs/design/plans/2026-06-09-operator-timezone-beijing.md`
|
||||||
|
|
||||||
|
## 迁移 / 重启
|
||||||
|
|
||||||
|
- **无 DB 迁移**;`cron_expr` 字符串不变,仅执行语义改为北京
|
||||||
|
- 若曾有按 UTC 时刻校准的启用调度,部署后请在调度列表核对 `next_run`
|
||||||
|
- 需重启 API;前端需 `vite build`
|
||||||
|
|
||||||
|
## 验证方式
|
||||||
|
|
||||||
|
```bash
|
||||||
|
.venv/bin/python -m pytest tests/test_operator_tz.py tests/test_schedule_next_run.py tests/test_display_time.py -q
|
||||||
|
cd frontend && npm run type-check
|
||||||
|
NEXUS_E2E_BASE=http://127.0.0.1:8600 npx playwright test e2e/pages/schedules-timezone.spec.mjs
|
||||||
|
```
|
||||||
|
|
||||||
|
手工:新建「每天 02:00」循环调度 → `next_run` 应显示 02:00(北京),非 10:00。
|
||||||
@@ -0,0 +1,38 @@
|
|||||||
|
# 2026-06-09 — 时区后续:WS 告警时间 / 安装时区 / 日期校验
|
||||||
|
|
||||||
|
## 摘要
|
||||||
|
|
||||||
|
修复北京时区改造后遗留的三项边缘问题:WebSocket 告警条使用服务端事件时间;安装向导不再提供误导性时区选项;审计/告警日期筛选非法输入返回 422 而非静默忽略。
|
||||||
|
|
||||||
|
## 动机
|
||||||
|
|
||||||
|
1. WS 告警条用 `new Date()` 与真实告警时刻不一致(重连/延迟时更明显)。
|
||||||
|
2. 安装向导可选非北京时区但运行时不生效,易误导运维。
|
||||||
|
3. `date_from`/`date_to` 非法时 `except ValueError: pass` 违反无静默吞错原则。
|
||||||
|
|
||||||
|
## 涉及文件
|
||||||
|
|
||||||
|
| 文件 | 变更 |
|
||||||
|
|------|------|
|
||||||
|
| `server/api/websocket.py` | `broadcast_alert` / `broadcast_recovery` 增加 `at`(UTC ISO) |
|
||||||
|
| `frontend/src/composables/useWebSocket.ts` | 使用 `msg.at` 格式化北京时刻 |
|
||||||
|
| `web/app/install.html` | 时区改为固定说明,移除多选下拉 |
|
||||||
|
| `server/api/install.py` | `InitDbRequest.timezone` 校验仅允许 `Asia/Shanghai`;config 固定写入 |
|
||||||
|
| `server/utils/display_time.py` | 新增 `parse_operator_calendar_date()` |
|
||||||
|
| `server/infrastructure/database/audit_log_repo.py` | 日期筛选用校验函数,不再静默 pass |
|
||||||
|
| `server/api/settings.py` | 告警/审计列表非法日期 → HTTP 422 |
|
||||||
|
| `tests/test_operator_tz.py` | 日期解析单测 |
|
||||||
|
| `tests/integration/test_alerts_audit.py` | 422 集成测 |
|
||||||
|
| `tests/test_ws_alert_at.py` | WS `at` 字段单测 |
|
||||||
|
|
||||||
|
## 迁移 / 重启
|
||||||
|
|
||||||
|
- 无需 DB 迁移。
|
||||||
|
- 需重启 API;前端需重新 `vite build` 后部署静态资源。
|
||||||
|
|
||||||
|
## 验证
|
||||||
|
|
||||||
|
```bash
|
||||||
|
pytest tests/test_operator_tz.py tests/test_ws_alert_at.py tests/integration/test_alerts_audit.py -q
|
||||||
|
cd frontend && npm run type-check
|
||||||
|
```
|
||||||
@@ -0,0 +1,30 @@
|
|||||||
|
# 运维时区全局北京 — 实施
|
||||||
|
|
||||||
|
## 涉及文件
|
||||||
|
|
||||||
|
| 层 | 文件 |
|
||||||
|
|----|------|
|
||||||
|
| 工具 | `server/utils/display_time.py` |
|
||||||
|
| Runner | `server/background/schedule_runner.py` |
|
||||||
|
| 筛选 | `server/infrastructure/database/audit_log_repo.py`, `server/api/settings.py` |
|
||||||
|
| 前端 | `frontend/src/utils/datetime.ts`, `scheduleCycle.ts`, `ScheduleCyclePicker.vue` |
|
||||||
|
| 测试 | `tests/test_schedule_next_run.py`, `tests/test_operator_tz.py`(新) |
|
||||||
|
|
||||||
|
## 步骤
|
||||||
|
|
||||||
|
1. 扩展 `display_time`:`operator_wall`、`beijing_day_range_utc`
|
||||||
|
2. `schedule_runner` 用北京墙钟匹配 cron;`last_run_at` 写 naive UTC
|
||||||
|
3. 前端 `beijingWallParts` + `scheduleCycle` 统一北京
|
||||||
|
4. 审计/告警日期筛选改北京日界
|
||||||
|
5. 单测 + changelog
|
||||||
|
|
||||||
|
## 回滚
|
||||||
|
|
||||||
|
还原 runner、scheduleCycle、audit filter 三处;DB 无需回滚。
|
||||||
|
|
||||||
|
## 验证
|
||||||
|
|
||||||
|
```bash
|
||||||
|
.venv/bin/python -m pytest tests/test_schedule_next_run.py tests/test_operator_tz.py tests/test_display_time.py -q
|
||||||
|
cd frontend && npm run type-check
|
||||||
|
```
|
||||||
@@ -0,0 +1,31 @@
|
|||||||
|
# 运维时区全局北京 — 设计
|
||||||
|
|
||||||
|
## 背景与目标
|
||||||
|
|
||||||
|
- 存储与 API 内部继续 **UTC naive**;运维表单与调度执行语义统一为 **Asia/Shanghai(北京时间)**。
|
||||||
|
- 解决:cron 按 UTC 跑但界面按北京展示;单次与循环时区不一致;审计日期筛选漏北京 0–8 点。
|
||||||
|
|
||||||
|
## 方案对比
|
||||||
|
|
||||||
|
| 方案 | 说明 | 结论 |
|
||||||
|
|------|------|------|
|
||||||
|
| A. UTC 存储 + 北京语义 | runner/表单/日界按北京,DB 仍 UTC | **选用** |
|
||||||
|
| B. DB 存北京 naive | 与 Agent/JWT/parseApiDateTime 冲突 | 否决 |
|
||||||
|
|
||||||
|
## 选定方案
|
||||||
|
|
||||||
|
- **SSOT**:`server/utils/display_time.py` 中 `BEIJING_TZ` / `OPERATOR_TZ`。
|
||||||
|
- **cron_expr**:5 字段按北京墙钟解释;字符串格式不变。
|
||||||
|
- **fire_at**:UTC naive 入库;表单「02:00 北京」→ 对应 UTC instant。
|
||||||
|
- **存量**:无 DB 迁移;部署后人工核对调度列表(生产几乎无启用调度)。
|
||||||
|
|
||||||
|
## 不改
|
||||||
|
|
||||||
|
JWT/TOTP、Agent 心跳与漂移、Redis TTL、告警 Telegram 去重、`created_at` 写入。
|
||||||
|
|
||||||
|
## 验收标准
|
||||||
|
|
||||||
|
1. cron `0 2 * * *` 在 UTC `18:00`(北京次日 02:00)触发,非 UTC 02:00。
|
||||||
|
2. 列表 `next_run` 与表单时:分一致(北京)。
|
||||||
|
3. 单次调度保存后再编辑,时:分回显正确。
|
||||||
|
4. 审计 `date_from=YYYY-MM-DD` 覆盖北京当日 00:00–23:59。
|
||||||
@@ -0,0 +1,47 @@
|
|||||||
|
# 运维时区全局北京 — 定向审计(2026-06-09)
|
||||||
|
|
||||||
|
## 范围
|
||||||
|
|
||||||
|
本次 diff 约 8 文件 + 3 文档 + 1 新测。**非**全库 Phase-2 逐行 8 步;按变更面做逻辑/安全/一致性走读。
|
||||||
|
|
||||||
|
| 文件 | 行数 | 审计方式 |
|
||||||
|
|------|------|----------|
|
||||||
|
| `server/utils/display_time.py` | 65 | 全文 + 单测 |
|
||||||
|
| `server/background/schedule_runner.py` | 293 | cron/next_run/last_run 路径 |
|
||||||
|
| `server/infrastructure/database/audit_log_repo.py` | 84 | 筛选逻辑 |
|
||||||
|
| `server/api/settings.py` | 告警 date 片段 | 与 audit 对齐 |
|
||||||
|
| `frontend/src/utils/datetime.ts` | beijingWallParts | 与后端对齐 |
|
||||||
|
| `frontend/src/utils/scheduleCycle.ts` | cronMatch/computeNext | 与 runner 对齐 |
|
||||||
|
|
||||||
|
## 规则命中与 Closure
|
||||||
|
|
||||||
|
| ID | 规则 | 结论 | 说明 |
|
||||||
|
|----|------|------|------|
|
||||||
|
| H1 | PY-11 naive/aware 混用 | SAFE | `last_run_at` 改 `to_naive_utc`;匹配用 `ensure_utc` |
|
||||||
|
| H2 | 调度双触发 | SAFE | 仍 60s 冷却 + `last_run_at` 防抖 |
|
||||||
|
| H3 | 日期筛选静默吞错 | RISK-P3 | `ValueError: pass` 沿用旧模式;非法日期不报错 |
|
||||||
|
| H4 | 存量 cron 语义变更 | RISK-P2 | 无 DB 迁移;用户确认生产几乎无启用调度,部署后人工核对 |
|
||||||
|
| H5 | 前后端 cron 不一致 | SAFE | 均用北京墙钟;单测锚点 UTC 18:00 = 北京 02:00 |
|
||||||
|
| H6 | 审计日界 | SAFE | `beijing_day_range_utc`;北京 00:00 = UTC 前日 16:00 |
|
||||||
|
| H7 | SQL 注入 | SAFE | 日期仅 `fromisoformat` + 固定格式,无拼接 SQL |
|
||||||
|
| H8 | ruff F401 | FIXED | `settings.py` 告警列表移除未用 `datetime` import |
|
||||||
|
|
||||||
|
**命中 8 条,Closure 8 条。**
|
||||||
|
|
||||||
|
## 未覆盖 / 建议跟进
|
||||||
|
|
||||||
|
1. **无**审计 `date_from` 北京边界的集成测(仅 `test_operator_tz` 单元级);可补 `test_alerts_audit` 带日期参数。
|
||||||
|
2. **未**跑 `pre_deploy_check.sh` 全 7 道门控(仅 `local_verify` L2b)。
|
||||||
|
3. **未**浏览器手工验调度页 `next_run` 列(需登录 SPA)。
|
||||||
|
|
||||||
|
## 验证证据
|
||||||
|
|
||||||
|
```text
|
||||||
|
bash scripts/local_verify.sh → All local checks passed
|
||||||
|
pytest test_operator_tz + schedule_next_run + test_alerts_audit → passed
|
||||||
|
npm run type-check → passed(前次会话)
|
||||||
|
```
|
||||||
|
|
||||||
|
## 结论
|
||||||
|
|
||||||
|
**定向审计通过**,可进入部署前 `pre_deploy_check`;部署后请人工核对调度列表 `next_run`。
|
||||||
@@ -0,0 +1,39 @@
|
|||||||
|
# 运维时区全局北京 — 验证报告(2026-06-09)
|
||||||
|
|
||||||
|
## 自动化
|
||||||
|
|
||||||
|
| 检查 | 结果 |
|
||||||
|
|------|------|
|
||||||
|
| `bash scripts/local_verify.sh` | PASS |
|
||||||
|
| `bash deploy/pre_deploy_check.sh` | **7/7 PASS** |
|
||||||
|
| `pytest test_operator_tz test_schedule_next_run test_display_time` | PASS |
|
||||||
|
| `npm run type-check` | PASS |
|
||||||
|
| `cd frontend && npx vite build` | PASS |
|
||||||
|
|
||||||
|
## API 契约(本地 :8600)
|
||||||
|
|
||||||
|
创建 cron `0 2 * * *` 推送调度:
|
||||||
|
|
||||||
|
- `next_run` = `2026-06-09 18:00:00`(UTC naive)
|
||||||
|
- 换算北京时间 = **2026-06-10 02:00**(与「每天 02:00 北京」一致)
|
||||||
|
|
||||||
|
脚本:Agent 会话内 httpx 一次性创建/断言/删除(未入仓)。
|
||||||
|
|
||||||
|
## 浏览器 E2E(Playwright,本地 `http://127.0.0.1:8600`)
|
||||||
|
|
||||||
|
```bash
|
||||||
|
cd frontend && npx playwright test e2e/pages/schedules-cycle.spec.mjs e2e/pages/schedules-timezone.spec.mjs
|
||||||
|
```
|
||||||
|
|
||||||
|
| 用例 | 结果 |
|
||||||
|
|------|------|
|
||||||
|
| E2E-SCH-002 新建调度显示「开始执行周期」 | PASS |
|
||||||
|
| E2E-SCH-003 对话框显示「时间为北京时间(Asia/Shanghai)」 | PASS |
|
||||||
|
| E2E-SCH-004 `next_run` 列显示 `2026-06-10 02:00:00`(非 UTC 10:00、非裸 ISO Z) | PASS |
|
||||||
|
|
||||||
|
新增:`frontend/e2e/pages/schedules-timezone.spec.mjs`
|
||||||
|
|
||||||
|
## 生产部署
|
||||||
|
|
||||||
|
- **未执行** `deploy/deploy-production.sh`(需 SSH `nexus` 与明确批准)。
|
||||||
|
- 门控已放行;部署后请人工核对调度列表 `next_run`。
|
||||||
@@ -0,0 +1,58 @@
|
|||||||
|
/** E2E-SCH-003/004 — schedule operator timezone (Beijing wall clock) */
|
||||||
|
import { test, expect } from '../fixtures.mjs'
|
||||||
|
import { ISO_UTC_RE, login, nav } from '../helpers.mjs'
|
||||||
|
|
||||||
|
const mockSchedule = {
|
||||||
|
id: 99001,
|
||||||
|
name: 'e2e-beijing-0200',
|
||||||
|
schedule_type: 'push',
|
||||||
|
run_mode: 'cron',
|
||||||
|
cron_expr: '0 2 * * *',
|
||||||
|
fire_at: null,
|
||||||
|
source_path: '/tmp',
|
||||||
|
target_path: null,
|
||||||
|
server_ids: '[1]',
|
||||||
|
sync_mode: 'incremental',
|
||||||
|
enabled: true,
|
||||||
|
script_id: null,
|
||||||
|
script_content: null,
|
||||||
|
exec_timeout: 60,
|
||||||
|
long_task: false,
|
||||||
|
last_run_at: null,
|
||||||
|
/** UTC naive — Beijing next day 02:00 */
|
||||||
|
next_run: '2026-06-09 18:00:00',
|
||||||
|
created_at: '2026-06-09 10:00:00',
|
||||||
|
}
|
||||||
|
|
||||||
|
test('E2E-SCH-003 schedule dialog shows Beijing timezone hint', async ({ page }) => {
|
||||||
|
await login(page)
|
||||||
|
await nav(page, '/schedules')
|
||||||
|
await page.getByRole('button', { name: '新建调度' }).click()
|
||||||
|
await expect(page.getByText(/时间为北京时间(Asia\/Shanghai)/).first()).toBeVisible()
|
||||||
|
await page.getByRole('button', { name: '取消' }).click()
|
||||||
|
})
|
||||||
|
|
||||||
|
test('E2E-SCH-004 next_run column shows Beijing 02:00 not bare ISO UTC', async ({ page }) => {
|
||||||
|
await page.route('**/api/schedules/**', async (route) => {
|
||||||
|
if (route.request().method() !== 'GET') {
|
||||||
|
await route.continue()
|
||||||
|
return
|
||||||
|
}
|
||||||
|
await route.fulfill({
|
||||||
|
status: 200,
|
||||||
|
contentType: 'application/json',
|
||||||
|
body: JSON.stringify([mockSchedule]),
|
||||||
|
})
|
||||||
|
})
|
||||||
|
|
||||||
|
await login(page)
|
||||||
|
await nav(page, '/schedules')
|
||||||
|
await expect(page.getByText('e2e-beijing-0200')).toBeVisible()
|
||||||
|
|
||||||
|
const nextRunCell = page.locator('td').filter({ hasText: /2026-06-10 02:00:00/ })
|
||||||
|
await expect(nextRunCell.first()).toBeVisible()
|
||||||
|
|
||||||
|
const tableText = await page.locator('.v-data-table').innerText()
|
||||||
|
expect(tableText).not.toMatch(ISO_UTC_RE)
|
||||||
|
expect(tableText).not.toMatch(/10:00:00/)
|
||||||
|
})
|
||||||
@@ -204,10 +204,11 @@ const showTimeOfDay = computed(() => {
|
|||||||
})
|
})
|
||||||
|
|
||||||
const cycleHint = computed(() => {
|
const cycleHint = computed(() => {
|
||||||
|
const tz = '时间为北京时间(Asia/Shanghai)'
|
||||||
if (singleShot.value) {
|
if (singleShot.value) {
|
||||||
return '单次:当天指定时:分,在下一匹配时刻执行一次(不含日期选择)'
|
return `单次:当天指定时:分,在下一匹配时刻执行一次(不含日期选择)。${tz}`
|
||||||
}
|
}
|
||||||
return '循环:按重复方式与时:分持续执行'
|
return `循环:按重复方式与时:分持续执行。${tz}`
|
||||||
})
|
})
|
||||||
|
|
||||||
/** 单次模式固定为「当天」时:分,不出现「重复方式」 */
|
/** 单次模式固定为「当天」时:分,不出现「重复方式」 */
|
||||||
|
|||||||
@@ -5,8 +5,8 @@
|
|||||||
* Backend protocol: ws://host/ws/alerts?token=<JWT>
|
* Backend protocol: ws://host/ws/alerts?token=<JWT>
|
||||||
*
|
*
|
||||||
* Message types:
|
* Message types:
|
||||||
* alert → { type: "alert", server_id, server_name, alert_type, alert_value }
|
* alert → { type: "alert", server_id, server_name, alert_type, alert_value, at }
|
||||||
* recovery → { type: "recovery", server_id, server_name, metric, value }
|
* recovery → { type: "recovery", server_id, server_name, metric, value, at }
|
||||||
* system → { type: "system", event_type, message }
|
* system → { type: "system", event_type, message }
|
||||||
* script_progress / script_complete → global script execution queue (useScriptExecutionQueue)
|
* script_progress / script_complete → global script execution queue (useScriptExecutionQueue)
|
||||||
* Push progress uses a separate channel: /ws/sync (see usePushProgress)
|
* Push progress uses a separate channel: /ws/sync (see usePushProgress)
|
||||||
@@ -99,7 +99,7 @@ export function useWebSocket() {
|
|||||||
serverName: msg.server_name,
|
serverName: msg.server_name,
|
||||||
alertType: msg.alert_type || msg.metric,
|
alertType: msg.alert_type || msg.metric,
|
||||||
value: msg.alert_value || msg.value,
|
value: msg.alert_value || msg.value,
|
||||||
time: formatTimeBeijing(new Date()),
|
time: formatTimeBeijing(msg.at ?? new Date()),
|
||||||
}
|
}
|
||||||
alerts.value.unshift(alert)
|
alerts.value.unshift(alert)
|
||||||
if (alerts.value.length > MAX_ALERTS) alerts.value.pop()
|
if (alerts.value.length > MAX_ALERTS) alerts.value.pop()
|
||||||
|
|||||||
@@ -24,6 +24,41 @@ export function parseApiDateTime(raw: string | null | undefined): Date | null {
|
|||||||
return Number.isNaN(d.getTime()) ? null : d
|
return Number.isNaN(d.getTime()) ? null : d
|
||||||
}
|
}
|
||||||
|
|
||||||
|
export interface BeijingWallParts {
|
||||||
|
minute: number
|
||||||
|
hour: number
|
||||||
|
day: number
|
||||||
|
month: number
|
||||||
|
/** Cron dow: 0=Sunday … 6=Saturday */
|
||||||
|
dow: number
|
||||||
|
}
|
||||||
|
|
||||||
|
const BEIJING_WEEKDAY: Record<string, number> = {
|
||||||
|
Sun: 0,
|
||||||
|
Mon: 1,
|
||||||
|
Tue: 2,
|
||||||
|
Wed: 3,
|
||||||
|
Thu: 4,
|
||||||
|
Fri: 5,
|
||||||
|
Sat: 6,
|
||||||
|
}
|
||||||
|
|
||||||
|
/** Wall-clock components in Asia/Shanghai for cron / schedule forms. */
|
||||||
|
export function beijingWallParts(d: Date): BeijingWallParts {
|
||||||
|
const p = beijingParts(d)
|
||||||
|
const weekday = new Intl.DateTimeFormat('en-US', {
|
||||||
|
timeZone: BEIJING_TZ,
|
||||||
|
weekday: 'short',
|
||||||
|
}).format(d)
|
||||||
|
return {
|
||||||
|
minute: parseInt(p.minute!, 10),
|
||||||
|
hour: parseInt(p.hour!, 10),
|
||||||
|
day: parseInt(p.day!, 10),
|
||||||
|
month: parseInt(p.month!, 10),
|
||||||
|
dow: BEIJING_WEEKDAY[weekday] ?? 0,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
function beijingParts(d: Date): Record<string, string> {
|
function beijingParts(d: Date): Record<string, string> {
|
||||||
const parts = new Intl.DateTimeFormat('en-US', {
|
const parts = new Intl.DateTimeFormat('en-US', {
|
||||||
timeZone: BEIJING_TZ,
|
timeZone: BEIJING_TZ,
|
||||||
|
|||||||
@@ -1,8 +1,11 @@
|
|||||||
/**
|
/**
|
||||||
* 执行周期 ↔ 5 字段 Cron 互转(对齐宝塔 aaPanel crontab.py GetCrondCycle)
|
* 执行周期 ↔ 5 字段 Cron 互转(对齐宝塔 aaPanel crontab.py GetCrondCycle)
|
||||||
* 存储仍用 cron_expr;「执行周期」= 重复方式 + 开始执行时刻(时:分),不含秒。
|
* 存储仍用 cron_expr;「执行周期」= 重复方式 + 开始执行时刻(时:分),不含秒。
|
||||||
|
* cron 时/分/日/星期按北京时间(Asia/Shanghai)解释,与 schedule_runner 一致。
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
import { beijingWallParts, parseApiDateTime } from '@/utils/datetime'
|
||||||
|
|
||||||
export type ScheduleCycleType =
|
export type ScheduleCycleType =
|
||||||
| 'day'
|
| 'day'
|
||||||
| 'day-n'
|
| 'day-n'
|
||||||
@@ -277,13 +280,8 @@ function cronFieldMatch(expr: string, value: number): boolean {
|
|||||||
function cronMatch(cronExpr: string, at: Date): boolean {
|
function cronMatch(cronExpr: string, at: Date): boolean {
|
||||||
const parts = cronExpr.trim().split(/\s+/)
|
const parts = cronExpr.trim().split(/\s+/)
|
||||||
if (parts.length !== 5) return false
|
if (parts.length !== 5) return false
|
||||||
const fields = [
|
const w = beijingWallParts(at)
|
||||||
at.getMinutes(),
|
const fields = [w.minute, w.hour, w.day, w.month, w.dow]
|
||||||
at.getHours(),
|
|
||||||
at.getDate(),
|
|
||||||
at.getMonth() + 1,
|
|
||||||
at.getDay(), // cron 0=周日,与 JS getDay() 一致
|
|
||||||
]
|
|
||||||
return parts.every((expr, i) => cronFieldMatch(expr, fields[i]!))
|
return parts.every((expr, i) => cronFieldMatch(expr, fields[i]!))
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -304,9 +302,10 @@ export function computeNextCronRun(cronExpr: string, after: Date = new Date()):
|
|||||||
export function cycleFromSchedule(cronExpr?: string | null, fireAt?: string | null): ScheduleCycleConfig {
|
export function cycleFromSchedule(cronExpr?: string | null, fireAt?: string | null): ScheduleCycleConfig {
|
||||||
if (cronExpr?.trim()) return parseCronToCycle(cronExpr)
|
if (cronExpr?.trim()) return parseCronToCycle(cronExpr)
|
||||||
if (fireAt) {
|
if (fireAt) {
|
||||||
const d = new Date(fireAt)
|
const d = parseApiDateTime(fireAt)
|
||||||
if (!Number.isNaN(d.getTime())) {
|
if (d) {
|
||||||
return { ...defaultCycleConfig(), type: 'day', hour: d.getHours(), minute: d.getMinutes() }
|
const w = beijingWallParts(d)
|
||||||
|
return { ...defaultCycleConfig(), type: 'day', hour: w.hour, minute: w.minute }
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return defaultCycleConfig()
|
return defaultCycleConfig()
|
||||||
|
|||||||
@@ -15,7 +15,7 @@ from datetime import datetime, timezone
|
|||||||
from urllib.parse import quote_plus, unquote_plus, urlparse
|
from urllib.parse import quote_plus, unquote_plus, urlparse
|
||||||
|
|
||||||
from fastapi import APIRouter, Depends, HTTPException
|
from fastapi import APIRouter, Depends, HTTPException
|
||||||
from pydantic import BaseModel
|
from pydantic import BaseModel, field_validator
|
||||||
from sqlalchemy import text
|
from sqlalchemy import text
|
||||||
from sqlalchemy.ext.asyncio import create_async_engine
|
from sqlalchemy.ext.asyncio import create_async_engine
|
||||||
|
|
||||||
@@ -81,6 +81,13 @@ class InitDbRequest(BaseModel):
|
|||||||
timezone: str = "Asia/Shanghai"
|
timezone: str = "Asia/Shanghai"
|
||||||
site_url: str = ""
|
site_url: str = ""
|
||||||
|
|
||||||
|
@field_validator("timezone")
|
||||||
|
@classmethod
|
||||||
|
def timezone_must_be_beijing(cls, v: str) -> str:
|
||||||
|
if v != "Asia/Shanghai":
|
||||||
|
raise ValueError("运维时区固定为 Asia/Shanghai(北京时间),不可更改")
|
||||||
|
return v
|
||||||
|
|
||||||
|
|
||||||
class CreateAdminRequest(BaseModel):
|
class CreateAdminRequest(BaseModel):
|
||||||
install_token: str
|
install_token: str
|
||||||
@@ -655,7 +662,7 @@ def _write_config_json(req: InitDbRequest, api_key: str, site_url: str) -> None:
|
|||||||
"app_version": "6.0.0",
|
"app_version": "6.0.0",
|
||||||
"session_lifetime": 28800,
|
"session_lifetime": 28800,
|
||||||
"deploy_root": install_dir,
|
"deploy_root": install_dir,
|
||||||
"timezone": req.timezone,
|
"timezone": "Asia/Shanghai", # informational; runtime operator TZ is display_time.OPERATOR_TZ
|
||||||
}
|
}
|
||||||
|
|
||||||
write_utf8_lf(CONFIG_JSON, json.dumps(config, indent=2, ensure_ascii=False) + "\n")
|
write_utf8_lf(CONFIG_JSON, json.dumps(config, indent=2, ensure_ascii=False) + "\n")
|
||||||
|
|||||||
+24
-27
@@ -288,9 +288,9 @@ async def bing_wallpaper():
|
|||||||
"""Return today's cached wallpaper URL (public, read-only)."""
|
"""Return today's cached wallpaper URL (public, read-only)."""
|
||||||
await _ensure_wallpaper_cache()
|
await _ensure_wallpaper_cache()
|
||||||
_WALLPAPER_DIR.mkdir(parents=True, exist_ok=True)
|
_WALLPAPER_DIR.mkdir(parents=True, exist_ok=True)
|
||||||
from datetime import datetime
|
from datetime import datetime, timezone
|
||||||
|
|
||||||
today = datetime.utcnow().strftime("%Y-%m-%d")
|
today = datetime.now(timezone.utc).strftime("%Y-%m-%d")
|
||||||
cached = _WALLPAPER_DIR / f"{today}.jpg"
|
cached = _WALLPAPER_DIR / f"{today}.jpg"
|
||||||
if cached.exists() and cached.stat().st_size > 1024:
|
if cached.exists() and cached.stat().st_size > 1024:
|
||||||
return {"url": f"/app/wallpapers/{today}.jpg"}
|
return {"url": f"/app/wallpapers/{today}.jpg"}
|
||||||
@@ -828,7 +828,6 @@ async def list_alert_history(
|
|||||||
import math
|
import math
|
||||||
from sqlalchemy import select, func
|
from sqlalchemy import select, func
|
||||||
from server.domain.models import AlertLog, Server
|
from server.domain.models import AlertLog, Server
|
||||||
from datetime import datetime, timezone
|
|
||||||
|
|
||||||
if per_page is not None:
|
if per_page is not None:
|
||||||
limit = per_page
|
limit = per_page
|
||||||
@@ -847,22 +846,17 @@ async def list_alert_history(
|
|||||||
recovery_filter = True
|
recovery_filter = True
|
||||||
if recovery_filter is not None:
|
if recovery_filter is not None:
|
||||||
filters.append(AlertLog.is_recovery == recovery_filter)
|
filters.append(AlertLog.is_recovery == recovery_filter)
|
||||||
if date_from:
|
from server.utils.display_time import beijing_day_range_utc, parse_operator_calendar_date
|
||||||
try:
|
|
||||||
dt = datetime.fromisoformat(date_from)
|
try:
|
||||||
if dt.tzinfo is None:
|
if date_from:
|
||||||
dt = dt.replace(tzinfo=timezone.utc)
|
start_utc, _ = beijing_day_range_utc(parse_operator_calendar_date(date_from))
|
||||||
filters.append(AlertLog.created_at >= dt.replace(tzinfo=None))
|
filters.append(AlertLog.created_at >= start_utc)
|
||||||
except ValueError:
|
if date_to:
|
||||||
pass
|
_, end_utc = beijing_day_range_utc(parse_operator_calendar_date(date_to))
|
||||||
if date_to:
|
filters.append(AlertLog.created_at <= end_utc)
|
||||||
try:
|
except ValueError as e:
|
||||||
dt = datetime.fromisoformat(date_to)
|
raise HTTPException(status_code=422, detail=str(e)) from e
|
||||||
if dt.tzinfo is None:
|
|
||||||
dt = dt.replace(tzinfo=timezone.utc)
|
|
||||||
filters.append(AlertLog.created_at <= dt.replace(tzinfo=None))
|
|
||||||
except ValueError:
|
|
||||||
pass
|
|
||||||
|
|
||||||
count_q = select(func.count(AlertLog.id))
|
count_q = select(func.count(AlertLog.id))
|
||||||
data_q = (
|
data_q = (
|
||||||
@@ -1478,14 +1472,17 @@ async def list_audit_logs(
|
|||||||
):
|
):
|
||||||
"""List audit logs with pagination, action filter, admin filter, and date range."""
|
"""List audit logs with pagination, action filter, admin filter, and date range."""
|
||||||
repo = AuditLogRepositoryImpl(db)
|
repo = AuditLogRepositoryImpl(db)
|
||||||
logs, total = await repo.query(
|
try:
|
||||||
action=action,
|
logs, total = await repo.query(
|
||||||
admin_username=admin_username,
|
action=action,
|
||||||
date_from=date_from,
|
admin_username=admin_username,
|
||||||
date_to=date_to,
|
date_from=date_from,
|
||||||
limit=limit,
|
date_to=date_to,
|
||||||
offset=offset,
|
limit=limit,
|
||||||
)
|
offset=offset,
|
||||||
|
)
|
||||||
|
except ValueError as e:
|
||||||
|
raise HTTPException(status_code=422, detail=str(e)) from e
|
||||||
return {
|
return {
|
||||||
"total": total,
|
"total": total,
|
||||||
"limit": limit,
|
"limit": limit,
|
||||||
|
|||||||
@@ -20,6 +20,7 @@ from typing import Dict, Optional
|
|||||||
from fastapi import APIRouter, WebSocket, WebSocketDisconnect, Query
|
from fastapi import APIRouter, WebSocket, WebSocketDisconnect, Query
|
||||||
|
|
||||||
from server.config import settings
|
from server.config import settings
|
||||||
|
from server.utils.display_time import utc_now
|
||||||
|
|
||||||
logger = logging.getLogger("nexus.websocket")
|
logger = logging.getLogger("nexus.websocket")
|
||||||
|
|
||||||
@@ -472,6 +473,7 @@ async def broadcast_alert(server_id: int, alert_type: str, alert_value: float, s
|
|||||||
"server_name": server_name,
|
"server_name": server_name,
|
||||||
"alert_type": alert_type,
|
"alert_type": alert_type,
|
||||||
"alert_value": alert_value,
|
"alert_value": alert_value,
|
||||||
|
"at": utc_now().isoformat(),
|
||||||
}
|
}
|
||||||
|
|
||||||
# Redis Pub/Sub (multi-worker) — local clients via subscriber only (C9)
|
# Redis Pub/Sub (multi-worker) — local clients via subscriber only (C9)
|
||||||
@@ -501,6 +503,7 @@ async def broadcast_recovery(server_id: int, metric: str, value: float, server_n
|
|||||||
"server_name": server_name,
|
"server_name": server_name,
|
||||||
"metric": metric,
|
"metric": metric,
|
||||||
"value": value,
|
"value": value,
|
||||||
|
"at": utc_now().isoformat(),
|
||||||
}
|
}
|
||||||
|
|
||||||
await _dispatch_ws_message(msg)
|
await _dispatch_ws_message(msg)
|
||||||
|
|||||||
@@ -9,30 +9,23 @@ from datetime import datetime, timedelta, timezone
|
|||||||
|
|
||||||
from server.infrastructure.database.session import AsyncSessionLocal
|
from server.infrastructure.database.session import AsyncSessionLocal
|
||||||
from server.domain.models import PushSchedule
|
from server.domain.models import PushSchedule
|
||||||
|
from server.utils.display_time import ensure_utc, operator_wall, to_beijing, to_naive_utc
|
||||||
|
|
||||||
logger = logging.getLogger("nexus.schedule_runner")
|
logger = logging.getLogger("nexus.schedule_runner")
|
||||||
|
|
||||||
SCHEDULE_CHECK_INTERVAL = 60 # seconds
|
SCHEDULE_CHECK_INTERVAL = 60 # seconds
|
||||||
|
|
||||||
|
|
||||||
def _cron_match(cron_expr: str, now: datetime) -> bool:
|
def _cron_match(cron_expr: str, at_utc: datetime) -> bool:
|
||||||
"""Check if current time matches a 5-field cron expression (min hour dom month dow).
|
"""Match 5-field cron against operator (Beijing) wall clock at UTC instant *at_utc*."""
|
||||||
|
|
||||||
Supports: * (any), */N (step), specific values, comma-separated lists.
|
|
||||||
"""
|
|
||||||
parts = cron_expr.strip().split()
|
parts = cron_expr.strip().split()
|
||||||
if len(parts) != 5:
|
if len(parts) != 5:
|
||||||
return False
|
return False
|
||||||
|
|
||||||
fields = [
|
minute, hour, day, month, dow = operator_wall(at_utc)
|
||||||
(now.minute, range(0, 60)),
|
fields = [minute, hour, day, month, dow]
|
||||||
(now.hour, range(0, 24)),
|
|
||||||
(now.day, range(1, 32)),
|
|
||||||
(now.month, range(1, 13)),
|
|
||||||
((now.weekday() + 1) % 7, range(0, 7)), # cron: 0=Sunday, Python weekday(): 0=Monday
|
|
||||||
]
|
|
||||||
|
|
||||||
for (current_val, _), field_expr in zip(fields, parts):
|
for current_val, field_expr in zip(fields, parts):
|
||||||
if not _field_match(field_expr, current_val):
|
if not _field_match(field_expr, current_val):
|
||||||
return False
|
return False
|
||||||
return True
|
return True
|
||||||
@@ -73,14 +66,16 @@ def _field_match(expr: str, value: int) -> bool:
|
|||||||
return False
|
return False
|
||||||
|
|
||||||
|
|
||||||
def _compute_next_cron_run(cron_expr: str, after: datetime) -> datetime | None:
|
def _compute_next_cron_run(cron_expr: str, after_utc: datetime) -> datetime | None:
|
||||||
"""Return the next minute strictly after *after* that matches *cron_expr*."""
|
"""Return next UTC naive instant strictly after *after_utc* matching *cron_expr* (Beijing wall)."""
|
||||||
candidate = after.replace(second=0, microsecond=0) + timedelta(minutes=1)
|
after = ensure_utc(after_utc)
|
||||||
limit = after + timedelta(days=366)
|
candidate_bj = to_beijing(after).replace(second=0, microsecond=0) + timedelta(minutes=1)
|
||||||
while candidate <= limit:
|
limit_bj = to_beijing(after) + timedelta(days=366)
|
||||||
if _cron_match(cron_expr, candidate):
|
while candidate_bj <= limit_bj:
|
||||||
return candidate
|
at_utc = candidate_bj.astimezone(timezone.utc)
|
||||||
candidate += timedelta(minutes=1)
|
if _cron_match(cron_expr, at_utc):
|
||||||
|
return to_naive_utc(at_utc)
|
||||||
|
candidate_bj += timedelta(minutes=1)
|
||||||
return None
|
return None
|
||||||
|
|
||||||
|
|
||||||
@@ -124,7 +119,7 @@ def _schedule_is_due(schedule: PushSchedule, now: datetime) -> bool:
|
|||||||
return True
|
return True
|
||||||
|
|
||||||
cron_expr = getattr(schedule, "cron_expr", None)
|
cron_expr = getattr(schedule, "cron_expr", None)
|
||||||
if not cron_expr or not _cron_match(cron_expr, now):
|
if not cron_expr or not _cron_match(cron_expr, ensure_utc(now)):
|
||||||
return False
|
return False
|
||||||
if schedule.last_run_at:
|
if schedule.last_run_at:
|
||||||
last_run = schedule.last_run_at
|
last_run = schedule.last_run_at
|
||||||
@@ -188,7 +183,7 @@ async def schedule_runner_loop():
|
|||||||
|
|
||||||
# Mark as running BEFORE execution to prevent double-trigger
|
# Mark as running BEFORE execution to prevent double-trigger
|
||||||
prev_last_run_at = schedule.last_run_at
|
prev_last_run_at = schedule.last_run_at
|
||||||
schedule.last_run_at = now
|
schedule.last_run_at = to_naive_utc(now)
|
||||||
if run_mode == "once":
|
if run_mode == "once":
|
||||||
schedule.enabled = False
|
schedule.enabled = False
|
||||||
await session.commit()
|
await session.commit()
|
||||||
|
|||||||
@@ -1,11 +1,11 @@
|
|||||||
"""Nexus — AuditLog Repository (Async SQLAlchemy)"""
|
"""Nexus — AuditLog Repository (Async SQLAlchemy)"""
|
||||||
|
|
||||||
from datetime import datetime, timezone
|
|
||||||
from typing import List, Optional, Tuple
|
from typing import List, Optional, Tuple
|
||||||
from sqlalchemy import select, func
|
from sqlalchemy import select, func
|
||||||
from sqlalchemy.ext.asyncio import AsyncSession
|
from sqlalchemy.ext.asyncio import AsyncSession
|
||||||
|
|
||||||
from server.domain.models import AuditLog
|
from server.domain.models import AuditLog
|
||||||
|
from server.utils.display_time import beijing_day_range_utc, parse_operator_calendar_date
|
||||||
|
|
||||||
|
|
||||||
def _build_filters(
|
def _build_filters(
|
||||||
@@ -21,22 +21,11 @@ def _build_filters(
|
|||||||
if admin_username:
|
if admin_username:
|
||||||
filters.append(AuditLog.admin_username == admin_username)
|
filters.append(AuditLog.admin_username == admin_username)
|
||||||
if date_from:
|
if date_from:
|
||||||
try:
|
start_utc, _ = beijing_day_range_utc(parse_operator_calendar_date(date_from))
|
||||||
dt = datetime.fromisoformat(date_from)
|
filters.append(AuditLog.created_at >= start_utc)
|
||||||
# Treat bare date (YYYY-MM-DD) as start of day UTC
|
|
||||||
if dt.tzinfo is None:
|
|
||||||
dt = dt.replace(tzinfo=timezone.utc)
|
|
||||||
filters.append(AuditLog.created_at >= dt.replace(tzinfo=None))
|
|
||||||
except ValueError:
|
|
||||||
pass
|
|
||||||
if date_to:
|
if date_to:
|
||||||
try:
|
_, end_utc = beijing_day_range_utc(parse_operator_calendar_date(date_to))
|
||||||
dt = datetime.fromisoformat(date_to)
|
filters.append(AuditLog.created_at <= end_utc)
|
||||||
if dt.tzinfo is None:
|
|
||||||
dt = dt.replace(tzinfo=timezone.utc)
|
|
||||||
filters.append(AuditLog.created_at <= dt.replace(tzinfo=None))
|
|
||||||
except ValueError:
|
|
||||||
pass
|
|
||||||
return filters
|
return filters
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -2,10 +2,28 @@
|
|||||||
|
|
||||||
from __future__ import annotations
|
from __future__ import annotations
|
||||||
|
|
||||||
|
import re
|
||||||
from datetime import datetime, timezone
|
from datetime import datetime, timezone
|
||||||
from zoneinfo import ZoneInfo
|
from zoneinfo import ZoneInfo
|
||||||
|
|
||||||
|
_CALENDAR_DATE_RE = re.compile(r"^\d{4}-\d{2}-\d{2}$")
|
||||||
|
|
||||||
BEIJING_TZ = ZoneInfo("Asia/Shanghai")
|
BEIJING_TZ = ZoneInfo("Asia/Shanghai")
|
||||||
|
OPERATOR_TZ = BEIJING_TZ
|
||||||
|
|
||||||
|
|
||||||
|
def utc_now() -> datetime:
|
||||||
|
return datetime.now(timezone.utc)
|
||||||
|
|
||||||
|
|
||||||
|
def ensure_utc(dt: datetime) -> datetime:
|
||||||
|
if dt.tzinfo is None:
|
||||||
|
return dt.replace(tzinfo=timezone.utc)
|
||||||
|
return dt.astimezone(timezone.utc)
|
||||||
|
|
||||||
|
|
||||||
|
def to_naive_utc(dt: datetime) -> datetime:
|
||||||
|
return ensure_utc(dt).replace(tzinfo=None)
|
||||||
|
|
||||||
|
|
||||||
def to_beijing(dt: datetime) -> datetime:
|
def to_beijing(dt: datetime) -> datetime:
|
||||||
@@ -24,3 +42,38 @@ def format_beijing(dt: datetime | None = None, *, with_label: bool = True) -> st
|
|||||||
|
|
||||||
def format_beijing_now() -> str:
|
def format_beijing_now() -> str:
|
||||||
return format_beijing(with_label=True)
|
return format_beijing(with_label=True)
|
||||||
|
|
||||||
|
|
||||||
|
def operator_wall(dt: datetime) -> tuple[int, int, int, int, int]:
|
||||||
|
"""Cron wall-clock components in operator TZ: minute, hour, day, month, dow (0=Sunday)."""
|
||||||
|
bj = to_beijing(ensure_utc(dt))
|
||||||
|
return (
|
||||||
|
bj.minute,
|
||||||
|
bj.hour,
|
||||||
|
bj.day,
|
||||||
|
bj.month,
|
||||||
|
(bj.weekday() + 1) % 7,
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
|
def parse_operator_calendar_date(raw: str) -> str:
|
||||||
|
"""Validate YYYY-MM-DD for operator (Beijing) calendar day filters."""
|
||||||
|
text = (raw or "").strip()[:10]
|
||||||
|
if not _CALENDAR_DATE_RE.match(text):
|
||||||
|
raise ValueError(f"日期格式须为 YYYY-MM-DD,收到: {raw!r}")
|
||||||
|
try:
|
||||||
|
datetime.fromisoformat(text)
|
||||||
|
except ValueError as e:
|
||||||
|
raise ValueError(f"日期格式须为 YYYY-MM-DD,收到: {raw!r}") from e
|
||||||
|
return text
|
||||||
|
|
||||||
|
|
||||||
|
def beijing_day_range_utc(date_yyyy_mm_dd: str) -> tuple[datetime, datetime]:
|
||||||
|
"""Inclusive Beijing calendar day → naive UTC (start, end) for MySQL filters."""
|
||||||
|
base = datetime.fromisoformat(parse_operator_calendar_date(date_yyyy_mm_dd))
|
||||||
|
start_bj = base.replace(hour=0, minute=0, second=0, microsecond=0, tzinfo=BEIJING_TZ)
|
||||||
|
end_bj = base.replace(hour=23, minute=59, second=59, microsecond=999999, tzinfo=BEIJING_TZ)
|
||||||
|
return (
|
||||||
|
start_bj.astimezone(timezone.utc).replace(tzinfo=None),
|
||||||
|
end_bj.astimezone(timezone.utc).replace(tzinfo=None),
|
||||||
|
)
|
||||||
|
|||||||
@@ -3,6 +3,7 @@
|
|||||||
from __future__ import annotations
|
from __future__ import annotations
|
||||||
|
|
||||||
import pytest
|
import pytest
|
||||||
|
from fastapi import HTTPException
|
||||||
|
|
||||||
from server.api.settings import alert_stats, list_alert_history, list_audit_logs
|
from server.api.settings import alert_stats, list_alert_history, list_audit_logs
|
||||||
from server.domain.models import AuditLog
|
from server.domain.models import AuditLog
|
||||||
@@ -81,6 +82,42 @@ async def test_alert_history_status_filter_alias(db_session, test_admin):
|
|||||||
assert item["is_recovery"] is False
|
assert item["is_recovery"] is False
|
||||||
|
|
||||||
|
|
||||||
|
@pytest.mark.asyncio
|
||||||
|
async def test_audit_logs_invalid_date_from_422(db_session, test_admin):
|
||||||
|
with pytest.raises(HTTPException) as exc:
|
||||||
|
await list_audit_logs(
|
||||||
|
action=None,
|
||||||
|
admin_username=None,
|
||||||
|
date_from="not-a-date",
|
||||||
|
date_to=None,
|
||||||
|
limit=10,
|
||||||
|
offset=0,
|
||||||
|
admin=test_admin["admin"],
|
||||||
|
db=db_session,
|
||||||
|
)
|
||||||
|
assert exc.value.status_code == 422
|
||||||
|
|
||||||
|
|
||||||
|
@pytest.mark.asyncio
|
||||||
|
async def test_alert_history_invalid_date_to_422(db_session, test_admin):
|
||||||
|
with pytest.raises(HTTPException) as exc:
|
||||||
|
await list_alert_history(
|
||||||
|
server_id=None,
|
||||||
|
alert_type=None,
|
||||||
|
is_recovery=None,
|
||||||
|
status=None,
|
||||||
|
date_from=None,
|
||||||
|
date_to="2026-13-40",
|
||||||
|
page=1,
|
||||||
|
per_page=10,
|
||||||
|
limit=10,
|
||||||
|
offset=0,
|
||||||
|
admin=test_admin["admin"],
|
||||||
|
db=db_session,
|
||||||
|
)
|
||||||
|
assert exc.value.status_code == 422
|
||||||
|
|
||||||
|
|
||||||
@pytest.mark.asyncio
|
@pytest.mark.asyncio
|
||||||
async def test_alert_stats_frontend_fields(db_session, test_admin):
|
async def test_alert_stats_frontend_fields(db_session, test_admin):
|
||||||
stats = await alert_stats(days=7, admin=test_admin["admin"], db=db_session)
|
stats = await alert_stats(days=7, admin=test_admin["admin"], db=db_session)
|
||||||
|
|||||||
@@ -0,0 +1,43 @@
|
|||||||
|
"""Operator timezone (Asia/Shanghai) helpers."""
|
||||||
|
|
||||||
|
from datetime import datetime, timezone
|
||||||
|
|
||||||
|
import pytest
|
||||||
|
|
||||||
|
from server.utils.display_time import (
|
||||||
|
beijing_day_range_utc,
|
||||||
|
operator_wall,
|
||||||
|
parse_operator_calendar_date,
|
||||||
|
to_naive_utc,
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
|
def test_operator_wall_beijing_0200_is_utc_previous_evening():
|
||||||
|
# Beijing 2026-06-08 02:00 = UTC 2026-06-07 18:00
|
||||||
|
at = datetime(2026, 6, 7, 18, 0, tzinfo=timezone.utc)
|
||||||
|
minute, hour, day, month, dow = operator_wall(at)
|
||||||
|
assert (minute, hour, day, month) == (0, 2, 8, 6)
|
||||||
|
|
||||||
|
|
||||||
|
def test_beijing_day_range_utc_covers_local_midnight():
|
||||||
|
start, end = beijing_day_range_utc("2026-06-08")
|
||||||
|
# Beijing 2026-06-08 00:00 = UTC 2026-06-07 16:00
|
||||||
|
assert start == datetime(2026, 6, 7, 16, 0, 0)
|
||||||
|
# Beijing 2026-06-08 23:59:59.999999 ≈ UTC 2026-06-08 15:59:59
|
||||||
|
assert end.year == 2026 and end.month == 6 and end.day == 8
|
||||||
|
assert end.hour == 15 and end.minute == 59
|
||||||
|
|
||||||
|
|
||||||
|
def test_to_naive_utc_strips_tz():
|
||||||
|
aware = datetime(2026, 6, 7, 18, 0, tzinfo=timezone.utc)
|
||||||
|
assert to_naive_utc(aware) == datetime(2026, 6, 7, 18, 0, 0)
|
||||||
|
|
||||||
|
|
||||||
|
def test_parse_operator_calendar_date_accepts_iso_prefix():
|
||||||
|
assert parse_operator_calendar_date("2026-06-08T12:00:00") == "2026-06-08"
|
||||||
|
|
||||||
|
|
||||||
|
@pytest.mark.parametrize("bad", ["", "abc", "2026/06/08", "2026-02-30"])
|
||||||
|
def test_parse_operator_calendar_date_rejects_invalid(bad: str):
|
||||||
|
with pytest.raises(ValueError, match="YYYY-MM-DD"):
|
||||||
|
parse_operator_calendar_date(bad)
|
||||||
@@ -9,10 +9,11 @@ from server.background.schedule_runner import (
|
|||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
def test_compute_next_cron_run_finds_next_minute():
|
def test_compute_next_cron_run_beijing_wall_0200():
|
||||||
after = datetime(2026, 6, 7, 1, 59, tzinfo=timezone.utc)
|
"""cron 0 2 * * * = Beijing 02:00, not UTC 02:00."""
|
||||||
|
after = datetime(2026, 6, 7, 17, 59, tzinfo=timezone.utc) # Beijing 2026-06-08 01:59
|
||||||
nxt = _compute_next_cron_run("0 2 * * *", after)
|
nxt = _compute_next_cron_run("0 2 * * *", after)
|
||||||
assert nxt == datetime(2026, 6, 7, 2, 0, tzinfo=timezone.utc)
|
assert nxt == datetime(2026, 6, 7, 18, 0, 0)
|
||||||
|
|
||||||
|
|
||||||
def test_compute_schedule_next_run_once_future():
|
def test_compute_schedule_next_run_once_future():
|
||||||
|
|||||||
@@ -0,0 +1,43 @@
|
|||||||
|
"""WebSocket alert/recovery messages include server-side UTC timestamp."""
|
||||||
|
|
||||||
|
from __future__ import annotations
|
||||||
|
|
||||||
|
from unittest.mock import AsyncMock
|
||||||
|
|
||||||
|
import pytest
|
||||||
|
|
||||||
|
from server.api import websocket as ws_mod
|
||||||
|
|
||||||
|
|
||||||
|
@pytest.mark.asyncio
|
||||||
|
async def test_broadcast_alert_includes_at(monkeypatch):
|
||||||
|
captured: list[dict] = []
|
||||||
|
|
||||||
|
async def _capture(msg: dict) -> None:
|
||||||
|
captured.append(msg)
|
||||||
|
|
||||||
|
monkeypatch.setattr(ws_mod, "_dispatch_ws_message", _capture)
|
||||||
|
monkeypatch.setattr(ws_mod, "_save_alert_log", AsyncMock())
|
||||||
|
monkeypatch.setattr(ws_mod, "_should_push_telegram", lambda _key: False)
|
||||||
|
|
||||||
|
await ws_mod.broadcast_alert(1, "cpu", 95.0, "srv-a")
|
||||||
|
|
||||||
|
assert len(captured) == 1
|
||||||
|
assert "at" in captured[0]
|
||||||
|
assert captured[0]["at"].endswith("+00:00") or "T" in captured[0]["at"]
|
||||||
|
|
||||||
|
|
||||||
|
@pytest.mark.asyncio
|
||||||
|
async def test_broadcast_recovery_includes_at(monkeypatch):
|
||||||
|
captured: list[dict] = []
|
||||||
|
|
||||||
|
async def _capture(msg: dict) -> None:
|
||||||
|
captured.append(msg)
|
||||||
|
|
||||||
|
monkeypatch.setattr(ws_mod, "_dispatch_ws_message", _capture)
|
||||||
|
monkeypatch.setattr(ws_mod, "_save_alert_log", AsyncMock())
|
||||||
|
|
||||||
|
await ws_mod.broadcast_recovery(2, "memory", 42.0, "srv-b")
|
||||||
|
|
||||||
|
assert len(captured) == 1
|
||||||
|
assert "at" in captured[0]
|
||||||
@@ -1 +0,0 @@
|
|||||||
import{n as e,t}from"./useSnackbar-P0rXZaHt.js";import{n,t as r}from"./VRow-Jrv7cE2K.js";import{Ht as i,Ir as a,Pr as o,Sr as s,Ur as c,X as l,Xr as u,Xt as d,_ as f,br as p,dr as m,gr as h,h as g,hr as _,l as v,m as y,ni as b,oi as x,vr as S,xr as C,y as w}from"./index-Bplw5zZe.js";import{t as T}from"./usePageActivateRefresh-C2xQnJah.js";import{n as E,t as D}from"./dataTable-esDY4cOk.js";import{n as O}from"./paginatedFetch-DmzXeKPu.js";import{r as k,t as A}from"./VCard-DwK3U69w.js";import{t as j}from"./VSelect-C2IkZQ4Y.js";import{t as M}from"./VDataTableServer-D1N34nyt.js";var N={class:`font-weight-medium`},P={class:`text-body-2`},F={class:`text-caption text-medium-emphasis`},I=s({name:`AlertsPage`,__name:`AlertsPage`,setup(s){let I=t(),L=u(!1),R=u([]),z=u(0),B=u(1),V=u(20),H=D,U=u(null),W=u(null),G=u([{label:`今日告警`,value:`0`,color:`blue`,icon:`mdi-alert`},{label:`活跃告警`,value:`0`,color:`orange`,icon:`mdi-bell-ring`},{label:`已恢复`,value:`0`,color:`green`,icon:`mdi-check-circle`},{label:`Top 服务器`,value:`—`,color:`red`,icon:`mdi-server`}]),K=[{label:`CPU`,value:`cpu`},{label:`内存`,value:`memory`},{label:`磁盘`,value:`disk`},{label:`连接`,value:`connection`}],q=[{label:`活跃`,value:`active`},{label:`已恢复`,value:`recovered`}],J=E([{title:`类型`,key:`alert_type`,width:100},{title:`服务器`,key:`server_name`},{title:`详情`,key:`value`},{title:`状态`,key:`is_recovery`,width:100},{title:`时间`,key:`created_at`,width:160}]);async function Y(){try{let e=await d.get(`/alert-history/stats`);G.value[0].value=String(e.today||0),G.value[1].value=String(e.active||0),G.value[2].value=String(e.recovered||0),G.value[3].value=e.top_server||`—`}catch{I(`加载统计失败`,`error`)}}function X(e){B.value=e,Q()}function Z(e){V.value=e,B.value=1,Q()}async function Q(e=!1){e||(L.value=!0);try{let e=await O(`/alert-history/`,{type:U.value||void 0,status:W.value||void 0},B.value,V.value);R.value=e.items,z.value=e.total,V.value===-1&&(B.value=1)}catch{R.value=[],z.value=0,I(`加载告警列表失败`,`error`)}finally{e||(L.value=!1)}}function $(e){return e===`cpu`||e===`CPU`?`error`:e===`memory`||e===`内存`?`warning`:e===`disk`||e===`磁盘`?`info`:`primary`}function ee(e){return e===`cpu`||e===`CPU`?`mdi-chip`:e===`memory`||e===`内存`?`mdi-memory`:e===`disk`||e===`磁盘`?`mdi-harddisk`:`mdi-lan-disconnect`}async function te(e=!1){await Promise.all([Y(),Q(e)])}return T(e=>te(e)),(t,s)=>(o(),h(e,{fluid:``,class:`pa-6`},{default:c(()=>[C(r,{class:`mb-4`},{default:c(()=>[(o(!0),S(m,null,a(G.value,e=>(o(),h(n,{cols:`12`,sm:`6`,lg:`3`,key:e.label},{default:c(()=>[C(v,{elevation:`0`,lines:`two`,rounded:`lg`,border:``},{default:c(()=>[C(y,null,{append:c(()=>[C(l,{color:e.color,size:`30`},{default:c(()=>[p(x(e.icon),1)]),_:2},1032,[`color`])]),default:c(()=>[C(g,{class:`text-body-small`},{default:c(()=>[p(x(e.label),1)]),_:2},1024),C(g,null,{default:c(()=>[p(x(e.value),1)]),_:2},1024)]),_:2},1024)]),_:2},1024)]),_:2},1024))),128))]),_:1}),C(A,{elevation:`0`,border:``,rounded:`lg`},{default:c(()=>[C(k,{class:`d-flex align-center`},{default:c(()=>[s[4]||=p(` 告警历史 `,-1),C(f),C(j,{modelValue:U.value,"onUpdate:modelValue":[s[0]||=e=>U.value=e,s[1]||=e=>{B.value=1,Q()}],items:K,"item-title":`label`,"item-value":`value`,label:`类型`,variant:`outlined`,density:`compact`,"hide-details":``,style:{"max-width":`140px`},clearable:``},null,8,[`modelValue`]),C(j,{modelValue:W.value,"onUpdate:modelValue":[s[2]||=e=>W.value=e,s[3]||=e=>{B.value=1,Q()}],items:q,"item-title":`label`,"item-value":`value`,label:`状态`,variant:`outlined`,density:`compact`,"hide-details":``,style:{"max-width":`140px`},class:`ml-3`,clearable:``},null,8,[`modelValue`])]),_:1}),C(M,{items:R.value,headers:b(J),"items-length":z.value,loading:L.value,page:B.value,"items-per-page":V.value,"items-per-page-options":b(H),hover:``,density:`comfortable`,"onUpdate:page":X,"onUpdate:itemsPerPage":Z},{"item.alert_type":c(({item:e})=>[C(w,{color:$(e.alert_type),size:`small`,variant:`tonal`,label:``},{prepend:c(()=>[C(l,{size:`12`},{default:c(()=>[p(x(ee(e.alert_type)),1)]),_:2},1024)]),default:c(()=>[p(` `+x(e.alert_type),1)]),_:2},1032,[`color`])]),"item.server_name":c(({item:e})=>[_(`span`,N,x(e.server_name),1)]),"item.value":c(({item:e})=>[_(`span`,P,x(e.value),1)]),"item.is_recovery":c(({item:e})=>[e.is_recovery?(o(),h(w,{key:0,color:`success`,size:`small`,variant:`tonal`,label:``},{default:c(()=>[...s[5]||=[p(`已恢复`,-1)]]),_:1})):(o(),h(w,{key:1,color:`error`,size:`small`,variant:`tonal`,label:``},{default:c(()=>[...s[6]||=[p(`告警中`,-1)]]),_:1}))]),"item.created_at":c(({item:e})=>[_(`span`,F,x(b(i)(e.created_at)),1)]),"no-data":c(()=>[...s[7]||=[_(`div`,{class:`text-center text-medium-emphasis py-6`},`暂无数据`,-1)]]),_:1},8,[`items`,`headers`,`items-length`,`loading`,`page`,`items-per-page`,`items-per-page-options`])]),_:1})]),_:1}))}});export{I as default};
|
|
||||||
@@ -0,0 +1 @@
|
|||||||
|
import{n as e,t}from"./useSnackbar-BN7WL7jT.js";import{n,t as r}from"./VRow-DQLoaeks.js";import{Cr as i,Fr as a,Lr as o,Sr as s,Ut as c,Wr as l,X as u,Zr as d,Zt as f,_ as p,_r as m,fr as h,gr as g,h as _,l as v,m as y,ri as b,si as x,xr as S,y as C,yr as w}from"./index-mgwiCK5j.js";import{t as T}from"./usePageActivateRefresh-B3aZWt5v.js";import{n as E,t as D}from"./dataTable-esDY4cOk.js";import{n as O}from"./paginatedFetch-D86MsoFz.js";import{r as k,t as A}from"./VCard-B9mXbrEC.js";import{t as j}from"./VSelect-7ey6zQ_i.js";import{t as M}from"./VDataTableServer-CKraLARR.js";var N={class:`font-weight-medium`},P={class:`text-body-2`},F={class:`text-caption text-medium-emphasis`},I=i({name:`AlertsPage`,__name:`AlertsPage`,setup(i){let I=t(),L=d(!1),R=d([]),z=d(0),B=d(1),V=d(20),H=D,U=d(null),W=d(null),G=d([{label:`今日告警`,value:`0`,color:`blue`,icon:`mdi-alert`},{label:`活跃告警`,value:`0`,color:`orange`,icon:`mdi-bell-ring`},{label:`已恢复`,value:`0`,color:`green`,icon:`mdi-check-circle`},{label:`Top 服务器`,value:`—`,color:`red`,icon:`mdi-server`}]),K=[{label:`CPU`,value:`cpu`},{label:`内存`,value:`memory`},{label:`磁盘`,value:`disk`},{label:`连接`,value:`connection`}],q=[{label:`活跃`,value:`active`},{label:`已恢复`,value:`recovered`}],J=E([{title:`类型`,key:`alert_type`,width:100},{title:`服务器`,key:`server_name`},{title:`详情`,key:`value`},{title:`状态`,key:`is_recovery`,width:100},{title:`时间`,key:`created_at`,width:160}]);async function Y(){try{let e=await f.get(`/alert-history/stats`);G.value[0].value=String(e.today||0),G.value[1].value=String(e.active||0),G.value[2].value=String(e.recovered||0),G.value[3].value=e.top_server||`—`}catch{I(`加载统计失败`,`error`)}}function X(e){B.value=e,Q()}function Z(e){V.value=e,B.value=1,Q()}async function Q(e=!1){e||(L.value=!0);try{let e=await O(`/alert-history/`,{type:U.value||void 0,status:W.value||void 0},B.value,V.value);R.value=e.items,z.value=e.total,V.value===-1&&(B.value=1)}catch{R.value=[],z.value=0,I(`加载告警列表失败`,`error`)}finally{e||(L.value=!1)}}function $(e){return e===`cpu`||e===`CPU`?`error`:e===`memory`||e===`内存`?`warning`:e===`disk`||e===`磁盘`?`info`:`primary`}function ee(e){return e===`cpu`||e===`CPU`?`mdi-chip`:e===`memory`||e===`内存`?`mdi-memory`:e===`disk`||e===`磁盘`?`mdi-harddisk`:`mdi-lan-disconnect`}async function te(e=!1){await Promise.all([Y(),Q(e)])}return T(e=>te(e)),(t,i)=>(a(),m(e,{fluid:``,class:`pa-6`},{default:l(()=>[s(r,{class:`mb-4`},{default:l(()=>[(a(!0),w(h,null,o(G.value,e=>(a(),m(n,{cols:`12`,sm:`6`,lg:`3`,key:e.label},{default:l(()=>[s(v,{elevation:`0`,lines:`two`,rounded:`lg`,border:``},{default:l(()=>[s(y,null,{append:l(()=>[s(u,{color:e.color,size:`30`},{default:l(()=>[S(x(e.icon),1)]),_:2},1032,[`color`])]),default:l(()=>[s(_,{class:`text-body-small`},{default:l(()=>[S(x(e.label),1)]),_:2},1024),s(_,null,{default:l(()=>[S(x(e.value),1)]),_:2},1024)]),_:2},1024)]),_:2},1024)]),_:2},1024))),128))]),_:1}),s(A,{elevation:`0`,border:``,rounded:`lg`},{default:l(()=>[s(k,{class:`d-flex align-center`},{default:l(()=>[i[4]||=S(` 告警历史 `,-1),s(p),s(j,{modelValue:U.value,"onUpdate:modelValue":[i[0]||=e=>U.value=e,i[1]||=e=>{B.value=1,Q()}],items:K,"item-title":`label`,"item-value":`value`,label:`类型`,variant:`outlined`,density:`compact`,"hide-details":``,style:{"max-width":`140px`},clearable:``},null,8,[`modelValue`]),s(j,{modelValue:W.value,"onUpdate:modelValue":[i[2]||=e=>W.value=e,i[3]||=e=>{B.value=1,Q()}],items:q,"item-title":`label`,"item-value":`value`,label:`状态`,variant:`outlined`,density:`compact`,"hide-details":``,style:{"max-width":`140px`},class:`ml-3`,clearable:``},null,8,[`modelValue`])]),_:1}),s(M,{items:R.value,headers:b(J),"items-length":z.value,loading:L.value,page:B.value,"items-per-page":V.value,"items-per-page-options":b(H),hover:``,density:`comfortable`,"onUpdate:page":X,"onUpdate:itemsPerPage":Z},{"item.alert_type":l(({item:e})=>[s(C,{color:$(e.alert_type),size:`small`,variant:`tonal`,label:``},{prepend:l(()=>[s(u,{size:`12`},{default:l(()=>[S(x(ee(e.alert_type)),1)]),_:2},1024)]),default:l(()=>[S(` `+x(e.alert_type),1)]),_:2},1032,[`color`])]),"item.server_name":l(({item:e})=>[g(`span`,N,x(e.server_name),1)]),"item.value":l(({item:e})=>[g(`span`,P,x(e.value),1)]),"item.is_recovery":l(({item:e})=>[e.is_recovery?(a(),m(C,{key:0,color:`success`,size:`small`,variant:`tonal`,label:``},{default:l(()=>[...i[5]||=[S(`已恢复`,-1)]]),_:1})):(a(),m(C,{key:1,color:`error`,size:`small`,variant:`tonal`,label:``},{default:l(()=>[...i[6]||=[S(`告警中`,-1)]]),_:1}))]),"item.created_at":l(({item:e})=>[g(`span`,F,x(b(c)(e.created_at)),1)]),"no-data":l(()=>[...i[7]||=[g(`div`,{class:`text-center text-medium-emphasis py-6`},`暂无数据`,-1)]]),_:1},8,[`items`,`headers`,`items-length`,`loading`,`page`,`items-per-page`,`items-per-page-options`])]),_:1})]),_:1}))}});export{I as default};
|
||||||
@@ -1 +1 @@
|
|||||||
import{n as e,t}from"./useSnackbar-P0rXZaHt.js";import{Ht as n,P as r,Pr as i,Sr as a,Tt as o,Ur as s,Xr as c,Xt as l,_ as u,_r as d,br as f,gr as p,hr as m,ni as h,oi as g,ur as _,xr as v,y}from"./index-Bplw5zZe.js";import{t as b}from"./usePageActivateRefresh-C2xQnJah.js";import{n as x}from"./dataTable-esDY4cOk.js";import{r as S,t as C}from"./VCard-DwK3U69w.js";import{t as w}from"./VSelect-C2IkZQ4Y.js";import{t as T}from"./VTextField-DVnxh9lX.js";import{t as E}from"./VDataTableServer-D1N34nyt.js";import{a as D,n as O,r as k,t as A}from"./auditNormalize-DWYIxo0q.js";var j=new Set([`batch_install_agent`,`batch_upgrade_agent`,`batch_uninstall_agent`,`batch_detect_path`,`batch_health_check`,`batch_update_category`,`batch_server_op`]);function M(e){return j.has(e)}function N(e){let t=(e||``).trim();if(!t.startsWith(`{`))return null;try{let e=JSON.parse(t);return typeof e.job_id!=`number`||!e.summary?null:e}catch{return null}}function P(e){let t=[e.summary],n=e.failures||[];if(n.length){let e=n.slice(0,3).map(e=>e.server_name).join(`、`);t.push(`失败: ${e}${n.length>3?`…`:``}`)}return t.join(` · `)}var F={class:`font-weight-medium`},I={class:`text-body-2`},L={class:`d-flex align-center ga-2 flex-wrap`},R={class:`text-body-2 text-medium-emphasis`,style:{"max-width":`360px`}},z={class:`text-caption text-medium-emphasis`},B={class:`text-caption text-medium-emphasis`},V=a({name:`AuditPage`,__name:`AuditPage`,setup(a){let j=t(),V=c(!1),H=c([]),U=c(0),W=c(1),G=c(null),K=c(``),q=c(``),J=O,Y=x([{title:`操作`,key:`action`,width:100},{title:`用户`,key:`admin_username`,width:100},{title:`目标`,key:`target`,width:140},{title:`详情`,key:`detail`},{title:`IP`,key:`ip_address`,width:120},{title:`时间`,key:`created_at`,width:160}]);async function X(e=!1){e||(V.value=!0);try{let e=(W.value-1)*50,t=await l.get(`/audit/`,{limit:50,offset:e,action:G.value||void 0,admin_username:K.value||void 0,date_from:q.value||void 0});H.value=A(t.items||[]),U.value=t.total||0}catch{H.value=[],e||j(`加载审计日志失败`,`error`)}finally{e||(V.value=!1)}}function Z(e){return e.startsWith(`create`)||e===`login`?`success`:e.startsWith(`update`)?`info`:e.startsWith(`delete`)||e===`logout`?`error`:e.includes(`execute`)||e.includes(`push`)||e.includes(`retry`)?`warning`:`primary`}function Q(e){return M(e.action)?N(e.detail):null}function $(e){let t=Q(e);return t?P(t):(e.detail||``).trim()||`—`}function ee(e){o(e.job_id,e.summary)}return b(e=>X(e)),(t,a)=>(i(),p(e,{fluid:``,class:`pa-6`},{default:s(()=>[v(C,{elevation:`0`,border:``,rounded:`lg`},{default:s(()=>[v(S,{class:`d-flex align-center`},{default:s(()=>[a[7]||=f(` 审计日志 `,-1),v(u),v(w,{modelValue:G.value,"onUpdate:modelValue":[a[0]||=e=>G.value=e,a[1]||=e=>{W.value=1,X()}],items:h(J),"item-title":`label`,"item-value":`value`,label:`操作类型`,variant:`outlined`,density:`compact`,"hide-details":``,style:{"max-width":`200px`},clearable:``},null,8,[`modelValue`,`items`]),v(T,{modelValue:K.value,"onUpdate:modelValue":[a[2]||=e=>K.value=e,a[3]||=e=>{W.value=1,X()}],"prepend-inner-icon":`mdi-account`,label:`用户`,variant:`outlined`,density:`compact`,"hide-details":``,style:{"max-width":`140px`},class:`ml-3`,clearable:``},null,8,[`modelValue`]),v(T,{modelValue:q.value,"onUpdate:modelValue":[a[4]||=e=>q.value=e,a[5]||=e=>{W.value=1,X()}],"prepend-inner-icon":`mdi-calendar`,label:`日期`,variant:`outlined`,density:`compact`,"hide-details":``,style:{"max-width":`160px`},class:`ml-3`,type:`date`,clearable:``},null,8,[`modelValue`])]),_:1}),v(E,{items:H.value,headers:h(Y),"items-length":U.value,loading:V.value,page:W.value,"items-per-page":50,hover:``,density:`compact`,"onUpdate:page":a[6]||=e=>{W.value=e,X()}},{"item.action":s(({item:e})=>[v(y,{color:Z(e.action),size:`small`,variant:`tonal`,label:``},{default:s(()=>[f(g(h(k)(e.action)),1)]),_:2},1032,[`color`])]),"item.admin_username":s(({item:e})=>[m(`span`,F,g(e.admin_username),1)]),"item.target":s(({item:e})=>[m(`span`,I,g(h(D)(e.resource_type))+g(e.resource_id?` #${e.resource_id}`:``),1)]),"item.detail":s(({item:e})=>[m(`div`,L,[m(`span`,R,g($(e)),1),Q(e)?(i(),p(r,{key:0,size:`x-small`,variant:`tonal`,color:`primary`,onClick:_(t=>ee(Q(e)),[`stop`])},{default:s(()=>[...a[8]||=[f(` 查看结果 `,-1)]]),_:1},8,[`onClick`])):d(``,!0)])]),"item.ip_address":s(({item:e})=>[m(`span`,z,g(e.ip_address||`—`),1)]),"item.created_at":s(({item:e})=>[m(`span`,B,g(h(n)(e.created_at)),1)]),"no-data":s(()=>[...a[9]||=[m(`div`,{class:`text-center text-medium-emphasis py-6`},`暂无数据`,-1)]]),_:1},8,[`items`,`headers`,`items-length`,`loading`,`page`])]),_:1})]),_:1}))}});export{V as default};
|
import{n as e,t}from"./useSnackbar-BN7WL7jT.js";import{Cr as n,Fr as r,P as i,Sr as a,Tt as o,Ut as s,Wr as c,Zr as l,Zt as u,_ as d,_r as f,dr as p,gr as m,ri as h,si as g,vr as _,xr as v,y}from"./index-mgwiCK5j.js";import{t as b}from"./usePageActivateRefresh-B3aZWt5v.js";import{n as x}from"./dataTable-esDY4cOk.js";import{r as S,t as C}from"./VCard-B9mXbrEC.js";import{t as w}from"./VSelect-7ey6zQ_i.js";import{t as T}from"./VTextField-C7hGBY30.js";import{t as E}from"./VDataTableServer-CKraLARR.js";import{a as D,n as O,r as k,t as A}from"./auditNormalize-DWYIxo0q.js";var j=new Set([`batch_install_agent`,`batch_upgrade_agent`,`batch_uninstall_agent`,`batch_detect_path`,`batch_health_check`,`batch_update_category`,`batch_server_op`]);function M(e){return j.has(e)}function N(e){let t=(e||``).trim();if(!t.startsWith(`{`))return null;try{let e=JSON.parse(t);return typeof e.job_id!=`number`||!e.summary?null:e}catch{return null}}function P(e){let t=[e.summary],n=e.failures||[];if(n.length){let e=n.slice(0,3).map(e=>e.server_name).join(`、`);t.push(`失败: ${e}${n.length>3?`…`:``}`)}return t.join(` · `)}var F={class:`font-weight-medium`},I={class:`text-body-2`},L={class:`d-flex align-center ga-2 flex-wrap`},R={class:`text-body-2 text-medium-emphasis`,style:{"max-width":`360px`}},z={class:`text-caption text-medium-emphasis`},B={class:`text-caption text-medium-emphasis`},V=n({name:`AuditPage`,__name:`AuditPage`,setup(n){let j=t(),V=l(!1),H=l([]),U=l(0),W=l(1),G=l(null),K=l(``),q=l(``),J=O,Y=x([{title:`操作`,key:`action`,width:100},{title:`用户`,key:`admin_username`,width:100},{title:`目标`,key:`target`,width:140},{title:`详情`,key:`detail`},{title:`IP`,key:`ip_address`,width:120},{title:`时间`,key:`created_at`,width:160}]);async function X(e=!1){e||(V.value=!0);try{let e=(W.value-1)*50,t=await u.get(`/audit/`,{limit:50,offset:e,action:G.value||void 0,admin_username:K.value||void 0,date_from:q.value||void 0});H.value=A(t.items||[]),U.value=t.total||0}catch{H.value=[],e||j(`加载审计日志失败`,`error`)}finally{e||(V.value=!1)}}function Z(e){return e.startsWith(`create`)||e===`login`?`success`:e.startsWith(`update`)?`info`:e.startsWith(`delete`)||e===`logout`?`error`:e.includes(`execute`)||e.includes(`push`)||e.includes(`retry`)?`warning`:`primary`}function Q(e){return M(e.action)?N(e.detail):null}function $(e){let t=Q(e);return t?P(t):(e.detail||``).trim()||`—`}function ee(e){o(e.job_id,e.summary)}return b(e=>X(e)),(t,n)=>(r(),f(e,{fluid:``,class:`pa-6`},{default:c(()=>[a(C,{elevation:`0`,border:``,rounded:`lg`},{default:c(()=>[a(S,{class:`d-flex align-center`},{default:c(()=>[n[7]||=v(` 审计日志 `,-1),a(d),a(w,{modelValue:G.value,"onUpdate:modelValue":[n[0]||=e=>G.value=e,n[1]||=e=>{W.value=1,X()}],items:h(J),"item-title":`label`,"item-value":`value`,label:`操作类型`,variant:`outlined`,density:`compact`,"hide-details":``,style:{"max-width":`200px`},clearable:``},null,8,[`modelValue`,`items`]),a(T,{modelValue:K.value,"onUpdate:modelValue":[n[2]||=e=>K.value=e,n[3]||=e=>{W.value=1,X()}],"prepend-inner-icon":`mdi-account`,label:`用户`,variant:`outlined`,density:`compact`,"hide-details":``,style:{"max-width":`140px`},class:`ml-3`,clearable:``},null,8,[`modelValue`]),a(T,{modelValue:q.value,"onUpdate:modelValue":[n[4]||=e=>q.value=e,n[5]||=e=>{W.value=1,X()}],"prepend-inner-icon":`mdi-calendar`,label:`日期`,variant:`outlined`,density:`compact`,"hide-details":``,style:{"max-width":`160px`},class:`ml-3`,type:`date`,clearable:``},null,8,[`modelValue`])]),_:1}),a(E,{items:H.value,headers:h(Y),"items-length":U.value,loading:V.value,page:W.value,"items-per-page":50,hover:``,density:`compact`,"onUpdate:page":n[6]||=e=>{W.value=e,X()}},{"item.action":c(({item:e})=>[a(y,{color:Z(e.action),size:`small`,variant:`tonal`,label:``},{default:c(()=>[v(g(h(k)(e.action)),1)]),_:2},1032,[`color`])]),"item.admin_username":c(({item:e})=>[m(`span`,F,g(e.admin_username),1)]),"item.target":c(({item:e})=>[m(`span`,I,g(h(D)(e.resource_type))+g(e.resource_id?` #${e.resource_id}`:``),1)]),"item.detail":c(({item:e})=>[m(`div`,L,[m(`span`,R,g($(e)),1),Q(e)?(r(),f(i,{key:0,size:`x-small`,variant:`tonal`,color:`primary`,onClick:p(t=>ee(Q(e)),[`stop`])},{default:c(()=>[...n[8]||=[v(` 查看结果 `,-1)]]),_:1},8,[`onClick`])):_(``,!0)])]),"item.ip_address":c(({item:e})=>[m(`span`,z,g(e.ip_address||`—`),1)]),"item.created_at":c(({item:e})=>[m(`span`,B,g(h(s)(e.created_at)),1)]),"no-data":c(()=>[...n[9]||=[m(`div`,{class:`text-center text-medium-emphasis py-6`},`暂无数据`,-1)]]),_:1},8,[`items`,`headers`,`items-length`,`loading`,`page`])]),_:1})]),_:1}))}});export{V as default};
|
||||||
File diff suppressed because one or more lines are too long
@@ -1 +0,0 @@
|
|||||||
import{Mr as e,Pr as t,Sr as n,tn as r,vr as i}from"./index-Bplw5zZe.js";var a=n({name:`CredentialsPage`,__name:`CredentialsPage`,setup(n){let a=r();return e(()=>{a.replace({path:`/servers`,query:{credentials:`1`}})}),(e,n)=>(t(),i(`div`))}});export{a as default};
|
|
||||||
@@ -0,0 +1 @@
|
|||||||
|
import{Cr as e,Fr as t,Nr as n,nn as r,yr as i}from"./index-mgwiCK5j.js";var a=e({name:`CredentialsPage`,__name:`CredentialsPage`,setup(e){let a=r();return n(()=>{a.replace({path:`/servers`,query:{credentials:`1`}})}),(e,n)=>(t(),i(`div`))}});export{a as default};
|
||||||
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
@@ -0,0 +1,2 @@
|
|||||||
|
const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/DashboardPage-DktZ0FBt.js","assets/_plugin-vue_export-helper-BDNMzG2s.js","assets/index-mgwiCK5j.js","assets/index-DUUkodzN.css","assets/VCard-B9mXbrEC.js","assets/VCard-BCYbpv-w.css","assets/VRow-DQLoaeks.js","assets/VRow-DIr3-SqU.css","assets/useSnackbar-BN7WL7jT.js","assets/useSnackbar-ku9EbwM-.css","assets/VSkeletonLoader-D88aCGCT.js","assets/VSkeletonLoader-B03HMi2d.css","assets/usePageActivateRefresh-B3aZWt5v.js","assets/auditNormalize-DWYIxo0q.js","assets/DashboardPage-BpuLHXj7.css"])))=>i.map(i=>d[i]);
|
||||||
|
import{Cr as e,Fr as t,Hr as n,Jt as r,Kt as i,N as a,Nr as o,P as s,Pr as c,Sr as l,Wr as u,Yt as d,Zr as f,Zt as p,_r as m,dr as h,gr as g,hr as _,nn as v,oi as ee,qt as y,si as b,tn as x,vr as S,xr as C,y as w,yr as T}from"./index-mgwiCK5j.js";import{t as E}from"./VCard-B9mXbrEC.js";import{t as D}from"./VTextField-C7hGBY30.js";import{t as O}from"./_plugin-vue_export-helper-BDNMzG2s.js";import{t as k}from"./VForm-CTU5wndi.js";var A={class:`login-page`},j={key:0,class:`login-center`},te={key:2,class:`text-center mt-4`},M=O(e({name:`LoginPage`,__name:`LoginPage`,setup(e){let O=x(),M=v(),N=y(),P=f(`checking`),F=f(``),I=f(``),L=f(``),R=f(!1),z=f(!1),B=f(``),V=f(!1),H=f(0),U=f(null),W=f([]),G=f(0),K=null,q=_(()=>P.value===`checking`?{backgroundColor:`#0a0a12`}:W.value.length===0?{backgroundImage:`linear-gradient(135deg, #1a237e 0%, #0d47a1 40%, #1565c0 100%)`}:{backgroundImage:`url(${W.value[G.value]})`});async function J(){try{let e=await p.get(`/settings/bing-wallpapers`);e?.urls?.length&&(W.value=e.urls,G.value=Math.floor(Math.random()*e.urls.length))}catch{}}function Y(){K&&clearInterval(K),!(W.value.length<=1)&&(K=setInterval(()=>{G.value=(G.value+1)%W.value.length},36e5))}async function X(){P.value=`checking`;try{return await p.get(`/auth/login-access`),P.value=`form`,!0}catch{return P.value=`blocked`,!1}}function Z(){P.value===`form`&&i(()=>import(`./DashboardPage-DktZ0FBt.js`),__vite__mapDeps([0,1,2,3,4,5,6,7,8,9,10,11,12,13,14]))}n(P,e=>{e===`form`&&Z()}),o(async()=>{await X(),await J(),Y()}),c(()=>{K&&clearInterval(K),$&&clearInterval($)});let Q=f(Date.now()),$=null,ne=_(()=>{if(!U.value)return 0;let e=new Date(U.value).getTime()-Q.value;return Math.max(0,Math.ceil(e/6e4))});n(U,e=>{$&&=(clearInterval($),null),e&&($=setInterval(()=>{Q.value=Date.now()},3e4))});async function re(){if(!F.value||!I.value){B.value=`请输入用户名和密码`;return}z.value=!0,B.value=``;try{await N.login(F.value,I.value,V.value?L.value:void 0);let e=O.query.redirect||`/`,t=e.startsWith(`/`)&&!e.startsWith(`//`)?e:`/`;await M.replace(t)}catch(e){if(e instanceof d)V.value=!0,B.value=e.message;else if(e instanceof r){if(e.status===403){P.value=`blocked`;return}e.status===429?(U.value=new Date(Date.now()+900*1e3).toISOString(),B.value=`登录尝试过多,账户已锁定 15 分钟`):(H.value++,B.value=e.message)}else B.value=`网络错误,请重试`}finally{z.value=!1}}return(e,n)=>(t(),T(`div`,A,[g(`div`,{class:`wallpaper-bg`,style:ee(q.value)},null,4),n[6]||=g(`div`,{class:`wallpaper-overlay`},null,-1),P.value===`form`?(t(),T(`div`,j,[l(E,{elevation:`0`,rounded:`xl`,class:`login-card pa-10`,border:``},{default:u(()=>[B.value?(t(),m(a,{key:0,type:`error`,density:`compact`,class:`mb-4`,closable:``,"onClick:close":n[0]||=e=>B.value=``,rounded:`lg`,variant:`tonal`},{default:u(()=>[C(b(B.value),1)]),_:1})):S(``,!0),U.value?(t(),m(a,{key:1,type:`warning`,density:`compact`,class:`mb-4`,rounded:`lg`,variant:`tonal`},{default:u(()=>[C(` 账户已锁定,请 `+b(ne.value)+` 分钟后重试 `,1)]),_:1})):S(``,!0),l(k,{onSubmit:h(re,[`prevent`])},{default:u(()=>[l(D,{modelValue:F.value,"onUpdate:modelValue":n[1]||=e=>F.value=e,label:`用户名`,variant:`outlined`,density:`comfortable`,"prepend-inner-icon":`mdi-account-outline`,disabled:z.value,class:`mb-4`,autocomplete:`username`,rounded:`lg`,"hide-details":`auto`},null,8,[`modelValue`,`disabled`]),l(D,{modelValue:I.value,"onUpdate:modelValue":n[2]||=e=>I.value=e,label:`密码`,variant:`outlined`,density:`comfortable`,"prepend-inner-icon":`mdi-lock-outline`,"append-inner-icon":R.value?`mdi-eye`:`mdi-eye-off`,type:R.value?`text`:`password`,"onClick:appendInner":n[3]||=e=>R.value=!R.value,disabled:z.value,class:`mb-4`,autocomplete:`current-password`,rounded:`lg`,"hide-details":`auto`},null,8,[`modelValue`,`append-inner-icon`,`type`,`disabled`]),V.value?(t(),m(D,{key:0,modelValue:L.value,"onUpdate:modelValue":n[4]||=e=>L.value=e,label:`TOTP 验证码`,variant:`outlined`,density:`comfortable`,"prepend-inner-icon":`mdi-shield-key-outline`,disabled:z.value,class:`mb-4`,autocomplete:`one-time-code`,rounded:`lg`,"hide-details":`auto`},null,8,[`modelValue`,`disabled`])):S(``,!0),l(s,{type:`submit`,color:`primary`,variant:`flat`,block:``,size:`large`,loading:z.value,disabled:!!U.value,rounded:`lg`,class:`mt-2`,height:`48`},{default:u(()=>[...n[5]||=[C(` 登录 `,-1)]]),_:1},8,[`loading`,`disabled`])]),_:1}),H.value>0&&!U.value?(t(),T(`div`,te,[l(w,{size:`small`,variant:`tonal`,color:`warning`,label:``},{default:u(()=>[C(` 已失败 `+b(H.value)+` 次 `,1)]),_:1})])):S(``,!0)]),_:1})])):S(``,!0)]))}}),[[`__scopeId`,`data-v-5c1d22f2`]]);export{M as default};
|
||||||
@@ -1,2 +0,0 @@
|
|||||||
const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/DashboardPage-BDfRyW6v.js","assets/_plugin-vue_export-helper-BDNMzG2s.js","assets/index-Bplw5zZe.js","assets/index-DUUkodzN.css","assets/VCard-DwK3U69w.js","assets/VCard-BCYbpv-w.css","assets/VRow-Jrv7cE2K.js","assets/VRow-DIr3-SqU.css","assets/useSnackbar-P0rXZaHt.js","assets/useSnackbar-ku9EbwM-.css","assets/VSkeletonLoader-vo9o5RDt.js","assets/VSkeletonLoader-B03HMi2d.css","assets/usePageActivateRefresh-C2xQnJah.js","assets/auditNormalize-DWYIxo0q.js","assets/DashboardPage-BpuLHXj7.css"])))=>i.map(i=>d[i]);
|
|
||||||
import{Gt as e,Jt as t,Kt as n,Mr as r,N as i,Nr as a,P as o,Pr as s,Sr as c,Ur as l,Vr as u,Xr as d,Xt as f,_r as p,ai as m,br as h,en as g,gr as _,hr as v,mr as y,oi as b,qt as x,tn as S,ur as C,vr as w,xr as T,y as E}from"./index-Bplw5zZe.js";import{t as D}from"./VCard-DwK3U69w.js";import{t as O}from"./VTextField-DVnxh9lX.js";import{t as k}from"./_plugin-vue_export-helper-BDNMzG2s.js";import{t as A}from"./VForm-lsgZBPTi.js";var j={class:`login-page`},M={key:0,class:`login-center`},N={key:2,class:`text-center mt-4`},P=k(c({name:`LoginPage`,__name:`LoginPage`,setup(c){let k=g(),P=S(),F=n(),I=d(`checking`),L=d(``),R=d(``),z=d(``),B=d(!1),V=d(!1),H=d(``),U=d(!1),W=d(0),G=d(null),K=d([]),q=d(0),J=null,Y=y(()=>I.value===`checking`?{backgroundColor:`#0a0a12`}:K.value.length===0?{backgroundImage:`linear-gradient(135deg, #1a237e 0%, #0d47a1 40%, #1565c0 100%)`}:{backgroundImage:`url(${K.value[q.value]})`});async function X(){try{let e=await f.get(`/settings/bing-wallpapers`);e?.urls?.length&&(K.value=e.urls,q.value=Math.floor(Math.random()*e.urls.length))}catch{}}function Z(){J&&clearInterval(J),!(K.value.length<=1)&&(J=setInterval(()=>{q.value=(q.value+1)%K.value.length},36e5))}async function ee(){I.value=`checking`;try{return await f.get(`/auth/login-access`),I.value=`form`,!0}catch{return I.value=`blocked`,!1}}function te(){I.value===`form`&&e(()=>import(`./DashboardPage-BDfRyW6v.js`),__vite__mapDeps([0,1,2,3,4,5,6,7,8,9,10,11,12,13,14]))}u(I,e=>{e===`form`&&te()}),r(async()=>{await ee(),await X(),Z()}),a(()=>{J&&clearInterval(J),$&&clearInterval($)});let Q=d(Date.now()),$=null,ne=y(()=>{if(!G.value)return 0;let e=new Date(G.value).getTime()-Q.value;return Math.max(0,Math.ceil(e/6e4))});u(G,e=>{$&&=(clearInterval($),null),e&&($=setInterval(()=>{Q.value=Date.now()},3e4))});async function re(){if(!L.value||!R.value){H.value=`请输入用户名和密码`;return}V.value=!0,H.value=``;try{await F.login(L.value,R.value,U.value?z.value:void 0);let e=k.query.redirect||`/`,t=e.startsWith(`/`)&&!e.startsWith(`//`)?e:`/`;await P.replace(t)}catch(e){if(e instanceof t)U.value=!0,H.value=e.message;else if(e instanceof x){if(e.status===403){I.value=`blocked`;return}e.status===429?(G.value=new Date(Date.now()+900*1e3).toISOString(),H.value=`登录尝试过多,账户已锁定 15 分钟`):(W.value++,H.value=e.message)}else H.value=`网络错误,请重试`}finally{V.value=!1}}return(e,t)=>(s(),w(`div`,j,[v(`div`,{class:`wallpaper-bg`,style:m(Y.value)},null,4),t[6]||=v(`div`,{class:`wallpaper-overlay`},null,-1),I.value===`form`?(s(),w(`div`,M,[T(D,{elevation:`0`,rounded:`xl`,class:`login-card pa-10`,border:``},{default:l(()=>[H.value?(s(),_(i,{key:0,type:`error`,density:`compact`,class:`mb-4`,closable:``,"onClick:close":t[0]||=e=>H.value=``,rounded:`lg`,variant:`tonal`},{default:l(()=>[h(b(H.value),1)]),_:1})):p(``,!0),G.value?(s(),_(i,{key:1,type:`warning`,density:`compact`,class:`mb-4`,rounded:`lg`,variant:`tonal`},{default:l(()=>[h(` 账户已锁定,请 `+b(ne.value)+` 分钟后重试 `,1)]),_:1})):p(``,!0),T(A,{onSubmit:C(re,[`prevent`])},{default:l(()=>[T(O,{modelValue:L.value,"onUpdate:modelValue":t[1]||=e=>L.value=e,label:`用户名`,variant:`outlined`,density:`comfortable`,"prepend-inner-icon":`mdi-account-outline`,disabled:V.value,class:`mb-4`,autocomplete:`username`,rounded:`lg`,"hide-details":`auto`},null,8,[`modelValue`,`disabled`]),T(O,{modelValue:R.value,"onUpdate:modelValue":t[2]||=e=>R.value=e,label:`密码`,variant:`outlined`,density:`comfortable`,"prepend-inner-icon":`mdi-lock-outline`,"append-inner-icon":B.value?`mdi-eye`:`mdi-eye-off`,type:B.value?`text`:`password`,"onClick:appendInner":t[3]||=e=>B.value=!B.value,disabled:V.value,class:`mb-4`,autocomplete:`current-password`,rounded:`lg`,"hide-details":`auto`},null,8,[`modelValue`,`append-inner-icon`,`type`,`disabled`]),U.value?(s(),_(O,{key:0,modelValue:z.value,"onUpdate:modelValue":t[4]||=e=>z.value=e,label:`TOTP 验证码`,variant:`outlined`,density:`comfortable`,"prepend-inner-icon":`mdi-shield-key-outline`,disabled:V.value,class:`mb-4`,autocomplete:`one-time-code`,rounded:`lg`,"hide-details":`auto`},null,8,[`modelValue`,`disabled`])):p(``,!0),T(o,{type:`submit`,color:`primary`,variant:`flat`,block:``,size:`large`,loading:V.value,disabled:!!G.value,rounded:`lg`,class:`mt-2`,height:`48`},{default:l(()=>[...t[5]||=[h(` 登录 `,-1)]]),_:1},8,[`loading`,`disabled`])]),_:1}),W.value>0&&!G.value?(s(),w(`div`,N,[T(E,{size:`small`,variant:`tonal`,color:`warning`,label:``},{default:l(()=>[h(` 已失败 `+b(W.value)+` 次 `,1)]),_:1})])):p(``,!0)]),_:1})])):p(``,!0)]))}}),[[`__scopeId`,`data-v-5c1d22f2`]]);export{P as default};
|
|
||||||
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
@@ -1 +0,0 @@
|
|||||||
import{n as e,t}from"./useSnackbar-P0rXZaHt.js";import{Ht as n,P as r,Pr as i,Sr as a,Ur as o,Xr as s,Xt as c,_ as l,_r as u,br as d,gr as f,hr as p,ni as m,oi as h,xr as g,y as _}from"./index-Bplw5zZe.js";import{t as v}from"./usePageActivateRefresh-C2xQnJah.js";import{n as y}from"./dataTable-esDY4cOk.js";import{a as b,n as x,r as S,t as C}from"./VCard-DwK3U69w.js";import{t as w}from"./VSelect-C2IkZQ4Y.js";import{t as T}from"./VDataTableServer-D1N34nyt.js";import{t as E}from"./VDialog-DPwgR17F.js";import{t as D}from"./usePageAutoRefresh-B7w3XG1Y.js";var O={class:`font-weight-medium text-truncate d-inline-block`,style:{"max-width":`240px`}},k={class:`text-medium-emphasis`},A={class:`text-medium-emphasis`},j={class:`text-caption text-medium-emphasis`},M={class:`text-caption text-medium-emphasis`},N=a({name:`RetriesPage`,__name:`RetriesPage`,setup(a){let N=t(),P=s(!1),F=s([]),I=s(0),L=s(1),R=s(null),z=s(!1),B=s(null),V=[{label:`待重试`,value:`pending`},{label:`重试中`,value:`retrying`},{label:`成功`,value:`success`},{label:`失败`,value:`failed`}],H=y([{title:`状态`,key:`status`,width:100},{title:`任务`,key:`operation`},{title:`服务器`,key:`server_name`},{title:`次数`,key:`retry_count`,width:100},{title:`下次重试`,key:`next_retry_at`,width:140},{title:`创建时间`,key:`created_at`,width:160},{title:``,key:`actions`,width:120,align:`end`}]);async function U(e=!1){e||(P.value=!0);try{let e=(await c.getList(`/retries/`,{limit:200})).items||[];R.value&&(e=e.filter(e=>e.status===R.value)),I.value=e.length;let t=(L.value-1)*20;F.value=e.slice(t,t+20)}catch(t){e||(F.value=[],I.value=0,N(t instanceof Error?t.message:`加载重试队列失败`,`error`))}finally{e||(P.value=!1)}}async function W(e){try{await c.post(`/retries/${e.id}/retry`),U(),N(`重试已触发`)}catch(e){N(e.message||`操作失败`,`error`)}}function G(e){B.value=e.id,z.value=!0}async function K(){if(B.value)try{await c.delete(`/retries/${B.value}`),z.value=!1,U(),N(`已删除`)}catch(e){N(e.message||`删除失败`,`error`)}}function q(e){return e===`success`?`success`:e===`failed`?`error`:e===`retrying`?`warning`:`info`}function J(e){return e===`pending`?`待重试`:e===`retrying`?`重试中`:e===`success`?`成功`:e===`failed`?`失败`:e}function Y(e){return e.source_path&&e.target_path?`${e.source_path} → ${e.target_path}`:e.source_path||e.target_path||`文件推送`}return D(()=>U(!0),15e3),v(e=>U(e)),(t,a)=>(i(),f(e,{fluid:``,class:`pa-6`},{default:o(()=>[g(C,{elevation:`0`,border:``,rounded:`lg`},{default:o(()=>[g(S,{class:`d-flex align-center text-h6`},{default:o(()=>[a[5]||=d(` 重试队列 `,-1),g(l),g(w,{modelValue:R.value,"onUpdate:modelValue":[a[0]||=e=>R.value=e,a[1]||=e=>{L.value=1,U()}],items:V,"item-title":`label`,"item-value":`value`,label:`状态筛选`,variant:`outlined`,density:`compact`,"hide-details":``,style:{"max-width":`160px`},clearable:``},null,8,[`modelValue`])]),_:1}),g(T,{items:F.value,headers:m(H),"items-length":I.value,loading:P.value,page:L.value,"items-per-page":20,hover:``,density:`comfortable`,"onUpdate:page":a[2]||=e=>{L.value=e,U()}},{"item.status":o(({item:e})=>[g(_,{color:q(e.status),size:`x-small`,variant:`tonal`,label:``,border:`sm`},{default:o(()=>[d(h(J(e.status)),1)]),_:2},1032,[`color`])]),"item.operation":o(({item:e})=>[p(`span`,O,h(Y(e)),1)]),"item.server_name":o(({item:e})=>[p(`span`,k,h(e.server_name||`—`),1)]),"item.retry_count":o(({item:e})=>[p(`span`,A,h(e.retry_count||0)+` / `+h(e.max_retries||3),1)]),"item.next_retry_at":o(({item:e})=>[p(`span`,j,h(m(n)(e.next_retry_at)),1)]),"item.created_at":o(({item:e})=>[p(`span`,M,h(m(n)(e.created_at)),1)]),"item.actions":o(({item:e})=>[e.status===`pending`||e.status===`failed`?(i(),f(r,{key:0,variant:`text`,size:`x-small`,color:`primary`,density:`compact`,onClick:t=>W(e)},{default:o(()=>[...a[6]||=[d(` 重试 `,-1)]]),_:1},8,[`onClick`])):u(``,!0),g(r,{variant:`text`,size:`x-small`,color:`error`,density:`compact`,onClick:t=>G(e)},{default:o(()=>[...a[7]||=[d(` 删除 `,-1)]]),_:1},8,[`onClick`])]),"no-data":o(()=>[...a[8]||=[p(`div`,{class:`text-center text-medium-emphasis py-6`},`暂无数据`,-1)]]),_:1},8,[`items`,`headers`,`items-length`,`loading`,`page`])]),_:1}),g(E,{modelValue:z.value,"onUpdate:modelValue":a[4]||=e=>z.value=e,"max-width":`400`},{default:o(()=>[g(C,{border:``},{default:o(()=>[g(S,null,{default:o(()=>[...a[9]||=[d(`确认删除`,-1)]]),_:1}),g(x,null,{default:o(()=>[...a[10]||=[d(`确定要删除此重试任务吗?`,-1)]]),_:1}),g(b,null,{default:o(()=>[g(l),g(r,{variant:`text`,onClick:a[3]||=e=>z.value=!1},{default:o(()=>[...a[11]||=[d(`取消`,-1)]]),_:1}),g(r,{color:`error`,variant:`flat`,onClick:K},{default:o(()=>[...a[12]||=[d(`删除`,-1)]]),_:1})]),_:1})]),_:1})]),_:1},8,[`modelValue`])]),_:1}))}});export{N as default};
|
|
||||||
@@ -0,0 +1 @@
|
|||||||
|
import{n as e,t}from"./useSnackbar-BN7WL7jT.js";import{Cr as n,Fr as r,P as i,Sr as a,Ut as o,Wr as s,Zr as c,Zt as l,_ as u,_r as d,gr as f,ri as p,si as m,vr as h,xr as g,y as _}from"./index-mgwiCK5j.js";import{t as v}from"./usePageActivateRefresh-B3aZWt5v.js";import{n as y}from"./dataTable-esDY4cOk.js";import{a as b,n as x,r as S,t as C}from"./VCard-B9mXbrEC.js";import{t as w}from"./VSelect-7ey6zQ_i.js";import{t as T}from"./VDataTableServer-CKraLARR.js";import{t as E}from"./VDialog-BX1EKYmy.js";import{t as D}from"./usePageAutoRefresh-SVpijj4X.js";var O={class:`font-weight-medium text-truncate d-inline-block`,style:{"max-width":`240px`}},k={class:`text-medium-emphasis`},A={class:`text-medium-emphasis`},j={class:`text-caption text-medium-emphasis`},M={class:`text-caption text-medium-emphasis`},N=n({name:`RetriesPage`,__name:`RetriesPage`,setup(n){let N=t(),P=c(!1),F=c([]),I=c(0),L=c(1),R=c(null),z=c(!1),B=c(null),V=[{label:`待重试`,value:`pending`},{label:`重试中`,value:`retrying`},{label:`成功`,value:`success`},{label:`失败`,value:`failed`}],H=y([{title:`状态`,key:`status`,width:100},{title:`任务`,key:`operation`},{title:`服务器`,key:`server_name`},{title:`次数`,key:`retry_count`,width:100},{title:`下次重试`,key:`next_retry_at`,width:140},{title:`创建时间`,key:`created_at`,width:160},{title:``,key:`actions`,width:120,align:`end`}]);async function U(e=!1){e||(P.value=!0);try{let e=(await l.getList(`/retries/`,{limit:200})).items||[];R.value&&(e=e.filter(e=>e.status===R.value)),I.value=e.length;let t=(L.value-1)*20;F.value=e.slice(t,t+20)}catch(t){e||(F.value=[],I.value=0,N(t instanceof Error?t.message:`加载重试队列失败`,`error`))}finally{e||(P.value=!1)}}async function W(e){try{await l.post(`/retries/${e.id}/retry`),U(),N(`重试已触发`)}catch(e){N(e.message||`操作失败`,`error`)}}function G(e){B.value=e.id,z.value=!0}async function K(){if(B.value)try{await l.delete(`/retries/${B.value}`),z.value=!1,U(),N(`已删除`)}catch(e){N(e.message||`删除失败`,`error`)}}function q(e){return e===`success`?`success`:e===`failed`?`error`:e===`retrying`?`warning`:`info`}function J(e){return e===`pending`?`待重试`:e===`retrying`?`重试中`:e===`success`?`成功`:e===`failed`?`失败`:e}function Y(e){return e.source_path&&e.target_path?`${e.source_path} → ${e.target_path}`:e.source_path||e.target_path||`文件推送`}return D(()=>U(!0),15e3),v(e=>U(e)),(t,n)=>(r(),d(e,{fluid:``,class:`pa-6`},{default:s(()=>[a(C,{elevation:`0`,border:``,rounded:`lg`},{default:s(()=>[a(S,{class:`d-flex align-center text-h6`},{default:s(()=>[n[5]||=g(` 重试队列 `,-1),a(u),a(w,{modelValue:R.value,"onUpdate:modelValue":[n[0]||=e=>R.value=e,n[1]||=e=>{L.value=1,U()}],items:V,"item-title":`label`,"item-value":`value`,label:`状态筛选`,variant:`outlined`,density:`compact`,"hide-details":``,style:{"max-width":`160px`},clearable:``},null,8,[`modelValue`])]),_:1}),a(T,{items:F.value,headers:p(H),"items-length":I.value,loading:P.value,page:L.value,"items-per-page":20,hover:``,density:`comfortable`,"onUpdate:page":n[2]||=e=>{L.value=e,U()}},{"item.status":s(({item:e})=>[a(_,{color:q(e.status),size:`x-small`,variant:`tonal`,label:``,border:`sm`},{default:s(()=>[g(m(J(e.status)),1)]),_:2},1032,[`color`])]),"item.operation":s(({item:e})=>[f(`span`,O,m(Y(e)),1)]),"item.server_name":s(({item:e})=>[f(`span`,k,m(e.server_name||`—`),1)]),"item.retry_count":s(({item:e})=>[f(`span`,A,m(e.retry_count||0)+` / `+m(e.max_retries||3),1)]),"item.next_retry_at":s(({item:e})=>[f(`span`,j,m(p(o)(e.next_retry_at)),1)]),"item.created_at":s(({item:e})=>[f(`span`,M,m(p(o)(e.created_at)),1)]),"item.actions":s(({item:e})=>[e.status===`pending`||e.status===`failed`?(r(),d(i,{key:0,variant:`text`,size:`x-small`,color:`primary`,density:`compact`,onClick:t=>W(e)},{default:s(()=>[...n[6]||=[g(` 重试 `,-1)]]),_:1},8,[`onClick`])):h(``,!0),a(i,{variant:`text`,size:`x-small`,color:`error`,density:`compact`,onClick:t=>G(e)},{default:s(()=>[...n[7]||=[g(` 删除 `,-1)]]),_:1},8,[`onClick`])]),"no-data":s(()=>[...n[8]||=[f(`div`,{class:`text-center text-medium-emphasis py-6`},`暂无数据`,-1)]]),_:1},8,[`items`,`headers`,`items-length`,`loading`,`page`])]),_:1}),a(E,{modelValue:z.value,"onUpdate:modelValue":n[4]||=e=>z.value=e,"max-width":`400`},{default:s(()=>[a(C,{border:``},{default:s(()=>[a(S,null,{default:s(()=>[...n[9]||=[g(`确认删除`,-1)]]),_:1}),a(x,null,{default:s(()=>[...n[10]||=[g(`确定要删除此重试任务吗?`,-1)]]),_:1}),a(b,null,{default:s(()=>[a(u),a(i,{variant:`text`,onClick:n[3]||=e=>z.value=!1},{default:s(()=>[...n[11]||=[g(`取消`,-1)]]),_:1}),a(i,{color:`error`,variant:`flat`,onClick:K},{default:s(()=>[...n[12]||=[g(`删除`,-1)]]),_:1})]),_:1})]),_:1})]),_:1},8,[`modelValue`])]),_:1}))}});export{N as default};
|
||||||
@@ -0,0 +1 @@
|
|||||||
|
.cycle-type-col[data-v-88b715a3]{flex:none}.cycle-type-select[data-v-88b715a3]{width:7.5rem;max-width:7.5rem}.cycle-type-fixed[data-v-88b715a3]{white-space:nowrap;align-items:center;height:40px;padding:0 4px;font-weight:500;display:inline-flex}.time-col[data-v-88b715a3]{flex:none;width:4.5rem;max-width:4.5rem}.time-col-wide[data-v-88b715a3]{flex:none;width:5.5rem;max-width:5.5rem}
|
||||||
File diff suppressed because one or more lines are too long
@@ -1 +0,0 @@
|
|||||||
.cycle-type-col[data-v-f1c7b8d2]{flex:none}.cycle-type-select[data-v-f1c7b8d2]{width:7.5rem;max-width:7.5rem}.cycle-type-fixed[data-v-f1c7b8d2]{white-space:nowrap;align-items:center;height:40px;padding:0 4px;font-weight:500;display:inline-flex}.time-col[data-v-f1c7b8d2]{flex:none;width:4.5rem;max-width:4.5rem}.time-col-wide[data-v-f1c7b8d2]{flex:none;width:5.5rem;max-width:5.5rem}
|
|
||||||
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
@@ -1 +0,0 @@
|
|||||||
import{n as e,t}from"./VRow-Jrv7cE2K.js";import{Br as n,Ir as r,P as i,Pr as a,Sr as o,Tr as s,Ur as c,X as l,Xr as u,Y as d,_r as f,ai as p,br as m,dr as h,gr as g,hr as _,mr as v,ni as y,oi as b,vr as x,xr as S,y as C}from"./index-Bplw5zZe.js";import{t as w}from"./VCard-DwK3U69w.js";import{t as T}from"./VCheckbox-BnLUWPSt.js";import{t as E}from"./VTextField-DVnxh9lX.js";import{o as D}from"./labels-C-A2d08W.js";import{t as O}from"./_plugin-vue_export-helper-BDNMzG2s.js";import{t as k}from"./useServerCategories-D9bG0IAJ.js";var A={class:`server-category-picker`},j={class:`d-flex align-center flex-wrap ga-2 mb-2`},M={key:0,class:`text-center text-medium-emphasis py-4`},N={class:`d-flex align-center px-1 mb-1`},P={class:`text-caption text-medium-emphasis ml-1`},F={class:`d-flex align-center ga-2`},I={class:`text-body-2 font-weight-medium text-truncate`},L={class:`text-caption text-medium-emphasis text-truncate`},R=O(o({__name:`ServerCategoryPicker`,props:s({servers:{},loading:{type:Boolean,default:!1},maxHeight:{default:`280px`}},{modelValue:{default:()=>[]},modelModifiers:{}}),emits:[`update:modelValue`],setup(o){let s=n(o,`modelValue`),O=o,R=u(``),z=v(()=>new Set(s.value)),B=v(()=>{let e=R.value.trim().toLowerCase();return e?O.servers.filter(t=>t.name.toLowerCase().includes(e)||(t.domain||``).toLowerCase().includes(e)||(t.category||``).toLowerCase().includes(e)):O.servers}),V=v(()=>{let e={};for(let t of B.value){let n=t.category?.trim()||`uncategorized`;e[n]||(e[n]=[]),e[n].push(t)}return Object.entries(e).map(([e,t])=>({category:e,label:k(e),servers:[...t].sort((e,t)=>e.name.localeCompare(t.name,`zh`))})).sort((e,t)=>e.category===`uncategorized`?1:t.category===`uncategorized`?-1:e.label.localeCompare(t.label,`zh`))}),H=v(()=>{let e=B.value;return e.length>0&&e.every(e=>z.value.has(e.id))});function U(e){return e.servers.filter(e=>z.value.has(e.id)).length}function W(e){let t=V.value.find(t=>t.category===e);return!t||t.servers.length===0?!1:t.servers.every(e=>z.value.has(e.id))}function G(e){s.value=[...e]}function K(e){let t=new Set(s.value);t.has(e)?t.delete(e):t.add(e),G(t)}function q(e){let t=V.value.find(t=>t.category===e);if(!t)return;let n=new Set(s.value),r=t.servers.every(e=>n.has(e.id));for(let e of t.servers)r?n.delete(e.id):n.add(e.id);G(n)}function J(){let e=B.value,t=new Set(s.value),n=e.length>0&&e.every(e=>t.has(e.id));for(let r of e)n?t.delete(r.id):t.add(r.id);G(t)}return(n,u)=>(a(),x(`div`,A,[_(`div`,j,[S(T,{"model-value":H.value,label:`全选`,density:`compact`,"hide-details":``,"onUpdate:modelValue":J},null,8,[`model-value`]),S(E,{modelValue:R.value,"onUpdate:modelValue":u[0]||=e=>R.value=e,"prepend-inner-icon":`mdi-magnify`,label:`搜索服务器`,density:`compact`,"hide-details":``,variant:`outlined`,rounded:``,style:{"max-width":`220px`},clearable:``},null,8,[`modelValue`]),s.value.length>0?(a(),g(C,{key:0,size:`small`,color:`primary`,variant:`tonal`,label:``},{default:c(()=>[m(` 已选 `+b(s.value.length)+` 台 `,1)]),_:1})):f(``,!0),o.loading?(a(),g(d,{key:1,indeterminate:``,size:`18`,width:`2`})):f(``,!0)]),_(`div`,{class:`picker-scroll`,style:p({maxHeight:o.maxHeight})},[!o.loading&&V.value.length===0?(a(),x(`div`,M,` 暂无服务器 `)):f(``,!0),(a(!0),x(h,null,r(V.value,n=>(a(),x(`div`,{key:n.category,class:`mb-3`},[_(`div`,N,[S(i,{size:`x-small`,variant:`text`,color:W(n.category)?`primary`:`default`,onClick:e=>q(n.category)},{default:c(()=>[S(l,{size:`16`,class:`mr-1`},{default:c(()=>[m(b(W(n.category)?`mdi-checkbox-marked`:`mdi-checkbox-blank-outline`),1)]),_:2},1024),m(` `+b(n.label),1)]),_:2},1032,[`color`,`onClick`]),_(`span`,P,` (`+b(U(n))+`/`+b(n.servers.length)+`) `,1)]),S(t,{dense:``},{default:c(()=>[(a(!0),x(h,null,r(n.servers,t=>(a(),g(e,{key:t.id,cols:`12`,sm:`6`},{default:c(()=>[S(w,{color:z.value.has(t.id)?`primary`:void 0,variant:z.value.has(t.id)?`tonal`:`outlined`,rounded:`lg`,class:`pa-2 cursor-pointer`,onClick:e=>K(t.id)},{default:c(()=>[_(`div`,F,[S(l,{color:y(D)(t.is_online),size:`10`},{default:c(()=>[...u[1]||=[m(`mdi-circle`,-1)]]),_:1},8,[`color`]),_(`span`,I,b(t.name),1)]),_(`div`,L,b(t.domain),1)]),_:2},1032,[`color`,`variant`,`onClick`])]),_:2},1024))),128))]),_:2},1024)]))),128))],4)]))}}),[[`__scopeId`,`data-v-4d1df917`]]);export{R as t};
|
|
||||||
@@ -0,0 +1 @@
|
|||||||
|
import{n as e,t}from"./VRow-DQLoaeks.js";import{Cr as n,Er as r,Fr as i,Lr as a,P as o,Sr as s,Vr as c,Wr as l,X as u,Y as d,Zr as f,_r as p,fr as m,gr as h,hr as g,oi as _,ri as v,si as y,vr as b,xr as x,y as S,yr as C}from"./index-mgwiCK5j.js";import{t as w}from"./VCard-B9mXbrEC.js";import{t as T}from"./VCheckbox-THpWO517.js";import{t as E}from"./VTextField-C7hGBY30.js";import{o as D}from"./labels-C-A2d08W.js";import{t as O}from"./_plugin-vue_export-helper-BDNMzG2s.js";import{t as k}from"./useServerCategories-Ds73jd-d.js";var A={class:`server-category-picker`},j={class:`d-flex align-center flex-wrap ga-2 mb-2`},M={key:0,class:`text-center text-medium-emphasis py-4`},N={class:`d-flex align-center px-1 mb-1`},P={class:`text-caption text-medium-emphasis ml-1`},F={class:`d-flex align-center ga-2`},I={class:`text-body-2 font-weight-medium text-truncate`},L={class:`text-caption text-medium-emphasis text-truncate`},R=O(n({__name:`ServerCategoryPicker`,props:r({servers:{},loading:{type:Boolean,default:!1},maxHeight:{default:`280px`}},{modelValue:{default:()=>[]},modelModifiers:{}}),emits:[`update:modelValue`],setup(n){let r=c(n,`modelValue`),O=n,R=f(``),z=g(()=>new Set(r.value)),B=g(()=>{let e=R.value.trim().toLowerCase();return e?O.servers.filter(t=>t.name.toLowerCase().includes(e)||(t.domain||``).toLowerCase().includes(e)||(t.category||``).toLowerCase().includes(e)):O.servers}),V=g(()=>{let e={};for(let t of B.value){let n=t.category?.trim()||`uncategorized`;e[n]||(e[n]=[]),e[n].push(t)}return Object.entries(e).map(([e,t])=>({category:e,label:k(e),servers:[...t].sort((e,t)=>e.name.localeCompare(t.name,`zh`))})).sort((e,t)=>e.category===`uncategorized`?1:t.category===`uncategorized`?-1:e.label.localeCompare(t.label,`zh`))}),H=g(()=>{let e=B.value;return e.length>0&&e.every(e=>z.value.has(e.id))});function U(e){return e.servers.filter(e=>z.value.has(e.id)).length}function W(e){let t=V.value.find(t=>t.category===e);return!t||t.servers.length===0?!1:t.servers.every(e=>z.value.has(e.id))}function G(e){r.value=[...e]}function K(e){let t=new Set(r.value);t.has(e)?t.delete(e):t.add(e),G(t)}function q(e){let t=V.value.find(t=>t.category===e);if(!t)return;let n=new Set(r.value),i=t.servers.every(e=>n.has(e.id));for(let e of t.servers)i?n.delete(e.id):n.add(e.id);G(n)}function J(){let e=B.value,t=new Set(r.value),n=e.length>0&&e.every(e=>t.has(e.id));for(let r of e)n?t.delete(r.id):t.add(r.id);G(t)}return(c,f)=>(i(),C(`div`,A,[h(`div`,j,[s(T,{"model-value":H.value,label:`全选`,density:`compact`,"hide-details":``,"onUpdate:modelValue":J},null,8,[`model-value`]),s(E,{modelValue:R.value,"onUpdate:modelValue":f[0]||=e=>R.value=e,"prepend-inner-icon":`mdi-magnify`,label:`搜索服务器`,density:`compact`,"hide-details":``,variant:`outlined`,rounded:``,style:{"max-width":`220px`},clearable:``},null,8,[`modelValue`]),r.value.length>0?(i(),p(S,{key:0,size:`small`,color:`primary`,variant:`tonal`,label:``},{default:l(()=>[x(` 已选 `+y(r.value.length)+` 台 `,1)]),_:1})):b(``,!0),n.loading?(i(),p(d,{key:1,indeterminate:``,size:`18`,width:`2`})):b(``,!0)]),h(`div`,{class:`picker-scroll`,style:_({maxHeight:n.maxHeight})},[!n.loading&&V.value.length===0?(i(),C(`div`,M,` 暂无服务器 `)):b(``,!0),(i(!0),C(m,null,a(V.value,n=>(i(),C(`div`,{key:n.category,class:`mb-3`},[h(`div`,N,[s(o,{size:`x-small`,variant:`text`,color:W(n.category)?`primary`:`default`,onClick:e=>q(n.category)},{default:l(()=>[s(u,{size:`16`,class:`mr-1`},{default:l(()=>[x(y(W(n.category)?`mdi-checkbox-marked`:`mdi-checkbox-blank-outline`),1)]),_:2},1024),x(` `+y(n.label),1)]),_:2},1032,[`color`,`onClick`]),h(`span`,P,` (`+y(U(n))+`/`+y(n.servers.length)+`) `,1)]),s(t,{dense:``},{default:l(()=>[(i(!0),C(m,null,a(n.servers,t=>(i(),p(e,{key:t.id,cols:`12`,sm:`6`},{default:l(()=>[s(w,{color:z.value.has(t.id)?`primary`:void 0,variant:z.value.has(t.id)?`tonal`:`outlined`,rounded:`lg`,class:`pa-2 cursor-pointer`,onClick:e=>K(t.id)},{default:l(()=>[h(`div`,F,[s(u,{color:v(D)(t.is_online),size:`10`},{default:l(()=>[...f[1]||=[x(`mdi-circle`,-1)]]),_:1},8,[`color`]),h(`span`,I,y(t.name),1)]),h(`div`,L,y(t.domain),1)]),_:2},1032,[`color`,`variant`,`onClick`])]),_:2},1024))),128))]),_:2},1024)]))),128))],4)]))}}),[[`__scopeId`,`data-v-4d1df917`]]);export{R as t};
|
||||||
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
@@ -1 +0,0 @@
|
|||||||
import{Er as e,Qn as t,Rn as n,Xr as r,pn as i,r as a,un as o,wn as s,xr as c,yn as l,zr as u}from"./index-Bplw5zZe.js";import{d,f}from"./VSelect-C2IkZQ4Y.js";import{l as p,m,u as h}from"./VTextField-DVnxh9lX.js";var g=s({...t(h(),[`direction`]),...t(f(),[`inline`])},`VCheckbox`),_=l()({name:`VCheckbox`,inheritAttrs:!1,props:g(),emits:{"update:modelValue":e=>!0,"update:focused":e=>!0},setup(t,{attrs:s,slots:l}){let f=o(t,`modelValue`),{isFocused:h,focus:g,blur:_}=m(t),v=r(),y=u();return i(()=>{let[r,i]=n(s),a=p.filterProps(t),o=d.filterProps(t);return c(p,e({ref:v,class:[`v-checkbox`,t.class]},r,a,{modelValue:f.value,"onUpdate:modelValue":e=>f.value=e,id:t.id||`checkbox-${y}`,focused:h.value,style:t.style}),{...l,default:({id:t,messagesId:n,isDisabled:r,isReadonly:a,isValid:s})=>c(d,e(o,{id:t.value,"aria-describedby":n.value,disabled:r.value,readonly:a.value},i,{error:s.value===!1,modelValue:f.value,"onUpdate:modelValue":e=>f.value=e,onFocus:g,onBlur:_}),l)})}),a({},v)}});export{_ as t};
|
|
||||||
@@ -0,0 +1 @@
|
|||||||
|
import{$n as e,Br as t,Dr as n,Sr as r,Tn as i,Zr as a,bn as o,dn as s,mn as c,r as l,zn as u}from"./index-mgwiCK5j.js";import{d,f}from"./VSelect-7ey6zQ_i.js";import{l as p,m,u as h}from"./VTextField-C7hGBY30.js";var g=i({...e(h(),[`direction`]),...e(f(),[`inline`])},`VCheckbox`),_=o()({name:`VCheckbox`,inheritAttrs:!1,props:g(),emits:{"update:modelValue":e=>!0,"update:focused":e=>!0},setup(e,{attrs:i,slots:o}){let f=s(e,`modelValue`),{isFocused:h,focus:g,blur:_}=m(e),v=a(),y=t();return c(()=>{let[t,a]=u(i),s=p.filterProps(e),c=d.filterProps(e);return r(p,n({ref:v,class:[`v-checkbox`,e.class]},t,s,{modelValue:f.value,"onUpdate:modelValue":e=>f.value=e,id:e.id||`checkbox-${y}`,focused:h.value,style:e.style}),{...o,default:({id:e,messagesId:t,isDisabled:i,isReadonly:s,isValid:l})=>r(d,n(c,{id:e.value,"aria-describedby":t.value,disabled:i.value,readonly:s.value},a,{error:l.value===!1,modelValue:f.value,"onUpdate:modelValue":e=>f.value=e,onFocus:g,onBlur:_}),o)})}),l({},v)}});export{_ as t};
|
||||||
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
@@ -0,0 +1 @@
|
|||||||
|
import{_ as e,a as t,b as n,c as r,d as i,f as a,g as o,h as s,i as c,l,m as ee,n as u,o as d,p as f,r as p,s as m,u as h,v as te,y as g}from"./VDataTable-DNMnCp-Y.js";import{$n as _,Dr as v,Ir as y,Sr as b,Tn as x,bn as S,ei as C,fr as w,gr as T,hr as E,mn as ne,ti as D,v as O,xn as k}from"./index-mgwiCK5j.js";var A=x({itemsLength:{type:[Number,String],required:!0},...g(),...u(),...e()},`VDataTableServer`),j=S()({name:`VDataTableServer`,props:A(),emits:{"update:modelValue":e=>!0,"update:page":e=>!0,"update:itemsPerPage":e=>!0,"update:sortBy":e=>!0,"update:options":e=>!0,"update:expanded":e=>!0,"update:groupBy":e=>!0},setup(e,{attrs:u,slots:g}){let{groupBy:x}=r(e),{initialSortOrder:S,sortBy:A,multiSort:j,mustSort:M}=a(e),{page:N,itemsPerPage:P}=te(e),{disableSort:F}=D(e),I=E(()=>parseInt(e.itemsLength,10)),{columns:L,headers:R}=s(e,{groupBy:x,showSelect:C(()=>e.showSelect),showExpand:C(()=>e.showExpand)}),{items:z}=c(e,L),{toggleSort:B}=f({initialSortOrder:S,sortBy:A,multiSort:j,mustSort:M,page:N}),{opened:V,isGroupOpen:H,toggleGroup:re,extractRows:U}=l({groupBy:x,sortBy:A,disableSort:F}),{pageCount:W,setItemsPerPage:G,prevPage:K,nextPage:q,setPage:J}=n({page:N,itemsPerPage:P,itemsLength:I}),{flatItems:Y}=h(z,x,V,()=>!!g[`group-summary`]),{isSelected:X,select:ie,selectAll:ae,toggleSelect:oe,someSelected:se,allSelected:ce}=ee(e,{allItems:z,currentPage:z}),{isExpanded:Z,toggleExpand:le}=m(e),Q=E(()=>U(z.value));p({page:N,itemsPerPage:P,sortBy:A,groupBy:x,search:C(()=>e.search)}),y(`v-data-table`,{toggleSort:B,sortBy:A}),k({VDataTableRows:{hideNoData:C(()=>e.hideNoData),noDataText:C(()=>e.noDataText),loading:C(()=>e.loading),loadingText:C(()=>e.loadingText)}});let $=E(()=>({page:N.value,itemsPerPage:P.value,sortBy:A.value,pageCount:W.value,toggleSort:B,setItemsPerPage:G,prevPage:K,nextPage:q,setPage:J,someSelected:se.value,allSelected:ce.value,isSelected:X,select:ie,selectAll:ae,toggleSelect:oe,isExpanded:Z,toggleExpand:le,isGroupOpen:H,toggleGroup:re,items:Q.value.map(e=>e.raw),internalItems:Q.value,groupedItems:Y.value,columns:L.value,headers:R.value}));ne(()=>{let n=o.filterProps(e),r=i.filterProps(_(e,[`multiSort`])),a=d.filterProps(e),s=t.filterProps(e);return b(t,v({class:[`v-data-table`,{"v-data-table--loading":e.loading},e.class],style:e.style},s,{fixedHeader:e.fixedHeader||e.sticky}),{top:()=>g.top?.($.value),default:()=>g.default?g.default($.value):T(w,null,[g.colgroup?.($.value),!e.hideDefaultHeader&&T(`thead`,{key:`thead`,class:`v-data-table__thead`,role:`rowgroup`},[b(i,v(r,{multiSort:!!e.multiSort}),g)]),g.thead?.($.value),!e.hideDefaultBody&&T(`tbody`,{class:`v-data-table__tbody`,role:`rowgroup`},[g[`body.prepend`]?.($.value),g.body?g.body($.value):b(d,v(u,a,{items:Y.value}),g),g[`body.append`]?.($.value)]),g.tbody?.($.value),g.tfoot?.($.value)]),bottom:()=>g.bottom?g.bottom($.value):!e.hideDefaultFooter&&T(w,null,[b(O,null,null),b(o,n,{prepend:g[`footer.prepend`]})])})})}});export{j as t};
|
||||||
@@ -1 +0,0 @@
|
|||||||
import{_ as e,a as t,b as n,c as r,d as i,f as a,g as o,h as s,i as ee,l as c,m as l,n as u,o as d,p as f,r as te,s as p,u as m,v as h,y as g}from"./VDataTable-PKQbaP3_.js";import{$r as _,Er as v,Fr as y,Qn as b,bn as x,dr as S,ei as C,hr as w,mr as T,pn as E,v as ne,wn as D,xr as O,yn as k}from"./index-Bplw5zZe.js";var A=D({itemsLength:{type:[Number,String],required:!0},...g(),...u(),...e()},`VDataTableServer`),j=k()({name:`VDataTableServer`,props:A(),emits:{"update:modelValue":e=>!0,"update:page":e=>!0,"update:itemsPerPage":e=>!0,"update:sortBy":e=>!0,"update:options":e=>!0,"update:expanded":e=>!0,"update:groupBy":e=>!0},setup(e,{attrs:u,slots:g}){let{groupBy:D}=r(e),{initialSortOrder:k,sortBy:A,multiSort:j,mustSort:M}=a(e),{page:N,itemsPerPage:P}=h(e),{disableSort:F}=C(e),I=T(()=>parseInt(e.itemsLength,10)),{columns:L,headers:R}=s(e,{groupBy:D,showSelect:_(()=>e.showSelect),showExpand:_(()=>e.showExpand)}),{items:z}=ee(e,L),{toggleSort:B}=f({initialSortOrder:k,sortBy:A,multiSort:j,mustSort:M,page:N}),{opened:V,isGroupOpen:H,toggleGroup:re,extractRows:U}=c({groupBy:D,sortBy:A,disableSort:F}),{pageCount:W,setItemsPerPage:G,prevPage:K,nextPage:q,setPage:J}=n({page:N,itemsPerPage:P,itemsLength:I}),{flatItems:Y}=m(z,D,V,()=>!!g[`group-summary`]),{isSelected:X,select:ie,selectAll:Z,toggleSelect:ae,someSelected:oe,allSelected:se}=l(e,{allItems:z,currentPage:z}),{isExpanded:ce,toggleExpand:le}=p(e),Q=T(()=>U(z.value));te({page:N,itemsPerPage:P,sortBy:A,groupBy:D,search:_(()=>e.search)}),y(`v-data-table`,{toggleSort:B,sortBy:A}),x({VDataTableRows:{hideNoData:_(()=>e.hideNoData),noDataText:_(()=>e.noDataText),loading:_(()=>e.loading),loadingText:_(()=>e.loadingText)}});let $=T(()=>({page:N.value,itemsPerPage:P.value,sortBy:A.value,pageCount:W.value,toggleSort:B,setItemsPerPage:G,prevPage:K,nextPage:q,setPage:J,someSelected:oe.value,allSelected:se.value,isSelected:X,select:ie,selectAll:Z,toggleSelect:ae,isExpanded:ce,toggleExpand:le,isGroupOpen:H,toggleGroup:re,items:Q.value.map(e=>e.raw),internalItems:Q.value,groupedItems:Y.value,columns:L.value,headers:R.value}));E(()=>{let n=o.filterProps(e),r=i.filterProps(b(e,[`multiSort`])),a=d.filterProps(e),s=t.filterProps(e);return O(t,v({class:[`v-data-table`,{"v-data-table--loading":e.loading},e.class],style:e.style},s,{fixedHeader:e.fixedHeader||e.sticky}),{top:()=>g.top?.($.value),default:()=>g.default?g.default($.value):w(S,null,[g.colgroup?.($.value),!e.hideDefaultHeader&&w(`thead`,{key:`thead`,class:`v-data-table__thead`,role:`rowgroup`},[O(i,v(r,{multiSort:!!e.multiSort}),g)]),g.thead?.($.value),!e.hideDefaultBody&&w(`tbody`,{class:`v-data-table__tbody`,role:`rowgroup`},[g[`body.prepend`]?.($.value),g.body?g.body($.value):O(d,v(u,a,{items:Y.value}),g),g[`body.append`]?.($.value)]),g.tbody?.($.value),g.tfoot?.($.value)]),bottom:()=>g.bottom?g.bottom($.value):!e.hideDefaultFooter&&w(S,null,[O(ne,null,null),O(o,n,{prepend:g[`footer.prepend`]})])})})}});export{j as t};
|
|
||||||
@@ -0,0 +1 @@
|
|||||||
|
import{$n as e,Dr as t,Hr as n,M as r,Or as i,Q as a,Sr as o,Tn as s,Zr as c,a as l,bn as u,dn as d,i as f,mn as p,o as m,r as h}from"./index-mgwiCK5j.js";var g=s({fullscreen:Boolean,scrollable:Boolean,...e(l({captureFocus:!0,origin:`center center`,scrollStrategy:`block`,transition:{component:r},zIndex:2400,retainFocus:!0}),[`disableInitialFocus`])},`VDialog`),_=u()({name:`VDialog`,props:g(),emits:{"update:modelValue":e=>!0,afterEnter:()=>!0,afterLeave:()=>!0},setup(e,{emit:r,slots:s}){let l=d(e,`modelValue`),{scopeId:u}=m(),g=c();function _(){r(`afterEnter`),(e.scrim||e.retainFocus)&&g.value?.contentEl&&!g.value.contentEl.contains(document.activeElement)&&g.value.contentEl.focus({preventScroll:!0})}function v(){r(`afterLeave`)}return n(l,async e=>{e||(await i(),g.value.activatorEl?.focus({preventScroll:!0}))}),p(()=>{let n=f.filterProps(e),r=t({"aria-haspopup":`dialog`},e.activatorProps),i=t({tabindex:-1},e.contentProps);return o(f,t({ref:g,class:[`v-dialog`,{"v-dialog--fullscreen":e.fullscreen,"v-dialog--scrollable":e.scrollable},e.class],style:e.style},n,{modelValue:l.value,"onUpdate:modelValue":e=>l.value=e,"aria-modal":`true`,activatorProps:r,contentProps:i,height:e.fullscreen?void 0:e.height,width:e.fullscreen?void 0:e.width,maxHeight:e.fullscreen?void 0:e.maxHeight,maxWidth:e.fullscreen?void 0:e.maxWidth,role:`dialog`,onAfterEnter:_,onAfterLeave:v},u),{activator:s.activator,default:(...e)=>o(a,{root:`VDialog`},{default:()=>[s.default?.(...e)]})})}),h({},g)}});export{_ as t};
|
||||||
@@ -1 +0,0 @@
|
|||||||
import{Dr as e,Er as t,M as n,Q as r,Qn as i,Vr as a,Xr as o,a as s,i as c,o as l,pn as u,r as d,un as f,wn as p,xr as m,yn as h}from"./index-Bplw5zZe.js";var g=p({fullscreen:Boolean,scrollable:Boolean,...i(s({captureFocus:!0,origin:`center center`,scrollStrategy:`block`,transition:{component:n},zIndex:2400,retainFocus:!0}),[`disableInitialFocus`])},`VDialog`),_=h()({name:`VDialog`,props:g(),emits:{"update:modelValue":e=>!0,afterEnter:()=>!0,afterLeave:()=>!0},setup(n,{emit:i,slots:s}){let p=f(n,`modelValue`),{scopeId:h}=l(),g=o();function _(){i(`afterEnter`),(n.scrim||n.retainFocus)&&g.value?.contentEl&&!g.value.contentEl.contains(document.activeElement)&&g.value.contentEl.focus({preventScroll:!0})}function v(){i(`afterLeave`)}return a(p,async t=>{t||(await e(),g.value.activatorEl?.focus({preventScroll:!0}))}),u(()=>{let e=c.filterProps(n),i=t({"aria-haspopup":`dialog`},n.activatorProps),a=t({tabindex:-1},n.contentProps);return m(c,t({ref:g,class:[`v-dialog`,{"v-dialog--fullscreen":n.fullscreen,"v-dialog--scrollable":n.scrollable},n.class],style:n.style},e,{modelValue:p.value,"onUpdate:modelValue":e=>p.value=e,"aria-modal":`true`,activatorProps:i,contentProps:a,height:n.fullscreen?void 0:n.height,width:n.fullscreen?void 0:n.width,maxHeight:n.fullscreen?void 0:n.maxHeight,maxWidth:n.fullscreen?void 0:n.maxWidth,role:`dialog`,onAfterEnter:_,onAfterLeave:v},h),{activator:s.activator,default:(...e)=>m(r,{root:`VDialog`},{default:()=>[s.default?.(...e)]})})}),d({},g)}});export{_ as t};
|
|
||||||
@@ -1 +0,0 @@
|
|||||||
import{$n as e,$r as t,Cn as n,Fr as r,I as i,J as a,O as o,Q as s,Wr as c,X as l,ai as u,bn as d,c as f,cr as p,dt as m,et as h,fn as g,ft as _,hr as v,ii as y,in as b,lt as x,mr as S,nt as C,pn as w,pt as T,q as E,rn as D,rt as O,s as k,st as A,tt as j,ut as M,wn as N,wr as P,xr as F,yn as I}from"./index-Bplw5zZe.js";var L=Symbol.for(`vuetify:v-expansion-panel`),R=N({...n(),...k()},`VExpansionPanelText`),z=I()({name:`VExpansionPanelText`,props:R(),setup(e,{slots:t}){let n=P(L);if(!n)throw Error(`[Vuetify] v-expansion-panel-text needs to be placed inside v-expansion-panel`);let{hasContent:r,onAfterLeave:i}=f(e,n.isSelected);return w(()=>F(o,{onAfterLeave:i},{default:()=>[c(v(`div`,{class:y([`v-expansion-panel-text`,e.class]),style:u(e.style)},[t.default&&r.value&&v(`div`,{class:`v-expansion-panel-text__wrapper`},[t.default?.()])]),[[p,n.isSelected.value]])]})),{}}}),B=N({color:String,expandIcon:{type:g,default:`$expand`},collapseIcon:{type:g,default:`$collapse`},hideActions:Boolean,focusable:Boolean,static:Boolean,ripple:{type:[Boolean,Object],default:!1},readonly:Boolean,...n(),...E()},`VExpansionPanelTitle`),V=I()({name:`VExpansionPanelTitle`,directives:{vRipple:i},props:B(),setup(e,{slots:n}){let r=P(L);if(!r)throw Error(`[Vuetify] v-expansion-panel-title needs to be placed inside v-expansion-panel`);let{backgroundColorClasses:o,backgroundColorStyles:d}=A(()=>e.color),{dimensionStyles:f}=a(e),p=S(()=>({collapseIcon:e.collapseIcon,disabled:r.disabled.value,expanded:r.isSelected.value,expandIcon:e.expandIcon,readonly:e.readonly})),m=t(()=>r.isSelected.value?e.collapseIcon:e.expandIcon);return w(()=>c(v(`button`,{class:y([`v-expansion-panel-title`,{"v-expansion-panel-title--active":r.isSelected.value,"v-expansion-panel-title--focusable":e.focusable,"v-expansion-panel-title--static":e.static},o.value,e.class]),style:u([d.value,f.value,e.style]),type:`button`,tabindex:r.disabled.value?-1:void 0,disabled:r.disabled.value,"aria-expanded":r.isSelected.value,onClick:e.readonly?void 0:r.toggle},[v(`span`,{class:`v-expansion-panel-title__overlay`},null),n.default?.(p.value),!e.hideActions&&F(s,{defaults:{VIcon:{icon:m.value}}},{default:()=>[v(`span`,{class:`v-expansion-panel-title__icon`},[n.actions?.(p.value)??F(l,null,null)])]})]),[[i,e.ripple]])),{}}}),H=N({title:String,text:String,bgColor:String,..._(),...h(),...M(),...x(),...B(),...R()},`VExpansionPanel`),U=I()({name:`VExpansionPanel`,props:H(),emits:{"group:selected":e=>!0},setup(e,{slots:n}){let i=O(e,L),{backgroundColorClasses:a,backgroundColorStyles:o}=A(()=>e.bgColor),{elevationClasses:c}=T(e),{roundedClasses:l}=m(e),d=t(()=>i?.disabled.value||e.disabled),f=S(()=>i.group.items.value.reduce((e,t,n)=>(i.group.selected.value.includes(t.id)&&e.push(n),e),[])),p=S(()=>{let e=i.group.items.value.findIndex(e=>e.id===i.id);return!i.isSelected.value&&f.value.some(t=>t-e===1)}),h=S(()=>{let e=i.group.items.value.findIndex(e=>e.id===i.id);return!i.isSelected.value&&f.value.some(t=>t-e===-1)});return r(L,i),w(()=>{let t=!!(n.text||e.text),r=!!(n.title||e.title),f=V.filterProps(e),m=z.filterProps(e);return F(e.tag,{class:y([`v-expansion-panel`,{"v-expansion-panel--active":i.isSelected.value,"v-expansion-panel--before-active":p.value,"v-expansion-panel--after-active":h.value,"v-expansion-panel--disabled":d.value},l.value,a.value,e.class]),style:u([o.value,e.style])},{default:()=>[v(`div`,{class:y([`v-expansion-panel__shadow`,...c.value])},null),F(s,{defaults:{VExpansionPanelTitle:{...f},VExpansionPanelText:{...m}}},{default:()=>[r&&F(V,{key:`title`},{default:()=>[n.title?n.title():e.title]}),t&&F(z,{key:`text`},{default:()=>[n.text?n.text():e.text]}),n.default?.()]})]})}),{groupItem:i}}}),W=[`default`,`accordion`,`inset`,`popout`],G=N({flat:Boolean,...j(),...e(H(),[`bgColor`,`collapseIcon`,`color`,`eager`,`elevation`,`expandIcon`,`focusable`,`hideActions`,`readonly`,`ripple`,`static`]),...M(),...D(),...n(),...x(),variant:{type:String,default:`default`,validator:e=>W.includes(e)}},`VExpansionPanels`),K=I()({name:`VExpansionPanels`,props:G(),emits:{"update:modelValue":e=>!0},setup(e,{slots:n}){let{next:r,prev:i}=C(e,L),{themeClasses:a}=b(e),{roundedClasses:o}=m(e),s=t(()=>e.variant&&`v-expansion-panels--variant-${e.variant}`);return d({VExpansionPanel:{bgColor:t(()=>e.bgColor),collapseIcon:t(()=>e.collapseIcon),color:t(()=>e.color),eager:t(()=>e.eager),elevation:t(()=>e.elevation),expandIcon:t(()=>e.expandIcon),focusable:t(()=>e.focusable),hideActions:t(()=>e.hideActions),readonly:t(()=>e.readonly),ripple:t(()=>e.ripple),static:t(()=>e.static)}}),w(()=>F(e.tag,{class:y([`v-expansion-panels`,{"v-expansion-panels--flat":e.flat,"v-expansion-panels--tile":e.tile},a.value,o.value,s.value,e.class]),style:u(e.style)},{default:()=>[n.default?.({prev:i,next:r})]})),{next:r,prev:i}}});export{z as i,U as n,V as r,K as t};
|
|
||||||
@@ -0,0 +1 @@
|
|||||||
|
import{Gr as e,I as t,Ir as n,J as r,O as i,Q as a,Sr as o,Tn as s,Tr as c,X as l,ai as u,an as d,bn as f,c as p,dt as m,ei as h,er as g,et as _,ft as v,gr as y,hr as b,in as x,lr as S,lt as C,mn as w,nt as T,oi as E,pn as D,pt as O,q as k,rt as A,s as j,st as M,tt as N,ut as P,wn as F,xn as I}from"./index-mgwiCK5j.js";var L=Symbol.for(`vuetify:v-expansion-panel`),R=s({...F(),...j()},`VExpansionPanelText`),z=f()({name:`VExpansionPanelText`,props:R(),setup(t,{slots:n}){let r=c(L);if(!r)throw Error(`[Vuetify] v-expansion-panel-text needs to be placed inside v-expansion-panel`);let{hasContent:a,onAfterLeave:s}=p(t,r.isSelected);return w(()=>o(i,{onAfterLeave:s},{default:()=>[e(y(`div`,{class:u([`v-expansion-panel-text`,t.class]),style:E(t.style)},[n.default&&a.value&&y(`div`,{class:`v-expansion-panel-text__wrapper`},[n.default?.()])]),[[S,r.isSelected.value]])]})),{}}}),B=s({color:String,expandIcon:{type:D,default:`$expand`},collapseIcon:{type:D,default:`$collapse`},hideActions:Boolean,focusable:Boolean,static:Boolean,ripple:{type:[Boolean,Object],default:!1},readonly:Boolean,...F(),...k()},`VExpansionPanelTitle`),V=f()({name:`VExpansionPanelTitle`,directives:{vRipple:t},props:B(),setup(n,{slots:i}){let s=c(L);if(!s)throw Error(`[Vuetify] v-expansion-panel-title needs to be placed inside v-expansion-panel`);let{backgroundColorClasses:d,backgroundColorStyles:f}=M(()=>n.color),{dimensionStyles:p}=r(n),m=b(()=>({collapseIcon:n.collapseIcon,disabled:s.disabled.value,expanded:s.isSelected.value,expandIcon:n.expandIcon,readonly:n.readonly})),g=h(()=>s.isSelected.value?n.collapseIcon:n.expandIcon);return w(()=>e(y(`button`,{class:u([`v-expansion-panel-title`,{"v-expansion-panel-title--active":s.isSelected.value,"v-expansion-panel-title--focusable":n.focusable,"v-expansion-panel-title--static":n.static},d.value,n.class]),style:E([f.value,p.value,n.style]),type:`button`,tabindex:s.disabled.value?-1:void 0,disabled:s.disabled.value,"aria-expanded":s.isSelected.value,onClick:n.readonly?void 0:s.toggle},[y(`span`,{class:`v-expansion-panel-title__overlay`},null),i.default?.(m.value),!n.hideActions&&o(a,{defaults:{VIcon:{icon:g.value}}},{default:()=>[y(`span`,{class:`v-expansion-panel-title__icon`},[i.actions?.(m.value)??o(l,null,null)])]})]),[[t,n.ripple]])),{}}}),H=s({title:String,text:String,bgColor:String,...v(),..._(),...P(),...C(),...B(),...R()},`VExpansionPanel`),U=f()({name:`VExpansionPanel`,props:H(),emits:{"group:selected":e=>!0},setup(e,{slots:t}){let r=A(e,L),{backgroundColorClasses:i,backgroundColorStyles:s}=M(()=>e.bgColor),{elevationClasses:c}=O(e),{roundedClasses:l}=m(e),d=h(()=>r?.disabled.value||e.disabled),f=b(()=>r.group.items.value.reduce((e,t,n)=>(r.group.selected.value.includes(t.id)&&e.push(n),e),[])),p=b(()=>{let e=r.group.items.value.findIndex(e=>e.id===r.id);return!r.isSelected.value&&f.value.some(t=>t-e===1)}),g=b(()=>{let e=r.group.items.value.findIndex(e=>e.id===r.id);return!r.isSelected.value&&f.value.some(t=>t-e===-1)});return n(L,r),w(()=>{let n=!!(t.text||e.text),f=!!(t.title||e.title),m=V.filterProps(e),h=z.filterProps(e);return o(e.tag,{class:u([`v-expansion-panel`,{"v-expansion-panel--active":r.isSelected.value,"v-expansion-panel--before-active":p.value,"v-expansion-panel--after-active":g.value,"v-expansion-panel--disabled":d.value},l.value,i.value,e.class]),style:E([s.value,e.style])},{default:()=>[y(`div`,{class:u([`v-expansion-panel__shadow`,...c.value])},null),o(a,{defaults:{VExpansionPanelTitle:{...m},VExpansionPanelText:{...h}}},{default:()=>[f&&o(V,{key:`title`},{default:()=>[t.title?t.title():e.title]}),n&&o(z,{key:`text`},{default:()=>[t.text?t.text():e.text]}),t.default?.()]})]})}),{groupItem:r}}}),W=[`default`,`accordion`,`inset`,`popout`],G=s({flat:Boolean,...N(),...g(H(),[`bgColor`,`collapseIcon`,`color`,`eager`,`elevation`,`expandIcon`,`focusable`,`hideActions`,`readonly`,`ripple`,`static`]),...P(),...x(),...F(),...C(),variant:{type:String,default:`default`,validator:e=>W.includes(e)}},`VExpansionPanels`),K=f()({name:`VExpansionPanels`,props:G(),emits:{"update:modelValue":e=>!0},setup(e,{slots:t}){let{next:n,prev:r}=T(e,L),{themeClasses:i}=d(e),{roundedClasses:a}=m(e),s=h(()=>e.variant&&`v-expansion-panels--variant-${e.variant}`);return I({VExpansionPanel:{bgColor:h(()=>e.bgColor),collapseIcon:h(()=>e.collapseIcon),color:h(()=>e.color),eager:h(()=>e.eager),elevation:h(()=>e.elevation),expandIcon:h(()=>e.expandIcon),focusable:h(()=>e.focusable),hideActions:h(()=>e.hideActions),readonly:h(()=>e.readonly),ripple:h(()=>e.ripple),static:h(()=>e.static)}}),w(()=>o(e.tag,{class:u([`v-expansion-panels`,{"v-expansion-panels--flat":e.flat,"v-expansion-panels--tile":e.tile},i.value,a.value,s.value,e.class]),style:E(e.style)},{default:()=>[t.default?.({prev:r,next:n})]})),{next:n,prev:r}}});export{z as i,U as n,V as r,K as t};
|
||||||
@@ -1 +1 @@
|
|||||||
import{Cn as e,Xr as t,ai as n,hr as r,ii as i,pn as a,r as o,wn as s,yn as c}from"./index-Bplw5zZe.js";import{d as l,f as u}from"./VTextField-DVnxh9lX.js";var d=s({...e(),...u()},`VForm`),f=c()({name:`VForm`,props:d(),emits:{"update:modelValue":e=>!0,submit:e=>!0},setup(e,{slots:s,emit:c}){let u=l(e),d=t();function f(e){e.preventDefault(),u.reset()}function p(e){let t=e,n=u.validate();t.then=n.then.bind(n),t.catch=n.catch.bind(n),t.finally=n.finally.bind(n),c(`submit`,t),t.defaultPrevented||n.then(({valid:e})=>{e&&d.value?.submit()}),t.preventDefault()}return a(()=>r(`form`,{ref:d,class:i([`v-form`,e.class]),style:n(e.style),novalidate:!0,onReset:f,onSubmit:p},[s.default?.({get errors(){return u.errors.value},get isDisabled(){return u.isDisabled.value},get isReadonly(){return u.isReadonly.value},get isValidating(){return u.isValidating.value},get isValid(){return u.isValid.value},get items(){return u.items.value},validate:u.validate,reset:u.reset,resetValidation:u.resetValidation})])),o(u,d)}});export{f as t};
|
import{Tn as e,Zr as t,ai as n,bn as r,gr as i,mn as a,oi as o,r as s,wn as c}from"./index-mgwiCK5j.js";import{d as l,f as u}from"./VTextField-C7hGBY30.js";var d=e({...c(),...u()},`VForm`),f=r()({name:`VForm`,props:d(),emits:{"update:modelValue":e=>!0,submit:e=>!0},setup(e,{slots:r,emit:c}){let u=l(e),d=t();function f(e){e.preventDefault(),u.reset()}function p(e){let t=e,n=u.validate();t.then=n.then.bind(n),t.catch=n.catch.bind(n),t.finally=n.finally.bind(n),c(`submit`,t),t.defaultPrevented||n.then(({valid:e})=>{e&&d.value?.submit()}),t.preventDefault()}return a(()=>i(`form`,{ref:d,class:n([`v-form`,e.class]),style:o(e.style),novalidate:!0,onReset:f,onSubmit:p},[r.default?.({get errors(){return u.errors.value},get isDisabled(){return u.isDisabled.value},get isReadonly(){return u.isReadonly.value},get isValidating(){return u.isValidating.value},get isValid(){return u.isValid.value},get items(){return u.items.value},validate:u.validate,reset:u.reset,resetValidation:u.resetValidation})])),s(u,d)}});export{f as t};
|
||||||
@@ -1 +1 @@
|
|||||||
import{Cn as e,Cr as t,Nn as n,Yn as r,an as i,lt as a,mr as o,mt as s,or as c,ri as l,wn as u,yn as d}from"./index-Bplw5zZe.js";var f=i.reduce((e,t)=>(e[t]={type:[Boolean,String,Number],default:!1},e),{}),p=i.reduce((e,t)=>{let n=`offset`+l(t);return e[n]={type:[String,Number],default:null},e},{}),m={col:r(f),offset:r(p),order:[`order`,`orderSm`,`orderMd`,`orderLg`,`orderXl`,`orderXxl`]};function h(e){if(typeof e==`string`&&e.includes(`/`)){let[t,n]=e.split(`/`);return{cols:Number(t),size:Number(n)}}return{cols:e}}function g(e,t,n){if(n==null||n===!1)return{};let{cols:r,size:i}=h(n),a=t.replace(e,``).toLowerCase();return e===`offset`?{className:`v-col--offset-${a}-${r}`,variables:[{[`--v-col-offset-base-${a}`]:i}]}:e===`order`?{className:`order-${a}-${r}`}:{className:r===``||r===!0?`v-col--${a}`:`v-col--cols-${a}-${r}`,variables:[{[`--v-col-size-base-${a}`]:i}]}}var _=[`auto`,`start`,`end`,`center`,`baseline`,`stretch`],v=e=>_.includes(e),y=u({cols:{type:[Boolean,String,Number],default:!1},...f,offset:{type:[String,Number],default:null},...p,order:{type:[String,Number],default:null},orderSm:{type:[String,Number],default:null},orderMd:{type:[String,Number],default:null},orderLg:{type:[String,Number],default:null},orderXl:{type:[String,Number],default:null},orderXxl:{type:[String,Number],default:null},alignSelf:{type:String,default:null,validator:v},...e(),...a()},`VCol`),b=d()({name:`VCol`,props:y(),setup(e,{slots:n}){let r=o(()=>h(e.cols).size),i=o(()=>h(e.offset).size),a=o(()=>{let t=[`v-col`],n=[],r;for(r in m)m[r].forEach(i=>{let a=e[i],{className:o,variables:s}=g(r,i,a);o&&t.push(o),s&&n.push(...s)});let{cols:i}=h(e.cols),{cols:a}=h(e.offset);return t.push({[`v-col--cols-${i}`]:i,[`v-col--offset-${a}`]:a,[`order-${e.order}`]:e.order,[`align-self-${e.alignSelf}`]:e.alignSelf}),{classes:t,variables:n}});return()=>t(e.tag,{class:[a.value.classes,e.class],style:[{"--v-col-size-base":r.value},{"--v-col-offset-base":i.value},a.value.variables,e.style]},n.default?.())}}),x=[`start`,`end`,`center`],S=[`space-between`,`space-around`,`space-evenly`],C=[...x,`baseline`,`stretch`],w=e=>C.includes(e),T=[...x,...S],E=e=>T.includes(e),D=[...x,...S,`stretch`],O=e=>D.includes(e),k={align:[`align`,`alignSm`,`alignMd`,`alignLg`,`alignXl`,`alignXxl`],justify:[`justify`,`justifySm`,`justifyMd`,`justifyLg`,`justifyXl`,`justifyXxl`],alignContent:[`alignContent`,`alignContentSm`,`alignContentMd`,`alignContentLg`,`alignContentXl`,`alignContentXxl`]},A={align:`align`,justify:`justify`,alignContent:`align-content`};function j(e,t,n){let r=A[e];if(n!=null){if(t){let n=t.replace(e,``);r+=`-${n}`}return r+=`-${n}`,r.toLowerCase()}}var M=u({dense:Boolean,align:{type:String,default:null,validator:w},alignSm:{type:String,default:null,validator:w},alignMd:{type:String,default:null,validator:w},alignLg:{type:String,default:null,validator:w},alignXl:{type:String,default:null,validator:w},alignXxl:{type:String,default:null,validator:w},justify:{type:String,default:null,validator:E},justifySm:{type:String,default:null,validator:E},justifyMd:{type:String,default:null,validator:E},justifyLg:{type:String,default:null,validator:E},justifyXl:{type:String,default:null,validator:E},justifyXxl:{type:String,default:null,validator:E},alignContent:{type:String,default:null,validator:O},alignContentSm:{type:String,default:null,validator:O},alignContentMd:{type:String,default:null,validator:O},alignContentLg:{type:String,default:null,validator:O},alignContentXl:{type:String,default:null,validator:O},alignContentXxl:{type:String,default:null,validator:O},noGutters:Boolean,gap:[Number,String,Array],size:[Number,String],...e(),...s(),...a()},`VRow`),N=d()({name:`VRow`,props:M(),setup(e,{slots:r}){e.dense&&c(`dense`,`density="comfortable"`);let i=o(()=>{let t=[],n;for(n in k)k[n].forEach(r=>{let i=e[r],a=j(n,r,i);a&&t.push(a)});return t.push({"v-row--no-gutters":e.noGutters,"v-row--density-default":e.density===`default`&&!e.noGutters&&!e.dense,"v-row--density-compact":e.density===`compact`,"v-row--density-comfortable":e.density===`comfortable`||e.dense,[`align-${e.align}`]:e.align,[`justify-${e.justify}`]:e.justify,[`align-content-${e.alignContent}`]:e.alignContent}),t}),a=o(()=>Array.isArray(e.gap)?n(e.gap[0]||0):n(e.gap)),s=o(()=>Array.isArray(e.gap)?n(e.gap[1]||0):a.value);return()=>t(e.tag,{class:[`v-row`,i.value,e.class],style:[{"--v-col-gap-x":a.value,"--v-col-gap-y":s.value,"--v-row-columns":e.size},e.style]},r.default?.())}});export{b as n,N as t};
|
import{Pn as e,Tn as t,Xn as n,bn as r,hr as i,ii as a,lt as o,mt as s,on as c,sr as l,wn as u,wr as d}from"./index-mgwiCK5j.js";var f=c.reduce((e,t)=>(e[t]={type:[Boolean,String,Number],default:!1},e),{}),p=c.reduce((e,t)=>{let n=`offset`+a(t);return e[n]={type:[String,Number],default:null},e},{}),m={col:n(f),offset:n(p),order:[`order`,`orderSm`,`orderMd`,`orderLg`,`orderXl`,`orderXxl`]};function h(e){if(typeof e==`string`&&e.includes(`/`)){let[t,n]=e.split(`/`);return{cols:Number(t),size:Number(n)}}return{cols:e}}function g(e,t,n){if(n==null||n===!1)return{};let{cols:r,size:i}=h(n),a=t.replace(e,``).toLowerCase();return e===`offset`?{className:`v-col--offset-${a}-${r}`,variables:[{[`--v-col-offset-base-${a}`]:i}]}:e===`order`?{className:`order-${a}-${r}`}:{className:r===``||r===!0?`v-col--${a}`:`v-col--cols-${a}-${r}`,variables:[{[`--v-col-size-base-${a}`]:i}]}}var _=[`auto`,`start`,`end`,`center`,`baseline`,`stretch`],v=e=>_.includes(e),y=t({cols:{type:[Boolean,String,Number],default:!1},...f,offset:{type:[String,Number],default:null},...p,order:{type:[String,Number],default:null},orderSm:{type:[String,Number],default:null},orderMd:{type:[String,Number],default:null},orderLg:{type:[String,Number],default:null},orderXl:{type:[String,Number],default:null},orderXxl:{type:[String,Number],default:null},alignSelf:{type:String,default:null,validator:v},...u(),...o()},`VCol`),b=r()({name:`VCol`,props:y(),setup(e,{slots:t}){let n=i(()=>h(e.cols).size),r=i(()=>h(e.offset).size),a=i(()=>{let t=[`v-col`],n=[],r;for(r in m)m[r].forEach(i=>{let a=e[i],{className:o,variables:s}=g(r,i,a);o&&t.push(o),s&&n.push(...s)});let{cols:i}=h(e.cols),{cols:a}=h(e.offset);return t.push({[`v-col--cols-${i}`]:i,[`v-col--offset-${a}`]:a,[`order-${e.order}`]:e.order,[`align-self-${e.alignSelf}`]:e.alignSelf}),{classes:t,variables:n}});return()=>d(e.tag,{class:[a.value.classes,e.class],style:[{"--v-col-size-base":n.value},{"--v-col-offset-base":r.value},a.value.variables,e.style]},t.default?.())}}),x=[`start`,`end`,`center`],S=[`space-between`,`space-around`,`space-evenly`],C=[...x,`baseline`,`stretch`],w=e=>C.includes(e),T=[...x,...S],E=e=>T.includes(e),D=[...x,...S,`stretch`],O=e=>D.includes(e),k={align:[`align`,`alignSm`,`alignMd`,`alignLg`,`alignXl`,`alignXxl`],justify:[`justify`,`justifySm`,`justifyMd`,`justifyLg`,`justifyXl`,`justifyXxl`],alignContent:[`alignContent`,`alignContentSm`,`alignContentMd`,`alignContentLg`,`alignContentXl`,`alignContentXxl`]},A={align:`align`,justify:`justify`,alignContent:`align-content`};function j(e,t,n){let r=A[e];if(n!=null){if(t){let n=t.replace(e,``);r+=`-${n}`}return r+=`-${n}`,r.toLowerCase()}}var M=t({dense:Boolean,align:{type:String,default:null,validator:w},alignSm:{type:String,default:null,validator:w},alignMd:{type:String,default:null,validator:w},alignLg:{type:String,default:null,validator:w},alignXl:{type:String,default:null,validator:w},alignXxl:{type:String,default:null,validator:w},justify:{type:String,default:null,validator:E},justifySm:{type:String,default:null,validator:E},justifyMd:{type:String,default:null,validator:E},justifyLg:{type:String,default:null,validator:E},justifyXl:{type:String,default:null,validator:E},justifyXxl:{type:String,default:null,validator:E},alignContent:{type:String,default:null,validator:O},alignContentSm:{type:String,default:null,validator:O},alignContentMd:{type:String,default:null,validator:O},alignContentLg:{type:String,default:null,validator:O},alignContentXl:{type:String,default:null,validator:O},alignContentXxl:{type:String,default:null,validator:O},noGutters:Boolean,gap:[Number,String,Array],size:[Number,String],...u(),...s(),...o()},`VRow`),N=r()({name:`VRow`,props:M(),setup(t,{slots:n}){t.dense&&l(`dense`,`density="comfortable"`);let r=i(()=>{let e=[],n;for(n in k)k[n].forEach(r=>{let i=t[r],a=j(n,r,i);a&&e.push(a)});return e.push({"v-row--no-gutters":t.noGutters,"v-row--density-default":t.density===`default`&&!t.noGutters&&!t.dense,"v-row--density-compact":t.density===`compact`,"v-row--density-comfortable":t.density===`comfortable`||t.dense,[`align-${t.align}`]:t.align,[`justify-${t.justify}`]:t.justify,[`align-content-${t.alignContent}`]:t.alignContent}),e}),a=i(()=>Array.isArray(t.gap)?e(t.gap[0]||0):e(t.gap)),o=i(()=>Array.isArray(t.gap)?e(t.gap[1]||0):a.value);return()=>d(t.tag,{class:[`v-row`,r.value,t.class],style:[{"--v-col-gap-x":a.value,"--v-col-gap-y":o.value,"--v-row-columns":t.size},t.style]},n.default?.())}});export{b as n,N as t};
|
||||||
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
+1
-1
@@ -1 +1 @@
|
|||||||
import{n as e,t}from"./VRow-Jrv7cE2K.js";import{Er as n,Ir as r,J as i,Pr as a,S as o,Sr as s,Ur as c,Ut as l,X as u,cn as d,dr as f,er as p,ft as m,gr as h,hr as g,ii as _,in as v,mr as y,oi as b,pn as x,pt as S,q as C,rn as w,st as T,vr as E,wn as D,xr as O,yn as k}from"./index-Bplw5zZe.js";import{n as A,t as j}from"./VCard-DwK3U69w.js";import{t as M}from"./_plugin-vue_export-helper-BDNMzG2s.js";function N(e){switch(e){case`online`:return`success`;case`offline`:return`error`;default:return`warning`}}function P(e){switch(e){case`online`:return`在线`;case`offline`:return`离线`;default:return`未知`}}function F(e){if(!e)return`—`;let t=l(e);if(!t)return`—`;let n=Date.now()-t.getTime();return n<6e4?`刚刚`:n<36e5?`${Math.floor(n/6e4)} 分钟前`:n<864e5?`${Math.floor(n/36e5)} 小时前`:`${Math.floor(n/864e5)} 天前`}var I={class:`text-caption text-medium-emphasis mb-1`,style:{"font-size":`14px`,"letter-spacing":`0.5px`,"text-transform":`uppercase`}},L=M(s({__name:`StatCardsRow`,props:{items:{}},setup(n){return(i,s)=>(a(),h(t,null,{default:c(()=>[(a(!0),E(f,null,r(n.items,(t,n)=>(a(),h(e,{key:n,cols:`6`,sm:`3`},{default:c(()=>[O(j,{elevation:`0`,rounded:`xl`,border:``,class:`stat-card`},{default:c(()=>[O(A,{class:`pa-4 d-flex align-center justify-space-between`},{default:c(()=>[g(`div`,null,[g(`div`,I,b(t.subtitle),1),g(`div`,{class:_([`font-weight-bold`,`text-`+t.color]),style:{"font-size":`36px`,"line-height":`1.1`}},b(t.title),3)]),O(o,{color:t.color,size:`48`,rounded:`lg`,class:`stat-icon`},{default:c(()=>[O(u,{icon:t.icon,size:`24`,color:`white`},null,8,[`icon`])]),_:2},1032,[`color`])]),_:2},1024)]),_:2},1024)]),_:2},1024))),128))]),_:1}))}}),[[`__scopeId`,`data-v-68b984da`]]),R={actions:`button@2`,article:`heading, paragraph`,avatar:`avatar`,button:`button`,card:`image, heading`,"card-avatar":`image, list-item-avatar`,chip:`chip`,"date-picker":`list-item, heading, divider, date-picker-options, date-picker-days, actions`,"date-picker-options":`text, avatar@2`,"date-picker-days":`avatar@28`,divider:`divider`,heading:`heading`,image:`image`,"list-item":`text`,"list-item-avatar":`avatar, text`,"list-item-two-line":`sentences`,"list-item-avatar-two-line":`avatar, sentences`,"list-item-three-line":`paragraph`,"list-item-avatar-three-line":`avatar, paragraph`,ossein:`ossein`,paragraph:`text@3`,sentences:`text@2`,subtitle:`text`,table:`table-heading, table-thead, table-tbody, table-tfoot`,"table-heading":`chip, text`,"table-thead":`heading@6`,"table-tbody":`table-row-divider@6`,"table-row-divider":`table-row, divider`,"table-row":`text@6`,"table-tfoot":`text@2, avatar@2`,text:`text`};function z(e,t=[]){return g(`div`,{class:_([`v-skeleton-loader__bone`,`v-skeleton-loader__${e}`])},[t])}function B(e){let[t,n]=e.split(`@`);return Array.from({length:n}).map(()=>V(t))}function V(e){let t=[];if(!e)return t;let n=R[e];if(e!==n){if(e.includes(`,`))return H(e);if(e.includes(`@`))return B(e);n.includes(`,`)?t=H(n):n.includes(`@`)?t=B(n):n&&t.push(V(n))}return[z(e,t)]}function H(e){return e.replace(/\s/g,``).split(`,`).map(V)}var U=D({boilerplate:Boolean,color:String,loading:Boolean,loadingText:{type:String,default:`$vuetify.loading`},type:{type:[String,Array],default:`ossein`},...C(),...m(),...w()},`VSkeletonLoader`),W=k()({name:`VSkeletonLoader`,inheritAttrs:!1,props:U(),setup(e,{attrs:t,slots:r}){let{backgroundColorClasses:a,backgroundColorStyles:o}=T(()=>e.color),{dimensionStyles:s}=i(e),{elevationClasses:c}=S(e),{themeClasses:l}=v(e),{t:u}=d(),m=y(()=>V(p(e.type).join(`,`)));return x(()=>{let i=!r.default||e.loading,d=e.boilerplate||!i?{}:{ariaLive:`polite`,ariaLabel:u(e.loadingText),role:`alert`};return i?g(`div`,n({class:[`v-skeleton-loader`,{"v-skeleton-loader--boilerplate":e.boilerplate},l.value,a.value,c.value],style:[o.value,s.value]},d,t),[m.value]):g(f,null,[r.default?.()])}),{}}});export{P as a,N as i,L as n,F as r,W as t};
|
import{n as e,t}from"./VRow-DQLoaeks.js";import{Cr as n,Dr as r,Fr as i,J as a,Lr as o,S as s,Sr as c,Tn as l,Wr as u,Wt as d,X as f,_r as p,ai as m,an as h,bn as g,fr as _,ft as v,gr as y,hr as b,in as x,ln as S,mn as C,pt as w,q as T,si as E,st as D,tr as O,yr as k}from"./index-mgwiCK5j.js";import{n as A,t as j}from"./VCard-B9mXbrEC.js";import{t as M}from"./_plugin-vue_export-helper-BDNMzG2s.js";function N(e){switch(e){case`online`:return`success`;case`offline`:return`error`;default:return`warning`}}function P(e){switch(e){case`online`:return`在线`;case`offline`:return`离线`;default:return`未知`}}function F(e){if(!e)return`—`;let t=d(e);if(!t)return`—`;let n=Date.now()-t.getTime();return n<6e4?`刚刚`:n<36e5?`${Math.floor(n/6e4)} 分钟前`:n<864e5?`${Math.floor(n/36e5)} 小时前`:`${Math.floor(n/864e5)} 天前`}var I={class:`text-caption text-medium-emphasis mb-1`,style:{"font-size":`14px`,"letter-spacing":`0.5px`,"text-transform":`uppercase`}},L=M(n({__name:`StatCardsRow`,props:{items:{}},setup(n){return(r,a)=>(i(),p(t,null,{default:u(()=>[(i(!0),k(_,null,o(n.items,(t,n)=>(i(),p(e,{key:n,cols:`6`,sm:`3`},{default:u(()=>[c(j,{elevation:`0`,rounded:`xl`,border:``,class:`stat-card`},{default:u(()=>[c(A,{class:`pa-4 d-flex align-center justify-space-between`},{default:u(()=>[y(`div`,null,[y(`div`,I,E(t.subtitle),1),y(`div`,{class:m([`font-weight-bold`,`text-`+t.color]),style:{"font-size":`36px`,"line-height":`1.1`}},E(t.title),3)]),c(s,{color:t.color,size:`48`,rounded:`lg`,class:`stat-icon`},{default:u(()=>[c(f,{icon:t.icon,size:`24`,color:`white`},null,8,[`icon`])]),_:2},1032,[`color`])]),_:2},1024)]),_:2},1024)]),_:2},1024))),128))]),_:1}))}}),[[`__scopeId`,`data-v-68b984da`]]),R={actions:`button@2`,article:`heading, paragraph`,avatar:`avatar`,button:`button`,card:`image, heading`,"card-avatar":`image, list-item-avatar`,chip:`chip`,"date-picker":`list-item, heading, divider, date-picker-options, date-picker-days, actions`,"date-picker-options":`text, avatar@2`,"date-picker-days":`avatar@28`,divider:`divider`,heading:`heading`,image:`image`,"list-item":`text`,"list-item-avatar":`avatar, text`,"list-item-two-line":`sentences`,"list-item-avatar-two-line":`avatar, sentences`,"list-item-three-line":`paragraph`,"list-item-avatar-three-line":`avatar, paragraph`,ossein:`ossein`,paragraph:`text@3`,sentences:`text@2`,subtitle:`text`,table:`table-heading, table-thead, table-tbody, table-tfoot`,"table-heading":`chip, text`,"table-thead":`heading@6`,"table-tbody":`table-row-divider@6`,"table-row-divider":`table-row, divider`,"table-row":`text@6`,"table-tfoot":`text@2, avatar@2`,text:`text`};function z(e,t=[]){return y(`div`,{class:m([`v-skeleton-loader__bone`,`v-skeleton-loader__${e}`])},[t])}function B(e){let[t,n]=e.split(`@`);return Array.from({length:n}).map(()=>V(t))}function V(e){let t=[];if(!e)return t;let n=R[e];if(e!==n){if(e.includes(`,`))return H(e);if(e.includes(`@`))return B(e);n.includes(`,`)?t=H(n):n.includes(`@`)?t=B(n):n&&t.push(V(n))}return[z(e,t)]}function H(e){return e.replace(/\s/g,``).split(`,`).map(V)}var U=l({boilerplate:Boolean,color:String,loading:Boolean,loadingText:{type:String,default:`$vuetify.loading`},type:{type:[String,Array],default:`ossein`},...T(),...v(),...x()},`VSkeletonLoader`),W=g()({name:`VSkeletonLoader`,inheritAttrs:!1,props:U(),setup(e,{attrs:t,slots:n}){let{backgroundColorClasses:i,backgroundColorStyles:o}=D(()=>e.color),{dimensionStyles:s}=a(e),{elevationClasses:c}=w(e),{themeClasses:l}=h(e),{t:u}=S(),d=b(()=>V(O(e.type).join(`,`)));return C(()=>{let a=!n.default||e.loading,f=e.boilerplate||!a?{}:{ariaLive:`polite`,ariaLabel:u(e.loadingText),role:`alert`};return a?y(`div`,r({class:[`v-skeleton-loader`,{"v-skeleton-loader--boilerplate":e.boilerplate},l.value,i.value,c.value],style:[o.value,s.value]},f,t),[d.value]):y(_,null,[n.default?.()])}),{}}});export{P as a,N as i,L as n,F as r,W as t};
|
||||||
@@ -1 +0,0 @@
|
|||||||
import{$r as e,A as t,Er as n,Q as r,Rn as i,U as a,V as o,X as s,Xr as c,Y as l,ai as u,dr as d,hr as f,ii as p,pn as m,r as h,rr as g,un as _,wn as v,xr as y,yn as b,zr as x}from"./index-Bplw5zZe.js";import{m as S,p as C}from"./VSelect-C2IkZQ4Y.js";import{l as w,m as T,u as E}from"./VTextField-DVnxh9lX.js";var D=v({indeterminate:Boolean,inset:Boolean,flat:Boolean,loading:{type:[Boolean,String],default:!1},...E(),...S()},`VSwitch`),O=b()({name:`VSwitch`,inheritAttrs:!1,props:D(),emits:{"update:focused":e=>!0,"update:modelValue":e=>!0,"update:indeterminate":e=>!0},setup(v,{attrs:b,slots:S}){let E=_(v,`indeterminate`),D=_(v,`modelValue`),{loaderClasses:O}=a(v),{isFocused:k,focus:A,blur:j}=T(v),M=c(),N=c(),P=g&&window.matchMedia(`(forced-colors: active)`).matches,F=e(()=>typeof v.loading==`string`&&v.loading!==``?v.loading:v.color),I=x(),L=e(()=>v.id||`switch-${I}`);function R(){E.value&&=!1}function z(e){e.stopPropagation(),e.preventDefault(),M.value?.input?.click()}return m(()=>{let[e,a]=i(b),c=w.filterProps(v),m=C.filterProps(v);return y(w,n({ref:N,class:[`v-switch`,{"v-switch--flat":v.flat},{"v-switch--inset":v.inset},{"v-switch--indeterminate":E.value},O.value,v.class]},e,c,{modelValue:D.value,"onUpdate:modelValue":e=>D.value=e,id:L.value,focused:k.value,style:v.style}),{...S,default:({id:e,messagesId:i,isDisabled:c,isReadonly:h,isValid:g})=>{let _={model:D,isValid:g};return y(C,n({ref:M},m,{modelValue:D.value,"onUpdate:modelValue":[e=>D.value=e,R],id:e.value,"aria-describedby":i.value,type:`checkbox`,"aria-checked":E.value?`mixed`:void 0,disabled:c.value,readonly:h.value,onFocus:A,onBlur:j},a),{...S,default:({backgroundColorClasses:e,backgroundColorStyles:t})=>f(`div`,{class:p([`v-switch__track`,P?void 0:e.value]),style:u(t.value),onClick:z},[S[`track-true`]&&f(`div`,{key:`prepend`,class:`v-switch__track-true`},[S[`track-true`](_)]),S[`track-false`]&&f(`div`,{key:`append`,class:`v-switch__track-false`},[S[`track-false`](_)])]),input:({inputNode:e,icon:n,backgroundColorClasses:i,backgroundColorStyles:a})=>f(d,null,[e,f(`div`,{class:p([`v-switch__thumb`,{"v-switch__thumb--filled":n||v.loading},v.inset||P?void 0:i.value]),style:u(v.inset?void 0:a.value)},[S.thumb?y(r,{defaults:{VIcon:{icon:n,size:`x-small`}}},{default:()=>[S.thumb({..._,icon:n})]}):y(t,null,{default:()=>[v.loading?y(o,{name:`v-switch`,active:!0,color:g.value===!1?void 0:F.value},{default:e=>S.loader?S.loader(e):y(l,{active:e.isActive,color:e.color,indeterminate:!0,size:`16`,width:`2`},null)}):n&&y(s,{key:String(n),icon:n,size:`x-small`},null)]})])])})}})}),h({},N)}});export{O as t};
|
|
||||||
@@ -0,0 +1 @@
|
|||||||
|
import{A as e,Br as t,Dr as n,Q as r,Sr as i,Tn as a,U as o,V as s,X as c,Y as l,Zr as u,ai as d,bn as f,dn as p,ei as m,fr as h,gr as g,ir as _,mn as v,oi as y,r as b,zn as x}from"./index-mgwiCK5j.js";import{m as S,p as C}from"./VSelect-7ey6zQ_i.js";import{l as w,m as T,u as E}from"./VTextField-C7hGBY30.js";var D=a({indeterminate:Boolean,inset:Boolean,flat:Boolean,loading:{type:[Boolean,String],default:!1},...E(),...S()},`VSwitch`),O=f()({name:`VSwitch`,inheritAttrs:!1,props:D(),emits:{"update:focused":e=>!0,"update:modelValue":e=>!0,"update:indeterminate":e=>!0},setup(a,{attrs:f,slots:S}){let E=p(a,`indeterminate`),D=p(a,`modelValue`),{loaderClasses:O}=o(a),{isFocused:k,focus:A,blur:j}=T(a),M=u(),N=u(),P=_&&window.matchMedia(`(forced-colors: active)`).matches,F=m(()=>typeof a.loading==`string`&&a.loading!==``?a.loading:a.color),I=t(),L=m(()=>a.id||`switch-${I}`);function R(){E.value&&=!1}function z(e){e.stopPropagation(),e.preventDefault(),M.value?.input?.click()}return v(()=>{let[t,o]=x(f),u=w.filterProps(a),p=C.filterProps(a);return i(w,n({ref:N,class:[`v-switch`,{"v-switch--flat":a.flat},{"v-switch--inset":a.inset},{"v-switch--indeterminate":E.value},O.value,a.class]},t,u,{modelValue:D.value,"onUpdate:modelValue":e=>D.value=e,id:L.value,focused:k.value,style:a.style}),{...S,default:({id:t,messagesId:u,isDisabled:f,isReadonly:m,isValid:_})=>{let v={model:D,isValid:_};return i(C,n({ref:M},p,{modelValue:D.value,"onUpdate:modelValue":[e=>D.value=e,R],id:t.value,"aria-describedby":u.value,type:`checkbox`,"aria-checked":E.value?`mixed`:void 0,disabled:f.value,readonly:m.value,onFocus:A,onBlur:j},o),{...S,default:({backgroundColorClasses:e,backgroundColorStyles:t})=>g(`div`,{class:d([`v-switch__track`,P?void 0:e.value]),style:y(t.value),onClick:z},[S[`track-true`]&&g(`div`,{key:`prepend`,class:`v-switch__track-true`},[S[`track-true`](v)]),S[`track-false`]&&g(`div`,{key:`append`,class:`v-switch__track-false`},[S[`track-false`](v)])]),input:({inputNode:t,icon:n,backgroundColorClasses:o,backgroundColorStyles:u})=>g(h,null,[t,g(`div`,{class:d([`v-switch__thumb`,{"v-switch__thumb--filled":n||a.loading},a.inset||P?void 0:o.value]),style:y(a.inset?void 0:u.value)},[S.thumb?i(r,{defaults:{VIcon:{icon:n,size:`x-small`}}},{default:()=>[S.thumb({...v,icon:n})]}):i(e,null,{default:()=>[a.loading?i(s,{name:`v-switch`,active:!0,color:_.value===!1?void 0:F.value},{default:e=>S.loader?S.loader(e):i(l,{active:e.isActive,color:e.color,indeterminate:!0,size:`16`,width:`2`},null)}):n&&i(c,{key:String(n),icon:n,size:`x-small`},null)]})])])})}})}),b({},N)}});export{O as t};
|
||||||
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
@@ -1 +0,0 @@
|
|||||||
import{Zt as e,qt as t}from"./index-Bplw5zZe.js";function n(n,r){return n instanceof t?e(n.detail??n.message,n.message||r):n instanceof Error&&n.message.trim()||r}export{n as t};
|
|
||||||
@@ -0,0 +1 @@
|
|||||||
|
import{Jt as e,Qt as t}from"./index-mgwiCK5j.js";function n(n,r){return n instanceof e?t(n.detail??n.message,n.message||r):n instanceof Error&&n.message.trim()||r}export{n as t};
|
||||||
@@ -1 +1 @@
|
|||||||
import{p as e,s as t}from"./initMonaco-CvAS2Es9.js";import{_ as n,a as r,c as i,d as a,f as o,g as s,h as c,i as l,l as u,m as d,n as f,o as p,p as m,r as h,s as g,t as _,u as v,v as y}from"./lspLanguageFeatures-CyUInuAF.js";var b=120*1e3,x=class{constructor(e){this._defaults=e,this._worker=null,this._client=null,this._idleCheckInterval=window.setInterval(()=>this._checkIfIdle(),30*1e3),this._lastUsedTime=0,this._configChangeListener=this._defaults.onDidChange(()=>this._stopWorker())}_stopWorker(){this._worker&&=(this._worker.dispose(),null),this._client=null}dispose(){clearInterval(this._idleCheckInterval),this._configChangeListener.dispose(),this._stopWorker()}_checkIfIdle(){this._worker&&Date.now()-this._lastUsedTime>b&&this._stopWorker()}_getClient(){return this._lastUsedTime=Date.now(),this._client||=(this._worker=t({moduleId:`vs/language/css/cssWorker`,createWorker:()=>new Worker(new URL(`/app/assets/css.worker-CvXBzhp8.js`,``+import.meta.url),{type:`module`}),label:this._defaults.languageId,createData:{options:this._defaults.options,languageId:this._defaults.languageId}}),this._worker.getProxy()),this._client}getLanguageServiceWorker(...e){let t;return this._getClient().then(e=>{t=e}).then(t=>{if(this._worker)return this._worker.withSyncedResources(e)}).then(e=>t)}};function S(t){let n=[],s=[],c=new x(t);n.push(c);let g=(...e)=>c.getLanguageServiceWorker(...e);function y(){let{languageId:n,modeConfiguration:c}=t;w(s),c.completionItems&&s.push(e.registerCompletionItemProvider(n,new _(g,[`/`,`-`,`:`]))),c.hovers&&s.push(e.registerHoverProvider(n,new a(g))),c.documentHighlights&&s.push(e.registerDocumentHighlightProvider(n,new p(g))),c.definitions&&s.push(e.registerDefinitionProvider(n,new f(g))),c.references&&s.push(e.registerReferenceProvider(n,new o(g))),c.documentSymbols&&s.push(e.registerDocumentSymbolProvider(n,new u(g))),c.rename&&s.push(e.registerRenameProvider(n,new m(g))),c.colors&&s.push(e.registerColorProvider(n,new l(g))),c.foldingRanges&&s.push(e.registerFoldingRangeProvider(n,new v(g))),c.diagnostics&&s.push(new h(n,g,t.onDidChange)),c.selectionRanges&&s.push(e.registerSelectionRangeProvider(n,new d(g))),c.documentFormattingEdits&&s.push(e.registerDocumentFormattingEditProvider(n,new r(g))),c.documentRangeFormattingEdits&&s.push(e.registerDocumentRangeFormattingEditProvider(n,new i(g)))}return y(),n.push(C(s)),C(n)}function C(e){return{dispose:()=>w(e)}}function w(e){for(;e.length;)e.pop().dispose()}export{_ as CompletionAdapter,f as DefinitionAdapter,h as DiagnosticsAdapter,l as DocumentColorAdapter,r as DocumentFormattingEditProvider,p as DocumentHighlightAdapter,g as DocumentLinkAdapter,i as DocumentRangeFormattingEditProvider,u as DocumentSymbolAdapter,v as FoldingRangeAdapter,a as HoverAdapter,o as ReferenceAdapter,m as RenameAdapter,d as SelectionRangeAdapter,x as WorkerManager,c as fromPosition,s as fromRange,S as setupMode,n as toRange,y as toTextEdit};
|
import{p as e,s as t}from"./initMonaco-vLodlUu5.js";import{_ as n,a as r,c as i,d as a,f as o,g as s,h as c,i as l,l as u,m as d,n as f,o as p,p as m,r as h,s as g,t as _,u as v,v as y}from"./lspLanguageFeatures-B_clHcWM.js";var b=120*1e3,x=class{constructor(e){this._defaults=e,this._worker=null,this._client=null,this._idleCheckInterval=window.setInterval(()=>this._checkIfIdle(),30*1e3),this._lastUsedTime=0,this._configChangeListener=this._defaults.onDidChange(()=>this._stopWorker())}_stopWorker(){this._worker&&=(this._worker.dispose(),null),this._client=null}dispose(){clearInterval(this._idleCheckInterval),this._configChangeListener.dispose(),this._stopWorker()}_checkIfIdle(){this._worker&&Date.now()-this._lastUsedTime>b&&this._stopWorker()}_getClient(){return this._lastUsedTime=Date.now(),this._client||=(this._worker=t({moduleId:`vs/language/css/cssWorker`,createWorker:()=>new Worker(new URL(`/app/assets/css.worker-CvXBzhp8.js`,``+import.meta.url),{type:`module`}),label:this._defaults.languageId,createData:{options:this._defaults.options,languageId:this._defaults.languageId}}),this._worker.getProxy()),this._client}getLanguageServiceWorker(...e){let t;return this._getClient().then(e=>{t=e}).then(t=>{if(this._worker)return this._worker.withSyncedResources(e)}).then(e=>t)}};function S(t){let n=[],s=[],c=new x(t);n.push(c);let g=(...e)=>c.getLanguageServiceWorker(...e);function y(){let{languageId:n,modeConfiguration:c}=t;w(s),c.completionItems&&s.push(e.registerCompletionItemProvider(n,new _(g,[`/`,`-`,`:`]))),c.hovers&&s.push(e.registerHoverProvider(n,new a(g))),c.documentHighlights&&s.push(e.registerDocumentHighlightProvider(n,new p(g))),c.definitions&&s.push(e.registerDefinitionProvider(n,new f(g))),c.references&&s.push(e.registerReferenceProvider(n,new o(g))),c.documentSymbols&&s.push(e.registerDocumentSymbolProvider(n,new u(g))),c.rename&&s.push(e.registerRenameProvider(n,new m(g))),c.colors&&s.push(e.registerColorProvider(n,new l(g))),c.foldingRanges&&s.push(e.registerFoldingRangeProvider(n,new v(g))),c.diagnostics&&s.push(new h(n,g,t.onDidChange)),c.selectionRanges&&s.push(e.registerSelectionRangeProvider(n,new d(g))),c.documentFormattingEdits&&s.push(e.registerDocumentFormattingEditProvider(n,new r(g))),c.documentRangeFormattingEdits&&s.push(e.registerDocumentRangeFormattingEditProvider(n,new i(g)))}return y(),n.push(C(s)),C(n)}function C(e){return{dispose:()=>w(e)}}function w(e){for(;e.length;)e.pop().dispose()}export{_ as CompletionAdapter,f as DefinitionAdapter,h as DiagnosticsAdapter,l as DocumentColorAdapter,r as DocumentFormattingEditProvider,p as DocumentHighlightAdapter,g as DocumentLinkAdapter,i as DocumentRangeFormattingEditProvider,u as DocumentSymbolAdapter,v as FoldingRangeAdapter,a as HoverAdapter,o as ReferenceAdapter,m as RenameAdapter,d as SelectionRangeAdapter,x as WorkerManager,c as fromPosition,s as fromRange,S as setupMode,n as toRange,y as toTextEdit};
|
||||||
+1
-1
@@ -1,2 +1,2 @@
|
|||||||
import{Ar as e,At as t,Nt as n}from"./index-Bplw5zZe.js";import{t as r}from"./usePageAutoRefresh-B7w3XG1Y.js";var i=8e3,a=3e4;function o(o,s){let{runningItems:c}=n();r(async()=>{s?.enabled&&!s.enabled()||await o(!0)},()=>c.value.length>0?i:a);let l=t(()=>{s?.enabled&&!s.enabled()||o(!1)});e(()=>{l()})}function s(e){return e.replace(/\b\d{1,3}(?:\.\d{1,3}){3}\b/g,`<ip>`).replace(/:\d{2,5}\b/g,`:<port>`).replace(/\/[^\s'"]+/g,`/<path>`).replace(/\b[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}\b/gi,`<uuid>`).replace(/\s+/g,` `).trim()}function c(e){let t=e.trim();return!t||t===`—`?`未知错误`:s(t.split(`
|
import{At as e,Nt as t,jr as n}from"./index-mgwiCK5j.js";import{t as r}from"./usePageAutoRefresh-SVpijj4X.js";var i=8e3,a=3e4;function o(o,s){let{runningItems:c}=t();r(async()=>{s?.enabled&&!s.enabled()||await o(!0)},()=>c.value.length>0?i:a);let l=e(()=>{s?.enabled&&!s.enabled()||o(!1)});n(()=>{l()})}function s(e){return e.replace(/\b\d{1,3}(?:\.\d{1,3}){3}\b/g,`<ip>`).replace(/:\d{2,5}\b/g,`:<port>`).replace(/\/[^\s'"]+/g,`/<path>`).replace(/\b[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}\b/gi,`<uuid>`).replace(/\s+/g,` `).trim()}function c(e){let t=e.trim();return!t||t===`—`?`未知错误`:s(t.split(`
|
||||||
`)[0]?.trim()||t).slice(0,200)||`未知错误`}function l(e){let t=new Map;for(let n of e){if(!n.failed)continue;let e=c(n.summary),r=t.get(e);r?r.push(n):t.set(e,[n])}return[...t.entries()].map(([e,t])=>({errorKey:e,rows:t.sort((e,t)=>e.serverName.localeCompare(t.serverName,`zh`)),count:t.length})).sort((e,t)=>t.count-e.count||e.errorKey.localeCompare(t.errorKey,`zh`))}export{o as n,l as t};
|
`)[0]?.trim()||t).slice(0,200)||`未知错误`}function l(e){let t=new Map;for(let n of e){if(!n.failed)continue;let e=c(n.summary),r=t.get(e);r?r.push(n):t.set(e,[n])}return[...t.entries()].map(([e,t])=>({errorKey:e,rows:t.sort((e,t)=>e.serverName.localeCompare(t.serverName,`zh`)),count:t.length})).sort((e,t)=>t.count-e.count||e.errorKey.localeCompare(t.errorKey,`zh`))}export{o as n,l as t};
|
||||||
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
@@ -1 +1 @@
|
|||||||
import{p as e}from"./initMonaco-CvAS2Es9.js";var t=[`area`,`base`,`br`,`col`,`embed`,`hr`,`img`,`input`,`keygen`,`link`,`menuitem`,`meta`,`param`,`source`,`track`,`wbr`],n={wordPattern:/(-?\d*\.\d\w*)|([^\`\~\!\@\$\^\&\*\(\)\=\+\[\{\]\}\\\|\;\:\'\"\,\.\<\>\/\s]+)/g,comments:{blockComment:[`<!--`,`-->`]},brackets:[[`<!--`,`-->`],[`<`,`>`],[`{`,`}`],[`(`,`)`]],autoClosingPairs:[{open:`{`,close:`}`},{open:`[`,close:`]`},{open:`(`,close:`)`},{open:`"`,close:`"`},{open:`'`,close:`'`}],surroundingPairs:[{open:`"`,close:`"`},{open:`'`,close:`'`},{open:`{`,close:`}`},{open:`[`,close:`]`},{open:`(`,close:`)`},{open:`<`,close:`>`}],onEnterRules:[{beforeText:RegExp(`<(?!(?:${t.join(`|`)}))([_:\\w][_:\\w-.\\d]*)([^/>]*(?!/)>)[^<]*$`,`i`),afterText:/^<\/([_:\w][_:\w-.\d]*)\s*>$/i,action:{indentAction:e.IndentAction.IndentOutdent}},{beforeText:RegExp(`<(?!(?:${t.join(`|`)}))(\\w[\\w\\d]*)([^/>]*(?!/)>)[^<]*$`,`i`),action:{indentAction:e.IndentAction.Indent}}],folding:{markers:{start:RegExp(`^\\s*<!--\\s*#region\\b.*-->`),end:RegExp(`^\\s*<!--\\s*#endregion\\b.*-->`)}}},r={defaultToken:``,tokenPostfix:`.html`,ignoreCase:!0,tokenizer:{root:[[/<!DOCTYPE/,`metatag`,`@doctype`],[/<!--/,`comment`,`@comment`],[/(<)((?:[\w\-]+:)?[\w\-]+)(\s*)(\/>)/,[`delimiter`,`tag`,``,`delimiter`]],[/(<)(script)/,[`delimiter`,{token:`tag`,next:`@script`}]],[/(<)(style)/,[`delimiter`,{token:`tag`,next:`@style`}]],[/(<)((?:[\w\-]+:)?[\w\-]+)/,[`delimiter`,{token:`tag`,next:`@otherTag`}]],[/(<\/)((?:[\w\-]+:)?[\w\-]+)/,[`delimiter`,{token:`tag`,next:`@otherTag`}]],[/</,`delimiter`],[/[^<]+/]],doctype:[[/[^>]+/,`metatag.content`],[/>/,`metatag`,`@pop`]],comment:[[/-->/,`comment`,`@pop`],[/[^-]+/,`comment.content`],[/./,`comment.content`]],otherTag:[[/\/?>/,`delimiter`,`@pop`],[/"([^"]*)"/,`attribute.value`],[/'([^']*)'/,`attribute.value`],[/[\w\-]+/,`attribute.name`],[/=/,`delimiter`],[/[ \t\r\n]+/]],script:[[/type/,`attribute.name`,`@scriptAfterType`],[/"([^"]*)"/,`attribute.value`],[/'([^']*)'/,`attribute.value`],[/[\w\-]+/,`attribute.name`],[/=/,`delimiter`],[/>/,{token:`delimiter`,next:`@scriptEmbedded`,nextEmbedded:`text/javascript`}],[/[ \t\r\n]+/],[/(<\/)(script\s*)(>)/,[`delimiter`,`tag`,{token:`delimiter`,next:`@pop`}]]],scriptAfterType:[[/=/,`delimiter`,`@scriptAfterTypeEquals`],[/>/,{token:`delimiter`,next:`@scriptEmbedded`,nextEmbedded:`text/javascript`}],[/[ \t\r\n]+/],[/<\/script\s*>/,{token:`@rematch`,next:`@pop`}]],scriptAfterTypeEquals:[[/"module"/,{token:`attribute.value`,switchTo:`@scriptWithCustomType.text/javascript`}],[/'module'/,{token:`attribute.value`,switchTo:`@scriptWithCustomType.text/javascript`}],[/"([^"]*)"/,{token:`attribute.value`,switchTo:`@scriptWithCustomType.$1`}],[/'([^']*)'/,{token:`attribute.value`,switchTo:`@scriptWithCustomType.$1`}],[/>/,{token:`delimiter`,next:`@scriptEmbedded`,nextEmbedded:`text/javascript`}],[/[ \t\r\n]+/],[/<\/script\s*>/,{token:`@rematch`,next:`@pop`}]],scriptWithCustomType:[[/>/,{token:`delimiter`,next:`@scriptEmbedded.$S2`,nextEmbedded:`$S2`}],[/"([^"]*)"/,`attribute.value`],[/'([^']*)'/,`attribute.value`],[/[\w\-]+/,`attribute.name`],[/=/,`delimiter`],[/[ \t\r\n]+/],[/<\/script\s*>/,{token:`@rematch`,next:`@pop`}]],scriptEmbedded:[[/<\/script/,{token:`@rematch`,next:`@pop`,nextEmbedded:`@pop`}],[/[^<]+/,``]],style:[[/type/,`attribute.name`,`@styleAfterType`],[/"([^"]*)"/,`attribute.value`],[/'([^']*)'/,`attribute.value`],[/[\w\-]+/,`attribute.name`],[/=/,`delimiter`],[/>/,{token:`delimiter`,next:`@styleEmbedded`,nextEmbedded:`text/css`}],[/[ \t\r\n]+/],[/(<\/)(style\s*)(>)/,[`delimiter`,`tag`,{token:`delimiter`,next:`@pop`}]]],styleAfterType:[[/=/,`delimiter`,`@styleAfterTypeEquals`],[/>/,{token:`delimiter`,next:`@styleEmbedded`,nextEmbedded:`text/css`}],[/[ \t\r\n]+/],[/<\/style\s*>/,{token:`@rematch`,next:`@pop`}]],styleAfterTypeEquals:[[/"([^"]*)"/,{token:`attribute.value`,switchTo:`@styleWithCustomType.$1`}],[/'([^']*)'/,{token:`attribute.value`,switchTo:`@styleWithCustomType.$1`}],[/>/,{token:`delimiter`,next:`@styleEmbedded`,nextEmbedded:`text/css`}],[/[ \t\r\n]+/],[/<\/style\s*>/,{token:`@rematch`,next:`@pop`}]],styleWithCustomType:[[/>/,{token:`delimiter`,next:`@styleEmbedded.$S2`,nextEmbedded:`$S2`}],[/"([^"]*)"/,`attribute.value`],[/'([^']*)'/,`attribute.value`],[/[\w\-]+/,`attribute.name`],[/=/,`delimiter`],[/[ \t\r\n]+/],[/<\/style\s*>/,{token:`@rematch`,next:`@pop`}]],styleEmbedded:[[/<\/style/,{token:`@rematch`,next:`@pop`,nextEmbedded:`@pop`}],[/[^<]+/,``]]}};export{n as conf,r as language};
|
import{p as e}from"./initMonaco-vLodlUu5.js";var t=[`area`,`base`,`br`,`col`,`embed`,`hr`,`img`,`input`,`keygen`,`link`,`menuitem`,`meta`,`param`,`source`,`track`,`wbr`],n={wordPattern:/(-?\d*\.\d\w*)|([^\`\~\!\@\$\^\&\*\(\)\=\+\[\{\]\}\\\|\;\:\'\"\,\.\<\>\/\s]+)/g,comments:{blockComment:[`<!--`,`-->`]},brackets:[[`<!--`,`-->`],[`<`,`>`],[`{`,`}`],[`(`,`)`]],autoClosingPairs:[{open:`{`,close:`}`},{open:`[`,close:`]`},{open:`(`,close:`)`},{open:`"`,close:`"`},{open:`'`,close:`'`}],surroundingPairs:[{open:`"`,close:`"`},{open:`'`,close:`'`},{open:`{`,close:`}`},{open:`[`,close:`]`},{open:`(`,close:`)`},{open:`<`,close:`>`}],onEnterRules:[{beforeText:RegExp(`<(?!(?:${t.join(`|`)}))([_:\\w][_:\\w-.\\d]*)([^/>]*(?!/)>)[^<]*$`,`i`),afterText:/^<\/([_:\w][_:\w-.\d]*)\s*>$/i,action:{indentAction:e.IndentAction.IndentOutdent}},{beforeText:RegExp(`<(?!(?:${t.join(`|`)}))(\\w[\\w\\d]*)([^/>]*(?!/)>)[^<]*$`,`i`),action:{indentAction:e.IndentAction.Indent}}],folding:{markers:{start:RegExp(`^\\s*<!--\\s*#region\\b.*-->`),end:RegExp(`^\\s*<!--\\s*#endregion\\b.*-->`)}}},r={defaultToken:``,tokenPostfix:`.html`,ignoreCase:!0,tokenizer:{root:[[/<!DOCTYPE/,`metatag`,`@doctype`],[/<!--/,`comment`,`@comment`],[/(<)((?:[\w\-]+:)?[\w\-]+)(\s*)(\/>)/,[`delimiter`,`tag`,``,`delimiter`]],[/(<)(script)/,[`delimiter`,{token:`tag`,next:`@script`}]],[/(<)(style)/,[`delimiter`,{token:`tag`,next:`@style`}]],[/(<)((?:[\w\-]+:)?[\w\-]+)/,[`delimiter`,{token:`tag`,next:`@otherTag`}]],[/(<\/)((?:[\w\-]+:)?[\w\-]+)/,[`delimiter`,{token:`tag`,next:`@otherTag`}]],[/</,`delimiter`],[/[^<]+/]],doctype:[[/[^>]+/,`metatag.content`],[/>/,`metatag`,`@pop`]],comment:[[/-->/,`comment`,`@pop`],[/[^-]+/,`comment.content`],[/./,`comment.content`]],otherTag:[[/\/?>/,`delimiter`,`@pop`],[/"([^"]*)"/,`attribute.value`],[/'([^']*)'/,`attribute.value`],[/[\w\-]+/,`attribute.name`],[/=/,`delimiter`],[/[ \t\r\n]+/]],script:[[/type/,`attribute.name`,`@scriptAfterType`],[/"([^"]*)"/,`attribute.value`],[/'([^']*)'/,`attribute.value`],[/[\w\-]+/,`attribute.name`],[/=/,`delimiter`],[/>/,{token:`delimiter`,next:`@scriptEmbedded`,nextEmbedded:`text/javascript`}],[/[ \t\r\n]+/],[/(<\/)(script\s*)(>)/,[`delimiter`,`tag`,{token:`delimiter`,next:`@pop`}]]],scriptAfterType:[[/=/,`delimiter`,`@scriptAfterTypeEquals`],[/>/,{token:`delimiter`,next:`@scriptEmbedded`,nextEmbedded:`text/javascript`}],[/[ \t\r\n]+/],[/<\/script\s*>/,{token:`@rematch`,next:`@pop`}]],scriptAfterTypeEquals:[[/"module"/,{token:`attribute.value`,switchTo:`@scriptWithCustomType.text/javascript`}],[/'module'/,{token:`attribute.value`,switchTo:`@scriptWithCustomType.text/javascript`}],[/"([^"]*)"/,{token:`attribute.value`,switchTo:`@scriptWithCustomType.$1`}],[/'([^']*)'/,{token:`attribute.value`,switchTo:`@scriptWithCustomType.$1`}],[/>/,{token:`delimiter`,next:`@scriptEmbedded`,nextEmbedded:`text/javascript`}],[/[ \t\r\n]+/],[/<\/script\s*>/,{token:`@rematch`,next:`@pop`}]],scriptWithCustomType:[[/>/,{token:`delimiter`,next:`@scriptEmbedded.$S2`,nextEmbedded:`$S2`}],[/"([^"]*)"/,`attribute.value`],[/'([^']*)'/,`attribute.value`],[/[\w\-]+/,`attribute.name`],[/=/,`delimiter`],[/[ \t\r\n]+/],[/<\/script\s*>/,{token:`@rematch`,next:`@pop`}]],scriptEmbedded:[[/<\/script/,{token:`@rematch`,next:`@pop`,nextEmbedded:`@pop`}],[/[^<]+/,``]],style:[[/type/,`attribute.name`,`@styleAfterType`],[/"([^"]*)"/,`attribute.value`],[/'([^']*)'/,`attribute.value`],[/[\w\-]+/,`attribute.name`],[/=/,`delimiter`],[/>/,{token:`delimiter`,next:`@styleEmbedded`,nextEmbedded:`text/css`}],[/[ \t\r\n]+/],[/(<\/)(style\s*)(>)/,[`delimiter`,`tag`,{token:`delimiter`,next:`@pop`}]]],styleAfterType:[[/=/,`delimiter`,`@styleAfterTypeEquals`],[/>/,{token:`delimiter`,next:`@styleEmbedded`,nextEmbedded:`text/css`}],[/[ \t\r\n]+/],[/<\/style\s*>/,{token:`@rematch`,next:`@pop`}]],styleAfterTypeEquals:[[/"([^"]*)"/,{token:`attribute.value`,switchTo:`@styleWithCustomType.$1`}],[/'([^']*)'/,{token:`attribute.value`,switchTo:`@styleWithCustomType.$1`}],[/>/,{token:`delimiter`,next:`@styleEmbedded`,nextEmbedded:`text/css`}],[/[ \t\r\n]+/],[/<\/style\s*>/,{token:`@rematch`,next:`@pop`}]],styleWithCustomType:[[/>/,{token:`delimiter`,next:`@styleEmbedded.$S2`,nextEmbedded:`$S2`}],[/"([^"]*)"/,`attribute.value`],[/'([^']*)'/,`attribute.value`],[/[\w\-]+/,`attribute.name`],[/=/,`delimiter`],[/[ \t\r\n]+/],[/<\/style\s*>/,{token:`@rematch`,next:`@pop`}]],styleEmbedded:[[/<\/style/,{token:`@rematch`,next:`@pop`,nextEmbedded:`@pop`}],[/[^<]+/,``]]}};export{n as conf,r as language};
|
||||||
@@ -1 +1 @@
|
|||||||
import{p as e,s as t}from"./initMonaco-CvAS2Es9.js";import{_ as n,a as r,c as i,d as a,f as o,g as s,h as c,i as l,l as u,m as d,n as f,o as p,p as m,r as h,s as g,t as _,u as v,v as y}from"./lspLanguageFeatures-CyUInuAF.js";var b=120*1e3,x=class{constructor(e){this._defaults=e,this._worker=null,this._client=null,this._idleCheckInterval=window.setInterval(()=>this._checkIfIdle(),30*1e3),this._lastUsedTime=0,this._configChangeListener=this._defaults.onDidChange(()=>this._stopWorker())}_stopWorker(){this._worker&&=(this._worker.dispose(),null),this._client=null}dispose(){clearInterval(this._idleCheckInterval),this._configChangeListener.dispose(),this._stopWorker()}_checkIfIdle(){this._worker&&Date.now()-this._lastUsedTime>b&&this._stopWorker()}_getClient(){return this._lastUsedTime=Date.now(),this._client||=(this._worker=t({moduleId:`vs/language/html/htmlWorker`,createWorker:()=>new Worker(new URL(`/app/assets/html.worker-BO6WuOEO.js`,``+import.meta.url),{type:`module`}),createData:{languageSettings:this._defaults.options,languageId:this._defaults.languageId},label:this._defaults.languageId}),this._worker.getProxy()),this._client}getLanguageServiceWorker(...e){let t;return this._getClient().then(e=>{t=e}).then(t=>{if(this._worker)return this._worker.withSyncedResources(e)}).then(e=>t)}},S=class extends _{constructor(e){super(e,[`.`,`:`,`<`,`"`,`=`,`/`])}};function C(t){let n=new x(t),o=(...e)=>n.getLanguageServiceWorker(...e),s=t.languageId;e.registerCompletionItemProvider(s,new S(o)),e.registerHoverProvider(s,new a(o)),e.registerDocumentHighlightProvider(s,new p(o)),e.registerLinkProvider(s,new g(o)),e.registerFoldingRangeProvider(s,new v(o)),e.registerDocumentSymbolProvider(s,new u(o)),e.registerSelectionRangeProvider(s,new d(o)),e.registerRenameProvider(s,new m(o)),s===`html`&&(e.registerDocumentFormattingEditProvider(s,new r(o)),e.registerDocumentRangeFormattingEditProvider(s,new i(o)))}function w(t){let n=[],o=[],s=new x(t);n.push(s);let c=(...e)=>s.getLanguageServiceWorker(...e);function l(){let{languageId:n,modeConfiguration:s}=t;E(o),s.completionItems&&o.push(e.registerCompletionItemProvider(n,new S(c))),s.hovers&&o.push(e.registerHoverProvider(n,new a(c))),s.documentHighlights&&o.push(e.registerDocumentHighlightProvider(n,new p(c))),s.links&&o.push(e.registerLinkProvider(n,new g(c))),s.documentSymbols&&o.push(e.registerDocumentSymbolProvider(n,new u(c))),s.rename&&o.push(e.registerRenameProvider(n,new m(c))),s.foldingRanges&&o.push(e.registerFoldingRangeProvider(n,new v(c))),s.selectionRanges&&o.push(e.registerSelectionRangeProvider(n,new d(c))),s.documentFormattingEdits&&o.push(e.registerDocumentFormattingEditProvider(n,new r(c))),s.documentRangeFormattingEdits&&o.push(e.registerDocumentRangeFormattingEditProvider(n,new i(c)))}return l(),n.push(T(o)),T(n)}function T(e){return{dispose:()=>E(e)}}function E(e){for(;e.length;)e.pop().dispose()}export{_ as CompletionAdapter,f as DefinitionAdapter,h as DiagnosticsAdapter,l as DocumentColorAdapter,r as DocumentFormattingEditProvider,p as DocumentHighlightAdapter,g as DocumentLinkAdapter,i as DocumentRangeFormattingEditProvider,u as DocumentSymbolAdapter,v as FoldingRangeAdapter,a as HoverAdapter,o as ReferenceAdapter,m as RenameAdapter,d as SelectionRangeAdapter,x as WorkerManager,c as fromPosition,s as fromRange,w as setupMode,C as setupMode1,n as toRange,y as toTextEdit};
|
import{p as e,s as t}from"./initMonaco-vLodlUu5.js";import{_ as n,a as r,c as i,d as a,f as o,g as s,h as c,i as l,l as u,m as d,n as f,o as p,p as m,r as h,s as g,t as _,u as v,v as y}from"./lspLanguageFeatures-B_clHcWM.js";var b=120*1e3,x=class{constructor(e){this._defaults=e,this._worker=null,this._client=null,this._idleCheckInterval=window.setInterval(()=>this._checkIfIdle(),30*1e3),this._lastUsedTime=0,this._configChangeListener=this._defaults.onDidChange(()=>this._stopWorker())}_stopWorker(){this._worker&&=(this._worker.dispose(),null),this._client=null}dispose(){clearInterval(this._idleCheckInterval),this._configChangeListener.dispose(),this._stopWorker()}_checkIfIdle(){this._worker&&Date.now()-this._lastUsedTime>b&&this._stopWorker()}_getClient(){return this._lastUsedTime=Date.now(),this._client||=(this._worker=t({moduleId:`vs/language/html/htmlWorker`,createWorker:()=>new Worker(new URL(`/app/assets/html.worker-BO6WuOEO.js`,``+import.meta.url),{type:`module`}),createData:{languageSettings:this._defaults.options,languageId:this._defaults.languageId},label:this._defaults.languageId}),this._worker.getProxy()),this._client}getLanguageServiceWorker(...e){let t;return this._getClient().then(e=>{t=e}).then(t=>{if(this._worker)return this._worker.withSyncedResources(e)}).then(e=>t)}},S=class extends _{constructor(e){super(e,[`.`,`:`,`<`,`"`,`=`,`/`])}};function C(t){let n=new x(t),o=(...e)=>n.getLanguageServiceWorker(...e),s=t.languageId;e.registerCompletionItemProvider(s,new S(o)),e.registerHoverProvider(s,new a(o)),e.registerDocumentHighlightProvider(s,new p(o)),e.registerLinkProvider(s,new g(o)),e.registerFoldingRangeProvider(s,new v(o)),e.registerDocumentSymbolProvider(s,new u(o)),e.registerSelectionRangeProvider(s,new d(o)),e.registerRenameProvider(s,new m(o)),s===`html`&&(e.registerDocumentFormattingEditProvider(s,new r(o)),e.registerDocumentRangeFormattingEditProvider(s,new i(o)))}function w(t){let n=[],o=[],s=new x(t);n.push(s);let c=(...e)=>s.getLanguageServiceWorker(...e);function l(){let{languageId:n,modeConfiguration:s}=t;E(o),s.completionItems&&o.push(e.registerCompletionItemProvider(n,new S(c))),s.hovers&&o.push(e.registerHoverProvider(n,new a(c))),s.documentHighlights&&o.push(e.registerDocumentHighlightProvider(n,new p(c))),s.links&&o.push(e.registerLinkProvider(n,new g(c))),s.documentSymbols&&o.push(e.registerDocumentSymbolProvider(n,new u(c))),s.rename&&o.push(e.registerRenameProvider(n,new m(c))),s.foldingRanges&&o.push(e.registerFoldingRangeProvider(n,new v(c))),s.selectionRanges&&o.push(e.registerSelectionRangeProvider(n,new d(c))),s.documentFormattingEdits&&o.push(e.registerDocumentFormattingEditProvider(n,new r(c))),s.documentRangeFormattingEdits&&o.push(e.registerDocumentRangeFormattingEditProvider(n,new i(c)))}return l(),n.push(T(o)),T(n)}function T(e){return{dispose:()=>E(e)}}function E(e){for(;e.length;)e.pop().dispose()}export{_ as CompletionAdapter,f as DefinitionAdapter,h as DiagnosticsAdapter,l as DocumentColorAdapter,r as DocumentFormattingEditProvider,p as DocumentHighlightAdapter,g as DocumentLinkAdapter,i as DocumentRangeFormattingEditProvider,u as DocumentSymbolAdapter,v as FoldingRangeAdapter,a as HoverAdapter,o as ReferenceAdapter,m as RenameAdapter,d as SelectionRangeAdapter,x as WorkerManager,c as fromPosition,s as fromRange,w as setupMode,C as setupMode1,n as toRange,y as toTextEdit};
|
||||||
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
@@ -1 +1 @@
|
|||||||
import{conf as e,language as t}from"./typescript-CnV6nxa6.js";var n=e,r={defaultToken:`invalid`,tokenPostfix:`.js`,keywords:`break.case.catch.class.continue.const.constructor.debugger.default.delete.do.else.export.extends.false.finally.for.from.function.get.if.import.in.instanceof.let.new.null.return.set.static.super.switch.symbol.this.throw.true.try.typeof.undefined.var.void.while.with.yield.async.await.of`.split(`.`),typeKeywords:[],operators:t.operators,symbols:t.symbols,escapes:t.escapes,digits:t.digits,octaldigits:t.octaldigits,binarydigits:t.binarydigits,hexdigits:t.hexdigits,regexpctl:t.regexpctl,regexpesc:t.regexpesc,tokenizer:t.tokenizer};export{n as conf,r as language};
|
import{conf as e,language as t}from"./typescript-Bgmb_oj5.js";var n=e,r={defaultToken:`invalid`,tokenPostfix:`.js`,keywords:`break.case.catch.class.continue.const.constructor.debugger.default.delete.do.else.export.extends.false.finally.for.from.function.get.if.import.in.instanceof.let.new.null.return.set.static.super.switch.symbol.this.throw.true.try.typeof.undefined.var.void.while.with.yield.async.await.of`.split(`.`),typeKeywords:[],operators:t.operators,symbols:t.symbols,escapes:t.escapes,digits:t.digits,octaldigits:t.octaldigits,binarydigits:t.binarydigits,hexdigits:t.hexdigits,regexpctl:t.regexpctl,regexpesc:t.regexpesc,tokenizer:t.tokenizer};export{n as conf,r as language};
|
||||||
@@ -1,4 +1,4 @@
|
|||||||
import{f as e,p as t,s as n}from"./initMonaco-CvAS2Es9.js";import{_ as r,a as i,c as a,d as o,f as s,g as c,h as l,i as u,l as d,m as f,n as p,o as m,p as h,r as g,s as _,t as v,u as y,v as b}from"./lspLanguageFeatures-CyUInuAF.js";var x=120*1e3,S=class{constructor(e){this._defaults=e,this._worker=null,this._client=null,this._idleCheckInterval=window.setInterval(()=>this._checkIfIdle(),30*1e3),this._lastUsedTime=0,this._configChangeListener=this._defaults.onDidChange(()=>this._stopWorker())}_stopWorker(){this._worker&&=(this._worker.dispose(),null),this._client=null}dispose(){clearInterval(this._idleCheckInterval),this._configChangeListener.dispose(),this._stopWorker()}_checkIfIdle(){this._worker&&Date.now()-this._lastUsedTime>x&&this._stopWorker()}_getClient(){return this._lastUsedTime=Date.now(),this._client||=(this._worker=n({moduleId:`vs/language/json/jsonWorker`,createWorker:()=>new Worker(new URL(`/app/assets/json.worker-BkJRGcCJ.js`,``+import.meta.url),{type:`module`}),label:this._defaults.languageId,createData:{languageSettings:this._defaults.diagnosticsOptions,languageId:this._defaults.languageId,enableSchemaRequest:this._defaults.diagnosticsOptions.enableSchemaRequest}}),this._worker.getProxy()),this._client}getLanguageServiceWorker(...e){let t;return this._getClient().then(e=>{t=e}).then(t=>{if(this._worker)return this._worker.withSyncedResources(e)}).then(e=>t)}};function C(e,t=!1){let n=e.length,r=0,i=``,a=0,o=16,s=0,c=0,l=0,u=0,d=0;function f(t,n){let i=0,a=0;for(;i<t;){let t=e.charCodeAt(r);if(t>=48&&t<=57)a=a*16+t-48;else if(t>=65&&t<=70)a=a*16+t-65+10;else if(t>=97&&t<=102)a=a*16+t-97+10;else break;r++,i++}return i<t&&(a=-1),a}function p(e){r=e,i=``,a=0,o=16,d=0}function m(){let t=r;if(e.charCodeAt(r)===48)r++;else for(r++;r<e.length&&E(e.charCodeAt(r));)r++;if(r<e.length&&e.charCodeAt(r)===46)if(r++,r<e.length&&E(e.charCodeAt(r)))for(r++;r<e.length&&E(e.charCodeAt(r));)r++;else return d=3,e.substring(t,r);let n=r;if(r<e.length&&(e.charCodeAt(r)===69||e.charCodeAt(r)===101))if(r++,(r<e.length&&e.charCodeAt(r)===43||e.charCodeAt(r)===45)&&r++,r<e.length&&E(e.charCodeAt(r))){for(r++;r<e.length&&E(e.charCodeAt(r));)r++;n=r}else d=3;return e.substring(t,n)}function h(){let t=``,i=r;for(;;){if(r>=n){t+=e.substring(i,r),d=2;break}let a=e.charCodeAt(r);if(a===34){t+=e.substring(i,r),r++;break}if(a===92){if(t+=e.substring(i,r),r++,r>=n){d=2;break}switch(e.charCodeAt(r++)){case 34:t+=`"`;break;case 92:t+=`\\`;break;case 47:t+=`/`;break;case 98:t+=`\b`;break;case 102:t+=`\f`;break;case 110:t+=`
|
import{f as e,p as t,s as n}from"./initMonaco-vLodlUu5.js";import{_ as r,a as i,c as a,d as o,f as s,g as c,h as l,i as u,l as d,m as f,n as p,o as m,p as h,r as g,s as _,t as v,u as y,v as b}from"./lspLanguageFeatures-B_clHcWM.js";var x=120*1e3,S=class{constructor(e){this._defaults=e,this._worker=null,this._client=null,this._idleCheckInterval=window.setInterval(()=>this._checkIfIdle(),30*1e3),this._lastUsedTime=0,this._configChangeListener=this._defaults.onDidChange(()=>this._stopWorker())}_stopWorker(){this._worker&&=(this._worker.dispose(),null),this._client=null}dispose(){clearInterval(this._idleCheckInterval),this._configChangeListener.dispose(),this._stopWorker()}_checkIfIdle(){this._worker&&Date.now()-this._lastUsedTime>x&&this._stopWorker()}_getClient(){return this._lastUsedTime=Date.now(),this._client||=(this._worker=n({moduleId:`vs/language/json/jsonWorker`,createWorker:()=>new Worker(new URL(`/app/assets/json.worker-BkJRGcCJ.js`,``+import.meta.url),{type:`module`}),label:this._defaults.languageId,createData:{languageSettings:this._defaults.diagnosticsOptions,languageId:this._defaults.languageId,enableSchemaRequest:this._defaults.diagnosticsOptions.enableSchemaRequest}}),this._worker.getProxy()),this._client}getLanguageServiceWorker(...e){let t;return this._getClient().then(e=>{t=e}).then(t=>{if(this._worker)return this._worker.withSyncedResources(e)}).then(e=>t)}};function C(e,t=!1){let n=e.length,r=0,i=``,a=0,o=16,s=0,c=0,l=0,u=0,d=0;function f(t,n){let i=0,a=0;for(;i<t;){let t=e.charCodeAt(r);if(t>=48&&t<=57)a=a*16+t-48;else if(t>=65&&t<=70)a=a*16+t-65+10;else if(t>=97&&t<=102)a=a*16+t-97+10;else break;r++,i++}return i<t&&(a=-1),a}function p(e){r=e,i=``,a=0,o=16,d=0}function m(){let t=r;if(e.charCodeAt(r)===48)r++;else for(r++;r<e.length&&E(e.charCodeAt(r));)r++;if(r<e.length&&e.charCodeAt(r)===46)if(r++,r<e.length&&E(e.charCodeAt(r)))for(r++;r<e.length&&E(e.charCodeAt(r));)r++;else return d=3,e.substring(t,r);let n=r;if(r<e.length&&(e.charCodeAt(r)===69||e.charCodeAt(r)===101))if(r++,(r<e.length&&e.charCodeAt(r)===43||e.charCodeAt(r)===45)&&r++,r<e.length&&E(e.charCodeAt(r))){for(r++;r<e.length&&E(e.charCodeAt(r));)r++;n=r}else d=3;return e.substring(t,n)}function h(){let t=``,i=r;for(;;){if(r>=n){t+=e.substring(i,r),d=2;break}let a=e.charCodeAt(r);if(a===34){t+=e.substring(i,r),r++;break}if(a===92){if(t+=e.substring(i,r),r++,r>=n){d=2;break}switch(e.charCodeAt(r++)){case 34:t+=`"`;break;case 92:t+=`\\`;break;case 47:t+=`/`;break;case 98:t+=`\b`;break;case 102:t+=`\f`;break;case 110:t+=`
|
||||||
`;break;case 114:t+=`\r`;break;case 116:t+=` `;break;case 117:let e=f(4);e>=0?t+=String.fromCharCode(e):d=4;break;default:d=5}i=r;continue}if(a>=0&&a<=31)if(T(a)){t+=e.substring(i,r),d=2;break}else d=6;r++}return t}function g(){if(i=``,d=0,a=r,c=s,u=l,r>=n)return a=n,o=17;let t=e.charCodeAt(r);if(w(t)){do r++,i+=String.fromCharCode(t),t=e.charCodeAt(r);while(w(t));return o=15}if(T(t))return r++,i+=String.fromCharCode(t),t===13&&e.charCodeAt(r)===10&&(r++,i+=`
|
`;break;case 114:t+=`\r`;break;case 116:t+=` `;break;case 117:let e=f(4);e>=0?t+=String.fromCharCode(e):d=4;break;default:d=5}i=r;continue}if(a>=0&&a<=31)if(T(a)){t+=e.substring(i,r),d=2;break}else d=6;r++}return t}function g(){if(i=``,d=0,a=r,c=s,u=l,r>=n)return a=n,o=17;let t=e.charCodeAt(r);if(w(t)){do r++,i+=String.fromCharCode(t),t=e.charCodeAt(r);while(w(t));return o=15}if(T(t))return r++,i+=String.fromCharCode(t),t===13&&e.charCodeAt(r)===10&&(r++,i+=`
|
||||||
`),s++,l=r,o=14;switch(t){case 123:return r++,o=1;case 125:return r++,o=2;case 91:return r++,o=3;case 93:return r++,o=4;case 58:return r++,o=6;case 44:return r++,o=5;case 34:return r++,i=h(),o=10;case 47:let c=r-1;if(e.charCodeAt(r+1)===47){for(r+=2;r<n&&!T(e.charCodeAt(r));)r++;return i=e.substring(c,r),o=12}if(e.charCodeAt(r+1)===42){r+=2;let t=n-1,a=!1;for(;r<t;){let t=e.charCodeAt(r);if(t===42&&e.charCodeAt(r+1)===47){r+=2,a=!0;break}r++,T(t)&&(t===13&&e.charCodeAt(r)===10&&r++,s++,l=r)}return a||(r++,d=1),i=e.substring(c,r),o=13}return i+=String.fromCharCode(t),r++,o=16;case 45:if(i+=String.fromCharCode(t),r++,r===n||!E(e.charCodeAt(r)))return o=16;case 48:case 49:case 50:case 51:case 52:case 53:case 54:case 55:case 56:case 57:return i+=m(),o=11;default:for(;r<n&&_(t);)r++,t=e.charCodeAt(r);if(a!==r){switch(i=e.substring(a,r),i){case`true`:return o=8;case`false`:return o=9;case`null`:return o=7}return o=16}return i+=String.fromCharCode(t),r++,o=16}}function _(e){if(w(e)||T(e))return!1;switch(e){case 125:case 93:case 123:case 91:case 34:case 58:case 44:case 47:return!1}return!0}function v(){let e;do e=g();while(e>=12&&e<=15);return e}return{setPosition:p,getPosition:()=>r,scan:t?v:g,getToken:()=>o,getTokenValue:()=>i,getTokenOffset:()=>a,getTokenLength:()=>r-a,getTokenStartLine:()=>c,getTokenStartCharacter:()=>a-u,getTokenError:()=>d}}function w(e){return e===32||e===9}function T(e){return e===10||e===13}function E(e){return e>=48&&e<=57}var D;(function(e){e[e.lineFeed=10]=`lineFeed`,e[e.carriageReturn=13]=`carriageReturn`,e[e.space=32]=`space`,e[e._0=48]=`_0`,e[e._1=49]=`_1`,e[e._2=50]=`_2`,e[e._3=51]=`_3`,e[e._4=52]=`_4`,e[e._5=53]=`_5`,e[e._6=54]=`_6`,e[e._7=55]=`_7`,e[e._8=56]=`_8`,e[e._9=57]=`_9`,e[e.a=97]=`a`,e[e.b=98]=`b`,e[e.c=99]=`c`,e[e.d=100]=`d`,e[e.e=101]=`e`,e[e.f=102]=`f`,e[e.g=103]=`g`,e[e.h=104]=`h`,e[e.i=105]=`i`,e[e.j=106]=`j`,e[e.k=107]=`k`,e[e.l=108]=`l`,e[e.m=109]=`m`,e[e.n=110]=`n`,e[e.o=111]=`o`,e[e.p=112]=`p`,e[e.q=113]=`q`,e[e.r=114]=`r`,e[e.s=115]=`s`,e[e.t=116]=`t`,e[e.u=117]=`u`,e[e.v=118]=`v`,e[e.w=119]=`w`,e[e.x=120]=`x`,e[e.y=121]=`y`,e[e.z=122]=`z`,e[e.A=65]=`A`,e[e.B=66]=`B`,e[e.C=67]=`C`,e[e.D=68]=`D`,e[e.E=69]=`E`,e[e.F=70]=`F`,e[e.G=71]=`G`,e[e.H=72]=`H`,e[e.I=73]=`I`,e[e.J=74]=`J`,e[e.K=75]=`K`,e[e.L=76]=`L`,e[e.M=77]=`M`,e[e.N=78]=`N`,e[e.O=79]=`O`,e[e.P=80]=`P`,e[e.Q=81]=`Q`,e[e.R=82]=`R`,e[e.S=83]=`S`,e[e.T=84]=`T`,e[e.U=85]=`U`,e[e.V=86]=`V`,e[e.W=87]=`W`,e[e.X=88]=`X`,e[e.Y=89]=`Y`,e[e.Z=90]=`Z`,e[e.asterisk=42]=`asterisk`,e[e.backslash=92]=`backslash`,e[e.closeBrace=125]=`closeBrace`,e[e.closeBracket=93]=`closeBracket`,e[e.colon=58]=`colon`,e[e.comma=44]=`comma`,e[e.dot=46]=`dot`,e[e.doubleQuote=34]=`doubleQuote`,e[e.minus=45]=`minus`,e[e.openBrace=123]=`openBrace`,e[e.openBracket=91]=`openBracket`,e[e.plus=43]=`plus`,e[e.slash=47]=`slash`,e[e.formFeed=12]=`formFeed`,e[e.tab=9]=`tab`})(D||={}),Array(20).fill(0).map((e,t)=>` `.repeat(t));var O=200;Array(O).fill(0).map((e,t)=>`
|
`),s++,l=r,o=14;switch(t){case 123:return r++,o=1;case 125:return r++,o=2;case 91:return r++,o=3;case 93:return r++,o=4;case 58:return r++,o=6;case 44:return r++,o=5;case 34:return r++,i=h(),o=10;case 47:let c=r-1;if(e.charCodeAt(r+1)===47){for(r+=2;r<n&&!T(e.charCodeAt(r));)r++;return i=e.substring(c,r),o=12}if(e.charCodeAt(r+1)===42){r+=2;let t=n-1,a=!1;for(;r<t;){let t=e.charCodeAt(r);if(t===42&&e.charCodeAt(r+1)===47){r+=2,a=!0;break}r++,T(t)&&(t===13&&e.charCodeAt(r)===10&&r++,s++,l=r)}return a||(r++,d=1),i=e.substring(c,r),o=13}return i+=String.fromCharCode(t),r++,o=16;case 45:if(i+=String.fromCharCode(t),r++,r===n||!E(e.charCodeAt(r)))return o=16;case 48:case 49:case 50:case 51:case 52:case 53:case 54:case 55:case 56:case 57:return i+=m(),o=11;default:for(;r<n&&_(t);)r++,t=e.charCodeAt(r);if(a!==r){switch(i=e.substring(a,r),i){case`true`:return o=8;case`false`:return o=9;case`null`:return o=7}return o=16}return i+=String.fromCharCode(t),r++,o=16}}function _(e){if(w(e)||T(e))return!1;switch(e){case 125:case 93:case 123:case 91:case 34:case 58:case 44:case 47:return!1}return!0}function v(){let e;do e=g();while(e>=12&&e<=15);return e}return{setPosition:p,getPosition:()=>r,scan:t?v:g,getToken:()=>o,getTokenValue:()=>i,getTokenOffset:()=>a,getTokenLength:()=>r-a,getTokenStartLine:()=>c,getTokenStartCharacter:()=>a-u,getTokenError:()=>d}}function w(e){return e===32||e===9}function T(e){return e===10||e===13}function E(e){return e>=48&&e<=57}var D;(function(e){e[e.lineFeed=10]=`lineFeed`,e[e.carriageReturn=13]=`carriageReturn`,e[e.space=32]=`space`,e[e._0=48]=`_0`,e[e._1=49]=`_1`,e[e._2=50]=`_2`,e[e._3=51]=`_3`,e[e._4=52]=`_4`,e[e._5=53]=`_5`,e[e._6=54]=`_6`,e[e._7=55]=`_7`,e[e._8=56]=`_8`,e[e._9=57]=`_9`,e[e.a=97]=`a`,e[e.b=98]=`b`,e[e.c=99]=`c`,e[e.d=100]=`d`,e[e.e=101]=`e`,e[e.f=102]=`f`,e[e.g=103]=`g`,e[e.h=104]=`h`,e[e.i=105]=`i`,e[e.j=106]=`j`,e[e.k=107]=`k`,e[e.l=108]=`l`,e[e.m=109]=`m`,e[e.n=110]=`n`,e[e.o=111]=`o`,e[e.p=112]=`p`,e[e.q=113]=`q`,e[e.r=114]=`r`,e[e.s=115]=`s`,e[e.t=116]=`t`,e[e.u=117]=`u`,e[e.v=118]=`v`,e[e.w=119]=`w`,e[e.x=120]=`x`,e[e.y=121]=`y`,e[e.z=122]=`z`,e[e.A=65]=`A`,e[e.B=66]=`B`,e[e.C=67]=`C`,e[e.D=68]=`D`,e[e.E=69]=`E`,e[e.F=70]=`F`,e[e.G=71]=`G`,e[e.H=72]=`H`,e[e.I=73]=`I`,e[e.J=74]=`J`,e[e.K=75]=`K`,e[e.L=76]=`L`,e[e.M=77]=`M`,e[e.N=78]=`N`,e[e.O=79]=`O`,e[e.P=80]=`P`,e[e.Q=81]=`Q`,e[e.R=82]=`R`,e[e.S=83]=`S`,e[e.T=84]=`T`,e[e.U=85]=`U`,e[e.V=86]=`V`,e[e.W=87]=`W`,e[e.X=88]=`X`,e[e.Y=89]=`Y`,e[e.Z=90]=`Z`,e[e.asterisk=42]=`asterisk`,e[e.backslash=92]=`backslash`,e[e.closeBrace=125]=`closeBrace`,e[e.closeBracket=93]=`closeBracket`,e[e.colon=58]=`colon`,e[e.comma=44]=`comma`,e[e.dot=46]=`dot`,e[e.doubleQuote=34]=`doubleQuote`,e[e.minus=45]=`minus`,e[e.openBrace=123]=`openBrace`,e[e.openBracket=91]=`openBracket`,e[e.plus=43]=`plus`,e[e.slash=47]=`slash`,e[e.formFeed=12]=`formFeed`,e[e.tab=9]=`tab`})(D||={}),Array(20).fill(0).map((e,t)=>` `.repeat(t));var O=200;Array(O).fill(0).map((e,t)=>`
|
||||||
`+` `.repeat(t)),Array(O).fill(0).map((e,t)=>`\r`+` `.repeat(t)),Array(O).fill(0).map((e,t)=>`\r
|
`+` `.repeat(t)),Array(O).fill(0).map((e,t)=>`\r`+` `.repeat(t)),Array(O).fill(0).map((e,t)=>`\r
|
||||||
@@ -1 +1 @@
|
|||||||
import{p as e}from"./initMonaco-CvAS2Es9.js";var t=[`area`,`base`,`br`,`col`,`embed`,`hr`,`img`,`input`,`keygen`,`link`,`menuitem`,`meta`,`param`,`source`,`track`,`wbr`],n={wordPattern:/(-?\d*\.\d\w*)|([^\`\~\!\@\$\^\&\*\(\)\=\+\[\{\]\}\\\|\;\:\'\"\,\.\<\>\/\s]+)/g,brackets:[[`<!--`,`-->`],[`<`,`>`],[`{{`,`}}`],[`{%`,`%}`],[`{`,`}`],[`(`,`)`]],autoClosingPairs:[{open:`{`,close:`}`},{open:`%`,close:`%`},{open:`[`,close:`]`},{open:`(`,close:`)`},{open:`"`,close:`"`},{open:`'`,close:`'`}],surroundingPairs:[{open:`<`,close:`>`},{open:`"`,close:`"`},{open:`'`,close:`'`}],onEnterRules:[{beforeText:RegExp(`<(?!(?:${t.join(`|`)}))(\\w[\\w\\d]*)([^/>]*(?!/)>)[^<]*$`,`i`),afterText:/^<\/(\w[\w\d]*)\s*>$/i,action:{indentAction:e.IndentAction.IndentOutdent}},{beforeText:RegExp(`<(?!(?:${t.join(`|`)}))(\\w[\\w\\d]*)([^/>]*(?!/)>)[^<]*$`,`i`),action:{indentAction:e.IndentAction.Indent}}]},r={defaultToken:``,tokenPostfix:``,builtinTags:`if.else.elseif.endif.render.assign.capture.endcapture.case.endcase.comment.endcomment.cycle.decrement.for.endfor.include.increment.layout.raw.endraw.render.tablerow.endtablerow.unless.endunless`.split(`.`),builtinFilters:`abs.append.at_least.at_most.capitalize.ceil.compact.date.default.divided_by.downcase.escape.escape_once.first.floor.join.json.last.lstrip.map.minus.modulo.newline_to_br.plus.prepend.remove.remove_first.replace.replace_first.reverse.round.rstrip.size.slice.sort.sort_natural.split.strip.strip_html.strip_newlines.times.truncate.truncatewords.uniq.upcase.url_decode.url_encode.where`.split(`.`),constants:[`true`,`false`],operators:[`==`,`!=`,`>`,`<`,`>=`,`<=`],symbol:/[=><!]+/,identifier:/[a-zA-Z_][\w]*/,tokenizer:{root:[[/\{\%\s*comment\s*\%\}/,`comment.start.liquid`,`@comment`],[/\{\{/,{token:`@rematch`,switchTo:`@liquidState.root`}],[/\{\%/,{token:`@rematch`,switchTo:`@liquidState.root`}],[/(<)([\w\-]+)(\/>)/,[`delimiter.html`,`tag.html`,`delimiter.html`]],[/(<)([:\w]+)/,[`delimiter.html`,{token:`tag.html`,next:`@otherTag`}]],[/(<\/)([\w\-]+)/,[`delimiter.html`,{token:`tag.html`,next:`@otherTag`}]],[/</,`delimiter.html`],[/\{/,`delimiter.html`],[/[^<{]+/]],comment:[[/\{\%\s*endcomment\s*\%\}/,`comment.end.liquid`,`@pop`],[/./,`comment.content.liquid`]],otherTag:[[/\{\{/,{token:`@rematch`,switchTo:`@liquidState.otherTag`}],[/\{\%/,{token:`@rematch`,switchTo:`@liquidState.otherTag`}],[/\/?>/,`delimiter.html`,`@pop`],[/"([^"]*)"/,`attribute.value`],[/'([^']*)'/,`attribute.value`],[/[\w\-]+/,`attribute.name`],[/=/,`delimiter`],[/[ \t\r\n]+/]],liquidState:[[/\{\{/,`delimiter.output.liquid`],[/\}\}/,{token:`delimiter.output.liquid`,switchTo:`@$S2.$S3`}],[/\{\%/,`delimiter.tag.liquid`],[/raw\s*\%\}/,`delimiter.tag.liquid`,`@liquidRaw`],[/\%\}/,{token:`delimiter.tag.liquid`,switchTo:`@$S2.$S3`}],{include:`liquidRoot`}],liquidRaw:[[/^(?!\{\%\s*endraw\s*\%\}).+/],[/\{\%/,`delimiter.tag.liquid`],[/@identifier/],[/\%\}/,{token:`delimiter.tag.liquid`,next:`@root`}]],liquidRoot:[[/\d+(\.\d+)?/,`number.liquid`],[/"[^"]*"/,`string.liquid`],[/'[^']*'/,`string.liquid`],[/\s+/],[/@symbol/,{cases:{"@operators":`operator.liquid`,"@default":``}}],[/\./],[/@identifier/,{cases:{"@constants":`keyword.liquid`,"@builtinFilters":`predefined.liquid`,"@builtinTags":`predefined.liquid`,"@default":`variable.liquid`}}],[/[^}|%]/,`variable.liquid`]]}};export{n as conf,r as language};
|
import{p as e}from"./initMonaco-vLodlUu5.js";var t=[`area`,`base`,`br`,`col`,`embed`,`hr`,`img`,`input`,`keygen`,`link`,`menuitem`,`meta`,`param`,`source`,`track`,`wbr`],n={wordPattern:/(-?\d*\.\d\w*)|([^\`\~\!\@\$\^\&\*\(\)\=\+\[\{\]\}\\\|\;\:\'\"\,\.\<\>\/\s]+)/g,brackets:[[`<!--`,`-->`],[`<`,`>`],[`{{`,`}}`],[`{%`,`%}`],[`{`,`}`],[`(`,`)`]],autoClosingPairs:[{open:`{`,close:`}`},{open:`%`,close:`%`},{open:`[`,close:`]`},{open:`(`,close:`)`},{open:`"`,close:`"`},{open:`'`,close:`'`}],surroundingPairs:[{open:`<`,close:`>`},{open:`"`,close:`"`},{open:`'`,close:`'`}],onEnterRules:[{beforeText:RegExp(`<(?!(?:${t.join(`|`)}))(\\w[\\w\\d]*)([^/>]*(?!/)>)[^<]*$`,`i`),afterText:/^<\/(\w[\w\d]*)\s*>$/i,action:{indentAction:e.IndentAction.IndentOutdent}},{beforeText:RegExp(`<(?!(?:${t.join(`|`)}))(\\w[\\w\\d]*)([^/>]*(?!/)>)[^<]*$`,`i`),action:{indentAction:e.IndentAction.Indent}}]},r={defaultToken:``,tokenPostfix:``,builtinTags:`if.else.elseif.endif.render.assign.capture.endcapture.case.endcase.comment.endcomment.cycle.decrement.for.endfor.include.increment.layout.raw.endraw.render.tablerow.endtablerow.unless.endunless`.split(`.`),builtinFilters:`abs.append.at_least.at_most.capitalize.ceil.compact.date.default.divided_by.downcase.escape.escape_once.first.floor.join.json.last.lstrip.map.minus.modulo.newline_to_br.plus.prepend.remove.remove_first.replace.replace_first.reverse.round.rstrip.size.slice.sort.sort_natural.split.strip.strip_html.strip_newlines.times.truncate.truncatewords.uniq.upcase.url_decode.url_encode.where`.split(`.`),constants:[`true`,`false`],operators:[`==`,`!=`,`>`,`<`,`>=`,`<=`],symbol:/[=><!]+/,identifier:/[a-zA-Z_][\w]*/,tokenizer:{root:[[/\{\%\s*comment\s*\%\}/,`comment.start.liquid`,`@comment`],[/\{\{/,{token:`@rematch`,switchTo:`@liquidState.root`}],[/\{\%/,{token:`@rematch`,switchTo:`@liquidState.root`}],[/(<)([\w\-]+)(\/>)/,[`delimiter.html`,`tag.html`,`delimiter.html`]],[/(<)([:\w]+)/,[`delimiter.html`,{token:`tag.html`,next:`@otherTag`}]],[/(<\/)([\w\-]+)/,[`delimiter.html`,{token:`tag.html`,next:`@otherTag`}]],[/</,`delimiter.html`],[/\{/,`delimiter.html`],[/[^<{]+/]],comment:[[/\{\%\s*endcomment\s*\%\}/,`comment.end.liquid`,`@pop`],[/./,`comment.content.liquid`]],otherTag:[[/\{\{/,{token:`@rematch`,switchTo:`@liquidState.otherTag`}],[/\{\%/,{token:`@rematch`,switchTo:`@liquidState.otherTag`}],[/\/?>/,`delimiter.html`,`@pop`],[/"([^"]*)"/,`attribute.value`],[/'([^']*)'/,`attribute.value`],[/[\w\-]+/,`attribute.name`],[/=/,`delimiter`],[/[ \t\r\n]+/]],liquidState:[[/\{\{/,`delimiter.output.liquid`],[/\}\}/,{token:`delimiter.output.liquid`,switchTo:`@$S2.$S3`}],[/\{\%/,`delimiter.tag.liquid`],[/raw\s*\%\}/,`delimiter.tag.liquid`,`@liquidRaw`],[/\%\}/,{token:`delimiter.tag.liquid`,switchTo:`@$S2.$S3`}],{include:`liquidRoot`}],liquidRaw:[[/^(?!\{\%\s*endraw\s*\%\}).+/],[/\{\%/,`delimiter.tag.liquid`],[/@identifier/],[/\%\}/,{token:`delimiter.tag.liquid`,next:`@root`}]],liquidRoot:[[/\d+(\.\d+)?/,`number.liquid`],[/"[^"]*"/,`string.liquid`],[/'[^']*'/,`string.liquid`],[/\s+/],[/@symbol/,{cases:{"@operators":`operator.liquid`,"@default":``}}],[/\./],[/@identifier/,{cases:{"@constants":`keyword.liquid`,"@builtinFilters":`predefined.liquid`,"@builtinTags":`predefined.liquid`,"@default":`variable.liquid`}}],[/[^}|%]/,`variable.liquid`]]}};export{n as conf,r as language};
|
||||||
+1
-1
File diff suppressed because one or more lines are too long
@@ -1 +1 @@
|
|||||||
import{p as e}from"./initMonaco-CvAS2Es9.js";var t={comments:{blockComment:[`{/*`,`*/}`]},brackets:[[`{`,`}`]],autoClosingPairs:[{open:`"`,close:`"`},{open:`'`,close:`'`},{open:`“`,close:`”`},{open:`‘`,close:`’`},{open:"`",close:"`"},{open:`{`,close:`}`},{open:`(`,close:`)`},{open:`_`,close:`_`},{open:`**`,close:`**`},{open:`<`,close:`>`}],onEnterRules:[{beforeText:/^\s*- .+/,action:{indentAction:e.IndentAction.None,appendText:`- `}},{beforeText:/^\s*\+ .+/,action:{indentAction:e.IndentAction.None,appendText:`+ `}},{beforeText:/^\s*\* .+/,action:{indentAction:e.IndentAction.None,appendText:`* `}},{beforeText:/^> /,action:{indentAction:e.IndentAction.None,appendText:`> `}},{beforeText:/<\w+/,action:{indentAction:e.IndentAction.Indent}},{beforeText:/\s+>\s*$/,action:{indentAction:e.IndentAction.Indent}},{beforeText:/<\/\w+>/,action:{indentAction:e.IndentAction.Outdent}},...Array.from({length:100},(t,n)=>({beforeText:RegExp(`^${n}\\. .+`),action:{indentAction:e.IndentAction.None,appendText:`${n+1}. `}}))]},n={defaultToken:``,tokenPostfix:`.mdx`,control:/[!#()*+.[\\\]_`{}\-]/,escapes:/\\@control/,tokenizer:{root:[[/^---$/,{token:`meta.content`,next:`@frontmatter`,nextEmbedded:`yaml`}],[/^\s*import/,{token:`keyword`,next:`@import`,nextEmbedded:`js`}],[/^\s*export/,{token:`keyword`,next:`@export`,nextEmbedded:`js`}],[/<\w+/,{token:`type.identifier`,next:`@jsx`}],[/<\/?\w+>/,`type.identifier`],[/^(\s*)(>*\s*)(#{1,6}\s)/,[{token:`white`},{token:`comment`},{token:`keyword`,next:`@header`}]],[/^(\s*)(>*\s*)([*+-])(\s+)/,[`white`,`comment`,`keyword`,`white`]],[/^(\s*)(>*\s*)(\d{1,9}\.)(\s+)/,[`white`,`comment`,`number`,`white`]],[/^(\s*)(>*\s*)(\d{1,9}\.)(\s+)/,[`white`,`comment`,`number`,`white`]],[/^(\s*)(>*\s*)(-{3,}|\*{3,}|_{3,})$/,[`white`,`comment`,`keyword`]],[/`{3,}(\s.*)?$/,{token:`string`,next:`@codeblock_backtick`}],[/~{3,}(\s.*)?$/,{token:`string`,next:`@codeblock_tilde`}],[/`{3,}(\S+).*$/,{token:`string`,next:`@codeblock_highlight_backtick`,nextEmbedded:`$1`}],[/~{3,}(\S+).*$/,{token:`string`,next:`@codeblock_highlight_tilde`,nextEmbedded:`$1`}],[/^(\s*)(-{4,})$/,[`white`,`comment`]],[/^(\s*)(>+)/,[`white`,`comment`]],{include:`content`}],content:[[/(\[)(.+)(]\()(.+)(\s+".*")(\))/,[``,`string.link`,``,`type.identifier`,`string.link`,``]],[/(\[)(.+)(]\()(.+)(\))/,[``,`type.identifier`,``,`string.link`,``]],[/(\[)(.+)(]\[)(.+)(])/,[``,`type.identifier`,``,`type.identifier`,``]],[/(\[)(.+)(]:\s+)(\S*)/,[``,`type.identifier`,``,`string.link`]],[/(\[)(.+)(])/,[``,`type.identifier`,``]],[/`.*`/,`variable.source`],[/_/,{token:`emphasis`,next:`@emphasis_underscore`}],[/\*(?!\*)/,{token:`emphasis`,next:`@emphasis_asterisk`}],[/\*\*/,{token:`strong`,next:`@strong`}],[/{/,{token:`delimiter.bracket`,next:`@expression`,nextEmbedded:`js`}]],import:[[/'\s*(;|$)/,{token:`string`,next:`@pop`,nextEmbedded:`@pop`}]],expression:[[/{/,{token:`delimiter.bracket`,next:`@expression`}],[/}/,{token:`delimiter.bracket`,next:`@pop`,nextEmbedded:`@pop`}]],export:[[/^\s*$/,{token:`delimiter.bracket`,next:`@pop`,nextEmbedded:`@pop`}]],jsx:[[/\s+/,``],[/(\w+)(=)("(?:[^"\\]|\\.)*")/,[`attribute.name`,`operator`,`string`]],[/(\w+)(=)('(?:[^'\\]|\\.)*')/,[`attribute.name`,`operator`,`string`]],[/(\w+(?=\s|>|={|$))/,[`attribute.name`]],[/={/,{token:`delimiter.bracket`,next:`@expression`,nextEmbedded:`js`}],[/>/,{token:`type.identifier`,next:`@pop`}]],header:[[/.$/,{token:`keyword`,next:`@pop`}],{include:`content`},[/./,{token:`keyword`}]],strong:[[/\*\*/,{token:`strong`,next:`@pop`}],{include:`content`},[/./,{token:`strong`}]],emphasis_underscore:[[/_/,{token:`emphasis`,next:`@pop`}],{include:`content`},[/./,{token:`emphasis`}]],emphasis_asterisk:[[/\*(?!\*)/,{token:`emphasis`,next:`@pop`}],{include:`content`},[/./,{token:`emphasis`}]],frontmatter:[[/^---$/,{token:`meta.content`,nextEmbedded:`@pop`,next:`@pop`}]],codeblock_highlight_backtick:[[/\s*`{3,}\s*$/,{token:`string`,next:`@pop`,nextEmbedded:`@pop`}],[/.*$/,`variable.source`]],codeblock_highlight_tilde:[[/\s*~{3,}\s*$/,{token:`string`,next:`@pop`,nextEmbedded:`@pop`}],[/.*$/,`variable.source`]],codeblock_backtick:[[/\s*`{3,}\s*$/,{token:`string`,next:`@pop`}],[/.*$/,`variable.source`]],codeblock_tilde:[[/\s*~{3,}\s*$/,{token:`string`,next:`@pop`}],[/.*$/,`variable.source`]]}};export{t as conf,n as language};
|
import{p as e}from"./initMonaco-vLodlUu5.js";var t={comments:{blockComment:[`{/*`,`*/}`]},brackets:[[`{`,`}`]],autoClosingPairs:[{open:`"`,close:`"`},{open:`'`,close:`'`},{open:`“`,close:`”`},{open:`‘`,close:`’`},{open:"`",close:"`"},{open:`{`,close:`}`},{open:`(`,close:`)`},{open:`_`,close:`_`},{open:`**`,close:`**`},{open:`<`,close:`>`}],onEnterRules:[{beforeText:/^\s*- .+/,action:{indentAction:e.IndentAction.None,appendText:`- `}},{beforeText:/^\s*\+ .+/,action:{indentAction:e.IndentAction.None,appendText:`+ `}},{beforeText:/^\s*\* .+/,action:{indentAction:e.IndentAction.None,appendText:`* `}},{beforeText:/^> /,action:{indentAction:e.IndentAction.None,appendText:`> `}},{beforeText:/<\w+/,action:{indentAction:e.IndentAction.Indent}},{beforeText:/\s+>\s*$/,action:{indentAction:e.IndentAction.Indent}},{beforeText:/<\/\w+>/,action:{indentAction:e.IndentAction.Outdent}},...Array.from({length:100},(t,n)=>({beforeText:RegExp(`^${n}\\. .+`),action:{indentAction:e.IndentAction.None,appendText:`${n+1}. `}}))]},n={defaultToken:``,tokenPostfix:`.mdx`,control:/[!#()*+.[\\\]_`{}\-]/,escapes:/\\@control/,tokenizer:{root:[[/^---$/,{token:`meta.content`,next:`@frontmatter`,nextEmbedded:`yaml`}],[/^\s*import/,{token:`keyword`,next:`@import`,nextEmbedded:`js`}],[/^\s*export/,{token:`keyword`,next:`@export`,nextEmbedded:`js`}],[/<\w+/,{token:`type.identifier`,next:`@jsx`}],[/<\/?\w+>/,`type.identifier`],[/^(\s*)(>*\s*)(#{1,6}\s)/,[{token:`white`},{token:`comment`},{token:`keyword`,next:`@header`}]],[/^(\s*)(>*\s*)([*+-])(\s+)/,[`white`,`comment`,`keyword`,`white`]],[/^(\s*)(>*\s*)(\d{1,9}\.)(\s+)/,[`white`,`comment`,`number`,`white`]],[/^(\s*)(>*\s*)(\d{1,9}\.)(\s+)/,[`white`,`comment`,`number`,`white`]],[/^(\s*)(>*\s*)(-{3,}|\*{3,}|_{3,})$/,[`white`,`comment`,`keyword`]],[/`{3,}(\s.*)?$/,{token:`string`,next:`@codeblock_backtick`}],[/~{3,}(\s.*)?$/,{token:`string`,next:`@codeblock_tilde`}],[/`{3,}(\S+).*$/,{token:`string`,next:`@codeblock_highlight_backtick`,nextEmbedded:`$1`}],[/~{3,}(\S+).*$/,{token:`string`,next:`@codeblock_highlight_tilde`,nextEmbedded:`$1`}],[/^(\s*)(-{4,})$/,[`white`,`comment`]],[/^(\s*)(>+)/,[`white`,`comment`]],{include:`content`}],content:[[/(\[)(.+)(]\()(.+)(\s+".*")(\))/,[``,`string.link`,``,`type.identifier`,`string.link`,``]],[/(\[)(.+)(]\()(.+)(\))/,[``,`type.identifier`,``,`string.link`,``]],[/(\[)(.+)(]\[)(.+)(])/,[``,`type.identifier`,``,`type.identifier`,``]],[/(\[)(.+)(]:\s+)(\S*)/,[``,`type.identifier`,``,`string.link`]],[/(\[)(.+)(])/,[``,`type.identifier`,``]],[/`.*`/,`variable.source`],[/_/,{token:`emphasis`,next:`@emphasis_underscore`}],[/\*(?!\*)/,{token:`emphasis`,next:`@emphasis_asterisk`}],[/\*\*/,{token:`strong`,next:`@strong`}],[/{/,{token:`delimiter.bracket`,next:`@expression`,nextEmbedded:`js`}]],import:[[/'\s*(;|$)/,{token:`string`,next:`@pop`,nextEmbedded:`@pop`}]],expression:[[/{/,{token:`delimiter.bracket`,next:`@expression`}],[/}/,{token:`delimiter.bracket`,next:`@pop`,nextEmbedded:`@pop`}]],export:[[/^\s*$/,{token:`delimiter.bracket`,next:`@pop`,nextEmbedded:`@pop`}]],jsx:[[/\s+/,``],[/(\w+)(=)("(?:[^"\\]|\\.)*")/,[`attribute.name`,`operator`,`string`]],[/(\w+)(=)('(?:[^'\\]|\\.)*')/,[`attribute.name`,`operator`,`string`]],[/(\w+(?=\s|>|={|$))/,[`attribute.name`]],[/={/,{token:`delimiter.bracket`,next:`@expression`,nextEmbedded:`js`}],[/>/,{token:`type.identifier`,next:`@pop`}]],header:[[/.$/,{token:`keyword`,next:`@pop`}],{include:`content`},[/./,{token:`keyword`}]],strong:[[/\*\*/,{token:`strong`,next:`@pop`}],{include:`content`},[/./,{token:`strong`}]],emphasis_underscore:[[/_/,{token:`emphasis`,next:`@pop`}],{include:`content`},[/./,{token:`emphasis`}]],emphasis_asterisk:[[/\*(?!\*)/,{token:`emphasis`,next:`@pop`}],{include:`content`},[/./,{token:`emphasis`}]],frontmatter:[[/^---$/,{token:`meta.content`,nextEmbedded:`@pop`,next:`@pop`}]],codeblock_highlight_backtick:[[/\s*`{3,}\s*$/,{token:`string`,next:`@pop`,nextEmbedded:`@pop`}],[/.*$/,`variable.source`]],codeblock_highlight_tilde:[[/\s*~{3,}\s*$/,{token:`string`,next:`@pop`,nextEmbedded:`@pop`}],[/.*$/,`variable.source`]],codeblock_backtick:[[/\s*`{3,}\s*$/,{token:`string`,next:`@pop`}],[/.*$/,`variable.source`]],codeblock_tilde:[[/\s*~{3,}\s*$/,{token:`string`,next:`@pop`}],[/.*$/,`variable.source`]]}};export{t as conf,n as language};
|
||||||
+1
-1
@@ -1 +1 @@
|
|||||||
import{Xt as e}from"./index-Bplw5zZe.js";var t=200;async function n(n,r,i,a){if(a!==-1){let t=await e.get(n,{...r,page:i,per_page:a});return{items:t.items||[],total:t.total??0}}let o=[],s=1,c=1,l=0;do{let i=await e.get(n,{...r,page:s,per_page:t});o.push(...i.items||[]),l=i.total??o.length,c=i.pages??1,s+=1}while(s<=c);return{items:o,total:l}}async function r(e,n,r){if(r!==-1)return e(r,(n-1)*r);let i=[],a=0,o=0;do{let n=await e(t,a);if(i.push(...n.items||[]),o=n.total??i.length,!n.items.length||i.length>=o)break;a+=t}while(!0);return{items:i,total:o}}export{n,r as t};
|
import{Zt as e}from"./index-mgwiCK5j.js";var t=200;async function n(n,r,i,a){if(a!==-1){let t=await e.get(n,{...r,page:i,per_page:a});return{items:t.items||[],total:t.total??0}}let o=[],s=1,c=1,l=0;do{let i=await e.get(n,{...r,page:s,per_page:t});o.push(...i.items||[]),l=i.total??o.length,c=i.pages??1,s+=1}while(s<=c);return{items:o,total:l}}async function r(e,n,r){if(r!==-1)return e(r,(n-1)*r);let i=[],a=0,o=0;do{let n=await e(t,a);if(i.push(...n.items||[]),o=n.total??i.length,!n.items.length||i.length>=o)break;a+=t}while(!0);return{items:i,total:o}}export{n,r as t};
|
||||||
@@ -1 +1 @@
|
|||||||
import{p as e}from"./initMonaco-CvAS2Es9.js";var t={comments:{lineComment:`#`,blockComment:[`'''`,`'''`]},brackets:[[`{`,`}`],[`[`,`]`],[`(`,`)`]],autoClosingPairs:[{open:`{`,close:`}`},{open:`[`,close:`]`},{open:`(`,close:`)`},{open:`"`,close:`"`,notIn:[`string`]},{open:`'`,close:`'`,notIn:[`string`,`comment`]}],surroundingPairs:[{open:`{`,close:`}`},{open:`[`,close:`]`},{open:`(`,close:`)`},{open:`"`,close:`"`},{open:`'`,close:`'`}],onEnterRules:[{beforeText:RegExp(`^\\s*(?:def|class|for|if|elif|else|while|try|with|finally|except|async|match|case).*?:\\s*$`),action:{indentAction:e.IndentAction.Indent}}],folding:{offSide:!0,markers:{start:RegExp(`^\\s*#region\\b`),end:RegExp(`^\\s*#endregion\\b`)}}},n={defaultToken:``,tokenPostfix:`.python`,keywords:`False.None.True._.and.as.assert.async.await.break.case.class.continue.def.del.elif.else.except.exec.finally.for.from.global.if.import.in.is.lambda.match.nonlocal.not.or.pass.print.raise.return.try.type.while.with.yield.int.float.long.complex.hex.abs.all.any.apply.basestring.bin.bool.buffer.bytearray.callable.chr.classmethod.cmp.coerce.compile.complex.delattr.dict.dir.divmod.enumerate.eval.execfile.file.filter.format.frozenset.getattr.globals.hasattr.hash.help.id.input.intern.isinstance.issubclass.iter.len.locals.list.map.max.memoryview.min.next.object.oct.open.ord.pow.print.property.reversed.range.raw_input.reduce.reload.repr.reversed.round.self.set.setattr.slice.sorted.staticmethod.str.sum.super.tuple.type.unichr.unicode.vars.xrange.zip.__dict__.__methods__.__members__.__class__.__bases__.__name__.__mro__.__subclasses__.__init__.__import__`.split(`.`),brackets:[{open:`{`,close:`}`,token:`delimiter.curly`},{open:`[`,close:`]`,token:`delimiter.bracket`},{open:`(`,close:`)`,token:`delimiter.parenthesis`}],tokenizer:{root:[{include:`@whitespace`},{include:`@numbers`},{include:`@strings`},[/[,:;]/,`delimiter`],[/[{}\[\]()]/,`@brackets`],[/@[a-zA-Z_]\w*/,`tag`],[/[a-zA-Z_]\w*/,{cases:{"@keywords":`keyword`,"@default":`identifier`}}]],whitespace:[[/\s+/,`white`],[/(^#.*$)/,`comment`],[/'''/,`string`,`@endDocString`],[/"""/,`string`,`@endDblDocString`]],endDocString:[[/[^']+/,`string`],[/\\'/,`string`],[/'''/,`string`,`@popall`],[/'/,`string`]],endDblDocString:[[/[^"]+/,`string`],[/\\"/,`string`],[/"""/,`string`,`@popall`],[/"/,`string`]],numbers:[[/-?0x([abcdef]|[ABCDEF]|\d)+[lL]?/,`number.hex`],[/-?(\d*\.)?\d+([eE][+\-]?\d+)?[jJ]?[lL]?/,`number`]],strings:[[/'$/,`string.escape`,`@popall`],[/f'{1,3}/,`string.escape`,`@fStringBody`],[/'/,`string.escape`,`@stringBody`],[/"$/,`string.escape`,`@popall`],[/f"{1,3}/,`string.escape`,`@fDblStringBody`],[/"/,`string.escape`,`@dblStringBody`]],fStringBody:[[/[^\\'\{\}]+$/,`string`,`@popall`],[/[^\\'\{\}]+/,`string`],[/\{[^\}':!=]+/,`identifier`,`@fStringDetail`],[/\\./,`string`],[/'/,`string.escape`,`@popall`],[/\\$/,`string`]],stringBody:[[/[^\\']+$/,`string`,`@popall`],[/[^\\']+/,`string`],[/\\./,`string`],[/'/,`string.escape`,`@popall`],[/\\$/,`string`]],fDblStringBody:[[/[^\\"\{\}]+$/,`string`,`@popall`],[/[^\\"\{\}]+/,`string`],[/\{[^\}':!=]+/,`identifier`,`@fStringDetail`],[/\\./,`string`],[/"/,`string.escape`,`@popall`],[/\\$/,`string`]],dblStringBody:[[/[^\\"]+$/,`string`,`@popall`],[/[^\\"]+/,`string`],[/\\./,`string`],[/"/,`string.escape`,`@popall`],[/\\$/,`string`]],fStringDetail:[[/[:][^}]+/,`string`],[/[!][ars]/,`string`],[/=/,`string`],[/\}/,`identifier`,`@pop`]]}};export{t as conf,n as language};
|
import{p as e}from"./initMonaco-vLodlUu5.js";var t={comments:{lineComment:`#`,blockComment:[`'''`,`'''`]},brackets:[[`{`,`}`],[`[`,`]`],[`(`,`)`]],autoClosingPairs:[{open:`{`,close:`}`},{open:`[`,close:`]`},{open:`(`,close:`)`},{open:`"`,close:`"`,notIn:[`string`]},{open:`'`,close:`'`,notIn:[`string`,`comment`]}],surroundingPairs:[{open:`{`,close:`}`},{open:`[`,close:`]`},{open:`(`,close:`)`},{open:`"`,close:`"`},{open:`'`,close:`'`}],onEnterRules:[{beforeText:RegExp(`^\\s*(?:def|class|for|if|elif|else|while|try|with|finally|except|async|match|case).*?:\\s*$`),action:{indentAction:e.IndentAction.Indent}}],folding:{offSide:!0,markers:{start:RegExp(`^\\s*#region\\b`),end:RegExp(`^\\s*#endregion\\b`)}}},n={defaultToken:``,tokenPostfix:`.python`,keywords:`False.None.True._.and.as.assert.async.await.break.case.class.continue.def.del.elif.else.except.exec.finally.for.from.global.if.import.in.is.lambda.match.nonlocal.not.or.pass.print.raise.return.try.type.while.with.yield.int.float.long.complex.hex.abs.all.any.apply.basestring.bin.bool.buffer.bytearray.callable.chr.classmethod.cmp.coerce.compile.complex.delattr.dict.dir.divmod.enumerate.eval.execfile.file.filter.format.frozenset.getattr.globals.hasattr.hash.help.id.input.intern.isinstance.issubclass.iter.len.locals.list.map.max.memoryview.min.next.object.oct.open.ord.pow.print.property.reversed.range.raw_input.reduce.reload.repr.reversed.round.self.set.setattr.slice.sorted.staticmethod.str.sum.super.tuple.type.unichr.unicode.vars.xrange.zip.__dict__.__methods__.__members__.__class__.__bases__.__name__.__mro__.__subclasses__.__init__.__import__`.split(`.`),brackets:[{open:`{`,close:`}`,token:`delimiter.curly`},{open:`[`,close:`]`,token:`delimiter.bracket`},{open:`(`,close:`)`,token:`delimiter.parenthesis`}],tokenizer:{root:[{include:`@whitespace`},{include:`@numbers`},{include:`@strings`},[/[,:;]/,`delimiter`],[/[{}\[\]()]/,`@brackets`],[/@[a-zA-Z_]\w*/,`tag`],[/[a-zA-Z_]\w*/,{cases:{"@keywords":`keyword`,"@default":`identifier`}}]],whitespace:[[/\s+/,`white`],[/(^#.*$)/,`comment`],[/'''/,`string`,`@endDocString`],[/"""/,`string`,`@endDblDocString`]],endDocString:[[/[^']+/,`string`],[/\\'/,`string`],[/'''/,`string`,`@popall`],[/'/,`string`]],endDblDocString:[[/[^"]+/,`string`],[/\\"/,`string`],[/"""/,`string`,`@popall`],[/"/,`string`]],numbers:[[/-?0x([abcdef]|[ABCDEF]|\d)+[lL]?/,`number.hex`],[/-?(\d*\.)?\d+([eE][+\-]?\d+)?[jJ]?[lL]?/,`number`]],strings:[[/'$/,`string.escape`,`@popall`],[/f'{1,3}/,`string.escape`,`@fStringBody`],[/'/,`string.escape`,`@stringBody`],[/"$/,`string.escape`,`@popall`],[/f"{1,3}/,`string.escape`,`@fDblStringBody`],[/"/,`string.escape`,`@dblStringBody`]],fStringBody:[[/[^\\'\{\}]+$/,`string`,`@popall`],[/[^\\'\{\}]+/,`string`],[/\{[^\}':!=]+/,`identifier`,`@fStringDetail`],[/\\./,`string`],[/'/,`string.escape`,`@popall`],[/\\$/,`string`]],stringBody:[[/[^\\']+$/,`string`,`@popall`],[/[^\\']+/,`string`],[/\\./,`string`],[/'/,`string.escape`,`@popall`],[/\\$/,`string`]],fDblStringBody:[[/[^\\"\{\}]+$/,`string`,`@popall`],[/[^\\"\{\}]+/,`string`],[/\{[^\}':!=]+/,`identifier`,`@fStringDetail`],[/\\./,`string`],[/"/,`string.escape`,`@popall`],[/\\$/,`string`]],dblStringBody:[[/[^\\"]+$/,`string`,`@popall`],[/[^\\"]+/,`string`],[/\\./,`string`],[/"/,`string.escape`,`@popall`],[/\\$/,`string`]],fStringDetail:[[/[:][^}]+/,`string`],[/[!][ars]/,`string`],[/=/,`string`],[/\}/,`identifier`,`@pop`]]}};export{t as conf,n as language};
|
||||||
File diff suppressed because one or more lines are too long
@@ -0,0 +1 @@
|
|||||||
|
import{Gt as e}from"./index-mgwiCK5j.js";export{e as default};
|
||||||
@@ -1 +0,0 @@
|
|||||||
import{Wt as e}from"./index-Bplw5zZe.js";export{e as default};
|
|
||||||
File diff suppressed because one or more lines are too long
@@ -1 +1 @@
|
|||||||
import{p as e}from"./initMonaco-CvAS2Es9.js";var t={wordPattern:/(-?\d*\.\d\w*)|([^\`\~\!\@\#\%\^\&\*\(\)\-\=\+\[\{\]\}\\\|\;\:\'\"\,\.\<\>\/\?\s]+)/g,comments:{lineComment:`//`,blockComment:[`/*`,`*/`]},brackets:[[`{`,`}`],[`[`,`]`],[`(`,`)`]],onEnterRules:[{beforeText:/^\s*\/\*\*(?!\/)([^\*]|\*(?!\/))*$/,afterText:/^\s*\*\/$/,action:{indentAction:e.IndentAction.IndentOutdent,appendText:` * `}},{beforeText:/^\s*\/\*\*(?!\/)([^\*]|\*(?!\/))*$/,action:{indentAction:e.IndentAction.None,appendText:` * `}},{beforeText:/^(\t|(\ \ ))*\ \*(\ ([^\*]|\*(?!\/))*)?$/,action:{indentAction:e.IndentAction.None,appendText:`* `}},{beforeText:/^(\t|(\ \ ))*\ \*\/\s*$/,action:{indentAction:e.IndentAction.None,removeText:1}}],autoClosingPairs:[{open:`{`,close:`}`},{open:`[`,close:`]`},{open:`(`,close:`)`},{open:`"`,close:`"`,notIn:[`string`]},{open:`'`,close:`'`,notIn:[`string`,`comment`]},{open:"`",close:"`",notIn:[`string`,`comment`]},{open:`/**`,close:` */`,notIn:[`string`]}],folding:{markers:{start:RegExp(`^\\s*//\\s*#?region\\b`),end:RegExp(`^\\s*//\\s*#?endregion\\b`)}}},n={defaultToken:`invalid`,tokenPostfix:`.ts`,keywords:`abstract.any.as.asserts.bigint.boolean.break.case.catch.class.continue.const.constructor.debugger.declare.default.delete.do.else.enum.export.extends.false.finally.for.from.function.get.if.implements.import.in.infer.instanceof.interface.is.keyof.let.module.namespace.never.new.null.number.object.out.package.private.protected.public.override.readonly.require.global.return.satisfies.set.static.string.super.switch.symbol.this.throw.true.try.type.typeof.undefined.unique.unknown.var.void.while.with.yield.async.await.of`.split(`.`),operators:`<=.>=.==.!=.===.!==.=>.+.-.**.*./.%.++.--.<<.</.>>.>>>.&.|.^.!.~.&&.||.??.?.:.=.+=.-=.*=.**=./=.%=.<<=.>>=.>>>=.&=.|=.^=.@`.split(`.`),symbols:/[=><!~?:&|+\-*\/\^%]+/,escapes:/\\(?:[abfnrtv\\"']|x[0-9A-Fa-f]{1,4}|u[0-9A-Fa-f]{4}|U[0-9A-Fa-f]{8})/,digits:/\d+(_+\d+)*/,octaldigits:/[0-7]+(_+[0-7]+)*/,binarydigits:/[0-1]+(_+[0-1]+)*/,hexdigits:/[[0-9a-fA-F]+(_+[0-9a-fA-F]+)*/,regexpctl:/[(){}\[\]\$\^|\-*+?\.]/,regexpesc:/\\(?:[bBdDfnrstvwWn0\\\/]|@regexpctl|c[A-Z]|x[0-9a-fA-F]{2}|u[0-9a-fA-F]{4})/,tokenizer:{root:[[/[{}]/,`delimiter.bracket`],{include:`common`}],common:[[/#?[a-z_$][\w$]*/,{cases:{"@keywords":`keyword`,"@default":`identifier`}}],[/[A-Z][\w\$]*/,`type.identifier`],{include:`@whitespace`},[/\/(?=([^\\\/]|\\.)+\/([dgimsuy]*)(\s*)(\.|;|,|\)|\]|\}|$))/,{token:`regexp`,bracket:`@open`,next:`@regexp`}],[/[()\[\]]/,`@brackets`],[/[<>](?!@symbols)/,`@brackets`],[/!(?=([^=]|$))/,`delimiter`],[/@symbols/,{cases:{"@operators":`delimiter`,"@default":``}}],[/(@digits)[eE]([\-+]?(@digits))?/,`number.float`],[/(@digits)\.(@digits)([eE][\-+]?(@digits))?/,`number.float`],[/0[xX](@hexdigits)n?/,`number.hex`],[/0[oO]?(@octaldigits)n?/,`number.octal`],[/0[bB](@binarydigits)n?/,`number.binary`],[/(@digits)n?/,`number`],[/[;,.]/,`delimiter`],[/"([^"\\]|\\.)*$/,`string.invalid`],[/'([^'\\]|\\.)*$/,`string.invalid`],[/"/,`string`,`@string_double`],[/'/,`string`,`@string_single`],[/`/,`string`,`@string_backtick`]],whitespace:[[/[ \t\r\n]+/,``],[/\/\*\*(?!\/)/,`comment.doc`,`@jsdoc`],[/\/\*/,`comment`,`@comment`],[/\/\/.*$/,`comment`]],comment:[[/[^\/*]+/,`comment`],[/\*\//,`comment`,`@pop`],[/[\/*]/,`comment`]],jsdoc:[[/[^\/*]+/,`comment.doc`],[/\*\//,`comment.doc`,`@pop`],[/[\/*]/,`comment.doc`]],regexp:[[/(\{)(\d+(?:,\d*)?)(\})/,[`regexp.escape.control`,`regexp.escape.control`,`regexp.escape.control`]],[/(\[)(\^?)(?=(?:[^\]\\\/]|\\.)+)/,[`regexp.escape.control`,{token:`regexp.escape.control`,next:`@regexrange`}]],[/(\()(\?:|\?=|\?!)/,[`regexp.escape.control`,`regexp.escape.control`]],[/[()]/,`regexp.escape.control`],[/@regexpctl/,`regexp.escape.control`],[/[^\\\/]/,`regexp`],[/@regexpesc/,`regexp.escape`],[/\\\./,`regexp.invalid`],[/(\/)([dgimsuy]*)/,[{token:`regexp`,bracket:`@close`,next:`@pop`},`keyword.other`]]],regexrange:[[/-/,`regexp.escape.control`],[/\^/,`regexp.invalid`],[/@regexpesc/,`regexp.escape`],[/[^\]]/,`regexp`],[/\]/,{token:`regexp.escape.control`,next:`@pop`,bracket:`@close`}]],string_double:[[/[^\\"]+/,`string`],[/@escapes/,`string.escape`],[/\\./,`string.escape.invalid`],[/"/,`string`,`@pop`]],string_single:[[/[^\\']+/,`string`],[/@escapes/,`string.escape`],[/\\./,`string.escape.invalid`],[/'/,`string`,`@pop`]],string_backtick:[[/\$\{/,{token:`delimiter.bracket`,next:`@bracketCounting`}],[/[^\\`$]+/,`string`],[/@escapes/,`string.escape`],[/\\./,`string.escape.invalid`],[/`/,`string`,`@pop`]],bracketCounting:[[/\{/,`delimiter.bracket`,`@bracketCounting`],[/\}/,`delimiter.bracket`,`@pop`],{include:`common`}]}};export{t as conf,n as language};
|
import{p as e}from"./initMonaco-vLodlUu5.js";var t={wordPattern:/(-?\d*\.\d\w*)|([^\`\~\!\@\#\%\^\&\*\(\)\-\=\+\[\{\]\}\\\|\;\:\'\"\,\.\<\>\/\?\s]+)/g,comments:{lineComment:`//`,blockComment:[`/*`,`*/`]},brackets:[[`{`,`}`],[`[`,`]`],[`(`,`)`]],onEnterRules:[{beforeText:/^\s*\/\*\*(?!\/)([^\*]|\*(?!\/))*$/,afterText:/^\s*\*\/$/,action:{indentAction:e.IndentAction.IndentOutdent,appendText:` * `}},{beforeText:/^\s*\/\*\*(?!\/)([^\*]|\*(?!\/))*$/,action:{indentAction:e.IndentAction.None,appendText:` * `}},{beforeText:/^(\t|(\ \ ))*\ \*(\ ([^\*]|\*(?!\/))*)?$/,action:{indentAction:e.IndentAction.None,appendText:`* `}},{beforeText:/^(\t|(\ \ ))*\ \*\/\s*$/,action:{indentAction:e.IndentAction.None,removeText:1}}],autoClosingPairs:[{open:`{`,close:`}`},{open:`[`,close:`]`},{open:`(`,close:`)`},{open:`"`,close:`"`,notIn:[`string`]},{open:`'`,close:`'`,notIn:[`string`,`comment`]},{open:"`",close:"`",notIn:[`string`,`comment`]},{open:`/**`,close:` */`,notIn:[`string`]}],folding:{markers:{start:RegExp(`^\\s*//\\s*#?region\\b`),end:RegExp(`^\\s*//\\s*#?endregion\\b`)}}},n={defaultToken:`invalid`,tokenPostfix:`.ts`,keywords:`abstract.any.as.asserts.bigint.boolean.break.case.catch.class.continue.const.constructor.debugger.declare.default.delete.do.else.enum.export.extends.false.finally.for.from.function.get.if.implements.import.in.infer.instanceof.interface.is.keyof.let.module.namespace.never.new.null.number.object.out.package.private.protected.public.override.readonly.require.global.return.satisfies.set.static.string.super.switch.symbol.this.throw.true.try.type.typeof.undefined.unique.unknown.var.void.while.with.yield.async.await.of`.split(`.`),operators:`<=.>=.==.!=.===.!==.=>.+.-.**.*./.%.++.--.<<.</.>>.>>>.&.|.^.!.~.&&.||.??.?.:.=.+=.-=.*=.**=./=.%=.<<=.>>=.>>>=.&=.|=.^=.@`.split(`.`),symbols:/[=><!~?:&|+\-*\/\^%]+/,escapes:/\\(?:[abfnrtv\\"']|x[0-9A-Fa-f]{1,4}|u[0-9A-Fa-f]{4}|U[0-9A-Fa-f]{8})/,digits:/\d+(_+\d+)*/,octaldigits:/[0-7]+(_+[0-7]+)*/,binarydigits:/[0-1]+(_+[0-1]+)*/,hexdigits:/[[0-9a-fA-F]+(_+[0-9a-fA-F]+)*/,regexpctl:/[(){}\[\]\$\^|\-*+?\.]/,regexpesc:/\\(?:[bBdDfnrstvwWn0\\\/]|@regexpctl|c[A-Z]|x[0-9a-fA-F]{2}|u[0-9a-fA-F]{4})/,tokenizer:{root:[[/[{}]/,`delimiter.bracket`],{include:`common`}],common:[[/#?[a-z_$][\w$]*/,{cases:{"@keywords":`keyword`,"@default":`identifier`}}],[/[A-Z][\w\$]*/,`type.identifier`],{include:`@whitespace`},[/\/(?=([^\\\/]|\\.)+\/([dgimsuy]*)(\s*)(\.|;|,|\)|\]|\}|$))/,{token:`regexp`,bracket:`@open`,next:`@regexp`}],[/[()\[\]]/,`@brackets`],[/[<>](?!@symbols)/,`@brackets`],[/!(?=([^=]|$))/,`delimiter`],[/@symbols/,{cases:{"@operators":`delimiter`,"@default":``}}],[/(@digits)[eE]([\-+]?(@digits))?/,`number.float`],[/(@digits)\.(@digits)([eE][\-+]?(@digits))?/,`number.float`],[/0[xX](@hexdigits)n?/,`number.hex`],[/0[oO]?(@octaldigits)n?/,`number.octal`],[/0[bB](@binarydigits)n?/,`number.binary`],[/(@digits)n?/,`number`],[/[;,.]/,`delimiter`],[/"([^"\\]|\\.)*$/,`string.invalid`],[/'([^'\\]|\\.)*$/,`string.invalid`],[/"/,`string`,`@string_double`],[/'/,`string`,`@string_single`],[/`/,`string`,`@string_backtick`]],whitespace:[[/[ \t\r\n]+/,``],[/\/\*\*(?!\/)/,`comment.doc`,`@jsdoc`],[/\/\*/,`comment`,`@comment`],[/\/\/.*$/,`comment`]],comment:[[/[^\/*]+/,`comment`],[/\*\//,`comment`,`@pop`],[/[\/*]/,`comment`]],jsdoc:[[/[^\/*]+/,`comment.doc`],[/\*\//,`comment.doc`,`@pop`],[/[\/*]/,`comment.doc`]],regexp:[[/(\{)(\d+(?:,\d*)?)(\})/,[`regexp.escape.control`,`regexp.escape.control`,`regexp.escape.control`]],[/(\[)(\^?)(?=(?:[^\]\\\/]|\\.)+)/,[`regexp.escape.control`,{token:`regexp.escape.control`,next:`@regexrange`}]],[/(\()(\?:|\?=|\?!)/,[`regexp.escape.control`,`regexp.escape.control`]],[/[()]/,`regexp.escape.control`],[/@regexpctl/,`regexp.escape.control`],[/[^\\\/]/,`regexp`],[/@regexpesc/,`regexp.escape`],[/\\\./,`regexp.invalid`],[/(\/)([dgimsuy]*)/,[{token:`regexp`,bracket:`@close`,next:`@pop`},`keyword.other`]]],regexrange:[[/-/,`regexp.escape.control`],[/\^/,`regexp.invalid`],[/@regexpesc/,`regexp.escape`],[/[^\]]/,`regexp`],[/\]/,{token:`regexp.escape.control`,next:`@pop`,bracket:`@close`}]],string_double:[[/[^\\"]+/,`string`],[/@escapes/,`string.escape`],[/\\./,`string.escape.invalid`],[/"/,`string`,`@pop`]],string_single:[[/[^\\']+/,`string`],[/@escapes/,`string.escape`],[/\\./,`string.escape.invalid`],[/'/,`string`,`@pop`]],string_backtick:[[/\$\{/,{token:`delimiter.bracket`,next:`@bracketCounting`}],[/[^\\`$]+/,`string`],[/@escapes/,`string.escape`],[/\\./,`string.escape.invalid`],[/`/,`string`,`@pop`]],bracketCounting:[[/\{/,`delimiter.bracket`,`@bracketCounting`],[/\}/,`delimiter.bracket`,`@pop`],{include:`common`}]}};export{t as conf,n as language};
|
||||||
@@ -0,0 +1 @@
|
|||||||
|
import{Nr as e,Zr as t,kr as n}from"./index-mgwiCK5j.js";function r(r){let i=t(!1);e(async()=>{await r(!1),i.value=!0}),n(()=>{i.value&&r(!0)})}export{r as t};
|
||||||
@@ -1 +0,0 @@
|
|||||||
import{Mr as e,Or as t,Xr as n}from"./index-Bplw5zZe.js";function r(r){let i=n(!1);e(async()=>{await r(!1),i.value=!0}),t(()=>{i.value&&r(!0)})}export{r as t};
|
|
||||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user