@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
@@ -1,5 +1,18 @@
1
1
  import { ChildProcess } from "child_process";
2
2
  import { MongoClient, Collection as MongoCollection } from 'mongodb';
3
+ import { vlib } from "./vinc.js";
4
+ interface BaseOptions {
5
+ options?: Record<string, any>;
6
+ commit_quorum?: any;
7
+ forced?: boolean;
8
+ }
9
+ type IndexOptions = (BaseOptions & {
10
+ key: string;
11
+ keys?: never;
12
+ }) | (BaseOptions & {
13
+ key?: never;
14
+ keys: string[];
15
+ });
3
16
  declare class Collection {
4
17
  static chunk_size: number;
5
18
  static constructor_scheme: {
@@ -47,21 +60,13 @@ declare class Collection {
47
60
  uid_based: boolean;
48
61
  ttl: number | null;
49
62
  ttl_enabled: boolean;
50
- constructor(name: string, collection: MongoCollection, ttl?: number | null, indexes?: Array<{
51
- keys: string[] | string | Record<string, any>;
52
- options?: Record<string, any>;
53
- commit_quorum?: any;
54
- forced?: boolean;
55
- }>, uid_based?: boolean);
63
+ constructor(name: string, collection: MongoCollection, ttl?: number | null, // ttl in msec
64
+ indexes?: IndexOptions[], uid_based?: boolean);
56
65
  private _process_doc;
57
66
  private _load_chunked;
58
67
  private _save_chunked;
59
- create_index({ keys, options, commit_quorum, forced }: {
60
- keys: string[] | string | Record<string, any>;
61
- options?: Record<string, any> | null;
62
- commit_quorum?: any;
63
- forced?: boolean;
64
- }): Promise<string>;
68
+ create_index({ key, keys, // following the IndexOptions "key" or "keys" must be defined in typescript but not in raw js.
69
+ options, commit_quorum, forced }: IndexOptions): Promise<string>;
65
70
  find(query: Record<string, any>): Promise<any>;
66
71
  exists(path: string | Record<string, any>): Promise<boolean>;
67
72
  load(path: string | Record<string, any>, opts?: {
@@ -101,16 +106,8 @@ declare class Collection {
101
106
  declare class UIDCollection {
102
107
  private _col;
103
108
  col: MongoCollection;
104
- constructor(name: string, collection: MongoCollection, indexes?: Array<{
105
- keys: string[] | string | Record<string, any>;
106
- options?: Record<string, any>;
107
- commit_quorum?: any;
108
- }>, ttl?: number | null);
109
- create_index({ keys, options, commit_quorum }: {
110
- keys: string[] | string | Record<string, any>;
111
- options?: Record<string, any> | null;
112
- commit_quorum?: any;
113
- }): Promise<string>;
109
+ constructor(name: string, collection: MongoCollection, indexes?: IndexOptions[], ttl?: number | null);
110
+ create_index(args: IndexOptions): Promise<string>;
114
111
  find(uid?: string | null, query?: Record<string, any>): Promise<any>;
115
112
  exists(uid: string, path: string | Record<string, any>): Promise<boolean>;
116
113
  load(uid: string, path: string | Record<string, any>, opts?: {
@@ -275,90 +272,66 @@ declare class Database {
275
272
  type: string[];
276
273
  default: {};
277
274
  };
278
- _server: string;
275
+ _server: {
276
+ type: string[];
277
+ };
279
278
  };
280
279
  uri: string | null;
281
- preview: boolean;
282
- preview_ip_whitelist: string[];
283
280
  client_opts: Record<string, any> | null;
284
281
  config: Record<string, any>;
285
- source: any;
282
+ source: vlib.Path | undefined;
286
283
  start_args: string[];
287
- _collections: Array<{
284
+ _collections: {
288
285
  name: string;
289
286
  ttl?: number | null;
290
- indexes?: Array<{
291
- keys: string[] | string | Record<string, any>;
292
- options?: Record<string, any>;
293
- commit_quorum?: any;
294
- }>;
295
- }>;
296
- _uid_collections: Array<{
287
+ indexes?: string[] | IndexOptions[];
288
+ }[];
289
+ _uid_collections: {
297
290
  name: string;
298
291
  ttl?: number | null;
299
- indexes?: Array<{
300
- keys: string[] | string | Record<string, any>;
301
- options?: Record<string, any>;
302
- commit_quorum?: any;
303
- }>;
304
- }>;
292
+ indexes?: string[] | IndexOptions[];
293
+ }[];
305
294
  server: any;
306
295
  client: MongoClient | null;
307
296
  collections: Record<string, Collection | UIDCollection>;
308
297
  proc?: ChildProcess;
309
298
  daemon?: any;
310
299
  db?: any;
311
- constructor({ uri, source, config, start_args, client, collections, uid_collections, preview, preview_ip_whitelist, daemon, _server, }: {
300
+ _listed_cols: any;
301
+ constructor({ uri, source, config, start_args, client, collections, uid_collections, daemon, _server, }: {
312
302
  uri?: string | null;
313
303
  source?: string | null;
314
304
  config?: Record<string, any> | null;
315
305
  start_args?: string[];
316
306
  client?: Record<string, any> | null;
317
- collections?: Array<{
307
+ collections?: {
318
308
  name: string;
319
309
  ttl?: number | null;
320
- indexes?: Array<{
321
- keys: string[] | string | Record<string, any>;
322
- options?: Record<string, any>;
323
- commit_quorum?: any;
324
- }>;
325
- }>;
326
- uid_collections?: Array<{
310
+ indexes?: string[] | IndexOptions[];
311
+ }[];
312
+ uid_collections?: {
327
313
  name: string;
328
314
  ttl?: number | null;
329
- indexes?: Array<{
330
- keys: string[] | string | Record<string, any>;
331
- options?: Record<string, any>;
332
- commit_quorum?: any;
333
- }>;
334
- }>;
315
+ indexes?: string[] | IndexOptions[];
316
+ }[];
335
317
  preview?: boolean;
336
318
  preview_ip_whitelist?: string[];
337
319
  daemon?: Record<string, any> | boolean;
338
320
  _server: any;
339
321
  });
340
- _initialize_db_preview(): void;
341
322
  connect(): Promise<void>;
342
323
  initialize(): Promise<void>;
343
324
  close(): Promise<void>;
344
325
  create_collection(info: {
345
326
  name: string;
346
- indexes?: Array<{
347
- keys: string[] | string | Record<string, any>;
348
- options?: Record<string, any>;
349
- commit_quorum?: any;
350
- }>;
327
+ indexes?: IndexOptions[];
351
328
  ttl?: number | null;
352
- } | string): Collection;
329
+ } | string): Promise<Collection>;
353
330
  create_uid_collection(info: {
354
331
  name: string;
355
- indexes?: Array<{
356
- keys: string[] | string | Record<string, any>;
357
- options?: Record<string, any>;
358
- commit_quorum?: any;
359
- }>;
332
+ indexes?: IndexOptions[];
360
333
  ttl?: number | null;
361
- } | string): UIDCollection;
334
+ } | string): Promise<UIDCollection>;
362
335
  get_collections(): Promise<string[]>;
363
336
  }
364
337
  export { Collection, UIDCollection, Database };
@@ -34,7 +34,7 @@ class Collection {
34
34
  static constructor_scheme = {
35
35
  name: "string",
36
36
  uid_based: "boolean",
37
- ttl: { type: "number", default: null },
37
+ ttl: { type: "number", default: null }, // ttl in msec
38
38
  indexes: {
39
39
  type: "array",
40
40
  default: [],
@@ -43,7 +43,7 @@ class Collection {
43
43
  scheme: {
44
44
  key: { type: "string", required: (data) => data.key == null && data.keys == null },
45
45
  keys: {
46
- type: ["string", "array"],
46
+ type: ["array"],
47
47
  required: (data) => data.key == null && data.keys == null, value_scheme: "string",
48
48
  postprocess: (keys) => typeof keys === "string" ? [keys] : keys,
49
49
  },
@@ -54,11 +54,6 @@ class Collection {
54
54
  postprocess: (info) => {
55
55
  if (typeof info === "string")
56
56
  return { keys: [info] };
57
- if (typeof info === "object" && info.key) {
58
- info.keys = info.key;
59
- delete info.key;
60
- return info;
61
- }
62
57
  return info;
63
58
  },
64
59
  },
@@ -68,9 +63,10 @@ class Collection {
68
63
  col;
69
64
  name;
70
65
  uid_based;
71
- ttl;
66
+ ttl; // ttl in msec
72
67
  ttl_enabled;
73
- constructor(name, collection, ttl = null, indexes = [], uid_based = false) {
68
+ constructor(name, collection, ttl = null, // ttl in msec
69
+ indexes = [], uid_based = false) {
74
70
  // Verify scheme.
75
71
  ({ indexes, ttl } = _vinc_1.vlib.Scheme.verify({
76
72
  object: {
@@ -99,7 +95,8 @@ class Collection {
99
95
  if (this.ttl_enabled) {
100
96
  this.col.dropIndex("_ttl_timestamp_1")
101
97
  .catch(err => {
102
- if (err.codeName !== 'IndexNotFound') {
98
+ if (err.codeName !== 'IndexNotFound' && err.codeName !== 'NamespaceNotFound') {
99
+ err.stack = new Error(err.message).stack;
103
100
  throw err;
104
101
  }
105
102
  })
@@ -109,13 +106,8 @@ class Collection {
109
106
  }
110
107
  // Create indexes.
111
108
  if (Array.isArray(indexes) && indexes.length > 0) {
112
- for (const index of indexes) {
113
- this.create_index({
114
- keys: index.keys,
115
- options: index.options,
116
- commit_quorum: index.commit_quorum,
117
- forced: index.forced,
118
- });
109
+ for (let item of indexes) {
110
+ this.create_index(item);
119
111
  }
120
112
  }
121
113
  }
@@ -230,23 +222,22 @@ class Collection {
230
222
  @name: commitQuorum
231
223
  @desc: The `commitQuorum` argument for the orignal mongodb `createIndex()` function.
232
224
  */
233
- async create_index({ keys, options = null, commit_quorum = null, forced = false }) {
225
+ async create_index({ key = undefined, keys = undefined, // following the IndexOptions "key" or "keys" must be defined in typescript but not in raw js.
226
+ options = undefined, commit_quorum = undefined, forced = false }) {
227
+ // Create keys objs per input type.
234
228
  let keys_obj = {};
235
- if (typeof keys === "string") {
229
+ if (key) {
236
230
  keys_obj = {};
237
- keys_obj[keys] = 1;
231
+ keys_obj[key] = 1;
238
232
  }
239
- else if (Array.isArray(keys)) {
233
+ else if (Array.isArray(keys) && keys.length > 0) {
240
234
  keys_obj = {};
241
235
  for (const key of keys) {
242
236
  keys_obj[key] = 1;
243
237
  }
244
238
  }
245
- else if (keys == null || typeof keys !== "object") {
246
- _vinc_1.vlib.Scheme.throw_invalid_type("keys", keys, ["string", "string[]", "object"], true);
247
- }
248
239
  else {
249
- keys_obj = keys;
240
+ throw new Error("Define one of the following parameters: [key, keys].");
250
241
  }
251
242
  // Drop index.
252
243
  if (forced) {
@@ -779,8 +770,8 @@ class UIDCollection {
779
770
  @name: commitQuorum
780
771
  @desc: The `commitQuorum` argument for the orignal mongodb `createIndex()` function.
781
772
  */
782
- async create_index({ keys, options = null, commit_quorum = null }) {
783
- return this._col.create_index({ keys, options, commit_quorum });
773
+ async create_index(args) {
774
+ return this._col.create_index(args);
784
775
  }
785
776
  /* @docs:
786
777
  * @title: Find
@@ -1169,11 +1160,11 @@ class Database {
1169
1160
  preview: { type: "boolean", default: true },
1170
1161
  preview_ip_whitelist: { type: "array", default: [] },
1171
1162
  daemon: { type: ["object", "boolean"], default: {} },
1172
- _server: "object",
1163
+ _server: { type: ["object", "undefined"] },
1173
1164
  };
1174
1165
  uri;
1175
- preview;
1176
- preview_ip_whitelist;
1166
+ // preview: boolean;
1167
+ // preview_ip_whitelist: string[];
1177
1168
  client_opts;
1178
1169
  config;
1179
1170
  source; // Using vlib.Path type
@@ -1186,9 +1177,14 @@ class Database {
1186
1177
  proc;
1187
1178
  daemon;
1188
1179
  db;
1189
- constructor({ uri = null, source = null, config = null, start_args = [], client = null, collections = [], uid_collections = [], preview = true, preview_ip_whitelist = [], daemon = {}, _server, }) {
1180
+ // System.
1181
+ _listed_cols;
1182
+ constructor({ uri = null, source = null, config = null, start_args = [], client = null, collections = [], uid_collections = [],
1183
+ // preview = true,
1184
+ // preview_ip_whitelist = [],
1185
+ daemon = {}, _server = undefined, }) {
1190
1186
  // Checks.
1191
- if (_server.is_primary && uri == null) {
1187
+ if (!_server || (_server.is_primary && uri == null)) {
1192
1188
  ({ uri, config, start_args, config, client } = _vinc_1.vlib.Scheme.verify({
1193
1189
  object: arguments[0],
1194
1190
  check_unknown: true,
@@ -1197,24 +1193,27 @@ class Database {
1197
1193
  }
1198
1194
  // Arguments.
1199
1195
  this.uri = uri;
1200
- this.preview = preview;
1201
- this.preview_ip_whitelist = preview_ip_whitelist;
1196
+ // this.preview = preview;
1197
+ // this.preview_ip_whitelist = preview_ip_whitelist;
1202
1198
  this.client_opts = client;
1203
1199
  this.config = config || {};
1204
- this.source = source != null ? new _vinc_1.vlib.Path(source) : _server.source.join(".db");
1200
+ this.source = source != null ? new _vinc_1.vlib.Path(source) : _server?.source.join(".db");
1205
1201
  this.start_args = start_args;
1206
- this._collections = collections;
1207
- this._uid_collections = uid_collections;
1202
+ this._collections = collections ?? [];
1203
+ this._uid_collections = uid_collections ?? [];
1208
1204
  this.server = _server;
1209
1205
  // Attributes.
1210
1206
  this.client = null;
1211
1207
  this.collections = {};
1212
1208
  // Initialize the service daemon.
1213
- if (this.server.daemon && daemon !== false) {
1209
+ if (this.server?.daemon && daemon !== false) {
1214
1210
  const log_source = this.server.source.join(".logs");
1215
1211
  if (!log_source.exists()) {
1216
1212
  log_source.mkdir_sync();
1217
1213
  }
1214
+ if (!this.server) {
1215
+ throw new Error("Parameter 'Database._server' must be defined for this behaviour.");
1216
+ }
1218
1217
  this.daemon = new _vinc_1.vlib.Daemon({
1219
1218
  name: this.server.daemon.name + ".mongodb",
1220
1219
  user: daemon.user || this.server.daemon.user,
@@ -1230,9 +1229,9 @@ class Database {
1230
1229
  });
1231
1230
  }
1232
1231
  }
1233
- // Database preview.
1234
- _initialize_db_preview() {
1235
- /*
1232
+ /* Database preview.
1233
+ _initialize_db_preview(): void {
1234
+
1236
1235
  if (this.preview && this.server.production === false) {
1237
1236
  this.server.endpoint(
1238
1237
 
@@ -1757,8 +1756,7 @@ class Database {
1757
1756
  },
1758
1757
  )
1759
1758
  }
1760
- */
1761
- }
1759
+ }*/
1762
1760
  // Connect.
1763
1761
  async connect() {
1764
1762
  try {
@@ -1778,7 +1776,7 @@ class Database {
1778
1776
  if (this.config.systemLog === undefined) {
1779
1777
  this.config.systemLog = {};
1780
1778
  }
1781
- this.config.systemLog.path = this.source.join("mongod.log").str();
1779
+ this.config.systemLog.path = this.source?.join("mongod.log").str();
1782
1780
  if (this.config.systemLog.destination === undefined) {
1783
1781
  this.config.systemLog.destination = "file";
1784
1782
  }
@@ -1788,21 +1786,23 @@ class Database {
1788
1786
  if (this.config.systemLog.logRotate === undefined) {
1789
1787
  this.config.systemLog.logRotate = "reopen";
1790
1788
  }
1791
- if (this.config.systemLog.verbosity === undefined) {
1789
+ if (this.config.systemLog.verbosity === undefined && this.server) {
1792
1790
  this.config.systemLog.verbosity = this.server.production ? 0 : 1;
1793
1791
  }
1794
1792
  if (this.config.storage === undefined) {
1795
1793
  this.config.storage = {};
1796
1794
  }
1797
- const db_path = this.source.join("db");
1798
- this.config.storage.dbPath = db_path.str();
1799
- if (!db_path.exists()) {
1800
- db_path.mkdir_sync();
1801
- }
1802
- if (this.config.processManagement === undefined) {
1803
- this.config.processManagement = {};
1795
+ if (this.source) {
1796
+ const db_path = this.source.join("db");
1797
+ this.config.storage.dbPath = db_path.str();
1798
+ if (!db_path.exists()) {
1799
+ db_path.mkdir_sync();
1800
+ }
1801
+ if (this.config.processManagement === undefined) {
1802
+ this.config.processManagement = {};
1803
+ }
1804
+ this.config.processManagement.pidFilePath = this.source.join("mongod.pid").str();
1804
1805
  }
1805
- this.config.processManagement.pidFilePath = this.source.join("mongod.pid").str();
1806
1806
  if (this.config.net === undefined) {
1807
1807
  this.config.net = {};
1808
1808
  }
@@ -1813,7 +1813,7 @@ class Database {
1813
1813
  this.config.net.bindIp = "127.0.0.1";
1814
1814
  }
1815
1815
  // Mode 2: Start database.
1816
- if (this.server.is_primary && this.uri == null) {
1816
+ if (this.server?.is_primary && this.uri == null) {
1817
1817
  // Create the database.
1818
1818
  if (!this.source.exists()) {
1819
1819
  this.source.mkdir_sync();
@@ -1843,42 +1843,80 @@ class Database {
1843
1843
  });
1844
1844
  }
1845
1845
  // Assign URI.
1846
- else if (!this.server.is_primary && this.uri == null) {
1846
+ else if (this.server && !this.server.is_primary && this.uri == null) {
1847
1847
  this.uri = `mongodb://${this.config.net.bindIp}:${this.config.net.port}/main`;
1848
1848
  }
1849
1849
  // Initialize client.
1850
1850
  if (this.uri) {
1851
- this.client = new mongodb_1.MongoClient(this.uri, this.client_opts || {});
1851
+ const opts = this.client_opts ?? {};
1852
+ opts.serverApi ??= {
1853
+ version: mongodb_1.ServerApiVersion.v1,
1854
+ strict: true,
1855
+ deprecationErrors: true,
1856
+ };
1857
+ this.client = new mongodb_1.MongoClient(this.uri, opts);
1852
1858
  }
1853
1859
  // Connect.
1854
1860
  await this.connect();
1861
+ // Batch.
1862
+ const multiprocessing = true;
1863
+ const promises = [];
1855
1864
  // Create collections.
1856
- this._collections.forEach((info) => {
1857
- if (this[info.name] !== undefined) {
1858
- throw Error(`Unable to initialize database collection "${info.name}", this attribute name is already used.`);
1859
- }
1860
- if (Array.isArray(info.indexes)) {
1861
- for (const index of info.indexes) {
1862
- if (index != null && typeof index === "object") {
1863
- index.forced = true;
1865
+ for (const info of this._collections) {
1866
+ const promise = new Promise(resolve => {
1867
+ if (this[info.name] !== undefined) {
1868
+ throw Error(`Unable to initialize database collection "${info.name}", this attribute name is reserved for a system value.`);
1869
+ }
1870
+ if (Array.isArray(info.indexes)) {
1871
+ for (let index = 0; index < info.indexes.length; index++) {
1872
+ let item = info.indexes[index];
1873
+ if (typeof item === "string") {
1874
+ info.indexes[index] = item = { keys: [item] };
1875
+ }
1864
1876
  }
1865
1877
  }
1878
+ this.create_collection(info).then(data => {
1879
+ this[info.name] = data;
1880
+ resolve();
1881
+ });
1882
+ });
1883
+ if (multiprocessing) {
1884
+ promises.push(promise);
1866
1885
  }
1867
- this[info.name] = this.create_collection(info);
1868
- });
1869
- this._uid_collections.forEach((info) => {
1870
- if (this[info.name] !== undefined) {
1871
- throw Error(`Unable to initialize database collection "${info.name}", this attribute name is already used.`);
1886
+ else {
1887
+ await promise;
1872
1888
  }
1873
- if (Array.isArray(info.indexes)) {
1874
- for (const index of info.indexes) {
1875
- if (index != null && typeof index === "object") {
1876
- index.forced = true;
1889
+ }
1890
+ for (const info of this._uid_collections) {
1891
+ const promise = new Promise(resolve => {
1892
+ if (this[info.name] !== undefined) {
1893
+ throw Error(`Unable to initialize database collection "${info.name}", this attribute name is reserved for a system value.`);
1894
+ }
1895
+ if (Array.isArray(info.indexes)) {
1896
+ for (let index = 0; index < info.indexes.length; index++) {
1897
+ let item = info.indexes[index];
1898
+ if (typeof item === "string") {
1899
+ info.indexes[index] = item = {
1900
+ key: item,
1901
+ };
1902
+ }
1877
1903
  }
1878
1904
  }
1905
+ this.create_uid_collection(info).then(data => {
1906
+ this[info.name] = data;
1907
+ resolve();
1908
+ });
1909
+ });
1910
+ if (multiprocessing) {
1911
+ promises.push(promise);
1879
1912
  }
1880
- this[info.name] = this.create_uid_collection(info);
1881
- });
1913
+ else {
1914
+ await promise;
1915
+ }
1916
+ }
1917
+ if (multiprocessing) {
1918
+ await Promise.all(promises);
1919
+ }
1882
1920
  }
1883
1921
  // Close.
1884
1922
  async close() {
@@ -1889,7 +1927,7 @@ class Database {
1889
1927
  * @title: Create Collection
1890
1928
  * @description: Create a database collection.
1891
1929
  */
1892
- create_collection(info) {
1930
+ async create_collection(info) {
1893
1931
  // Set name by single string argument.
1894
1932
  let name;
1895
1933
  let indexes = [];
@@ -1906,6 +1944,17 @@ class Database {
1906
1944
  if (name in this.collections) {
1907
1945
  throw Error(`Collection "${name}" is already initialized.`);
1908
1946
  }
1947
+ // Logs.
1948
+ logger_js_1.logger.log(1, log_source, `Initializing collection "${name}".`);
1949
+ // Check if the collection exists
1950
+ if (this._listed_cols == null) {
1951
+ this._listed_cols = await this.db.listCollections().toArray();
1952
+ }
1953
+ if (!this._listed_cols.find(x => x.name === name)) {
1954
+ logger_js_1.logger.log(0, log_source, `Creating collection "${name}".`);
1955
+ await this.db.createCollection(name);
1956
+ }
1957
+ // Create collection.
1909
1958
  const col = new Collection(name, this.db.collection(name), ttl, indexes);
1910
1959
  this.collections[name] = col;
1911
1960
  return col;
@@ -1914,7 +1963,7 @@ class Database {
1914
1963
  * @title: Create UID Based Collection
1915
1964
  * @description: Create a UID based database collection.
1916
1965
  */
1917
- create_uid_collection(info) {
1966
+ async create_uid_collection(info) {
1918
1967
  // Set name by single string argument.
1919
1968
  let name;
1920
1969
  let indexes = [];
@@ -1927,10 +1976,19 @@ class Database {
1927
1976
  indexes = info.indexes || [];
1928
1977
  ttl = info.ttl || null;
1929
1978
  }
1930
- // Check collection.
1979
+ // Check duplicate collection.
1931
1980
  if (name in this.collections) {
1932
1981
  throw Error(`Collection "${name}" is already initialized.`);
1933
1982
  }
1983
+ // Logs.
1984
+ logger_js_1.logger.log(1, log_source, `Initializing uid collection "${name}".`);
1985
+ // Check if the collection exists
1986
+ const collections = await this.db.listCollections({ name: name }).toArray();
1987
+ if (collections.length === 0) {
1988
+ logger_js_1.logger.log(0, log_source, `Creating uid collection "${name}".`);
1989
+ await this.db.createCollection(name);
1990
+ }
1991
+ // Collection.
1934
1992
  const col = new UIDCollection(name, this.db.collection(name), indexes, ttl);
1935
1993
  this.collections[name] = col;
1936
1994
  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 };