← All packages

@reso-standards/reso-metadata-utils

@reso-standards/reso-metadata-utils

RESO OData metadata processing utilities: CSDL parsing, validation, EDMX → metadata-report serialization and live metadata fetching. This is the dependency-requiring side of the RESO metadata split (reso-tools #221) – a sibling to @reso-standards/reso-common, which holds the zero-dependency metadata model and EDMX generation. Nothing here imports reso-common; the two are meant to be used together.

Its one runtime dependency is fast-xml-parser.

Install

npm install @reso-standards/reso-metadata-utils

Or work from the reso-tools monorepo:

git clone https://github.com/RESOStandards/reso-tools.git
cd reso-tools && npm install

What It Does

Four capabilities, all exported from the package root.

1. Parse and Inspect CSDL

Turn an OData 4.01 $metadata (CSDL/EDMX) document into a typed CsdlSchema, then walk it.

import { parseCsdlXml, discoverResources, getFieldsForResource } from '@reso-standards/reso-metadata-utils';

const schema = parseCsdlXml(edmxXml);
const resources = discoverResources(schema);                    // ReadonlyArray<CsdlResourceInfo>
const propertyFields = getFieldsForResource(schema, 'Property'); // ReadonlyArray<FieldInfo>
Export Purpose
parseCsdlXml(xml) CSDL/EDMX XML → typed CsdlSchema
discoverResources(schema) Entity sets exposed as resources
getEntityType / getEnumType / getComplexType Look up a named type
getFieldsForResource(schema, name) / getFieldsForEntityType / getAllFields Field enumeration

2. Validate CSDL

import { validateCsdl } from '@reso-standards/reso-metadata-utils';

const result = validateCsdl(schema, '4.01'); // CsdlValidationResult; odataVersion defaults to '4.0'
if (!result.valid) console.error(result.errors);

XSD validation lands later under a Node-only subpath.

3. Serialize to a Metadata Report

Produce the canonical RESO metadata-report.json shape from EDMX XML or an already-parsed schema.

import { generateMetadataReport, serializeMetadataReport } from '@reso-standards/reso-metadata-utils';

const report = generateMetadataReport(edmxXml, '2.1');  // MetadataReport — parse + serialize in one call
const report2 = serializeMetadataReport(schema, '2.1'); // MetadataReport — from a parsed CsdlSchema

4. Fetch Metadata from a Live Server

import { fetchAndParseMetadata, fetchRawMetadataWithVersion } from '@reso-standards/reso-metadata-utils';

const schema = await fetchAndParseMetadata(baseUrl, token);              // CsdlSchema
const { xml, version } = await fetchRawMetadataWithVersion(baseUrl, token);
Export Purpose
fetchRawMetadata(baseUrl, token, opts?) Raw $metadata XML
fetchRawMetadataWithVersion(baseUrl, token, opts?) XML plus the detected DD version
fetchAndParseMetadata(baseUrl, token, opts?) Fetch and parse to CsdlSchema

Fetch failures throw MetadataFetchError.

Types

The package ships full TypeScript declarations: the Csdl* model (CsdlSchema, CsdlEntityType, CsdlProperty, CsdlEnumType, …), the MetadataReport* report shapes and FieldInfo / FieldAnnotation.

Development

npm install
npm run build
npm test

License

See LICENSE – the RESO End-user License Agreement.