jwt 生成器

This commit is contained in:
aukufddxxyy 2025-09-30 14:27:42 +08:00
parent 07eea0f484
commit df9a427b09
9 changed files with 258 additions and 166 deletions

21
components.d.ts vendored
View File

@ -91,6 +91,7 @@ declare module '@vue/runtime-core' {
IbanValidatorAndParser: typeof import('./src/tools/iban-validator-and-parser/iban-validator-and-parser.vue')['default'] IbanValidatorAndParser: typeof import('./src/tools/iban-validator-and-parser/iban-validator-and-parser.vue')['default']
'IconMdi:brushVariant': typeof import('~icons/mdi/brush-variant')['default'] 'IconMdi:brushVariant': typeof import('~icons/mdi/brush-variant')['default']
'IconMdi:kettleSteamOutline': typeof import('~icons/mdi/kettle-steam-outline')['default'] 'IconMdi:kettleSteamOutline': typeof import('~icons/mdi/kettle-steam-outline')['default']
IconMdiArrowRightBottom: typeof import('~icons/mdi/arrow-right-bottom')['default']
IconMdiChevronDown: typeof import('~icons/mdi/chevron-down')['default'] IconMdiChevronDown: typeof import('~icons/mdi/chevron-down')['default']
IconMdiChevronRight: typeof import('~icons/mdi/chevron-right')['default'] IconMdiChevronRight: typeof import('~icons/mdi/chevron-right')['default']
IconMdiClose: typeof import('~icons/mdi/close')['default'] IconMdiClose: typeof import('~icons/mdi/close')['default']
@ -98,6 +99,7 @@ declare module '@vue/runtime-core' {
IconMdiEye: typeof import('~icons/mdi/eye')['default'] IconMdiEye: typeof import('~icons/mdi/eye')['default']
IconMdiEyeOff: typeof import('~icons/mdi/eye-off')['default'] IconMdiEyeOff: typeof import('~icons/mdi/eye-off')['default']
IconMdiHeart: typeof import('~icons/mdi/heart')['default'] IconMdiHeart: typeof import('~icons/mdi/heart')['default']
IconMdiRefresh: typeof import('~icons/mdi/refresh')['default']
IconMdiSearch: typeof import('~icons/mdi/search')['default'] IconMdiSearch: typeof import('~icons/mdi/search')['default']
IconMdiTranslate: typeof import('~icons/mdi/translate')['default'] IconMdiTranslate: typeof import('~icons/mdi/translate')['default']
IconMdiTriangleDown: typeof import('~icons/mdi/triangle-down')['default'] IconMdiTriangleDown: typeof import('~icons/mdi/triangle-down')['default']
@ -114,6 +116,7 @@ declare module '@vue/runtime-core' {
JsonToXml: typeof import('./src/tools/json-to-xml/json-to-xml.vue')['default'] JsonToXml: typeof import('./src/tools/json-to-xml/json-to-xml.vue')['default']
JsonToYaml: typeof import('./src/tools/json-to-yaml-converter/json-to-yaml.vue')['default'] JsonToYaml: typeof import('./src/tools/json-to-yaml-converter/json-to-yaml.vue')['default']
JsonViewer: typeof import('./src/tools/json-viewer/json-viewer.vue')['default'] JsonViewer: typeof import('./src/tools/json-viewer/json-viewer.vue')['default']
'JwtGenerator.tool': typeof import('./src/tools/jwt-generator/jwt-generator.tool.vue')['default']
JwtParser: typeof import('./src/tools/jwt-parser/jwt-parser.vue')['default'] JwtParser: typeof import('./src/tools/jwt-parser/jwt-parser.vue')['default']
KeycodeInfo: typeof import('./src/tools/keycode-info/keycode-info.vue')['default'] KeycodeInfo: typeof import('./src/tools/keycode-info/keycode-info.vue')['default']
ListConverter: typeof import('./src/tools/list-converter/list-converter.vue')['default'] ListConverter: typeof import('./src/tools/list-converter/list-converter.vue')['default']
@ -131,18 +134,36 @@ declare module '@vue/runtime-core' {
MimeTypes: typeof import('./src/tools/mime-types/mime-types.vue')['default'] MimeTypes: typeof import('./src/tools/mime-types/mime-types.vue')['default']
NavbarButtons: typeof import('./src/components/NavbarButtons.vue')['default'] NavbarButtons: typeof import('./src/components/NavbarButtons.vue')['default']
NCheckbox: typeof import('naive-ui')['NCheckbox'] NCheckbox: typeof import('naive-ui')['NCheckbox']
NCode: typeof import('naive-ui')['NCode']
NCollapseTransition: typeof import('naive-ui')['NCollapseTransition'] NCollapseTransition: typeof import('naive-ui')['NCollapseTransition']
NColorPicker: typeof import('naive-ui')['NColorPicker']
NConfigProvider: typeof import('naive-ui')['NConfigProvider'] NConfigProvider: typeof import('naive-ui')['NConfigProvider']
NDatePicker: typeof import('naive-ui')['NDatePicker']
NDivider: typeof import('naive-ui')['NDivider'] NDivider: typeof import('naive-ui')['NDivider']
NEllipsis: typeof import('naive-ui')['NEllipsis'] NEllipsis: typeof import('naive-ui')['NEllipsis']
NForm: typeof import('naive-ui')['NForm']
NFormItem: typeof import('naive-ui')['NFormItem']
NGi: typeof import('naive-ui')['NGi']
NGrid: typeof import('naive-ui')['NGrid']
NH1: typeof import('naive-ui')['NH1'] NH1: typeof import('naive-ui')['NH1']
NH2: typeof import('naive-ui')['NH2']
NH3: typeof import('naive-ui')['NH3'] NH3: typeof import('naive-ui')['NH3']
NIcon: typeof import('naive-ui')['NIcon'] NIcon: typeof import('naive-ui')['NIcon']
NImage: typeof import('naive-ui')['NImage']
NInputGroup: typeof import('naive-ui')['NInputGroup']
NInputGroupLabel: typeof import('naive-ui')['NInputGroupLabel']
NInputNumber: typeof import('naive-ui')['NInputNumber']
NLayout: typeof import('naive-ui')['NLayout'] NLayout: typeof import('naive-ui')['NLayout']
NLayoutSider: typeof import('naive-ui')['NLayoutSider'] NLayoutSider: typeof import('naive-ui')['NLayoutSider']
NMenu: typeof import('naive-ui')['NMenu'] NMenu: typeof import('naive-ui')['NMenu']
NProgress: typeof import('naive-ui')['NProgress']
NScrollbar: typeof import('naive-ui')['NScrollbar']
NSlider: typeof import('naive-ui')['NSlider']
NSpace: typeof import('naive-ui')['NSpace'] NSpace: typeof import('naive-ui')['NSpace']
NStatistic: typeof import('naive-ui')['NStatistic']
NSwitch: typeof import('naive-ui')['NSwitch']
NTable: typeof import('naive-ui')['NTable'] NTable: typeof import('naive-ui')['NTable']
NTag: typeof import('naive-ui')['NTag']
NumeronymGenerator: typeof import('./src/tools/numeronym-generator/numeronym-generator.vue')['default'] NumeronymGenerator: typeof import('./src/tools/numeronym-generator/numeronym-generator.vue')['default']
OtpCodeGeneratorAndValidator: typeof import('./src/tools/otp-code-generator-and-validator/otp-code-generator-and-validator.vue')['default'] OtpCodeGeneratorAndValidator: typeof import('./src/tools/otp-code-generator-and-validator/otp-code-generator-and-validator.vue')['default']
PasswordStrengthAnalyser: typeof import('./src/tools/password-strength-analyser/password-strength-analyser.vue')['default'] PasswordStrengthAnalyser: typeof import('./src/tools/password-strength-analyser/password-strength-analyser.vue')['default']

1
js-modules.d.ts vendored Normal file
View File

@ -0,0 +1 @@
declare module 'jsonwebtoken'

View File

@ -93,6 +93,28 @@ tools:
button: button:
copy: Copy copy: Copy
refresh: Refresh refresh: Refresh
jwt-generator:
title: JWT generator
description: Generate JWT (JSON Web Token) tokens with the algorithm you want.
algorithm:
label: Signature or encryption algorithm
placeholder: Select an encryption algorithm...
encoding:
label: Token encoding type
placeholder: Select the result encoding...
payload:
label: JSON payload to generate the JWT
placeholder: Paste your payload here...
secret:
label: Secret key
placeholder: 'Enter the secret key...'
jwt:
label: JSON WEB TOKEN
placeholder: 'The result of the JWT...'
copied: JWT copied to the clipboard
percentage-calculator: percentage-calculator:
title: Percentage calculator title: Percentage calculator
description: Easily calculate percentages from a value to another value, or from a percentage to a value. description: Easily calculate percentages from a value to another value, or from a percentage to a value.

View File

@ -92,6 +92,28 @@ tools:
button: button:
copy: 复制 copy: 复制
refresh: 刷新 refresh: 刷新
jwt-generator:
title: JWT 生成器
description: 生成您想要的算法的 JWTJSON Web Token令牌。
algorithm:
label: 签名或加密算法
placeholder: 选择加密算法...
encoding:
label: 令牌编码类型
placeholder: 选择结果编码...
payload:
label: 生成 JWT 的 JSON 有效负载
placeholder: 粘贴您的有效负载...
secret:
label: 秘钥
placeholder: '输入秘钥...'
jwt:
label: JSON WEB TOKEN
placeholder: 'JWT 的结果...'
copied: JWT 复制到剪贴板
percentage-calculator: percentage-calculator:
title: 百分比计算器 title: 百分比计算器
description: 轻松计算从一个值到另一个值的百分比,或从百分比到值的百分比。 description: 轻松计算从一个值到另一个值的百分比,或从百分比到值的百分比。

View File

@ -2,7 +2,7 @@
"name": "it-tools", "name": "it-tools",
"type": "module", "type": "module",
"version": "2024.10.22-7ca5933", "version": "2024.10.22-7ca5933",
"packageManager": "pnpm@9.11.0", "packageManager": "pnpm@10.17.1+sha512.17c560fca4867ae9473a3899ad84a88334914f379be46d455cbf92e5cf4b39d34985d452d2583baf19967fa76cb5c17bc9e245529d0b98745721aa7200ecaf7a",
"description": "Collection of handy online tools for developers, with great UX. ", "description": "Collection of handy online tools for developers, with great UX. ",
"author": "Corentin Th <corentin.thomasset74+it-tools@gmail.com> (https://corentin.tech)", "author": "Corentin Th <corentin.thomasset74+it-tools@gmail.com> (https://corentin.tech)",
"license": "GNU GPLv3", "license": "GNU GPLv3",
@ -70,6 +70,7 @@
"highlight.js": "^11.7.0", "highlight.js": "^11.7.0",
"iarna-toml-esm": "^3.0.5", "iarna-toml-esm": "^3.0.5",
"ibantools": "^4.3.3", "ibantools": "^4.3.3",
"jose": "^6.1.0",
"js-base64": "^3.7.6", "js-base64": "^3.7.6",
"json5": "^2.2.3", "json5": "^2.2.3",
"jwt-decode": "^3.1.2", "jwt-decode": "^3.1.2",

204
pnpm-lock.yaml generated
View File

@ -49,7 +49,7 @@ importers:
version: 10.3.0(vue@3.3.4) version: 10.3.0(vue@3.3.4)
'@vueuse/head': '@vueuse/head':
specifier: ^1.0.0 specifier: ^1.0.0
version: 1.0.0(typescript@5.2.2)(vue@3.3.4) version: 1.0.0(vue@3.3.4)
'@vueuse/router': '@vueuse/router':
specifier: ^10.0.0 specifier: ^10.0.0
version: 10.0.0(vue-router@4.1.6(vue@3.3.4))(vue@3.3.4) version: 10.0.0(vue-router@4.1.6(vue@3.3.4))(vue@3.3.4)
@ -107,6 +107,9 @@ importers:
ibantools: ibantools:
specifier: ^4.3.3 specifier: ^4.3.3
version: 4.3.3 version: 4.3.3
jose:
specifier: ^6.1.0
version: 6.1.0
js-base64: js-base64:
specifier: ^3.7.6 specifier: ^3.7.6
version: 3.7.7 version: 3.7.7
@ -2303,9 +2306,6 @@ packages:
'@vue/compiler-core@3.3.7': '@vue/compiler-core@3.3.7':
resolution: {integrity: sha512-pACdY6YnTNVLXsB86YD8OF9ihwpolzhhtdLVHhBL6do/ykr6kKXNYABRtNMGrsQXpEXXyAdwvWWkuTbs4MFtPQ==} resolution: {integrity: sha512-pACdY6YnTNVLXsB86YD8OF9ihwpolzhhtdLVHhBL6do/ykr6kKXNYABRtNMGrsQXpEXXyAdwvWWkuTbs4MFtPQ==}
'@vue/compiler-core@3.5.13':
resolution: {integrity: sha512-oOdAkwqUfW1WqpwSYJce06wvt6HljgY3fGeM9NcVA1HaYOij3mZG9Rkysn0OHuyUAGMbEbARIpsG+LPVlBJ5/Q==}
'@vue/compiler-dom@3.2.47': '@vue/compiler-dom@3.2.47':
resolution: {integrity: sha512-dBBnEHEPoftUiS03a4ggEig74J2YBZ2UIeyfpcRM2tavgMWo4bsEfgCGsu+uJIL/vax9S+JztH8NmQerUo7shQ==} resolution: {integrity: sha512-dBBnEHEPoftUiS03a4ggEig74J2YBZ2UIeyfpcRM2tavgMWo4bsEfgCGsu+uJIL/vax9S+JztH8NmQerUo7shQ==}
@ -2315,18 +2315,12 @@ packages:
'@vue/compiler-dom@3.3.7': '@vue/compiler-dom@3.3.7':
resolution: {integrity: sha512-0LwkyJjnUPssXv/d1vNJ0PKfBlDoQs7n81CbO6Q0zdL7H1EzqYRrTVXDqdBVqro0aJjo/FOa1qBAPVI4PGSHBw==} resolution: {integrity: sha512-0LwkyJjnUPssXv/d1vNJ0PKfBlDoQs7n81CbO6Q0zdL7H1EzqYRrTVXDqdBVqro0aJjo/FOa1qBAPVI4PGSHBw==}
'@vue/compiler-dom@3.5.13':
resolution: {integrity: sha512-ZOJ46sMOKUjO3e94wPdCzQ6P1Lx/vhp2RSvfaab88Ajexs0AHeV0uasYhi99WPaogmBlRHNRuly8xV75cNTMDA==}
'@vue/compiler-sfc@3.2.47': '@vue/compiler-sfc@3.2.47':
resolution: {integrity: sha512-rog05W+2IFfxjMcFw10tM9+f7i/+FFpZJJ5XHX72NP9eC2uRD+42M3pYcQqDXVYoj74kHMSEdQ/WmCjt8JFksQ==} resolution: {integrity: sha512-rog05W+2IFfxjMcFw10tM9+f7i/+FFpZJJ5XHX72NP9eC2uRD+42M3pYcQqDXVYoj74kHMSEdQ/WmCjt8JFksQ==}
'@vue/compiler-sfc@3.3.4': '@vue/compiler-sfc@3.3.4':
resolution: {integrity: sha512-6y/d8uw+5TkCuzBkgLS0v3lSM3hJDntFEiUORM11pQ/hKvkhSKZrXW6i69UyXlJQisJxuUEJKAWEqWbWsLeNKQ==} resolution: {integrity: sha512-6y/d8uw+5TkCuzBkgLS0v3lSM3hJDntFEiUORM11pQ/hKvkhSKZrXW6i69UyXlJQisJxuUEJKAWEqWbWsLeNKQ==}
'@vue/compiler-sfc@3.5.13':
resolution: {integrity: sha512-6VdaljMpD82w6c2749Zhf5T9u5uLBWKnVue6XWxprDobftnletJ8+oel7sexFfM3qIxNmVE7LSFGTpv6obNyaQ==}
'@vue/compiler-ssr@3.2.47': '@vue/compiler-ssr@3.2.47':
resolution: {integrity: sha512-wVXC+gszhulcMD8wpxMsqSOpvDZ6xKXSVWkf50Guf/S+28hTAXPDYRTbLQ3EDkOP5Xz/+SY37YiwDquKbJOgZw==} resolution: {integrity: sha512-wVXC+gszhulcMD8wpxMsqSOpvDZ6xKXSVWkf50Guf/S+28hTAXPDYRTbLQ3EDkOP5Xz/+SY37YiwDquKbJOgZw==}
@ -2336,9 +2330,6 @@ packages:
'@vue/compiler-ssr@3.3.7': '@vue/compiler-ssr@3.3.7':
resolution: {integrity: sha512-TxOfNVVeH3zgBc82kcUv+emNHo+vKnlRrkv8YvQU5+Y5LJGJwSNzcmLUoxD/dNzv0bhQ/F0s+InlgV0NrApJZg==} resolution: {integrity: sha512-TxOfNVVeH3zgBc82kcUv+emNHo+vKnlRrkv8YvQU5+Y5LJGJwSNzcmLUoxD/dNzv0bhQ/F0s+InlgV0NrApJZg==}
'@vue/compiler-ssr@3.5.13':
resolution: {integrity: sha512-wMH6vrYHxQl/IybKJagqbquvxpWCuVYpoUJfCqFZwa/JY1GdATAQ+TgVtgrwwMZ0D07QhA99rs/EAAWfvG6KpA==}
'@vue/devtools-api@6.5.0': '@vue/devtools-api@6.5.0':
resolution: {integrity: sha512-o9KfBeaBmCKl10usN4crU53fYtC1r7jJwdGKjPT24t348rHxgfpZ0xL3Xm/gLUYnc0oTp8LAmrxOeLyu6tbk2Q==} resolution: {integrity: sha512-o9KfBeaBmCKl10usN4crU53fYtC1r7jJwdGKjPT24t348rHxgfpZ0xL3Xm/gLUYnc0oTp8LAmrxOeLyu6tbk2Q==}
@ -2359,21 +2350,12 @@ packages:
'@vue/reactivity@3.3.4': '@vue/reactivity@3.3.4':
resolution: {integrity: sha512-kLTDLwd0B1jG08NBF3R5rqULtv/f8x3rOFByTDz4J53ttIQEDmALqKqXY0J+XQeN0aV2FBxY8nJDf88yvOPAqQ==} resolution: {integrity: sha512-kLTDLwd0B1jG08NBF3R5rqULtv/f8x3rOFByTDz4J53ttIQEDmALqKqXY0J+XQeN0aV2FBxY8nJDf88yvOPAqQ==}
'@vue/reactivity@3.5.13':
resolution: {integrity: sha512-NaCwtw8o48B9I6L1zl2p41OHo/2Z4wqYGGIK1Khu5T7yxrn+ATOixn/Udn2m+6kZKB/J7cuT9DbWWhRxqixACg==}
'@vue/runtime-core@3.3.4': '@vue/runtime-core@3.3.4':
resolution: {integrity: sha512-R+bqxMN6pWO7zGI4OMlmvePOdP2c93GsHFM/siJI7O2nxFRzj55pLwkpCedEY+bTMgp5miZ8CxfIZo3S+gFqvA==} resolution: {integrity: sha512-R+bqxMN6pWO7zGI4OMlmvePOdP2c93GsHFM/siJI7O2nxFRzj55pLwkpCedEY+bTMgp5miZ8CxfIZo3S+gFqvA==}
'@vue/runtime-core@3.5.13':
resolution: {integrity: sha512-Fj4YRQ3Az0WTZw1sFe+QDb0aXCerigEpw418pw1HBUKFtnQHWzwojaukAs2X/c9DQz4MQ4bsXTGlcpGxU/RCIw==}
'@vue/runtime-dom@3.3.4': '@vue/runtime-dom@3.3.4':
resolution: {integrity: sha512-Aj5bTJ3u5sFsUckRghsNjVTtxZQ1OyMWCr5dZRAPijF/0Vy4xEoRCwLyHXcj4D0UFbJ4lbx3gPTgg06K/GnPnQ==} resolution: {integrity: sha512-Aj5bTJ3u5sFsUckRghsNjVTtxZQ1OyMWCr5dZRAPijF/0Vy4xEoRCwLyHXcj4D0UFbJ4lbx3gPTgg06K/GnPnQ==}
'@vue/runtime-dom@3.5.13':
resolution: {integrity: sha512-dLaj94s93NYLqjLiyFzVs9X6dWhTdAlEAciC3Moq7gzAc13VJUdCnjjRurNM6uTLFATRHexHCTu/Xp3eW6yoog==}
'@vue/server-renderer@3.3.4': '@vue/server-renderer@3.3.4':
resolution: {integrity: sha512-Q6jDDzR23ViIb67v+vM1Dqntu+HUexQcsWKhhQa4ARVzxOY2HbC7QRW/ggkDBd5BU+uM1sV6XOAP0b216o34JQ==} resolution: {integrity: sha512-Q6jDDzR23ViIb67v+vM1Dqntu+HUexQcsWKhhQa4ARVzxOY2HbC7QRW/ggkDBd5BU+uM1sV6XOAP0b216o34JQ==}
peerDependencies: peerDependencies:
@ -2384,11 +2366,6 @@ packages:
peerDependencies: peerDependencies:
vue: 3.3.7 vue: 3.3.7
'@vue/server-renderer@3.5.13':
resolution: {integrity: sha512-wAi4IRJV/2SAW3htkTlB+dHeRmpTiVIK1OGLWV1yeStVSebSQQOwGwIq0D3ZIoBj2C2qpgz5+vX9iEBkTdk5YA==}
peerDependencies:
vue: 3.5.13
'@vue/shared@3.2.47': '@vue/shared@3.2.47':
resolution: {integrity: sha512-BHGyyGN3Q97EZx0taMQ+OLNuZcW3d37ZEVmEAyeoA9ERdGvm9Irc/0Fua8SNyOtV1w6BS4q25wbMzJujO9HIfQ==} resolution: {integrity: sha512-BHGyyGN3Q97EZx0taMQ+OLNuZcW3d37ZEVmEAyeoA9ERdGvm9Irc/0Fua8SNyOtV1w6BS4q25wbMzJujO9HIfQ==}
@ -2398,9 +2375,6 @@ packages:
'@vue/shared@3.3.7': '@vue/shared@3.3.7':
resolution: {integrity: sha512-N/tbkINRUDExgcPTBvxNkvHGu504k8lzlNQRITVnm6YjOjwa4r0nnbd4Jb01sNpur5hAllyRJzSK5PvB9PPwRg==} resolution: {integrity: sha512-N/tbkINRUDExgcPTBvxNkvHGu504k8lzlNQRITVnm6YjOjwa4r0nnbd4Jb01sNpur5hAllyRJzSK5PvB9PPwRg==}
'@vue/shared@3.5.13':
resolution: {integrity: sha512-/hnE/qP5ZoGpol0a5mDi45bOd7t3tjYJBjsgCsivow7D48cJeV5l05RD82lPqi7gRiphZM37rnhW1l6ZoCNNnQ==}
'@vue/test-utils@2.3.2': '@vue/test-utils@2.3.2':
resolution: {integrity: sha512-hJnVaYhbrIm0yBS0+e1Y0Sj85cMyAi+PAbK4JHqMRUZ6S622Goa+G7QzkRSyvCteG8wop7tipuEbHoZo26wsSA==} resolution: {integrity: sha512-hJnVaYhbrIm0yBS0+e1Y0Sj85cMyAi+PAbK4JHqMRUZ6S622Goa+G7QzkRSyvCteG8wop7tipuEbHoZo26wsSA==}
peerDependencies: peerDependencies:
@ -2434,8 +2408,10 @@ packages:
'@vueuse/shared@10.3.0': '@vueuse/shared@10.3.0':
resolution: {integrity: sha512-kGqCTEuFPMK4+fNWy6dUOiYmxGcUbtznMwBZLC1PubidF4VZY05B+Oht7Jh7/6x4VOWGpvu3R37WHi81cKpiqg==} resolution: {integrity: sha512-kGqCTEuFPMK4+fNWy6dUOiYmxGcUbtznMwBZLC1PubidF4VZY05B+Oht7Jh7/6x4VOWGpvu3R37WHi81cKpiqg==}
'@vueuse/shared@12.0.0': '@vueuse/shared@13.9.0':
resolution: {integrity: sha512-3i6qtcq2PIio5i/vVYidkkcgvmTjCqrf26u+Fd4LhnbBmIT6FN8y6q/GJERp8lfcB9zVEfjdV0Br0443qZuJpw==} resolution: {integrity: sha512-e89uuTLMh0U5cZ9iDpEI2senqPGfbPRTHM/0AaQkcxnpqjkZqDYP8rpfm7edOz8s+pOCOROEy1PIveSW8+fL5g==}
peerDependencies:
vue: ^3.5.0
'@zhead/schema@1.0.0-beta.13': '@zhead/schema@1.0.0-beta.13':
resolution: {integrity: sha512-P1A1vRGFBhITco8Iw4/hvnDYoE/SoVrd71dW1pBFdXJb3vP+pBtoOuhbEKy0ROJGOyzQuqvFibcwzyLlWMqNiQ==} resolution: {integrity: sha512-P1A1vRGFBhITco8Iw4/hvnDYoE/SoVrd71dW1pBFdXJb3vP+pBtoOuhbEKy0ROJGOyzQuqvFibcwzyLlWMqNiQ==}
@ -2896,9 +2872,6 @@ packages:
csstype@3.1.2: csstype@3.1.2:
resolution: {integrity: sha512-I7K1Uu0MBPzaFKg4nI5Q7Vs2t+3gWWW648spaF+Rg7pI9ds18Ugn+lvg4SHczUdKlHI5LWBXyqfS8+DufyBsgQ==} resolution: {integrity: sha512-I7K1Uu0MBPzaFKg4nI5Q7Vs2t+3gWWW648spaF+Rg7pI9ds18Ugn+lvg4SHczUdKlHI5LWBXyqfS8+DufyBsgQ==}
csstype@3.1.3:
resolution: {integrity: sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==}
dash-get@1.0.2: dash-get@1.0.2:
resolution: {integrity: sha512-4FbVrHDwfOASx7uQVxeiCTo7ggSdYZbqs8lH+WU6ViypPlDbe9y6IP5VVUDQBv9DcnyaiPT5XT0UWHgJ64zLeQ==} resolution: {integrity: sha512-4FbVrHDwfOASx7uQVxeiCTo7ggSdYZbqs8lH+WU6ViypPlDbe9y6IP5VVUDQBv9DcnyaiPT5XT0UWHgJ64zLeQ==}
@ -4009,6 +3982,9 @@ packages:
resolution: {integrity: sha512-pmfRbVRs/7khFrSAYnSiJ8C0D5GvzkE4Ey2pAvUcJsw1ly/p+7ut27jbJrjY79BpAJQJ4gXYFtK6d1Aub+9baQ==} resolution: {integrity: sha512-pmfRbVRs/7khFrSAYnSiJ8C0D5GvzkE4Ey2pAvUcJsw1ly/p+7ut27jbJrjY79BpAJQJ4gXYFtK6d1Aub+9baQ==}
hasBin: true hasBin: true
jose@6.1.0:
resolution: {integrity: sha512-TTQJyoEoKcC1lscpVDCSsVgYzUDg/0Bt3WE//WiTPK6uOCQC2KZS4MpugbMWt/zyjkopgZoXhZuCi00gLudfUA==}
js-base64@3.7.7: js-base64@3.7.7:
resolution: {integrity: sha512-7rCnleh0z2CkXhH67J8K1Ytz0b2Y+yxTPL+/KOJoa20hfnVQ/3/T6W/KflYI4bRHRagNeXeU2bkNGI3v1oS/lw==} resolution: {integrity: sha512-7rCnleh0z2CkXhH67J8K1Ytz0b2Y+yxTPL+/KOJoa20hfnVQ/3/T6W/KflYI4bRHRagNeXeU2bkNGI3v1oS/lw==}
@ -4868,10 +4844,6 @@ packages:
resolution: {integrity: sha512-PXNdCiPqDqeUou+w1C2eTQbNfxKSuMxqTCuvlmmMsk1NWHL5fRrhY6Pl0qEYYc6+QqGClco1Qj8XnjPego4wfg==} resolution: {integrity: sha512-PXNdCiPqDqeUou+w1C2eTQbNfxKSuMxqTCuvlmmMsk1NWHL5fRrhY6Pl0qEYYc6+QqGClco1Qj8XnjPego4wfg==}
hasBin: true hasBin: true
resolve@1.22.8:
resolution: {integrity: sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==}
hasBin: true
resolve@1.22.9: resolve@1.22.9:
resolution: {integrity: sha512-QxrmX1DzraFIi9PxdG5VkRfRwIgjwyud+z/iBwfRRrVmHc+P9Q7u2lSSpQ6bjr2gy5lrqIiU9vb6iAeGf2400A==} resolution: {integrity: sha512-QxrmX1DzraFIi9PxdG5VkRfRwIgjwyud+z/iBwfRRrVmHc+P9Q7u2lSSpQ6bjr2gy5lrqIiU9vb6iAeGf2400A==}
hasBin: true hasBin: true
@ -4962,11 +4934,6 @@ packages:
engines: {node: '>=10'} engines: {node: '>=10'}
hasBin: true hasBin: true
semver@7.5.4:
resolution: {integrity: sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==}
engines: {node: '>=10'}
hasBin: true
semver@7.6.3: semver@7.6.3:
resolution: {integrity: sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==} resolution: {integrity: sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==}
engines: {node: '>=10'} engines: {node: '>=10'}
@ -5071,6 +5038,7 @@ packages:
source-map@0.8.0-beta.0: source-map@0.8.0-beta.0:
resolution: {integrity: sha512-2ymg6oRBpebeZi9UUNsgQ89bhx01TcTkmNTGnNO88imTmbSgy4nfujrgVEFKWpMTEGA11EDkTt7mqObTPdigIA==} resolution: {integrity: sha512-2ymg6oRBpebeZi9UUNsgQ89bhx01TcTkmNTGnNO88imTmbSgy4nfujrgVEFKWpMTEGA11EDkTt7mqObTPdigIA==}
engines: {node: '>= 8'} engines: {node: '>= 8'}
deprecated: The work that was done in this beta branch won't be included in future versions
sourcemap-codec@1.4.8: sourcemap-codec@1.4.8:
resolution: {integrity: sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA==} resolution: {integrity: sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA==}
@ -5701,14 +5669,6 @@ packages:
vue@3.3.4: vue@3.3.4:
resolution: {integrity: sha512-VTyEYn3yvIeY1Py0WaYGZsXnz3y5UnGi62GjVEqvEGPl6nxbOrCXbVOTQWBEJUqAyTUk2uJ5JLVnYJ6ZzGbrSw==} resolution: {integrity: sha512-VTyEYn3yvIeY1Py0WaYGZsXnz3y5UnGi62GjVEqvEGPl6nxbOrCXbVOTQWBEJUqAyTUk2uJ5JLVnYJ6ZzGbrSw==}
vue@3.5.13:
resolution: {integrity: sha512-wmeiSMxkZCSc+PM2w2VRsOYAZC8GdipNFRTsLSfodVqI9mbejKeXEGr8SckuLnrQPGe3oJN5c3K0vpoU9q/wCQ==}
peerDependencies:
typescript: '*'
peerDependenciesMeta:
typescript:
optional: true
vuedraggable@4.1.0: vuedraggable@4.1.0:
resolution: {integrity: sha512-FU5HCWBmsf20GpP3eudURW3WdWTKIbEIQxh9/8GE806hydR9qZqRRxRE3RjqX7PkuLuMQG/A7n3cfj9rCEchww==} resolution: {integrity: sha512-FU5HCWBmsf20GpP3eudURW3WdWTKIbEIQxh9/8GE806hydR9qZqRRxRE3RjqX7PkuLuMQG/A7n3cfj9rCEchww==}
peerDependencies: peerDependencies:
@ -6117,7 +6077,7 @@ snapshots:
'@babel/traverse': 7.23.2 '@babel/traverse': 7.23.2
'@babel/types': 7.23.0 '@babel/types': 7.23.0
convert-source-map: 2.0.0 convert-source-map: 2.0.0
debug: 4.3.4 debug: 4.4.0
gensync: 1.0.0-beta.2 gensync: 1.0.0-beta.2
json5: 2.2.3 json5: 2.2.3
semver: 6.3.1 semver: 6.3.1
@ -7000,7 +6960,7 @@ snapshots:
'@babel/helper-split-export-declaration': 7.22.6 '@babel/helper-split-export-declaration': 7.22.6
'@babel/parser': 7.22.10 '@babel/parser': 7.22.10
'@babel/types': 7.22.10 '@babel/types': 7.22.10
debug: 4.3.4 debug: 4.4.0
globals: 11.12.0 globals: 11.12.0
transitivePeerDependencies: transitivePeerDependencies:
- supports-color - supports-color
@ -7015,7 +6975,7 @@ snapshots:
'@babel/helper-split-export-declaration': 7.22.5 '@babel/helper-split-export-declaration': 7.22.5
'@babel/parser': 7.22.5 '@babel/parser': 7.22.5
'@babel/types': 7.22.5 '@babel/types': 7.22.5
debug: 4.3.4 debug: 4.4.0
globals: 11.12.0 globals: 11.12.0
transitivePeerDependencies: transitivePeerDependencies:
- supports-color - supports-color
@ -7030,7 +6990,7 @@ snapshots:
'@babel/helper-split-export-declaration': 7.22.6 '@babel/helper-split-export-declaration': 7.22.6
'@babel/parser': 7.23.0 '@babel/parser': 7.23.0
'@babel/types': 7.23.0 '@babel/types': 7.23.0
debug: 4.3.4 debug: 4.4.0
globals: 11.12.0 globals: 11.12.0
transitivePeerDependencies: transitivePeerDependencies:
- supports-color - supports-color
@ -7401,7 +7361,7 @@ snapshots:
'@linaria/logger@4.0.0': '@linaria/logger@4.0.0':
dependencies: dependencies:
debug: 4.3.4 debug: 4.4.0
picocolors: 1.0.0 picocolors: 1.0.0
transitivePeerDependencies: transitivePeerDependencies:
- supports-color - supports-color
@ -7883,7 +7843,7 @@ snapshots:
graphemer: 1.4.0 graphemer: 1.4.0
ignore: 5.2.4 ignore: 5.2.4
natural-compare: 1.4.0 natural-compare: 1.4.0
semver: 7.5.4 semver: 7.6.3
ts-api-utils: 1.0.1(typescript@5.2.2) ts-api-utils: 1.0.1(typescript@5.2.2)
optionalDependencies: optionalDependencies:
typescript: 5.2.2 typescript: 5.2.2
@ -7940,10 +7900,10 @@ snapshots:
dependencies: dependencies:
'@typescript-eslint/types': 5.60.0 '@typescript-eslint/types': 5.60.0
'@typescript-eslint/visitor-keys': 5.60.0 '@typescript-eslint/visitor-keys': 5.60.0
debug: 4.3.4 debug: 4.4.0
globby: 11.1.0 globby: 11.1.0
is-glob: 4.0.3 is-glob: 4.0.3
semver: 7.5.4 semver: 7.6.3
tsutils: 3.21.0(typescript@5.2.2) tsutils: 3.21.0(typescript@5.2.2)
optionalDependencies: optionalDependencies:
typescript: 5.2.2 typescript: 5.2.2
@ -7957,7 +7917,7 @@ snapshots:
debug: 4.3.4 debug: 4.3.4
globby: 11.1.0 globby: 11.1.0
is-glob: 4.0.3 is-glob: 4.0.3
semver: 7.5.4 semver: 7.6.3
ts-api-utils: 1.0.1(typescript@5.2.2) ts-api-utils: 1.0.1(typescript@5.2.2)
optionalDependencies: optionalDependencies:
typescript: 5.2.2 typescript: 5.2.2
@ -7968,10 +7928,10 @@ snapshots:
dependencies: dependencies:
'@typescript-eslint/types': 6.9.1 '@typescript-eslint/types': 6.9.1
'@typescript-eslint/visitor-keys': 6.9.1 '@typescript-eslint/visitor-keys': 6.9.1
debug: 4.3.4 debug: 4.4.0
globby: 11.1.0 globby: 11.1.0
is-glob: 4.0.3 is-glob: 4.0.3
semver: 7.5.4 semver: 7.6.3
ts-api-utils: 1.0.1(typescript@5.2.2) ts-api-utils: 1.0.1(typescript@5.2.2)
optionalDependencies: optionalDependencies:
typescript: 5.2.2 typescript: 5.2.2
@ -7988,7 +7948,7 @@ snapshots:
'@typescript-eslint/typescript-estree': 5.60.0(typescript@5.2.2) '@typescript-eslint/typescript-estree': 5.60.0(typescript@5.2.2)
eslint: 8.47.0 eslint: 8.47.0
eslint-scope: 5.1.1 eslint-scope: 5.1.1
semver: 7.5.4 semver: 7.6.3
transitivePeerDependencies: transitivePeerDependencies:
- supports-color - supports-color
- typescript - typescript
@ -8002,7 +7962,7 @@ snapshots:
'@typescript-eslint/types': 6.4.1 '@typescript-eslint/types': 6.4.1
'@typescript-eslint/typescript-estree': 6.4.1(typescript@5.2.2) '@typescript-eslint/typescript-estree': 6.4.1(typescript@5.2.2)
eslint: 8.47.0 eslint: 8.47.0
semver: 7.5.4 semver: 7.6.3
transitivePeerDependencies: transitivePeerDependencies:
- supports-color - supports-color
- typescript - typescript
@ -8016,7 +7976,7 @@ snapshots:
'@typescript-eslint/types': 6.9.1 '@typescript-eslint/types': 6.9.1
'@typescript-eslint/typescript-estree': 6.9.1(typescript@5.2.2) '@typescript-eslint/typescript-estree': 6.9.1(typescript@5.2.2)
eslint: 8.47.0 eslint: 8.47.0
semver: 7.5.4 semver: 7.6.3
transitivePeerDependencies: transitivePeerDependencies:
- supports-color - supports-color
- typescript - typescript
@ -8049,15 +8009,13 @@ snapshots:
dependencies: dependencies:
'@unhead/schema': 0.5.1 '@unhead/schema': 0.5.1
'@unhead/vue@0.5.1(typescript@5.2.2)(vue@3.3.4)': '@unhead/vue@0.5.1(vue@3.3.4)':
dependencies: dependencies:
'@unhead/dom': 0.5.1 '@unhead/dom': 0.5.1
'@unhead/schema': 0.5.1 '@unhead/schema': 0.5.1
'@vueuse/shared': 12.0.0(typescript@5.2.2) '@vueuse/shared': 13.9.0(vue@3.3.4)
unhead: 0.5.1 unhead: 0.5.1
vue: 3.3.4 vue: 3.3.4
transitivePeerDependencies:
- typescript
'@unocss/astro@0.65.1(rollup@2.79.2)(vite@4.4.9(@types/node@18.15.11)(less@4.1.3)(terser@5.37.0))(vue@3.3.4)': '@unocss/astro@0.65.1(rollup@2.79.2)(vite@4.4.9(@types/node@18.15.11)(less@4.1.3)(terser@5.37.0))(vue@3.3.4)':
dependencies: dependencies:
@ -8341,14 +8299,6 @@ snapshots:
source-map-js: 1.0.2 source-map-js: 1.0.2
optional: true optional: true
'@vue/compiler-core@3.5.13':
dependencies:
'@babel/parser': 7.26.3
'@vue/shared': 3.5.13
entities: 4.5.0
estree-walker: 2.0.2
source-map-js: 1.2.1
'@vue/compiler-dom@3.2.47': '@vue/compiler-dom@3.2.47':
dependencies: dependencies:
'@vue/compiler-core': 3.2.47 '@vue/compiler-core': 3.2.47
@ -8365,11 +8315,6 @@ snapshots:
'@vue/shared': 3.3.7 '@vue/shared': 3.3.7
optional: true optional: true
'@vue/compiler-dom@3.5.13':
dependencies:
'@vue/compiler-core': 3.5.13
'@vue/shared': 3.5.13
'@vue/compiler-sfc@3.2.47': '@vue/compiler-sfc@3.2.47':
dependencies: dependencies:
'@babel/parser': 7.21.4 '@babel/parser': 7.21.4
@ -8396,18 +8341,6 @@ snapshots:
postcss: 8.4.28 postcss: 8.4.28
source-map-js: 1.0.2 source-map-js: 1.0.2
'@vue/compiler-sfc@3.5.13':
dependencies:
'@babel/parser': 7.26.3
'@vue/compiler-core': 3.5.13
'@vue/compiler-dom': 3.5.13
'@vue/compiler-ssr': 3.5.13
'@vue/shared': 3.5.13
estree-walker: 2.0.2
magic-string: 0.30.15
postcss: 8.4.49
source-map-js: 1.2.1
'@vue/compiler-ssr@3.2.47': '@vue/compiler-ssr@3.2.47':
dependencies: dependencies:
'@vue/compiler-dom': 3.2.47 '@vue/compiler-dom': 3.2.47
@ -8424,11 +8357,6 @@ snapshots:
'@vue/shared': 3.3.7 '@vue/shared': 3.3.7
optional: true optional: true
'@vue/compiler-ssr@3.5.13':
dependencies:
'@vue/compiler-dom': 3.5.13
'@vue/shared': 3.5.13
'@vue/devtools-api@6.5.0': {} '@vue/devtools-api@6.5.0': {}
'@vue/language-core@1.8.1(typescript@5.2.2)': '@vue/language-core@1.8.1(typescript@5.2.2)':
@ -8464,33 +8392,17 @@ snapshots:
dependencies: dependencies:
'@vue/shared': 3.3.4 '@vue/shared': 3.3.4
'@vue/reactivity@3.5.13':
dependencies:
'@vue/shared': 3.5.13
'@vue/runtime-core@3.3.4': '@vue/runtime-core@3.3.4':
dependencies: dependencies:
'@vue/reactivity': 3.3.4 '@vue/reactivity': 3.3.4
'@vue/shared': 3.3.4 '@vue/shared': 3.3.4
'@vue/runtime-core@3.5.13':
dependencies:
'@vue/reactivity': 3.5.13
'@vue/shared': 3.5.13
'@vue/runtime-dom@3.3.4': '@vue/runtime-dom@3.3.4':
dependencies: dependencies:
'@vue/runtime-core': 3.3.4 '@vue/runtime-core': 3.3.4
'@vue/shared': 3.3.4 '@vue/shared': 3.3.4
csstype: 3.1.2 csstype: 3.1.2
'@vue/runtime-dom@3.5.13':
dependencies:
'@vue/reactivity': 3.5.13
'@vue/runtime-core': 3.5.13
'@vue/shared': 3.5.13
csstype: 3.1.3
'@vue/server-renderer@3.3.4(vue@3.3.4)': '@vue/server-renderer@3.3.4(vue@3.3.4)':
dependencies: dependencies:
'@vue/compiler-ssr': 3.3.4 '@vue/compiler-ssr': 3.3.4
@ -8504,12 +8416,6 @@ snapshots:
vue: 3.3.4 vue: 3.3.4
optional: true optional: true
'@vue/server-renderer@3.5.13(vue@3.5.13(typescript@5.2.2))':
dependencies:
'@vue/compiler-ssr': 3.5.13
'@vue/shared': 3.5.13
vue: 3.5.13(typescript@5.2.2)
'@vue/shared@3.2.47': {} '@vue/shared@3.2.47': {}
'@vue/shared@3.3.4': {} '@vue/shared@3.3.4': {}
@ -8517,8 +8423,6 @@ snapshots:
'@vue/shared@3.3.7': '@vue/shared@3.3.7':
optional: true optional: true
'@vue/shared@3.5.13': {}
'@vue/test-utils@2.3.2(vue@3.3.4)': '@vue/test-utils@2.3.2(vue@3.3.4)':
dependencies: dependencies:
js-beautify: 1.14.6 js-beautify: 1.14.6
@ -8546,14 +8450,12 @@ snapshots:
- '@vue/composition-api' - '@vue/composition-api'
- vue - vue
'@vueuse/head@1.0.0(typescript@5.2.2)(vue@3.3.4)': '@vueuse/head@1.0.0(vue@3.3.4)':
dependencies: dependencies:
'@unhead/schema': 0.5.1 '@unhead/schema': 0.5.1
'@unhead/ssr': 0.5.1 '@unhead/ssr': 0.5.1
'@unhead/vue': 0.5.1(typescript@5.2.2)(vue@3.3.4) '@unhead/vue': 0.5.1(vue@3.3.4)
vue: 3.3.4 vue: 3.3.4
transitivePeerDependencies:
- typescript
'@vueuse/metadata@10.3.0': {} '@vueuse/metadata@10.3.0': {}
@ -8580,11 +8482,9 @@ snapshots:
- '@vue/composition-api' - '@vue/composition-api'
- vue - vue
'@vueuse/shared@12.0.0(typescript@5.2.2)': '@vueuse/shared@13.9.0(vue@3.3.4)':
dependencies: dependencies:
vue: 3.5.13(typescript@5.2.2) vue: 3.3.4
transitivePeerDependencies:
- typescript
'@zhead/schema@1.0.0-beta.13': {} '@zhead/schema@1.0.0-beta.13': {}
@ -8780,7 +8680,7 @@ snapshots:
builtins@5.0.1: builtins@5.0.1:
dependencies: dependencies:
semver: 7.5.4 semver: 7.6.3
bundle-require@5.0.0(esbuild@0.23.1): bundle-require@5.0.0(esbuild@0.23.1):
dependencies: dependencies:
@ -9084,8 +8984,6 @@ snapshots:
csstype@3.1.2: {} csstype@3.1.2: {}
csstype@3.1.3: {}
dash-get@1.0.2: {} dash-get@1.0.2: {}
data-uri-to-buffer@4.0.1: {} data-uri-to-buffer@4.0.1: {}
@ -9529,7 +9427,7 @@ snapshots:
is-core-module: 2.13.0 is-core-module: 2.13.0
minimatch: 3.1.2 minimatch: 3.1.2
resolve: 1.22.4 resolve: 1.22.4
semver: 7.5.4 semver: 7.6.3
eslint-plugin-no-only-tests@3.1.0: {} eslint-plugin-no-only-tests@3.1.0: {}
@ -9553,7 +9451,7 @@ snapshots:
read-pkg-up: 7.0.1 read-pkg-up: 7.0.1
regexp-tree: 0.1.27 regexp-tree: 0.1.27
regjsparser: 0.10.0 regjsparser: 0.10.0
semver: 7.5.4 semver: 7.6.3
strip-indent: 3.0.0 strip-indent: 3.0.0
eslint-plugin-unused-imports@3.0.0(@typescript-eslint/eslint-plugin@6.4.1(@typescript-eslint/parser@6.4.1(eslint@8.47.0)(typescript@5.2.2))(eslint@8.47.0)(typescript@5.2.2))(eslint@8.47.0): eslint-plugin-unused-imports@3.0.0(@typescript-eslint/eslint-plugin@6.4.1(@typescript-eslint/parser@6.4.1(eslint@8.47.0)(typescript@5.2.2))(eslint@8.47.0)(typescript@5.2.2))(eslint@8.47.0):
@ -9570,7 +9468,7 @@ snapshots:
natural-compare: 1.4.0 natural-compare: 1.4.0
nth-check: 2.1.1 nth-check: 2.1.1
postcss-selector-parser: 6.0.13 postcss-selector-parser: 6.0.13
semver: 7.5.4 semver: 7.6.3
vue-eslint-parser: 9.3.1(eslint@8.47.0) vue-eslint-parser: 9.3.1(eslint@8.47.0)
xml-name-validator: 4.0.0 xml-name-validator: 4.0.0
transitivePeerDependencies: transitivePeerDependencies:
@ -10321,6 +10219,8 @@ snapshots:
jiti@2.0.0-beta.3: {} jiti@2.0.0-beta.3: {}
jose@6.1.0: {}
js-base64@3.7.7: {} js-base64@3.7.7: {}
js-beautify@1.14.6: js-beautify@1.14.6:
@ -10400,7 +10300,7 @@ snapshots:
acorn: 8.10.0 acorn: 8.10.0
eslint-visitor-keys: 3.4.3 eslint-visitor-keys: 3.4.3
espree: 9.6.1 espree: 9.6.1
semver: 7.5.4 semver: 7.6.3
jsonc-parser@3.2.0: {} jsonc-parser@3.2.0: {}
@ -10753,7 +10653,7 @@ snapshots:
normalize-package-data@2.5.0: normalize-package-data@2.5.0:
dependencies: dependencies:
hosted-git-info: 2.8.9 hosted-git-info: 2.8.9
resolve: 1.22.8 resolve: 1.22.9
semver: 5.7.2 semver: 5.7.2
validate-npm-package-license: 3.0.4 validate-npm-package-license: 3.0.4
@ -11267,13 +11167,7 @@ snapshots:
resolve@1.22.4: resolve@1.22.4:
dependencies: dependencies:
is-core-module: 2.13.1 is-core-module: 2.16.0
path-parse: 1.0.7
supports-preserve-symlinks-flag: 1.0.0
resolve@1.22.8:
dependencies:
is-core-module: 2.13.1
path-parse: 1.0.7 path-parse: 1.0.7
supports-preserve-symlinks-flag: 1.0.0 supports-preserve-symlinks-flag: 1.0.0
@ -11357,10 +11251,6 @@ snapshots:
dependencies: dependencies:
lru-cache: 6.0.0 lru-cache: 6.0.0
semver@7.5.4:
dependencies:
lru-cache: 6.0.0
semver@7.6.3: {} semver@7.6.3: {}
sentence-case@2.1.1: sentence-case@2.1.1:
@ -12132,7 +12022,7 @@ snapshots:
espree: 9.6.1 espree: 9.6.1
esquery: 1.5.0 esquery: 1.5.0
lodash: 4.17.21 lodash: 4.17.21
semver: 7.5.4 semver: 7.6.3
transitivePeerDependencies: transitivePeerDependencies:
- supports-color - supports-color
@ -12180,16 +12070,6 @@ snapshots:
'@vue/server-renderer': 3.3.4(vue@3.3.4) '@vue/server-renderer': 3.3.4(vue@3.3.4)
'@vue/shared': 3.3.4 '@vue/shared': 3.3.4
vue@3.5.13(typescript@5.2.2):
dependencies:
'@vue/compiler-dom': 3.5.13
'@vue/compiler-sfc': 3.5.13
'@vue/runtime-dom': 3.5.13
'@vue/server-renderer': 3.5.13(vue@3.5.13(typescript@5.2.2))
'@vue/shared': 3.5.13
optionalDependencies:
typescript: 5.2.2
vuedraggable@4.1.0(vue@3.3.4): vuedraggable@4.1.0(vue@3.3.4):
dependencies: dependencies:
sortablejs: 1.14.0 sortablejs: 1.14.0

View File

@ -66,6 +66,7 @@ import { tool as htmlEntities } from './html-entities';
import { tool as baseConverter } from './integer-base-converter'; import { tool as baseConverter } from './integer-base-converter';
import { tool as jsonViewer } from './json-viewer'; import { tool as jsonViewer } from './json-viewer';
import { tool as jwtParser } from './jwt-parser'; import { tool as jwtParser } from './jwt-parser';
import { tool as jwtGenerator } from './jwt-generator';
import { tool as loremIpsumGenerator } from './lorem-ipsum-generator'; import { tool as loremIpsumGenerator } from './lorem-ipsum-generator';
import { tool as mathEvaluator } from './math-evaluator'; import { tool as mathEvaluator } from './math-evaluator';
import { tool as metaTagGenerator } from './meta-tag-generator'; import { tool as metaTagGenerator } from './meta-tag-generator';
@ -91,7 +92,20 @@ import { tool as yamlViewer } from './yaml-viewer';
export const toolsByCategory: ToolCategory[] = [ export const toolsByCategory: ToolCategory[] = [
{ {
name: 'Crypto', name: 'Crypto',
components: [tokenGenerator, hashText, bcrypt, uuidGenerator, ulidGenerator, cypher, bip39, hmacGenerator, rsaKeyPairGenerator, passwordStrengthAnalyser, pdfSignatureChecker], components: [
tokenGenerator,
jwtGenerator,
hashText,
bcrypt,
uuidGenerator,
ulidGenerator,
cypher,
bip39,
hmacGenerator,
rsaKeyPairGenerator,
passwordStrengthAnalyser,
pdfSignatureChecker,
],
}, },
{ {
name: 'Converter', name: 'Converter',
@ -164,7 +178,14 @@ export const toolsByCategory: ToolCategory[] = [
}, },
{ {
name: 'Network', name: 'Network',
components: [ipv4SubnetCalculator, ipv4AddressConverter, ipv4RangeExpander, macAddressLookup, macAddressGenerator, ipv6UlaGenerator], components: [
ipv4SubnetCalculator,
ipv4AddressConverter,
ipv4RangeExpander,
macAddressLookup,
macAddressGenerator,
ipv6UlaGenerator,
],
}, },
{ {
name: 'Math', name: 'Math',
@ -194,5 +215,5 @@ export const toolsByCategory: ToolCategory[] = [
export const tools = toolsByCategory.flatMap(({ components }) => components); export const tools = toolsByCategory.flatMap(({ components }) => components);
export const toolsWithCategory = toolsByCategory.flatMap(({ components, name }) => export const toolsWithCategory = toolsByCategory.flatMap(({ components, name }) =>
components.map(tool => ({ category: name, ...tool })), components.map((tool) => ({ category: name, ...tool })),
); );

View File

@ -0,0 +1,12 @@
import { ArrowsShuffle } from '@vicons/tabler';
import { defineTool } from '../tool';
import { translate } from '@/plugins/i18n.plugin';
export const tool = defineTool({
name: translate('tools.jwt-generator.title'),
path: '/jwt-generator',
description: translate('tools.jwt-generator.description'),
keywords: ['token', 'random', 'string', 'alphanumeric', 'symbols', 'number', 'letters', 'lowercase', 'uppercase', 'password'],
component: () => import('./jwt-generator.tool.vue'),
icon: ArrowsShuffle,
});

View File

@ -0,0 +1,112 @@
<script setup lang="ts">
import JSON5 from 'json5';
import * as jose from 'jose';
import { useCopy } from '@/composable/copy';
import type { UseValidationRule } from '@/composable/validation';
const algs = ['HS256', 'HS384', 'HS512'] as const;
type Encoding = 'JWT';
const rules: UseValidationRule<string>[] = [
{
validator: (v: string) => v === '' || JSON5.parse(v),
message: 'Provided JSON is not valid.',
},
];
const { t } = useI18n();
const alg = ref<(typeof algs)[number]>('HS256');
const encoding = ref<Encoding>('JWT');
const payload = ref('');
const secret = ref('');
const jwt = ref('');
watch(
[alg, encoding, payload, secret],
async () => {
if (!payload.value || !secret.value) {
jwt.value = '';
return;
}
const parsedPayload = JSON5.parse(payload.value);
const decodedSecret = new TextEncoder().encode(secret.value);
console.error('Decoded secret:', decodedSecret);
try {
const token = await new jose.SignJWT(parsedPayload)
.setProtectedHeader({ alg: alg.value, typ: 'JWT' })
.setIssuedAt(parsedPayload.iat || undefined)
.setExpirationTime(parsedPayload.exp || undefined)
.sign(decodedSecret);
jwt.value = token;
} catch (e) {
jwt.value = `Error: ${(e as Error).message}`;
}
},
{ immediate: true },
);
const { copy } = useCopy({ source: jwt });
</script>
<template>
<div flex flex-col gap-4>
<div flex gap-2>
<c-select
v-model:value="alg"
:label="t('tools.jwt-generator.algorithm.label')"
flex-1
:placeholder="t('tools.jwt-generator.algorithm.placeholder')"
:options="algs.map((a) => ({ label: a, value: a }))"
/>
<c-select
v-model:value="encoding"
:label="t('tools.jwt-generator.encoding.label')"
flex-1
:placeholder="t('tools.jwt-generator.encoding.placeholder')"
:options="[
{
label: 'JWT',
value: 'JWT',
},
]"
/>
</div>
<c-input-text
v-model:value="payload"
multiline
raw-text
:placeholder="t('tools.jwt-generator.payload.placeholder')"
rows="8"
autosize
autofocus
:label="t('tools.jwt-generator.payload.label')"
:input-validation-rules="rules"
/>
<c-input-text
v-model:value="secret"
raw-text
:placeholder="t('tools.jwt-generator.secret.placeholder')"
:label="t('tools.jwt-generator.secret.label')"
clearable
/>
<c-input-text
v-model:value="jwt"
:label="t('tools.jwt-generator.jwt.label')"
:placeholder="t('tools.jwt-generator.jwt.placeholder')"
rows="5"
multiline
raw-text
autofocus
mb-3
/>
<div flex justify-center>
<c-button @click="copy()"> {{ t('tools.jwt-generator.jwt.copied') }} </c-button>
</div>
</div>
</template>