v2.9.0
Minor Changes
-
ffc7d53: Add
ApiRunnerclass insrc/api-runner.tsthat encapsulates the creation and lifecycle management of all Counterfact sub-systems (Registry, ContextRegistry, ScenarioRegistry, ScenarioFileGenerator, CodeGenerator, Dispatcher, Transpiler, ModuleLoader, and OpenApiDocument) for a single API specification.Each sub-system is exposed as a public property. The class provides four composite methods —
generate(),load(),watch(), andstopWatching()— that coordinate across multiple sub-systems based on the supplied configuration. Use the static asyncApiRunner.create(config)factory method to construct an instance.counterfact()inapp.tsnow usesApiRunnerinternally. -
a6bb5bc: Add support for multiple API specifications via
ApiRunner.ApiRunner.create(config, group?)now accepts an optionalgroupstring (default"") that places generated code in a subdirectory ofconfig.basePath.ApiRunnerexposesgroupas a public readonly property andsubdirectoryas a computed getter (returns""when group is empty, or"/${group}").CodeGeneratorreceivesconfig.basePath + runner.subdirectoryso each spec's generated files land in the right subdirectory.createKoaAppnow acceptsrunners: ApiRunner[](an array) instead of a singlerunner. It loops over all runners to mount per-spec OpenAPI document, Swagger UI, Admin API, and route-dispatching middleware.counterfact()accepts an optionalspecs: SpecConfig[]second argument (each entry hassource,prefix, andgroup). When omitted, a single spec is derived fromconfig.openApiPathandconfig.prefixfor full backward compatibility. The REPL is configured using the first spec's runner.- The
speckey incounterfact.yamlcan now be a single{source, prefix, group}object or an array of such objects to configure multiple APIs from the config file.
-
26e00eb: Add
openApiPathandprefixas public readonly properties onApiRunner.Refactor
createKoaAppto acceptrunner: ApiRunner(providing the dispatcher, registry, context registry, OpenAPI path, and route prefix) instead of aconfig: Configmonolith plus separate sub-system refs. All other config fields used bycreateKoaAppare now explicit named arguments, laying the groundwork for passing multiple runners tocreateKoaAppin the future.
Patch Changes
- aa23b79: Support
.scenario <group> <path>in multi-API REPL sessions while preserving single-runner syntax. - d0dff90: Warn and skip loading context modules when they fail to import, including syntax errors in _.context files.
- 75938e3: Prefer OpenAPI route paths for REPL tab completion and refactor completer lookups into focused helpers.
- 7a8c0b6: Move MSW (Mock Service Worker) code out of
app.tsinto a dedicatedsrc/msw.tsmodule. TheMockRequesttype,handleMswRequest, andcreateMswHandlersare still re-exported fromapp.tsfor backward compatibility. Tests for these functions have been moved totest/msw.test.ts. - 4894f18: Organized Koa middleware into a dedicated
src/server/web-server/directory. Each middleware constructor now takes its path prefix as the first argument, makingcreateKoaAppeasier to read at a glance.openapiMiddlewaresimplified to handle a single path only. - 3aa8416: Expose grouped REPL context and routes for multi-API runners, and require non-empty unique group names when configuring multiple APIs.
- b270516: Move CLI logic from bin/counterfact.js into src/cli/ as TypeScript modules
- a3d16ab: Update REPL
.scenariotab completion to suggest groups first in multi-API mode and group-scoped scenarios after selection.