API stability and entry points
4 minutes read
@velella/ebb exposes a single locked TypeScript entry point at the package root (@velella/ebb), alongside temporary "./*" subpath exports kept for 0.x compatibility and experimental helpers.
What the API report enforces
CI locks the root entry point ("." → src/index.ts) by running npm run api:check (api-extractor run --print-api-report-diff) against api/ebb.api.md.
What that check does enforce:
- Every public runtime export (
check,checkAll,rulesFor,replacementFor) and public type exported from@velella/ebb, plus their TypeScript signatures. Any unreviewed signature or export diff fails CI untilapi/ebb.api.mdis updated in the same PR.
What that check does not promise:
- No subpaths are locked. Nothing under
@velella/ebb/*is checked byapi/ebb.api.md. Tests verify that legacy0.1.0subpaths resolve and load, not that internal types or non-root exports stay unchanged. - No CommonJS support.
require("@velella/ebb")maps tosrc/cjs-error.ctsand throws an explicit ESM-only error directing callers to dynamicimport("@velella/ebb"). - Pre-
1.0status. While the package version is0.x, reviewed PRs can still updateapi/ebb.api.mdwhen needed. - Field-level
@experimentaltags. InsideResult/CheckResultandResultMatch/CheckMatch,asOfanddaysLeftcarry@experimentalJSDoc tags (see Result model) and may still evolve before1.0; API Extractor records their TypeScript types, not their runtime invariants.
Root and manifest entry points
| Entry point | Classification | Locked by api/ebb.api.md |
Exports & notes |
|---|---|---|---|
@velella/ebb |
Root public API (ESM only; require throws ESM-only error) |
Yes | Runtime: check, checkAll, createEbb, preload, rulesFor, replacementFor. Types: CheckAllEntry, CheckAllError, CheckAllErrorCode, CheckAllItem, CheckAllResult, CheckAllSummary, CheckEvent, CheckMatch, CheckResult, CheckStatus, CreateEbbOptions, EbbErrorCode, EbbInstance, EcosystemDataInput, EcosystemInput, EvidenceSource, Result, ResultEvent, ResultMatch, ResultStatus, Rule, RuleEvent, RulesForOptions. |
@velella/ebb/package.json |
Package metadata | No | Static JSON package.json via "./package.json". |
@velella/ebb/create |
Factory entry point | No | Runtime: createEbb. Scoped instance factory. |
@velella/ebb/data/load |
Data loading & preload | No | Runtime: loadEcosystem, loadEcosystemSync, preload, purlToEcosystems. |
@velella/ebb/data/<ecosystem> |
Ecosystem data subpaths | No | 25 modules (npm, python, etc.) exporting rules (default and named), data, and ecosystem. |
Experimental and 0.2.0 subpaths
Resolved through the temporary "./*" export in package.json. These subpaths are experimental until 1.0 and are not tracked by api/ebb.api.md. Prefer importing check, checkAll, rulesFor, and replacementFor from @velella/ebb instead.
| Entry point | Main exports / role | Notes |
|---|---|---|
@velella/ebb/check-all |
checkAll, isCheckAllError |
Use checkAll from @velella/ebb; isCheckAllError and the subpath itself are experimental. |
@velella/ebb/replacement |
replacementFor |
Use replacementFor from @velella/ebb. |
@velella/ebb/result-compat |
fromLookupProduct |
Experimental adapter from legacy LookupResult to Result (see Result model). |
@velella/ebb/rules-for |
rulesFor |
Use rulesFor from @velella/ebb. |
@velella/ebb/vers/errors |
VersError |
Internal VERS error module extracted from vers. |
@velella/ebb/vers/schemes |
SUPPORTED_SCHEMES, intdotScheme |
Internal VERS scheme registry module. |
@velella/ebb/index |
Same as @velella/ebb via "./*" |
Resolves accidentally through the wildcard; import @velella/ebb instead. |
Deprecated 0.1.0 subpaths
Every source module shipped in 0.1.0 resolves in 0.x via "./*" so existing consumers keep working without breakage, verified in CI by tests/exports/legacy.test.ts and tests/exports/pack.test.ts. Each subpath's main export carries a @deprecated JSDoc tag pointing editors to @velella/ebb (verified by tests/exports/deprecations.test.ts). None of these subpaths are locked by api/ebb.api.md.
| Subpath | Main deprecated export | Replacement / status before 1.0 |
|---|---|---|
@velella/ebb/as-of |
applyAsOf |
check(purl, version, asOf) on @velella/ebb; scan helper stays deprecated for removal in 1.0. |
@velella/ebb/bundled-rules |
bundledRules |
Internal rule loader; subpath deprecated for removal in 1.0. |
@velella/ebb/cache-paths |
defaultCacheDirectory |
Internal cache path helper; deprecated for removal in 1.0. |
@velella/ebb/check |
check |
Import check from @velella/ebb. |
@velella/ebb/countdown |
runCountdown |
Internal CLI/UI helper; deprecated for removal in 1.0. |
@velella/ebb/data-bundle |
buildDataBundle |
Internal data bundle helper; deprecated for removal in 1.0. |
@velella/ebb/data-release-log |
verifyReleaseLog |
Internal release log helper; deprecated for removal in 1.0. |
@velella/ebb/data-signature |
verifyArtifactSignature |
Internal Sigstore helper; deprecated for removal in 1.0. |
@velella/ebb/data-source |
getActiveData |
Data source loader; subpath deprecated for removal in 1.0. |
@velella/ebb/data-status |
getDataStatus |
Data freshness helper; subpath deprecated for removal in 1.0. |
@velella/ebb/data-update |
updateData |
Network cache updater; subpath deprecated for removal in 1.0. |
@velella/ebb/domain |
LifecycleScan |
EvidenceSource is exported from @velella/ebb; subpath deprecated for removal in 1.0. |
@velella/ebb/errors |
EbbError |
EbbErrorCode is exported from @velella/ebb; subpath deprecated for removal in 1.0. |
@velella/ebb/export/cle |
exportCle |
Internal CLE exporter; deprecated for removal in 1.0. |
@velella/ebb/forecast |
buildForecast |
Internal forecast helper; deprecated for removal in 1.0. |
@velella/ebb/lookup |
lookupProduct |
Import check from @velella/ebb. |
@velella/ebb/min-support |
applyMinSupport |
Internal scan helper; deprecated for removal in 1.0. |
@velella/ebb/package-files |
findPackageFile |
Internal package file resolver; deprecated for removal in 1.0. |
@velella/ebb/product-name |
rankProductsForName |
Internal alias/ranking helper; deprecated for removal in 1.0. |
@velella/ebb/purl |
parsePurl |
Internal PURL parser; deprecated for removal in 1.0. |
@velella/ebb/registry |
validateRegistryV2 |
Internal registry validator; Rule type is exported from @velella/ebb. |
@velella/ebb/required |
required |
Internal assertion helper; deprecated for removal in 1.0. |
@velella/ebb/result |
daysLeft |
Result, ResultEvent, ResultMatch, and ResultStatus are exported from @velella/ebb; subpath deprecated for removal in 1.0. |
@velella/ebb/rule-guards |
validateRegistry |
Internal registry guard; deprecated for removal in 1.0. |
@velella/ebb/rule-lint |
lintRuleFiles |
Maintainer lint helper; deprecated for removal in 1.0. |
@velella/ebb/rule-versions |
kubernetesRuleVersion |
Internal rule version translator; deprecated for removal in 1.0. |
@velella/ebb/vers |
versContains |
Internal VERS range engine; deprecated for removal in 1.0. |
@velella/ebb/vers/gem |
gemScheme |
Internal RubyGems scheme; deprecated for removal in 1.0. |
@velella/ebb/vers/index |
versContains |
Re-export of @velella/ebb/vers; deprecated for removal in 1.0. |
@velella/ebb/vers/maven |
mavenScheme |
Internal Maven scheme; deprecated for removal in 1.0. |
@velella/ebb/vers/nuget |
nugetScheme |
Internal NuGet scheme; deprecated for removal in 1.0. |
@velella/ebb/vers/pep440 |
pep440Scheme |
Internal PEP 440 scheme; deprecated for removal in 1.0. |
@velella/ebb/vers/semver |
semverScheme |
Internal SemVer scheme; deprecated for removal in 1.0. |
@velella/ebb/version |
VERSION |
Package version constant; read @velella/ebb/package.json instead. |
Deprecation rule before 1.0
- Keep
0.1.xsubpaths working during0.x. Every0.1.0subpath above continues to resolve via"./*"and load from the packed npm tarball across0.xreleases. - Surface
@deprecatedin editors. TypeScript consumers importing legacy subpaths see@deprecateddiagnostics pointing to@velella/ebb; imports from@velella/ebbitself produce none. - Remove
"./*"in1.0.0. Only intentionally exposed entry points ("."and"./package.json", plus any explicitly promoted subpaths added with API coverage before release) remain in1.0.0. Internal modules and deprecated0.1.xsubpaths will stop resolving directly at that major boundary.