========================
0.0.56
========================

- fixed `websocketclient.api()` error handling
- updated file stats by adding `version.build`
- fixed `U.decrypt_data()`
- added `CONF.node_modules` that affects `NPMINSTALL()` method
- replaced `duration2` property with `ts` in the FlowStrem Message
- revitalized code in the `FlowStreamMessage` instance
- improved `Tangular` by adding private helpers per template
- improved `SMTP sender`
- added `NEWTRANSFORM(name, [id], function($, value) {})` registers a new transformation
- added `TRANSFORM(name, value, function(err, value) {})` executes all transformations
- improved response from the ErrorBuilder (empty fields are removed from the response)
- improved built-in sessions by added `return {Number}` to `.update()` and `.refresh()` method
- updated Tangular template engine to `v5`
- extended `$` by adding `uri` property linked with the `controller.req.uri`
- added `NEWTHREAD(name, [data])` method, runs the `/workers/{name}.js` as `worker_threads`
- added `NEWTHREADPOOL(name, count)` method creates a pool for `worker_threads`
- added `NEWFORK(name)` method (a better alternative to the `WORKER()` method), runs the `/workers/{name}.js` as `fork`
- added `NEWMACRO(script)` method for compiling custom Total.js macros
- extended built-in Authorization by adding `opt.auth($)` method for additional authorization
- added `COPY()` alias to `U.copy()`
- added support for promises to `U.ls()` and `U.ls2()` method
- added `QueryBuilder.autoquery()` method
- added `DatabaseBuilder.autoquery()` method
- added `BitExtractor` by [Peter Stolc](https://github.com/a50397)
- added `U.extract(data, [from = 16], [to = 10])` returns `BitExtractor` instance

========================
0.0.55
========================

- fixed `download` command for the CodeEditor
- fixed parsing data in the WebSocket

========================
0.0.54
========================

- `callback` argument is optional in `UIStream.load()`
- `callback` argument is optional in `FlowStream.load()`
- improved measuring of CPU usage
- added `FlowStream.insert(schema, [callback])` method for inserting/modifying specific FlowStream instances
- added `FlowStream.remove(keys, [callback])` method for removing specific FlowStream instances
- added `FlowStream.export_instance(id)` method for exporting instance metadata
- added `FlowStream.export_component(id)` method for exporting component metadata
- added a simple ORM - `DB([conn])` and `NEWDB([conn], callback(builder, next(err, response)))`
- extended `U.reader()` by adding `.assign(ORMQueryBuilder)`
- removed UIStream (replaced by the FlowStream)
- fixed parsing `close` message in the WebSocket & WebSocketClient
- fixed `.autodestroy()` in the WebSocket controller
- added `Database.assign(QueryBuilderData)` method
- added `DatabaseBuilder.assign(QueryBuilderData)` method
- fixed TextDB inserting with symbols for atomic operations
- fixed `$def` in the JSON schemas
- fixed converting Total.js Schema to the JSON Schema
- improved error handling in JSON schemas

========================
0.0.53
========================

- fixed wrong counting of week number in the `Date.format()`
- updated `flowstream.onreconfigure` by adding `init` argument
- updated `flowstreaminstance.configure` by adding `init` argument
- updated `uistream.onreconfigure` by adding `init` argument
- updated `uistreaminstance.configure` by adding `init` argument
- fixed `U.queue()` by [Martin Smola](https://github.com/molda/)
- added `@{input('type', 'name')}` for creating `<input` element
- fixed `@{text()}`, `@{textarea()}`, `@{hidden()}`, `@{radio()}` and `@{checkbox()}` by removing `id` attribute
- fixed traffic indicator in the `flowstreaminstance.newmessage()`
- fixed `op` argument in the `schema.required()`

========================
0.0.52
========================

- extended `index.d.ts` by @Helferino
- fixed cleaning zombie connections in the FlowStream
- added a retry functionality `flowinstance.trigger()` when the FlowStream isn't loaded
- added `flowstream.strict {Boolean}` property (default: `true`)
- extended `flowstream.export([type])` by adding type argument
- added support for promises for the `OPENCLIENT()` method
- added support for promises for the `FileStorage`
- added support for promises for the `HttpFile`
- added support for promises for the `TMSCLIENT().call()` method
- added support for promises for the `Mail.try()` method
- added support for promises for the `REQUEST()` method
- added support for promises for the `EXEC()` method
- added support for promises for the `JSONSCHEMA()` method
- improved RegExp for validating URL addresses by [yetingli](https://github.com/yetingli)
- fixed FlowStream delegate `instance.variables()`
- added FlowStream `instance.replace(str)` for applying variables
- added FlowStream `message.replace(str)` for applying variables (alias for `message.variables()`)
- added Flowstream `message.rewrite(data)` for rewriting message data
- added support for promises for the `FLOWSTREAM().use()`
- (critical) fixed WebSocket implementation for Safari +15

========================
0.0.51
========================

- removed useless spaces from the command-line utility
- added `instance.variables(str)` to the `FlowStream` instance
- (critical) fixed compiling of builds
- improved extensions
- added TMS auto-sync for new or removed pub/sub/rpc
- added transforming `controller.url` to lower-case
- fixed comparing `url` with all registered proxies (`url` address compared as lower-case)
- fixed loading resources via `LOADRESOURCE()`
- fixed `translate` command in the command-line tool
- added `extend` method to the `NEWEXTENSION()`
- added `OPENCLIENT()` method that simplifies work with Total.js Open products
- increased clean-up timeout in the FlowStream
- fixed `EXEC()` with `WebSocketClient` controller
- fixed clean-up of zombie FlowStream connections
- fixed error handling in the WebSocket

========================
0.0.50
========================

- fixed `filestorage.rename()` method
- debug mode skips all `.js` files in the root
- extended `MiddlewareOptions` by adding `url` property
- improved middleware functionality
- improved `HTTP` server in terminal utility
- added a check for existance of this.uri by @fenddigital
- removed `.trim()` from the `String.parseComponet()` method
- fixed cleaning design in the FlowStream
- added a small support for Groups and Tabs into the FlowStream
- fixed API routing with same `paths` with various HTTP methods
- added `path` property to `SchemaOptions`, `OperationOptions`, `TaskOptions`, `AuthOptions` and `MiddlewareOptions`
- added `split` property to `SchemaOptions`, `OperationOptions`, `TaskOptions`, `AuthOptions` and `MiddlewareOptions`
- added `TextDB` internal handlers `instance.oninsert = function(doc)`, `instance.onupdate = function(doc)`, `instance.onremove = function(doc)`
- fixed parsing `object` types for inline schemas via `String.toJSONSchema(name)`
- updated `NEWJSONSCHEMA(name, 'name:String, age:Number')` by adding inline declaring fields
- updated `F.$owner([new_owner])` added a new optional `new_owner` argument
- updated `F.builds` by adding a new meta information
- added `EXTENSION(code, [callback(err, module)])`
- added `F.extensions {Object}` for storing all extensions
- added a new command: `clear_owner` for removing all dependencies for the specific owner
- replaced return from the `controller.sse()` method to `Boolean`
- fixed API routing with `default_root` by [Martin Smola](https://github.com/molda)
- added `F.isBundle` for determining bundles

========================
0.0.49
========================

- fixed typo in the flags in the file route by @fenddigital
- fixed typo in the file route by @KangGeunSu

========================
0.0.48
========================

- updated `GUID()` method by returning a valid GUID value (if the `length` argument is undefined)
- added a new schema type `GUID`
- added `String.isGUID()` for validating GUIDs
- fixed live reload for `.ts` files
- added output log for the hostname of live reload
- improved live reload by sending a filename of changed file
- fixed internal stats
- improved middleware
- added support for inline middleware for `ROUTE()` method in the form `ROUTE('GET / &middlewareA &middlewareB')`
- added `/middleware/` directory for storing middleware
- added `directory_middleware` config key
- added `PATH.middleware()` method
- added `USE(middleware, url, type, [first])` method assigns specified middleware to routes
- replaced `MIDDLEWARE()` to `NEWMIDDLEWARE()` (the old name has remained)

========================
0.0.47
========================

- fixed unhandled error until destroying WebSocket
- added missing properties into the `UIStreamMessage`
- fixed parsing dates (lower than 1.1.1970) in the schemas
- fixed applying `filter` argument in the `BACKUP()` method
- improved bundle generator in the `$ total4` executable
- changed arguments position in the `controller.stream()` method
- improved `end` event in the FlowStream messages
- added `terminate` event to the FlowStream messages
- fixed `pause` state in the outputs in the FlowStream

========================
0.0.46
========================

- added `FILESTORAGE().backup(filename, callback)` method
- added `FILESTORAGE().restore(filename, callback)` method
- added `FILESTORAGE().stream(callback(file, next), [done])` for streaming of meta information for each file
- added `FILESTORAGE().move(id, newid, callback)` method
- added `MEMORIZE()` creates a simple and persistent storage
- improved `FAKE({ id: UID, name: 'string(30)' })` method by adding a support for inline schemas
- added a writing locks to the TextDB engine
- improved performance for `Array.wait()` + added canceling of processing (more in documentation)
- improved performance for `Array.async()` + added canceling of processing (more in documentation)
- fixed `protocol` parser for WebSocket routes
- fixed CSS variables
- added `schema.undefine(name)` for removing of defined field in the schema
- added `options.servicemode` to the start script for running Total.js app without HTTP server
- fixed error status codes
- fixed default root [#24](https://github.com/totaljs/framework4/issues/24)
- fixed JavaScript compressor [#25](https://github.com/totaljs/framework4/issues/25)
- added `flowstream.pause(is)` method
- added `flowstream.paused {Boolean}` property
- added `flowstream_component.pause = function(is) {}` delegate
- fixed saving files in `FILESTORAGE()` in OS Windows
- fixed sending nullable data in the FlowStream
- fixed handling messages in the form `instance.message_<INPUT_NAME>` in the FlowStream
- fixed using `require()` in the components in the FlowStream
- added a support for editing local files via Total.js Code Editor
- extended Total.js terminal app by adding `total4 edit URL_TO_CODE_EDITOR?id=projectid`
- extended `UID([type], [date])`, `UID16([type], [date])` and `UID1([type], [date])` by adding `date` argument
- extended `U.queue(name, max, fn, [param])` by adding the `param` argument
- added `flowmessage.input {String}` for determining input name (alias for `flowmessage.index`)
- added a support dynamic inputs/outputs in the FlowStream
- fixed a problem with multiple spaces in the `controller.runtest()` method
- added support for external operations `OPERATION('https://..fn.js <5 minutes>', console.log)`
- added support for external tasks `TASK('https://..fn.js <5 minutes>', 'init', console.log)`
- allows `.ts` (MPEG stream) and `.m3u8` file types for the web server
- extended `U.getContentType()` by adding `.ts` and `.m3u8` extensions
- extended `NEWCALL()` by adding support for operations

========================
0.0.45
========================

- fixed parsing a lot of items via LDAP
- added `noauth` option to the `LDAP()` method
- added `TMSCLIENT(url, [token], [callback(client)])` that creates a connection to the Total.js Message Service server
- extended Total.js Message Service by adding `call(name, data, callback)` functionality
- added `NEWCALL(name, schema, [callback(data, next)])` that registers `call`
- extended JSON stats by adding `cm` - calls per minute
- added `destroy` event to the `WEBSOCKETCLIENT()`
- fixed `U.extend()` method
- fixed `CLONE()` method
- added `F.extendreq(req)` method
- added `F.extendres(res)` method
- added `F.serverless(req, res, [callback], [types], [cwd])` method
- fixed content-types for `application/*` content types
- improved `NPMINSTALL()` by adding check for existing modules
- added `FILESTORAGE().savejson(id, value, [callback(err, meta)], [custom], [expire])`
- added `FILESTORAGE().readjson(id, callback(err, value, meta))`
- added `FILESTORAGE().readbuffer(id, callback(err, buffer, meta))`
- added `SafeString` type to the Schemas with a check for XSS and SQL Injections
- added `Color` type to the Schemas
- added `Icon` type to the Schemas
- fixed `EACHSCHEMA()` method
- improved schema types `Capitalize`, `Capitalize2` by adding a check for `XSS`
- fixed a bad status code with the usage of `AUTH()` #22
- improved Total.js 4 command-line tool by [Helferino](https://github.com/Helferino/)
- fixed loading of default values from the `default.resource`
- fixed `FILESTORAGE().browse2()` method
- added `FILESTORAGE().rename()` method

========================
0.0.44
========================

- fixed schema error handling with error code `{Number}` as the `err` argument in the `$.callback(err_code, response)` method
- improved error handling in `WEBSOCKETCLIENT()` method
- updated `$` arg by adding `websocket {Boolean}` property in `AUTH($)` delegate
- added support for WebSocket API
- extended `ROUTE('API @websocket_api_name opid *Schema --> operation')` method by adding `@websocketapi_endpoint_name`
- added `websocket.api(url)` automatically processes `ROUTE()` with WebSocket APIs
- extended `ROUTE('SOCKET / @websocket_api_name')` method by adding WebSocket API without action
- added `websocketclient.api()` method
- added `websocketclient.api(schema, [data], [callback], [timeout])` method
- extended `U.copy()` by adding `all` argument
- fixed `array.random(true)` with only the one item
- improved WebSocket ping (updated interval to 20 seconds)
- updated `WebSocketClient.ping(timeout)` by adding `timeout {Number}` argument
- added `WebSocketClient.latency {Number}` with a latency in `ms`
- allowed `.wasm` extension for handling static files
- fixed sending emails via Total.js API services

========================
0.0.43
========================

- added `flowmessage.variables(str, [data])` method
- updated `LOADCONFIG()` supports `hex/base64` encoding
- improved `flowinstance.newmessage(data)` method
- removed method `U.set()`
- removed method `U.get()`
- removed method `U.sync()` and `global.sync()`
- removed method `U.sync2()` and `global.sync2()`

========================
0.0.42
========================

- added support for JSON schemas
- added Total Messaging Service
- added `jsonschemas` directory
- added `schema.jsonschema(name)` method
- added `JSONSCHEMA()` method
- added `NEWJSONSCHEMA()` method
- added `NEWPUBLISH()` method
- added `NEWSUBSCRIBE()` method
- added `PUBLISH()` method
- added `SUBSCRIBE()` method
- added `UNSUBSCRIBE()` method
- added `watcher` event for the main process in `debug` or `release` mode with the watcher
- added HTML escaping for meta tags
- added `WebSocketClient.destroy()` method
- added new command `refresh_cmd`
- added `allow_totalapilogger {Boolean}` option to the configuration
- added `allow_totalapi {Boolean}` option to the configuration
- added `allow_tms {Boolean}` option to the configuration
- added `secret_tms {String}` option to the configuration
- added `schema.jsonschema_define()` method
- added `flowstream.load(components, design, [callback])` method
- added `flowstream.unload(components, design, [callback])` method
- added new delegate `flowstream.onreconfigure = function(instance) {}`
- added new delegate `flowstream.onconnect = function(instance) {}`
- added new delegate `flowstream.ondisconnect = function(instance) {}`
- added new delegate `flowstream.onregister = function(component) {}`
- added new delegate `flowstream.onunregister = function(component) {}`
- added `uistream.load(components, design, [callback])` method
- added `uistream.unload(components, design, [callback])` method
- added new delegate `uistream.onreconfigure = function(instance) {}`
- added new delegate `uistream.onconnect = function(instance) {}`
- added new delegate `uistream.ondisconnect = function(instance) {}`
- added new delegate `uistream.onregister = function(component) {}`
- added new delegate `uistream.onunregister = function(component) {}`
- fixed `Mail.attachmentfs()`
- fixed dynamic routing
- fixed security issue when parsing query arguments (reported by <https://github.com/fl4x>)
- extended `schema.addTask()` by adding a new argument `callback`
- added new method `flowstream.newmessage(data)`
- added new method `flowstream_instance.newmessage(data)`
- added `String.toJSONSchema(name, url)`
- added `bundles.debug` enables watcher for `.src` directory only

========================
0.0.41
========================

- added TypeScript support
- added support for static files in threads
- fixed logging in threads by Tomas Novak
- added `insecure` option to the `REQUEST()` method
- added `builder.insecure()` method to the `RESTBuilder` instance
- added `profile` type to the LDAP options
- extended `base64` by adding support for `content-type;base64,data` format
- updated `schema.define(key, type, required, [default_error_message])`
- fixed `String.encrypt_uid()`
- fixed `$.keys` in schemas with multiple operations
- fixed wildcard routing combinated with dynamic arguments

========================
0.0.40
========================

- added `U.reader().list()` method
- added `Array.findValue()`
- added async/await mechanism to TextDB
- added async/await mechanism to RESTBuilder
- threads supports views
- improved error handling in `TotalAPI()`
- improved `Database.scalar()` by adding new argument
- improved `QueryBuilder.in()` and `QueryBuilder.notin()`
- fixed UTF8 chars in multi-part parser
- fixed `NOSQL().autofill()`
- fixed converting date via `Date.setTimeZone()`
- fixed XML comments in `String.parseXML()`
- fixed `Name` type in `Schemas`
- fixed sorting in `U.reader()`

========================
0.0.39
========================

- added a new alias `request.proxy()` to `response.proxy()`
- added `LDAP(opt, callback)` method for obtaining of users, groups or user profile (experimental)
- added `U.normalize(path)` that normalizes path by adding `/` to begin and end of the phrase
- added `U.link(path1, path2, pathN)` for creating of links
- added `PATH.join()` alias to `Path.join()`
- added `DEF.blacklist` object that performs IP blacklist
- updated `filestorage.save()` by adding support for importing files from URL address
- updated built-in session `AUTH()` mechanism by adding `options.strict {Boolean}` option
- updated `$.extend([data], [callback])` method in SchemaOptions by adding `callback` argument that enables async processing
- removed `allow_debug` option
- fixed `abort` event for incoming `request`
- fixed `controller.json()` method
- fixed `array.quicksort()` method
- fixed `controller.invalid()`, added missing second argument called `error` (optional)
- fixed error handling in `TotalAPI`
- fixed cookies transfering while redirecting in the `REQUEST()` method (can be disable via `opt.nocookies = true`)
- fixed `language` in `WebSocketClient`
- fixed merging files with the `auto` value defined in `versions`
- fixed encoding in `content-disposition` header
- fixed `UNAUTHORIZED()`
- fixed `after` argument in the `PROXY()` and `res.proxy()` methods
- improved error handling in WebSocket
- improved HTTP caching in merged files
- improved unit-testing
- improved timeouts in the API endpoints

========================
0.0.38
========================

- added `PAUSE(is_paused)` method that can pause loading of all Total.js dependencies
- added dynamic delegates for receiving of messages in FlowStream in the form `instance.mesage_<INPUT_NAME>`
- added `response.proxy(target, [copypath], [after], [timeout])`
- improved some parts of code
- improved `MIDDLEWARE(name, fn, [assign], [first])` method
- fixed measuring dimension for `.gif` images
- fixed `BACKUP()` method (a problem with sockets)
- fixed potential remote code execution in `U.set()` founded by [Snyk](https://snyk.io/vuln)
- fixed routing with camel-Case URL addresses
- fixed sending of messages via inline registered components in FlowStream
- fixed a problem with FileStorage and opened file descriptors

========================
0.0.37
========================

- added CSRF
	- `CONF.secret_csrf`
	- `CONF.default_csrf_maxage`
	- `DEF.onCSRFcreate(req)`
	- `DEF.onCSRFcheck(req)`
	- `req.csrf()` generates a token
	- `controller.csrf()` generates a token
	- `@{csrf}` generates a token in View engine
	- `schema.csrf()` enables csrf for schemas and their routes
	- new `csrf` flag in `ROUTE()` method
	- `csrf` verification via `x-csrf-token` header or via URL argument `?csrf=TOKEN`
	- `RESTBuilder.csrf(token)`
- added `HTMLMAIL(address, subject, body, [language], [callback])` for sending of raw HTML mail messages
- added `NPMINSTALL(name, callback)` for installing of 3rd party NPM dependencies
- added `FILESTORAGE().image()` method for reading of images
- `CONF.default_errorbuilder_errors` for handling of all HTTP errors via ErrorBuilder
- decreased `default_interval_websocket_ping` to `1` minute (from `3`)
- improved image cache in `FILESTORAGE()`
- fixed `message` with `closing bytes` in WebSocket and `WEBSOCKETCLIENT()`
- fixed `@{resource()}` method in View engine
- fixed read stream in `FILESTORAGE()`

========================
0.0.36
========================

- improved HTTP cache
- fixed parsing of schema keys in `PATCH` method
- fixed predefined session functionality (a problem with cache)
- fixed `API` routes with empty model

========================
0.0.35
========================

- extended `EXEC()` by adding support for `Tasks` and `Operations`
- fixed `DELETE` method for the schemas, now it works same like `PATCH` method
- fixed `FlowStream.use()` method
- fixed pausing of outputs/inputs in `FlowStream`
- fixed inputs in `FlowStream`
- fixed command injection in `Image.pipe()` and `Image.stream()`
- fixed parsing of uploaded files (sometimes was the writeable stream unclosed)
- fixed execution of system routes

========================
0.0.31
========================

- added `CONF.default_errorbuilder_forxhr` key (default: `true`)
- errors in requests with `xhr` are serialized via ErrorBuilder
- fixed reconnecting in `WEBSOCKETCLIENT()`
- fixed `$.success()` and `$.done()` used in chaining