mirror of
				https://github.com/CorentinTh/it-tools.git
				synced 2025-10-31 03:53:52 +00:00 
			
		
		
		
	Compare commits
	
		
			24 Commits
		
	
	
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
|  | af0b02d3a8 | ||
|  | a46d125c19 | ||
|  | 6becdbb423 | ||
|  | 5ce1262fb4 | ||
|  | d591a73ce7 | ||
|  | a88e4a9289 | ||
|  | d4ea393c1d | ||
|  | 048bc4ae94 | ||
|  | 3aefe83a31 | ||
|  | c3b6132c26 | ||
|  | 69f564e6fe | ||
|  | e9cc499ed8 | ||
|  | 383d975695 | ||
|  | 347144bfe8 | ||
|  | 4c4da16970 | ||
|  | 9450537bae | ||
|  | 1d7032d026 | ||
|  | d2c767f092 | ||
|  | 0cc7af6b1d | ||
|  | 34bc6a57a7 | ||
|  | d356b1488f | ||
|  | a60f64f744 | ||
|  | b89db3c8d0 | ||
|  | 3cfc5f8bc2 | 
							
								
								
									
										25
									
								
								.github/PULL_REQUEST_TEMPLATE/pull_request_template.md
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										25
									
								
								.github/PULL_REQUEST_TEMPLATE/pull_request_template.md
									
									
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,25 @@ | ||||
| <!-- Thank you for contributing! --> | ||||
|  | ||||
| ### Description | ||||
|  | ||||
| <!-- Please insert your description here and provide especially info about the "what" this PR is solving --> | ||||
|  | ||||
| ### Additional context | ||||
|  | ||||
| <!-- e.g. is there anything you'd like reviewers to focus on? --> | ||||
|  | ||||
| --- | ||||
|  | ||||
| ### What is the purpose of this pull request? <!-- (put an "X" next to an item) --> | ||||
|  | ||||
| - [ ] Bug fix | ||||
| - [ ] New Feature | ||||
| - [ ] Documentation update | ||||
| - [ ] Other | ||||
|  | ||||
| ### Before submitting the PR, please make sure you do the following | ||||
|  | ||||
| - [ ] Submit the PR against the `dev` branch. | ||||
| - [ ] Check that there isn't already a PR that solves the problem the same way to avoid creating a duplicate. | ||||
| - [ ] Provide a description in this PR that addresses **what** the PR is solving, or reference the issue that it solves (e.g. `fixes #123`). | ||||
| - [ ] Ideally, include relevant tests that fail without this PR but pass with it. | ||||
							
								
								
									
										2
									
								
								.github/workflows/ci.yml
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										2
									
								
								.github/workflows/ci.yml
									
									
									
									
										vendored
									
									
								
							| @@ -1,6 +1,6 @@ | ||||
| name: ci | ||||
|  | ||||
| on: push | ||||
| on: [push, pull_request] | ||||
|  | ||||
| jobs: | ||||
|   ci: | ||||
|   | ||||
							
								
								
									
										2
									
								
								.vscode/extensions.json
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										2
									
								
								.vscode/extensions.json
									
									
									
									
										vendored
									
									
								
							| @@ -1,3 +1,3 @@ | ||||
| { | ||||
|   "recommendations": ["johnsoncodehk.volar", "johnsoncodehk.vscode-typescript-vue-plugin"] | ||||
|   "recommendations": ["Vue.volar", "Vue.vscode-typescript-vue-plugin", "dbaeumer.vscode-eslint"] | ||||
| } | ||||
|   | ||||
							
								
								
									
										51
									
								
								CHANGELOG.md
									
									
									
									
									
								
							
							
						
						
									
										51
									
								
								CHANGELOG.md
									
									
									
									
									
								
							| @@ -2,6 +2,57 @@ | ||||
|  | ||||
| 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.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) | ||||
|  | ||||
|  | ||||
|   | ||||
| @@ -68,6 +68,12 @@ Coded with ❤️ by [Corentin Thomasset](//corentin-thomasset.fr). | ||||
|  | ||||
| This project is continuously deployed using [vercel.com](https://vercel.com). | ||||
|  | ||||
|  | ||||
|  | ||||
| <a href="https://www.producthunt.com/posts/it-tools?utm_source=badge-featured&utm_medium=badge&utm_souce=badge-it-tools" target="_blank"><img src="https://api.producthunt.com/widgets/embed-image/v1/featured.svg?post_id=345793&theme=light" alt="IT Tools - Collection of handy online tools for devs, with great UX | Product Hunt" style="width: 250px; height: 54px;" width="250" height="54" /></a> | ||||
| <a href="https://www.producthunt.com/posts/it-tools?utm_source=badge-top-post-badge&utm_medium=badge&utm_souce=badge-it-tools" target="_blank"><img src="https://api.producthunt.com/widgets/embed-image/v1/top-post-badge.svg?post_id=345793&theme=light&period=daily" alt="IT Tools - Collection of handy online tools for devs, with great UX | Product Hunt" style="width: 250px; height: 54px;" width="250" height="54" /></a> | ||||
|  | ||||
|  | ||||
| ## License | ||||
|  | ||||
| This project is under the [MIT license](LICENSE). | ||||
|   | ||||
							
								
								
									
										26
									
								
								index.html
									
									
									
									
									
								
							
							
						
						
									
										26
									
								
								index.html
									
									
									
									
									
								
							| @@ -4,13 +4,13 @@ | ||||
|     <meta charset="UTF-8" /> | ||||
|     <link rel="icon" href="/favicon.ico" /> | ||||
|     <meta name="viewport" content="width=device-width, initial-scale=1.0" /> | ||||
|     <meta name="description" content="Aggregated set of useful tools that every developer may need once in a while." /> | ||||
|     <title>IT Tools</title> | ||||
|     <meta itemprop="name" content="IT-Tools" /> | ||||
|     <meta name="description" content="Aggregated set of useful tools that every developer may need once in a while." /> | ||||
|     <meta itemprop="description" content="Aggregated set of useful tools that every developer may need once in a while." /> | ||||
|     <title>IT Tools - Handy online tools for developers</title> | ||||
|     <meta itemprop="name" content="IT Tools - Handy online tools for developers" /> | ||||
|     <meta name="description" content="Collection of handy online tools for developers, with great UX. IT Tools is a free and open-source collection of handy online tools for developers & people working in IT." /> | ||||
|     <meta itemprop="description" content="Collection of handy online tools for developers, with great UX. IT Tools is a free and open-source collection of handy online tools for developers & people working in IT." /> | ||||
|     <link rel="author" href="/humans.txt" /> | ||||
|  | ||||
|     <link rel=canonical href="https://it-tools.tech"> | ||||
|      | ||||
|     <link rel="apple-touch-icon" sizes="180x180" href="/apple-touch-icon.png" /> | ||||
|     <link rel="icon" type="image/png" sizes="32x32" href="/favicon-32x32.png" /> | ||||
|     <link rel="icon" type="image/png" sizes="16x16" href="/favicon-16x16.png" /> | ||||
| @@ -18,17 +18,17 @@ | ||||
|     <meta name="msapplication-TileColor" content="#da532c" /> | ||||
|     <meta name="theme-color" content="#ffffff" /> | ||||
|  | ||||
|     <meta property="og:url" content="https://dev.it-tools.tech/" /> | ||||
|     <meta property="og:url" content="https://it-tools.tech/" /> | ||||
|     <meta property="og:type" content="website" /> | ||||
|     <meta property="og:title" content="IT-Tools" /> | ||||
|     <meta property="og:description" content="Aggregated set of useful tools that every developer may need once in a while." /> | ||||
|     <meta property="og:title" content="IT Tools - Handy online tools for developers" /> | ||||
|     <meta property="og:description" content="Collection of handy online tools for developers, with great UX. IT Tools is a free and open-source collection of handy online tools for developers & people working in IT." /> | ||||
|     <meta property="og:image" content="/banner.png" /> | ||||
|  | ||||
|     <meta name="twitter:card" content="summary_large_image" /> | ||||
|     <meta property="twitter:domain" content="dev.it-tools.tech" /> | ||||
|     <meta property="twitter:url" content="https://dev.it-tools.tech/" /> | ||||
|     <meta name="twitter:title" content="IT-Tools" /> | ||||
|     <meta name="twitter:description" content="Aggregated set of useful tools that every developer may need once in a while." /> | ||||
|     <meta property="twitter:domain" content="it-tools.tech" /> | ||||
|     <meta property="twitter:url" content="https://it-tools.tech/" /> | ||||
|     <meta name="twitter:title" content="IT Tools - Handy online tools for developers" /> | ||||
|     <meta name="twitter:description" content="Collection of handy online tools for developers, with great UX. IT Tools is a free and open-source collection of handy online tools for developers & people working in IT." /> | ||||
|     <meta name="twitter:image" content="/banner.png" /> | ||||
|   </head> | ||||
|   <body> | ||||
|   | ||||
							
								
								
									
										138
									
								
								package-lock.json
									
									
									
										generated
									
									
									
								
							
							
						
						
									
										138
									
								
								package-lock.json
									
									
									
										generated
									
									
									
								
							| @@ -1,12 +1,12 @@ | ||||
| { | ||||
|   "name": "it-tools", | ||||
|   "version": "2.3.2", | ||||
|   "version": "2.4.2", | ||||
|   "lockfileVersion": 2, | ||||
|   "requires": true, | ||||
|   "packages": { | ||||
|     "": { | ||||
|       "name": "it-tools", | ||||
|       "version": "2.3.2", | ||||
|       "version": "2.4.2", | ||||
|       "dependencies": { | ||||
|         "@it-tools/bip39": "^0.0.4", | ||||
|         "@vicons/material": "^0.12.0", | ||||
| @@ -20,6 +20,8 @@ | ||||
|         "cronstrue": "^2.2.0", | ||||
|         "crypto-js": "^4.1.1", | ||||
|         "date-fns": "^2.28.0", | ||||
|         "figue": "^1.1.0", | ||||
|         "highlight.js": "^11.5.1", | ||||
|         "lodash": "^4.17.21", | ||||
|         "naive-ui": "^2.28.0", | ||||
|         "pinia": "^2.0.11", | ||||
| @@ -3101,6 +3103,12 @@ | ||||
|         "node": "*" | ||||
|       } | ||||
|     }, | ||||
|     "node_modules/async": { | ||||
|       "version": "3.2.3", | ||||
|       "resolved": "https://registry.npmjs.org/async/-/async-3.2.3.tgz", | ||||
|       "integrity": "sha512-spZRyzKL5l5BZQrr/6m/SqFdBN0q3OCI0f9rjfBzCMBIP4p75P620rR3gTmaksNOhmzgdxcaxdNfMy6anrbM0g==", | ||||
|       "dev": true | ||||
|     }, | ||||
|     "node_modules/async-validator": { | ||||
|       "version": "4.0.7", | ||||
|       "resolved": "https://registry.npmjs.org/async-validator/-/async-validator-4.0.7.tgz", | ||||
| @@ -4459,12 +4467,12 @@ | ||||
|       "dev": true | ||||
|     }, | ||||
|     "node_modules/ejs": { | ||||
|       "version": "3.1.6", | ||||
|       "resolved": "https://registry.npmjs.org/ejs/-/ejs-3.1.6.tgz", | ||||
|       "integrity": "sha512-9lt9Zse4hPucPkoP7FHDF0LQAlGyF9JVpnClFLFH3aSSbxmyoqINRpp/9wePWJTUl4KOQwRL72Iw3InHPDkoGw==", | ||||
|       "version": "3.1.7", | ||||
|       "resolved": "https://registry.npmjs.org/ejs/-/ejs-3.1.7.tgz", | ||||
|       "integrity": "sha512-BIar7R6abbUxDA3bfXrO4DSgwo8I+fB5/1zgujl3HLLjwd6+9iOnrT+t3grn2qbk9vOgBubXOFwX2m9axoFaGw==", | ||||
|       "dev": true, | ||||
|       "dependencies": { | ||||
|         "jake": "^10.6.1" | ||||
|         "jake": "^10.8.5" | ||||
|       }, | ||||
|       "bin": { | ||||
|         "ejs": "bin/cli.js" | ||||
| @@ -5514,6 +5522,17 @@ | ||||
|         "reusify": "^1.0.4" | ||||
|       } | ||||
|     }, | ||||
|     "node_modules/figue": { | ||||
|       "version": "1.1.0", | ||||
|       "resolved": "https://registry.npmjs.org/figue/-/figue-1.1.0.tgz", | ||||
|       "integrity": "sha512-toW/IfEPBr42giaiqRtC4TkEDZA2q3E1GdzvYG7iJzIYK/fMVvzD2aqU3PJRh+QXCGp+uVxud1Zm7rpV7Fmprg==", | ||||
|       "dependencies": { | ||||
|         "lodash": "^4.17.21" | ||||
|       }, | ||||
|       "funding": { | ||||
|         "url": "https://github.com/sponsors/CorentinTh" | ||||
|       } | ||||
|     }, | ||||
|     "node_modules/figures": { | ||||
|       "version": "3.2.0", | ||||
|       "resolved": "https://registry.npmjs.org/figures/-/figures-3.2.0.tgz", | ||||
| @@ -5542,12 +5561,33 @@ | ||||
|       } | ||||
|     }, | ||||
|     "node_modules/filelist": { | ||||
|       "version": "1.0.2", | ||||
|       "resolved": "https://registry.npmjs.org/filelist/-/filelist-1.0.2.tgz", | ||||
|       "integrity": "sha512-z7O0IS8Plc39rTCq6i6iHxk43duYOn8uFJiWSewIq0Bww1RNybVHSCjahmcC87ZqAm4OTvFzlzeGu3XAzG1ctQ==", | ||||
|       "version": "1.0.3", | ||||
|       "resolved": "https://registry.npmjs.org/filelist/-/filelist-1.0.3.tgz", | ||||
|       "integrity": "sha512-LwjCsruLWQULGYKy7TX0OPtrL9kLpojOFKc5VCTxdFTV7w5zbsgqVKfnkKG7Qgjtq50gKfO56hJv88OfcGb70Q==", | ||||
|       "dev": true, | ||||
|       "dependencies": { | ||||
|         "minimatch": "^3.0.4" | ||||
|         "minimatch": "^5.0.1" | ||||
|       } | ||||
|     }, | ||||
|     "node_modules/filelist/node_modules/brace-expansion": { | ||||
|       "version": "2.0.1", | ||||
|       "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", | ||||
|       "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", | ||||
|       "dev": true, | ||||
|       "dependencies": { | ||||
|         "balanced-match": "^1.0.0" | ||||
|       } | ||||
|     }, | ||||
|     "node_modules/filelist/node_modules/minimatch": { | ||||
|       "version": "5.0.1", | ||||
|       "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.0.1.tgz", | ||||
|       "integrity": "sha512-nLDxIFRyhDblz3qMuq+SoRZED4+miJ/G+tdDrjkkkRnjAsBexeGpgjLEQ0blJy7rHhR2b93rhQY4SvyWu9v03g==", | ||||
|       "dev": true, | ||||
|       "dependencies": { | ||||
|         "brace-expansion": "^2.0.1" | ||||
|       }, | ||||
|       "engines": { | ||||
|         "node": ">=10" | ||||
|       } | ||||
|     }, | ||||
|     "node_modules/fill-range": { | ||||
| @@ -6704,12 +6744,12 @@ | ||||
|       } | ||||
|     }, | ||||
|     "node_modules/jake": { | ||||
|       "version": "10.8.4", | ||||
|       "resolved": "https://registry.npmjs.org/jake/-/jake-10.8.4.tgz", | ||||
|       "integrity": "sha512-MtWeTkl1qGsWUtbl/Jsca/8xSoK3x0UmS82sNbjqxxG/de/M/3b1DntdjHgPMC50enlTNwXOCRqPXLLt5cCfZA==", | ||||
|       "version": "10.8.5", | ||||
|       "resolved": "https://registry.npmjs.org/jake/-/jake-10.8.5.tgz", | ||||
|       "integrity": "sha512-sVpxYeuAhWt0OTWITwT98oyV0GsXyMlXCF+3L1SuafBVUIr/uILGRB+NqwkzhgXKvoJpDIpQvqkUALgdmQsQxw==", | ||||
|       "dev": true, | ||||
|       "dependencies": { | ||||
|         "async": "0.9.x", | ||||
|         "async": "^3.2.3", | ||||
|         "chalk": "^4.0.2", | ||||
|         "filelist": "^1.0.1", | ||||
|         "minimatch": "^3.0.4" | ||||
| @@ -6736,12 +6776,6 @@ | ||||
|         "url": "https://github.com/chalk/ansi-styles?sponsor=1" | ||||
|       } | ||||
|     }, | ||||
|     "node_modules/jake/node_modules/async": { | ||||
|       "version": "0.9.2", | ||||
|       "resolved": "https://registry.npmjs.org/async/-/async-0.9.2.tgz", | ||||
|       "integrity": "sha1-rqdNXmHB+JlhO/ZL2mbUx48v0X0=", | ||||
|       "dev": true | ||||
|     }, | ||||
|     "node_modules/jake/node_modules/chalk": { | ||||
|       "version": "4.1.2", | ||||
|       "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", | ||||
| @@ -13541,6 +13575,12 @@ | ||||
|       "integrity": "sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw==", | ||||
|       "dev": true | ||||
|     }, | ||||
|     "async": { | ||||
|       "version": "3.2.3", | ||||
|       "resolved": "https://registry.npmjs.org/async/-/async-3.2.3.tgz", | ||||
|       "integrity": "sha512-spZRyzKL5l5BZQrr/6m/SqFdBN0q3OCI0f9rjfBzCMBIP4p75P620rR3gTmaksNOhmzgdxcaxdNfMy6anrbM0g==", | ||||
|       "dev": true | ||||
|     }, | ||||
|     "async-validator": { | ||||
|       "version": "4.0.7", | ||||
|       "resolved": "https://registry.npmjs.org/async-validator/-/async-validator-4.0.7.tgz", | ||||
| @@ -14605,12 +14645,12 @@ | ||||
|       "dev": true | ||||
|     }, | ||||
|     "ejs": { | ||||
|       "version": "3.1.6", | ||||
|       "resolved": "https://registry.npmjs.org/ejs/-/ejs-3.1.6.tgz", | ||||
|       "integrity": "sha512-9lt9Zse4hPucPkoP7FHDF0LQAlGyF9JVpnClFLFH3aSSbxmyoqINRpp/9wePWJTUl4KOQwRL72Iw3InHPDkoGw==", | ||||
|       "version": "3.1.7", | ||||
|       "resolved": "https://registry.npmjs.org/ejs/-/ejs-3.1.7.tgz", | ||||
|       "integrity": "sha512-BIar7R6abbUxDA3bfXrO4DSgwo8I+fB5/1zgujl3HLLjwd6+9iOnrT+t3grn2qbk9vOgBubXOFwX2m9axoFaGw==", | ||||
|       "dev": true, | ||||
|       "requires": { | ||||
|         "jake": "^10.6.1" | ||||
|         "jake": "^10.8.5" | ||||
|       } | ||||
|     }, | ||||
|     "electron-to-chromium": { | ||||
| @@ -15292,6 +15332,14 @@ | ||||
|         "reusify": "^1.0.4" | ||||
|       } | ||||
|     }, | ||||
|     "figue": { | ||||
|       "version": "1.1.0", | ||||
|       "resolved": "https://registry.npmjs.org/figue/-/figue-1.1.0.tgz", | ||||
|       "integrity": "sha512-toW/IfEPBr42giaiqRtC4TkEDZA2q3E1GdzvYG7iJzIYK/fMVvzD2aqU3PJRh+QXCGp+uVxud1Zm7rpV7Fmprg==", | ||||
|       "requires": { | ||||
|         "lodash": "^4.17.21" | ||||
|       } | ||||
|     }, | ||||
|     "figures": { | ||||
|       "version": "3.2.0", | ||||
|       "resolved": "https://registry.npmjs.org/figures/-/figures-3.2.0.tgz", | ||||
| @@ -15311,12 +15359,32 @@ | ||||
|       } | ||||
|     }, | ||||
|     "filelist": { | ||||
|       "version": "1.0.2", | ||||
|       "resolved": "https://registry.npmjs.org/filelist/-/filelist-1.0.2.tgz", | ||||
|       "integrity": "sha512-z7O0IS8Plc39rTCq6i6iHxk43duYOn8uFJiWSewIq0Bww1RNybVHSCjahmcC87ZqAm4OTvFzlzeGu3XAzG1ctQ==", | ||||
|       "version": "1.0.3", | ||||
|       "resolved": "https://registry.npmjs.org/filelist/-/filelist-1.0.3.tgz", | ||||
|       "integrity": "sha512-LwjCsruLWQULGYKy7TX0OPtrL9kLpojOFKc5VCTxdFTV7w5zbsgqVKfnkKG7Qgjtq50gKfO56hJv88OfcGb70Q==", | ||||
|       "dev": true, | ||||
|       "requires": { | ||||
|         "minimatch": "^3.0.4" | ||||
|         "minimatch": "^5.0.1" | ||||
|       }, | ||||
|       "dependencies": { | ||||
|         "brace-expansion": { | ||||
|           "version": "2.0.1", | ||||
|           "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", | ||||
|           "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", | ||||
|           "dev": true, | ||||
|           "requires": { | ||||
|             "balanced-match": "^1.0.0" | ||||
|           } | ||||
|         }, | ||||
|         "minimatch": { | ||||
|           "version": "5.0.1", | ||||
|           "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.0.1.tgz", | ||||
|           "integrity": "sha512-nLDxIFRyhDblz3qMuq+SoRZED4+miJ/G+tdDrjkkkRnjAsBexeGpgjLEQ0blJy7rHhR2b93rhQY4SvyWu9v03g==", | ||||
|           "dev": true, | ||||
|           "requires": { | ||||
|             "brace-expansion": "^2.0.1" | ||||
|           } | ||||
|         } | ||||
|       } | ||||
|     }, | ||||
|     "fill-range": { | ||||
| @@ -16167,12 +16235,12 @@ | ||||
|       } | ||||
|     }, | ||||
|     "jake": { | ||||
|       "version": "10.8.4", | ||||
|       "resolved": "https://registry.npmjs.org/jake/-/jake-10.8.4.tgz", | ||||
|       "integrity": "sha512-MtWeTkl1qGsWUtbl/Jsca/8xSoK3x0UmS82sNbjqxxG/de/M/3b1DntdjHgPMC50enlTNwXOCRqPXLLt5cCfZA==", | ||||
|       "version": "10.8.5", | ||||
|       "resolved": "https://registry.npmjs.org/jake/-/jake-10.8.5.tgz", | ||||
|       "integrity": "sha512-sVpxYeuAhWt0OTWITwT98oyV0GsXyMlXCF+3L1SuafBVUIr/uILGRB+NqwkzhgXKvoJpDIpQvqkUALgdmQsQxw==", | ||||
|       "dev": true, | ||||
|       "requires": { | ||||
|         "async": "0.9.x", | ||||
|         "async": "^3.2.3", | ||||
|         "chalk": "^4.0.2", | ||||
|         "filelist": "^1.0.1", | ||||
|         "minimatch": "^3.0.4" | ||||
| @@ -16187,12 +16255,6 @@ | ||||
|             "color-convert": "^2.0.1" | ||||
|           } | ||||
|         }, | ||||
|         "async": { | ||||
|           "version": "0.9.2", | ||||
|           "resolved": "https://registry.npmjs.org/async/-/async-0.9.2.tgz", | ||||
|           "integrity": "sha1-rqdNXmHB+JlhO/ZL2mbUx48v0X0=", | ||||
|           "dev": true | ||||
|         }, | ||||
|         "chalk": { | ||||
|           "version": "4.1.2", | ||||
|           "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", | ||||
|   | ||||
| @@ -1,6 +1,6 @@ | ||||
| { | ||||
|   "name": "it-tools", | ||||
|   "version": "2.3.2", | ||||
|   "version": "2.4.2", | ||||
|   "scripts": { | ||||
|     "dev": "vite", | ||||
|     "build": "vue-tsc --noEmit && vite build", | ||||
| @@ -25,6 +25,8 @@ | ||||
|     "cronstrue": "^2.2.0", | ||||
|     "crypto-js": "^4.1.1", | ||||
|     "date-fns": "^2.28.0", | ||||
|     "figue": "^1.1.0", | ||||
|     "highlight.js": "^11.5.1", | ||||
|     "lodash": "^4.17.21", | ||||
|     "naive-ui": "^2.28.0", | ||||
|     "pinia": "^2.0.11", | ||||
|   | ||||
| @@ -16,7 +16,7 @@ | ||||
|  | ||||
| <script setup lang="ts"> | ||||
| import type { ITool } from '@/tools/Tool'; | ||||
| import { toRefs, defineProps } from 'vue'; | ||||
| import { toRefs } from 'vue'; | ||||
|  | ||||
| const props = defineProps<{ tool: ITool & { category: string } }>(); | ||||
| const { tool } = toRefs(props); | ||||
|   | ||||
| @@ -5,6 +5,14 @@ type UseValidationRule<T> = { | ||||
|   message: string; | ||||
| }; | ||||
|  | ||||
| function isFalsyOrHasThrown(cb: () => boolean) { | ||||
|   try { | ||||
|     return !cb(); | ||||
|   } catch (_) { | ||||
|     return true; | ||||
|   } | ||||
| } | ||||
|  | ||||
| export function useValidation<T>({ source, rules }: { source: Ref<T>; rules: UseValidationRule<T>[] }) { | ||||
|   const state = reactive<{ | ||||
|     message: string; | ||||
| @@ -19,7 +27,7 @@ export function useValidation<T>({ source, rules }: { source: Ref<T>; rules: Use | ||||
|     state.status = undefined; | ||||
|  | ||||
|     for (const rule of rules) { | ||||
|       if (!rule.validator(source.value)) { | ||||
|       if (isFalsyOrHasThrown(() => rule.validator(source.value))) { | ||||
|         state.message = rule.message; | ||||
|         state.status = 'error'; | ||||
|       } | ||||
|   | ||||
							
								
								
									
										53
									
								
								src/config.ts
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										53
									
								
								src/config.ts
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,53 @@ | ||||
| import { figue } from 'figue'; | ||||
|  | ||||
| export const config = figue({ | ||||
|   app: { | ||||
|     version: { | ||||
|       doc: 'Application current version', | ||||
|       format: 'string', | ||||
|       default: '0.0.0', | ||||
|       env: 'PACKAGE_VERSION', | ||||
|     }, | ||||
|     lastCommitSha: { | ||||
|       doc: 'Application last commit SHA version', | ||||
|       format: 'string', | ||||
|       default: '', | ||||
|       env: 'VITE_VERCEL_GIT_COMMIT_SHA', | ||||
|     }, | ||||
|     baseUrl: { | ||||
|       doc: 'Application base url', | ||||
|       format: 'string', | ||||
|       default: '/', | ||||
|       env: 'BASE_URL', | ||||
|     }, | ||||
|     env: { | ||||
|       doc: 'Application current env', | ||||
|       format: 'enum', | ||||
|       values: ['production', 'development', 'test'], | ||||
|       default: 'development', | ||||
|       env: 'MODE', | ||||
|     }, | ||||
|   }, | ||||
|   plausible: { | ||||
|     domain: { | ||||
|       doc: 'Plausible current domain', | ||||
|       format: 'string', | ||||
|       default: '', | ||||
|       env: 'VITE_PLAUSIBLE_DOMAIN', | ||||
|     }, | ||||
|     apiHost: { | ||||
|       doc: 'Plausible remote api host', | ||||
|       format: 'string', | ||||
|       default: '', | ||||
|       env: 'VITE_PLAUSIBLE_API_HOST', | ||||
|     }, | ||||
|     trackLocalhost: { | ||||
|       doc: 'Enable or disable localhost tracking by plausible', | ||||
|       format: 'boolean', | ||||
|       default: false, | ||||
|     }, | ||||
|   }, | ||||
| }) | ||||
|   .loadEnv(import.meta.env) | ||||
|   .validate() | ||||
|   .getConfig(); | ||||
| @@ -9,17 +9,18 @@ import { useStyleStore } from '@/stores/style.store'; | ||||
| import HeroGradient from '../assets/hero-gradient.svg?component'; | ||||
| import MenuLayout from '../components/MenuLayout.vue'; | ||||
| import NavbarButtons from '../components/NavbarButtons.vue'; | ||||
| import { config } from '@/config'; | ||||
|  | ||||
| const themeVars = useThemeVars(); | ||||
| const route = useRoute(); | ||||
| const styleStore = useStyleStore(); | ||||
| const version = import.meta.env.PACKAGE_VERSION; | ||||
| const commitSha = import.meta.env.GIT_SHORT_SHA; | ||||
| const version = config.app.version; | ||||
| const commitSha = config.app.lastCommitSha.slice(0, 7); | ||||
|  | ||||
| const makeLabel = (text: string, to: string) => () => h(RouterLink, { to }, { default: () => text }); | ||||
| const makeIcon = (icon: Component) => () => h(NIcon, null, { default: () => h(icon) }); | ||||
|  | ||||
| const m = toolsByCategory.map((category) => ({ | ||||
| const menuOptions = toolsByCategory.map((category) => ({ | ||||
|   label: category.name, | ||||
|   key: category.name, | ||||
|   type: 'group', | ||||
| @@ -53,7 +54,7 @@ const m = toolsByCategory.map((category) => ({ | ||||
|           :value="(route.name as string)" | ||||
|           :collapsed-width="64" | ||||
|           :collapsed-icon-size="22" | ||||
|           :options="m" | ||||
|           :options="menuOptions" | ||||
|           :indent="20" | ||||
|         /> | ||||
|  | ||||
|   | ||||
| @@ -3,7 +3,7 @@ import { toolsWithCategory } from '@/tools'; | ||||
| import ToolCard from '../components/ToolCard.vue'; | ||||
| import { useHead } from '@vueuse/head'; | ||||
|  | ||||
| useHead({ title: 'IT Tools' }); | ||||
| useHead({ title: 'IT Tools - Handy online tools for developers' }); | ||||
| </script> | ||||
|  | ||||
| <template> | ||||
|   | ||||
| @@ -50,9 +50,11 @@ import { | ||||
|   NImage, | ||||
|   NScrollbar, | ||||
|   NGradientText, | ||||
|   NCode, | ||||
| } from 'naive-ui'; | ||||
|  | ||||
| const components = [ | ||||
|   NCode, | ||||
|   NGradientText, | ||||
|   NScrollbar, | ||||
|   NImage, | ||||
|   | ||||
| @@ -1,15 +1,10 @@ | ||||
| import Plausible, { type PlausibleOptions } from 'plausible-tracker'; | ||||
| import { config } from '@/config'; | ||||
| import Plausible from 'plausible-tracker'; | ||||
| import type { App } from 'vue'; | ||||
|  | ||||
| const options: PlausibleOptions = { | ||||
|   domain: import.meta.env.VITE_PLAUSIBLE_DOMAIN, | ||||
|   apiHost: import.meta.env.VITE_PLAUSIBLE_API_HOST, | ||||
|   trackLocalhost: false, | ||||
| }; | ||||
|  | ||||
| export const plausible = { | ||||
|   install: (app: App) => { | ||||
|     const plausible = Plausible(options); | ||||
|     const plausible = Plausible(config.plausible); | ||||
|     plausible.enableAutoPageviews(); | ||||
|  | ||||
|     app.config.globalProperties.$plausible = plausible; | ||||
|   | ||||
| @@ -3,6 +3,7 @@ import { createRouter, createWebHistory } from 'vue-router'; | ||||
| import HomePage from './pages/Home.page.vue'; | ||||
| import NotFound from './pages/404.page.vue'; | ||||
| import { tools } from './tools'; | ||||
| import { config } from './config'; | ||||
|  | ||||
| const toolsRoutes = tools.map(({ path, name, component, ...config }) => ({ | ||||
|   path, | ||||
| @@ -17,7 +18,7 @@ const toolsRedirectRoutes = tools | ||||
|   ); | ||||
|  | ||||
| const router = createRouter({ | ||||
|   history: createWebHistory(import.meta.env.BASE_URL), | ||||
|   history: createWebHistory(config.app.baseUrl), | ||||
|   routes: [ | ||||
|     { | ||||
|       path: '/', | ||||
|   | ||||
| @@ -83,46 +83,54 @@ function onDateInputChanged(value: string) { | ||||
|   } | ||||
| } | ||||
|  | ||||
| const formats = [ | ||||
| type Format = { | ||||
|   name: string; | ||||
|   fromDate: (date: Date) => string; | ||||
|   toDate: (value: string) => Date; | ||||
| }; | ||||
|  | ||||
| const toDate: Format['toDate'] = (date) => new Date(date); | ||||
|  | ||||
| const formats: Format[] = [ | ||||
|   { | ||||
|     name: 'JS locale date string', | ||||
|     fromDate: (date: Date) => date.toString(), | ||||
|     toDate: (date: string) => new Date(date), | ||||
|     fromDate: (date) => date.toString(), | ||||
|     toDate, | ||||
|   }, | ||||
|   { | ||||
|     name: 'ISO 8601', | ||||
|     fromDate: (date: Date) => formatISO(date), | ||||
|     toDate: (date: string) => parseISO(date), | ||||
|     fromDate: formatISO, | ||||
|     toDate: parseISO, | ||||
|   }, | ||||
|   { | ||||
|     name: 'ISO 9075', | ||||
|     fromDate: (date: Date) => formatISO9075(date), | ||||
|     toDate: (date: string) => parseISO(date), | ||||
|     fromDate: formatISO9075, | ||||
|     toDate: parseISO, | ||||
|   }, | ||||
|   { | ||||
|     name: 'RFC 3339', | ||||
|     fromDate: (date: Date) => formatRFC3339(date), | ||||
|     toDate: (date: string) => new Date(date), | ||||
|     fromDate: formatRFC3339, | ||||
|     toDate, | ||||
|   }, | ||||
|   { | ||||
|     name: 'RFC 7231', | ||||
|     fromDate: (date: Date) => formatRFC7231(date), | ||||
|     toDate: (date: string) => new Date(date), | ||||
|     fromDate: formatRFC7231, | ||||
|     toDate, | ||||
|   }, | ||||
|   { | ||||
|     name: 'Timestamp', | ||||
|     fromDate: (date: Date) => String(getTime(date)), | ||||
|     toDate: (ms: string) => parseJSON(+ms), | ||||
|     fromDate: (date) => String(getTime(date)), | ||||
|     toDate: (ms) => parseJSON(+ms), | ||||
|   }, | ||||
|   { | ||||
|     name: 'Unix timestamp', | ||||
|     fromDate: (date: Date) => String(getUnixTime(date)), | ||||
|     toDate: (sec: string) => fromUnixTime(+sec), | ||||
|     fromDate: (date) => String(getUnixTime(date)), | ||||
|     toDate: (sec) => fromUnixTime(+sec), | ||||
|   }, | ||||
|   { | ||||
|     name: 'UTC format', | ||||
|     fromDate: (date: Date) => date.toUTCString(), | ||||
|     toDate: (date: string) => new Date(date), | ||||
|     fromDate: (date) => date.toUTCString(), | ||||
|     toDate, | ||||
|   }, | ||||
| ]; | ||||
| </script> | ||||
|   | ||||
| @@ -4,7 +4,8 @@ import type { ITool } from '../Tool'; | ||||
| export const tool: ITool = { | ||||
|   name: 'Git cheatsheet', | ||||
|   path: '/git-memo', | ||||
|   description: 'Git is a decentralized version management software. With this cheatsheet you will have a quick access to the most common git commands.', | ||||
|   description: | ||||
|     'Git is a decentralized version management software. With this cheatsheet you will have a quick access to the most common git commands.', | ||||
|   keywords: ['git', 'push', 'force', 'pull', 'commit', 'amend', 'rebase', 'merge', 'reset', 'soft', 'hard', 'lease'], | ||||
|   component: () => import('./git-memo.vue'), | ||||
|   icon: BrandGit, | ||||
|   | ||||
| @@ -2,35 +2,22 @@ | ||||
|   <div> | ||||
|     <n-card> | ||||
|       <n-input v-model:value="clearText" type="textarea" placeholder="Your string..." :autosize="{ minRows: 3 }" /> | ||||
|       <br /> | ||||
|       <br /> | ||||
|       <n-select v-model:value="algo" :options="Object.keys(algos).map((label) => ({ label, value: label }))" /> | ||||
|  | ||||
|       <br /> | ||||
|       <n-input | ||||
|         style="text-align: center" | ||||
|         :value="hashedText" | ||||
|         type="textarea" | ||||
|         placeholder="Your string hash" | ||||
|         :autosize="{ minRows: 1 }" | ||||
|         readonly | ||||
|         autocomplete="off" | ||||
|         autocorrect="off" | ||||
|         autocapitalize="off" | ||||
|         spellcheck="false" | ||||
|       /> | ||||
|       <br /> | ||||
|       <br /> | ||||
|       <n-space justify="center"> | ||||
|         <n-button secondary autofocus @click="copy"> Copy </n-button> | ||||
|       </n-space> | ||||
|       <n-divider /> | ||||
|  | ||||
|       <div v-for="algo in algoNames" :key="algo" style="margin: 5px 0"> | ||||
|         <n-input-group> | ||||
|           <n-input-group-label style="flex: 0 0 120px"> {{ algo }} </n-input-group-label> | ||||
|           <input-copyable :value="hashText(algo, clearText)" readonly /> | ||||
|         </n-input-group> | ||||
|       </div> | ||||
|     </n-card> | ||||
|   </div> | ||||
| </template> | ||||
|  | ||||
| <script setup lang="ts"> | ||||
| import { useCopy } from '@/composable/copy'; | ||||
| import { ref, computed } from 'vue'; | ||||
| import InputCopyable from '../../components/InputCopyable.vue'; | ||||
| import { ref } from 'vue'; | ||||
| import { MD5, SHA1, SHA256, SHA224, SHA512, SHA384, SHA3, RIPEMD160 } from 'crypto-js'; | ||||
|  | ||||
| const algos = { | ||||
| @@ -44,11 +31,11 @@ const algos = { | ||||
|   RIPEMD160, | ||||
| } as const; | ||||
|  | ||||
| type AlgoNames = keyof typeof algos; | ||||
| const algoNames = Object.keys(algos) as AlgoNames[]; | ||||
|  | ||||
| const clearText = ref( | ||||
|   'Lorem ipsum dolor sit amet, consectetur adipiscing elit. Lacus metus blandit dolor lacus natoque ad fusce aliquam velit.', | ||||
| ); | ||||
| const algo = ref<keyof typeof algos>('SHA256'); | ||||
| const hashedText = computed(() => algos[algo.value](clearText.value).toString()); | ||||
|  | ||||
| const { copy } = useCopy({ source: hashedText, text: 'Hash copied to the clipboard' }); | ||||
| const hashText = (algo: AlgoNames, value: string) => algos[algo](value).toString(); | ||||
| </script> | ||||
|   | ||||
| @@ -1,6 +1,7 @@ | ||||
| import { LockOpen } from '@vicons/tabler'; | ||||
| import type { ToolCategory } from './Tool'; | ||||
|  | ||||
| import { tool as jsonViewer } from './json-viewer'; | ||||
| import { tool as htmlEntities } from './html-entities'; | ||||
| import { tool as urlParser } from './url-parser'; | ||||
| import { tool as deviceInformation } from './device-information'; | ||||
| @@ -50,7 +51,7 @@ export const toolsByCategory: ToolCategory[] = [ | ||||
|   { | ||||
|     name: 'Development', | ||||
|     icon: LockOpen, | ||||
|     components: [gitMemo, randomPortGenerator, crontabGenerator], | ||||
|     components: [gitMemo, randomPortGenerator, crontabGenerator, jsonViewer], | ||||
|   }, | ||||
|   { | ||||
|     name: 'Text', | ||||
|   | ||||
							
								
								
									
										11
									
								
								src/tools/json-viewer/index.ts
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										11
									
								
								src/tools/json-viewer/index.ts
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,11 @@ | ||||
| import { Braces } from '@vicons/tabler'; | ||||
| import type { ITool } from './../Tool'; | ||||
|  | ||||
| export const tool: ITool = { | ||||
|   name: 'JSON viewer', | ||||
|   path: '/json-viewer', | ||||
|   description: 'Prettify JSON string to a human friendly readable format.', | ||||
|   keywords: ['json', 'viewer', 'prettify', 'format'], | ||||
|   component: () => import('./json-viewer.vue'), | ||||
|   icon: Braces, | ||||
| }; | ||||
							
								
								
									
										66
									
								
								src/tools/json-viewer/json-viewer.vue
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										66
									
								
								src/tools/json-viewer/json-viewer.vue
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,66 @@ | ||||
| <template> | ||||
|   <n-card> | ||||
|     <n-form-item | ||||
|       label="Your raw json:" | ||||
|       :feedback="rawJsonValidation.message" | ||||
|       :validation-status="rawJsonValidation.status" | ||||
|     > | ||||
|       <n-input | ||||
|         v-model:value="rawJson" | ||||
|         class="json-input" | ||||
|         type="textarea" | ||||
|         placeholder="Paste your raw json here..." | ||||
|         autocomplete="off" | ||||
|         autocorrect="off" | ||||
|         autocapitalize="off" | ||||
|         spellcheck="false" | ||||
|       /> | ||||
|     </n-form-item> | ||||
|  | ||||
|     <n-space justify="center"> | ||||
|       <n-button secondary @click="rawJson = ''">Clear</n-button> | ||||
|     </n-space> | ||||
|   </n-card> | ||||
|  | ||||
|   <n-card v-if="cleanJson.length > 0"> | ||||
|     <n-scrollbar :x-scrollable="true"> | ||||
|       <n-config-provider :hljs="hljs"> | ||||
|         <n-code :code="cleanJson" language="json" /> | ||||
|       </n-config-provider> | ||||
|     </n-scrollbar> | ||||
|   </n-card> | ||||
| </template> | ||||
|  | ||||
| <script setup lang="ts"> | ||||
| import { ref, computed } from 'vue'; | ||||
| import hljs from 'highlight.js/lib/core'; | ||||
| import json from 'highlight.js/lib/languages/json'; | ||||
| import { useValidation } from '@/composable/validation'; | ||||
|  | ||||
| hljs.registerLanguage('json', json); | ||||
|  | ||||
| const rawJson = ref(''); | ||||
| const cleanJson = computed(() => { | ||||
|   try { | ||||
|     return JSON.stringify(JSON.parse(rawJson.value), null, 3); | ||||
|   } catch (_) { | ||||
|     return ''; | ||||
|   } | ||||
| }); | ||||
|  | ||||
| const rawJsonValidation = useValidation({ | ||||
|   source: rawJson, | ||||
|   rules: [ | ||||
|     { | ||||
|       validator: (v) => v === '' || JSON.parse(v), | ||||
|       message: 'Invalid json string', | ||||
|     }, | ||||
|   ], | ||||
| }); | ||||
| </script> | ||||
|  | ||||
| <style lang="less" scoped> | ||||
| .json-input ::v-deep(.n-input-wrapper) { | ||||
|   resize: both !important; | ||||
| } | ||||
| </style> | ||||
| @@ -4,7 +4,8 @@ import type { ITool } from './../Tool'; | ||||
| export const tool: ITool = { | ||||
|   name: 'Url parser', | ||||
|   path: '/url-parser', | ||||
|   description: 'Parse an url string to get all the different parts (protocol, origin, params, port, username-password, ...)', | ||||
|   description: | ||||
|     'Parse an url string to get all the different parts (protocol, origin, params, port, username-password, ...)', | ||||
|   keywords: ['url', 'parser', 'protocol', 'origin', 'params', 'port', 'username', 'password', 'href'], | ||||
|   component: () => import('./url-parser.vue'), | ||||
|   icon: Unlink, | ||||
|   | ||||
| @@ -61,6 +61,5 @@ export default defineConfig({ | ||||
|   }, | ||||
|   define: { | ||||
|     'import.meta.env.PACKAGE_VERSION': JSON.stringify(process.env.npm_package_version), | ||||
|     'import.meta.env.GIT_SHORT_SHA': JSON.stringify((process?.env?.VITE_VERCEL_GIT_COMMIT_SHA ?? '').slice(0, 7)), | ||||
|   }, | ||||
| }); | ||||
|   | ||||
		Reference in New Issue
	
	Block a user