All Versions
17
Latest Version
Avg Release Cycle
60 days
Latest Release
468 days ago

Changelog History
Page 1

  • v3.4.5 Changes

    July 10, 2020

    Fixes :

    • 🛠 fixed: a problem with persistent images
  • v3.4.4 Changes

    July 07, 2020

    News :

    • ➕ added: schema options $.successful(function(response) {})
    • ➕ added: options.reconnectserver {Boolean} to WEBSOCKETCLIENT
    • ➕ added: req.snapshot(callback(err, request_body))
    • ➕ added: a new command CMD('reload_preferences')
    • ➕ added: a new FILESTORAGE mechanism based on UID
    • ➕ added: sql extension to U.getContentType()
    • ➕ added: F.stats.performance.usage which contains percentual usage of the thread

    ⚡️ Updates :

    • ⚡️ updated: SchemaOptions method $.response([index/operation_name]), e.g. $.response('workflow.NAME')
    • ⚡️ updated: snapshot startscript.js.json contains tabs instead of spaces
    • ⚡️ updated: DatabaseBuilder.rule(rule, [param]), supports string declaration of filter function
    • ⚡️ updated: URL validation

    🛠 Fixes :

    • 🛠 fixed: cleaning of NoSQL embedded databases
    • 🛠 fixed: String.parseCSV(), now supports multiline strings
    • 🛠 fixed: a bug when closing of websocket
    • 🛠 fixed: DatabaseBuilder.search() method
    • 🛠 fixed: Error in CLONE() method
    • 🛠 fixed: schema.inherit() by adding schema.middleware() and schema.verify()
    • 🛠 fixed: parsing messages in WebSocket
    • 🛠 fixed: a problem in some commands pre-render in the view compiler
    • 🛠 fixed: parsing of query strings
  • v3.4.3 Changes

    May 11, 2020

    News :

    • ➕ added: HASH(value, [type]) for creating hash like in jComponent
    • ➕ added: SchemaOptions.repo as alias to SchemaInstance.model.$$repository
    • ➕ added: a new type CONVERT syntax to schema.define() (more in docs)
    • ➕ added: SchemaEntity.verify(name, function($), [cache]) for async verification of values
    • ➕ added: TEMP variable as a new global variable (it's cleaned every 7 minutes)
    • added: CONF.allow_persistent_images: true which allows to reuse resized images in temp directory
    • ➕ added: req.filecache(callback) as alias for F.exists()
    • ➕ added: own QueryParser
    • ➕ added: RESTBuilderInstance.convert('name:String,age:Number') method
    • ➕ added: RESTBuilder.upgrade(fn(restbuilder)) for upgrading of RESTBuilder
    • ➕ added: RESTBuilder parses Total.js Errors in responses as Error
    • ➕ added: String.prototype.env() replaces all values in the form [key] for CONF.key
    • ➕ added: WebSocket supports a new type - raw buffer
    • ➕ added: Number.fixed(decimals)

    ⚡️ Updates :

    • ⚡️ updated: websocket.send2(message, comparer, replacer, [params]) by adding params argument for comparer function
    • ⚡️ updated: Websocket.encodedecode can enable/disable easily encoding of messages
    • ⚡️ updated: bundling skips all bundles with -bk.bundle in filename
    • ⚡️ updated: bundle filenames are displayed in console
    • ⚡️ updated: UPDATE() method by adding noarchive argument
    • ⚡️ updated: TEST() method supports [subdomain] keyword and METHOD url in URL address
    • ⚡️ updated: MODIFY([filename], fn) by adding filename argument
    • ⚡️ updated: background of schedulers by @fgnm
    • ⚡️ updated: U.download() by adding param argument
    • ⚡️ updated: U.request() by adding param argument
    • ⚡️ updated: schema.cl(name, [value]) method by adding value argument for replacing of existing code-list
    • ⚡️ updated: Tangular version to v4.0.0

    👌 Improvements :

    • 👌 improved: filename in modificators (now filenames contain relative paths)
    • 👌 improved: performance of U.request() (around +10%)
    • 👌 improved: performance of U.download() (around +10%)
    • 👌 improved: performance of RESTBuilder
    • 👌 improved: CSS minifier by compressing single hex color from e.g. #000000 to #000

    🛠 Fixes :

    • 🛠 fixed: localization in totaljs executable script
    • 🛠 fixed: phone validation
    • 🛠 fixed: DOWNLOAD()
    • 🛠 fixed: Number.VAT() by Tomas Novak
    • 🛠 fixed: debugging mode in Node.js v14
    • fixed: allow_compile_html in static files
    • 🛠 fixed: ROUTE() method, there was a problem with spaces GET /*
    • 🛠 fixed: ACTION() with json output
    • 🛠 fixed: controller in $ACTION() with used get and query actions
    • 🛠 fixed: PATCH method in $ACTION()
    • 🛠 fixed: schema.allow() in PATCH method
    • 🛠 fixed: image resizing in debug-mode
  • v3.4.2

    May 11, 2020
  • v3.4.1 Changes

    March 11, 2020

    News :

    • ➕ added: SchemaOptions.parent returns a parent model
    • ➕ added: Tangular template engine (experimental)
    • ➕ added: String.makeid() for creating of unique identifier from string
    • ➕ added: a new property called message.ua to FLOWSTREAM()

    ⚡️ Updates :

    • ⚡️ updated: HttpFile.fs() by adding id argument for updating of existing file
    • updated: default value for allow_ssc_validation to true

    🛠 Fixes :

    • 🛠 fixed: String.parseDate(format) with defined format
    • 🛠 fixed: inheriting of controllers between schemas
    • 🛠 fixed: MailMessage.attachments()
    • 🛠 fixed: calling of F.snapshotstats in cache recycle
    • 🛠 fixed: controller.success()
    • 🛠 fixed: removing of unused files when a bundle is extracting
    • 🛠 fixed: a processor function in F.backup()

    👌 Improvements :

    • 👌 improved: Date.format()
    • 👌 improved: Total.js translate (supports ErrorBuilder and DBMS)
  • v3.4.0 Changes

    February 11, 2020

    News :

    • ➕ added: date.setTimeZone(timezone)
    • ➕ added: `NOSQL('~absolute_path.nosql')' loads external NoSQL embedded database
    • ➕ added: `TABLE('~absolute_path.nosql')' loads external Table
    • ➕ added: (generate) subtype into the config files
    • ➕ added: String.isBase64()
    • ➕ added: new schema type Base64
    • ➕ added: SchemaEntity supports schema.addWorkflowExtension(name, fn($, [data]))
    • ➕ added: SchemaEntity supports schema.addTransformExtension(name, fn($, [data]))
    • ➕ added: SchemaEntity supports schema.addOperationExtension(name, fn($, [data]))
    • ➕ added: SchemaEntity supports schema.addHookExtension(name, fn($, [data]))
    • ➕ added: SchemaEntity supports schema.setSaveExtension(fn($, [data]))
    • ➕ added: SchemaEntity supports schema.setReadExtension(fn($, [data]))
    • ➕ added: SchemaEntity supports schema.setQueryExtension(fn($, [data]))
    • ➕ added: SchemaEntity supports schema.setRemoveExtension(fn($, [data]))
    • ➕ added: SchemaEntity supports schema.setInsertExtension(fn($, [data]))
    • ➕ added: SchemaEntity supports schema.setUpdateExtension(fn($, [data]))
    • ➕ added: SchemaEntity supports schema.setPatchExtension(fn($, [data]))
    • ➕ added: SchemaOptions supports $.extend([data]) for evaluating of all extensions for the current operation
    • ➕ added: WebSocket.keys property (it contains all keys with connections)
    • ➕ added: threads directory for server-less functionality
    • ➕ added: a global variable called THREAD with a name of current thread
    • ➕ added: require('total.js').http(..., { thread: 'thread_name' }) evaluates only specified thread
    • ➕ added: require('total.js').cluster.http(..., { thread: 'thread_name' }) evaluates only specified thread in cluster
    • added: framework creates a file with app stats in the form your_init_script_name.js.json
    • added: a new config key allow_stats_snapshot
    • ➕ added: view engine @{import()} supports auto-merging JS or CSS files: @{import('default.js + ui.js')}
    • ➕ added: exports.options delegate to component in FLOWSTREAM
    • ➕ added: DatabaseBuilder.autofill() from DBMS
    • ➕ added: HttpFile.extension property
    • ➕ added: HttpFile.size property alias to HttpFile.length
    • ➕ added: auto-session cleaner of unused sessions
    • added: allow_sessions_unused config key for cleaning of unused sessions
    • ➕ added: missing PATH.schemas, PATH.operations and PATH.tasks
    • ➕ added: a new method PATH.updates
    • added: easy updating of applications via UPDATE(versions, [callback], [pause_server_message])
    • ➕ added: NOSQL counter .reset([type], [id], [date], [callback]) method-
    • ➕ added: session.listlive(callback) returns all live items in session
    • ➕ added: controller.ua returns parsed User-Agent
    • ➕ added: $.ua returns parsed User-Agent in Schemas, Operations, TaskBuilder, MIDDLEWARE() and AUTH()
    • ➕ added: support for .mjs extensions
    • ➕ added: a simple support for DDOS protection allow_reqlimit : Number (max. concurent requests by IP just-in-time)
    • ➕ added: unit-testing supports colors, added by @dacrhu
    • ➕ added: String.encryptUID() as alias for U.encryptUID()
    • ➕ added: String.decryptUID() as alias for U.decryptUID()

    ⚡️ Updates :

    • ⚡️ updated: WEBSOCKET() supports +, - and 🔒 as authorization flags
    • ⚡️ updated: LOAD() supports service type
    • updated: cluster watches restart or restart_NAME_of_THREAD files for restarting of existing threads
    • ⚡️ updated: cluster supports auto mode
    • ⚡️ updated: cluster supports watcher in debug mode
    • updated: *.filefs(), *.filenosql(), *.imagefs(), *.imagenosql() by adding checkmeta argument
    • updated: $.done([user_instance]) method in AUTH(), added a new argument called user_instance (optional)
    • ⚡️ updated: GZIP is enabled only for JSON bodies which have more than 4096 bytes
    • 🚀 updated: .env parser supports parsing of .env-debug or .env-release files according to the mode
    • ⚡️ updated: list of user-agents in String.parseUA()

    🛠 Fixes :

    • 🛠 fixed: ON('error404') when the route doens't exist
    • 🛠 fixed: filter in Schema workflows, transformations and operations
    • 🛠 fixed: NOSQL() joins with absolute paths
    • 🛠 fixed: TABLE() joins with absolute paths
    • 🛠 fixed: (random) subtype in config files
    • 🛠 fixed: (response) phrase in ROUTE() for multiple OPERATIONS
    • 🛠 fixed: a response in ROUTE() with mulitple operations if the result contained some error
    • 🛠 fixed: a security bug with a path traversal vulnerability
    • 🛠 fixed: debug watcher for themes
    • 🛠 fixed: generators in schemas with a new declaration
    • 🛠 fixed: a problem with handling files in 404 action
    • 🛠 fixed: startup directory in bundles
    • 🛠 fixed: schema.inherit() didn't copy required fields.
    • 🛠 fixed: SUCCESS() serialization with SUCCESS() argument
    • 🛠 fixed: a critial bug with UID() generator
    • 🛠 fixed: clearing of DNS cache

    👌 Improvements :

    • 👌 improved: LOGMAIL() mail format
    • 👌 improved: starting logs in console output (added IPv4 local address)
    • 👌 improved: performance with JSON serialization in controller.success() and controller.done()
  • v3.3.2 Changes

    November 12, 2019

    Fixes :

    • 🛠 fixed: default time zone (utc is default time zone)
  • v3.3.1 Changes

    November 07, 2019

    News :

    • ➕ added: RESTBuilder.callback() which performs .exec() automatically
    • ➕ added: FLOWSTREAM()

    🛠 Fixes :

    • 🛠 fixed: AUDIT() method
    • 🛠 fixed: error handling in controller.invalid()
    • 🛠 fixed: req.authorize()
    • 🛠 fixed: CSS auto-vendor-prefixes, fixed opacity with !important
    • 🛠 fixed: CONVERT() a problem with arrays
  • v3.3.0 Changes

    September 30, 2019

    🆕 News

    • ➕ added: NEWTASK(name, declaration) for creating preddefined TaskBuilder
    • ➕ added: TASK(name, taskname, callback, [controller/SchemaOptions/OperationOptions/ErrorBuilder]) for executing preddefined TaskBuilder
    • ➕ added: a new config key directory_tasks for TaskBuilder
    • ➕ added: a global alias MODIFY() for F.modify()
    • ➕ added: a global alias VIEWCOMPILE() for F.view_compile()
    • ➕ added: mail.type = 'html' can be html (default) or plain
    • ➕ added: $.headers into the SchemaOptions, OperationOptions and TaskBuilder
    • ➕ added: String.parseCSV([delimiter]) returns Object Array
    • ➕ added: String.parseUA([structured]) a simple user-agent parser
    • ➕ added: req.useragent([structured]) returns parsed User-Agent
    • ➕ added: a new config key default_crypto it can rewrite Total.js crypto mechanism (default: undefined)
    • added: a new config key default_crypto_iv it's an initialization vector (default: generated from secret) or it can contain a custom hex value
    • 👷 added: a new config key allow_workers_silent can enable/disable silent workers (default: false)
    • ➕ added: a new config sub-type called random, example: secret_key (random) : 10 and 10 means a length of value
    • ➕ added: a new command clear_dnscache for clearing DNS cache
    • ➕ added: commands INSTALL('command', 'command_name', function) for registering commands and CMD(name, [a], [b], [c], [d]) for executing commands
    • ➕ added: ENCRYPTREQ(req, val, [key], [strict]) to encrypt value according to the request meta data
    • ➕ added: DECRYPTREQ(req, val, [key]) to decrypt value according to the request meta data
    • ➕ added: controller.nocache()
    • ➕ added: controller.nocontent()
    • ➕ added: REPO as a global variable
    • ➕ added: FUNC as a global variable
    • ➕ added: MAIN as a global variable
    • ➕ added: DEF as a global variable for defining of behaviour for some operations (alternative to F)
    • ➕ added: PREF.set(name, [value]) (read+write) or PREF.propname (only read) for reading/writing a persistent preferences
    • ➕ added: F.onPrefSave = function(obj) to write preferences
    • ➕ added: F.onPrefLoad = function(next(obj)) to read preferences
    • ➕ added: RESTBuilder.url(url) which returns a new instance of RESTBuilder for chaining
    • ➕ added: restbuilder.keepalive() enables a keepalive for RESTBuilder instance
    • ➕ added: SESSION() management, more in docs
    • ➕ added: controller.sessionid with ID of SESSION()
    • ➕ added: AUTH() supports a new auth declaration with $ as AuthOptions like SchemaOptions or OperationOptions
    • ➕ added: AuthOptions to prototypes
    • ➕ added: ErrorBuilder.length property (alias for `instance.items.length)
    • ➕ added: Schemas prepare supports req argument
    • ➕ added: DEF.currencies.eur = function(val) {} registers a currency formatter
    • ➕ added: DEF.helpers registers a new view engine helper (F.helpers is alias for for this object)
    • ➕ added: DEF.validators is alias for for F.validators
    • ➕ added: usage of currency formatter Number.currency(currency)
    • ➕ added: new schema type Number2 with default value is null, not zero 0
    • ➕ added: @{json2(model, elementID, key1, key2, key3)} can serialize data with keys defined into the <script type="application/json">
    • ➕ added: schemas supports PATCH and .setPatch(), only specified field are processed
    • ➕ added: SchemaOptions supports $.keys for PATCH method
    • ➕ added: schema.cl(name) ("cl" means codelist) returns {Array} a list of values from defined enum/keyvalue
    • ➕ added: schema.props() returns {Object} meta info about all defined properties
    • ➕ added: SchemaOptions, OperationOptions and TaskOptions supports $.req and $.res properties
    • ➕ added: AUDIT(name, $, [type], message) a method for audit logs
    • added: obsolete message to older declaration of middleware, schemas and operations
    • added: U.diffarr(prop, arr_A, arr_B) for comparing of two arrays
    • added: DIFFARR(prop, arr_A, arr_B) is a global alias for U.diffarr()
    • ➕ added: global.REQUIRE() for local modules within app directory
    • ➕ added: global.isWORKER variable which contains true (when the process is executed as a worker) or false
    • ➕ added: ACTION(url, [data], callback) can evaluate a route without request creation
    • ➕ added: ROUTE('🔒 METHOD URL'), it means that 🔒 adds authorized flag
    • ➕ added: ROUTE('+METHOD URL'), it means that ++ or + adds authorized flag
    • ➕ added: ROUTE('-METHOD URL'), it means that -- or - adds authorized flag
    • ➕ added: SchemaOptions, OperationOptions, TaskOptions supports filtered query arguments via $.filter
    • ➕ added: controller.done([value])
    • ➕ added: SITEMAP() as alias to F.sitemap()
    • ➕ added: config key allow_localize enables a localization for all HTML files
    • ➕ added: controller.breadcrumb returns all sitemap items
    • ➕ added: PAUSESERVER(name, pause) pauses web server (alias for F.wait())
    • added: PROXY(endpoint, hostname, [copypath], [before_fn(uri,req,res)], [after_fn(res)]) makes a direct proxy from webserver
    • ➕ added: schema.middleware(function($, next)) for creating simple middlewares for Schema operations
    • ➕ added: FILE404(fn(req, res)) performs a simple fallback for non-existing files
    • ➕ added: $PATCH(schema, model, [options], callback, [controller]) method
    • ➕ added: .env parser to process.env
    • ➕ added: String.parseENV() for parsing .env syntax
    • ➕ added: $.noop() for custom responses
    • ➕ added: $ACTION(schemaroute, [model], callback, [controller]) evaluates schema
    • ➕ added: process.send('total:restart') performs a restart of app when the app is in debug mode
    • ➕ added: NOSQLREADER(filename) for reading different files of NoSQL embedded databases
    • ➕ added: TABLEREADER(filename) for reading different files of Table embedded databases
    • ➕ added: Mail.use() an alias for F.useSMTP()
    • ➕ added: F.onAudit(name, data) delegate for handling audit logs
    • ➕ added: Components support a new features called Parts, more in docs

    ⚡️ Updates

    • ⚡️ updated: $.invalid() without arguments can return a function function(err)
    • ⚡️ updated: Mail unsubscribe appends new header which enables unsubscribe in e.g. iOS
    • ⚡️ updated: MODIFY, handler contains a new argument controller
    • ⚡️ updated: headers argument in controller.proxy supports flags: [] for REQEUST method
    • ⚡️ updated: .filefs() and .filenosql() supports download with true or with (name, type) => 'new_name' (filename will be read from NoSQL binary file)
    • ⚡️ updated: $.done(arg) argument @arg can be boolean (response will be as a value) or object/primitive value (arg will be as a value)
    • ⚡️ updated: String.arg(obj, [encode], [def]) added encode (true, json, html) and def arguments
    • ⚡️ updated: AUTH(req, res, flags, next) and next function can handle callback(err, user)
    • ⚡️ updated: REQUEST() supports keepalive flag
    • ⚡️ updated: bundles mechanism supports merging files --filename between bundles files
    • ⚡️ updated: String.hash(true) returns unsigned int
    • updated: CONF:default_image_converter supports magick for new version of ImageMagick
    • updated: CONF.default_image_consumption can contain ZERO value which means disabled optimialization of CPU/memory consumption
    • updated: CONF.default_image_consumption has changed a default value to 0
    • ⚡️ updated: U.parseXML(str, [replace]) and String.parseXML([replace]) contains a new argument called replace
    • ⚡️ updated: LOAD() added a callback function
    • ⚡️ updated: components support encoding="utf8" attribute for <file tag (default: base64)
    • ⚡️ updated: EventEmitter2 supports a new argument obj, example: U.EventEmitter2(obj) or supports .extend method: U.EventEmitter2.extend(proto)
    • ⚡️ updated: UID() generates new types of UID with 100% backward compatibility
    • ⚡️ updated: FILESTORAGE() now it works in cluster mode

    🛠 Fixes

    • 🛠 fixed: schemas validation
    • 🛠 fixed: error handling in dynamic schemas
    • 🛠 fixed: CSS variables
    • 🛠 fixed: CSS variables with additional !important clause
    • 🛠 fixed: controller.proxy() with Gzip/Deflate compression
    • 🛠 fixed: HTTP status code with 204 in REQUEST()
    • 🛠 fixed: cookies in WEBSOCKETCLIENT
    • 🛠 fixed: REQUEST() with json flag and with null and '' value
    • 🛠 fixed: rendering components in layout
    • 🛠 fixed: resources, there was a bug with reading of value from default.resource
    • 🛠 fixed: too many open files in res.image()
    • 🛠 fixed: too many open files in res.filefs()
    • 🛠 fixed: Schema Boolean parser
    • 🛠 fixed: renamed F.stats.request.path to F.stats.request.patch
    • 🛠 fixed: SMTP sender (a problem with auth mechanism with some mail servers)
    • 🛠 fixed: filter in F.backup()
    • 🛠 fixed: paths for stored directories in F.backup()
    • 🛠 fixed: uploading files
    • 🛠 fixed: U.getExtension() by @molda

    👌 Improvements

    • 👌 improved Schemas and error handling
    • 👌 improved res.filefs() method for nonexistent files

    Others

    • renamed: *.routeScript to *.public_js
    • 💅 renamed: *.routeStyle to *.public_css
    • renamed: *.routeFont to *.public_font
    • renamed: *.routeVideo to *.public_video
    • renamed: *.routeImage to *.public_image
    • renamed: *.routeDownload to *.public_download
    • ✅ renamed: *.routeStatic to *.public
    • 📇 renamed: controller.viewCompile() to controller.view_compile()
    • 📇 renamed: event cache-set to cache_set:
    • renamed: event controller-render-meta to controller_render_meta
    • 📇 renamed: event request-end to request_end
    • 📇 renamed: event websocket-begin to websocket_begin
    • 📇 renamed: event websocket-end to websocket_end
    • 📇 renamed: event request-begin to request_begin
    • 📇 renamed: event upload-begin to upload_begin
    • 📇 renamed: event upload-end to upload_end
    • 📇 renamed: event cache-expire to cache_expired
    • removed: backward compatibility with older version of Node.js < 10
    • ✂ removed: F.hash(), alternative String.prototype.hash()
    • ✂ removed: controller.hash(), alternative String.prototype.hash()
  • v3.2.0 Changes

    February 13, 2019

    News :

    • ➕ added: WORKER() alias to F.worker()
    • ➕ added: WORKER2() alias to F.worker2()
    • ➕ added: F.cluster.https()
    • ➕ added: TaskBuilder.done2([send_value]) returns function with wrapped .done()
    • ➕ added: TaskBuilder.success2([send_value]) returns function with wrapped .success()
    • ➕ added: TaskBuilder.next2(name) returns function with wrapped .next()
    • ➕ added: new RESTBuilder aliases .DELETE(), .PUT(), .POST(), .PATCH() and.GET()`
    • ➕ added: schema.before(key, (value, model, index) => value) is a simple and new alternative to schema.setPrepare()
    • ➕ added: SchemaInstance.$parent returns a parent schema (if the schema is nested schema)
    • ➕ added: SchemaOptions.redirect(url) can perform a redirect from the schema
    • ➕ added: OperationOptions.redirect(url) can perform a redirect from the operation
    • ➕ added: .ics extension as acceptable file for the web server

    ⚡️ Updates :

    • ⚡️ updated: F.worker2() returns entire stdout buffer in the callback(err, buffer)
    • ⚡️ updated: $options() by adding disabled key
    • ⚡️ updated: String.ROOT() by adding a support for jComponent AJAX() calls
    • ⚡️ updated: RESTBuilder.method(method, [data]) added data argument
    • ⚡️ updated: String.parseDate([format]) added format argument
    • ⚡️ updated: SMTP settings contain heloid as heloidentifier (manually can be defined HELO or EHLO command)
    • ⚡️ updated: SMTP hostname is computed from email if SMTP is not specified

    🛠 Fixes :

    • 🛠 fixed: critical bug with security + improved security
    • 🛠 fixed: system routing
    • 🛠 fixed: NoSQL sorting, solved a strange problem
    • 🛠 fixed: U.request() with GET method by @khaledkhalil94 (it doesn't send JSON data if data is null/undefined)
    • 🛠 fixed: F.wait() in WebSocket
    • 🛠 fixed: String.capitalize(true)
    • 🛠 fixed: REQUEST() uploading of additional multipart/form-data (removed encoding)
    • 🛠 fixed: view engine conditions defined in <script>
    • 🛠 fixed: auto-redirects in U.download()
    • 🛠 fixed: image streams resizing
    • 🛠 fixed: @{'%config_key'} a problem with rendering a value with '