@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.
- package/backend/dist/cjs/database.d.ts +41 -68
- package/backend/dist/cjs/database.js +136 -78
- package/backend/dist/cjs/endpoint.d.ts +23 -9
- package/backend/dist/cjs/endpoint.js +98 -21
- package/backend/dist/cjs/file_watcher.js +2 -2
- package/backend/dist/cjs/frontend.d.ts +0 -2
- package/backend/dist/cjs/frontend.js +9 -9
- package/backend/dist/cjs/image_endpoint.d.ts +3 -1
- package/backend/dist/cjs/image_endpoint.js +2 -1
- package/backend/dist/cjs/payments/paddle.js +10 -2
- package/backend/dist/cjs/plugins/css.d.ts +6 -5
- package/backend/dist/cjs/plugins/css.js +32 -7
- package/backend/dist/cjs/plugins/ts/compiler.d.ts +6 -1
- package/backend/dist/cjs/plugins/ts/compiler.js +26 -2
- package/backend/dist/cjs/plugins/ts/preprocessing.js +5 -3
- package/backend/dist/cjs/server.d.ts +7 -13
- package/backend/dist/cjs/server.js +184 -303
- package/backend/dist/cjs/status.d.ts +1 -0
- package/backend/dist/cjs/status.js +2 -1
- package/backend/dist/cjs/stream.d.ts +5 -3
- package/backend/dist/cjs/stream.js +13 -4
- package/backend/dist/cjs/users.d.ts +1 -1
- package/backend/dist/cjs/users.js +87 -72
- package/backend/dist/cjs/utils.d.ts +17 -9
- package/backend/dist/cjs/utils.js +22 -64
- package/backend/dist/cjs/view.d.ts +2 -2
- package/backend/dist/cjs/view.js +38 -40
- package/backend/dist/cjs/volt.d.ts +3 -2
- package/backend/dist/cjs/volt.js +2 -2
- package/backend/dist/css/volt.css +5 -0
- package/backend/dist/esm/database.d.ts +41 -68
- package/backend/dist/esm/database.js +137 -79
- package/backend/dist/esm/endpoint.d.ts +23 -9
- package/backend/dist/esm/endpoint.js +99 -22
- package/backend/dist/esm/file_watcher.js +2 -2
- package/backend/dist/esm/frontend.d.ts +0 -2
- package/backend/dist/esm/frontend.js +9 -9
- package/backend/dist/esm/image_endpoint.d.ts +3 -1
- package/backend/dist/esm/image_endpoint.js +2 -1
- package/backend/dist/esm/payments/paddle.js +11 -3
- package/backend/dist/esm/plugins/css.d.ts +6 -5
- package/backend/dist/esm/plugins/css.js +32 -6
- package/backend/dist/esm/plugins/ts/compiler.d.ts +6 -1
- package/backend/dist/esm/plugins/ts/compiler.js +26 -2
- package/backend/dist/esm/plugins/ts/preprocessing.js +5 -3
- package/backend/dist/esm/server.d.ts +7 -13
- package/backend/dist/esm/server.js +182 -301
- package/backend/dist/esm/status.d.ts +1 -0
- package/backend/dist/esm/status.js +1 -0
- package/backend/dist/esm/stream.d.ts +5 -3
- package/backend/dist/esm/stream.js +13 -4
- package/backend/dist/esm/users.d.ts +1 -1
- package/backend/dist/esm/users.js +87 -72
- package/backend/dist/esm/utils.d.ts +17 -9
- package/backend/dist/esm/utils.js +21 -62
- package/backend/dist/esm/view.d.ts +2 -2
- package/backend/dist/esm/view.js +38 -40
- package/backend/dist/esm/volt.d.ts +3 -2
- package/backend/dist/esm/volt.js +2 -1
- package/backend/dist/esm-dev/blacklist.js +1 -1
- package/backend/dist/esm-dev/cli.js +2 -2
- package/backend/dist/esm-dev/database.d.ts +41 -68
- package/backend/dist/esm-dev/database.js +138 -80
- package/backend/dist/esm-dev/endpoint.d.ts +23 -9
- package/backend/dist/esm-dev/endpoint.js +100 -23
- package/backend/dist/esm-dev/file_watcher.js +3 -3
- package/backend/dist/esm-dev/frontend.d.ts +0 -2
- package/backend/dist/esm-dev/frontend.js +9 -9
- package/backend/dist/esm-dev/image_endpoint.d.ts +3 -1
- package/backend/dist/esm-dev/image_endpoint.js +2 -1
- package/backend/dist/esm-dev/logger.js +1 -1
- package/backend/dist/esm-dev/payments/paddle.js +12 -4
- package/backend/dist/esm-dev/plugins/css.d.ts +6 -5
- package/backend/dist/esm-dev/plugins/css.js +33 -7
- package/backend/dist/esm-dev/plugins/ts/compiler.d.ts +6 -1
- package/backend/dist/esm-dev/plugins/ts/compiler.js +27 -3
- package/backend/dist/esm-dev/plugins/ts/preprocessing.js +7 -5
- package/backend/dist/esm-dev/rate_limit.js +1 -1
- package/backend/dist/esm-dev/server.d.ts +7 -13
- package/backend/dist/esm-dev/server.js +184 -303
- package/backend/dist/esm-dev/status.d.ts +1 -0
- package/backend/dist/esm-dev/status.js +1 -0
- package/backend/dist/esm-dev/stream.d.ts +5 -3
- package/backend/dist/esm-dev/stream.js +13 -4
- package/backend/dist/esm-dev/users.d.ts +1 -1
- package/backend/dist/esm-dev/users.js +88 -73
- package/backend/dist/esm-dev/utils.d.ts +17 -9
- package/backend/dist/esm-dev/utils.js +22 -63
- package/backend/dist/esm-dev/view.d.ts +2 -2
- package/backend/dist/esm-dev/view.js +39 -41
- package/backend/dist/esm-dev/volt.d.ts +3 -2
- package/backend/dist/esm-dev/volt.js +2 -1
- package/backend/src/database.ts +173 -155
- package/backend/src/endpoint.ts +123 -31
- package/backend/src/file_watcher.ts +2 -2
- package/backend/src/frontend.ts +9 -8
- package/backend/src/image_endpoint.ts +4 -0
- package/backend/src/payments/paddle.ts +11 -3
- package/backend/src/plugins/css.ts +36 -8
- package/backend/src/plugins/ts/compiler.ts +37 -1
- package/backend/src/plugins/ts/preprocessing.ts +5 -3
- package/backend/src/server.ts +167 -306
- package/backend/src/status.ts +1 -0
- package/backend/src/stream.ts +28 -8
- package/backend/src/users.ts +87 -72
- package/backend/src/utils.ts +58 -25
- package/backend/src/view.ts +30 -28
- package/backend/src/{volt.js → volt.ts} +2 -1
- package/backend/tsconfig.cjs.json +3 -3
- package/backend/tsconfig.esm.json +3 -3
- package/frontend/dist/elements/base.d.ts +414 -432
- package/frontend/dist/elements/base.js +566 -329
- package/frontend/dist/elements/module.d.ts +26 -12
- package/frontend/dist/elements/module.js +69 -32
- package/frontend/dist/elements/register_element.d.ts +3 -0
- package/frontend/dist/elements/register_element.js +22 -0
- package/frontend/dist/modules/auth.d.ts +1 -0
- package/frontend/dist/modules/auth.js +6 -5
- package/frontend/dist/modules/color.d.ts +159 -0
- package/frontend/dist/modules/color.js +315 -0
- package/frontend/dist/modules/colors.d.ts +1 -26
- package/frontend/dist/modules/colors.js +417 -340
- package/frontend/dist/modules/cookies.d.ts +1 -0
- package/frontend/dist/modules/cookies.js +1 -0
- package/frontend/dist/modules/events.d.ts +1 -0
- package/frontend/dist/modules/events.js +1 -0
- package/frontend/dist/modules/google.d.ts +1 -0
- package/frontend/dist/modules/google.js +1 -0
- package/frontend/dist/modules/meta.d.ts +1 -0
- package/frontend/dist/modules/meta.js +1 -0
- package/frontend/dist/modules/mutex.d.ts +1 -2
- package/frontend/dist/modules/mutex.js +3 -4
- package/frontend/dist/modules/paddle.d.ts +1 -0
- package/frontend/dist/modules/paddle.js +14 -13
- package/frontend/dist/modules/scheme.d.ts +1 -0
- package/frontend/dist/modules/scheme.js +5 -3
- package/frontend/dist/modules/statics.d.ts +1 -0
- package/frontend/dist/modules/statics.js +1 -0
- package/frontend/dist/modules/support.d.ts +1 -0
- package/frontend/dist/modules/support.js +3 -2
- package/frontend/dist/modules/theme.d.ts +56 -0
- package/frontend/dist/{ui → modules}/theme.js +186 -75
- package/frontend/dist/modules/themes.d.ts +1 -1
- package/frontend/dist/modules/themes.js +1 -0
- package/frontend/dist/modules/user.d.ts +1 -0
- package/frontend/dist/modules/user.js +11 -10
- package/frontend/dist/modules/utils.d.ts +23 -2
- package/frontend/dist/modules/utils.js +93 -1
- package/frontend/dist/types/gradient.js +4 -0
- package/frontend/dist/ui/border_button.d.ts +0 -25
- package/frontend/dist/ui/border_button.js +50 -51
- package/frontend/dist/ui/button.d.ts +0 -21
- package/frontend/dist/ui/button.js +41 -46
- package/frontend/dist/ui/canvas.js +15 -15
- package/frontend/dist/ui/checkbox.d.ts +3 -17
- package/frontend/dist/ui/checkbox.js +36 -30
- package/frontend/dist/ui/code.d.ts +15 -82
- package/frontend/dist/ui/code.js +150 -125
- package/frontend/dist/ui/color.d.ts +0 -1
- package/frontend/dist/ui/color.js +1 -1
- package/frontend/dist/ui/context_menu.d.ts +4 -2
- package/frontend/dist/ui/context_menu.js +16 -17
- package/frontend/dist/ui/css.js +2 -0
- package/frontend/dist/ui/divider.d.ts +0 -7
- package/frontend/dist/ui/divider.js +21 -25
- package/frontend/dist/ui/dropdown.d.ts +13 -7
- package/frontend/dist/ui/dropdown.js +65 -30
- package/frontend/dist/ui/for_each.d.ts +0 -5
- package/frontend/dist/ui/for_each.js +17 -22
- package/frontend/dist/ui/form.d.ts +17 -12
- package/frontend/dist/ui/form.js +21 -18
- package/frontend/dist/ui/frame_modes.d.ts +9 -12
- package/frontend/dist/ui/frame_modes.js +8 -10
- package/frontend/dist/ui/google_map.d.ts +0 -11
- package/frontend/dist/ui/google_map.js +23 -28
- package/frontend/dist/ui/gradient.d.ts +0 -5
- package/frontend/dist/ui/gradient.js +17 -22
- package/frontend/dist/ui/image.d.ts +27 -58
- package/frontend/dist/ui/image.js +99 -93
- package/frontend/dist/ui/input.d.ts +20 -97
- package/frontend/dist/ui/input.js +192 -170
- package/frontend/dist/ui/link.d.ts +0 -18
- package/frontend/dist/ui/link.js +42 -48
- package/frontend/dist/ui/list.js +36 -37
- package/frontend/dist/ui/loader_button.d.ts +4 -19
- package/frontend/dist/ui/loader_button.js +35 -37
- package/frontend/dist/ui/loaders.d.ts +0 -8
- package/frontend/dist/ui/loaders.js +20 -25
- package/frontend/dist/ui/popup.d.ts +11 -8
- package/frontend/dist/ui/popup.js +183 -24
- package/frontend/dist/ui/pseudo.d.ts +3 -3
- package/frontend/dist/ui/pseudo.js +14 -17
- package/frontend/dist/ui/scroller.d.ts +10 -48
- package/frontend/dist/ui/scroller.js +306 -300
- package/frontend/dist/ui/slider.d.ts +9 -3
- package/frontend/dist/ui/slider.js +31 -17
- package/frontend/dist/ui/spacer.d.ts +0 -9
- package/frontend/dist/ui/spacer.js +21 -26
- package/frontend/dist/ui/span.js +13 -15
- package/frontend/dist/ui/stack.d.ts +14 -75
- package/frontend/dist/ui/stack.js +166 -169
- package/frontend/dist/ui/steps.d.ts +10 -23
- package/frontend/dist/ui/steps.js +47 -34
- package/frontend/dist/ui/style.d.ts +4 -3
- package/frontend/dist/ui/style.js +13 -18
- package/frontend/dist/ui/switch.d.ts +10 -4
- package/frontend/dist/ui/switch.js +24 -16
- package/frontend/dist/ui/table.d.ts +0 -23
- package/frontend/dist/ui/table.js +113 -119
- package/frontend/dist/ui/tabs.d.ts +3 -19
- package/frontend/dist/ui/tabs.js +35 -29
- package/frontend/dist/ui/text.d.ts +0 -8
- package/frontend/dist/ui/text.js +20 -25
- package/frontend/dist/ui/title.d.ts +0 -15
- package/frontend/dist/ui/title.js +39 -45
- package/frontend/dist/ui/ui.d.ts +0 -2
- package/frontend/dist/ui/ui.js +0 -2
- package/frontend/dist/ui/view.d.ts +3 -17
- package/frontend/dist/ui/view.js +27 -32
- package/frontend/dist/volt.d.ts +2 -1
- package/frontend/dist/volt.js +3 -1
- package/frontend/examples/dashboard/dashboard.ts +774 -0
- package/frontend/examples/theme/theme.ts +58 -0
- package/frontend/src/css/volt.css +5 -0
- package/frontend/src/elements/base.ts +767 -545
- package/frontend/src/elements/module.ts +90 -29
- package/frontend/src/elements/register_element.ts +24 -0
- package/frontend/src/modules/auth.ts +7 -6
- package/frontend/src/modules/color.ts +348 -0
- package/frontend/src/modules/colors.ts +468 -449
- package/frontend/src/modules/cookies.ts +1 -0
- package/frontend/src/modules/events.ts +1 -0
- package/frontend/src/modules/google.ts +1 -0
- package/frontend/src/modules/meta.ts +2 -1
- package/frontend/src/modules/mutex.ts +2 -4
- package/frontend/src/modules/paddle.ts +21 -20
- package/frontend/src/modules/scheme.ts +5 -4
- package/frontend/src/modules/statics.ts +2 -1
- package/frontend/src/modules/support.ts +3 -2
- package/frontend/src/modules/theme.ts +413 -0
- package/frontend/src/modules/themes.ts +2 -1
- package/frontend/src/modules/user.ts +12 -11
- package/frontend/src/modules/utils.ts +125 -2
- package/frontend/src/ui/border_button.ts +41 -37
- package/frontend/src/ui/button.ts +33 -32
- package/frontend/src/ui/canvas.ts +5 -2
- package/frontend/src/ui/checkbox.ts +21 -22
- package/frontend/src/ui/code.ts +92 -86
- package/frontend/src/ui/context_menu.ts +7 -5
- package/frontend/src/ui/css.ts +1 -1
- package/frontend/src/ui/divider.ts +15 -10
- package/frontend/src/ui/dropdown.ts +38 -21
- package/frontend/src/ui/for_each.ts +9 -8
- package/frontend/src/ui/form.ts +26 -21
- package/frontend/src/ui/frame_modes.ts +13 -17
- package/frontend/src/ui/google_map.ts +15 -13
- package/frontend/src/ui/gradient.ts +9 -8
- package/frontend/src/ui/image.ts +108 -86
- package/frontend/src/ui/input.ts +145 -144
- package/frontend/src/ui/link.ts +25 -23
- package/frontend/src/ui/list.ts +12 -6
- package/frontend/src/ui/loader_button.ts +26 -25
- package/frontend/src/ui/loaders.ts +12 -11
- package/frontend/src/ui/popup.ts +168 -14
- package/frontend/src/ui/pseudo.ts +5 -3
- package/frontend/src/ui/scroller.ts +303 -294
- package/frontend/src/ui/slider.ts +15 -10
- package/frontend/src/ui/spacer.ts +14 -11
- package/frontend/src/ui/span.ts +6 -2
- package/frontend/src/ui/stack.ts +196 -183
- package/frontend/src/ui/steps.ts +38 -22
- package/frontend/src/ui/style.ts +7 -4
- package/frontend/src/ui/switch.ts +16 -11
- package/frontend/src/ui/table.ts +42 -34
- package/frontend/src/ui/tabs.ts +20 -19
- package/frontend/src/ui/text.ts +12 -11
- package/frontend/src/ui/title.ts +22 -20
- package/frontend/src/ui/ui.ts +0 -2
- package/frontend/src/ui/view.ts +20 -19
- package/frontend/src/volt.ts +3 -1
- package/frontend/{compile.js → tools/compile.old.js} +2 -2
- package/frontend/tools/embed_scripts.js +69 -0
- package/frontend/tsconfig.json +26 -0
- package/package.json +7 -6
- package/frontend/dist/ui/theme.d.ts +0 -25
- package/frontend/exports.json +0 -1340
- package/frontend/src/modules/date.js +0 -535
- package/frontend/src/ui/color.ts +0 -117
- package/frontend/src/ui/theme.ts +0 -279
- /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 "
|
|
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: ["
|
|
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,
|
|
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 (
|
|
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({
|
|
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 (
|
|
226
|
+
if (key) {
|
|
233
227
|
keys_obj = {};
|
|
234
|
-
keys_obj[
|
|
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
|
-
|
|
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(
|
|
779
|
-
return this._col.create_index(
|
|
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
|
-
|
|
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
|
|
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
|
|
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
|
-
|
|
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
|
|
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
|
-
|
|
1793
|
-
|
|
1794
|
-
|
|
1795
|
-
db_path.
|
|
1796
|
-
|
|
1797
|
-
|
|
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
|
|
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
|
-
|
|
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
|
|
1852
|
-
|
|
1853
|
-
|
|
1854
|
-
|
|
1855
|
-
|
|
1856
|
-
|
|
1857
|
-
|
|
1858
|
-
|
|
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
|
-
|
|
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
|
-
|
|
1869
|
-
|
|
1870
|
-
|
|
1871
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
|
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
|
-
|
|
50
|
-
|
|
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
|
-
|
|
55
|
-
_serve(stream:
|
|
68
|
+
_dynamic_initialize(): Promise<void>;
|
|
69
|
+
_serve(stream: Stream, status_code?: number): Promise<void>;
|
|
56
70
|
}
|
|
57
71
|
export { Endpoint };
|