{"_id":"@codegenerator/node-gen","_rev":"12-8d87cb80752ee673a025fdb7f1e5d632","name":"@codegenerator/node-gen","dist-tags":{"latest":"3.0.4"},"versions":{"1.0.0":{"name":"@codegenerator/node-gen","version":"1.0.0","keywords":[],"author":"","license":"ISC","_id":"@codegenerator/node-gen@1.0.0","maintainers":[{"name":"ricardomalnati","email":"accounts@mbra.com.br"}],"dist":{"shasum":"32c20936f38ffd307f77b0abb081d9463648ce28","tarball":"https://registry.npmjs.org/@codegenerator/node-gen/-/node-gen-1.0.0.tgz","fileCount":39,"integrity":"sha512-ZLIR0V4nXXYFOn5aMUheTdKg2tFcHLZT49NNrBDv0nUAt5tuA0hbdMsU+bIxi/qG54N9NqOQywylI6ID02Z3Tg==","signatures":[{"sig":"MEUCIHpE6Zl5AQZZdFzF2xU0Br1vm/DYbgxRVuEHJbTUQ0iaAiEAhJ6S87gAxaLo1gpAgfvyS1J2ot+NRYRjWPCYVFsth+8=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":97008},"main":"main.js","gitHead":"b77b82fb7f0969e64a9f134cccc43d6e5e3de9fb","scripts":{"test":"echo \"Error: no test specified\" && exit 1"},"_npmUser":{"name":"ricardomalnati","email":"accounts@mbra.com.br"},"_npmVersion":"10.2.4","description":"NodeJS code generator from database.","directories":{},"_nodeVersion":"21.5.0","dependencies":{"pg":"^8.12.0","yargs":"^17.7.2","dotenv":"^16.4.5","ts-node":"^10.9.2","typeorm":"^0.3.20","@types/pg":"^8.11.6","typescript":"^5.5.4","@types/yargs":"^17.0.32","reflect-metadata":"^0.2.2"},"_hasShrinkwrap":false,"devDependencies":{"@types/node":"^22.0.2"},"_npmOperationalInternal":{"tmp":"tmp/node-gen_1.0.0_1723041044695_0.991974670635329","host":"s3://npm-registry-packages"}},"1.0.2":{"name":"@codegenerator/node-gen","version":"1.0.2","keywords":[],"author":"","license":"ISC","_id":"@codegenerator/node-gen@1.0.2","maintainers":[{"name":"ricardomalnati","email":"accounts@mbra.com.br"}],"dist":{"shasum":"dc75d91915affef14e6352864fb7daf700aac748","tarball":"https://registry.npmjs.org/@codegenerator/node-gen/-/node-gen-1.0.2.tgz","fileCount":39,"integrity":"sha512-nHb1gN7HxQ+UsH1WKNhWcxHiOcCTE8wGX8vvaNVOR0iaii+PjgwRYLP8N+kYMgVEwoHSBxbt3z//7hQwQBa8jg==","signatures":[{"sig":"MEUCIQCk3Wfe7Im2rXg5WvYpEN3Bjtgf0cLPFBG9+k7KusSdRQIgMAKXQ7Zr5rxR+8SbdMYULRDsfVAQLaO1pH1oxgQNBd0=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":97691},"main":"main.js","gitHead":"b824bdceb2daa10c941704274fa8649a101c5e3e","scripts":{"start":"bash db.reader.postgres.sh","publish:major":"git add . && git commit -m \"publishing a major\" && npm version major && npm publish","publish:minor":"git add . && git commit -m \"publishing a minor\" && npm version minor && npm publish","publish:patch":"git add . && git commit -m \"publishing a patch\" && npm version patch && npm publish","first:publishing":"npm org set codegenerator username owner && npm publish --access public"},"_npmUser":{"name":"ricardomalnati","email":"accounts@mbra.com.br"},"_npmVersion":"10.2.4","description":"NodeJS code generator from database.","directories":{},"_nodeVersion":"21.5.0","dependencies":{"pg":"^8.12.0","yargs":"^17.7.2","dotenv":"^16.4.5","ts-node":"^10.9.2","typeorm":"^0.3.20","@types/pg":"^8.11.6","typescript":"^5.5.4","@types/yargs":"^17.0.32","reflect-metadata":"^0.2.2"},"_hasShrinkwrap":false,"devDependencies":{"@types/node":"^22.0.2"},"_npmOperationalInternal":{"tmp":"tmp/node-gen_1.0.2_1723041911401_0.4034433043221912","host":"s3://npm-registry-packages"}},"1.0.3":{"name":"@codegenerator/node-gen","version":"1.0.3","keywords":["code-generator","NestJS","TypeScript","PostgreSQL","typeorm","database","schema","entities","services","controllers","modules","DTO","automation","project-setup","backend","nodejs","typescript-generator","nest-generator"],"author":"","license":"ISC","_id":"@codegenerator/node-gen@1.0.3","maintainers":[{"name":"ricardomalnati","email":"accounts@mbra.com.br"}],"dist":{"shasum":"59a406917f6e7c19e5f0852dc4f68b632d11a0d7","tarball":"https://registry.npmjs.org/@codegenerator/node-gen/-/node-gen-1.0.3.tgz","fileCount":39,"integrity":"sha512-pfS3q3q2hR19Od+BZIh8lKlaCY+u04cnPwmN8iiR4U5CudwU/bl/ZN62hWlg5uPepJpVvLyoB+YLwZQr5/oVHQ==","signatures":[{"sig":"MEQCIBB+/o9YzsEC9/AbfUDMBwQQbFpYeuS9pP4IS+bhQQesAiA8nOJZQE5VMTOHQ7fkGWSkiU+c4tUQ1PBFZk2rjD0NoA==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":98005},"main":"main.js","gitHead":"0917a2b540c0fa65f58cb59f3c2a5d9115360efa","scripts":{"start":"bash db.reader.postgres.sh","publish:major":"git add . && git commit -m \"publishing a major\" && npm version major && npm publish","publish:minor":"git add . && git commit -m \"publishing a minor\" && npm version minor && npm publish","publish:patch":"git add . && git commit -m \"publishing a patch\" && npm version patch && npm publish","first:publishing":"npm org set codegenerator username owner && npm publish --access public"},"_npmUser":{"name":"ricardomalnati","email":"accounts@mbra.com.br"},"_npmVersion":"10.2.4","description":"NodeJS code generator from database.","directories":{},"_nodeVersion":"21.5.0","dependencies":{"pg":"^8.12.0","yargs":"^17.7.2","dotenv":"^16.4.5","ts-node":"^10.9.2","typeorm":"^0.3.20","@types/pg":"^8.11.6","typescript":"^5.5.4","@types/yargs":"^17.0.32","reflect-metadata":"^0.2.2"},"_hasShrinkwrap":false,"devDependencies":{"@types/node":"^22.0.2"},"_npmOperationalInternal":{"tmp":"tmp/node-gen_1.0.3_1723042012912_0.08656529222742382","host":"s3://npm-registry-packages"}},"1.0.4":{"name":"@codegenerator/node-gen","version":"1.0.4","keywords":["code-generator","NestJS","TypeScript","PostgreSQL","typeorm","database","schema","entities","services","controllers","modules","DTO","automation","project-setup","backend","nodejs","typescript-generator","nest-generator"],"author":"","license":"ISC","_id":"@codegenerator/node-gen@1.0.4","maintainers":[{"name":"ricardomalnati","email":"ricardomalnati@gmail.com"}],"homepage":"https://github.com/Malnati/node-gen#readme","bugs":{"url":"https://github.com/Malnati/node-gen/issues"},"dist":{"shasum":"96501a9280387dd1fe397d6f2fd8370656ca8037","tarball":"https://registry.npmjs.org/@codegenerator/node-gen/-/node-gen-1.0.4.tgz","fileCount":39,"integrity":"sha512-G+w9FyJlytvVyo9NS8CAuNlfI7Fhu8wTFArUcR5lCbeT7fQ1RI8xa5NNYxVyJlyLuNOOeCHyfQc8ecRJ8fS3bg==","signatures":[{"sig":"MEUCIQCGmK7E5AbitOkJUoDKf8HrsFbG7gTIpeNobHbz5hwmjgIgdUyWWc3cjIgOQaMrygqe5OptabaST6wGHnZXpIzK/ok=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":98104},"main":"main.js","gitHead":"c6bfb4c91f46e52ea7f07b1c71e9c475f2b7fe1a","scripts":{"start":"bash db.reader.postgres.sh","publish:major":"git add . && git commit -m \"publishing a major\" && npm version major && npm publish","publish:minor":"git add . && git commit -m \"publishing a minor\" && npm version minor && npm publish","publish:patch":"git add . && git commit -m \"publishing a patch\" && npm version patch && npm publish","first:publishing":"npm org set codegenerator username owner && npm publish --access public"},"_npmUser":{"name":"ricardomalnati","email":"ricardomalnati@gmail.com"},"repository":{"url":"git+https://github.com/Malnati/node-gen.git","type":"git"},"_npmVersion":"10.2.4","description":"NodeJS code generator from database.","directories":{},"_nodeVersion":"21.5.0","dependencies":{"pg":"^8.12.0","yargs":"^17.7.2","dotenv":"^16.4.5","ts-node":"^10.9.2","typeorm":"^0.3.20","@types/pg":"^8.11.6","typescript":"^5.5.4","@types/yargs":"^17.0.32","reflect-metadata":"^0.2.2"},"_hasShrinkwrap":false,"devDependencies":{"@types/node":"^22.0.2"},"_npmOperationalInternal":{"tmp":"tmp/node-gen_1.0.4_1723044265549_0.8854255761855003","host":"s3://npm-registry-packages"}},"2.0.0":{"name":"@codegenerator/node-gen","version":"2.0.0","keywords":["code-generator","NestJS","TypeScript","PostgreSQL","typeorm","database","schema","entities","services","controllers","modules","DTO","automation","project-setup","backend","nodejs","typescript-generator","nest-generator"],"author":{"name":"Ricardo Malnati"},"license":"MIT","_id":"@codegenerator/node-gen@2.0.0","maintainers":[{"name":"ricardomalnati","email":"ricardomalnati@gmail.com"}],"homepage":"https://github.com/Malnati/node-gen#readme","bugs":{"url":"https://github.com/Malnati/node-gen/issues"},"bin":{"dto-generator":"dto-generator.ts","env-generator":"env-generator.ts","main-generator":"main-generator.ts","module-generator":"module-generator.ts","readme-generator":"readme-generator.ts","service-generator":"service-generator.ts","db-reader-postgres":"db.reader.postgres.ts","interface-generator":"interface-generator.ts","app-module-generator":"app-module-generator.ts","controller-generator":"controller-generator.ts","package-json-generator":"package-json-generator.ts","typeorm-entity-generator":"typeorm-entity-generator.ts"},"dist":{"shasum":"236ced1426e7175f655122e0cab7813d3b79a0b6","tarball":"https://registry.npmjs.org/@codegenerator/node-gen/-/node-gen-2.0.0.tgz","fileCount":39,"integrity":"sha512-PvQ63/5ntzwN0FGG7o8PBRQ6HxeZctRnu7K/0VuvMg/pBnqLhwewam9LQkHdu4a/GEmKQ4HqIJFNGssvhepS3Q==","signatures":[{"sig":"MEYCIQCFuqdrSsRoAlxs5FtBSXJvlBM8rzN2PGZwuD2W7yYFJwIhAMdJsAluw+kh/3muocFxDWTeErl8P725yrwhvGaPmGwR","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":99245},"main":"main.js","gitHead":"87a91789aefc8a079ac49b7a047641b1b5551f83","scripts":{"start":"bash db.reader.postgres.sh","publish:major":"git add . && git commit -m \"publishing a major\" && npm version major && npm publish","publish:minor":"git add . && git commit -m \"publishing a minor\" && npm version minor && npm publish","publish:patch":"git add . && git commit -m \"publishing a patch\" && npm version patch && npm publish","first:publishing":"npm org set codegenerator username owner && npm publish --access public"},"_npmUser":{"name":"ricardomalnati","email":"ricardomalnati@gmail.com"},"repository":{"url":"git+https://github.com/Malnati/node-gen.git","type":"git"},"_npmVersion":"10.2.4","description":"NodeJS code generator from database.","directories":{},"_nodeVersion":"21.5.0","dependencies":{"pg":"^8.12.0","yargs":"^17.7.2","dotenv":"^16.4.5","ts-node":"^10.9.2","typeorm":"^0.3.20","@types/pg":"^8.11.6","typescript":"^5.5.4","@types/yargs":"^17.0.32","reflect-metadata":"^0.2.2"},"_hasShrinkwrap":false,"devDependencies":{"@types/node":"^22.0.2"},"_npmOperationalInternal":{"tmp":"tmp/node-gen_2.0.0_1723222920223_0.28215846014644774","host":"s3://npm-registry-packages"}},"2.0.1":{"name":"@codegenerator/node-gen","version":"2.0.1","keywords":["code-generator","NestJS","TypeScript","PostgreSQL","typeorm","database","schema","entities","services","controllers","modules","DTO","automation","project-setup","backend","nodejs","typescript-generator","nest-generator"],"author":{"name":"Ricardo Malnati"},"license":"MIT","_id":"@codegenerator/node-gen@2.0.1","maintainers":[{"name":"ricardomalnati","email":"ricardomalnati@gmail.com"}],"homepage":"https://github.com/Malnati/node-gen#readme","bugs":{"url":"https://github.com/Malnati/node-gen/issues"},"bin":{"dto-generator":"dist/dto-generator.js","env-generator":"dist/env-generator.js","main-generator":"dist/main-generator.js","module-generator":"dist/module-generator.js","readme-generator":"dist/readme-generator.js","service-generator":"dist/service-generator.js","db-reader-postgres":"dist/db.reader.postgres.js","interface-generator":"dist/interface-generator.js","app-module-generator":"dist/app-module-generator.js","controller-generator":"dist/controller-generator.js","package-json-generator":"dist/package-json-generator.js","typeorm-entity-generator":"dist/typeorm-entity-generator.js"},"dist":{"shasum":"4e3988fe0f34032ea1d2eb1b2b9e885bd26728e6","tarball":"https://registry.npmjs.org/@codegenerator/node-gen/-/node-gen-2.0.1.tgz","fileCount":52,"integrity":"sha512-TMK3Z/JyxnC+st02Yhf2wfVbguG3WZ2aJGQnVNHaYi0Br/fu5ELdyE1vuStrs5Pn3NrgiY/V2h2OcSh9jqubjw==","signatures":[{"sig":"MEUCIBXd06OY1tgbm922tZNtMlBSicIIjRjkjyD5rtx3lnfWAiEA2GxktY4iwv7XBfPaycJw4cZwDmdF8tq+VKmPkC+PuVw=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":167001},"main":"dist/main.js","gitHead":"5600185d210bcbca36f96030c2226ab3b2b6bd9f","scripts":{"build":"tsc","start":"npm run build && node dist/main.js","install":"npm install -g @codegenerator/node-gen","uninstall":"npm uninstall -g @codegenerator/node-gen && npm list -g --depth=0","publish:major":"npm run build && git add . && git commit -m \"publishing a major\" && npm version major && npm publish","publish:minor":"npm run build && git add . && git commit -m \"publishing a minor\" && npm version minor && npm publish","publish:patch":"npm run build && git add . && git commit -m \"publishing a patch\" && npm version patch && npm publish","first:publishing":"npm run build && npm org set codegenerator username owner && npm publish --access public"},"_npmUser":{"name":"ricardomalnati","email":"ricardomalnati@gmail.com"},"repository":{"url":"git+https://github.com/Malnati/node-gen.git","type":"git"},"_npmVersion":"10.2.4","description":"NodeJS code generator from database.","directories":{},"_nodeVersion":"21.5.0","dependencies":{"pg":"^8.12.0","yargs":"^17.7.2","dotenv":"^16.4.5","ts-node":"^10.9.2","typeorm":"^0.3.20","@types/pg":"^8.11.6","typescript":"^5.5.4","@types/yargs":"^17.0.32","reflect-metadata":"^0.2.2"},"_hasShrinkwrap":false,"devDependencies":{"@types/node":"^22.0.2"},"_npmOperationalInternal":{"tmp":"tmp/node-gen_2.0.1_1723224371898_0.22955305917828084","host":"s3://npm-registry-packages"}},"2.0.2":{"name":"@codegenerator/node-gen","version":"2.0.2","keywords":["code-generator","NestJS","TypeScript","PostgreSQL","typeorm","database","schema","entities","services","controllers","modules","DTO","automation","project-setup","backend","nodejs","typescript-generator","nest-generator"],"author":{"name":"Ricardo Malnati"},"license":"MIT","_id":"@codegenerator/node-gen@2.0.2","maintainers":[{"name":"ricardomalnati","email":"ricardomalnati@gmail.com"}],"homepage":"https://github.com/Malnati/node-gen#readme","bugs":{"url":"https://github.com/Malnati/node-gen/issues"},"bin":{"dto-generator":"dist/dto-generator.js","env-generator":"dist/env-generator.js","main-generator":"dist/main-generator.js","module-generator":"dist/module-generator.js","readme-generator":"dist/readme-generator.js","service-generator":"dist/service-generator.js","db-reader-postgres":"dist/db.reader.postgres.js","interface-generator":"dist/interface-generator.js","app-module-generator":"dist/app-module-generator.js","controller-generator":"dist/controller-generator.js","package-json-generator":"dist/package-json-generator.js","typeorm-entity-generator":"dist/typeorm-entity-generator.js"},"dist":{"shasum":"cdb833fdc2c557f5ea1235c8ef6d927a365dc6b3","tarball":"https://registry.npmjs.org/@codegenerator/node-gen/-/node-gen-2.0.2.tgz","fileCount":52,"integrity":"sha512-R5MRY3KgtWnDJBr/EUtoZxiKcoqB/srAcVnX9l/4X69CvX5S1vUeUk6bn0qgqNVZ0FRyYK8DgiU9CpJ8xRRAVw==","signatures":[{"sig":"MEQCIAkHMIeqbB2pG4XmtPTQxS2hzYer6SyGG7WjMEMY28//AiAwo74KFi7oTyQ0heIsHGmrTxrjIWAq3nkaX7XiIjO9zw==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":167028},"main":"dist/main.js","gitHead":"21cf9e8d1e349c6f117b06be7044014883286e7c","scripts":{"build":"tsc","start":"npm run build && node dist/main.js","install":"npm install -g @codegenerator/node-gen","uninstall":"npm uninstall -g @codegenerator/node-gen && npm cache clean --force && npm list -g --depth=0","publish:major":"npm run build && git add . && git commit -m \"publishing a major\" && npm version major && npm publish","publish:minor":"npm run build && git add . && git commit -m \"publishing a minor\" && npm version minor && npm publish","publish:patch":"npm run build && git add . && git commit -m \"publishing a patch\" && npm version patch && npm publish","first:publishing":"npm run build && npm org set codegenerator username owner && npm publish --access public"},"_npmUser":{"name":"ricardomalnati","email":"ricardomalnati@gmail.com"},"repository":{"url":"git+https://github.com/Malnati/node-gen.git","type":"git"},"_npmVersion":"10.2.4","description":"NodeJS code generator from database.","directories":{},"_nodeVersion":"21.5.0","dependencies":{"pg":"^8.12.0","yargs":"^17.7.2","dotenv":"^16.4.5","ts-node":"^10.9.2","typeorm":"^0.3.20","@types/pg":"^8.11.6","typescript":"^5.5.4","@types/yargs":"^17.0.32","reflect-metadata":"^0.2.2"},"_hasShrinkwrap":false,"devDependencies":{"@types/node":"^22.0.2"},"_npmOperationalInternal":{"tmp":"tmp/node-gen_2.0.2_1723224630386_0.14081331245118145","host":"s3://npm-registry-packages"}},"2.0.3":{"name":"@codegenerator/node-gen","version":"2.0.3","keywords":["code-generator","NestJS","TypeScript","PostgreSQL","typeorm","database","schema","entities","services","controllers","modules","DTO","automation","project-setup","backend","nodejs","typescript-generator","nest-generator"],"author":{"name":"Ricardo Malnati"},"license":"MIT","_id":"@codegenerator/node-gen@2.0.3","maintainers":[{"name":"ricardomalnati","email":"ricardomalnati@gmail.com"}],"homepage":"https://github.com/Malnati/node-gen#readme","bugs":{"url":"https://github.com/Malnati/node-gen/issues"},"bin":{"dto-generator":"dist/dto-generator.js","env-generator":"dist/env-generator.js","main-generator":"dist/main-generator.js","module-generator":"dist/module-generator.js","readme-generator":"dist/readme-generator.js","service-generator":"dist/service-generator.js","db-reader-postgres":"dist/db.reader.postgres.js","interface-generator":"dist/interface-generator.js","app-module-generator":"dist/app-module-generator.js","controller-generator":"dist/controller-generator.js","package-json-generator":"dist/package-json-generator.js","typeorm-entity-generator":"dist/typeorm-entity-generator.js"},"dist":{"shasum":"7d217f1a42c5a2bb273e6580822ace5b78192416","tarball":"https://registry.npmjs.org/@codegenerator/node-gen/-/node-gen-2.0.3.tgz","fileCount":52,"integrity":"sha512-GKuVfcu73bZ9ZgnWqg05HKKMnOgFugrXUihvcWsYKqIVX9z0JZeJY74INqBE8vO25Y8Nd8GpI2FdYdFMWl7sSw==","signatures":[{"sig":"MEQCIBY1soZUtml70Y7JfOgmn6dhOZvN16mAHSoLATVisEQoAiBHpUK13UiMACqytf7yzANHCbJvHB61SJoAHu7VBgeaiA==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":167035},"main":"dist/main.js","gitHead":"bc1c47bbbf9175b3eff22e2ed001522efa0225ff","scripts":{"build":"tsc","start":"npm run build && node dist/main.js","install":"npm install -g @codegenerator/node-gen@latest","uninstall":"npm uninstall -g @codegenerator/node-gen && npm cache clean --force && npm list -g --depth=0","publish:major":"npm run build && git add . && git commit -m \"publishing a major\" && npm version major && npm publish","publish:minor":"npm run build && git add . && git commit -m \"publishing a minor\" && npm version minor && npm publish","publish:patch":"npm run build && git add . && git commit -m \"publishing a patch\" && npm version patch && npm publish","first:publishing":"npm run build && npm org set codegenerator username owner && npm publish --access public"},"_npmUser":{"name":"ricardomalnati","email":"ricardomalnati@gmail.com"},"repository":{"url":"git+https://github.com/Malnati/node-gen.git","type":"git"},"_npmVersion":"10.2.4","description":"NodeJS code generator from database.","directories":{},"_nodeVersion":"21.5.0","dependencies":{"pg":"^8.12.0","yargs":"^17.7.2","dotenv":"^16.4.5","ts-node":"^10.9.2","typeorm":"^0.3.20","@types/pg":"^8.11.6","typescript":"^5.5.4","@types/yargs":"^17.0.32","reflect-metadata":"^0.2.2"},"_hasShrinkwrap":false,"devDependencies":{"@types/node":"^22.0.2"},"_npmOperationalInternal":{"tmp":"tmp/node-gen_2.0.3_1723224744507_0.007919902720092908","host":"s3://npm-registry-packages"}},"3.0.0":{"name":"@codegenerator/node-gen","version":"3.0.0","keywords":["code-generator","NestJS","TypeScript","PostgreSQL","typeorm","database","schema","entities","services","controllers","modules","DTO","automation","project-setup","backend","nodejs","typescript-generator","nest-generator"],"author":{"name":"Ricardo Malnati"},"license":"MIT","_id":"@codegenerator/node-gen@3.0.0","maintainers":[{"name":"ricardomalnati","email":"ricardomalnati@gmail.com"}],"homepage":"https://github.com/Malnati/node-gen#readme","bugs":{"url":"https://github.com/Malnati/node-gen/issues"},"bin":{"dto-generator":"dist/dto-generator.js","env-generator":"dist/env-generator.js","main-generator":"dist/main-generator.js","module-generator":"dist/module-generator.js","readme-generator":"dist/readme-generator.js","service-generator":"dist/service-generator.js","db-reader-postgres":"dist/db.reader.postgres.js","interface-generator":"dist/interface-generator.js","app-module-generator":"dist/app-module-generator.js","controller-generator":"dist/controller-generator.js","package-json-generator":"dist/package-json-generator.js","typeorm-entity-generator":"dist/typeorm-entity-generator.js"},"dist":{"shasum":"5e87248f9041c8b21d3fbbfc063ee5275a2f2976","tarball":"https://registry.npmjs.org/@codegenerator/node-gen/-/node-gen-3.0.0.tgz","fileCount":37,"integrity":"sha512-ajWIiwwNi1fpf997UiUa6E1JU410Reef+HjtZoJOdzRUL+aUIQuh8G3vbE4wYq1/ynm5dgSvzwP0cUlniE2olQ==","signatures":[{"sig":"MEUCIQCyPaD2mEDMP3wC2xtE7172NA3RpjQenlp4nS/fLNRFFQIgHQ76pfFoISh5yulRoyLRSQArfhedXRInQMybRGRUg44=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":136351},"main":"dist/main.js","gitHead":"0653898e389723039b9b04ed1cca70c36b418ab9","scripts":{"build":"tsc","start":"npm run build && node dist/main.js","install":"npm install -g @codegenerator/node-gen@latest","uninstall":"npm uninstall -g @codegenerator/node-gen && npm list -g --depth=0","publish:major":"npm run build && git add . && git commit -m \"publishing a major\" && npm version major && npm publish","publish:minor":"npm run build && git add . && git commit -m \"publishing a minor\" && npm version minor && npm publish","publish:patch":"npm run build && git add . && git commit -m \"publishing a patch\" && npm version patch && npm publish","first:publishing":"npm run build && npm org set codegenerator username owner && npm publish --access public"},"_npmUser":{"name":"ricardomalnati","email":"ricardomalnati@gmail.com"},"repository":{"url":"git+https://github.com/Malnati/node-gen.git","type":"git"},"_npmVersion":"10.8.2","description":"NodeJS code generator from database.","directories":{},"_nodeVersion":"22.6.0","dependencies":{"pg":"^8.12.0","yargs":"^17.7.2","dotenv":"^16.4.5","ts-node":"^10.9.2","typeorm":"^0.3.20","@types/pg":"^8.11.6","typescript":"^5.5.4","@types/yargs":"^17.0.32","reflect-metadata":"^0.2.2"},"_hasShrinkwrap":false,"devDependencies":{"@types/node":"^22.0.2"},"_npmOperationalInternal":{"tmp":"tmp/node-gen_3.0.0_1723225975964_0.2017201636398669","host":"s3://npm-registry-packages"}},"3.0.1":{"name":"@codegenerator/node-gen","version":"3.0.1","keywords":["code-generator","NestJS","TypeScript","PostgreSQL","typeorm","database","schema","entities","services","controllers","modules","DTO","automation","project-setup","backend","nodejs","typescript-generator","nest-generator"],"author":{"name":"Ricardo Malnati"},"license":"MIT","_id":"@codegenerator/node-gen@3.0.1","maintainers":[{"name":"ricardomalnati","email":"ricardomalnati@gmail.com"}],"homepage":"https://github.com/Malnati/node-gen#readme","bugs":{"url":"https://github.com/Malnati/node-gen/issues"},"bin":{"dto-generator":"dist/dto-generator.js","env-generator":"dist/env-generator.js","main-generator":"dist/main-generator.js","module-generator":"dist/module-generator.js","readme-generator":"dist/readme-generator.js","service-generator":"dist/service-generator.js","db-reader-postgres":"dist/db.reader.postgres.js","interface-generator":"dist/interface-generator.js","app-module-generator":"dist/app-module-generator.js","controller-generator":"dist/controller-generator.js","package-json-generator":"dist/package-json-generator.js","typeorm-entity-generator":"dist/typeorm-entity-generator.js"},"dist":{"shasum":"a8f56fb3702634db2ef0cd550229cb45a25cbd05","tarball":"https://registry.npmjs.org/@codegenerator/node-gen/-/node-gen-3.0.1.tgz","fileCount":25,"integrity":"sha512-Yz4mEIYZYKZQOLiJs3sTEFOWL+iHpTCwyX/l/5I1GjJ052GcqYThBTFkkIlQytBIETt2XBlhz9vKP/zulCRB6Q==","signatures":[{"sig":"MEUCIGdxDBJkTyg1r4WISBUX0uKyyGOvVKiXbKb820ltvGhHAiEApxksVhXmx0dD1ZCofmnV4chszj7J4RH8HyqbXiQqFpw=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":97569},"main":"dist/main.js","gitHead":"63d327c3aa4b6ad4ce10f361ec08479b356f6d05","scripts":{"build":"tsc","start":"npm run build && node dist/main.js","install":"npm install -g @codegenerator/node-gen@latest","uninstall":"npm uninstall -g @codegenerator/node-gen && npm list -g --depth=0","publish:major":"npm run build && git add . && git commit -m \"publishing a major\" && npm version major && npm publish","publish:minor":"npm run build && git add . && git commit -m \"publishing a minor\" && npm version minor && npm publish","publish:patch":"npm run build && git add . && git commit -m \"publishing a patch\" && npm version patch && npm publish","first:publishing":"npm run build && npm org set codegenerator username owner && npm publish --access public"},"_npmUser":{"name":"ricardomalnati","email":"ricardomalnati@gmail.com"},"repository":{"url":"git+https://github.com/Malnati/node-gen.git","type":"git"},"_npmVersion":"10.8.2","description":"NodeJS code generator from database.","directories":{},"_nodeVersion":"22.6.0","dependencies":{"pg":"^8.12.0","yargs":"^17.7.2","dotenv":"^16.4.5","ts-node":"^10.9.2","typeorm":"^0.3.20","@types/pg":"^8.11.6","typescript":"^5.5.4","@types/yargs":"^17.0.32","reflect-metadata":"^0.2.2"},"_hasShrinkwrap":false,"devDependencies":{"@types/node":"^22.0.2"},"_npmOperationalInternal":{"tmp":"tmp/node-gen_3.0.1_1723226024413_0.33441780621383566","host":"s3://npm-registry-packages"}},"3.0.2":{"name":"@codegenerator/node-gen","version":"3.0.2","keywords":["code-generator","NestJS","TypeScript","PostgreSQL","typeorm","database","schema","entities","services","controllers","modules","DTO","automation","project-setup","backend","nodejs","typescript-generator","nest-generator"],"author":{"name":"Ricardo Malnati"},"license":"MIT","_id":"@codegenerator/node-gen@3.0.2","maintainers":[{"name":"ricardomalnati","email":"ricardomalnati@gmail.com"}],"homepage":"https://github.com/Malnati/node-gen#readme","bugs":{"url":"https://github.com/Malnati/node-gen/issues"},"bin":{"dto-generator":"dist/dto-generator.js","env-generator":"dist/env-generator.js","main-generator":"dist/main-generator.js","module-generator":"dist/module-generator.js","readme-generator":"dist/readme-generator.js","service-generator":"dist/service-generator.js","db-reader-postgres":"dist/db.reader.postgres.js","interface-generator":"dist/interface-generator.js","app-module-generator":"dist/app-module-generator.js","controller-generator":"dist/controller-generator.js","package-json-generator":"dist/package-json-generator.js","typeorm-entity-generator":"dist/typeorm-entity-generator.js"},"dist":{"shasum":"a22eb5fe023345fd189a41b58d34dcb85aa0cea3","tarball":"https://registry.npmjs.org/@codegenerator/node-gen/-/node-gen-3.0.2.tgz","fileCount":25,"integrity":"sha512-Y8eDj1BQzflHrzrOClw8Yjb+bwuk4Qn5upHw/DSyctI0MJ4nI5eQP+pU2F8L2ol/WksSbe/GPjxNyj6TZh4sZw==","signatures":[{"sig":"MEUCIF5OAFnCulFdS5E6gekZM3evmieNnTQoU1WEo51vkCrxAiEA8jtDfZnPckRBEvtfoQopTwfwSs67G8uGYIfzIII/pQ0=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":97577},"main":"dist/main.js","gitHead":"c4ade198f065a3a398e06c69c5a4b2a9b22c2b81","scripts":{"build":"tsc","start":"npm run build && node dist/main.js","gen:install":"npm install -g @codegenerator/node-gen@latest","gen:uninstall":"npm uninstall -g @codegenerator/node-gen && npm list -g --depth=0","publish:major":"npm run build && git add . && git commit -m \"publishing a major\" && npm version major && npm publish","publish:minor":"npm run build && git add . && git commit -m \"publishing a minor\" && npm version minor && npm publish","publish:patch":"npm run build && git add . && git commit -m \"publishing a patch\" && npm version patch && npm publish","first:publishing":"npm run build && npm org set codegenerator username owner && npm publish --access public"},"_npmUser":{"name":"ricardomalnati","email":"ricardomalnati@gmail.com"},"repository":{"url":"git+https://github.com/Malnati/node-gen.git","type":"git"},"_npmVersion":"10.8.2","description":"NodeJS code generator from database.","directories":{},"_nodeVersion":"22.6.0","dependencies":{"pg":"^8.12.0","yargs":"^17.7.2","dotenv":"^16.4.5","ts-node":"^10.9.2","typeorm":"^0.3.20","@types/pg":"^8.11.6","typescript":"^5.5.4","@types/yargs":"^17.0.32","reflect-metadata":"^0.2.2"},"_hasShrinkwrap":false,"devDependencies":{"@types/node":"^22.0.2"},"_npmOperationalInternal":{"tmp":"tmp/node-gen_3.0.2_1723237129411_0.621691903132535","host":"s3://npm-registry-packages"}},"3.0.3":{"name":"@codegenerator/node-gen","version":"3.0.3","keywords":["code-generator","NestJS","TypeScript","PostgreSQL","typeorm","database","schema","entities","services","controllers","modules","DTO","automation","project-setup","backend","nodejs","typescript-generator","nest-generator"],"author":{"name":"Ricardo Malnati"},"license":"MIT","_id":"@codegenerator/node-gen@3.0.3","maintainers":[{"name":"ricardomalnati","email":"ricardomalnati@gmail.com"}],"homepage":"https://github.com/Malnati/node-gen#readme","bugs":{"url":"https://github.com/Malnati/node-gen/issues"},"bin":{"dto-generator":"dist/dto-generator.js","env-generator":"dist/env-generator.js","main-generator":"dist/main-generator.js","module-generator":"dist/module-generator.js","readme-generator":"dist/readme-generator.js","service-generator":"dist/service-generator.js","db-reader-postgres":"dist/db.reader.postgres.js","interface-generator":"dist/interface-generator.js","app-module-generator":"dist/app-module-generator.js","controller-generator":"dist/controller-generator.js","package-json-generator":"dist/package-json-generator.js","typeorm-entity-generator":"dist/typeorm-entity-generator.js"},"dist":{"shasum":"89f202f48b891ac065f61f46aa0c354d00b449be","tarball":"https://registry.npmjs.org/@codegenerator/node-gen/-/node-gen-3.0.3.tgz","fileCount":25,"integrity":"sha512-1QGLd/rwLJV07nEgZO2trolEHlQ62Zo/eT1jDJF2dnvIFeGdkjKR5slRl1Q4FFEEnIkQQ7wwl9Exhu8IvwxXNQ==","signatures":[{"sig":"MEYCIQCbb3AOgy4ZXXc+rnFESHM3O1DLdd5MoSjUVV4sD0pF+QIhAIgNTcCfTyyZ8447K5xoQQo9TORxq+Y+NKc+4nF0cQ9h","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":97478},"main":"dist/main.js","gitHead":"a67d181798653f8461f2aeb61d4c235979cf63c6","scripts":{"build":"tsc","start":"npm run build && node dist/main.js","gen:install":"npm install -g @codegenerator/node-gen@latest","gen:uninstall":"npm uninstall -g @codegenerator/node-gen && npm list -g --depth=0","publish:major":"npm run build && git add . && git commit -m \"publishing a major\" && npm version major && npm publish","publish:minor":"npm run build && git add . && git commit -m \"publishing a minor\" && npm version minor && npm publish","publish:patch":"npm run build && git add . && git commit -m \"publishing a patch\" && npm version patch && npm publish","first:publishing":"npm run build && npm org set codegenerator username owner && npm publish --access public"},"_npmUser":{"name":"ricardomalnati","email":"ricardomalnati@gmail.com"},"repository":{"url":"git+https://github.com/Malnati/node-gen.git","type":"git"},"_npmVersion":"10.8.2","description":"NodeJS code generator from database.","directories":{},"_nodeVersion":"22.6.0","dependencies":{"pg":"^8.12.0","yargs":"^17.7.2","dotenv":"^16.4.5","ts-node":"^10.9.2","typeorm":"^0.3.20","@types/pg":"^8.11.6","typescript":"^5.5.4","@types/yargs":"^17.0.32","reflect-metadata":"^0.2.2"},"_hasShrinkwrap":false,"devDependencies":{"@types/node":"^22.0.2"},"_npmOperationalInternal":{"tmp":"tmp/node-gen_3.0.3_1724160883717_0.6223027185026666","host":"s3://npm-registry-packages"}},"3.0.4":{"name":"@codegenerator/node-gen","version":"3.0.4","description":"NodeJS code generator from database.","repository":{"type":"git","url":"git+https://github.com/Malnati/node-gen.git"},"main":"dist/main.js","bin":{"db-reader-postgres":"dist/db.reader.postgres.js","typeorm-entity-generator":"dist/typeorm-entity-generator.js","service-generator":"dist/service-generator.js","interface-generator":"dist/interface-generator.js","controller-generator":"dist/controller-generator.js","dto-generator":"dist/dto-generator.js","module-generator":"dist/module-generator.js","app-module-generator":"dist/app-module-generator.js","main-generator":"dist/main-generator.js","env-generator":"dist/env-generator.js","package-json-generator":"dist/package-json-generator.js","readme-generator":"dist/readme-generator.js"},"scripts":{"build":"tsc","gen:uninstall":"npm uninstall -g @codegenerator/node-gen && npm list -g --depth=0","gen:install":"npm install -g @codegenerator/node-gen@latest","start":"npm run build && node dist/main.js","first:publishing":"npm run build && npm org set codegenerator username owner && npm publish --access public","publish:patch":"npm run build && git add . && git commit -m \"publishing a patch\" && npm version patch && npm publish","publish:minor":"npm run build && git add . && git commit -m \"publishing a minor\" && npm version minor && npm publish","publish:major":"npm run build && git add . && git commit -m \"publishing a major\" && npm version major && npm publish"},"keywords":["code-generator","NestJS","TypeScript","PostgreSQL","typeorm","database","schema","entities","services","controllers","modules","DTO","automation","project-setup","backend","nodejs","typescript-generator","nest-generator"],"author":{"name":"Ricardo Malnati"},"license":"MIT","dependencies":{"@types/pg":"^8.11.6","@types/yargs":"^17.0.32","dotenv":"^16.4.5","pg":"^8.12.0","reflect-metadata":"^0.2.2","ts-node":"^10.9.2","typeorm":"^0.3.20","typescript":"^5.5.4","yargs":"^17.7.2"},"devDependencies":{"@types/node":"^22.0.2"},"_id":"@codegenerator/node-gen@3.0.4","gitHead":"19e747f2df67923ba768b663f7b385e61a0aee78","bugs":{"url":"https://github.com/Malnati/node-gen/issues"},"homepage":"https://github.com/Malnati/node-gen#readme","_nodeVersion":"22.6.0","_npmVersion":"10.8.2","dist":{"integrity":"sha512-Os1wvUOVpeJVEHjITIn3fahT3h8/QCDqRzx49bMNdsXPPvwdIT00iULlzZ+KQ4khSUMXJX0xT/m5GPV1h+cC0A==","shasum":"7b6e9541cae82c4e6ea6330c41f9fe33b26861f2","tarball":"https://registry.npmjs.org/@codegenerator/node-gen/-/node-gen-3.0.4.tgz","fileCount":25,"unpackedSize":97474,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQC1UWiYJAGWFK1vKNxkAux23Lp0HY0P+SWRkPFvvvvalgIgcO96cVlb7qmg13xKCPmtfOUp13URk+T2oJHqab7ABFo="}]},"_npmUser":{"name":"ricardomalnati","email":"ricardomalnati@gmail.com"},"directories":{},"maintainers":[{"name":"ricardomalnati","email":"ricardomalnati@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/node-gen_3.0.4_1724160989330_0.0771156356996987"},"_hasShrinkwrap":false}},"time":{"created":"2024-08-07T14:30:44.592Z","modified":"2024-08-20T13:36:29.674Z","1.0.0":"2024-08-07T14:30:44.897Z","1.0.2":"2024-08-07T14:45:11.706Z","1.0.3":"2024-08-07T14:46:53.138Z","1.0.4":"2024-08-07T15:24:25.689Z","2.0.0":"2024-08-09T17:02:00.395Z","2.0.1":"2024-08-09T17:26:12.072Z","2.0.2":"2024-08-09T17:30:30.595Z","2.0.3":"2024-08-09T17:32:24.677Z","3.0.0":"2024-08-09T17:52:56.158Z","3.0.1":"2024-08-09T17:53:44.619Z","3.0.2":"2024-08-09T20:58:49.649Z","3.0.3":"2024-08-20T13:34:43.931Z","3.0.4":"2024-08-20T13:36:29.479Z"},"bugs":{"url":"https://github.com/Malnati/node-gen/issues"},"author":{"name":"Ricardo Malnati"},"license":"MIT","homepage":"https://github.com/Malnati/node-gen#readme","keywords":["code-generator","NestJS","TypeScript","PostgreSQL","typeorm","database","schema","entities","services","controllers","modules","DTO","automation","project-setup","backend","nodejs","typescript-generator","nest-generator"],"repository":{"type":"git","url":"git+https://github.com/Malnati/node-gen.git"},"description":"NodeJS code generator from database.","maintainers":[{"name":"ricardomalnati","email":"ricardomalnati@gmail.com"}],"readme":"# Node.js Project Generator\n\nEste repositório contém um conjunto de geradores TypeScript para criar a estrutura de um projeto NestJS completo, incluindo módulos, controladores, serviços, entidades TypeORM, DTOs e arquivos de configuração.\n\n## Instalação\n\nO *node-gen* é um pacote Node.js que pode ser instalado globalmente via npm. O registro estaá disponível em [@codegenerator/node-gen](https://www.npmjs.com/package/@codegenerator/node-gen), então você pode instalar o pacote diretamente a partir do NPM.\n\n\nPara instalar todas as dependências necessárias, execute o comando:\n\n```bash\nnpm install -g @codegenerator/node-gen\n```\n\n## Uso\n\nEste repositório contém vários geradores para criar diferentes partes de um projeto NestJS. Aqui está uma breve descrição de cada gerador:\n\n- **db.reader.postgres.ts**: Lê a estrutura do banco de dados PostgreSQL e gera um arquivo JSON com a definição do esquema.\n- **typeorm-entity-generator.ts**: Gera entidades TypeORM com base na definição do esquema.\n- **service-generator.ts**: Gera serviços NestJS com base nas entidades geradas.\n- **interface-generator.ts**: Gera interfaces para as entidades e serviços.\n- **controller-generator.ts**: Gera controladores NestJS com base nos serviços gerados.\n- **dto-generator.ts**: Gera DTOs (Data Transfer Objects) com base nas entidades geradas.\n- **module-generator.ts**: Gera módulos NestJS com base nos controladores e serviços gerados.\n- **app-module-generator.ts**: Gera o módulo principal do aplicativo NestJS.\n- **main-generator.ts**: Gera o arquivo de entrada principal do aplicativo NestJS.\n- **env-generator.ts**: Gera arquivos de configuração de ambiente.\n- **package-json-generator.ts**: Gera o arquivo `package.json` para o projeto.\n- **readme-generator.ts**: Gera o arquivo `README.md` para o projeto gerado.\n\n## Executando o Gerador\n\nPara executar o gerador e criar toda a estrutura do projeto, use o script `db.reader.postgres.sh`:\n\n```bash\n./db.reader.postgres.sh\n```\n\nEste script executará todos os geradores na ordem correta e copiará os arquivos estáticos para o diretório `./build`.\n\n## Estrutura do Projeto Gerado\n\nApós a execução do script, a estrutura do projeto gerado será semelhante a esta:\n\n```bash\n./build\n├── LICENSE\n├── README.md\n├── app.module.ts\n├── controller\n│   ├── example.controller.ts\n├── dto\n│   ├── create-example.dto.ts\n│   ├── update-example.dto.ts\n├── entity\n│   ├── example.entity.ts\n├── interface\n│   ├── example.interface.ts\n├── main.ts\n├── module\n│   ├── example.module.ts\n├── service\n│   ├── example.service.ts\n├── static\n│   ├── add-header.js\n│   ├── bitbucket-pipelines.yml\n│   ├── config\n│   │   ├── app.readiness.service.ts\n│   │   ├── datasource.service.ts\n│   │   ├── environment.module.ts\n│   │   ├── environment.service.ts\n│   │   └── httpsource.service.ts\n│   ├── docker-compose.yaml\n│   ├── docker-start.sh\n│   ├── health\n│   │   ├── health.controller.ts\n│   │   ├── health.database.indicator.ts\n│   │   ├── health.module.ts\n│   │   └── health.service.ts\n│   ├── jest.config.ts\n│   ├── middleware\n│   │   ├── jwt-auth.guard.module.ts\n│   │   └── jwt-auth.guard.ts\n│   ├── tsconfig.build.json\n│   ├── tsconfig.json\n│   ├── validators\n│   │   └── constraint.isRecentDate.ts\n│   └── version\n│       ├── version.controller.ts\n│       └── version.module.ts\n```\n\n## Executando o Projeto Gerado\n\nPara executar o projeto gerado, use os seguintes comandos:\n\n1. Navegue até o diretório `./build`:\n   ```bash\n   cd build\n   ```\n\n2. Instale as dependências do projeto gerado:\n   ```bash\n   npm install\n   ```\n\n3. Inicie o projeto:\n   ```bash\n   npm start\n   ```\n\nIsso iniciará o servidor NestJS usando as configurações geradas.\n\n---\n\n### Licença\n\nEste projeto é licenciado sob a licença MIT - veja o arquivo [LICENSE](LICENSE) para mais detalhes.\n\nPara adicionar o gerador de README ao script `db.reader.postgres.sh`, basta incluir a chamada ao `readme-generator.ts` no final do script:\n\n```sh\nrm -rf ./build\n\nnpx ts-node db.reader.postgres.ts\nnpx ts-node typeorm-entity-generator.ts\nnpx ts-node service-generator.ts\nnpx ts-node interface-generator.ts\nnpx ts-node controller-generator.ts\nnpx ts-node dto-generator.ts\nnpx ts-node module-generator.ts\nnpx ts-node app-module-generator.ts\nnpx ts-node main-generator.ts\nnpx ts-node env-generator.ts\nnpx ts-node package-json-generator.ts\nnpx ts-node readme-generator.ts\n\ncp -r ./static/* ./build/\n```\n\n## publicação\n\nPara atualizar no NPM, execute um dos os comandos:\n\n```bash\nnpm run publish:patch\n```\nou\n```bash\nnpm run publish:minor\n```\nou\n```bash\nnpm run publish:major\n```\n\n\n## Pre-requisitos\n\nCrie seu modelo relacional no PostgreSQL e em seguida execute o script abaixo para criar as funções e triggers necessários para garantir a integridade dos dados.\n\n```SQL\nCREATE EXTENSION IF NOT EXISTS \"uuid-ossp\";\nSELECT uuid_generate_v4();\n\nCREATE FUNCTION public.prevent_created_at_update() RETURNS trigger\n    LANGUAGE plpgsql\n    AS $$\nBEGIN\n    IF OLD IS NOT NULL AND NEW.created_at <> OLD.created_at THEN\n        RAISE EXCEPTION 'Não é possível atualizar o campo created_at após a criação do registro.';\n    END IF;\n    RETURN NEW;\nEND;\n$$;\n\nCREATE FUNCTION public.prevent_deleted_at_update() RETURNS trigger\n    LANGUAGE plpgsql\n    AS $$\nBEGIN\n    IF OLD IS NOT NULL AND OLD.created_at IS NOT null THEN\n        RAISE EXCEPTION 'Não é possível atualizar o campo deleted_at.';\n    END IF;\n    RETURN NEW;\nEND;\n$$;\n\nCREATE FUNCTION public.prevent_delete() RETURNS trigger\n    LANGUAGE plpgsql\n    AS $$\nBEGIN\n    RAISE EXCEPTION 'Não é possível excluir o registro. Operação não permitida.';\n    RETURN NEW;\nEND;\n$$;\n\nCREATE FUNCTION public.prevent_update() RETURNS trigger\n    LANGUAGE plpgsql\n    AS $$\nBEGIN\n    RAISE EXCEPTION 'Não é possível atualizar o registro. Operação não permitida.';\n    RETURN NEW;\nEND;\n$$;\n\nDO $$\nDECLARE\n    tbl RECORD;\n    col_exists BOOLEAN;\n    trg_update_name TEXT;\n    trg_delete_name TEXT;\n    trg_update_deleted_at_name TEXT;\n    index_name TEXT;\nBEGIN\n    -- Lista todas as tabelas no esquema public com prefixo 'tb_'\n    FOR tbl IN \n        SELECT tablename\n        FROM pg_tables\n        WHERE schemaname = 'public' AND tablename LIKE 'tb_%'\n    LOOP\n        -- Verifica se a coluna 'created_at' já existe na tabela\n        SELECT EXISTS (\n            SELECT 1 \n            FROM information_schema.columns \n            WHERE table_schema = 'public' \n              AND table_name = tbl.tablename \n              AND column_name = 'created_at'\n        ) INTO col_exists;\n\n        -- Se a coluna não existir, adiciona a coluna 'created_at'\n        IF NOT col_exists THEN\n            EXECUTE format('ALTER TABLE %I ADD COLUMN created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP', tbl.tablename);\n        END IF;\n\n        -- Adiciona ou atualiza o comentário na coluna 'created_at'\n        EXECUTE format('COMMENT ON COLUMN %I.created_at IS ''Data de criação do registro.''', tbl.tablename);\n\n        -- Verifica se a coluna 'updated_at' já existe na tabela\n        SELECT EXISTS (\n            SELECT 1 \n            FROM information_schema.columns \n            WHERE table_schema = 'public' \n              AND table_name = tbl.tablename \n              AND column_name = 'updated_at'\n        ) INTO col_exists;\n\n        -- Se a coluna não existir, adiciona a coluna 'updated_at'\n        IF NOT col_exists THEN\n            EXECUTE format('ALTER TABLE %I ADD COLUMN updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP', tbl.tablename);\n        END IF;\n\n        -- Adiciona ou atualiza o comentário na coluna 'updated_at'\n        EXECUTE format('COMMENT ON COLUMN %I.updated_at IS ''Data de atualização do registro.''', tbl.tablename);\n\n        -- Verifica se a coluna 'deleted_at' já existe na tabela\n        SELECT EXISTS (\n            SELECT 1 \n            FROM information_schema.columns \n            WHERE table_schema = 'public' \n              AND table_name = tbl.tablename \n              AND column_name = 'deleted_at'\n        ) INTO col_exists;\n\n        -- Se a coluna não existir, adiciona a coluna 'deleted_at'\n        IF NOT col_exists THEN\n            EXECUTE format('ALTER TABLE %I ADD COLUMN deleted_at TIMESTAMP', tbl.tablename);\n        END IF;\n\n        -- Adiciona ou atualiza o comentário na coluna 'deleted_at'\n        EXECUTE format('COMMENT ON COLUMN %I.deleted_at IS ''Data da exclusão lógica do registro.''', tbl.tablename);\n\n        -- Verifica se a coluna 'external_id' já existe na tabela\n        SELECT EXISTS (\n            SELECT 1 \n            FROM information_schema.columns \n            WHERE table_schema = 'public' \n              AND table_name = tbl.tablename \n              AND column_name = 'external_id'\n        ) INTO col_exists;\n\n        -- Se a coluna não existir, adiciona a coluna 'external_id'\n        IF NOT col_exists THEN\n            EXECUTE format('ALTER TABLE %I ADD COLUMN external_id UUID DEFAULT uuid_generate_v4() NOT NULL', tbl.tablename);\n        END IF;\n\n        -- Adiciona ou atualiza o comentário na coluna 'external_id'\n        EXECUTE format('COMMENT ON COLUMN %I.external_id IS ''Identificador único externo de registros desta tabela. Este campo é obrigatório.''', tbl.tablename);\n\n        -- Nome do índice único na coluna 'external_id'\n        index_name := tbl.tablename || '_external_id_idx';\n\n        -- Cria o índice único na coluna 'external_id' se não existir\n        IF NOT EXISTS (\n            SELECT 1 \n            FROM pg_indexes \n            WHERE tablename = tbl.tablename\n              AND indexname = index_name\n        ) THEN\n            EXECUTE format('CREATE UNIQUE INDEX %I ON %I (external_id)', index_name, tbl.tablename);\n        END IF;\n        \n        -- Nome das triggers baseado no nome da tabela\n        trg_update_name := tbl.tablename || '_fire_update_rules';\n        trg_delete_name := tbl.tablename || '_fire_delete_rules';\n        trg_update_deleted_at_name := tbl.tablename || '_fire_update_deleted_at_rules';\n        \n        -- Verifica se a trigger de update já existe e a remove se necessário\n        IF EXISTS (\n            SELECT 1 \n            FROM pg_trigger \n            WHERE tgname = trg_update_name \n              AND tgrelid = tbl.tablename::regclass\n        ) THEN\n            EXECUTE format('DROP TRIGGER %I ON %I', trg_update_name, tbl.tablename);\n        END IF;\n\n        -- Cria a trigger de update\n        EXECUTE format('\n            CREATE TRIGGER %I \n            BEFORE UPDATE ON %I \n            FOR EACH ROW \n            EXECUTE FUNCTION public.prevent_created_at_update();\n        ', trg_update_name, tbl.tablename);\n\n        -- Verifica se a trigger de delete já existe e a remove se necessário\n        IF EXISTS (\n            SELECT 1 \n            FROM pg_trigger \n            WHERE tgname = trg_delete_name \n              AND tgrelid = tbl.tablename::regclass\n        ) THEN\n            EXECUTE format('DROP TRIGGER %I ON %I', trg_delete_name, tbl.tablename);\n        END IF;\n\n        -- Cria a trigger de delete\n        EXECUTE format('\n            CREATE TRIGGER %I \n            BEFORE DELETE ON %I \n            FOR EACH ROW \n            EXECUTE FUNCTION public.prevent_delete();\n        ', trg_delete_name, tbl.tablename);\n\n        -- Verifica se a trigger de update em 'deleted_at' já existe e a remove se necessário\n        IF EXISTS (\n            SELECT 1 \n            FROM pg_trigger \n            WHERE tgname = trg_update_deleted_at_name \n              AND tgrelid = tbl.tablename::regclass\n        ) THEN\n            EXECUTE format('DROP TRIGGER %I ON %I', trg_update_deleted_at_name, tbl.tablename);\n        END IF;\n\n        -- Cria a trigger de update em 'deleted_at'\n        EXECUTE format('\n            CREATE TRIGGER %I \n            BEFORE UPDATE ON %I \n            FOR EACH ROW \n            EXECUTE FUNCTION public.prevent_deleted_at_update();\n        ', trg_update_deleted_at_name, tbl.tablename);\n\n    END LOOP;\nEND $$;\n```","readmeFilename":"README.md"}