{"_id":"@adameisfeld/mustachr","_rev":"6-23320d7b2c6496d06ff70b39359a0ae2","name":"@adameisfeld/mustachr","dist-tags":{"latest":"0.0.6"},"versions":{"0.0.1":{"name":"@adameisfeld/mustachr","version":"0.0.1","keywords":["mustache","template","regex"],"author":{"name":"Adam Eisfeld","email":"adam.eisfeld@gmail.com"},"license":"MIT","_id":"@adameisfeld/mustachr@0.0.1","maintainers":[{"name":"adameisfeld","email":"adam.eisfeld@gmail.com"}],"homepage":"https://github.com/AdamEisfeld/workhar-playhar/tree/main/packages/mustachr#readme","bugs":{"url":"https://github.com/AdamEisfeld/workhar-playhar/issues"},"bin":{"mustachr":"dist/cli.js"},"dist":{"shasum":"44ab715ebb96ed63335903f42f892b62b84af23e","tarball":"https://registry.npmjs.org/@adameisfeld/mustachr/-/mustachr-0.0.1.tgz","fileCount":26,"integrity":"sha512-kqBoA6IRuxI9y2Jopf54Yx2eZeVt5jLOZHOu5vuDjo+OwIm4zWxjD6vE1NPeZ2DZMfLfaMf89SqyseEhmIjfLw==","signatures":[{"sig":"MEQCIDFDcbEGELmkBCybv4+3tvwocFlSFrCuLItE9IQJj9D9AiB9Tf+luNY5+fUFShDwkqQHedcyLocVTvMyovSqm4wkIw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":60743},"main":"./dist/mustachr.js","type":"module","types":"./dist/mustachr.d.ts","exports":{".":{"types":"./dist/mustachr.d.ts","import":"./dist/mustachr.js"}},"gitHead":"e053ce35ef61f00ad5c87fdddc378ce1abae715a","scripts":{"dev":"vitest","lint":"eslint .","test":"vitest run --coverage","build":"tsc -p tsconfig.build.json","format":"eslint --fix"},"_npmUser":{"name":"adameisfeld","email":"adam.eisfeld@gmail.com"},"repository":{"url":"git+https://github.com/AdamEisfeld/workhar-playhar.git","type":"git","directory":"packages/mustachr"},"_npmVersion":"11.0.0","description":"Extract hardcoded values from files and replace them with mustache-style template variables. Ideal for sanitizing secrets in HAR files and other structured text.","directories":{},"_nodeVersion":"23.6.0","dependencies":{"zod":"^3.24.2","dotenv":"^16.5.0","commander":"^13.1.0"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.19.3","vitest":"^3.1.1","ts-node":"^10.9.2","typescript":"^5.8.3","@types/node":"^22.14.1","@vitest/coverage-v8":"^3.1.1","@adameisfeld/test-utils":"*"},"_npmOperationalInternal":{"tmp":"tmp/mustachr_0.0.1_1745607797460_0.5450974960118602","host":"s3://npm-registry-packages-npm-production"}},"0.0.2":{"name":"@adameisfeld/mustachr","version":"0.0.2","keywords":["mustache","template","regex"],"author":{"name":"Adam Eisfeld","email":"adam.eisfeld@gmail.com"},"license":"MIT","_id":"@adameisfeld/mustachr@0.0.2","maintainers":[{"name":"adameisfeld","email":"adam.eisfeld@gmail.com"}],"homepage":"https://github.com/AdamEisfeld/workhar-playhar/tree/main/packages/mustachr#readme","bugs":{"url":"https://github.com/AdamEisfeld/workhar-playhar/issues"},"bin":{"mustachr":"dist/cli.js"},"dist":{"shasum":"8dbd899e4091e6a786dbaedb8a8cd80adcc069f3","tarball":"https://registry.npmjs.org/@adameisfeld/mustachr/-/mustachr-0.0.2.tgz","fileCount":26,"integrity":"sha512-NpWtauGeLI8V/fh+MhGw4y41APHUz+5JT03rfel6M6GslIZhZAOsxWr56dbK8qTDXnccf3ORBB5H4951BgFbKA==","signatures":[{"sig":"MEUCIGrTAinYfvQKmkchxRygX8qu32Vl/w+vvWn1wj24Xm/7AiEAkVy84aGa/yeFmw4F7ynxc1aSHrK/DsRkgO7SGSMY84M=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":60842},"main":"./dist/mustachr.js","type":"module","types":"./dist/mustachr.d.ts","exports":{".":{"types":"./dist/mustachr.d.ts","import":"./dist/mustachr.js"}},"gitHead":"4d0a269ff73df6b8dcf03c665570f8ce300437a3","scripts":{"dev":"vitest","lint":"eslint .","test":"vitest run --coverage","build":"tsc -p tsconfig.build.json","format":"eslint --fix","preversion":"npm run test && npm run lint && npm run build","postversion":"git add ."},"_npmUser":{"name":"adameisfeld","email":"adam.eisfeld@gmail.com"},"repository":{"url":"git+https://github.com/AdamEisfeld/workhar-playhar.git","type":"git","directory":"packages/mustachr"},"_npmVersion":"11.0.0","description":"Extract hardcoded values from files and replace them with mustache-style template variables. Ideal for sanitizing secrets in HAR files and other structured text.","directories":{},"_nodeVersion":"23.6.0","dependencies":{"zod":"^3.24.2","dotenv":"^16.5.0","commander":"^13.1.0"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.19.3","vitest":"^3.1.1","ts-node":"^10.9.2","typescript":"^5.8.3","@types/node":"^22.14.1","@vitest/coverage-v8":"^3.1.1","@adameisfeld/test-utils":"*"},"_npmOperationalInternal":{"tmp":"tmp/mustachr_0.0.2_1745609759980_0.9817551340674839","host":"s3://npm-registry-packages-npm-production"}},"0.0.3":{"name":"@adameisfeld/mustachr","version":"0.0.3","keywords":["mustache","template","regex"],"author":{"name":"Adam Eisfeld","email":"adam.eisfeld@gmail.com"},"license":"MIT","_id":"@adameisfeld/mustachr@0.0.3","maintainers":[{"name":"adameisfeld","email":"adam.eisfeld@gmail.com"}],"homepage":"https://github.com/AdamEisfeld/workhar-playhar/tree/main/packages/mustachr#readme","bugs":{"url":"https://github.com/AdamEisfeld/workhar-playhar/issues"},"bin":{"mustachr":"dist/cli.js"},"dist":{"shasum":"e04fd047be3ee2e3ff04e7be4dbc28fa5402a52e","tarball":"https://registry.npmjs.org/@adameisfeld/mustachr/-/mustachr-0.0.3.tgz","fileCount":26,"integrity":"sha512-kycjEcnHBLVBcrEl7nDeCszPqiCFaPn9CHEKYsaAd/flHozzje42f4x/1jG2TcckkBEARdu900N2WX5STSLUNQ==","signatures":[{"sig":"MEYCIQCb/K6joQ62XUWk7CU9GgK4MkILxIre1+eMiaVYRXUH7AIhAMv3ShiLjLM67/dIQah75Rm38Q8Fj7GYbEkBAPNF/Isa","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":61008},"main":"./dist/mustachr.js","type":"module","types":"./dist/mustachr.d.ts","exports":{".":{"types":"./dist/mustachr.d.ts","import":"./dist/mustachr.js"}},"gitHead":"f7ec94262964cbbd68c3abee33716da7d1c3c23a","scripts":{"dev":"vitest","lint":"eslint .","test":"vitest run --coverage","build":"tsc -p tsconfig.build.json","format":"eslint --fix","preversion":"npm run test && npm run lint && npm run build","postversion":"git add ."},"_npmUser":{"name":"adameisfeld","email":"adam.eisfeld@gmail.com"},"repository":{"url":"git+https://github.com/AdamEisfeld/workhar-playhar.git","type":"git","directory":"packages/mustachr"},"_npmVersion":"11.0.0","description":"Extract hardcoded values from files and replace them with mustache-style template variables. Ideal for sanitizing secrets in HAR files and other structured text.","directories":{},"_nodeVersion":"23.6.0","dependencies":{"zod":"^3.24.2","dotenv":"^16.5.0","commander":"^13.1.0"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.19.3","vitest":"^3.1.1","ts-node":"^10.9.2","typescript":"^5.8.3","@types/node":"^22.14.1","@vitest/coverage-v8":"^3.1.1","@adameisfeld/test-utils":"*"},"_npmOperationalInternal":{"tmp":"tmp/mustachr_0.0.3_1745610232538_0.6739134212114852","host":"s3://npm-registry-packages-npm-production"}},"0.0.4":{"name":"@adameisfeld/mustachr","version":"0.0.4","keywords":["mustache","template","regex"],"author":{"name":"Adam Eisfeld","email":"adam.eisfeld@gmail.com"},"license":"MIT","_id":"@adameisfeld/mustachr@0.0.4","maintainers":[{"name":"adameisfeld","email":"adam.eisfeld@gmail.com"}],"homepage":"https://github.com/AdamEisfeld/workhar-playhar/tree/main/packages/mustachr#readme","bugs":{"url":"https://github.com/AdamEisfeld/workhar-playhar/issues"},"bin":{"mustachr":"dist/cli.js"},"dist":{"shasum":"d69f1d347a14669888a6704539112b1acae8bb2f","tarball":"https://registry.npmjs.org/@adameisfeld/mustachr/-/mustachr-0.0.4.tgz","fileCount":26,"integrity":"sha512-2JdWKuGr6ZNskDCtX+S8LA8kD4VF8gTT/226p47f+4Uh0dCeisji2EOwnCl+z41TbROuTaFfCNSspleAyMA4BA==","signatures":[{"sig":"MEQCIQDQMzQRpxgtPhBQKcCaw5O6IsiCr5z9rXeILcKAS2hp4wIfEMSzP/DV3h/Cw2GQXwhsUvcj3BMmigbdXDm0PypNNg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":61095},"main":"./dist/mustachr.js","type":"module","types":"./dist/mustachr.d.ts","exports":{".":{"types":"./dist/mustachr.d.ts","import":"./dist/mustachr.js"}},"gitHead":"113491e81be6dc0fb44ae509ccd5240dcb777313","scripts":{"dev":"vitest","lint":"eslint .","test":"vitest run --coverage","build":"tsc -p tsconfig.build.json","format":"eslint --fix","preversion":"npm run test && npm run lint && npm run build","postversion":"git add ."},"_npmUser":{"name":"adameisfeld","email":"adam.eisfeld@gmail.com"},"repository":{"url":"git+https://github.com/AdamEisfeld/workhar-playhar.git","type":"git","directory":"packages/mustachr"},"_npmVersion":"11.0.0","description":"Extract hardcoded values from files and replace them with mustache-style template variables. Ideal for sanitizing secrets in HAR files and other structured text.","directories":{},"_nodeVersion":"23.6.0","dependencies":{"zod":"^3.24.2","dotenv":"^16.5.0","commander":"^13.1.0"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.19.3","vitest":"^3.1.1","ts-node":"^10.9.2","typescript":"^5.8.3","@types/node":"^22.14.1","@vitest/coverage-v8":"^3.1.1","@adameisfeld/test-utils":"*"},"_npmOperationalInternal":{"tmp":"tmp/mustachr_0.0.4_1745611159680_0.22838865340563808","host":"s3://npm-registry-packages-npm-production"}},"0.0.5":{"name":"@adameisfeld/mustachr","version":"0.0.5","keywords":["mustache","template","regex"],"author":{"name":"Adam Eisfeld","email":"adam.eisfeld@gmail.com"},"license":"MIT","_id":"@adameisfeld/mustachr@0.0.5","maintainers":[{"name":"adameisfeld","email":"adam.eisfeld@gmail.com"}],"homepage":"https://github.com/AdamEisfeld/workhar-playhar/tree/main/packages/mustachr#readme","bugs":{"url":"https://github.com/AdamEisfeld/workhar-playhar/issues"},"bin":{"mustachr":"dist/cli.js"},"dist":{"shasum":"7c46e8a833ee411661976f48de96479c486a192a","tarball":"https://registry.npmjs.org/@adameisfeld/mustachr/-/mustachr-0.0.5.tgz","fileCount":26,"integrity":"sha512-RsQfCX4HZ5gepuoGb37M0NvNscHB1u5IvHecBNwq6505xwbqajaBWbsBhGYtTU01Lwa8butDxP55xp8KbDVH6w==","signatures":[{"sig":"MEQCIFtCXDRJA+mCD33gl62SksUeI0YiQ9mmwkylBPHqUWkfAiBaLVuYq3kSQhcJuTdSSgciCeArJCF8gBK3F6ocw1BCmw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":61030},"main":"./dist/mustachr.js","type":"module","types":"./dist/mustachr.d.ts","exports":{".":{"types":"./dist/mustachr.d.ts","import":"./dist/mustachr.js"}},"gitHead":"71575d06b3304338fdd3df3982c6340b4eecd6b4","scripts":{"dev":"vitest","lint":"eslint .","test":"vitest run --coverage","build":"tsc -p tsconfig.build.json","format":"eslint --fix","preversion":"npm run test && npm run lint && npm run build","postversion":"git add ."},"_npmUser":{"name":"adameisfeld","email":"adam.eisfeld@gmail.com"},"repository":{"url":"git+https://github.com/AdamEisfeld/workhar-playhar.git","type":"git","directory":"packages/mustachr"},"_npmVersion":"11.0.0","description":"Extract hardcoded values from files and replace them with mustache-style template variables. Ideal for sanitizing secrets in HAR files and other structured text.","directories":{},"_nodeVersion":"23.6.0","dependencies":{"zod":"^3.24.2","dotenv":"^16.5.0","commander":"^13.1.0"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.19.3","vitest":"^3.1.1","ts-node":"^10.9.2","typescript":"^5.8.3","@types/node":"^22.14.1","@vitest/coverage-v8":"^3.1.1","@adameisfeld/test-utils":"*"},"_npmOperationalInternal":{"tmp":"tmp/mustachr_0.0.5_1749569079805_0.6591348782758351","host":"s3://npm-registry-packages-npm-production"}},"0.0.6":{"name":"@adameisfeld/mustachr","version":"0.0.6","description":"Extract hardcoded values from files and replace them with mustache-style template variables. Ideal for sanitizing secrets in HAR files and other structured text.","keywords":["mustache","template","regex"],"author":{"name":"Adam Eisfeld","email":"adam.eisfeld@gmail.com"},"license":"MIT","repository":{"type":"git","url":"git+https://github.com/AdamEisfeld/workhar-playhar.git","directory":"packages/mustachr"},"homepage":"https://github.com/AdamEisfeld/workhar-playhar/tree/main/packages/mustachr#readme","type":"module","main":"./dist/mustachr.js","types":"./dist/mustachr.d.ts","exports":{".":{"import":"./dist/mustachr.js","types":"./dist/mustachr.d.ts"}},"bin":{"mustachr":"dist/cli.js"},"scripts":{"build":"tsc -p tsconfig.build.json","test":"vitest run --coverage","dev":"vitest","lint":"eslint .","format":"eslint --fix","preversion":"npm run test && npm run lint && npm run build","postversion":"git add ."},"dependencies":{"commander":"^13.1.0","dotenv":"^16.5.0","zod":"^3.24.2"},"devDependencies":{"@types/node":"^22.14.1","@vitest/coverage-v8":"^3.1.1","ts-node":"^10.9.2","tsx":"^4.19.3","typescript":"^5.8.3","vitest":"^3.1.1","@adameisfeld/test-utils":"*"},"_id":"@adameisfeld/mustachr@0.0.6","gitHead":"50cde2ca81a07d10864060d1c34d962906c22aaa","bugs":{"url":"https://github.com/AdamEisfeld/workhar-playhar/issues"},"_nodeVersion":"23.6.0","_npmVersion":"11.0.0","dist":{"integrity":"sha512-8FdZAckaW68Ns89wGujhXP7Evqwn1Gac+hHU6h6H/dLrTpugHgy1SoNSiMpIwNDIKKwUvRKk/c5zCWCcFgQtnQ==","shasum":"b2c924c83ca8c66946327bda86e1b9c299ea9d1d","tarball":"https://registry.npmjs.org/@adameisfeld/mustachr/-/mustachr-0.0.6.tgz","fileCount":26,"unpackedSize":61042,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEYCIQCn2N/5JKC/d4JK6q1LaXj9y/mNsyoeuYHCVslNhfJrogIhAKhDg3OBG25U9dgF6ZoGgAOxNlV9pF5TjhReL7REdlpR"}]},"_npmUser":{"name":"adameisfeld","email":"adam.eisfeld@gmail.com"},"directories":{},"maintainers":[{"name":"adameisfeld","email":"adam.eisfeld@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/mustachr_0.0.6_1750084619862_0.35222595334185725"},"_hasShrinkwrap":false}},"time":{"created":"2025-04-25T19:03:17.307Z","modified":"2025-06-16T14:37:00.217Z","0.0.1":"2025-04-25T19:03:17.644Z","0.0.2":"2025-04-25T19:36:00.196Z","0.0.3":"2025-04-25T19:43:52.958Z","0.0.4":"2025-04-25T19:59:19.876Z","0.0.5":"2025-06-10T15:24:40.004Z","0.0.6":"2025-06-16T14:37:00.040Z"},"bugs":{"url":"https://github.com/AdamEisfeld/workhar-playhar/issues"},"author":{"name":"Adam Eisfeld","email":"adam.eisfeld@gmail.com"},"license":"MIT","homepage":"https://github.com/AdamEisfeld/workhar-playhar/tree/main/packages/mustachr#readme","keywords":["mustache","template","regex"],"repository":{"type":"git","url":"git+https://github.com/AdamEisfeld/workhar-playhar.git","directory":"packages/mustachr"},"description":"Extract hardcoded values from files and replace them with mustache-style template variables. Ideal for sanitizing secrets in HAR files and other structured text.","maintainers":[{"name":"adameisfeld","email":"adam.eisfeld@gmail.com"}],"readme":"# Mustachr 🥸\n\n**Mustachr** is a lightweight, open-source CLI and TypeScript library for extracting and injecting values in structured files using Mustache-style templates.\n\nIt lets you sanitize sensitive data by replacing it with template tokens, or inject dynamic values into templated files. mustachr is especially useful for test fixture sanitization, API mocking, and configuration management.\n\n---\n\n## Installation\n\n```bash\nnpm install --save-dev mustachr\n```\n\nOr globally for CLI use:\n\n```bash\nnpm install -g mustachr\n```\n\n---\n\n## Concepts\n\nMustachr supports two primary operations:\n\n- **Extraction**: Replaces matching values in a file with `{{ TOKEN }}` placeholders\n- **Injection**: Replaces `{{ TOKEN }}` placeholders with actual values\n\n---\n\n## Example\n\n### Input file (`example.txt`)\n\n```json\n{\n  \"apiKey\": \"SuperSecret123\",\n  \"user\": \"admin\"\n}\n```\n\n### Extractions file (`mustachr.extractions.ts`)\n\n```ts\nimport { defineExtractions } from '@adameisfeld/mustachr';\n\nexport default defineExtractions([\n  {\n    type: 'string',\n    property: 'API_KEY',\n    search: 'SuperSecret123',\n    replace: '{{ property }}',\n  },\n]);\n```\n\n### After Extraction\n\n```json\n{\n  \"apiKey\": \"{{ API_KEY }}\",\n  \"user\": \"admin\"\n}\n```\n\n### Injections file (`mustachr.injections.ts`)\n\n```ts\nimport { defineInjections } from '@adameisfeld/mustachr';\n\nexport default defineInjections({\n  API_KEY: 'Mocked1234'\n});\n```\n\n### After Injection\n\n```json\n{\n  \"apiKey\": \"Mocked1234\",\n  \"user\": \"admin\"\n}\n```\n\n---\n\n## Configuration 🛠️\n\nMustachr uses two configuration files:\n\n- **Extractions File**: Defines how values should be matched and replaced (for sanitization)\n- **Injections File**: Defines values to replace `{{ tokens }}` (for hydration)\n\nThese can be written as `.ts`, `.js`, or `.json` files and exported using `defineExtractions()` or `defineInjections()`:\n\n```ts\n// mustachr.extractions.ts\nimport { defineExtractions } from '@adameisfeld/mustachr';\n\nexport default defineExtractions([ /* extractions here */ ]);\n```\n\n```ts\n// mustachr.injections.ts\nimport { defineInjections } from '@adameisfeld/mustachr';\n\nexport default defineInjections({ /* injections here */ });\n```\n\nThe CLI will automatically pick up these files if named:\n\n- `mustachr.extractions.ts|js|json`\n- `mustachr.injections.ts|js|json`\n\nOr you can specify them manually via `--extractions` and `--injections`.\n\n---\n\n## Extraction Types\n\nmustachr supports three types of extractions: `string`, `regex`, and `env`.\n\n### `string 🔤` Extraction\n\nMatches exact string values and replaces them with tokens.\n\n```ts\n{\n  type: 'string',\n  property: 'API_KEY',\n  search: 'SuperSecret123',\n  replace: '{{ property }}'\n}\n```\n\nReplaces `\"SuperSecret123\"` with `{{ API_KEY }}`\n\n---\n\n### `regex 🧪` Extraction\n\nMatches patterns using regular expressions.\n\n```ts\n{\n  type: 'regex',\n  property: 'TOKEN',\n  search: 'token=[a-zA-Z0-9]+',\n  replace: 'token={{ property }}'\n}\n```\n\nReplaces `\"token=abcd1234\"` with `\"token={{ TOKEN }}\"`\n\n---\n\n### `env 📦` Extraction\n\nReads values from a `.env` file and replaces matching values in the target file.\n\n```ts\n{\n  type: 'env',\n  path: './.env'\n}\n```\n\nIf `.env` contains:\n\n```env\nAPI_KEY=SuperSecret123\nDB_PASSWORD=Hunter2\n```\n\nThen any matching strings in the input file are replaced with `{{ API_KEY }}` and `{{ DB_PASSWORD }}` respectively.\n\n\n---\n\n## CLI Usage\n\nYou can use mustachr from the command line to extract or inject values in any file:\n\n```bash\nmustachr extract <file> [options]\nmustachr inject <file> [options]\n```\n\n### Extract Example\n\n```bash\nmustachr extract ./example.txt --extractions ./mustachr.extractions.ts --out ./output.txt\n```\n\n### Inject Example\n\n```bash\nmustachr inject ./output.txt --injections ./mustachr.injections.ts --out ./hydrated.txt\n```\n\n> If `--extractions` or `--injections` are omitted, mustachr will look for default files like `mustachr.extractions.ts` in the current directory.\n\n---\n\n## Programmatic API\n\nYou can use mustachr directly in code:\n\n```ts\nimport { extract, inject, defineExtractions, defineInjections } from '@adameisfeld/mustachr';\n\nconst sanitized = await extract({\n  input: 'key=SuperSecret123',\n  extractions: defineExtractions([\n    {\n      type: 'string',\n      property: 'API_KEY',\n      search: 'SuperSecret123',\n      replace: '{{ property }}',\n    },\n  ]),\n});\n\nconst hydrated = inject({\n  input: sanitized,\n  injections: defineInjections({ API_KEY: 'Mocked1234' }),\n});\n```\n\n---\n\n## Testing\n\nMustachr is fully covered with unit tests using [Vitest](https://vitest.dev/):\n\n```bash\nnpm run test\n```\n\n---\n\n## Use Cases\n\n- Redacting secrets in HAR files or other structured test artifacts\n- Injecting dynamic data into mock API responses\n- Generating reproducible test fixtures\n- Cleaning up sensitive config before sharing\n\n---\n\n## License\n\nMIT © 2025\n","readmeFilename":"README.md"}