{"ref":"artifact:mubuntu-cap-handler-framework","page":"/artifacts/mubuntu-cap-handler-framework","json":"/artifacts/mubuntu-cap-handler-framework.json","generated":"2026-10-26","drafted_with_ai":true,"entity":{"id":"mubuntu-cap-handler-framework","name":"cap-handler-framework","artifact_type":"cds-plugin","ecosystem":"cap","domain":"developer-experience","origin_ring":"independent","description":{"one_line":"Convention-based handler layer for CAP: methods named beforeCreate, onRead or afterUpdate are mapped automatically, with the draft lifecycle given its own explicit hooks rather than folded into the active-entity ones.","short":"Convention-based handler layer for CAP with draft lifecycle hooks","what_it_solves":"NEW, PATCH, EDIT, SAVE and DISCARD get separate hooks from the active entity events, which is the distinction hand-written handlers most often collapse. Bound and unbound operations are named apart, several services are supported in one project, and a CDS plugin regenerates handlers/index.ts on cds watch without a reload loop."},"links":{"npm":"https://www.npmjs.com/package/cap-handler-framework","repo":"https://github.com/Mubuntu/cap-handler-framework"},"identity":{"author":"Mubuntu","license":"MIT"},"compat":{"runtimes":["node"],"cds_range":"^7 || ^8 || ^9","typed":true},"type_properties":{"distribution":{"value":["npm"],"sources":[{"url":"https://github.com/Mubuntu/cap-handler-framework","title":"cap-handler-framework — README","checked":"2026-10-18","quote":"npm install cap-handler-framework"}]}},"provides":["capability:draft-handling",{"capability":"capability:typescript-patterns","what_it_does":"Binds handlers from method names rather than annotations: a class extending BaseHandler is matched by methods called beforeCreate, onRead or afterUpdate, and the plugin generates the handlers/index.ts the service's registerHandlers call reads, so adding a handler file needs no edit elsewhere. The draft events get hooks of their own, kept apart from the active-entity ones, and external services and utilities are passed into the handlers as shared context.","facets":[{"key":"handler_binding","value":["method names"],"source":{"url":"https://github.com/Mubuntu/cap-handler-framework","title":"Mubuntu/cap-handler-framework — README, Features","checked":"2026-10-15","quote":"Convention-based — auto-maps methods like `beforeCreate`, `onRead`, `afterUpdate`"}},{"key":"dependency_injection","value":true,"source":{"url":"https://github.com/Mubuntu/cap-handler-framework","title":"Mubuntu/cap-handler-framework — README, Features","checked":"2026-10-15","quote":"Dependency injection — shared context for external services and utilities"}},{"key":"draft_events","value":true,"source":{"url":"https://github.com/Mubuntu/cap-handler-framework","title":"Mubuntu/cap-handler-framework — README, Features","checked":"2026-10-15","quote":"Correct draft lifecycle — explicit hooks for NEW/PATCH/EDIT/SAVE/DISCARD, separated from active entity hooks"}}],"sources":[{"url":"https://github.com/Mubuntu/cap-handler-framework","title":"Mubuntu/cap-handler-framework — README","checked":"2026-10-15","quote":"Handler framework for SAP CAP applications — convention-based, TypeScript-first, draft-aware."},{"url":"https://github.com/Mubuntu/cap-handler-framework","title":"Mubuntu/cap-handler-framework — README, Features, the generated index","checked":"2026-10-15","quote":"Auto-generation — CDS plugin generates `handlers/index.ts` automatically"}]}],"provenance":{"discovered_via":[{"source":"source:npm","channel":"keywords:cds"}],"first_seen":"2026-09-07"},"maintainers":["actor:mubuntu"],"contributors":["actor:mubuntu"],"history":[{"date":"2026-10-15","field":"provides[typescript-patterns]","from":"bare ref","to":"what_it_does and three facet values","reason":"The edge carried no sentence while the artifact's own description carried the detail. It now says what the package contributes to this capability — method names as the binding, the generated index the service reads, the separate draft hooks and the shared context — and states handler_binding, dependency_injection and draft_events on the README sentences they rest on. The layers facet is left unstated: the feature list read today names no layer above the handlers."}],"drafted_with_ai":true},"effective_normative_relations":[{"instrument":"instrument:sap-developer-license-3-2-cap","relation":"use-constrained-by","sections":["1","2","3"],"applies_when":"A cds-plugin is used with SAP CAP materials, or an artifact is explicitly identified as a CAP plugin or application.","note":"This is inherited applicability, not a licence verdict about the artifact itself. Review the agreement for the actual materials and use; an explicit artifact relationship to another revision takes precedence.","scope":{"kind":"artifact"},"sources":[{"url":"https://cap.cloud.sap/resources/license/developer-license-3_2_CAP.txt","title":"SAP Developer License Agreement 3.2 CAP","checked":"2026-09-16","quote":"documentation, plug-ins, templates, scripts and sample code, libraries, software development kits"}],"inherited_from":"cap-plugins-and-applications","relevant_capabilities":["agent-systems-access","async-processing","data-import-export","database-connectors","deployment","destinations","llm-integration","mcp-servers","plugin-authoring","replication","retrieval-augmented-generation","rfc-connectivity"]}],"readings":{"liveness":[{"label":"Maintenance","tier":"fair","evidence":"5 months since release"},{"label":"Continuity","tier":"fair","evidence":"one contributor, personally owned"},{"label":"Repository","tier":"good","evidence":"pushed 2026-06, not archived"}],"compatibility":[{"label":"Declared for","tier":"poor","evidence":"^7.0.0 || ^8.0.0 || ^9.0.0 — stops before cds 9"},{"label":"Survived majors","tier":"poor","evidence":"no release since @sap/cds 10 shipped (July 2026)"},{"label":"Maintainer's CI","tier":"fair","evidence":"no CI configured"}],"practice":[{"label":"Tests","tier":"poor","evidence":"none found in the tree"},{"label":"Docs","tier":"good","evidence":"docs/ with 11 pages, README 9 KB"},{"label":"Changelog","tier":"fair","evidence":"none in the repo"}],"reach":[{"value":2,"unit":"installs/week"},{"value":0,"unit":"watching"}]},"signals":{"crawled_at":"2026-10-26","latest_version":"1.2.2","majors":{"1":{"version":"1.0.0","date":"2026-03-11"}},"license":"MIT","first_release":"2026-03-11","last_release":"2026-06-10","releases":10,"cadence_days":1,"maintainers":1,"repository":"git+https://github.com/Mubuntu/cap-handler-framework.git","peer_cds":"^7.0.0 || ^8.0.0 || ^9.0.0","test_script":false,"types":true,"downloads_weekly":2,"stars":0,"forks":0,"open_issues":0,"archived":false,"pushed_at":"2026-06-10","license_spdx":null,"org_owned":false,"default_branch":"main","contributors":1,"tree_truncated":false,"test_files":0,"workflows":0,"other_ci":false,"readme_bytes":8801,"docs_files":11,"changelog":false,"license_file":false,"dts_files":1,"readme_path":"README.md","readme_sha":"8af7713928b9facb615759d5a373d574c6e07352","months_since_release":5,"dormant":false,"repository_directory":null,"created_at":"2026-06-09T08:25:53Z","first_commit":"2026-03-11","last_commit":"2026-06-10","commits":20,"contributors_since":"2026-06-09","dependencies":0,"node_engine":null,"downloads_monthly":20,"open_prs":0,"repo_read":"2026-10-26"},"release_notes":{"license":"MIT","quotable":true,"versions":[{"version":"1.2.2","date":"2026-06-10"},{"version":"1.2.1","date":"2026-06-09"},{"version":"1.2.0","date":"2026-05-22"},{"version":"1.1.2","date":"2026-04-08"},{"version":"1.1.1","date":"2026-03-17"},{"version":"1.1.0","date":"2026-03-12"},{"version":"1.0.3","date":"2026-03-11"},{"version":"1.0.2","date":"2026-03-11"},{"version":"1.0.1","date":"2026-03-11"},{"version":"1.0.0","date":"2026-03-11"}],"crawled_at":"2026-10-25"},"edges":{"maintainers":[{"ref":"actor:mubuntu","name":"Patrick frison","json":"/actors/mubuntu.json"}],"contributors":[{"ref":"actor:mubuntu","name":"Patrick frison","json":"/actors/mubuntu.json"}],"explained_by":[],"alternative_to_this":[],"needed_by":[],"available_via":[],"parts":[],"add_ons":[],"answered_through_parts":[]}}