{"_id":"@basil.health/fastify-zod","_rev":"4-1c46f36efec15e1a650546d85922107d","name":"@basil.health/fastify-zod","dist-tags":{"latest":"1.0.6"},"versions":{"1.0.2":{"name":"@basil.health/fastify-zod","version":"1.0.2","description":"Zod integration with Fastify","main":"build/index.js","scripts":{"check:types":"tsc -p . --noEmit","check:lint":"eslint src","check":"npm run check:types && npm run check:lint","clean":"rm -rf build","build:types":"tsc -p . --emitDeclarationOnly","build:babel":"babel src --out-dir build --extensions '.ts' --source-maps","build:openapi-spec":"node build/__tests__/generate-spec.fixtures.js","build:openapi-client":"rm -rf test-openapi-client && openapi-generator-cli generate && cd test-openapi-client && npm i","build":"npm run clean && npm run build:babel && npm run build:openapi-spec && npm run build:openapi-client && npm run build:types","test":"jest"},"repository":{"type":"git","url":"git+https://github.com/karandwivedi42/fastify-zod.git"},"keywords":["zod","fastify","openapi"],"author":{"name":"Elie Rotenberg","email":"elie@rotenberg.io"},"license":"MIT","bugs":{"url":"https://github.com/elierotenberg/fastify-zod/issues"},"homepage":"https://github.com/elierotenberg/fastify-zod#readme","devDependencies":{"@babel/cli":"^7.17.10","@babel/core":"^7.18.2","@babel/preset-env":"^7.18.2","@babel/preset-typescript":"^7.17.12","@types/http-errors":"^1.8.2","@types/jest":"^28.1.1","@types/node":"^17.0.41","@typescript-eslint/eslint-plugin":"^5.27.1","@typescript-eslint/parser":"^5.27.1","eslint":"^8.17.0","eslint-config-prettier":"^8.5.0","eslint-plugin-import":"^2.26.0","eslint-plugin-prettier":"^4.0.0","fastify":"^3.29.0","fastify-zod-test-openapi-client":"file:test-openapi-client","http-errors":"^2.0.0","jest":"^28.1.1","node-fetch":"^2.6.7","pino-pretty":"^8.0.0","prettier":"^2.6.2","typescript":"^4.7.3"},"peerDependencies":{"fastify":"^3.29.0"},"dependencies":{"@fastify/swagger":"^6.1.0","@openapitools/openapi-generator-cli":"^2.5.1","@types/js-yaml":"^4.0.5","change-case":"^4.1.2","fast-deep-equal":"^3.1.3","js-yaml":"^4.1.0","tslib":"^2.4.0","typed-jest-expect":"^1.0.0","zod":"^3.17.3","zod-to-json-schema":"^3.17.0"},"gitHead":"81eb01ca423111339d0b9723dee8aa36a080bdd4","_id":"@basil.health/fastify-zod@1.0.2","_nodeVersion":"16.15.1","_npmVersion":"8.11.0","dist":{"integrity":"sha512-7sXLLYIIoSUKOfA8wTp7WmSrdOEvOIJhsy6sydUIVCd3RWePD9E1Fh2vY+dbo6+aoLpU768MQRnlPj9WH49SNA==","shasum":"ef6c3df17d701202d175e948ba247a7a963533bc","tarball":"https://registry.npmjs.org/@basil.health/fastify-zod/-/fastify-zod-1.0.2.tgz","fileCount":34,"unpackedSize":262350,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCICUDRBtKJfXJ2mQLoTjLvHaPKnck3awtVP/h/hpmpJCdAiB2MWbjvBCLNarOK5hGS4ELwKmhlvflMm60hbqJhv0AXw=="}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJiwyCuACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmrLKQ//WfPJNfkHtyp/1a9E5Xxe7dkWJYWLl4PB97vUXp9czuswBx8w\r\n03+1P3IMgs+3HfTEuLVRwIVzfxBY0gj7fonJs52UnxfIgalWeTvg+XS1P4FV\r\n7YnLRcqhRxgPFM/ZFdJ3S0briaNNfpqbkwLV6xBr+5KKtYsoMbiY3CIOU8H0\r\n222TGQKJzQSN0yZ4hdcVpZwq5wRfPtR2lb41AyA2QGDSHWOqMQ8PdVZBUKRY\r\nF+3R12Ol7HobwGDs/Z8+oDT9Qj03oL0HePR6Afj1NCt3TX45qHuNhQB1fvTR\r\n/ATZCM++Q9U7qYmWeUMs7uOxRPfF+cKO+udEhZx/ZbajKHgEte5+QNrrYDAm\r\nPS8TYQ0l5DH89ZdUF81mg0hpVJWuVmkvQjFuYz9Zg5+iLl80eP9MnarZEGMJ\r\najp3YTYiYk3eR6zM+pNlnrzUQ64lNjbz+bPlGSlBYBHgNygztyRAjxtF13v6\r\nsDSgYnvhu0SF3jeoA1PeAfXHM9NRZCo5oHTLvuliOowzD5GR/a7wU1vigUff\r\nZJDJwUXHQH76cPOxQ2WBHMIucWd3q66YDqhUl9MSYxhpLuSsqZvdNaq6D3Za\r\nUhE2aelfNmS1yC4+bTmtBmruMzJiSeAVoez7i8YlSStEaOv9zoSHrlt1k5od\r\nrAYkLppcSxExTmZx7CPQPgt+oZJtnzMngQQ=\r\n=Gcls\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"karandwivedi42","email":"karan.dwivedi42@gmail.com"},"directories":{},"maintainers":[{"name":"karandwivedi42","email":"karan.dwivedi42@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/fastify-zod_1.0.2_1656955054270_0.20102864484091043"},"_hasShrinkwrap":false},"1.0.3":{"name":"@basil.health/fastify-zod","version":"1.0.3","description":"Zod integration with Fastify","main":"build/index.js","scripts":{"check:types":"tsc -p . --noEmit","check:lint":"eslint src","check":"npm run check:types && npm run check:lint","clean":"rm -rf build","build:types":"tsc -p . --emitDeclarationOnly","build:babel":"babel src --out-dir build --extensions '.ts' --source-maps","build:openapi-spec":"node build/__tests__/generate-spec.fixtures.js","build:openapi-client":"rm -rf test-openapi-client && openapi-generator-cli generate && cd test-openapi-client && npm i","build":"npm run clean && npm run build:babel && npm run build:openapi-spec && npm run build:openapi-client && npm run build:types","test":"jest"},"repository":{"type":"git","url":"git+https://github.com/karandwivedi42/fastify-zod.git"},"keywords":["zod","fastify","openapi"],"author":{"name":"Elie Rotenberg","email":"elie@rotenberg.io"},"license":"MIT","bugs":{"url":"https://github.com/elierotenberg/fastify-zod/issues"},"homepage":"https://github.com/elierotenberg/fastify-zod#readme","devDependencies":{"@babel/cli":"^7.17.10","@babel/core":"^7.18.2","@babel/preset-env":"^7.18.2","@babel/preset-typescript":"^7.17.12","@types/http-errors":"^1.8.2","@types/jest":"^28.1.1","@types/node":"^17.0.41","@typescript-eslint/eslint-plugin":"^5.27.1","@typescript-eslint/parser":"^5.27.1","eslint":"^8.17.0","eslint-config-prettier":"^8.5.0","eslint-plugin-import":"^2.26.0","eslint-plugin-prettier":"^4.0.0","fastify":"^4.0.0","fastify-zod-test-openapi-client":"file:test-openapi-client","http-errors":"^2.0.0","jest":"^28.1.1","node-fetch":"^2.6.7","pino-pretty":"^8.0.0","prettier":"^2.6.2","typescript":"^4.7.3"},"peerDependencies":{"fastify":"^4.0.0"},"dependencies":{"@fastify/swagger":"^6.1.0","@openapitools/openapi-generator-cli":"^2.5.1","@types/js-yaml":"^4.0.5","change-case":"^4.1.2","fast-deep-equal":"^3.1.3","js-yaml":"^4.1.0","tslib":"^2.4.0","typed-jest-expect":"^1.0.0","zod":"^3.17.3","zod-to-json-schema":"^3.17.0"},"gitHead":"81eb01ca423111339d0b9723dee8aa36a080bdd4","_id":"@basil.health/fastify-zod@1.0.3","_nodeVersion":"16.15.1","_npmVersion":"8.11.0","dist":{"integrity":"sha512-MUyY42tSzKgKtF+PhAzg3eItKpSM+K0ac3+3bkpdvCkU6+TNLzZZlI2cXGqyPggE4oOn4w/SWhU0Y/zjX8miWg==","shasum":"87670ce0fb0d70ae26e4e2696e4852362b5e0d54","tarball":"https://registry.npmjs.org/@basil.health/fastify-zod/-/fastify-zod-1.0.3.tgz","fileCount":34,"unpackedSize":262348,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIBlosgjUQuuD+Zr7F/Bz2MtzZLIUs1BvB+rGQfTH5cXPAiBkG2wkYGfIqhTvkQ7BwpOvpYDLpde+7iP/18T3C6oWiA=="}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJiwyJBACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmpvRxAAlkOg1PFyFcELo+4TR65Mge7iOdGtbXQea2vNKI7vJXRL+ZyM\r\nkqcCTUbxpKSi2FzRy4atEODoUDnLWwPnwX7eSa1IwMBPkv7HXiSvo7c7xRl6\r\nTdwZ3sz5DRtX4mjBVfblJxvTbUCLtSpsDQbfqbTri8She8RjgMMxX87WcFuS\r\nKeGEknWvRjFHZjkyzlExlX1HdNoZENrf/3/VBvdtzhx9+9AUA9ljEe6ou3jh\r\nBwxB8AjOrw/5O0USzqSvRTSR2WJIlWvJ4JM2XLTC7ZGNN54nnzGBAa5v7d2Y\r\nIoeSLk+9e0wsBFAJZ6ju6Wooze9AyO9ruX3RmoYRy7GGMF5aHtl/y4C0X0ah\r\nzvBTvfc3V6G/7r6YsABz79hKY2GE6bhVBdX5rdHDgxIlOVi+hkCekggWgui6\r\nP6/OvbSnJdifDWuw1SYVxYXjT9FRvdGKzW8b38LTMQig1TDTxPqRcwSzUD87\r\nK9I4xoG4O/6ZhzSFQZNmkzlBX+ok1KocRpLBmHyEQYyhtLRmtrdD4KJIuURr\r\nCR+V5E/mDjCv9jwXQc8fRfSy7/TGWatalfo4ia7tdVTzMNE/LUZOQPO8Edyo\r\nLD8GxHIhpBmQ0leBZlYKyIVms9tK0qjURELk2CtkdwPX2X1Uk9mpuYywZQja\r\n3LduD5IaQOPsx6VZoumNVCfoU/EZKTutEp8=\r\n=v+8S\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"karandwivedi42","email":"karan.dwivedi42@gmail.com"},"directories":{},"maintainers":[{"name":"karandwivedi42","email":"karan.dwivedi42@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/fastify-zod_1.0.3_1656955457112_0.8633460566541"},"_hasShrinkwrap":false},"1.0.4":{"name":"@basil.health/fastify-zod","version":"1.0.4","description":"Zod integration with Fastify","main":"build/index.js","scripts":{"check:types":"tsc -p . --noEmit","check:lint":"eslint src","check":"npm run check:types && npm run check:lint","clean":"rm -rf build","build:types":"tsc -p . --emitDeclarationOnly","build:babel":"babel src --out-dir build --extensions '.ts' --source-maps","build:openapi-spec":"node build/__tests__/generate-spec.fixtures.js","build:openapi-client":"rm -rf test-openapi-client && openapi-generator-cli generate && cd test-openapi-client && npm i","build":"npm run clean && npm run build:babel && npm run build:openapi-spec && npm run build:openapi-client && npm run build:types","test":"jest"},"repository":{"type":"git","url":"git+https://github.com/karandwivedi42/fastify-zod.git"},"keywords":["zod","fastify","openapi"],"author":{"name":"Elie Rotenberg","email":"elie@rotenberg.io"},"license":"MIT","bugs":{"url":"https://github.com/elierotenberg/fastify-zod/issues"},"homepage":"https://github.com/elierotenberg/fastify-zod#readme","devDependencies":{"@babel/cli":"^7.17.10","@babel/core":"^7.18.2","@babel/preset-env":"^7.18.2","@babel/preset-typescript":"^7.17.12","@types/http-errors":"^1.8.2","@types/jest":"^28.1.1","@types/node":"^17.0.41","@typescript-eslint/eslint-plugin":"^5.27.1","@typescript-eslint/parser":"^5.27.1","eslint":"^8.17.0","eslint-config-prettier":"^8.5.0","eslint-plugin-import":"^2.26.0","eslint-plugin-prettier":"^4.0.0","fastify":"^3.29.0","fastify-zod-test-openapi-client":"file:test-openapi-client","http-errors":"^2.0.0","jest":"^28.1.1","node-fetch":"^2.6.7","pino-pretty":"^8.0.0","prettier":"^2.6.2","typescript":"^4.7.3"},"peerDependencies":{"fastify":"^3.29.0"},"dependencies":{"@fastify/swagger":"^6.1.0","@openapitools/openapi-generator-cli":"^2.5.1","@types/js-yaml":"^4.0.5","change-case":"^4.1.2","fast-deep-equal":"^3.1.3","js-yaml":"^4.1.0","tslib":"^2.4.0","typed-jest-expect":"^1.0.0","zod":"^3.17.3","zod-to-json-schema":"^3.17.0"},"types":"./build/index.d.ts","gitHead":"81eb01ca423111339d0b9723dee8aa36a080bdd4","_id":"@basil.health/fastify-zod@1.0.4","_nodeVersion":"16.15.1","_npmVersion":"8.11.0","dist":{"integrity":"sha512-2XL/m7TMrGJsd1XPQwSVdyXErJGqPWfP0cPY7mULkY0I+j/3EWDVRE84sna0GDVjrW01t81poNC/4CBFnh1aRA==","shasum":"0aacce30375f19d217739b0234b02412cf01d9a4","tarball":"https://registry.npmjs.org/@basil.health/fastify-zod/-/fastify-zod-1.0.4.tgz","fileCount":88,"unpackedSize":509381,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCDgPBnUl8Evxe+1W0FGhJ1Vk+w9Ft6SrNB2jrW22b6AAIhAMM7ujvlZxDCDAOsK9AWlviE9hb8oPrfz706rVelKq0G"}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJiw2vvACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmqkLw/+IeK2zN8tjMW2M73IrJaZ69JXtr7KAgC8cQur4sZNL4VnfdYH\r\nsjlhNzSaMg2nRdJCx4P8ZVVq2qvra4Ydpkz4RUOUhOLVtH46s626WT7Ne7c8\r\nWMv3qdInmU3lnj7BuBCTc8+9D4i8bA3k4U/sIwLHIMv/rMDZ220S2G7DNMHZ\r\ngu8QIjsGT5WapgLhTM7pxddjsrhR/h/WnOj/qvRU+gx93TWbqYjZj9oved74\r\nzDVhrqdQT+v2JksqlQ2jDHFE5ZhBuVzdFcHworx9Mc0aFj8TSHUNFceTvLWL\r\nQIR3rM1i9l7BTSOFxdzsvPW4LJzj5+Gl6QtruhBQrb/s06MVcjq+DadiYMt4\r\nTfAoAxADKW5TWUzZnu3JWYiWSGSGNS3vF4MJoaZoHSzKOC0oedmMm9Az4N7/\r\nVeHLk6n6pt9exIBTcGaFPEc9vaHg+Nt25V1BQvFyj7P8awVfrzLYPsAyetu/\r\ng8qnKkuuHl1Rkhxb7F4Hdrz5bJbUOSFvrLsU2zfnboxc6QgxHcw5jF8Y8wzN\r\ngSK0n/vkdlNhs/jP5EhvOkeTydAGGlrPlQYt4fqahC+/p6UnIlraAuTg+0HL\r\nCyZiMRig0ftp7oOny/ZWeNuTpGty0jemxRyIoPAkAqae6PZCNQ8n5fkMBhGC\r\nBgCRbYc0REw8AoCmTVoKuC2tCxMUlY39Bn4=\r\n=yfrX\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"karandwivedi42","email":"karan.dwivedi42@gmail.com"},"directories":{},"maintainers":[{"name":"karandwivedi42","email":"karan.dwivedi42@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/fastify-zod_1.0.4_1656974319024_0.005693966751531665"},"_hasShrinkwrap":false},"1.0.5":{"name":"@basil.health/fastify-zod","version":"1.0.5","description":"Zod integration with Fastify","main":"build/index.js","scripts":{"check:types":"tsc -p . --noEmit","check:lint":"eslint src","check":"npm run check:types && npm run check:lint","clean":"rm -rf build","build:types":"tsc -p . --emitDeclarationOnly","build:babel":"babel src --out-dir build --extensions '.ts' --source-maps","build:openapi-spec":"node build/__tests__/generate-spec.fixtures.js","build:openapi-client":"rm -rf test-openapi-client && openapi-generator-cli generate && cd test-openapi-client && npm i","build":"npm run clean && npm run build:babel && npm run build:openapi-spec && npm run build:openapi-client && npm run build:types","test":"jest"},"repository":{"type":"git","url":"git+https://github.com/karandwivedi42/fastify-zod.git"},"keywords":["zod","fastify","openapi"],"author":{"name":"Elie Rotenberg","email":"elie@rotenberg.io"},"license":"MIT","bugs":{"url":"https://github.com/elierotenberg/fastify-zod/issues"},"homepage":"https://github.com/elierotenberg/fastify-zod#readme","devDependencies":{"@babel/cli":"^7.17.10","@babel/core":"^7.18.2","@babel/preset-env":"^7.18.2","@babel/preset-typescript":"^7.17.12","@types/http-errors":"^1.8.2","@types/jest":"^28.1.1","@types/node":"^17.0.41","@typescript-eslint/eslint-plugin":"^5.27.1","@typescript-eslint/parser":"^5.27.1","eslint":"^8.17.0","eslint-config-prettier":"^8.5.0","eslint-plugin-import":"^2.26.0","eslint-plugin-prettier":"^4.0.0","fastify":"^4.0.0","fastify-zod-test-openapi-client":"file:test-openapi-client","http-errors":"^2.0.0","jest":"^28.1.1","node-fetch":"^2.6.7","pino-pretty":"^8.0.0","prettier":"^2.6.2","typescript":"^4.7.3"},"peerDependencies":{"fastify":"^4.0.0"},"dependencies":{"@fastify/swagger":"^7.0.0","@openapitools/openapi-generator-cli":"^2.5.1","@types/js-yaml":"^4.0.5","change-case":"^4.1.2","fast-deep-equal":"^3.1.3","js-yaml":"^4.1.0","tslib":"^2.4.0","typed-jest-expect":"^1.0.0","zod":"^3.17.3","zod-to-json-schema":"^3.17.0"},"gitHead":"3812f2ad6c9f1a822983d40df839c154270406df","_id":"@basil.health/fastify-zod@1.0.5","_nodeVersion":"16.15.1","_npmVersion":"8.11.0","dist":{"integrity":"sha512-NDwtd2ncfSCg2paajHAujnBdIqOooHHTnoSV1cQiS5XqXJks0jn6Tk6BtYooljxvxgCp4F77RQUf7ynCZO0TYw==","shasum":"99cdd1faa121d0939a843ec7c7d926f52219458d","tarball":"https://registry.npmjs.org/@basil.health/fastify-zod/-/fastify-zod-1.0.5.tgz","fileCount":34,"unpackedSize":249528,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDTTr8DWFQe60+pSSjZcDNj5wn1+fujVnU2QnqpRrfn8wIgQNhJ65EG6n0kXbmfS8o/vKMIPebtcUr05tteCLFLtEE="}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJiy/seACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2Vmq2+g//daNzfE1jkMOVl0si9MxqI/X0fSJz3ptPnOWDhR0HPr6U1qEW\r\nmdIVmgHk57KIu/3Y09rncjjbPdf0yNRR3rKfMovqLQiFnih49W+jbfehG7zD\r\nR0vRjOr7fHIL57VvZ/o153wmROvlRZIWNWrgr4cYaJNHbyv6bSzyTqUQ0g6s\r\nZT/i2BdHBJQC8MvlKHM1iT+a4sXWD/QWry7hSpDXiaEJmhgRSgFjCucz938q\r\nkytgjPBBepp8UWA7pF9/AWmNzro4HOUkFi4V+RgO3CBEDZgJoS9SaK9ysNVv\r\nfzgcGzxjjJLGcRlJJzF+fwCEmOrSqBtASqAx11XkVjP6a9hEfs2steMkyOkx\r\nN/TqXXmRtcRMZmA4lFkVvsSV++MIhaNgaQ09th9pM/+Yr7DsgEyM5oQJxaGn\r\nvdcJoGlAUebWN1uOIxQlfnwIpj5r8IyY9T39RIahXgBlx4O3JXMRgKGL9N6s\r\nQwRtw+Pb5GftSfyvy+XZd0/6kXm3C0ikC9/9ALeOgvUe9sWH7Ir4BTU8N55n\r\nXUrpg81vdbBO/NkPdBvnmGYmI953v6sHL0jEyhyhvss+DrT2qZuy9tDPkCBY\r\nfWDHEly2hAbENj4hQQ/dQbkse4O5mTuTIVo+mzWQNmWun0e/s4Zt9xN9M9/J\r\nNnjOO2A6Rk1zKw3RPNNUHAxRyPDrM4gAJUM=\r\n=L+Ip\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"karandwivedi42","email":"karan.dwivedi42@gmail.com"},"directories":{},"maintainers":[{"name":"karandwivedi42","email":"karan.dwivedi42@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/fastify-zod_1.0.5_1657535262023_0.1938849856176943"},"_hasShrinkwrap":false},"1.0.6":{"name":"@basil.health/fastify-zod","version":"1.0.6","description":"Zod integration with Fastify","main":"build/index.js","scripts":{"check:types":"tsc -p . --noEmit","check:lint":"eslint src","check":"npm run check:types && npm run check:lint","clean":"rm -rf build","build:types":"tsc -p . --emitDeclarationOnly","build:babel":"babel src --out-dir build --extensions '.ts' --source-maps","build:openapi-spec":"node build/__tests__/generate-spec.fixtures.js","build:openapi-client":"rm -rf test-openapi-client && openapi-generator-cli generate && cd test-openapi-client && npm i","build":"npm run clean && npm run build:babel && npm run build:openapi-spec && npm run build:openapi-client && npm run build:types","test":"jest"},"repository":{"type":"git","url":"git+https://github.com/karandwivedi42/fastify-zod.git"},"keywords":["zod","fastify","openapi"],"author":{"name":"Elie Rotenberg","email":"elie@rotenberg.io"},"license":"MIT","bugs":{"url":"https://github.com/elierotenberg/fastify-zod/issues"},"homepage":"https://github.com/elierotenberg/fastify-zod#readme","devDependencies":{"@babel/cli":"^7.17.10","@babel/core":"^7.18.2","@babel/preset-env":"^7.18.2","@babel/preset-typescript":"^7.17.12","@types/http-errors":"^1.8.2","@types/jest":"^28.1.1","@types/node":"^17.0.41","@typescript-eslint/eslint-plugin":"^5.27.1","@typescript-eslint/parser":"^5.27.1","eslint":"^8.17.0","eslint-config-prettier":"^8.5.0","eslint-plugin-import":"^2.26.0","eslint-plugin-prettier":"^4.0.0","fastify":"^4.0.0","fastify-zod-test-openapi-client":"file:test-openapi-client","http-errors":"^2.0.0","jest":"^28.1.1","node-fetch":"^2.6.7","pino-pretty":"^8.0.0","prettier":"^2.6.2","typescript":"^4.7.3"},"peerDependencies":{"fastify":"^4.0.0"},"dependencies":{"@fastify/swagger":"^7.0.0","@openapitools/openapi-generator-cli":"^2.5.1","@types/js-yaml":"^4.0.5","change-case":"^4.1.2","fast-deep-equal":"^3.1.3","js-yaml":"^4.1.0","tslib":"^2.4.0","typed-jest-expect":"^1.0.0","zod":"^3.17.3","zod-to-json-schema":"^3.17.0"},"types":"./build/index.d.ts","gitHead":"3812f2ad6c9f1a822983d40df839c154270406df","_id":"@basil.health/fastify-zod@1.0.6","_nodeVersion":"16.15.1","_npmVersion":"8.11.0","dist":{"integrity":"sha512-yU3KMgrRg2gnVqlVEczDOUO5/sL3uD7FTnZqK20ZR9f6OEBJxixCFXZMaJKDb2iaaXmlTSFi6OZCLJyc17w2Zg==","shasum":"1a5ba5bf2ea7ff9f38e32ca035d57fbf4307346e","tarball":"https://registry.npmjs.org/@basil.health/fastify-zod/-/fastify-zod-1.0.6.tgz","fileCount":84,"unpackedSize":491452,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIDrCQDe3b4FvYoGEq+KSh68UGCNiarKHboEaV4/mPm6qAiBgW6HObxcaS+Jpt7qFCQGKuC/DXJqNIVnh9J+HfsmbwQ=="}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJiy/9jACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2Vmq1Mw//ejy4bBa/cckFt/scNaLdqUCjqcpwzazhrCXkhjqGNXsxh2KC\r\npL6BbsE4t9d3ysN+W0Y2w/RosBrDQSkcyuo8JNgSy4R5gAaMEATKaFUfpQNh\r\nEUJ4I8gcNHXNnCID0duKBS9Oim4Ka4t+19PtuONpI84t6eRWPvZXErIdwnyb\r\nW0wLozFmMJcHmvGps9LIu0eqYSqO8Piu1oVJ380zShY+VniuJ2jduWxzRmXC\r\nqV6K78712E/cSkvFeg40cKZSHVuwoy7EWIuBaHDBZH/uPM7WeWQUL6P+i7E6\r\n766gfe/P14n24alcz9VdUEIZRxGdJKiQG2ZB71AvLy4V/yllPVzSKeQhMYsS\r\nGAu571SMALxX1aWRx3YrrxQPAit4DTbZ1SW2IBz1Ff8a5NPzMOWnCVPsBaW3\r\n/8eALyyuNCzLfP3MsZgqeApqDjmJOBO86a05Amk2V9GmIbw/yk+56hrCtID3\r\nZlVn22UOFfLdVQmhnrd+MoD+48qkW83AWrNdRlx89PtfWCuqV37ZPBG1Veiz\r\nD5L33BoMpUoNLn1A+V94MVFTQ8sEAAGYrJtkPIY7Y1i4Heot0EvOq+8jsi4E\r\nXkcabwtYTMt2mKXdxaxjaHZOEqAMnJ0AkA3RPVAwhy7M6knjDi7KD4XjzQ2N\r\nUIU4lM1di6uhG/tVkNjtOm/Bg94wtigU4k4=\r\n=bb33\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"karandwivedi42","email":"karan.dwivedi42@gmail.com"},"directories":{},"maintainers":[{"name":"karandwivedi42","email":"karan.dwivedi42@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/fastify-zod_1.0.6_1657536355054_0.9959669418519228"},"_hasShrinkwrap":false}},"time":{"created":"2022-07-04T17:17:34.206Z","1.0.2":"2022-07-04T17:17:34.463Z","modified":"2022-07-11T10:45:55.319Z","1.0.3":"2022-07-04T17:24:17.371Z","1.0.4":"2022-07-04T22:38:39.228Z","1.0.5":"2022-07-11T10:27:42.207Z","1.0.6":"2022-07-11T10:45:55.239Z"},"maintainers":[{"name":"karandwivedi42","email":"karan.dwivedi42@gmail.com"}],"description":"Zod integration with Fastify","homepage":"https://github.com/elierotenberg/fastify-zod#readme","keywords":["zod","fastify","openapi"],"repository":{"type":"git","url":"git+https://github.com/karandwivedi42/fastify-zod.git"},"author":{"name":"Elie Rotenberg","email":"elie@rotenberg.io"},"bugs":{"url":"https://github.com/elierotenberg/fastify-zod/issues"},"license":"MIT","readme":"# fastify-zod\n\n## Why?\n\n`fastify` is awesome and arguably the best Node http server around.\n\n`zod` is awesome and arguably the best TypeScript modeling / validation library around.\n\nUnfortunately, `fastify` and `zod` don't work together very well. [`fastify` suggests using `@sinclair/typebox`](https://www.fastify.io/docs/latest/TypeScript/#typebox), which is nice but is nowhere close to `zod`. This library allows you to use `zod` as your primary source of truth for models with nice integration with `fastify`, `fastify-swagger` and OpenAPI `typescript-fetch` generator.\n\n## Features\n\n- Define your models using `zod` in a single place, without redundancy / conflicting sources of truth\n- Use your models in busines logic code and get out of the box type-safety in `fastify`\n- First-class support for `fastify-swagger` and `openapitools-generator/typescrip-fetch`\n- Referential transparency, including for `enum`s\n- Deduplication of structurally equivalent models\n- Internal generated JSON Schemas available for reuse\n\n## Setup\n\n- Install `fastify-zod`\n\n```\nnpm i fastify-zod`\n```\n\n- Define your models using `zod`\n\n```ts\nconst TodoItemId = z.object({\n  id: z.string().uuid(),\n});\n\nenum TodoStateEnum {\n  Todo = `todo`,\n  InProgress = `in progress`,\n  Done = `done`,\n}\n\nconst TodoState = z.nativeEnum(TodoStateEnum);\n\nconst TodoItem = TodoItemId.extend({\n  label: z.string(),\n  dueDate: z.date().optional(),\n  state: TodoState,\n});\n\nconst TodoItems = z.object({\n  todoItems: z.array(TodoItem),\n});\n\nconst TodoItemsGroupedByStatus = z.object({\n  todo: z.array(TodoItem),\n  inProgress: z.array(TodoItem),\n  done: z.array(TodoItem),\n});\n\nconst models = {\n  TodoItemId,\n  TodoItem,\n  TodoItems,\n  TodoItemsGroupedByStatus,\n};\n```\n\n- Register `fastify` types\n\n```ts\nimport type { FastifyZod } from \"fastify-zod\";\n\n// Global augmentation, as suggested by\n// https://www.fastify.io/docs/latest/Reference/TypeScript/#creating-a-typescript-fastify-plugin\ndeclare module \"fastify\" {\n  interface FastifyInstance {\n    readonly zod: FastifyZod<typeof models>;\n  }\n}\n\n// Local augmentation\n// See below for register()\nconst f = register(fastify(), { jsonSchemas });\n```\n\n- Register `fastify-zod` with optional config for `fastify-swagger`\n\n```ts\nimport { buildJsonSchemas, register } from \"fastify-zod\";\n\nconst f = fastify();\n\nregister(f, {\n  jsonSchemas: buildJsonSchemas(models),\n  // optional, see below\n  swagger: {\n    openapi: {\n      /* ... */\n    },\n    exposeRoute: true,\n    transformSpec: {}, // optional, see below\n  },\n});\n```\n\n- Define fastify routes using simplified syntax and get automatic type inference\n\n```ts\nf.zod.post(\n  `/item`,\n  {\n    operationId: `postTodoItem`,\n    body: `TodoItem`,\n    reply: `TodoItems`,\n  },\n  async ({ body: nextItem }) => {\n    /* body is correctly inferred as TodoItem */\n    if (state.todoItems.some((prevItem) => prevItem.id === nextItem.id)) {\n      throw new BadRequest(`item already exists`);\n    }\n    state.todoItems = [...state.todoItems, nextItem];\n    /* reply is typechecked against TodoItems */\n    return state;\n  }\n);\n```\n\n- Generate transformed spec with first-class support for downstream `openapitools-generator`\n\n```ts\nconst transformedSpecJson = await f\n  .inject({\n    method: `get`,\n    url: `/documentation_transformed/json`,\n  })\n  .then((res) => res.body);\n\nawait writeFile(\n  join(__dirname, `..`, `..`, `openapi.transformed.json`),\n  transformedSpecJson,\n  { encoding: `utf-8` }\n);\n```\n\n- Generate OpenAPI Client with `openapitools-generator`\n\n`openapi-generator-cli generate`\n\n## API\n\n### `buildJsonSchemas(models: Models, options: BuildJsonSchemasOptions = {}): BuildJonSchemaResult<typeof models>`\n\nBuild JSON Schemas and `$ref` function from Zod models.\n\nThe result can be used either with `register` (recommended, see [example in tests](./src/__tests__/server.fixtures.ts)) or directly with `fastify.addSchema` using the `$ref` function (legacy, see [example in tests](./src/__tests__/server.legacy.fixtures.ts)).\n\n#### `Models`\n\nRecord mapping model keys to Zod types. Keys will be used to reference models in routes definitions.\n\nExample:\n\n```ts\nconst TodoItem = z.object({\n  /* ... */\n});\nconst TodoList = z.object({\n  todoItems: z.array(TodoItem),\n});\n\nconst models = {\n  TodoItem,\n  TodoList,\n};\n```\n\n#### `BuildJsonSchemasOptions = {}`\n\n##### `BuildJsonSchemasOptions.$id: string = \"Schemas\"`: `$id` of the generated schema (defaults to \"Schemas\")\n\n##### `BuildJsonSchemasOptions.target: `jsonSchema7`|`openApi3` = \"jsonSchema7\"`: _jsonSchema7_ (default) or _openApi3_\n\nGenerates either `jsonSchema7` or `openApi3` schema. See [`zod-to-json-schema`](https://github.com/StefanTerdell/zod-to-json-schema#options-object).\n\n#### `BuildJsonSchemasResult<typeof models> = { schemas: JsonSchema[], $ref: $ref<typeof models> }`\n\nThe result of `buildJsonSchemas` has 2 components: an array of schemas that can be added directly to fastify using `fastify.addSchema`, and a `$ref` function that returns a `{ $ref: string }` object that can be used directly.\n\nIf you simply pass the result to `register`, you won't have to care about this however.\n\n```ts\nconst { schemas, $ref } = buildJsonSchemas(models, { $id: \"MySchema\" });\n\nfor (const schema of schemas) {\n  fastify.addSchema(schema);\n}\n\nequals($ref(\"TodoItem\"), {\n  $ref: \"MySchema#/properties/TodoItem\",\n});\n```\n\n### `buildJsonSchema($id: string, Type: ZodType)` (_deprecated_)\n\nShorthand to `buildJsonSchema({ [$id]: Type }).schemas[0]`.\n\n### `register(f: FastifyInstance, { jsonSchemas, swaggerOptions?: = {} }: RegisterOptions`\n\nAdd schemas to `fastify` and decorate instance with `zod` property to add strongly-typed routes (see `fastify.zod` below).\n\n### `RegisterOptions<typeof models>`\n\n#### `RegisterOptions<typeof models>.jsonSchema`\n\nThe result of `buildJsonSchemas(models)` (see above).\n\n##### `RegisterOptions<typeof models>.swaggerOptions = FastifyDynamicSwaggerOptions & { transformSpec: TransformSpecOptions }`\n\nIf present, this options will automatically register `fastify-swagger` in addition to `fastify.zod`.\n\nAny options will be passed directly to `fastify-swagger` so you may refer to [their documentation](https://github.com/fastify/fastify-swagger).\n\nIn addition to `fastify-swagger` options, you can pass an additional property, `transformSpec`, to expose a transformed version of the original spec (see below).\n\n```ts\nregister(f, {\n  jsonSchemas: buildJsonSchemas(models),\n  swaggerOptions: {\n    routePrefix: `/swagger`,\n    swagger: {\n      info: {\n        title: `Fastify Zod Test Server`,\n        description: `Test Server for Fastify Zod`,\n        version: `0.0.0`,\n      },\n    },\n    staticCSP: true,\n    exposeRoute: true,\n    transformSpec: {\n      /* see below */\n    },\n  },\n});\n```\n\n##### `TransformSpecOptions = { cache: boolean = false, routePrefix?: string, options?: TransformOptions }`\n\nIf this property is present on the `swaggerOptions`, then in addition to routes added to `fastify` by `fastify-swagger`, a transformed version of the spec is also exposed. The transformed version is semantically equivalent but benefits from several improvements, notably first-class support for `openapitools-generator-cli` (see below).\n\n`cache` caches the transformed spec. As `SpecTransformer` can be computationally expensive, this may be useful if used in production. Defaults to `false`.\n\n`routePrefix` is the route used to expose the transformed spec, similar to the `routePrefix` option of `fastify-swagger`. Defaults to `${swaggerOptions.routePrefix}_transformed`. Since `swaggerOptions.routePrefix` defaults to `/documentation`, then the default if no `routePrefix` is provided in either options is `/documentation_transformed`.\nThe exposed routes are `/${routePrefix}/json` and `/${routePrefix}/yaml` for JSON and YAML respectively versions of the transformed spec.\n\n`options` are options passed to `SpecTransformer.transform` (see below). By default all transforms are applied.\n\n## `fastify.zod.(delete|get|head|options|patch|post|put)(url: string, config: RouteConfig, handler)`\n\nAdd route with strong typing.\n\nExample:\n\n```ts\nf.zod.put(\n  \"/:id\",\n  {\n    operationId: \"putTodoItem\",\n    params: \"TodoItemId\", // this is a key of \"models\" object above\n    body: \"TodoItem\",\n    reply: {\n      description: \"The updated todo item\",\n      key: \"TodoItem\",\n    },\n  },\n  async ({ params: { id }, body: item }) => {\n    /* ... */\n  }\n);\n```\n\n### withRefResolver: (options: FastifyDynamicSwaggerOptions) => FastifyDynamicSwaggerOptions\n\nWraps `fastify-swagger` options providing a sensible default [`refResolver` function](https://github.com/fastify/fastify-swagger#managing-your-refs) compatible with using the `$ref` function returned by buildJsonSchemas`.\n\n`register` automatically uses this under the hood so this is only required if you are using the result of `buildJsonSchemas` directly without using `register`.\n\n### SpecTransformer(spec: ApiSpec)\n\n`SpecTransformer` takes an API spec (typically the output of `/openapi/json` when using `fastify-swagger`) and applies various transforms. This class is used under the hood by `register` when `swaggerOptions.transformSpec` is set so you probably don't need to use it directly.\n\nThe transforms should typically be semantically transparent (no semantic difference) but applies some spec-level optimization and most importantly works around the many quirks of the `typescript-fetch` generator of `openapitools-generator-cli`.\n\n`SpecTransformer` is a stateful object that mutates itself internally, but the original spec object is not modified.\n\nAvailable transforms:\n\n- `rewriteSchemasAbsoluteRefs` transform\n\nTransforms `$ref`s relative to a schema to refs relative to the global spec.\n\nExample input:\n\n```json\n{\n  \"components\": {\n    \"schemas\": {\n      \"Schema\": {\n        \"type\": \"object\",\n        \"properties\": {\n          \"Item\": {\n            /* ... */\n          },\n          \"Items\": {\n            \"type\": \"array\",\n            \"items\": {\n              // \"#\" refers to \"Schema\" scope\n              \"$ref\": \"#/properties/Item\"\n            }\n          }\n        }\n      }\n    }\n  }\n}\n```\n\nOutput:\n\n```json\n{\n  \"components\": {\n    \"schemas\": {\n      \"Schema\": {\n        \"type\": \"object\",\n        \"properties\": {\n          \"Item\": {\n            /* ... */\n          },\n          \"Items\": {\n            \"type\": \"array\",\n            \"items\": {\n              // \"#\" refers to global scope\n              \"$ref\": \"#/components/schemas/Schema/properties/Item\"\n            }\n          }\n        }\n      }\n    }\n  }\n}\n```\n\n- `extractSchemasProperties` transform\n\nExtract `properties` of schemas into new schemas and rewrite all `$ref`s to point to the new schema.\n\nExample input:\n\n```json\n{\n  \"components\": {\n    \"schemas\": {\n      \"Schema\": {\n        \"type\": \"object\",\n        \"properties\": {\n          \"Item\": {\n            /* ... */\n          },\n          \"Items\": {\n            \"type\": \"array\",\n            \"items\": {\n              \"$ref\": \"#/components/schemas/Schema/properties/Item\"\n            }\n          }\n        }\n      }\n    }\n  }\n}\n```\n\nOutput:\n\n```json\n{\n  \"components\": {\n    \"schemas\": {\n      \"Schema\": {\n        \"type\": \"object\",\n        \"properties\": {\n          \"Item\": {\n            \"$ref\": \"#/components/schemas/Schema_TodoItem\"\n          },\n          \"Items\": {\n            \"$ref\": \"#/components/schemas/Schema_TodoItems\"\n          }\n        }\n      },\n      \"Schema_TodoItem\": {\n        /* ... */\n      },\n      \"Schema_TodoItems\": {\n        \"type\": \"array\",\n        \"items\": {\n          \"$ref\": \"#/components/schemas/Schema_TodoItem\"\n        }\n      }\n    }\n  }\n}\n```\n\n- `mergeRefs` transform\n\nFinds deeply nested structures equivalent to existing schemas and replace them with `$ref`s to this schema. In practice this means deduplication and more importantly, referential equivalence in addition to structrural equivalence. This is especially useful for `enum`s since in TypeScript to equivalent enums are not assignable to each other.\n\nExample input:\n\n```json\n{\n  \"components\": {\n    \"schemas\": {\n      \"TodoItemState\": {\n        \"type\": \"string\",\n        \"enum\": [\"todo\", \"in progress\", \"done\"]\n      },\n      \"TodoItem\": {\n        \"type\": \"object\",\n        \"properties\": {\n          \"state\": {\n            \"type\": \"string\",\n            \"enum\": [\"todo\", \"in progress\", \"done\"]\n          }\n        }\n      }\n    }\n  }\n}\n{\n  \"mergeRefs\": [{\n    \"$ref\": \"TodoItemState#\"\n  }]\n}\n```\n\nOutput:\n\n```json\n{\n  \"components\": {\n    \"schemas\": {\n      \"TodoItemState\": {\n        \"type\": \"string\",\n        \"enum\": [\"todo\", \"in progress\", \"done\"]\n      },\n      \"TodoItem\": {\n        \"type\": \"object\",\n        \"properties\": {\n          \"state\": {\n            \"$ref\": \"#/components/schemas/TodoItemState\"\n          }\n        }\n      }\n    }\n  }\n}\n```\n\nIn the typical case, you will not create each ref explicitly, but rather use the `$ref` function provided by `buildJsonSchemas`:\n\n```ts\n{\n  mergeRefs: [$ref(\"TodoItemState\")];\n}\n```\n\n- `deleteUnusedSchemas` transform\n\nDelete all schemas that are not referenced anywhere, including in `paths`. This is useful to remove leftovers of the previous transforms.\n\nExample input:\n\n```json\n{\n  \"components\": {\n    \"schemas\": {\n      // Schema_TodoItem has been extracted,\n      // there are no references to this anymore\n      \"Schema\": {\n        \"type\": \"object\",\n        \"properties\": {\n          \"TodoItem\": {\n            \"$ref\": \"#/components/schemas/Schema_TodoItem\"\n          }\n        }\n      },\n      \"Schema_TodoItem\": {\n        /* ... */\n      }\n    }\n  },\n  \"paths\": {\n    \"/item\": {\n      \"get\": {\n        \"responses\": {\n          \"200\": {\n            \"content\": {\n              \"application/json\": {\n                \"schema\": {\n                  // This used to be #/components/Schema/properties/TodoItem\n                  // but has been transformed by extractSchemasProperties\n                  \"$ref\": \"#/components/schemas/Schema_TodoItem\"\n                }\n              }\n            }\n          }\n        }\n      }\n    }\n  }\n}\n```\n\nOutput:\n\n```json\n{\n  \"components\": {\n    \"schemas\": {\n      // \"Schema\" has been deleted\n      \"Schema_TodoItem\": {\n        /* ... */\n      }\n    }\n  },\n  \"paths\": {\n    /* ... */\n  }\n}\n```\n\n- `schemaKeys` option\n\nThis option controls the behavior of newly created schemas (e.g. during `extractSchemasProperties` transform).\n\nAvailable configurations:\n\n- `schemaKeys.removeInitialSchemasPrefix`: remove `schemaKey` prefix of initial schemas to create less verbose schema names, e.g. `TodoState` instead of `MySchema_TodoState`\n\n- `schemaKeys.changeCase`: change case of generated schema keys. Defaults to `preserve`. In this case, original schema key and property key prefixes are preserved, and segments are underscore-separated.\n\nIn case of schema key conflict, an error will be thrown during `transform`.\n\n#### SpecTransformer#transform(options: TransformOptions)\n\nApplies the given transforms.\n\nDefault options:\n\n```ts\n{\n  rewriteAbsoluteRefs?: boolean = true,\n  extractSchemasProperties?: boolean = true,\n  mergeRefs?: { $ref: string }[] = [],\n  deleteUnusedSchemas?: boolean = true,\n  schemaKeys?: {\n    removeInitialSchemasPrefix: boolean = false,\n    changeCase: \"preserve\" | \"camelCase\" | \"PascalCase\" | \"snake_case\" | \"param-case\" = \"preserve\"\n  } = {}\n}\n```\n\nAll transforms default to `true` except `mergeRefs` that you must explicitly configure.\n\n#### SpecTransformer#getSpec(): Spec\n\nReturn the current state of the spec. This is typically called after `transform` to use the transformed spec.\n\n## Usage with `openapitools`\n\nTogether with `fastify-swagger`, and `SpecTransformer` this library supports downstream client code generation using `openapitools-generator-cli`.\n\nRecommended use is with `register` and `fastify.inject`.\n\nFor this you need to first generate the spec file, then run `openapitools-generator`:\n\n```ts\nconst jsonSchemas = buildJsonSchemas(models);\n\nregister(f, {\n  jsonSchemas,\n  swaggerOptions: {\n    openapi: {\n      /* ... */\n    },\n    exposeRoute: true,\n    transformSpec: {\n      routePrefix: \"/openapi_transformed\",\n      options: {\n        mergeRefs: [$ref(\"TodoItemState\")],\n      },\n    },\n  },\n});\n\nconst spec = await f\n  .inject({\n    method: \"get\",\n    url: \"/openapi_transformed/json\",\n  })\n  .then((spec) => spec.json());\n\nwriteFileSync(\"openapi-spec.json\", JSON.stringify(spec), { encoding: \"utf-8\" });\n```\n\n`openapi-generator-cli generate`\n\nWe recommend running this as part as the build step of your app, see [package.json](./package.json).\n\n## Caveats\n\nUnfortunately and despite best efforts by `SpecTransformer`, the OpenAPI generator has many quirks and limited support for some features. Complex nested arrays are sometimes not validated / parsed correctly, discriminated unions have limited support, etc.\n\n## License\n\nMIT License Copyright (c) 2022 Elie Rotenberg\n","readmeFilename":"README.md"}