Revision history for OpenAPI-Modern 0.114 2025-12-09 22:34:18Z - support added for parsing and validation of Dancer2 request and response objects 0.113 2025-12-08 19:38:14Z - now fully supporting the use of v3.0.x documents in request and response validation, as well as document validation 0.112 2025-12-07 07:05:36Z - fix tests that changed their output with JSON::Schema::Modern 0.628 0.111 2025-12-04 01:23:20Z - now also allowing validation of v3.0.x documents 0.110 2025-12-03 23:53:53Z - new command line script "openapi-validate", to validate OpenAPI descriptions (one or more files) 0.109 2025-11-29 00:46:37Z - the OpenAPI 3.0 schema is now available to be used via load_cached_document() in JSON::Schema::Modern::Utilities, when OpenAPI::Modern::Utilities is loaded 0.108 2025-11-25 18:03:38Z - fixed error in type detection in parameter schemas (thanks, Robin Murray!) 0.107 2025-11-23 18:56:54Z - efficiency improvements in validate_response() when provided with an operationId for lookup - prereq bump on Test2::Warnings for an import fix 0.106 2025-11-19 20:28:01Z - fix invalid restriction on trailing '/' in server urls (added in v0.086) 0.105 2025-11-03 20:04:48Z - improved specification compliance when matching URIs to path patterns and server url patterns 0.104 2025-10-29 17:54:47Z - support added for tagged operations (tag heirarchies are new in OpenAPI 3.2) 0.103 2025-10-26 19:14:30Z - find_path() has been renamed to find_path_item() (with a backcompat alias), and now accepts lookup using just an HTTP request URI and method alone, rather than a complete request object 0.102 2025-10-21 21:33:40Z - support added for additional HTTP methods, new in OpenAPI 3.2 0.101 2025-10-19 20:09:38Z - support added for "in: querystring" in parameter descriptions, new in OpenAPI 3.2 0.100 2025-10-15 19:38:38Z - support added for OpenAPI v3.2 documents! See https://github.com/OAI/OpenAPI-Specification/releases/tag/3.2.0 for what is new or changed. 0.099 2025-10-13 19:44:43Z - fixed bug: properly support operation_id = '0' 0.098 2025-10-09 21:01:35Z - fixed bug: we no longer assume that a /paths entry can be inferred from an operation_id alone 0.097 2025-09-28 22:30:37Z - various internal changes to adjust for changes in JSON::Schema::Modern 0.619 0.096 2025-09-19 17:17:20Z - potentially-breaking change: "method" in the options hash is now treated case-sensitively when matching to an HTTP request (the entry in the OpenAPI document itself is still lower-cased), and also preserves the case when it is returned. - updated bundled schemas to their latest published versions 0.095 2025-09-11 03:38:53Z - updated bundled schemas to their latest published versions 0.094 2025-09-08 19:05:29Z - fix redefinition warning in tests 0.093 2025-09-07 20:32:18Z - fix error in tests exposed by JSON::Schema::Modern 0.618 0.092 2025-09-03 22:49:24Z - removed the 'json_schema_dialect' constructor argument for JSON::Schema::Modern::Document::OpenAPI (use jsonSchemaDialect in the document instead) - the 'openapi_uri' constructor argument for OpenAPI::Modern is no longer required, as it can be calculated from the JSMDO default 0.091 2025-08-16 20:52:35Z - various internal changes to adjust for changes in JSON::Schema::Modern 0.617 0.090 2025-08-04 00:57:05Z - update bundled schemas to their latest versions 0.089 2025-07-31 21:03:29Z - internal changes to JSON::Schema::Modern::Document::OpenAPI with how the evaluator object is stored and tracked 0.088 2025-07-19 17:09:08Z - better type inference for serialized parameters (also looks inside the "allOf" keyword, respects keywords adjacent to "$ref", and now infers null and boolean data using the "type" keyword) 0.087 2025-06-17 21:01:06Z - various fixes to instance and keyword locations in some errors when validating requests and responses - full support for "server urls" when matching URIs against path-items 0.086 2025-06-15 22:58:48Z - allow for "x-*" properties in /paths/* - "debug" option added to OpenAPI::Modern 0.085 2025-04-22 17:42:36Z - no longer resolving error, annotation locations against scheme or host from the HTTP request/response 0.084 2025-04-11 21:10:20Z - no longer require the user to define a custom metaschema when changing jsonSchemaDialect (we dynamically create one for you) - pre-emptive support for '$self' property in the OpenAPI document (to be officially added in v3.2) 0.083 2025-02-28 23:48:29Z - fix Sereal serialization and deserialization hooks - operation_uri is now resolved against the document uri and request uri, just like error locations are 0.082 2025-02-11 02:51:02Z - bump a prereq to work around a mysterious XS bug (RT#159140) 0.081 2025-02-08 19:12:50Z - fix a prereq declaration 0.080 2025-02-07 06:24:48Z - fix incorrect discriminator test, that was added for a change reverted before the OpenAPI v3.1.1 release - fix incorrect traversal semantics that new checks in JSON::Schema::Modern 0.602 would surface - fix a prerequisite declaration for a required HTTP method 0.079 2025-01-31 23:33:40Z - fix use of error modes for changes in JSON::Schema::Modern 0.600 - fix use of document traversal for changes in JSON::Schema::Modern 0.600 0.078 2025-01-27 05:41:19Z - remove use of prototypes combined with signatures (unstable on perls 5.22 through 5.26) 0.077 2025-01-26 21:05:06Z - fix usage of JSON::Schema::Modern::Result objects, in preparation for an upcoming deprecation of boolean overloads 0.076 2024-12-27 22:25:32Z - now supporting $refs in path-item objects (e.g. those under /paths/) 0.075 2024-12-22 19:51:49Z - now using metaschemas published for OpenAPI 3.1.1 in November 2024. 0.074 2024-12-14 18:07:54Z - some adjustments to error messages and locations when matching a provided request uri against /paths/* entries in an openapi document 0.073 2024-11-02 23:33:29Z - fix test that would break with the latest JSON::Schema::Modern (0.594) 0.072 2024-10-24 16:36:44Z - fix module loading, for downstream dependencies (broken in 0.071) 0.071 2024-10-20 23:18:32Z - fix tests that changed their output with JSON::Schema::Modern 0.592 0.070 2024-10-07 20:57:24Z - fix use of document traversal for changes in JSON::Schema::Modern 0.591 0.069 2024-09-28 23:34:35Z - adjust for changes in JSON::Schema::Modern 0.591 (which deprecate a form of "add_schema") 0.068 2024-09-14 23:35:47Z - path-item+operation lookup can now be performed by operation_id alone (a valid usecase for response validation) 0.067 2024-07-27 23:55:46Z - fix path template regex to allow for [/?#] characters in capture names 0.066 2024-07-13 23:27:00Z - now preserving the numeric/string type of any path capture values passed in via the $options hash, while still evaluating path parameter values as both strings and numbers 0.065 2024-05-25 23:56:08Z - BREAKING CHANGE: path_item_uri is dropped from the populated $options hash in validate_request, validate_response, and find_path, and replaced with operation_uri (note that the path-item uri is always one level up) - add support for "allowEmptyValue" option in query parameter descriptions 0.064 2024-05-07 00:14:00Z - fix: requests with an empty URI path (e.g. "https://example.com?foo=1") now matches path "/". - fix: preserve all headers of the same name when validating a Plack::Response object - support added for validation of Catalyst::Request and Catalyst::Response objects 0.063 2024-04-27 22:26:47Z - the url scheme of absoluteKeywordLocations in errors is now taken from the incoming request, rather than always being "https" - fix matching of request uri against path templates so that all characters are matched literally, not treated as regexes 0.062 2024-04-21 18:11:43Z - BREAKING CHANGE: operation_path is dropped from the populated $options hash in validate_request, validate_response, and find_path, and replaced with path_item_uri (note this changed again to operation_uri in v0.065) - "servers" entries are now allowed in openapi documents, but they are not yet considered when matching URIs to paths 0.061 2024-04-01 05:33:15Z - fixed incompatibility with an internal change in JSON::Schema::Modern 0.583 0.060 2024-03-20 20:56:37Z - remove use of JSON::MaybeXS, to avoid potential use of JSON::XS; now we use Cpanel::JSON::XS or JSON::PP directly, using the same environment variables as in Mojo::JSON for customization. 0.059 2024-02-10 02:29:14Z - now being more strict on conversions from LWP and Plack requests/responses to Mojolicious types 0.058 2024-01-18 04:37:30Z - bump internal version requirement for Math::BigInt 0.057 2024-01-15 18:36:19Z - fix OAS vocabulary definitions for changes in JSON::Schema::Modern 0.579 0.056 2023-12-31 17:26:55Z - bump optional dependency on HTTP::Headers::Fast for a psgi interface (GH#70) 0.055 2023-12-31 06:21:46Z - fix incompatibility with JSON::Schema::Modern 0.578 0.054 2023-12-20 19:41:20Z - now making use of "recommended_response" in JSON::Schema::Modern to recommend an HTTP response code and message to use after certain request validation failures 0.053 2023-12-13 05:01:33Z - no longer improperly reporting 4xx response errors as validation failures when message has actually been transmitted 0.052 2023-11-26 23:48:32Z - "recursive_get" now optionally takes a target entity type - support added for validation of Plack::Request and Plack::Response objects 0.051 2023-11-13 01:02:33Z - Content-Length checking is now more properly consistent with RFC9112; some users of HTTP::Request and ::Response objects may need to make adjustments in their tests to be compliant - track all subschema locations, not just schema roots, for better $ref verification 0.050 2023-11-06 03:10:15Z - fix construction of an OpenAPI::Modern object with a pre-constructed JSON::Schema::Modern::Document::OpenAPI object - "recursive_get" moved from JSON::Schema::Modern::Document::OpenAPI to OpenAPI::Modern - when validating header strings against a string schema, no longer parse out internal whitespace surrounding commas (to use RFC9112 semantics, validate as an array). 0.049 2023-10-29 01:01:38Z - fix "recursive_get" to take a uri-reference, rather than a json pointer - fix some "discriminator" tests that fail with JSON::Schema::Modern 0.574, and some inconsistencies with the spec 0.048 2023-10-04 05:34:44Z - now validating all headers of a given name, not just the first, when provided on the request/response as separate lines - multiple headers of the same name can be validated as an array or object as per deserialization rules in the OpenAPI v3.1 specification. 0.047 2023-09-19 04:29:16Z - strings are now treated as numbers without requiring the "type" keyword, and only from parameters, not message bodies, and only when no media type is provided - new "recursive_get" method on JSON::Schema::Modern::Document::OpenAPI for fetching a specification at a json pointer and following any $refs (note this interface has changed in 0.049 and 0.050) 0.046 2023-06-24 21:56:39Z - extra validation for Transfer-Encoding response header 0.045 2023-06-06 04:15:18Z - fix test for changes in JSON::Schema::Modern 0.567 - now ensuring that $ref locations are to the correct entity type 0.044 2023-05-23 02:08:54Z - revert changes to YAML parsing in 0.043, pending fixes to YAML::XS 0.043 2023-05-11 04:36:24Z - properly detect, and fail early, on badly-parsed request or response objects 0.042 2023-04-08 21:22:13Z - improvements to some errors resulting from parsing an invalid OpenAPI document 0.041 2023-03-13 02:47:59Z - now detecting and erroring on two /paths with the same template semantics - handle new callback behaviour in JSON::Schema::Modern 0.565 0.040 2023-02-18 23:43:50Z - all request and response validation are now done with Mojo::Message::Request and ::Response objects, converting from HTTP::Request and HTTP::Response as needed; the $options hash is now populated with the mojo request 0.039 2023-02-11 23:23:17Z - BREAKING CHANGE: find_path now takes one argument, not two; the $request object is now passed with the $options hash. - the $options hash populated by validate_request, validate_response and find_path now includes the request object, when available 0.038 2023-01-15 18:51:02Z - fix vocabulary tests with TJSA 1.018 - fix test for compatibility with JSM 0.561 0.037 2022-11-27 23:57:29Z - added operation_path to the options hash returned from find_path, validate_request, validate_response 0.036 2022-11-19 22:30:06Z - fix some media-type test cases to accomodate changes in JSON::Schema::Modern 0.558 0.035 2022-11-12 20:53:54Z - fixes to media-type parsing: correctly ignore any charset included with non-text Content-Types, and always interpret application/json as charset=utf-8 as per RFC8259 ยง11 0.034 2022-10-15 20:15:34Z - removed validation of readOnly properties in request bodies and writeOnly values in response bodies - bundled OAS v3.1 schemas have been updated to the 2022-10-07 edition 0.033 2022-09-18 23:10:04Z - bump dependency on JSON::Schema::Modern, to pick up changes to error output when an openapi document is invalid 0.032 2022-08-13 23:17:31Z - error when a uri path specification contains duplicate capture names 0.031 2022-06-01 03:59:14Z - fix error when request or response body schema is empty (since v0.028) - use a custom error message with false schemas (to indicate the entire entity is forbidden) 0.030 2022-05-26 05:17:26Z - prohibit request bodies for HEAD and GET request unless requestBody explicitly specified, as this is a smuggling vector 0.029 2022-05-16 04:20:20Z - fix missing prereq for result serialization tests 0.028 2022-05-14 21:11:50Z - now only checking for readOnly values in request bodies and writeOnly values in response bodies (not path parameters/headers/query parameters). 0.027 2022-05-01 01:41:48Z - permit the use of unevaluatedProperties, unevaluatedItems in openapi subschemas, and collect annotations into the evaluation result - now checking for readOnly values in requests and writeOnly values in responses 0.026 2022-04-23 16:48:26Z - fix installation of sharedir files when fallback installers (ExtUtils::MakeMaker or Module::Build) are used 0.025 2022-04-03 19:58:27Z - find_path no longer returns an undef operation_id when there is no operationId defined in the schema document 0.024 2022-03-25 23:41:04Z - operation_id and method are now always returned in the options hash in validate_request, validate_response, find_path 0.023 2022-03-12 00:25:21Z - get_operationId has been renamed to get_operationId_path - updated bundled schemas from 2021-09-28 versions to 2022-02-27 0.022 2022-02-16 06:00:37Z - construction with an invalid document is handled more nicely - added new dialect schema share/strict-schema.json to the list of available schemas, which prohibits unrecognized keywords - added custom LICENSE to schema files copied from github.com/OAI/OpenAPI-Specification - distribution is renamed from JSON-Schema-Modern-Document-OpenAPI to OpenAPI-Modern 0.021 2022-02-11 04:44:05Z - absolute locations in errors are now resolved against the request's Host header (reverted in v0.085) 0.020 2022-02-10 02:56:46Z - validation methods and find_path now also accept the HTTP request method as an option - the request object is no longer required as an argument to find_path - validate_request, validate_response now also support Mojolicious request and response objects 0.019 2022-01-23 08:17:30Z - some instanceLocations in errors from validate_request and validate_response have changed to be more specific regarding the source of the error - find_path is now a public method of OpenAPI::Modern, factored out of validate_request and validate_response to enable third-party callers to reuse information between these two method calls 0.018 2022-01-17 23:37:05Z - fix parsing of escaped characters in URI paths and capture values 0.017 2022-01-17 18:33:07Z - remove erroneous logic when checking the "discriminator" keyword - user-provided path_template, path_captures and operation_id are all verified against the request URI - path_template, operation_id and path_captures are no longer required arguments for validate_request, validate_response 0.016 2022-01-06 04:22:20Z - fix the prereq specification for YAML::PP 0.015 2021-12-31 21:17:11Z - load Math::BigInt before attempting to use it 0.014 2021-12-30 05:38:03Z - use bignums in JSON::Schema::Modern to properly support int32, int64 numeric formats 0.013 2021-12-22 19:23:30Z - support */* as a media-type in a content specification, to indicate valiation checks that can be performed on any content type (e.g. length) - add support for OAS-specific formats: int32, int64, float, double, password 0.012 2021-12-17 06:39:38Z - properly handle a missing Content-Length header alongside a non-zero-length body payload 0.011 2021-12-16 06:17:57Z - spurious validation errors fixed when request body is empty, yet not required 0.010 2021-12-11 23:11:43Z - OpenAPI metaschemas are now also available via URIs ending in .../latest - improved error messaging when a media-type or charset decoder fails - improved handling of HTTP headers 0.009 2021-12-06 05:55:01Z - validation no longer errors on a missing media type if the corresponding schema is empty (true) - validate_request and validate_response now accept an operation_id instead of a path_template for looking up the endpoint specification in the openapi document - treat Content-Type headers and media-type entries in openapi documents case-insensitively, and also match wildcards (image/jpg falls back to image/* or */*) 0.008 2021-12-03 05:33:29Z - process response headers in canonical order 0.007 2021-12-02 05:43:34Z - properly handle missing message bodies, with possibly a mising Content-Type header as well - better type handling for numeric strings and stringy numbers - detect and handle infinite recursion while evaluating 0.006 2021-12-01 05:22:01Z - support media type encodings in parameters 0.005 2021-11-30 06:22:10Z - performance improvements when loading and parsing documents - extract and cache all operationIds in the document 0.004 2021-11-28 22:09:01Z - implemented validate_response() - when validating requests and responses, values that look like numbers, and are evaluated as numbers in schemas, are now coerced to numbers automatically 0.003 2021-11-26 01:01:47Z - OpenAPI::Modern is born 0.002 2021-11-17 05:49:29Z - minimum Perl version raised to 5.20 - embedded schemas are now traversed for resource URIs 0.001 2021-11-10 04:50:17Z - Initial release.