Skip to Content
PhasesExportsExports API Surface

Exports API Surface

Goals

  1. Expose predictable, discoverable symbols from packages/cli/src/exports/core.ts (and /config if needed).
  2. Export stable/safe capabilities without leaking unstable internals.
  3. Keep CLI-only concerns out of @zamdevio/i18nprune/core.

Risk

Over-exposing unstable internals as semver-stable APIs.

Mitigate with:

  • Stable/Advanced/Internal tiers
  • Decision records under docs/architecture/decisions/ when a choice spans code + docs
  • Conservative defaults (export less first)

Tiers

TierMeaning
StableIntended integrations; breaking changes are major
AdvancedDocumented sharp edges
InternalNot exported

Namespaces over classes

Public API uses grouped namespaces (json.*, extractor.*, dynamic.*, validate.*, reference.*, context.*, ask.*) plus flat re-exports.

Naming convention

PrefixMeaning
scan*read-only discovery
compute*pure deterministic derivation
resolve*config/context/path resolution
run*side effects / workflows that return the same CliJsonEnvelope as CLI --json

Key-sites alignment

Keep extractor and dynamic as separate namespaces with different trust levels.

Work checklist (exports phase)

  • Audit current exports vs internal capabilities (exports/core.ts + namespace modules).
  • Classify Stable/Advanced/Internal (table in docs/exports/core.md).
  • Implement grouped/namespaced public surface (export * as domains on @zamdevio/i18nprune/core).
  • Add flow-level run* exports for every command in COMMANDS_WITH_JSON_OUTPUT (including generate, report).
  • Document CLI JSON contract in docs/json/README.md (canonical spec).
  • package.json exports: primary core / config entrypoints maintained.