@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
@@ -0,0 +1,27 @@
1
+ import executorC from "@wxn0brp/db/executor.js";
2
+ import { logLog } from "../logger.js";
3
+ export class CustomExecutor extends executorC {
4
+ name;
5
+ constructor(name) {
6
+ super();
7
+ this.name = name;
8
+ }
9
+ async execute() {
10
+ if (this.isExecuting)
11
+ return;
12
+ this.isExecuting = true;
13
+ while (this.quote.length > 0) {
14
+ let q = this.quote.shift();
15
+ logLog(this.name, `${q.func.name.replace("bound ", "")}: ${JSON.stringify(q.param)
16
+ .replaceAll(",", ", ")
17
+ .replaceAll("{", "{ ")
18
+ .replaceAll("}", " }")
19
+ .replaceAll(":", ": ")}`);
20
+ let res = await q.func(...q.param);
21
+ logLog(this.name, `Result: ${JSON.stringify(res)}`);
22
+ q.resolve(res);
23
+ }
24
+ this.isExecuting = false;
25
+ }
26
+ }
27
+ //# sourceMappingURL=customExe.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"customExe.js","sourceRoot":"","sources":["../../src/tests/customExe.ts"],"names":[],"mappings":"AAAA,OAAO,SAAS,MAAM,yBAAyB,CAAC;AAChD,OAAO,EAAE,MAAM,EAAE,MAAM,WAAW,CAAC;AAEnC,MAAM,OAAO,cAAe,SAAQ,SAAS;IACtB;IAAnB,YAAmB,IAAY;QAC3B,KAAK,EAAE,CAAC;QADO,SAAI,GAAJ,IAAI,CAAQ;IAE/B,CAAC;IAED,KAAK,CAAC,OAAO;QACT,IAAI,IAAI,CAAC,WAAW;YAAE,OAAO;QAC7B,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC;QACxB,OAAO,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC3B,IAAI,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC;YAC3B,MAAM,CAAC,IAAI,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE,EAAE,CAAC,KAClD,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC;iBACtB,UAAU,CAAC,GAAG,EAAE,IAAI,CAAC;iBACrB,UAAU,CAAC,GAAG,EAAE,IAAI,CAAC;iBACrB,UAAU,CAAC,GAAG,EAAE,IAAI,CAAC;iBACrB,UAAU,CAAC,GAAG,EAAE,IAAI,CACzB,EAAE,CAAC,CAAC;YACJ,IAAI,GAAG,GAAG,MAAM,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC;YACnC,MAAM,CAAC,IAAI,CAAC,IAAI,EAAE,WAAW,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;YACpD,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,CAAA;QAClB,CAAC;QACD,IAAI,CAAC,WAAW,GAAG,KAAK,CAAC;IAC7B,CAAC;CACJ"}
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,33 @@
1
+ import { Valthera } from "@wxn0brp/db";
2
+ import { UserManager, WardenManager } from "@wxn0brp/gate-warden";
3
+ import { rmSync } from "fs";
4
+ import { hashKey } from "../permissions/utils.js";
5
+ import { VQLConfig } from "../config.js";
6
+ const db = new Valthera("data/gw.db");
7
+ console.log("Renewing DB");
8
+ rmSync("./data/gw.db", { force: true, recursive: true });
9
+ const userMgr = new UserManager(db);
10
+ const pMgr = new WardenManager(db);
11
+ await pMgr.addRole({
12
+ _id: "admin",
13
+ name: "admin",
14
+ });
15
+ VQLConfig.hidePath = false;
16
+ // await pMgr.addRBACRule("admin", `["shop","products"]`, 7);
17
+ await pMgr.addACLRule(hashKey(["shop", "products"]), 2, "user123");
18
+ await pMgr.addACLRule(hashKey(["shop", "products", "name"]), 2, "user123");
19
+ await pMgr.addACLRule(hashKey(["shop", "products", "price"]), 2, "user123");
20
+ await pMgr.addACLRule(hashKey(["shop", "products", "$lat"]), 2, "user123");
21
+ await pMgr.addACLRule(hashKey(["shop", "products", "foo", "bar", "baz", "$buzz"]), 2, "user123");
22
+ await pMgr.addACLRule(hashKey(["shop", "products", "price"]), 4, "user123");
23
+ await pMgr.addACLRule(hashKey(["shop", "categories"]), 2, "user123");
24
+ await pMgr.addACLRule(hashKey(["shop", "categories", "name"]), 2, "user123");
25
+ await pMgr.addACLRule(hashKey(["shop", "categories", "description"]), 2, "user123");
26
+ await pMgr.addACLRule(hashKey(["adapter", "users"]), 2, "user123");
27
+ await userMgr.createUser({
28
+ _id: "user123",
29
+ roles: ["admin"],
30
+ attrib: {}
31
+ });
32
+ console.log("Done");
33
+ //# sourceMappingURL=db.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"db.js","sourceRoot":"","sources":["../../src/tests/db.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AACvC,OAAO,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAClE,OAAO,EAAE,MAAM,EAAE,MAAM,IAAI,CAAC;AAC5B,OAAO,EAAE,OAAO,EAAE,MAAM,sBAAsB,CAAC;AAC/C,OAAO,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AAEtC,MAAM,EAAE,GAAG,IAAI,QAAQ,CAAC,YAAY,CAAC,CAAC;AAEtC,OAAO,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC;AAC3B,MAAM,CAAC,cAAc,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;AACzD,MAAM,OAAO,GAAG,IAAI,WAAW,CAAC,EAAE,CAAC,CAAC;AACpC,MAAM,IAAI,GAAG,IAAI,aAAa,CAAC,EAAE,CAAC,CAAC;AAEnC,MAAM,IAAI,CAAC,OAAO,CAAC;IACf,GAAG,EAAE,OAAO;IACZ,IAAI,EAAE,OAAO;CAChB,CAAC,CAAC;AACH,SAAS,CAAC,QAAQ,GAAG,KAAK,CAAA;AAC1B,6DAA6D;AAE7D,MAAM,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,MAAM,EAAC,UAAU,CAAC,CAAC,EAAE,CAAC,EAAE,SAAS,CAAC,CAAC;AAClE,MAAM,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,MAAM,EAAC,UAAU,EAAC,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,SAAS,CAAC,CAAC;AACzE,MAAM,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,MAAM,EAAC,UAAU,EAAC,OAAO,CAAC,CAAC,EAAE,CAAC,EAAE,SAAS,CAAC,CAAC;AAC1E,MAAM,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,MAAM,EAAC,UAAU,EAAC,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,SAAS,CAAC,CAAC;AACzE,MAAM,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,MAAM,EAAC,UAAU,EAAC,KAAK,EAAC,KAAK,EAAC,KAAK,EAAC,OAAO,CAAC,CAAC,EAAE,CAAC,EAAE,SAAS,CAAC,CAAC;AAC5F,MAAM,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,MAAM,EAAC,UAAU,EAAC,OAAO,CAAC,CAAC,EAAE,CAAC,EAAE,SAAS,CAAC,CAAC;AAC1E,MAAM,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,MAAM,EAAC,YAAY,CAAC,CAAC,EAAE,CAAC,EAAE,SAAS,CAAC,CAAC;AACpE,MAAM,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,MAAM,EAAC,YAAY,EAAC,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,SAAS,CAAC,CAAC;AAC3E,MAAM,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,MAAM,EAAC,YAAY,EAAC,aAAa,CAAC,CAAC,EAAE,CAAC,EAAE,SAAS,CAAC,CAAC;AAClF,MAAM,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,SAAS,EAAC,OAAO,CAAC,CAAC,EAAE,CAAC,EAAE,SAAS,CAAC,CAAC;AAElE,MAAM,OAAO,CAAC,UAAU,CAAC;IACrB,GAAG,EAAE,SAAS;IACd,KAAK,EAAE,CAAC,OAAO,CAAC;IAChB,MAAM,EAAE,EAAE;CACb,CAAC,CAAC;AAEH,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC"}
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,104 @@
1
+ import { Valthera } from "@wxn0brp/db";
2
+ import { GateWarden } from '@wxn0brp/gate-warden';
3
+ import { configDotenv } from 'dotenv';
4
+ import sourceMap from 'source-map-support';
5
+ import { VQLConfig } from '../config.js';
6
+ import { VQLProcessor } from "../processor.js";
7
+ import { loadSheetFromFile } from "../sheet/load.js";
8
+ import { createValtheraAdapter } from "../apiAbstract.js";
9
+ configDotenv();
10
+ sourceMap.install();
11
+ const apiAdapter = createValtheraAdapter({
12
+ find: async (col, search) => {
13
+ const res = await fetch(`/api/${col}?q=` + encodeURIComponent(JSON.stringify(search)));
14
+ return await res.json();
15
+ },
16
+ add: async (col, data) => {
17
+ const res = await fetch(`/api/${col}`, {
18
+ method: "POST",
19
+ body: JSON.stringify(data),
20
+ headers: { "Content-Type": "application/json" }
21
+ });
22
+ return await res.json();
23
+ }
24
+ // resztę można dorzucić później
25
+ });
26
+ const dbs = {
27
+ shop: new Valthera("data/shop.db", {
28
+ // executor: new CustomExecutor("shop")
29
+ }),
30
+ adapter: apiAdapter
31
+ };
32
+ const gwDB = new Valthera("data/gw.db", {
33
+ // executor: new CustomExecutor("gwDB")
34
+ });
35
+ VQLConfig.hidePath = false;
36
+ VQLConfig.strictACL = false;
37
+ VQLConfig.strictSelect = false;
38
+ VQLConfig.noCheckPermissions = true;
39
+ const sheets = loadSheetFromFile("src/tests/sheet.json");
40
+ const q1 = {
41
+ db: "shop",
42
+ // d: {
43
+ // f: {
44
+ // collection: "products",
45
+ // search: { name: "test100" },
46
+ // fields: { name: 1, price: 1 }
47
+ // }
48
+ // },
49
+ // ref: "shop",
50
+ // var: {
51
+ // name: "test100"
52
+ // }
53
+ d: {
54
+ checkCollection: {
55
+ collection: "products",
56
+ }
57
+ },
58
+ // r: {
59
+ // path: ["shop","products"],
60
+ // search: { name: "test100" },
61
+ // relations: {
62
+ // c: {
63
+ // path: ["shop", "categories"],
64
+ // fk: "name",
65
+ // pk: "category"
66
+ // },
67
+ // t: {
68
+ // path: ["adapter", "users"],
69
+ // }
70
+ // }
71
+ // }
72
+ // r: {
73
+ // path: ["shop", "products"],
74
+ // search: {},
75
+ // relations: {}
76
+ // }
77
+ };
78
+ const q2 = `
79
+ shop products! s.hai = 1 f.name = 1 f.name2 = test with space f.name3 = 6
80
+ `;
81
+ const q3 = `
82
+ shop products!
83
+ {
84
+ search: {
85
+ name: "test100"
86
+ }
87
+ }
88
+ `;
89
+ const q4 = `
90
+ shop products!
91
+ search:
92
+ name: "test100"
93
+ `;
94
+ try {
95
+ const gw = new GateWarden(gwDB, 2);
96
+ const processor = new VQLProcessor(dbs, gw);
97
+ processor.preDefinedSheets = sheets;
98
+ const res = await processor.execute(q1, { id: "user123" });
99
+ console.log("Query Result:", res);
100
+ }
101
+ catch (e) {
102
+ console.error(e);
103
+ }
104
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/tests/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ export declare enum PermCRUD {
2
+ CREATE = 1,
3
+ READ = 2,
4
+ UPDATE = 4,
5
+ DELETE = 8,
6
+ COLLECTION = 16
7
+ }
@@ -0,0 +1,9 @@
1
+ export var PermCRUD;
2
+ (function (PermCRUD) {
3
+ PermCRUD[PermCRUD["CREATE"] = 1] = "CREATE";
4
+ PermCRUD[PermCRUD["READ"] = 2] = "READ";
5
+ PermCRUD[PermCRUD["UPDATE"] = 4] = "UPDATE";
6
+ PermCRUD[PermCRUD["DELETE"] = 8] = "DELETE";
7
+ PermCRUD[PermCRUD["COLLECTION"] = 16] = "COLLECTION";
8
+ })(PermCRUD || (PermCRUD = {}));
9
+ //# sourceMappingURL=perm.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"perm.js","sourceRoot":"","sources":["../../src/types/perm.ts"],"names":[],"mappings":"AAAA,MAAM,CAAN,IAAY,QAMX;AAND,WAAY,QAAQ;IAChB,2CAAe,CAAA;IACf,uCAAa,CAAA;IACb,2CAAe,CAAA;IACf,2CAAe,CAAA;IACf,oDAAmB,CAAA;AACvB,CAAC,EANW,QAAQ,KAAR,QAAQ,QAMnB"}
@@ -0,0 +1,118 @@
1
+ import { RelationTypes, ValtheraTypes } from "@wxn0brp/db";
2
+ export type VQLQuery = {
3
+ find: VQLFind;
4
+ findOne: VQLFindOne;
5
+ f: VQLFindOne;
6
+ add: VQLAdd;
7
+ update: VQLUpdate;
8
+ updateOne: VQLUpdateOne;
9
+ remove: VQLRemove;
10
+ removeOne: VQLRemoveOne;
11
+ updateOneOrAdd: VQLUpdateOneOrAdd;
12
+ removeCollection: VQLCollectionOperation;
13
+ checkCollection: VQLCollectionOperation;
14
+ issetCollection: VQLCollectionOperation;
15
+ getCollections: {};
16
+ };
17
+ export type VQLQueryData = {
18
+ find: VQLFind;
19
+ } | {
20
+ findOne: VQLFindOne;
21
+ } | {
22
+ f: VQLFindOne;
23
+ } | {
24
+ add: VQLAdd;
25
+ } | {
26
+ update: VQLUpdate;
27
+ } | {
28
+ updateOne: VQLUpdateOne;
29
+ } | {
30
+ remove: VQLRemove;
31
+ } | {
32
+ removeOne: VQLRemoveOne;
33
+ } | {
34
+ updateOneOrAdd: VQLUpdateOneOrAdd;
35
+ } | {
36
+ removeCollection: VQLCollectionOperation;
37
+ } | {
38
+ checkCollection: VQLCollectionOperation;
39
+ } | {
40
+ issetCollection: VQLCollectionOperation;
41
+ } | {
42
+ getCollections: {};
43
+ };
44
+ export interface VQLRequest {
45
+ db: string;
46
+ d: VQLQueryData;
47
+ }
48
+ export interface VQLFind {
49
+ collection: string;
50
+ search?: Record<string, any>;
51
+ sort?: Record<string, "asc" | "desc">;
52
+ limit?: number;
53
+ fields?: VQLFields;
54
+ relations?: VQLRelations;
55
+ }
56
+ export interface VQLFindOne {
57
+ collection: string;
58
+ search: Record<string, any>;
59
+ fields?: VQLFields;
60
+ relations?: VQLRelations;
61
+ }
62
+ export interface VQLAdd {
63
+ collection: string;
64
+ data: Record<string, any>;
65
+ }
66
+ export interface VQLUpdate {
67
+ collection: string;
68
+ search: Record<string, any>;
69
+ updater: Record<string, any>;
70
+ }
71
+ export interface VQLUpdateOne {
72
+ collection: string;
73
+ search: Record<string, any>;
74
+ updater: Record<string, any>;
75
+ }
76
+ export interface VQLRemove {
77
+ collection: string;
78
+ search: Record<string, any>;
79
+ }
80
+ export interface VQLRemoveOne {
81
+ collection: string;
82
+ search: Record<string, any>;
83
+ }
84
+ export interface VQLUpdateOneOrAdd {
85
+ collection: string;
86
+ search: Record<string, any>;
87
+ updater: Record<string, any>;
88
+ add_arg?: Record<string, any>;
89
+ id_gen?: boolean;
90
+ }
91
+ export interface VQLCollectionOperation {
92
+ collection: string;
93
+ }
94
+ export type VQLFields = Record<string, boolean | number>;
95
+ export type VQLRelations = Record<string, VQLFind | VQLFindOne>;
96
+ export interface RelationQuery {
97
+ r: {
98
+ path: RelationTypes.Path;
99
+ search: ValtheraTypes.Search;
100
+ relations: RelationTypes.Relation;
101
+ many?: boolean;
102
+ options?: ValtheraTypes.DbFindOpts;
103
+ select?: RelationTypes.FieldPath[];
104
+ };
105
+ }
106
+ export interface VQLRef {
107
+ ref?: string;
108
+ var?: {
109
+ [k: string]: any;
110
+ };
111
+ }
112
+ type VQLRefRequired = VQLRef & Required<Pick<VQLRef, "ref">>;
113
+ type DeepPartial<T> = {
114
+ [P in keyof T]?: T[P] extends object ? DeepPartial<T[P]> : T[P];
115
+ };
116
+ export type VQL = (VQLRequest | RelationQuery) & VQLRef;
117
+ export type VQLR = VQL | (DeepPartial<VQL> & VQLRefRequired) | VQLRefRequired;
118
+ export {};
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=vql.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"vql.js","sourceRoot":"","sources":["../../src/types/vql.ts"],"names":[],"mappings":""}
@@ -0,0 +1,17 @@
1
+ import Ajv from "ajv";
2
+ import { VQL, VQLR } from "./types/vql.js";
3
+ export declare const ajv: Ajv;
4
+ export declare function validateRaw(query: VQLR): true | {
5
+ err: boolean;
6
+ msg: string;
7
+ c: number;
8
+ why: any;
9
+ rawQuery: never;
10
+ };
11
+ export declare function validateVql(query: VQL): true | {
12
+ err: boolean;
13
+ msg: string;
14
+ c: number;
15
+ why: any;
16
+ rawQuery: never;
17
+ };
package/dist/valid.js ADDED
@@ -0,0 +1,51 @@
1
+ import Ajv from "ajv";
2
+ import ajvFormat from "ajv-formats";
3
+ import { existsSync, readFileSync, writeFileSync } from "fs";
4
+ import { dirname } from "path";
5
+ import { VQLConfig } from "./config.js";
6
+ const fileUrl = dirname(import.meta.url).replace("file://", "") + "/schema.json";
7
+ let schema = null;
8
+ if (!existsSync(fileUrl)) {
9
+ const TJS = await import("typescript-json-schema");
10
+ const typesFile = dirname(import.meta.url).replace("file://", "") + "/types/vql.d.ts";
11
+ const program = TJS.getProgramFromFiles([typesFile], {
12
+ required: true
13
+ }, "./");
14
+ schema = TJS.generateSchema(program, "VQLR", {
15
+ required: true
16
+ });
17
+ writeFileSync(fileUrl, JSON.stringify(schema));
18
+ }
19
+ else {
20
+ schema = JSON.parse(readFileSync(fileUrl, "utf-8"));
21
+ }
22
+ export const ajv = new Ajv({
23
+ allowUnionTypes: true,
24
+ strict: false
25
+ });
26
+ ajvFormat(ajv);
27
+ const validVQLR = ajv.compile(schema);
28
+ const modSchema = schema;
29
+ modSchema.anyOf = [
30
+ {
31
+ "$ref": "#/definitions/VQL"
32
+ }
33
+ ];
34
+ const validVQL = ajv.compile(modSchema);
35
+ export function validateRaw(query) {
36
+ if (!validVQLR(query)) {
37
+ let why = validVQLR.errors;
38
+ why = VQLConfig.formatAjv ? ajv.errorsText(why) : why;
39
+ return { err: true, msg: "Invalid query raw", c: 400, why, rawQuery: query };
40
+ }
41
+ return true;
42
+ }
43
+ export function validateVql(query) {
44
+ if (!validVQL(query)) {
45
+ let why = validVQL.errors;
46
+ why = VQLConfig.formatAjv ? ajv.errorsText(why) : why;
47
+ return { err: true, msg: "Invalid query", c: 400, why, rawQuery: query };
48
+ }
49
+ return true;
50
+ }
51
+ //# sourceMappingURL=valid.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"valid.js","sourceRoot":"","sources":["../src/valid.ts"],"names":[],"mappings":"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"}
package/package.json ADDED
@@ -0,0 +1,33 @@
1
+ {
2
+ "name": "@wxn0brp/vql",
3
+ "version": "0.1.0",
4
+ "main": "dist/index.js",
5
+ "author": "wxn0brP",
6
+ "license": "MIT",
7
+ "type": "module",
8
+ "scripts": {
9
+ "build": "tsc && tsc-alias",
10
+ "test": "node dist/tests/index.js"
11
+ },
12
+ "files": [
13
+ "dist"
14
+ ],
15
+ "devDependencies": {
16
+ "@types/node": "^22.12.0",
17
+ "dotenv": "^16.5.0",
18
+ "source-map-support": "^0.5.21",
19
+ "tsc-alias": "^1.8.10",
20
+ "typescript": "^5.7.3"
21
+ },
22
+ "dependencies": {
23
+ "@wxn0brp/db": "^0.7.1",
24
+ "@wxn0brp/gate-warden": "^0.1.0",
25
+ "@wxn0brp/wts-deep-merge": "github:wxn0brp/ts-shared#dist-deep-merge",
26
+ "@wxn0brp/wts-logger": "github:wxn0brp/ts-shared#dist-logger",
27
+ "ajv": "^8.17.1",
28
+ "ajv-formats": "^3.0.1",
29
+ "js-yaml": "^4.1.0",
30
+ "json5": "^2.2.3",
31
+ "typescript-json-schema": "^0.65.1"
32
+ }
33
+ }