@wxn0brp/vql 0.1.0

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 (81) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +95 -0
  3. package/dist/apiAbstract.d.ts +17 -0
  4. package/dist/apiAbstract.js +25 -0
  5. package/dist/apiAbstract.js.map +1 -0
  6. package/dist/config.d.ts +7 -0
  7. package/dist/config.js +8 -0
  8. package/dist/config.js.map +1 -0
  9. package/dist/cpu/relation.d.ts +3 -0
  10. package/dist/cpu/relation.js +38 -0
  11. package/dist/cpu/relation.js.map +1 -0
  12. package/dist/cpu/request.d.ts +3 -0
  13. package/dist/cpu/request.js +66 -0
  14. package/dist/cpu/request.js.map +1 -0
  15. package/dist/cpu/string/index.d.ts +8 -0
  16. package/dist/cpu/string/index.js +55 -0
  17. package/dist/cpu/string/index.js.map +1 -0
  18. package/dist/cpu/string/json5.d.ts +2 -0
  19. package/dist/cpu/string/json5.js +9 -0
  20. package/dist/cpu/string/json5.js.map +1 -0
  21. package/dist/cpu/string/middle.d.ts +3 -0
  22. package/dist/cpu/string/middle.js +42 -0
  23. package/dist/cpu/string/middle.js.map +1 -0
  24. package/dist/cpu/string/simple.d.ts +2 -0
  25. package/dist/cpu/string/simple.js +152 -0
  26. package/dist/cpu/string/simple.js.map +1 -0
  27. package/dist/cpu/string/utils.d.ts +17 -0
  28. package/dist/cpu/string/utils.js +70 -0
  29. package/dist/cpu/string/utils.js.map +1 -0
  30. package/dist/cpu/string/yaml.d.ts +2 -0
  31. package/dist/cpu/string/yaml.js +20 -0
  32. package/dist/cpu/string/yaml.js.map +1 -0
  33. package/dist/cpu/utils.d.ts +1 -0
  34. package/dist/cpu/utils.js +15 -0
  35. package/dist/cpu/utils.js.map +1 -0
  36. package/dist/index.d.ts +6 -0
  37. package/dist/index.js +7 -0
  38. package/dist/index.js.map +1 -0
  39. package/dist/logger.d.ts +4 -0
  40. package/dist/logger.js +14 -0
  41. package/dist/logger.js.map +1 -0
  42. package/dist/permissions/index.d.ts +2 -0
  43. package/dist/permissions/index.js +3 -0
  44. package/dist/permissions/index.js.map +1 -0
  45. package/dist/permissions/relation.d.ts +3 -0
  46. package/dist/permissions/relation.js +53 -0
  47. package/dist/permissions/relation.js.map +1 -0
  48. package/dist/permissions/request.d.ts +18 -0
  49. package/dist/permissions/request.js +130 -0
  50. package/dist/permissions/request.js.map +1 -0
  51. package/dist/permissions/utils.d.ts +5 -0
  52. package/dist/permissions/utils.js +23 -0
  53. package/dist/permissions/utils.js.map +1 -0
  54. package/dist/processor.d.ts +11 -0
  55. package/dist/processor.js +44 -0
  56. package/dist/processor.js.map +1 -0
  57. package/dist/sheet/index.d.ts +2 -0
  58. package/dist/sheet/index.js +65 -0
  59. package/dist/sheet/index.js.map +1 -0
  60. package/dist/sheet/load.d.ts +3 -0
  61. package/dist/sheet/load.js +23 -0
  62. package/dist/sheet/load.js.map +1 -0
  63. package/dist/tests/customExe.d.ts +6 -0
  64. package/dist/tests/customExe.js +27 -0
  65. package/dist/tests/customExe.js.map +1 -0
  66. package/dist/tests/db.d.ts +1 -0
  67. package/dist/tests/db.js +33 -0
  68. package/dist/tests/db.js.map +1 -0
  69. package/dist/tests/index.d.ts +1 -0
  70. package/dist/tests/index.js +104 -0
  71. package/dist/tests/index.js.map +1 -0
  72. package/dist/types/perm.d.ts +7 -0
  73. package/dist/types/perm.js +9 -0
  74. package/dist/types/perm.js.map +1 -0
  75. package/dist/types/vql.d.ts +118 -0
  76. package/dist/types/vql.js +2 -0
  77. package/dist/types/vql.js.map +1 -0
  78. package/dist/valid.d.ts +17 -0
  79. package/dist/valid.js +51 -0
  80. package/dist/valid.js.map +1 -0
  81. package/package.json +33 -0
package/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2025 wxn0brP
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
package/README.md ADDED
@@ -0,0 +1,95 @@
1
+ # VQL (Valthera Query Language)
2
+
3
+ VQL is a query language and processing framework designed for managing and interacting with databases using ValtheraDB. It provides a robust permission system, query execution, and a GUI for managing ACL rules and database structures.
4
+
5
+ ## Features
6
+
7
+ - **Query Execution**: Supports CRUD operations and advanced query capabilities.
8
+ - **Permission Management**: Fine-grained access control using Gate Warden.
9
+ - **GUI**: A web-based interface for managing ACL rules and database structures.
10
+ - **Extensibility**: Easily extendable with pre-defined sheets and custom configurations.
11
+
12
+ ## Example Usage
13
+
14
+ Here is an example of how to use the `VQLProcessor` to execute a query:
15
+
16
+ ```typescript
17
+ import VQLProcessor from "@wxn0brp/vql";
18
+ import { Valthera } from "@wxn0brp/db";
19
+ import { GateWarden } from "@wxn0brp/gate-warden";
20
+
21
+ // Initialize database instances
22
+ const dbInstances = {
23
+ myDatabase: new Valthera("path/to/database"),
24
+ };
25
+
26
+ // Initialize Gate Warden
27
+ const gw = new GateWarden("path/to/gate-warden/database");
28
+
29
+ // Create a VQLProcessor instance
30
+ const processor = new VQLProcessor(dbInstances, gw);
31
+
32
+ // Define a query
33
+ const query = {
34
+ db: "myDatabase",
35
+ d: {
36
+ find: {
37
+ collection: "users",
38
+ search: { age: { $gt: 18 } },
39
+ fields: { name: 1, age: 1 },
40
+ },
41
+ },
42
+ };
43
+
44
+ // Or you can use a string query like:
45
+ // string
46
+ const VQLS = `
47
+ myDatabase users
48
+ s.age.$gt = 18
49
+ f.name = 1
50
+ f.age = 1
51
+ `
52
+ // Or (use backticks like json)
53
+ const VQLB = `
54
+ myDatabase users
55
+ {
56
+ collection: "users",
57
+ search: { age: { $gt: 18 } },
58
+ fields: { name: 1, age: 1 },
59
+ }
60
+ `
61
+ // Or (use markup like yaml)
62
+ const VQLM = `
63
+ myDatabase users
64
+ collection: users
65
+ search:
66
+ age:
67
+ $gt: 18
68
+ fields:
69
+ name: 1
70
+ age: 1
71
+ `
72
+
73
+ // Execute the query
74
+ (async () => {
75
+ try {
76
+ const result = await processor.execute(query, { id: "user123" });
77
+ console.log("Query Result:", result);
78
+ } catch (error) {
79
+ console.error("Error executing query:", error);
80
+ }
81
+ })();
82
+ ```
83
+
84
+ ## License
85
+
86
+ This project is licensed under the MIT License. See the [LICENSE](./LICENSE) file for details.
87
+
88
+ ## Contributing
89
+
90
+ Contributions are welcome! Please open an issue or submit a pull request for any improvements or bug fixes.
91
+
92
+ ## Powered by
93
+
94
+ - [ValtheraDB](https://github.com/wxn0brP/ValtheraDB)
95
+ - [Gate Warden](https://github.com/wxn0brP/gate-warden)
@@ -0,0 +1,17 @@
1
+ import type { ValtheraCompatible } from "@wxn0brp/db";
2
+ type ResolverFn<TArgs extends any[] = any[], TReturn = any> = (...args: TArgs) => Promise<TReturn>;
3
+ export interface ValtheraResolver {
4
+ getCollections?: ResolverFn<[], string[]>;
5
+ issetCollection?: ResolverFn<[string], boolean>;
6
+ checkCollection?: ResolverFn<[string], boolean>;
7
+ add?: ResolverFn<[string, any], any>;
8
+ find?: ResolverFn<[string, any], any[]>;
9
+ findOne?: ResolverFn<[string, any], any | null>;
10
+ update?: ResolverFn<[string, any, any], boolean>;
11
+ updateOne?: ResolverFn<[string, any, any], boolean>;
12
+ remove?: ResolverFn<[string, any], boolean>;
13
+ removeOne?: ResolverFn<[string, any], boolean>;
14
+ removeCollection?: ResolverFn<[string], boolean>;
15
+ }
16
+ export declare function createValtheraAdapter(resolver: ValtheraResolver): ValtheraCompatible;
17
+ export {};
@@ -0,0 +1,25 @@
1
+ export function createValtheraAdapter(resolver) {
2
+ const safe = (fn) => {
3
+ if (!fn)
4
+ throw new Error("Unimplemented method");
5
+ return fn;
6
+ };
7
+ return {
8
+ getCollections: () => safe(resolver.getCollections)(),
9
+ issetCollection: (c) => safe(resolver.issetCollection)(c),
10
+ checkCollection: (c) => safe(resolver.checkCollection)(c),
11
+ add: (col, data) => safe(resolver.add)(col, data),
12
+ find: (col, search) => safe(resolver.find)(col, search),
13
+ findOne: (col, search) => safe(resolver.findOne)(col, search),
14
+ update: (col, search, up) => safe(resolver.update)(col, search, up),
15
+ updateOne: (col, search, up) => safe(resolver.updateOne)(col, search, up),
16
+ remove: (col, search) => safe(resolver.remove)(col, search),
17
+ removeOne: (col, search) => safe(resolver.removeOne)(col, search),
18
+ removeCollection: (col) => safe(resolver.removeCollection)(col),
19
+ c: null,
20
+ findStream: null,
21
+ transaction: null,
22
+ updateOneOrAdd: null
23
+ };
24
+ }
25
+ //# sourceMappingURL=apiAbstract.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"apiAbstract.js","sourceRoot":"","sources":["../src/apiAbstract.ts"],"names":[],"mappings":"AAsBA,MAAM,UAAU,qBAAqB,CAAC,QAA0B;IAC5D,MAAM,IAAI,GAAG,CAAI,EAAM,EAAK,EAAE;QAC1B,IAAI,CAAC,EAAE;YAAE,MAAM,IAAI,KAAK,CAAC,sBAAsB,CAAC,CAAC;QACjD,OAAO,EAAE,CAAC;IACd,CAAC,CAAC;IAEF,OAAO;QACH,cAAc,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,cAAe,CAAC,EAAE;QACtD,eAAe,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,eAAgB,CAAC,CAAC,CAAC,CAAC;QAC1D,eAAe,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,eAAgB,CAAC,CAAC,CAAC,CAAC;QAE1D,GAAG,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAI,CAAC,CAAC,GAAG,EAAE,IAAI,CAAC;QAClD,IAAI,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAK,CAAC,CAAC,GAAG,EAAE,MAAM,CAAC;QACxD,OAAO,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,OAAQ,CAAC,CAAC,GAAG,EAAE,MAAM,CAAC;QAE9D,MAAM,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,EAAE,EAAE,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAO,CAAC,CAAC,GAAG,EAAE,MAAM,EAAE,EAAE,CAAC;QACpE,SAAS,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,EAAE,EAAE,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,SAAU,CAAC,CAAC,GAAG,EAAE,MAAM,EAAE,EAAE,CAAC;QAE1E,MAAM,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAO,CAAC,CAAC,GAAG,EAAE,MAAM,CAAC;QAC5D,SAAS,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,SAAU,CAAC,CAAC,GAAG,EAAE,MAAM,CAAC;QAElE,gBAAgB,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,gBAAiB,CAAC,CAAC,GAAG,CAAC;QAEhE,CAAC,EAAE,IAAI;QACP,UAAU,EAAE,IAAI;QAChB,WAAW,EAAE,IAAI;QACjB,cAAc,EAAE,IAAI;KACvB,CAAC;AACN,CAAC"}
@@ -0,0 +1,7 @@
1
+ export declare const VQLConfig: {
2
+ hidePath: boolean;
3
+ strictSelect: boolean;
4
+ strictACL: boolean;
5
+ noCheckPermissions: boolean;
6
+ formatAjv: boolean;
7
+ };
package/dist/config.js ADDED
@@ -0,0 +1,8 @@
1
+ export const VQLConfig = {
2
+ hidePath: true,
3
+ strictSelect: true,
4
+ strictACL: true,
5
+ noCheckPermissions: false,
6
+ formatAjv: true,
7
+ };
8
+ //# sourceMappingURL=config.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,SAAS,GAAG;IACrB,QAAQ,EAAE,IAAI;IACd,YAAY,EAAE,IAAI;IAClB,SAAS,EAAE,IAAI;IACf,kBAAkB,EAAE,KAAK;IACzB,SAAS,EAAE,IAAI;CAClB,CAAA"}
@@ -0,0 +1,3 @@
1
+ import { VQLProcessor } from "../processor.js";
2
+ import { RelationQuery } from "../types/vql.js";
3
+ export declare function executeRelation(cpu: VQLProcessor, query: RelationQuery, user: any): Promise<any>;
@@ -0,0 +1,38 @@
1
+ import { checkRelationPermission } from "../permissions/index.js";
2
+ import { parseSelect } from "./utils.js";
3
+ import { VQLConfig } from "../config.js";
4
+ function standardizeRelationRequest(req) {
5
+ req.select = parseSelect(req.select || []);
6
+ }
7
+ function checkDBsExist(cpu, req) {
8
+ const db = req.path[0];
9
+ if (!db || !cpu.dbInstances[db]) {
10
+ return { err: true, msg: `Invalid query - db "${db}" not found`, c: 400 };
11
+ }
12
+ if (req.relations) {
13
+ for (const relation of Object.values(req.relations)) {
14
+ const res = checkDBsExist(cpu, relation);
15
+ if (res.err)
16
+ return res;
17
+ }
18
+ }
19
+ return { err: false };
20
+ }
21
+ export async function executeRelation(cpu, query, user) {
22
+ const checkDb = checkDBsExist(cpu, query.r);
23
+ if (checkDb.err)
24
+ return checkDb;
25
+ if (!VQLConfig.noCheckPermissions && !await checkRelationPermission(cpu.gw, user, query)) {
26
+ return { err: true, msg: "Permission denied", c: 403 };
27
+ }
28
+ const req = query.r;
29
+ standardizeRelationRequest(req);
30
+ const { path, search, relations, select } = req;
31
+ if (req.many) {
32
+ return await cpu.relation.find(path, search, relations, select, req.options);
33
+ }
34
+ else {
35
+ return await cpu.relation.findOne(path, search, relations, select);
36
+ }
37
+ }
38
+ //# sourceMappingURL=relation.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"relation.js","sourceRoot":"","sources":["../../src/cpu/relation.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,uBAAuB,EAAE,MAAM,gBAAgB,CAAC;AACzD,OAAO,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AACtC,OAAO,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AAEtC,SAAS,0BAA0B,CAAC,GAAgD;IAChF,GAAG,CAAC,MAAM,GAAG,WAAW,CAAC,GAAG,CAAC,MAAM,IAAI,EAAE,CAAC,CAAC;AAC/C,CAAC;AAED,SAAS,aAAa,CAAC,GAAiB,EAAE,GAAgD;IACtF,MAAM,EAAE,GAAG,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAEvB,IAAI,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,WAAW,CAAC,EAAE,CAAC,EAAE,CAAC;QAC9B,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,uBAAuB,EAAE,aAAa,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC;IAC9E,CAAC;IAED,IAAI,GAAG,CAAC,SAAS,EAAE,CAAC;QAChB,KAAK,MAAM,QAAQ,IAAI,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,SAAS,CAAC,EAAE,CAAC;YAClD,MAAM,GAAG,GAAG,aAAa,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAC;YACzC,IAAI,GAAG,CAAC,GAAG;gBAAE,OAAO,GAAG,CAAC;QAC5B,CAAC;IACL,CAAC;IACD,OAAO,EAAE,GAAG,EAAE,KAAK,EAAE,CAAC;AAC1B,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,eAAe,CAAC,GAAiB,EAAE,KAAoB,EAAE,IAAS;IACpF,MAAM,OAAO,GAAG,aAAa,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC;IAC5C,IAAI,OAAO,CAAC,GAAG;QAAE,OAAO,OAAO,CAAC;IAEhC,IAAI,CAAC,SAAS,CAAC,kBAAkB,IAAI,CAAC,MAAM,uBAAuB,CAAC,GAAG,CAAC,EAAE,EAAE,IAAI,EAAE,KAAK,CAAC,EAAE,CAAC;QACvF,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,mBAAmB,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC;IAC3D,CAAC;IAED,MAAM,GAAG,GAAG,KAAK,CAAC,CAAC,CAAC;IACpB,0BAA0B,CAAC,GAAG,CAAC,CAAC;IAEhC,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,GAAG,GAAG,CAAC;IAEhD,IAAI,GAAG,CAAC,IAAI,EAAE,CAAC;QACX,OAAO,MAAM,GAAG,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,GAAG,CAAC,OAAO,CAAC,CAAC;IACjF,CAAC;SAAM,CAAC;QACJ,OAAO,MAAM,GAAG,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,CAAC,CAAC;IACvE,CAAC;AACL,CAAC"}
@@ -0,0 +1,3 @@
1
+ import { VQLProcessor } from "../processor.js";
2
+ import { VQLRequest } from "../types/vql.js";
3
+ export declare function executeQuery(cpu: VQLProcessor, query: VQLRequest, user: any): Promise<any>;
@@ -0,0 +1,66 @@
1
+ import { VQLConfig } from "../config.js";
2
+ import { checkRequestPermission } from "../permissions/index.js";
3
+ import { parseSelect } from "./utils.js";
4
+ export async function executeQuery(cpu, query, user) {
5
+ if (!query.db || !cpu.dbInstances[query.db])
6
+ return { err: true, msg: `Invalid query - db "${query.db || "undefined"}" not found`, c: 400 };
7
+ const db = cpu.dbInstances[query.db];
8
+ const operation = Object.keys(query.d)[0];
9
+ if (!VQLConfig.noCheckPermissions && !await checkRequestPermission(cpu.gw, user, query)) {
10
+ return { err: true, msg: "Permission denied", c: 403 };
11
+ }
12
+ if (operation === "find") {
13
+ const params = query.d[operation];
14
+ const select = parseSelect(params.fields || params.select || {});
15
+ return db.find(params.collection, params.search, {}, {}, { select });
16
+ }
17
+ else if (operation === "findOne" || operation === "f") {
18
+ const params = query.d[operation];
19
+ const select = parseSelect(params.fields || params.select || {});
20
+ return db.findOne(params.collection, params.search, {}, { select });
21
+ }
22
+ else if (operation === "add") {
23
+ const params = query.d[operation];
24
+ return db.add(params.collection, params.data);
25
+ }
26
+ else if (operation === "update") {
27
+ const params = query.d[operation];
28
+ return db.update(params.collection, params.search, params.updater);
29
+ }
30
+ else if (operation === "updateOne") {
31
+ const params = query.d[operation];
32
+ return db.updateOne(params.collection, params.search, params.updater);
33
+ }
34
+ else if (operation === "remove") {
35
+ const params = query.d[operation];
36
+ return db.remove(params.collection, params.search);
37
+ }
38
+ else if (operation === "removeOne") {
39
+ const params = query.d[operation];
40
+ return db.removeOne(params.collection, params.search);
41
+ }
42
+ else if (operation === "updateOneOrAdd") {
43
+ const params = query.d[operation];
44
+ return db.updateOneOrAdd(params.collection, params.search, params.updater, params.add_arg || {}, {}, params.id_gen ?? true);
45
+ }
46
+ else if (operation === "removeCollection") {
47
+ const params = query.d[operation];
48
+ return db.removeCollection(params.collection);
49
+ }
50
+ else if (operation === "checkCollection") {
51
+ const params = query.d[operation];
52
+ return db.checkCollection(params.collection);
53
+ }
54
+ else if (operation === "issetCollection") {
55
+ const params = query.d[operation];
56
+ return db.issetCollection(params.collection);
57
+ }
58
+ else if (operation === "getCollections") {
59
+ return db.getCollections();
60
+ }
61
+ else {
62
+ const n = operation;
63
+ throw new Error("Unknown operation " + n);
64
+ }
65
+ }
66
+ //# sourceMappingURL=request.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"request.js","sourceRoot":"","sources":["../../src/cpu/request.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ import { VQL } from "../../types/vql.js";
2
+ export type VQLParserMode = "VQLS" | "VQLM" | "VQLB" | "VQLR";
3
+ export declare function guessParser(query: string): {
4
+ mode: VQLParserMode;
5
+ query: string;
6
+ };
7
+ declare function parseStringQuery(query: string): VQL;
8
+ export { parseStringQuery };
@@ -0,0 +1,55 @@
1
+ import { parseVQLB } from "./json5.js";
2
+ import { parseVQLS } from "./simple.js";
3
+ import { parseVQLM } from "./yaml.js";
4
+ function get3rdAnd4thWord(query) {
5
+ let words = [];
6
+ let word = "";
7
+ let i = 0;
8
+ while (i < query.length && words.length < 4) {
9
+ const c = query[i++];
10
+ if (" \t\n\r".includes(c)) {
11
+ if (word)
12
+ words.push(word);
13
+ word = "";
14
+ }
15
+ else {
16
+ word += c;
17
+ }
18
+ }
19
+ if (word && words.length < 4)
20
+ words.push(word);
21
+ return words[2] + (words[3] ? " " + words[3] : "");
22
+ }
23
+ export function guessParser(query) {
24
+ query = query.trimStart();
25
+ if (query[0] === "#") {
26
+ return {
27
+ mode: "VQL" + query[1].toUpperCase(),
28
+ query: query.slice(2)
29
+ };
30
+ }
31
+ const _34word = get3rdAnd4thWord(query);
32
+ let mode = "VQLS";
33
+ if (_34word.includes("{"))
34
+ mode = "VQLB";
35
+ else if (_34word.includes(":"))
36
+ mode = "VQLM";
37
+ return {
38
+ mode,
39
+ query
40
+ };
41
+ }
42
+ function parseStringQuery(query) {
43
+ const { mode, query: queryRaw } = guessParser(query);
44
+ if (mode === "VQLB") {
45
+ return parseVQLB(queryRaw);
46
+ }
47
+ else if (mode === "VQLM") {
48
+ return parseVQLM(queryRaw);
49
+ }
50
+ else {
51
+ return parseVQLS(queryRaw);
52
+ }
53
+ }
54
+ export { parseStringQuery };
55
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/cpu/string/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AACpC,OAAO,EAAE,SAAS,EAAE,MAAM,UAAU,CAAC;AACrC,OAAO,EAAE,SAAS,EAAE,MAAM,QAAQ,CAAC;AAInC,SAAS,gBAAgB,CAAC,KAAa;IACnC,IAAI,KAAK,GAAa,EAAE,CAAC;IACzB,IAAI,IAAI,GAAG,EAAE,CAAC;IACd,IAAI,CAAC,GAAG,CAAC,CAAC;IAEV,OAAO,CAAC,GAAG,KAAK,CAAC,MAAM,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC1C,MAAM,CAAC,GAAG,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC;QACrB,IAAI,SAAS,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC;YACxB,IAAI,IAAI;gBAAE,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAC3B,IAAI,GAAG,EAAE,CAAC;QACd,CAAC;aAAM,CAAC;YACJ,IAAI,IAAI,CAAC,CAAC;QACd,CAAC;IACL,CAAC;IAED,IAAI,IAAI,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC;QAAE,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAE/C,OAAO,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;AACvD,CAAC;AAED,MAAM,UAAU,WAAW,CAAC,KAAa;IAIrC,KAAK,GAAG,KAAK,CAAC,SAAS,EAAE,CAAC;IAC1B,IAAI,KAAK,CAAC,CAAC,CAAC,KAAK,GAAG,EAAE,CAAC;QACnB,OAAO;YACH,IAAI,EAAE,KAAK,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,WAAW,EAAS;YAC3C,KAAK,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC;SACxB,CAAA;IACL,CAAC;IAED,MAAM,OAAO,GAAG,gBAAgB,CAAC,KAAK,CAAC,CAAC;IAExC,IAAI,IAAI,GAAkB,MAAM,CAAC;IACjC,IAAI,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAC;QAAE,IAAI,GAAG,MAAM,CAAC;SACpC,IAAI,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAC;QAAE,IAAI,GAAG,MAAM,CAAC;IAE9C,OAAO;QACH,IAAI;QACJ,KAAK;KACR,CAAA;AACL,CAAC;AAED,SAAS,gBAAgB,CAAC,KAAa;IACnC,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,QAAQ,EAAE,GAAG,WAAW,CAAC,KAAK,CAAC,CAAC;IAErD,IAAI,IAAI,KAAK,MAAM,EAAE,CAAC;QAClB,OAAO,SAAS,CAAC,QAAQ,CAAC,CAAC;IAC/B,CAAC;SAAM,IAAI,IAAI,KAAK,MAAM,EAAE,CAAC;QACzB,OAAO,SAAS,CAAC,QAAQ,CAAC,CAAC;IAC/B,CAAC;SAAM,CAAC;QACJ,OAAO,SAAS,CAAC,QAAQ,CAAC,CAAC;IAC/B,CAAC;AACL,CAAC;AAED,OAAO,EAAE,gBAAgB,EAAE,CAAC"}
@@ -0,0 +1,2 @@
1
+ import { VQL } from "../../types/vql.js";
2
+ export declare function parseVQLB(query: string): VQL;
@@ -0,0 +1,9 @@
1
+ import JSON5 from "json5";
2
+ import { extractMeta } from "./utils.js";
3
+ import { processVQL_MB } from "./middle.js";
4
+ export function parseVQLB(query) {
5
+ const { db, op, collection, body } = extractMeta(query);
6
+ const parsed = JSON5.parse(body);
7
+ return processVQL_MB(db, op, collection, parsed);
8
+ }
9
+ //# sourceMappingURL=json5.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"json5.js","sourceRoot":"","sources":["../../../src/cpu/string/json5.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AACtC,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAEzC,MAAM,UAAU,SAAS,CAAC,KAAa;IACnC,MAAM,EAAE,EAAE,EAAE,EAAE,EAAE,UAAU,EAAE,IAAI,EAAE,GAAG,WAAW,CAAC,KAAK,CAAC,CAAC;IACxD,MAAM,MAAM,GAAG,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IAEjC,OAAO,aAAa,CAAC,EAAE,EAAE,EAAE,EAAE,UAAU,EAAE,MAAM,CAAC,CAAC;AACrD,CAAC"}
@@ -0,0 +1,3 @@
1
+ import { VQL } from "../../types/vql.js";
2
+ export declare function processVQL_MB(db: string, op: string, collection: string, parsed: Record<string, any>): VQL;
3
+ export declare function convertSearchObjToSearchArray(obj: Record<string, any>, parentKeys?: string[]): string[][];
@@ -0,0 +1,42 @@
1
+ export function processVQL_MB(db, op, collection, parsed) {
2
+ return "relations" in parsed ?
3
+ processRelation_MB(db, collection, parsed) :
4
+ processQuery_MB(db, op, collection, parsed);
5
+ }
6
+ export function convertSearchObjToSearchArray(obj, parentKeys = []) {
7
+ return Object.entries(obj).reduce((acc, [key, value]) => {
8
+ const currentPath = [...parentKeys, key];
9
+ if (!value) {
10
+ return acc;
11
+ }
12
+ else if (typeof value === 'object' && value !== null && !Array.isArray(value)) {
13
+ return [...acc, ...convertSearchObjToSearchArray(value, currentPath)];
14
+ }
15
+ else {
16
+ return [...acc, currentPath];
17
+ }
18
+ }, []);
19
+ }
20
+ function processRelation_MB(db, collection, parsed) {
21
+ if ("select" in parsed && typeof parsed.select === "object" && !Array.isArray(parsed.select)) {
22
+ parsed.select = convertSearchObjToSearchArray(parsed.select);
23
+ }
24
+ return {
25
+ r: {
26
+ path: [parsed.db || db, parsed.c || collection],
27
+ ...parsed
28
+ }
29
+ };
30
+ }
31
+ function processQuery_MB(db, op, collection, parsed) {
32
+ return {
33
+ db,
34
+ d: {
35
+ [op]: {
36
+ collection,
37
+ ...parsed
38
+ }
39
+ }
40
+ };
41
+ }
42
+ //# sourceMappingURL=middle.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"middle.js","sourceRoot":"","sources":["../../../src/cpu/string/middle.ts"],"names":[],"mappings":"AAEA,MAAM,UAAU,aAAa,CAAC,EAAU,EAAE,EAAU,EAAE,UAAkB,EAAE,MAA2B;IACjG,OAAO,WAAW,IAAI,MAAM,CAAC,CAAC;QAC1B,kBAAkB,CAAC,EAAE,EAAE,UAAU,EAAE,MAAM,CAAC,CAAC,CAAC;QAC5C,eAAe,CAAC,EAAE,EAAE,EAAE,EAAE,UAAU,EAAE,MAAM,CAAC,CAAC;AACpD,CAAC;AAGD,MAAM,UAAU,6BAA6B,CAAC,GAAwB,EAAE,aAAuB,EAAE;IAC7F,OAAO,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,CAAC,GAAG,EAAE,KAAK,CAAC,EAAE,EAAE;QACpD,MAAM,WAAW,GAAG,CAAC,GAAG,UAAU,EAAE,GAAG,CAAC,CAAC;QAEzC,IAAI,CAAC,KAAK,EAAE,CAAC;YACT,OAAO,GAAG,CAAC;QACf,CAAC;aAAM,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;YAC9E,OAAO,CAAC,GAAG,GAAG,EAAE,GAAG,6BAA6B,CAAC,KAAK,EAAE,WAAW,CAAC,CAAC,CAAC;QAC1E,CAAC;aAAM,CAAC;YACJ,OAAO,CAAC,GAAG,GAAG,EAAE,WAAW,CAAC,CAAC;QACjC,CAAC;IACL,CAAC,EAAE,EAAE,CAAC,CAAC;AACX,CAAC;AAED,SAAS,kBAAkB,CAAC,EAAU,EAAE,UAAkB,EAAE,MAA2B;IACnF,IAAI,QAAQ,IAAI,MAAM,IAAI,OAAO,MAAM,CAAC,MAAM,KAAK,QAAQ,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC;QAC3F,MAAM,CAAC,MAAM,GAAG,6BAA6B,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;IACjE,CAAC;IACD,OAAO;QACH,CAAC,EAAE;YACC,IAAI,EAAE,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,EAAE,MAAM,CAAC,CAAC,IAAI,UAAU,CAAC;YAC/C,GAAG,MAAM;SACZ;KACG,CAAC;AACb,CAAC;AAED,SAAS,eAAe,CAAC,EAAU,EAAE,EAAU,EAAE,UAAkB,EAAE,MAA2B;IAC5F,OAAO;QACH,EAAE;QACF,CAAC,EAAE;YACC,CAAC,EAAE,CAAC,EAAE;gBACF,UAAU;gBACV,GAAG,MAAM;aACZ;SACJ;KACG,CAAC;AACb,CAAC"}
@@ -0,0 +1,2 @@
1
+ import { VQL } from "../../types/vql.js";
2
+ export declare function parseVQLS(query: string): VQL;
@@ -0,0 +1,152 @@
1
+ import { extractMeta } from "./utils.js";
2
+ import JSON5 from "json5";
3
+ import { convertSearchObjToSearchArray } from "./middle.js";
4
+ const aliases = {
5
+ s: "search",
6
+ f: "fields",
7
+ o: "options",
8
+ r: "relations",
9
+ d: "data",
10
+ e: "select",
11
+ u: "updater",
12
+ };
13
+ function parseArgs(input) {
14
+ const result = {};
15
+ const tokens = [];
16
+ let current = "";
17
+ let inQuotes = false;
18
+ let escape = false;
19
+ for (let i = 0; i < input.length; i++) {
20
+ const char = input[i];
21
+ if (escape) {
22
+ current += char;
23
+ escape = false;
24
+ }
25
+ else if (char === "\\") {
26
+ escape = true;
27
+ }
28
+ else if (char === "\"") {
29
+ inQuotes = !inQuotes;
30
+ }
31
+ else if (!inQuotes && (char === " " || char === "=")) {
32
+ if (current !== "") {
33
+ tokens.push(current);
34
+ current = "";
35
+ }
36
+ }
37
+ else {
38
+ current += char;
39
+ }
40
+ }
41
+ if (current !== "") {
42
+ tokens.push(current);
43
+ }
44
+ for (let i = 0; i < tokens.length; i += 2) {
45
+ const key = tokens[i];
46
+ let value = tokens[i + 1] ?? true;
47
+ if (typeof value === "string") {
48
+ const trimmed = value.trim();
49
+ if (trimmed === "") {
50
+ value = true;
51
+ }
52
+ else if (/^".*"$/.test(trimmed)) {
53
+ value = trimmed.slice(1, -1);
54
+ }
55
+ else if (trimmed.toLowerCase() === "true") {
56
+ value = true;
57
+ }
58
+ else if (trimmed.toLowerCase() === "false") {
59
+ value = false;
60
+ }
61
+ else if (!isNaN(Number(trimmed))) {
62
+ value = Number(trimmed);
63
+ }
64
+ else if ((trimmed.startsWith("{") && trimmed.endsWith("}")) || (trimmed.startsWith("[") && trimmed.endsWith("]"))) {
65
+ try {
66
+ value = JSON5.parse(trimmed);
67
+ }
68
+ catch { }
69
+ }
70
+ }
71
+ result[key] = value;
72
+ }
73
+ return result;
74
+ }
75
+ function buildVQL(db, op, collection, query) {
76
+ const hasRelations = "relations" in query;
77
+ if (hasRelations) {
78
+ const relations = {};
79
+ for (const key in query.relations) {
80
+ const value = query.relations[key];
81
+ relations[key] = {
82
+ path: [value.db || db, value.c || key],
83
+ ...value
84
+ };
85
+ delete relations[key].db;
86
+ delete relations[key].c;
87
+ }
88
+ if ("select" in query) {
89
+ query.select = convertSearchObjToSearchArray(query.select);
90
+ }
91
+ return {
92
+ r: {
93
+ path: [db, collection],
94
+ ...query,
95
+ relations,
96
+ }
97
+ };
98
+ }
99
+ else {
100
+ if (query.fields && !query.select) {
101
+ query.select = query.fields;
102
+ delete query.fields;
103
+ }
104
+ if ("select" in query) {
105
+ query.select = [...new Set(convertSearchObjToSearchArray(query.select).map(k => k[0]).flat())];
106
+ }
107
+ return {
108
+ db,
109
+ d: {
110
+ [op]: {
111
+ collection,
112
+ ...query,
113
+ }
114
+ }
115
+ };
116
+ }
117
+ }
118
+ export function parseVQLS(query) {
119
+ const { db, op, collection, body } = extractMeta(query);
120
+ const parsed = parseArgs(body);
121
+ for (const keysRaw of Object.keys(parsed)) {
122
+ const keys = keysRaw.split(".");
123
+ if (keys.length === 1) {
124
+ continue;
125
+ }
126
+ let obj = parsed;
127
+ for (let i = 0; i < keys.length; i++) {
128
+ const key = keys[i];
129
+ if (i < keys.length - 1) {
130
+ if (!(key in obj)) {
131
+ obj[key] = {};
132
+ }
133
+ obj = obj[key];
134
+ }
135
+ else {
136
+ obj[key] = parsed[keysRaw];
137
+ delete parsed[keysRaw];
138
+ }
139
+ }
140
+ }
141
+ for (const key in aliases) {
142
+ if (key in parsed) {
143
+ parsed[aliases[key]] = parsed[key];
144
+ delete parsed[key];
145
+ }
146
+ }
147
+ if ((op === "find" || op === "findOne") && !("search" in parsed)) {
148
+ parsed.search = {};
149
+ }
150
+ return buildVQL(db, op, collection, parsed);
151
+ }
152
+ //# sourceMappingURL=simple.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"simple.js","sourceRoot":"","sources":["../../../src/cpu/string/simple.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,17 @@
1
+ /**
2
+ * Extracts metadata from a query string, including database name, operation,
3
+ * collection name, and the query body.
4
+ *
5
+ * @param input The input string to extract the information from.
6
+ * @returns An object with the following properties:
7
+ * - `db`: The database name.
8
+ * - `op`: The operation to perform, such as "find", "findOne", "add", "update", or "remove".
9
+ * - `collection`: The collection name.
10
+ * - `body`: The query body.
11
+ */
12
+ export declare function extractMeta(input: string): {
13
+ db: string;
14
+ op: string;
15
+ collection: string;
16
+ body: string;
17
+ };