From f3e14fc18f5d81c6a71245dc253fd04169e4f933 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Sat, 26 Aug 2023 16:17:19 +0200 Subject: [PATCH 001/138] chore(deps): update dependency typescript to ~5.2.0 (#587) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- package.json | 2 +- pnpm-lock.yaml | 154 ++++++++++++++++++++++++------------------------- 2 files changed, 78 insertions(+), 78 deletions(-) diff --git a/package.json b/package.json index 2beda467..05170f71 100644 --- a/package.json +++ b/package.json @@ -116,7 +116,7 @@ "jsdom": "^22.0.0", "less": "^4.1.3", "prettier": "^3.0.0", - "typescript": "~5.1.0", + "typescript": "~5.2.0", "unocss": "^0.55.0", "unocss-preset-scrollbar": "^0.2.1", "unplugin-icons": "^0.16.5", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index b4837e3f..ae42504b 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -112,7 +112,7 @@ dependencies: version: 12.0.52 pinia: specifier: ^2.0.34 - version: 2.0.34(typescript@5.1.3)(vue@3.3.4) + version: 2.0.34(typescript@5.2.2)(vue@3.3.4) plausible-tracker: specifier: ^0.3.8 version: 0.3.8 @@ -148,7 +148,7 @@ dependencies: version: 4.1.6(vue@3.3.4) vue-tsc: specifier: ^1.8.1 - version: 1.8.1(typescript@5.1.3) + version: 1.8.1(typescript@5.2.2) xml-formatter: specifier: ^3.3.2 version: 3.3.2 @@ -159,7 +159,7 @@ dependencies: devDependencies: '@antfu/eslint-config': specifier: ^0.40.2 - version: 0.40.2(eslint@8.47.0)(typescript@5.1.3) + version: 0.40.2(eslint@8.47.0)(typescript@5.2.2) '@iconify-json/mdi': specifier: ^1.1.50 version: 1.1.50 @@ -213,7 +213,7 @@ devDependencies: version: 9.0.0 '@unocss/eslint-config': specifier: ^0.55.0 - version: 0.55.0(eslint@8.47.0)(typescript@5.1.3) + version: 0.55.0(eslint@8.47.0)(typescript@5.2.2) '@vitejs/plugin-vue': specifier: ^4.3.2 version: 4.3.2(vite@4.4.9)(vue@3.3.4) @@ -251,8 +251,8 @@ devDependencies: specifier: ^3.0.0 version: 3.0.0 typescript: - specifier: ~5.1.0 - version: 5.1.3 + specifier: ~5.2.0 + version: 5.2.2 unocss: specifier: ^0.55.0 version: 0.55.0(postcss@8.4.28)(rollup@2.79.1)(vite@4.4.9) @@ -301,13 +301,13 @@ packages: '@jridgewell/gen-mapping': 0.3.3 '@jridgewell/trace-mapping': 0.3.18 - /@antfu/eslint-config-basic@0.40.2(@typescript-eslint/eslint-plugin@6.4.1)(@typescript-eslint/parser@6.4.1)(eslint@8.47.0)(typescript@5.1.3): + /@antfu/eslint-config-basic@0.40.2(@typescript-eslint/eslint-plugin@6.4.1)(@typescript-eslint/parser@6.4.1)(eslint@8.47.0)(typescript@5.2.2): resolution: {integrity: sha512-2zAgwjsOFQ1b7MJmnzQAeyyqqqQjy7/b2ZG1oqWlLTxVda4B/msOyrMdO7nYSmqZFK+cdOi5rGT2pBFeX8EBkA==} peerDependencies: eslint: '>=7.4.0' dependencies: eslint: 8.47.0 - eslint-plugin-antfu: 0.40.2(eslint@8.47.0)(typescript@5.1.3) + eslint-plugin-antfu: 0.40.2(eslint@8.47.0)(typescript@5.2.2) eslint-plugin-eslint-comments: 3.2.0(eslint@8.47.0) eslint-plugin-html: 7.1.0 eslint-plugin-import: /eslint-plugin-i@2.28.0-2(@typescript-eslint/parser@6.4.1)(eslint@8.47.0) @@ -330,18 +330,18 @@ packages: - typescript dev: true - /@antfu/eslint-config-ts@0.40.2(eslint@8.47.0)(typescript@5.1.3): + /@antfu/eslint-config-ts@0.40.2(eslint@8.47.0)(typescript@5.2.2): resolution: {integrity: sha512-ztClDCL4ooV6e7VA5tJQGXEqVn3wSB+3PdKJCMTAY+N4YhySurMEF4CSqDqQyvRzt3vAxKKYzrF+JCkUOqR/eA==} peerDependencies: eslint: '>=7.4.0' typescript: '>=3.9' dependencies: - '@antfu/eslint-config-basic': 0.40.2(@typescript-eslint/eslint-plugin@6.4.1)(@typescript-eslint/parser@6.4.1)(eslint@8.47.0)(typescript@5.1.3) - '@typescript-eslint/eslint-plugin': 6.4.1(@typescript-eslint/parser@6.4.1)(eslint@8.47.0)(typescript@5.1.3) - '@typescript-eslint/parser': 6.4.1(eslint@8.47.0)(typescript@5.1.3) + '@antfu/eslint-config-basic': 0.40.2(@typescript-eslint/eslint-plugin@6.4.1)(@typescript-eslint/parser@6.4.1)(eslint@8.47.0)(typescript@5.2.2) + '@typescript-eslint/eslint-plugin': 6.4.1(@typescript-eslint/parser@6.4.1)(eslint@8.47.0)(typescript@5.2.2) + '@typescript-eslint/parser': 6.4.1(eslint@8.47.0)(typescript@5.2.2) eslint: 8.47.0 - eslint-plugin-jest: 27.2.3(@typescript-eslint/eslint-plugin@6.4.1)(eslint@8.47.0)(typescript@5.1.3) - typescript: 5.1.3 + eslint-plugin-jest: 27.2.3(@typescript-eslint/eslint-plugin@6.4.1)(eslint@8.47.0)(typescript@5.2.2) + typescript: 5.2.2 transitivePeerDependencies: - eslint-import-resolver-typescript - eslint-import-resolver-webpack @@ -349,13 +349,13 @@ packages: - supports-color dev: true - /@antfu/eslint-config-vue@0.40.2(@typescript-eslint/eslint-plugin@6.4.1)(@typescript-eslint/parser@6.4.1)(eslint@8.47.0)(typescript@5.1.3): + /@antfu/eslint-config-vue@0.40.2(@typescript-eslint/eslint-plugin@6.4.1)(@typescript-eslint/parser@6.4.1)(eslint@8.47.0)(typescript@5.2.2): resolution: {integrity: sha512-cmUQNzCGPoZ5EzWHQwWcBKtWVQnlLcvWx4L+oiWTatG0vB7niyqufKQSR/MlQIBYCWN5a8pVpUJQ4xwJTKbcHQ==} peerDependencies: eslint: '>=7.4.0' dependencies: - '@antfu/eslint-config-basic': 0.40.2(@typescript-eslint/eslint-plugin@6.4.1)(@typescript-eslint/parser@6.4.1)(eslint@8.47.0)(typescript@5.1.3) - '@antfu/eslint-config-ts': 0.40.2(eslint@8.47.0)(typescript@5.1.3) + '@antfu/eslint-config-basic': 0.40.2(@typescript-eslint/eslint-plugin@6.4.1)(@typescript-eslint/parser@6.4.1)(eslint@8.47.0)(typescript@5.2.2) + '@antfu/eslint-config-ts': 0.40.2(eslint@8.47.0)(typescript@5.2.2) eslint: 8.47.0 eslint-plugin-vue: 9.17.0(eslint@8.47.0) local-pkg: 0.4.3 @@ -369,14 +369,14 @@ packages: - typescript dev: true - /@antfu/eslint-config@0.40.2(eslint@8.47.0)(typescript@5.1.3): + /@antfu/eslint-config@0.40.2(eslint@8.47.0)(typescript@5.2.2): resolution: {integrity: sha512-65KUiPpjHdj2zZq7lh2CSQ7CK4Ow9q/upBydoCaXbkLeg2ojyYiry4IKSkTgHxUaPCHqOq9niegwnup0MEnwHA==} peerDependencies: eslint: '>=7.4.0' dependencies: - '@antfu/eslint-config-vue': 0.40.2(@typescript-eslint/eslint-plugin@6.4.1)(@typescript-eslint/parser@6.4.1)(eslint@8.47.0)(typescript@5.1.3) - '@typescript-eslint/eslint-plugin': 6.4.1(@typescript-eslint/parser@6.4.1)(eslint@8.47.0)(typescript@5.1.3) - '@typescript-eslint/parser': 6.4.1(eslint@8.47.0)(typescript@5.1.3) + '@antfu/eslint-config-vue': 0.40.2(@typescript-eslint/eslint-plugin@6.4.1)(@typescript-eslint/parser@6.4.1)(eslint@8.47.0)(typescript@5.2.2) + '@typescript-eslint/eslint-plugin': 6.4.1(@typescript-eslint/parser@6.4.1)(eslint@8.47.0)(typescript@5.2.2) + '@typescript-eslint/parser': 6.4.1(eslint@8.47.0)(typescript@5.2.2) eslint: 8.47.0 eslint-plugin-eslint-comments: 3.2.0(eslint@8.47.0) eslint-plugin-html: 7.1.0 @@ -2962,7 +2962,7 @@ packages: resolution: {integrity: sha512-113D3mDkZDjo+EeUEHCFy0qniNc1ZpecGiAU7WSo7YDoSzolZIQKpYFHrPpjkB2nuyahcKfrmLXeQlh7gqJYdw==} dev: true - /@typescript-eslint/eslint-plugin@6.4.1(@typescript-eslint/parser@6.4.1)(eslint@8.47.0)(typescript@5.1.3): + /@typescript-eslint/eslint-plugin@6.4.1(@typescript-eslint/parser@6.4.1)(eslint@8.47.0)(typescript@5.2.2): resolution: {integrity: sha512-3F5PtBzUW0dYlq77Lcqo13fv+58KDwUib3BddilE8ajPJT+faGgxmI9Sw+I8ZS22BYwoir9ZhNXcLi+S+I2bkw==} engines: {node: ^16.0.0 || >=18.0.0} peerDependencies: @@ -2974,10 +2974,10 @@ packages: optional: true dependencies: '@eslint-community/regexpp': 4.6.2 - '@typescript-eslint/parser': 6.4.1(eslint@8.47.0)(typescript@5.1.3) + '@typescript-eslint/parser': 6.4.1(eslint@8.47.0)(typescript@5.2.2) '@typescript-eslint/scope-manager': 6.4.1 - '@typescript-eslint/type-utils': 6.4.1(eslint@8.47.0)(typescript@5.1.3) - '@typescript-eslint/utils': 6.4.1(eslint@8.47.0)(typescript@5.1.3) + '@typescript-eslint/type-utils': 6.4.1(eslint@8.47.0)(typescript@5.2.2) + '@typescript-eslint/utils': 6.4.1(eslint@8.47.0)(typescript@5.2.2) '@typescript-eslint/visitor-keys': 6.4.1 debug: 4.3.4 eslint: 8.47.0 @@ -2985,13 +2985,13 @@ packages: ignore: 5.2.4 natural-compare: 1.4.0 semver: 7.5.4 - ts-api-utils: 1.0.1(typescript@5.1.3) - typescript: 5.1.3 + ts-api-utils: 1.0.1(typescript@5.2.2) + typescript: 5.2.2 transitivePeerDependencies: - supports-color dev: true - /@typescript-eslint/parser@6.4.1(eslint@8.47.0)(typescript@5.1.3): + /@typescript-eslint/parser@6.4.1(eslint@8.47.0)(typescript@5.2.2): resolution: {integrity: sha512-610G6KHymg9V7EqOaNBMtD1GgpAmGROsmfHJPXNLCU9bfIuLrkdOygltK784F6Crboyd5tBFayPB7Sf0McrQwg==} engines: {node: ^16.0.0 || >=18.0.0} peerDependencies: @@ -3003,11 +3003,11 @@ packages: dependencies: '@typescript-eslint/scope-manager': 6.4.1 '@typescript-eslint/types': 6.4.1 - '@typescript-eslint/typescript-estree': 6.4.1(typescript@5.1.3) + '@typescript-eslint/typescript-estree': 6.4.1(typescript@5.2.2) '@typescript-eslint/visitor-keys': 6.4.1 debug: 4.3.4 eslint: 8.47.0 - typescript: 5.1.3 + typescript: 5.2.2 transitivePeerDependencies: - supports-color dev: true @@ -3036,7 +3036,7 @@ packages: '@typescript-eslint/visitor-keys': 6.4.1 dev: true - /@typescript-eslint/type-utils@6.4.1(eslint@8.47.0)(typescript@5.1.3): + /@typescript-eslint/type-utils@6.4.1(eslint@8.47.0)(typescript@5.2.2): resolution: {integrity: sha512-7ON8M8NXh73SGZ5XvIqWHjgX2f+vvaOarNliGhjrJnv1vdjG0LVIz+ToYfPirOoBi56jxAKLfsLm40+RvxVVXA==} engines: {node: ^16.0.0 || >=18.0.0} peerDependencies: @@ -3046,12 +3046,12 @@ packages: typescript: optional: true dependencies: - '@typescript-eslint/typescript-estree': 6.4.1(typescript@5.1.3) - '@typescript-eslint/utils': 6.4.1(eslint@8.47.0)(typescript@5.1.3) + '@typescript-eslint/typescript-estree': 6.4.1(typescript@5.2.2) + '@typescript-eslint/utils': 6.4.1(eslint@8.47.0)(typescript@5.2.2) debug: 4.3.4 eslint: 8.47.0 - ts-api-utils: 1.0.1(typescript@5.1.3) - typescript: 5.1.3 + ts-api-utils: 1.0.1(typescript@5.2.2) + typescript: 5.2.2 transitivePeerDependencies: - supports-color dev: true @@ -3071,7 +3071,7 @@ packages: engines: {node: ^16.0.0 || >=18.0.0} dev: true - /@typescript-eslint/typescript-estree@5.60.0(typescript@5.1.3): + /@typescript-eslint/typescript-estree@5.60.0(typescript@5.2.2): resolution: {integrity: sha512-R43thAuwarC99SnvrBmh26tc7F6sPa2B3evkXp/8q954kYL6Ro56AwASYWtEEi+4j09GbiNAHqYwNNZuNlARGQ==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} peerDependencies: @@ -3086,13 +3086,13 @@ packages: globby: 11.1.0 is-glob: 4.0.3 semver: 7.5.4 - tsutils: 3.21.0(typescript@5.1.3) - typescript: 5.1.3 + tsutils: 3.21.0(typescript@5.2.2) + typescript: 5.2.2 transitivePeerDependencies: - supports-color dev: true - /@typescript-eslint/typescript-estree@6.3.0(typescript@5.1.3): + /@typescript-eslint/typescript-estree@6.3.0(typescript@5.2.2): resolution: {integrity: sha512-Xh4NVDaC4eYKY4O3QGPuQNp5NxBAlEvNQYOqJquR2MePNxO11E5K3t5x4M4Mx53IZvtpW+mBxIT0s274fLUocg==} engines: {node: ^16.0.0 || >=18.0.0} peerDependencies: @@ -3107,13 +3107,13 @@ packages: globby: 11.1.0 is-glob: 4.0.3 semver: 7.5.4 - ts-api-utils: 1.0.1(typescript@5.1.3) - typescript: 5.1.3 + ts-api-utils: 1.0.1(typescript@5.2.2) + typescript: 5.2.2 transitivePeerDependencies: - supports-color dev: true - /@typescript-eslint/typescript-estree@6.4.1(typescript@5.1.3): + /@typescript-eslint/typescript-estree@6.4.1(typescript@5.2.2): resolution: {integrity: sha512-xF6Y7SatVE/OyV93h1xGgfOkHr2iXuo8ip0gbfzaKeGGuKiAnzS+HtVhSPx8Www243bwlW8IF7X0/B62SzFftg==} engines: {node: ^16.0.0 || >=18.0.0} peerDependencies: @@ -3128,13 +3128,13 @@ packages: globby: 11.1.0 is-glob: 4.0.3 semver: 7.5.4 - ts-api-utils: 1.0.1(typescript@5.1.3) - typescript: 5.1.3 + ts-api-utils: 1.0.1(typescript@5.2.2) + typescript: 5.2.2 transitivePeerDependencies: - supports-color dev: true - /@typescript-eslint/utils@5.60.0(eslint@8.47.0)(typescript@5.1.3): + /@typescript-eslint/utils@5.60.0(eslint@8.47.0)(typescript@5.2.2): resolution: {integrity: sha512-ba51uMqDtfLQ5+xHtwlO84vkdjrqNzOnqrnwbMHMRY8Tqeme8C2Q8Fc7LajfGR+e3/4LoYiWXUM6BpIIbHJ4hQ==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} peerDependencies: @@ -3145,7 +3145,7 @@ packages: '@types/semver': 7.5.0 '@typescript-eslint/scope-manager': 5.60.0 '@typescript-eslint/types': 5.60.0 - '@typescript-eslint/typescript-estree': 5.60.0(typescript@5.1.3) + '@typescript-eslint/typescript-estree': 5.60.0(typescript@5.2.2) eslint: 8.47.0 eslint-scope: 5.1.1 semver: 7.5.4 @@ -3154,7 +3154,7 @@ packages: - typescript dev: true - /@typescript-eslint/utils@6.3.0(eslint@8.47.0)(typescript@5.1.3): + /@typescript-eslint/utils@6.3.0(eslint@8.47.0)(typescript@5.2.2): resolution: {integrity: sha512-hLLg3BZE07XHnpzglNBG8P/IXq/ZVXraEbgY7FM0Cnc1ehM8RMdn9mat3LubJ3KBeYXXPxV1nugWbQPjGeJk6Q==} engines: {node: ^16.0.0 || >=18.0.0} peerDependencies: @@ -3165,7 +3165,7 @@ packages: '@types/semver': 7.5.0 '@typescript-eslint/scope-manager': 6.3.0 '@typescript-eslint/types': 6.3.0 - '@typescript-eslint/typescript-estree': 6.3.0(typescript@5.1.3) + '@typescript-eslint/typescript-estree': 6.3.0(typescript@5.2.2) eslint: 8.47.0 semver: 7.5.4 transitivePeerDependencies: @@ -3173,7 +3173,7 @@ packages: - typescript dev: true - /@typescript-eslint/utils@6.4.1(eslint@8.47.0)(typescript@5.1.3): + /@typescript-eslint/utils@6.4.1(eslint@8.47.0)(typescript@5.2.2): resolution: {integrity: sha512-F/6r2RieNeorU0zhqZNv89s9bDZSovv3bZQpUNOmmQK1L80/cV4KEu95YUJWi75u5PhboFoKUJBnZ4FQcoqhDw==} engines: {node: ^16.0.0 || >=18.0.0} peerDependencies: @@ -3184,7 +3184,7 @@ packages: '@types/semver': 7.5.0 '@typescript-eslint/scope-manager': 6.4.1 '@typescript-eslint/types': 6.4.1 - '@typescript-eslint/typescript-estree': 6.4.1(typescript@5.1.3) + '@typescript-eslint/typescript-estree': 6.4.1(typescript@5.2.2) eslint: 8.47.0 semver: 7.5.4 transitivePeerDependencies: @@ -3302,22 +3302,22 @@ packages: resolution: {integrity: sha512-TcTugpuhsv6OwMsP3iFIG8FVc9N5JzkojIGNAKF8I2WBftZ//3QcpEHiHc1mH3MlPYfJgUvCcT6/Gad55qmHzg==} dev: true - /@unocss/eslint-config@0.55.0(eslint@8.47.0)(typescript@5.1.3): + /@unocss/eslint-config@0.55.0(eslint@8.47.0)(typescript@5.2.2): resolution: {integrity: sha512-18kDqTFQuATIOh+rja920q/S4I0aLLVG1ccZ1i8cJmpNF+XGuevu7UtPjxlcNq1F7pzmTlq/79jYrjBDZBGL/g==} engines: {node: '>=14'} dependencies: - '@unocss/eslint-plugin': 0.55.0(eslint@8.47.0)(typescript@5.1.3) + '@unocss/eslint-plugin': 0.55.0(eslint@8.47.0)(typescript@5.2.2) transitivePeerDependencies: - eslint - supports-color - typescript dev: true - /@unocss/eslint-plugin@0.55.0(eslint@8.47.0)(typescript@5.1.3): + /@unocss/eslint-plugin@0.55.0(eslint@8.47.0)(typescript@5.2.2): resolution: {integrity: sha512-w6VjKtjTtiuG7jIZXUZzSCHgarV2bp5dMH3ALOhhvNZYfqLbcrJPSPk0RisVZ+uF87QCK4WSlKdXmO4UBd0ENg==} engines: {node: '>=14'} dependencies: - '@typescript-eslint/utils': 6.3.0(eslint@8.47.0)(typescript@5.1.3) + '@typescript-eslint/utils': 6.3.0(eslint@8.47.0)(typescript@5.2.2) '@unocss/config': 0.55.0 '@unocss/core': 0.55.0 magic-string: 0.30.2 @@ -3667,7 +3667,7 @@ packages: /@vue/devtools-api@6.5.0: resolution: {integrity: sha512-o9KfBeaBmCKl10usN4crU53fYtC1r7jJwdGKjPT24t348rHxgfpZ0xL3Xm/gLUYnc0oTp8LAmrxOeLyu6tbk2Q==} - /@vue/language-core@1.8.1(typescript@5.1.3): + /@vue/language-core@1.8.1(typescript@5.2.2): resolution: {integrity: sha512-pumv3k4J7P58hVh4YGRM9Qz3HaAr4TlFWM9bnVOkZ/2K9o2CK1lAP2y9Jw+Z0+mNL4F2uWQqnAPzj3seLyfpDA==} peerDependencies: typescript: '*' @@ -3682,7 +3682,7 @@ packages: '@vue/shared': 3.3.4 minimatch: 9.0.1 muggle-string: 0.3.1 - typescript: 5.1.3 + typescript: 5.2.2 vue-template-compiler: 2.7.14 dev: false @@ -3755,11 +3755,11 @@ packages: resolution: {integrity: sha512-CPuIReonid9+zOG/CGTT05FXrPYATEqoDGNrEaqS4hwcw5BUNM2FguC0mOwJD4Jr16UpRVl9N0pY3P+srIbqmg==} dev: true - /@vue/typescript@1.8.1(typescript@5.1.3): + /@vue/typescript@1.8.1(typescript@5.2.2): resolution: {integrity: sha512-nQpo55j/roie8heCfqyXHnyayqD5+p4/0fzfxH4ZuHf7NSBQS791PNv7ztp2CCOjnGAiaiCMdtC9rc6oriyPUg==} dependencies: '@volar/typescript': 1.7.8 - '@vue/language-core': 1.8.1(typescript@5.1.3) + '@vue/language-core': 1.8.1(typescript@5.2.2) transitivePeerDependencies: - typescript dev: false @@ -4932,7 +4932,7 @@ packages: eslint-import-resolver-webpack: optional: true dependencies: - '@typescript-eslint/parser': 6.4.1(eslint@8.47.0)(typescript@5.1.3) + '@typescript-eslint/parser': 6.4.1(eslint@8.47.0)(typescript@5.2.2) debug: 3.2.7 eslint: 8.47.0 eslint-import-resolver-node: 0.3.9 @@ -4940,10 +4940,10 @@ packages: - supports-color dev: true - /eslint-plugin-antfu@0.40.2(eslint@8.47.0)(typescript@5.1.3): + /eslint-plugin-antfu@0.40.2(eslint@8.47.0)(typescript@5.2.2): resolution: {integrity: sha512-KB75cqamJ5/0OMlicC4HZUSnIBQb/TxFAPPEaubtT8sbI9614USTZNSfTjODjCk/+h21R9lFxpJvVzOlxyfDRQ==} dependencies: - '@typescript-eslint/utils': 6.4.1(eslint@8.47.0)(typescript@5.1.3) + '@typescript-eslint/utils': 6.4.1(eslint@8.47.0)(typescript@5.2.2) transitivePeerDependencies: - eslint - supports-color @@ -5001,7 +5001,7 @@ packages: - supports-color dev: true - /eslint-plugin-jest@27.2.3(@typescript-eslint/eslint-plugin@6.4.1)(eslint@8.47.0)(typescript@5.1.3): + /eslint-plugin-jest@27.2.3(@typescript-eslint/eslint-plugin@6.4.1)(eslint@8.47.0)(typescript@5.2.2): resolution: {integrity: sha512-sRLlSCpICzWuje66Gl9zvdF6mwD5X86I4u55hJyFBsxYOsBCmT5+kSUjf+fkFWVMMgpzNEupjW8WzUqi83hJAQ==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} peerDependencies: @@ -5014,8 +5014,8 @@ packages: jest: optional: true dependencies: - '@typescript-eslint/eslint-plugin': 6.4.1(@typescript-eslint/parser@6.4.1)(eslint@8.47.0)(typescript@5.1.3) - '@typescript-eslint/utils': 5.60.0(eslint@8.47.0)(typescript@5.1.3) + '@typescript-eslint/eslint-plugin': 6.4.1(@typescript-eslint/parser@6.4.1)(eslint@8.47.0)(typescript@5.2.2) + '@typescript-eslint/utils': 5.60.0(eslint@8.47.0)(typescript@5.2.2) eslint: 8.47.0 transitivePeerDependencies: - supports-color @@ -5111,7 +5111,7 @@ packages: '@typescript-eslint/eslint-plugin': optional: true dependencies: - '@typescript-eslint/eslint-plugin': 6.4.1(@typescript-eslint/parser@6.4.1)(eslint@8.47.0)(typescript@5.1.3) + '@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 eslint-rule-composer: 0.3.0 dev: true @@ -7110,7 +7110,7 @@ packages: dev: true optional: true - /pinia@2.0.34(typescript@5.1.3)(vue@3.3.4): + /pinia@2.0.34(typescript@5.2.2)(vue@3.3.4): resolution: {integrity: sha512-cgOoGUiyqX0SSgX8XelK9+Ri4XA2/YyNtgjogwfzIx1g7iZTaZPxm7/bZYMCLU2qHRiHhxG7SuQO0eBacFNc2Q==} peerDependencies: '@vue/composition-api': ^1.4.0 @@ -7123,7 +7123,7 @@ packages: optional: true dependencies: '@vue/devtools-api': 6.5.0 - typescript: 5.1.3 + typescript: 5.2.2 vue: 3.3.4 vue-demi: 0.13.11(vue@3.3.4) dev: false @@ -8144,13 +8144,13 @@ packages: resolution: {integrity: sha512-M8RGFoKtZ8dF+iwJfAJTOH/SM4KluKOKRJpjCMhI8bG3qB74zrFoArKZ62ll0Fr3mqkMJiQOmWYkdYgDeITYQg==} dev: false - /ts-api-utils@1.0.1(typescript@5.1.3): + /ts-api-utils@1.0.1(typescript@5.2.2): resolution: {integrity: sha512-lC/RGlPmwdrIBFTX59wwNzqh7aR2otPNPR/5brHZm/XKFYKsfqxihXUe9pU3JI+3vGkl+vyCoNNnPhJn3aLK1A==} engines: {node: '>=16.13.0'} peerDependencies: typescript: '>=4.2.0' dependencies: - typescript: 5.1.3 + typescript: 5.2.2 dev: true /tslib@1.14.1: @@ -8160,14 +8160,14 @@ packages: /tslib@2.5.0: resolution: {integrity: sha512-336iVw3rtn2BUK7ORdIAHTyxHGRIHVReokCR3XjbckJMK7ms8FysBfhLR8IXnAgy7T0PTPNBWKiH514FOW/WSg==} - /tsutils@3.21.0(typescript@5.1.3): + /tsutils@3.21.0(typescript@5.2.2): resolution: {integrity: sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==} engines: {node: '>= 6'} peerDependencies: typescript: '>=2.8.0 || >= 3.2.0-dev || >= 3.3.0-dev || >= 3.4.0-dev || >= 3.5.0-dev || >= 3.6.0-dev || >= 3.6.0-beta || >= 3.7.0-dev || >= 3.7.0-beta' dependencies: tslib: 1.14.1 - typescript: 5.1.3 + typescript: 5.2.2 dev: true /type-check@0.3.2: @@ -8257,8 +8257,8 @@ packages: engines: {node: '>= 14'} dev: false - /typescript@5.1.3: - resolution: {integrity: sha512-XH627E9vkeqhlZFQuL+UsyAXEnibT0kWR2FWONlr4sTjvxyJYnyefgrkyECLzM5NenmKzRAy2rR/OlYLA1HkZw==} + /typescript@5.2.2: + resolution: {integrity: sha512-mI4WrpHsbCIcwT9cF4FZvr80QUeKvsUsUvKDoR+X/7XHQH98xYD8YHZg7ANtz2GtZt/CBq2QJ0thkGJMHfqc1w==} engines: {node: '>=14.17'} hasBin: true @@ -8857,16 +8857,16 @@ packages: he: 1.2.0 dev: false - /vue-tsc@1.8.1(typescript@5.1.3): + /vue-tsc@1.8.1(typescript@5.2.2): resolution: {integrity: sha512-GxBQrcb0Qvyrj1uZqnTXQyWbXdNDRY2MTa+r7ESgjhf+WzBSdxZfkS3KD/C3WhKYG+aN8hf44Hp5Gqzb6PehAA==} hasBin: true peerDependencies: typescript: '*' dependencies: - '@vue/language-core': 1.8.1(typescript@5.1.3) - '@vue/typescript': 1.8.1(typescript@5.1.3) + '@vue/language-core': 1.8.1(typescript@5.2.2) + '@vue/typescript': 1.8.1(typescript@5.2.2) semver: 7.5.1 - typescript: 5.1.3 + typescript: 5.2.2 dev: false /vue@3.3.4: From 06c35472d3de82c63a5560bf9069a7518e16586b Mon Sep 17 00:00:00 2001 From: Corentin THOMASSET Date: Sat, 26 Aug 2023 16:18:12 +0200 Subject: [PATCH 002/138] doc(hosting): added cloudron in the other hosting solutions section (#589) --- README.md | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) diff --git a/README.md b/README.md index fdbf9809..c6b157cd 100644 --- a/README.md +++ b/README.md @@ -26,6 +26,7 @@ docker run -d --name it-tools --restart unless-stopped -p 8080:80 ghcr.io/corent **Other solutions:** +- [Cloudron](https://www.cloudron.io/store/tech.ittools.cloudron.html) - [Tipi](https://www.runtipi.io/docs/apps-available) - [Unraid](https://unraid.net/community/apps?q=it-tools) @@ -34,23 +35,21 @@ docker run -d --name it-tools --restart unless-stopped -p 8080:80 ghcr.io/corent ### Recommended IDE Setup [VSCode](https://code.visualstudio.com/) with the following extensions: -- [Volar](https://marketplace.visualstudio.com/items?itemName=Vue.volar) (and disable Vetur) + +- [Volar](https://marketplace.visualstudio.com/items?itemName=Vue.volar) (and disable Vetur) - [TypeScript Vue Plugin (Volar)](https://marketplace.visualstudio.com/items?itemName=Vue.vscode-typescript-vue-plugin). - [ESLint](https://marketplace.visualstudio.com/items?itemName=dbaeumer.vscode-eslint) - [i18n Ally](https://marketplace.visualstudio.com/items?itemName=lokalise.i18n-ally) with the following settings: -```json5 +```json { "editor.formatOnSave": false, "editor.codeActionsOnSave": { "source.fixAll.eslint": true }, - "i18n-ally.localesPaths": [ - "locales", - "src/tools/*/locales" - ], + "i18n-ally.localesPaths": ["locales", "src/tools/*/locales"], "i18n-ally.keystyle": "nested" } ``` From a9cd91ca9cc31dd47973b2f87b5e1912c8cb75fd Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Sat, 26 Aug 2023 16:28:31 +0200 Subject: [PATCH 003/138] chore(deps): update dependency @antfu/eslint-config to ^0.41.0 (#585) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- package.json | 2 +- pnpm-lock.yaml | 133 +++++++++++++++++++------------------------------ 2 files changed, 53 insertions(+), 82 deletions(-) diff --git a/package.json b/package.json index 05170f71..716c9d26 100644 --- a/package.json +++ b/package.json @@ -85,7 +85,7 @@ "yaml": "^2.2.1" }, "devDependencies": { - "@antfu/eslint-config": "^0.40.2", + "@antfu/eslint-config": "^0.41.0", "@iconify-json/mdi": "^1.1.50", "@intlify/unplugin-vue-i18n": "^0.12.3", "@playwright/test": "^1.32.3", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index ae42504b..65e29afd 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -158,8 +158,8 @@ dependencies: devDependencies: '@antfu/eslint-config': - specifier: ^0.40.2 - version: 0.40.2(eslint@8.47.0)(typescript@5.2.2) + specifier: ^0.41.0 + version: 0.41.0(eslint@8.47.0)(typescript@5.2.2) '@iconify-json/mdi': specifier: ^1.1.50 version: 1.1.50 @@ -301,19 +301,19 @@ packages: '@jridgewell/gen-mapping': 0.3.3 '@jridgewell/trace-mapping': 0.3.18 - /@antfu/eslint-config-basic@0.40.2(@typescript-eslint/eslint-plugin@6.4.1)(@typescript-eslint/parser@6.4.1)(eslint@8.47.0)(typescript@5.2.2): - resolution: {integrity: sha512-2zAgwjsOFQ1b7MJmnzQAeyyqqqQjy7/b2ZG1oqWlLTxVda4B/msOyrMdO7nYSmqZFK+cdOi5rGT2pBFeX8EBkA==} + /@antfu/eslint-config-basic@0.41.0(@typescript-eslint/eslint-plugin@6.4.1)(@typescript-eslint/parser@6.4.1)(eslint@8.47.0)(typescript@5.2.2): + resolution: {integrity: sha512-zcwFv+nEV/NroeeVWriNdnIGd9soOLRG8wIiVz4VVJ0BjONrqQR56HLG/gDxH/1GUYBnQCEcVxGUmegce08cnw==} peerDependencies: eslint: '>=7.4.0' dependencies: eslint: 8.47.0 - eslint-plugin-antfu: 0.40.2(eslint@8.47.0)(typescript@5.2.2) + eslint-plugin-antfu: 0.41.0(eslint@8.47.0)(typescript@5.2.2) eslint-plugin-eslint-comments: 3.2.0(eslint@8.47.0) eslint-plugin-html: 7.1.0 eslint-plugin-import: /eslint-plugin-i@2.28.0-2(@typescript-eslint/parser@6.4.1)(eslint@8.47.0) eslint-plugin-jsonc: 2.9.0(eslint@8.47.0) eslint-plugin-markdown: 3.0.1(eslint@8.47.0) - eslint-plugin-n: 16.0.1(eslint@8.47.0) + eslint-plugin-n: 16.0.2(eslint@8.47.0) eslint-plugin-no-only-tests: 3.1.0 eslint-plugin-promise: 6.1.1(eslint@8.47.0) eslint-plugin-unicorn: 48.0.1(eslint@8.47.0) @@ -330,13 +330,13 @@ packages: - typescript dev: true - /@antfu/eslint-config-ts@0.40.2(eslint@8.47.0)(typescript@5.2.2): - resolution: {integrity: sha512-ztClDCL4ooV6e7VA5tJQGXEqVn3wSB+3PdKJCMTAY+N4YhySurMEF4CSqDqQyvRzt3vAxKKYzrF+JCkUOqR/eA==} + /@antfu/eslint-config-ts@0.41.0(eslint@8.47.0)(typescript@5.2.2): + resolution: {integrity: sha512-ng3GYpJGZgrxGwBVda/MgUpveH3LbEqdPCFi1+S5e62W4kf8rmEVbhc0I8w7/aKN0uNqir5SInYg8gob2maDAQ==} peerDependencies: eslint: '>=7.4.0' typescript: '>=3.9' dependencies: - '@antfu/eslint-config-basic': 0.40.2(@typescript-eslint/eslint-plugin@6.4.1)(@typescript-eslint/parser@6.4.1)(eslint@8.47.0)(typescript@5.2.2) + '@antfu/eslint-config-basic': 0.41.0(@typescript-eslint/eslint-plugin@6.4.1)(@typescript-eslint/parser@6.4.1)(eslint@8.47.0)(typescript@5.2.2) '@typescript-eslint/eslint-plugin': 6.4.1(@typescript-eslint/parser@6.4.1)(eslint@8.47.0)(typescript@5.2.2) '@typescript-eslint/parser': 6.4.1(eslint@8.47.0)(typescript@5.2.2) eslint: 8.47.0 @@ -349,13 +349,13 @@ packages: - supports-color dev: true - /@antfu/eslint-config-vue@0.40.2(@typescript-eslint/eslint-plugin@6.4.1)(@typescript-eslint/parser@6.4.1)(eslint@8.47.0)(typescript@5.2.2): - resolution: {integrity: sha512-cmUQNzCGPoZ5EzWHQwWcBKtWVQnlLcvWx4L+oiWTatG0vB7niyqufKQSR/MlQIBYCWN5a8pVpUJQ4xwJTKbcHQ==} + /@antfu/eslint-config-vue@0.41.0(@typescript-eslint/eslint-plugin@6.4.1)(@typescript-eslint/parser@6.4.1)(eslint@8.47.0)(typescript@5.2.2): + resolution: {integrity: sha512-iJiEGRUgRmT3mQCmGl0hTMwq/ShXRjRPjpgsDcphKJyEF06ZIR/4gxHn+utQRLT2hD39DQN8gk0ZbpV3gWtf/g==} peerDependencies: eslint: '>=7.4.0' dependencies: - '@antfu/eslint-config-basic': 0.40.2(@typescript-eslint/eslint-plugin@6.4.1)(@typescript-eslint/parser@6.4.1)(eslint@8.47.0)(typescript@5.2.2) - '@antfu/eslint-config-ts': 0.40.2(eslint@8.47.0)(typescript@5.2.2) + '@antfu/eslint-config-basic': 0.41.0(@typescript-eslint/eslint-plugin@6.4.1)(@typescript-eslint/parser@6.4.1)(eslint@8.47.0)(typescript@5.2.2) + '@antfu/eslint-config-ts': 0.41.0(eslint@8.47.0)(typescript@5.2.2) eslint: 8.47.0 eslint-plugin-vue: 9.17.0(eslint@8.47.0) local-pkg: 0.4.3 @@ -369,12 +369,12 @@ packages: - typescript dev: true - /@antfu/eslint-config@0.40.2(eslint@8.47.0)(typescript@5.2.2): - resolution: {integrity: sha512-65KUiPpjHdj2zZq7lh2CSQ7CK4Ow9q/upBydoCaXbkLeg2ojyYiry4IKSkTgHxUaPCHqOq9niegwnup0MEnwHA==} + /@antfu/eslint-config@0.41.0(eslint@8.47.0)(typescript@5.2.2): + resolution: {integrity: sha512-510DginDPdzf45O6HOah3cK6NHXxobBc43IdBQCQmUGb+av9LIJjrd1idThFoyFh6m05iZ4YX/mhnhhJFqLiNw==} peerDependencies: eslint: '>=7.4.0' dependencies: - '@antfu/eslint-config-vue': 0.40.2(@typescript-eslint/eslint-plugin@6.4.1)(@typescript-eslint/parser@6.4.1)(eslint@8.47.0)(typescript@5.2.2) + '@antfu/eslint-config-vue': 0.41.0(@typescript-eslint/eslint-plugin@6.4.1)(@typescript-eslint/parser@6.4.1)(eslint@8.47.0)(typescript@5.2.2) '@typescript-eslint/eslint-plugin': 6.4.1(@typescript-eslint/parser@6.4.1)(eslint@8.47.0)(typescript@5.2.2) '@typescript-eslint/parser': 6.4.1(eslint@8.47.0)(typescript@5.2.2) eslint: 8.47.0 @@ -382,7 +382,7 @@ packages: eslint-plugin-html: 7.1.0 eslint-plugin-import: /eslint-plugin-i@2.28.0-2(@typescript-eslint/parser@6.4.1)(eslint@8.47.0) eslint-plugin-jsonc: 2.9.0(eslint@8.47.0) - eslint-plugin-n: 16.0.1(eslint@8.47.0) + eslint-plugin-n: 16.0.2(eslint@8.47.0) eslint-plugin-promise: 6.1.1(eslint@8.47.0) eslint-plugin-unicorn: 48.0.1(eslint@8.47.0) eslint-plugin-vue: 9.17.0(eslint@8.47.0) @@ -429,13 +429,6 @@ packages: dependencies: '@babel/highlight': 7.22.10 chalk: 2.4.2 - dev: true - - /@babel/code-frame@7.22.5: - resolution: {integrity: sha512-Xmwn266vad+6DAqEB2A6V/CcZVp62BbwVmcOJc2RPuwih1kw02TjQvWVWlcKGbBPd+8/0V5DEkOcizRGYsspYQ==} - engines: {node: '>=6.9.0'} - dependencies: - '@babel/highlight': 7.22.5 /@babel/compat-data@7.22.5: resolution: {integrity: sha512-4Jc/YuIaYqKnDDz892kPIledykKg12Aw1PYX5i/TY28anJtacvM1Rrr8wbieB9GfEJwlzqT0hUEao0CxEebiDA==} @@ -475,7 +468,7 @@ packages: engines: {node: '>=6.9.0'} dependencies: '@ampproject/remapping': 2.2.1 - '@babel/code-frame': 7.22.5 + '@babel/code-frame': 7.22.10 '@babel/generator': 7.22.5 '@babel/helper-compilation-targets': 7.22.5(@babel/core@7.22.5) '@babel/helper-module-transforms': 7.22.5 @@ -766,15 +759,6 @@ packages: '@babel/helper-validator-identifier': 7.22.5 chalk: 2.4.2 js-tokens: 4.0.0 - dev: true - - /@babel/highlight@7.22.5: - resolution: {integrity: sha512-BSKlD1hgnedS5XRnGOljZawtag7H1yPfQp0tdNJCHoH6AZ+Pcm9VvkrK59/Yy593Ypg0zMxH2BxD1VPYUQ7UIw==} - engines: {node: '>=6.9.0'} - dependencies: - '@babel/helper-validator-identifier': 7.22.5 - chalk: 2.4.2 - js-tokens: 4.0.0 /@babel/parser@7.21.4: resolution: {integrity: sha512-alVJj7k7zIxqBZ7BTRhz0IqJFxW1VJbm6N8JbcYhQ186df9ZBPbZBmWSqAMXwHGsCJdYks7z/voa3ibiS5bCIw==} @@ -1729,7 +1713,7 @@ packages: resolution: {integrity: sha512-X7yV7eiwAxdj9k94NEylvbVHLiVG1nvzCV2EAowhxLTwODV1jl9UzZ48leOC0sH7OnuHrIkllaBgneUykIcZaw==} engines: {node: '>=6.9.0'} dependencies: - '@babel/code-frame': 7.22.5 + '@babel/code-frame': 7.22.10 '@babel/parser': 7.22.5 '@babel/types': 7.22.5 @@ -1755,7 +1739,7 @@ packages: resolution: {integrity: sha512-7DuIjPgERaNo6r+PZwItpjCZEa5vyw4eJGufeLxrPdBXBoLcCJCIasvK6pK/9DVNrLZTLFhUGqaC6X/PA007TQ==} engines: {node: '>=6.9.0'} dependencies: - '@babel/code-frame': 7.22.5 + '@babel/code-frame': 7.22.10 '@babel/generator': 7.22.5 '@babel/helper-environment-visitor': 7.22.5 '@babel/helper-function-name': 7.22.5 @@ -3213,7 +3197,7 @@ packages: engines: {node: ^16.0.0 || >=18.0.0} dependencies: '@typescript-eslint/types': 6.4.1 - eslint-visitor-keys: 3.4.2 + eslint-visitor-keys: 3.4.3 dev: true /@unhead/dom@0.5.1: @@ -3242,7 +3226,7 @@ packages: dependencies: '@unhead/dom': 0.5.1 '@unhead/schema': 0.5.1 - '@vueuse/shared': 10.3.0(vue@3.3.4) + '@vueuse/shared': 10.4.0(vue@3.3.4) unhead: 0.5.1 vue: 3.3.4 transitivePeerDependencies: @@ -3824,6 +3808,15 @@ packages: - vue dev: false + /@vueuse/shared@10.4.0(vue@3.3.4): + resolution: {integrity: sha512-52asvLf5cbAS/h6xWjqoY4MgjxmFjnVNf/nA8BP7RbeIrIGcf+BZbeOcVo+92byqArXEJiBxptXpufQvbwJL/w==} + dependencies: + vue-demi: 0.14.5(vue@3.3.4) + transitivePeerDependencies: + - '@vue/composition-api' + - vue + dev: false + /@zhead/schema@1.0.0-beta.13: resolution: {integrity: sha512-P1A1vRGFBhITco8Iw4/hvnDYoE/SoVrd71dW1pBFdXJb3vP+pBtoOuhbEKy0ROJGOyzQuqvFibcwzyLlWMqNiQ==} dev: false @@ -3844,12 +3837,12 @@ packages: acorn: 7.4.1 dev: true - /acorn-jsx@5.3.2(acorn@8.9.0): + /acorn-jsx@5.3.2(acorn@8.10.0): resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==} peerDependencies: acorn: ^6.0.0 || ^7.0.0 || ^8.0.0 dependencies: - acorn: 8.9.0 + acorn: 8.10.0 dev: true /acorn-walk@8.2.0: @@ -3867,12 +3860,12 @@ packages: resolution: {integrity: sha512-F0SAmZ8iUtS//m8DmCTA0jlh6TDKkHQyK6xc6V4KDTyZKA9dnvX9/3sRTVQrWm79glUAZbnmmNcdYwUIHWVybw==} engines: {node: '>=0.4.0'} hasBin: true - dev: true /acorn@8.9.0: resolution: {integrity: sha512-jaVNAFBHNLXspO543WnNNPZFRtavh3skAkITqD0/2aeMkKZTN+254PyhwxFYrk3vQ1xfY+2wbesJMs/JC8/PwQ==} engines: {node: '>=0.4.0'} hasBin: true + dev: true /agent-base@6.0.2: resolution: {integrity: sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==} @@ -4940,8 +4933,8 @@ packages: - supports-color dev: true - /eslint-plugin-antfu@0.40.2(eslint@8.47.0)(typescript@5.2.2): - resolution: {integrity: sha512-KB75cqamJ5/0OMlicC4HZUSnIBQb/TxFAPPEaubtT8sbI9614USTZNSfTjODjCk/+h21R9lFxpJvVzOlxyfDRQ==} + /eslint-plugin-antfu@0.41.0(eslint@8.47.0)(typescript@5.2.2): + resolution: {integrity: sha512-JeEeDZgz7oqYPYWYNQHdXrKaW2nhJz/70jeMZUkaNjVp72cpsJPH3idiEhIhGu3wjFdsOMCoEkboT/DQXlCaqA==} dependencies: '@typescript-eslint/utils': 6.4.1(eslint@8.47.0)(typescript@5.2.2) transitivePeerDependencies: @@ -5046,8 +5039,8 @@ packages: - supports-color dev: true - /eslint-plugin-n@16.0.1(eslint@8.47.0): - resolution: {integrity: sha512-CDmHegJN0OF3L5cz5tATH84RPQm9kG+Yx39wIqIwPR2C0uhBGMWfbbOtetR83PQjjidA5aXMu+LEFw1jaSwvTA==} + /eslint-plugin-n@16.0.2(eslint@8.47.0): + resolution: {integrity: sha512-Y66uDfUNbBzypsr0kELWrIz+5skicECrLUqlWuXawNSLUq3ltGlCwu6phboYYOTSnoTdHgTLrc+5Ydo6KjzZog==} engines: {node: '>=16.0.0'} peerDependencies: eslint: '>=7.0.0' @@ -5162,14 +5155,6 @@ packages: estraverse: 4.3.0 dev: true - /eslint-scope@7.1.1: - resolution: {integrity: sha512-QKQM/UXpIiHcLqJ5AOyIW7XZmzjkzQXYE54n1++wb0u9V/abW3l9uQnxX8Z5Xd18xyKIMTUAyQ0k1e8pz6LUrw==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - dependencies: - esrecurse: 4.3.0 - estraverse: 5.3.0 - dev: true - /eslint-scope@7.2.2: resolution: {integrity: sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} @@ -5190,11 +5175,6 @@ packages: engines: {node: '>=4'} dev: true - /eslint-visitor-keys@3.4.2: - resolution: {integrity: sha512-8drBzUEyZ2llkpCA67iYrgEssKDUu68V8ChqqOfFupIaG/LCVPUT+CoGJpT77zJprs4T/W7p07LP7zAIMuweVw==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - dev: true - /eslint-visitor-keys@3.4.3: resolution: {integrity: sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} @@ -5255,21 +5235,12 @@ packages: eslint-visitor-keys: 1.3.0 dev: true - /espree@9.5.1: - resolution: {integrity: sha512-5yxtHSZXRSW5pvv3hAlXM5+/Oswi1AUFqBmbibKb5s6bp3rGIDkyXU6xCoyuuLhijr4SFwPrXRoZjz0AZDN9tg==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - dependencies: - acorn: 8.9.0 - acorn-jsx: 5.3.2(acorn@8.9.0) - eslint-visitor-keys: 3.4.2 - dev: true - /espree@9.6.1: resolution: {integrity: sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} dependencies: - acorn: 8.9.0 - acorn-jsx: 5.3.2(acorn@8.9.0) + acorn: 8.10.0 + acorn-jsx: 5.3.2(acorn@8.10.0) eslint-visitor-keys: 3.4.3 dev: true @@ -6353,9 +6324,9 @@ packages: resolution: {integrity: sha512-9xZPKVYp9DxnM3sd1yAsh/d59iIaswDkai8oTxbursfKYbg/ibjX0IzFt35+VZ8iEW453TVTXztnRvYUQlAfUQ==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} dependencies: - acorn: 8.9.0 - eslint-visitor-keys: 3.4.2 - espree: 9.5.1 + acorn: 8.10.0 + eslint-visitor-keys: 3.4.3 + espree: 9.6.1 semver: 7.5.4 dev: true @@ -6681,7 +6652,7 @@ packages: /mlly@1.4.0: resolution: {integrity: sha512-ua8PAThnTwpprIaU47EPeZ/bPUVp2QYBbWMphUQpVdBI3Lgqzm5KZQ45Agm3YJedHXaIHl6pBGabaLSUPPSptg==} dependencies: - acorn: 8.9.0 + acorn: 8.10.0 pathe: 1.1.1 pkg-types: 1.0.3 ufo: 1.1.2 @@ -7026,7 +6997,7 @@ packages: resolution: {integrity: sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==} engines: {node: '>=8'} dependencies: - '@babel/code-frame': 7.22.5 + '@babel/code-frame': 7.22.10 error-ex: 1.3.2 json-parse-even-better-errors: 2.3.1 lines-and-columns: 1.2.4 @@ -7972,7 +7943,7 @@ packages: /strip-literal@1.0.1: resolution: {integrity: sha512-QZTsipNpa2Ppr6v1AmJHESqJ3Uz247MUS0OjrnnZjFAvEoWqxuyFuXn2xLgMtRnijJShAa1HL0gtJyUs7u7n3Q==} dependencies: - acorn: 8.9.0 + acorn: 8.10.0 /supports-color@5.5.0: resolution: {integrity: sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==} @@ -8506,7 +8477,7 @@ packages: /unplugin@1.3.1: resolution: {integrity: sha512-h4uUTIvFBQRxUKS2Wjys6ivoeofGhxzTe2sRWlooyjHXVttcVfV/JiavNd3d4+jty0SVV0dxGw9AkY9MwiaCEw==} dependencies: - acorn: 8.9.0 + acorn: 8.10.0 chokidar: 3.5.3 webpack-sources: 3.2.3 webpack-virtual-modules: 0.5.0 @@ -8514,7 +8485,7 @@ packages: /unplugin@1.4.0: resolution: {integrity: sha512-5x4eIEL6WgbzqGtF9UV8VEC/ehKptPXDS6L2b0mv4FRMkJxRtjaJfOWDd6a8+kYbqsjklix7yWP0N3SUepjXcg==} dependencies: - acorn: 8.9.0 + acorn: 8.10.0 chokidar: 3.5.3 webpack-sources: 3.2.3 webpack-virtual-modules: 0.5.0 @@ -8819,9 +8790,9 @@ packages: dependencies: debug: 4.3.4 eslint: 8.47.0 - eslint-scope: 7.1.1 - eslint-visitor-keys: 3.4.2 - espree: 9.5.1 + eslint-scope: 7.2.2 + eslint-visitor-keys: 3.4.3 + espree: 9.6.1 esquery: 1.5.0 lodash: 4.17.21 semver: 7.5.4 @@ -9254,7 +9225,7 @@ packages: resolution: {integrity: sha512-pEwzfsKbTrB8G3xc/sN7aw1v6A6c/pKxLAkjclnAyo5g5qOh6eL9WGu0o3cSDQZKrTNk4KL4lQSwZW+nBkANEg==} engines: {node: ^14.17.0 || >=16.0.0} dependencies: - eslint-visitor-keys: 3.4.2 + eslint-visitor-keys: 3.4.3 lodash: 4.17.21 yaml: 2.2.1 dev: true From 81bfe57cb85690f4153683754ffb09f35a816dac Mon Sep 17 00:00:00 2001 From: Corentin THOMASSET Date: Sat, 26 Aug 2023 16:43:47 +0200 Subject: [PATCH 004/138] feat(new tool): text diff and comparator (#588) * feat(new tool): text diff and comparator * chore(ci): increased memory in CI --- .github/workflows/ci.yml | 2 + components.d.ts | 2 + package.json | 1 + pnpm-lock.yaml | 71 +++++++++++++------------- src/tools/index.ts | 3 +- src/tools/text-diff/index.ts | 12 +++++ src/tools/text-diff/text-diff.vue | 5 ++ src/ui/c-diff-editor/c-diff-editor.vue | 68 ++++++++++++++++++++++++ 8 files changed, 127 insertions(+), 37 deletions(-) create mode 100644 src/tools/text-diff/index.ts create mode 100644 src/tools/text-diff/text-diff.vue create mode 100644 src/ui/c-diff-editor/c-diff-editor.vue diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 5f5a9b6a..611b7e6f 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -31,4 +31,6 @@ jobs: run: pnpm typecheck - name: Build the app + env: + NODE_OPTIONS: --max-old-space-size=4096 run: pnpm build diff --git a/components.d.ts b/components.d.ts index 33ae6d50..076fc061 100644 --- a/components.d.ts +++ b/components.d.ts @@ -27,6 +27,7 @@ declare module '@vue/runtime-core' { 'CButton.demo': typeof import('./src/ui/c-button/c-button.demo.vue')['default'] CCard: typeof import('./src/ui/c-card/c-card.vue')['default'] 'CCard.demo': typeof import('./src/ui/c-card/c-card.demo.vue')['default'] + CDiffEditor: typeof import('./src/ui/c-diff-editor/c-diff-editor.vue')['default'] ChmodCalculator: typeof import('./src/tools/chmod-calculator/chmod-calculator.vue')['default'] Chronometer: typeof import('./src/tools/chronometer/chronometer.vue')['default'] CInputText: typeof import('./src/ui/c-input-text/c-input-text.vue')['default'] @@ -166,6 +167,7 @@ declare module '@vue/runtime-core' { SvgPlaceholderGenerator: typeof import('./src/tools/svg-placeholder-generator/svg-placeholder-generator.vue')['default'] TemperatureConverter: typeof import('./src/tools/temperature-converter/temperature-converter.vue')['default'] TextareaCopyable: typeof import('./src/components/TextareaCopyable.vue')['default'] + TextDiff: typeof import('./src/tools/text-diff/text-diff.vue')['default'] TextStatistics: typeof import('./src/tools/text-statistics/text-statistics.vue')['default'] TextToNatoAlphabet: typeof import('./src/tools/text-to-nato-alphabet/text-to-nato-alphabet.vue')['default'] TokenDisplay: typeof import('./src/tools/otp-code-generator-and-validator/token-display.vue')['default'] diff --git a/package.json b/package.json index 716c9d26..b68e04f7 100644 --- a/package.json +++ b/package.json @@ -64,6 +64,7 @@ "lodash": "^4.17.21", "mathjs": "^11.9.1", "mime-types": "^2.1.35", + "monaco-editor": "^0.41.0", "naive-ui": "^2.34.3", "netmask": "^2.0.2", "node-forge": "^1.3.1", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 65e29afd..9ceb775e 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -98,6 +98,9 @@ dependencies: mime-types: specifier: ^2.1.35 version: 2.1.35 + monaco-editor: + specifier: ^0.41.0 + version: 0.41.0 naive-ui: specifier: ^2.34.3 version: 2.34.3(vue@3.3.4) @@ -429,6 +432,13 @@ packages: dependencies: '@babel/highlight': 7.22.10 chalk: 2.4.2 + dev: true + + /@babel/code-frame@7.22.5: + resolution: {integrity: sha512-Xmwn266vad+6DAqEB2A6V/CcZVp62BbwVmcOJc2RPuwih1kw02TjQvWVWlcKGbBPd+8/0V5DEkOcizRGYsspYQ==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/highlight': 7.22.5 /@babel/compat-data@7.22.5: resolution: {integrity: sha512-4Jc/YuIaYqKnDDz892kPIledykKg12Aw1PYX5i/TY28anJtacvM1Rrr8wbieB9GfEJwlzqT0hUEao0CxEebiDA==} @@ -468,7 +478,7 @@ packages: engines: {node: '>=6.9.0'} dependencies: '@ampproject/remapping': 2.2.1 - '@babel/code-frame': 7.22.10 + '@babel/code-frame': 7.22.5 '@babel/generator': 7.22.5 '@babel/helper-compilation-targets': 7.22.5(@babel/core@7.22.5) '@babel/helper-module-transforms': 7.22.5 @@ -759,6 +769,15 @@ packages: '@babel/helper-validator-identifier': 7.22.5 chalk: 2.4.2 js-tokens: 4.0.0 + dev: true + + /@babel/highlight@7.22.5: + resolution: {integrity: sha512-BSKlD1hgnedS5XRnGOljZawtag7H1yPfQp0tdNJCHoH6AZ+Pcm9VvkrK59/Yy593Ypg0zMxH2BxD1VPYUQ7UIw==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/helper-validator-identifier': 7.22.5 + chalk: 2.4.2 + js-tokens: 4.0.0 /@babel/parser@7.21.4: resolution: {integrity: sha512-alVJj7k7zIxqBZ7BTRhz0IqJFxW1VJbm6N8JbcYhQ186df9ZBPbZBmWSqAMXwHGsCJdYks7z/voa3ibiS5bCIw==} @@ -770,7 +789,6 @@ packages: /@babel/parser@7.22.10: resolution: {integrity: sha512-lNbdGsQb9ekfsnjFGhEiF4hfFqGgfOP3H3d27re3n+CGhNuTSUEQdfWk556sTLNTloczcdM5TYF2LhzmDQKyvQ==} engines: {node: '>=6.0.0'} - hasBin: true dependencies: '@babel/types': 7.22.10 @@ -1713,7 +1731,7 @@ packages: resolution: {integrity: sha512-X7yV7eiwAxdj9k94NEylvbVHLiVG1nvzCV2EAowhxLTwODV1jl9UzZ48leOC0sH7OnuHrIkllaBgneUykIcZaw==} engines: {node: '>=6.9.0'} dependencies: - '@babel/code-frame': 7.22.10 + '@babel/code-frame': 7.22.5 '@babel/parser': 7.22.5 '@babel/types': 7.22.5 @@ -1739,7 +1757,7 @@ packages: resolution: {integrity: sha512-7DuIjPgERaNo6r+PZwItpjCZEa5vyw4eJGufeLxrPdBXBoLcCJCIasvK6pK/9DVNrLZTLFhUGqaC6X/PA007TQ==} engines: {node: '>=6.9.0'} dependencies: - '@babel/code-frame': 7.22.10 + '@babel/code-frame': 7.22.5 '@babel/generator': 7.22.5 '@babel/helper-environment-visitor': 7.22.5 '@babel/helper-function-name': 7.22.5 @@ -3837,12 +3855,12 @@ packages: acorn: 7.4.1 dev: true - /acorn-jsx@5.3.2(acorn@8.10.0): + /acorn-jsx@5.3.2(acorn@8.9.0): resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==} peerDependencies: acorn: ^6.0.0 || ^7.0.0 || ^8.0.0 dependencies: - acorn: 8.10.0 + acorn: 8.9.0 dev: true /acorn-walk@8.2.0: @@ -3853,19 +3871,16 @@ packages: /acorn@7.4.1: resolution: {integrity: sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==} engines: {node: '>=0.4.0'} - hasBin: true dev: true /acorn@8.10.0: resolution: {integrity: sha512-F0SAmZ8iUtS//m8DmCTA0jlh6TDKkHQyK6xc6V4KDTyZKA9dnvX9/3sRTVQrWm79glUAZbnmmNcdYwUIHWVybw==} engines: {node: '>=0.4.0'} - hasBin: true + dev: true /acorn@8.9.0: resolution: {integrity: sha512-jaVNAFBHNLXspO543WnNNPZFRtavh3skAkITqD0/2aeMkKZTN+254PyhwxFYrk3vQ1xfY+2wbesJMs/JC8/PwQ==} engines: {node: '>=0.4.0'} - hasBin: true - dev: true /agent-base@6.0.2: resolution: {integrity: sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==} @@ -4833,7 +4848,6 @@ packages: /esbuild@0.18.20: resolution: {integrity: sha512-ceqxoedUrcayh7Y7ZX6NdbbDzGROiyVBgC4PriJThBKSVPWnnFHZAkfI1lJT8QFkOwH4qOS2SJkS4wvpGl8BpA==} engines: {node: '>=12'} - hasBin: true requiresBuild: true optionalDependencies: '@esbuild/android-arm': 0.18.20 @@ -4884,7 +4898,6 @@ packages: /escodegen@2.0.0: resolution: {integrity: sha512-mmHKys/C8BFUGI+MAWNcSYoORYLMdPzjrknd2Vc+bUsjN5bXcr8EhrNB+UTqfL1y3I9c4fw2ihgtMPQLBRiQxw==} engines: {node: '>=6.0'} - hasBin: true dependencies: esprima: 4.0.1 estraverse: 5.3.0 @@ -5183,7 +5196,6 @@ packages: /eslint@8.47.0: resolution: {integrity: sha512-spUQWrdPt+pRVP1TTJLmfRNJJHHZryFmptzcafwSvHsceV81djHOdnEeDmkdotZyLNjDhrOasNK8nikkoG1O8Q==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - hasBin: true dependencies: '@eslint-community/eslint-utils': 4.4.0(eslint@8.47.0) '@eslint-community/regexpp': 4.6.2 @@ -5239,8 +5251,8 @@ packages: resolution: {integrity: sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} dependencies: - acorn: 8.10.0 - acorn-jsx: 5.3.2(acorn@8.10.0) + acorn: 8.9.0 + acorn-jsx: 5.3.2(acorn@8.9.0) eslint-visitor-keys: 3.4.3 dev: true @@ -6216,7 +6228,6 @@ packages: /js-yaml@4.1.0: resolution: {integrity: sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==} - hasBin: true dependencies: argparse: 2.0.1 dev: true @@ -6271,7 +6282,6 @@ packages: /jsesc@2.5.2: resolution: {integrity: sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==} engines: {node: '>=4'} - hasBin: true /jsesc@3.0.2: resolution: {integrity: sha512-xKqzzWXDttJuOcawBt4KnKHHIf5oQ/Cxax+0PWFG+DFDgHNAdi+TXECADI+RYiFUMmx8792xsMbbgXj4CwnP4g==} @@ -6537,7 +6547,6 @@ packages: /mathjs@11.9.1: resolution: {integrity: sha512-VdB9ELZ6Dwda13j5d1eCBETmPO8m9qIJETUdfZmTA9cPnXUiIk7UuoAmvxFqtfAe32XYuRugAec2Ndv0/RfRhg==} engines: {node: '>= 14'} - hasBin: true dependencies: '@babel/runtime': 7.22.10 complex.js: 2.1.1 @@ -6652,11 +6661,15 @@ packages: /mlly@1.4.0: resolution: {integrity: sha512-ua8PAThnTwpprIaU47EPeZ/bPUVp2QYBbWMphUQpVdBI3Lgqzm5KZQ45Agm3YJedHXaIHl6pBGabaLSUPPSptg==} dependencies: - acorn: 8.10.0 + acorn: 8.9.0 pathe: 1.1.1 pkg-types: 1.0.3 ufo: 1.1.2 + /monaco-editor@0.41.0: + resolution: {integrity: sha512-1o4olnZJsiLmv5pwLEAmzHTE/5geLKQ07BrGxlF4Ri/AXAc2yyDGZwHjiTqD8D/ROKUZmwMA28A+yEowLNOEcA==} + dev: false + /moo@0.5.2: resolution: {integrity: sha512-iSAJLHYKnX41mKcJKjqvnAN9sf0LMDTXDEvFv+ffuRR9a1MIuXLjMNL6EsnDHSkKLTWNqQQ5uo61P4EbU4NU+Q==} dev: false @@ -6705,7 +6718,6 @@ packages: /nanoid@3.3.6: resolution: {integrity: sha512-BGcqMMJuToF7i1rt+2PWSNVnWIkGCU78jBG3RxO/bZlnZPK2Cmi2QaffxGO/2RvWi9sL+FAiRiXMgsyxQ1DIDA==} engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} - hasBin: true /natural-compare@1.4.0: resolution: {integrity: sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==} @@ -6713,7 +6725,6 @@ packages: /nearley@2.20.1: resolution: {integrity: sha512-+Mc8UaAebFzgV+KpI5n7DasuuQCHA89dmwm7JXw3TV43ukfNQ9DnBH3Mdb2g/I4Fdxc26pwimBWvjIw0UAILSQ==} - hasBin: true dependencies: commander: 2.20.3 moo: 0.5.2 @@ -7077,7 +7088,6 @@ packages: /pify@4.0.1: resolution: {integrity: sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==} engines: {node: '>=6'} - requiresBuild: true dev: true optional: true @@ -7341,7 +7351,6 @@ packages: /prr@1.0.1: resolution: {integrity: sha512-yPw4Sng1gWghHQWj0B3ZggWUm4qVbPwPFcRG8KyxiU7J2OHFSoEHKS+EZ3fv5l1t9CyCiop6l/ZYeWbrgoQejw==} - requiresBuild: true dev: true optional: true @@ -7578,7 +7587,6 @@ packages: /rollup@3.28.0: resolution: {integrity: sha512-d7zhvo1OUY2SXSM6pfNjgD5+d0Nz87CUp4mt8l/GgVP3oBsPwzNvSzyu1me6BSG9JIgWNTVcafIXBIyM8yQ3yw==} engines: {node: '>=14.18.0', npm: '>=8.0.0'} - hasBin: true optionalDependencies: fsevents: 2.3.3 dev: true @@ -7619,12 +7627,10 @@ packages: /safer-buffer@2.1.2: resolution: {integrity: sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==} - requiresBuild: true dev: true /sax@1.2.4: resolution: {integrity: sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==} - requiresBuild: true dev: true optional: true @@ -7657,12 +7663,10 @@ packages: /semver@5.7.2: resolution: {integrity: sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==} - hasBin: true dev: true /semver@6.3.1: resolution: {integrity: sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==} - hasBin: true /semver@7.5.1: resolution: {integrity: sha512-Wvss5ivl8TMRZXXESstBA4uR5iXgEN/VC5/sOcuXdVLzcdkz4HWetIoRfG5gb5X+ij/G9rw9YoGn3QoQ8OCSpw==} @@ -7826,7 +7830,6 @@ packages: /sql-formatter@12.0.0: resolution: {integrity: sha512-LR2m7BEvkyNAPzmcSCZ2b4Qzm5ySiiXS9Juc73VguTqCWIbYv7ZFV4LaDM7jNNZqHPfrqFssO7WWpITsAuLOuQ==} - hasBin: true dependencies: argparse: 2.0.1 nearley: 2.20.1 @@ -7943,7 +7946,7 @@ packages: /strip-literal@1.0.1: resolution: {integrity: sha512-QZTsipNpa2Ppr6v1AmJHESqJ3Uz247MUS0OjrnnZjFAvEoWqxuyFuXn2xLgMtRnijJShAa1HL0gtJyUs7u7n3Q==} dependencies: - acorn: 8.10.0 + acorn: 8.9.0 /supports-color@5.5.0: resolution: {integrity: sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==} @@ -8477,7 +8480,7 @@ packages: /unplugin@1.3.1: resolution: {integrity: sha512-h4uUTIvFBQRxUKS2Wjys6ivoeofGhxzTe2sRWlooyjHXVttcVfV/JiavNd3d4+jty0SVV0dxGw9AkY9MwiaCEw==} dependencies: - acorn: 8.10.0 + acorn: 8.9.0 chokidar: 3.5.3 webpack-sources: 3.2.3 webpack-virtual-modules: 0.5.0 @@ -8485,7 +8488,7 @@ packages: /unplugin@1.4.0: resolution: {integrity: sha512-5x4eIEL6WgbzqGtF9UV8VEC/ehKptPXDS6L2b0mv4FRMkJxRtjaJfOWDd6a8+kYbqsjklix7yWP0N3SUepjXcg==} dependencies: - acorn: 8.10.0 + acorn: 8.9.0 chokidar: 3.5.3 webpack-sources: 3.2.3 webpack-virtual-modules: 0.5.0 @@ -8548,7 +8551,6 @@ packages: /uuid@9.0.0: resolution: {integrity: sha512-MXcSTerfPa4uqyzStbRoTgt5XIe3x5+42+q1sDuy3R5MDk66URdLMOZe5aPX/SQd+kuYAh0FdP/pO28IkQyTeg==} - hasBin: true dev: false /v8-to-istanbul@9.1.0: @@ -8579,7 +8581,6 @@ packages: /vite-node@0.34.0(@types/node@18.15.11)(less@4.1.3): resolution: {integrity: sha512-rGZMvpb052rjUwJA/a17xMfOibzNF7byMdRSTcN2Lw8uxX08s5EfjWW5mBkm3MSFTPctMSVtT2yC+8ShrZbT5g==} engines: {node: '>=v14.18.0'} - hasBin: true dependencies: cac: 6.7.14 debug: 4.3.4 @@ -8967,7 +8968,6 @@ packages: /which@2.0.2: resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==} engines: {node: '>= 8'} - hasBin: true dependencies: isexe: 2.0.0 dev: true @@ -8982,7 +8982,6 @@ packages: /why-is-node-running@2.2.2: resolution: {integrity: sha512-6tSwToZxTOcotxHeA+qGCq1mVzKR3CwcJGmVcY+QE8SHy6TnpFnh8PAvPNHYr7EcuVeG0QSMxtYCuO1ta/G/oA==} engines: {node: '>=8'} - hasBin: true dependencies: siginfo: 2.0.0 stackback: 0.0.2 diff --git a/src/tools/index.ts b/src/tools/index.ts index c5686a48..39b34ad6 100644 --- a/src/tools/index.ts +++ b/src/tools/index.ts @@ -2,6 +2,7 @@ import { tool as base64FileConverter } from './base64-file-converter'; import { tool as base64StringConverter } from './base64-string-converter'; import { tool as basicAuthGenerator } from './basic-auth-generator'; import { tool as stringObfuscator } from './string-obfuscator'; +import { tool as textDiff } from './text-diff'; import { tool as emojiPicker } from './emoji-picker'; import { tool as passwordStrengthAnalyser } from './password-strength-analyser'; import { tool as yamlToToml } from './yaml-to-toml'; @@ -146,7 +147,7 @@ export const toolsByCategory: ToolCategory[] = [ }, { name: 'Text', - components: [loremIpsumGenerator, textStatistics, emojiPicker, stringObfuscator], + components: [loremIpsumGenerator, textStatistics, emojiPicker, stringObfuscator, textDiff], }, { name: 'Data', diff --git a/src/tools/text-diff/index.ts b/src/tools/text-diff/index.ts new file mode 100644 index 00000000..992acbae --- /dev/null +++ b/src/tools/text-diff/index.ts @@ -0,0 +1,12 @@ +import { FileDiff } from '@vicons/tabler'; +import { defineTool } from '../tool'; + +export const tool = defineTool({ + name: 'Text diff', + path: '/text-diff', + description: 'Compare two texts and see the differences between them.', + keywords: ['text', 'diff', 'compare', 'string', 'text diff', 'code'], + component: () => import('./text-diff.vue'), + icon: FileDiff, + createdAt: new Date('2023-08-16'), +}); diff --git a/src/tools/text-diff/text-diff.vue b/src/tools/text-diff/text-diff.vue new file mode 100644 index 00000000..990f05b1 --- /dev/null +++ b/src/tools/text-diff/text-diff.vue @@ -0,0 +1,5 @@ + diff --git a/src/ui/c-diff-editor/c-diff-editor.vue b/src/ui/c-diff-editor/c-diff-editor.vue new file mode 100644 index 00000000..2aa29475 --- /dev/null +++ b/src/ui/c-diff-editor/c-diff-editor.vue @@ -0,0 +1,68 @@ + + + From 3a63837d3d47e7adbdf024de8dca6a2736b5a55e Mon Sep 17 00:00:00 2001 From: Corentin THOMASSET Date: Sun, 27 Aug 2023 20:12:31 +0200 Subject: [PATCH 005/138] feat(new tool): iban validation and parser (#591) --- components.d.ts | 6 ++ package.json | 1 + pnpm-lock.yaml | 7 ++ .../iban-validator-and-parser.e2e.spec.ts | 51 +++++++++++++ .../iban-validator-and-parser.service.ts | 18 +++++ .../iban-validator-and-parser.vue | 71 +++++++++++++++++++ src/tools/iban-validator-and-parser/index.ts | 12 ++++ src/tools/index.ts | 3 +- .../c-key-value-list.types.ts | 9 +++ src/ui/c-key-value-list/c-key-value-list.vue | 37 ++++++++++ .../c-text-copyable/c-text-copyable.demo.vue | 3 + src/ui/c-text-copyable/c-text-copyable.vue | 17 +++++ src/ui/c-tooltip/c-tooltip.demo.vue | 17 +++++ src/ui/c-tooltip/c-tooltip.vue | 27 +++++++ 14 files changed, 278 insertions(+), 1 deletion(-) create mode 100644 src/tools/iban-validator-and-parser/iban-validator-and-parser.e2e.spec.ts create mode 100644 src/tools/iban-validator-and-parser/iban-validator-and-parser.service.ts create mode 100644 src/tools/iban-validator-and-parser/iban-validator-and-parser.vue create mode 100644 src/tools/iban-validator-and-parser/index.ts create mode 100644 src/ui/c-key-value-list/c-key-value-list.types.ts create mode 100644 src/ui/c-key-value-list/c-key-value-list.vue create mode 100644 src/ui/c-text-copyable/c-text-copyable.demo.vue create mode 100644 src/ui/c-text-copyable/c-text-copyable.vue create mode 100644 src/ui/c-tooltip/c-tooltip.demo.vue create mode 100644 src/ui/c-tooltip/c-tooltip.vue diff --git a/components.d.ts b/components.d.ts index 076fc061..b88ae981 100644 --- a/components.d.ts +++ b/components.d.ts @@ -32,6 +32,7 @@ declare module '@vue/runtime-core' { Chronometer: typeof import('./src/tools/chronometer/chronometer.vue')['default'] CInputText: typeof import('./src/ui/c-input-text/c-input-text.vue')['default'] 'CInputText.demo': typeof import('./src/ui/c-input-text/c-input-text.demo.vue')['default'] + CKeyValueList: typeof import('./src/ui/c-key-value-list/c-key-value-list.vue')['default'] CLabel: typeof import('./src/ui/c-label/c-label.vue')['default'] CLink: typeof import('./src/ui/c-link/c-link.vue')['default'] 'CLink.demo': typeof import('./src/ui/c-link/c-link.demo.vue')['default'] @@ -45,6 +46,10 @@ declare module '@vue/runtime-core' { CrontabGenerator: typeof import('./src/tools/crontab-generator/crontab-generator.vue')['default'] CSelect: typeof import('./src/ui/c-select/c-select.vue')['default'] 'CSelect.demo': typeof import('./src/ui/c-select/c-select.demo.vue')['default'] + CTextCopyable: typeof import('./src/ui/c-text-copyable/c-text-copyable.vue')['default'] + 'CTextCopyable.demo': typeof import('./src/ui/c-text-copyable/c-text-copyable.demo.vue')['default'] + CTooltip: typeof import('./src/ui/c-tooltip/c-tooltip.vue')['default'] + 'CTooltip.demo': typeof import('./src/ui/c-tooltip/c-tooltip.demo.vue')['default'] DateTimeConverter: typeof import('./src/tools/date-time-converter/date-time-converter.vue')['default'] 'DemoHome.page': typeof import('./src/ui/demo/demo-home.page.vue')['default'] DemoWrapper: typeof import('./src/ui/demo/demo-wrapper.vue')['default'] @@ -68,6 +73,7 @@ declare module '@vue/runtime-core' { HtmlEntities: typeof import('./src/tools/html-entities/html-entities.vue')['default'] HtmlWysiwygEditor: typeof import('./src/tools/html-wysiwyg-editor/html-wysiwyg-editor.vue')['default'] HttpStatusCodes: typeof import('./src/tools/http-status-codes/http-status-codes.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:contentCopy': typeof import('~icons/mdi/content-copy')['default'] 'IconMdi:kettleSteamOutline': typeof import('~icons/mdi/kettle-steam-outline')['default'] diff --git a/package.json b/package.json index b68e04f7..1cad277b 100644 --- a/package.json +++ b/package.json @@ -58,6 +58,7 @@ "fuse.js": "^6.6.2", "highlight.js": "^11.7.0", "iarna-toml-esm": "^3.0.5", + "ibantools": "^4.3.3", "json5": "^2.2.3", "jwt-decode": "^3.1.2", "libphonenumber-js": "^1.10.28", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 9ceb775e..0c2b5ca8 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -80,6 +80,9 @@ dependencies: iarna-toml-esm: specifier: ^3.0.5 version: 3.0.5 + ibantools: + specifier: ^4.3.3 + version: 4.3.3 json5: specifier: ^2.2.3 version: 2.2.3 @@ -5845,6 +5848,10 @@ packages: stream: 0.0.2 dev: false + /ibantools@4.3.3: + resolution: {integrity: sha512-RUTlGuFj3cU/Qfu5YIrsIZjW34/VDgKOz5fDr64Mc4NWP9b2i48vQ39r5xCl1yyFQeyEG/lASstIQHAUX18rRA==} + dev: false + /iconv-lite@0.6.3: resolution: {integrity: sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==} engines: {node: '>=0.10.0'} diff --git a/src/tools/iban-validator-and-parser/iban-validator-and-parser.e2e.spec.ts b/src/tools/iban-validator-and-parser/iban-validator-and-parser.e2e.spec.ts new file mode 100644 index 00000000..3501543f --- /dev/null +++ b/src/tools/iban-validator-and-parser/iban-validator-and-parser.e2e.spec.ts @@ -0,0 +1,51 @@ +import { type Page, expect, test } from '@playwright/test'; +import _ from 'lodash'; + +async function extractIbanInfo({ page }: { page: Page }) { + const tdHandles = await page.locator('table tr td').elementHandles(); + const tdTextContents = await Promise.all(tdHandles.map(el => el.textContent())); + + return _.chain(tdTextContents) + .map(tdTextContent => tdTextContent?.trim().replace(' Copy to clipboard', '')) + .chunk(2) + .value(); +} + +test.describe('Tool - Iban validator and parser', () => { + test.beforeEach(async ({ page }) => { + await page.goto('/iban-validator-and-parser'); + }); + + test('Has correct title', async ({ page }) => { + await expect(page).toHaveTitle('IBAN validator and parser - IT Tools'); + }); + + test('iban info are extracted from a valid iban', async ({ page }) => { + await page.getByTestId('iban-input').fill('DE89370400440532013000'); + + const ibanInfo = await extractIbanInfo({ page }); + + expect(ibanInfo).toEqual([ + ['Is IBAN valid ?', 'Yes'], + ['Is IBAN a QR-IBAN ?', 'No'], + ['Country code', 'DE'], + ['BBAN', '370400440532013000'], + ['IBAN friendly format', 'DE89 3704 0044 0532 0130 00'], + ]); + }); + + test('invalid iban errors are displayed', async ({ page }) => { + await page.getByTestId('iban-input').fill('FR7630006060011234567890189'); + + const ibanInfo = await extractIbanInfo({ page }); + + expect(ibanInfo).toEqual([ + ['Is IBAN valid ?', 'No'], + ['IBAN errors', 'Wrong account bank branch checksumWrong IBAN checksum Copy to clipboard'], + ['Is IBAN a QR-IBAN ?', 'No'], + ['Country code', 'N/A'], + ['BBAN', 'N/A'], + ['IBAN friendly format', 'FR76 3000 6060 0112 3456 7890 189'], + ]); + }); +}); diff --git a/src/tools/iban-validator-and-parser/iban-validator-and-parser.service.ts b/src/tools/iban-validator-and-parser/iban-validator-and-parser.service.ts new file mode 100644 index 00000000..bde71dba --- /dev/null +++ b/src/tools/iban-validator-and-parser/iban-validator-and-parser.service.ts @@ -0,0 +1,18 @@ +import { ValidationErrorsIBAN } from 'ibantools'; + +export { getFriendlyErrors }; + +const ibanErrorToMessage = { + [ValidationErrorsIBAN.NoIBANProvided]: 'No IBAN provided', + [ValidationErrorsIBAN.NoIBANCountry]: 'No IBAN country', + [ValidationErrorsIBAN.WrongBBANLength]: 'Wrong BBAN length', + [ValidationErrorsIBAN.WrongBBANFormat]: 'Wrong BBAN format', + [ValidationErrorsIBAN.ChecksumNotNumber]: 'Checksum is not a number', + [ValidationErrorsIBAN.WrongIBANChecksum]: 'Wrong IBAN checksum', + [ValidationErrorsIBAN.WrongAccountBankBranchChecksum]: 'Wrong account bank branch checksum', + [ValidationErrorsIBAN.QRIBANNotAllowed]: 'QR-IBAN not allowed', +}; + +function getFriendlyErrors(errorCodes: ValidationErrorsIBAN[]) { + return errorCodes.map(errorCode => ibanErrorToMessage[errorCode]).filter(Boolean); +} diff --git a/src/tools/iban-validator-and-parser/iban-validator-and-parser.vue b/src/tools/iban-validator-and-parser/iban-validator-and-parser.vue new file mode 100644 index 00000000..d5cdc022 --- /dev/null +++ b/src/tools/iban-validator-and-parser/iban-validator-and-parser.vue @@ -0,0 +1,71 @@ + + + diff --git a/src/tools/iban-validator-and-parser/index.ts b/src/tools/iban-validator-and-parser/index.ts new file mode 100644 index 00000000..b0cae50d --- /dev/null +++ b/src/tools/iban-validator-and-parser/index.ts @@ -0,0 +1,12 @@ +import { defineTool } from '../tool'; +import Bank from '~icons/mdi/bank'; + +export const tool = defineTool({ + name: 'IBAN validator and parser', + path: '/iban-validator-and-parser', + description: 'Validate and parse IBAN numbers. Check if IBAN is valid and get the country, BBAN, if it is a QR-IBAN and the IBAN friendly format.', + keywords: ['iban', 'validator', 'and', 'parser', 'bic', 'bank'], + component: () => import('./iban-validator-and-parser.vue'), + icon: Bank, + createdAt: new Date('2023-08-26'), +}); diff --git a/src/tools/index.ts b/src/tools/index.ts index 39b34ad6..15770b56 100644 --- a/src/tools/index.ts +++ b/src/tools/index.ts @@ -1,6 +1,7 @@ import { tool as base64FileConverter } from './base64-file-converter'; import { tool as base64StringConverter } from './base64-string-converter'; import { tool as basicAuthGenerator } from './basic-auth-generator'; +import { tool as ibanValidatorAndParser } from './iban-validator-and-parser'; import { tool as stringObfuscator } from './string-obfuscator'; import { tool as textDiff } from './text-diff'; import { tool as emojiPicker } from './emoji-picker'; @@ -151,7 +152,7 @@ export const toolsByCategory: ToolCategory[] = [ }, { name: 'Data', - components: [phoneParserAndFormatter], + components: [phoneParserAndFormatter, ibanValidatorAndParser], }, ]; diff --git a/src/ui/c-key-value-list/c-key-value-list.types.ts b/src/ui/c-key-value-list/c-key-value-list.types.ts new file mode 100644 index 00000000..40cc4ba4 --- /dev/null +++ b/src/ui/c-key-value-list/c-key-value-list.types.ts @@ -0,0 +1,9 @@ +export interface CKeyValueListItem { + label: string + value: string | string[] | number | boolean | undefined | null + hideOnNil?: boolean + placeholder?: string + showCopyButton?: boolean +} + +export type CKeyValueListItems = CKeyValueListItem[]; diff --git a/src/ui/c-key-value-list/c-key-value-list.vue b/src/ui/c-key-value-list/c-key-value-list.vue new file mode 100644 index 00000000..e3b19afd --- /dev/null +++ b/src/ui/c-key-value-list/c-key-value-list.vue @@ -0,0 +1,37 @@ + + + diff --git a/src/ui/c-text-copyable/c-text-copyable.demo.vue b/src/ui/c-text-copyable/c-text-copyable.demo.vue new file mode 100644 index 00000000..e2aeb1da --- /dev/null +++ b/src/ui/c-text-copyable/c-text-copyable.demo.vue @@ -0,0 +1,3 @@ + diff --git a/src/ui/c-text-copyable/c-text-copyable.vue b/src/ui/c-text-copyable/c-text-copyable.vue new file mode 100644 index 00000000..b78e4cda --- /dev/null +++ b/src/ui/c-text-copyable/c-text-copyable.vue @@ -0,0 +1,17 @@ + + + diff --git a/src/ui/c-tooltip/c-tooltip.demo.vue b/src/ui/c-tooltip/c-tooltip.demo.vue new file mode 100644 index 00000000..d3852573 --- /dev/null +++ b/src/ui/c-tooltip/c-tooltip.demo.vue @@ -0,0 +1,17 @@ + diff --git a/src/ui/c-tooltip/c-tooltip.vue b/src/ui/c-tooltip/c-tooltip.vue new file mode 100644 index 00000000..cc48fe1c --- /dev/null +++ b/src/ui/c-tooltip/c-tooltip.vue @@ -0,0 +1,27 @@ + + + From d1dff428d8c9b913930cec2bfefe03f5e662934b Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Fri, 1 Sep 2023 10:14:50 +0200 Subject: [PATCH 006/138] chore(deps): update dependency @intlify/unplugin-vue-i18n to ^0.13.0 (#597) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- package.json | 2 +- pnpm-lock.yaml | 132 ++++++++++++++++--------------------------------- 2 files changed, 44 insertions(+), 90 deletions(-) diff --git a/package.json b/package.json index 1cad277b..11bf24ab 100644 --- a/package.json +++ b/package.json @@ -89,7 +89,7 @@ "devDependencies": { "@antfu/eslint-config": "^0.41.0", "@iconify-json/mdi": "^1.1.50", - "@intlify/unplugin-vue-i18n": "^0.12.3", + "@intlify/unplugin-vue-i18n": "^0.13.0", "@playwright/test": "^1.32.3", "@rushstack/eslint-patch": "^1.2.0", "@tsconfig/node18": "^18.2.0", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 0c2b5ca8..54760d06 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -170,8 +170,8 @@ devDependencies: specifier: ^1.1.50 version: 1.1.50 '@intlify/unplugin-vue-i18n': - specifier: ^0.12.3 - version: 0.12.3(rollup@2.79.1)(vue-i18n@9.2.2) + specifier: ^0.13.0 + version: 0.13.0(rollup@2.79.1)(vue-i18n@9.2.2) '@playwright/test': specifier: ^1.32.3 version: 1.32.3 @@ -486,7 +486,7 @@ packages: '@babel/helper-compilation-targets': 7.22.5(@babel/core@7.22.5) '@babel/helper-module-transforms': 7.22.5 '@babel/helpers': 7.22.5 - '@babel/parser': 7.22.5 + '@babel/parser': 7.22.10 '@babel/template': 7.22.5 '@babel/traverse': 7.22.5 '@babel/types': 7.22.5 @@ -2091,8 +2091,8 @@ packages: - supports-color dev: true - /@intlify/bundle-utils@7.0.2(vue-i18n@9.2.2): - resolution: {integrity: sha512-8wbx9xhbawBFTE5LPTECiK26RRqrNS31jyWSur72ZXZZ4it5jiZTcG6eUJlNirr4+jXYio2DGY299JsGVT4cpw==} + /@intlify/bundle-utils@7.1.0(vue-i18n@9.2.2): + resolution: {integrity: sha512-Q88Wl2T8oaRXls8Yr6l807jZM88mceJvK7QS6gKdU8/pf3gTpU9XmcYORDgAv6h5WKQMoaFjNVf5+SWLfTAysA==} engines: {node: '>= 14.16'} peerDependencies: petite-vue-i18n: '*' @@ -2103,17 +2103,17 @@ packages: vue-i18n: optional: true dependencies: - '@intlify/message-compiler': 9.3.0-beta.24 - '@intlify/shared': 9.3.0-beta.24 + '@intlify/message-compiler': 9.3.0-beta.27 + '@intlify/shared': 9.3.0-beta.27 acorn: 8.10.0 escodegen: 2.0.0 estree-walker: 2.0.2 - jsonc-eslint-parser: 1.4.1 + jsonc-eslint-parser: 2.3.0 magic-string: 0.30.2 mlly: 1.4.0 source-map-js: 1.0.2 vue-i18n: 9.2.2(vue@3.3.4) - yaml-eslint-parser: 0.3.2 + yaml-eslint-parser: 1.2.2 dev: true /@intlify/core-base@9.2.2: @@ -2138,11 +2138,11 @@ packages: '@intlify/shared': 9.2.2 source-map: 0.6.1 - /@intlify/message-compiler@9.3.0-beta.24: - resolution: {integrity: sha512-prhHATkgp0mpPqoVgiAtLmUc1JMvs8fMH6w53AVEBn+VF87dLhzanfmWY5FoZWORG51ag54gBDBOoM/VFv3m3A==} + /@intlify/message-compiler@9.3.0-beta.27: + resolution: {integrity: sha512-GC8rSbd7V67Zu+a9Z0bpV4riBek11YCURJU50YaEhV4Ub2JHEPtoYxK5r2eIsq/kp+M2hJyGLiC4NJUrGa2VwQ==} engines: {node: '>= 16'} dependencies: - '@intlify/shared': 9.3.0-beta.24 + '@intlify/shared': 9.3.0-beta.27 source-map-js: 1.0.2 dev: true @@ -2150,13 +2150,18 @@ packages: resolution: {integrity: sha512-wRwTpsslgZS5HNyM7uDQYZtxnbI12aGiBZURX3BTR9RFIKKRWpllTsgzHWvj3HKm3Y2Sh5LPC1r0PDCKEhVn9Q==} engines: {node: '>= 14'} - /@intlify/shared@9.3.0-beta.24: - resolution: {integrity: sha512-AKxJ8s7eKIQWkNaf4wyyoLRwf4puCuQgjSChlDJm5JBEt6T8HGgnYTJLRXu6LD/JACn3Qwu6hM/XRX1c9yvjmQ==} + /@intlify/shared@9.3.0-beta.14-77e850b: + resolution: {integrity: sha512-aHZYRM0sJN+YSUnoC5Dv4L1TFYtP23kdTkrK5cHSEqUbI5UXc8FbnXPal0lJliMhO0ED7Ic7aEOeQX84BM3xCQ==} + engines: {node: '>= 14'} + dev: true + + /@intlify/shared@9.3.0-beta.27: + resolution: {integrity: sha512-hPMsmVCs+ZUVHHU5VORG6LopzXZT7zmyVNqc9OQG80YpA/N4lT/pkJ4B6DTNIsv2C7mwfGM7RdK+0qPki43YgA==} engines: {node: '>= 16'} dev: true - /@intlify/unplugin-vue-i18n@0.12.3(rollup@2.79.1)(vue-i18n@9.2.2): - resolution: {integrity: sha512-0riPtSfTM58JmGNMmJho/aHD2z3K24BESYAmkLvKlo61/LbaPvnjYU1DbSbJEm6bSjE2oEjUj+di3QaYxXei/w==} + /@intlify/unplugin-vue-i18n@0.13.0(rollup@2.79.1)(vue-i18n@9.2.2): + resolution: {integrity: sha512-Mm9NhcvbsSZ5FXXnCpL/XFCk1hPp809hxErNmnwqGp21JjYOKGp3wpQSrpvGk33ZrHZbhPqAu70IEVEAxVZ5+A==} engines: {node: '>= 14.16'} peerDependencies: petite-vue-i18n: '*' @@ -2170,8 +2175,8 @@ packages: vue-i18n-bridge: optional: true dependencies: - '@intlify/bundle-utils': 7.0.2(vue-i18n@9.2.2) - '@intlify/shared': 9.3.0-beta.24 + '@intlify/bundle-utils': 7.1.0(vue-i18n@9.2.2) + '@intlify/shared': 9.3.0-beta.14-77e850b '@rollup/pluginutils': 5.0.2(rollup@2.79.1) '@vue/compiler-sfc': 3.3.4 debug: 4.3.4 @@ -3247,7 +3252,7 @@ packages: dependencies: '@unhead/dom': 0.5.1 '@unhead/schema': 0.5.1 - '@vueuse/shared': 10.4.0(vue@3.3.4) + '@vueuse/shared': 10.4.1(vue@3.3.4) unhead: 0.5.1 vue: 3.3.4 transitivePeerDependencies: @@ -3829,8 +3834,8 @@ packages: - vue dev: false - /@vueuse/shared@10.4.0(vue@3.3.4): - resolution: {integrity: sha512-52asvLf5cbAS/h6xWjqoY4MgjxmFjnVNf/nA8BP7RbeIrIGcf+BZbeOcVo+92byqArXEJiBxptXpufQvbwJL/w==} + /@vueuse/shared@10.4.1(vue@3.3.4): + resolution: {integrity: sha512-vz5hbAM4qA0lDKmcr2y3pPdU+2EVw/yzfRsBdu+6+USGa4PxqSQRYIUC9/NcT06y+ZgaTsyURw2I9qOFaaXHAg==} dependencies: vue-demi: 0.14.5(vue@3.3.4) transitivePeerDependencies: @@ -3850,20 +3855,12 @@ packages: resolution: {integrity: sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==} dev: true - /acorn-jsx@5.3.2(acorn@7.4.1): + /acorn-jsx@5.3.2(acorn@8.10.0): resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==} peerDependencies: acorn: ^6.0.0 || ^7.0.0 || ^8.0.0 dependencies: - acorn: 7.4.1 - dev: true - - /acorn-jsx@5.3.2(acorn@8.9.0): - resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==} - peerDependencies: - acorn: ^6.0.0 || ^7.0.0 || ^8.0.0 - dependencies: - acorn: 8.9.0 + acorn: 8.10.0 dev: true /acorn-walk@8.2.0: @@ -3871,15 +3868,10 @@ packages: engines: {node: '>=0.4.0'} dev: true - /acorn@7.4.1: - resolution: {integrity: sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==} - engines: {node: '>=0.4.0'} - dev: true - /acorn@8.10.0: resolution: {integrity: sha512-F0SAmZ8iUtS//m8DmCTA0jlh6TDKkHQyK6xc6V4KDTyZKA9dnvX9/3sRTVQrWm79glUAZbnmmNcdYwUIHWVybw==} engines: {node: '>=0.4.0'} - dev: true + hasBin: true /acorn@8.9.0: resolution: {integrity: sha512-jaVNAFBHNLXspO543WnNNPZFRtavh3skAkITqD0/2aeMkKZTN+254PyhwxFYrk3vQ1xfY+2wbesJMs/JC8/PwQ==} @@ -4901,6 +4893,7 @@ packages: /escodegen@2.0.0: resolution: {integrity: sha512-mmHKys/C8BFUGI+MAWNcSYoORYLMdPzjrknd2Vc+bUsjN5bXcr8EhrNB+UTqfL1y3I9c4fw2ihgtMPQLBRiQxw==} engines: {node: '>=6.0'} + hasBin: true dependencies: esprima: 4.0.1 estraverse: 5.3.0 @@ -5179,18 +5172,6 @@ packages: estraverse: 5.3.0 dev: true - /eslint-utils@2.1.0: - resolution: {integrity: sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg==} - engines: {node: '>=6'} - dependencies: - eslint-visitor-keys: 1.3.0 - dev: true - - /eslint-visitor-keys@1.3.0: - resolution: {integrity: sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==} - engines: {node: '>=4'} - dev: true - /eslint-visitor-keys@3.4.3: resolution: {integrity: sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} @@ -5241,27 +5222,19 @@ packages: - supports-color dev: true - /espree@6.2.1: - resolution: {integrity: sha512-ysCxRQY3WaXJz9tdbWOwuWr5Y/XrPTGX9Kiz3yoUXwW0VZ4w30HTkQLaGx/+ttFjF8i+ACbArnB4ce68a9m5hw==} - engines: {node: '>=6.0.0'} - dependencies: - acorn: 7.4.1 - acorn-jsx: 5.3.2(acorn@7.4.1) - eslint-visitor-keys: 1.3.0 - dev: true - /espree@9.6.1: resolution: {integrity: sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} dependencies: - acorn: 8.9.0 - acorn-jsx: 5.3.2(acorn@8.9.0) + acorn: 8.10.0 + acorn-jsx: 5.3.2(acorn@8.10.0) eslint-visitor-keys: 3.4.3 dev: true /esprima@4.0.1: resolution: {integrity: sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==} engines: {node: '>=4'} + hasBin: true dev: true /esquery@1.5.0: @@ -6228,6 +6201,7 @@ packages: /js-yaml@3.14.1: resolution: {integrity: sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==} + hasBin: true dependencies: argparse: 1.0.10 esprima: 4.0.1 @@ -6235,6 +6209,7 @@ packages: /js-yaml@4.1.0: resolution: {integrity: sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==} + hasBin: true dependencies: argparse: 2.0.1 dev: true @@ -6326,17 +6301,6 @@ packages: resolution: {integrity: sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==} engines: {node: '>=6'} - /jsonc-eslint-parser@1.4.1: - resolution: {integrity: sha512-hXBrvsR1rdjmB2kQmUjf1rEIa+TqHBGMge8pwi++C+Si1ad7EjZrJcpgwym+QGK/pqTx+K7keFAtLlVNdLRJOg==} - engines: {node: '>=8.10.0'} - dependencies: - acorn: 7.4.1 - eslint-utils: 2.1.0 - eslint-visitor-keys: 1.3.0 - espree: 6.2.1 - semver: 6.3.1 - dev: true - /jsonc-eslint-parser@2.3.0: resolution: {integrity: sha512-9xZPKVYp9DxnM3sd1yAsh/d59iIaswDkai8oTxbursfKYbg/ibjX0IzFt35+VZ8iEW453TVTXztnRvYUQlAfUQ==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} @@ -6668,7 +6632,7 @@ packages: /mlly@1.4.0: resolution: {integrity: sha512-ua8PAThnTwpprIaU47EPeZ/bPUVp2QYBbWMphUQpVdBI3Lgqzm5KZQ45Agm3YJedHXaIHl6pBGabaLSUPPSptg==} dependencies: - acorn: 8.9.0 + acorn: 8.10.0 pathe: 1.1.1 pkg-types: 1.0.3 ufo: 1.1.2 @@ -7095,6 +7059,7 @@ packages: /pify@4.0.1: resolution: {integrity: sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==} engines: {node: '>=6'} + requiresBuild: true dev: true optional: true @@ -7358,6 +7323,7 @@ packages: /prr@1.0.1: resolution: {integrity: sha512-yPw4Sng1gWghHQWj0B3ZggWUm4qVbPwPFcRG8KyxiU7J2OHFSoEHKS+EZ3fv5l1t9CyCiop6l/ZYeWbrgoQejw==} + requiresBuild: true dev: true optional: true @@ -7634,10 +7600,12 @@ packages: /safer-buffer@2.1.2: resolution: {integrity: sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==} + requiresBuild: true dev: true /sax@1.2.4: resolution: {integrity: sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==} + requiresBuild: true dev: true optional: true @@ -7953,7 +7921,7 @@ packages: /strip-literal@1.0.1: resolution: {integrity: sha512-QZTsipNpa2Ppr6v1AmJHESqJ3Uz247MUS0OjrnnZjFAvEoWqxuyFuXn2xLgMtRnijJShAa1HL0gtJyUs7u7n3Q==} dependencies: - acorn: 8.9.0 + acorn: 8.10.0 /supports-color@5.5.0: resolution: {integrity: sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==} @@ -8323,7 +8291,7 @@ packages: pkg-types: 1.0.3 scule: 1.0.0 strip-literal: 1.0.1 - unplugin: 1.3.1 + unplugin: 1.4.0 transitivePeerDependencies: - rollup dev: false @@ -8495,11 +8463,10 @@ packages: /unplugin@1.4.0: resolution: {integrity: sha512-5x4eIEL6WgbzqGtF9UV8VEC/ehKptPXDS6L2b0mv4FRMkJxRtjaJfOWDd6a8+kYbqsjklix7yWP0N3SUepjXcg==} dependencies: - acorn: 8.9.0 + acorn: 8.10.0 chokidar: 3.5.3 webpack-sources: 3.2.3 webpack-virtual-modules: 0.5.0 - dev: true /upath@1.2.0: resolution: {integrity: sha512-aZwGpamFO61g3OlfT7OQCHqhGnW43ieH9WZeP7QxN/G/jS4jfqUkZxoryvJgVPEcrl5NL/ggHsSmLMHuH64Lhg==} @@ -9219,14 +9186,6 @@ packages: /yallist@4.0.0: resolution: {integrity: sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==} - /yaml-eslint-parser@0.3.2: - resolution: {integrity: sha512-32kYO6kJUuZzqte82t4M/gB6/+11WAuHiEnK7FreMo20xsCKPeFH5tDBU7iWxR7zeJpNnMXfJyXwne48D0hGrg==} - dependencies: - eslint-visitor-keys: 1.3.0 - lodash: 4.17.21 - yaml: 1.10.2 - dev: true - /yaml-eslint-parser@1.2.2: resolution: {integrity: sha512-pEwzfsKbTrB8G3xc/sN7aw1v6A6c/pKxLAkjclnAyo5g5qOh6eL9WGu0o3cSDQZKrTNk4KL4lQSwZW+nBkANEg==} engines: {node: ^14.17.0 || >=16.0.0} @@ -9236,11 +9195,6 @@ packages: yaml: 2.2.1 dev: true - /yaml@1.10.2: - resolution: {integrity: sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==} - engines: {node: '>= 6'} - dev: true - /yaml@2.2.1: resolution: {integrity: sha512-e0WHiYql7+9wr4cWMx3TVQrNwejKaEe7/rHNmQmqRjazfOP5W8PB6Jpebb5o6fIapbz9o9+2ipcaTM2ZwDI6lw==} engines: {node: '>= 14'} From e18bae1fca3ff323c4f79add427f87f421dc482c Mon Sep 17 00:00:00 2001 From: Anton Mosich Date: Fri, 1 Sep 2023 16:30:51 +0200 Subject: [PATCH 007/138] refactor(bcrypt): fix typo (#604) --- src/tools/bcrypt/bcrypt.vue | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/tools/bcrypt/bcrypt.vue b/src/tools/bcrypt/bcrypt.vue index b1667649..55c0005f 100644 --- a/src/tools/bcrypt/bcrypt.vue +++ b/src/tools/bcrypt/bcrypt.vue @@ -45,7 +45,7 @@ const compareMatch = computed(() => compareSync(compareString.value, compareHash - +
From f035f485c03209b2bb9710e9e81c8f8a3d632ae0 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Sun, 3 Sep 2023 16:16:01 +0200 Subject: [PATCH 008/138] chore(deps): update dependency unplugin-icons to ^0.17.0 (#609) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- package.json | 2 +- pnpm-lock.yaml | 29 +++++++++++++++++++++++------ 2 files changed, 24 insertions(+), 7 deletions(-) diff --git a/package.json b/package.json index 11bf24ab..a835df09 100644 --- a/package.json +++ b/package.json @@ -121,7 +121,7 @@ "typescript": "~5.2.0", "unocss": "^0.55.0", "unocss-preset-scrollbar": "^0.2.1", - "unplugin-icons": "^0.16.5", + "unplugin-icons": "^0.17.0", "unplugin-vue-components": "^0.25.0", "vite": "^4.4.9", "vite-plugin-pwa": "^0.16.0", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 54760d06..af940199 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -266,8 +266,8 @@ devDependencies: specifier: ^0.2.1 version: 0.2.1(unocss@0.55.0) unplugin-icons: - specifier: ^0.16.5 - version: 0.16.5(@vue/compiler-sfc@3.2.47) + specifier: ^0.17.0 + version: 0.17.0(@vue/compiler-sfc@3.2.47) unplugin-vue-components: specifier: ^0.25.0 version: 0.25.0(rollup@2.79.1)(vue@3.3.4) @@ -417,6 +417,10 @@ packages: resolution: {integrity: sha512-dlR6LdS+0SzOAPx/TPRhnoi7hE251OVeT2Snw0RguNbBSbjUHdWr0l3vcUUDg26rEysT89kCbtw1lVorBXLLCg==} dev: true + /@antfu/utils@0.7.6: + resolution: {integrity: sha512-pvFiLP2BeOKA/ZOS6jxx4XhKzdVLHDhGlFEaZ2flWWYf2xOqVniqpk38I04DFRyz+L0ASggl7SkItTc+ZLju4w==} + dev: true + /@apideck/better-ajv-errors@0.3.6(ajv@8.12.0): resolution: {integrity: sha512-P+ZygBLZtkp0qqOAJJVX4oX/sFo5JR3eBWwwuqHHhK0GIgQOKWrAfiAaWX0aArHkRWHMuggFEgAZNxVPwPZYaA==} engines: {node: '>=10'} @@ -2091,6 +2095,19 @@ packages: - supports-color dev: true + /@iconify/utils@2.1.9: + resolution: {integrity: sha512-mo+A4n3MwLlWlg1SoSO+Dt6pOPWKElk9sSJ6ZpuzbB9OcjxN8RUWxU3ulPwB1nglErWKRam2x4BAohbYF7FiFA==} + dependencies: + '@antfu/install-pkg': 0.1.1 + '@antfu/utils': 0.7.6 + '@iconify/types': 2.0.0 + debug: 4.3.4 + kolorist: 1.8.0 + local-pkg: 0.4.3 + transitivePeerDependencies: + - supports-color + dev: true + /@intlify/bundle-utils@7.1.0(vue-i18n@9.2.2): resolution: {integrity: sha512-Q88Wl2T8oaRXls8Yr6l807jZM88mceJvK7QS6gKdU8/pf3gTpU9XmcYORDgAv6h5WKQMoaFjNVf5+SWLfTAysA==} engines: {node: '>= 14.16'} @@ -8391,8 +8408,8 @@ packages: - rollup dev: false - /unplugin-icons@0.16.5(@vue/compiler-sfc@3.2.47): - resolution: {integrity: sha512-laCCqMWfng1XZgB9yowGfjBdDhtmz8t8zVnhzRNEMhBNdy26QrVewVmdXk/zsiAQYnEWvIxTjvW1nQXrxdd2+w==} + /unplugin-icons@0.17.0(@vue/compiler-sfc@3.2.47): + resolution: {integrity: sha512-gMv66eY/Hj64heM55XrfDH3LUCWI51mtkBVUPVl9VkpvLgAYhdVe9nRuzu6p+idmCLSQVq7xiPxQcD4aXCgW5A==} peerDependencies: '@svgr/core': '>=7.0.0' '@svgx/core': ^1.0.1 @@ -8412,8 +8429,8 @@ packages: optional: true dependencies: '@antfu/install-pkg': 0.1.1 - '@antfu/utils': 0.7.5 - '@iconify/utils': 2.1.7 + '@antfu/utils': 0.7.6 + '@iconify/utils': 2.1.9 '@vue/compiler-sfc': 3.2.47 debug: 4.3.4 kolorist: 1.8.0 From 18dd1400bdc14287c7e5f40808e374163618b9fd Mon Sep 17 00:00:00 2001 From: Corentin THOMASSET Date: Sun, 3 Sep 2023 16:28:19 +0200 Subject: [PATCH 009/138] refactor(CI): run e2e against built app and no longer vercel (#610) --- .github/workflows/ci.yml | 2 -- .github/workflows/e2e-tests.yml | 13 ++++++++----- package.json | 3 ++- playwright.config.ts | 19 ++++++++++--------- 4 files changed, 20 insertions(+), 17 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 611b7e6f..5f5a9b6a 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -31,6 +31,4 @@ jobs: run: pnpm typecheck - name: Build the app - env: - NODE_OPTIONS: --max-old-space-size=4096 run: pnpm build diff --git a/.github/workflows/e2e-tests.yml b/.github/workflows/e2e-tests.yml index ced3bbde..d55e7785 100644 --- a/.github/workflows/e2e-tests.yml +++ b/.github/workflows/e2e-tests.yml @@ -1,13 +1,13 @@ name: E2E tests -on: [deployment_status] - +on: + pull_request: + push: + branches: + - main jobs: test: - if: github.event.deployment_status.state == 'success' timeout-minutes: 60 runs-on: ubuntu-latest - env: - BASE_URL: ${{ github.event.deployment_status.target_url }} strategy: matrix: shard: [1/3, 2/3, 3/3] @@ -28,6 +28,9 @@ jobs: - name: Install dependencies run: pnpm install + - name: Build app + run: pnpm build + - name: Restore Playwright browsers from cache uses: actions/cache@v3 with: diff --git a/package.json b/package.json index a835df09..977e31ef 100644 --- a/package.json +++ b/package.json @@ -21,11 +21,12 @@ }, "scripts": { "dev": "vite", - "build": "vue-tsc --noEmit && vite build", + "build": "vue-tsc --noEmit && NODE_OPTIONS=--max_old_space_size=4096 vite build", "preview": "vite preview --port 5050", "test": "npm run test:unit", "test:unit": "vitest --environment jsdom", "test:e2e": "playwright test", + "test:e2e:dev": "BASE_URL=http://localhost:5173 NO_WEB_SERVER=true playwright test", "coverage": "vitest run --coverage", "typecheck": "vue-tsc --noEmit -p tsconfig.vitest.json --composite false", "lint": "eslint src --ext .vue,.js,.jsx,.cjs,.mjs,.ts,.tsx,.cts,.mts --ignore-path .gitignore", diff --git a/playwright.config.ts b/playwright.config.ts index 47fa0cea..3caa0612 100644 --- a/playwright.config.ts +++ b/playwright.config.ts @@ -2,6 +2,7 @@ import { defineConfig, devices } from '@playwright/test'; const isCI = !!process.env.CI; const baseUrl = process.env.BASE_URL || 'http://localhost:5050'; +const useWebServer = process.env.NO_WEB_SERVER !== 'true'; /** * See https://playwright.dev/docs/test-configuration. @@ -52,13 +53,13 @@ export default defineConfig({ /* Run your local dev server before starting the tests */ - ...(isCI - ? {} - : { - webServer: { - command: 'npm run preview', - url: 'http://127.0.0.1:5050', - reuseExistingServer: true, - }, - }), + ...(useWebServer + && { + webServer: { + command: 'npm run preview', + url: 'http://127.0.0.1:5050', + reuseExistingServer: !isCI, + }, + } + ), }); From c7d4562d3b196d2f03d35e88679773d509e7d21f Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Sun, 3 Sep 2023 16:51:12 +0200 Subject: [PATCH 010/138] fix(deps): update dependency sql-formatter to v13 (#606) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- package.json | 2 +- pnpm-lock.yaml | 16 ++++++++++++---- 2 files changed, 13 insertions(+), 5 deletions(-) diff --git a/package.json b/package.json index 977e31ef..53cb2815 100644 --- a/package.json +++ b/package.json @@ -75,7 +75,7 @@ "plausible-tracker": "^0.3.8", "qrcode": "^1.5.1", "randombytes": "^2.1.0", - "sql-formatter": "^12.0.0", + "sql-formatter": "^13.0.0", "ua-parser-js": "^1.0.35", "unicode-emoji-json": "^0.4.0", "unplugin-auto-import": "^0.16.4", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index af940199..74949501 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -129,8 +129,8 @@ dependencies: specifier: ^2.1.0 version: 2.1.0 sql-formatter: - specifier: ^12.0.0 - version: 12.0.0 + specifier: ^13.0.0 + version: 13.0.0 ua-parser-js: specifier: ^1.0.35 version: 1.0.35 @@ -5565,6 +5565,11 @@ packages: resolution: {integrity: sha512-I0UBV/XOz1XkIJHEUDMZAbzCThU/H8DxmSfmdGcKPnVhu2VfFqr34jr9777IyaTYvxjedWhqVIilEDsCdP5G6g==} dev: true + /get-stdin@8.0.0: + resolution: {integrity: sha512-sY22aA6xchAzprjyqmSEQv4UbAAzRN0L2dQB0NlN5acTTK9Don6nhoc3eAbUnpZiCANAMfd/+40kVdKfFygohg==} + engines: {node: '>=10'} + dev: false + /get-stream@6.0.1: resolution: {integrity: sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==} engines: {node: '>=10'} @@ -6713,6 +6718,7 @@ packages: /nearley@2.20.1: resolution: {integrity: sha512-+Mc8UaAebFzgV+KpI5n7DasuuQCHA89dmwm7JXw3TV43ukfNQ9DnBH3Mdb2g/I4Fdxc26pwimBWvjIw0UAILSQ==} + hasBin: true dependencies: commander: 2.20.3 moo: 0.5.2 @@ -7820,10 +7826,12 @@ packages: resolution: {integrity: sha512-VE0SOVEHCk7Qc8ulkWw3ntAzXuqf7S2lvwQaDLRnUeIEaKNQJzV6BwmLKhOqT61aGhfUMrXeaBk+oDGCzvhcug==} dev: false - /sql-formatter@12.0.0: - resolution: {integrity: sha512-LR2m7BEvkyNAPzmcSCZ2b4Qzm5ySiiXS9Juc73VguTqCWIbYv7ZFV4LaDM7jNNZqHPfrqFssO7WWpITsAuLOuQ==} + /sql-formatter@13.0.0: + resolution: {integrity: sha512-V21cVvge4rhn9Fa7K/fTKcmPM+x1yee6Vhq8ZwgaWh3VPBqApgsaoFB5kLAhiqRo5AmSaRyLU7LIdgnNwH01/w==} + hasBin: true dependencies: argparse: 2.0.1 + get-stdin: 8.0.0 nearley: 2.20.1 dev: false From 7ab9204e96e21050760cf3280197c139551829f5 Mon Sep 17 00:00:00 2001 From: Corentin THOMASSET Date: Sun, 3 Sep 2023 18:12:22 +0200 Subject: [PATCH 011/138] refactor(c-key-value-list): got rid of table for layout (#611) --- components.d.ts | 1 + .../iban-validator-and-parser.e2e.spec.ts | 17 ++++++----- .../iban-validator-and-parser.vue | 2 +- .../c-key-value-list-item.vue | 27 +++++++++++++++++ src/ui/c-key-value-list/c-key-value-list.vue | 30 +++++-------------- src/ui/c-tooltip/c-tooltip.vue | 5 +++- 6 files changed, 49 insertions(+), 33 deletions(-) create mode 100644 src/ui/c-key-value-list/c-key-value-list-item.vue diff --git a/components.d.ts b/components.d.ts index b88ae981..af06dfb6 100644 --- a/components.d.ts +++ b/components.d.ts @@ -33,6 +33,7 @@ declare module '@vue/runtime-core' { CInputText: typeof import('./src/ui/c-input-text/c-input-text.vue')['default'] 'CInputText.demo': typeof import('./src/ui/c-input-text/c-input-text.demo.vue')['default'] CKeyValueList: typeof import('./src/ui/c-key-value-list/c-key-value-list.vue')['default'] + CKeyValueListItem: typeof import('./src/ui/c-key-value-list/c-key-value-list-item.vue')['default'] CLabel: typeof import('./src/ui/c-label/c-label.vue')['default'] CLink: typeof import('./src/ui/c-link/c-link.vue')['default'] 'CLink.demo': typeof import('./src/ui/c-link/c-link.demo.vue')['default'] diff --git a/src/tools/iban-validator-and-parser/iban-validator-and-parser.e2e.spec.ts b/src/tools/iban-validator-and-parser/iban-validator-and-parser.e2e.spec.ts index 3501543f..c4a99860 100644 --- a/src/tools/iban-validator-and-parser/iban-validator-and-parser.e2e.spec.ts +++ b/src/tools/iban-validator-and-parser/iban-validator-and-parser.e2e.spec.ts @@ -1,14 +1,15 @@ import { type Page, expect, test } from '@playwright/test'; -import _ from 'lodash'; async function extractIbanInfo({ page }: { page: Page }) { - const tdHandles = await page.locator('table tr td').elementHandles(); - const tdTextContents = await Promise.all(tdHandles.map(el => el.textContent())); + const itemsLines = await page + .locator('.c-key-value-list__item').all(); - return _.chain(tdTextContents) - .map(tdTextContent => tdTextContent?.trim().replace(' Copy to clipboard', '')) - .chunk(2) - .value(); + return await Promise.all( + itemsLines.map(async item => [ + (await item.locator('.c-key-value-list__key').textContent() ?? '').trim(), + (await item.locator('.c-key-value-list__value').textContent() ?? '').trim(), + ]), + ); } test.describe('Tool - Iban validator and parser', () => { @@ -41,7 +42,7 @@ test.describe('Tool - Iban validator and parser', () => { expect(ibanInfo).toEqual([ ['Is IBAN valid ?', 'No'], - ['IBAN errors', 'Wrong account bank branch checksumWrong IBAN checksum Copy to clipboard'], + ['IBAN errors', 'Wrong account bank branch checksum Wrong IBAN checksum'], ['Is IBAN a QR-IBAN ?', 'No'], ['Country code', 'N/A'], ['BBAN', 'N/A'], diff --git a/src/tools/iban-validator-and-parser/iban-validator-and-parser.vue b/src/tools/iban-validator-and-parser/iban-validator-and-parser.vue index d5cdc022..647be983 100644 --- a/src/tools/iban-validator-and-parser/iban-validator-and-parser.vue +++ b/src/tools/iban-validator-and-parser/iban-validator-and-parser.vue @@ -60,7 +60,7 @@ const ibanExamples = [
- +
diff --git a/src/ui/c-key-value-list/c-key-value-list-item.vue b/src/ui/c-key-value-list/c-key-value-list-item.vue new file mode 100644 index 00000000..d21ef5d1 --- /dev/null +++ b/src/ui/c-key-value-list/c-key-value-list-item.vue @@ -0,0 +1,27 @@ + + + diff --git a/src/ui/c-key-value-list/c-key-value-list.vue b/src/ui/c-key-value-list/c-key-value-list.vue index e3b19afd..d8a2b001 100644 --- a/src/ui/c-key-value-list/c-key-value-list.vue +++ b/src/ui/c-key-value-list/c-key-value-list.vue @@ -9,29 +9,13 @@ const formattedItems = computed(() => items.value.filter(item => !_.isNil(item.v diff --git a/src/ui/c-tooltip/c-tooltip.vue b/src/ui/c-tooltip/c-tooltip.vue index cc48fe1c..24c586b8 100644 --- a/src/ui/c-tooltip/c-tooltip.vue +++ b/src/ui/c-tooltip/c-tooltip.vue @@ -19,7 +19,10 @@ const isTargetHovered = useElementHover(targetRef); 'op-100 scale-100': isTargetHovered, }" > - + {{ tooltip }}
From 233d5565f6d4572b283d85d698de1822b3b6fc07 Mon Sep 17 00:00:00 2001 From: Corentin THOMASSET Date: Sun, 3 Sep 2023 22:07:45 +0200 Subject: [PATCH 012/138] refactor(i18n): merge tools scoped locales with global ones (#612) --- src/pages/Home.page.vue | 2 +- src/plugins/i18n.plugin.ts | 24 ++++++++++++++++++++---- vite.config.ts | 5 ++++- 3 files changed, 25 insertions(+), 6 deletions(-) diff --git a/src/pages/Home.page.vue b/src/pages/Home.page.vue index 49d90c67..5c7c3c4f 100644 --- a/src/pages/Home.page.vue +++ b/src/pages/Home.page.vue @@ -49,7 +49,7 @@ const { t } = useI18n();
- {{ t('home.categories.newestTools', 'Newest tools') }} + {{ t('home.categories.newestTools') }} diff --git a/src/plugins/i18n.plugin.ts b/src/plugins/i18n.plugin.ts index c38cdee1..8e0b2d33 100644 --- a/src/plugins/i18n.plugin.ts +++ b/src/plugins/i18n.plugin.ts @@ -1,6 +1,22 @@ -import type { App } from 'vue'; +import type { Plugin } from 'vue'; import { createI18n } from 'vue-i18n'; -import messages from '@intlify/unplugin-vue-i18n/messages'; +import baseMessages from '@intlify/unplugin-vue-i18n/messages'; +import _ from 'lodash'; +import { parse as parseYaml } from 'yaml'; + +const i18nFiles = import.meta.glob('../tools/*/locales/**.yml', { as: 'raw' }); + +const messagesByTools = await Promise.all(_.map(i18nFiles, async (fileDescriptor, path) => { + const [, locale] = path.match(/\.\/tools\/.*?\/locales\/(.*)\.ya?ml$/i) ?? []; + const content = parseYaml(await fileDescriptor()); + + return { [locale]: content }; +})); + +const messages = _.merge( + baseMessages, + _.merge({}, ...messagesByTools), +); const i18n = createI18n({ legacy: false, @@ -8,8 +24,8 @@ const i18n = createI18n({ messages, }); -export const i18nPlugin = { - install: (app: App) => { +export const i18nPlugin: Plugin = { + install: (app) => { app.use(i18n); }, }; diff --git a/vite.config.ts b/vite.config.ts index 8e2e0836..00f90c33 100644 --- a/vite.config.ts +++ b/vite.config.ts @@ -25,7 +25,7 @@ export default defineConfig({ runtimeOnly: true, compositionOnly: true, fullInstall: true, - include: [resolve(__dirname, 'locales/**'), resolve(__dirname, 'src/tools/*/locales/**')], + include: [resolve(__dirname, 'locales/**')], }), AutoImport({ imports: [ @@ -106,4 +106,7 @@ export default defineConfig({ test: { exclude: [...configDefaults.exclude, '**/*.e2e.spec.ts'], }, + build: { + target: 'esnext', + }, }); From 8a30b6bdb3c48138f8e015739a0189c87ee4a451 Mon Sep 17 00:00:00 2001 From: Mark Townsend <63235752+whackablemole@users.noreply.github.com> Date: Mon, 4 Sep 2023 13:51:04 +0100 Subject: [PATCH 013/138] refactor(spelling): minor corrections to phrasing/spelling (#596) * Minor corrections to phrasing/spelling. * Corrected 'millennia'. * Corrected tests. --------- Co-authored-by: Corentin THOMASSET --- .../date-time-converter.vue | 2 +- .../password-strength-analyser.e2e.spec.ts | 2 +- .../password-strength-analyser.service.ts | 24 +++++++++---------- src/tools/uuid-generator/index.ts | 2 +- 4 files changed, 15 insertions(+), 15 deletions(-) diff --git a/src/tools/date-time-converter/date-time-converter.vue b/src/tools/date-time-converter/date-time-converter.vue index 88fa6012..241c9cf6 100644 --- a/src/tools/date-time-converter/date-time-converter.vue +++ b/src/tools/date-time-converter/date-time-converter.vue @@ -146,7 +146,7 @@ function formatDateUsingFormatter(formatter: (date: Date) => string, date?: Date { const crackDuration = await page.getByTestId('crack-duration').textContent(); - expect(crackDuration).toEqual('15,091 milleniums, 3 centurys'); + expect(crackDuration).toEqual('15,091 millennia, 3 centuries'); }); }); diff --git a/src/tools/password-strength-analyser/password-strength-analyser.service.ts b/src/tools/password-strength-analyser/password-strength-analyser.service.ts index d639b223..aa281848 100644 --- a/src/tools/password-strength-analyser/password-strength-analyser.service.ts +++ b/src/tools/password-strength-analyser/password-strength-analyser.service.ts @@ -19,20 +19,20 @@ function getHumanFriendlyDuration({ seconds }: { seconds: number }) { } const timeUnits = [ - { unit: 'millenium', secondsInUnit: 31536000000, format: prettifyExponentialNotation }, - { unit: 'century', secondsInUnit: 3153600000 }, - { unit: 'decade', secondsInUnit: 315360000 }, - { unit: 'year', secondsInUnit: 31536000 }, - { unit: 'month', secondsInUnit: 2592000 }, - { unit: 'week', secondsInUnit: 604800 }, - { unit: 'day', secondsInUnit: 86400 }, - { unit: 'hour', secondsInUnit: 3600 }, - { unit: 'minute', secondsInUnit: 60 }, - { unit: 'second', secondsInUnit: 1 }, + { unit: 'millenium', secondsInUnit: 31536000000, format: prettifyExponentialNotation, plural: 'millennia' }, + { unit: 'century', secondsInUnit: 3153600000, plural: 'centuries' }, + { unit: 'decade', secondsInUnit: 315360000, plural: 'decades' }, + { unit: 'year', secondsInUnit: 31536000, plural: 'years' }, + { unit: 'month', secondsInUnit: 2592000, plural: 'months' }, + { unit: 'week', secondsInUnit: 604800, plural: 'weeks' }, + { unit: 'day', secondsInUnit: 86400, plural: 'days' }, + { unit: 'hour', secondsInUnit: 3600, plural: 'hours' }, + { unit: 'minute', secondsInUnit: 60, plural: 'minutes' }, + { unit: 'second', secondsInUnit: 1, plural: 'seconds' }, ]; return _.chain(timeUnits) - .map(({ unit, secondsInUnit, format = _.identity }) => { + .map(({ unit, secondsInUnit, plural, format = _.identity }) => { const quantity = Math.floor(seconds / secondsInUnit); seconds %= secondsInUnit; @@ -41,7 +41,7 @@ function getHumanFriendlyDuration({ seconds }: { seconds: number }) { } const formattedQuantity = format(quantity); - return `${formattedQuantity} ${unit}${quantity > 1 ? 's' : ''}`; + return `${formattedQuantity} ${quantity > 1 ? plural : unit}`; }) .compact() .take(2) diff --git a/src/tools/uuid-generator/index.ts b/src/tools/uuid-generator/index.ts index 2b4b3d34..ae5ae0da 100644 --- a/src/tools/uuid-generator/index.ts +++ b/src/tools/uuid-generator/index.ts @@ -5,7 +5,7 @@ export const tool = defineTool({ name: 'UUIDs v4 generator', path: '/uuid-generator', description: - 'A universally unique identifier (UUID) is a 128-bit number used to identify information in computer systems. The number of possible UUIDs is 16^32, which is 2^128 or about 3.4x10^38 (which is a lot !).', + 'A Universally Unique Identifier (UUID) is a 128-bit number used to identify information in computer systems. The number of possible UUIDs is 16^32, which is 2^128 or about 3.4x10^38 (which is a lot!).', keywords: ['uuid', 'v4', 'random', 'id', 'alphanumeric', 'identity', 'token', 'string', 'identifier', 'unique'], component: () => import('./uuid-generator.vue'), icon: Fingerprint, From 0eedce69a6d375ea4b75dc66ac97883d8ec0c7ac Mon Sep 17 00:00:00 2001 From: Simon Bordeyne <13538749+sbordeyne@users.noreply.github.com> Date: Wed, 6 Sep 2023 09:46:40 +0200 Subject: [PATCH 014/138] feat(new tool): add wifi qr code generator (#599) * (feat: new tool): add wifi qr code generator * Update src/tools/wifi-qr-code-generator/wifi-qr-code-generator.vue Co-authored-by: Corentin THOMASSET * Update src/tools/wifi-qr-code-generator/index.ts Co-authored-by: Corentin THOMASSET * remove naive UI grid * Update src/tools/wifi-qr-code-generator/index.ts --------- Co-authored-by: Corentin THOMASSET --- components.d.ts | 1 + src/tools/index.ts | 3 +- src/tools/wifi-qr-code-generator/index.ts | 13 ++ src/tools/wifi-qr-code-generator/useQRCode.ts | 146 +++++++++++++++++ .../wifi-qr-code-generator.vue | 153 ++++++++++++++++++ 5 files changed, 315 insertions(+), 1 deletion(-) create mode 100644 src/tools/wifi-qr-code-generator/index.ts create mode 100644 src/tools/wifi-qr-code-generator/useQRCode.ts create mode 100644 src/tools/wifi-qr-code-generator/wifi-qr-code-generator.vue diff --git a/components.d.ts b/components.d.ts index af06dfb6..f51e12cd 100644 --- a/components.d.ts +++ b/components.d.ts @@ -188,6 +188,7 @@ declare module '@vue/runtime-core' { UserAgentParser: typeof import('./src/tools/user-agent-parser/user-agent-parser.vue')['default'] UserAgentResultCards: typeof import('./src/tools/user-agent-parser/user-agent-result-cards.vue')['default'] UuidGenerator: typeof import('./src/tools/uuid-generator/uuid-generator.vue')['default'] + WifiQrCodeGenerator: typeof import('./src/tools/wifi-qr-code-generator/wifi-qr-code-generator.vue')['default'] XmlFormatter: typeof import('./src/tools/xml-formatter/xml-formatter.vue')['default'] YamlToJson: typeof import('./src/tools/yaml-to-json-converter/yaml-to-json.vue')['default'] YamlToToml: typeof import('./src/tools/yaml-to-toml/yaml-to-toml.vue')['default'] diff --git a/src/tools/index.ts b/src/tools/index.ts index 15770b56..aa380745 100644 --- a/src/tools/index.ts +++ b/src/tools/index.ts @@ -56,6 +56,7 @@ import { tool as metaTagGenerator } from './meta-tag-generator'; import { tool as mimeTypes } from './mime-types'; import { tool as otpCodeGeneratorAndValidator } from './otp-code-generator-and-validator'; import { tool as qrCodeGenerator } from './qr-code-generator'; +import { tool as wifiQrCodeGenerator } from './wifi-qr-code-generator'; import { tool as randomPortGenerator } from './random-port-generator'; import { tool as romanNumeralConverter } from './roman-numeral-converter'; import { tool as sqlPrettify } from './sql-prettify'; @@ -117,7 +118,7 @@ export const toolsByCategory: ToolCategory[] = [ }, { name: 'Images and videos', - components: [qrCodeGenerator, svgPlaceholderGenerator, cameraRecorder], + components: [qrCodeGenerator, wifiQrCodeGenerator, svgPlaceholderGenerator, cameraRecorder], }, { name: 'Development', diff --git a/src/tools/wifi-qr-code-generator/index.ts b/src/tools/wifi-qr-code-generator/index.ts new file mode 100644 index 00000000..ad0135c3 --- /dev/null +++ b/src/tools/wifi-qr-code-generator/index.ts @@ -0,0 +1,13 @@ +import { Qrcode } from '@vicons/tabler'; +import { defineTool } from '../tool'; + +export const tool = defineTool({ + name: 'WiFi QR Code generator', + path: '/wifi-qrcode-generator', + description: + 'Generate and download QR-codes for quick connections to WiFi networks.', + keywords: ['qr', 'code', 'generator', 'square', 'color', 'link', 'low', 'medium', 'quartile', 'high', 'transparent', 'wifi'], + component: () => import('./wifi-qr-code-generator.vue'), + icon: Qrcode, + createdAt: new Date('2023-09-06'), +}); diff --git a/src/tools/wifi-qr-code-generator/useQRCode.ts b/src/tools/wifi-qr-code-generator/useQRCode.ts new file mode 100644 index 00000000..c8a7215c --- /dev/null +++ b/src/tools/wifi-qr-code-generator/useQRCode.ts @@ -0,0 +1,146 @@ +import { type MaybeRef, get } from '@vueuse/core'; +import QRCode, { type QRCodeToDataURLOptions } from 'qrcode'; +import { isRef, ref, watch } from 'vue'; + +export const wifiEncryptions = ['WEP', 'WPA', 'nopass', 'WPA2-EAP'] as const; +export type WifiEncryption = typeof wifiEncryptions[number]; + +// @see https://en.wikipedia.org/wiki/Extensible_Authentication_Protocol +// for a list of available EAP methods. There are a lot (40!) of them. +export const EAPMethods = [ + 'MD5', + 'POTP', + 'GTC', + 'TLS', + 'IKEv2', + 'SIM', + 'AKA', + 'AKA\'', + 'TTLS', + 'PWD', + 'LEAP', + 'PSK', + 'FAST', + 'TEAP', + 'EKE', + 'NOOB', + 'PEAP', +] as const; +export type EAPMethod = typeof EAPMethods[number]; + +export const EAPPhase2Methods = [ + 'None', + 'MSCHAPV2', +] as const; +export type EAPPhase2Method = typeof EAPPhase2Methods[number]; + +interface IWifiQRCodeOptions { + ssid: MaybeRef + password: MaybeRef + eapMethod: MaybeRef + isHiddenSSID: MaybeRef + eapAnonymous: MaybeRef + eapIdentity: MaybeRef + eapPhase2Method: MaybeRef + color: { foreground: MaybeRef; background: MaybeRef } + options?: QRCodeToDataURLOptions +} + +interface GetQrCodeTextOptions { + ssid: string + password: string + encryption: WifiEncryption + eapMethod: EAPMethod + isHiddenSSID: boolean + eapAnonymous: boolean + eapIdentity: string + eapPhase2Method: EAPPhase2Method +} + +function escapeString(str: string) { + // replaces \, ;, ,, " and : with the same character preceded by a backslash + return str.replace(/([\\;,:"])/g, '\\$1'); +} + +function getQrCodeText(options: GetQrCodeTextOptions): string | null { + const { ssid, password, encryption, eapMethod, isHiddenSSID, eapAnonymous, eapIdentity, eapPhase2Method } = options; + if (!ssid) { + return null; + } + if (encryption === 'nopass') { + return `WIFI:S:${escapeString(ssid)};;`; // type can be omitted in that case, and password is not needed, makes the QR Code smaller + } + if (encryption !== 'WPA2-EAP' && password) { + // EAP has a lot of options, so we'll handle it separately + // WPA and WEP are pretty simple though. + return `WIFI:S:${escapeString(ssid)};T:${encryption};P:${escapeString(password)};${isHiddenSSID ? 'H:true' : ''};`; + } + if (encryption === 'WPA2-EAP' && password && eapMethod) { + // WPA2-EAP string is a lot more complex, first off, we drop the text if there is no identity, and it's not anonymous. + if (!eapIdentity && !eapAnonymous) { + return null; + } + // From reading, I could only find that a phase 2 is required for the PEAP method, I may be wrong though, I didn't read the whole spec. + if (eapMethod === 'PEAP' && !eapPhase2Method) { + return null; + } + // The string is built in the following order: + // 1. SSID + // 2. Authentication type + // 3. Password + // 4. EAP method + // 5. EAP phase 2 method + // 6. Identity or anonymous if checked + // 7. Hidden SSID if checked + const identity = eapAnonymous ? 'A:anon' : `I:${escapeString(eapIdentity)}`; + const phase2 = eapPhase2Method !== 'None' ? `PH2:${eapPhase2Method};` : ''; + return `WIFI:S:${escapeString(ssid)};T:WPA2-EAP;P:${escapeString(password)};E:${eapMethod};${phase2}${identity};${isHiddenSSID ? 'H:true' : ''};`; + } + return null; +} + +export function useWifiQRCode({ + ssid, + password, + eapMethod, + isHiddenSSID, + eapAnonymous, + eapIdentity, + eapPhase2Method, + color: { background, foreground }, + options, +}: IWifiQRCodeOptions) { + const qrcode = ref(''); + const encryption = ref('WPA'); + + watch( + [ssid, password, encryption, eapMethod, isHiddenSSID, eapAnonymous, eapIdentity, eapPhase2Method, background, foreground].filter(isRef), + async () => { + // @see https://github.com/zxing/zxing/wiki/Barcode-Contents#wi-fi-network-config-android-ios-11 + // This is the full spec, there's quite a bit of logic to generate the string embeddedin the QR code. + const text = getQrCodeText({ + ssid: get(ssid), + password: get(password), + encryption: get(encryption), + eapMethod: get(eapMethod), + isHiddenSSID: get(isHiddenSSID), + eapAnonymous: get(eapAnonymous), + eapIdentity: get(eapIdentity), + eapPhase2Method: get(eapPhase2Method), + }); + if (text) { + qrcode.value = await QRCode.toDataURL(get(text).trim(), { + color: { + dark: get(foreground), + light: get(background), + ...options?.color, + }, + errorCorrectionLevel: 'M', + ...options, + }); + } + }, + { immediate: true }, + ); + return { qrcode, encryption }; +} diff --git a/src/tools/wifi-qr-code-generator/wifi-qr-code-generator.vue b/src/tools/wifi-qr-code-generator/wifi-qr-code-generator.vue new file mode 100644 index 00000000..e6320d3e --- /dev/null +++ b/src/tools/wifi-qr-code-generator/wifi-qr-code-generator.vue @@ -0,0 +1,153 @@ + + + From e371ef702e3ade4af84d04d92a6c4286739a1153 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Mon, 11 Sep 2023 22:40:42 +0200 Subject: [PATCH 015/138] fix(deps): update dependency monaco-editor to ^0.43.0 (#620) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- package.json | 2 +- pnpm-lock.yaml | 8 ++++---- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/package.json b/package.json index 53cb2815..de225511 100644 --- a/package.json +++ b/package.json @@ -66,7 +66,7 @@ "lodash": "^4.17.21", "mathjs": "^11.9.1", "mime-types": "^2.1.35", - "monaco-editor": "^0.41.0", + "monaco-editor": "^0.43.0", "naive-ui": "^2.34.3", "netmask": "^2.0.2", "node-forge": "^1.3.1", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 74949501..9eae9b35 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -102,8 +102,8 @@ dependencies: specifier: ^2.1.35 version: 2.1.35 monaco-editor: - specifier: ^0.41.0 - version: 0.41.0 + specifier: ^0.43.0 + version: 0.43.0 naive-ui: specifier: ^2.34.3 version: 2.34.3(vue@3.3.4) @@ -6659,8 +6659,8 @@ packages: pkg-types: 1.0.3 ufo: 1.1.2 - /monaco-editor@0.41.0: - resolution: {integrity: sha512-1o4olnZJsiLmv5pwLEAmzHTE/5geLKQ07BrGxlF4Ri/AXAc2yyDGZwHjiTqD8D/ROKUZmwMA28A+yEowLNOEcA==} + /monaco-editor@0.43.0: + resolution: {integrity: sha512-cnoqwQi/9fml2Szamv1XbSJieGJ1Dc8tENVMD26Kcfl7xGQWp7OBKMjlwKVGYFJ3/AXJjSOGvcqK7Ry/j9BM1Q==} dev: false /moo@0.5.2: From 4972159aa77b107188b623c9c325ca138b54f7c3 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Mon, 11 Sep 2023 22:42:33 +0200 Subject: [PATCH 016/138] chore(deps): update actions/checkout action to v4 (#613) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- .github/workflows/ci.yml | 2 +- .github/workflows/codeql-analysis.yml | 2 +- .github/workflows/docker-nightly-release.yml | 6 +++--- .github/workflows/e2e-tests.yml | 2 +- .github/workflows/releases.yml | 4 ++-- 5 files changed, 8 insertions(+), 8 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 5f5a9b6a..d5c67208 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -11,7 +11,7 @@ jobs: runs-on: ubuntu-latest steps: - - uses: actions/checkout@v3 + - uses: actions/checkout@3df4ab11eba7bda6032a0b82a6bb43b11571feac # v4 - run: corepack enable - uses: actions/setup-node@v3 with: diff --git a/.github/workflows/codeql-analysis.yml b/.github/workflows/codeql-analysis.yml index 313409b8..6d11e825 100644 --- a/.github/workflows/codeql-analysis.yml +++ b/.github/workflows/codeql-analysis.yml @@ -37,7 +37,7 @@ jobs: steps: - name: Checkout repository - uses: actions/checkout@v3 + uses: actions/checkout@3df4ab11eba7bda6032a0b82a6bb43b11571feac # v4 # Initializes the CodeQL tools for scanning. - name: Initialize CodeQL diff --git a/.github/workflows/docker-nightly-release.yml b/.github/workflows/docker-nightly-release.yml index ee5f79a7..46a9ed7f 100644 --- a/.github/workflows/docker-nightly-release.yml +++ b/.github/workflows/docker-nightly-release.yml @@ -12,7 +12,7 @@ jobs: outputs: should_run: ${{ steps.should_run.outputs.should_run }} steps: - - uses: actions/checkout@v3 + - uses: actions/checkout@3df4ab11eba7bda6032a0b82a6bb43b11571feac # v4 - name: print latest_commit run: echo ${{ github.sha }} @@ -28,7 +28,7 @@ jobs: if: ${{ needs.check_date.outputs.should_run != 'false' }} steps: - - uses: actions/checkout@v3 + - uses: actions/checkout@3df4ab11eba7bda6032a0b82a6bb43b11571feac # v4 - run: corepack enable - uses: actions/setup-node@v3 with: @@ -54,7 +54,7 @@ jobs: steps: - name: Checkout - uses: actions/checkout@v3 + uses: actions/checkout@3df4ab11eba7bda6032a0b82a6bb43b11571feac # v4 - name: Login to GitHub Container Registry uses: docker/login-action@v2 diff --git a/.github/workflows/e2e-tests.yml b/.github/workflows/e2e-tests.yml index d55e7785..3c089ad7 100644 --- a/.github/workflows/e2e-tests.yml +++ b/.github/workflows/e2e-tests.yml @@ -12,7 +12,7 @@ jobs: matrix: shard: [1/3, 2/3, 3/3] steps: - - uses: actions/checkout@v3 + - uses: actions/checkout@3df4ab11eba7bda6032a0b82a6bb43b11571feac # v4 - run: corepack enable diff --git a/.github/workflows/releases.yml b/.github/workflows/releases.yml index bce5c40d..492f9d15 100644 --- a/.github/workflows/releases.yml +++ b/.github/workflows/releases.yml @@ -13,7 +13,7 @@ jobs: run: echo "RELEASE_VERSION=${GITHUB_REF#refs/tags/v}" >> $GITHUB_ENV - name: Checkout - uses: actions/checkout@v3 + uses: actions/checkout@3df4ab11eba7bda6032a0b82a6bb43b11571feac # v4 - name: Login to GitHub Container Registry uses: docker/login-action@v2 @@ -55,7 +55,7 @@ jobs: run: echo "RELEASE_VERSION=${GITHUB_REF#refs/tags/v}" >> $GITHUB_ENV - name: Checkout - uses: actions/checkout@v3 + uses: actions/checkout@3df4ab11eba7bda6032a0b82a6bb43b11571feac # v4 - run: corepack enable From 557b30426fbcfd2a7e0fe99ed5c86a0756a1b1ba Mon Sep 17 00:00:00 2001 From: Corentin THOMASSET Date: Mon, 11 Sep 2023 22:59:07 +0200 Subject: [PATCH 017/138] doc(readme): added contributors list (#622) --- README.md | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/README.md b/README.md index c6b157cd..78184c92 100644 --- a/README.md +++ b/README.md @@ -105,12 +105,20 @@ pnpm run script:create-new-tool my-tool-name It will create a directory in `src/tools` with the correct files, and a the import in `src/tools/index.ts`. You will just need to add the imported tool in the proper category and develop the tool. +## Contributors + +Big thanks to all the people who have already contributed! + +[![contributors](https://contrib.rocks/image?repo=corentinth/it-tools)](https://github.com/corentinth/it-tools/graphs/contributors) + ## Credits Coded with ❤️ by [Corentin Thomasset](//corentin-thomasset.fr). This project is continuously deployed using [vercel.com](https://vercel.com). +Contributor graph is generated using [contrib.rocks](https://contrib.rocks/preview?repo=corentinth/it-tools). + IT Tools - Collection of handy online tools for devs, with great UX | Product Hunt IT Tools - Collection of handy online tools for devs, with great UX | Product Hunt From 5c4d775e2d0f2aaf0a7e427ec2eab774ae19ec07 Mon Sep 17 00:00:00 2001 From: Corentin THOMASSET Date: Tue, 12 Sep 2023 00:57:42 +0200 Subject: [PATCH 018/138] feat(new tool): ULID generator (#623) --- components.d.ts | 3 + package.json | 1 + pnpm-lock.yaml | 8 +++ src/tools/index.ts | 3 +- src/tools/ulid-generator/index.ts | 12 ++++ .../ulid-generator/ulid-generator.e2e.spec.ts | 23 ++++++++ src/tools/ulid-generator/ulid-generator.vue | 46 +++++++++++++++ .../c-buttons-select.demo.vue | 14 +++++ .../c-buttons-select.types.ts | 5 ++ src/ui/c-buttons-select/c-buttons-select.vue | 59 +++++++++++++++++++ src/ui/c-tooltip/c-tooltip.vue | 1 + 11 files changed, 174 insertions(+), 1 deletion(-) create mode 100644 src/tools/ulid-generator/index.ts create mode 100644 src/tools/ulid-generator/ulid-generator.e2e.spec.ts create mode 100644 src/tools/ulid-generator/ulid-generator.vue create mode 100644 src/ui/c-buttons-select/c-buttons-select.demo.vue create mode 100644 src/ui/c-buttons-select/c-buttons-select.types.ts create mode 100644 src/ui/c-buttons-select/c-buttons-select.vue diff --git a/components.d.ts b/components.d.ts index f51e12cd..1a5ce1a9 100644 --- a/components.d.ts +++ b/components.d.ts @@ -25,6 +25,8 @@ declare module '@vue/runtime-core' { CaseConverter: typeof import('./src/tools/case-converter/case-converter.vue')['default'] CButton: typeof import('./src/ui/c-button/c-button.vue')['default'] 'CButton.demo': typeof import('./src/ui/c-button/c-button.demo.vue')['default'] + CButtonsSelect: typeof import('./src/ui/c-buttons-select/c-buttons-select.vue')['default'] + 'CButtonsSelect.demo': typeof import('./src/ui/c-buttons-select/c-buttons-select.demo.vue')['default'] CCard: typeof import('./src/ui/c-card/c-card.vue')['default'] 'CCard.demo': typeof import('./src/ui/c-card/c-card.demo.vue')['default'] CDiffEditor: typeof import('./src/ui/c-diff-editor/c-diff-editor.vue')['default'] @@ -183,6 +185,7 @@ declare module '@vue/runtime-core' { TomlToYaml: typeof import('./src/tools/toml-to-yaml/toml-to-yaml.vue')['default'] 'Tool.layout': typeof import('./src/layouts/tool.layout.vue')['default'] ToolCard: typeof import('./src/components/ToolCard.vue')['default'] + UlidGenerator: typeof import('./src/tools/ulid-generator/ulid-generator.vue')['default'] UrlEncoder: typeof import('./src/tools/url-encoder/url-encoder.vue')['default'] UrlParser: typeof import('./src/tools/url-parser/url-parser.vue')['default'] UserAgentParser: typeof import('./src/tools/user-agent-parser/user-agent-parser.vue')['default'] diff --git a/package.json b/package.json index de225511..d3ec93bf 100644 --- a/package.json +++ b/package.json @@ -77,6 +77,7 @@ "randombytes": "^2.1.0", "sql-formatter": "^13.0.0", "ua-parser-js": "^1.0.35", + "ulid": "^2.3.0", "unicode-emoji-json": "^0.4.0", "unplugin-auto-import": "^0.16.4", "uuid": "^9.0.0", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 9eae9b35..65579a34 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -134,6 +134,9 @@ dependencies: ua-parser-js: specifier: ^1.0.35 version: 1.0.35 + ulid: + specifier: ^2.3.0 + version: 2.3.0 unicode-emoji-json: specifier: ^0.4.0 version: 0.4.0 @@ -8246,6 +8249,11 @@ packages: /ufo@1.1.2: resolution: {integrity: sha512-TrY6DsjTQQgyS3E3dBaOXf0TpPD8u9FVrVYmKVegJuFw51n/YB9XPt+U6ydzFG5ZIN7+DIjPbNmXoBj9esYhgQ==} + /ulid@2.3.0: + resolution: {integrity: sha512-keqHubrlpvT6G2wH0OEfSW4mquYRcbe/J8NMmveoQOjUqmo+hXtO+ORCpWhdbZ7k72UtY61BL7haGxW6enBnjw==} + hasBin: true + dev: false + /unbox-primitive@1.0.2: resolution: {integrity: sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==} dependencies: diff --git a/src/tools/index.ts b/src/tools/index.ts index aa380745..cc5f42ee 100644 --- a/src/tools/index.ts +++ b/src/tools/index.ts @@ -1,6 +1,7 @@ import { tool as base64FileConverter } from './base64-file-converter'; import { tool as base64StringConverter } from './base64-string-converter'; import { tool as basicAuthGenerator } from './basic-auth-generator'; +import { tool as ulidGenerator } from './ulid-generator'; import { tool as ibanValidatorAndParser } from './iban-validator-and-parser'; import { tool as stringObfuscator } from './string-obfuscator'; import { tool as textDiff } from './text-diff'; @@ -74,7 +75,7 @@ import { tool as xmlFormatter } from './xml-formatter'; export const toolsByCategory: ToolCategory[] = [ { name: 'Crypto', - components: [tokenGenerator, hashText, bcrypt, uuidGenerator, cypher, bip39, hmacGenerator, rsaKeyPairGenerator, passwordStrengthAnalyser], + components: [tokenGenerator, hashText, bcrypt, uuidGenerator, ulidGenerator, cypher, bip39, hmacGenerator, rsaKeyPairGenerator, passwordStrengthAnalyser], }, { name: 'Converter', diff --git a/src/tools/ulid-generator/index.ts b/src/tools/ulid-generator/index.ts new file mode 100644 index 00000000..6a5408dd --- /dev/null +++ b/src/tools/ulid-generator/index.ts @@ -0,0 +1,12 @@ +import { SortDescendingNumbers } from '@vicons/tabler'; +import { defineTool } from '../tool'; + +export const tool = defineTool({ + name: 'ULID generator', + path: '/ulid-generator', + description: 'Generate random Universally Unique Lexicographically Sortable Identifier (ULID).', + keywords: ['ulid', 'generator', 'random', 'id', 'alphanumeric', 'identity', 'token', 'string', 'identifier', 'unique'], + component: () => import('./ulid-generator.vue'), + icon: SortDescendingNumbers, + createdAt: new Date('2023-09-11'), +}); diff --git a/src/tools/ulid-generator/ulid-generator.e2e.spec.ts b/src/tools/ulid-generator/ulid-generator.e2e.spec.ts new file mode 100644 index 00000000..34473376 --- /dev/null +++ b/src/tools/ulid-generator/ulid-generator.e2e.spec.ts @@ -0,0 +1,23 @@ +import { expect, test } from '@playwright/test'; + +const ULID_REGEX = /[0-9A-Z]{26}/; + +test.describe('Tool - ULID generator', () => { + test.beforeEach(async ({ page }) => { + await page.goto('/ulid-generator'); + }); + + test('Has correct title', async ({ page }) => { + await expect(page).toHaveTitle('ULID generator - IT Tools'); + }); + + test('the refresh button generates a new ulid', async ({ page }) => { + const ulid = await page.getByTestId('ulids').textContent(); + expect(ulid?.trim()).toMatch(ULID_REGEX); + + await page.getByTestId('refresh').click(); + const newUlid = await page.getByTestId('ulids').textContent(); + expect(ulid?.trim()).not.toBe(newUlid?.trim()); + expect(newUlid?.trim()).toMatch(ULID_REGEX); + }); +}); diff --git a/src/tools/ulid-generator/ulid-generator.vue b/src/tools/ulid-generator/ulid-generator.vue new file mode 100644 index 00000000..06e695ef --- /dev/null +++ b/src/tools/ulid-generator/ulid-generator.vue @@ -0,0 +1,46 @@ + + + diff --git a/src/ui/c-buttons-select/c-buttons-select.demo.vue b/src/ui/c-buttons-select/c-buttons-select.demo.vue new file mode 100644 index 00000000..dea15289 --- /dev/null +++ b/src/ui/c-buttons-select/c-buttons-select.demo.vue @@ -0,0 +1,14 @@ + + + diff --git a/src/ui/c-buttons-select/c-buttons-select.types.ts b/src/ui/c-buttons-select/c-buttons-select.types.ts new file mode 100644 index 00000000..ccb110d4 --- /dev/null +++ b/src/ui/c-buttons-select/c-buttons-select.types.ts @@ -0,0 +1,5 @@ +import type { CSelectOption } from '../c-select/c-select.types'; + +export type CButtonSelectOption = CSelectOption & { + tooltip?: string +}; diff --git a/src/ui/c-buttons-select/c-buttons-select.vue b/src/ui/c-buttons-select/c-buttons-select.vue new file mode 100644 index 00000000..38fff66f --- /dev/null +++ b/src/ui/c-buttons-select/c-buttons-select.vue @@ -0,0 +1,59 @@ + + + diff --git a/src/ui/c-tooltip/c-tooltip.vue b/src/ui/c-tooltip/c-tooltip.vue index 24c586b8..095315fb 100644 --- a/src/ui/c-tooltip/c-tooltip.vue +++ b/src/ui/c-tooltip/c-tooltip.vue @@ -13,6 +13,7 @@ const isTargetHovered = useElementHover(targetRef);
Date: Wed, 4 Oct 2023 11:46:33 +0200 Subject: [PATCH 019/138] chore(deps): update dependency node to v18.18.0 (#636) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- .nvmrc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.nvmrc b/.nvmrc index 4a1f488b..02c8b485 100644 --- a/.nvmrc +++ b/.nvmrc @@ -1 +1 @@ -18.17.1 +18.18.0 From 025f556023c29f8f31dc00870c80a9d790bbb2f4 Mon Sep 17 00:00:00 2001 From: Corentin THOMASSET Date: Sat, 14 Oct 2023 18:24:54 +0200 Subject: [PATCH 020/138] refactor(ui): switched naive tooltip components to custom ones (#661) --- components.d.ts | 2 + pnpm-lock.yaml | 23 ++++- src/components/FavoriteButton.vue | 27 +++--- src/components/InputCopyable.vue | 13 ++- src/components/NavbarButtons.vue | 83 ++++++++----------- src/components/SpanCopyable.vue | 16 +--- src/components/TextareaCopyable.vue | 40 ++------- src/layouts/base.layout.vue | 52 ++++++------ .../benchmark-builder/dynamic-values.vue | 13 ++- .../editor/menu-bar-item.vue | 14 ++-- .../otp-code-generator-and-validator.vue | 15 ++-- .../token-display.vue | 76 +++++------------ .../user-agent-result-cards.vue | 13 ++- src/ui/c-tooltip/c-tooltip.demo.vue | 18 ++++ src/ui/c-tooltip/c-tooltip.vue | 15 +++- 15 files changed, 177 insertions(+), 243 deletions(-) diff --git a/components.d.ts b/components.d.ts index 1a5ce1a9..3b7d96ea 100644 --- a/components.d.ts +++ b/components.d.ts @@ -90,6 +90,8 @@ declare module '@vue/runtime-core' { IconMdiDownload: typeof import('~icons/mdi/download')['default'] IconMdiEye: typeof import('~icons/mdi/eye')['default'] IconMdiEyeOff: typeof import('~icons/mdi/eye-off')['default'] + IconMdiFavoriteFilled: typeof import('~icons/mdi/favorite-filled')['default'] + IconMdiHeart: typeof import('~icons/mdi/heart')['default'] IconMdiPause: typeof import('~icons/mdi/pause')['default'] IconMdiPlay: typeof import('~icons/mdi/play')['default'] IconMdiRecord: typeof import('~icons/mdi/record')['default'] diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 65579a34..2428cee6 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -3272,7 +3272,7 @@ packages: dependencies: '@unhead/dom': 0.5.1 '@unhead/schema': 0.5.1 - '@vueuse/shared': 10.4.1(vue@3.3.4) + '@vueuse/shared': 10.5.0(vue@3.3.4) unhead: 0.5.1 vue: 3.3.4 transitivePeerDependencies: @@ -3854,10 +3854,10 @@ packages: - vue dev: false - /@vueuse/shared@10.4.1(vue@3.3.4): - resolution: {integrity: sha512-vz5hbAM4qA0lDKmcr2y3pPdU+2EVw/yzfRsBdu+6+USGa4PxqSQRYIUC9/NcT06y+ZgaTsyURw2I9qOFaaXHAg==} + /@vueuse/shared@10.5.0(vue@3.3.4): + resolution: {integrity: sha512-18iyxbbHYLst9MqU1X1QNdMHIjks6wC7XTVf0KNOv5es/Ms6gjVFCAAWTVP2JStuGqydg3DT+ExpFORUEi9yhg==} dependencies: - vue-demi: 0.14.5(vue@3.3.4) + vue-demi: 0.14.6(vue@3.3.4) transitivePeerDependencies: - '@vue/composition-api' - vue @@ -8790,6 +8790,21 @@ packages: vue: 3.3.4 dev: false + /vue-demi@0.14.6(vue@3.3.4): + resolution: {integrity: sha512-8QA7wrYSHKaYgUxDA5ZC24w+eHm3sYCbp0EzcDwKqN3p6HqtTCGR/GVsPyZW92unff4UlcSh++lmqDWN3ZIq4w==} + engines: {node: '>=12'} + hasBin: true + requiresBuild: true + peerDependencies: + '@vue/composition-api': ^1.0.0-rc.1 + vue: ^3.0.0-0 || ^2.6.0 + peerDependenciesMeta: + '@vue/composition-api': + optional: true + dependencies: + vue: 3.3.4 + dev: false + /vue-eslint-parser@9.3.1(eslint@8.47.0): resolution: {integrity: sha512-Clr85iD2XFZ3lJ52/ppmUDG/spxQu6+MAeHXjjyI4I1NUYZ9xmenQp4N0oaHJhrA8OOxltCVxMRfANGa70vU0g==} engines: {node: ^14.17.0 || >=16.0.0} diff --git a/src/components/FavoriteButton.vue b/src/components/FavoriteButton.vue index ef180a65..c3f0aaad 100644 --- a/src/components/FavoriteButton.vue +++ b/src/components/FavoriteButton.vue @@ -1,6 +1,4 @@ diff --git a/src/components/InputCopyable.vue b/src/components/InputCopyable.vue index ed678954..a69a039a 100644 --- a/src/components/InputCopyable.vue +++ b/src/components/InputCopyable.vue @@ -13,14 +13,11 @@ const tooltipText = computed(() => isJustCopied.value ? 'Copied!' : 'Copy to cli diff --git a/src/components/NavbarButtons.vue b/src/components/NavbarButtons.vue index 5b1a3a4e..653afdd2 100644 --- a/src/components/NavbarButtons.vue +++ b/src/components/NavbarButtons.vue @@ -7,56 +7,43 @@ const { isDarkTheme } = toRefs(styleStore); diff --git a/src/components/TextareaCopyable.vue b/src/components/TextareaCopyable.vue index b349d041..8b0aae61 100644 --- a/src/components/TextareaCopyable.vue +++ b/src/components/TextareaCopyable.vue @@ -40,7 +40,7 @@ const tooltipText = computed(() => isJustCopied.value ? 'Copied!' : copyMessage. diff --git a/src/tools/benchmark-builder/dynamic-values.vue b/src/tools/benchmark-builder/dynamic-values.vue index 975a545c..e048ef99 100644 --- a/src/tools/benchmark-builder/dynamic-values.vue +++ b/src/tools/benchmark-builder/dynamic-values.vue @@ -39,14 +39,11 @@ function onInputEnter(index: number) { autofocus @keydown.enter="onInputEnter(index)" /> - - - Delete value - + + + + +
diff --git a/src/tools/html-wysiwyg-editor/editor/menu-bar-item.vue b/src/tools/html-wysiwyg-editor/editor/menu-bar-item.vue index 9a4cf1bd..5be23292 100644 --- a/src/tools/html-wysiwyg-editor/editor/menu-bar-item.vue +++ b/src/tools/html-wysiwyg-editor/editor/menu-bar-item.vue @@ -6,13 +6,9 @@ const { icon, title, action, isActive } = toRefs(props); diff --git a/src/tools/otp-code-generator-and-validator/otp-code-generator-and-validator.vue b/src/tools/otp-code-generator-and-validator/otp-code-generator-and-validator.vue index 7b26a098..6bd881c0 100644 --- a/src/tools/otp-code-generator-and-validator/otp-code-generator-and-validator.vue +++ b/src/tools/otp-code-generator-and-validator/otp-code-generator-and-validator.vue @@ -61,19 +61,16 @@ const secretValidationRules = [ :validation-rules="secretValidationRules" >
- +
diff --git a/src/tools/otp-code-generator-and-validator/token-display.vue b/src/tools/otp-code-generator-and-validator/token-display.vue index 5313b0be..317f0831 100644 --- a/src/tools/otp-code-generator-and-validator/token-display.vue +++ b/src/tools/otp-code-generator-and-validator/token-display.vue @@ -11,7 +11,7 @@ const { tokens } = toRefs(props); - - diff --git a/src/tools/user-agent-parser/user-agent-result-cards.vue b/src/tools/user-agent-parser/user-agent-result-cards.vue index ed4724cb..eeea0730 100644 --- a/src/tools/user-agent-parser/user-agent-result-cards.vue +++ b/src/tools/user-agent-parser/user-agent-result-cards.vue @@ -25,14 +25,11 @@ const { userAgentInfo, sections } = toRefs(props);
- - - {{ label }} - + + + {{ getValue(userAgentInfo) }} + +
diff --git a/src/ui/c-tooltip/c-tooltip.demo.vue b/src/ui/c-tooltip/c-tooltip.demo.vue index d3852573..edd1364a 100644 --- a/src/ui/c-tooltip/c-tooltip.demo.vue +++ b/src/ui/c-tooltip/c-tooltip.demo.vue @@ -1,3 +1,7 @@ + + diff --git a/src/ui/c-tooltip/c-tooltip.vue b/src/ui/c-tooltip/c-tooltip.vue index 095315fb..0f47e711 100644 --- a/src/ui/c-tooltip/c-tooltip.vue +++ b/src/ui/c-tooltip/c-tooltip.vue @@ -1,23 +1,30 @@ diff --git a/src/ui/c-table/c-table.demo.vue b/src/ui/c-table/c-table.demo.vue new file mode 100644 index 00000000..b2cf8a77 --- /dev/null +++ b/src/ui/c-table/c-table.demo.vue @@ -0,0 +1,20 @@ + + + diff --git a/src/ui/c-table/c-table.types.ts b/src/ui/c-table/c-table.types.ts new file mode 100644 index 00000000..6c658f34 --- /dev/null +++ b/src/ui/c-table/c-table.types.ts @@ -0,0 +1,4 @@ +export type HeaderConfiguration = (string | { + key: string + label?: string +})[] | Record; diff --git a/src/ui/c-table/c-table.vue b/src/ui/c-table/c-table.vue new file mode 100644 index 00000000..9f734a9f --- /dev/null +++ b/src/ui/c-table/c-table.vue @@ -0,0 +1,65 @@ + + + diff --git a/unocss.config.ts b/unocss.config.ts index 6da68739..04c04830 100644 --- a/unocss.config.ts +++ b/unocss.config.ts @@ -20,5 +20,6 @@ export default defineConfig({ shortcuts: { 'pretty-scrollbar': 'scrollbar scrollbar-rounded scrollbar-thumb-color-gray-300 scrollbar-track-color-gray-100 dark:scrollbar-thumb-color-#424242 dark:scrollbar-track-color-#686868', 'divider': 'h-1px bg-current op-10', + 'bg-surface': 'bg-#ffffff dark:bg-#232323', }, }); From 88b881880c0b307e3a0c1954dc2f5474f39a144b Mon Sep 17 00:00:00 2001 From: Corentin THOMASSET Date: Sun, 15 Oct 2023 00:48:18 +0200 Subject: [PATCH 024/138] refactor(ci): reduced timeout in e2e (#666) --- .github/workflows/e2e-tests.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/e2e-tests.yml b/.github/workflows/e2e-tests.yml index 3c089ad7..b5b04096 100644 --- a/.github/workflows/e2e-tests.yml +++ b/.github/workflows/e2e-tests.yml @@ -6,7 +6,7 @@ on: - main jobs: test: - timeout-minutes: 60 + timeout-minutes: 10 runs-on: ubuntu-latest strategy: matrix: From b408df82c1d8a0123e552048421b37afcf5189c6 Mon Sep 17 00:00:00 2001 From: Corentin Thomasset Date: Sun, 15 Oct 2023 23:41:55 +0200 Subject: [PATCH 025/138] refactor(c-table): added description on c-table for accessibility --- src/ui/c-table/c-table.vue | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/ui/c-table/c-table.vue b/src/ui/c-table/c-table.vue index 9f734a9f..9354cc9a 100644 --- a/src/ui/c-table/c-table.vue +++ b/src/ui/c-table/c-table.vue @@ -2,7 +2,7 @@ import _ from 'lodash'; import type { HeaderConfiguration } from './c-table.types'; -const props = withDefaults(defineProps<{ data?: Record[]; headers?: HeaderConfiguration ; hideHeaders?: boolean }>(), { data: () => [], headers: undefined, hideHeaders: false }); +const props = withDefaults(defineProps<{ data?: Record[]; headers?: HeaderConfiguration ; hideHeaders?: boolean; description?: string }>(), { data: () => [], headers: undefined, hideHeaders: false, description: 'Data table' }); const { data, headers: rawHeaders, hideHeaders } = toRefs(props); const headers = computed(() => { @@ -38,7 +38,7 @@ const headers = computed(() => { From a2b53c2e38aca1824d8ee90aaf5f49d0884c3ecf Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=8E=AB=E9=A2=93?= Date: Sun, 22 Oct 2023 16:15:39 +0800 Subject: [PATCH 029/138] feat(i18n): about page (#680) (cherry picked from commit 605b84c16e0eec1a16e6133203e7810a68447607) Co-authored-by: Corentin THOMASSET --- locales/en.yml | 16 ++++++++++++++++ src/pages/About.vue | 36 +++++++++++++++--------------------- 2 files changed, 31 insertions(+), 21 deletions(-) diff --git a/locales/en.yml b/locales/en.yml index 489a1689..c2fc89d4 100644 --- a/locales/en.yml +++ b/locales/en.yml @@ -1,6 +1,22 @@ home: categories: newestTools: Newest tools +about: + h1: 'About IT-Tools' + h1p1: 'This wonderful website, made with ❤ by' + h1p2: ', aggregates useful tools for developer and people working in IT. If you find it useful, please feel free to share it to people you think may find it useful too and don''''t forget to bookmark it in your shortcut bar!' + h1p3: 'IT Tools is open-source (under the MIT license) and free, and will always be, but it costs me money to host and renew the domain name. If you want to support my work, and encourage me to add more tools, please consider supporting by' + h1p4: 'sponsoring me' + h2: Technologies + h2p1: 'IT Tools is made in Vue.js (Vue 3) with the the Naive UI component library and is hosted and continuously deployed by Vercel. Third-party open-source libraries are used in some tools, you may find the complete list in the' + h2p2: 'file of the repository.' + h3: 'Found a bug? A tool is missing?' + h3p1: 'If you need a tool that is currently not present here, and you think can be useful, you are welcome to submit a feature request in the' + h3p2: 'issues section' + h3p3: 'in the GitHub repository.' + h3p4: 'And if you found a bug, or something doesn''''t work as expected, please file a bug report in the' + h3p5: 'issues section' + h3p6: 'in the GitHub repository.' 404: notFound: '404 Not Found' sorry: 'Sorry, this page does not seem to exist' diff --git a/src/pages/About.vue b/src/pages/About.vue index 8e6b1aad..9d7436d3 100644 --- a/src/pages/About.vue +++ b/src/pages/About.vue @@ -8,62 +8,56 @@ const { tracker } = useTracker(); From 84a4a646f6d859915e8e3120fe6a8917ed09d854 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=8E=AB=E9=A2=93?= Date: Sun, 22 Oct 2023 16:21:10 +0800 Subject: [PATCH 030/138] feat(i18n): tool card (#682) (cherry picked from commit 1d0a3904f72ab24364beda034d17cf6de9b5e959) --- locales/en.yml | 2 ++ src/components/ToolCard.vue | 2 +- 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/locales/en.yml b/locales/en.yml index c2fc89d4..dfe668e7 100644 --- a/locales/en.yml +++ b/locales/en.yml @@ -22,3 +22,5 @@ about: sorry: 'Sorry, this page does not seem to exist' maybe: 'Maybe the cache is doing tricky things, try force-refreshing?' backHome: 'Back home' +toolCard: + new: New \ No newline at end of file diff --git a/src/components/ToolCard.vue b/src/components/ToolCard.vue index 00f22466..768e9ede 100644 --- a/src/components/ToolCard.vue +++ b/src/components/ToolCard.vue @@ -26,7 +26,7 @@ const appTheme = useAppTheme(); :bordered="false" :color="{ color: theme.primaryColor, textColor: theme.tagColor }" > - New + {{ $t('toolCard.new') }} From ebb4ec416511c02108704e3909c565aa47890b62 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=8E=AB=E9=A2=93?= Date: Sun, 22 Oct 2023 16:23:00 +0800 Subject: [PATCH 031/138] feat(i18n): support for i18n in .ts files (#683) (cherry picked from commit 732313bfc32a514ef064ca0f90304ff05e2e7ef3) --- src/plugins/i18n.plugin.ts | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/src/plugins/i18n.plugin.ts b/src/plugins/i18n.plugin.ts index 8e0b2d33..7ef2c98f 100644 --- a/src/plugins/i18n.plugin.ts +++ b/src/plugins/i18n.plugin.ts @@ -29,3 +29,9 @@ export const i18nPlugin: Plugin = { app.use(i18n); }, }; + +export const translate = function (localeKey: string) { + // @ts-expect-error global + const hasKey = i18n.global.te(localeKey, i18n.global.locale); + return hasKey ? i18n.global.t(localeKey) : localeKey; +}; From eea9f9127681595bec6c7868e415763d2640a2a5 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Sun, 22 Oct 2023 10:26:05 +0200 Subject: [PATCH 032/138] chore(deps): update dependency node to v18.18.2 (#674) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- .nvmrc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.nvmrc b/.nvmrc index 02c8b485..87ec8842 100644 --- a/.nvmrc +++ b/.nvmrc @@ -1 +1 @@ -18.18.0 +18.18.2 From d36b18f193952ddc499b56c6831bc6deea4af91d Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Sun, 22 Oct 2023 10:29:05 +0200 Subject: [PATCH 033/138] chore(deps): update docker/build-push-action action to v5 (#624) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- .github/workflows/docker-nightly-release.yml | 2 +- .github/workflows/releases.yml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/docker-nightly-release.yml b/.github/workflows/docker-nightly-release.yml index 46a9ed7f..3247e6b8 100644 --- a/.github/workflows/docker-nightly-release.yml +++ b/.github/workflows/docker-nightly-release.yml @@ -76,7 +76,7 @@ jobs: uses: docker/setup-buildx-action@v2 - name: Build and push - uses: docker/build-push-action@v4 + uses: docker/build-push-action@v5 with: context: . file: ./Dockerfile diff --git a/.github/workflows/releases.yml b/.github/workflows/releases.yml index 492f9d15..42524346 100644 --- a/.github/workflows/releases.yml +++ b/.github/workflows/releases.yml @@ -35,7 +35,7 @@ jobs: uses: docker/setup-buildx-action@v2 - name: Build and push - uses: docker/build-push-action@v4 + uses: docker/build-push-action@v5 with: context: . file: ./Dockerfile From d8d7a3b9ab6bb83af2591e00d20289052dd184d2 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Sun, 22 Oct 2023 10:30:04 +0200 Subject: [PATCH 034/138] chore(deps): update docker/login-action action to v3 (#625) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- .github/workflows/docker-nightly-release.yml | 4 ++-- .github/workflows/releases.yml | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/.github/workflows/docker-nightly-release.yml b/.github/workflows/docker-nightly-release.yml index 3247e6b8..7c4aa51e 100644 --- a/.github/workflows/docker-nightly-release.yml +++ b/.github/workflows/docker-nightly-release.yml @@ -57,14 +57,14 @@ jobs: uses: actions/checkout@3df4ab11eba7bda6032a0b82a6bb43b11571feac # v4 - name: Login to GitHub Container Registry - uses: docker/login-action@v2 + uses: docker/login-action@v3 with: registry: ghcr.io username: ${{ github.repository_owner }} password: ${{ secrets.GITHUB_TOKEN }} - name: Login to Docker Hub - uses: docker/login-action@v2 + uses: docker/login-action@v3 with: username: ${{ secrets.DOCKERHUB_USERNAME }} password: ${{ secrets.DOCKERHUB_TOKEN }} diff --git a/.github/workflows/releases.yml b/.github/workflows/releases.yml index 42524346..71879ff1 100644 --- a/.github/workflows/releases.yml +++ b/.github/workflows/releases.yml @@ -16,14 +16,14 @@ jobs: uses: actions/checkout@3df4ab11eba7bda6032a0b82a6bb43b11571feac # v4 - name: Login to GitHub Container Registry - uses: docker/login-action@v2 + uses: docker/login-action@v3 with: registry: ghcr.io username: ${{ github.repository_owner }} password: ${{ secrets.GITHUB_TOKEN }} - name: Login to Docker Hub - uses: docker/login-action@v2 + uses: docker/login-action@v3 with: username: ${{ secrets.DOCKERHUB_USERNAME }} password: ${{ secrets.DOCKERHUB_TOKEN }} From 57ecda16238fd760ec0675426b072c50ac2e786b Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Sun, 22 Oct 2023 10:30:16 +0200 Subject: [PATCH 035/138] chore(deps): update docker/setup-buildx-action action to v3 (#626) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- .github/workflows/docker-nightly-release.yml | 2 +- .github/workflows/releases.yml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/docker-nightly-release.yml b/.github/workflows/docker-nightly-release.yml index 7c4aa51e..924a0da2 100644 --- a/.github/workflows/docker-nightly-release.yml +++ b/.github/workflows/docker-nightly-release.yml @@ -73,7 +73,7 @@ jobs: uses: docker/setup-qemu-action@v2 - name: Set up Docker Buildx - uses: docker/setup-buildx-action@v2 + uses: docker/setup-buildx-action@v3 - name: Build and push uses: docker/build-push-action@v5 diff --git a/.github/workflows/releases.yml b/.github/workflows/releases.yml index 71879ff1..fd5f63b0 100644 --- a/.github/workflows/releases.yml +++ b/.github/workflows/releases.yml @@ -32,7 +32,7 @@ jobs: uses: docker/setup-qemu-action@v2 - name: Set up Docker Buildx - uses: docker/setup-buildx-action@v2 + uses: docker/setup-buildx-action@v3 - name: Build and push uses: docker/build-push-action@v5 From 4365226d0168b023160eb96dfd412d88e5bb662d Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Sun, 22 Oct 2023 10:30:26 +0200 Subject: [PATCH 036/138] chore(deps): update docker/setup-qemu-action action to v3 (#627) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- .github/workflows/docker-nightly-release.yml | 2 +- .github/workflows/releases.yml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/docker-nightly-release.yml b/.github/workflows/docker-nightly-release.yml index 924a0da2..81a0898c 100644 --- a/.github/workflows/docker-nightly-release.yml +++ b/.github/workflows/docker-nightly-release.yml @@ -70,7 +70,7 @@ jobs: password: ${{ secrets.DOCKERHUB_TOKEN }} - name: Set up QEMU - uses: docker/setup-qemu-action@v2 + uses: docker/setup-qemu-action@v3 - name: Set up Docker Buildx uses: docker/setup-buildx-action@v3 diff --git a/.github/workflows/releases.yml b/.github/workflows/releases.yml index fd5f63b0..8ed4099d 100644 --- a/.github/workflows/releases.yml +++ b/.github/workflows/releases.yml @@ -29,7 +29,7 @@ jobs: password: ${{ secrets.DOCKERHUB_TOKEN }} - name: Set up QEMU - uses: docker/setup-qemu-action@v2 + uses: docker/setup-qemu-action@v3 - name: Set up Docker Buildx uses: docker/setup-buildx-action@v3 From 00562ed5e87a88a7038b4670f20e155c4f5b070d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=8E=AB=E9=A2=93?= Date: Mon, 23 Oct 2023 15:14:34 +0800 Subject: [PATCH 037/138] feat(i18n): home page (#687) (cherry picked from commit 9d39826078ceb929a5ca3b577f9f39449303c289) --- locales/en.yml | 27 ++++++++++++++++++++++++++- src/components/NavbarButtons.vue | 16 ++++++++-------- src/layouts/base.layout.vue | 10 +++++----- src/pages/Home.page.vue | 16 ++++++++-------- 4 files changed, 47 insertions(+), 22 deletions(-) diff --git a/locales/en.yml b/locales/en.yml index dfe668e7..1f31b68a 100644 --- a/locales/en.yml +++ b/locales/en.yml @@ -1,6 +1,30 @@ home: categories: newestTools: Newest tools + favoriteTools: 'Your favorite tools' + allTools: 'All the tools' + subtitle: 'Handy tools for developers' + toggleMenu: 'Toggle menu' + home: Home + uiLib: 'UI Lib' + buyMeACoffee: 'Buy me a coffee' + follow: + title: 'You like it-tools?' + p1: 'Give us a star on' + githubRepository: 'IT-Tools GitHub repository' + p2: 'or follow us on' + twitterAccount: 'IT-Tools Twitter account' + thankYou: 'Thank you !' + nav: + github: 'GitHub repository' + githubRepository: 'IT-Tools GitHub repository' + twitter: 'Twitter account' + twitterAccount: 'IT Tools Twitter account' + about: 'About IT-Tools' + aboutLabel: 'About' + darkMode: 'Dark mode' + lightMode: 'Light mode' + mode: 'Toggle dark/light mode' about: h1: 'About IT-Tools' h1p1: 'This wonderful website, made with ❤ by' @@ -23,4 +47,5 @@ about: maybe: 'Maybe the cache is doing tricky things, try force-refreshing?' backHome: 'Back home' toolCard: - new: New \ No newline at end of file + new: New + \ No newline at end of file diff --git a/src/components/NavbarButtons.vue b/src/components/NavbarButtons.vue index 653afdd2..cfc58cdd 100644 --- a/src/components/NavbarButtons.vue +++ b/src/components/NavbarButtons.vue @@ -7,39 +7,39 @@ const { isDarkTheme } = toRefs(styleStore);