{"_id":"@bernierllc/openapi-merger","_rev":"8-904af06e189302445f30c8a60cf4d893","name":"@bernierllc/openapi-merger","dist-tags":{"latest":"1.5.0"},"versions":{"0.1.1":{"name":"@bernierllc/openapi-merger","version":"0.1.1","keywords":["openapi","merge","deduplication","api","specification"],"author":{"name":"Bernier LLC"},"license":"UNLICENSED","_id":"@bernierllc/openapi-merger@0.1.1","maintainers":[{"name":"alikhan410","email":"mczeyo@gmail.com"},{"name":"mkbernier","email":"mkbernier@gmail.com"}],"homepage":"https://github.com/bernierllc/tools#readme","bugs":{"url":"https://github.com/bernierllc/tools/issues"},"dist":{"shasum":"d5b623caa81cde45fad2b5bcd528ece2aff477e5","tarball":"https://registry.npmjs.org/@bernierllc/openapi-merger/-/openapi-merger-0.1.1.tgz","fileCount":54,"integrity":"sha512-HQoKgeFMYvF5j/7XZBXjbgBPKb/SKgqnpDey0H8hPn1V8Gfw4+3P+LDHpGhsQxkBBzw9jaRKphfH4SL2KQP1QQ==","signatures":[{"sig":"MEUCIHmgzX/byNO4er4C8XY4nW3xVR8ctTI61+VbbLakoR15AiEAgQqN9LdCFCGb1tKasCSZTDy3ACNpYu8FRsdU0Q1JtLM=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":106459},"main":"dist/index.js","types":"dist/index.d.ts","gitHead":"733e19af4ccc11a73fc5a59cb7355fe345e61f5a","scripts":{"dev":"tsc --watch","lint":"eslint src --ext .ts","test":"jest","build":"tsc","clean":"rm -rf dist","lint:fix":"eslint src --ext .ts --fix","test:run":"jest","test:coverage":"jest --coverage"},"_npmUser":{"name":"mkbernier","email":"mkbernier@gmail.com"},"repository":{"url":"git+https://github.com/bernierllc/tools.git","type":"git","directory":"packages/core/openapi-merger"},"_npmVersion":"11.4.2","description":"OpenAPI specification merging, deduplication, and conflict resolution utilities","directories":{},"_nodeVersion":"24.4.1","dependencies":{},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^29.5.0","eslint":"^8.37.0","ts-jest":"^29.0.5","typescript":"^5.0.0","@types/jest":"^29.5.0","@types/node":"^18.15.0","@typescript-eslint/parser":"^5.57.0","@typescript-eslint/eslint-plugin":"^5.57.0"},"peerDependencies":{"@bernierllc/openapi-schema-builder":"^0.1.0"},"peerDependenciesMeta":{"@bernierllc/openapi-schema-builder":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/openapi-merger_0.1.1_1759948970016_0.18007180128542766","host":"s3://npm-registry-packages-npm-production"}},"1.0.1":{"name":"@bernierllc/openapi-merger","version":"1.0.1","keywords":["openapi","merge","deduplication","api","specification"],"author":{"name":"Bernier LLC"},"license":"UNLICENSED","_id":"@bernierllc/openapi-merger@1.0.1","maintainers":[{"name":"alikhan410","email":"mczeyo@gmail.com"},{"name":"mkbernier","email":"mkbernier@gmail.com"}],"homepage":"https://github.com/bernierllc/tools#readme","bugs":{"url":"https://github.com/bernierllc/tools/issues"},"dist":{"shasum":"ab073de769d50d0ee536361053ee27e1147adce0","tarball":"https://registry.npmjs.org/@bernierllc/openapi-merger/-/openapi-merger-1.0.1.tgz","fileCount":54,"integrity":"sha512-G8sDO1HgSLrVxysV1vU15pw6Ql4zkqlb96ALL1FvM04CCQFhIFSBpBHBITBd0EGPVpkbTUAEgwiEatOkJ/DomQ==","signatures":[{"sig":"MEYCIQDmtsKNDjmAfDOR57njnLUt+goz2lKxRXA2utLOvue35gIhAM9EqvTisAhG6YsVT8M8gD2szuIm354Sibr7Y6poB3Dj","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":106459},"main":"dist/index.js","types":"dist/index.d.ts","gitHead":"42c50cf6497a67e242474cb4839e54e339afe6e7","scripts":{"dev":"tsc --watch","lint":"eslint src --ext .ts","test":"jest","build":"tsc","clean":"rm -rf dist","lint:fix":"eslint src --ext .ts --fix","test:run":"jest","test:coverage":"jest --coverage"},"_npmUser":{"name":"mkbernier","email":"mkbernier@gmail.com"},"repository":{"url":"git+https://github.com/bernierllc/tools.git","type":"git","directory":"packages/core/openapi-merger"},"_npmVersion":"11.4.2","description":"OpenAPI specification merging, deduplication, and conflict resolution utilities","directories":{},"_nodeVersion":"24.4.1","dependencies":{},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^29.5.0","eslint":"^8.37.0","ts-jest":"^29.0.5","typescript":"^5.0.0","@types/jest":"^29.5.0","@types/node":"^18.15.0","@typescript-eslint/parser":"^5.57.0","@typescript-eslint/eslint-plugin":"^5.57.0"},"peerDependencies":{"@bernierllc/openapi-schema-builder":"^1.0.0"},"peerDependenciesMeta":{"@bernierllc/openapi-schema-builder":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/openapi-merger_1.0.1_1759971602307_0.5781416443556033","host":"s3://npm-registry-packages-npm-production"}},"1.2.0":{"name":"@bernierllc/openapi-merger","version":"1.2.0","keywords":["openapi","merge","deduplication","api","specification"],"author":{"name":"Bernier LLC"},"license":"UNLICENSED","_id":"@bernierllc/openapi-merger@1.2.0","maintainers":[{"name":"alikhan410","email":"mczeyo@gmail.com"},{"name":"mkbernier","email":"mkbernier@gmail.com"}],"homepage":"https://github.com/bernierllc/tools#readme","bugs":{"url":"https://github.com/bernierllc/tools/issues"},"dist":{"shasum":"774600a880b4a40735f5b97d9a705d27fce14485","tarball":"https://registry.npmjs.org/@bernierllc/openapi-merger/-/openapi-merger-1.2.0.tgz","fileCount":54,"integrity":"sha512-mY1lgiurkMwx838NNJQllKNHMlEO8bNUrAc1KKuQ/UGTlcLOIqrPSr3HBZMowLGu9+ll2haF+xL6W4ZErAYdyg==","signatures":[{"sig":"MEYCIQDQ02MjWN5DM5ayJUXpj6LIvBloYj2mVbfraSyEgB2EGgIhAPwkqBHf9A4l8wGDEmG+g/3d9Rr5jaLmEPe0q1DOqBu0","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":106541},"main":"dist/index.js","types":"dist/index.d.ts","gitHead":"af7e74b3715d56d3a193e1bb6743b337c2b0df6d","scripts":{"dev":"tsc --watch","lint":"eslint src --ext .ts","test":"jest","build":"tsc","clean":"rm -rf dist","lint:fix":"eslint src --ext .ts --fix","test:run":"jest","test:coverage":"jest --coverage"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:5b3f71b2-584a-4102-93b3-7ab2db294f74"}},"repository":{"url":"git+https://github.com/bernierllc/tools.git","type":"git","directory":"packages/core/openapi-merger"},"_npmVersion":"lerna/9.0.3/node@v20.19.6+x64 (linux)","description":"OpenAPI specification merging, deduplication, and conflict resolution utilities","directories":{},"_nodeVersion":"20.19.6","publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^29.5.0","eslint":"^8.37.0","ts-jest":"^29.0.5","typescript":"^5.0.0","@types/jest":"^29.5.0","@types/node":"^18.15.0","@typescript-eslint/parser":"^5.57.0","@typescript-eslint/eslint-plugin":"^5.57.0"},"peerDependencies":{"@bernierllc/openapi-schema-builder":"^1.0.0"},"peerDependenciesMeta":{"@bernierllc/openapi-schema-builder":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/openapi-merger_1.2.0_1767642315368_0.824196336747749","host":"s3://npm-registry-packages-npm-production"}},"1.2.1":{"name":"@bernierllc/openapi-merger","version":"1.2.1","keywords":["openapi","merge","deduplication","api","specification"],"author":{"name":"Bernier LLC"},"license":"UNLICENSED","_id":"@bernierllc/openapi-merger@1.2.1","maintainers":[{"name":"alikhan410","email":"mczeyo@gmail.com"},{"name":"mkbernier","email":"mkbernier@gmail.com"}],"homepage":"https://github.com/bernierllc/tools#readme","bugs":{"url":"https://github.com/bernierllc/tools/issues"},"dist":{"shasum":"07da08a39372266a0e02ec64216a7e09cf5be620","tarball":"https://registry.npmjs.org/@bernierllc/openapi-merger/-/openapi-merger-1.2.1.tgz","fileCount":54,"integrity":"sha512-XnpAwTmrTOwVLmBW+nynXO5kW1lEDg+e9wtRKv1Da9SFfoSy7x3QlKTQToEShhf4Trokva/uxix7yg0gYg01Zg==","signatures":[{"sig":"MEQCIBDcVzjFfzIrx1kNV2yqaN95nEn3BkyiRODh1ThbVy/QAiB/DEKPv7FSLkR7CcIgpqN+iRLMdRH+5TVqQP/lu+Wt4w==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":106483},"main":"dist/index.js","_from":"file:bernierllc-openapi-merger-1.2.1.tgz","types":"dist/index.d.ts","scripts":{"dev":"tsc --watch","lint":"eslint src --ext .ts","test":"jest","build":"tsc","clean":"rm -rf dist","lint:fix":"eslint src --ext .ts --fix","test:run":"jest","test:coverage":"jest --coverage"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:5b3f71b2-584a-4102-93b3-7ab2db294f74"}},"_resolved":"/tmp/0b2a0a92b8bc350b83f5eaa08c0d3367/bernierllc-openapi-merger-1.2.1.tgz","_integrity":"sha512-XnpAwTmrTOwVLmBW+nynXO5kW1lEDg+e9wtRKv1Da9SFfoSy7x3QlKTQToEShhf4Trokva/uxix7yg0gYg01Zg==","repository":{"url":"git+https://github.com/bernierllc/tools.git","type":"git","directory":"packages/core/openapi-merger"},"_npmVersion":"11.11.0","description":"OpenAPI specification merging, deduplication, and conflict resolution utilities","directories":{},"_nodeVersion":"20.20.0","publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^29.5.0","eslint":"^8.37.0","ts-jest":"^29.0.5","typescript":"^5.0.0","@types/jest":"^29.5.0","@types/node":"^18.15.0","@typescript-eslint/parser":"^5.57.0","@typescript-eslint/eslint-plugin":"^5.57.0"},"peerDependencies":{"@bernierllc/openapi-schema-builder":"^1.0.0"},"peerDependenciesMeta":{"@bernierllc/openapi-schema-builder":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/openapi-merger_1.2.1_1773078183419_0.955045504279254","host":"s3://npm-registry-packages-npm-production"}},"1.2.2":{"name":"@bernierllc/openapi-merger","version":"1.2.2","keywords":["openapi","merge","deduplication","api","specification"],"author":{"name":"Bernier LLC"},"license":"UNLICENSED","_id":"@bernierllc/openapi-merger@1.2.2","maintainers":[{"name":"alikhan410","email":"mczeyo@gmail.com"},{"name":"mkbernier","email":"mkbernier@gmail.com"}],"homepage":"https://github.com/bernierllc/tools#readme","bugs":{"url":"https://github.com/bernierllc/tools/issues"},"dist":{"shasum":"089364c9dee2456cbcb1a94201f8aa05a2083536","tarball":"https://registry.npmjs.org/@bernierllc/openapi-merger/-/openapi-merger-1.2.2.tgz","fileCount":54,"integrity":"sha512-WNmHpM67gV+UoaeF24T5JXMAiyYKV/fTjmro1o2mjsk0HLbadrmUa3fwUV2V+CZNTyBj3eGde2A1XqbkAJhBGQ==","signatures":[{"sig":"MEYCIQCL2lvy2CaddMOYsDKLShQ1s4HRbvt4Xc1VQxGS/8mI1AIhAJqmYNCO42OSU95qqETjVhJO5zT20jMWDxKot49MpSL7","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":106483},"main":"dist/index.js","_from":"file:bernierllc-openapi-merger-1.2.2.tgz","types":"dist/index.d.ts","scripts":{"dev":"tsc --watch","lint":"eslint src --ext .ts","test":"jest","build":"tsc","clean":"rm -rf dist","lint:fix":"eslint src --ext .ts --fix","test:run":"jest","test:coverage":"jest --coverage"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:5b3f71b2-584a-4102-93b3-7ab2db294f74"}},"_resolved":"/home/runner/work/tools/tools/packages/core/openapi-merger/bernierllc-openapi-merger-1.2.2.tgz","_integrity":"sha512-WNmHpM67gV+UoaeF24T5JXMAiyYKV/fTjmro1o2mjsk0HLbadrmUa3fwUV2V+CZNTyBj3eGde2A1XqbkAJhBGQ==","repository":{"url":"git+https://github.com/bernierllc/tools.git","type":"git","directory":"packages/core/openapi-merger"},"_npmVersion":"11.11.0","description":"OpenAPI specification merging, deduplication, and conflict resolution utilities","directories":{},"_nodeVersion":"20.20.0","publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^29.5.0","eslint":"^8.37.0","ts-jest":"^29.0.5","typescript":"^5.0.0","@types/jest":"^29.5.0","@types/node":"^18.15.0","@typescript-eslint/parser":"^5.57.0","@typescript-eslint/eslint-plugin":"^5.57.0"},"peerDependencies":{"@bernierllc/openapi-schema-builder":"^1.0.0"},"peerDependenciesMeta":{"@bernierllc/openapi-schema-builder":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/openapi-merger_1.2.2_1773163233632_0.875951256876246","host":"s3://npm-registry-packages-npm-production"}},"1.3.0":{"name":"@bernierllc/openapi-merger","version":"1.3.0","keywords":["openapi","merge","deduplication","api","specification"],"author":{"name":"Bernier LLC"},"license":"UNLICENSED","_id":"@bernierllc/openapi-merger@1.3.0","maintainers":[{"name":"alikhan410","email":"mczeyo@gmail.com"},{"name":"mkbernier","email":"mkbernier@gmail.com"}],"homepage":"https://github.com/bernierllc/tools#readme","bugs":{"url":"https://github.com/bernierllc/tools/issues"},"dist":{"shasum":"ee94de14686aa314ae893c4bfe0b3e8ac5f245ae","tarball":"https://registry.npmjs.org/@bernierllc/openapi-merger/-/openapi-merger-1.3.0.tgz","fileCount":54,"integrity":"sha512-yQbu3WpyL4+Wuihcw/F0GEh90Z67r8uxNZmxquzqR7bYcp82aQ5q+Pxs6Hzun/L0KbyiRB3NDpbUT+zwiWVmLQ==","signatures":[{"sig":"MEUCIGuckPMGbAs3ngyVKRczVcBzKTu+gXSTPm9mzygYy3EWAiEAii/IWZ6w+bp8cBGKqhsnK77TyhlLasjrf3Ms+N4Zz6E=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":106483},"main":"dist/index.js","_from":"file:bernierllc-openapi-merger-1.3.0.tgz","types":"dist/index.d.ts","scripts":{"dev":"tsc --watch","lint":"eslint src --ext .ts","test":"jest","build":"tsc","clean":"rm -rf dist","lint:fix":"eslint src --ext .ts --fix","test:run":"jest","test:coverage":"jest --coverage"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:5b3f71b2-584a-4102-93b3-7ab2db294f74"}},"_resolved":"/home/runner/work/tools/tools/packages/core/openapi-merger/bernierllc-openapi-merger-1.3.0.tgz","_integrity":"sha512-yQbu3WpyL4+Wuihcw/F0GEh90Z67r8uxNZmxquzqR7bYcp82aQ5q+Pxs6Hzun/L0KbyiRB3NDpbUT+zwiWVmLQ==","repository":{"url":"git+https://github.com/bernierllc/tools.git","type":"git","directory":"packages/core/openapi-merger"},"_npmVersion":"11.14.1","description":"OpenAPI specification merging, deduplication, and conflict resolution utilities","directories":{},"_nodeVersion":"20.20.2","publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^29.5.0","eslint":"^8.37.0","ts-jest":"^29.0.5","typescript":"^5.0.0","@types/jest":"^29.5.0","@types/node":"^18.15.0","@typescript-eslint/parser":"^5.57.0","@typescript-eslint/eslint-plugin":"^5.57.0"},"peerDependencies":{"@bernierllc/openapi-schema-builder":"^1.0.0"},"peerDependenciesMeta":{"@bernierllc/openapi-schema-builder":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/openapi-merger_1.3.0_1779241303139_0.19457385097820667","host":"s3://npm-registry-packages-npm-production"}},"1.4.0":{"name":"@bernierllc/openapi-merger","version":"1.4.0","keywords":["openapi","merge","deduplication","api","specification"],"author":{"name":"Bernier LLC"},"license":"UNLICENSED","_id":"@bernierllc/openapi-merger@1.4.0","maintainers":[{"name":"alikhan410","email":"mczeyo@gmail.com"},{"name":"mkbernier","email":"mkbernier@gmail.com"}],"homepage":"https://github.com/bernierllc/tools#readme","bugs":{"url":"https://github.com/bernierllc/tools/issues"},"dist":{"shasum":"af8adb8a4440b6a779f56fa8a15ccf908ef9c4a0","tarball":"https://registry.npmjs.org/@bernierllc/openapi-merger/-/openapi-merger-1.4.0.tgz","fileCount":58,"integrity":"sha512-RlFfk8nNh+wpBtEcWEznLRGsroK0USrdoWxP1JggwptsJcI3+yST+GiluKo8FygE+liWmQd8BFNwuxuexsM0Bw==","signatures":[{"sig":"MEQCIFEaBnflqbb8Atx7ZRM9Q77BhxBHeTurj0IOYUlK9l+HAiBNV5ew4DQ+1o+GUHIHc6FPRjyhG31KolrFyllwl6mmTA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":109688},"main":"dist/index.js","_from":"file:bernierllc-openapi-merger-1.4.0.tgz","types":"dist/index.d.ts","scripts":{"dev":"tsc --watch","lint":"eslint src --ext .ts","test":"jest","build":"tsc","clean":"rm -rf dist","lint:fix":"eslint src --ext .ts --fix","test:run":"jest","test:coverage":"jest --coverage"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:5b3f71b2-584a-4102-93b3-7ab2db294f74"}},"_resolved":"/home/runner/work/tools/tools/packages/core/openapi-merger/bernierllc-openapi-merger-1.4.0.tgz","_integrity":"sha512-RlFfk8nNh+wpBtEcWEznLRGsroK0USrdoWxP1JggwptsJcI3+yST+GiluKo8FygE+liWmQd8BFNwuxuexsM0Bw==","repository":{"url":"git+https://github.com/bernierllc/tools.git","type":"git","directory":"packages/core/openapi-merger"},"_npmVersion":"11.14.1","description":"OpenAPI specification merging, deduplication, and conflict resolution utilities","directories":{},"_nodeVersion":"20.20.2","publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^29.5.0","eslint":"^8.37.0","ts-jest":"^29.0.5","typescript":"^5.0.0","@types/jest":"^29.5.0","@types/node":"^18.15.0","@typescript-eslint/parser":"^5.57.0","@typescript-eslint/eslint-plugin":"^5.57.0"},"peerDependencies":{"@bernierllc/openapi-schema-builder":"^1.0.0"},"peerDependenciesMeta":{"@bernierllc/openapi-schema-builder":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/openapi-merger_1.4.0_1779243261371_0.7388723639460246","host":"s3://npm-registry-packages-npm-production"}},"1.5.0":{"name":"@bernierllc/openapi-merger","version":"1.5.0","description":"OpenAPI specification merging, deduplication, and conflict resolution utilities","main":"dist/index.js","types":"dist/index.d.ts","keywords":["openapi","merge","deduplication","api","specification"],"author":{"name":"Bernier LLC"},"license":"UNLICENSED","peerDependencies":{"@bernierllc/openapi-schema-builder":"^1.0.0"},"peerDependenciesMeta":{"@bernierllc/openapi-schema-builder":{"optional":true}},"devDependencies":{"@types/jest":"^29.5.0","@types/node":"^18.15.0","@typescript-eslint/eslint-plugin":"^5.57.0","@typescript-eslint/parser":"^5.57.0","eslint":"^8.37.0","jest":"^29.5.0","ts-jest":"^29.0.5","typescript":"^5.0.0"},"repository":{"type":"git","url":"git+https://github.com/bernierllc/tools.git","directory":"packages/core/openapi-merger"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"scripts":{"build":"tsc","dev":"tsc --watch","test":"jest","test:run":"jest","test:coverage":"jest --coverage","lint":"eslint src --ext .ts","lint:fix":"eslint src --ext .ts --fix","clean":"rm -rf dist"},"_id":"@bernierllc/openapi-merger@1.5.0","bugs":{"url":"https://github.com/bernierllc/tools/issues"},"homepage":"https://github.com/bernierllc/tools#readme","_integrity":"sha512-jSDY4FNlEnMjzzWwLY1R3p+0I0Hc/FuaeL3wlRrv2IcStcSgHV+ZDJv09yo9tQnt3x3y62RKyHiSAEBb/p7V5g==","_resolved":"/home/runner/work/tools/tools/packages/core/openapi-merger/bernierllc-openapi-merger-1.5.0.tgz","_from":"file:bernierllc-openapi-merger-1.5.0.tgz","_nodeVersion":"20.20.2","_npmVersion":"11.14.1","dist":{"integrity":"sha512-jSDY4FNlEnMjzzWwLY1R3p+0I0Hc/FuaeL3wlRrv2IcStcSgHV+ZDJv09yo9tQnt3x3y62RKyHiSAEBb/p7V5g==","shasum":"0d1f9e01c4e029077424aa86ed541a834296c50f","tarball":"https://registry.npmjs.org/@bernierllc/openapi-merger/-/openapi-merger-1.5.0.tgz","fileCount":58,"unpackedSize":109688,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIAJk9p4u5U/4UkD42eu3YvHT4veGcApBu3GDG6ZbL9/CAiEA8MMg87mcfupcBLNrF1D9/TAHeH0s+Qi+TfCQZodVcEI="}]},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:5b3f71b2-584a-4102-93b3-7ab2db294f74"}},"directories":{},"maintainers":[{"name":"alikhan410","email":"mczeyo@gmail.com"},{"name":"mkbernier","email":"mkbernier@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/openapi-merger_1.5.0_1779250052717_0.3346265783532534"},"_hasShrinkwrap":false}},"time":{"created":"2025-10-08T18:42:49.926Z","modified":"2026-05-20T04:07:33.092Z","0.1.1":"2025-10-08T18:42:50.218Z","1.0.1":"2025-10-09T01:00:02.500Z","1.2.0":"2026-01-05T19:45:15.509Z","1.2.1":"2026-03-09T17:43:03.568Z","1.2.2":"2026-03-10T17:20:33.784Z","1.3.0":"2026-05-20T01:41:43.298Z","1.4.0":"2026-05-20T02:14:21.595Z","1.5.0":"2026-05-20T04:07:32.970Z"},"bugs":{"url":"https://github.com/bernierllc/tools/issues"},"author":{"name":"Bernier LLC"},"license":"UNLICENSED","homepage":"https://github.com/bernierllc/tools#readme","keywords":["openapi","merge","deduplication","api","specification"],"repository":{"type":"git","url":"git+https://github.com/bernierllc/tools.git","directory":"packages/core/openapi-merger"},"description":"OpenAPI specification merging, deduplication, and conflict resolution utilities","maintainers":[{"name":"alikhan410","email":"mczeyo@gmail.com"},{"name":"mkbernier","email":"mkbernier@gmail.com"}],"readme":"# @bernierllc/openapi-merger\n\nOpenAPI specification merging and deduplication utilities that combine multiple documents into a single coherent contract while preserving lineage and resolving conflicts.\n\n## Features\n\n- Deterministic merge strategies including first-wins, last-wins, and deep merge\n- Intelligent component deduplication with reference updates\n- Conflict detection for paths, components, info metadata, and security requirements\n- Source tracking annotations for merged artifacts\n- Component optimization helpers for schema consolidation and integrity checks\n\n## Installation\n\n```bash\nnpm install @bernierllc/openapi-merger\n```\n\n## Usage\n\n```typescript\nimport { MergeStrategy, OpenAPIMerger } from '@bernierllc/openapi-merger';\n\nconst merger = new OpenAPIMerger({\n  strategy: MergeStrategy.MERGE_DEEP,\n  deduplicateComponents: true,\n  validateOutput: true\n});\n\nconst result = merger.merge([specA, specB, specC]);\n\nconsole.log(result.merged.paths);\nconsole.log(result.conflicts);\nconsole.log(result.deduplicated);\n```\n\n## API Reference\n\n### OpenAPIMerger Class\n\nThe main class for merging OpenAPI specifications with configurable strategies and options.\n\n#### Constructor\n\n```typescript\nconst merger = new OpenAPIMerger(config?: MergerConfig);\n```\n\n**Configuration Options:**\n- `strategy` - Merge strategy (FIRST_WINS, LAST_WINS, MERGE_DEEP, FAIL_ON_CONFLICT, CUSTOM)\n- `deduplicateComponents` - Enable automatic component deduplication (default: true)\n- `validateOutput` - Validate merged output for integrity (default: true)\n- `preserveOrder` - Maintain source order in merged output (default: false)\n- `conflictResolver` - Custom resolver function for CUSTOM strategy\n\n#### **merge(specs: OpenAPIObject[]): MergeResult**\n\nMerges multiple OpenAPI specifications into a single coherent document.\n\n```typescript\nconst result = merger.merge([specA, specB, specC]);\n\nconsole.log(result.merged);      // Merged OpenAPI specification\nconsole.log(result.conflicts);   // Array of detected conflicts\nconsole.log(result.deduplicated); // Deduplication statistics\nconsole.log(result.warnings);    // Validation warnings\n```\n\n**Returns:**\n- `merged` - Combined OpenAPI specification\n- `conflicts` - Array of conflict descriptions\n- `deduplicated` - Component deduplication statistics\n- `warnings` - Validation warnings and notices\n\n#### **detectConflicts(specs: OpenAPIObject[]): ConflictReport**\n\nAnalyzes specifications for conflicts without performing the merge.\n\n```typescript\nconst conflicts = merger.detectConflicts([specA, specB]);\n\nconflicts.forEach(conflict => {\n  console.log(`Conflict in ${conflict.type}: ${conflict.description}`);\n});\n```\n\n### **Merge Strategies**\n\n#### **FIRST_WINS**\nFirst occurrence wins for conflicts:\n\n```typescript\nconst merger = new OpenAPIMerger({ strategy: MergeStrategy.FIRST_WINS });\nconst result = merger.merge([spec1, spec2, spec3]);\n// spec1 values preserved on conflict\n```\n\n#### **LAST_WINS**\nLast occurrence wins for conflicts:\n\n```typescript\nconst merger = new OpenAPIMerger({ strategy: MergeStrategy.LAST_WINS });\nconst result = merger.merge([spec1, spec2, spec3]);\n// spec3 values override earlier specs\n```\n\n#### **MERGE_DEEP**\nDeep merge with intelligent conflict resolution:\n\n```typescript\nconst merger = new OpenAPIMerger({ strategy: MergeStrategy.MERGE_DEEP });\nconst result = merger.merge([spec1, spec2, spec3]);\n// Deep merges objects, concatenates arrays\n```\n\n#### **FAIL_ON_CONFLICT**\nStrict mode that fails on any conflict:\n\n```typescript\nconst merger = new OpenAPIMerger({ strategy: MergeStrategy.FAIL_ON_CONFLICT });\ntry {\n  const result = merger.merge([spec1, spec2, spec3]);\n} catch (error) {\n  console.error('Merge failed due to conflicts:', error);\n}\n```\n\n#### **CUSTOM**\nCustom resolution logic:\n\n```typescript\nconst merger = new OpenAPIMerger({\n  strategy: MergeStrategy.CUSTOM,\n  conflictResolver: (path, values) => {\n    // Custom logic to resolve conflicts\n    return values[0]; // Example: use first value\n  }\n});\n```\n\n### **Component Optimization**\n\n#### **optimizeSchemaRefs(spec: OpenAPIObject): OptimizationResult**\n\nReplaces duplicate schemas with references to canonical definitions:\n\n```typescript\nimport { componentOptimizer } from '@bernierllc/openapi-merger';\n\nconst result = componentOptimizer.optimizeSchemaRefs(spec);\n\nconsole.log(result.duplicatesRemoved);  // Count of removed duplicates\nconsole.log(result.referencesUpdated);  // Count of updated references\nconsole.log(result.optimized);          // Optimized specification\n```\n\n#### **validateComponentIntegrity(spec: OpenAPIObject): IntegrityReport**\n\nValidates component references and identifies issues:\n\n```typescript\nconst integrity = componentOptimizer.validateComponentIntegrity(spec);\n\nconsole.log(integrity.missingRefs);  // References to non-existent components\nconsole.log(integrity.unusedComponents); // Unused component definitions\nconsole.log(integrity.valid);        // Overall validity status\n```\n\n### **Source Tracking**\n\nTrack lineage of merged components:\n\n```typescript\nimport { SourceTracker } from '@bernierllc/openapi-merger';\n\nconst tracker = new SourceTracker();\ntracker.track('/paths/users', 'source-api-v1.yaml');\ntracker.track('/paths/products', 'source-api-v2.yaml');\n\nconst sourceMap = tracker.getSourceMap();\nconsole.log(sourceMap); // Maps each path to its source file\n```\n\n### **Utility Functions**\n\n#### **normalizeComponentNames(components: Components): Components**\n\nSanitizes component names for consistency:\n\n```typescript\nimport { OpenAPIMerger } from '@bernierllc/openapi-merger';\n\nconst normalized = OpenAPIMerger.normalizeComponentNames({\n  'User Schema': { type: 'object' },\n  'product-model': { type: 'object' }\n});\n\n// Returns:\n// {\n//   'UserSchema': { type: 'object' },\n//   'productModel': { type: 'object' }\n// }\n```\n\n## **Examples**\n\n### **Basic Merge**\n\n```typescript\nimport { OpenAPIMerger, MergeStrategy } from '@bernierllc/openapi-merger';\n\nconst merger = new OpenAPIMerger({\n  strategy: MergeStrategy.MERGE_DEEP,\n  deduplicateComponents: true\n});\n\nconst spec1 = {\n  openapi: '3.0.0',\n  info: { title: 'API v1', version: '1.0.0' },\n  paths: {\n    '/users': { get: { /* ... */ } }\n  }\n};\n\nconst spec2 = {\n  openapi: '3.0.0',\n  info: { title: 'API v2', version: '2.0.0' },\n  paths: {\n    '/products': { get: { /* ... */ } }\n  }\n};\n\nconst result = merger.merge([spec1, spec2]);\nconsole.log(result.merged.paths); // Contains both /users and /products\n```\n\n### **Conflict Detection**\n\n```typescript\nconst conflicts = merger.detectConflicts([spec1, spec2, spec3]);\n\nif (conflicts.length > 0) {\n  console.log('Found conflicts:');\n  conflicts.forEach(conflict => {\n    console.log(`- ${conflict.type}: ${conflict.path}`);\n    console.log(`  Description: ${conflict.description}`);\n  });\n}\n```\n\n### **Component Optimization**\n\n```typescript\nimport { componentOptimizer } from '@bernierllc/openapi-merger';\n\n// First merge specs\nconst merged = merger.merge([spec1, spec2, spec3]);\n\n// Then optimize the result\nconst optimized = componentOptimizer.optimizeSchemaRefs(merged.merged);\n\nconsole.log(`Removed ${optimized.duplicatesRemoved} duplicate schemas`);\nconsole.log(`Updated ${optimized.referencesUpdated} references`);\n```\n\n### **Source Tracking**\n\n```typescript\nimport { SourceTracker } from '@bernierllc/openapi-merger';\n\nconst tracker = new SourceTracker();\n\n// Track during merge\nconst merger = new OpenAPIMerger({\n  strategy: MergeStrategy.MERGE_DEEP,\n  sourceTracker: tracker\n});\n\nconst result = merger.merge([\n  { source: 'api-v1.yaml', spec: spec1 },\n  { source: 'api-v2.yaml', spec: spec2 }\n]);\n\n// Get source information\nconst sourceMap = tracker.getSourceMap();\nconsole.log(sourceMap['/paths/users']); // 'api-v1.yaml'\nconsole.log(sourceMap['/paths/products']); // 'api-v2.yaml'\n```\n\n## **Testing**\n\n```bash\nnpm test\n```\n\n## **Integration Status**\n\n- **Logger integration**: not-applicable - This is a pure utility package with no runtime logging requirements. Does not use @bernierllc/logger as it has no logging needs. The detectLogger pattern is not applicable to this pure transformation utility.\n- **Docs-Suite**: ready - Exports TypeDoc-compatible API documentation\n- **NeverHub integration**: not-applicable - Pure transformation utility with no service discovery or event bus requirements. Does not use @bernierllc/neverhub-adapter as it has no event bus needs. The detectNeverHub pattern is not applicable to this stateless utility.\n\n## **License**\n\nUNLICENSED – Internal Bernier LLC package.\n","readmeFilename":"README.md"}