{"_id":"@cepharum/yaml-merge","name":"@cepharum/yaml-merge","dist-tags":{"latest":"1.0.0"},"versions":{"1.0.0":{"name":"@cepharum/yaml-merge","version":"1.0.0","description":"Merge multiple YAML files into one and export the result as JSON","type":"module","main":"src/index.js","bin":{"yaml-merge":"cli.js"},"scripts":{"test":"vitest run","lint":"eslint src cli.js","lint:fix":"eslint src cli.js --fix"},"keywords":["yaml","json","merge","config","cli"],"license":"MIT","engines":{"node":">=14"},"publishConfig":{"access":"public"},"dependencies":{"js-yaml":"^4.1.1"},"devDependencies":{"eslint":"^9.39.4","eslint-config-cepharum":"^2.0.2","vitest":"^4.1.4"},"gitHead":"b2bf998621d2ff9df0c3a383414efd0186881753","_id":"@cepharum/yaml-merge@1.0.0","_nodeVersion":"25.2.1","_npmVersion":"11.6.2","dist":{"integrity":"sha512-gN1hJTOs+wLyYeIEONws4KSDPN1LArlSuAMSGBb5p+SwmduI8bXXJ2lfW8Dil+uMFJdr7pVE/mud0IglLxLXRQ==","shasum":"0b8c04596e9190a7e20a1ef481d539818e1ad9d4","tarball":"https://registry.npmjs.org/@cepharum/yaml-merge/-/yaml-merge-1.0.0.tgz","fileCount":5,"unpackedSize":13103,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIQD7p+qq2Y5PMDYbtv0+hm+Vau7UUOuU7wtCNN85l0RosgIgSziDR2c+/qv5rd/6uv9jPwNAJOR5mp3Fgj7OXWu9YRQ="}]},"_npmUser":{"name":"simon.friedo","email":"friedosimon@aol.com"},"directories":{},"maintainers":[{"name":"soletan","email":"thomas.urban@cepharum.de"},{"name":"simon.friedo","email":"friedosimon@aol.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/yaml-merge_1.0.0_1776673384972_0.11402566797011415"},"_hasShrinkwrap":false}},"time":{"created":"2026-04-20T08:23:04.877Z","1.0.0":"2026-04-20T08:23:05.102Z","modified":"2026-04-20T08:23:05.343Z"},"maintainers":[{"name":"soletan","email":"thomas.urban@cepharum.de"},{"name":"simon.friedo","email":"friedosimon@aol.com"}],"description":"Merge multiple YAML files into one and export the result as JSON","keywords":["yaml","json","merge","config","cli"],"license":"MIT","readme":"# yaml-merge\n\nMerge multiple YAML files into one and export the result as JSON.\n\nFiles are merged **left to right** — later files override earlier ones for conflicting keys. Nested objects are deep-merged; arrays are replaced wholesale.\n\n## Install\n\n```bash\nnpm install @cepharum/yaml-merge\n# or globally, for the CLI:\nnpm install -g @cepharum/yaml-merge\n```\n\n## CLI\n\n```bash\nyaml-merge [options] file1.yaml file2.yaml [file3.yaml ...]\n```\n\n**Options**\n\n| Flag | Description |\n|---|---|\n| `-o, --output <path>` | Write JSON to a file instead of stdout |\n| `-c, --compact` | Minified JSON output (no indentation) |\n| `-h, --help` | Show help |\n\n**Examples**\n\n```bash\n# Print merged JSON to stdout\nyaml-merge base.yaml override.yaml\n\n# Save to a file\nyaml-merge base.yaml override.yaml --output merged.json\n\n# Minified\nyaml-merge base.yaml override.yaml --compact\n```\n\n## Programmatic API\n\n```js\nconst {\n  mergeFiles,           // file paths → JS object (resolves $import)\n  mergeFilesToJson,     // file paths → JSON string (resolves $import)\n  mergeStrings,         // YAML strings → JS object\n  mergeStringsToJson,   // YAML strings → JSON string\n  loadFileWithImports,  // single file → JS object (resolves $import recursively)\n} = require('@cepharum/yaml-merge');\n\n// From files\nconst obj = mergeFiles(['base.yaml', 'override.yaml']);\nconst json = mergeFilesToJson(['base.yaml', 'override.yaml'], { space: 2 });\n\n// From strings\nconst obj2 = mergeStrings(['key: value', 'key: overridden']);\nconst json2 = mergeStringsToJson(['key: value'], { space: 0 }); // compact\n```\n\n### `mergeFiles(filePaths)`\n\nReads and deep-merges an array of YAML file paths. Returns a plain JS object.\n\n### `mergeFilesToJson(filePaths, jsonOptions?)`\n\nSame as `mergeFiles`, but returns a JSON string. `jsonOptions` is forwarded to `JSON.stringify` — use `{ space: 2 }` (default) for pretty output or `{ space: 0 }` for compact.\n\n### `mergeStrings(yamlStrings)`\n\nParses and deep-merges an array of raw YAML strings. Returns a plain JS object.\n\n### `mergeStringsToJson(yamlStrings, jsonOptions?)`\n\nSame as `mergeStrings`, but returns a JSON string.\n\n### `loadFileWithImports(filePath)`\n\nLoads a single YAML file, recursively resolving any `$import` directives. Returns a plain JS object. Useful when you want to load one entry-point file that pulls everything else in via `$import` rather than passing all files explicitly to `mergeFiles`.\n\n## File imports\n\nA YAML file can pull in other YAML files using the `$import` key. Imports are merged first; the importing file's own keys override them.\n\n```yaml\n# defaults.yaml\nserver:\n  host: localhost\n  port: 3000\ndebug: false\n```\n\n```yaml\n# production.yaml\n$import: ./defaults.yaml\n\nserver:\n  port: 8080\ndebug: true\n```\n\nLoading `production.yaml` is equivalent to merging `defaults.yaml` then `production.yaml`:\n\n```json\n{\n  \"server\": {\n    \"host\": \"localhost\",\n    \"port\": 8080\n  },\n  \"debug\": true\n}\n```\n\n`$import` accepts a single path or a list merged in order:\n\n```yaml\n$import:\n  - ./base.yaml\n  - ./region-overrides.yaml\n\nname: my-service\n```\n\nImports are resolved relative to the importing file, so files can live in different directories. Nested imports work too — an imported file can itself declare `$import`. Circular imports are detected and raise an error.\n\n`$import` is stripped from the output and never appears in the merged result.\n\n## Merge behaviour\n\nGiven these two files:\n\n```yaml\n# base.yaml\nserver:\n  host: localhost\n  port: 3000\ntags: [alpha, beta]\n```\n\n```yaml\n# override.yaml\nserver:\n  port: 8080\ntags: [production]\ndebug: false\n```\n\nThe result is:\n\n```json\n{\n  \"server\": {\n    \"host\": \"localhost\",\n    \"port\": 8080\n  },\n  \"tags\": [\"production\"],\n  \"debug\": false\n}\n```\n\nNested objects (`server`) are deep-merged. Arrays (`tags`) are replaced by the later value.\n\n## License\n\nMIT\n","readmeFilename":"README.md","_rev":"1-32a94cb2dd75ae977781fdda247902df"}