Node.js framework

Overview

Professional Support Chat with contributors NPM version NPM quality NPM downloads MIT License Build Status Gitter chat

Node.js framework

Total.js framework is a framework for Node.js platfrom written in pure JavaScript similar to PHP's Laravel or Python's Django or ASP.NET MVC. It can be used as web, desktop, service or IoT application.

IMPORTANT: New version Total.js 4

$ npm install -g total.js

Official support

Top features
Offline documentation
Backward compatibility
HMVC architecture
Clean directory structure
Fully asynchronous
Full web server with serving of static files
Supports IP restrictions
Supports redirections
Supports reusable components
Supports just-in-time JS, CSS (variables and nesting) and HTML compressor
Supports just-in-time merging of static files (JavaScripts, CSS or HTML)
Supports just-in-time mapping of files
Supports media streaming (e.g. videos)
Supports modules and packages
Built-in image processing engine via ImageMagick or GraphicsMagick
Supports WebSockets (RFC 6455) and Server-Sent events
NEW Supports WebSockets client
Supports multipart/x-mixed-replace (IP camera streaming) uploading and sending
Supports RESTful routing
Supports middleware (like express.js) with custom options
Supports unit testing
Supports workers for heavy CPU operations
Supports 4x config files (common, debug, release and test)
Mailer with templating (Gmail, Outlook or classic SMTP servers with auth and TLS)
Built-in view engine (layouts, nested views, conditions, loops, inline helpers, etc.)
Localization with diff tool and CSV export
Supports cache mechanism
Supports schemas for creating business objects with validations, workflows, etc.
Supports injecting scripts, packages and views from URL
Supports String, Date, Number and Array prototypes
Supports additional utilities (e.g. create request, XML parsing, etc.)
Supports themes
Supports scripting
Possibility to rewrite existing functionality
NoSQL embedded database

Social networks

Please support the framework on social networks.

Contact

Comments
  • Do partial.js support flush

    Do partial.js support flush

    Do partial.js supprot flush to send and how to combine with the layout?

    the case study is

    • I get request query for the head and navigation data
    • instead of waiting the next query, I want to flush it then do the next query

    Do you support it?

    question 
    opened by goldalworming 34
  • Html image map not rendering properly

    Html image map not rendering properly

    Hi, In our application we are using Html image maps, for rendering world map but since totaljs is handling all the css, js, html its messing up the coordinates

    <area shape="circle" class="maphilighted masterTooltip" title="Faroe Islands" coords="NaN,NaN,NaN">

    I have tried disabling css, js, html compression and handling but its not working properly. Our config file looks like this but total is still handling all the static files.

    directory-public : ../../public directory-views : ../../public allow-compile-css : false allow-compile-html : false allow-compile-js : false static-url : ../../public static-url-css : ../../public static-url-download : ../../public static-url-font : ../../public static-url-image : ../../public static-url-js : ../../public static-url-video : ../../public

    Any help we will really appreciated.

    opened by DarkKnight1992 27
  • multipart parser

    multipart parser

    Sometimes I see this string as filename: form-data; name="file4"; filename="

    Looks like somthing wrong with multipart parser.

    And it is possible to use third party multipart parser like formidable with total.js ?

    waiting for more info 
    opened by sersh88 26
  • controller.req.data.post is undefined and websocket authorization

    controller.req.data.post is undefined and websocket authorization

    Hi peter;

    I'm using version 1.5 and use controller.req.data.post but last version getting this error;

    default ---> TypeError: Cannot read property 'post' of undefined ([object Object]) TypeError: Cannot read property 'post' of undefined

    second problem:

    i'm using authorization module and websocket request. i'm getting error in websocket request.

    ReferenceError: req is not defined ReferenceError: req is not defined at WebSocketClient.protocol (/var/www/vw_kodlar/client/generator_web/node_modules/total.js/index.js:5:31885) at WebSocketClient.prepare (/var/www/vw_kodlar/client/generator_web/node_modules/total.js/index.js:6:914) at EventEmitter.Framework._upgrade_continue (/var/www/vw_kodlar/client/generator_web/node_modules/total.js/index.js:3:951) at /var/www/vw_kodlar/client/generator_web/node_modules/total.js/index.js:3:809 at EventEmitter.Users._onAuthorization (/var/www/vw_kodlar/client/generator_web/modules/authorization.js:22:588) at EventEmitter.framework.onAuthorization (/var/www/vw_kodlar/client/generator_web/modules/authorization.js:22:3788) at EventEmitter.Framework._upgrade_prepare (/var/www/vw_kodlar/client/generator_web/node_modules/total.js/index.js:3:540) at EventEmitter.Framework._upgrade (/var/www/vw_kodlar/client/generator_web/node_modules/total.js/index.js:2:31827) at Server. (/var/www/vw_kodlar/client/generator_web/node_modules/total.js/index.js:2:21383) at Server.EventEmitter.emit (events.js:106:17)

    Problems occurred when updating to the latest version, a little bit about backwards compatibility problems.

    Thanks.

    opened by KiPSOFT-zz 24
  • Can someone provide me an example of how to use SCHEMA?

    Can someone provide me an example of how to use SCHEMA?

    I've spent days now trying to figure both the concept of SCHEMAS out, and how to actually use them. I've been through all examples code, and the sparse documentation on the matter, but none of these have made it any more clear how to use them, let alone understand the benefit of them.

    Now, a thorough tutorial on this subject would be VERY nice ... as they seem very conceptual to me.

    Unfortunately aubergine10 stopped the development of this wiki: https://github.com/totaljs/documentation/wiki/Schemas

    Which actually seemed to be pretty much what you'd need to understand the concept and the use of SCHEMAS.

    So, a shout out to @aubergine10 in the hope he'd continue his work.

    opened by blaasvaer 21
  • How to run Total.js Debug?

    How to run Total.js Debug?

    https://docs.totaljs.com/latest/en.html#pages~Debugging~(how-to-run-total-js-debug-)

    yay, cool info, thanks bro! I'm sure it works in Sublime, BUT can you tell me how VisualStudioCode must be configured to run debug.js? If I run with following config: { "type": "node", "request": "launch", "name": "total-blabla", "program": "${workspaceFolder}\\debug.js" }

    all I get is: -------------------------> DEBUG PID: 7316 (v2.9.4) debug.js:323 and then process stops and program exits.

    opened by Jusys 18
  • Problem about sending file with range header

    Problem about sending file with range header

    I've setup a nginx server as reverse proxy for my website. When I test facebook share debuger I got the logs from nginx proxy

    upstream prematurely closed connection while reading upstream, 
    client: xxx.xxx.xx.xxx, server: XXXX.com. , 
    request: "GET / HTTP/1.1", upstream: "http://xxx.xx.xx.xx:80/", host: "XXXX.com."
    
    GET / HTTP/1.1" 206 70489 "-" "facebookexternalhit/1.1 (+http://www.facebook.com/externalhit_uatext.php)
    

    The request headers:

    { host: 'archspace.com.tw',
      'x-real-ip': '173.252.90.87',
      'x-forwarded-for': '173.252.90.87',
      'x-forwarded-proto': 'https',
      connection: 'close',
      'user-agent': 'facebookexternalhit/1.1 (+http://www.facebook.com/externalhit_uatext.php)',
      accept: '*/*',
      'accept-encoding': 'deflate, gzip',
      range: 'bytes=0-524287' }
    

    It seems that the upstream close connection before all the data send. What should I config to let the server not to close the connection ?

    bug framework 
    opened by ckpiggy 18
  • Total.js on iinode return only 404: Not Found

    Total.js on iinode return only 404: Not Found

    Hello Peter, I'm trying to make the total.js run in my IIS

    I have worked with other frameworks and I have not had a problem, I think I'm doing something wrong, or not doing something.

    Can you help me?

    My release.js file:

    const fs = require('fs');
    const options = {};
    
    options.ip = 'auto';
    options.port = process.env.port;
    
    var framework = require('total.js');
    framework.http('release', options);
    

    My controllers/default.js

    exports.install = function() {
    	F.route('/', view_index);
    	// or
    	 //F.route('/');
    };
    
    function view_index() {
    	var self = this;
    	self.plain('Demo 2');
    }
    

    My web.config

    <configuration>
      <system.webServer>
    
        <handlers>
          <!-- indicates that the app.js file is a node.js application to be handled by the iisnode module -->
          <add name="iisnode" path="release.js" verb="*" modules="iisnode" />
        </handlers>
    
        <rewrite>
          <rules>        
            <!-- Don't interfere with requests for node-inspector debugging -->
            <rule name="NodeInspector" patternSyntax="ECMAScript" stopProcessing="true">
              <match url="^release.js\/debug[\/]?" />
            </rule>
    
            <!-- First we consider whether the incoming URL matches a physical file in the /public folder -->
            <rule name="StaticContent">
              <action type="Rewrite" url="{REQUEST_URI}" />
            </rule>
    
            <!-- All other URLs are mapped to the Node.js application entry point -->
            <rule name="DynamicContent">
              <conditions>
                <add input="{REQUEST_FILENAME}" matchType="IsFile" negate="True" />
              </conditions>
              <action type="Rewrite" url="release.js" />
            </rule>
            
          </rules>
        </rewrite>
    
      </system.webServer>
    </configuration>
    

    IISNODE LOG

    ====================================================
    PID         : 11288
    Node.js     : v7.4.0
    Total.js    : v2.5.0
    OS          : win32 10.0.14393
    ====================================================
    Name        : Total.js
    Version     : 1.0.0
    Author      : 
    Date        : 2017-05-17 01:27:27
    Mode        : release
    ====================================================
    
    http://auto:\\.\pipe\104e4909-f788-4450-874b-0c4aee876a3e/
    

    image

    image

    image

    opened by hessel 17
  • Two spaces to empty

    Two spaces to empty

    Hello. When config 'allow-compile-html' is true, then two spaces between words compiled to 0 spaces.

    first[space]word[space][space]secon[space]word -> first[space]wordsecond[space]word

    bug 
    opened by maxxam11 17
  • unable to disable js minification

    unable to disable js minification

    i have added this in the config file

    allow-compile-js : false

    but total is still minifying the js files that don't have ".min." in the name.

    I know minifying the files is the best way and that's how it should be done but the problem since we are porting an existing app, the old code is not optimized to be minified and throws a lot of errors.

    opened by DarkKnight1992 16
  • upload 404 not found

    upload 404 not found

    Hi,

    I think is issue. i'm upload the file but i'm getting error 404 not found.

    node: 6.6.0 total.js: 2.0.1

    server side; framework.route('/crm/medya/dosyaYukle', dosyaYukle, ['upload', 'post'], 50000);

    client side;

    Request URL: http://crms.link/func/crm/medya/dosyaYukle Request Method: POST Status Code:404 Not Found Remote Address: 192.168.7.55:80

    Accept:/; q=0.5, application/json Accept-Encoding:gzip, deflate Accept-Language:tr-TR,tr;q=0.8,en-US;q=0.6,en;q=0.4 Connection:keep-alive Content-Length:191941 Content-Type:multipart/form-data; boundary=----WebKitFormBoundaryOCgT75JkRQFwkNWK DNT:1 Host:crms.sanal.link Origin:http://crms.link Referer:http://crms.link/ User-Agent:Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/53.0.2785.92 Safari/537.36

    Request Payload ------WebKitFormBoundaryOCgT75JkRQFwkNWK Content-Disposition: form-data; name="files"; filename="kara anons 1.mp3" Content-Type: audio/mp3

    Thanks.

    waiting for more info 
    opened by KiPSOFT-zz 16
Releases(v3.4.5)
  • v3.4.5(Jul 10, 2020)

  • v3.4.4(Jul 7, 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
    Source code(tar.gz)
    Source code(zip)
  • v3.4.3(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
    Source code(tar.gz)
    Source code(zip)
  • v3.4.1(Mar 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)
    Source code(tar.gz)
    Source code(zip)
  • v3.4.0(Feb 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()
    Source code(tar.gz)
    Source code(zip)
  • v3.3.2(Nov 12, 2019)

  • v3.3.1(Nov 7, 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
    Source code(tar.gz)
    Source code(zip)
    empty-project.zip(334.05 KB)
  • v3.3.0(Sep 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()
    Source code(tar.gz)
    Source code(zip)
    empty-project.zip(331.02 KB)
  • v3.2.0(Feb 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 '
    Source code(tar.gz)
    Source code(zip)
    empty-project.zip(293.68 KB)
  • v3.1.0(Dec 7, 2018)

    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
    Source code(tar.gz)
    Source code(zip)
    empty-project.zip(291.69 KB)
  • v3.0.0(Aug 1, 2018)

    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
    Source code(tar.gz)
    Source code(zip)
    empty-project.zip(294.51 KB)
  • v2.9.4(Feb 24, 2018)

  • v2.9.3(Feb 5, 2018)

    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
    Source code(tar.gz)
    Source code(zip)
    empty-project.zip(240.28 KB)
  • v2.9.2(Jan 18, 2018)

    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
    Source code(tar.gz)
    Source code(zip)
    empty-project.zip(239.47 KB)
  • v2.9.1(Nov 26, 2017)

    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
    Source code(tar.gz)
    Source code(zip)
    empty-project.zip(239.70 KB)
  • v2.9.0(Nov 16, 2017)

    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
    Source code(tar.gz)
    Source code(zip)
    empty-project.zip(239.41 KB)
  • v2.8.0(Sep 6, 2017)

    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)
    Source code(tar.gz)
    Source code(zip)
    empty-project.zip(231.76 KB)
  • v2.7.0(Jul 4, 2017)

    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
    Source code(tar.gz)
    Source code(zip)
    empty-project.zip(221.80 KB)
  • v2.6.2(Jun 5, 2017)

  • v2.6.1(Jun 5, 2017)

  • v2.6.0(May 30, 2017)

    News:

    • added: F.config['default-errorbuilder-status'] a default HTTP status for all error builders default 200
    • added: F.config['default-listenpath'] starts a UNIX socket server listening for connections on the given path
    • added: F.listenpath contains default-listenpath location
    • added: F.custom(mode, http, request_prototype, response_prototype, options) a new mode for overwriting default HTTP server
    • added: schema.inherit([group], name) can inherit all values from another schema
    • added: NoSQL synchronization for cluster (more in docs)
    • added: cache synchronization for cluster (more in docs)
    • added: F.cluster (more in docs)
    • added: Total.js debug script require('total.js/debug') instead of debug.js file
    • added: a support for async attribute when <script async src=" tag is generating, e.g. @{import('async default.js')}

    Updates:

    • updated: F.http(type, options) supports options.listenpath for HTTP server (a direct shortcut for default-listenpath)
    • updated: F.script returns error if compilation fails
    • updated: debug.js supports inspector
    • updated: NoSQL embedded database sorting (increased read performance about 30%)
    • updated: RESTBuilder parsers JSON date string as Date object
    • updated: favicon() generates <link rel="icon" instead of <link rel="shortcut icon"

    Fixes:

    • fixed: controller.send() bad declaration of connection.id for id and blacklist arguments
    • fixed: totaljs --translate problem with node_modules and .git directory
    • fixed: a waiting mode in GETSCHEMA()
    • fixed: cache instance.cache() in RESTBuilder
    • fixed: NoSQL filtering (critical)
    • fixed: a bug ImageMagick/GraphicsMagick when the path contains spaces (critical)
    • fixed: controller.memorize() didn't work (critical)
    • fixed: dynamic params when controller.transfer() is performed
    Source code(tar.gz)
    Source code(zip)
    empty-project.zip(220.79 KB)
  • v2.5.0(Apr 18, 2017)

    News:

    • added: a missing property for WebSocket controller controller.mobile
    • added: EMIT() alias for F.emit()
    • added: ON() alias for F.on()
    • added: OFF() alias for F.removeListener(eventName, listener) or F.removeAllListeners([eventName])
    • added: controller.components() adds script/css tag into the head
    • added: @{components([group], [settings])} renders all components together from selected group
    • added: a new alias WAIT() alias for U.wait()
    • added: res.status(code) for express middleware
    • added: F.clearSchedule(id) for removing existing schedules
    • added: a support for WebSocket compression
    • added: removing .package files from tmp directory
    • added: a new schema implementation (more in docs)
    • added: F.restful2() has simplified route mechanism (it doesn't use "{id}" param for insert(POST)/update(POST)/delete(DELETE) method with except "GET" method)
    • added: res.binary(buffer, contentType, [type], [download], [headers])
    • added: a new route flag novalidate (a prevention for Schema validation)
    • added: U.upload(files, url, [callback], [cookies], [headers], [method], [timeout]) for multiple uploading files
    • added: RESTBuilder.redirect(true/false) enables/disables auto-redirect (default: enabled)
    • added: new schema aliases ($QUERY(), $GET(), $WORKFLOW(), '$TRANSFORM()' and $OPERATION())
    • added: allow-head (default: false) adds head method into the each route automatically
    • added: F.config['allow-defer'] enables deferring functions with DEFER keyword (default: false)
    • added: DEFER feature
    • added: F.config['allow-debug'] starts a mini debugger
    • added: res.image_nocache() alternative to F.responseImageWithoutCache
    • added: req.localize() performs localization (executes F.onLocale)
    • added: image.limit(type, value) creates a memory/map/disk/etc. limitation for GM or IM
    • added: default-image-consumption for GM/IM memory limitation (default value 30%)
    • added: F.useSMTP(smtp, [options], [callback(err)]) rewrites current SMTP settings

    Updates:

    • updated: F.http('debug/release/test', { debug: true }) can start a mini debugger
    • updated: F.route(), F.websocket() and F.file() --> now returns FrameworkRoute instance instead of Framework instance (more in docs)
    • updated: F.load(debug, [types], [path]) supports a new type service which enables F.on('service')
    • updated: Components (now doesn't have to has html body)
    • updated: A component implementation can contain exports.group = 'name';
    • updated: framework loads all dependencies in order
    • updated: routes (web/websockets/files) can have an identificator in this form `F.route('/', ['id:custom_dentificator']);
    • updated: UNINSTALL(type, url/id/fn) supports new types web, websocket and file, e.g. UNINSTALL('web', 'id:custom_identificator')
    • updated: U.request(), added a new flag: raw (sends raw data)
    • updated: F.schedule() returns an identificator
    • updated: U.clone() supports buffer properties
    • updated: setTimeout2(name, fn(param), timeout, [limit], [param]) added a new argument limit and param
    • updated: F.script() --> now argument (in the script body) is function now() which it still returns new Date()
    • updated: F.script(body, value, callback(err, response, param), [param]) --> param argument is a helper
    • updated: middleware next(false) cancels calling of next middleware and controller
    • updated: OPERATION(name, value, [callback(err, response, param)], [param]) added a new (helper) argument param
    • updated: Mail error handling (added Message instance)
    • updated: U.request() add a new flag noredirect
    • updated: F.exists(req, res, [max], callback(next, filename, req, res)) added a new arguments into the callback req and res
    • updated: F.memorize() uses themeName as a part of the cache key
    • updated: debug.js (missing startup directory)

    Modifications:

    • renamed: configuration mail.address.from for mail-address-form
    • renamed: configuration mail.address.reply for mail-address-reply
    • renamed: configuration mail.address.copy for mail-address-copy
    • renamed: configuration mail.smtp for mail-smtp
    • renamed: configuration mail.smtp-options for mail-smtp-options

    Fixes:

    • fixed: config static-accepts (it didn't work)
    • fixed: routing with upload flag
    • fixed: workers timeout
    • fixed: modificators by George Okojie Davis
    • fixed: NoSQL comparing dates equal in where condition
    • fixed: a problem with booting packages if are used custom paths (by @harry-stot)
    • fixed: JavaScript compression
    • fixed: allow-compile-style for inline CSS in views

    Improvements:

    • improved: events
    • improved: parsing data from requests
    • improved: mechanism of components
    • improved: performance
    • improved: responding
    • improved: mail attachments
    Source code(tar.gz)
    Source code(zip)
    empty-project.zip(215.08 KB)
  • v2.4.0(Feb 6, 2017)

    News:

    • added: components more in docs
    • added: X-Powered-By header again with option to change/remove it in the framework config default-xpoweredby : Total.js
    • added: UPTODATE(type, url, [options], interval, [callback(err)]) more in docs
    • added: F.on('uptodate', function(type, name) {}) new event for up-to-date dependencies
    • added: F.stats.other.mail with a count of sent emails
    • added: F.stats.response.errorBuilder with count of sent ErrorBuilders
    • added: F.stats.response.image with count of processed images via GM or IM
    • added: F.stats.request.schema with count of request to SchemaBuilder
    • added: String.prototype.parseTerminal([fields], fn(values, index, count, realIndex), [skipLines], [takeLines])
    • added: TRACE(message, [name], [url], [ip]) is an alias for F.trace()
    • added: F.config['trace-console'] (default: true) shows tracing on the console
    • added: F.convert(name, type/function(val)) registers a new convertor (convertors uses QueryParser (GET/POST))
    • added: F.convert(obj) performs convertor for an object
    • added: F.download(url, filename, [callback]) a new alias for F.snapshot()
    • added: $$$([group], name) for GETSCHEMA([group], name)
    • added: configuration files supports options for all dependencies module#mymodulename (Object) : { name: 'A custom options for dependency' }
    • added: U.chunker() added a new property chunker.pages with count of all stored pages
    • added: U.chunker() added a new property chunker.count with count of all stored items
    • added: NEWOPERATION(name, fn(error, callback(response), value)) - registers a new operation (same as schemas)
    • added: OPERATION('name', function(err, response)) - executes an operation (same as schemas)
    • added: .flac file extensions
    • added: a new method for MailMessage object message.unsubscribe('your URL or email address')

    Updates:

    • updated: new error message The field "@" is invalid.
    • updated: NOSQL().insert(doc, [unique])
    • updated: quicksort algorithm has been replaced for shellsort (increased performance of sorting about 10-15%)
    • updated: NOSQL().counter.monthly(true, ...) shows all stats by ID
    • updated: NOSQL().counter.yearly(true, ...) shows all stats by ID
    • updated: dependencies supports up-to-date features e.g. module (1 day) : https://......js
    • updated: F.findConnections([path]) a path argument is optional
    • updated: U.streamer(beg, [end], function, [skip]) add a new argument skip
    • updated: deprecated methods in Node.js v7
    • updated: String.parseJSON([date]) added date argument (date fields will be converted to datetime)
    • updated: F.script() can compile code to function e.g.: F.script('next(a + b)') returns a compiled function
    • updated: String.captialize([onlyFirst]) add a new argument onlyFirst
    • updated: F.onParseQuery(value, req) add a new argument req
    • updated: F.onParseXML(value, req) add a new argument req
    • updated: F.onParseJSON(value, req) add a new argument req
    • updated: RESTBuilder.url() without argument returns a current URL
    • updated: RESTBuilder.exec(function(err, value, response)) when the error exists the value is still EMPTYOBJECT
    • updated: addded a new argument replacer to controller.send(message, [id], [blacklist], [replacer]) and client.send(message, [raw], [replacer])

    Cleaning:

    • removed: behaviours
    • removed: restrictions
    • removed: TransformBuilder
    • removed: F.config['allow-compatibility'] (not used)
    • removed: controller.date() method has been useless
    • removed: dynamic view compilation through .view() method
    • removed: contorller.proxy() in WebSocket controller

    Fixes:

    • fixed: JS minificator
    • fixed: global alias I for isomorphic code
    • fixed: streaming files in debug mode (removed cache)
    • fixed: (critical) a bug with authorization in WebSocket
    • fixed: nosql_builder.join() a problem with using nosql_builder.first() by @yexing (Xing Ye)
    • fixed: String.parseInt2() - a possible NaN value
    • fixed: String.parseFloat2() - a possible NaN value
    • fixed: F.snapshot()
    • fixed: HTML compression (a fixed problem with HTML comments)
    • fixed: restarting framework (missing cleaning of F.temporary)
    • fixed: U.isDate() a problem with older dates than 1970, reported by @docgit

    Improvements:

    • improved: code
    • improved: memory consumption for static files
    • improved: CSS compression
    • improved: CPU and memory consumption
    • improved: performance
    • improved: updating of F.datetime
    • improved: uninstall dependencies
    • improved: installing 3rd-party dependencies (framework compares same contents)
    Source code(tar.gz)
    Source code(zip)
    empty-project.zip(206.24 KB)
  • v2.3.0(Dec 5, 2016)

    News:

    • added: support for /workflows file (more in documentation)
    • added: ShcemaBuilderEntity.$exec(name, callback) (more in documentation)
    • added: SchemaBuilder supports new types enum and keyvalue
    • added: controller.$exec(name, [options], [callback]) (more in documentation)
    • added: a new argument description to each SchemaBuilder set + add method e.g. .setSave(), .addWorkflow(), etc..
    • added: SchemaBuilder.meta contains all registered handlers with their descriptions
    • added: a property controller.schema
    • added: F.viewCompile(body, [model], [layout], [repository], [language]) - dynamic views
    • added: controller.viewCompile(body, [model], [headers], [partial]) - dynamic views
    • added: {viewCompile(body, [model])} - dynamic views
    • added: Controller is a global variable for extending prototype
    • added: F.validators with Regular Expressions
    • added: View Engine supports @{continue} and @{break} command for looping
    • added: URLBuilder.make(fn)
    • added: NOSQLMEMORY(dbName, [viewName]) enables in-memory database collection
    • added: NoSQL nosql.upsert(doc) inserts a new document where document doesn't exist in DB
    • added: NoSQL nosql.release() for releasing of in-memory DB (framework clears unused in-memory databases automatically)
    • added: NoSQL nosql.scalar(type, dbName, [view]) performs scalar operation by type: sum, min, max, avg, count or group
    • added: NoSQL nosql.binary.all(callback) browses all stored files
    • added: NoSQL nosql.binary.clear(callback)removes all stored files
    • added: NoSQL DatabaseBuilder.random()
    • added: NoSQL DatabaseBuilder.join(field, dbName, [view]) returns DatabaseBuilder with updated .where(field_JoinedDB, field_currentdb) method (it supports .fields() too)
    • added: NoSQL DatabaseBuilder.join() supports scalar operation too, e.g. nosql.join(...).scalar('count')
    • added: NoSQL DatabaseBuilder.scalar(type, [field]) - types: sum, min, max, avg, count or group
    • added: NoSQL DatabaseBuilder.month(field, [operator], value) filters Date fields according its month number
    • added: NoSQL DatabaseBuilder.year(field, [operator], value) filters Date fields according its year number
    • added: NoSQL DatabaseBuilder.day(field, [operator], value) filters Date fields according its day number
    • added: NoSQL events (documents): insert, update, modify and remove
    • added: NoSQL events (binary): insert, remove and clear
    • added: NoSQL events (counter): hit, remove and clear
    • added: a new alias NOBIN(dbName) witch it returns NOSQL(dbName).binary (a binary instance)
    • added: a new alias NOCOUNTER(dbName) witch it returns NOSQL(dbName).counter (a counter instance)
    • added: F.kill(signal) for killing an instance of the framework
    • added: I alias for `isomorphic code on server-side and client-side together by [email protected] https://github.com/Creeplays
    • added: F.script(body, value, callback(err, value)) evaluates script securly in safe scope (more in documentation)
    • added: new alias SCRIPT() for F.script()
    • added: HttpFile.rename(filename, [callback(err)]) moves file to another directory

    Updates:

    • updated: F.on('exit', function(signal) {}) added a signal code
    • updated: SchemaBuilderEntity contains new argument controller, e.g. .setSave(function(error, model, options, callback, controller) { ..
    • updated: removed all validators of email addresses from FrameworkMail
    • updated: GETSCHEMA([group], name, [callback(err, schema)]) can wait for a schema
    • updated: F.localize() supports modificators as static type
    • updated: F.modify() supports a new type static, it's group of .html, .txt and .md files
    • updated: U.trim(obj, [clean]) supports a new argument clean (default false) and when it's true and a value is '' then it sets the value to undefined
    • updated: nosql.update(docToUpdate, [docToInsert]) when the document for updating doesn't exist then database performs insert
    • updated: nosql.modify(docToUpdate, [docToInsert]) when the document for updating doesn't exist then database performs insert
    • updated: nosql.binary stores a creation date as meta info

    Fixes:

    • fixed: Image.stream()
    • fixed: global variable Image (in a single library)
    • fixed: JavaScript compressor (problem with Regular Expressions)
    • fixed: custom paths in F.model() and F.source()
    • fixed: NoSQL removing documents (problem with different filters in one queue)
    • fixed: fix view compiler error message
    • fixed: String.prototype.capitalize

    Others:

    • removed: nosql doesn't support cache (DatabaseBuilder.cache is obsolete)
    • removed: F.refresh() the method was useless
    • replaced: Array.randomize() for Array.random()
    • improved: code
    Source code(tar.gz)
    Source code(zip)
    empty-project.zip(203.30 KB)
  • v2.2.0(Oct 29, 2016)

    News:

    • added: controller.proxy2(url, [callback], [headers], [timeout]) creates a proxy between current request and new URL
    • added: Image.watermark(filename, [x], [y], [width], [height]) creates a watermark
    • added: hidden hack res.noCompress = true disables compilation of .js or .css
    • added: RESTBuilder for creating REST requests (more in docs)
    • added: new config item allow-cache-snapshot - to prevent cache when the framework is restarted

    Updates:

    • updated: SINGLETON(name, [def = {}]) about def argument
    • updated: debug.js adds timestamps
    • updated: F.redirect() can contain a relative URL of file
    • updated: NoSQL embedded parser, dates are parsed as date object
    • updated: Pagination.next(), Pagination.prev(), Pagination.last() and Pagination.first() supports new arguments .html([link_inner_html], [class_name])
    • updated: F.worker() supports packages F.worker('@eshop/myworker-script')
    • update: FrameworkImage when the instance contains no command then .minify() method is performed automatically for preventing of empty response

    Improvements:

    • improved: @{href(key, value)} performance
    • improved: Total Package Manager $ tpm --help
    • improved: FrameworkImage command building

    Fixes:

    • fixed: (critical) NoSQL nosql.modify() and problem with updating undefined values
    • fixed: (critical) security with GM and IM --> 10000x thanks for Luis Figueiredo [email protected]

    Renames:

    • renamed: F.onLocate renamed to F.onLocale
    Source code(tar.gz)
    Source code(zip)
    empty-project.zip(192.83 KB)
  • v2.1.0(Oct 13, 2016)

    News:

    • added: F.sitemap_add(string) for adding entries to sitemap by Martin Smola https://github.com/molda
    • added: SchemaBuilderEntity schema.addHook(name, fn(error, model, options, callback))
    • added: SchemaBuilderEntity schema.hook(name, model, [helper], callback)
    • added: controller.$hook(name, [helper], callback)
    • added: String.parseInt2() the method searchs number and converts it to integer
    • added: String.parseFloat2() the method searchs number and converts it to float
    • added: @{title2('this content will be added to end of current title')}
    • added: String.parseInt2() the method searchs number and converts it to integer
    • added: String.parseFloat2() the method searchs number and converts it to float
    • added: @{absolute(url, [hostname])} for importing links with absolute URL by George Okojie Davis https://github.com/binarygeotech
    • added: sitemap_replace(name, title, url) can change sitemap title and url onetime
    • added: new JavaScript minificator algorithm because of Douglas Crockford "Good, not Evil"
    • added: NoSQL supports counter for e.g. views or downloads, etc., more in documentation
    • added: new routing mechanism F.mmr(url, action) for streaming multipart/x-mixed-replace types (client-->server)
    • added: controller.mmr(filename, [stream], callback) for streaming multipart/x-mixed-replace (server-->client)
    • added: setTimeout2(key, fn, timeout) resets old and creates a new setTimeout according to the key
    • added: clearTimeou2(key) resets existing timeout
    • added: dnscache into the controller.pipe() and F.responsePipe()
    • added: CREATE([group], name) the methods create an empty object according to the schema
    • added: F.group(flags, fn) for extending routes (web, websocket, file) flags
    • added: Number.prototype.filesize([decimals], [type]) formatting file sizes
    • added: binary importing CSV -csv
    • added: controller.autodestroy([callback]) only for websocket

    Updates:

    • updated: framework.view(), controller.view() and @{view()} supports =theme/viewname
    • updated: sitemap routing supports localization
    • updated: F.cache.fn(name, fnCache, fnCallback(value, isFromCache)) - added argument isFromCache
    • updated: F.use(name, url, types, [first]) - first (default: false) argument adds a new middleware to the beginning of a route middleware
    • updated: String.toSearch() - removes duplicates characters + better performance
    • updated: String.decode() - improves decoding by Tom Spaccialbelli https://github.com/harry-stot

    Fixes:

    • fixed: (critical) NoSQL views
    • fixed: (critical) view compilation in release mode (problem with just-in-time rendering)
    • fixed: (critical) F.eval()
    • fixed: (critical) parsing Date instance as Date instance in SchemaBuilder
    • fixed: F.resize() additional path ~
    • fixed: controller.memorize() threw a timeout when the action contains some error in the memorize scope
    • fixed: F.sitemap() fixed problem with me argument
    • fixed: SchemaBuilderEntity preparing and validation
    • fixed: QuickSort algorithm (problem with dates)
    • fixed: TRY() scope
    • fixed: problem with resources in views
    • fixed: CSS compressor
    • fixed: CORS
    • fixed: problem with SUCCESS() and async schemas
    • fixed: killing the process
    • fixed: HTML compressor in views
    Source code(tar.gz)
    Source code(zip)
    empty-project.zip(192.67 KB)
  • v2.0.1(Jul 27, 2016)

    News:

    • added: binary supports webserver totaljs 8000 starts webserver on 8000 port and the current directory will be a public directory
    • added: configuration supports new subtype (env or environment) for binding values from process.env
    • added: SchemaBuilderEntity.$next(type, [name], helper) --> adds a new operation (type: workflow, transform, operation, save, read, query, remove) to async list as next step
    • added: SchemaBuilderEntity.$push(type, [name], helper) --> adds a new operation (type: workflow, transform, operation, save, read, query, remove) to async list as last step
    • added: SchemaBuilderEntity.$index(index) can changed obj.$async() index (the index can be string e.g. +1 or -1)
    • added: SchemaBuilderEntity.$callback(fn) can changed obj.$async() callback
    • added: SchemaBuilderEntity.$repository(name, [value]) can get / set temporary value
    • added: SchemaBuilderEntity.$output() sets the current callback(value) as output/result for obj.$async(function(err, output))

    Updates:

    • updated: when the config contains directory-temp with empty value then the framework uses system temporary directory
    • updated: U.reduce() supports array

    Fixes:

    • fixed: binary totaljs, fixed problem with creating localized texts
    • fixed: F.responseFile() problem with cached filename, extension was broken when the framework reads the file from cache
    • fixed: preparing values with subtype for array in SchemaBuilder
    • fixed: generation UID
    • fixed: problem uninstalling middleware
    • fixed: email validation, a problem with e.g. [email protected] by @VarunBatraIT

    Improvements:

    • improved: view engine rendering
    • improved: view engine memory consumption
    Source code(tar.gz)
    Source code(zip)
    empty-project.zip(189.01 KB)
  • v2.0.0(Jul 5, 2016)

    Added:

    • added: new NoSQL version v4.0.0 is fully optimized for total.js
    • added: controller.invalid([status]) creates the ErrorBuilder instance and it responds in the next tick
    • added: controller.sitemap_url([id]) returns an URL from the sitemap
    • added: controller.sitemap_name([id]) returns a name/title from the sitemap
    • added: controller.sitemap_change(id, property, newvalue) can change a current value in the sitemap
    • added: controller.sitemap_navigation([parent], [langauge]) can get list of all items according to the parent
    • added: @{sitemap_url([id], [arg1], [arg2], [argN])} returns an URL from the sitemap
    • added: @{sitemap_name([id], [arg1], [arg2], [argN])} returns a name/title from the sitemap
    • added: @{sitemap_change(id, property, newvalue)} can change a current value in the sitemap
    • added: @{sitemap_navigation([parent], [language]) can get list of all items according to the parent
    • added: /startup/ all scripts in this directory are executed only one (then are renamed automatically)
    • added: F.route() supports a new flag: cors (creates a cors route) and credentials (enables cookies for cors)
    • added: ErrorBuilder.plain() returns all errors as a simple string
    • added: Array.findItem() alias to Array.find()
    • added: Number.async(fn(index, next), callback) for asynchronous operations
    • added: UID() for generating unique identificators (contains minimum 18 chars)
    • added: F.restart() for restarting app
    • added: F.on('restart')
    • added: quicksort algorithm for sorting arrays
    • added: Array.quicksort(property_name, [asc], [maxlength]) for sorting arrays
    • added: String.removeTags() by @harry-stot
    • added: F.nosql(name) + NOSQL(name) --> alias for NoSQL embedded database (it can be used with e.g. SQL Agent)
    • added: modificators can handle INSTALL('view', ...)
    • added: String.isPhone() for phone number validation
    • added: String.isUID() for UID() validation
    • added: String.isZIP()
    • added: Pagination.html(max, format) returns String
    • added: Pagination.json(max, format) returns String
    • added: new schemabuilder types Email (string, maxlength 120), Phone (string, maxlength 20), Zip (string, maxlength 10), Capitalize (string), Lowerize (string), Upperize (string), UID (string, minlength 18, maxlength 20), Url (string, maxlength 500), JSON (string)
    • added: SchemaBuilderEntity.fields and it contains all field names in array.
    • added: Mail.send(smtp, options, messages, [callback]) messages must be array
    • added: Mail.send2(messages, [callback]) sends messages according to the framework configuration
    • added: Mail.try(smtp, options, callback) tries to open a SMTP
    • added: F.datetime contains current datetime and each 1 minute is the value increased
    • added: F.stats.other.restart contains a new property with count of restarting
    • added: F.config.trace for enable/disable tracing, Boolean, in a debug mode: true, release mode: false
    • added: F.trace(message, [name], [uri], [ip])
    • added: controller.trace(message)
    • added: req.split contains splitted url
    • added: F.touch(url/req) for clearing internal cache of cached static files (it works only in release mode)
    • added: F.path.exists(path, callback(exist, size, isFile)) for check of existing file
    • added: U.chunker(name, [max]) creates the chunker (for streaming some items)
    • added: F.worker2(name, [args], [callback], [timeout])
    • added: SchemaBuilderEntity.allow('fieldname1', 'fieldnameN') - allows other keys out of defined fields
    • added: global.EMPTYOBJECT
    • added: global.EMPTYARRAY
    • added: global.SINGLETON(name) returns a singleton object instance
    • added: controller.referrer returns a value from req.headers['referer']
    • added: controller.author(value) can change <meta name="author"
    • added: @{author(value)} can change <meta name="author"
    • added: view engine supports looping with objects @{foreach m in model} key: @{m.key} and value: @{m.value} @{end}

    Updated:

    • updated: subdomain routing supports wildcard routing F.route('[*]/', 'homepage') (F.websocket() is supported too)
    • updated: F.route(url, ...) - urlcan be String Array with multiple relative paths by @Harry-Stot
    • updated: F.file() supports flags instead of middleware and the flags supports extensions ['.jpg', '.png']. The name argument has been removed.
    • updated: F.localize() supports flags and the name argument has been removed
    • updated: F.sitemap() returns object with a new field: wildcard: {Boolean}
    • updated: F.problem(), F.change(), controller.problem() and controller.change() write logs to the file
    • updated: F.mail() and controller.mail() subject is translated according to the language
    • updated: F.file(fnValidation/relative_path, fnExecute, [flags]) the file routing is completely changed
    • updated: export.booting can contain root attribute for package applications
    • updated: Array.orderBy() added quicksort algorithm
    • updated: Date.format() supports day names ddd (short) and dddd (full)
    • updated: String.removeDiacritics() supports multiple languages (by @Harry-Slot)
    • updated: (IMPORTANT) U.getExtension(filename) --> returns extension without . dot
    • updated: (IMPORTANT) F.resize(url, action(image), [flags]) new resize routing
    • updated: F.resize() flags can contain http/https path e.g. F.resize('/img/*.*', (image) => image.minify(), ['https://www.totaljs.com/img/']);
    • updated: U.GUID() supports better charset by Guy Fraser
    • updated: Date.add(number) supports number increase/decrease in milliseconds
    • updated: U.send(name, stream, url, callback, [cookies], [headers], [method], [timeout]) supports cookies and timeout
    • updated: U.request() supports a new flag < 200 (kB), it means that the method stores a content with maxixmum size 200 kB.
    • updated: ErrorBuilder instance contains a new property instance.unexpected when is instance.push() a classic Error's instance.
    • updated: configuration files + resources support types like String, Number, Array, Date, etc. via key (type) : value
    • updated: F.use(name, [url], [types]) - now supports new attributes url, and types

    Fixes:

    • fixed: Websocket.destroy()
    • fixed: Too many open files with F.log() and F.logger()
    • fixed: String.isJSON() the problem with \n character
    • fixed: FrameworkImage.save() problem with streams
    • fixed: CLEANUP(stream) method
    • fixed: controller.memorize() problem with controller.content()
    • fixed: multipart/form-data parser
    • fixed: Array.async() without arguments
    • fixed: view inline helpers
    • fixed: FrameworkImage.save() doens't work when it doesn't contain any operation
    • fixed: Windows paths
    • fixed: problem with websocket.destroy()
    • fixed: F.cors()
    • fixed: WebSocket initialization (critical)
    • fixed: Mail sender (problem with ZOHO SMTP)
    • fixed: Number.add() problem with percentage
    • fixed: U.isDate() by Guy Fraser
    • fixed: U.parseXML problem with CDATA
    • fixed: U.join() problem with Windows path by Martin Smola
    • fixed: uploading files (problem with unexpected closed requests)
    • fixed: F.assert() a problem with external URL address

    Renamed:

    • renamed: event route-add to route
    • renamed: F.versionNode to F.version_node

    Removed:

    • removed: (IMPORTANT) X-Powered-By header
    • removed: SCHEMA()
    • removed: composer from SchemaBuilderEntity
    • removed: rules from SchemaBuilderEntity
    • removed: obsolete code
    • removed: controller.async()
    • removed: framework.async()
    • removed: Utils.validate()
    • removed: Utils.isEmail()
    • removed: Utils.isURL()
    • removed: Utils.isValid()
    • removed: Utils.isNullOrEmpty()
    • removed: controller.global property by Guy Fraser (a problem with referrencing)
    • removed: controller.database(), use F.database()
    • removed: controller.functions()
    • removed: controller.models()

    Improvements:

    • improved: Controller initialization by Guy Fraser
    • improved: SMTP sender
    • improved: redirecting
    • improved: Array.orderBy(), added quicksort algorithm
    • improved: ErrorBuilder
    • improved: WebSocket.send() for JSON communication
    • improved: code (a lot)
    • improved: preparing SchemaBuilderEntity
    • improved: performance
    • improved: a lot of code by Guy Fraser
    Source code(tar.gz)
    Source code(zip)
    empty-project.zip(187.86 KB)
  • v1.9.8(Apr 3, 2016)

    • fixed: Array.async() without arguments
    • fixed: CLEANUP(stream) method
    • fixed: controller.memorize() problem with controller.content()
    • fixed: F.use() (problem with e.g. session module)
    • fixed: F.websocket() input arguments by @claudioquaglia
    • fixed: FrameworkImage.save() problem with streams
    • fixed: multipart/form-data parser
    • fixed: node.js deprecated methods
    • fixed: Schema parsing
    • fixed: sitemap routing e.g. F.route('#eshop') by @claudioquaglia
    • fixed: view inline helpers
    • fixed: view looping
    • fixed: WebSocket origin validator
    • fixed: WebSocket unhandled exceptions
    Source code(tar.gz)
    Source code(zip)
    empty-project.zip(184.47 KB)
  • v1.9.7(Mar 13, 2016)

    News:

    • added: F.web() --> alias to F.route()
    • added: F.cors(url, flags, credentials)
    • added: config['default-response-maxage'], default value 11111111
    • added: U.get(obj, path) reads a value from obj by path
    • added: U.set(obj, path, value) sets a value into obj by path
    • added: (IMPORTANT) config['default-root'] can replace root relative path
    • added: FrameworkImage --> instance.make(function(image) {})
    • added: FrameworkImage supports middleware FrameworkImage.middleware(extension, fn)
    • added: controller.$get([helper], callback) or alias controller.$read([helper], callback) - schema must be defined in the route
    • added: controller.$remove([helper], callback) - schema must be defined in the route
    • added: controller.$save([helper], callback) - schema must be defined in the route
    • added: controller.$query([helper], callback) - schema must be defined in the route
    • added: controller.$transform(name, [helper], callback) - schema must be defined in the route
    • added: controller.$workflow([name, [helper], callback) - schema must be defined in the route
    • added: controller.$operation(name, [helper], callback) - schema must be defined in the route
    • added: controller.$async(callback, [index]) - schema must be defined in the route
    • added: new F.route() flag binary (works only with raw flag)
    • added: U.ls2() --> returns additional information about files (stat Object);
    • added: Pagination is a global variable
    • added: SchemaBuilder.workflow2(name, options, callback) skips preparing and validation
    • added: SchemaBuilder.transform2(name, options, callback) skips preparing and validation
    • added: SchemaBuilder.operation2(name, options, callback) skips preparing and validation
    • added: ErrorBuilder.exception(message) - adds a new exception message
    • added: F.findConnection() finds a websocket connection
    • added: F.findConnections() finds websocket connections

    Updates:

    • updated: (IMPORTANT) Array.async([NEW: threadCount (Number)], [callback]) supports threads
    • updated: (IMPORTANT) Array.wait(onItem(item, index), [callback], [threadCount]) supports threads
    • updated: (IMPORTANT) U.streamer(beg, [end], callback) --> supports "end" delimiter
    • updated: Date.format(format, [resource_name]) supports name of months via MMM (short) and MMMM (full)
    • updated: Resources support months e.g. January : Január
    • updated: F.merge() supports directories, e.g. F.merge('app.js', '/js/*.js')
    • updated: NoSQL embeddded version
    • updated: U.ls() --> [filter] can be string or RegExp
    • updated: @{meta(title, [description], [keywords], [image])} and @{keywords(value)} keywords can be String Array
    • updated: @{section name} can be used in the view more times
    • updated: U.request() flags supports number for timeout and encoding utf8, ascii, etc.
    • updated: F.restfull() each action support SchemaBuilder

    Fixes:

    • fixed: (IMPORTANT) Expires headers - problem with Russian timezone, reported by Андрей Владимирович
    • fixed: (IMPORTANT) SchemaBuilder validation
    • fixed: (IMPORTANT) view caching
    • fixed: (IMPORTANT) U.keywords()
    • fixed: @{checkbox} value binding
    • fixed: dynamic views translator caching
    • fixed: URL search string in F.redirect() (doesn't work on local relative address)
    • fixed: binary / executable for Windows
    • fixed: SUCCESS()
    • fixed: Schema Validation is performed after F.onAuthorize().
    • fixed: checking of maximum request length
    • fixed: regexp routing
    • fixed: F.restrictions.allow()
    • fixed: U.request() and fixed head method, callback returns headers when is head method used
    • fixed: Pagination by DusanDragula
    • fixed: View inline helpers - reported by Андрей Владимирович
    • fixed: Array.findIndex - reported by Liao San-Kai
    • fixed: WebSocket.send() problem with [id] and [blacklist]

    Improvements:

    • improved: performance in Expires Header
    Source code(tar.gz)
    Source code(zip)
    empty-project.zip(184.23 KB)
Owner
Total.js
Total.js platform makes great apps
Total.js
Realtime MVC Framework for Node.js

Website Get Started Docs News Submit Issue Sails.js is a web framework that makes it easy to build custom, enterprise-grade Node.js apps. It is design

Balderdash 22.4k Dec 31, 2022
Fast and low overhead web framework, for Node.js

An efficient server implies a lower cost of the infrastructure, a better responsiveness under load and happy users. How can you efficiently handle the

Fastify 26k Jan 2, 2023
🚀 The Node.js Framework highly focused on developer ergonomics, stability and confidence

Sponsored by FOSS United is a non-profit foundation that aims at promoting and strengthening the Free and Open Source Software (FOSS) ecosystem in Ind

AdonisJS Framework 13.4k Dec 31, 2022
:rocket: Progressive microservices framework for Node.js

Moleculer Moleculer is a fast, modern and powerful microservices framework for Node.js. It helps you to build efficient, reliable & scalable services.

MoleculerJS 5.5k Jan 4, 2023
MVC framework making it easy to write realtime, collaborative applications that run in both Node.js and browsers

Derby The Derby MVC framework makes it easy to write realtime, collaborative applications that run in both Node.js and browsers. Derby includes a powe

DerbyJS 4.7k Dec 23, 2022
Node.js framework

Node.js framework Total.js framework is a framework for Node.js platfrom written in pure JavaScript similar to PHP's Laravel or Python's Django or ASP

Total.js 4.2k Jan 2, 2023
🍔 A Node.js Serverless Framework for front-end/full-stack developers. Build the application for next decade. Works on AWS, Alibaba Cloud, Tencent Cloud and traditional VM/Container. Super easy integrate with React and Vue. 🌈

Midway - 一个面向未来的云端一体 Node.js 框架 English | 简体中文 ?? 欢迎观看 Midway Serverless 2.0 发布会回放: https://www.bilibili.com/video/BV17A411T7Md 《Midway Serverless 发布

Midway.js 6.3k Jan 8, 2023
:evergreen_tree: Modern Web Application Framework for Node.js.

Trails is a modern, community-driven web application framework for Node.js. It builds on the pedigree of Rails and Grails to accelerate development by

Trails 1.7k Dec 19, 2022
Marble.js - functional reactive Node.js framework for building server-side applications, based on TypeScript and RxJS.

Functional reactive Node.js framework for building server-side applications, based on TypeScript and RxJS. Ecosystem Name Description @marblejs/core F

Marble.js 2.1k Dec 16, 2022
A serverless web framework for Node.js on AWS (CloudFormation, CloudFront, API Gateway, Lambda)

---- Sorry, this project is not maintained anymore. ---- dawson is a serverless web framework for Node.js on AWS (CloudFormation, CloudFront, API Gate

dawson 717 Dec 30, 2022
The React Framework

Next.js Getting Started Visit https://nextjs.org/learn to get started with Next.js. Documentation Visit https://nextjs.org/docs to view the full docum

Vercel 98.6k Jan 5, 2023
The Intuitive Vue Framework

Build your next Vue.js application with confidence using Nuxt: a framework making web development simple and powerful. Links ?? Documentation: https:/

Nuxt 41.8k Jan 9, 2023
The Simple, Secure Framework Developers Trust

@hapi/hapi The Simple, Secure Framework Developers Trust Build powerful, scalable applications, with minimal overhead and full out-of-the-box function

hapi.js 14.1k Dec 31, 2022
A framework for real-time applications and REST APIs with JavaScript and TypeScript

A framework for real-time applications and REST APIs with JavaScript and TypeScript Feathers is a lightweight web-framework for creating real-time app

Feathers 14.3k Jan 1, 2023
🦄 0-legacy, tiny & fast web framework as a replacement of Express

tinyhttp ⚡ Tiny web framework as a replacement of Express ?? tinyhttp now has a Deno port (work in progress) tinyhttp is a modern Express-like web fra

v 1 r t l 2.4k Jan 3, 2023
Catberry is an isomorphic framework for building universal front-end apps using components, Flux architecture and progressive rendering.

Catberry What the cat is that? Catberry was developed to help create "isomorphic/Universal" Web applications. Long story short, isomorphic/universal a

Catberry.js 801 Dec 20, 2022
Framework for setting up RESTful JSON APIs with NodeJS.

Restberry works with both Express and Restify! Framework for setting up RESTful JSON APIs with NodeJS. Define your models and setup CRUD API calls wit

Restberry 117 Jul 5, 2021
Component based MVC web framework for nodejs targeting good code structures & modularity.

Component based MVC web framework for nodejs targeting good code structures & modularity. Why fortjs Based on Fort architecture. MVC Framework and fol

Ujjwal Gupta 47 Sep 27, 2022
Proof of concept for the Quark.js web framework

Quark.js Proof of Concept Proof of concept for the Quark.js web framework. Examples Express.js Implimentation using express.js as a web server: im

Quark.js 3 Feb 18, 2022