{"_id":"@bernierllc/openapi-schema-builder","_rev":"8-8f7c21162da54d4598a0b8d856c4083c","name":"@bernierllc/openapi-schema-builder","dist-tags":{"latest":"3.0.0"},"versions":{"1.0.1":{"name":"@bernierllc/openapi-schema-builder","version":"1.0.1","keywords":["openapi","swagger","schema","builder","api","specification","typescript","type-safe","bernierllc"],"author":{"name":"Bernier LLC"},"license":"PROPRIETARY","_id":"@bernierllc/openapi-schema-builder@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":"f169811296b5ddd0ae9cb189eea95ad4c5a6205d","tarball":"https://registry.npmjs.org/@bernierllc/openapi-schema-builder/-/openapi-schema-builder-1.0.1.tgz","fileCount":35,"integrity":"sha512-Si0+jatcpusUijxtgF1gfj2l55VFKv8KUA3wg60WnW+obYfiPJ0yrgqHlzKAYmepwpnmOZGA/gwlHMvjaqNecA==","signatures":[{"sig":"MEUCICgGpbJPlxcgH8xHjP2DqIU6WDI04f0ASxAIutHxTxLhAiEArgpaFWojsuw53EYeiW/F9iiukl3WO5LoqK2kKiz3oL4=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":87912},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","engines":{"node":">=18.0.0"},"gitHead":"3e14ee74986be67a461ef818cbac16fd839ae954","scripts":{"lint":"eslint src --ext .ts","test":"jest","build":"tsc","clean":"rm -rf dist","prebuild":"npm run clean","test:watch":"jest --watch","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-schema-builder"},"_npmVersion":"11.4.2","description":"Pure atomic OpenAPI schema construction utilities with type safety for OpenAPI 3.0.x and 3.1.0","directories":{},"_nodeVersion":"24.4.1","_hasShrinkwrap":false,"devDependencies":{"jest":"^29.5.0","eslint":"^8.0.0","rimraf":"^5.0.0","ts-jest":"^29.4.0","typescript":"^5.3.0","@types/jest":"^29.5.14","@types/node":"^20.0.0","@typescript-eslint/parser":"^6.0.0","@typescript-eslint/eslint-plugin":"^6.0.0"},"_npmOperationalInternal":{"tmp":"tmp/openapi-schema-builder_1.0.1_1759943024131_0.8661460958560712","host":"s3://npm-registry-packages-npm-production"}},"1.2.0":{"name":"@bernierllc/openapi-schema-builder","version":"1.2.0","keywords":["openapi","swagger","schema","builder","api","specification","typescript","type-safe","bernierllc"],"author":{"name":"Bernier LLC"},"license":"PROPRIETARY","_id":"@bernierllc/openapi-schema-builder@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":"6ba82f35fb34d2707797ed2060ed84a556c76f47","tarball":"https://registry.npmjs.org/@bernierllc/openapi-schema-builder/-/openapi-schema-builder-1.2.0.tgz","fileCount":35,"integrity":"sha512-oLDGXeb2esms/KCxGOq32NbpY4ES7EQSr72mVSLfsyNclImhCwajWG50/54yMoqXSf5HslHhnHDehVrlPlfWow==","signatures":[{"sig":"MEYCIQD84OPaHcLZBXP1steNcjg9MWFAI7/8Quk/m5Ouk2eaiQIhAM4S/C9eXrqjGJBHd0/uWFgJW8cQ6WTTWZXQdG8oHsPm","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":88065},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","engines":{"node":">=18.0.0"},"gitHead":"af7e74b3715d56d3a193e1bb6743b337c2b0df6d","scripts":{"lint":"eslint src --ext .ts","test":"jest","build":"tsc","clean":"rm -rf dist","prebuild":"npm run clean","test:watch":"jest --watch","test:coverage":"jest --coverage"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:9b1e0a5e-50a0-4702-ad12-6a6440e06348"}},"repository":{"url":"git+https://github.com/BernierLLC/tools.git","type":"git","directory":"packages/core/openapi-schema-builder"},"_npmVersion":"lerna/9.0.3/node@v20.19.6+x64 (linux)","description":"Pure atomic OpenAPI schema construction utilities with type safety for OpenAPI 3.0.x and 3.1.0","directories":{},"_nodeVersion":"20.19.6","publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^29.5.0","eslint":"^8.0.0","rimraf":"^5.0.0","ts-jest":"^29.4.0","typescript":"^5.3.0","@types/jest":"^29.5.14","@types/node":"^20.0.0","@typescript-eslint/parser":"^6.0.0","@typescript-eslint/eslint-plugin":"^6.0.0"},"_npmOperationalInternal":{"tmp":"tmp/openapi-schema-builder_1.2.0_1767642315551_0.8448119514820926","host":"s3://npm-registry-packages-npm-production"}},"1.2.1":{"name":"@bernierllc/openapi-schema-builder","version":"1.2.1","keywords":["openapi","swagger","schema","builder","api","specification","typescript","type-safe","bernierllc"],"author":{"name":"Bernier LLC"},"license":"PROPRIETARY","_id":"@bernierllc/openapi-schema-builder@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":"fec024f1b699deeedb3b68f248b843dd106b8e5a","tarball":"https://registry.npmjs.org/@bernierllc/openapi-schema-builder/-/openapi-schema-builder-1.2.1.tgz","fileCount":35,"integrity":"sha512-Db892fVZbMDsxIQoZtBC468TRsAVMEe3u7dQ0/HV3tOGILCmwuiFCyIQpPlMQZzZAft+DihERKwG1VnhGQP7UQ==","signatures":[{"sig":"MEUCIB6Mz8l3JR8c8+KoUDMGIW6OcgScWS1OZcXKiQw8eUVjAiEA58NNYWhJdNQPWOP/VUXQCQ0+Yagk+yEXlL+iw78easc=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":88007},"main":"dist/index.js","type":"module","_from":"file:bernierllc-openapi-schema-builder-1.2.1.tgz","types":"dist/index.d.ts","engines":{"node":">=18.0.0"},"scripts":{"lint":"eslint src --ext .ts","test":"jest","build":"tsc","clean":"rm -rf dist","prebuild":"npm run clean","test:watch":"jest --watch","test:coverage":"jest --coverage"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:9b1e0a5e-50a0-4702-ad12-6a6440e06348"}},"_resolved":"/tmp/47f1a8b5e041539b7841519a4c79a017/bernierllc-openapi-schema-builder-1.2.1.tgz","_integrity":"sha512-Db892fVZbMDsxIQoZtBC468TRsAVMEe3u7dQ0/HV3tOGILCmwuiFCyIQpPlMQZzZAft+DihERKwG1VnhGQP7UQ==","repository":{"url":"git+https://github.com/BernierLLC/tools.git","type":"git","directory":"packages/core/openapi-schema-builder"},"_npmVersion":"11.11.0","description":"Pure atomic OpenAPI schema construction utilities with type safety for OpenAPI 3.0.x and 3.1.0","directories":{},"_nodeVersion":"20.20.0","publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^29.5.0","eslint":"^8.0.0","rimraf":"^5.0.0","ts-jest":"^29.4.0","typescript":"^5.3.0","@types/jest":"^29.5.14","@types/node":"^20.0.0","@typescript-eslint/parser":"^6.0.0","@typescript-eslint/eslint-plugin":"^6.0.0"},"_npmOperationalInternal":{"tmp":"tmp/openapi-schema-builder_1.2.1_1773078029986_0.11684327400852368","host":"s3://npm-registry-packages-npm-production"}},"1.2.2":{"name":"@bernierllc/openapi-schema-builder","version":"1.2.2","keywords":["openapi","swagger","schema","builder","api","specification","typescript","type-safe","bernierllc"],"author":{"name":"Bernier LLC"},"license":"PROPRIETARY","_id":"@bernierllc/openapi-schema-builder@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":"d378604a41bde6ead308a5bdf1f2c684b5b25d0f","tarball":"https://registry.npmjs.org/@bernierllc/openapi-schema-builder/-/openapi-schema-builder-1.2.2.tgz","fileCount":35,"integrity":"sha512-pfgAXMUBV/tUcEkOEI3JmZgAir3rRoaBWzvodzpb3Kpk/iZWY8bYZnb8tMYyem5drQ+0covLoBcWv3aOS3E7qg==","signatures":[{"sig":"MEUCIDXlQlT0CjRwgpgNx1xXYeKHQdphp/zurj1ZtP+Iewk8AiEAgSQEvK925q1jGgSsGQZczKH+Uf8IEe/nJHJf/2ncjpc=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":88007},"main":"dist/index.js","type":"module","_from":"file:bernierllc-openapi-schema-builder-1.2.2.tgz","types":"dist/index.d.ts","engines":{"node":">=18.0.0"},"scripts":{"lint":"eslint src --ext .ts","test":"jest","build":"tsc","clean":"rm -rf dist","prebuild":"npm run clean","test:watch":"jest --watch","test:coverage":"jest --coverage"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:9b1e0a5e-50a0-4702-ad12-6a6440e06348"}},"_resolved":"/tmp/285bdbbb8df8dfe1c1f2f231fcc7b728/bernierllc-openapi-schema-builder-1.2.2.tgz","_integrity":"sha512-pfgAXMUBV/tUcEkOEI3JmZgAir3rRoaBWzvodzpb3Kpk/iZWY8bYZnb8tMYyem5drQ+0covLoBcWv3aOS3E7qg==","repository":{"url":"git+https://github.com/BernierLLC/tools.git","type":"git","directory":"packages/core/openapi-schema-builder"},"_npmVersion":"11.11.0","description":"Pure atomic OpenAPI schema construction utilities with type safety for OpenAPI 3.0.x and 3.1.0","directories":{},"_nodeVersion":"20.20.0","publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^29.5.0","eslint":"^8.0.0","rimraf":"^5.0.0","ts-jest":"^29.4.0","typescript":"^5.3.0","@types/jest":"^29.5.14","@types/node":"^20.0.0","@typescript-eslint/parser":"^6.0.0","@typescript-eslint/eslint-plugin":"^6.0.0"},"_npmOperationalInternal":{"tmp":"tmp/openapi-schema-builder_1.2.2_1773081215885_0.31460461829532105","host":"s3://npm-registry-packages-npm-production"}},"1.3.0":{"name":"@bernierllc/openapi-schema-builder","version":"1.3.0","keywords":["openapi","swagger","schema","builder","api","specification","typescript","type-safe","bernierllc"],"author":{"name":"Bernier LLC"},"license":"PROPRIETARY","_id":"@bernierllc/openapi-schema-builder@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":"1fac7166a3c514d2d033950f4d28f9ca720ca0e9","tarball":"https://registry.npmjs.org/@bernierllc/openapi-schema-builder/-/openapi-schema-builder-1.3.0.tgz","fileCount":35,"integrity":"sha512-bbLgeOnmhO1GfKUJ7xiu/S0gDWjhIQCPPbal+mQfiGSZcd+q3H6JvYXkDbCzUhXaz5RynSb0yihVZV1avzj5kg==","signatures":[{"sig":"MEUCIQC/2OGKObARymS6dNv6dvt9nw5AuuYkCDQTtc8Py1lr4AIgNxUh5zDrAVmgxtU1p7+bYFqfLBW+QyMmcG5Yyli15Dk=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":88007},"main":"dist/index.js","type":"module","_from":"file:bernierllc-openapi-schema-builder-1.3.0.tgz","types":"dist/index.d.ts","engines":{"node":">=18.0.0"},"scripts":{"lint":"eslint src --ext .ts","test":"jest","build":"tsc","clean":"rm -rf dist","prebuild":"npm run clean","test:watch":"jest --watch","test:coverage":"jest --coverage"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:9b1e0a5e-50a0-4702-ad12-6a6440e06348"}},"_resolved":"/home/runner/work/tools/tools/packages/core/openapi-schema-builder/bernierllc-openapi-schema-builder-1.3.0.tgz","_integrity":"sha512-bbLgeOnmhO1GfKUJ7xiu/S0gDWjhIQCPPbal+mQfiGSZcd+q3H6JvYXkDbCzUhXaz5RynSb0yihVZV1avzj5kg==","repository":{"url":"git+https://github.com/BernierLLC/tools.git","type":"git","directory":"packages/core/openapi-schema-builder"},"_npmVersion":"11.14.1","description":"Pure atomic OpenAPI schema construction utilities with type safety for OpenAPI 3.0.x and 3.1.0","directories":{},"_nodeVersion":"20.20.2","publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^29.5.0","eslint":"^8.0.0","rimraf":"^5.0.0","ts-jest":"^29.4.0","typescript":"^5.3.0","@types/jest":"^29.5.14","@types/node":"^20.0.0","@typescript-eslint/parser":"^6.0.0","@typescript-eslint/eslint-plugin":"^6.0.0"},"_npmOperationalInternal":{"tmp":"tmp/openapi-schema-builder_1.3.0_1779241307553_0.2318477877280496","host":"s3://npm-registry-packages-npm-production"}},"1.4.0":{"name":"@bernierllc/openapi-schema-builder","version":"1.4.0","keywords":["openapi","swagger","schema","builder","api","specification","typescript","type-safe","bernierllc"],"author":{"name":"Bernier LLC"},"license":"PROPRIETARY","_id":"@bernierllc/openapi-schema-builder@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":"aff59fbadda3375ddcc0bc254c4b7015b7d42fec","tarball":"https://registry.npmjs.org/@bernierllc/openapi-schema-builder/-/openapi-schema-builder-1.4.0.tgz","fileCount":35,"integrity":"sha512-LAXGeumgdlC0aA5kGA34uhSiTmTxaneGtcea9NdmpmkZHaBrWjsOC1qTO07PbliCL8nkIU2ucUoQrt/Wy+nhhA==","signatures":[{"sig":"MEMCIHv2CNDxbXu7EyXXzBzZM2mRLvopDTpgO+WeyCH9DWOCAh9wR9PB8F1a9hw50KWAIM5iD8U0d1hpXwgCScbSGpuW","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":88007},"main":"dist/index.js","type":"module","_from":"file:bernierllc-openapi-schema-builder-1.4.0.tgz","types":"dist/index.d.ts","engines":{"node":">=18.0.0"},"scripts":{"lint":"eslint src --ext .ts","test":"jest","build":"tsc","clean":"rm -rf dist","prebuild":"npm run clean","test:watch":"jest --watch","test:coverage":"jest --coverage"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:9b1e0a5e-50a0-4702-ad12-6a6440e06348"}},"_resolved":"/home/runner/work/tools/tools/packages/core/openapi-schema-builder/bernierllc-openapi-schema-builder-1.4.0.tgz","_integrity":"sha512-LAXGeumgdlC0aA5kGA34uhSiTmTxaneGtcea9NdmpmkZHaBrWjsOC1qTO07PbliCL8nkIU2ucUoQrt/Wy+nhhA==","repository":{"url":"git+https://github.com/BernierLLC/tools.git","type":"git","directory":"packages/core/openapi-schema-builder"},"_npmVersion":"11.14.1","description":"Pure atomic OpenAPI schema construction utilities with type safety for OpenAPI 3.0.x and 3.1.0","directories":{},"_nodeVersion":"20.20.2","publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^29.5.0","eslint":"^8.0.0","rimraf":"^5.0.0","ts-jest":"^29.4.0","typescript":"^5.3.0","@types/jest":"^29.5.14","@types/node":"^20.0.0","@typescript-eslint/parser":"^6.0.0","@typescript-eslint/eslint-plugin":"^6.0.0"},"_npmOperationalInternal":{"tmp":"tmp/openapi-schema-builder_1.4.0_1779250057450_0.9498146188383607","host":"s3://npm-registry-packages-npm-production"}},"3.0.0":{"name":"@bernierllc/openapi-schema-builder","version":"3.0.0","description":"Pure atomic OpenAPI schema construction utilities with type safety for OpenAPI 3.0.x and 3.1.0","main":"dist/index.js","types":"dist/index.d.ts","type":"module","keywords":["openapi","swagger","schema","builder","api","specification","typescript","type-safe","bernierllc"],"author":{"name":"Bernier LLC"},"license":"PROPRIETARY","devDependencies":{"@types/jest":"^29.5.14","@types/node":"^20.0.0","@typescript-eslint/eslint-plugin":"^6.0.0","@typescript-eslint/parser":"^6.0.0","eslint":"^8.0.0","jest":"^29.5.0","rimraf":"^5.0.0","ts-jest":"^29.4.0","typescript":"^5.3.0"},"engines":{"node":">=18.0.0"},"repository":{"type":"git","url":"git+https://github.com/BernierLLC/tools.git","directory":"packages/core/openapi-schema-builder"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"scripts":{"build":"tsc","prebuild":"npm run clean","clean":"rm -rf dist","test":"jest","test:watch":"jest --watch","test:coverage":"jest --coverage","lint":"eslint src --ext .ts"},"_id":"@bernierllc/openapi-schema-builder@3.0.0","bugs":{"url":"https://github.com/BernierLLC/tools/issues"},"homepage":"https://github.com/BernierLLC/tools#readme","_integrity":"sha512-wJtyym+BvaM+6anmQ7awTuCDTsu6mmTAm8gwHNwSpeDnYKShZ7Q46t64H4dva4iO+t3SaLOA2RhGRWVgZARDBA==","_resolved":"/home/runner/work/tools/tools/packages/core/openapi-schema-builder/bernierllc-openapi-schema-builder-3.0.0.tgz","_from":"file:bernierllc-openapi-schema-builder-3.0.0.tgz","_nodeVersion":"20.20.2","_npmVersion":"11.14.1","dist":{"integrity":"sha512-wJtyym+BvaM+6anmQ7awTuCDTsu6mmTAm8gwHNwSpeDnYKShZ7Q46t64H4dva4iO+t3SaLOA2RhGRWVgZARDBA==","shasum":"a9b6d8f5e1b529265532f063843c70e4acb3072b","tarball":"https://registry.npmjs.org/@bernierllc/openapi-schema-builder/-/openapi-schema-builder-3.0.0.tgz","fileCount":35,"unpackedSize":90030,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEYCIQDecSp5Sr4HPp6eylU3i/iG+pxVeG6qa1ja0tXJybPkegIhAJFTp6k9KsLIa/sC/Vf2IvlCCbAQHbeGdwMm9GROG9By"}]},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:9b1e0a5e-50a0-4702-ad12-6a6440e06348"}},"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-schema-builder_3.0.0_1779305725818_0.24891684349754506"},"_hasShrinkwrap":false}},"time":{"created":"2025-10-08T17:03:44.129Z","modified":"2026-05-20T19:35:26.444Z","1.0.1":"2025-10-08T17:03:44.338Z","1.2.0":"2026-01-05T19:45:15.712Z","1.2.1":"2026-03-09T17:40:30.123Z","1.2.2":"2026-03-09T18:33:36.019Z","1.3.0":"2026-05-20T01:41:47.703Z","1.4.0":"2026-05-20T04:07:37.598Z","3.0.0":"2026-05-20T19:35:25.953Z"},"bugs":{"url":"https://github.com/BernierLLC/tools/issues"},"author":{"name":"Bernier LLC"},"license":"PROPRIETARY","homepage":"https://github.com/BernierLLC/tools#readme","keywords":["openapi","swagger","schema","builder","api","specification","typescript","type-safe","bernierllc"],"repository":{"type":"git","url":"git+https://github.com/BernierLLC/tools.git","directory":"packages/core/openapi-schema-builder"},"description":"Pure atomic OpenAPI schema construction utilities with type safety for OpenAPI 3.0.x and 3.1.0","maintainers":[{"name":"alikhan410","email":"mczeyo@gmail.com"},{"name":"mkbernier","email":"mkbernier@gmail.com"}],"readme":"# @bernierllc/openapi-schema-builder\n\nPure atomic OpenAPI schema construction utilities with type safety for OpenAPI 3.0.x and 3.1.0.\n\n## Features\n\n- **Type-Safe Schema Building** - Full TypeScript support with strict typing\n- **OpenAPI 3.0.x & 3.1.0 Support** - Compatible with modern OpenAPI specifications\n- **Zero Dependencies** - Pure atomic package with no external dependencies\n- **Comprehensive Validation** - Built-in schema and component validation\n- **Schema Type Builders** - Convenient helpers for creating schema objects\n- **Flexible API** - Clean, intuitive builder pattern\n\n## Installation\n\n```bash\nnpm install @bernierllc/openapi-schema-builder\n```\n\n## Usage\n\n### Quick Start\n\n```typescript\nimport { OpenAPISchemaBuilder, SchemaTypes } from '@bernierllc/openapi-schema-builder';\n\nconst builder = new OpenAPISchemaBuilder();\n\n// Create basic components\nconst info = builder.createInfo('My API', '1.0.0', 'A sample API');\nconst server = builder.createServer('https://api.example.com');\n\n// Create a schema\nconst userSchema = SchemaTypes.object({\n  id: SchemaTypes.integer({ minimum: 1 }),\n  email: SchemaTypes.string({ format: 'email' }),\n  name: SchemaTypes.string({ minLength: 1, maxLength: 100 })\n}, ['id', 'email']); // Required fields\n\n// Create an operation\nconst getUser = builder.createOperation('get', {\n  summary: 'Get user by ID',\n  parameters: [\n    builder.createParameter('id', 'path', SchemaTypes.integer())\n  ],\n  responses: builder.createResponses({\n    '200': builder.createResponse(\n      'Success',\n      builder.createJsonContent(userSchema)\n    )\n  })\n});\n```\n\n## API Reference\n\n### Core API\n\n### OpenAPISchemaBuilder\n\nThe main builder class for constructing OpenAPI components.\n\n#### Constructor\n\n```typescript\nconst builder = new OpenAPISchemaBuilder({\n  version: '3.0.3', // Optional: OpenAPI version (default: '3.0.3')\n  strictValidation: true // Optional: Enable strict validation (default: true)\n});\n```\n\n### Info Object\n\n```typescript\nconst info = builder.createInfo(\n  'Pet Store API',\n  '1.0.0',\n  'A sample API for pet store operations',\n  {\n    contact: {\n      name: 'API Support',\n      email: 'support@example.com',\n      url: 'https://example.com/support'\n    },\n    license: {\n      name: 'MIT',\n      url: 'https://opensource.org/licenses/MIT'\n    },\n    termsOfService: 'https://example.com/terms'\n  }\n);\n```\n\n### Server Objects\n\n```typescript\n// Simple server\nconst server = builder.createServer('https://api.example.com', 'Production server');\n\n// Server with variables\nconst dynamicServer = builder.createServer(\n  'https://{environment}.example.com',\n  'Environment-specific server',\n  {\n    environment: {\n      default: 'api',\n      enum: ['api', 'staging', 'dev'],\n      description: 'Server environment'\n    }\n  }\n);\n```\n\n### Path and Operation Objects\n\n```typescript\n// Create a path with operations\nconst userPath = builder.createPath({\n  get: builder.createOperation('get', {\n    summary: 'Get user',\n    operationId: 'getUser',\n    tags: ['users'],\n    parameters: [\n      builder.createParameter('id', 'path', SchemaTypes.string(), {\n        description: 'User ID',\n        required: true\n      })\n    ],\n    responses: builder.createResponses({\n      '200': builder.createResponse('Success', builder.createJsonContent(userSchema)),\n      '404': builder.createResponse('Not Found')\n    })\n  }),\n\n  put: builder.createOperation('put', {\n    summary: 'Update user',\n    operationId: 'updateUser',\n    requestBody: builder.createRequestBody(\n      builder.createJsonContent(userSchema),\n      true, // required\n      'User object to update'\n    ),\n    responses: builder.createResponses({\n      '200': builder.createResponse('Success'),\n      '404': builder.createResponse('Not Found')\n    })\n  })\n});\n```\n\n### Parameters\n\n```typescript\n// Path parameter\nconst pathParam = builder.createParameter('id', 'path', SchemaTypes.string(), {\n  description: 'Resource ID',\n  required: true // Path parameters are always required\n});\n\n// Query parameter\nconst queryParam = builder.createParameter('limit', 'query', SchemaTypes.integer(), {\n  description: 'Maximum number of results',\n  example: 10\n});\n\n// Header parameter\nconst headerParam = builder.createParameter('X-API-Key', 'header', SchemaTypes.string(), {\n  description: 'API key for authentication'\n});\n```\n\n### Responses\n\n```typescript\n// Simple response\nconst response = builder.createResponse('Success');\n\n// Response with content\nconst jsonResponse = builder.createResponse(\n  'User object',\n  builder.createJsonContent(userSchema, { id: 1, email: 'user@example.com', name: 'John' })\n);\n\n// Response with headers\nconst responseWithHeaders = builder.createResponse(\n  'Success',\n  builder.createJsonContent(userSchema),\n  {\n    'X-Rate-Limit': {\n      name: 'X-Rate-Limit',\n      in: 'header',\n      schema: SchemaTypes.integer()\n    }\n  }\n);\n```\n\n### Security Schemes\n\n```typescript\n// API Key\nconst apiKey = builder.createApiKeyScheme('X-API-Key', 'header', 'API key authentication');\n\n// Bearer Token\nconst bearer = builder.createBearerScheme('JWT', 'JWT bearer token authentication');\n\n// HTTP Basic\nconst basic = builder.createBasicScheme('HTTP basic authentication');\n\n// OAuth2\nconst oauth2 = builder.createSecurityScheme('oauth2', {\n  flows: {\n    authorizationCode: {\n      authorizationUrl: 'https://auth.example.com/authorize',\n      tokenUrl: 'https://auth.example.com/token',\n      scopes: {\n        'read': 'Read access',\n        'write': 'Write access',\n        'admin': 'Admin access'\n      }\n    }\n  }\n});\n```\n\n### Tags\n\n```typescript\nconst tag = builder.createTag(\n  'users',\n  'User management endpoints',\n  builder.createExternalDocs('https://docs.example.com/users', 'User API Documentation')\n);\n```\n\n## Schema Type Builders\n\nThe `SchemaTypes` utility provides convenient methods for creating schema objects:\n\n### Primitive Types\n\n```typescript\nimport { SchemaTypes } from '@bernierllc/openapi-schema-builder';\n\n// String\nconst name = SchemaTypes.string({\n  minLength: 1,\n  maxLength: 100,\n  pattern: '^[a-zA-Z ]+$'\n});\n\nconst email = SchemaTypes.string({\n  format: 'email'\n});\n\n// Number\nconst price = SchemaTypes.number({\n  minimum: 0,\n  maximum: 99999.99,\n  multipleOf: 0.01\n});\n\n// Integer\nconst age = SchemaTypes.integer({\n  minimum: 0,\n  maximum: 150\n});\n\n// Boolean\nconst isActive = SchemaTypes.boolean();\n```\n\n### Complex Types\n\n```typescript\n// Array\nconst tags = SchemaTypes.array(\n  SchemaTypes.string(),\n  { minItems: 1, maxItems: 10, uniqueItems: true }\n);\n\n// Object\nconst address = SchemaTypes.object({\n  street: SchemaTypes.string(),\n  city: SchemaTypes.string(),\n  zipCode: SchemaTypes.string({ pattern: '^\\\\d{5}$' })\n}, ['street', 'city']); // Required fields\n\n// Nested objects\nconst user = SchemaTypes.object({\n  id: SchemaTypes.integer({ minimum: 1 }),\n  name: SchemaTypes.string({ minLength: 1 }),\n  email: SchemaTypes.string({ format: 'email' }),\n  address: address,\n  tags: tags\n}, ['id', 'name', 'email']);\n```\n\n### Composition\n\n```typescript\n// oneOf\nconst petType = SchemaTypes.oneOf([\n  SchemaTypes.ref('Dog'),\n  SchemaTypes.ref('Cat')\n]);\n\n// anyOf\nconst flexible = SchemaTypes.anyOf([\n  SchemaTypes.string(),\n  SchemaTypes.number()\n]);\n\n// allOf (inheritance)\nconst extendedUser = SchemaTypes.allOf([\n  SchemaTypes.ref('BaseUser'),\n  SchemaTypes.object({\n    role: SchemaTypes.string({ enum: ['admin', 'user'] })\n  })\n]);\n```\n\n### Enums and Nullability\n\n```typescript\n// Enum\nconst status = SchemaTypes.enum(['active', 'inactive', 'pending'], 'string');\n\n// Nullable\nconst optionalName = SchemaTypes.nullable(SchemaTypes.string());\n```\n\n### References\n\n```typescript\n// Short form (automatically prefixes with #/components/schemas/)\nconst userRef = SchemaTypes.ref('User');\n// Results in: { $ref: '#/components/schemas/User' }\n\n// Full path form\nconst customRef = SchemaTypes.ref('#/components/schemas/User');\n```\n\n## Schema Utilities\n\n```typescript\nimport { schemaUtils } from '@bernierllc/openapi-schema-builder';\n\n// Check if object is a reference\nconst isRef = schemaUtils.isReference({ $ref: '#/components/schemas/User' }); // true\n\n// Merge schemas\nconst merged = schemaUtils.mergeSchemas(baseSchema, extensionSchema);\n\n// Normalize reference\nconst normalized = schemaUtils.normalizeRef('#/components/schemas/User');\n\n// Validate reference\nconst isValid = schemaUtils.validateReference('#/components/schemas/User', components);\n\n// Generate example from schema\nconst example = schemaUtils.generateExample(userSchema);\n\n// Get property names\nconst properties = schemaUtils.getPropertyNames(schema);\n```\n\n## Validation\n\n```typescript\nimport { OpenAPISchemaBuilder } from '@bernierllc/openapi-schema-builder';\n\nconst builder = new OpenAPISchemaBuilder();\n\n// Validate complete OpenAPI schema\nconst schema = {\n  openapi: '3.0.3',\n  info: { title: 'API', version: '1.0.0' },\n  paths: {}\n};\n\nconst result = builder.validateSchema(schema);\nif (!result.valid) {\n  console.error('Validation errors:', result.errors);\n}\n\n// Validate individual components\nconst componentResult = builder.validateComponent(userSchema, 'schemas');\n```\n\n## Complete Example\n\n```typescript\nimport {\n  OpenAPISchemaBuilder,\n  SchemaTypes,\n  type OpenAPIObject\n} from '@bernierllc/openapi-schema-builder';\n\nconst builder = new OpenAPISchemaBuilder({ version: '3.0.3' });\n\n// Define schemas\nconst userSchema = SchemaTypes.object({\n  id: SchemaTypes.integer({ minimum: 1 }),\n  username: SchemaTypes.string({ minLength: 3, maxLength: 20 }),\n  email: SchemaTypes.string({ format: 'email' }),\n  createdAt: SchemaTypes.string({ format: 'date-time' }),\n  roles: SchemaTypes.array(SchemaTypes.string({ enum: ['admin', 'user', 'guest'] }))\n}, ['id', 'username', 'email']);\n\nconst errorSchema = SchemaTypes.object({\n  code: SchemaTypes.integer(),\n  message: SchemaTypes.string()\n}, ['code', 'message']);\n\n// Build OpenAPI specification\nconst spec: OpenAPIObject = {\n  openapi: '3.0.3',\n  info: builder.createInfo(\n    'User API',\n    '1.0.0',\n    'RESTful API for user management'\n  ),\n  servers: [\n    builder.createServer('https://api.example.com', 'Production'),\n    builder.createServer('https://staging-api.example.com', 'Staging')\n  ],\n  paths: {\n    '/users': {\n      get: builder.createOperation('get', {\n        summary: 'List users',\n        operationId: 'listUsers',\n        tags: ['users'],\n        parameters: [\n          builder.createParameter('limit', 'query', SchemaTypes.integer({ minimum: 1, maximum: 100 }), {\n            description: 'Maximum number of users to return'\n          }),\n          builder.createParameter('offset', 'query', SchemaTypes.integer({ minimum: 0 }), {\n            description: 'Number of users to skip'\n          })\n        ],\n        responses: builder.createResponses({\n          '200': builder.createResponse(\n            'Success',\n            builder.createJsonContent(\n              SchemaTypes.array(userSchema)\n            )\n          ),\n          'default': builder.createResponse(\n            'Error',\n            builder.createJsonContent(errorSchema)\n          )\n        })\n      }),\n      post: builder.createOperation('post', {\n        summary: 'Create user',\n        operationId: 'createUser',\n        tags: ['users'],\n        requestBody: builder.createRequestBody(\n          builder.createJsonContent(userSchema),\n          true,\n          'User to create'\n        ),\n        responses: builder.createResponses({\n          '201': builder.createResponse(\n            'Created',\n            builder.createJsonContent(userSchema)\n          ),\n          '400': builder.createResponse(\n            'Bad Request',\n            builder.createJsonContent(errorSchema)\n          )\n        })\n      })\n    },\n    '/users/{id}': {\n      get: builder.createOperation('get', {\n        summary: 'Get user by ID',\n        operationId: 'getUserById',\n        tags: ['users'],\n        parameters: [\n          builder.createParameter('id', 'path', SchemaTypes.integer({ minimum: 1 }))\n        ],\n        responses: builder.createResponses({\n          '200': builder.createResponse(\n            'Success',\n            builder.createJsonContent(userSchema)\n          ),\n          '404': builder.createResponse('Not Found')\n        })\n      })\n    }\n  },\n  components: {\n    schemas: {\n      User: userSchema,\n      Error: errorSchema\n    },\n    securitySchemes: {\n      bearerAuth: builder.createBearerScheme('JWT')\n    }\n  },\n  security: [\n    { bearerAuth: [] }\n  ],\n  tags: [\n    builder.createTag('users', 'User management operations')\n  ]\n};\n\n// Validate the specification\nconst validation = builder.validateSchema(spec);\nif (validation.valid) {\n  console.log('OpenAPI specification is valid!');\n  console.log(JSON.stringify(spec, null, 2));\n} else {\n  console.error('Validation errors:', validation.errors);\n}\n```\n\n## TypeScript Support\n\nThis package is written in TypeScript and provides full type definitions:\n\n```typescript\nimport type {\n  OpenAPIObject,\n  InfoObject,\n  PathItemObject,\n  OperationObject,\n  SchemaObject,\n  ParameterObject,\n  ResponseObject,\n  SecuritySchemeObject\n} from '@bernierllc/openapi-schema-builder';\n```\n\n## Best Practices\n\n### 1. Use Schema References\n\nFor reusable schemas, use the `components` section and references:\n\n```typescript\nconst userRef = SchemaTypes.ref('User');\n\n// In operations\nresponses: builder.createResponses({\n  '200': builder.createResponse(\n    'Success',\n    builder.createJsonContent(userRef)\n  )\n})\n```\n\n### 2. Validate Early\n\nValidate your schemas during development:\n\n```typescript\nconst validation = builder.validateSchema(spec);\nif (!validation.valid) {\n  throw new Error(`Invalid OpenAPI spec: ${validation.errors.map(e => e.message).join(', ')}`);\n}\n```\n\n### 3. Use Type Builders\n\nPrefer `SchemaTypes` helpers over manual schema construction:\n\n```typescript\n// Good\nconst email = SchemaTypes.string({ format: 'email' });\n\n// Less ideal\nconst email = { type: 'string', format: 'email' };\n```\n\n### 4. Document Your API\n\nAlways provide descriptions for operations, parameters, and schemas:\n\n```typescript\nconst operation = builder.createOperation('get', {\n  summary: 'Get user by ID',\n  description: 'Retrieves a single user by their unique identifier',\n  // ...\n});\n```\n\n## Error Handling\n\n```typescript\nimport { OpenAPISchemaError, ValidationError, ReferenceError } from '@bernierllc/openapi-schema-builder';\n\ntry {\n  const normalized = schemaUtils.normalizeRef('invalid-ref');\n} catch (error) {\n  if (error instanceof ReferenceError) {\n    console.error('Invalid reference:', error.reference);\n  }\n}\n```\n\n## Integration Status\n\n- **Logger Integration**: Not applicable - This is a pure atomic utility package with no runtime behavior requiring logging. As a foundational schema builder with zero dependencies, logger integration is not needed.\n- **Docs-Suite**: Ready - TypeScript types and JSDoc documentation\n- **NeverHub Integration**: Not applicable - This is a pure atomic utility package providing schema construction functions. As a foundational package with no runtime orchestration or service communication, NeverHub integration via @bernierllc/neverhub-adapter is not needed.\n\n## Related Packages\n\nThis package is the foundation for:\n- `@bernierllc/jsdoc-openapi-parser` - Parse JSDoc to OpenAPI\n- `@bernierllc/zod-openapi-converter` - Convert Zod schemas to OpenAPI\n- `@bernierllc/openapi-merger` - Merge multiple OpenAPI specifications\n- `@bernierllc/openapi-generator` - Generate OpenAPI from code\n\n## License\n\nCopyright (c) 2025 Bernier LLC. All rights reserved.\n\nThis package is proprietary software licensed for use only within the scope of the project it was delivered for.\n","readmeFilename":"README.md"}