Repository navigation
Releases: codewithagents/openapi-laravel
Releases · codewithagents/openapi-laravel
Release list
v0.17.0
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
v0.16.0
v0.15.0
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
v0.13.0
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
v0.12.0
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
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
v0.10.0
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
v0.9.0
v0.8.0
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)