======================== 0.0.99 ======================== - fixed `Message-ID` generator for email messages - __critital__ fixed cloning buffers in the `FlowStream` - added `FILESTORAGE().clone(id, newid, [callback])` method - fixed decoding of encoded HTML entities in the HTML parser - fixed loading `empty` flow in `Flow.load()` method ======================== 0.0.98 ======================== - fixed inline declared middleware `&middleware` in the `ROUTE()` method - fixed partial validation - fix image bug in the `Image.measureWEBP()` method by [Marek Mraz](https://github.com/Mrazbb) - improved Markdown parser - improved HTML parser - fixed `RESTBuilder.promise()` ======================== 0.0.97 ======================== - extended icon validator by adding support for `tic` keyword - fixed link generator for email and phone numbers in `Markdown` - improved `Number.pluralize()` method - added `PROMISIFY(fn, [a], [b])` method - added `$.promisify(fn, [a], [b])` method - added `FILESTORAGE().copy(id, path, [callback(err, meta)])` - fixed formatting `0` number in the `Tangular.format` helper - improved `DATA.query()` method ======================== 0.0.96 ======================== - added `FlowStreamInstance.stats {Object}` property - registered a new global variable `Total` - alias for `F` - fixed generating `Message-ID` in SMTP sender - fixed `CLEANUP()` method - improved bookmarks in `Markdown` - fixed `unit testing` - fixed refreshing subscribers in Total.js Message Service ======================== 0.0.95 ======================== - added alias `Array.TfindIndex` (because some of NPM used their own) - added `String.tslash()` method - added `error` argument in the `jsonschemaobject.transform(data, partial, [error])` method - removed `callback` argument in the `jsonschemaobject.transform(data, [callback], partial)` method - added support for custom Route API actions - fixed loading FlowStreams without identifiers - fixed serializing TMS sources in the Flow module - fixed `String.args()` for evaluting keys with `$` character - fixed `ul` parsing in the Markdown parser - added a new method `FlowInstance.remove()` - improved exporting Flow schema - extended `U.ls()` by adding `unified` argument - added `FlowStreamComponentInstance.components {Object}` - fixed `every` (e.g. `*/5`) value in the Cron - fixed `#id` selector for `FlowStreamInstance.send()` method - fixed loading the `default_root` configuration from the environment ======================== 0.0.94 ======================== - improved UI Builder compiler - improved `FlowStream` initial header for WebSocket - fixed loading `.html` plugins ======================== 0.0.93 ======================== - fixed internal FlowStream module (critical) ======================== 0.0.92 ======================== - updated Tangular template engine - improved routing, actions can use `-->` instead of `* -->` - fixed parsing arrays in the `config` - fixed FlowStream stats in `instance.newmessage()` - updated `REQUEST()` - `timeout` is optional and may be disabled - improved `MultipartParser` - fixed closing proxied WebSocket in the `PROXY()` method - added `F.uibuildercompiler(opt, [callback])` method - improved `String.toJSONSchema()` + fixed arrays with external schemas - updated Flow module - added support for `jsonschemas/*.txt` with inline implementation of the JSON schemas - added a `String.markdown(opt)` parser - enabled `.xslt`, `.xsd` and `.xls` extensions for handling static files - fixed sending messages to all subscribers in TMS (critical) - fixed compiling HTML in CMS - fixed `signal` in the `F.exit(signal)` method - improved CMS compiler - fixed JS minification ======================== 0.0.91 ======================== - added `.flow` extension for the watcher due to auto-restarting app - added `/flowstreams/` directory for inline FlowStreams - added FlowStream module into the core - fixed `PATH.extensions()` - fixed declared routes in the `NEWACTION()` method ======================== 0.0.90 ======================== - improved `edit` source-code functionality - improved schema by adding `nocompress {Boolean}` field - fixed blacklist for localization in remote editing - added `flow.cloning {Boolean}` for cloning of message data (default: `true`) - added missing `headers` argument in the `res.jsonstring(data, [headers])` method - improved code in the `U.extend_headers()` and `U.extend_headers2()` methods - fixed setting values `0`, `false` and `null` in `FlowStreamMessage.send()` method - extended `LOADRESOURCE()` method - `LOADRESOURCE(url)` for downloading multiple localizations - `LOADRESOURCE(name, url)` for downloading single localization - added source map generator (only for `debug` mode) - added `CONF.nosourcemap {Boolean}` option - extended `U.EventEmitter2()` by adding `.off(name, [fn])` method ======================== 0.0.89 ======================== - extended HTTP server by adding `gzip` and `deflate` content-encoding - updated `options` by adding `options.compress = 'gzip|deflate'` option in the `REQUEST()` method - fixed handling values in `QueryBuilder` - extended command-line tool by adding new command `total4 --extract ` - improved CMS compiler by adding support for inline navigation and breadcrumb - added `CONF.logger` that enables the writing of `console` into the `/logs/debug.log` file - fixed `encryption` in actions - added new option `allow_check_upload` for disabling upload content-type checks - added `$.cancel()` method in the `AUTH()` delegate ======================== 0.0.88 ======================== - added `API.file(filename, path, [formkey])` - added `PATH.plugins(path)` method - added a new event `ON('componentator', function(meta))` - fixed `FileStorage.readbase64()` - fixed a file validation for encrypted word/excel files - updated Tangular template engine - added a new global keyword `PLUGINS` - added `U.groupify(id, [count])` method for grouping identifiers - fixed data validation for the schema actions - added `DatabaseBuilder.array(name, [comparer], value)` by [Gera](https://github.com/Gera-IC) - added FlowStream events: - `flowstream.on('connect', function(instance))` - `flowstream.on('disconnect', function(instance))` - `flowstream.on('configure', function(instance))` ======================== 0.0.87 ======================== - added `charset=utf-8` to the JSON content-type in the `REQUEST()` method - added `default_tapi` config key - updated Total.js API endpoint - added a timeout for Total API endpoints - fixed timeout for API routes - improved "requests timeout" mechanism - allow importing node built-in modules #55 by https://github.com/jornverhoeven - improved uploading files in the `REQUEST()` method - added `` tag to HTML compression blacklist ======================== 0.0.86 ======================== - fixed returning binary data in the `TotalAPI()` method - fixed logging in the `FILESTORAGE().rename()` method - improved parsing of multiple URL query argument keys (joined into the string separated by a comma) - fixed handling arguments in the `RESTBuilder.API()` method - fixed `$.url` in the `AUTH()` method ======================== 0.0.85 ======================== - fixed reconnecting to the server in `OPENCLIENT()` - added a new version of `UID()` generator (`f` version) - added `U.convert62(number)` it converts number to a 62 custom radix - added `U.from62(number)` it converts a 62 custom radix to a number - fixed loading of FlowStream schema (critical) - fixed a bad place for callback evaluation in the FlowStream (critical) - updated `CONF.default_uid {String}` option for changing of UID generator (possible values `f` (new), `r` (new)) ======================== 0.0.84 ======================== - fixed `TEMPLATE()` parser - fixed `stream.pause()/stream.resume()` functionality in the `REQUEST()` method - extended: `API()` by adding Total.js API services, e.g. `API('TAPI', 'sms', { ... }).promise()` - extended `API()` by adding `.output(type)` method, a value is set to the `opt.output` object - fixed `/bundles/*.url` files in debug mode - improved `API()`, the API `name` can now be called in lowercase - extended `FAKE()` by adding inline JSON schemas specification - extended `SCHEDULE()` method by adding support of `cron` basics - added `QueryBuilder.permit(name, type, value, [useridfield], [userid], [required])` method - fixed routing inline flags in the form: `&flag1' `&flag2` - fixed using of message data via `FlowStreamMessage.variables()` - added support for promises to the `DOWNLOAD()` method - added `instance.vary(type)` delegate that is executed when `variables`, `variables2` or `secrets` have been changed - added `asfile` argument into the `flowstream.add(name, body, [callback], [asfile])` method - added `asfiles` argument into the `flowstream.load(components, design, [callback], [asfiles])` method - fixed `callback` call after calling of `DEF.onMail()` delegate - added a global `DATA` object for fast access to the QueryBuilderDB without creating a DB controller (faster than `DB()`) - fixed parsing `date` for JSON Schemas (it accepts `null` value) - fixed a check for uploading `webp` images - updated `$.action('#|+|-action_name', [model])` method by adding support HTTP method types `#`, `+`, `-` - added `UIDR()` a new UID random generator, it generates text `[a-zA-Z0-9]` + checksum and without timestamp (fixed length: 12 characters) - added `U.random_text(length)` generates random text from `[a-zA-Z0-9]` - added `CONF.default_uid {String}` option for changing of UID generator (possible values `uidr`, `uid1`, `uid16`, default: `null`) ======================== 0.0.83 ======================== - fixed a backward compatibility with the older schema executors - fixed `String.capitalize()` method (chars in uppercase are transformed to lowercase) - fixed traffic indicator in the `FlowStream` ======================== 0.0.82 ======================== - added a watcher for `bundles.debug` - fixed `res.proxy()` - fixed bug with the `instance.replace()` and `message.replace()` methods in the FlowStream (critical) ======================== 0.0.81 ======================== - extended the schema object by adding `.actions = {}` property (with all defined actions) - added `NEWACTION()` method that offers awesome functionality for independent actions in the schema - removed unused `CONF.logger` - improved API routing in the form `ROUTE('API /api/ +action_name')`; - added in-memory cache support for the `schema.action()` and `NEWACTION()` - improved `F.cache.removeAll()` by adding support for string array - fixed empty value in enum validation in JSON Schemas - improved the `CORS()` method `CORS('https://.., https://..')` that allows only the specific hostnames - fixed atomic operations in NoSQL QueryBuilder - added `String.sign(key)` for making of quick checksums - added `DB().load([conn], opt)` for loading of prepared QueryBuilder queries - fixed encoding config values `@{'%something'}` in the view engine - fixed multiple outputs in for the actions - fixed parser for macros - improved macros by adding async operations - added `QueryBuilder` as a global variable (due to extending prototype) - added `QueryBuilderDB` as a global variable (due to extending prototype) ======================== 0.0.80 ======================== - added `CONF.default_tms_maxlength` option - improved the `NEWSUBSCRIBE(name, schema, [callback])` method by adding the `callback` argument - added `inmemory` database support for `QueryBuilder` - fixed localized filters in `QueryBuilder.autoquery()` - extended the `schema.action({ ..sa: true }, ...)` method by adding `sa` option - improved error handling in the `FlowStream` - fixed parsing inline JSON schemas - added `wav` as the allowed static file - added support for the `.ui` file extension (json --> UI builder) ======================== 0.0.79 ======================== - fixed parsing of nested JSON schemas defined - fixed `UID` parsing subtype in JSON schemas - improved error handling in the FlowStream ======================== 0.0.78 ======================== - fixed `opt.options` argument in the `AUTH()` method - fixed `secret_tms` (now it can contain a raw number) - added `QueryBuilder.schema(name)` - fixed generating filenames via `COMPONENTATOR()` method (added `.min` pharse) - fixed parsing inline JSON schemas (without defined types) in `schema.action()` - extended schema `Icon` validator by adding `tic` ([T]otal.js [I]con [C]ustom) ======================== 0.0.77 ======================== - fixed `permissions` in the `schema.action` (critical) ======================== 0.0.76 ======================== - updated `COMPONENTATOR(name, components, [removeprev])` by adding `removeprev` argument ======================== 0.0.75 ======================== - updated `CALL()` response (it returns `Object` instead of `Array`) with multiple actions - `$.action(name, [data])` is an alias for `CALL()` method directly in the SchemaOptions - fixed view command `@{language}` - added `FlowStreamInstance.init` delegate (executed once when the instance is ready) - added `FlowStreamInstance.refresh` delegate (executed if the Flow schema is updated) - added `FlowStreamInstance.instances {Object}` alias to `flowinstance.meta.flow` - added `FlowStreamInstance.logger(callback)` that captures all send messages - added `FlowStreamInstance.middleware(callback)` that captures all send messages and prevents continuing - improved `PROXY()` method - added error handling for `COMPONENTATOR()` - fixed `returning` with modify and upsert in the `QueryBuilder` - added support for cloning folders in remote editing ======================== 0.0.74 ======================== - improved error handling in JSON Schemas - improved `.toJSONSchema()` by adding: - nested object in the form `{ name:String, path: String }` - nested object arrays in the form `[{ name: String, path: String }]` - linked schemas in the form `name:@User, address:@Address` - added `CALL().language(value)` method - added `$.repo {Object}` into the `SchemaOptions` - added support for promises into the `CLEANUP()` - extended `schema.action()` by adding new options: - `user: true/false` - `permissions: 'read,write,admin'` - added `QueryBuilder.returning(fields)` method ======================== 0.0.73 ======================== - PREF configuration is saved nicely - fixed scalar opertaion for NoSQL QueryBuilder - fixed validating data according to the JSON schema ======================== 0.0.72 ======================== - added support for WebSocket for the Total.js Proxy - added `/templates/` directory for the templates - updated `TEMPLATE()` functionality - `filename` is targeted to the `/templates/` directory - `~filename` is will be used as an absolute filename - `http:// or https://` will download template from the URL address - local templates are not cached in the DEBUG mode - updated `HTMLMAIL()`, ` check')` - fixed decompression of colors in CSS - fixed `error404` internal stats - added `CONF.allow_stats_status` that stores all status objects - updated making of snapshots - fixed `WebSocketClient.connect()` (added a small delay for evaluation) - improved `EXEC()` method by adding a support for external arguments like query, params, id - improved `QueryBuilder.error(err, [reverse])` by adding the `reverse` argument - fixed applying variables in the FlowStream - added `RESTBuilder.strict()` method - added `QueryBuilder.language()` method - added a global variable `MODS.` for storing modules - fixed filtering in the `QueryBuilder.autoquery()` method - extended `QueryBuilder.gridfilter` method by adding support for: - `number`, `>date` greater than - `!string` exact value - fixed incoming message (`request`) events (different events between Node.js v12 != v18) - improved applying of localization - added `RESTBuilder.noparse()` it responds raw string as a response - added `String.streamer(beg, [end], callback, [skip])` method ======================== 0.0.62 ======================== - fixed `NEWMACRO()` compiler - added `flowstream.secrets` (something similar like variables) - improved applying of `flowstream.variables` - fixed initializing of HTTP server with unix-socket - added support for Windows named pipe - extended FlowStream by adding `instance.transform([data], callback)` method ======================== 0.0.61 ======================== - added NoSQL support for QueryBuilder - fixed FlowStream identifiers when registering component - fixed schema name in the logs when `CONF.logger` is enabled - extended `download` argument in the `$.controller.file(filename, [download])` by adding support for `Boolean` - extended `CONVERT()` by adding support for advanced arrays e.g. `key: [name: String, price: 30]` - added `F.frameworkless(debug, options, [callback])` that executes HTTP server without Total.js dependencies - updated `PROXY()` method by adding `check` argument - fixed `copypath` functionality in the `PROXY()` method - added auto clearing cache for the `CONVERT()` method - extended `CORS()` method by returning instance of the route (that can be dynamically removed) - extended `FlowStream` connections by adding the `color` attribute - added method `U.set()` - added method `U.get()` - added `CONF.default_shell {String}` - added `SHELL(command, callback, [cwd])` for executing of shell ======================== 0.0.60 ======================== - added a validation for `Byte`, `TinyInt` and `SmallInt` types in the schemas - fixed `COPY()` method - fixed `default_root` config option for static files - fixed `/versions` file with applied `default_root` - fixed a nullable argument in `U.getContentType()` - fixed HTTP cache in `FileStorage` - added `QueryBuilder.check()` for checking existence of record - fixed decompression bigger messages in the WebSocket - updated `NEWFORK()` and `NEWTHREAD()` by adding support for `~absolute/path/to/worker.js` in `name` argument ======================== 0.0.59 ======================== - added `TESTER()` method for creating rich unit-tests by [Jakub Urban](https://github.com/Helferino) - `LOAD()` supports promises (without callback argument) - added missing Tangular helpers (CRITICAL) - disabled snapshots for `LOAD()` method - fixed executing `callback` in the `controller.autodestroy()` method - added `default_websocket_maxlatency: 2000` configuration item - added `F.runscript(filename)` for evaluating of JS scripts - improved streaming files - fixed `close` message in WebSocket - extended `flowstreaminstance.close(removed)` delegate by adding `removed` argument - exchanged functionality between `>field` (it performs `MAX`) ` userdata.language` to built-in auth mechanism - added `write` functionality to the `BitExtractor` class by [Peter Stolc](https://github.com/a50397) - fixed error handling in the FlowStream - fixed refreshing of `NOW` variable in the FlowStream - fixed calling end-response callback in the `res.$file()` method - fixed assigning values in Macros - added private variables to Macros in the form `#variable="VALUE"` - added comments to Macros in the form `// comment` - fixed auto-closing of WebSocket - fixed removing of API routes - added `controller.jsonstring(str, [headers])` method - added `res.jsonstring(str)` method - added new command `CMD('importbuild', 'URL address', [callback(err)])` method for importing Total.js Builds - extended `NEWEXTENSION()` by adding support for `html` type in the form `