mirror of
https://github.com/bolucat/Archive.git
synced 2026-04-22 16:07:49 +08:00
Update On Thu Sep 25 20:42:16 CEST 2025
This commit is contained in:
@@ -1131,3 +1131,4 @@ Update On Sun Sep 21 20:36:55 CEST 2025
|
||||
Update On Mon Sep 22 20:36:16 CEST 2025
|
||||
Update On Tue Sep 23 20:37:30 CEST 2025
|
||||
Update On Wed Sep 24 20:34:28 CEST 2025
|
||||
Update On Thu Sep 25 20:42:08 CEST 2025
|
||||
|
||||
@@ -103,7 +103,12 @@ where
|
||||
pub fn latest(&self) -> MappedRwLockReadGuard<'_, T> {
|
||||
if self.is_dirty() {
|
||||
let draft = self.draft.read();
|
||||
RwLockReadGuard::map(draft, |guard| guard.as_ref().unwrap())
|
||||
if draft.is_some() {
|
||||
RwLockReadGuard::map(draft, |guard| guard.as_ref().unwrap())
|
||||
} else {
|
||||
let state = self.inner.read();
|
||||
RwLockReadGuard::map(state, |guard| guard)
|
||||
}
|
||||
} else {
|
||||
let state = self.inner.read();
|
||||
RwLockReadGuard::map(state, |guard| guard)
|
||||
@@ -118,7 +123,10 @@ where
|
||||
/// You can modify the draft state, and then commit it
|
||||
pub fn draft(&self) -> MappedRwLockWriteGuard<'_, T> {
|
||||
if self.is_dirty() {
|
||||
return RwLockWriteGuard::map(self.draft.write(), |guard| guard.as_mut().unwrap());
|
||||
let guard = self.draft.write();
|
||||
if guard.is_some() {
|
||||
return RwLockWriteGuard::map(guard, |g| g.as_mut().unwrap());
|
||||
}
|
||||
}
|
||||
|
||||
let state = self.inner.read().clone();
|
||||
@@ -140,10 +148,16 @@ where
|
||||
let mut draft = self.draft.write();
|
||||
let mut inner = self.inner.write();
|
||||
let old_value = inner.to_owned();
|
||||
*inner = draft.take().unwrap();
|
||||
self.is_dirty
|
||||
.store(false, std::sync::atomic::Ordering::Release);
|
||||
Some(old_value)
|
||||
if let Some(draft_value) = draft.take() {
|
||||
*inner = draft_value;
|
||||
self.is_dirty
|
||||
.store(false, std::sync::atomic::Ordering::Release);
|
||||
Some(old_value)
|
||||
} else {
|
||||
self.is_dirty
|
||||
.store(false, std::sync::atomic::Ordering::Release);
|
||||
None
|
||||
}
|
||||
}
|
||||
|
||||
/// discard the draft state
|
||||
|
||||
@@ -85,7 +85,7 @@
|
||||
"nanoid": "5.1.6",
|
||||
"sass-embedded": "1.93.2",
|
||||
"shiki": "2.5.0",
|
||||
"unplugin-auto-import": "20.1.0",
|
||||
"unplugin-auto-import": "20.2.0",
|
||||
"unplugin-icons": "22.3.0",
|
||||
"validator": "13.15.15",
|
||||
"vite": "7.1.7",
|
||||
|
||||
@@ -105,16 +105,15 @@ export const ProfileItem = memo(function ProfileItem({
|
||||
|
||||
await deleteConnections.mutateAsync(undefined)
|
||||
} catch (err) {
|
||||
// This FetchError was triggered by the `DELETE /connections` API
|
||||
const isFetchError = err instanceof Error && err.name === 'FetchError'
|
||||
message(
|
||||
isFetchError
|
||||
? t('FetchError', {
|
||||
content: t('Subscription'),
|
||||
})
|
||||
? `Failed to delete connections: \n ${err instanceof Error ? err.message : String(err)}`
|
||||
: `Error setting profile: \n ${err instanceof Error ? err.message : String(err)}`,
|
||||
{
|
||||
title: t('Error'),
|
||||
kind: 'error',
|
||||
title: isFetchError ? t('DeleteConnectionsError') : t('Error'),
|
||||
kind: isFetchError ? 'warning' : 'error',
|
||||
},
|
||||
)
|
||||
} finally {
|
||||
|
||||
@@ -70,7 +70,9 @@ export const message = async (
|
||||
if (typeof options === 'object') {
|
||||
await tauriMessage(value, {
|
||||
...options,
|
||||
title: `Clash Nyanpasu - ${options.title}`,
|
||||
title: options.title
|
||||
? `Clash Nyanpasu - ${options.title}`
|
||||
: 'Clash Nyanpasu',
|
||||
})
|
||||
} else {
|
||||
await tauriMessage(value, options)
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
{
|
||||
"manifest_version": 1,
|
||||
"latest": {
|
||||
"mihomo": "v1.19.13",
|
||||
"mihomo_alpha": "alpha-57b527d",
|
||||
"mihomo": "v1.19.14",
|
||||
"mihomo_alpha": "alpha-fdc46f0",
|
||||
"clash_rs": "v0.9.0",
|
||||
"clash_premium": "2023-09-05-gdcc8d87",
|
||||
"clash_rs_alpha": "0.9.0-alpha+sha.2784d7a"
|
||||
@@ -69,5 +69,5 @@
|
||||
"linux-armv7hf": "clash-armv7-unknown-linux-gnueabihf"
|
||||
}
|
||||
},
|
||||
"updated_at": "2025-09-23T22:20:51.447Z"
|
||||
"updated_at": "2025-09-24T22:21:01.034Z"
|
||||
}
|
||||
|
||||
@@ -60,15 +60,15 @@
|
||||
"devDependencies": {
|
||||
"@commitlint/cli": "19.8.1",
|
||||
"@commitlint/config-conventional": "19.8.1",
|
||||
"@eslint/compat": "1.3.2",
|
||||
"@eslint/compat": "1.4.0",
|
||||
"@eslint/eslintrc": "3.3.1",
|
||||
"@ianvs/prettier-plugin-sort-imports": "4.7.0",
|
||||
"@tauri-apps/cli": "2.8.4",
|
||||
"@types/fs-extra": "11.0.4",
|
||||
"@types/lodash-es": "4.17.12",
|
||||
"@types/node": "24.3.1",
|
||||
"@typescript-eslint/eslint-plugin": "8.44.0",
|
||||
"@typescript-eslint/parser": "8.44.0",
|
||||
"@typescript-eslint/eslint-plugin": "8.44.1",
|
||||
"@typescript-eslint/parser": "8.44.1",
|
||||
"autoprefixer": "10.4.21",
|
||||
"conventional-changelog-conventionalcommits": "9.1.0",
|
||||
"cross-env": "10.0.0",
|
||||
@@ -86,7 +86,7 @@
|
||||
"eslint-plugin-react-hooks": "5.2.0",
|
||||
"globals": "16.4.0",
|
||||
"knip": "5.64.0",
|
||||
"lint-staged": "16.1.6",
|
||||
"lint-staged": "16.2.0",
|
||||
"neostandard": "0.12.2",
|
||||
"npm-run-all2": "8.0.4",
|
||||
"postcss": "8.5.6",
|
||||
@@ -108,11 +108,11 @@
|
||||
"tailwindcss": "4.1.13",
|
||||
"tsx": "4.20.5",
|
||||
"typescript": "5.9.2",
|
||||
"typescript-eslint": "8.44.0"
|
||||
"typescript-eslint": "8.44.1"
|
||||
},
|
||||
"packageManager": "pnpm@10.17.1",
|
||||
"engines": {
|
||||
"node": "22.19.0"
|
||||
"node": "22.20.0"
|
||||
},
|
||||
"pnpm": {
|
||||
"overrides": {
|
||||
|
||||
Generated
+200
-208
@@ -29,8 +29,8 @@ importers:
|
||||
specifier: 19.8.1
|
||||
version: 19.8.1
|
||||
'@eslint/compat':
|
||||
specifier: 1.3.2
|
||||
version: 1.3.2(eslint@9.36.0(jiti@2.5.1))
|
||||
specifier: 1.4.0
|
||||
version: 1.4.0(eslint@9.36.0(jiti@2.5.1))
|
||||
'@eslint/eslintrc':
|
||||
specifier: 3.3.1
|
||||
version: 3.3.1
|
||||
@@ -50,11 +50,11 @@ importers:
|
||||
specifier: 24.3.1
|
||||
version: 24.3.1
|
||||
'@typescript-eslint/eslint-plugin':
|
||||
specifier: 8.44.0
|
||||
version: 8.44.0(@typescript-eslint/parser@8.44.0(eslint@9.36.0(jiti@2.5.1))(typescript@5.9.2))(eslint@9.36.0(jiti@2.5.1))(typescript@5.9.2)
|
||||
specifier: 8.44.1
|
||||
version: 8.44.1(@typescript-eslint/parser@8.44.1(eslint@9.36.0(jiti@2.5.1))(typescript@5.9.2))(eslint@9.36.0(jiti@2.5.1))(typescript@5.9.2)
|
||||
'@typescript-eslint/parser':
|
||||
specifier: 8.44.0
|
||||
version: 8.44.0(eslint@9.36.0(jiti@2.5.1))(typescript@5.9.2)
|
||||
specifier: 8.44.1
|
||||
version: 8.44.1(eslint@9.36.0(jiti@2.5.1))(typescript@5.9.2)
|
||||
autoprefixer:
|
||||
specifier: 10.4.21
|
||||
version: 10.4.21(postcss@8.5.6)
|
||||
@@ -75,13 +75,13 @@ importers:
|
||||
version: 10.1.8(eslint@9.36.0(jiti@2.5.1))
|
||||
eslint-import-resolver-alias:
|
||||
specifier: 1.1.2
|
||||
version: 1.1.2(eslint-plugin-import@2.32.0(@typescript-eslint/parser@8.44.0(eslint@9.36.0(jiti@2.5.1))(typescript@5.9.2))(eslint@9.36.0(jiti@2.5.1)))
|
||||
version: 1.1.2(eslint-plugin-import@2.32.0(@typescript-eslint/parser@8.44.1(eslint@9.36.0(jiti@2.5.1))(typescript@5.9.2))(eslint@9.36.0(jiti@2.5.1)))
|
||||
eslint-plugin-html:
|
||||
specifier: 8.1.3
|
||||
version: 8.1.3
|
||||
eslint-plugin-import:
|
||||
specifier: 2.32.0
|
||||
version: 2.32.0(@typescript-eslint/parser@8.44.0(eslint@9.36.0(jiti@2.5.1))(typescript@5.9.2))(eslint@9.36.0(jiti@2.5.1))
|
||||
version: 2.32.0(@typescript-eslint/parser@8.44.1(eslint@9.36.0(jiti@2.5.1))(typescript@5.9.2))(eslint@9.36.0(jiti@2.5.1))
|
||||
eslint-plugin-n:
|
||||
specifier: 17.23.1
|
||||
version: 17.23.1(eslint@9.36.0(jiti@2.5.1))(typescript@5.9.2)
|
||||
@@ -107,11 +107,11 @@ importers:
|
||||
specifier: 5.64.0
|
||||
version: 5.64.0(@types/node@24.3.1)(typescript@5.9.2)
|
||||
lint-staged:
|
||||
specifier: 16.1.6
|
||||
version: 16.1.6
|
||||
specifier: 16.2.0
|
||||
version: 16.2.0
|
||||
neostandard:
|
||||
specifier: 0.12.2
|
||||
version: 0.12.2(@typescript-eslint/utils@8.44.0(eslint@9.36.0(jiti@2.5.1))(typescript@5.9.2))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.32.0(@typescript-eslint/parser@8.44.0(eslint@9.36.0(jiti@2.5.1))(typescript@5.9.2))(eslint@9.36.0(jiti@2.5.1)))(eslint@9.36.0(jiti@2.5.1))(typescript@5.9.2)
|
||||
version: 0.12.2(@typescript-eslint/utils@8.44.1(eslint@9.36.0(jiti@2.5.1))(typescript@5.9.2))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.32.0(@typescript-eslint/parser@8.44.1(eslint@9.36.0(jiti@2.5.1))(typescript@5.9.2))(eslint@9.36.0(jiti@2.5.1)))(eslint@9.36.0(jiti@2.5.1))(typescript@5.9.2)
|
||||
npm-run-all2:
|
||||
specifier: 8.0.4
|
||||
version: 8.0.4
|
||||
@@ -173,8 +173,8 @@ importers:
|
||||
specifier: 5.9.2
|
||||
version: 5.9.2
|
||||
typescript-eslint:
|
||||
specifier: 8.44.0
|
||||
version: 8.44.0(eslint@9.36.0(jiti@2.5.1))(typescript@5.9.2)
|
||||
specifier: 8.44.1
|
||||
version: 8.44.1(eslint@9.36.0(jiti@2.5.1))(typescript@5.9.2)
|
||||
|
||||
frontend/interface:
|
||||
dependencies:
|
||||
@@ -433,8 +433,8 @@ importers:
|
||||
specifier: 2.5.0
|
||||
version: 2.5.0
|
||||
unplugin-auto-import:
|
||||
specifier: 20.1.0
|
||||
version: 20.1.0
|
||||
specifier: 20.2.0
|
||||
version: 20.2.0
|
||||
unplugin-icons:
|
||||
specifier: 22.3.0
|
||||
version: 22.3.0(@svgr/core@8.1.0(typescript@5.9.2))
|
||||
@@ -606,8 +606,8 @@ importers:
|
||||
specifier: 1.1.1
|
||||
version: 1.1.1
|
||||
tar:
|
||||
specifier: 7.4.4
|
||||
version: 7.4.4
|
||||
specifier: 7.5.1
|
||||
version: 7.5.1
|
||||
telegram:
|
||||
specifier: 2.26.22
|
||||
version: 2.26.22
|
||||
@@ -1727,8 +1727,8 @@ packages:
|
||||
resolution: {integrity: sha512-CCZCDJuduB9OUkFkY2IgppNZMi2lBQgD2qzwXkEia16cge2pijY/aXi96CJMquDMn3nJdlPV1A5KrJEXwfLNzQ==}
|
||||
engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0}
|
||||
|
||||
'@eslint/compat@1.3.2':
|
||||
resolution: {integrity: sha512-jRNwzTbd6p2Rw4sZ1CgWRS8YMtqG15YyZf7zvb6gY2rB2u6n+2Z+ELW0GtL0fQgyl0pr4Y/BzBfng/BdsereRA==}
|
||||
'@eslint/compat@1.4.0':
|
||||
resolution: {integrity: sha512-DEzm5dKeDBPm3r08Ixli/0cmxr8LkRdwxMRUIJBlSCpAwSrvFEJpVBzV+66JhDxiaqKxnRzCXhtiMiczF7Hglg==}
|
||||
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
|
||||
peerDependencies:
|
||||
eslint: ^8.40 || 9
|
||||
@@ -1748,6 +1748,10 @@ packages:
|
||||
resolution: {integrity: sha512-78Md3/Rrxh83gCxoUc0EiciuOHsIITzLy53m3d9UyiW8y9Dj2D29FeETqyKA+BRK76tnTp6RXWb3pCay8Oyomg==}
|
||||
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
|
||||
|
||||
'@eslint/core@0.16.0':
|
||||
resolution: {integrity: sha512-nmC8/totwobIiFcGkDza3GIKfAw1+hLiYVrh3I1nIomQ8PEr5cxg34jnkmGawul/ep52wGRAcyeDCNtWKSOj4Q==}
|
||||
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
|
||||
|
||||
'@eslint/eslintrc@3.3.1':
|
||||
resolution: {integrity: sha512-gtF186CXhIl1p4pJNGZw8Yc6RlshoePRvE0X91oPGb3vZ8pM3qOS9W9NGPat9LziaBV7XrJWGylNQXkGcnM3IQ==}
|
||||
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
|
||||
@@ -3489,16 +3493,16 @@ packages:
|
||||
'@types/yauzl@2.10.3':
|
||||
resolution: {integrity: sha512-oJoftv0LSuaDZE3Le4DbKX+KS9G36NzOeSap90UIK0yMA/NhKJhqlSGtNDORNRaIbQfzjXDrQa0ytJ6mNRGz/Q==}
|
||||
|
||||
'@typescript-eslint/eslint-plugin@8.44.0':
|
||||
resolution: {integrity: sha512-EGDAOGX+uwwekcS0iyxVDmRV9HX6FLSM5kzrAToLTsr9OWCIKG/y3lQheCq18yZ5Xh78rRKJiEpP0ZaCs4ryOQ==}
|
||||
'@typescript-eslint/eslint-plugin@8.44.1':
|
||||
resolution: {integrity: sha512-molgphGqOBT7t4YKCSkbasmu1tb1MgrZ2szGzHbclF7PNmOkSTQVHy+2jXOSnxvR3+Xe1yySHFZoqMpz3TfQsw==}
|
||||
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
|
||||
peerDependencies:
|
||||
'@typescript-eslint/parser': ^8.44.0
|
||||
'@typescript-eslint/parser': ^8.44.1
|
||||
eslint: ^8.57.0 || ^9.0.0
|
||||
typescript: '>=4.8.4 <6.0.0'
|
||||
|
||||
'@typescript-eslint/parser@8.44.0':
|
||||
resolution: {integrity: sha512-VGMpFQGUQWYT9LfnPcX8ouFojyrZ/2w3K5BucvxL/spdNehccKhB4jUyB1yBCXpr2XFm0jkECxgrpXBW2ipoAw==}
|
||||
'@typescript-eslint/parser@8.44.1':
|
||||
resolution: {integrity: sha512-EHrrEsyhOhxYt8MTg4zTF+DJMuNBzWwgvvOYNj/zm1vnaD/IC5zCXFehZv94Piqa2cRFfXrTFxIvO95L7Qc/cw==}
|
||||
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
|
||||
peerDependencies:
|
||||
eslint: ^8.57.0 || ^9.0.0
|
||||
@@ -3510,8 +3514,8 @@ packages:
|
||||
peerDependencies:
|
||||
typescript: '>=4.8.4 <6.0.0'
|
||||
|
||||
'@typescript-eslint/project-service@8.44.0':
|
||||
resolution: {integrity: sha512-ZeaGNraRsq10GuEohKTo4295Z/SuGcSq2LzfGlqiuEvfArzo/VRrT0ZaJsVPuKZ55lVbNk8U6FcL+ZMH8CoyVA==}
|
||||
'@typescript-eslint/project-service@8.44.1':
|
||||
resolution: {integrity: sha512-ycSa60eGg8GWAkVsKV4E6Nz33h+HjTXbsDT4FILyL8Obk5/mx4tbvCNsLf9zret3ipSumAOG89UcCs/KRaKYrA==}
|
||||
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
|
||||
peerDependencies:
|
||||
typescript: '>=4.8.4 <6.0.0'
|
||||
@@ -3520,8 +3524,8 @@ packages:
|
||||
resolution: {integrity: sha512-n6m05bXn/Cd6DZDGyrpXrELCPVaTnLdPToyhBoFkLIMznRUQUEQdSp96s/pcWSQdqOhrgR1mzJ+yItK7T+WPMQ==}
|
||||
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
|
||||
|
||||
'@typescript-eslint/scope-manager@8.44.0':
|
||||
resolution: {integrity: sha512-87Jv3E+al8wpD+rIdVJm/ItDBe/Im09zXIjFoipOjr5gHUhJmTzfFLuTJ/nPTMc2Srsroy4IBXwcTCHyRR7KzA==}
|
||||
'@typescript-eslint/scope-manager@8.44.1':
|
||||
resolution: {integrity: sha512-NdhWHgmynpSvyhchGLXh+w12OMT308Gm25JoRIyTZqEbApiBiQHD/8xgb6LqCWCFcxFtWwaVdFsLPQI3jvhywg==}
|
||||
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
|
||||
|
||||
'@typescript-eslint/tsconfig-utils@8.41.0':
|
||||
@@ -3530,20 +3534,20 @@ packages:
|
||||
peerDependencies:
|
||||
typescript: '>=4.8.4 <6.0.0'
|
||||
|
||||
'@typescript-eslint/tsconfig-utils@8.43.0':
|
||||
resolution: {integrity: sha512-ALC2prjZcj2YqqL5X/bwWQmHA2em6/94GcbB/KKu5SX3EBDOsqztmmX1kMkvAJHzxk7TazKzJfFiEIagNV3qEA==}
|
||||
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
|
||||
peerDependencies:
|
||||
typescript: '>=4.8.4 <6.0.0'
|
||||
|
||||
'@typescript-eslint/tsconfig-utils@8.44.0':
|
||||
resolution: {integrity: sha512-x5Y0+AuEPqAInc6yd0n5DAcvtoQ/vyaGwuX5HE9n6qAefk1GaedqrLQF8kQGylLUb9pnZyLf+iEiL9fr8APDtQ==}
|
||||
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
|
||||
peerDependencies:
|
||||
typescript: '>=4.8.4 <6.0.0'
|
||||
|
||||
'@typescript-eslint/type-utils@8.44.0':
|
||||
resolution: {integrity: sha512-9cwsoSxJ8Sak67Be/hD2RNt/fsqmWnNE1iHohG8lxqLSNY8xNfyY7wloo5zpW3Nu9hxVgURevqfcH6vvKCt6yg==}
|
||||
'@typescript-eslint/tsconfig-utils@8.44.1':
|
||||
resolution: {integrity: sha512-B5OyACouEjuIvof3o86lRMvyDsFwZm+4fBOqFHccIctYgBjqR3qT39FBYGN87khcgf0ExpdCBeGKpKRhSFTjKQ==}
|
||||
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
|
||||
peerDependencies:
|
||||
typescript: '>=4.8.4 <6.0.0'
|
||||
|
||||
'@typescript-eslint/type-utils@8.44.1':
|
||||
resolution: {integrity: sha512-KdEerZqHWXsRNKjF9NYswNISnFzXfXNDfPxoTh7tqohU/PRIbwTmsjGK6V9/RTYWau7NZvfo52lgVk+sJh0K3g==}
|
||||
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
|
||||
peerDependencies:
|
||||
eslint: ^8.57.0 || ^9.0.0
|
||||
@@ -3553,22 +3557,22 @@ packages:
|
||||
resolution: {integrity: sha512-9EwxsWdVqh42afLbHP90n2VdHaWU/oWgbH2P0CfcNfdKL7CuKpwMQGjwev56vWu9cSKU7FWSu6r9zck6CVfnag==}
|
||||
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
|
||||
|
||||
'@typescript-eslint/types@8.43.0':
|
||||
resolution: {integrity: sha512-vQ2FZaxJpydjSZJKiSW/LJsabFFvV7KgLC5DiLhkBcykhQj8iK9BOaDmQt74nnKdLvceM5xmhaTF+pLekrxEkw==}
|
||||
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
|
||||
|
||||
'@typescript-eslint/types@8.44.0':
|
||||
resolution: {integrity: sha512-ZSl2efn44VsYM0MfDQe68RKzBz75NPgLQXuGypmym6QVOWL5kegTZuZ02xRAT9T+onqvM6T8CdQk0OwYMB6ZvA==}
|
||||
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
|
||||
|
||||
'@typescript-eslint/types@8.44.1':
|
||||
resolution: {integrity: sha512-Lk7uj7y9uQUOEguiDIDLYLJOrYHQa7oBiURYVFqIpGxclAFQ78f6VUOM8lI2XEuNOKNB7XuvM2+2cMXAoq4ALQ==}
|
||||
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
|
||||
|
||||
'@typescript-eslint/typescript-estree@8.41.0':
|
||||
resolution: {integrity: sha512-D43UwUYJmGhuwHfY7MtNKRZMmfd8+p/eNSfFe6tH5mbVDto+VQCayeAt35rOx3Cs6wxD16DQtIKw/YXxt5E0UQ==}
|
||||
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
|
||||
peerDependencies:
|
||||
typescript: '>=4.8.4 <6.0.0'
|
||||
|
||||
'@typescript-eslint/typescript-estree@8.44.0':
|
||||
resolution: {integrity: sha512-lqNj6SgnGcQZwL4/SBJ3xdPEfcBuhCG8zdcwCPgYcmiPLgokiNDKlbPzCwEwu7m279J/lBYWtDYL+87OEfn8Jw==}
|
||||
'@typescript-eslint/typescript-estree@8.44.1':
|
||||
resolution: {integrity: sha512-qnQJ+mVa7szevdEyvfItbO5Vo+GfZ4/GZWWDRRLjrxYPkhM+6zYB2vRYwCsoJLzqFCdZT4mEqyJoyzkunsZ96A==}
|
||||
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
|
||||
peerDependencies:
|
||||
typescript: '>=4.8.4 <6.0.0'
|
||||
@@ -3580,8 +3584,8 @@ packages:
|
||||
eslint: ^8.57.0 || ^9.0.0
|
||||
typescript: '>=4.8.4 <6.0.0'
|
||||
|
||||
'@typescript-eslint/utils@8.44.0':
|
||||
resolution: {integrity: sha512-nktOlVcg3ALo0mYlV+L7sWUD58KG4CMj1rb2HUVOO4aL3K/6wcD+NERqd0rrA5Vg06b42YhF6cFxeixsp9Riqg==}
|
||||
'@typescript-eslint/utils@8.44.1':
|
||||
resolution: {integrity: sha512-DpX5Fp6edTlocMCwA+mHY8Mra+pPjRZ0TfHkXI8QFelIKcbADQz1LUPNtzOFUriBB2UYqw4Pi9+xV4w9ZczHFg==}
|
||||
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
|
||||
peerDependencies:
|
||||
eslint: ^8.57.0 || ^9.0.0
|
||||
@@ -3591,8 +3595,8 @@ packages:
|
||||
resolution: {integrity: sha512-+GeGMebMCy0elMNg67LRNoVnUFPIm37iu5CmHESVx56/9Jsfdpsvbv605DQ81Pi/x11IdKUsS5nzgTYbCQU9fg==}
|
||||
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
|
||||
|
||||
'@typescript-eslint/visitor-keys@8.44.0':
|
||||
resolution: {integrity: sha512-zaz9u8EJ4GBmnehlrpoKvj/E3dNbuQ7q0ucyZImm3cLqJ8INTc970B1qEqDX/Rzq65r3TvVTN7kHWPBoyW7DWw==}
|
||||
'@typescript-eslint/visitor-keys@8.44.1':
|
||||
resolution: {integrity: sha512-576+u0QD+Jp3tZzvfRfxon0EA2lzcDt3lhUbsC6Lgzy9x2VR4E+JUiNyGHi5T8vk0TV+fpJ5GLG1JsJuWCaKhw==}
|
||||
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
|
||||
|
||||
'@ungap/structured-clone@1.2.0':
|
||||
@@ -4124,10 +4128,6 @@ packages:
|
||||
resolution: {integrity: sha512-zgVZuo2WcZgfUEmsn6eO3kINexW8RAE4maiQ8QNs8CtpPCSyMiYsULR3HQYkm3w8FIA3SberyMJMSldGsW+U3w==}
|
||||
engines: {node: ^12.17.0 || ^14.13 || >=16.0.0}
|
||||
|
||||
chalk@5.6.0:
|
||||
resolution: {integrity: sha512-46QrSQFyVSEyYAgQ22hQ+zDa60YHA4fBstHmtSApj1Y5vKtG27fWowW03jCk5KcbXEWPZUIR894aARCA/G1kfQ==}
|
||||
engines: {node: ^12.17.0 || ^14.13 || >=16.0.0}
|
||||
|
||||
change-case@5.4.4:
|
||||
resolution: {integrity: sha512-HRQyTk2/YPEkt9TnUPbOpr64Uw3KOicFWPVBb+xiHvd6eBx/qPr9xqfBFDT8P2vWsvvz4jbEkfDe71W3VyNu2w==}
|
||||
|
||||
@@ -4173,9 +4173,9 @@ packages:
|
||||
resolution: {integrity: sha512-aCj4O5wKyszjMmDT4tZj93kxyydN/K5zPWSCe6/0AV/AA1pqe5ZBIw0a2ZfPQV7lL5/yb5HsUreJ6UFAF1tEQw==}
|
||||
engines: {node: '>=18'}
|
||||
|
||||
cli-truncate@4.0.0:
|
||||
resolution: {integrity: sha512-nPdaFdQ0h/GEigbPClz11D0v/ZJEwxmeVZGeMo3Z5StPtUTkA9o1lD6QwoirYiSDzbcwn2XcjwmCp68W1IS4TA==}
|
||||
engines: {node: '>=18'}
|
||||
cli-truncate@5.1.0:
|
||||
resolution: {integrity: sha512-7JDGG+4Zp0CsknDCedl0DYdaeOhc46QNpXi3NLQblkZpXXgA6LncLDUUyvrjSvZeF3VRQa+KiMGomazQrC1V8g==}
|
||||
engines: {node: '>=20'}
|
||||
|
||||
cliui@8.0.1:
|
||||
resolution: {integrity: sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==}
|
||||
@@ -4224,6 +4224,10 @@ packages:
|
||||
resolution: {integrity: sha512-2uM9rYjPvyq39NwLRqaiLtWHyDC1FvryJDa2ATTVims5YAS4PupsEQsDvP14FqhFr0P49CYDugi59xaxJlTXRA==}
|
||||
engines: {node: '>=20'}
|
||||
|
||||
commander@14.0.1:
|
||||
resolution: {integrity: sha512-2JkV3gUZUVrbNA+1sjBOYLsMZ5cEEl8GTFP2a4AVz5hvasAMCQ1D2l2le/cX+pV4N6ZU17zjUahLpIXRrnWL8A==}
|
||||
engines: {node: '>=20'}
|
||||
|
||||
commander@2.20.3:
|
||||
resolution: {integrity: sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==}
|
||||
|
||||
@@ -5315,6 +5319,10 @@ packages:
|
||||
resolution: {integrity: sha512-2nk+7SIVb14QrgXFHcm84tD4bKQz0RxPuMT8Ag5KPOq7J5fEmAg0UbXdTOSHqNuHSU28k55qnceesxXRZGzKWA==}
|
||||
engines: {node: '>=18'}
|
||||
|
||||
get-east-asian-width@1.4.0:
|
||||
resolution: {integrity: sha512-QZjmEOC+IT1uk6Rx0sX22V6uHWVwbdbxf1faPqJ1QhLdGgsRGCZoyaQBm/piRdJy/D2um6hM1UP7ZEeQ4EkP+Q==}
|
||||
engines: {node: '>=18'}
|
||||
|
||||
get-intrinsic@1.2.4:
|
||||
resolution: {integrity: sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ==}
|
||||
engines: {node: '>= 0.4'}
|
||||
@@ -5770,10 +5778,6 @@ packages:
|
||||
resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==}
|
||||
engines: {node: '>=8'}
|
||||
|
||||
is-fullwidth-code-point@4.0.0:
|
||||
resolution: {integrity: sha512-O4L094N2/dZ7xqVdrXhh9r1KODPJpFms8B5sGdJLPy664AgvXsreZUyCQQNItZRDlYug4xStLjNp/sz3HvBowQ==}
|
||||
engines: {node: '>=12'}
|
||||
|
||||
is-fullwidth-code-point@5.0.0:
|
||||
resolution: {integrity: sha512-OVa3u9kkBbw7b8Xw5F9P+D/T9X+Z4+JruYVNapTjPYZYUznQ5YfWeFkOj606XYYW8yugTfC8Pj0hYqvi4ryAhA==}
|
||||
engines: {node: '>=18'}
|
||||
@@ -6183,20 +6187,16 @@ packages:
|
||||
resolution: {integrity: sha512-utWOt/GHzuUxnLKxB6dk81RoOeoNeHgbrXiuGk4yyF5qlRz+iIVWu56E2fqGHFrXz0QNUhLB/8nKqvRH66JKGQ==}
|
||||
engines: {node: '>=10'}
|
||||
|
||||
lilconfig@3.1.3:
|
||||
resolution: {integrity: sha512-/vlFKAoH5Cgt3Ie+JLhRbwOsCQePABiU3tJ1egGvyQ+33R/vcwM2Zl2QR/LzjsBeItPt3oSVXapn+m4nQDvpzw==}
|
||||
engines: {node: '>=14'}
|
||||
|
||||
lines-and-columns@1.2.4:
|
||||
resolution: {integrity: sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==}
|
||||
|
||||
lint-staged@16.1.6:
|
||||
resolution: {integrity: sha512-U4kuulU3CKIytlkLlaHcGgKscNfJPNTiDF2avIUGFCv7K95/DCYQ7Ra62ydeRWmgQGg9zJYw2dzdbztwJlqrow==}
|
||||
lint-staged@16.2.0:
|
||||
resolution: {integrity: sha512-spdYSOCQ2MdZ9CM1/bu/kDmaYGsrpNOeu1InFFV8uhv14x6YIubGxbCpSmGILFoxkiheNQPDXSg5Sbb5ZuVnug==}
|
||||
engines: {node: '>=20.17'}
|
||||
hasBin: true
|
||||
|
||||
listr2@9.0.3:
|
||||
resolution: {integrity: sha512-0aeh5HHHgmq1KRdMMDHfhMWQmIT/m7nRDTlxlFqni2Sp0had9baqsjJRvDGdlvgd6NmPE0nPloOipiQJGFtTHQ==}
|
||||
listr2@9.0.4:
|
||||
resolution: {integrity: sha512-1wd/kpAdKRLwv7/3OKC8zZ5U8e/fajCfWMxacUvB79S5nLrYGPtUI/8chMQhn3LQjsRVErTb9i1ECAwW0ZIHnQ==}
|
||||
engines: {node: '>=20.0.0'}
|
||||
|
||||
local-pkg@1.1.1:
|
||||
@@ -6299,6 +6299,9 @@ packages:
|
||||
magic-string@0.30.18:
|
||||
resolution: {integrity: sha512-yi8swmWbO17qHhwIBNeeZxTceJMeBvWJaId6dyvTSOwTipqeHhMhOrz6513r1sOKnpvQ7zkhlG8tPrpilwTxHQ==}
|
||||
|
||||
magic-string@0.30.19:
|
||||
resolution: {integrity: sha512-2N21sPY9Ws53PZvsEpVtNuSW+ScYbQdp4b9qUaL+9QkHUrGFKo56Lg9Emg5s9V/qrtNBmiR01sYhUOwu3H+VOw==}
|
||||
|
||||
make-dir@1.3.0:
|
||||
resolution: {integrity: sha512-2w31R7SJtieJJnQtGc7RVL2StM2vGYVfqUOvUDxH6bC6aJTxPxTF0GnIgCyu7tjockiUWAYQRbxa7vKn34s5sQ==}
|
||||
engines: {node: '>=4'}
|
||||
@@ -6495,6 +6498,9 @@ packages:
|
||||
mlly@1.7.4:
|
||||
resolution: {integrity: sha512-qmdSIPC4bDJXgZTCR7XosJiNKySV7O215tsPtDN9iEO/7q/76b/ijtgRu/+epFXSJhijtTCCGp3DWS549P3xKw==}
|
||||
|
||||
mlly@1.8.0:
|
||||
resolution: {integrity: sha512-l8D9ODSRWLe2KHJSifWGwBqpTZXIXTeo8mlKjY+E2HAakaTeNpqAyBZ8GSqLzHgw4XmHmC8whvpjJNMbFZN7/g==}
|
||||
|
||||
monaco-editor@0.52.2:
|
||||
resolution: {integrity: sha512-GEQWEZmfkOGLdd3XK8ryrfWz3AIP8YymVXiPHEdewrUq7mh0qrKrfHLNCXcbB6sTnMLnOZ3ztSiKcciFUkIJwQ==}
|
||||
|
||||
@@ -6551,8 +6557,8 @@ packages:
|
||||
react: '*'
|
||||
react-dom: '*'
|
||||
|
||||
nano-spawn@1.0.2:
|
||||
resolution: {integrity: sha512-21t+ozMQDAL/UGgQVBbZ/xXvNO10++ZPuTmKRO8k9V3AClVRht49ahtDjfY8l1q6nSHOrE5ASfthzH3ol6R/hg==}
|
||||
nano-spawn@1.0.3:
|
||||
resolution: {integrity: sha512-jtpsQDetTnvS2Ts1fiRdci5rx0VYws5jGyC+4IYOTnIQ/wwdf6JdomlHBwqC3bJYOvaKu0C2GSZ1A60anrYpaA==}
|
||||
engines: {node: '>=20.17'}
|
||||
|
||||
nanoid@3.3.11:
|
||||
@@ -6881,9 +6887,6 @@ packages:
|
||||
pkg-types@2.1.0:
|
||||
resolution: {integrity: sha512-wmJwA+8ihJixSoHKxZJRBQG1oY8Yr9pGLzRmSsNms0iNWyHHAlZCa7mmKiFR10YPZuz/2k169JiS/inOjBCZ2A==}
|
||||
|
||||
pkg-types@2.2.0:
|
||||
resolution: {integrity: sha512-2SM/GZGAEkPp3KWORxQZns4M+WSeXbC2HEvmOIJe3Cmiv6ieAJvdVhDldtHqM5J1Y7MrR1XhkBT/rMlhh9FdqQ==}
|
||||
|
||||
pkg-types@2.3.0:
|
||||
resolution: {integrity: sha512-SIqCzDRg0s9npO5XQ3tNZioRY1uK06lA41ynBC1YmFTmnY6FjUjVt6s4LoADmwoig1qqD0oK8h1p/8mlMx8Oig==}
|
||||
|
||||
@@ -7663,10 +7666,6 @@ packages:
|
||||
resolution: {integrity: sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ==}
|
||||
engines: {node: '>=10'}
|
||||
|
||||
slice-ansi@5.0.0:
|
||||
resolution: {integrity: sha512-FC+lgizVPfie0kkhqUScwRu1O/lF6NOgJmlCgK+/LYxDCTk8sGelYaHDhFcDN+Sn3Cv+3VSa4Byeo+IMCzpMgQ==}
|
||||
engines: {node: '>=12'}
|
||||
|
||||
slice-ansi@7.1.0:
|
||||
resolution: {integrity: sha512-bSiSngZ/jWeX93BqeIAbImyTbEihizcwNjFoRUIY/T1wWQsfsm2Vw1agPKylXvQTU7iASGdHhyqRlqQzfz+Htg==}
|
||||
engines: {node: '>=18'}
|
||||
@@ -7776,6 +7775,10 @@ packages:
|
||||
resolution: {integrity: sha512-tsaTIkKW9b4N+AEj+SVA+WhJzV7/zMhcSu78mLKWSk7cXMOSHsBKFWUs0fWwq8QyK3MgJBQRX6Gbi4kYbdvGkQ==}
|
||||
engines: {node: '>=18'}
|
||||
|
||||
string-width@8.1.0:
|
||||
resolution: {integrity: sha512-Kxl3KJGb/gxkaUMOjRsQ8IrXiGW75O4E3RPjFIINOVH8AMl2SQ/yWdTzWwF3FevIX9LcMAjJW+GRwAlAbTSXdg==}
|
||||
engines: {node: '>=20'}
|
||||
|
||||
string.prototype.matchall@4.0.12:
|
||||
resolution: {integrity: sha512-6CC9uyBL+/48dYizRf7H7VAYCMCNTBeM78x/VTUe9bFEaxBepPJDa1Ow99LqI/1yF7kuy7Q3cQsYMrcjGUcskA==}
|
||||
engines: {node: '>= 0.4'}
|
||||
@@ -7966,8 +7969,8 @@ packages:
|
||||
resolution: {integrity: sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==}
|
||||
engines: {node: '>=6'}
|
||||
|
||||
tar@7.4.4:
|
||||
resolution: {integrity: sha512-O1z7ajPkjTgEgmTGz0v9X4eqeEXTDREPTO77pVC1Nbs86feBU1Zhdg+edzavPmYW1olxkwsqA2v4uOw6E8LeDg==}
|
||||
tar@7.5.1:
|
||||
resolution: {integrity: sha512-nlGpxf+hv0v7GkWBK2V9spgactGOp0qvfWRxUMjqHyzrt3SgwE48DIv/FhqPHJYLHpgW1opq3nERbz5Anq7n1g==}
|
||||
engines: {node: '>=18'}
|
||||
|
||||
telegram@2.26.22:
|
||||
@@ -8135,8 +8138,8 @@ packages:
|
||||
typedarray-to-buffer@3.1.5:
|
||||
resolution: {integrity: sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==}
|
||||
|
||||
typescript-eslint@8.44.0:
|
||||
resolution: {integrity: sha512-ib7mCkYuIzYonCq9XWF5XNw+fkj2zg629PSa9KNIQ47RXFF763S5BIX4wqz1+FLPogTZoiw8KmCiRPRa8bL3qw==}
|
||||
typescript-eslint@8.44.1:
|
||||
resolution: {integrity: sha512-0ws8uWGrUVTjEeN2OM4K1pLKHK/4NiNP/vz6ns+LjT/6sqpaYzIVFajZb1fj/IDwpsrrHb3Jy0Qm5u9CPcKaeg==}
|
||||
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
|
||||
peerDependencies:
|
||||
eslint: ^8.57.0 || ^9.0.0
|
||||
@@ -8160,6 +8163,9 @@ packages:
|
||||
ufo@1.5.4:
|
||||
resolution: {integrity: sha512-UsUk3byDzKd04EyoZ7U4DOlxQaD14JUKQl6/P7wiX4FNvUfm3XL246n9W5AmqwW5RSFJ27NAuM0iLscAOYUiGQ==}
|
||||
|
||||
ufo@1.6.1:
|
||||
resolution: {integrity: sha512-9a4/uxlTWJ4+a5i0ooc1rU7C7YOw3wT+UGqdeNNHWnOF9qcMBgLRS+4IYUqbczewFx4mLEig6gawh7X6mFlEkA==}
|
||||
|
||||
unbox-primitive@1.0.2:
|
||||
resolution: {integrity: sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==}
|
||||
|
||||
@@ -8201,8 +8207,8 @@ packages:
|
||||
unified@11.0.4:
|
||||
resolution: {integrity: sha512-apMPnyLjAX+ty4OrNap7yumyVAMlKx5IWU2wlzzUdYJO9A8f1p9m/gywF/GM2ZDFcjQPrx59Mc90KwmxsoklxQ==}
|
||||
|
||||
unimport@5.2.0:
|
||||
resolution: {integrity: sha512-bTuAMMOOqIAyjV4i4UH7P07pO+EsVxmhOzQ2YJ290J6mkLUdozNhb5I/YoOEheeNADC03ent3Qj07X0fWfUpmw==}
|
||||
unimport@5.4.0:
|
||||
resolution: {integrity: sha512-g/OLFZR2mEfqbC6NC9b2225eCJGvufxq34mj6kM3OmI5gdSL0qyqtnv+9qmsGpAmnzSl6x0IWZj4W+8j2hLkMA==}
|
||||
engines: {node: '>=18.12.0'}
|
||||
|
||||
unique-string@1.0.0:
|
||||
@@ -8244,8 +8250,8 @@ packages:
|
||||
resolution: {integrity: sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==}
|
||||
engines: {node: '>= 10.0.0'}
|
||||
|
||||
unplugin-auto-import@20.1.0:
|
||||
resolution: {integrity: sha512-Wa7/y3DwpbxhjyXCbuliuATCPa0/e47tstWkytJGAr55ooSNwIvbkrq0rlduqYGiCNMsZcD+C6vsN+W3AX96eA==}
|
||||
unplugin-auto-import@20.2.0:
|
||||
resolution: {integrity: sha512-vfBI/SvD9hJqYNinipVOAj5n8dS8DJXFlCKFR5iLDp2SaQwsfdnfLXgZ+34Kd3YY3YEY9omk8XQg0bwos3Q8ug==}
|
||||
engines: {node: '>=14'}
|
||||
peerDependencies:
|
||||
'@nuxt/kit': ^4.0.0
|
||||
@@ -8279,10 +8285,6 @@ packages:
|
||||
vue-template-es2015-compiler:
|
||||
optional: true
|
||||
|
||||
unplugin-utils@0.2.4:
|
||||
resolution: {integrity: sha512-8U/MtpkPkkk3Atewj1+RcKIjb5WBimZ/WSLhhR3w6SsIj8XJuKTacSP8g+2JhfSGw0Cb125Y+2zA/IzJZDVbhA==}
|
||||
engines: {node: '>=18.12.0'}
|
||||
|
||||
unplugin-utils@0.3.0:
|
||||
resolution: {integrity: sha512-JLoggz+PvLVMJo+jZt97hdIIIZ2yTzGgft9e9q8iMrC4ewufl62ekeW7mixBghonn2gVb/ICjyvlmOCUBnJLQg==}
|
||||
engines: {node: '>=20.19.0'}
|
||||
@@ -8291,10 +8293,6 @@ packages:
|
||||
resolution: {integrity: sha512-6NCPkv1ClwH+/BGE9QeoTIl09nuiAt0gS28nn1PvYXsGKRwM2TCbFA2QiilmehPDTXIe684k4rZI1yl3A1PCUw==}
|
||||
engines: {node: '>=18.12.0'}
|
||||
|
||||
unplugin@2.3.9:
|
||||
resolution: {integrity: sha512-2dcbZq6aprwXTkzptq3k5qm5B8cvpjG9ynPd5fyM2wDJuuF7PeUK64Sxf0d+X1ZyDOeGydbNzMqBSIVlH8GIfA==}
|
||||
engines: {node: '>=18.12.0'}
|
||||
|
||||
unrs-resolver@1.10.1:
|
||||
resolution: {integrity: sha512-EFrL7Hw4kmhZdwWO3dwwFJo6hO3FXuQ6Bg8BK/faHZ9m1YxqBS31BNSTxklIQkxK/4LlV8zTYnPsIRLBzTzjCA==}
|
||||
|
||||
@@ -10103,7 +10101,9 @@ snapshots:
|
||||
|
||||
'@eslint-community/regexpp@4.12.1': {}
|
||||
|
||||
'@eslint/compat@1.3.2(eslint@9.36.0(jiti@2.5.1))':
|
||||
'@eslint/compat@1.4.0(eslint@9.36.0(jiti@2.5.1))':
|
||||
dependencies:
|
||||
'@eslint/core': 0.16.0
|
||||
optionalDependencies:
|
||||
eslint: 9.36.0(jiti@2.5.1)
|
||||
|
||||
@@ -10121,6 +10121,10 @@ snapshots:
|
||||
dependencies:
|
||||
'@types/json-schema': 7.0.15
|
||||
|
||||
'@eslint/core@0.16.0':
|
||||
dependencies:
|
||||
'@types/json-schema': 7.0.15
|
||||
|
||||
'@eslint/eslintrc@3.3.1':
|
||||
dependencies:
|
||||
ajv: 6.12.6
|
||||
@@ -11261,7 +11265,7 @@ snapshots:
|
||||
'@tailwindcss/oxide@4.1.13':
|
||||
dependencies:
|
||||
detect-libc: 2.0.4
|
||||
tar: 7.4.4
|
||||
tar: 7.5.1
|
||||
optionalDependencies:
|
||||
'@tailwindcss/oxide-android-arm64': 4.1.13
|
||||
'@tailwindcss/oxide-darwin-arm64': 4.1.13
|
||||
@@ -11793,14 +11797,14 @@ snapshots:
|
||||
'@types/node': 24.3.1
|
||||
optional: true
|
||||
|
||||
'@typescript-eslint/eslint-plugin@8.44.0(@typescript-eslint/parser@8.44.0(eslint@9.36.0(jiti@2.5.1))(typescript@5.9.2))(eslint@9.36.0(jiti@2.5.1))(typescript@5.9.2)':
|
||||
'@typescript-eslint/eslint-plugin@8.44.1(@typescript-eslint/parser@8.44.1(eslint@9.36.0(jiti@2.5.1))(typescript@5.9.2))(eslint@9.36.0(jiti@2.5.1))(typescript@5.9.2)':
|
||||
dependencies:
|
||||
'@eslint-community/regexpp': 4.12.1
|
||||
'@typescript-eslint/parser': 8.44.0(eslint@9.36.0(jiti@2.5.1))(typescript@5.9.2)
|
||||
'@typescript-eslint/scope-manager': 8.44.0
|
||||
'@typescript-eslint/type-utils': 8.44.0(eslint@9.36.0(jiti@2.5.1))(typescript@5.9.2)
|
||||
'@typescript-eslint/utils': 8.44.0(eslint@9.36.0(jiti@2.5.1))(typescript@5.9.2)
|
||||
'@typescript-eslint/visitor-keys': 8.44.0
|
||||
'@typescript-eslint/parser': 8.44.1(eslint@9.36.0(jiti@2.5.1))(typescript@5.9.2)
|
||||
'@typescript-eslint/scope-manager': 8.44.1
|
||||
'@typescript-eslint/type-utils': 8.44.1(eslint@9.36.0(jiti@2.5.1))(typescript@5.9.2)
|
||||
'@typescript-eslint/utils': 8.44.1(eslint@9.36.0(jiti@2.5.1))(typescript@5.9.2)
|
||||
'@typescript-eslint/visitor-keys': 8.44.1
|
||||
eslint: 9.36.0(jiti@2.5.1)
|
||||
graphemer: 1.4.0
|
||||
ignore: 7.0.5
|
||||
@@ -11810,12 +11814,12 @@ snapshots:
|
||||
transitivePeerDependencies:
|
||||
- supports-color
|
||||
|
||||
'@typescript-eslint/parser@8.44.0(eslint@9.36.0(jiti@2.5.1))(typescript@5.9.2)':
|
||||
'@typescript-eslint/parser@8.44.1(eslint@9.36.0(jiti@2.5.1))(typescript@5.9.2)':
|
||||
dependencies:
|
||||
'@typescript-eslint/scope-manager': 8.44.0
|
||||
'@typescript-eslint/types': 8.44.0
|
||||
'@typescript-eslint/typescript-estree': 8.44.0(typescript@5.9.2)
|
||||
'@typescript-eslint/visitor-keys': 8.44.0
|
||||
'@typescript-eslint/scope-manager': 8.44.1
|
||||
'@typescript-eslint/types': 8.44.1
|
||||
'@typescript-eslint/typescript-estree': 8.44.1(typescript@5.9.2)
|
||||
'@typescript-eslint/visitor-keys': 8.44.1
|
||||
debug: 4.4.1
|
||||
eslint: 9.36.0(jiti@2.5.1)
|
||||
typescript: 5.9.2
|
||||
@@ -11824,17 +11828,17 @@ snapshots:
|
||||
|
||||
'@typescript-eslint/project-service@8.41.0(typescript@5.9.2)':
|
||||
dependencies:
|
||||
'@typescript-eslint/tsconfig-utils': 8.43.0(typescript@5.9.2)
|
||||
'@typescript-eslint/types': 8.43.0
|
||||
'@typescript-eslint/tsconfig-utils': 8.44.0(typescript@5.9.2)
|
||||
'@typescript-eslint/types': 8.44.0
|
||||
debug: 4.4.1
|
||||
typescript: 5.9.2
|
||||
transitivePeerDependencies:
|
||||
- supports-color
|
||||
|
||||
'@typescript-eslint/project-service@8.44.0(typescript@5.9.2)':
|
||||
'@typescript-eslint/project-service@8.44.1(typescript@5.9.2)':
|
||||
dependencies:
|
||||
'@typescript-eslint/tsconfig-utils': 8.44.0(typescript@5.9.2)
|
||||
'@typescript-eslint/types': 8.44.0
|
||||
'@typescript-eslint/tsconfig-utils': 8.44.1(typescript@5.9.2)
|
||||
'@typescript-eslint/types': 8.44.1
|
||||
debug: 4.4.1
|
||||
typescript: 5.9.2
|
||||
transitivePeerDependencies:
|
||||
@@ -11845,28 +11849,28 @@ snapshots:
|
||||
'@typescript-eslint/types': 8.41.0
|
||||
'@typescript-eslint/visitor-keys': 8.41.0
|
||||
|
||||
'@typescript-eslint/scope-manager@8.44.0':
|
||||
'@typescript-eslint/scope-manager@8.44.1':
|
||||
dependencies:
|
||||
'@typescript-eslint/types': 8.44.0
|
||||
'@typescript-eslint/visitor-keys': 8.44.0
|
||||
'@typescript-eslint/types': 8.44.1
|
||||
'@typescript-eslint/visitor-keys': 8.44.1
|
||||
|
||||
'@typescript-eslint/tsconfig-utils@8.41.0(typescript@5.9.2)':
|
||||
dependencies:
|
||||
typescript: 5.9.2
|
||||
|
||||
'@typescript-eslint/tsconfig-utils@8.43.0(typescript@5.9.2)':
|
||||
dependencies:
|
||||
typescript: 5.9.2
|
||||
|
||||
'@typescript-eslint/tsconfig-utils@8.44.0(typescript@5.9.2)':
|
||||
dependencies:
|
||||
typescript: 5.9.2
|
||||
|
||||
'@typescript-eslint/type-utils@8.44.0(eslint@9.36.0(jiti@2.5.1))(typescript@5.9.2)':
|
||||
'@typescript-eslint/tsconfig-utils@8.44.1(typescript@5.9.2)':
|
||||
dependencies:
|
||||
'@typescript-eslint/types': 8.44.0
|
||||
'@typescript-eslint/typescript-estree': 8.44.0(typescript@5.9.2)
|
||||
'@typescript-eslint/utils': 8.44.0(eslint@9.36.0(jiti@2.5.1))(typescript@5.9.2)
|
||||
typescript: 5.9.2
|
||||
|
||||
'@typescript-eslint/type-utils@8.44.1(eslint@9.36.0(jiti@2.5.1))(typescript@5.9.2)':
|
||||
dependencies:
|
||||
'@typescript-eslint/types': 8.44.1
|
||||
'@typescript-eslint/typescript-estree': 8.44.1(typescript@5.9.2)
|
||||
'@typescript-eslint/utils': 8.44.1(eslint@9.36.0(jiti@2.5.1))(typescript@5.9.2)
|
||||
debug: 4.4.1
|
||||
eslint: 9.36.0(jiti@2.5.1)
|
||||
ts-api-utils: 2.1.0(typescript@5.9.2)
|
||||
@@ -11876,10 +11880,10 @@ snapshots:
|
||||
|
||||
'@typescript-eslint/types@8.41.0': {}
|
||||
|
||||
'@typescript-eslint/types@8.43.0': {}
|
||||
|
||||
'@typescript-eslint/types@8.44.0': {}
|
||||
|
||||
'@typescript-eslint/types@8.44.1': {}
|
||||
|
||||
'@typescript-eslint/typescript-estree@8.41.0(typescript@5.9.2)':
|
||||
dependencies:
|
||||
'@typescript-eslint/project-service': 8.41.0(typescript@5.9.2)
|
||||
@@ -11896,12 +11900,12 @@ snapshots:
|
||||
transitivePeerDependencies:
|
||||
- supports-color
|
||||
|
||||
'@typescript-eslint/typescript-estree@8.44.0(typescript@5.9.2)':
|
||||
'@typescript-eslint/typescript-estree@8.44.1(typescript@5.9.2)':
|
||||
dependencies:
|
||||
'@typescript-eslint/project-service': 8.44.0(typescript@5.9.2)
|
||||
'@typescript-eslint/tsconfig-utils': 8.44.0(typescript@5.9.2)
|
||||
'@typescript-eslint/types': 8.44.0
|
||||
'@typescript-eslint/visitor-keys': 8.44.0
|
||||
'@typescript-eslint/project-service': 8.44.1(typescript@5.9.2)
|
||||
'@typescript-eslint/tsconfig-utils': 8.44.1(typescript@5.9.2)
|
||||
'@typescript-eslint/types': 8.44.1
|
||||
'@typescript-eslint/visitor-keys': 8.44.1
|
||||
debug: 4.4.1
|
||||
fast-glob: 3.3.3
|
||||
is-glob: 4.0.3
|
||||
@@ -11923,12 +11927,12 @@ snapshots:
|
||||
transitivePeerDependencies:
|
||||
- supports-color
|
||||
|
||||
'@typescript-eslint/utils@8.44.0(eslint@9.36.0(jiti@2.5.1))(typescript@5.9.2)':
|
||||
'@typescript-eslint/utils@8.44.1(eslint@9.36.0(jiti@2.5.1))(typescript@5.9.2)':
|
||||
dependencies:
|
||||
'@eslint-community/eslint-utils': 4.8.0(eslint@9.36.0(jiti@2.5.1))
|
||||
'@typescript-eslint/scope-manager': 8.44.0
|
||||
'@typescript-eslint/types': 8.44.0
|
||||
'@typescript-eslint/typescript-estree': 8.44.0(typescript@5.9.2)
|
||||
'@typescript-eslint/scope-manager': 8.44.1
|
||||
'@typescript-eslint/types': 8.44.1
|
||||
'@typescript-eslint/typescript-estree': 8.44.1(typescript@5.9.2)
|
||||
eslint: 9.36.0(jiti@2.5.1)
|
||||
typescript: 5.9.2
|
||||
transitivePeerDependencies:
|
||||
@@ -11939,9 +11943,9 @@ snapshots:
|
||||
'@typescript-eslint/types': 8.41.0
|
||||
eslint-visitor-keys: 4.2.1
|
||||
|
||||
'@typescript-eslint/visitor-keys@8.44.0':
|
||||
'@typescript-eslint/visitor-keys@8.44.1':
|
||||
dependencies:
|
||||
'@typescript-eslint/types': 8.44.0
|
||||
'@typescript-eslint/types': 8.44.1
|
||||
eslint-visitor-keys: 4.2.1
|
||||
|
||||
'@ungap/structured-clone@1.2.0': {}
|
||||
@@ -12547,8 +12551,6 @@ snapshots:
|
||||
|
||||
chalk@5.4.1: {}
|
||||
|
||||
chalk@5.6.0: {}
|
||||
|
||||
change-case@5.4.4: {}
|
||||
|
||||
character-entities-html4@2.1.0: {}
|
||||
@@ -12591,10 +12593,10 @@ snapshots:
|
||||
dependencies:
|
||||
restore-cursor: 5.1.0
|
||||
|
||||
cli-truncate@4.0.0:
|
||||
cli-truncate@5.1.0:
|
||||
dependencies:
|
||||
slice-ansi: 5.0.0
|
||||
string-width: 7.2.0
|
||||
slice-ansi: 7.1.0
|
||||
string-width: 8.1.0
|
||||
|
||||
cliui@8.0.1:
|
||||
dependencies:
|
||||
@@ -12638,6 +12640,8 @@ snapshots:
|
||||
|
||||
commander@14.0.0: {}
|
||||
|
||||
commander@14.0.1: {}
|
||||
|
||||
commander@2.20.3: {}
|
||||
|
||||
commander@7.2.0: {}
|
||||
@@ -13517,9 +13521,9 @@ snapshots:
|
||||
optionalDependencies:
|
||||
unrs-resolver: 1.10.1
|
||||
|
||||
eslint-import-resolver-alias@1.1.2(eslint-plugin-import@2.32.0(@typescript-eslint/parser@8.44.0(eslint@9.36.0(jiti@2.5.1))(typescript@5.9.2))(eslint@9.36.0(jiti@2.5.1))):
|
||||
eslint-import-resolver-alias@1.1.2(eslint-plugin-import@2.32.0(@typescript-eslint/parser@8.44.1(eslint@9.36.0(jiti@2.5.1))(typescript@5.9.2))(eslint@9.36.0(jiti@2.5.1))):
|
||||
dependencies:
|
||||
eslint-plugin-import: 2.32.0(@typescript-eslint/parser@8.44.0(eslint@9.36.0(jiti@2.5.1))(typescript@5.9.2))(eslint@9.36.0(jiti@2.5.1))
|
||||
eslint-plugin-import: 2.32.0(@typescript-eslint/parser@8.44.1(eslint@9.36.0(jiti@2.5.1))(typescript@5.9.2))(eslint@9.36.0(jiti@2.5.1))
|
||||
|
||||
eslint-import-resolver-node@0.3.9:
|
||||
dependencies:
|
||||
@@ -13529,7 +13533,7 @@ snapshots:
|
||||
transitivePeerDependencies:
|
||||
- supports-color
|
||||
|
||||
eslint-import-resolver-typescript@3.10.1(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.44.0(eslint@9.36.0(jiti@2.5.1))(typescript@5.9.2))(eslint-import-resolver-node@0.3.9)(eslint@9.36.0(jiti@2.5.1)))(eslint-plugin-import@2.32.0(@typescript-eslint/parser@8.44.0(eslint@9.36.0(jiti@2.5.1))(typescript@5.9.2))(eslint@9.36.0(jiti@2.5.1)))(eslint@9.36.0(jiti@2.5.1)):
|
||||
eslint-import-resolver-typescript@3.10.1(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.44.1(eslint@9.36.0(jiti@2.5.1))(typescript@5.9.2))(eslint-import-resolver-node@0.3.9)(eslint@9.36.0(jiti@2.5.1)))(eslint-plugin-import@2.32.0(@typescript-eslint/parser@8.44.1(eslint@9.36.0(jiti@2.5.1))(typescript@5.9.2))(eslint@9.36.0(jiti@2.5.1)))(eslint@9.36.0(jiti@2.5.1)):
|
||||
dependencies:
|
||||
'@nolyfill/is-core-module': 1.0.39
|
||||
debug: 4.4.1
|
||||
@@ -13540,16 +13544,16 @@ snapshots:
|
||||
tinyglobby: 0.2.14
|
||||
unrs-resolver: 1.10.1
|
||||
optionalDependencies:
|
||||
eslint-plugin-import: 2.32.0(@typescript-eslint/parser@8.44.0(eslint@9.36.0(jiti@2.5.1))(typescript@5.9.2))(eslint@9.36.0(jiti@2.5.1))
|
||||
eslint-plugin-import-x: 4.16.1(@typescript-eslint/utils@8.44.0(eslint@9.36.0(jiti@2.5.1))(typescript@5.9.2))(eslint-import-resolver-node@0.3.9)(eslint@9.36.0(jiti@2.5.1))
|
||||
eslint-plugin-import: 2.32.0(@typescript-eslint/parser@8.44.1(eslint@9.36.0(jiti@2.5.1))(typescript@5.9.2))(eslint@9.36.0(jiti@2.5.1))
|
||||
eslint-plugin-import-x: 4.16.1(@typescript-eslint/utils@8.44.1(eslint@9.36.0(jiti@2.5.1))(typescript@5.9.2))(eslint-import-resolver-node@0.3.9)(eslint@9.36.0(jiti@2.5.1))
|
||||
transitivePeerDependencies:
|
||||
- supports-color
|
||||
|
||||
eslint-module-utils@2.12.1(@typescript-eslint/parser@8.44.0(eslint@9.36.0(jiti@2.5.1))(typescript@5.9.2))(eslint-import-resolver-node@0.3.9)(eslint@9.36.0(jiti@2.5.1)):
|
||||
eslint-module-utils@2.12.1(@typescript-eslint/parser@8.44.1(eslint@9.36.0(jiti@2.5.1))(typescript@5.9.2))(eslint-import-resolver-node@0.3.9)(eslint@9.36.0(jiti@2.5.1)):
|
||||
dependencies:
|
||||
debug: 3.2.7
|
||||
optionalDependencies:
|
||||
'@typescript-eslint/parser': 8.44.0(eslint@9.36.0(jiti@2.5.1))(typescript@5.9.2)
|
||||
'@typescript-eslint/parser': 8.44.1(eslint@9.36.0(jiti@2.5.1))(typescript@5.9.2)
|
||||
eslint: 9.36.0(jiti@2.5.1)
|
||||
eslint-import-resolver-node: 0.3.9
|
||||
transitivePeerDependencies:
|
||||
@@ -13566,7 +13570,7 @@ snapshots:
|
||||
dependencies:
|
||||
htmlparser2: 10.0.0
|
||||
|
||||
eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.44.0(eslint@9.36.0(jiti@2.5.1))(typescript@5.9.2))(eslint-import-resolver-node@0.3.9)(eslint@9.36.0(jiti@2.5.1)):
|
||||
eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.44.1(eslint@9.36.0(jiti@2.5.1))(typescript@5.9.2))(eslint-import-resolver-node@0.3.9)(eslint@9.36.0(jiti@2.5.1)):
|
||||
dependencies:
|
||||
'@typescript-eslint/types': 8.41.0
|
||||
comment-parser: 1.4.1
|
||||
@@ -13579,12 +13583,12 @@ snapshots:
|
||||
stable-hash-x: 0.2.0
|
||||
unrs-resolver: 1.10.1
|
||||
optionalDependencies:
|
||||
'@typescript-eslint/utils': 8.44.0(eslint@9.36.0(jiti@2.5.1))(typescript@5.9.2)
|
||||
'@typescript-eslint/utils': 8.44.1(eslint@9.36.0(jiti@2.5.1))(typescript@5.9.2)
|
||||
eslint-import-resolver-node: 0.3.9
|
||||
transitivePeerDependencies:
|
||||
- supports-color
|
||||
|
||||
eslint-plugin-import@2.32.0(@typescript-eslint/parser@8.44.0(eslint@9.36.0(jiti@2.5.1))(typescript@5.9.2))(eslint@9.36.0(jiti@2.5.1)):
|
||||
eslint-plugin-import@2.32.0(@typescript-eslint/parser@8.44.1(eslint@9.36.0(jiti@2.5.1))(typescript@5.9.2))(eslint@9.36.0(jiti@2.5.1)):
|
||||
dependencies:
|
||||
'@rtsao/scc': 1.1.0
|
||||
array-includes: 3.1.9
|
||||
@@ -13595,7 +13599,7 @@ snapshots:
|
||||
doctrine: 2.1.0
|
||||
eslint: 9.36.0(jiti@2.5.1)
|
||||
eslint-import-resolver-node: 0.3.9
|
||||
eslint-module-utils: 2.12.1(@typescript-eslint/parser@8.44.0(eslint@9.36.0(jiti@2.5.1))(typescript@5.9.2))(eslint-import-resolver-node@0.3.9)(eslint@9.36.0(jiti@2.5.1))
|
||||
eslint-module-utils: 2.12.1(@typescript-eslint/parser@8.44.1(eslint@9.36.0(jiti@2.5.1))(typescript@5.9.2))(eslint-import-resolver-node@0.3.9)(eslint@9.36.0(jiti@2.5.1))
|
||||
hasown: 2.0.2
|
||||
is-core-module: 2.16.1
|
||||
is-glob: 4.0.3
|
||||
@@ -13607,7 +13611,7 @@ snapshots:
|
||||
string.prototype.trimend: 1.0.9
|
||||
tsconfig-paths: 3.15.0
|
||||
optionalDependencies:
|
||||
'@typescript-eslint/parser': 8.44.0(eslint@9.36.0(jiti@2.5.1))(typescript@5.9.2)
|
||||
'@typescript-eslint/parser': 8.44.1(eslint@9.36.0(jiti@2.5.1))(typescript@5.9.2)
|
||||
transitivePeerDependencies:
|
||||
- eslint-import-resolver-typescript
|
||||
- eslint-import-resolver-webpack
|
||||
@@ -13995,6 +13999,8 @@ snapshots:
|
||||
|
||||
get-east-asian-width@1.2.0: {}
|
||||
|
||||
get-east-asian-width@1.4.0: {}
|
||||
|
||||
get-intrinsic@1.2.4:
|
||||
dependencies:
|
||||
es-errors: 1.3.0
|
||||
@@ -14510,8 +14516,6 @@ snapshots:
|
||||
|
||||
is-fullwidth-code-point@3.0.0: {}
|
||||
|
||||
is-fullwidth-code-point@4.0.0: {}
|
||||
|
||||
is-fullwidth-code-point@5.0.0:
|
||||
dependencies:
|
||||
get-east-asian-width: 1.2.0
|
||||
@@ -14861,28 +14865,21 @@ snapshots:
|
||||
|
||||
lilconfig@2.1.0: {}
|
||||
|
||||
lilconfig@3.1.3: {}
|
||||
|
||||
lines-and-columns@1.2.4: {}
|
||||
|
||||
lint-staged@16.1.6:
|
||||
lint-staged@16.2.0:
|
||||
dependencies:
|
||||
chalk: 5.6.0
|
||||
commander: 14.0.0
|
||||
debug: 4.4.1
|
||||
lilconfig: 3.1.3
|
||||
listr2: 9.0.3
|
||||
commander: 14.0.1
|
||||
listr2: 9.0.4
|
||||
micromatch: 4.0.8
|
||||
nano-spawn: 1.0.2
|
||||
nano-spawn: 1.0.3
|
||||
pidtree: 0.6.0
|
||||
string-argv: 0.3.2
|
||||
yaml: 2.8.1
|
||||
transitivePeerDependencies:
|
||||
- supports-color
|
||||
|
||||
listr2@9.0.3:
|
||||
listr2@9.0.4:
|
||||
dependencies:
|
||||
cli-truncate: 4.0.0
|
||||
cli-truncate: 5.1.0
|
||||
colorette: 2.0.20
|
||||
eventemitter3: 5.0.1
|
||||
log-update: 6.1.0
|
||||
@@ -14982,6 +14979,10 @@ snapshots:
|
||||
dependencies:
|
||||
'@jridgewell/sourcemap-codec': 1.5.5
|
||||
|
||||
magic-string@0.30.19:
|
||||
dependencies:
|
||||
'@jridgewell/sourcemap-codec': 1.5.5
|
||||
|
||||
make-dir@1.3.0:
|
||||
dependencies:
|
||||
pify: 3.0.0
|
||||
@@ -15290,6 +15291,13 @@ snapshots:
|
||||
pkg-types: 1.3.1
|
||||
ufo: 1.5.4
|
||||
|
||||
mlly@1.8.0:
|
||||
dependencies:
|
||||
acorn: 8.15.0
|
||||
pathe: 2.0.3
|
||||
pkg-types: 1.3.1
|
||||
ufo: 1.6.1
|
||||
|
||||
monaco-editor@0.52.2: {}
|
||||
|
||||
monaco-languageserver-types@0.4.0:
|
||||
@@ -15359,7 +15367,7 @@ snapshots:
|
||||
stacktrace-js: 2.0.2
|
||||
stylis: 4.3.2
|
||||
|
||||
nano-spawn@1.0.2: {}
|
||||
nano-spawn@1.0.3: {}
|
||||
|
||||
nanoid@3.3.11: {}
|
||||
|
||||
@@ -15375,20 +15383,20 @@ snapshots:
|
||||
sax: 1.3.0
|
||||
optional: true
|
||||
|
||||
neostandard@0.12.2(@typescript-eslint/utils@8.44.0(eslint@9.36.0(jiti@2.5.1))(typescript@5.9.2))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.32.0(@typescript-eslint/parser@8.44.0(eslint@9.36.0(jiti@2.5.1))(typescript@5.9.2))(eslint@9.36.0(jiti@2.5.1)))(eslint@9.36.0(jiti@2.5.1))(typescript@5.9.2):
|
||||
neostandard@0.12.2(@typescript-eslint/utils@8.44.1(eslint@9.36.0(jiti@2.5.1))(typescript@5.9.2))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.32.0(@typescript-eslint/parser@8.44.1(eslint@9.36.0(jiti@2.5.1))(typescript@5.9.2))(eslint@9.36.0(jiti@2.5.1)))(eslint@9.36.0(jiti@2.5.1))(typescript@5.9.2):
|
||||
dependencies:
|
||||
'@humanwhocodes/gitignore-to-minimatch': 1.0.2
|
||||
'@stylistic/eslint-plugin': 2.11.0(eslint@9.36.0(jiti@2.5.1))(typescript@5.9.2)
|
||||
eslint: 9.36.0(jiti@2.5.1)
|
||||
eslint-import-resolver-typescript: 3.10.1(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.44.0(eslint@9.36.0(jiti@2.5.1))(typescript@5.9.2))(eslint-import-resolver-node@0.3.9)(eslint@9.36.0(jiti@2.5.1)))(eslint-plugin-import@2.32.0(@typescript-eslint/parser@8.44.0(eslint@9.36.0(jiti@2.5.1))(typescript@5.9.2))(eslint@9.36.0(jiti@2.5.1)))(eslint@9.36.0(jiti@2.5.1))
|
||||
eslint-plugin-import-x: 4.16.1(@typescript-eslint/utils@8.44.0(eslint@9.36.0(jiti@2.5.1))(typescript@5.9.2))(eslint-import-resolver-node@0.3.9)(eslint@9.36.0(jiti@2.5.1))
|
||||
eslint-import-resolver-typescript: 3.10.1(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.44.1(eslint@9.36.0(jiti@2.5.1))(typescript@5.9.2))(eslint-import-resolver-node@0.3.9)(eslint@9.36.0(jiti@2.5.1)))(eslint-plugin-import@2.32.0(@typescript-eslint/parser@8.44.1(eslint@9.36.0(jiti@2.5.1))(typescript@5.9.2))(eslint@9.36.0(jiti@2.5.1)))(eslint@9.36.0(jiti@2.5.1))
|
||||
eslint-plugin-import-x: 4.16.1(@typescript-eslint/utils@8.44.1(eslint@9.36.0(jiti@2.5.1))(typescript@5.9.2))(eslint-import-resolver-node@0.3.9)(eslint@9.36.0(jiti@2.5.1))
|
||||
eslint-plugin-n: 17.23.1(eslint@9.36.0(jiti@2.5.1))(typescript@5.9.2)
|
||||
eslint-plugin-promise: 7.2.1(eslint@9.36.0(jiti@2.5.1))
|
||||
eslint-plugin-react: 7.37.5(eslint@9.36.0(jiti@2.5.1))
|
||||
find-up: 5.0.0
|
||||
globals: 15.15.0
|
||||
peowly: 1.3.2
|
||||
typescript-eslint: 8.44.0(eslint@9.36.0(jiti@2.5.1))(typescript@5.9.2)
|
||||
typescript-eslint: 8.44.1(eslint@9.36.0(jiti@2.5.1))(typescript@5.9.2)
|
||||
transitivePeerDependencies:
|
||||
- '@typescript-eslint/utils'
|
||||
- eslint-import-resolver-node
|
||||
@@ -15743,12 +15751,6 @@ snapshots:
|
||||
exsolve: 1.0.4
|
||||
pathe: 2.0.3
|
||||
|
||||
pkg-types@2.2.0:
|
||||
dependencies:
|
||||
confbox: 0.2.2
|
||||
exsolve: 1.0.7
|
||||
pathe: 2.0.3
|
||||
|
||||
pkg-types@2.3.0:
|
||||
dependencies:
|
||||
confbox: 0.2.2
|
||||
@@ -16530,11 +16532,6 @@ snapshots:
|
||||
astral-regex: 2.0.0
|
||||
is-fullwidth-code-point: 3.0.0
|
||||
|
||||
slice-ansi@5.0.0:
|
||||
dependencies:
|
||||
ansi-styles: 6.2.1
|
||||
is-fullwidth-code-point: 4.0.0
|
||||
|
||||
slice-ansi@7.1.0:
|
||||
dependencies:
|
||||
ansi-styles: 6.2.1
|
||||
@@ -16636,6 +16633,11 @@ snapshots:
|
||||
get-east-asian-width: 1.2.0
|
||||
strip-ansi: 7.1.0
|
||||
|
||||
string-width@8.1.0:
|
||||
dependencies:
|
||||
get-east-asian-width: 1.4.0
|
||||
strip-ansi: 7.1.0
|
||||
|
||||
string.prototype.matchall@4.0.12:
|
||||
dependencies:
|
||||
call-bind: 1.0.8
|
||||
@@ -16885,7 +16887,7 @@ snapshots:
|
||||
|
||||
tapable@2.2.1: {}
|
||||
|
||||
tar@7.4.4:
|
||||
tar@7.5.1:
|
||||
dependencies:
|
||||
'@isaacs/fs-minipass': 4.0.1
|
||||
chownr: 3.0.0
|
||||
@@ -17088,12 +17090,12 @@ snapshots:
|
||||
dependencies:
|
||||
is-typedarray: 1.0.0
|
||||
|
||||
typescript-eslint@8.44.0(eslint@9.36.0(jiti@2.5.1))(typescript@5.9.2):
|
||||
typescript-eslint@8.44.1(eslint@9.36.0(jiti@2.5.1))(typescript@5.9.2):
|
||||
dependencies:
|
||||
'@typescript-eslint/eslint-plugin': 8.44.0(@typescript-eslint/parser@8.44.0(eslint@9.36.0(jiti@2.5.1))(typescript@5.9.2))(eslint@9.36.0(jiti@2.5.1))(typescript@5.9.2)
|
||||
'@typescript-eslint/parser': 8.44.0(eslint@9.36.0(jiti@2.5.1))(typescript@5.9.2)
|
||||
'@typescript-eslint/typescript-estree': 8.44.0(typescript@5.9.2)
|
||||
'@typescript-eslint/utils': 8.44.0(eslint@9.36.0(jiti@2.5.1))(typescript@5.9.2)
|
||||
'@typescript-eslint/eslint-plugin': 8.44.1(@typescript-eslint/parser@8.44.1(eslint@9.36.0(jiti@2.5.1))(typescript@5.9.2))(eslint@9.36.0(jiti@2.5.1))(typescript@5.9.2)
|
||||
'@typescript-eslint/parser': 8.44.1(eslint@9.36.0(jiti@2.5.1))(typescript@5.9.2)
|
||||
'@typescript-eslint/typescript-estree': 8.44.1(typescript@5.9.2)
|
||||
'@typescript-eslint/utils': 8.44.1(eslint@9.36.0(jiti@2.5.1))(typescript@5.9.2)
|
||||
eslint: 9.36.0(jiti@2.5.1)
|
||||
typescript: 5.9.2
|
||||
transitivePeerDependencies:
|
||||
@@ -17129,6 +17131,8 @@ snapshots:
|
||||
|
||||
ufo@1.5.4: {}
|
||||
|
||||
ufo@1.6.1: {}
|
||||
|
||||
unbox-primitive@1.0.2:
|
||||
dependencies:
|
||||
call-bind: 1.0.8
|
||||
@@ -17174,22 +17178,22 @@ snapshots:
|
||||
trough: 2.2.0
|
||||
vfile: 6.0.1
|
||||
|
||||
unimport@5.2.0:
|
||||
unimport@5.4.0:
|
||||
dependencies:
|
||||
acorn: 8.15.0
|
||||
escape-string-regexp: 5.0.0
|
||||
estree-walker: 3.0.3
|
||||
local-pkg: 1.1.2
|
||||
magic-string: 0.30.18
|
||||
mlly: 1.7.4
|
||||
magic-string: 0.30.19
|
||||
mlly: 1.8.0
|
||||
pathe: 2.0.3
|
||||
picomatch: 4.0.3
|
||||
pkg-types: 2.2.0
|
||||
pkg-types: 2.3.0
|
||||
scule: 1.3.0
|
||||
strip-literal: 3.0.0
|
||||
tinyglobby: 0.2.14
|
||||
tinyglobby: 0.2.15
|
||||
unplugin: 2.3.10
|
||||
unplugin-utils: 0.2.4
|
||||
unplugin-utils: 0.3.0
|
||||
|
||||
unique-string@1.0.0:
|
||||
dependencies:
|
||||
@@ -17233,13 +17237,13 @@ snapshots:
|
||||
|
||||
universalify@2.0.1: {}
|
||||
|
||||
unplugin-auto-import@20.1.0:
|
||||
unplugin-auto-import@20.2.0:
|
||||
dependencies:
|
||||
local-pkg: 1.1.2
|
||||
magic-string: 0.30.18
|
||||
magic-string: 0.30.19
|
||||
picomatch: 4.0.3
|
||||
unimport: 5.2.0
|
||||
unplugin: 2.3.9
|
||||
unimport: 5.4.0
|
||||
unplugin: 2.3.10
|
||||
unplugin-utils: 0.3.0
|
||||
|
||||
unplugin-icons@22.3.0(@svgr/core@8.1.0(typescript@5.9.2)):
|
||||
@@ -17254,11 +17258,6 @@ snapshots:
|
||||
transitivePeerDependencies:
|
||||
- supports-color
|
||||
|
||||
unplugin-utils@0.2.4:
|
||||
dependencies:
|
||||
pathe: 2.0.3
|
||||
picomatch: 4.0.3
|
||||
|
||||
unplugin-utils@0.3.0:
|
||||
dependencies:
|
||||
pathe: 2.0.3
|
||||
@@ -17271,13 +17270,6 @@ snapshots:
|
||||
picomatch: 4.0.3
|
||||
webpack-virtual-modules: 0.6.2
|
||||
|
||||
unplugin@2.3.9:
|
||||
dependencies:
|
||||
'@jridgewell/remapping': 2.3.5
|
||||
acorn: 8.15.0
|
||||
picomatch: 4.0.3
|
||||
webpack-virtual-modules: 0.6.2
|
||||
|
||||
unrs-resolver@1.10.1:
|
||||
dependencies:
|
||||
napi-postinstall: 0.3.0
|
||||
|
||||
@@ -22,7 +22,7 @@
|
||||
"fs-extra": "11.3.2",
|
||||
"octokit": "5.0.3",
|
||||
"picocolors": "1.1.1",
|
||||
"tar": "7.4.4",
|
||||
"tar": "7.5.1",
|
||||
"telegram": "2.26.22",
|
||||
"undici": "7.16.0",
|
||||
"yargs": "18.0.0"
|
||||
|
||||
@@ -2,6 +2,26 @@
|
||||
|
||||
All notable changes to this project will be documented in this file. See [standard-version](https://github.com/conventional-changelog/standard-version) for commit guidelines.
|
||||
|
||||
## [2.44.0](https://github.com/filebrowser/filebrowser/compare/v2.43.0...v2.44.0) (2025-09-25)
|
||||
|
||||
|
||||
### Features
|
||||
|
||||
* allow setting ace editor theme ([#3826](https://github.com/filebrowser/filebrowser/issues/3826)) ([b9787c7](https://github.com/filebrowser/filebrowser/commit/b9787c78f3889171f94db19e7655dce68c64b6fb))
|
||||
* Improved path display in the new file and directory modal ([#5451](https://github.com/filebrowser/filebrowser/issues/5451)) ([d29ad35](https://github.com/filebrowser/filebrowser/commit/d29ad356d1067c87b2821debab91286549f512a0))
|
||||
* Translate frontend/src/i18n/en.json in no ([dec7a02](https://github.com/filebrowser/filebrowser/commit/dec7a027378fbc6948d203199c44a640a141bcad))
|
||||
* Updates for project File Browser ([#5446](https://github.com/filebrowser/filebrowser/issues/5446)) ([4ff247e](https://github.com/filebrowser/filebrowser/commit/4ff247e134e4d61668ee656a258ed67f71414e18))
|
||||
* Updates for project File Browser ([#5450](https://github.com/filebrowser/filebrowser/issues/5450)) ([0eade71](https://github.com/filebrowser/filebrowser/commit/0eade717ce9d04bf48051922f11d983edbc7c2d0))
|
||||
* Updates for project File Browser ([#5457](https://github.com/filebrowser/filebrowser/issues/5457)) ([1165f00](https://github.com/filebrowser/filebrowser/commit/1165f00bd4dcb0dcfbc084f54f51902ba4b4a714))
|
||||
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
* computation of file path ([c472542](https://github.com/filebrowser/filebrowser/commit/c4725428e07da72b855009e2c13c6ed91d32e0b7))
|
||||
* show login when session token expires ([e6c674b](https://github.com/filebrowser/filebrowser/commit/e6c674b3c616831942c4d4aacab0907d58003e23))
|
||||
* some formatting issues with i18n files ([949ddff](https://github.com/filebrowser/filebrowser/commit/949ddffef20e38169902c5fd74dca4815dcecf11))
|
||||
* **upload:** throttle upload speed calculation to 100ms to avoid Infinity MB/s ([#5456](https://github.com/filebrowser/filebrowser/issues/5456)) ([692ca5e](https://github.com/filebrowser/filebrowser/commit/692ca5eaf01e4dcf346ba03f82c5dbd50cce246b))
|
||||
|
||||
## [2.43.0](https://github.com/filebrowser/filebrowser/compare/v2.42.5...v2.43.0) (2025-09-13)
|
||||
|
||||
|
||||
|
||||
@@ -221,6 +221,7 @@ func printSettings(ser *settings.Server, set *settings.Settings, auther auth.Aut
|
||||
fmt.Fprintf(w, "\tFile Creation Mode:\t%O\n", set.FileMode)
|
||||
fmt.Fprintf(w, "\tDirectory Creation Mode:\t%O\n", set.DirMode)
|
||||
fmt.Fprintf(w, "\tCommands:\t%s\n", strings.Join(set.Defaults.Commands, " "))
|
||||
fmt.Fprintf(w, "\tAce editor syntax highlighting theme:\t%s\n", set.Defaults.AceEditorTheme)
|
||||
fmt.Fprintf(w, "\tSorting:\n")
|
||||
fmt.Fprintf(w, "\t\tBy:\t%s\n", set.Defaults.Sorting.By)
|
||||
fmt.Fprintf(w, "\t\tAsc:\t%t\n", set.Defaults.Sorting.Asc)
|
||||
|
||||
@@ -424,9 +424,10 @@ func quickSetup(flags *pflag.FlagSet, d pythonData) error {
|
||||
MinimumPasswordLength: settings.DefaultMinimumPasswordLength,
|
||||
UserHomeBasePath: settings.DefaultUsersHomeBasePath,
|
||||
Defaults: settings.UserDefaults{
|
||||
Scope: ".",
|
||||
Locale: "en",
|
||||
SingleClick: false,
|
||||
Scope: ".",
|
||||
Locale: "en",
|
||||
SingleClick: false,
|
||||
AceEditorTheme: getStringParam(flags, "defaults.aceEditorTheme"),
|
||||
Perm: users.Permissions{
|
||||
Admin: false,
|
||||
Execute: true,
|
||||
|
||||
@@ -79,6 +79,7 @@ func addUserFlags(flags *pflag.FlagSet) {
|
||||
flags.Bool("singleClick", false, "use single clicks only")
|
||||
flags.Bool("dateFormat", false, "use date format (true for absolute time, false for relative)")
|
||||
flags.Bool("hideDotfiles", false, "hide dotfiles")
|
||||
flags.String("aceEditorTheme", "", "ace editor's syntax highlighting theme for users")
|
||||
}
|
||||
|
||||
func getViewMode(flags *pflag.FlagSet) (users.ViewMode, error) {
|
||||
@@ -110,6 +111,8 @@ func getUserDefaults(flags *pflag.FlagSet, defaults *settings.UserDefaults, all
|
||||
defaults.ViewMode, err = getViewMode(flags)
|
||||
case "singleClick":
|
||||
defaults.SingleClick, err = getBool(flags, flag.Name)
|
||||
case "aceEditorTheme":
|
||||
defaults.AceEditorTheme, err = getString(flags, flag.Name)
|
||||
case "perm.admin":
|
||||
defaults.Perm.Admin, err = getBool(flags, flag.Name)
|
||||
case "perm.execute":
|
||||
|
||||
@@ -0,0 +1,86 @@
|
||||
<template>
|
||||
<div>
|
||||
<div class="path-container" ref="container">
|
||||
<template v-for="(item, index) in path" :key="index">
|
||||
/
|
||||
<span class="path-item">
|
||||
<span
|
||||
v-if="isDir === true || index < path.length - 1"
|
||||
class="material-icons"
|
||||
>folder
|
||||
</span>
|
||||
<span v-else class="material-icons">insert_drive_file</span>
|
||||
{{ item }}
|
||||
</span>
|
||||
</template>
|
||||
</div>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script setup lang="ts">
|
||||
import { ref, computed, watch, nextTick, defineProps } from "vue";
|
||||
import { useRoute } from "vue-router";
|
||||
import { useFileStore } from "@/stores/file";
|
||||
import url from "@/utils/url";
|
||||
|
||||
const fileStore = useFileStore();
|
||||
const route = useRoute();
|
||||
|
||||
const props = defineProps({
|
||||
name: {
|
||||
type: String,
|
||||
required: true,
|
||||
},
|
||||
isDir: {
|
||||
type: Boolean,
|
||||
default: false,
|
||||
},
|
||||
});
|
||||
|
||||
const container = ref<HTMLElement | null>(null);
|
||||
|
||||
const path = computed(() => {
|
||||
let basePath = fileStore.isFiles ? route.path : url.removeLastDir(route.path);
|
||||
if (!basePath.endsWith("/")) {
|
||||
basePath += "/";
|
||||
}
|
||||
basePath += props.name;
|
||||
return basePath.split("/").filter(Boolean).splice(1);
|
||||
});
|
||||
|
||||
watch(path, () => {
|
||||
nextTick(() => {
|
||||
const lastItem = container.value?.lastElementChild;
|
||||
lastItem?.scrollIntoView({ behavior: "auto", inline: "end" });
|
||||
});
|
||||
});
|
||||
</script>
|
||||
|
||||
<style scoped>
|
||||
.path-container {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
margin: 0.2em 0;
|
||||
gap: 0.25em;
|
||||
overflow-x: auto;
|
||||
max-width: 100%;
|
||||
scrollbar-width: none;
|
||||
opacity: 0.5;
|
||||
}
|
||||
|
||||
.path-container::-webkit-scrollbar {
|
||||
display: none;
|
||||
}
|
||||
|
||||
.path-item {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
margin: 0.2em 0;
|
||||
gap: 0.25em;
|
||||
white-space: nowrap;
|
||||
}
|
||||
|
||||
.path-item > span {
|
||||
font-size: 0.9em;
|
||||
}
|
||||
</style>
|
||||
@@ -14,6 +14,7 @@
|
||||
v-model.trim="name"
|
||||
tabindex="1"
|
||||
/>
|
||||
<CreateFilePath :name="name" :is-dir="true" />
|
||||
</div>
|
||||
|
||||
<div class="card-action">
|
||||
@@ -48,6 +49,7 @@ import { files as api } from "@/api";
|
||||
import url from "@/utils/url";
|
||||
import { useRoute, useRouter } from "vue-router";
|
||||
import { useI18n } from "vue-i18n";
|
||||
import CreateFilePath from "@/components/prompts/CreateFilePath.vue";
|
||||
|
||||
const $showError = inject<IToastError>("$showError")!;
|
||||
|
||||
|
||||
@@ -13,6 +13,7 @@
|
||||
@keyup.enter="submit"
|
||||
v-model.trim="name"
|
||||
/>
|
||||
<CreateFilePath :name="name" />
|
||||
</div>
|
||||
|
||||
<div class="card-action">
|
||||
@@ -42,6 +43,7 @@ import { useI18n } from "vue-i18n";
|
||||
import { useRoute, useRouter } from "vue-router";
|
||||
import { useFileStore } from "@/stores/file";
|
||||
import { useLayoutStore } from "@/stores/layout";
|
||||
import CreateFilePath from "@/components/prompts/CreateFilePath.vue";
|
||||
|
||||
import { files as api } from "@/api";
|
||||
import url from "@/utils/url";
|
||||
|
||||
@@ -14,7 +14,7 @@
|
||||
}}
|
||||
</h2>
|
||||
<div class="upload-info">
|
||||
<div class="upload-speed">{{ speedMbytes }}/s</div>
|
||||
<div class="upload-speed">{{ speedText }}/s</div>
|
||||
<div class="upload-eta">{{ formattedETA }} remaining</div>
|
||||
<div class="upload-percentage">{{ sentPercent }}% Completed</div>
|
||||
<div class="upload-fraction">
|
||||
@@ -88,6 +88,7 @@ const uploadStore = useUploadStore();
|
||||
const { sentBytes, totalBytes } = storeToRefs(uploadStore);
|
||||
|
||||
const byteToMbyte = partial({ exponent: 2 });
|
||||
const byteToKbyte = partial({ exponent: 1 });
|
||||
|
||||
const sentPercent = computed(() =>
|
||||
((uploadStore.sentBytes / uploadStore.totalBytes) * 100).toFixed(2)
|
||||
@@ -95,11 +96,33 @@ const sentPercent = computed(() =>
|
||||
|
||||
const sentMbytes = computed(() => byteToMbyte(uploadStore.sentBytes));
|
||||
const totalMbytes = computed(() => byteToMbyte(uploadStore.totalBytes));
|
||||
const speedMbytes = computed(() => byteToMbyte(speed.value));
|
||||
const speedText = computed(() => {
|
||||
const bytes = speed.value;
|
||||
|
||||
if (bytes < 1024 * 1024) {
|
||||
const kb = parseFloat(byteToKbyte(bytes));
|
||||
return `${kb.toFixed(2)} KB`;
|
||||
} else {
|
||||
const mb = parseFloat(byteToMbyte(bytes));
|
||||
return `${mb.toFixed(2)} MB`;
|
||||
}
|
||||
});
|
||||
|
||||
let lastSpeedUpdate: number = 0;
|
||||
let recentSpeeds: number[] = [];
|
||||
|
||||
let lastThrottleTime = 0;
|
||||
|
||||
const throttledCalculateSpeed = (sentBytes: number, oldSentBytes: number) => {
|
||||
const now = Date.now();
|
||||
if (now - lastThrottleTime < 100) {
|
||||
return;
|
||||
}
|
||||
|
||||
lastThrottleTime = now;
|
||||
calculateSpeed(sentBytes, oldSentBytes);
|
||||
};
|
||||
|
||||
const calculateSpeed = (sentBytes: number, oldSentBytes: number) => {
|
||||
// Reset the state when the uploads batch is complete
|
||||
if (sentBytes === 0) {
|
||||
@@ -149,7 +172,7 @@ const calculateEta = () => {
|
||||
eta.value = remainingSize / speedBytesPerSecond;
|
||||
};
|
||||
|
||||
watch(sentBytes, calculateSpeed);
|
||||
watch(sentBytes, throttledCalculateSpeed);
|
||||
|
||||
watch(totalBytes, (totalBytes, oldTotalBytes) => {
|
||||
if (oldTotalBytes !== 0) {
|
||||
|
||||
@@ -0,0 +1,24 @@
|
||||
<template>
|
||||
<select name="selectAceEditorTheme" v-on:change="change" :value="aceEditorTheme">
|
||||
<option v-for="theme in themes" :value="theme.theme" :key="theme.theme">
|
||||
{{ theme.name }}
|
||||
</option>
|
||||
</select>
|
||||
</template>
|
||||
|
||||
<script setup lang="ts">
|
||||
import { type SelectHTMLAttributes } from "vue";
|
||||
import { themes } from "ace-builds/src-noconflict/ext-themelist";
|
||||
|
||||
defineProps<{
|
||||
aceEditorTheme: string;
|
||||
}>();
|
||||
|
||||
const emit = defineEmits<{
|
||||
(e: "update:aceEditorTheme", val: string | null): void;
|
||||
}>();
|
||||
|
||||
const change = (event: Event) => {
|
||||
emit("update:aceEditorTheme", (event.target as SelectHTMLAttributes)?.value);
|
||||
};
|
||||
</script>
|
||||
@@ -42,8 +42,8 @@
|
||||
"update": "تحديث",
|
||||
"upload": "رفع",
|
||||
"openFile": "فتح الملف",
|
||||
"discardChanges": "إلغاء التغييرات",
|
||||
"saveChanges": "Save changes"
|
||||
"discardChanges": "إلغاء التغييرات",
|
||||
"saveChanges": "Save changes"
|
||||
},
|
||||
"download": {
|
||||
"downloadFile": "تحميل الملف",
|
||||
@@ -158,6 +158,7 @@
|
||||
"video": "فيديوهات"
|
||||
},
|
||||
"settings": {
|
||||
"aceEditorTheme": "Ace editor theme",
|
||||
"admin": "إدارة",
|
||||
"administrator": "مدير",
|
||||
"allowCommands": "تنفيذ اﻷوامر",
|
||||
|
||||
@@ -42,8 +42,8 @@
|
||||
"update": "Actualitzar",
|
||||
"upload": "Pujar",
|
||||
"openFile": "Obrir fitxer",
|
||||
"discardChanges": "Descartar",
|
||||
"saveChanges": "Save changes"
|
||||
"discardChanges": "Descartar",
|
||||
"saveChanges": "Save changes"
|
||||
},
|
||||
"download": {
|
||||
"downloadFile": "Descarregar fitxer",
|
||||
@@ -158,6 +158,7 @@
|
||||
"video": "Vídeo"
|
||||
},
|
||||
"settings": {
|
||||
"aceEditorTheme": "Ace editor theme",
|
||||
"admin": "Admin",
|
||||
"administrator": "Administrador",
|
||||
"allowCommands": "Executar comandes",
|
||||
|
||||
@@ -42,8 +42,8 @@
|
||||
"update": "Aktualizovat",
|
||||
"upload": "Nahrát",
|
||||
"openFile": "Otevřít soubor",
|
||||
"discardChanges": "Zrušit změny",
|
||||
"saveChanges": "Save changes"
|
||||
"discardChanges": "Zrušit změny",
|
||||
"saveChanges": "Save changes"
|
||||
},
|
||||
"download": {
|
||||
"downloadFile": "Stáhnout soubor",
|
||||
@@ -158,6 +158,7 @@
|
||||
"video": "Video"
|
||||
},
|
||||
"settings": {
|
||||
"aceEditorTheme": "Ace editor theme",
|
||||
"admin": "Admin",
|
||||
"administrator": "Administrátor",
|
||||
"allowCommands": "Povolit příkazy",
|
||||
|
||||
@@ -42,8 +42,8 @@
|
||||
"update": "Update",
|
||||
"upload": "Upload",
|
||||
"openFile": "Datei öffnen",
|
||||
"discardChanges": "Verwerfen",
|
||||
"saveChanges": "Save changes"
|
||||
"discardChanges": "Verwerfen",
|
||||
"saveChanges": "Save changes"
|
||||
},
|
||||
"download": {
|
||||
"downloadFile": "Download Datei",
|
||||
@@ -158,6 +158,7 @@
|
||||
"video": "Video"
|
||||
},
|
||||
"settings": {
|
||||
"aceEditorTheme": "Ace editor theme",
|
||||
"admin": "Admin",
|
||||
"administrator": "Administrator",
|
||||
"allowCommands": "Befehle ausführen",
|
||||
|
||||
@@ -42,8 +42,8 @@
|
||||
"update": "Ενημέρωση",
|
||||
"upload": "Μεταφόρτωση",
|
||||
"openFile": "Άνοιγμα αρχείου",
|
||||
"discardChanges": "Discard",
|
||||
"saveChanges": "Save changes"
|
||||
"discardChanges": "Discard",
|
||||
"saveChanges": "Save changes"
|
||||
},
|
||||
"download": {
|
||||
"downloadFile": "Λήψη αρχείου",
|
||||
@@ -158,6 +158,7 @@
|
||||
"video": "Βίντεο"
|
||||
},
|
||||
"settings": {
|
||||
"aceEditorTheme": "Ace editor theme",
|
||||
"admin": "Διαχειριστής",
|
||||
"administrator": "Διαχειριστής",
|
||||
"allowCommands": "Εκτέλεση εντολών",
|
||||
|
||||
@@ -42,8 +42,8 @@
|
||||
"update": "Update",
|
||||
"upload": "Upload",
|
||||
"openFile": "Open file",
|
||||
"discardChanges": "Discard",
|
||||
"saveChanges": "Save changes"
|
||||
"discardChanges": "Discard",
|
||||
"saveChanges": "Save changes"
|
||||
},
|
||||
"download": {
|
||||
"downloadFile": "Download File",
|
||||
@@ -158,6 +158,7 @@
|
||||
"video": "Video"
|
||||
},
|
||||
"settings": {
|
||||
"aceEditorTheme": "Ace editor theme",
|
||||
"admin": "Admin",
|
||||
"administrator": "Administrator",
|
||||
"allowCommands": "Execute commands",
|
||||
|
||||
@@ -42,8 +42,8 @@
|
||||
"update": "Actualizar",
|
||||
"upload": "Subir",
|
||||
"openFile": "Abrir archivo",
|
||||
"discardChanges": "Discard",
|
||||
"saveChanges": "Guardar cambios"
|
||||
"discardChanges": "Discard",
|
||||
"saveChanges": "Guardar cambios"
|
||||
},
|
||||
"download": {
|
||||
"downloadFile": "Descargar fichero",
|
||||
@@ -158,6 +158,7 @@
|
||||
"video": "Vídeo"
|
||||
},
|
||||
"settings": {
|
||||
"aceEditorTheme": "Ace editor theme",
|
||||
"admin": "Admin",
|
||||
"administrator": "Administrador",
|
||||
"allowCommands": "Ejecutar comandos",
|
||||
|
||||
@@ -42,8 +42,8 @@
|
||||
"update": "به روز سانی",
|
||||
"upload": "آپلود",
|
||||
"openFile": "باز کردن فایل",
|
||||
"discardChanges": "لغو کردن",
|
||||
"saveChanges": "Save changes"
|
||||
"discardChanges": "لغو کردن",
|
||||
"saveChanges": "Save changes"
|
||||
},
|
||||
"download": {
|
||||
"downloadFile": "دانلود فایل",
|
||||
@@ -158,6 +158,7 @@
|
||||
"video": "ویدئو "
|
||||
},
|
||||
"settings": {
|
||||
"aceEditorTheme": "Ace editor theme",
|
||||
"admin": "Admin",
|
||||
"administrator": "Administrator",
|
||||
"allowCommands": "اجرای دستورات",
|
||||
|
||||
@@ -42,8 +42,8 @@
|
||||
"update": "Mettre à jour",
|
||||
"upload": "Importer",
|
||||
"openFile": "Ouvrir le fichier",
|
||||
"discardChanges": "Annuler",
|
||||
"saveChanges": "Save changes"
|
||||
"discardChanges": "Annuler",
|
||||
"saveChanges": "Save changes"
|
||||
},
|
||||
"download": {
|
||||
"downloadFile": "Télécharger le fichier",
|
||||
@@ -158,6 +158,7 @@
|
||||
"video": "Vidéo"
|
||||
},
|
||||
"settings": {
|
||||
"aceEditorTheme": "Ace editor theme",
|
||||
"admin": "Admin",
|
||||
"administrator": "Administrateur·ice",
|
||||
"allowCommands": "Exécuter des commandes",
|
||||
|
||||
@@ -42,8 +42,8 @@
|
||||
"update": "עדכון",
|
||||
"upload": "העלאה",
|
||||
"openFile": "פתח קובץ",
|
||||
"discardChanges": "זריקת השינויים",
|
||||
"saveChanges": "Save changes"
|
||||
"discardChanges": "זריקת השינויים",
|
||||
"saveChanges": "Save changes"
|
||||
},
|
||||
"download": {
|
||||
"downloadFile": "הורד קובץ",
|
||||
@@ -158,6 +158,7 @@
|
||||
"video": "וידאו"
|
||||
},
|
||||
"settings": {
|
||||
"aceEditorTheme": "Ace editor theme",
|
||||
"admin": "מנהל",
|
||||
"administrator": "מנהל ראשי",
|
||||
"allowCommands": "הפעלת פקודות",
|
||||
|
||||
@@ -42,8 +42,8 @@
|
||||
"update": "Frissítés",
|
||||
"upload": "Feltöltés",
|
||||
"openFile": "Fájl megnyitása",
|
||||
"discardChanges": "Discard",
|
||||
"saveChanges": "Save changes"
|
||||
"discardChanges": "Discard",
|
||||
"saveChanges": "Save changes"
|
||||
},
|
||||
"download": {
|
||||
"downloadFile": "Fájl letöltése",
|
||||
@@ -158,6 +158,7 @@
|
||||
"video": "Videó"
|
||||
},
|
||||
"settings": {
|
||||
"aceEditorTheme": "Ace editor theme",
|
||||
"admin": "Admin",
|
||||
"administrator": "Adminisztrátor",
|
||||
"allowCommands": "Parancsok futtatása",
|
||||
|
||||
@@ -42,8 +42,8 @@
|
||||
"update": "Vista",
|
||||
"upload": "Hlaða upp",
|
||||
"openFile": "Open file",
|
||||
"discardChanges": "Discard",
|
||||
"saveChanges": "Save changes"
|
||||
"discardChanges": "Discard",
|
||||
"saveChanges": "Save changes"
|
||||
},
|
||||
"download": {
|
||||
"downloadFile": "Sækja skjal",
|
||||
@@ -158,6 +158,7 @@
|
||||
"video": "Myndbönd"
|
||||
},
|
||||
"settings": {
|
||||
"aceEditorTheme": "Ace editor theme",
|
||||
"admin": "Stjórnandi",
|
||||
"administrator": "Stjórnandi",
|
||||
"allowCommands": "Senda skipanir",
|
||||
|
||||
@@ -42,8 +42,8 @@
|
||||
"update": "Aggiorna",
|
||||
"upload": "Carica",
|
||||
"openFile": "Apri file",
|
||||
"discardChanges": "Ignora",
|
||||
"saveChanges": "Save changes"
|
||||
"discardChanges": "Ignora",
|
||||
"saveChanges": "Save changes"
|
||||
},
|
||||
"download": {
|
||||
"downloadFile": "Scarica file",
|
||||
@@ -158,6 +158,7 @@
|
||||
"video": "Video"
|
||||
},
|
||||
"settings": {
|
||||
"aceEditorTheme": "Ace editor theme",
|
||||
"admin": "Admin",
|
||||
"administrator": "Amministratore",
|
||||
"allowCommands": "Esegui comandi",
|
||||
|
||||
@@ -42,8 +42,8 @@
|
||||
"update": "更新",
|
||||
"upload": "アップロード",
|
||||
"openFile": "ファイルを開く",
|
||||
"discardChanges": "Discard",
|
||||
"saveChanges": "Save changes"
|
||||
"discardChanges": "Discard",
|
||||
"saveChanges": "Save changes"
|
||||
},
|
||||
"download": {
|
||||
"downloadFile": "ファイルのダウンロード",
|
||||
@@ -158,6 +158,7 @@
|
||||
"video": "動画"
|
||||
},
|
||||
"settings": {
|
||||
"aceEditorTheme": "Ace editor theme",
|
||||
"admin": "管理者",
|
||||
"administrator": "管理者",
|
||||
"allowCommands": "コマンドの実行",
|
||||
|
||||
@@ -42,8 +42,8 @@
|
||||
"update": "업데이트",
|
||||
"upload": "업로드",
|
||||
"openFile": "파일 열기",
|
||||
"discardChanges": "변경 사항 취소",
|
||||
"saveChanges": "변경사항 저장"
|
||||
"discardChanges": "변경 사항 취소",
|
||||
"saveChanges": "변경사항 저장"
|
||||
},
|
||||
"download": {
|
||||
"downloadFile": "파일 다운로드",
|
||||
@@ -158,6 +158,7 @@
|
||||
"video": "비디오"
|
||||
},
|
||||
"settings": {
|
||||
"aceEditorTheme": "Ace editor theme",
|
||||
"admin": "관리자",
|
||||
"administrator": "관리자",
|
||||
"allowCommands": "명령 실행",
|
||||
|
||||
@@ -42,8 +42,8 @@
|
||||
"update": "Updaten",
|
||||
"upload": "Uploaden",
|
||||
"openFile": "Open file",
|
||||
"discardChanges": "Discard",
|
||||
"saveChanges": "Save changes"
|
||||
"discardChanges": "Discard",
|
||||
"saveChanges": "Save changes"
|
||||
},
|
||||
"download": {
|
||||
"downloadFile": "Bestand downloaden",
|
||||
@@ -158,6 +158,7 @@
|
||||
"video": "Video"
|
||||
},
|
||||
"settings": {
|
||||
"aceEditorTheme": "Ace editor theme",
|
||||
"admin": "Admin",
|
||||
"administrator": "Administrator",
|
||||
"allowCommands": "Commando's uitvoeren",
|
||||
|
||||
@@ -42,8 +42,8 @@
|
||||
"update": "Opptater",
|
||||
"upload": "Last opp",
|
||||
"openFile": "Open file",
|
||||
"discardChanges": "Slett",
|
||||
"saveChanges": "Lagre Endringane "
|
||||
"discardChanges": "Slett",
|
||||
"saveChanges": "Lagre Endringane "
|
||||
},
|
||||
"download": {
|
||||
"downloadFile": "Nedlast filen",
|
||||
@@ -103,7 +103,7 @@
|
||||
"usernameTaken": "Brukernavn er allerede i bruk",
|
||||
"wrongCredentials": "Feil legitimasjon",
|
||||
"logout_reasons": {
|
||||
"inactivity": "You have been logged out due to inactivity."
|
||||
"inactivity": "Du har blitt logget ut på grunn av inaktivitet"
|
||||
}
|
||||
},
|
||||
"permanent": "Permanent",
|
||||
@@ -158,6 +158,7 @@
|
||||
"video": "Video"
|
||||
},
|
||||
"settings": {
|
||||
"aceEditorTheme": "Ace editor theme",
|
||||
"admin": "Admin",
|
||||
"administrator": "Administrator",
|
||||
"allowCommands": "Utfør kommandoer",
|
||||
|
||||
@@ -42,8 +42,8 @@
|
||||
"update": "Aktualizuj",
|
||||
"upload": "Wyślij",
|
||||
"openFile": "Otwórz plik",
|
||||
"discardChanges": "Odrzuć",
|
||||
"saveChanges": "Zapisz zmiany"
|
||||
"discardChanges": "Odrzuć",
|
||||
"saveChanges": "Zapisz zmiany"
|
||||
},
|
||||
"download": {
|
||||
"downloadFile": "Pobierz plik",
|
||||
@@ -158,6 +158,7 @@
|
||||
"video": "Wideo"
|
||||
},
|
||||
"settings": {
|
||||
"aceEditorTheme": "Ace editor theme",
|
||||
"admin": "Admin",
|
||||
"administrator": "Administrator",
|
||||
"allowCommands": "Wykonaj polecenie",
|
||||
|
||||
@@ -42,8 +42,8 @@
|
||||
"update": "Atualizar",
|
||||
"upload": "Enviar",
|
||||
"openFile": "Abrir",
|
||||
"discardChanges": "Discard",
|
||||
"saveChanges": "Save changes"
|
||||
"discardChanges": "Discard",
|
||||
"saveChanges": "Save changes"
|
||||
},
|
||||
"download": {
|
||||
"downloadFile": "Baixar arquivo",
|
||||
@@ -158,6 +158,7 @@
|
||||
"video": "Vídeos"
|
||||
},
|
||||
"settings": {
|
||||
"aceEditorTheme": "Ace editor theme",
|
||||
"admin": "Admin",
|
||||
"administrator": "Administrador",
|
||||
"allowCommands": "Executar comandos",
|
||||
|
||||
@@ -42,8 +42,8 @@
|
||||
"update": "Atualizar",
|
||||
"upload": "Enviar",
|
||||
"openFile": "Open file",
|
||||
"discardChanges": "Discard",
|
||||
"saveChanges": "Save changes"
|
||||
"discardChanges": "Discard",
|
||||
"saveChanges": "Save changes"
|
||||
},
|
||||
"download": {
|
||||
"downloadFile": "Descarregar ficheiro",
|
||||
@@ -158,6 +158,7 @@
|
||||
"video": "Vídeos"
|
||||
},
|
||||
"settings": {
|
||||
"aceEditorTheme": "Ace editor theme",
|
||||
"admin": "Admin",
|
||||
"administrator": "Administrador",
|
||||
"allowCommands": "Executar comandos",
|
||||
|
||||
@@ -42,8 +42,8 @@
|
||||
"update": "Actualizează",
|
||||
"upload": "Încarcă",
|
||||
"openFile": "Open file",
|
||||
"discardChanges": "Discard",
|
||||
"saveChanges": "Save changes"
|
||||
"discardChanges": "Discard",
|
||||
"saveChanges": "Save changes"
|
||||
},
|
||||
"download": {
|
||||
"downloadFile": "Descarcă fișier",
|
||||
@@ -158,6 +158,7 @@
|
||||
"video": "Video"
|
||||
},
|
||||
"settings": {
|
||||
"aceEditorTheme": "Ace editor theme",
|
||||
"admin": "Admin",
|
||||
"administrator": "Administrator",
|
||||
"allowCommands": "Execută comenzi",
|
||||
|
||||
@@ -42,8 +42,8 @@
|
||||
"update": "Обновить",
|
||||
"upload": "Загрузить",
|
||||
"openFile": "Открыть файл",
|
||||
"discardChanges": "Отказаться",
|
||||
"saveChanges": "Save changes"
|
||||
"discardChanges": "Отказаться",
|
||||
"saveChanges": "Save changes"
|
||||
},
|
||||
"download": {
|
||||
"downloadFile": "Скачать файл",
|
||||
@@ -158,6 +158,7 @@
|
||||
"video": "Видео"
|
||||
},
|
||||
"settings": {
|
||||
"aceEditorTheme": "Ace editor theme",
|
||||
"admin": "Админ",
|
||||
"administrator": "Администратор",
|
||||
"allowCommands": "Запуск команд",
|
||||
|
||||
@@ -42,8 +42,8 @@
|
||||
"update": "Aktualizovať",
|
||||
"upload": "Nahrať",
|
||||
"openFile": "Otvoriť súbor",
|
||||
"discardChanges": "Zahodiť",
|
||||
"saveChanges": "Save changes"
|
||||
"discardChanges": "Zahodiť",
|
||||
"saveChanges": "Save changes"
|
||||
},
|
||||
"download": {
|
||||
"downloadFile": "Stiahnuť súbor",
|
||||
@@ -158,6 +158,7 @@
|
||||
"video": "Video"
|
||||
},
|
||||
"settings": {
|
||||
"aceEditorTheme": "Ace editor theme",
|
||||
"admin": "Admin",
|
||||
"administrator": "Administrátor",
|
||||
"allowCommands": "Vykonávať príkazy",
|
||||
|
||||
@@ -42,8 +42,8 @@
|
||||
"update": "Uppdatera",
|
||||
"upload": "Ladda upp",
|
||||
"openFile": "Open file",
|
||||
"discardChanges": "Discard",
|
||||
"saveChanges": "Save changes"
|
||||
"discardChanges": "Discard",
|
||||
"saveChanges": "Save changes"
|
||||
},
|
||||
"download": {
|
||||
"downloadFile": "Ladda ner fil",
|
||||
@@ -158,6 +158,7 @@
|
||||
"video": "Video"
|
||||
},
|
||||
"settings": {
|
||||
"aceEditorTheme": "Ace editor theme",
|
||||
"admin": "Admin",
|
||||
"administrator": "Administratör",
|
||||
"allowCommands": "Exekvera kommandon",
|
||||
|
||||
@@ -42,8 +42,8 @@
|
||||
"update": "Güncelle",
|
||||
"upload": "Yükle",
|
||||
"openFile": "Dosyayı aç",
|
||||
"discardChanges": "Discard",
|
||||
"saveChanges": "Save changes"
|
||||
"discardChanges": "Discard",
|
||||
"saveChanges": "Save changes"
|
||||
},
|
||||
"download": {
|
||||
"downloadFile": "Dosyayı indir",
|
||||
@@ -158,6 +158,7 @@
|
||||
"video": "Video"
|
||||
},
|
||||
"settings": {
|
||||
"aceEditorTheme": "Ace editor theme",
|
||||
"admin": "Yönetim",
|
||||
"administrator": "Yönetici",
|
||||
"allowCommands": "Komutları çalıştır",
|
||||
|
||||
@@ -42,8 +42,8 @@
|
||||
"update": "Оновити",
|
||||
"upload": "Вивантажити",
|
||||
"openFile": "Відкрити файл",
|
||||
"discardChanges": "Скасувати",
|
||||
"saveChanges": "Save changes"
|
||||
"discardChanges": "Скасувати",
|
||||
"saveChanges": "Save changes"
|
||||
},
|
||||
"download": {
|
||||
"downloadFile": "Завантажити файл",
|
||||
@@ -158,6 +158,7 @@
|
||||
"video": "Відео"
|
||||
},
|
||||
"settings": {
|
||||
"aceEditorTheme": "Ace editor theme",
|
||||
"admin": "Адмін",
|
||||
"administrator": "Адміністратор",
|
||||
"allowCommands": "Запуск команд",
|
||||
|
||||
@@ -42,8 +42,8 @@
|
||||
"update": "Cập nhật",
|
||||
"upload": "Tải lên",
|
||||
"openFile": "Mở tệp",
|
||||
"discardChanges": "Hủy bỏ thay đổi",
|
||||
"saveChanges": "Save changes"
|
||||
"discardChanges": "Hủy bỏ thay đổi",
|
||||
"saveChanges": "Save changes"
|
||||
},
|
||||
"download": {
|
||||
"downloadFile": "Tải xuống tệp tin",
|
||||
@@ -158,6 +158,7 @@
|
||||
"video": "Video"
|
||||
},
|
||||
"settings": {
|
||||
"aceEditorTheme": "Ace editor theme",
|
||||
"admin": "Quản trị viên",
|
||||
"administrator": "Người quản trị",
|
||||
"allowCommands": "Thực thi lệnh",
|
||||
|
||||
@@ -42,8 +42,8 @@
|
||||
"update": "更新",
|
||||
"upload": "上传",
|
||||
"openFile": "打开文件",
|
||||
"discardChanges": "放弃更改",
|
||||
"saveChanges": "Save changes"
|
||||
"discardChanges": "放弃更改",
|
||||
"saveChanges": "Save changes"
|
||||
},
|
||||
"download": {
|
||||
"downloadFile": "下载文件",
|
||||
@@ -158,6 +158,7 @@
|
||||
"video": "视频"
|
||||
},
|
||||
"settings": {
|
||||
"aceEditorTheme": "Ace editor theme",
|
||||
"admin": "管理员",
|
||||
"administrator": "管理员",
|
||||
"allowCommands": "执行命令(Shell 命令)",
|
||||
|
||||
@@ -42,8 +42,8 @@
|
||||
"update": "更新",
|
||||
"upload": "上傳",
|
||||
"openFile": "開啟檔案",
|
||||
"discardChanges": "放棄變更",
|
||||
"saveChanges": "Save changes"
|
||||
"discardChanges": "放棄變更",
|
||||
"saveChanges": "Save changes"
|
||||
},
|
||||
"download": {
|
||||
"downloadFile": "下載檔案",
|
||||
@@ -158,6 +158,7 @@
|
||||
"video": "影片"
|
||||
},
|
||||
"settings": {
|
||||
"aceEditorTheme": "Ace editor theme",
|
||||
"admin": "管理員",
|
||||
"administrator": "管理員",
|
||||
"allowCommands": "執行命令",
|
||||
|
||||
@@ -21,6 +21,7 @@ interface SettingsDefaults {
|
||||
commands: any[];
|
||||
hideDotfiles: boolean;
|
||||
dateFormat: boolean;
|
||||
aceEditorTheme: string;
|
||||
}
|
||||
|
||||
interface SettingsBranding {
|
||||
|
||||
+1
@@ -13,6 +13,7 @@ interface IUser {
|
||||
dateFormat: boolean;
|
||||
viewMode: ViewModeType;
|
||||
sorting?: Sorting;
|
||||
aceEditorTheme: string;
|
||||
}
|
||||
|
||||
type ViewModeType = "list" | "mosaic" | "mosaic gallery";
|
||||
|
||||
@@ -1,4 +1,6 @@
|
||||
import { theme } from "./constants";
|
||||
import "ace-builds";
|
||||
import { themesByName } from "ace-builds/src-noconflict/ext-themelist";
|
||||
|
||||
export const getTheme = (): UserTheme => {
|
||||
return (document.documentElement.className as UserTheme) || theme;
|
||||
@@ -32,3 +34,17 @@ export const getMediaPreference = (): UserTheme => {
|
||||
return "light";
|
||||
}
|
||||
};
|
||||
|
||||
export const getEditorTheme = (themeName: string) => {
|
||||
if (!themeName.startsWith("ace/theme/")) {
|
||||
themeName = `ace/theme/${themeName}`;
|
||||
}
|
||||
const themeKey = themeName.replace("ace/theme/", "");
|
||||
if (themesByName[themeKey] !== undefined) {
|
||||
return themeName;
|
||||
} else if (getTheme() === "dark") {
|
||||
return "ace/theme/twilight";
|
||||
} else {
|
||||
return "ace/theme/chrome";
|
||||
}
|
||||
};
|
||||
|
||||
@@ -69,7 +69,7 @@ import HeaderBar from "@/components/header/HeaderBar.vue";
|
||||
import { useAuthStore } from "@/stores/auth";
|
||||
import { useFileStore } from "@/stores/file";
|
||||
import { useLayoutStore } from "@/stores/layout";
|
||||
import { getTheme } from "@/utils/theme";
|
||||
import { getEditorTheme } from "@/utils/theme";
|
||||
import { marked } from "marked";
|
||||
import { inject, onBeforeUnmount, onMounted, ref, watchEffect } from "vue";
|
||||
import { useI18n } from "vue-i18n";
|
||||
@@ -122,7 +122,7 @@ onMounted(() => {
|
||||
value: fileContent,
|
||||
showPrintMargin: false,
|
||||
readOnly: fileStore.req?.type === "textImmutable",
|
||||
theme: "ace/theme/chrome",
|
||||
theme: getEditorTheme(authStore.user?.aceEditorTheme ?? ""),
|
||||
mode: modelist.getModeForPath(fileStore.req!.name).mode,
|
||||
wrap: true,
|
||||
enableBasicAutocompletion: true,
|
||||
@@ -130,10 +130,6 @@ onMounted(() => {
|
||||
enableSnippets: true,
|
||||
});
|
||||
|
||||
if (getTheme() === "dark") {
|
||||
editor.value!.setTheme("ace/theme/twilight");
|
||||
}
|
||||
|
||||
editor.value.setFontSize(fontSize.value);
|
||||
editor.value.focus();
|
||||
});
|
||||
@@ -219,6 +215,13 @@ const decreaseFontSize = () => {
|
||||
};
|
||||
|
||||
const close = () => {
|
||||
if (!editor.value?.session.getUndoManager().isClean()) {
|
||||
layoutStore.showHover("discardEditorChanges");
|
||||
return;
|
||||
}
|
||||
|
||||
fileStore.updateRequest(null);
|
||||
|
||||
const uri = url.removeLastDir(route.path) + "/";
|
||||
router.push({ path: uri });
|
||||
};
|
||||
|
||||
@@ -24,6 +24,13 @@
|
||||
class="input input--block"
|
||||
v-model:locale="locale"
|
||||
></languages>
|
||||
|
||||
<h3>{{ t("settings.aceEditorTheme") }}</h3>
|
||||
<AceEditorTheme
|
||||
class="input input--block"
|
||||
v-model:aceEditorTheme="aceEditorTheme"
|
||||
id="aceTheme"
|
||||
></AceEditorTheme>
|
||||
</div>
|
||||
|
||||
<div class="card-action">
|
||||
@@ -81,6 +88,7 @@
|
||||
import { useAuthStore } from "@/stores/auth";
|
||||
import { useLayoutStore } from "@/stores/layout";
|
||||
import { users as api } from "@/api";
|
||||
import AceEditorTheme from "@/components/settings/AceEditorTheme.vue";
|
||||
import Languages from "@/components/settings/Languages.vue";
|
||||
import { computed, inject, onMounted, ref } from "vue";
|
||||
import { useI18n } from "vue-i18n";
|
||||
@@ -98,6 +106,7 @@ const hideDotfiles = ref<boolean>(false);
|
||||
const singleClick = ref<boolean>(false);
|
||||
const dateFormat = ref<boolean>(false);
|
||||
const locale = ref<string>("");
|
||||
const aceEditorTheme = ref<string>("");
|
||||
|
||||
const passwordClass = computed(() => {
|
||||
const baseClass = "input input--block";
|
||||
@@ -113,13 +122,14 @@ const passwordClass = computed(() => {
|
||||
return `${baseClass} input--red`;
|
||||
});
|
||||
|
||||
onMounted(() => {
|
||||
onMounted(async () => {
|
||||
layoutStore.loading = true;
|
||||
if (authStore.user === null) return false;
|
||||
locale.value = authStore.user.locale;
|
||||
hideDotfiles.value = authStore.user.hideDotfiles;
|
||||
singleClick.value = authStore.user.singleClick;
|
||||
dateFormat.value = authStore.user.dateFormat;
|
||||
aceEditorTheme.value = authStore.user.aceEditorTheme;
|
||||
layoutStore.loading = false;
|
||||
return true;
|
||||
});
|
||||
@@ -163,6 +173,7 @@ const updateSettings = async (event: Event) => {
|
||||
hideDotfiles: hideDotfiles.value,
|
||||
singleClick: singleClick.value,
|
||||
dateFormat: dateFormat.value,
|
||||
aceEditorTheme: aceEditorTheme.value,
|
||||
};
|
||||
|
||||
await api.update(data, [
|
||||
@@ -170,6 +181,7 @@ const updateSettings = async (event: Event) => {
|
||||
"hideDotfiles",
|
||||
"singleClick",
|
||||
"dateFormat",
|
||||
"aceEditorTheme",
|
||||
]);
|
||||
authStore.updateUser(data);
|
||||
$showSuccess(t("settings.settingsUpdated"));
|
||||
|
||||
+22
-20
@@ -21,16 +21,17 @@ const (
|
||||
)
|
||||
|
||||
type userInfo struct {
|
||||
ID uint `json:"id"`
|
||||
Locale string `json:"locale"`
|
||||
ViewMode users.ViewMode `json:"viewMode"`
|
||||
SingleClick bool `json:"singleClick"`
|
||||
Perm users.Permissions `json:"perm"`
|
||||
Commands []string `json:"commands"`
|
||||
LockPassword bool `json:"lockPassword"`
|
||||
HideDotfiles bool `json:"hideDotfiles"`
|
||||
DateFormat bool `json:"dateFormat"`
|
||||
Username string `json:"username"`
|
||||
ID uint `json:"id"`
|
||||
Locale string `json:"locale"`
|
||||
ViewMode users.ViewMode `json:"viewMode"`
|
||||
SingleClick bool `json:"singleClick"`
|
||||
Perm users.Permissions `json:"perm"`
|
||||
Commands []string `json:"commands"`
|
||||
LockPassword bool `json:"lockPassword"`
|
||||
HideDotfiles bool `json:"hideDotfiles"`
|
||||
DateFormat bool `json:"dateFormat"`
|
||||
Username string `json:"username"`
|
||||
AceEditorTheme string `json:"aceEditorTheme"`
|
||||
}
|
||||
|
||||
type authToken struct {
|
||||
@@ -190,16 +191,17 @@ func renewHandler(tokenExpireTime time.Duration) handleFunc {
|
||||
func printToken(w http.ResponseWriter, _ *http.Request, d *data, user *users.User, tokenExpirationTime time.Duration) (int, error) {
|
||||
claims := &authToken{
|
||||
User: userInfo{
|
||||
ID: user.ID,
|
||||
Locale: user.Locale,
|
||||
ViewMode: user.ViewMode,
|
||||
SingleClick: user.SingleClick,
|
||||
Perm: user.Perm,
|
||||
LockPassword: user.LockPassword,
|
||||
Commands: user.Commands,
|
||||
HideDotfiles: user.HideDotfiles,
|
||||
DateFormat: user.DateFormat,
|
||||
Username: user.Username,
|
||||
ID: user.ID,
|
||||
Locale: user.Locale,
|
||||
ViewMode: user.ViewMode,
|
||||
SingleClick: user.SingleClick,
|
||||
Perm: user.Perm,
|
||||
LockPassword: user.LockPassword,
|
||||
Commands: user.Commands,
|
||||
HideDotfiles: user.HideDotfiles,
|
||||
DateFormat: user.DateFormat,
|
||||
Username: user.Username,
|
||||
AceEditorTheme: user.AceEditorTheme,
|
||||
},
|
||||
RegisteredClaims: jwt.RegisteredClaims{
|
||||
IssuedAt: jwt.NewNumericDate(time.Now()),
|
||||
|
||||
@@ -8,15 +8,16 @@ import (
|
||||
// UserDefaults is a type that holds the default values
|
||||
// for some fields on User.
|
||||
type UserDefaults struct {
|
||||
Scope string `json:"scope"`
|
||||
Locale string `json:"locale"`
|
||||
ViewMode users.ViewMode `json:"viewMode"`
|
||||
SingleClick bool `json:"singleClick"`
|
||||
Sorting files.Sorting `json:"sorting"`
|
||||
Perm users.Permissions `json:"perm"`
|
||||
Commands []string `json:"commands"`
|
||||
HideDotfiles bool `json:"hideDotfiles"`
|
||||
DateFormat bool `json:"dateFormat"`
|
||||
Scope string `json:"scope"`
|
||||
Locale string `json:"locale"`
|
||||
ViewMode users.ViewMode `json:"viewMode"`
|
||||
SingleClick bool `json:"singleClick"`
|
||||
Sorting files.Sorting `json:"sorting"`
|
||||
Perm users.Permissions `json:"perm"`
|
||||
Commands []string `json:"commands"`
|
||||
HideDotfiles bool `json:"hideDotfiles"`
|
||||
DateFormat bool `json:"dateFormat"`
|
||||
AceEditorTheme string `json:"aceEditorTheme"`
|
||||
}
|
||||
|
||||
// Apply applies the default options to a user.
|
||||
@@ -30,4 +31,5 @@ func (d *UserDefaults) Apply(u *users.User) {
|
||||
u.Commands = d.Commands
|
||||
u.HideDotfiles = d.HideDotfiles
|
||||
u.DateFormat = d.DateFormat
|
||||
u.AceEditorTheme = d.AceEditorTheme
|
||||
}
|
||||
|
||||
@@ -3,5 +3,6 @@
|
||||
"@commitlint/cli": "^15.0.0",
|
||||
"@commitlint/config-conventional": "^15.0.0",
|
||||
"standard-version": "^9.3.2"
|
||||
}
|
||||
},
|
||||
"packageManager": "yarn@1.22.22+sha512.a6b2f7906b721bba3d67d4aff083df04dad64c399707841b7acf00f6b133b7ac24255f2652fa22ae3534329dc6180534e98d17432037ff6fd140556e2bb3137e"
|
||||
}
|
||||
|
||||
+16
-15
@@ -20,21 +20,22 @@ const (
|
||||
|
||||
// User describes a user.
|
||||
type User struct {
|
||||
ID uint `storm:"id,increment" json:"id"`
|
||||
Username string `storm:"unique" json:"username"`
|
||||
Password string `json:"password"`
|
||||
Scope string `json:"scope"`
|
||||
Locale string `json:"locale"`
|
||||
LockPassword bool `json:"lockPassword"`
|
||||
ViewMode ViewMode `json:"viewMode"`
|
||||
SingleClick bool `json:"singleClick"`
|
||||
Perm Permissions `json:"perm"`
|
||||
Commands []string `json:"commands"`
|
||||
Sorting files.Sorting `json:"sorting"`
|
||||
Fs afero.Fs `json:"-" yaml:"-"`
|
||||
Rules []rules.Rule `json:"rules"`
|
||||
HideDotfiles bool `json:"hideDotfiles"`
|
||||
DateFormat bool `json:"dateFormat"`
|
||||
ID uint `storm:"id,increment" json:"id"`
|
||||
Username string `storm:"unique" json:"username"`
|
||||
Password string `json:"password"`
|
||||
Scope string `json:"scope"`
|
||||
Locale string `json:"locale"`
|
||||
LockPassword bool `json:"lockPassword"`
|
||||
ViewMode ViewMode `json:"viewMode"`
|
||||
SingleClick bool `json:"singleClick"`
|
||||
Perm Permissions `json:"perm"`
|
||||
Commands []string `json:"commands"`
|
||||
Sorting files.Sorting `json:"sorting"`
|
||||
Fs afero.Fs `json:"-" yaml:"-"`
|
||||
Rules []rules.Rule `json:"rules"`
|
||||
HideDotfiles bool `json:"hideDotfiles"`
|
||||
DateFormat bool `json:"dateFormat"`
|
||||
AceEditorTheme string `json:"aceEditorTheme"`
|
||||
}
|
||||
|
||||
// GetRules implements rules.Provider.
|
||||
|
||||
@@ -510,7 +510,7 @@
|
||||
#address-cells = <1>;
|
||||
#size-cells = <0>;
|
||||
|
||||
status = "disable"
|
||||
status = "disabled";
|
||||
};
|
||||
|
||||
i2c1: i2c1@1fbf8100 {
|
||||
@@ -524,7 +524,7 @@
|
||||
#address-cells = <1>;
|
||||
#size-cells = <0>;
|
||||
|
||||
status = "disable"
|
||||
status = "disabled";
|
||||
};
|
||||
|
||||
snfi: spi@1fa10000 {
|
||||
|
||||
-76
@@ -1,76 +0,0 @@
|
||||
--- a/drivers/mtd/nand/spi/gigadevice.c
|
||||
+++ b/drivers/mtd/nand/spi/gigadevice.c
|
||||
@@ -323,6 +323,16 @@
|
||||
SPINAND_HAS_QE_BIT,
|
||||
SPINAND_ECCINFO(&gd5fxgq4xc_oob_256_ops,
|
||||
gd5fxgq4ufxxg_ecc_get_status)),
|
||||
+ SPINAND_INFO("GD5F1GQ4UC",
|
||||
+ SPINAND_ID(SPINAND_READID_METHOD_OPCODE_ADDR, 0xd1),
|
||||
+ NAND_MEMORG(1, 2048, 128, 64, 1024, 20, 1, 1, 1),
|
||||
+ NAND_ECCREQ(8, 2048),
|
||||
+ SPINAND_INFO_OP_VARIANTS(&read_cache_variants,
|
||||
+ &write_cache_variants,
|
||||
+ &update_cache_variants),
|
||||
+ SPINAND_HAS_QE_BIT,
|
||||
+ SPINAND_ECCINFO(&gd5fxgqx_variant2_ooblayout,
|
||||
+ gd5fxgq4uexxg_ecc_get_status)),
|
||||
SPINAND_INFO("GD5F4GQ4UC",
|
||||
SPINAND_ID(SPINAND_READID_METHOD_OPCODE, 0xb4, 0x68),
|
||||
NAND_MEMORG(1, 4096, 256, 64, 2048, 40, 1, 1, 1),
|
||||
@@ -496,6 +506,56 @@
|
||||
SPINAND_INFO("GD5F4GM8RExxG",
|
||||
SPINAND_ID(SPINAND_READID_METHOD_OPCODE_DUMMY, 0x85),
|
||||
NAND_MEMORG(1, 2048, 128, 64, 4096, 80, 1, 1, 1),
|
||||
+ NAND_ECCREQ(8, 512),
|
||||
+ SPINAND_INFO_OP_VARIANTS(&read_cache_variants_1gq5,
|
||||
+ &write_cache_variants,
|
||||
+ &update_cache_variants),
|
||||
+ SPINAND_HAS_QE_BIT,
|
||||
+ SPINAND_ECCINFO(&gd5fxgqx_variant2_ooblayout,
|
||||
+ gd5fxgq4uexxg_ecc_get_status)),
|
||||
+ SPINAND_INFO("GD5F2GQ5xExxH",
|
||||
+ SPINAND_ID(SPINAND_READID_METHOD_OPCODE_DUMMY, 0x22),
|
||||
+ NAND_MEMORG(1, 2048, 64, 64, 2048, 40, 1, 1, 1),
|
||||
+ NAND_ECCREQ(4, 512),
|
||||
+ SPINAND_INFO_OP_VARIANTS(&read_cache_variants_2gq5,
|
||||
+ &write_cache_variants,
|
||||
+ &update_cache_variants),
|
||||
+ SPINAND_HAS_QE_BIT,
|
||||
+ SPINAND_ECCINFO(&gd5fxgqx_variant2_ooblayout,
|
||||
+ gd5fxgq4uexxg_ecc_get_status)),
|
||||
+ SPINAND_INFO("GD5F1GQ5RExxH",
|
||||
+ SPINAND_ID(SPINAND_READID_METHOD_OPCODE_DUMMY, 0x21),
|
||||
+ NAND_MEMORG(1, 2048, 64, 64, 1024, 20, 1, 1, 1),
|
||||
+ NAND_ECCREQ(4, 512),
|
||||
+ SPINAND_INFO_OP_VARIANTS(&read_cache_variants_1gq5,
|
||||
+ &write_cache_variants,
|
||||
+ &update_cache_variants),
|
||||
+ SPINAND_HAS_QE_BIT,
|
||||
+ SPINAND_ECCINFO(&gd5fxgqx_variant2_ooblayout,
|
||||
+ gd5fxgq4uexxg_ecc_get_status)),
|
||||
+ SPINAND_INFO("GD5F1GQ4RExxH",
|
||||
+ SPINAND_ID(SPINAND_READID_METHOD_OPCODE_DUMMY, 0xc9),
|
||||
+ NAND_MEMORG(1, 2048, 64, 64, 1024, 20, 1, 1, 1),
|
||||
+ NAND_ECCREQ(4, 512),
|
||||
+ SPINAND_INFO_OP_VARIANTS(&read_cache_variants_1gq5,
|
||||
+ &write_cache_variants,
|
||||
+ &update_cache_variants),
|
||||
+ SPINAND_HAS_QE_BIT,
|
||||
+ SPINAND_ECCINFO(&gd5fxgqx_variant2_ooblayout,
|
||||
+ gd5fxgq4uexxg_ecc_get_status)),
|
||||
+ SPINAND_INFO("GD5F1GM9UExxG",
|
||||
+ SPINAND_ID(SPINAND_READID_METHOD_OPCODE_DUMMY, 0x91, 0x01),
|
||||
+ NAND_MEMORG(1, 2048, 128, 64, 1024, 20, 1, 1, 1),
|
||||
+ NAND_ECCREQ(8, 512),
|
||||
+ SPINAND_INFO_OP_VARIANTS(&read_cache_variants_1gq5,
|
||||
+ &write_cache_variants,
|
||||
+ &update_cache_variants),
|
||||
+ SPINAND_HAS_QE_BIT,
|
||||
+ SPINAND_ECCINFO(&gd5fxgqx_variant2_ooblayout,
|
||||
+ gd5fxgq4uexxg_ecc_get_status)),
|
||||
+ SPINAND_INFO("GD5F1GM9RExxG",
|
||||
+ SPINAND_ID(SPINAND_READID_METHOD_OPCODE_DUMMY, 0x81, 0x01),
|
||||
+ NAND_MEMORG(1, 2048, 128, 64, 1024, 20, 1, 1, 1),
|
||||
NAND_ECCREQ(8, 512),
|
||||
SPINAND_INFO_OP_VARIANTS(&read_cache_variants_1gq5,
|
||||
&write_cache_variants,
|
||||
@@ -563,7 +563,7 @@
|
||||
* although the pcie1 phy probes successfully, the controller is unable
|
||||
* to bring it up. So let's disable it until a solution is found.
|
||||
*/
|
||||
status = "disbled"
|
||||
status = "disabled";
|
||||
|
||||
perst-gpios = <&tlmm 18 GPIO_ACTIVE_LOW>;
|
||||
|
||||
|
||||
@@ -75,16 +75,16 @@ func (mc *mieruClient) Store(config *ClientConfig) error {
|
||||
mc.mu.Lock()
|
||||
defer mc.mu.Unlock()
|
||||
if config == nil {
|
||||
return fmt.Errorf("%w: client config is nil", ErrInvalidConfigConfig)
|
||||
return fmt.Errorf("%w: client config is nil", ErrInvalidClientConfig)
|
||||
}
|
||||
if config.Profile == nil {
|
||||
return fmt.Errorf("%w: client config profile is nil", ErrInvalidConfigConfig)
|
||||
return fmt.Errorf("%w: client config profile is nil", ErrInvalidClientConfig)
|
||||
}
|
||||
if mc.running {
|
||||
return ErrStoreClientConfigAfterStart
|
||||
}
|
||||
if err := appctlcommon.ValidateClientConfigSingleProfile(config.Profile); err != nil {
|
||||
return fmt.Errorf("%w: %s", ErrInvalidConfigConfig, err.Error())
|
||||
return fmt.Errorf("%w: %s", ErrInvalidClientConfig, err.Error())
|
||||
}
|
||||
mc.config = config
|
||||
return nil
|
||||
@@ -26,12 +26,12 @@ import (
|
||||
|
||||
var (
|
||||
ErrNoClientConfig = errors.New("no client config")
|
||||
ErrInvalidConfigConfig = errors.New("invalid client config")
|
||||
ErrInvalidClientConfig = errors.New("invalid client config")
|
||||
ErrClientIsNotRunning = errors.New("client is not running")
|
||||
ErrStoreClientConfigAfterStart = errors.New("can't store client config after start")
|
||||
)
|
||||
|
||||
// Client contains methods supported by a mieru client.
|
||||
// Client contains methods supported by a proxy client.
|
||||
type Client interface {
|
||||
ClientConfigurationService
|
||||
ClientLifecycleService
|
||||
|
||||
@@ -0,0 +1,18 @@
|
||||
// Copyright (C) 2025 mieru authors
|
||||
//
|
||||
// This program is free software: you can redistribute it and/or modify
|
||||
// it under the terms of the GNU General Public License as published by
|
||||
// the Free Software Foundation, either version 3 of the License, or
|
||||
// (at your option) any later version.
|
||||
//
|
||||
// This program is distributed in the hope that it will be useful,
|
||||
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
// GNU General Public License for more details.
|
||||
//
|
||||
// You should have received a copy of the GNU General Public License
|
||||
// along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||
|
||||
// Package server provides mieru server APIs for third party applications
|
||||
// to integrate mieru protocol.
|
||||
package server
|
||||
@@ -0,0 +1,73 @@
|
||||
// Copyright (C) 2025 mieru authors
|
||||
//
|
||||
// This program is free software: you can redistribute it and/or modify
|
||||
// it under the terms of the GNU General Public License as published by
|
||||
// the Free Software Foundation, either version 3 of the License, or
|
||||
// (at your option) any later version.
|
||||
//
|
||||
// This program is distributed in the hope that it will be useful,
|
||||
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
// GNU General Public License for more details.
|
||||
//
|
||||
// You should have received a copy of the GNU General Public License
|
||||
// along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||
|
||||
package server
|
||||
|
||||
import (
|
||||
"errors"
|
||||
|
||||
"github.com/enfein/mieru/v3/pkg/appctl/appctlpb"
|
||||
)
|
||||
|
||||
var (
|
||||
ErrNoServerConfig = errors.New("no server config")
|
||||
ErrInvalidServerConfig = errors.New("invalid server config")
|
||||
ErrServerIsNotRunning = errors.New("server is not running")
|
||||
ErrStoreServerConfigAfterStart = errors.New("can't store server config after start")
|
||||
)
|
||||
|
||||
// Server contains methods supported by a proxy server.
|
||||
type Server interface {
|
||||
ServerConfigurationService
|
||||
ServerLifecycleService
|
||||
ServerNetworkService
|
||||
}
|
||||
|
||||
// ServerConfigurationService contains methods to manage proxy server configuration.
|
||||
type ServerConfigurationService interface {
|
||||
// Load returns the server config.
|
||||
// It returns ErrNoServerConfig if server config is never stored.
|
||||
Load() (*ServerConfig, error)
|
||||
|
||||
// Store saves the server config.
|
||||
// It returns wrapped ErrInvalidServerConfig error
|
||||
// if the provided server config is invalid.
|
||||
// It returns ErrStoreServerConfigAfterStart error
|
||||
// if it is called after start.
|
||||
Store(*ServerConfig) error
|
||||
}
|
||||
|
||||
// ServerLifecycleService contains methods to manage proxy server lifecycle.
|
||||
type ServerLifecycleService interface {
|
||||
// Start activates the server with the stored configuration.
|
||||
// Calling Start function more than once has undefined behavior.
|
||||
Start() error
|
||||
|
||||
// Stop deactivates the server.
|
||||
// Established network connections are NOT terminated.
|
||||
// After stop, the server can't be reused.
|
||||
Stop() error
|
||||
|
||||
// IsRunning returns true if the server has been started
|
||||
// and has not been stopped.
|
||||
IsRunning() bool
|
||||
}
|
||||
|
||||
type ServerNetworkService interface{}
|
||||
|
||||
// ServerConfig stores proxy server configuration.
|
||||
type ServerConfig struct {
|
||||
Config *appctlpb.ServerConfig
|
||||
}
|
||||
@@ -533,6 +533,9 @@ int main(int argc, char* argv[]) {
|
||||
naive_proxies.push_back(std::move(naive_proxy));
|
||||
}
|
||||
|
||||
if (getenv("TEST_MARK_STARTUP") != nullptr) {
|
||||
LOG(INFO) << "TEST_MARK_STARTUP";
|
||||
}
|
||||
base::RunLoop().Run();
|
||||
|
||||
return EXIT_SUCCESS;
|
||||
|
||||
@@ -97,7 +97,9 @@ def start_naive(naive_args, config_file):
|
||||
cmdline = [argv.naive]
|
||||
cmdline.extend(naive_args)
|
||||
|
||||
proc = subprocess.Popen(cmdline, stdout=subprocess.DEVNULL,
|
||||
env = os.environ.copy()
|
||||
env["TEST_MARK_STARTUP"] = "yes"
|
||||
proc = subprocess.Popen(cmdline, stdout=subprocess.DEVNULL, env=env,
|
||||
stderr=subprocess.PIPE, text=True, encoding='utf-8')
|
||||
print('subprocess.Popen', ' '.join(cmdline), 'pid:', proc.pid)
|
||||
|
||||
@@ -122,7 +124,7 @@ def start_naive(naive_args, config_file):
|
||||
print('terminate pid', proc.pid)
|
||||
proc.terminate()
|
||||
return 'Failed to listen'
|
||||
elif 'Listening on ' in line:
|
||||
elif 'TEST_MARK_STARTUP' in line:
|
||||
timeout.cancel()
|
||||
return proc
|
||||
|
||||
|
||||
@@ -5,12 +5,12 @@
|
||||
include $(TOPDIR)/rules.mk
|
||||
|
||||
PKG_NAME:=filebrowser
|
||||
PKG_VERSION:=2.43.0
|
||||
PKG_VERSION:=2.44.0
|
||||
PKG_RELEASE:=1
|
||||
|
||||
PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz
|
||||
PKG_SOURCE_URL:=https://codeload.github.com/filebrowser/filebrowser/tar.gz/v${PKG_VERSION}?
|
||||
PKG_HASH:=9c3acee7567986ceef331e3eea0236b4dd9a41bf3874449fbb9bdc22c00a0aab
|
||||
PKG_HASH:=b2ceb3c9bbfb6e0e2c31764b8ff1d7788fa965081eb3d43452b6a5065027f71f
|
||||
|
||||
PKG_LICENSE:=Apache-2.0
|
||||
PKG_LICENSE_FILES:=LICENSE
|
||||
|
||||
@@ -1415,15 +1415,12 @@ footer > a {
|
||||
margin-left: 0;
|
||||
margin-right: 0;
|
||||
margin-top: 0rem;
|
||||
}
|
||||
|
||||
.container .alert,
|
||||
.container .alert-message.error {
|
||||
position: relative;
|
||||
top: 0;
|
||||
transform:translate(-50%, 0);
|
||||
width: 100%;
|
||||
}
|
||||
|
||||
.lg {
|
||||
margin: 0;
|
||||
padding: 0 !important;
|
||||
@@ -2574,7 +2571,7 @@ body:not(.Interfaces) .cbi-rowstyle-2:first-child {
|
||||
padding: 0.5rem;
|
||||
cursor: auto;
|
||||
white-space: pre-wrap;
|
||||
color: var(--gray-dark);
|
||||
color: var(--dark-primary);
|
||||
outline: 0;
|
||||
border-radius: 0.25rem;
|
||||
border: 1px solid var(--lighter);
|
||||
@@ -3467,6 +3464,7 @@ pre.command-output {
|
||||
background: #fb6340 !important;
|
||||
border-color: #fb6340 !important;
|
||||
margin-left: 0 !important;
|
||||
width: 82px !important;
|
||||
}
|
||||
/* applyreboot fix */
|
||||
#applyreboot-container {
|
||||
|
||||
@@ -275,16 +275,12 @@ select[multiple="multiple"] {
|
||||
margin-left: 0;
|
||||
margin-right: 0;
|
||||
margin-top: 0rem;
|
||||
}
|
||||
|
||||
|
||||
.container .alert,
|
||||
.container .alert-message.error {
|
||||
position: relative;
|
||||
top: 0;
|
||||
transform:translate(-50%, 0);
|
||||
width: 100%;
|
||||
}
|
||||
|
||||
.lg {
|
||||
margin: 0;
|
||||
padding: 0 !important;
|
||||
@@ -1671,7 +1667,7 @@ body:not(.Interfaces) .cbi-rowstyle-2:first-child {
|
||||
padding: 0.5rem;
|
||||
cursor: auto;
|
||||
white-space: pre-wrap;
|
||||
color: var(--gray-dark);
|
||||
color: var(--dark-primary);
|
||||
outline: 0;
|
||||
border-radius: 0.25rem;
|
||||
border: 1px solid var(--lighter);
|
||||
|
||||
@@ -362,6 +362,7 @@
|
||||
background: #fb6340 !important;
|
||||
border-color: #fb6340 !important;
|
||||
margin-left: 0 !important;
|
||||
width: 82px !important;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -948,4 +949,4 @@ div[style*="display:grid;grid-template-columns:repeat"] {
|
||||
[data-page^="command-cfg"] .mobile-hide,
|
||||
[data-page^="command-cfg"] .showSide {
|
||||
display: none;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -297,6 +297,14 @@ const trojan_cipher_methods = [
|
||||
['chacha20-ietf-poly1305', _('chacha20-ietf-poly1305')]
|
||||
];
|
||||
|
||||
const tls_client_auth_types = [
|
||||
['', _('none')],
|
||||
['request', _('Request')],
|
||||
['require-any', _('Require any')],
|
||||
['verify-if-given', _('Verify if given')],
|
||||
['require-and-verify', _('Require and verify')]
|
||||
];
|
||||
|
||||
const tls_client_fingerprints = [
|
||||
['chrome'],
|
||||
['firefox'],
|
||||
@@ -1585,6 +1593,16 @@ function validateJson(section_id, value) {
|
||||
return true;
|
||||
}
|
||||
|
||||
function validateMTLSClientAuth(type_option, section_id, value) {
|
||||
// If `client-auth-type` is set to "verify-if-given" or "require-and-verify", `client-auth-cert` must not be empty.
|
||||
const auth_type = this.section.getOption(type_option).formvalue(section_id);
|
||||
//this.section.getUIElement('tls_client_auth_type').getValue();
|
||||
if (!value && ["verify-if-given", "require-and-verify"].includes(auth_type))
|
||||
return _('Expecting: %s').format(_('non-empty value'));
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
function validateBase64Key(length, section_id, value) {
|
||||
/* Thanks to luci-proto-wireguard */
|
||||
if (value)
|
||||
@@ -1819,6 +1837,7 @@ return baseclass.extend({
|
||||
shadowsocks_cipher_methods,
|
||||
shadowsocks_cipher_length,
|
||||
trojan_cipher_methods,
|
||||
tls_client_auth_types,
|
||||
tls_client_fingerprints,
|
||||
vless_flow,
|
||||
|
||||
@@ -1869,6 +1888,7 @@ return baseclass.extend({
|
||||
validateAuthPassword,
|
||||
validateCommonPort,
|
||||
validateJson,
|
||||
validateMTLSClientAuth,
|
||||
validateBase64Key,
|
||||
validateShadowsocksPassword,
|
||||
validateBytesize,
|
||||
|
||||
@@ -546,6 +546,17 @@ return view.extend({
|
||||
so.datatype = 'file';
|
||||
so.value('/etc/ssl/acme/example.key');
|
||||
|
||||
so = ss.option(form.ListValue, 'tls_client_auth_type', _('API Client Auth type') + _(' (mTLS)'));
|
||||
so.default = hm.tls_client_auth_types[0][0];
|
||||
hm.tls_client_auth_types.forEach((res) => {
|
||||
so.value.apply(so, res);
|
||||
})
|
||||
|
||||
so = ss.option(form.Value, 'tls_client_auth_cert_path', _('API Client Auth Certificate path') + _(' (mTLS)'),
|
||||
_('The %s public key, in PEM format.').format(_('Client')));
|
||||
so.value('/etc/fchomo/certs/client_publickey.pem');
|
||||
so.validate = L.bind(hm.validateMTLSClientAuth, so, 'tls_client_auth_type');
|
||||
|
||||
so = ss.option(hm.GenText, 'tls_ech_key', _('API ECH key'));
|
||||
so.placeholder = '-----BEGIN ECH KEYS-----\nACATwY30o/RKgD6hgeQxwrSiApLaCgU+HKh7B6SUrAHaDwBD/g0APwAAIAAgHjzK\nmadSJjYQIf9o1N5GXjkW4DEEeb17qMxHdwMdNnwADAABAAEAAQACAAEAAwAIdGVz\ndC5jb20AAA==\n-----END ECH KEYS-----';
|
||||
so.hm_placeholder = 'outer-sni.any.domain';
|
||||
|
||||
@@ -654,6 +654,34 @@ return view.extend({
|
||||
so.depends({tls: '1', type: /^(http|socks5|vmess|vless|trojan|anytls|hysteria|hysteria2|tuic)$/});
|
||||
so.modalonly = true;
|
||||
|
||||
so = ss.taboption('field_tls', form.Value, 'tls_cert_path', _('Certificate path') + _(' (mTLS)'),
|
||||
_('The %s public key, in PEM format.').format(_('Client')));
|
||||
so.value('/etc/fchomo/certs/client_publickey.pem');
|
||||
so.depends('tls', '1');
|
||||
so.modalonly = true;
|
||||
|
||||
so = ss.taboption('field_tls', form.Button, '_upload_cert', _('Upload certificate') + _(' (mTLS)'),
|
||||
_('<strong>Save your configuration before uploading files!</strong>'));
|
||||
so.inputstyle = 'action';
|
||||
so.inputtitle = _('Upload...');
|
||||
so.depends({tls: '1', tls_cert_path: '/etc/fchomo/certs/client_publickey.pem'});
|
||||
so.onclick = L.bind(hm.uploadCertificate, so, _('certificate'), 'client_publickey');
|
||||
so.modalonly = true;
|
||||
|
||||
so = ss.taboption('field_tls', form.Value, 'tls_key_path', _('Key path') + _(' (mTLS)'),
|
||||
_('The %s private key, in PEM format.').format(_('Client')));
|
||||
so.value('/etc/fchomo/certs/client_privatekey.pem');
|
||||
so.depends({tls: '1', tls_cert_path: /.+/});
|
||||
so.modalonly = true;
|
||||
|
||||
so = ss.taboption('field_tls', form.Button, '_upload_key', _('Upload key') + _(' (mTLS)'),
|
||||
_('<strong>Save your configuration before uploading files!</strong>'));
|
||||
so.inputstyle = 'action';
|
||||
so.inputtitle = _('Upload...');
|
||||
so.depends({tls: '1', tls_key_path: '/etc/fchomo/certs/client_privatekey.pem'});
|
||||
so.onclick = L.bind(hm.uploadCertificate, so, _('private key'), 'client_privatekey');
|
||||
so.modalonly = true;
|
||||
|
||||
so = ss.taboption('field_tls', form.Flag, 'tls_ech', _('Enable ECH'));
|
||||
so.default = so.disabled;
|
||||
so.depends({tls: '1', type: /^(vmess|vless|trojan|anytls|hysteria|hysteria2|tuic)$/});
|
||||
|
||||
@@ -343,7 +343,7 @@ return view.extend({
|
||||
o.modalonly = true;
|
||||
|
||||
o = s.taboption('field_tls', form.Value, 'tls_cert_path', _('Certificate path'),
|
||||
_('The server public key, in PEM format.'));
|
||||
_('The %s public key, in PEM format.').format(_('Server')));
|
||||
o.value('/etc/fchomo/certs/server_publickey.pem');
|
||||
o.depends({tls: '1', tls_reality: '0'});
|
||||
o.rmempty = false;
|
||||
@@ -358,7 +358,7 @@ return view.extend({
|
||||
o.modalonly = true;
|
||||
|
||||
o = s.taboption('field_tls', form.Value, 'tls_key_path', _('Key path'),
|
||||
_('The server private key, in PEM format.'));
|
||||
_('The %s private key, in PEM format.').format(_('Server')));
|
||||
o.value('/etc/fchomo/certs/server_privatekey.pem');
|
||||
o.rmempty = false;
|
||||
o.depends({tls: '1', tls_cert_path: /.+/});
|
||||
@@ -372,10 +372,35 @@ return view.extend({
|
||||
o.onclick = L.bind(hm.uploadCertificate, o, _('private key'), 'server_privatekey');
|
||||
o.modalonly = true;
|
||||
|
||||
o = s.taboption('field_tls', form.ListValue, 'tls_client_auth_type', _('Client Auth type') + _(' (mTLS)'));
|
||||
o.default = hm.tls_client_auth_types[0][0];
|
||||
hm.tls_client_auth_types.forEach((res) => {
|
||||
o.value.apply(o, res);
|
||||
})
|
||||
o.depends({tls: '1', type: /^(http|socks|mixed|vmess|vless|trojan|anytls|hysteria2|tuic)$/});
|
||||
o.modalonly = true;
|
||||
|
||||
o = s.taboption('field_tls', form.Value, 'tls_client_auth_cert_path', _('Client Auth Certificate path') + _(' (mTLS)'),
|
||||
_('The %s public key, in PEM format.').format(_('Client')));
|
||||
o.value('/etc/fchomo/certs/client_publickey.pem');
|
||||
o.validate = function(section_id, value) {
|
||||
return hm.validateMTLSClientAuth.call(this, 'tls_client_auth_type', section_id, value);
|
||||
}
|
||||
o.depends({tls: '1', type: /^(http|socks|mixed|vmess|vless|trojan|anytls|hysteria2|tuic)$/});
|
||||
o.modalonly = true;
|
||||
|
||||
o = s.taboption('field_tls', form.Button, '_upload_client_auth_cert', _('Upload certificate') + _(' (mTLS)'),
|
||||
_('<strong>Save your configuration before uploading files!</strong>'));
|
||||
o.inputstyle = 'action';
|
||||
o.inputtitle = _('Upload...');
|
||||
o.depends({tls: '1', tls_client_auth_cert_path: '/etc/fchomo/certs/client_publickey.pem'});
|
||||
o.onclick = L.bind(hm.uploadCertificate, o, _('certificate'), 'client_publickey');
|
||||
o.modalonly = true;
|
||||
|
||||
o = s.taboption('field_tls', hm.GenText, 'tls_ech_key', _('ECH key'));
|
||||
o.placeholder = '-----BEGIN ECH KEYS-----\nACATwY30o/RKgD6hgeQxwrSiApLaCgU+HKh7B6SUrAHaDwBD/g0APwAAIAAgHjzK\nmadSJjYQIf9o1N5GXjkW4DEEeb17qMxHdwMdNnwADAABAAEAAQACAAEAAwAIdGVz\ndC5jb20AAA==\n-----END ECH KEYS-----';
|
||||
o.hm_placeholder = 'outer-sni.any.domain';
|
||||
o.cols = 30
|
||||
o.cols = 30;
|
||||
o.rows = 2;
|
||||
o.hm_options = {
|
||||
type: 'ech-keypair',
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@@ -135,8 +135,15 @@ start_service() {
|
||||
else
|
||||
# Set ENV variables for Client
|
||||
export SAFE_PATHS="$RUN_DIR$(
|
||||
yq 'with(.tls; .[] |= sub("(/[^/]+$)", ""))
|
||||
| [.external-ui, .tls.certificate, .tls.private-key] | unique | map(select(. != null))
|
||||
yq 'with(.external-ui; select(. != null) | . = sub("(/?$)", "/placeholder"))
|
||||
| [.external-ui, .tls.certificate, .tls.private-key, .tls.client-auth-cert] | unique | map(select(. != null))
|
||||
| .[] |= sub("(/[^/]+$)", "") | unique
|
||||
| .[] | sub("(^)", ":")' \
|
||||
"$RUN_DIR/mihomo-c.yaml" | tr -d '\n'
|
||||
)"
|
||||
export SAFE_PATHS="$SAFE_PATHS$( # mTLS
|
||||
yq '.proxies | map([.certificate, .private-key][]) | unique | map(select(. != null))
|
||||
| .[] |= sub("(/[^/]+$)", "") | unique
|
||||
| .[] | sub("(^)", ":")' \
|
||||
"$RUN_DIR/mihomo-c.yaml" | tr -d '\n'
|
||||
)"
|
||||
@@ -341,8 +348,8 @@ start_service() {
|
||||
else
|
||||
# Set ENV variables for Server
|
||||
export SAFE_PATHS="$RUN_DIR$(
|
||||
yq '[.listeners[] | select(.certificate // .private-key) | [.certificate, .private-key][]]
|
||||
| .[] |= sub("(/[^/]+$)", "") | unique | map(select(. != null))
|
||||
yq '.listeners | map([.certificate, .private-key, .client-auth-cert][]) | unique | map(select(. != null))
|
||||
| .[] |= sub("(/[^/]+$)", "") | unique
|
||||
| .[] | sub("(^)", ":")' \
|
||||
"$RUN_DIR/mihomo-s.yaml" | tr -d '\n'
|
||||
)"
|
||||
|
||||
@@ -4,6 +4,9 @@
|
||||
sed -i 's|^FQDN:$|DOMAIN:|' "/etc/fchomo/resources/direct_list.yaml" 2>/dev/null
|
||||
sed -i 's|^FQDN:$|DOMAIN:|' "/etc/fchomo/resources/proxy_list.yaml" 2>/dev/null
|
||||
|
||||
# mieru_port_range -> mieru_ports
|
||||
sed -i 's|^\toption mieru_port_range |\tlist mieru_ports |' /etc/config/fchomo 2>/dev/null
|
||||
|
||||
# default_proxy -> client_enabled and MATCH rule
|
||||
default_proxy=$(uci -q get fchomo.routing.default_proxy)
|
||||
if [ -n "$default_proxy" ]; then
|
||||
@@ -47,9 +50,6 @@ if [ -n "$dns_port" ]; then
|
||||
EOF
|
||||
fi
|
||||
|
||||
# mieru_port_range -> mieru_ports
|
||||
sed -i 's|^\toption mieru_port_range |\tlist mieru_ports |' /etc/config/fchomo 2>/dev/null
|
||||
|
||||
uci commit fchomo
|
||||
|
||||
exit 0
|
||||
|
||||
@@ -258,6 +258,8 @@ config["global-client-fingerprint"] = uci.get(uciconf, ucitls, 'global_client_fi
|
||||
config.tls = {
|
||||
"certificate": uci.get(uciconf, ucitls, 'tls_cert_path'),
|
||||
"private-key": uci.get(uciconf, ucitls, 'tls_key_path'),
|
||||
"client-auth-type": uci.get(uciconf, ucitls, 'tls_client_auth_type'),
|
||||
"client-auth-cert": uci.get(uciconf, ucitls, 'tls_client_auth_cert_path'),
|
||||
"ech-key": uci.get(uciconf, ucitls, 'tls_ech_key')
|
||||
};
|
||||
/* TLS END */
|
||||
@@ -591,6 +593,8 @@ uci.foreach(uciconf, ucinode, (cfg) => {
|
||||
fingerprint: cfg.tls_fingerprint,
|
||||
alpn: cfg.tls_alpn, // Array
|
||||
"skip-cert-verify": strToBool(cfg.tls_skip_cert_verify),
|
||||
certificate: cfg.tls_cert_path, // mTLS
|
||||
"private-key": cfg.tls_key_path, // mTLS
|
||||
"client-fingerprint": cfg.tls_client_fingerprint,
|
||||
"ech-opts": cfg.tls_ech === '1' ? {
|
||||
enable: true,
|
||||
|
||||
@@ -159,6 +159,8 @@ uci.foreach(uciconf, uciserver, (cfg) => {
|
||||
certificate: cfg.tls_cert_path,
|
||||
"private-key": cfg.tls_key_path
|
||||
}),
|
||||
"client-auth-type": cfg.tls_client_auth_type,
|
||||
"client-auth-cert": cfg.tls_client_auth_cert_path,
|
||||
"ech-key": cfg.tls_ech_key,
|
||||
} : {}),
|
||||
|
||||
|
||||
@@ -19,7 +19,7 @@ function wGET(url, header, filepath) {
|
||||
let ua = 'Wget/1.21 (FullCombo Shark!)';
|
||||
|
||||
if (header) {
|
||||
header = json(trim(header) || {});
|
||||
header = json(trim(header) || '{}');
|
||||
|
||||
header = join(' ', filter(map(keys(header), (k) => {
|
||||
let v = join(', ', type(header[k]) === 'array' ? filter(header[k], v => v) : []);
|
||||
@@ -385,9 +385,11 @@ const methods = {
|
||||
switch (filename) {
|
||||
case 'client_ca':
|
||||
case 'server_publickey':
|
||||
case 'client_publickey':
|
||||
return writeCertificate(filename, false);
|
||||
break;
|
||||
case 'server_privatekey':
|
||||
case 'client_privatekey':
|
||||
return writeCertificate(filename, true);
|
||||
break;
|
||||
default:
|
||||
|
||||
@@ -5,7 +5,7 @@
|
||||
include $(TOPDIR)/rules.mk
|
||||
|
||||
PKG_NAME:=naiveproxy
|
||||
PKG_VERSION:=140.0.7339.123-1
|
||||
PKG_VERSION:=140.0.7339.123-2
|
||||
PKG_RELEASE:=1
|
||||
|
||||
# intel 80386 & riscv64 & cortex-a76
|
||||
@@ -24,11 +24,11 @@ ifeq ($(ARCH_PACKAGES),aarch64_cortex-a53)
|
||||
else ifeq ($(ARCH_PACKAGES),aarch64_cortex-a72)
|
||||
PKG_HASH:=b4d31db433ff3b1e28b0a2d0393317b815a41bdaa69f841516086dcfa4ac52bb
|
||||
else ifeq ($(ARCH_PACKAGES),aarch64_generic)
|
||||
PKG_HASH:=3d150e002b54bed3dcd8ee1b3f87ec7bd2142d3272fcd8e7a6615d33689da7ef
|
||||
PKG_HASH:=eccb7341e5a2a2307e2c7b469adb271fcb76c9b7d96428b5d9216eb91f07bc04
|
||||
else ifeq ($(ARCH_PACKAGES),arm_arm1176jzf-s_vfp)
|
||||
PKG_HASH:=c90c564d09648ef7f7b83595b8a0a4635ea8b293c4bfb3ac432d0cc5d003719e
|
||||
else ifeq ($(ARCH_PACKAGES),arm_arm926ej-s)
|
||||
PKG_HASH:=8547ed89569709da3a2bfa5b90cad77c6c671da2d721b703a2b1707306013d2f
|
||||
PKG_HASH:=e6b0f057b719fffd3bc5f201538767c69e6367a1e1480808efe62d4f093e4b55
|
||||
else ifeq ($(ARCH_PACKAGES),arm_cortex-a15_neon-vfpv4)
|
||||
PKG_HASH:=4e41da71ed4a588d9da6748857b7063f441275d573c8935b24b41adad6f92136
|
||||
else ifeq ($(ARCH_PACKAGES),arm_cortex-a5_vfpv4)
|
||||
@@ -38,13 +38,13 @@ else ifeq ($(ARCH_PACKAGES),arm_cortex-a7)
|
||||
else ifeq ($(ARCH_PACKAGES),arm_cortex-a7_neon-vfpv4)
|
||||
PKG_HASH:=a374076612e4ee741c60d57173771bb6b6f2a2710d4d9a637afb6e8ddce98e76
|
||||
else ifeq ($(ARCH_PACKAGES),arm_cortex-a7_vfpv4)
|
||||
PKG_HASH:=b2287851d25d4701c16add18a75d52f5ae14312da64b9240fecfd3d9625f973e
|
||||
PKG_HASH:=0b335809706c8ecbd1a6680adad7f74a0877b74496d11a556dbe6ccb7ab3e7a4
|
||||
else ifeq ($(ARCH_PACKAGES),arm_cortex-a8_vfpv3)
|
||||
PKG_HASH:=12cf7be62a5d5fd5c0e886e1a22db445b9ef5f34728c1c788e8a8632ae0105a9
|
||||
else ifeq ($(ARCH_PACKAGES),arm_cortex-a9)
|
||||
PKG_HASH:=9977f8a2c023caa4d7a50b8e4f721f9de18879b74f246c050ea2b15b57e6ff3b
|
||||
else ifeq ($(ARCH_PACKAGES),arm_cortex-a9_neon)
|
||||
PKG_HASH:=9969a31508d64a3c396e3f825fa0ad6ca39609db2752069bfe490ad6455a0377
|
||||
PKG_HASH:=d72fd69a5a67ee38c066dbed077f93949b2224ea0a5b45271ef60aac838acb31
|
||||
else ifeq ($(ARCH_PACKAGES),arm_cortex-a9_vfpv3-d16)
|
||||
PKG_HASH:=3092b1a38b437aef76bbfee69d9a17fcf862907015ef1083e8b2695bfed92723
|
||||
else ifeq ($(ARCH_PACKAGES),arm_mpcore)
|
||||
|
||||
@@ -1,15 +1,15 @@
|
||||
include $(TOPDIR)/rules.mk
|
||||
|
||||
PKG_NAME:=nikki
|
||||
PKG_VERSION:=2025.08.27
|
||||
PKG_RELEASE:=2
|
||||
PKG_VERSION:=2025.09.24
|
||||
PKG_RELEASE:=1
|
||||
|
||||
PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz
|
||||
PKG_SOURCE_SUBDIR:=$(PKG_NAME)-$(PKG_VERSION)
|
||||
PKG_SOURCE_PROTO:=git
|
||||
PKG_SOURCE_URL:=https://github.com/MetaCubeX/mihomo.git
|
||||
PKG_SOURCE_VERSION:=v1.19.13
|
||||
PKG_MIRROR_HASH:=94fdba59d158a4ac28358ab87d6152fe581ed3fbff71ad56b4a2aba462a485d6
|
||||
PKG_SOURCE_VERSION:=v1.19.14
|
||||
PKG_MIRROR_HASH:=1b5ad012709ffe6f087a10769be6dea77b07bf8b866cdd9f8e6ab3d98c6d7986
|
||||
|
||||
PKG_LICENSE:=GPL3.0+
|
||||
PKG_MAINTAINER:=Joseph Mory <morytyann@gmail.com>
|
||||
|
||||
@@ -0,0 +1,32 @@
|
||||
using System.Reactive;
|
||||
|
||||
namespace ServiceLib.Events;
|
||||
|
||||
public static class AppEvents
|
||||
{
|
||||
public static readonly EventChannel<Unit> ReloadRequested = new();
|
||||
public static readonly EventChannel<bool?> ShowHideWindowRequested = new();
|
||||
public static readonly EventChannel<Unit> AddServerViaScanRequested = new();
|
||||
public static readonly EventChannel<Unit> AddServerViaClipboardRequested = new();
|
||||
public static readonly EventChannel<bool> SubscriptionsUpdateRequested = new();
|
||||
|
||||
public static readonly EventChannel<Unit> ProfilesRefreshRequested = new();
|
||||
public static readonly EventChannel<Unit> SubscriptionsRefreshRequested = new();
|
||||
public static readonly EventChannel<Unit> ProxiesReloadRequested = new();
|
||||
public static readonly EventChannel<ServerSpeedItem> DispatcherStatisticsRequested = new();
|
||||
|
||||
public static readonly EventChannel<string> SendSnackMsgRequested = new();
|
||||
public static readonly EventChannel<string> SendMsgViewRequested = new();
|
||||
|
||||
public static readonly EventChannel<Unit> AppExitRequested = new();
|
||||
public static readonly EventChannel<bool> ShutdownRequested = new();
|
||||
|
||||
public static readonly EventChannel<Unit> AdjustMainLvColWidthRequested = new();
|
||||
|
||||
public static readonly EventChannel<string> SetDefaultServerRequested = new();
|
||||
|
||||
public static readonly EventChannel<Unit> RoutingsMenuRefreshRequested = new();
|
||||
public static readonly EventChannel<Unit> TestServerRequested = new();
|
||||
public static readonly EventChannel<Unit> InboundDisplayRequested = new();
|
||||
public static readonly EventChannel<ESysProxyType> SysProxyChangeRequested = new();
|
||||
}
|
||||
@@ -0,0 +1,29 @@
|
||||
using System.Reactive;
|
||||
using System.Reactive.Linq;
|
||||
using System.Reactive.Subjects;
|
||||
|
||||
namespace ServiceLib.Events;
|
||||
|
||||
public sealed class EventChannel<T>
|
||||
{
|
||||
private readonly ISubject<T> _subject = Subject.Synchronize(new Subject<T>());
|
||||
|
||||
public IObservable<T> AsObservable()
|
||||
{
|
||||
return _subject.AsObservable();
|
||||
}
|
||||
|
||||
public void Publish(T value)
|
||||
{
|
||||
_subject.OnNext(value);
|
||||
}
|
||||
|
||||
public void Publish()
|
||||
{
|
||||
if (typeof(T) != typeof(Unit))
|
||||
{
|
||||
throw new InvalidOperationException("Publish() without value is only valid for EventChannel<Unit>.");
|
||||
}
|
||||
_subject.OnNext((T)(object)Unit.Default);
|
||||
}
|
||||
}
|
||||
@@ -1,6 +1,7 @@
|
||||
global using ServiceLib.Base;
|
||||
global using ServiceLib.Common;
|
||||
global using ServiceLib.Enums;
|
||||
global using ServiceLib.Events;
|
||||
global using ServiceLib.Handler;
|
||||
global using ServiceLib.Helper;
|
||||
global using ServiceLib.Manager;
|
||||
|
||||
@@ -1,33 +0,0 @@
|
||||
using System.Reactive;
|
||||
using System.Reactive.Subjects;
|
||||
|
||||
namespace ServiceLib.Handler;
|
||||
|
||||
public static class AppEvents
|
||||
{
|
||||
public static readonly Subject<Unit> ReloadRequested = new();
|
||||
public static readonly Subject<bool?> ShowHideWindowRequested = new();
|
||||
public static readonly Subject<Unit> AddServerViaScanRequested = new();
|
||||
public static readonly Subject<Unit> AddServerViaClipboardRequested = new();
|
||||
public static readonly Subject<bool> SubscriptionsUpdateRequested = new();
|
||||
|
||||
public static readonly Subject<Unit> ProfilesRefreshRequested = new();
|
||||
public static readonly Subject<Unit> SubscriptionsRefreshRequested = new();
|
||||
public static readonly Subject<Unit> ProxiesReloadRequested = new();
|
||||
public static readonly Subject<ServerSpeedItem> DispatcherStatisticsRequested = new();
|
||||
|
||||
public static readonly Subject<string> SendSnackMsgRequested = new();
|
||||
public static readonly Subject<string> SendMsgViewRequested = new();
|
||||
|
||||
public static readonly Subject<Unit> AppExitRequested = new();
|
||||
public static readonly Subject<bool> ShutdownRequested = new();
|
||||
|
||||
public static readonly Subject<Unit> AdjustMainLvColWidthRequested = new();
|
||||
|
||||
public static readonly Subject<string> SetDefaultServerRequested = new();
|
||||
|
||||
public static readonly Subject<Unit> RoutingsMenuRefreshRequested = new();
|
||||
public static readonly Subject<Unit> TestServerRequested = new();
|
||||
public static readonly Subject<Unit> InboundDisplayRequested = new();
|
||||
public static readonly Subject<ESysProxyType> SysProxyChangeRequested = new();
|
||||
}
|
||||
@@ -96,7 +96,7 @@ public sealed class AppManager
|
||||
Logging.SaveLog("AppExitAsync Begin");
|
||||
|
||||
await SysProxyHandler.UpdateSysProxy(_config, true);
|
||||
AppEvents.AppExitRequested.OnNext(Unit.Default);
|
||||
AppEvents.AppExitRequested.Publish();
|
||||
await Task.Delay(50); //Wait for AppExitRequested to be processed
|
||||
|
||||
await ConfigHandler.SaveConfig(_config);
|
||||
@@ -119,7 +119,7 @@ public sealed class AppManager
|
||||
|
||||
public void Shutdown(bool byUser)
|
||||
{
|
||||
AppEvents.ShutdownRequested.OnNext(byUser);
|
||||
AppEvents.ShutdownRequested.Publish(byUser);
|
||||
}
|
||||
|
||||
public async Task RebootAsAdmin()
|
||||
|
||||
@@ -11,7 +11,7 @@ public class NoticeManager
|
||||
{
|
||||
return;
|
||||
}
|
||||
AppEvents.SendSnackMsgRequested.OnNext(content);
|
||||
AppEvents.SendSnackMsgRequested.Publish(content);
|
||||
}
|
||||
|
||||
public void SendMessage(string? content)
|
||||
@@ -20,7 +20,7 @@ public class NoticeManager
|
||||
{
|
||||
return;
|
||||
}
|
||||
AppEvents.SendMsgViewRequested.OnNext(content);
|
||||
AppEvents.SendMsgViewRequested.Publish(content);
|
||||
}
|
||||
|
||||
public void SendMessageEx(string? content)
|
||||
|
||||
@@ -223,7 +223,7 @@ public class CheckUpdateViewModel : MyReactiveObject
|
||||
{
|
||||
if (blReload)
|
||||
{
|
||||
AppEvents.ReloadRequested.OnNext(Unit.Default);
|
||||
AppEvents.ReloadRequested.Publish();
|
||||
}
|
||||
else
|
||||
{
|
||||
|
||||
@@ -292,7 +292,7 @@ public class MainWindowViewModel : MyReactiveObject
|
||||
}
|
||||
if (_config.UiItem.EnableAutoAdjustMainLvColWidth)
|
||||
{
|
||||
AppEvents.AdjustMainLvColWidthRequested.OnNext(Unit.Default);
|
||||
AppEvents.AdjustMainLvColWidthRequested.Publish();
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -303,7 +303,7 @@ public class MainWindowViewModel : MyReactiveObject
|
||||
{
|
||||
return;
|
||||
}
|
||||
AppEvents.DispatcherStatisticsRequested.OnNext(update);
|
||||
AppEvents.DispatcherStatisticsRequested.Publish(update);
|
||||
}
|
||||
|
||||
#endregion Actions
|
||||
@@ -312,14 +312,14 @@ public class MainWindowViewModel : MyReactiveObject
|
||||
|
||||
private async Task RefreshServers()
|
||||
{
|
||||
AppEvents.ProfilesRefreshRequested.OnNext(Unit.Default);
|
||||
AppEvents.ProfilesRefreshRequested.Publish();
|
||||
|
||||
await Task.Delay(200);
|
||||
}
|
||||
|
||||
private void RefreshSubscriptions()
|
||||
{
|
||||
AppEvents.SubscriptionsRefreshRequested.OnNext(Unit.Default);
|
||||
AppEvents.SubscriptionsRefreshRequested.Publish();
|
||||
}
|
||||
|
||||
#endregion Servers && Groups
|
||||
@@ -451,7 +451,7 @@ public class MainWindowViewModel : MyReactiveObject
|
||||
var ret = await _updateView?.Invoke(EViewAction.OptionSettingWindow, null);
|
||||
if (ret == true)
|
||||
{
|
||||
AppEvents.InboundDisplayRequested.OnNext(Unit.Default);
|
||||
AppEvents.InboundDisplayRequested.Publish();
|
||||
await Reload();
|
||||
}
|
||||
}
|
||||
@@ -462,7 +462,7 @@ public class MainWindowViewModel : MyReactiveObject
|
||||
if (ret == true)
|
||||
{
|
||||
await ConfigHandler.InitBuiltinRouting(_config);
|
||||
AppEvents.RoutingsMenuRefreshRequested.OnNext(Unit.Default);
|
||||
AppEvents.RoutingsMenuRefreshRequested.Publish();
|
||||
await Reload();
|
||||
}
|
||||
}
|
||||
@@ -530,12 +530,12 @@ public class MainWindowViewModel : MyReactiveObject
|
||||
await SysProxyHandler.UpdateSysProxy(_config, false);
|
||||
await Task.Delay(1000);
|
||||
});
|
||||
AppEvents.TestServerRequested.OnNext(Unit.Default);
|
||||
AppEvents.TestServerRequested.Publish();
|
||||
|
||||
var showClashUI = _config.IsRunningCore(ECoreType.sing_box);
|
||||
if (showClashUI)
|
||||
{
|
||||
AppEvents.ProxiesReloadRequested.OnNext(Unit.Default);
|
||||
AppEvents.ProxiesReloadRequested.Publish();
|
||||
}
|
||||
|
||||
RxApp.MainThreadScheduler.Schedule(() => ReloadResult(showClashUI));
|
||||
@@ -565,7 +565,7 @@ public class MainWindowViewModel : MyReactiveObject
|
||||
{
|
||||
if (_config.UiItem.AutoHideStartup)
|
||||
{
|
||||
AppEvents.ShowHideWindowRequested.OnNext(false);
|
||||
AppEvents.ShowHideWindowRequested.Publish(false);
|
||||
}
|
||||
await Task.CompletedTask;
|
||||
}
|
||||
@@ -578,7 +578,7 @@ public class MainWindowViewModel : MyReactiveObject
|
||||
{
|
||||
await ConfigHandler.ApplyRegionalPreset(_config, type);
|
||||
await ConfigHandler.InitRouting(_config);
|
||||
AppEvents.RoutingsMenuRefreshRequested.OnNext(Unit.Default);
|
||||
AppEvents.RoutingsMenuRefreshRequested.Publish();
|
||||
|
||||
await ConfigHandler.SaveConfig(_config);
|
||||
await new UpdateService().UpdateGeoFileAll(_config, UpdateTaskHandler);
|
||||
|
||||
@@ -275,7 +275,7 @@ public class ProfilesViewModel : MyReactiveObject
|
||||
|
||||
private void Reload()
|
||||
{
|
||||
AppEvents.ReloadRequested.OnNext(Unit.Default);
|
||||
AppEvents.ReloadRequested.Publish();
|
||||
}
|
||||
|
||||
public async Task SetSpeedTestResult(SpeedTestResult result)
|
||||
@@ -361,7 +361,7 @@ public class ProfilesViewModel : MyReactiveObject
|
||||
|
||||
public async Task RefreshServers()
|
||||
{
|
||||
AppEvents.ProfilesRefreshRequested.OnNext(Unit.Default);
|
||||
AppEvents.ProfilesRefreshRequested.Publish();
|
||||
|
||||
await Task.Delay(200);
|
||||
}
|
||||
|
||||
@@ -148,17 +148,17 @@ public class StatusBarViewModel : MyReactiveObject
|
||||
|
||||
NotifyLeftClickCmd = ReactiveCommand.CreateFromTask(async () =>
|
||||
{
|
||||
AppEvents.ShowHideWindowRequested.OnNext(null);
|
||||
AppEvents.ShowHideWindowRequested.Publish(null);
|
||||
await Task.CompletedTask;
|
||||
});
|
||||
ShowWindowCmd = ReactiveCommand.CreateFromTask(async () =>
|
||||
{
|
||||
AppEvents.ShowHideWindowRequested.OnNext(true);
|
||||
AppEvents.ShowHideWindowRequested.Publish(true);
|
||||
await Task.CompletedTask;
|
||||
});
|
||||
HideWindowCmd = ReactiveCommand.CreateFromTask(async () =>
|
||||
{
|
||||
AppEvents.ShowHideWindowRequested.OnNext(false);
|
||||
AppEvents.ShowHideWindowRequested.Publish(false);
|
||||
await Task.CompletedTask;
|
||||
});
|
||||
|
||||
@@ -274,19 +274,19 @@ public class StatusBarViewModel : MyReactiveObject
|
||||
|
||||
private async Task AddServerViaClipboard()
|
||||
{
|
||||
AppEvents.AddServerViaClipboardRequested.OnNext(Unit.Default);
|
||||
AppEvents.AddServerViaClipboardRequested.Publish();
|
||||
await Task.Delay(1000);
|
||||
}
|
||||
|
||||
private async Task AddServerViaScan()
|
||||
{
|
||||
AppEvents.AddServerViaScanRequested.OnNext(Unit.Default);
|
||||
AppEvents.AddServerViaScanRequested.Publish();
|
||||
await Task.Delay(1000);
|
||||
}
|
||||
|
||||
private async Task UpdateSubscriptionProcess(bool blProxy)
|
||||
{
|
||||
AppEvents.SubscriptionsUpdateRequested.OnNext(blProxy);
|
||||
AppEvents.SubscriptionsUpdateRequested.Publish(blProxy);
|
||||
await Task.Delay(1000);
|
||||
}
|
||||
|
||||
@@ -348,7 +348,7 @@ public class StatusBarViewModel : MyReactiveObject
|
||||
{
|
||||
return;
|
||||
}
|
||||
AppEvents.SetDefaultServerRequested.OnNext(SelectedServer.ID);
|
||||
AppEvents.SetDefaultServerRequested.Publish(SelectedServer.ID);
|
||||
}
|
||||
|
||||
public async Task TestServerAvailability()
|
||||
@@ -449,7 +449,7 @@ public class StatusBarViewModel : MyReactiveObject
|
||||
if (await ConfigHandler.SetDefaultRouting(_config, item) == 0)
|
||||
{
|
||||
NoticeManager.Instance.SendMessageEx(ResUI.TipChangeRouting);
|
||||
AppEvents.ReloadRequested.OnNext(Unit.Default);
|
||||
AppEvents.ReloadRequested.Publish();
|
||||
_updateView?.Invoke(EViewAction.DispatcherRefreshIcon, null);
|
||||
}
|
||||
}
|
||||
@@ -496,7 +496,7 @@ public class StatusBarViewModel : MyReactiveObject
|
||||
}
|
||||
}
|
||||
await ConfigHandler.SaveConfig(_config);
|
||||
AppEvents.ReloadRequested.OnNext(Unit.Default);
|
||||
AppEvents.ReloadRequested.Publish();
|
||||
}
|
||||
|
||||
private bool AllowEnableTun()
|
||||
|
||||
@@ -54,7 +54,7 @@ public partial class App : Application
|
||||
{
|
||||
if (desktop.MainWindow != null)
|
||||
{
|
||||
AppEvents.AddServerViaClipboardRequested.OnNext(Unit.Default);
|
||||
AppEvents.AddServerViaClipboardRequested.Publish();
|
||||
await Task.Delay(1000);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -2,6 +2,7 @@ global using ServiceLib;
|
||||
global using ServiceLib.Base;
|
||||
global using ServiceLib.Common;
|
||||
global using ServiceLib.Enums;
|
||||
global using ServiceLib.Events;
|
||||
global using ServiceLib.Handler;
|
||||
global using ServiceLib.Manager;
|
||||
global using ServiceLib.Models;
|
||||
|
||||
@@ -253,7 +253,7 @@ public partial class MainWindow : WindowBase<MainWindowViewModel>
|
||||
case EGlobalHotkey.SystemProxySet:
|
||||
case EGlobalHotkey.SystemProxyUnchanged:
|
||||
case EGlobalHotkey.SystemProxyPac:
|
||||
AppEvents.SysProxyChangeRequested.OnNext((ESysProxyType)((int)e - 1));
|
||||
AppEvents.SysProxyChangeRequested.Publish((ESysProxyType)((int)e - 1));
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -2,6 +2,7 @@ global using ServiceLib;
|
||||
global using ServiceLib.Base;
|
||||
global using ServiceLib.Common;
|
||||
global using ServiceLib.Enums;
|
||||
global using ServiceLib.Events;
|
||||
global using ServiceLib.Handler;
|
||||
global using ServiceLib.Manager;
|
||||
global using ServiceLib.Models;
|
||||
|
||||
@@ -241,7 +241,7 @@ public partial class MainWindow
|
||||
case EGlobalHotkey.SystemProxySet:
|
||||
case EGlobalHotkey.SystemProxyUnchanged:
|
||||
case EGlobalHotkey.SystemProxyPac:
|
||||
AppEvents.SysProxyChangeRequested.OnNext((ESysProxyType)((int)e - 1));
|
||||
AppEvents.SysProxyChangeRequested.Publish((ESysProxyType)((int)e - 1));
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user