diff --git a/src/tools/yaml-to-json-converter/yaml-to-json.e2e.spec.ts b/src/tools/yaml-to-json-converter/yaml-to-json.e2e.spec.ts index 7b2a2d18..d6ed84c3 100644 --- a/src/tools/yaml-to-json-converter/yaml-to-json.e2e.spec.ts +++ b/src/tools/yaml-to-json-converter/yaml-to-json.e2e.spec.ts @@ -28,4 +28,53 @@ test.describe('Tool - Yaml to json', () => { `.trim(), ); }); + + test('Yaml is parsed with merge key and output correct json', async ({ page }) => { + await page.getByTestId('input').fill(` + default: &default + name: '' + age: 0 + + person: + *default + + persons: + - <<: *default + age: 1 + - <<: *default + name: John + - { age: 3, <<: *default } + + `); + + const generatedJson = await page.getByTestId('area-content').innerText(); + + expect(generatedJson.trim()).toEqual( + ` +{ + "default": { + "name": "", + "age": 0 + }, + "person": { + "name": "", + "age": 0 + }, + "persons": [ + { + "name": "", + "age": 1 + }, + { + "name": "John", + "age": 0 + }, + { + "age": 3, + "name": "" + } + ] +}`.trim(), + ); + }); }); diff --git a/src/tools/yaml-to-json-converter/yaml-to-json.vue b/src/tools/yaml-to-json-converter/yaml-to-json.vue index 39c9297f..72608add 100644 --- a/src/tools/yaml-to-json-converter/yaml-to-json.vue +++ b/src/tools/yaml-to-json-converter/yaml-to-json.vue @@ -6,7 +6,7 @@ import { withDefaultOnError } from '@/utils/defaults'; function transformer(value: string) { return withDefaultOnError(() => { - const obj = parseYaml(value); + const obj = parseYaml(value, { merge: true }); return obj ? JSON.stringify(obj, null, 3) : ''; }, ''); }