Skip to content

@petersirka petersirka released this Feb 13, 2019 · 307 commits to master since this release

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 '
Assets 3

@petersirka petersirka released this Dec 7, 2018 · 366 commits to master since this release

NEWS:

  • added: CSS variables support default values border-radius: $radius || 10px
  • added: NoSQL storage .find(beg, end, [threads]) + .count(beg, end, [threads]) + '.scalar(beg, end, type, field, [threads])' with multiple thread support
  • added: U.reader()
  • added: bundles supports merging files between bundle and project, project file must start with e.g. --name.js
  • added: .bundlesignore support with similiar functionality like .gitignore
  • added: support for SameSite cookie attribute
  • added: RUN() for executing multiple Total.js operations
  • added: a new global alias CONF (it's a reference to config) for F.config
  • added: a new global alias FUNC (it's a reference to functions) for F.functions
  • added: DatabaseBuilder.arg(key, value) for adding an dynamic argument
  • added: NOSQL/TABLE modify supports !field as boolean toggle
  • added: NOSQL/TABLE modify supports a new type $age: 'js_code' with some JS code
  • added: NOSQL/TABLE update supports a new type 'js_code' with some JS code
  • added: a new config item default-restbuilder-timeout : 10000
  • added: a new config item default-cors : https://www.totaljs.com, https://www.componentator.com which allows originators for CORS() method
  • added: a new config item default-request-maxkeys : 33 for restricting query max. keys
  • added: a new config item logger : false which enables logging for Middleware, Schemas and Operations
  • added: a new config item bundling : shallow which enables shallow bundling (if bundle.json exists then the bundles won't be extracted)
  • added: SchemaOptions and OperationOptions supports $.cancel() method
  • added: CACHE(name, [value], [expire], [persistent]) alias for F.cache.get2() and F.cache.set() or F.cache.set2()
  • added: encryption of config values
  • added: F.refresh() for refreshing of internal cache
  • added: DatabaseBuilder.each(fn) for browsing of evaluated records
  • added: Bundles can be downloaded from URL addresses
  • added: ONCE() alias to F.once()
  • added: image.define(value) performs convert -define 'value'
  • added: Total.js JS files (+ packages) tarted with . (dot) or ended with -bk won't be processed
  • added: A new builder called TaskBuilder for creating custom tasks in Schemas or Operations
  • added: WebSocket.send2(message, [comparer(client, message)], [replacer]) a new method for better sending frames
  • addde: PATH as a global alias for F.path

UPDATES:

  • updated: debug mode creates a start_name_script.pid instead of debug.pid
  • updated: NEWOPERATION() supports repeat, stop and binderror arguments (more in docs)
  • updated: routing, now it supports operations in the form ROUTE('.. * --> @save_operation @load_operation (response)')
  • updated: ROUTE() supports multiple HTTP method declaration ROUTE('GET,POST,PUT /something/', action)
  • updated: ROUTE() supports dynamic schemas
  • updated: REQUEST() can return binary data if the content-type is not text/* or application/*
  • updated: NoSQL joins support array values
  • updated: ROUTING(id:|search, [flags]) method
  • updated: F.path.mkdir(path, [cache]) can cache a current satte (default: false)
  • updated: controller.all() can return Array of all WebSocketClient
  • updated: startup info by adding user name
  • updated: LOCALIZE() now url arg can be a function which replaces F.onLocale

FIXES:

  • fixed: a critical bug with storing uploaded files via httpfile.fs() or httpfile.nosql()
  • fixed: a critical bug with JavaScript minificator
  • fixed: a critical bug with NoSQL counter and freezing app
  • fixed: a critical bug with rendering of multiple async components
  • fixed: a critical bug with GZIP compression (sometimes appeared in Safari)
  • fixed: nosql.update() and nosql.modify() methods if the first argument is a function
  • fixed: F.wait() in the test mode
  • fixed: LOCALIZE() for nested directories
  • fixed: sending of error handling when WebSocketClient is starting (for example: unauthorized)
  • fixed: versions and auto feature with enabled F.wait()
  • fixed: versions and auto feature with direct link to file
  • fixed: LOAD('release') a release mode
  • fixed: SchemaInstance.$clean() for nested schemas
  • fixed: extracting bundles (added /flow/ and /dashboard/)
  • fixed: subdomain routing for localhost
  • fixed: service for database cleaner
  • fixed: rendering group of components
  • fixed: RESTBuilder - JSON request without param sends an empty object
  • fixed: $MAKE() with callback
  • fixed: String.slug() for UTF - Chinese/Japan/Arabic/etc. chars
  • fixed: async rendering of components
  • fixed: RESTBuilder cache works only if the response status is 200
  • fixed: compressing CSS with \t tabs
  • fixed: controller.autoclear()
  • fixed: controller.proxy()
  • fixed: repeat mode in SCHEDULE()
  • fixed: --inspect argument for Workers by Tema Smirnov
  • fixed: TLS in SMTP mail sender
  • fixed: applying of versions
  • fixed: unit-tests reads only javascript files
  • fixed: controller.invalid() a problem with ErrorBuilder as a argument

REMOVED:

  • removed: F.config.debug
  • removed: controller.isDebug

IMPROVEMENTS:

  • improved: NoSQL reader
  • improved: UID() -> now it changes a random hash each minute
  • improved: CORS
  • improved: rendering of components
Assets 3

@petersirka petersirka released this Aug 1, 2018 · 597 commits to master since this release

News:

  • added: (IMPORTANT) bundles
  • added: (IMPORTANT) Total.js components can have async delegate
  • added: (IMPORTANT) Total.js components support nested public files encoded in base64
  • added: (IMPORTANT) NoSQL worker
  • added: (IMPORTANT) NoSQL embedded storage for smaller big data / IoT
  • added: debugging supports live reloading
  • added: new schema operations: schema.setInsert() and schema.setUpdate()
  • added: RESTBuilder.patch([data])
  • added: RESTBuilder.type(new-content-type)
  • added: CONVERT(obj, schema) for quick converting values like Schema (more in docs.)
  • added: Capitalize2 schema type which converts only the first char
  • added: MailMessage.high() sets high priority of the email messsage
  • added: MailMessage.low() sets low priority of the email messsage
  • added: MailMessage.confidential() sets Sensitivity header with confidential value
  • added: MailMessage.attachmentnosql(db, id, [name]) sends a file from NoSQL embedded database
  • added: MailMessage.attachmentfs(storage_name, id, [name]) sends a file from FileStorage
  • added: SchemaBuilderEntity.$stop() stops the async list
  • added: SchemaOptions.stop() alias to $.model.$stop()
  • added: SchemaOptions.next() alias to $.model.$next()
  • added: SchemaOptions.output() alias to $.model.$output()
  • added: SchemaOptions.clean() alias to $.model.$clean()
  • added: SchemaOptions.response() alias to $.model.$response([index])
  • added: SchemaOptions.$async(callback, [index]) alias to $.model.$async()
  • added: SchemaOptions.$get([options], [callback]) alias to $.model.$get()
  • added: SchemaOptions.$insert([options], [callback]) alias to $.model.$insert()
  • added: SchemaOptions.$query([options], [callback]) alias to $.model.$query()
  • added: SchemaOptions.$remove([options], [callback]) alias to $.model.$remove()
  • added: SchemaOptions.$save([options], [callback]) alias to $.model.$save()
  • added: SchemaOptions.$update([options], [callback]) alias to $.model.$update()
  • added: SchemaOptions.$workflow(name, [options], [callback]) alias to $.model.$workflow()
  • added: SchemaOptions.$transform(name, [options], [callback]) alias to $.model.$transform()
  • added: SchemaOptions.$operation(name, [options], [callback]) alias to $.model.$operation()
  • added: SchemaOptions.$hook(name, [options], [callback]) alias to $.model.$hook()
  • added: SchemaOptions.stop() alias to $.model.$stop()
  • added: a new route flag type &group something like roles but groups aren't evaluated
  • added: route.groups with defined groups
  • added: NoSQL database.listing([view]) which generates a listing response
  • added: DatabaseBuilder.insert(fn(doc)) can modify a document after update or modify has insert mode
  • added: DatabaseBuilder.query(code) can contain a raw JS condition in the form e.g. doc.age > 18 && doc.age < 33
  • added: DatabaseBuilder.regexp(name, regexp) RegExp search in strings
  • added: DatabaseBuilder.fulltext(name, regexp, [weight]) full text search in strings, more info in docs.
  • added: DatabaseBuilder.hour(name, [compare], value) creates a condition for hours
  • added: DatabaseBuilder.minute(name, [compare], value) creates a condition for minutes
  • added: Database.find2() performs faster and reverse reading of documents (from end to begin of the file)
  • added: Database.stream(fn, [repository], [callback(err, repository, count)]) for streaming documents
  • added: Database.lock(callback(next)) locks all internal DB operations
  • added: Database.ready(callback) executes a callback when DB is ready to use (only for special cases if you use indexes)
  • added: new directory schemas with a new configuration item `directory-schemas'
  • added: new directory operations with a new configuration item `directory-operations'
  • added: String.crc32([unsigned])
  • added: U.hash('crc32') and U.hash('crc32unsigned')
  • added: config nosql-worker' for enabling worker for NoSQL embedded database (default: false`)
  • added: config nosql-inmemory' can contain name of databases e.g. (users, products`) or String Array
  • added: config nosql-cleaner for cleaning databases from removed documents (default: 1440 === 24 hours)
  • added: config nosql-logger (default true) enables simple logs when re-indexing and cleaning
  • added: config security.txt for auto-generating security.txt content (more in docs)
  • added: config default-proxy for default web proxy server
  • added: config allow-cache-cluster (default true) allow/disallow cache synchronization
  • added: GUID() a global alias for U.GUID()
  • added: VIEW() a global alias for F.view()
  • added: SchemaBuilderEntity.$response([index]) returns a specific response from an operation in async queue
  • added: $SAVE(schema, model, [options], [callback], [controller]) performs schema.save()
  • added: $INSERT(schema, model, [options], [callback], [controller]) performs schema.insert()
  • added: $UPDATE(schema, model, [options], [callback], [controller]) performs schema.update()
  • added: $REMOVE(schema, [options], [callback], [controller]) performs schema.remove()
  • added: U.streamer2() same functionality as U.streamer() but it returns Buffer instead of String
  • added: Number.round([precision])
  • added: UID([type]) supports custom types, e.g. UID('users') or UID('orders')
  • added: REQUEST() global method, it's alias to U.request()
  • added: NOW global property, it's alias to F.datetime
  • added: DatabaseBuilder.promise()
  • added: RESTBuilder.promise()
  • added: RESTBuilder.plain() it returns a raw string from the response body
  • added: versions file supports auto value for generating auto-checksum of files
  • added: F.load() supports test
  • added: NoSQL binary supports custom small data attributes
  • added: CSS and JS supports a simple View Engine markup (config + resources + F.global)
  • added: controller.split alias to controller.req.split
  • added: nicer error response messages
  • added: RESTBuilder.proxy(proxy) for HTTP proxy
  • added: U.request() supports a new flag proxy, for example proxy 127.0.0.1:8080
  • added: NoSQL database a new event change, more in docs
  • added: schema.define()(DEFAULT_VALUE) added DEFAULT_VALUE
  • added: TESTUSER([user]) for faking of F.onAuthorize delegate, targeted for unit-testing only
  • added: G as a global alias for F.global
  • added: ERROR([name]) is an improved F.error() without arguments
  • added: a simple support for .heic and .heif image format
  • added: controller.sitemap_url2()
  • added: controller.sitemap_name2()
  • added: @{sitemap_url2()}
  • added: @{sitemap_name2()}
  • added: F.syshash contains a simple MD5 hash with OS info
  • added: SchemaEntity.clear() for removing all current definition
  • added: new view engine markup @{#} for simulating of root URL
  • added: new view engine command @{root} for getting sub-root path
  • added: String.ROOT() for replacing @{#} markup in strings
  • added: U.decryptUID(value, key) for encrypting number/string values
  • added: U.encryptUID(value, key) for decrypting of number/string values
  • added: F.config['secret-uid'] as a hidden secret for encrypting/decrypting values
  • added: F.dir(path) for changing of root directory
  • added: NOSQL()/TABLE().memory(count, [size]) for memory consumption, more in docs
  • added: HttpFile.fs(storage_name, [custom], [callback]) saves a file into the FileStorage
  • added: HttpFile.nosql(db_name, [custom], [callback]) saves a file into the FileStorage
  • added: res.filefs(storage_name, id, [download], [headers], [callback]) returns file from FileStorage
  • added: res.filenosql(db_name, id, [download], [headers], [callback]) returns file from NoSQL binary
  • added: res.imagefs(storage_name, id, image_make_fn, [headers], [callback]) returns file from FileStorage
  • added: res.imagenosql(db_name, id, image_make_fn, [headers], [callback]) returns file from NoSQL binary
  • added: new stats F.stats.performance contains count of request and file per minute
  • added: new method controller.operation(name, value, [callback], [options]) for evaluating of operation

Updates:

  • updated: (IMPORTANT) NoSQL binary divides files to independent directories for 1000 files per directory
  • updated: GROUP() by adding a new argument url_prefix
  • updated: NEWSCHEMA() supports NEWSCHEMA('group/name')
  • updated: ROUTE(), extended syntax for schemas, for example: Schema --> @name (more in docs.)
  • updated: ROUTE() supports a new HTTP method definition ROUTE('GET /api/users/'), ROUTE('POST /api/users/'), etc.
  • updated: ROUTE() supports a schema definition directly in the URL ROUTE('GET /api/users/ *User --> @save'), etc.
  • updated: tpm supports a new command called bundle, for example: tpm bundle cms
  • updated: F.restore() filter can return a new filename (for files only)
  • updated: @{import('livereload')} or @{import('livereload wss://mywebsite.com')} supports livereload value and it's rendered in debug mode only
  • updated: information after the framework is started
  • updated: schema.define('name', null) removes a schema field
  • updated: Chunker supports compression, default true
  • updated: Chunker supports autoremove processed files in each() or read() method, default true
  • updated: String.parseConfig(def, [onError]) can handle errors better
  • updated: middleware, now Total.js supports new declaration F.middleware(function($) {})
  • updated: F.wait() HTML template
  • updated: JavaScript compressor, now optimizes multiple var declarations
  • updated: CORS() without arguments for all routes, methods and origins
  • updated: CORS() tries to join multiple same preferences to one
  • updated: CORS(path) without additional arguments allows all HTTP methods
  • updated: U.keywords() for Chinese/Japan characters
  • updated: @{import()} by adding manifest value linked to /manifest.json
  • updated: F.use() supports function instead of middleware name
  • updated: improved crypto algorithm
  • updated: decreased a maximum count of keys to 33 from 69 when the query string is parsing
  • updated: extended schema.required(name, (model, workflow) => workflow.update), more in docs.
  • updated: $MAKE(schema, model, [filter/workflows], ...) supports workflows (array or object) instead of filter for schema.required()
  • updated: OPERATION() by adding controller

Fixes:

  • fixed: mail attachments
  • fixed: mail message.manually()
  • fixed: WebSocket comparing of origin header
  • fixed: uninstalling CORS routes
  • fixed: cache for favicon
  • fixed: Date.extend()
  • fixed: String.isJSON() validator
  • fixed: String.parseDate() now it parses date to UTC correctly
  • fixed: Date.format() now it formats a date as UTC correctly
  • fixed: HTML compressor with \r\n (Windows line endings)
  • fixed: schema validation
  • fixed: U.atob()
  • fixed: U.btoa()
  • fixed: schema field can be changed dynamically
  • fixed: String.arg()
  • fixed: controller.href() with Array values
  • fixed: U.get() a problem with path with -
  • fixed: U.set() a problem with path with -
  • fixed: F.path.mkdir() in Windows and Linux

Changes:

  • replaced: config disable-clear-temporary-directory to allow-clear-temp : true|false
  • replaced: config disable-strict-server-certificate-validation to allow-ssc-validation : true|false
  • replaced: config default-websocket-request-length to default-websocket-maxlength
  • replaced: config default-request-length to default-request-maxlength
  • replaced: config default-maximum-file-descriptors to default-maxopenfiles
  • replaced: controller.proxy() functionality (the name remains) via controller.proxy2() functionality

Removed:

  • removed: F.responseFile()
  • removed: F.responsePipe()
  • removed: F.responseImage()
  • removed: F.responseImageWithoutCache()
  • removed: F.responseStream()
  • removed: F.responseBinary()
  • removed: F.responseContent()
  • removed: F.responseRedirect()
  • removed: F.response400()
  • removed: F.response401()
  • removed: F.response404()
  • removed: F.response408()
  • removed: F.response431()
  • removed: F.response500()
  • removed: F.response501()
  • removed: F.responseStatic()
  • removed: F.setModified()
  • removed: F.notModified()
  • removed: F.responseCode()
  • removed: F.noCache()
  • removed: controller.$modified()
  • removed: controller.$etag()

Improvements:

  • improved: debug mode timing with improved consumption
  • improved: performance (+20%) NoSQL embedded database
  • improved: reading performance (+5%) in U.streamer()
  • improved: CSS compressor
  • improved: CORS processing
  • improved: internal encryption/decryption mechanism
Assets 3

@petersirka petersirka released this Feb 24, 2018 · 1178 commits to master since this release

Fixes:

  • fixed: mail attachments
  • fixed: comparing origin header in WebSocket
  • fixed: unit-testing
Assets 3

@petersirka petersirka released this Feb 5, 2018 · 1181 commits to master since this release

News:

  • added: String.arg(obj) for a simple templating Hello {variable}!
  • added: new event ON('@controllername', function() {}) -> is executed if the controller is evaluated

Updates:

  • updated: RESTBuilder default headers are lower-case
  • updated: content-disposition header by adding utf-8 according to RFC 5987

Fixes:

  • fixed: a missing property controller.params in WebSocket controller
  • fixed: $ASYNC() execution in some cases
  • fixed: SCRIPT() code with comments
  • fixed: a callback reference in OPERATION()
  • fixed: cache after route is removed
  • fixed: 409 system route
  • fixed: requests with range header and bad values
  • fixed: clearSchedule()
  • fixed: Date.extend() problem with months
  • fixed: NoSQL counter reading stats
Assets 3

@petersirka petersirka released this Jan 18, 2018 · 1208 commits to master since this release

News:

  • added: controller.html(body, [headers])
  • added: F.cluster.master(name, [data]) - for child processes, this method emits an event in master process
  • added: F.cluster.on(name, callback(data)) - master event listener
  • added: LOGMAIL() global alias for F.logmail()
  • added: MAIL() global alias for F.mail()
  • added: own implementation of onFinished
  • added: RESTBuilder.cookies(obj) can set cookies as raw object
  • added: RESTBuilder.cook([true/false]) enables persistent cookies
  • added: SchemaOptions.params which returns dynamic params from the controller's action
  • added: SchemaOptions.done([arg]) as a callback (contains wrapped SUCCESS())
  • added: SchemaOptions.DB() which returns DB(this.error) instance (for SQL Agent)
  • added: OperationOptions.done([arg]) as a callback (contains wrapped SUCCESS())
  • added: OperationOptions.DB() which returns DB(this.error) instance (for SQL Agent)
  • added: static method Image.measure(type, buffer) for measuring width/height of image
  • added: EACHOPERATION(function(name) {}) for obtaining all registered operations
  • added: controller.params which returns dynamic params from the action

Updates:

  • updated: F.load(), now supports string for debug or release mode
  • updated: F.cluster.request() can be executed from master process
  • updated: Image.miniature() change a default filter from Box to Hamming
  • updated: U.request() supports a new flag cookies which enables a parsing cookies from response

Fixes:

  • fixed: schema validation (problem with Arrays)
  • fixed: determines x-forwarded-proto
  • fixed: nested schema validation
  • fixed: themes static routing
  • fixed: NoSQL reader
  • fixed: NoSQL counter (sorting while reading stats)
  • fixed: loading dependencies
  • fixed: uninstalling middleware
  • fixed: reading/updating sitemap in controller

Removal:

  • removed: max. sort string length
  • removed: auto appending .css and .js extension in view engine
  • removed: experimental defer feature

Improvements:

  • improved: GZIP compression
  • improved: code
Assets 3

@petersirka petersirka released this Nov 26, 2017 · 1300 commits to master since this release

News:

  • added: controller.throw409(), req.throw409()
  • added: new view aliases: @{R.something} for repository, @{M.something} for model and @{G.something} for global

Updates:

  • updated: ErrorBuilder.push() supports .push(name, status_code) or .push(name, error, status_code)

Fixes:

  • fixed: sitemap language auto-setting
  • fixed: NoSQL: builder.paginate() a problem with zero limit (default limit will be maxlimit)
  • fixed: NoSQL number filtering
  • fixed: localization of ErrorBuilder in controllers
Assets 3

@petersirka petersirka released this Nov 16, 2017 · 1316 commits to master since this release

News:

  • added: WebSocketClient
  • added: $ASYNC(schema, callback, [index], [controlller]) alias to SchemaBuilderEntity.$async()
  • added: ArrayBuffer.prototype.toBuffer()
  • added: AUTH(fn) is an alias to F.onAuthorize = fn
  • added: controller.success() alias to controller.json(SUCCESS(value))
  • added: CORS() alias to F.cors()
  • added: DatabaseBuilder.paginate(page, limit)
  • added: F.config['allow-compile'] can disable the whole compilation of static files
  • added: F.config['default-dependency-timeout'] it's a timeout for module dependencies
  • added: F.path.rmdir(directory/directories, callback)
  • added: F.path.unlink(file/files, callback)
  • added: LOCALIZE() a new global alias to F.localize()
  • added: MAP() a new global alias to F.map()
  • added: MERGE() a new global alias to F.merge()
  • added: MIDDLEWARE() a new global alias to F.middleware()
  • added: NOSQL('users').backups([filter(doc)], callback(err, response)) returns all backups
  • added: SchemaOptions.invalid(name, [value], [path], [index]) alias to $.errors.push() + callback()
  • added: SchemaOptions.success() alias to callback(SUCCESS(value))
  • added: controller.sitemapid contains a sitemap identificator
  • added: controller.sitemap_add(parent, name, url) appends a new item into the sitemap per request
  • added: @{sitemap_add(parent, name, url)} appends a new item into the sitemap per request
  • added: SchemaEntity.required('fieldname', boolean/function(model)) which can disable/enable validation for this field

Updates:

  • updated: sitemap routing can contain an additional path, e.g. #sitemapid/path/
  • updated: F.localize() supports sitemap routing
  • updated: F.merge() supports sitemap routing
  • updated: F.map() supports sitemap routing
  • updated: F.http(mode, [options], [middleware(listen)]) added a new argument middleware
  • updated: debug.js now reads directories according to the config (author: @luoage)
  • updated: config parser supports config sub-type
  • updated: controller.$exec() --> callback is by default controller.callback()
  • updated: F.localize() has enabled compression by default
  • updated: HTTP server is listening after the framework is completely loaded
  • updated: (IMPORTANT) HTTP cache in dynamic content and static files
  • updated: F.prototypes() by adding OperationOptions
  • updated: ErrorHandling in schemas (supports inline validation and advanced conditions)
  • updated: F.noCache() is obsolete
  • renamed: allow-handle-static-files to allow-static-files

Fixes:

  • fixed: (IMPORTANT) DatabaseBuilder.in()
  • fixed: (IMPORTANT) U.ls2()
  • fixed: (IMPORTANT) WebSocket implementation (author: @JozefGula)
  • fixed: ArrayBuffer in webosocket
  • fixed: F.path.mkdir() on Windows (author: @molda)
  • fixed: F.restore() on Windows (author: @molda)
  • fixed: F.rmdir removes all files and directories
  • fixed: JSON type in Total.js schemas
  • fixed: MODEL(), MODULE(), INCLUDE() now are direct aliases
  • fixed: a check for maximum length of request data
  • fixed: Date formatting with a value
  • fixed: empty localization in view engine e.g. @()
  • fixed: external static routing in view engine on Windows
  • fixed: NoSQL filtering with or
  • fixed: NoSQL multiple updates
  • fixed: NoSQL sorting of boolean values in larger dataset
  • fixed: responding on range header
  • fixed: unit testing (author: @ckpiggy)
  • fixed: schema.setPrefix() in nested schemas
  • fixed: sitemap localization
  • fixed: CORS custom headers
  • fixed: NoSQL date filtering

Improvements:

  • improved: performance and security
Assets 3

@petersirka petersirka released this Sep 6, 2017 · 1486 commits to master since this release

News:

  • added: NOSQL().restore() restores a database (its package)
  • added: Mail options support a new property xoauth2 (it needs to contain a BASE64 value) for sending emails via OAuth 2.0 tokens (more in docs)
  • added: F.path.mkdir(path) creates all directories according to the path
  • added: MailMessage.send2([callback]) sends a message according to the framework configuration
  • added: a new filter for NoSQL embedded DatabaseBuilder.contains(name)
  • added: a new filter for NoSQL embedded DatabaseBuilder.empty(name)
  • added: (IMPORTANT) NoSQL counter supports daily stats (NoSQL counter files will be upgraded automatically and backwards incompatible)
  • added: (IMPORTANT) NoSQL database and counter can read data from URL
  • added: NoSQL counter db.counter.daily_sum([id], callback) for reading stats
  • added: NoSQL counter db.counter.daily_max([id], callback) for reading stats
  • added: NoSQL counter db.counter.daily_min([id], callback) for reading stats
  • added: NoSQL counter db.counter.monthly_sum([id], callback) for reading stats
  • added: NoSQL counter db.counter.monthly_max([id], callback) for reading stats
  • added: NoSQL counter db.counter.monthly_min([id], callback) for reading stats
  • added: NoSQL counter db.counter.yearly_sum([id], callback) for reading stats
  • added: NoSQL counter db.counter.yearly_max([id], callback) for reading stats
  • added: NoSQL counter db.counter.yearly_min([id], callback) for reading stats
  • added: NoSQL counter db.counter.stats_sum(top, [year], [month], [day], callback) for reading stats
  • added: NoSQL counter db.counter.stats_max(top, [year], [month], [day], callback) for reading stats
  • added: NoSQL counter db.counter.stats_min(top, [year], [month], [day], callback) for reading stats
  • added: NoSQL counter db.counter.minimum([id], callback) for reading stats
  • added: NoSQL counter db.counter.maximum([id], callback) for reading stats
  • added: NoSQL counter db.counter.min(id, value) for writing stats
  • added: NoSQL counter db.counter.max(id, value) for writing stats
  • added: NoSQL counter db.counter.sum(id, value) for writing stats (alias for db.counter.hit())
  • added: NoSQL counter: a new event stats when the stats are changed
  • added: NoSQL logging in DatabaseBuilder.log(msg, [user])
  • added: NoSQL backuping documents while they are updating/removing in DatabaseBuilder.backup([user])
  • added: CLONE(obj) alias for U.clone()
  • added: GROUP(flags, fn) alias for F.group()
  • added: F.cache.set2() it creates a persistent cache (persistent items are stored in a file)
  • added: new View Engine command @{'%config'} which reads a value from config directly
  • added: F.config['allow-filter-errors'] for filtering network unhandled errors
  • added: REDIRECT() alias for F.redirect()

Updates:

  • updated: (IMPORTANT) packages compress/decompress function supports streaming data
  • updated: (IMPORTANT) NOSQL().backup() !!! was changed !!!!
  • updated: controller.view(name/url, [model], [headers], [partial]) can render a view from URL address
  • updated: F.backup() argument path can contain String Array file list
  • updated: controller.viewCompile(body, model, [headers], [partial], [cacheKey]) add a cache key
  • updated: image.command(arg, value, [priority], [escape]) a priority argument can be escape when it contains boolean value
  • updated: U.getExtension() returns lower-case extensions
  • updated: total.js/debug watchs /workflows file
  • updated: file /workflows supports custom options, more in docs
  • updated: Array.random() algorithm (+70% faster than older)
  • updated: RESTBuilder.file(name, filetarget, [filename]) can contain filename instead of buffer
  • updated: U.streamer(beg, [end], onItem(item, index), [skip], [stream]) added a new argument stream for flushing buffer
  • updated: ErrorBuilder.addTransform(name, callback(isResponse)) by adding new argument isresponse
  • updated: sorting (framework + NoSQL embedded), now supports internationalization
  • updated: total.js/debugger by adding a new option options.watch = ['directory']
  • updated: U.streamer() supports "cancelation", just return false
  • updated: CSS auto-prefixer, added: repeating-linear-gradient, radial-gradient, repeating-radial-gradient and removed -o prefix

Fixes:

  • fixed: (IMPORTANT) long messages in WebSocket
  • fixed: (IMPORTANT) controller param in schemas
  • fixed: moved executing of MailMessage.callback() to better place
  • fixed: mail auth when options.user and options.password are blank
  • fixed: JS/CSS/HTML blocks
  • fixed: F.prototypes()
  • fixed: F.decrypt() a problem with parsing JSON and date formats
  • fided: debug.js sometimes was created a problem with output informations

Improvements:

  • improved: Date formatting (+50%)
  • improved: NoSQL performance (around 60% in some cases)
Assets 3

@petersirka petersirka released this Jul 4, 2017 · 1601 commits to master since this release

News:

  • added: IMPORTANT new unit-testing mechanism
  • added: IMPORTANT F.prototypes(function(proto) {}) for extending all internal prototypes
  • added: HttpFile is set in global for extending of prototype
  • added: file.move() a new alias for file.rename()
  • added: SchemaBuilderEntity.$controller(new_controller)
  • added: EMPTYCONTROLLER is a global variable
  • added: new alias NOSQL.set() and NOSQL.get() for NOSQL.meta()
  • added: RESTBuilder.file(name, filename, [buffer]) supports uploading files
  • added: RESTBuilder.mobile() adds iPhone phrase into the User-Agent header
  • added: RESTBuilder.robot() adds Bot phrase into the User-Agent header
  • added: a small protection for multipart data
  • added: a new global aliases ROUTE() --> F.route(), FILE() --> F.file() and WEBSOCKET() --> F.websocket()

Updates:

  • updated: IMPORTANT components (framework can render css/js from specific group)
  • updated: F.cluster each operation checks whether cluster is activated
  • updated: default IP to 0.0.0.0
  • updated: Date.prototype.format() with ddd renders name of day with 2 capital letters

Fixes:

  • fixed: new schemas with defined callback function($)
  • fixed: loading of config-test file (added rewriting of existing values)
  • fixed: Total.js version in debug.js
  • fixed: cluster initialization

Improvements:

  • improved: cors in F.restful() and F.restful2()
  • improved: auto-vendor-prefixes
  • improved: parsing files from multipart data
Assets 3
You can’t perform that action at this time.