diff --git a/components.d.ts b/components.d.ts index caac9a83..fabbe793 100644 --- a/components.d.ts +++ b/components.d.ts @@ -91,7 +91,6 @@ declare module '@vue/runtime-core' { 'IconMdi:contentCopy': typeof import('~icons/mdi/content-copy')['default'] 'IconMdi:kettleSteamOutline': typeof import('~icons/mdi/kettle-steam-outline')['default'] IconMdiArrowDown: typeof import('~icons/mdi/arrow-down')['default'] - IconMdiArrowRight: typeof import('~icons/mdi/arrow-right')['default'] IconMdiArrowRightBottom: typeof import('~icons/mdi/arrow-right-bottom')['default'] IconMdiCamera: typeof import('~icons/mdi/camera')['default'] IconMdiChevronDown: typeof import('~icons/mdi/chevron-down')['default'] @@ -171,8 +170,6 @@ declare module '@vue/runtime-core' { NTable: typeof import('naive-ui')['NTable'] NTag: typeof import('naive-ui')['NTag'] NumeronymGenerator: typeof import('./src/tools/numeronym-generator/numeronym-generator.vue')['default'] - NUpload: typeof import('naive-ui')['NUpload'] - NUploadDragger: typeof import('naive-ui')['NUploadDragger'] 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'] PdfSignatureChecker: typeof import('./src/tools/pdf-signature-checker/pdf-signature-checker.vue')['default'] @@ -214,5 +211,6 @@ declare module '@vue/runtime-core' { XmlFormatter: typeof import('./src/tools/xml-formatter/xml-formatter.vue')['default'] YamlToJson: typeof import('./src/tools/yaml-to-json-converter/yaml-to-json.vue')['default'] YamlToToml: typeof import('./src/tools/yaml-to-toml/yaml-to-toml.vue')['default'] + YamlViewer: typeof import('./src/tools/yaml-viewer/yaml-viewer.vue')['default'] } } diff --git a/src/tools/index.ts b/src/tools/index.ts index 2b95577d..2a477ed2 100644 --- a/src/tools/index.ts +++ b/src/tools/index.ts @@ -76,6 +76,7 @@ import { tool as urlParser } from './url-parser'; import { tool as uuidGenerator } from './uuid-generator'; import { tool as macAddressLookup } from './mac-address-lookup'; import { tool as xmlFormatter } from './xml-formatter'; +import { tool as yamlViewer } from './yaml-viewer'; export const toolsByCategory: ToolCategory[] = [ { @@ -141,6 +142,7 @@ export const toolsByCategory: ToolCategory[] = [ chmodCalculator, dockerRunToDockerComposeConverter, xmlFormatter, + yamlViewer, ], }, { diff --git a/src/tools/yaml-viewer/index.ts b/src/tools/yaml-viewer/index.ts new file mode 100644 index 00000000..4ba6ced3 --- /dev/null +++ b/src/tools/yaml-viewer/index.ts @@ -0,0 +1,12 @@ +import { AlignJustified } from '@vicons/tabler'; +import { defineTool } from '../tool'; + +export const tool = defineTool({ + name: 'YAML prettify and format', + path: '/yaml-prettify', + description: 'Prettify your YAML string to a human friendly readable format.', + keywords: ['yaml', 'viewer', 'prettify', 'format'], + component: () => import('./yaml-viewer.vue'), + icon: AlignJustified, + createdAt: new Date('2024-01-31'), +}); diff --git a/src/tools/yaml-viewer/yaml-models.ts b/src/tools/yaml-viewer/yaml-models.ts new file mode 100644 index 00000000..54569db8 --- /dev/null +++ b/src/tools/yaml-viewer/yaml-models.ts @@ -0,0 +1,24 @@ +import { type MaybeRef, get } from '@vueuse/core'; + +import yaml from 'yaml'; + +export { formatYaml }; + +function formatYaml({ + rawYaml, + sortKeys = false, + indentSize = 2, +}: { + rawYaml: MaybeRef + sortKeys?: MaybeRef + indentSize?: MaybeRef +}) { + const parsedYaml = yaml.parse(get(rawYaml)); + + const formattedYAML = yaml.stringify(parsedYaml, { + sortMapEntries: get(sortKeys), + indent: get(indentSize), + }); + + return formattedYAML; +} diff --git a/src/tools/yaml-viewer/yaml-viewer.vue b/src/tools/yaml-viewer/yaml-viewer.vue new file mode 100644 index 00000000..3385eee2 --- /dev/null +++ b/src/tools/yaml-viewer/yaml-viewer.vue @@ -0,0 +1,72 @@ + + + + +