Parse raw source data into a canonical ContentLesson via a source
adapter (default: singleJsonLessonAdapter), then resolve any
from_cards matching exercises. This is the content-engine entry point; a
future multi-file adapter is passed here instead, with no change to the
caller's fetch/storage.
options.extensions applies each registered extension's optional parse-time
resolve hook after the core from_cards resolution. Without extensions
the result is identical to core parsing (the loop is a no-op).
learn-content-engine — framework-agnostic content parse/transform engine.
Public API: the source→canonical boundary. A source adapter turns raw content (today: a single-JSON lesson) into the canonical internal lesson object (ContentLesson); the manifest transform projects a raw
manifest.yamlset into a canonical ContentSetEntry.The library is framework-agnostic: no fetch, no database, no UI. The consumer supplies the raw bytes + set context and keeps network/persistence.