Skip to content

Releases: go-goyave/goyave

Release v3.0.1

12 Sep 20:04
964aaa6
Compare
Choose a tag to compare
  • Fixed a bug that prevented root-level routes with an empty path (/) to be matched.

Release v3.0.0

10 Sep 14:27
35d2743
Compare
Choose a tag to compare
  • Changed conventions:
    • validation.go and placeholders.go moved to a new http/validation package.
    • Validation rule sets are now located in a request.go file in the same package as the controller.
  • Validation system overhaul, allowing rule sets to be parsed only once instead of every time a request is received, giving better overall performance. This new system also allows a more verbose syntax for validation, solving the comma rule parameter value and a much easier use in your handlers.
    • Rule functions don't check required parameters anymore. This is now done when the rules are parsed at startup time. The amount of required parameters is given when registering a new rule.
    • Optimized regex-based validation rules by compiling expressions once.
    • A significant amount of untested cases are now tested.
    • The following rules now pass if the validated data type is not supported: greater_than, greater_than_equal, lower_than, lower_than_equal, size.
    • Type-dependent rules now try to determine what is the expected type by looking up in the rule set for a type rule. If no type rule is present, falls back to the inputted type. This change makes it so the validation message is correct even if the client didn't input the expected type.
    • Fixed a bug triggering a panic if the client inputted a non-array value in an array-validated field.
  • Routing has been improved by changing how validation and route-specific middleware are registered. The signature of the router functions have been simplified by removing the validation and middleware parameters from Route(), Get(), Post(), etc. This is now done through two new chainable methods on the Route: route.Validate() and route.Middleware().
  • Log Formatter now receive the length of the response (in bytes) instead of the full body.
  • Configuration system has been revamped.
    • Added support for tree-like configurations, allowing for better categorization. Nested values can be accessed using dot-separated path.
    • Improved validation: nested entries can now be validated too and all entries can have authorized values. Optional entries can now be validated too.
    • Improved support for slices. The validation system is also able to check slices.
    • Entries that are validated with the int type are now automatically converted from float64 if they don't have decimal places. It is no longer necessary to manually cast float64 that are supposed to be integers.
    • More openness: entries can be registered with a default value, their type and authorized values from any package. This allows config entries required by a specific package to be loaded only if the latter is imported.
    • Core configuration has been sorted in categories. This is a breaking change that will require you to update your configuration files.
    • Entries having a nil value are now considered unset.
    • Added accessors GetInt() and GetFloat().
    • Added slice accessors: GetStringSlice(), GetBoolSlice(), GetIntSlice(), GetFloatSlice()
    • Added LoadFrom(), letting you load a configuration file from a custom path.
    • Added the ability to use environment variables in configuration files.
    • Bug fix: config.IsLoaded() returned true even if config failed to load.
    • maxUploadSize config entry now supports decimal places.
  • Database improvements
    • Goyave has moved to GORM v2. Read the release note to learn more about what changed.
    • Protect the database instance with mutex.
    • database.Close() can now return errors.
    • Added database connection initializers.
    • Added the ability to regsiter new SQL dialects to use with GORM.
    • Use utf8mb4 by default in database options.
    • Added a short alias for database.GetConnection(): database.Conn().
    • Factories now use batch insert.
    • Factories now return interface{} instead of []interface{}. The actual type of the returned value is a slice of the the type of what is returned by your generator, so you can type-assert safely.
  • Status handlers improvements
    • Export panic and error status handlers so they can be expanded easily.
    • Added goyave.ValidationStatusHandler(), a status handler for validation errors. Therefore, the format in which validation errors are sent to the client can be customized by using your own status handler for the HTTP status 400 and 422.
  • goyave.Response improvements
    • response.Render and response.RenderHTML now execute and write the template to a bytes.Buffer instead of directly to the goyave.Response. This allows to catch and handle errors before the response header has been written, in order to return an error 500 if the template doesn't execute properly for example.
    • Added response.GetStacktrace(), response.IsEmpty() and response.IsHeaderWritten().
    • Re-organised the goyave.Response structure fields to save some memory.
    • Removed deprecated method goyave.CreateTestResponse(). Use goyave.TestSuite.CreateTestResponse() instead.
  • Recovery middleware now correctly handles panics with a nil value.
  • Test can now be run without the -p 1 flag thanks to a lock added to the goyave.RunTest method. Therefore, goyave.TestSuite still don't run in parallel but are safe to use with the typical test command.
  • Cache the regex used by helper.ParseMultiValuesHeader() to improve performance. This also improves the performance of the language middleware.
  • Bug fix: data under validation wasn't considered from JSON payload if the content type included the charset.
  • The Gzip middleware will now skip requests that have the Upgrade HTTP header set to any value.
  • response.String() and response.JSON() don't write header before calling Write anymore. This behavior prevented middleware and chained writers to alter the response headers.
  • Added goyave.PreWriter interface for chained writers needing to alter headers or status before they are written.
    • Even if this change is not breaking, it is recommended to update all your chained writers to call PreWrite() on their child writer if they implement the interface.
    • Thanks to this change, a bug with the gzip middleware has been fixed: header Content-Length wasn't removed, resulting in false information sent to the clients, which in turn failed to decompress the response.

Read the upgrade guide here.

Pre-release v3.0.0-rc2

31 Aug 13:49
63d46ce
Compare
Choose a tag to compare
Pre-release
  • Use utf8mb4 by default in database options.
  • Added goyave.ValidationStatusHandler(), a status handler for validation errors. Therefore, the format in which validation errors are sent to the client can be customized by using your own status handler for the HTTP status 400 and 422.
  • Cache the regex used by helper.ParseMultiValuesHeader() to improve performance. This also improves the performance of the language middleware.
  • Added a short alias for database.GetConnection(): database.Conn().
  • Updated documentation.

Pre-release v3.0.0-rc1

24 Aug 11:35
6674a5b
Compare
Choose a tag to compare
Pre-release
  • Changed conventions:
    • validation.go and placeholders.go moved to a new http/validation package.
    • Validation rule sets are now located in a request.go file in the same package as the controller.
  • Validation system overhaul, allowing rule sets to be parsed only once instead of every time a request is received, giving better overall performance. This new system also allows a more verbose syntax for validation, solving the comma rule parameter value and a much easier use in your handlers.
  • Routing has been improved by changing how validation and route-specific middleware are registered. The signature of the router functions have been simplified by removing the validation and middleware parameters from Route(), Get(), Post(), etc. This is now done through two new chainable methods on the Route: route.Validate() and route.Middleware().
  • Log Formatter now receive the length of the response (in bytes) instead of the full body.
  • Configuration system has been revamped.
    • Added support for tree-like configurations, allowing for better categorization. Nested values can be accessed using dot-separated path.
    • Improved validation: nested entries can now be validated too and all entries can have authorized values. Optional entries can now be validated too.
    • Entries that are validated with the int type are now automatically converted from float64 if they don't have decimal places. It is no longer necessary to manually cast float64 that are supposed to be integers.
    • More openness: entries can be registered with a default value, their type and authorized values from any package. This allows config entries required by a specific package to be loaded only if the latter is imported.
    • Core configuration has been sorted in categories. This is a breaking change that will require you to update your configuration files.
    • Entries having a nil value are now considered unset.
    • Added accessors GetInt() and GetFloat().
    • Added LoadFrom(), letting you load a configuration file from a custom path.
    • Added the ability to use environment variables in configuration files.
    • Bug fix: config.IsLoaded() returned true even if config failed to load.
  • Rule functions don't check required parameters anymore. This is now done when the rules are parsed at startup time. The amount of required parameters is given when registering a new rule.
  • Optimized regex-based validation rules by compiling expressions once.
  • A significant amount of untested cases are now tested.
  • Protect the database instance with mutex.
  • Recovery middleware now correctly handles panics with a nil value.
  • The following rules now pass if the validated data type is not supported: greater_than, greater_than_equal, lower_than, lower_than_equal, size.
  • Type-dependent rules now try to determine what is the expected type by looking up in the rule set for a type rule. If no type rule is present, falls back to the inputted type. This change makes it so the validation message is correct even if the client didn't input the expected type.
  • Fixed a bug triggering a panic if the client inputted a non-array value in an array-validated field.
  • response.Render and response.RenderHTML now execute and write the template to a bytes.Buffer instead of directly to the goyave.Response. This allows to catch and handle errors before the response header has been written, in order to return an error 500 if the template doesn't execute properly for example.
  • Test can now be run without the -p 1 flag thanks to a lock added to the goyave.RunTest method. Therefore, goyave.TestSuite still don't run in parallel but are safe to use with the typical test command.
  • maxUploadSize config entry now supports decimal places.
  • Added database connection initializers.
  • Re-organised the goyave.Response structure fields to save some memory.
  • Added the ability to regsiter new SQL dialects to use with GORM.
  • database.Close() can now return errors.
  • Added response.GetStacktrace(), response.IsEmpty() and response.IsHeaderWritten().
  • Removed deprecated method goyave.CreateTestResponse(). Use goyave.TestSuite.CreateTestResponse() instead.
  • Export panic and error status handlers so they can be expanded easily.

Release v2.10.2

02 Jul 13:50
1aad461
Compare
Choose a tag to compare
  • Fixed a bug in body parsing middleware preventing json body to be parsed if a charset was provided.

Release v2.10.1

09 May 13:24
fd25df3
Compare
Choose a tag to compare
  • Changed the behavior of response.File() and response.Download() to respond with a status 404 if the given file doesn't exist instead of panicking.
  • Improved error handling:
    • log.Panicf is not used anymore to print panics, removing possible duplicate logs.
    • Added error checks during automatic migrations.
    • goyave.Start() now exits the program with the following error codes:
      • 2: Panic (server already running, error when loading language files, etc)
      • 3: Configuration is invalid
      • 4: An error occurred when opening network listener
      • 5: An error occurred in the HTTP server

This change will require a slightly longer main function but offers better flexibility for error handling and multi-services.

if err := goyave.Start(route.Register); err != nil {
	os.Exit(err.(*goyave.Error).ExitCode)
}
  • Fixed a bug in TestSuite: HTTP client was re-created everytime getHTTPClient() was called.
  • Fixed testing documentation examples that didn't close http response body.
  • Documentation meta improvements.
  • Protect JSON requests with maxUploadSize.
  • The server will now automatically return 413 Payload Too Large if the request's size exceeds the maxUploadSize defined in configuration.
  • The request parsing middleware doesn't drain the body anymore, improving native handler compatibility.
  • Set a default status handler for all 400 errors.
  • Fixed a bug preventing query parameters to be parsed when the request had the Content-Type: application/json header.
  • Added a dark theme for the documentation. It can be toggled by clicking the moon icon next to the search bar.

v2.10.0

23 Apr 09:02
c590e63
Compare
Choose a tag to compare
  • Added router Get, Post, Put, Patch, Delete and Options methods to register routes directly without having to specify a method string.
  • Added placeholder support in regular language lines.

Release v2.9.0

08 Apr 09:54
91295e4
Compare
Choose a tag to compare
  • Added hidden fields.
  • Entirely removed Gorilla mux. This change is not breaking: native middleware still work the same.

Release v2.8.0

25 Mar 14:47
4fb20d3
Compare
Choose a tag to compare
  • Added a built-in logging system.
    • Added a middleware for access logs using the Common Log Format or Combined Log Format. This allows custom formatters too.
    • Added three standard loggers: goyave.Logger, goyave.AccessLogger and goyave.ErrLogger
  • Fixed bug: the gzip middleware now closes underlying writer on close.

Release v2.7.1

12 Mar 09:13
73388b3
Compare
Choose a tag to compare
  • Changed MIME type of js and mjs files to text/javascript. This is in accordance with an IETF draft that treats application/javascript as obsolete.
  • Improved error handling: stacktrace wasn't relevant on unexpected panic since it was retrieved from the route's request handler therefore not including the real source of the panic. Stacktrace retrieval has been moved to the recovery middleware to fix this.