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
@@ -4,7 +4,7 @@
4
4
  *
5
5
  * @constructor
6
6
  *
7
- * @author Jelle De Loecker <jelle@develry.be>
7
+ * @author Jelle De Loecker <jelle@elevenways.be>
8
8
  * @since 1.0.0
9
9
  * @version 1.0.0
10
10
  */
@@ -16,7 +16,7 @@ var Controller = Function.inherits('Alchemy.Client.Base', 'Alchemy.Client.Contro
16
16
  /**
17
17
  * Map these events to methods
18
18
  *
19
- * @author Jelle De Loecker <jelle@elevenways.be>
19
+ * @author Jelle De Loecker <jelle@elevenways.be>
20
20
  * @since 1.1.1
21
21
  * @version 1.1.1
22
22
  */
@@ -29,7 +29,7 @@ Controller.mapEventToMethod({
29
29
  /**
30
30
  * Add action object
31
31
  *
32
- * @author Jelle De Loecker <jelle@develry.be>
32
+ * @author Jelle De Loecker <jelle@elevenways.be>
33
33
  * @since 1.0.0
34
34
  * @version 1.0.0
35
35
  */
@@ -46,7 +46,7 @@ Controller.constitute(function addActions() {
46
46
  /**
47
47
  * Add an action
48
48
  *
49
- * @author Jelle De Loecker <jelle@develry.be>
49
+ * @author Jelle De Loecker <jelle@elevenways.be>
50
50
  * @since 1.0.0
51
51
  * @version 1.0.0
52
52
  */
@@ -89,14 +89,14 @@ Controller.setStatic(function setAction(name, fnc, on_server) {
89
89
  /**
90
90
  * Object where components are stored
91
91
  *
92
- * @type {Object}
92
+ * @type {Object}
93
93
  */
94
94
  Controller.prepareProperty('components', Object);
95
95
 
96
96
  /**
97
97
  * The controller name
98
98
  *
99
- * @type {String}
99
+ * @type {string}
100
100
  */
101
101
  Controller.prepareProperty('name', function name() {
102
102
  return this.constructor.name;
@@ -105,7 +105,7 @@ Controller.prepareProperty('name', function name() {
105
105
  /**
106
106
  * The model linked to this controller
107
107
  *
108
- * @author Jelle De Loecker <jelle@develry.be>
108
+ * @author Jelle De Loecker <jelle@elevenways.be>
109
109
  * @since 1.0.0
110
110
  * @version 1.0.5
111
111
  *
@@ -123,7 +123,7 @@ Controller.prepareProperty(function model() {
123
123
  /**
124
124
  * Alias to the viewRender
125
125
  *
126
- * @type {Hawkejs.ViewRender}
126
+ * @type {Hawkejs.ViewRender}
127
127
  */
128
128
  Controller.setProperty(function view_render() {
129
129
  return this.conduit.view_render;
@@ -132,11 +132,11 @@ Controller.setProperty(function view_render() {
132
132
  /**
133
133
  * Enable a component
134
134
  *
135
- * @author Jelle De Loecker <jelle@develry.be>
135
+ * @author Jelle De Loecker <jelle@elevenways.be>
136
136
  * @since 1.0.0
137
137
  * @version 1.0.0
138
138
  *
139
- * @param {String} name The name of the component
139
+ * @param {string} name The name of the component
140
140
  * @param {Object} options
141
141
  */
142
142
  Controller.setMethod(function addComponent(name, options) {
@@ -162,11 +162,11 @@ Controller.setMethod(function addComponent(name, options) {
162
162
  /**
163
163
  * Change the response URL (or disable it)
164
164
  *
165
- * @author Jelle De Loecker <jelle@elevenways.be>
165
+ * @author Jelle De Loecker <jelle@elevenways.be>
166
166
  * @since 1.3.0
167
167
  * @version 1.3.0
168
168
  *
169
- * @param {String|RURL|Boolean} new_url
169
+ * @param {string|RURL|boolean} new_url
170
170
  */
171
171
  Controller.setMethod(function setResponseUrl(new_url) {
172
172
 
@@ -179,11 +179,11 @@ Controller.setMethod(function setResponseUrl(new_url) {
179
179
  /**
180
180
  * Set a variable for ViewRender, through conduit
181
181
  *
182
- * @author Jelle De Loecker <jelle@develry.be>
182
+ * @author Jelle De Loecker <jelle@elevenways.be>
183
183
  * @since 0.2.0
184
184
  * @version 0.2.0
185
185
  *
186
- * @param {String} name
186
+ * @param {string} name
187
187
  * @param {Mixed} value
188
188
  */
189
189
  Controller.setMethod(function set(name, value) {
@@ -198,11 +198,11 @@ Controller.setMethod(function set(name, value) {
198
198
  /**
199
199
  * Set a variable for ViewRender, encode HTML if it's a string
200
200
  *
201
- * @author Jelle De Loecker <jelle@develry.be>
201
+ * @author Jelle De Loecker <jelle@elevenways.be>
202
202
  * @since 0.4.1
203
203
  * @version 0.4.1
204
204
  *
205
- * @param {String} name
205
+ * @param {string} name
206
206
  * @param {Mixed} value
207
207
  */
208
208
  Controller.setMethod(function safeSet(name, value) {
@@ -221,11 +221,11 @@ Controller.setMethod(function safeSet(name, value) {
221
221
  /**
222
222
  * Set the page title
223
223
  *
224
- * @author Jelle De Loecker <jelle@develry.be>
224
+ * @author Jelle De Loecker <jelle@elevenways.be>
225
225
  * @since 0.4.1
226
226
  * @version 0.4.1
227
227
  *
228
- * @param {String} title
228
+ * @param {string} title
229
229
  */
230
230
  Controller.setMethod(function setTitle(title) {
231
231
  this.set('pagetitle', title);
@@ -235,11 +235,11 @@ Controller.setMethod(function setTitle(title) {
235
235
  /**
236
236
  * Set an internal variable for ViewRender
237
237
  *
238
- * @author Jelle De Loecker <jelle@develry.be>
238
+ * @author Jelle De Loecker <jelle@elevenways.be>
239
239
  * @since 0.2.0
240
240
  * @version 1.0.0
241
241
  *
242
- * @param {String} name
242
+ * @param {string} name
243
243
  * @param {Mixed} value
244
244
  */
245
245
  Controller.setMethod(function internal(name, value) {
@@ -254,11 +254,11 @@ Controller.setMethod(function internal(name, value) {
254
254
  /**
255
255
  * Expose a variable for ViewRender
256
256
  *
257
- * @author Jelle De Loecker <jelle@develry.be>
257
+ * @author Jelle De Loecker <jelle@elevenways.be>
258
258
  * @since 0.2.0
259
259
  * @version 1.0.0
260
260
  *
261
- * @param {String} name
261
+ * @param {string} name
262
262
  * @param {Mixed} value
263
263
  */
264
264
  Controller.setMethod(function expose(name, value) {
@@ -273,12 +273,12 @@ Controller.setMethod(function expose(name, value) {
273
273
  /**
274
274
  * Render the given template
275
275
  *
276
- * @author Jelle De Loecker <jelle@develry.be>
276
+ * @author Jelle De Loecker <jelle@elevenways.be>
277
277
  * @since 1.0.0
278
278
  * @version 1.1.0
279
279
  *
280
- * @param {Number} status
281
- * @param {Array} templates
280
+ * @param {number} status
281
+ * @param {Array} templates
282
282
  */
283
283
  Controller.setMethod(function render(status, templates) {
284
284
 
@@ -309,11 +309,11 @@ Controller.setMethod(function render(status, templates) {
309
309
  /**
310
310
  * End the response
311
311
  *
312
- * @author Jelle De Loecker <jelle@develry.be>
312
+ * @author Jelle De Loecker <jelle@elevenways.be>
313
313
  * @since 1.1.0
314
314
  * @version 1.1.0
315
315
  *
316
- * @param {String|Object} message
316
+ * @param {string|Object} message
317
317
  */
318
318
  Controller.setMethod(function end(message) {
319
319
  return this.conduit.end(message);
@@ -322,12 +322,12 @@ Controller.setMethod(function end(message) {
322
322
  /**
323
323
  * Perform the wanted action and fire expected events
324
324
  *
325
- * @author Jelle De Loecker <jelle@develry.be>
325
+ * @author Jelle De Loecker <jelle@elevenways.be>
326
326
  * @since 0.2.0
327
- * @version 1.3.0
327
+ * @version 1.4.0
328
328
  *
329
- * @param {String} name The name of the action to execute
330
- * @param {Array} args Arguments to apply to the action
329
+ * @param {string} name The name of the action to execute
330
+ * @param {Array} args Arguments to apply to the action
331
331
  */
332
332
  Controller.setMethod(async function doAction(name, args) {
333
333
 
@@ -362,8 +362,8 @@ Controller.setMethod(async function doAction(name, args) {
362
362
  // @TODO: Add support for objects with language keys
363
363
  let title = route.options.title;
364
364
 
365
- if (alchemy.settings && alchemy.settings.title_suffix) {
366
- title += alchemy.settings.title_suffix;
365
+ if (alchemy.settings && alchemy.settings.frontend.title_suffix) {
366
+ title += alchemy.settings.frontend.title_suffix;
367
367
  }
368
368
 
369
369
  this.setTitle(title);
@@ -384,9 +384,24 @@ Controller.setMethod(async function doAction(name, args) {
384
384
  }
385
385
 
386
386
  try {
387
- await this.issueEvent('initializing');
388
- await this.issueEvent('filtering');
389
- await this.issueEvent('starting', [name]);
387
+ let result = await this.issueEvent('initializing');
388
+
389
+ if (result === false) {
390
+ return;
391
+ }
392
+
393
+ result = await this.issueEvent('filtering');
394
+
395
+ if (result === false) {
396
+ return;
397
+ }
398
+
399
+ result = await this.issueEvent('starting', [name]);
400
+
401
+ if (result === false) {
402
+ return;
403
+ }
404
+
390
405
  await this.constructor.actions[name].apply(this, args);
391
406
  } catch (err) {
392
407
  this.conduit.error(err);
@@ -396,11 +411,11 @@ Controller.setMethod(async function doAction(name, args) {
396
411
  /**
397
412
  * Create client controller class for specific controller name
398
413
  *
399
- * @author Jelle De Loecker <jelle@develry.be>
414
+ * @author Jelle De Loecker <jelle@elevenways.be>
400
415
  * @since 1.0.5
401
416
  * @version 1.0.5
402
417
  *
403
- * @param {String} controller_name
418
+ * @param {string} controller_name
404
419
  */
405
420
  Controller.setStatic(function getClass(controller_name) {
406
421
 
@@ -423,7 +438,7 @@ Controller.setStatic(function getClass(controller_name) {
423
438
 
424
439
  if (ControllerClass == null) {
425
440
  model_constructor = Function.create(class_name, function ControllerConstructor(record, options) {
426
- ControllerConstructor.wrapper.super.call(this, record, options);
441
+ ControllerConstructor.super.call(this, record, options);
427
442
  });
428
443
 
429
444
  // @TODO: inherit from parents