{"_id":"@abapify/adt-plugin-abapgit","_rev":"5-2c6e956bdf3a252acf8e2b0523b8f372","name":"@abapify/adt-plugin-abapgit","dist-tags":{"latest":"0.4.1"},"versions":{"0.0.0":{"name":"@abapify/adt-plugin-abapgit","version":"0.0.0","_id":"@abapify/adt-plugin-abapgit@0.0.0","maintainers":[{"name":"theplenkov-npm","email":"petr.plenkov@gmail.com"}],"dist":{"shasum":"d159f97c55af6fcce3ca06e02d78c9a04f7d9ed0","tarball":"https://registry.npmjs.org/@abapify/adt-plugin-abapgit/-/adt-plugin-abapgit-0.0.0.tgz","fileCount":2,"integrity":"sha512-H9GJqmJNnkSMbz2fx5ag5mOcZtYyeof8T+CXqFaLpZCvWe2GsxcO2KgrWUFapTVh5N7WU+hSaOw5wcvEhYOp+A==","signatures":[{"sig":"MEQCIGy1UgA2NUMRYLZCVdm7ZWl2yEqMIuM/bRNVsNu4DaasAiBvX2BvqVnBVLRHHF2zSpkWSiv4QMlCiMU274JG9nOTrQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":244},"_npmUser":{"name":"theplenkov-npm","email":"petr.plenkov@gmail.com"},"_npmVersion":"11.12.1","description":"Placeholder — real package is published via CI/CD (trusted publishing).","directories":{},"_nodeVersion":"24.10.0","_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/adt-plugin-abapgit_0.0.0_1776719506294_0.34577308475545854","host":"s3://npm-registry-packages-npm-production"}},"0.3.5":{"name":"@abapify/adt-plugin-abapgit","version":"0.3.5","license":"MIT","_id":"@abapify/adt-plugin-abapgit@0.3.5","maintainers":[{"name":"theplenkov-npm","email":"petr.plenkov@gmail.com"}],"homepage":"https://github.com/abapify/adt-cli/tree/main/packages/adt-plugin-abapgit#readme","bugs":{"url":"https://github.com/abapify/adt-cli/issues"},"nx":{"name":"adt-plugin-abapgit"},"dist":{"shasum":"170c71d5ff2fdf0204fac24f312f5fcee0496cdb","tarball":"https://registry.npmjs.org/@abapify/adt-plugin-abapgit/-/adt-plugin-abapgit-0.3.5.tgz","fileCount":29,"integrity":"sha512-HfmoUEiebfxNOS979yn+LwcwBzF5Kfor+z0MFlZTX6ptkPXF/mKfVnE/qJ32FA0EtWAZoNmhjnyxEs22i1Bb/A==","signatures":[{"sig":"MEYCIQCJpPMD0a4e1UvnUliFPrN6TRbZiXoRLPPm40WuHLYSwQIhANpy3dFptDAE1uehcWmK91a7O3ZimUH0zjD7Di8MhcjK","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@abapify%2fadt-plugin-abapgit@0.3.5","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":46867},"type":"module","types":"./dist/index.d.mts","exports":{".":"./dist/index.mjs","./package.json":"./package.json"},"gitHead":"185666fe6ccb304e7b08529eb376ec2493131a7a","_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:4ec0dae3-5c45-40b1-94b2-5b2fbc34d36f"}},"repository":{"url":"git+https://github.com/abapify/adt-cli.git","type":"git","directory":"packages/adt-plugin-abapgit"},"_npmVersion":"11.12.1","description":"[![version](https://img.shields.io/github/package-json/v/abapify/adt-cli?filename=packages/adt-plugin-abapgit/package.json)](https://github.com/abapify/adt-cli/pkgs/npm/%40abapify%2Fadt-plugin-abapgit)","directories":{},"_nodeVersion":"24.14.1","dependencies":{"@abapify/adk":"0.3.5","@abapify/acds":"0.3.5","@abapify/ts-xsd":"0.3.5","@abapify/adt-atc":"0.3.5","@abapify/adt-plugin":"0.3.5","@abapify/adt-schemas":"0.3.5"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/adt-plugin-abapgit_0.3.5_1776723679471_0.40772189061480235","host":"s3://npm-registry-packages-npm-production"}},"0.3.6":{"name":"@abapify/adt-plugin-abapgit","version":"0.3.6","license":"MIT","_id":"@abapify/adt-plugin-abapgit@0.3.6","maintainers":[{"name":"theplenkov-npm","email":"petr.plenkov@gmail.com"}],"homepage":"https://github.com/abapify/adt-cli/tree/main/packages/adt-plugin-abapgit#readme","bugs":{"url":"https://github.com/abapify/adt-cli/issues"},"nx":{"name":"adt-plugin-abapgit"},"dist":{"shasum":"0e87e9c8303d77960ba60aae30010dd5055fe020","tarball":"https://registry.npmjs.org/@abapify/adt-plugin-abapgit/-/adt-plugin-abapgit-0.3.6.tgz","fileCount":29,"integrity":"sha512-ENhe/TCCFL+fvFMIofO8O/+cE+jabpigNlTUnFVw/qoGhGjRsRgMG2eg6NbIIm2cMj1AoHU0JqVlnsYFDHVVPQ==","signatures":[{"sig":"MEYCIQCwDYPocq6wT5RfZ57lnCUHW0ft9zbpYij38+EeVwRz/AIhAMHKzI640zZExGJhxPXXDZmitqUuA9aZiYKZC0ihMNkH","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@abapify%2fadt-plugin-abapgit@0.3.6","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":46991},"type":"module","types":"./dist/index.d.mts","exports":{".":"./dist/index.mjs","./package.json":"./package.json"},"gitHead":"489b2b4ad7c2ea972f323d4c356997ac5962ba9e","_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:4ec0dae3-5c45-40b1-94b2-5b2fbc34d36f"}},"repository":{"url":"git+https://github.com/abapify/adt-cli.git","type":"git","directory":"packages/adt-plugin-abapgit"},"_npmVersion":"11.11.0","description":"abapGit serialization plugin for adt-cli — round-trips ADT objects to/from the abapGit on-disk format","directories":{},"_nodeVersion":"24.14.1","dependencies":{"@abapify/adk":"0.3.6","@abapify/acds":"0.3.6","@abapify/ts-xsd":"0.3.6","@abapify/adt-atc":"0.3.6","@abapify/adt-plugin":"0.3.6","@abapify/adt-schemas":"0.3.6"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/adt-plugin-abapgit_0.3.6_1776744825049_0.5943381412974655","host":"s3://npm-registry-packages-npm-production"}},"0.4.0":{"name":"@abapify/adt-plugin-abapgit","version":"0.4.0","license":"MIT","_id":"@abapify/adt-plugin-abapgit@0.4.0","maintainers":[{"name":"theplenkov-npm","email":"petr.plenkov@gmail.com"}],"homepage":"https://github.com/abapify/adt-cli/tree/main/packages/adt-plugin-abapgit#readme","bugs":{"url":"https://github.com/abapify/adt-cli/issues"},"nx":{"name":"adt-plugin-abapgit"},"dist":{"shasum":"a611da8bb7a41b7400338c0afb111fa4570aa655","tarball":"https://registry.npmjs.org/@abapify/adt-plugin-abapgit/-/adt-plugin-abapgit-0.4.0.tgz","fileCount":29,"integrity":"sha512-0dMZ922SotPBvUbJpBoKkQELcPOsVdbJ9dTO+DBYazM8OooqnXViMLRc2cE4dT0I1MCTq2l43cwvixzHV12Q1Q==","signatures":[{"sig":"MEUCIQCGak4crtSft9RSVoPm/mDrBT/g9sQLLihayspiCdilgQIgCq7cg/cSMSMNPic60watpkXU016oJsEjHzVAmrcsJrs=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@abapify%2fadt-plugin-abapgit@0.4.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":46991},"type":"module","types":"./dist/index.d.mts","exports":{".":"./dist/index.mjs","./package.json":"./package.json"},"gitHead":"81dc9eea47fe419e41d246f0ec212fa78570a489","_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:4ec0dae3-5c45-40b1-94b2-5b2fbc34d36f"}},"repository":{"url":"git+https://github.com/abapify/adt-cli.git","type":"git","directory":"packages/adt-plugin-abapgit"},"_npmVersion":"11.13.0","description":"abapGit serialization plugin for adt-cli — round-trips ADT objects to/from the abapGit on-disk format","directories":{},"_nodeVersion":"24.16.0","dependencies":{"@abapify/adk":"0.4.0","@abapify/acds":"0.4.0","@abapify/ts-xsd":"0.4.0","@abapify/adt-atc":"0.4.0","@abapify/adt-plugin":"0.4.0","@abapify/adt-schemas":"0.4.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/adt-plugin-abapgit_0.4.0_1780072666780_0.41005739088897863","host":"s3://npm-registry-packages-npm-production"}},"0.4.1":{"name":"@abapify/adt-plugin-abapgit","version":"0.4.1","license":"MIT","publishConfig":{"access":"public"},"type":"module","types":"./dist/index.d.mts","exports":{".":"./dist/index.mjs","./package.json":"./package.json"},"nx":{"name":"adt-plugin-abapgit"},"dependencies":{"@abapify/acds":"0.4.1","@abapify/adk":"0.4.1","@abapify/adt-atc":"0.4.1","@abapify/adt-plugin":"0.4.1","@abapify/adt-schemas":"0.4.1","@abapify/ts-xsd":"0.4.1"},"repository":{"type":"git","url":"git+https://github.com/abapify/adt-cli.git","directory":"packages/adt-plugin-abapgit"},"homepage":"https://github.com/abapify/adt-cli/tree/main/packages/adt-plugin-abapgit#readme","bugs":{"url":"https://github.com/abapify/adt-cli/issues"},"description":"abapGit serialization plugin for adt-cli — round-trips ADT objects to/from the abapGit on-disk format","gitHead":"9d3b996a5c760a8db67e28c4df3c30098bd29e4a","_id":"@abapify/adt-plugin-abapgit@0.4.1","_nodeVersion":"24.16.0","_npmVersion":"11.13.0","dist":{"integrity":"sha512-Bd7W4lfXoTZaxYG4YVy90xuHUvL0kpuO33vGwrJ+LsfX0ZRz6f1Oa3o5D8HkmvYjOYXH/GE+pmQjwyvjRRcy4Q==","shasum":"e628640325ef0905e67467f3e6abb1758f254115","tarball":"https://registry.npmjs.org/@abapify/adt-plugin-abapgit/-/adt-plugin-abapgit-0.4.1.tgz","fileCount":33,"unpackedSize":430670,"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@abapify%2fadt-plugin-abapgit@0.4.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIQCQbZGYZgLzJi+sbO8Y1jmoCLCDB0VFBov5xY6bvsXMigIgezfT4hmfnvKNAMLwLf9CNpQ2tG2LVCaAv4D7z6OwtNY="}]},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:4ec0dae3-5c45-40b1-94b2-5b2fbc34d36f"}},"directories":{},"maintainers":[{"name":"theplenkov-npm","email":"petr.plenkov@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/adt-plugin-abapgit_0.4.1_1780074950631_0.10133751446540762"},"_hasShrinkwrap":false}},"time":{"created":"2026-04-20T21:11:46.173Z","modified":"2026-05-29T17:15:51.028Z","0.0.0":"2026-04-20T21:11:46.450Z","0.3.5":"2026-04-20T22:21:19.618Z","0.3.6":"2026-04-21T04:13:45.195Z","0.4.0":"2026-05-29T16:37:46.919Z","0.4.1":"2026-05-29T17:15:50.762Z"},"bugs":{"url":"https://github.com/abapify/adt-cli/issues"},"license":"MIT","homepage":"https://github.com/abapify/adt-cli/tree/main/packages/adt-plugin-abapgit#readme","repository":{"type":"git","url":"git+https://github.com/abapify/adt-cli.git","directory":"packages/adt-plugin-abapgit"},"description":"abapGit serialization plugin for adt-cli — round-trips ADT objects to/from the abapGit on-disk format","maintainers":[{"name":"theplenkov-npm","email":"petr.plenkov@gmail.com"}],"readme":"# @abapify/adt-plugin-abapgit\n\n[![version](https://img.shields.io/github/package-json/v/abapify/adt-cli?filename=packages/adt-plugin-abapgit/package.json)](https://github.com/abapify/adt-cli/pkgs/npm/%40abapify%2Fadt-plugin-abapgit)\n\nabapGit format plugin for ADT — serializes ABAP objects to Git-compatible XML/ABAP files.\n\n## Architecture Overview\n\n```\n┌─────────────────────────────────────────────────────────────────────┐\n│                        adt-plugin-abapgit                           │\n├─────────────────────────────────────────────────────────────────────┤\n│  XSD Schemas (xsd/)          →  ts-xsd codegen  →  TypeScript types │\n│  (XML structure definition)     (build time)       + parser/builder │\n├─────────────────────────────────────────────────────────────────────┤\n│  Object Handlers (handlers/)                                        │\n│  ┌─────────┐ ┌─────────┐ ┌─────────┐ ┌─────────┐ ┌─────────┐       │\n│  │  CLAS   │ │  INTF   │ │  DEVC   │ │  DTEL   │ │  DOMA   │       │\n│  │ handler │ │ handler │ │ handler │ │ handler │ │ handler │       │\n│  └────┬────┘ └────┬────┘ └────┬────┘ └────┬────┘ └────┬────┘       │\n│       └──────────┬┴──────────┬┴──────────┬┴──────────┘             │\n│                  ▼           ▼           ▼                          │\n│            createHandler (factory)                                  │\n│            - Auto-registration                                      │\n│            - Default serialize logic                                │\n│            - File naming conventions                                │\n├─────────────────────────────────────────────────────────────────────┤\n│  ADK Facade (@abapify/adk)                                          │\n│  - AdkClass, AdkInterface, AdkPackage...                            │\n│  - Client-agnostic object model                                     │\n│  - Source code retrieval via getSource()/getIncludeSource()         │\n└─────────────────────────────────────────────────────────────────────┘\n```\n\n## Key Design Decisions\n\n### 1. XSD Schemas as Single Source of Truth\n\n**Why XSD?**\n\n- XML Schema Definition (XSD) is the **industry standard** for XML structure validation\n- Can be used **outside our tools** (e.g., `xmllint --schema intf.xsd file.xml`)\n- Provides **formal contract** for abapGit XML format\n- Enables **automated validation** in CI/CD pipelines\n\n```bash\n# Validate any abapGit XML file against our schema\nxmllint --schema xsd/intf.xsd myinterface.intf.xml --noout\n```\n\n### 2. ts-xsd for Type-Safe XML Handling\n\n**Why ts-xsd?**\n\nUnlike typical XML codegen tools that only generate types, `ts-xsd` provides:\n\n- **TypeScript types** with full type inference\n- **XML parser** that returns typed objects\n- **XML builder** that accepts typed objects\n- **Schema object** for runtime validation\n\n```typescript\n// Generated from XSD - fully typed parse/build\nimport { intf } from './schemas/generated';\n\nconst data = intf.parse(xmlString); // → AbapGitIntf (typed)\nconst xml = intf.build(data); // → string (valid XML)\n```\n\n### 3. ADK as Client-Agnostic Facade\n\n**Why not implement ADT client features in the plugin?**\n\nThe plugin **only consumes** the ADK facade:\n\n- ADK handles all SAP communication details\n- Plugin focuses purely on **serialization format**\n- Same plugin works with any ADT client implementation\n- Clear separation of concerns\n\n```typescript\n// Plugin receives ADK objects, doesn't care how they were fetched\ngetSources: (cls) =>\n  cls.includes.map((inc) => ({\n    suffix: ABAPGIT_SUFFIX[inc.includeType],\n    content: cls.getIncludeSource(inc.includeType), // ADK handles this\n  }));\n```\n\n### 4. Handlers Don't Touch File System\n\n**Why delegate file operations to base class?**\n\nObject handlers **only define mappings**:\n\n- `toAbapGit()` - ADK data → abapGit XML structure\n- `getSource()` / `getSources()` - which source files to create\n\nThe `createHandler` factory handles:\n\n- File creation with correct naming\n- XML building with proper envelope\n- Promise resolution for async sources\n- Empty content filtering\n\n## Supported Object Types\n\n| Type | Status | Handler   | Notes                                                                 |\n| ---- | ------ | --------- | --------------------------------------------------------------------- |\n| CLAS | ✅     | `clas.ts` | Multiple includes (main, locals_def, locals_imp, testclasses, macros) |\n| INTF | ✅     | `intf.ts` | Single source file                                                    |\n| DEVC | ✅     | `devc.ts` | Fixed filename `package.devc.xml`                                     |\n| DTEL | ✅     | `dtel.ts` | Metadata only (no source)                                             |\n| DOMA | ✅     | `doma.ts` | Custom serialize for fixed values                                     |\n\n## File Structure\n\n```\nsrc/\n├── zcl_example.clas.abap              # Main class source\n├── zcl_example.clas.locals_def.abap   # Local type definitions\n├── zcl_example.clas.locals_imp.abap   # Local implementations\n├── zcl_example.clas.testclasses.abap  # Test classes\n├── zcl_example.clas.xml               # Class metadata\n├── zif_example.intf.abap              # Interface source\n├── zif_example.intf.xml               # Interface metadata\n├── ztest_dtel.dtel.xml                # Data element (no source)\n├── ztest_doma.doma.xml                # Domain (no source)\n└── package.devc.xml                   # Package definition\n```\n\n## Development\n\n### Building\n\n```bash\nnpx nx build adt-plugin-abapgit\n```\n\n### Testing\n\n```bash\nnpx nx test adt-plugin-abapgit\n```\n\n### Regenerating Schemas\n\nAfter modifying XSD files:\n\n```bash\nnpx nx codegen adt-plugin-abapgit\n```\n\n## Contributing\n\nSee [CONTRIBUTING.md](./CONTRIBUTING.md) for detailed guidelines on:\n\n- Adding new object type support\n- XSD schema conventions\n- Handler implementation patterns\n- Testing requirements\n\n## See Also\n\n- [abapGit Documentation](https://docs.abapgit.org/)\n- [@abapify/adt-plugin](../adt-plugin/README.md) - Plugin interface\n- [@abapify/adk](../adk/README.md) - ABAP Development Kit\n","readmeFilename":"README.md"}