{"ref":"artifact:tobiashofmann-off-stack-abap","page":"/artifacts/tobiashofmann-off-stack-abap","json":"/artifacts/tobiashofmann-off-stack-abap.json","generated":"2026-10-26","drafted_with_ai":true,"entity":{"id":"tobiashofmann-off-stack-abap","name":"off-stack-abap","artifact_type":"sample","ecosystem":"abap","domain":"developer-experience","origin_ring":"independent","use_as":"starting-point","description":{"one_line":"A demonstration of off-stack ABAP development: one class with an `add` method, linted by [abaplint](artifact:abaplint-abaplint), transpiled to JavaScript and run with its ABAP Unit tests on Node.js.","short":"Demonstration of off-stack ABAP development on Node.js","what_it_solves":"Runs the ABAP quality loop on a laptop with no ABAP system in it: `npm run lint` puts [abaplint](artifact:abaplint-abaplint) over `src/`, `npm run transpile` turns the class and its test class into JavaScript, and the ABAP Unit tests then execute as a Node.js program. The ABAP under test is one class with one method, `add`, returning the sum of two integers, so what the repository carries is the pipeline around it. `npm start` chains lint, transpile, test, coverage and documentation in one command and leaves five files behind: a JUnit XML unit report, an Allure report of the same run, `coverage/lcov.info` with an HTML report beside it, and the ABAP Doc comments as `docs/index.html`. What executes is the transpiled JavaScript, so the ABAP available to it is whatever the abaplint runtime and [open-abap](https://github.com/open-abap) implement, not what an application server would have supplied."},"links":{"repo":"https://github.com/tobiashofmann/off-stack-abap","issues":"https://github.com/tobiashofmann/off-stack-abap/issues"},"identity":{"license":"Apache-2.0"},"compat":{"runtimes":["node"]},"type_properties":{"form":{"value":"reference-application","sources":[{"url":"https://github.com/tobiashofmann/off-stack-abap","title":"off-stack-abap — README","checked":"2026-10-18","quote":"This repo serves as a demonstration for off-stack ABAP development."}]}},"source_available":true,"demonstrates":["capability:abap-static-analysis","capability:abap-unit-testing","capability:documentation"],"requires":[{"ref":"artifact:abaplint-abaplint","for":"the lint step, `npm run lint`, which reads the ABAP in src/ before anything is transpiled","requirement":"required","sources":[{"url":"https://github.com/tobiashofmann/off-stack-abap","title":"tobiashofmann/off-stack-abap — README","checked":"2026-09-22","quote":"The project depends on [abaplint](https://github.com/abaplint/abaplint) and [transpiler](https://github.com/abaplint/transpiler) as well as related work like [open-abap](https://github.com/open-abap)."},{"url":"https://raw.githubusercontent.com/tobiashofmann/off-stack-abap/main/package.json","title":"tobiashofmann/off-stack-abap — package.json, devDependencies","checked":"2026-09-22","quote":"\"@abaplint/cli\": \"^2.120.57\""}]},{"ref":"external:nodejs","for":"the runtime the transpiled ABAP and its unit tests execute on, and the runner for every npm script the README documents","requirement":"required","sources":[{"url":"https://github.com/tobiashofmann/off-stack-abap","title":"tobiashofmann/off-stack-abap — README","checked":"2026-09-22","quote":"The project is a Node.js app."},{"url":"https://github.com/tobiashofmann/off-stack-abap","title":"tobiashofmann/off-stack-abap — README, Getting Started","checked":"2026-09-22","quote":"Ensure that you have Node.js LTS installed."}]}],"maintainers":["actor:tobiashofmann"],"provenance":{"discovered_via":[{"source":"source:curator"}],"first_seen":"2026-09-22"},"drafted_with_ai":true,"contributors":["actor:tobiashofmann"]},"effective_normative_relations":[],"readings":{"liveness":[{"label":"Maintenance","tier":"unknown","evidence":"no release data"},{"label":"Continuity","tier":"fair","evidence":"one contributor, personally owned"},{"label":"Repository","tier":"good","evidence":"pushed 2026-10, not archived"}],"compatibility":[{"label":"Declared for","tier":"fair","evidence":"nothing declared"},{"label":"Survived majors","tier":"unknown","evidence":"not read on ABAP: its lines run side by side"},{"label":"Maintainer's CI","tier":"fair","evidence":"no CI configured"}],"practice":[{"label":"Tests","tier":"good","evidence":"4 test files"},{"label":"Docs","tier":"fair","evidence":"README 3 KB"},{"label":"Changelog","tier":"fair","evidence":"none in the repo"}],"reach":[{"value":null,"unit":"installs/week"},{"value":5,"unit":"watching"}]},"signals":{"crawled_at":"2026-10-24","npm":"not published under this name","stars":5,"forks":1,"open_issues":1,"archived":false,"pushed_at":"2026-10-20","license_spdx":"Apache-2.0","org_owned":false,"default_branch":"main","created_at":"2026-09-21T15:45:23Z","tree_truncated":false,"test_files":4,"workflows":0,"other_ci":false,"readme_bytes":2734,"docs_files":0,"changelog":false,"license_file":true,"dts_files":0,"first_commit":"2026-09-21","last_commit":"2026-10-20","commits":4,"contributors":1,"readme_path":"README.md","readme_sha":"b4d0ebf95edc3c7d696d198e73e47110965e4022","open_prs":1,"repo_read":"2026-10-24"},"edges":{"maintainers":[{"ref":"actor:tobiashofmann","name":"Tobias Hofmann","json":"/actors/tobiashofmann.json"}],"contributors":[{"ref":"actor:tobiashofmann","name":"Tobias Hofmann","json":"/actors/tobiashofmann.json"}],"explained_by":[],"alternative_to_this":[],"needed_by":[],"available_via":[],"parts":[],"add_ons":[],"answered_through_parts":[]}}