@vandenberghinc/volt 1.1.4 → 1.1.6

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 (290) hide show
  1. package/backend/dist/cjs/database.d.ts +41 -68
  2. package/backend/dist/cjs/database.js +136 -78
  3. package/backend/dist/cjs/endpoint.d.ts +23 -9
  4. package/backend/dist/cjs/endpoint.js +98 -21
  5. package/backend/dist/cjs/file_watcher.js +2 -2
  6. package/backend/dist/cjs/frontend.d.ts +0 -2
  7. package/backend/dist/cjs/frontend.js +9 -9
  8. package/backend/dist/cjs/image_endpoint.d.ts +3 -1
  9. package/backend/dist/cjs/image_endpoint.js +2 -1
  10. package/backend/dist/cjs/payments/paddle.js +10 -2
  11. package/backend/dist/cjs/plugins/css.d.ts +6 -5
  12. package/backend/dist/cjs/plugins/css.js +32 -7
  13. package/backend/dist/cjs/plugins/ts/compiler.d.ts +6 -1
  14. package/backend/dist/cjs/plugins/ts/compiler.js +26 -2
  15. package/backend/dist/cjs/plugins/ts/preprocessing.js +5 -3
  16. package/backend/dist/cjs/server.d.ts +7 -13
  17. package/backend/dist/cjs/server.js +184 -303
  18. package/backend/dist/cjs/status.d.ts +1 -0
  19. package/backend/dist/cjs/status.js +2 -1
  20. package/backend/dist/cjs/stream.d.ts +5 -3
  21. package/backend/dist/cjs/stream.js +13 -4
  22. package/backend/dist/cjs/users.d.ts +1 -1
  23. package/backend/dist/cjs/users.js +87 -72
  24. package/backend/dist/cjs/utils.d.ts +17 -9
  25. package/backend/dist/cjs/utils.js +22 -64
  26. package/backend/dist/cjs/view.d.ts +2 -2
  27. package/backend/dist/cjs/view.js +38 -40
  28. package/backend/dist/cjs/volt.d.ts +3 -2
  29. package/backend/dist/cjs/volt.js +2 -2
  30. package/backend/dist/css/volt.css +5 -0
  31. package/backend/dist/esm/database.d.ts +41 -68
  32. package/backend/dist/esm/database.js +137 -79
  33. package/backend/dist/esm/endpoint.d.ts +23 -9
  34. package/backend/dist/esm/endpoint.js +99 -22
  35. package/backend/dist/esm/file_watcher.js +2 -2
  36. package/backend/dist/esm/frontend.d.ts +0 -2
  37. package/backend/dist/esm/frontend.js +9 -9
  38. package/backend/dist/esm/image_endpoint.d.ts +3 -1
  39. package/backend/dist/esm/image_endpoint.js +2 -1
  40. package/backend/dist/esm/payments/paddle.js +11 -3
  41. package/backend/dist/esm/plugins/css.d.ts +6 -5
  42. package/backend/dist/esm/plugins/css.js +32 -6
  43. package/backend/dist/esm/plugins/ts/compiler.d.ts +6 -1
  44. package/backend/dist/esm/plugins/ts/compiler.js +26 -2
  45. package/backend/dist/esm/plugins/ts/preprocessing.js +5 -3
  46. package/backend/dist/esm/server.d.ts +7 -13
  47. package/backend/dist/esm/server.js +182 -301
  48. package/backend/dist/esm/status.d.ts +1 -0
  49. package/backend/dist/esm/status.js +1 -0
  50. package/backend/dist/esm/stream.d.ts +5 -3
  51. package/backend/dist/esm/stream.js +13 -4
  52. package/backend/dist/esm/users.d.ts +1 -1
  53. package/backend/dist/esm/users.js +87 -72
  54. package/backend/dist/esm/utils.d.ts +17 -9
  55. package/backend/dist/esm/utils.js +21 -62
  56. package/backend/dist/esm/view.d.ts +2 -2
  57. package/backend/dist/esm/view.js +38 -40
  58. package/backend/dist/esm/volt.d.ts +3 -2
  59. package/backend/dist/esm/volt.js +2 -1
  60. package/backend/dist/esm-dev/blacklist.js +1 -1
  61. package/backend/dist/esm-dev/cli.js +2 -2
  62. package/backend/dist/esm-dev/database.d.ts +41 -68
  63. package/backend/dist/esm-dev/database.js +138 -80
  64. package/backend/dist/esm-dev/endpoint.d.ts +23 -9
  65. package/backend/dist/esm-dev/endpoint.js +100 -23
  66. package/backend/dist/esm-dev/file_watcher.js +3 -3
  67. package/backend/dist/esm-dev/frontend.d.ts +0 -2
  68. package/backend/dist/esm-dev/frontend.js +9 -9
  69. package/backend/dist/esm-dev/image_endpoint.d.ts +3 -1
  70. package/backend/dist/esm-dev/image_endpoint.js +2 -1
  71. package/backend/dist/esm-dev/logger.js +1 -1
  72. package/backend/dist/esm-dev/payments/paddle.js +12 -4
  73. package/backend/dist/esm-dev/plugins/css.d.ts +6 -5
  74. package/backend/dist/esm-dev/plugins/css.js +33 -7
  75. package/backend/dist/esm-dev/plugins/ts/compiler.d.ts +6 -1
  76. package/backend/dist/esm-dev/plugins/ts/compiler.js +27 -3
  77. package/backend/dist/esm-dev/plugins/ts/preprocessing.js +7 -5
  78. package/backend/dist/esm-dev/rate_limit.js +1 -1
  79. package/backend/dist/esm-dev/server.d.ts +7 -13
  80. package/backend/dist/esm-dev/server.js +184 -303
  81. package/backend/dist/esm-dev/status.d.ts +1 -0
  82. package/backend/dist/esm-dev/status.js +1 -0
  83. package/backend/dist/esm-dev/stream.d.ts +5 -3
  84. package/backend/dist/esm-dev/stream.js +13 -4
  85. package/backend/dist/esm-dev/users.d.ts +1 -1
  86. package/backend/dist/esm-dev/users.js +88 -73
  87. package/backend/dist/esm-dev/utils.d.ts +17 -9
  88. package/backend/dist/esm-dev/utils.js +22 -63
  89. package/backend/dist/esm-dev/view.d.ts +2 -2
  90. package/backend/dist/esm-dev/view.js +39 -41
  91. package/backend/dist/esm-dev/volt.d.ts +3 -2
  92. package/backend/dist/esm-dev/volt.js +2 -1
  93. package/backend/src/database.ts +173 -155
  94. package/backend/src/endpoint.ts +123 -31
  95. package/backend/src/file_watcher.ts +2 -2
  96. package/backend/src/frontend.ts +9 -8
  97. package/backend/src/image_endpoint.ts +4 -0
  98. package/backend/src/payments/paddle.ts +11 -3
  99. package/backend/src/plugins/css.ts +36 -8
  100. package/backend/src/plugins/ts/compiler.ts +37 -1
  101. package/backend/src/plugins/ts/preprocessing.ts +5 -3
  102. package/backend/src/server.ts +167 -306
  103. package/backend/src/status.ts +1 -0
  104. package/backend/src/stream.ts +28 -8
  105. package/backend/src/users.ts +87 -72
  106. package/backend/src/utils.ts +58 -25
  107. package/backend/src/view.ts +30 -28
  108. package/backend/src/{volt.js → volt.ts} +2 -1
  109. package/backend/tsconfig.cjs.json +3 -3
  110. package/backend/tsconfig.esm.json +3 -3
  111. package/frontend/dist/elements/base.d.ts +414 -432
  112. package/frontend/dist/elements/base.js +566 -329
  113. package/frontend/dist/elements/module.d.ts +26 -12
  114. package/frontend/dist/elements/module.js +69 -32
  115. package/frontend/dist/elements/register_element.d.ts +3 -0
  116. package/frontend/dist/elements/register_element.js +22 -0
  117. package/frontend/dist/modules/auth.d.ts +1 -0
  118. package/frontend/dist/modules/auth.js +6 -5
  119. package/frontend/dist/modules/color.d.ts +159 -0
  120. package/frontend/dist/modules/color.js +315 -0
  121. package/frontend/dist/modules/colors.d.ts +1 -26
  122. package/frontend/dist/modules/colors.js +417 -340
  123. package/frontend/dist/modules/cookies.d.ts +1 -0
  124. package/frontend/dist/modules/cookies.js +1 -0
  125. package/frontend/dist/modules/events.d.ts +1 -0
  126. package/frontend/dist/modules/events.js +1 -0
  127. package/frontend/dist/modules/google.d.ts +1 -0
  128. package/frontend/dist/modules/google.js +1 -0
  129. package/frontend/dist/modules/meta.d.ts +1 -0
  130. package/frontend/dist/modules/meta.js +1 -0
  131. package/frontend/dist/modules/mutex.d.ts +1 -2
  132. package/frontend/dist/modules/mutex.js +3 -4
  133. package/frontend/dist/modules/paddle.d.ts +1 -0
  134. package/frontend/dist/modules/paddle.js +14 -13
  135. package/frontend/dist/modules/scheme.d.ts +1 -0
  136. package/frontend/dist/modules/scheme.js +5 -3
  137. package/frontend/dist/modules/statics.d.ts +1 -0
  138. package/frontend/dist/modules/statics.js +1 -0
  139. package/frontend/dist/modules/support.d.ts +1 -0
  140. package/frontend/dist/modules/support.js +3 -2
  141. package/frontend/dist/modules/theme.d.ts +56 -0
  142. package/frontend/dist/{ui → modules}/theme.js +186 -75
  143. package/frontend/dist/modules/themes.d.ts +1 -1
  144. package/frontend/dist/modules/themes.js +1 -0
  145. package/frontend/dist/modules/user.d.ts +1 -0
  146. package/frontend/dist/modules/user.js +11 -10
  147. package/frontend/dist/modules/utils.d.ts +23 -2
  148. package/frontend/dist/modules/utils.js +93 -1
  149. package/frontend/dist/types/gradient.js +4 -0
  150. package/frontend/dist/ui/border_button.d.ts +0 -25
  151. package/frontend/dist/ui/border_button.js +50 -51
  152. package/frontend/dist/ui/button.d.ts +0 -21
  153. package/frontend/dist/ui/button.js +41 -46
  154. package/frontend/dist/ui/canvas.js +15 -15
  155. package/frontend/dist/ui/checkbox.d.ts +3 -17
  156. package/frontend/dist/ui/checkbox.js +36 -30
  157. package/frontend/dist/ui/code.d.ts +15 -82
  158. package/frontend/dist/ui/code.js +150 -125
  159. package/frontend/dist/ui/color.d.ts +0 -1
  160. package/frontend/dist/ui/color.js +1 -1
  161. package/frontend/dist/ui/context_menu.d.ts +4 -2
  162. package/frontend/dist/ui/context_menu.js +16 -17
  163. package/frontend/dist/ui/css.js +2 -0
  164. package/frontend/dist/ui/divider.d.ts +0 -7
  165. package/frontend/dist/ui/divider.js +21 -25
  166. package/frontend/dist/ui/dropdown.d.ts +13 -7
  167. package/frontend/dist/ui/dropdown.js +65 -30
  168. package/frontend/dist/ui/for_each.d.ts +0 -5
  169. package/frontend/dist/ui/for_each.js +17 -22
  170. package/frontend/dist/ui/form.d.ts +17 -12
  171. package/frontend/dist/ui/form.js +21 -18
  172. package/frontend/dist/ui/frame_modes.d.ts +9 -12
  173. package/frontend/dist/ui/frame_modes.js +8 -10
  174. package/frontend/dist/ui/google_map.d.ts +0 -11
  175. package/frontend/dist/ui/google_map.js +23 -28
  176. package/frontend/dist/ui/gradient.d.ts +0 -5
  177. package/frontend/dist/ui/gradient.js +17 -22
  178. package/frontend/dist/ui/image.d.ts +27 -58
  179. package/frontend/dist/ui/image.js +99 -93
  180. package/frontend/dist/ui/input.d.ts +20 -97
  181. package/frontend/dist/ui/input.js +192 -170
  182. package/frontend/dist/ui/link.d.ts +0 -18
  183. package/frontend/dist/ui/link.js +42 -48
  184. package/frontend/dist/ui/list.js +36 -37
  185. package/frontend/dist/ui/loader_button.d.ts +4 -19
  186. package/frontend/dist/ui/loader_button.js +35 -37
  187. package/frontend/dist/ui/loaders.d.ts +0 -8
  188. package/frontend/dist/ui/loaders.js +20 -25
  189. package/frontend/dist/ui/popup.d.ts +11 -8
  190. package/frontend/dist/ui/popup.js +183 -24
  191. package/frontend/dist/ui/pseudo.d.ts +3 -3
  192. package/frontend/dist/ui/pseudo.js +14 -17
  193. package/frontend/dist/ui/scroller.d.ts +10 -48
  194. package/frontend/dist/ui/scroller.js +306 -300
  195. package/frontend/dist/ui/slider.d.ts +9 -3
  196. package/frontend/dist/ui/slider.js +31 -17
  197. package/frontend/dist/ui/spacer.d.ts +0 -9
  198. package/frontend/dist/ui/spacer.js +21 -26
  199. package/frontend/dist/ui/span.js +13 -15
  200. package/frontend/dist/ui/stack.d.ts +14 -75
  201. package/frontend/dist/ui/stack.js +166 -169
  202. package/frontend/dist/ui/steps.d.ts +10 -23
  203. package/frontend/dist/ui/steps.js +47 -34
  204. package/frontend/dist/ui/style.d.ts +4 -3
  205. package/frontend/dist/ui/style.js +13 -18
  206. package/frontend/dist/ui/switch.d.ts +10 -4
  207. package/frontend/dist/ui/switch.js +24 -16
  208. package/frontend/dist/ui/table.d.ts +0 -23
  209. package/frontend/dist/ui/table.js +113 -119
  210. package/frontend/dist/ui/tabs.d.ts +3 -19
  211. package/frontend/dist/ui/tabs.js +35 -29
  212. package/frontend/dist/ui/text.d.ts +0 -8
  213. package/frontend/dist/ui/text.js +20 -25
  214. package/frontend/dist/ui/title.d.ts +0 -15
  215. package/frontend/dist/ui/title.js +39 -45
  216. package/frontend/dist/ui/ui.d.ts +0 -2
  217. package/frontend/dist/ui/ui.js +0 -2
  218. package/frontend/dist/ui/view.d.ts +3 -17
  219. package/frontend/dist/ui/view.js +27 -32
  220. package/frontend/dist/volt.d.ts +2 -1
  221. package/frontend/dist/volt.js +3 -1
  222. package/frontend/examples/dashboard/dashboard.ts +774 -0
  223. package/frontend/examples/theme/theme.ts +58 -0
  224. package/frontend/src/css/volt.css +5 -0
  225. package/frontend/src/elements/base.ts +767 -545
  226. package/frontend/src/elements/module.ts +90 -29
  227. package/frontend/src/elements/register_element.ts +24 -0
  228. package/frontend/src/modules/auth.ts +7 -6
  229. package/frontend/src/modules/color.ts +348 -0
  230. package/frontend/src/modules/colors.ts +468 -449
  231. package/frontend/src/modules/cookies.ts +1 -0
  232. package/frontend/src/modules/events.ts +1 -0
  233. package/frontend/src/modules/google.ts +1 -0
  234. package/frontend/src/modules/meta.ts +2 -1
  235. package/frontend/src/modules/mutex.ts +2 -4
  236. package/frontend/src/modules/paddle.ts +21 -20
  237. package/frontend/src/modules/scheme.ts +5 -4
  238. package/frontend/src/modules/statics.ts +2 -1
  239. package/frontend/src/modules/support.ts +3 -2
  240. package/frontend/src/modules/theme.ts +413 -0
  241. package/frontend/src/modules/themes.ts +2 -1
  242. package/frontend/src/modules/user.ts +12 -11
  243. package/frontend/src/modules/utils.ts +125 -2
  244. package/frontend/src/ui/border_button.ts +41 -37
  245. package/frontend/src/ui/button.ts +33 -32
  246. package/frontend/src/ui/canvas.ts +5 -2
  247. package/frontend/src/ui/checkbox.ts +21 -22
  248. package/frontend/src/ui/code.ts +92 -86
  249. package/frontend/src/ui/context_menu.ts +7 -5
  250. package/frontend/src/ui/css.ts +1 -1
  251. package/frontend/src/ui/divider.ts +15 -10
  252. package/frontend/src/ui/dropdown.ts +38 -21
  253. package/frontend/src/ui/for_each.ts +9 -8
  254. package/frontend/src/ui/form.ts +26 -21
  255. package/frontend/src/ui/frame_modes.ts +13 -17
  256. package/frontend/src/ui/google_map.ts +15 -13
  257. package/frontend/src/ui/gradient.ts +9 -8
  258. package/frontend/src/ui/image.ts +108 -86
  259. package/frontend/src/ui/input.ts +145 -144
  260. package/frontend/src/ui/link.ts +25 -23
  261. package/frontend/src/ui/list.ts +12 -6
  262. package/frontend/src/ui/loader_button.ts +26 -25
  263. package/frontend/src/ui/loaders.ts +12 -11
  264. package/frontend/src/ui/popup.ts +168 -14
  265. package/frontend/src/ui/pseudo.ts +5 -3
  266. package/frontend/src/ui/scroller.ts +303 -294
  267. package/frontend/src/ui/slider.ts +15 -10
  268. package/frontend/src/ui/spacer.ts +14 -11
  269. package/frontend/src/ui/span.ts +6 -2
  270. package/frontend/src/ui/stack.ts +196 -183
  271. package/frontend/src/ui/steps.ts +38 -22
  272. package/frontend/src/ui/style.ts +7 -4
  273. package/frontend/src/ui/switch.ts +16 -11
  274. package/frontend/src/ui/table.ts +42 -34
  275. package/frontend/src/ui/tabs.ts +20 -19
  276. package/frontend/src/ui/text.ts +12 -11
  277. package/frontend/src/ui/title.ts +22 -20
  278. package/frontend/src/ui/ui.ts +0 -2
  279. package/frontend/src/ui/view.ts +20 -19
  280. package/frontend/src/volt.ts +3 -1
  281. package/frontend/{compile.js → tools/compile.old.js} +2 -2
  282. package/frontend/tools/embed_scripts.js +69 -0
  283. package/frontend/tsconfig.json +26 -0
  284. package/package.json +7 -6
  285. package/frontend/dist/ui/theme.d.ts +0 -25
  286. package/frontend/exports.json +0 -1340
  287. package/frontend/src/modules/date.js +0 -535
  288. package/frontend/src/ui/color.ts +0 -117
  289. package/frontend/src/ui/theme.ts +0 -279
  290. /package/backend/src/{vinc.dev.js → vinc.dev.ts} +0 -0
@@ -6,9 +6,9 @@
6
6
  // Libraries.
7
7
  import { spawn } from "child_process";
8
8
  import { deserialize, serialize } from "bson";
9
- import { MongoClient } from 'mongodb';
9
+ import { MongoClient, ServerApiVersion } from 'mongodb';
10
10
  import { logger, LogSource } from "./logger.js";
11
- import { vlib } from "/Users/administrator/persistance/private/dev/vinc/volt/backend/./src/vinc.dev.js";
11
+ import { vlib } from "@vinc";
12
12
  const log_source = new LogSource("Database");
13
13
  // ---------------------------------------------------------
14
14
  // Collection.
@@ -31,7 +31,7 @@ class Collection {
31
31
  static constructor_scheme = {
32
32
  name: "string",
33
33
  uid_based: "boolean",
34
- ttl: { type: "number", default: null },
34
+ ttl: { type: "number", default: null }, // ttl in msec
35
35
  indexes: {
36
36
  type: "array",
37
37
  default: [],
@@ -40,7 +40,7 @@ class Collection {
40
40
  scheme: {
41
41
  key: { type: "string", required: (data) => data.key == null && data.keys == null },
42
42
  keys: {
43
- type: ["string", "array"],
43
+ type: ["array"],
44
44
  required: (data) => data.key == null && data.keys == null, value_scheme: "string",
45
45
  postprocess: (keys) => typeof keys === "string" ? [keys] : keys,
46
46
  },
@@ -51,11 +51,6 @@ class Collection {
51
51
  postprocess: (info) => {
52
52
  if (typeof info === "string")
53
53
  return { keys: [info] };
54
- if (typeof info === "object" && info.key) {
55
- info.keys = info.key;
56
- delete info.key;
57
- return info;
58
- }
59
54
  return info;
60
55
  },
61
56
  },
@@ -65,9 +60,10 @@ class Collection {
65
60
  col;
66
61
  name;
67
62
  uid_based;
68
- ttl;
63
+ ttl; // ttl in msec
69
64
  ttl_enabled;
70
- constructor(name, collection, ttl = null, indexes = [], uid_based = false) {
65
+ constructor(name, collection, ttl = null, // ttl in msec
66
+ indexes = [], uid_based = false) {
71
67
  // Verify scheme.
72
68
  ({ indexes, ttl } = vlib.Scheme.verify({
73
69
  object: {
@@ -96,7 +92,8 @@ class Collection {
96
92
  if (this.ttl_enabled) {
97
93
  this.col.dropIndex("_ttl_timestamp_1")
98
94
  .catch(err => {
99
- if (err.codeName !== 'IndexNotFound') {
95
+ if (err.codeName !== 'IndexNotFound' && err.codeName !== 'NamespaceNotFound') {
96
+ err.stack = new Error(err.message).stack;
100
97
  throw err;
101
98
  }
102
99
  })
@@ -106,13 +103,8 @@ class Collection {
106
103
  }
107
104
  // Create indexes.
108
105
  if (Array.isArray(indexes) && indexes.length > 0) {
109
- for (const index of indexes) {
110
- this.create_index({
111
- keys: index.keys,
112
- options: index.options,
113
- commit_quorum: index.commit_quorum,
114
- forced: index.forced,
115
- });
106
+ for (let item of indexes) {
107
+ this.create_index(item);
116
108
  }
117
109
  }
118
110
  }
@@ -227,23 +219,22 @@ class Collection {
227
219
  @name: commitQuorum
228
220
  @desc: The `commitQuorum` argument for the orignal mongodb `createIndex()` function.
229
221
  */
230
- async create_index({ keys, options = null, commit_quorum = null, forced = false }) {
222
+ async create_index({ key = undefined, keys = undefined, // following the IndexOptions "key" or "keys" must be defined in typescript but not in raw js.
223
+ options = undefined, commit_quorum = undefined, forced = false }) {
224
+ // Create keys objs per input type.
231
225
  let keys_obj = {};
232
- if (typeof keys === "string") {
226
+ if (key) {
233
227
  keys_obj = {};
234
- keys_obj[keys] = 1;
228
+ keys_obj[key] = 1;
235
229
  }
236
- else if (Array.isArray(keys)) {
230
+ else if (Array.isArray(keys) && keys.length > 0) {
237
231
  keys_obj = {};
238
232
  for (const key of keys) {
239
233
  keys_obj[key] = 1;
240
234
  }
241
235
  }
242
- else if (keys == null || typeof keys !== "object") {
243
- vlib.Scheme.throw_invalid_type("keys", keys, ["string", "string[]", "object"], true);
244
- }
245
236
  else {
246
- keys_obj = keys;
237
+ throw new Error("Define one of the following parameters: [key, keys].");
247
238
  }
248
239
  // Drop index.
249
240
  if (forced) {
@@ -775,8 +766,8 @@ class UIDCollection {
775
766
  @name: commitQuorum
776
767
  @desc: The `commitQuorum` argument for the orignal mongodb `createIndex()` function.
777
768
  */
778
- async create_index({ keys, options = null, commit_quorum = null }) {
779
- return this._col.create_index({ keys, options, commit_quorum });
769
+ async create_index(args) {
770
+ return this._col.create_index(args);
780
771
  }
781
772
  /* @docs:
782
773
  * @title: Find
@@ -1164,11 +1155,11 @@ class Database {
1164
1155
  preview: { type: "boolean", default: true },
1165
1156
  preview_ip_whitelist: { type: "array", default: [] },
1166
1157
  daemon: { type: ["object", "boolean"], default: {} },
1167
- _server: "object",
1158
+ _server: { type: ["object", "undefined"] },
1168
1159
  };
1169
1160
  uri;
1170
- preview;
1171
- preview_ip_whitelist;
1161
+ // preview: boolean;
1162
+ // preview_ip_whitelist: string[];
1172
1163
  client_opts;
1173
1164
  config;
1174
1165
  source; // Using vlib.Path type
@@ -1181,9 +1172,14 @@ class Database {
1181
1172
  proc;
1182
1173
  daemon;
1183
1174
  db;
1184
- constructor({ uri = null, source = null, config = null, start_args = [], client = null, collections = [], uid_collections = [], preview = true, preview_ip_whitelist = [], daemon = {}, _server, }) {
1175
+ // System.
1176
+ _listed_cols;
1177
+ constructor({ uri = null, source = null, config = null, start_args = [], client = null, collections = [], uid_collections = [],
1178
+ // preview = true,
1179
+ // preview_ip_whitelist = [],
1180
+ daemon = {}, _server = undefined, }) {
1185
1181
  // Checks.
1186
- if (_server.is_primary && uri == null) {
1182
+ if (!_server || (_server.is_primary && uri == null)) {
1187
1183
  ({ uri, config, start_args, config, client } = vlib.Scheme.verify({
1188
1184
  object: arguments[0],
1189
1185
  check_unknown: true,
@@ -1192,24 +1188,27 @@ class Database {
1192
1188
  }
1193
1189
  // Arguments.
1194
1190
  this.uri = uri;
1195
- this.preview = preview;
1196
- this.preview_ip_whitelist = preview_ip_whitelist;
1191
+ // this.preview = preview;
1192
+ // this.preview_ip_whitelist = preview_ip_whitelist;
1197
1193
  this.client_opts = client;
1198
1194
  this.config = config || {};
1199
- this.source = source != null ? new vlib.Path(source) : _server.source.join(".db");
1195
+ this.source = source != null ? new vlib.Path(source) : _server?.source.join(".db");
1200
1196
  this.start_args = start_args;
1201
- this._collections = collections;
1202
- this._uid_collections = uid_collections;
1197
+ this._collections = collections ?? [];
1198
+ this._uid_collections = uid_collections ?? [];
1203
1199
  this.server = _server;
1204
1200
  // Attributes.
1205
1201
  this.client = null;
1206
1202
  this.collections = {};
1207
1203
  // Initialize the service daemon.
1208
- if (this.server.daemon && daemon !== false) {
1204
+ if (this.server?.daemon && daemon !== false) {
1209
1205
  const log_source = this.server.source.join(".logs");
1210
1206
  if (!log_source.exists()) {
1211
1207
  log_source.mkdir_sync();
1212
1208
  }
1209
+ if (!this.server) {
1210
+ throw new Error("Parameter 'Database._server' must be defined for this behaviour.");
1211
+ }
1213
1212
  this.daemon = new vlib.Daemon({
1214
1213
  name: this.server.daemon.name + ".mongodb",
1215
1214
  user: daemon.user || this.server.daemon.user,
@@ -1225,9 +1224,9 @@ class Database {
1225
1224
  });
1226
1225
  }
1227
1226
  }
1228
- // Database preview.
1229
- _initialize_db_preview() {
1230
- /*
1227
+ /* Database preview.
1228
+ _initialize_db_preview(): void {
1229
+
1231
1230
  if (this.preview && this.server.production === false) {
1232
1231
  this.server.endpoint(
1233
1232
 
@@ -1752,8 +1751,7 @@ class Database {
1752
1751
  },
1753
1752
  )
1754
1753
  }
1755
- */
1756
- }
1754
+ }*/
1757
1755
  // Connect.
1758
1756
  async connect() {
1759
1757
  try {
@@ -1773,7 +1771,7 @@ class Database {
1773
1771
  if (this.config.systemLog === undefined) {
1774
1772
  this.config.systemLog = {};
1775
1773
  }
1776
- this.config.systemLog.path = this.source.join("mongod.log").str();
1774
+ this.config.systemLog.path = this.source?.join("mongod.log").str();
1777
1775
  if (this.config.systemLog.destination === undefined) {
1778
1776
  this.config.systemLog.destination = "file";
1779
1777
  }
@@ -1783,21 +1781,23 @@ class Database {
1783
1781
  if (this.config.systemLog.logRotate === undefined) {
1784
1782
  this.config.systemLog.logRotate = "reopen";
1785
1783
  }
1786
- if (this.config.systemLog.verbosity === undefined) {
1784
+ if (this.config.systemLog.verbosity === undefined && this.server) {
1787
1785
  this.config.systemLog.verbosity = this.server.production ? 0 : 1;
1788
1786
  }
1789
1787
  if (this.config.storage === undefined) {
1790
1788
  this.config.storage = {};
1791
1789
  }
1792
- const db_path = this.source.join("db");
1793
- this.config.storage.dbPath = db_path.str();
1794
- if (!db_path.exists()) {
1795
- db_path.mkdir_sync();
1796
- }
1797
- if (this.config.processManagement === undefined) {
1798
- this.config.processManagement = {};
1790
+ if (this.source) {
1791
+ const db_path = this.source.join("db");
1792
+ this.config.storage.dbPath = db_path.str();
1793
+ if (!db_path.exists()) {
1794
+ db_path.mkdir_sync();
1795
+ }
1796
+ if (this.config.processManagement === undefined) {
1797
+ this.config.processManagement = {};
1798
+ }
1799
+ this.config.processManagement.pidFilePath = this.source.join("mongod.pid").str();
1799
1800
  }
1800
- this.config.processManagement.pidFilePath = this.source.join("mongod.pid").str();
1801
1801
  if (this.config.net === undefined) {
1802
1802
  this.config.net = {};
1803
1803
  }
@@ -1808,7 +1808,7 @@ class Database {
1808
1808
  this.config.net.bindIp = "127.0.0.1";
1809
1809
  }
1810
1810
  // Mode 2: Start database.
1811
- if (this.server.is_primary && this.uri == null) {
1811
+ if (this.server?.is_primary && this.uri == null) {
1812
1812
  // Create the database.
1813
1813
  if (!this.source.exists()) {
1814
1814
  this.source.mkdir_sync();
@@ -1838,42 +1838,80 @@ class Database {
1838
1838
  });
1839
1839
  }
1840
1840
  // Assign URI.
1841
- else if (!this.server.is_primary && this.uri == null) {
1841
+ else if (this.server && !this.server.is_primary && this.uri == null) {
1842
1842
  this.uri = `mongodb://${this.config.net.bindIp}:${this.config.net.port}/main`;
1843
1843
  }
1844
1844
  // Initialize client.
1845
1845
  if (this.uri) {
1846
- this.client = new MongoClient(this.uri, this.client_opts || {});
1846
+ const opts = this.client_opts ?? {};
1847
+ opts.serverApi ??= {
1848
+ version: ServerApiVersion.v1,
1849
+ strict: true,
1850
+ deprecationErrors: true,
1851
+ };
1852
+ this.client = new MongoClient(this.uri, opts);
1847
1853
  }
1848
1854
  // Connect.
1849
1855
  await this.connect();
1856
+ // Batch.
1857
+ const multiprocessing = true;
1858
+ const promises = [];
1850
1859
  // Create collections.
1851
- this._collections.forEach((info) => {
1852
- if (this[info.name] !== undefined) {
1853
- throw Error(`Unable to initialize database collection "${info.name}", this attribute name is already used.`);
1854
- }
1855
- if (Array.isArray(info.indexes)) {
1856
- for (const index of info.indexes) {
1857
- if (index != null && typeof index === "object") {
1858
- index.forced = true;
1860
+ for (const info of this._collections) {
1861
+ const promise = new Promise(resolve => {
1862
+ if (this[info.name] !== undefined) {
1863
+ throw Error(`Unable to initialize database collection "${info.name}", this attribute name is reserved for a system value.`);
1864
+ }
1865
+ if (Array.isArray(info.indexes)) {
1866
+ for (let index = 0; index < info.indexes.length; index++) {
1867
+ let item = info.indexes[index];
1868
+ if (typeof item === "string") {
1869
+ info.indexes[index] = item = { keys: [item] };
1870
+ }
1859
1871
  }
1860
1872
  }
1873
+ this.create_collection(info).then(data => {
1874
+ this[info.name] = data;
1875
+ resolve();
1876
+ });
1877
+ });
1878
+ if (multiprocessing) {
1879
+ promises.push(promise);
1861
1880
  }
1862
- this[info.name] = this.create_collection(info);
1863
- });
1864
- this._uid_collections.forEach((info) => {
1865
- if (this[info.name] !== undefined) {
1866
- throw Error(`Unable to initialize database collection "${info.name}", this attribute name is already used.`);
1881
+ else {
1882
+ await promise;
1867
1883
  }
1868
- if (Array.isArray(info.indexes)) {
1869
- for (const index of info.indexes) {
1870
- if (index != null && typeof index === "object") {
1871
- index.forced = true;
1884
+ }
1885
+ for (const info of this._uid_collections) {
1886
+ const promise = new Promise(resolve => {
1887
+ if (this[info.name] !== undefined) {
1888
+ throw Error(`Unable to initialize database collection "${info.name}", this attribute name is reserved for a system value.`);
1889
+ }
1890
+ if (Array.isArray(info.indexes)) {
1891
+ for (let index = 0; index < info.indexes.length; index++) {
1892
+ let item = info.indexes[index];
1893
+ if (typeof item === "string") {
1894
+ info.indexes[index] = item = {
1895
+ key: item,
1896
+ };
1897
+ }
1872
1898
  }
1873
1899
  }
1900
+ this.create_uid_collection(info).then(data => {
1901
+ this[info.name] = data;
1902
+ resolve();
1903
+ });
1904
+ });
1905
+ if (multiprocessing) {
1906
+ promises.push(promise);
1874
1907
  }
1875
- this[info.name] = this.create_uid_collection(info);
1876
- });
1908
+ else {
1909
+ await promise;
1910
+ }
1911
+ }
1912
+ if (multiprocessing) {
1913
+ await Promise.all(promises);
1914
+ }
1877
1915
  }
1878
1916
  // Close.
1879
1917
  async close() {
@@ -1884,7 +1922,7 @@ class Database {
1884
1922
  * @title: Create Collection
1885
1923
  * @description: Create a database collection.
1886
1924
  */
1887
- create_collection(info) {
1925
+ async create_collection(info) {
1888
1926
  // Set name by single string argument.
1889
1927
  let name;
1890
1928
  let indexes = [];
@@ -1901,6 +1939,17 @@ class Database {
1901
1939
  if (name in this.collections) {
1902
1940
  throw Error(`Collection "${name}" is already initialized.`);
1903
1941
  }
1942
+ // Logs.
1943
+ logger.log(1, log_source, `Initializing collection "${name}".`);
1944
+ // Check if the collection exists
1945
+ if (this._listed_cols == null) {
1946
+ this._listed_cols = await this.db.listCollections().toArray();
1947
+ }
1948
+ if (!this._listed_cols.find(x => x.name === name)) {
1949
+ logger.log(0, log_source, `Creating collection "${name}".`);
1950
+ await this.db.createCollection(name);
1951
+ }
1952
+ // Create collection.
1904
1953
  const col = new Collection(name, this.db.collection(name), ttl, indexes);
1905
1954
  this.collections[name] = col;
1906
1955
  return col;
@@ -1909,7 +1958,7 @@ class Database {
1909
1958
  * @title: Create UID Based Collection
1910
1959
  * @description: Create a UID based database collection.
1911
1960
  */
1912
- create_uid_collection(info) {
1961
+ async create_uid_collection(info) {
1913
1962
  // Set name by single string argument.
1914
1963
  let name;
1915
1964
  let indexes = [];
@@ -1922,10 +1971,19 @@ class Database {
1922
1971
  indexes = info.indexes || [];
1923
1972
  ttl = info.ttl || null;
1924
1973
  }
1925
- // Check collection.
1974
+ // Check duplicate collection.
1926
1975
  if (name in this.collections) {
1927
1976
  throw Error(`Collection "${name}" is already initialized.`);
1928
1977
  }
1978
+ // Logs.
1979
+ logger.log(1, log_source, `Initializing uid collection "${name}".`);
1980
+ // Check if the collection exists
1981
+ const collections = await this.db.listCollections({ name: name }).toArray();
1982
+ if (collections.length === 0) {
1983
+ logger.log(0, log_source, `Creating uid collection "${name}".`);
1984
+ await this.db.createCollection(name);
1985
+ }
1986
+ // Collection.
1929
1987
  const col = new UIDCollection(name, this.db.collection(name), indexes, ttl);
1930
1988
  this.collections[name] = col;
1931
1989
  return col;
@@ -1,18 +1,17 @@
1
1
  import { View } from './view.js';
2
2
  import { RateLimitGroup } from "./rate_limit.js";
3
3
  import { Stream, AuthStream, Params } from "./stream.js";
4
+ import type { Server } from "./server.js";
4
5
  type EndpointCallback = ((stream: Stream, params: Params) => any) | ((stream: AuthStream, params: Params) => any);
5
- export interface EndpointOptions {
6
+ interface BaseEndpointOptions {
6
7
  method?: string;
7
8
  endpoint: string | RegExp;
8
9
  authenticated?: boolean;
9
10
  rate_limit?: string | RateLimitGroup | RateLimitGroup[] | null;
10
11
  params?: Record<string, any> | null;
11
12
  callback?: EndpointCallback;
12
- view?: View | Record<string, any> | null;
13
13
  data?: any;
14
- content_type?: string;
15
- compress?: boolean;
14
+ compress?: "auto" | boolean;
16
15
  cache?: boolean | number;
17
16
  ip_whitelist?: string[] | null;
18
17
  sitemap?: boolean | null;
@@ -21,15 +20,25 @@ export interface EndpointOptions {
21
20
  _path?: string | null;
22
21
  _is_static?: boolean;
23
22
  }
23
+ interface EndpointOptionsWithView extends Omit<BaseEndpointOptions, "content_type" | "view"> {
24
+ view: View | Record<string, any>;
25
+ content_type?: string;
26
+ }
27
+ interface EndpointOptionsWithoutView extends BaseEndpointOptions {
28
+ view?: null | undefined;
29
+ content_type: string;
30
+ }
31
+ export type EndpointOptions = EndpointOptionsWithView | EndpointOptionsWithoutView;
24
32
  declare class Endpoint {
25
33
  static rate_limits: Map<string, any>;
34
+ static compressed_content_types: string[];
26
35
  method: string;
27
36
  endpoint: string | RegExp;
28
37
  authenticated: boolean;
29
38
  params: Record<string, any> | null;
30
39
  callback?: EndpointCallback;
31
40
  data: any;
32
- content_type: string;
41
+ content_type?: string;
33
42
  compress: boolean;
34
43
  cache: boolean | number;
35
44
  sitemap: boolean | null;
@@ -46,12 +55,17 @@ declare class Endpoint {
46
55
  raw_data?: any;
47
56
  content_length?: number;
48
57
  is_image_endpoint?: boolean;
49
- constructor({ method, endpoint, authenticated, rate_limit, params, callback, view, data, content_type, compress, cache, ip_whitelist, sitemap, robots, _templates, // only used in loading static files.
50
- _path, _is_static, }: EndpointOptions);
58
+ _initialized: boolean;
59
+ _server: any;
60
+ constructor({ method, endpoint, authenticated, rate_limit, params, callback, view, data, content_type, // = "text/plain",
61
+ compress, cache, ip_whitelist, sitemap, robots, _templates, // only used in loading static files.
62
+ _path, _is_static, _server, }: EndpointOptions & {
63
+ _server: Server;
64
+ });
51
65
  _load_data_by_path(server: any): this;
52
66
  _set_headers(stream: any): void;
53
67
  _refresh(server: any): Promise<void>;
54
- _initialize(server: any): Promise<void>;
55
- _serve(stream: any, status_code?: number): Promise<void>;
68
+ _dynamic_initialize(): Promise<void>;
69
+ _serve(stream: Stream, status_code?: number): Promise<void>;
56
70
  }
57
71
  export { Endpoint };