@abapify/adt-plugin-gcts 0.4.28 → 0.4.29
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.d.mts +2 -0
- package/dist/index.d.mts.map +1 -1
- package/dist/index.mjs +95 -32
- package/dist/index.mjs.map +1 -1
- package/package.json +3 -3
package/dist/index.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.mjs","names":[],"sources":["../src/lib/format/filename.ts","../src/lib/aff/schemas.ts","../src/lib/aff/generic.ts","../src/lib/handlers/base.ts","../src/lib/handlers/objects/clas.ts","../src/lib/handlers/objects/intf.ts","../src/lib/handlers/objects/prog.ts","../src/lib/handlers/objects/devc.ts","../src/lib/handlers/objects/doma.ts","../src/lib/handlers/objects/dtel.ts","../src/lib/handlers/objects/tabl.ts","../src/lib/handlers/objects/ttyp.ts","../src/lib/handlers/objects/fugr.ts","../src/lib/handlers/objects/ddls.ts","../src/lib/handlers/objects/dcls.ts","../src/lib/handlers/objects/bdef.ts","../src/lib/handlers/objects/srvd.ts","../src/lib/handlers/objects/srvb.ts","../src/lib/handlers/objects/msag.ts","../src/lib/handlers/objects/wave2-generic.ts","../src/lib/format/gcts-format.ts","../src/lib/deserializer.ts","../src/lib/gcts-plugin.ts","../src/schemas/generated/advc-v1.ts","../src/schemas/generated/aifa-v1.ts","../src/schemas/generated/aifd-v1.ts","../src/schemas/generated/aiff-v1.ts","../src/schemas/generated/aifi-v1.ts","../src/schemas/generated/aifn-v1.ts","../src/schemas/generated/aifp-v1.ts","../src/schemas/generated/aifr-v1.ts","../src/schemas/generated/aobj-v1.ts","../src/schemas/generated/apic-v1.ts","../src/schemas/generated/aplo-v1.ts","../src/schemas/generated/apob-v1.ts","../src/schemas/generated/bdef-v1.ts","../src/schemas/generated/bgqc-v1.ts","../src/schemas/generated/cdbo-v1.ts","../src/schemas/generated/cfdf-v1.ts","../src/schemas/generated/cfdf-v2.ts","../src/schemas/generated/chdo-v1.ts","../src/schemas/generated/chkc-v1.ts","../src/schemas/generated/chko-v1.ts","../src/schemas/generated/chkv-v1.ts","../src/schemas/generated/clas-v1.ts","../src/schemas/generated/cota-v1.ts","../src/schemas/generated/csnm-v1.ts","../src/schemas/generated/dcat-v1.ts","../src/schemas/generated/dcls-v1.ts","../src/schemas/generated/ddla-v1.ts","../src/schemas/generated/ddls-v1.ts","../src/schemas/generated/ddlx-v1.ts","../src/schemas/generated/desd-v1.ts","../src/schemas/generated/dmon-v1.ts","../src/schemas/generated/dobj-v1.ts","../src/schemas/generated/docu-v1.ts","../src/schemas/generated/doma-v1.ts","../src/schemas/generated/dras-v1.ts","../src/schemas/generated/drty-v1.ts","../src/schemas/generated/dsfd-v1.ts","../src/schemas/generated/dsfi-v1.ts","../src/schemas/generated/dtdc-v1.ts","../src/schemas/generated/dteb-v1.ts","../src/schemas/generated/dtel-v1.ts","../src/schemas/generated/dtix-v1.ts","../src/schemas/generated/dtsc-v1.ts","../src/schemas/generated/edcc-v1.ts","../src/schemas/generated/edck-v1.ts","../src/schemas/generated/edcr-v1.ts","../src/schemas/generated/edoi-v1.ts","../src/schemas/generated/eeec-v1.ts","../src/schemas/generated/enho-v1.ts","../src/schemas/generated/enhs-v1.ts","../src/schemas/generated/enqu-v1.ts","../src/schemas/generated/evtb-v1.ts","../src/schemas/generated/evto-v1.ts","../src/schemas/generated/fugr-v1.ts","../src/schemas/generated/func-v1.ts","../src/schemas/generated/gsmp-v1.ts","../src/schemas/generated/http-v1.ts","../src/schemas/generated/ilmb-v1.ts","../src/schemas/generated/intf-v1.ts","../src/schemas/generated/intm-v1.ts","../src/schemas/generated/ints-v1.ts","../src/schemas/generated/iwng-v1.ts","../src/schemas/generated/msag-v1.ts","../src/schemas/generated/nont-v1.ts","../src/schemas/generated/nrob-v1.ts","../src/schemas/generated/ntta-v1.ts","../src/schemas/generated/ntty-v1.ts","../src/schemas/generated/prog-v1.ts","../src/schemas/generated/reps-v1.ts","../src/schemas/generated/ront-v1.ts","../src/schemas/generated/rvbc-v1.ts","../src/schemas/generated/saia-v1.ts","../src/schemas/generated/sajc-v1.ts","../src/schemas/generated/sajt-v1.ts","../src/schemas/generated/scp1-v1.ts","../src/schemas/generated/sfpf-v1.ts","../src/schemas/generated/siad-v1.ts","../src/schemas/generated/sito-v1.ts","../src/schemas/generated/sito-v2.ts","../src/schemas/generated/smbc-v1.ts","../src/schemas/generated/smtg-v1.ts","../src/schemas/generated/sprv-v1.ts","../src/schemas/generated/srvb-v1.ts","../src/schemas/generated/srvc-v1.ts","../src/schemas/generated/srvd-v1.ts","../src/schemas/generated/suco-v1.ts","../src/schemas/generated/susi-v1.ts","../src/schemas/generated/swcr-v1.ts","../src/schemas/generated/sxtg-v1.ts","../src/schemas/generated/uiad-v1.ts","../src/schemas/generated/uiad-v2.ts","../src/schemas/generated/uipg-v1.ts","../src/schemas/generated/uist-v1.ts","../src/schemas/generated/index.ts","../src/index.ts"],"sourcesContent":["/**\n * gCTS / AFF filename conventions.\n *\n * gCTS and AFF both use the pattern `<name>.<type>.<ext>` (same as abapGit),\n * but with JSON for metadata instead of XML and with CDS-specific\n * extensions (`.acds`, `.asddls`, ...) for CDS sources.\n *\n * Packages use a fixed `package.devc.json` filename (mirrors abapGit's\n * `package.devc.xml`).\n *\n * This module is independent of any particular handler — it exists so that\n * consumers (diff, round-trip tests, deserializers) can map filenames to\n * (name, type) pairs without pulling in the object-type registry.\n */\n\nimport type { ParsedFormatFilename } from '@abapify/adt-plugin';\n\n/**\n * Extension used for the source-file part of each object type.\n *\n * Order of precedence: CDS types use AFF's `.asddls` / `.asdcls`; everything\n * else uses `.abap`. Metadata is always `.json`.\n */\nconst TYPE_TO_SOURCE_EXT: Record<string, string> = {\n CLAS: 'abap',\n INTF: 'abap',\n PROG: 'abap',\n FUGR: 'abap',\n FUNC: 'abap',\n DDLS: 'asddls',\n DCLS: 'asdcls',\n BDEF: 'abdl',\n SRVD: 'acds',\n // AFF-`.acds` CDS-family sources (upstream examples are uniform:\n // `<name>.<type>.acds` for every CDS-bearing type).\n DDLA: 'acds',\n DDLX: 'acds',\n DTSC: 'acds',\n DTIX: 'acds',\n DTEB: 'acds',\n DTDC: 'acds',\n DRAS: 'acds',\n DRTY: 'acds',\n DSFD: 'acds',\n CSNM: 'csn',\n SFPF: 'xdp',\n XSLT: 'xml',\n};\n\n/** Metadata extension for all AFF/gCTS objects. */\nexport const METADATA_EXTENSION = 'json';\n\n/** Fixed filename for package metadata (AFF / gCTS convention). */\nexport const PACKAGE_FILENAME = 'package.devc.json';\n\n/**\n * AFF filename-safe form of an object name: namespaces encode as brackets\n * (`/NMSPC/CL_OBJECT` → `(nmspc)cl_object`, AFF spec §file-names) so a\n * `/` in the name can never split the file into nested directories.\n */\nexport function affName(name: string): string {\n return name.toLowerCase().replace(/^\\/([^/]+)\\//, '($1)');\n}\n\n/**\n * Build the AFF/gCTS on-disk filename for an object.\n *\n * @param name Object name (case preserved — AFF normalises to lowercase)\n * @param type ABAP object type code (CLAS, INTF, ...)\n * @param kind `\"metadata\"` (default) or `\"source\"`.\n * @param suffix Optional sub-include suffix (e.g. `locals_def` for CLAS,\n * or `z_func.func` for a LIMU sub-object).\n * @param ext Source-file extension override — defaults to the type's\n * extension (`abap`, `acds`, …). Needed for companions whose\n * extension differs from the type's main source (`.json`\n * LIMU metadata, `.properties` texts).\n */\nexport function gctsFilename(\n name: string,\n type: string,\n kind: 'metadata' | 'source' = 'metadata',\n suffix?: string,\n ext?: string,\n): string {\n const base = affName(name);\n const typeLower = mainType(type).toLowerCase();\n if (kind === 'metadata') {\n return `${base}.${typeLower}.${METADATA_EXTENSION}`;\n }\n const sourceExt =\n ext ?? TYPE_TO_SOURCE_EXT[mainType(type).toUpperCase()] ?? 'abap';\n return suffix\n ? `${base}.${typeLower}.${suffix}.${sourceExt}`\n : `${base}.${typeLower}.${sourceExt}`;\n}\n\n/**\n * LIMU sub-object type codes (AFF spec §file-names): they never appear as\n * root objects — a `{parent}.{ptype}.{sub}.{stype}.{ext}` filename routes to\n * the parent object with `{sub}.{stype}` as its suffix.\n */\nexport const LIMU_SUBTYPES = new Set([\n 'func',\n 'reps',\n 'cpub',\n 'cpro',\n 'cprt',\n 'cpri',\n 'sotr',\n 'sotu',\n]);\n\n/**\n * The default source-file extension for an object type (`abap` fallback) —\n * used to decide whether a source-key suffix carries an explicit extension.\n */\nexport function gctsSourceExt(type: string): string {\n return TYPE_TO_SOURCE_EXT[mainType(type).toUpperCase()] ?? 'abap';\n}\n\n/** Source/companion extensions recognised by the spec file-name grammar. */\nconst KNOWN_SOURCE_EXTS = new Set([\n 'abap',\n 'asddls',\n 'asdcls',\n 'abdl',\n 'acds',\n 'csn',\n 'xdp',\n 'ddic',\n 'properties',\n 'xml',\n]);\n\n/** Every file extension the spec grammar can carry after the suffix. */\nconst KNOWN_FILE_EXTS = new Set([...KNOWN_SOURCE_EXTS, METADATA_EXTENSION]);\n\n/**\n * Encode a companion file as a source-map key: bare `suffix` when the file\n * uses the type's default source extension, `{suffix}.{ext}` when it does\n * not (e.g. `z_func.func.json` → LIMU metadata, `texts.en.properties` →\n * translated texts). Symmetric with `splitSourceKey`.\n */\nexport function sourceKey(type: string, suffix: string, ext: string): string {\n return !ext || ext === gctsSourceExt(type) ? suffix : `${suffix}.${ext}`;\n}\n\n/**\n * Inverse of `sourceKey`: splits a source-map key into the filename suffix\n * and an optional extension override (`undefined` → the type's default).\n */\nexport function splitSourceKey(key: string): {\n suffix?: string;\n ext?: string;\n} {\n if (key === 'main') return { suffix: undefined, ext: undefined };\n // Suffix-less companions with a non-default extension key as\n // `main.{ext}` (e.g. master texts `name.prog.properties`).\n if (key.startsWith('main.')) {\n const tail = key.slice(5);\n if (KNOWN_FILE_EXTS.has(tail)) return { suffix: undefined, ext: tail };\n }\n const dot = key.lastIndexOf('.');\n if (dot > 0 && KNOWN_FILE_EXTS.has(key.slice(dot + 1))) {\n return { suffix: key.slice(0, dot), ext: key.slice(dot + 1) };\n }\n return { suffix: key, ext: undefined };\n}\n\n/**\n * Parse an AFF/gCTS filename back into its components.\n *\n * Returns `undefined` if the filename does not look like a known AFF/gCTS\n * artefact — callers should skip unknown files (e.g. `README.md`).\n */\nexport function parseGctsFilename(\n filename: string,\n): ParsedFormatFilename | undefined {\n // Fixed package filename.\n if (filename === PACKAGE_FILENAME) {\n return { name: '', type: 'DEVC', extension: METADATA_EXTENSION };\n }\n\n const parts = filename.split('.');\n if (parts.length < 3) return undefined;\n\n const extension = parts.at(-1)!;\n if (extension === METADATA_EXTENSION) return parseMetadataName(parts);\n if (extension === 'properties') return parsePropertiesName(parts);\n return parseSourceName(parts, extension);\n}\n\n/**\n * `{name}.{type}.json`, plus the DOCU companion form\n * `{name}.{type}.docu.json` which belongs to the parent object.\n */\nfunction parseMetadataName(parts: string[]): ParsedFormatFilename {\n const docu = parts.at(-2) === 'docu' && parts.length >= 4;\n // `{parent}.{ptype}.{sub}.{stype}.json` — LIMU sub-object metadata is a\n // companion of the parent (`z_fugr.fugr.z_func.func.json`).\n const limu = parts.length >= 5 && LIMU_SUBTYPES.has(parts.at(-2)!);\n let offset = -2;\n if (docu) offset = -3;\n else if (limu) offset = -4;\n const parsed: ParsedFormatFilename = {\n name: parts.slice(0, offset).join('.'),\n type: parts.at(offset)!.toUpperCase(),\n extension: METADATA_EXTENSION,\n };\n if (docu) parsed.suffix = 'docu';\n else if (limu) parsed.suffix = `${parts.at(-3)}.${parts.at(-2)}`;\n return parsed;\n}\n\n/**\n * `.properties` text files have their own grammar:\n * {name}.{type}.properties — master (3 parts)\n * {name}.{type}.{lang}.properties — language (4 parts)\n * {name}.{type}.{content_type}.{lang}.properties — e.g. PROG\n * selections/headings/texts (5 parts)\n * The composite suffix (`de`, `texts.en`) stays opaque — handlers map\n * suffixes to source keys via `suffixToSourceKey`.\n */\nfunction parsePropertiesName(parts: string[]): ParsedFormatFilename {\n if (parts.length >= 5) {\n return {\n name: parts.slice(0, -4).join('.'),\n type: parts.at(-4)!.toUpperCase(),\n suffix: `${parts.at(-3)}.${parts.at(-2)}`,\n extension: 'properties',\n };\n }\n if (parts.length === 4) {\n return {\n name: parts.slice(0, -3).join('.'),\n type: parts.at(-3)!.toUpperCase(),\n suffix: parts.at(-2),\n extension: 'properties',\n };\n }\n return {\n name: parts.slice(0, -2).join('.'),\n type: parts.at(-2)!.toUpperCase(),\n extension: 'properties',\n };\n}\n\n/**\n * `{name}.{type}.{ext}` and `{name}.{type}.{suffix}.{ext}` source files —\n * a suffix is present iff there are ≥4 dot-segments.\n */\nfunction parseSourceName(\n parts: string[],\n extension: string,\n): ParsedFormatFilename | undefined {\n if (!KNOWN_SOURCE_EXTS.has(extension)) return undefined;\n // LIMU sub-object source: `{parent}.{ptype}.{sub}.{stype}.{ext}` —\n // the suffix carries `{sub}.{stype}` (e.g. `z_func.func`).\n if (parts.length >= 5 && LIMU_SUBTYPES.has(parts.at(-2)!)) {\n return {\n name: parts.slice(0, -4).join('.'),\n type: parts.at(-4)!.toUpperCase(),\n suffix: `${parts.at(-3)}.${parts.at(-2)}`,\n extension,\n };\n }\n if (parts.length >= 4) {\n return {\n name: parts.slice(0, -3).join('.'),\n type: parts.at(-3)!.toUpperCase(),\n suffix: parts.at(-2),\n extension,\n };\n }\n return {\n name: parts.slice(0, -2).join('.'),\n type: parts.at(-2)!.toUpperCase(),\n extension,\n };\n}\n\n/**\n * Translate an ADT object URI (e.g. `/sap/bc/adt/oo/classes/zcl_foo`) to\n * the AFF/gCTS on-disk path (e.g. `zcl_foo/zcl_foo.clas.json`).\n *\n * Matches the `adtUriToAbapGitPath` helper in the abapGit plugin.\n */\nexport function adtUriToGctsPath(uri: string): string | undefined {\n const ADT_PREFIX = '/sap/bc/adt/';\n if (!uri.startsWith(ADT_PREFIX)) return undefined;\n const tail = uri.slice(ADT_PREFIX.length);\n if (tail.length === 0) return undefined;\n\n // Common ADT URI → (type, name) table. Mirrors abapGit's mapping.\n const TABLE: Array<[RegExp, string]> = [\n [/^oo\\/classes\\/([^/]+)$/, 'CLAS'],\n [/^oo\\/interfaces\\/([^/]+)$/, 'INTF'],\n [/^programs\\/programs\\/([^/]+)$/, 'PROG'],\n [/^functions\\/groups\\/([^/]+)$/, 'FUGR'],\n [/^packages\\/([^/]+)$/, 'DEVC'],\n [/^ddic\\/domains\\/([^/]+)$/, 'DOMA'],\n [/^ddic\\/dataelements\\/([^/]+)$/, 'DTEL'],\n [/^ddic\\/structures\\/([^/]+)$/, 'TABL'],\n [/^ddic\\/tables\\/([^/]+)$/, 'TABL'],\n [/^ddic\\/tabletypes\\/([^/]+)$/, 'TTYP'],\n [/^ddic\\/ddl\\/sources\\/([^/]+)$/, 'DDLS'],\n [/^acm\\/dcls\\/sources\\/([^/]+)$/, 'DCLS'],\n ];\n\n for (const [pattern, type] of TABLE) {\n const m = pattern.exec(tail);\n if (m) {\n const name = m[1];\n if (type === 'DEVC') return `${name.toLowerCase()}/${PACKAGE_FILENAME}`;\n return `${name.toLowerCase()}/${gctsFilename(name, type)}`;\n }\n }\n\n return undefined;\n}\n\nfunction mainType(type: string): string {\n return type.split('/')[0];\n}\n","/**\n * AFF schema access over the `git_modules/abap-file-formats` submodule.\n *\n * The submodule pin (`.gitmodules`) is the provenance record — schemas and\n * examples are always read from it at the pinned upstream SHA. This module\n * has no workspace dependencies (ajv + node builtins only) so schema\n * conformance tests run without building the workspace.\n */\n\nimport { existsSync, readFileSync, readdirSync } from 'node:fs';\nimport { dirname, join, resolve, sep } from 'node:path';\nimport { fileURLToPath } from 'node:url';\nimport Ajv2020 from 'ajv/dist/2020.js';\nimport type { ValidateFunction } from 'ajv';\n\nconst SCHEMA_RE = /^([a-z0-9]+)-v(\\d+)\\.json$/;\n\n/**\n * Locate the AFF schema root. Published packages ship only `dist`, so the\n * bundled `aff-schemas/` copy (produced by the build) is tried first; the\n * `git_modules` submodule is the dev fallback. Returns `undefined` when\n * neither exists — callers degrade gracefully instead of breaking plugin\n * load on installs that lack the submodule.\n */\nfunction findAffRoot(): string | undefined {\n let dir = dirname(fileURLToPath(import.meta.url));\n for (let i = 0; i < 10; i++) {\n const bundled = join(dir, 'aff-schemas');\n if (existsSync(bundled)) return bundled;\n const submodule = join(dir, 'git_modules/abap-file-formats/file-formats');\n if (existsSync(submodule)) return submodule;\n dir = dirname(dir);\n }\n return undefined;\n}\n\nlet rootCache: string | undefined | null;\n/** Resolved AFF schema root, or `undefined` when unavailable. */\nexport function affRoot(): string | undefined {\n if (rootCache === undefined) rootCache = findAffRoot() ?? null;\n return rootCache ?? undefined;\n}\n\n/** All official AFF object types (directories in `file-formats/`). */\nexport function listAffTypes(): string[] {\n const root = affRoot();\n // nosemgrep\n return root\n ? readdirSync(root, { withFileTypes: true })\n .filter((e) => e.isDirectory())\n .map((e) => e.name)\n .sort((a, b) => a.localeCompare(b))\n : [];\n}\n\n/**\n * Reference to a schema-bearing AFF artefact: an object `type` code plus an\n * optional format `version` (defaults to the latest wherever it matters).\n */\nexport interface AffRef {\n type: string;\n version?: number;\n}\n\n/** Format versions available for a type, newest first. */\nexport function affVersions(ref: AffRef): number[] {\n const type = ref.type.toLowerCase();\n const root = affRoot();\n if (!root) return [];\n const dir = join(root, type);\n // nosemgrep\n const scoped = existsSync(dir) ? readdirSync(dir) : [];\n // Root-level loose schemas (`docu-v1.json`, shared `zif_aff_*` types)\n // nosemgrep\n const loose = readdirSync(root);\n // LIMU sub-object schemas nest under their parent's dir\n // (`fugr/func-v1.json`, `fugr/reps-v1.json`)\n const nested = readdirSync(root, { withFileTypes: true })\n .filter((e) => e.isDirectory() && e.name !== type)\n .flatMap((e) => {\n // nosemgrep\n try {\n return readdirSync(join(root, e.name));\n } catch {\n return [];\n }\n });\n return [\n ...new Set(\n [...scoped, ...loose, ...nested]\n .map((f) => SCHEMA_RE.exec(f))\n .filter((m): m is RegExpExecArray => !!m && m[1] === type)\n .map((m) => Number(m[2])),\n ),\n ].sort((a, b) => b - a);\n}\n\nexport function latestAffVersion(ref: AffRef): number | undefined {\n return affVersions(ref)[0];\n}\n\ninterface AffSchema {\n title: string;\n type: string;\n properties: Record<string, { const?: string; type?: string }>;\n required?: string[];\n [key: string]: unknown;\n}\n\ninterface SchemaQuery {\n root: string;\n type: string;\n version: number;\n}\n\n/** `<root>/<type>/<type>-vN.json` or root-level `<type>-vN.json` (docu). */\nfunction directSchemaFile(q: SchemaQuery): string | undefined {\n const stem = `${q.type}-v${q.version}.json`;\n for (const file of [join(q.root, q.type, stem), join(q.root, stem)]) {\n // nosemgrep\n if (existsSync(file)) return file;\n }\n return undefined;\n}\n\n/** LIMU sub-object schemas nest under their parent's dir (`fugr/func-v1.json`). */\nfunction nestedSchemaFile(q: SchemaQuery): string | undefined {\n for (const dir of listAffTypes()) {\n if (dir === q.type) continue;\n // nosemgrep\n const file = join(q.root, dir, `${q.type}-v${q.version}.json`);\n // nosemgrep\n if (existsSync(file)) return file;\n }\n return undefined;\n}\n\n/** First existing candidate path for a type+version schema, or none. */\nfunction findSchemaFile(q: SchemaQuery): string | undefined {\n return directSchemaFile(q) ?? nestedSchemaFile(q);\n}\n\nexport function affSchema(ref: AffRef): AffSchema {\n const type = ref.type.toLowerCase();\n const version = ref.version ?? latestAffVersion({ ...ref, type });\n if (!version) throw new Error(`No AFF schema for ${type}`);\n const root = affRoot();\n if (!root) throw new Error(`No AFF schema root available for ${type}`);\n const file = findSchemaFile({ root, type, version });\n if (!file) throw new Error(`No AFF schema ${type}-v${version} under ${root}`);\n // nosemgrep\n return JSON.parse(readFileSync(file, 'utf8')) as AffSchema;\n}\n\n/**\n * Top-level body properties of a type's schema (everything beyond the\n * mandatory `formatVersion`/`header` envelope), newest version by default.\n * Empty array for header-only types or when schemas are unavailable.\n */\nexport function affBodyProps(ref: AffRef): string[] {\n let schema: AffSchema;\n try {\n schema = affSchema(ref);\n } catch (error) {\n // Missing schemas degrade gracefully (plugin load must not break on\n // installs without the submodule); a corrupt schema file is a bug —\n // let it throw rather than silently dropping every body field.\n if (error instanceof Error && error.message.startsWith('No AFF schema'))\n return [];\n throw error;\n }\n return Object.keys(schema.properties ?? {}).filter(\n (p) => p !== 'formatVersion' && p !== 'header',\n );\n}\n\nexport function affHeaderProps(ref: AffRef): string[] {\n let schema: AffSchema;\n try {\n schema = affSchema(ref);\n } catch (error) {\n if (error instanceof Error && error.message.startsWith('No AFF schema'))\n return [];\n throw error;\n }\n const header = (schema.properties ?? {}).header;\n return Object.keys(\n header && typeof header === 'object' && header.properties\n ? header.properties\n : {},\n );\n}\n\nconst ajv = new Ajv2020({ allErrors: true, strict: false });\nconst validators = new Map<string, ValidateFunction>();\n\n/** Resolve a usable schema version, or `undefined` when none exists. */\nfunction resolveAffVersion(type: string, v?: number): number | undefined {\n const resolved = v ?? latestAffVersion({ type });\n return resolved !== undefined && Number.isInteger(resolved) && resolved > 0\n ? resolved\n : undefined;\n}\n\n/** Compile (and cache) the AJV validator for a type+version. */\nfunction getValidator(\n type: string,\n version: number,\n): { validator?: ValidateFunction; error?: string } {\n const key = `${type}-v${version}`;\n const cached = validators.get(key);\n if (cached) return { validator: cached };\n try {\n const validator = ajv.compile(affSchema({ type, version }));\n validators.set(key, validator);\n return { validator };\n } catch (e) {\n return { error: e instanceof Error ? e.message : String(e) };\n }\n}\n\n/** Validate AFF JSON against the official schema for `ref`. */\nexport function affValidate(\n ref: AffRef,\n json: unknown,\n): { valid: boolean; errors: string[] } {\n const type = ref.type.toLowerCase();\n const v = resolveAffVersion(type, ref.version);\n if (v === undefined) {\n return { valid: false, errors: [`No AFF schema for type \"${type}\"`] };\n }\n const { validator, error } = getValidator(type, v);\n if (!validator) {\n return { valid: false, errors: [error ?? 'schema compile failed'] };\n }\n const valid = validator(json);\n return {\n valid: !!valid,\n errors: (validator.errors ?? []).map((e) =>\n `${e.instancePath} ${e.message ?? ''}`.trim(),\n ),\n };\n}\n\n/**\n * Example JSON files shipped with a type — recursively, relative paths.\n * Companion files (`.docu.json`, LIMU sub-objects like `.reps.json`) are\n * included; callers match each to its schema (see `schemaTargetForExample`).\n */\nexport function affExamples(ref: AffRef): string[] {\n const root = affRoot();\n if (!root) return [];\n const dir = join(root, ref.type.toLowerCase(), 'examples');\n if (!existsSync(dir)) return [];\n const out: string[] = [];\n const walk = (sub: string): void => {\n // nosemgrep\n for (const e of readdirSync(join(dir, sub), { withFileTypes: true })) {\n const rel = sub ? `${sub}/${e.name}` : e.name;\n if (e.isDirectory()) walk(rel);\n else if (e.name.endsWith('.json')) out.push(rel);\n }\n };\n walk('');\n return out.sort((a, b) => a.localeCompare(b));\n}\n\n/**\n * Pick the schema a given example file should validate against.\n *\n * - `z_x.doma.docu.json` → the `docu` schema (companion documentation)\n * - otherwise → the type's own schema at the example's `formatVersion`\n */\nexport function schemaTargetForExample(\n ref: AffRef,\n filename: string,\n json: unknown,\n): { type: string; version?: number; companion: boolean } {\n if (/\\.docu\\.json$/i.test(filename) && affVersions({ type: 'docu' }).length)\n return { type: 'docu', companion: true };\n const declared = (json as { formatVersion?: string | number } | undefined)\n ?.formatVersion;\n const version = declared !== undefined ? Number(declared) : undefined;\n return { type: ref.type, version, companion: false };\n}\n\nexport function readAffExample(\n ref: AffRef,\n rel: string,\n): Record<string, unknown> {\n const root = affRoot();\n if (!root) throw new Error('No AFF schema root available');\n const examplesDir = resolve(root, ref.type.toLowerCase(), 'examples');\n const file = resolve(examplesDir, rel);\n if (file !== examplesDir && !file.startsWith(examplesDir + sep)) {\n throw new Error(`Example path escapes examples dir: ${rel}`);\n }\n // nosemgrep\n return JSON.parse(readFileSync(file, 'utf8')) as Record<string, unknown>;\n}\n","/**\n * Schema-aware generic AFF emit/parse — zero workspace deps.\n *\n * `genericToMetadata` builds the `{formatVersion, header}` envelope for a\n * type (version pinned to its latest schema) plus only the schema-\n * declared top-level body properties the payload carries — arbitrary\n * payload fields are NOT copied. `genericFromMetadata` is its inverse:\n * header → ADK projection, body fields spread into the payload so they\n * land back on `obj.data` — enabling metadata round-trips for all\n * wave2-registered types.\n */\n\nimport { affBodyProps, affHeaderProps, latestAffVersion } from './schemas';\nimport { splitSourceKey } from '../format/filename';\n\n/** Minimal AFF metadata shape shared by all types. */\nexport interface MinimalAff {\n formatVersion: string;\n header: {\n description?: string;\n originalLanguage: string;\n abapLanguageVersion?: string;\n };\n [key: string]: unknown;\n}\n\nexport type GenericAffLike = {\n name: string;\n description?: string;\n originalLanguage?: string;\n abapLanguageVersion?: string;\n /** Raw payload fields (deserialized AFF body, ADT response, …). */\n data?: Record<string, unknown>;\n /** Companion sources keyed by filename — `main` → the suffix-less file\n * (`{name}.{type}.{ext}`); other keys are suffixes\n * (`{name}.{type}.{key}.{typeExt}`, e.g. csnm's `model_inferred`); a key\n * ending in a file extension selects that extension instead\n * (`z_func.func.json`, `texts.en.properties`). */\n sources?: Record<string, string>;\n};\n\n/**\n * Payload extraction that works for both plain objects (`data` is a\n * record) and real ADK objects (`data` is an async method; the loaded\n * payload lives behind the `dataSync` getter / `_data` field). Returns\n * `undefined` when no usable payload is found — callers fall back to\n * treating the object itself as the record.\n */\nfunction isRecord(v: unknown): v is Record<string, unknown> {\n return !!v && typeof v === 'object' && !Array.isArray(v);\n}\n\n/** Narrow to string/number; objects never reach `String()` coercion. */\nfunction str(v: unknown): string | undefined {\n return typeof v === 'string' || typeof v === 'number' ? String(v) : undefined;\n}\n\n/** ADK-object payload: `dataSync` getter (throws unloaded) or `_data`. */\nfunction adkPayloadOf(\n obj: GenericAffLike,\n): Record<string, unknown> | undefined {\n try {\n const sync = (obj as { dataSync?: unknown }).dataSync;\n if (isRecord(sync)) return sync;\n } catch {\n /* not loaded */\n }\n const priv = (obj as { _data?: unknown })._data;\n return isRecord(priv) ? priv : undefined;\n}\n\nexport function payloadOf(\n obj: GenericAffLike,\n): Record<string, unknown> | undefined {\n const d = obj.data as unknown;\n if (isRecord(d)) return d;\n if (typeof d === 'function') return adkPayloadOf(obj);\n return undefined;\n}\n\nexport function genericToMetadata(type: string) {\n return (obj: GenericAffLike): MinimalAff => {\n const data = payloadOf(obj) ?? (obj as Record<string, unknown>);\n // Emit the payload's declared version when present (a v1 document\n // stays a valid v1 document); fresh objects emit the latest schema\n // version — resolved lazily so registration never touches the fs.\n const declared = (data as Record<string, unknown>).formatVersion;\n const version =\n typeof declared === 'string' || typeof declared === 'number'\n ? String(declared)\n : String(latestAffVersion({ type }) ?? '1');\n const bodyProps = affBodyProps({\n type,\n version: Number.isNaN(Number(version)) ? undefined : Number(version),\n });\n const headerProps = affHeaderProps({\n type,\n version: Number.isNaN(Number(version)) ? undefined : Number(version),\n });\n const meta: MinimalAff = {\n formatVersion: version,\n header: {\n originalLanguage: (\n obj.originalLanguage ??\n str(data.originalLanguage) ??\n str(data.language) ??\n str(data.masterLanguage) ??\n 'en'\n ).toLowerCase(),\n },\n };\n if (headerProps.length === 0 || headerProps.includes('description')) {\n meta.header.description =\n str(data.description) ?? obj.description ?? obj.name;\n }\n const abapLang = str(data.abapLanguageVersion) ?? obj.abapLanguageVersion;\n if (\n abapLang &&\n abapLang !== 'standard' &&\n (headerProps.length === 0 || headerProps.includes('abapLanguageVersion'))\n ) {\n meta.header.abapLanguageVersion = abapLang;\n }\n for (const prop of bodyProps) {\n const value = (data as Record<string, unknown>)[prop];\n if (value !== undefined) meta[prop] = value;\n }\n return meta;\n };\n}\n\n/**\n * Companion-source emit for source-bearing types (`.abap`, `.acds`,\n * `.csn`, …): reads `obj.sources` — `main` emits the suffix-less file,\n * other keys emit `{name}.{type}.{suffix}.{ext}`. A key ending in a file\n * extension selects that extension instead of the type default\n * (`z_func.func.json` → LIMU metadata, `texts.en.properties` → texts).\n * Falls back to `obj.getSource()` as the single `main` source.\n */\nexport function genericGetSources(obj: GenericAffLike) {\n // Read from the same place genericSetSources writes: the payload's\n // `sources` map (plain objects) or `_pendingSources` (ADK objects\n // staged for check-in).\n const data = payloadOf(obj);\n const sources =\n (data?.sources as Record<string, string> | undefined) ??\n obj.sources ??\n (obj as { _pendingSources?: Record<string, string> })._pendingSources;\n const single = (obj as { _pendingSource?: string })._pendingSource;\n const merged = single ? { main: single, ...sources } : sources;\n if (merged && Object.keys(merged).length > 0) {\n return Object.entries(merged)\n .filter(([, content]) => !!content)\n .map(([key, content]) => ({\n ...splitSourceKey(key),\n content,\n }));\n }\n const getSource = (obj as { getSource?: () => string | Promise<string> })\n .getSource;\n const src = typeof getSource === 'function' ? getSource.call(obj) : undefined;\n return src ? [{ suffix: undefined, content: src }] : [];\n}\n\n/**\n * DOCU companion emit: `data.docu` carries the raw DOCU JSON document —\n * emitted as `{name}.{type}.docu.json` beside the main metadata file\n * (AFF spec: DOCU is companion metadata, not a standalone object).\n */\nexport function genericGetExtraFiles(type: string) {\n return (obj: GenericAffLike) => {\n const docu = payloadOf(obj)?.docu;\n if (docu === undefined || docu === null) return [];\n const name = (obj.name ?? '').toLowerCase();\n // Parsed documents re-serialize; a raw string (unparseable JSON kept\n // by genericSetSources) re-emits verbatim instead of double-encoding.\n const content =\n typeof docu === 'string' ? docu : JSON.stringify(docu, null, 2) + '\\n';\n return [\n {\n path: `${name}.${type.toLowerCase()}.docu.json`,\n content,\n },\n ];\n };\n}\n\n/**\n * Is `obj.data` assignable? Plain test doubles have a writable (or no)\n * `data` property — assignment creates/updates it. ADK objects expose\n * `data` as a method or a getter-only accessor (`AdkGenericObject`), where\n * assignment throws in strict mode; their mutable slot is `_data`.\n */\nfunction dataIsWritable(obj: GenericAffLike): boolean {\n let cur: object | null = obj;\n while (cur) {\n const d = Object.getOwnPropertyDescriptor(cur, 'data');\n if (d) return 'value' in d ? d.writable !== false : d.set !== undefined;\n cur = Object.getPrototypeOf(cur) as object | null;\n }\n return true;\n}\n\n/** Deserialize side: stage companion sources back onto the object. */\nexport function genericSetSources(\n obj: GenericAffLike,\n sources: Record<string, string>,\n): void {\n // On ADK objects `data` is a method or a getter-only accessor — the\n // mutable payload lives in `_data` (also written to `_pendingSources`,\n // which ADK check-in reads for source uploads).\n const raw = obj.data as unknown;\n const isAdkObject = typeof raw === 'function' || !dataIsWritable(obj);\n let data = payloadOf(obj);\n if (!data) {\n if (isAdkObject) {\n const priv = obj as { _data?: Record<string, unknown> };\n priv._data = priv._data ?? {};\n data = priv._data;\n } else {\n const fresh: Record<string, unknown> = {};\n (obj as { data?: Record<string, unknown> }).data = fresh;\n data = fresh;\n }\n }\n const { docu, ...rest } = sources;\n // DOCU companions are JSON documents, not source text — parse once,\n // re-emit via genericGetExtraFiles. A source key literally named\n // `docu.<ext>` still lands in the sources map (extension-aware).\n if (docu !== undefined) {\n try {\n data.docu = JSON.parse(docu) as unknown;\n } catch {\n data.docu = docu;\n }\n }\n data.sources = {\n ...(data.sources as Record<string, string> | undefined),\n ...rest,\n };\n if (isAdkObject) {\n const pending = obj as { _pendingSources?: Record<string, string> };\n pending._pendingSources = { ...pending._pendingSources, ...rest };\n }\n}\n\nexport function genericFromMetadata(meta: MinimalAff) {\n const { formatVersion, header, ...body } = meta;\n return {\n name: '',\n description: header.description,\n language: header.originalLanguage?.toUpperCase(),\n masterLanguage: header.originalLanguage?.toUpperCase(),\n // formatVersion stays in the payload — a v1 document must re-emit as\n // v1, not silently upgrade to a schema version it predates.\n formatVersion,\n ...(header.abapLanguageVersion\n ? { abapLanguageVersion: header.abapLanguageVersion }\n : {}),\n ...body,\n };\n}\n","/**\n * gCTS / AFF handler factory.\n *\n * Mirrors the abapGit `createHandler` factory but produces **JSON** metadata\n * (AFF / gCTS convention) instead of abapGit's `.xml` files. Handlers are\n * kept intentionally small — business logic lives in `@abapify/adk` and the\n * only job of a gCTS handler is to project ADK data to the on-disk shape.\n *\n * Self-registration: `createHandler` stores the handler in the module-local\n * registry so `getHandler(type)` can resolve it. The `FormatPlugin` wrapper\n * (`format/gcts-format.ts`) exposes the registry through the public\n * `@abapify/adt-plugin` contract.\n */\n\nimport type { AdkObject, AdkKind } from '@abapify/adk';\nimport { getTypeForKind, getMainType } from '@abapify/adk';\nimport type { FormatHandler, SerializedFile } from '@abapify/adt-plugin';\nimport { gctsFilename, splitSourceKey } from '../format/filename';\nimport { payloadOf } from '../aff/generic';\nimport type { GctsMetadata } from '../format/types';\n\nexport type AbapObjectType = string;\n\nexport type AdkObjectClass<T extends AdkObject = AdkObject> = {\n new (...args: any[]): T;\n readonly kind: AdkKind;\n};\n\n/**\n * Lazy source entry.\n *\n * `content` may be a string, a promise, or a thunk returning either — the\n * factory awaits whichever form the handler returns.\n */\nexport interface GctsSourceEntry {\n suffix?: string;\n /**\n * File extension override — defaults to the object type's source\n * extension. Required for companions whose extension differs\n * (`.properties` texts, `.json` LIMU sub-object metadata, `.xdp`).\n */\n ext?: string;\n content: string | Promise<string> | (() => string | Promise<string>);\n}\n\n/**\n * Extra file emitted alongside the standard metadata + source files.\n * Used by compound handlers (e.g. FUGR emitting per-function-module files).\n * `path` is relative to the object directory.\n */\nexport interface GctsExtraFile {\n path: string;\n content: string | Promise<string> | (() => string | Promise<string>);\n}\n\n/**\n * Handler definition for a single ABAP object type.\n *\n * The shape intentionally mirrors the abapGit `HandlerDefinition` so that\n * anyone familiar with the sister plugin can move between them with minimal\n * friction. The `toMetadata` function is the only required hook: it maps an\n * ADK object to the JSON metadata shape for the target type.\n */\nexport interface GctsHandlerDefinition<\n T extends AdkObject,\n M extends GctsMetadata = GctsMetadata,\n> {\n /** Map ADK object → JSON metadata payload (including the required `header`). */\n toMetadata(object: T): M;\n\n /** Optional: single primary source file. */\n getSource?(object: T): string | Promise<string>;\n\n /** Optional: multiple source files (e.g. CLAS includes). */\n getSources?(object: T): GctsSourceEntry[];\n\n /** Optional: extra files with full paths (e.g. FUGR per-FM .func.json). */\n getExtraFiles?(object: T): GctsExtraFile[] | Promise<GctsExtraFile[]>;\n\n /** Optional: custom metadata filename (e.g. `package.devc.json` for DEVC). */\n metadataFileName?: string | ((object: T) => string);\n\n /**\n * Optional: inverse mapping used during deserialization.\n *\n * `fromMetadata` receives the parsed JSON payload and returns a partial\n * ADK-data projection. `setSources` mirrors abapGit's behaviour: it stages\n * source content on the ADK object for later deploy.\n */\n fromMetadata?(metadata: M): { name: string } & Record<string, unknown>;\n suffixToSourceKey?: Record<string, string>;\n setSources?(object: T, sources: Record<string, string>): void;\n}\n\n/** Runtime shape of a gCTS handler after `createHandler` processing. */\nexport interface GctsHandler<\n T extends AdkObject = AdkObject,\n> extends FormatHandler {\n readonly type: AbapObjectType;\n readonly fileExtension: string;\n readonly schema: {\n parse(raw: string): unknown;\n build(data: unknown): string;\n };\n serialize(object: T): Promise<SerializedFile[]>;\n fromAbapGit?(values: unknown): { name: string } & Record<string, unknown>;\n setSources?(object: T, sources: Record<string, string>): void;\n}\n\nconst handlerRegistry = new Map<AbapObjectType, GctsHandler>();\n\n/** Look up a handler (full-type first, then main-type fallback). */\nexport function getHandler(type: AbapObjectType): GctsHandler | undefined {\n return handlerRegistry.get(type) ?? handlerRegistry.get(getMainType(type));\n}\n\n/** `true` iff the given object type has a registered handler. */\nexport function isSupported(type: AbapObjectType): boolean {\n return handlerRegistry.has(type) || handlerRegistry.has(getMainType(type));\n}\n\n/** Snapshot of all registered object types. */\nexport function getSupportedTypes(): AbapObjectType[] {\n return [...handlerRegistry.keys()];\n}\n\n/** Internal — test helper. */\nexport function __resetRegistry(): void {\n handlerRegistry.clear();\n}\n\n/**\n * Build a JSON metadata file for the object. JSON is pretty-printed (2-space\n * indent) so the output is diff-friendly and matches AFF's own tooling.\n */\nfunction buildMetadataFile(meta: GctsMetadata): string {\n return JSON.stringify(meta, null, 2) + '\\n';\n}\n\n/** Staged source companions → files (extension-aware keys → LIMU names). */\nfunction sourceCompanionFiles(\n object: unknown,\n type: string,\n objectName: string,\n suffixToSourceKey?: Record<string, string>,\n): SerializedFile[] {\n const payload = payloadOf(object as Parameters<typeof payloadOf>[0]);\n const pending = object as {\n _pendingSource?: string;\n _pendingSources?: Record<string, string>;\n };\n const map: Record<string, string> = {\n ...(payload?.sources as Record<string, string> | undefined),\n ...pending._pendingSources,\n };\n if (pending._pendingSource && !map.main) map.main = pending._pendingSource;\n // Staged keys are ADK include/source names — the file suffix is the\n // inverse of `suffixToSourceKey` (CLAS `locals_def` → `definitions`).\n const keyToSuffix = Object.fromEntries(\n Object.entries(suffixToSourceKey ?? {}).map(([suffix, key]) => [\n key,\n suffix,\n ]),\n );\n const files: SerializedFile[] = [];\n for (const [key, content] of Object.entries(map)) {\n // Skip absent entries only — an empty companion is still a companion\n // and must round-trip (e.g. an intentionally empty include).\n if (content == null) continue;\n const { suffix, ext } = splitSourceKey(key);\n const fileSuffix = suffix ? (keyToSuffix[suffix] ?? suffix) : suffix;\n files.push({\n path: gctsFilename(objectName, type, 'source', fileSuffix, ext),\n content,\n });\n }\n return files;\n}\n\n/** `data.docu` → `{name}.{type}.docu.json` file (or nothing). */\nfunction docuCompanionFile(\n payload: Record<string, unknown> | undefined,\n objectName: string,\n typeLower: string,\n): SerializedFile[] {\n const docu = payload?.docu;\n if (docu === undefined || docu === null) return [];\n return [\n {\n path: `${objectName}.${typeLower}.docu.json`,\n content:\n typeof docu === 'string' ? docu : JSON.stringify(docu, null, 2) + '\\n',\n },\n ];\n}\n\n/** `data.properties` map → `.properties` files ('' key → master file). */\nfunction propertyCompanionFiles(\n payload: Record<string, unknown> | undefined,\n objectName: string,\n typeLower: string,\n): SerializedFile[] {\n const props = payload?.properties as Record<string, string> | undefined;\n const files: SerializedFile[] = [];\n for (const [key, content] of Object.entries(props ?? {})) {\n if (content == null) continue;\n files.push({\n path: key\n ? `${objectName}.${typeLower}.${key}.properties`\n : `${objectName}.${typeLower}.properties`,\n content,\n });\n }\n return files;\n}\n\n/**\n * Universal companion preservation. Deserialization stages every\n * companion a dedicated hook does not claim into `_pendingSources` /\n * `data.sources` (extension-aware keys), `data.docu`, and\n * `data.properties` — emitted here so handlers without a matching emit\n * hook still round-trip LIMU sub-objects, DOCU texts, and translations\n * instead of silently dropping them. Paths already in `emitted` win.\n */\nfunction companionFiles(\n object: unknown,\n type: string,\n objectName: string,\n emitted: ReadonlySet<string>,\n suffixToSourceKey?: Record<string, string>,\n): SerializedFile[] {\n const typeLower = type.split('/')[0].toLowerCase();\n const payload = payloadOf(object as Parameters<typeof payloadOf>[0]);\n const candidates = [\n ...sourceCompanionFiles(object, type, objectName, suffixToSourceKey),\n ...docuCompanionFile(payload, objectName, typeLower),\n ...propertyCompanionFiles(payload, objectName, typeLower),\n ];\n return candidates.filter((f) => !emitted.has(f.path));\n}\n\n/**\n * Register a handler for an ADK class (preferred — `type` is derived from\n * the static `kind`) or an explicit type string (for types without an ADK\n * class, e.g. DOMA/DTEL).\n */\nexport function createHandler<\n T extends AdkObject,\n M extends GctsMetadata = GctsMetadata,\n>(\n adkClass: AdkObjectClass<T>,\n definition: GctsHandlerDefinition<T, M>,\n): GctsHandler<T>;\nexport function createHandler<\n T extends AdkObject,\n M extends GctsMetadata = GctsMetadata,\n>(\n type: AbapObjectType,\n definition: GctsHandlerDefinition<T, M>,\n): GctsHandler<T>;\nexport function createHandler<\n T extends AdkObject,\n M extends GctsMetadata = GctsMetadata,\n>(\n adkClassOrType: AdkObjectClass<T> | AbapObjectType,\n definition: GctsHandlerDefinition<T, M>,\n): GctsHandler<T> {\n let type: AbapObjectType;\n if (typeof adkClassOrType === 'string') {\n type = adkClassOrType;\n } else {\n const kind = adkClassOrType.kind;\n const derived = getTypeForKind(kind);\n if (!derived) {\n throw new Error(\n `Unknown ADK kind: ${kind}. Ensure the ADK class has a static 'kind' property.`,\n );\n }\n type = derived;\n }\n\n const fileExtension = getMainType(type).toLowerCase();\n\n async function resolveSource(entry: GctsSourceEntry): Promise<string> {\n const raw =\n typeof entry.content === 'function' ? entry.content() : entry.content;\n return await raw;\n }\n\n const handler: GctsHandler<T> = {\n type,\n fileExtension,\n // Minimal JSON \"schema\" — matches the FormatHandlerSchema contract.\n schema: {\n parse: (raw: string) => JSON.parse(raw) as unknown,\n build: (data: unknown) => JSON.stringify(data, null, 2) + '\\n',\n },\n suffixToSourceKey: definition.suffixToSourceKey,\n async serialize(object: T): Promise<SerializedFile[]> {\n const files: SerializedFile[] = [];\n const objectName = (object.name ?? '').toLowerCase();\n\n // Source files.\n if (definition.getSources) {\n for (const entry of definition.getSources(object)) {\n const content = await resolveSource(entry);\n if (!content) continue;\n files.push({\n path: gctsFilename(\n objectName,\n type,\n 'source',\n entry.suffix,\n entry.ext,\n ),\n content,\n });\n }\n } else if (definition.getSource) {\n const content = await definition.getSource(object);\n if (content) {\n files.push({\n path: gctsFilename(objectName, type, 'source'),\n content,\n });\n }\n }\n\n // Metadata file.\n const metadata = definition.toMetadata(object);\n const metadataFile =\n typeof definition.metadataFileName === 'function'\n ? definition.metadataFileName(object)\n : (definition.metadataFileName ??\n gctsFilename(objectName, type, 'metadata'));\n files.push({\n path: metadataFile,\n content: buildMetadataFile(metadata),\n });\n\n // Extra files (e.g. FUGR per-function-module .func.json + .func.abap).\n if (definition.getExtraFiles) {\n const extras = await definition.getExtraFiles(object);\n for (const extra of extras) {\n const content = await resolveSource(extra);\n if (!content) continue;\n files.push({ path: extra.path, content });\n }\n }\n\n files.push(\n ...companionFiles(\n object,\n type,\n objectName,\n new Set(files.map((f) => f.path)),\n definition.suffixToSourceKey,\n ),\n );\n\n return files;\n },\n fromAbapGit: definition.fromMetadata\n ? (values: unknown) =>\n definition.fromMetadata!(values as M) as { name: string } & Record<\n string,\n unknown\n >\n : undefined,\n setSources: definition.setSources,\n };\n\n handlerRegistry.set(type, handler as GctsHandler);\n return handler;\n}\n\n/** Convenience re-export — matches abapGit's `package.devc.xml` pattern. */\nexport { PACKAGE_FILENAME } from '../format/filename';\n","/**\n * CLAS handler for gCTS / AFF format.\n *\n * Projects ADK class data to the AFF clas-v1.json schema shape:\n *\n * {\n * formatVersion: \"1\",\n * header: { description, originalLanguage, abapLanguageVersion? },\n * category?,\n * fixPointArithmetic?,\n * messageClass?,\n * descriptions?: { types?, attributes?, events?, methods? }\n * }\n *\n * Sources are emitted per include (main, definitions, implementations, ...).\n * Abapgit suffix convention is reused for consistency — AFF does not\n * standardise include filenames, but using the same suffixes as abapGit\n * means downstream tooling (diff, round-trip) can treat both formats with\n * the same suffix map.\n */\n\nimport { AdkClass, type ClassIncludeType } from '@abapify/adk';\nimport { createHandler } from '../base';\nimport type { ClasAff } from '../../../schemas/generated';\n\nconst SUFFIX: Record<ClassIncludeType, string | undefined> = {\n main: undefined,\n definitions: 'locals_def',\n implementations: 'locals_imp',\n localtypes: 'locals_types',\n macros: 'macros',\n testclasses: 'testclasses',\n};\n\nconst SUFFIX_TO_SOURCE_KEY = Object.fromEntries(\n Object.entries(SUFFIX)\n .filter(([, v]) => v !== undefined)\n .map(([k, v]) => [v, k]),\n) as Record<string, ClassIncludeType>;\n\n/**\n * ADK category enum → AFF category enum.\n * AFF uses a different, finer-grained set of category names.\n */\nconst CATEGORY_TO_AFF: Record<string, string> = {\n generalObjectType: 'generalObjectType',\n exitClass: 'exitClass',\n testClass: 'testclassAbapUnit',\n behaviorPool: 'behaviorClass',\n entityEventHandler: 'entityEventHandler',\n persistentClass: 'persistentClass',\n factoryClass: 'factoryForPersistentClass',\n rfcProxyClass: 'rfcProxyClass',\n communicationConnectionClass: 'communicationConnectionClass',\n exceptionClass: 'exceptionClass',\n areaClass: 'areaClassSharedObjects',\n bspClass: 'bspApplicationClass',\n};\n\nconst CATEGORY_FROM_AFF: Record<string, string> = Object.fromEntries(\n Object.entries(CATEGORY_TO_AFF).map(([k, v]) => [v, k]),\n);\n\nexport const classHandler = createHandler(AdkClass, {\n suffixToSourceKey: SUFFIX_TO_SOURCE_KEY,\n\n toMetadata(cls): ClasAff {\n const data = cls.dataSync;\n const lang = (data.language ?? data.masterLanguage ?? '').toLowerCase();\n return {\n formatVersion: '1',\n header: {\n description: cls.description ?? data.description ?? '',\n originalLanguage: lang,\n ...(data.abapLanguageVersion && data.abapLanguageVersion !== 'standard'\n ? {\n abapLanguageVersion:\n data.abapLanguageVersion as ClasAff['header']['abapLanguageVersion'],\n }\n : {}),\n },\n ...(data.category\n ? {\n category: (CATEGORY_TO_AFF[data.category] ??\n 'generalObjectType') as ClasAff['category'],\n }\n : {}),\n ...(typeof data.fixPointArithmetic === 'boolean'\n ? { fixPointArithmetic: data.fixPointArithmetic }\n : {}),\n };\n },\n\n getSources: (cls) => {\n const includes = cls.dataSync.include ?? [];\n return includes.map((inc) => ({\n suffix: SUFFIX[String(inc.includeType ?? 'main') as ClassIncludeType],\n content: () =>\n cls.getIncludeSource(\n String(inc.includeType ?? 'main') as ClassIncludeType,\n ),\n }));\n },\n\n fromMetadata: (meta: ClasAff) => ({\n name: '', // AFF clas schema has no name field — set by filename context\n type: 'CLAS/OC',\n description: meta.header.description,\n language: meta.header.originalLanguage?.toUpperCase(),\n masterLanguage: meta.header.originalLanguage?.toUpperCase(),\n category: meta.category\n ? (CATEGORY_FROM_AFF[meta.category] ?? meta.category)\n : undefined,\n abapLanguageVersion: meta.header.abapLanguageVersion,\n fixPointArithmetic: meta.fixPointArithmetic,\n }),\n\n setSources: (cls, sources) => {\n (\n cls as unknown as { _pendingSources: Record<string, string> }\n )._pendingSources = sources;\n if (sources.main) {\n (cls as unknown as { _pendingSource: string })._pendingSource =\n sources.main;\n }\n },\n});\n","/**\n * INTF handler for gCTS / AFF format.\n *\n * Projects ADK interface data to the AFF intf-v1.json schema shape:\n *\n * {\n * formatVersion: \"1\",\n * header: { description, originalLanguage, abapLanguageVersion? },\n * category?,\n * proxy?,\n * descriptions?\n * }\n */\n\nimport { AdkInterface } from '@abapify/adk';\nimport { createHandler } from '../base';\nimport type { IntfAff } from '../../../schemas/generated';\n\nexport const interfaceHandler = createHandler(AdkInterface, {\n toMetadata(intf): IntfAff {\n const data = intf.dataSync;\n const lang = (data.language ?? data.masterLanguage ?? '').toLowerCase();\n return {\n formatVersion: '1',\n header: {\n description: intf.description ?? data.description ?? '',\n originalLanguage: lang,\n ...(data.abapLanguageVersion && data.abapLanguageVersion !== 'standard'\n ? {\n abapLanguageVersion:\n data.abapLanguageVersion as IntfAff['header']['abapLanguageVersion'],\n }\n : {}),\n },\n };\n },\n\n getSource: (obj) => obj.getSource(),\n\n fromMetadata: (meta: IntfAff) => ({\n name: '',\n type: 'INTF/OI',\n description: meta.header.description,\n language: meta.header.originalLanguage?.toUpperCase(),\n masterLanguage: meta.header.originalLanguage?.toUpperCase(),\n abapLanguageVersion: meta.header.abapLanguageVersion,\n }),\n\n setSources: (intf, sources) => {\n if (sources.main) {\n (intf as unknown as { _pendingSource: string })._pendingSource =\n sources.main;\n }\n },\n});\n","/**\n * PROG handler for gCTS / AFF format.\n *\n * Projects ADK program data to the AFF prog-v1.json schema shape:\n *\n * {\n * formatVersion: \"1\",\n * header: { description, originalLanguage, abapLanguageVersion? },\n * generalInformation: { programType, programStatus, fixPointArithmetic?, ... }\n * }\n */\n\nimport { AdkProgram } from '@abapify/adk';\nimport { createHandler } from '../base';\nimport type { ProgAff } from '../../../schemas/generated';\n\n/** ADK sourceObjectStatus → AFF programStatus */\nconst STATUS_TO_AFF: Record<string, string> = {\n SAPStandardProduction: 'sapProductionProgram',\n customerProduction: 'customerProductionProgram',\n system: 'systemProgram',\n test: 'testProgram',\n};\n\nconst STATUS_FROM_AFF: Record<string, string> = Object.fromEntries(\n Object.entries(STATUS_TO_AFF).map(([k, v]) => [v, k]),\n);\n\nexport const programHandler = createHandler(AdkProgram, {\n toMetadata(prog): ProgAff {\n const data = prog.dataSync;\n const lang = (data.language ?? data.masterLanguage ?? '').toLowerCase();\n const generalInformation: Record<string, unknown> = {\n programType: (data.programType ??\n 'executableProgram') as ProgAff['generalInformation']['programType'],\n programStatus: (STATUS_TO_AFF[data.sourceObjectStatus ?? ''] ??\n 'systemProgram') as ProgAff['generalInformation']['programStatus'],\n };\n if (typeof data.fixPointArithmetic === 'boolean') {\n generalInformation.fixPointArithmetic = data.fixPointArithmetic;\n }\n return {\n formatVersion: '1',\n header: {\n description: prog.description ?? data.description ?? '',\n originalLanguage: lang,\n ...(data.abapLanguageVersion && data.abapLanguageVersion !== 'standard'\n ? {\n abapLanguageVersion:\n data.abapLanguageVersion as ProgAff['header']['abapLanguageVersion'],\n }\n : {}),\n },\n generalInformation: generalInformation as ProgAff['generalInformation'],\n };\n },\n\n getSource: (obj) => obj.getSource(),\n\n fromMetadata: (meta: ProgAff) => ({\n name: '',\n type: 'PROG/P',\n description: meta.header.description,\n language: meta.header.originalLanguage?.toUpperCase(),\n masterLanguage: meta.header.originalLanguage?.toUpperCase(),\n programType: meta.generalInformation?.programType,\n sourceObjectStatus: meta.generalInformation?.programStatus\n ? STATUS_FROM_AFF[meta.generalInformation.programStatus]\n : undefined,\n fixPointArithmetic: meta.generalInformation?.fixPointArithmetic,\n abapLanguageVersion: meta.header.abapLanguageVersion,\n }),\n\n setSources: (prog, sources) => {\n if (sources.main) {\n (prog as unknown as { _pendingSource: string })._pendingSource =\n sources.main;\n }\n },\n});\n","/**\n * DEVC (package) handler for gCTS / AFF format.\n *\n * Packages use a fixed filename (`package.devc.json`) — same convention as\n * abapGit's `package.devc.xml`.\n *\n * Note: DEVC has no AFF schema in SAP/abap-file-formats — this handler\n * uses a gCTS-compatible shape with formatVersion \"1\". If AFF adds a DEVC\n * schema later, align here.\n */\nimport { AdkPackage } from '@abapify/adk';\nimport { createHandler, PACKAGE_FILENAME } from '../base';\n\nexport const packageHandler = createHandler(AdkPackage, {\n metadataFileName: PACKAGE_FILENAME,\n\n toMetadata(pkg) {\n return {\n formatVersion: '1',\n header: {\n description: pkg.description ?? '',\n originalLanguage: (\n pkg.dataSync?.language ??\n pkg.dataSync?.masterLanguage ??\n ''\n ).toLowerCase(),\n ...(pkg.dataSync?.abapLanguageVersion &&\n pkg.dataSync.abapLanguageVersion !== 'standard'\n ? { abapLanguageVersion: pkg.dataSync.abapLanguageVersion }\n : {}),\n },\n package: {\n // DEVCLASS is carried by filename/directory, not by metadata.\n softwareComponent: pkg.dataSync?.transport?.softwareComponent?.name,\n applicationComponent: pkg.dataSync?.applicationComponent?.name,\n packageType: pkg.dataSync?.attributes?.packageType,\n },\n };\n },\n\n fromMetadata: (meta: any) => ({\n name: '',\n description: meta?.header?.description,\n language: meta?.header?.originalLanguage?.toUpperCase(),\n masterLanguage: meta?.header?.originalLanguage?.toUpperCase(),\n abapLanguageVersion: meta?.header?.abapLanguageVersion,\n }),\n});\n","/**\n * DOMA (domain) handler for gCTS / AFF format.\n *\n * Projects ADK domain data to the AFF doma-v1.json schema shape:\n *\n * {\n * formatVersion: \"1\",\n * header: { description, originalLanguage, abapLanguageVersion? },\n * format: { dataType, length, decimals? } (required),\n * outputCharacteristics?: { length?, caseSensitive?, conversionRoutine?, ... },\n * valueTable?: { name }\n * }\n */\n\nimport { AdkDomain } from '@abapify/adk';\nimport { createHandler } from '../base';\nimport type { DomaAff } from '../../../schemas/generated';\n\nexport const domainHandler = createHandler(AdkDomain, {\n toMetadata(doma): DomaAff {\n const data = doma.dataSync as Record<string, unknown>;\n const content = (data.content ?? {}) as Record<string, unknown>;\n const lang = (\n (data.language as string) ??\n (data.masterLanguage as string) ??\n ''\n ).toLowerCase();\n const ti = (content.typeInformation ?? {}) as Record<string, unknown>;\n const oi = (content.outputInformation ?? {}) as Record<string, unknown>;\n const vi = (content.valueInformation ?? {}) as Record<string, unknown>;\n\n const format: Record<string, unknown> = {\n dataType: ti.datatype ?? 'CHAR',\n length: ti.length ?? 1,\n };\n if (typeof ti.decimals === 'number') {\n format.decimals = ti.decimals;\n }\n\n const result: Record<string, unknown> = {\n formatVersion: '1',\n header: {\n description: doma.description ?? '',\n originalLanguage: lang,\n },\n format: format as DomaAff['format'],\n };\n\n // outputCharacteristics — only emit if we have meaningful values\n const outChars: Record<string, unknown> = {};\n if (typeof oi.length === 'number') outChars.length = oi.length;\n if (typeof oi.lowercase === 'boolean')\n outChars.caseSensitive = !oi.lowercase;\n if (oi.conversionExit) outChars.conversionRoutine = oi.conversionExit;\n if (Object.keys(outChars).length > 0) {\n result.outputCharacteristics = outChars;\n }\n\n // valueTable\n const vtRef = (vi.valueTableRef ?? {}) as { name?: string };\n if (vtRef.name) {\n result.valueTable = { name: vtRef.name };\n }\n\n return result as DomaAff;\n },\n\n fromMetadata: (meta: DomaAff) => {\n const result: Record<string, unknown> = {\n name: '',\n description: meta.header.description,\n language: meta.header.originalLanguage?.toUpperCase(),\n masterLanguage: meta.header.originalLanguage?.toUpperCase(),\n };\n const content: Record<string, unknown> = {\n typeInformation: {\n datatype: meta.format.dataType,\n length: meta.format.length,\n decimals: meta.format.decimals ?? 0,\n },\n };\n if (meta.outputCharacteristics) {\n content.outputInformation = {\n length: meta.outputCharacteristics.length,\n lowercase: meta.outputCharacteristics.caseSensitive ? false : undefined,\n conversionExit: meta.outputCharacteristics.conversionRoutine,\n };\n }\n if (meta.valueTable?.name) {\n content.valueInformation = {\n valueTableRef: { name: meta.valueTable.name },\n };\n }\n result.content = content;\n return result as { name: string } & Record<string, unknown>;\n },\n});\n","/**\n * DTEL (data element) handler for gCTS / AFF format.\n *\n * Projects ADK data element data to the AFF dtel-v1.json schema shape:\n *\n * {\n * formatVersion: \"1\",\n * header: { description, originalLanguage, abapLanguageVersion? },\n * dataTypeInformation: { domainName? } | { predefinedType: { dataType, length?, decimals? } },\n * fieldLabels?: { short, shortLength, medium, mediumLength, long, longLength, heading, headingLength }\n * }\n */\n\nimport { AdkDataElement } from '@abapify/adk';\nimport { createHandler } from '../base';\nimport type { DtelAff } from '../../../schemas/generated';\n\n// TODO: Replace Record<string, unknown> with generated ADK DTEL types once\n// adt-schemas exports a typed DataelementsSchema interface. Dynamic access is\n// required because AdkDataElement.dataSync returns a generic record today.\n// Cleanup issue: https://github.com/abapify/adt-cli/issues/195\nfunction buildDataTypeInformation(\n data: Record<string, unknown>,\n): Record<string, unknown> {\n const typeKind = data.typeKind as string | undefined;\n if (typeKind === 'domain' && data.typeName) {\n return { domainName: data.typeName };\n }\n if (data.dataType) {\n const predefinedType: Record<string, unknown> = { dataType: data.dataType };\n if (typeof data.dataTypeLength === 'number') {\n predefinedType.length = data.dataTypeLength;\n }\n if (typeof data.dataTypeDecimals === 'number') {\n predefinedType.decimals = data.dataTypeDecimals;\n }\n return { predefinedType };\n }\n return {};\n}\n\n// TODO: Same as above — replace with typed access once ADK exports DTEL types.\nfunction buildFieldLabels(\n data: Record<string, unknown>,\n): Record<string, unknown> {\n const labels: Record<string, unknown> = {};\n const fields: [string, string, string][] = [\n ['shortFieldLabel', 'short', 'shortFieldLength'],\n ['mediumFieldLabel', 'medium', 'mediumFieldLength'],\n ['longFieldLabel', 'long', 'longFieldLength'],\n ['headingFieldLabel', 'heading', 'headingFieldLength'],\n ];\n for (const [src, dst, lenKey] of fields) {\n if (data[src]) {\n labels[dst] = data[src];\n if (typeof data[lenKey] === 'number') {\n labels[`${dst}Length`] = data[lenKey];\n }\n }\n }\n return labels;\n}\n\nexport const dataElementHandler = createHandler(AdkDataElement, {\n toMetadata(dtel): DtelAff {\n const data = dtel.dataSync as Record<string, unknown>;\n const lang = (\n (data.language as string) ??\n (data.masterLanguage as string) ??\n ''\n ).toLowerCase();\n\n const result: Record<string, unknown> = {\n formatVersion: '1',\n header: {\n description: dtel.description ?? '',\n originalLanguage: lang,\n },\n dataTypeInformation: buildDataTypeInformation(data),\n };\n\n const fieldLabels = buildFieldLabels(data);\n if (Object.keys(fieldLabels).length > 0) {\n result.fieldLabels = fieldLabels;\n }\n\n return result as DtelAff;\n },\n\n fromMetadata: (meta: DtelAff) => {\n const dti = meta.dataTypeInformation ?? {};\n const result: Record<string, unknown> = {\n name: '',\n description: meta.header.description,\n language: meta.header.originalLanguage?.toUpperCase(),\n masterLanguage: meta.header.originalLanguage?.toUpperCase(),\n };\n if (dti.domainName) {\n result.typeKind = 'domain';\n result.typeName = dti.domainName;\n } else if (dti.predefinedType) {\n result.typeKind = 'predefinedAbapType';\n result.dataType = dti.predefinedType.dataType;\n result.dataTypeLength = dti.predefinedType.length;\n result.dataTypeDecimals = dti.predefinedType.decimals;\n }\n const fl = meta.fieldLabels;\n if (fl) {\n result.shortFieldLabel = fl.short;\n result.shortFieldLength = fl.shortLength;\n result.mediumFieldLabel = fl.medium;\n result.mediumFieldLength = fl.mediumLength;\n result.longFieldLabel = fl.long;\n result.longFieldLength = fl.longLength;\n result.headingFieldLabel = fl.heading;\n result.headingFieldLength = fl.headingLength;\n }\n return result as { name: string } & Record<string, unknown>;\n },\n});\n","/**\n * TABL (table / structure) handler for gCTS / AFF format.\n *\n * Note: TABL has no AFF schema in SAP/abap-file-formats — this handler\n * uses a gCTS-compatible shape with formatVersion \"1\". If AFF adds a TABL\n * schema later, align here.\n */\nimport { AdkTable } from '@abapify/adk';\nimport { createHandler } from '../base';\n\nexport const tableHandler = createHandler(AdkTable, {\n toMetadata(tabl) {\n const data = tabl.dataSync as Record<string, unknown>;\n return {\n formatVersion: '1',\n header: {\n description: tabl.description ?? '',\n originalLanguage: (\n (data.language as string) ??\n (data.masterLanguage as string) ??\n ''\n ).toLowerCase(),\n },\n table: {\n tableCategory: data.tableCategory,\n deliveryClass: data.deliveryClass,\n dataMaintenance: data.dataMaintenance,\n fields: data.fields,\n },\n };\n },\n\n fromMetadata: (meta: any) => ({\n name: '',\n description: meta?.header?.description,\n language: meta?.header?.originalLanguage?.toUpperCase(),\n masterLanguage: meta?.header?.originalLanguage?.toUpperCase(),\n tableCategory: meta?.table?.tableCategory,\n deliveryClass: meta?.table?.deliveryClass,\n dataMaintenance: meta?.table?.dataMaintenance,\n fields: meta?.table?.fields,\n }),\n});\n","/**\n * TTYP (table type) handler for gCTS / AFF format.\n *\n * Note: TTYP has no AFF schema in SAP/abap-file-formats — this handler\n * uses a gCTS-compatible shape with formatVersion \"1\". If AFF adds a TTYP\n * schema later, align here.\n */\nimport { AdkTableType } from '@abapify/adk';\nimport { createHandler } from '../base';\n\nexport const tableTypeHandler = createHandler(AdkTableType, {\n toMetadata(ttyp) {\n const data = ttyp.dataSync as Record<string, unknown>;\n return {\n formatVersion: '1',\n header: {\n description: ttyp.description ?? '',\n originalLanguage: (\n (data.language as string) ??\n (data.masterLanguage as string) ??\n ''\n ).toLowerCase(),\n },\n tableType: {\n accessMode: data.accessMode,\n rowType: (data.rowTypeRef as { name?: string } | undefined)?.name,\n primaryKey: data.primaryKey,\n secondaryKeys: data.secondaryKeys,\n },\n };\n },\n\n fromMetadata: (meta: any) => ({\n name: '',\n description: meta?.header?.description,\n language: meta?.header?.originalLanguage?.toUpperCase(),\n }),\n});\n","/**\n * FUGR (function group) handler for gCTS / AFF format.\n *\n * Projects ADK function group data to the AFF fugr-v1.json schema shape:\n *\n * {\n * formatVersion: \"1\",\n * header: { description, originalLanguage, abapLanguageVersion? },\n * fixPointArithmetic: boolean (required),\n * status?\n * }\n *\n * AFF's FUGR representation nests function modules under the group\n * directory. This handler emits the group metadata plus per-function-module\n * files when function module data is available (LIMU naming keeps the\n * submodule files inside the parent's namespace):\n * <parent>.fugr.<fmname>.func.json — FM metadata (func-v1.json schema)\n * <parent>.fugr.<fmname>.func.abap — FM source\n */\n\nimport { AdkFunctionGroup } from '@abapify/adk';\nimport { createHandler, type GctsExtraFile } from '../base';\nimport { affName } from '../../format/filename';\nimport type { FugrAff } from '../../../schemas/generated';\n\ntype FmDescriptor = {\n name: string;\n description?: string;\n processingType?: string;\n includeNumber?: string;\n source?: string;\n};\n\ntype FugrLike = {\n name: string;\n description?: string;\n dataSync?: Record<string, unknown>;\n functionModules?: FmDescriptor[];\n getSource?: () => Promise<string> | string;\n};\n\nfunction buildFuncMetadata(fm: FmDescriptor): string {\n const meta: Record<string, unknown> = {\n formatVersion: '1',\n header: {\n description: fm.description ?? fm.name ?? '',\n },\n processingType: fm.processingType ?? 'normal',\n includeNumber: fm.includeNumber ?? '0000',\n };\n return JSON.stringify(meta, null, 2) + '\\n';\n}\n\nexport const functionGroupHandler = createHandler(AdkFunctionGroup, {\n toMetadata(fugr: FugrLike): FugrAff {\n const data = (fugr.dataSync ?? {}) as Record<string, unknown>;\n const lang = (\n (data.language as string) ??\n (data.masterLanguage as string) ??\n ''\n ).toLowerCase();\n return {\n formatVersion: '1',\n header: {\n description: fugr.description ?? '',\n originalLanguage: lang,\n },\n fixPointArithmetic: data.fixPointArithmetic === true,\n };\n },\n\n getSource: (fugr: FugrLike) =>\n typeof fugr.getSource === 'function' ? fugr.getSource() : '',\n\n getExtraFiles(fugr: FugrLike): GctsExtraFile[] {\n const fms = fugr.functionModules ?? [];\n const files: GctsExtraFile[] = [];\n // LIMU naming: `{parent}.{ptype}.{sub}.{stype}.{ext}` — the parent\n // prefix keeps the file inside the FUGR object's namespace so the\n // deserializer's suffix routing can re-attach it.\n const parent = affName(fugr.name ?? '');\n for (const fm of fms) {\n const fmName = affName(fm.name);\n files.push({\n path: `${parent}.fugr.${fmName}.func.json`,\n content: buildFuncMetadata(fm),\n });\n if (fm.source) {\n files.push({\n path: `${parent}.fugr.${fmName}.func.abap`,\n content: fm.source,\n });\n }\n }\n return files;\n },\n\n fromMetadata: (meta: FugrAff) => ({\n name: '',\n description: meta.header.description,\n language: meta.header.originalLanguage?.toUpperCase(),\n masterLanguage: meta.header.originalLanguage?.toUpperCase(),\n fixPointArithmetic: meta.fixPointArithmetic,\n }),\n});\n","/**\n * DDLS (CDS view) handler for gCTS / AFF format.\n *\n * Source-driven: emits `<name>.ddls.asddls` (source) + `<name>.ddls.json`\n * (metadata per ddls-v1.json schema).\n *\n * {\n * formatVersion: \"1\",\n * header: { description, originalLanguage, abapLanguageVersion? },\n * sourceOrigin: \"abapDevelopmentTools\" (required),\n * sourceType: \"unknown\" (required),\n * parentName?: string\n * }\n */\n\nimport { createHandler } from '../base';\nimport type { DdlsAff } from '../../../schemas/generated';\n\ntype DdlsLike = {\n name: string;\n description?: string;\n originalLanguage?: string;\n abapLanguageVersion?: string;\n sourceOrigin?: string;\n sourceType?: string;\n getSource?: () => Promise<string> | string;\n};\n\nexport const ddlSourceHandler = createHandler('DDLS', {\n toMetadata(obj: DdlsLike): DdlsAff {\n const lang = (obj.originalLanguage ?? '').toLowerCase();\n const meta: Record<string, unknown> = {\n formatVersion: '1',\n header: {\n description: obj.description ?? obj.name ?? '',\n originalLanguage: lang,\n ...(obj.abapLanguageVersion\n ? { abapLanguageVersion: obj.abapLanguageVersion }\n : {}),\n },\n sourceOrigin: obj.sourceOrigin ?? 'abapDevelopmentTools',\n sourceType: obj.sourceType ?? 'unknown',\n };\n return meta as DdlsAff;\n },\n\n getSource: (obj: DdlsLike) =>\n typeof obj.getSource === 'function' ? obj.getSource() : '',\n\n fromMetadata: (meta: DdlsAff) => ({\n name: '',\n description: meta.header.description,\n language: meta.header.originalLanguage?.toUpperCase(),\n masterLanguage: meta.header.originalLanguage?.toUpperCase(),\n sourceOrigin: meta.sourceOrigin,\n sourceType: meta.sourceType,\n }),\n});\n","/**\n * DCLS (CDS access control) handler for gCTS / AFF format.\n *\n * Source-driven: emits `<name>.dcls.asdcls` (source) + `<name>.dcls.json`\n * (metadata per dcls-v1.json schema).\n *\n * {\n * formatVersion: \"1\",\n * header: { description, originalLanguage, abapLanguageVersion? }\n * }\n */\n\nimport { createHandler } from '../base';\nimport type { DclsAff } from '../../../schemas/generated';\n\ntype DclsLike = {\n name: string;\n description?: string;\n originalLanguage?: string;\n abapLanguageVersion?: string;\n getSource?: () => Promise<string> | string;\n};\n\nexport const dclSourceHandler = createHandler('DCLS', {\n toMetadata(obj: DclsLike): DclsAff {\n const lang = (obj.originalLanguage ?? '').toLowerCase();\n return {\n formatVersion: '1',\n header: {\n description: obj.description ?? obj.name ?? '',\n originalLanguage: lang,\n ...(obj.abapLanguageVersion\n ? { abapLanguageVersion: obj.abapLanguageVersion }\n : {}),\n },\n } as DclsAff;\n },\n\n getSource: (obj: DclsLike) =>\n typeof obj.getSource === 'function' ? obj.getSource() : '',\n\n fromMetadata: (meta: DclsAff) => ({\n name: '',\n description: meta.header.description,\n language: meta.header.originalLanguage?.toUpperCase(),\n masterLanguage: meta.header.originalLanguage?.toUpperCase(),\n }),\n});\n","/**\n * BDEF (RAP behavior definition) handler for gCTS / AFF format.\n *\n * Source-driven: emits `<name>.bdef.abdl` (source) + `<name>.bdef.json`\n * (metadata per bdef-v1.json schema).\n *\n * {\n * formatVersion: \"1\",\n * header: { description, originalLanguage, abapLanguageVersion? },\n * extendedBehaviorDefintion?: { name?: string }\n * }\n */\n\nimport { createHandler } from '../base';\nimport type { BdefAff } from '../../../schemas/generated';\n\ntype BdefLike = {\n name: string;\n description?: string;\n originalLanguage?: string;\n abapLanguageVersion?: string;\n getSource?: () => Promise<string> | string;\n};\n\nexport const behaviorDefinitionHandler = createHandler('BDEF', {\n toMetadata(obj: BdefLike): BdefAff {\n const lang = (obj.originalLanguage ?? '').toLowerCase();\n return {\n formatVersion: '1',\n header: {\n description: obj.description ?? obj.name ?? '',\n originalLanguage: lang,\n ...(obj.abapLanguageVersion\n ? { abapLanguageVersion: obj.abapLanguageVersion }\n : {}),\n },\n } as BdefAff;\n },\n\n getSource: (obj: BdefLike) =>\n typeof obj.getSource === 'function' ? obj.getSource() : '',\n\n fromMetadata: (meta: BdefAff) => ({\n name: '',\n description: meta.header.description,\n language: meta.header.originalLanguage?.toUpperCase(),\n masterLanguage: meta.header.originalLanguage?.toUpperCase(),\n }),\n});\n","/**\n * SRVD (RAP service definition) handler for gCTS / AFF format.\n *\n * Source-driven: emits `<name>.srvd.acds` (source) + `<name>.srvd.json`\n * (metadata per srvd-v1.json schema).\n *\n * {\n * formatVersion: \"1\",\n * header: { description, originalLanguage, abapLanguageVersion? },\n * generalInformation: { sourceOrigin, sourceType }\n * }\n */\n\nimport { createHandler } from '../base';\nimport type { SrvdAff } from '../../../schemas/generated';\n\ntype SrvdLike = {\n name: string;\n description?: string;\n originalLanguage?: string;\n abapLanguageVersion?: string;\n sourceOrigin?: string;\n sourceType?: string;\n getSource?: () => Promise<string> | string;\n};\n\nexport const serviceDefinitionHandler = createHandler('SRVD', {\n toMetadata(obj: SrvdLike): SrvdAff {\n const lang = (obj.originalLanguage ?? '').toLowerCase();\n return {\n formatVersion: '1',\n header: {\n description: obj.description ?? obj.name ?? '',\n originalLanguage: lang,\n ...(obj.abapLanguageVersion\n ? { abapLanguageVersion: obj.abapLanguageVersion }\n : {}),\n },\n generalInformation: {\n sourceOrigin: obj.sourceOrigin ?? 'abapDevelopmentTools',\n sourceType: obj.sourceType ?? 'definition',\n },\n } as SrvdAff;\n },\n\n getSource: (obj: SrvdLike) =>\n typeof obj.getSource === 'function' ? obj.getSource() : '',\n\n fromMetadata: (meta: SrvdAff) => ({\n name: '',\n description: meta.header.description,\n language: meta.header.originalLanguage?.toUpperCase(),\n masterLanguage: meta.header.originalLanguage?.toUpperCase(),\n sourceOrigin: meta.generalInformation.sourceOrigin,\n sourceType: meta.generalInformation.sourceType,\n }),\n});\n","/**\n * SRVB (RAP service binding) handler for gCTS / AFF format.\n *\n * Metadata-only (no source): emits `<name>.srvb.json` only\n * (metadata per srvb-v1.json schema).\n *\n * {\n * formatVersion: \"1\",\n * header: { description, originalLanguage, abapLanguageVersion? },\n * bindingType: string (required),\n * bindingTypeCategory: \"ui\" | \"webApi\" (required),\n * services: [{ name, versions: [{ serviceVersion, serviceDefinition }] }]\n * }\n */\n\nimport { createHandler } from '../base';\nimport type { SrvbAff } from '../../../schemas/generated';\n\ntype SrvbLike = {\n name: string;\n description?: string;\n originalLanguage?: string;\n abapLanguageVersion?: string;\n bindingType?: string;\n bindingTypeCategory?: string;\n services?: Array<{\n name: string;\n versions: Array<{\n serviceVersion: string;\n serviceBuildVersion?: string;\n serviceDefinition: string;\n }>;\n }>;\n};\n\nexport const serviceBindingHandler = createHandler('SRVB', {\n toMetadata(obj: SrvbLike): SrvbAff {\n const lang = (obj.originalLanguage ?? '').toLowerCase();\n return {\n formatVersion: '1',\n header: {\n description: obj.description ?? obj.name ?? '',\n originalLanguage: lang,\n ...(obj.abapLanguageVersion\n ? { abapLanguageVersion: obj.abapLanguageVersion }\n : {}),\n },\n bindingType: obj.bindingType ?? '',\n bindingTypeCategory: (obj.bindingTypeCategory as 'ui' | 'webApi') ?? 'ui',\n services: obj.services ?? [],\n } as SrvbAff;\n },\n\n fromMetadata: (meta: SrvbAff) => ({\n name: '',\n description: meta.header.description,\n language: meta.header.originalLanguage?.toUpperCase(),\n masterLanguage: meta.header.originalLanguage?.toUpperCase(),\n bindingType: meta.bindingType,\n bindingTypeCategory: meta.bindingTypeCategory,\n services: meta.services,\n }),\n});\n","/**\n * MSAG (message class) handler for gCTS / AFF format.\n *\n * Metadata-only (no source): emits `<name>.msag.json` only\n * (metadata per msag-v1.json schema).\n *\n * {\n * formatVersion: \"1\",\n * header: { description, originalLanguage },\n * messages: [{ number?: string, text?: string }]\n * }\n */\n\nimport { createHandler } from '../base';\nimport type { MsagAff } from '../../../schemas/generated';\n\ntype MsagLike = {\n name: string;\n description?: string;\n originalLanguage?: string;\n messages?: Array<{ number?: string; text?: string }>;\n};\n\nexport const messageClassHandler = createHandler('MSAG', {\n toMetadata(obj: MsagLike): MsagAff {\n const lang = (obj.originalLanguage ?? '').toLowerCase();\n return {\n formatVersion: '1',\n header: {\n description: obj.description ?? obj.name ?? '',\n originalLanguage: lang,\n },\n messages: obj.messages ?? [],\n } as MsagAff;\n },\n\n fromMetadata: (meta: MsagAff) => ({\n name: '',\n description: meta.header.description,\n language: meta.header.originalLanguage?.toUpperCase(),\n masterLanguage: meta.header.originalLanguage?.toUpperCase(),\n messages: meta.messages,\n }),\n});\n","/**\n * Generic AFF handler stubs for the remaining object types.\n *\n * Wave 2 mass-registers handlers for all AFF types that have JSON schemas\n * but no dedicated handler. Each stub runs the schema-aware generic\n * emit/parse from `../../aff/generic`: the `{formatVersion, header}`\n * envelope at the type's latest schema version plus every top-level body\n * property present in the payload — schema-valid whenever the payload is.\n *\n * Types needing semantic mapping, source companions, or special file\n * shapes graduate to a dedicated file (like clas.ts, ddls.ts, …).\n *\n * All types here are registered via the string-type form of\n * `createHandler` — no ADK class required.\n */\n\nimport { createHandler } from '../base';\nimport {\n genericFromMetadata,\n genericGetExtraFiles,\n genericGetSources,\n genericSetSources,\n genericToMetadata,\n type GenericAffLike,\n type MinimalAff,\n} from '../../aff/generic';\n\ntype GenericLike = GenericAffLike;\n\n/**\n * Remaining AFF types with schemas but no dedicated handler.\n * Each is registered with the same minimal toMetadata/fromMetadata.\n */\nconst WAVE2_TYPES = [\n 'ADVC',\n 'AIFA',\n 'AIFD',\n 'AIFF',\n 'AIFI',\n 'AIFN',\n 'AIFP',\n 'AIFR',\n 'AOBJ',\n 'APIC',\n 'APLO',\n 'APOB',\n 'BGQC',\n 'CDBO',\n 'CFDF',\n 'CHDO',\n 'CHKC',\n 'CHKO',\n 'CHKV',\n 'COTA',\n 'CSNM',\n 'DCAT',\n 'DDLA',\n 'DDLX',\n 'DESD',\n 'DMON',\n 'DOBJ',\n 'DRAS',\n 'DRTY',\n 'DSFD',\n 'DSFI',\n 'DTDC',\n 'DTEB',\n 'DTIX',\n 'DTSC',\n 'EDCC',\n 'EDCK',\n 'EDCR',\n 'EDOI',\n 'EEEC',\n 'ENHO',\n 'ENHS',\n 'ENQU',\n 'EVTB',\n 'EVTO',\n 'GSMP',\n 'HTTP',\n 'ILMB',\n 'INTM',\n 'INTS',\n 'IWNG',\n 'NONT',\n 'NROB',\n 'NTTA',\n 'NTTY',\n 'RONT',\n 'RVBC',\n 'SAIA',\n 'SAJC',\n 'SAJT',\n 'SCP1',\n 'SFPF',\n 'SIAD',\n 'SITO',\n 'SMBC',\n 'SMTG',\n 'SPRV',\n 'SRVC',\n 'SUCO',\n 'SUSI',\n 'SWCR',\n 'SXTG',\n 'UIAD',\n 'UIPG',\n 'UIST',\n];\n\nfor (const type of WAVE2_TYPES) {\n createHandler<GenericLike, MinimalAff>(type, {\n toMetadata: genericToMetadata(type.toLowerCase()),\n getSources: genericGetSources,\n getExtraFiles: genericGetExtraFiles(type.toLowerCase()),\n fromMetadata: genericFromMetadata,\n setSources: genericSetSources,\n });\n}\n","/**\n * gCTS / AFF FormatPlugin.\n *\n * Thin adapter that plugs the gCTS handler registry into the generic\n * `FormatPlugin` contract defined by `@abapify/adt-plugin`. External\n * consumers (adt-export, adt-diff, adt-cli) interact with this plugin\n * through the registry only — they look it up with\n * `getFormatPlugin('gcts')` and never import this package directly.\n *\n * Registration happens as a side-effect of importing\n * `@abapify/adt-plugin-gcts` (`src/index.ts`).\n */\n\nimport type { FormatPlugin, FormatHandler } from '@abapify/adt-plugin';\nimport { getHandler, getSupportedTypes } from '../handlers/base';\nimport '../handlers/objects';\nimport { parseGctsFilename } from './filename';\n\nexport const gctsFormatPlugin: FormatPlugin = {\n id: 'gcts',\n description:\n 'gCTS / AFF (abap-file-formats) serialization format (JSON metadata + .abap/.acds sources)',\n\n get supportedTypes(): ReadonlyArray<string> {\n return getSupportedTypes();\n },\n\n getHandler(type: string): FormatHandler | undefined {\n return getHandler(type) as unknown as FormatHandler | undefined;\n },\n\n parseFilename(filename: string) {\n return parseGctsFilename(filename);\n },\n};\n\nexport default gctsFormatPlugin;\n","/**\n * gCTS / AFF Deserializer — disk → ADK (format.export direction).\n *\n * Reads a gCTS-shaped file tree and yields `AdkObject` instances that the\n * `CheckinService` (E08) drives through the regular diff / plan / apply\n * pipeline. This is the counterpart to the serializer implemented in\n * `gcts-plugin.ts` (SAP → disk / format.import).\n *\n * Layout (matches the writer in `gcts-plugin.ts`):\n *\n * src/<pkg-lowercased>/<obj>.<type>.json metadata (AFF JSON)\n * src/<pkg-lowercased>/<obj>.<type>[.<sfx>].abap ABAP sources (and\n * .asddls / .asdcls for\n * CDS).\n * src/<pkg-lowercased>/package.devc.json package metadata (skipped\n * — packages must exist on\n * target, same convention\n * as abapGit).\n *\n * Unlike abapGit this plugin has no `.abapgit.xml` equivalent — AFF does not\n * encode folder-logic. We therefore rely on `options.rootPackage` (or\n * leave `packageRef` unset so downstream apply logic can decide) — no\n * guesswork per directory for now. Richer directory → package mapping is\n * tracked in the E06 follow-ups.\n */\n\nimport type { FileTree, ExportOptions } from '@abapify/adt-plugin';\nimport { createAdk, type AdkObject, type AdtClient } from '@abapify/adk';\nimport {\n getHandler,\n getSupportedTypes,\n type GctsHandler,\n} from './handlers/base';\nimport {\n parseGctsFilename,\n PACKAGE_FILENAME,\n sourceKey,\n} from './format/filename';\n\n/** Source-file extensions emitted by gCTS handlers. `.properties`\n * translation files are deliberately excluded — they are companions\n * routed into `data.properties`, never ABAP source staging. */\nconst SOURCE_EXTENSIONS = new Set([\n 'abap',\n 'asddls',\n 'asdcls',\n 'acds',\n 'abdl',\n 'csn',\n 'xdp',\n 'ddic',\n 'xml',\n]);\n\n/**\n * Map numeric abapLanguageVersion codes (`'5'` etc.) to the descriptive\n * string the ADT REST API expects (`'cloudDevelopment'`). Mirrors the\n * helper in `adt-plugin-abapgit` — kept local so this package does not\n * depend on its sibling.\n */\nconst ABAP_LANG_VER_TO_ADT: Record<string, string> = {\n '2': 'keyUser',\n '5': 'cloudDevelopment',\n};\n\nfunction abapLangVerToAdt(code: string | undefined): string | undefined {\n if (!code) return undefined;\n return ABAP_LANG_VER_TO_ADT[code] ?? code;\n}\n\ninterface ObjectFiles {\n name: string;\n type: string;\n metadataFile?: string;\n sourceFiles: Array<{ path: string; suffix?: string; ext?: string }>;\n /** `{name}.{type}.{docu}.json` companion — not the metadata anchor. */\n docuFile?: string;\n /** `.properties` translations keyed by suffix (`en`, `texts.en`, `''`). */\n propertyFiles: Array<{ path: string; suffix?: string }>;\n}\n\n/**\n * Deserialise a gCTS/AFF file tree into `AdkObject` instances.\n *\n * @param fileTree Virtual FS abstraction (checkin supplies a real-fs impl).\n * @param client `AdtClient` — required by `createAdk` to build ADK objects.\n * @param options Export options. `rootPackage` is assigned as packageRef\n * to every discovered object that lacks one, mirroring the\n * abapGit behaviour when `.abapgit.xml` is absent.\n */\nexport async function* deserialize(\n fileTree: FileTree,\n client: AdtClient,\n options?: ExportOptions,\n): AsyncGenerator<AdkObject> {\n const adk = createAdk(client);\n\n // Scan every JSON file — these are the anchors for each object.\n const jsonFiles = await fileTree.glob('**/*.json');\n\n const supportedTypes = new Set(\n getSupportedTypes().map((t) => t.toLowerCase()),\n );\n\n const objectMap = new Map<string, ObjectFiles>();\n\n for (const jsonPath of jsonFiles) {\n const filename = jsonPath.split('/').pop()!;\n\n // Packages are NOT deployed (same convention as abapGit's\n // package.devc.xml) — they must exist on target.\n if (filename === PACKAGE_FILENAME) continue;\n\n const parsed = parseGctsFilename(filename);\n if (!parsed) continue;\n if (parsed.extension !== 'json') continue;\n if (!supportedTypes.has(parsed.type.toLowerCase())) continue;\n\n const key = `${parsed.name.toUpperCase()}:${parsed.type.toUpperCase()}`;\n if (!objectMap.has(key)) {\n objectMap.set(key, {\n name: parsed.name.toUpperCase(),\n type: parsed.type.toUpperCase(),\n sourceFiles: [],\n propertyFiles: [],\n });\n }\n // `{name}.{type}.docu.json` is a DOCU companion, not a second\n // metadata anchor — without this it can overwrite metadataFile\n // depending on glob order. Other suffixed `.json` companions (LIMU\n // sub-object metadata, `{sub}.{stype}`) flow through the source\n // pipeline with an explicit `json` ext marker.\n if (parsed.suffix === 'docu') {\n objectMap.get(key)!.docuFile = jsonPath;\n } else if (parsed.suffix) {\n objectMap.get(key)!.sourceFiles.push({\n path: jsonPath,\n suffix: parsed.suffix,\n ext: 'json',\n });\n continue;\n } else {\n objectMap.get(key)!.metadataFile = jsonPath;\n }\n }\n\n // `.properties` translation companions — routed into `data.properties`\n // so they round-trip through metadata, not source staging.\n for (const path of await fileTree.glob('**/*.properties')) {\n const filename = path.split('/').pop()!;\n const parsed = parseGctsFilename(filename);\n if (!parsed) continue;\n const key = `${parsed.name.toUpperCase()}:${parsed.type.toUpperCase()}`;\n objectMap.get(key)?.propertyFiles.push({ path, suffix: parsed.suffix });\n }\n\n // Collect every source file (.abap/.asddls/.asdcls) and group by name:type.\n for (const ext of SOURCE_EXTENSIONS) {\n const paths = await fileTree.glob(`**/*.${ext}`);\n for (const path of paths) {\n const filename = path.split('/').pop()!;\n const parsed = parseGctsFilename(filename);\n if (!parsed) continue;\n\n const key = `${parsed.name.toUpperCase()}:${parsed.type.toUpperCase()}`;\n const obj = objectMap.get(key);\n if (!obj) continue;\n\n obj.sourceFiles.push({\n path,\n suffix: parsed.suffix,\n ext: parsed.extension,\n });\n }\n }\n\n // Pre-read all companion + source contents in bounded batches —\n // sequential `await`s inside the object loop both serialize I/O and\n // trip static analysis, while an unbounded Promise.all over thousands\n // of files can exhaust file descriptors (EMFILE). Per-path failures\n // are recorded (not thrown) so one unreadable file fails only its\n // owning object inside the per-object try/catch below.\n const fileContents = new Map<string, string>();\n const readErrors = new Map<string, unknown>();\n const companionPaths = [...objectMap.values()].flatMap((o) => [\n ...(o.docuFile ? [o.docuFile] : []),\n ...o.propertyFiles.map((f) => f.path),\n ...o.sourceFiles.map((f) => f.path),\n ]);\n const READ_BATCH = 32;\n let cursor = 0;\n const readNext = async (): Promise<void> => {\n const path = companionPaths[cursor++];\n if (path === undefined) return;\n try {\n fileContents.set(path, await fileTree.read(path));\n } catch (error) {\n readErrors.set(path, error);\n }\n return readNext();\n };\n await Promise.all(\n Array.from(\n { length: Math.min(READ_BATCH, companionPaths.length) },\n readNext,\n ),\n );\n\n for (const [, objFiles] of objectMap) {\n if (!objFiles.metadataFile) continue;\n\n const handler = getHandler(objFiles.type);\n if (!handler) continue;\n\n try {\n const raw = await fileTree.read(objFiles.metadataFile);\n // Handler schema.parse is plain JSON.parse — the parsed object IS the\n // metadata passed to fromMetadata.\n const metadata = handler.schema.parse(raw);\n yield objectFromFiles(\n objFiles,\n handler,\n metadata,\n fileContents,\n readErrors,\n adk,\n options,\n );\n } catch (error) {\n // Mirrors abapGit: log and continue so one bad object does not abort\n // the whole checkin.\n console.error(\n `Failed to deserialize ${objFiles.type} ${objFiles.name}:`,\n error,\n );\n }\n }\n}\n\n/**\n * Read the collected source/companion files into a source-key map.\n * Companions whose extension differs from the type's default encode it\n * into the key (`{suffix}.{ext}`) — LIMU `.json` metadata and\n * `.properties` texts stay distinguishable from `.abap` sources.\n */\nfunction collectSources(\n objFiles: ObjectFiles,\n handler: GctsHandler,\n contents: ReadonlyMap<string, string>,\n): Record<string, string> {\n const sources: Record<string, string> = {};\n for (const { path, suffix, ext } of objFiles.sourceFiles) {\n const content = contents.get(path);\n if (content === undefined) continue;\n let key: string;\n if (suffix) {\n key = sourceKey(\n objFiles.type,\n handler.suffixToSourceKey?.[suffix] ?? suffix,\n ext ?? '',\n );\n } else if (ext && ext !== 'json') {\n key = sourceKey(objFiles.type, 'main', ext);\n } else {\n key = 'main';\n }\n sources[key] = content;\n }\n return sources;\n}\n\n/**\n * Stage companion keys on an ADK object without a dedicated\n * `setSources` hook — everything lands on `_pendingSources` /\n * `_pendingSource` so the shared emit path in `base.ts` re-emits\n * LIMU/sub-object files instead of silently dropping them.\n */\nfunction stagePendingSources(\n adkObject: AdkObject,\n sources: Record<string, string>,\n): void {\n const staged = adkObject as unknown as {\n _pendingSource?: string;\n _pendingSources?: Record<string, string>;\n };\n const { main, ...rest } = sources;\n if (main !== undefined) staged._pendingSource = main;\n if (Object.keys(rest).length > 0) {\n staged._pendingSources = { ...staged._pendingSources, ...rest };\n }\n}\n\n/** Build the payload record: handler projection + docu + properties. */\nfunction buildPayload(\n objFiles: ObjectFiles,\n handler: GctsHandler,\n metadata: unknown,\n contents: ReadonlyMap<string, string>,\n): { name: string; description?: string; [key: string]: unknown } {\n const payload = (\n handler.fromAbapGit\n ? handler.fromAbapGit(metadata)\n : { name: objFiles.name }\n ) as { name: string; description?: string; [key: string]: unknown };\n\n // DOCU companion → `data.docu` (the shared emit path re-emits it).\n const docuRaw = objFiles.docuFile\n ? contents.get(objFiles.docuFile)\n : undefined;\n if (docuRaw !== undefined) {\n try {\n payload.docu = JSON.parse(docuRaw) as unknown;\n } catch {\n payload.docu = docuRaw;\n }\n }\n\n // `.properties` translations → `data.properties` keyed by suffix\n // ('' = master file, 'en', 'texts.en', …).\n if (objFiles.propertyFiles.length > 0) {\n const props: Record<string, string> = {};\n for (const { path, suffix } of objFiles.propertyFiles) {\n const content = contents.get(path);\n if (content !== undefined) props[suffix ?? ''] = content;\n }\n payload.properties = props;\n }\n return payload;\n}\n\n/** Merge `data.packageRef`/`abapLanguageVersion` fallbacks onto the object. */\nfunction applyOptionsFallbacks(\n adkObject: AdkObject,\n options?: ExportOptions,\n): void {\n const data = (adkObject as unknown as { _data?: Record<string, unknown> })\n ._data;\n if (!data) return;\n // Assign rootPackage to every object without a packageRef — no folder\n // logic available, so we cannot derive per-package assignments (see\n // E06 follow-ups). Matches abapGit's \"no .abapgit.xml\" fallback.\n if (options?.rootPackage && !data.packageRef) {\n data.packageRef = { name: options.rootPackage };\n }\n if (options?.abapLanguageVersion && !data.abapLanguageVersion) {\n data.abapLanguageVersion =\n abapLangVerToAdt(options.abapLanguageVersion) ??\n options.abapLanguageVersion;\n }\n}\n\n/** Metadata + collected files → a staged ADK object. */\nfunction objectFromFiles(\n objFiles: ObjectFiles,\n handler: GctsHandler,\n metadata: unknown,\n contents: ReadonlyMap<string, string>,\n readErrors: ReadonlyMap<string, unknown>,\n adk: ReturnType<typeof createAdk>,\n options?: ExportOptions,\n): AdkObject {\n // Surface any companion read failure here — the caller invokes us\n // inside the per-object try, so one bad file fails only this object.\n for (const path of [\n ...(objFiles.docuFile ? [objFiles.docuFile] : []),\n ...objFiles.propertyFiles.map((f) => f.path),\n ...objFiles.sourceFiles.map((f) => f.path),\n ]) {\n if (readErrors.has(path)) throw readErrors.get(path);\n }\n\n const sources = collectSources(objFiles, handler, contents);\n const payload = buildPayload(objFiles, handler, metadata, contents);\n\n // AFF metadata frequently omits the object name (it's encoded in the\n // filename). Fall back to the filename-derived name.\n const objectName = payload.name || objFiles.name;\n const fullData = { ...payload, name: objectName };\n\n const adkType =\n typeof payload.type === 'string' ? payload.type : objFiles.type;\n const adkObject = adk.getWithData(fullData, adkType) as AdkObject;\n\n if (Object.keys(sources).length > 0) {\n if (handler.setSources) {\n handler.setSources(adkObject, sources);\n } else {\n stagePendingSources(adkObject, sources);\n }\n }\n\n if (payload.description) {\n (\n adkObject as unknown as { _pendingDescription: string }\n )._pendingDescription = payload.description;\n }\n\n // Record relative directory (useful for future directory-based package\n // resolution). Plain metadata dir, no starting-folder normalisation —\n // gCTS does not define one.\n const sourceDir = objFiles.metadataFile!.split('/').slice(0, -1).join('/');\n (adkObject as unknown as { _relDir: string })._relDir = sourceDir;\n\n applyOptionsFallbacks(adkObject, options);\n return adkObject;\n}\n","/**\n * gCTS AdtPlugin.\n *\n * The `FormatPlugin` in `format/gcts-format.ts` provides the declarative\n * contract (used by registry consumers); this `AdtPlugin` provides the\n * behaviour expected by `adt-cli`'s higher-level import/export services.\n *\n * SAP → disk (\"import\") serialises ADK objects to AFF JSON + source files.\n * Disk → SAP (\"export\" in adt-cli terminology — Git → SAP direction) is\n * delegated to `./deserializer.ts`, which yields AdkObjects for the\n * `CheckinService` apply pipeline (E08). Together they close the\n * round-trip that the E06 v0.1 follow-ups called out.\n */\n\nimport { mkdirSync, writeFileSync } from 'node:fs';\nimport { dirname, join } from 'node:path';\nimport { createPlugin, type AdtPlugin } from '@abapify/adt-plugin';\nimport type { AdtClient } from '@abapify/adk';\nimport { getHandler, getSupportedTypes, isSupported } from './handlers/base';\nimport './handlers/objects';\nimport { deserialize } from './deserializer';\n\nexport const gctsPlugin: AdtPlugin = createPlugin({\n name: 'gcts',\n version: '0.1.0',\n description: 'gCTS / AFF format plugin — JSON metadata + .abap/.acds sources',\n\n registry: {\n isSupported,\n getSupportedTypes,\n },\n\n format: {\n async import(object, targetPath, context) {\n try {\n const isPackage = object.type?.startsWith('DEVC');\n const objPackage = isPackage\n ? object.name\n : (object as { package?: string }).package || object.name || 'ROOT';\n const packagePath = await context.resolvePackagePath(objPackage);\n\n // gCTS layout: flat per-package directory under src/<package-path>/.\n // Object files live directly inside their package dir (no extra\n // per-object subdirectory — matches AFF's default \"flat\" layout).\n const packageDir = packagePath.map((p) => p.toLowerCase()).join('/');\n\n const handler = getHandler(object.type);\n if (!handler) {\n return {\n success: false,\n filesCreated: [],\n errors: [\n `No gCTS handler registered for object type: ${object.type}`,\n ],\n };\n }\n\n const files = await handler.serialize(object as unknown as never);\n const baseDir = join(targetPath, 'src', packageDir);\n mkdirSync(baseDir, { recursive: true });\n\n const written: string[] = [];\n for (const f of files) {\n const full = join(baseDir, f.path);\n mkdirSync(dirname(full), { recursive: true });\n writeFileSync(full, f.content, f.encoding ?? 'utf8');\n written.push(full);\n }\n\n return { success: true, filesCreated: written };\n } catch (error) {\n return {\n success: false,\n filesCreated: [],\n errors: [error instanceof Error ? error.message : String(error)],\n };\n }\n },\n\n // Git → SAP: deserialise a gCTS/AFF file tree into AdkObjects. The\n // apply pipeline (diff/plan/lock/save) lives in CheckinService — this\n // plugin only knows how to decode its own on-disk layout.\n export: (fileTree, client, options?) =>\n deserialize(fileTree, client as AdtClient, options),\n },\n});\n\nexport default gctsPlugin;\nexport { gctsPlugin as GctsPlugin };\n","/**\n * Auto-generated from SAP/abap-file-formats JSON schemas.\n * Do not edit — regenerate with `bun scripts/generate-aff-schemas.ts`.\n */\n/**\n * Format version\n */\nexport type FormatVersion = \"1\"\n/**\n * Description of the ABAP object\n */\nexport type Description = string\n/**\n * Original language of the ABAP object\n */\nexport type OriginalLanguage = string\n/**\n * ABAP language version\n */\nexport type ABAPLanguageVersion = (\"standard\" | \"keyUser\" | \"cloudDevelopment\")\n\n/**\n * App variant\n */\nexport interface AffAdvcV1 {\nformatVersion: FormatVersion\nheader: Header\n}\n/**\n * Header\n */\nexport interface Header {\ndescription: Description\noriginalLanguage: OriginalLanguage\nabapLanguageVersion?: ABAPLanguageVersion\n}\n\nexport type AdvcAff = AffAdvcV1;\n","/**\n * Auto-generated from SAP/abap-file-formats JSON schemas.\n * Do not edit — regenerate with `bun scripts/generate-aff-schemas.ts`.\n */\n/**\n * The ABAP file format version\n */\nexport type ABAPFileFormatVersion = \"1\"\n/**\n * Description of the ABAP object\n */\nexport type Description = string\n/**\n * Original language of the ABAP object\n */\nexport type OriginalLanguage = string\n/**\n * ABAP language version\n */\nexport type ABAPLanguageVersion = (\"standard\" | \"cloudDevelopment\")\n/**\n * Namespace\n */\nexport type Namespace = string\n/**\n * AIF action\n */\nexport type AIFAction = string\n/**\n * Main component type\n */\nexport type MainComponentType = string\n/**\n * Implementing class\n */\nexport type ImplementingClass = string\n/**\n * Name\n */\nexport type Name = string\n/**\n * Fields to restore\n */\nexport type FieldsToRestore = FieldToRestore[]\n/**\n * ID\n */\nexport type ID = string\n/**\n * Check\n */\nexport type Check = string\n/**\n * Check behavior\n */\nexport type CheckBehavior = (\"treatAsError\" | \"ignoreData\")\n/**\n * Type\n */\nexport type Type = (\"sourceStructure\" | \"destinationStructure\" | \"constant\" | \"systemField\" | \"sendingSystem\" | \"currentLineNumber\" | \"hierarchicalMapping\")\n/**\n * Name\n */\nexport type Name1 = string\n/**\n * Value\n */\nexport type Value = string\n/**\n * Fields\n */\nexport type Fields = FieldsToCheck[]\n/**\n * Checks\n */\nexport type Checks = CheckDetails[]\n\n/**\n * Action\n */\nexport interface AffAifaV1 {\nformatVersion: ABAPFileFormatVersion\nheader: Header\ngeneralInformation: GeneralInformation\nfieldsToRestore?: FieldsToRestore\nchecks?: Checks\n}\n/**\n * Header\n */\nexport interface Header {\ndescription: Description\noriginalLanguage: OriginalLanguage\nabapLanguageVersion?: ABAPLanguageVersion\n}\n/**\n * General information\n */\nexport interface GeneralInformation {\nnamespace: Namespace\naifAction: AIFAction\nmainComponentType?: MainComponentType\nimplementingClass?: ImplementingClass\n}\n/**\n * Field to restore\n */\nexport interface FieldToRestore {\nname?: Name\n}\n/**\n * Check details\n */\nexport interface CheckDetails {\nid: ID\ncheck: Check\ncheckBehaviour?: CheckBehavior\nfields?: Fields\n}\n/**\n * Field to check\n */\nexport interface FieldsToCheck {\ntype?: Type\nname?: Name1\nvalue?: Value\n}\n\nexport type AifaAff = AffAifaV1;\n","/**\n * Auto-generated from SAP/abap-file-formats JSON schemas.\n * Do not edit — regenerate with `bun scripts/generate-aff-schemas.ts`.\n */\n/**\n * The ABAP file format version\n */\nexport type ABAPFileFormatVersion = \"1\"\n/**\n * Description of the ABAP object\n */\nexport type Description = string\n/**\n * Original language of the ABAP object\n */\nexport type OriginalLanguage = string\n/**\n * ABAP language version\n */\nexport type ABAPLanguageVersion = (\"standard\" | \"cloudDevelopment\")\n/**\n * Application interface\n */\nexport type ApplicationInterface1 = string\n/**\n * Application interfaces\n */\nexport type ApplicationInterfaces = ApplicationInterface[]\n\n/**\n * Deployment scenario\n */\nexport interface AffAifdV1 {\nformatVersion: ABAPFileFormatVersion\nheader: Header\napplicationInterfaces: ApplicationInterfaces\n}\n/**\n * Header\n */\nexport interface Header {\ndescription: Description\noriginalLanguage: OriginalLanguage\nabapLanguageVersion?: ABAPLanguageVersion\n}\n/**\n * Application interface\n */\nexport interface ApplicationInterface {\napplicationInterface: ApplicationInterface1\n}\n\nexport type AifdAff = AffAifdV1;\n","/**\n * Auto-generated from SAP/abap-file-formats JSON schemas.\n * Do not edit — regenerate with `bun scripts/generate-aff-schemas.ts`.\n */\n/**\n * The ABAP file format version\n */\nexport type ABAPFileFormatVersion = \"1\"\n/**\n * Description of the ABAP object\n */\nexport type Description = string\n/**\n * Original language of the ABAP object\n */\nexport type OriginalLanguage = string\n/**\n * ABAP language version\n */\nexport type ABAPLanguageVersion = (\"standard\" | \"cloudDevelopment\")\n/**\n * Namespace\n */\nexport type Namespace = string\n/**\n * AIF fix value\n */\nexport type AIFFixValue = string\n/**\n * Field value\n */\nexport type FieldValue = string\n\n/**\n * Fix value\n */\nexport interface AffAiffV1 {\nformatVersion: ABAPFileFormatVersion\nheader: Header\ngeneralInformation: GeneralInformation\n}\n/**\n * Header\n */\nexport interface Header {\ndescription: Description\noriginalLanguage: OriginalLanguage\nabapLanguageVersion?: ABAPLanguageVersion\n}\n/**\n * General information\n */\nexport interface GeneralInformation {\nnamespace: Namespace\naifFixValue: AIFFixValue\nfieldValue?: FieldValue\n}\n\nexport type AiffAff = AffAiffV1;\n","/**\n * Auto-generated from SAP/abap-file-formats JSON schemas.\n * Do not edit — regenerate with `bun scripts/generate-aff-schemas.ts`.\n */\n/**\n * The ABAP file format version\n */\nexport type ABAPFileFormatVersion = \"1\"\n/**\n * Description of the ABAP object\n */\nexport type Description = string\n/**\n * Original language of the ABAP object\n */\nexport type OriginalLanguage = string\n/**\n * ABAP language version\n */\nexport type ABAPLanguageVersion = (\"standard\" | \"cloudDevelopment\")\n/**\n * Integration type\n */\nexport type IntegrationType = string\n/**\n * Scenario\n */\nexport type Scenario = string\n/**\n * SOAP class\n */\nexport type SOAPClass = string\n/**\n * SOAP method\n */\nexport type SOAPMethod = string\n/**\n * SOAP record type\n */\nexport type SOAPRecordType = string\n/**\n * Use proxy xml transformation\n */\nexport type ProxyXMLTransformation = boolean\n/**\n * Extend xml handling\n */\nexport type ExtendXMLHandling = boolean\n/**\n * Repository id\n */\nexport type RepositoryID = string\n/**\n * Registration id\n */\nexport type RegistrationID = string\n/**\n * Registration version\n */\nexport type RegistrationVersion = string\n/**\n * Topic\n */\nexport type Topic = string\n/**\n * Operation id\n */\nexport type OperationID = string\n/**\n * Operation variant id\n */\nexport type OperationVariantID = string\n/**\n * Operation variant\n */\nexport type OperationVariant = string\n/**\n * Namespace\n */\nexport type Namespace = string\n/**\n * AIF interface name\n */\nexport type AIFInterfaceName = string\n/**\n * AIF interface version\n */\nexport type AIFInterfaceVersion = string\n/**\n * Data structure\n */\nexport type DataStructure = string\n/**\n * Mapped data structure\n */\nexport type MappedDataStructure = string\n/**\n * Index table\n */\nexport type IndexTable = string\n/**\n * Interface display name\n */\nexport type InterfaceDisplayName = string\n/**\n * Retention period\n */\nexport type RetentionPeriod = string\n/**\n * Expiration_behavior\n */\nexport type ExpirationBehavior = (\"delete\" | \"archive\")\n/**\n * Path for sending system in data structure\n */\nexport type SendingSystem = string\n/**\n * Direction\n */\nexport type Direction = (\"inbound\" | \"outbound\" | \"both\" | \"internal\")\n/**\n * Preprocessing\n */\nexport type Preprocessing = boolean\n/**\n * Postprocessing\n */\nexport type Postprocessing = boolean\n/**\n * Recipient\n */\nexport type Recipient1 = string\n/**\n * Recipient assignment\n */\nexport type RecipientAssignment = Recipient[]\n/**\n * Sequence\n */\nexport type Sequence = string\n/**\n * Component\n */\nexport type Component = string\n/**\n * Changeable\n */\nexport type Changeable = boolean\n/**\n * Hidden\n */\nexport type Hidden = boolean\n/**\n * Use ddic description?\n */\nexport type UseDDIC = boolean\n/**\n * Description\n */\nexport type Description1 = string\n/**\n * Short text\n */\nexport type ShortText = string\n/**\n * Medium text\n */\nexport type MediumText = string\n/**\n * Long text\n */\nexport type LongText = string\n/**\n * Error handling configuration\n */\nexport type ErrorHandlingConfiguration = ErrorHandlingConfiguration1[]\n/**\n * Application engine\n */\nexport type ApplicationEngine = string\n/**\n * Persistency engine\n */\nexport type PersistencyEngine = string\n/**\n * Selection engine\n */\nexport type SelectionEngine = string\n/**\n * Logging engine\n */\nexport type LoggingEngine = string\n/**\n * Key field name\n */\nexport type Name = string\n/**\n * Data element\n */\nexport type DataElement = string\n/**\n * Name of select-option/parameter\n */\nexport type NameOfSelectOptionParameter = string\n/**\n * Field name in define key fields\n */\nexport type FieldName = string\n/**\n * Structure type (source or destination)\n */\nexport type StructureType = (\"sourceStructure\" | \"destinationStructure\")\n/**\n * Is select-option?\n */\nexport type SelectOption = boolean\n/**\n * Display the column\n */\nexport type DisplayColumn = boolean\n/**\n * Enable key field qualifier?\n */\nexport type EnableKeyFieldQualifier = boolean\n/**\n * Qualifier field name\n */\nexport type QualifierFieldName = string\n/**\n * Qualifier operator\n */\nexport type QualifierOperator = (\"equals\" | \"between\" | \"greaterThan\" | \"containsPattern\" | \"notEqual\" | \"notBetween\" | \"notContainsPattern\" | \"greaterEqual\" | \"lessThan\" | \"lessEqual\")\n/**\n * Qualifier value\n */\nexport type QualifierValue = string\n/**\n * Selection type\n */\nexport type SelectionType = (\"single\" | \"multiple\" | \"document\")\n/**\n * Message index table\n */\nexport type MessageIndexTable = string\n/**\n * Parent field sequence number\n */\nexport type ParentFieldSequenceNumber = string\n/**\n * Icon\n */\nexport type Icon = string\n/**\n * Icon tooltip\n */\nexport type IconTooltip = string\n/**\n * Field name in alert recipient assignment table\n */\nexport type AlertRecipientFieldName = string\n/**\n * Category field name\n */\nexport type CategoryFieldName = string\n/**\n * Show tree node in view 1 tree\n */\nexport type ShowTreeNode = boolean\n/**\n * Relevant for alert recipient determination\n */\nexport type RelevantForAlertRecipientDetermination = boolean\n/**\n * Rule Key field name\n */\nexport type Name1 = string\n/**\n * Field sequence number\n */\nexport type FieldSequenceNumber = string\n/**\n * Rule key fields\n */\nexport type RuleKeyFields = RuleKeyField[]\n/**\n * Key Field Rule class\n */\nexport type KeyFieldRuleClass = string\n/**\n * Key field rule method\n */\nexport type KeyFieldRuleMethod = string\n/**\n * Semantic object\n */\nexport type SemanticObject = string\n/**\n * Semantic action\n */\nexport type SemanticAction = string\n/**\n * Display in message monitoring\n */\nexport type DisplayInMessageMonitoring = boolean\n/**\n * Display in message monitoring by default\n */\nexport type DisplayInMessageMonitoringByDefault = boolean\n/**\n * Key fields\n */\nexport type KeyFields = KeyFieldDetails[]\n\n/**\n * Application interface\n */\nexport interface AffAifiV1 {\nformatVersion: ABAPFileFormatVersion\nheader: Header\ngeneralInformation: GeneralInformation\nrecipientAssignment: RecipientAssignment\nerrorHandlingConfigs: ErrorHandlingConfiguration\nengines: Engines\nkeyFields: KeyFields\n}\n/**\n * Header\n */\nexport interface Header {\ndescription: Description\noriginalLanguage: OriginalLanguage\nabapLanguageVersion?: ABAPLanguageVersion\n}\n/**\n * General information\n */\nexport interface GeneralInformation {\nintegrationType?: IntegrationType\nscenario?: Scenario\nsoapSettings?: SOAPSettings\neventSettings?: EventSettings\nbgpfSettings?: BgPFSettings\nnamespace?: Namespace\ninterfaceName?: AIFInterfaceName\ninterfaceVersion?: AIFInterfaceVersion\ndataStructure: DataStructure\nmappedDataStructure?: MappedDataStructure\nindexTable: IndexTable\ndisplayName?: InterfaceDisplayName\nretentionPeriod?: RetentionPeriod\nexpirationBehavior?: ExpirationBehavior\nsendingSystem?: SendingSystem\ndirection?: Direction\nusesPreprocessing?: Preprocessing\nusesPostprocesssing?: Postprocessing\n}\n/**\n * SOAP settings\n */\nexport interface SOAPSettings {\nsoapClass: SOAPClass\nsoapMethod: SOAPMethod\nsoapRecordType: SOAPRecordType\nusesProxyXmlTransformation?: ProxyXMLTransformation\nusesExtendedXmlHandling?: ExtendXMLHandling\n}\n/**\n * Event settings\n */\nexport interface EventSettings {\nrepositoryId: RepositoryID\nregistrationId: RegistrationID\nregistrationVersion: RegistrationVersion\ntopic: Topic\n}\n/**\n * Background processing framework settings\n */\nexport interface BgPFSettings {\noperationId: OperationID\noperationVariantId: OperationVariantID\noperationVariant: OperationVariant\n}\n/**\n * Recipient\n */\nexport interface Recipient {\nrecipient: Recipient1\n}\n/**\n * Error handling configuration\n */\nexport interface ErrorHandlingConfiguration1 {\nsequence: Sequence\ncomponent: Component\nisChangeable?: Changeable\nisHidden?: Hidden\nusesDdic?: UseDDIC\ndescription?: Description1\nshortText?: ShortText\nmediumText?: MediumText\nlongText?: LongText\n}\n/**\n * Engines\n */\nexport interface Engines {\napplicationEngine?: ApplicationEngine\npersistencyEngine?: PersistencyEngine\nselectionEngine?: SelectionEngine\nloggingEngine?: LoggingEngine\n}\n/**\n * Key field details\n */\nexport interface KeyFieldDetails {\nname: Name\ndataElement: DataElement\nselectOptionName?: NameOfSelectOptionParameter\nfieldName?: FieldName\nstructureType?: StructureType\nisSelectOption?: SelectOption\nisColumnDisplay?: DisplayColumn\nkeyFieldQualifier?: KeyFieldDeterminationByQualifier\nkeyFieldSelection?: KeyFieldSelection\nkeyFieldRule?: KeyFieldRule\nfioriFeatures?: SAPFioriFeatures\n}\n/**\n * Key field determination by qualifier\n */\nexport interface KeyFieldDeterminationByQualifier {\nusesQualifier?: EnableKeyFieldQualifier\nqualifierFieldName?: QualifierFieldName\nqualifierOperator?: QualifierOperator\nqualifierValue?: QualifierValue\n}\n/**\n * Key field selection type and settings\n */\nexport interface KeyFieldSelection {\nselectionType?: SelectionType\nmessageIndexTable?: MessageIndexTable\nparentFieldSequence?: ParentFieldSequenceNumber\nicon?: Icon\niconTooltip?: IconTooltip\nalertFieldName?: AlertRecipientFieldName\ncategoryFieldName?: CategoryFieldName\nisTreeNodeVisible?: ShowTreeNode\nisAlertRecipientRelevant?: RelevantForAlertRecipientDetermination\n}\n/**\n * Key field rule\n */\nexport interface KeyFieldRule {\nruleKeyFields?: RuleKeyFields\nruleClass?: KeyFieldRuleClass\nruleMethod?: KeyFieldRuleMethod\n}\n/**\n * Rule key field\n */\nexport interface RuleKeyField {\nname?: Name1\nfieldSequnceNumber?: FieldSequenceNumber\n}\n/**\n * SAP Fiori specific features\n */\nexport interface SAPFioriFeatures {\nsemanticObject?: SemanticObject\nsemanticAction?: SemanticAction\nisShownInMessageMonitor?: DisplayInMessageMonitoring\nisShownByDefault?: DisplayInMessageMonitoringByDefault\n}\n\nexport type AifiAff = AffAifiV1;\n","/**\n * Auto-generated from SAP/abap-file-formats JSON schemas.\n * Do not edit — regenerate with `bun scripts/generate-aff-schemas.ts`.\n */\n/**\n * The ABAP file format version\n */\nexport type ABAPFileFormatVersion = \"1\"\n/**\n * Description of the ABAP object\n */\nexport type Description = string\n/**\n * Original language of the ABAP object\n */\nexport type OriginalLanguage = string\n/**\n * ABAP language version\n */\nexport type ABAPLanguageVersion = (\"standard\" | \"cloudDevelopment\")\n/**\n * AIF namespace\n */\nexport type AIFNamespace = string\n\n/**\n * Namespace\n */\nexport interface AffAifnV1 {\nformatVersion: ABAPFileFormatVersion\nheader: Header\ngeneralInformation: GeneralInformation\n}\n/**\n * Header\n */\nexport interface Header {\ndescription: Description\noriginalLanguage: OriginalLanguage\nabapLanguageVersion?: ABAPLanguageVersion\n}\n/**\n * General information\n */\nexport interface GeneralInformation {\naifNamespace?: AIFNamespace\n}\n\nexport type AifnAff = AffAifnV1;\n","/**\n * Auto-generated from SAP/abap-file-formats JSON schemas.\n * Do not edit — regenerate with `bun scripts/generate-aff-schemas.ts`.\n */\n/**\n * The ABAP file format version\n */\nexport type ABAPFileFormatVersion = \"1\"\n/**\n * Description of the ABAP object\n */\nexport type Description = string\n/**\n * Original language of the ABAP object\n */\nexport type OriginalLanguage = string\n/**\n * ABAP language version\n */\nexport type ABAPLanguageVersion = (\"standard\" | \"cloudDevelopment\")\n/**\n * Namespace of the check\n */\nexport type Namespace = string\n/**\n * SAP Application Interface check\n */\nexport type AIFCheck = string\n/**\n * Message class\n */\nexport type MessageClass = string\n/**\n * Message number\n */\nexport type MessageNumber = string\n/**\n * Number\n */\nexport type Number = number\n/**\n * Type\n */\nexport type Type = (\"constant\" | \"systemField\" | \"definedField\")\n/**\n * Field\n */\nexport type Field = string\n/**\n * Value\n */\nexport type Value = string\n/**\n * Message variable assignments\n */\nexport type MessageVariableAssignments = VariableList[]\n/**\n * Description\n */\nexport type Description1 = string\n/**\n * ID\n */\nexport type ID = string\n/**\n * Scenario\n */\nexport type Scenario = (\"simpleFieldCheck\" | \"advancedFieldCheck\" | \"simpleFieldAndDbCheck\" | \"advancedFieldAndDbCheck\" | \"databaseCheck\" | \"customImplementation\")\n/**\n * Check type\n */\nexport type CheckType = (\"empty\" | \"notEmpty\" | \"emptyOrZero\" | \"numericInteger\" | \"numericEmpty\" | \"numericNegative\" | \"numericComma\" | \"numericDot\" | \"onlyCharsCapital\" | \"onlyCharsLower\" | \"onlyChars\" | \"alphanumericSpecialUmlaut\")\n/**\n * Operator for field check\n */\nexport type Operator = (\"equals\" | \"between\" | \"greaterThan\" | \"containsPattern\" | \"notEqual\" | \"notBetween\" | \"notContainsPattern\" | \"greaterEqual\" | \"lessThan\" | \"lessEqual\")\n/**\n * Field type\n */\nexport type FieldType = (\"definedField\" | \"pattern\" | \"systemField\")\n/**\n * Field\n */\nexport type Field1 = string\n/**\n * Value or pattern for Field Check\n */\nexport type Value1 = string\n/**\n * Table\n */\nexport type Table = string\n/**\n * Where Condition for Select Statement\n */\nexport type WhereConditionForSelectStatement = string\n/**\n * Check type\n */\nexport type CheckType1 = (\"checkExistence\" | \"checkNonExistence\" | \"compare\")\n/**\n * Field Name for Comparison\n */\nexport type FieldNameForComparison = string\n/**\n * Operator for database check\n */\nexport type Operator1 = (\"equals\" | \"between\" | \"greaterThan\" | \"containsPattern\" | \"notEqual\" | \"notBetween\" | \"notContainsPattern\" | \"greaterEqual\" | \"lessThan\" | \"lessEqual\")\n/**\n * Field type\n */\nexport type FieldType1 = (\"definedField\" | \"pattern\" | \"systemField\")\n/**\n * Field\n */\nexport type Field2 = string\n/**\n * Value or pattern for database check\n */\nexport type Value2 = string\n/**\n * Class name for check\n */\nexport type Class = string\n/**\n * Message class\n */\nexport type MessageClass1 = string\n/**\n * Message number\n */\nexport type MessageNumber1 = string\n/**\n * Number\n */\nexport type Number1 = number\n/**\n * Type\n */\nexport type Type1 = (\"constant\" | \"systemField\" | \"definedField\")\n/**\n * Field\n */\nexport type Field3 = string\n/**\n * Value\n */\nexport type Value3 = string\n/**\n * Message variable assignments\n */\nexport type MessageVariableAssignments1 = VariableList1[]\n/**\n * Single check assignments\n */\nexport type SingleCheckAssignments = SingleCheck[]\n\n/**\n * Check\n */\nexport interface AffAifpV1 {\nformatVersion: ABAPFileFormatVersion\nheader: Header\ngeneralInformation: GeneralInformation\nerrorMessage?: ErrorMessage\nsingleCheckAssignments: SingleCheckAssignments\n}\n/**\n * Header\n */\nexport interface Header {\ndescription: Description\noriginalLanguage: OriginalLanguage\nabapLanguageVersion?: ABAPLanguageVersion\n}\n/**\n * General information\n */\nexport interface GeneralInformation {\nnamespace: Namespace\naifCheck: AIFCheck\n}\n/**\n * Error message\n */\nexport interface ErrorMessage {\nmessageClass?: MessageClass\nmessageNumber?: MessageNumber\nvariableAssignments?: MessageVariableAssignments\n}\n/**\n * Variable list\n */\nexport interface VariableList {\nnumber?: Number\ntype?: Type\nfield?: Field\nvalue?: Value\n}\n/**\n * Single check\n */\nexport interface SingleCheck {\ndescription: Description1\nid: ID\nscenario?: Scenario\nfieldCheck?: FieldCheck\ndatabaseCheck?: DatabaseCheck\ncustomImplementation?: CustomImplementation\nsuccessMessage?: SuccessMessage\n}\n/**\n * Field check\n */\nexport interface FieldCheck {\ncheckType?: CheckType\noperator?: Operator\nfieldType?: FieldType\nfield?: Field1\nvalue?: Value1\n}\n/**\n * Database check\n */\nexport interface DatabaseCheck {\ntable?: Table\nwhereCondition?: WhereConditionForSelectStatement\ncheckType?: CheckType1\nfieldName?: FieldNameForComparison\noperator?: Operator1\nfieldType?: FieldType1\nfield?: Field2\nvalue?: Value2\n}\n/**\n * Custom implementation\n */\nexport interface CustomImplementation {\nclass?: Class\n}\n/**\n * Success message\n */\nexport interface SuccessMessage {\nmessageClass?: MessageClass1\nmessageNumber?: MessageNumber1\nvariableAssignments?: MessageVariableAssignments1\n}\n/**\n * Variable list\n */\nexport interface VariableList1 {\nnumber?: Number1\ntype?: Type1\nfield?: Field3\nvalue?: Value3\n}\n\nexport type AifpAff = AffAifpV1;\n","/**\n * Auto-generated from SAP/abap-file-formats JSON schemas.\n * Do not edit — regenerate with `bun scripts/generate-aff-schemas.ts`.\n */\n/**\n * The ABAP file format version\n */\nexport type ABAPFileFormatVersion = \"1\"\n/**\n * Description of the ABAP object\n */\nexport type Description = string\n/**\n * Original language of the ABAP object\n */\nexport type OriginalLanguage = string\n/**\n * ABAP language version\n */\nexport type ABAPLanguageVersion = (\"standard\" | \"cloudDevelopment\")\n/**\n * Namespace of the recipient\n */\nexport type Namespace = string\n/**\n * SAP Application Interface recipient\n */\nexport type AIFRecipient = string\n\n/**\n * Recipient\n */\nexport interface AffAifrV1 {\nformatVersion: ABAPFileFormatVersion\nheader: Header\ngeneralInformation: GeneralInformation\n}\n/**\n * Header\n */\nexport interface Header {\ndescription: Description\noriginalLanguage: OriginalLanguage\nabapLanguageVersion?: ABAPLanguageVersion\n}\n/**\n * General information\n */\nexport interface GeneralInformation {\nnamespace: Namespace\naifRecipient: AIFRecipient\n}\n\nexport type AifrAff = AffAifrV1;\n","/**\n * Auto-generated from SAP/abap-file-formats JSON schemas.\n * Do not edit — regenerate with `bun scripts/generate-aff-schemas.ts`.\n */\n/**\n * The ABAP file format version\n */\nexport type ABAPFileFormatVersion = \"1\"\n/**\n * Description of the ABAP object\n */\nexport type Description = string\n/**\n * Original language of the ABAP object\n */\nexport type OriginalLanguage = string\n/**\n * ABAP language version\n */\nexport type ABAPLanguageVersion = (\"standard\" | \"cloudDevelopment\")\n/**\n * Name of executable class or program which writes the data to the archive\n */\nexport type WriteClass = string\n/**\n * Name of executable class or program which deletes the data from the tables\n */\nexport type DeleteClass = string\n/**\n * Name of executable class or program which reloads the data to the tables (may be empty)\n */\nexport type ReloadClass = string\n/**\n * Name of class which stores and retrieves archived data. The class needs to implement the interface IF_ARCH_STORAGE_MANAGER.\n */\nexport type StorageClass = string\n/**\n * Name of table or structure\n */\nexport type Name = string\n/**\n * Tables of business object instance from which data is archived.\n */\nexport type TablesToBeArchived = TableToBeArchived[]\n/**\n * Name of archiving class\n */\nexport type Name1 = string\n/**\n * Archiving classes are no ABAP classes, but IDs of reuse objects, whose data should be archived Together with the business object instance (for example change documents).\n */\nexport type ArchivingClasses = NameOfArchivingClass[]\n\n/**\n * Archiving Object (AOBJ) v1\n */\nexport interface AffAobjV1 {\nformatVersion: ABAPFileFormatVersion\nheader: Header\nattributes: Attributes\ntablesToBeArchived: TablesToBeArchived\narchivingClasses: ArchivingClasses\n}\n/**\n * Header\n */\nexport interface Header {\ndescription: Description\noriginalLanguage: OriginalLanguage\nabapLanguageVersion?: ABAPLanguageVersion\n}\n/**\n * Attributes of an archiving object\n */\nexport interface Attributes {\nwriteClass: WriteClass\ndeleteClass: DeleteClass\nreloadClass?: ReloadClass\nstorageClass: StorageClass\n}\n/**\n * Tables of business object instance from which data is archived\n */\nexport interface TableToBeArchived {\nname: Name\n}\n/**\n * Archiving classes are no ABAP classes, but IDs of reuse objects, whose data should be archived Together with the business object instance (for example change documents).\n */\nexport interface NameOfArchivingClass {\nname: Name1\n}\n\nexport type AobjAff = AffAobjV1;\n","/**\n * Auto-generated from SAP/abap-file-formats JSON schemas.\n * Do not edit — regenerate with `bun scripts/generate-aff-schemas.ts`.\n */\n/**\n * The ABAP file format version\n */\nexport type ABAPFileFormatVersion = \"1\"\n/**\n * Description of the ABAP object\n */\nexport type Description = string\n/**\n * Original language of the ABAP object\n */\nexport type OriginalLanguage = string\n/**\n * ABAP language version\n */\nexport type ABAPLanguageVersion = (\"standard\" | \"cloudDevelopment\")\n\n/**\n * API catalog\n */\nexport interface AffApicV1 {\nformatVersion: ABAPFileFormatVersion\nheader: Header\n}\n/**\n * Header\n */\nexport interface Header {\ndescription: Description\noriginalLanguage: OriginalLanguage\nabapLanguageVersion?: ABAPLanguageVersion\n}\n\nexport type ApicAff = AffApicV1;\n","/**\n * Auto-generated from SAP/abap-file-formats JSON schemas.\n * Do not edit — regenerate with `bun scripts/generate-aff-schemas.ts`.\n */\n/**\n * The ABAP file format version\n */\nexport type ABAPFileFormatVersion = \"1\"\n/**\n * Description of the ABAP object\n */\nexport type Description = string\n/**\n * Original language of the ABAP object\n */\nexport type OriginalLanguage = string\n/**\n * ABAP language version\n */\nexport type ABAPLanguageVersion = (\"standard\" | \"cloudDevelopment\")\n/**\n * Name of the subobject\n */\nexport type Name = string\n/**\n * Description text of the subobject\n */\nexport type Description1 = string\n/**\n * Table of all subobjects (may be empty)\n */\nexport type Subobjects = Subobject[]\n\n/**\n * Attributes of the application log object\n */\nexport interface AffAploV1 {\nformatVersion: ABAPFileFormatVersion\nheader: Header\nsubobjects: Subobjects\n}\n/**\n * Header\n */\nexport interface Header {\ndescription: Description\noriginalLanguage: OriginalLanguage\nabapLanguageVersion?: ABAPLanguageVersion\n}\n/**\n * Attributes of the subobject\n */\nexport interface Subobject {\nname: Name\ndescription?: Description1\n}\n\nexport type AploAff = AffAploV1;\n","/**\n * Auto-generated from SAP/abap-file-formats JSON schemas.\n * Do not edit — regenerate with `bun scripts/generate-aff-schemas.ts`.\n */\n/**\n * Format version\n */\nexport type FormatVersion = \"1\"\n/**\n * Description of the ABAP object\n */\nexport type Description = string\n/**\n * Original language of the ABAP object\n */\nexport type OriginalLanguage = string\n/**\n * ABAP language version\n */\nexport type ABAPLanguageVersion = (\"standard\" | \"keyUser\" | \"cloudDevelopment\")\n/**\n * Name of key table or structure for application object\n */\nexport type KeyTableOrStructure = string\n/**\n * Name of the SAP object\n */\nexport type SAPObject = string\n/**\n * Name of the data category\n */\nexport type DataCategory = string\n/**\n * Name of the ILM object\n */\nexport type ILMObject = string\n\n/**\n * Type of application object\n */\nexport interface AffApobV1 {\nformatVersion: FormatVersion\nheader: Header\nattributes: Attributes\n}\n/**\n * Header\n */\nexport interface Header {\ndescription: Description\noriginalLanguage: OriginalLanguage\nabapLanguageVersion?: ABAPLanguageVersion\n}\n/**\n * Attributes of the application object\n */\nexport interface Attributes {\naoKeyStructure?: KeyTableOrStructure\nsapObject?: SAPObject\ndataCategory?: DataCategory\nilmObject?: ILMObject\n}\n\nexport type ApobAff = AffApobV1;\n","/**\n * Auto-generated from SAP/abap-file-formats JSON schemas.\n * Do not edit — regenerate with `bun scripts/generate-aff-schemas.ts`.\n */\n/**\n * The ABAP file format version\n */\nexport type ABAPFileFormatVersion = \"1\"\n/**\n * Description of the ABAP object\n */\nexport type Description = string\n/**\n * Original language of the ABAP object\n */\nexport type OriginalLanguage = string\n/**\n * ABAP language version\n */\nexport type ABAPLanguageVersion = (\"standard\" | \"keyUser\" | \"cloudDevelopment\")\n/**\n * Name\n */\nexport type Name = string\n\n/**\n * Bdef object type\n */\nexport interface AffBdefV1 {\nformatVersion: ABAPFileFormatVersion\nheader: Header\nextendedBehaviorDefintion?: ExtendedBehaviorDefinition\n}\n/**\n * Header\n */\nexport interface Header {\ndescription: Description\noriginalLanguage: OriginalLanguage\nabapLanguageVersion?: ABAPLanguageVersion\n}\n/**\n * Extended Behavior Definition\n */\nexport interface ExtendedBehaviorDefinition {\nname?: Name\n}\n\nexport type BdefAff = AffBdefV1;\n","/**\n * Auto-generated from SAP/abap-file-formats JSON schemas.\n * Do not edit — regenerate with `bun scripts/generate-aff-schemas.ts`.\n */\n/**\n * Format version\n */\nexport type FormatVersion = \"1\"\n/**\n * Description of the ABAP object\n */\nexport type Description = string\n/**\n * Original language of the ABAP object\n */\nexport type OriginalLanguage = string\n/**\n * ABAP language version\n */\nexport type ABAPLanguageVersion = (\"standard\" | \"cloudDevelopment\")\n\n/**\n * Background Processing Context\n */\nexport interface AffBgqcV1 {\nformatVersion: FormatVersion\nheader: Header\n}\n/**\n * Header\n */\nexport interface Header {\ndescription: Description\noriginalLanguage: OriginalLanguage\nabapLanguageVersion?: ABAPLanguageVersion\n}\n\nexport type BgqcAff = AffBgqcV1;\n","/**\n * Auto-generated from SAP/abap-file-formats JSON schemas.\n * Do not edit — regenerate with `bun scripts/generate-aff-schemas.ts`.\n */\n/**\n * Format version\n */\nexport type FormatVersion = \"1\"\n/**\n * Description of the ABAP object\n */\nexport type Description = string\n/**\n * Original language of the ABAP object\n */\nexport type OriginalLanguage = string\n/**\n * ABAP language version\n */\nexport type ABAPLanguageVersion = (\"standard\" | \"keyUser\" | \"cloudDevelopment\")\n/**\n * Object type\n */\nexport type ObjectType = (\"TABL\" | \"DDLS\")\n/**\n * Object name\n */\nexport type ObjectName = string\n/**\n * Name\n */\nexport type Name = string\n/**\n * Nature\n */\nexport type Nature = (\"general\" | \"sensitive\" | \"nonBusinessInformation\")\n/**\n * Fields\n */\nexport type Fields = FieldDetails[]\n\n/**\n * Customer Data Browser Object\n */\nexport interface AffCdboV1 {\nformatVersion: FormatVersion\nheader: Header\ngeneralInformation: GeneralInformation\nfields: Fields\n}\n/**\n * Header\n */\nexport interface Header {\ndescription: Description\noriginalLanguage: OriginalLanguage\nabapLanguageVersion?: ABAPLanguageVersion\n}\n/**\n * General information\n */\nexport interface GeneralInformation {\nobjectType: ObjectType\nobjectName: ObjectName\n}\n/**\n * Field details\n */\nexport interface FieldDetails {\nname: Name\nnature: Nature\n}\n\nexport type CdboAff = AffCdboV1;\n","/**\n * Auto-generated from SAP/abap-file-formats JSON schemas.\n * Do not edit — regenerate with `bun scripts/generate-aff-schemas.ts`.\n */\n/**\n * The ABAP file format version\n */\nexport type ABAPFileFormatVersion = \"1\"\n/**\n * Description of the ABAP object\n */\nexport type Description = string\n/**\n * Original language of the ABAP object\n */\nexport type OriginalLanguage = string\n/**\n * External name\n */\nexport type ExternalName = string\n/**\n * Type\n */\nexport type Type = (\"amountWithCurrency\" | \"boolean\" | \"date\" | \"email\" | \"list\" | \"number\" | \"quantity\" | \"text\" | \"time\" | \"url\" | \"phone\" | \"amountWithoutCurrency\" | \"currencyCode\" | \"quantityOnly\" | \"unitCode\" | \"languageCode\" | \"numericalText\" | \"postingPeriod\" | \"raw\" | \"associationToStandardBo\" | \"timestamp\" | \"listBasedOnCdsView\" | \"characteristicsList\" | \"numericInterval\" | \"amountInterval\" | \"dateInterval\" | \"timeInterval\" | \"associationToCustomBo\")\n/**\n * Length\n */\nexport type Length = number\n/**\n * Scale\n */\nexport type Scale = number\n/**\n * Aggregation\n */\nexport type Aggregation = (\"none\" | \"min\" | \"max\" | \"sum\")\n/**\n * Code List uppercase only\n */\nexport type CodeListUppercaseOnly = boolean\n/**\n * Associated business object\n */\nexport type AssociatedBusinessObject = string\n/**\n * Value help view\n */\nexport type ValueHelpView = string\n/**\n * Dimension view\n */\nexport type DimensionView = string\n/**\n * Data subject\n */\nexport type DataSubject = (\"notApplicable\" | \"centralBusinessPartner\" | \"customer\" | \"supplier\" | \"contactPerson\" | \"workforcePerson\")\n/**\n * BAdI implementation for data subject\n */\nexport type BAdIImplementationForDataSubject = string\n/**\n * Characteristic name\n */\nexport type CharacteristicName = string\n/**\n * Class name\n */\nexport type ClassName = string\n/**\n * Object type\n */\nexport type ObjectType = string\n/**\n * Translation language\n */\nexport type TranslationLanguage = string\n/**\n * Field label\n */\nexport type FieldLabel = string\n/**\n * Field tooltip\n */\nexport type FieldTooltip = string\n/**\n * Labels and tooltips\n */\nexport type LabelsAndTooltips = LabelAndTooltip[]\n/**\n * Code\n */\nexport type Code = string\n/**\n * Disabled\n */\nexport type Disabled = boolean\n/**\n * Code list values\n */\nexport type CodeListValues = CodeValue[]\n/**\n * Language\n */\nexport type Language = string\n/**\n * Code\n */\nexport type Code1 = string\n/**\n * Description\n */\nexport type Description1 = string\n/**\n * Code list descriptions\n */\nexport type CodeListDescriptions = CodeDescription[]\n/**\n * Business context\n */\nexport type BusinessContext = string\n/**\n * Deviating field name\n */\nexport type DeviatingFieldName = string\n/**\n * Extended business context details\n */\nexport type ExtendedBusinessContextDetails = ExtendedBusinessContextDetails1[]\n/**\n * CDS view name\n */\nexport type CDSViewName = string\n/**\n * Business context\n */\nexport type BusinessContext1 = string\n/**\n * Basic search relevance\n */\nexport type BasicSearchRelevance = boolean\n/**\n * BAdI implementation for visibility control\n */\nexport type BAdIImplementationForVisibilityControl = string\n/**\n * Field control property\n */\nexport type FieldControlProperty = (\"optional\" | \"readOnly\" | \"mandatory\")\n/**\n * Extended CDS view details\n */\nexport type ExtendedCDSViewDetails = ExtendedCDSViewDetails1[]\n/**\n * OData service key\n */\nexport type ODataServiceKey = string\n/**\n * Business context\n */\nexport type BusinessContext2 = string\n/**\n * Basic search relevance\n */\nexport type BasicSearchRelevance1 = boolean\n/**\n * Extended OData service details\n */\nexport type ExtendedODataServiceDetails = ExtendedODataServiceDetails1[]\n/**\n * Business scenario\n */\nexport type BusinessScenario = string\n/**\n * Data transfer\n */\nexport type DataTransfer = string\n/**\n * Extended business scenario details\n */\nexport type ExtendedBusinessScenarioDetails = ExtendedBusinessScenarioDetails1[]\n/**\n * Dynpro context\n */\nexport type DynproContext = string\n/**\n * Business context\n */\nexport type BusinessContext3 = string\n/**\n * Extended dynpro context details\n */\nexport type ExtendedDynproContextDetails = ExtendedDynproContextDetails1[]\n/**\n * Service interface\n */\nexport type ServiceInterface = string\n/**\n * Operation\n */\nexport type Operation = string\n/**\n * Message direction\n */\nexport type MessageDirection = (\"request\" | \"response\")\n/**\n * Business context\n */\nexport type BusinessContext4 = string\n/**\n * Component identifier\n */\nexport type ComponentIdentifier = string\n/**\n * External namespace\n */\nexport type ExternalNamespace = string\n/**\n * External field name\n */\nexport type ExternalFieldName = string\n/**\n * Extended SOAP service details\n */\nexport type ExtendedSOAPServiceDetails = ExtendedSOAPServiceDetails1[]\n/**\n * Component identifier\n */\nexport type ComponentIdentifier1 = string\n/**\n * Value help field name\n */\nexport type ValueHelpFieldName = string\n/**\n * Dimension view field name\n */\nexport type DimensionViewFieldName = string\n/**\n * Value help key mapping details\n */\nexport type ValueHelpKeyMappingDetails = ValueHelpKeyMappingDetails1[]\n/**\n * Extended CDS view name\n */\nexport type ExtendedCDSViewName = string\n/**\n * Extended CDS view field name\n */\nexport type ExtendedCDSViewFieldName = string\n/**\n * Value help field name\n */\nexport type ValueHelpFieldName1 = string\n/**\n * Value help binding details\n */\nexport type ValueHelpBindingDetails = ValueHelpBindingDetails1[]\n\n/**\n * Custom field\n */\nexport interface AffCfdfV1 {\nformatVersion: ABAPFileFormatVersion\nheader: Header\nexternalName: ExternalName\ntype: Type\ntypeDetails?: TypeDetails\ndataProtectionAndPrivacy?: DataProtectionAndPrivacy\ncharacteristicReference?: ReferenceToCharacteristic\nuiTexts?: LabelsAndTooltips\ncodeListValues?: CodeListValues\ncodeListDescriptions?: CodeListDescriptions\nextendedBusinessContexts?: ExtendedBusinessContextDetails\nextendedCdsViews?: ExtendedCDSViewDetails\nextendedOdataServices?: ExtendedODataServiceDetails\nextendedBusinessScenarios?: ExtendedBusinessScenarioDetails\nextendedDynproContexts?: ExtendedDynproContextDetails\nextendedSoapServices?: ExtendedSOAPServiceDetails\nvalueHelpKeyMappings?: ValueHelpKeyMappingDetails\nvalueHelpBindings?: ValueHelpBindingDetails\n}\n/**\n * Header\n */\nexport interface Header {\ndescription: Description\noriginalLanguage: OriginalLanguage\n}\n/**\n * Type details\n */\nexport interface TypeDetails {\nlength?: Length\nscale?: Scale\naggregation?: Aggregation\ncodeListUppercaseOnly?: CodeListUppercaseOnly\nassociatedBusinessObject?: AssociatedBusinessObject\nvalueHelpView?: ValueHelpView\ndimensionView?: DimensionView\n}\n/**\n * Data protection and privacy\n */\nexport interface DataProtectionAndPrivacy {\ndataSubjectIdType?: DataSubject\nbadiImplForDataSubject?: BAdIImplementationForDataSubject\n}\n/**\n * Reference to characteristic\n */\nexport interface ReferenceToCharacteristic {\ncharacteristicName?: CharacteristicName\nclassType?: ClassName\nobjectType?: ObjectType\n}\n/**\n * Label and tooltip\n */\nexport interface LabelAndTooltip {\nlanguage: TranslationLanguage\nfieldLabel: FieldLabel\nfieldTooltip: FieldTooltip\n}\n/**\n * Code value\n */\nexport interface CodeValue {\ncode: Code\nisDisabled?: Disabled\n}\n/**\n * Code description\n */\nexport interface CodeDescription {\nlanguage: Language\ncode: Code1\ndescription: Description1\n}\n/**\n * Extended business context details\n */\nexport interface ExtendedBusinessContextDetails1 {\nbusinessContext: BusinessContext\ndeviatingFieldName?: DeviatingFieldName\n}\n/**\n * Extended CDS view details\n */\nexport interface ExtendedCDSViewDetails1 {\ncdsViewName: CDSViewName\nbusinessContext: BusinessContext1\nisSearchRelevant?: BasicSearchRelevance\nbadiImplForVisibilityCtrl?: BAdIImplementationForVisibilityControl\nfieldControlProperty?: FieldControlProperty\n}\n/**\n * Extended OData service details\n */\nexport interface ExtendedODataServiceDetails1 {\nodataServiceKey: ODataServiceKey\nbusinessContext: BusinessContext2\nisSearchRelevant?: BasicSearchRelevance1\n}\n/**\n * Extended business scenario details\n */\nexport interface ExtendedBusinessScenarioDetails1 {\nbusinessScenario: BusinessScenario\ndataTransfer: DataTransfer\n}\n/**\n * Extended dynpro context details\n */\nexport interface ExtendedDynproContextDetails1 {\ndynproContext: DynproContext\nbusinessContext: BusinessContext3\n}\n/**\n * Extended SOAP service details\n */\nexport interface ExtendedSOAPServiceDetails1 {\nserviceInterface: ServiceInterface\noperation: Operation\nmessageDirection: MessageDirection\nbusinessContext: BusinessContext4\ncomponentIdentifier?: ComponentIdentifier\nexternalNamespace: ExternalNamespace\nexternalFieldName: ExternalFieldName\n}\n/**\n * Value help key mapping details\n */\nexport interface ValueHelpKeyMappingDetails1 {\ncomponentIdentifier?: ComponentIdentifier1\nvalueHelpFieldName: ValueHelpFieldName\ndimensionViewFieldName?: DimensionViewFieldName\n}\n/**\n * Value help binding details\n */\nexport interface ValueHelpBindingDetails1 {\ncdsViewName: ExtendedCDSViewName\nextendedCdsViewFieldName: ExtendedCDSViewFieldName\nvalueHelpFieldName: ValueHelpFieldName1\n}\n\nexport type CfdfAff = AffCfdfV1;\n","/**\n * Auto-generated from SAP/abap-file-formats JSON schemas.\n * Do not edit — regenerate with `bun scripts/generate-aff-schemas.ts`.\n */\n/**\n * The ABAP file format version\n */\nexport type ABAPFileFormatVersion = \"2\"\n/**\n * Description of the ABAP object\n */\nexport type Description = string\n/**\n * Original language of the ABAP object\n */\nexport type OriginalLanguage = string\n/**\n * External name\n */\nexport type ExternalName = string\n/**\n * Type\n */\nexport type Type = (\"amountWithCurrency\" | \"boolean\" | \"date\" | \"email\" | \"list\" | \"number\" | \"quantity\" | \"text\" | \"time\" | \"url\" | \"phone\" | \"amountWithoutCurrency\" | \"currencyCode\" | \"quantityOnly\" | \"unitCode\" | \"languageCode\" | \"numericalText\" | \"postingPeriod\" | \"raw\" | \"associationToStandardBo\" | \"timestamp\" | \"listBasedOnCdsView\" | \"characteristicsList\" | \"numericInterval\" | \"amountInterval\" | \"dateInterval\" | \"timeInterval\" | \"associationToCustomBo\")\n/**\n * Length\n */\nexport type Length = number\n/**\n * Scale\n */\nexport type Scale = number\n/**\n * Aggregation\n */\nexport type Aggregation = (\"none\" | \"min\" | \"max\" | \"sum\")\n/**\n * Code List uppercase only\n */\nexport type CodeListUppercaseOnly = boolean\n/**\n * Associated business object\n */\nexport type AssociatedBusinessObject = string\n/**\n * Value help view\n */\nexport type ValueHelpView = string\n/**\n * Dimension view\n */\nexport type DimensionView = string\n/**\n * Data subject\n */\nexport type DataSubject = (\"notApplicable\" | \"centralBusinessPartner\" | \"customer\" | \"supplier\" | \"contactPerson\" | \"workforcePerson\")\n/**\n * BAdI implementation for data subject\n */\nexport type BAdIImplementationForDataSubject = string\n/**\n * Characteristic name\n */\nexport type CharacteristicName = string\n/**\n * Class name\n */\nexport type ClassName = string\n/**\n * Object type\n */\nexport type ObjectType = string\n/**\n * Translation language\n */\nexport type TranslationLanguage = string\n/**\n * Component kind\n */\nexport type ComponentKind = (\"main\" | \"description\" | \"reference\")\n/**\n * Component field identifier\n */\nexport type ComponentFieldIdentifier = string\n/**\n * Field label\n */\nexport type FieldLabel = string\n/**\n * Field tooltip\n */\nexport type FieldTooltip = string\n/**\n * Field heading\n */\nexport type FieldHeading = string\n/**\n * Field medium label\n */\nexport type FieldMediumLabel = string\n/**\n * Field short label\n */\nexport type FieldShortLabel = string\n/**\n * Labels and tooltips\n */\nexport type LabelsAndTooltips = LabelsAndTooltip[]\n/**\n * Code\n */\nexport type Code = string\n/**\n * Disabled\n */\nexport type Disabled = boolean\n/**\n * Code list values\n */\nexport type CodeListValues = CodeValue[]\n/**\n * Language\n */\nexport type Language = string\n/**\n * Code\n */\nexport type Code1 = string\n/**\n * Description\n */\nexport type Description1 = string\n/**\n * Code list descriptions\n */\nexport type CodeListDescriptions = CodeDescription[]\n/**\n * Business context\n */\nexport type BusinessContext = string\n/**\n * Deviating field name\n */\nexport type DeviatingFieldName = string\n/**\n * Extended business context details\n */\nexport type ExtendedBusinessContextDetails = ExtendedBusinessContextDetails1[]\n/**\n * CDS view name\n */\nexport type CDSViewName = string\n/**\n * Business context\n */\nexport type BusinessContext1 = string\n/**\n * Basic search relevance\n */\nexport type BasicSearchRelevance = boolean\n/**\n * BAdI implementation for visibility control\n */\nexport type BAdIImplementationForVisibilityControl = string\n/**\n * Field control property\n */\nexport type FieldControlProperty = (\"optional\" | \"readOnly\" | \"mandatory\")\n/**\n * Extended CDS view details\n */\nexport type ExtendedCDSViewDetails = ExtendedCDSViewDetails1[]\n/**\n * OData service key\n */\nexport type ODataServiceKey = string\n/**\n * Business context\n */\nexport type BusinessContext2 = string\n/**\n * Basic search relevance\n */\nexport type BasicSearchRelevance1 = boolean\n/**\n * Extended OData service details\n */\nexport type ExtendedODataServiceDetails = ExtendedODataServiceDetails1[]\n/**\n * Business scenario\n */\nexport type BusinessScenario = string\n/**\n * Data transfer\n */\nexport type DataTransfer = string\n/**\n * Extended business scenario details\n */\nexport type ExtendedBusinessScenarioDetails = ExtendedBusinessScenarioDetails1[]\n/**\n * Dynpro context\n */\nexport type DynproContext = string\n/**\n * Business context\n */\nexport type BusinessContext3 = string\n/**\n * Extended dynpro context details\n */\nexport type ExtendedDynproContextDetails = ExtendedDynproContextDetails1[]\n/**\n * Service interface\n */\nexport type ServiceInterface = string\n/**\n * Operation\n */\nexport type Operation = string\n/**\n * Message direction\n */\nexport type MessageDirection = (\"request\" | \"response\")\n/**\n * Business context\n */\nexport type BusinessContext4 = string\n/**\n * Component identifier\n */\nexport type ComponentIdentifier = string\n/**\n * External namespace\n */\nexport type ExternalNamespace = string\n/**\n * External field name\n */\nexport type ExternalFieldName = string\n/**\n * Extended SOAP service details\n */\nexport type ExtendedSOAPServiceDetails = ExtendedSOAPServiceDetails1[]\n/**\n * Component identifier\n */\nexport type ComponentIdentifier1 = string\n/**\n * Value help field name\n */\nexport type ValueHelpFieldName = string\n/**\n * Dimension view field name\n */\nexport type DimensionViewFieldName = string\n/**\n * Value help key mapping details\n */\nexport type ValueHelpKeyMappingDetails = ValueHelpKeyMappingDetails1[]\n/**\n * Extended CDS view name\n */\nexport type ExtendedCDSViewName = string\n/**\n * Extended CDS view field name\n */\nexport type ExtendedCDSViewFieldName = string\n/**\n * Value help field name\n */\nexport type ValueHelpFieldName1 = string\n/**\n * Value help binding details\n */\nexport type ValueHelpBindingDetails = ValueHelpBindingDetails1[]\n\n/**\n * Custom field\n */\nexport interface AffCfdfV2 {\nformatVersion: ABAPFileFormatVersion\nheader: Header\nexternalName: ExternalName\ntype: Type\ntypeDetails?: TypeDetails\ndataProtectionAndPrivacy?: DataProtectionAndPrivacy\ncharacteristicReference?: ReferenceToCharacteristic\nuiTexts?: LabelsAndTooltips\ncodeListValues?: CodeListValues\ncodeListDescriptions?: CodeListDescriptions\nextendedBusinessContexts?: ExtendedBusinessContextDetails\nextendedCdsViews?: ExtendedCDSViewDetails\nextendedOdataServices?: ExtendedODataServiceDetails\nextendedBusinessScenarios?: ExtendedBusinessScenarioDetails\nextendedDynproContexts?: ExtendedDynproContextDetails\nextendedSoapServices?: ExtendedSOAPServiceDetails\nvalueHelpKeyMappings?: ValueHelpKeyMappingDetails\nvalueHelpBindings?: ValueHelpBindingDetails\n}\n/**\n * Header\n */\nexport interface Header {\ndescription: Description\noriginalLanguage: OriginalLanguage\n}\n/**\n * Type details\n */\nexport interface TypeDetails {\nlength?: Length\nscale?: Scale\naggregation?: Aggregation\ncodeListUppercaseOnly?: CodeListUppercaseOnly\nassociatedBusinessObject?: AssociatedBusinessObject\nvalueHelpView?: ValueHelpView\ndimensionView?: DimensionView\n}\n/**\n * Data protection and privacy\n */\nexport interface DataProtectionAndPrivacy {\ndataSubjectIdType?: DataSubject\nbadiImplForDataSubject?: BAdIImplementationForDataSubject\n}\n/**\n * Reference to characteristic\n */\nexport interface ReferenceToCharacteristic {\ncharacteristicName?: CharacteristicName\nclassType?: ClassName\nobjectType?: ObjectType\n}\n/**\n * Labels and tooltip\n */\nexport interface LabelsAndTooltip {\nlanguage: TranslationLanguage\ncomponentKind: ComponentKind\ncomponentIdentifier: ComponentFieldIdentifier\nfieldLabel?: FieldLabel\nfieldTooltip: FieldTooltip\nfieldHeading: FieldHeading\nfieldMediumLabel?: FieldMediumLabel\nfieldShortLabel?: FieldShortLabel\n}\n/**\n * Code value\n */\nexport interface CodeValue {\ncode: Code\nisDisabled?: Disabled\n}\n/**\n * Code description\n */\nexport interface CodeDescription {\nlanguage: Language\ncode: Code1\ndescription: Description1\n}\n/**\n * Extended business context details\n */\nexport interface ExtendedBusinessContextDetails1 {\nbusinessContext: BusinessContext\ndeviatingFieldName?: DeviatingFieldName\n}\n/**\n * Extended CDS view details\n */\nexport interface ExtendedCDSViewDetails1 {\ncdsViewName: CDSViewName\nbusinessContext: BusinessContext1\nisSearchRelevant?: BasicSearchRelevance\nbadiImplForVisibilityCtrl?: BAdIImplementationForVisibilityControl\nfieldControlProperty?: FieldControlProperty\n}\n/**\n * Extended OData service details\n */\nexport interface ExtendedODataServiceDetails1 {\nodataServiceKey: ODataServiceKey\nbusinessContext: BusinessContext2\nisSearchRelevant?: BasicSearchRelevance1\n}\n/**\n * Extended business scenario details\n */\nexport interface ExtendedBusinessScenarioDetails1 {\nbusinessScenario: BusinessScenario\ndataTransfer: DataTransfer\n}\n/**\n * Extended dynpro context details\n */\nexport interface ExtendedDynproContextDetails1 {\ndynproContext: DynproContext\nbusinessContext: BusinessContext3\n}\n/**\n * Extended SOAP service details\n */\nexport interface ExtendedSOAPServiceDetails1 {\nserviceInterface: ServiceInterface\noperation: Operation\nmessageDirection: MessageDirection\nbusinessContext: BusinessContext4\ncomponentIdentifier?: ComponentIdentifier\nexternalNamespace: ExternalNamespace\nexternalFieldName: ExternalFieldName\n}\n/**\n * Value help key mapping details\n */\nexport interface ValueHelpKeyMappingDetails1 {\ncomponentIdentifier?: ComponentIdentifier1\nvalueHelpFieldName: ValueHelpFieldName\ndimensionViewFieldName?: DimensionViewFieldName\n}\n/**\n * Value help binding details\n */\nexport interface ValueHelpBindingDetails1 {\ncdsViewName: ExtendedCDSViewName\nextendedCdsViewFieldName: ExtendedCDSViewFieldName\nvalueHelpFieldName: ValueHelpFieldName1\n}\n\nexport type CfdfAff = AffCfdfV2;\n","/**\n * Auto-generated from SAP/abap-file-formats JSON schemas.\n * Do not edit — regenerate with `bun scripts/generate-aff-schemas.ts`.\n */\n/**\n * The ABAP file format version\n */\nexport type ABAPFileFormatVersion = \"1\"\n/**\n * Description of the ABAP object\n */\nexport type Description = string\n/**\n * Original language of the ABAP object\n */\nexport type OriginalLanguage = string\n/**\n * ABAP language version\n */\nexport type ABAPLanguageVersion = (\"standard\" | \"cloudDevelopment\")\n/**\n * Change document category\n */\nexport type Category = (\"standard\" | \"behaviorDefiniton\")\n/**\n * Generated object\n */\nexport type GeneratedObject = string\n/**\n * Name of table or structure\n */\nexport type Name = string\n/**\n * Reference table for currencies and units\n */\nexport type ReferenceTable = string\n/**\n * Specifies whether multiple changes can be logged\n */\nexport type LogMultipleChanges = boolean\n/**\n * Log field values for insertions.\n */\nexport type LogFieldValues = boolean\n/**\n * Log initial values for insertions Logging of initial values depends on setting 'Log Field Values for Database Insertions'\n */\nexport type LogInitialValues = boolean\n/**\n * Log field values for deletions.\n */\nexport type LogFieldValues1 = boolean\n/**\n * Log initial values for deletions Logging of initial values depends on setting 'Log Field Values for Database Deletions'\n */\nexport type LogInitialValues1 = boolean\n/**\n * Tables and structures\n */\nexport type TablesAndStructures = TableOrStructureDetails[]\n/**\n * Error message identifier\n */\nexport type MessageID = string\n/**\n * Error message number\n */\nexport type MessageNumber = string\n\n/**\n * Change Documents (CHDO) v1\n */\nexport interface AffChdoV1 {\nformatVersion: ABAPFileFormatVersion\nheader: Header\ngeneralInformation?: GeneralInformation\ntablesAndStructures: TablesAndStructures\nerrorMessage: ErrorMessage\n}\n/**\n * Header\n */\nexport interface Header {\ndescription: Description\noriginalLanguage: OriginalLanguage\nabapLanguageVersion?: ABAPLanguageVersion\n}\n/**\n * General information\n */\nexport interface GeneralInformation {\ncategory?: Category\ngeneratedObject?: GeneratedObject\n}\n/**\n * Table or structure\n */\nexport interface TableOrStructureDetails {\nname: Name\nreferenceTable?: ReferenceTable\nmultipleChanges?: LogMultipleChanges\ndatabaseInsertions?: DatabaseInsertions\ndatabaseDeletions?: DatabaseDeletions\n}\n/**\n * Log field values for insertions.\n */\nexport interface DatabaseInsertions {\nlogValues?: LogFieldValues\nlogInitialValues?: LogInitialValues\n}\n/**\n * Log field values for deletions.\n */\nexport interface DatabaseDeletions {\nlogValues?: LogFieldValues1\nlogInitialValues?: LogInitialValues1\n}\n/**\n * Error message\n */\nexport interface ErrorMessage {\nid: MessageID\nnumber: MessageNumber\n}\n\nexport type ChdoAff = AffChdoV1;\n","/**\n * Auto-generated from SAP/abap-file-formats JSON schemas.\n * Do not edit — regenerate with `bun scripts/generate-aff-schemas.ts`.\n */\n/**\n * The ABAP file format version\n */\nexport type ABAPFileFormatVersion = \"1\"\n/**\n * Description of the ABAP object\n */\nexport type Description = string\n/**\n * Original language of the ABAP object\n */\nexport type OriginalLanguage = string\n/**\n * ABAP language version\n */\nexport type ABAPLanguageVersion = (\"standard\" | \"cloudDevelopment\")\n/**\n * Name of the parent category\n */\nexport type ParentCategory = string\n\n/**\n * ATC check category properties\n */\nexport interface AffChkcV1 {\nformatVersion: ABAPFileFormatVersion\nheader: Header\nparentCategory?: ParentCategory\n}\n/**\n * Header\n */\nexport interface Header {\ndescription: Description\noriginalLanguage: OriginalLanguage\nabapLanguageVersion?: ABAPLanguageVersion\n}\n\nexport type ChkcAff = AffChkcV1;\n","/**\n * Auto-generated from SAP/abap-file-formats JSON schemas.\n * Do not edit — regenerate with `bun scripts/generate-aff-schemas.ts`.\n */\n/**\n * The ABAP file format version\n */\nexport type ABAPFileFormatVersion = \"1\"\n/**\n * Description of the ABAP object\n */\nexport type Description = string\n/**\n * Original language of the ABAP object\n */\nexport type OriginalLanguage = string\n/**\n * ABAP language version\n */\nexport type ABAPLanguageVersion = (\"standard\" | \"cloudDevelopment\")\n/**\n * The parent category of an ATC check object\n */\nexport type Category = string\n/**\n * The implementing class of the ATC check object\n */\nexport type ImplementingClass = string\n/**\n * The check type of ATC check\n */\nexport type CheckType = (\"local\" | \"remoteEnabled\")\n/**\n * Name of a parameter\n */\nexport type ParameterName = string\n/**\n * Description of a parameter\n */\nexport type ParameterDescription = string\n/**\n * The parameter is hidden\n */\nexport type IsHidden = boolean\n/**\n * Parameters of the ATC check object\n */\nexport type Parameters = Parameter[]\n\n/**\n * ATC check object properties\n */\nexport interface AffChkoV1 {\nformatVersion: ABAPFileFormatVersion\nheader: Header\ncategory: Category\nimplementingClass: ImplementingClass\ncheckType?: CheckType\nparameters?: Parameters\n}\n/**\n * Header\n */\nexport interface Header {\ndescription: Description\noriginalLanguage: OriginalLanguage\nabapLanguageVersion?: ABAPLanguageVersion\n}\n/**\n * A parameter of an ATC check object\n */\nexport interface Parameter {\nname?: ParameterName\ndescription?: ParameterDescription\nhidden?: IsHidden\n}\n\nexport type ChkoAff = AffChkoV1;\n","/**\n * Auto-generated from SAP/abap-file-formats JSON schemas.\n * Do not edit — regenerate with `bun scripts/generate-aff-schemas.ts`.\n */\n/**\n * The ABAP file format version\n */\nexport type ABAPFileFormatVersion = \"1\"\n/**\n * Description of the ABAP object\n */\nexport type Description = string\n/**\n * Original language of the ABAP object\n */\nexport type OriginalLanguage = string\n/**\n * ABAP language version\n */\nexport type ABAPLanguageVersion = (\"standard\" | \"cloudDevelopment\")\n/**\n * The ATC check variant is remote-enabled\n */\nexport type RemoteEnabled = boolean\n/**\n * The name of check\n */\nexport type CheckName = string\n/**\n * The parameter name\n */\nexport type ParameterName = string\n/**\n * The value of the parameter\n */\nexport type ParameterValue = string\n/**\n * Name of a component of a structure\n */\nexport type ComponentFieldName = string\n/**\n * Value of a component of a structure\n */\nexport type ComponentValue = string\n/**\n * A structured value of a parameter, i.e. a value with named components\n */\nexport type StructuredValue = Component[]\n/**\n * Name of a component of a structure\n */\nexport type ComponentFieldName1 = string\n/**\n * Value of a component of a structure\n */\nexport type ComponentValue1 = string\n/**\n * A structured value as a list of key-value pairs\n */\nexport type Structure = Component1[]\n/**\n * A list of structured values of a parameter\n */\nexport type StructuredValueList = Structure[]\n/**\n * A parameter value in the parameter value list\n */\nexport type EntryInValueList = string\n/**\n * List of values for a multi-value check parameter\n */\nexport type ListOfParameterValues = EntryInValueList[]\n/**\n * The sign type of the range\n */\nexport type Sign = (\"include\" | \"exclude\")\n/**\n * Sign option of the range\n */\nexport type Option = (\"equals\" | \"between\" | \"greaterThan\" | \"containsPattern\" | \"notEqual\" | \"notBetween\" | \"notContainsPattern\" | \"greaterEqual\" | \"lessThan\" | \"lessEqual\")\n/**\n * The low value of the range\n */\nexport type Low = string\n/**\n * The high value of the range\n */\nexport type High = string\n/**\n * List of range values for a check parameter\n */\nexport type ListOfRangeValues = RangeValue[]\n/**\n * Parameters of check\n */\nexport type CheckParameters = Parameter[]\n/**\n * The checks selected in the ATC check variant\n */\nexport type SelectedChecks = Check[]\n\n/**\n * ATC check variant properties\n */\nexport interface AffChkvV1 {\nformatVersion: ABAPFileFormatVersion\nheader: Header\nremoteEnabled?: RemoteEnabled\nselectedChecks?: SelectedChecks\n}\n/**\n * Header\n */\nexport interface Header {\ndescription: Description\noriginalLanguage: OriginalLanguage\nabapLanguageVersion?: ABAPLanguageVersion\n}\n/**\n * Check with its parameters\n */\nexport interface Check {\ncheckName: CheckName\nparameters?: CheckParameters\n}\n/**\n * Parameter of ATC check\n */\nexport interface Parameter {\nname: ParameterName\nvalue?: ParameterValue\nstructuredValue?: StructuredValue\nstructuredValueList?: StructuredValueList\nvalueList?: ListOfParameterValues\nvalueRangeList?: ListOfRangeValues\n}\n/**\n * Component of a structure as a key-value pair\n */\nexport interface Component {\nfield: ComponentFieldName\nvalue: ComponentValue\n}\n/**\n * Component of a structure as a key-value pair\n */\nexport interface Component1 {\nfield: ComponentFieldName1\nvalue: ComponentValue1\n}\n/**\n * A range value for an ATC check parameter\n */\nexport interface RangeValue {\nsign: Sign\noption: Option\nlow?: Low\nhigh?: High\n}\n\nexport type ChkvAff = AffChkvV1;\n","/**\n * Auto-generated from SAP/abap-file-formats JSON schemas.\n * Do not edit — regenerate with `bun scripts/generate-aff-schemas.ts`.\n */\n/**\n * The ABAP file format version\n */\nexport type ABAPFileFormatVersion = \"1\"\n/**\n * Description of the ABAP object\n */\nexport type Description = string\n/**\n * Original language of the ABAP object\n */\nexport type OriginalLanguage = string\n/**\n * ABAP language version\n */\nexport type ABAPLanguageVersion = (\"standard\" | \"keyUser\" | \"cloudDevelopment\")\n/**\n * Class category\n */\nexport type ClassCategory = (\"generalObjectType\" | \"exitClass\" | \"testclassAbapUnit\" | \"behaviorClass\" | \"entityEventHandler\" | \"persistentClass\" | \"factoryForPersistentClass\" | \"statusClassForPersistClass\" | \"rfcProxyClass\" | \"communicationConnectionClass\" | \"exceptionClass\" | \"areaClassSharedObjects\" | \"businessClass\" | \"bspApplicationClass\" | \"basisClassBspElementHdlr\" | \"webDynproRuntimeObject\")\n/**\n * Fix point arithmetic\n */\nexport type FixPointArithmetic = boolean\n/**\n * The message class of the class\n */\nexport type MessageClass = string\n/**\n * Name\n */\nexport type Name = string\n/**\n * Description\n */\nexport type Description1 = string\n/**\n * Type descriptions\n */\nexport type TypeDescriptions = NameAndDescription[]\n/**\n * Name\n */\nexport type Name1 = string\n/**\n * Description\n */\nexport type Description2 = string\n/**\n * Attribute descriptions\n */\nexport type AttributeDescriptions = NameAndDescription1[]\n/**\n * Name of the event\n */\nexport type EventName = string\n/**\n * Description of the event\n */\nexport type EventDescription1 = string\n/**\n * Name\n */\nexport type Name2 = string\n/**\n * Description\n */\nexport type Description3 = string\n/**\n * Parameter descriptions\n */\nexport type ParameterDescriptions = NameAndDescription2[]\n/**\n * Event descriptions\n */\nexport type EventDescriptions = EventDescription[]\n/**\n * Name of the method\n */\nexport type MethodName = string\n/**\n * Description of the method\n */\nexport type MethodDescription1 = string\n/**\n * Name\n */\nexport type Name3 = string\n/**\n * Description\n */\nexport type Description4 = string\n/**\n * Parameter descriptions\n */\nexport type ParameterDescriptions1 = NameAndDescription3[]\n/**\n * Name\n */\nexport type Name4 = string\n/**\n * Description\n */\nexport type Description5 = string\n/**\n * Exception descriptions\n */\nexport type ExceptionDescriptions = NameAndDescription4[]\n/**\n * Method descriptions\n */\nexport type MethodDescriptions = MethodDescription[]\n\n/**\n * Class properties\n */\nexport interface AffClasV1 {\nformatVersion: ABAPFileFormatVersion\nheader: Header\ncategory?: ClassCategory\nfixPointArithmetic?: FixPointArithmetic\nmessageClass?: MessageClass\ndescriptions?: Descriptions\n}\n/**\n * header\n */\nexport interface Header {\ndescription: Description\noriginalLanguage: OriginalLanguage\nabapLanguageVersion?: ABAPLanguageVersion\n}\n/**\n * Descriptions maintained in SE80\n */\nexport interface Descriptions {\ntypes?: TypeDescriptions\nattributes?: AttributeDescriptions\nevents?: EventDescriptions\nmethods?: MethodDescriptions\n}\n/**\n * Name and description\n */\nexport interface NameAndDescription {\nname: Name\ndescription: Description1\n}\n/**\n * Name and description\n */\nexport interface NameAndDescription1 {\nname: Name1\ndescription: Description2\n}\n/**\n * Event description\n */\nexport interface EventDescription {\nname: EventName\ndescription: EventDescription1\nparameters?: ParameterDescriptions\n}\n/**\n * Name and description\n */\nexport interface NameAndDescription2 {\nname: Name2\ndescription: Description3\n}\n/**\n * Method description\n */\nexport interface MethodDescription {\nname: MethodName\ndescription: MethodDescription1\nparameters?: ParameterDescriptions1\nexceptions?: ExceptionDescriptions\n}\n/**\n * Name and description\n */\nexport interface NameAndDescription3 {\nname: Name3\ndescription: Description4\n}\n/**\n * Name and description\n */\nexport interface NameAndDescription4 {\nname: Name4\ndescription: Description5\n}\n\nexport type ClasAff = AffClasV1;\n","/**\n * Auto-generated from SAP/abap-file-formats JSON schemas.\n * Do not edit — regenerate with `bun scripts/generate-aff-schemas.ts`.\n */\n/**\n * Format version\n */\nexport type FormatVersion = \"1\"\n/**\n * Description of the ABAP object\n */\nexport type Description = string\n/**\n * Original language of the ABAP object\n */\nexport type OriginalLanguage = string\n/**\n * ABAP language version\n */\nexport type ABAPLanguageVersion = (\"standard\" | \"cloudDevelopment\")\n/**\n * Communication type\n */\nexport type CommunicationType = \"http\"\n/**\n * Communication target class\n */\nexport type CommunicationTargetClass = string\n/**\n * Multitenancy mode\n */\nexport type MultitenancyMode = (\"crossClient\" | \"clientSpecific\")\n/**\n * Allow multiple application destinations\n */\nexport type AllowMultipleApplicationDestinations = boolean\n/**\n * Path prefix\n */\nexport type PathPrefix = string\n/**\n * Enforce SAP GUI support\n */\nexport type EnforceSAPGUISupport = boolean\n/**\n * Enforce fast serialization\n */\nexport type EnforceFastSerialization = boolean\n/**\n * Default compression mode\n */\nexport type DefaultCompressionMode = (\"fast\" | \"high\")\n\n/**\n * Creation of communication target object\n */\nexport interface AffCotaV1 {\nformatVersion: FormatVersion\nheader: Header\nconfiguration: Configuration\nhttpSettings?: HTTPSettings\nrfcSettings?: RFCSettings\n}\n/**\n * Header\n */\nexport interface Header {\ndescription: Description\noriginalLanguage: OriginalLanguage\nabapLanguageVersion?: ABAPLanguageVersion\n}\n/**\n * Configuration\n */\nexport interface Configuration {\ncommunicationType?: CommunicationType\ncommunicationTargetClass?: CommunicationTargetClass\nmultitenancyMode?: MultitenancyMode\nallowMultipleDestinations?: AllowMultipleApplicationDestinations\n}\n/**\n * HTTP settings\n */\nexport interface HTTPSettings {\npathPrefix?: PathPrefix\n}\n/**\n * RFC settings\n */\nexport interface RFCSettings {\nenforceSapGuiSupport?: EnforceSAPGUISupport\nenforceFastSerialization?: EnforceFastSerialization\ndefaultCompressionMode?: DefaultCompressionMode\n}\n\nexport type CotaAff = AffCotaV1;\n","/**\n * Auto-generated from SAP/abap-file-formats JSON schemas.\n * Do not edit — regenerate with `bun scripts/generate-aff-schemas.ts`.\n */\n/**\n * Format version\n */\nexport type FormatVersion = \"1\"\n/**\n * Description of the ABAP object\n */\nexport type Description = string\n/**\n * Original language of the ABAP object\n */\nexport type OriginalLanguage = string\n/**\n * ABAP language version\n */\nexport type ABAPLanguageVersion = (\"standard\" | \"cloudDevelopment\")\n/**\n * File\n */\nexport type File = string\n/**\n * CSN files\n */\nexport type CSNFiles = CSNFile[]\n\n/**\n * CSN model transport object\n */\nexport interface AffCsnmV1 {\nformatVersion: FormatVersion\nheader: Header\ncsnFiles?: CSNFiles\n}\n/**\n * Header\n */\nexport interface Header {\ndescription: Description\noriginalLanguage: OriginalLanguage\nabapLanguageVersion?: ABAPLanguageVersion\n}\n/**\n * CSN file\n */\nexport interface CSNFile {\nfile?: File\n}\n\nexport type CsnmAff = AffCsnmV1;\n","/**\n * Auto-generated from SAP/abap-file-formats JSON schemas.\n * Do not edit — regenerate with `bun scripts/generate-aff-schemas.ts`.\n */\n/**\n * Format version\n */\nexport type FormatVersion = \"1\"\n/**\n * Description of the ABAP object\n */\nexport type Description = string\n/**\n * Original language of the ABAP object\n */\nexport type OriginalLanguage = string\n/**\n * ABAP language version\n */\nexport type ABAPLanguageVersion = (\"standard\" | \"keyUser\" | \"cloudDevelopment\")\n/**\n * Sensitivity level for data category\n */\nexport type SensitivityLevel = (\"personalData\" | \"sensitivePersonalData\")\n\n/**\n * Data Category\n */\nexport interface AffDcatV1 {\nformatVersion: FormatVersion\nheader: Header\nattributes: Attributes\n}\n/**\n * Header\n */\nexport interface Header {\ndescription: Description\noriginalLanguage: OriginalLanguage\nabapLanguageVersion?: ABAPLanguageVersion\n}\n/**\n * Attributes of the data category\n */\nexport interface Attributes {\nsensitivityLevel?: SensitivityLevel\n}\n\nexport type DcatAff = AffDcatV1;\n","/**\n * Auto-generated from SAP/abap-file-formats JSON schemas.\n * Do not edit — regenerate with `bun scripts/generate-aff-schemas.ts`.\n */\n/**\n * The ABAP file format version\n */\nexport type ABAPFileFormatVersion = \"1\"\n/**\n * Description of the ABAP object\n */\nexport type Description = string\n/**\n * Original language of the ABAP object\n */\nexport type OriginalLanguage = string\n/**\n * ABAP language version\n */\nexport type ABAPLanguageVersion = (\"standard\" | \"keyUser\" | \"cloudDevelopment\")\n\n/**\n * Attributes of the Data Control Language Source\n */\nexport interface AffDclsV1 {\nformatVersion: ABAPFileFormatVersion\nheader: Header\n}\n/**\n * Header\n */\nexport interface Header {\ndescription: Description\noriginalLanguage: OriginalLanguage\nabapLanguageVersion?: ABAPLanguageVersion\n}\n\nexport type DclsAff = AffDclsV1;\n","/**\n * Auto-generated from SAP/abap-file-formats JSON schemas.\n * Do not edit — regenerate with `bun scripts/generate-aff-schemas.ts`.\n */\n/**\n * The ABAP file format version\n */\nexport type ABAPFileFormatVersion = \"1\"\n/**\n * Description of the ABAP object\n */\nexport type Description = string\n/**\n * Original language of the ABAP object\n */\nexport type OriginalLanguage = string\n\n/**\n * Attributes of the annotation definition\n */\nexport interface AffDdlaV1 {\nformatVersion: ABAPFileFormatVersion\nheader: Header\n}\n/**\n * Header\n */\nexport interface Header {\ndescription: Description\noriginalLanguage: OriginalLanguage\n}\n\nexport type DdlaAff = AffDdlaV1;\n","/**\n * Auto-generated from SAP/abap-file-formats JSON schemas.\n * Do not edit — regenerate with `bun scripts/generate-aff-schemas.ts`.\n */\n/**\n * The ABAP file format version\n */\nexport type ABAPFileFormatVersion = \"1\"\n/**\n * Description of the ABAP object\n */\nexport type Description = string\n/**\n * Original language of the ABAP object\n */\nexport type OriginalLanguage = string\n/**\n * ABAP language version\n */\nexport type ABAPLanguageVersion = (\"standard\" | \"keyUser\" | \"cloudDevelopment\")\n/**\n * Source origin\n */\nexport type SourceOrigin = (\"abapDevelopmentTools\" | \"customCdsViews\" | \"customAnalyticalQueries\" | \"customBusinessObject\" | \"customCodeList\" | \"customCdsViewsVariantConfg\" | \"customFields\" | \"extensionsForDataSources\" | \"customSearchModeler\" | \"serviceConsumptionModel\")\n/**\n * Source type\n */\nexport type SourceType = (\"ddicBasedView\" | \"viewEntity\" | \"viewExtend\" | \"viewEntityExtend\" | \"tableFunction\" | \"tableEntity\" | \"abstractEntity\" | \"customEntity\" | \"hierarchy\" | \"projectionView\" | \"externalEntity\" | \"unknown\")\n/**\n * DDLS name of the parent of an extend\n */\nexport type ParentName = string\n\n/**\n * DDLS object type\n */\nexport interface AffDdlsV1 {\nformatVersion: ABAPFileFormatVersion\nheader: Header\nsourceOrigin: SourceOrigin\nsourceType: SourceType\nparentName?: ParentName\n}\n/**\n * Header\n */\nexport interface Header {\ndescription: Description\noriginalLanguage: OriginalLanguage\nabapLanguageVersion?: ABAPLanguageVersion\n}\n\nexport type DdlsAff = AffDdlsV1;\n","/**\n * Auto-generated from SAP/abap-file-formats JSON schemas.\n * Do not edit — regenerate with `bun scripts/generate-aff-schemas.ts`.\n */\n/**\n * The ABAP file format version\n */\nexport type ABAPFileFormatVersion = \"1\"\n/**\n * Description of the ABAP object\n */\nexport type Description = string\n/**\n * Original language of the ABAP object\n */\nexport type OriginalLanguage = string\n/**\n * ABAP language version\n */\nexport type ABAPLanguageVersion = (\"standard\" | \"keyUser\" | \"cloudDevelopment\")\n\n/**\n * DDLX object type\n */\nexport interface AffDdlxV1 {\nformatVersion: ABAPFileFormatVersion\nheader: Header\n}\n/**\n * Header\n */\nexport interface Header {\ndescription: Description\noriginalLanguage: OriginalLanguage\nabapLanguageVersion?: ABAPLanguageVersion\n}\n\nexport type DdlxAff = AffDdlxV1;\n","/**\n * Auto-generated from SAP/abap-file-formats JSON schemas.\n * Do not edit — regenerate with `bun scripts/generate-aff-schemas.ts`.\n */\n/**\n * Format version\n */\nexport type FormatVersion = \"1\"\n/**\n * Description of the ABAP object\n */\nexport type Description = string\n/**\n * Original language of the ABAP object\n */\nexport type OriginalLanguage = string\n/**\n * ABAP language version\n */\nexport type ABAPLanguageVersion = (\"standard\" | \"cloudDevelopment\")\n/**\n * Default remote database schema name when configuring the connection details of logical external schema.\n */\nexport type DefaultRemoteSchema = string\n/**\n * If true, the logical external schema can only be used in routed scenarios.\n */\nexport type UsesRouting = boolean\n\n/**\n * CDS logical external schema\n */\nexport interface AffDesdV1 {\nformatVersion: FormatVersion\nheader: Header\ngeneralInformation?: GeneralInformation\n}\n/**\n * Header\n */\nexport interface Header {\ndescription: Description\noriginalLanguage: OriginalLanguage\nabapLanguageVersion?: ABAPLanguageVersion\n}\n/**\n * General information\n */\nexport interface GeneralInformation {\ndefaultRemoteSchemaName?: DefaultRemoteSchema\nusesRouting?: UsesRouting\n}\n\nexport type DesdAff = AffDesdV1;\n","/**\n * Auto-generated from SAP/abap-file-formats JSON schemas.\n * Do not edit — regenerate with `bun scripts/generate-aff-schemas.ts`.\n */\n/**\n * The ABAP file format version\n */\nexport type ABAPFileFormatVersion = \"1\"\n/**\n * Description of the ABAP object\n */\nexport type Description = string\n/**\n * Original language of the ABAP object\n */\nexport type OriginalLanguage = string\n/**\n * ABAP language version\n */\nexport type ABAPLanguageVersion = (\"standard\" | \"cloudDevelopment\")\n/**\n * Class name\n */\nexport type Class = string\n/**\n * type\n */\nexport type Type = (\"CLAS\" | \"FUGR\" | \"PROG\")\n/**\n * name\n */\nexport type Name = string\n/**\n * Daemon type\n */\nexport type DaemonType = (\"application\" | \"system\")\n/**\n * Start type\n */\nexport type StartType = (\"automaticallyStarted\" | \"explicitlyStartedSameuser\" | \"explicitlyStartedDiffuser\")\n\n/**\n * ABAP daemon\n */\nexport interface AffDmonV1 {\nformatVersion: ABAPFileFormatVersion\nheader: Header\nclassName: Class\ncallerObject: CallerObject\ndaemonType?: DaemonType\nstartType?: StartType\n}\n/**\n * Header\n */\nexport interface Header {\ndescription: Description\noriginalLanguage: OriginalLanguage\nabapLanguageVersion?: ABAPLanguageVersion\n}\n/**\n * Caller object\n */\nexport interface CallerObject {\ntype: Type\nname: Name\n}\n\nexport type DmonAff = AffDmonV1;\n","/**\n * Auto-generated from SAP/abap-file-formats JSON schemas.\n * Do not edit — regenerate with `bun scripts/generate-aff-schemas.ts`.\n */\n/**\n * The ABAP file format version\n */\nexport type ABAPFileFormatVersion = \"1\"\n/**\n * Description of the ABAP object\n */\nexport type Description = string\n/**\n * Original language of the ABAP object\n */\nexport type OriginalLanguage = string\n/**\n * ABAP language version\n */\nexport type ABAPLanguageVersion = (\"standard\" | \"cloudDevelopment\")\n/**\n * Destruction class\n */\nexport type DestructionClass = string\n/**\n * Parent table\n */\nexport type ParentTable = string\n/**\n * Dependent table\n */\nexport type DependentTable = string\n/**\n * Structure definition\n */\nexport type StructureDefinition = StructureDefinitionDetails[]\n\n/**\n * ILM destruction object (DOBJ) v1\n */\nexport interface AffDobjV1 {\nformatVersion: ABAPFileFormatVersion\nheader: Header\nattributes: Attributes\nstructureDefinition: StructureDefinition\n}\n/**\n * Header\n */\nexport interface Header {\ndescription: Description\noriginalLanguage: OriginalLanguage\nabapLanguageVersion?: ABAPLanguageVersion\n}\n/**\n * Attributes\n */\nexport interface Attributes {\ndestructionClass: DestructionClass\n}\n/**\n * Structure definition details\n */\nexport interface StructureDefinitionDetails {\nparentTable?: ParentTable\ndependentTable?: DependentTable\n}\n\nexport type DobjAff = AffDobjV1;\n","/**\n * Auto-generated from SAP/abap-file-formats JSON schemas.\n * Do not edit — regenerate with `bun scripts/generate-aff-schemas.ts`.\n */\n/**\n * The ABAP file format version\n */\nexport type ABAPFileFormatVersion = \"1\"\n/**\n * Paragraph format, max. length 2\n */\nexport type Format = string\n/**\n * Long text line content, max. length 72\n */\nexport type Line = string\n/**\n * Start type\n */\nexport type StartType = LongTextLine[]\n\n/**\n * documentation\n */\nexport interface AffDocuV1 {\nformatVersion: ABAPFileFormatVersion\nlines?: StartType\n}\n/**\n * Long text line with format and content\n */\nexport interface LongTextLine {\nformat: Format\nline: Line\n}\n\nexport type DocuAff = AffDocuV1;\n","/**\n * Auto-generated from SAP/abap-file-formats JSON schemas.\n * Do not edit — regenerate with `bun scripts/generate-aff-schemas.ts`.\n */\n/**\n * The ABAP file format version\n */\nexport type ABAPFileFormatVersion = \"1\"\n/**\n * Description of the ABAP object\n */\nexport type Description = string\n/**\n * Original language of the ABAP object\n */\nexport type OriginalLanguage = string\n/**\n * ABAP language version\n */\nexport type ABAPLanguageVersion = (\"standard\" | \"keyUser\" | \"cloudDevelopment\")\n/**\n * Data type\n */\nexport type DataType = (\"ACCP\" | \"CHAR\" | \"CLNT\" | \"CUKY\" | \"CURR\" | \"DF16_DEC\" | \"DF16_RAW\" | \"DF16_SCL\" | \"DECFLOAT16\" | \"DF34_DEC\" | \"DF34_RAW\" | \"DF34_SCL\" | \"DECFLOAT34\" | \"DATS\" | \"DATN\" | \"DEC\" | \"FLTP\" | \"GEOM_EWKB\" | \"INT1\" | \"INT2\" | \"INT4\" | \"INT8\" | \"LANG\" | \"LCHR\" | \"LRAW\" | \"NUMC\" | \"PREC\" | \"QUAN\" | \"RAW\" | \"RAWSTRING\" | \"SSTRING\" | \"STRING\" | \"TIMS\" | \"TIMN\" | \"UNIT\" | \"UTCLONG\" | \"VARC\")\n/**\n * Length\n */\nexport type Length = number\n/**\n * Output style (for Releases < 71*)\n */\nexport type Style = (\"normal\" | \"signRight\" | \"scalePreserving\" | \"scientific\" | \"scientificWithLeadingZero\" | \"scalePreservingScientific\" | \"engineering\")\n/**\n * Set the output length\n */\nexport type Length1 = number\n/**\n * Values are case sensitive\n */\nexport type CaseSensitive = boolean\n/**\n * Supports negative values\n */\nexport type NegativeValues = boolean\n/**\n * AM/PM time format supported\n */\nexport type AMPMTimeFormat = boolean\n/**\n * Value\n */\nexport type FixedValue = string\n/**\n * Description\n */\nexport type Description1 = string\n/**\n * Fixed values\n */\nexport type FixedValues = SingleValues[]\n/**\n * Low value for the interval\n */\nexport type LowLimitOfTheInterval = string\n/**\n * High value for the interval\n */\nexport type HighLimitOfTheInterval = string\n/**\n * Description\n */\nexport type Description2 = string\n/**\n * Fixed value intervals\n */\nexport type FixedValueIntervals = IntervalValues[]\n/**\n * Name\n */\nexport type Name = string\n/**\n * Name\n */\nexport type Name1 = string\n/**\n * Fixed value appends\n */\nexport type FixedValueAppends = FixedValueAppends1[]\n\n/**\n * Domain properties\n */\nexport interface AffDomaV1 {\nformatVersion: ABAPFileFormatVersion\nheader: Header\nformat: Format\noutputCharacteristics?: OutputCharacteristics\nfixedValues?: FixedValues\nfixedValueIntervals?: FixedValueIntervals\nvalueTable?: ValueTable\nfixedValueAppends?: FixedValueAppends\n}\n/**\n * Header\n */\nexport interface Header {\ndescription: Description\noriginalLanguage: OriginalLanguage\nabapLanguageVersion?: ABAPLanguageVersion\n}\n/**\n * Format\n */\nexport interface Format {\ndataType: DataType\nlength: Length\n/**\n * Set if decimal\n */\ndecimals?: number\n}\n/**\n * Output characteristics\n */\nexport interface OutputCharacteristics {\nstyle?: Style\nlength?: Length1\n/**\n * Conversion Routine\n */\nconversionRoutine?: string\ncaseSensitive?: CaseSensitive\nnegativeValues?: NegativeValues\namPmTimeFormat?: AMPMTimeFormat\n}\n/**\n * Single values\n */\nexport interface SingleValues {\nfixedValue?: FixedValue\ndescription?: Description1\n}\n/**\n * Interval values\n */\nexport interface IntervalValues {\nlowLimit?: LowLimitOfTheInterval\nhighLimit: HighLimitOfTheInterval\ndescription?: Description2\n}\n/**\n * Value table\n */\nexport interface ValueTable {\nname?: Name\n}\n/**\n * Fixed value appends\n */\nexport interface FixedValueAppends1 {\nname?: Name1\n}\n\nexport type DomaAff = AffDomaV1;\n","/**\n * Auto-generated from SAP/abap-file-formats JSON schemas.\n * Do not edit — regenerate with `bun scripts/generate-aff-schemas.ts`.\n */\n/**\n * The ABAP file format version\n */\nexport type ABAPFileFormatVersion = \"1\"\n/**\n * Description of the ABAP object\n */\nexport type Description = string\n/**\n * Original language of the ABAP object\n */\nexport type OriginalLanguage = string\n/**\n * ABAP language version\n */\nexport type ABAPLanguageVersion = (\"standard\" | \"keyUser\" | \"cloudDevelopment\")\n\n/**\n * CDS scalar aspect\n */\nexport interface AffDrasV1 {\nformatVersion: ABAPFileFormatVersion\nheader: Header\n}\n/**\n * Header\n */\nexport interface Header {\ndescription: Description\noriginalLanguage: OriginalLanguage\nabapLanguageVersion?: ABAPLanguageVersion\n}\n\nexport type DrasAff = AffDrasV1;\n","/**\n * Auto-generated from SAP/abap-file-formats JSON schemas.\n * Do not edit — regenerate with `bun scripts/generate-aff-schemas.ts`.\n */\n/**\n * The ABAP file format version\n */\nexport type ABAPFileFormatVersion = \"1\"\n/**\n * Description of the ABAP object\n */\nexport type Description = string\n/**\n * Original language of the ABAP object\n */\nexport type OriginalLanguage = string\n/**\n * ABAP language version\n */\nexport type ABAPLanguageVersion = (\"standard\" | \"keyUser\" | \"cloudDevelopment\")\n\n/**\n * CDS type\n */\nexport interface AffDrtyV1 {\nformatVersion: ABAPFileFormatVersion\nheader: Header\n}\n/**\n * Header\n */\nexport interface Header {\ndescription: Description\noriginalLanguage: OriginalLanguage\nabapLanguageVersion?: ABAPLanguageVersion\n}\n\nexport type DrtyAff = AffDrtyV1;\n","/**\n * Auto-generated from SAP/abap-file-formats JSON schemas.\n * Do not edit — regenerate with `bun scripts/generate-aff-schemas.ts`.\n */\n/**\n * The ABAP file format version\n */\nexport type ABAPFileFormatVersion = \"1\"\n/**\n * Description of the ABAP object\n */\nexport type Description = string\n/**\n * Original language of the ABAP object\n */\nexport type OriginalLanguage = string\n/**\n * ABAP language version\n */\nexport type ABAPLanguageVersion = (\"standard\" | \"keyUser\" | \"cloudDevelopment\")\n\n/**\n * CDS scalar function definition\n */\nexport interface AffDsfdV1 {\nformatVersion: ABAPFileFormatVersion\nheader: Header\n}\n/**\n * Header\n */\nexport interface Header {\ndescription: Description\noriginalLanguage: OriginalLanguage\nabapLanguageVersion?: ABAPLanguageVersion\n}\n\nexport type DsfdAff = AffDsfdV1;\n","/**\n * Auto-generated from SAP/abap-file-formats JSON schemas.\n * Do not edit — regenerate with `bun scripts/generate-aff-schemas.ts`.\n */\n/**\n * The ABAP file format version\n */\nexport type ABAPFileFormatVersion = \"1\"\n/**\n * Description of the ABAP object\n */\nexport type Description = string\n/**\n * Original language of the ABAP object\n */\nexport type OriginalLanguage = string\n/**\n * ABAP language version\n */\nexport type ABAPLanguageVersion = (\"standard\" | \"keyUser\" | \"cloudDevelopment\")\n/**\n * The name of the scalar function\n */\nexport type ScalarFunctionName = string\n/**\n * Engine\n */\nexport type Engine = (\"analyticalEngine\" | \"sqlEngine\")\n/**\n * The name of the AMDP implementation reference\n */\nexport type AMDPReference = string\n/**\n * Flag whether or not the SQL implementation of the CDS scalar function will be automatically exposed in all SQL services\n */\nexport type AutomaticallyExposedInSQLServices = boolean\n\nexport interface AffDsfiV1 {\nformatVersion: ABAPFileFormatVersion\nheader: Header\nscalarFunctionName: ScalarFunctionName\nengine?: Engine\nsqlProperties?: SQLProperties\n}\n/**\n * The header for an ABAP main object (with source code) with a description of 60 characters\n */\nexport interface Header {\ndescription: Description\noriginalLanguage: OriginalLanguage\nabapLanguageVersion?: ABAPLanguageVersion\n}\n/**\n * SQL Properties\n */\nexport interface SQLProperties {\namdpReference: AMDPReference\nautoExposedInSqlServices?: AutomaticallyExposedInSQLServices\n}\n\nexport type DsfiAff = AffDsfiV1;\n","/**\n * Auto-generated from SAP/abap-file-formats JSON schemas.\n * Do not edit — regenerate with `bun scripts/generate-aff-schemas.ts`.\n */\n/**\n * The ABAP file format version\n */\nexport type ABAPFileFormatVersion = \"1\"\n/**\n * Description of the ABAP object\n */\nexport type Description = string\n/**\n * Original language of the ABAP object\n */\nexport type OriginalLanguage = string\n/**\n * ABAP language version\n */\nexport type ABAPLanguageVersion = (\"standard\" | \"keyUser\" | \"cloudDevelopment\")\n\n/**\n * Dynamic cache\n */\nexport interface AffDtdcV1 {\nformatVersion: ABAPFileFormatVersion\nheader: Header\n}\n/**\n * Header\n */\nexport interface Header {\ndescription: Description\noriginalLanguage: OriginalLanguage\nabapLanguageVersion?: ABAPLanguageVersion\n}\n\nexport type DtdcAff = AffDtdcV1;\n","/**\n * Auto-generated from SAP/abap-file-formats JSON schemas.\n * Do not edit — regenerate with `bun scripts/generate-aff-schemas.ts`.\n */\n/**\n * The ABAP file format version\n */\nexport type ABAPFileFormatVersion = \"1\"\n/**\n * Description of the ABAP object\n */\nexport type Description = string\n/**\n * Original language of the ABAP object\n */\nexport type OriginalLanguage = string\n/**\n * ABAP language version\n */\nexport type ABAPLanguageVersion = (\"standard\" | \"cloudDevelopment\")\n\n/**\n * CDS entity buffer\n */\nexport interface AffDtebV1 {\nformatVersion: ABAPFileFormatVersion\nheader: Header\n}\n/**\n * Header\n */\nexport interface Header {\ndescription: Description\noriginalLanguage: OriginalLanguage\nabapLanguageVersion?: ABAPLanguageVersion\n}\n\nexport type DtebAff = AffDtebV1;\n","/**\n * Auto-generated from SAP/abap-file-formats JSON schemas.\n * Do not edit — regenerate with `bun scripts/generate-aff-schemas.ts`.\n */\n/**\n * The ABAP file format version\n */\nexport type ABAPFileFormatVersion = \"1\"\n/**\n * Description of the ABAP object\n */\nexport type Description = string\n/**\n * Original language of the ABAP object\n */\nexport type OriginalLanguage = string\n/**\n * ABAP language version\n */\nexport type ABAPLanguageVersion = (\"standard\" | \"keyUser\" | \"cloudDevelopment\")\n/**\n * Reference domain name\n */\nexport type DomainName = string\n/**\n * Data type\n */\nexport type DataType = (\"ACCP\" | \"CHAR\" | \"CLNT\" | \"CUKY\" | \"CURR\" | \"DF16_DEC\" | \"DF16_RAW\" | \"DF16_SCL\" | \"DECFLOAT16\" | \"DF34_DEC\" | \"DF34_RAW\" | \"DF34_SCL\" | \"DECFLOAT34\" | \"DATS\" | \"DATN\" | \"DEC\" | \"FLTP\" | \"GEOM_EWKB\" | \"INT1\" | \"INT2\" | \"INT4\" | \"INT8\" | \"LANG\" | \"LCHR\" | \"LRAW\" | \"NUMC\" | \"PREC\" | \"QUAN\" | \"RAW\" | \"RAWSTRING\" | \"SSTRING\" | \"STRING\" | \"TIMS\" | \"TIMN\" | \"UNIT\" | \"UTCLONG\" | \"VARC\")\n/**\n * Length\n */\nexport type Length = number\n/**\n * Decimals\n */\nexport type Decimals = number\n/**\n * Reference to an ABAP type\n */\nexport type ReferenceType = string\n/**\n * Reference to a predefined ABAP type\n */\nexport type ReferencePredefinedType = string\n/**\n * Short field label\n */\nexport type Short = string\n/**\n * Short length\n */\nexport type ShortLength = number\n/**\n * Medium field label\n */\nexport type Medium = string\n/**\n * Medium length\n */\nexport type MediumLength = number\n/**\n * Long field label\n */\nexport type Long = string\n/**\n * Long length\n */\nexport type LongLength = number\n/**\n * Heading field label\n */\nexport type Heading = string\n/**\n * Heading length\n */\nexport type HeadingLength = number\n/**\n * Search help name\n */\nexport type Name = string\n/**\n * Search help parameters\n */\nexport type Parameter = string\n/**\n * Basic direction\n */\nexport type BasicDirection = (\"leftToRight\" | \"rightToLeft\")\n/**\n * Deactivates bidirectional text filtering\n */\nexport type NoBidirectionalFiltering = boolean\n/**\n * Set/Get parameter ID\n */\nexport type SetGetParameterID = string\n/**\n * Default component name\n */\nexport type DefaultComponentName = string\n/**\n * Change document relevant\n */\nexport type ChangeDocumentRelevant = boolean\n/**\n * No input history\n */\nexport type NoInputHistory = boolean\n\n/**\n * Data element (DTEL)\n */\nexport interface AffDtelV1 {\nformatVersion: ABAPFileFormatVersion\nheader: Header\ndataTypeInformation: DataTypeInformation\nfieldLabels?: FieldLabels\nsearchHelp?: SearchHelp\nbidirectionalOptions?: BidirectionalOptions\nadditionalProperties?: AdditionalProperties\n}\n/**\n * Header\n */\nexport interface Header {\ndescription: Description\noriginalLanguage: OriginalLanguage\nabapLanguageVersion?: ABAPLanguageVersion\n}\n/**\n * Data type information\n */\nexport interface DataTypeInformation {\ndomainName?: DomainName\npredefinedType?: PredefinedType\nreferenceType?: ReferenceType\nreferencePredefinedType?: ReferencePredefinedType\n}\n/**\n * Predefined ABAP type\n */\nexport interface PredefinedType {\ndataType: DataType\nlength: Length\ndecimals?: Decimals\n}\n/**\n * Field labels\n */\nexport interface FieldLabels {\nshort?: Short\nshortLength?: ShortLength\nmedium?: Medium\nmediumLength?: MediumLength\nlong?: Long\nlongLength?: LongLength\nheading?: Heading\nheadingLength?: HeadingLength\n}\n/**\n * Search help\n */\nexport interface SearchHelp {\nname: Name\nparameter: Parameter\n}\n/**\n * Bidirectional options\n */\nexport interface BidirectionalOptions {\nbasicDirection?: BasicDirection\nnoFiltering?: NoBidirectionalFiltering\n}\n/**\n * Additional properties\n */\nexport interface AdditionalProperties {\nparameterId?: SetGetParameterID\ndefaultComponentName?: DefaultComponentName\nchangeDocumentRelevant?: ChangeDocumentRelevant\nnoInputHistory?: NoInputHistory\n}\n\nexport type DtelAff = AffDtelV1;\n","/**\n * Auto-generated from SAP/abap-file-formats JSON schemas.\n * Do not edit — regenerate with `bun scripts/generate-aff-schemas.ts`.\n */\n/**\n * The ABAP file format version\n */\nexport type ABAPFileFormatVersion = \"1\"\n/**\n * Description of the ABAP object\n */\nexport type Description = string\n/**\n * Original language of the ABAP object\n */\nexport type OriginalLanguage = string\n/**\n * ABAP language version\n */\nexport type ABAPLanguageVersion = (\"standard\" | \"cloudDevelopment\")\n\n/**\n * Dictionary Tuning Index\n */\nexport interface AffDtixV1 {\nformatVersion: ABAPFileFormatVersion\nheader: Header\n}\n/**\n * Header\n */\nexport interface Header {\ndescription: Description\noriginalLanguage: OriginalLanguage\nabapLanguageVersion?: ABAPLanguageVersion\n}\n\nexport type DtixAff = AffDtixV1;\n","/**\n * Auto-generated from SAP/abap-file-formats JSON schemas.\n * Do not edit — regenerate with `bun scripts/generate-aff-schemas.ts`.\n */\n/**\n * The ABAP file format version\n */\nexport type ABAPFileFormatVersion = \"1\"\n/**\n * Description of the ABAP object\n */\nexport type Description = string\n/**\n * Original language of the ABAP object\n */\nexport type OriginalLanguage = string\n/**\n * ABAP language version\n */\nexport type ABAPLanguageVersion = (\"standard\" | \"keyUser\" | \"cloudDevelopment\")\n\n/**\n * Dictionary tuning static cache\n */\nexport interface AffDtscV1 {\nformatVersion: ABAPFileFormatVersion\nheader: Header\n}\n/**\n * Header\n */\nexport interface Header {\ndescription: Description\noriginalLanguage: OriginalLanguage\nabapLanguageVersion?: ABAPLanguageVersion\n}\n\nexport type DtscAff = AffDtscV1;\n","/**\n * Auto-generated from SAP/abap-file-formats JSON schemas.\n * Do not edit — regenerate with `bun scripts/generate-aff-schemas.ts`.\n */\n/**\n * The ABAP file format version\n */\nexport type ABAPFileFormatVersion = \"1\"\n/**\n * Description of the ABAP object\n */\nexport type Description = string\n/**\n * Original language of the ABAP object\n */\nexport type OriginalLanguage = string\n/**\n * ABAP language version\n */\nexport type ABAPLanguageVersion = (\"standard\" | \"cloudDevelopment\")\n/**\n * Country code\n */\nexport type CountryCode = string\n/**\n * Assigned representation type\n */\nexport type Name = string\n/**\n * Assign representation types associated with consistency scenario\n */\nexport type RepresentationTypes = RepresentationType[]\n/**\n * View name\n */\nexport type ViewName = string\n/**\n * Field name\n */\nexport type FieldName = string\n/**\n * Field type\n */\nexport type FieldType = (\"selectOptions\" | \"parameterSingleValue\" | \"parameterMultipleValues\")\n/**\n * Additional selection fields of validation report\n */\nexport type AdditionalSelectionFields = AdditionalSelectionField[]\n/**\n * Message type\n */\nexport type Name1 = string\n/**\n * Tax authority document type\n */\nexport type TaxAuthorityDocumentType = string\n/**\n * Tax authority message types\n */\nexport type TaxAuthorityMessageTypes = TaxAuthorityMessageType[]\n/**\n * Table name\n */\nexport type Name2 = string\n/**\n * Additional tax authority tables\n */\nexport type AdditionalTaxAuthorityTables = AdditionalTaxAuthorityTable[]\n/**\n * eDocument Type\n */\nexport type Name3 = string\n/**\n * Assign eDocument types associated with consistency scenario\n */\nexport type EDocumentTypes = EDocumentType[]\n/**\n * Comparison type\n */\nexport type Name4 = string\n/**\n * Description of the comparison type\n */\nexport type Description1 = string\n/**\n * Position number\n */\nexport type PositionNumber = string\n/**\n * Implementing Class\n */\nexport type ImplementingClass = string\n/**\n * Data Source\n */\nexport type DataSource = string\n/**\n * Check id\n */\nexport type CheckID = string\n/**\n * Field name\n */\nexport type FieldName1 = string\n/**\n * Field value\n */\nexport type FieldValue = string\n/**\n * Result process\n */\nexport type ResultProcess = string\n/**\n * Check id\n */\nexport type CheckID1 = string\n/**\n * Sequence number\n */\nexport type SequenceNumber = string\n/**\n * Source field name 1\n */\nexport type SourceFieldName1 = string\n/**\n * Source field value 1\n */\nexport type SourceFieldValue1 = string\n/**\n * Source field name 2\n */\nexport type SourceFieldName2 = string\n/**\n * Source field value 2\n */\nexport type SourceFieldValue2 = string\n/**\n * Result process\n */\nexport type ResultProcess1 = string\n/**\n * Assigned status checks\n */\nexport type StatusChecks = StatusCheck[]\n/**\n * Check id\n */\nexport type CheckID2 = string\n/**\n * Check number\n */\nexport type CheckNumber = string\n/**\n * Additional data source\n */\nexport type AdditionalDataSource = string\n/**\n * Additional check description\n */\nexport type AdditionalDescription = string\n/**\n * Comparison field group for mismatched fields\n */\nexport type Name5 = string\n/**\n * Mismatch field group description\n */\nexport type Description2 = string\n/**\n * Level of comparison field group\n */\nexport type Level = (\"header\" | \"item\")\n/**\n * Formula applied to perform the content check on the field group\n */\nexport type CheckFormula = (\"field\" | \"fieldWithAbsTolerance\" | \"fieldWithoutAbsTolerance\")\n/**\n * Result process\n */\nexport type ResultProcess2 = string\n/**\n * Representation type\n */\nexport type RepresentationType1 = string\n/**\n * Field name to be compared\n */\nexport type FieldName2 = string\n/**\n * Comparison sequence\n */\nexport type ComparisonSequence = string\n/**\n * Field Names whose values will be compared\n */\nexport type ComparisonFields = ComparisonFieldName[]\n/**\n * Comparison field groups\n */\nexport type ComparisonFieldGroups = ComparisonFieldGroup[]\n/**\n * Assigned content checks\n */\nexport type ContentChecks = ContentCheck[]\n/**\n * Check id\n */\nexport type CheckID3 = string\n/**\n * Check execution control parameter\n */\nexport type ControlParameter = (\"alwaysRunCheck\" | \"runCheckIfNoInconsistency\")\n/**\n * Sequence of the checks and control parameter\n */\nexport type CheckSequence = CheckSequence1[]\n/**\n * Assigned representation type\n */\nexport type Name6 = string\n/**\n * Assigned representation types\n */\nexport type RepresentationTypes1 = RepresentationType2[]\n/**\n * Define comparison types\n */\nexport type ComparisonTypes = ComparisonType[]\n/**\n * Event name\n */\nexport type Name7 = string\n/**\n * Comparison type\n */\nexport type ComparisonType1 = string\n/**\n * Check id\n */\nexport type CheckID4 = string\n/**\n * Assigned comparison Types and checks\n */\nexport type ComparisonTypesAndChecks = ComparisonTypeAndCheck[]\n/**\n * Comparison type\n */\nexport type ComparisonType2 = string\n/**\n * Check id\n */\nexport type CheckID5 = string\n/**\n * Relevance\n */\nexport type Relevance = (\"relevant\" | \"notRelevant\" | \"unchanged\")\n/**\n * Define relevance of checks\n */\nexport type CheckRelevance = CheckRelevance1[]\n/**\n * Assigned events to consistency scenario\n */\nexport type Events = Event[]\n/**\n * Inconsistency category\n */\nexport type Name8 = string\n/**\n * Description of the result ui group\n */\nexport type Description3 = string\n/**\n * Country view extension\n */\nexport type CountryViewExtension = string\nexport type Name9 = string\n/**\n * Assign result process to the UI group\n */\nexport type ResultProcesses = ResultProcess3[]\n/**\n * Inconsistency categories and assigned result processes\n */\nexport type InconsistencyCategories = InconsistencyCategory[]\n\n/**\n * Consistency scenario\n */\nexport interface AffEdccV1 {\nformatVersion: ABAPFileFormatVersion\nheader: Header\ngeneralInformation: GeneralInformation\nrepresentationTypes: RepresentationTypes\nadditionalSelectionFields?: AdditionalSelectionFields\ntaxAuthorityMessageTypes?: TaxAuthorityMessageTypes\ntaxAuthorityTables?: AdditionalTaxAuthorityTables\nedocumentTypes?: EDocumentTypes\ncomparisonTypesAndEvents: ComparisonTypesAndEvents\n}\n/**\n * Header\n */\nexport interface Header {\ndescription: Description\noriginalLanguage: OriginalLanguage\nabapLanguageVersion?: ABAPLanguageVersion\n}\n/**\n * General information of consistency scenario\n */\nexport interface GeneralInformation {\ncountryCode: CountryCode\n}\n/**\n * Assigned representation type\n */\nexport interface RepresentationType {\nname: Name\n}\n/**\n * Additional selection fields of validation report\n */\nexport interface AdditionalSelectionField {\nviewName: ViewName\nfieldName: FieldName\nfieldType: FieldType\n}\n/**\n * Tax authority message type\n */\nexport interface TaxAuthorityMessageType {\nname: Name1\ntaxAuthorityDocumentType: TaxAuthorityDocumentType\n}\n/**\n * Additional tax authority table\n */\nexport interface AdditionalTaxAuthorityTable {\nname: Name2\n}\n/**\n * eDocument types associated with consistency scenario\n */\nexport interface EDocumentType {\nname: Name3\n}\n/**\n * Define comparison types and assign events to the comparison scenario\n */\nexport interface ComparisonTypesAndEvents {\ncomparisonTypes: ComparisonTypes\nevents?: Events\ninconsistencyCategories: InconsistencyCategories\n}\n/**\n * Comparison type\n */\nexport interface ComparisonType {\nname: Name4\ndescription: Description1\npositionNumber: PositionNumber\nimplementingClass: ImplementingClass\ndataSource: DataSource\nchecks: Checks\nrepresentationTypes: RepresentationTypes1\n}\n/**\n * Assigned checks\n */\nexport interface Checks {\nexistenceCheck: ExistenceCheck\nstatusChecks?: StatusChecks\ncontentChecks?: ContentChecks\ncheckSequence?: CheckSequence\n}\n/**\n * Assigned existence check\n */\nexport interface ExistenceCheck {\ncheckId: CheckID\nfieldName: FieldName1\nfieldValue: FieldValue\nresultProcess: ResultProcess\n}\n/**\n * Status check\n */\nexport interface StatusCheck {\ncheckId: CheckID1\nsequenceNumber: SequenceNumber\nsourceFieldName1: SourceFieldName1\nsourceFieldValue1: SourceFieldValue1\nsourceFieldName2: SourceFieldName2\nsourceFieldValue2: SourceFieldValue2\nresultProcess: ResultProcess1\n}\n/**\n * Content check\n */\nexport interface ContentCheck {\ncheckId: CheckID2\ncheckNumber: CheckNumber\ndataSource?: AdditionalDataSource\nadditionalDescription: AdditionalDescription\ncomparisonFieldGroups: ComparisonFieldGroups\n}\n/**\n * Comparison field group\n */\nexport interface ComparisonFieldGroup {\nname: Name5\ndescription: Description2\nlevel: Level\ncheckFormula: CheckFormula\nresultProcess: ResultProcess2\ncomparisonFields: ComparisonFields\n}\n/**\n * Field Names whose values will be compared\n */\nexport interface ComparisonFieldName {\nrepresentationType: RepresentationType1\nfieldName: FieldName2\ncomparisonSequence: ComparisonSequence\n}\n/**\n * Sequence of the checks and control parameter\n */\nexport interface CheckSequence1 {\ncheckId: CheckID3\ncontrolParameter?: ControlParameter\n}\n/**\n * Assigned representation type\n */\nexport interface RepresentationType2 {\nname: Name6\n}\n/**\n * Assigned event to consistency scenario\n */\nexport interface Event {\nname: Name7\ncomparisonTypesAndChecks: ComparisonTypesAndChecks\ncheckRelevance: CheckRelevance\n}\n/**\n * Assigned comparison type and check\n */\nexport interface ComparisonTypeAndCheck {\ncomparisonType: ComparisonType1\ncheckId?: CheckID4\n}\n/**\n * Define relevance of check\n */\nexport interface CheckRelevance1 {\ncomparisonType: ComparisonType2\ncheckId: CheckID5\nrelevance?: Relevance\n}\n/**\n * Inconsistency category\n */\nexport interface InconsistencyCategory {\nname: Name8\ndescription: Description3\ncountryViewExtension?: CountryViewExtension\nresultProcesses: ResultProcesses\n}\n/**\n * Assign result process to the UI group\n */\nexport interface ResultProcess3 {\nname: Name9\n}\n\nexport type EdccAff = AffEdccV1;\n","/**\n * Auto-generated from SAP/abap-file-formats JSON schemas.\n * Do not edit — regenerate with `bun scripts/generate-aff-schemas.ts`.\n */\n/**\n * The ABAP file format version\n */\nexport type ABAPFileFormatVersion = \"1\"\n/**\n * Description of the ABAP object\n */\nexport type Description = string\n/**\n * Original language of the ABAP object\n */\nexport type OriginalLanguage = string\n/**\n * ABAP language version\n */\nexport type ABAPLanguageVersion = (\"standard\" | \"cloudDevelopment\")\n/**\n * Consistency check category\n */\nexport type CheckCategory = (\"existenceCheck\" | \"statusCheck\" | \"edocumentExistenceCheck\" | \"contentMismatchCheck\")\n/**\n * Consistency check ID classification\n */\nexport type CheckClassification = (\"coreDeliveredChecks\" | \"additionalImplementedChecks\")\n/**\n * Consistency check class\n */\nexport type AdditionalCheckClass = string\n/**\n * Result process derived\n */\nexport type ResultProcessDerived = boolean\n\n/**\n * Consistency check ID\n */\nexport interface AffEdckV1 {\nformatVersion: ABAPFileFormatVersion\nheader: Header\ngeneralInformation: GeneralInformation\n}\n/**\n * Header\n */\nexport interface Header {\ndescription: Description\noriginalLanguage: OriginalLanguage\nabapLanguageVersion?: ABAPLanguageVersion\n}\n/**\n * General information of consistency check ID\n */\nexport interface GeneralInformation {\ncheckCategory?: CheckCategory\ncheckClassification?: CheckClassification\nadditionalCheckClass?: AdditionalCheckClass\nresultProcessDerived?: ResultProcessDerived\n}\n\nexport type EdckAff = AffEdckV1;\n","/**\n * Auto-generated from SAP/abap-file-formats JSON schemas.\n * Do not edit — regenerate with `bun scripts/generate-aff-schemas.ts`.\n */\n/**\n * The ABAP file format version\n */\nexport type ABAPFileFormatVersion = \"1\"\n/**\n * Description of the ABAP object\n */\nexport type Description = string\n/**\n * Original language of the ABAP object\n */\nexport type OriginalLanguage = string\n/**\n * ABAP language version\n */\nexport type ABAPLanguageVersion = (\"standard\" | \"cloudDevelopment\")\n\n/**\n * Representation type\n */\nexport interface AffEdcrV1 {\nformatVersion: ABAPFileFormatVersion\nheader: Header\n}\n/**\n * Header\n */\nexport interface Header {\ndescription: Description\noriginalLanguage: OriginalLanguage\nabapLanguageVersion?: ABAPLanguageVersion\n}\n\nexport type EdcrAff = AffEdcrV1;\n","/**\n * Auto-generated from SAP/abap-file-formats JSON schemas.\n * Do not edit — regenerate with `bun scripts/generate-aff-schemas.ts`.\n */\n/**\n * Format version\n */\nexport type FormatVersion = \"1\"\n/**\n * Description of the ABAP object\n */\nexport type Description = string\n/**\n * Original language of the ABAP object\n */\nexport type OriginalLanguage = string\n/**\n * ABAP language version\n */\nexport type ABAPLanguageVersion = (\"standard\" | \"cloudDevelopment\")\n/**\n * Interface direction\n */\nexport type Direction = (\"outbound\" | \"inbound\")\n/**\n * Version\n */\nexport type Version = number\n/**\n * Description\n */\nexport type Description1 = string\n/**\n * Active from\n */\nexport type ActiveFrom = string\n/**\n * DRC process type\n */\nexport type ProcessType = string\n/**\n * DRC process version\n */\nexport type ProcessVersion = string\n/**\n * DRC process subtype\n */\nexport type ProcessSubtype = string\n/**\n * DRC process action\n */\nexport type Action = string\n/**\n * eDoc response interface\n */\nexport type ResponseInterface = string\n/**\n * Response interface version\n */\nexport type ResponseInterfaceVersion = number\n/**\n * Interface versions\n */\nexport type Versions = VersionDetails[]\n\n/**\n * eDocument interface\n */\nexport interface AffEdoiV1 {\nformatVersion: FormatVersion\nheader: Header\ngeneralInformation: GeneralInformation\nversions: Versions\n}\n/**\n * Header\n */\nexport interface Header {\ndescription: Description\noriginalLanguage: OriginalLanguage\nabapLanguageVersion?: ABAPLanguageVersion\n}\n/**\n * General information\n */\nexport interface GeneralInformation {\ndirection: Direction\n}\n/**\n * eDocument interface version details\n */\nexport interface VersionDetails {\nversion: Version\ndescription: Description1\nactiveFrom: ActiveFrom\ncommunicationAttributes?: CommunicationIntegrationAttributes\n}\n/**\n * Communication integration attributes\n */\nexport interface CommunicationIntegrationAttributes {\nprocessType?: ProcessType\nprocessVersion?: ProcessVersion\nprocessSubtype?: ProcessSubtype\ndrcAction?: Action\nresponseInterface?: ResponseInterface\nresponseInterfaceVersion?: ResponseInterfaceVersion\n}\n\nexport type EdoiAff = AffEdoiV1;\n","/**\n * Auto-generated from SAP/abap-file-formats JSON schemas.\n * Do not edit — regenerate with `bun scripts/generate-aff-schemas.ts`.\n */\n/**\n * The ABAP file format version\n */\nexport type ABAPFileFormatVersion = \"1\"\n/**\n * Description of the ABAP object\n */\nexport type Description = string\n/**\n * Original language of the ABAP object\n */\nexport type OriginalLanguage = string\n/**\n * ABAP language version\n */\nexport type ABAPLanguageVersion = (\"standard\" | \"cloudDevelopment\")\n/**\n * Consumer class\n */\nexport type ConsumerClass = string\n/**\n * Descriptor class\n */\nexport type DescriptorClass = string\n/**\n * Type\n */\nexport type Type = string\n/**\n * Entity name\n */\nexport type EntityName = string\nexport type EventTypes = EventType[]\n\nexport interface AffEeecV1 {\nformatVersion: ABAPFileFormatVersion\nheader: Header\nconsumerClass: ConsumerClass\ndescriptorClass: DescriptorClass\neventTypes?: EventTypes\n}\n/**\n * Header\n */\nexport interface Header {\ndescription: Description\noriginalLanguage: OriginalLanguage\nabapLanguageVersion?: ABAPLanguageVersion\n}\nexport interface EventType {\ntype: Type\nentityName: EntityName\n}\n\nexport type EeecAff = AffEeecV1;\n","/**\n * Auto-generated from SAP/abap-file-formats JSON schemas.\n * Do not edit — regenerate with `bun scripts/generate-aff-schemas.ts`.\n */\n/**\n * The ABAP file format version\n */\nexport type ABAPFileFormatVersion = \"1\"\n/**\n * Description of the ABAP object\n */\nexport type Description = string\n/**\n * Original language of the ABAP object\n */\nexport type OriginalLanguage = string\n/**\n * ABAP language version\n */\nexport type ABAPLanguageVersion = (\"standard\" | \"keyUser\" | \"cloudDevelopment\")\n/**\n * Enhancement Spot name\n */\nexport type EnhancementSpotName = string\n/**\n * Name of the BAdI implementation\n */\nexport type Name = string\n/**\n * Description of the BAdI implementation\n */\nexport type Description1 = string\n/**\n * BAdI Definition of the BAdI implementation\n */\nexport type BAdIDefinition = string\n/**\n * Implementing class of the BAdI implementation\n */\nexport type ImplementingClass = string\n/**\n * BAdI implementation is an example implementation\n */\nexport type IsExampleImplementation = boolean\n/**\n * BAdI implementation is the default implementation of the BAdI definition\n */\nexport type IsDefaultImplementation = boolean\n/**\n * BAdI implementation is active\n */\nexport type BAdIImplementationIsActive = boolean\n/**\n * Does the BAdI implementation support customizing\n */\nexport type BAdIImplementationCustomizing = (\"notSupported\" | \"supported\" | \"supportedNoTransport\")\n/**\n * Filter value\n */\nexport type FilterValue = string\n/**\n * An and/or-operator combining filters\n */\nexport type Operator = string\n/**\n * Filter value\n */\nexport type FilterValue1 = string\n/**\n * An and/or-operator combining filters\n */\nexport type Operator1 = string\n/**\n * Filter value\n */\nexport type FilterValue2 = string\n/**\n * Filter values\n */\nexport type FilterValues2 = FilterValue2[]\n/**\n * Filter values\n */\nexport type FilterValues1 = (FilterValue1 | FilterCombination1)[]\n/**\n * Filter values for this BAdI implementation\n */\nexport type FilterValues = (FilterValue | FilterCombination)[]\n/**\n * BAdI implementations of the ENHO\n */\nexport type BAdIImplementationsOfTheENHO = BAdIImplementation[]\n/**\n * Type of the referenced object\n */\nexport type TypeOfTheReferencedObject = string\n/**\n * Name of the referenced object\n */\nexport type NameOfTheReferencedObject = string\n/**\n * Program ID (R3TR or LIMU) of the referenced object\n */\nexport type ProgramIDOfTheReferencedObject = string\n/**\n * Element usage of the referenced object\n */\nexport type ElementUsage = (\"usedObject\" | \"enhancedObject\" | \"migratedFrom\")\n/**\n * Main object type of the referenced object\n */\nexport type MainObjectType = string\n/**\n * Main object name of the referenced object\n */\nexport type MainObjectName = string\n/**\n * Referenced objects of the enhancement implementation\n */\nexport type ReferencedObjects = AReferencedObject[]\n\n/**\n * Object type ENHO\n */\nexport interface AffEnhoV1 {\nformatVersion: ABAPFileFormatVersion\nheader: Header\nenhancementSpot: EnhancementSpotName\nbadiImplementations?: BAdIImplementationsOfTheENHO\nreferencedObjects: ReferencedObjects\n}\n/**\n * Header\n */\nexport interface Header {\ndescription: Description\noriginalLanguage: OriginalLanguage\nabapLanguageVersion?: ABAPLanguageVersion\n}\n/**\n * Information about this BAdI implementation\n */\nexport interface BAdIImplementation {\nname: Name\ndescription: Description1\nbadiDefinition: BAdIDefinition\nimplementingClass?: ImplementingClass\nisExampleImplementation?: IsExampleImplementation\nisDefaultImplementation?: IsDefaultImplementation\nisActiveImplementation?: BAdIImplementationIsActive\ncustomizing?: BAdIImplementationCustomizing\nfilterValues?: FilterValues\n}\n/**\n * Filter combination\n */\nexport interface FilterCombination {\noperator?: Operator\nfilterValues?: FilterValues1\n}\n/**\n * Filter combination\n */\nexport interface FilterCombination1 {\noperator?: Operator1\nfilterValues?: FilterValues2\n}\n/**\n * A referenced object\n */\nexport interface AReferencedObject {\nobjectType: TypeOfTheReferencedObject\nobjectName: NameOfTheReferencedObject\nprogramId: ProgramIDOfTheReferencedObject\nelementUsage: ElementUsage\nmainObjectType: MainObjectType\nmainObjectName: MainObjectName\n}\n\nexport type EnhoAff = AffEnhoV1;\n","/**\n * Auto-generated from SAP/abap-file-formats JSON schemas.\n * Do not edit — regenerate with `bun scripts/generate-aff-schemas.ts`.\n */\n/**\n * The ABAP file format version\n */\nexport type ABAPFileFormatVersion = \"1\"\n/**\n * Description of the ABAP object\n */\nexport type Description = string\n/**\n * Original language of the ABAP object\n */\nexport type OriginalLanguage = string\n/**\n * ABAP language version\n */\nexport type ABAPLanguageVersion = (\"standard\" | \"keyUser\" | \"cloudDevelopment\")\n/**\n * SAP internal\n */\nexport type SAPInternal = boolean\n/**\n * Tool type of the BAdI Enhancement Spot\n */\nexport type BAdIEnhancementSpotToolType = \"badiDefinition\"\n/**\n * Name of the BAdI definition\n */\nexport type NameOfTheBAdIDefinition = string\n/**\n * Description of the BAdI definition\n */\nexport type DescriptionOfTheBAdIDefinition = string\n/**\n * Interface of the BAdI definition\n */\nexport type InterfaceOfTheBAdIDefinition = string\n/**\n * Instantiation of the BAdI definition\n */\nexport type InstantiationOfTheBAdIDefinition = (\"creatingNewInstances\" | \"reuseInstances\" | \"contextSpecificInstances\")\n/**\n * Indicator whether the BAdI definition is single- or multiple usable\n */\nexport type SingleOrMultipleUseBAdI = boolean\n/**\n * SAP internal\n */\nexport type SAPInternal1 = boolean\n/**\n * Example class\n */\nexport type ExampleClass = string\n/**\n * Example classes of the BAdI definition\n */\nexport type ExampleClassesOfTheBAdIDefinition = ExampleClass[]\n/**\n * Name of the default/fallback class. The fallback class is executed if no BAdI implementation exists.\n */\nexport type NameOfTheDefaultFallbackClass = string\n/**\n * Limited filter use\n */\nexport type LimitedFilterUse = boolean\n/**\n * Documentation Id\n */\nexport type DocumentationId = string\n/**\n * BADI is an AMDP BAdI\n */\nexport type AmdpBAdI = boolean\n/**\n * Name of the filter\n */\nexport type NameOfTheFilter = string\n/**\n * Description of the filter\n */\nexport type DescriptionOfTheFilter = string\n/**\n * Type of the filter\n */\nexport type TypeOfTheFilter = (\"integer\" | \"characterLike\" | \"string\" | \"numeric\" | \"packed\")\n/**\n * The filter has only constant filter values\n */\nexport type OnlyConstantFilterValues = boolean\n/**\n * Type of the value check object\n */\nexport type TypeOfTheValueCheckObject = (\"domain\" | \"dataElement\")\n/**\n * Name of the value check object\n */\nexport type NameOfTheValueCheckObject = string\n/**\n * Name of the value check class\n */\nexport type NameOfTheValueCheckClass = string\n/**\n * Length of the value check\n */\nexport type LengthOfTheValueCheck = number\n/**\n * Decimal places of the value check\n */\nexport type DecimalPlacesOfTheValueCheck = number\n/**\n * Filters of the BAdI definition\n */\nexport type FiltersOfTheBAdIDefinition = Filter[]\n/**\n * BAdI definitions of the BAdI Enhancement Spot\n */\nexport type BAdIDefinitionsOfTheBAdIEnhancementSpot = BAdIDefinition[]\n\n/**\n * Object type ENHS\n */\nexport interface AffEnhsV1 {\nformatVersion: ABAPFileFormatVersion\nheader: Header\nconfiguration: Configuration\nbadiDefinitions?: BAdIDefinitionsOfTheBAdIEnhancementSpot\n}\n/**\n * Header\n */\nexport interface Header {\ndescription: Description\noriginalLanguage: OriginalLanguage\nabapLanguageVersion?: ABAPLanguageVersion\n}\n/**\n * Configuration-specific fields\n */\nexport interface Configuration {\nsapInternal?: SAPInternal\ntool: BAdIEnhancementSpotToolType\n}\n/**\n * Information about this BAdI definition\n */\nexport interface BAdIDefinition {\nname: NameOfTheBAdIDefinition\ndescription: DescriptionOfTheBAdIDefinition\ninterface: InterfaceOfTheBAdIDefinition\ninstantiation: InstantiationOfTheBAdIDefinition\nmultipleUse?: SingleOrMultipleUseBAdI\nsapInternal?: SAPInternal1\nexampleClasses?: ExampleClassesOfTheBAdIDefinition\nfallbackClass?: NameOfTheDefaultFallbackClass\nfilterLimitation?: LimitedFilterUse\ndocumentationId?: DocumentationId\namdp?: AmdpBAdI\nfilters?: FiltersOfTheBAdIDefinition\n}\n/**\n * Information about this filter\n */\nexport interface Filter {\nname: NameOfTheFilter\ndescription: DescriptionOfTheFilter\ntype: TypeOfTheFilter\nonlyConstantValues?: OnlyConstantFilterValues\nvalueCheckDdic?: ValueCheckDdic\nvalueCheckClass?: ValueCheckClass\n}\n/**\n * Value check via domain or data element\n */\nexport interface ValueCheckDdic {\ntype: TypeOfTheValueCheckObject\nobjectName: NameOfTheValueCheckObject\n}\n/**\n * Value check via class\n */\nexport interface ValueCheckClass {\nobjectName: NameOfTheValueCheckClass\nlength?: LengthOfTheValueCheck\ndecimalPlaces?: DecimalPlacesOfTheValueCheck\n}\n\nexport type EnhsAff = AffEnhsV1;\n","/**\n * Auto-generated from SAP/abap-file-formats JSON schemas.\n * Do not edit — regenerate with `bun scripts/generate-aff-schemas.ts`.\n */\n/**\n * Format version\n */\nexport type FormatVersion = \"1\"\n/**\n * Description of the ABAP object\n */\nexport type Description = string\n/**\n * Original language of the ABAP object\n */\nexport type OriginalLanguage = string\n/**\n * ABAP language version\n */\nexport type ABAPLanguageVersion = (\"standard\" | \"keyUser\" | \"cloudDevelopment\")\n/**\n * Table name\n */\nexport type TableName = string\n/**\n * Lock mode\n */\nexport type LockMode = (\"exclusive\" | \"shared\" | \"exclusiveNotCumulative\" | \"setOptimistic\" | \"promoteOptimistic\" | \"conflictCheckExtendedExcl\" | \"conflictCheckExclusive\" | \"conflictCheckShared\" | \"promotionCheckOptimized\" | \"reserved1\" | \"reserved2\" | \"initial\")\n/**\n * Table name\n */\nexport type TableName1 = string\n/**\n * Lock mode\n */\nexport type LockMode1 = (\"exclusive\" | \"shared\" | \"exclusiveNotCumulative\" | \"setOptimistic\" | \"promoteOptimistic\" | \"conflictCheckExtendedExcl\" | \"conflictCheckExclusive\" | \"conflictCheckShared\" | \"promotionCheckOptimized\" | \"reserved1\" | \"reserved2\" | \"initial\")\n/**\n * Secondary tables must have a foreign key relation to the primary table\n */\nexport type SecondaryTables = PrimaryTable1[]\n/**\n * Parameter name\n */\nexport type ParameterName = string\n/**\n * Table\n */\nexport type Table = string\n/**\n * Field\n */\nexport type Field = string\n/**\n * Parameter is part of function module interface\n */\nexport type Active = boolean\n/**\n * Lock parameter candidates are derived from the primary keys of the tables\n */\nexport type LockParameters = LockParameter[]\n/**\n * Allow RFC for lock modules\n */\nexport type AllowRFC = boolean\n\n/**\n * Lock object (ENQU)\n */\nexport interface AffEnquV1 {\nformatVersion: FormatVersion\nheader: Header\nprimaryTable: PrimaryTable\nsecondaryTables?: SecondaryTables\nlockParameters: LockParameters\nlockModules: LockModules\n}\n/**\n * Header\n */\nexport interface Header {\ndescription: Description\noriginalLanguage: OriginalLanguage\nabapLanguageVersion?: ABAPLanguageVersion\n}\n/**\n * Primary table of the lock object\n */\nexport interface PrimaryTable {\nname: TableName\nlockMode: LockMode\n}\n/**\n * Primary Table of the lock object\n */\nexport interface PrimaryTable1 {\nname: TableName1\nlockMode: LockMode1\n}\n/**\n * Lock parameter\n */\nexport interface LockParameter {\nname: ParameterName\ntable: Table\nfield: Field\nactive?: Active\n}\n/**\n * Lock modules are generated during activation\n */\nexport interface LockModules {\nallowRfc?: AllowRFC\n}\n\nexport type EnquAff = AffEnquV1;\n","/**\n * Auto-generated from SAP/abap-file-formats JSON schemas.\n * Do not edit — regenerate with `bun scripts/generate-aff-schemas.ts`.\n */\n/**\n * The ABAP file format version\n */\nexport type ABAPFileFormatVersion = \"1\"\n/**\n * Description of the ABAP object\n */\nexport type Description = string\n/**\n * Original language of the ABAP object\n */\nexport type OriginalLanguage = string\n/**\n * ABAP language version\n */\nexport type ABAPLanguageVersion = (\"standard\" | \"cloudDevelopment\")\n/**\n * Type namespace\n */\nexport type TypeNamespace = string\n/**\n * Producer legacy\n */\nexport type ProducerLegacy = boolean\n/**\n * Producer\n */\nexport type Producer = string\n/**\n * Producer version\n */\nexport type ProducerVersion = string\n/**\n * SAP Object Type\n */\nexport type SAPObjectType = string\n/**\n * Operation\n */\nexport type Operation = string\n/**\n * Type\n */\nexport type Type = string\n/**\n * Major version\n */\nexport type MajorVersion = string\n/**\n * Minor version\n */\nexport type MinorVersion = number\n/**\n * Patch version\n */\nexport type PatchVersion = number\n/**\n * Entity name\n */\nexport type EntityName = string\n/**\n * Entity event name\n */\nexport type EntityEventName = string\nexport type EventVersions = Event[]\n\nexport interface AffEvtbV1 {\nformatVersion: ABAPFileFormatVersion\nheader: Header\nproducerNamespace: TypeNamespace\nproducerLegacy?: ProducerLegacy\nproducer?: Producer\nproducerVersion?: ProducerVersion\nboName: SAPObjectType\nboOperation: Operation\nproducerType?: Type\nevents: EventVersions\n}\n/**\n * Header\n */\nexport interface Header {\ndescription: Description\noriginalLanguage: OriginalLanguage\nabapLanguageVersion?: ABAPLanguageVersion\n}\nexport interface Event {\neventVersion?: MajorVersion\neventMinorVersion?: MinorVersion\neventPatchVersion?: PatchVersion\nentityName: EntityName\nentityEventName: EntityEventName\n}\n\nexport type EvtbAff = AffEvtbV1;\n","/**\n * Auto-generated from SAP/abap-file-formats JSON schemas.\n * Do not edit — regenerate with `bun scripts/generate-aff-schemas.ts`.\n */\n/**\n * The ABAP file format version\n */\nexport type ABAPFileFormatVersion = \"1\"\n/**\n * Description of the ABAP object\n */\nexport type Description = string\n/**\n * Original language of the ABAP object\n */\nexport type OriginalLanguage = string\n/**\n * ABAP language version\n */\nexport type ABAPLanguageVersion = (\"standard\" | \"cloudDevelopment\")\n/**\n * SAP Object Type\n */\nexport type SAPObjectType = string\n/**\n * Major version\n */\nexport type MajorVersion = number\n/**\n * Minor version\n */\nexport type MinorVersion = number\n/**\n * Patch version\n */\nexport type PatchVersion = number\n\n/**\n * Event Object\n */\nexport interface AffEvtoV1 {\nformatVersion: ABAPFileFormatVersion\nheader: Header\ngeneralInformation: GeneralInformation\n}\n/**\n * Header\n */\nexport interface Header {\ndescription: Description\noriginalLanguage: OriginalLanguage\nabapLanguageVersion?: ABAPLanguageVersion\n}\n/**\n * General information\n */\nexport interface GeneralInformation {\nsapObjectType: SAPObjectType\nmajorVersion: MajorVersion\nminorVersion: MinorVersion\npatchVersion: PatchVersion\n}\n\nexport type EvtoAff = AffEvtoV1;\n","/**\n * Auto-generated from SAP/abap-file-formats JSON schemas.\n * Do not edit — regenerate with `bun scripts/generate-aff-schemas.ts`.\n */\n/**\n * The ABAP file format version\n */\nexport type ABAPFileFormatVersion = \"1\"\n/**\n * Description of the ABAP object\n */\nexport type Description = string\n/**\n * Original language of the ABAP object\n */\nexport type OriginalLanguage = string\n/**\n * ABAP language version\n */\nexport type ABAPLanguageVersion = (\"standard\" | \"keyUser\" | \"cloudDevelopment\")\n/**\n * Fix point arithmetic\n */\nexport type FixPointArithmetic = boolean\n/**\n * Status\n */\nexport type Status = (\"notClassified\" | \"sapProgram\" | \"customerProgram\" | \"systemProgram\" | \"testProgram\")\n\n/**\n * FUGR object type\n */\nexport interface AffFugrV1 {\nformatVersion: ABAPFileFormatVersion\nheader: Header\nfixPointArithmetic: FixPointArithmetic\nstatus?: Status\n}\n/**\n * Header\n */\nexport interface Header {\ndescription: Description\noriginalLanguage: OriginalLanguage\nabapLanguageVersion?: ABAPLanguageVersion\n}\n\nexport type FugrAff = AffFugrV1;\n","/**\n * Auto-generated from SAP/abap-file-formats JSON schemas.\n * Do not edit — regenerate with `bun scripts/generate-aff-schemas.ts`.\n */\n/**\n * The ABAP file format version\n */\nexport type ABAPFileFormatVersion = \"1\"\n/**\n * Description of the ABAP object\n */\nexport type Description = string\n/**\n * Processing type\n */\nexport type ProcessingType = (\"normal\" | \"rfc\" | \"update\")\n/**\n * When this indicator is set, it shows that the function module for the classic RFC protocol and the basXML protocol behaves in the same way, from a semantic point of view. The classic RFC protocol uses a position logic, while the basXML protocol uses a name identification.\n */\nexport type BasXmlEnabled = boolean\n/**\n * Indicates the scope of function module calls. Modules whose call scope is not defined explicitly can be called from anywhere\n */\nexport type RFCScope = (\"fromSameClientAndUser\" | \"fromSameSystem\" | \"fromAnySystem\" | \"notClassified\")\n/**\n * Indicates which serializations are permitted for the function module. Among other things, the selected serializations determine where the function module can be enhanced\n */\nexport type RFCVersion = (\"fastSerializationRequired\" | \"any\")\n/**\n * ABAP from Java\n */\nexport type ABAPFromJava = boolean\n/**\n * Java from ABAP\n */\nexport type JavaFromABAP = boolean\n/**\n * Java remote\n */\nexport type JavaRemote = boolean\n/**\n * Update task kind\n */\nexport type UpdateTaskKind = (\"startImmediately\" | \"startDelayed\" | \"startImmediatelyNoRestart\" | \"collectiveRun\" | \"unsupportedKind\")\n/**\n * Release state\n */\nexport type ReleaseState = (\"notReleased\" | \"released\" | \"releasedSapInternal\" | \"obsolete\" | \"releasePlanned\")\n/**\n * Release date\n */\nexport type ReleaseDate = string\n/**\n * The parameters of this function module are global visible within the function group\n */\nexport type Global = boolean\n/**\n * Exception classes\n */\nexport type ExceptionClasses = boolean\n/**\n * Application to which function module is assigned\n */\nexport type ApplicationOfFunctionModule = string\n/**\n * This field is obsolete and should not be filled\n */\nexport type Client = string\n/**\n * This function module is registered as function module exit (see SMOD/CMOD) and the function module exit is active\n */\nexport type FunctionExitActive = boolean\n/**\n * Include number\n */\nexport type IncludeNumber = string\n/**\n * If this flag is set, the function module cannot be called. It is deactivated in the function group\n */\nexport type NotExecutable = boolean\n/**\n * The function module is not editable\n */\nexport type EditLocked = boolean\n/**\n * Component name\n */\nexport type ComponentName = string\n/**\n * Component description\n */\nexport type ComponentDescription = string\n/**\n * Parameter descriptions of the function module\n */\nexport type ParameterDescriptions = ComponentWithDescription[]\n/**\n * Component name\n */\nexport type ComponentName1 = string\n/**\n * Component description\n */\nexport type ComponentDescription1 = string\n/**\n * Exception descriptions of the function module\n */\nexport type ExceptionDescriptions = ComponentWithDescription1[]\n\n/**\n * FUNC object type\n */\nexport interface AffFuncV1 {\nformatVersion: ABAPFileFormatVersion\nheader: Header\nprocessingType: ProcessingType\nrfcProperties?: RFCSpecificFields\nupdateProperties?: UpdateSpecificFields\nreleaseState?: ReleaseState\nreleaseDate?: ReleaseDate\nglobal?: Global\nexceptionClasses?: ExceptionClasses\napplication?: ApplicationOfFunctionModule\nclient?: Client\nactiveFunctionExit?: FunctionExitActive\nincludeNumber: IncludeNumber\nnotExecutable?: NotExecutable\neditLocked?: EditLocked\nparameters?: ParameterDescriptions\nexceptions?: ExceptionDescriptions\n}\n/**\n * Header\n */\nexport interface Header {\ndescription: Description\n}\n/**\n * Specific fields for rfc function modules\n */\nexport interface RFCSpecificFields {\nbasxmlEnabled: BasXmlEnabled\nrfcScope: RFCScope\nrfcVersion: RFCVersion\nabapFromJava?: ABAPFromJava\njavaFromAbap?: JavaFromABAP\njavaRemote?: JavaRemote\n}\n/**\n * Specific fields for update function modules\n */\nexport interface UpdateSpecificFields {\nupdateTaskKind: UpdateTaskKind\n}\n/**\n * Component with description\n */\nexport interface ComponentWithDescription {\nname: ComponentName\ndescription: ComponentDescription\n}\n/**\n * Component with description\n */\nexport interface ComponentWithDescription1 {\nname: ComponentName1\ndescription: ComponentDescription1\n}\n\nexport type FuncAff = AffFuncV1;\n","/**\n * Auto-generated from SAP/abap-file-formats JSON schemas.\n * Do not edit — regenerate with `bun scripts/generate-aff-schemas.ts`.\n */\n/**\n * The ABAP file format version\n */\nexport type ABAPFileFormatVersion = \"1\"\n/**\n * Description of the ABAP object\n */\nexport type Description = string\n/**\n * Original language of the ABAP object\n */\nexport type OriginalLanguage = string\n/**\n * ABAP language version\n */\nexport type ABAPLanguageVersion = (\"standard\" | \"cloudDevelopment\")\n/**\n * Type\n */\nexport type Type = \"CLAS\"\n/**\n * Name\n */\nexport type Name = string\n/**\n * Mode\n */\nexport type Mode = (\"system\" | \"instance\" | \"application\" | \"job\" | \"none\")\n/**\n * Priority\n */\nexport type Priority = (\"availability\" | \"high\" | \"normal\" | \"low\")\n/**\n * Instantiation\n */\nexport type Instantiation = (\"reuse\" | \"createNew\")\n/**\n * Scope dependent\n */\nexport type ScopeDependent = boolean\n/**\n * JSON data\n */\nexport type JSONData = string\n\n/**\n * Metric Provider (GSMP)\n */\nexport interface AffGsmpV1 {\nformatVersion: ABAPFileFormatVersion\nheader: Header\nimplementation: Implementation\nexecution: Execution\nmodel?: Model\n}\n/**\n * Header\n */\nexport interface Header {\ndescription: Description\noriginalLanguage: OriginalLanguage\nabapLanguageVersion?: ABAPLanguageVersion\n}\n/**\n * Implementation\n */\nexport interface Implementation {\ntype: Type\nname: Name\n}\n/**\n * Execution\n */\nexport interface Execution {\nmode: Mode\npriority: Priority\ninstantiation?: Instantiation\nscopeDependent: ScopeDependent\n}\n/**\n * Model\n */\nexport interface Model {\ndata?: JSONData\n}\n\nexport type GsmpAff = AffGsmpV1;\n","/**\n * Auto-generated from SAP/abap-file-formats JSON schemas.\n * Do not edit — regenerate with `bun scripts/generate-aff-schemas.ts`.\n */\n/**\n * Format version\n */\nexport type FormatVersion = \"1\"\n/**\n * Description of the ABAP object\n */\nexport type Description = string\n/**\n * Original language of the ABAP object\n */\nexport type OriginalLanguage = string\n/**\n * ABAP language version\n */\nexport type ABAPLanguageVersion = (\"standard\" | \"cloudDevelopment\")\n/**\n * Handler class\n */\nexport type HandlerClass = string\n\n/**\n * HTTP Service\n */\nexport interface AffHttpV1 {\nformatVersion: FormatVersion\nheader: Header\ngeneralInformation: GeneralInformation\n}\n/**\n * Header\n */\nexport interface Header {\ndescription: Description\noriginalLanguage: OriginalLanguage\nabapLanguageVersion?: ABAPLanguageVersion\n}\n/**\n * General information\n */\nexport interface GeneralInformation {\nhandlerClass?: HandlerClass\n}\n\nexport type HttpAff = AffHttpV1;\n","/**\n * Auto-generated from SAP/abap-file-formats JSON schemas.\n * Do not edit — regenerate with `bun scripts/generate-aff-schemas.ts`.\n */\n/**\n * The ABAP file format version\n */\nexport type ABAPFileFormatVersion = \"1\"\n/**\n * Description of the ABAP object\n */\nexport type Description = string\n/**\n * Original language of the ABAP object\n */\nexport type OriginalLanguage = string\n/**\n * ABAP language version\n */\nexport type ABAPLanguageVersion = (\"standard\" | \"cloudDevelopment\")\n/**\n * Name\n */\nexport type Name = string\n/**\n * Time reference\n */\nexport type TimeReference = string\n/**\n * Source table\n */\nexport type SourceTable = string\n/**\n * Source field\n */\nexport type SourceField = string\n/**\n * Indirect Value Determination\n */\nexport type IndirectValueDetermination = boolean\n/**\n * Value determination for time references\n */\nexport type TimeReferences = TimeReferenceDetails[]\n/**\n * Condition field\n */\nexport type ConditionField = string\n/**\n * Description of condition field\n */\nexport type Description1 = string\n/**\n * Data element\n */\nexport type DataElement = string\n/**\n * Source table\n */\nexport type SourceTable1 = string\n/**\n * Source field\n */\nexport type SourceField1 = string\n/**\n * Indirect Value Determination\n */\nexport type IndirectValueDetermination1 = boolean\n/**\n * No intervals\n */\nexport type NoIntervals = boolean\n/**\n * Condition fields for direct value determination\n */\nexport type ConditionFields = ConditionFieldDetails[]\n/**\n * Name\n */\nexport type Name1 = string\n\n/**\n * ILM object (ILMB) v1\n */\nexport interface AffIlmbV1 {\nformatVersion: ABAPFileFormatVersion\nheader: Header\ndestructionObject?: DestructionObject\ntimeReferences: TimeReferences\nconditionFields: ConditionFields\ncallbackClass?: ValueDeterminationCallbackClass\n}\n/**\n * Header\n */\nexport interface Header {\ndescription: Description\noriginalLanguage: OriginalLanguage\nabapLanguageVersion?: ABAPLanguageVersion\n}\n/**\n * Mapping ILM object to data destruction object\n */\nexport interface DestructionObject {\nname?: Name\n}\n/**\n * Time reference details\n */\nexport interface TimeReferenceDetails {\ntimeReference: TimeReference\nsourceTable: SourceTable\nsourceField: SourceField\nindirectValue?: IndirectValueDetermination\n}\n/**\n * Condition field details\n */\nexport interface ConditionFieldDetails {\nconditionField: ConditionField\ndescription?: Description1\ndataElement?: DataElement\nsourceTable: SourceTable1\nsourceField: SourceField1\nindirectValue?: IndirectValueDetermination1\nnoIntervals?: NoIntervals\n}\n/**\n * Value determination callback class\n */\nexport interface ValueDeterminationCallbackClass {\nname?: Name1\n}\n\nexport type IlmbAff = AffIlmbV1;\n","/**\n * Auto-generated from SAP/abap-file-formats JSON schemas.\n * Do not edit — regenerate with `bun scripts/generate-aff-schemas.ts`.\n */\n/**\n * The ABAP file format version\n */\nexport type ABAPFileFormatVersion = \"1\"\n/**\n * Description of the ABAP object\n */\nexport type Description = string\n/**\n * Original language of the ABAP object\n */\nexport type OriginalLanguage = string\n/**\n * ABAP language version\n */\nexport type ABAPLanguageVersion = (\"standard\" | \"keyUser\" | \"cloudDevelopment\")\n/**\n * Interface category\n */\nexport type InterfaceCategory = (\"general\" | \"classicBadi\" | \"businessStaticComponents\" | \"businessInstanceComponents\" | \"dbProcedureProxy\" | \"webDynproRuntime\" | \"enterpriseService\")\n/**\n * Interface is a proxy interface\n */\nexport type ProxyInterface = boolean\n/**\n * Name\n */\nexport type Name = string\n/**\n * Description\n */\nexport type Description1 = string\n/**\n * Type descriptions\n */\nexport type TypeDescriptions = NameAndDescription[]\n/**\n * Name\n */\nexport type Name1 = string\n/**\n * Description\n */\nexport type Description2 = string\n/**\n * Attribute descriptions\n */\nexport type AttributeDescriptions = NameAndDescription1[]\n/**\n * Name of the event\n */\nexport type EventName = string\n/**\n * Description of the event\n */\nexport type EventDescription1 = string\n/**\n * Name\n */\nexport type Name2 = string\n/**\n * Description\n */\nexport type Description3 = string\n/**\n * Parameter descriptions\n */\nexport type ParameterDescriptions = NameAndDescription2[]\n/**\n * Event descriptions\n */\nexport type EventDescriptions = EventDescription[]\n/**\n * Name of the method\n */\nexport type MethodName = string\n/**\n * Description of the method\n */\nexport type MethodDescription1 = string\n/**\n * Name\n */\nexport type Name3 = string\n/**\n * Description\n */\nexport type Description4 = string\n/**\n * Parameter descriptions\n */\nexport type ParameterDescriptions1 = NameAndDescription3[]\n/**\n * Name\n */\nexport type Name4 = string\n/**\n * Description\n */\nexport type Description5 = string\n/**\n * Exception descriptions\n */\nexport type ExceptionDescriptions = NameAndDescription4[]\n/**\n * Method descriptions\n */\nexport type MethodDescriptions = MethodDescription[]\n\n/**\n * Interface properties\n */\nexport interface AffIntfV1 {\nformatVersion: ABAPFileFormatVersion\nheader: Header\ncategory?: InterfaceCategory\nproxy?: ProxyInterface\ndescriptions?: Descriptions\n}\n/**\n * Header\n */\nexport interface Header {\ndescription: Description\noriginalLanguage: OriginalLanguage\nabapLanguageVersion?: ABAPLanguageVersion\n}\n/**\n * Descriptions maintained in SE80\n */\nexport interface Descriptions {\ntypes?: TypeDescriptions\nattributes?: AttributeDescriptions\nevents?: EventDescriptions\nmethods?: MethodDescriptions\n}\n/**\n * Name and description\n */\nexport interface NameAndDescription {\nname: Name\ndescription: Description1\n}\n/**\n * Name and description\n */\nexport interface NameAndDescription1 {\nname: Name1\ndescription: Description2\n}\n/**\n * Event description\n */\nexport interface EventDescription {\nname: EventName\ndescription: EventDescription1\nparameters?: ParameterDescriptions\n}\n/**\n * Name and description\n */\nexport interface NameAndDescription2 {\nname: Name2\ndescription: Description3\n}\n/**\n * Method description\n */\nexport interface MethodDescription {\nname: MethodName\ndescription: MethodDescription1\nparameters?: ParameterDescriptions1\nexceptions?: ExceptionDescriptions\n}\n/**\n * Name and description\n */\nexport interface NameAndDescription3 {\nname: Name3\ndescription: Description4\n}\n/**\n * Name and description\n */\nexport interface NameAndDescription4 {\nname: Name4\ndescription: Description5\n}\n\nexport type IntfAff = AffIntfV1;\n","/**\n * Auto-generated from SAP/abap-file-formats JSON schemas.\n * Do not edit — regenerate with `bun scripts/generate-aff-schemas.ts`.\n */\n/**\n * The ABAP file format version\n */\nexport type ABAPFileFormatVersion = \"1\"\n/**\n * Description of the ABAP object\n */\nexport type Description = string\n/**\n * Original language of the ABAP object\n */\nexport type OriginalLanguage = string\n/**\n * ABAP language version\n */\nexport type ABAPLanguageVersion = (\"standard\" | \"keyUser\" | \"cloudDevelopment\")\n/**\n * Model name\n */\nexport type ModelName = string\n/**\n * Model type\n */\nexport type ModelType = string\n/**\n * Intelligent scenario of the model\n */\nexport type IntelligentScenario = string\n/**\n * Modelling context ID which is the parent of the model\n */\nexport type ModellingContextID = string\n/**\n * Adapter ID\n */\nexport type AdapterID = string\n/**\n * Native model type\n */\nexport type NativeModelType = string\n/**\n * Model specification\n */\nexport type ModelSpecification = string\n/**\n * Model definition\n */\nexport type ModelDefinition = string\n/**\n * State of the model\n */\nexport type State = string\n/**\n * Model signature\n */\nexport type Signature = string\n/**\n * Model bindings\n */\nexport type Bindings = string\n/**\n * If true, the model is an enhancement, if false the model is a new model.\n */\nexport type IsEnhancement = boolean\n/**\n * Executable ID\n */\nexport type ExecutableID = string\n/**\n * Large language model name\n */\nexport type LargeLanguageModelName = string\n/**\n * Large language model version\n */\nexport type LargeLanguageModelVersion = string\n/**\n * Table or view field name\n */\nexport type FieldName = string\n/**\n * Field position\n */\nexport type FieldPosition = number\n/**\n * If true, the field is a key field\n */\nexport type IsKeyField = boolean\n/**\n * Model segment fields\n */\nexport type ModelSegmentFields = SegmentField[]\n/**\n * Prompt template name\n */\nexport type PromptTemplateName = string\n/**\n * Description of prompt template\n */\nexport type PromptTemplateDescription = string\n/**\n * Prompt\n */\nexport type Prompt = string\n/**\n * If true, the prompt is visible\n */\nexport type PromptVisibility = boolean\n/**\n * Model prompt templates\n */\nexport type ModelPromptTemplates = ModelPromptTemplate[]\n\n/**\n * Intelligent scenario model\n */\nexport interface AffIntmV1 {\nformatVersion: ABAPFileFormatVersion\nheader: Header\ngeneralInformation: GeneralInformation\nmodelSegmentFields?: ModelSegmentFields\nmodelPromptTemplates?: ModelPromptTemplates\n}\n/**\n * Header\n */\nexport interface Header {\ndescription: Description\noriginalLanguage: OriginalLanguage\nabapLanguageVersion?: ABAPLanguageVersion\n}\n/**\n * General information\n */\nexport interface GeneralInformation {\nmodelName?: ModelName\nmodelType?: ModelType\nintelligentScenario?: IntelligentScenario\nmodellingContextId?: ModellingContextID\nadapterId?: AdapterID\nnativeModelType?: NativeModelType\nmodelSpecification?: ModelSpecification\nmodelDefinition?: ModelDefinition\nstate?: State\nsignature?: Signature\nbindings?: Bindings\nisEnhancement?: IsEnhancement\nexecutableId?: ExecutableID\nllmName?: LargeLanguageModelName\nllmVersion?: LargeLanguageModelVersion\n}\n/**\n * Model segment field\n */\nexport interface SegmentField {\nfieldName?: FieldName\nfieldPosition?: FieldPosition\nisKey?: IsKeyField\n}\n/**\n * Model prompt template\n */\nexport interface ModelPromptTemplate {\npromptTemplateName: PromptTemplateName\npromptTemplateDescription?: PromptTemplateDescription\nprompt: Prompt\nisVisible?: PromptVisibility\n}\n\nexport type IntmAff = AffIntmV1;\n","/**\n * Auto-generated from SAP/abap-file-formats JSON schemas.\n * Do not edit — regenerate with `bun scripts/generate-aff-schemas.ts`.\n */\n/**\n * The ABAP file format version\n */\nexport type ABAPFileFormatVersion = \"1\"\n/**\n * Description of the ABAP object\n */\nexport type Description = string\n/**\n * Original language of the ABAP object\n */\nexport type OriginalLanguage = string\n/**\n * ABAP language version\n */\nexport type ABAPLanguageVersion = (\"standard\" | \"keyUser\" | \"cloudDevelopment\")\n/**\n * Intelligent scenario type\n */\nexport type IntelligentScenarioType = string\n/**\n * Scenario technology\n */\nexport type ScenarioTechnology = (\"sideBySide\" | \"embedded\")\n/**\n * If true, the scenario is extensible\n */\nexport type Extensible = boolean\n/**\n * If true, the scenario can have multiple active models\n */\nexport type MultipleActiveModels = boolean\n/**\n * If true, the scenario uses data management\n */\nexport type DataManagement = boolean\n/**\n * Scenario technical ID\n */\nexport type ScenarioTechnicalID = string\n/**\n * State of an intelligent scenario\n */\nexport type State = string\n/**\n * ISLM framework version\n */\nexport type ISLMFrameworkVersion = number\n/**\n * Prediction class\n */\nexport type PredictionClass = string\n/**\n * Prerequisite check class\n */\nexport type PrerequisiteCheckClass = string\n/**\n * If true, scenario will be turnkey enabled to automate the operations\n */\nexport type AutomateTurnkeySwitchOn = boolean\n/**\n * Type of turnkey implementation\n */\nexport type TurnkeyImplementationType = string\n/**\n * Turnkey class\n */\nexport type TurnkeyClass = string\n/**\n * Usage type of an intelligent scenario\n */\nexport type UsageType = string\n/**\n * OAuth 2.0 client profile\n */\nexport type OAuthProfile = string\n/**\n * Modelling context name\n */\nexport type ModellingContextName = string\n/**\n * Modelling context ID\n */\nexport type ModellingContextID = string\n/**\n * Modelling context description\n */\nexport type ModellingContextDescription = string\n/**\n * Object name\n */\nexport type ObjectName = string\n/**\n * Type of the object\n */\nexport type ObjectType = string\n/**\n * Status of the object\n */\nexport type ObjectStatus = (\"error\" | \"termination\" | \"information\" | \"warning\" | \"success\")\n/**\n * Logical object type of a BOM object\n */\nexport type LogicalObjectType = (\"tableFunction\" | \"cdsView\" | \"class\" | \"dcl\" | \"model\" | \"avas\")\n/**\n * Objects based on scenario\n */\nexport type ScenarioObjects = ScenarioObject[]\n/**\n * Name of the binding\n */\nexport type BindingName = string\n/**\n * Reference object(for example - CDS view)\n */\nexport type ReferenceObject = string\n/**\n * Scenario dataset bindings\n */\nexport type DatasetBindings = DatasetBinding[]\n/**\n * Signature name\n */\nexport type SignatureName = string\n/**\n * Signature type\n */\nexport type SignatureType = string\n/**\n * Description\n */\nexport type Description1 = string\n/**\n * Table or view field name\n */\nexport type FieldName = string\n/**\n * Position of the field\n */\nexport type FieldPosition = number\n/**\n * Storage type of the field\n */\nexport type StorageType = string\n/**\n * Role of field in an intelligent scenario (such as key, target)\n */\nexport type RoleOfField = string\n/**\n * Data management type\n */\nexport type DataManagementType = string\n/**\n * Scenario signatures\n */\nexport type Signatures = Signature[]\n/**\n * Parameter name\n */\nexport type ParameterName = string\n/**\n * Parameter type\n */\nexport type ParameterType = string\n/**\n * Parameter description\n */\nexport type ParameterDescription = string\n/**\n * Storage type\n */\nexport type StorageType1 = string\n/**\n * If true, then input context value is available\n */\nexport type ContextFlag = boolean\n/**\n * Parameter size\n */\nexport type ParameterSize = number\n/**\n * Parameter ID\n */\nexport type ParameterID = string\n/**\n * Parameter context\n */\nexport type ParameterContext = string\n/**\n * Parameter value\n */\nexport type ParameterValue = string\n/**\n * Scenario parameters signature\n */\nexport type ParameterSignature = ParameterSignature1[]\n/**\n * Additional information key\n */\nexport type AdditionalInfoKey = string\n/**\n * Additional information value ID\n */\nexport type ValueID = number\n/**\n * Additional information value\n */\nexport type Value = string\n/**\n * Additional information position ID\n */\nexport type PositionID = number\n/**\n * Additional information key text label\n */\nexport type KeyTextLabel = string\n/**\n * Additional information value text label\n */\nexport type ValueTextLabel = string\n/**\n * Scenario additional information\n */\nexport type AdditionalInformation = AdditionalInformation1[]\n/**\n * Table or view field name\n */\nexport type FieldName1 = string\n/**\n * Field position\n */\nexport type FieldPosition1 = number\n/**\n * If true, the field is a key field\n */\nexport type IsKeyField = boolean\n/**\n * SBS Scenario Segment Fields\n */\nexport type SBSSegmentFields = SBSSegmentField[]\n\n/**\n * Intelligent scenario\n */\nexport interface AffIntsV1 {\nformatVersion: ABAPFileFormatVersion\nheader: Header\ngeneralInformation: GeneralInformation\nclassInformation?: ClassInformation\nturnkeyInformation?: TurnkeyInformation\nconnectionInformation?: ConnectionInformation\nmodellingContext?: ModellingContext\nscenarioDdlObjects?: ScenarioObjects\nbindings?: DatasetBindings\nsignatures?: Signatures\nparameters?: ParameterSignature\nadditionalInfo?: AdditionalInformation\nsbsSegmentFields?: SBSSegmentFields\n}\n/**\n * Header\n */\nexport interface Header {\ndescription: Description\noriginalLanguage: OriginalLanguage\nabapLanguageVersion?: ABAPLanguageVersion\n}\n/**\n * General information\n */\nexport interface GeneralInformation {\nscenarioType: IntelligentScenarioType\nscenarioTechnology: ScenarioTechnology\nisExtensible?: Extensible\nisMultiActiveModel?: MultipleActiveModels\nisDataManagementEnabled?: DataManagement\nscenarioTechnicalId?: ScenarioTechnicalID\nstate?: State\nislmVersion?: ISLMFrameworkVersion\n}\n/**\n * Class information\n */\nexport interface ClassInformation {\npredictionClass?: PredictionClass\nprerequisiteCheckClass?: PrerequisiteCheckClass\n}\n/**\n * Turnkey information\n */\nexport interface TurnkeyInformation {\nisTurnkeyAutoSwitchOn?: AutomateTurnkeySwitchOn\nturnkeyType?: TurnkeyImplementationType\nturnkeyClass?: TurnkeyClass\n}\n/**\n * Connection information\n */\nexport interface ConnectionInformation {\nusageType?: UsageType\noauthProfile?: OAuthProfile\n}\n/**\n * Intelligent scenario modelling context\n */\nexport interface ModellingContext {\nmodellingContextName?: ModellingContextName\nmodellingContextId?: ModellingContextID\nmodellingContextDescription?: ModellingContextDescription\n}\n/**\n * Object generated based on a scenario\n */\nexport interface ScenarioObject {\nobjectName?: ObjectName\nobjectType?: ObjectType\nobjectStatus?: ObjectStatus\nlogicalObjectType?: LogicalObjectType\n}\n/**\n * Scenario dataset binding\n */\nexport interface DatasetBinding {\nbindingName?: BindingName\nreferenceObject?: ReferenceObject\n}\n/**\n * Scenario signature\n */\nexport interface Signature {\nsignatureName?: SignatureName\nsignatureType?: SignatureType\nsignatureDescription?: Description1\nfieldName?: FieldName\nfieldPosition?: FieldPosition\nstorageType?: StorageType\nfieldRole?: RoleOfField\ndataManagementType?: DataManagementType\n}\n/**\n * Parameter signature\n */\nexport interface ParameterSignature1 {\nparameterName?: ParameterName\nparameterType?: ParameterType\nparameterDescription?: ParameterDescription\nstorageType?: StorageType1\nhasContext?: ContextFlag\nparameterSize?: ParameterSize\nparameterId?: ParameterID\nparameterContext?: ParameterContext\nparameterValue?: ParameterValue\n}\n/**\n * Additional information\n */\nexport interface AdditionalInformation1 {\nadditionalInfoKey?: AdditionalInfoKey\nvalueId?: ValueID\nvalue?: Value\npositionId?: PositionID\nkeyTextLabel?: KeyTextLabel\nvalueTextLabel?: ValueTextLabel\n}\n/**\n * SBS scenario segment field\n */\nexport interface SBSSegmentField {\nfieldName?: FieldName1\nfieldPosition?: FieldPosition1\nisKey?: IsKeyField\n}\n\nexport type IntsAff = AffIntsV1;\n","/**\n * Auto-generated from SAP/abap-file-formats JSON schemas.\n * Do not edit — regenerate with `bun scripts/generate-aff-schemas.ts`.\n */\n/**\n * Format version\n */\nexport type FormatVersion = \"1\"\n/**\n * Description of the ABAP object\n */\nexport type Description = string\n/**\n * Original language of the ABAP object\n */\nexport type OriginalLanguage = string\n/**\n * ABAP language version\n */\nexport type ABAPLanguageVersion = (\"standard\" | \"cloudDevelopment\")\n/**\n * Provider class\n */\nexport type ProviderClass = string\n\n/**\n * Notification provider object\n */\nexport interface AffIwngV1 {\nformatVersion: FormatVersion\nheader: Header\ngeneralInformation: GeneralInformation\n}\n/**\n * Header\n */\nexport interface Header {\ndescription: Description\noriginalLanguage: OriginalLanguage\nabapLanguageVersion?: ABAPLanguageVersion\n}\n/**\n * General information\n */\nexport interface GeneralInformation {\nproviderClass: ProviderClass\n}\n\nexport type IwngAff = AffIwngV1;\n","/**\n * Auto-generated from SAP/abap-file-formats JSON schemas.\n * Do not edit — regenerate with `bun scripts/generate-aff-schemas.ts`.\n */\n/**\n * The ABAP file format version\n */\nexport type ABAPFileFormatVersion = \"1\"\n/**\n * Description of the ABAP object\n */\nexport type Description = string\n/**\n * Original language of the ABAP object\n */\nexport type OriginalLanguage = string\n/**\n * Message number\n */\nexport type MessageNumber = string\n/**\n * Message text\n */\nexport type MessageText = string\n/**\n * Messages\n */\nexport type Messages = MessageProperties[]\n\n/**\n * Message class properties\n */\nexport interface AffMsagV1 {\nformatVersion: ABAPFileFormatVersion\nheader: Header\nmessages: Messages\n}\n/**\n * Header\n */\nexport interface Header {\ndescription: Description\noriginalLanguage: OriginalLanguage\n}\n/**\n * Message properties\n */\nexport interface MessageProperties {\nnumber?: MessageNumber\ntext?: MessageText\n}\n\nexport type MsagAff = AffMsagV1;\n","/**\n * Auto-generated from SAP/abap-file-formats JSON schemas.\n * Do not edit — regenerate with `bun scripts/generate-aff-schemas.ts`.\n */\n/**\n * The ABAP file format version\n */\nexport type ABAPFileFormatVersion = \"1\"\n/**\n * Description of the ABAP object\n */\nexport type Description = string\n/**\n * Original language of the ABAP object\n */\nexport type OriginalLanguage = string\n/**\n * ABAP language version\n */\nexport type ABAPLanguageVersion = (\"standard\" | \"cloudDevelopment\")\n/**\n * The name of the SAP Object Node Type.\n */\nexport type Name = string\n/**\n * The name of the referenced SAP Object Type.\n */\nexport type SAPObjectType = string\n/**\n * Indicates that the SAP Object Node Type corresponds to the referenced SAP Object Type.\n */\nexport type RootNode = boolean\n\n/**\n * SAP object node type\n */\nexport interface AffNontV1 {\nformatVersion: ABAPFileFormatVersion\nheader: Header\nname: Name\nsapObjectType?: SAPObjectType\nrootNode?: RootNode\n}\n/**\n * Header\n */\nexport interface Header {\ndescription: Description\noriginalLanguage: OriginalLanguage\nabapLanguageVersion?: ABAPLanguageVersion\n}\n\nexport type NontAff = AffNontV1;\n","/**\n * Auto-generated from SAP/abap-file-formats JSON schemas.\n * Do not edit — regenerate with `bun scripts/generate-aff-schemas.ts`.\n */\n/**\n * The ABAP file format version\n */\nexport type ABAPFileFormatVersion = \"1\"\n/**\n * Description of the ABAP object\n */\nexport type Description = string\n/**\n * Original language of the ABAP object\n */\nexport type OriginalLanguage = string\n/**\n * ABAP language version\n */\nexport type ABAPLanguageVersion = (\"standard\" | \"cloudDevelopment\")\n/**\n * Name of domain, which determines the length of the number range number. Define the amount of characters available for number range intervals. It must be of type NUMC or CHAR and have a field length of at least 1 and at most 20.\n */\nexport type NumberLengthDomain = string\n/**\n * Percentage of numbers remaining in a number range, upon reaching which in number assignment a warning is given. It must be between 0.1 and 99.9. Example: You have defined an interval from 1 to 1000. If you want to issue a warning at the number 900, enter 10 (%) here.\n */\nexport type PercentWarning = number\n/**\n * If you want to create subobjects for the elements of a field of the application table, specify the relevant data element for this table field. This data element must be active in the Data Dictionary and must have a check table. The domain of the data element must have a field length of between 1 and 6.\n */\nexport type SubType = string\n/**\n * If you want the records of the business object to be differentiated by financial year, you set this option true. This structures the intervals of a number range object.\n */\nexport type UntilYear = boolean\n/**\n * For each interval of a number range object, the system checks when the available characters are used up. In the true setting, once the available characters of an interval are used up, the system starts again from the beginning and the lowest number is assigned again. You can suppress this behavior by setting this option false. If you do this, no more characters from an interval are assigned once the characters of the interval are used up. You can suppress rollover for the entire number range object, that is, the setting applies to all the intervals contained in the object.\n */\nexport type Rolling = boolean\n/**\n * If it is set to true determined numbers consist of the prefix (name of subobject) and the numbers.\n */\nexport type Prefix = boolean\n/**\n * Transaction code for application specific transaction\n */\nexport type TransactionID = string\n/**\n * Choose a buffer type for no buffering, for buffering via main memory or for parallel buffering. Default is mainBuffer.\n */\nexport type Buffering = (\"mainBuffer\" | \"parallel\" | \"none\")\n/**\n * This value specifies the numbers in buffer. In case of parallel and main memory buffering, add a number for 'bufferedNumbers'. It determines how many numbers are reserved in buffer for the intervals.Default number of buffers is 10.\n */\nexport type BufferedNumbers = number\n\n/**\n * Object type NROB\n */\nexport interface AffNrobV1 {\nformatVersion: ABAPFileFormatVersion\nheader: Header\ninterval: Interval\nconfiguration: Configuration\n}\n/**\n * Header\n */\nexport interface Header {\ndescription: Description\noriginalLanguage: OriginalLanguage\nabapLanguageVersion?: ABAPLanguageVersion\n}\n/**\n * Interval\n */\nexport interface Interval {\nnumberLengthDomain: NumberLengthDomain\npercentWarning: PercentWarning\nsubType: SubType\nuntilYear: UntilYear\nrolling: Rolling\nprefix: Prefix\n}\n/**\n * Configuration-specific fields\n */\nexport interface Configuration {\ntransactionId?: TransactionID\nbuffering: Buffering\nbufferedNumbers: BufferedNumbers\n}\n\nexport type NrobAff = AffNrobV1;\n","/**\n * Auto-generated from SAP/abap-file-formats JSON schemas.\n * Do not edit — regenerate with `bun scripts/generate-aff-schemas.ts`.\n */\n/**\n * Format version\n */\nexport type FormatVersion = \"1\"\n/**\n * Description of the ABAP object\n */\nexport type Description = string\n/**\n * Original language of the ABAP object\n */\nexport type OriginalLanguage = string\n/**\n * ABAP language version\n */\nexport type ABAPLanguageVersion = (\"standard\" | \"cloudDevelopment\")\n/**\n * SAP Object Node Type\n */\nexport type SAPObjectNodeType = string\n/**\n * Name\n */\nexport type Name = string\n/**\n * Note types assigned to the SAP Object Node Type\n */\nexport type NoteTypes = NoteType[]\n\n/**\n * ABAP file format for note type assignment objects\n */\nexport interface AffNttaV1 {\nformatVersion: FormatVersion\nheader: Header\ngeneralInformation?: GeneralInformation\nnoteTypes?: NoteTypes\n}\n/**\n * Header\n */\nexport interface Header {\ndescription: Description\noriginalLanguage: OriginalLanguage\nabapLanguageVersion?: ABAPLanguageVersion\n}\n/**\n * General information\n */\nexport interface GeneralInformation {\nobjectNodeType: SAPObjectNodeType\n}\n/**\n * Note type\n */\nexport interface NoteType {\nname: Name\n}\n\nexport type NttaAff = AffNttaV1;\n","/**\n * Auto-generated from SAP/abap-file-formats JSON schemas.\n * Do not edit — regenerate with `bun scripts/generate-aff-schemas.ts`.\n */\n/**\n * Format version\n */\nexport type FormatVersion = \"1\"\n/**\n * Description of the ABAP object\n */\nexport type Description = string\n/**\n * Original language of the ABAP object\n */\nexport type OriginalLanguage = string\n/**\n * ABAP language version\n */\nexport type ABAPLanguageVersion = (\"standard\" | \"cloudDevelopment\")\n/**\n * Language dependent\n */\nexport type LanguageDependent = boolean\n/**\n * Multiple notes possible\n */\nexport type MultipleNotes = boolean\n/**\n * Title hidden\n */\nexport type TitleHidden = boolean\n/**\n * Maximum length\n */\nexport type MaximumLength = number\n/**\n * Formatting profile\n */\nexport type FormattingProfile = (\"text\" | \"simpleFormatting\")\n\n/**\n * ABAP file format for note type objects\n */\nexport interface AffNttyV1 {\nformatVersion: FormatVersion\nheader: Header\ngeneralInformation?: GeneralInformation\ncontentSettings?: ContentSettings\n}\n/**\n * Header\n */\nexport interface Header {\ndescription: Description\noriginalLanguage: OriginalLanguage\nabapLanguageVersion?: ABAPLanguageVersion\n}\n/**\n * General information\n */\nexport interface GeneralInformation {\nlanguageDependent?: LanguageDependent\nmultipleNotes?: MultipleNotes\nhideTitle?: TitleHidden\n}\n/**\n * Content settings\n */\nexport interface ContentSettings {\nmaximumLength?: MaximumLength\nformattingProfile?: FormattingProfile\n}\n\nexport type NttyAff = AffNttyV1;\n","/**\n * Auto-generated from SAP/abap-file-formats JSON schemas.\n * Do not edit — regenerate with `bun scripts/generate-aff-schemas.ts`.\n */\n/**\n * Format version\n */\nexport type FormatVersion = \"1\"\n/**\n * Description of the ABAP object\n */\nexport type Description = string\n/**\n * Original language of the ABAP object\n */\nexport type OriginalLanguage = string\n/**\n * ABAP language version\n */\nexport type ABAPLanguageVersion = (\"standard\" | \"keyUser\" | \"cloudDevelopment\")\n/**\n * Program type\n */\nexport type ProgramType = (\"executableProgram\" | \"modulePool\" | \"subroutinePool\" | \"include\")\n/**\n * Program status\n */\nexport type ProgramStatus = (\"sapProductionProgram\" | \"customerProductionProgram\" | \"systemProgram\" | \"testProgram\" | \"unknown\")\n/**\n * Fix point arithmetic\n */\nexport type FixPointArithmetic = boolean\n/**\n * The editor lock flag prevents other users from making changes to the program. Only the last person to change the program can remove the flag.\n */\nexport type EditLocked = boolean\n/**\n * A user can only start this report using a variant.\n */\nexport type StartsUsingVariant = boolean\n/**\n * Programs that are assigned to an authorization group are protected against display and execution. Security-related programs should, therefore, always be assigned to an authorization group.\n */\nexport type AuthorizationGroup = string\n/**\n * Application (taplp)\n */\nexport type Application = string\n/**\n * Name of a logical database.\n */\nexport type LogicalDatabaseName = string\n/**\n * The Dynpro selection screen.\n */\nexport type SelectionScreen = string\n\n/**\n * Program\n */\nexport interface AffProgV1 {\nformatVersion: FormatVersion\nheader: Header\ngeneralInformation?: GeneralInformation\nlogicalDatabase?: LogicalDatabase\n}\n/**\n * Header\n */\nexport interface Header {\ndescription: Description\noriginalLanguage: OriginalLanguage\nabapLanguageVersion?: ABAPLanguageVersion\n}\n/**\n * General information\n */\nexport interface GeneralInformation {\nprogramType?: ProgramType\nprogramStatus?: ProgramStatus\nfixPointArithmetic?: FixPointArithmetic\neditLocked?: EditLocked\nstartsUsingVariant?: StartsUsingVariant\nauthorizationGroup?: AuthorizationGroup\napplication?: Application\n}\n/**\n * Logical database\n */\nexport interface LogicalDatabase {\nname?: LogicalDatabaseName\nselectionScreen?: SelectionScreen\n}\n\nexport type ProgAff = AffProgV1;\n","/**\n * Auto-generated from SAP/abap-file-formats JSON schemas.\n * Do not edit — regenerate with `bun scripts/generate-aff-schemas.ts`.\n */\n/**\n * The ABAP file format version\n */\nexport type ABAPFileFormatVersion = \"1\"\n/**\n * Description of the ABAP object\n */\nexport type Description = string\n/**\n * Edit-locked\n */\nexport type EditLocked = boolean\n/**\n * Include type\n */\nexport type IncludeType = (\"include\" | \"functionGroup\")\n\n/**\n * REPS object type\n */\nexport interface AffRepsV1 {\nformatVersion: ABAPFileFormatVersion\nheader: Header\neditLocked?: EditLocked\nincludeType: IncludeType\n}\n/**\n * Header\n */\nexport interface Header {\ndescription: Description\n}\n\nexport type RepsAff = AffRepsV1;\n","/**\n * Auto-generated from SAP/abap-file-formats JSON schemas.\n * Do not edit — regenerate with `bun scripts/generate-aff-schemas.ts`.\n */\n/**\n * The ABAP file format version\n */\nexport type ABAPFileFormatVersion = \"1\"\n/**\n * Description of the ABAP object\n */\nexport type Description = string\n/**\n * Original language of the ABAP object\n */\nexport type OriginalLanguage = string\n/**\n * ABAP language version\n */\nexport type ABAPLanguageVersion = (\"standard\" | \"cloudDevelopment\")\n/**\n * The category of the SAP Object Type\n */\nexport type TypeCategory = (\"businessObject\" | \"technicalObject\" | \"analyticalObject\" | \"configurationObject\" | \"dependentObject\" | \"hierarchyObject\")\n/**\n * The name of the SAP Object Type.\n */\nexport type Name = string\n/**\n * The object type code uniquely identifies the SAP Object Type.\n */\nexport type ObjectTypeCode = string\n/**\n * The interface behavior definition related to the SAP Object Type.\n */\nexport type InterfaceBehaviorDefinition = string\n/**\n * The One Domain Model entity related to the SAP Object Type.\n */\nexport type ODMEntityName = string\n\n/**\n * SAP object type\n */\nexport interface AffRontV1 {\nformatVersion: ABAPFileFormatVersion\nheader: Header\ntypeCategory: TypeCategory\nname: Name\nobjectTypeCode?: ObjectTypeCode\ninterfaceBehaviorDefinition?: InterfaceBehaviorDefinition\nodmEntityName?: ODMEntityName\n}\n/**\n * Header\n */\nexport interface Header {\ndescription: Description\noriginalLanguage: OriginalLanguage\nabapLanguageVersion?: ABAPLanguageVersion\n}\n\nexport type RontAff = AffRontV1;\n","/**\n * Auto-generated from SAP/abap-file-formats JSON schemas.\n * Do not edit — regenerate with `bun scripts/generate-aff-schemas.ts`.\n */\n/**\n * Format version\n */\nexport type FormatVersion = \"1\"\n/**\n * Description of the ABAP object\n */\nexport type Description = string\n/**\n * Original language of the ABAP object\n */\nexport type OriginalLanguage = string\n/**\n * ABAP language version\n */\nexport type ABAPLanguageVersion = (\"standard\" | \"keyUser\" | \"cloudDevelopment\")\n/**\n * Source\n */\nexport type Source = (\"predefined\" | \"custom\")\n/**\n * Status\n */\nexport type Status = (\"draft\" | \"final\")\n/**\n * Fiori application\n */\nexport type FioriApplication = string\n/**\n * Extensibility mode\n */\nexport type ExtensibilityMode = (\"fullySupported\" | \"supportedPredefinedQueries\" | \"notSupported\")\n/**\n * Predefined InA service\n */\nexport type PredefinedInAService = string\n/**\n * Custom InA service\n */\nexport type CustomInAService = string\n\n/**\n * Object type RVBC\n */\nexport interface AffRvbcV1 {\nformatVersion: FormatVersion\nheader: Header\nbookletDefinition: BookletDefinition\nina1Services?: InAServices\n}\n/**\n * Header\n */\nexport interface Header {\ndescription: Description\noriginalLanguage: OriginalLanguage\nabapLanguageVersion?: ABAPLanguageVersion\n}\n/**\n * Booklet definition\n */\nexport interface BookletDefinition {\nsource: Source\nstatus: Status\napplication?: FioriApplication\nextensibilityMode?: ExtensibilityMode\n}\n/**\n * InA services\n */\nexport interface InAServices {\npredefined?: PredefinedInAService\ncustom?: CustomInAService\n}\n\nexport type RvbcAff = AffRvbcV1;\n","/**\n * Auto-generated from SAP/abap-file-formats JSON schemas.\n * Do not edit — regenerate with `bun scripts/generate-aff-schemas.ts`.\n */\n/**\n * Format version\n */\nexport type FormatVersion = \"1\"\n/**\n * Description of the ABAP object\n */\nexport type Description = string\n/**\n * Original language of the ABAP object\n */\nexport type OriginalLanguage = string\n/**\n * ABAP language version\n */\nexport type ABAPLanguageVersion = (\"standard\" | \"keyUser\" | \"cloudDevelopment\")\n/**\n * Title\n */\nexport type Title = string\n/**\n * What is the action doing and how can it be used\n */\nexport type Summary = string\n/**\n * Implementing class for handling the action input. Needs to implement interface {@link if_aia_action }.\n */\nexport type ImplementingClass = string\n/**\n * Input UI configuration class for implementing the server-driven UI input configuration. Needs to implement interface {@link IF_AIA_SD_ACTION_INPUT }.\n */\nexport type InputUIConfigurationClass = string\n/**\n * Number of focused resources\n */\nexport type NumberOfFocusedResources = (\"exactlyOne\" | \"atLeastOne\" | \"moreThanOne\" | \"any\")\n/**\n * Object type\n */\nexport type ObjectType1 = string\n/**\n * Object subtype\n */\nexport type ObjectSubtype = string\n/**\n * Filtering of action according to specified object types\n */\nexport type FilterObjectTypes = ObjectType[]\n\n/**\n * IDE action (SAIA) v1\n */\nexport interface AffSaiaV1 {\nformatVersion: FormatVersion\nheader: Header\ngeneralInformation: GeneralInformation\nfilters?: FilterCardinality\n}\n/**\n * Header\n */\nexport interface Header {\ndescription: Description\noriginalLanguage: OriginalLanguage\nabapLanguageVersion?: ABAPLanguageVersion\n}\n/**\n * General information\n */\nexport interface GeneralInformation {\ntitle: Title\nsummary: Summary\nimplementingClass?: ImplementingClass\ninputUiConfigurationClass?: InputUIConfigurationClass\n}\n/**\n * Filtering of application of action according to cardinality and object types\n */\nexport interface FilterCardinality {\nnumberOfFocusedResources?: NumberOfFocusedResources\nsupportedDevObjectTypes?: FilterObjectTypes\n}\n/**\n * Object type\n */\nexport interface ObjectType {\nworkbenchObjectType?: ObjectType1\nworkbenchObjectSubtype?: ObjectSubtype\n}\n\nexport type SaiaAff = AffSaiaV1;\n","/**\n * Auto-generated from SAP/abap-file-formats JSON schemas.\n * Do not edit — regenerate with `bun scripts/generate-aff-schemas.ts`.\n */\n/**\n * The ABAP file format version\n */\nexport type ABAPFileFormatVersion = \"1\"\n/**\n * Description of the application job catalog entry\n */\nexport type Description = string\n/**\n * Original language of the application job catalog entry\n */\nexport type OriginalLanguage = string\n/**\n * ABAP language version\n */\nexport type ABAPLanguageVersion = (\"standard\" | \"cloudDevelopment\")\n/**\n * Name of the class which contains the execute-method to run within the job\n */\nexport type ClassWithExecuteMethod = string\n/**\n * Name of the program which is executed within the job\n */\nexport type ExecutedProgram = string\n/**\n * Name of the class which contains the check exit\n */\nexport type Check = string\n/**\n * Name of the class which contains the value help exit\n */\nexport type ValueHelp = string\n/**\n * Name of the class which contains the notification exit\n */\nexport type Notification = string\n/**\n * Name of the section\n */\nexport type Name = string\n/**\n * Title of the section on the selection screen\n */\nexport type Title = string\n/**\n * List of sections\n */\nexport type Sections = Section[]\n/**\n * Name of the group\n */\nexport type Name1 = string\n/**\n * Title of the group on the selection screen\n */\nexport type Title1 = string\n/**\n * Name of the group section\n */\nexport type Section1 = string\n/**\n * List of groups\n */\nexport type Groups = Group[]\n/**\n * Name of the parameter\n */\nexport type Name2 = string\n/**\n * Title of the parameter on the selection screen\n */\nexport type Title2 = string\n/**\n * Name of the parameter group\n */\nexport type Group1 = string\n/**\n * Flag indicating whether the parameter is indented on the selection screen\n */\nexport type Indented = boolean\n/**\n * Flag indicating whether the parameter is mandatory\n */\nexport type Mandatory = boolean\n/**\n * Flag indicating whether the parameter is hidden\n */\nexport type Hidden = boolean\n/**\n * Flag indicating whether the parameter is read only\n */\nexport type ReadOnly = boolean\n/**\n * Name of the boolean parameter which enables / disables the current parameter\n */\nexport type EnabledByParameter = string\n/**\n * Display of the parameter as screen element (radio button, checkbox, list box)\n */\nexport type ScreenElement = (\"none\" | \"checkbox\" | \"radioButton\" | \"listBox\")\n/**\n * Name of the radio button group if the parameter is a radio button\n */\nexport type RadioButtonGroup = string\n/**\n * Name of the object on which the value help is based: for value helps based on a CDS view: name of the data definition; for value helps based on a domain: name of the domain\n */\nexport type ValueHelp1 = string\n/**\n * Type of the value help (based on a CDS view, or based on the 'Fixed values' list of a dictionary domain)\n */\nexport type ValueHelpType = (\"none\" | \"cdsView\" | \"domain\")\n/**\n * Flag indicating whether a call of the backend system is triggered after a parameter value change to check it\n */\nexport type BackendCall = boolean\n/**\n * Flag indicating whether only single values are allowed (no conditions like 'not equal' or 'between')\n */\nexport type OnlySingleValues = boolean\n/**\n * Number of lines of the text editor (0 means no multiline editor)\n */\nexport type TextLinesInEditor = number\n/**\n * List of parameters\n */\nexport type Parameters = Parameter[]\n\n/**\n * Attributes of the application job catalog entry\n */\nexport interface AffSajcV1 {\nformatVersion: ABAPFileFormatVersion\nheader: Header\ngeneralInformation: GeneralInformation\nexitClasses?: ExitClasses\nsections?: Sections\ngroups?: Groups\nparameters?: Parameters\n}\n/**\n * Header\n */\nexport interface Header {\ndescription: Description\noriginalLanguage: OriginalLanguage\nabapLanguageVersion?: ABAPLanguageVersion\n}\n/**\n * General information\n */\nexport interface GeneralInformation {\nclassName: ClassWithExecuteMethod\nprogramName?: ExecutedProgram\n}\n/**\n * Classes which contain the exits of the job scheduling and processing\n */\nexport interface ExitClasses {\ncheck?: Check\nvalueHelp?: ValueHelp\nnotification?: Notification\n}\n/**\n * Section of parameter groups on the selection screen\n */\nexport interface Section {\nname: Name\ntitle: Title\n}\n/**\n * Group of parameters on the selection screen\n */\nexport interface Group {\nname: Name1\ntitle: Title1\nsection?: Section1\n}\n/**\n * Parameter of the class which is executed within the job\n */\nexport interface Parameter {\nname: Name2\ntitle?: Title2\ngroup?: Group1\nindented?: Indented\nmandatory?: Mandatory\nhidden?: Hidden\nreadOnly?: ReadOnly\nenabledByParameter?: EnabledByParameter\nscreenElement?: ScreenElement\nradioButtonGroup?: RadioButtonGroup\nvalueHelp?: ValueHelp1\nvalueHelpType?: ValueHelpType\nbackendCall?: BackendCall\nsingleValues?: OnlySingleValues\ntextEditorLines?: TextLinesInEditor\n}\n\nexport type SajcAff = AffSajcV1;\n","/**\n * Auto-generated from SAP/abap-file-formats JSON schemas.\n * Do not edit — regenerate with `bun scripts/generate-aff-schemas.ts`.\n */\n/**\n * The ABAP file format version\n */\nexport type ABAPFileFormatVersion = \"1\"\n/**\n * Description of the application job template\n */\nexport type Description = string\n/**\n * Original language of the application job template\n */\nexport type OriginalLanguage = string\n/**\n * ABAP language version\n */\nexport type ABAPLanguageVersion = (\"standard\" | \"cloudDevelopment\")\n/**\n * Name of the application job catalog entry to which the template refers\n */\nexport type JobCatalogEntry = string\n/**\n * Name of the parameter\n */\nexport type Name = string\n/**\n * Value of the parameter\n */\nexport type Value = string\n/**\n * List of parameters with single value\n */\nexport type ParametersWithSingleValue = ParameterDetails[]\n/**\n * Name of the parameter\n */\nexport type Name1 = string\n/**\n * Include/exclude values (I/E)\n */\nexport type Sign = (\"include\" | \"exclude\")\n/**\n * Operator of the ranges condition (EQ/NE/GE/GT/LE/LT/CP/NP/BT/NB)\n */\nexport type Option = (\"equals\" | \"between\" | \"greaterThan\" | \"containsPattern\" | \"notEqual\" | \"notBetween\" | \"notContainsPattern\" | \"greaterEqual\" | \"lessThan\" | \"lessEqual\")\n/**\n * Low value of the ranges condition\n */\nexport type LowValue = string\n/**\n * High value of the ranges condition\n */\nexport type HighValue = string\n/**\n * Values of the parameter as ranges table\n */\nexport type Values = EntryOfRangesTable[]\n/**\n * List of parameters with value ranges\n */\nexport type ParametersWithValueRanges = ParameterDetails1[]\n\n/**\n * Attributes of the application job template\n */\nexport interface AffSajtV1 {\nformatVersion: ABAPFileFormatVersion\nheader: Header\ngeneralInformation: GeneralInformation\nparameters?: Parameters\n}\n/**\n * Header\n */\nexport interface Header {\ndescription: Description\noriginalLanguage: OriginalLanguage\nabapLanguageVersion?: ABAPLanguageVersion\n}\n/**\n * General information\n */\nexport interface GeneralInformation {\ncatalogName: JobCatalogEntry\n}\n/**\n * Parameters of the class which runs within the job\n */\nexport interface Parameters {\nsingleValueParameters?: ParametersWithSingleValue\nvalueRangesParameters?: ParametersWithValueRanges\n}\n/**\n * Name of the parameter and its value\n */\nexport interface ParameterDetails {\nname: Name\nvalue: Value\n}\n/**\n * Name of the parameter and its values as ranges table\n */\nexport interface ParameterDetails1 {\nname: Name1\nvalueRanges: Values\n}\n/**\n * Entry of ranges table\n */\nexport interface EntryOfRangesTable {\nsign: Sign\noption: Option\nlow?: LowValue\nhigh?: HighValue\n}\n\nexport type SajtAff = AffSajtV1;\n","/**\n * Auto-generated from SAP/abap-file-formats JSON schemas.\n * Do not edit — regenerate with `bun scripts/generate-aff-schemas.ts`.\n */\n/**\n * The ABAP file format version\n */\nexport type ABAPFileFormatVersion = \"1\"\n/**\n * Description of the ABAP object\n */\nexport type Description = string\n/**\n * Original language of the ABAP object\n */\nexport type OriginalLanguage = string\n/**\n * ABAP language version\n */\nexport type ABAPLanguageVersion = (\"standard\" | \"cloudDevelopment\")\n/**\n * Type of BC Set i.e. a simple BC Set or hierarchical BC Set, which contains several other BC Sets\n */\nexport type Type = (\"simple\" | \"hierarchical\")\n/**\n * Scope Relevant\n */\nexport type ScopingRelevant = boolean\n/**\n * Name of the BC Set\n */\nexport type Name = string\n/**\n * Position of BC Set in Hierarchical BC Set\n */\nexport type Position = number\n/**\n * A hierarchical BC Set comprises several other BC Sets, which can also be hierarchical. The hierarchy can have any number of levels.\n */\nexport type SubBCSets = SubBCSet[]\n/**\n * Collections of tables which constitute logical business entities, and must therefore be maintained and exported together.\n */\nexport type Name1 = string\n/**\n * Object type is used to classify customizing objects\n */\nexport type Type1 = (\"viewCluster\" | \"logicalTransportObject\" | \"tableWithTextTable\" | \"individualTransactionObject\" | \"view\")\n/**\n * Customizing object assigned to an IMG Activity\n */\nexport type IMGActivity = string\n/**\n * Table name of each data record\n */\nexport type EntityName = string\n/**\n * Name of field in table/view\n */\nexport type FieldName = string\n/**\n * Defines the attribute of field like during BC Set activation, the field value must be copied to database table or not\n */\nexport type FieldAttribute = (\"fixedKeyField\" | \"defaultValue\" | \"forbiddenField\")\n/**\n * You can define the behavior for field of table/view during activation\n */\nexport type FieldAttributes = AttributesOfTableViewField[]\n/**\n * Key value of a record\n */\nexport type KeyValue = string\n/**\n * Automatic customizing recording only puts the key fields of a data record or data records, in the BC Set. Such BC Sets must be post-processed. Such data records are flagged as incomplete\n */\nexport type RecordIsIncomplete = boolean\n/**\n * Data records which are to be deleted at activation are flagged with value 'L'\n */\nexport type OperationAtActivation = (\"upsert\" | \"delete\")\n/**\n * Name of data record field\n */\nexport type FieldName1 = string\n/**\n * Value of data record field\n */\nexport type Value = string\n/**\n * Complete data record of selected key value\n */\nexport type Data = Data1[]\n/**\n * Language in which the data record is translated\n */\nexport type Language = string\n/**\n * Name of data record field\n */\nexport type FieldName2 = string\n/**\n * Value of data record field\n */\nexport type Value1 = string\n/**\n * Translated data records of table or view included in a BC Set\n */\nexport type Translations = SelectedLanguage[]\n/**\n * Data records of table or view included in a BC Set\n */\nexport type DataRecords = DataRecord[]\n/**\n * Involved tables or views of a Customizing object\n */\nexport type Entities = Entity[]\n/**\n * Customizing objects or tables included in the BC Set\n */\nexport type CustomizingObjects = CustomizingObject[]\n\n/**\n * Metadata information of BC Set\n */\nexport interface AffScp1V1 {\nformatVersion: ABAPFileFormatVersion\nheader: Header\nattributes: Attributes\nsubBcSets?: SubBCSets\ncustomizingObjects?: CustomizingObjects\n}\n/**\n * Header\n */\nexport interface Header {\ndescription: Description\noriginalLanguage: OriginalLanguage\nabapLanguageVersion?: ABAPLanguageVersion\n}\n/**\n * Header information of BC Set\n */\nexport interface Attributes {\ntype: Type\nisRelevantForScope?: ScopingRelevant\n}\n/**\n * A hierarchical BC Set comprises several other BC Sets, which can also be hierarchical. The hierarchy can have any number of levels.\n */\nexport interface SubBCSet {\nname?: Name\npositionInHierarchy?: Position\n}\n/**\n * Details of selected customizing object\n */\nexport interface CustomizingObject {\nobjectName: Name1\nobjectType: Type1\nimgActivity?: IMGActivity\nentities: Entities\n}\n/**\n * Details of selected view or table\n */\nexport interface Entity {\nname: EntityName\nfieldAttributes?: FieldAttributes\ndataRecords: DataRecords\n}\n/**\n * You can define the behavior for field of table/view during activation\n */\nexport interface AttributesOfTableViewField {\nfieldName: FieldName\nfieldAttribute: FieldAttribute\n}\n/**\n * Details of selected record\n */\nexport interface DataRecord {\nkeyValue: KeyValue\nincomplete?: RecordIsIncomplete\noperationAtActivation: OperationAtActivation\ndata: Data\ntranslations?: Translations\n}\n/**\n * Data record represented as field-value pair\n */\nexport interface Data1 {\nfieldName: FieldName1\nfieldValue?: Value\n}\n/**\n * Details of selected language\n */\nexport interface SelectedLanguage {\nlanguage?: Language\nfieldName?: FieldName2\nfieldValue?: Value1\n}\n\nexport type Scp1Aff = AffScp1V1;\n","/**\n * Auto-generated from SAP/abap-file-formats JSON schemas.\n * Do not edit — regenerate with `bun scripts/generate-aff-schemas.ts`.\n */\n/**\n * Format version\n */\nexport type FormatVersion = \"1\"\n/**\n * Description of the ABAP object\n */\nexport type Description = string\n/**\n * Original language of the ABAP object\n */\nexport type OriginalLanguage = string\n/**\n * ABAP language version\n */\nexport type ABAPLanguageVersion = (\"standard\" | \"cloudDevelopment\")\n/**\n * RAP Service Definition that implements the business context for this form template\n */\nexport type DataProvider = string\n/**\n * Automatically embed font files into the output. Useful if your output uses fonts that are not delivered by default, for asian fonts or to include your own branding.\n */\nexport type FontEmbed = boolean\n/**\n * When activated if your form template is designed in an LTR language and your target output is an RTL language, layout will be automatically mirrored in the output.\n */\nexport type LayoutMirroring = boolean\n/**\n * Reduce data input volume based on the form design\n */\nexport type ReduceDataVolume = boolean\n\n/**\n * Object type SFPF\n */\nexport interface AffSfpfV1 {\nformatVersion: FormatVersion\nheader: Header\ngeneralInformation: GeneralInformation\n}\n/**\n * Header\n */\nexport interface Header {\ndescription: Description\noriginalLanguage: OriginalLanguage\nabapLanguageVersion?: ABAPLanguageVersion\n}\n/**\n * General Information\n */\nexport interface GeneralInformation {\ndataProvider?: DataProvider\nfontEmbed?: FontEmbed\nlayoutMirroring?: LayoutMirroring\nreduceDataVolume?: ReduceDataVolume\n}\n\nexport type SfpfAff = AffSfpfV1;\n","/**\n * Auto-generated from SAP/abap-file-formats JSON schemas.\n * Do not edit — regenerate with `bun scripts/generate-aff-schemas.ts`.\n */\n/**\n * Format version\n */\nexport type FormatVersion = \"1\"\n/**\n * Description of the ABAP object\n */\nexport type Description = string\n/**\n * Original language of the ABAP object\n */\nexport type OriginalLanguage = string\n/**\n * ABAP language version\n */\nexport type ABAPLanguageVersion = (\"standard\" | \"cloudDevelopment\")\n/**\n * Business role template\n */\nexport type BusinessRoleTemplate = string\n/**\n * Launchpad space template\n */\nexport type LaunchpadSpaceTemplate = string\n\n/**\n * Business role template launchpad space template assignment\n */\nexport interface AffSiadV1 {\nformatVersion: FormatVersion\nheader: Header\ngeneralInformation: GeneralInformation\n}\n/**\n * Header\n */\nexport interface Header {\ndescription: Description\noriginalLanguage: OriginalLanguage\nabapLanguageVersion?: ABAPLanguageVersion\n}\n/**\n * General information\n */\nexport interface GeneralInformation {\nbusinessRoleTemplate: BusinessRoleTemplate\nlaunchpadSpaceTemplate: LaunchpadSpaceTemplate\n}\n\nexport type SiadAff = AffSiadV1;\n","/**\n * Auto-generated from SAP/abap-file-formats JSON schemas.\n * Do not edit — regenerate with `bun scripts/generate-aff-schemas.ts`.\n */\n/**\n * Format version\n */\nexport type FormatVersion = \"1\"\n/**\n * Description of the ABAP object\n */\nexport type Description = string\n/**\n * Original language of the ABAP object\n */\nexport type OriginalLanguage = string\n/**\n * ABAP language version\n */\nexport type ABAPLanguageVersion = (\"standard\" | \"keyUser\" | \"cloudDevelopment\")\n/**\n * Object reusable\n */\nexport type Reusable = boolean\n/**\n * Scope\n */\nexport type Scope = (\"SAP\" | \"customer\")\n/**\n * SAP object type\n */\nexport type SAPObjectType = string\n/**\n * Object extensible\n */\nexport type Extensible = boolean\n/**\n * Situation object name\n */\nexport type Name = string\n/**\n * Description\n */\nexport type Description1 = string\n/**\n * Situation object structure id\n */\nexport type ID = string\n/**\n * Name\n */\nexport type Name1 = string\n/**\n * Situation object structure type\n */\nexport type Type = (\"CDS\" | \"inMemory\")\n/**\n * Object reusable\n */\nexport type Reusable1 = boolean\n/**\n * Scope\n */\nexport type Scope1 = (\"SAP\" | \"customer\")\n/**\n * SAP object node type\n */\nexport type SAPObjectNodeType = string\n/**\n * Situation object structure description\n */\nexport type Description2 = string\n/**\n * Object field\n */\nexport type Field = string\n/**\n * Object field order for situation\n */\nexport type FieldOrder = string\n/**\n * Semantic keys of an object structure\n */\nexport type SemanticKeys = SemanticKeyDetails[]\n/**\n * Object field\n */\nexport type FieldName = string\n/**\n * App for value help\n */\nexport type AppType = \"allApps\"\n/**\n * Type of value help\n */\nexport type Type1 = \"service\"\n/**\n * Scope\n */\nexport type Scope2 = (\"SAP\" | \"customer\")\n/**\n * Value help mappings for situation object structure\n */\nexport type ValueHelpMappings = ValueHelpMappingDetails[]\n/**\n * Service id for value help\n */\nexport type ID1 = string\n/**\n * Field name\n */\nexport type FieldName1 = string\n/**\n * App for value help\n */\nexport type Type2 = \"allApps\"\n/**\n * Entity set\n */\nexport type EntitySet = string\n/**\n * Property\n */\nexport type Property = string\n/**\n * Value help mapping for situation object structure - services\n */\nexport type Services = ServiceDetails[]\n/**\n * Situation object structures\n */\nexport type Structures = StructureDetails[]\n/**\n * Situation event id\n */\nexport type ID2 = string\n/**\n * Object\n */\nexport type Object = string\n/**\n * Type\n */\nexport type Type3 = string\n/**\n * Object reusable\n */\nexport type Reusable2 = boolean\n/**\n * Scope\n */\nexport type Scope3 = (\"SAP\" | \"customer\")\n/**\n * Object type category\n */\nexport type Category = (\"businessClass\" | \"borObjectType\" | \"abapClass\" | \"businessObjectType\" | \"xmlObjectType\")\n/**\n * Parameter structure id for situation object\n */\nexport type ParameterStructureID = string\n/**\n * Description\n */\nexport type Description3 = string\n/**\n * Situation object events\n */\nexport type Events = EventDetails[]\n/**\n * Action id\n */\nexport type ID3 = string\n/**\n * Action type of situation\n */\nexport type Type4 = (\"navigationAction\" | \"callbackAction\")\n/**\n * Object reusable\n */\nexport type Reusable3 = boolean\n/**\n * Scope\n */\nexport type Scope4 = (\"SAP\" | \"customer\")\n/**\n * Name of action\n */\nexport type Name2 = string\n/**\n * Description of action\n */\nexport type Description4 = string\n/**\n * Navigation id\n */\nexport type ID4 = string\n/**\n * Callback id\n */\nexport type ID5 = string\n/**\n * Situation object end user actions\n */\nexport type EndUserActions = EndUserActionDetails[]\n/**\n * Navigation id\n */\nexport type ID6 = string\n/**\n * Object reusable\n */\nexport type Reusable4 = boolean\n/**\n * Scope\n */\nexport type Scope5 = (\"SAP\" | \"customer\")\n/**\n * Semantic object\n */\nexport type SemanticObject = string\n/**\n * Semantic object action\n */\nexport type SemanticObjectAction = string\n/**\n * Name of parameter\n */\nexport type Name3 = string\n/**\n * Parameters\n */\nexport type Parameters = ParameterDetails[]\n/**\n * Situation object navigations\n */\nexport type Navigations = NavigationDetails1[]\n/**\n * Callback id\n */\nexport type ID7 = string\n/**\n * Object reusable\n */\nexport type Reusable5 = boolean\n/**\n * Scope\n */\nexport type Scope6 = (\"SAP\" | \"customer\")\n/**\n * Class name\n */\nexport type ClassName = string\n/**\n * Name of parameter\n */\nexport type Name4 = string\n/**\n * Parameters\n */\nexport type Parameters1 = ParameterDetails1[]\n/**\n * Situation object callbacks\n */\nexport type Callbacks = CallbackDetails1[]\n/**\n * Service id for value help\n */\nexport type ID8 = string\n/**\n * Object reusable\n */\nexport type Reusable6 = boolean\n/**\n * Scope\n */\nexport type Scope7 = (\"SAP\" | \"customer\")\n/**\n * Service protocol version for value help\n */\nexport type ProtocolVersion = (\"V2\" | \"V4\")\n/**\n * Service path type for value help\n */\nexport type PathType = (\"standard\" | \"custom\")\n/**\n * Service custom path for value help\n */\nexport type CustomPath = string\n/**\n * Service binding for value help\n */\nexport type Binding = string\n/**\n * Service definition for value help\n */\nexport type Definition = string\n/**\n * Service version for value help\n */\nexport type Version = string\n/**\n * Entity set\n */\nexport type EntitySet1 = string\n/**\n * Property\n */\nexport type Property1 = string\n/**\n * Providers of value help service for situation object\n */\nexport type ValueHelpServiceProviders = ValueHelpServiceProviderDetails[]\n/**\n * Value help services for situation object\n */\nexport type ValueHelpServices = ValueHelpServiceDetails[]\n\n/**\n * Situation Object properties\n */\nexport interface AffSitoV1 {\nformatVersion: FormatVersion\nheader: Header\nsituationObject: SituationObject\n}\n/**\n * Header\n */\nexport interface Header {\ndescription: Description\noriginalLanguage: OriginalLanguage\nabapLanguageVersion?: ABAPLanguageVersion\n}\n/**\n * Situation Object\n */\nexport interface SituationObject {\nreusable: Reusable\nscope: Scope\nsapObjectType: SAPObjectType\nextensible: Extensible\ntext: Text\nstructures?: Structures\nevents?: Events\nendUserActions?: EndUserActions\nnavigations?: Navigations\ncallbacks?: Callbacks\nvalueHelpServices?: ValueHelpServices\n}\n/**\n * Text for ituation object\n */\nexport interface Text {\nname: Name\ndescription: Description1\n}\n/**\n * Situation object structure\n */\nexport interface StructureDetails {\nid: ID\nname: Name1\ntype: Type\nreusable: Reusable1\nscope: Scope1\nsapObjectNodeType: SAPObjectNodeType\ntext: Text1\nsemanticKeys?: SemanticKeys\nvalueHelpMappings?: ValueHelpMappings\nservices?: Services\n}\n/**\n * Text for situation object structure\n */\nexport interface Text1 {\ndescription: Description2\n}\n/**\n * Semantic key of an object structure\n */\nexport interface SemanticKeyDetails {\nfield: Field\nfieldOrder: FieldOrder\n}\n/**\n * Value help mapping for situation object structure\n */\nexport interface ValueHelpMappingDetails {\nfieldName: FieldName\nappType: AppType\ntype: Type1\nscope: Scope2\n}\n/**\n * Value help mapping for situation object structure - service\n */\nexport interface ServiceDetails {\nid: ID1\nfieldName: FieldName1\ntype: Type2\nentitySet: EntitySet\nproperty: Property\n}\n/**\n * Situation object event\n */\nexport interface EventDetails {\nid: ID2\nobject: Object\ntype: Type3\nreusable: Reusable2\nscope: Scope3\ncategory: Category\nparameterStructureId: ParameterStructureID\ntext: Text2\n}\n/**\n * Text for situation object event\n */\nexport interface Text2 {\ndescription: Description3\n}\n/**\n * Situation object action\n */\nexport interface EndUserActionDetails {\nid: ID3\ntype: Type4\nreusable: Reusable3\nscope: Scope4\ntext: Text3\nnavigation?: NavigationDetails\ncallback?: CallbackDetails\n}\n/**\n * Text for situation object action\n */\nexport interface Text3 {\nname: Name2\ndescription: Description4\n}\n/**\n * Situation object action - navigation\n */\nexport interface NavigationDetails {\nid: ID4\n}\n/**\n * Situation object action - callback\n */\nexport interface CallbackDetails {\nid: ID5\n}\n/**\n * Situation object navigation\n */\nexport interface NavigationDetails1 {\nid: ID6\nreusable: Reusable4\nscope: Scope5\nsemanticObject: SemanticObject\nsemanticObjectAction: SemanticObjectAction\nparameters?: Parameters\n}\n/**\n * Parameter\n */\nexport interface ParameterDetails {\nname: Name3\n}\n/**\n * Situation object callback\n */\nexport interface CallbackDetails1 {\nid: ID7\nreusable: Reusable5\nscope: Scope6\nclassName: ClassName\nparameters?: Parameters1\n}\n/**\n * Parameter\n */\nexport interface ParameterDetails1 {\nname: Name4\n}\n/**\n * Value help service for situation object\n */\nexport interface ValueHelpServiceDetails {\nid: ID8\nreusable: Reusable6\nscope: Scope7\nprotocolVersion: ProtocolVersion\npathType: PathType\ncustomPath: CustomPath\nbinding: Binding\ndefinition: Definition\nversion: Version\nvalueHelpServiceProviders?: ValueHelpServiceProviders\n}\n/**\n * Provider of value help service for situation object\n */\nexport interface ValueHelpServiceProviderDetails {\nentitySet: EntitySet1\nproperty: Property1\n}\n\nexport type SitoAff = AffSitoV1;\n","/**\n * Auto-generated from SAP/abap-file-formats JSON schemas.\n * Do not edit — regenerate with `bun scripts/generate-aff-schemas.ts`.\n */\n/**\n * Format version\n */\nexport type FormatVersion = \"2\"\n/**\n * Description of the ABAP object\n */\nexport type Description = string\n/**\n * Original language of the ABAP object\n */\nexport type OriginalLanguage = string\n/**\n * ABAP language version\n */\nexport type ABAPLanguageVersion = (\"standard\" | \"keyUser\" | \"cloudDevelopment\")\n/**\n * Object reusable\n */\nexport type Reusable = boolean\n/**\n * Scope\n */\nexport type Scope = (\"SAP\" | \"customer\")\n/**\n * SAP object type\n */\nexport type SAPObjectType = string\n/**\n * Object extensible\n */\nexport type Extensible = boolean\n/**\n * Description of object\n */\nexport type Description1 = string\n/**\n * Situation object structure id\n */\nexport type ID = string\n/**\n * Name\n */\nexport type Name = string\n/**\n * Situation object structure type\n */\nexport type Type = (\"CDS\" | \"inMemory\")\n/**\n * Object reusable\n */\nexport type Reusable1 = boolean\n/**\n * Scope\n */\nexport type Scope1 = (\"SAP\" | \"customer\")\n/**\n * SAP object node type\n */\nexport type SAPObjectNodeType = string\n/**\n * Personal data\n */\nexport type PersonalData = (\"noFields\" | \"someFields\" | \"allFields\")\n/**\n * Situation object structure description\n */\nexport type Description2 = string\n/**\n * Object field\n */\nexport type Field = string\n/**\n * Object field order for situation\n */\nexport type FieldOrder = string\n/**\n * Semantic keys of an object structure\n */\nexport type SemanticKeys = SemanticKeyDetails[]\n/**\n * Object field\n */\nexport type FieldName = string\n/**\n * App for value help\n */\nexport type AppType = \"allApps\"\n/**\n * Type of value help\n */\nexport type Type1 = \"service\"\n/**\n * Scope\n */\nexport type Scope2 = (\"SAP\" | \"customer\")\n/**\n * Value help mappings for situation object structure\n */\nexport type ValueHelpMappings = ValueHelpMappingDetails[]\n/**\n * Service id for value help\n */\nexport type ID1 = string\n/**\n * Field name\n */\nexport type FieldName1 = string\n/**\n * App for value help\n */\nexport type Type2 = \"allApps\"\n/**\n * Entity set\n */\nexport type EntitySet = string\n/**\n * Property\n */\nexport type Property = string\n/**\n * Value help mapping for situation object structure - services\n */\nexport type Services = ServiceDetails[]\n/**\n * Field name\n */\nexport type FieldName2 = string\n/**\n * Personal data fields of an object structure\n */\nexport type PersonalDataFields = PersonalDataFieldDetails[]\n/**\n * Situation object structures\n */\nexport type Structures = StructureDetails[]\n/**\n * Situation event id\n */\nexport type ID2 = string\n/**\n * Object\n */\nexport type Object = string\n/**\n * Type\n */\nexport type Type3 = string\n/**\n * Object reusable\n */\nexport type Reusable2 = boolean\n/**\n * Scope\n */\nexport type Scope3 = (\"SAP\" | \"customer\")\n/**\n * Object type category\n */\nexport type Category = (\"businessClass\" | \"borObjectType\" | \"abapClass\" | \"businessObjectType\" | \"xmlObjectType\")\n/**\n * Parameter structure id for situation object\n */\nexport type ParameterStructureID = string\n/**\n * Description\n */\nexport type Description3 = string\n/**\n * Situation object events\n */\nexport type Events = EventDetails[]\n/**\n * Action id\n */\nexport type ID3 = string\n/**\n * Action type of situation\n */\nexport type Type4 = (\"navigationAction\" | \"callbackAction\")\n/**\n * Object reusable\n */\nexport type Reusable3 = boolean\n/**\n * Scope\n */\nexport type Scope4 = (\"SAP\" | \"customer\")\n/**\n * Name of action\n */\nexport type Name1 = string\n/**\n * Description of action\n */\nexport type Description4 = string\n/**\n * Navigation id\n */\nexport type ID4 = string\n/**\n * Callback id\n */\nexport type ID5 = string\n/**\n * Situation object end user actions\n */\nexport type EndUserActions = EndUserActionDetails[]\n/**\n * Navigation id\n */\nexport type ID6 = string\n/**\n * Object reusable\n */\nexport type Reusable4 = boolean\n/**\n * Scope\n */\nexport type Scope5 = (\"SAP\" | \"customer\")\n/**\n * Semantic object\n */\nexport type SemanticObject = string\n/**\n * Semantic object action\n */\nexport type SemanticObjectAction = string\n/**\n * Name of parameter\n */\nexport type Name2 = string\n/**\n * Parameters\n */\nexport type Parameters = ParameterDetails[]\n/**\n * Situation object navigations\n */\nexport type Navigations = NavigationDetails1[]\n/**\n * Callback id\n */\nexport type ID7 = string\n/**\n * Object reusable\n */\nexport type Reusable5 = boolean\n/**\n * Scope\n */\nexport type Scope6 = (\"SAP\" | \"customer\")\n/**\n * Class name\n */\nexport type ClassName = string\n/**\n * Name of parameter\n */\nexport type Name3 = string\n/**\n * Parameters\n */\nexport type Parameters1 = ParameterDetails1[]\n/**\n * Situation object callbacks\n */\nexport type Callbacks = CallbackDetails1[]\n/**\n * Service id for value help\n */\nexport type ID8 = string\n/**\n * Object reusable\n */\nexport type Reusable6 = boolean\n/**\n * Scope\n */\nexport type Scope7 = (\"SAP\" | \"customer\")\n/**\n * Service protocol version for value help\n */\nexport type ProtocolVersion = (\"V2\" | \"V4\")\n/**\n * Service path type for value help\n */\nexport type PathType = (\"standard\" | \"custom\")\n/**\n * Service custom path for value help\n */\nexport type CustomPath = string\n/**\n * Service binding for value help\n */\nexport type Binding = string\n/**\n * Service definition for value help\n */\nexport type Definition = string\n/**\n * Service version for value help\n */\nexport type Version = string\n/**\n * Entity set\n */\nexport type EntitySet1 = string\n/**\n * Property\n */\nexport type Property1 = string\n/**\n * Providers of value help service for situation object\n */\nexport type ValueHelpServiceProviders = ValueHelpServiceProviderDetails[]\n/**\n * Value help services for situation object\n */\nexport type ValueHelpServices = ValueHelpServiceDetails[]\n\n/**\n * Situation Object properties\n */\nexport interface AffSitoV2 {\nformatVersion: FormatVersion\nheader: Header\nsituationObject: SituationObject\n}\n/**\n * Header\n */\nexport interface Header {\ndescription: Description\noriginalLanguage: OriginalLanguage\nabapLanguageVersion?: ABAPLanguageVersion\n}\n/**\n * Situation Object\n */\nexport interface SituationObject {\nreusable: Reusable\nscope: Scope\nsapObjectType: SAPObjectType\nextensible: Extensible\ntext: Text\nstructures?: Structures\nevents?: Events\nendUserActions?: EndUserActions\nnavigations?: Navigations\ncallbacks?: Callbacks\nvalueHelpServices?: ValueHelpServices\n}\n/**\n * Text for situation object\n */\nexport interface Text {\ndescription: Description1\n}\n/**\n * Situation object structure\n */\nexport interface StructureDetails {\nid: ID\nname: Name\ntype: Type\nreusable: Reusable1\nscope: Scope1\nsapObjectNodeType: SAPObjectNodeType\npersonalData: PersonalData\ntext: Text1\nsemanticKeys?: SemanticKeys\nvalueHelpMappings?: ValueHelpMappings\nservices?: Services\npersonalDataFields?: PersonalDataFields\n}\n/**\n * Text for situation object structure\n */\nexport interface Text1 {\ndescription: Description2\n}\n/**\n * Semantic key of an object structure\n */\nexport interface SemanticKeyDetails {\nfield: Field\nfieldOrder: FieldOrder\n}\n/**\n * Value help mapping for situation object structure\n */\nexport interface ValueHelpMappingDetails {\nfieldName: FieldName\nappType: AppType\ntype: Type1\nscope: Scope2\n}\n/**\n * Value help mapping for situation object structure - service\n */\nexport interface ServiceDetails {\nid: ID1\nfieldName: FieldName1\ntype: Type2\nentitySet: EntitySet\nproperty: Property\n}\n/**\n * Personal data field of an object structure\n */\nexport interface PersonalDataFieldDetails {\nfieldName: FieldName2\n}\n/**\n * Situation object event\n */\nexport interface EventDetails {\nid: ID2\nobject: Object\ntype: Type3\nreusable: Reusable2\nscope: Scope3\ncategory: Category\nparameterStructureId: ParameterStructureID\ntext: Text2\n}\n/**\n * Text for situation object event\n */\nexport interface Text2 {\ndescription: Description3\n}\n/**\n * Situation object action\n */\nexport interface EndUserActionDetails {\nid: ID3\ntype: Type4\nreusable: Reusable3\nscope: Scope4\ntext: Text3\nnavigation?: NavigationDetails\ncallback?: CallbackDetails\n}\n/**\n * Text for situation object action\n */\nexport interface Text3 {\nname: Name1\ndescription: Description4\n}\n/**\n * Situation object action - navigation\n */\nexport interface NavigationDetails {\nid: ID4\n}\n/**\n * Situation object action - callback\n */\nexport interface CallbackDetails {\nid: ID5\n}\n/**\n * Situation object navigation\n */\nexport interface NavigationDetails1 {\nid: ID6\nreusable: Reusable4\nscope: Scope5\nsemanticObject: SemanticObject\nsemanticObjectAction: SemanticObjectAction\nparameters?: Parameters\n}\n/**\n * Parameter\n */\nexport interface ParameterDetails {\nname: Name2\n}\n/**\n * Situation object callback\n */\nexport interface CallbackDetails1 {\nid: ID7\nreusable: Reusable5\nscope: Scope6\nclassName: ClassName\nparameters?: Parameters1\n}\n/**\n * Parameter\n */\nexport interface ParameterDetails1 {\nname: Name3\n}\n/**\n * Value help service for situation object\n */\nexport interface ValueHelpServiceDetails {\nid: ID8\nreusable: Reusable6\nscope: Scope7\nprotocolVersion: ProtocolVersion\npathType: PathType\ncustomPath: CustomPath\nbinding: Binding\ndefinition: Definition\nversion: Version\nvalueHelpServiceProviders?: ValueHelpServiceProviders\n}\n/**\n * Provider of value help service for situation object\n */\nexport interface ValueHelpServiceProviderDetails {\nentitySet: EntitySet1\nproperty: Property1\n}\n\nexport type SitoAff = AffSitoV2;\n","/**\n * Auto-generated from SAP/abap-file-formats JSON schemas.\n * Do not edit — regenerate with `bun scripts/generate-aff-schemas.ts`.\n */\n/**\n * The ABAP file format version\n */\nexport type ABAPFileFormatVersion = \"1\"\n/**\n * Description of the Business Configuration shown in the Maintain Business Configurations app. Can be translated with the Maintain Translations app\n */\nexport type Description = string\n/**\n * Original language of the development object. Attributes Name and Description must be maintained in this language\n */\nexport type OriginalLanguage = string\n/**\n * ABAP language version\n */\nexport type ABAPLanguageVersion = (\"standard\" | \"cloudDevelopment\")\n/**\n * Service Binding used for business configuration maintenance\n */\nexport type ServiceBinding = string\nexport type ServiceName = string\n/**\n * The major version number of the service to be used (as defined in the Service Binding)\n */\nexport type ServiceVersion = string\n/**\n * Root Entity Set exposed by the Service Definition\n */\nexport type RootEntitySet = string\n/**\n * Name of the Business Configuration\n */\nexport type Name = string\nexport type ConfigurationGroup = string\n/**\n * If true, the UI automatically navigates to the Object Page of the root entity\n */\nexport type SkipRootEntityListReport = boolean\n/**\n * Defines whether data in the List Report is automatically loaded on first app start.\n */\nexport type InitialLoad = (\"enabled\" | \"disabled\" | \"auto\")\nexport type VariantManagement = (\"page\" | \"none\")\nexport type EntitySet = string\n/**\n * Toggle between onepage concept and tabs.\n */\nexport type SectionLayout = (\"page\" | \"tabs\")\nexport type VariantManagement1 = (\"control\" | \"none\")\n/**\n * If true, the header content is changeable in edit mode\n */\nexport type EditableHeaderContent = boolean\n/**\n * If true, the selected transport request and transport request select action are displayed in a message strip.\n */\nexport type ShowTransportSelectionStrip = boolean\nexport type ObjectPageConfigurations = ObjectPageSettings[]\nexport type EntitySet1 = string\nexport type TableType = (\"responsiveTable\" | \"gridTable\")\nexport type SelectionMode = (\"auto\" | \"multi\" | \"single\" | \"none\")\n/**\n * Enable Select all checkbox\n */\nexport type SelectAll = boolean\n/**\n * Defines how the table handles the visible rows in the table\n */\nexport type RowCountMode = (\"fixed\" | \"auto\")\n/**\n * Number of visible rows of the table\n */\nexport type RowCount = number\n/**\n * You can freeze the first columns of a table so that they always remain visible when scrolling horizontally\n */\nexport type FrozenColumnCount = number\nexport type TableCreationMode = (\"newPage\" | \"inline\" | \"creationRow\" | \"inlineCreationRows\")\n/**\n * If true, a new row is added to the end of the table instead of the beginning of the table\n */\nexport type CreateAtEnd = boolean\n/**\n * If true, the user cannot filter data of the table\n */\nexport type HideFilter = boolean\n/**\n * If true, the user cannot sort the table\n */\nexport type HideSort = boolean\n/**\n * If true, the user cannot add and remove columns to the table\n */\nexport type HideColumn = boolean\n/**\n * If true, display rows in a condensed way. Only applicaple to Table Type 'GridTable'.\n */\nexport type CondensedTableLayout = boolean\n/**\n * If true, include the column labels while calculating the default column width. By default, the column width is calculated based on the type of the content\n */\nexport type IncludeColumnHeadersInWidthCalculation = boolean\n/**\n * If true, disable the possibility to add several items by copying and pasting data from an excel file\n */\nexport type DisablePaste = boolean\n/**\n * If true, a button on the table toolbar allows the user to open the table in fullscreen dialog\n */\nexport type EnableFullScreen = boolean\n/**\n * Mass editing allows users to simultaneously change multiple objects that share the same editable properties\n */\nexport type EnableMassEdit = boolean\nexport type TableSettings = TableSettings1[]\n\nexport interface AffSmbcV1 {\nformatVersion: ABAPFileFormatVersion\nheader: HeaderForSMBCObjects\nserviceConfiguration: ServiceConfiguration\nappConfiguration?: ConfgurationOfListReportAndObjectPages\n}\nexport interface HeaderForSMBCObjects {\ndescription: Description\noriginalLanguage: OriginalLanguage\nabapLanguageVersion?: ABAPLanguageVersion\n}\nexport interface ServiceConfiguration {\nserviceBinding: ServiceBinding\nserviceName: ServiceName\nserviceVersion: ServiceVersion\nrootEntitySet: RootEntitySet\nname: Name\nconfigurationGroup?: ConfigurationGroup\nskipRootEntity?: SkipRootEntityListReport\n}\nexport interface ConfgurationOfListReportAndObjectPages {\nlistReport?: ListReportConfiguration\nobjectPages?: ObjectPageConfigurations\ntableSettings?: TableSettings\n}\nexport interface ListReportConfiguration {\ninitialLoad?: InitialLoad\nvariantManagement?: VariantManagement\n}\nexport interface ObjectPageSettings {\nentitySet?: EntitySet\nsectionLayout?: SectionLayout\nvariantManagement?: VariantManagement1\neditableHeaderContent?: EditableHeaderContent\nshowTransportSelectionStrip?: ShowTransportSelectionStrip\n}\nexport interface TableSettings1 {\nentitySet?: EntitySet1\ntableType?: TableType\nselectionMode?: SelectionMode\nselectAll?: SelectAll\nrowCountMode?: RowCountMode\nrowCount?: RowCount\nfrozenColumnCount?: FrozenColumnCount\ncreationModeName?: TableCreationMode\ncreateAtEnd?: CreateAtEnd\nhideFilter?: HideFilter\nhideSort?: HideSort\nhideColumn?: HideColumn\ncondensedTableLayout?: CondensedTableLayout\nwidthIncludingColumnHeader?: IncludeColumnHeadersInWidthCalculation\ndisablePaste?: DisablePaste\nenableFullScreen?: EnableFullScreen\nenableMassEdit?: EnableMassEdit\n}\n\nexport type SmbcAff = AffSmbcV1;\n","/**\n * Auto-generated from SAP/abap-file-formats JSON schemas.\n * Do not edit — regenerate with `bun scripts/generate-aff-schemas.ts`.\n */\n/**\n * Format version\n */\nexport type FormatVersion = \"1\"\n/**\n * Description of the ABAP object\n */\nexport type Description = string\n/**\n * Original language of the ABAP object\n */\nexport type OriginalLanguage = string\n/**\n * ABAP language version\n */\nexport type ABAPLanguageVersion = (\"standard\" | \"keyUser\" | \"cloudDevelopment\")\n/**\n * Long description to that email template\n */\nexport type TemplateDescription = string\n/**\n * The corresponding CDS view name for the template\n */\nexport type CDSView = string\n/**\n * Indicator if the template is predelivered\n */\nexport type Predelivered = boolean\n/**\n * The subject of the email template\n */\nexport type Subject = string\n/**\n * Indicator if the template text body is generated automatically from html body\n */\nexport type GeneratePlainTextFromHTML = boolean\n/**\n * Name\n */\nexport type Name = string\n/**\n * Template Content\n */\nexport type TemplateContent = EmailTemplateContent[]\n\n/**\n * Email Template\n */\nexport interface AffSmtgV1 {\nformatVersion: FormatVersion\nheader: Header\ngeneralInformation: GeneralInformation\ntemplateContent?: TemplateContent\n}\n/**\n * Header\n */\nexport interface Header {\ndescription: Description\noriginalLanguage: OriginalLanguage\nabapLanguageVersion?: ABAPLanguageVersion\n}\n/**\n * General information\n */\nexport interface GeneralInformation {\ntemplateDescription?: TemplateDescription\ncdsView: CDSView\nisPredelivered?: Predelivered\nemailSubject: Subject\nisPlaintextAutoGenerated?: GeneratePlainTextFromHTML\n}\n/**\n * Displays the HTML und plain text template content.\n */\nexport interface EmailTemplateContent {\nname?: Name\n}\n\nexport type SmtgAff = AffSmtgV1;\n","/**\n * Auto-generated from SAP/abap-file-formats JSON schemas.\n * Do not edit — regenerate with `bun scripts/generate-aff-schemas.ts`.\n */\n/**\n * The ABAP file format version\n */\nexport type ABAPFileFormatVersion = \"1\"\n/**\n * Description of the ABAP object\n */\nexport type Description = string\n/**\n * Original language of the ABAP object\n */\nexport type OriginalLanguage = string\n/**\n * ABAP language version\n */\nexport type ABAPLanguageVersion = (\"standard\" | \"cloudDevelopment\")\n/**\n * Name of the service provider\n */\nexport type ProviderName = string\n/**\n * Namespace of the service provider\n */\nexport type Namespace = string\n/**\n * Prefix for all generated objects\n */\nexport type ObjectNamePrefix = string\n/**\n * Implementing class of service provider\n */\nexport type ImplementingClass = string\n\n/**\n * SOAP web service provider model\n */\nexport interface AffSprvV1 {\nformatVersion: ABAPFileFormatVersion\nheader: Header\nserviceProvider: ServiceProvider\n}\n/**\n * Header data\n */\nexport interface Header {\ndescription: Description\noriginalLanguage: OriginalLanguage\nabapLanguageVersion?: ABAPLanguageVersion\n}\n/**\n * Service provider details\n */\nexport interface ServiceProvider {\nproviderName: ProviderName\nnamespace: Namespace\nprefix?: ObjectNamePrefix\nimplementingClass?: ImplementingClass\n}\n\nexport type SprvAff = AffSprvV1;\n","/**\n * Auto-generated from SAP/abap-file-formats JSON schemas.\n * Do not edit — regenerate with `bun scripts/generate-aff-schemas.ts`.\n */\n/**\n * The ABAP file format version\n */\nexport type ABAPFileFormatVersion = \"1\"\n/**\n * Description of the ABAP object\n */\nexport type Description = string\n/**\n * Original language of the ABAP object\n */\nexport type OriginalLanguage = string\n/**\n * ABAP language version\n */\nexport type ABAPLanguageVersion = (\"standard\" | \"keyUser\" | \"cloudDevelopment\")\n/**\n * Service Binding type\n */\nexport type BindingType = string\n/**\n * Service Binding category\n */\nexport type BindingCategory = (\"ui\" | \"webApi\")\n/**\n * Service name\n */\nexport type ServiceName = string\n/**\n * Service version\n */\nexport type ServiceVersion1 = string\n/**\n * Service build version\n */\nexport type ServiceBuildVersion = string\n/**\n * Service definition\n */\nexport type ServiceDefinition = string\n/**\n * Service versions\n */\nexport type ServiceVersions = ServiceVersion[]\n/**\n * Services\n */\nexport type Services = ServiceProperties[]\n\n/**\n * Service Binding properties\n */\nexport interface AffSrvbV1 {\nformatVersion: ABAPFileFormatVersion\nheader: Header\nbindingType: BindingType\nbindingTypeCategory: BindingCategory\nservices: Services\n}\n/**\n * Header\n */\nexport interface Header {\ndescription: Description\noriginalLanguage: OriginalLanguage\nabapLanguageVersion?: ABAPLanguageVersion\n}\n/**\n * Service properties\n */\nexport interface ServiceProperties {\nname: ServiceName\nversions: ServiceVersions\n}\n/**\n * Service version\n */\nexport interface ServiceVersion {\nserviceVersion: ServiceVersion1\nserviceBuildVersion?: ServiceBuildVersion\nserviceDefinition: ServiceDefinition\n}\n\nexport type SrvbAff = AffSrvbV1;\n","/**\n * Auto-generated from SAP/abap-file-formats JSON schemas.\n * Do not edit — regenerate with `bun scripts/generate-aff-schemas.ts`.\n */\n/**\n * The ABAP file format version\n */\nexport type ABAPFileFormatVersion = \"1\"\n/**\n * Description of the ABAP object\n */\nexport type Description = string\n/**\n * Original language of the ABAP object\n */\nexport type OriginalLanguage = string\n/**\n * ABAP language version\n */\nexport type ABAPLanguageVersion = (\"standard\" | \"cloudDevelopment\")\n/**\n * Type\n */\nexport type Type = (\"OData\" | \"webService\" | \"RFC\")\n/**\n * Object type\n */\nexport type ObjectType = string\n/**\n * Object name\n */\nexport type ObjectName = string\n/**\n * Id\n */\nexport type Id = string\n/**\n * Value\n */\nexport type Value = string\n/**\n * Properties\n */\nexport type Properties = ConsumerPropertyDetails[]\n\n/**\n * Service Consumption Model properties\n */\nexport interface AffSrvcV1 {\nformatVersion: ABAPFileFormatVersion\nheader: Header\nconsumer: Consumer\n}\n/**\n * Header\n */\nexport interface Header {\ndescription: Description\noriginalLanguage: OriginalLanguage\nabapLanguageVersion?: ABAPLanguageVersion\n}\n/**\n * Consumer\n */\nexport interface Consumer {\ntype: Type\nobjectType: ObjectType\nobjectName: ObjectName\nproperties?: Properties\n}\n/**\n * Consumer property details\n */\nexport interface ConsumerPropertyDetails {\nid?: Id\nvalue?: Value\n}\n\nexport type SrvcAff = AffSrvcV1;\n","/**\n * Auto-generated from SAP/abap-file-formats JSON schemas.\n * Do not edit — regenerate with `bun scripts/generate-aff-schemas.ts`.\n */\n/**\n * The ABAP file format version\n */\nexport type ABAPFileFormatVersion = \"1\"\n/**\n * Description of the ABAP object\n */\nexport type Description = string\n/**\n * Original language of the ABAP object\n */\nexport type OriginalLanguage = string\n/**\n * ABAP language version\n */\nexport type ABAPLanguageVersion = (\"standard\" | \"keyUser\" | \"cloudDevelopment\")\n/**\n * Source Origin states which tool was used to create the service definition\n */\nexport type SourceOrigin = (\"abapDevelopmentTools\" | \"customCdsViews\" | \"customAnalyticalQueries\" | \"customBusinessObject\" | \"customCodeList\" | \"customCdsViewsVariantConfg\" | \"customFields\" | \"extensionsForDataSources\" | \"customSearchModeler\" | \"serviceConsumptionModel\")\n/**\n * Source type states which statement is in the service definition.\n */\nexport type SourceType = (\"definition\" | \"extension\")\n\n/**\n * Properties of a Service Definition\n */\nexport interface AffSrvdV1 {\nformatVersion: ABAPFileFormatVersion\nheader: Header\ngeneralInformation: GeneralInformation\n}\n/**\n * Header\n */\nexport interface Header {\ndescription: Description\noriginalLanguage: OriginalLanguage\nabapLanguageVersion?: ABAPLanguageVersion\n}\n/**\n * General information\n */\nexport interface GeneralInformation {\nsourceOrigin: SourceOrigin\nsourceType: SourceType\n}\n\nexport type SrvdAff = AffSrvdV1;\n","/**\n * Auto-generated from SAP/abap-file-formats JSON schemas.\n * Do not edit — regenerate with `bun scripts/generate-aff-schemas.ts`.\n */\n/**\n * The ABAP file format version\n */\nexport type ABAPFileFormatVersion = \"1\"\n/**\n * Description of the ABAP object\n */\nexport type Description = string\n/**\n * Original language of the ABAP object\n */\nexport type OriginalLanguage = string\n/**\n * ABAP language version\n */\nexport type ABAPLanguageVersion = (\"standard\" | \"cloudDevelopment\")\n/**\n * Program ID\n */\nexport type ProgramID = string\n/**\n * Object type\n */\nexport type ObjectType = string\n/**\n * Object name\n */\nexport type ObjectName = string\n/**\n * Service type\n */\nexport type ServiceType = string\n/**\n * Service name\n */\nexport type ServiceName = string\n\n/**\n * Object type SUCO (authorization default variant)\n */\nexport interface AffSucoV1 {\nformatVersion: ABAPFileFormatVersion\nheader: Header\nleadingApplication: LeadingApplication\n}\n/**\n * Header\n */\nexport interface Header {\ndescription: Description\noriginalLanguage: OriginalLanguage\nabapLanguageVersion?: ABAPLanguageVersion\n}\n/**\n * Leading application\n */\nexport interface LeadingApplication {\nprogramId?: ProgramID\nobjectType: ObjectType\nobjectName: ObjectName\nserviceType?: ServiceType\nserviceName?: ServiceName\n}\n\nexport type SucoAff = AffSucoV1;\n","/**\n * Auto-generated from SAP/abap-file-formats JSON schemas.\n * Do not edit — regenerate with `bun scripts/generate-aff-schemas.ts`.\n */\n/**\n * The ABAP file format version\n */\nexport type ABAPFileFormatVersion = \"1\"\n/**\n * Description of the ABAP object\n */\nexport type Description = string\n/**\n * Original language of the ABAP object\n */\nexport type OriginalLanguage = string\n/**\n * ABAP language version\n */\nexport type ABAPLanguageVersion = (\"standard\" | \"cloudDevelopment\")\n/**\n * Application name of authorization defaults\n */\nexport type ApplicationName = string\n/**\n * Type of authorization defaults\n */\nexport type ApplicationType = string\n/**\n * Maintenance mode\n */\nexport type MaintenanceMode = (\"manual\" | \"automatic\" | \"automaticBasisObjects\" | \"noDefaultValues\" | \"deprecated\" | \"obsolete\")\n/**\n * Authorization default documentation for application\n */\nexport type Documentation = string\n/**\n * Name of Authorization Object\n */\nexport type Object = string\n/**\n * Maintenance Status\n */\nexport type MaintenanceStatus = (\"noDefault\" | \"defaultWithValues\" | \"defaultWithoutValues\" | \"inactiveValues\")\n/**\n * Authorization default documentation for object\n */\nexport type Documentation1 = string\n/**\n * Authorization field\n */\nexport type AuthorizationField = string\n/**\n * From value\n */\nexport type From = string\n/**\n * To values\n */\nexport type To = string\n/**\n * Authorization field values\n */\nexport type AuthorizationFieldValues = AuthorizationFieldValues1[]\n/**\n * Authorization objects\n */\nexport type AuthorizationObjects = AuthorizationObjectDetails[]\n\n/**\n * Object type SUSI\n */\nexport interface AffSusiV1 {\nformatVersion: ABAPFileFormatVersion\nheader: Header\ngeneralInformation: GeneralInformation\nauthorizationObjects?: AuthorizationObjects\n}\n/**\n * Header\n */\nexport interface Header {\ndescription: Description\noriginalLanguage: OriginalLanguage\nabapLanguageVersion?: ABAPLanguageVersion\n}\n/**\n * General information\n */\nexport interface GeneralInformation {\napplicationName: ApplicationName\napplicationType: ApplicationType\nmaintenanceMode?: MaintenanceMode\ndocumentation?: Documentation\n}\n/**\n * Details of Authorization object\n */\nexport interface AuthorizationObjectDetails {\nobject: Object\nmaintenanceStatus?: MaintenanceStatus\ndocumentation?: Documentation1\nfields?: AuthorizationFieldValues\n}\n/**\n * Authorization field values\n */\nexport interface AuthorizationFieldValues1 {\nfield?: AuthorizationField\nlow?: From\nhigh?: To\n}\n\nexport type SusiAff = AffSusiV1;\n","/**\n * Auto-generated from SAP/abap-file-formats JSON schemas.\n * Do not edit — regenerate with `bun scripts/generate-aff-schemas.ts`.\n */\n/**\n * Format version\n */\nexport type FormatVersion = \"1\"\n/**\n * Description of the ABAP object\n */\nexport type Description = string\n/**\n * Original language of the ABAP object\n */\nexport type OriginalLanguage = string\n/**\n * ABAP language version\n */\nexport type ABAPLanguageVersion = (\"standard\" | \"keyUser\" | \"cloudDevelopment\")\n/**\n * Software component\n */\nexport type SoftwareComponent = string\n/**\n * The software component grants access permission to the specified software components\n */\nexport type AccessPermissions = AccessPermission[]\n/**\n * Software component\n */\nexport type SoftwareComponent1 = string\n/**\n * The software component depends on the specified software components\n */\nexport type Dependencies = Dependency[]\n\n/**\n * Software component relations\n */\nexport interface AffSwcrV1 {\nformatVersion: FormatVersion\nheader: Header\npermissions?: AccessPermissions\ndependencies?: Dependencies\n}\n/**\n * Header\n */\nexport interface Header {\ndescription: Description\noriginalLanguage: OriginalLanguage\nabapLanguageVersion?: ABAPLanguageVersion\n}\n/**\n * Access permission\n */\nexport interface AccessPermission {\nsoftwareComponent: SoftwareComponent\n}\n/**\n * Dependency\n */\nexport interface Dependency {\nsoftwareComponent: SoftwareComponent1\n}\n\nexport type SwcrAff = AffSwcrV1;\n","/**\n * Auto-generated from SAP/abap-file-formats JSON schemas.\n * Do not edit — regenerate with `bun scripts/generate-aff-schemas.ts`.\n */\n/**\n * Format version\n */\nexport type FormatVersion = \"1\"\n/**\n * Description of the ABAP object\n */\nexport type Description = string\n/**\n * Original language of the ABAP object\n */\nexport type OriginalLanguage = string\n/**\n * Extension include with persisted custom fields\n */\nexport type ExtensionInclude = string\n/**\n * Structure with application data\n */\nexport type ApplicationDataStructure = string\n/**\n * Abstract entity with ui definition\n */\nexport type UIExtensionEntity = string\n/**\n * Name of transaction code\n */\nexport type Name = string\n/**\n * Transaction codes of extensible application\n */\nexport type TransactionCodes = TransactionCodes1[]\n\n/**\n * SAP GUI extension point for developer extensibility\n */\nexport interface AffSxtgV1 {\nformatVersion: FormatVersion\nheader: Header\ngeneralInformation?: GeneralInformation\ntransactionCodes?: TransactionCodes\n}\n/**\n * Header\n */\nexport interface Header {\ndescription: Description\noriginalLanguage: OriginalLanguage\n}\n/**\n * General information\n */\nexport interface GeneralInformation {\nextensionInclude: ExtensionInclude\napplicationDataStructure: ApplicationDataStructure\nuiExtensionEntity: UIExtensionEntity\n}\n/**\n * Transaction codes\n */\nexport interface TransactionCodes1 {\nname?: Name\n}\n\nexport type SxtgAff = AffSxtgV1;\n","/**\n * Auto-generated from SAP/abap-file-formats JSON schemas.\n * Do not edit — regenerate with `bun scripts/generate-aff-schemas.ts`.\n */\n/**\n * Format version\n */\nexport type FormatVersion = \"1\"\n/**\n * Description of the ABAP object\n */\nexport type Description = string\n/**\n * Original language of the ABAP object\n */\nexport type OriginalLanguage = string\n/**\n * ABAP language version\n */\nexport type ABAPLanguageVersion = (\"standard\" | \"keyUser\" | \"cloudDevelopment\")\n/**\n * Application type\n */\nexport type ApplicationType = (\"transaction\" | \"webDynpro\" | \"webClient\" | \"ui5\" | \"legacyUi5\" | \"url\" | \"tileOnly\" | \"urlTemplate\")\n/**\n * Technical catalog\n */\nexport type TechnicalCatalog = string\n/**\n * SAP Fiori ID\n */\nexport type SAPFioriID = string\n/**\n * Transaction code\n */\nexport type TransactionCode = string\n/**\n * Target mapping information\n */\nexport type TargetMappingInformation = string\n/**\n * Application component (ACH)\n */\nexport type ApplicationComponentACH = string\n/**\n * Suppress tiles\n */\nexport type SuppressTiles = boolean\n/**\n * SAPUI5 Component ID\n */\nexport type SAPUI5ComponentID = string\n/**\n * ICF path\n */\nexport type ICFPath = string\n/**\n * Web Dynpro application\n */\nexport type WebDynproApplication = string\n/**\n * Application configuration\n */\nexport type ApplicationConfiguration = string\n/**\n * Flavor ID (deprecated)\n */\nexport type FlavorID = string\n/**\n * Integration mode (deprecated)\n */\nexport type IntegrationMode = (\"systemDefault\" | \"direct\" | \"compatible\")\n/**\n * Compatibility mode (deprecated)\n */\nexport type CompatibilityMode = boolean\n/**\n * Target ID\n */\nexport type TargetID = string\n/**\n * URL template\n */\nexport type URLTemplate = string\n/**\n * Parameter name\n */\nexport type Name = string\n/**\n * Parameter value\n */\nexport type Value = string\n/**\n * URL template parameters\n */\nexport type URLTemplateParameters = URLTemplateParameter[]\n/**\n * Target mapping ID\n */\nexport type TargetMappingID = string\n/**\n * Semantic object of the target mapping\n */\nexport type SemanticObject = string\n/**\n * Action of the target mapping\n */\nexport type Action = string\n/**\n * Target URL used for apps of type 'Tile Only' and 'URL Application'\n */\nexport type TargetURL = string\n/**\n * System alias\n */\nexport type SystemAlias = string\n/**\n * Desktop is supported as device type\n */\nexport type Desktop = boolean\n/**\n * Tablet is supported as device type\n */\nexport type Tablet = boolean\n/**\n * Phone is supported as device type\n */\nexport type Phone = boolean\n/**\n * Parameter name\n */\nexport type ParameterName = string\n/**\n * Parameter in target application\n */\nexport type ParameterInTargetApplication = string\n/**\n * Default value\n */\nexport type DefaultValue = string\n/**\n * Filter value\n */\nexport type FilterValue = string\n/**\n * Filter type\n */\nexport type FilterType = (\"plain\" | \"regex\")\n/**\n * Whether the parameter is required\n */\nexport type Required = boolean\n/**\n * Navigation parameters of the target mapping\n */\nexport type NavigationParameters = NavigationParameter[]\n/**\n * How additional parameters are handled\n */\nexport type AdditionalParameterHandling = (\"allowed\" | \"ignored\" | \"notAllowed\")\n/**\n * Tile ID\n */\nexport type ID = string\n/**\n * Tile type\n */\nexport type TileType = (\"static\" | \"dynamic\" | \"custom\")\n/**\n * Tile is chosen by default\n */\nexport type IsDefaultTile = boolean\n/**\n * Tile is stored as legacy tile\n */\nexport type IsLegacyTile = boolean\n/**\n * Reuse text defined as part of the app\n */\nexport type ReuseTextFromApplication = boolean\n/**\n * Tile title\n */\nexport type Title = string\n/**\n * Tile subtitle\n */\nexport type Subtitle = string\n/**\n * Tile information\n */\nexport type Information = string\n/**\n * Tile keywords\n */\nexport type Keywords = string\n/**\n * Tile icon\n */\nexport type Icon = string\n/**\n * Service URL\n */\nexport type ServiceURL = string\n/**\n * Service path\n */\nexport type ServicePath = string\n/**\n * Duration until the tile is refreshed\n */\nexport type RefreshInterval = number\n/**\n * Number unit\n */\nexport type NumberUnit = string\n/**\n * Parameter name\n */\nexport type Name1 = string\n/**\n * Parameter value\n */\nexport type Value1 = string\n/**\n * Tile navigation parameters\n */\nexport type TileNavigationParameters = TileNavigationParameter[]\n/**\n * Base CHIP\n */\nexport type BaseCHIP = string\n/**\n * Configuration string of the CHIP\n */\nexport type Configuration = string\n/**\n * Bag ID\n */\nexport type BagID = string\n/**\n * Property name\n */\nexport type Name2 = string\n/**\n * Property value\n */\nexport type Value2 = string\n/**\n * Property is translatable\n */\nexport type Translatable = boolean\n/**\n * These Bags are available in the Javascript Frontend via the CHIP API \"bag\" Contract\n */\nexport type BagProperties = CHIPBagProperty[]\n/**\n * Tiles\n */\nexport type Tiles = TileDetails[]\n/**\n * Life cycle status\n */\nexport type Status = (\"active\" | \"deprecated\" | \"obsolete\")\n/**\n * LADI of the successor application\n */\nexport type Successor = string\n\n/**\n * Launchpad application descriptor item (LADI)\n */\nexport interface AffUiadV1 {\nformatVersion: FormatVersion\nheader: Header\ngeneralInformation: GeneralInformation\nui5AppDetails?: SAPUI5ApplicationInformation\nwebDynproAppDetails?: WebDynproApplicationInformation\nwebClientAppDetails?: WebClientApplicationInformation\nurlTemplateAppDetails?: URLTemplateApplicationInformation\nnavigation: NavigationInformation\ntiles: Tiles\nlifeCycle?: LifeCycle\n}\n/**\n * Header\n */\nexport interface Header {\ndescription: Description\noriginalLanguage: OriginalLanguage\nabapLanguageVersion?: ABAPLanguageVersion\n}\n/**\n * General information\n */\nexport interface GeneralInformation {\nappType: ApplicationType\ncatalogId: TechnicalCatalog\nfioriId?: SAPFioriID\ntransaction?: TransactionCode\ninformation?: TargetMappingInformation\nsupportComponent?: ApplicationComponentACH\nsuppressTiles?: SuppressTiles\n}\n/**\n * SAPUI5 application information\n */\nexport interface SAPUI5ApplicationInformation {\nappId: SAPUI5ComponentID\nicfPath?: ICFPath\n}\n/**\n * Web Dynpro application information\n */\nexport interface WebDynproApplicationInformation {\nappId: WebDynproApplication\nconfigId?: ApplicationConfiguration\nflavorId?: FlavorID\nintegrationMode?: IntegrationMode\ncompatibilityMode?: CompatibilityMode\n}\n/**\n * Web Client application information\n */\nexport interface WebClientApplicationInformation {\ntargetId: TargetID\n}\n/**\n * URL Template application information\n */\nexport interface URLTemplateApplicationInformation {\ntemplateId: URLTemplate\nparameters?: URLTemplateParameters\n}\n/**\n * URL template parameter\n */\nexport interface URLTemplateParameter {\nname: Name\nvalue?: Value\n}\n/**\n * Navigation information\n */\nexport interface NavigationInformation {\ntargetMappingId: TargetMappingID\nsemanticObject: SemanticObject\naction: Action\ntargetUrl?: TargetURL\nsystemAlias?: SystemAlias\ndesktop?: Desktop\ntablet?: Tablet\nphone?: Phone\nparameters?: NavigationParameters\nadditionalParameterHandling?: AdditionalParameterHandling\n}\n/**\n * Navigation parameter\n */\nexport interface NavigationParameter {\nname: ParameterName\nrenameTo?: ParameterInTargetApplication\ndefaultValue?: DefaultValue\nfilterValue?: FilterValue\nfilterType?: FilterType\nrequired?: Required\n}\n/**\n * Details of a tile\n */\nexport interface TileDetails {\nid: ID\ntileType: TileType\nisDefault?: IsDefaultTile\nisLegacy?: IsLegacyTile\nstandard?: StandardDetails\ncustom?: CustomDetails\n}\n/**\n * Standard tile details\n */\nexport interface StandardDetails {\nreuseTextFromApp?: ReuseTextFromApplication\ntitle: Title\nsubtitle?: Subtitle\ninformation?: Information\nkeywords?: Keywords\nicon?: Icon\ndynamic?: DynamicTileDetails\ntileNavigationParameters?: TileNavigationParameters\n}\n/**\n * Dynamic tile details\n */\nexport interface DynamicTileDetails {\nserviceBaseUrl?: ServiceURL\nservicePath?: ServicePath\nrefreshInterval?: RefreshInterval\nnumberUnit?: NumberUnit\n}\n/**\n * Tile navigation parameter\n */\nexport interface TileNavigationParameter {\nname: Name1\nvalue?: Value1\n}\n/**\n * Custom tile details\n */\nexport interface CustomDetails {\nbaseChipId?: BaseCHIP\nconfiguration?: Configuration\nbagProperties?: BagProperties\n}\n/**\n * Property of a CHIP bag\n */\nexport interface CHIPBagProperty {\nbagId: BagID\nname: Name2\nvalue?: Value2\ntranslatable?: Translatable\n}\n/**\n * Life cycle\n */\nexport interface LifeCycle {\nstatus?: Status\nsuccessor?: Successor\n}\n\nexport type UiadAff = AffUiadV1;\n","/**\n * Auto-generated from SAP/abap-file-formats JSON schemas.\n * Do not edit — regenerate with `bun scripts/generate-aff-schemas.ts`.\n */\n/**\n * Format version\n */\nexport type FormatVersion = \"2\"\n/**\n * Description of the ABAP object\n */\nexport type Description = string\n/**\n * Original language of the ABAP object\n */\nexport type OriginalLanguage = string\n/**\n * ABAP language version\n */\nexport type ABAPLanguageVersion = (\"standard\" | \"keyUser\" | \"cloudDevelopment\")\n/**\n * Application type\n */\nexport type ApplicationType = (\"transaction\" | \"webDynpro\" | \"webClient\" | \"ui5\" | \"legacyUi5\" | \"url\" | \"tileOnly\" | \"urlTemplate\")\n/**\n * Technical catalog\n */\nexport type TechnicalCatalog = string\n/**\n * SAP Fiori ID\n */\nexport type SAPFioriID = string\n/**\n * Transaction code\n */\nexport type TransactionCode = string\n/**\n * Target mapping information\n */\nexport type TargetMappingInformation = string\n/**\n * Application component (ACH)\n */\nexport type ApplicationComponentACH = string\n/**\n * Suppress tiles\n */\nexport type SuppressTiles = boolean\n/**\n * Target mapping title (smart link)\n */\nexport type TargetMappingTitle = string\n/**\n * SAPUI5 Component ID\n */\nexport type SAPUI5ComponentID = string\n/**\n * ICF path\n */\nexport type ICFPath = string\n/**\n * Web Dynpro application\n */\nexport type WebDynproApplication = string\n/**\n * Application configuration\n */\nexport type ApplicationConfiguration = string\n/**\n * Flavor ID (deprecated)\n */\nexport type FlavorID = string\n/**\n * Integration mode (deprecated)\n */\nexport type IntegrationMode = (\"systemDefault\" | \"direct\" | \"compatible\")\n/**\n * Compatibility mode (deprecated)\n */\nexport type CompatibilityMode = boolean\n/**\n * Target ID\n */\nexport type TargetID = string\n/**\n * URL template\n */\nexport type URLTemplate = string\n/**\n * Parameter name\n */\nexport type Name = string\n/**\n * Parameter value\n */\nexport type Value = string\n/**\n * URL template parameters\n */\nexport type URLTemplateParameters = URLTemplateParameter[]\n/**\n * Target mapping ID\n */\nexport type TargetMappingID = string\n/**\n * Semantic object of the target mapping\n */\nexport type SemanticObject = string\n/**\n * Action of the target mapping\n */\nexport type Action = string\n/**\n * Target URL used for apps of type 'Tile Only' and 'URL Application'\n */\nexport type TargetURL = string\n/**\n * System alias\n */\nexport type SystemAlias = string\n/**\n * Desktop is supported as device type\n */\nexport type Desktop = boolean\n/**\n * Tablet is supported as device type\n */\nexport type Tablet = boolean\n/**\n * Phone is supported as device type\n */\nexport type Phone = boolean\n/**\n * Parameter name\n */\nexport type ParameterName = string\n/**\n * Parameter in target application\n */\nexport type ParameterInTargetApplication = string\n/**\n * Default value\n */\nexport type DefaultValue = string\n/**\n * Filter value\n */\nexport type FilterValue = string\n/**\n * Filter type\n */\nexport type FilterType = (\"plain\" | \"regex\")\n/**\n * Whether the parameter is required\n */\nexport type Required = boolean\n/**\n * Navigation parameters of the target mapping\n */\nexport type NavigationParameters = NavigationParameter[]\n/**\n * How additional parameters are handled\n */\nexport type AdditionalParameterHandling = (\"allowed\" | \"ignored\" | \"notAllowed\")\n/**\n * Tile ID\n */\nexport type ID = string\n/**\n * Tile type\n */\nexport type TileType = (\"static\" | \"dynamic\" | \"custom\")\n/**\n * Tile is chosen by default\n */\nexport type IsDefaultTile = boolean\n/**\n * Tile is stored as legacy tile\n */\nexport type IsLegacyTile = boolean\n/**\n * Reuse text defined as part of the app\n */\nexport type ReuseTextFromApplication = boolean\n/**\n * Tile title\n */\nexport type Title = string\n/**\n * Tile subtitle\n */\nexport type Subtitle = string\n/**\n * Tile information\n */\nexport type Information = string\n/**\n * Tile keywords\n */\nexport type Keywords = string\n/**\n * Tile icon\n */\nexport type Icon = string\n/**\n * Service URL\n */\nexport type ServiceURL = string\n/**\n * Service path\n */\nexport type ServicePath = string\n/**\n * Duration until the tile is refreshed\n */\nexport type RefreshInterval = number\n/**\n * Number unit\n */\nexport type NumberUnit = string\n/**\n * Parameter name\n */\nexport type Name1 = string\n/**\n * Parameter value\n */\nexport type Value1 = string\n/**\n * Tile navigation parameters\n */\nexport type TileNavigationParameters = TileNavigationParameter[]\n/**\n * Base CHIP\n */\nexport type BaseCHIP = string\n/**\n * Configuration string of the CHIP\n */\nexport type Configuration = string\n/**\n * Bag ID\n */\nexport type BagID = string\n/**\n * Property name\n */\nexport type Name2 = string\n/**\n * Property value\n */\nexport type Value2 = string\n/**\n * Property is translatable\n */\nexport type Translatable = boolean\n/**\n * These Bags are available in the Javascript Frontend via the CHIP API \"bag\" Contract\n */\nexport type BagProperties = CHIPBagProperty[]\n/**\n * Tiles\n */\nexport type Tiles = TileDetails[]\n/**\n * Life cycle status\n */\nexport type Status = (\"active\" | \"deprecated\" | \"obsolete\")\n/**\n * LADI of the successor application\n */\nexport type Successor = string\n\n/**\n * Launchpad application descriptor item (LADI)\n */\nexport interface AffUiadV2 {\nformatVersion: FormatVersion\nheader: Header\ngeneralInformation: GeneralInformation\nui5AppDetails?: SAPUI5ApplicationInformation\nwebDynproAppDetails?: WebDynproApplicationInformation\nwebClientAppDetails?: WebClientApplicationInformation\nurlTemplateAppDetails?: URLTemplateApplicationInformation\nnavigation: NavigationInformation\ntiles: Tiles\nlifeCycle?: LifeCycle\n}\n/**\n * Header\n */\nexport interface Header {\ndescription: Description\noriginalLanguage: OriginalLanguage\nabapLanguageVersion?: ABAPLanguageVersion\n}\n/**\n * General information\n */\nexport interface GeneralInformation {\nappType: ApplicationType\ncatalogId: TechnicalCatalog\nfioriId?: SAPFioriID\ntransaction?: TransactionCode\ninformation?: TargetMappingInformation\nsupportComponent?: ApplicationComponentACH\nsuppressTiles?: SuppressTiles\ntargetMappingTitle?: TargetMappingTitle\n}\n/**\n * SAPUI5 application information\n */\nexport interface SAPUI5ApplicationInformation {\nappId: SAPUI5ComponentID\nicfPath?: ICFPath\n}\n/**\n * Web Dynpro application information\n */\nexport interface WebDynproApplicationInformation {\nappId: WebDynproApplication\nconfigId?: ApplicationConfiguration\nflavorId?: FlavorID\nintegrationMode?: IntegrationMode\ncompatibilityMode?: CompatibilityMode\n}\n/**\n * Web Client application information\n */\nexport interface WebClientApplicationInformation {\ntargetId: TargetID\n}\n/**\n * URL Template application information\n */\nexport interface URLTemplateApplicationInformation {\ntemplateId: URLTemplate\nparameters?: URLTemplateParameters\n}\n/**\n * URL template parameter\n */\nexport interface URLTemplateParameter {\nname: Name\nvalue?: Value\n}\n/**\n * Navigation information\n */\nexport interface NavigationInformation {\ntargetMappingId: TargetMappingID\nsemanticObject: SemanticObject\naction: Action\ntargetUrl?: TargetURL\nsystemAlias?: SystemAlias\ndesktop?: Desktop\ntablet?: Tablet\nphone?: Phone\nparameters?: NavigationParameters\nadditionalParameterHandling?: AdditionalParameterHandling\n}\n/**\n * Navigation parameter\n */\nexport interface NavigationParameter {\nname: ParameterName\nrenameTo?: ParameterInTargetApplication\ndefaultValue?: DefaultValue\nfilterValue?: FilterValue\nfilterType?: FilterType\nrequired?: Required\n}\n/**\n * Details of a tile\n */\nexport interface TileDetails {\nid: ID\ntileType: TileType\nisDefault?: IsDefaultTile\nisLegacy?: IsLegacyTile\nstandard?: StandardDetails\ncustom?: CustomDetails\n}\n/**\n * Standard tile details\n */\nexport interface StandardDetails {\nreuseTextFromApp?: ReuseTextFromApplication\ntitle: Title\nsubtitle?: Subtitle\ninformation?: Information\nkeywords?: Keywords\nicon?: Icon\ndynamic?: DynamicTileDetails\ntileNavigationParameters?: TileNavigationParameters\n}\n/**\n * Dynamic tile details\n */\nexport interface DynamicTileDetails {\nserviceBaseUrl?: ServiceURL\nservicePath?: ServicePath\nrefreshInterval?: RefreshInterval\nnumberUnit?: NumberUnit\n}\n/**\n * Tile navigation parameter\n */\nexport interface TileNavigationParameter {\nname: Name1\nvalue?: Value1\n}\n/**\n * Custom tile details\n */\nexport interface CustomDetails {\nbaseChipId?: BaseCHIP\nconfiguration?: Configuration\nbagProperties?: BagProperties\n}\n/**\n * Property of a CHIP bag\n */\nexport interface CHIPBagProperty {\nbagId: BagID\nname: Name2\nvalue?: Value2\ntranslatable?: Translatable\n}\n/**\n * Life cycle\n */\nexport interface LifeCycle {\nstatus?: Status\nsuccessor?: Successor\n}\n\nexport type UiadAff = AffUiadV2;\n","/**\n * Auto-generated from SAP/abap-file-formats JSON schemas.\n * Do not edit — regenerate with `bun scripts/generate-aff-schemas.ts`.\n */\n/**\n * Format version\n */\nexport type FormatVersion = \"1\"\n/**\n * Description of the ABAP object\n */\nexport type Description = string\n/**\n * Original language of the ABAP object\n */\nexport type OriginalLanguage = string\n/**\n * ABAP language version\n */\nexport type ABAPLanguageVersion = (\"standard\" | \"cloudDevelopment\")\n/**\n * Title visible to the enduser\n */\nexport type Title = string\n/**\n * At runtime page templates are merged based on the merge ID\n */\nexport type MergeID = string\n/**\n * Technical ID of the section. The personalization of the launchpad is based on this ID.\n */\nexport type ID = string\n/**\n * Section title on the launchpad UI\n */\nexport type Title1 = string\n/**\n * Technical Id of the visualization. The personalization of the launchpad is based on this ID.\n */\nexport type ID1 = string\n/**\n * Type of application/visualization assignment\n */\nexport type Type = (\"ladiAssignment\" | \"tileAssignment\")\n/**\n * Tile format for UI rendering. May not be applicable for all kinds of visualization.\n */\nexport type DisplayFormat = (\"standard\" | \"wide\" | \"flat\" | \"flatWide\" | \"link\")\n/**\n * Catalog ID\n */\nexport type CatalogID = string\n/**\n * Catalog type\n */\nexport type CatalogType = string\n/**\n * Catalog Item ID\n */\nexport type CatalogItemID = string\n/**\n * Catalog ID\n */\nexport type CatalogID1 = string\n/**\n * Catalog type\n */\nexport type CatalogType1 = string\n/**\n * Catalog Item ID\n */\nexport type CatalogItemID1 = string\n/**\n * ID of a launchpad app descriptor item\n */\nexport type LaunchpadAppDescriptorItemID = string\n/**\n * ID of a tile in the the referenced Launchpad App Descriptor Item\n */\nexport type TileID = string\n/**\n * Visualizations represent applications on the launchpad UI\n */\nexport type Visualizations = Visualization[]\n/**\n * Sections make up a grouping of applications on the launchpad UI\n */\nexport type Sections = Section[]\n\n/**\n * Launchpad page template\n */\nexport interface AffUipgV1 {\nformatVersion: FormatVersion\nheader: Header\ngeneralInformation: GeneralInformation\nsections?: Sections\n}\n/**\n * Header\n */\nexport interface Header {\ndescription: Description\noriginalLanguage: OriginalLanguage\nabapLanguageVersion?: ABAPLanguageVersion\n}\n/**\n * General information\n */\nexport interface GeneralInformation {\ntitle: Title\nmergeId?: MergeID\n}\n/**\n * Sections make up a grouping of applications on the launchpad UI\n */\nexport interface Section {\nid: ID\ntitle?: Title1\nvisualizations?: Visualizations\n}\n/**\n * Visualizations represent applications on the launchpad UI\n */\nexport interface Visualization {\nid: ID1\ntype?: Type\ndisplayFormat?: DisplayFormat\ntileAssignment?: TileAssignment\nladiAssignment?: LaunchpadAppDescriptorItemAssignment\n}\n/**\n * Assignment of a launchpad catalog tile\n */\nexport interface TileAssignment {\ntileKey: TileKey\ntargetMappingKey?: TargetMappingKey\n}\n/**\n * Tile key\n */\nexport interface TileKey {\ncatalogId: CatalogID\ncatalogType?: CatalogType\nid: CatalogItemID\n}\n/**\n * Target mapping key\n */\nexport interface TargetMappingKey {\ncatalogId: CatalogID1\ncatalogType?: CatalogType1\nid: CatalogItemID1\n}\n/**\n * Assignment of a launchpad app descriptor item\n */\nexport interface LaunchpadAppDescriptorItemAssignment {\nladiId: LaunchpadAppDescriptorItemID\ntileId: TileID\n}\n\nexport type UipgAff = AffUipgV1;\n","/**\n * Auto-generated from SAP/abap-file-formats JSON schemas.\n * Do not edit — regenerate with `bun scripts/generate-aff-schemas.ts`.\n */\n/**\n * Format version\n */\nexport type FormatVersion = \"1\"\n/**\n * Description of the ABAP object\n */\nexport type Description = string\n/**\n * Original language of the ABAP object\n */\nexport type OriginalLanguage = string\n/**\n * ABAP language version\n */\nexport type ABAPLanguageVersion = (\"standard\" | \"cloudDevelopment\")\n/**\n * Title on SAP Fiori launchpad\n */\nexport type TitleOnLaunchpad = string\n/**\n * Sort priority\n */\nexport type SortPriority = number\n/**\n * Merge ID\n */\nexport type MergeID = string\n/**\n * Name of the page template\n */\nexport type Name = string\n/**\n * Assigned launchpad page templates\n */\nexport type LaunchpadPageTemplates = LaunchpadPageTemplate[]\n\n/**\n * Launchpad space template\n */\nexport interface AffUistV1 {\nformatVersion: FormatVersion\nheader: Header\ngeneralInformation: GeneralInformation\npages?: LaunchpadPageTemplates\n}\n/**\n * Header\n */\nexport interface Header {\ndescription: Description\noriginalLanguage: OriginalLanguage\nabapLanguageVersion?: ABAPLanguageVersion\n}\n/**\n * General information\n */\nexport interface GeneralInformation {\ntitle: TitleOnLaunchpad\nsortPriority?: SortPriority\nmergeId?: MergeID\n}\n/**\n * Launchpad page template\n */\nexport interface LaunchpadPageTemplate {\nname: Name\n}\n\nexport type UistAff = AffUistV1;\n","/**\n * Auto-generated from SAP/abap-file-formats JSON schemas.\n * Do not edit — regenerate with `bun scripts/generate-aff-schemas.ts`.\n */\n\nexport * as AdvcV1 from './advc-v1.js';\nexport * as AifaV1 from './aifa-v1.js';\nexport * as AifdV1 from './aifd-v1.js';\nexport * as AiffV1 from './aiff-v1.js';\nexport * as AifiV1 from './aifi-v1.js';\nexport * as AifnV1 from './aifn-v1.js';\nexport * as AifpV1 from './aifp-v1.js';\nexport * as AifrV1 from './aifr-v1.js';\nexport * as AobjV1 from './aobj-v1.js';\nexport * as ApicV1 from './apic-v1.js';\nexport * as AploV1 from './aplo-v1.js';\nexport * as ApobV1 from './apob-v1.js';\nexport * as BdefV1 from './bdef-v1.js';\nexport * as BgqcV1 from './bgqc-v1.js';\nexport * as CdboV1 from './cdbo-v1.js';\nexport * as CfdfV1 from './cfdf-v1.js';\nexport * as CfdfV2 from './cfdf-v2.js';\nexport * as ChdoV1 from './chdo-v1.js';\nexport * as ChkcV1 from './chkc-v1.js';\nexport * as ChkoV1 from './chko-v1.js';\nexport * as ChkvV1 from './chkv-v1.js';\nexport * as ClasV1 from './clas-v1.js';\nexport * as CotaV1 from './cota-v1.js';\nexport * as CsnmV1 from './csnm-v1.js';\nexport * as DcatV1 from './dcat-v1.js';\nexport * as DclsV1 from './dcls-v1.js';\nexport * as DdlaV1 from './ddla-v1.js';\nexport * as DdlsV1 from './ddls-v1.js';\nexport * as DdlxV1 from './ddlx-v1.js';\nexport * as DesdV1 from './desd-v1.js';\nexport * as DmonV1 from './dmon-v1.js';\nexport * as DobjV1 from './dobj-v1.js';\nexport * as DocuV1 from './docu-v1.js';\nexport * as DomaV1 from './doma-v1.js';\nexport * as DrasV1 from './dras-v1.js';\nexport * as DrtyV1 from './drty-v1.js';\nexport * as DsfdV1 from './dsfd-v1.js';\nexport * as DsfiV1 from './dsfi-v1.js';\nexport * as DtdcV1 from './dtdc-v1.js';\nexport * as DtebV1 from './dteb-v1.js';\nexport * as DtelV1 from './dtel-v1.js';\nexport * as DtixV1 from './dtix-v1.js';\nexport * as DtscV1 from './dtsc-v1.js';\nexport * as EdccV1 from './edcc-v1.js';\nexport * as EdckV1 from './edck-v1.js';\nexport * as EdcrV1 from './edcr-v1.js';\nexport * as EdoiV1 from './edoi-v1.js';\nexport * as EeecV1 from './eeec-v1.js';\nexport * as EnhoV1 from './enho-v1.js';\nexport * as EnhsV1 from './enhs-v1.js';\nexport * as EnquV1 from './enqu-v1.js';\nexport * as EvtbV1 from './evtb-v1.js';\nexport * as EvtoV1 from './evto-v1.js';\nexport * as FugrV1 from './fugr-v1.js';\nexport * as FuncV1 from './func-v1.js';\nexport * as GsmpV1 from './gsmp-v1.js';\nexport * as HttpV1 from './http-v1.js';\nexport * as IlmbV1 from './ilmb-v1.js';\nexport * as IntfV1 from './intf-v1.js';\nexport * as IntmV1 from './intm-v1.js';\nexport * as IntsV1 from './ints-v1.js';\nexport * as IwngV1 from './iwng-v1.js';\nexport * as MsagV1 from './msag-v1.js';\nexport * as NontV1 from './nont-v1.js';\nexport * as NrobV1 from './nrob-v1.js';\nexport * as NttaV1 from './ntta-v1.js';\nexport * as NttyV1 from './ntty-v1.js';\nexport * as ProgV1 from './prog-v1.js';\nexport * as RepsV1 from './reps-v1.js';\nexport * as RontV1 from './ront-v1.js';\nexport * as RvbcV1 from './rvbc-v1.js';\nexport * as SaiaV1 from './saia-v1.js';\nexport * as SajcV1 from './sajc-v1.js';\nexport * as SajtV1 from './sajt-v1.js';\nexport * as Scp1V1 from './scp1-v1.js';\nexport * as SfpfV1 from './sfpf-v1.js';\nexport * as SiadV1 from './siad-v1.js';\nexport * as SitoV1 from './sito-v1.js';\nexport * as SitoV2 from './sito-v2.js';\nexport * as SmbcV1 from './smbc-v1.js';\nexport * as SmtgV1 from './smtg-v1.js';\nexport * as SprvV1 from './sprv-v1.js';\nexport * as SrvbV1 from './srvb-v1.js';\nexport * as SrvcV1 from './srvc-v1.js';\nexport * as SrvdV1 from './srvd-v1.js';\nexport * as SucoV1 from './suco-v1.js';\nexport * as SusiV1 from './susi-v1.js';\nexport * as SwcrV1 from './swcr-v1.js';\nexport * as SxtgV1 from './sxtg-v1.js';\nexport * as UiadV1 from './uiad-v1.js';\nexport * as UiadV2 from './uiad-v2.js';\nexport * as UipgV1 from './uipg-v1.js';\nexport * as UistV1 from './uist-v1.js';\n\n// Flat {Type}Aff aliases — latest version per type (handler imports).\nexport type { AdvcAff } from './advc-v1.js';\nexport type { AifaAff } from './aifa-v1.js';\nexport type { AifdAff } from './aifd-v1.js';\nexport type { AiffAff } from './aiff-v1.js';\nexport type { AifiAff } from './aifi-v1.js';\nexport type { AifnAff } from './aifn-v1.js';\nexport type { AifpAff } from './aifp-v1.js';\nexport type { AifrAff } from './aifr-v1.js';\nexport type { AobjAff } from './aobj-v1.js';\nexport type { ApicAff } from './apic-v1.js';\nexport type { AploAff } from './aplo-v1.js';\nexport type { ApobAff } from './apob-v1.js';\nexport type { BdefAff } from './bdef-v1.js';\nexport type { BgqcAff } from './bgqc-v1.js';\nexport type { CdboAff } from './cdbo-v1.js';\nexport type { CfdfAff } from './cfdf-v2.js';\nexport type { ChdoAff } from './chdo-v1.js';\nexport type { ChkcAff } from './chkc-v1.js';\nexport type { ChkoAff } from './chko-v1.js';\nexport type { ChkvAff } from './chkv-v1.js';\nexport type { ClasAff } from './clas-v1.js';\nexport type { CotaAff } from './cota-v1.js';\nexport type { CsnmAff } from './csnm-v1.js';\nexport type { DcatAff } from './dcat-v1.js';\nexport type { DclsAff } from './dcls-v1.js';\nexport type { DdlaAff } from './ddla-v1.js';\nexport type { DdlsAff } from './ddls-v1.js';\nexport type { DdlxAff } from './ddlx-v1.js';\nexport type { DesdAff } from './desd-v1.js';\nexport type { DmonAff } from './dmon-v1.js';\nexport type { DobjAff } from './dobj-v1.js';\nexport type { DocuAff } from './docu-v1.js';\nexport type { DomaAff } from './doma-v1.js';\nexport type { DrasAff } from './dras-v1.js';\nexport type { DrtyAff } from './drty-v1.js';\nexport type { DsfdAff } from './dsfd-v1.js';\nexport type { DsfiAff } from './dsfi-v1.js';\nexport type { DtdcAff } from './dtdc-v1.js';\nexport type { DtebAff } from './dteb-v1.js';\nexport type { DtelAff } from './dtel-v1.js';\nexport type { DtixAff } from './dtix-v1.js';\nexport type { DtscAff } from './dtsc-v1.js';\nexport type { EdccAff } from './edcc-v1.js';\nexport type { EdckAff } from './edck-v1.js';\nexport type { EdcrAff } from './edcr-v1.js';\nexport type { EdoiAff } from './edoi-v1.js';\nexport type { EeecAff } from './eeec-v1.js';\nexport type { EnhoAff } from './enho-v1.js';\nexport type { EnhsAff } from './enhs-v1.js';\nexport type { EnquAff } from './enqu-v1.js';\nexport type { EvtbAff } from './evtb-v1.js';\nexport type { EvtoAff } from './evto-v1.js';\nexport type { FugrAff } from './fugr-v1.js';\nexport type { FuncAff } from './func-v1.js';\nexport type { GsmpAff } from './gsmp-v1.js';\nexport type { HttpAff } from './http-v1.js';\nexport type { IlmbAff } from './ilmb-v1.js';\nexport type { IntfAff } from './intf-v1.js';\nexport type { IntmAff } from './intm-v1.js';\nexport type { IntsAff } from './ints-v1.js';\nexport type { IwngAff } from './iwng-v1.js';\nexport type { MsagAff } from './msag-v1.js';\nexport type { NontAff } from './nont-v1.js';\nexport type { NrobAff } from './nrob-v1.js';\nexport type { NttaAff } from './ntta-v1.js';\nexport type { NttyAff } from './ntty-v1.js';\nexport type { ProgAff } from './prog-v1.js';\nexport type { RepsAff } from './reps-v1.js';\nexport type { RontAff } from './ront-v1.js';\nexport type { RvbcAff } from './rvbc-v1.js';\nexport type { SaiaAff } from './saia-v1.js';\nexport type { SajcAff } from './sajc-v1.js';\nexport type { SajtAff } from './sajt-v1.js';\nexport type { Scp1Aff } from './scp1-v1.js';\nexport type { SfpfAff } from './sfpf-v1.js';\nexport type { SiadAff } from './siad-v1.js';\nexport type { SitoAff } from './sito-v2.js';\nexport type { SmbcAff } from './smbc-v1.js';\nexport type { SmtgAff } from './smtg-v1.js';\nexport type { SprvAff } from './sprv-v1.js';\nexport type { SrvbAff } from './srvb-v1.js';\nexport type { SrvcAff } from './srvc-v1.js';\nexport type { SrvdAff } from './srvd-v1.js';\nexport type { SucoAff } from './suco-v1.js';\nexport type { SusiAff } from './susi-v1.js';\nexport type { SwcrAff } from './swcr-v1.js';\nexport type { SxtgAff } from './sxtg-v1.js';\nexport type { UiadAff } from './uiad-v2.js';\nexport type { UipgAff } from './uipg-v1.js';\nexport type { UistAff } from './uist-v1.js';\n","/**\n * @abapify/adt-plugin-gcts — gCTS / AFF format plugin entry point.\n *\n * Importing this module self-registers the plugin into the global\n * `FormatPlugin` registry so that `--format gcts` becomes available\n * throughout the `adt` CLI.\n */\n\nimport { registerFormatPlugin } from '@abapify/adt-plugin';\nimport { gctsFormatPlugin } from './lib/format/gcts-format';\n\n// Self-register on module load. Idempotent — safe against dual module-graph\n// evaluation (the same guard abapGit uses).\nregisterFormatPlugin(gctsFormatPlugin);\n\n// Register 'aff' as an alias for the same plugin so `getFormatPlugin('aff')`\n// resolves to the gCTS/AFF plugin (both ids share the same on-disk layout).\nregisterFormatPlugin({ ...gctsFormatPlugin, id: 'aff' });\n\n// FormatPlugin — preferred public entry-point.\nexport { gctsFormatPlugin } from './lib/format/gcts-format';\n\n// AdtPlugin — needed for dynamic-import code paths in adt-cli.\nexport { gctsPlugin, GctsPlugin } from './lib/gcts-plugin';\nexport { gctsPlugin as default } from './lib/gcts-plugin';\n\n// Handler utilities\nexport {\n getHandler,\n getSupportedTypes,\n isSupported,\n createHandler,\n} from './lib/handlers/base';\nexport type {\n GctsHandler,\n GctsHandlerDefinition,\n GctsSourceEntry,\n} from './lib/handlers/base';\n\n// Filename utilities\nexport {\n gctsFilename,\n gctsSourceExt,\n parseGctsFilename,\n adtUriToGctsPath,\n sourceKey,\n splitSourceKey,\n LIMU_SUBTYPES,\n PACKAGE_FILENAME,\n METADATA_EXTENSION,\n} from './lib/format/filename';\n\n// AFF schema access + validation over the git_modules submodule\nexport {\n affRoot,\n listAffTypes,\n affVersions,\n latestAffVersion,\n affSchema,\n affBodyProps,\n affValidate,\n affExamples,\n schemaTargetForExample,\n readAffExample,\n} from './lib/aff/schemas';\nexport type { AffRef } from './lib/aff/schemas';\n\n// Generated typed AFF models — AffGenerated.{Type}V{n}.{RootInterface}\nexport * as AffGenerated from './schemas/generated';\n\n// Type re-exports\nexport type { GctsMetadata, GctsHeader, WithHeader } from './lib/format/types';\nexport type {\n AdtPlugin,\n FormatPlugin,\n FormatHandler,\n SerializedFile,\n} from '@abapify/adt-plugin';\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.mjs","names":[],"sources":["../src/lib/format/filename.ts","../src/lib/aff/schemas.ts","../src/lib/aff/generic.ts","../src/lib/handlers/base.ts","../src/lib/handlers/objects/clas.ts","../src/lib/handlers/objects/intf.ts","../src/lib/handlers/objects/prog.ts","../src/lib/handlers/objects/devc.ts","../src/lib/handlers/objects/doma.ts","../src/lib/handlers/objects/dtel.ts","../src/lib/handlers/objects/tabl.ts","../src/lib/handlers/objects/ttyp.ts","../src/lib/handlers/objects/fugr.ts","../src/lib/handlers/objects/ddls.ts","../src/lib/handlers/objects/dcls.ts","../src/lib/handlers/objects/bdef.ts","../src/lib/handlers/objects/srvd.ts","../src/lib/handlers/objects/srvb.ts","../src/lib/handlers/objects/msag.ts","../src/lib/handlers/objects/wave2-generic.ts","../src/lib/format/gcts-format.ts","../src/lib/deserializer.ts","../src/lib/gcts-plugin.ts","../src/schemas/generated/advc-v1.ts","../src/schemas/generated/aifa-v1.ts","../src/schemas/generated/aifd-v1.ts","../src/schemas/generated/aiff-v1.ts","../src/schemas/generated/aifi-v1.ts","../src/schemas/generated/aifn-v1.ts","../src/schemas/generated/aifp-v1.ts","../src/schemas/generated/aifr-v1.ts","../src/schemas/generated/aobj-v1.ts","../src/schemas/generated/apic-v1.ts","../src/schemas/generated/aplo-v1.ts","../src/schemas/generated/apob-v1.ts","../src/schemas/generated/bdef-v1.ts","../src/schemas/generated/bgqc-v1.ts","../src/schemas/generated/cdbo-v1.ts","../src/schemas/generated/cfdf-v1.ts","../src/schemas/generated/cfdf-v2.ts","../src/schemas/generated/chdo-v1.ts","../src/schemas/generated/chkc-v1.ts","../src/schemas/generated/chko-v1.ts","../src/schemas/generated/chkv-v1.ts","../src/schemas/generated/clas-v1.ts","../src/schemas/generated/cota-v1.ts","../src/schemas/generated/csnm-v1.ts","../src/schemas/generated/dcat-v1.ts","../src/schemas/generated/dcls-v1.ts","../src/schemas/generated/ddla-v1.ts","../src/schemas/generated/ddls-v1.ts","../src/schemas/generated/ddlx-v1.ts","../src/schemas/generated/desd-v1.ts","../src/schemas/generated/dmon-v1.ts","../src/schemas/generated/dobj-v1.ts","../src/schemas/generated/docu-v1.ts","../src/schemas/generated/doma-v1.ts","../src/schemas/generated/dras-v1.ts","../src/schemas/generated/drty-v1.ts","../src/schemas/generated/dsfd-v1.ts","../src/schemas/generated/dsfi-v1.ts","../src/schemas/generated/dtdc-v1.ts","../src/schemas/generated/dteb-v1.ts","../src/schemas/generated/dtel-v1.ts","../src/schemas/generated/dtix-v1.ts","../src/schemas/generated/dtsc-v1.ts","../src/schemas/generated/edcc-v1.ts","../src/schemas/generated/edck-v1.ts","../src/schemas/generated/edcr-v1.ts","../src/schemas/generated/edoi-v1.ts","../src/schemas/generated/eeec-v1.ts","../src/schemas/generated/enho-v1.ts","../src/schemas/generated/enhs-v1.ts","../src/schemas/generated/enqu-v1.ts","../src/schemas/generated/evtb-v1.ts","../src/schemas/generated/evto-v1.ts","../src/schemas/generated/fugr-v1.ts","../src/schemas/generated/func-v1.ts","../src/schemas/generated/gsmp-v1.ts","../src/schemas/generated/http-v1.ts","../src/schemas/generated/ilmb-v1.ts","../src/schemas/generated/intf-v1.ts","../src/schemas/generated/intm-v1.ts","../src/schemas/generated/ints-v1.ts","../src/schemas/generated/iwng-v1.ts","../src/schemas/generated/msag-v1.ts","../src/schemas/generated/nont-v1.ts","../src/schemas/generated/nrob-v1.ts","../src/schemas/generated/ntta-v1.ts","../src/schemas/generated/ntty-v1.ts","../src/schemas/generated/prog-v1.ts","../src/schemas/generated/reps-v1.ts","../src/schemas/generated/ront-v1.ts","../src/schemas/generated/rvbc-v1.ts","../src/schemas/generated/saia-v1.ts","../src/schemas/generated/sajc-v1.ts","../src/schemas/generated/sajt-v1.ts","../src/schemas/generated/scp1-v1.ts","../src/schemas/generated/sfpf-v1.ts","../src/schemas/generated/siad-v1.ts","../src/schemas/generated/sito-v1.ts","../src/schemas/generated/sito-v2.ts","../src/schemas/generated/smbc-v1.ts","../src/schemas/generated/smtg-v1.ts","../src/schemas/generated/sprv-v1.ts","../src/schemas/generated/srvb-v1.ts","../src/schemas/generated/srvc-v1.ts","../src/schemas/generated/srvd-v1.ts","../src/schemas/generated/suco-v1.ts","../src/schemas/generated/susi-v1.ts","../src/schemas/generated/swcr-v1.ts","../src/schemas/generated/sxtg-v1.ts","../src/schemas/generated/uiad-v1.ts","../src/schemas/generated/uiad-v2.ts","../src/schemas/generated/uipg-v1.ts","../src/schemas/generated/uist-v1.ts","../src/schemas/generated/index.ts","../src/index.ts"],"sourcesContent":["/**\n * gCTS / AFF filename conventions.\n *\n * gCTS and AFF both use the pattern `<name>.<type>.<ext>` (same as abapGit),\n * but with JSON for metadata instead of XML and with CDS-specific\n * extensions (`.acds`, `.asddls`, ...) for CDS sources.\n *\n * Packages use a fixed `package.devc.json` filename (mirrors abapGit's\n * `package.devc.xml`).\n *\n * This module is independent of any particular handler — it exists so that\n * consumers (diff, round-trip tests, deserializers) can map filenames to\n * (name, type) pairs without pulling in the object-type registry.\n */\n\nimport type { ParsedFormatFilename } from '@abapify/adt-plugin';\n\n/**\n * Extension used for the source-file part of each object type.\n *\n * Order of precedence: CDS types use AFF's `.asddls` / `.asdcls`; everything\n * else uses `.abap`. Metadata is always `.json`.\n */\nconst TYPE_TO_SOURCE_EXT: Record<string, string> = {\n CLAS: 'abap',\n INTF: 'abap',\n PROG: 'abap',\n FUGR: 'abap',\n FUNC: 'abap',\n DDLS: 'asddls',\n DCLS: 'asdcls',\n BDEF: 'abdl',\n SRVD: 'acds',\n // AFF-`.acds` CDS-family sources (upstream examples are uniform:\n // `<name>.<type>.acds` for every CDS-bearing type).\n DDLA: 'acds',\n DDLX: 'acds',\n DTSC: 'acds',\n DTIX: 'acds',\n DTEB: 'acds',\n DTDC: 'acds',\n DRAS: 'acds',\n DRTY: 'acds',\n DSFD: 'acds',\n CSNM: 'csn',\n SFPF: 'xdp',\n XSLT: 'xml',\n};\n\n/** Metadata extension for all AFF/gCTS objects. */\nexport const METADATA_EXTENSION = 'json';\n\n/** Fixed filename for package metadata (AFF / gCTS convention). */\nexport const PACKAGE_FILENAME = 'package.devc.json';\n\n/**\n * AFF filename-safe form of an object name: namespaces encode as brackets\n * (`/NMSPC/CL_OBJECT` → `(nmspc)cl_object`, AFF spec §file-names) so a\n * `/` in the name can never split the file into nested directories.\n */\nexport function affName(name: string): string {\n return name.toLowerCase().replace(/^\\/([^/]+)\\//, '($1)');\n}\n\n/**\n * Build the AFF/gCTS on-disk filename for an object.\n *\n * @param name Object name (case preserved — AFF normalises to lowercase)\n * @param type ABAP object type code (CLAS, INTF, ...)\n * @param kind `\"metadata\"` (default) or `\"source\"`.\n * @param suffix Optional sub-include suffix (e.g. `locals_def` for CLAS,\n * or `z_func.func` for a LIMU sub-object).\n * @param ext Source-file extension override — defaults to the type's\n * extension (`abap`, `acds`, …). Needed for companions whose\n * extension differs from the type's main source (`.json`\n * LIMU metadata, `.properties` texts).\n */\nexport function gctsFilename(\n name: string,\n type: string,\n kind: 'metadata' | 'source' = 'metadata',\n suffix?: string,\n ext?: string,\n): string {\n const base = affName(name);\n const typeLower = mainType(type).toLowerCase();\n if (kind === 'metadata') {\n return `${base}.${typeLower}.${METADATA_EXTENSION}`;\n }\n const sourceExt =\n ext ?? TYPE_TO_SOURCE_EXT[mainType(type).toUpperCase()] ?? 'abap';\n return suffix\n ? `${base}.${typeLower}.${suffix}.${sourceExt}`\n : `${base}.${typeLower}.${sourceExt}`;\n}\n\n/**\n * LIMU sub-object type codes (AFF spec §file-names): they never appear as\n * root objects — a `{parent}.{ptype}.{sub}.{stype}.{ext}` filename routes to\n * the parent object with `{sub}.{stype}` as its suffix.\n */\nexport const LIMU_SUBTYPES = new Set([\n 'func',\n 'reps',\n 'cpub',\n 'cpro',\n 'cprt',\n 'cpri',\n 'sotr',\n 'sotu',\n]);\n\n/**\n * The default source-file extension for an object type (`abap` fallback) —\n * used to decide whether a source-key suffix carries an explicit extension.\n */\nexport function gctsSourceExt(type: string): string {\n return TYPE_TO_SOURCE_EXT[mainType(type).toUpperCase()] ?? 'abap';\n}\n\n/** Source/companion extensions recognised by the spec file-name grammar. */\nconst KNOWN_SOURCE_EXTS = new Set([\n 'abap',\n 'asddls',\n 'asdcls',\n 'abdl',\n 'acds',\n 'csn',\n 'xdp',\n 'ddic',\n 'properties',\n 'xml',\n]);\n\n/** Every file extension the spec grammar can carry after the suffix. */\nconst KNOWN_FILE_EXTS = new Set([...KNOWN_SOURCE_EXTS, METADATA_EXTENSION]);\n\n/**\n * Encode a companion file as a source-map key: bare `suffix` when the file\n * uses the type's default source extension, `{suffix}.{ext}` when it does\n * not (e.g. `z_func.func.json` → LIMU metadata, `texts.en.properties` →\n * translated texts). Symmetric with `splitSourceKey`.\n */\nexport function sourceKey(type: string, suffix: string, ext: string): string {\n return !ext || ext === gctsSourceExt(type) ? suffix : `${suffix}.${ext}`;\n}\n\n/**\n * Inverse of `sourceKey`: splits a source-map key into the filename suffix\n * and an optional extension override (`undefined` → the type's default).\n */\nexport function splitSourceKey(key: string): {\n suffix?: string;\n ext?: string;\n} {\n if (key === 'main') return { suffix: undefined, ext: undefined };\n // Suffix-less companions with a non-default extension key as\n // `main.{ext}` (e.g. master texts `name.prog.properties`).\n if (key.startsWith('main.')) {\n const tail = key.slice(5);\n if (KNOWN_FILE_EXTS.has(tail)) return { suffix: undefined, ext: tail };\n }\n const dot = key.lastIndexOf('.');\n if (dot > 0 && KNOWN_FILE_EXTS.has(key.slice(dot + 1))) {\n return { suffix: key.slice(0, dot), ext: key.slice(dot + 1) };\n }\n return { suffix: key, ext: undefined };\n}\n\n/**\n * Parse an AFF/gCTS filename back into its components.\n *\n * Returns `undefined` if the filename does not look like a known AFF/gCTS\n * artefact — callers should skip unknown files (e.g. `README.md`).\n */\nexport function parseGctsFilename(\n filename: string,\n): ParsedFormatFilename | undefined {\n // Fixed package filename.\n if (filename === PACKAGE_FILENAME) {\n return { name: '', type: 'DEVC', extension: METADATA_EXTENSION };\n }\n\n const parts = filename.split('.');\n if (parts.length < 3) return undefined;\n\n const extension = parts.at(-1)!;\n if (extension === METADATA_EXTENSION) return parseMetadataName(parts);\n if (extension === 'properties') return parsePropertiesName(parts);\n return parseSourceName(parts, extension);\n}\n\n/**\n * `{name}.{type}.json`, plus the DOCU companion form\n * `{name}.{type}.docu.json` which belongs to the parent object.\n */\nfunction parseMetadataName(parts: string[]): ParsedFormatFilename {\n const docu = parts.at(-2) === 'docu' && parts.length >= 4;\n // `{parent}.{ptype}.{sub}.{stype}.json` — LIMU sub-object metadata is a\n // companion of the parent (`z_fugr.fugr.z_func.func.json`).\n const limu = parts.length >= 5 && LIMU_SUBTYPES.has(parts.at(-2)!);\n let offset = -2;\n if (docu) offset = -3;\n else if (limu) offset = -4;\n const parsed: ParsedFormatFilename = {\n name: parts.slice(0, offset).join('.'),\n type: parts.at(offset)!.toUpperCase(),\n extension: METADATA_EXTENSION,\n };\n if (docu) parsed.suffix = 'docu';\n else if (limu) parsed.suffix = `${parts.at(-3)}.${parts.at(-2)}`;\n return parsed;\n}\n\n/**\n * `.properties` text files have their own grammar:\n * {name}.{type}.properties — master (3 parts)\n * {name}.{type}.{lang}.properties — language (4 parts)\n * {name}.{type}.{content_type}.{lang}.properties — e.g. PROG\n * selections/headings/texts (5 parts)\n * The composite suffix (`de`, `texts.en`) stays opaque — handlers map\n * suffixes to source keys via `suffixToSourceKey`.\n */\nfunction parsePropertiesName(parts: string[]): ParsedFormatFilename {\n if (parts.length >= 5) {\n return {\n name: parts.slice(0, -4).join('.'),\n type: parts.at(-4)!.toUpperCase(),\n suffix: `${parts.at(-3)}.${parts.at(-2)}`,\n extension: 'properties',\n };\n }\n if (parts.length === 4) {\n return {\n name: parts.slice(0, -3).join('.'),\n type: parts.at(-3)!.toUpperCase(),\n suffix: parts.at(-2),\n extension: 'properties',\n };\n }\n return {\n name: parts.slice(0, -2).join('.'),\n type: parts.at(-2)!.toUpperCase(),\n extension: 'properties',\n };\n}\n\n/**\n * `{name}.{type}.{ext}` and `{name}.{type}.{suffix}.{ext}` source files —\n * a suffix is present iff there are ≥4 dot-segments.\n */\nfunction parseSourceName(\n parts: string[],\n extension: string,\n): ParsedFormatFilename | undefined {\n if (!KNOWN_SOURCE_EXTS.has(extension)) return undefined;\n // LIMU sub-object source: `{parent}.{ptype}.{sub}.{stype}.{ext}` —\n // the suffix carries `{sub}.{stype}` (e.g. `z_func.func`).\n if (parts.length >= 5 && LIMU_SUBTYPES.has(parts.at(-2)!)) {\n return {\n name: parts.slice(0, -4).join('.'),\n type: parts.at(-4)!.toUpperCase(),\n suffix: `${parts.at(-3)}.${parts.at(-2)}`,\n extension,\n };\n }\n if (parts.length >= 4) {\n return {\n name: parts.slice(0, -3).join('.'),\n type: parts.at(-3)!.toUpperCase(),\n suffix: parts.at(-2),\n extension,\n };\n }\n return {\n name: parts.slice(0, -2).join('.'),\n type: parts.at(-2)!.toUpperCase(),\n extension,\n };\n}\n\n/**\n * Translate an ADT object URI (e.g. `/sap/bc/adt/oo/classes/zcl_foo`) to\n * the AFF/gCTS on-disk path (e.g. `zcl_foo/zcl_foo.clas.json`).\n *\n * Matches the `adtUriToAbapGitPath` helper in the abapGit plugin.\n */\nexport function adtUriToGctsPath(uri: string): string | undefined {\n const ADT_PREFIX = '/sap/bc/adt/';\n if (!uri.startsWith(ADT_PREFIX)) return undefined;\n const tail = uri.slice(ADT_PREFIX.length);\n if (tail.length === 0) return undefined;\n\n // Common ADT URI → (type, name) table. Mirrors abapGit's mapping.\n const TABLE: Array<[RegExp, string]> = [\n [/^oo\\/classes\\/([^/]+)$/, 'CLAS'],\n [/^oo\\/interfaces\\/([^/]+)$/, 'INTF'],\n [/^programs\\/programs\\/([^/]+)$/, 'PROG'],\n [/^functions\\/groups\\/([^/]+)$/, 'FUGR'],\n [/^packages\\/([^/]+)$/, 'DEVC'],\n [/^ddic\\/domains\\/([^/]+)$/, 'DOMA'],\n [/^ddic\\/dataelements\\/([^/]+)$/, 'DTEL'],\n [/^ddic\\/structures\\/([^/]+)$/, 'TABL'],\n [/^ddic\\/tables\\/([^/]+)$/, 'TABL'],\n [/^ddic\\/tabletypes\\/([^/]+)$/, 'TTYP'],\n [/^ddic\\/ddl\\/sources\\/([^/]+)$/, 'DDLS'],\n [/^acm\\/dcls\\/sources\\/([^/]+)$/, 'DCLS'],\n ];\n\n for (const [pattern, type] of TABLE) {\n const m = pattern.exec(tail);\n if (m) {\n const name = m[1];\n if (type === 'DEVC') return `${name.toLowerCase()}/${PACKAGE_FILENAME}`;\n return `${name.toLowerCase()}/${gctsFilename(name, type)}`;\n }\n }\n\n return undefined;\n}\n\nfunction mainType(type: string): string {\n return type.split('/')[0];\n}\n","/**\n * AFF schema access over the `git_modules/abap-file-formats` submodule.\n *\n * The submodule pin (`.gitmodules`) is the provenance record — schemas and\n * examples are always read from it at the pinned upstream SHA. This module\n * has no workspace dependencies (ajv + node builtins only) so schema\n * conformance tests run without building the workspace.\n */\n\nimport { existsSync, readFileSync, readdirSync } from 'node:fs';\nimport { dirname, join, resolve, sep } from 'node:path';\nimport { fileURLToPath } from 'node:url';\nimport Ajv2020 from 'ajv/dist/2020.js';\nimport type { ValidateFunction } from 'ajv';\n\nconst SCHEMA_RE = /^([a-z0-9]+)-v(\\d+)\\.json$/;\n\n/**\n * Locate the AFF schema root. Published packages ship only `dist`, so the\n * bundled `aff-schemas/` copy (produced by the build) is tried first; the\n * `git_modules` submodule is the dev fallback. Returns `undefined` when\n * neither exists — callers degrade gracefully instead of breaking plugin\n * load on installs that lack the submodule.\n */\nfunction findAffRoot(): string | undefined {\n let dir = dirname(fileURLToPath(import.meta.url));\n for (let i = 0; i < 10; i++) {\n const bundled = join(dir, 'aff-schemas');\n if (existsSync(bundled)) return bundled;\n const submodule = join(dir, 'git_modules/abap-file-formats/file-formats');\n if (existsSync(submodule)) return submodule;\n dir = dirname(dir);\n }\n return undefined;\n}\n\nlet rootCache: string | undefined | null;\n/** Resolved AFF schema root, or `undefined` when unavailable. */\nexport function affRoot(): string | undefined {\n if (rootCache === undefined) rootCache = findAffRoot() ?? null;\n return rootCache ?? undefined;\n}\n\n/** All official AFF object types (directories in `file-formats/`). */\nexport function listAffTypes(): string[] {\n const root = affRoot();\n // nosemgrep\n return root\n ? readdirSync(root, { withFileTypes: true })\n .filter((e) => e.isDirectory())\n .map((e) => e.name)\n .sort((a, b) => a.localeCompare(b))\n : [];\n}\n\n/**\n * Reference to a schema-bearing AFF artefact: an object `type` code plus an\n * optional format `version` (defaults to the latest wherever it matters).\n */\nexport interface AffRef {\n type: string;\n version?: number;\n}\n\n/** Format versions available for a type, newest first. */\nexport function affVersions(ref: AffRef): number[] {\n const type = ref.type.toLowerCase();\n const root = affRoot();\n if (!root) return [];\n const dir = join(root, type);\n // nosemgrep\n const scoped = existsSync(dir) ? readdirSync(dir) : [];\n // Root-level loose schemas (`docu-v1.json`, shared `zif_aff_*` types)\n // nosemgrep\n const loose = readdirSync(root);\n // LIMU sub-object schemas nest under their parent's dir\n // (`fugr/func-v1.json`, `fugr/reps-v1.json`)\n const nested = readdirSync(root, { withFileTypes: true })\n .filter((e) => e.isDirectory() && e.name !== type)\n .flatMap((e) => {\n // nosemgrep\n try {\n return readdirSync(join(root, e.name));\n } catch {\n return [];\n }\n });\n return [\n ...new Set(\n [...scoped, ...loose, ...nested]\n .map((f) => SCHEMA_RE.exec(f))\n .filter((m): m is RegExpExecArray => !!m && m[1] === type)\n .map((m) => Number(m[2])),\n ),\n ].sort((a, b) => b - a);\n}\n\nexport function latestAffVersion(ref: AffRef): number | undefined {\n return affVersions(ref)[0];\n}\n\ninterface AffSchema {\n title: string;\n type: string;\n properties: Record<string, { const?: string; type?: string }>;\n required?: string[];\n [key: string]: unknown;\n}\n\ninterface SchemaQuery {\n root: string;\n type: string;\n version: number;\n}\n\n/** `<root>/<type>/<type>-vN.json` or root-level `<type>-vN.json` (docu). */\nfunction directSchemaFile(q: SchemaQuery): string | undefined {\n const stem = `${q.type}-v${q.version}.json`;\n for (const file of [join(q.root, q.type, stem), join(q.root, stem)]) {\n // nosemgrep\n if (existsSync(file)) return file;\n }\n return undefined;\n}\n\n/** LIMU sub-object schemas nest under their parent's dir (`fugr/func-v1.json`). */\nfunction nestedSchemaFile(q: SchemaQuery): string | undefined {\n for (const dir of listAffTypes()) {\n if (dir === q.type) continue;\n // nosemgrep\n const file = join(q.root, dir, `${q.type}-v${q.version}.json`);\n // nosemgrep\n if (existsSync(file)) return file;\n }\n return undefined;\n}\n\n/** First existing candidate path for a type+version schema, or none. */\nfunction findSchemaFile(q: SchemaQuery): string | undefined {\n return directSchemaFile(q) ?? nestedSchemaFile(q);\n}\n\nexport function affSchema(ref: AffRef): AffSchema {\n const type = ref.type.toLowerCase();\n const version = ref.version ?? latestAffVersion({ ...ref, type });\n if (!version) throw new Error(`No AFF schema for ${type}`);\n const root = affRoot();\n if (!root) throw new Error(`No AFF schema root available for ${type}`);\n const file = findSchemaFile({ root, type, version });\n if (!file) throw new Error(`No AFF schema ${type}-v${version} under ${root}`);\n // nosemgrep\n return JSON.parse(readFileSync(file, 'utf8')) as AffSchema;\n}\n\n/**\n * Top-level body properties of a type's schema (everything beyond the\n * mandatory `formatVersion`/`header` envelope), newest version by default.\n * Empty array for header-only types or when schemas are unavailable.\n */\nexport function affBodyProps(ref: AffRef): string[] {\n let schema: AffSchema;\n try {\n schema = affSchema(ref);\n } catch (error) {\n // Missing schemas degrade gracefully (plugin load must not break on\n // installs without the submodule); a corrupt schema file is a bug —\n // let it throw rather than silently dropping every body field.\n if (error instanceof Error && error.message.startsWith('No AFF schema'))\n return [];\n throw error;\n }\n return Object.keys(schema.properties ?? {}).filter(\n (p) => p !== 'formatVersion' && p !== 'header',\n );\n}\n\nexport function affHeaderProps(ref: AffRef): string[] {\n let schema: AffSchema;\n try {\n schema = affSchema(ref);\n } catch (error) {\n if (error instanceof Error && error.message.startsWith('No AFF schema'))\n return [];\n throw error;\n }\n const header = (schema.properties ?? {}).header;\n return Object.keys(\n header && typeof header === 'object' && header.properties\n ? header.properties\n : {},\n );\n}\n\nconst ajv = new Ajv2020({ allErrors: true, strict: false });\nconst validators = new Map<string, ValidateFunction>();\n\n/** Resolve a usable schema version, or `undefined` when none exists. */\nfunction resolveAffVersion(type: string, v?: number): number | undefined {\n const resolved = v ?? latestAffVersion({ type });\n return resolved !== undefined && Number.isInteger(resolved) && resolved > 0\n ? resolved\n : undefined;\n}\n\n/** Compile (and cache) the AJV validator for a type+version. */\nfunction getValidator(\n type: string,\n version: number,\n): { validator?: ValidateFunction; error?: string } {\n const key = `${type}-v${version}`;\n const cached = validators.get(key);\n if (cached) return { validator: cached };\n try {\n const validator = ajv.compile(affSchema({ type, version }));\n validators.set(key, validator);\n return { validator };\n } catch (e) {\n return { error: e instanceof Error ? e.message : String(e) };\n }\n}\n\n/** Validate AFF JSON against the official schema for `ref`. */\nexport function affValidate(\n ref: AffRef,\n json: unknown,\n): { valid: boolean; errors: string[] } {\n const type = ref.type.toLowerCase();\n const v = resolveAffVersion(type, ref.version);\n if (v === undefined) {\n return { valid: false, errors: [`No AFF schema for type \"${type}\"`] };\n }\n const { validator, error } = getValidator(type, v);\n if (!validator) {\n return { valid: false, errors: [error ?? 'schema compile failed'] };\n }\n const valid = validator(json);\n return {\n valid: !!valid,\n errors: (validator.errors ?? []).map((e) =>\n `${e.instancePath} ${e.message ?? ''}`.trim(),\n ),\n };\n}\n\n/**\n * Example JSON files shipped with a type — recursively, relative paths.\n * Companion files (`.docu.json`, LIMU sub-objects like `.reps.json`) are\n * included; callers match each to its schema (see `schemaTargetForExample`).\n */\nexport function affExamples(ref: AffRef): string[] {\n const root = affRoot();\n if (!root) return [];\n const dir = join(root, ref.type.toLowerCase(), 'examples');\n if (!existsSync(dir)) return [];\n const out: string[] = [];\n const walk = (sub: string): void => {\n // nosemgrep\n for (const e of readdirSync(join(dir, sub), { withFileTypes: true })) {\n const rel = sub ? `${sub}/${e.name}` : e.name;\n if (e.isDirectory()) walk(rel);\n else if (e.name.endsWith('.json')) out.push(rel);\n }\n };\n walk('');\n return out.sort((a, b) => a.localeCompare(b));\n}\n\n/** LIMU sub-object document suffix → schema type (nested under parent dir). */\nconst LIMU_SUB_SCHEMA = /\\.(reps|sotr|sotu|cpub|cpro|cprt|cpri|func)\\.json$/i;\n\n/**\n * Pick the schema a given example file should validate against.\n *\n * - `z_x.doma.docu.json` → the `docu` schema (companion documentation)\n * - `x.fugr.z_fm.func.json` / `x.fugr.y.reps.json` → the LIMU\n * sub-object's own schema (nested under the parent type dir)\n * - otherwise → the type's own schema at the example's `formatVersion`\n */\nexport function schemaTargetForExample(\n ref: AffRef,\n filename: string,\n json: unknown,\n): { type: string; version?: number; companion: boolean } {\n if (/\\.docu\\.json$/i.test(filename) && affVersions({ type: 'docu' }).length)\n return { type: 'docu', companion: true };\n const declared = (json as { formatVersion?: string | number } | undefined)\n ?.formatVersion;\n const version = declared !== undefined ? Number(declared) : undefined;\n const limu = LIMU_SUB_SCHEMA.exec(filename)?.[1]?.toLowerCase();\n if (limu && affVersions({ type: limu }).length)\n return { type: limu, version, companion: true };\n return { type: ref.type, version, companion: false };\n}\n\nexport function readAffExample(\n ref: AffRef,\n rel: string,\n): Record<string, unknown> {\n const root = affRoot();\n if (!root) throw new Error('No AFF schema root available');\n const examplesDir = resolve(root, ref.type.toLowerCase(), 'examples');\n const file = resolve(examplesDir, rel);\n if (file !== examplesDir && !file.startsWith(examplesDir + sep)) {\n throw new Error(`Example path escapes examples dir: ${rel}`);\n }\n // nosemgrep\n return JSON.parse(readFileSync(file, 'utf8')) as Record<string, unknown>;\n}\n","/**\n * Schema-aware generic AFF emit/parse — zero workspace deps.\n *\n * `genericToMetadata` builds the `{formatVersion, header}` envelope for a\n * type (version pinned to its latest schema) plus only the schema-\n * declared top-level body properties the payload carries — arbitrary\n * payload fields are NOT copied. `genericFromMetadata` is its inverse:\n * header → ADK projection, body fields spread into the payload so they\n * land back on `obj.data` — enabling metadata round-trips for all\n * wave2-registered types.\n */\n\nimport { affBodyProps, affHeaderProps, latestAffVersion } from './schemas';\nimport { splitSourceKey } from '../format/filename';\n\n/** Minimal AFF metadata shape shared by all types. */\nexport interface MinimalAff {\n formatVersion: string;\n header: {\n description?: string;\n originalLanguage: string;\n abapLanguageVersion?: string;\n };\n [key: string]: unknown;\n}\n\nexport type GenericAffLike = {\n name: string;\n description?: string;\n originalLanguage?: string;\n abapLanguageVersion?: string;\n /** Raw payload fields (deserialized AFF body, ADT response, …). */\n data?: Record<string, unknown>;\n /** Companion sources keyed by filename — `main` → the suffix-less file\n * (`{name}.{type}.{ext}`); other keys are suffixes\n * (`{name}.{type}.{key}.{typeExt}`, e.g. csnm's `model_inferred`); a key\n * ending in a file extension selects that extension instead\n * (`z_func.func.json`, `texts.en.properties`). */\n sources?: Record<string, string>;\n};\n\n/**\n * Payload extraction that works for both plain objects (`data` is a\n * record) and real ADK objects (`data` is an async method; the loaded\n * payload lives behind the `dataSync` getter / `_data` field). Returns\n * `undefined` when no usable payload is found — callers fall back to\n * treating the object itself as the record.\n */\nfunction isRecord(v: unknown): v is Record<string, unknown> {\n return !!v && typeof v === 'object' && !Array.isArray(v);\n}\n\n/** Narrow to string/number; objects never reach `String()` coercion. */\nfunction str(v: unknown): string | undefined {\n return typeof v === 'string' || typeof v === 'number' ? String(v) : undefined;\n}\n\n/** ADK-object payload: `dataSync` getter (throws unloaded) or `_data`. */\nfunction adkPayloadOf(\n obj: GenericAffLike,\n): Record<string, unknown> | undefined {\n try {\n const sync = (obj as { dataSync?: unknown }).dataSync;\n if (isRecord(sync)) return sync;\n } catch {\n /* not loaded */\n }\n const priv = (obj as { _data?: unknown })._data;\n return isRecord(priv) ? priv : undefined;\n}\n\nexport function payloadOf(\n obj: GenericAffLike,\n): Record<string, unknown> | undefined {\n const d = obj.data as unknown;\n if (isRecord(d)) return d;\n if (typeof d === 'function') return adkPayloadOf(obj);\n return undefined;\n}\n\nexport function genericToMetadata(type: string) {\n return (obj: GenericAffLike): MinimalAff => {\n const data = payloadOf(obj) ?? (obj as Record<string, unknown>);\n // Emit the payload's declared version when present (a v1 document\n // stays a valid v1 document); fresh objects emit the latest schema\n // version — resolved lazily so registration never touches the fs.\n const declared = (data as Record<string, unknown>).formatVersion;\n const version =\n typeof declared === 'string' || typeof declared === 'number'\n ? String(declared)\n : String(latestAffVersion({ type }) ?? '1');\n const bodyProps = affBodyProps({\n type,\n version: Number.isNaN(Number(version)) ? undefined : Number(version),\n });\n const headerProps = affHeaderProps({\n type,\n version: Number.isNaN(Number(version)) ? undefined : Number(version),\n });\n const meta: MinimalAff = {\n formatVersion: version,\n header: {\n originalLanguage: (\n obj.originalLanguage ??\n str(data.originalLanguage) ??\n str(data.language) ??\n str(data.masterLanguage) ??\n 'en'\n ).toLowerCase(),\n },\n };\n if (headerProps.length === 0 || headerProps.includes('description')) {\n meta.header.description =\n str(data.description) ?? obj.description ?? obj.name;\n }\n const abapLang = str(data.abapLanguageVersion) ?? obj.abapLanguageVersion;\n if (\n abapLang &&\n abapLang !== 'standard' &&\n (headerProps.length === 0 || headerProps.includes('abapLanguageVersion'))\n ) {\n meta.header.abapLanguageVersion = abapLang;\n }\n for (const prop of bodyProps) {\n const value = (data as Record<string, unknown>)[prop];\n if (value !== undefined) meta[prop] = value;\n }\n return meta;\n };\n}\n\n/**\n * Companion-source emit for source-bearing types (`.abap`, `.acds`,\n * `.csn`, …): reads `obj.sources` — `main` emits the suffix-less file,\n * other keys emit `{name}.{type}.{suffix}.{ext}`. A key ending in a file\n * extension selects that extension instead of the type default\n * (`z_func.func.json` → LIMU metadata, `texts.en.properties` → texts).\n * Falls back to `obj.getSource()` as the single `main` source.\n */\nexport function genericGetSources(obj: GenericAffLike) {\n // Read from the same place genericSetSources writes: the payload's\n // `sources` map (plain objects) or `_pendingSources` (ADK objects\n // staged for check-in).\n const data = payloadOf(obj);\n const sources =\n (data?.sources as Record<string, string> | undefined) ??\n obj.sources ??\n (obj as { _pendingSources?: Record<string, string> })._pendingSources;\n const single = (obj as { _pendingSource?: string })._pendingSource;\n const merged = single ? { main: single, ...sources } : sources;\n if (merged && Object.keys(merged).length > 0) {\n return Object.entries(merged)\n .filter(([, content]) => !!content)\n .map(([key, content]) => ({\n ...splitSourceKey(key),\n content,\n }));\n }\n const getSource = (obj as { getSource?: () => string | Promise<string> })\n .getSource;\n const src = typeof getSource === 'function' ? getSource.call(obj) : undefined;\n return src ? [{ suffix: undefined, content: src }] : [];\n}\n\n/**\n * DOCU companion emit: `data.docu` carries the raw DOCU JSON document —\n * emitted as `{name}.{type}.docu.json` beside the main metadata file\n * (AFF spec: DOCU is companion metadata, not a standalone object).\n */\nexport function genericGetExtraFiles(type: string) {\n return (obj: GenericAffLike) => {\n const docu = payloadOf(obj)?.docu;\n if (docu === undefined || docu === null) return [];\n const name = (obj.name ?? '').toLowerCase();\n // Parsed documents re-serialize; a raw string (unparseable JSON kept\n // by genericSetSources) re-emits verbatim instead of double-encoding.\n const content =\n typeof docu === 'string' ? docu : JSON.stringify(docu, null, 2) + '\\n';\n return [\n {\n path: `${name}.${type.toLowerCase()}.docu.json`,\n content,\n },\n ];\n };\n}\n\n/**\n * Is `obj.data` assignable? Plain test doubles have a writable (or no)\n * `data` property — assignment creates/updates it. ADK objects expose\n * `data` as a method or a getter-only accessor (`AdkGenericObject`), where\n * assignment throws in strict mode; their mutable slot is `_data`.\n */\nfunction dataIsWritable(obj: GenericAffLike): boolean {\n let cur: object | null = obj;\n while (cur) {\n const d = Object.getOwnPropertyDescriptor(cur, 'data');\n if (d) return 'value' in d ? d.writable !== false : d.set !== undefined;\n cur = Object.getPrototypeOf(cur) as object | null;\n }\n return true;\n}\n\n/** Deserialize side: stage companion sources back onto the object. */\nexport function genericSetSources(\n obj: GenericAffLike,\n sources: Record<string, string>,\n): void {\n // On ADK objects `data` is a method or a getter-only accessor — the\n // mutable payload lives in `_data` (also written to `_pendingSources`,\n // which ADK check-in reads for source uploads).\n const raw = obj.data as unknown;\n const isAdkObject = typeof raw === 'function' || !dataIsWritable(obj);\n let data = payloadOf(obj);\n if (!data) {\n if (isAdkObject) {\n const priv = obj as { _data?: Record<string, unknown> };\n priv._data = priv._data ?? {};\n data = priv._data;\n } else {\n const fresh: Record<string, unknown> = {};\n (obj as { data?: Record<string, unknown> }).data = fresh;\n data = fresh;\n }\n }\n const { docu, ...rest } = sources;\n // DOCU companions are JSON documents, not source text — parse once,\n // re-emit via genericGetExtraFiles. A source key literally named\n // `docu.<ext>` still lands in the sources map (extension-aware).\n if (docu !== undefined) {\n try {\n data.docu = JSON.parse(docu) as unknown;\n } catch {\n data.docu = docu;\n }\n }\n data.sources = {\n ...(data.sources as Record<string, string> | undefined),\n ...rest,\n };\n if (isAdkObject) {\n const pending = obj as { _pendingSources?: Record<string, string> };\n pending._pendingSources = { ...pending._pendingSources, ...rest };\n }\n}\n\nexport function genericFromMetadata(meta: MinimalAff) {\n const { formatVersion, header, ...body } = meta;\n return {\n name: '',\n description: header.description,\n language: header.originalLanguage?.toUpperCase(),\n masterLanguage: header.originalLanguage?.toUpperCase(),\n // formatVersion stays in the payload — a v1 document must re-emit as\n // v1, not silently upgrade to a schema version it predates.\n formatVersion,\n ...(header.abapLanguageVersion\n ? { abapLanguageVersion: header.abapLanguageVersion }\n : {}),\n ...body,\n };\n}\n","/**\n * gCTS / AFF handler factory.\n *\n * Mirrors the abapGit `createHandler` factory but produces **JSON** metadata\n * (AFF / gCTS convention) instead of abapGit's `.xml` files. Handlers are\n * kept intentionally small — business logic lives in `@abapify/adk` and the\n * only job of a gCTS handler is to project ADK data to the on-disk shape.\n *\n * Self-registration: `createHandler` stores the handler in the module-local\n * registry so `getHandler(type)` can resolve it. The `FormatPlugin` wrapper\n * (`format/gcts-format.ts`) exposes the registry through the public\n * `@abapify/adt-plugin` contract.\n */\n\nimport type { AdkObject, AdkKind } from '@abapify/adk';\nimport { getTypeForKind, getMainType } from '@abapify/adk';\nimport type { FormatHandler, SerializedFile } from '@abapify/adt-plugin';\nimport { gctsFilename, splitSourceKey } from '../format/filename';\nimport { payloadOf } from '../aff/generic';\nimport type { GctsMetadata } from '../format/types';\n\nexport type AbapObjectType = string;\n\nexport type AdkObjectClass<T extends AdkObject = AdkObject> = {\n new (...args: any[]): T;\n readonly kind: AdkKind;\n};\n\n/**\n * Lazy source entry.\n *\n * `content` may be a string, a promise, or a thunk returning either — the\n * factory awaits whichever form the handler returns.\n */\nexport interface GctsSourceEntry {\n suffix?: string;\n /**\n * File extension override — defaults to the object type's source\n * extension. Required for companions whose extension differs\n * (`.properties` texts, `.json` LIMU sub-object metadata, `.xdp`).\n */\n ext?: string;\n content: string | Promise<string> | (() => string | Promise<string>);\n}\n\n/**\n * Extra file emitted alongside the standard metadata + source files.\n * Used by compound handlers (e.g. FUGR emitting per-function-module files).\n * `path` is relative to the object directory.\n */\nexport interface GctsExtraFile {\n path: string;\n content: string | Promise<string> | (() => string | Promise<string>);\n}\n\n/**\n * Handler definition for a single ABAP object type.\n *\n * The shape intentionally mirrors the abapGit `HandlerDefinition` so that\n * anyone familiar with the sister plugin can move between them with minimal\n * friction. The `toMetadata` function is the only required hook: it maps an\n * ADK object to the JSON metadata shape for the target type.\n */\nexport interface GctsHandlerDefinition<\n T extends AdkObject,\n M extends GctsMetadata = GctsMetadata,\n> {\n /** Map ADK object → JSON metadata payload (including the required `header`). */\n toMetadata(object: T): M;\n\n /** Optional: single primary source file. */\n getSource?(object: T): string | Promise<string>;\n\n /** Optional: multiple source files (e.g. CLAS includes). */\n getSources?(object: T): GctsSourceEntry[];\n\n /** Optional: extra files with full paths (e.g. FUGR per-FM .func.json). */\n getExtraFiles?(object: T): GctsExtraFile[] | Promise<GctsExtraFile[]>;\n\n /** Optional: custom metadata filename (e.g. `package.devc.json` for DEVC). */\n metadataFileName?: string | ((object: T) => string);\n\n /**\n * Optional: inverse mapping used during deserialization.\n *\n * `fromMetadata` receives the parsed JSON payload and returns a partial\n * ADK-data projection. `setSources` mirrors abapGit's behaviour: it stages\n * source content on the ADK object for later deploy.\n */\n fromMetadata?(metadata: M): { name: string } & Record<string, unknown>;\n suffixToSourceKey?: Record<string, string>;\n setSources?(object: T, sources: Record<string, string>): void;\n}\n\n/** Runtime shape of a gCTS handler after `createHandler` processing. */\nexport interface GctsHandler<\n T extends AdkObject = AdkObject,\n> extends FormatHandler {\n readonly type: AbapObjectType;\n readonly fileExtension: string;\n readonly schema: {\n parse(raw: string): unknown;\n build(data: unknown): string;\n };\n serialize(object: T): Promise<SerializedFile[]>;\n fromAbapGit?(values: unknown): { name: string } & Record<string, unknown>;\n setSources?(object: T, sources: Record<string, string>): void;\n}\n\nconst handlerRegistry = new Map<AbapObjectType, GctsHandler>();\n\n/** Look up a handler (full-type first, then main-type fallback). */\nexport function getHandler(type: AbapObjectType): GctsHandler | undefined {\n return handlerRegistry.get(type) ?? handlerRegistry.get(getMainType(type));\n}\n\n/** `true` iff the given object type has a registered handler. */\nexport function isSupported(type: AbapObjectType): boolean {\n return handlerRegistry.has(type) || handlerRegistry.has(getMainType(type));\n}\n\n/** Snapshot of all registered object types. */\nexport function getSupportedTypes(): AbapObjectType[] {\n return [...handlerRegistry.keys()];\n}\n\n/** Internal — test helper. */\nexport function __resetRegistry(): void {\n handlerRegistry.clear();\n}\n\n/**\n * Build a JSON metadata file for the object. JSON is pretty-printed (2-space\n * indent) so the output is diff-friendly and matches AFF's own tooling.\n */\nfunction buildMetadataFile(meta: GctsMetadata): string {\n return JSON.stringify(meta, null, 2) + '\\n';\n}\n\n/** Staged source companions → files (extension-aware keys → LIMU names). */\nfunction sourceCompanionFiles(\n object: unknown,\n type: string,\n objectName: string,\n suffixToSourceKey?: Record<string, string>,\n): SerializedFile[] {\n const payload = payloadOf(object as Parameters<typeof payloadOf>[0]);\n const pending = object as {\n _pendingSource?: string;\n _pendingSources?: Record<string, string>;\n };\n const map: Record<string, string> = {\n ...(payload?.sources as Record<string, string> | undefined),\n ...pending._pendingSources,\n };\n if (pending._pendingSource && !map.main) map.main = pending._pendingSource;\n // Staged keys are ADK include/source names — the file suffix is the\n // inverse of `suffixToSourceKey` (CLAS `locals_def` → `definitions`).\n const keyToSuffix = Object.fromEntries(\n Object.entries(suffixToSourceKey ?? {}).map(([suffix, key]) => [\n key,\n suffix,\n ]),\n );\n const files: SerializedFile[] = [];\n for (const [key, content] of Object.entries(map)) {\n // Skip absent entries only — an empty companion is still a companion\n // and must round-trip (e.g. an intentionally empty include).\n if (content == null) continue;\n const { suffix, ext } = splitSourceKey(key);\n const fileSuffix = suffix ? (keyToSuffix[suffix] ?? suffix) : suffix;\n files.push({\n path: gctsFilename(objectName, type, 'source', fileSuffix, ext),\n content,\n });\n }\n return files;\n}\n\n/** `data.docu` → `{name}.{type}.docu.json` file (or nothing). */\nfunction docuCompanionFile(\n payload: Record<string, unknown> | undefined,\n objectName: string,\n typeLower: string,\n): SerializedFile[] {\n const docu = payload?.docu;\n if (docu === undefined || docu === null) return [];\n return [\n {\n path: `${objectName}.${typeLower}.docu.json`,\n content:\n typeof docu === 'string' ? docu : JSON.stringify(docu, null, 2) + '\\n',\n },\n ];\n}\n\n/** `data.properties` map → `.properties` files ('' key → master file). */\nfunction propertyCompanionFiles(\n payload: Record<string, unknown> | undefined,\n objectName: string,\n typeLower: string,\n): SerializedFile[] {\n const props = payload?.properties as Record<string, string> | undefined;\n const files: SerializedFile[] = [];\n for (const [key, content] of Object.entries(props ?? {})) {\n if (content == null) continue;\n files.push({\n path: key\n ? `${objectName}.${typeLower}.${key}.properties`\n : `${objectName}.${typeLower}.properties`,\n content,\n });\n }\n return files;\n}\n\n/**\n * Universal companion preservation. Deserialization stages every\n * companion a dedicated hook does not claim into `_pendingSources` /\n * `data.sources` (extension-aware keys), `data.docu`, and\n * `data.properties` — emitted here so handlers without a matching emit\n * hook still round-trip LIMU sub-objects, DOCU texts, and translations\n * instead of silently dropping them. Paths already in `emitted` win.\n */\nfunction companionFiles(\n object: unknown,\n type: string,\n objectName: string,\n emitted: ReadonlySet<string>,\n suffixToSourceKey?: Record<string, string>,\n): SerializedFile[] {\n const typeLower = type.split('/')[0].toLowerCase();\n const payload = payloadOf(object as Parameters<typeof payloadOf>[0]);\n const candidates = [\n ...sourceCompanionFiles(object, type, objectName, suffixToSourceKey),\n ...docuCompanionFile(payload, objectName, typeLower),\n ...propertyCompanionFiles(payload, objectName, typeLower),\n ];\n return candidates.filter((f) => !emitted.has(f.path));\n}\n\n/**\n * Register a handler for an ADK class (preferred — `type` is derived from\n * the static `kind`) or an explicit type string (for types without an ADK\n * class, e.g. DOMA/DTEL).\n */\nexport function createHandler<\n T extends AdkObject,\n M extends GctsMetadata = GctsMetadata,\n>(\n adkClass: AdkObjectClass<T>,\n definition: GctsHandlerDefinition<T, M>,\n): GctsHandler<T>;\nexport function createHandler<\n T extends AdkObject,\n M extends GctsMetadata = GctsMetadata,\n>(\n type: AbapObjectType,\n definition: GctsHandlerDefinition<T, M>,\n): GctsHandler<T>;\nexport function createHandler<\n T extends AdkObject,\n M extends GctsMetadata = GctsMetadata,\n>(\n adkClassOrType: AdkObjectClass<T> | AbapObjectType,\n definition: GctsHandlerDefinition<T, M>,\n): GctsHandler<T> {\n let type: AbapObjectType;\n if (typeof adkClassOrType === 'string') {\n type = adkClassOrType;\n } else {\n const kind = adkClassOrType.kind;\n const derived = getTypeForKind(kind);\n if (!derived) {\n throw new Error(\n `Unknown ADK kind: ${kind}. Ensure the ADK class has a static 'kind' property.`,\n );\n }\n type = derived;\n }\n\n const fileExtension = getMainType(type).toLowerCase();\n\n async function resolveSource(entry: GctsSourceEntry): Promise<string> {\n const raw =\n typeof entry.content === 'function' ? entry.content() : entry.content;\n return await raw;\n }\n\n const handler: GctsHandler<T> = {\n type,\n fileExtension,\n // Minimal JSON \"schema\" — matches the FormatHandlerSchema contract.\n schema: {\n parse: (raw: string) => JSON.parse(raw) as unknown,\n build: (data: unknown) => JSON.stringify(data, null, 2) + '\\n',\n },\n suffixToSourceKey: definition.suffixToSourceKey,\n async serialize(object: T): Promise<SerializedFile[]> {\n const files: SerializedFile[] = [];\n const objectName = (object.name ?? '').toLowerCase();\n\n // Source files.\n if (definition.getSources) {\n for (const entry of definition.getSources(object)) {\n const content = await resolveSource(entry);\n if (!content) continue;\n files.push({\n path: gctsFilename(\n objectName,\n type,\n 'source',\n entry.suffix,\n entry.ext,\n ),\n content,\n });\n }\n } else if (definition.getSource) {\n const content = await definition.getSource(object);\n if (content) {\n files.push({\n path: gctsFilename(objectName, type, 'source'),\n content,\n });\n }\n }\n\n // Metadata file.\n const metadata = definition.toMetadata(object);\n const metadataFile =\n typeof definition.metadataFileName === 'function'\n ? definition.metadataFileName(object)\n : (definition.metadataFileName ??\n gctsFilename(objectName, type, 'metadata'));\n files.push({\n path: metadataFile,\n content: buildMetadataFile(metadata),\n });\n\n // Extra files (e.g. FUGR per-function-module .func.json + .func.abap).\n if (definition.getExtraFiles) {\n const extras = await definition.getExtraFiles(object);\n for (const extra of extras) {\n const content = await resolveSource(extra);\n if (!content) continue;\n files.push({ path: extra.path, content });\n }\n }\n\n files.push(\n ...companionFiles(\n object,\n type,\n objectName,\n new Set(files.map((f) => f.path)),\n definition.suffixToSourceKey,\n ),\n );\n\n return files;\n },\n fromAbapGit: definition.fromMetadata\n ? (values: unknown) =>\n definition.fromMetadata!(values as M) as { name: string } & Record<\n string,\n unknown\n >\n : undefined,\n setSources: definition.setSources,\n };\n\n handlerRegistry.set(type, handler as GctsHandler);\n return handler;\n}\n\n/** Convenience re-export — matches abapGit's `package.devc.xml` pattern. */\nexport { PACKAGE_FILENAME } from '../format/filename';\n","/**\n * CLAS handler for gCTS / AFF format.\n *\n * Projects ADK class data to the AFF clas-v1.json schema shape:\n *\n * {\n * formatVersion: \"1\",\n * header: { description, originalLanguage, abapLanguageVersion? },\n * category?,\n * fixPointArithmetic?,\n * messageClass?,\n * descriptions?: { types?, attributes?, events?, methods? }\n * }\n *\n * Sources are emitted per include (main, definitions, implementations, ...).\n * Abapgit suffix convention is reused for consistency — AFF does not\n * standardise include filenames, but using the same suffixes as abapGit\n * means downstream tooling (diff, round-trip) can treat both formats with\n * the same suffix map.\n */\n\nimport { AdkClass, type ClassIncludeType } from '@abapify/adk';\nimport { createHandler } from '../base';\nimport type { ClasAff } from '../../../schemas/generated';\n\nconst SUFFIX: Record<ClassIncludeType, string | undefined> = {\n main: undefined,\n definitions: 'locals_def',\n implementations: 'locals_imp',\n localtypes: 'locals_types',\n macros: 'macros',\n testclasses: 'testclasses',\n};\n\nconst SUFFIX_TO_SOURCE_KEY = Object.fromEntries(\n Object.entries(SUFFIX)\n .filter(([, v]) => v !== undefined)\n .map(([k, v]) => [v, k]),\n) as Record<string, ClassIncludeType>;\n\n/**\n * ADK category enum → AFF category enum.\n * AFF uses a different, finer-grained set of category names.\n */\nconst CATEGORY_TO_AFF: Record<string, string> = {\n generalObjectType: 'generalObjectType',\n exitClass: 'exitClass',\n testClass: 'testclassAbapUnit',\n behaviorPool: 'behaviorClass',\n entityEventHandler: 'entityEventHandler',\n persistentClass: 'persistentClass',\n factoryClass: 'factoryForPersistentClass',\n rfcProxyClass: 'rfcProxyClass',\n communicationConnectionClass: 'communicationConnectionClass',\n exceptionClass: 'exceptionClass',\n areaClass: 'areaClassSharedObjects',\n bspClass: 'bspApplicationClass',\n};\n\nconst CATEGORY_FROM_AFF: Record<string, string> = Object.fromEntries(\n Object.entries(CATEGORY_TO_AFF).map(([k, v]) => [v, k]),\n);\n\nexport const classHandler = createHandler(AdkClass, {\n suffixToSourceKey: SUFFIX_TO_SOURCE_KEY,\n\n toMetadata(cls): ClasAff {\n const data = cls.dataSync;\n const lang = (data.language ?? data.masterLanguage ?? '').toLowerCase();\n return {\n formatVersion: '1',\n header: {\n description: cls.description ?? data.description ?? '',\n originalLanguage: lang,\n ...(data.abapLanguageVersion && data.abapLanguageVersion !== 'standard'\n ? {\n abapLanguageVersion:\n data.abapLanguageVersion as ClasAff['header']['abapLanguageVersion'],\n }\n : {}),\n },\n ...(data.category\n ? {\n category: (CATEGORY_TO_AFF[data.category] ??\n 'generalObjectType') as ClasAff['category'],\n }\n : {}),\n ...(typeof data.fixPointArithmetic === 'boolean'\n ? { fixPointArithmetic: data.fixPointArithmetic }\n : {}),\n };\n },\n\n getSources: (cls) => {\n const includes = cls.dataSync.include ?? [];\n return includes.map((inc) => ({\n suffix: SUFFIX[String(inc.includeType ?? 'main') as ClassIncludeType],\n content: () =>\n cls.getIncludeSource(\n String(inc.includeType ?? 'main') as ClassIncludeType,\n ),\n }));\n },\n\n fromMetadata: (meta: ClasAff) => ({\n name: '', // AFF clas schema has no name field — set by filename context\n type: 'CLAS/OC',\n description: meta.header.description,\n language: meta.header.originalLanguage?.toUpperCase(),\n masterLanguage: meta.header.originalLanguage?.toUpperCase(),\n category: meta.category\n ? (CATEGORY_FROM_AFF[meta.category] ?? meta.category)\n : undefined,\n abapLanguageVersion: meta.header.abapLanguageVersion,\n fixPointArithmetic: meta.fixPointArithmetic,\n }),\n\n setSources: (cls, sources) => {\n (\n cls as unknown as { _pendingSources: Record<string, string> }\n )._pendingSources = sources;\n if (sources.main) {\n (cls as unknown as { _pendingSource: string })._pendingSource =\n sources.main;\n }\n },\n});\n","/**\n * INTF handler for gCTS / AFF format.\n *\n * Projects ADK interface data to the AFF intf-v1.json schema shape:\n *\n * {\n * formatVersion: \"1\",\n * header: { description, originalLanguage, abapLanguageVersion? },\n * category?,\n * proxy?,\n * descriptions?\n * }\n */\n\nimport { AdkInterface } from '@abapify/adk';\nimport { createHandler } from '../base';\nimport type { IntfAff } from '../../../schemas/generated';\n\nexport const interfaceHandler = createHandler(AdkInterface, {\n toMetadata(intf): IntfAff {\n const data = intf.dataSync;\n const lang = (data.language ?? data.masterLanguage ?? '').toLowerCase();\n return {\n formatVersion: '1',\n header: {\n description: intf.description ?? data.description ?? '',\n originalLanguage: lang,\n ...(data.abapLanguageVersion && data.abapLanguageVersion !== 'standard'\n ? {\n abapLanguageVersion:\n data.abapLanguageVersion as IntfAff['header']['abapLanguageVersion'],\n }\n : {}),\n },\n };\n },\n\n getSource: (obj) => obj.getSource(),\n\n fromMetadata: (meta: IntfAff) => ({\n name: '',\n type: 'INTF/OI',\n description: meta.header.description,\n language: meta.header.originalLanguage?.toUpperCase(),\n masterLanguage: meta.header.originalLanguage?.toUpperCase(),\n abapLanguageVersion: meta.header.abapLanguageVersion,\n }),\n\n setSources: (intf, sources) => {\n if (sources.main) {\n (intf as unknown as { _pendingSource: string })._pendingSource =\n sources.main;\n }\n },\n});\n","/**\n * PROG handler for gCTS / AFF format.\n *\n * Projects ADK program data to the AFF prog-v1.json schema shape:\n *\n * {\n * formatVersion: \"1\",\n * header: { description, originalLanguage, abapLanguageVersion? },\n * generalInformation: { programType, programStatus, fixPointArithmetic?, ... }\n * }\n */\n\nimport { AdkProgram } from '@abapify/adk';\nimport { createHandler } from '../base';\nimport type { ProgAff } from '../../../schemas/generated';\n\n/** ADK sourceObjectStatus → AFF programStatus */\nconst STATUS_TO_AFF: Record<string, string> = {\n SAPStandardProduction: 'sapProductionProgram',\n customerProduction: 'customerProductionProgram',\n system: 'systemProgram',\n test: 'testProgram',\n};\n\nconst STATUS_FROM_AFF: Record<string, string> = Object.fromEntries(\n Object.entries(STATUS_TO_AFF).map(([k, v]) => [v, k]),\n);\n\nexport const programHandler = createHandler(AdkProgram, {\n toMetadata(prog): ProgAff {\n const data = prog.dataSync;\n const lang = (data.language ?? data.masterLanguage ?? '').toLowerCase();\n const generalInformation: Record<string, unknown> = {\n programType: (data.programType ??\n 'executableProgram') as ProgAff['generalInformation']['programType'],\n programStatus: (STATUS_TO_AFF[data.sourceObjectStatus ?? ''] ??\n 'systemProgram') as ProgAff['generalInformation']['programStatus'],\n };\n if (typeof data.fixPointArithmetic === 'boolean') {\n generalInformation.fixPointArithmetic = data.fixPointArithmetic;\n }\n return {\n formatVersion: '1',\n header: {\n description: prog.description ?? data.description ?? '',\n originalLanguage: lang,\n ...(data.abapLanguageVersion && data.abapLanguageVersion !== 'standard'\n ? {\n abapLanguageVersion:\n data.abapLanguageVersion as ProgAff['header']['abapLanguageVersion'],\n }\n : {}),\n },\n generalInformation: generalInformation as ProgAff['generalInformation'],\n };\n },\n\n getSource: (obj) => obj.getSource(),\n\n fromMetadata: (meta: ProgAff) => ({\n name: '',\n type: 'PROG/P',\n description: meta.header.description,\n language: meta.header.originalLanguage?.toUpperCase(),\n masterLanguage: meta.header.originalLanguage?.toUpperCase(),\n programType: meta.generalInformation?.programType,\n sourceObjectStatus: meta.generalInformation?.programStatus\n ? STATUS_FROM_AFF[meta.generalInformation.programStatus]\n : undefined,\n fixPointArithmetic: meta.generalInformation?.fixPointArithmetic,\n abapLanguageVersion: meta.header.abapLanguageVersion,\n }),\n\n setSources: (prog, sources) => {\n if (sources.main) {\n (prog as unknown as { _pendingSource: string })._pendingSource =\n sources.main;\n }\n },\n});\n","/**\n * DEVC (package) handler for gCTS / AFF format.\n *\n * Packages use a fixed filename (`package.devc.json`) — same convention as\n * abapGit's `package.devc.xml`.\n *\n * Note: DEVC has no AFF schema in SAP/abap-file-formats — this handler\n * uses a gCTS-compatible shape with formatVersion \"1\". If AFF adds a DEVC\n * schema later, align here.\n */\nimport { AdkPackage } from '@abapify/adk';\nimport { createHandler, PACKAGE_FILENAME } from '../base';\n\nexport const packageHandler = createHandler(AdkPackage, {\n metadataFileName: PACKAGE_FILENAME,\n\n toMetadata(pkg) {\n return {\n formatVersion: '1',\n header: {\n description: pkg.description ?? '',\n originalLanguage: (\n pkg.dataSync?.language ??\n pkg.dataSync?.masterLanguage ??\n ''\n ).toLowerCase(),\n ...(pkg.dataSync?.abapLanguageVersion &&\n pkg.dataSync.abapLanguageVersion !== 'standard'\n ? { abapLanguageVersion: pkg.dataSync.abapLanguageVersion }\n : {}),\n },\n package: {\n // DEVCLASS is carried by filename/directory, not by metadata.\n softwareComponent: pkg.dataSync?.transport?.softwareComponent?.name,\n applicationComponent: pkg.dataSync?.applicationComponent?.name,\n packageType: pkg.dataSync?.attributes?.packageType,\n },\n };\n },\n\n fromMetadata: (meta: any) => ({\n name: '',\n description: meta?.header?.description,\n language: meta?.header?.originalLanguage?.toUpperCase(),\n masterLanguage: meta?.header?.originalLanguage?.toUpperCase(),\n abapLanguageVersion: meta?.header?.abapLanguageVersion,\n }),\n});\n","/**\n * DOMA (domain) handler for gCTS / AFF format.\n *\n * Projects ADK domain data to the AFF doma-v1.json schema shape:\n *\n * {\n * formatVersion: \"1\",\n * header: { description, originalLanguage, abapLanguageVersion? },\n * format: { dataType, length, decimals? } (required),\n * outputCharacteristics?: { length?, caseSensitive?, conversionRoutine?, ... },\n * valueTable?: { name }\n * }\n */\n\nimport { AdkDomain } from '@abapify/adk';\nimport { createHandler } from '../base';\nimport type { DomaAff } from '../../../schemas/generated';\n\nexport const domainHandler = createHandler(AdkDomain, {\n toMetadata(doma): DomaAff {\n const data = doma.dataSync as Record<string, unknown>;\n const content = (data.content ?? {}) as Record<string, unknown>;\n const lang = (\n (data.language as string) ??\n (data.masterLanguage as string) ??\n ''\n ).toLowerCase();\n const ti = (content.typeInformation ?? {}) as Record<string, unknown>;\n const oi = (content.outputInformation ?? {}) as Record<string, unknown>;\n const vi = (content.valueInformation ?? {}) as Record<string, unknown>;\n\n const format: Record<string, unknown> = {\n dataType: ti.datatype ?? 'CHAR',\n length: ti.length ?? 1,\n };\n if (typeof ti.decimals === 'number') {\n format.decimals = ti.decimals;\n }\n\n const result: Record<string, unknown> = {\n formatVersion: '1',\n header: {\n description: doma.description ?? '',\n originalLanguage: lang,\n },\n format: format as DomaAff['format'],\n };\n\n // outputCharacteristics — only emit if we have meaningful values\n const outChars: Record<string, unknown> = {};\n if (typeof oi.length === 'number') outChars.length = oi.length;\n if (typeof oi.lowercase === 'boolean')\n outChars.caseSensitive = !oi.lowercase;\n if (oi.conversionExit) outChars.conversionRoutine = oi.conversionExit;\n if (Object.keys(outChars).length > 0) {\n result.outputCharacteristics = outChars;\n }\n\n // valueTable\n const vtRef = (vi.valueTableRef ?? {}) as { name?: string };\n if (vtRef.name) {\n result.valueTable = { name: vtRef.name };\n }\n\n return result as DomaAff;\n },\n\n fromMetadata: (meta: DomaAff) => {\n const result: Record<string, unknown> = {\n name: '',\n description: meta.header.description,\n language: meta.header.originalLanguage?.toUpperCase(),\n masterLanguage: meta.header.originalLanguage?.toUpperCase(),\n };\n const content: Record<string, unknown> = {\n typeInformation: {\n datatype: meta.format.dataType,\n length: meta.format.length,\n decimals: meta.format.decimals ?? 0,\n },\n };\n if (meta.outputCharacteristics) {\n content.outputInformation = {\n length: meta.outputCharacteristics.length,\n lowercase: meta.outputCharacteristics.caseSensitive ? false : undefined,\n conversionExit: meta.outputCharacteristics.conversionRoutine,\n };\n }\n if (meta.valueTable?.name) {\n content.valueInformation = {\n valueTableRef: { name: meta.valueTable.name },\n };\n }\n result.content = content;\n return result as { name: string } & Record<string, unknown>;\n },\n});\n","/**\n * DTEL (data element) handler for gCTS / AFF format.\n *\n * Projects ADK data element data to the AFF dtel-v1.json schema shape:\n *\n * {\n * formatVersion: \"1\",\n * header: { description, originalLanguage, abapLanguageVersion? },\n * dataTypeInformation: { domainName? } | { predefinedType: { dataType, length?, decimals? } },\n * fieldLabels?: { short, shortLength, medium, mediumLength, long, longLength, heading, headingLength }\n * }\n */\n\nimport { AdkDataElement } from '@abapify/adk';\nimport { createHandler } from '../base';\nimport type { DtelAff } from '../../../schemas/generated';\n\n// TODO: Replace Record<string, unknown> with generated ADK DTEL types once\n// adt-schemas exports a typed DataelementsSchema interface. Dynamic access is\n// required because AdkDataElement.dataSync returns a generic record today.\n// Cleanup issue: https://github.com/abapify/adt-cli/issues/195\nfunction buildDataTypeInformation(\n data: Record<string, unknown>,\n): Record<string, unknown> {\n const typeKind = data.typeKind as string | undefined;\n if (typeKind === 'domain' && data.typeName) {\n return { domainName: data.typeName };\n }\n if (data.dataType) {\n const predefinedType: Record<string, unknown> = { dataType: data.dataType };\n if (typeof data.dataTypeLength === 'number') {\n predefinedType.length = data.dataTypeLength;\n }\n if (typeof data.dataTypeDecimals === 'number') {\n predefinedType.decimals = data.dataTypeDecimals;\n }\n return { predefinedType };\n }\n return {};\n}\n\n// TODO: Same as above — replace with typed access once ADK exports DTEL types.\nfunction buildFieldLabels(\n data: Record<string, unknown>,\n): Record<string, unknown> {\n const labels: Record<string, unknown> = {};\n const fields: [string, string, string][] = [\n ['shortFieldLabel', 'short', 'shortFieldLength'],\n ['mediumFieldLabel', 'medium', 'mediumFieldLength'],\n ['longFieldLabel', 'long', 'longFieldLength'],\n ['headingFieldLabel', 'heading', 'headingFieldLength'],\n ];\n for (const [src, dst, lenKey] of fields) {\n if (data[src]) {\n labels[dst] = data[src];\n if (typeof data[lenKey] === 'number') {\n labels[`${dst}Length`] = data[lenKey];\n }\n }\n }\n return labels;\n}\n\nexport const dataElementHandler = createHandler(AdkDataElement, {\n toMetadata(dtel): DtelAff {\n const data = dtel.dataSync as Record<string, unknown>;\n const lang = (\n (data.language as string) ??\n (data.masterLanguage as string) ??\n ''\n ).toLowerCase();\n\n const result: Record<string, unknown> = {\n formatVersion: '1',\n header: {\n description: dtel.description ?? '',\n originalLanguage: lang,\n },\n dataTypeInformation: buildDataTypeInformation(data),\n };\n\n const fieldLabels = buildFieldLabels(data);\n if (Object.keys(fieldLabels).length > 0) {\n result.fieldLabels = fieldLabels;\n }\n\n return result as DtelAff;\n },\n\n fromMetadata: (meta: DtelAff) => {\n const dti = meta.dataTypeInformation ?? {};\n const result: Record<string, unknown> = {\n name: '',\n description: meta.header.description,\n language: meta.header.originalLanguage?.toUpperCase(),\n masterLanguage: meta.header.originalLanguage?.toUpperCase(),\n };\n if (dti.domainName) {\n result.typeKind = 'domain';\n result.typeName = dti.domainName;\n } else if (dti.predefinedType) {\n result.typeKind = 'predefinedAbapType';\n result.dataType = dti.predefinedType.dataType;\n result.dataTypeLength = dti.predefinedType.length;\n result.dataTypeDecimals = dti.predefinedType.decimals;\n }\n const fl = meta.fieldLabels;\n if (fl) {\n result.shortFieldLabel = fl.short;\n result.shortFieldLength = fl.shortLength;\n result.mediumFieldLabel = fl.medium;\n result.mediumFieldLength = fl.mediumLength;\n result.longFieldLabel = fl.long;\n result.longFieldLength = fl.longLength;\n result.headingFieldLabel = fl.heading;\n result.headingFieldLength = fl.headingLength;\n }\n return result as { name: string } & Record<string, unknown>;\n },\n});\n","/**\n * TABL (table / structure) handler for gCTS / AFF format.\n *\n * Note: TABL has no AFF schema in SAP/abap-file-formats — this handler\n * uses a gCTS-compatible shape with formatVersion \"1\". If AFF adds a TABL\n * schema later, align here.\n */\nimport { AdkTable } from '@abapify/adk';\nimport { createHandler } from '../base';\n\nexport const tableHandler = createHandler(AdkTable, {\n toMetadata(tabl) {\n const data = tabl.dataSync as Record<string, unknown>;\n return {\n formatVersion: '1',\n header: {\n description: tabl.description ?? '',\n originalLanguage: (\n (data.language as string) ??\n (data.masterLanguage as string) ??\n ''\n ).toLowerCase(),\n },\n table: {\n tableCategory: data.tableCategory,\n deliveryClass: data.deliveryClass,\n dataMaintenance: data.dataMaintenance,\n fields: data.fields,\n },\n };\n },\n\n fromMetadata: (meta: any) => ({\n name: '',\n description: meta?.header?.description,\n language: meta?.header?.originalLanguage?.toUpperCase(),\n masterLanguage: meta?.header?.originalLanguage?.toUpperCase(),\n tableCategory: meta?.table?.tableCategory,\n deliveryClass: meta?.table?.deliveryClass,\n dataMaintenance: meta?.table?.dataMaintenance,\n fields: meta?.table?.fields,\n }),\n});\n","/**\n * TTYP (table type) handler for gCTS / AFF format.\n *\n * Note: TTYP has no AFF schema in SAP/abap-file-formats — this handler\n * uses a gCTS-compatible shape with formatVersion \"1\". If AFF adds a TTYP\n * schema later, align here.\n */\nimport { AdkTableType } from '@abapify/adk';\nimport { createHandler } from '../base';\n\nexport const tableTypeHandler = createHandler(AdkTableType, {\n toMetadata(ttyp) {\n const data = ttyp.dataSync as Record<string, unknown>;\n return {\n formatVersion: '1',\n header: {\n description: ttyp.description ?? '',\n originalLanguage: (\n (data.language as string) ??\n (data.masterLanguage as string) ??\n ''\n ).toLowerCase(),\n },\n tableType: {\n accessMode: data.accessMode,\n rowType: (data.rowTypeRef as { name?: string } | undefined)?.name,\n primaryKey: data.primaryKey,\n secondaryKeys: data.secondaryKeys,\n },\n };\n },\n\n fromMetadata: (meta: any) => ({\n name: '',\n description: meta?.header?.description,\n language: meta?.header?.originalLanguage?.toUpperCase(),\n }),\n});\n","/**\n * FUGR (function group) handler for gCTS / AFF format.\n *\n * Projects ADK function group data to the AFF fugr-v1.json schema shape:\n *\n * {\n * formatVersion: \"1\",\n * header: { description, originalLanguage, abapLanguageVersion? },\n * fixPointArithmetic: boolean (required),\n * status?\n * }\n *\n * AFF's FUGR representation nests function modules under the group\n * directory. This handler emits the group metadata plus per-function-module\n * files when function module data is available (LIMU naming keeps the\n * submodule files inside the parent's namespace):\n * <parent>.fugr.<fmname>.func.json — FM metadata (func-v1.json schema)\n * <parent>.fugr.<fmname>.func.abap — FM source\n */\n\nimport { AdkFunctionGroup } from '@abapify/adk';\nimport { createHandler, type GctsExtraFile } from '../base';\nimport { affName } from '../../format/filename';\nimport type { FugrAff } from '../../../schemas/generated';\n\ntype FmDescriptor = {\n name: string;\n description?: string;\n processingType?: string;\n includeNumber?: string;\n source?: string;\n};\n\ntype FugrLike = {\n name: string;\n description?: string;\n dataSync?: Record<string, unknown>;\n functionModules?: FmDescriptor[];\n getSource?: () => Promise<string> | string;\n};\n\nfunction buildFuncMetadata(fm: FmDescriptor): string {\n const meta: Record<string, unknown> = {\n formatVersion: '1',\n header: {\n description: fm.description ?? fm.name ?? '',\n },\n processingType: fm.processingType ?? 'normal',\n includeNumber: fm.includeNumber ?? '0000',\n };\n return JSON.stringify(meta, null, 2) + '\\n';\n}\n\nexport const functionGroupHandler = createHandler(AdkFunctionGroup, {\n toMetadata(fugr: FugrLike): FugrAff {\n const data = (fugr.dataSync ?? {}) as Record<string, unknown>;\n const lang = (\n (data.language as string) ??\n (data.masterLanguage as string) ??\n ''\n ).toLowerCase();\n return {\n formatVersion: '1',\n header: {\n description: fugr.description ?? '',\n originalLanguage: lang,\n },\n fixPointArithmetic: data.fixPointArithmetic === true,\n };\n },\n\n getSource: (fugr: FugrLike) =>\n typeof fugr.getSource === 'function' ? fugr.getSource() : '',\n\n getExtraFiles(fugr: FugrLike): GctsExtraFile[] {\n const fms = fugr.functionModules ?? [];\n const files: GctsExtraFile[] = [];\n // LIMU naming: `{parent}.{ptype}.{sub}.{stype}.{ext}` — the parent\n // prefix keeps the file inside the FUGR object's namespace so the\n // deserializer's suffix routing can re-attach it.\n const parent = affName(fugr.name ?? '');\n for (const fm of fms) {\n const fmName = affName(fm.name);\n files.push({\n path: `${parent}.fugr.${fmName}.func.json`,\n content: buildFuncMetadata(fm),\n });\n if (fm.source) {\n files.push({\n path: `${parent}.fugr.${fmName}.func.abap`,\n content: fm.source,\n });\n }\n }\n return files;\n },\n\n fromMetadata: (meta: FugrAff) => ({\n name: '',\n description: meta.header.description,\n language: meta.header.originalLanguage?.toUpperCase(),\n masterLanguage: meta.header.originalLanguage?.toUpperCase(),\n fixPointArithmetic: meta.fixPointArithmetic,\n }),\n});\n","/**\n * DDLS (CDS view) handler for gCTS / AFF format.\n *\n * Source-driven: emits `<name>.ddls.asddls` (source) + `<name>.ddls.json`\n * (metadata per ddls-v1.json schema).\n *\n * {\n * formatVersion: \"1\",\n * header: { description, originalLanguage, abapLanguageVersion? },\n * sourceOrigin: \"abapDevelopmentTools\" (required),\n * sourceType: \"unknown\" (required),\n * parentName?: string\n * }\n */\n\nimport { createHandler } from '../base';\nimport type { DdlsAff } from '../../../schemas/generated';\n\ntype DdlsLike = {\n name: string;\n description?: string;\n originalLanguage?: string;\n abapLanguageVersion?: string;\n sourceOrigin?: string;\n sourceType?: string;\n getSource?: () => Promise<string> | string;\n};\n\nexport const ddlSourceHandler = createHandler('DDLS', {\n toMetadata(obj: DdlsLike): DdlsAff {\n const lang = (obj.originalLanguage ?? '').toLowerCase();\n const meta: Record<string, unknown> = {\n formatVersion: '1',\n header: {\n description: obj.description ?? obj.name ?? '',\n originalLanguage: lang,\n ...(obj.abapLanguageVersion\n ? { abapLanguageVersion: obj.abapLanguageVersion }\n : {}),\n },\n sourceOrigin: obj.sourceOrigin ?? 'abapDevelopmentTools',\n sourceType: obj.sourceType ?? 'unknown',\n };\n return meta as DdlsAff;\n },\n\n getSource: (obj: DdlsLike) =>\n typeof obj.getSource === 'function' ? obj.getSource() : '',\n\n fromMetadata: (meta: DdlsAff) => ({\n name: '',\n description: meta.header.description,\n language: meta.header.originalLanguage?.toUpperCase(),\n masterLanguage: meta.header.originalLanguage?.toUpperCase(),\n sourceOrigin: meta.sourceOrigin,\n sourceType: meta.sourceType,\n }),\n});\n","/**\n * DCLS (CDS access control) handler for gCTS / AFF format.\n *\n * Source-driven: emits `<name>.dcls.asdcls` (source) + `<name>.dcls.json`\n * (metadata per dcls-v1.json schema).\n *\n * {\n * formatVersion: \"1\",\n * header: { description, originalLanguage, abapLanguageVersion? }\n * }\n */\n\nimport { createHandler } from '../base';\nimport type { DclsAff } from '../../../schemas/generated';\n\ntype DclsLike = {\n name: string;\n description?: string;\n originalLanguage?: string;\n abapLanguageVersion?: string;\n getSource?: () => Promise<string> | string;\n};\n\nexport const dclSourceHandler = createHandler('DCLS', {\n toMetadata(obj: DclsLike): DclsAff {\n const lang = (obj.originalLanguage ?? '').toLowerCase();\n return {\n formatVersion: '1',\n header: {\n description: obj.description ?? obj.name ?? '',\n originalLanguage: lang,\n ...(obj.abapLanguageVersion\n ? { abapLanguageVersion: obj.abapLanguageVersion }\n : {}),\n },\n } as DclsAff;\n },\n\n getSource: (obj: DclsLike) =>\n typeof obj.getSource === 'function' ? obj.getSource() : '',\n\n fromMetadata: (meta: DclsAff) => ({\n name: '',\n description: meta.header.description,\n language: meta.header.originalLanguage?.toUpperCase(),\n masterLanguage: meta.header.originalLanguage?.toUpperCase(),\n }),\n});\n","/**\n * BDEF (RAP behavior definition) handler for gCTS / AFF format.\n *\n * Source-driven: emits `<name>.bdef.abdl` (source) + `<name>.bdef.json`\n * (metadata per bdef-v1.json schema).\n *\n * {\n * formatVersion: \"1\",\n * header: { description, originalLanguage, abapLanguageVersion? },\n * extendedBehaviorDefintion?: { name?: string }\n * }\n */\n\nimport { createHandler } from '../base';\nimport type { BdefAff } from '../../../schemas/generated';\n\ntype BdefLike = {\n name: string;\n description?: string;\n originalLanguage?: string;\n abapLanguageVersion?: string;\n getSource?: () => Promise<string> | string;\n};\n\nexport const behaviorDefinitionHandler = createHandler('BDEF', {\n toMetadata(obj: BdefLike): BdefAff {\n const lang = (obj.originalLanguage ?? '').toLowerCase();\n return {\n formatVersion: '1',\n header: {\n description: obj.description ?? obj.name ?? '',\n originalLanguage: lang,\n ...(obj.abapLanguageVersion\n ? { abapLanguageVersion: obj.abapLanguageVersion }\n : {}),\n },\n } as BdefAff;\n },\n\n getSource: (obj: BdefLike) =>\n typeof obj.getSource === 'function' ? obj.getSource() : '',\n\n fromMetadata: (meta: BdefAff) => ({\n name: '',\n description: meta.header.description,\n language: meta.header.originalLanguage?.toUpperCase(),\n masterLanguage: meta.header.originalLanguage?.toUpperCase(),\n }),\n});\n","/**\n * SRVD (RAP service definition) handler for gCTS / AFF format.\n *\n * Source-driven: emits `<name>.srvd.acds` (source) + `<name>.srvd.json`\n * (metadata per srvd-v1.json schema).\n *\n * {\n * formatVersion: \"1\",\n * header: { description, originalLanguage, abapLanguageVersion? },\n * generalInformation: { sourceOrigin, sourceType }\n * }\n */\n\nimport { createHandler } from '../base';\nimport type { SrvdAff } from '../../../schemas/generated';\n\ntype SrvdLike = {\n name: string;\n description?: string;\n originalLanguage?: string;\n abapLanguageVersion?: string;\n sourceOrigin?: string;\n sourceType?: string;\n getSource?: () => Promise<string> | string;\n};\n\nexport const serviceDefinitionHandler = createHandler('SRVD', {\n toMetadata(obj: SrvdLike): SrvdAff {\n const lang = (obj.originalLanguage ?? '').toLowerCase();\n return {\n formatVersion: '1',\n header: {\n description: obj.description ?? obj.name ?? '',\n originalLanguage: lang,\n ...(obj.abapLanguageVersion\n ? { abapLanguageVersion: obj.abapLanguageVersion }\n : {}),\n },\n generalInformation: {\n sourceOrigin: obj.sourceOrigin ?? 'abapDevelopmentTools',\n sourceType: obj.sourceType ?? 'definition',\n },\n } as SrvdAff;\n },\n\n getSource: (obj: SrvdLike) =>\n typeof obj.getSource === 'function' ? obj.getSource() : '',\n\n fromMetadata: (meta: SrvdAff) => ({\n name: '',\n description: meta.header.description,\n language: meta.header.originalLanguage?.toUpperCase(),\n masterLanguage: meta.header.originalLanguage?.toUpperCase(),\n sourceOrigin: meta.generalInformation.sourceOrigin,\n sourceType: meta.generalInformation.sourceType,\n }),\n});\n","/**\n * SRVB (RAP service binding) handler for gCTS / AFF format.\n *\n * Metadata-only (no source): emits `<name>.srvb.json` only\n * (metadata per srvb-v1.json schema).\n *\n * {\n * formatVersion: \"1\",\n * header: { description, originalLanguage, abapLanguageVersion? },\n * bindingType: string (required),\n * bindingTypeCategory: \"ui\" | \"webApi\" (required),\n * services: [{ name, versions: [{ serviceVersion, serviceDefinition }] }]\n * }\n */\n\nimport { createHandler } from '../base';\nimport type { SrvbAff } from '../../../schemas/generated';\n\ntype SrvbLike = {\n name: string;\n description?: string;\n originalLanguage?: string;\n abapLanguageVersion?: string;\n bindingType?: string;\n bindingTypeCategory?: string;\n services?: Array<{\n name: string;\n versions: Array<{\n serviceVersion: string;\n serviceBuildVersion?: string;\n serviceDefinition: string;\n }>;\n }>;\n};\n\nexport const serviceBindingHandler = createHandler('SRVB', {\n toMetadata(obj: SrvbLike): SrvbAff {\n const lang = (obj.originalLanguage ?? '').toLowerCase();\n return {\n formatVersion: '1',\n header: {\n description: obj.description ?? obj.name ?? '',\n originalLanguage: lang,\n ...(obj.abapLanguageVersion\n ? { abapLanguageVersion: obj.abapLanguageVersion }\n : {}),\n },\n bindingType: obj.bindingType ?? '',\n bindingTypeCategory: (obj.bindingTypeCategory as 'ui' | 'webApi') ?? 'ui',\n services: obj.services ?? [],\n } as SrvbAff;\n },\n\n fromMetadata: (meta: SrvbAff) => ({\n name: '',\n description: meta.header.description,\n language: meta.header.originalLanguage?.toUpperCase(),\n masterLanguage: meta.header.originalLanguage?.toUpperCase(),\n bindingType: meta.bindingType,\n bindingTypeCategory: meta.bindingTypeCategory,\n services: meta.services,\n }),\n});\n","/**\n * MSAG (message class) handler for gCTS / AFF format.\n *\n * Metadata-only (no source): emits `<name>.msag.json` only\n * (metadata per msag-v1.json schema).\n *\n * {\n * formatVersion: \"1\",\n * header: { description, originalLanguage },\n * messages: [{ number?: string, text?: string }]\n * }\n */\n\nimport { createHandler } from '../base';\nimport type { MsagAff } from '../../../schemas/generated';\n\ntype MsagLike = {\n name: string;\n description?: string;\n originalLanguage?: string;\n messages?: Array<{ number?: string; text?: string }>;\n};\n\nexport const messageClassHandler = createHandler('MSAG', {\n toMetadata(obj: MsagLike): MsagAff {\n const lang = (obj.originalLanguage ?? '').toLowerCase();\n return {\n formatVersion: '1',\n header: {\n description: obj.description ?? obj.name ?? '',\n originalLanguage: lang,\n },\n messages: obj.messages ?? [],\n } as MsagAff;\n },\n\n fromMetadata: (meta: MsagAff) => ({\n name: '',\n description: meta.header.description,\n language: meta.header.originalLanguage?.toUpperCase(),\n masterLanguage: meta.header.originalLanguage?.toUpperCase(),\n messages: meta.messages,\n }),\n});\n","/**\n * Generic AFF handler stubs for the remaining object types.\n *\n * Wave 2 mass-registers handlers for all AFF types that have JSON schemas\n * but no dedicated handler. Each stub runs the schema-aware generic\n * emit/parse from `../../aff/generic`: the `{formatVersion, header}`\n * envelope at the type's latest schema version plus every top-level body\n * property present in the payload — schema-valid whenever the payload is.\n *\n * Types needing semantic mapping, source companions, or special file\n * shapes graduate to a dedicated file (like clas.ts, ddls.ts, …).\n *\n * All types here are registered via the string-type form of\n * `createHandler` — no ADK class required.\n */\n\nimport { createHandler } from '../base';\nimport {\n genericFromMetadata,\n genericGetExtraFiles,\n genericGetSources,\n genericSetSources,\n genericToMetadata,\n type GenericAffLike,\n type MinimalAff,\n} from '../../aff/generic';\n\ntype GenericLike = GenericAffLike;\n\n/**\n * Remaining AFF types with schemas but no dedicated handler.\n * Each is registered with the same minimal toMetadata/fromMetadata.\n */\nconst WAVE2_TYPES = [\n 'ADVC',\n 'AIFA',\n 'AIFD',\n 'AIFF',\n 'AIFI',\n 'AIFN',\n 'AIFP',\n 'AIFR',\n 'AOBJ',\n 'APIC',\n 'APLO',\n 'APOB',\n 'BGQC',\n 'CDBO',\n 'CFDF',\n 'CHDO',\n 'CHKC',\n 'CHKO',\n 'CHKV',\n 'COTA',\n 'CSNM',\n 'DCAT',\n 'DDLA',\n 'DDLX',\n 'DESD',\n 'DMON',\n 'DOBJ',\n 'DRAS',\n 'DRTY',\n 'DSFD',\n 'DSFI',\n 'DTDC',\n 'DTEB',\n 'DTIX',\n 'DTSC',\n 'EDCC',\n 'EDCK',\n 'EDCR',\n 'EDOI',\n 'EEEC',\n 'ENHO',\n 'ENHS',\n 'ENQU',\n 'EVTB',\n 'EVTO',\n 'GSMP',\n 'HTTP',\n 'ILMB',\n 'INTM',\n 'INTS',\n 'IWNG',\n 'NONT',\n 'NROB',\n 'NTTA',\n 'NTTY',\n 'RONT',\n 'RVBC',\n 'SAIA',\n 'SAJC',\n 'SAJT',\n 'SCP1',\n 'SFPF',\n 'SIAD',\n 'SITO',\n 'SMBC',\n 'SMTG',\n 'SPRV',\n 'SRVC',\n 'SUCO',\n 'SUSI',\n 'SWCR',\n 'SXTG',\n 'UIAD',\n 'UIPG',\n 'UIST',\n];\n\nfor (const type of WAVE2_TYPES) {\n createHandler<GenericLike, MinimalAff>(type, {\n toMetadata: genericToMetadata(type.toLowerCase()),\n getSources: genericGetSources,\n getExtraFiles: genericGetExtraFiles(type.toLowerCase()),\n fromMetadata: genericFromMetadata,\n setSources: genericSetSources,\n });\n}\n","/**\n * gCTS / AFF FormatPlugin.\n *\n * Thin adapter that plugs the gCTS handler registry into the generic\n * `FormatPlugin` contract defined by `@abapify/adt-plugin`. External\n * consumers (adt-export, adt-diff, adt-cli) interact with this plugin\n * through the registry only — they look it up with\n * `getFormatPlugin('gcts')` and never import this package directly.\n *\n * Registration happens as a side-effect of importing\n * `@abapify/adt-plugin-gcts` (`src/index.ts`).\n */\n\nimport type { FormatPlugin, FormatHandler } from '@abapify/adt-plugin';\nimport { getHandler, getSupportedTypes } from '../handlers/base';\nimport '../handlers/objects';\nimport { parseGctsFilename } from './filename';\n\nexport const gctsFormatPlugin: FormatPlugin = {\n id: 'gcts',\n description:\n 'gCTS / AFF (abap-file-formats) serialization format (JSON metadata + .abap/.acds sources)',\n\n get supportedTypes(): ReadonlyArray<string> {\n return getSupportedTypes();\n },\n\n getHandler(type: string): FormatHandler | undefined {\n return getHandler(type) as unknown as FormatHandler | undefined;\n },\n\n parseFilename(filename: string) {\n return parseGctsFilename(filename);\n },\n};\n\nexport default gctsFormatPlugin;\n","/**\n * gCTS / AFF Deserializer — disk → ADK (format.export direction).\n *\n * Reads a gCTS-shaped file tree and yields `AdkObject` instances that the\n * `CheckinService` (E08) drives through the regular diff / plan / apply\n * pipeline. This is the counterpart to the serializer implemented in\n * `gcts-plugin.ts` (SAP → disk / format.import).\n *\n * Layout (matches the writer in `gcts-plugin.ts`):\n *\n * src/<pkg-lowercased>/<obj>.<type>.json metadata (AFF JSON)\n * src/<pkg-lowercased>/<obj>.<type>[.<sfx>].abap ABAP sources (and\n * .asddls / .asdcls for\n * CDS).\n * src/<pkg-lowercased>/package.devc.json package metadata (skipped\n * — packages must exist on\n * target, same convention\n * as abapGit).\n *\n * Unlike abapGit this plugin has no `.abapgit.xml` equivalent — AFF does not\n * encode folder-logic. We therefore rely on `options.rootPackage` (or\n * leave `packageRef` unset so downstream apply logic can decide) — no\n * guesswork per directory for now. Richer directory → package mapping is\n * tracked in the E06 follow-ups.\n */\n\nimport type { FileTree, ExportOptions } from '@abapify/adt-plugin';\nimport { createAdk, type AdkObject, type AdtClient } from '@abapify/adk';\nimport {\n getHandler,\n getSupportedTypes,\n type GctsHandler,\n} from './handlers/base';\nimport {\n parseGctsFilename,\n PACKAGE_FILENAME,\n sourceKey,\n} from './format/filename';\n\n/** Source-file extensions emitted by gCTS handlers. `.properties`\n * translation files are deliberately excluded — they are companions\n * routed into `data.properties`, never ABAP source staging. */\nconst SOURCE_EXTENSIONS = new Set([\n 'abap',\n 'asddls',\n 'asdcls',\n 'acds',\n 'abdl',\n 'csn',\n 'xdp',\n 'ddic',\n 'xml',\n]);\n\n/**\n * Map numeric abapLanguageVersion codes (`'5'` etc.) to the descriptive\n * string the ADT REST API expects (`'cloudDevelopment'`). Mirrors the\n * helper in `adt-plugin-abapgit` — kept local so this package does not\n * depend on its sibling.\n */\nconst ABAP_LANG_VER_TO_ADT: Record<string, string> = {\n '2': 'keyUser',\n '5': 'cloudDevelopment',\n};\n\nfunction abapLangVerToAdt(code: string | undefined): string | undefined {\n if (!code) return undefined;\n return ABAP_LANG_VER_TO_ADT[code] ?? code;\n}\n\ninterface ObjectFiles {\n name: string;\n type: string;\n metadataFile?: string;\n sourceFiles: Array<{ path: string; suffix?: string; ext?: string }>;\n /** `{name}.{type}.{docu}.json` companion — not the metadata anchor. */\n docuFile?: string;\n /** `.properties` translations keyed by suffix (`en`, `texts.en`, `''`). */\n propertyFiles: Array<{ path: string; suffix?: string }>;\n}\n\n/**\n * Deserialise a gCTS/AFF file tree into `AdkObject` instances.\n *\n * @param fileTree Virtual FS abstraction (checkin supplies a real-fs impl).\n * @param client `AdtClient` — required by `createAdk` to build ADK objects.\n * @param options Export options. `rootPackage` is assigned as packageRef\n * to every discovered object that lacks one, mirroring the\n * abapGit behaviour when `.abapgit.xml` is absent.\n */\nexport async function* deserialize(\n fileTree: FileTree,\n client: AdtClient,\n options?: ExportOptions,\n): AsyncGenerator<AdkObject> {\n const adk = createAdk(client);\n\n // Scan every JSON file — these are the anchors for each object.\n const jsonFiles = await fileTree.glob('**/*.json');\n\n const supportedTypes = new Set(\n getSupportedTypes().map((t) => t.toLowerCase()),\n );\n\n const objectMap = new Map<string, ObjectFiles>();\n\n for (const jsonPath of jsonFiles) {\n const filename = jsonPath.split('/').pop()!;\n\n // Packages are NOT deployed (same convention as abapGit's\n // package.devc.xml) — they must exist on target.\n if (filename === PACKAGE_FILENAME) continue;\n\n const parsed = parseGctsFilename(filename);\n if (!parsed) continue;\n if (parsed.extension !== 'json') continue;\n if (!supportedTypes.has(parsed.type.toLowerCase())) continue;\n\n const key = `${parsed.name.toUpperCase()}:${parsed.type.toUpperCase()}`;\n if (!objectMap.has(key)) {\n objectMap.set(key, {\n name: parsed.name.toUpperCase(),\n type: parsed.type.toUpperCase(),\n sourceFiles: [],\n propertyFiles: [],\n });\n }\n // `{name}.{type}.docu.json` is a DOCU companion, not a second\n // metadata anchor — without this it can overwrite metadataFile\n // depending on glob order. Other suffixed `.json` companions (LIMU\n // sub-object metadata, `{sub}.{stype}`) flow through the source\n // pipeline with an explicit `json` ext marker.\n if (parsed.suffix === 'docu') {\n objectMap.get(key)!.docuFile = jsonPath;\n } else if (parsed.suffix) {\n objectMap.get(key)!.sourceFiles.push({\n path: jsonPath,\n suffix: parsed.suffix,\n ext: 'json',\n });\n continue;\n } else {\n objectMap.get(key)!.metadataFile = jsonPath;\n }\n }\n\n // `.properties` translation companions — routed into `data.properties`\n // so they round-trip through metadata, not source staging.\n for (const path of await fileTree.glob('**/*.properties')) {\n const filename = path.split('/').pop()!;\n const parsed = parseGctsFilename(filename);\n if (!parsed) continue;\n const key = `${parsed.name.toUpperCase()}:${parsed.type.toUpperCase()}`;\n objectMap.get(key)?.propertyFiles.push({ path, suffix: parsed.suffix });\n }\n\n // Collect every source file (.abap/.asddls/.asdcls) and group by name:type.\n for (const ext of SOURCE_EXTENSIONS) {\n const paths = await fileTree.glob(`**/*.${ext}`);\n for (const path of paths) {\n const filename = path.split('/').pop()!;\n const parsed = parseGctsFilename(filename);\n if (!parsed) continue;\n\n const key = `${parsed.name.toUpperCase()}:${parsed.type.toUpperCase()}`;\n const obj = objectMap.get(key);\n if (!obj) continue;\n\n obj.sourceFiles.push({\n path,\n suffix: parsed.suffix,\n ext: parsed.extension,\n });\n }\n }\n\n // Per-object pipeline: each worker claims the next object and reads\n // its metadata + companions through a shared throttle, so at most\n // MAX_CONCURRENT_READS file descriptors are open at once (no EMFILE).\n // Completed objects land in `pending` and are yielded in input order\n // as soon as they are ready, so memory stays bounded to the in-flight\n // objects plus the small not-yet-drained backlog — a large repository\n // no longer retains every companion at once. A failure inside one\n // object rejects only that object's task; other workers keep going,\n // mirroring the abapGit log-and-continue rule.\n const readThrottled = throttledReader(fileTree);\n const entries = [...objectMap.values()];\n const pending = new Map<number, AdkObject | undefined>();\n let wake: (() => void) | undefined;\n const notify = () => {\n const w = wake;\n wake = undefined;\n w?.();\n };\n let cursor = 0;\n const worker = async (): Promise<void> => {\n const index = cursor++;\n const objFiles = entries[index];\n if (!objFiles) return;\n pending.set(\n index,\n await buildObject(objFiles, readThrottled, adk, options),\n );\n notify();\n return worker();\n };\n const workersDone = Promise.all(\n Array.from(\n { length: Math.min(MAX_CONCURRENT_READS, entries.length) },\n worker,\n ),\n );\n let finished = false;\n void workersDone.then(() => {\n finished = true;\n notify();\n });\n\n // Ordered async iterator: `for await` yields each object as soon as\n // its index slot completes — objects drain in input order and the\n // buffer stays bounded to not-yet-yielded work.\n let drain = 0;\n const stream: AsyncIterable<AdkObject> = {\n [Symbol.asyncIterator]() {\n return {\n async next(): Promise<IteratorResult<AdkObject>> {\n if (pending.has(drain)) {\n const obj = pending.get(drain);\n pending.delete(drain++);\n return obj ? { value: obj, done: false } : this.next();\n }\n if (finished) return { value: undefined, done: true };\n await new Promise<void>((resolve) => {\n wake = resolve;\n });\n return this.next();\n },\n };\n },\n };\n for await (const obj of stream) yield obj;\n await workersDone;\n}\n\nconst MAX_CONCURRENT_READS = 32;\n\n/**\n * Throttled `fileTree.read` — caps concurrently open reads globally.\n * A finishing read hands its slot directly to the oldest waiter instead\n * of releasing it first, so a fresh caller can never sneak in and push\n * `inflight` past `limit`.\n */\nfunction throttledReader(\n fileTree: FileTree,\n limit = MAX_CONCURRENT_READS,\n): (path: string) => Promise<string> {\n let inflight = 0;\n const queue: (() => void)[] = [];\n return async (path: string) => {\n if (inflight >= limit) {\n // Wait for a slot to be handed over — inflight already counts it.\n await new Promise<void>((resolve) => queue.push(resolve));\n } else {\n inflight++;\n }\n try {\n return await fileTree.read(path);\n } finally {\n const next = queue.shift();\n if (next) next();\n else inflight--;\n }\n };\n}\n\n/** Read one object's files and build its ADK object, or undefined. */\nasync function buildObject(\n objFiles: ObjectFiles,\n read: (path: string) => Promise<string>,\n adk: ReturnType<typeof createAdk>,\n options?: ExportOptions,\n): Promise<AdkObject | undefined> {\n if (!objFiles.metadataFile) return undefined;\n const handler = getHandler(objFiles.type);\n if (!handler) return undefined;\n try {\n const companionPaths = [\n ...(objFiles.docuFile ? [objFiles.docuFile] : []),\n ...objFiles.propertyFiles.map((f) => f.path),\n ...objFiles.sourceFiles.map((f) => f.path),\n ];\n const [raw, ...companions] = await Promise.all(\n [objFiles.metadataFile, ...companionPaths].map(read),\n );\n const contents = new Map<string, string>();\n companionPaths.forEach((path, i) => contents.set(path, companions[i]!));\n // Handler schema.parse is plain JSON.parse — the parsed object IS the\n // metadata passed to fromMetadata.\n const metadata = handler.schema.parse(raw);\n return objectFromFiles(objFiles, handler, metadata, contents, adk, options);\n } catch (error) {\n // Mirrors abapGit: log and continue so one bad object does not abort\n // the whole checkin.\n console.error(\n `Failed to deserialize ${objFiles.type} ${objFiles.name}:`,\n error,\n );\n return undefined;\n }\n}\n\n/**\n * Read the collected source/companion files into a source-key map.\n * Companions whose extension differs from the type's default encode it\n * into the key (`{suffix}.{ext}`) — LIMU `.json` metadata and\n * `.properties` texts stay distinguishable from `.abap` sources.\n */\nfunction collectSources(\n objFiles: ObjectFiles,\n handler: GctsHandler,\n contents: ReadonlyMap<string, string>,\n): Record<string, string> {\n const sources: Record<string, string> = {};\n for (const { path, suffix, ext } of objFiles.sourceFiles) {\n const content = contents.get(path);\n if (content === undefined) continue;\n let key: string;\n if (suffix) {\n key = sourceKey(\n objFiles.type,\n handler.suffixToSourceKey?.[suffix] ?? suffix,\n ext ?? '',\n );\n } else if (ext && ext !== 'json') {\n key = sourceKey(objFiles.type, 'main', ext);\n } else {\n key = 'main';\n }\n sources[key] = content;\n }\n return sources;\n}\n\n/**\n * Stage companion keys on an ADK object without a dedicated\n * `setSources` hook — everything lands on `_pendingSources` /\n * `_pendingSource` so the shared emit path in `base.ts` re-emits\n * LIMU/sub-object files instead of silently dropping them.\n */\nfunction stagePendingSources(\n adkObject: AdkObject,\n sources: Record<string, string>,\n): void {\n const staged = adkObject as unknown as {\n _pendingSource?: string;\n _pendingSources?: Record<string, string>;\n };\n const { main, ...rest } = sources;\n if (main !== undefined) staged._pendingSource = main;\n if (Object.keys(rest).length > 0) {\n staged._pendingSources = { ...staged._pendingSources, ...rest };\n }\n}\n\n/** Build the payload record: handler projection + docu + properties. */\nfunction buildPayload(\n objFiles: ObjectFiles,\n handler: GctsHandler,\n metadata: unknown,\n contents: ReadonlyMap<string, string>,\n): { name: string; description?: string; [key: string]: unknown } {\n const payload = (\n handler.fromAbapGit\n ? handler.fromAbapGit(metadata)\n : { name: objFiles.name }\n ) as { name: string; description?: string; [key: string]: unknown };\n\n // DOCU companion → `data.docu` (the shared emit path re-emits it).\n const docuRaw = objFiles.docuFile\n ? contents.get(objFiles.docuFile)\n : undefined;\n if (docuRaw !== undefined) {\n try {\n payload.docu = JSON.parse(docuRaw) as unknown;\n } catch {\n payload.docu = docuRaw;\n }\n }\n\n // `.properties` translations → `data.properties` keyed by suffix\n // ('' = master file, 'en', 'texts.en', …).\n if (objFiles.propertyFiles.length > 0) {\n const props: Record<string, string> = {};\n for (const { path, suffix } of objFiles.propertyFiles) {\n const content = contents.get(path);\n if (content !== undefined) props[suffix ?? ''] = content;\n }\n payload.properties = props;\n }\n return payload;\n}\n\n/** Merge `data.packageRef`/`abapLanguageVersion` fallbacks onto the object. */\nfunction applyOptionsFallbacks(\n adkObject: AdkObject,\n options?: ExportOptions,\n): void {\n const data = (adkObject as unknown as { _data?: Record<string, unknown> })\n ._data;\n if (!data) return;\n // Assign rootPackage to every object without a packageRef — no folder\n // logic available, so we cannot derive per-package assignments (see\n // E06 follow-ups). Matches abapGit's \"no .abapgit.xml\" fallback.\n if (options?.rootPackage && !data.packageRef) {\n data.packageRef = { name: options.rootPackage };\n }\n if (options?.abapLanguageVersion && !data.abapLanguageVersion) {\n data.abapLanguageVersion =\n abapLangVerToAdt(options.abapLanguageVersion) ??\n options.abapLanguageVersion;\n }\n}\n\n/** Metadata + collected files → a staged ADK object. */\nfunction objectFromFiles(\n objFiles: ObjectFiles,\n handler: GctsHandler,\n metadata: unknown,\n contents: ReadonlyMap<string, string>,\n adk: ReturnType<typeof createAdk>,\n options?: ExportOptions,\n): AdkObject {\n const sources = collectSources(objFiles, handler, contents);\n const payload = buildPayload(objFiles, handler, metadata, contents);\n\n // AFF metadata frequently omits the object name (it's encoded in the\n // filename). Fall back to the filename-derived name.\n const objectName = payload.name || objFiles.name;\n const fullData = { ...payload, name: objectName };\n\n const adkType =\n typeof payload.type === 'string' ? payload.type : objFiles.type;\n const adkObject = adk.getWithData(fullData, adkType) as AdkObject;\n\n if (Object.keys(sources).length > 0) {\n if (handler.setSources) {\n handler.setSources(adkObject, sources);\n } else {\n stagePendingSources(adkObject, sources);\n }\n }\n\n if (payload.description) {\n (\n adkObject as unknown as { _pendingDescription: string }\n )._pendingDescription = payload.description;\n }\n\n // Record relative directory (useful for future directory-based package\n // resolution). Plain metadata dir, no starting-folder normalisation —\n // gCTS does not define one.\n const sourceDir = objFiles.metadataFile!.split('/').slice(0, -1).join('/');\n (adkObject as unknown as { _relDir: string })._relDir = sourceDir;\n\n applyOptionsFallbacks(adkObject, options);\n return adkObject;\n}\n","/**\n * gCTS AdtPlugin.\n *\n * The `FormatPlugin` in `format/gcts-format.ts` provides the declarative\n * contract (used by registry consumers); this `AdtPlugin` provides the\n * behaviour expected by `adt-cli`'s higher-level import/export services.\n *\n * SAP → disk (\"import\") serialises ADK objects to AFF JSON + source files.\n * Disk → SAP (\"export\" in adt-cli terminology — Git → SAP direction) is\n * delegated to `./deserializer.ts`, which yields AdkObjects for the\n * `CheckinService` apply pipeline (E08). Together they close the\n * round-trip that the E06 v0.1 follow-ups called out.\n */\n\nimport { mkdirSync, writeFileSync } from 'node:fs';\nimport { dirname, join } from 'node:path';\nimport { createPlugin, type AdtPlugin } from '@abapify/adt-plugin';\nimport type { AdtClient } from '@abapify/adk';\nimport { getHandler, getSupportedTypes, isSupported } from './handlers/base';\nimport './handlers/objects';\nimport { deserialize } from './deserializer';\n\nexport const gctsPlugin: AdtPlugin = createPlugin({\n name: 'gcts',\n version: '0.1.0',\n description: 'gCTS / AFF format plugin — JSON metadata + .abap/.acds sources',\n\n registry: {\n isSupported,\n getSupportedTypes,\n },\n\n format: {\n async import(object, targetPath, context) {\n try {\n const isPackage = object.type?.startsWith('DEVC');\n const objPackage = isPackage\n ? object.name\n : (object as { package?: string }).package || object.name || 'ROOT';\n const packagePath = await context.resolvePackagePath(objPackage);\n\n // gCTS layout: flat per-package directory under src/<package-path>/.\n // Object files live directly inside their package dir (no extra\n // per-object subdirectory — matches AFF's default \"flat\" layout).\n const packageDir = packagePath.map((p) => p.toLowerCase()).join('/');\n\n const handler = getHandler(object.type);\n if (!handler) {\n return {\n success: false,\n filesCreated: [],\n errors: [\n `No gCTS handler registered for object type: ${object.type}`,\n ],\n };\n }\n\n const files = await handler.serialize(object as unknown as never);\n const baseDir = join(targetPath, 'src', packageDir);\n mkdirSync(baseDir, { recursive: true });\n\n const written: string[] = [];\n for (const f of files) {\n const full = join(baseDir, f.path);\n mkdirSync(dirname(full), { recursive: true });\n writeFileSync(full, f.content, f.encoding ?? 'utf8');\n written.push(full);\n }\n\n return { success: true, filesCreated: written };\n } catch (error) {\n return {\n success: false,\n filesCreated: [],\n errors: [error instanceof Error ? error.message : String(error)],\n };\n }\n },\n\n // Git → SAP: deserialise a gCTS/AFF file tree into AdkObjects. The\n // apply pipeline (diff/plan/lock/save) lives in CheckinService — this\n // plugin only knows how to decode its own on-disk layout.\n export: (fileTree, client, options?) =>\n deserialize(fileTree, client as AdtClient, options),\n },\n});\n\nexport default gctsPlugin;\nexport { gctsPlugin as GctsPlugin };\n","/**\n * Auto-generated from SAP/abap-file-formats JSON schemas.\n * Do not edit — regenerate with `bun scripts/generate-aff-schemas.ts`.\n */\n/**\n * Format version\n */\nexport type FormatVersion = \"1\"\n/**\n * Description of the ABAP object\n */\nexport type Description = string\n/**\n * Original language of the ABAP object\n */\nexport type OriginalLanguage = string\n/**\n * ABAP language version\n */\nexport type ABAPLanguageVersion = (\"standard\" | \"keyUser\" | \"cloudDevelopment\")\n\n/**\n * App variant\n */\nexport interface AffAdvcV1 {\nformatVersion: FormatVersion\nheader: Header\n}\n/**\n * Header\n */\nexport interface Header {\ndescription: Description\noriginalLanguage: OriginalLanguage\nabapLanguageVersion?: ABAPLanguageVersion\n}\n\nexport type AdvcAff = AffAdvcV1;\n","/**\n * Auto-generated from SAP/abap-file-formats JSON schemas.\n * Do not edit — regenerate with `bun scripts/generate-aff-schemas.ts`.\n */\n/**\n * The ABAP file format version\n */\nexport type ABAPFileFormatVersion = \"1\"\n/**\n * Description of the ABAP object\n */\nexport type Description = string\n/**\n * Original language of the ABAP object\n */\nexport type OriginalLanguage = string\n/**\n * ABAP language version\n */\nexport type ABAPLanguageVersion = (\"standard\" | \"cloudDevelopment\")\n/**\n * Namespace\n */\nexport type Namespace = string\n/**\n * AIF action\n */\nexport type AIFAction = string\n/**\n * Main component type\n */\nexport type MainComponentType = string\n/**\n * Implementing class\n */\nexport type ImplementingClass = string\n/**\n * Name\n */\nexport type Name = string\n/**\n * Fields to restore\n */\nexport type FieldsToRestore = FieldToRestore[]\n/**\n * ID\n */\nexport type ID = string\n/**\n * Check\n */\nexport type Check = string\n/**\n * Check behavior\n */\nexport type CheckBehavior = (\"treatAsError\" | \"ignoreData\")\n/**\n * Type\n */\nexport type Type = (\"sourceStructure\" | \"destinationStructure\" | \"constant\" | \"systemField\" | \"sendingSystem\" | \"currentLineNumber\" | \"hierarchicalMapping\")\n/**\n * Name\n */\nexport type Name1 = string\n/**\n * Value\n */\nexport type Value = string\n/**\n * Fields\n */\nexport type Fields = FieldsToCheck[]\n/**\n * Checks\n */\nexport type Checks = CheckDetails[]\n\n/**\n * Action\n */\nexport interface AffAifaV1 {\nformatVersion: ABAPFileFormatVersion\nheader: Header\ngeneralInformation: GeneralInformation\nfieldsToRestore?: FieldsToRestore\nchecks?: Checks\n}\n/**\n * Header\n */\nexport interface Header {\ndescription: Description\noriginalLanguage: OriginalLanguage\nabapLanguageVersion?: ABAPLanguageVersion\n}\n/**\n * General information\n */\nexport interface GeneralInformation {\nnamespace: Namespace\naifAction: AIFAction\nmainComponentType?: MainComponentType\nimplementingClass?: ImplementingClass\n}\n/**\n * Field to restore\n */\nexport interface FieldToRestore {\nname?: Name\n}\n/**\n * Check details\n */\nexport interface CheckDetails {\nid: ID\ncheck: Check\ncheckBehaviour?: CheckBehavior\nfields?: Fields\n}\n/**\n * Field to check\n */\nexport interface FieldsToCheck {\ntype?: Type\nname?: Name1\nvalue?: Value\n}\n\nexport type AifaAff = AffAifaV1;\n","/**\n * Auto-generated from SAP/abap-file-formats JSON schemas.\n * Do not edit — regenerate with `bun scripts/generate-aff-schemas.ts`.\n */\n/**\n * The ABAP file format version\n */\nexport type ABAPFileFormatVersion = \"1\"\n/**\n * Description of the ABAP object\n */\nexport type Description = string\n/**\n * Original language of the ABAP object\n */\nexport type OriginalLanguage = string\n/**\n * ABAP language version\n */\nexport type ABAPLanguageVersion = (\"standard\" | \"cloudDevelopment\")\n/**\n * Application interface\n */\nexport type ApplicationInterface1 = string\n/**\n * Application interfaces\n */\nexport type ApplicationInterfaces = ApplicationInterface[]\n\n/**\n * Deployment scenario\n */\nexport interface AffAifdV1 {\nformatVersion: ABAPFileFormatVersion\nheader: Header\napplicationInterfaces: ApplicationInterfaces\n}\n/**\n * Header\n */\nexport interface Header {\ndescription: Description\noriginalLanguage: OriginalLanguage\nabapLanguageVersion?: ABAPLanguageVersion\n}\n/**\n * Application interface\n */\nexport interface ApplicationInterface {\napplicationInterface: ApplicationInterface1\n}\n\nexport type AifdAff = AffAifdV1;\n","/**\n * Auto-generated from SAP/abap-file-formats JSON schemas.\n * Do not edit — regenerate with `bun scripts/generate-aff-schemas.ts`.\n */\n/**\n * The ABAP file format version\n */\nexport type ABAPFileFormatVersion = \"1\"\n/**\n * Description of the ABAP object\n */\nexport type Description = string\n/**\n * Original language of the ABAP object\n */\nexport type OriginalLanguage = string\n/**\n * ABAP language version\n */\nexport type ABAPLanguageVersion = (\"standard\" | \"cloudDevelopment\")\n/**\n * Namespace\n */\nexport type Namespace = string\n/**\n * AIF fix value\n */\nexport type AIFFixValue = string\n/**\n * Field value\n */\nexport type FieldValue = string\n\n/**\n * Fix value\n */\nexport interface AffAiffV1 {\nformatVersion: ABAPFileFormatVersion\nheader: Header\ngeneralInformation: GeneralInformation\n}\n/**\n * Header\n */\nexport interface Header {\ndescription: Description\noriginalLanguage: OriginalLanguage\nabapLanguageVersion?: ABAPLanguageVersion\n}\n/**\n * General information\n */\nexport interface GeneralInformation {\nnamespace: Namespace\naifFixValue: AIFFixValue\nfieldValue?: FieldValue\n}\n\nexport type AiffAff = AffAiffV1;\n","/**\n * Auto-generated from SAP/abap-file-formats JSON schemas.\n * Do not edit — regenerate with `bun scripts/generate-aff-schemas.ts`.\n */\n/**\n * The ABAP file format version\n */\nexport type ABAPFileFormatVersion = \"1\"\n/**\n * Description of the ABAP object\n */\nexport type Description = string\n/**\n * Original language of the ABAP object\n */\nexport type OriginalLanguage = string\n/**\n * ABAP language version\n */\nexport type ABAPLanguageVersion = (\"standard\" | \"cloudDevelopment\")\n/**\n * Integration type\n */\nexport type IntegrationType = string\n/**\n * Scenario\n */\nexport type Scenario = string\n/**\n * SOAP class\n */\nexport type SOAPClass = string\n/**\n * SOAP method\n */\nexport type SOAPMethod = string\n/**\n * SOAP record type\n */\nexport type SOAPRecordType = string\n/**\n * Use proxy xml transformation\n */\nexport type ProxyXMLTransformation = boolean\n/**\n * Extend xml handling\n */\nexport type ExtendXMLHandling = boolean\n/**\n * Repository id\n */\nexport type RepositoryID = string\n/**\n * Registration id\n */\nexport type RegistrationID = string\n/**\n * Registration version\n */\nexport type RegistrationVersion = string\n/**\n * Topic\n */\nexport type Topic = string\n/**\n * Operation id\n */\nexport type OperationID = string\n/**\n * Operation variant id\n */\nexport type OperationVariantID = string\n/**\n * Operation variant\n */\nexport type OperationVariant = string\n/**\n * Namespace\n */\nexport type Namespace = string\n/**\n * AIF interface name\n */\nexport type AIFInterfaceName = string\n/**\n * AIF interface version\n */\nexport type AIFInterfaceVersion = string\n/**\n * Data structure\n */\nexport type DataStructure = string\n/**\n * Mapped data structure\n */\nexport type MappedDataStructure = string\n/**\n * Index table\n */\nexport type IndexTable = string\n/**\n * Interface display name\n */\nexport type InterfaceDisplayName = string\n/**\n * Retention period\n */\nexport type RetentionPeriod = string\n/**\n * Expiration_behavior\n */\nexport type ExpirationBehavior = (\"delete\" | \"archive\")\n/**\n * Path for sending system in data structure\n */\nexport type SendingSystem = string\n/**\n * Direction\n */\nexport type Direction = (\"inbound\" | \"outbound\" | \"both\" | \"internal\")\n/**\n * Preprocessing\n */\nexport type Preprocessing = boolean\n/**\n * Postprocessing\n */\nexport type Postprocessing = boolean\n/**\n * Recipient\n */\nexport type Recipient1 = string\n/**\n * Recipient assignment\n */\nexport type RecipientAssignment = Recipient[]\n/**\n * Sequence\n */\nexport type Sequence = string\n/**\n * Component\n */\nexport type Component = string\n/**\n * Changeable\n */\nexport type Changeable = boolean\n/**\n * Hidden\n */\nexport type Hidden = boolean\n/**\n * Use ddic description?\n */\nexport type UseDDIC = boolean\n/**\n * Description\n */\nexport type Description1 = string\n/**\n * Short text\n */\nexport type ShortText = string\n/**\n * Medium text\n */\nexport type MediumText = string\n/**\n * Long text\n */\nexport type LongText = string\n/**\n * Error handling configuration\n */\nexport type ErrorHandlingConfiguration = ErrorHandlingConfiguration1[]\n/**\n * Application engine\n */\nexport type ApplicationEngine = string\n/**\n * Persistency engine\n */\nexport type PersistencyEngine = string\n/**\n * Selection engine\n */\nexport type SelectionEngine = string\n/**\n * Logging engine\n */\nexport type LoggingEngine = string\n/**\n * Key field name\n */\nexport type Name = string\n/**\n * Data element\n */\nexport type DataElement = string\n/**\n * Name of select-option/parameter\n */\nexport type NameOfSelectOptionParameter = string\n/**\n * Field name in define key fields\n */\nexport type FieldName = string\n/**\n * Structure type (source or destination)\n */\nexport type StructureType = (\"sourceStructure\" | \"destinationStructure\")\n/**\n * Is select-option?\n */\nexport type SelectOption = boolean\n/**\n * Display the column\n */\nexport type DisplayColumn = boolean\n/**\n * Enable key field qualifier?\n */\nexport type EnableKeyFieldQualifier = boolean\n/**\n * Qualifier field name\n */\nexport type QualifierFieldName = string\n/**\n * Qualifier operator\n */\nexport type QualifierOperator = (\"equals\" | \"between\" | \"greaterThan\" | \"containsPattern\" | \"notEqual\" | \"notBetween\" | \"notContainsPattern\" | \"greaterEqual\" | \"lessThan\" | \"lessEqual\")\n/**\n * Qualifier value\n */\nexport type QualifierValue = string\n/**\n * Selection type\n */\nexport type SelectionType = (\"single\" | \"multiple\" | \"document\")\n/**\n * Message index table\n */\nexport type MessageIndexTable = string\n/**\n * Parent field sequence number\n */\nexport type ParentFieldSequenceNumber = string\n/**\n * Icon\n */\nexport type Icon = string\n/**\n * Icon tooltip\n */\nexport type IconTooltip = string\n/**\n * Field name in alert recipient assignment table\n */\nexport type AlertRecipientFieldName = string\n/**\n * Category field name\n */\nexport type CategoryFieldName = string\n/**\n * Show tree node in view 1 tree\n */\nexport type ShowTreeNode = boolean\n/**\n * Relevant for alert recipient determination\n */\nexport type RelevantForAlertRecipientDetermination = boolean\n/**\n * Rule Key field name\n */\nexport type Name1 = string\n/**\n * Field sequence number\n */\nexport type FieldSequenceNumber = string\n/**\n * Rule key fields\n */\nexport type RuleKeyFields = RuleKeyField[]\n/**\n * Key Field Rule class\n */\nexport type KeyFieldRuleClass = string\n/**\n * Key field rule method\n */\nexport type KeyFieldRuleMethod = string\n/**\n * Semantic object\n */\nexport type SemanticObject = string\n/**\n * Semantic action\n */\nexport type SemanticAction = string\n/**\n * Display in message monitoring\n */\nexport type DisplayInMessageMonitoring = boolean\n/**\n * Display in message monitoring by default\n */\nexport type DisplayInMessageMonitoringByDefault = boolean\n/**\n * Key fields\n */\nexport type KeyFields = KeyFieldDetails[]\n\n/**\n * Application interface\n */\nexport interface AffAifiV1 {\nformatVersion: ABAPFileFormatVersion\nheader: Header\ngeneralInformation: GeneralInformation\nrecipientAssignment: RecipientAssignment\nerrorHandlingConfigs: ErrorHandlingConfiguration\nengines: Engines\nkeyFields: KeyFields\n}\n/**\n * Header\n */\nexport interface Header {\ndescription: Description\noriginalLanguage: OriginalLanguage\nabapLanguageVersion?: ABAPLanguageVersion\n}\n/**\n * General information\n */\nexport interface GeneralInformation {\nintegrationType?: IntegrationType\nscenario?: Scenario\nsoapSettings?: SOAPSettings\neventSettings?: EventSettings\nbgpfSettings?: BgPFSettings\nnamespace?: Namespace\ninterfaceName?: AIFInterfaceName\ninterfaceVersion?: AIFInterfaceVersion\ndataStructure: DataStructure\nmappedDataStructure?: MappedDataStructure\nindexTable: IndexTable\ndisplayName?: InterfaceDisplayName\nretentionPeriod?: RetentionPeriod\nexpirationBehavior?: ExpirationBehavior\nsendingSystem?: SendingSystem\ndirection?: Direction\nusesPreprocessing?: Preprocessing\nusesPostprocesssing?: Postprocessing\n}\n/**\n * SOAP settings\n */\nexport interface SOAPSettings {\nsoapClass: SOAPClass\nsoapMethod: SOAPMethod\nsoapRecordType: SOAPRecordType\nusesProxyXmlTransformation?: ProxyXMLTransformation\nusesExtendedXmlHandling?: ExtendXMLHandling\n}\n/**\n * Event settings\n */\nexport interface EventSettings {\nrepositoryId: RepositoryID\nregistrationId: RegistrationID\nregistrationVersion: RegistrationVersion\ntopic: Topic\n}\n/**\n * Background processing framework settings\n */\nexport interface BgPFSettings {\noperationId: OperationID\noperationVariantId: OperationVariantID\noperationVariant: OperationVariant\n}\n/**\n * Recipient\n */\nexport interface Recipient {\nrecipient: Recipient1\n}\n/**\n * Error handling configuration\n */\nexport interface ErrorHandlingConfiguration1 {\nsequence: Sequence\ncomponent: Component\nisChangeable?: Changeable\nisHidden?: Hidden\nusesDdic?: UseDDIC\ndescription?: Description1\nshortText?: ShortText\nmediumText?: MediumText\nlongText?: LongText\n}\n/**\n * Engines\n */\nexport interface Engines {\napplicationEngine?: ApplicationEngine\npersistencyEngine?: PersistencyEngine\nselectionEngine?: SelectionEngine\nloggingEngine?: LoggingEngine\n}\n/**\n * Key field details\n */\nexport interface KeyFieldDetails {\nname: Name\ndataElement: DataElement\nselectOptionName?: NameOfSelectOptionParameter\nfieldName?: FieldName\nstructureType?: StructureType\nisSelectOption?: SelectOption\nisColumnDisplay?: DisplayColumn\nkeyFieldQualifier?: KeyFieldDeterminationByQualifier\nkeyFieldSelection?: KeyFieldSelection\nkeyFieldRule?: KeyFieldRule\nfioriFeatures?: SAPFioriFeatures\n}\n/**\n * Key field determination by qualifier\n */\nexport interface KeyFieldDeterminationByQualifier {\nusesQualifier?: EnableKeyFieldQualifier\nqualifierFieldName?: QualifierFieldName\nqualifierOperator?: QualifierOperator\nqualifierValue?: QualifierValue\n}\n/**\n * Key field selection type and settings\n */\nexport interface KeyFieldSelection {\nselectionType?: SelectionType\nmessageIndexTable?: MessageIndexTable\nparentFieldSequence?: ParentFieldSequenceNumber\nicon?: Icon\niconTooltip?: IconTooltip\nalertFieldName?: AlertRecipientFieldName\ncategoryFieldName?: CategoryFieldName\nisTreeNodeVisible?: ShowTreeNode\nisAlertRecipientRelevant?: RelevantForAlertRecipientDetermination\n}\n/**\n * Key field rule\n */\nexport interface KeyFieldRule {\nruleKeyFields?: RuleKeyFields\nruleClass?: KeyFieldRuleClass\nruleMethod?: KeyFieldRuleMethod\n}\n/**\n * Rule key field\n */\nexport interface RuleKeyField {\nname?: Name1\nfieldSequnceNumber?: FieldSequenceNumber\n}\n/**\n * SAP Fiori specific features\n */\nexport interface SAPFioriFeatures {\nsemanticObject?: SemanticObject\nsemanticAction?: SemanticAction\nisShownInMessageMonitor?: DisplayInMessageMonitoring\nisShownByDefault?: DisplayInMessageMonitoringByDefault\n}\n\nexport type AifiAff = AffAifiV1;\n","/**\n * Auto-generated from SAP/abap-file-formats JSON schemas.\n * Do not edit — regenerate with `bun scripts/generate-aff-schemas.ts`.\n */\n/**\n * The ABAP file format version\n */\nexport type ABAPFileFormatVersion = \"1\"\n/**\n * Description of the ABAP object\n */\nexport type Description = string\n/**\n * Original language of the ABAP object\n */\nexport type OriginalLanguage = string\n/**\n * ABAP language version\n */\nexport type ABAPLanguageVersion = (\"standard\" | \"cloudDevelopment\")\n/**\n * AIF namespace\n */\nexport type AIFNamespace = string\n\n/**\n * Namespace\n */\nexport interface AffAifnV1 {\nformatVersion: ABAPFileFormatVersion\nheader: Header\ngeneralInformation: GeneralInformation\n}\n/**\n * Header\n */\nexport interface Header {\ndescription: Description\noriginalLanguage: OriginalLanguage\nabapLanguageVersion?: ABAPLanguageVersion\n}\n/**\n * General information\n */\nexport interface GeneralInformation {\naifNamespace?: AIFNamespace\n}\n\nexport type AifnAff = AffAifnV1;\n","/**\n * Auto-generated from SAP/abap-file-formats JSON schemas.\n * Do not edit — regenerate with `bun scripts/generate-aff-schemas.ts`.\n */\n/**\n * The ABAP file format version\n */\nexport type ABAPFileFormatVersion = \"1\"\n/**\n * Description of the ABAP object\n */\nexport type Description = string\n/**\n * Original language of the ABAP object\n */\nexport type OriginalLanguage = string\n/**\n * ABAP language version\n */\nexport type ABAPLanguageVersion = (\"standard\" | \"cloudDevelopment\")\n/**\n * Namespace of the check\n */\nexport type Namespace = string\n/**\n * SAP Application Interface check\n */\nexport type AIFCheck = string\n/**\n * Message class\n */\nexport type MessageClass = string\n/**\n * Message number\n */\nexport type MessageNumber = string\n/**\n * Number\n */\nexport type Number = number\n/**\n * Type\n */\nexport type Type = (\"constant\" | \"systemField\" | \"definedField\")\n/**\n * Field\n */\nexport type Field = string\n/**\n * Value\n */\nexport type Value = string\n/**\n * Message variable assignments\n */\nexport type MessageVariableAssignments = VariableList[]\n/**\n * Description\n */\nexport type Description1 = string\n/**\n * ID\n */\nexport type ID = string\n/**\n * Scenario\n */\nexport type Scenario = (\"simpleFieldCheck\" | \"advancedFieldCheck\" | \"simpleFieldAndDbCheck\" | \"advancedFieldAndDbCheck\" | \"databaseCheck\" | \"customImplementation\")\n/**\n * Check type\n */\nexport type CheckType = (\"empty\" | \"notEmpty\" | \"emptyOrZero\" | \"numericInteger\" | \"numericEmpty\" | \"numericNegative\" | \"numericComma\" | \"numericDot\" | \"onlyCharsCapital\" | \"onlyCharsLower\" | \"onlyChars\" | \"alphanumericSpecialUmlaut\")\n/**\n * Operator for field check\n */\nexport type Operator = (\"equals\" | \"between\" | \"greaterThan\" | \"containsPattern\" | \"notEqual\" | \"notBetween\" | \"notContainsPattern\" | \"greaterEqual\" | \"lessThan\" | \"lessEqual\")\n/**\n * Field type\n */\nexport type FieldType = (\"definedField\" | \"pattern\" | \"systemField\")\n/**\n * Field\n */\nexport type Field1 = string\n/**\n * Value or pattern for Field Check\n */\nexport type Value1 = string\n/**\n * Table\n */\nexport type Table = string\n/**\n * Where Condition for Select Statement\n */\nexport type WhereConditionForSelectStatement = string\n/**\n * Check type\n */\nexport type CheckType1 = (\"checkExistence\" | \"checkNonExistence\" | \"compare\")\n/**\n * Field Name for Comparison\n */\nexport type FieldNameForComparison = string\n/**\n * Operator for database check\n */\nexport type Operator1 = (\"equals\" | \"between\" | \"greaterThan\" | \"containsPattern\" | \"notEqual\" | \"notBetween\" | \"notContainsPattern\" | \"greaterEqual\" | \"lessThan\" | \"lessEqual\")\n/**\n * Field type\n */\nexport type FieldType1 = (\"definedField\" | \"pattern\" | \"systemField\")\n/**\n * Field\n */\nexport type Field2 = string\n/**\n * Value or pattern for database check\n */\nexport type Value2 = string\n/**\n * Class name for check\n */\nexport type Class = string\n/**\n * Message class\n */\nexport type MessageClass1 = string\n/**\n * Message number\n */\nexport type MessageNumber1 = string\n/**\n * Number\n */\nexport type Number1 = number\n/**\n * Type\n */\nexport type Type1 = (\"constant\" | \"systemField\" | \"definedField\")\n/**\n * Field\n */\nexport type Field3 = string\n/**\n * Value\n */\nexport type Value3 = string\n/**\n * Message variable assignments\n */\nexport type MessageVariableAssignments1 = VariableList1[]\n/**\n * Single check assignments\n */\nexport type SingleCheckAssignments = SingleCheck[]\n\n/**\n * Check\n */\nexport interface AffAifpV1 {\nformatVersion: ABAPFileFormatVersion\nheader: Header\ngeneralInformation: GeneralInformation\nerrorMessage?: ErrorMessage\nsingleCheckAssignments: SingleCheckAssignments\n}\n/**\n * Header\n */\nexport interface Header {\ndescription: Description\noriginalLanguage: OriginalLanguage\nabapLanguageVersion?: ABAPLanguageVersion\n}\n/**\n * General information\n */\nexport interface GeneralInformation {\nnamespace: Namespace\naifCheck: AIFCheck\n}\n/**\n * Error message\n */\nexport interface ErrorMessage {\nmessageClass?: MessageClass\nmessageNumber?: MessageNumber\nvariableAssignments?: MessageVariableAssignments\n}\n/**\n * Variable list\n */\nexport interface VariableList {\nnumber?: Number\ntype?: Type\nfield?: Field\nvalue?: Value\n}\n/**\n * Single check\n */\nexport interface SingleCheck {\ndescription: Description1\nid: ID\nscenario?: Scenario\nfieldCheck?: FieldCheck\ndatabaseCheck?: DatabaseCheck\ncustomImplementation?: CustomImplementation\nsuccessMessage?: SuccessMessage\n}\n/**\n * Field check\n */\nexport interface FieldCheck {\ncheckType?: CheckType\noperator?: Operator\nfieldType?: FieldType\nfield?: Field1\nvalue?: Value1\n}\n/**\n * Database check\n */\nexport interface DatabaseCheck {\ntable?: Table\nwhereCondition?: WhereConditionForSelectStatement\ncheckType?: CheckType1\nfieldName?: FieldNameForComparison\noperator?: Operator1\nfieldType?: FieldType1\nfield?: Field2\nvalue?: Value2\n}\n/**\n * Custom implementation\n */\nexport interface CustomImplementation {\nclass?: Class\n}\n/**\n * Success message\n */\nexport interface SuccessMessage {\nmessageClass?: MessageClass1\nmessageNumber?: MessageNumber1\nvariableAssignments?: MessageVariableAssignments1\n}\n/**\n * Variable list\n */\nexport interface VariableList1 {\nnumber?: Number1\ntype?: Type1\nfield?: Field3\nvalue?: Value3\n}\n\nexport type AifpAff = AffAifpV1;\n","/**\n * Auto-generated from SAP/abap-file-formats JSON schemas.\n * Do not edit — regenerate with `bun scripts/generate-aff-schemas.ts`.\n */\n/**\n * The ABAP file format version\n */\nexport type ABAPFileFormatVersion = \"1\"\n/**\n * Description of the ABAP object\n */\nexport type Description = string\n/**\n * Original language of the ABAP object\n */\nexport type OriginalLanguage = string\n/**\n * ABAP language version\n */\nexport type ABAPLanguageVersion = (\"standard\" | \"cloudDevelopment\")\n/**\n * Namespace of the recipient\n */\nexport type Namespace = string\n/**\n * SAP Application Interface recipient\n */\nexport type AIFRecipient = string\n\n/**\n * Recipient\n */\nexport interface AffAifrV1 {\nformatVersion: ABAPFileFormatVersion\nheader: Header\ngeneralInformation: GeneralInformation\n}\n/**\n * Header\n */\nexport interface Header {\ndescription: Description\noriginalLanguage: OriginalLanguage\nabapLanguageVersion?: ABAPLanguageVersion\n}\n/**\n * General information\n */\nexport interface GeneralInformation {\nnamespace: Namespace\naifRecipient: AIFRecipient\n}\n\nexport type AifrAff = AffAifrV1;\n","/**\n * Auto-generated from SAP/abap-file-formats JSON schemas.\n * Do not edit — regenerate with `bun scripts/generate-aff-schemas.ts`.\n */\n/**\n * The ABAP file format version\n */\nexport type ABAPFileFormatVersion = \"1\"\n/**\n * Description of the ABAP object\n */\nexport type Description = string\n/**\n * Original language of the ABAP object\n */\nexport type OriginalLanguage = string\n/**\n * ABAP language version\n */\nexport type ABAPLanguageVersion = (\"standard\" | \"cloudDevelopment\")\n/**\n * Name of executable class or program which writes the data to the archive\n */\nexport type WriteClass = string\n/**\n * Name of executable class or program which deletes the data from the tables\n */\nexport type DeleteClass = string\n/**\n * Name of executable class or program which reloads the data to the tables (may be empty)\n */\nexport type ReloadClass = string\n/**\n * Name of class which stores and retrieves archived data. The class needs to implement the interface IF_ARCH_STORAGE_MANAGER.\n */\nexport type StorageClass = string\n/**\n * Name of table or structure\n */\nexport type Name = string\n/**\n * Tables of business object instance from which data is archived.\n */\nexport type TablesToBeArchived = TableToBeArchived[]\n/**\n * Name of archiving class\n */\nexport type Name1 = string\n/**\n * Archiving classes are no ABAP classes, but IDs of reuse objects, whose data should be archived Together with the business object instance (for example change documents).\n */\nexport type ArchivingClasses = NameOfArchivingClass[]\n\n/**\n * Archiving Object (AOBJ) v1\n */\nexport interface AffAobjV1 {\nformatVersion: ABAPFileFormatVersion\nheader: Header\nattributes: Attributes\ntablesToBeArchived: TablesToBeArchived\narchivingClasses: ArchivingClasses\n}\n/**\n * Header\n */\nexport interface Header {\ndescription: Description\noriginalLanguage: OriginalLanguage\nabapLanguageVersion?: ABAPLanguageVersion\n}\n/**\n * Attributes of an archiving object\n */\nexport interface Attributes {\nwriteClass: WriteClass\ndeleteClass: DeleteClass\nreloadClass?: ReloadClass\nstorageClass: StorageClass\n}\n/**\n * Tables of business object instance from which data is archived\n */\nexport interface TableToBeArchived {\nname: Name\n}\n/**\n * Archiving classes are no ABAP classes, but IDs of reuse objects, whose data should be archived Together with the business object instance (for example change documents).\n */\nexport interface NameOfArchivingClass {\nname: Name1\n}\n\nexport type AobjAff = AffAobjV1;\n","/**\n * Auto-generated from SAP/abap-file-formats JSON schemas.\n * Do not edit — regenerate with `bun scripts/generate-aff-schemas.ts`.\n */\n/**\n * The ABAP file format version\n */\nexport type ABAPFileFormatVersion = \"1\"\n/**\n * Description of the ABAP object\n */\nexport type Description = string\n/**\n * Original language of the ABAP object\n */\nexport type OriginalLanguage = string\n/**\n * ABAP language version\n */\nexport type ABAPLanguageVersion = (\"standard\" | \"cloudDevelopment\")\n\n/**\n * API catalog\n */\nexport interface AffApicV1 {\nformatVersion: ABAPFileFormatVersion\nheader: Header\n}\n/**\n * Header\n */\nexport interface Header {\ndescription: Description\noriginalLanguage: OriginalLanguage\nabapLanguageVersion?: ABAPLanguageVersion\n}\n\nexport type ApicAff = AffApicV1;\n","/**\n * Auto-generated from SAP/abap-file-formats JSON schemas.\n * Do not edit — regenerate with `bun scripts/generate-aff-schemas.ts`.\n */\n/**\n * The ABAP file format version\n */\nexport type ABAPFileFormatVersion = \"1\"\n/**\n * Description of the ABAP object\n */\nexport type Description = string\n/**\n * Original language of the ABAP object\n */\nexport type OriginalLanguage = string\n/**\n * ABAP language version\n */\nexport type ABAPLanguageVersion = (\"standard\" | \"cloudDevelopment\")\n/**\n * Name of the subobject\n */\nexport type Name = string\n/**\n * Description text of the subobject\n */\nexport type Description1 = string\n/**\n * Table of all subobjects (may be empty)\n */\nexport type Subobjects = Subobject[]\n\n/**\n * Attributes of the application log object\n */\nexport interface AffAploV1 {\nformatVersion: ABAPFileFormatVersion\nheader: Header\nsubobjects: Subobjects\n}\n/**\n * Header\n */\nexport interface Header {\ndescription: Description\noriginalLanguage: OriginalLanguage\nabapLanguageVersion?: ABAPLanguageVersion\n}\n/**\n * Attributes of the subobject\n */\nexport interface Subobject {\nname: Name\ndescription?: Description1\n}\n\nexport type AploAff = AffAploV1;\n","/**\n * Auto-generated from SAP/abap-file-formats JSON schemas.\n * Do not edit — regenerate with `bun scripts/generate-aff-schemas.ts`.\n */\n/**\n * Format version\n */\nexport type FormatVersion = \"1\"\n/**\n * Description of the ABAP object\n */\nexport type Description = string\n/**\n * Original language of the ABAP object\n */\nexport type OriginalLanguage = string\n/**\n * ABAP language version\n */\nexport type ABAPLanguageVersion = (\"standard\" | \"keyUser\" | \"cloudDevelopment\")\n/**\n * Name of key table or structure for application object\n */\nexport type KeyTableOrStructure = string\n/**\n * Name of the SAP object\n */\nexport type SAPObject = string\n/**\n * Name of the data category\n */\nexport type DataCategory = string\n/**\n * Name of the ILM object\n */\nexport type ILMObject = string\n\n/**\n * Type of application object\n */\nexport interface AffApobV1 {\nformatVersion: FormatVersion\nheader: Header\nattributes: Attributes\n}\n/**\n * Header\n */\nexport interface Header {\ndescription: Description\noriginalLanguage: OriginalLanguage\nabapLanguageVersion?: ABAPLanguageVersion\n}\n/**\n * Attributes of the application object\n */\nexport interface Attributes {\naoKeyStructure?: KeyTableOrStructure\nsapObject?: SAPObject\ndataCategory?: DataCategory\nilmObject?: ILMObject\n}\n\nexport type ApobAff = AffApobV1;\n","/**\n * Auto-generated from SAP/abap-file-formats JSON schemas.\n * Do not edit — regenerate with `bun scripts/generate-aff-schemas.ts`.\n */\n/**\n * The ABAP file format version\n */\nexport type ABAPFileFormatVersion = \"1\"\n/**\n * Description of the ABAP object\n */\nexport type Description = string\n/**\n * Original language of the ABAP object\n */\nexport type OriginalLanguage = string\n/**\n * ABAP language version\n */\nexport type ABAPLanguageVersion = (\"standard\" | \"keyUser\" | \"cloudDevelopment\")\n/**\n * Name\n */\nexport type Name = string\n\n/**\n * Bdef object type\n */\nexport interface AffBdefV1 {\nformatVersion: ABAPFileFormatVersion\nheader: Header\nextendedBehaviorDefintion?: ExtendedBehaviorDefinition\n}\n/**\n * Header\n */\nexport interface Header {\ndescription: Description\noriginalLanguage: OriginalLanguage\nabapLanguageVersion?: ABAPLanguageVersion\n}\n/**\n * Extended Behavior Definition\n */\nexport interface ExtendedBehaviorDefinition {\nname?: Name\n}\n\nexport type BdefAff = AffBdefV1;\n","/**\n * Auto-generated from SAP/abap-file-formats JSON schemas.\n * Do not edit — regenerate with `bun scripts/generate-aff-schemas.ts`.\n */\n/**\n * Format version\n */\nexport type FormatVersion = \"1\"\n/**\n * Description of the ABAP object\n */\nexport type Description = string\n/**\n * Original language of the ABAP object\n */\nexport type OriginalLanguage = string\n/**\n * ABAP language version\n */\nexport type ABAPLanguageVersion = (\"standard\" | \"cloudDevelopment\")\n\n/**\n * Background Processing Context\n */\nexport interface AffBgqcV1 {\nformatVersion: FormatVersion\nheader: Header\n}\n/**\n * Header\n */\nexport interface Header {\ndescription: Description\noriginalLanguage: OriginalLanguage\nabapLanguageVersion?: ABAPLanguageVersion\n}\n\nexport type BgqcAff = AffBgqcV1;\n","/**\n * Auto-generated from SAP/abap-file-formats JSON schemas.\n * Do not edit — regenerate with `bun scripts/generate-aff-schemas.ts`.\n */\n/**\n * Format version\n */\nexport type FormatVersion = \"1\"\n/**\n * Description of the ABAP object\n */\nexport type Description = string\n/**\n * Original language of the ABAP object\n */\nexport type OriginalLanguage = string\n/**\n * ABAP language version\n */\nexport type ABAPLanguageVersion = (\"standard\" | \"keyUser\" | \"cloudDevelopment\")\n/**\n * Object type\n */\nexport type ObjectType = (\"TABL\" | \"DDLS\")\n/**\n * Object name\n */\nexport type ObjectName = string\n/**\n * Name\n */\nexport type Name = string\n/**\n * Nature\n */\nexport type Nature = (\"general\" | \"sensitive\" | \"nonBusinessInformation\")\n/**\n * Fields\n */\nexport type Fields = FieldDetails[]\n\n/**\n * Customer Data Browser Object\n */\nexport interface AffCdboV1 {\nformatVersion: FormatVersion\nheader: Header\ngeneralInformation: GeneralInformation\nfields: Fields\n}\n/**\n * Header\n */\nexport interface Header {\ndescription: Description\noriginalLanguage: OriginalLanguage\nabapLanguageVersion?: ABAPLanguageVersion\n}\n/**\n * General information\n */\nexport interface GeneralInformation {\nobjectType: ObjectType\nobjectName: ObjectName\n}\n/**\n * Field details\n */\nexport interface FieldDetails {\nname: Name\nnature: Nature\n}\n\nexport type CdboAff = AffCdboV1;\n","/**\n * Auto-generated from SAP/abap-file-formats JSON schemas.\n * Do not edit — regenerate with `bun scripts/generate-aff-schemas.ts`.\n */\n/**\n * The ABAP file format version\n */\nexport type ABAPFileFormatVersion = \"1\"\n/**\n * Description of the ABAP object\n */\nexport type Description = string\n/**\n * Original language of the ABAP object\n */\nexport type OriginalLanguage = string\n/**\n * External name\n */\nexport type ExternalName = string\n/**\n * Type\n */\nexport type Type = (\"amountWithCurrency\" | \"boolean\" | \"date\" | \"email\" | \"list\" | \"number\" | \"quantity\" | \"text\" | \"time\" | \"url\" | \"phone\" | \"amountWithoutCurrency\" | \"currencyCode\" | \"quantityOnly\" | \"unitCode\" | \"languageCode\" | \"numericalText\" | \"postingPeriod\" | \"raw\" | \"associationToStandardBo\" | \"timestamp\" | \"listBasedOnCdsView\" | \"characteristicsList\" | \"numericInterval\" | \"amountInterval\" | \"dateInterval\" | \"timeInterval\" | \"associationToCustomBo\")\n/**\n * Length\n */\nexport type Length = number\n/**\n * Scale\n */\nexport type Scale = number\n/**\n * Aggregation\n */\nexport type Aggregation = (\"none\" | \"min\" | \"max\" | \"sum\")\n/**\n * Code List uppercase only\n */\nexport type CodeListUppercaseOnly = boolean\n/**\n * Associated business object\n */\nexport type AssociatedBusinessObject = string\n/**\n * Value help view\n */\nexport type ValueHelpView = string\n/**\n * Dimension view\n */\nexport type DimensionView = string\n/**\n * Data subject\n */\nexport type DataSubject = (\"notApplicable\" | \"centralBusinessPartner\" | \"customer\" | \"supplier\" | \"contactPerson\" | \"workforcePerson\")\n/**\n * BAdI implementation for data subject\n */\nexport type BAdIImplementationForDataSubject = string\n/**\n * Characteristic name\n */\nexport type CharacteristicName = string\n/**\n * Class name\n */\nexport type ClassName = string\n/**\n * Object type\n */\nexport type ObjectType = string\n/**\n * Translation language\n */\nexport type TranslationLanguage = string\n/**\n * Field label\n */\nexport type FieldLabel = string\n/**\n * Field tooltip\n */\nexport type FieldTooltip = string\n/**\n * Labels and tooltips\n */\nexport type LabelsAndTooltips = LabelAndTooltip[]\n/**\n * Code\n */\nexport type Code = string\n/**\n * Disabled\n */\nexport type Disabled = boolean\n/**\n * Code list values\n */\nexport type CodeListValues = CodeValue[]\n/**\n * Language\n */\nexport type Language = string\n/**\n * Code\n */\nexport type Code1 = string\n/**\n * Description\n */\nexport type Description1 = string\n/**\n * Code list descriptions\n */\nexport type CodeListDescriptions = CodeDescription[]\n/**\n * Business context\n */\nexport type BusinessContext = string\n/**\n * Deviating field name\n */\nexport type DeviatingFieldName = string\n/**\n * Extended business context details\n */\nexport type ExtendedBusinessContextDetails = ExtendedBusinessContextDetails1[]\n/**\n * CDS view name\n */\nexport type CDSViewName = string\n/**\n * Business context\n */\nexport type BusinessContext1 = string\n/**\n * Basic search relevance\n */\nexport type BasicSearchRelevance = boolean\n/**\n * BAdI implementation for visibility control\n */\nexport type BAdIImplementationForVisibilityControl = string\n/**\n * Field control property\n */\nexport type FieldControlProperty = (\"optional\" | \"readOnly\" | \"mandatory\")\n/**\n * Extended CDS view details\n */\nexport type ExtendedCDSViewDetails = ExtendedCDSViewDetails1[]\n/**\n * OData service key\n */\nexport type ODataServiceKey = string\n/**\n * Business context\n */\nexport type BusinessContext2 = string\n/**\n * Basic search relevance\n */\nexport type BasicSearchRelevance1 = boolean\n/**\n * Extended OData service details\n */\nexport type ExtendedODataServiceDetails = ExtendedODataServiceDetails1[]\n/**\n * Business scenario\n */\nexport type BusinessScenario = string\n/**\n * Data transfer\n */\nexport type DataTransfer = string\n/**\n * Extended business scenario details\n */\nexport type ExtendedBusinessScenarioDetails = ExtendedBusinessScenarioDetails1[]\n/**\n * Dynpro context\n */\nexport type DynproContext = string\n/**\n * Business context\n */\nexport type BusinessContext3 = string\n/**\n * Extended dynpro context details\n */\nexport type ExtendedDynproContextDetails = ExtendedDynproContextDetails1[]\n/**\n * Service interface\n */\nexport type ServiceInterface = string\n/**\n * Operation\n */\nexport type Operation = string\n/**\n * Message direction\n */\nexport type MessageDirection = (\"request\" | \"response\")\n/**\n * Business context\n */\nexport type BusinessContext4 = string\n/**\n * Component identifier\n */\nexport type ComponentIdentifier = string\n/**\n * External namespace\n */\nexport type ExternalNamespace = string\n/**\n * External field name\n */\nexport type ExternalFieldName = string\n/**\n * Extended SOAP service details\n */\nexport type ExtendedSOAPServiceDetails = ExtendedSOAPServiceDetails1[]\n/**\n * Component identifier\n */\nexport type ComponentIdentifier1 = string\n/**\n * Value help field name\n */\nexport type ValueHelpFieldName = string\n/**\n * Dimension view field name\n */\nexport type DimensionViewFieldName = string\n/**\n * Value help key mapping details\n */\nexport type ValueHelpKeyMappingDetails = ValueHelpKeyMappingDetails1[]\n/**\n * Extended CDS view name\n */\nexport type ExtendedCDSViewName = string\n/**\n * Extended CDS view field name\n */\nexport type ExtendedCDSViewFieldName = string\n/**\n * Value help field name\n */\nexport type ValueHelpFieldName1 = string\n/**\n * Value help binding details\n */\nexport type ValueHelpBindingDetails = ValueHelpBindingDetails1[]\n\n/**\n * Custom field\n */\nexport interface AffCfdfV1 {\nformatVersion: ABAPFileFormatVersion\nheader: Header\nexternalName: ExternalName\ntype: Type\ntypeDetails?: TypeDetails\ndataProtectionAndPrivacy?: DataProtectionAndPrivacy\ncharacteristicReference?: ReferenceToCharacteristic\nuiTexts?: LabelsAndTooltips\ncodeListValues?: CodeListValues\ncodeListDescriptions?: CodeListDescriptions\nextendedBusinessContexts?: ExtendedBusinessContextDetails\nextendedCdsViews?: ExtendedCDSViewDetails\nextendedOdataServices?: ExtendedODataServiceDetails\nextendedBusinessScenarios?: ExtendedBusinessScenarioDetails\nextendedDynproContexts?: ExtendedDynproContextDetails\nextendedSoapServices?: ExtendedSOAPServiceDetails\nvalueHelpKeyMappings?: ValueHelpKeyMappingDetails\nvalueHelpBindings?: ValueHelpBindingDetails\n}\n/**\n * Header\n */\nexport interface Header {\ndescription: Description\noriginalLanguage: OriginalLanguage\n}\n/**\n * Type details\n */\nexport interface TypeDetails {\nlength?: Length\nscale?: Scale\naggregation?: Aggregation\ncodeListUppercaseOnly?: CodeListUppercaseOnly\nassociatedBusinessObject?: AssociatedBusinessObject\nvalueHelpView?: ValueHelpView\ndimensionView?: DimensionView\n}\n/**\n * Data protection and privacy\n */\nexport interface DataProtectionAndPrivacy {\ndataSubjectIdType?: DataSubject\nbadiImplForDataSubject?: BAdIImplementationForDataSubject\n}\n/**\n * Reference to characteristic\n */\nexport interface ReferenceToCharacteristic {\ncharacteristicName?: CharacteristicName\nclassType?: ClassName\nobjectType?: ObjectType\n}\n/**\n * Label and tooltip\n */\nexport interface LabelAndTooltip {\nlanguage: TranslationLanguage\nfieldLabel: FieldLabel\nfieldTooltip: FieldTooltip\n}\n/**\n * Code value\n */\nexport interface CodeValue {\ncode: Code\nisDisabled?: Disabled\n}\n/**\n * Code description\n */\nexport interface CodeDescription {\nlanguage: Language\ncode: Code1\ndescription: Description1\n}\n/**\n * Extended business context details\n */\nexport interface ExtendedBusinessContextDetails1 {\nbusinessContext: BusinessContext\ndeviatingFieldName?: DeviatingFieldName\n}\n/**\n * Extended CDS view details\n */\nexport interface ExtendedCDSViewDetails1 {\ncdsViewName: CDSViewName\nbusinessContext: BusinessContext1\nisSearchRelevant?: BasicSearchRelevance\nbadiImplForVisibilityCtrl?: BAdIImplementationForVisibilityControl\nfieldControlProperty?: FieldControlProperty\n}\n/**\n * Extended OData service details\n */\nexport interface ExtendedODataServiceDetails1 {\nodataServiceKey: ODataServiceKey\nbusinessContext: BusinessContext2\nisSearchRelevant?: BasicSearchRelevance1\n}\n/**\n * Extended business scenario details\n */\nexport interface ExtendedBusinessScenarioDetails1 {\nbusinessScenario: BusinessScenario\ndataTransfer: DataTransfer\n}\n/**\n * Extended dynpro context details\n */\nexport interface ExtendedDynproContextDetails1 {\ndynproContext: DynproContext\nbusinessContext: BusinessContext3\n}\n/**\n * Extended SOAP service details\n */\nexport interface ExtendedSOAPServiceDetails1 {\nserviceInterface: ServiceInterface\noperation: Operation\nmessageDirection: MessageDirection\nbusinessContext: BusinessContext4\ncomponentIdentifier?: ComponentIdentifier\nexternalNamespace: ExternalNamespace\nexternalFieldName: ExternalFieldName\n}\n/**\n * Value help key mapping details\n */\nexport interface ValueHelpKeyMappingDetails1 {\ncomponentIdentifier?: ComponentIdentifier1\nvalueHelpFieldName: ValueHelpFieldName\ndimensionViewFieldName?: DimensionViewFieldName\n}\n/**\n * Value help binding details\n */\nexport interface ValueHelpBindingDetails1 {\ncdsViewName: ExtendedCDSViewName\nextendedCdsViewFieldName: ExtendedCDSViewFieldName\nvalueHelpFieldName: ValueHelpFieldName1\n}\n\nexport type CfdfAff = AffCfdfV1;\n","/**\n * Auto-generated from SAP/abap-file-formats JSON schemas.\n * Do not edit — regenerate with `bun scripts/generate-aff-schemas.ts`.\n */\n/**\n * The ABAP file format version\n */\nexport type ABAPFileFormatVersion = \"2\"\n/**\n * Description of the ABAP object\n */\nexport type Description = string\n/**\n * Original language of the ABAP object\n */\nexport type OriginalLanguage = string\n/**\n * External name\n */\nexport type ExternalName = string\n/**\n * Type\n */\nexport type Type = (\"amountWithCurrency\" | \"boolean\" | \"date\" | \"email\" | \"list\" | \"number\" | \"quantity\" | \"text\" | \"time\" | \"url\" | \"phone\" | \"amountWithoutCurrency\" | \"currencyCode\" | \"quantityOnly\" | \"unitCode\" | \"languageCode\" | \"numericalText\" | \"postingPeriod\" | \"raw\" | \"associationToStandardBo\" | \"timestamp\" | \"listBasedOnCdsView\" | \"characteristicsList\" | \"numericInterval\" | \"amountInterval\" | \"dateInterval\" | \"timeInterval\" | \"associationToCustomBo\")\n/**\n * Length\n */\nexport type Length = number\n/**\n * Scale\n */\nexport type Scale = number\n/**\n * Aggregation\n */\nexport type Aggregation = (\"none\" | \"min\" | \"max\" | \"sum\")\n/**\n * Code List uppercase only\n */\nexport type CodeListUppercaseOnly = boolean\n/**\n * Associated business object\n */\nexport type AssociatedBusinessObject = string\n/**\n * Value help view\n */\nexport type ValueHelpView = string\n/**\n * Dimension view\n */\nexport type DimensionView = string\n/**\n * Data subject\n */\nexport type DataSubject = (\"notApplicable\" | \"centralBusinessPartner\" | \"customer\" | \"supplier\" | \"contactPerson\" | \"workforcePerson\")\n/**\n * BAdI implementation for data subject\n */\nexport type BAdIImplementationForDataSubject = string\n/**\n * Characteristic name\n */\nexport type CharacteristicName = string\n/**\n * Class name\n */\nexport type ClassName = string\n/**\n * Object type\n */\nexport type ObjectType = string\n/**\n * Translation language\n */\nexport type TranslationLanguage = string\n/**\n * Component kind\n */\nexport type ComponentKind = (\"main\" | \"description\" | \"reference\")\n/**\n * Component field identifier\n */\nexport type ComponentFieldIdentifier = string\n/**\n * Field label\n */\nexport type FieldLabel = string\n/**\n * Field tooltip\n */\nexport type FieldTooltip = string\n/**\n * Field heading\n */\nexport type FieldHeading = string\n/**\n * Field medium label\n */\nexport type FieldMediumLabel = string\n/**\n * Field short label\n */\nexport type FieldShortLabel = string\n/**\n * Labels and tooltips\n */\nexport type LabelsAndTooltips = LabelsAndTooltip[]\n/**\n * Code\n */\nexport type Code = string\n/**\n * Disabled\n */\nexport type Disabled = boolean\n/**\n * Code list values\n */\nexport type CodeListValues = CodeValue[]\n/**\n * Language\n */\nexport type Language = string\n/**\n * Code\n */\nexport type Code1 = string\n/**\n * Description\n */\nexport type Description1 = string\n/**\n * Code list descriptions\n */\nexport type CodeListDescriptions = CodeDescription[]\n/**\n * Business context\n */\nexport type BusinessContext = string\n/**\n * Deviating field name\n */\nexport type DeviatingFieldName = string\n/**\n * Extended business context details\n */\nexport type ExtendedBusinessContextDetails = ExtendedBusinessContextDetails1[]\n/**\n * CDS view name\n */\nexport type CDSViewName = string\n/**\n * Business context\n */\nexport type BusinessContext1 = string\n/**\n * Basic search relevance\n */\nexport type BasicSearchRelevance = boolean\n/**\n * BAdI implementation for visibility control\n */\nexport type BAdIImplementationForVisibilityControl = string\n/**\n * Field control property\n */\nexport type FieldControlProperty = (\"optional\" | \"readOnly\" | \"mandatory\")\n/**\n * Extended CDS view details\n */\nexport type ExtendedCDSViewDetails = ExtendedCDSViewDetails1[]\n/**\n * OData service key\n */\nexport type ODataServiceKey = string\n/**\n * Business context\n */\nexport type BusinessContext2 = string\n/**\n * Basic search relevance\n */\nexport type BasicSearchRelevance1 = boolean\n/**\n * Extended OData service details\n */\nexport type ExtendedODataServiceDetails = ExtendedODataServiceDetails1[]\n/**\n * Business scenario\n */\nexport type BusinessScenario = string\n/**\n * Data transfer\n */\nexport type DataTransfer = string\n/**\n * Extended business scenario details\n */\nexport type ExtendedBusinessScenarioDetails = ExtendedBusinessScenarioDetails1[]\n/**\n * Dynpro context\n */\nexport type DynproContext = string\n/**\n * Business context\n */\nexport type BusinessContext3 = string\n/**\n * Extended dynpro context details\n */\nexport type ExtendedDynproContextDetails = ExtendedDynproContextDetails1[]\n/**\n * Service interface\n */\nexport type ServiceInterface = string\n/**\n * Operation\n */\nexport type Operation = string\n/**\n * Message direction\n */\nexport type MessageDirection = (\"request\" | \"response\")\n/**\n * Business context\n */\nexport type BusinessContext4 = string\n/**\n * Component identifier\n */\nexport type ComponentIdentifier = string\n/**\n * External namespace\n */\nexport type ExternalNamespace = string\n/**\n * External field name\n */\nexport type ExternalFieldName = string\n/**\n * Extended SOAP service details\n */\nexport type ExtendedSOAPServiceDetails = ExtendedSOAPServiceDetails1[]\n/**\n * Component identifier\n */\nexport type ComponentIdentifier1 = string\n/**\n * Value help field name\n */\nexport type ValueHelpFieldName = string\n/**\n * Dimension view field name\n */\nexport type DimensionViewFieldName = string\n/**\n * Value help key mapping details\n */\nexport type ValueHelpKeyMappingDetails = ValueHelpKeyMappingDetails1[]\n/**\n * Extended CDS view name\n */\nexport type ExtendedCDSViewName = string\n/**\n * Extended CDS view field name\n */\nexport type ExtendedCDSViewFieldName = string\n/**\n * Value help field name\n */\nexport type ValueHelpFieldName1 = string\n/**\n * Value help binding details\n */\nexport type ValueHelpBindingDetails = ValueHelpBindingDetails1[]\n\n/**\n * Custom field\n */\nexport interface AffCfdfV2 {\nformatVersion: ABAPFileFormatVersion\nheader: Header\nexternalName: ExternalName\ntype: Type\ntypeDetails?: TypeDetails\ndataProtectionAndPrivacy?: DataProtectionAndPrivacy\ncharacteristicReference?: ReferenceToCharacteristic\nuiTexts?: LabelsAndTooltips\ncodeListValues?: CodeListValues\ncodeListDescriptions?: CodeListDescriptions\nextendedBusinessContexts?: ExtendedBusinessContextDetails\nextendedCdsViews?: ExtendedCDSViewDetails\nextendedOdataServices?: ExtendedODataServiceDetails\nextendedBusinessScenarios?: ExtendedBusinessScenarioDetails\nextendedDynproContexts?: ExtendedDynproContextDetails\nextendedSoapServices?: ExtendedSOAPServiceDetails\nvalueHelpKeyMappings?: ValueHelpKeyMappingDetails\nvalueHelpBindings?: ValueHelpBindingDetails\n}\n/**\n * Header\n */\nexport interface Header {\ndescription: Description\noriginalLanguage: OriginalLanguage\n}\n/**\n * Type details\n */\nexport interface TypeDetails {\nlength?: Length\nscale?: Scale\naggregation?: Aggregation\ncodeListUppercaseOnly?: CodeListUppercaseOnly\nassociatedBusinessObject?: AssociatedBusinessObject\nvalueHelpView?: ValueHelpView\ndimensionView?: DimensionView\n}\n/**\n * Data protection and privacy\n */\nexport interface DataProtectionAndPrivacy {\ndataSubjectIdType?: DataSubject\nbadiImplForDataSubject?: BAdIImplementationForDataSubject\n}\n/**\n * Reference to characteristic\n */\nexport interface ReferenceToCharacteristic {\ncharacteristicName?: CharacteristicName\nclassType?: ClassName\nobjectType?: ObjectType\n}\n/**\n * Labels and tooltip\n */\nexport interface LabelsAndTooltip {\nlanguage: TranslationLanguage\ncomponentKind: ComponentKind\ncomponentIdentifier: ComponentFieldIdentifier\nfieldLabel?: FieldLabel\nfieldTooltip: FieldTooltip\nfieldHeading: FieldHeading\nfieldMediumLabel?: FieldMediumLabel\nfieldShortLabel?: FieldShortLabel\n}\n/**\n * Code value\n */\nexport interface CodeValue {\ncode: Code\nisDisabled?: Disabled\n}\n/**\n * Code description\n */\nexport interface CodeDescription {\nlanguage: Language\ncode: Code1\ndescription: Description1\n}\n/**\n * Extended business context details\n */\nexport interface ExtendedBusinessContextDetails1 {\nbusinessContext: BusinessContext\ndeviatingFieldName?: DeviatingFieldName\n}\n/**\n * Extended CDS view details\n */\nexport interface ExtendedCDSViewDetails1 {\ncdsViewName: CDSViewName\nbusinessContext: BusinessContext1\nisSearchRelevant?: BasicSearchRelevance\nbadiImplForVisibilityCtrl?: BAdIImplementationForVisibilityControl\nfieldControlProperty?: FieldControlProperty\n}\n/**\n * Extended OData service details\n */\nexport interface ExtendedODataServiceDetails1 {\nodataServiceKey: ODataServiceKey\nbusinessContext: BusinessContext2\nisSearchRelevant?: BasicSearchRelevance1\n}\n/**\n * Extended business scenario details\n */\nexport interface ExtendedBusinessScenarioDetails1 {\nbusinessScenario: BusinessScenario\ndataTransfer: DataTransfer\n}\n/**\n * Extended dynpro context details\n */\nexport interface ExtendedDynproContextDetails1 {\ndynproContext: DynproContext\nbusinessContext: BusinessContext3\n}\n/**\n * Extended SOAP service details\n */\nexport interface ExtendedSOAPServiceDetails1 {\nserviceInterface: ServiceInterface\noperation: Operation\nmessageDirection: MessageDirection\nbusinessContext: BusinessContext4\ncomponentIdentifier?: ComponentIdentifier\nexternalNamespace: ExternalNamespace\nexternalFieldName: ExternalFieldName\n}\n/**\n * Value help key mapping details\n */\nexport interface ValueHelpKeyMappingDetails1 {\ncomponentIdentifier?: ComponentIdentifier1\nvalueHelpFieldName: ValueHelpFieldName\ndimensionViewFieldName?: DimensionViewFieldName\n}\n/**\n * Value help binding details\n */\nexport interface ValueHelpBindingDetails1 {\ncdsViewName: ExtendedCDSViewName\nextendedCdsViewFieldName: ExtendedCDSViewFieldName\nvalueHelpFieldName: ValueHelpFieldName1\n}\n\nexport type CfdfAff = AffCfdfV2;\n","/**\n * Auto-generated from SAP/abap-file-formats JSON schemas.\n * Do not edit — regenerate with `bun scripts/generate-aff-schemas.ts`.\n */\n/**\n * The ABAP file format version\n */\nexport type ABAPFileFormatVersion = \"1\"\n/**\n * Description of the ABAP object\n */\nexport type Description = string\n/**\n * Original language of the ABAP object\n */\nexport type OriginalLanguage = string\n/**\n * ABAP language version\n */\nexport type ABAPLanguageVersion = (\"standard\" | \"cloudDevelopment\")\n/**\n * Change document category\n */\nexport type Category = (\"standard\" | \"behaviorDefiniton\")\n/**\n * Generated object\n */\nexport type GeneratedObject = string\n/**\n * Name of table or structure\n */\nexport type Name = string\n/**\n * Reference table for currencies and units\n */\nexport type ReferenceTable = string\n/**\n * Specifies whether multiple changes can be logged\n */\nexport type LogMultipleChanges = boolean\n/**\n * Log field values for insertions.\n */\nexport type LogFieldValues = boolean\n/**\n * Log initial values for insertions Logging of initial values depends on setting 'Log Field Values for Database Insertions'\n */\nexport type LogInitialValues = boolean\n/**\n * Log field values for deletions.\n */\nexport type LogFieldValues1 = boolean\n/**\n * Log initial values for deletions Logging of initial values depends on setting 'Log Field Values for Database Deletions'\n */\nexport type LogInitialValues1 = boolean\n/**\n * Tables and structures\n */\nexport type TablesAndStructures = TableOrStructureDetails[]\n/**\n * Error message identifier\n */\nexport type MessageID = string\n/**\n * Error message number\n */\nexport type MessageNumber = string\n\n/**\n * Change Documents (CHDO) v1\n */\nexport interface AffChdoV1 {\nformatVersion: ABAPFileFormatVersion\nheader: Header\ngeneralInformation?: GeneralInformation\ntablesAndStructures: TablesAndStructures\nerrorMessage: ErrorMessage\n}\n/**\n * Header\n */\nexport interface Header {\ndescription: Description\noriginalLanguage: OriginalLanguage\nabapLanguageVersion?: ABAPLanguageVersion\n}\n/**\n * General information\n */\nexport interface GeneralInformation {\ncategory?: Category\ngeneratedObject?: GeneratedObject\n}\n/**\n * Table or structure\n */\nexport interface TableOrStructureDetails {\nname: Name\nreferenceTable?: ReferenceTable\nmultipleChanges?: LogMultipleChanges\ndatabaseInsertions?: DatabaseInsertions\ndatabaseDeletions?: DatabaseDeletions\n}\n/**\n * Log field values for insertions.\n */\nexport interface DatabaseInsertions {\nlogValues?: LogFieldValues\nlogInitialValues?: LogInitialValues\n}\n/**\n * Log field values for deletions.\n */\nexport interface DatabaseDeletions {\nlogValues?: LogFieldValues1\nlogInitialValues?: LogInitialValues1\n}\n/**\n * Error message\n */\nexport interface ErrorMessage {\nid: MessageID\nnumber: MessageNumber\n}\n\nexport type ChdoAff = AffChdoV1;\n","/**\n * Auto-generated from SAP/abap-file-formats JSON schemas.\n * Do not edit — regenerate with `bun scripts/generate-aff-schemas.ts`.\n */\n/**\n * The ABAP file format version\n */\nexport type ABAPFileFormatVersion = \"1\"\n/**\n * Description of the ABAP object\n */\nexport type Description = string\n/**\n * Original language of the ABAP object\n */\nexport type OriginalLanguage = string\n/**\n * ABAP language version\n */\nexport type ABAPLanguageVersion = (\"standard\" | \"cloudDevelopment\")\n/**\n * Name of the parent category\n */\nexport type ParentCategory = string\n\n/**\n * ATC check category properties\n */\nexport interface AffChkcV1 {\nformatVersion: ABAPFileFormatVersion\nheader: Header\nparentCategory?: ParentCategory\n}\n/**\n * Header\n */\nexport interface Header {\ndescription: Description\noriginalLanguage: OriginalLanguage\nabapLanguageVersion?: ABAPLanguageVersion\n}\n\nexport type ChkcAff = AffChkcV1;\n","/**\n * Auto-generated from SAP/abap-file-formats JSON schemas.\n * Do not edit — regenerate with `bun scripts/generate-aff-schemas.ts`.\n */\n/**\n * The ABAP file format version\n */\nexport type ABAPFileFormatVersion = \"1\"\n/**\n * Description of the ABAP object\n */\nexport type Description = string\n/**\n * Original language of the ABAP object\n */\nexport type OriginalLanguage = string\n/**\n * ABAP language version\n */\nexport type ABAPLanguageVersion = (\"standard\" | \"cloudDevelopment\")\n/**\n * The parent category of an ATC check object\n */\nexport type Category = string\n/**\n * The implementing class of the ATC check object\n */\nexport type ImplementingClass = string\n/**\n * The check type of ATC check\n */\nexport type CheckType = (\"local\" | \"remoteEnabled\")\n/**\n * Name of a parameter\n */\nexport type ParameterName = string\n/**\n * Description of a parameter\n */\nexport type ParameterDescription = string\n/**\n * The parameter is hidden\n */\nexport type IsHidden = boolean\n/**\n * Parameters of the ATC check object\n */\nexport type Parameters = Parameter[]\n\n/**\n * ATC check object properties\n */\nexport interface AffChkoV1 {\nformatVersion: ABAPFileFormatVersion\nheader: Header\ncategory: Category\nimplementingClass: ImplementingClass\ncheckType?: CheckType\nparameters?: Parameters\n}\n/**\n * Header\n */\nexport interface Header {\ndescription: Description\noriginalLanguage: OriginalLanguage\nabapLanguageVersion?: ABAPLanguageVersion\n}\n/**\n * A parameter of an ATC check object\n */\nexport interface Parameter {\nname?: ParameterName\ndescription?: ParameterDescription\nhidden?: IsHidden\n}\n\nexport type ChkoAff = AffChkoV1;\n","/**\n * Auto-generated from SAP/abap-file-formats JSON schemas.\n * Do not edit — regenerate with `bun scripts/generate-aff-schemas.ts`.\n */\n/**\n * The ABAP file format version\n */\nexport type ABAPFileFormatVersion = \"1\"\n/**\n * Description of the ABAP object\n */\nexport type Description = string\n/**\n * Original language of the ABAP object\n */\nexport type OriginalLanguage = string\n/**\n * ABAP language version\n */\nexport type ABAPLanguageVersion = (\"standard\" | \"cloudDevelopment\")\n/**\n * The ATC check variant is remote-enabled\n */\nexport type RemoteEnabled = boolean\n/**\n * The name of check\n */\nexport type CheckName = string\n/**\n * The parameter name\n */\nexport type ParameterName = string\n/**\n * The value of the parameter\n */\nexport type ParameterValue = string\n/**\n * Name of a component of a structure\n */\nexport type ComponentFieldName = string\n/**\n * Value of a component of a structure\n */\nexport type ComponentValue = string\n/**\n * A structured value of a parameter, i.e. a value with named components\n */\nexport type StructuredValue = Component[]\n/**\n * Name of a component of a structure\n */\nexport type ComponentFieldName1 = string\n/**\n * Value of a component of a structure\n */\nexport type ComponentValue1 = string\n/**\n * A structured value as a list of key-value pairs\n */\nexport type Structure = Component1[]\n/**\n * A list of structured values of a parameter\n */\nexport type StructuredValueList = Structure[]\n/**\n * A parameter value in the parameter value list\n */\nexport type EntryInValueList = string\n/**\n * List of values for a multi-value check parameter\n */\nexport type ListOfParameterValues = EntryInValueList[]\n/**\n * The sign type of the range\n */\nexport type Sign = (\"include\" | \"exclude\")\n/**\n * Sign option of the range\n */\nexport type Option = (\"equals\" | \"between\" | \"greaterThan\" | \"containsPattern\" | \"notEqual\" | \"notBetween\" | \"notContainsPattern\" | \"greaterEqual\" | \"lessThan\" | \"lessEqual\")\n/**\n * The low value of the range\n */\nexport type Low = string\n/**\n * The high value of the range\n */\nexport type High = string\n/**\n * List of range values for a check parameter\n */\nexport type ListOfRangeValues = RangeValue[]\n/**\n * Parameters of check\n */\nexport type CheckParameters = Parameter[]\n/**\n * The checks selected in the ATC check variant\n */\nexport type SelectedChecks = Check[]\n\n/**\n * ATC check variant properties\n */\nexport interface AffChkvV1 {\nformatVersion: ABAPFileFormatVersion\nheader: Header\nremoteEnabled?: RemoteEnabled\nselectedChecks?: SelectedChecks\n}\n/**\n * Header\n */\nexport interface Header {\ndescription: Description\noriginalLanguage: OriginalLanguage\nabapLanguageVersion?: ABAPLanguageVersion\n}\n/**\n * Check with its parameters\n */\nexport interface Check {\ncheckName: CheckName\nparameters?: CheckParameters\n}\n/**\n * Parameter of ATC check\n */\nexport interface Parameter {\nname: ParameterName\nvalue?: ParameterValue\nstructuredValue?: StructuredValue\nstructuredValueList?: StructuredValueList\nvalueList?: ListOfParameterValues\nvalueRangeList?: ListOfRangeValues\n}\n/**\n * Component of a structure as a key-value pair\n */\nexport interface Component {\nfield: ComponentFieldName\nvalue: ComponentValue\n}\n/**\n * Component of a structure as a key-value pair\n */\nexport interface Component1 {\nfield: ComponentFieldName1\nvalue: ComponentValue1\n}\n/**\n * A range value for an ATC check parameter\n */\nexport interface RangeValue {\nsign: Sign\noption: Option\nlow?: Low\nhigh?: High\n}\n\nexport type ChkvAff = AffChkvV1;\n","/**\n * Auto-generated from SAP/abap-file-formats JSON schemas.\n * Do not edit — regenerate with `bun scripts/generate-aff-schemas.ts`.\n */\n/**\n * The ABAP file format version\n */\nexport type ABAPFileFormatVersion = \"1\"\n/**\n * Description of the ABAP object\n */\nexport type Description = string\n/**\n * Original language of the ABAP object\n */\nexport type OriginalLanguage = string\n/**\n * ABAP language version\n */\nexport type ABAPLanguageVersion = (\"standard\" | \"keyUser\" | \"cloudDevelopment\")\n/**\n * Class category\n */\nexport type ClassCategory = (\"generalObjectType\" | \"exitClass\" | \"testclassAbapUnit\" | \"behaviorClass\" | \"entityEventHandler\" | \"persistentClass\" | \"factoryForPersistentClass\" | \"statusClassForPersistClass\" | \"rfcProxyClass\" | \"communicationConnectionClass\" | \"exceptionClass\" | \"areaClassSharedObjects\" | \"businessClass\" | \"bspApplicationClass\" | \"basisClassBspElementHdlr\" | \"webDynproRuntimeObject\")\n/**\n * Fix point arithmetic\n */\nexport type FixPointArithmetic = boolean\n/**\n * The message class of the class\n */\nexport type MessageClass = string\n/**\n * Name\n */\nexport type Name = string\n/**\n * Description\n */\nexport type Description1 = string\n/**\n * Type descriptions\n */\nexport type TypeDescriptions = NameAndDescription[]\n/**\n * Name\n */\nexport type Name1 = string\n/**\n * Description\n */\nexport type Description2 = string\n/**\n * Attribute descriptions\n */\nexport type AttributeDescriptions = NameAndDescription1[]\n/**\n * Name of the event\n */\nexport type EventName = string\n/**\n * Description of the event\n */\nexport type EventDescription1 = string\n/**\n * Name\n */\nexport type Name2 = string\n/**\n * Description\n */\nexport type Description3 = string\n/**\n * Parameter descriptions\n */\nexport type ParameterDescriptions = NameAndDescription2[]\n/**\n * Event descriptions\n */\nexport type EventDescriptions = EventDescription[]\n/**\n * Name of the method\n */\nexport type MethodName = string\n/**\n * Description of the method\n */\nexport type MethodDescription1 = string\n/**\n * Name\n */\nexport type Name3 = string\n/**\n * Description\n */\nexport type Description4 = string\n/**\n * Parameter descriptions\n */\nexport type ParameterDescriptions1 = NameAndDescription3[]\n/**\n * Name\n */\nexport type Name4 = string\n/**\n * Description\n */\nexport type Description5 = string\n/**\n * Exception descriptions\n */\nexport type ExceptionDescriptions = NameAndDescription4[]\n/**\n * Method descriptions\n */\nexport type MethodDescriptions = MethodDescription[]\n\n/**\n * Class properties\n */\nexport interface AffClasV1 {\nformatVersion: ABAPFileFormatVersion\nheader: Header\ncategory?: ClassCategory\nfixPointArithmetic?: FixPointArithmetic\nmessageClass?: MessageClass\ndescriptions?: Descriptions\n}\n/**\n * header\n */\nexport interface Header {\ndescription: Description\noriginalLanguage: OriginalLanguage\nabapLanguageVersion?: ABAPLanguageVersion\n}\n/**\n * Descriptions maintained in SE80\n */\nexport interface Descriptions {\ntypes?: TypeDescriptions\nattributes?: AttributeDescriptions\nevents?: EventDescriptions\nmethods?: MethodDescriptions\n}\n/**\n * Name and description\n */\nexport interface NameAndDescription {\nname: Name\ndescription: Description1\n}\n/**\n * Name and description\n */\nexport interface NameAndDescription1 {\nname: Name1\ndescription: Description2\n}\n/**\n * Event description\n */\nexport interface EventDescription {\nname: EventName\ndescription: EventDescription1\nparameters?: ParameterDescriptions\n}\n/**\n * Name and description\n */\nexport interface NameAndDescription2 {\nname: Name2\ndescription: Description3\n}\n/**\n * Method description\n */\nexport interface MethodDescription {\nname: MethodName\ndescription: MethodDescription1\nparameters?: ParameterDescriptions1\nexceptions?: ExceptionDescriptions\n}\n/**\n * Name and description\n */\nexport interface NameAndDescription3 {\nname: Name3\ndescription: Description4\n}\n/**\n * Name and description\n */\nexport interface NameAndDescription4 {\nname: Name4\ndescription: Description5\n}\n\nexport type ClasAff = AffClasV1;\n","/**\n * Auto-generated from SAP/abap-file-formats JSON schemas.\n * Do not edit — regenerate with `bun scripts/generate-aff-schemas.ts`.\n */\n/**\n * Format version\n */\nexport type FormatVersion = \"1\"\n/**\n * Description of the ABAP object\n */\nexport type Description = string\n/**\n * Original language of the ABAP object\n */\nexport type OriginalLanguage = string\n/**\n * ABAP language version\n */\nexport type ABAPLanguageVersion = (\"standard\" | \"cloudDevelopment\")\n/**\n * Communication type\n */\nexport type CommunicationType = \"http\"\n/**\n * Communication target class\n */\nexport type CommunicationTargetClass = string\n/**\n * Multitenancy mode\n */\nexport type MultitenancyMode = (\"crossClient\" | \"clientSpecific\")\n/**\n * Allow multiple application destinations\n */\nexport type AllowMultipleApplicationDestinations = boolean\n/**\n * Path prefix\n */\nexport type PathPrefix = string\n/**\n * Enforce SAP GUI support\n */\nexport type EnforceSAPGUISupport = boolean\n/**\n * Enforce fast serialization\n */\nexport type EnforceFastSerialization = boolean\n/**\n * Default compression mode\n */\nexport type DefaultCompressionMode = (\"fast\" | \"high\")\n\n/**\n * Creation of communication target object\n */\nexport interface AffCotaV1 {\nformatVersion: FormatVersion\nheader: Header\nconfiguration: Configuration\nhttpSettings?: HTTPSettings\nrfcSettings?: RFCSettings\n}\n/**\n * Header\n */\nexport interface Header {\ndescription: Description\noriginalLanguage: OriginalLanguage\nabapLanguageVersion?: ABAPLanguageVersion\n}\n/**\n * Configuration\n */\nexport interface Configuration {\ncommunicationType?: CommunicationType\ncommunicationTargetClass?: CommunicationTargetClass\nmultitenancyMode?: MultitenancyMode\nallowMultipleDestinations?: AllowMultipleApplicationDestinations\n}\n/**\n * HTTP settings\n */\nexport interface HTTPSettings {\npathPrefix?: PathPrefix\n}\n/**\n * RFC settings\n */\nexport interface RFCSettings {\nenforceSapGuiSupport?: EnforceSAPGUISupport\nenforceFastSerialization?: EnforceFastSerialization\ndefaultCompressionMode?: DefaultCompressionMode\n}\n\nexport type CotaAff = AffCotaV1;\n","/**\n * Auto-generated from SAP/abap-file-formats JSON schemas.\n * Do not edit — regenerate with `bun scripts/generate-aff-schemas.ts`.\n */\n/**\n * Format version\n */\nexport type FormatVersion = \"1\"\n/**\n * Description of the ABAP object\n */\nexport type Description = string\n/**\n * Original language of the ABAP object\n */\nexport type OriginalLanguage = string\n/**\n * ABAP language version\n */\nexport type ABAPLanguageVersion = (\"standard\" | \"cloudDevelopment\")\n/**\n * File\n */\nexport type File = string\n/**\n * CSN files\n */\nexport type CSNFiles = CSNFile[]\n\n/**\n * CSN model transport object\n */\nexport interface AffCsnmV1 {\nformatVersion: FormatVersion\nheader: Header\ncsnFiles?: CSNFiles\n}\n/**\n * Header\n */\nexport interface Header {\ndescription: Description\noriginalLanguage: OriginalLanguage\nabapLanguageVersion?: ABAPLanguageVersion\n}\n/**\n * CSN file\n */\nexport interface CSNFile {\nfile?: File\n}\n\nexport type CsnmAff = AffCsnmV1;\n","/**\n * Auto-generated from SAP/abap-file-formats JSON schemas.\n * Do not edit — regenerate with `bun scripts/generate-aff-schemas.ts`.\n */\n/**\n * Format version\n */\nexport type FormatVersion = \"1\"\n/**\n * Description of the ABAP object\n */\nexport type Description = string\n/**\n * Original language of the ABAP object\n */\nexport type OriginalLanguage = string\n/**\n * ABAP language version\n */\nexport type ABAPLanguageVersion = (\"standard\" | \"keyUser\" | \"cloudDevelopment\")\n/**\n * Sensitivity level for data category\n */\nexport type SensitivityLevel = (\"personalData\" | \"sensitivePersonalData\")\n\n/**\n * Data Category\n */\nexport interface AffDcatV1 {\nformatVersion: FormatVersion\nheader: Header\nattributes: Attributes\n}\n/**\n * Header\n */\nexport interface Header {\ndescription: Description\noriginalLanguage: OriginalLanguage\nabapLanguageVersion?: ABAPLanguageVersion\n}\n/**\n * Attributes of the data category\n */\nexport interface Attributes {\nsensitivityLevel?: SensitivityLevel\n}\n\nexport type DcatAff = AffDcatV1;\n","/**\n * Auto-generated from SAP/abap-file-formats JSON schemas.\n * Do not edit — regenerate with `bun scripts/generate-aff-schemas.ts`.\n */\n/**\n * The ABAP file format version\n */\nexport type ABAPFileFormatVersion = \"1\"\n/**\n * Description of the ABAP object\n */\nexport type Description = string\n/**\n * Original language of the ABAP object\n */\nexport type OriginalLanguage = string\n/**\n * ABAP language version\n */\nexport type ABAPLanguageVersion = (\"standard\" | \"keyUser\" | \"cloudDevelopment\")\n\n/**\n * Attributes of the Data Control Language Source\n */\nexport interface AffDclsV1 {\nformatVersion: ABAPFileFormatVersion\nheader: Header\n}\n/**\n * Header\n */\nexport interface Header {\ndescription: Description\noriginalLanguage: OriginalLanguage\nabapLanguageVersion?: ABAPLanguageVersion\n}\n\nexport type DclsAff = AffDclsV1;\n","/**\n * Auto-generated from SAP/abap-file-formats JSON schemas.\n * Do not edit — regenerate with `bun scripts/generate-aff-schemas.ts`.\n */\n/**\n * The ABAP file format version\n */\nexport type ABAPFileFormatVersion = \"1\"\n/**\n * Description of the ABAP object\n */\nexport type Description = string\n/**\n * Original language of the ABAP object\n */\nexport type OriginalLanguage = string\n\n/**\n * Attributes of the annotation definition\n */\nexport interface AffDdlaV1 {\nformatVersion: ABAPFileFormatVersion\nheader: Header\n}\n/**\n * Header\n */\nexport interface Header {\ndescription: Description\noriginalLanguage: OriginalLanguage\n}\n\nexport type DdlaAff = AffDdlaV1;\n","/**\n * Auto-generated from SAP/abap-file-formats JSON schemas.\n * Do not edit — regenerate with `bun scripts/generate-aff-schemas.ts`.\n */\n/**\n * The ABAP file format version\n */\nexport type ABAPFileFormatVersion = \"1\"\n/**\n * Description of the ABAP object\n */\nexport type Description = string\n/**\n * Original language of the ABAP object\n */\nexport type OriginalLanguage = string\n/**\n * ABAP language version\n */\nexport type ABAPLanguageVersion = (\"standard\" | \"keyUser\" | \"cloudDevelopment\")\n/**\n * Source origin\n */\nexport type SourceOrigin = (\"abapDevelopmentTools\" | \"customCdsViews\" | \"customAnalyticalQueries\" | \"customBusinessObject\" | \"customCodeList\" | \"customCdsViewsVariantConfg\" | \"customFields\" | \"extensionsForDataSources\" | \"customSearchModeler\" | \"serviceConsumptionModel\")\n/**\n * Source type\n */\nexport type SourceType = (\"ddicBasedView\" | \"viewEntity\" | \"viewExtend\" | \"viewEntityExtend\" | \"tableFunction\" | \"tableEntity\" | \"abstractEntity\" | \"customEntity\" | \"hierarchy\" | \"projectionView\" | \"externalEntity\" | \"unknown\")\n/**\n * DDLS name of the parent of an extend\n */\nexport type ParentName = string\n\n/**\n * DDLS object type\n */\nexport interface AffDdlsV1 {\nformatVersion: ABAPFileFormatVersion\nheader: Header\nsourceOrigin: SourceOrigin\nsourceType: SourceType\nparentName?: ParentName\n}\n/**\n * Header\n */\nexport interface Header {\ndescription: Description\noriginalLanguage: OriginalLanguage\nabapLanguageVersion?: ABAPLanguageVersion\n}\n\nexport type DdlsAff = AffDdlsV1;\n","/**\n * Auto-generated from SAP/abap-file-formats JSON schemas.\n * Do not edit — regenerate with `bun scripts/generate-aff-schemas.ts`.\n */\n/**\n * The ABAP file format version\n */\nexport type ABAPFileFormatVersion = \"1\"\n/**\n * Description of the ABAP object\n */\nexport type Description = string\n/**\n * Original language of the ABAP object\n */\nexport type OriginalLanguage = string\n/**\n * ABAP language version\n */\nexport type ABAPLanguageVersion = (\"standard\" | \"keyUser\" | \"cloudDevelopment\")\n\n/**\n * DDLX object type\n */\nexport interface AffDdlxV1 {\nformatVersion: ABAPFileFormatVersion\nheader: Header\n}\n/**\n * Header\n */\nexport interface Header {\ndescription: Description\noriginalLanguage: OriginalLanguage\nabapLanguageVersion?: ABAPLanguageVersion\n}\n\nexport type DdlxAff = AffDdlxV1;\n","/**\n * Auto-generated from SAP/abap-file-formats JSON schemas.\n * Do not edit — regenerate with `bun scripts/generate-aff-schemas.ts`.\n */\n/**\n * Format version\n */\nexport type FormatVersion = \"1\"\n/**\n * Description of the ABAP object\n */\nexport type Description = string\n/**\n * Original language of the ABAP object\n */\nexport type OriginalLanguage = string\n/**\n * ABAP language version\n */\nexport type ABAPLanguageVersion = (\"standard\" | \"cloudDevelopment\")\n/**\n * Default remote database schema name when configuring the connection details of logical external schema.\n */\nexport type DefaultRemoteSchema = string\n/**\n * If true, the logical external schema can only be used in routed scenarios.\n */\nexport type UsesRouting = boolean\n\n/**\n * CDS logical external schema\n */\nexport interface AffDesdV1 {\nformatVersion: FormatVersion\nheader: Header\ngeneralInformation?: GeneralInformation\n}\n/**\n * Header\n */\nexport interface Header {\ndescription: Description\noriginalLanguage: OriginalLanguage\nabapLanguageVersion?: ABAPLanguageVersion\n}\n/**\n * General information\n */\nexport interface GeneralInformation {\ndefaultRemoteSchemaName?: DefaultRemoteSchema\nusesRouting?: UsesRouting\n}\n\nexport type DesdAff = AffDesdV1;\n","/**\n * Auto-generated from SAP/abap-file-formats JSON schemas.\n * Do not edit — regenerate with `bun scripts/generate-aff-schemas.ts`.\n */\n/**\n * The ABAP file format version\n */\nexport type ABAPFileFormatVersion = \"1\"\n/**\n * Description of the ABAP object\n */\nexport type Description = string\n/**\n * Original language of the ABAP object\n */\nexport type OriginalLanguage = string\n/**\n * ABAP language version\n */\nexport type ABAPLanguageVersion = (\"standard\" | \"cloudDevelopment\")\n/**\n * Class name\n */\nexport type Class = string\n/**\n * type\n */\nexport type Type = (\"CLAS\" | \"FUGR\" | \"PROG\")\n/**\n * name\n */\nexport type Name = string\n/**\n * Daemon type\n */\nexport type DaemonType = (\"application\" | \"system\")\n/**\n * Start type\n */\nexport type StartType = (\"automaticallyStarted\" | \"explicitlyStartedSameuser\" | \"explicitlyStartedDiffuser\")\n\n/**\n * ABAP daemon\n */\nexport interface AffDmonV1 {\nformatVersion: ABAPFileFormatVersion\nheader: Header\nclassName: Class\ncallerObject: CallerObject\ndaemonType?: DaemonType\nstartType?: StartType\n}\n/**\n * Header\n */\nexport interface Header {\ndescription: Description\noriginalLanguage: OriginalLanguage\nabapLanguageVersion?: ABAPLanguageVersion\n}\n/**\n * Caller object\n */\nexport interface CallerObject {\ntype: Type\nname: Name\n}\n\nexport type DmonAff = AffDmonV1;\n","/**\n * Auto-generated from SAP/abap-file-formats JSON schemas.\n * Do not edit — regenerate with `bun scripts/generate-aff-schemas.ts`.\n */\n/**\n * The ABAP file format version\n */\nexport type ABAPFileFormatVersion = \"1\"\n/**\n * Description of the ABAP object\n */\nexport type Description = string\n/**\n * Original language of the ABAP object\n */\nexport type OriginalLanguage = string\n/**\n * ABAP language version\n */\nexport type ABAPLanguageVersion = (\"standard\" | \"cloudDevelopment\")\n/**\n * Destruction class\n */\nexport type DestructionClass = string\n/**\n * Parent table\n */\nexport type ParentTable = string\n/**\n * Dependent table\n */\nexport type DependentTable = string\n/**\n * Structure definition\n */\nexport type StructureDefinition = StructureDefinitionDetails[]\n\n/**\n * ILM destruction object (DOBJ) v1\n */\nexport interface AffDobjV1 {\nformatVersion: ABAPFileFormatVersion\nheader: Header\nattributes: Attributes\nstructureDefinition: StructureDefinition\n}\n/**\n * Header\n */\nexport interface Header {\ndescription: Description\noriginalLanguage: OriginalLanguage\nabapLanguageVersion?: ABAPLanguageVersion\n}\n/**\n * Attributes\n */\nexport interface Attributes {\ndestructionClass: DestructionClass\n}\n/**\n * Structure definition details\n */\nexport interface StructureDefinitionDetails {\nparentTable?: ParentTable\ndependentTable?: DependentTable\n}\n\nexport type DobjAff = AffDobjV1;\n","/**\n * Auto-generated from SAP/abap-file-formats JSON schemas.\n * Do not edit — regenerate with `bun scripts/generate-aff-schemas.ts`.\n */\n/**\n * The ABAP file format version\n */\nexport type ABAPFileFormatVersion = \"1\"\n/**\n * Paragraph format, max. length 2\n */\nexport type Format = string\n/**\n * Long text line content, max. length 72\n */\nexport type Line = string\n/**\n * Start type\n */\nexport type StartType = LongTextLine[]\n\n/**\n * documentation\n */\nexport interface AffDocuV1 {\nformatVersion: ABAPFileFormatVersion\nlines?: StartType\n}\n/**\n * Long text line with format and content\n */\nexport interface LongTextLine {\nformat: Format\nline: Line\n}\n\nexport type DocuAff = AffDocuV1;\n","/**\n * Auto-generated from SAP/abap-file-formats JSON schemas.\n * Do not edit — regenerate with `bun scripts/generate-aff-schemas.ts`.\n */\n/**\n * The ABAP file format version\n */\nexport type ABAPFileFormatVersion = \"1\"\n/**\n * Description of the ABAP object\n */\nexport type Description = string\n/**\n * Original language of the ABAP object\n */\nexport type OriginalLanguage = string\n/**\n * ABAP language version\n */\nexport type ABAPLanguageVersion = (\"standard\" | \"keyUser\" | \"cloudDevelopment\")\n/**\n * Data type\n */\nexport type DataType = (\"ACCP\" | \"CHAR\" | \"CLNT\" | \"CUKY\" | \"CURR\" | \"DF16_DEC\" | \"DF16_RAW\" | \"DF16_SCL\" | \"DECFLOAT16\" | \"DF34_DEC\" | \"DF34_RAW\" | \"DF34_SCL\" | \"DECFLOAT34\" | \"DATS\" | \"DATN\" | \"DEC\" | \"FLTP\" | \"GEOM_EWKB\" | \"INT1\" | \"INT2\" | \"INT4\" | \"INT8\" | \"LANG\" | \"LCHR\" | \"LRAW\" | \"NUMC\" | \"PREC\" | \"QUAN\" | \"RAW\" | \"RAWSTRING\" | \"SSTRING\" | \"STRING\" | \"TIMS\" | \"TIMN\" | \"UNIT\" | \"UTCLONG\" | \"VARC\")\n/**\n * Length\n */\nexport type Length = number\n/**\n * Output style (for Releases < 71*)\n */\nexport type Style = (\"normal\" | \"signRight\" | \"scalePreserving\" | \"scientific\" | \"scientificWithLeadingZero\" | \"scalePreservingScientific\" | \"engineering\")\n/**\n * Set the output length\n */\nexport type Length1 = number\n/**\n * Values are case sensitive\n */\nexport type CaseSensitive = boolean\n/**\n * Supports negative values\n */\nexport type NegativeValues = boolean\n/**\n * AM/PM time format supported\n */\nexport type AMPMTimeFormat = boolean\n/**\n * Value\n */\nexport type FixedValue = string\n/**\n * Description\n */\nexport type Description1 = string\n/**\n * Fixed values\n */\nexport type FixedValues = SingleValues[]\n/**\n * Low value for the interval\n */\nexport type LowLimitOfTheInterval = string\n/**\n * High value for the interval\n */\nexport type HighLimitOfTheInterval = string\n/**\n * Description\n */\nexport type Description2 = string\n/**\n * Fixed value intervals\n */\nexport type FixedValueIntervals = IntervalValues[]\n/**\n * Name\n */\nexport type Name = string\n/**\n * Name\n */\nexport type Name1 = string\n/**\n * Fixed value appends\n */\nexport type FixedValueAppends = FixedValueAppends1[]\n\n/**\n * Domain properties\n */\nexport interface AffDomaV1 {\nformatVersion: ABAPFileFormatVersion\nheader: Header\nformat: Format\noutputCharacteristics?: OutputCharacteristics\nfixedValues?: FixedValues\nfixedValueIntervals?: FixedValueIntervals\nvalueTable?: ValueTable\nfixedValueAppends?: FixedValueAppends\n}\n/**\n * Header\n */\nexport interface Header {\ndescription: Description\noriginalLanguage: OriginalLanguage\nabapLanguageVersion?: ABAPLanguageVersion\n}\n/**\n * Format\n */\nexport interface Format {\ndataType: DataType\nlength: Length\n/**\n * Set if decimal\n */\ndecimals?: number\n}\n/**\n * Output characteristics\n */\nexport interface OutputCharacteristics {\nstyle?: Style\nlength?: Length1\n/**\n * Conversion Routine\n */\nconversionRoutine?: string\ncaseSensitive?: CaseSensitive\nnegativeValues?: NegativeValues\namPmTimeFormat?: AMPMTimeFormat\n}\n/**\n * Single values\n */\nexport interface SingleValues {\nfixedValue?: FixedValue\ndescription?: Description1\n}\n/**\n * Interval values\n */\nexport interface IntervalValues {\nlowLimit?: LowLimitOfTheInterval\nhighLimit: HighLimitOfTheInterval\ndescription?: Description2\n}\n/**\n * Value table\n */\nexport interface ValueTable {\nname?: Name\n}\n/**\n * Fixed value appends\n */\nexport interface FixedValueAppends1 {\nname?: Name1\n}\n\nexport type DomaAff = AffDomaV1;\n","/**\n * Auto-generated from SAP/abap-file-formats JSON schemas.\n * Do not edit — regenerate with `bun scripts/generate-aff-schemas.ts`.\n */\n/**\n * The ABAP file format version\n */\nexport type ABAPFileFormatVersion = \"1\"\n/**\n * Description of the ABAP object\n */\nexport type Description = string\n/**\n * Original language of the ABAP object\n */\nexport type OriginalLanguage = string\n/**\n * ABAP language version\n */\nexport type ABAPLanguageVersion = (\"standard\" | \"keyUser\" | \"cloudDevelopment\")\n\n/**\n * CDS scalar aspect\n */\nexport interface AffDrasV1 {\nformatVersion: ABAPFileFormatVersion\nheader: Header\n}\n/**\n * Header\n */\nexport interface Header {\ndescription: Description\noriginalLanguage: OriginalLanguage\nabapLanguageVersion?: ABAPLanguageVersion\n}\n\nexport type DrasAff = AffDrasV1;\n","/**\n * Auto-generated from SAP/abap-file-formats JSON schemas.\n * Do not edit — regenerate with `bun scripts/generate-aff-schemas.ts`.\n */\n/**\n * The ABAP file format version\n */\nexport type ABAPFileFormatVersion = \"1\"\n/**\n * Description of the ABAP object\n */\nexport type Description = string\n/**\n * Original language of the ABAP object\n */\nexport type OriginalLanguage = string\n/**\n * ABAP language version\n */\nexport type ABAPLanguageVersion = (\"standard\" | \"keyUser\" | \"cloudDevelopment\")\n\n/**\n * CDS type\n */\nexport interface AffDrtyV1 {\nformatVersion: ABAPFileFormatVersion\nheader: Header\n}\n/**\n * Header\n */\nexport interface Header {\ndescription: Description\noriginalLanguage: OriginalLanguage\nabapLanguageVersion?: ABAPLanguageVersion\n}\n\nexport type DrtyAff = AffDrtyV1;\n","/**\n * Auto-generated from SAP/abap-file-formats JSON schemas.\n * Do not edit — regenerate with `bun scripts/generate-aff-schemas.ts`.\n */\n/**\n * The ABAP file format version\n */\nexport type ABAPFileFormatVersion = \"1\"\n/**\n * Description of the ABAP object\n */\nexport type Description = string\n/**\n * Original language of the ABAP object\n */\nexport type OriginalLanguage = string\n/**\n * ABAP language version\n */\nexport type ABAPLanguageVersion = (\"standard\" | \"keyUser\" | \"cloudDevelopment\")\n\n/**\n * CDS scalar function definition\n */\nexport interface AffDsfdV1 {\nformatVersion: ABAPFileFormatVersion\nheader: Header\n}\n/**\n * Header\n */\nexport interface Header {\ndescription: Description\noriginalLanguage: OriginalLanguage\nabapLanguageVersion?: ABAPLanguageVersion\n}\n\nexport type DsfdAff = AffDsfdV1;\n","/**\n * Auto-generated from SAP/abap-file-formats JSON schemas.\n * Do not edit — regenerate with `bun scripts/generate-aff-schemas.ts`.\n */\n/**\n * The ABAP file format version\n */\nexport type ABAPFileFormatVersion = \"1\"\n/**\n * Description of the ABAP object\n */\nexport type Description = string\n/**\n * Original language of the ABAP object\n */\nexport type OriginalLanguage = string\n/**\n * ABAP language version\n */\nexport type ABAPLanguageVersion = (\"standard\" | \"keyUser\" | \"cloudDevelopment\")\n/**\n * The name of the scalar function\n */\nexport type ScalarFunctionName = string\n/**\n * Engine\n */\nexport type Engine = (\"analyticalEngine\" | \"sqlEngine\")\n/**\n * The name of the AMDP implementation reference\n */\nexport type AMDPReference = string\n/**\n * Flag whether or not the SQL implementation of the CDS scalar function will be automatically exposed in all SQL services\n */\nexport type AutomaticallyExposedInSQLServices = boolean\n\nexport interface AffDsfiV1 {\nformatVersion: ABAPFileFormatVersion\nheader: Header\nscalarFunctionName: ScalarFunctionName\nengine?: Engine\nsqlProperties?: SQLProperties\n}\n/**\n * The header for an ABAP main object (with source code) with a description of 60 characters\n */\nexport interface Header {\ndescription: Description\noriginalLanguage: OriginalLanguage\nabapLanguageVersion?: ABAPLanguageVersion\n}\n/**\n * SQL Properties\n */\nexport interface SQLProperties {\namdpReference: AMDPReference\nautoExposedInSqlServices?: AutomaticallyExposedInSQLServices\n}\n\nexport type DsfiAff = AffDsfiV1;\n","/**\n * Auto-generated from SAP/abap-file-formats JSON schemas.\n * Do not edit — regenerate with `bun scripts/generate-aff-schemas.ts`.\n */\n/**\n * The ABAP file format version\n */\nexport type ABAPFileFormatVersion = \"1\"\n/**\n * Description of the ABAP object\n */\nexport type Description = string\n/**\n * Original language of the ABAP object\n */\nexport type OriginalLanguage = string\n/**\n * ABAP language version\n */\nexport type ABAPLanguageVersion = (\"standard\" | \"keyUser\" | \"cloudDevelopment\")\n\n/**\n * Dynamic cache\n */\nexport interface AffDtdcV1 {\nformatVersion: ABAPFileFormatVersion\nheader: Header\n}\n/**\n * Header\n */\nexport interface Header {\ndescription: Description\noriginalLanguage: OriginalLanguage\nabapLanguageVersion?: ABAPLanguageVersion\n}\n\nexport type DtdcAff = AffDtdcV1;\n","/**\n * Auto-generated from SAP/abap-file-formats JSON schemas.\n * Do not edit — regenerate with `bun scripts/generate-aff-schemas.ts`.\n */\n/**\n * The ABAP file format version\n */\nexport type ABAPFileFormatVersion = \"1\"\n/**\n * Description of the ABAP object\n */\nexport type Description = string\n/**\n * Original language of the ABAP object\n */\nexport type OriginalLanguage = string\n/**\n * ABAP language version\n */\nexport type ABAPLanguageVersion = (\"standard\" | \"cloudDevelopment\")\n\n/**\n * CDS entity buffer\n */\nexport interface AffDtebV1 {\nformatVersion: ABAPFileFormatVersion\nheader: Header\n}\n/**\n * Header\n */\nexport interface Header {\ndescription: Description\noriginalLanguage: OriginalLanguage\nabapLanguageVersion?: ABAPLanguageVersion\n}\n\nexport type DtebAff = AffDtebV1;\n","/**\n * Auto-generated from SAP/abap-file-formats JSON schemas.\n * Do not edit — regenerate with `bun scripts/generate-aff-schemas.ts`.\n */\n/**\n * The ABAP file format version\n */\nexport type ABAPFileFormatVersion = \"1\"\n/**\n * Description of the ABAP object\n */\nexport type Description = string\n/**\n * Original language of the ABAP object\n */\nexport type OriginalLanguage = string\n/**\n * ABAP language version\n */\nexport type ABAPLanguageVersion = (\"standard\" | \"keyUser\" | \"cloudDevelopment\")\n/**\n * Reference domain name\n */\nexport type DomainName = string\n/**\n * Data type\n */\nexport type DataType = (\"ACCP\" | \"CHAR\" | \"CLNT\" | \"CUKY\" | \"CURR\" | \"DF16_DEC\" | \"DF16_RAW\" | \"DF16_SCL\" | \"DECFLOAT16\" | \"DF34_DEC\" | \"DF34_RAW\" | \"DF34_SCL\" | \"DECFLOAT34\" | \"DATS\" | \"DATN\" | \"DEC\" | \"FLTP\" | \"GEOM_EWKB\" | \"INT1\" | \"INT2\" | \"INT4\" | \"INT8\" | \"LANG\" | \"LCHR\" | \"LRAW\" | \"NUMC\" | \"PREC\" | \"QUAN\" | \"RAW\" | \"RAWSTRING\" | \"SSTRING\" | \"STRING\" | \"TIMS\" | \"TIMN\" | \"UNIT\" | \"UTCLONG\" | \"VARC\")\n/**\n * Length\n */\nexport type Length = number\n/**\n * Decimals\n */\nexport type Decimals = number\n/**\n * Reference to an ABAP type\n */\nexport type ReferenceType = string\n/**\n * Reference to a predefined ABAP type\n */\nexport type ReferencePredefinedType = string\n/**\n * Short field label\n */\nexport type Short = string\n/**\n * Short length\n */\nexport type ShortLength = number\n/**\n * Medium field label\n */\nexport type Medium = string\n/**\n * Medium length\n */\nexport type MediumLength = number\n/**\n * Long field label\n */\nexport type Long = string\n/**\n * Long length\n */\nexport type LongLength = number\n/**\n * Heading field label\n */\nexport type Heading = string\n/**\n * Heading length\n */\nexport type HeadingLength = number\n/**\n * Search help name\n */\nexport type Name = string\n/**\n * Search help parameters\n */\nexport type Parameter = string\n/**\n * Basic direction\n */\nexport type BasicDirection = (\"leftToRight\" | \"rightToLeft\")\n/**\n * Deactivates bidirectional text filtering\n */\nexport type NoBidirectionalFiltering = boolean\n/**\n * Set/Get parameter ID\n */\nexport type SetGetParameterID = string\n/**\n * Default component name\n */\nexport type DefaultComponentName = string\n/**\n * Change document relevant\n */\nexport type ChangeDocumentRelevant = boolean\n/**\n * No input history\n */\nexport type NoInputHistory = boolean\n\n/**\n * Data element (DTEL)\n */\nexport interface AffDtelV1 {\nformatVersion: ABAPFileFormatVersion\nheader: Header\ndataTypeInformation: DataTypeInformation\nfieldLabels?: FieldLabels\nsearchHelp?: SearchHelp\nbidirectionalOptions?: BidirectionalOptions\nadditionalProperties?: AdditionalProperties\n}\n/**\n * Header\n */\nexport interface Header {\ndescription: Description\noriginalLanguage: OriginalLanguage\nabapLanguageVersion?: ABAPLanguageVersion\n}\n/**\n * Data type information\n */\nexport interface DataTypeInformation {\ndomainName?: DomainName\npredefinedType?: PredefinedType\nreferenceType?: ReferenceType\nreferencePredefinedType?: ReferencePredefinedType\n}\n/**\n * Predefined ABAP type\n */\nexport interface PredefinedType {\ndataType: DataType\nlength: Length\ndecimals?: Decimals\n}\n/**\n * Field labels\n */\nexport interface FieldLabels {\nshort?: Short\nshortLength?: ShortLength\nmedium?: Medium\nmediumLength?: MediumLength\nlong?: Long\nlongLength?: LongLength\nheading?: Heading\nheadingLength?: HeadingLength\n}\n/**\n * Search help\n */\nexport interface SearchHelp {\nname: Name\nparameter: Parameter\n}\n/**\n * Bidirectional options\n */\nexport interface BidirectionalOptions {\nbasicDirection?: BasicDirection\nnoFiltering?: NoBidirectionalFiltering\n}\n/**\n * Additional properties\n */\nexport interface AdditionalProperties {\nparameterId?: SetGetParameterID\ndefaultComponentName?: DefaultComponentName\nchangeDocumentRelevant?: ChangeDocumentRelevant\nnoInputHistory?: NoInputHistory\n}\n\nexport type DtelAff = AffDtelV1;\n","/**\n * Auto-generated from SAP/abap-file-formats JSON schemas.\n * Do not edit — regenerate with `bun scripts/generate-aff-schemas.ts`.\n */\n/**\n * The ABAP file format version\n */\nexport type ABAPFileFormatVersion = \"1\"\n/**\n * Description of the ABAP object\n */\nexport type Description = string\n/**\n * Original language of the ABAP object\n */\nexport type OriginalLanguage = string\n/**\n * ABAP language version\n */\nexport type ABAPLanguageVersion = (\"standard\" | \"cloudDevelopment\")\n\n/**\n * Dictionary Tuning Index\n */\nexport interface AffDtixV1 {\nformatVersion: ABAPFileFormatVersion\nheader: Header\n}\n/**\n * Header\n */\nexport interface Header {\ndescription: Description\noriginalLanguage: OriginalLanguage\nabapLanguageVersion?: ABAPLanguageVersion\n}\n\nexport type DtixAff = AffDtixV1;\n","/**\n * Auto-generated from SAP/abap-file-formats JSON schemas.\n * Do not edit — regenerate with `bun scripts/generate-aff-schemas.ts`.\n */\n/**\n * The ABAP file format version\n */\nexport type ABAPFileFormatVersion = \"1\"\n/**\n * Description of the ABAP object\n */\nexport type Description = string\n/**\n * Original language of the ABAP object\n */\nexport type OriginalLanguage = string\n/**\n * ABAP language version\n */\nexport type ABAPLanguageVersion = (\"standard\" | \"keyUser\" | \"cloudDevelopment\")\n\n/**\n * Dictionary tuning static cache\n */\nexport interface AffDtscV1 {\nformatVersion: ABAPFileFormatVersion\nheader: Header\n}\n/**\n * Header\n */\nexport interface Header {\ndescription: Description\noriginalLanguage: OriginalLanguage\nabapLanguageVersion?: ABAPLanguageVersion\n}\n\nexport type DtscAff = AffDtscV1;\n","/**\n * Auto-generated from SAP/abap-file-formats JSON schemas.\n * Do not edit — regenerate with `bun scripts/generate-aff-schemas.ts`.\n */\n/**\n * The ABAP file format version\n */\nexport type ABAPFileFormatVersion = \"1\"\n/**\n * Description of the ABAP object\n */\nexport type Description = string\n/**\n * Original language of the ABAP object\n */\nexport type OriginalLanguage = string\n/**\n * ABAP language version\n */\nexport type ABAPLanguageVersion = (\"standard\" | \"cloudDevelopment\")\n/**\n * Country code\n */\nexport type CountryCode = string\n/**\n * Assigned representation type\n */\nexport type Name = string\n/**\n * Assign representation types associated with consistency scenario\n */\nexport type RepresentationTypes = RepresentationType[]\n/**\n * View name\n */\nexport type ViewName = string\n/**\n * Field name\n */\nexport type FieldName = string\n/**\n * Field type\n */\nexport type FieldType = (\"selectOptions\" | \"parameterSingleValue\" | \"parameterMultipleValues\")\n/**\n * Additional selection fields of validation report\n */\nexport type AdditionalSelectionFields = AdditionalSelectionField[]\n/**\n * Message type\n */\nexport type Name1 = string\n/**\n * Tax authority document type\n */\nexport type TaxAuthorityDocumentType = string\n/**\n * Tax authority message types\n */\nexport type TaxAuthorityMessageTypes = TaxAuthorityMessageType[]\n/**\n * Table name\n */\nexport type Name2 = string\n/**\n * Additional tax authority tables\n */\nexport type AdditionalTaxAuthorityTables = AdditionalTaxAuthorityTable[]\n/**\n * eDocument Type\n */\nexport type Name3 = string\n/**\n * Assign eDocument types associated with consistency scenario\n */\nexport type EDocumentTypes = EDocumentType[]\n/**\n * Comparison type\n */\nexport type Name4 = string\n/**\n * Description of the comparison type\n */\nexport type Description1 = string\n/**\n * Position number\n */\nexport type PositionNumber = string\n/**\n * Implementing Class\n */\nexport type ImplementingClass = string\n/**\n * Data Source\n */\nexport type DataSource = string\n/**\n * Check id\n */\nexport type CheckID = string\n/**\n * Field name\n */\nexport type FieldName1 = string\n/**\n * Field value\n */\nexport type FieldValue = string\n/**\n * Result process\n */\nexport type ResultProcess = string\n/**\n * Check id\n */\nexport type CheckID1 = string\n/**\n * Sequence number\n */\nexport type SequenceNumber = string\n/**\n * Source field name 1\n */\nexport type SourceFieldName1 = string\n/**\n * Source field value 1\n */\nexport type SourceFieldValue1 = string\n/**\n * Source field name 2\n */\nexport type SourceFieldName2 = string\n/**\n * Source field value 2\n */\nexport type SourceFieldValue2 = string\n/**\n * Result process\n */\nexport type ResultProcess1 = string\n/**\n * Assigned status checks\n */\nexport type StatusChecks = StatusCheck[]\n/**\n * Check id\n */\nexport type CheckID2 = string\n/**\n * Check number\n */\nexport type CheckNumber = string\n/**\n * Additional data source\n */\nexport type AdditionalDataSource = string\n/**\n * Additional check description\n */\nexport type AdditionalDescription = string\n/**\n * Comparison field group for mismatched fields\n */\nexport type Name5 = string\n/**\n * Mismatch field group description\n */\nexport type Description2 = string\n/**\n * Level of comparison field group\n */\nexport type Level = (\"header\" | \"item\")\n/**\n * Formula applied to perform the content check on the field group\n */\nexport type CheckFormula = (\"field\" | \"fieldWithAbsTolerance\" | \"fieldWithoutAbsTolerance\")\n/**\n * Result process\n */\nexport type ResultProcess2 = string\n/**\n * Representation type\n */\nexport type RepresentationType1 = string\n/**\n * Field name to be compared\n */\nexport type FieldName2 = string\n/**\n * Comparison sequence\n */\nexport type ComparisonSequence = string\n/**\n * Field Names whose values will be compared\n */\nexport type ComparisonFields = ComparisonFieldName[]\n/**\n * Comparison field groups\n */\nexport type ComparisonFieldGroups = ComparisonFieldGroup[]\n/**\n * Assigned content checks\n */\nexport type ContentChecks = ContentCheck[]\n/**\n * Check id\n */\nexport type CheckID3 = string\n/**\n * Check execution control parameter\n */\nexport type ControlParameter = (\"alwaysRunCheck\" | \"runCheckIfNoInconsistency\")\n/**\n * Sequence of the checks and control parameter\n */\nexport type CheckSequence = CheckSequence1[]\n/**\n * Assigned representation type\n */\nexport type Name6 = string\n/**\n * Assigned representation types\n */\nexport type RepresentationTypes1 = RepresentationType2[]\n/**\n * Define comparison types\n */\nexport type ComparisonTypes = ComparisonType[]\n/**\n * Event name\n */\nexport type Name7 = string\n/**\n * Comparison type\n */\nexport type ComparisonType1 = string\n/**\n * Check id\n */\nexport type CheckID4 = string\n/**\n * Assigned comparison Types and checks\n */\nexport type ComparisonTypesAndChecks = ComparisonTypeAndCheck[]\n/**\n * Comparison type\n */\nexport type ComparisonType2 = string\n/**\n * Check id\n */\nexport type CheckID5 = string\n/**\n * Relevance\n */\nexport type Relevance = (\"relevant\" | \"notRelevant\" | \"unchanged\")\n/**\n * Define relevance of checks\n */\nexport type CheckRelevance = CheckRelevance1[]\n/**\n * Assigned events to consistency scenario\n */\nexport type Events = Event[]\n/**\n * Inconsistency category\n */\nexport type Name8 = string\n/**\n * Description of the result ui group\n */\nexport type Description3 = string\n/**\n * Country view extension\n */\nexport type CountryViewExtension = string\nexport type Name9 = string\n/**\n * Assign result process to the UI group\n */\nexport type ResultProcesses = ResultProcess3[]\n/**\n * Inconsistency categories and assigned result processes\n */\nexport type InconsistencyCategories = InconsistencyCategory[]\n\n/**\n * Consistency scenario\n */\nexport interface AffEdccV1 {\nformatVersion: ABAPFileFormatVersion\nheader: Header\ngeneralInformation: GeneralInformation\nrepresentationTypes: RepresentationTypes\nadditionalSelectionFields?: AdditionalSelectionFields\ntaxAuthorityMessageTypes?: TaxAuthorityMessageTypes\ntaxAuthorityTables?: AdditionalTaxAuthorityTables\nedocumentTypes?: EDocumentTypes\ncomparisonTypesAndEvents: ComparisonTypesAndEvents\n}\n/**\n * Header\n */\nexport interface Header {\ndescription: Description\noriginalLanguage: OriginalLanguage\nabapLanguageVersion?: ABAPLanguageVersion\n}\n/**\n * General information of consistency scenario\n */\nexport interface GeneralInformation {\ncountryCode: CountryCode\n}\n/**\n * Assigned representation type\n */\nexport interface RepresentationType {\nname: Name\n}\n/**\n * Additional selection fields of validation report\n */\nexport interface AdditionalSelectionField {\nviewName: ViewName\nfieldName: FieldName\nfieldType: FieldType\n}\n/**\n * Tax authority message type\n */\nexport interface TaxAuthorityMessageType {\nname: Name1\ntaxAuthorityDocumentType: TaxAuthorityDocumentType\n}\n/**\n * Additional tax authority table\n */\nexport interface AdditionalTaxAuthorityTable {\nname: Name2\n}\n/**\n * eDocument types associated with consistency scenario\n */\nexport interface EDocumentType {\nname: Name3\n}\n/**\n * Define comparison types and assign events to the comparison scenario\n */\nexport interface ComparisonTypesAndEvents {\ncomparisonTypes: ComparisonTypes\nevents?: Events\ninconsistencyCategories: InconsistencyCategories\n}\n/**\n * Comparison type\n */\nexport interface ComparisonType {\nname: Name4\ndescription: Description1\npositionNumber: PositionNumber\nimplementingClass: ImplementingClass\ndataSource: DataSource\nchecks: Checks\nrepresentationTypes: RepresentationTypes1\n}\n/**\n * Assigned checks\n */\nexport interface Checks {\nexistenceCheck: ExistenceCheck\nstatusChecks?: StatusChecks\ncontentChecks?: ContentChecks\ncheckSequence?: CheckSequence\n}\n/**\n * Assigned existence check\n */\nexport interface ExistenceCheck {\ncheckId: CheckID\nfieldName: FieldName1\nfieldValue: FieldValue\nresultProcess: ResultProcess\n}\n/**\n * Status check\n */\nexport interface StatusCheck {\ncheckId: CheckID1\nsequenceNumber: SequenceNumber\nsourceFieldName1: SourceFieldName1\nsourceFieldValue1: SourceFieldValue1\nsourceFieldName2: SourceFieldName2\nsourceFieldValue2: SourceFieldValue2\nresultProcess: ResultProcess1\n}\n/**\n * Content check\n */\nexport interface ContentCheck {\ncheckId: CheckID2\ncheckNumber: CheckNumber\ndataSource?: AdditionalDataSource\nadditionalDescription: AdditionalDescription\ncomparisonFieldGroups: ComparisonFieldGroups\n}\n/**\n * Comparison field group\n */\nexport interface ComparisonFieldGroup {\nname: Name5\ndescription: Description2\nlevel: Level\ncheckFormula: CheckFormula\nresultProcess: ResultProcess2\ncomparisonFields: ComparisonFields\n}\n/**\n * Field Names whose values will be compared\n */\nexport interface ComparisonFieldName {\nrepresentationType: RepresentationType1\nfieldName: FieldName2\ncomparisonSequence: ComparisonSequence\n}\n/**\n * Sequence of the checks and control parameter\n */\nexport interface CheckSequence1 {\ncheckId: CheckID3\ncontrolParameter?: ControlParameter\n}\n/**\n * Assigned representation type\n */\nexport interface RepresentationType2 {\nname: Name6\n}\n/**\n * Assigned event to consistency scenario\n */\nexport interface Event {\nname: Name7\ncomparisonTypesAndChecks: ComparisonTypesAndChecks\ncheckRelevance: CheckRelevance\n}\n/**\n * Assigned comparison type and check\n */\nexport interface ComparisonTypeAndCheck {\ncomparisonType: ComparisonType1\ncheckId?: CheckID4\n}\n/**\n * Define relevance of check\n */\nexport interface CheckRelevance1 {\ncomparisonType: ComparisonType2\ncheckId: CheckID5\nrelevance?: Relevance\n}\n/**\n * Inconsistency category\n */\nexport interface InconsistencyCategory {\nname: Name8\ndescription: Description3\ncountryViewExtension?: CountryViewExtension\nresultProcesses: ResultProcesses\n}\n/**\n * Assign result process to the UI group\n */\nexport interface ResultProcess3 {\nname: Name9\n}\n\nexport type EdccAff = AffEdccV1;\n","/**\n * Auto-generated from SAP/abap-file-formats JSON schemas.\n * Do not edit — regenerate with `bun scripts/generate-aff-schemas.ts`.\n */\n/**\n * The ABAP file format version\n */\nexport type ABAPFileFormatVersion = \"1\"\n/**\n * Description of the ABAP object\n */\nexport type Description = string\n/**\n * Original language of the ABAP object\n */\nexport type OriginalLanguage = string\n/**\n * ABAP language version\n */\nexport type ABAPLanguageVersion = (\"standard\" | \"cloudDevelopment\")\n/**\n * Consistency check category\n */\nexport type CheckCategory = (\"existenceCheck\" | \"statusCheck\" | \"edocumentExistenceCheck\" | \"contentMismatchCheck\")\n/**\n * Consistency check ID classification\n */\nexport type CheckClassification = (\"coreDeliveredChecks\" | \"additionalImplementedChecks\")\n/**\n * Consistency check class\n */\nexport type AdditionalCheckClass = string\n/**\n * Result process derived\n */\nexport type ResultProcessDerived = boolean\n\n/**\n * Consistency check ID\n */\nexport interface AffEdckV1 {\nformatVersion: ABAPFileFormatVersion\nheader: Header\ngeneralInformation: GeneralInformation\n}\n/**\n * Header\n */\nexport interface Header {\ndescription: Description\noriginalLanguage: OriginalLanguage\nabapLanguageVersion?: ABAPLanguageVersion\n}\n/**\n * General information of consistency check ID\n */\nexport interface GeneralInformation {\ncheckCategory?: CheckCategory\ncheckClassification?: CheckClassification\nadditionalCheckClass?: AdditionalCheckClass\nresultProcessDerived?: ResultProcessDerived\n}\n\nexport type EdckAff = AffEdckV1;\n","/**\n * Auto-generated from SAP/abap-file-formats JSON schemas.\n * Do not edit — regenerate with `bun scripts/generate-aff-schemas.ts`.\n */\n/**\n * The ABAP file format version\n */\nexport type ABAPFileFormatVersion = \"1\"\n/**\n * Description of the ABAP object\n */\nexport type Description = string\n/**\n * Original language of the ABAP object\n */\nexport type OriginalLanguage = string\n/**\n * ABAP language version\n */\nexport type ABAPLanguageVersion = (\"standard\" | \"cloudDevelopment\")\n\n/**\n * Representation type\n */\nexport interface AffEdcrV1 {\nformatVersion: ABAPFileFormatVersion\nheader: Header\n}\n/**\n * Header\n */\nexport interface Header {\ndescription: Description\noriginalLanguage: OriginalLanguage\nabapLanguageVersion?: ABAPLanguageVersion\n}\n\nexport type EdcrAff = AffEdcrV1;\n","/**\n * Auto-generated from SAP/abap-file-formats JSON schemas.\n * Do not edit — regenerate with `bun scripts/generate-aff-schemas.ts`.\n */\n/**\n * Format version\n */\nexport type FormatVersion = \"1\"\n/**\n * Description of the ABAP object\n */\nexport type Description = string\n/**\n * Original language of the ABAP object\n */\nexport type OriginalLanguage = string\n/**\n * ABAP language version\n */\nexport type ABAPLanguageVersion = (\"standard\" | \"cloudDevelopment\")\n/**\n * Interface direction\n */\nexport type Direction = (\"outbound\" | \"inbound\")\n/**\n * Version\n */\nexport type Version = number\n/**\n * Description\n */\nexport type Description1 = string\n/**\n * Active from\n */\nexport type ActiveFrom = string\n/**\n * DRC process type\n */\nexport type ProcessType = string\n/**\n * DRC process version\n */\nexport type ProcessVersion = string\n/**\n * DRC process subtype\n */\nexport type ProcessSubtype = string\n/**\n * DRC process action\n */\nexport type Action = string\n/**\n * eDoc response interface\n */\nexport type ResponseInterface = string\n/**\n * Response interface version\n */\nexport type ResponseInterfaceVersion = number\n/**\n * Interface versions\n */\nexport type Versions = VersionDetails[]\n\n/**\n * eDocument interface\n */\nexport interface AffEdoiV1 {\nformatVersion: FormatVersion\nheader: Header\ngeneralInformation: GeneralInformation\nversions: Versions\n}\n/**\n * Header\n */\nexport interface Header {\ndescription: Description\noriginalLanguage: OriginalLanguage\nabapLanguageVersion?: ABAPLanguageVersion\n}\n/**\n * General information\n */\nexport interface GeneralInformation {\ndirection: Direction\n}\n/**\n * eDocument interface version details\n */\nexport interface VersionDetails {\nversion: Version\ndescription: Description1\nactiveFrom: ActiveFrom\ncommunicationAttributes?: CommunicationIntegrationAttributes\n}\n/**\n * Communication integration attributes\n */\nexport interface CommunicationIntegrationAttributes {\nprocessType?: ProcessType\nprocessVersion?: ProcessVersion\nprocessSubtype?: ProcessSubtype\ndrcAction?: Action\nresponseInterface?: ResponseInterface\nresponseInterfaceVersion?: ResponseInterfaceVersion\n}\n\nexport type EdoiAff = AffEdoiV1;\n","/**\n * Auto-generated from SAP/abap-file-formats JSON schemas.\n * Do not edit — regenerate with `bun scripts/generate-aff-schemas.ts`.\n */\n/**\n * The ABAP file format version\n */\nexport type ABAPFileFormatVersion = \"1\"\n/**\n * Description of the ABAP object\n */\nexport type Description = string\n/**\n * Original language of the ABAP object\n */\nexport type OriginalLanguage = string\n/**\n * ABAP language version\n */\nexport type ABAPLanguageVersion = (\"standard\" | \"cloudDevelopment\")\n/**\n * Consumer class\n */\nexport type ConsumerClass = string\n/**\n * Descriptor class\n */\nexport type DescriptorClass = string\n/**\n * Type\n */\nexport type Type = string\n/**\n * Entity name\n */\nexport type EntityName = string\nexport type EventTypes = EventType[]\n\nexport interface AffEeecV1 {\nformatVersion: ABAPFileFormatVersion\nheader: Header\nconsumerClass: ConsumerClass\ndescriptorClass: DescriptorClass\neventTypes?: EventTypes\n}\n/**\n * Header\n */\nexport interface Header {\ndescription: Description\noriginalLanguage: OriginalLanguage\nabapLanguageVersion?: ABAPLanguageVersion\n}\nexport interface EventType {\ntype: Type\nentityName: EntityName\n}\n\nexport type EeecAff = AffEeecV1;\n","/**\n * Auto-generated from SAP/abap-file-formats JSON schemas.\n * Do not edit — regenerate with `bun scripts/generate-aff-schemas.ts`.\n */\n/**\n * The ABAP file format version\n */\nexport type ABAPFileFormatVersion = \"1\"\n/**\n * Description of the ABAP object\n */\nexport type Description = string\n/**\n * Original language of the ABAP object\n */\nexport type OriginalLanguage = string\n/**\n * ABAP language version\n */\nexport type ABAPLanguageVersion = (\"standard\" | \"keyUser\" | \"cloudDevelopment\")\n/**\n * Enhancement Spot name\n */\nexport type EnhancementSpotName = string\n/**\n * Name of the BAdI implementation\n */\nexport type Name = string\n/**\n * Description of the BAdI implementation\n */\nexport type Description1 = string\n/**\n * BAdI Definition of the BAdI implementation\n */\nexport type BAdIDefinition = string\n/**\n * Implementing class of the BAdI implementation\n */\nexport type ImplementingClass = string\n/**\n * BAdI implementation is an example implementation\n */\nexport type IsExampleImplementation = boolean\n/**\n * BAdI implementation is the default implementation of the BAdI definition\n */\nexport type IsDefaultImplementation = boolean\n/**\n * BAdI implementation is active\n */\nexport type BAdIImplementationIsActive = boolean\n/**\n * Does the BAdI implementation support customizing\n */\nexport type BAdIImplementationCustomizing = (\"notSupported\" | \"supported\" | \"supportedNoTransport\")\n/**\n * Filter value\n */\nexport type FilterValue = string\n/**\n * An and/or-operator combining filters\n */\nexport type Operator = string\n/**\n * Filter value\n */\nexport type FilterValue1 = string\n/**\n * An and/or-operator combining filters\n */\nexport type Operator1 = string\n/**\n * Filter value\n */\nexport type FilterValue2 = string\n/**\n * Filter values\n */\nexport type FilterValues2 = FilterValue2[]\n/**\n * Filter values\n */\nexport type FilterValues1 = (FilterValue1 | FilterCombination1)[]\n/**\n * Filter values for this BAdI implementation\n */\nexport type FilterValues = (FilterValue | FilterCombination)[]\n/**\n * BAdI implementations of the ENHO\n */\nexport type BAdIImplementationsOfTheENHO = BAdIImplementation[]\n/**\n * Type of the referenced object\n */\nexport type TypeOfTheReferencedObject = string\n/**\n * Name of the referenced object\n */\nexport type NameOfTheReferencedObject = string\n/**\n * Program ID (R3TR or LIMU) of the referenced object\n */\nexport type ProgramIDOfTheReferencedObject = string\n/**\n * Element usage of the referenced object\n */\nexport type ElementUsage = (\"usedObject\" | \"enhancedObject\" | \"migratedFrom\")\n/**\n * Main object type of the referenced object\n */\nexport type MainObjectType = string\n/**\n * Main object name of the referenced object\n */\nexport type MainObjectName = string\n/**\n * Referenced objects of the enhancement implementation\n */\nexport type ReferencedObjects = AReferencedObject[]\n\n/**\n * Object type ENHO\n */\nexport interface AffEnhoV1 {\nformatVersion: ABAPFileFormatVersion\nheader: Header\nenhancementSpot: EnhancementSpotName\nbadiImplementations?: BAdIImplementationsOfTheENHO\nreferencedObjects: ReferencedObjects\n}\n/**\n * Header\n */\nexport interface Header {\ndescription: Description\noriginalLanguage: OriginalLanguage\nabapLanguageVersion?: ABAPLanguageVersion\n}\n/**\n * Information about this BAdI implementation\n */\nexport interface BAdIImplementation {\nname: Name\ndescription: Description1\nbadiDefinition: BAdIDefinition\nimplementingClass?: ImplementingClass\nisExampleImplementation?: IsExampleImplementation\nisDefaultImplementation?: IsDefaultImplementation\nisActiveImplementation?: BAdIImplementationIsActive\ncustomizing?: BAdIImplementationCustomizing\nfilterValues?: FilterValues\n}\n/**\n * Filter combination\n */\nexport interface FilterCombination {\noperator?: Operator\nfilterValues?: FilterValues1\n}\n/**\n * Filter combination\n */\nexport interface FilterCombination1 {\noperator?: Operator1\nfilterValues?: FilterValues2\n}\n/**\n * A referenced object\n */\nexport interface AReferencedObject {\nobjectType: TypeOfTheReferencedObject\nobjectName: NameOfTheReferencedObject\nprogramId: ProgramIDOfTheReferencedObject\nelementUsage: ElementUsage\nmainObjectType: MainObjectType\nmainObjectName: MainObjectName\n}\n\nexport type EnhoAff = AffEnhoV1;\n","/**\n * Auto-generated from SAP/abap-file-formats JSON schemas.\n * Do not edit — regenerate with `bun scripts/generate-aff-schemas.ts`.\n */\n/**\n * The ABAP file format version\n */\nexport type ABAPFileFormatVersion = \"1\"\n/**\n * Description of the ABAP object\n */\nexport type Description = string\n/**\n * Original language of the ABAP object\n */\nexport type OriginalLanguage = string\n/**\n * ABAP language version\n */\nexport type ABAPLanguageVersion = (\"standard\" | \"keyUser\" | \"cloudDevelopment\")\n/**\n * SAP internal\n */\nexport type SAPInternal = boolean\n/**\n * Tool type of the BAdI Enhancement Spot\n */\nexport type BAdIEnhancementSpotToolType = \"badiDefinition\"\n/**\n * Name of the BAdI definition\n */\nexport type NameOfTheBAdIDefinition = string\n/**\n * Description of the BAdI definition\n */\nexport type DescriptionOfTheBAdIDefinition = string\n/**\n * Interface of the BAdI definition\n */\nexport type InterfaceOfTheBAdIDefinition = string\n/**\n * Instantiation of the BAdI definition\n */\nexport type InstantiationOfTheBAdIDefinition = (\"creatingNewInstances\" | \"reuseInstances\" | \"contextSpecificInstances\")\n/**\n * Indicator whether the BAdI definition is single- or multiple usable\n */\nexport type SingleOrMultipleUseBAdI = boolean\n/**\n * SAP internal\n */\nexport type SAPInternal1 = boolean\n/**\n * Example class\n */\nexport type ExampleClass = string\n/**\n * Example classes of the BAdI definition\n */\nexport type ExampleClassesOfTheBAdIDefinition = ExampleClass[]\n/**\n * Name of the default/fallback class. The fallback class is executed if no BAdI implementation exists.\n */\nexport type NameOfTheDefaultFallbackClass = string\n/**\n * Limited filter use\n */\nexport type LimitedFilterUse = boolean\n/**\n * Documentation Id\n */\nexport type DocumentationId = string\n/**\n * BADI is an AMDP BAdI\n */\nexport type AmdpBAdI = boolean\n/**\n * Name of the filter\n */\nexport type NameOfTheFilter = string\n/**\n * Description of the filter\n */\nexport type DescriptionOfTheFilter = string\n/**\n * Type of the filter\n */\nexport type TypeOfTheFilter = (\"integer\" | \"characterLike\" | \"string\" | \"numeric\" | \"packed\")\n/**\n * The filter has only constant filter values\n */\nexport type OnlyConstantFilterValues = boolean\n/**\n * Type of the value check object\n */\nexport type TypeOfTheValueCheckObject = (\"domain\" | \"dataElement\")\n/**\n * Name of the value check object\n */\nexport type NameOfTheValueCheckObject = string\n/**\n * Name of the value check class\n */\nexport type NameOfTheValueCheckClass = string\n/**\n * Length of the value check\n */\nexport type LengthOfTheValueCheck = number\n/**\n * Decimal places of the value check\n */\nexport type DecimalPlacesOfTheValueCheck = number\n/**\n * Filters of the BAdI definition\n */\nexport type FiltersOfTheBAdIDefinition = Filter[]\n/**\n * BAdI definitions of the BAdI Enhancement Spot\n */\nexport type BAdIDefinitionsOfTheBAdIEnhancementSpot = BAdIDefinition[]\n\n/**\n * Object type ENHS\n */\nexport interface AffEnhsV1 {\nformatVersion: ABAPFileFormatVersion\nheader: Header\nconfiguration: Configuration\nbadiDefinitions?: BAdIDefinitionsOfTheBAdIEnhancementSpot\n}\n/**\n * Header\n */\nexport interface Header {\ndescription: Description\noriginalLanguage: OriginalLanguage\nabapLanguageVersion?: ABAPLanguageVersion\n}\n/**\n * Configuration-specific fields\n */\nexport interface Configuration {\nsapInternal?: SAPInternal\ntool: BAdIEnhancementSpotToolType\n}\n/**\n * Information about this BAdI definition\n */\nexport interface BAdIDefinition {\nname: NameOfTheBAdIDefinition\ndescription: DescriptionOfTheBAdIDefinition\ninterface: InterfaceOfTheBAdIDefinition\ninstantiation: InstantiationOfTheBAdIDefinition\nmultipleUse?: SingleOrMultipleUseBAdI\nsapInternal?: SAPInternal1\nexampleClasses?: ExampleClassesOfTheBAdIDefinition\nfallbackClass?: NameOfTheDefaultFallbackClass\nfilterLimitation?: LimitedFilterUse\ndocumentationId?: DocumentationId\namdp?: AmdpBAdI\nfilters?: FiltersOfTheBAdIDefinition\n}\n/**\n * Information about this filter\n */\nexport interface Filter {\nname: NameOfTheFilter\ndescription: DescriptionOfTheFilter\ntype: TypeOfTheFilter\nonlyConstantValues?: OnlyConstantFilterValues\nvalueCheckDdic?: ValueCheckDdic\nvalueCheckClass?: ValueCheckClass\n}\n/**\n * Value check via domain or data element\n */\nexport interface ValueCheckDdic {\ntype: TypeOfTheValueCheckObject\nobjectName: NameOfTheValueCheckObject\n}\n/**\n * Value check via class\n */\nexport interface ValueCheckClass {\nobjectName: NameOfTheValueCheckClass\nlength?: LengthOfTheValueCheck\ndecimalPlaces?: DecimalPlacesOfTheValueCheck\n}\n\nexport type EnhsAff = AffEnhsV1;\n","/**\n * Auto-generated from SAP/abap-file-formats JSON schemas.\n * Do not edit — regenerate with `bun scripts/generate-aff-schemas.ts`.\n */\n/**\n * Format version\n */\nexport type FormatVersion = \"1\"\n/**\n * Description of the ABAP object\n */\nexport type Description = string\n/**\n * Original language of the ABAP object\n */\nexport type OriginalLanguage = string\n/**\n * ABAP language version\n */\nexport type ABAPLanguageVersion = (\"standard\" | \"keyUser\" | \"cloudDevelopment\")\n/**\n * Table name\n */\nexport type TableName = string\n/**\n * Lock mode\n */\nexport type LockMode = (\"exclusive\" | \"shared\" | \"exclusiveNotCumulative\" | \"setOptimistic\" | \"promoteOptimistic\" | \"conflictCheckExtendedExcl\" | \"conflictCheckExclusive\" | \"conflictCheckShared\" | \"promotionCheckOptimized\" | \"reserved1\" | \"reserved2\" | \"initial\")\n/**\n * Table name\n */\nexport type TableName1 = string\n/**\n * Lock mode\n */\nexport type LockMode1 = (\"exclusive\" | \"shared\" | \"exclusiveNotCumulative\" | \"setOptimistic\" | \"promoteOptimistic\" | \"conflictCheckExtendedExcl\" | \"conflictCheckExclusive\" | \"conflictCheckShared\" | \"promotionCheckOptimized\" | \"reserved1\" | \"reserved2\" | \"initial\")\n/**\n * Secondary tables must have a foreign key relation to the primary table\n */\nexport type SecondaryTables = PrimaryTable1[]\n/**\n * Parameter name\n */\nexport type ParameterName = string\n/**\n * Table\n */\nexport type Table = string\n/**\n * Field\n */\nexport type Field = string\n/**\n * Parameter is part of function module interface\n */\nexport type Active = boolean\n/**\n * Lock parameter candidates are derived from the primary keys of the tables\n */\nexport type LockParameters = LockParameter[]\n/**\n * Allow RFC for lock modules\n */\nexport type AllowRFC = boolean\n\n/**\n * Lock object (ENQU)\n */\nexport interface AffEnquV1 {\nformatVersion: FormatVersion\nheader: Header\nprimaryTable: PrimaryTable\nsecondaryTables?: SecondaryTables\nlockParameters: LockParameters\nlockModules: LockModules\n}\n/**\n * Header\n */\nexport interface Header {\ndescription: Description\noriginalLanguage: OriginalLanguage\nabapLanguageVersion?: ABAPLanguageVersion\n}\n/**\n * Primary table of the lock object\n */\nexport interface PrimaryTable {\nname: TableName\nlockMode: LockMode\n}\n/**\n * Primary Table of the lock object\n */\nexport interface PrimaryTable1 {\nname: TableName1\nlockMode: LockMode1\n}\n/**\n * Lock parameter\n */\nexport interface LockParameter {\nname: ParameterName\ntable: Table\nfield: Field\nactive?: Active\n}\n/**\n * Lock modules are generated during activation\n */\nexport interface LockModules {\nallowRfc?: AllowRFC\n}\n\nexport type EnquAff = AffEnquV1;\n","/**\n * Auto-generated from SAP/abap-file-formats JSON schemas.\n * Do not edit — regenerate with `bun scripts/generate-aff-schemas.ts`.\n */\n/**\n * The ABAP file format version\n */\nexport type ABAPFileFormatVersion = \"1\"\n/**\n * Description of the ABAP object\n */\nexport type Description = string\n/**\n * Original language of the ABAP object\n */\nexport type OriginalLanguage = string\n/**\n * ABAP language version\n */\nexport type ABAPLanguageVersion = (\"standard\" | \"cloudDevelopment\")\n/**\n * Type namespace\n */\nexport type TypeNamespace = string\n/**\n * Producer legacy\n */\nexport type ProducerLegacy = boolean\n/**\n * Producer\n */\nexport type Producer = string\n/**\n * Producer version\n */\nexport type ProducerVersion = string\n/**\n * SAP Object Type\n */\nexport type SAPObjectType = string\n/**\n * Operation\n */\nexport type Operation = string\n/**\n * Type\n */\nexport type Type = string\n/**\n * Major version\n */\nexport type MajorVersion = string\n/**\n * Minor version\n */\nexport type MinorVersion = number\n/**\n * Patch version\n */\nexport type PatchVersion = number\n/**\n * Entity name\n */\nexport type EntityName = string\n/**\n * Entity event name\n */\nexport type EntityEventName = string\nexport type EventVersions = Event[]\n\nexport interface AffEvtbV1 {\nformatVersion: ABAPFileFormatVersion\nheader: Header\nproducerNamespace: TypeNamespace\nproducerLegacy?: ProducerLegacy\nproducer?: Producer\nproducerVersion?: ProducerVersion\nboName: SAPObjectType\nboOperation: Operation\nproducerType?: Type\nevents: EventVersions\n}\n/**\n * Header\n */\nexport interface Header {\ndescription: Description\noriginalLanguage: OriginalLanguage\nabapLanguageVersion?: ABAPLanguageVersion\n}\nexport interface Event {\neventVersion?: MajorVersion\neventMinorVersion?: MinorVersion\neventPatchVersion?: PatchVersion\nentityName: EntityName\nentityEventName: EntityEventName\n}\n\nexport type EvtbAff = AffEvtbV1;\n","/**\n * Auto-generated from SAP/abap-file-formats JSON schemas.\n * Do not edit — regenerate with `bun scripts/generate-aff-schemas.ts`.\n */\n/**\n * The ABAP file format version\n */\nexport type ABAPFileFormatVersion = \"1\"\n/**\n * Description of the ABAP object\n */\nexport type Description = string\n/**\n * Original language of the ABAP object\n */\nexport type OriginalLanguage = string\n/**\n * ABAP language version\n */\nexport type ABAPLanguageVersion = (\"standard\" | \"cloudDevelopment\")\n/**\n * SAP Object Type\n */\nexport type SAPObjectType = string\n/**\n * Major version\n */\nexport type MajorVersion = number\n/**\n * Minor version\n */\nexport type MinorVersion = number\n/**\n * Patch version\n */\nexport type PatchVersion = number\n\n/**\n * Event Object\n */\nexport interface AffEvtoV1 {\nformatVersion: ABAPFileFormatVersion\nheader: Header\ngeneralInformation: GeneralInformation\n}\n/**\n * Header\n */\nexport interface Header {\ndescription: Description\noriginalLanguage: OriginalLanguage\nabapLanguageVersion?: ABAPLanguageVersion\n}\n/**\n * General information\n */\nexport interface GeneralInformation {\nsapObjectType: SAPObjectType\nmajorVersion: MajorVersion\nminorVersion: MinorVersion\npatchVersion: PatchVersion\n}\n\nexport type EvtoAff = AffEvtoV1;\n","/**\n * Auto-generated from SAP/abap-file-formats JSON schemas.\n * Do not edit — regenerate with `bun scripts/generate-aff-schemas.ts`.\n */\n/**\n * The ABAP file format version\n */\nexport type ABAPFileFormatVersion = \"1\"\n/**\n * Description of the ABAP object\n */\nexport type Description = string\n/**\n * Original language of the ABAP object\n */\nexport type OriginalLanguage = string\n/**\n * ABAP language version\n */\nexport type ABAPLanguageVersion = (\"standard\" | \"keyUser\" | \"cloudDevelopment\")\n/**\n * Fix point arithmetic\n */\nexport type FixPointArithmetic = boolean\n/**\n * Status\n */\nexport type Status = (\"notClassified\" | \"sapProgram\" | \"customerProgram\" | \"systemProgram\" | \"testProgram\")\n\n/**\n * FUGR object type\n */\nexport interface AffFugrV1 {\nformatVersion: ABAPFileFormatVersion\nheader: Header\nfixPointArithmetic: FixPointArithmetic\nstatus?: Status\n}\n/**\n * Header\n */\nexport interface Header {\ndescription: Description\noriginalLanguage: OriginalLanguage\nabapLanguageVersion?: ABAPLanguageVersion\n}\n\nexport type FugrAff = AffFugrV1;\n","/**\n * Auto-generated from SAP/abap-file-formats JSON schemas.\n * Do not edit — regenerate with `bun scripts/generate-aff-schemas.ts`.\n */\n/**\n * The ABAP file format version\n */\nexport type ABAPFileFormatVersion = \"1\"\n/**\n * Description of the ABAP object\n */\nexport type Description = string\n/**\n * Processing type\n */\nexport type ProcessingType = (\"normal\" | \"rfc\" | \"update\")\n/**\n * When this indicator is set, it shows that the function module for the classic RFC protocol and the basXML protocol behaves in the same way, from a semantic point of view. The classic RFC protocol uses a position logic, while the basXML protocol uses a name identification.\n */\nexport type BasXmlEnabled = boolean\n/**\n * Indicates the scope of function module calls. Modules whose call scope is not defined explicitly can be called from anywhere\n */\nexport type RFCScope = (\"fromSameClientAndUser\" | \"fromSameSystem\" | \"fromAnySystem\" | \"notClassified\")\n/**\n * Indicates which serializations are permitted for the function module. Among other things, the selected serializations determine where the function module can be enhanced\n */\nexport type RFCVersion = (\"fastSerializationRequired\" | \"any\")\n/**\n * ABAP from Java\n */\nexport type ABAPFromJava = boolean\n/**\n * Java from ABAP\n */\nexport type JavaFromABAP = boolean\n/**\n * Java remote\n */\nexport type JavaRemote = boolean\n/**\n * Update task kind\n */\nexport type UpdateTaskKind = (\"startImmediately\" | \"startDelayed\" | \"startImmediatelyNoRestart\" | \"collectiveRun\" | \"unsupportedKind\")\n/**\n * Release state\n */\nexport type ReleaseState = (\"notReleased\" | \"released\" | \"releasedSapInternal\" | \"obsolete\" | \"releasePlanned\")\n/**\n * Release date\n */\nexport type ReleaseDate = string\n/**\n * The parameters of this function module are global visible within the function group\n */\nexport type Global = boolean\n/**\n * Exception classes\n */\nexport type ExceptionClasses = boolean\n/**\n * Application to which function module is assigned\n */\nexport type ApplicationOfFunctionModule = string\n/**\n * This field is obsolete and should not be filled\n */\nexport type Client = string\n/**\n * This function module is registered as function module exit (see SMOD/CMOD) and the function module exit is active\n */\nexport type FunctionExitActive = boolean\n/**\n * Include number\n */\nexport type IncludeNumber = string\n/**\n * If this flag is set, the function module cannot be called. It is deactivated in the function group\n */\nexport type NotExecutable = boolean\n/**\n * The function module is not editable\n */\nexport type EditLocked = boolean\n/**\n * Component name\n */\nexport type ComponentName = string\n/**\n * Component description\n */\nexport type ComponentDescription = string\n/**\n * Parameter descriptions of the function module\n */\nexport type ParameterDescriptions = ComponentWithDescription[]\n/**\n * Component name\n */\nexport type ComponentName1 = string\n/**\n * Component description\n */\nexport type ComponentDescription1 = string\n/**\n * Exception descriptions of the function module\n */\nexport type ExceptionDescriptions = ComponentWithDescription1[]\n\n/**\n * FUNC object type\n */\nexport interface AffFuncV1 {\nformatVersion: ABAPFileFormatVersion\nheader: Header\nprocessingType: ProcessingType\nrfcProperties?: RFCSpecificFields\nupdateProperties?: UpdateSpecificFields\nreleaseState?: ReleaseState\nreleaseDate?: ReleaseDate\nglobal?: Global\nexceptionClasses?: ExceptionClasses\napplication?: ApplicationOfFunctionModule\nclient?: Client\nactiveFunctionExit?: FunctionExitActive\nincludeNumber: IncludeNumber\nnotExecutable?: NotExecutable\neditLocked?: EditLocked\nparameters?: ParameterDescriptions\nexceptions?: ExceptionDescriptions\n}\n/**\n * Header\n */\nexport interface Header {\ndescription: Description\n}\n/**\n * Specific fields for rfc function modules\n */\nexport interface RFCSpecificFields {\nbasxmlEnabled: BasXmlEnabled\nrfcScope: RFCScope\nrfcVersion: RFCVersion\nabapFromJava?: ABAPFromJava\njavaFromAbap?: JavaFromABAP\njavaRemote?: JavaRemote\n}\n/**\n * Specific fields for update function modules\n */\nexport interface UpdateSpecificFields {\nupdateTaskKind: UpdateTaskKind\n}\n/**\n * Component with description\n */\nexport interface ComponentWithDescription {\nname: ComponentName\ndescription: ComponentDescription\n}\n/**\n * Component with description\n */\nexport interface ComponentWithDescription1 {\nname: ComponentName1\ndescription: ComponentDescription1\n}\n\nexport type FuncAff = AffFuncV1;\n","/**\n * Auto-generated from SAP/abap-file-formats JSON schemas.\n * Do not edit — regenerate with `bun scripts/generate-aff-schemas.ts`.\n */\n/**\n * The ABAP file format version\n */\nexport type ABAPFileFormatVersion = \"1\"\n/**\n * Description of the ABAP object\n */\nexport type Description = string\n/**\n * Original language of the ABAP object\n */\nexport type OriginalLanguage = string\n/**\n * ABAP language version\n */\nexport type ABAPLanguageVersion = (\"standard\" | \"cloudDevelopment\")\n/**\n * Type\n */\nexport type Type = \"CLAS\"\n/**\n * Name\n */\nexport type Name = string\n/**\n * Mode\n */\nexport type Mode = (\"system\" | \"instance\" | \"application\" | \"job\" | \"none\")\n/**\n * Priority\n */\nexport type Priority = (\"availability\" | \"high\" | \"normal\" | \"low\")\n/**\n * Instantiation\n */\nexport type Instantiation = (\"reuse\" | \"createNew\")\n/**\n * Scope dependent\n */\nexport type ScopeDependent = boolean\n/**\n * JSON data\n */\nexport type JSONData = string\n\n/**\n * Metric Provider (GSMP)\n */\nexport interface AffGsmpV1 {\nformatVersion: ABAPFileFormatVersion\nheader: Header\nimplementation: Implementation\nexecution: Execution\nmodel?: Model\n}\n/**\n * Header\n */\nexport interface Header {\ndescription: Description\noriginalLanguage: OriginalLanguage\nabapLanguageVersion?: ABAPLanguageVersion\n}\n/**\n * Implementation\n */\nexport interface Implementation {\ntype: Type\nname: Name\n}\n/**\n * Execution\n */\nexport interface Execution {\nmode: Mode\npriority: Priority\ninstantiation?: Instantiation\nscopeDependent: ScopeDependent\n}\n/**\n * Model\n */\nexport interface Model {\ndata?: JSONData\n}\n\nexport type GsmpAff = AffGsmpV1;\n","/**\n * Auto-generated from SAP/abap-file-formats JSON schemas.\n * Do not edit — regenerate with `bun scripts/generate-aff-schemas.ts`.\n */\n/**\n * Format version\n */\nexport type FormatVersion = \"1\"\n/**\n * Description of the ABAP object\n */\nexport type Description = string\n/**\n * Original language of the ABAP object\n */\nexport type OriginalLanguage = string\n/**\n * ABAP language version\n */\nexport type ABAPLanguageVersion = (\"standard\" | \"cloudDevelopment\")\n/**\n * Handler class\n */\nexport type HandlerClass = string\n\n/**\n * HTTP Service\n */\nexport interface AffHttpV1 {\nformatVersion: FormatVersion\nheader: Header\ngeneralInformation: GeneralInformation\n}\n/**\n * Header\n */\nexport interface Header {\ndescription: Description\noriginalLanguage: OriginalLanguage\nabapLanguageVersion?: ABAPLanguageVersion\n}\n/**\n * General information\n */\nexport interface GeneralInformation {\nhandlerClass?: HandlerClass\n}\n\nexport type HttpAff = AffHttpV1;\n","/**\n * Auto-generated from SAP/abap-file-formats JSON schemas.\n * Do not edit — regenerate with `bun scripts/generate-aff-schemas.ts`.\n */\n/**\n * The ABAP file format version\n */\nexport type ABAPFileFormatVersion = \"1\"\n/**\n * Description of the ABAP object\n */\nexport type Description = string\n/**\n * Original language of the ABAP object\n */\nexport type OriginalLanguage = string\n/**\n * ABAP language version\n */\nexport type ABAPLanguageVersion = (\"standard\" | \"cloudDevelopment\")\n/**\n * Name\n */\nexport type Name = string\n/**\n * Time reference\n */\nexport type TimeReference = string\n/**\n * Source table\n */\nexport type SourceTable = string\n/**\n * Source field\n */\nexport type SourceField = string\n/**\n * Indirect Value Determination\n */\nexport type IndirectValueDetermination = boolean\n/**\n * Value determination for time references\n */\nexport type TimeReferences = TimeReferenceDetails[]\n/**\n * Condition field\n */\nexport type ConditionField = string\n/**\n * Description of condition field\n */\nexport type Description1 = string\n/**\n * Data element\n */\nexport type DataElement = string\n/**\n * Source table\n */\nexport type SourceTable1 = string\n/**\n * Source field\n */\nexport type SourceField1 = string\n/**\n * Indirect Value Determination\n */\nexport type IndirectValueDetermination1 = boolean\n/**\n * No intervals\n */\nexport type NoIntervals = boolean\n/**\n * Condition fields for direct value determination\n */\nexport type ConditionFields = ConditionFieldDetails[]\n/**\n * Name\n */\nexport type Name1 = string\n\n/**\n * ILM object (ILMB) v1\n */\nexport interface AffIlmbV1 {\nformatVersion: ABAPFileFormatVersion\nheader: Header\ndestructionObject?: DestructionObject\ntimeReferences: TimeReferences\nconditionFields: ConditionFields\ncallbackClass?: ValueDeterminationCallbackClass\n}\n/**\n * Header\n */\nexport interface Header {\ndescription: Description\noriginalLanguage: OriginalLanguage\nabapLanguageVersion?: ABAPLanguageVersion\n}\n/**\n * Mapping ILM object to data destruction object\n */\nexport interface DestructionObject {\nname?: Name\n}\n/**\n * Time reference details\n */\nexport interface TimeReferenceDetails {\ntimeReference: TimeReference\nsourceTable: SourceTable\nsourceField: SourceField\nindirectValue?: IndirectValueDetermination\n}\n/**\n * Condition field details\n */\nexport interface ConditionFieldDetails {\nconditionField: ConditionField\ndescription?: Description1\ndataElement?: DataElement\nsourceTable: SourceTable1\nsourceField: SourceField1\nindirectValue?: IndirectValueDetermination1\nnoIntervals?: NoIntervals\n}\n/**\n * Value determination callback class\n */\nexport interface ValueDeterminationCallbackClass {\nname?: Name1\n}\n\nexport type IlmbAff = AffIlmbV1;\n","/**\n * Auto-generated from SAP/abap-file-formats JSON schemas.\n * Do not edit — regenerate with `bun scripts/generate-aff-schemas.ts`.\n */\n/**\n * The ABAP file format version\n */\nexport type ABAPFileFormatVersion = \"1\"\n/**\n * Description of the ABAP object\n */\nexport type Description = string\n/**\n * Original language of the ABAP object\n */\nexport type OriginalLanguage = string\n/**\n * ABAP language version\n */\nexport type ABAPLanguageVersion = (\"standard\" | \"keyUser\" | \"cloudDevelopment\")\n/**\n * Interface category\n */\nexport type InterfaceCategory = (\"general\" | \"classicBadi\" | \"businessStaticComponents\" | \"businessInstanceComponents\" | \"dbProcedureProxy\" | \"webDynproRuntime\" | \"enterpriseService\")\n/**\n * Interface is a proxy interface\n */\nexport type ProxyInterface = boolean\n/**\n * Name\n */\nexport type Name = string\n/**\n * Description\n */\nexport type Description1 = string\n/**\n * Type descriptions\n */\nexport type TypeDescriptions = NameAndDescription[]\n/**\n * Name\n */\nexport type Name1 = string\n/**\n * Description\n */\nexport type Description2 = string\n/**\n * Attribute descriptions\n */\nexport type AttributeDescriptions = NameAndDescription1[]\n/**\n * Name of the event\n */\nexport type EventName = string\n/**\n * Description of the event\n */\nexport type EventDescription1 = string\n/**\n * Name\n */\nexport type Name2 = string\n/**\n * Description\n */\nexport type Description3 = string\n/**\n * Parameter descriptions\n */\nexport type ParameterDescriptions = NameAndDescription2[]\n/**\n * Event descriptions\n */\nexport type EventDescriptions = EventDescription[]\n/**\n * Name of the method\n */\nexport type MethodName = string\n/**\n * Description of the method\n */\nexport type MethodDescription1 = string\n/**\n * Name\n */\nexport type Name3 = string\n/**\n * Description\n */\nexport type Description4 = string\n/**\n * Parameter descriptions\n */\nexport type ParameterDescriptions1 = NameAndDescription3[]\n/**\n * Name\n */\nexport type Name4 = string\n/**\n * Description\n */\nexport type Description5 = string\n/**\n * Exception descriptions\n */\nexport type ExceptionDescriptions = NameAndDescription4[]\n/**\n * Method descriptions\n */\nexport type MethodDescriptions = MethodDescription[]\n\n/**\n * Interface properties\n */\nexport interface AffIntfV1 {\nformatVersion: ABAPFileFormatVersion\nheader: Header\ncategory?: InterfaceCategory\nproxy?: ProxyInterface\ndescriptions?: Descriptions\n}\n/**\n * Header\n */\nexport interface Header {\ndescription: Description\noriginalLanguage: OriginalLanguage\nabapLanguageVersion?: ABAPLanguageVersion\n}\n/**\n * Descriptions maintained in SE80\n */\nexport interface Descriptions {\ntypes?: TypeDescriptions\nattributes?: AttributeDescriptions\nevents?: EventDescriptions\nmethods?: MethodDescriptions\n}\n/**\n * Name and description\n */\nexport interface NameAndDescription {\nname: Name\ndescription: Description1\n}\n/**\n * Name and description\n */\nexport interface NameAndDescription1 {\nname: Name1\ndescription: Description2\n}\n/**\n * Event description\n */\nexport interface EventDescription {\nname: EventName\ndescription: EventDescription1\nparameters?: ParameterDescriptions\n}\n/**\n * Name and description\n */\nexport interface NameAndDescription2 {\nname: Name2\ndescription: Description3\n}\n/**\n * Method description\n */\nexport interface MethodDescription {\nname: MethodName\ndescription: MethodDescription1\nparameters?: ParameterDescriptions1\nexceptions?: ExceptionDescriptions\n}\n/**\n * Name and description\n */\nexport interface NameAndDescription3 {\nname: Name3\ndescription: Description4\n}\n/**\n * Name and description\n */\nexport interface NameAndDescription4 {\nname: Name4\ndescription: Description5\n}\n\nexport type IntfAff = AffIntfV1;\n","/**\n * Auto-generated from SAP/abap-file-formats JSON schemas.\n * Do not edit — regenerate with `bun scripts/generate-aff-schemas.ts`.\n */\n/**\n * The ABAP file format version\n */\nexport type ABAPFileFormatVersion = \"1\"\n/**\n * Description of the ABAP object\n */\nexport type Description = string\n/**\n * Original language of the ABAP object\n */\nexport type OriginalLanguage = string\n/**\n * ABAP language version\n */\nexport type ABAPLanguageVersion = (\"standard\" | \"keyUser\" | \"cloudDevelopment\")\n/**\n * Model name\n */\nexport type ModelName = string\n/**\n * Model type\n */\nexport type ModelType = string\n/**\n * Intelligent scenario of the model\n */\nexport type IntelligentScenario = string\n/**\n * Modelling context ID which is the parent of the model\n */\nexport type ModellingContextID = string\n/**\n * Adapter ID\n */\nexport type AdapterID = string\n/**\n * Native model type\n */\nexport type NativeModelType = string\n/**\n * Model specification\n */\nexport type ModelSpecification = string\n/**\n * Model definition\n */\nexport type ModelDefinition = string\n/**\n * State of the model\n */\nexport type State = string\n/**\n * Model signature\n */\nexport type Signature = string\n/**\n * Model bindings\n */\nexport type Bindings = string\n/**\n * If true, the model is an enhancement, if false the model is a new model.\n */\nexport type IsEnhancement = boolean\n/**\n * Executable ID\n */\nexport type ExecutableID = string\n/**\n * Large language model name\n */\nexport type LargeLanguageModelName = string\n/**\n * Large language model version\n */\nexport type LargeLanguageModelVersion = string\n/**\n * Table or view field name\n */\nexport type FieldName = string\n/**\n * Field position\n */\nexport type FieldPosition = number\n/**\n * If true, the field is a key field\n */\nexport type IsKeyField = boolean\n/**\n * Model segment fields\n */\nexport type ModelSegmentFields = SegmentField[]\n/**\n * Prompt template name\n */\nexport type PromptTemplateName = string\n/**\n * Description of prompt template\n */\nexport type PromptTemplateDescription = string\n/**\n * Prompt\n */\nexport type Prompt = string\n/**\n * If true, the prompt is visible\n */\nexport type PromptVisibility = boolean\n/**\n * Model prompt templates\n */\nexport type ModelPromptTemplates = ModelPromptTemplate[]\n\n/**\n * Intelligent scenario model\n */\nexport interface AffIntmV1 {\nformatVersion: ABAPFileFormatVersion\nheader: Header\ngeneralInformation: GeneralInformation\nmodelSegmentFields?: ModelSegmentFields\nmodelPromptTemplates?: ModelPromptTemplates\n}\n/**\n * Header\n */\nexport interface Header {\ndescription: Description\noriginalLanguage: OriginalLanguage\nabapLanguageVersion?: ABAPLanguageVersion\n}\n/**\n * General information\n */\nexport interface GeneralInformation {\nmodelName?: ModelName\nmodelType?: ModelType\nintelligentScenario?: IntelligentScenario\nmodellingContextId?: ModellingContextID\nadapterId?: AdapterID\nnativeModelType?: NativeModelType\nmodelSpecification?: ModelSpecification\nmodelDefinition?: ModelDefinition\nstate?: State\nsignature?: Signature\nbindings?: Bindings\nisEnhancement?: IsEnhancement\nexecutableId?: ExecutableID\nllmName?: LargeLanguageModelName\nllmVersion?: LargeLanguageModelVersion\n}\n/**\n * Model segment field\n */\nexport interface SegmentField {\nfieldName?: FieldName\nfieldPosition?: FieldPosition\nisKey?: IsKeyField\n}\n/**\n * Model prompt template\n */\nexport interface ModelPromptTemplate {\npromptTemplateName: PromptTemplateName\npromptTemplateDescription?: PromptTemplateDescription\nprompt: Prompt\nisVisible?: PromptVisibility\n}\n\nexport type IntmAff = AffIntmV1;\n","/**\n * Auto-generated from SAP/abap-file-formats JSON schemas.\n * Do not edit — regenerate with `bun scripts/generate-aff-schemas.ts`.\n */\n/**\n * The ABAP file format version\n */\nexport type ABAPFileFormatVersion = \"1\"\n/**\n * Description of the ABAP object\n */\nexport type Description = string\n/**\n * Original language of the ABAP object\n */\nexport type OriginalLanguage = string\n/**\n * ABAP language version\n */\nexport type ABAPLanguageVersion = (\"standard\" | \"keyUser\" | \"cloudDevelopment\")\n/**\n * Intelligent scenario type\n */\nexport type IntelligentScenarioType = string\n/**\n * Scenario technology\n */\nexport type ScenarioTechnology = (\"sideBySide\" | \"embedded\")\n/**\n * If true, the scenario is extensible\n */\nexport type Extensible = boolean\n/**\n * If true, the scenario can have multiple active models\n */\nexport type MultipleActiveModels = boolean\n/**\n * If true, the scenario uses data management\n */\nexport type DataManagement = boolean\n/**\n * Scenario technical ID\n */\nexport type ScenarioTechnicalID = string\n/**\n * State of an intelligent scenario\n */\nexport type State = string\n/**\n * ISLM framework version\n */\nexport type ISLMFrameworkVersion = number\n/**\n * Prediction class\n */\nexport type PredictionClass = string\n/**\n * Prerequisite check class\n */\nexport type PrerequisiteCheckClass = string\n/**\n * If true, scenario will be turnkey enabled to automate the operations\n */\nexport type AutomateTurnkeySwitchOn = boolean\n/**\n * Type of turnkey implementation\n */\nexport type TurnkeyImplementationType = string\n/**\n * Turnkey class\n */\nexport type TurnkeyClass = string\n/**\n * Usage type of an intelligent scenario\n */\nexport type UsageType = string\n/**\n * OAuth 2.0 client profile\n */\nexport type OAuthProfile = string\n/**\n * Modelling context name\n */\nexport type ModellingContextName = string\n/**\n * Modelling context ID\n */\nexport type ModellingContextID = string\n/**\n * Modelling context description\n */\nexport type ModellingContextDescription = string\n/**\n * Object name\n */\nexport type ObjectName = string\n/**\n * Type of the object\n */\nexport type ObjectType = string\n/**\n * Status of the object\n */\nexport type ObjectStatus = (\"error\" | \"termination\" | \"information\" | \"warning\" | \"success\")\n/**\n * Logical object type of a BOM object\n */\nexport type LogicalObjectType = (\"tableFunction\" | \"cdsView\" | \"class\" | \"dcl\" | \"model\" | \"avas\")\n/**\n * Objects based on scenario\n */\nexport type ScenarioObjects = ScenarioObject[]\n/**\n * Name of the binding\n */\nexport type BindingName = string\n/**\n * Reference object(for example - CDS view)\n */\nexport type ReferenceObject = string\n/**\n * Scenario dataset bindings\n */\nexport type DatasetBindings = DatasetBinding[]\n/**\n * Signature name\n */\nexport type SignatureName = string\n/**\n * Signature type\n */\nexport type SignatureType = string\n/**\n * Description\n */\nexport type Description1 = string\n/**\n * Table or view field name\n */\nexport type FieldName = string\n/**\n * Position of the field\n */\nexport type FieldPosition = number\n/**\n * Storage type of the field\n */\nexport type StorageType = string\n/**\n * Role of field in an intelligent scenario (such as key, target)\n */\nexport type RoleOfField = string\n/**\n * Data management type\n */\nexport type DataManagementType = string\n/**\n * Scenario signatures\n */\nexport type Signatures = Signature[]\n/**\n * Parameter name\n */\nexport type ParameterName = string\n/**\n * Parameter type\n */\nexport type ParameterType = string\n/**\n * Parameter description\n */\nexport type ParameterDescription = string\n/**\n * Storage type\n */\nexport type StorageType1 = string\n/**\n * If true, then input context value is available\n */\nexport type ContextFlag = boolean\n/**\n * Parameter size\n */\nexport type ParameterSize = number\n/**\n * Parameter ID\n */\nexport type ParameterID = string\n/**\n * Parameter context\n */\nexport type ParameterContext = string\n/**\n * Parameter value\n */\nexport type ParameterValue = string\n/**\n * Scenario parameters signature\n */\nexport type ParameterSignature = ParameterSignature1[]\n/**\n * Additional information key\n */\nexport type AdditionalInfoKey = string\n/**\n * Additional information value ID\n */\nexport type ValueID = number\n/**\n * Additional information value\n */\nexport type Value = string\n/**\n * Additional information position ID\n */\nexport type PositionID = number\n/**\n * Additional information key text label\n */\nexport type KeyTextLabel = string\n/**\n * Additional information value text label\n */\nexport type ValueTextLabel = string\n/**\n * Scenario additional information\n */\nexport type AdditionalInformation = AdditionalInformation1[]\n/**\n * Table or view field name\n */\nexport type FieldName1 = string\n/**\n * Field position\n */\nexport type FieldPosition1 = number\n/**\n * If true, the field is a key field\n */\nexport type IsKeyField = boolean\n/**\n * SBS Scenario Segment Fields\n */\nexport type SBSSegmentFields = SBSSegmentField[]\n\n/**\n * Intelligent scenario\n */\nexport interface AffIntsV1 {\nformatVersion: ABAPFileFormatVersion\nheader: Header\ngeneralInformation: GeneralInformation\nclassInformation?: ClassInformation\nturnkeyInformation?: TurnkeyInformation\nconnectionInformation?: ConnectionInformation\nmodellingContext?: ModellingContext\nscenarioDdlObjects?: ScenarioObjects\nbindings?: DatasetBindings\nsignatures?: Signatures\nparameters?: ParameterSignature\nadditionalInfo?: AdditionalInformation\nsbsSegmentFields?: SBSSegmentFields\n}\n/**\n * Header\n */\nexport interface Header {\ndescription: Description\noriginalLanguage: OriginalLanguage\nabapLanguageVersion?: ABAPLanguageVersion\n}\n/**\n * General information\n */\nexport interface GeneralInformation {\nscenarioType: IntelligentScenarioType\nscenarioTechnology: ScenarioTechnology\nisExtensible?: Extensible\nisMultiActiveModel?: MultipleActiveModels\nisDataManagementEnabled?: DataManagement\nscenarioTechnicalId?: ScenarioTechnicalID\nstate?: State\nislmVersion?: ISLMFrameworkVersion\n}\n/**\n * Class information\n */\nexport interface ClassInformation {\npredictionClass?: PredictionClass\nprerequisiteCheckClass?: PrerequisiteCheckClass\n}\n/**\n * Turnkey information\n */\nexport interface TurnkeyInformation {\nisTurnkeyAutoSwitchOn?: AutomateTurnkeySwitchOn\nturnkeyType?: TurnkeyImplementationType\nturnkeyClass?: TurnkeyClass\n}\n/**\n * Connection information\n */\nexport interface ConnectionInformation {\nusageType?: UsageType\noauthProfile?: OAuthProfile\n}\n/**\n * Intelligent scenario modelling context\n */\nexport interface ModellingContext {\nmodellingContextName?: ModellingContextName\nmodellingContextId?: ModellingContextID\nmodellingContextDescription?: ModellingContextDescription\n}\n/**\n * Object generated based on a scenario\n */\nexport interface ScenarioObject {\nobjectName?: ObjectName\nobjectType?: ObjectType\nobjectStatus?: ObjectStatus\nlogicalObjectType?: LogicalObjectType\n}\n/**\n * Scenario dataset binding\n */\nexport interface DatasetBinding {\nbindingName?: BindingName\nreferenceObject?: ReferenceObject\n}\n/**\n * Scenario signature\n */\nexport interface Signature {\nsignatureName?: SignatureName\nsignatureType?: SignatureType\nsignatureDescription?: Description1\nfieldName?: FieldName\nfieldPosition?: FieldPosition\nstorageType?: StorageType\nfieldRole?: RoleOfField\ndataManagementType?: DataManagementType\n}\n/**\n * Parameter signature\n */\nexport interface ParameterSignature1 {\nparameterName?: ParameterName\nparameterType?: ParameterType\nparameterDescription?: ParameterDescription\nstorageType?: StorageType1\nhasContext?: ContextFlag\nparameterSize?: ParameterSize\nparameterId?: ParameterID\nparameterContext?: ParameterContext\nparameterValue?: ParameterValue\n}\n/**\n * Additional information\n */\nexport interface AdditionalInformation1 {\nadditionalInfoKey?: AdditionalInfoKey\nvalueId?: ValueID\nvalue?: Value\npositionId?: PositionID\nkeyTextLabel?: KeyTextLabel\nvalueTextLabel?: ValueTextLabel\n}\n/**\n * SBS scenario segment field\n */\nexport interface SBSSegmentField {\nfieldName?: FieldName1\nfieldPosition?: FieldPosition1\nisKey?: IsKeyField\n}\n\nexport type IntsAff = AffIntsV1;\n","/**\n * Auto-generated from SAP/abap-file-formats JSON schemas.\n * Do not edit — regenerate with `bun scripts/generate-aff-schemas.ts`.\n */\n/**\n * Format version\n */\nexport type FormatVersion = \"1\"\n/**\n * Description of the ABAP object\n */\nexport type Description = string\n/**\n * Original language of the ABAP object\n */\nexport type OriginalLanguage = string\n/**\n * ABAP language version\n */\nexport type ABAPLanguageVersion = (\"standard\" | \"cloudDevelopment\")\n/**\n * Provider class\n */\nexport type ProviderClass = string\n\n/**\n * Notification provider object\n */\nexport interface AffIwngV1 {\nformatVersion: FormatVersion\nheader: Header\ngeneralInformation: GeneralInformation\n}\n/**\n * Header\n */\nexport interface Header {\ndescription: Description\noriginalLanguage: OriginalLanguage\nabapLanguageVersion?: ABAPLanguageVersion\n}\n/**\n * General information\n */\nexport interface GeneralInformation {\nproviderClass: ProviderClass\n}\n\nexport type IwngAff = AffIwngV1;\n","/**\n * Auto-generated from SAP/abap-file-formats JSON schemas.\n * Do not edit — regenerate with `bun scripts/generate-aff-schemas.ts`.\n */\n/**\n * The ABAP file format version\n */\nexport type ABAPFileFormatVersion = \"1\"\n/**\n * Description of the ABAP object\n */\nexport type Description = string\n/**\n * Original language of the ABAP object\n */\nexport type OriginalLanguage = string\n/**\n * Message number\n */\nexport type MessageNumber = string\n/**\n * Message text\n */\nexport type MessageText = string\n/**\n * Messages\n */\nexport type Messages = MessageProperties[]\n\n/**\n * Message class properties\n */\nexport interface AffMsagV1 {\nformatVersion: ABAPFileFormatVersion\nheader: Header\nmessages: Messages\n}\n/**\n * Header\n */\nexport interface Header {\ndescription: Description\noriginalLanguage: OriginalLanguage\n}\n/**\n * Message properties\n */\nexport interface MessageProperties {\nnumber?: MessageNumber\ntext?: MessageText\n}\n\nexport type MsagAff = AffMsagV1;\n","/**\n * Auto-generated from SAP/abap-file-formats JSON schemas.\n * Do not edit — regenerate with `bun scripts/generate-aff-schemas.ts`.\n */\n/**\n * The ABAP file format version\n */\nexport type ABAPFileFormatVersion = \"1\"\n/**\n * Description of the ABAP object\n */\nexport type Description = string\n/**\n * Original language of the ABAP object\n */\nexport type OriginalLanguage = string\n/**\n * ABAP language version\n */\nexport type ABAPLanguageVersion = (\"standard\" | \"cloudDevelopment\")\n/**\n * The name of the SAP Object Node Type.\n */\nexport type Name = string\n/**\n * The name of the referenced SAP Object Type.\n */\nexport type SAPObjectType = string\n/**\n * Indicates that the SAP Object Node Type corresponds to the referenced SAP Object Type.\n */\nexport type RootNode = boolean\n\n/**\n * SAP object node type\n */\nexport interface AffNontV1 {\nformatVersion: ABAPFileFormatVersion\nheader: Header\nname: Name\nsapObjectType?: SAPObjectType\nrootNode?: RootNode\n}\n/**\n * Header\n */\nexport interface Header {\ndescription: Description\noriginalLanguage: OriginalLanguage\nabapLanguageVersion?: ABAPLanguageVersion\n}\n\nexport type NontAff = AffNontV1;\n","/**\n * Auto-generated from SAP/abap-file-formats JSON schemas.\n * Do not edit — regenerate with `bun scripts/generate-aff-schemas.ts`.\n */\n/**\n * The ABAP file format version\n */\nexport type ABAPFileFormatVersion = \"1\"\n/**\n * Description of the ABAP object\n */\nexport type Description = string\n/**\n * Original language of the ABAP object\n */\nexport type OriginalLanguage = string\n/**\n * ABAP language version\n */\nexport type ABAPLanguageVersion = (\"standard\" | \"cloudDevelopment\")\n/**\n * Name of domain, which determines the length of the number range number. Define the amount of characters available for number range intervals. It must be of type NUMC or CHAR and have a field length of at least 1 and at most 20.\n */\nexport type NumberLengthDomain = string\n/**\n * Percentage of numbers remaining in a number range, upon reaching which in number assignment a warning is given. It must be between 0.1 and 99.9. Example: You have defined an interval from 1 to 1000. If you want to issue a warning at the number 900, enter 10 (%) here.\n */\nexport type PercentWarning = number\n/**\n * If you want to create subobjects for the elements of a field of the application table, specify the relevant data element for this table field. This data element must be active in the Data Dictionary and must have a check table. The domain of the data element must have a field length of between 1 and 6.\n */\nexport type SubType = string\n/**\n * If you want the records of the business object to be differentiated by financial year, you set this option true. This structures the intervals of a number range object.\n */\nexport type UntilYear = boolean\n/**\n * For each interval of a number range object, the system checks when the available characters are used up. In the true setting, once the available characters of an interval are used up, the system starts again from the beginning and the lowest number is assigned again. You can suppress this behavior by setting this option false. If you do this, no more characters from an interval are assigned once the characters of the interval are used up. You can suppress rollover for the entire number range object, that is, the setting applies to all the intervals contained in the object.\n */\nexport type Rolling = boolean\n/**\n * If it is set to true determined numbers consist of the prefix (name of subobject) and the numbers.\n */\nexport type Prefix = boolean\n/**\n * Transaction code for application specific transaction\n */\nexport type TransactionID = string\n/**\n * Choose a buffer type for no buffering, for buffering via main memory or for parallel buffering. Default is mainBuffer.\n */\nexport type Buffering = (\"mainBuffer\" | \"parallel\" | \"none\")\n/**\n * This value specifies the numbers in buffer. In case of parallel and main memory buffering, add a number for 'bufferedNumbers'. It determines how many numbers are reserved in buffer for the intervals.Default number of buffers is 10.\n */\nexport type BufferedNumbers = number\n\n/**\n * Object type NROB\n */\nexport interface AffNrobV1 {\nformatVersion: ABAPFileFormatVersion\nheader: Header\ninterval: Interval\nconfiguration: Configuration\n}\n/**\n * Header\n */\nexport interface Header {\ndescription: Description\noriginalLanguage: OriginalLanguage\nabapLanguageVersion?: ABAPLanguageVersion\n}\n/**\n * Interval\n */\nexport interface Interval {\nnumberLengthDomain: NumberLengthDomain\npercentWarning: PercentWarning\nsubType: SubType\nuntilYear: UntilYear\nrolling: Rolling\nprefix: Prefix\n}\n/**\n * Configuration-specific fields\n */\nexport interface Configuration {\ntransactionId?: TransactionID\nbuffering: Buffering\nbufferedNumbers: BufferedNumbers\n}\n\nexport type NrobAff = AffNrobV1;\n","/**\n * Auto-generated from SAP/abap-file-formats JSON schemas.\n * Do not edit — regenerate with `bun scripts/generate-aff-schemas.ts`.\n */\n/**\n * Format version\n */\nexport type FormatVersion = \"1\"\n/**\n * Description of the ABAP object\n */\nexport type Description = string\n/**\n * Original language of the ABAP object\n */\nexport type OriginalLanguage = string\n/**\n * ABAP language version\n */\nexport type ABAPLanguageVersion = (\"standard\" | \"cloudDevelopment\")\n/**\n * SAP Object Node Type\n */\nexport type SAPObjectNodeType = string\n/**\n * Name\n */\nexport type Name = string\n/**\n * Note types assigned to the SAP Object Node Type\n */\nexport type NoteTypes = NoteType[]\n\n/**\n * ABAP file format for note type assignment objects\n */\nexport interface AffNttaV1 {\nformatVersion: FormatVersion\nheader: Header\ngeneralInformation?: GeneralInformation\nnoteTypes?: NoteTypes\n}\n/**\n * Header\n */\nexport interface Header {\ndescription: Description\noriginalLanguage: OriginalLanguage\nabapLanguageVersion?: ABAPLanguageVersion\n}\n/**\n * General information\n */\nexport interface GeneralInformation {\nobjectNodeType: SAPObjectNodeType\n}\n/**\n * Note type\n */\nexport interface NoteType {\nname: Name\n}\n\nexport type NttaAff = AffNttaV1;\n","/**\n * Auto-generated from SAP/abap-file-formats JSON schemas.\n * Do not edit — regenerate with `bun scripts/generate-aff-schemas.ts`.\n */\n/**\n * Format version\n */\nexport type FormatVersion = \"1\"\n/**\n * Description of the ABAP object\n */\nexport type Description = string\n/**\n * Original language of the ABAP object\n */\nexport type OriginalLanguage = string\n/**\n * ABAP language version\n */\nexport type ABAPLanguageVersion = (\"standard\" | \"cloudDevelopment\")\n/**\n * Language dependent\n */\nexport type LanguageDependent = boolean\n/**\n * Multiple notes possible\n */\nexport type MultipleNotes = boolean\n/**\n * Title hidden\n */\nexport type TitleHidden = boolean\n/**\n * Maximum length\n */\nexport type MaximumLength = number\n/**\n * Formatting profile\n */\nexport type FormattingProfile = (\"text\" | \"simpleFormatting\")\n\n/**\n * ABAP file format for note type objects\n */\nexport interface AffNttyV1 {\nformatVersion: FormatVersion\nheader: Header\ngeneralInformation?: GeneralInformation\ncontentSettings?: ContentSettings\n}\n/**\n * Header\n */\nexport interface Header {\ndescription: Description\noriginalLanguage: OriginalLanguage\nabapLanguageVersion?: ABAPLanguageVersion\n}\n/**\n * General information\n */\nexport interface GeneralInformation {\nlanguageDependent?: LanguageDependent\nmultipleNotes?: MultipleNotes\nhideTitle?: TitleHidden\n}\n/**\n * Content settings\n */\nexport interface ContentSettings {\nmaximumLength?: MaximumLength\nformattingProfile?: FormattingProfile\n}\n\nexport type NttyAff = AffNttyV1;\n","/**\n * Auto-generated from SAP/abap-file-formats JSON schemas.\n * Do not edit — regenerate with `bun scripts/generate-aff-schemas.ts`.\n */\n/**\n * Format version\n */\nexport type FormatVersion = \"1\"\n/**\n * Description of the ABAP object\n */\nexport type Description = string\n/**\n * Original language of the ABAP object\n */\nexport type OriginalLanguage = string\n/**\n * ABAP language version\n */\nexport type ABAPLanguageVersion = (\"standard\" | \"keyUser\" | \"cloudDevelopment\")\n/**\n * Program type\n */\nexport type ProgramType = (\"executableProgram\" | \"modulePool\" | \"subroutinePool\" | \"include\")\n/**\n * Program status\n */\nexport type ProgramStatus = (\"sapProductionProgram\" | \"customerProductionProgram\" | \"systemProgram\" | \"testProgram\" | \"unknown\")\n/**\n * Fix point arithmetic\n */\nexport type FixPointArithmetic = boolean\n/**\n * The editor lock flag prevents other users from making changes to the program. Only the last person to change the program can remove the flag.\n */\nexport type EditLocked = boolean\n/**\n * A user can only start this report using a variant.\n */\nexport type StartsUsingVariant = boolean\n/**\n * Programs that are assigned to an authorization group are protected against display and execution. Security-related programs should, therefore, always be assigned to an authorization group.\n */\nexport type AuthorizationGroup = string\n/**\n * Application (taplp)\n */\nexport type Application = string\n/**\n * Name of a logical database.\n */\nexport type LogicalDatabaseName = string\n/**\n * The Dynpro selection screen.\n */\nexport type SelectionScreen = string\n\n/**\n * Program\n */\nexport interface AffProgV1 {\nformatVersion: FormatVersion\nheader: Header\ngeneralInformation?: GeneralInformation\nlogicalDatabase?: LogicalDatabase\n}\n/**\n * Header\n */\nexport interface Header {\ndescription: Description\noriginalLanguage: OriginalLanguage\nabapLanguageVersion?: ABAPLanguageVersion\n}\n/**\n * General information\n */\nexport interface GeneralInformation {\nprogramType?: ProgramType\nprogramStatus?: ProgramStatus\nfixPointArithmetic?: FixPointArithmetic\neditLocked?: EditLocked\nstartsUsingVariant?: StartsUsingVariant\nauthorizationGroup?: AuthorizationGroup\napplication?: Application\n}\n/**\n * Logical database\n */\nexport interface LogicalDatabase {\nname?: LogicalDatabaseName\nselectionScreen?: SelectionScreen\n}\n\nexport type ProgAff = AffProgV1;\n","/**\n * Auto-generated from SAP/abap-file-formats JSON schemas.\n * Do not edit — regenerate with `bun scripts/generate-aff-schemas.ts`.\n */\n/**\n * The ABAP file format version\n */\nexport type ABAPFileFormatVersion = \"1\"\n/**\n * Description of the ABAP object\n */\nexport type Description = string\n/**\n * Edit-locked\n */\nexport type EditLocked = boolean\n/**\n * Include type\n */\nexport type IncludeType = (\"include\" | \"functionGroup\")\n\n/**\n * REPS object type\n */\nexport interface AffRepsV1 {\nformatVersion: ABAPFileFormatVersion\nheader: Header\neditLocked?: EditLocked\nincludeType: IncludeType\n}\n/**\n * Header\n */\nexport interface Header {\ndescription: Description\n}\n\nexport type RepsAff = AffRepsV1;\n","/**\n * Auto-generated from SAP/abap-file-formats JSON schemas.\n * Do not edit — regenerate with `bun scripts/generate-aff-schemas.ts`.\n */\n/**\n * The ABAP file format version\n */\nexport type ABAPFileFormatVersion = \"1\"\n/**\n * Description of the ABAP object\n */\nexport type Description = string\n/**\n * Original language of the ABAP object\n */\nexport type OriginalLanguage = string\n/**\n * ABAP language version\n */\nexport type ABAPLanguageVersion = (\"standard\" | \"cloudDevelopment\")\n/**\n * The category of the SAP Object Type\n */\nexport type TypeCategory = (\"businessObject\" | \"technicalObject\" | \"analyticalObject\" | \"configurationObject\" | \"dependentObject\" | \"hierarchyObject\")\n/**\n * The name of the SAP Object Type.\n */\nexport type Name = string\n/**\n * The object type code uniquely identifies the SAP Object Type.\n */\nexport type ObjectTypeCode = string\n/**\n * The interface behavior definition related to the SAP Object Type.\n */\nexport type InterfaceBehaviorDefinition = string\n/**\n * The One Domain Model entity related to the SAP Object Type.\n */\nexport type ODMEntityName = string\n\n/**\n * SAP object type\n */\nexport interface AffRontV1 {\nformatVersion: ABAPFileFormatVersion\nheader: Header\ntypeCategory: TypeCategory\nname: Name\nobjectTypeCode?: ObjectTypeCode\ninterfaceBehaviorDefinition?: InterfaceBehaviorDefinition\nodmEntityName?: ODMEntityName\n}\n/**\n * Header\n */\nexport interface Header {\ndescription: Description\noriginalLanguage: OriginalLanguage\nabapLanguageVersion?: ABAPLanguageVersion\n}\n\nexport type RontAff = AffRontV1;\n","/**\n * Auto-generated from SAP/abap-file-formats JSON schemas.\n * Do not edit — regenerate with `bun scripts/generate-aff-schemas.ts`.\n */\n/**\n * Format version\n */\nexport type FormatVersion = \"1\"\n/**\n * Description of the ABAP object\n */\nexport type Description = string\n/**\n * Original language of the ABAP object\n */\nexport type OriginalLanguage = string\n/**\n * ABAP language version\n */\nexport type ABAPLanguageVersion = (\"standard\" | \"keyUser\" | \"cloudDevelopment\")\n/**\n * Source\n */\nexport type Source = (\"predefined\" | \"custom\")\n/**\n * Status\n */\nexport type Status = (\"draft\" | \"final\")\n/**\n * Fiori application\n */\nexport type FioriApplication = string\n/**\n * Extensibility mode\n */\nexport type ExtensibilityMode = (\"fullySupported\" | \"supportedPredefinedQueries\" | \"notSupported\")\n/**\n * Predefined InA service\n */\nexport type PredefinedInAService = string\n/**\n * Custom InA service\n */\nexport type CustomInAService = string\n\n/**\n * Object type RVBC\n */\nexport interface AffRvbcV1 {\nformatVersion: FormatVersion\nheader: Header\nbookletDefinition: BookletDefinition\nina1Services?: InAServices\n}\n/**\n * Header\n */\nexport interface Header {\ndescription: Description\noriginalLanguage: OriginalLanguage\nabapLanguageVersion?: ABAPLanguageVersion\n}\n/**\n * Booklet definition\n */\nexport interface BookletDefinition {\nsource: Source\nstatus: Status\napplication?: FioriApplication\nextensibilityMode?: ExtensibilityMode\n}\n/**\n * InA services\n */\nexport interface InAServices {\npredefined?: PredefinedInAService\ncustom?: CustomInAService\n}\n\nexport type RvbcAff = AffRvbcV1;\n","/**\n * Auto-generated from SAP/abap-file-formats JSON schemas.\n * Do not edit — regenerate with `bun scripts/generate-aff-schemas.ts`.\n */\n/**\n * Format version\n */\nexport type FormatVersion = \"1\"\n/**\n * Description of the ABAP object\n */\nexport type Description = string\n/**\n * Original language of the ABAP object\n */\nexport type OriginalLanguage = string\n/**\n * ABAP language version\n */\nexport type ABAPLanguageVersion = (\"standard\" | \"keyUser\" | \"cloudDevelopment\")\n/**\n * Title\n */\nexport type Title = string\n/**\n * What is the action doing and how can it be used\n */\nexport type Summary = string\n/**\n * Implementing class for handling the action input. Needs to implement interface {@link if_aia_action }.\n */\nexport type ImplementingClass = string\n/**\n * Input UI configuration class for implementing the server-driven UI input configuration. Needs to implement interface {@link IF_AIA_SD_ACTION_INPUT }.\n */\nexport type InputUIConfigurationClass = string\n/**\n * Number of focused resources\n */\nexport type NumberOfFocusedResources = (\"exactlyOne\" | \"atLeastOne\" | \"moreThanOne\" | \"any\")\n/**\n * Object type\n */\nexport type ObjectType1 = string\n/**\n * Object subtype\n */\nexport type ObjectSubtype = string\n/**\n * Filtering of action according to specified object types\n */\nexport type FilterObjectTypes = ObjectType[]\n\n/**\n * IDE action (SAIA) v1\n */\nexport interface AffSaiaV1 {\nformatVersion: FormatVersion\nheader: Header\ngeneralInformation: GeneralInformation\nfilters?: FilterCardinality\n}\n/**\n * Header\n */\nexport interface Header {\ndescription: Description\noriginalLanguage: OriginalLanguage\nabapLanguageVersion?: ABAPLanguageVersion\n}\n/**\n * General information\n */\nexport interface GeneralInformation {\ntitle: Title\nsummary: Summary\nimplementingClass?: ImplementingClass\ninputUiConfigurationClass?: InputUIConfigurationClass\n}\n/**\n * Filtering of application of action according to cardinality and object types\n */\nexport interface FilterCardinality {\nnumberOfFocusedResources?: NumberOfFocusedResources\nsupportedDevObjectTypes?: FilterObjectTypes\n}\n/**\n * Object type\n */\nexport interface ObjectType {\nworkbenchObjectType?: ObjectType1\nworkbenchObjectSubtype?: ObjectSubtype\n}\n\nexport type SaiaAff = AffSaiaV1;\n","/**\n * Auto-generated from SAP/abap-file-formats JSON schemas.\n * Do not edit — regenerate with `bun scripts/generate-aff-schemas.ts`.\n */\n/**\n * The ABAP file format version\n */\nexport type ABAPFileFormatVersion = \"1\"\n/**\n * Description of the application job catalog entry\n */\nexport type Description = string\n/**\n * Original language of the application job catalog entry\n */\nexport type OriginalLanguage = string\n/**\n * ABAP language version\n */\nexport type ABAPLanguageVersion = (\"standard\" | \"cloudDevelopment\")\n/**\n * Name of the class which contains the execute-method to run within the job\n */\nexport type ClassWithExecuteMethod = string\n/**\n * Name of the program which is executed within the job\n */\nexport type ExecutedProgram = string\n/**\n * Name of the class which contains the check exit\n */\nexport type Check = string\n/**\n * Name of the class which contains the value help exit\n */\nexport type ValueHelp = string\n/**\n * Name of the class which contains the notification exit\n */\nexport type Notification = string\n/**\n * Name of the section\n */\nexport type Name = string\n/**\n * Title of the section on the selection screen\n */\nexport type Title = string\n/**\n * List of sections\n */\nexport type Sections = Section[]\n/**\n * Name of the group\n */\nexport type Name1 = string\n/**\n * Title of the group on the selection screen\n */\nexport type Title1 = string\n/**\n * Name of the group section\n */\nexport type Section1 = string\n/**\n * List of groups\n */\nexport type Groups = Group[]\n/**\n * Name of the parameter\n */\nexport type Name2 = string\n/**\n * Title of the parameter on the selection screen\n */\nexport type Title2 = string\n/**\n * Name of the parameter group\n */\nexport type Group1 = string\n/**\n * Flag indicating whether the parameter is indented on the selection screen\n */\nexport type Indented = boolean\n/**\n * Flag indicating whether the parameter is mandatory\n */\nexport type Mandatory = boolean\n/**\n * Flag indicating whether the parameter is hidden\n */\nexport type Hidden = boolean\n/**\n * Flag indicating whether the parameter is read only\n */\nexport type ReadOnly = boolean\n/**\n * Name of the boolean parameter which enables / disables the current parameter\n */\nexport type EnabledByParameter = string\n/**\n * Display of the parameter as screen element (radio button, checkbox, list box)\n */\nexport type ScreenElement = (\"none\" | \"checkbox\" | \"radioButton\" | \"listBox\")\n/**\n * Name of the radio button group if the parameter is a radio button\n */\nexport type RadioButtonGroup = string\n/**\n * Name of the object on which the value help is based: for value helps based on a CDS view: name of the data definition; for value helps based on a domain: name of the domain\n */\nexport type ValueHelp1 = string\n/**\n * Type of the value help (based on a CDS view, or based on the 'Fixed values' list of a dictionary domain)\n */\nexport type ValueHelpType = (\"none\" | \"cdsView\" | \"domain\")\n/**\n * Flag indicating whether a call of the backend system is triggered after a parameter value change to check it\n */\nexport type BackendCall = boolean\n/**\n * Flag indicating whether only single values are allowed (no conditions like 'not equal' or 'between')\n */\nexport type OnlySingleValues = boolean\n/**\n * Number of lines of the text editor (0 means no multiline editor)\n */\nexport type TextLinesInEditor = number\n/**\n * List of parameters\n */\nexport type Parameters = Parameter[]\n\n/**\n * Attributes of the application job catalog entry\n */\nexport interface AffSajcV1 {\nformatVersion: ABAPFileFormatVersion\nheader: Header\ngeneralInformation: GeneralInformation\nexitClasses?: ExitClasses\nsections?: Sections\ngroups?: Groups\nparameters?: Parameters\n}\n/**\n * Header\n */\nexport interface Header {\ndescription: Description\noriginalLanguage: OriginalLanguage\nabapLanguageVersion?: ABAPLanguageVersion\n}\n/**\n * General information\n */\nexport interface GeneralInformation {\nclassName: ClassWithExecuteMethod\nprogramName?: ExecutedProgram\n}\n/**\n * Classes which contain the exits of the job scheduling and processing\n */\nexport interface ExitClasses {\ncheck?: Check\nvalueHelp?: ValueHelp\nnotification?: Notification\n}\n/**\n * Section of parameter groups on the selection screen\n */\nexport interface Section {\nname: Name\ntitle: Title\n}\n/**\n * Group of parameters on the selection screen\n */\nexport interface Group {\nname: Name1\ntitle: Title1\nsection?: Section1\n}\n/**\n * Parameter of the class which is executed within the job\n */\nexport interface Parameter {\nname: Name2\ntitle?: Title2\ngroup?: Group1\nindented?: Indented\nmandatory?: Mandatory\nhidden?: Hidden\nreadOnly?: ReadOnly\nenabledByParameter?: EnabledByParameter\nscreenElement?: ScreenElement\nradioButtonGroup?: RadioButtonGroup\nvalueHelp?: ValueHelp1\nvalueHelpType?: ValueHelpType\nbackendCall?: BackendCall\nsingleValues?: OnlySingleValues\ntextEditorLines?: TextLinesInEditor\n}\n\nexport type SajcAff = AffSajcV1;\n","/**\n * Auto-generated from SAP/abap-file-formats JSON schemas.\n * Do not edit — regenerate with `bun scripts/generate-aff-schemas.ts`.\n */\n/**\n * The ABAP file format version\n */\nexport type ABAPFileFormatVersion = \"1\"\n/**\n * Description of the application job template\n */\nexport type Description = string\n/**\n * Original language of the application job template\n */\nexport type OriginalLanguage = string\n/**\n * ABAP language version\n */\nexport type ABAPLanguageVersion = (\"standard\" | \"cloudDevelopment\")\n/**\n * Name of the application job catalog entry to which the template refers\n */\nexport type JobCatalogEntry = string\n/**\n * Name of the parameter\n */\nexport type Name = string\n/**\n * Value of the parameter\n */\nexport type Value = string\n/**\n * List of parameters with single value\n */\nexport type ParametersWithSingleValue = ParameterDetails[]\n/**\n * Name of the parameter\n */\nexport type Name1 = string\n/**\n * Include/exclude values (I/E)\n */\nexport type Sign = (\"include\" | \"exclude\")\n/**\n * Operator of the ranges condition (EQ/NE/GE/GT/LE/LT/CP/NP/BT/NB)\n */\nexport type Option = (\"equals\" | \"between\" | \"greaterThan\" | \"containsPattern\" | \"notEqual\" | \"notBetween\" | \"notContainsPattern\" | \"greaterEqual\" | \"lessThan\" | \"lessEqual\")\n/**\n * Low value of the ranges condition\n */\nexport type LowValue = string\n/**\n * High value of the ranges condition\n */\nexport type HighValue = string\n/**\n * Values of the parameter as ranges table\n */\nexport type Values = EntryOfRangesTable[]\n/**\n * List of parameters with value ranges\n */\nexport type ParametersWithValueRanges = ParameterDetails1[]\n\n/**\n * Attributes of the application job template\n */\nexport interface AffSajtV1 {\nformatVersion: ABAPFileFormatVersion\nheader: Header\ngeneralInformation: GeneralInformation\nparameters?: Parameters\n}\n/**\n * Header\n */\nexport interface Header {\ndescription: Description\noriginalLanguage: OriginalLanguage\nabapLanguageVersion?: ABAPLanguageVersion\n}\n/**\n * General information\n */\nexport interface GeneralInformation {\ncatalogName: JobCatalogEntry\n}\n/**\n * Parameters of the class which runs within the job\n */\nexport interface Parameters {\nsingleValueParameters?: ParametersWithSingleValue\nvalueRangesParameters?: ParametersWithValueRanges\n}\n/**\n * Name of the parameter and its value\n */\nexport interface ParameterDetails {\nname: Name\nvalue: Value\n}\n/**\n * Name of the parameter and its values as ranges table\n */\nexport interface ParameterDetails1 {\nname: Name1\nvalueRanges: Values\n}\n/**\n * Entry of ranges table\n */\nexport interface EntryOfRangesTable {\nsign: Sign\noption: Option\nlow?: LowValue\nhigh?: HighValue\n}\n\nexport type SajtAff = AffSajtV1;\n","/**\n * Auto-generated from SAP/abap-file-formats JSON schemas.\n * Do not edit — regenerate with `bun scripts/generate-aff-schemas.ts`.\n */\n/**\n * The ABAP file format version\n */\nexport type ABAPFileFormatVersion = \"1\"\n/**\n * Description of the ABAP object\n */\nexport type Description = string\n/**\n * Original language of the ABAP object\n */\nexport type OriginalLanguage = string\n/**\n * ABAP language version\n */\nexport type ABAPLanguageVersion = (\"standard\" | \"cloudDevelopment\")\n/**\n * Type of BC Set i.e. a simple BC Set or hierarchical BC Set, which contains several other BC Sets\n */\nexport type Type = (\"simple\" | \"hierarchical\")\n/**\n * Scope Relevant\n */\nexport type ScopingRelevant = boolean\n/**\n * Name of the BC Set\n */\nexport type Name = string\n/**\n * Position of BC Set in Hierarchical BC Set\n */\nexport type Position = number\n/**\n * A hierarchical BC Set comprises several other BC Sets, which can also be hierarchical. The hierarchy can have any number of levels.\n */\nexport type SubBCSets = SubBCSet[]\n/**\n * Collections of tables which constitute logical business entities, and must therefore be maintained and exported together.\n */\nexport type Name1 = string\n/**\n * Object type is used to classify customizing objects\n */\nexport type Type1 = (\"viewCluster\" | \"logicalTransportObject\" | \"tableWithTextTable\" | \"individualTransactionObject\" | \"view\")\n/**\n * Customizing object assigned to an IMG Activity\n */\nexport type IMGActivity = string\n/**\n * Table name of each data record\n */\nexport type EntityName = string\n/**\n * Name of field in table/view\n */\nexport type FieldName = string\n/**\n * Defines the attribute of field like during BC Set activation, the field value must be copied to database table or not\n */\nexport type FieldAttribute = (\"fixedKeyField\" | \"defaultValue\" | \"forbiddenField\")\n/**\n * You can define the behavior for field of table/view during activation\n */\nexport type FieldAttributes = AttributesOfTableViewField[]\n/**\n * Key value of a record\n */\nexport type KeyValue = string\n/**\n * Automatic customizing recording only puts the key fields of a data record or data records, in the BC Set. Such BC Sets must be post-processed. Such data records are flagged as incomplete\n */\nexport type RecordIsIncomplete = boolean\n/**\n * Data records which are to be deleted at activation are flagged with value 'L'\n */\nexport type OperationAtActivation = (\"upsert\" | \"delete\")\n/**\n * Name of data record field\n */\nexport type FieldName1 = string\n/**\n * Value of data record field\n */\nexport type Value = string\n/**\n * Complete data record of selected key value\n */\nexport type Data = Data1[]\n/**\n * Language in which the data record is translated\n */\nexport type Language = string\n/**\n * Name of data record field\n */\nexport type FieldName2 = string\n/**\n * Value of data record field\n */\nexport type Value1 = string\n/**\n * Translated data records of table or view included in a BC Set\n */\nexport type Translations = SelectedLanguage[]\n/**\n * Data records of table or view included in a BC Set\n */\nexport type DataRecords = DataRecord[]\n/**\n * Involved tables or views of a Customizing object\n */\nexport type Entities = Entity[]\n/**\n * Customizing objects or tables included in the BC Set\n */\nexport type CustomizingObjects = CustomizingObject[]\n\n/**\n * Metadata information of BC Set\n */\nexport interface AffScp1V1 {\nformatVersion: ABAPFileFormatVersion\nheader: Header\nattributes: Attributes\nsubBcSets?: SubBCSets\ncustomizingObjects?: CustomizingObjects\n}\n/**\n * Header\n */\nexport interface Header {\ndescription: Description\noriginalLanguage: OriginalLanguage\nabapLanguageVersion?: ABAPLanguageVersion\n}\n/**\n * Header information of BC Set\n */\nexport interface Attributes {\ntype: Type\nisRelevantForScope?: ScopingRelevant\n}\n/**\n * A hierarchical BC Set comprises several other BC Sets, which can also be hierarchical. The hierarchy can have any number of levels.\n */\nexport interface SubBCSet {\nname?: Name\npositionInHierarchy?: Position\n}\n/**\n * Details of selected customizing object\n */\nexport interface CustomizingObject {\nobjectName: Name1\nobjectType: Type1\nimgActivity?: IMGActivity\nentities: Entities\n}\n/**\n * Details of selected view or table\n */\nexport interface Entity {\nname: EntityName\nfieldAttributes?: FieldAttributes\ndataRecords: DataRecords\n}\n/**\n * You can define the behavior for field of table/view during activation\n */\nexport interface AttributesOfTableViewField {\nfieldName: FieldName\nfieldAttribute: FieldAttribute\n}\n/**\n * Details of selected record\n */\nexport interface DataRecord {\nkeyValue: KeyValue\nincomplete?: RecordIsIncomplete\noperationAtActivation: OperationAtActivation\ndata: Data\ntranslations?: Translations\n}\n/**\n * Data record represented as field-value pair\n */\nexport interface Data1 {\nfieldName: FieldName1\nfieldValue?: Value\n}\n/**\n * Details of selected language\n */\nexport interface SelectedLanguage {\nlanguage?: Language\nfieldName?: FieldName2\nfieldValue?: Value1\n}\n\nexport type Scp1Aff = AffScp1V1;\n","/**\n * Auto-generated from SAP/abap-file-formats JSON schemas.\n * Do not edit — regenerate with `bun scripts/generate-aff-schemas.ts`.\n */\n/**\n * Format version\n */\nexport type FormatVersion = \"1\"\n/**\n * Description of the ABAP object\n */\nexport type Description = string\n/**\n * Original language of the ABAP object\n */\nexport type OriginalLanguage = string\n/**\n * ABAP language version\n */\nexport type ABAPLanguageVersion = (\"standard\" | \"cloudDevelopment\")\n/**\n * RAP Service Definition that implements the business context for this form template\n */\nexport type DataProvider = string\n/**\n * Automatically embed font files into the output. Useful if your output uses fonts that are not delivered by default, for asian fonts or to include your own branding.\n */\nexport type FontEmbed = boolean\n/**\n * When activated if your form template is designed in an LTR language and your target output is an RTL language, layout will be automatically mirrored in the output.\n */\nexport type LayoutMirroring = boolean\n/**\n * Reduce data input volume based on the form design\n */\nexport type ReduceDataVolume = boolean\n\n/**\n * Object type SFPF\n */\nexport interface AffSfpfV1 {\nformatVersion: FormatVersion\nheader: Header\ngeneralInformation: GeneralInformation\n}\n/**\n * Header\n */\nexport interface Header {\ndescription: Description\noriginalLanguage: OriginalLanguage\nabapLanguageVersion?: ABAPLanguageVersion\n}\n/**\n * General Information\n */\nexport interface GeneralInformation {\ndataProvider?: DataProvider\nfontEmbed?: FontEmbed\nlayoutMirroring?: LayoutMirroring\nreduceDataVolume?: ReduceDataVolume\n}\n\nexport type SfpfAff = AffSfpfV1;\n","/**\n * Auto-generated from SAP/abap-file-formats JSON schemas.\n * Do not edit — regenerate with `bun scripts/generate-aff-schemas.ts`.\n */\n/**\n * Format version\n */\nexport type FormatVersion = \"1\"\n/**\n * Description of the ABAP object\n */\nexport type Description = string\n/**\n * Original language of the ABAP object\n */\nexport type OriginalLanguage = string\n/**\n * ABAP language version\n */\nexport type ABAPLanguageVersion = (\"standard\" | \"cloudDevelopment\")\n/**\n * Business role template\n */\nexport type BusinessRoleTemplate = string\n/**\n * Launchpad space template\n */\nexport type LaunchpadSpaceTemplate = string\n\n/**\n * Business role template launchpad space template assignment\n */\nexport interface AffSiadV1 {\nformatVersion: FormatVersion\nheader: Header\ngeneralInformation: GeneralInformation\n}\n/**\n * Header\n */\nexport interface Header {\ndescription: Description\noriginalLanguage: OriginalLanguage\nabapLanguageVersion?: ABAPLanguageVersion\n}\n/**\n * General information\n */\nexport interface GeneralInformation {\nbusinessRoleTemplate: BusinessRoleTemplate\nlaunchpadSpaceTemplate: LaunchpadSpaceTemplate\n}\n\nexport type SiadAff = AffSiadV1;\n","/**\n * Auto-generated from SAP/abap-file-formats JSON schemas.\n * Do not edit — regenerate with `bun scripts/generate-aff-schemas.ts`.\n */\n/**\n * Format version\n */\nexport type FormatVersion = \"1\"\n/**\n * Description of the ABAP object\n */\nexport type Description = string\n/**\n * Original language of the ABAP object\n */\nexport type OriginalLanguage = string\n/**\n * ABAP language version\n */\nexport type ABAPLanguageVersion = (\"standard\" | \"keyUser\" | \"cloudDevelopment\")\n/**\n * Object reusable\n */\nexport type Reusable = boolean\n/**\n * Scope\n */\nexport type Scope = (\"SAP\" | \"customer\")\n/**\n * SAP object type\n */\nexport type SAPObjectType = string\n/**\n * Object extensible\n */\nexport type Extensible = boolean\n/**\n * Situation object name\n */\nexport type Name = string\n/**\n * Description\n */\nexport type Description1 = string\n/**\n * Situation object structure id\n */\nexport type ID = string\n/**\n * Name\n */\nexport type Name1 = string\n/**\n * Situation object structure type\n */\nexport type Type = (\"CDS\" | \"inMemory\")\n/**\n * Object reusable\n */\nexport type Reusable1 = boolean\n/**\n * Scope\n */\nexport type Scope1 = (\"SAP\" | \"customer\")\n/**\n * SAP object node type\n */\nexport type SAPObjectNodeType = string\n/**\n * Situation object structure description\n */\nexport type Description2 = string\n/**\n * Object field\n */\nexport type Field = string\n/**\n * Object field order for situation\n */\nexport type FieldOrder = string\n/**\n * Semantic keys of an object structure\n */\nexport type SemanticKeys = SemanticKeyDetails[]\n/**\n * Object field\n */\nexport type FieldName = string\n/**\n * App for value help\n */\nexport type AppType = \"allApps\"\n/**\n * Type of value help\n */\nexport type Type1 = \"service\"\n/**\n * Scope\n */\nexport type Scope2 = (\"SAP\" | \"customer\")\n/**\n * Value help mappings for situation object structure\n */\nexport type ValueHelpMappings = ValueHelpMappingDetails[]\n/**\n * Service id for value help\n */\nexport type ID1 = string\n/**\n * Field name\n */\nexport type FieldName1 = string\n/**\n * App for value help\n */\nexport type Type2 = \"allApps\"\n/**\n * Entity set\n */\nexport type EntitySet = string\n/**\n * Property\n */\nexport type Property = string\n/**\n * Value help mapping for situation object structure - services\n */\nexport type Services = ServiceDetails[]\n/**\n * Situation object structures\n */\nexport type Structures = StructureDetails[]\n/**\n * Situation event id\n */\nexport type ID2 = string\n/**\n * Object\n */\nexport type Object = string\n/**\n * Type\n */\nexport type Type3 = string\n/**\n * Object reusable\n */\nexport type Reusable2 = boolean\n/**\n * Scope\n */\nexport type Scope3 = (\"SAP\" | \"customer\")\n/**\n * Object type category\n */\nexport type Category = (\"businessClass\" | \"borObjectType\" | \"abapClass\" | \"businessObjectType\" | \"xmlObjectType\")\n/**\n * Parameter structure id for situation object\n */\nexport type ParameterStructureID = string\n/**\n * Description\n */\nexport type Description3 = string\n/**\n * Situation object events\n */\nexport type Events = EventDetails[]\n/**\n * Action id\n */\nexport type ID3 = string\n/**\n * Action type of situation\n */\nexport type Type4 = (\"navigationAction\" | \"callbackAction\")\n/**\n * Object reusable\n */\nexport type Reusable3 = boolean\n/**\n * Scope\n */\nexport type Scope4 = (\"SAP\" | \"customer\")\n/**\n * Name of action\n */\nexport type Name2 = string\n/**\n * Description of action\n */\nexport type Description4 = string\n/**\n * Navigation id\n */\nexport type ID4 = string\n/**\n * Callback id\n */\nexport type ID5 = string\n/**\n * Situation object end user actions\n */\nexport type EndUserActions = EndUserActionDetails[]\n/**\n * Navigation id\n */\nexport type ID6 = string\n/**\n * Object reusable\n */\nexport type Reusable4 = boolean\n/**\n * Scope\n */\nexport type Scope5 = (\"SAP\" | \"customer\")\n/**\n * Semantic object\n */\nexport type SemanticObject = string\n/**\n * Semantic object action\n */\nexport type SemanticObjectAction = string\n/**\n * Name of parameter\n */\nexport type Name3 = string\n/**\n * Parameters\n */\nexport type Parameters = ParameterDetails[]\n/**\n * Situation object navigations\n */\nexport type Navigations = NavigationDetails1[]\n/**\n * Callback id\n */\nexport type ID7 = string\n/**\n * Object reusable\n */\nexport type Reusable5 = boolean\n/**\n * Scope\n */\nexport type Scope6 = (\"SAP\" | \"customer\")\n/**\n * Class name\n */\nexport type ClassName = string\n/**\n * Name of parameter\n */\nexport type Name4 = string\n/**\n * Parameters\n */\nexport type Parameters1 = ParameterDetails1[]\n/**\n * Situation object callbacks\n */\nexport type Callbacks = CallbackDetails1[]\n/**\n * Service id for value help\n */\nexport type ID8 = string\n/**\n * Object reusable\n */\nexport type Reusable6 = boolean\n/**\n * Scope\n */\nexport type Scope7 = (\"SAP\" | \"customer\")\n/**\n * Service protocol version for value help\n */\nexport type ProtocolVersion = (\"V2\" | \"V4\")\n/**\n * Service path type for value help\n */\nexport type PathType = (\"standard\" | \"custom\")\n/**\n * Service custom path for value help\n */\nexport type CustomPath = string\n/**\n * Service binding for value help\n */\nexport type Binding = string\n/**\n * Service definition for value help\n */\nexport type Definition = string\n/**\n * Service version for value help\n */\nexport type Version = string\n/**\n * Entity set\n */\nexport type EntitySet1 = string\n/**\n * Property\n */\nexport type Property1 = string\n/**\n * Providers of value help service for situation object\n */\nexport type ValueHelpServiceProviders = ValueHelpServiceProviderDetails[]\n/**\n * Value help services for situation object\n */\nexport type ValueHelpServices = ValueHelpServiceDetails[]\n\n/**\n * Situation Object properties\n */\nexport interface AffSitoV1 {\nformatVersion: FormatVersion\nheader: Header\nsituationObject: SituationObject\n}\n/**\n * Header\n */\nexport interface Header {\ndescription: Description\noriginalLanguage: OriginalLanguage\nabapLanguageVersion?: ABAPLanguageVersion\n}\n/**\n * Situation Object\n */\nexport interface SituationObject {\nreusable: Reusable\nscope: Scope\nsapObjectType: SAPObjectType\nextensible: Extensible\ntext: Text\nstructures?: Structures\nevents?: Events\nendUserActions?: EndUserActions\nnavigations?: Navigations\ncallbacks?: Callbacks\nvalueHelpServices?: ValueHelpServices\n}\n/**\n * Text for ituation object\n */\nexport interface Text {\nname: Name\ndescription: Description1\n}\n/**\n * Situation object structure\n */\nexport interface StructureDetails {\nid: ID\nname: Name1\ntype: Type\nreusable: Reusable1\nscope: Scope1\nsapObjectNodeType: SAPObjectNodeType\ntext: Text1\nsemanticKeys?: SemanticKeys\nvalueHelpMappings?: ValueHelpMappings\nservices?: Services\n}\n/**\n * Text for situation object structure\n */\nexport interface Text1 {\ndescription: Description2\n}\n/**\n * Semantic key of an object structure\n */\nexport interface SemanticKeyDetails {\nfield: Field\nfieldOrder: FieldOrder\n}\n/**\n * Value help mapping for situation object structure\n */\nexport interface ValueHelpMappingDetails {\nfieldName: FieldName\nappType: AppType\ntype: Type1\nscope: Scope2\n}\n/**\n * Value help mapping for situation object structure - service\n */\nexport interface ServiceDetails {\nid: ID1\nfieldName: FieldName1\ntype: Type2\nentitySet: EntitySet\nproperty: Property\n}\n/**\n * Situation object event\n */\nexport interface EventDetails {\nid: ID2\nobject: Object\ntype: Type3\nreusable: Reusable2\nscope: Scope3\ncategory: Category\nparameterStructureId: ParameterStructureID\ntext: Text2\n}\n/**\n * Text for situation object event\n */\nexport interface Text2 {\ndescription: Description3\n}\n/**\n * Situation object action\n */\nexport interface EndUserActionDetails {\nid: ID3\ntype: Type4\nreusable: Reusable3\nscope: Scope4\ntext: Text3\nnavigation?: NavigationDetails\ncallback?: CallbackDetails\n}\n/**\n * Text for situation object action\n */\nexport interface Text3 {\nname: Name2\ndescription: Description4\n}\n/**\n * Situation object action - navigation\n */\nexport interface NavigationDetails {\nid: ID4\n}\n/**\n * Situation object action - callback\n */\nexport interface CallbackDetails {\nid: ID5\n}\n/**\n * Situation object navigation\n */\nexport interface NavigationDetails1 {\nid: ID6\nreusable: Reusable4\nscope: Scope5\nsemanticObject: SemanticObject\nsemanticObjectAction: SemanticObjectAction\nparameters?: Parameters\n}\n/**\n * Parameter\n */\nexport interface ParameterDetails {\nname: Name3\n}\n/**\n * Situation object callback\n */\nexport interface CallbackDetails1 {\nid: ID7\nreusable: Reusable5\nscope: Scope6\nclassName: ClassName\nparameters?: Parameters1\n}\n/**\n * Parameter\n */\nexport interface ParameterDetails1 {\nname: Name4\n}\n/**\n * Value help service for situation object\n */\nexport interface ValueHelpServiceDetails {\nid: ID8\nreusable: Reusable6\nscope: Scope7\nprotocolVersion: ProtocolVersion\npathType: PathType\ncustomPath: CustomPath\nbinding: Binding\ndefinition: Definition\nversion: Version\nvalueHelpServiceProviders?: ValueHelpServiceProviders\n}\n/**\n * Provider of value help service for situation object\n */\nexport interface ValueHelpServiceProviderDetails {\nentitySet: EntitySet1\nproperty: Property1\n}\n\nexport type SitoAff = AffSitoV1;\n","/**\n * Auto-generated from SAP/abap-file-formats JSON schemas.\n * Do not edit — regenerate with `bun scripts/generate-aff-schemas.ts`.\n */\n/**\n * Format version\n */\nexport type FormatVersion = \"2\"\n/**\n * Description of the ABAP object\n */\nexport type Description = string\n/**\n * Original language of the ABAP object\n */\nexport type OriginalLanguage = string\n/**\n * ABAP language version\n */\nexport type ABAPLanguageVersion = (\"standard\" | \"keyUser\" | \"cloudDevelopment\")\n/**\n * Object reusable\n */\nexport type Reusable = boolean\n/**\n * Scope\n */\nexport type Scope = (\"SAP\" | \"customer\")\n/**\n * SAP object type\n */\nexport type SAPObjectType = string\n/**\n * Object extensible\n */\nexport type Extensible = boolean\n/**\n * Description of object\n */\nexport type Description1 = string\n/**\n * Situation object structure id\n */\nexport type ID = string\n/**\n * Name\n */\nexport type Name = string\n/**\n * Situation object structure type\n */\nexport type Type = (\"CDS\" | \"inMemory\")\n/**\n * Object reusable\n */\nexport type Reusable1 = boolean\n/**\n * Scope\n */\nexport type Scope1 = (\"SAP\" | \"customer\")\n/**\n * SAP object node type\n */\nexport type SAPObjectNodeType = string\n/**\n * Personal data\n */\nexport type PersonalData = (\"noFields\" | \"someFields\" | \"allFields\")\n/**\n * Situation object structure description\n */\nexport type Description2 = string\n/**\n * Object field\n */\nexport type Field = string\n/**\n * Object field order for situation\n */\nexport type FieldOrder = string\n/**\n * Semantic keys of an object structure\n */\nexport type SemanticKeys = SemanticKeyDetails[]\n/**\n * Object field\n */\nexport type FieldName = string\n/**\n * App for value help\n */\nexport type AppType = \"allApps\"\n/**\n * Type of value help\n */\nexport type Type1 = \"service\"\n/**\n * Scope\n */\nexport type Scope2 = (\"SAP\" | \"customer\")\n/**\n * Value help mappings for situation object structure\n */\nexport type ValueHelpMappings = ValueHelpMappingDetails[]\n/**\n * Service id for value help\n */\nexport type ID1 = string\n/**\n * Field name\n */\nexport type FieldName1 = string\n/**\n * App for value help\n */\nexport type Type2 = \"allApps\"\n/**\n * Entity set\n */\nexport type EntitySet = string\n/**\n * Property\n */\nexport type Property = string\n/**\n * Value help mapping for situation object structure - services\n */\nexport type Services = ServiceDetails[]\n/**\n * Field name\n */\nexport type FieldName2 = string\n/**\n * Personal data fields of an object structure\n */\nexport type PersonalDataFields = PersonalDataFieldDetails[]\n/**\n * Situation object structures\n */\nexport type Structures = StructureDetails[]\n/**\n * Situation event id\n */\nexport type ID2 = string\n/**\n * Object\n */\nexport type Object = string\n/**\n * Type\n */\nexport type Type3 = string\n/**\n * Object reusable\n */\nexport type Reusable2 = boolean\n/**\n * Scope\n */\nexport type Scope3 = (\"SAP\" | \"customer\")\n/**\n * Object type category\n */\nexport type Category = (\"businessClass\" | \"borObjectType\" | \"abapClass\" | \"businessObjectType\" | \"xmlObjectType\")\n/**\n * Parameter structure id for situation object\n */\nexport type ParameterStructureID = string\n/**\n * Description\n */\nexport type Description3 = string\n/**\n * Situation object events\n */\nexport type Events = EventDetails[]\n/**\n * Action id\n */\nexport type ID3 = string\n/**\n * Action type of situation\n */\nexport type Type4 = (\"navigationAction\" | \"callbackAction\")\n/**\n * Object reusable\n */\nexport type Reusable3 = boolean\n/**\n * Scope\n */\nexport type Scope4 = (\"SAP\" | \"customer\")\n/**\n * Name of action\n */\nexport type Name1 = string\n/**\n * Description of action\n */\nexport type Description4 = string\n/**\n * Navigation id\n */\nexport type ID4 = string\n/**\n * Callback id\n */\nexport type ID5 = string\n/**\n * Situation object end user actions\n */\nexport type EndUserActions = EndUserActionDetails[]\n/**\n * Navigation id\n */\nexport type ID6 = string\n/**\n * Object reusable\n */\nexport type Reusable4 = boolean\n/**\n * Scope\n */\nexport type Scope5 = (\"SAP\" | \"customer\")\n/**\n * Semantic object\n */\nexport type SemanticObject = string\n/**\n * Semantic object action\n */\nexport type SemanticObjectAction = string\n/**\n * Name of parameter\n */\nexport type Name2 = string\n/**\n * Parameters\n */\nexport type Parameters = ParameterDetails[]\n/**\n * Situation object navigations\n */\nexport type Navigations = NavigationDetails1[]\n/**\n * Callback id\n */\nexport type ID7 = string\n/**\n * Object reusable\n */\nexport type Reusable5 = boolean\n/**\n * Scope\n */\nexport type Scope6 = (\"SAP\" | \"customer\")\n/**\n * Class name\n */\nexport type ClassName = string\n/**\n * Name of parameter\n */\nexport type Name3 = string\n/**\n * Parameters\n */\nexport type Parameters1 = ParameterDetails1[]\n/**\n * Situation object callbacks\n */\nexport type Callbacks = CallbackDetails1[]\n/**\n * Service id for value help\n */\nexport type ID8 = string\n/**\n * Object reusable\n */\nexport type Reusable6 = boolean\n/**\n * Scope\n */\nexport type Scope7 = (\"SAP\" | \"customer\")\n/**\n * Service protocol version for value help\n */\nexport type ProtocolVersion = (\"V2\" | \"V4\")\n/**\n * Service path type for value help\n */\nexport type PathType = (\"standard\" | \"custom\")\n/**\n * Service custom path for value help\n */\nexport type CustomPath = string\n/**\n * Service binding for value help\n */\nexport type Binding = string\n/**\n * Service definition for value help\n */\nexport type Definition = string\n/**\n * Service version for value help\n */\nexport type Version = string\n/**\n * Entity set\n */\nexport type EntitySet1 = string\n/**\n * Property\n */\nexport type Property1 = string\n/**\n * Providers of value help service for situation object\n */\nexport type ValueHelpServiceProviders = ValueHelpServiceProviderDetails[]\n/**\n * Value help services for situation object\n */\nexport type ValueHelpServices = ValueHelpServiceDetails[]\n\n/**\n * Situation Object properties\n */\nexport interface AffSitoV2 {\nformatVersion: FormatVersion\nheader: Header\nsituationObject: SituationObject\n}\n/**\n * Header\n */\nexport interface Header {\ndescription: Description\noriginalLanguage: OriginalLanguage\nabapLanguageVersion?: ABAPLanguageVersion\n}\n/**\n * Situation Object\n */\nexport interface SituationObject {\nreusable: Reusable\nscope: Scope\nsapObjectType: SAPObjectType\nextensible: Extensible\ntext: Text\nstructures?: Structures\nevents?: Events\nendUserActions?: EndUserActions\nnavigations?: Navigations\ncallbacks?: Callbacks\nvalueHelpServices?: ValueHelpServices\n}\n/**\n * Text for situation object\n */\nexport interface Text {\ndescription: Description1\n}\n/**\n * Situation object structure\n */\nexport interface StructureDetails {\nid: ID\nname: Name\ntype: Type\nreusable: Reusable1\nscope: Scope1\nsapObjectNodeType: SAPObjectNodeType\npersonalData: PersonalData\ntext: Text1\nsemanticKeys?: SemanticKeys\nvalueHelpMappings?: ValueHelpMappings\nservices?: Services\npersonalDataFields?: PersonalDataFields\n}\n/**\n * Text for situation object structure\n */\nexport interface Text1 {\ndescription: Description2\n}\n/**\n * Semantic key of an object structure\n */\nexport interface SemanticKeyDetails {\nfield: Field\nfieldOrder: FieldOrder\n}\n/**\n * Value help mapping for situation object structure\n */\nexport interface ValueHelpMappingDetails {\nfieldName: FieldName\nappType: AppType\ntype: Type1\nscope: Scope2\n}\n/**\n * Value help mapping for situation object structure - service\n */\nexport interface ServiceDetails {\nid: ID1\nfieldName: FieldName1\ntype: Type2\nentitySet: EntitySet\nproperty: Property\n}\n/**\n * Personal data field of an object structure\n */\nexport interface PersonalDataFieldDetails {\nfieldName: FieldName2\n}\n/**\n * Situation object event\n */\nexport interface EventDetails {\nid: ID2\nobject: Object\ntype: Type3\nreusable: Reusable2\nscope: Scope3\ncategory: Category\nparameterStructureId: ParameterStructureID\ntext: Text2\n}\n/**\n * Text for situation object event\n */\nexport interface Text2 {\ndescription: Description3\n}\n/**\n * Situation object action\n */\nexport interface EndUserActionDetails {\nid: ID3\ntype: Type4\nreusable: Reusable3\nscope: Scope4\ntext: Text3\nnavigation?: NavigationDetails\ncallback?: CallbackDetails\n}\n/**\n * Text for situation object action\n */\nexport interface Text3 {\nname: Name1\ndescription: Description4\n}\n/**\n * Situation object action - navigation\n */\nexport interface NavigationDetails {\nid: ID4\n}\n/**\n * Situation object action - callback\n */\nexport interface CallbackDetails {\nid: ID5\n}\n/**\n * Situation object navigation\n */\nexport interface NavigationDetails1 {\nid: ID6\nreusable: Reusable4\nscope: Scope5\nsemanticObject: SemanticObject\nsemanticObjectAction: SemanticObjectAction\nparameters?: Parameters\n}\n/**\n * Parameter\n */\nexport interface ParameterDetails {\nname: Name2\n}\n/**\n * Situation object callback\n */\nexport interface CallbackDetails1 {\nid: ID7\nreusable: Reusable5\nscope: Scope6\nclassName: ClassName\nparameters?: Parameters1\n}\n/**\n * Parameter\n */\nexport interface ParameterDetails1 {\nname: Name3\n}\n/**\n * Value help service for situation object\n */\nexport interface ValueHelpServiceDetails {\nid: ID8\nreusable: Reusable6\nscope: Scope7\nprotocolVersion: ProtocolVersion\npathType: PathType\ncustomPath: CustomPath\nbinding: Binding\ndefinition: Definition\nversion: Version\nvalueHelpServiceProviders?: ValueHelpServiceProviders\n}\n/**\n * Provider of value help service for situation object\n */\nexport interface ValueHelpServiceProviderDetails {\nentitySet: EntitySet1\nproperty: Property1\n}\n\nexport type SitoAff = AffSitoV2;\n","/**\n * Auto-generated from SAP/abap-file-formats JSON schemas.\n * Do not edit — regenerate with `bun scripts/generate-aff-schemas.ts`.\n */\n/**\n * The ABAP file format version\n */\nexport type ABAPFileFormatVersion = \"1\"\n/**\n * Description of the Business Configuration shown in the Maintain Business Configurations app. Can be translated with the Maintain Translations app\n */\nexport type Description = string\n/**\n * Original language of the development object. Attributes Name and Description must be maintained in this language\n */\nexport type OriginalLanguage = string\n/**\n * ABAP language version\n */\nexport type ABAPLanguageVersion = (\"standard\" | \"cloudDevelopment\")\n/**\n * Service Binding used for business configuration maintenance\n */\nexport type ServiceBinding = string\nexport type ServiceName = string\n/**\n * The major version number of the service to be used (as defined in the Service Binding)\n */\nexport type ServiceVersion = string\n/**\n * Root Entity Set exposed by the Service Definition\n */\nexport type RootEntitySet = string\n/**\n * Name of the Business Configuration\n */\nexport type Name = string\nexport type ConfigurationGroup = string\n/**\n * If true, the UI automatically navigates to the Object Page of the root entity\n */\nexport type SkipRootEntityListReport = boolean\n/**\n * Defines whether data in the List Report is automatically loaded on first app start.\n */\nexport type InitialLoad = (\"enabled\" | \"disabled\" | \"auto\")\nexport type VariantManagement = (\"page\" | \"none\")\nexport type EntitySet = string\n/**\n * Toggle between onepage concept and tabs.\n */\nexport type SectionLayout = (\"page\" | \"tabs\")\nexport type VariantManagement1 = (\"control\" | \"none\")\n/**\n * If true, the header content is changeable in edit mode\n */\nexport type EditableHeaderContent = boolean\n/**\n * If true, the selected transport request and transport request select action are displayed in a message strip.\n */\nexport type ShowTransportSelectionStrip = boolean\nexport type ObjectPageConfigurations = ObjectPageSettings[]\nexport type EntitySet1 = string\nexport type TableType = (\"responsiveTable\" | \"gridTable\")\nexport type SelectionMode = (\"auto\" | \"multi\" | \"single\" | \"none\")\n/**\n * Enable Select all checkbox\n */\nexport type SelectAll = boolean\n/**\n * Defines how the table handles the visible rows in the table\n */\nexport type RowCountMode = (\"fixed\" | \"auto\")\n/**\n * Number of visible rows of the table\n */\nexport type RowCount = number\n/**\n * You can freeze the first columns of a table so that they always remain visible when scrolling horizontally\n */\nexport type FrozenColumnCount = number\nexport type TableCreationMode = (\"newPage\" | \"inline\" | \"creationRow\" | \"inlineCreationRows\")\n/**\n * If true, a new row is added to the end of the table instead of the beginning of the table\n */\nexport type CreateAtEnd = boolean\n/**\n * If true, the user cannot filter data of the table\n */\nexport type HideFilter = boolean\n/**\n * If true, the user cannot sort the table\n */\nexport type HideSort = boolean\n/**\n * If true, the user cannot add and remove columns to the table\n */\nexport type HideColumn = boolean\n/**\n * If true, display rows in a condensed way. Only applicaple to Table Type 'GridTable'.\n */\nexport type CondensedTableLayout = boolean\n/**\n * If true, include the column labels while calculating the default column width. By default, the column width is calculated based on the type of the content\n */\nexport type IncludeColumnHeadersInWidthCalculation = boolean\n/**\n * If true, disable the possibility to add several items by copying and pasting data from an excel file\n */\nexport type DisablePaste = boolean\n/**\n * If true, a button on the table toolbar allows the user to open the table in fullscreen dialog\n */\nexport type EnableFullScreen = boolean\n/**\n * Mass editing allows users to simultaneously change multiple objects that share the same editable properties\n */\nexport type EnableMassEdit = boolean\nexport type TableSettings = TableSettings1[]\n\nexport interface AffSmbcV1 {\nformatVersion: ABAPFileFormatVersion\nheader: HeaderForSMBCObjects\nserviceConfiguration: ServiceConfiguration\nappConfiguration?: ConfgurationOfListReportAndObjectPages\n}\nexport interface HeaderForSMBCObjects {\ndescription: Description\noriginalLanguage: OriginalLanguage\nabapLanguageVersion?: ABAPLanguageVersion\n}\nexport interface ServiceConfiguration {\nserviceBinding: ServiceBinding\nserviceName: ServiceName\nserviceVersion: ServiceVersion\nrootEntitySet: RootEntitySet\nname: Name\nconfigurationGroup?: ConfigurationGroup\nskipRootEntity?: SkipRootEntityListReport\n}\nexport interface ConfgurationOfListReportAndObjectPages {\nlistReport?: ListReportConfiguration\nobjectPages?: ObjectPageConfigurations\ntableSettings?: TableSettings\n}\nexport interface ListReportConfiguration {\ninitialLoad?: InitialLoad\nvariantManagement?: VariantManagement\n}\nexport interface ObjectPageSettings {\nentitySet?: EntitySet\nsectionLayout?: SectionLayout\nvariantManagement?: VariantManagement1\neditableHeaderContent?: EditableHeaderContent\nshowTransportSelectionStrip?: ShowTransportSelectionStrip\n}\nexport interface TableSettings1 {\nentitySet?: EntitySet1\ntableType?: TableType\nselectionMode?: SelectionMode\nselectAll?: SelectAll\nrowCountMode?: RowCountMode\nrowCount?: RowCount\nfrozenColumnCount?: FrozenColumnCount\ncreationModeName?: TableCreationMode\ncreateAtEnd?: CreateAtEnd\nhideFilter?: HideFilter\nhideSort?: HideSort\nhideColumn?: HideColumn\ncondensedTableLayout?: CondensedTableLayout\nwidthIncludingColumnHeader?: IncludeColumnHeadersInWidthCalculation\ndisablePaste?: DisablePaste\nenableFullScreen?: EnableFullScreen\nenableMassEdit?: EnableMassEdit\n}\n\nexport type SmbcAff = AffSmbcV1;\n","/**\n * Auto-generated from SAP/abap-file-formats JSON schemas.\n * Do not edit — regenerate with `bun scripts/generate-aff-schemas.ts`.\n */\n/**\n * Format version\n */\nexport type FormatVersion = \"1\"\n/**\n * Description of the ABAP object\n */\nexport type Description = string\n/**\n * Original language of the ABAP object\n */\nexport type OriginalLanguage = string\n/**\n * ABAP language version\n */\nexport type ABAPLanguageVersion = (\"standard\" | \"keyUser\" | \"cloudDevelopment\")\n/**\n * Long description to that email template\n */\nexport type TemplateDescription = string\n/**\n * The corresponding CDS view name for the template\n */\nexport type CDSView = string\n/**\n * Indicator if the template is predelivered\n */\nexport type Predelivered = boolean\n/**\n * The subject of the email template\n */\nexport type Subject = string\n/**\n * Indicator if the template text body is generated automatically from html body\n */\nexport type GeneratePlainTextFromHTML = boolean\n/**\n * Name\n */\nexport type Name = string\n/**\n * Template Content\n */\nexport type TemplateContent = EmailTemplateContent[]\n\n/**\n * Email Template\n */\nexport interface AffSmtgV1 {\nformatVersion: FormatVersion\nheader: Header\ngeneralInformation: GeneralInformation\ntemplateContent?: TemplateContent\n}\n/**\n * Header\n */\nexport interface Header {\ndescription: Description\noriginalLanguage: OriginalLanguage\nabapLanguageVersion?: ABAPLanguageVersion\n}\n/**\n * General information\n */\nexport interface GeneralInformation {\ntemplateDescription?: TemplateDescription\ncdsView: CDSView\nisPredelivered?: Predelivered\nemailSubject: Subject\nisPlaintextAutoGenerated?: GeneratePlainTextFromHTML\n}\n/**\n * Displays the HTML und plain text template content.\n */\nexport interface EmailTemplateContent {\nname?: Name\n}\n\nexport type SmtgAff = AffSmtgV1;\n","/**\n * Auto-generated from SAP/abap-file-formats JSON schemas.\n * Do not edit — regenerate with `bun scripts/generate-aff-schemas.ts`.\n */\n/**\n * The ABAP file format version\n */\nexport type ABAPFileFormatVersion = \"1\"\n/**\n * Description of the ABAP object\n */\nexport type Description = string\n/**\n * Original language of the ABAP object\n */\nexport type OriginalLanguage = string\n/**\n * ABAP language version\n */\nexport type ABAPLanguageVersion = (\"standard\" | \"cloudDevelopment\")\n/**\n * Name of the service provider\n */\nexport type ProviderName = string\n/**\n * Namespace of the service provider\n */\nexport type Namespace = string\n/**\n * Prefix for all generated objects\n */\nexport type ObjectNamePrefix = string\n/**\n * Implementing class of service provider\n */\nexport type ImplementingClass = string\n\n/**\n * SOAP web service provider model\n */\nexport interface AffSprvV1 {\nformatVersion: ABAPFileFormatVersion\nheader: Header\nserviceProvider: ServiceProvider\n}\n/**\n * Header data\n */\nexport interface Header {\ndescription: Description\noriginalLanguage: OriginalLanguage\nabapLanguageVersion?: ABAPLanguageVersion\n}\n/**\n * Service provider details\n */\nexport interface ServiceProvider {\nproviderName: ProviderName\nnamespace: Namespace\nprefix?: ObjectNamePrefix\nimplementingClass?: ImplementingClass\n}\n\nexport type SprvAff = AffSprvV1;\n","/**\n * Auto-generated from SAP/abap-file-formats JSON schemas.\n * Do not edit — regenerate with `bun scripts/generate-aff-schemas.ts`.\n */\n/**\n * The ABAP file format version\n */\nexport type ABAPFileFormatVersion = \"1\"\n/**\n * Description of the ABAP object\n */\nexport type Description = string\n/**\n * Original language of the ABAP object\n */\nexport type OriginalLanguage = string\n/**\n * ABAP language version\n */\nexport type ABAPLanguageVersion = (\"standard\" | \"keyUser\" | \"cloudDevelopment\")\n/**\n * Service Binding type\n */\nexport type BindingType = string\n/**\n * Service Binding category\n */\nexport type BindingCategory = (\"ui\" | \"webApi\")\n/**\n * Service name\n */\nexport type ServiceName = string\n/**\n * Service version\n */\nexport type ServiceVersion1 = string\n/**\n * Service build version\n */\nexport type ServiceBuildVersion = string\n/**\n * Service definition\n */\nexport type ServiceDefinition = string\n/**\n * Service versions\n */\nexport type ServiceVersions = ServiceVersion[]\n/**\n * Services\n */\nexport type Services = ServiceProperties[]\n\n/**\n * Service Binding properties\n */\nexport interface AffSrvbV1 {\nformatVersion: ABAPFileFormatVersion\nheader: Header\nbindingType: BindingType\nbindingTypeCategory: BindingCategory\nservices: Services\n}\n/**\n * Header\n */\nexport interface Header {\ndescription: Description\noriginalLanguage: OriginalLanguage\nabapLanguageVersion?: ABAPLanguageVersion\n}\n/**\n * Service properties\n */\nexport interface ServiceProperties {\nname: ServiceName\nversions: ServiceVersions\n}\n/**\n * Service version\n */\nexport interface ServiceVersion {\nserviceVersion: ServiceVersion1\nserviceBuildVersion?: ServiceBuildVersion\nserviceDefinition: ServiceDefinition\n}\n\nexport type SrvbAff = AffSrvbV1;\n","/**\n * Auto-generated from SAP/abap-file-formats JSON schemas.\n * Do not edit — regenerate with `bun scripts/generate-aff-schemas.ts`.\n */\n/**\n * The ABAP file format version\n */\nexport type ABAPFileFormatVersion = \"1\"\n/**\n * Description of the ABAP object\n */\nexport type Description = string\n/**\n * Original language of the ABAP object\n */\nexport type OriginalLanguage = string\n/**\n * ABAP language version\n */\nexport type ABAPLanguageVersion = (\"standard\" | \"cloudDevelopment\")\n/**\n * Type\n */\nexport type Type = (\"OData\" | \"webService\" | \"RFC\")\n/**\n * Object type\n */\nexport type ObjectType = string\n/**\n * Object name\n */\nexport type ObjectName = string\n/**\n * Id\n */\nexport type Id = string\n/**\n * Value\n */\nexport type Value = string\n/**\n * Properties\n */\nexport type Properties = ConsumerPropertyDetails[]\n\n/**\n * Service Consumption Model properties\n */\nexport interface AffSrvcV1 {\nformatVersion: ABAPFileFormatVersion\nheader: Header\nconsumer: Consumer\n}\n/**\n * Header\n */\nexport interface Header {\ndescription: Description\noriginalLanguage: OriginalLanguage\nabapLanguageVersion?: ABAPLanguageVersion\n}\n/**\n * Consumer\n */\nexport interface Consumer {\ntype: Type\nobjectType: ObjectType\nobjectName: ObjectName\nproperties?: Properties\n}\n/**\n * Consumer property details\n */\nexport interface ConsumerPropertyDetails {\nid?: Id\nvalue?: Value\n}\n\nexport type SrvcAff = AffSrvcV1;\n","/**\n * Auto-generated from SAP/abap-file-formats JSON schemas.\n * Do not edit — regenerate with `bun scripts/generate-aff-schemas.ts`.\n */\n/**\n * The ABAP file format version\n */\nexport type ABAPFileFormatVersion = \"1\"\n/**\n * Description of the ABAP object\n */\nexport type Description = string\n/**\n * Original language of the ABAP object\n */\nexport type OriginalLanguage = string\n/**\n * ABAP language version\n */\nexport type ABAPLanguageVersion = (\"standard\" | \"keyUser\" | \"cloudDevelopment\")\n/**\n * Source Origin states which tool was used to create the service definition\n */\nexport type SourceOrigin = (\"abapDevelopmentTools\" | \"customCdsViews\" | \"customAnalyticalQueries\" | \"customBusinessObject\" | \"customCodeList\" | \"customCdsViewsVariantConfg\" | \"customFields\" | \"extensionsForDataSources\" | \"customSearchModeler\" | \"serviceConsumptionModel\")\n/**\n * Source type states which statement is in the service definition.\n */\nexport type SourceType = (\"definition\" | \"extension\")\n\n/**\n * Properties of a Service Definition\n */\nexport interface AffSrvdV1 {\nformatVersion: ABAPFileFormatVersion\nheader: Header\ngeneralInformation: GeneralInformation\n}\n/**\n * Header\n */\nexport interface Header {\ndescription: Description\noriginalLanguage: OriginalLanguage\nabapLanguageVersion?: ABAPLanguageVersion\n}\n/**\n * General information\n */\nexport interface GeneralInformation {\nsourceOrigin: SourceOrigin\nsourceType: SourceType\n}\n\nexport type SrvdAff = AffSrvdV1;\n","/**\n * Auto-generated from SAP/abap-file-formats JSON schemas.\n * Do not edit — regenerate with `bun scripts/generate-aff-schemas.ts`.\n */\n/**\n * The ABAP file format version\n */\nexport type ABAPFileFormatVersion = \"1\"\n/**\n * Description of the ABAP object\n */\nexport type Description = string\n/**\n * Original language of the ABAP object\n */\nexport type OriginalLanguage = string\n/**\n * ABAP language version\n */\nexport type ABAPLanguageVersion = (\"standard\" | \"cloudDevelopment\")\n/**\n * Program ID\n */\nexport type ProgramID = string\n/**\n * Object type\n */\nexport type ObjectType = string\n/**\n * Object name\n */\nexport type ObjectName = string\n/**\n * Service type\n */\nexport type ServiceType = string\n/**\n * Service name\n */\nexport type ServiceName = string\n\n/**\n * Object type SUCO (authorization default variant)\n */\nexport interface AffSucoV1 {\nformatVersion: ABAPFileFormatVersion\nheader: Header\nleadingApplication: LeadingApplication\n}\n/**\n * Header\n */\nexport interface Header {\ndescription: Description\noriginalLanguage: OriginalLanguage\nabapLanguageVersion?: ABAPLanguageVersion\n}\n/**\n * Leading application\n */\nexport interface LeadingApplication {\nprogramId?: ProgramID\nobjectType: ObjectType\nobjectName: ObjectName\nserviceType?: ServiceType\nserviceName?: ServiceName\n}\n\nexport type SucoAff = AffSucoV1;\n","/**\n * Auto-generated from SAP/abap-file-formats JSON schemas.\n * Do not edit — regenerate with `bun scripts/generate-aff-schemas.ts`.\n */\n/**\n * The ABAP file format version\n */\nexport type ABAPFileFormatVersion = \"1\"\n/**\n * Description of the ABAP object\n */\nexport type Description = string\n/**\n * Original language of the ABAP object\n */\nexport type OriginalLanguage = string\n/**\n * ABAP language version\n */\nexport type ABAPLanguageVersion = (\"standard\" | \"cloudDevelopment\")\n/**\n * Application name of authorization defaults\n */\nexport type ApplicationName = string\n/**\n * Type of authorization defaults\n */\nexport type ApplicationType = string\n/**\n * Maintenance mode\n */\nexport type MaintenanceMode = (\"manual\" | \"automatic\" | \"automaticBasisObjects\" | \"noDefaultValues\" | \"deprecated\" | \"obsolete\")\n/**\n * Authorization default documentation for application\n */\nexport type Documentation = string\n/**\n * Name of Authorization Object\n */\nexport type Object = string\n/**\n * Maintenance Status\n */\nexport type MaintenanceStatus = (\"noDefault\" | \"defaultWithValues\" | \"defaultWithoutValues\" | \"inactiveValues\")\n/**\n * Authorization default documentation for object\n */\nexport type Documentation1 = string\n/**\n * Authorization field\n */\nexport type AuthorizationField = string\n/**\n * From value\n */\nexport type From = string\n/**\n * To values\n */\nexport type To = string\n/**\n * Authorization field values\n */\nexport type AuthorizationFieldValues = AuthorizationFieldValues1[]\n/**\n * Authorization objects\n */\nexport type AuthorizationObjects = AuthorizationObjectDetails[]\n\n/**\n * Object type SUSI\n */\nexport interface AffSusiV1 {\nformatVersion: ABAPFileFormatVersion\nheader: Header\ngeneralInformation: GeneralInformation\nauthorizationObjects?: AuthorizationObjects\n}\n/**\n * Header\n */\nexport interface Header {\ndescription: Description\noriginalLanguage: OriginalLanguage\nabapLanguageVersion?: ABAPLanguageVersion\n}\n/**\n * General information\n */\nexport interface GeneralInformation {\napplicationName: ApplicationName\napplicationType: ApplicationType\nmaintenanceMode?: MaintenanceMode\ndocumentation?: Documentation\n}\n/**\n * Details of Authorization object\n */\nexport interface AuthorizationObjectDetails {\nobject: Object\nmaintenanceStatus?: MaintenanceStatus\ndocumentation?: Documentation1\nfields?: AuthorizationFieldValues\n}\n/**\n * Authorization field values\n */\nexport interface AuthorizationFieldValues1 {\nfield?: AuthorizationField\nlow?: From\nhigh?: To\n}\n\nexport type SusiAff = AffSusiV1;\n","/**\n * Auto-generated from SAP/abap-file-formats JSON schemas.\n * Do not edit — regenerate with `bun scripts/generate-aff-schemas.ts`.\n */\n/**\n * Format version\n */\nexport type FormatVersion = \"1\"\n/**\n * Description of the ABAP object\n */\nexport type Description = string\n/**\n * Original language of the ABAP object\n */\nexport type OriginalLanguage = string\n/**\n * ABAP language version\n */\nexport type ABAPLanguageVersion = (\"standard\" | \"keyUser\" | \"cloudDevelopment\")\n/**\n * Software component\n */\nexport type SoftwareComponent = string\n/**\n * The software component grants access permission to the specified software components\n */\nexport type AccessPermissions = AccessPermission[]\n/**\n * Software component\n */\nexport type SoftwareComponent1 = string\n/**\n * The software component depends on the specified software components\n */\nexport type Dependencies = Dependency[]\n\n/**\n * Software component relations\n */\nexport interface AffSwcrV1 {\nformatVersion: FormatVersion\nheader: Header\npermissions?: AccessPermissions\ndependencies?: Dependencies\n}\n/**\n * Header\n */\nexport interface Header {\ndescription: Description\noriginalLanguage: OriginalLanguage\nabapLanguageVersion?: ABAPLanguageVersion\n}\n/**\n * Access permission\n */\nexport interface AccessPermission {\nsoftwareComponent: SoftwareComponent\n}\n/**\n * Dependency\n */\nexport interface Dependency {\nsoftwareComponent: SoftwareComponent1\n}\n\nexport type SwcrAff = AffSwcrV1;\n","/**\n * Auto-generated from SAP/abap-file-formats JSON schemas.\n * Do not edit — regenerate with `bun scripts/generate-aff-schemas.ts`.\n */\n/**\n * Format version\n */\nexport type FormatVersion = \"1\"\n/**\n * Description of the ABAP object\n */\nexport type Description = string\n/**\n * Original language of the ABAP object\n */\nexport type OriginalLanguage = string\n/**\n * Extension include with persisted custom fields\n */\nexport type ExtensionInclude = string\n/**\n * Structure with application data\n */\nexport type ApplicationDataStructure = string\n/**\n * Abstract entity with ui definition\n */\nexport type UIExtensionEntity = string\n/**\n * Name of transaction code\n */\nexport type Name = string\n/**\n * Transaction codes of extensible application\n */\nexport type TransactionCodes = TransactionCodes1[]\n\n/**\n * SAP GUI extension point for developer extensibility\n */\nexport interface AffSxtgV1 {\nformatVersion: FormatVersion\nheader: Header\ngeneralInformation?: GeneralInformation\ntransactionCodes?: TransactionCodes\n}\n/**\n * Header\n */\nexport interface Header {\ndescription: Description\noriginalLanguage: OriginalLanguage\n}\n/**\n * General information\n */\nexport interface GeneralInformation {\nextensionInclude: ExtensionInclude\napplicationDataStructure: ApplicationDataStructure\nuiExtensionEntity: UIExtensionEntity\n}\n/**\n * Transaction codes\n */\nexport interface TransactionCodes1 {\nname?: Name\n}\n\nexport type SxtgAff = AffSxtgV1;\n","/**\n * Auto-generated from SAP/abap-file-formats JSON schemas.\n * Do not edit — regenerate with `bun scripts/generate-aff-schemas.ts`.\n */\n/**\n * Format version\n */\nexport type FormatVersion = \"1\"\n/**\n * Description of the ABAP object\n */\nexport type Description = string\n/**\n * Original language of the ABAP object\n */\nexport type OriginalLanguage = string\n/**\n * ABAP language version\n */\nexport type ABAPLanguageVersion = (\"standard\" | \"keyUser\" | \"cloudDevelopment\")\n/**\n * Application type\n */\nexport type ApplicationType = (\"transaction\" | \"webDynpro\" | \"webClient\" | \"ui5\" | \"legacyUi5\" | \"url\" | \"tileOnly\" | \"urlTemplate\")\n/**\n * Technical catalog\n */\nexport type TechnicalCatalog = string\n/**\n * SAP Fiori ID\n */\nexport type SAPFioriID = string\n/**\n * Transaction code\n */\nexport type TransactionCode = string\n/**\n * Target mapping information\n */\nexport type TargetMappingInformation = string\n/**\n * Application component (ACH)\n */\nexport type ApplicationComponentACH = string\n/**\n * Suppress tiles\n */\nexport type SuppressTiles = boolean\n/**\n * SAPUI5 Component ID\n */\nexport type SAPUI5ComponentID = string\n/**\n * ICF path\n */\nexport type ICFPath = string\n/**\n * Web Dynpro application\n */\nexport type WebDynproApplication = string\n/**\n * Application configuration\n */\nexport type ApplicationConfiguration = string\n/**\n * Flavor ID (deprecated)\n */\nexport type FlavorID = string\n/**\n * Integration mode (deprecated)\n */\nexport type IntegrationMode = (\"systemDefault\" | \"direct\" | \"compatible\")\n/**\n * Compatibility mode (deprecated)\n */\nexport type CompatibilityMode = boolean\n/**\n * Target ID\n */\nexport type TargetID = string\n/**\n * URL template\n */\nexport type URLTemplate = string\n/**\n * Parameter name\n */\nexport type Name = string\n/**\n * Parameter value\n */\nexport type Value = string\n/**\n * URL template parameters\n */\nexport type URLTemplateParameters = URLTemplateParameter[]\n/**\n * Target mapping ID\n */\nexport type TargetMappingID = string\n/**\n * Semantic object of the target mapping\n */\nexport type SemanticObject = string\n/**\n * Action of the target mapping\n */\nexport type Action = string\n/**\n * Target URL used for apps of type 'Tile Only' and 'URL Application'\n */\nexport type TargetURL = string\n/**\n * System alias\n */\nexport type SystemAlias = string\n/**\n * Desktop is supported as device type\n */\nexport type Desktop = boolean\n/**\n * Tablet is supported as device type\n */\nexport type Tablet = boolean\n/**\n * Phone is supported as device type\n */\nexport type Phone = boolean\n/**\n * Parameter name\n */\nexport type ParameterName = string\n/**\n * Parameter in target application\n */\nexport type ParameterInTargetApplication = string\n/**\n * Default value\n */\nexport type DefaultValue = string\n/**\n * Filter value\n */\nexport type FilterValue = string\n/**\n * Filter type\n */\nexport type FilterType = (\"plain\" | \"regex\")\n/**\n * Whether the parameter is required\n */\nexport type Required = boolean\n/**\n * Navigation parameters of the target mapping\n */\nexport type NavigationParameters = NavigationParameter[]\n/**\n * How additional parameters are handled\n */\nexport type AdditionalParameterHandling = (\"allowed\" | \"ignored\" | \"notAllowed\")\n/**\n * Tile ID\n */\nexport type ID = string\n/**\n * Tile type\n */\nexport type TileType = (\"static\" | \"dynamic\" | \"custom\")\n/**\n * Tile is chosen by default\n */\nexport type IsDefaultTile = boolean\n/**\n * Tile is stored as legacy tile\n */\nexport type IsLegacyTile = boolean\n/**\n * Reuse text defined as part of the app\n */\nexport type ReuseTextFromApplication = boolean\n/**\n * Tile title\n */\nexport type Title = string\n/**\n * Tile subtitle\n */\nexport type Subtitle = string\n/**\n * Tile information\n */\nexport type Information = string\n/**\n * Tile keywords\n */\nexport type Keywords = string\n/**\n * Tile icon\n */\nexport type Icon = string\n/**\n * Service URL\n */\nexport type ServiceURL = string\n/**\n * Service path\n */\nexport type ServicePath = string\n/**\n * Duration until the tile is refreshed\n */\nexport type RefreshInterval = number\n/**\n * Number unit\n */\nexport type NumberUnit = string\n/**\n * Parameter name\n */\nexport type Name1 = string\n/**\n * Parameter value\n */\nexport type Value1 = string\n/**\n * Tile navigation parameters\n */\nexport type TileNavigationParameters = TileNavigationParameter[]\n/**\n * Base CHIP\n */\nexport type BaseCHIP = string\n/**\n * Configuration string of the CHIP\n */\nexport type Configuration = string\n/**\n * Bag ID\n */\nexport type BagID = string\n/**\n * Property name\n */\nexport type Name2 = string\n/**\n * Property value\n */\nexport type Value2 = string\n/**\n * Property is translatable\n */\nexport type Translatable = boolean\n/**\n * These Bags are available in the Javascript Frontend via the CHIP API \"bag\" Contract\n */\nexport type BagProperties = CHIPBagProperty[]\n/**\n * Tiles\n */\nexport type Tiles = TileDetails[]\n/**\n * Life cycle status\n */\nexport type Status = (\"active\" | \"deprecated\" | \"obsolete\")\n/**\n * LADI of the successor application\n */\nexport type Successor = string\n\n/**\n * Launchpad application descriptor item (LADI)\n */\nexport interface AffUiadV1 {\nformatVersion: FormatVersion\nheader: Header\ngeneralInformation: GeneralInformation\nui5AppDetails?: SAPUI5ApplicationInformation\nwebDynproAppDetails?: WebDynproApplicationInformation\nwebClientAppDetails?: WebClientApplicationInformation\nurlTemplateAppDetails?: URLTemplateApplicationInformation\nnavigation: NavigationInformation\ntiles: Tiles\nlifeCycle?: LifeCycle\n}\n/**\n * Header\n */\nexport interface Header {\ndescription: Description\noriginalLanguage: OriginalLanguage\nabapLanguageVersion?: ABAPLanguageVersion\n}\n/**\n * General information\n */\nexport interface GeneralInformation {\nappType: ApplicationType\ncatalogId: TechnicalCatalog\nfioriId?: SAPFioriID\ntransaction?: TransactionCode\ninformation?: TargetMappingInformation\nsupportComponent?: ApplicationComponentACH\nsuppressTiles?: SuppressTiles\n}\n/**\n * SAPUI5 application information\n */\nexport interface SAPUI5ApplicationInformation {\nappId: SAPUI5ComponentID\nicfPath?: ICFPath\n}\n/**\n * Web Dynpro application information\n */\nexport interface WebDynproApplicationInformation {\nappId: WebDynproApplication\nconfigId?: ApplicationConfiguration\nflavorId?: FlavorID\nintegrationMode?: IntegrationMode\ncompatibilityMode?: CompatibilityMode\n}\n/**\n * Web Client application information\n */\nexport interface WebClientApplicationInformation {\ntargetId: TargetID\n}\n/**\n * URL Template application information\n */\nexport interface URLTemplateApplicationInformation {\ntemplateId: URLTemplate\nparameters?: URLTemplateParameters\n}\n/**\n * URL template parameter\n */\nexport interface URLTemplateParameter {\nname: Name\nvalue?: Value\n}\n/**\n * Navigation information\n */\nexport interface NavigationInformation {\ntargetMappingId: TargetMappingID\nsemanticObject: SemanticObject\naction: Action\ntargetUrl?: TargetURL\nsystemAlias?: SystemAlias\ndesktop?: Desktop\ntablet?: Tablet\nphone?: Phone\nparameters?: NavigationParameters\nadditionalParameterHandling?: AdditionalParameterHandling\n}\n/**\n * Navigation parameter\n */\nexport interface NavigationParameter {\nname: ParameterName\nrenameTo?: ParameterInTargetApplication\ndefaultValue?: DefaultValue\nfilterValue?: FilterValue\nfilterType?: FilterType\nrequired?: Required\n}\n/**\n * Details of a tile\n */\nexport interface TileDetails {\nid: ID\ntileType: TileType\nisDefault?: IsDefaultTile\nisLegacy?: IsLegacyTile\nstandard?: StandardDetails\ncustom?: CustomDetails\n}\n/**\n * Standard tile details\n */\nexport interface StandardDetails {\nreuseTextFromApp?: ReuseTextFromApplication\ntitle: Title\nsubtitle?: Subtitle\ninformation?: Information\nkeywords?: Keywords\nicon?: Icon\ndynamic?: DynamicTileDetails\ntileNavigationParameters?: TileNavigationParameters\n}\n/**\n * Dynamic tile details\n */\nexport interface DynamicTileDetails {\nserviceBaseUrl?: ServiceURL\nservicePath?: ServicePath\nrefreshInterval?: RefreshInterval\nnumberUnit?: NumberUnit\n}\n/**\n * Tile navigation parameter\n */\nexport interface TileNavigationParameter {\nname: Name1\nvalue?: Value1\n}\n/**\n * Custom tile details\n */\nexport interface CustomDetails {\nbaseChipId?: BaseCHIP\nconfiguration?: Configuration\nbagProperties?: BagProperties\n}\n/**\n * Property of a CHIP bag\n */\nexport interface CHIPBagProperty {\nbagId: BagID\nname: Name2\nvalue?: Value2\ntranslatable?: Translatable\n}\n/**\n * Life cycle\n */\nexport interface LifeCycle {\nstatus?: Status\nsuccessor?: Successor\n}\n\nexport type UiadAff = AffUiadV1;\n","/**\n * Auto-generated from SAP/abap-file-formats JSON schemas.\n * Do not edit — regenerate with `bun scripts/generate-aff-schemas.ts`.\n */\n/**\n * Format version\n */\nexport type FormatVersion = \"2\"\n/**\n * Description of the ABAP object\n */\nexport type Description = string\n/**\n * Original language of the ABAP object\n */\nexport type OriginalLanguage = string\n/**\n * ABAP language version\n */\nexport type ABAPLanguageVersion = (\"standard\" | \"keyUser\" | \"cloudDevelopment\")\n/**\n * Application type\n */\nexport type ApplicationType = (\"transaction\" | \"webDynpro\" | \"webClient\" | \"ui5\" | \"legacyUi5\" | \"url\" | \"tileOnly\" | \"urlTemplate\")\n/**\n * Technical catalog\n */\nexport type TechnicalCatalog = string\n/**\n * SAP Fiori ID\n */\nexport type SAPFioriID = string\n/**\n * Transaction code\n */\nexport type TransactionCode = string\n/**\n * Target mapping information\n */\nexport type TargetMappingInformation = string\n/**\n * Application component (ACH)\n */\nexport type ApplicationComponentACH = string\n/**\n * Suppress tiles\n */\nexport type SuppressTiles = boolean\n/**\n * Target mapping title (smart link)\n */\nexport type TargetMappingTitle = string\n/**\n * SAPUI5 Component ID\n */\nexport type SAPUI5ComponentID = string\n/**\n * ICF path\n */\nexport type ICFPath = string\n/**\n * Web Dynpro application\n */\nexport type WebDynproApplication = string\n/**\n * Application configuration\n */\nexport type ApplicationConfiguration = string\n/**\n * Flavor ID (deprecated)\n */\nexport type FlavorID = string\n/**\n * Integration mode (deprecated)\n */\nexport type IntegrationMode = (\"systemDefault\" | \"direct\" | \"compatible\")\n/**\n * Compatibility mode (deprecated)\n */\nexport type CompatibilityMode = boolean\n/**\n * Target ID\n */\nexport type TargetID = string\n/**\n * URL template\n */\nexport type URLTemplate = string\n/**\n * Parameter name\n */\nexport type Name = string\n/**\n * Parameter value\n */\nexport type Value = string\n/**\n * URL template parameters\n */\nexport type URLTemplateParameters = URLTemplateParameter[]\n/**\n * Target mapping ID\n */\nexport type TargetMappingID = string\n/**\n * Semantic object of the target mapping\n */\nexport type SemanticObject = string\n/**\n * Action of the target mapping\n */\nexport type Action = string\n/**\n * Target URL used for apps of type 'Tile Only' and 'URL Application'\n */\nexport type TargetURL = string\n/**\n * System alias\n */\nexport type SystemAlias = string\n/**\n * Desktop is supported as device type\n */\nexport type Desktop = boolean\n/**\n * Tablet is supported as device type\n */\nexport type Tablet = boolean\n/**\n * Phone is supported as device type\n */\nexport type Phone = boolean\n/**\n * Parameter name\n */\nexport type ParameterName = string\n/**\n * Parameter in target application\n */\nexport type ParameterInTargetApplication = string\n/**\n * Default value\n */\nexport type DefaultValue = string\n/**\n * Filter value\n */\nexport type FilterValue = string\n/**\n * Filter type\n */\nexport type FilterType = (\"plain\" | \"regex\")\n/**\n * Whether the parameter is required\n */\nexport type Required = boolean\n/**\n * Navigation parameters of the target mapping\n */\nexport type NavigationParameters = NavigationParameter[]\n/**\n * How additional parameters are handled\n */\nexport type AdditionalParameterHandling = (\"allowed\" | \"ignored\" | \"notAllowed\")\n/**\n * Tile ID\n */\nexport type ID = string\n/**\n * Tile type\n */\nexport type TileType = (\"static\" | \"dynamic\" | \"custom\")\n/**\n * Tile is chosen by default\n */\nexport type IsDefaultTile = boolean\n/**\n * Tile is stored as legacy tile\n */\nexport type IsLegacyTile = boolean\n/**\n * Reuse text defined as part of the app\n */\nexport type ReuseTextFromApplication = boolean\n/**\n * Tile title\n */\nexport type Title = string\n/**\n * Tile subtitle\n */\nexport type Subtitle = string\n/**\n * Tile information\n */\nexport type Information = string\n/**\n * Tile keywords\n */\nexport type Keywords = string\n/**\n * Tile icon\n */\nexport type Icon = string\n/**\n * Service URL\n */\nexport type ServiceURL = string\n/**\n * Service path\n */\nexport type ServicePath = string\n/**\n * Duration until the tile is refreshed\n */\nexport type RefreshInterval = number\n/**\n * Number unit\n */\nexport type NumberUnit = string\n/**\n * Parameter name\n */\nexport type Name1 = string\n/**\n * Parameter value\n */\nexport type Value1 = string\n/**\n * Tile navigation parameters\n */\nexport type TileNavigationParameters = TileNavigationParameter[]\n/**\n * Base CHIP\n */\nexport type BaseCHIP = string\n/**\n * Configuration string of the CHIP\n */\nexport type Configuration = string\n/**\n * Bag ID\n */\nexport type BagID = string\n/**\n * Property name\n */\nexport type Name2 = string\n/**\n * Property value\n */\nexport type Value2 = string\n/**\n * Property is translatable\n */\nexport type Translatable = boolean\n/**\n * These Bags are available in the Javascript Frontend via the CHIP API \"bag\" Contract\n */\nexport type BagProperties = CHIPBagProperty[]\n/**\n * Tiles\n */\nexport type Tiles = TileDetails[]\n/**\n * Life cycle status\n */\nexport type Status = (\"active\" | \"deprecated\" | \"obsolete\")\n/**\n * LADI of the successor application\n */\nexport type Successor = string\n\n/**\n * Launchpad application descriptor item (LADI)\n */\nexport interface AffUiadV2 {\nformatVersion: FormatVersion\nheader: Header\ngeneralInformation: GeneralInformation\nui5AppDetails?: SAPUI5ApplicationInformation\nwebDynproAppDetails?: WebDynproApplicationInformation\nwebClientAppDetails?: WebClientApplicationInformation\nurlTemplateAppDetails?: URLTemplateApplicationInformation\nnavigation: NavigationInformation\ntiles: Tiles\nlifeCycle?: LifeCycle\n}\n/**\n * Header\n */\nexport interface Header {\ndescription: Description\noriginalLanguage: OriginalLanguage\nabapLanguageVersion?: ABAPLanguageVersion\n}\n/**\n * General information\n */\nexport interface GeneralInformation {\nappType: ApplicationType\ncatalogId: TechnicalCatalog\nfioriId?: SAPFioriID\ntransaction?: TransactionCode\ninformation?: TargetMappingInformation\nsupportComponent?: ApplicationComponentACH\nsuppressTiles?: SuppressTiles\ntargetMappingTitle?: TargetMappingTitle\n}\n/**\n * SAPUI5 application information\n */\nexport interface SAPUI5ApplicationInformation {\nappId: SAPUI5ComponentID\nicfPath?: ICFPath\n}\n/**\n * Web Dynpro application information\n */\nexport interface WebDynproApplicationInformation {\nappId: WebDynproApplication\nconfigId?: ApplicationConfiguration\nflavorId?: FlavorID\nintegrationMode?: IntegrationMode\ncompatibilityMode?: CompatibilityMode\n}\n/**\n * Web Client application information\n */\nexport interface WebClientApplicationInformation {\ntargetId: TargetID\n}\n/**\n * URL Template application information\n */\nexport interface URLTemplateApplicationInformation {\ntemplateId: URLTemplate\nparameters?: URLTemplateParameters\n}\n/**\n * URL template parameter\n */\nexport interface URLTemplateParameter {\nname: Name\nvalue?: Value\n}\n/**\n * Navigation information\n */\nexport interface NavigationInformation {\ntargetMappingId: TargetMappingID\nsemanticObject: SemanticObject\naction: Action\ntargetUrl?: TargetURL\nsystemAlias?: SystemAlias\ndesktop?: Desktop\ntablet?: Tablet\nphone?: Phone\nparameters?: NavigationParameters\nadditionalParameterHandling?: AdditionalParameterHandling\n}\n/**\n * Navigation parameter\n */\nexport interface NavigationParameter {\nname: ParameterName\nrenameTo?: ParameterInTargetApplication\ndefaultValue?: DefaultValue\nfilterValue?: FilterValue\nfilterType?: FilterType\nrequired?: Required\n}\n/**\n * Details of a tile\n */\nexport interface TileDetails {\nid: ID\ntileType: TileType\nisDefault?: IsDefaultTile\nisLegacy?: IsLegacyTile\nstandard?: StandardDetails\ncustom?: CustomDetails\n}\n/**\n * Standard tile details\n */\nexport interface StandardDetails {\nreuseTextFromApp?: ReuseTextFromApplication\ntitle: Title\nsubtitle?: Subtitle\ninformation?: Information\nkeywords?: Keywords\nicon?: Icon\ndynamic?: DynamicTileDetails\ntileNavigationParameters?: TileNavigationParameters\n}\n/**\n * Dynamic tile details\n */\nexport interface DynamicTileDetails {\nserviceBaseUrl?: ServiceURL\nservicePath?: ServicePath\nrefreshInterval?: RefreshInterval\nnumberUnit?: NumberUnit\n}\n/**\n * Tile navigation parameter\n */\nexport interface TileNavigationParameter {\nname: Name1\nvalue?: Value1\n}\n/**\n * Custom tile details\n */\nexport interface CustomDetails {\nbaseChipId?: BaseCHIP\nconfiguration?: Configuration\nbagProperties?: BagProperties\n}\n/**\n * Property of a CHIP bag\n */\nexport interface CHIPBagProperty {\nbagId: BagID\nname: Name2\nvalue?: Value2\ntranslatable?: Translatable\n}\n/**\n * Life cycle\n */\nexport interface LifeCycle {\nstatus?: Status\nsuccessor?: Successor\n}\n\nexport type UiadAff = AffUiadV2;\n","/**\n * Auto-generated from SAP/abap-file-formats JSON schemas.\n * Do not edit — regenerate with `bun scripts/generate-aff-schemas.ts`.\n */\n/**\n * Format version\n */\nexport type FormatVersion = \"1\"\n/**\n * Description of the ABAP object\n */\nexport type Description = string\n/**\n * Original language of the ABAP object\n */\nexport type OriginalLanguage = string\n/**\n * ABAP language version\n */\nexport type ABAPLanguageVersion = (\"standard\" | \"cloudDevelopment\")\n/**\n * Title visible to the enduser\n */\nexport type Title = string\n/**\n * At runtime page templates are merged based on the merge ID\n */\nexport type MergeID = string\n/**\n * Technical ID of the section. The personalization of the launchpad is based on this ID.\n */\nexport type ID = string\n/**\n * Section title on the launchpad UI\n */\nexport type Title1 = string\n/**\n * Technical Id of the visualization. The personalization of the launchpad is based on this ID.\n */\nexport type ID1 = string\n/**\n * Type of application/visualization assignment\n */\nexport type Type = (\"ladiAssignment\" | \"tileAssignment\")\n/**\n * Tile format for UI rendering. May not be applicable for all kinds of visualization.\n */\nexport type DisplayFormat = (\"standard\" | \"wide\" | \"flat\" | \"flatWide\" | \"link\")\n/**\n * Catalog ID\n */\nexport type CatalogID = string\n/**\n * Catalog type\n */\nexport type CatalogType = string\n/**\n * Catalog Item ID\n */\nexport type CatalogItemID = string\n/**\n * Catalog ID\n */\nexport type CatalogID1 = string\n/**\n * Catalog type\n */\nexport type CatalogType1 = string\n/**\n * Catalog Item ID\n */\nexport type CatalogItemID1 = string\n/**\n * ID of a launchpad app descriptor item\n */\nexport type LaunchpadAppDescriptorItemID = string\n/**\n * ID of a tile in the the referenced Launchpad App Descriptor Item\n */\nexport type TileID = string\n/**\n * Visualizations represent applications on the launchpad UI\n */\nexport type Visualizations = Visualization[]\n/**\n * Sections make up a grouping of applications on the launchpad UI\n */\nexport type Sections = Section[]\n\n/**\n * Launchpad page template\n */\nexport interface AffUipgV1 {\nformatVersion: FormatVersion\nheader: Header\ngeneralInformation: GeneralInformation\nsections?: Sections\n}\n/**\n * Header\n */\nexport interface Header {\ndescription: Description\noriginalLanguage: OriginalLanguage\nabapLanguageVersion?: ABAPLanguageVersion\n}\n/**\n * General information\n */\nexport interface GeneralInformation {\ntitle: Title\nmergeId?: MergeID\n}\n/**\n * Sections make up a grouping of applications on the launchpad UI\n */\nexport interface Section {\nid: ID\ntitle?: Title1\nvisualizations?: Visualizations\n}\n/**\n * Visualizations represent applications on the launchpad UI\n */\nexport interface Visualization {\nid: ID1\ntype?: Type\ndisplayFormat?: DisplayFormat\ntileAssignment?: TileAssignment\nladiAssignment?: LaunchpadAppDescriptorItemAssignment\n}\n/**\n * Assignment of a launchpad catalog tile\n */\nexport interface TileAssignment {\ntileKey: TileKey\ntargetMappingKey?: TargetMappingKey\n}\n/**\n * Tile key\n */\nexport interface TileKey {\ncatalogId: CatalogID\ncatalogType?: CatalogType\nid: CatalogItemID\n}\n/**\n * Target mapping key\n */\nexport interface TargetMappingKey {\ncatalogId: CatalogID1\ncatalogType?: CatalogType1\nid: CatalogItemID1\n}\n/**\n * Assignment of a launchpad app descriptor item\n */\nexport interface LaunchpadAppDescriptorItemAssignment {\nladiId: LaunchpadAppDescriptorItemID\ntileId: TileID\n}\n\nexport type UipgAff = AffUipgV1;\n","/**\n * Auto-generated from SAP/abap-file-formats JSON schemas.\n * Do not edit — regenerate with `bun scripts/generate-aff-schemas.ts`.\n */\n/**\n * Format version\n */\nexport type FormatVersion = \"1\"\n/**\n * Description of the ABAP object\n */\nexport type Description = string\n/**\n * Original language of the ABAP object\n */\nexport type OriginalLanguage = string\n/**\n * ABAP language version\n */\nexport type ABAPLanguageVersion = (\"standard\" | \"cloudDevelopment\")\n/**\n * Title on SAP Fiori launchpad\n */\nexport type TitleOnLaunchpad = string\n/**\n * Sort priority\n */\nexport type SortPriority = number\n/**\n * Merge ID\n */\nexport type MergeID = string\n/**\n * Name of the page template\n */\nexport type Name = string\n/**\n * Assigned launchpad page templates\n */\nexport type LaunchpadPageTemplates = LaunchpadPageTemplate[]\n\n/**\n * Launchpad space template\n */\nexport interface AffUistV1 {\nformatVersion: FormatVersion\nheader: Header\ngeneralInformation: GeneralInformation\npages?: LaunchpadPageTemplates\n}\n/**\n * Header\n */\nexport interface Header {\ndescription: Description\noriginalLanguage: OriginalLanguage\nabapLanguageVersion?: ABAPLanguageVersion\n}\n/**\n * General information\n */\nexport interface GeneralInformation {\ntitle: TitleOnLaunchpad\nsortPriority?: SortPriority\nmergeId?: MergeID\n}\n/**\n * Launchpad page template\n */\nexport interface LaunchpadPageTemplate {\nname: Name\n}\n\nexport type UistAff = AffUistV1;\n","/**\n * Auto-generated from SAP/abap-file-formats JSON schemas.\n * Do not edit — regenerate with `bun scripts/generate-aff-schemas.ts`.\n */\n\nexport * as AdvcV1 from './advc-v1.js';\nexport * as AifaV1 from './aifa-v1.js';\nexport * as AifdV1 from './aifd-v1.js';\nexport * as AiffV1 from './aiff-v1.js';\nexport * as AifiV1 from './aifi-v1.js';\nexport * as AifnV1 from './aifn-v1.js';\nexport * as AifpV1 from './aifp-v1.js';\nexport * as AifrV1 from './aifr-v1.js';\nexport * as AobjV1 from './aobj-v1.js';\nexport * as ApicV1 from './apic-v1.js';\nexport * as AploV1 from './aplo-v1.js';\nexport * as ApobV1 from './apob-v1.js';\nexport * as BdefV1 from './bdef-v1.js';\nexport * as BgqcV1 from './bgqc-v1.js';\nexport * as CdboV1 from './cdbo-v1.js';\nexport * as CfdfV1 from './cfdf-v1.js';\nexport * as CfdfV2 from './cfdf-v2.js';\nexport * as ChdoV1 from './chdo-v1.js';\nexport * as ChkcV1 from './chkc-v1.js';\nexport * as ChkoV1 from './chko-v1.js';\nexport * as ChkvV1 from './chkv-v1.js';\nexport * as ClasV1 from './clas-v1.js';\nexport * as CotaV1 from './cota-v1.js';\nexport * as CsnmV1 from './csnm-v1.js';\nexport * as DcatV1 from './dcat-v1.js';\nexport * as DclsV1 from './dcls-v1.js';\nexport * as DdlaV1 from './ddla-v1.js';\nexport * as DdlsV1 from './ddls-v1.js';\nexport * as DdlxV1 from './ddlx-v1.js';\nexport * as DesdV1 from './desd-v1.js';\nexport * as DmonV1 from './dmon-v1.js';\nexport * as DobjV1 from './dobj-v1.js';\nexport * as DocuV1 from './docu-v1.js';\nexport * as DomaV1 from './doma-v1.js';\nexport * as DrasV1 from './dras-v1.js';\nexport * as DrtyV1 from './drty-v1.js';\nexport * as DsfdV1 from './dsfd-v1.js';\nexport * as DsfiV1 from './dsfi-v1.js';\nexport * as DtdcV1 from './dtdc-v1.js';\nexport * as DtebV1 from './dteb-v1.js';\nexport * as DtelV1 from './dtel-v1.js';\nexport * as DtixV1 from './dtix-v1.js';\nexport * as DtscV1 from './dtsc-v1.js';\nexport * as EdccV1 from './edcc-v1.js';\nexport * as EdckV1 from './edck-v1.js';\nexport * as EdcrV1 from './edcr-v1.js';\nexport * as EdoiV1 from './edoi-v1.js';\nexport * as EeecV1 from './eeec-v1.js';\nexport * as EnhoV1 from './enho-v1.js';\nexport * as EnhsV1 from './enhs-v1.js';\nexport * as EnquV1 from './enqu-v1.js';\nexport * as EvtbV1 from './evtb-v1.js';\nexport * as EvtoV1 from './evto-v1.js';\nexport * as FugrV1 from './fugr-v1.js';\nexport * as FuncV1 from './func-v1.js';\nexport * as GsmpV1 from './gsmp-v1.js';\nexport * as HttpV1 from './http-v1.js';\nexport * as IlmbV1 from './ilmb-v1.js';\nexport * as IntfV1 from './intf-v1.js';\nexport * as IntmV1 from './intm-v1.js';\nexport * as IntsV1 from './ints-v1.js';\nexport * as IwngV1 from './iwng-v1.js';\nexport * as MsagV1 from './msag-v1.js';\nexport * as NontV1 from './nont-v1.js';\nexport * as NrobV1 from './nrob-v1.js';\nexport * as NttaV1 from './ntta-v1.js';\nexport * as NttyV1 from './ntty-v1.js';\nexport * as ProgV1 from './prog-v1.js';\nexport * as RepsV1 from './reps-v1.js';\nexport * as RontV1 from './ront-v1.js';\nexport * as RvbcV1 from './rvbc-v1.js';\nexport * as SaiaV1 from './saia-v1.js';\nexport * as SajcV1 from './sajc-v1.js';\nexport * as SajtV1 from './sajt-v1.js';\nexport * as Scp1V1 from './scp1-v1.js';\nexport * as SfpfV1 from './sfpf-v1.js';\nexport * as SiadV1 from './siad-v1.js';\nexport * as SitoV1 from './sito-v1.js';\nexport * as SitoV2 from './sito-v2.js';\nexport * as SmbcV1 from './smbc-v1.js';\nexport * as SmtgV1 from './smtg-v1.js';\nexport * as SprvV1 from './sprv-v1.js';\nexport * as SrvbV1 from './srvb-v1.js';\nexport * as SrvcV1 from './srvc-v1.js';\nexport * as SrvdV1 from './srvd-v1.js';\nexport * as SucoV1 from './suco-v1.js';\nexport * as SusiV1 from './susi-v1.js';\nexport * as SwcrV1 from './swcr-v1.js';\nexport * as SxtgV1 from './sxtg-v1.js';\nexport * as UiadV1 from './uiad-v1.js';\nexport * as UiadV2 from './uiad-v2.js';\nexport * as UipgV1 from './uipg-v1.js';\nexport * as UistV1 from './uist-v1.js';\n\n// Flat {Type}Aff aliases — latest version per type (handler imports).\nexport type { AdvcAff } from './advc-v1.js';\nexport type { AifaAff } from './aifa-v1.js';\nexport type { AifdAff } from './aifd-v1.js';\nexport type { AiffAff } from './aiff-v1.js';\nexport type { AifiAff } from './aifi-v1.js';\nexport type { AifnAff } from './aifn-v1.js';\nexport type { AifpAff } from './aifp-v1.js';\nexport type { AifrAff } from './aifr-v1.js';\nexport type { AobjAff } from './aobj-v1.js';\nexport type { ApicAff } from './apic-v1.js';\nexport type { AploAff } from './aplo-v1.js';\nexport type { ApobAff } from './apob-v1.js';\nexport type { BdefAff } from './bdef-v1.js';\nexport type { BgqcAff } from './bgqc-v1.js';\nexport type { CdboAff } from './cdbo-v1.js';\nexport type { CfdfAff } from './cfdf-v2.js';\nexport type { ChdoAff } from './chdo-v1.js';\nexport type { ChkcAff } from './chkc-v1.js';\nexport type { ChkoAff } from './chko-v1.js';\nexport type { ChkvAff } from './chkv-v1.js';\nexport type { ClasAff } from './clas-v1.js';\nexport type { CotaAff } from './cota-v1.js';\nexport type { CsnmAff } from './csnm-v1.js';\nexport type { DcatAff } from './dcat-v1.js';\nexport type { DclsAff } from './dcls-v1.js';\nexport type { DdlaAff } from './ddla-v1.js';\nexport type { DdlsAff } from './ddls-v1.js';\nexport type { DdlxAff } from './ddlx-v1.js';\nexport type { DesdAff } from './desd-v1.js';\nexport type { DmonAff } from './dmon-v1.js';\nexport type { DobjAff } from './dobj-v1.js';\nexport type { DocuAff } from './docu-v1.js';\nexport type { DomaAff } from './doma-v1.js';\nexport type { DrasAff } from './dras-v1.js';\nexport type { DrtyAff } from './drty-v1.js';\nexport type { DsfdAff } from './dsfd-v1.js';\nexport type { DsfiAff } from './dsfi-v1.js';\nexport type { DtdcAff } from './dtdc-v1.js';\nexport type { DtebAff } from './dteb-v1.js';\nexport type { DtelAff } from './dtel-v1.js';\nexport type { DtixAff } from './dtix-v1.js';\nexport type { DtscAff } from './dtsc-v1.js';\nexport type { EdccAff } from './edcc-v1.js';\nexport type { EdckAff } from './edck-v1.js';\nexport type { EdcrAff } from './edcr-v1.js';\nexport type { EdoiAff } from './edoi-v1.js';\nexport type { EeecAff } from './eeec-v1.js';\nexport type { EnhoAff } from './enho-v1.js';\nexport type { EnhsAff } from './enhs-v1.js';\nexport type { EnquAff } from './enqu-v1.js';\nexport type { EvtbAff } from './evtb-v1.js';\nexport type { EvtoAff } from './evto-v1.js';\nexport type { FugrAff } from './fugr-v1.js';\nexport type { FuncAff } from './func-v1.js';\nexport type { GsmpAff } from './gsmp-v1.js';\nexport type { HttpAff } from './http-v1.js';\nexport type { IlmbAff } from './ilmb-v1.js';\nexport type { IntfAff } from './intf-v1.js';\nexport type { IntmAff } from './intm-v1.js';\nexport type { IntsAff } from './ints-v1.js';\nexport type { IwngAff } from './iwng-v1.js';\nexport type { MsagAff } from './msag-v1.js';\nexport type { NontAff } from './nont-v1.js';\nexport type { NrobAff } from './nrob-v1.js';\nexport type { NttaAff } from './ntta-v1.js';\nexport type { NttyAff } from './ntty-v1.js';\nexport type { ProgAff } from './prog-v1.js';\nexport type { RepsAff } from './reps-v1.js';\nexport type { RontAff } from './ront-v1.js';\nexport type { RvbcAff } from './rvbc-v1.js';\nexport type { SaiaAff } from './saia-v1.js';\nexport type { SajcAff } from './sajc-v1.js';\nexport type { SajtAff } from './sajt-v1.js';\nexport type { Scp1Aff } from './scp1-v1.js';\nexport type { SfpfAff } from './sfpf-v1.js';\nexport type { SiadAff } from './siad-v1.js';\nexport type { SitoAff } from './sito-v2.js';\nexport type { SmbcAff } from './smbc-v1.js';\nexport type { SmtgAff } from './smtg-v1.js';\nexport type { SprvAff } from './sprv-v1.js';\nexport type { SrvbAff } from './srvb-v1.js';\nexport type { SrvcAff } from './srvc-v1.js';\nexport type { SrvdAff } from './srvd-v1.js';\nexport type { SucoAff } from './suco-v1.js';\nexport type { SusiAff } from './susi-v1.js';\nexport type { SwcrAff } from './swcr-v1.js';\nexport type { SxtgAff } from './sxtg-v1.js';\nexport type { UiadAff } from './uiad-v2.js';\nexport type { UipgAff } from './uipg-v1.js';\nexport type { UistAff } from './uist-v1.js';\n","/**\n * @abapify/adt-plugin-gcts — gCTS / AFF format plugin entry point.\n *\n * Importing this module self-registers the plugin into the global\n * `FormatPlugin` registry so that `--format gcts` becomes available\n * throughout the `adt` CLI.\n */\n\nimport { registerFormatPlugin } from '@abapify/adt-plugin';\nimport { gctsFormatPlugin } from './lib/format/gcts-format';\n\n// Self-register on module load. Idempotent — safe against dual module-graph\n// evaluation (the same guard abapGit uses).\nregisterFormatPlugin(gctsFormatPlugin);\n\n// Register 'aff' as an alias for the same plugin so `getFormatPlugin('aff')`\n// resolves to the gCTS/AFF plugin (both ids share the same on-disk layout).\nregisterFormatPlugin({ ...gctsFormatPlugin, id: 'aff' });\n\n// FormatPlugin — preferred public entry-point.\nexport { gctsFormatPlugin } from './lib/format/gcts-format';\n\n// AdtPlugin — needed for dynamic-import code paths in adt-cli.\nexport { gctsPlugin, GctsPlugin } from './lib/gcts-plugin';\nexport { gctsPlugin as default } from './lib/gcts-plugin';\n\n// Handler utilities\nexport {\n getHandler,\n getSupportedTypes,\n isSupported,\n createHandler,\n} from './lib/handlers/base';\nexport type {\n GctsHandler,\n GctsHandlerDefinition,\n GctsSourceEntry,\n} from './lib/handlers/base';\n\n// Filename utilities\nexport {\n gctsFilename,\n gctsSourceExt,\n parseGctsFilename,\n adtUriToGctsPath,\n sourceKey,\n splitSourceKey,\n LIMU_SUBTYPES,\n PACKAGE_FILENAME,\n METADATA_EXTENSION,\n} from './lib/format/filename';\n\n// AFF schema access + validation over the git_modules submodule\nexport {\n affRoot,\n listAffTypes,\n affVersions,\n latestAffVersion,\n affSchema,\n affBodyProps,\n affValidate,\n affExamples,\n schemaTargetForExample,\n readAffExample,\n} from './lib/aff/schemas';\nexport type { AffRef } from './lib/aff/schemas';\n\n// Generated typed AFF models — AffGenerated.{Type}V{n}.{RootInterface}\nexport * as AffGenerated from './schemas/generated';\n\n// Type re-exports\nexport type { GctsMetadata, GctsHeader, WithHeader } from './lib/format/types';\nexport type {\n AdtPlugin,\n FormatPlugin,\n FormatHandler,\n SerializedFile,\n} from '@abapify/adt-plugin';\n"],"mappings":"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"}
|