-
-
Notifications
You must be signed in to change notification settings - Fork 36
/
changelog.txt
1123 lines (994 loc) · 50.3 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
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
========================
0.0.98
========================
- fixed inline declared middleware `&middleware` in the `ROUTE()` method
- fixed partial validation
- fix image bug in the `Image.measureWEBP()` method by [Marek Mraz](https://github.com/Mrazbb)
- improved Markdown parser
========================
0.0.97
========================
- extended icon validator by adding support for `tic` keyword
- fixed link generator for email and phone numbers in `Markdown`
- improved `Number.pluralize()` method
- added `PROMISIFY(fn, [a], [b])` method
- added `$.promisify(fn, [a], [b])` method
- added `FILESTORAGE().copy(id, path, [callback(err, meta)])`
- fixed formatting `0` number in the `Tangular.format` helper
- improved `DATA.query()` method
========================
0.0.96
========================
- added `FlowStreamInstance.stats {Object}` property
- registered a new global variable `Total` - alias for `F`
- fixed generating `Message-ID` in SMTP sender
- fixed `CLEANUP()` method
- improved bookmarks in `Markdown`
- fixed `unit testing`
- fixed refreshing subscribers in Total.js Message Service
========================
0.0.95
========================
- added alias `Array.TfindIndex` (because some of NPM used their own)
- added `String.tslash()` method
- added `error` argument in the `jsonschemaobject.transform(data, partial, [error])` method
- removed `callback` argument in the `jsonschemaobject.transform(data, [callback], partial)` method
- added support for custom Route API actions
- fixed loading FlowStreams without identifiers
- fixed serializing TMS sources in the Flow module
- fixed `String.args()` for evaluting keys with `$` character
- fixed `ul` parsing in the Markdown parser
- added a new method `FlowInstance.remove()`
- improved exporting Flow schema
- extended `U.ls()` by adding `unified` argument
- added `FlowStreamComponentInstance.components {Object}`
- fixed `every` (e.g. `*/5`) value in the Cron
- fixed `#id` selector for `FlowStreamInstance.send()` method
- fixed loading the `default_root` configuration from the environment
========================
0.0.94
========================
- improved UI Builder compiler
- improved `FlowStream` initial header for WebSocket
- fixed loading `.html` plugins
========================
0.0.93
========================
- fixed internal FlowStream module (critical)
========================
0.0.92
========================
- updated Tangular template engine
- improved routing, actions can use `-->` instead of `* -->`
- fixed parsing arrays in the `config`
- fixed FlowStream stats in `instance.newmessage()`
- updated `REQUEST()` - `timeout` is optional and may be disabled
- improved `MultipartParser`
- fixed closing proxied WebSocket in the `PROXY()` method
- added `F.uibuildercompiler(opt, [callback])` method
- improved `String.toJSONSchema()` + fixed arrays with external schemas
- updated Flow module
- added support for `jsonschemas/*.txt` with inline implementation of the JSON schemas
- added a `String.markdown(opt)` parser
- enabled `.xslt`, `.xsd` and `.xls` extensions for handling static files
- fixed sending messages to all subscribers in TMS (critical)
- fixed compiling HTML in CMS
- fixed `signal` in the `F.exit(signal)` method
- improved CMS compiler
- fixed JS minification
========================
0.0.91
========================
- added `.flow` extension for the watcher due to auto-restarting app
- added `/flowstreams/` directory for inline FlowStreams
- added FlowStream module into the core
- fixed `PATH.extensions()`
- fixed declared routes in the `NEWACTION()` method
========================
0.0.90
========================
- improved `edit` source-code functionality
- improved schema by adding `nocompress {Boolean}` field
- fixed blacklist for localization in remote editing
- added `flow.cloning {Boolean}` for cloning of message data (default: `true`)
- added missing `headers` argument in the `res.jsonstring(data, [headers])` method
- improved code in the `U.extend_headers()` and `U.extend_headers2()` methods
- fixed setting values `0`, `false` and `null` in `FlowStreamMessage.send()` method <https://github.com/totaljs/flow/issues/108>
- extended `LOADRESOURCE()` method
- `LOADRESOURCE(url)` for downloading multiple localizations
- `LOADRESOURCE(name, url)` for downloading single localization
- added source map generator (only for `debug` mode)
- added `CONF.nosourcemap {Boolean}` option
- extended `U.EventEmitter2()` by adding `.off(name, [fn])` method
========================
0.0.89
========================
- extended HTTP server by adding `gzip` and `deflate` content-encoding
- updated `options` by adding `options.compress = 'gzip|deflate'` option in the `REQUEST()` method
- fixed handling values in `QueryBuilder`
- extended command-line tool by adding new command `total4 --extract <filename.bundle>`
- improved CMS compiler by adding support for inline navigation and breadcrumb
- added `CONF.logger` that enables the writing of `console` into the `/logs/debug.log` file
- fixed `encryption` in actions
- added new option `allow_check_upload` for disabling upload content-type checks
- added `$.cancel()` method in the `AUTH()` delegate
========================
0.0.88
========================
- added `API.file(filename, path, [formkey])`
- added `PATH.plugins(path)` method
- added a new event `ON('componentator', function(meta))`
- fixed `FileStorage.readbase64()`
- fixed a file validation for encrypted word/excel files
- updated Tangular template engine
- added a new global keyword `PLUGINS`
- added `U.groupify(id, [count])` method for grouping identifiers
- fixed data validation for the schema actions
- added `DatabaseBuilder.array(name, [comparer], value)` by [Gera](https://github.com/Gera-IC)
- added FlowStream events:
- `flowstream.on('connect', function(instance))`
- `flowstream.on('disconnect', function(instance))`
- `flowstream.on('configure', function(instance))`
========================
0.0.87
========================
- added `charset=utf-8` to the JSON content-type in the `REQUEST()` method
- added `default_tapi` config key
- updated Total.js API endpoint
- added a timeout for Total API endpoints
- fixed timeout for API routes
- improved "requests timeout" mechanism
- allow importing node built-in modules #55 by https://github.com/jornverhoeven
- improved uploading files in the `REQUEST()` method
- added `<readme>` tag to HTML compression blacklist
========================
0.0.86
========================
- fixed returning binary data in the `TotalAPI()` method
- fixed logging in the `FILESTORAGE().rename()` method
- improved parsing of multiple URL query argument keys (joined into the string separated by a comma)
- fixed handling arguments in the `RESTBuilder.API()` method
- fixed `$.url` in the `AUTH()` method
========================
0.0.85
========================
- fixed reconnecting to the server in `OPENCLIENT()`
- added a new version of `UID()` generator (`f` version)
- added `U.convert62(number)` it converts number to a 62 custom radix
- added `U.from62(number)` it converts a 62 custom radix to a number
- fixed loading of FlowStream schema (critical)
- fixed a bad place for callback evaluation in the FlowStream (critical)
- updated `CONF.default_uid {String}` option for changing of UID generator (possible values `f` (new), `r` (new))
========================
0.0.84
========================
- fixed `TEMPLATE()` parser
- fixed `stream.pause()/stream.resume()` functionality in the `REQUEST()` method
- extended: `API()` by adding Total.js API services, e.g. `API('TAPI', 'sms', { ... }).promise()`
- extended `API()` by adding `.output(type)` method, a value is set to the `opt.output` object
- fixed `/bundles/*.url` files in debug mode
- improved `API()`, the API `name` can now be called in lowercase
- extended `FAKE()` by adding inline JSON schemas specification
- extended `SCHEDULE()` method by adding support of `cron` basics
- added `QueryBuilder.permit(name, type, value, [useridfield], [userid], [required])` method
- fixed routing inline flags in the form: `&flag1' `&flag2`
- fixed using of message data via `FlowStreamMessage.variables()`
- added support for promises to the `DOWNLOAD()` method
- added `instance.vary(type)` delegate that is executed when `variables`, `variables2` or `secrets` have been changed
- added `asfile` argument into the `flowstream.add(name, body, [callback], [asfile])` method
- added `asfiles` argument into the `flowstream.load(components, design, [callback], [asfiles])` method
- fixed `callback` call after calling of `DEF.onMail()` delegate
- added a global `DATA` object for fast access to the QueryBuilderDB without creating a DB controller (faster than `DB()`)
- fixed parsing `date` for JSON Schemas (it accepts `null` value)
- fixed a check for uploading `webp` images
- updated `$.action('#|+|-action_name', [model])` method by adding support HTTP method types `#`, `+`, `-`
- added `UIDR()` a new UID random generator, it generates text `[a-zA-Z0-9]` + checksum and without timestamp (fixed length: 12 characters)
- added `U.random_text(length)` generates random text from `[a-zA-Z0-9]`
- added `CONF.default_uid {String}` option for changing of UID generator (possible values `uidr`, `uid1`, `uid16`, default: `null`)
========================
0.0.83
========================
- fixed a backward compatibility with the older schema executors
- fixed `String.capitalize()` method (chars in uppercase are transformed to lowercase)
- fixed traffic indicator in the `FlowStream`
========================
0.0.82
========================
- added a watcher for `bundles.debug`
- fixed `res.proxy()`
- fixed bug with the `instance.replace()` and `message.replace()` methods in the FlowStream (critical)
========================
0.0.81
========================
- extended the schema object by adding `.actions = {}` property (with all defined actions)
- added `NEWACTION()` method that offers awesome functionality for independent actions in the schema
- removed unused `CONF.logger`
- improved API routing in the form `ROUTE('API /api/ +action_name')`;
- added in-memory cache support for the `schema.action()` and `NEWACTION()`
- improved `F.cache.removeAll()` by adding support for string array
- fixed empty value in enum validation in JSON Schemas
- improved the `CORS()` method `CORS('https://.., https://..')` that allows only the specific hostnames
- fixed atomic operations in NoSQL QueryBuilder
- added `String.sign(key)` for making of quick checksums
- added `DB().load([conn], opt)` for loading of prepared QueryBuilder queries
- fixed encoding config values `@{'%something'}` in the view engine
- fixed multiple outputs in for the actions
- fixed parser for macros
- improved macros by adding async operations
- added `QueryBuilder` as a global variable (due to extending prototype)
- added `QueryBuilderDB` as a global variable (due to extending prototype)
========================
0.0.80
========================
- added `CONF.default_tms_maxlength` option
- improved the `NEWSUBSCRIBE(name, schema, [callback])` method by adding the `callback` argument
- added `inmemory` database support for `QueryBuilder`
- fixed localized filters in `QueryBuilder.autoquery()`
- extended the `schema.action({ ..sa: true }, ...)` method by adding `sa` option
- improved error handling in the `FlowStream`
- fixed parsing inline JSON schemas
- added `wav` as the allowed static file
- added support for the `.ui` file extension (json --> UI builder)
========================
0.0.79
========================
- fixed parsing of nested JSON schemas defined
- fixed `UID` parsing subtype in JSON schemas
- improved error handling in the FlowStream
========================
0.0.78
========================
- fixed `opt.options` argument in the `AUTH()` method
- fixed `secret_tms` (now it can contain a raw number)
- added `QueryBuilder.schema(name)`
- fixed generating filenames via `COMPONENTATOR()` method (added `.min` pharse)
- fixed parsing inline JSON schemas (without defined types) in `schema.action()`
- extended schema `Icon` validator by adding `tic` ([T]otal.js [I]con [C]ustom)
========================
0.0.77
========================
- fixed `permissions` in the `schema.action` (critical)
========================
0.0.76
========================
- updated `COMPONENTATOR(name, components, [removeprev])` by adding `removeprev` argument
========================
0.0.75
========================
- updated `CALL()` response (it returns `Object` instead of `Array`) with multiple actions
- `$.action(name, [data])` is an alias for `CALL()` method directly in the SchemaOptions
- fixed view command `@{language}`
- added `FlowStreamInstance.init` delegate (executed once when the instance is ready)
- added `FlowStreamInstance.refresh` delegate (executed if the Flow schema is updated)
- added `FlowStreamInstance.instances {Object}` alias to `flowinstance.meta.flow`
- added `FlowStreamInstance.logger(callback)` that captures all send messages
- added `FlowStreamInstance.middleware(callback)` that captures all send messages and prevents continuing
- improved `PROXY()` method
- added error handling for `COMPONENTATOR()`
- fixed `returning` with modify and upsert in the `QueryBuilder`
- added support for cloning folders in remote editing
========================
0.0.74
========================
- improved error handling in JSON Schemas
- improved `.toJSONSchema()` by adding:
- nested object in the form `{ name:String, path: String }`
- nested object arrays in the form `[{ name: String, path: String }]`
- linked schemas in the form `name:@User, address:@Address`
- added `CALL().language(value)` method
- added `$.repo {Object}` into the `SchemaOptions`
- added support for promises into the `CLEANUP()`
- extended `schema.action()` by adding new options:
- `user: true/false`
- `permissions: 'read,write,admin'`
- added `QueryBuilder.returning(fields)` method
========================
0.0.73
========================
- PREF configuration is saved nicely
- fixed scalar opertaion for NoSQL QueryBuilder
- fixed validating data according to the JSON schema
========================
0.0.72
========================
- added support for WebSocket for the Total.js Proxy
- added `/templates/` directory for the templates
- updated `TEMPLATE()` functionality
- `filename` is targeted to the `/templates/` directory
- `~filename` is will be used as an absolute filename
- `http:// or https://` will download template from the URL address
- local templates are not cached in the DEBUG mode
- updated `HTMLMAIL()`, `<body` element is with the normalized CSS
- fixed using `port` in the `PROXY()` method
- fixed closing of request/response when redirecting in the `REQUEST()` method
- fixed HTML parser by adding fallback for the non-exists end tag
- fixed `debug` mode for `.html` plugins/extensions/components
- extended `Icon` schema type by adding support for Total.js Icons
- fixed applying of `controller.status` for `controller.invalid()` method
- fixed parsing data in the promise in the `TotalAPI()` method
- fixed error handling in the `QueryBuilder`
- added `COMPONENTATOR(name, components)` method for downloading of UI components
- fixed returning object instance in the `ROUTE()` method
- added `publish:Boolean/String` property into the `schema.action()`
- added `$.publish(value)` property into the `SchemaOptions`
- improved `String.toJSONSchema()`
- improved HttpFile.move between volumes
- updated svg check
========================
0.0.71
========================
- added support fro inline enums for `String.toJSONSchema()`
- added support for inline enums in Schema actions
- added `webp` image size measurement by [Marek Mráz](https://github.com/Mrazbb)
- added `promise` support for the `TotalAPI()` method
- fixed `default_cors` option
- fixed `schema.action()` for the standard REST routes
- updated Tangular version
- added `TEMPLATE(url/filename/Tangulartemplate, model, [$])` method for generating templates
- fixed multiple execution of the `schema.setTimer()` in the same time
========================
0.0.70
========================
- `schema.action()` supports a link to the JSON schema declaration
- fixed making insecure HTTPS requests by [DJTripper](https://github.com/DJTripper)
- fixed `RESTBuilder.insecure()` method
- extended `jsonschema.transform(value, callback, [partial])` by adding `partial` argument
- `mail_smtp_options` supports `token {String}` for OAuth 2.0 Access Token
- added `QueryBuilder.equal(object)` method
- fixed `UNAUTHORIZED()` method
- fixed a default nullable value for `enum` types in the Total.js schemas
========================
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 design in 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