{"ref":"artifact:mrbandler-cds-routing-handlers","page":"/artifacts/mrbandler-cds-routing-handlers","json":"/artifacts/mrbandler-cds-routing-handlers.json","generated":"2026-10-26","drafted_with_ai":true,"entity":{"id":"mrbandler-cds-routing-handlers","name":"cds-routing-handlers","artifact_type":"package","ecosystem":"cap","flavors":[{"key":"node","source":{"url":"https://github.com/mrbandler/cds-routing-handlers","title":"mrbandler/cds-routing-handlers — README","checked":"2026-09-13","quote":"$ npm install cds-routing-handlers"}}],"domain":"developer-experience","origin_ring":"independent","description":{"one_line":"Decorator-based routing of CAP service handlers in TypeScript, from before the core had an opinion — the framework the CDS-TS-Dispatcher post names as its unmaintained predecessor.","short":"Decorator-based routing of CAP service handlers in TypeScript"},"links":{"npm":"https://www.npmjs.com/package/cds-routing-handlers","repo":"https://github.com/mrbandler/cds-routing-handlers"},"type_properties":{"distribution":{"value":["npm"],"sources":[{"url":"https://github.com/mrbandler/cds-routing-handlers","title":"cds-routing-handlers — README","checked":"2026-10-18","quote":"npm install cds-routing-handlers"}]}},"provides":[{"capability":"capability:typescript-patterns","what_it_does":"Binds handlers from decorators, the earliest of the arrangements here to do so: @Handler marks a class for an entity and the method decorators beside it, @BeforeCreate, @OnRead and the rest, register what srv.before and srv.on would have. It stops at the handler layer — no layer below it is named — and the setup it asks for is the TypeScript decorator one, reflect-metadata imported and emitDecoratorMetadata and experimentalDecorators set in tsconfig.json.","facets":[{"key":"handler_binding","value":["decorators"],"source":{"url":"https://github.com/mrbandler/cds-routing-handlers","title":"mrbandler/cds-routing-handlers — README, Handler Decorators","checked":"2026-10-15","quote":"Class that is marked with this decorator is registered as a handler and its annotated methods are registered as actions. The entity parameter is used to differentiate and register the correct actions for the corresponding entity."}},{"key":"layers","value":["handlers"],"source":{"url":"https://github.com/mrbandler/cds-routing-handlers","title":"mrbandler/cds-routing-handlers — README","checked":"2026-10-15","quote":"Package to route and implement CDS handlers via a class based system in Typescript."}}],"sources":[{"url":"https://github.com/mrbandler/cds-routing-handlers","title":"mrbandler/cds-routing-handlers — README","checked":"2026-10-15","quote":"Package to route and implement CDS handlers via a class based system in Typescript."}]}],"provenance":{"discovered_via":[{"source":"source:npm"},{"source":"source:discover"}],"first_seen":"2026-09-02"},"maintainers":["actor:mrbandler"],"contributors":["actor:heneryhawk","actor:idschepe","actor:mrbandler"],"history":[{"date":"2026-09-08","field":"artifact_type","from":"cds-plugin","to":"package","reason":"Typed cds-plugin by placement, which defaults every candidate to that. It is not one."},{"date":"2026-09-08","field":"description.one_line","from":"Package to route and implement CDS handlers via a class based approach in Typescript.","to":"Decorator-based routing of CAP service handlers in TypeScript, from before the core had an opinion — the framework the CDS-TS-Dispatcher post names as its unmaintained predecessor.","reason":"Placement copied the package's own npm description. Replaced with a line written for this graph — what it does and where it sits — because an unattributed sentence is an unattributed claim."},{"date":"2026-10-15","field":"provides[typescript-patterns]","from":"bare ref","to":"what_it_does and two facet values","reason":"The edge carried no sentence. It now says what the package binds and where it stops, and states the handler_binding and layers values of the capability's comparison on the README sentences they rest on. No lifecycle field was added: the README read today carries no statement by its maintainer about the package's end, and the predecessor sentence in the one-liner is another author's reading, already attributed as such."}],"drafted_with_ai":true},"effective_normative_relations":[],"readings":{"liveness":[{"label":"Maintenance","tier":"poor","evidence":"52 months since release"},{"label":"Continuity","tier":"good","evidence":"4 contributors, 1 publisher"},{"label":"Repository","tier":"poor","evidence":"pushed 2022-12, not archived"}],"compatibility":[{"label":"Declared for","tier":"fair","evidence":"nothing declared"},{"label":"Survived majors","tier":"poor","evidence":"no release since @sap/cds 10 shipped (July 2026)"},{"label":"Maintainer's CI","tier":"fair","evidence":"workflows present, no completed run on the default branch"}],"practice":[{"label":"Tests","tier":"good","evidence":"11 test files"},{"label":"Docs","tier":"good","evidence":"README 29 KB"},{"label":"Changelog","tier":"fair","evidence":"none in the repo"}],"reach":[{"value":2655,"unit":"installs/week"},{"value":16,"unit":"watching"}]},"signals":{"crawled_at":"2026-10-26","latest_version":"3.0.7","majors":{"1":{"version":"1.0.0","date":"2019-11-22"},"2":{"version":"2.0.0","date":"2020-03-24"},"3":{"version":"3.0.0","date":"2020-09-11"}},"license":"MIT","first_release":"2019-11-22","last_release":"2022-07-10","releases":33,"cadence_days":95,"maintainers":1,"repository":"git+https://github.com/mrbandler/cds-routing-handlers.git","peer_cds":null,"test_script":false,"types":false,"downloads_weekly":2655,"stars":16,"forks":5,"open_issues":11,"archived":false,"pushed_at":"2022-12-15","license_spdx":"MIT","org_owned":false,"default_branch":"master","contributors":4,"tree_truncated":false,"test_files":11,"workflows":2,"other_ci":false,"readme_bytes":29884,"docs_files":0,"changelog":false,"license_file":true,"dts_files":0,"readme_path":"README.md","readme_sha":"4a464be6f01c0c3e5097a221d1baef5e7954b957","months_since_release":52,"dormant":true,"repository_directory":null,"dependencies":2,"node_engine":">=12.0.0","downloads_monthly":11899,"created_at":"2019-11-21T16:13:56Z","open_prs":5,"first_commit":"2019-11-21","last_commit":"2022-07-10","commits":183,"repo_read":"2026-10-26"},"release_notes":{"license":"MIT","quotable":true,"source":{"kind":"github-releases","url":"https://github.com/mrbandler/cds-routing-handlers/releases"},"format":"github-releases","releases":[{"version":"3.0.7","date":"2022-07-10","date_source":"github","heading":"v3.0.7","url":"https://github.com/mrbandler/cds-routing-handlers/releases/tag/v3.0.7","sections":[],"hash":"4f1404ff89794b55"},{"version":"3.0.6","date":"2021-12-30","date_source":"github","heading":"v3.0.6","url":"https://github.com/mrbandler/cds-routing-handlers/releases/tag/v3.0.6","sections":[],"hash":"e3b0c44298fc1c14"},{"version":"3.0.5","date":"2021-06-23","date_source":"github","heading":"v3.0.5","url":"https://github.com/mrbandler/cds-routing-handlers/releases/tag/v3.0.5","sections":[],"hash":"e3b0c44298fc1c14"},{"version":"3.0.4","date":"2021-06-21","date_source":"github","heading":"v3.0.4","url":"https://github.com/mrbandler/cds-routing-handlers/releases/tag/v3.0.4","sections":[],"hash":"e3b0c44298fc1c14"},{"version":"3.0.2","date":"2021-06-21","date_source":"github","heading":"v3.0.2","url":"https://github.com/mrbandler/cds-routing-handlers/releases/tag/v3.0.2","sections":[],"hash":"e3b0c44298fc1c14"},{"version":"3.0.1","date":"2021-06-21","date_source":"github","heading":"v3.0.1","url":"https://github.com/mrbandler/cds-routing-handlers/releases/tag/v3.0.1","sections":[],"hash":"e3b0c44298fc1c14"},{"version":"3.0.0","date":"2021-06-21","date_source":"github","heading":"v3.0.0","url":"https://github.com/mrbandler/cds-routing-handlers/releases/tag/v3.0.0","sections":[],"hash":"e3b0c44298fc1c14"}],"versions":[{"version":"3.0.7","date":"2022-07-10"},{"version":"3.0.6","date":"2021-12-30"},{"version":"3.0.5","date":"2021-06-23"},{"version":"3.0.4","date":"2021-01-14"},{"version":"3.0.3","date":"2020-09-27"},{"version":"3.0.1","date":"2020-09-12"},{"version":"3.0.0","date":"2020-09-11"},{"version":"2.1.9","date":"2020-06-08"},{"version":"2.1.8","date":"2020-06-03"},{"version":"2.1.3","date":"2020-05-18"},{"version":"2.1.2","date":"2020-05-18"},{"version":"2.1.1","date":"2020-03-25"},{"version":"2.1.0","date":"2020-03-25"},{"version":"2.0.0","date":"2020-03-24"},{"version":"1.2.8","date":"2020-03-04"},{"version":"1.2.7","date":"2020-02-11"},{"version":"1.2.6","date":"2020-01-21"},{"version":"1.2.5","date":"2020-01-17"},{"version":"1.2.4","date":"2019-12-27"},{"version":"1.2.3","date":"2019-12-26"},{"version":"1.2.2","date":"2019-12-12"},{"version":"1.2.1","date":"2019-12-12"},{"version":"1.2.0","date":"2019-12-12"},{"version":"1.1.3","date":"2019-12-11"},{"version":"1.1.2","date":"2019-12-11"},{"version":"1.1.1","date":"2019-12-10"},{"version":"1.1.0","date":"2019-12-10"},{"version":"1.0.5","date":"2019-11-22"},{"version":"1.0.4","date":"2019-11-22"},{"version":"1.0.3","date":"2019-11-22"},{"version":"1.0.2","date":"2019-11-22"},{"version":"1.0.1","date":"2019-11-22"},{"version":"1.0.0","date":"2019-11-22"}],"crawled_at":"2026-10-25"},"edges":{"maintainers":[{"ref":"actor:mrbandler","name":"mrbandler","json":"/actors/mrbandler.json"}],"contributors":[{"ref":"actor:idschepe","name":"iDschepe","json":"/actors/idschepe.json"},{"ref":"actor:mrbandler","name":"mrbandler","json":"/actors/mrbandler.json"},{"ref":"actor:heneryhawk","name":"Simon","json":"/actors/heneryhawk.json"}],"explained_by":[{"ref":"content:taking-cap-to-the-next-level-with-typescript","name":"Taking CAP to the next level - with TypeScript","json":"/content/taking-cap-to-the-next-level-with-typescript.json"}],"alternative_to_this":[],"needed_by":[],"available_via":[],"parts":[],"add_ons":[],"answered_through_parts":[]}}