redstone 0.6.0-beta.1+4 redstone: ^0.6.0-beta.1+4 copied to clipboard
A metadata driven microframework for Dart
##v0.6.0-beta.1
NOTE: this is a pre-release version!
- Updated to shelf 0.6
- Added the optional parameter
headers
tochain.forward()
- Added the
request.handlerPath
property (see shelf.Request.handlerPath) - Bug fixes.
##v0.6.0-alpha.3
NOTE: this is a pre-release version!
- Added new constants for the commons http methods. #80
- Added the
shared
andlogSetUp
optional parameters to thestart()
function
##v0.6.0-alpha.2
NOTE: this is a pre-release version!
- Renamed
request.queryParams
torequest.queryParameters
- Renamed
request.pathParams
torequest.urlParameters
- Fix support for websocket connections
- Fix code comments to match the new API
##v0.6.0-alpha.1
NOTE: this is a pre-release version!
-
Version highlights:
- Fully rewritten from scratch! (The code base now has a better library layout, which is easier to maintain and evolve)
- Polished API (see breaking changes)
- Added the
chain.forward()
function, which allows routes, interceptors and error handlers to internally dispatch a request to another resource - Added the
chain.createResponse()
function, which can be used to easily createshelf.Response
objects - Better support for
async/await
(see breaking changes)
-
BREAKING CHANGES:
- Renamed
redstone/server.dart
toredstone/redstone.dart
- Renamed
QueryMap
toDynamicMap
- Removed
Route.matchSubPaths
property (route_hierarchical
supports this by default now) - Renamed
setUp()
andtearDown()
toredstoneSetUp()
andredstoneTearDown()
. This avoids conflicts with the unittest package, if redstone is imported without a lib prefix. redstoneSetUp()
now returns aFuture
. You need to wait for its completion before dispatching any request.- Removed
authenticateBasic()
top level function - Moved
parseAuthorizationHeader()
top level function to therequest
object (request.parseAuthorizationHeader()
) - Removed the
chain.interrupt()
function. - The
chain.next()
andchain.abort()
functions now return aFuture<shelf.Response>
. It's necessary to wait for the completion of the returned future when calling one of these functions, although, it's now possible to use them with async/await expressions. See the example below. - The
chain.redirect()
function now returns ashelf.Response
- Redstone now generates an error page for every response which status code is less than 200, or greater than 299. To prevent this behavior, set
showErrorPage
to false - For interceptors and error handlers, it's now necessary to annotate injectable parameters with
@Inject
. Although, they now also accept the@Attr
annotation, which binds a parameter with a request attribute. - Plugin API: Some methods of the
Manager
object are now getters. - Plugin API: Renamed
RouteHandler
toDynamicRoute
- Plugin API: Renamed
Handler
toDynamicHandler
- Plugin API:
DynamicRoute
andRouteWrapper
do not receive thepathSegments
map anymore, although, it can be accessed through therequest.pathSegments
property request.queryParams
is now aDynamicMap<String, List<String>>
. Also, you can now use the@QueryParam
annotation withList
objects
- Renamed
Example: CORS Interceptor
import 'package:redstone/redstone.dart';
import "package:shelf/shelf.dart" as shelf;
@Interceptor(r'/.*')
handleCORS() async {
if (request.method != "OPTIONS") {
await chain.next();
}
return response.change(headers: {"Access-Control-Allow-Origin": "*"});
}
- TODO:
- Improve unit tests
- Update plugins (redstone_mapper and redstone_web_socket aren't compatible with this version yet)
- Improve documentation and website
##v0.5.19
v0.5.18 #
- Updated to Grinder v0.6.1 (see documentation)
v0.5.17 #
- Updated dependencies.
- Added the
autoCompress
parameter to thestart()
function. - Added
Route.statusCode
andDefaultRoute.statusCode
parameters.
Note: this version requires Dart 1.7 or above
v0.5.16 #
- Fix: Setting a new value in a
QueryMap
with the dot notation is not working properly.
v0.5.15 #
- Fix: Correctly log an exception when no stack trace is provided
v0.5.14 #
- Fix:
Manager.findMethods()
should include inherited methods.
v0.5.13 #
- Improved plugin API:
- Added the
Manager.getInjector()
andManager.createInjector()
methods, which allow plugins to retrieve objects from di modules more easily. - Added the
Manager.findFunctions()
,Manager.findClasses()
andManager.findMethods()
methods, which allow plugins to scan imported libraries. - Added the
Manager.getShelfHandler()
andManager.setShelfHandler()
methods, which allow plugins to access and replace the current installed shelf handler.
- Added the
v0.5.12 #
- New feature: If a route has
matchSubPaths = true
, the requested subpath can be assigned to a parameter (see issue #36).
v0.5.11 #
- Minor performance fix: Redstone.dart shouldn't create a new
shelf.Pipeline
per request.
v0.5.10 #
- Upgraded to di 2.0.1
v0.5.9 #
- Fix: Redstone.dart can't be used with shelf_web_socket (issue #30).
v0.5.8+1 #
- Fixed docgen issue (see dartdocs log)
v0.5.8 #
- Added support for https (Thanks to vicb PR #26, see documentation)
- Code cleanup (Thanks to vicb PR #29)
- Fix: Properly handle error responses produced by a shelf handler
v0.5.7+2 #
- Improved error handling. See issue #24.
v0.5.7+1 #
- Fixed docgen issue (see dartdocs log)
v0.5.7 #
- Improved plugin API:
- It's now possible to inspect installed routes, interceptors, error handlers and groups.
- Added the
Manager.addRouteWrapper()
method, which allows plugins to modify routes that are annotated with a specific annotation.
v0.5.6 #
- Fixed logging issues.
v0.5.5+1 #
- Fixed issue with docgen.
v0.5.5 #
- Added the
ErrorResponse
class. A route can return or throw an ErrorResponse, to respond a request with a status code different than 200.
v0.5.4 #
- Fix: Response processors are not being invoked when a route returns a
Future
(Plugin API). - Code cleanup (Thanks to vicb PR #20)
- Added the
QueryMap
class, a Map wrapper that allows the use of the dot notation to retreive its values (Thanks to digitalfiz issue #18)app.request.queryParams
,app.request.headers
andapp.request.attributes
now returns a QueryMap.- The request body can also be retrieved as a QueryMap.
- Added the
handleRequest(HttpRequest)
method.
v0.5.3+1 #
- Widen the version constraint for
di
v0.5.3 #
- Improved integration with Shelf
shelf.Request.hijack()
method is now supported (although it does not work in unit tests)- The default error handler now uses the
stack_trace
package to print stack traces.
v0.5.2 #
- Fix: Request's state is being improperly cached (see issue #16).
v0.5.1 #
- Fix: Correctly handle route exceptions.
v0.5.0 #
- Added support for Shelf middlewares and handlers (see documentation)
- BREAKING CHANGE: Redstone.dart will no longer serve static files directly. You can use a Shelf handler for this (see documention)
- BREAKING CHANGE: It's no longer possible to access
HttpRequest
andHttpResponse
. If you need to inspect or modify the response, you can use the globalresponse
object (see documentation) - It's now possible to define multiple routes to the same path (see documentation)
- Added
@DefaultRoute
annotation (see documentation) - Added
serveRequests(Stream<HttpRequest> requests)
method, which is an alternative to thestart()
method.
v0.4.0 #
- Added new annotations:
@Install
and@Ignore
(see documentation) - Added support for plugins (see documentation)
v0.3.1 #
- Renamed project to Redstone.dart
- New and improved documentation
v0.3.0 #
- Added
Route.matchSubPaths
property (see issue #5) - Added
ErrorHandler.urlPattern
property (check documentation for details) - Added request attributes (check documentation for details)
- Added support for dependency injection (check documentation for details)
v0.2.1 #
- Added support for basic authentication (thanks Y12STUDIO for the contribution)
- Added
parseAuthorizationHeader()
method. - Added
authenticateBasic()
method.
- Added
v0.2.0 #
- BREAKING CHANGES (check documentation for more details):
- VirtualDirectory is now configured with
jailRoot = true
andfollowLinks = false
. You can change these flags throughstart()
method. - For security and perfomance reasons, the parse of request body is now delayed as much as possible, so interceptors will receive
null
if they callrequest.body
(although request.bodyType is still filled). If your interceptor need to inspect the request body, you can setInterceptor.parseRequestBody = true
. - Multipart requests (file uploads) are now refused by default. If your method need to receive multipart requests, you can set
Route.allowMultipartRequest = true
. - All arguments of
chain.interrupt()
method are now optional.
- VirtualDirectory is now configured with
- Bug fixes in
abort()
,redirect()
andchain.interrupt()
methods. (see issue #3).
v0.1.2 #
- Fix: bloodless crashes on Dart 1.3.
v0.1.1 #
- Fix: malformed requests can cause a crash
v0.1.0 #
- Bug fixes
- BREAKING CHANGE:
chain.next()
now receives a callback, instead of returning aFuture
- Added new API for unit tests
- Updated documentation
v0.0.4 #
- Fix:
chain.interrupt()
is not closing theHttpResponse
stream
v0.0.3 #
- Added a grinder task to properly copy sever's files to the build folder
- Updated documentation with a better approach for building projects
v0.0.2 #
- Small fix to VirtualDirectory configuration
v0.0.1 #
- First release