@openpkg-ts/spec
v0.37.0
Published
Shared schema, validation, and diff utilities for OpenPkg specs
Maintainers
Readme
@openpkg-ts/spec
OpenPkg specification types, validation, normalization, and diffing utilities.
Install
npm install @openpkg-ts/specQuick Start
import { 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}`);Validation
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);Normalization
Ensures consistent structure and defaults.
import { normalize } from '@openpkg-ts/spec';
const normalized = normalize(spec);
// - Sorts exports alphabetically
// - Ensures meta fields exist
// - Normalizes type referencesDiffing
Compare 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'DiffOptions
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);Dereferencing
Resolve $ref pointers in the spec.
import { dereference } from '@openpkg-ts/spec';
const dereferenced = dereference(spec);
// All $ref pointers are resolved inlineTypes
import type {
OpenPkg,
SpecExport,
SpecType,
SpecFunction,
SpecClass,
SpecInterface,
SpecMeta,
SpecDiff,
DiffOptions,
SemverBump,
SemverRecommendation,
} from '@openpkg-ts/spec';Exports
Validation
validateSpec(spec)- Validate against schemaassertSpec(spec)- Throw on invalidgetValidationErrors(spec)- Get errors arraygetAvailableVersions()- List schema versions
Transformation
normalize(spec)- Normalize structuredereference(spec)- Resolve $ref pointers
Diffing
diffSpec(base, head, options?)- Compare specs (supportsDiffOptions)recommendSemverBump(diff)- Suggest version bumpcalculateNextVersion(version, bump)- Calculate next versioncategorizeBreakingChanges(breaking, old, new)- Group by severity
Types
OpenPkg- Root spec typeSpecExport- Export definitionSpecType- Type definitionSpecFunction,SpecClass,SpecInterface- Export kindsSpecDiff- Diff result typeDiffOptions- Diff filtering optionsSemverBump,SemverRecommendation- Semver types
License
MIT
