{"_id":"@buildvision/nest-sdk-generator","_rev":"11-1a4fd562afeaaba21427851d681a3137","name":"@buildvision/nest-sdk-generator","dist-tags":{"latest":"2.3.1"},"versions":{"1.1.3":{"name":"@buildvision/nest-sdk-generator","author":{"name":"BuildVision","email":"christophe@buildvision.io"},"version":"1.1.3","description":"A full-powered SDK generator for NestJS","keywords":["nest","nestjs","sdk","generator","typescript","frontend","api"],"main":"build/bin.js","scripts":{"prepare":"npm run build","build":"tsc -p tsconfig.json --outDir build","start":"npm run build && node build/bin.js"},"bin":{"nest-sdk-generator":"build/bin.js"},"dependencies":{"chalk":"~4.1.2","minimist":"~1.2.7","prettier":"^2.7.1","ts-morph":"~16.0.0"},"devDependencies":{"@types/minimist":"^1.2.2","@types/node":"~18.11.9","@types/prettier":"^2.7.1","typescript":"~4.8.4"},"_id":"@buildvision/nest-sdk-generator@1.1.3","gitHead":"353caf8104a20a6e16373cb4a8cced678a12f2c0","types":"./build/bin.d.ts","_nodeVersion":"20.9.0","_npmVersion":"10.4.0","dist":{"integrity":"sha512-BKzmQExXjw2zTr5ni3wOYTx9YBH/KICB9gbMgYuvc9Yh2wl2/KcqqRzg7NtAPZ0swZzwokrCqFSt0oB5a0uixg==","shasum":"0494356884bd07fecb8b678dbcbb653fb1e326fe","tarball":"https://registry.npmjs.org/@buildvision/nest-sdk-generator/-/nest-sdk-generator-1.1.3.tgz","fileCount":69,"unpackedSize":289606,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIDaQ2zhjJgLMKZ74urcWqQzz9a7IH0fIsbquIkNo4+wOAiAXtQSqFNWhJSe29eUpia5apPKJSfvDGMQ7sxvudNve0A=="}]},"_npmUser":{"name":"tophep","email":"christophe@buildvision.io"},"directories":{},"maintainers":[{"name":"tophep","email":"christophe@buildvision.io"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/nest-sdk-generator_1.1.3_1708492871505_0.5522776289711275"},"_hasShrinkwrap":false},"1.2.0":{"name":"@buildvision/nest-sdk-generator","author":{"name":"BuildVision","email":"christophe@buildvision.io"},"version":"1.2.0","description":"A full-powered SDK generator for NestJS","keywords":["nest","nestjs","sdk","generator","typescript","frontend","api"],"main":"build/bin.js","scripts":{"prepare":"npm run build","build":"tsc -p tsconfig.json --outDir build","start":"npm run build && node build/bin.js"},"bin":{"nest-sdk-generator":"build/bin.js"},"dependencies":{"chalk":"~4.1.2","minimist":"~1.2.7","prettier":"^2.7.1","ts-morph":"~16.0.0"},"devDependencies":{"@types/minimist":"^1.2.2","@types/node":"~18.11.9","@types/prettier":"^2.7.1","typescript":"~4.8.4"},"_id":"@buildvision/nest-sdk-generator@1.2.0","gitHead":"a4cbd7c45d823fe827a2d92e9d67cd9704dc62a9","types":"./build/bin.d.ts","_nodeVersion":"20.9.0","_npmVersion":"10.4.0","dist":{"integrity":"sha512-RpNkWm4eZKydfhJ+eitUHZdAjo10kFlwl/Kwhr+A2JPybVplBm50HHHmQb1LFMUkTl44H+2FS8BiGj3oF2Kpcw==","shasum":"100599ed17798931e138f6aa8967d327ce83659a","tarball":"https://registry.npmjs.org/@buildvision/nest-sdk-generator/-/nest-sdk-generator-1.2.0.tgz","fileCount":69,"unpackedSize":290637,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCkavP7VE+OFCbij1D1cPCp8z4IE20Jna3AqSM1xO83uAIhAKJQKQt5GEtgR2o/+ZzAbPtb5sjt0Omnbxsl0LfEGL0Z"}]},"_npmUser":{"name":"tophep","email":"christophe@buildvision.io"},"directories":{},"maintainers":[{"name":"tophep","email":"christophe@buildvision.io"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/nest-sdk-generator_1.2.0_1708496910404_0.11501221523734118"},"_hasShrinkwrap":false},"1.2.1":{"name":"@buildvision/nest-sdk-generator","author":{"name":"BuildVision","email":"christophe@buildvision.io"},"version":"1.2.1","description":"A full-powered SDK generator for NestJS","keywords":["nest","nestjs","sdk","generator","typescript","frontend","api"],"main":"build/bin.js","scripts":{"prepare":"npm run build","build":"tsc -p tsconfig.json --outDir build","start":"npm run build && node build/bin.js"},"bin":{"nest-sdk-generator":"build/bin.js"},"dependencies":{"chalk":"~4.1.2","minimist":"~1.2.7","prettier":"^2.7.1","ts-morph":"~16.0.0"},"devDependencies":{"@types/minimist":"^1.2.2","@types/node":"~18.11.9","@types/prettier":"^2.7.1","typescript":"~4.8.4"},"_id":"@buildvision/nest-sdk-generator@1.2.1","gitHead":"353caf8104a20a6e16373cb4a8cced678a12f2c0","types":"./build/bin.d.ts","_nodeVersion":"20.9.0","_npmVersion":"10.4.0","dist":{"integrity":"sha512-7LN1JuyxRxQt3dsuMY+lg4q2p4ik7DrZVqYMOdkXm42k34Qu4INPVYeallxD18OpW6g2MntLqpOdtD5iT3XNzA==","shasum":"2781fb2b1fb88590dca14dd3b2c2ba7a07f73d00","tarball":"https://registry.npmjs.org/@buildvision/nest-sdk-generator/-/nest-sdk-generator-1.2.1.tgz","fileCount":69,"unpackedSize":292265,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCwROMSzxtV+rPCzxaJOzYkJWqsgxcZ9cHhQenk4yCEywIgNTW+VsunamSMgY9ABbLYOxcEUxRwrHHET95s8f/N4Dc="}]},"_npmUser":{"name":"tophep","email":"christophe@buildvision.io"},"directories":{},"maintainers":[{"name":"tophep","email":"christophe@buildvision.io"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/nest-sdk-generator_1.2.1_1708499581682_0.889959246370805"},"_hasShrinkwrap":false},"1.2.2":{"name":"@buildvision/nest-sdk-generator","author":{"name":"BuildVision","email":"christophe@buildvision.io"},"version":"1.2.2","description":"A full-powered SDK generator for NestJS","keywords":["nest","nestjs","sdk","generator","typescript","frontend","api"],"main":"build/bin.js","scripts":{"prepare":"npm run build","build":"tsc -p tsconfig.json --outDir build","start":"npm run build && node build/bin.js"},"bin":{"nest-sdk-generator":"build/bin.js"},"dependencies":{"chalk":"~4.1.2","minimist":"~1.2.7","prettier":"^2.7.1","ts-morph":"~16.0.0"},"devDependencies":{"@types/minimist":"^1.2.2","@types/node":"~18.11.9","@types/prettier":"^2.7.1","typescript":"~4.8.4"},"_id":"@buildvision/nest-sdk-generator@1.2.2","gitHead":"83da283898ef30ecd06c603bba854f496316a13c","types":"./build/bin.d.ts","_nodeVersion":"20.9.0","_npmVersion":"10.4.0","dist":{"integrity":"sha512-Lea4jCkxN669rf3FKL1fEDxBuUvY5hYqbKDTgafWIonH5HlX/kFlyJLSWGLn4xbdpP6CzPho4Tk27YDhjgsV8Q==","shasum":"40975c008bc8aa3585fec2928e142168968870e4","tarball":"https://registry.npmjs.org/@buildvision/nest-sdk-generator/-/nest-sdk-generator-1.2.2.tgz","fileCount":69,"unpackedSize":291780,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIFJOFd7PzyKwzf/tcjguWPC3k0YlrpOoyfy9ZWQYKGlWAiAkEN+b/CCNL7407iUm2eHzJcNnV+k2qiUQ0naqSEuUAQ=="}]},"_npmUser":{"name":"tophep","email":"christophe@buildvision.io"},"directories":{},"maintainers":[{"name":"tophep","email":"christophe@buildvision.io"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/nest-sdk-generator_1.2.2_1708608761358_0.6932568487633315"},"_hasShrinkwrap":false},"2.0.0":{"name":"@buildvision/nest-sdk-generator","author":{"name":"BuildVision","email":"christophe@buildvision.io"},"version":"2.0.0","description":"A full-powered SDK generator for NestJS","keywords":["nest","nestjs","sdk","generator","typescript","frontend","api"],"main":"build/bin.js","scripts":{"prepare":"npm run build","build":"tsc -p tsconfig.json --outDir build","start":"npm run build && node build/bin.js","typecheck":"bun tsc --project tsconfig.json --noEmit"},"bin":{"nest-sdk-generator":"build/bin.js"},"dependencies":{"chalk":"~4.1.2","minimist":"~1.2.7","prettier":"^2.7.1","ts-morph":"~16.0.0"},"devDependencies":{"@types/minimist":"^1.2.2","@types/node":"~18.11.9","@types/prettier":"^2.7.1","typescript":"~4.8.4"},"_id":"@buildvision/nest-sdk-generator@2.0.0","gitHead":"c7d0d555ef3f29a86485b043d41f4a995d5fdedc","types":"./build/bin.d.ts","_nodeVersion":"20.9.0","_npmVersion":"10.4.0","dist":{"integrity":"sha512-LOqco13mz9pwrNzYyI+nTGQAEx7c6Xi3Fr0Tc0tRpZu2x0bOS6urpeMVvinK/ENs9FYSAeZtznZmkvP4ArgNMQ==","shasum":"203a14c46a6f18496bca1e32745f6abb80bd8e28","tarball":"https://registry.npmjs.org/@buildvision/nest-sdk-generator/-/nest-sdk-generator-2.0.0.tgz","fileCount":70,"unpackedSize":328923,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCID3DK2K3fgTdlUbpDBcIgirjb0hP9MC7ieaIfRy0i2G2AiB6vCejyLfgsKlY4iFx0Sd3uGlz6siwpXv+jFj5fQSodA=="}]},"_npmUser":{"name":"tophep","email":"christophe@buildvision.io"},"directories":{},"maintainers":[{"name":"tophep","email":"christophe@buildvision.io"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/nest-sdk-generator_2.0.0_1708686736653_0.7829710379481885"},"_hasShrinkwrap":false},"2.1.0":{"name":"@buildvision/nest-sdk-generator","author":{"name":"BuildVision","email":"christophe@buildvision.io"},"version":"2.1.0","description":"A full-powered SDK generator for NestJS","keywords":["nest","nestjs","sdk","generator","typescript","frontend","api"],"main":"build/bin.js","scripts":{"prepare":"npm run build","build":"tsc -p tsconfig.json --outDir build","start":"npm run build && node build/bin.js","typecheck":"bun tsc --project tsconfig.json --noEmit","lint":"bun eslint --quiet . --fix"},"bin":{"nest-sdk-generator":"build/bin.js"},"dependencies":{"chalk":"~4.1.2","minimist":"~1.2.7","prettier":"^3.2.5","ts-morph":"~16.0.0"},"devDependencies":{"@types/minimist":"^1.2.2","@types/node":"~18.11.9","typescript":"^5.2.2","@typescript-eslint/eslint-plugin":"^6.13.2","@typescript-eslint/parser":"^6.13.2","eslint":"^8.50.0","eslint-config-prettier":"^9.1.0","eslint-import-resolver-typescript":"^3.6.1","eslint-plugin-eslint-comments":"^3.2.0","eslint-plugin-import":"^2.27.5","eslint-plugin-prettier":"^5.0.0","eslint-plugin-sort-destructure-keys":"^1.5.0","eslint-plugin-typescript-sort-keys":"^3.1.0"},"_id":"@buildvision/nest-sdk-generator@2.1.0","gitHead":"22fe080def2232dcb2bf34866f3b3bad3b532a30","types":"./build/bin.d.ts","_nodeVersion":"20.9.0","_npmVersion":"10.4.0","dist":{"integrity":"sha512-dVb+uRe9PirXw5yh+OiLk0qKO5eOQs/LfjH0HPCT54pDG3EXXZfMhDP5ikMcGcI/4SkwpiYidAmJ/RPQXWSYpQ==","shasum":"66befdec791373a6dab76b63fb4d558425a074ab","tarball":"https://registry.npmjs.org/@buildvision/nest-sdk-generator/-/nest-sdk-generator-2.1.0.tgz","fileCount":86,"unpackedSize":508991,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIB/Qnd0ywev5/u8PyF7HSpQ9UM62t0M1cA/lK54VSY9QAiAGFSiOqk/NAXQRM06Fi5sX2xj1ixOFHeHIg+5Yrm2/xA=="}]},"_npmUser":{"name":"tophep","email":"christophe@buildvision.io"},"directories":{},"maintainers":[{"name":"tophep","email":"christophe@buildvision.io"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/nest-sdk-generator_2.1.0_1709190781947_0.8767502424980034"},"_hasShrinkwrap":false},"2.2.0":{"name":"@buildvision/nest-sdk-generator","author":{"name":"BuildVision","email":"christophe@buildvision.io"},"version":"2.2.0","description":"A full-powered SDK generator for NestJS","keywords":["nest","nestjs","sdk","generator","typescript","frontend","api"],"main":"build/bin.js","scripts":{"prepare":"npm run build","build":"tsc -p tsconfig.json --outDir build","start":"npm run build && node build/bin.js","typecheck":"bun tsc --project tsconfig.json --noEmit","lint":"bun eslint --quiet . --fix"},"bin":{"nest-sdk-generator":"build/bin.js"},"dependencies":{"chalk":"~4.1.2","minimist":"~1.2.7","prettier":"^3.2.5","ts-morph":"~16.0.0"},"devDependencies":{"@types/minimist":"^1.2.2","@types/node":"~18.11.9","typescript":"^5.2.2","@typescript-eslint/eslint-plugin":"^6.13.2","@typescript-eslint/parser":"^6.13.2","eslint":"^8.50.0","eslint-config-prettier":"^9.1.0","eslint-import-resolver-typescript":"^3.6.1","eslint-plugin-eslint-comments":"^3.2.0","eslint-plugin-import":"^2.27.5","eslint-plugin-prettier":"^5.0.0","eslint-plugin-sort-destructure-keys":"^1.5.0","eslint-plugin-typescript-sort-keys":"^3.1.0"},"_id":"@buildvision/nest-sdk-generator@2.2.0","gitHead":"7136a18ca62696f1dec1c01158ce7f2ca540df0e","types":"./build/bin.d.ts","_nodeVersion":"20.9.0","_npmVersion":"10.4.0","dist":{"integrity":"sha512-smRsMktLcKhL8wMr1NmcqU4bBNyJk4F+p5d8kOd8Dm4tDWL7jXfSXlqHszF7EBnX7w/vtK1qK2xP/F2WCMTEjg==","shasum":"87ded92fa427e2accd4eb6cf7c5d205bccf56185","tarball":"https://registry.npmjs.org/@buildvision/nest-sdk-generator/-/nest-sdk-generator-2.2.0.tgz","fileCount":86,"unpackedSize":517692,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDPXsdFLjeaJzyp2W7/6s/EimlOxDtHl96285OR+Mud7QIgNldxjdUvzu6Iy1lnU8mD2CsIYKoktxz26/B/IQ58m9Y="}]},"_npmUser":{"name":"tophep","email":"christophe@buildvision.io"},"directories":{},"maintainers":[{"name":"tophep","email":"christophe@buildvision.io"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/nest-sdk-generator_2.2.0_1710640488014_0.24224738668238466"},"_hasShrinkwrap":false},"2.2.1":{"name":"@buildvision/nest-sdk-generator","author":{"name":"BuildVision","email":"christophe@buildvision.io"},"version":"2.2.1","description":"A full-powered SDK generator for NestJS","keywords":["nest","nestjs","sdk","generator","typescript","frontend","api"],"main":"build/bin.js","scripts":{"prepare":"npm run build","build":"tsc -p tsconfig.json --outDir build","start":"npm run build && node build/bin.js","typecheck":"bun tsc --project tsconfig.json --noEmit","lint":"bun eslint --quiet . --fix"},"bin":{"nest-sdk-generator":"build/bin.js"},"dependencies":{"chalk":"~4.1.2","minimist":"~1.2.7","prettier":"^3.2.5","ts-morph":"~16.0.0"},"devDependencies":{"@types/minimist":"^1.2.2","@types/node":"~18.11.9","typescript":"^5.2.2","@typescript-eslint/eslint-plugin":"^6.13.2","@typescript-eslint/parser":"^6.13.2","eslint":"^8.50.0","eslint-config-prettier":"^9.1.0","eslint-import-resolver-typescript":"^3.6.1","eslint-plugin-eslint-comments":"^3.2.0","eslint-plugin-import":"^2.27.5","eslint-plugin-prettier":"^5.0.0","eslint-plugin-sort-destructure-keys":"^1.5.0","eslint-plugin-typescript-sort-keys":"^3.1.0"},"_id":"@buildvision/nest-sdk-generator@2.2.1","gitHead":"5d6a29d0055490ecc84492013435a250d49c9b7e","types":"./build/bin.d.ts","_nodeVersion":"20.9.0","_npmVersion":"10.4.0","dist":{"integrity":"sha512-6j44OzN3CPJPTrRzXJludi2uNEDc/5UJDvNwTsuDezV8FPbckrenNjgHzZn1r7FW8SsDauK3KeA1pwId1Q3otw==","shasum":"38f3ab5c792ef07bcaa545be22fd202a7f72a1dd","tarball":"https://registry.npmjs.org/@buildvision/nest-sdk-generator/-/nest-sdk-generator-2.2.1.tgz","fileCount":86,"unpackedSize":518344,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCICKSgu9Q1i5raRpc80f1aDnYOUVWU2esawvc1hjdG0TbAiAH9cxgAt0DRjGedkQf6lsaP/6cloFvxHZ8VIrYgn7GuQ=="}]},"_npmUser":{"name":"tophep","email":"christophe@buildvision.io"},"directories":{},"maintainers":[{"name":"tophep","email":"christophe@buildvision.io"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/nest-sdk-generator_2.2.1_1710745246217_0.1881813712896212"},"_hasShrinkwrap":false},"2.2.2":{"name":"@buildvision/nest-sdk-generator","author":{"name":"BuildVision","email":"christophe@buildvision.io"},"version":"2.2.2","description":"A full-powered SDK generator for NestJS","keywords":["nest","nestjs","sdk","generator","typescript","frontend","api"],"main":"build/bin.js","scripts":{"prepare":"npm run build","build":"tsc -p tsconfig.json --outDir build","start":"npm run build && node build/bin.js","typecheck":"bun tsc --project tsconfig.json --noEmit","lint":"bun eslint --quiet . --fix"},"bin":{"nest-sdk-generator":"build/bin.js"},"dependencies":{"chalk":"~4.1.2","minimist":"~1.2.7","prettier":"^3.2.5","ts-morph":"~16.0.0"},"devDependencies":{"@types/minimist":"^1.2.2","@types/node":"~18.11.9","typescript":"^5.2.2","@typescript-eslint/eslint-plugin":"^6.13.2","@typescript-eslint/parser":"^6.13.2","eslint":"^8.50.0","eslint-config-prettier":"^9.1.0","eslint-import-resolver-typescript":"^3.6.1","eslint-plugin-eslint-comments":"^3.2.0","eslint-plugin-import":"^2.27.5","eslint-plugin-prettier":"^5.0.0","eslint-plugin-sort-destructure-keys":"^1.5.0","eslint-plugin-typescript-sort-keys":"^3.1.0"},"_id":"@buildvision/nest-sdk-generator@2.2.2","gitHead":"d3eb488011af86776c3381d0fabf2aa082ab3313","types":"./build/bin.d.ts","_nodeVersion":"20.9.0","_npmVersion":"10.4.0","dist":{"integrity":"sha512-xkb+Do+TBsJoYBL1/Znj2dEPCwjRil5oSt2T7L7ZthXejhGtGvdjA2ZAE1ynzBpJNTCY1MoMOAlx9dZsGEHyBQ==","shasum":"4f11c8d9471d2ee1c7df97308e0218a7b951c8d1","tarball":"https://registry.npmjs.org/@buildvision/nest-sdk-generator/-/nest-sdk-generator-2.2.2.tgz","fileCount":86,"unpackedSize":532845,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIFt4R27j+LkiXB6mqq/tOrhDPqiLYb0DZpiMRdTCSfg1AiA09a/NIfZiuZlmoMrJAmoYglVGY4yzHVUOHDj3TmT01g=="}]},"_npmUser":{"name":"tophep","email":"christophe@buildvision.io"},"directories":{},"maintainers":[{"name":"tophep","email":"christophe@buildvision.io"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/nest-sdk-generator_2.2.2_1712027364584_0.7162189131245753"},"_hasShrinkwrap":false},"2.3.0":{"name":"@buildvision/nest-sdk-generator","author":{"name":"BuildVision","email":"christophe@buildvision.io"},"version":"2.3.0","description":"A full-powered SDK generator for NestJS","keywords":["nest","nestjs","sdk","generator","typescript","frontend","api"],"main":"build/bin.js","scripts":{"prepare":"npm run build","build":"tsc -p tsconfig.json --outDir build","start":"npm run build && node build/bin.js","typecheck":"bun tsc --project tsconfig.json --noEmit","lint":"bun eslint --quiet . --fix"},"bin":{"nest-sdk-generator":"build/bin.js"},"dependencies":{"chalk":"~4.1.2","minimist":"~1.2.7","prettier":"^3.2.5","ts-morph":"~16.0.0"},"devDependencies":{"@types/minimist":"^1.2.2","@types/node":"~18.11.9","typescript":"^5.2.2","@typescript-eslint/eslint-plugin":"^6.13.2","@typescript-eslint/parser":"^6.13.2","eslint":"^8.50.0","eslint-config-prettier":"^9.1.0","eslint-import-resolver-typescript":"^3.6.1","eslint-plugin-eslint-comments":"^3.2.0","eslint-plugin-import":"^2.27.5","eslint-plugin-prettier":"^5.0.0","eslint-plugin-sort-destructure-keys":"^1.5.0","eslint-plugin-typescript-sort-keys":"^3.1.0"},"_id":"@buildvision/nest-sdk-generator@2.3.0","gitHead":"d3eb488011af86776c3381d0fabf2aa082ab3313","types":"./build/bin.d.ts","_nodeVersion":"20.9.0","_npmVersion":"10.4.0","dist":{"integrity":"sha512-BY2UYKCuYOprlreLFUN8Q3YV459EkKhmRYAcrmLGckgXHExQJCYLx5mhR7iVgZXoQqfYiJdyjbEp20/aQ0EkFw==","shasum":"d7e010b0d747223f9372594d4a8c43e1a77f7232","tarball":"https://registry.npmjs.org/@buildvision/nest-sdk-generator/-/nest-sdk-generator-2.3.0.tgz","fileCount":86,"unpackedSize":531910,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIGhhpVwezgez5jkyXzrNxZufAZ74EKDj1IOnCnDa5sjLAiEAuWfoBal+YQWz9wsNSHGa4cLLonQQsC8b24aGa2R5Ftk="}]},"_npmUser":{"name":"tophep","email":"christophe@buildvision.io"},"directories":{},"maintainers":[{"name":"tophep","email":"christophe@buildvision.io"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/nest-sdk-generator_2.3.0_1712124159328_0.8797847615862315"},"_hasShrinkwrap":false},"2.3.1":{"name":"@buildvision/nest-sdk-generator","author":{"name":"BuildVision","email":"christophe@buildvision.io"},"version":"2.3.1","description":"A full-powered SDK generator for NestJS","keywords":["nest","nestjs","sdk","generator","typescript","frontend","api"],"main":"build/bin.js","scripts":{"prepare":"npm run build","build":"tsc -p tsconfig.json --outDir build","start":"npm run build && node build/bin.js","typecheck":"bun tsc --project tsconfig.json --noEmit","lint":"bun eslint --quiet . --fix"},"bin":{"nest-sdk-generator":"build/bin.js"},"dependencies":{"chalk":"~4.1.2","minimist":"~1.2.7","prettier":"^3.2.5","ts-morph":"~16.0.0"},"devDependencies":{"@types/minimist":"^1.2.2","@types/node":"~18.11.9","typescript":"^5.2.2","@typescript-eslint/eslint-plugin":"^6.13.2","@typescript-eslint/parser":"^6.13.2","eslint":"^8.50.0","eslint-config-prettier":"^9.1.0","eslint-import-resolver-typescript":"^3.6.1","eslint-plugin-eslint-comments":"^3.2.0","eslint-plugin-import":"^2.27.5","eslint-plugin-prettier":"^5.0.0","eslint-plugin-sort-destructure-keys":"^1.5.0","eslint-plugin-typescript-sort-keys":"^3.1.0"},"_id":"@buildvision/nest-sdk-generator@2.3.1","gitHead":"cf9c2e802cd5370fb12c54a6eba36a04e8df34d3","types":"./build/bin.d.ts","_nodeVersion":"20.9.0","_npmVersion":"10.4.0","dist":{"integrity":"sha512-TOGYaryRItvTp84NMAYkFGaBy1L4ugcBgiVY/f3UpvcMrsNmXnpbS4QLxh1FedQ9rGvfVJU+0Q/0lHFPrfqYsA==","shasum":"b3f94e564583f57a6b7e7bb088596f011f4d0696","tarball":"https://registry.npmjs.org/@buildvision/nest-sdk-generator/-/nest-sdk-generator-2.3.1.tgz","fileCount":85,"unpackedSize":529778,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDqWQ6n9/4XXX6qv7Efi+9bO2qvDUzkx1mxria6cE030gIhAKXo53Y0MUGO3d7Hrgza7cRW/yHi1vP3G4IKjwPA+z2g"}]},"_npmUser":{"name":"tophep","email":"christophe@buildvision.io"},"directories":{},"maintainers":[{"name":"tophep","email":"christophe@buildvision.io"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/nest-sdk-generator_2.3.1_1716789796417_0.9033507107669101"},"_hasShrinkwrap":false}},"time":{"created":"2024-02-21T05:21:11.504Z","1.1.3":"2024-02-21T05:21:11.957Z","modified":"2024-05-27T06:03:16.877Z","1.2.0":"2024-02-21T06:28:30.551Z","1.2.1":"2024-02-21T07:13:01.931Z","1.2.2":"2024-02-22T13:32:41.643Z","2.0.0":"2024-02-23T11:12:16.794Z","2.1.0":"2024-02-29T07:13:02.186Z","2.2.0":"2024-03-17T01:54:48.219Z","2.2.1":"2024-03-18T07:00:46.404Z","2.2.2":"2024-04-02T03:09:24.828Z","2.3.0":"2024-04-03T06:02:39.707Z","2.3.1":"2024-05-27T06:03:16.680Z"},"maintainers":[{"name":"tophep","email":"christophe@buildvision.io"}],"description":"A full-powered SDK generator for NestJS","keywords":["nest","nestjs","sdk","generator","typescript","frontend","api"],"author":{"name":"BuildVision","email":"christophe@buildvision.io"},"readme":"# nest-sdk-generator by [![](https://user-images.githubusercontent.com/73881870/130991041-a4a1f0f4-21f5-4a54-a085-974f80f56ed2.png)](https://lonestone.io/)\n\n[![](https://img.shields.io/npm/v/nest-sdk-generator)](https://www.npmjs.com/package/nest-sdk-generator)\n\n`nest-sdk-generator` is a tool that allows you to build automatically and in seconds a SDK for client applications to consume a NestJS server's API.\n\nThe project is split in two parts:\n\n- The **analyzer** looks for all modules, controllers, methods and types in the NestJS server, and builds a JSON schema containing all informations\n- The **generator** takes this JSON schema and generates a directory containing the SDK\n\nThe project has been created and is currently maintained by our developers at [Lonestone](https://lonestone.io/).\n\nFor a quick glance at performances, check [here](#how-fast-is-it).\n\n**Table of contents:**\n\n- [What is nest-sdk-generator and why should I use it?](#what-is-nest-sdk-generator-and-why-should-i-use-it)\n- [Quick usage example](#quick-usage-example)\n- [How fast is it?](#how-fast-is-it)\n- [Features](#features)\n- [Limitations](#limitations)\n- [Using the SDK](#using-the-sdk)\n- [Architecture](#architecture)\n- [Step-by-step generation tutorial](#step-by-step-generation-tutorial)\n    - [Recommandations](#recommandations)\n- [SDK usage](#sdk-usage)\n    - [Importing API types](#importing-api-types)\n  - [External files](#external-files)\n- [Configuration options](#configuration-options)\n- [Magic types](#magic-types)\n- [Frequently-asked questions](#frequently-asked-questions)\n  - [Does this replace Swagger?](#does-this-replace-swagger)\n  - [I have a GraphQL API, what can this project do for me?](#i-have-a-graphql-api-what-can-this-project-do-for-me)\n  - [Does the SDK has any performance overhead?](#does-the-sdk-has-any-performance-overhead)\n  - [How do I update the SDK once I change the API's source code?](#how-do-i-update-the-sdk-once-i-change-the-apis-source-code)\n  - [Is the SDK documented?](#is-the-sdk-documented)\n  - [Can I add header or other data on-the-fly when making requests?](#can-i-add-header-or-other-data-on-the-fly-when-making-requests)\n  - [Is there a way to log the requests or responses somewhere?](#is-there-a-way-to-log-the-requests-or-responses-somewhere)\n  - [Does the API server needs to be running to generate a SDK?](#does-the-api-server-needs-to-be-running-to-generate-a-sdk)\n  - [Can I fork this project to make my own version of it?](#can-i-fork-this-project-to-make-my-own-version-of-it)\n  - [Can I use this project in commercial software?](#can-i-use-this-project-in-commercial-software)\n- [License](#license)\n\n## What is nest-sdk-generator and why should I use it?\n\nnest-sdk-generator is a tool that creates a client-side SDK based on a NestJS REST API. The SDK can be used to call the API's routes seamlessly without any friction, and also enforces type safety by typing all parameters and return values based on the API itself.\n\nThis brings several advantages, including:\n\n- Missing or bad parameters and return types will be detected at compilation time\n- IDE autocompletion for parameters and return values without needing to look at the doc\n- All API routes are listed in a single block allowing to list all at once\n- Routes are split across controllers, themselves split across modules, keeping the same hierarchy as your API even if the routes don't\n- Global request and response handler acting as the main request actor, allowing to customize requests by providing additional values like headers if required\n- Simple & clean placeholders for server-side types that can't be ported to client-side (e.g. ORM dictionary types)\n\nThe generator also allows you to (re-)generate a full SDK in seconds with a single command. And in case something goes wrong, you'll be able to pinpoint exactly what the problem is thanks to the colorful (can be disabled) verbose output. A log file can also be used to store all output informations in one place.\n\n## Quick usage example\n\nThe SDK generator only requires you to create a small JSON configuration file to indicate where you API is located at, and to run a simple `npx nest-sdk-generator <path to the configuration file>` command. This will generate a client-side SDK hierarchised in modules, controllers and methods that will allow you to call your API's routes without manually writing the URIs yourself. The query parameters and body content is also strictly typed and automatically converted to be sent to your API.\n\nCalling methods will look like this:\n\n```typescript\nimport { userController } from \"../sdk/userModule\"\nimport { articleController } from \"../sdk/articleModule\"\n\nconst user = await userController.profile({ username: \"jack\" })\n\nconst userArticles = await articleController.getAll({ author: user.id })\n\nconst user = await articleController.publish({}, {\n  author: user.id,\n  content: `${user.pseudo} has already published ${userArticles.length} articles!`\n})\n```\n\nYou can find a complete demonstration API in the [`demo/server`](demo/server) directory, as well as a frontend using a SDK based on this API in [`demo/front`](demo/front). The SDK configuration is located in [`demo/front/sdk-generator.json`](demo/front/sdk-generator.json).\n\n## How fast is it?\n\nOn our internal test project, with 20 controllers and 80 routes, the full process takes 3 seconds (from a cold start) on a Core i7-8750H (6-core laptop CPU from 2018) to generate 84 file with 2246 lines of code.\n\nThe duration should be roughly proportional to the quantity of routes and DTOs you use in your application, although on very small applications in usually won't go below 2 seconds on such a CPU.\n\n## Features\n\n- Full support for idiomatic NestJS modules and controllers\n- Recursive extraction of types controllers depend on, including types located in `node_modules`\n- Can extract classes, interfaces, enumerations and type aliases\n- Fully compatible with WSL, even if packages are installed using symbolic links from Windows\n- Compatible with alternative package managers like PNPM\n- Extremely detailed output by default for easier debugging in case of errors\n- Tree-shaking so the compiled code will only contain the methods you use from the generated SDK, no matter its size\n\n## Limitations\n\nnest-sdk-generator comes with a set of limitations which can find below:\n\n1. nest-sdk-generator does not check if the source files compile correctly. Therefore, if you try to use a type that doesn't exist, the generation may still succeed although compiling the code would fail. In such case, the resulting output type is `any`.\n\n2. A current limitation of nest-sdk-generator is that it finds a controller's module by looking for a `.module.ts` file in the current directory, and parent directories if none is found in the controller's one. This means controller files must be put under a module's directory, and two module files cannot be put in the same directory.\n\n3. Types belonging to namespaces are currently not supported and will result in error in the generated code\n\n4. Due to limitations of the TypeScript compiler, importing from the project's root (e.g. `import { SomeType } from \"src/file.ts\"` instead of `import { SomeType } from \"../file.ts\"`) will result in an `any` type at generation, because such types are not recognized when manipulating types. If you want to avoid this behaviour in Visual Studio Code, you can add `\"typescript.preferences.importModuleSpecifier\": \"relative\"` to your settings.\n\n## Using the SDK\n\nThe SDK exposes several directories:\n\n- One directory for each module in your NestJS application, with inside one file for each controller belonging to this module\n- `_types`, containing the types used by the controllers, with the same directory structure than in your original project\n\nEach controller file exposes a simple record object with keys being your controller's methods' name. Each method takes the route's arguments (e.g. the identifier in `/users/get/:id`), the request's BODY (JSON) as well as the query parameters (e.g. `?something=...`).\n\nMethods return a typed `Promise<>` with the original method's return type.\n\n- If the requests succeeds and returns a valid JSON string, it is parsed and returned by the method\n- If the requests fail or cannot be decoded correctly, the promise fails\n\n## Architecture\n\nnest-sdk-generator analyzes your NestJS API using a provided configuration file, and produces a client-side SDK. This SDK is made of modules containing route methods that all call a central handler with the corresponding URI and parameters. The handler makes the request to the server and transmits the response. This is where you can customize the data to send to the server, if they need normalization, encryption, hashing, parsing, authentication, or anything else.\n\n## Step-by-step generation tutorial\n\nGenerating a SDK is made in two steps:\n\n- Creating a configuration file for the generator\n- Performing the generation through `sdk-generator generate`\n\nLet's suppose we have a monorepo, with our server being in `apps/api` and running at `http://localhost:3000`, while our frontend is located in `apps/front`. We have the following structure:\n\n```\n.\n└── apps\n    ├── api\n    |   └── src\n    |       └── index.ts\n    └── front\n        └── src\n            └── index.ts\n```\n\nWe want the SDK to be located in `apps/front/sdk`.\n\nFirst, we must create a configuration file. Let's put it in `front/sdk-generator.json`:\n\n```json\n{\n  \"apiInputPath\": \"../server\",\n  \"sdkOutputPath\": \"sdk\",\n  \"sdkInterfacePath\": \"sdk-interface.ts\"\n}\n```\n\nLet's now generate the SDK:\n\n```shell\nsdk-generator apps/front/sdk-generator.json\n```\n\nWe now have a `apps/front/sdk` directory with our SDK inside, and a default interface located in `apps/front/sdk-interface.ts`, which will handle the requests. It will only be generated if it doesn't exist, so you can edit it and commit in your repository without worrying about it being overwritten.\n\n**NOTE:** You can disable this generation by setting the `generateDefaultSdkInterface` setting to `false` in the `sdk-generator.json` file.\n\n#### Recommandations\n\nIn most cases, you should add the SDK's output path to your `.gitignore` and perform the generation automatically in your CI.\n\nIf you want to save time in the CI, you can save the generated SDK as an artifact and put it in the registry with the key being the hash of the server's source directory. This way, the SDK will only be rebuilt when the source directory changes.\n\n## SDK usage\n\nLet's suppose the NestJS server has an `UserModule` module, containing an `UserController` controller with a `getOne(id: string): Promise<UserDTO>` method. We can use it from the SDK:\n\n```typescript\nimport { userController } from '<sdk path>/userModule/userController'\n\nconst user = await userController.getOne({ id: 'some_id' })\n// typeof user == UserDTO\n```\n\nEach method takes three arguments: the parameters (`:xxx` in the original method's route), the body's content, and the query (`?xxx=yyy`). The query is always optional, while the body is only optional if nothing or an empty object is expected. The parameters are only optional if no parameter, nor body, is expected.\n\n#### Importing API types\n\nIt's also possible to manually import types the API depends on.\n\nFor instance, let's suppose `UserDTO` comes from a shared DTO package which is installed in our NestJS API's directory under `node_modules/@project/dtos/user.d.ts`.\n\nWe can import it from the SDK like this:\n\n```typescript\nimport { UserDTO } from '<sdk path>/_types/node_modules/@project/dtos/user.d'\n```\n\nIt can then be used normally:\n\n```typescript\nimport { userController } from '<sdk path>/userModule/userController'\nimport { UserDTO } from '<sdk path>/_types/node_modules/@project/dtos/user.d'\n\nconst user: UserDTO = await userController.getOne({ id: 'some_id' })\n```\n\n### External files\n\nIn some situations, some of the types you are importing may belong to an external directory than the provided API source directory. For instance, if you use a mono-repository, you may have your API in `apps/api` but your DTOs built as a package in `node_modules/@apps/dtos`. In such case, the files will be placed in a special directory in `_types` called `_externalX` where `X` is the depth level (the farest the exernal file is, the larger this number will be).\n\nThis will make no difference when using these types, but this is a special case where the types hierarchy isn't perfectly respected.\n\n## Configuration options\n\nHere is the list of the configuration options you can use in the JSON file:\n\n| Option name                   | Default         | Value type    | Description                                                                           |\n| ----------------------------- | -------         | ------------- | ------------------------------------------------------------------------------------- |\n| `apiInputPath`                | -               | `string`      | Path to your API's source folder (e.g. `apps/api`)                                    |\n| `sdkOutputPath`                   | -               | `string`      | Path to generate the SDK at (e.g. `apps/front/src/sdk`)                               |\n| `sdkInterfacePath`            | -               | `string`      | Path to the SDK interface (e.g. `apps/front/src/sdk-interface.ts`)                    |\n| `magicTypes`                  | `[]`            | `MagicType[]` | Magic types (see below)                                                               |\n| `jsonOutput`                  | `null`          | `string`      | Write the analyzer's output to a file                                                 |\n| `jsonPrettyOutput`            | `null`          | `boolean`     | Prettify the output JSON if the option above is enabled                               |\n| `prettierConfig`              | `null`          | `string`      | Use a specific Prettier config (otherwise will try to find one in a parent directory) |\n| `prettify`                    | `true`          | `boolean`     | Set to `false` to disable SDK files prettifying                                       |\n| `tsconfigFile`                | `tsconfig.json` | `string`      | Use a custom tsconfig file                                                            |\n| `overwriteOldOutputDir`       | `true`          | `boolean`     | Set to `false` to not remove the old SDK directory when re-generating it              |\n| `generateDefaultSdkInterface` | `true`          | `boolean`     | Set to `false` to not generate a default SDK interface when it does not exist yet     |\n| `generateTimestamps`          | `true`          | `boolean`     | Set to `false` to not put the timestamp in the generated SDK files                    |\n| `verbose`                     | `false`         | `boolean`     | Display verbose informations                                                          |\n| `noColor`                     | `false`         | `boolean`     | Disable colored output                                                                |\n\n## Magic types\n\nIn some cases, there are types that may not be exportable using the generator. For instance:\n\n```tsx\n// ...\n\n@Entity()\nexport class Author {\n    // ...\n\n    @OneToMany(() => Article, (article) => article.author)\n    articles = new Collection<Article>(this)\n\n// ...\n}\n\n```\n\nHere, the `articles` field uses the `Collection<T>` type of Mikro-ORM, which is a circular type, meaning we can't export it. Plus, it contains lots of methods and depends on multiple Mikro-ORM types, which we don't want in our SDK.\n\nTo solve this problem, we can add a `magicTypes` entry in our configuration file:\n\n```json\n{\n  // ...\n  \"magicTypes\": [\n      {\n        \"nodeModuleFilePath\": \"@mikro-orm/core/entity/Collection.d.ts\",\n        \"typeName\": \"Collection\",\n        \"placeholderContent\": \"export type Collection<T, _> = Array<T>;\"\n      }\n  ]\n}\n\n```\n\nNow, when the SDK generator encounters the `Collection` type when it's imported from `@mikro-orm/core/entity/Collection.d.ts`, it will link to the `placeholderContent` we provided instead.\n\nNote that some magic types are already [built-in](src/analyzer/builtin.ts), such as the one we just saw. If you use a library very frequently and think others may benefit from a new magic type, feel free to [open a PR](https://github.com/lonestone/nest-sdk-generator/pulls)!\n\n## Frequently-asked questions\n\n### Does this replace Swagger?\n\nNo, nest-sdk-generator only generates a client-side SDK to make requests more easily to the server ; it doesn't generate a documentation by itself. Although all routes are organized with their original name and split across controllers and modules the same way they were in the API, that doesn't make a full documentation in itself.\n\n### I have a GraphQL API, what can this project do for me?\n\nUnfortunately, nest-sdk-generator isn't compatible with GraphQL API, and for a good reason: the whole point of this project is to bring structural typing to an API, but GraphQL already provides that. So there would be no point in this tool being compatible with GraphQL projects.\n\n### Does the SDK has any performance overhead?\n\nAbsolutely not. The generated SDK is only made of simple objets that will call the handler you provided through the interface script, and the said script will be in charge of making the request (with `fetch` by default). This means that no kind of data transformation/conversion happens behind-the-scenes.\n\n### How do I update the SDK once I change the API's source code?\n\nYou simply run the same shell command you used to generate the source code originally. There isn't a special subcommand for it, as it will simply delete the old SDK and replace it with the new one.\n\n### Is the SDK documented?\n\nEach file in the SDK uses a generic documentation, including the exact route model for route methods. This means you will be able to check what route is called by which method each time.\n\nHere is a quick glance at a generated file sample:\n\n```ts\n// ...\n/// Parent module: articleModule\n/// Controller: \"articleController\" registered as \"article\" (5 routes)\n\n// ...\n\nexport default {\n  // GET @ /article\n  getAll(params: {} = {}, body: {} = {}, query: {} = {}): Promise<Article[]> {\n    return request('GET', `/article`, body, query)\n  },\n\n  // GET @ /article/:slug\n  getOne(\n    params: { slug: string },\n    body: {} = {},\n    query: {} = {},\n  ): Promise<Article> {\n    return request('GET', `/article/${params.slug}`, body, query)\n  },\n\n  // ...\n}\n```\n\n### Can I add header or other data on-the-fly when making requests?\n\nAll of the SDK's methods use a central handler which calls a function you provided, where you can absolutely everything you can. You are in charge of making the requests thanks to the provided URI and query/body parameters, which means you can add, edit or remove whatever data you want.\n\n### Is there a way to log the requests or responses somewhere?\n\nAll of the SDK's methods use a central handler which calls a function you provided, where you can do absolutely everything you can. You are in charge of making \nthe requests thanks to the provided URI and query/body parameters, which means you can write the requests and responses to the local storage, send them to a log server, or anything else.\n\n### Does the API server needs to be running to generate a SDK?\n\nNo, the SDK is generated by analyzing the source code of your API, which means you don't need a server running for this.\n\n### Can I fork this project to make my own version of it?\n\nAbsolutely, that's what the MIT license is for. Although, if you could get in touch with us to indicate what changes you made to the generator it would be hugely helpful to improve it on our side ;)\n\n### Can I use this project in commercial software?\n\nAbsolutely, the MIT license allows you to do that without any royalties or particular constraint.\n\nIf you use this project to produce any kind of program, be it paid or not, we'd love to hear about it! Feel free to get in touch with us at [contact@lonestone.studio](mailto:contact@lonestone.studio) to tell us about your projects, so we can improve our tool even more with additional real-use cases.\n\n## License\n\nThis project is published under the terms of the [MIT License](LICENSE.md).\n","readmeFilename":"README.md"}