forked from totaljs/framework4
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathchangelog.txt
732 lines (659 loc) · 34.1 KB
/
changelog.txt
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
========================
0.0.70
========================
- `schema.action()` supports a link to the JSON schema declaration
========================
0.0.69
========================
- fixed `input` filter in the Schema actions
- added `API().debug()` method for quick printing data
- added `API().audit()` method
- added `RESTBuilder().debug()` method for quick printing data
- added `CALL().debug()` method for quick printing data
- improved checking SVG during uploading
- updated `opt.files` by adding downloading files from URL address in the `REQUEST()` method
- updated `RESTBuilder.file(name, filename, [buffer/url])` method
- fixed `Object` type without properties in JSON schemas
- fixed built-in `session` mechanism (a problem with storing sessionid/userid with the dash `-`)
- fixed streaming videos in the debug mode
- improved HTML Parser
========================
0.0.68
========================
- fixed sending files via `REQUEST()` method (a problem with the buffer)
- added `$.variables(str, [data])` method
- `str` supports dynamic arguments in the form `{user.key}, {model.key}, {data.key}, {params.key} or {query.key}`
- added QueryBuilder by adding `QueryBuilder.audit($, [message], [type])` method
- `message` supports dynamic arguments in the form `{user.key}, {model.key}, {data.key}, {params.key} or {query.key}`
- added `CONF.root` as an alias for `CONF.default_root`
- fixed uploading files
- fixed parsing dates with `yy`
========================
0.0.67
========================
- improved `encoding` in the `FlowStreamMessage.variables(str, [data], [encoding])` method (it can be a `function(val, key)`)
- improved `encode` argument in `String.args()` - now it can be a `function(val, key)`
- improved error handling in JSON Schemas
- fixed routing
- added `CALL(schema, model, [controller])` method
- added `schema.action([name], options)` method
- fixed error handling in `API`
- added a simple HTML parser `String.parseHTML([trim])`
- improved error handling in unit tests
- fixed number converting in JSON schemas
- extended `QueryBuilder.query(query, [params])` by adding `params` argument
========================
0.0.66
========================
- fixed `update` operation in QueryBuilder NoSQL
- fixed uploading of `mp4` files
- fixed `callback` argument in the `MailMessage.send2()` method
- added `options.tz` for the cluster mode
- updated `FlowStreamMessage.variables()` by adding support for nested properties `path1.path2.value`
- updated `FlowStreamMessage.variables()` keys for `data` must be in the form `{data.key}`
- updated `FlowStreamMessage.variables(str, [data], [encoding])` by adding `encoding` argument
- updated `FlowStreamMessage.variables()` by adding `{hostname}` keyword for obtaining of main hostname
- fixed parsing JSON schemas from the string
- improved parsing of inline JSON schemas by adding subtypes like `email`, `smallint`, `zip`, etc.
- added `JSONSchemaObject.transform(value)` method
- updated schemas by sending raw data if the schema doesn't contain any field
========================
0.0.65
========================
- fixed TextDB output when `TextDB.paginate()` without sorting
- fixed `default_root` option for inline merging files directly in the views
- added `NEWAPI(name, function(opt, next))`
- added `API(name, schema, model)`
- fixed cache in CMS Render
- improved helpers in Macros (`this` contains a current model)
- updated `QueryBuilder.language()` by adding support for `$ {Object}` as the first argument
- fixed timezone in for the `cluster` mode
========================
0.0.64
========================
- fixed `session.onlocale()`
- fixed prefixes in `QueryBuilder.language()` method
- added auto-measuring width/height for `.webp`, `.bmp` and `.psd` images
- added a small buffer check for uploading file data for most used file extensions
- improved logger in `FILESTORAGE()`
- fixed functionality of `res.nocache()` method in the `res.stream()` method
- fixed `continuing` with QueryBuilder processing
- added `DB().language(prefix, skip)` method that sets a default prefix/skip values
- added better error handling for `MAPSCHEMA()`
- improved error outputing
- fixed `RESTBuilder.promise([$])`
- extended TypeScript
- added a support for loading files for the specific environment e.g. `file-debug.js` or `file-release.js`
========================
0.0.63
========================
- updated `F.runscript()` by adding `require` argument
- improved internal proxy functionality
- added `U.getExtensionFromContentType(value)`
- fixed `flow.unregister()` method
- added `MAKE(schema, model, [callback/$/controller], [novalidate], [controller])` method for validating data according to the schema
- added `$.on()` and `$.emit()` methods into the `SchemaOptions`
- `$.on('end', function(err, response, [op_name]))` catches end of data processing
- `$.on('data', function(response, [op_name]))` catches a response from a Schema operation
- `$.on('error', function(err, [op_name]))` catches error
- `$.on('response', function(response, [op_name]))`
- added `STATUS(id/$, data, [timeout])` for capturing of universal status (executes `DEF.onStatus(meta)`)
- added `DEF.onStatus(meta)` for capturing of universal status
- `meta.date {Date}` last modified date
- `meta.data {Object}`
- `meta.id {String}`
- added `schema.array()` that allows you to receive data as Array
- removed `schema.before()` due to performance
- improved schemas
- added `schema.setDestroy(callback)` executed when the schema is removed
- added `schema.setTimer(callback)` executed every minute
- added supports for dynamic schemas in the form `NEWSCHEMA(function(schema))`
- fixed functionality in the `PROXY()` method
- updated `schema.addWorkflow()` by adding inheriting of other workflows
- example: `schema.addWorkflow('check', 'Common --> check')`
- fixed decompression of colors in CSS
- fixed `error404` internal stats
- added `CONF.allow_stats_status` that stores all status objects
- updated making of snapshots
- fixed `WebSocketClient.connect()` (added a small delay for evaluation)
- improved `EXEC()` method by adding a support for external arguments like query, params, id
- improved `QueryBuilder.error(err, [reverse])` by adding the `reverse` argument
- fixed applying variables in the FlowStream
- added `RESTBuilder.strict()` method
- added `QueryBuilder.language()` method
- added a global variable `MODS.` for storing modules
- fixed filtering in the `QueryBuilder.autoquery()` method
- extended `QueryBuilder.gridfilter` method by adding support for:
- `<number`, `<date` less than
- `>number`, `>date` greater than
- `!string` exact value
- fixed incoming message (`request`) events (different events between Node.js v12 != v18)
- improved applying of localization
- added `RESTBuilder.noparse()` it responds raw string as a response
- added `String.streamer(beg, [end], callback, [skip])` method
========================
0.0.62
========================
- fixed `NEWMACRO()` compiler
- added `flowstream.secrets` (something similar like variables)
- improved applying of `flowstream.variables`
- fixed initializing of HTTP server with unix-socket
- added support for Windows named pipe
- extended FlowStream by adding `instance.transform([data], callback)` method
========================
0.0.61
========================
- added NoSQL support for QueryBuilder
- fixed FlowStream identifiers when registering component
- fixed schema name in the logs when `CONF.logger` is enabled
- extended `download` argument in the `$.controller.file(filename, [download])` by adding support for `Boolean`
- extended `CONVERT()` by adding support for advanced arrays e.g. `key: [name: String, price: 30]`
- added `F.frameworkless(debug, options, [callback])` that executes HTTP server without Total.js dependencies
- updated `PROXY()` method by adding `check` argument
- fixed `copypath` functionality in the `PROXY()` method
- added auto clearing cache for the `CONVERT()` method
- extended `CORS()` method by returning instance of the route (that can be dynamically removed)
- extended `FlowStream` connections by adding the `color` attribute
- added method `U.set()`
- added method `U.get()`
- added `CONF.default_shell {String}`
- added `SHELL(command, callback, [cwd])` for executing of shell
========================
0.0.60
========================
- added a validation for `Byte`, `TinyInt` and `SmallInt` types in the schemas
- fixed `COPY()` method
- fixed `default_root` config option for static files
- fixed `/versions` file with applied `default_root`
- fixed a nullable argument in `U.getContentType()`
- fixed HTTP cache in `FileStorage`
- added `QueryBuilder.check()` for checking existence of record
- fixed decompression bigger messages in the WebSocket
- updated `NEWFORK()` and `NEWTHREAD()` by adding support for `~absolute/path/to/worker.js` in `name` argument
========================
0.0.59
========================
- added `TESTER()` method for creating rich unit-tests by [Jakub Urban](https://github.com/Helferino)
- `LOAD()` supports promises (without callback argument)
- added missing Tangular helpers (CRITICAL)
- disabled snapshots for `LOAD()` method
- fixed executing `callback` in the `controller.autodestroy()` method
- added `default_websocket_maxlatency: 2000` configuration item
- added `F.runscript(filename)` for evaluating of JS scripts
- improved streaming files
- fixed `close` message in WebSocket
- extended `flowstreaminstance.close(removed)` delegate by adding `removed` argument
- exchanged functionality between `>field` (it performs `MAX`) `<field` (it performs `MIN`) in TextDB
- added `NOSQL/TABLe/TEXTDB().release()` method
- extended `controller.view()` by adding a support for rendering views from plugins (e.g. `#plugin_name/view_name`)
- extended `U.reader([url/items])` by adding support for `URL` addresses (content must be TextDB)
- added `U.filestreamer(filename)` for streaming text files
- fixed a custom path for `NPMINSTALL()`
- fixed linking `CONF.node_modules` path to the `F.require()` method
- fixed `.nocache()` in the release mode
- fixed loading apps if the plugin's `index.js` doesn't exist
- fixed removing of empty directories in the bundled mode
- fixed clearing cache for `EXEC()` method when updating/removing schema
- improved `UNAUTHORIZED()` method
- extended `NEWDB(name, [callback])` - nullable `callback` will remove the instance
- extended `next(content, replace, cache)` by adding `cache` argument to the `CMSRENDER()` method
========================
0.0.58
========================
- fixed Tangular compiler (CRITICAL)
========================
0.0.57
========================
- added `session.locale = userdata => userdata.language` to built-in auth mechanism
- added `write` functionality to the `BitExtractor` class by [Peter Stolc](https://github.com/a50397)
- fixed error handling in the FlowStream
- fixed refreshing of `NOW` variable in the FlowStream
- fixed calling end-response callback in the `res.$file()` method
- fixed assigning values in Macros
- added private variables to Macros in the form `#variable="VALUE"`
- added comments to Macros in the form `// comment`
- fixed auto-closing of WebSocket
- fixed removing of API routes
- added `controller.jsonstring(str, [headers])` method
- added `res.jsonstring(str)` method
- added new command `CMD('importbuild', 'URL address', [callback(err)])` method for importing Total.js Builds
- extended `NEWEXTENSION()` by adding support for `html` type in the form `<script total> ... <file name="index.html"> ...`
- added auto-handling files in extensions in the form `/-extension_name/filename`
- extended plugins by adding support for `html` type in the form `<script total> ... <file name="index.html"> ...`
- improved Multipart parser
- updated Tangular version
- fixed `--minify` argument in the Total4 command-line utility
- extended `DEF.onAudit(name, data, [$])` by adding `$` argument
- improved `BLOCKED()` method by adding support for clearing `limit` must be `null` or `-1`
========================
0.0.56
========================
- fixed `websocketclient.api()` error handling
- updated file stats by adding `version.build`
- fixed `U.decrypt_data()`
- added `CONF.node_modules` that affects `NPMINSTALL()` method
- replaced `duration2` property with `ts` in the FlowStrem Message
- revitalized code in the `FlowStreamMessage` instance
- improved `Tangular` by adding private helpers per template
- improved `SMTP sender`
- added `NEWTRANSFORM(name, [id], function($, value) {})` registers a new transformation
- added `TRANSFORM(name, value, function(err, value) {})` executes all transformations
- improved response from the ErrorBuilder (empty fields are removed from the response)
- improved built-in sessions by added `return {Number}` to `.update()` and `.refresh()` method
- updated Tangular template engine to `v5`
- extended `$` by adding `uri` property linked with the `controller.req.uri`
- added `NEWTHREAD(name, [data])` method, runs the `/workers/{name}.js` as `worker_threads`
- added `NEWTHREADPOOL(name, count)` method creates a pool for `worker_threads`
- added `NEWFORK(name)` method (a better alternative to the `WORKER()` method), runs the `/workers/{name}.js` as `fork`
- added `NEWMACRO(script)` method for compiling custom Total.js macros
- extended built-in Authorization by adding `opt.auth($)` method for additional authorization
- added `COPY()` alias to `U.copy()`
- added support for promises to `U.ls()` and `U.ls2()` method
- added `QueryBuilder.autoquery()` method
- added `DatabaseBuilder.autoquery()` method
- added `BitExtractor` by [Peter Stolc](https://github.com/a50397)
- added `U.extract(data, [from = 16], [to = 10])` returns `BitExtractor` instance
========================
0.0.55
========================
- fixed `download` command for the CodeEditor
- fixed parsing data in the WebSocket
========================
0.0.54
========================
- `callback` argument is optional in `UIStream.load()`
- `callback` argument is optional in `FlowStream.load()`
- improved measuring of CPU usage
- added `FlowStream.insert(schema, [callback])` method for inserting/modifying specific FlowStream instances
- added `FlowStream.remove(keys, [callback])` method for removing specific FlowStream instances
- added `FlowStream.export_instance(id)` method for exporting instance metadata
- added `FlowStream.export_component(id)` method for exporting component metadata
- added a simple ORM - `DB([conn])` and `NEWDB([conn], callback(builder, next(err, response)))`
- extended `U.reader()` by adding `.assign(ORMQueryBuilder)`
- removed UIStream (replaced by the FlowStream)
- fixed parsing `close` message in the WebSocket & WebSocketClient
- fixed `.autodestroy()` in the WebSocket controller
- added `Database.assign(QueryBuilderData)` method
- added `DatabaseBuilder.assign(QueryBuilderData)` method
- fixed TextDB inserting with symbols for atomic operations
- fixed `$def` in the JSON schemas
- fixed converting Total.js Schema to the JSON Schema
- improved error handling in JSON schemas
========================
0.0.53
========================
- fixed wrong counting of week number in the `Date.format()`
- updated `flowstream.onreconfigure` by adding `init` argument
- updated `flowstreaminstance.configure` by adding `init` argument
- updated `uistream.onreconfigure` by adding `init` argument
- updated `uistreaminstance.configure` by adding `init` argument
- fixed `U.queue()` by [Martin Smola](https://github.com/molda/)
- added `@{input('type', 'name')}` for creating `<input` element
- fixed `@{text()}`, `@{textarea()}`, `@{hidden()}`, `@{radio()}` and `@{checkbox()}` by removing `id` attribute
- fixed traffic indicator in the `flowstreaminstance.newmessage()`
- fixed `op` argument in the `schema.required()`
========================
0.0.52
========================
- extended `index.d.ts` by @Helferino
- fixed cleaning zombie connections in the FlowStream
- added a retry functionality `flowinstance.trigger()` when the FlowStream isn't loaded
- added `flowstream.strict {Boolean}` property (default: `true`)
- extended `flowstream.export([type])` by adding type argument
- added support for promises for the `OPENCLIENT()` method
- added support for promises for the `FileStorage`
- added support for promises for the `HttpFile`
- added support for promises for the `TMSCLIENT().call()` method
- added support for promises for the `Mail.try()` method
- added support for promises for the `REQUEST()` method
- added support for promises for the `EXEC()` method
- added support for promises for the `JSONSCHEMA()` method
- improved RegExp for validating URL addresses by [yetingli](https://github.com/yetingli)
- fixed FlowStream delegate `instance.variables()`
- added FlowStream `instance.replace(str)` for applying variables
- added FlowStream `message.replace(str)` for applying variables (alias for `message.variables()`)
- added Flowstream `message.rewrite(data)` for rewriting message data
- added support for promises for the `FLOWSTREAM().use()`
- (critical) fixed WebSocket implementation for Safari +15
========================
0.0.51
========================
- removed useless spaces from the command-line utility
- added `instance.variables(str)` to the `FlowStream` instance
- (critical) fixed compiling of builds
- improved extensions
- added TMS auto-sync for new or removed pub/sub/rpc
- added transforming `controller.url` to lower-case
- fixed comparing `url` with all registered proxies (`url` address compared as lower-case)
- fixed loading resources via `LOADRESOURCE()`
- fixed `translate` command in the command-line tool
- added `extend` method to the `NEWEXTENSION()`
- added `OPENCLIENT()` method that simplifies work with Total.js Open products
- increased clean-up timeout in the FlowStream
- fixed `EXEC()` with `WebSocketClient` controller
- fixed clean-up of zombie FlowStream connections
- fixed error handling in the WebSocket
========================
0.0.50
========================
- fixed `filestorage.rename()` method
- debug mode skips all `.js` files in the root
- extended `MiddlewareOptions` by adding `url` property
- improved middleware functionality
- improved `HTTP` server in terminal utility
- added a check for existance of this.uri by @fenddigital
- removed `.trim()` from the `String.parseComponet()` method
- fixed cleaning de# the FlowStream
- added a small support for Groups and Tabs into the FlowStream
- fixed API routing with same `paths` with various HTTP methods
- added `path` property to `SchemaOptions`, `OperationOptions`, `TaskOptions`, `AuthOptions` and `MiddlewareOptions`
- added `split` property to `SchemaOptions`, `OperationOptions`, `TaskOptions`, `AuthOptions` and `MiddlewareOptions`
- added `TextDB` internal handlers `instance.oninsert = function(doc)`, `instance.onupdate = function(doc)`, `instance.onremove = function(doc)`
- fixed parsing `object` types for inline schemas via `String.toJSONSchema(name)`
- updated `NEWJSONSCHEMA(name, 'name:String, age:Number')` by adding inline declaring fields
- updated `F.$owner([new_owner])` added a new optional `new_owner` argument
- updated `F.builds` by adding a new meta information
- added `EXTENSION(code, [callback(err, module)])`
- added `F.extensions {Object}` for storing all extensions
- added a new command: `clear_owner` for removing all dependencies for the specific owner
- replaced return from the `controller.sse()` method to `Boolean`
- fixed API routing with `default_root` by [Martin Smola](https://github.com/molda)
- added `F.isBundle` for determining bundles
========================
0.0.49
========================
- fixed typo in the flags in the file route by @fenddigital
- fixed typo in the file route by @KangGeunSu
========================
0.0.48
========================
- updated `GUID()` method by returning a valid GUID value (if the `length` argument is undefined)
- added a new schema type `GUID`
- added `String.isGUID()` for validating GUIDs
- fixed live reload for `.ts` files
- added output log for the hostname of live reload
- improved live reload by sending a filename of changed file
- fixed internal stats
- improved middleware
- added support for inline middleware for `ROUTE()` method in the form `ROUTE('GET / &middlewareA &middlewareB')`
- added `/middleware/` directory for storing middleware
- added `directory_middleware` config key
- added `PATH.middleware()` method
- added `USE(middleware, url, type, [first])` method assigns specified middleware to routes
- replaced `MIDDLEWARE()` to `NEWMIDDLEWARE()` (the old name has remained)
========================
0.0.47
========================
- fixed unhandled error until destroying WebSocket
- added missing properties into the `UIStreamMessage`
- fixed parsing dates (lower than 1.1.1970) in the schemas
- fixed applying `filter` argument in the `BACKUP()` method
- improved bundle generator in the `$ total4` executable
- changed arguments position in the `controller.stream()` method
- improved `end` event in the FlowStream messages
- added `terminate` event to the FlowStream messages
- fixed `pause` state in the outputs in the FlowStream
========================
0.0.46
========================
- added `FILESTORAGE().backup(filename, callback)` method
- added `FILESTORAGE().restore(filename, callback)` method
- added `FILESTORAGE().stream(callback(file, next), [done])` for streaming of meta information for each file
- added `FILESTORAGE().move(id, newid, callback)` method
- added `MEMORIZE()` creates a simple and persistent storage
- improved `FAKE({ id: UID, name: 'string(30)' })` method by adding a support for inline schemas
- added a writing locks to the TextDB engine
- improved performance for `Array.wait()` + added canceling of processing (more in documentation)
- improved performance for `Array.async()` + added canceling of processing (more in documentation)
- fixed `protocol` parser for WebSocket routes
- fixed CSS variables
- added `schema.undefine(name)` for removing of defined field in the schema
- added `options.servicemode` to the start script for running Total.js app without HTTP server
- fixed error status codes
- fixed default root [#24](https://github.com/totaljs/framework4/issues/24)
- fixed JavaScript compressor [#25](https://github.com/totaljs/framework4/issues/25)
- added `flowstream.pause(is)` method
- added `flowstream.paused {Boolean}` property
- added `flowstream_component.pause = function(is) {}` delegate
- fixed saving files in `FILESTORAGE()` in OS Windows
- fixed sending nullable data in the FlowStream
- fixed handling messages in the form `instance.message_<INPUT_NAME>` in the FlowStream
- fixed using `require()` in the components in the FlowStream
- added a support for editing local files via Total.js Code Editor
- extended Total.js terminal app by adding `total4 edit URL_TO_CODE_EDITOR?id=projectid`
- extended `UID([type], [date])`, `UID16([type], [date])` and `UID1([type], [date])` by adding `date` argument
- extended `U.queue(name, max, fn, [param])` by adding the `param` argument
- added `flowmessage.input {String}` for determining input name (alias for `flowmessage.index`)
- added a support dynamic inputs/outputs in the FlowStream
- fixed a problem with multiple spaces in the `controller.runtest()` method
- added support for external operations `OPERATION('https://..fn.js <5 minutes>', console.log)`
- added support for external tasks `TASK('https://..fn.js <5 minutes>', 'init', console.log)`
- allows `.ts` (MPEG stream) and `.m3u8` file types for the web server
- extended `U.getContentType()` by adding `.ts` and `.m3u8` extensions
- extended `NEWCALL()` by adding support for operations
========================
0.0.45
========================
- fixed parsing a lot of items via LDAP
- added `noauth` option to the `LDAP()` method
- added `TMSCLIENT(url, [token], [callback(client)])` that creates a connection to the Total.js Message Service server
- extended Total.js Message Service by adding `call(name, data, callback)` functionality
- added `NEWCALL(name, schema, [callback(data, next)])` that registers `call`
- extended JSON stats by adding `cm` - calls per minute
- added `destroy` event to the `WEBSOCKETCLIENT()`
- fixed `U.extend()` method
- fixed `CLONE()` method
- added `F.extendreq(req)` method
- added `F.extendres(res)` method
- added `F.serverless(req, res, [callback], [types], [cwd])` method
- fixed content-types for `application/*` content types
- improved `NPMINSTALL()` by adding check for existing modules
- added `FILESTORAGE().savejson(id, value, [callback(err, meta)], [custom], [expire])`
- added `FILESTORAGE().readjson(id, callback(err, value, meta))`
- added `FILESTORAGE().readbuffer(id, callback(err, buffer, meta))`
- added `SafeString` type to the Schemas with a check for XSS and SQL Injections
- added `Color` type to the Schemas
- added `Icon` type to the Schemas
- fixed `EACHSCHEMA()` method
- improved schema types `Capitalize`, `Capitalize2` by adding a check for `XSS`
- fixed a bad status code with the usage of `AUTH()` #22
- improved Total.js 4 command-line tool by [Helferino](https://github.com/Helferino/)
- fixed loading of default values from the `default.resource`
- fixed `FILESTORAGE().browse2()` method
- added `FILESTORAGE().rename()` method
========================
0.0.44
========================
- fixed schema error handling with error code `{Number}` as the `err` argument in the `$.callback(err_code, response)` method
- improved error handling in `WEBSOCKETCLIENT()` method
- updated `$` arg by adding `websocket {Boolean}` property in `AUTH($)` delegate
- added support for WebSocket API
- extended `ROUTE('API @websocket_api_name opid *Schema --> operation')` method by adding `@websocketapi_endpoint_name`
- added `websocket.api(url)` automatically processes `ROUTE()` with WebSocket APIs
- extended `ROUTE('SOCKET / @websocket_api_name')` method by adding WebSocket API without action
- added `websocketclient.api()` method
- added `websocketclient.api(schema, [data], [callback], [timeout])` method
- extended `U.copy()` by adding `all` argument
- fixed `array.random(true)` with only the one item
- improved WebSocket ping (updated interval to 20 seconds)
- updated `WebSocketClient.ping(timeout)` by adding `timeout {Number}` argument
- added `WebSocketClient.latency {Number}` with a latency in `ms`
- allowed `.wasm` extension for handling static files
- fixed sending emails via Total.js API services
========================
0.0.43
========================
- added `flowmessage.variables(str, [data])` method
- updated `LOADCONFIG()` supports `hex/base64` encoding
- improved `flowinstance.newmessage(data)` method
- removed method `U.set()`
- removed method `U.get()`
- removed method `U.sync()` and `global.sync()`
- removed method `U.sync2()` and `global.sync2()`
========================
0.0.42
========================
- added support for JSON schemas
- added Total Messaging Service
- added `jsonschemas` directory
- added `schema.jsonschema(name)` method
- added `JSONSCHEMA()` method
- added `NEWJSONSCHEMA()` method
- added `NEWPUBLISH()` method
- added `NEWSUBSCRIBE()` method
- added `PUBLISH()` method
- added `SUBSCRIBE()` method
- added `UNSUBSCRIBE()` method
- added `watcher` event for the main process in `debug` or `release` mode with the watcher
- added HTML escaping for meta tags
- added `WebSocketClient.destroy()` method
- added new command `refresh_cmd`
- added `allow_totalapilogger {Boolean}` option to the configuration
- added `allow_totalapi {Boolean}` option to the configuration
- added `allow_tms {Boolean}` option to the configuration
- added `secret_tms {String}` option to the configuration
- added `schema.jsonschema_define()` method
- added `flowstream.load(components, design, [callback])` method
- added `flowstream.unload(components, design, [callback])` method
- added new delegate `flowstream.onreconfigure = function(instance) {}`
- added new delegate `flowstream.onconnect = function(instance) {}`
- added new delegate `flowstream.ondisconnect = function(instance) {}`
- added new delegate `flowstream.onregister = function(component) {}`
- added new delegate `flowstream.onunregister = function(component) {}`
- added `uistream.load(components, design, [callback])` method
- added `uistream.unload(components, design, [callback])` method
- added new delegate `uistream.onreconfigure = function(instance) {}`
- added new delegate `uistream.onconnect = function(instance) {}`
- added new delegate `uistream.ondisconnect = function(instance) {}`
- added new delegate `uistream.onregister = function(component) {}`
- added new delegate `uistream.onunregister = function(component) {}`
- fixed `Mail.attachmentfs()`
- fixed dynamic routing
- fixed security issue when parsing query arguments (reported by <https://github.com/fl4x>)
- extended `schema.addTask()` by adding a new argument `callback`
- added new method `flowstream.newmessage(data)`
- added new method `flowstream_instance.newmessage(data)`
- added `String.toJSONSchema(name, url)`
- added `bundles.debug` enables watcher for `.src` directory only
========================
0.0.41
========================
- added TypeScript support
- added support for static files in threads
- fixed logging in threads by Tomas Novak
- added `insecure` option to the `REQUEST()` method
- added `builder.insecure()` method to the `RESTBuilder` instance
- added `profile` type to the LDAP options
- extended `base64` by adding support for `content-type;base64,data` format
- updated `schema.define(key, type, required, [default_error_message])`
- fixed `String.encrypt_uid()`
- fixed `$.keys` in schemas with multiple operations
- fixed wildcard routing combinated with dynamic arguments
========================
0.0.40
========================
- added `U.reader().list()` method
- added `Array.findValue()`
- added async/await mechanism to TextDB
- added async/await mechanism to RESTBuilder
- threads supports views
- improved error handling in `TotalAPI()`
- improved `Database.scalar()` by adding new argument
- improved `QueryBuilder.in()` and `QueryBuilder.notin()`
- fixed UTF8 chars in multi-part parser
- fixed `NOSQL().autofill()`
- fixed converting date via `Date.setTimeZone()`
- fixed XML comments in `String.parseXML()`
- fixed `Name` type in `Schemas`
- fixed sorting in `U.reader()`
========================
0.0.39
========================
- added a new alias `request.proxy()` to `response.proxy()`
- added `LDAP(opt, callback)` method for obtaining of users, groups or user profile (experimental)
- added `U.normalize(path)` that normalizes path by adding `/` to begin and end of the phrase
- added `U.link(path1, path2, pathN)` for creating of links
- added `PATH.join()` alias to `Path.join()`
- added `DEF.blacklist` object that performs IP blacklist
- updated `filestorage.save()` by adding support for importing files from URL address
- updated built-in session `AUTH()` mechanism by adding `options.strict {Boolean}` option
- updated `$.extend([data], [callback])` method in SchemaOptions by adding `callback` argument that enables async processing
- removed `allow_debug` option
- fixed `abort` event for incoming `request`
- fixed `controller.json()` method
- fixed `array.quicksort()` method
- fixed `controller.invalid()`, added missing second argument called `error` (optional)
- fixed error handling in `TotalAPI`
- fixed cookies transfering while redirecting in the `REQUEST()` method (can be disable via `opt.nocookies = true`)
- fixed `language` in `WebSocketClient`
- fixed merging files with the `auto` value defined in `versions`
- fixed encoding in `content-disposition` header
- fixed `UNAUTHORIZED()`
- fixed `after` argument in the `PROXY()` and `res.proxy()` methods
- improved error handling in WebSocket
- improved HTTP caching in merged files
- improved unit-testing
- improved timeouts in the API endpoints
========================
0.0.38
========================
- added `PAUSE(is_paused)` method that can pause loading of all Total.js dependencies
- added dynamic delegates for receiving of messages in FlowStream in the form `instance.mesage_<INPUT_NAME>`
- added `response.proxy(target, [copypath], [after], [timeout])`
- improved some parts of code
- improved `MIDDLEWARE(name, fn, [assign], [first])` method
- fixed measuring dimension for `.gif` images
- fixed `BACKUP()` method (a problem with sockets)
- fixed potential remote code execution in `U.set()` founded by [Snyk](https://snyk.io/vuln)
- fixed routing with camel-Case URL addresses
- fixed sending of messages via inline registered components in FlowStream
- fixed a problem with FileStorage and opened file descriptors
========================
0.0.37
========================
- added CSRF
- `CONF.secret_csrf`
- `CONF.default_csrf_maxage`
- `DEF.onCSRFcreate(req)`
- `DEF.onCSRFcheck(req)`
- `req.csrf()` generates a token
- `controller.csrf()` generates a token
- `@{csrf}` generates a token in View engine
- `schema.csrf()` enables csrf for schemas and their routes
- new `csrf` flag in `ROUTE()` method
- `csrf` verification via `x-csrf-token` header or via URL argument `?csrf=TOKEN`
- `RESTBuilder.csrf(token)`
- added `HTMLMAIL(address, subject, body, [language], [callback])` for sending of raw HTML mail messages
- added `NPMINSTALL(name, callback)` for installing of 3rd party NPM dependencies
- added `FILESTORAGE().image()` method for reading of images
- `CONF.default_errorbuilder_errors` for handling of all HTTP errors via ErrorBuilder
- decreased `default_interval_websocket_ping` to `1` minute (from `3`)
- improved image cache in `FILESTORAGE()`
- fixed `message` with `closing bytes` in WebSocket and `WEBSOCKETCLIENT()`
- fixed `@{resource()}` method in View engine
- fixed read stream in `FILESTORAGE()`
========================
0.0.36
========================
- improved HTTP cache
- fixed parsing of schema keys in `PATCH` method
- fixed predefined session functionality (a problem with cache)
- fixed `API` routes with empty model
========================
0.0.35
========================
- extended `EXEC()` by adding support for `Tasks` and `Operations`
- fixed `DELETE` method for the schemas, now it works same like `PATCH` method
- fixed `FlowStream.use()` method
- fixed pausing of outputs/inputs in `FlowStream`
- fixed inputs in `FlowStream`
- fixed command injection in `Image.pipe()` and `Image.stream()`
- fixed parsing of uploaded files (sometimes was the writeable stream unclosed)
- fixed execution of system routes
========================
0.0.31
========================
- added `CONF.default_errorbuilder_forxhr` key (default: `true`)
- errors in requests with `xhr` are serialized via ErrorBuilder
- fixed reconnecting in `WEBSOCKETCLIENT()`
- fixed `$.success()` and `$.done()` used in chaining