{"_id":"@alt-javascript/boot-express","_rev":"8-b1a49b7260d83474703efe3460e68dd4","name":"@alt-javascript/boot-express","dist-tags":{"latest":"3.0.7"},"versions":{"3.0.0":{"name":"@alt-javascript/boot-express","version":"3.0.0","keywords":["alt-javascript","express","boot","cdi","dependency-injection","controller","mvc"],"author":{"name":"Craig Parravicini"},"license":"MIT","_id":"@alt-javascript/boot-express@3.0.0","maintainers":[{"name":"craigparra","email":"craigparra@gmail.com"}],"contributors":[{"url":"Anthropic","name":"Claude"}],"homepage":"https://github.com/alt-javascript/boot/tree/main/packages/boot-express#readme","bugs":{"url":"https://github.com/alt-javascript/boot/issues"},"dist":{"shasum":"7ee6fb48cb9726a80e5a0a51f91d0ab3ee3788ed","tarball":"https://registry.npmjs.org/@alt-javascript/boot-express/-/boot-express-3.0.0.tgz","fileCount":7,"integrity":"sha512-/YjUhexf0NNbhcR3wfRrXO9dgX93HUpRJfN8fGy0I2wezOx5MQNX/mv+QV3hkma3CG2Cq4zooKbPF1X6UKxlzw==","signatures":[{"sig":"MEQCIC4Dusb+76IX9yfAGWkWLZ3VwP+rXE10kbC448yau7crAiApeOVFH27xsdhBlYCuabAld8owdJgTO3Qf28AAT9MKNA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":22642},"main":"index.js","type":"module","engines":{"node":">=18"},"exports":{".":"./index.js"},"gitHead":"6bc9996e5d4f03d52e441c7d89e4132d0cfbeebb","scripts":{"test":"mocha --recursive test/**/*.spec.js"},"_npmUser":{"name":"craigparra","email":"craigparra@gmail.com"},"repository":{"url":"git+https://github.com/alt-javascript/boot.git","type":"git","directory":"packages/boot-express"},"_npmVersion":"11.12.0","description":"Express adapter for @alt-javascript boot — CDI-managed Express with controller auto-registration","directories":{},"_nodeVersion":"24.14.0","dependencies":{"express":"^4.21.0","@alt-javascript/cdi":"3.0.0"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"chai":"^4.3.7","mocha":"^11.7.5","supertest":"^7.0.0","@alt-javascript/boot":"3.0.0","@alt-javascript/config":"3.0.0","@alt-javascript/logger":"3.0.0","@alt-javascript/jsdbc-sqljs":"^1.0.0","@alt-javascript/jsdbc-template":"3.0.0"},"_npmOperationalInternal":{"tmp":"tmp/boot-express_3.0.0_1774062723022_0.4840008869392598","host":"s3://npm-registry-packages-npm-production"}},"3.0.1":{"name":"@alt-javascript/boot-express","version":"3.0.1","keywords":["alt-javascript","express","boot","cdi","dependency-injection","controller","mvc"],"author":{"name":"Craig Parravicini"},"license":"MIT","_id":"@alt-javascript/boot-express@3.0.1","maintainers":[{"name":"craigparra","email":"craigparra@gmail.com"}],"contributors":[{"url":"Anthropic","name":"Claude"}],"homepage":"https://github.com/alt-javascript/boot/tree/main/packages/boot-express#readme","bugs":{"url":"https://github.com/alt-javascript/boot/issues"},"dist":{"shasum":"f95fcc15d4fcb8939d4bdb26db596d0beae1b893","tarball":"https://registry.npmjs.org/@alt-javascript/boot-express/-/boot-express-3.0.1.tgz","fileCount":7,"integrity":"sha512-3OztyJbJMF1OxDP7osWvtT+GfYagd/f7G310tX+OP7GeQm/CuaqYIdNk23xNW0a4A1IJhmg653JcnGfmvdBW5A==","signatures":[{"sig":"MEUCIQD2dEUlwSNoPld5EHXvb3yVLF9UU4WY8Ln3pwsQmB0/KgIgSusVwMlTwf8E3I+oHj8YkTY5m51FeWAGA8H00Ysn/eE=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":22645},"main":"index.js","type":"module","engines":{"node":">=18"},"exports":{".":"./index.js"},"gitHead":"59023df5b83098ff9e536f4b5821dd38b053d6be","scripts":{"test":"mocha --recursive test/**/*.spec.js"},"_npmUser":{"name":"craigparra","email":"craigparra@gmail.com"},"repository":{"url":"git+https://github.com/alt-javascript/boot.git","type":"git","directory":"packages/boot-express"},"_npmVersion":"11.12.0","description":"Express adapter for @alt-javascript boot — CDI-managed Express with controller auto-registration","directories":{},"_nodeVersion":"24.14.0","dependencies":{"express":"^4.21.0","@alt-javascript/cdi":"3.0.1"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"chai":"^4.3.7","mocha":"^11.7.5","supertest":"^7.0.0","@alt-javascript/boot":"3.0.1","@alt-javascript/config":"3.0.1","@alt-javascript/logger":"3.0.1","@alt-javascript/jsdbc-sqljs":"^1.0.0","@alt-javascript/jsdbc-template":"3.0.1"},"_npmOperationalInternal":{"tmp":"tmp/boot-express_3.0.1_1774067469648_0.3126233484948773","host":"s3://npm-registry-packages-npm-production"}},"3.0.2":{"name":"@alt-javascript/boot-express","version":"3.0.2","keywords":["alt-javascript","express","boot","cdi","dependency-injection","controller","mvc"],"author":{"name":"Craig Parravicini"},"license":"MIT","_id":"@alt-javascript/boot-express@3.0.2","maintainers":[{"name":"craigparra","email":"craigparra@gmail.com"}],"contributors":[{"url":"Anthropic","name":"Claude"}],"homepage":"https://github.com/alt-javascript/boot/tree/main/packages/boot-express#readme","bugs":{"url":"https://github.com/alt-javascript/boot/issues"},"dist":{"shasum":"842650bd7b6abc2dcf54af53152760b3dbdb7084","tarball":"https://registry.npmjs.org/@alt-javascript/boot-express/-/boot-express-3.0.2.tgz","fileCount":7,"integrity":"sha512-Zy4bPQ3SiVd7lB2aJqT1rN3VvX2BqHZTv7TkdOj7qoiyZElyFu53VcNGTBe3q6qojhFxAlBMYRIrcuOsyINXjw==","signatures":[{"sig":"MEYCIQCmA1/hI9lsC0UdStBoDw3cWnyljiFA/vUT0WggiQL3ZAIhAOczk+WiLwIqNHVtoOMM+hJceuJTAHi1Zgu0j85zKeNA","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":22645},"main":"index.js","type":"module","engines":{"node":">=18"},"exports":{".":"./index.js"},"gitHead":"df365b8a2ff98a6a5f18da02ee01007ea5baa69b","scripts":{"test":"mocha --recursive test/**/*.spec.js"},"_npmUser":{"name":"craigparra","email":"craigparra@gmail.com"},"repository":{"url":"git+https://github.com/alt-javascript/boot.git","type":"git","directory":"packages/boot-express"},"_npmVersion":"11.12.0","description":"Express adapter for @alt-javascript boot — CDI-managed Express with controller auto-registration","directories":{},"_nodeVersion":"24.14.0","dependencies":{"express":"^4.21.0","@alt-javascript/cdi":"3.0.2"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"chai":"^4.3.7","mocha":"^11.7.5","supertest":"^7.0.0","@alt-javascript/boot":"3.0.2","@alt-javascript/config":"3.0.2","@alt-javascript/logger":"3.0.2","@alt-javascript/jsdbc-sqljs":"^1.0.0","@alt-javascript/jsdbc-template":"3.0.2"},"_npmOperationalInternal":{"tmp":"tmp/boot-express_3.0.2_1774067771574_0.9847502406746165","host":"s3://npm-registry-packages-npm-production"}},"3.0.3":{"name":"@alt-javascript/boot-express","version":"3.0.3","keywords":["alt-javascript","express","boot","cdi","dependency-injection","controller","mvc"],"author":{"name":"Craig Parravicini"},"license":"MIT","_id":"@alt-javascript/boot-express@3.0.3","maintainers":[{"name":"craigparra","email":"craigparra@gmail.com"}],"contributors":[{"url":"Anthropic","name":"Claude"}],"homepage":"https://github.com/alt-javascript/boot/tree/main/packages/boot-express#readme","bugs":{"url":"https://github.com/alt-javascript/boot/issues"},"dist":{"shasum":"4d3c2b28d34ce5498f12bf1e2acb3c57a6704b69","tarball":"https://registry.npmjs.org/@alt-javascript/boot-express/-/boot-express-3.0.3.tgz","fileCount":7,"integrity":"sha512-9RiDwAyGYjKQWbN7r4QXLw63TmVinxQ8aAipydtU6ND4VgL3Q9bRH7ttgV+M9Vgtn2FvOa5ELRnSih7UnVwaKQ==","signatures":[{"sig":"MEQCID3H+GX8/owtI3LCKBNBErMMV1/eYXYmJtyRfah12H6rAiB6eIky5bHn+8mWBtFiamzm+USoffQSowpaH9iIt8spxQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":22645},"main":"index.js","type":"module","engines":{"node":">=18"},"exports":{".":"./index.js"},"gitHead":"e64fbbad53825fef88c3a0976208f27893822519","scripts":{"test":"mocha --recursive test/**/*.spec.js"},"_npmUser":{"name":"craigparra","email":"craigparra@gmail.com"},"repository":{"url":"git+https://github.com/alt-javascript/boot.git","type":"git","directory":"packages/boot-express"},"_npmVersion":"11.12.0","description":"Express adapter for @alt-javascript boot — CDI-managed Express with controller auto-registration","directories":{},"_nodeVersion":"24.14.0","dependencies":{"express":"^4.21.0","@alt-javascript/cdi":"3.0.3"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"chai":"^4.3.7","mocha":"^11.7.5","supertest":"^7.0.0","@alt-javascript/boot":"3.0.3","@alt-javascript/config":"3.0.3","@alt-javascript/logger":"3.0.3","@alt-javascript/jsdbc-sqljs":"^1.0.0","@alt-javascript/jsdbc-template":"3.0.3"},"_npmOperationalInternal":{"tmp":"tmp/boot-express_3.0.3_1774068659030_0.8490458084391814","host":"s3://npm-registry-packages-npm-production"}},"3.0.4":{"name":"@alt-javascript/boot-express","version":"3.0.4","keywords":["alt-javascript","express","boot","cdi","dependency-injection","controller","mvc"],"author":{"name":"Craig Parravicini"},"license":"MIT","_id":"@alt-javascript/boot-express@3.0.4","maintainers":[{"name":"craigparra","email":"craigparra@gmail.com"}],"contributors":[{"url":"Anthropic","name":"Claude"}],"homepage":"https://github.com/alt-javascript/boot/tree/main/packages/boot-express#readme","bugs":{"url":"https://github.com/alt-javascript/boot/issues"},"dist":{"shasum":"8dd0b3617115995bb95fd909d0f0840c198d83d4","tarball":"https://registry.npmjs.org/@alt-javascript/boot-express/-/boot-express-3.0.4.tgz","fileCount":7,"integrity":"sha512-cUSyaUr82PZ3/iYl8AvpVbnIkRSAloTB2E4kTDgI8dVgOUSiwbGQPEvLnSxZQtWGrgUsSi76EdnMiMGtrkgo8Q==","signatures":[{"sig":"MEUCIQDgVO3RGu9o6JWZ+AuOWZ4MXwKNmg81JpT17fxsgSKG7gIgXdqwtwB7xujHRNKmZhUGmAe2jqGk3Hq9qgyT8wOQSls=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":23051},"main":"index.js","type":"module","engines":{"node":">=18"},"exports":{".":"./index.js"},"gitHead":"d8de2e8b94151a92fd0c9259d906dfe6d66e11f5","scripts":{"test":"mocha --recursive test/**/*.spec.js"},"_npmUser":{"name":"craigparra","email":"craigparra@gmail.com"},"repository":{"url":"git+https://github.com/alt-javascript/boot.git","type":"git","directory":"packages/boot-express"},"_npmVersion":"11.12.0","description":"Express adapter for @alt-javascript boot — CDI-managed Express with controller auto-registration","directories":{},"_nodeVersion":"24.14.0","dependencies":{"express":"^4.21.0","@alt-javascript/cdi":"3.0.4"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"chai":"^4.3.7","mocha":"^11.7.5","supertest":"^7.0.0","@alt-javascript/boot":"3.0.4","@alt-javascript/config":"3.0.4","@alt-javascript/logger":"3.0.4","@alt-javascript/boot-jsdbc":"3.0.4","@alt-javascript/jsdbc-sqljs":"^1.0.0","@alt-javascript/jsdbc-template":"*"},"_npmOperationalInternal":{"tmp":"tmp/boot-express_3.0.4_1774422702520_0.07126128018370648","host":"s3://npm-registry-packages-npm-production"}},"3.0.5":{"name":"@alt-javascript/boot-express","version":"3.0.5","keywords":["alt-javascript","express","boot","cdi","dependency-injection","controller","mvc"],"author":{"name":"Craig Parravicini"},"license":"MIT","_id":"@alt-javascript/boot-express@3.0.5","maintainers":[{"name":"craigparra","email":"craigparra@gmail.com"}],"contributors":[{"url":"Anthropic","name":"Claude"}],"homepage":"https://github.com/alt-javascript/boot/tree/main/packages/boot-express#readme","bugs":{"url":"https://github.com/alt-javascript/boot/issues"},"dist":{"shasum":"4faee8dc37b989e50c08ae8a960a5188e4fb80e2","tarball":"https://registry.npmjs.org/@alt-javascript/boot-express/-/boot-express-3.0.5.tgz","fileCount":7,"integrity":"sha512-2RDfQRcrVjyTULW+WYLm5+OvFcOV64RqQi55s3fjrspgsTfPD39ZVGM1igszumeE6ioZ5svYhiFZgDZsvDclIg==","signatures":[{"sig":"MEUCIAf6hW9A1OWVutcCNog+D1reN64lbMfPgmL6/3D7UPc/AiEA29oKhlG9zJ+okX9gzw3rTlTkd4SWvXA+Bket8XTamTY=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":23051},"main":"index.js","type":"module","engines":{"node":">=18"},"exports":{".":"./index.js"},"gitHead":"925db7483dcdfbfdb2571e74d3ae4bbfa494a126","scripts":{"test":"mocha --recursive test/**/*.spec.js"},"_npmUser":{"name":"craigparra","email":"craigparra@gmail.com"},"repository":{"url":"git+https://github.com/alt-javascript/boot.git","type":"git","directory":"packages/boot-express"},"_npmVersion":"11.12.0","description":"Express adapter for @alt-javascript boot — CDI-managed Express with controller auto-registration","directories":{},"_nodeVersion":"24.14.0","dependencies":{"express":"^4.21.0","@alt-javascript/cdi":"3.0.5"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"chai":"^4.3.7","mocha":"^11.7.5","supertest":"^7.0.0","@alt-javascript/boot":"3.0.5","@alt-javascript/config":"3.0.5","@alt-javascript/logger":"3.0.5","@alt-javascript/boot-jsdbc":"3.0.5","@alt-javascript/jsdbc-sqljs":"^1.0.0","@alt-javascript/jsdbc-template":"*"},"_npmOperationalInternal":{"tmp":"tmp/boot-express_3.0.5_1774428763907_0.8128348592258536","host":"s3://npm-registry-packages-npm-production"}},"3.0.6":{"name":"@alt-javascript/boot-express","version":"3.0.6","keywords":["alt-javascript","express","boot","cdi","dependency-injection","controller","mvc"],"author":{"name":"Craig Parravicini"},"license":"MIT","_id":"@alt-javascript/boot-express@3.0.6","maintainers":[{"name":"craigparra","email":"craigparra@gmail.com"}],"contributors":[{"url":"Anthropic","name":"Claude"}],"homepage":"https://github.com/alt-javascript/boot/tree/main/packages/boot-express#readme","bugs":{"url":"https://github.com/alt-javascript/boot/issues"},"dist":{"shasum":"de0e80a462c59b387ea04421f7b4fca8547eebfc","tarball":"https://registry.npmjs.org/@alt-javascript/boot-express/-/boot-express-3.0.6.tgz","fileCount":7,"integrity":"sha512-LFM2pXVTCGYimYi3ZjeA7O/Z/wQ23BHEFq12J2Z26XrxF/cQtQxVf+WRyj4JJZKXPT0odcAykAZqjTTvRMuUUw==","signatures":[{"sig":"MEUCIQC9RuJigbfIzdhO4nJWUL2y26GGEP2n7RhMRUyFlEfQjwIgb2i0xqJpl42hYjoTTKEwUuedyGDrFidhzMBeqLlQrYg=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":23051},"main":"index.js","type":"module","engines":{"node":">=20"},"exports":{".":"./index.js"},"gitHead":"ba43e8807bc28583f98edddce84849875544bd51","scripts":{"test":"mocha --recursive test/**/*.spec.js"},"_npmUser":{"name":"craigparra","email":"craigparra@gmail.com"},"repository":{"url":"git+https://github.com/alt-javascript/boot.git","type":"git","directory":"packages/boot-express"},"_npmVersion":"11.12.1","description":"Express adapter for @alt-javascript boot — CDI-managed Express with controller auto-registration","directories":{},"_nodeVersion":"24.14.0","dependencies":{"express":"^4.21.0","@alt-javascript/cdi":"3.0.6"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"chai":"^4.3.7","mocha":"^11.7.5","supertest":"^7.0.0","@alt-javascript/boot":"3.0.6","@alt-javascript/config":"3.0.6","@alt-javascript/logger":"3.0.6","@alt-javascript/boot-jsdbc":"3.0.6","@alt-javascript/jsdbc-sqljs":"^1.0.0","@alt-javascript/jsdbc-template":"*"},"_npmOperationalInternal":{"tmp":"tmp/boot-express_3.0.6_1774553422521_0.7652939795085363","host":"s3://npm-registry-packages-npm-production"}},"3.0.7":{"name":"@alt-javascript/boot-express","version":"3.0.7","description":"Express adapter for @alt-javascript boot — CDI-managed Express with controller auto-registration","type":"module","main":"index.js","exports":{".":"./index.js"},"author":{"name":"Craig Parravicini"},"contributors":[{"name":"Claude","url":"Anthropic"},{"name":"Spring Framework","url":"VMware/Broadcom"}],"keywords":["alt-javascript","express","boot","cdi","dependency-injection","controller","mvc"],"publishConfig":{"registry":"https://registry.npmjs.org/","access":"public"},"scripts":{"test":"mocha --recursive test/**/*.spec.js"},"dependencies":{"@alt-javascript/cdi":"3.0.7","express":"^4.21.0"},"devDependencies":{"@alt-javascript/boot":"3.0.7","@alt-javascript/config":"3.0.7","@alt-javascript/jsdbc-template":"*","@alt-javascript/jsdbc-sqljs":"^1.0.0","@alt-javascript/logger":"3.0.7","chai":"^4.3.7","mocha":"^11.7.5","supertest":"^7.0.0","@alt-javascript/boot-jsdbc":"3.0.7"},"license":"MIT","repository":{"type":"git","url":"git+https://github.com/alt-javascript/boot.git","directory":"packages/boot-express"},"homepage":"https://github.com/alt-javascript/boot/tree/main/packages/boot-express#readme","bugs":{"url":"https://github.com/alt-javascript/boot/issues"},"engines":{"node":">=20"},"gitHead":"01bd2e99058af03b3213c09c07ba87985bfeeeca","_id":"@alt-javascript/boot-express@3.0.7","_nodeVersion":"24.14.0","_npmVersion":"11.12.1","dist":{"integrity":"sha512-jbluAZw6fPW2UsE01TDw9WY1o59dsX4UGRsBr6aLtbN3/zhVdJaUJp/QhIL7TftZjPsRuMP+F3TxSzUp1Wyzxg==","shasum":"4db7de11dbc51a7f989b1e93b83d0ceb86f28f73","tarball":"https://registry.npmjs.org/@alt-javascript/boot-express/-/boot-express-3.0.7.tgz","fileCount":7,"unpackedSize":29196,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEQCIAZ/+5NLGrXldtsoXiVcKvonBQuFz3VZlyg0ibo6SWptAiB+NEjRagwXLBz5rdGn5WuVtSRSfq/3k02ch35lsjhuuw=="}]},"_npmUser":{"name":"craigparra","email":"craigparra@gmail.com"},"directories":{},"maintainers":[{"name":"craigparra","email":"craigparra@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/boot-express_3.0.7_1774553611571_0.3012350516136466"},"_hasShrinkwrap":false}},"time":{"created":"2026-03-21T03:12:02.951Z","modified":"2026-03-26T19:33:31.837Z","3.0.0":"2026-03-21T03:12:03.184Z","3.0.1":"2026-03-21T04:31:09.806Z","3.0.2":"2026-03-21T04:36:11.719Z","3.0.3":"2026-03-21T04:50:59.180Z","3.0.4":"2026-03-25T07:11:42.674Z","3.0.5":"2026-03-25T08:52:44.030Z","3.0.6":"2026-03-26T19:30:22.663Z","3.0.7":"2026-03-26T19:33:31.720Z"},"bugs":{"url":"https://github.com/alt-javascript/boot/issues"},"author":{"name":"Craig Parravicini"},"license":"MIT","homepage":"https://github.com/alt-javascript/boot/tree/main/packages/boot-express#readme","keywords":["alt-javascript","express","boot","cdi","dependency-injection","controller","mvc"],"repository":{"type":"git","url":"git+https://github.com/alt-javascript/boot.git","directory":"packages/boot-express"},"description":"Express adapter for @alt-javascript boot — CDI-managed Express with controller auto-registration","contributors":[{"name":"Claude","url":"Anthropic"},{"name":"Spring Framework","url":"VMware/Broadcom"}],"maintainers":[{"name":"craigparra","email":"craigparra@gmail.com"}],"readme":"# @alt-javascript/boot-express\n\n[![Language](https://img.shields.io/badge/language-JavaScript-yellow.svg)](https://developer.mozilla.org/en-US/docs/Web/JavaScript)\n[![npm version](https://img.shields.io/npm/v/%40alt-javascript%2Fboot-express)](https://www.npmjs.com/package/@alt-javascript/boot-express)\n[![License: MIT](https://img.shields.io/badge/license-MIT-blue.svg)](https://opensource.org/licenses/MIT)\n[![CI](https://github.com/alt-javascript/boot/actions/workflows/node.js.yml/badge.svg)](https://github.com/alt-javascript/boot/actions/workflows/node.js.yml)\n\nExpress adapter for the `@alt-javascript` framework. Bridges CDI-managed controllers to Express routes with a CDI middleware pipeline for cross-cutting concerns.\n\n**Inspired by Spring MVC `@RestController` / `@RequestMapping` and Spring Security's filter chain.**\n\n**Part of the [@alt-javascript](https://github.com/alt-javascript/boot) monorepo.**\n\n## Install\n\n```bash\nnpm install @alt-javascript/boot-express express\n```\n\n## Usage\n\nDefine a controller with `__routes` metadata and boot with `expressStarter()`:\n\n```javascript\nimport { Boot } from '@alt-javascript/boot';\nimport { Context, Singleton } from '@alt-javascript/cdi';\nimport { expressStarter } from '@alt-javascript/boot-express';\n\nclass TodoController {\n  static __routes = [\n    { method: 'GET',    path: '/todos',     handler: 'list'   },\n    { method: 'POST',   path: '/todos',     handler: 'create' },\n    { method: 'GET',    path: '/todos/:id', handler: 'get'    },\n    { method: 'DELETE', path: '/todos/:id', handler: 'remove' },\n  ];\n\n  constructor() { this.todoService = null; } // autowired\n\n  async list(req)   { return this.todoService.findAll(); }\n  async create(req) { return this.todoService.create(req.body); }\n  async get(req)    { return this.todoService.findById(req.params.id); }\n  async remove(req) { return this.todoService.delete(req.params.id); }\n}\n\nconst context = new Context([\n  ...expressStarter(),\n  new Singleton(TodoService),\n  new Singleton(TodoController),\n]);\n\nawait Boot.boot({ contexts: [context] });\n// Express is listening on server.port (default 3000)\n```\n\nThe adapter discovers all CDI beans with `__routes`, binds handlers to Express routes, and makes the CDI context available as `req.app.locals.ctx`.\n\n## Controller Patterns\n\n### Declarative (`__routes`)\n\nHandlers receive the native Express `(req, res, next)` arguments:\n\n```javascript\nasync greet(req, res) {\n  const message = this.greetingService.greet(req.params.name);\n  res.json({ message });\n}\n```\n\n### Imperative (`routes(app, ctx)`)\n\n```javascript\nclass ImperativeController {\n  routes(app, ctx) {\n    app.get('/custom', (req, res) => {\n      res.json({ from: ctx.get('myService').doSomething() });\n    });\n  }\n}\n```\n\n## Middleware Pipeline\n\n`expressStarter()` registers three built-in middleware components via the CDI middleware pipeline — the equivalent of Spring Security's filter chain:\n\n| Component | Order | Behaviour |\n|---|---|---|\n| `RequestLoggerMiddleware` | 10 | Logs `[METHOD] /path → status (Xms)` |\n| `ErrorHandlerMiddleware` | 20 | Converts thrown errors to JSON error responses |\n| `NotFoundMiddleware` | 30 | Returns 404 for unmatched routes |\n\nAdd custom middleware by declaring `static __middleware = { order: N }` on any CDI component:\n\n```javascript\nclass AuthMiddleware {\n  static __middleware = { order: 5 }; // runs outermost — before RequestLoggerMiddleware\n\n  constructor() { this.logger = null; } // autowired\n\n  async handle(request, next) {\n    const token = request.headers.authorization?.replace('Bearer ', '');\n    if (!token) return { statusCode: 401, body: { error: 'Unauthorized' } };\n    return next({ ...request, user: { token } });\n  }\n}\n\nconst context = new Context([\n  ...expressStarter(),\n  new Singleton(AuthMiddleware), // auto-detected — no extra wiring\n  new Singleton(TodoController),\n]);\n```\n\nDisable a built-in middleware via config:\n\n```json\n{ \"middleware\": { \"requestLogger\": { \"enabled\": false } } }\n```\n\nReplace a built-in by registering a component with the same name before the starter:\n\n```javascript\nnew Context([\n  { name: 'errorHandlerMiddleware', Reference: MyErrorHandler, scope: 'singleton' },\n  ...expressStarter(),\n])\n```\n\n## Configuration\n\n| Key | Default | Description |\n|---|---|---|\n| `server.port` | `3000` | Port to listen on |\n| `server.host` | `0.0.0.0` | Host to bind |\n| `middleware.requestLogger.enabled` | `true` | Enable request logging |\n| `middleware.errorHandler.enabled` | `true` | Enable error handler |\n| `middleware.notFound.enabled` | `true` | Enable 404 handler |\n\n## Testing\n\nUse `supertest` and `expressAdapter.app` to test without binding a port:\n\n```javascript\nimport supertest from 'supertest';\nimport { expressStarter, ExpressAdapter } from '@alt-javascript/boot-express';\n\nconst appCtx = /* boot context with run: false */;\nconst app = appCtx.get('expressAdapter').app;\n\nconst res = await supertest(app).get('/todos');\nassert.equal(res.status, 200);\n```\n\n## Spring Attribution\n\nThe `__routes` convention maps to Spring MVC's `@RequestMapping` / `@GetMapping`. The `static __middleware = { order: N }` convention maps to Spring Security's `Filter` + `FilterRegistrationBean(setOrder(n))`. `expressStarter()` maps to a Spring Boot auto-configuration class.\n\n## License\n\nMIT\n","readmeFilename":"README.md"}