Types, validation, normalization, and diffing for OpenPkg documents. Part of openpkg-ts, the TypeScript reference implementation of the OpenPkg standard.
npm install @openpkg-ts/specimport { validateSpec, normalize, diffSpec } from '@openpkg-ts/spec';
// Validate a spec
const result = validateSpec(spec);
if (!result.ok) {
console.error(result.errors);
}
// Normalize for consistent structure
const normalized = normalize(spec);
// Diff two specs
const diff = diffSpec(oldSpec, newSpec);
console.log(`Breaking changes: ${diff.breaking.length}`);import { validateSpec, assertSpec, getValidationErrors } from '@openpkg-ts/spec';
// Returns { ok: boolean, errors?: ValidationError[] }
const result = validateSpec(spec);
// Throws on invalid
assertSpec(spec);
// Get errors only
const errors = getValidationErrors(spec);Ensures consistent structure and defaults.
import { normalize } from '@openpkg-ts/spec';
const normalized = normalize(spec);
// - Sorts exports alphabetically
// - Ensures meta fields exist
// - Normalizes type referencesCompare specs and detect breaking changes.
import { diffSpec, recommendSemverBump, calculateNextVersion } from '@openpkg-ts/spec';
const diff = diffSpec(baseSpec, headSpec);
console.log(`Added: ${diff.added.length}`);
console.log(`Removed: ${diff.removed.length}`);
console.log(`Breaking: ${diff.breaking.length}`);
console.log(`Docs only: ${diff.docsOnly.length}`);
// Get semver recommendation
const recommendation = recommendSemverBump(diff);
console.log(`Suggested bump: ${recommendation.bump}`); // 'major' | 'minor' | 'patch'
console.log(`Reason: ${recommendation.reason}`);
// Calculate next version
const next = calculateNextVersion('1.2.3', recommendation.bump);
console.log(`Next version: ${next}`); // '2.0.0'Filter diff results by criteria.
import { diffSpec, type DiffOptions } from '@openpkg-ts/spec';
const options: DiffOptions = {
includeDocsOnly: false, // exclude documentation-only changes
kinds: ['function', 'class'], // filter by export kind
};
const diff = diffSpec(oldSpec, newSpec, options);Resolve $ref pointers in the spec.
import { dereference } from '@openpkg-ts/spec';
const dereferenced = dereference(spec);
// All $ref pointers are resolved inlineimport type {
OpenPkg,
SpecExport,
SpecType,
SpecFunction,
SpecClass,
SpecInterface,
SpecMeta,
SpecDiff,
DiffOptions,
SemverBump,
SemverRecommendation,
} from '@openpkg-ts/spec';validateSpec(spec)- Validate against schemaassertSpec(spec)- Throw on invalidgetValidationErrors(spec)- Get errors arraygetAvailableVersions()- List schema versions
normalize(spec)- Normalize structuredereference(spec)- Resolve $ref pointers
diffSpec(base, head, options?)- Compare specs (supportsDiffOptions)recommendSemverBump(diff)- Suggest version bumpcalculateNextVersion(version, bump)- Calculate next versioncategorizeBreakingChanges(breaking, old, new)- Group by severity
OpenPkg- Root spec typeSpecExport- Export definitionSpecType- Type definitionSpecFunction,SpecClass,SpecInterface- Export kindsSpecDiff- Diff result typeDiffOptions- Diff filtering optionsSemverBump,SemverRecommendation- Semver types
MIT