========================
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 `` 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 )
- 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_`
- 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