mirror of
				https://github.com/CorentinTh/it-tools.git
				synced 2025-10-31 03:53:52 +00:00 
			
		
		
		
	Compare commits
	
		
			7 Commits
		
	
	
		
			v2023.4.13
			...
			argon2
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
|  | 8bcca22694 | ||
|  | c68a1fd713 | ||
|  | 46b1a07213 | ||
|  | dbad7730f9 | ||
|  | 85cb0ffabd | ||
|  | 8355bd2ae4 | ||
|  | 6fb4994603 | 
							
								
								
									
										56
									
								
								.github/workflows/releases.yml
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										56
									
								
								.github/workflows/releases.yml
									
									
									
									
										vendored
									
									
								
							| @@ -46,3 +46,59 @@ jobs: | ||||
|             corentinth/it-tools:${{ env.RELEASE_VERSION }} | ||||
|             ghcr.io/corentinth/it-tools:latest | ||||
|             ghcr.io/corentinth/it-tools:${{ env.RELEASE_VERSION}} | ||||
|  | ||||
|   github-release: | ||||
|     runs-on: ubuntu-latest | ||||
|     needs: docker-release | ||||
|     steps: | ||||
|       - name: Get release version | ||||
|         run: echo "RELEASE_VERSION=${GITHUB_REF#refs/tags/v}" >> $GITHUB_ENV | ||||
|  | ||||
|       - name: Checkout | ||||
|         uses: actions/checkout@v3 | ||||
|  | ||||
|       - run: corepack enable | ||||
|  | ||||
|       - uses: actions/setup-node@v3 | ||||
|         with: | ||||
|           node-version: 16 | ||||
|           cache: 'pnpm' | ||||
|  | ||||
|       - name: Install dependencies | ||||
|         run: pnpm i | ||||
|  | ||||
|       - name: Build the app | ||||
|         run: pnpm build | ||||
|  | ||||
|       - name: Zip the app | ||||
|         run: zip -r it-tools-${{ env.RELEASE_VERSION }}.zip dist/* | ||||
|  | ||||
|       - name: Get changelog | ||||
|         id: changelog | ||||
|         run: | | ||||
|           EOF=$(openssl rand -hex 8) | ||||
|           echo "changelog<<$EOF" >> $GITHUB_OUTPUT | ||||
|           node ./scripts/getLatestChangelog.mjs >> $GITHUB_OUTPUT | ||||
|           echo "$EOF" >> $GITHUB_OUTPUT | ||||
|  | ||||
|       - name: Create Release | ||||
|         uses: softprops/action-gh-release@v1 | ||||
|         with: | ||||
|           token: ${{ secrets.GITHUB_TOKEN }} | ||||
|           files: it-tools-${{ env.RELEASE_VERSION }}.zip | ||||
|           tag_name: v${{ env.RELEASE_VERSION }} | ||||
|           draft: true | ||||
|           prerelease: false | ||||
|           body: | | ||||
|             ## Docker images | ||||
|  | ||||
|             - Docker Hub | ||||
|               - `corentinth/it-tools:latest` | ||||
|               - `corentinth/it-tools:${{ env.RELEASE_VERSION }}` | ||||
|             - GitHub Container Registry | ||||
|               - `ghcr.io/corentinth/it-tools:latest` | ||||
|               - `ghcr.io/corentinth/it-tools:${{ env.RELEASE_VERSION}}` | ||||
|  | ||||
|             ## Changelog | ||||
|  | ||||
|             ${{ steps.changelog.outputs.changelog }} | ||||
|   | ||||
							
								
								
									
										583
									
								
								CHANGELOG.md
									
									
									
									
									
								
							
							
						
						
									
										583
									
								
								CHANGELOG.md
									
									
									
									
									
								
							| @@ -2,577 +2,54 @@ | ||||
|  | ||||
| All notable changes to this project will be documented in this file. See [standard-version](https://github.com/conventional-changelog/standard-version) for commit guidelines. | ||||
|  | ||||
| ## [2.19.0](https://github.com/CorentinTh/it-tools/compare/v2.18.0...v2.19.0) (2023-02-06) | ||||
|  | ||||
| ## Version 2023.04.14-dbad773 | ||||
|  | ||||
| ### Features | ||||
| - **new-tool**: http status codes (8355bd2) | ||||
|  | ||||
| * **new-tool:** keycode info ([c934c4e](https://github.com/CorentinTh/it-tools/commit/c934c4e50ca1a129b80b786a5d9a7dbc33ad9ba3)) | ||||
| ### Refactoring | ||||
| - **uuid-generator**: prevent NaN in quantity (6fb4994) | ||||
|  | ||||
| ## [2.18.0](https://github.com/CorentinTh/it-tools/compare/v2.17.0...v2.18.0) (2023-02-04) | ||||
| ### Chores | ||||
| - **release**: create a github release on new version (dbad773) | ||||
| - **version**: reset CHANGELOG content to support new format (85cb0ff) | ||||
|  | ||||
| ## Version 2023.04.14-f9b77b7 | ||||
|  | ||||
| ### Features | ||||
| - **new-tool**: http status codes (8355bd2) | ||||
|  | ||||
| * **new-tool:** json minify ([#265](https://github.com/CorentinTh/it-tools/issues/265)) ([f708f50](https://github.com/CorentinTh/it-tools/commit/f708f5091e2182fc88e7cf3e7d23b3d05edc04da)) | ||||
| ### Refactoring | ||||
| - **uuid-generator**: prevent NaN in quantity (6fb4994) | ||||
|  | ||||
| ### Chores | ||||
| - **release**: create a github release on new version (f9b77b7) | ||||
| - **version**: reset CHANGELOG content to support new format (85cb0ff) | ||||
|  | ||||
| ### Refactors | ||||
|  | ||||
| * **tools:** config in query params ([db817a2](https://github.com/CorentinTh/it-tools/commit/db817a2459e23bd096274a7f91815d613d5f7ff4)) | ||||
|  | ||||
| ## [2.17.0](https://github.com/CorentinTh/it-tools/compare/v2.16.0...v2.17.0) (2023-01-13) | ||||
|  | ||||
| ## Version 2023.04.14-2f0d239 | ||||
|  | ||||
| ### Features | ||||
| - **new-tool**: http status codes (8355bd2) | ||||
|  | ||||
| * **new-tool:** jwt parser ([#262](https://github.com/CorentinTh/it-tools/issues/262)) ([acc7f0a](https://github.com/CorentinTh/it-tools/commit/acc7f0a586c64500c5f720e70cdbccf9bffe76d9)) | ||||
| * **new-tool:** temperature converter ([4607837](https://github.com/CorentinTh/it-tools/commit/4607837f9a398440e0098f2ba862e8d7422ce94f)) | ||||
| ### Refactoring | ||||
| - **uuid-generator**: prevent NaN in quantity (6fb4994) | ||||
|  | ||||
| ### Chores | ||||
| - **release**: create a github release on new version (2f0d239) | ||||
| - **version**: reset CHANGELOG content to support new format (85cb0ff) | ||||
|  | ||||
| ### Refactors | ||||
|  | ||||
| * **jwt-parser:** simplified code ([f52f7a8](https://github.com/CorentinTh/it-tools/commit/f52f7a845c34ce7da57b11c17d261733be89554f)) | ||||
|  | ||||
| ## [2.16.0](https://github.com/CorentinTh/it-tools/compare/v2.15.0...v2.16.0) (2022-12-21) | ||||
|  | ||||
| ## Version 2023.04.14-474cae4 | ||||
|  | ||||
| ### Features | ||||
| - **new-tool**: http status codes (8355bd2) | ||||
|  | ||||
| * **search-bar:** use cmd + k to focus on mac ([bf88836](https://github.com/CorentinTh/it-tools/commit/bf88836dbe4037019e9545deaae1db06e5768cfb)) | ||||
| * **tool:** improved favorite tool management ([af075dc](https://github.com/CorentinTh/it-tools/commit/af075dccccec959a0863e6d11516206860bed91f)) | ||||
| * **tools:** added favorite tool handling ([4cd809b](https://github.com/CorentinTh/it-tools/commit/4cd809bd0c94836532f58a2ec6aa131694cce10d)) | ||||
| * **tracker:** added actions monitoring ([bfc2e24](https://github.com/CorentinTh/it-tools/commit/bfc2e24bbfc08f67ed9c9b1d93474029bc01dc8b)) | ||||
| ### Refactoring | ||||
| - **uuid-generator**: prevent NaN in quantity (6fb4994) | ||||
|  | ||||
| ### Chores | ||||
| - **release**: create a github release on new version (474cae4) | ||||
| - **version**: reset CHANGELOG content to support new format (85cb0ff) | ||||
|  | ||||
| ### Refactors | ||||
| ## Version v2023.4.13-dce9ff9 | ||||
|  | ||||
| * **clean:** removed empty style tag ([cf723f1](https://github.com/CorentinTh/it-tools/commit/cf723f144ee865b6de7323d3be58eb7a9586fa56)) | ||||
| * **clean:** removed unused import ([4087285](https://github.com/CorentinTh/it-tools/commit/40872859a580a20bb838b79db2b3c88c00995e37)) | ||||
| * **menu:** improve support button ([679dd1c](https://github.com/CorentinTh/it-tools/commit/679dd1c1f6265227cc9db60c55d83f8eaf8f72b4)) | ||||
| * **tracker:** better tracker injection ([def60e7](https://github.com/CorentinTh/it-tools/commit/def60e7248003e74ed67e9ff116b438bab410a92)) | ||||
|  | ||||
| ## [2.15.0](https://github.com/CorentinTh/it-tools/compare/v2.14.1...v2.15.0) (2022-12-16) | ||||
|  | ||||
|  | ||||
| ### Features | ||||
|  | ||||
| * **search-bar:** better search back result ([71e98e9](https://github.com/CorentinTh/it-tools/commit/71e98e93e5752cba934f67d679088524c4d3d2ad)) | ||||
|  | ||||
|  | ||||
| ### Bug Fixes | ||||
|  | ||||
| * **integer-base-converter:** handle non-decimal char and better error message ([8476cf3](https://github.com/CorentinTh/it-tools/commit/8476cf319b7ebae87c7928592604a54833ac56ef)) | ||||
| * **tool-card:** correct text color on light mode for card description ([acf8bc1](https://github.com/CorentinTh/it-tools/commit/acf8bc11dbab85ab361edbe400ebbe5e52a11b89)) | ||||
|  | ||||
|  | ||||
| ### Refactors | ||||
|  | ||||
| * **search-bar:** improved tool fuzzy search ([1b5d4e7](https://github.com/CorentinTh/it-tools/commit/1b5d4e72bdb222dd721a1e484c3e5d73bb62d2b1)) | ||||
|  | ||||
| ### [2.14.1](https://github.com/CorentinTh/it-tools/compare/v2.14.0...v2.14.1) (2022-11-23) | ||||
|  | ||||
| ## [2.14.0](https://github.com/CorentinTh/it-tools/compare/v2.13.0...v2.14.0) (2022-11-23) | ||||
|  | ||||
|  | ||||
| ### Features | ||||
|  | ||||
| * **new-tool:** chmod calculator ([35b5187](https://github.com/CorentinTh/it-tools/commit/35b518711938c2bc88f35d104bb35d9956f0c267)) | ||||
|  | ||||
| ## [2.13.0](https://github.com/CorentinTh/it-tools/compare/v2.11.0...v2.13.0) (2022-11-14) | ||||
|  | ||||
|  | ||||
| ### Features | ||||
|  | ||||
| * **config:** added tsx to allowed extension ([ea5e7a7](https://github.com/CorentinTh/it-tools/commit/ea5e7a7fc7df1a3a912193912a6ab80a8a36a256)) | ||||
| * **date-converter:** added mongodb objectID format ([4ef2588](https://github.com/CorentinTh/it-tools/commit/4ef25887b9d874b8789bf8dbabd8aab92b4b1b03)) | ||||
| * **new-tool:** added otp generator ([5f16885](https://github.com/CorentinTh/it-tools/commit/5f168859238e9c3a8b8bbaf6b550c4b9bd163e00)) | ||||
| * **new-tool:** mime type to extension converter ([7c9b8ac](https://github.com/CorentinTh/it-tools/commit/7c9b8ac178967151a4f921ac26e8c2fe8d23b886)) | ||||
|  | ||||
|  | ||||
| ### Bug Fixes | ||||
|  | ||||
| * **ui:** remove icon transparency overlap ([35a3760](https://github.com/CorentinTh/it-tools/commit/35a376077116dd65b21f9a0786d2ecfc14db6051)) | ||||
|  | ||||
|  | ||||
| ### Refactors | ||||
|  | ||||
| * **otp-generator:** changed url ([7f22995](https://github.com/CorentinTh/it-tools/commit/7f229959d64b7a932f32753e3838d87a819a9192)) | ||||
| * token generator can use a custom alphabet ([83da6b7](https://github.com/CorentinTh/it-tools/commit/83da6b7ee9db29e40faf288f9627257aa7124038)) | ||||
| * **ui:** change sponsor button location and caption ([5d8f46a](https://github.com/CorentinTh/it-tools/commit/5d8f46abf8d5a10cc4650efc87b12a9a6c537fe5)) | ||||
| * **useQRCode:** switched args to MaybeRef ([7de6c86](https://github.com/CorentinTh/it-tools/commit/7de6c86f9ead8d7315614cc508dfee4fed90e9c2)) | ||||
|  | ||||
| ## [2.12.0](https://github.com/CorentinTh/it-tools/compare/v2.10.3...v2.12.0) (2022-08-23) | ||||
|  | ||||
|  | ||||
| ### Features | ||||
|  | ||||
| * added colored share card ([ab7483b](https://github.com/CorentinTh/it-tools/commit/ab7483b5c2bd5aee1b8b609597c22b7b7b55606d)) | ||||
| * **config:** added tsx to allowed extension ([741a3c2](https://github.com/CorentinTh/it-tools/commit/741a3c25a915d8296987b23bda03f2b664d51ba6)) | ||||
| * **new-tool:** added otp generator ([cc6070a](https://github.com/CorentinTh/it-tools/commit/cc6070a16655bce9de90517bdda3bf6224ba139d)) | ||||
| * **new-tool:** meta tag generator ([164e32b](https://github.com/CorentinTh/it-tools/commit/164e32b4428b8dfaaddcefa06b767a8af94573a9)) | ||||
|  | ||||
|  | ||||
| ### Bug Fixes | ||||
|  | ||||
| * **deps:** added missing optional deps ([4975590](https://github.com/CorentinTh/it-tools/commit/49755909bdaea9399e51b67fbd1a6d071acd3182)) | ||||
| * removed colored card border ([7c449f4](https://github.com/CorentinTh/it-tools/commit/7c449f4f2d491ce58726c5419a74dc295fa92905)) | ||||
|  | ||||
|  | ||||
| ### Refactors | ||||
|  | ||||
| * **colored-card:** added transition on like hover ([da17696](https://github.com/CorentinTh/it-tools/commit/da17696293270005b1b7ec4aafc0df7496f602c7)) | ||||
| * **share:** updated share meta ([5222bd5](https://github.com/CorentinTh/it-tools/commit/5222bd5d04ad089ba4cbade399dada55e29dcde5)) | ||||
| * token generator can use a custom alphabet ([59ec629](https://github.com/CorentinTh/it-tools/commit/59ec6293b65526fe8dc527ac596d0e5af29b1e32)) | ||||
| * **useQRCode:** switched args to MaybeRef ([a89c9be](https://github.com/CorentinTh/it-tools/commit/a89c9bea42d598f4caba10800becd66a07bbcdc9)) | ||||
|  | ||||
| ## [2.11.0](https://github.com/CorentinTh/it-tools/compare/v2.10.3...v2.11.0) (2022-08-19) | ||||
|  | ||||
|  | ||||
| ### Features | ||||
|  | ||||
| * added colored share card ([ab7483b](https://github.com/CorentinTh/it-tools/commit/ab7483b5c2bd5aee1b8b609597c22b7b7b55606d)) | ||||
| * **new-tool:** meta tag generator ([164e32b](https://github.com/CorentinTh/it-tools/commit/164e32b4428b8dfaaddcefa06b767a8af94573a9)) | ||||
|  | ||||
|  | ||||
| ### Bug Fixes | ||||
|  | ||||
| * **deps:** added missing optional deps ([4975590](https://github.com/CorentinTh/it-tools/commit/49755909bdaea9399e51b67fbd1a6d071acd3182)) | ||||
| * removed colored card border ([7c449f4](https://github.com/CorentinTh/it-tools/commit/7c449f4f2d491ce58726c5419a74dc295fa92905)) | ||||
|  | ||||
|  | ||||
| ### Refactors | ||||
|  | ||||
| * **colored-card:** added transition on like hover ([da17696](https://github.com/CorentinTh/it-tools/commit/da17696293270005b1b7ec4aafc0df7496f602c7)) | ||||
| * **share:** updated share meta ([5222bd5](https://github.com/CorentinTh/it-tools/commit/5222bd5d04ad089ba4cbade399dada55e29dcde5)) | ||||
|  | ||||
| ### [2.10.3](https://github.com/CorentinTh/it-tools/compare/v2.10.2...v2.10.3) (2022-08-14) | ||||
|  | ||||
|  | ||||
| ### Refactors | ||||
|  | ||||
| * **share:** new share banner ([fcf4cfe](https://github.com/CorentinTh/it-tools/commit/fcf4cfe64d4c1c3814137c8ff23b83a1ca0d502d)) | ||||
| * **share:** updated twitter meta tags ([992f96b](https://github.com/CorentinTh/it-tools/commit/992f96b48a89e2793ccf75fb9e28b2ec7b7f62b6)) | ||||
| * **validation:** simplified validation management with helpers ([f54223f](https://github.com/CorentinTh/it-tools/commit/f54223fb0aaedbd101b5d3dc4176053533bb936a)) | ||||
|  | ||||
| ### [2.10.2](https://github.com/CorentinTh/it-tools/compare/v2.10.1...v2.10.2) (2022-08-04) | ||||
|  | ||||
|  | ||||
| ### Refactors | ||||
|  | ||||
| * **dry:** mutualised duplicated code with withDefaultOnError ([f6cd9b7](https://github.com/CorentinTh/it-tools/commit/f6cd9b76d38800e1a1f63d07152fc96cda562795)) | ||||
| * **home:** removed new tool first sort ([d30cd8a](https://github.com/CorentinTh/it-tools/commit/d30cd8a9abc3298c0a0b05f249e54318bb4537f2)) | ||||
| * **json-prettifier:** more permissive json parser ([8089c60](https://github.com/CorentinTh/it-tools/commit/8089c60000000c42c821c6586c128d3d2b248885)) | ||||
| * **lint:** added import rules ([208a373](https://github.com/CorentinTh/it-tools/commit/208a373fd08ac550778745eb6e4536bf02537da7)) | ||||
|  | ||||
| ### [2.10.1](https://github.com/CorentinTh/it-tools/compare/v2.10.0...v2.10.1) (2022-08-04) | ||||
|  | ||||
|  | ||||
| ### Bug Fixes | ||||
|  | ||||
| * **bip39-generator:** cleared an issue with the mnemonic validation ([ca7cb44](https://github.com/CorentinTh/it-tools/commit/ca7cb4438972ca09f28a6a40332ec94ceaa4aab4)) | ||||
| * **import:** removed auto added weird .js extension ([fda0b0c](https://github.com/CorentinTh/it-tools/commit/fda0b0ca25c1733542a4e797ac1a2150c546a660)) | ||||
|  | ||||
|  | ||||
| ### Refactors | ||||
|  | ||||
| * **base64:** mutualized base64 functions into global utilities ([447bdf2](https://github.com/CorentinTh/it-tools/commit/447bdf2148098d70ba309e13d9b1e846b5064da1)) | ||||
| * **chronometer:** improved chronometer precision ([e48d60b](https://github.com/CorentinTh/it-tools/commit/e48d60b1ed19279f48441743f7ed69e8fd915011)) | ||||
|  | ||||
| ## [2.10.0](https://github.com/CorentinTh/it-tools/compare/v2.9.2...v2.10.0) (2022-08-03) | ||||
|  | ||||
|  | ||||
| ### Features | ||||
|  | ||||
| * **hash-text:** digest base selector ([#254](https://github.com/CorentinTh/it-tools/issues/254)) ([422b6eb](https://github.com/CorentinTh/it-tools/commit/422b6eb05a2fb5e7eec816a6bd2d37b53e4a6bdc)) | ||||
| * **new-tool:** an svg placeholder image generator ([129f74c](https://github.com/CorentinTh/it-tools/commit/129f74c371eaf09fdc3a19afb709cee40b7aaf7f)) | ||||
| * **new-tool:** hmac generator ([1bc6380](https://github.com/CorentinTh/it-tools/commit/1bc6380c6fdd7a9b500422a54bc508ab5557eb46)) | ||||
|  | ||||
|  | ||||
| ### Bug Fixes | ||||
|  | ||||
| * **base64-to-string:** prevent validation error ([8a9e788](https://github.com/CorentinTh/it-tools/commit/8a9e7888dec41364c8c17b1234adcdc0616612b0)) | ||||
| * **bip39-generator:** typo in validation message ([7570ad9](https://github.com/CorentinTh/it-tools/commit/7570ad965602233f860b9e03177a5b9dacf1b034)) | ||||
| * **eta-calculator:** clamp inputs ([#249](https://github.com/CorentinTh/it-tools/issues/249)) ([531a25c](https://github.com/CorentinTh/it-tools/commit/531a25c1c4892835633ba5635c6ee48e1fbef31c)) | ||||
| * **wording:** removed spaces before ponctuation ([#252](https://github.com/CorentinTh/it-tools/issues/252)) ([5f03619](https://github.com/CorentinTh/it-tools/commit/5f03619ab44c0b35455c46698ec37d79e87555b5)) | ||||
|  | ||||
|  | ||||
| ### Refactors | ||||
|  | ||||
| * **base64-to-file:** clean validation to convert base64 to file ([750a76b](https://github.com/CorentinTh/it-tools/commit/750a76b00fb79c0e9c2851c112141158ee0ffab1)) | ||||
| * **display:** mutualized code display ([0be33fb](https://github.com/CorentinTh/it-tools/commit/0be33fb337e8d82474922c0fdf9555aa328cd729)) | ||||
| * **lint:** externalization of prettier for simpler IDE support ([02c4963](https://github.com/CorentinTh/it-tools/commit/02c49635315661ca08deb0859c5ba33113368b9b)) | ||||
| * **validation:** simplified validation system ([77b5b0c](https://github.com/CorentinTh/it-tools/commit/77b5b0cab50a05dcb419ce87d74517d82e7cd2c0)) | ||||
|  | ||||
| ### [2.9.2](https://github.com/CorentinTh/it-tools/compare/v2.9.1...v2.9.2) (2022-07-28) | ||||
|  | ||||
|  | ||||
| ### Bug Fixes | ||||
|  | ||||
| * **base64-file:** fixed url slug ([412de23](https://github.com/CorentinTh/it-tools/commit/412de23796babbc080b0768a75029ff2ddf2acfc)) | ||||
| * **device-information:** handle of unknown values ([4f599b6](https://github.com/CorentinTh/it-tools/commit/4f599b699901a93444bcc67cbb3b3556a0561ae4)) | ||||
| * **device-information:** prevent unwanted y-truncature of text  ([138149e](https://github.com/CorentinTh/it-tools/commit/138149e6f0be91255907a6083887898e5c68882e)) | ||||
|  | ||||
|  | ||||
| ### Refactors | ||||
|  | ||||
| * **base64-file:** fixed typo ([1a22d55](https://github.com/CorentinTh/it-tools/commit/1a22d55b3c48f58b05b5a50de4fea260e781fbef)) | ||||
|  | ||||
| ### [2.9.1](https://github.com/CorentinTh/it-tools/compare/v2.9.0...v2.9.1) (2022-07-25) | ||||
|  | ||||
|  | ||||
| ### Refactors | ||||
|  | ||||
| * **base64:** split base64 text and file conversion in two tools + base64 to file ([e6953d1](https://github.com/CorentinTh/it-tools/commit/e6953d1b67b81a6d3c19973b706f29637c421f98)) | ||||
|  | ||||
| ## [2.9.0](https://github.com/CorentinTh/it-tools/compare/v2.8.0...v2.9.0) (2022-07-25) | ||||
|  | ||||
|  | ||||
| ### Features | ||||
|  | ||||
| * **new-tool:** added a basic auth generator ([bdee93a](https://github.com/CorentinTh/it-tools/commit/bdee93a9e45c6b46e7f75cdcbe1907f138722dca)) | ||||
|  | ||||
| ## [2.8.0](https://github.com/CorentinTh/it-tools/compare/v2.7.0...v2.8.0) (2022-07-24) | ||||
|  | ||||
|  | ||||
| ### Features | ||||
|  | ||||
| * **new-tool:** added an ETA calculator ([125a502](https://github.com/CorentinTh/it-tools/commit/125a50215a7abb9e0b59dbbc62aee49007b05ffe)) | ||||
|  | ||||
|  | ||||
| ### Bug Fixes | ||||
|  | ||||
| * **sql-prettifier:** better responsiveness ([560fcf3](https://github.com/CorentinTh/it-tools/commit/560fcf3f783c66b9197e4a015420c43a729518bc)) | ||||
|  | ||||
|  | ||||
| ### Refactors | ||||
|  | ||||
| * **json-prettify:** improved layout for the json prettifier ([328fda6](https://github.com/CorentinTh/it-tools/commit/328fda65b3490869328467c5e2d5f538c689d9b6)) | ||||
| * **sql-prettifier:** remove unused service files ([ba87097](https://github.com/CorentinTh/it-tools/commit/ba87097e3d834b6ea3212d28c2c33badb95f85e1)) | ||||
|  | ||||
| ## [2.7.0](https://github.com/CorentinTh/it-tools/compare/v2.6.0...v2.7.0) (2022-07-24) | ||||
|  | ||||
|  | ||||
| ### Features | ||||
|  | ||||
| * **new-tool:** added an SQL prettifier and formatter ([d1f95f5](https://github.com/CorentinTh/it-tools/commit/d1f95f5b34a4570f1033a5289f0bd009d1aefb0c)) | ||||
|  | ||||
|  | ||||
| ### Bug Fixes | ||||
|  | ||||
| * **typo:** fix few typos ([6cd25a7](https://github.com/CorentinTh/it-tools/commit/6cd25a743e32fceeaec8c1f8b94927a9c5d901f1)) | ||||
|  | ||||
| ## [2.6.0](https://github.com/CorentinTh/it-tools/compare/v2.5.3...v2.6.0) (2022-07-23) | ||||
|  | ||||
|  | ||||
| ### Features | ||||
|  | ||||
| * **new-tool:** added chronometer ([130031c](https://github.com/CorentinTh/it-tools/commit/130031c2256f3d4d46948974b9de85ee6e92bf8b)) | ||||
| * **search:** focus the search bar using Ctrl+K ([ab53048](https://github.com/CorentinTh/it-tools/commit/ab53048d5f6fdca7d00edbb79dee1a5409e6b11e)) | ||||
|  | ||||
|  | ||||
| ### Bug Fixes | ||||
|  | ||||
| * **deps:** run dependencie audit auto fix ([a16161c](https://github.com/CorentinTh/it-tools/commit/a16161cdb48c064882b9dc91ec3d091d286f5c63)) | ||||
| * **lint:** cleanned index.html ([c3a302b](https://github.com/CorentinTh/it-tools/commit/c3a302bc389a0e13aef4b14d5a9d3ec3a0d32729)) | ||||
| * **text-statistics:** empty text mean 0 words and 0 lines ([92ce419](https://github.com/CorentinTh/it-tools/commit/92ce419f45e110509ab202485a36bf175ce345da)) | ||||
|  | ||||
|  | ||||
| ### Refactors | ||||
|  | ||||
| * added accessibility labels on icon buttons ([394d085](https://github.com/CorentinTh/it-tools/commit/394d085846d976219ea775c21cd7e77f0f72a12b)) | ||||
| * **import:** auto reordered imports ([2140842](https://github.com/CorentinTh/it-tools/commit/214084262cec7fb881fd397626356b080ea1a5cc)) | ||||
|  | ||||
| ### [2.5.3](https://github.com/CorentinTh/it-tools/compare/v2.5.2...v2.5.3) (2022-07-21) | ||||
|  | ||||
|  | ||||
| ### Bug Fixes | ||||
|  | ||||
| * updated license in README ([e371e8f](https://github.com/CorentinTh/it-tools/commit/e371e8fedfd68f3cf6ecd3fbc9e2da8849f7d5bd)) | ||||
|  | ||||
| ### [2.5.2](https://github.com/CorentinTh/it-tools/compare/v2.5.1...v2.5.2) (2022-07-21) | ||||
|  | ||||
| ### [2.5.1](https://github.com/CorentinTh/it-tools/compare/v2.5.0...v2.5.1) (2022-06-01) | ||||
|  | ||||
|  | ||||
| ### Bug Fixes | ||||
|  | ||||
| * **lint:** missing dangling comma ([f05c8e1](https://github.com/CorentinTh/it-tools/commit/f05c8e1dc69275e529f4c8771ad55ba211e7fb5e)) | ||||
| * menu label key value was undefined ([f48cd05](https://github.com/CorentinTh/it-tools/commit/f48cd058cf3381f3bc92ea8fe37b565327707d1e)) | ||||
| * **title:** trully reactive tool title ([c2e1d59](https://github.com/CorentinTh/it-tools/commit/c2e1d59cb9d8dbb1bb072a46100192cb8c59f59b)) | ||||
| * tool sorting inconsistencies in home page ([5ab4dd3](https://github.com/CorentinTh/it-tools/commit/5ab4dd3d4a42c3609d72597c7ba91764170e6e96)) | ||||
|  | ||||
| ## [2.5.0](https://github.com/CorentinTh/it-tools/compare/v2.4.2...v2.5.0) (2022-06-01) | ||||
|  | ||||
|  | ||||
| ### Features | ||||
|  | ||||
| * **new-tool:** math evaluator ([433ba2a](https://github.com/CorentinTh/it-tools/commit/433ba2a3e5419eed0c96304b37693082224a1c73)) | ||||
| * **tools:** new badge for recently created tools ([11720e6](https://github.com/CorentinTh/it-tools/commit/11720e6cdefc1da4bdd638415813b609840f8462)) | ||||
|  | ||||
|  | ||||
| ### Bug Fixes | ||||
|  | ||||
| * **config:** updated env values loading ([2f61c74](https://github.com/CorentinTh/it-tools/commit/2f61c745f57962cf3bb9e2c1db4a3176df042808)) | ||||
|  | ||||
|  | ||||
| ### Refactors | ||||
|  | ||||
| * removed unused import ([8fb0e6a](https://github.com/CorentinTh/it-tools/commit/8fb0e6af9c3be708d3f1777a1661e1b38f197a3f)) | ||||
| * renammed Tool.ts to tool.ts ([ac89490](https://github.com/CorentinTh/it-tools/commit/ac89490794ee3c1c033859ffea31a962a13cc96d)) | ||||
|  | ||||
| ### [2.4.2](https://github.com/CorentinTh/it-tools/compare/v2.4.1...v2.4.2) (2022-06-01) | ||||
|  | ||||
|  | ||||
| ### Refactors | ||||
|  | ||||
| * **config:** added config management with figue ([6becdbb](https://github.com/CorentinTh/it-tools/commit/6becdbb42329e1bdecf158707e37ba9f13ba1d2c)) | ||||
| * **imports:** removed useless defineProps import ([5ce1262](https://github.com/CorentinTh/it-tools/commit/5ce1262fb44864b829dac09d5c0b9b68d522ceb7)) | ||||
| * set coerent head title for home page ([a46d125](https://github.com/CorentinTh/it-tools/commit/a46d125c19902c2f41f37c62c07bb7b548d9f6f0)) | ||||
|  | ||||
| ### [2.4.1](https://github.com/CorentinTh/it-tools/compare/v2.4.0...v2.4.1) (2022-05-15) | ||||
|  | ||||
|  | ||||
| ### Bug Fixes | ||||
|  | ||||
| * **seo:** wrong url in share metas ([a88e4a9](https://github.com/CorentinTh/it-tools/commit/a88e4a9289e7d8cc80190f60f2fe08fe2ba08ee6)) | ||||
|  | ||||
|  | ||||
| ### Refactors | ||||
|  | ||||
| * **json-viewer:** add clear button ([048bc4a](https://github.com/CorentinTh/it-tools/commit/048bc4ae943509dea2946764efaa69f845b6c478)) | ||||
| * **seo:** changed title string ([d4ea393](https://github.com/CorentinTh/it-tools/commit/d4ea393c1df87ae958a06ed66a11e36b081282d4)) | ||||
|  | ||||
| ## [2.4.0](https://github.com/CorentinTh/it-tools/compare/v2.3.2...v2.4.0) (2022-05-14) | ||||
|  | ||||
|  | ||||
| ### Features | ||||
|  | ||||
| * catch throw on validation ([a60f64f](https://github.com/CorentinTh/it-tools/commit/a60f64f74417f811204121f97c16cdb4754afc3b)) | ||||
| * **hash-text:** compute all hashes at the same time ([#242](https://github.com/CorentinTh/it-tools/issues/242)) ([e9cc499](https://github.com/CorentinTh/it-tools/commit/e9cc499ed87ba926086323223c7eca4f6658b3f0)) | ||||
| * **new-tool:**  json viewer ([d356b14](https://github.com/CorentinTh/it-tools/commit/d356b1488fc640a4f5b65d62e0f2f368f5941996)) | ||||
| * **seo:** added cannonical meta ([34bc6a5](https://github.com/CorentinTh/it-tools/commit/34bc6a57a7bab98ff2a630d02034c342084e0af9)) | ||||
|  | ||||
|  | ||||
| ### Bug Fixes | ||||
|  | ||||
| * **lint:** missing new lines ([3cfc5f8](https://github.com/CorentinTh/it-tools/commit/3cfc5f8bc27b66e6fbb6054f3c909818083ebc37)) | ||||
| * update recommended extension ids ([#244](https://github.com/CorentinTh/it-tools/issues/244)) ([1d7032d](https://github.com/CorentinTh/it-tools/commit/1d7032d0268220f594de6d837a303fc1e63cbd9f)) | ||||
|  | ||||
|  | ||||
| ### Documentation | ||||
|  | ||||
| * added producthunt banners ([4c4da16](https://github.com/CorentinTh/it-tools/commit/4c4da16970e1dbb13705d8b6c020cd40cd2b5e0d)) | ||||
|  | ||||
|  | ||||
| ### Refactors | ||||
|  | ||||
| * **base-layout:** renammed one letter variable ([383d975](https://github.com/CorentinTh/it-tools/commit/383d97569580c4f31448c07cb97e3778bc97a8af)) | ||||
| * **date-converter:** mutualised and dry-ed code ([d2c767f](https://github.com/CorentinTh/it-tools/commit/d2c767f0922e9b93172c3167226ad3db5499b9f6)) | ||||
| * **seo:** changed title string ([c3b6132](https://github.com/CorentinTh/it-tools/commit/c3b6132c261bd5952bafb1ff1e576eb13d2d0a7d)) | ||||
| * updated description ([b89db3c](https://github.com/CorentinTh/it-tools/commit/b89db3c8d0de601fecbd2f9f79492dff1b461bd8)) | ||||
|  | ||||
| ### [2.3.2](https://github.com/CorentinTh/it-tools/compare/v2.3.1...v2.3.2) (2022-05-09) | ||||
|  | ||||
|  | ||||
| ### Bug Fixes | ||||
|  | ||||
| * **base-converter:** responsive input ([0b0cbd5](https://github.com/CorentinTh/it-tools/commit/0b0cbd55c3809ded2eedfa0b2238bc950b01516a)) | ||||
| * **base64-converter:** async onUpload callback ([84cf1bb](https://github.com/CorentinTh/it-tools/commit/84cf1bb9645c5ae31579098df59471f7d99f6f0c)) | ||||
| * **typo:** misspelings ([9755e51](https://github.com/CorentinTh/it-tools/commit/9755e51fe216e5e25c56417152e70cb5bce26b11)) | ||||
|  | ||||
|  | ||||
| ### Refactors | ||||
|  | ||||
| * **responsive:** row layout for multicards on big screens ([e21230b](https://github.com/CorentinTh/it-tools/commit/e21230bbd9550ba3315607b021a60a4f9f9e1b61)) | ||||
|  | ||||
| ### [2.3.1](https://github.com/CorentinTh/it-tools/compare/v2.3.0...v2.3.1) (2022-04-24) | ||||
|  | ||||
|  | ||||
| ### Refactors | ||||
|  | ||||
| * changed twitter account handler ([608ec3a](https://github.com/CorentinTh/it-tools/commit/608ec3a81db6583c8a2bf126b3868afd043c6981)) | ||||
|  | ||||
| ## [2.3.0](https://github.com/CorentinTh/it-tools/compare/v2.2.0...v2.3.0) (2022-04-22) | ||||
|  | ||||
|  | ||||
| ### Features | ||||
|  | ||||
| * **new-tool:** html entities escape/unescape ([8e29a97](https://github.com/CorentinTh/it-tools/commit/8e29a97404ea0aa9b9b576656358c8c276b6f992)) | ||||
|  | ||||
|  | ||||
| ### Bug Fixes | ||||
|  | ||||
| * **head:** added titles for non-tool pages ([0a15892](https://github.com/CorentinTh/it-tools/commit/0a15892dde9852ff158a8fcb72d0ad6bae8bad02)) | ||||
| * **sider:** default collapsed value ([b22aa94](https://github.com/CorentinTh/it-tools/commit/b22aa941f52009118d4d3cc98277cc4c402a4c77)) | ||||
| * **sider:** missing href for link in footer ([c4dabcc](https://github.com/CorentinTh/it-tools/commit/c4dabccdaeac9d03163ac2588599b000e4e74562)) | ||||
| * **style:** hard width for group labels ([ebf6695](https://github.com/CorentinTh/it-tools/commit/ebf6695d2533db6f37b24dc7d338f422c551c8cb)) | ||||
| * **url-parser:** cleaned weird margins on dark mode ([005ebfb](https://github.com/CorentinTh/it-tools/commit/005ebfba318ece1a9c04aefb737baed5d7aafb91)) | ||||
|  | ||||
|  | ||||
| ### Refactors | ||||
|  | ||||
| * **lint:** linter auto fix ([086d31e](https://github.com/CorentinTh/it-tools/commit/086d31eab5b3b1a927803eab5e650585f61abe19)) | ||||
| * removed useless ref and value ([b12cbe4](https://github.com/CorentinTh/it-tools/commit/b12cbe412407389186a58e4ceaa94f5b441c11ea)) | ||||
|  | ||||
| ### [2.2.1](https://github.com/CorentinTh/it-tools/compare/v2.2.0...v2.2.1) (2022-04-21) | ||||
|  | ||||
|  | ||||
| ### Bug Fixes | ||||
|  | ||||
| * **head:** added titles for non-tool pages ([0a15892](https://github.com/CorentinTh/it-tools/commit/0a15892dde9852ff158a8fcb72d0ad6bae8bad02)) | ||||
| * **sider:** missing href for link in footer ([c4dabcc](https://github.com/CorentinTh/it-tools/commit/c4dabccdaeac9d03163ac2588599b000e4e74562)) | ||||
| * **style:** hard width for group labels ([ebf6695](https://github.com/CorentinTh/it-tools/commit/ebf6695d2533db6f37b24dc7d338f422c551c8cb)) | ||||
| * **url-parser:** cleaned weird margins on dark mode ([005ebfb](https://github.com/CorentinTh/it-tools/commit/005ebfba318ece1a9c04aefb737baed5d7aafb91)) | ||||
|  | ||||
| ## [2.2.0](https://github.com/CorentinTh/it-tools/compare/v2.1.0...v2.2.0) (2022-04-18) | ||||
|  | ||||
|  | ||||
| ### Features | ||||
|  | ||||
| * **new-tool:** url parser ([2b38d6f](https://github.com/CorentinTh/it-tools/commit/2b38d6f81e34845f896b858513e35209cba29f98)) | ||||
|  | ||||
|  | ||||
| ### Bug Fixes | ||||
|  | ||||
| * **sider-footer:** fixed commit sha url ([ed9046d](https://github.com/CorentinTh/it-tools/commit/ed9046d3e1f5a7dc01c722ed139a2ae477a2d48f)) | ||||
|  | ||||
| ## [2.1.0](https://github.com/CorentinTh/it-tools/compare/v2.0.2...v2.1.0) (2022-04-18) | ||||
|  | ||||
|  | ||||
| ### Features | ||||
|  | ||||
| * **new-tool:** bcrypt ([6d5856f](https://github.com/CorentinTh/it-tools/commit/6d5856fa93d1ffbf71856c75adc24ad87dc4b49b)) | ||||
| * **new-tool:** device information ([277bd5f](https://github.com/CorentinTh/it-tools/commit/277bd5f0da359fd54c5164b376007d182a9fabde)) | ||||
|  | ||||
|  | ||||
| ### Refactors | ||||
|  | ||||
| * **menu:** removed burger menu icon tooltip ([09abffb](https://github.com/CorentinTh/it-tools/commit/09abffbcf9b09cb5adc34f8754b019d0c8b60854)) | ||||
|  | ||||
| ### [2.0.2](https://github.com/CorentinTh/it-tools/compare/v2.0.1...v2.0.2) (2022-04-18) | ||||
|  | ||||
|  | ||||
| ### Bug Fixes | ||||
|  | ||||
| * **git-memo:** pre scroll on overflow ([4fc303e](https://github.com/CorentinTh/it-tools/commit/4fc303e5e3f0bef9201cc002963e244a5d3be7b5)) | ||||
| * **menu:** menu auto closed on mobile ([71f79a5](https://github.com/CorentinTh/it-tools/commit/71f79a5bbfe0dd5451a435c0a55e8b77ee7d3848)) | ||||
| * **qr-code:** responsive layout ([cbf0b3d](https://github.com/CorentinTh/it-tools/commit/cbf0b3d6995e47d371a8fbcfccd65ba304fb08dc)) | ||||
|  | ||||
|  | ||||
| ### Refactors | ||||
|  | ||||
| * **crontab:** list instead of table on small screen ([6b11de2](https://github.com/CorentinTh/it-tools/commit/6b11de258a8039fe7729130ede35d47592be7cbe)) | ||||
| * removed empty sources ([a14cac6](https://github.com/CorentinTh/it-tools/commit/a14cac6d5c5967a47ca76a1d1a420115114c3bbf)) | ||||
| * throw an error object instead of string ([4112fa5](https://github.com/CorentinTh/it-tools/commit/4112fa532e3d4be190d52bf3b11e0d4c3625a402)) | ||||
|  | ||||
| ### [2.0.1](https://github.com/CorentinTh/it-tools/compare/v2.0.0...v2.0.1) (2022-04-16) | ||||
|  | ||||
|  | ||||
| ### Features | ||||
|  | ||||
| * **config:** added vercel.json ([2e046ad](https://github.com/CorentinTh/it-tools/commit/2e046ad09fed4a55bbf4449e3683a4150839c461)) | ||||
|  | ||||
|  | ||||
| ### Bug Fixes | ||||
|  | ||||
| * remove duplicate property ([d066319](https://github.com/CorentinTh/it-tools/commit/d066319b45dee35df0212c7ff407013bd7449ae3)) | ||||
| * **style:** url encode/decode layout ([34480b4](https://github.com/CorentinTh/it-tools/commit/34480b4e25ffc33536b03a0ba711c480219ad553)) | ||||
|  | ||||
|  | ||||
| ### Documentation | ||||
|  | ||||
| * updated description ([70a3df0](https://github.com/CorentinTh/it-tools/commit/70a3df044ea86ac35c1839ac5ab624f694fdd845)) | ||||
|  | ||||
|  | ||||
| ### Refactors | ||||
|  | ||||
| * clean imports ([724e142](https://github.com/CorentinTh/it-tools/commit/724e142222202798ea3df7d0fb34da1e7a5216a1)) | ||||
| * lint fix ([a58ae24](https://github.com/CorentinTh/it-tools/commit/a58ae24d9409728ac12fb780f2c64643087de5be)) | ||||
| * ref name ([5828085](https://github.com/CorentinTh/it-tools/commit/582808597c6aadf0feb48f6aae0a29b839e0dd54)) | ||||
|  | ||||
| ## 2.0.0 (2022-04-16) | ||||
|  | ||||
|  | ||||
| ### Features | ||||
|  | ||||
| * **a11y:** aria-label on icon button ([5f50275](https://github.com/CorentinTh/it-tools/commit/5f502755d69ab21a78d9256db8a1c64f1ab82c2a)) | ||||
| * added commit short sha ([668625c](https://github.com/CorentinTh/it-tools/commit/668625c6dab6e8b98f363df6c0aa3bf00a3afaa4)) | ||||
| * added plausible tracker ([0808920](https://github.com/CorentinTh/it-tools/commit/0808920951b55c938537f33353a37ece96b04084)) | ||||
| * added twitter link ([d126abc](https://github.com/CorentinTh/it-tools/commit/d126abc7b12a9fce778fe9883e44dca581509778)) | ||||
| * footer in sider ([3f03850](https://github.com/CorentinTh/it-tools/commit/3f038503dd705ba3a5562a1e8f85a3b0e7d0be5b)) | ||||
| * **layout:** menu category ([9c9be9e](https://github.com/CorentinTh/it-tools/commit/9c9be9e2e2e2c856d1af1df9d9d37a64460cd82b)) | ||||
| * mobile friendly menu ([1e67fa6](https://github.com/CorentinTh/it-tools/commit/1e67fa6e0bede8c055d9e4cb9bf7f97423bc9bdf)) | ||||
| * **navbar:** added github link ([d4e226e](https://github.com/CorentinTh/it-tools/commit/d4e226e09face78da794fa7e676eef85d05dde75)) | ||||
| * **nav:** navigation tooltips ([b892f50](https://github.com/CorentinTh/it-tools/commit/b892f50cd633d42e6261be208bd077d92d336afb)) | ||||
| * **page:** added 404 page ([3db4f91](https://github.com/CorentinTh/it-tools/commit/3db4f91c27a2ab37bb23d8feb77b6dffa9a92977)) | ||||
| * **page:** home page layout ([57fd14a](https://github.com/CorentinTh/it-tools/commit/57fd14a199a253f49f3c53810490e5d31512b261)) | ||||
| * persistent theme selection fallback to prefered theme ([40e9af0](https://github.com/CorentinTh/it-tools/commit/40e9af06cf28b7348152f8ec3898fa2b27ec0b21)) | ||||
| * **router:** added legacy routes redirections ([dbce46b](https://github.com/CorentinTh/it-tools/commit/dbce46b470b0187a395cdd350a023641c6319582)) | ||||
| * search-bar ([e8594de](https://github.com/CorentinTh/it-tools/commit/e8594de7b45102b8bc1cfb82d0839e3722d9c4c2)) | ||||
| * **search:** round and clearable searchbar ([b112f5f](https://github.com/CorentinTh/it-tools/commit/b112f5f226c6b03151bbeb4fc607e449c444e667)) | ||||
| * **seo:** added robots.txt and humans.txt ([cd9a3bc](https://github.com/CorentinTh/it-tools/commit/cd9a3bc9b10cf7363301e9a0d0b17f38ea640e0c)) | ||||
| * **seo:** added title + description ([5f74037](https://github.com/CorentinTh/it-tools/commit/5f74037105c5e8efc5bdad2261597458cfcf26d3)) | ||||
| * **seo:** pwa and icons ([b7193e8](https://github.com/CorentinTh/it-tools/commit/b7193e838ba83d0548211cff922e107a1f11f90f)) | ||||
| * **share:** social image ([39746e0](https://github.com/CorentinTh/it-tools/commit/39746e07c53c22ac132ad2aaf25dd71bb6458cde)) | ||||
| * **style:** dark mode ([3e92b7f](https://github.com/CorentinTh/it-tools/commit/3e92b7f1e04a709df231fce22801b55619e8faab)) | ||||
| * **style:** theme overrides ([d542688](https://github.com/CorentinTh/it-tools/commit/d542688664cc9c675d1d26f4278a25f1b9e3f28d)) | ||||
| * **tool:** add lch in color converter ([b5243c4](https://github.com/CorentinTh/it-tools/commit/b5243c43638f37a2d727b015bba61fab0d1b9fe9)) | ||||
| * **tool:** added token generator ([40dec52](https://github.com/CorentinTh/it-tools/commit/40dec52c8467fd27eb8f3857ed72746ebaa4f509)) | ||||
| * **tool:** base converter ([034c686](https://github.com/CorentinTh/it-tools/commit/034c686896d0443ea587cd152535b2227234c011)) | ||||
| * **tool:** base64 string converter ([203b6a9](https://github.com/CorentinTh/it-tools/commit/203b6a9d73dcb30182b130de59920534e18b76b4)) | ||||
| * **tool:** bip39-generator ([d55329f](https://github.com/CorentinTh/it-tools/commit/d55329f3abc3d3f8ad48def7d7f63b44cd768e27)) | ||||
| * **tool:** bip39-generator ([765c010](https://github.com/CorentinTh/it-tools/commit/765c010700c07b2809daef0e7c694ac265ce9ddc)) | ||||
| * **tool:** case converter ([7a7372d](https://github.com/CorentinTh/it-tools/commit/7a7372df191abc7ecd3fee7234d4de7aaaba03f6)) | ||||
| * **tool:** color converter ([4e50b7a](https://github.com/CorentinTh/it-tools/commit/4e50b7a973e950819a52c127db2a754838cbbf8e)) | ||||
| * **tool:** crontab generator ([358ff45](https://github.com/CorentinTh/it-tools/commit/358ff45ae1d9822b8a7c342515f668d25b7128b5)) | ||||
| * **tool:** date-time converter ([2d9cb20](https://github.com/CorentinTh/it-tools/commit/2d9cb209b377326f4bf62067db7d5ad0c7eb7bde)) | ||||
| * **tool:** encryption ([888ab2c](https://github.com/CorentinTh/it-tools/commit/888ab2cf378597e2880b6dd6a013f3bc192f2b1a)) | ||||
| * **tool:** git memo ([5cd9997](https://github.com/CorentinTh/it-tools/commit/5cd9997a845f6d5f82d3ae74d3ec12603224517d)) | ||||
| * **tool:** lorem ipsum generator ([5dcb2ed](https://github.com/CorentinTh/it-tools/commit/5dcb2ed95c318ea1c4134da207c844672d0fbbd8)) | ||||
| * **tool:** qr-code generator ([5582d75](https://github.com/CorentinTh/it-tools/commit/5582d75927b560d9259929c787c0809634d1f8ae)) | ||||
| * **tool:** random port generator ([7c540f1](https://github.com/CorentinTh/it-tools/commit/7c540f1208da749c3932aab8f2c392048c4546ae)) | ||||
| * **tool:** roman-arabic numbers converter ([655019c](https://github.com/CorentinTh/it-tools/commit/655019cf23babcec2a2f1e03cac87744e3139304)) | ||||
| * **tool:** text hash ([0f3b744](https://github.com/CorentinTh/it-tools/commit/0f3b7445ad1f945d9b364476147bf824ac309a6c)) | ||||
| * **tool:** text statistics ([0a7c325](https://github.com/CorentinTh/it-tools/commit/0a7c3252e36a4769eedaaec4524b4ee2ae2b19c7)) | ||||
| * **tool:** url encode/decode ([afac566](https://github.com/CorentinTh/it-tools/commit/afac5664c802c8480fe2c457bcfb7f5e26829cdf)) | ||||
| * **tool:** uuid v4 generator ([3ae6114](https://github.com/CorentinTh/it-tools/commit/3ae61147a94791987e9e326b19063579976d8dc0)) | ||||
| * **ux:** copyable input ([1859a9a](https://github.com/CorentinTh/it-tools/commit/1859a9a174010789dcd7ecefb2451e1de7b60b4c)) | ||||
|  | ||||
|  | ||||
| ### Bug Fixes | ||||
|  | ||||
| * **hash-text:** added missing toString() ([4ca5fce](https://github.com/CorentinTh/it-tools/commit/4ca5fce911c3312d56bca1ffba863b2f37841c9e)) | ||||
| * **hash-text:** correct copy message ([bab92ef](https://github.com/CorentinTh/it-tools/commit/bab92ef84f66372df40ce385c2949518ed158427)) | ||||
| * removed global define ([889d594](https://github.com/CorentinTh/it-tools/commit/889d59499212a449ee460c68c480648e337a7ecb)) | ||||
| * **style:** working dark mode persistence ([3ae8728](https://github.com/CorentinTh/it-tools/commit/3ae872847b00d65e4e2e629775d479a3333450f1)) | ||||
| * **validation:** proper rules ([11d8110](https://github.com/CorentinTh/it-tools/commit/11d8110226e22e30ae16d297628c1d252a93be9e)) | ||||
|  | ||||
|  | ||||
| ### Refactors | ||||
|  | ||||
| * better icon ([0af7d81](https://github.com/CorentinTh/it-tools/commit/0af7d81abd987aa5d1b0321c25a65131d978e929)) | ||||
| * **clean:** removed extra console.log ([82606f6](https://github.com/CorentinTh/it-tools/commit/82606f6a477fce2041ab33adc7e95bcba4343e2b)) | ||||
| * embeded sider scrollbar ([f872972](https://github.com/CorentinTh/it-tools/commit/f872972e69aeb4fde4c17f0c122ca3fd4aa1c56c)) | ||||
| * icon sizes ([9bb7fc4](https://github.com/CorentinTh/it-tools/commit/9bb7fc47aa70bdc5083d0883f1496fac63f812ea)) | ||||
| * menu option key ([390ef93](https://github.com/CorentinTh/it-tools/commit/390ef93232dc1b448022a0c09d36367adad9d221)) | ||||
| * **page:** removed unused import ([f70fce6](https://github.com/CorentinTh/it-tools/commit/f70fce65e20989eb19b0f0976e756a43edf02e9d)) | ||||
| * removed theme editor ([8559fbd](https://github.com/CorentinTh/it-tools/commit/8559fbd7744fe82b7702a5c0eb77a8d627c5a73d)) | ||||
| * removed unused files ([c1e7669](https://github.com/CorentinTh/it-tools/commit/c1e76695e4a16b8312ab6031a1bdfb6368946677)) | ||||
| * removed unused files ([8d9f924](https://github.com/CorentinTh/it-tools/commit/8d9f92417744a5fbd9b4108e851005f23de18b53)) | ||||
| * **style:** cleaner layout ([1d09a01](https://github.com/CorentinTh/it-tools/commit/1d09a01bb25088493cc9b7f2cb7f8a8aa69ac9e9)) | ||||
| * **style:** improve style for tool-card ([65a6896](https://github.com/CorentinTh/it-tools/commit/65a6896563d16f30420424e274bd306e3e9182c8)) | ||||
| * **style:** label width ([fd4426d](https://github.com/CorentinTh/it-tools/commit/fd4426d246ada553528759f761c8192df85c0d44)) | ||||
| * **style:** menu item height ([8951e87](https://github.com/CorentinTh/it-tools/commit/8951e87c143fda74be32bae5b28e009556d7086e)) | ||||
| * **style:** menu scrollbar ([483cf66](https://github.com/CorentinTh/it-tools/commit/483cf66db992169d361487c8461938810793b978)) | ||||
| * **style:** port display ([2632f24](https://github.com/CorentinTh/it-tools/commit/2632f24cc89af7dd12f7a0c1a8b58983a1bb78d8)) | ||||
| * **style:** removed extra br ([b44539c](https://github.com/CorentinTh/it-tools/commit/b44539c1820defbaaa6dfe83a76c72982a641971)) | ||||
| * **style:** replaced scss style block to less ([655d9d2](https://github.com/CorentinTh/it-tools/commit/655d9d22e3136bdf1dee29310ab04cf38596bdc8)) | ||||
| * **style:** responsive layout ([2df3f53](https://github.com/CorentinTh/it-tools/commit/2df3f53b78bbe419763fd359788a4b0b5710e4b7)) | ||||
| * **style:** updated linter config ([6b58ec5](https://github.com/CorentinTh/it-tools/commit/6b58ec554a0de91139f16d67cec42536d093d5fb)) | ||||
|  | ||||
|  | ||||
| ### Documentation | ||||
|  | ||||
| * added new tool creation procedure ([8177883](https://github.com/CorentinTh/it-tools/commit/81778834e6a79725c42eae1772935682ce7580c6)) | ||||
| * updated readme ([1134e0b](https://github.com/CorentinTh/it-tools/commit/1134e0b822edbc25ce9ff83007bf5d331a1becbd)) | ||||
| _Diff not available_ | ||||
|   | ||||
							
								
								
									
										1
									
								
								components.d.ts
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										1
									
								
								components.d.ts
									
									
									
									
										vendored
									
									
								
							| @@ -37,6 +37,7 @@ declare module '@vue/runtime-core' { | ||||
|     NH1: typeof import('naive-ui')['NH1'] | ||||
|     NH2: typeof import('naive-ui')['NH2'] | ||||
|     NH3: typeof import('naive-ui')['NH3'] | ||||
|     NH4: typeof import('naive-ui')['NH4'] | ||||
|     NIcon: typeof import('naive-ui')['NIcon'] | ||||
|     NImage: typeof import('naive-ui')['NImage'] | ||||
|     NInput: typeof import('naive-ui')['NInput'] | ||||
|   | ||||
							
								
								
									
										10
									
								
								package.json
									
									
									
									
									
								
							
							
						
						
									
										10
									
								
								package.json
									
									
									
									
									
								
							| @@ -1,6 +1,6 @@ | ||||
| { | ||||
|   "name": "it-tools", | ||||
|   "version": "2023.4.13-dce9ff9", | ||||
|   "version": "2023.4.14-dbad773", | ||||
|   "description": "Collection of handy online tools for developers, with great UX. ", | ||||
|   "keywords": [ | ||||
|     "productivity", | ||||
| @@ -30,7 +30,7 @@ | ||||
|     "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", | ||||
|     "script:create-new-tool": "node scripts/create-tool.mjs", | ||||
|     "release": "standard-version" | ||||
|     "release": "node ./scripts/release.mjs" | ||||
|   }, | ||||
|   "dependencies": { | ||||
|     "@it-tools/bip39": "^0.0.4", | ||||
| @@ -54,6 +54,7 @@ | ||||
|     "date-fns": "^2.29.3", | ||||
|     "figue": "^1.2.0", | ||||
|     "fuse.js": "^6.6.2", | ||||
|     "hash-wasm": "^4.9.0", | ||||
|     "highlight.js": "^11.7.0", | ||||
|     "json5": "^2.2.3", | ||||
|     "jwt-decode": "^3.1.2", | ||||
| @@ -101,6 +102,7 @@ | ||||
|     "@vue/test-utils": "^2.3.2", | ||||
|     "@vue/tsconfig": "^0.1.3", | ||||
|     "c8": "^7.13.0", | ||||
|     "consola": "^3.0.2", | ||||
|     "eslint": "^8.38.0", | ||||
|     "eslint-config-prettier": "^8.8.0", | ||||
|     "eslint-import-resolver-typescript": "^3.5.5", | ||||
| @@ -109,7 +111,6 @@ | ||||
|     "jsdom": "^19.0.0", | ||||
|     "less": "^4.1.3", | ||||
|     "prettier": "^2.8.7", | ||||
|     "standard-version": "^9.5.0", | ||||
|     "start-server-and-test": "^1.15.4", | ||||
|     "typescript": "~4.5.5", | ||||
|     "unocss": "^0.50.8", | ||||
| @@ -121,6 +122,7 @@ | ||||
|     "vite-svg-loader": "^3.6.0", | ||||
|     "vitest": "^0.13.1", | ||||
|     "vue-tsc": "^0.31.4", | ||||
|     "workbox-window": "^6.5.4" | ||||
|     "workbox-window": "^6.5.4", | ||||
|     "zx": "^7.2.1" | ||||
|   } | ||||
| } | ||||
|   | ||||
							
								
								
									
										949
									
								
								pnpm-lock.yaml
									
									
									
										generated
									
									
									
								
							
							
						
						
									
										949
									
								
								pnpm-lock.yaml
									
									
									
										generated
									
									
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							
							
								
								
									
										6
									
								
								scripts/getLatestChangelog.mjs
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										6
									
								
								scripts/getLatestChangelog.mjs
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,6 @@ | ||||
| import { readFile } from 'fs/promises'; | ||||
|  | ||||
| const changelogContent = await readFile('./CHANGELOG.md', 'utf-8'); | ||||
| const [, lastChangelog] = changelogContent.split(/^## .*$/gm); | ||||
|  | ||||
| console.log(lastChangelog.trim()); | ||||
							
								
								
									
										57
									
								
								scripts/release.mjs
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										57
									
								
								scripts/release.mjs
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,57 @@ | ||||
| import { $, argv } from 'zx'; | ||||
| import { consola } from 'consola'; | ||||
| import { rawCommitsToMarkdown } from './shared/commits.mjs'; | ||||
| import { addToChangelog } from './shared/changelog.mjs'; | ||||
|  | ||||
| $.verbose = false; | ||||
|  | ||||
| const isDryRun = argv['dry-run'] ?? false; | ||||
|  | ||||
| const now = new Date(); | ||||
| const currentShortSha = (await $`git rev-parse --short HEAD`).stdout.trim(); | ||||
|  | ||||
| const calver = now.toISOString().slice(0, 10).replace(/-/g, '.'); | ||||
| const version = `${calver}-${currentShortSha}`; | ||||
|  | ||||
| const { stdout: rawCommits } = await $`git log --pretty=oneline $(git describe --tags --abbrev=0)..HEAD`; | ||||
|  | ||||
| const markdown = rawCommitsToMarkdown({ rawCommits }); | ||||
|  | ||||
| consola.info(`Changelog: \n\n${markdown}\n\n`); | ||||
|  | ||||
| if (isDryRun) { | ||||
|   consola.info(`[dry-run] Not creating version nor tag`); | ||||
|   consola.info('Aborting'); | ||||
|   process.exit(0); | ||||
| } | ||||
|  | ||||
| const shouldContinue = await consola.prompt( | ||||
|   'This script will create a new version and tag, and update the changelog. Continue?', | ||||
|   { | ||||
|     type: 'confirm', | ||||
|   }, | ||||
| ); | ||||
|  | ||||
| if (!shouldContinue) { | ||||
|   consola.info('Aborting'); | ||||
|   process.exit(0); | ||||
| } | ||||
|  | ||||
| consola.info('Updating changelog'); | ||||
| await addToChangelog({ changelog: markdown, version }); | ||||
| consola.success('Changelog updated'); | ||||
|  | ||||
| try { | ||||
|   consola.info('Committing changelog changes'); | ||||
|   await $`git add CHANGELOG.md`; | ||||
|   await $`git commit -m "docs(changelog): update changelog for ${version}"`; | ||||
|   consola.success('Changelog changes committed'); | ||||
|  | ||||
|   consola.info('Creating version and tag'); | ||||
|   await $`npm version ${version} -m "chore(version): release ${version}"`; | ||||
|   consola.info('Npm version released with tag'); | ||||
| } catch (error) { | ||||
|   consola.error(error); | ||||
|   consola.info('Aborting'); | ||||
|   process.exit(1); | ||||
| } | ||||
							
								
								
									
										15
									
								
								scripts/shared/changelog.mjs
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										15
									
								
								scripts/shared/changelog.mjs
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,15 @@ | ||||
| import { readFile, writeFile } from 'fs/promises'; | ||||
|  | ||||
| export { addToChangelog }; | ||||
|  | ||||
| async function addToChangelog({ changelog, version, changelogPath = './CHANGELOG.md' }) { | ||||
|   const changelogContent = await readFile(changelogPath, 'utf-8'); | ||||
|   const versionTitle = `## Version ${version}`; | ||||
|  | ||||
|   if (changelogContent.includes(versionTitle)) { | ||||
|     throw new Error(`Version ${version} already exists in the changelog`); | ||||
|   } | ||||
|  | ||||
|   const newChangeLogContent = changelogContent.replace('## ', `${versionTitle}\n\n${changelog}\n\n## `); | ||||
|   await writeFile(changelogPath, newChangeLogContent, 'utf-8'); | ||||
| } | ||||
							
								
								
									
										54
									
								
								scripts/shared/commits.mjs
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										54
									
								
								scripts/shared/commits.mjs
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,54 @@ | ||||
| import _ from 'lodash'; | ||||
|  | ||||
| export { rawCommitsToMarkdown }; | ||||
|  | ||||
| const commitScopesToHumanReadable = { | ||||
|   build: 'Build system', | ||||
|   chore: 'Chores', | ||||
|   ci: 'Continuous integration', | ||||
|   docs: 'Documentation', | ||||
|   feat: 'Features', | ||||
|   fix: 'Bug fixes', | ||||
|   infra: 'Infrastucture', | ||||
|   perf: 'Performance', | ||||
|   refactor: 'Refactoring', | ||||
|   test: 'Tests', | ||||
| }; | ||||
|  | ||||
| const commitTypesOrder = ['feat', 'fix', 'perf', 'refactor', 'test', 'build', 'ci', 'chore', 'other']; | ||||
|  | ||||
| const getCommitTypeSortIndex = (type) => | ||||
|   commitTypesOrder.includes(type) ? commitTypesOrder.indexOf(type) : commitTypesOrder.length; | ||||
|  | ||||
| function parseCommitLine(commit) { | ||||
|   const [sha, ...splittedRawMessage] = commit.trim().split(' '); | ||||
|   const rawMessage = splittedRawMessage.join(' '); | ||||
|   const { type, scope, subject } = /^(?<type>.*?)(\((?<scope>.*)\))?: ?(?<subject>.+)$/.exec(rawMessage)?.groups ?? {}; | ||||
|  | ||||
|   return { | ||||
|     sha: sha.slice(0, 7), | ||||
|     type: type ?? 'other', | ||||
|     scope, | ||||
|     subject: subject ?? rawMessage, | ||||
|   }; | ||||
| } | ||||
|  | ||||
| function commitSectionsToMarkdown({ type, commits }) { | ||||
|   return [ | ||||
|     `### ${commitScopesToHumanReadable[type] ?? _.capitalize(type)}`, | ||||
|     ...commits.map(({ sha, scope, subject }) => ['-', scope ? `**${scope}**:` : '', subject, `(${sha})`].join(' ')), | ||||
|   ].join('\n'); | ||||
| } | ||||
|  | ||||
| function rawCommitsToMarkdown({ rawCommits }) { | ||||
|   return _.chain(rawCommits) | ||||
|     .trim() | ||||
|     .split('\n') | ||||
|     .map(parseCommitLine) | ||||
|     .groupBy('type') | ||||
|     .map((commits, type) => ({ type, commits })) | ||||
|     .sortBy(({ type }) => getCommitTypeSortIndex(type)) | ||||
|     .map(commitSectionsToMarkdown) | ||||
|     .join('\n\n') | ||||
|     .value(); | ||||
| } | ||||
| @@ -0,0 +1,37 @@ | ||||
| import { test, expect } from '@playwright/test'; | ||||
|  | ||||
| test.describe('Tool - Argon2 hash generator', () => { | ||||
|   test.beforeEach(async ({ page }) => { | ||||
|     await page.goto('/argon2-hash-generator'); | ||||
|   }); | ||||
|  | ||||
|   test('Has correct title', async ({ page }) => { | ||||
|     await expect(page).toHaveTitle('Argon2 hash generator - IT Tools'); | ||||
|   }); | ||||
|  | ||||
|   test('hash a string a verify that the result match', async ({ page }) => { | ||||
|     await page.getByTestId('input').fill('azerty'); | ||||
|  | ||||
|     await new Promise((resolve) => setTimeout(resolve, 500)); | ||||
|     const hash = await page.getByTestId('hash').inputValue(); | ||||
|  | ||||
|     await page.getByTestId('compare-string').fill('azerty'); | ||||
|     await page.getByTestId('compare-hash').fill(hash); | ||||
|  | ||||
|     await new Promise((resolve) => setTimeout(resolve, 500)); | ||||
|     const doTheyMatch = await page.getByTestId('do-they-match').innerText(); | ||||
|  | ||||
|     expect(doTheyMatch.trim()).toEqual('Yes'); | ||||
|   }); | ||||
|  | ||||
|   test('hash a string a verify that the does not result match another string', async ({ page }) => { | ||||
|     await page.getByTestId('input').fill('azerty'); | ||||
|     const hash = await page.getByTestId('hash').inputValue(); | ||||
|  | ||||
|     await page.getByTestId('compare-string').fill('NOT AZERTY'); | ||||
|     await page.getByTestId('compare-hash').fill(hash); | ||||
|     const doTheyMatch = await page.getByTestId('do-they-match').innerText(); | ||||
|  | ||||
|     expect(doTheyMatch.trim()).toEqual('No'); | ||||
|   }); | ||||
| }); | ||||
							
								
								
									
										107
									
								
								src/tools/argon2-hash-generator/argon2-hash-generator.vue
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										107
									
								
								src/tools/argon2-hash-generator/argon2-hash-generator.vue
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,107 @@ | ||||
| <template> | ||||
|   <n-card title="Hash"> | ||||
|     <n-form label-width="120"> | ||||
|       <n-form-item label="Your string: " label-placement="left"> | ||||
|         <n-input | ||||
|           v-model:value="input" | ||||
|           placeholder="Your string to bcrypt..." | ||||
|           autocomplete="off" | ||||
|           autocorrect="off" | ||||
|           autocapitalize="off" | ||||
|           spellcheck="false" | ||||
|           :input-props="{ | ||||
|             'data-test-id': 'input', | ||||
|           }" | ||||
|         /> | ||||
|       </n-form-item> | ||||
|       <n-form-item label="Iteration: " label-placement="left"> | ||||
|         <n-input-number v-model:value="iterations" placeholder="Iterations..." min="0" w-full /> | ||||
|       </n-form-item> | ||||
|       <n-form-item label="Memory size: " label-placement="left"> | ||||
|         <n-input-number v-model:value="memorySize" placeholder="Memory size..." min="0" w-full /> | ||||
|       </n-form-item> | ||||
|       <n-input | ||||
|         :value="hashed" | ||||
|         readonly | ||||
|         style="text-align: center" | ||||
|         placeholder="Set a string to hash above..." | ||||
|         :input-props="{ | ||||
|           'data-test-id': 'hash', | ||||
|         }" | ||||
|       /> | ||||
|     </n-form> | ||||
|     <br /> | ||||
|     <n-space justify="center"> | ||||
|       <n-button secondary @click="copy"> Copy hash </n-button> | ||||
|     </n-space> | ||||
|   </n-card> | ||||
|  | ||||
|   <n-card title="Compare string with hash"> | ||||
|     <n-form label-width="120"> | ||||
|       <n-form-item label="Your string: " label-placement="left"> | ||||
|         <n-input | ||||
|           v-model:value="compareString" | ||||
|           placeholder="Your string to compare..." | ||||
|           autocomplete="off" | ||||
|           autocorrect="off" | ||||
|           autocapitalize="off" | ||||
|           spellcheck="false" | ||||
|           :input-props="{ | ||||
|             'data-test-id': 'compare-string', | ||||
|           }" | ||||
|         /> | ||||
|       </n-form-item> | ||||
|       <n-form-item label="Your hash: " label-placement="left"> | ||||
|         <n-input | ||||
|           v-model:value="compareHash" | ||||
|           placeholder="Your hash to compare..." | ||||
|           autocomplete="off" | ||||
|           autocorrect="off" | ||||
|           autocapitalize="off" | ||||
|           spellcheck="false" | ||||
|           :input-props="{ | ||||
|             'data-test-id': 'compare-hash', | ||||
|           }" | ||||
|         /> | ||||
|       </n-form-item> | ||||
|       <n-form-item label="Do they match ? " label-placement="left" :show-feedback="false"> | ||||
|         <span data-test-id="do-they-match"> | ||||
|           <n-tag v-if="compareMatch" :bordered="false" type="success" round>Yes</n-tag> | ||||
|           <n-tag v-else :bordered="false" type="error" round>No</n-tag> | ||||
|         </span> | ||||
|       </n-form-item> | ||||
|     </n-form> | ||||
|   </n-card> | ||||
| </template> | ||||
|  | ||||
| <script setup lang="ts"> | ||||
| import { useCopy } from '@/composable/copy'; | ||||
| import { argon2id, argon2Verify } from 'hash-wasm'; | ||||
|  | ||||
| const input = ref(''); | ||||
| const iterations = ref(32); | ||||
| const memorySize = ref(512); | ||||
| const hashLength = ref(32); | ||||
|  | ||||
| const hashed = computedAsync( | ||||
|   async () => | ||||
|     argon2id({ | ||||
|       password: input.value, | ||||
|       salt: window.crypto.getRandomValues(new Uint8Array(16)), | ||||
|       parallelism: 1, | ||||
|       iterations: iterations.value, | ||||
|       memorySize: memorySize.value, | ||||
|       hashLength: hashLength.value, | ||||
|       outputType: 'encoded', | ||||
|     }), | ||||
|   '', | ||||
| ); | ||||
| const { copy } = useCopy({ source: hashed, text: 'Hashed string copied to the clipboard' }); | ||||
|  | ||||
| const compareString = ref(''); | ||||
| const compareHash = ref(''); | ||||
| const compareMatch = computedAsync( | ||||
|   () => argon2Verify({ password: compareString.value, hash: compareHash.value }), | ||||
|   false, | ||||
| ); | ||||
| </script> | ||||
							
								
								
									
										12
									
								
								src/tools/argon2-hash-generator/index.ts
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										12
									
								
								src/tools/argon2-hash-generator/index.ts
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,12 @@ | ||||
| import { Lock } from '@vicons/tabler'; | ||||
| import { defineTool } from '../tool'; | ||||
|  | ||||
| export const tool = defineTool({ | ||||
|   name: 'Argon2 hash generator', | ||||
|   path: '/argon2-hash-generator', | ||||
|   description: 'Hash and compare string (password) using Argon2', | ||||
|   keywords: ['argon2', 'hash', 'generator', 'password', 'salt', 'crypto', 'security'], | ||||
|   component: () => import('./argon2-hash-generator.vue'), | ||||
|   icon: Lock, | ||||
|   createdAt: new Date('2023-04-16'), | ||||
| }); | ||||
| @@ -37,7 +37,7 @@ | ||||
|       <n-form-item label="Your hash: " label-placement="left"> | ||||
|         <n-input | ||||
|           v-model:value="compareHash" | ||||
|           placeholder="Your hahs to compare..." | ||||
|           placeholder="Your hash to compare..." | ||||
|           autocomplete="off" | ||||
|           autocorrect="off" | ||||
|           autocapitalize="off" | ||||
| @@ -45,9 +45,8 @@ | ||||
|         /> | ||||
|       </n-form-item> | ||||
|       <n-form-item label="Do they match ? " label-placement="left" :show-feedback="false"> | ||||
|         <div class="compare-result" :class="{ positive: compareMatch }"> | ||||
|           {{ compareMatch ? 'Yes' : 'No' }} | ||||
|         </div> | ||||
|         <n-tag v-if="compareMatch" :bordered="false" type="success" round>Yes</n-tag> | ||||
|         <n-tag v-else :bordered="false" type="error" round>No</n-tag> | ||||
|       </n-form-item> | ||||
|     </n-form> | ||||
|   </n-card> | ||||
| @@ -57,9 +56,6 @@ | ||||
| import { computed, ref } from 'vue'; | ||||
| import { hashSync, compareSync } from 'bcryptjs'; | ||||
| import { useCopy } from '@/composable/copy'; | ||||
| import { useThemeVars } from 'naive-ui'; | ||||
|  | ||||
| const themeVars = useThemeVars(); | ||||
|  | ||||
| const input = ref(''); | ||||
| const saltCount = ref(10); | ||||
| @@ -70,13 +66,3 @@ const compareString = ref(''); | ||||
| const compareHash = ref(''); | ||||
| const compareMatch = computed(() => compareSync(compareString.value, compareHash.value)); | ||||
| </script> | ||||
|  | ||||
| <style lang="less" scoped> | ||||
| .compare-result { | ||||
|   color: v-bind('themeVars.errorColor'); | ||||
|  | ||||
|   &.positive { | ||||
|     color: v-bind('themeVars.successColor'); | ||||
|   } | ||||
| } | ||||
| </style> | ||||
|   | ||||
							
								
								
									
										432
									
								
								src/tools/http-status-codes/http-status-codes.constants.ts
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										432
									
								
								src/tools/http-status-codes/http-status-codes.constants.ts
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,432 @@ | ||||
| export const codesByCategories: { | ||||
|   category: string; | ||||
|   codes: { | ||||
|     code: number; | ||||
|     name: string; | ||||
|     description: string; | ||||
|     type: 'HTTP' | 'WebDav'; | ||||
|   }[]; | ||||
| }[] = [ | ||||
|   { | ||||
|     category: '1xx informational response', | ||||
|     codes: [ | ||||
|       { | ||||
|         code: 100, | ||||
|         name: 'Continue', | ||||
|         description: 'Waiting for the client to emit the body of the request.', | ||||
|         type: 'HTTP', | ||||
|       }, | ||||
|       { | ||||
|         code: 101, | ||||
|         name: 'Switching Protocols', | ||||
|         description: 'The server has agreed to change protocol.', | ||||
|         type: 'HTTP', | ||||
|       }, | ||||
|       { | ||||
|         code: 102, | ||||
|         name: 'Processing', | ||||
|         description: 'The server is processing the request, but no response is available yet.', | ||||
|         type: 'WebDav', | ||||
|       }, | ||||
|       { | ||||
|         code: 103, | ||||
|         name: 'Early Hints', | ||||
|         description: 'The server returns some response headers before final HTTP message.', | ||||
|         type: 'HTTP', | ||||
|       }, | ||||
|     ], | ||||
|   }, | ||||
|   { | ||||
|     category: '2xx success', | ||||
|     codes: [ | ||||
|       { | ||||
|         code: 200, | ||||
|         name: 'OK', | ||||
|         description: 'Standard response for successful HTTP requests.', | ||||
|         type: 'HTTP', | ||||
|       }, | ||||
|       { | ||||
|         code: 201, | ||||
|         name: 'Created', | ||||
|         description: 'The request has been fulfilled, resulting in the creation of a new resource.', | ||||
|         type: 'HTTP', | ||||
|       }, | ||||
|       { | ||||
|         code: 202, | ||||
|         name: 'Accepted', | ||||
|         description: 'The request has been accepted for processing, but the processing has not been completed.', | ||||
|         type: 'HTTP', | ||||
|       }, | ||||
|       { | ||||
|         code: 203, | ||||
|         name: 'Non-Authoritative Information', | ||||
|         description: | ||||
|           'The request is successful but the content of the original request has been modified by a transforming proxy.', | ||||
|         type: 'HTTP', | ||||
|       }, | ||||
|       { | ||||
|         code: 204, | ||||
|         name: 'No Content', | ||||
|         description: 'The server successfully processed the request and is not returning any content.', | ||||
|         type: 'HTTP', | ||||
|       }, | ||||
|       { | ||||
|         code: 205, | ||||
|         name: 'Reset Content', | ||||
|         description: 'The server indicates to reinitialize the document view which sent this request.', | ||||
|         type: 'HTTP', | ||||
|       }, | ||||
|       { | ||||
|         code: 206, | ||||
|         name: 'Partial Content', | ||||
|         description: 'The server is delivering only part of the resource due to a range header sent by the client.', | ||||
|         type: 'HTTP', | ||||
|       }, | ||||
|       { | ||||
|         code: 207, | ||||
|         name: 'Multi-Status', | ||||
|         description: | ||||
|           'The message body that follows is an XML message and can contain a number of separate response codes.', | ||||
|         type: 'WebDav', | ||||
|       }, | ||||
|       { | ||||
|         code: 208, | ||||
|         name: 'Already Reported', | ||||
|         description: | ||||
|           'The members of a DAV binding have already been enumerated in a preceding part of the (multistatus) response.', | ||||
|         type: 'WebDav', | ||||
|       }, | ||||
|       { | ||||
|         code: 226, | ||||
|         name: 'IM Used', | ||||
|         description: | ||||
|           'The server has fulfilled a request for the resource, and the response is a representation of the result.', | ||||
|         type: 'HTTP', | ||||
|       }, | ||||
|     ], | ||||
|   }, | ||||
|   { | ||||
|     category: '3xx redirection', | ||||
|     codes: [ | ||||
|       { | ||||
|         code: 300, | ||||
|         name: 'Multiple Choices', | ||||
|         description: 'Indicates multiple options for the resource that the client may follow.', | ||||
|         type: 'HTTP', | ||||
|       }, | ||||
|       { | ||||
|         code: 301, | ||||
|         name: 'Moved Permanently', | ||||
|         description: 'This and all future requests should be directed to the given URI.', | ||||
|         type: 'HTTP', | ||||
|       }, | ||||
|       { | ||||
|         code: 302, | ||||
|         name: 'Found', | ||||
|         description: 'Redirect to another URL. This is an example of industry practice contradicting the standard.', | ||||
|         type: 'HTTP', | ||||
|       }, | ||||
|       { | ||||
|         code: 303, | ||||
|         name: 'See Other', | ||||
|         description: 'The response to the request can be found under another URI using a GET method.', | ||||
|         type: 'HTTP', | ||||
|       }, | ||||
|       { | ||||
|         code: 304, | ||||
|         name: 'Not Modified', | ||||
|         description: | ||||
|           'Indicates that the resource has not been modified since the version specified by the request headers.', | ||||
|         type: 'HTTP', | ||||
|       }, | ||||
|       { | ||||
|         code: 305, | ||||
|         name: 'Use Proxy', | ||||
|         description: | ||||
|           'The requested resource is available only through a proxy, the address for which is provided in the response.', | ||||
|         type: 'HTTP', | ||||
|       }, | ||||
|       { | ||||
|         code: 306, | ||||
|         name: 'Switch Proxy', | ||||
|         description: 'No longer used. Originally meant "Subsequent requests should use the specified proxy."', | ||||
|         type: 'HTTP', | ||||
|       }, | ||||
|       { | ||||
|         code: 307, | ||||
|         name: 'Temporary Redirect', | ||||
|         description: | ||||
|           'In this case, the request should be repeated with another URI; however, future requests should still use the original URI.', | ||||
|         type: 'HTTP', | ||||
|       }, | ||||
|       { | ||||
|         code: 308, | ||||
|         name: 'Permanent Redirect', | ||||
|         description: 'The request and all future requests should be repeated using another URI.', | ||||
|         type: 'HTTP', | ||||
|       }, | ||||
|     ], | ||||
|   }, | ||||
|   { | ||||
|     category: '4xx client error', | ||||
|     codes: [ | ||||
|       { | ||||
|         code: 400, | ||||
|         name: 'Bad Request', | ||||
|         description: 'The server cannot or will not process the request due to an apparent client error.', | ||||
|         type: 'HTTP', | ||||
|       }, | ||||
|       { | ||||
|         code: 401, | ||||
|         name: 'Unauthorized', | ||||
|         description: | ||||
|           'Similar to 403 Forbidden, but specifically for use when authentication is required and has failed or has not yet been provided.', | ||||
|         type: 'HTTP', | ||||
|       }, | ||||
|       { | ||||
|         code: 402, | ||||
|         name: 'Payment Required', | ||||
|         description: | ||||
|           'Reserved for future use. The original intention was that this code might be used as part of some form of digital cash or micropayment scheme.', | ||||
|         type: 'HTTP', | ||||
|       }, | ||||
|       { | ||||
|         code: 403, | ||||
|         name: 'Forbidden', | ||||
|         description: | ||||
|           'The request was valid, but the server is refusing action. The user might not have the necessary permissions for a resource.', | ||||
|         type: 'HTTP', | ||||
|       }, | ||||
|       { | ||||
|         code: 404, | ||||
|         name: 'Not Found', | ||||
|         description: 'The requested resource could not be found but may be available in the future.', | ||||
|         type: 'HTTP', | ||||
|       }, | ||||
|       { | ||||
|         code: 405, | ||||
|         name: 'Method Not Allowed', | ||||
|         description: 'A request method is not supported for the requested resource.', | ||||
|         type: 'HTTP', | ||||
|       }, | ||||
|       { | ||||
|         code: 406, | ||||
|         name: 'Not Acceptable', | ||||
|         description: | ||||
|           'The requested resource is capable of generating only content not acceptable according to the Accept headers sent in the request.', | ||||
|         type: 'HTTP', | ||||
|       }, | ||||
|       { | ||||
|         code: 407, | ||||
|         name: 'Proxy Authentication Required', | ||||
|         description: 'The client must first authenticate itself with the proxy.', | ||||
|         type: 'HTTP', | ||||
|       }, | ||||
|       { | ||||
|         code: 408, | ||||
|         name: 'Request Timeout', | ||||
|         description: 'The server timed out waiting for the request.', | ||||
|         type: 'HTTP', | ||||
|       }, | ||||
|       { | ||||
|         code: 409, | ||||
|         name: 'Conflict', | ||||
|         description: | ||||
|           'Indicates that the request could not be processed because of conflict in the request, such as an edit conflict.', | ||||
|         type: 'HTTP', | ||||
|       }, | ||||
|       { | ||||
|         code: 410, | ||||
|         name: 'Gone', | ||||
|         description: 'Indicates that the resource requested is no longer available and will not be available again.', | ||||
|         type: 'HTTP', | ||||
|       }, | ||||
|       { | ||||
|         code: 411, | ||||
|         name: 'Length Required', | ||||
|         description: | ||||
|           'The request did not specify the length of its content, which is required by the requested resource.', | ||||
|         type: 'HTTP', | ||||
|       }, | ||||
|       { | ||||
|         code: 412, | ||||
|         name: 'Precondition Failed', | ||||
|         description: 'The server does not meet one of the preconditions that the requester put on the request.', | ||||
|         type: 'HTTP', | ||||
|       }, | ||||
|       { | ||||
|         code: 413, | ||||
|         name: 'Payload Too Large', | ||||
|         description: 'The request is larger than the server is willing or able to process.', | ||||
|         type: 'HTTP', | ||||
|       }, | ||||
|       { | ||||
|         code: 414, | ||||
|         name: 'URI Too Long', | ||||
|         description: 'The URI provided was too long for the server to process.', | ||||
|         type: 'HTTP', | ||||
|       }, | ||||
|       { | ||||
|         code: 415, | ||||
|         name: 'Unsupported Media Type', | ||||
|         description: 'The request entity has a media type which the server or resource does not support.', | ||||
|         type: 'HTTP', | ||||
|       }, | ||||
|       { | ||||
|         code: 416, | ||||
|         name: 'Range Not Satisfiable', | ||||
|         description: 'The client has asked for a portion of the file, but the server cannot supply that portion.', | ||||
|         type: 'HTTP', | ||||
|       }, | ||||
|       { | ||||
|         code: 417, | ||||
|         name: 'Expectation Failed', | ||||
|         description: 'The server cannot meet the requirements of the Expect request-header field.', | ||||
|         type: 'HTTP', | ||||
|       }, | ||||
|       { | ||||
|         code: 418, | ||||
|         name: "I'm a teapot", | ||||
|         description: 'The server refuses the attempt to brew coffee with a teapot.', | ||||
|         type: 'HTTP', | ||||
|       }, | ||||
|       { | ||||
|         code: 421, | ||||
|         name: 'Misdirected Request', | ||||
|         description: 'The request was directed at a server that is not able to produce a response.', | ||||
|         type: 'HTTP', | ||||
|       }, | ||||
|       { | ||||
|         code: 422, | ||||
|         name: 'Unprocessable Entity', | ||||
|         description: 'The request was well-formed but was unable to be followed due to semantic errors.', | ||||
|         type: 'HTTP', | ||||
|       }, | ||||
|       { | ||||
|         code: 423, | ||||
|         name: 'Locked', | ||||
|         description: 'The resource that is being accessed is locked.', | ||||
|         type: 'HTTP', | ||||
|       }, | ||||
|       { | ||||
|         code: 424, | ||||
|         name: 'Failed Dependency', | ||||
|         description: 'The request failed due to failure of a previous request.', | ||||
|         type: 'HTTP', | ||||
|       }, | ||||
|       { | ||||
|         code: 425, | ||||
|         name: 'Too Early', | ||||
|         description: 'Indicates that the server is unwilling to risk processing a request that might be replayed.', | ||||
|         type: 'HTTP', | ||||
|       }, | ||||
|       { | ||||
|         code: 426, | ||||
|         name: 'Upgrade Required', | ||||
|         description: 'The client should switch to a different protocol such as TLS/1.0.', | ||||
|         type: 'HTTP', | ||||
|       }, | ||||
|       { | ||||
|         code: 428, | ||||
|         name: 'Precondition Required', | ||||
|         description: 'The origin server requires the request to be conditional.', | ||||
|         type: 'HTTP', | ||||
|       }, | ||||
|       { | ||||
|         code: 429, | ||||
|         name: 'Too Many Requests', | ||||
|         description: 'The user has sent too many requests in a given amount of time.', | ||||
|         type: 'HTTP', | ||||
|       }, | ||||
|       { | ||||
|         code: 431, | ||||
|         name: 'Request Header Fields Too Large', | ||||
|         description: | ||||
|           'The server is unwilling to process the request because either an individual header field, or all the header fields collectively, are too large.', | ||||
|         type: 'HTTP', | ||||
|       }, | ||||
|       { | ||||
|         code: 451, | ||||
|         name: 'Unavailable For Legal Reasons', | ||||
|         description: | ||||
|           'A server operator has received a legal demand to deny access to a resource or to a set of resources that includes the requested resource.', | ||||
|         type: 'HTTP', | ||||
|       }, | ||||
|     ], | ||||
|   }, | ||||
|   { | ||||
|     category: '5xx server error', | ||||
|     codes: [ | ||||
|       { | ||||
|         code: 500, | ||||
|         name: 'Internal Server Error', | ||||
|         description: | ||||
|           'A generic error message, given when an unexpected condition was encountered and no more specific message is suitable.', | ||||
|         type: 'HTTP', | ||||
|       }, | ||||
|       { | ||||
|         code: 501, | ||||
|         name: 'Not Implemented', | ||||
|         description: | ||||
|           'The server either does not recognize the request method, or it lacks the ability to fulfill the request.', | ||||
|         type: 'HTTP', | ||||
|       }, | ||||
|       { | ||||
|         code: 502, | ||||
|         name: 'Bad Gateway', | ||||
|         description: | ||||
|           'The server was acting as a gateway or proxy and received an invalid response from the upstream server.', | ||||
|         type: 'HTTP', | ||||
|       }, | ||||
|       { | ||||
|         code: 503, | ||||
|         name: 'Service Unavailable', | ||||
|         description: 'The server is currently unavailable (because it is overloaded or down for maintenance).', | ||||
|         type: 'HTTP', | ||||
|       }, | ||||
|       { | ||||
|         code: 504, | ||||
|         name: 'Gateway Timeout', | ||||
|         description: | ||||
|           'The server was acting as a gateway or proxy and did not receive a timely response from the upstream server.', | ||||
|         type: 'HTTP', | ||||
|       }, | ||||
|       { | ||||
|         code: 505, | ||||
|         name: 'HTTP Version Not Supported', | ||||
|         description: 'The server does not support the HTTP protocol version used in the request.', | ||||
|         type: 'HTTP', | ||||
|       }, | ||||
|       { | ||||
|         code: 506, | ||||
|         name: 'Variant Also Negotiates', | ||||
|         description: 'Transparent content negotiation for the request results in a circular reference.', | ||||
|         type: 'HTTP', | ||||
|       }, | ||||
|       { | ||||
|         code: 507, | ||||
|         name: 'Insufficient Storage', | ||||
|         description: 'The server is unable to store the representation needed to complete the request.', | ||||
|         type: 'HTTP', | ||||
|       }, | ||||
|       { | ||||
|         code: 508, | ||||
|         name: 'Loop Detected', | ||||
|         description: 'The server detected an infinite loop while processing the request.', | ||||
|         type: 'HTTP', | ||||
|       }, | ||||
|       { | ||||
|         code: 510, | ||||
|         name: 'Not Extended', | ||||
|         description: 'Further extensions to the request are required for the server to fulfill it.', | ||||
|         type: 'HTTP', | ||||
|       }, | ||||
|       { | ||||
|         code: 511, | ||||
|         name: 'Network Authentication Required', | ||||
|         description: 'The client needs to authenticate to gain network access.', | ||||
|         type: 'HTTP', | ||||
|       }, | ||||
|     ], | ||||
|   }, | ||||
| ]; | ||||
							
								
								
									
										11
									
								
								src/tools/http-status-codes/http-status-codes.e2e.spec.ts
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										11
									
								
								src/tools/http-status-codes/http-status-codes.e2e.spec.ts
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,11 @@ | ||||
| import { test, expect } from '@playwright/test'; | ||||
|  | ||||
| test.describe('Tool - Http status codes', () => { | ||||
|   test.beforeEach(async ({ page }) => { | ||||
|     await page.goto('/http-status-codes'); | ||||
|   }); | ||||
|  | ||||
|   test('Has correct title', async ({ page }) => { | ||||
|     await expect(page).toHaveTitle('HTTP status codes - IT Tools'); | ||||
|   }); | ||||
| }); | ||||
							
								
								
									
										60
									
								
								src/tools/http-status-codes/http-status-codes.vue
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										60
									
								
								src/tools/http-status-codes/http-status-codes.vue
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,60 @@ | ||||
| <template> | ||||
|   <div> | ||||
|     <n-form-item :show-label="false"> | ||||
|       <n-input | ||||
|         v-model:value="search" | ||||
|         placeholder="Search http status..." | ||||
|         size="large" | ||||
|         autofocus | ||||
|         mb-10 | ||||
|         autocomplete="off" | ||||
|         autocorrect="off" | ||||
|         autocapitalize="off" | ||||
|       > | ||||
|         <template #prefix> | ||||
|           <n-icon :component="SearchRound" /> | ||||
|         </template> | ||||
|       </n-input> | ||||
|     </n-form-item> | ||||
|  | ||||
|     <div v-for="{ codes, category } of codesByCategoryFiltered" :key="category" mb-8> | ||||
|       <n-h2> {{ category }} </n-h2> | ||||
|  | ||||
|       <n-space vertical :size="20"> | ||||
|         <n-card v-for="{ code, description, name, type } of codes" :key="code"> | ||||
|           <n-space align="center"> | ||||
|             <n-text strong text-lg> {{ code }} {{ name }} </n-text> | ||||
|           </n-space> | ||||
|           <n-text depth="3">{{ description }} {{ type !== 'HTTP' ? `For ${type}.` : '' }}</n-text> | ||||
|         </n-card> | ||||
|       </n-space> | ||||
|     </div> | ||||
|   </div> | ||||
| </template> | ||||
|  | ||||
| <script setup lang="ts"> | ||||
| import { useFuzzySearch } from '@/composable/fuzzySearch'; | ||||
| import _ from 'lodash'; | ||||
| import { SearchRound } from '@vicons/material'; | ||||
| import { codesByCategories } from './http-status-codes.constants'; | ||||
|  | ||||
| const search = ref(''); | ||||
|  | ||||
| const { searchResult } = useFuzzySearch({ | ||||
|   search, | ||||
|   data: codesByCategories.flatMap(({ codes, category }) => codes.map((code) => ({ ...code, category }))), | ||||
|   options: { | ||||
|     keys: [{ name: 'code', weight: 3 }, { name: 'name', weight: 2 }, 'description', 'category'], | ||||
|   }, | ||||
| }); | ||||
|  | ||||
| const codesByCategoryFiltered = computed(() => { | ||||
|   if (!search.value) { | ||||
|     return codesByCategories; | ||||
|   } | ||||
|  | ||||
|   return [{ category: 'Search results', codes: searchResult.value }]; | ||||
| }); | ||||
| </script> | ||||
|  | ||||
| <style lang="less" scoped></style> | ||||
							
								
								
									
										19
									
								
								src/tools/http-status-codes/index.ts
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										19
									
								
								src/tools/http-status-codes/index.ts
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,19 @@ | ||||
| import { HttpRound } from '@vicons/material'; | ||||
| import { defineTool } from '../tool'; | ||||
|  | ||||
| import { codesByCategories } from './http-status-codes.constants'; | ||||
|  | ||||
| export const tool = defineTool({ | ||||
|   name: 'HTTP status codes', | ||||
|   path: '/http-status-codes', | ||||
|   description: 'The list of all HTTP status codes their name and their meaning.', | ||||
|   keywords: [ | ||||
|     'http', | ||||
|     'status', | ||||
|     'codes', | ||||
|     ...codesByCategories.flatMap(({ codes }) => codes.flatMap(({ code, name }) => [String(code), name])), | ||||
|   ], | ||||
|   component: () => import('./http-status-codes.vue'), | ||||
|   icon: HttpRound, | ||||
|   createdAt: new Date('2023-04-13'), | ||||
| }); | ||||
| @@ -1,6 +1,8 @@ | ||||
| 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 argon2HashGenerator } from './argon2-hash-generator'; | ||||
| import { tool as httpStatusCodes } from './http-status-codes'; | ||||
| import { tool as yamlToJson } from './yaml-to-json-converter'; | ||||
| import { tool as jsonToYaml } from './json-to-yaml-converter'; | ||||
| import { tool as ipv6UlaGenerator } from './ipv6-ula-generator'; | ||||
| @@ -55,7 +57,17 @@ import { tool as macAddressLookup } from './mac-address-lookup'; | ||||
| export const toolsByCategory: ToolCategory[] = [ | ||||
|   { | ||||
|     name: 'Crypto', | ||||
|     components: [tokenGenerator, hashText, bcrypt, uuidGenerator, cypher, bip39, hmacGenerator, rsaKeyPairGenerator], | ||||
|     components: [ | ||||
|       tokenGenerator, | ||||
|       hashText, | ||||
|       bcrypt, | ||||
|       argon2HashGenerator, | ||||
|       uuidGenerator, | ||||
|       cypher, | ||||
|       bip39, | ||||
|       hmacGenerator, | ||||
|       rsaKeyPairGenerator, | ||||
|     ], | ||||
|   }, | ||||
|   { | ||||
|     name: 'Converter', | ||||
| @@ -88,6 +100,7 @@ export const toolsByCategory: ToolCategory[] = [ | ||||
|       slugifyString, | ||||
|       htmlWysiwygEditor, | ||||
|       userAgentParser, | ||||
|       httpStatusCodes, | ||||
|     ], | ||||
|   }, | ||||
|   { | ||||
|   | ||||
| @@ -1,11 +1,10 @@ | ||||
| <template> | ||||
|   <div> | ||||
|     <n-card> | ||||
|   <n-space vertical :size="20"> | ||||
|     <n-space align="center" justify="center"> | ||||
|       Quantity : | ||||
|         <n-input-number v-model:value="count" :min="1" :max="50" /> | ||||
|       <n-input-number v-model:value="count" :min="1" :max="50" placeholder="UUID quantity" /> | ||||
|     </n-space> | ||||
|       <br /> | ||||
|  | ||||
|     <n-input | ||||
|       style="text-align: center; font-family: monospace" | ||||
|       :value="uuids" | ||||
| @@ -18,23 +17,20 @@ | ||||
|       autocapitalize="off" | ||||
|       spellcheck="false" | ||||
|     /> | ||||
|       <br /> | ||||
|       <br /> | ||||
|  | ||||
|     <n-space justify="center"> | ||||
|       <n-button secondary autofocus @click="copy"> Copy </n-button> | ||||
|       <n-button secondary @click="refreshUUIDs"> Refresh </n-button> | ||||
|     </n-space> | ||||
|     </n-card> | ||||
|   </div> | ||||
|   </n-space> | ||||
| </template> | ||||
|  | ||||
| <script setup lang="ts"> | ||||
| import { useCopy } from '@/composable/copy'; | ||||
| import { v4 as generateUUID } from 'uuid'; | ||||
| import { useQueryParam } from '@/composable/queryParams'; | ||||
| import { computedRefreshable } from '@/composable/computedRefreshable'; | ||||
|  | ||||
| const count = useQueryParam({ defaultValue: 1, name: 'count' }); | ||||
| const count = useStorage('uuid-generator:quantity', 1); | ||||
|  | ||||
| const [uuids, refreshUUIDs] = computedRefreshable(() => | ||||
|   Array.from({ length: count.value }, () => generateUUID()).join('\n'), | ||||
|   | ||||
		Reference in New Issue
	
	Block a user