Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
9 changes: 0 additions & 9 deletions .changeset/add-api-runner-class.md

This file was deleted.

5 changes: 0 additions & 5 deletions .changeset/cruel-hoops-sneeze.md

This file was deleted.

5 changes: 0 additions & 5 deletions .changeset/free-numbers-relate.md

This file was deleted.

5 changes: 0 additions & 5 deletions .changeset/light-jokes-tap.md

This file was deleted.

5 changes: 0 additions & 5 deletions .changeset/move-msw-out-of-app.md

This file was deleted.

12 changes: 0 additions & 12 deletions .changeset/multiple-apis-with-api-runner.md

This file was deleted.

5 changes: 0 additions & 5 deletions .changeset/organize-middlewares.md

This file was deleted.

7 changes: 0 additions & 7 deletions .changeset/pass-runner-into-create-koa-app.md

This file was deleted.

5 changes: 0 additions & 5 deletions .changeset/stupid-onions-juggle.md

This file was deleted.

5 changes: 0 additions & 5 deletions .changeset/thin-showers-create.md

This file was deleted.

5 changes: 0 additions & 5 deletions .changeset/yummy-humans-swim.md

This file was deleted.

33 changes: 33 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,38 @@
# counterfact

## 2.9.0

### Minor Changes

- ffc7d53: Add `ApiRunner` class in `src/api-runner.ts` that 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()`, and `stopWatching()` — that coordinate across multiple sub-systems based on the supplied configuration. Use the static async `ApiRunner.create(config)` factory method to construct an instance.

`counterfact()` in `app.ts` now uses `ApiRunner` internally.

- a6bb5bc: Add support for multiple API specifications via `ApiRunner`.
- `ApiRunner.create(config, group?)` now accepts an optional `group` string (default `""`) that places generated code in a subdirectory of `config.basePath`.
- `ApiRunner` exposes `group` as a public readonly property and `subdirectory` as a computed getter (returns `""` when group is empty, or `"/${group}"`).
- `CodeGenerator` receives `config.basePath + runner.subdirectory` so each spec's generated files land in the right subdirectory.
- `createKoaApp` now accepts `runners: ApiRunner[]` (an array) instead of a single `runner`. It loops over all runners to mount per-spec OpenAPI document, Swagger UI, Admin API, and route-dispatching middleware.
- `counterfact()` accepts an optional `specs: SpecConfig[]` second argument (each entry has `source`, `prefix`, and `group`). When omitted, a single spec is derived from `config.openApiPath` and `config.prefix` for full backward compatibility. The REPL is configured using the first spec's runner.
- The `spec` key in `counterfact.yaml` can now be a single `{source, prefix, group}` object or an array of such objects to configure multiple APIs from the config file.

- 26e00eb: Add `openApiPath` and `prefix` as public readonly properties on `ApiRunner`.

Refactor `createKoaApp` to accept `runner: ApiRunner` (providing the dispatcher, registry, context registry, OpenAPI path, and route prefix) instead of a `config: Config` monolith plus separate sub-system refs. All other config fields used by `createKoaApp` are now explicit named arguments, laying the groundwork for passing multiple runners to `createKoaApp` in 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.ts` into a dedicated `src/msw.ts` module. The `MockRequest` type, `handleMswRequest`, and `createMswHandlers` are still re-exported from `app.ts` for backward compatibility. Tests for these functions have been moved to `test/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, making `createKoaApp` easier to read at a glance. `openapiMiddleware` simplified 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 `.scenario` tab completion to suggest groups first in multi-API mode and group-scoped scenarios after selection.

## 2.8.1

### Patch Changes
Expand Down
2 changes: 1 addition & 1 deletion package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "counterfact",
"version": "2.8.1",
"version": "2.9.0",
"description": "Generate a TypeScript-based mock server from an OpenAPI spec in seconds — with stateful routes, hot reload, and REPL support.",
"type": "module",
"main": "./dist/app.js",
Expand Down
Loading