Merge d087bd988a into 318fb6efb9
				
					
				
			This commit is contained in:
		
						commit
						687fc46ffd
					
				
							
								
								
									
										7
									
								
								components.d.ts
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										7
									
								
								components.d.ts
									
									
									
									
										vendored
									
									
								
							| @ -132,19 +132,15 @@ declare module '@vue/runtime-core' { | ||||
|     NCode: typeof import('naive-ui')['NCode'] | ||||
|     NCollapseTransition: typeof import('naive-ui')['NCollapseTransition'] | ||||
|     NConfigProvider: typeof import('naive-ui')['NConfigProvider'] | ||||
|     NDivider: typeof import('naive-ui')['NDivider'] | ||||
|     NEllipsis: typeof import('naive-ui')['NEllipsis'] | ||||
|     NForm: typeof import('naive-ui')['NForm'] | ||||
|     NFormItem: typeof import('naive-ui')['NFormItem'] | ||||
|     NH1: typeof import('naive-ui')['NH1'] | ||||
|     NH3: typeof import('naive-ui')['NH3'] | ||||
|     NIcon: typeof import('naive-ui')['NIcon'] | ||||
|     NInputNumber: typeof import('naive-ui')['NInputNumber'] | ||||
|     NLayout: typeof import('naive-ui')['NLayout'] | ||||
|     NLayoutSider: typeof import('naive-ui')['NLayoutSider'] | ||||
|     NMenu: typeof import('naive-ui')['NMenu'] | ||||
|     NScrollbar: typeof import('naive-ui')['NScrollbar'] | ||||
|     NSlider: typeof import('naive-ui')['NSlider'] | ||||
|     NSwitch: typeof import('naive-ui')['NSwitch'] | ||||
|     NumeronymGenerator: typeof import('./src/tools/numeronym-generator/numeronym-generator.vue')['default'] | ||||
|     OtpCodeGeneratorAndValidator: typeof import('./src/tools/otp-code-generator-and-validator/otp-code-generator-and-validator.vue')['default'] | ||||
|     PasswordStrengthAnalyser: typeof import('./src/tools/password-strength-analyser/password-strength-analyser.vue')['default'] | ||||
| @ -152,6 +148,7 @@ declare module '@vue/runtime-core' { | ||||
|     PdfSignatureDetails: typeof import('./src/tools/pdf-signature-checker/components/pdf-signature-details.vue')['default'] | ||||
|     PercentageCalculator: typeof import('./src/tools/percentage-calculator/percentage-calculator.vue')['default'] | ||||
|     PhoneParserAndFormatter: typeof import('./src/tools/phone-parser-and-formatter/phone-parser-and-formatter.vue')['default'] | ||||
|     PunycodeConverter: typeof import('./src/tools/punycode-converter/punycode-converter.vue')['default'] | ||||
|     QrCodeGenerator: typeof import('./src/tools/qr-code-generator/qr-code-generator.vue')['default'] | ||||
|     RandomPortGenerator: typeof import('./src/tools/random-port-generator/random-port-generator.vue')['default'] | ||||
|     ResultRow: typeof import('./src/tools/ipv4-range-expander/result-row.vue')['default'] | ||||
|  | ||||
| @ -42,6 +42,7 @@ | ||||
|     "@tiptap/starter-kit": "2.1.6", | ||||
|     "@tiptap/vue-3": "2.0.3", | ||||
|     "@types/figlet": "^1.5.8", | ||||
|     "@types/punycode": "^2.1.4", | ||||
|     "@vicons/material": "^0.12.0", | ||||
|     "@vicons/tabler": "^0.12.0", | ||||
|     "@vueuse/core": "^10.3.0", | ||||
| @ -81,6 +82,7 @@ | ||||
|     "pdf-signature-reader": "^1.4.2", | ||||
|     "pinia": "^2.0.34", | ||||
|     "plausible-tracker": "^0.3.8", | ||||
|     "punycode": "^2.3.1", | ||||
|     "qrcode": "^1.5.1", | ||||
|     "sql-formatter": "^13.0.0", | ||||
|     "ua-parser-js": "^1.0.35", | ||||
|  | ||||
							
								
								
									
										36
									
								
								pnpm-lock.yaml
									
									
									
										generated
									
									
									
								
							
							
						
						
									
										36
									
								
								pnpm-lock.yaml
									
									
									
										generated
									
									
									
								
							| @ -26,6 +26,9 @@ dependencies: | ||||
|   '@types/figlet': | ||||
|     specifier: ^1.5.8 | ||||
|     version: 1.5.8 | ||||
|   '@types/punycode': | ||||
|     specifier: ^2.1.4 | ||||
|     version: 2.1.4 | ||||
|   '@vicons/material': | ||||
|     specifier: ^0.12.0 | ||||
|     version: 0.12.0 | ||||
| @ -143,6 +146,9 @@ dependencies: | ||||
|   plausible-tracker: | ||||
|     specifier: ^0.3.8 | ||||
|     version: 0.3.8 | ||||
|   punycode: | ||||
|     specifier: ^2.3.1 | ||||
|     version: 2.3.1 | ||||
|   qrcode: | ||||
|     specifier: ^1.5.1 | ||||
|     version: 1.5.1 | ||||
| @ -3032,6 +3038,10 @@ packages: | ||||
|     resolution: {integrity: sha512-ZREFYlpUmPQJ0esjxoG1fMvB2HNaD3z+mjqdSosZvd3RalncI9NEur73P8ZJz4YQdL64CmV1w0RuqoRUlhQRBw==} | ||||
|     dev: true | ||||
| 
 | ||||
|   /@types/punycode@2.1.4: | ||||
|     resolution: {integrity: sha512-trzh6NzBnq8yw5e35f8xe8VTYjqM3NE7bohBtvDVf/dtUer3zYTLK1Ka3DG3p7bdtoaOHZucma6FfVKlQ134pQ==} | ||||
|     dev: false | ||||
| 
 | ||||
|   /@types/qrcode@1.5.0: | ||||
|     resolution: {integrity: sha512-x5ilHXRxUPIMfjtM+1vf/GPTRWZ81nqscursm5gMznJeK9M0YnZ1c3bEvRLQ0zSSgedLx1J6MGL231ObQGGhaA==} | ||||
|     dependencies: | ||||
| @ -3360,7 +3370,7 @@ packages: | ||||
|     dependencies: | ||||
|       '@unhead/dom': 0.5.1 | ||||
|       '@unhead/schema': 0.5.1 | ||||
|       '@vueuse/shared': 10.11.1(vue@3.3.4) | ||||
|       '@vueuse/shared': 11.0.3(vue@3.3.4) | ||||
|       unhead: 0.5.1 | ||||
|       vue: 3.3.4 | ||||
|     transitivePeerDependencies: | ||||
| @ -3993,19 +4003,19 @@ packages: | ||||
|       - vue | ||||
|     dev: false | ||||
| 
 | ||||
|   /@vueuse/shared@10.11.1(vue@3.3.4): | ||||
|     resolution: {integrity: sha512-LHpC8711VFZlDaYUXEBbFBCQ7GS3dVU9mjOhhMhXP6txTV4EhYQg/KGnQuvt/sPAtoUKq7VVUnL6mVtFoL42sA==} | ||||
|   /@vueuse/shared@10.3.0(vue@3.3.4): | ||||
|     resolution: {integrity: sha512-kGqCTEuFPMK4+fNWy6dUOiYmxGcUbtznMwBZLC1PubidF4VZY05B+Oht7Jh7/6x4VOWGpvu3R37WHi81cKpiqg==} | ||||
|     dependencies: | ||||
|       vue-demi: 0.14.10(vue@3.3.4) | ||||
|       vue-demi: 0.14.5(vue@3.3.4) | ||||
|     transitivePeerDependencies: | ||||
|       - '@vue/composition-api' | ||||
|       - vue | ||||
|     dev: false | ||||
| 
 | ||||
|   /@vueuse/shared@10.3.0(vue@3.3.4): | ||||
|     resolution: {integrity: sha512-kGqCTEuFPMK4+fNWy6dUOiYmxGcUbtznMwBZLC1PubidF4VZY05B+Oht7Jh7/6x4VOWGpvu3R37WHi81cKpiqg==} | ||||
|   /@vueuse/shared@11.0.3(vue@3.3.4): | ||||
|     resolution: {integrity: sha512-0rY2m6HS5t27n/Vp5cTDsKTlNnimCqsbh/fmT2LgE+aaU42EMfXo8+bNX91W9I7DDmxfuACXMmrd7d79JxkqWA==} | ||||
|     dependencies: | ||||
|       vue-demi: 0.14.5(vue@3.3.4) | ||||
|       vue-demi: 0.14.10(vue@3.3.4) | ||||
|     transitivePeerDependencies: | ||||
|       - '@vue/composition-api' | ||||
|       - vue | ||||
| @ -7682,15 +7692,9 @@ packages: | ||||
|     resolution: {integrity: sha512-E/ZsdU4HLs/68gYzgGTkMicWTLPdAftJLfJFlLUAAKZGkStNU72sZjT66SnMDVOfOWY/YAoiD7Jxa9iHvngcag==} | ||||
|     dev: true | ||||
| 
 | ||||
|   /punycode@2.3.0: | ||||
|     resolution: {integrity: sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA==} | ||||
|     engines: {node: '>=6'} | ||||
|     dev: true | ||||
| 
 | ||||
|   /punycode@2.3.1: | ||||
|     resolution: {integrity: sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==} | ||||
|     engines: {node: '>=6'} | ||||
|     dev: true | ||||
| 
 | ||||
|   /qrcode@1.5.1: | ||||
|     resolution: {integrity: sha512-nS8NJ1Z3md8uTjKtP+SGGhfqmTCs5flU/xR623oI0JX+Wepz9R8UrRVCTBTJm3qGw3rH6jJ6MUHjkDx15cxSSg==} | ||||
| @ -8480,7 +8484,7 @@ packages: | ||||
|     engines: {node: '>=6'} | ||||
|     dependencies: | ||||
|       psl: 1.9.0 | ||||
|       punycode: 2.3.0 | ||||
|       punycode: 2.3.1 | ||||
|       universalify: 0.2.0 | ||||
|       url-parse: 1.5.10 | ||||
|     dev: true | ||||
| @ -8495,7 +8499,7 @@ packages: | ||||
|     resolution: {integrity: sha512-2lv/66T7e5yNyhAAC4NaKe5nVavzuGJQVVtRYLyQ2OI8tsJ61PMLlelehb0wi2Hx6+hT/OJUWZcw8MjlSRnxvw==} | ||||
|     engines: {node: '>=14'} | ||||
|     dependencies: | ||||
|       punycode: 2.3.0 | ||||
|       punycode: 2.3.1 | ||||
|     dev: true | ||||
| 
 | ||||
|   /treemate@0.3.11: | ||||
| @ -8935,7 +8939,7 @@ packages: | ||||
|   /uri-js@4.4.1: | ||||
|     resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==} | ||||
|     dependencies: | ||||
|       punycode: 2.3.0 | ||||
|       punycode: 2.3.1 | ||||
|     dev: true | ||||
| 
 | ||||
|   /url-parse@1.5.10: | ||||
|  | ||||
| @ -2,6 +2,7 @@ import { tool as base64FileConverter } from './base64-file-converter'; | ||||
| import { tool as base64StringConverter } from './base64-string-converter'; | ||||
| import { tool as basicAuthGenerator } from './basic-auth-generator'; | ||||
| import { tool as emailNormalizer } from './email-normalizer'; | ||||
| import { tool as punycodeConverter } from './punycode-converter'; | ||||
| 
 | ||||
| import { tool as asciiTextDrawer } from './ascii-text-drawer'; | ||||
| 
 | ||||
| @ -158,7 +159,16 @@ export const toolsByCategory: ToolCategory[] = [ | ||||
|   }, | ||||
|   { | ||||
|     name: 'Network', | ||||
|     components: [ipv4SubnetCalculator, ipv4AddressConverter, ipv4RangeExpander, macAddressLookup, macAddressGenerator, ipv6UlaGenerator], | ||||
|     components: [ | ||||
|       ipv4SubnetCalculator, | ||||
|       ipv4AddressConverter, | ||||
|       // ipv6AddressConverter,
 | ||||
|       ipv4RangeExpander, | ||||
|       macAddressLookup, | ||||
|       macAddressGenerator, | ||||
|       ipv6UlaGenerator, | ||||
|       punycodeConverter, | ||||
|     ], | ||||
|   }, | ||||
|   { | ||||
|     name: 'Math', | ||||
|  | ||||
							
								
								
									
										12
									
								
								src/tools/punycode-converter/index.ts
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										12
									
								
								src/tools/punycode-converter/index.ts
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,12 @@ | ||||
| import { World } from '@vicons/tabler'; | ||||
| import { defineTool } from '../tool'; | ||||
| 
 | ||||
| export const tool = defineTool({ | ||||
|   name: 'Punycode Converter', | ||||
|   path: '/punycode-converter', | ||||
|   description: 'Convert international unicode domain names or emails from/to ASCII Punycode version', | ||||
|   keywords: ['punycode', 'converter', 'rfc3492', 'bootstring', 'domain', 'dns'], | ||||
|   component: () => import('./punycode-converter.vue'), | ||||
|   icon: World, | ||||
|   createdAt: new Date('2024-08-15'), | ||||
| }); | ||||
							
								
								
									
										66
									
								
								src/tools/punycode-converter/punycode-converter.vue
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										66
									
								
								src/tools/punycode-converter/punycode-converter.vue
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,66 @@ | ||||
| <script setup lang="ts"> | ||||
| import { toASCII, toUnicode } from 'punycode/'; | ||||
| import TextareaCopyable from '@/components/TextareaCopyable.vue'; | ||||
| 
 | ||||
| const punycodeInput = ref(''); | ||||
| const intlOutput = computed( | ||||
|   () => { | ||||
|     try { | ||||
|       return toUnicode(punycodeInput.value?.trim()); | ||||
|     } | ||||
|     catch (e: any) { | ||||
|       return e.toString(); | ||||
|     } | ||||
|   }, | ||||
| ); | ||||
| 
 | ||||
| const intlInput = ref(''); | ||||
| const punycodeOutput = computed( | ||||
|   () => { | ||||
|     try { | ||||
|       return toASCII(intlInput.value?.trim()); | ||||
|     } | ||||
|     catch (e: any) { | ||||
|       return e.toString(); | ||||
|     } | ||||
|   }, | ||||
| ); | ||||
| </script> | ||||
| 
 | ||||
| <template> | ||||
|   <div max-w-600> | ||||
|     <c-card title="Punycode to International"> | ||||
|       <c-input-text | ||||
|         v-model:value="punycodeInput" | ||||
|         placeholder="Put your punycode domain name or email to decode..." | ||||
|         label="Punycode Domain name/Email" | ||||
|         raw-text | ||||
|       /> | ||||
| 
 | ||||
|       <n-divider /> | ||||
| 
 | ||||
|       <TextareaCopyable | ||||
|         label="Decoded Domain name/Email" | ||||
|         :value="intlOutput" | ||||
|         readonly | ||||
|       /> | ||||
|     </c-card> | ||||
| 
 | ||||
|     <c-card title="International to Punycode" mt-5> | ||||
|       <c-input-text | ||||
|         v-model:value="intlInput" | ||||
|         placeholder="Put your international domain or email name here..." | ||||
|         label="Domain name or email to encode" | ||||
|         raw-text | ||||
|       /> | ||||
| 
 | ||||
|       <n-divider /> | ||||
| 
 | ||||
|       <TextareaCopyable | ||||
|         label="Punycode Domain name/Email" | ||||
|         :value="punycodeOutput" | ||||
|         readonly | ||||
|       /> | ||||
|     </c-card> | ||||
|   </div> | ||||
| </template> | ||||
		Loading…
	
		Reference in New Issue
	
	Block a user