total5 0.0.1-9 → 0.0.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (59) hide show
  1. package/api.js +18 -10
  2. package/bin/flow5 +142 -0
  3. package/bin/total5 +166 -905
  4. package/builders.js +90 -35
  5. package/changelog.txt +3 -1
  6. package/cluster.js +1 -1
  7. package/cms.js +185 -51
  8. package/controller.js +233 -70
  9. package/cron.js +1 -1
  10. package/debug.js +12 -5
  11. package/edit.js +26 -33
  12. package/filestorage.js +38 -17
  13. package/flow-flowstream.js +199 -68
  14. package/flow.js +16 -10
  15. package/flowstream.js +4 -3
  16. package/global.js +84 -1
  17. package/htmlparser.js +41 -29
  18. package/http.js +3 -1
  19. package/image.js +4 -0
  20. package/images.js +1 -1
  21. package/index.js +246 -117
  22. package/jsonschema.js +21 -17
  23. package/macros.js +222 -0
  24. package/mail.js +11 -27
  25. package/markdown.js +21 -11
  26. package/minificators.js +1 -1
  27. package/nosql-querybuilder.js +4 -0
  28. package/nosql.js +8 -0
  29. package/openclient.js +1 -1
  30. package/package.json +4 -3
  31. package/pause.html +1 -1
  32. package/release.js +1 -1
  33. package/routing.js +118 -35
  34. package/sourcemap.js +6 -3
  35. package/test.js +9 -2
  36. package/tms.js +11 -14
  37. package/uibuilder.js +59 -23
  38. package/utils.js +147 -102
  39. package/viewengine.js +19 -8
  40. package/websocket.js +10 -6
  41. package/503.html +0 -65
  42. package/CONTRIBUTING.md +0 -55
  43. package/helpers/index.js +0 -32
  44. package/templates.json +0 -74
  45. package/tests/bundles/index.js +0 -25
  46. package/tests/cron.js +0 -0
  47. package/tests/htmlparser.js +0 -0
  48. package/tests/minifactors.js +0 -17
  49. package/tests/nosql.js +0 -18
  50. package/tests/proxy/index.js +0 -21
  51. package/tests/routing/index.js +0 -27
  52. package/tests/schemas.js +0 -17
  53. package/tests/server/index.js +0 -24
  54. package/tests/staticfiles/index.js +0 -24
  55. package/tests/utils.js +0 -17
  56. package/tmsclient.js +0 -125
  57. package/todo.txt +0 -11
  58. package/tools/beta.sh +0 -6
  59. package/tools/release.sh +0 -6
package/jsonschema.js CHANGED
@@ -18,7 +18,7 @@ function check_string(meta, error, value, errplus, path) {
18
18
  var type = typeof(value);
19
19
 
20
20
  if (type !== 'string')
21
- value = value ? (value + '') : null;
21
+ value = value ? (value + '') : meta.nullable ? null : '';
22
22
 
23
23
  if (errplus == null)
24
24
  errplus = '';
@@ -37,7 +37,7 @@ function check_string(meta, error, value, errplus, path) {
37
37
  }
38
38
 
39
39
  if (value == null)
40
- return;
40
+ return null;
41
41
 
42
42
  var len = value.length;
43
43
 
@@ -133,6 +133,14 @@ function check_string(meta, error, value, errplus, path) {
133
133
  return;
134
134
  }
135
135
  break;
136
+ case 'datauri':
137
+ value = value.trim();
138
+ if (value && !value.isBase64(true)) {
139
+ error.push2(errplus + meta.$$ID, path);
140
+ return;
141
+ }
142
+ value = value ? value.parseDataURI() : null;
143
+ break;
136
144
  case 'color':
137
145
  value = value.trim();
138
146
  if (value && !REG_COLOR.test(value)) {
@@ -299,7 +307,8 @@ function check_date(meta, error, value, errplus, path) {
299
307
  return value;
300
308
  }
301
309
 
302
- function read_def(ref, definitions) {
310
+ function readdef(ref, definitions) {
311
+
303
312
  if (ref[0] === '#') {
304
313
  var tmp = ref.substring(2).split('/');
305
314
  var def = definitions[tmp[0]];
@@ -421,7 +430,7 @@ function check_array(meta, error, value, stop, definitions, path) {
421
430
  var val = value[i];
422
431
 
423
432
  if (meta.items.$ref) {
424
- var ref = read_def(meta.items.$ref, definitions);
433
+ var ref = typeof(meta.items.$ref) === 'object' ? meta.items.$ref :readdef(meta.items.$ref, definitions);
425
434
  if (ref) {
426
435
  var newerror = new F.ErrorBuilder();
427
436
  tmp = transform(ref, newerror, val, false, currentpath + '[' + i + ']');
@@ -554,10 +563,8 @@ function check_object(meta, error, value, response, stop, definitions, path) {
554
563
  case 'boolean':
555
564
  case 'bool':
556
565
  tmp = check_boolean(prop, error, val, null, currentpath);
557
- if (tmp != null) {
558
- response[key] = tmp;
559
- count++;
560
- }
566
+ response[key] = tmp == true;
567
+ count++;
561
568
  break;
562
569
  case 'date':
563
570
  tmp = check_date(prop, error, val, null, currentpath);
@@ -566,15 +573,12 @@ function check_object(meta, error, value, response, stop, definitions, path) {
566
573
  break;
567
574
  case 'string':
568
575
  tmp = check_string(prop, error, val, null, currentpath);
569
- if (tmp != null) {
570
-
571
- if (!tmp && prop.subtype === 'uid')
572
- tmp = null;
573
-
574
- response[key] = tmp;
575
- count++;
576
- }
576
+ if (tmp == '' && prop.nullable)
577
+ tmp = null;
578
+ response[key] = tmp;
579
+ count++;
577
580
  break;
581
+
578
582
  case 'object':
579
583
 
580
584
  if (prop.properties) {
@@ -587,7 +591,7 @@ function check_object(meta, error, value, response, stop, definitions, path) {
587
591
 
588
592
  // check ref
589
593
  if (prop.$ref) {
590
- var ref = read_def(prop.$ref, definitions);
594
+ var ref = typeof(prop.$ref) === 'object' ? prop.$ref : readdef(prop.$ref, definitions);
591
595
  if (ref) {
592
596
  var newerror = new F.ErrorBuilder();
593
597
  tmp = transform(ref, newerror, val, false, currentpath);
package/macros.js ADDED
@@ -0,0 +1,222 @@
1
+ // Supported:
2
+ // - condition: IF, ELSE, ELSE IF, FI
3
+ // - custom helpers: HELPERNAME(arg1, arg2)
4
+ // - user defined values: "1" (number), "TEXT" (text), "TRUE" (boolean), "FALSE" boolean, "YES" boolean, "NO" boolean
5
+ // - returning via return keyword
6
+ // - supports lower/upper case (but properties in the model/helpers must be in the lower case)
7
+ // - #temporary
8
+ /*
9
+ IF something >= 10
10
+ RETURN something * 10;
11
+ FI
12
+ */
13
+
14
+ const AsyncFunction = async function () {}.constructor;
15
+
16
+ function findkeywords(line, keywords, replace, allowedbeg, allowedend) {
17
+
18
+ var white = [' ', '\t', ';'];
19
+
20
+ for (var keyword of keywords) {
21
+
22
+ var reg = new RegExp(keyword, 'gi');
23
+ var match = line.match(reg);
24
+
25
+ if (!match)
26
+ continue;
27
+
28
+ var index = 0;
29
+
30
+ for (var m of match) {
31
+
32
+ index = line.indexOf(m);
33
+
34
+ if (index === -1)
35
+ break;
36
+
37
+ var beg = line.substring(index - 1, index);
38
+
39
+ if (index === 0 || white.includes(beg) || (allowedbeg && allowedbeg.includes(beg))) {
40
+ var length = index + m.length;
41
+ var end = line.substring(length, length + 1);
42
+
43
+ if (!end || white.includes(end) || (allowedend && allowedend.includes(end))) {
44
+ var output = replace(m);
45
+ line = line.substring(0, index) + output + line.substring(length);
46
+ }
47
+ }
48
+ }
49
+ }
50
+ return line;
51
+ }
52
+
53
+ function prepareline(str, meta, isasync) {
54
+
55
+ str = str.trim();
56
+
57
+ if (str.substring(0, 2) === '//')
58
+ return;
59
+
60
+ // User defined values
61
+ str = str.replace(/(".*?")|('.*?')/g, function(text) {
62
+
63
+ var key = '@' + meta.indexer + '@';
64
+
65
+ text = text.substring(1, text.length - 1);
66
+ if ((/^[0-9.,]+$/).test(text)) {
67
+ text = text.parseFloat();
68
+ } else {
69
+ var boolean = text.toLowerCase();
70
+ if (boolean === 'true' || boolean === 'false')
71
+ text = boolean === 'true';
72
+ else
73
+ text = '"' + text + '"';
74
+ }
75
+
76
+ meta.keywords[key] = text;
77
+ meta.indexer++;
78
+ return key;
79
+ });
80
+
81
+ if (str.indexOf(';') !== -1) {
82
+ var lines = str.split(';');
83
+ for (var m of lines)
84
+ m = prepareline(m, meta, isasync);
85
+ return lines.join('\n');
86
+ }
87
+
88
+ // Return
89
+ str = findkeywords(str, ['return'], function(text) {
90
+ var key = '@' + meta.indexer + '@';
91
+ meta.keywords[key] = text.toLowerCase();
92
+ meta.indexer++;
93
+ return key;
94
+ });
95
+
96
+ // End condition
97
+ str = findkeywords(str, ['fi'], function() {
98
+ return '}';
99
+ });
100
+
101
+ // Boolean
102
+ str = findkeywords(str, ['true', 'false', 'yes', 'no', 'ok'], function(text) {
103
+ text = text.toLowerCase();
104
+ return text === 'yes' || text === 'true' || text === 'ok';
105
+ }, ['('], [')']);
106
+
107
+ // AND OR
108
+ str = findkeywords(str, ['and', 'or'], function(text) {
109
+ return text.toLowerCase().replace(/and/g, '&&').replace(/or/g, '||');
110
+ });
111
+
112
+ // Conditions
113
+ var lower = str.toLowerCase();
114
+ var index = lower.indexOf('else');
115
+ if (index !== -1) {
116
+ var tmp = str.substring(index);
117
+ var tmplower = tmp.toLowerCase();
118
+ str = str.substring(0, index) + '}' + tmp + (tmplower.indexOf('else if') === -1 ? '{' : '');
119
+ }
120
+
121
+ if (lower.indexOf('if ') !== -1) {
122
+ str = str.replace(/.=./g, function(text) {
123
+ if (text[0] === '>' || text[0] === '<' || text[0] === '=' || (text[1] === '=' && text[2] === '='))
124
+ return text;
125
+ if (text[2] === '>' || text[2] === '<')
126
+ return text[2] + text[1] + text[0];
127
+ if (text[1] === '=')
128
+ return text[0] + '=' + text[1] + text[2];
129
+ return text;
130
+ }) + '){';
131
+ }
132
+
133
+ // Conditions
134
+ str = str.replace(/(\s)?(else|else\sif|if)(\s)?/ig, function(text) {
135
+ var key = '@' + meta.indexer + '@';
136
+ meta.keywords[key] = text.replace(/if(\s)/i, 'if(').replace(/else/i, 'else');
137
+ meta.indexer++;
138
+ return key;
139
+ });
140
+
141
+ // Conditions
142
+ str = findkeywords(str, ['else', 'else if', 'if'], function(text) {
143
+ text = text.toLowerCase();
144
+ var key = '@' + meta.indexer + '@';
145
+ meta.keywords[key] = text.replace(/if(\s)/i, 'if(').replace(/else/i, 'else');
146
+ meta.indexer++;
147
+ return key;
148
+ });
149
+
150
+ // Null
151
+ str = findkeywords(str, ['null'], function(text) {
152
+ var key = '@' + meta.indexer + '@';
153
+ text = text.toLowerCase();
154
+ meta.keywords[key] = text.replace(/null/i, 'null');
155
+ meta.indexer++;
156
+ return key;
157
+ });
158
+
159
+ // Helpers
160
+ str = str.replace(/[a-z0-9_]+\((\))?/ig, function(text) {
161
+ var key = '@' + meta.indexer + '@';
162
+ var index = text.indexOf('(');
163
+ meta.keywords[key] = (isasync ? 'await ' : '') + 'helpers.' + (text.substring(0, index) + '.call(model' + (text.substring(index) === '()' ? ')' : ',')).toLowerCase();
164
+ meta.indexer++;
165
+ return key;
166
+ });
167
+
168
+ // Temporary variables
169
+ str = str.replace(/#[a-z0-9_.]+./ig, function(text) {
170
+
171
+ var last = text[text.length - 1];
172
+ if (last === '@')
173
+ text = text.substring(0, text.length - 1);
174
+ else
175
+ last = '';
176
+
177
+ var key = '@' + meta.indexer + '@';
178
+ meta.keywords[key] = text.substring(1).toLowerCase().replace(/[a-z]/i, text => 'tmp.' + text);
179
+ meta.indexer++;
180
+ return key + last;
181
+ });
182
+
183
+ // Properties & fixed values
184
+ str = str.replace(/.[a-z0-9_.]+./ig, function(text) {
185
+
186
+ if ((/@[0-9]+@|true|false(\))?/).test(text))
187
+ return text;
188
+
189
+ if ((/^[0-9.]+$/i).test(text)) {
190
+ return text;
191
+ }
192
+
193
+ text = text.toLowerCase().replace(/[a-z]/i, function(text) {
194
+ return 'model.' + text;
195
+ });
196
+
197
+ return text;
198
+ });
199
+
200
+ if (str)
201
+ meta.builder.push(str.replace(/(\s)?(=|>|<|\+|-)(\s)?/g, n => n.trim()) + ';');
202
+
203
+ }
204
+
205
+ exports.compile = function(str, nocompile, isasync) {
206
+
207
+ var meta = {};
208
+ meta.keywords = {};
209
+ meta.indexer = 0;
210
+ meta.builder = [];
211
+
212
+ var lines = str.split('\n');
213
+
214
+ for (var line of lines)
215
+ prepareline(line, meta, isasync);
216
+
217
+ var compiled = meta.builder.join('\n').replace(/@\d+@/gi, function(text) {
218
+ return meta.keywords[text];
219
+ });
220
+
221
+ return nocompile ? compiled : new (isasync ? AsyncFunction : Function)('model', 'helpers', 'var tmp={};\n' + compiled);
222
+ };
package/mail.js CHANGED
@@ -219,17 +219,18 @@ Message.prototype.send2 = function(callback) {
219
219
  return;
220
220
  }
221
221
 
222
- for (let key in F.temporary.smtp)
223
- Mailer.destroy(F.temporary.smtp[key]);
222
+ for (let key in F.temporary.smtp) {
223
+ if (!F.config.smtp || F.config.smtp.server !== key)
224
+ Mailer.destroy(F.temporary.smtp[key]);
225
+ }
224
226
 
225
227
  Mailer.send(F.config.smtp, self, callback);
226
228
  };
227
229
 
228
- Message.prototype.send = function(smtp, options, callback, cache) {
230
+ Message.prototype.send = function(options, callback) {
229
231
  var self = this;
230
232
  self.$callback2 = callback;
231
- options.server = smtp;
232
- Mailer.send(options, self, callback, cache);
233
+ Mailer.send(options, self, callback);
233
234
  return self;
234
235
  };
235
236
 
@@ -407,30 +408,13 @@ Mailer.try = function(options, callback) {
407
408
  };
408
409
 
409
410
  Mailer.send2 = function(messages, callback) {
410
-
411
- var opt = F.temporary.mail;
412
-
413
- if (!opt) {
414
- var config = CONF.mail_smtp_options;
415
- if (config) {
416
- if (typeof(config) === 'object')
417
- opt = config;
418
- else
419
- opt = config.toString().parseJSON();
420
- }
421
-
422
- if (!opt)
423
- opt = {};
424
-
425
- F.temporary.mail = opt;
426
- }
427
-
428
- return this.send(CONF.mail_smtp, opt, messages, callback);
411
+ return this.send(F.config.smtp, messages, callback);
429
412
  };
430
413
 
431
- Mailer.send = function(opt, messages, callback, cache) {
414
+ Mailer.send = function(opt, messages, callback) {
432
415
 
433
- var cached = opt.keepalive != false ? F.temporary.smtp[opt.server] : null;
416
+ var cache = opt.keepalive;
417
+ var cached = cache ? F.temporary.smtp[opt.server] : null;
434
418
 
435
419
  if (cached) {
436
420
  if (messages instanceof Array) {
@@ -582,7 +566,7 @@ Mailer.$writemessage = function(obj, buffer) {
582
566
 
583
567
  message.push('MIME-Version: 1.0');
584
568
  buffer.push('MAIL FROM: <' + msg.email_from + '>');
585
- message.push('Message-ID: <total5_' + obj.date.toString(36) + '_' + (INDEXATTACHMENT++) + '_' + (INDEXATTACHMENT) + '>');
569
+ message.push('Message-ID: <total5X' + dt.toString(36) + 'X' + (INDEXATTACHMENT++) + 'X' + (INDEXATTACHMENT) + '>');
586
570
 
587
571
  self.$priority && message.push('X-Priority: ' + self.$priority);
588
572
  self.$confidential && message.push('Sensitivity: Company-Confidential');
package/markdown.js CHANGED
@@ -1,3 +1,7 @@
1
+ // Total.js Markdown
2
+ // The MIT License
3
+ // Copyright 2018-2023 (c) Peter Širka <petersirka@gmail.com>
4
+
1
5
  const REG_DASH = /-{2,}/g;
2
6
  const REG_TAGS = /<[^>]*>/g;
3
7
  const REG_EMPTYCHAR = /\s|\W/;
@@ -137,9 +141,9 @@ function markdown_format(value, index, text) {
137
141
  return value;
138
142
  }
139
143
 
140
- function markdown_id(value) {
144
+ function markdown_id(prefix, value) {
141
145
  value = value.replace(REG_TAGS, '');
142
- return value.slug().replace(REG_DASH, '-');
146
+ return prefix + value.slug().replace(REG_DASH, '-');
143
147
  }
144
148
 
145
149
  function markdown_icon(value) {
@@ -221,10 +225,10 @@ function parseul(builder) {
221
225
  var arr = ul[key];
222
226
  var lines = [];
223
227
  var tags = [];
224
- var prev;
225
- var diff;
228
+ var prev = null;
229
+ var diff = null;
226
230
  var init = false;
227
- var tmp;
231
+ var tmp = null;
228
232
 
229
233
  for (var i = 0; i < arr.length; i++) {
230
234
 
@@ -420,12 +424,17 @@ String.prototype.markdown = function(opt, nested) {
420
424
  // opt.urlify = true;
421
425
  // opt.keywords = true;
422
426
  // opt.emptynewline = true;
427
+ // opt.bookmarks = true;
428
+ // opt.prefix = '';
423
429
 
424
430
  var str = this;
425
431
 
426
432
  if (!opt)
427
433
  opt = {};
428
434
 
435
+ if (opt.bookmarks == null)
436
+ opt.bookmarks = true;
437
+
429
438
  var lines = str.split('\n');
430
439
  var builder = [];
431
440
  var ul = [];
@@ -434,9 +443,10 @@ String.prototype.markdown = function(opt, nested) {
434
443
  var isblock = false;
435
444
  var ishead = 0;
436
445
  var isprevblock = false;
437
- var headline = '<{0} id="{3}" class="markdown-line" data-index="{1}">{2}</{0}>';
446
+ var headline = '<{0}' + (opt.bookmarks ? ' id="{3}"' : '') + ' class="markdown-line" data-index="{1}">{2}</{0}>';
438
447
  var line;
439
448
  var tmp;
449
+ var prefix = opt.prefix || '';
440
450
 
441
451
  if (opt.wrap == null)
442
452
  opt.wrap = true;
@@ -624,7 +634,7 @@ String.prototype.markdown = function(opt, nested) {
624
634
  if (opt.headlines !== false) {
625
635
  if (opt.html)
626
636
  tmp = opt.html(tmp, '#');
627
- builder.push(headline.format('h1', i, tmp, markdown_id(tmp)));
637
+ builder.push(headline.format('h1', i, tmp, opt.bookmarks ? markdown_id(prefix, tmp) : ''));
628
638
  }
629
639
  continue;
630
640
  }
@@ -634,7 +644,7 @@ String.prototype.markdown = function(opt, nested) {
634
644
  if (opt.headlines !== false) {
635
645
  if (opt.html)
636
646
  tmp = opt.html(tmp, '##');
637
- builder.push(headline.format('h2', i, tmp, markdown_id(tmp)));
647
+ builder.push(headline.format('h2', i, tmp, opt.bookmarks ? markdown_id(prefix, tmp) : ''));
638
648
  }
639
649
  continue;
640
650
  }
@@ -644,7 +654,7 @@ String.prototype.markdown = function(opt, nested) {
644
654
  if (opt.headlines !== false) {
645
655
  if (opt.html)
646
656
  tmp = opt.html(tmp, '###');
647
- builder.push(headline.format('h3', i, tmp, markdown_id(tmp)));
657
+ builder.push(headline.format('h3', i, tmp, opt.bookmarks ? markdown_id(prefix, tmp) : ''));
648
658
  }
649
659
  continue;
650
660
  }
@@ -654,7 +664,7 @@ String.prototype.markdown = function(opt, nested) {
654
664
  if (opt.headlines !== false) {
655
665
  if (opt.html)
656
666
  tmp = opt.html(tmp, '####');
657
- builder.push(headline.format('h4', i, tmp, markdown_id(tmp)));
667
+ builder.push(headline.format('h4', i, tmp, opt.bookmarks ? markdown_id(prefix, tmp) : ''));
658
668
  }
659
669
  continue;
660
670
  }
@@ -664,7 +674,7 @@ String.prototype.markdown = function(opt, nested) {
664
674
  if (opt.headlines !== false) {
665
675
  if (opt.html)
666
676
  tmp = opt.html(tmp, '#####');
667
- builder.push(headline.format('h5', i, tmp, markdown_id(tmp)));
677
+ builder.push(headline.format('h5', i, tmp, opt.bookmarks ? markdown_id(prefix, tmp) : ''));
668
678
  }
669
679
  continue;
670
680
  }
package/minificators.js CHANGED
@@ -167,7 +167,7 @@ exports.js = function(value) {
167
167
  }
168
168
  }
169
169
 
170
- if ((c === '}' && last === ';') || ((c === '}' || c === ']') && output[output.length - 1] === ' ' && alpha.test(output[output.length - 2])))
170
+ if (!scope && (c === '}' && last === ';') || ((c === '}' || c === ']') && output[output.length - 1] === ' ' && alpha.test(output[output.length - 2])))
171
171
  output.pop();
172
172
 
173
173
  output.push(c);
@@ -260,6 +260,10 @@ function makefilter(db, opt, callback) {
260
260
  }
261
261
  isread = true;
262
262
  break;
263
+ case 'command':
264
+ if (opt.command === 'clean')
265
+ db.clean(callback);
266
+ break;
263
267
  }
264
268
 
265
269
  if (opt.debug)
package/nosql.js CHANGED
@@ -761,6 +761,14 @@ NoSQLWrapper.prototype.find = function() {
761
761
  return DATA.find('nosql/' + this.filename);
762
762
  };
763
763
 
764
+ NoSQLWrapper.prototype.clean = function() {
765
+ return DATA.command('nosql/' + this.filename, 'clean');
766
+ };
767
+
768
+ NoSQLWrapper.prototype.drop = function() {
769
+ return DATA.drop('nosql/' + this.filename);
770
+ };
771
+
764
772
  NoSQLWrapper.prototype.read = function() {
765
773
  return DATA.read('nosql/' + this.filename);
766
774
  };
package/openclient.js CHANGED
@@ -197,7 +197,7 @@ exports.create = function(url, id) {
197
197
  opt.ws = F.openclients[url];
198
198
 
199
199
  if (!opt.ws) {
200
- opt.ws = require('./websocketclient').create();
200
+ opt.ws = F.websocketclient();
201
201
  setImmediate(() => opt.ws.connect(url));
202
202
  F.openclients[url] = opt.ws;
203
203
  opt.ws.options.reconnectserver = true;
package/package.json CHANGED
@@ -1,16 +1,17 @@
1
1
  {
2
2
  "name": "total5",
3
- "version": "0.0.1-9",
3
+ "version": "0.0.2",
4
4
  "description": "Total.js framework v5",
5
5
  "main": "index.js",
6
6
  "directories": {
7
7
  "test": "test"
8
8
  },
9
9
  "bin": {
10
- "total4": "./bin/total5"
10
+ "total5": "./bin/total5",
11
+ "flow5": "./bin/flow5"
11
12
  },
12
13
  "scripts": {
13
- "test": "cd tests && node test-release.js"
14
+ "test": "cd tests && node run.js"
14
15
  },
15
16
  "repository": {
16
17
  "type": "git",
package/pause.html CHANGED
@@ -1,7 +1,7 @@
1
1
  <!DOCTYPE html>
2
2
  <html>
3
3
  <head>
4
- <title>@(Please wait)</title>
4
+ <title>Please wait</title>
5
5
  <meta charset="utf-8" />
6
6
  <meta name="format-detection" content="telephone=no" />
7
7
  <meta name="viewport" content="width=device-width, initial-scale=1, user-scalable=no" />
package/release.js CHANGED
@@ -93,7 +93,7 @@ function run() {
93
93
  unexpectedexit = false;
94
94
  });
95
95
 
96
- EMIT('watcher', app);
96
+ F.emit('watcher', app);
97
97
  }
98
98
 
99
99
  function init() {