mcpField
O
odata-vocabularies-sync

odata-vocabularies-sync

github.com/sapDevelopment160391 installsUpdated today
Repository

About odata-vocabularies-sync

A development skill for keeping `packages/odata-vocabularies` aligned with upstream OData vocabularies. It guides updates to registered resources or registration of a new vocabulary from a JSON URL, followed by README checks and tests.

Key features

  1. 01Update registered vocabulary resources
  2. 02Add a vocabulary from a JSON URL
  3. 03Maintain namespace and alias registrations
  4. 04Check the README support lists
  5. 05Run tests and update snapshots

Use cases

  1. 01Sync vocabulary resources with upstream releases
  2. 02Add an OASIS or SAP vocabulary to the package
  3. 03Find and fill gaps in supported vocabulary lists
  4. 04Validate tests and snapshots after resource updates

Install

Copy the command and run it in a terminal.

$npx skills add https://github.com/sap/open-ux-tools --skill odata-vocabularies-sync

After installing, type/odata-vocabularies-syncin Claude Code to confirm it loaded.

Details

From the project README

odata-vocabularies-sync

Keeps the packages/odata-vocabularies package in sync with the upstream OData vocabulary sources.

  • No argument — update all existing vocabulary resource files to their latest published versions.
  • With a URL argument — register and add the new vocabulary first, then update everything.

All file edits are relative to packages/odata-vocabularies/.

Note: com.sap.cds.vocabularies.* files (ObjectModel, AnalyticsDetails) are hand-crafted and not managed by this skill. Do not attempt to add them via a URL.


Step 1 — Add a new vocabulary (only when a URL argument is provided)

1a. Fetch and inspect the vocabulary JSON

Fetch the JSON at the provided URL (must end in .json — XML URLs are not supported by the update tool). Extract:

  • namespace — the key of the top-level schema object (e.g. Org.OData.NewThing.V1 or com.sap.vocabularies.NewThing.v1)
  • alias — the value of $Alias inside that schema object (e.g. NewThing)

Determine the vocabulary family from the namespace:

  • Starts with Org.OData. → OASIS vocabulary
  • Starts with com.sap.vocabularies. → SAP vocabulary
  • Starts with com.sap.cds. → CDS vocabulary — stop. These files are hand-crafted and cannot be added via this skill. Explain this to the user.
  • Anything else → stop and ask the user to confirm the family before proceeding.
1b. Edit tools/update.ts

Add an entry to SUPPORTED_VOCABULARIES in alphabetical order within the existing entries:

'<namespace>': {
    uri: '<the provided URL>'
},

Note: The entry can include update: false to pin the vocabulary and exclude it from future automatic updates (e.g. com.sap.vocabularies.CDS.v1 uses this because it is hand-maintained). Omit the field for normal auto-updating behaviour.

1c. Edit src/resources/index.ts

Make all six additions. All six are mandatory — missing any one will cause a runtime error.

  1. Import — insert alphabetically by alias in the single import block (OASIS and SAP imports are interleaved by alias, not grouped by family):

    import <Alias> from './<namespace>.js';
    

    Use the $Alias value from the JSON as the import identifier. Exception: if the alias is a reserved JS keyword or built-in (e.g. JSON, Map, Error), prefix it to form a valid identifier (e.g. JSON → ODataJSON). Also check existing imports for precedent — some aliases are shortened for brevity (e.g. Authorization → Auth).

  2. Namespace union type — add to the matching family type:

    • OASIS → OasisVocabularyNamespace
    • SAP → SapVocabularyNamespace
    | '<namespace>'
    
  3. Alias union type — add to the matching family type:

    • OASIS → OasisVocabularyAlias
    • SAP → SapVocabularyAlias
    | '<Alias>'
    
  4. NAMESPACE_TO_ALIAS Map:

    ['<namespace>', '<Alias>'],
    
  5. ALIAS_TO_NAMESPACE Map:

    ['<Alias>', '<namespace>'],
    
  6. vocabularies Record:

    '<namespace>': <Alias>,
    
1d. Edit src/loader.ts

Add the namespace to SUPPORTED_VOCABULARY_NAMESPACES in alphabetical order within its family block:

'<namespace>',
1e. Edit README.md

Add the alias to the correct bullet list in the "Supported Vocabularies" section, in alphabetical order:

  • OASIS namespace → OASIS Vocabularies list
  • SAP namespace → SAP Vocabularies list
* <Alias>

Step 2 — Run the update tool

This fetches the latest JSON for every registered vocabulary (including any newly added one) and regenerates all src/resources/*.ts resource files.

Run from the repo root:

pnpm --filter @sap-ux/odata-vocabularies update:vocabularies

If the tool fails, stop and report the full error output before proceeding.


Step 3 — Audit and fix README

Cross-check the README against the registered vocabularies and add any missing entries.

  1. Read src/resources/index.ts and collect all namespaces from NAMESPACE_TO_ALIAS, split by family:

    • OASIS: namespaces starting with Org.OData.
    • SAP: namespaces starting with com.sap.vocabularies. excluding com.sap.vocabularies.CDS.v1
    • Skip all com.sap.cds. namespaces (hand-crafted, not listed in README)
  2. For each collected namespace, read the corresponding generated resource file src/resources/<namespace>.ts and extract the $Alias value — this is the authoritative published alias used as the display name in README.

  3. Read README.md and find the two bullet lists under "Supported Vocabularies":

    • The OASIS Vocabularies list
    • The SAP Vocabularies list
  4. For each alias not yet present in the correct list, insert it in alphabetical order.

If the README is already complete, do nothing.


Step 4 — Run tests and update snapshots

pnpm --filter @sap-ux/odata-vocabularies test -- -u

Report any test failures that are not snapshot-related. Snapshot updates are expected only when vocabulary content has actually changed (either upstream drift detected by the update tool, or a newly added vocabulary). If snapshots change beyond what was updated, inspect the diff before accepting — it may indicate a regression.


Step 5 — Report

Summarise what was done:

  • If a new vocabulary was added: confirm the namespace, alias, family, and all files changed.
  • If any README entries were missing and added, list them.
  • List vocabulary resource files regenerated by the update tool.
  • Confirm tests pass.

Comments

Markdown supported