@wxn0brp/db 0.0.5 → 0.0.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/README.md +3 -0
- package/dist/cjs/CollectionManager.d.ts +43 -0
- package/dist/cjs/CollectionManager.js +59 -0
- package/dist/cjs/action.d.ts +71 -0
- package/dist/cjs/action.js +199 -0
- package/dist/cjs/database.d.ts +77 -0
- package/dist/cjs/database.js +118 -0
- package/dist/cjs/executor.d.ts +28 -0
- package/{executor.js → dist/cjs/executor.js} +47 -54
- package/dist/cjs/file/find.d.ts +11 -0
- package/dist/cjs/file/find.js +80 -0
- package/dist/cjs/file/index.d.ts +3 -0
- package/dist/cjs/file/index.js +25 -0
- package/dist/cjs/file/remove.d.ts +7 -0
- package/dist/cjs/file/remove.js +61 -0
- package/dist/cjs/file/update.d.ts +7 -0
- package/dist/cjs/file/update.js +68 -0
- package/dist/cjs/file/utils.d.ts +8 -0
- package/dist/cjs/file/utils.js +23 -0
- package/dist/cjs/format.d.ts +18 -0
- package/dist/cjs/format.js +36 -0
- package/dist/cjs/gen.d.ts +5 -0
- package/dist/cjs/gen.js +78 -0
- package/dist/cjs/graph.d.ts +47 -0
- package/dist/cjs/graph.js +90 -0
- package/{index.d.ts → dist/cjs/index.d.ts} +2 -2
- package/dist/cjs/index.js +18 -0
- package/dist/cjs/relation.d.ts +64 -0
- package/{relation.js → dist/cjs/relation.js} +26 -45
- package/dist/cjs/remote/client/database.d.ts +71 -0
- package/dist/cjs/remote/client/database.js +145 -0
- package/dist/cjs/remote/client/function.d.ts +5 -0
- package/dist/cjs/remote/client/function.js +32 -0
- package/dist/cjs/remote/client/graph.d.ts +54 -0
- package/dist/cjs/remote/client/graph.js +93 -0
- package/dist/cjs/remote/client/remote.d.ts +16 -0
- package/dist/cjs/remote/client/remote.js +2 -0
- package/dist/cjs/remote/server/auth.d.ts +31 -0
- package/dist/cjs/remote/server/auth.js +99 -0
- package/dist/cjs/remote/server/db.d.ts +2 -0
- package/dist/cjs/remote/server/db.js +223 -0
- package/dist/cjs/remote/server/function.d.ts +2 -0
- package/dist/cjs/remote/server/function.js +89 -0
- package/dist/cjs/remote/server/graph.d.ts +2 -0
- package/dist/cjs/remote/server/graph.js +145 -0
- package/dist/cjs/remote/server/index.d.ts +1 -0
- package/dist/cjs/remote/server/index.js +66 -0
- package/dist/cjs/remote/server/initDataBases.d.ts +1 -0
- package/dist/cjs/remote/server/initDataBases.js +25 -0
- package/dist/cjs/remote/server/pathUtils.d.ts +1 -0
- package/dist/cjs/remote/server/pathUtils.js +12 -0
- package/dist/cjs/remote/server/secret.d.ts +1 -0
- package/dist/cjs/remote/server/secret.js +25 -0
- package/dist/cjs/remote/serverMgmt/index.d.ts +1 -0
- package/dist/cjs/remote/serverMgmt/index.js +87 -0
- package/dist/cjs/types/Id.d.ts +3 -0
- package/dist/cjs/types/Id.js +2 -0
- package/dist/cjs/types/arg.d.ts +6 -0
- package/dist/cjs/types/arg.js +2 -0
- package/dist/cjs/types/data.d.ts +4 -0
- package/dist/cjs/types/data.js +2 -0
- package/dist/cjs/types/options.d.ts +12 -0
- package/dist/cjs/types/options.js +2 -0
- package/dist/cjs/types/searchOpts.d.ts +61 -0
- package/dist/cjs/types/searchOpts.js +8 -0
- package/dist/cjs/types/types.d.ts +6 -0
- package/dist/cjs/types/types.js +2 -0
- package/dist/cjs/utils/hasFields.d.ts +8 -0
- package/dist/cjs/utils/hasFields.js +22 -0
- package/dist/cjs/utils/hasFieldsAdvanced.d.ts +5 -0
- package/dist/cjs/utils/hasFieldsAdvanced.js +182 -0
- package/dist/cjs/utils/updateFindObject.d.ts +11 -0
- package/dist/cjs/utils/updateFindObject.js +32 -0
- package/dist/cjs/utils/updateObject.d.ts +8 -0
- package/dist/cjs/utils/updateObject.js +18 -0
- package/dist/esm/CollectionManager.d.ts +43 -0
- package/dist/esm/CollectionManager.js +57 -0
- package/dist/esm/action.d.ts +71 -0
- package/dist/esm/action.js +194 -0
- package/dist/esm/database.d.ts +77 -0
- package/dist/esm/database.js +113 -0
- package/dist/esm/executor.d.ts +28 -0
- package/dist/esm/executor.js +45 -0
- package/dist/esm/file/find.d.ts +11 -0
- package/dist/esm/file/find.js +73 -0
- package/dist/esm/file/index.d.ts +3 -0
- package/{file → dist/esm/file}/index.js +1 -1
- package/dist/esm/file/remove.d.ts +7 -0
- package/dist/esm/file/remove.js +56 -0
- package/dist/esm/file/update.d.ts +7 -0
- package/dist/esm/file/update.js +63 -0
- package/dist/esm/file/utils.d.ts +8 -0
- package/{file → dist/esm/file}/utils.js +3 -11
- package/dist/esm/format.d.ts +18 -0
- package/{format.js → dist/esm/format.js} +29 -29
- package/dist/esm/gen.d.ts +5 -0
- package/dist/esm/gen.js +75 -0
- package/dist/esm/graph.d.ts +47 -0
- package/dist/esm/graph.js +85 -0
- package/dist/esm/index.d.ts +7 -0
- package/{index.js → dist/esm/index.js} +1 -9
- package/dist/esm/relation.d.ts +64 -0
- package/dist/esm/relation.js +65 -0
- package/dist/esm/remote/client/database.d.ts +71 -0
- package/dist/esm/remote/client/database.js +140 -0
- package/dist/esm/remote/client/function.d.ts +5 -0
- package/dist/esm/remote/client/function.js +30 -0
- package/dist/esm/remote/client/graph.d.ts +54 -0
- package/dist/esm/remote/client/graph.js +88 -0
- package/dist/esm/remote/client/remote.d.ts +16 -0
- package/dist/esm/remote/client/remote.js +1 -0
- package/dist/esm/remote/server/auth.d.ts +31 -0
- package/{remote → dist/esm/remote}/server/auth.js +31 -44
- package/dist/esm/remote/server/db.d.ts +2 -0
- package/dist/esm/remote/server/db.js +218 -0
- package/dist/esm/remote/server/function.d.ts +2 -0
- package/dist/esm/remote/server/function.js +87 -0
- package/dist/esm/remote/server/graph.d.ts +2 -0
- package/{remote → dist/esm/remote}/server/graph.js +62 -55
- package/dist/esm/remote/server/gui/css/main.css +130 -0
- package/dist/esm/remote/server/gui/css/scrool.css +81 -0
- package/dist/esm/remote/server/gui/css/style.css +61 -0
- package/dist/esm/remote/server/gui/favicon.svg +12 -0
- package/dist/esm/remote/server/gui/html/data.html +15 -0
- package/dist/esm/remote/server/gui/html/main.html +46 -0
- package/dist/esm/remote/server/gui/html/nav.html +25 -0
- package/dist/esm/remote/server/gui/html/popup.html +51 -0
- package/dist/esm/remote/server/gui/index.html +49 -0
- package/dist/esm/remote/server/gui/js/api.js +166 -0
- package/dist/esm/remote/server/gui/js/index.js +17 -0
- package/dist/esm/remote/server/gui/js/loadHTML.js +16 -0
- package/dist/esm/remote/server/gui/js/popUp.js +72 -0
- package/dist/esm/remote/server/gui/js/queryApi.js +51 -0
- package/dist/esm/remote/server/gui/js/queryDb.js +79 -0
- package/dist/esm/remote/server/gui/js/queryGraph.js +144 -0
- package/dist/esm/remote/server/gui/js/render.js +64 -0
- package/dist/esm/remote/server/gui/js/templates.js +31 -0
- package/dist/esm/remote/server/gui/js/utils.js +36 -0
- package/dist/esm/remote/server/gui/js/vars.js +9 -0
- package/dist/esm/remote/server/gui/libs/core.js +176 -0
- package/dist/esm/remote/server/gui/libs/d3.v7.min.js +2 -0
- package/dist/esm/remote/server/gui/libs/handlebars.min.js +29 -0
- package/dist/esm/remote/server/gui/libs/json5.min.js +1 -0
- package/dist/esm/remote/server/index.d.ts +1 -0
- package/dist/esm/remote/server/index.js +61 -0
- package/dist/esm/remote/server/initDataBases.d.ts +1 -0
- package/dist/esm/remote/server/initDataBases.js +20 -0
- package/dist/esm/remote/server/pathUtils.d.ts +1 -0
- package/{remote → dist/esm/remote}/server/pathUtils.js +2 -3
- package/dist/esm/remote/server/secret.d.ts +1 -0
- package/{remote → dist/esm/remote}/server/secret.js +3 -7
- package/dist/esm/remote/serverMgmt/index.d.ts +1 -0
- package/{remote → dist/esm/remote}/serverMgmt/index.js +27 -31
- package/dist/esm/types/Id.d.ts +3 -0
- package/dist/esm/types/Id.js +1 -0
- package/dist/esm/types/arg.d.ts +6 -0
- package/dist/esm/types/arg.js +1 -0
- package/dist/esm/types/data.d.ts +4 -0
- package/dist/esm/types/data.js +1 -0
- package/dist/esm/types/options.d.ts +12 -0
- package/dist/esm/types/options.js +1 -0
- package/dist/esm/types/searchOpts.d.ts +61 -0
- package/dist/esm/types/searchOpts.js +7 -0
- package/dist/esm/types/types.d.ts +6 -0
- package/dist/esm/types/types.js +1 -0
- package/dist/esm/utils/hasFields.d.ts +8 -0
- package/{utils → dist/esm/utils}/hasFields.js +4 -4
- package/dist/esm/utils/hasFieldsAdvanced.d.ts +5 -0
- package/dist/esm/utils/hasFieldsAdvanced.js +176 -0
- package/dist/esm/utils/updateFindObject.d.ts +11 -0
- package/{utils → dist/esm/utils}/updateFindObject.js +11 -16
- package/dist/esm/utils/updateObject.d.ts +8 -0
- package/{utils → dist/esm/utils}/updateObject.js +4 -4
- package/package.json +55 -36
- package/CollectionManager.js +0 -119
- package/action.js +0 -258
- package/database.d.ts +0 -44
- package/database.js +0 -203
- package/docs/database.md +0 -140
- package/docs/graph.md +0 -86
- package/docs/relation.md +0 -51
- package/docs/remote.md +0 -30
- package/docs/remote_server.md +0 -35
- package/docs/search_opts.md +0 -227
- package/file/find.js +0 -89
- package/file/remove.js +0 -74
- package/file/update.js +0 -83
- package/gen.d.ts +0 -1
- package/gen.js +0 -97
- package/graph.d.ts +0 -27
- package/graph.js +0 -140
- package/relation.d.ts +0 -23
- package/remote/client/database.d.ts +0 -41
- package/remote/client/database.js +0 -228
- package/remote/client/graph.d.ts +0 -31
- package/remote/client/graph.js +0 -148
- package/remote/server/db.js +0 -197
- package/remote/server/function.js +0 -43
- package/remote/server/index.js +0 -63
- package/remote/server/initDataBases.js +0 -20
- package/test/hasFieldsAdvanced.test.js +0 -70
- package/utils/hasFieldsAdvanced.js +0 -184
- /package/{remote → dist/cjs/remote}/server/gui/css/main.css +0 -0
- /package/{remote → dist/cjs/remote}/server/gui/css/scrool.css +0 -0
- /package/{remote → dist/cjs/remote}/server/gui/css/style.css +0 -0
- /package/{remote → dist/cjs/remote}/server/gui/favicon.svg +0 -0
- /package/{remote → dist/cjs/remote}/server/gui/html/data.html +0 -0
- /package/{remote → dist/cjs/remote}/server/gui/html/main.html +0 -0
- /package/{remote → dist/cjs/remote}/server/gui/html/nav.html +0 -0
- /package/{remote → dist/cjs/remote}/server/gui/html/popup.html +0 -0
- /package/{remote → dist/cjs/remote}/server/gui/index.html +0 -0
- /package/{remote → dist/cjs/remote}/server/gui/js/api.js +0 -0
- /package/{remote → dist/cjs/remote}/server/gui/js/index.js +0 -0
- /package/{remote → dist/cjs/remote}/server/gui/js/loadHTML.js +0 -0
- /package/{remote → dist/cjs/remote}/server/gui/js/popUp.js +0 -0
- /package/{remote → dist/cjs/remote}/server/gui/js/queryApi.js +0 -0
- /package/{remote → dist/cjs/remote}/server/gui/js/queryDb.js +0 -0
- /package/{remote → dist/cjs/remote}/server/gui/js/queryGraph.js +0 -0
- /package/{remote → dist/cjs/remote}/server/gui/js/render.js +0 -0
- /package/{remote → dist/cjs/remote}/server/gui/js/templates.js +0 -0
- /package/{remote → dist/cjs/remote}/server/gui/js/utils.js +0 -0
- /package/{remote → dist/cjs/remote}/server/gui/js/vars.js +0 -0
- /package/{remote → dist/cjs/remote}/server/gui/libs/core.js +0 -0
- /package/{remote → dist/cjs/remote}/server/gui/libs/d3.v7.min.js +0 -0
- /package/{remote → dist/cjs/remote}/server/gui/libs/handlebars.min.js +0 -0
- /package/{remote → dist/cjs/remote}/server/gui/libs/json5.min.js +0 -0
|
@@ -1,54 +1,47 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
class
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
*
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
this.isExecuting =
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
q.resolve(res)
|
|
49
|
-
}
|
|
50
|
-
this.isExecuting = false;
|
|
51
|
-
}
|
|
52
|
-
}
|
|
53
|
-
|
|
54
|
-
export default executorC;
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
/**
|
|
4
|
+
* A simple executor for queuing and executing asynchronous operations sequentially.
|
|
5
|
+
* @class
|
|
6
|
+
*/
|
|
7
|
+
class executorC {
|
|
8
|
+
quote;
|
|
9
|
+
isExecuting;
|
|
10
|
+
/**
|
|
11
|
+
* Create a new executor instance.
|
|
12
|
+
* @constructor
|
|
13
|
+
*/
|
|
14
|
+
constructor() {
|
|
15
|
+
this.quote = [];
|
|
16
|
+
this.isExecuting = false;
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* Add an asynchronous operation to the execution queue.
|
|
20
|
+
*/
|
|
21
|
+
async addOp(func, ...param) {
|
|
22
|
+
return await new Promise((resolve, reject) => {
|
|
23
|
+
this.quote.push({
|
|
24
|
+
func,
|
|
25
|
+
param,
|
|
26
|
+
resolve,
|
|
27
|
+
reject
|
|
28
|
+
});
|
|
29
|
+
this.execute();
|
|
30
|
+
});
|
|
31
|
+
}
|
|
32
|
+
/**
|
|
33
|
+
* Execute the queued asynchronous operations sequentially.
|
|
34
|
+
*/
|
|
35
|
+
async execute() {
|
|
36
|
+
if (this.isExecuting)
|
|
37
|
+
return;
|
|
38
|
+
this.isExecuting = true;
|
|
39
|
+
while (this.quote.length > 0) {
|
|
40
|
+
let q = this.quote.shift();
|
|
41
|
+
let res = await q.func(...q.param);
|
|
42
|
+
q.resolve(res);
|
|
43
|
+
}
|
|
44
|
+
this.isExecuting = false;
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
exports.default = executorC;
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { ArgOrFunc } from "../types/arg.js";
|
|
2
|
+
import { Context } from "../types/types.js";
|
|
3
|
+
import { FindOpts } from "../types/options.js";
|
|
4
|
+
/**
|
|
5
|
+
* Asynchronously finds entries in a file based on search criteria.
|
|
6
|
+
*/
|
|
7
|
+
export declare function find(file: string, arg: ArgOrFunc, context?: Context, findOpts?: FindOpts): Promise<unknown>;
|
|
8
|
+
/**
|
|
9
|
+
* Asynchronously finds one entry in a file based on search criteria.
|
|
10
|
+
*/
|
|
11
|
+
export declare function findOne(file: string, arg: ArgOrFunc, context?: Context, findOpts?: FindOpts): Promise<unknown>;
|
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.find = find;
|
|
7
|
+
exports.findOne = findOne;
|
|
8
|
+
const fs_1 = require("fs");
|
|
9
|
+
const utils_js_1 = require("./utils.js");
|
|
10
|
+
const format_js_1 = require("../format.js");
|
|
11
|
+
const hasFieldsAdvanced_js_1 = __importDefault(require("../utils/hasFieldsAdvanced.js"));
|
|
12
|
+
const updateFindObject_js_1 = __importDefault(require("../utils/updateFindObject.js"));
|
|
13
|
+
/**
|
|
14
|
+
* Processes a line of text from a file and checks if it matches the search criteria.
|
|
15
|
+
*/
|
|
16
|
+
async function findProcesLine(arg, line, context = {}, findOpts = {}) {
|
|
17
|
+
const ob = (0, format_js_1.parse)(line);
|
|
18
|
+
let res = false;
|
|
19
|
+
if (typeof arg === "function") {
|
|
20
|
+
if (arg(ob, context))
|
|
21
|
+
res = true;
|
|
22
|
+
}
|
|
23
|
+
else if (typeof arg === "object" && !Array.isArray(arg)) {
|
|
24
|
+
if ((0, hasFieldsAdvanced_js_1.default)(ob, arg))
|
|
25
|
+
res = true;
|
|
26
|
+
}
|
|
27
|
+
if (res)
|
|
28
|
+
return (0, updateFindObject_js_1.default)(ob, findOpts);
|
|
29
|
+
return null;
|
|
30
|
+
}
|
|
31
|
+
/**
|
|
32
|
+
* Asynchronously finds entries in a file based on search criteria.
|
|
33
|
+
*/
|
|
34
|
+
async function find(file, arg, context = {}, findOpts = {}) {
|
|
35
|
+
file = (0, utils_js_1.pathRepair)(file);
|
|
36
|
+
return await new Promise(async (resolve) => {
|
|
37
|
+
if (!(0, fs_1.existsSync)(file)) {
|
|
38
|
+
await fs_1.promises.writeFile(file, "");
|
|
39
|
+
resolve(false);
|
|
40
|
+
return;
|
|
41
|
+
}
|
|
42
|
+
const rl = (0, utils_js_1.createRL)(file);
|
|
43
|
+
const resF = [];
|
|
44
|
+
for await (const line of rl) {
|
|
45
|
+
if (line == "" || !line)
|
|
46
|
+
continue;
|
|
47
|
+
const res = await findProcesLine(arg, line, context, findOpts);
|
|
48
|
+
if (res)
|
|
49
|
+
resF.push(res);
|
|
50
|
+
}
|
|
51
|
+
;
|
|
52
|
+
resolve(resF);
|
|
53
|
+
rl.close();
|
|
54
|
+
});
|
|
55
|
+
}
|
|
56
|
+
/**
|
|
57
|
+
* Asynchronously finds one entry in a file based on search criteria.
|
|
58
|
+
*/
|
|
59
|
+
async function findOne(file, arg, context = {}, findOpts = {}) {
|
|
60
|
+
file = (0, utils_js_1.pathRepair)(file);
|
|
61
|
+
return await new Promise(async (resolve) => {
|
|
62
|
+
if (!(0, fs_1.existsSync)(file)) {
|
|
63
|
+
await fs_1.promises.writeFile(file, "");
|
|
64
|
+
resolve(false);
|
|
65
|
+
return;
|
|
66
|
+
}
|
|
67
|
+
const rl = (0, utils_js_1.createRL)(file);
|
|
68
|
+
for await (const line of rl) {
|
|
69
|
+
if (line == "" || !line)
|
|
70
|
+
continue;
|
|
71
|
+
const res = await findProcesLine(arg, line, context, findOpts);
|
|
72
|
+
if (res) {
|
|
73
|
+
resolve(res);
|
|
74
|
+
rl.close();
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
;
|
|
78
|
+
resolve(false);
|
|
79
|
+
});
|
|
80
|
+
}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
14
|
+
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
15
|
+
};
|
|
16
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
17
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
18
|
+
};
|
|
19
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
20
|
+
exports.remove = exports.update = void 0;
|
|
21
|
+
var update_js_1 = require("./update.js");
|
|
22
|
+
Object.defineProperty(exports, "update", { enumerable: true, get: function () { return __importDefault(update_js_1).default; } });
|
|
23
|
+
var remove_js_1 = require("./remove.js");
|
|
24
|
+
Object.defineProperty(exports, "remove", { enumerable: true, get: function () { return __importDefault(remove_js_1).default; } });
|
|
25
|
+
__exportStar(require("./find.js"), exports);
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import { ArgOrFunc } from "../types/arg.js";
|
|
2
|
+
import { Context } from "../types/types.js";
|
|
3
|
+
/**
|
|
4
|
+
* Asynchronously removes entries from a file based on search criteria.
|
|
5
|
+
*/
|
|
6
|
+
declare function remove(cpath: string, arg: ArgOrFunc, context?: Context, one?: boolean): Promise<boolean>;
|
|
7
|
+
export default remove;
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
const fs_1 = require("fs");
|
|
7
|
+
const utils_js_1 = require("./utils.js");
|
|
8
|
+
const format_js_1 = require("../format.js");
|
|
9
|
+
const hasFieldsAdvanced_js_1 = __importDefault(require("../utils/hasFieldsAdvanced.js"));
|
|
10
|
+
/**
|
|
11
|
+
* Removes entries from a file based on search criteria.
|
|
12
|
+
*/
|
|
13
|
+
async function removeWorker(file, search, context = {}, one = false) {
|
|
14
|
+
file = (0, utils_js_1.pathRepair)(file);
|
|
15
|
+
if (!(0, fs_1.existsSync)(file)) {
|
|
16
|
+
await fs_1.promises.writeFile(file, "");
|
|
17
|
+
return false;
|
|
18
|
+
}
|
|
19
|
+
await fs_1.promises.copyFile(file, file + ".tmp");
|
|
20
|
+
await fs_1.promises.writeFile(file, "");
|
|
21
|
+
const rl = (0, utils_js_1.createRL)(file + ".tmp");
|
|
22
|
+
let removed = false;
|
|
23
|
+
for await (let line of rl) {
|
|
24
|
+
if (one && removed) {
|
|
25
|
+
(0, fs_1.appendFileSync)(file, line + "\n");
|
|
26
|
+
continue;
|
|
27
|
+
}
|
|
28
|
+
const data = (0, format_js_1.parse)(line);
|
|
29
|
+
if (typeof search === "function") {
|
|
30
|
+
if (search(data, context)) {
|
|
31
|
+
removed = true;
|
|
32
|
+
continue;
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
else if (typeof search === "object" && !Array.isArray(search)) {
|
|
36
|
+
if ((0, hasFieldsAdvanced_js_1.default)(data, search)) {
|
|
37
|
+
removed = true;
|
|
38
|
+
continue;
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
(0, fs_1.appendFileSync)(file, line + "\n");
|
|
42
|
+
}
|
|
43
|
+
await fs_1.promises.writeFile(file + ".tmp", "");
|
|
44
|
+
return removed;
|
|
45
|
+
}
|
|
46
|
+
/**
|
|
47
|
+
* Asynchronously removes entries from a file based on search criteria.
|
|
48
|
+
*/
|
|
49
|
+
async function remove(cpath, arg, context = {}, one = false) {
|
|
50
|
+
let files = (0, fs_1.readdirSync)(cpath).filter(file => !/\.tmp$/.test(file));
|
|
51
|
+
files.reverse();
|
|
52
|
+
let remove = false;
|
|
53
|
+
for (const file of files) {
|
|
54
|
+
const removed = await removeWorker(cpath + file, arg, context, one);
|
|
55
|
+
if (one && removed)
|
|
56
|
+
break;
|
|
57
|
+
remove = remove || removed;
|
|
58
|
+
}
|
|
59
|
+
return remove;
|
|
60
|
+
}
|
|
61
|
+
exports.default = remove;
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import { Context } from "../types/types.js";
|
|
2
|
+
import { ArgOrFunc } from "../types/arg.js";
|
|
3
|
+
/**
|
|
4
|
+
* Asynchronously updates entries in a file based on search criteria and an updater function or object.
|
|
5
|
+
*/
|
|
6
|
+
declare function update(cpath: string, arg: ArgOrFunc, obj: ArgOrFunc, context?: Context, one?: boolean): Promise<boolean>;
|
|
7
|
+
export default update;
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
const fs_1 = require("fs");
|
|
7
|
+
const utils_js_1 = require("./utils.js");
|
|
8
|
+
const format_js_1 = require("../format.js");
|
|
9
|
+
const hasFieldsAdvanced_js_1 = __importDefault(require("../utils/hasFieldsAdvanced.js"));
|
|
10
|
+
const updateObject_js_1 = __importDefault(require("../utils/updateObject.js"));
|
|
11
|
+
/**
|
|
12
|
+
* Updates a file based on search criteria and an updater function or object.
|
|
13
|
+
*/
|
|
14
|
+
async function updateWorker(file, search, updater, context = {}, one = false) {
|
|
15
|
+
file = (0, utils_js_1.pathRepair)(file);
|
|
16
|
+
if (!(0, fs_1.existsSync)(file)) {
|
|
17
|
+
await fs_1.promises.writeFile(file, "");
|
|
18
|
+
return false;
|
|
19
|
+
}
|
|
20
|
+
await fs_1.promises.copyFile(file, file + ".tmp");
|
|
21
|
+
await fs_1.promises.writeFile(file, "");
|
|
22
|
+
const rl = (0, utils_js_1.createRL)(file + ".tmp");
|
|
23
|
+
let updated = false;
|
|
24
|
+
for await (let line of rl) {
|
|
25
|
+
if (one && updated) {
|
|
26
|
+
(0, fs_1.appendFileSync)(file, line + "\n");
|
|
27
|
+
continue;
|
|
28
|
+
}
|
|
29
|
+
const data = (0, format_js_1.parse)(line);
|
|
30
|
+
let ob = false;
|
|
31
|
+
if (typeof search === "function") {
|
|
32
|
+
ob = search(data, context) || false;
|
|
33
|
+
}
|
|
34
|
+
else if (typeof search === "object" && !Array.isArray(search)) {
|
|
35
|
+
ob = (0, hasFieldsAdvanced_js_1.default)(data, search);
|
|
36
|
+
}
|
|
37
|
+
if (ob) {
|
|
38
|
+
let updateObj;
|
|
39
|
+
if (typeof updater === "function") {
|
|
40
|
+
updateObj = updater(data, context);
|
|
41
|
+
}
|
|
42
|
+
else if (typeof updater === "object" && !Array.isArray(updater)) {
|
|
43
|
+
updateObj = (0, updateObject_js_1.default)(data, updater);
|
|
44
|
+
}
|
|
45
|
+
line = await (0, format_js_1.stringify)(updateObj);
|
|
46
|
+
updated = true;
|
|
47
|
+
}
|
|
48
|
+
(0, fs_1.appendFileSync)(file, line + "\n");
|
|
49
|
+
}
|
|
50
|
+
await fs_1.promises.writeFile(file + ".tmp", "");
|
|
51
|
+
return updated;
|
|
52
|
+
}
|
|
53
|
+
/**
|
|
54
|
+
* Asynchronously updates entries in a file based on search criteria and an updater function or object.
|
|
55
|
+
*/
|
|
56
|
+
async function update(cpath, arg, obj, context = {}, one = false) {
|
|
57
|
+
let files = (0, fs_1.readdirSync)(cpath).filter(file => !/\.tmp$/.test(file));
|
|
58
|
+
files.reverse();
|
|
59
|
+
let update = false;
|
|
60
|
+
for (const file of files) {
|
|
61
|
+
const updated = await updateWorker(cpath + file, arg, obj, context, one);
|
|
62
|
+
if (one && updated)
|
|
63
|
+
return true;
|
|
64
|
+
update = update || updated;
|
|
65
|
+
}
|
|
66
|
+
return update;
|
|
67
|
+
}
|
|
68
|
+
exports.default = update;
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Repairs a file path by replacing double slashes
|
|
3
|
+
*/
|
|
4
|
+
export declare function pathRepair(path: string): string;
|
|
5
|
+
/**
|
|
6
|
+
* Creates a Readline interface for reading large files with a specified high water mark.
|
|
7
|
+
*/
|
|
8
|
+
export declare function createRL(file: string): import("readline").Interface;
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.pathRepair = pathRepair;
|
|
4
|
+
exports.createRL = createRL;
|
|
5
|
+
const fs_1 = require("fs");
|
|
6
|
+
const readline_1 = require("readline");
|
|
7
|
+
/**
|
|
8
|
+
* Repairs a file path by replacing double slashes
|
|
9
|
+
*/
|
|
10
|
+
function pathRepair(path) {
|
|
11
|
+
return path.replaceAll("//", "/");
|
|
12
|
+
}
|
|
13
|
+
/**
|
|
14
|
+
* Creates a Readline interface for reading large files with a specified high water mark.
|
|
15
|
+
*/
|
|
16
|
+
function createRL(file) {
|
|
17
|
+
const read_stream = (0, fs_1.createReadStream)(file, { highWaterMark: 10 * 1024 * 1024 }); //10MB
|
|
18
|
+
const rl = (0, readline_1.createInterface)({
|
|
19
|
+
input: read_stream,
|
|
20
|
+
crlfDelay: Infinity
|
|
21
|
+
});
|
|
22
|
+
return rl;
|
|
23
|
+
}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Parses given string into a JSON object. If the string does not start with
|
|
3
|
+
* a {, it is wrapped in one. This allows for a shorthand when
|
|
4
|
+
* storing/reading data from a file.
|
|
5
|
+
*
|
|
6
|
+
* @param {string} data
|
|
7
|
+
* @returns {Object}
|
|
8
|
+
*/
|
|
9
|
+
export declare function parse(data: any): any;
|
|
10
|
+
/**
|
|
11
|
+
* Converts given object to a string. If the string is a valid json5, it is
|
|
12
|
+
* returned as is. If it is a valid json5 wrapped in {}, the curly brackets
|
|
13
|
+
* are removed. Otherwise the string is wrapped in {}.
|
|
14
|
+
*
|
|
15
|
+
* @param {Object} data
|
|
16
|
+
* @return {String}
|
|
17
|
+
*/
|
|
18
|
+
export declare function stringify(data: any): any;
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.parse = parse;
|
|
7
|
+
exports.stringify = stringify;
|
|
8
|
+
const json5_1 = __importDefault(require("json5"));
|
|
9
|
+
/**
|
|
10
|
+
* Parses given string into a JSON object. If the string does not start with
|
|
11
|
+
* a {, it is wrapped in one. This allows for a shorthand when
|
|
12
|
+
* storing/reading data from a file.
|
|
13
|
+
*
|
|
14
|
+
* @param {string} data
|
|
15
|
+
* @returns {Object}
|
|
16
|
+
*/
|
|
17
|
+
function parse(data) {
|
|
18
|
+
if (!data.startsWith("{"))
|
|
19
|
+
data = "{" + data + "}";
|
|
20
|
+
return json5_1.default.parse(data);
|
|
21
|
+
}
|
|
22
|
+
/**
|
|
23
|
+
* Converts given object to a string. If the string is a valid json5, it is
|
|
24
|
+
* returned as is. If it is a valid json5 wrapped in {}, the curly brackets
|
|
25
|
+
* are removed. Otherwise the string is wrapped in {}.
|
|
26
|
+
*
|
|
27
|
+
* @param {Object} data
|
|
28
|
+
* @return {String}
|
|
29
|
+
*/
|
|
30
|
+
function stringify(data) {
|
|
31
|
+
data = json5_1.default.stringify(data);
|
|
32
|
+
if (data.startsWith("{")) {
|
|
33
|
+
data = data.slice(1, -1);
|
|
34
|
+
}
|
|
35
|
+
return data;
|
|
36
|
+
}
|
package/dist/cjs/gen.js
ADDED
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.default = genId;
|
|
4
|
+
const usedIdsMap = new Map();
|
|
5
|
+
/**
|
|
6
|
+
* Generates a unique identifier based on specified parts.
|
|
7
|
+
*/
|
|
8
|
+
function genId(parts = null, fill = 1) {
|
|
9
|
+
parts = changeInputToPartsArray(parts, fill);
|
|
10
|
+
const time = getTime();
|
|
11
|
+
const id = getUniqueRandom(time, parts);
|
|
12
|
+
return id;
|
|
13
|
+
}
|
|
14
|
+
/**
|
|
15
|
+
* Generates a unique random identifier based on time and parts.
|
|
16
|
+
* @param time - The current time in a base36 string format.
|
|
17
|
+
* @param parts - An array of parts to be used for generating the identifier.
|
|
18
|
+
* @param s - Recursion counter for handling collision (default: 0).
|
|
19
|
+
* @returns {string} The unique random identifier.
|
|
20
|
+
*/
|
|
21
|
+
function getUniqueRandom(time, partsA, s = 0) {
|
|
22
|
+
const parts = partsA.map(l => getRandom(l));
|
|
23
|
+
const id = [time, ...parts].join("-");
|
|
24
|
+
if (usedIdsMap.has(id)) {
|
|
25
|
+
s++;
|
|
26
|
+
if (s < 25)
|
|
27
|
+
return getUniqueRandom(time, partsA, s);
|
|
28
|
+
partsA = addOneToPods(partsA);
|
|
29
|
+
time = getTime();
|
|
30
|
+
return getUniqueRandom(time, partsA);
|
|
31
|
+
}
|
|
32
|
+
usedIdsMap.set(id, Date.now() + 2000);
|
|
33
|
+
usedIdsMap.forEach((value, key) => {
|
|
34
|
+
if (value < Date.now())
|
|
35
|
+
usedIdsMap.delete(key);
|
|
36
|
+
});
|
|
37
|
+
return id;
|
|
38
|
+
}
|
|
39
|
+
/**
|
|
40
|
+
* Generates a random string of base36 characters.
|
|
41
|
+
*/
|
|
42
|
+
function getRandom(unix) {
|
|
43
|
+
return (Math.floor(Math.random() * Math.pow(36, unix))).toString(36);
|
|
44
|
+
}
|
|
45
|
+
/**
|
|
46
|
+
* Gets the current time in a base36 string format.
|
|
47
|
+
*/
|
|
48
|
+
function getTime() {
|
|
49
|
+
return Math.floor(new Date().getTime() / 1000).toString(36);
|
|
50
|
+
}
|
|
51
|
+
/**
|
|
52
|
+
* Adds one to each part of the input array.
|
|
53
|
+
*/
|
|
54
|
+
function addOneToPods(array) {
|
|
55
|
+
const sum = array.reduce((acc, current) => acc + current, 0);
|
|
56
|
+
const num = sum + 1;
|
|
57
|
+
const len = array.length;
|
|
58
|
+
const result = [];
|
|
59
|
+
const quotient = Math.floor(num / len);
|
|
60
|
+
const remainder = num % len;
|
|
61
|
+
for (let i = 0; i < len; i++) {
|
|
62
|
+
if (i < remainder)
|
|
63
|
+
result.push(quotient + 1);
|
|
64
|
+
else
|
|
65
|
+
result.push(quotient);
|
|
66
|
+
}
|
|
67
|
+
return result;
|
|
68
|
+
}
|
|
69
|
+
/**
|
|
70
|
+
* Converts input to an array of parts.
|
|
71
|
+
*/
|
|
72
|
+
function changeInputToPartsArray(parts = null, fill = 1) {
|
|
73
|
+
if (Array.isArray(parts))
|
|
74
|
+
return parts;
|
|
75
|
+
if (typeof parts == "number")
|
|
76
|
+
return Array(parts).fill(fill);
|
|
77
|
+
return [1, 1];
|
|
78
|
+
}
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
import DataBase from "./database.js";
|
|
2
|
+
import Data from "./types/data.js";
|
|
3
|
+
/**
|
|
4
|
+
* A class representing a graph database.
|
|
5
|
+
* @class
|
|
6
|
+
*/
|
|
7
|
+
declare class Graph {
|
|
8
|
+
db: DataBase;
|
|
9
|
+
constructor(databaseFolder: string);
|
|
10
|
+
/**
|
|
11
|
+
* Adds an edge between two nodes.
|
|
12
|
+
*/
|
|
13
|
+
add(collection: string, nodeA: string, nodeB: string): Promise<Data>;
|
|
14
|
+
/**
|
|
15
|
+
* Removes an edge between two nodes.
|
|
16
|
+
*/
|
|
17
|
+
remove(collection: string, nodeA: string, nodeB: string): Promise<boolean>;
|
|
18
|
+
/**
|
|
19
|
+
* Finds all edges with either node equal to `node`.
|
|
20
|
+
*/
|
|
21
|
+
find(collection: string, node: string): Promise<Data[]>;
|
|
22
|
+
/**
|
|
23
|
+
* Finds one edge with either node equal to `nodeA` and the other equal to `nodeB`.
|
|
24
|
+
*/
|
|
25
|
+
findOne(collection: any, nodeA: any, nodeB: any): Promise<Data>;
|
|
26
|
+
/**
|
|
27
|
+
* Gets all edges in the database.
|
|
28
|
+
*/
|
|
29
|
+
getAll(collection: any): Promise<Data[]>;
|
|
30
|
+
/**
|
|
31
|
+
* Get the names of all available databases.
|
|
32
|
+
*/
|
|
33
|
+
getCollections(): Promise<string[]>;
|
|
34
|
+
/**
|
|
35
|
+
* Check and create the specified collection if it doesn't exist.
|
|
36
|
+
*/
|
|
37
|
+
checkCollection(collection: any): Promise<void>;
|
|
38
|
+
/**
|
|
39
|
+
* Check if a collection exists.
|
|
40
|
+
*/
|
|
41
|
+
issetCollection(collection: any): Promise<boolean>;
|
|
42
|
+
/**
|
|
43
|
+
* Removes a database collection from the file system.
|
|
44
|
+
*/
|
|
45
|
+
removeCollection(collection: any): void;
|
|
46
|
+
}
|
|
47
|
+
export default Graph;
|