{"_id":"@eddiecbrl/v12","_rev":"8-de58e29af45a4fce90a94b31c06daa3a","name":"@eddiecbrl/v12","dist-tags":{"latest":"1.0.0"},"versions":{"0.1.0":{"name":"@eddiecbrl/v12","version":"0.1.0","_id":"@eddiecbrl/v12@0.1.0","maintainers":[{"name":"eddiecbrl","email":"e2cabraljunior@gmail.com"}],"bin":{"v12":"dist/cli.cjs"},"dist":{"shasum":"5c1dba89fedd18348e1f4737381cc50624a196bd","tarball":"https://registry.npmjs.org/@eddiecbrl/v12/-/v12-0.1.0.tgz","fileCount":14,"integrity":"sha512-aiMTukaZrX3JeI7kV35qyRIdLTzEhRV6ogbh2TwB0lQA3wPoRedayRuqu+Q4UUkbxNT9q/O89lF+p9pODx+XTA==","signatures":[{"sig":"MEUCICx8UtWmri/990A05mttPk94TeQ6TQ7H2Ozgq5/8A5EMAiEAgy8w3t4/Y/UB0YcRL5bGjH7V5cLWbM+bEvSBuvSZqBE=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":823644},"type":"module","engines":{"node":">=20"},"gitHead":"17038a7eb3c7652da5f51b144f93192f98f2d997","private":false,"scripts":{"dev":"tsx watch src/server.ts","v12":"tsx src/cli.ts","test":"vitest run","build":"tsup src/index.ts src/cli.ts --format esm,cjs --dts --clean","start":"node dist/server.js","docs:dev":"vitepress dev docs","typecheck":"tsc --noEmit","docs:build":"vitepress build docs","test:watch":"vitest","docs:preview":"vitepress preview docs"},"_npmUser":{"name":"eddiecbrl","email":"e2cabraljunior@gmail.com"},"_npmVersion":"10.9.4","description":"V12 backend framework for Node.js with feature-driven architecture","directories":{},"_nodeVersion":"22.21.1","dependencies":{"zod":"^3.24.2","pino":"^9.6.0","bullmq":"^5.77.4","fastify":"^5.2.1","ioredis":"^5.11.0","commander":"^13.1.0","nodemailer":"^8.0.9","@fastify/cors":"^11.2.0","@fastify/redis":"^7.2.0","@fastify/cookie":"^11.0.2","@fastify/helmet":"^13.0.2","@fastify/multipart":"^10.0.0","@fastify/websocket":"^11.2.0","@opentelemetry/api":"^1.9.1","zod-to-json-schema":"^3.25.2","@fastify/rate-limit":"^10.3.0","@opentelemetry/sdk-node":"^0.218.0","@opentelemetry/resources":"^2.7.1","@opentelemetry/semantic-conventions":"^1.41.1","@opentelemetry/exporter-trace-otlp-http":"^0.218.0","@opentelemetry/auto-instrumentations-node":"^0.76.0","@opentelemetry/exporter-metrics-otlp-http":"^0.218.0"},"_hasShrinkwrap":false,"devDependencies":{"ws":"^8.21.0","tsx":"^4.19.3","vue":"^3.5.34","tsup":"^8.4.0","vitest":"^3.0.8","@types/ws":"^8.18.1","form-data":"^4.0.5","vitepress":"^1.6.4","typescript":"^5.8.2","@types/node":"^22.13.10","@types/nodemailer":"^8.0.0"},"_npmOperationalInternal":{"tmp":"tmp/v12_0.1.0_1779888235374_0.30041868638843505","host":"s3://npm-registry-packages-npm-production"}},"0.1.1":{"name":"@eddiecbrl/v12","version":"0.1.1","_id":"@eddiecbrl/v12@0.1.1","maintainers":[{"name":"eddiecbrl","email":"e2cabraljunior@gmail.com"}],"bin":{"v12":"dist/cli.cjs"},"dist":{"shasum":"7f6a832df464b5772c37790a9e45f2197b241838","tarball":"https://registry.npmjs.org/@eddiecbrl/v12/-/v12-0.1.1.tgz","fileCount":14,"integrity":"sha512-6znLIw6iddOB5QRf379hsGIvRgzemFdUSZxcS88jrYYMLn2bYB3cvQy0FJ4hxWfwqsYbemUUY9VkeR0zN7wvLQ==","signatures":[{"sig":"MEYCIQD30pRbpF9t4sssnkT9nu8Hird8cErDNJTR0r4JnzgXdAIhALDI8/zDoh4TsGa6uLHSJQni+h8RMPEPg+JK46GQw4/u","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":824032},"main":"./dist/index.cjs","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","engines":{"node":">=20"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.cjs"}},"gitHead":"497388325c5f3df1312921057dff28631e4a3b88","private":false,"scripts":{"dev":"tsx watch src/server.ts","v12":"tsx src/cli.ts","test":"vitest run","build":"tsup src/index.ts src/cli.ts --format esm,cjs --dts --clean","start":"node dist/server.js","docs:dev":"vitepress dev docs","typecheck":"tsc --noEmit","docs:build":"vitepress build docs","test:watch":"vitest","docs:preview":"vitepress preview docs"},"_npmUser":{"name":"eddiecbrl","email":"e2cabraljunior@gmail.com"},"_npmVersion":"10.9.4","description":"V12 backend framework for Node.js with feature-driven architecture","directories":{},"_nodeVersion":"22.21.1","dependencies":{"zod":"^3.24.2","pino":"^9.6.0","bullmq":"^5.77.4","fastify":"^5.2.1","ioredis":"^5.11.0","commander":"^13.1.0","nodemailer":"^8.0.9","@fastify/cors":"^11.2.0","@fastify/redis":"^7.2.0","@fastify/cookie":"^11.0.2","@fastify/helmet":"^13.0.2","@fastify/multipart":"^10.0.0","@fastify/websocket":"^11.2.0","@opentelemetry/api":"^1.9.1","zod-to-json-schema":"^3.25.2","@fastify/rate-limit":"^10.3.0","@opentelemetry/sdk-node":"^0.218.0","@opentelemetry/resources":"^2.7.1","@opentelemetry/semantic-conventions":"^1.41.1","@opentelemetry/exporter-trace-otlp-http":"^0.218.0","@opentelemetry/auto-instrumentations-node":"^0.76.0","@opentelemetry/exporter-metrics-otlp-http":"^0.218.0"},"_hasShrinkwrap":false,"devDependencies":{"ws":"^8.21.0","tsx":"^4.19.3","vue":"^3.5.34","tsup":"^8.4.0","vitest":"^3.0.8","@types/ws":"^8.18.1","form-data":"^4.0.5","vitepress":"^1.6.4","typescript":"^5.8.2","@types/node":"^22.13.10","@types/nodemailer":"^8.0.0"},"_npmOperationalInternal":{"tmp":"tmp/v12_0.1.1_1779889698417_0.4905205551779317","host":"s3://npm-registry-packages-npm-production"}},"0.1.2":{"name":"@eddiecbrl/v12","version":"0.1.2","_id":"@eddiecbrl/v12@0.1.2","maintainers":[{"name":"eddiecbrl","email":"e2cabraljunior@gmail.com"}],"bin":{"v12":"dist/cli.cjs"},"dist":{"shasum":"8cf475a7543ec592144dffb46f434e519281016f","tarball":"https://registry.npmjs.org/@eddiecbrl/v12/-/v12-0.1.2.tgz","fileCount":14,"integrity":"sha512-ryLNiC3aGogn5uo3KuIYLRaxtCoMVQCoQ3PExicn+QCjnYCzVCsxAIVC2xROCrVpvVDqkqcEj3UB5pb1Ufdeqw==","signatures":[{"sig":"MEUCIGFfW60K4yKFV0kVMrVfaIa0zXr7AUL1iVY8fJGdyIUfAiEAm17tWxg3aWPk2SlUJNuIQx+hnU4y/alr5693ZrMcwng=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":829985},"main":"./dist/index.cjs","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","engines":{"node":">=20"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.cjs"}},"gitHead":"897578d1b1939cb4d138efb35b05a5de9dc84dd3","private":false,"scripts":{"dev":"tsx watch src/server.ts","v12":"tsx src/cli.ts","test":"vitest run","build":"tsup src/index.ts src/cli.ts --format esm,cjs --dts --clean","start":"node dist/server.js","docs:dev":"vitepress dev docs","typecheck":"tsc --noEmit","docs:build":"vitepress build docs","test:watch":"vitest","docs:preview":"vitepress preview docs"},"_npmUser":{"name":"eddiecbrl","email":"e2cabraljunior@gmail.com"},"_npmVersion":"10.9.4","description":"V12 backend framework for Node.js with feature-driven architecture","directories":{},"_nodeVersion":"22.21.1","dependencies":{"zod":"^3.24.2","pino":"^9.6.0","bullmq":"^5.77.4","fastify":"^5.2.1","ioredis":"^5.11.0","commander":"^13.1.0","nodemailer":"^8.0.9","@fastify/cors":"^11.2.0","@fastify/redis":"^7.2.0","@fastify/cookie":"^11.0.2","@fastify/helmet":"^13.0.2","@fastify/multipart":"^10.0.0","@fastify/websocket":"^11.2.0","@opentelemetry/api":"^1.9.1","zod-to-json-schema":"^3.25.2","@fastify/rate-limit":"^10.3.0","@opentelemetry/sdk-node":"^0.218.0","@opentelemetry/resources":"^2.7.1","@opentelemetry/semantic-conventions":"^1.41.1","@opentelemetry/exporter-trace-otlp-http":"^0.218.0","@opentelemetry/auto-instrumentations-node":"^0.76.0","@opentelemetry/exporter-metrics-otlp-http":"^0.218.0"},"_hasShrinkwrap":false,"devDependencies":{"ws":"^8.21.0","tsx":"^4.19.3","vue":"^3.5.34","tsup":"^8.4.0","vitest":"^3.0.8","@types/ws":"^8.18.1","form-data":"^4.0.5","vitepress":"^1.6.4","typescript":"^5.8.2","@types/node":"^22.13.10","@types/nodemailer":"^8.0.0"},"_npmOperationalInternal":{"tmp":"tmp/v12_0.1.2_1779894734067_0.10186415931753112","host":"s3://npm-registry-packages-npm-production"}},"0.1.3":{"name":"@eddiecbrl/v12","version":"0.1.3","_id":"@eddiecbrl/v12@0.1.3","maintainers":[{"name":"eddiecbrl","email":"e2cabraljunior@gmail.com"}],"bin":{"v12":"dist/cli.cjs"},"dist":{"shasum":"7ea790d1a9f259e3b21fc4916de48b43317ea1b6","tarball":"https://registry.npmjs.org/@eddiecbrl/v12/-/v12-0.1.3.tgz","fileCount":14,"integrity":"sha512-08nWDWTIjJ21KxzDjKR9R3rgPRmIsL8o9tn8rKYln0ntOG5cRELR24zLMJVK1iWwgyr5JfhAdFNM8vDT8K9dTA==","signatures":[{"sig":"MEQCIGa4WH/LDEQ96EubARdcA+7N3LMX6yLPkdQ5Tp79iTcDAiBYeBswfedugx86n+bHhxnHZO1N4EBjK4SC/D7/fICVjg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":878814},"main":"./dist/index.cjs","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","engines":{"node":">=20"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.cjs"}},"gitHead":"5dc65476e28c42d13509819460ffe8806b9ba7a3","private":false,"scripts":{"dev":"tsx watch src/server.ts","v12":"tsx src/cli.ts","test":"vitest run","build":"tsup src/index.ts src/cli.ts --format esm,cjs --dts --clean","start":"node dist/server.js","docs:dev":"vitepress dev docs","typecheck":"tsc --noEmit","docs:build":"vitepress build docs","test:watch":"vitest","docs:preview":"vitepress preview docs"},"_npmUser":{"name":"eddiecbrl","email":"e2cabraljunior@gmail.com"},"_npmVersion":"10.9.4","description":"V12 backend framework for Node.js with feature-driven architecture","directories":{},"_nodeVersion":"22.21.1","dependencies":{"zod":"^3.24.2","pino":"^9.6.0","bullmq":"^5.77.4","fastify":"^5.2.1","ioredis":"^5.11.0","commander":"^13.1.0","nodemailer":"^8.0.9","@fastify/cors":"^11.2.0","@fastify/redis":"^7.2.0","@fastify/cookie":"^11.0.2","@fastify/helmet":"^13.0.2","@fastify/multipart":"^10.0.0","@fastify/websocket":"^11.2.0","@opentelemetry/api":"^1.9.1","zod-to-json-schema":"^3.25.2","@fastify/rate-limit":"^10.3.0","@opentelemetry/sdk-node":"^0.218.0","@opentelemetry/resources":"^2.7.1","@opentelemetry/semantic-conventions":"^1.41.1","@opentelemetry/exporter-trace-otlp-http":"^0.218.0","@opentelemetry/auto-instrumentations-node":"^0.76.0","@opentelemetry/exporter-metrics-otlp-http":"^0.218.0"},"_hasShrinkwrap":false,"devDependencies":{"ws":"^8.21.0","tsx":"^4.19.3","vue":"^3.5.34","tsup":"^8.4.0","vitest":"^3.0.8","@types/ws":"^8.18.1","form-data":"^4.0.5","vitepress":"^1.6.4","typescript":"^5.8.2","@types/node":"^22.13.10","@types/nodemailer":"^8.0.0"},"_npmOperationalInternal":{"tmp":"tmp/v12_0.1.3_1779894862569_0.5559465177444689","host":"s3://npm-registry-packages-npm-production"}},"0.1.4":{"name":"@eddiecbrl/v12","version":"0.1.4","_id":"@eddiecbrl/v12@0.1.4","maintainers":[{"name":"eddiecbrl","email":"e2cabraljunior@gmail.com"}],"bin":{"v12":"dist/cli.cjs"},"dist":{"shasum":"9110182799d80a98f038381c97c64707ba6ebcef","tarball":"https://registry.npmjs.org/@eddiecbrl/v12/-/v12-0.1.4.tgz","fileCount":14,"integrity":"sha512-Ixjmo64dt6aNfB1eXiNBl7xKV1YmpkurU6Ft3w/yA8ANxApXjMWANERIiC4fDJWtTheVQ3/w1X2Fq/TAXf9OwA==","signatures":[{"sig":"MEUCIQCrklzQN+z2kdvj6EbW1QrfAQNrZok6RhI3PxlmvRplkwIgXdbBPNU4kTH8nJ0kRC7S8sLdD/r0VQz+Zs2LmJPyJlM=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":889508},"main":"./dist/index.cjs","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","engines":{"node":">=20"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.cjs"}},"gitHead":"65a5a3437666f00deede08b758bad094023c6442","private":false,"scripts":{"dev":"tsx watch src/server.ts","v12":"tsx src/cli.ts","test":"vitest run","build":"tsup src/index.ts src/cli.ts --format esm,cjs --dts --clean","start":"node dist/server.js","docs:dev":"vitepress dev docs","typecheck":"tsc --noEmit","docs:build":"vitepress build docs","test:watch":"vitest","docs:preview":"vitepress preview docs"},"_npmUser":{"name":"eddiecbrl","email":"e2cabraljunior@gmail.com"},"_npmVersion":"10.9.4","description":"V12 backend framework for Node.js with feature-driven architecture","directories":{},"_nodeVersion":"22.21.1","dependencies":{"zod":"^3.24.2","pino":"^9.6.0","bullmq":"^5.77.4","fastify":"^5.2.1","ioredis":"^5.11.0","inquirer":"^14.0.0","commander":"^13.1.0","nodemailer":"^8.0.9","@fastify/cors":"^11.2.0","@fastify/redis":"^7.2.0","@fastify/cookie":"^11.0.2","@fastify/helmet":"^13.0.2","@fastify/multipart":"^10.0.0","@fastify/websocket":"^11.2.0","@opentelemetry/api":"^1.9.1","zod-to-json-schema":"^3.25.2","@fastify/rate-limit":"^10.3.0","@opentelemetry/sdk-node":"^0.218.0","@opentelemetry/resources":"^2.7.1","@opentelemetry/semantic-conventions":"^1.41.1","@opentelemetry/exporter-trace-otlp-http":"^0.218.0","@opentelemetry/auto-instrumentations-node":"^0.76.0","@opentelemetry/exporter-metrics-otlp-http":"^0.218.0"},"_hasShrinkwrap":false,"devDependencies":{"ws":"^8.21.0","tsx":"^4.19.3","vue":"^3.5.34","tsup":"^8.4.0","vitest":"^3.0.8","@types/ws":"^8.18.1","form-data":"^4.0.5","vitepress":"^1.6.4","typescript":"^5.8.2","@types/node":"^22.13.10","@types/nodemailer":"^8.0.0"},"_npmOperationalInternal":{"tmp":"tmp/v12_0.1.4_1779895640798_0.618599401626142","host":"s3://npm-registry-packages-npm-production"}},"0.1.5":{"name":"@eddiecbrl/v12","version":"0.1.5","_id":"@eddiecbrl/v12@0.1.5","maintainers":[{"name":"eddiecbrl","email":"e2cabraljunior@gmail.com"}],"bin":{"v12":"dist/cli.cjs"},"dist":{"shasum":"d36d21fd9390f795c58d50709f38ec7a97c1b1e7","tarball":"https://registry.npmjs.org/@eddiecbrl/v12/-/v12-0.1.5.tgz","fileCount":14,"integrity":"sha512-21a2abhRhKqJAcmU7lKyY7juneEa2hPLG9b01qKyloUuZmNaxAwbAZcBy1lhGuc/8fO2vR6HDDxNrAhmOMOQ2A==","signatures":[{"sig":"MEUCIQD7WrnQA1T/Izpqv2pRlRdiqTRWhcG/skPm98AxEYviiAIgATBzuQO99Udlfx/WkIMcxxlJKE2rvZLOiB3MDAglIlU=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":888130},"main":"./dist/index.cjs","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","engines":{"node":">=20"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.cjs"}},"gitHead":"98dc28b7b56fb2a752e48ac6c29deed7470dfaaf","private":false,"scripts":{"dev":"tsx watch src/server.ts","v12":"tsx src/cli.ts","test":"vitest run","build":"tsup src/index.ts src/cli.ts --format esm,cjs --dts --clean","start":"node dist/server.js","docs:dev":"vitepress dev docs","typecheck":"tsc --noEmit","docs:build":"vitepress build docs","test:watch":"vitest","docs:preview":"vitepress preview docs"},"_npmUser":{"name":"eddiecbrl","email":"e2cabraljunior@gmail.com"},"_npmVersion":"10.9.4","description":"V12 backend framework for Node.js with feature-driven architecture","directories":{},"_nodeVersion":"22.21.1","dependencies":{"zod":"^3.24.2","pino":"^9.6.0","bullmq":"^5.77.4","fastify":"^5.2.1","ioredis":"^5.11.0","inquirer":"^14.0.0","commander":"^13.1.0","nodemailer":"^8.0.9","@fastify/cors":"^11.2.0","@fastify/redis":"^7.2.0","@fastify/cookie":"^11.0.2","@fastify/helmet":"^13.0.2","@fastify/multipart":"^10.0.0","@fastify/websocket":"^11.2.0","@opentelemetry/api":"^1.9.1","zod-to-json-schema":"^3.25.2","@fastify/rate-limit":"^10.3.0","@opentelemetry/sdk-node":"^0.218.0","@opentelemetry/resources":"^2.7.1","@opentelemetry/semantic-conventions":"^1.41.1","@opentelemetry/exporter-trace-otlp-http":"^0.218.0","@opentelemetry/auto-instrumentations-node":"^0.76.0","@opentelemetry/exporter-metrics-otlp-http":"^0.218.0"},"_hasShrinkwrap":false,"devDependencies":{"ws":"^8.21.0","tsx":"^4.19.3","vue":"^3.5.34","tsup":"^8.4.0","vitest":"^3.0.8","@types/ws":"^8.18.1","form-data":"^4.0.5","vitepress":"^1.6.4","typescript":"^5.8.2","@types/node":"^22.13.10","@types/nodemailer":"^8.0.0"},"_npmOperationalInternal":{"tmp":"tmp/v12_0.1.5_1779897785841_0.43967727481753704","host":"s3://npm-registry-packages-npm-production"}},"0.2.0":{"name":"@eddiecbrl/v12","version":"0.2.0","_id":"@eddiecbrl/v12@0.2.0","maintainers":[{"name":"eddiecbrl","email":"e2cabraljunior@gmail.com"}],"bin":{"v12":"dist/cli.cjs"},"dist":{"shasum":"afc120da6eb2beea9340acc579a0a59e854734bb","tarball":"https://registry.npmjs.org/@eddiecbrl/v12/-/v12-0.2.0.tgz","fileCount":14,"integrity":"sha512-HrTKwKb5APHcPtJePlOF/043R/yTzrOjqFhgPOh2HUHdlomRX9IBkSOJzBfBrzdecZX0LDmRECJgWUmc285WpA==","signatures":[{"sig":"MEUCIQDpC1ZyUYNe8Vjr1uJ21vdXARI+X2CCqPZbr79304WGGwIgf6VNyVPm442QF09s2c0jvXWXdCk3hEzZW0n6V24eC+k=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":977038},"main":"./dist/index.cjs","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","engines":{"node":">=20"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.cjs"}},"gitHead":"96e9720adfb688c4b5e4ebd49124af3ed1b63a48","private":false,"scripts":{"dev":"tsx watch src/server.ts","v12":"tsx src/cli.ts","test":"vitest run","build":"tsup src/index.ts src/cli.ts --format esm,cjs --dts --clean","start":"node dist/server.js","docs:dev":"vitepress dev docs","typecheck":"tsc --noEmit","docs:build":"vitepress build docs","test:watch":"vitest","docs:preview":"vitepress preview docs"},"_npmUser":{"name":"eddiecbrl","email":"e2cabraljunior@gmail.com"},"_npmVersion":"10.9.4","description":"V12 backend framework for Node.js with feature-driven architecture","directories":{},"_nodeVersion":"22.21.1","dependencies":{"zod":"^3.24.2","pino":"^9.6.0","bullmq":"^5.77.4","fastify":"^5.2.1","ioredis":"^5.11.0","inquirer":"^14.0.0","commander":"^13.1.0","nodemailer":"^8.0.9","@fastify/cors":"^11.2.0","@fastify/redis":"^7.2.0","@fastify/cookie":"^11.0.2","@fastify/helmet":"^13.0.2","@fastify/multipart":"^10.0.0","@fastify/websocket":"^11.2.0","@opentelemetry/api":"^1.9.1","zod-to-json-schema":"^3.25.2","@fastify/rate-limit":"^10.3.0","@opentelemetry/sdk-node":"^0.218.0","@opentelemetry/resources":"^2.7.1","@opentelemetry/semantic-conventions":"^1.41.1","@opentelemetry/exporter-trace-otlp-http":"^0.218.0","@opentelemetry/auto-instrumentations-node":"^0.76.0","@opentelemetry/exporter-metrics-otlp-http":"^0.218.0"},"_hasShrinkwrap":false,"devDependencies":{"ws":"^8.21.0","tsx":"^4.19.3","vue":"^3.5.34","tsup":"^8.4.0","vitest":"^3.0.8","@types/ws":"^8.18.1","form-data":"^4.0.5","vitepress":"^1.6.4","typescript":"^5.8.2","@types/node":"^22.13.10","@types/nodemailer":"^8.0.0"},"_npmOperationalInternal":{"tmp":"tmp/v12_0.2.0_1779922442455_0.165689407544527","host":"s3://npm-registry-packages-npm-production"}},"1.0.0":{"name":"@eddiecbrl/v12","version":"1.0.0","main":"./dist/index.cjs","module":"./dist/index.js","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.cjs"}},"private":false,"type":"module","description":"V12 backend framework for Node.js with feature-driven architecture","engines":{"node":">=20"},"scripts":{"dev":"tsx watch src/server.ts","v12":"tsx src/cli.ts","build":"tsup src/index.ts src/cli.ts --format esm,cjs --dts --clean","start":"node dist/server.js","test":"vitest run","test:watch":"vitest","typecheck":"tsc --noEmit","docs:dev":"vitepress dev docs","docs:build":"vitepress build docs","docs:preview":"vitepress preview docs"},"bin":{"v12":"dist/cli.cjs"},"dependencies":{"@fastify/cookie":"^11.0.2","@fastify/cors":"^11.2.0","@fastify/helmet":"^13.0.2","@fastify/multipart":"^10.0.0","@fastify/rate-limit":"^10.3.0","@fastify/redis":"^7.2.0","@fastify/websocket":"^11.2.0","@opentelemetry/api":"^1.9.1","@opentelemetry/auto-instrumentations-node":"^0.76.0","@opentelemetry/exporter-metrics-otlp-http":"^0.218.0","@opentelemetry/exporter-trace-otlp-http":"^0.218.0","@opentelemetry/resources":"^2.7.1","@opentelemetry/sdk-node":"^0.218.0","@opentelemetry/semantic-conventions":"^1.41.1","bullmq":"^5.77.4","commander":"^13.1.0","fastify":"^5.2.1","inquirer":"^14.0.0","ioredis":"^5.11.0","nodemailer":"^8.0.9","pino":"^9.6.0","zod":"^3.24.2","zod-to-json-schema":"^3.25.2"},"devDependencies":{"@types/node":"^22.13.10","@types/nodemailer":"^8.0.0","@types/ws":"^8.18.1","form-data":"^4.0.5","tsup":"^8.4.0","tsx":"^4.19.3","typescript":"^5.8.2","vitepress":"^1.6.4","vitest":"^3.0.8","vue":"^3.5.34","ws":"^8.21.0"},"gitHead":"14fd5b0cbf1d88044ec18187147088b21b7574eb","_id":"@eddiecbrl/v12@1.0.0","_nodeVersion":"26.3.1","_npmVersion":"11.16.0","dist":{"integrity":"sha512-blerEwKBSA0UA5qVll1Rx9i8vdVCwizwa9Koyw1r0pRQbLoiUNlz0hDw5ckNe/dyTLo4OdKi2qsxEw6IrYXOrA==","shasum":"11ef46dc7886eebf1bcb5b027520e3babd2d4dbb","tarball":"https://registry.npmjs.org/@eddiecbrl/v12/-/v12-1.0.0.tgz","fileCount":14,"unpackedSize":1148616,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEYCIQDv2vTY+G7pBG/JMmbUWdCkHi7Jj8q1TLgK9rRUFknGigIhAO1ChQEAwbAKg8Z8vDcmJozYykT27+xEJHke6tDMmnVk"}]},"_npmUser":{"name":"eddiecbrl","email":"e2cabraljunior@gmail.com"},"directories":{},"maintainers":[{"name":"eddiecbrl","email":"e2cabraljunior@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/v12_1.0.0_1785522418127_0.3115220914330221"},"_hasShrinkwrap":false}},"time":{"created":"2026-05-27T13:23:55.210Z","modified":"2026-07-31T18:26:58.368Z","0.1.0":"2026-05-27T13:23:55.551Z","0.1.1":"2026-05-27T13:48:18.633Z","0.1.2":"2026-05-27T15:12:14.332Z","0.1.3":"2026-05-27T15:14:22.793Z","0.1.4":"2026-05-27T15:27:20.971Z","0.1.5":"2026-05-27T16:03:06.022Z","0.2.0":"2026-05-27T22:54:02.680Z","1.0.0":"2026-07-31T18:26:58.258Z"},"description":"V12 backend framework for Node.js with feature-driven architecture","maintainers":[{"name":"eddiecbrl","email":"e2cabraljunior@gmail.com"}],"readme":"# V12 Framework\n\n<p align=\"center\">\n  <b>Simple. Cohesive. Fast.</b>\n  <br>\n  Framework backend feature-driven para Node.js, TypeScript e Fastify.\n</p>\n\nO `@eddiecbrl/v12` é um framework para construção de APIs modulares com foco em:\n\n- organização por feature, não por camada solta\n- bootstrap enxuto\n- validação tipada com Zod\n- DI simples e previsível\n- base pronta para segurança, observabilidade, SDK e plugins\n\nSe a sua equipe quer começar rápido sem perder legibilidade quando o projeto crescer, essa é a proposta do V12.\n\n## Instalação\n\n```bash\nnpm install @eddiecbrl/v12 zod\n```\n\nPara desenvolvimento local do próprio framework:\n\n```bash\nnpm install\nnpm run dev\n```\n\n## Exemplo mínimo\n\n```ts\nimport { createApp, createRouter, defineModule } from '@eddiecbrl/v12';\n\nclass PingController {\n  check() {\n    return { pong: true };\n  }\n}\n\nconst router = createRouter();\n\nrouter.get('/', {\n  handler: ({ container }) => container.resolve(PingController).check(),\n});\n\nconst PingModule = defineModule({\n  name: 'ping',\n  providers: [PingController],\n  routes: router.build(),\n});\n\nconst app = await createApp({\n  modules: [PingModule],\n});\n\nawait app.listen({ port: 3000 });\n```\n\nIsso expõe:\n\n- `GET /ping`\n- `GET /`\n- `GET /health`\n- `GET /metrics`\n\n## Como pensar o framework\n\nNo V12, cada feature tende a ficar próxima de si mesma:\n\n```txt\nsrc/\n  features/\n    users/\n      users.module.ts\n      users.routes.ts\n      users.controller.ts\n      users.service.ts\n      users.schemas.ts\n      users.repository.ts\n  app.ts\n  server.ts\n```\n\nO fluxo principal é:\n\n1. `createRouter()` declara as rotas.\n2. `defineModule()` empacota a feature.\n3. `createApp()` monta a aplicação Fastify, container, hooks e plugins.\n\n## Exemplo mais realista\n\n```ts\nimport crypto from 'node:crypto';\nimport { z } from 'zod';\nimport { createApp, createRouter, defineModule } from '@eddiecbrl/v12';\n\nconst createUserSchema = {\n  body: z.object({\n    name: z.string().min(2),\n    email: z.string().email(),\n  }),\n};\n\ntype CreateUserInput = z.infer<typeof createUserSchema.body>;\n\nclass UsersService {\n  private readonly users: Array<{ id: string; name: string; email: string }> = [];\n\n  list() {\n    return this.users;\n  }\n\n  create(input: CreateUserInput) {\n    const user = { id: crypto.randomUUID(), ...input };\n    this.users.push(user);\n    return user;\n  }\n}\n\nclass UsersController {\n  static inject = [UsersService] as const;\n\n  constructor(private readonly usersService: UsersService) {}\n\n  list = async () => this.usersService.list();\n\n  create = async ({ request }: { request: { body: CreateUserInput } }) =>\n    this.usersService.create(request.body);\n}\n\nconst router = createRouter();\n\nrouter.get('/', {\n  handler: ({ container }) => container.resolve(UsersController).list(),\n});\n\nrouter.post('/', {\n  schema: createUserSchema,\n  handler: ({ container, request }) =>\n    container.resolve(UsersController).create({\n      request: { body: request.body as CreateUserInput },\n    }),\n});\n\nconst UsersModule = defineModule({\n  name: 'users',\n  providers: [UsersService, UsersController],\n  routes: router.build(),\n});\n\nconst app = await createApp({\n  modules: [UsersModule],\n  security: {\n    cors: true,\n    helmet: true,\n  },\n});\n\nawait app.listen({ port: 3000 });\n```\n\n## O que já vem no core\n\n- DI com classes, tokens, factories e values\n- Fastify como runtime HTTP\n- validação de `body`, `params`, `querystring` e `headers`\n- padrões de resiliência: retry, timeout, fallback, bulkhead e circuit breaker\n- recursos de segurança como CORS, Helmet, cookies, multipart e WebSocket\n- observabilidade com logs estruturados, `x-request-id`, `/health` e `/metrics`\n- plugins como OpenAPI, SDK e devtools\n\n## CLI\n\nA CLI pode ser usada pelo binário gerado ou via script local:\n\n```bash\nnpx v12 --help\nnpm run v12 -- --help\n```\n\nExemplos:\n\n```bash\nnpx v12 init\nnpx v12 generate feature users\nnpx v12 generate resource billing invoice --adapter prisma\nnpx v12 generate route users export-report --method POST --path /reports/export\nnpx v12 sdk --output ./sdk.ts --url http://localhost:3000\n```\n\n## Documentação\n\nA documentação VitePress fica em [`docs/`](./docs/).\n\nRodando localmente:\n\n```bash\nnpm run docs:dev\n```\n\nPáginas recomendadas:\n\n- [Home da documentação](./docs/index.md)\n- [Instalação](./docs/introduction/installation.md)\n- [Quick Start](./docs/introduction/quick-start.md)\n- [Começando](./docs/getting-started.md)\n- [API `createApp`](./docs/api/create-app.md)\n- [API `defineModule`](./docs/api/define-module.md)\n- [API `createRouter`](./docs/api/create-router.md)\n- [API da CLI](./docs/api/cli.md)\n\n## Scripts úteis\n\n```bash\nnpm run build\nnpm run test\nnpm run typecheck\nnpm run docs:build\n```\n\n## Licença\n\nMIT\n","readmeFilename":"README.md"}