feat: add query-login
This commit is contained in:
parent
3d45a83129
commit
4b16ec8499
3
.gitmodules
vendored
Normal file
3
.gitmodules
vendored
Normal file
@ -0,0 +1,3 @@
|
||||
[submodule "submodules/kevisual-query-login"]
|
||||
path = submodules/kevisual-query-login
|
||||
url = git@git.xiongxiao.me:kevisual/kevisual-query-login.git
|
@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@kevisual/envision-cli",
|
||||
"version": "0.0.32",
|
||||
"version": "0.0.33",
|
||||
"description": "envision command tools",
|
||||
"main": "dist/app.mjs",
|
||||
"type": "module",
|
||||
@ -33,7 +33,8 @@
|
||||
],
|
||||
"author": "abearxiong",
|
||||
"devDependencies": {
|
||||
"@kevisual/query": "0.0.9",
|
||||
"@kevisual/query": "0.0.13",
|
||||
"@kevisual/query-login": "workspace:*",
|
||||
"@rollup/plugin-alias": "^5.1.1",
|
||||
"@rollup/plugin-commonjs": "^28.0.3",
|
||||
"@rollup/plugin-json": "^6.1.0",
|
||||
@ -42,7 +43,7 @@
|
||||
"@rollup/plugin-typescript": "^12.1.2",
|
||||
"@types/crypto-js": "^4.2.2",
|
||||
"@types/jsonwebtoken": "^9.0.9",
|
||||
"@types/node": "^22.13.10",
|
||||
"@types/node": "^22.13.11",
|
||||
"chalk": "^5.4.1",
|
||||
"commander": "^13.1.0",
|
||||
"fast-glob": "^3.3.3",
|
||||
@ -52,7 +53,7 @@
|
||||
"inquirer": "^12.5.0",
|
||||
"rimraf": "^6.0.1",
|
||||
"rollup": "^4.36.0",
|
||||
"rollup-plugin-dts": "^6.2.0",
|
||||
"rollup-plugin-dts": "^6.2.1",
|
||||
"rollup-plugin-esbuild": "^6.2.1",
|
||||
"tar": "^7.4.3",
|
||||
"tslib": "^2.8.1",
|
||||
|
534
pnpm-lock.yaml
generated
534
pnpm-lock.yaml
generated
@ -34,11 +34,14 @@ importers:
|
||||
version: 5.1.7
|
||||
vite:
|
||||
specifier: ^6.2.2
|
||||
version: 6.2.2(@types/node@22.13.10)
|
||||
version: 6.2.2(@types/node@22.13.11)
|
||||
devDependencies:
|
||||
'@kevisual/query':
|
||||
specifier: 0.0.9
|
||||
version: 0.0.9(encoding@0.1.13)(ws@8.18.0)
|
||||
specifier: 0.0.13
|
||||
version: 0.0.13(encoding@0.1.13)(ws@8.18.0)
|
||||
'@kevisual/query-login':
|
||||
specifier: workspace:*
|
||||
version: link:submodules/kevisual-query-login
|
||||
'@rollup/plugin-alias':
|
||||
specifier: ^5.1.1
|
||||
version: 5.1.1(rollup@4.36.0)
|
||||
@ -64,8 +67,8 @@ importers:
|
||||
specifier: ^9.0.9
|
||||
version: 9.0.9
|
||||
'@types/node':
|
||||
specifier: ^22.13.10
|
||||
version: 22.13.10
|
||||
specifier: ^22.13.11
|
||||
version: 22.13.11
|
||||
chalk:
|
||||
specifier: ^5.4.1
|
||||
version: 5.4.1
|
||||
@ -86,7 +89,7 @@ importers:
|
||||
version: 7.0.3
|
||||
inquirer:
|
||||
specifier: ^12.5.0
|
||||
version: 12.5.0(@types/node@22.13.10)
|
||||
version: 12.5.0(@types/node@22.13.11)
|
||||
rimraf:
|
||||
specifier: ^6.0.1
|
||||
version: 6.0.1
|
||||
@ -94,8 +97,8 @@ importers:
|
||||
specifier: ^4.36.0
|
||||
version: 4.36.0
|
||||
rollup-plugin-dts:
|
||||
specifier: ^6.2.0
|
||||
version: 6.2.0(rollup@4.36.0)(typescript@5.8.2)
|
||||
specifier: ^6.2.1
|
||||
version: 6.2.1(rollup@4.36.0)(typescript@5.8.2)
|
||||
rollup-plugin-esbuild:
|
||||
specifier: ^6.2.1
|
||||
version: 6.2.1(esbuild@0.25.0)(rollup@4.36.0)
|
||||
@ -109,6 +112,25 @@ importers:
|
||||
specifier: ^5.8.2
|
||||
version: 5.8.2
|
||||
|
||||
submodules/kevisual-query-login:
|
||||
dependencies:
|
||||
'@kevisual/cache':
|
||||
specifier: ^0.0.1
|
||||
version: 0.0.1(rollup@4.36.0)(tslib@2.8.1)(typescript@5.8.2)
|
||||
'@kevisual/query':
|
||||
specifier: ^0.0.12
|
||||
version: 0.0.12(encoding@0.1.13)(ws@8.18.0)
|
||||
dotenv:
|
||||
specifier: ^16.4.7
|
||||
version: 16.4.7
|
||||
devDependencies:
|
||||
'@types/node':
|
||||
specifier: ^22.13.11
|
||||
version: 22.13.11
|
||||
tsup:
|
||||
specifier: ^8.4.0
|
||||
version: 8.4.0(postcss@8.5.3)(typescript@5.8.2)
|
||||
|
||||
packages:
|
||||
|
||||
'@babel/code-frame@7.26.2':
|
||||
@ -401,14 +423,35 @@ packages:
|
||||
resolution: {integrity: sha512-wgm9Ehl2jpeqP3zw/7mo3kRHFp5MEDhqAdwy1fTGkHAwnkGOVsgpvQhL8B5n1qlb01jV3n/bI0ZfZp5lWA1k4w==}
|
||||
engines: {node: '>=18.0.0'}
|
||||
|
||||
'@jridgewell/gen-mapping@0.3.8':
|
||||
resolution: {integrity: sha512-imAbBGkb+ebQyxKgzv5Hu2nmROxoDOXHh80evxdoXNOrvAnVx7zimzc1Oo5h9RlfV4vPXaE2iM5pOFbvOCClWA==}
|
||||
engines: {node: '>=6.0.0'}
|
||||
|
||||
'@jridgewell/resolve-uri@3.1.2':
|
||||
resolution: {integrity: sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==}
|
||||
engines: {node: '>=6.0.0'}
|
||||
|
||||
'@jridgewell/set-array@1.2.1':
|
||||
resolution: {integrity: sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==}
|
||||
engines: {node: '>=6.0.0'}
|
||||
|
||||
'@jridgewell/sourcemap-codec@1.5.0':
|
||||
resolution: {integrity: sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==}
|
||||
|
||||
'@jridgewell/trace-mapping@0.3.25':
|
||||
resolution: {integrity: sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==}
|
||||
|
||||
'@kevisual/cache@0.0.1':
|
||||
resolution: {integrity: sha512-yjQJ47NdE3smtJahA3UMcEEBU86uI3V93WnQZHTgFP1S1L8iD0Abct1cFWkuPIlsow8uBxbn4z4iN58KrsQlpA==}
|
||||
|
||||
'@kevisual/load@0.0.6':
|
||||
resolution: {integrity: sha512-+3YTFehRcZ1haGel5DKYMUwmi5i6f2psyaPZlfkKU/cOXgkpwoG9/BEqPCnPjicKqqnksEpixVRkyHJ+5bjLVA==}
|
||||
|
||||
'@kevisual/query@0.0.9':
|
||||
resolution: {integrity: sha512-b2rNhORKtyAY1Zo36Qum3JOuxKU76mYQJdWOxxX5+1jJSqv11Pa9RSu3FYWiaSP0+9djrjLg/nECr9sMkJxt8Q==}
|
||||
'@kevisual/query@0.0.12':
|
||||
resolution: {integrity: sha512-/1lZJhNCdcNG4a2Nncl55XC/nha5+GZiJPQdP77lufv2dnZfcssA7NHSZ2Ubh0Pm0HWV22IiGfQMiaYl2pkK1Q==}
|
||||
|
||||
'@kevisual/query@0.0.13':
|
||||
resolution: {integrity: sha512-gSEIDiCvwSaLLAFZv4vam4wSrMsaCuQ3VGjE3kwRwZ8urlVH1TOA+NUO908A22p9m1Iij7Y1Q/JlfSJi2QzuKQ==}
|
||||
|
||||
'@kevisual/router@0.0.9':
|
||||
resolution: {integrity: sha512-qPyC2GVJ7iOIdJCCKNDsWMAKOQeSJW9HBpL5ZWKHTbi+t4jJBGTzIlXmjKeMHRd0lr/Qq1imQvlkSh4hlrbodA==}
|
||||
@ -627,8 +670,8 @@ packages:
|
||||
'@types/node@18.19.80':
|
||||
resolution: {integrity: sha512-kEWeMwMeIvxYkeg1gTc01awpwLbfMRZXdIhwRcakd/KlK53jmRC26LqcbIt7fnAQTu5GzlnWmzA3H6+l1u6xxQ==}
|
||||
|
||||
'@types/node@22.13.10':
|
||||
resolution: {integrity: sha512-I6LPUvlRH+O6VRUqYOcMudhaIdUVWfsjnZavnsraHvpBwaEyMN29ry+0UVJhImYL16xsscu0aske3yA+uPOWfw==}
|
||||
'@types/node@22.13.11':
|
||||
resolution: {integrity: sha512-iEUCUJoU0i3VnrCmgoWCXttklWcvoCIx4jzcP22fioIVSdTmjgoEvmAO/QPw6TcS9k5FrNgn4w7q5lGOd1CT5g==}
|
||||
|
||||
'@types/resolve@1.20.2':
|
||||
resolution: {integrity: sha512-60BCwRFOZCQhDncwQdxxeOEEkbc5dIMccYLwbxsS4TUNeVECQ/pBJ0j09mrHOl/JJvpRPGwO9SvE4nR2Nb/a4Q==}
|
||||
@ -675,6 +718,9 @@ packages:
|
||||
resolution: {integrity: sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==}
|
||||
engines: {node: '>=12'}
|
||||
|
||||
any-promise@1.3.0:
|
||||
resolution: {integrity: sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==}
|
||||
|
||||
aproba@2.0.0:
|
||||
resolution: {integrity: sha512-lYe4Gx7QT+MKGbDsA+Z+he/Wtef0BiwDOlK/XkBrdfsh9J/jPPXbX0tE9x9cl27Tmu5gg3QUbUrQYa/y+KOHPQ==}
|
||||
|
||||
@ -714,6 +760,16 @@ packages:
|
||||
buffer@5.7.1:
|
||||
resolution: {integrity: sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==}
|
||||
|
||||
bundle-require@5.1.0:
|
||||
resolution: {integrity: sha512-3WrrOuZiyaaZPWiEt4G3+IffISVC9HYlWueJEBWED4ZH4aIAC2PnkdnuRrR94M+w6yGWn4AglWtJtBI8YqvgoA==}
|
||||
engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0}
|
||||
peerDependencies:
|
||||
esbuild: '>=0.18'
|
||||
|
||||
cac@6.7.14:
|
||||
resolution: {integrity: sha512-b6Ilus+c3RrdDk+JhLKUAQfzzgLEPy6wcXqS7f/xe1EETvsDP6GORG7SFuOs6cID5YkqchW/LXZbX5bc8j7ZcQ==}
|
||||
engines: {node: '>=8'}
|
||||
|
||||
cacache@15.3.0:
|
||||
resolution: {integrity: sha512-VVdYzXEn+cnbXpFgWs5hTT7OScegHVmLhJIR8Ufqk3iFD6A6j5iSX1KuBTfNEv4tdJWE2PzA6IVFtcLC7fN9wQ==}
|
||||
engines: {node: '>= 10'}
|
||||
@ -729,6 +785,10 @@ packages:
|
||||
chardet@0.7.0:
|
||||
resolution: {integrity: sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==}
|
||||
|
||||
chokidar@4.0.3:
|
||||
resolution: {integrity: sha512-Qgzu8kfBvo+cA4962jnP1KkS6Dop5NS6g7R5LFYJr4b8Ub94PPQXUksCw9PvXoeXPRRddRNC5C1JQUR2SMGtnA==}
|
||||
engines: {node: '>= 14.16.0'}
|
||||
|
||||
chownr@1.1.4:
|
||||
resolution: {integrity: sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==}
|
||||
|
||||
@ -767,12 +827,20 @@ packages:
|
||||
resolution: {integrity: sha512-/rFeCpNJQbhSZjGVwO9RFV3xPqbnERS8MmIQzCtD/zl6gpJuV/bMLuN92oG3F7d8oDEHHRrujSXNUr8fpjntKw==}
|
||||
engines: {node: '>=18'}
|
||||
|
||||
commander@4.1.1:
|
||||
resolution: {integrity: sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==}
|
||||
engines: {node: '>= 6'}
|
||||
|
||||
commondir@1.0.1:
|
||||
resolution: {integrity: sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg==}
|
||||
|
||||
concat-map@0.0.1:
|
||||
resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==}
|
||||
|
||||
consola@3.4.2:
|
||||
resolution: {integrity: sha512-5IKcdX0nnYavi6G7TtOhwkYzyjfJlatbjMjuLSfE2kYT5pMDOilZ4OvMhi637CcDICTmz3wARPoyhqyX1Y+XvA==}
|
||||
engines: {node: ^14.18.0 || >=16.10.0}
|
||||
|
||||
console-control-strings@1.1.0:
|
||||
resolution: {integrity: sha512-ty/fTekppD2fIwRvnZAVdeOiGd1c7YXEixbgJTNzqcxJWKQnjJ/V1bNEEE6hygpM3WjwHFUVK6HTjWSzV4a8sQ==}
|
||||
|
||||
@ -815,6 +883,10 @@ packages:
|
||||
resolution: {integrity: sha512-bwy0MGW55bG41VqxxypOsdSdGqLwXPI/focwgTYCFMbdUiBAxLg9CFzG08sz2aqzknwiX7Hkl0bQENjg8iLByw==}
|
||||
engines: {node: '>=8'}
|
||||
|
||||
dotenv@16.4.7:
|
||||
resolution: {integrity: sha512-47qPchRCykZC03FhkYAhrvwU4xDBFIj1QPqaarj6mdM/hgUzfPHcpkHJOn3mJAufFeeAxAzeGsr5X0M4k6fLZQ==}
|
||||
engines: {node: '>=12'}
|
||||
|
||||
dottie@2.0.6:
|
||||
resolution: {integrity: sha512-iGCHkfUc5kFekGiqhe8B/mdaurD+lakO9txNnTvKtA6PISrw86LgqHvRzWYPyoE2Ph5aMIrCw9/uko6XHTKCwA==}
|
||||
|
||||
@ -904,6 +976,14 @@ packages:
|
||||
picomatch:
|
||||
optional: true
|
||||
|
||||
fdir@6.4.3:
|
||||
resolution: {integrity: sha512-PMXmW2y1hDDfTSRc9gaXIuCCRpuoz3Kaz8cUelp3smouvfT632ozg2vrT6lJsHKKOF59YLbOGfAWGUcKEfRMQw==}
|
||||
peerDependencies:
|
||||
picomatch: ^4
|
||||
peerDependenciesMeta:
|
||||
picomatch:
|
||||
optional: true
|
||||
|
||||
file-uri-to-path@1.0.0:
|
||||
resolution: {integrity: sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==}
|
||||
|
||||
@ -1028,6 +1108,9 @@ packages:
|
||||
resolution: {integrity: sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==}
|
||||
engines: {node: '>=0.10.0'}
|
||||
|
||||
idb-keyval@6.2.1:
|
||||
resolution: {integrity: sha512-8Sb3veuYCyrZL+VBt9LJfZjLUPWVvqn8tG28VqYNFCo43KHcKuq+b4EiXGeuaLAQWL2YmyDgMp2aSpH9JHsEQg==}
|
||||
|
||||
ieee754@1.2.1:
|
||||
resolution: {integrity: sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==}
|
||||
|
||||
@ -1112,6 +1195,10 @@ packages:
|
||||
resolution: {integrity: sha512-bZsjR/iRjl1Nk1UkjGpAzLNfQtzuijhn2g+pbZb98HQ1Gk8vM9hfbxeMBP+M2/UUdwj0RqGG3mlvk2MsAqwvEw==}
|
||||
engines: {node: 20 || >=22}
|
||||
|
||||
joycon@3.1.1:
|
||||
resolution: {integrity: sha512-34wB/Y7MW7bzjKRjUKTa46I2Z7eV62Rkhva+KkopW7Qvv/OSWBqvkSY7vusOPrNuZcUG3tApvdVgNB8POj3SPw==}
|
||||
engines: {node: '>=10'}
|
||||
|
||||
js-tokens@4.0.0:
|
||||
resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==}
|
||||
|
||||
@ -1128,6 +1215,17 @@ packages:
|
||||
jws@3.2.2:
|
||||
resolution: {integrity: sha512-YHlZCB6lMTllWDtSPHz/ZXTsi8S00usEV6v1tjq8tOUZzw7DpSDWVXjXDre6ed1w/pd495ODpHZYSdkRTsa0HA==}
|
||||
|
||||
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==}
|
||||
|
||||
load-tsconfig@0.2.5:
|
||||
resolution: {integrity: sha512-IXO6OCs9yg8tMKzfPZ1YmheJbZCiEsnBdcB03l0OcfK9prKnJb96siuHCr5Fl37/yo9DnKU+TLpxzTUspw9shg==}
|
||||
engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0}
|
||||
|
||||
lodash.includes@4.3.0:
|
||||
resolution: {integrity: sha512-W3Bx6mdkRTGtlJISOvVD/lbqjTlPPUDTMnlXZFnVwi9NKJ6tiAk6LVdlhZMm17VZisqhKcgzpO5Wz91PCt5b0w==}
|
||||
|
||||
@ -1149,6 +1247,9 @@ packages:
|
||||
lodash.once@4.1.1:
|
||||
resolution: {integrity: sha512-Sb487aTOCr9drQVL8pIxOzVhafOjZN9UU54hiN8PU3uAiSV7lx1yYNpbNmex2PK6dSJoNTSJUUswT651yww3Mg==}
|
||||
|
||||
lodash.sortby@4.7.0:
|
||||
resolution: {integrity: sha512-HDWXG8isMntAyRF5vZ7xKuEvOhT4AhlRt/3czTSjvGUxjYCBVRQY48ViDHyfYz9VIoBkW4TMGQNapx+l3RUwdA==}
|
||||
|
||||
lodash@4.17.21:
|
||||
resolution: {integrity: sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==}
|
||||
|
||||
@ -1277,6 +1378,9 @@ packages:
|
||||
resolution: {integrity: sha512-WWdIxpyjEn+FhQJQQv9aQAYlHoNVdzIzUySNV1gHUPDSdZJ3yZn7pAAbQcV7B56Mvu881q9FZV+0Vx2xC44VWA==}
|
||||
engines: {node: ^18.17.0 || >=20.5.0}
|
||||
|
||||
mz@2.7.0:
|
||||
resolution: {integrity: sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==}
|
||||
|
||||
nanoid@3.3.9:
|
||||
resolution: {integrity: sha512-SppoicMGpZvbF1l3z4x7No3OlIjP7QJvC9XR7AhZr1kL133KHnKPztkKDc+Ir4aJ/1VhTySrtKhrsycmrMQfvg==}
|
||||
engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1}
|
||||
@ -1328,6 +1432,10 @@ packages:
|
||||
engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0}
|
||||
deprecated: This package is no longer supported.
|
||||
|
||||
object-assign@4.1.1:
|
||||
resolution: {integrity: sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==}
|
||||
engines: {node: '>=0.10.0'}
|
||||
|
||||
once@1.4.0:
|
||||
resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==}
|
||||
|
||||
@ -1394,6 +1502,28 @@ packages:
|
||||
resolution: {integrity: sha512-M7BAV6Rlcy5u+m6oPhAPFgJTzAioX/6B0DxyvDlo9l8+T3nLKbrczg2WLUyzd45L8RqfUMyGPzekbMvX2Ldkwg==}
|
||||
engines: {node: '>=12'}
|
||||
|
||||
pirates@4.0.6:
|
||||
resolution: {integrity: sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg==}
|
||||
engines: {node: '>= 6'}
|
||||
|
||||
postcss-load-config@6.0.1:
|
||||
resolution: {integrity: sha512-oPtTM4oerL+UXmx+93ytZVN82RrlY/wPUV8IeDxFrzIjXOLF1pN+EmKPLbubvKHT2HC20xXsCAH2Z+CKV6Oz/g==}
|
||||
engines: {node: '>= 18'}
|
||||
peerDependencies:
|
||||
jiti: '>=1.21.0'
|
||||
postcss: '>=8.0.9'
|
||||
tsx: ^4.8.1
|
||||
yaml: ^2.4.2
|
||||
peerDependenciesMeta:
|
||||
jiti:
|
||||
optional: true
|
||||
postcss:
|
||||
optional: true
|
||||
tsx:
|
||||
optional: true
|
||||
yaml:
|
||||
optional: true
|
||||
|
||||
postcss@8.5.3:
|
||||
resolution: {integrity: sha512-dle9A3yYxlBSrt8Fu+IpjGT8SY8hN0mlaA6GY8t0P5PjIOZemULz/E2Bnm/2dcUOena75OTNkHI76uZBNUUq3A==}
|
||||
engines: {node: ^10 || ^12 || >=14}
|
||||
@ -1418,6 +1548,10 @@ packages:
|
||||
pump@3.0.2:
|
||||
resolution: {integrity: sha512-tUPXtzlGM8FE3P0ZL6DVs/3P58k9nk8/jZeQCurTJylQA8qFYzHFfhBJkuqyE0FifOsQ0uKWekiZ5g8wtr28cw==}
|
||||
|
||||
punycode@2.3.1:
|
||||
resolution: {integrity: sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==}
|
||||
engines: {node: '>=6'}
|
||||
|
||||
queue-microtask@1.2.3:
|
||||
resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==}
|
||||
|
||||
@ -1429,6 +1563,14 @@ packages:
|
||||
resolution: {integrity: sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==}
|
||||
engines: {node: '>= 6'}
|
||||
|
||||
readdirp@4.1.2:
|
||||
resolution: {integrity: sha512-GDhwkLfywWL2s6vEjyhri+eXmfH6j1L7JE27WhqLeYzoh/A3DBaYGEj2H/HFZCn/kMfim73FXxEJTw06WtxQwg==}
|
||||
engines: {node: '>= 14.18.0'}
|
||||
|
||||
resolve-from@5.0.0:
|
||||
resolution: {integrity: sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==}
|
||||
engines: {node: '>=8'}
|
||||
|
||||
resolve-pkg-maps@1.0.0:
|
||||
resolution: {integrity: sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==}
|
||||
|
||||
@ -1461,8 +1603,8 @@ packages:
|
||||
engines: {node: 20 || >=22}
|
||||
hasBin: true
|
||||
|
||||
rollup-plugin-dts@6.2.0:
|
||||
resolution: {integrity: sha512-iciY+z46mUbN5nCxtJqVynwgrZZljM8of6k8Rg5rVAmu4VHDxexFPgoCa2wrJG5mMsHSGrJmjQPCM4vD0Oe3Lg==}
|
||||
rollup-plugin-dts@6.2.1:
|
||||
resolution: {integrity: sha512-sR3CxYUl7i2CHa0O7bA45mCrgADyAQ0tVtGSqi3yvH28M+eg1+g5d7kQ9hLvEz5dorK3XVsH5L2jwHLQf72DzA==}
|
||||
engines: {node: '>=16'}
|
||||
peerDependencies:
|
||||
rollup: ^3.29.4 || ^4
|
||||
@ -1582,6 +1724,10 @@ packages:
|
||||
resolution: {integrity: sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==}
|
||||
engines: {node: '>=0.10.0'}
|
||||
|
||||
source-map@0.8.0-beta.0:
|
||||
resolution: {integrity: sha512-2ymg6oRBpebeZi9UUNsgQ89bhx01TcTkmNTGnNO88imTmbSgy4nfujrgVEFKWpMTEGA11EDkTt7mqObTPdigIA==}
|
||||
engines: {node: '>= 8'}
|
||||
|
||||
sprintf-js@1.1.3:
|
||||
resolution: {integrity: sha512-Oo+0REFV59/rz3gfJNKQiBlwfHaSESl1pcGyABQsnnIfWOFt6JNj5gCog2U6MLZ//IGYD+nA8nI+mTShREReaA==}
|
||||
|
||||
@ -1615,6 +1761,11 @@ packages:
|
||||
resolution: {integrity: sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ==}
|
||||
engines: {node: '>=0.10.0'}
|
||||
|
||||
sucrase@3.35.0:
|
||||
resolution: {integrity: sha512-8EbVDiu9iN/nESwxeSxDKe0dunta1GOlHufmSSXxMD2z2/tMZpDMpvXQGsc+ajGo8y2uYUmixaSRUc/QPoQ0GA==}
|
||||
engines: {node: '>=16 || 14 >=14.17'}
|
||||
hasBin: true
|
||||
|
||||
supports-preserve-symlinks-flag@1.0.0:
|
||||
resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==}
|
||||
engines: {node: '>= 0.4'}
|
||||
@ -1634,6 +1785,20 @@ packages:
|
||||
resolution: {integrity: sha512-5S7Va8hKfV7W5U6g3aYxXmlPoZVAwUMy9AOKyF2fVuZa2UD3qZjg578OrLRt8PcNN1PleVaL/5/yYATNL0ICUw==}
|
||||
engines: {node: '>=18'}
|
||||
|
||||
thenify-all@1.6.0:
|
||||
resolution: {integrity: sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA==}
|
||||
engines: {node: '>=0.8'}
|
||||
|
||||
thenify@3.3.1:
|
||||
resolution: {integrity: sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==}
|
||||
|
||||
tinyexec@0.3.2:
|
||||
resolution: {integrity: sha512-KQQR9yN7R5+OSwaK0XQoj22pwHoTlgYqmUscPYoknOoWCWfj/5/ABTMRi69FrKU5ffPVh5QcFikpWJI/P1ocHA==}
|
||||
|
||||
tinyglobby@0.2.12:
|
||||
resolution: {integrity: sha512-qkf4trmKSIiMTs/E63cxH+ojC2unam7rJ0WrauAzpT3ECNTxGRMlaXxVbfxMUC/w0LaYk6jQ4y/nGR9uBO3tww==}
|
||||
engines: {node: '>=12.0.0'}
|
||||
|
||||
tmp@0.0.33:
|
||||
resolution: {integrity: sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==}
|
||||
engines: {node: '>=0.6.0'}
|
||||
@ -1648,9 +1813,38 @@ packages:
|
||||
tr46@0.0.3:
|
||||
resolution: {integrity: sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==}
|
||||
|
||||
tr46@1.0.1:
|
||||
resolution: {integrity: sha512-dTpowEjclQ7Kgx5SdBkqRzVhERQXov8/l9Ft9dVM9fmg0W0KQSVaXX9T4i6twCPNtYiZM53lpSSUAwJbFPOHxA==}
|
||||
|
||||
tree-kill@1.2.2:
|
||||
resolution: {integrity: sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A==}
|
||||
hasBin: true
|
||||
|
||||
ts-interface-checker@0.1.13:
|
||||
resolution: {integrity: sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==}
|
||||
|
||||
tslib@2.8.1:
|
||||
resolution: {integrity: sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==}
|
||||
|
||||
tsup@8.4.0:
|
||||
resolution: {integrity: sha512-b+eZbPCjz10fRryaAA7C8xlIHnf8VnsaRqydheLIqwG/Mcpfk8Z5zp3HayX7GaTygkigHl5cBUs+IhcySiIexQ==}
|
||||
engines: {node: '>=18'}
|
||||
hasBin: true
|
||||
peerDependencies:
|
||||
'@microsoft/api-extractor': ^7.36.0
|
||||
'@swc/core': ^1
|
||||
postcss: ^8.4.12
|
||||
typescript: '>=4.5.0'
|
||||
peerDependenciesMeta:
|
||||
'@microsoft/api-extractor':
|
||||
optional: true
|
||||
'@swc/core':
|
||||
optional: true
|
||||
postcss:
|
||||
optional: true
|
||||
typescript:
|
||||
optional: true
|
||||
|
||||
tunnel-agent@0.6.0:
|
||||
resolution: {integrity: sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w==}
|
||||
|
||||
@ -1740,9 +1934,15 @@ packages:
|
||||
webidl-conversions@3.0.1:
|
||||
resolution: {integrity: sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==}
|
||||
|
||||
webidl-conversions@4.0.2:
|
||||
resolution: {integrity: sha512-YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg==}
|
||||
|
||||
whatwg-url@5.0.0:
|
||||
resolution: {integrity: sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==}
|
||||
|
||||
whatwg-url@7.1.0:
|
||||
resolution: {integrity: sha512-WUu7Rg1DroM7oQvGWfOiAK21n74Gg+T4elXEQYkOhtyLeWiJFoOGLXPKI/9gzIie9CtwVLm8wtw6YJdKyxSjeg==}
|
||||
|
||||
which@2.0.2:
|
||||
resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==}
|
||||
engines: {node: '>= 8'}
|
||||
@ -1882,27 +2082,27 @@ snapshots:
|
||||
'@gar/promisify@1.1.3':
|
||||
optional: true
|
||||
|
||||
'@inquirer/checkbox@4.1.4(@types/node@22.13.10)':
|
||||
'@inquirer/checkbox@4.1.4(@types/node@22.13.11)':
|
||||
dependencies:
|
||||
'@inquirer/core': 10.1.9(@types/node@22.13.10)
|
||||
'@inquirer/core': 10.1.9(@types/node@22.13.11)
|
||||
'@inquirer/figures': 1.0.11
|
||||
'@inquirer/type': 3.0.5(@types/node@22.13.10)
|
||||
'@inquirer/type': 3.0.5(@types/node@22.13.11)
|
||||
ansi-escapes: 4.3.2
|
||||
yoctocolors-cjs: 2.1.2
|
||||
optionalDependencies:
|
||||
'@types/node': 22.13.10
|
||||
'@types/node': 22.13.11
|
||||
|
||||
'@inquirer/confirm@5.1.8(@types/node@22.13.10)':
|
||||
'@inquirer/confirm@5.1.8(@types/node@22.13.11)':
|
||||
dependencies:
|
||||
'@inquirer/core': 10.1.9(@types/node@22.13.10)
|
||||
'@inquirer/type': 3.0.5(@types/node@22.13.10)
|
||||
'@inquirer/core': 10.1.9(@types/node@22.13.11)
|
||||
'@inquirer/type': 3.0.5(@types/node@22.13.11)
|
||||
optionalDependencies:
|
||||
'@types/node': 22.13.10
|
||||
'@types/node': 22.13.11
|
||||
|
||||
'@inquirer/core@10.1.9(@types/node@22.13.10)':
|
||||
'@inquirer/core@10.1.9(@types/node@22.13.11)':
|
||||
dependencies:
|
||||
'@inquirer/figures': 1.0.11
|
||||
'@inquirer/type': 3.0.5(@types/node@22.13.10)
|
||||
'@inquirer/type': 3.0.5(@types/node@22.13.11)
|
||||
ansi-escapes: 4.3.2
|
||||
cli-width: 4.1.0
|
||||
mute-stream: 2.0.0
|
||||
@ -1910,93 +2110,93 @@ snapshots:
|
||||
wrap-ansi: 6.2.0
|
||||
yoctocolors-cjs: 2.1.2
|
||||
optionalDependencies:
|
||||
'@types/node': 22.13.10
|
||||
'@types/node': 22.13.11
|
||||
|
||||
'@inquirer/editor@4.2.9(@types/node@22.13.10)':
|
||||
'@inquirer/editor@4.2.9(@types/node@22.13.11)':
|
||||
dependencies:
|
||||
'@inquirer/core': 10.1.9(@types/node@22.13.10)
|
||||
'@inquirer/type': 3.0.5(@types/node@22.13.10)
|
||||
'@inquirer/core': 10.1.9(@types/node@22.13.11)
|
||||
'@inquirer/type': 3.0.5(@types/node@22.13.11)
|
||||
external-editor: 3.1.0
|
||||
optionalDependencies:
|
||||
'@types/node': 22.13.10
|
||||
'@types/node': 22.13.11
|
||||
|
||||
'@inquirer/expand@4.0.11(@types/node@22.13.10)':
|
||||
'@inquirer/expand@4.0.11(@types/node@22.13.11)':
|
||||
dependencies:
|
||||
'@inquirer/core': 10.1.9(@types/node@22.13.10)
|
||||
'@inquirer/type': 3.0.5(@types/node@22.13.10)
|
||||
'@inquirer/core': 10.1.9(@types/node@22.13.11)
|
||||
'@inquirer/type': 3.0.5(@types/node@22.13.11)
|
||||
yoctocolors-cjs: 2.1.2
|
||||
optionalDependencies:
|
||||
'@types/node': 22.13.10
|
||||
'@types/node': 22.13.11
|
||||
|
||||
'@inquirer/figures@1.0.11': {}
|
||||
|
||||
'@inquirer/input@4.1.8(@types/node@22.13.10)':
|
||||
'@inquirer/input@4.1.8(@types/node@22.13.11)':
|
||||
dependencies:
|
||||
'@inquirer/core': 10.1.9(@types/node@22.13.10)
|
||||
'@inquirer/type': 3.0.5(@types/node@22.13.10)
|
||||
'@inquirer/core': 10.1.9(@types/node@22.13.11)
|
||||
'@inquirer/type': 3.0.5(@types/node@22.13.11)
|
||||
optionalDependencies:
|
||||
'@types/node': 22.13.10
|
||||
'@types/node': 22.13.11
|
||||
|
||||
'@inquirer/number@3.0.11(@types/node@22.13.10)':
|
||||
'@inquirer/number@3.0.11(@types/node@22.13.11)':
|
||||
dependencies:
|
||||
'@inquirer/core': 10.1.9(@types/node@22.13.10)
|
||||
'@inquirer/type': 3.0.5(@types/node@22.13.10)
|
||||
'@inquirer/core': 10.1.9(@types/node@22.13.11)
|
||||
'@inquirer/type': 3.0.5(@types/node@22.13.11)
|
||||
optionalDependencies:
|
||||
'@types/node': 22.13.10
|
||||
'@types/node': 22.13.11
|
||||
|
||||
'@inquirer/password@4.0.11(@types/node@22.13.10)':
|
||||
'@inquirer/password@4.0.11(@types/node@22.13.11)':
|
||||
dependencies:
|
||||
'@inquirer/core': 10.1.9(@types/node@22.13.10)
|
||||
'@inquirer/type': 3.0.5(@types/node@22.13.10)
|
||||
'@inquirer/core': 10.1.9(@types/node@22.13.11)
|
||||
'@inquirer/type': 3.0.5(@types/node@22.13.11)
|
||||
ansi-escapes: 4.3.2
|
||||
optionalDependencies:
|
||||
'@types/node': 22.13.10
|
||||
'@types/node': 22.13.11
|
||||
|
||||
'@inquirer/prompts@7.4.0(@types/node@22.13.10)':
|
||||
'@inquirer/prompts@7.4.0(@types/node@22.13.11)':
|
||||
dependencies:
|
||||
'@inquirer/checkbox': 4.1.4(@types/node@22.13.10)
|
||||
'@inquirer/confirm': 5.1.8(@types/node@22.13.10)
|
||||
'@inquirer/editor': 4.2.9(@types/node@22.13.10)
|
||||
'@inquirer/expand': 4.0.11(@types/node@22.13.10)
|
||||
'@inquirer/input': 4.1.8(@types/node@22.13.10)
|
||||
'@inquirer/number': 3.0.11(@types/node@22.13.10)
|
||||
'@inquirer/password': 4.0.11(@types/node@22.13.10)
|
||||
'@inquirer/rawlist': 4.0.11(@types/node@22.13.10)
|
||||
'@inquirer/search': 3.0.11(@types/node@22.13.10)
|
||||
'@inquirer/select': 4.1.0(@types/node@22.13.10)
|
||||
'@inquirer/checkbox': 4.1.4(@types/node@22.13.11)
|
||||
'@inquirer/confirm': 5.1.8(@types/node@22.13.11)
|
||||
'@inquirer/editor': 4.2.9(@types/node@22.13.11)
|
||||
'@inquirer/expand': 4.0.11(@types/node@22.13.11)
|
||||
'@inquirer/input': 4.1.8(@types/node@22.13.11)
|
||||
'@inquirer/number': 3.0.11(@types/node@22.13.11)
|
||||
'@inquirer/password': 4.0.11(@types/node@22.13.11)
|
||||
'@inquirer/rawlist': 4.0.11(@types/node@22.13.11)
|
||||
'@inquirer/search': 3.0.11(@types/node@22.13.11)
|
||||
'@inquirer/select': 4.1.0(@types/node@22.13.11)
|
||||
optionalDependencies:
|
||||
'@types/node': 22.13.10
|
||||
'@types/node': 22.13.11
|
||||
|
||||
'@inquirer/rawlist@4.0.11(@types/node@22.13.10)':
|
||||
'@inquirer/rawlist@4.0.11(@types/node@22.13.11)':
|
||||
dependencies:
|
||||
'@inquirer/core': 10.1.9(@types/node@22.13.10)
|
||||
'@inquirer/type': 3.0.5(@types/node@22.13.10)
|
||||
'@inquirer/core': 10.1.9(@types/node@22.13.11)
|
||||
'@inquirer/type': 3.0.5(@types/node@22.13.11)
|
||||
yoctocolors-cjs: 2.1.2
|
||||
optionalDependencies:
|
||||
'@types/node': 22.13.10
|
||||
'@types/node': 22.13.11
|
||||
|
||||
'@inquirer/search@3.0.11(@types/node@22.13.10)':
|
||||
'@inquirer/search@3.0.11(@types/node@22.13.11)':
|
||||
dependencies:
|
||||
'@inquirer/core': 10.1.9(@types/node@22.13.10)
|
||||
'@inquirer/core': 10.1.9(@types/node@22.13.11)
|
||||
'@inquirer/figures': 1.0.11
|
||||
'@inquirer/type': 3.0.5(@types/node@22.13.10)
|
||||
'@inquirer/type': 3.0.5(@types/node@22.13.11)
|
||||
yoctocolors-cjs: 2.1.2
|
||||
optionalDependencies:
|
||||
'@types/node': 22.13.10
|
||||
'@types/node': 22.13.11
|
||||
|
||||
'@inquirer/select@4.1.0(@types/node@22.13.10)':
|
||||
'@inquirer/select@4.1.0(@types/node@22.13.11)':
|
||||
dependencies:
|
||||
'@inquirer/core': 10.1.9(@types/node@22.13.10)
|
||||
'@inquirer/core': 10.1.9(@types/node@22.13.11)
|
||||
'@inquirer/figures': 1.0.11
|
||||
'@inquirer/type': 3.0.5(@types/node@22.13.10)
|
||||
'@inquirer/type': 3.0.5(@types/node@22.13.11)
|
||||
ansi-escapes: 4.3.2
|
||||
yoctocolors-cjs: 2.1.2
|
||||
optionalDependencies:
|
||||
'@types/node': 22.13.10
|
||||
'@types/node': 22.13.11
|
||||
|
||||
'@inquirer/type@3.0.5(@types/node@22.13.10)':
|
||||
'@inquirer/type@3.0.5(@types/node@22.13.11)':
|
||||
optionalDependencies:
|
||||
'@types/node': 22.13.10
|
||||
'@types/node': 22.13.11
|
||||
|
||||
'@isaacs/cliui@8.0.2':
|
||||
dependencies:
|
||||
@ -2011,13 +2211,48 @@ snapshots:
|
||||
dependencies:
|
||||
minipass: 7.1.2
|
||||
|
||||
'@jridgewell/gen-mapping@0.3.8':
|
||||
dependencies:
|
||||
'@jridgewell/set-array': 1.2.1
|
||||
'@jridgewell/sourcemap-codec': 1.5.0
|
||||
'@jridgewell/trace-mapping': 0.3.25
|
||||
|
||||
'@jridgewell/resolve-uri@3.1.2': {}
|
||||
|
||||
'@jridgewell/set-array@1.2.1': {}
|
||||
|
||||
'@jridgewell/sourcemap-codec@1.5.0': {}
|
||||
|
||||
'@jridgewell/trace-mapping@0.3.25':
|
||||
dependencies:
|
||||
'@jridgewell/resolve-uri': 3.1.2
|
||||
'@jridgewell/sourcemap-codec': 1.5.0
|
||||
|
||||
'@kevisual/cache@0.0.1(rollup@4.36.0)(tslib@2.8.1)(typescript@5.8.2)':
|
||||
dependencies:
|
||||
'@rollup/plugin-commonjs': 28.0.3(rollup@4.36.0)
|
||||
'@rollup/plugin-node-resolve': 16.0.1(rollup@4.36.0)
|
||||
'@rollup/plugin-typescript': 12.1.2(rollup@4.36.0)(tslib@2.8.1)(typescript@5.8.2)
|
||||
idb-keyval: 6.2.1
|
||||
rollup-plugin-dts: 6.2.1(rollup@4.36.0)(typescript@5.8.2)
|
||||
transitivePeerDependencies:
|
||||
- rollup
|
||||
- tslib
|
||||
- typescript
|
||||
|
||||
'@kevisual/load@0.0.6':
|
||||
dependencies:
|
||||
eventemitter3: 5.0.1
|
||||
|
||||
'@kevisual/query@0.0.9(encoding@0.1.13)(ws@8.18.0)':
|
||||
'@kevisual/query@0.0.12(encoding@0.1.13)(ws@8.18.0)':
|
||||
dependencies:
|
||||
openai: 4.88.0(encoding@0.1.13)(ws@8.18.0)
|
||||
transitivePeerDependencies:
|
||||
- encoding
|
||||
- ws
|
||||
- zod
|
||||
|
||||
'@kevisual/query@0.0.13(encoding@0.1.13)(ws@8.18.0)':
|
||||
dependencies:
|
||||
openai: 4.88.0(encoding@0.1.13)(ws@8.18.0)
|
||||
transitivePeerDependencies:
|
||||
@ -2188,24 +2423,24 @@ snapshots:
|
||||
'@types/jsonwebtoken@9.0.9':
|
||||
dependencies:
|
||||
'@types/ms': 0.7.34
|
||||
'@types/node': 22.13.10
|
||||
'@types/node': 22.13.11
|
||||
|
||||
'@types/ms@0.7.34': {}
|
||||
|
||||
'@types/node-fetch@2.6.12':
|
||||
dependencies:
|
||||
'@types/node': 22.13.10
|
||||
'@types/node': 22.13.11
|
||||
form-data: 4.0.2
|
||||
|
||||
'@types/node-forge@1.3.11':
|
||||
dependencies:
|
||||
'@types/node': 22.13.10
|
||||
'@types/node': 22.13.11
|
||||
|
||||
'@types/node@18.19.80':
|
||||
dependencies:
|
||||
undici-types: 5.26.5
|
||||
|
||||
'@types/node@22.13.10':
|
||||
'@types/node@22.13.11':
|
||||
dependencies:
|
||||
undici-types: 6.20.0
|
||||
|
||||
@ -2251,6 +2486,8 @@ snapshots:
|
||||
|
||||
ansi-styles@6.2.1: {}
|
||||
|
||||
any-promise@1.3.0: {}
|
||||
|
||||
aproba@2.0.0:
|
||||
optional: true
|
||||
|
||||
@ -2297,6 +2534,13 @@ snapshots:
|
||||
base64-js: 1.5.1
|
||||
ieee754: 1.2.1
|
||||
|
||||
bundle-require@5.1.0(esbuild@0.25.0):
|
||||
dependencies:
|
||||
esbuild: 0.25.0
|
||||
load-tsconfig: 0.2.5
|
||||
|
||||
cac@6.7.14: {}
|
||||
|
||||
cacache@15.3.0:
|
||||
dependencies:
|
||||
'@npmcli/fs': 1.1.1
|
||||
@ -2330,6 +2574,10 @@ snapshots:
|
||||
|
||||
chardet@0.7.0: {}
|
||||
|
||||
chokidar@4.0.3:
|
||||
dependencies:
|
||||
readdirp: 4.1.2
|
||||
|
||||
chownr@1.1.4: {}
|
||||
|
||||
chownr@2.0.0: {}
|
||||
@ -2356,11 +2604,15 @@ snapshots:
|
||||
|
||||
commander@13.1.0: {}
|
||||
|
||||
commander@4.1.1: {}
|
||||
|
||||
commondir@1.0.1: {}
|
||||
|
||||
concat-map@0.0.1:
|
||||
optional: true
|
||||
|
||||
consola@3.4.2: {}
|
||||
|
||||
console-control-strings@1.1.0:
|
||||
optional: true
|
||||
|
||||
@ -2391,6 +2643,8 @@ snapshots:
|
||||
|
||||
detect-libc@2.0.3: {}
|
||||
|
||||
dotenv@16.4.7: {}
|
||||
|
||||
dottie@2.0.6: {}
|
||||
|
||||
dunder-proto@1.0.1:
|
||||
@ -2499,6 +2753,10 @@ snapshots:
|
||||
optionalDependencies:
|
||||
picomatch: 4.0.2
|
||||
|
||||
fdir@6.4.3(picomatch@4.0.2):
|
||||
optionalDependencies:
|
||||
picomatch: 4.0.2
|
||||
|
||||
file-uri-to-path@1.0.0: {}
|
||||
|
||||
filesize@10.1.6: {}
|
||||
@ -2659,6 +2917,8 @@ snapshots:
|
||||
safer-buffer: 2.1.2
|
||||
optional: true
|
||||
|
||||
idb-keyval@6.2.1: {}
|
||||
|
||||
ieee754@1.2.1: {}
|
||||
|
||||
ignore@7.0.3: {}
|
||||
@ -2684,17 +2944,17 @@ snapshots:
|
||||
|
||||
ini@1.3.8: {}
|
||||
|
||||
inquirer@12.5.0(@types/node@22.13.10):
|
||||
inquirer@12.5.0(@types/node@22.13.11):
|
||||
dependencies:
|
||||
'@inquirer/core': 10.1.9(@types/node@22.13.10)
|
||||
'@inquirer/prompts': 7.4.0(@types/node@22.13.10)
|
||||
'@inquirer/type': 3.0.5(@types/node@22.13.10)
|
||||
'@inquirer/core': 10.1.9(@types/node@22.13.11)
|
||||
'@inquirer/prompts': 7.4.0(@types/node@22.13.11)
|
||||
'@inquirer/type': 3.0.5(@types/node@22.13.11)
|
||||
ansi-escapes: 4.3.2
|
||||
mute-stream: 2.0.0
|
||||
run-async: 3.0.0
|
||||
rxjs: 7.8.2
|
||||
optionalDependencies:
|
||||
'@types/node': 22.13.10
|
||||
'@types/node': 22.13.11
|
||||
|
||||
ip-address@9.0.5:
|
||||
dependencies:
|
||||
@ -2737,6 +2997,8 @@ snapshots:
|
||||
dependencies:
|
||||
'@isaacs/cliui': 8.0.2
|
||||
|
||||
joycon@3.1.1: {}
|
||||
|
||||
js-tokens@4.0.0:
|
||||
optional: true
|
||||
|
||||
@ -2767,6 +3029,12 @@ snapshots:
|
||||
jwa: 1.4.1
|
||||
safe-buffer: 5.2.1
|
||||
|
||||
lilconfig@3.1.3: {}
|
||||
|
||||
lines-and-columns@1.2.4: {}
|
||||
|
||||
load-tsconfig@0.2.5: {}
|
||||
|
||||
lodash.includes@4.3.0: {}
|
||||
|
||||
lodash.isboolean@3.0.3: {}
|
||||
@ -2781,6 +3049,8 @@ snapshots:
|
||||
|
||||
lodash.once@4.1.1: {}
|
||||
|
||||
lodash.sortby@4.7.0: {}
|
||||
|
||||
lodash@4.17.21: {}
|
||||
|
||||
lru-cache@10.4.3: {}
|
||||
@ -2918,6 +3188,12 @@ snapshots:
|
||||
|
||||
mute-stream@2.0.0: {}
|
||||
|
||||
mz@2.7.0:
|
||||
dependencies:
|
||||
any-promise: 1.3.0
|
||||
object-assign: 4.1.1
|
||||
thenify-all: 1.6.0
|
||||
|
||||
nanoid@3.3.9: {}
|
||||
|
||||
napi-build-utils@2.0.0: {}
|
||||
@ -2971,6 +3247,8 @@ snapshots:
|
||||
set-blocking: 2.0.0
|
||||
optional: true
|
||||
|
||||
object-assign@4.1.1: {}
|
||||
|
||||
once@1.4.0:
|
||||
dependencies:
|
||||
wrappy: 1.0.2
|
||||
@ -3029,6 +3307,14 @@ snapshots:
|
||||
|
||||
picomatch@4.0.2: {}
|
||||
|
||||
pirates@4.0.6: {}
|
||||
|
||||
postcss-load-config@6.0.1(postcss@8.5.3):
|
||||
dependencies:
|
||||
lilconfig: 3.1.3
|
||||
optionalDependencies:
|
||||
postcss: 8.5.3
|
||||
|
||||
postcss@8.5.3:
|
||||
dependencies:
|
||||
nanoid: 3.3.9
|
||||
@ -3064,6 +3350,8 @@ snapshots:
|
||||
end-of-stream: 1.4.4
|
||||
once: 1.4.0
|
||||
|
||||
punycode@2.3.1: {}
|
||||
|
||||
queue-microtask@1.2.3: {}
|
||||
|
||||
rc@1.2.8:
|
||||
@ -3079,6 +3367,10 @@ snapshots:
|
||||
string_decoder: 1.3.0
|
||||
util-deprecate: 1.0.2
|
||||
|
||||
readdirp@4.1.2: {}
|
||||
|
||||
resolve-from@5.0.0: {}
|
||||
|
||||
resolve-pkg-maps@1.0.0: {}
|
||||
|
||||
resolve@1.22.8:
|
||||
@ -3108,7 +3400,7 @@ snapshots:
|
||||
glob: 11.0.0
|
||||
package-json-from-dist: 1.0.1
|
||||
|
||||
rollup-plugin-dts@6.2.0(rollup@4.36.0)(typescript@5.8.2):
|
||||
rollup-plugin-dts@6.2.1(rollup@4.36.0)(typescript@5.8.2):
|
||||
dependencies:
|
||||
magic-string: 0.30.17
|
||||
rollup: 4.36.0
|
||||
@ -3241,6 +3533,10 @@ snapshots:
|
||||
|
||||
source-map-js@1.2.1: {}
|
||||
|
||||
source-map@0.8.0-beta.0:
|
||||
dependencies:
|
||||
whatwg-url: 7.1.0
|
||||
|
||||
sprintf-js@1.1.3:
|
||||
optional: true
|
||||
|
||||
@ -3287,6 +3583,16 @@ snapshots:
|
||||
|
||||
strip-json-comments@2.0.1: {}
|
||||
|
||||
sucrase@3.35.0:
|
||||
dependencies:
|
||||
'@jridgewell/gen-mapping': 0.3.8
|
||||
commander: 4.1.1
|
||||
glob: 10.4.5
|
||||
lines-and-columns: 1.2.4
|
||||
mz: 2.7.0
|
||||
pirates: 4.0.6
|
||||
ts-interface-checker: 0.1.13
|
||||
|
||||
supports-preserve-symlinks-flag@1.0.0: {}
|
||||
|
||||
tar-fs@2.1.2:
|
||||
@ -3322,6 +3628,21 @@ snapshots:
|
||||
mkdirp: 3.0.1
|
||||
yallist: 5.0.0
|
||||
|
||||
thenify-all@1.6.0:
|
||||
dependencies:
|
||||
thenify: 3.3.1
|
||||
|
||||
thenify@3.3.1:
|
||||
dependencies:
|
||||
any-promise: 1.3.0
|
||||
|
||||
tinyexec@0.3.2: {}
|
||||
|
||||
tinyglobby@0.2.12:
|
||||
dependencies:
|
||||
fdir: 6.4.3(picomatch@4.0.2)
|
||||
picomatch: 4.0.2
|
||||
|
||||
tmp@0.0.33:
|
||||
dependencies:
|
||||
os-tmpdir: 1.0.2
|
||||
@ -3334,8 +3655,43 @@ snapshots:
|
||||
|
||||
tr46@0.0.3: {}
|
||||
|
||||
tr46@1.0.1:
|
||||
dependencies:
|
||||
punycode: 2.3.1
|
||||
|
||||
tree-kill@1.2.2: {}
|
||||
|
||||
ts-interface-checker@0.1.13: {}
|
||||
|
||||
tslib@2.8.1: {}
|
||||
|
||||
tsup@8.4.0(postcss@8.5.3)(typescript@5.8.2):
|
||||
dependencies:
|
||||
bundle-require: 5.1.0(esbuild@0.25.0)
|
||||
cac: 6.7.14
|
||||
chokidar: 4.0.3
|
||||
consola: 3.4.2
|
||||
debug: 4.4.0
|
||||
esbuild: 0.25.0
|
||||
joycon: 3.1.1
|
||||
picocolors: 1.1.1
|
||||
postcss-load-config: 6.0.1(postcss@8.5.3)
|
||||
resolve-from: 5.0.0
|
||||
rollup: 4.36.0
|
||||
source-map: 0.8.0-beta.0
|
||||
sucrase: 3.35.0
|
||||
tinyexec: 0.3.2
|
||||
tinyglobby: 0.2.12
|
||||
tree-kill: 1.2.2
|
||||
optionalDependencies:
|
||||
postcss: 8.5.3
|
||||
typescript: 5.8.2
|
||||
transitivePeerDependencies:
|
||||
- jiti
|
||||
- supports-color
|
||||
- tsx
|
||||
- yaml
|
||||
|
||||
tunnel-agent@0.6.0:
|
||||
dependencies:
|
||||
safe-buffer: 5.2.1
|
||||
@ -3371,24 +3727,32 @@ snapshots:
|
||||
|
||||
validator@13.12.0: {}
|
||||
|
||||
vite@6.2.2(@types/node@22.13.10):
|
||||
vite@6.2.2(@types/node@22.13.11):
|
||||
dependencies:
|
||||
esbuild: 0.25.0
|
||||
postcss: 8.5.3
|
||||
rollup: 4.36.0
|
||||
optionalDependencies:
|
||||
'@types/node': 22.13.10
|
||||
'@types/node': 22.13.11
|
||||
fsevents: 2.3.3
|
||||
|
||||
web-streams-polyfill@4.0.0-beta.3: {}
|
||||
|
||||
webidl-conversions@3.0.1: {}
|
||||
|
||||
webidl-conversions@4.0.2: {}
|
||||
|
||||
whatwg-url@5.0.0:
|
||||
dependencies:
|
||||
tr46: 0.0.3
|
||||
webidl-conversions: 3.0.1
|
||||
|
||||
whatwg-url@7.1.0:
|
||||
dependencies:
|
||||
lodash.sortby: 4.7.0
|
||||
tr46: 1.0.1
|
||||
webidl-conversions: 4.0.2
|
||||
|
||||
which@2.0.2:
|
||||
dependencies:
|
||||
isexe: 2.0.0
|
||||
@ -3400,7 +3764,7 @@ snapshots:
|
||||
|
||||
wkx@0.5.0:
|
||||
dependencies:
|
||||
'@types/node': 22.13.10
|
||||
'@types/node': 22.13.11
|
||||
|
||||
wrap-ansi@6.2.0:
|
||||
dependencies:
|
||||
|
2
pnpm-workspace.yaml
Normal file
2
pnpm-workspace.yaml
Normal file
@ -0,0 +1,2 @@
|
||||
packages:
|
||||
- 'submodules/*'
|
@ -32,7 +32,7 @@ const downloadAppCommand = new Command('download')
|
||||
data.id = id;
|
||||
}
|
||||
const res = await queryApp(data);
|
||||
let registry = 'https://kevisual.xiongxiao.me';
|
||||
let registry = 'https://kevisual.cn';
|
||||
if (options?.registry) {
|
||||
registry = new URL(options.registry).origin;
|
||||
}
|
||||
|
@ -1,2 +1 @@
|
||||
import './micro-app/index.ts';
|
||||
import './front-app/index.ts';
|
||||
|
@ -1,122 +0,0 @@
|
||||
/**
|
||||
* 下载 app serve client的包的命令
|
||||
*/
|
||||
|
||||
import { chalk } from '@/module/chalk.ts';
|
||||
import { program, Command } from '../../../program.ts';
|
||||
import fs from 'fs';
|
||||
import { Readable } from 'stream';
|
||||
import * as tar from 'tar';
|
||||
import path from 'path';
|
||||
import { fileIsExist } from '@/uitls/file.ts';
|
||||
|
||||
// Utility function to convert a web ReadableStream to a Node.js Readable stream
|
||||
function nodeReadableStreamFromWeb(webStream: ReadableStream<Uint8Array>) {
|
||||
const reader = webStream.getReader();
|
||||
return new Readable({
|
||||
async read() {
|
||||
const { done, value } = await reader.read();
|
||||
if (done) {
|
||||
this.push(null);
|
||||
} else {
|
||||
this.push(Buffer.from(value));
|
||||
}
|
||||
},
|
||||
});
|
||||
}
|
||||
|
||||
export const appCommand = new Command('micro-app').description('micro-app 命令').action(() => {
|
||||
console.log('micro-app');
|
||||
});
|
||||
|
||||
program.addCommand(appCommand);
|
||||
|
||||
// https://kevisual.xiongxiao.me/api/micro-app/download/file?notNeedToken=y&title=mark-0.0.2.tgz
|
||||
const downloadAppCommand = new Command('download')
|
||||
.description('下载 app serve client的包. \nmicro-app download -i mark-0.0.2.tgz -o test/mark.tgz -x test2')
|
||||
.option('-i, --id <id>', '下载 app serve client的包, id 或者title, mark-0.0.2.tgz')
|
||||
.option('-o, --output <output>', '下载 app serve client的包, 输出路径')
|
||||
.option('-x, --extract <extract>', '下载 app serve client的包, 解压, 默认解压到当前目录')
|
||||
.option('-r, --registry <registry>', '下载 app serve client的包, 使用私有源')
|
||||
.action(async (options) => {
|
||||
const id = options.id || '';
|
||||
if (!id) {
|
||||
console.error(chalk.red('id is required'));
|
||||
return;
|
||||
}
|
||||
let title = '';
|
||||
if (id.includes('.tgz')) {
|
||||
title = id;
|
||||
}
|
||||
let registry = '';
|
||||
if (options?.registry) {
|
||||
registry = new URL(options.registry).origin;
|
||||
} else {
|
||||
registry = 'https://kevisual.xiongxiao.me';
|
||||
}
|
||||
let curlUrl = `${registry}/api/micro-app/download/${id}?notNeedToken=y`;
|
||||
if (title) {
|
||||
curlUrl = `${registry}/api/micro-app/download/file?notNeedToken=y&title=${title}`;
|
||||
}
|
||||
console.log(chalk.blue('下载地址:'), curlUrl);
|
||||
fetch(curlUrl)
|
||||
.then(async (res) => {
|
||||
const contentDisposition = res.headers.get('content-disposition');
|
||||
let filename = ''; // Default filename
|
||||
|
||||
if (contentDisposition) {
|
||||
const match = contentDisposition.match(/filename="?(.+)"?/);
|
||||
if (match && match[1]) {
|
||||
filename = match[1].replace(/^"|"$/g, '');
|
||||
}
|
||||
}
|
||||
if (!filename) {
|
||||
console.log(chalk.red('下载失败: 没有找到下载文件, 请检查下载地址是否正确,或手动下载'));
|
||||
return;
|
||||
}
|
||||
const outputPath = options.output || filename;
|
||||
if (!fileIsExist(outputPath)) {
|
||||
fs.mkdirSync(path.dirname(outputPath), { recursive: true });
|
||||
}
|
||||
const fileStream = fs.createWriteStream(outputPath);
|
||||
|
||||
if (res.body) {
|
||||
nodeReadableStreamFromWeb(res.body).pipe(fileStream);
|
||||
|
||||
fileStream.on('finish', async () => {
|
||||
console.log(chalk.green(`下载成功: ${outputPath}`));
|
||||
if (options.extract) {
|
||||
console.log(chalk.green(`解压: ${outputPath}`));
|
||||
const extractPath = path.join(process.cwd(), options.extract || '.');
|
||||
if (!fileIsExist(extractPath)) {
|
||||
fs.mkdirSync(extractPath, { recursive: true });
|
||||
}
|
||||
const fileInput = path.join(process.cwd(), outputPath);
|
||||
tar
|
||||
.extract({
|
||||
file: fileInput,
|
||||
cwd: extractPath,
|
||||
})
|
||||
.then((res) => {
|
||||
console.log(chalk.green(`解压成功: ${outputPath}`));
|
||||
})
|
||||
.catch((err) => {
|
||||
console.error(chalk.red(`解压失败: ${outputPath}, 请手动解压, tar -xvf ${outputPath}`));
|
||||
});
|
||||
}
|
||||
});
|
||||
|
||||
fileStream.on('error', (err) => {
|
||||
console.error(chalk.red('文件写入错误:', err));
|
||||
fileStream.close(); // Ensure the stream is closed on error
|
||||
});
|
||||
} else {
|
||||
console.error(chalk.red('下载失败: 无法获取文件流'));
|
||||
}
|
||||
})
|
||||
.catch((err) => {
|
||||
console.error(chalk.red('下载请求失败:', err));
|
||||
});
|
||||
});
|
||||
|
||||
appCommand.addCommand(downloadAppCommand);
|
@ -3,13 +3,12 @@ import glob from 'fast-glob';
|
||||
import path from 'path';
|
||||
import fs from 'fs';
|
||||
import FormData from 'form-data';
|
||||
import { getBaseURL, query } from '@/module/query.ts';
|
||||
import { getBaseURL, query, storage } from '@/module/query.ts';
|
||||
import { getConfig } from '@/module/index.ts';
|
||||
import inquirer from 'inquirer';
|
||||
import { packLib, unpackLib } from './publish.ts';
|
||||
import chalk from 'chalk';
|
||||
import { installDeps } from '@/uitls/npm.ts';
|
||||
|
||||
const command = new Command('deploy')
|
||||
.description('把前端文件传到服务器')
|
||||
.argument('<filePath>', 'Path to the file to be uploaded, filepath or directory') // 定义文件路径参数
|
||||
@ -123,10 +122,11 @@ const uploadFiles = async (
|
||||
if (username) {
|
||||
form.append('username', username);
|
||||
}
|
||||
return new Promise((resolve) => {
|
||||
return new Promise(async (resolve) => {
|
||||
const _baseURL = getBaseURL();
|
||||
const url = new URL(_baseURL);
|
||||
console.log('upload url', url.hostname, url.protocol, url.port);
|
||||
const token = await storage.getItem('token');
|
||||
form.submit(
|
||||
{
|
||||
path: '/api/app/upload',
|
||||
@ -135,7 +135,7 @@ const uploadFiles = async (
|
||||
port: url.port,
|
||||
method: 'POST',
|
||||
headers: {
|
||||
Authorization: 'Bearer ' + config.token,
|
||||
Authorization: 'Bearer ' + token,
|
||||
...form.getHeaders(),
|
||||
},
|
||||
},
|
||||
|
@ -1,49 +1,12 @@
|
||||
import { program, Command } from '@/program.ts';
|
||||
import { getConfig, writeConfig } from '@/module/get-config.ts';
|
||||
import { getBaseURL } from '@/module/query.ts';
|
||||
import { queryLogin, queryMe, switchOrg, switchMe } from '@/query/index.ts';
|
||||
import { getConfig } from '@/module/get-config.ts';
|
||||
import inquirer from 'inquirer';
|
||||
import { runApp } from '../app-run.ts';
|
||||
import { chalk } from '@/module/chalk.ts';
|
||||
import { loginInCommand } from '@/module/login/login-by-web.ts';
|
||||
export const saveToken = async (token: string) => {
|
||||
const baseURL = getBaseURL();
|
||||
const config = getConfig();
|
||||
writeConfig({ ...config, token });
|
||||
const res = await runApp({ path: 'config', key: 'saveToken', payload: { baseURL, token } });
|
||||
if (res.code !== 200) {
|
||||
console.log('Set token failed', res.message || '');
|
||||
}
|
||||
};
|
||||
export const switchToken = async (baseURL: string) => {
|
||||
const res = await runApp({ path: 'config', key: 'switchToken', payload: { baseURL } });
|
||||
if (res.code !== 200 && res.code !== 404) {
|
||||
console.log('switch token failed', res.message || '');
|
||||
}
|
||||
return res;
|
||||
};
|
||||
export const deleteToken = async (baseURL: string) => {
|
||||
const res = await runApp({ path: 'config', key: 'deleteToken', payload: { baseURL } });
|
||||
if (res.code !== 200) {
|
||||
console.log('delete token failed', res.message || '');
|
||||
}
|
||||
return res;
|
||||
};
|
||||
export const getTokenList = async () => {
|
||||
const res = await runApp({ path: 'config', key: 'getTokenList' });
|
||||
if (res.code !== 200) {
|
||||
console.log('get token list failed', res.message || '');
|
||||
}
|
||||
return res;
|
||||
};
|
||||
export const setTokenList = async (data: any[]) => {
|
||||
const res = await runApp({ path: 'config', key: 'setTokenList', payload: { data } });
|
||||
if (res.code !== 200) {
|
||||
console.log('set token list failed', res.message || '');
|
||||
}
|
||||
return res;
|
||||
};
|
||||
// 定义login命令,支持 `-u` 和 `-p` 参数来输入用户名和密码
|
||||
import { queryLogin, storage } from '@/module/query.ts';
|
||||
|
||||
/**
|
||||
* 定义login命令,支持 `-u` 和 `-p` 参数来输入用户名和密码
|
||||
*/
|
||||
const loginCommand = new Command('login')
|
||||
.description('Login to the application')
|
||||
.option('-u, --username <username>', 'Specify username')
|
||||
@ -51,10 +14,9 @@ const loginCommand = new Command('login')
|
||||
.option('-f, --force', 'Force login')
|
||||
.option('-w, --web', 'Login on the web')
|
||||
.action(async (options) => {
|
||||
const config = getConfig();
|
||||
let { username, password } = options;
|
||||
if (options.web) {
|
||||
await loginInCommand(saveToken);
|
||||
await loginInCommand();
|
||||
return;
|
||||
}
|
||||
// 如果没有传递参数,则通过交互式输入
|
||||
@ -77,7 +39,8 @@ const loginCommand = new Command('login')
|
||||
username = answers.username || username;
|
||||
password = answers.password || password;
|
||||
}
|
||||
if (config.token) {
|
||||
const token = storage.getItem('token');
|
||||
if (token) {
|
||||
const res = await showMe(false);
|
||||
if (res.code === 200) {
|
||||
const data = res.data;
|
||||
@ -88,11 +51,11 @@ const loginCommand = new Command('login')
|
||||
}
|
||||
}
|
||||
|
||||
const res = await queryLogin(username, password);
|
||||
const res = await queryLogin.login({
|
||||
username,
|
||||
password,
|
||||
});
|
||||
if (res.code === 200) {
|
||||
const { token } = res.data;
|
||||
writeConfig({ ...config, token });
|
||||
saveToken(token);
|
||||
console.log('welcome', username);
|
||||
} else {
|
||||
console.log('登录失败', res.message || '');
|
||||
@ -102,47 +65,19 @@ const loginCommand = new Command('login')
|
||||
program.addCommand(loginCommand);
|
||||
|
||||
const showMe = async (show = true) => {
|
||||
const me = await queryMe();
|
||||
const me = await queryLogin.getMe();
|
||||
if (show) {
|
||||
// save me to config
|
||||
const meSet = await runApp({ path: 'config', key: 'meSet', payload: { data: me.data } });
|
||||
if (me.code === 200) {
|
||||
console.log('Me', me.data);
|
||||
} else {
|
||||
const config = getConfig();
|
||||
console.log('Show Me failed', me.message);
|
||||
writeConfig({ ...config, token: '' });
|
||||
}
|
||||
console.log('Me', me.data);
|
||||
}
|
||||
return me;
|
||||
};
|
||||
|
||||
const switchOrgCommand = new Command('switch').argument('<username>', 'Switch to another organization or username').action(async (username) => {
|
||||
const config = getConfig();
|
||||
if (!config.token) {
|
||||
console.log('Please login first');
|
||||
return;
|
||||
}
|
||||
const meGet = await runApp({ path: 'config', key: 'meGet' });
|
||||
if (meGet.code !== 200) {
|
||||
console.log('Please login first');
|
||||
return;
|
||||
}
|
||||
const me = meGet.data?.value || {};
|
||||
if (me?.username === username) {
|
||||
// console.log('Already in', options);
|
||||
console.log('success switch to', username);
|
||||
return;
|
||||
}
|
||||
const res = await switchOrg(username);
|
||||
const res = await queryLogin.switchUser(username);
|
||||
if (res.code === 200) {
|
||||
const token = res.data.token;
|
||||
writeConfig({ ...config, token });
|
||||
console.log(`Switch ${username} Success`);
|
||||
saveToken(token);
|
||||
await showMe();
|
||||
console.log('success switch to', username);
|
||||
} else {
|
||||
console.log(`Switch ${username} Failed`, res.message || '');
|
||||
console.log('switch to', username, 'failed', res.message || '');
|
||||
}
|
||||
});
|
||||
|
||||
|
@ -1,42 +1,19 @@
|
||||
import { program as app, Command } from '@/program.ts';
|
||||
import { getConfig, query, writeConfig } from '@/module/index.ts';
|
||||
import { getConfig, writeConfig } from '@/module/index.ts';
|
||||
import { queryLogin, storage } from '@/module/query.ts';
|
||||
import inquirer from 'inquirer';
|
||||
import util from 'util';
|
||||
|
||||
import { saveToken, switchToken, deleteToken, getTokenList, setTokenList } from './login.ts';
|
||||
const token = new Command('token').description('show token').action(async () => {
|
||||
const config = getConfig();
|
||||
console.log('token', config.token);
|
||||
const token = storage.getItem('token');
|
||||
console.log('token', token);
|
||||
});
|
||||
const tokenList = new Command('list')
|
||||
.description('show token list')
|
||||
.option('-r --remove <number>', 'remove token by number')
|
||||
// .option('-r --remove <number>', 'remove token by number')
|
||||
.action(async (opts) => {
|
||||
const res = await getTokenList();
|
||||
if (res.code !== 200) {
|
||||
console.error('get token list failed', res.message || '');
|
||||
return;
|
||||
}
|
||||
console.log(util.inspect(res.data.value, { colors: true, depth: 4 }));
|
||||
|
||||
const list = res.data.value || [];
|
||||
if (opts.remove) {
|
||||
const index = Number(opts.remove) - 1;
|
||||
if (index < 0 || index >= list.length) {
|
||||
console.log('index out of range');
|
||||
return;
|
||||
}
|
||||
const removeBase = list.splice(index, 1);
|
||||
const baseURL = removeBase[0];
|
||||
if (baseURL.baseURL) {
|
||||
const res = await deleteToken(baseURL?.baseURL);
|
||||
if (res.code !== 200) {
|
||||
return;
|
||||
}
|
||||
}
|
||||
console.log('delete token success', 'delete', baseURL);
|
||||
return;
|
||||
}
|
||||
const res = queryLogin.cache.cache.cacheData;
|
||||
console.log(util.inspect(res, { colors: true, depth: 4 }));
|
||||
});
|
||||
token.addCommand(tokenList);
|
||||
app.addCommand(token);
|
||||
@ -101,7 +78,7 @@ const baseURL = new Command('baseURL')
|
||||
list = quineList(list);
|
||||
showList(list);
|
||||
writeConfig({ ...config, baseURLList: list });
|
||||
removeBase[0] && deleteToken(removeBase[0]);
|
||||
removeBase[0];
|
||||
return;
|
||||
}
|
||||
if (opts.set) {
|
||||
@ -119,7 +96,6 @@ const baseURL = new Command('baseURL')
|
||||
} else {
|
||||
baseURL = opts.set;
|
||||
}
|
||||
baseURL && switchToken(baseURL);
|
||||
return;
|
||||
}
|
||||
if (opts.list) {
|
||||
@ -128,12 +104,11 @@ const baseURL = new Command('baseURL')
|
||||
}
|
||||
if (opts.clear) {
|
||||
writeConfig({ ...config, baseURLList: [] });
|
||||
setTokenList([]);
|
||||
return;
|
||||
}
|
||||
if (!config.baseURL) {
|
||||
config = getConfig();
|
||||
writeConfig({ ...config, baseURL: 'https://kevisual.xiongxiao.me' });
|
||||
writeConfig({ ...config, baseURL: 'https://kevisual.cn' });
|
||||
config = getConfig();
|
||||
}
|
||||
console.log('current baseURL:', config.baseURL);
|
||||
@ -159,7 +134,6 @@ const setBaseURL = new Command('set')
|
||||
baseURL = answers.baseURL;
|
||||
}
|
||||
writeConfig({ ...config, baseURL });
|
||||
baseURL && switchToken(baseURL);
|
||||
});
|
||||
|
||||
baseURL.addCommand(setBaseURL);
|
||||
|
@ -122,9 +122,8 @@ const npmrc = new Command('set')
|
||||
const npmrcContent =
|
||||
config?.npmrc ||
|
||||
`//npm.xiongxiao.me/:_authToken=\${ME_NPM_TOKEN}
|
||||
@abearxiong:registry=https://npm.pkg.github.com
|
||||
//registry.npmjs.org/:_authToken=\${NPM_TOKEN}
|
||||
@kevisual:registry=https://npm.xiongxiao.me`;
|
||||
`;
|
||||
const execPath = process.cwd();
|
||||
const npmrcPath = path.resolve(execPath, '.npmrc');
|
||||
let writeFlag = false;
|
||||
|
@ -1,46 +1,26 @@
|
||||
import MD5 from 'crypto-js/md5.js';
|
||||
import { getBaseURL, query } from '../query.ts';
|
||||
import { getBaseURL, queryLogin } from '../query.ts';
|
||||
import { chalk } from '../chalk.ts';
|
||||
import jsonwebtoken from 'jsonwebtoken';
|
||||
import { BaseLoad } from '@kevisual/load';
|
||||
import { getConfig, writeConfig } from '../get-config.ts';
|
||||
|
||||
type LoginWithWebOptions = {};
|
||||
export const loginWithWeb = async (opts?: LoginWithWebOptions) => {
|
||||
const baseURL = getBaseURL();
|
||||
const randomId = Math.random().toString(36).substring(2, 15);
|
||||
const timestamp = Date.now();
|
||||
const tokenSecret = 'xiao' + randomId;
|
||||
const sign = MD5(`${tokenSecret}${timestamp}`).toString();
|
||||
const token = jsonwebtoken.sign({ randomId, timestamp, sign }, tokenSecret, {
|
||||
// 10分钟过期
|
||||
expiresIn: 60 * 10, // 10分钟
|
||||
});
|
||||
const config = await getConfig();
|
||||
|
||||
const url = `${baseURL}/api/router?path=user&key=webLogin&p&loginToken=${token}&sign=${sign}&randomId=${randomId}`;
|
||||
|
||||
console.log(chalk.blue(url));
|
||||
return {
|
||||
url,
|
||||
token,
|
||||
tokenSecret,
|
||||
};
|
||||
const res = queryLogin.loginWithWeb(baseURL, { MD5, jsonwebtoken });
|
||||
console.log(chalk.blue(res.url));
|
||||
return res;
|
||||
};
|
||||
|
||||
type PollLoginOptions = {
|
||||
tokenSecret: string;
|
||||
saveToken?: any;
|
||||
};
|
||||
export const pollLoginStatus = async (token: string, opts: PollLoginOptions) => {
|
||||
const load = new BaseLoad();
|
||||
load.load(
|
||||
async () => {
|
||||
const res = await query.post({
|
||||
path: 'user',
|
||||
key: 'checkLoginStatus',
|
||||
loginToken: token,
|
||||
});
|
||||
const res = await queryLogin.checkLoginStatus(token);
|
||||
return res;
|
||||
},
|
||||
{
|
||||
@ -55,36 +35,21 @@ export const pollLoginStatus = async (token: string, opts: PollLoginOptions) =>
|
||||
timeout: 60 * 3 * 1000, // 5分钟超时
|
||||
});
|
||||
if (res.code === 200 && res.data?.code === 200) {
|
||||
const data = res.data?.data;
|
||||
try {
|
||||
const payload = jsonwebtoken.verify(data, opts.tokenSecret) as UserPayload;
|
||||
type UserPayload = {
|
||||
userToken: {
|
||||
token: string;
|
||||
expireTime: number;
|
||||
};
|
||||
user: {
|
||||
id: string;
|
||||
username: string;
|
||||
};
|
||||
};
|
||||
const userToken = payload.userToken;
|
||||
// console.log('token:\n\n', userToken);
|
||||
console.log(chalk.green('网页登录成功', payload?.user?.username));
|
||||
console.log(chalk.green('token:', userToken.token));
|
||||
await opts?.saveToken(userToken.token);
|
||||
console.log(chalk.green('网页登录成功'));
|
||||
return;
|
||||
} catch (error) {
|
||||
console.log(chalk.red('登录失败'), error);
|
||||
return;
|
||||
}
|
||||
}
|
||||
console.log(chalk.red('登录失败'), res);
|
||||
};
|
||||
|
||||
export const loginInCommand = async (saveToken: any) => {
|
||||
const { url, token, tokenSecret } = await loginWithWeb();
|
||||
await pollLoginStatus(token, { tokenSecret, saveToken });
|
||||
return url;
|
||||
export const loginInCommand = async () => {
|
||||
const baseURL = getBaseURL();
|
||||
const res = queryLogin.loginWithWeb(baseURL, { MD5, jsonwebtoken });
|
||||
console.log(chalk.blue(res.url));
|
||||
await pollLoginStatus(res.token, { tokenSecret: res.tokenSecret });
|
||||
return res.url;
|
||||
};
|
||||
|
||||
// loginInCommand();
|
||||
|
@ -1,7 +1,9 @@
|
||||
import { Query } from '@kevisual/query/query';
|
||||
import { getConfig } from './get-config.ts';
|
||||
import { QueryLoginNode, storage } from '@kevisual/query-login/node';
|
||||
const config = getConfig();
|
||||
export const baseURL = config?.baseURL || 'https://envision.xiongxiao.me';
|
||||
export const baseURL = config?.baseURL || 'https://kevisual.cn';
|
||||
export { storage };
|
||||
export const getBaseURL = () => {
|
||||
if (typeof config?.dev === 'undefined') {
|
||||
return baseURL;
|
||||
@ -23,10 +25,29 @@ export const query = new Query({
|
||||
|
||||
query.beforeRequest = async (config) => {
|
||||
if (config.headers) {
|
||||
const token = await getConfig()?.token;
|
||||
const token = await storage.getItem('token');
|
||||
if (token) {
|
||||
config.headers['Authorization'] = 'Bearer ' + token;
|
||||
}
|
||||
}
|
||||
return config;
|
||||
};
|
||||
query.afterResponse = async (response, ctx) => {
|
||||
if (response.code === 401) {
|
||||
if (query.stop) {
|
||||
return {
|
||||
code: 500,
|
||||
message: '登录已过期',
|
||||
};
|
||||
}
|
||||
query.stop = true;
|
||||
const res = await queryLogin.afterCheck401ToRefreshToken(response, ctx);
|
||||
query.stop = false;
|
||||
return res;
|
||||
}
|
||||
return response as any;
|
||||
};
|
||||
export const queryLogin = new QueryLoginNode({
|
||||
query: query as any,
|
||||
onLoad: async () => {},
|
||||
});
|
||||
|
@ -1,208 +0,0 @@
|
||||
import { app } from '@/app.ts';
|
||||
import { Config } from './model/config.ts';
|
||||
import { getConfig, writeConfig } from '@/module/get-config.ts';
|
||||
import { queryMe } from '@/query/index.ts';
|
||||
const cacheToken = 'tokenList';
|
||||
export type TokenCacheItem = {
|
||||
baseURL?: string;
|
||||
token?: string;
|
||||
expireTime?: number;
|
||||
};
|
||||
|
||||
app
|
||||
.route({
|
||||
path: 'config',
|
||||
key: 'getTokenList',
|
||||
description: 'Get token list',
|
||||
})
|
||||
.define(async (ctx) => {
|
||||
const tokenList = await Config.findOne({
|
||||
where: {
|
||||
key: cacheToken,
|
||||
},
|
||||
logging: false,
|
||||
});
|
||||
if (tokenList) {
|
||||
ctx.body = tokenList;
|
||||
return;
|
||||
}
|
||||
ctx.body = {
|
||||
value: [],
|
||||
};
|
||||
})
|
||||
.addTo(app);
|
||||
|
||||
app
|
||||
.route({
|
||||
path: 'config',
|
||||
key: 'setTokenList',
|
||||
description: 'Set token list',
|
||||
})
|
||||
.define(async (ctx) => {
|
||||
const { data } = ctx.query;
|
||||
if (!data) {
|
||||
ctx.throw(400, 'data is required');
|
||||
}
|
||||
let config = await Config.findOne({
|
||||
where: { key: cacheToken }, // 自定义条件
|
||||
logging: false,
|
||||
});
|
||||
|
||||
if (!config) {
|
||||
config = await Config.create(
|
||||
{
|
||||
key: cacheToken,
|
||||
value: data,
|
||||
},
|
||||
{ logging: false },
|
||||
);
|
||||
ctx.body = config;
|
||||
return;
|
||||
} else {
|
||||
config.value = data;
|
||||
await config.save();
|
||||
ctx.body = config;
|
||||
}
|
||||
})
|
||||
.addTo(app);
|
||||
|
||||
app
|
||||
.route({
|
||||
path: 'config',
|
||||
key: 'clearToken',
|
||||
description: 'Clear token list',
|
||||
})
|
||||
.define(async (ctx) => {
|
||||
const config = await Config.findOne({
|
||||
where: { key: cacheToken },
|
||||
logging: false,
|
||||
});
|
||||
if (config) {
|
||||
await config.destroy();
|
||||
}
|
||||
ctx.body = 'success';
|
||||
})
|
||||
.addTo(app);
|
||||
|
||||
app
|
||||
.route({
|
||||
path: 'config',
|
||||
key: 'saveToken',
|
||||
description: 'Add token',
|
||||
validator: {
|
||||
baseURL: {
|
||||
type: 'string',
|
||||
required: true,
|
||||
message: 'baseURL is required',
|
||||
},
|
||||
token: {
|
||||
type: 'string',
|
||||
required: true,
|
||||
message: 'token is required',
|
||||
},
|
||||
},
|
||||
})
|
||||
.define(async (ctx) => {
|
||||
const { baseURL, token } = ctx.query;
|
||||
if (!baseURL || !token) {
|
||||
ctx.throw(400, 'baseURL and token are required');
|
||||
}
|
||||
const data: TokenCacheItem = {
|
||||
baseURL,
|
||||
token,
|
||||
};
|
||||
const tokenRes = await ctx.call({ path: 'config', key: 'getTokenList' });
|
||||
if (tokenRes.code !== 200) {
|
||||
ctx.throw(tokenRes.code, tokenRes.message || 'Failed to get token list');
|
||||
}
|
||||
const tokenList: TokenCacheItem[] = tokenRes.body?.value || [];
|
||||
// Check if the token already exists
|
||||
const index = tokenList.findIndex((item) => item.baseURL === data.baseURL);
|
||||
if (index > -1) {
|
||||
tokenList[index] = data;
|
||||
} else {
|
||||
tokenList.push(data);
|
||||
}
|
||||
const res = await ctx.call({ path: 'config', key: 'setTokenList', payload: { data: tokenList } });
|
||||
if (res.code === 200) {
|
||||
ctx.body = res.body?.value;
|
||||
} else ctx.throw(res.code, res.message || 'Failed to add token');
|
||||
})
|
||||
.addTo(app);
|
||||
|
||||
app
|
||||
.route({
|
||||
path: 'config',
|
||||
key: 'switchToken',
|
||||
description: 'Switch token user',
|
||||
validator: {
|
||||
baseURL: {
|
||||
type: 'string',
|
||||
required: true,
|
||||
message: 'baseURL is required',
|
||||
},
|
||||
},
|
||||
})
|
||||
.define(async (ctx) => {
|
||||
const { baseURL } = ctx.query;
|
||||
const configRes = await ctx.call({ path: 'config', key: 'getTokenList' });
|
||||
if (configRes.code !== 200) {
|
||||
ctx.throw(configRes.code, configRes.message || 'Failed to get token list');
|
||||
}
|
||||
const tokenList: TokenCacheItem[] = configRes.body?.value || [];
|
||||
const index = tokenList.findIndex((item) => item.baseURL === baseURL);
|
||||
const token = index > -1 ? tokenList[index].token : '';
|
||||
if (token) {
|
||||
const config = getConfig();
|
||||
const resMe = await queryMe();
|
||||
if (resMe.code !== 200) {
|
||||
writeConfig({ ...config, token: '' });
|
||||
ctx.throw(resMe.code, resMe.message || 'cache token is invalid');
|
||||
}
|
||||
writeConfig({ ...config, token: token });
|
||||
ctx.body = {
|
||||
baseURL: baseURL,
|
||||
token: tokenList[index].token,
|
||||
};
|
||||
} else {
|
||||
writeConfig({ ...getConfig(), token: '' });
|
||||
ctx.throw(404, 'Token not found');
|
||||
}
|
||||
})
|
||||
.addTo(app);
|
||||
|
||||
app
|
||||
.route({
|
||||
path: 'config',
|
||||
key: 'deleteToken',
|
||||
description: 'Delete token',
|
||||
validator: {
|
||||
baseURL: {
|
||||
type: 'string',
|
||||
required: true,
|
||||
message: 'baseURL is required',
|
||||
},
|
||||
},
|
||||
})
|
||||
.define(async (ctx) => {
|
||||
const { baseURL } = ctx.query;
|
||||
const config = await ctx.call({ path: 'config', key: 'getTokenList' });
|
||||
if (config.code !== 200) {
|
||||
ctx.throw(config.code, config.message || 'Failed to get token list');
|
||||
}
|
||||
const tokenList: TokenCacheItem[] = config.body?.value || [];
|
||||
const index = tokenList.findIndex((item) => item.baseURL === baseURL);
|
||||
if (index > -1) {
|
||||
tokenList.splice(index, 1);
|
||||
const res = await ctx.call({ path: 'config', key: 'setTokenList', payload: { data: tokenList } });
|
||||
if (res.code === 200) {
|
||||
ctx.body = res.body;
|
||||
} else ctx.throw(res.code, res.message || 'Failed to delete token');
|
||||
} else {
|
||||
console.log('not has token', baseURL);
|
||||
ctx.body = {
|
||||
value: tokenList,
|
||||
};
|
||||
}
|
||||
})
|
||||
.addTo(app);
|
@ -1,2 +1 @@
|
||||
import './list.ts'
|
||||
import './cache-token.ts'
|
||||
import './list.ts'
|
@ -1,53 +0,0 @@
|
||||
import { getConfig } from '../module/get-config.ts';
|
||||
import { runApp } from '../app-run.ts';
|
||||
|
||||
const getConfigList = async () => {
|
||||
const res = await runApp({
|
||||
path: 'config',
|
||||
key: 'getTokenList',
|
||||
});
|
||||
console.log(res);
|
||||
};
|
||||
|
||||
// getConfigList();
|
||||
|
||||
const setConfigList = async () => {
|
||||
const config = getConfig();
|
||||
const { baseURL, token } = config;
|
||||
console.log(baseURL, token);
|
||||
|
||||
const res = await runApp({
|
||||
path: 'config',
|
||||
key: 'saveToken',
|
||||
payload: {
|
||||
baseURL: 'abc32',
|
||||
token,
|
||||
},
|
||||
});
|
||||
console.log(res);
|
||||
};
|
||||
// setConfigList();
|
||||
|
||||
const switchToken = async () => {
|
||||
const res = await runApp({
|
||||
path: 'config',
|
||||
key: 'switchToken',
|
||||
payload: {
|
||||
baseURL: 'abc2',
|
||||
},
|
||||
});
|
||||
console.log(res);
|
||||
};
|
||||
// switchToken();
|
||||
|
||||
const removeToken = async () => {
|
||||
const res = await runApp({
|
||||
path: 'config',
|
||||
key: 'deleteToken',
|
||||
payload: {
|
||||
baseURL: 'abc32',
|
||||
},
|
||||
});
|
||||
console.log(res);
|
||||
};
|
||||
removeToken();
|
1
submodules/kevisual-query-login
Submodule
1
submodules/kevisual-query-login
Submodule
@ -0,0 +1 @@
|
||||
Subproject commit af8ed90ab3f5a0b558c410f5a0f40d5fb7eaa6d6
|
Loading…
x
Reference in New Issue
Block a user