alchemymvc 1.3.21 → 1.4.0-alpha.1

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 (155) hide show
  1. package/LICENSE +1 -1
  2. package/README.md +3 -3
  3. package/lib/app/behaviour/publishable_behaviour.js +5 -5
  4. package/lib/app/behaviour/revision_behaviour.js +10 -10
  5. package/lib/app/behaviour/sluggable_behaviour.js +14 -14
  6. package/lib/app/conduit/electron_conduit.js +9 -9
  7. package/lib/app/conduit/http_conduit.js +13 -13
  8. package/lib/app/conduit/loopback_conduit.js +15 -15
  9. package/lib/app/conduit/socket_conduit.js +43 -43
  10. package/lib/app/config/routes.js +26 -0
  11. package/lib/app/controller/00-default_app_controller.js +21 -0
  12. package/lib/app/controller/alchemy_info_controller.js +12 -12
  13. package/lib/app/datasource/mongo_datasource.js +16 -16
  14. package/lib/app/element/00-default_app_element.js +19 -0
  15. package/lib/app/element/time_ago.js +5 -5
  16. package/lib/app/helper/00-default_app_helper.js +11 -0
  17. package/lib/app/helper/alchemy_helper.js +22 -22
  18. package/lib/app/helper/backed_map.js +1 -1
  19. package/lib/app/helper/breadcrumb.js +10 -10
  20. package/lib/app/helper/client_collection.js +3 -3
  21. package/lib/app/helper/cron.js +29 -29
  22. package/lib/app/helper/enum_values.js +6 -6
  23. package/lib/app/helper/pagination_helper.js +36 -36
  24. package/lib/app/helper/router_helper.js +35 -35
  25. package/lib/app/helper/socket_helper.js +57 -57
  26. package/lib/app/helper/syncable.js +84 -59
  27. package/lib/app/helper_component/paginate_component.js +9 -9
  28. package/lib/app/helper_controller/component.js +1 -1
  29. package/lib/app/helper_controller/conduit.js +31 -31
  30. package/lib/app/helper_controller/controller.js +54 -39
  31. package/lib/app/helper_datasource/00-nosql_datasource.js +624 -70
  32. package/lib/app/helper_datasource/05-fallback_datasource.js +10 -10
  33. package/lib/app/helper_datasource/idb_datasource.js +6 -6
  34. package/lib/app/helper_datasource/indexed_db.js +22 -22
  35. package/lib/app/helper_datasource/remote_datasource.js +5 -5
  36. package/lib/app/helper_error/http_error.js +4 -4
  37. package/lib/app/helper_error/model_error.js +2 -2
  38. package/lib/app/helper_error/validation_error.js +12 -12
  39. package/lib/app/helper_field/00-objectid_field.js +7 -7
  40. package/lib/app/helper_field/05-string_field.js +16 -12
  41. package/lib/app/helper_field/06-text_field.js +2 -4
  42. package/lib/app/helper_field/10-number_field.js +9 -12
  43. package/lib/app/helper_field/11-date_field.js +15 -15
  44. package/lib/app/helper_field/15-local_temporal_field.js +10 -10
  45. package/lib/app/helper_field/20-decimal_field.js +8 -9
  46. package/lib/app/helper_field/belongsto_field.js +1 -1
  47. package/lib/app/helper_field/big_int_field.js +8 -8
  48. package/lib/app/helper_field/boolean_field.js +9 -11
  49. package/lib/app/helper_field/datetime_field.js +3 -3
  50. package/lib/app/helper_field/enum_field.js +13 -8
  51. package/lib/app/helper_field/fixed_decimal_field.js +6 -7
  52. package/lib/app/helper_field/geopoint_field.js +9 -10
  53. package/lib/app/helper_field/habtm_field.js +3 -3
  54. package/lib/app/helper_field/hasoneparent_field.js +1 -1
  55. package/lib/app/helper_field/html_field.js +2 -4
  56. package/lib/app/helper_field/integer_field.js +8 -11
  57. package/lib/app/helper_field/local_date_field.js +5 -5
  58. package/lib/app/helper_field/local_date_time_field.js +5 -5
  59. package/lib/app/helper_field/local_time_field.js +5 -5
  60. package/lib/app/helper_field/mixed_field.js +5 -5
  61. package/lib/app/helper_field/object_field.js +8 -8
  62. package/lib/app/helper_field/password_field.js +3 -3
  63. package/lib/app/helper_field/regexp_field.js +7 -9
  64. package/lib/app/helper_field/schema_field.js +91 -88
  65. package/lib/app/helper_field/settings_field.js +92 -0
  66. package/lib/app/helper_field/time_field.js +6 -6
  67. package/lib/app/helper_field/url_field.js +2 -4
  68. package/lib/app/helper_model/00-base_criteria.js +662 -0
  69. package/lib/app/helper_model/05-criteria_expressions.js +605 -0
  70. package/lib/app/helper_model/10-model_criteria.js +1182 -0
  71. package/lib/app/helper_model/data_provider.js +2 -2
  72. package/lib/app/helper_model/document.js +103 -92
  73. package/lib/app/helper_model/document_list.js +14 -14
  74. package/lib/app/helper_model/field_config.js +11 -11
  75. package/lib/app/helper_model/field_set.js +17 -17
  76. package/lib/app/helper_model/model.js +203 -124
  77. package/lib/app/helper_model/remote_data_provider.js +2 -2
  78. package/lib/app/helper_validator/00_validator.js +16 -16
  79. package/lib/app/helper_validator/not_empty_validator.js +9 -9
  80. package/lib/app/model/00-default_app_model.js +18 -0
  81. package/lib/app/model/05-system_model.js +27 -0
  82. package/lib/app/model/{alchemy_migration_model.js → system_migration_model.js} +4 -4
  83. package/lib/app/model/system_setting_model.js +154 -0
  84. package/lib/app/model/{alchemy_task_history_model.js → system_task_history_model.js} +7 -7
  85. package/lib/app/model/{alchemy_task_model.js → system_task_model.js} +11 -11
  86. package/lib/bootstrap.js +22 -312
  87. package/lib/class/accumulator.js +5 -5
  88. package/lib/class/behaviour.js +5 -5
  89. package/lib/class/component.js +3 -3
  90. package/lib/class/conduit.js +203 -163
  91. package/lib/class/controller.js +42 -42
  92. package/lib/class/datasource.js +74 -79
  93. package/lib/class/document.js +74 -95
  94. package/lib/class/document_list.js +5 -5
  95. package/lib/class/element.js +17 -17
  96. package/lib/class/error.js +3 -3
  97. package/lib/class/field.js +169 -91
  98. package/lib/class/field_value.js +6 -6
  99. package/lib/class/helper.js +3 -3
  100. package/lib/class/inode.js +17 -17
  101. package/lib/class/inode_dir.js +12 -12
  102. package/lib/class/inode_file.js +50 -25
  103. package/lib/class/inode_list.js +4 -4
  104. package/lib/class/migration.js +4 -4
  105. package/lib/class/model.js +182 -168
  106. package/lib/class/path_definition.js +22 -22
  107. package/lib/class/path_evaluator.js +5 -5
  108. package/lib/class/path_param_definition.js +7 -7
  109. package/lib/class/plugin.js +312 -0
  110. package/lib/class/postponement.js +29 -29
  111. package/lib/class/reciprocal.js +8 -8
  112. package/lib/class/route.js +33 -33
  113. package/lib/class/router.js +73 -73
  114. package/lib/class/schema.js +21 -21
  115. package/lib/class/schema_client.js +73 -67
  116. package/lib/class/session.js +63 -29
  117. package/lib/class/session_scene.js +4 -4
  118. package/lib/class/sitemap.js +16 -16
  119. package/lib/class/task.js +39 -39
  120. package/lib/class/task_service.js +43 -47
  121. package/lib/{init → core}/alchemy.js +413 -374
  122. package/lib/{init/functions.js → core/alchemy_functions.js} +171 -108
  123. package/lib/core/alchemy_load_functions.js +715 -0
  124. package/lib/core/base.js +50 -62
  125. package/lib/core/client_alchemy.js +144 -152
  126. package/lib/core/client_base.js +39 -52
  127. package/lib/core/discovery.js +16 -18
  128. package/lib/core/middleware.js +54 -43
  129. package/lib/core/{routing.js → prefix.js} +14 -16
  130. package/lib/core/setting.js +1684 -0
  131. package/lib/core/stage.js +758 -0
  132. package/lib/scripts/create_constants.js +119 -0
  133. package/lib/{init/languages.js → scripts/create_languages.js} +5 -5
  134. package/lib/scripts/create_settings.js +449 -0
  135. package/lib/scripts/create_shared_constants.js +95 -0
  136. package/lib/scripts/create_stages.js +55 -0
  137. package/lib/scripts/init_alchemy.js +51 -0
  138. package/lib/{init/requirements.js → scripts/preload_modules.js} +15 -2
  139. package/lib/scripts/setup_devwatch.js +238 -0
  140. package/lib/stages/00-load_core.js +342 -0
  141. package/lib/stages/05-load_app.js +57 -0
  142. package/lib/stages/10-datasource.js +61 -0
  143. package/lib/stages/15-tasks.js +27 -0
  144. package/lib/stages/20-settings.js +68 -0
  145. package/lib/stages/50-routes.js +218 -0
  146. package/lib/stages/90-server.js +347 -0
  147. package/package.json +5 -7
  148. package/lib/app/helper_model/criteria.js +0 -2294
  149. package/lib/app/helper_model/db_query.js +0 -1488
  150. package/lib/app/routes.js +0 -11
  151. package/lib/core/socket.js +0 -171
  152. package/lib/init/constants.js +0 -158
  153. package/lib/init/devwatch.js +0 -238
  154. package/lib/init/load_functions.js +0 -973
  155. package/lib/stages.js +0 -513
package/lib/core/base.js CHANGED
@@ -1,19 +1,18 @@
1
- 'use strict';
2
1
  const CONDUIT = Symbol('conduit');
3
2
 
4
3
  /**
5
4
  * Alchemy's Base class
6
5
  *
7
- * @author Jelle De Loecker <jelle@develry.be>
6
+ * @author Jelle De Loecker <jelle@elevenways.be>
8
7
  * @since 0.3.0
9
8
  * @version 0.3.0
10
9
  */
11
- var Base = Function.inherits('Informer', 'Alchemy', function Base() {});
10
+ const Base = Function.inherits('Informer', 'Alchemy', function Base() {});
12
11
 
13
12
  /**
14
13
  * Add group support to Protoblast
15
14
  *
16
- * @author Jelle De Loecker <jelle@develry.be>
15
+ * @author Jelle De Loecker <jelle@elevenways.be>
17
16
  * @since 0.3.0
18
17
  * @version 0.3.0
19
18
  */
@@ -33,7 +32,7 @@ __Protoblast.getGroup = function getGroup(name) {
33
32
  /**
34
33
  * Set basic behaviour
35
34
  *
36
- * @author Jelle De Loecker <jelle@develry.be>
35
+ * @author Jelle De Loecker <jelle@elevenways.be>
37
36
  * @since 0.3.0
38
37
  * @version 1.3.17
39
38
  */
@@ -204,11 +203,11 @@ Base.setStatic(function createClassTitle(suggested_root) {
204
203
  /**
205
204
  * Make this start a new group
206
205
  *
207
- * @author Jelle De Loecker <jelle@develry.be>
206
+ * @author Jelle De Loecker <jelle@elevenways.be>
208
207
  * @since 1.0.0
209
208
  * @version 1.0.0
210
209
  *
211
- * @param {Boolean} value
210
+ * @param {boolean} value
212
211
  */
213
212
  Base.setStatic(function startNewGroup(value) {
214
213
 
@@ -231,22 +230,20 @@ Base.setStatic(function startNewGroup(value) {
231
230
  /**
232
231
  * Get all the children of this class
233
232
  *
234
- * @author Jelle De Loecker <jelle@develry.be>
233
+ * @author Jelle De Loecker <jelle@elevenways.be>
235
234
  * @since 1.0.0
236
- * @version 1.0.0
235
+ * @version 1.4.0
237
236
  */
238
237
  Base.setStatic(function getAllChildren() {
239
238
 
240
- var result = [],
241
- i;
239
+ let result = [];
242
240
 
243
241
  if (!this.children) {
244
242
  return result;
245
243
  }
246
244
 
247
- for (i = 0; i < this.children.length; i++) {
248
- result.push(this.children[i]);
249
- result.include(this.children[i].getAllChildren());
245
+ for (let child of this.children) {
246
+ result.push(child, ...child.getAllChildren());
250
247
  }
251
248
 
252
249
  return result;
@@ -255,7 +252,7 @@ Base.setStatic(function getAllChildren() {
255
252
  /**
256
253
  * Find a member of this group
257
254
  *
258
- * @author Jelle De Loecker <jelle@elevenways.be>
255
+ * @author Jelle De Loecker <jelle@elevenways.be>
259
256
  * @since 0.3.0
260
257
  * @version 1.3.0
261
258
  */
@@ -295,7 +292,7 @@ Base.setStatic(function getMember(name) {
295
292
  /**
296
293
  * Set a deprecated property
297
294
  *
298
- * @author Jelle De Loecker <jelle@develry.be>
295
+ * @author Jelle De Loecker <jelle@elevenways.be>
299
296
  * @since 1.0.0
300
297
  * @version 1.1.0
301
298
  */
@@ -312,11 +309,11 @@ Base.setStatic(function setDeprecatedProperty(old_key, new_key) {
312
309
  /**
313
310
  * Get path to this class
314
311
  *
315
- * @author Jelle De Loecker <jelle@develry.be>
312
+ * @author Jelle De Loecker <jelle@elevenways.be>
316
313
  * @since 1.0.0
317
314
  * @version 1.0.0
318
315
  *
319
- * @return {String}
316
+ * @return {string}
320
317
  */
321
318
  Base.setStatic(function getClassPath() {
322
319
 
@@ -330,13 +327,13 @@ Base.setStatic(function getClassPath() {
330
327
  /**
331
328
  * Get path to this class, but after the given namespace piece
332
329
  *
333
- * @author Jelle De Loecker <jelle@develry.be>
330
+ * @author Jelle De Loecker <jelle@elevenways.be>
334
331
  * @since 1.0.0
335
332
  * @version 1.0.0
336
333
  *
337
- * @param {String} after Only return the path after the given class
334
+ * @param {string} after Only return the path after the given class
338
335
  *
339
- * @return {String}
336
+ * @return {string}
340
337
  */
341
338
  Base.setStatic(function getClassPathAfter(after) {
342
339
 
@@ -362,7 +359,7 @@ Base.setStatic(function getClassPathAfter(after) {
362
359
  /**
363
360
  * Set the 'shared group' prefix
364
361
  *
365
- * @author Jelle De Loecker <jelle@develry.be>
362
+ * @author Jelle De Loecker <jelle@elevenways.be>
366
363
  * @since 0.3.0
367
364
  * @version 1.0.0
368
365
  */
@@ -373,7 +370,7 @@ Base.setStatic('shared_group_prefix', '');
373
370
  * This property will not be inherited by children,
374
371
  * instead it'll always be set to false (unless overridden)
375
372
  *
376
- * @author Jelle De Loecker <jelle@develry.be>
373
+ * @author Jelle De Loecker <jelle@elevenways.be>
377
374
  * @since 0.3.0
378
375
  * @version 1.0.0
379
376
  */
@@ -383,7 +380,7 @@ Base.setStatic('is_abstract_class', true, false);
383
380
  * Does this class start a new group of children?
384
381
  * Like `is_abstract_class`, this does not get inherited.
385
382
  *
386
- * @author Jelle De Loecker <jelle@develry.be>
383
+ * @author Jelle De Loecker <jelle@elevenways.be>
387
384
  * @since 0.3.0
388
385
  * @version 1.0.0
389
386
  */
@@ -430,7 +427,7 @@ Base.setProperty(function conduit() {
430
427
  /**
431
428
  * Enable all inherited classes to get a class group
432
429
  *
433
- * @author Jelle De Loecker <jelle@develry.be>
430
+ * @author Jelle De Loecker <jelle@elevenways.be>
434
431
  * @since 0.3.0
435
432
  * @version 0.3.0
436
433
  */
@@ -441,11 +438,11 @@ Base.setMethod(function getClassGroup(name) {
441
438
  /**
442
439
  * Get path to this class
443
440
  *
444
- * @author Jelle De Loecker <jelle@develry.be>
441
+ * @author Jelle De Loecker <jelle@elevenways.be>
445
442
  * @since 1.0.0
446
443
  * @version 1.0.0
447
444
  *
448
- * @return {String}
445
+ * @return {string}
449
446
  */
450
447
  Base.setMethod(function getClassPath() {
451
448
  return this.constructor.getClassPath();
@@ -454,13 +451,13 @@ Base.setMethod(function getClassPath() {
454
451
  /**
455
452
  * Get path to this class
456
453
  *
457
- * @author Jelle De Loecker <jelle@develry.be>
454
+ * @author Jelle De Loecker <jelle@elevenways.be>
458
455
  * @since 1.0.0
459
456
  * @version 1.0.0
460
457
  *
461
- * @param {String} after Only return the path after the given class
458
+ * @param {string} after Only return the path after the given class
462
459
  *
463
- * @return {String}
460
+ * @return {string}
464
461
  */
465
462
  Base.setMethod(function getClassPathAfter(after) {
466
463
  return this.constructor.getClassPathAfter(after);
@@ -473,7 +470,7 @@ Base.setMethod(function getClassPathAfter(after) {
473
470
  * @since 1.0.0
474
471
  * @version 1.3.20
475
472
  *
476
- * @param {String} name The name of the method to call
473
+ * @param {string} name The name of the method to call
477
474
  * @param {Array} args The arguments to pass
478
475
  * @param {Function} next The callback to call afterwards
479
476
  */
@@ -552,7 +549,7 @@ Base.setStatic(function getClientClass() {
552
549
  /**
553
550
  * Attach a conduit to a certain instance
554
551
  *
555
- * @author Jelle De Loecker <jelle@develry.be>
552
+ * @author Jelle De Loecker <jelle@elevenways.be>
556
553
  * @since 0.3.0
557
554
  * @version 0.3.0
558
555
  *
@@ -565,29 +562,35 @@ Base.setMethod(function attachConduit(conduit) {
565
562
  /**
566
563
  * Get a model, attach a conduit if possible
567
564
  *
568
- * @author Jelle De Loecker <jelle@elevenways.be>
565
+ * @author Jelle De Loecker <jelle@elevenways.be>
569
566
  * @since 0.3.0
570
567
  * @version 1.1.8
571
568
  *
572
- * @param {String} name The name of the model to get
573
- * @param {Boolean} init Initialize the class [true]
574
- * @param {Object} options
569
+ * @param {string} name The name of the model to get
570
+ * @param {boolean} init Initialize the class [true]
571
+ * @param {Object} options
575
572
  *
576
- * @return {Model}
573
+ * @return {Model}
577
574
  */
578
575
  Base.setMethod(function getModel(name, init, options) {
579
576
 
580
- var instance;
581
-
582
577
  if (typeof init != 'boolean') {
583
578
  options = init;
584
579
  init = true;
585
580
  }
586
581
 
582
+ let constructor = Model.get(name, false);
583
+
584
+ if (!constructor) {
585
+ throw new Error('Model "' + name + '" could not be found');
586
+ }
587
+
587
588
  if (!init) {
588
- return Model.get(name, false);
589
+ return constructor;
589
590
  }
590
591
 
592
+ let instance;
593
+
591
594
  if (!options) {
592
595
  options = {};
593
596
  }
@@ -608,7 +611,7 @@ Base.setMethod(function getModel(name, init, options) {
608
611
  return instance;
609
612
  }
610
613
 
611
- instance = Model.get(name, options);
614
+ instance = new constructor(options);
612
615
 
613
616
  if (conduit) {
614
617
  instance.attachConduit(conduit);
@@ -628,11 +631,11 @@ Base.setMethod(function getModel(name, init, options) {
628
631
  /**
629
632
  * Create a debug entry
630
633
  *
631
- * @author Jelle De Loecker <jelle@develry.be>
634
+ * @author Jelle De Loecker <jelle@elevenways.be>
632
635
  * @since 0.3.0
633
636
  * @version 0.3.0
634
637
  *
635
- * @param {Number} verbosity
638
+ * @param {number} verbosity
636
639
  */
637
640
  Base.setMethod(function debug(verbosity) {
638
641
 
@@ -662,7 +665,7 @@ Base.setMethod(function debug(verbosity) {
662
665
  }
663
666
 
664
667
  // Do nothing if debugging is off and verbosity is too high
665
- if (!alchemy.settings.debug && options.verbosity > log.ERROR) {
668
+ if (!alchemy.settings.debugging.debug && options.verbosity > log.ERROR) {
666
669
  return;
667
670
  }
668
671
 
@@ -719,7 +722,7 @@ Base.setMethod(function debug(verbosity) {
719
722
  return item;
720
723
  }
721
724
 
722
- if (!duplicate && alchemy.settings.debug && options.data && options.data.args) {
725
+ if (!duplicate && alchemy.settings.debugging.debug && options.data && options.data.args) {
723
726
  if (typeof options.level != 'number') {
724
727
  options.level = 1;
725
728
  }
@@ -733,11 +736,11 @@ Base.setMethod(function debug(verbosity) {
733
736
  /**
734
737
  * Create a debug mark
735
738
  *
736
- * @author Jelle De Loecker <jelle@develry.be>
739
+ * @author Jelle De Loecker <jelle@elevenways.be>
737
740
  * @since 0.3.0
738
741
  * @version 0.3.0
739
742
  *
740
- * @param {String} message
743
+ * @param {string} message
741
744
  */
742
745
  Base.setMethod(function debugMark(message) {
743
746
  if (this._debugObject) {
@@ -745,19 +748,4 @@ Base.setMethod(function debugMark(message) {
745
748
  }
746
749
  });
747
750
 
748
- /**
749
- * Add the getClassGroup method to the alchemy object
750
- *
751
- * @author Jelle De Loecker <jelle@develry.be>
752
- * @since 0.3.0
753
- * @version 0.3.0
754
- */
755
- alchemy.getClassGroup = __Protoblast.getGroup;
756
-
757
751
  // PROTOBLAST END CUT
758
-
759
- // @TODO: put this somewhere else
760
- if (Blast.isBrowser) {
761
- window.Types = Blast.Types;
762
- window.Classes = Blast.Classes;
763
- }