Merge 2bb7b10528 into b47d132839
				
					
				
			This commit is contained in:
		
						commit
						9e2c566b9d
					
				
							
								
								
									
										7
									
								
								components.d.ts
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										7
									
								
								components.d.ts
									
									
									
									
										vendored
									
									
								
							| @ -107,8 +107,11 @@ declare module '@vue/runtime-core' { | |||||||
|     Ipv4RangeExpander: typeof import('./src/tools/ipv4-range-expander/ipv4-range-expander.vue')['default'] |     Ipv4RangeExpander: typeof import('./src/tools/ipv4-range-expander/ipv4-range-expander.vue')['default'] | ||||||
|     Ipv4SubnetCalculator: typeof import('./src/tools/ipv4-subnet-calculator/ipv4-subnet-calculator.vue')['default'] |     Ipv4SubnetCalculator: typeof import('./src/tools/ipv4-subnet-calculator/ipv4-subnet-calculator.vue')['default'] | ||||||
|     Ipv6UlaGenerator: typeof import('./src/tools/ipv6-ula-generator/ipv6-ula-generator.vue')['default'] |     Ipv6UlaGenerator: typeof import('./src/tools/ipv6-ula-generator/ipv6-ula-generator.vue')['default'] | ||||||
|  |     JqMemo: typeof import('./src/tools/jq-memo/jq-memo.md')['default'] | ||||||
|  |     JqTester: typeof import('./src/tools/jq-tester/jq-tester.vue')['default'] | ||||||
|     JsonDiff: typeof import('./src/tools/json-diff/json-diff.vue')['default'] |     JsonDiff: typeof import('./src/tools/json-diff/json-diff.vue')['default'] | ||||||
|     JsonMinify: typeof import('./src/tools/json-minify/json-minify.vue')['default'] |     JsonMinify: typeof import('./src/tools/json-minify/json-minify.vue')['default'] | ||||||
|  |     JsonpathMemo: typeof import('./src/tools/jsonpath-memo/jsonpath-memo.md')['default'] | ||||||
|     JsonToCsv: typeof import('./src/tools/json-to-csv/json-to-csv.vue')['default'] |     JsonToCsv: typeof import('./src/tools/json-to-csv/json-to-csv.vue')['default'] | ||||||
|     JsonToToml: typeof import('./src/tools/json-to-toml/json-to-toml.vue')['default'] |     JsonToToml: typeof import('./src/tools/json-to-toml/json-to-toml.vue')['default'] | ||||||
|     JsonToXml: typeof import('./src/tools/json-to-xml/json-to-xml.vue')['default'] |     JsonToXml: typeof import('./src/tools/json-to-xml/json-to-xml.vue')['default'] | ||||||
| @ -141,8 +144,10 @@ declare module '@vue/runtime-core' { | |||||||
|     NLayout: typeof import('naive-ui')['NLayout'] |     NLayout: typeof import('naive-ui')['NLayout'] | ||||||
|     NLayoutSider: typeof import('naive-ui')['NLayoutSider'] |     NLayoutSider: typeof import('naive-ui')['NLayoutSider'] | ||||||
|     NMenu: typeof import('naive-ui')['NMenu'] |     NMenu: typeof import('naive-ui')['NMenu'] | ||||||
|  |     NRadio: typeof import('naive-ui')['NRadio'] | ||||||
|  |     NRadioGroup: typeof import('naive-ui')['NRadioGroup'] | ||||||
|  |     NScrollbar: typeof import('naive-ui')['NScrollbar'] | ||||||
|     NSpace: typeof import('naive-ui')['NSpace'] |     NSpace: typeof import('naive-ui')['NSpace'] | ||||||
|     NTable: typeof import('naive-ui')['NTable'] |  | ||||||
|     NumeronymGenerator: typeof import('./src/tools/numeronym-generator/numeronym-generator.vue')['default'] |     NumeronymGenerator: typeof import('./src/tools/numeronym-generator/numeronym-generator.vue')['default'] | ||||||
|     OtpCodeGeneratorAndValidator: typeof import('./src/tools/otp-code-generator-and-validator/otp-code-generator-and-validator.vue')['default'] |     OtpCodeGeneratorAndValidator: typeof import('./src/tools/otp-code-generator-and-validator/otp-code-generator-and-validator.vue')['default'] | ||||||
|     PasswordStrengthAnalyser: typeof import('./src/tools/password-strength-analyser/password-strength-analyser.vue')['default'] |     PasswordStrengthAnalyser: typeof import('./src/tools/password-strength-analyser/password-strength-analyser.vue')['default'] | ||||||
|  | |||||||
| @ -45,6 +45,7 @@ | |||||||
|     "@tiptap/starter-kit": "2.1.6", |     "@tiptap/starter-kit": "2.1.6", | ||||||
|     "@tiptap/vue-3": "2.0.3", |     "@tiptap/vue-3": "2.0.3", | ||||||
|     "@types/figlet": "^1.5.8", |     "@types/figlet": "^1.5.8", | ||||||
|  |     "@types/jsonpath": "^0.2.4", | ||||||
|     "@types/markdown-it": "^13.0.7", |     "@types/markdown-it": "^13.0.7", | ||||||
|     "@vicons/material": "^0.12.0", |     "@vicons/material": "^0.12.0", | ||||||
|     "@vicons/tabler": "^0.12.0", |     "@vicons/tabler": "^0.12.0", | ||||||
| @ -69,8 +70,10 @@ | |||||||
|     "highlight.js": "^11.7.0", |     "highlight.js": "^11.7.0", | ||||||
|     "iarna-toml-esm": "^3.0.5", |     "iarna-toml-esm": "^3.0.5", | ||||||
|     "ibantools": "^4.3.3", |     "ibantools": "^4.3.3", | ||||||
|  |     "jq-wasm": "^0.0.9", | ||||||
|     "js-base64": "^3.7.6", |     "js-base64": "^3.7.6", | ||||||
|     "json5": "^2.2.3", |     "json5": "^2.2.3", | ||||||
|  |     "jsonpath": "^1.1.1", | ||||||
|     "jwt-decode": "^3.1.2", |     "jwt-decode": "^3.1.2", | ||||||
|     "libphonenumber-js": "^1.10.28", |     "libphonenumber-js": "^1.10.28", | ||||||
|     "lodash": "^4.17.21", |     "lodash": "^4.17.21", | ||||||
|  | |||||||
							
								
								
									
										107
									
								
								pnpm-lock.yaml
									
									
									
										generated
									
									
									
								
							
							
						
						
									
										107
									
								
								pnpm-lock.yaml
									
									
									
										generated
									
									
									
								
							| @ -32,6 +32,9 @@ dependencies: | |||||||
|   '@types/figlet': |   '@types/figlet': | ||||||
|     specifier: ^1.5.8 |     specifier: ^1.5.8 | ||||||
|     version: 1.5.8 |     version: 1.5.8 | ||||||
|  |   '@types/jsonpath': | ||||||
|  |     specifier: ^0.2.4 | ||||||
|  |     version: 0.2.4 | ||||||
|   '@types/markdown-it': |   '@types/markdown-it': | ||||||
|     specifier: ^13.0.7 |     specifier: ^13.0.7 | ||||||
|     version: 13.0.9 |     version: 13.0.9 | ||||||
| @ -104,12 +107,18 @@ dependencies: | |||||||
|   ibantools: |   ibantools: | ||||||
|     specifier: ^4.3.3 |     specifier: ^4.3.3 | ||||||
|     version: 4.3.3 |     version: 4.3.3 | ||||||
|  |   jq-wasm: | ||||||
|  |     specifier: ^0.0.9 | ||||||
|  |     version: 0.0.9 | ||||||
|   js-base64: |   js-base64: | ||||||
|     specifier: ^3.7.6 |     specifier: ^3.7.6 | ||||||
|     version: 3.7.7 |     version: 3.7.7 | ||||||
|   json5: |   json5: | ||||||
|     specifier: ^2.2.3 |     specifier: ^2.2.3 | ||||||
|     version: 2.2.3 |     version: 2.2.3 | ||||||
|  |   jsonpath: | ||||||
|  |     specifier: ^1.1.1 | ||||||
|  |     version: 1.1.1 | ||||||
|   jwt-decode: |   jwt-decode: | ||||||
|     specifier: ^3.1.2 |     specifier: ^3.1.2 | ||||||
|     version: 3.1.2 |     version: 3.1.2 | ||||||
| @ -2666,9 +2675,11 @@ packages: | |||||||
|     dependencies: |     dependencies: | ||||||
|       '@tabler/icons': 3.20.0 |       '@tabler/icons': 3.20.0 | ||||||
|       vue: 3.3.4 |       vue: 3.3.4 | ||||||
|  |     dev: false | ||||||
| 
 | 
 | ||||||
|   /@tabler/icons@3.20.0: |   /@tabler/icons@3.20.0: | ||||||
|     resolution: {integrity: sha512-nXSeUzsCOxX/Of+kdUVQfxL9bG+ck8XCWNf9dGSpE+nhVexRwk/4HiDQDxFDysfT7vfgSut6GXnrZsU5M5dSlA==} |     resolution: {integrity: sha512-nXSeUzsCOxX/Of+kdUVQfxL9bG+ck8XCWNf9dGSpE+nhVexRwk/4HiDQDxFDysfT7vfgSut6GXnrZsU5M5dSlA==} | ||||||
|  |     dev: false | ||||||
| 
 | 
 | ||||||
|   /@tiptap/core@2.1.12(@tiptap/pm@2.1.6): |   /@tiptap/core@2.1.12(@tiptap/pm@2.1.6): | ||||||
|     resolution: {integrity: sha512-ZGc3xrBJA9KY8kln5AYTj8y+GDrKxi7u95xIl2eccrqTY5CQeRu6HRNM1yT4mAjuSaG9jmazyjGRlQuhyxCKxQ==} |     resolution: {integrity: sha512-ZGc3xrBJA9KY8kln5AYTj8y+GDrKxi7u95xIl2eccrqTY5CQeRu6HRNM1yT4mAjuSaG9jmazyjGRlQuhyxCKxQ==} | ||||||
| @ -2993,6 +3004,10 @@ packages: | |||||||
|       '@types/node': 18.15.11 |       '@types/node': 18.15.11 | ||||||
|     dev: true |     dev: true | ||||||
| 
 | 
 | ||||||
|  |   /@types/jsonpath@0.2.4: | ||||||
|  |     resolution: {integrity: sha512-K3hxB8Blw0qgW6ExKgMbXQv2UPZBoE2GqLpVY+yr7nMD2Pq86lsuIzyAaiQ7eMqFL5B6di6pxSkogLJEyEHoGA==} | ||||||
|  |     dev: false | ||||||
|  | 
 | ||||||
|   /@types/katex@0.16.5: |   /@types/katex@0.16.5: | ||||||
|     resolution: {integrity: sha512-DD2Y3xMlTQvAnN6d8803xdgnOeYZ+HwMglb7/9YCf49J9RkJL53azf9qKa40MkEYhqVwxZ1GS2+VlShnz4Z1Bw==} |     resolution: {integrity: sha512-DD2Y3xMlTQvAnN6d8803xdgnOeYZ+HwMglb7/9YCf49J9RkJL53azf9qKa40MkEYhqVwxZ1GS2+VlShnz4Z1Bw==} | ||||||
|     dev: false |     dev: false | ||||||
| @ -3412,7 +3427,7 @@ packages: | |||||||
|     dependencies: |     dependencies: | ||||||
|       '@unhead/dom': 0.5.1 |       '@unhead/dom': 0.5.1 | ||||||
|       '@unhead/schema': 0.5.1 |       '@unhead/schema': 0.5.1 | ||||||
|       '@vueuse/shared': 11.0.3(vue@3.3.4) |       '@vueuse/shared': 11.1.0(vue@3.3.4) | ||||||
|       unhead: 0.5.1 |       unhead: 0.5.1 | ||||||
|       vue: 3.3.4 |       vue: 3.3.4 | ||||||
|     transitivePeerDependencies: |     transitivePeerDependencies: | ||||||
| @ -4054,8 +4069,8 @@ packages: | |||||||
|       - vue |       - vue | ||||||
|     dev: false |     dev: false | ||||||
| 
 | 
 | ||||||
|   /@vueuse/shared@11.0.3(vue@3.3.4): |   /@vueuse/shared@11.1.0(vue@3.3.4): | ||||||
|     resolution: {integrity: sha512-0rY2m6HS5t27n/Vp5cTDsKTlNnimCqsbh/fmT2LgE+aaU42EMfXo8+bNX91W9I7DDmxfuACXMmrd7d79JxkqWA==} |     resolution: {integrity: sha512-YUtIpY122q7osj+zsNMFAfMTubGz0sn5QzE5gPzAIiCmtt2ha3uQUY1+JPyL4gRCTsLPX82Y9brNbo/aqlA91w==} | ||||||
|     dependencies: |     dependencies: | ||||||
|       vue-demi: 0.14.10(vue@3.3.4) |       vue-demi: 0.14.10(vue@3.3.4) | ||||||
|     transitivePeerDependencies: |     transitivePeerDependencies: | ||||||
| @ -4854,7 +4869,6 @@ packages: | |||||||
| 
 | 
 | ||||||
|   /deep-is@0.1.4: |   /deep-is@0.1.4: | ||||||
|     resolution: {integrity: sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==} |     resolution: {integrity: sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==} | ||||||
|     dev: true |  | ||||||
| 
 | 
 | ||||||
|   /deepmerge-ts@5.1.0: |   /deepmerge-ts@5.1.0: | ||||||
|     resolution: {integrity: sha512-eS8dRJOckyo9maw9Tu5O5RUi/4inFLrnoLkBe3cPfDMx3WZioXtmOew4TXQaxq7Rhl4xjDtR7c6x8nNTxOvbFw==} |     resolution: {integrity: sha512-eS8dRJOckyo9maw9Tu5O5RUi/4inFLrnoLkBe3cPfDMx3WZioXtmOew4TXQaxq7Rhl4xjDtR7c6x8nNTxOvbFw==} | ||||||
| @ -5201,6 +5215,19 @@ packages: | |||||||
|     engines: {node: '>=12'} |     engines: {node: '>=12'} | ||||||
|     dev: false |     dev: false | ||||||
| 
 | 
 | ||||||
|  |   /escodegen@1.14.3: | ||||||
|  |     resolution: {integrity: sha512-qFcX0XJkdg+PB3xjZZG/wKSuT1PnQWx57+TVSjIMmILd2yC/6ByYElPwJnslDsuWuSAp4AwJGumarAAmJch5Kw==} | ||||||
|  |     engines: {node: '>=4.0'} | ||||||
|  |     hasBin: true | ||||||
|  |     dependencies: | ||||||
|  |       esprima: 4.0.1 | ||||||
|  |       estraverse: 4.3.0 | ||||||
|  |       esutils: 2.0.3 | ||||||
|  |       optionator: 0.8.3 | ||||||
|  |     optionalDependencies: | ||||||
|  |       source-map: 0.6.1 | ||||||
|  |     dev: false | ||||||
|  | 
 | ||||||
|   /escodegen@2.1.0: |   /escodegen@2.1.0: | ||||||
|     resolution: {integrity: sha512-2NlIDTwUWJN0mRPQOdtQBzbUHvdGY2P1VXSyU83Q3xKxM7WHX2Ql8dKq782Q9TgQUNOLEzEYu9bzLNj1q88I5w==} |     resolution: {integrity: sha512-2NlIDTwUWJN0mRPQOdtQBzbUHvdGY2P1VXSyU83Q3xKxM7WHX2Ql8dKq782Q9TgQUNOLEzEYu9bzLNj1q88I5w==} | ||||||
|     engines: {node: '>=6.0'} |     engines: {node: '>=6.0'} | ||||||
| @ -5541,11 +5568,16 @@ packages: | |||||||
|       eslint-visitor-keys: 3.4.3 |       eslint-visitor-keys: 3.4.3 | ||||||
|     dev: true |     dev: true | ||||||
| 
 | 
 | ||||||
|  |   /esprima@1.2.2: | ||||||
|  |     resolution: {integrity: sha512-+JpPZam9w5DuJ3Q67SqsMGtiHKENSMRVoxvArfJZK01/BfLEObtZ6orJa/MtoGNR/rfMgp5837T41PAmTwAv/A==} | ||||||
|  |     engines: {node: '>=0.4.0'} | ||||||
|  |     hasBin: true | ||||||
|  |     dev: false | ||||||
|  | 
 | ||||||
|   /esprima@4.0.1: |   /esprima@4.0.1: | ||||||
|     resolution: {integrity: sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==} |     resolution: {integrity: sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==} | ||||||
|     engines: {node: '>=4'} |     engines: {node: '>=4'} | ||||||
|     hasBin: true |     hasBin: true | ||||||
|     dev: true |  | ||||||
| 
 | 
 | ||||||
|   /esquery@1.5.0: |   /esquery@1.5.0: | ||||||
|     resolution: {integrity: sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg==} |     resolution: {integrity: sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg==} | ||||||
| @ -5564,7 +5596,6 @@ packages: | |||||||
|   /estraverse@4.3.0: |   /estraverse@4.3.0: | ||||||
|     resolution: {integrity: sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==} |     resolution: {integrity: sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==} | ||||||
|     engines: {node: '>=4.0'} |     engines: {node: '>=4.0'} | ||||||
|     dev: true |  | ||||||
| 
 | 
 | ||||||
|   /estraverse@5.3.0: |   /estraverse@5.3.0: | ||||||
|     resolution: {integrity: sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==} |     resolution: {integrity: sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==} | ||||||
| @ -5581,7 +5612,6 @@ packages: | |||||||
|   /esutils@2.0.3: |   /esutils@2.0.3: | ||||||
|     resolution: {integrity: sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==} |     resolution: {integrity: sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==} | ||||||
|     engines: {node: '>=0.10.0'} |     engines: {node: '>=0.10.0'} | ||||||
|     dev: true |  | ||||||
| 
 | 
 | ||||||
|   /event-stream@3.3.4: |   /event-stream@3.3.4: | ||||||
|     resolution: {integrity: sha512-QHpkERcGsR0T7Qm3HNJSyXKEEj8AHNxkY3PK8TS2KJvQ7NiSHe3DDpwVKKtoYprL/AreyzFBeIkBIWChAqn60g==} |     resolution: {integrity: sha512-QHpkERcGsR0T7Qm3HNJSyXKEEj8AHNxkY3PK8TS2KJvQ7NiSHe3DDpwVKKtoYprL/AreyzFBeIkBIWChAqn60g==} | ||||||
| @ -5651,7 +5681,6 @@ packages: | |||||||
| 
 | 
 | ||||||
|   /fast-levenshtein@2.0.6: |   /fast-levenshtein@2.0.6: | ||||||
|     resolution: {integrity: sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==} |     resolution: {integrity: sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==} | ||||||
|     dev: true |  | ||||||
| 
 | 
 | ||||||
|   /fastq@1.15.0: |   /fastq@1.15.0: | ||||||
|     resolution: {integrity: sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw==} |     resolution: {integrity: sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw==} | ||||||
| @ -6543,6 +6572,10 @@ packages: | |||||||
|     hasBin: true |     hasBin: true | ||||||
|     dev: true |     dev: true | ||||||
| 
 | 
 | ||||||
|  |   /jq-wasm@0.0.9: | ||||||
|  |     resolution: {integrity: sha512-qsfuch2xRjbM4VD5kkjlPciLA+bUaLR/IzaMyREulsiwP6nLkpEDNbyWA1XqV06Dx/EoJxvn2xAxZGP1LAmT0Q==} | ||||||
|  |     dev: false | ||||||
|  | 
 | ||||||
|   /js-base64@3.7.7: |   /js-base64@3.7.7: | ||||||
|     resolution: {integrity: sha512-7rCnleh0z2CkXhH67J8K1Ytz0b2Y+yxTPL+/KOJoa20hfnVQ/3/T6W/KflYI4bRHRagNeXeU2bkNGI3v1oS/lw==} |     resolution: {integrity: sha512-7rCnleh0z2CkXhH67J8K1Ytz0b2Y+yxTPL+/KOJoa20hfnVQ/3/T6W/KflYI4bRHRagNeXeU2bkNGI3v1oS/lw==} | ||||||
|     dev: false |     dev: false | ||||||
| @ -6681,6 +6714,14 @@ packages: | |||||||
|       graceful-fs: 4.2.11 |       graceful-fs: 4.2.11 | ||||||
|     dev: true |     dev: true | ||||||
| 
 | 
 | ||||||
|  |   /jsonpath@1.1.1: | ||||||
|  |     resolution: {integrity: sha512-l6Cg7jRpixfbgoWgkrl77dgEj8RPvND0wMH6TwQmi9Qs4TFfS9u5cUFnbeKTwj5ga5Y3BTGGNI28k117LJ009w==} | ||||||
|  |     dependencies: | ||||||
|  |       esprima: 1.2.2 | ||||||
|  |       static-eval: 2.0.2 | ||||||
|  |       underscore: 1.12.1 | ||||||
|  |     dev: false | ||||||
|  | 
 | ||||||
|   /jsonpointer@5.0.1: |   /jsonpointer@5.0.1: | ||||||
|     resolution: {integrity: sha512-p/nXbhSEcu3pZRdkW1OfJhpsVtW1gd4Wa1fnQc9YLiTfAjn0312eMKimbdIQzuZl9aa9xUGaRlP9T/CJE/ditQ==} |     resolution: {integrity: sha512-p/nXbhSEcu3pZRdkW1OfJhpsVtW1gd4Wa1fnQc9YLiTfAjn0312eMKimbdIQzuZl9aa9xUGaRlP9T/CJE/ditQ==} | ||||||
|     engines: {node: '>=0.10.0'} |     engines: {node: '>=0.10.0'} | ||||||
| @ -6723,6 +6764,14 @@ packages: | |||||||
|     engines: {node: '>=6'} |     engines: {node: '>=6'} | ||||||
|     dev: true |     dev: true | ||||||
| 
 | 
 | ||||||
|  |   /levn@0.3.0: | ||||||
|  |     resolution: {integrity: sha512-0OO4y2iOHix2W6ujICbKIaEQXvFQHue65vUG3pb5EUomzPI90z9hsA1VsO/dbIIpC53J8gxM9Q4Oho0jrCM/yA==} | ||||||
|  |     engines: {node: '>= 0.8.0'} | ||||||
|  |     dependencies: | ||||||
|  |       prelude-ls: 1.1.2 | ||||||
|  |       type-check: 0.3.2 | ||||||
|  |     dev: false | ||||||
|  | 
 | ||||||
|   /levn@0.4.1: |   /levn@0.4.1: | ||||||
|     resolution: {integrity: sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==} |     resolution: {integrity: sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==} | ||||||
|     engines: {node: '>= 0.8.0'} |     engines: {node: '>= 0.8.0'} | ||||||
| @ -7269,6 +7318,18 @@ packages: | |||||||
|       is-wsl: 2.2.0 |       is-wsl: 2.2.0 | ||||||
|     dev: true |     dev: true | ||||||
| 
 | 
 | ||||||
|  |   /optionator@0.8.3: | ||||||
|  |     resolution: {integrity: sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA==} | ||||||
|  |     engines: {node: '>= 0.8.0'} | ||||||
|  |     dependencies: | ||||||
|  |       deep-is: 0.1.4 | ||||||
|  |       fast-levenshtein: 2.0.6 | ||||||
|  |       levn: 0.3.0 | ||||||
|  |       prelude-ls: 1.1.2 | ||||||
|  |       type-check: 0.3.2 | ||||||
|  |       word-wrap: 1.2.5 | ||||||
|  |     dev: false | ||||||
|  | 
 | ||||||
|   /optionator@0.9.3: |   /optionator@0.9.3: | ||||||
|     resolution: {integrity: sha512-JjCoypp+jKn1ttEFExxhetCKeJt9zhAgAve5FXHixTvFDW/5aEktX9bufBKLRRMdU7bNtpLfcGu94B3cdEJgjg==} |     resolution: {integrity: sha512-JjCoypp+jKn1ttEFExxhetCKeJt9zhAgAve5FXHixTvFDW/5aEktX9bufBKLRRMdU7bNtpLfcGu94B3cdEJgjg==} | ||||||
|     engines: {node: '>= 0.8.0'} |     engines: {node: '>= 0.8.0'} | ||||||
| @ -7560,6 +7621,11 @@ packages: | |||||||
|       source-map-js: 1.0.2 |       source-map-js: 1.0.2 | ||||||
|     dev: true |     dev: true | ||||||
| 
 | 
 | ||||||
|  |   /prelude-ls@1.1.2: | ||||||
|  |     resolution: {integrity: sha512-ESF23V4SKG6lVSGZgYNpbsiaAkdab6ZgOxe52p7+Kid3W3u3bxR4Vfd/o21dmN7jSt0IwgZ4v5MUd26FEtXE9w==} | ||||||
|  |     engines: {node: '>= 0.8.0'} | ||||||
|  |     dev: false | ||||||
|  | 
 | ||||||
|   /prelude-ls@1.2.1: |   /prelude-ls@1.2.1: | ||||||
|     resolution: {integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==} |     resolution: {integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==} | ||||||
|     engines: {node: '>= 0.8.0'} |     engines: {node: '>= 0.8.0'} | ||||||
| @ -8236,6 +8302,7 @@ packages: | |||||||
| 
 | 
 | ||||||
|   /sortablejs@1.14.0: |   /sortablejs@1.14.0: | ||||||
|     resolution: {integrity: sha512-pBXvQCs5/33fdN1/39pPL0NZF20LeRbLQ5jtnheIPN9JQAaufGjKdWduZn4U7wCtVuzKhmRkI0DFYHYRbB2H1w==} |     resolution: {integrity: sha512-pBXvQCs5/33fdN1/39pPL0NZF20LeRbLQ5jtnheIPN9JQAaufGjKdWduZn4U7wCtVuzKhmRkI0DFYHYRbB2H1w==} | ||||||
|  |     dev: false | ||||||
| 
 | 
 | ||||||
|   /source-map-js@1.0.2: |   /source-map-js@1.0.2: | ||||||
|     resolution: {integrity: sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==} |     resolution: {integrity: sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==} | ||||||
| @ -8251,7 +8318,6 @@ packages: | |||||||
|   /source-map@0.6.1: |   /source-map@0.6.1: | ||||||
|     resolution: {integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==} |     resolution: {integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==} | ||||||
|     engines: {node: '>=0.10.0'} |     engines: {node: '>=0.10.0'} | ||||||
|     dev: true |  | ||||||
| 
 | 
 | ||||||
|   /source-map@0.8.0-beta.0: |   /source-map@0.8.0-beta.0: | ||||||
|     resolution: {integrity: sha512-2ymg6oRBpebeZi9UUNsgQ89bhx01TcTkmNTGnNO88imTmbSgy4nfujrgVEFKWpMTEGA11EDkTt7mqObTPdigIA==} |     resolution: {integrity: sha512-2ymg6oRBpebeZi9UUNsgQ89bhx01TcTkmNTGnNO88imTmbSgy4nfujrgVEFKWpMTEGA11EDkTt7mqObTPdigIA==} | ||||||
| @ -8312,6 +8378,12 @@ packages: | |||||||
|     resolution: {integrity: sha512-1XMJE5fQo1jGH6Y/7ebnwPOBEkIEnT4QF32d5R1+VXdXveM0IBMJt8zfaxX1P3QhVwrYe+576+jkANtSS2mBbw==} |     resolution: {integrity: sha512-1XMJE5fQo1jGH6Y/7ebnwPOBEkIEnT4QF32d5R1+VXdXveM0IBMJt8zfaxX1P3QhVwrYe+576+jkANtSS2mBbw==} | ||||||
|     dev: true |     dev: true | ||||||
| 
 | 
 | ||||||
|  |   /static-eval@2.0.2: | ||||||
|  |     resolution: {integrity: sha512-N/D219Hcr2bPjLxPiV+TQE++Tsmrady7TqAJugLy7Xk1EumfDWS/f5dtBbkRCGE7wKKXuYockQoj8Rm2/pVKyg==} | ||||||
|  |     dependencies: | ||||||
|  |       escodegen: 1.14.3 | ||||||
|  |     dev: false | ||||||
|  | 
 | ||||||
|   /std-env@3.3.3: |   /std-env@3.3.3: | ||||||
|     resolution: {integrity: sha512-Rz6yejtVyWnVjC1RFvNmYL10kgjC49EOghxWn0RFqlCHGFpQx+Xe7yW3I4ceK1SGrWIGMjD5Kbue8W/udkbMJg==} |     resolution: {integrity: sha512-Rz6yejtVyWnVjC1RFvNmYL10kgjC49EOghxWn0RFqlCHGFpQx+Xe7yW3I4ceK1SGrWIGMjD5Kbue8W/udkbMJg==} | ||||||
|     dev: true |     dev: true | ||||||
| @ -8627,6 +8699,13 @@ packages: | |||||||
|       typescript: 5.2.2 |       typescript: 5.2.2 | ||||||
|     dev: true |     dev: true | ||||||
| 
 | 
 | ||||||
|  |   /type-check@0.3.2: | ||||||
|  |     resolution: {integrity: sha512-ZCmOJdvOWDBYJlzAoFkC+Q0+bUyEOS1ltgp1MGU03fqHG+dbi9tBFU2Rd9QKiDZFAYrhPh2JUf7rZRIuHRKtOg==} | ||||||
|  |     engines: {node: '>= 0.8.0'} | ||||||
|  |     dependencies: | ||||||
|  |       prelude-ls: 1.1.2 | ||||||
|  |     dev: false | ||||||
|  | 
 | ||||||
|   /type-check@0.4.0: |   /type-check@0.4.0: | ||||||
|     resolution: {integrity: sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==} |     resolution: {integrity: sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==} | ||||||
|     engines: {node: '>= 0.8.0'} |     engines: {node: '>= 0.8.0'} | ||||||
| @ -8758,6 +8837,10 @@ packages: | |||||||
|       mlly: 1.4.2 |       mlly: 1.4.2 | ||||||
|     dev: true |     dev: true | ||||||
| 
 | 
 | ||||||
|  |   /underscore@1.12.1: | ||||||
|  |     resolution: {integrity: sha512-hEQt0+ZLDVUMhebKxL4x1BTtDY7bavVofhZ9KZ4aI26X9SRaE+Y3m83XUL1UP2jn8ynjndwCCpEHdUG+9pP1Tw==} | ||||||
|  |     dev: false | ||||||
|  | 
 | ||||||
|   /undici-types@5.26.5: |   /undici-types@5.26.5: | ||||||
|     resolution: {integrity: sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==} |     resolution: {integrity: sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==} | ||||||
|     dev: true |     dev: true | ||||||
| @ -9369,6 +9452,7 @@ packages: | |||||||
|     dependencies: |     dependencies: | ||||||
|       sortablejs: 1.14.0 |       sortablejs: 1.14.0 | ||||||
|       vue: 3.3.4 |       vue: 3.3.4 | ||||||
|  |     dev: false | ||||||
| 
 | 
 | ||||||
|   /vueuc@0.4.51(vue@3.3.4): |   /vueuc@0.4.51(vue@3.3.4): | ||||||
|     resolution: {integrity: sha512-pLiMChM4f+W8czlIClGvGBYo656lc2Y0/mXFSCydcSmnCR1izlKPGMgiYBGjbY9FDkFG8a2HEVz7t0DNzBWbDw==} |     resolution: {integrity: sha512-pLiMChM4f+W8czlIClGvGBYo656lc2Y0/mXFSCydcSmnCR1izlKPGMgiYBGjbY9FDkFG8a2HEVz7t0DNzBWbDw==} | ||||||
| @ -9502,6 +9586,11 @@ packages: | |||||||
|       stackback: 0.0.2 |       stackback: 0.0.2 | ||||||
|     dev: true |     dev: true | ||||||
| 
 | 
 | ||||||
|  |   /word-wrap@1.2.5: | ||||||
|  |     resolution: {integrity: sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==} | ||||||
|  |     engines: {node: '>=0.10.0'} | ||||||
|  |     dev: false | ||||||
|  | 
 | ||||||
|   /workbox-background-sync@7.0.0: |   /workbox-background-sync@7.0.0: | ||||||
|     resolution: {integrity: sha512-S+m1+84gjdueM+jIKZ+I0Lx0BDHkk5Nu6a3kTVxP4fdj3gKouRNmhO8H290ybnJTOPfBDtTMXSQA/QLTvr7PeA==} |     resolution: {integrity: sha512-S+m1+84gjdueM+jIKZ+I0Lx0BDHkk5Nu6a3kTVxP4fdj3gKouRNmhO8H290ybnJTOPfBDtTMXSQA/QLTvr7PeA==} | ||||||
|     dependencies: |     dependencies: | ||||||
|  | |||||||
| @ -2,6 +2,9 @@ import { tool as base64FileConverter } from './base64-file-converter'; | |||||||
| import { tool as base64StringConverter } from './base64-string-converter'; | import { tool as base64StringConverter } from './base64-string-converter'; | ||||||
| import { tool as basicAuthGenerator } from './basic-auth-generator'; | import { tool as basicAuthGenerator } from './basic-auth-generator'; | ||||||
| import { tool as emailNormalizer } from './email-normalizer'; | import { tool as emailNormalizer } from './email-normalizer'; | ||||||
|  | import { tool as jqTester } from './jq-tester'; | ||||||
|  | import { tool as jsonpathMemo } from './jsonpath-memo'; | ||||||
|  | import { tool as jqMemo } from './jq-memo'; | ||||||
| 
 | 
 | ||||||
| import { tool as asciiTextDrawer } from './ascii-text-drawer'; | import { tool as asciiTextDrawer } from './ascii-text-drawer'; | ||||||
| 
 | 
 | ||||||
| @ -160,6 +163,9 @@ export const toolsByCategory: ToolCategory[] = [ | |||||||
|       emailNormalizer, |       emailNormalizer, | ||||||
|       regexTester, |       regexTester, | ||||||
|       regexMemo, |       regexMemo, | ||||||
|  |       jqTester, | ||||||
|  |       jqMemo, | ||||||
|  |       jsonpathMemo, | ||||||
|     ], |     ], | ||||||
|   }, |   }, | ||||||
|   { |   { | ||||||
|  | |||||||
							
								
								
									
										12
									
								
								src/tools/jq-memo/index.ts
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										12
									
								
								src/tools/jq-memo/index.ts
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,12 @@ | |||||||
|  | import { Brackets } from '@vicons/tabler'; | ||||||
|  | import { defineTool } from '../tool'; | ||||||
|  | 
 | ||||||
|  | export const tool = defineTool({ | ||||||
|  |   name: 'Jq Cheatsheet', | ||||||
|  |   path: '/jq-memo', | ||||||
|  |   description: 'JQ command cheatsheet', | ||||||
|  |   keywords: ['jq', 'cheatsheet', 'memo'], | ||||||
|  |   component: () => import('./jq-memo.vue'), | ||||||
|  |   icon: Brackets, | ||||||
|  |   createdAt: new Date('2024-08-15'), | ||||||
|  | }); | ||||||
							
								
								
									
										89
									
								
								src/tools/jq-memo/jq-memo.md
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										89
									
								
								src/tools/jq-memo/jq-memo.md
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,89 @@ | |||||||
|  | # Processing JSON using jq | ||||||
|  | 
 | ||||||
|  | jq is useful to slice, filter, map and transform structured json data. | ||||||
|  | 
 | ||||||
|  | ## Installing jq | ||||||
|  | 
 | ||||||
|  | ### On Mac OS | ||||||
|  | 
 | ||||||
|  | `brew install jq` | ||||||
|  | 
 | ||||||
|  | ### On AWS Linux | ||||||
|  | 
 | ||||||
|  | Not available as yum install on our current AMI. It should be on the latest AMI though: https://aws.amazon.com/amazon-linux-ami/2015.09-release-notes/ | ||||||
|  | 
 | ||||||
|  | Installing from the source proved to be tricky. | ||||||
|  | 
 | ||||||
|  | ## Useful arguments | ||||||
|  | 
 | ||||||
|  | When running jq, the following arguments may become handy: | ||||||
|  | 
 | ||||||
|  | | Argument        |  Description  | | ||||||
|  | | ------ | :--------- | | ||||||
|  | | `--version`| Output the jq version and exit with zero. | | ||||||
|  | | `--sort-keys` | Output the fields of each object with the keys in sorted order.| | ||||||
|  | 
 | ||||||
|  | ## Basic concepts | ||||||
|  | 
 | ||||||
|  | The syntax for jq is pretty coherent: | ||||||
|  | 
 | ||||||
|  | | Syntax  |  Description  | | ||||||
|  | | ------ | :--------- | | ||||||
|  | | , | Filters separated by a comma will produce multiple independent outputs| | ||||||
|  | | ? | Will ignores error if the type is unexpected | | ||||||
|  | | [] | Array construction | | ||||||
|  | | {} | Object construction | | ||||||
|  | | + | Concatenate or Add | | ||||||
|  | | - | Difference of sets or Substract | | ||||||
|  | | length | Size of selected element | | ||||||
|  | | | | Pipes are used to chain commands in a similar fashion than bash| | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | ## Dealing with json objects | ||||||
|  | 
 | ||||||
|  | | Description | Command | | ||||||
|  | | ------ | :--------- | | ||||||
|  | | Display all keys | `jq 'keys'` | | ||||||
|  | | Adds + 1 to all items | `jq 'map_values(.+1)'` | | ||||||
|  | | Delete a key| `jq 'del(.foo)'` | | ||||||
|  | | Convert an object to array | `to_entries | map([.key, .value])` | | ||||||
|  | 
 | ||||||
|  | ## Dealing with fields | ||||||
|  | 
 | ||||||
|  | | Description | Command | | ||||||
|  | | ------ | :--------- | | ||||||
|  | | Concatenate two fields| `fieldNew=.field1+' '+.field2` | | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | ## Dealing with json arrays | ||||||
|  | 
 | ||||||
|  | ### Slicing and Filtering | ||||||
|  | 
 | ||||||
|  | | Description | Command | | ||||||
|  | | ------ | :--------- | | ||||||
|  | | All | `jq .[]` | | ||||||
|  | | First |	`jq '.[0]'` | | ||||||
|  | | Range | `jq '.[2:4]'` | | ||||||
|  | | First 3 | `jq '.[:3]'` | | ||||||
|  | | Last 2 | `jq '.[-2:]'` | | ||||||
|  | | Before Last | `jq '.[-2]'`| | ||||||
|  | | Select array of int by value | `jq 'map(select(. >= 2))'` | | ||||||
|  | | Select array of objects by value| `jq '.[] | select(.id == "second")'` | | ||||||
|  | | Select by type | `jq '.[] | numbers'` with type been arrays, objects, iterables, booleans, numbers, normals, finites, strings, nulls, values, scalars | | ||||||
|  | 
 | ||||||
|  | ### Mapping and Transforming | ||||||
|  | 
 | ||||||
|  | | Description | Command | | ||||||
|  | | ------ | :--------- | | ||||||
|  | | Add + 1 to all items | `jq 'map(.+1)'` | | ||||||
|  | | Delete 2 items| `jq 'del(.[1, 2])'` | | ||||||
|  | | Concatenate arrays | `jq 'add'` | | ||||||
|  | | Flatten an array | `jq 'flatten'` | | ||||||
|  | | Create a range of numbers | `jq '[range(2;4)]'` | | ||||||
|  | | Display the type of each item| `jq 'map(type)'` | | ||||||
|  | | Sort an array of basic type| `jq 'sort'` | | ||||||
|  | | Sort an array of objects | `jq 'sort_by(.foo)'` | | ||||||
|  | | Group by a key - opposite to flatten | `jq 'group_by(.foo)'` | | ||||||
|  | | Minimun value of an array| `jq 'min'` .See also  min, max, min_by(path_exp), max_by(path_exp) | | ||||||
|  | | Remove duplicates| `jq 'unique'` or `jq 'unique_by(.foo)'` or `jq 'unique_by(length)'` | | ||||||
|  | | Reverse an array | `jq 'reverse'` | | ||||||
							
								
								
									
										32
									
								
								src/tools/jq-memo/jq-memo.vue
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										32
									
								
								src/tools/jq-memo/jq-memo.vue
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,32 @@ | |||||||
|  | <script setup lang="ts"> | ||||||
|  | import { useThemeVars } from 'naive-ui'; | ||||||
|  | import Memo from './jq-memo.md'; | ||||||
|  | 
 | ||||||
|  | const themeVars = useThemeVars(); | ||||||
|  | </script> | ||||||
|  | 
 | ||||||
|  | <template> | ||||||
|  |   <div> | ||||||
|  |     <Memo style="overflow-x: auto;" /> | ||||||
|  |   </div> | ||||||
|  | </template> | ||||||
|  | 
 | ||||||
|  | <style lang="less" scoped> | ||||||
|  | ::v-deep(pre) { | ||||||
|  |   margin: 0; | ||||||
|  |   padding: 15px 22px; | ||||||
|  |   background-color: v-bind('themeVars.cardColor'); | ||||||
|  |   border-radius: 4px; | ||||||
|  |   overflow: auto; | ||||||
|  | } | ||||||
|  | ::v-deep(table) { | ||||||
|  |   border-collapse: collapse; | ||||||
|  | } | ||||||
|  | ::v-deep(table), ::v-deep(td), ::v-deep(th) { | ||||||
|  |   border: 1px solid v-bind('themeVars.textColor1'); | ||||||
|  |   padding: 5px; | ||||||
|  | } | ||||||
|  | ::v-deep(a) { | ||||||
|  |   color: v-bind('themeVars.textColor1'); | ||||||
|  | } | ||||||
|  | </style> | ||||||
							
								
								
									
										12
									
								
								src/tools/jq-tester/index.ts
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										12
									
								
								src/tools/jq-tester/index.ts
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,12 @@ | |||||||
|  | import { Braces } from '@vicons/tabler'; | ||||||
|  | import { defineTool } from '../tool'; | ||||||
|  | 
 | ||||||
|  | export const tool = defineTool({ | ||||||
|  |   name: 'Jq/JSONPath Tester', | ||||||
|  |   path: '/jq-tester', | ||||||
|  |   description: 'Test jq/JSONPath expression against a JSON content', | ||||||
|  |   keywords: ['jq', 'json', 'tester', 'jsonpath'], | ||||||
|  |   component: () => import('./jq-tester.vue'), | ||||||
|  |   icon: Braces, | ||||||
|  |   createdAt: new Date('2024-08-15'), | ||||||
|  | }); | ||||||
							
								
								
									
										94
									
								
								src/tools/jq-tester/jq-tester.vue
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										94
									
								
								src/tools/jq-tester/jq-tester.vue
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,94 @@ | |||||||
|  | <script setup lang="ts"> | ||||||
|  | import JSON5 from 'json5'; | ||||||
|  | import jsonpath from 'jsonpath'; | ||||||
|  | import jq from 'jq-wasm'; | ||||||
|  | import TextareaCopyable from '@/components/TextareaCopyable.vue'; | ||||||
|  | import { useValidation } from '@/composable/validation'; | ||||||
|  | 
 | ||||||
|  | type JQType = 'jq' | 'jsonpath'; | ||||||
|  | const indent = 2; | ||||||
|  | 
 | ||||||
|  | const jqOrJsonPath = ref(''); | ||||||
|  | const json = ref(''); | ||||||
|  | const jqtype = ref<JQType>('jq'); | ||||||
|  | const jqtypes = [ | ||||||
|  |   { value: 'jq', label: 'jq' }, | ||||||
|  |   { value: 'jsonpath', label: 'JSONPath' }, | ||||||
|  | ]; | ||||||
|  | 
 | ||||||
|  | const result = computedAsync(async () => { | ||||||
|  |   const jqOrJsonPathString = jqOrJsonPath.value; | ||||||
|  |   const jsonString = json.value; | ||||||
|  |   const jqtypeValue = jqtype.value; | ||||||
|  | 
 | ||||||
|  |   try { | ||||||
|  |     const obj = JSON5.parse(jsonString); | ||||||
|  |     if (jqtypeValue === 'jq') { | ||||||
|  |       return JSON.stringify(await jq.json(obj, jqOrJsonPathString), null, indent); | ||||||
|  |     } | ||||||
|  |     return JSON.stringify(jsonpath.query(obj, jqOrJsonPathString), null, indent); | ||||||
|  |   } | ||||||
|  |   catch (e: any) { | ||||||
|  |     return e.toString(); | ||||||
|  |   } | ||||||
|  | }); | ||||||
|  | 
 | ||||||
|  | const jsonValidation = useValidation({ | ||||||
|  |   source: json, | ||||||
|  |   rules: [ | ||||||
|  |     { | ||||||
|  |       validator: v => JSON5.parse(v), | ||||||
|  |       message: 'Provided JSON is not valid.', | ||||||
|  |     }, | ||||||
|  |   ], | ||||||
|  | }); | ||||||
|  | </script> | ||||||
|  | 
 | ||||||
|  | <template> | ||||||
|  |   <div style="max-width: 600px;"> | ||||||
|  |     <c-card title="Input" mb-2> | ||||||
|  |       <c-input-text | ||||||
|  |         v-model:value="jqOrJsonPath" | ||||||
|  |         label="jq or JSONPath" | ||||||
|  |         placeholder="Put your jq or JSONPath here..." | ||||||
|  |         mb-2 | ||||||
|  |       /> | ||||||
|  | 
 | ||||||
|  |       <div mb-2 flex justify-center> | ||||||
|  |         <n-radio-group v-model:value="jqtype" name="jqtype"> | ||||||
|  |           <n-space> | ||||||
|  |             <n-radio | ||||||
|  |               v-for="type in jqtypes" | ||||||
|  |               :key="type.value" | ||||||
|  |               :value="type.value" | ||||||
|  |               :label="type.label" | ||||||
|  |             /> | ||||||
|  |           </n-space> | ||||||
|  |         </n-radio-group> | ||||||
|  |       </div> | ||||||
|  | 
 | ||||||
|  |       <div mb-2 flex justify-center> | ||||||
|  |         <router-link v-if="jqtype === 'jq'" target="_blank" to="/jq-memo" mb-1 mt-1> | ||||||
|  |           See <code>jq</code> Cheatsheet | ||||||
|  |         </router-link> | ||||||
|  |         <router-link v-if="jqtype === 'jsonpath'" target="_blank" to="/jsonpath-memo" mb-1 mt-1> | ||||||
|  |           See JSONPath Cheatsheet | ||||||
|  |         </router-link> | ||||||
|  |       </div> | ||||||
|  | 
 | ||||||
|  |       <c-input-text | ||||||
|  |         v-model:value="json" | ||||||
|  |         label="JSON" | ||||||
|  |         multiline | ||||||
|  |         placeholder="Put your JSON here..." | ||||||
|  |         rows="5" | ||||||
|  |         :validation="jsonValidation" | ||||||
|  |         mb-2 | ||||||
|  |       /> | ||||||
|  |     </c-card> | ||||||
|  | 
 | ||||||
|  |     <c-card title="Result"> | ||||||
|  |       <TextareaCopyable :value="result" language="json" /> | ||||||
|  |     </c-card> | ||||||
|  |   </div> | ||||||
|  | </template> | ||||||
							
								
								
									
										12
									
								
								src/tools/jsonpath-memo/index.ts
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										12
									
								
								src/tools/jsonpath-memo/index.ts
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,12 @@ | |||||||
|  | import { Brackets } from '@vicons/tabler'; | ||||||
|  | import { defineTool } from '../tool'; | ||||||
|  | 
 | ||||||
|  | export const tool = defineTool({ | ||||||
|  |   name: 'JSONPath Syntax Cheatsheet', | ||||||
|  |   path: '/jsonpath-memo', | ||||||
|  |   description: 'JSONPath Syntax Cheatsheet', | ||||||
|  |   keywords: ['jsonpath', 'cheatsheet', 'memo'], | ||||||
|  |   component: () => import('./jsonpath-memo.vue'), | ||||||
|  |   icon: Brackets, | ||||||
|  |   createdAt: new Date('2024-08-15'), | ||||||
|  | }); | ||||||
							
								
								
									
										52
									
								
								src/tools/jsonpath-memo/jsonpath-memo.md
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										52
									
								
								src/tools/jsonpath-memo/jsonpath-memo.md
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,52 @@ | |||||||
|  | ## Syntax | ||||||
|  | 
 | ||||||
|  | Depending on the client used JSONPath expressions do start with `$.` indicating the root element. | ||||||
|  | Some clients omit the leading `$.`. | ||||||
|  | 
 | ||||||
|  | | Syntax | Description | | ||||||
|  | | ------ | :--------- | | ||||||
|  | | `$.store.book[0].title` | |               | ||||||
|  | | `store.book[0].title` | With implicit `$.` | | ||||||
|  | | `$['store']['book'][0]['title']` | Alternative notation similar to scripting languages | | ||||||
|  | 
 | ||||||
|  | ## Tree Traversal | ||||||
|  | 
 | ||||||
|  | | Syntax | Description | | ||||||
|  | | ------ | :--------- | | ||||||
|  | | `$.parentNode.childNode.field`       | XPath: `/parentNode/childNode/@field` (content of "field" of all "childNode"s of "parentNode") | | ||||||
|  | | `$..anyChildNode`                    | XPath: `//anyChildNode` (all children at any depth named "anyChildNode") | | ||||||
|  | | `$.parentNode.*`                     | XPath: `/parentNode/*` (all children below) | | ||||||
|  | 
 | ||||||
|  | ## Array Access | ||||||
|  | 
 | ||||||
|  | | Syntax | Description | | ||||||
|  | | ------ | :--------- | | ||||||
|  | | `$.myList[0]` | first element | | ||||||
|  | | `$.myList[-1]` | last element | | ||||||
|  | | `$.myList[2:3]` | range | | ||||||
|  | | `$.myList[0,4,5]` | selection | | ||||||
|  | 
 | ||||||
|  | ## Filtering | ||||||
|  | 
 | ||||||
|  | | Syntax | Description | | ||||||
|  | | ------ | :--------- | | ||||||
|  | | `$.customer[?(@.car)]` |                       Only "customer"s that have attribute "car" | | ||||||
|  | | `$.customer[?(@.car == 'Ford Fiesta')]` |      Only "customer"s with "Ford Fiesta"s | | ||||||
|  | | `$.customer[?(@.age > 18)]` |                  Only adults | | ||||||
|  | 
 | ||||||
|  | ## Complex Conditions | ||||||
|  | 
 | ||||||
|  | | Syntax | Description | | ||||||
|  | | ------ | :--------- | | ||||||
|  | | `$.customer[?(@.age > 18 \|\| @.car == 'Ford Fiesta')]` |     logical or | | ||||||
|  | | `$.customer[?(@.age < 18 && @.hobby == 'Biking' )]` |       logical and | | ||||||
|  | 
 | ||||||
|  | ## Output Mapping | ||||||
|  | 
 | ||||||
|  | | Syntax | Description | | ||||||
|  | | ------ | :--------- | | ||||||
|  | | `$.[].{Name:name, Age:age, Hobbies:details.hobbies}` | Mapping fields/nested fields to new set | ||||||
|  | 
 | ||||||
|  | ## Credits | ||||||
|  | 
 | ||||||
|  | Original author: https://gist.github.com/mackoj/5786f8b95da0a82e8e003f444c4295bf | ||||||
							
								
								
									
										32
									
								
								src/tools/jsonpath-memo/jsonpath-memo.vue
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										32
									
								
								src/tools/jsonpath-memo/jsonpath-memo.vue
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,32 @@ | |||||||
|  | <script setup lang="ts"> | ||||||
|  | import { useThemeVars } from 'naive-ui'; | ||||||
|  | import Memo from './jsonpath-memo.md'; | ||||||
|  | 
 | ||||||
|  | const themeVars = useThemeVars(); | ||||||
|  | </script> | ||||||
|  | 
 | ||||||
|  | <template> | ||||||
|  |   <div max-w-600px> | ||||||
|  |     <Memo style="overflow-x: auto;" /> | ||||||
|  |   </div> | ||||||
|  | </template> | ||||||
|  | 
 | ||||||
|  | <style lang="less" scoped> | ||||||
|  | ::v-deep(pre) { | ||||||
|  |   margin: 0; | ||||||
|  |   padding: 15px 22px; | ||||||
|  |   background-color: v-bind('themeVars.cardColor'); | ||||||
|  |   border-radius: 4px; | ||||||
|  |   overflow: auto; | ||||||
|  | } | ||||||
|  | ::v-deep(table) { | ||||||
|  |   border-collapse: collapse; | ||||||
|  | } | ||||||
|  | ::v-deep(table), ::v-deep(td), ::v-deep(th) { | ||||||
|  |   border: 1px solid v-bind('themeVars.textColor1'); | ||||||
|  |   padding: 5px; | ||||||
|  | } | ||||||
|  | ::v-deep(a) { | ||||||
|  |   color: v-bind('themeVars.textColor1'); | ||||||
|  | } | ||||||
|  | </style> | ||||||
		Loading…
	
		Reference in New Issue
	
	Block a user