diff --git a/components.d.ts b/components.d.ts index cd3160f5..ae91be51 100644 --- a/components.d.ts +++ b/components.d.ts @@ -83,6 +83,7 @@ declare module '@vue/runtime-core' { JsonDiff: typeof import('./src/tools/json-diff/json-diff.vue')['default'] JsonMinify: typeof import('./src/tools/json-minify/json-minify.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'] JsonToYaml: typeof import('./src/tools/json-to-yaml-converter/json-to-yaml.vue')['default'] JsonViewer: typeof import('./src/tools/json-viewer/json-viewer.vue')['default'] JwtParser: typeof import('./src/tools/jwt-parser/jwt-parser.vue')['default'] @@ -98,7 +99,6 @@ declare module '@vue/runtime-core' { MetaTagGenerator: typeof import('./src/tools/meta-tag-generator/meta-tag-generator.vue')['default'] MimeTypes: typeof import('./src/tools/mime-types/mime-types.vue')['default'] NAlert: typeof import('naive-ui')['NAlert'] - NAutoComplete: typeof import('naive-ui')['NAutoComplete'] NavbarButtons: typeof import('./src/components/NavbarButtons.vue')['default'] NCheckbox: typeof import('naive-ui')['NCheckbox'] NCode: typeof import('naive-ui')['NCode'] @@ -149,8 +149,6 @@ declare module '@vue/runtime-core' { RouterLink: typeof import('vue-router')['RouterLink'] RouterView: typeof import('vue-router')['RouterView'] RsaKeyPairGenerator: typeof import('./src/tools/rsa-key-pair-generator/rsa-key-pair-generator.vue')['default'] - SearchBar: typeof import('./src/components/SearchBar.vue')['default'] - SearchBarItem: typeof import('./src/components/SearchBarItem.vue')['default'] SlugifyString: typeof import('./src/tools/slugify-string/slugify-string.vue')['default'] SpanCopyable: typeof import('./src/components/SpanCopyable.vue')['default'] SqlPrettify: typeof import('./src/tools/sql-prettify/sql-prettify.vue')['default'] @@ -161,6 +159,8 @@ declare module '@vue/runtime-core' { TextToNatoAlphabet: typeof import('./src/tools/text-to-nato-alphabet/text-to-nato-alphabet.vue')['default'] TokenDisplay: typeof import('./src/tools/otp-code-generator-and-validator/token-display.vue')['default'] 'TokenGenerator.tool': typeof import('./src/tools/token-generator/token-generator.tool.vue')['default'] + TomlToJson: typeof import('./src/tools/toml-to-json/toml-to-json.vue')['default'] + TomlToYaml: typeof import('./src/tools/toml-to-yaml/toml-to-yaml.vue')['default'] 'Tool.layout': typeof import('./src/layouts/tool.layout.vue')['default'] ToolCard: typeof import('./src/components/ToolCard.vue')['default'] UrlEncoder: typeof import('./src/tools/url-encoder/url-encoder.vue')['default'] @@ -170,5 +170,6 @@ declare module '@vue/runtime-core' { UuidGenerator: typeof import('./src/tools/uuid-generator/uuid-generator.vue')['default'] 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'] } } diff --git a/src/tools/index.ts b/src/tools/index.ts index dea527f1..455bfb7d 100644 --- a/src/tools/index.ts +++ b/src/tools/index.ts @@ -1,6 +1,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 yamlToToml } from './yaml-to-toml'; import { tool as jsonToToml } from './json-to-toml'; import { tool as tomlToYaml } from './toml-to-yaml'; import { tool as tomlToJson } from './toml-to-json'; @@ -81,6 +82,7 @@ export const toolsByCategory: ToolCategory[] = [ caseConverter, textToNatoAlphabet, yamlToJson, + yamlToToml, jsonToYaml, jsonToToml, listConverter, diff --git a/src/tools/yaml-to-toml/index.ts b/src/tools/yaml-to-toml/index.ts new file mode 100644 index 00000000..b6a7077f --- /dev/null +++ b/src/tools/yaml-to-toml/index.ts @@ -0,0 +1,12 @@ +import { AlignJustified } from '@vicons/tabler'; +import { defineTool } from '../tool'; + +export const tool = defineTool({ + name: 'YAML to TOML', + path: '/yaml-to-toml', + description: 'Parse and convert YAML to TOML.', + keywords: ['yaml', 'to', 'toml', 'convert', 'transform'], + component: () => import('./yaml-to-toml.vue'), + icon: AlignJustified, + createdAt: new Date('2023-06-23'), +}); diff --git a/src/tools/yaml-to-toml/yaml-to-toml.e2e.spec.ts b/src/tools/yaml-to-toml/yaml-to-toml.e2e.spec.ts new file mode 100644 index 00000000..5140678c --- /dev/null +++ b/src/tools/yaml-to-toml/yaml-to-toml.e2e.spec.ts @@ -0,0 +1,37 @@ +import { expect, test } from '@playwright/test'; + +test.describe('Tool - YAML to TOML', () => { + test.beforeEach(async ({ page }) => { + await page.goto('/yaml-to-toml'); + }); + + test('Has correct title', async ({ page }) => { + await expect(page).toHaveTitle('YAML to TOML - IT Tools'); + }); + + test('JSON is parsed and outputs clean TOML', async ({ page }) => { + await page.getByTestId('input').fill(` +foo: bar +list: + name: item + another: + key: value + number: 1 + `.trim()); + + const generatedJson = await page.getByTestId('area-content').innerText(); + + expect(generatedJson.trim()).toEqual( + ` +foo = "bar" + +[list] +name = "item" + + [list.another] + key = "value" + number = 1 + `.trim(), + ); + }); +}); diff --git a/src/tools/yaml-to-toml/yaml-to-toml.vue b/src/tools/yaml-to-toml/yaml-to-toml.vue new file mode 100644 index 00000000..cad72e6b --- /dev/null +++ b/src/tools/yaml-to-toml/yaml-to-toml.vue @@ -0,0 +1,28 @@ + + +