Skip to content

Releases: codewithagents/openapi-laravel

v0.17.0

Choose a tag to compare

@github-actions github-actions released this 11 Aug 21:48
68c9217

0.17.0 (2026-08-11)

⚠ BREAKING CHANGES

  • server: an operation whose success response $refs a named array or union component changes its generated abstract signature from JsonResponse to DataCollection<int, XData> or a Data-class union. Concrete controllers implementing the old signature must be updated to the new return type.

Bug Fixes

  • server: resolve a $ref to a non-object alias component in the response type (#171) (a056aa5)

v0.16.0

Choose a tag to compare

@github-actions github-actions released this 11 Aug 17:10
b935356

0.16.0 (2026-08-11)

Features

  • server: warn when a POST declaring 200 returns Data and answers 201 (#174) (805cb6f)

Bug Fixes

  • server: make boolean query classes additive so the literal mapping runs on GET (#172) (8975615)

v0.15.0

Choose a tag to compare

@github-actions github-actions released this 17 Jul 06:21
56e4203

0.15.0 (2026-07-17)

Features

  • support: add ApiError carrier and generated per-operation error-factory classes for spec-declared error responses (b95b1ab), closes #168

Bug Fixes

  • emitter: render floats in fixed decimal, never scientific notation (44cdb82), closes #148
  • enum: only int-back an enum value that round-trips through int (1849742), closes #145
  • parser: ignore non-finite (INF/NAN) numeric keyword values (9ebf505), closes #151
  • rules: drop uncompilable spec pattern instead of emitting a broken regex rule (2d6a875), closes #150

v0.14.0

Choose a tag to compare

@github-actions github-actions released this 15 Jun 06:00

0.14.0 (2026-06-14)

Features

  • fidelity: emit openapi-laravel.unsupported.json report, add int32/int64 + not rules (83af810)

v0.13.0

Choose a tag to compare

@github-actions github-actions released this 14 Jun 08:15

0.13.0 (2026-06-13)

Features

  • parser: include JSON pointer and expected shape in spec parse errors (183f58c)
  • parser: name the attempted format and source file in spec file errors (c0cb2b6)
  • server: emit @deprecated docblock on controller methods for deprecated operations (a1c98b9)
  • server: split non-exploded delimited array query parameters (#132) (0d10ebe)
  • server: synthesize deepObject query parameters into nested query rules (#131) (8bfbf9c)
  • server: synthesize typed return from inline object response schemas (#129) (6333f1f)
  • server: type application/x-www-form-urlencoded object request bodies (#130) (083ac3e)

Bug Fixes

  • emitter: emit self:: instead of static:: return type in final generated Data factories (97bd030)
  • server: make delimited-array query classes additive so the split runs on GET (#132) (e95e8b0)

v0.12.0

Choose a tag to compare

@github-actions github-actions released this 13 Jun 13:41
3de21b7

0.12.0 (2026-06-13)

Features

  • e2e: extend contract and backend for the runtime feature matrix (8161294)
  • emitter: generate validation for header parameters (#121) (277316c)
  • emitter: generate validation for path parameters (#113) (c8357ac)
  • parser: add internal OpenAPI spec value objects (#104) (a875697)
  • parser: add OpenApiReader hydrating the typed spec graph (#104) (c11aeed)
  • server: resolve component $ref request bodies to typed Data params (#110) (343e48d)
  • server: resolve component $ref responses to typed return types (#116) (0d2e8ab)
  • server: type non-JSON responses as base Response with degradation warning (#120) (3be9f98)
  • server: warn on response headers, callbacks, and webhooks instead of silent drops (#122) (9a4312b)

Bug Fixes

  • emitter: constrain integer path params with whereNumber to prevent TypeError 500 (#129) (4b1ff10)
  • emitter: reject missing discriminator value with 422 (fa80101), closes #126
  • emitter: reject unknown discriminator value with 422 (#124) (#127) (e988afa)
  • emitter: synthesize writable variants transitively so nested readOnly recurses on write (7437138)
  • naming: dedupe class names case-insensitively to avoid filename collisions (#108) (#112) (680a309)
  • parser: bound the 3.2 itemSchema scan, route mistyped additionalProperties to extra (#104) (93461da)
  • parser: bound total hydrated node count against YAML alias amplification (#107) (c1c354f)
  • server: honor declared non-200 success status on Data-returning operations (#125) (#128) (3648a34)
  • support: scope NoUnknownPropertiesRule to its nested subtree so closed objects enforce recursively (#30) (22a4327)

v0.11.0

Choose a tag to compare

@github-actions github-actions released this 12 Jun 12:50
de33e3f

0.11.0 (2026-06-12)

⚠ BREAKING CHANGES

  • emitter: generated controller method names and route names change for every clean RESTful operation (e.g. getPetById becomes show, the route name follows). Regenerate your output; the drift gate (openapi:check) shows the full change. Users who ran openapi:scaffold must rename the overridden methods in their concrete controllers to match the new abstract signatures (PHP fatals at class load otherwise), and route('...') call sites must follow the new route names. The --laravel-conventions and --no-laravel-conventions flags are removed (artisan rejects them, the standalone binary ignores unknown flags), and a controllers.laravel_conventions key in openapi-laravel.json is now rejected as unknown.
  • emitter: generated Data classes and enums solely owned by one tag group now land in per-tag subdirectories with namespaces following the directories (data/Pet/PetData.php under App\Data\Pet). Regenerate your output and update imports in hand-written code; the drift gate (openapi:check) shows the full change. The --group-by-tag and --no-group-by-tag flags are removed (artisan rejects them, the standalone binary ignores unknown flags), and an output.group_by_tag key in openapi-laravel.json is now rejected as unknown.

Features

  • console: add openapi:scaffold for one-time concrete controller stubs (#78) (fcc4541)
  • console: add repeatable --exclude-path-prefix subset filter (#96) (1b31da3)
  • console: warn on every silent degradation to mixed or Request (#67) (bbea22f)
  • emitter: configurable controller base class plus validation extension pattern (#83) (68a92a5)
  • emitter: emit array-count rules from minProperties/maxProperties (#72) (b5f7b01)
  • emitter: emit per-index rules for tuple prefixItems (#82) (381f47b)
  • emitter: emit required_with rules from dependentRequired (#81) (ee3eb4f)
  • emitter: honor spec response status codes in the generated scaffold (#64) (78375db)
  • emitter: Laravel-convention controller method names become the only naming (8594410)
  • emitter: make empty generated Data classes visible with a marker and warning (#95) (6c08721)
  • emitter: map security schemes to route middleware (#77) (d371ef5)
  • emitter: opt-in Laravel-convention controller method names (#94) (81ef4e4)
  • emitter: opt-in tag-grouped data directory layout (#93) (dade3a0)
  • emitter: route names from operationId and route group config (#71) (b4003b5)
  • emitter: synthesize typed Data classes for inline JSON request bodies (#76) (4de4524)
  • emitter: tag-grouped data layout becomes the only layout (1197f6d)
  • emitter: typed and validated query parameters via per-operation QueryData classes (#63) (#99) (6754bd7)
  • emitter: typed multipart bodies with UploadedFile rules (#75) (a93b149)
  • parser: exact OpenAPI version gating with loud 3.2 best-effort warnings (#103) (6f255ef)
  • support Laravel 13 (#68) (644bd00)

Bug Fixes

  • ci: raise the laravel/pint floor to ^1.16.1 so prefer-lowest passes the generated-output gates (#91) (a778796)
  • deps: raise minimum spatie/laravel-data to ^4.23 for dependentRequired rules on lowest deps (f7c36be)
  • emitter: allow patternProperties keys under closed-object enforcement (#65) (c0f3651)
  • emitter: generate query classes independent of scaffold flags plus review follow-ups (#63) (458ad74)
  • emitter: merge PathItem-level parameters and resolve parameter refs (#66) (#85) (0363d6d)
  • tests: create parent dirs for grouped output in corpus gates (bdb4c22)

Miscellaneous Chores

  • declare the PHP class API internal (#69) (76da32e)
  • deps: explicit symfony/yaml require, drop ext-ctype (ae6b1c0)
  • e2e: regenerate backend for grouped layout and convention naming (e7e45d0)
  • packaging and platform hygiene for 1.0 (#74) (ed8da68)

v0.10.0

Choose a tag to compare

@github-actions github-actions released this 11 Jun 20:13
88986b2

0.10.0 (2026-06-11)

Features

  • console: enforce additionalProperties:false by default with a --no-enforce-closed-objects opt-out (#30) (3e2b95c)
  • emitter: discriminator-aware validation and hydration for inline-union and allOf-inheritance forms (#38) (083cfa6)
  • emitter: emit ?T and {} so generated output is Pint-idempotent (#60) (df924c4)
  • emitter: inline support classes into the consumer namespace so generated output has no runtime dependency on the generator (#40) (522dbc4)

Bug Fixes

  • emitter: emit array generics and drop DataCollectionOf on enum collections so generated output passes PHPStan max (#62) (9e3c6fb)

v0.9.0

Choose a tag to compare

@github-actions github-actions released this 11 Jun 14:02
2be6f04

0.9.0 (2026-06-11)

Features

  • subset generation with dependency closure (#44) (3b5c5be)

v0.8.0

Choose a tag to compare

@github-actions github-actions released this 11 Jun 13:08
e238c9f

0.8.0 (2026-06-11)

⚠ BREAKING CHANGES

  • openapi:generate and openapi:check now emit and check the full output by default; use --no-controllers / --no-routes to opt out. Closes #45

Features

  • console: contain output paths from discovered config (#54) (8c7b152)
  • emitter: discriminator-aware oneOf/anyOf union base + variant generation (0adcf08)
  • emitter: emit @deprecated docblocks for deprecated schemas and properties (94a30aa)
  • emitter: opt-in additionalProperties:false enforcement (#30) (f3f632e)
  • generate models, rules, controllers and routes by default (#46) (0a9acc9)

Bug Fixes

  • ci: whitelist Illuminate DataAwareRule for require-checker (c7570d3)
  • deps: require spatie/laravel-data ^4.15 for PropertyMorphableData morph support (57b969b)
  • emitter: integer discriminator forwards int param and int morph arms (e630b56)
  • emitter: keep boolean members of a mixed-type enum in Rule::in (ae8717e)
  • emitter: morph() reads PHP property name + warn on discriminated-union degrades (98ef4cf)
  • emitter: nullable mixed union accepts a present null (#8) (0026271)
  • emitter: pin a variant discriminator const for standalone validation (#disc-const) (008cab7)
  • emitter: validate format: time and duration (9dbdf55)

Miscellaneous Chores

  • bump minor for pre-major breaking changes in release-please (646061f)
  • release: set bump-minor-pre-major to keep breaking changes in 0.x (4d71261)