- The Diet template compiler now supports includes and recursive extensions/layouts
- The REST interface now uses fully qualified names and local imports to resolve parameter/return types, making it much more robust (by Михаил Страшун aka mist)
- Implemented TCP/UDP sockets for the Win32 driver
- Implemented a directory watcher for the Win32 driver
- Removed
vibe.textfilter.ddoc
- now in http://github.com/rejectedsoftware/ddox - Cleaned up command line handling (e.g. application parameters are now separated from vibe parameters by --)
- Dependencies in package.json can now have "~master" as the version field to take the lastest master version instead of a tagged version
- Renamed
UrlRouter.addRoute()
toUrlRouter.match()
- Moved Path into its own module (
vibe.inet.path
) - Task local storage is now handled directly by
Task
instead of invibe.core.core
- (de)serialze(To)(Json/Bson) now support type customization using (to/from)(Json/Bson) mmethods
- (de)serialze(To)(Json/Bson) now strip a trailing underscore in field names, if present - allows to use keywords as field names
Json.opt!()
is now much faster in case of non-existent fields- Implemented
InputStream.readAllUtf8()
- strips BOM and sanitizes or validates the input - Added RandomAccessStream interface
- Implemented a github like variant of Markdown more suitable for marking up conversation comments
- Made ATX header and automatic link detection in the Markdown parser stricter to avoid false detections
- Added
setPlainLogging()
- avoids output of thread and task id - Avoiding some bogous error messages in the HTTP server (when a peer closes a connection actively)
- Renamed the string variant of
filterHtmlAllEscape()
tohtmlAllEscape()
to match similar functions
- Fixed a possible endless loop in
ZlibInputStream
- now triggers anassertion instead; Still suffering from http://d.puremagic.com/issues/show_bug.cgi?id=8779 - Fixed handling of escaped characters in Diet templates and dissallowed use of "##" to escape "#"
- Fixed "undefined" appearing in the stringified version of JSON arrays or objects (they are now filtered out)
- Fixed the error message for failed connection attempts
- Fixed a bug in
PoolAllocator.realloc()
that could cause a range violation or corrupted memory
- Added support for UDP sockets
- The reverse proxy now adds the headers "X-Forwarded-For" and "X-Forwarded-Host"
MongoCollection.findAndModify
returns the resulting object only now instead of the full reply of the protocol- Calling
MongoCollection.find()
without arguments now returns all documents of the collection - Implemented "vibe init" to generate a new app skeleton (by 1100110)
- The application's main module can now also be named after the package name instead of 'app.d' (by 1100110)
- The default user/group used on Linux for priviledge lowering has been renamed to 'www-vibe' to avoid name clashes with possibly existing users named 'vibe' (by Jordy Sayol)
BsonBinData
is now converted to a Base-64 encoded string when the BSON value is converted to a JSON valueBsonDate
now hastoString
/fromString
for an ISO extended representation so that its JSON serialization is now a string- The Diet parser now supports string interpolations inside of style and script tags.
- The Diet parser now enforces proper indentation (i.e. the number of spaces used for an indentation level has to be a multiple of the base indent)
- The Diet parser now supports unescaped string interpolations using !{}
- The JSON de(serializer) now supports pointer types
- Upgraded libevent to v2.0.20 and OpenSSL to v1.0.1c on Windows
- The Win32 driver now has a working Timer implementation
OutputStream
now has an output range interface for the types ubyte and char- The logging functions use 'auto ref' instead of 'lazy' now to avoid errors of the kind "this(this) is not nothrow"
- The markdown text filter now emits XHTML compatible
tags instead of
(by cybevnm) - The REST interface generator now uses plain strings instead of JSON for query strings and path parameters, if possible
- The
UrlRouter
now URL-decodes all path parameters
- Fixed a null dereference for certain invalid HTTP requests that caused the application to quit
- Fixed
setTaskStackSize()
to actually do anything (the argument was ignored somwhere along the way to creating the fiber) - Fixed parameter name parsing in the REST interface generator for functions with type modifiers on their return type (will be obsolete once __traits(parameterNames) works)
- Fixed a too strict checking of email adresses and using
std.net.isemail
now to perform proper checking on DMD 2.060 and up - Fixed JSON deserialization of associative arrays with a value type different than 'string'
- Fixed empty peer fields in
HttpServerRequest
when the request failed to parse properly - Fixed
yield()
calls to avoid stack overflows and missing I/O events due to improper recursion - Fixed the Diet parser to allow inline HTML as it should
- Fixed the Diet parser to actually output singular HTML elements as singular elements
- Fixed tight loops with
yield()
not causing I/O to stop in the win32 back end - Fixed code running from within
static this()
not being able to use vibe.d I/O functions - Fixed a "memory leak" (an indefinitely growing array)
- Fixed parsing of one-character JSON strings (by Михаил Страшун aka mist)
- Fixed the Diet parser to not HTML escape attributes and to properly escape quotation marks (complying with Jade's behavior)
- Fixed the Diet parser to accept an escaped hash (#) as a way to avoid string interpolations
- Fixed a bug in MongoDB cursor end detection causing spurious exceptions
- Fixed the Markdown parser to now recognize emphasis at the start of a line as an unordered list
- Fixed the form parsing to to not reject a content type with character set specification
- Fixed parsing of unicode character sequences in JSON strings
- Fixed the 100-continue response to end with an empty line
- Compiles with DMD 2.060
- Some considerable improvements and fixes for the REST interface generator - it is now also actually used and tested in another project
- MongoDB supports
mongodb://
URLs for specifying various connection settings instead of just host/port (by David Eagen) - Added
RestInterfaceClient.requestFilter
to enable authentication and similar add-on functionality - JSON floating-point numbers are now stringified with higher precision
- Improved const-correctness if the Bson struct (by cybevnm)
- Added
setIdleHandler()
to enable tasks that run when all events have been processed - Putting a '{' at the end of a D statement in a Diet template instead of using indentation for nesting will now give an error
- API documentation improvements
- The HTTP server now allows query strings that are not valid forms (github issue #73)
- A good amount of performance tuning of the HTTP server
- Implemented
vibe.core.core.yield()
. This can be used to break up long computations into smaller parts to reduce latency for other tasks - Added setup-linux.sh and setup-mac.sh scripts that set a symlink in /usr/bin and a config file in /etc/vibe (Thanks to Jordi Sayol)
- Installed VPM modules are now passed as version identifiers "VPM_package_xyz" to the application to allow for optional features
- Improved serialization of structs/classes to JSON/BSON - properties are now serialized and all non-field/property members are now ignored
- Added directory handling functions to
vibe.core.file
(not using asynchronous operations, yet) - Improved the vibe shell script's compatibility
- Fixed
TcpConnection.close()
for the libevent driver - this caused hanging page loads in some browsers - Fixed MongoDB connection handling to avoid secondary assertions being triggered in case of exceptions during the communication
- Fixed JSON (de)serialization of structs and classes (member names were wrong)
- Fixed
(filter)urlEncode
for character values < 0x10
- Restructured the examples - each example is now a regular vibe.d application (also fixes compilation using run_example)
- The REST interface generator now supports sub interfaces which are mapped to sub paths in the URL
- Added
InjectedParams!()
to access parameters injected using inject!() - The vibe script and VPM now do not write to the application directory anymore if not necessary
- Implement more robust type handling in the REST client generator
- Fixed a possible exception in
ZlibInputStream
at the end of the stream
- Added support for multipart/form-data and file uploads
- Rewrote the Markdown parser - it now does not emit paragraphs inside list elements if no blank lines are present and handles markdown nested in quotes properly
- The SMTP client supports STARTTLS and PLAIN/LOGIN authentication
- The Diet parser now supports generic :filters using
registerDietTextFilter()
- :css, :javascript and :markdown are already built-in - VPM now can automatically updates dependencies and does not query the registry at every run anymore
- Added
vibe.templ.utils.inject
which allows to flexibly stack together request processors and inject variables into the final HTML template (thanks to simendsjo for the kick-off implementation) - Removed
InputStream.readAll()
andreadLine()
and replaced them by UFCS-able global functions + addedreadUntil()
- Added
ConnectionPool
to generically manage reuse of persistent connections (e.g. for databases) - The
HttpClient
(and thus the reverse proxy) now uses a connection pool to avoid continuous reconnects - On *nix now uses pkg-config to find linker dependencies if possible (dawgfoto)
- The static HTTP file server now resolves paths with '.' and '..' instead of simply refusing them
- Implemented handling of
HttpServerSettings.maxRequestTime
- Added
setLogFile()
- The vibe.cmd script now works with paths containing spaces
Libevent2TcpConnection
now enforces proper use ofacquire()/release()
- Improved stability in conjunction with TCP connections
- Upgraded libevent to 2.0.19 on Windows
- Hotfix release, fixes a bug that could cause a connection to be dropped immediately after accept
- Added support for timers and
sleep()
- Proper timeout handling for Connection: keep-alive is in place - fixes "Operating on closed connection" errors
- Setting DFLAGS to change compiler options now actually works
- Implemented
SslStream
, wich is now used instead of libevent's SSL code - fixes a hang on Linux/libevent-2.0.16 - The REST interface generator now supports
index()
methods and 'id' parameters to customize the protocol - Changed the type for durations from
int/double
toDuration
- Using Deimos bindings now instead of the custom ones
- Performance tuning
- Added
vibe.utils.validation
- Various fixes and improvements
- Initial development release version