@lensjs/core 1.0.12 → 2.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 (93) hide show
  1. package/README.md +69 -0
  2. package/dist/abstracts/store.cjs +23 -0
  3. package/dist/abstracts/store.d.cts +7 -2
  4. package/dist/abstracts/store.d.ts +7 -2
  5. package/dist/abstracts/store.js +23 -0
  6. package/dist/core/api_controller.cjs +47 -4
  7. package/dist/core/api_controller.d.cts +7 -3
  8. package/dist/core/api_controller.d.ts +7 -3
  9. package/dist/core/api_controller.js +47 -4
  10. package/dist/core/lens.cjs +109 -10
  11. package/dist/core/lens.js +110 -11
  12. package/dist/exception-3AZsPtAg.d.ts +52 -0
  13. package/dist/exception-C69UCHPk.d.cts +52 -0
  14. package/dist/index.cjs +301 -19
  15. package/dist/index.d.cts +7 -2
  16. package/dist/index.d.ts +7 -2
  17. package/dist/index.js +296 -20
  18. package/dist/stores/better_sqlite.cjs +40 -6
  19. package/dist/stores/better_sqlite.d.cts +17 -1
  20. package/dist/stores/better_sqlite.d.ts +17 -1
  21. package/dist/stores/better_sqlite.js +41 -7
  22. package/dist/stores/index.cjs +40 -6
  23. package/dist/stores/index.js +41 -7
  24. package/dist/types/index.cjs +2 -0
  25. package/dist/types/index.d.cts +49 -2
  26. package/dist/types/index.d.ts +49 -2
  27. package/dist/types/index.js +2 -0
  28. package/dist/ui/assets/CacheActionBadge-3t8U516j.js +1 -0
  29. package/dist/ui/assets/CacheEntriesTable-BqLquILg.js +1 -0
  30. package/dist/ui/assets/CacheEntryContainer-B86waEsR.js +2 -0
  31. package/dist/ui/assets/CacheEntryDetails-Dm-oXALj.js +1 -0
  32. package/dist/ui/assets/CacheEntryDetailsContainer-BCyXGgkx.js +2 -0
  33. package/dist/ui/assets/ExceptionContainer-DSQBz5cb.js +2 -0
  34. package/dist/ui/assets/ExceptionDetails-gmpSQ_eu.js +16 -0
  35. package/dist/ui/assets/ExceptionDetailsContainer-BHIz-TUv.js +2 -0
  36. package/dist/ui/assets/ExceptionTable-BhrX9MSS.js +1 -0
  37. package/dist/ui/assets/LoadMore-26PcNWcP.js +1 -0
  38. package/dist/ui/assets/QueriesContainer-BSF-O4s3.js +2 -0
  39. package/dist/ui/assets/{QueryDetailsContainer-E7P-IO7f.js → QueryDetailsContainer-BjQM9QIb.js} +15 -15
  40. package/dist/ui/assets/QueryTable-szgIT5Uc.js +1 -0
  41. package/dist/ui/assets/RequestDetails-CvQhX-2F.js +1 -0
  42. package/dist/ui/assets/{RequestDetailsContainer-DuDo-IqS.js → RequestDetailsContainer-XYPFJFX0.js} +2 -2
  43. package/dist/ui/assets/RequestsContainer-D0QPK2Ii.js +2 -0
  44. package/dist/ui/assets/RequetsTable-6Fqchsrt.js +1 -0
  45. package/dist/ui/assets/{StatusCode-FQEjz7gK.js → StatusCode-CfVCLID2.js} +1 -1
  46. package/dist/ui/assets/TabbedDataViewer-Cl5ednx4.js +1 -0
  47. package/dist/ui/assets/{Table-DYaXk80S.js → Table-CGe8JwTO.js} +2 -2
  48. package/dist/ui/assets/columns-BFxCubt5.js +1 -0
  49. package/dist/ui/assets/columns-Cw7tw3Em.js +1 -0
  50. package/dist/ui/assets/columns-RiCoo9Ea.js +1 -0
  51. package/dist/ui/assets/{index-CpP2Ap5X.js → index-BRRKsoNv.js} +1 -1
  52. package/dist/ui/assets/index-BzFeZyjf.css +1 -0
  53. package/dist/ui/assets/{index-BS8XxorB.js → index-XoJlyTFO.js} +32 -22
  54. package/dist/ui/assets/useCacheEntries-SCADuxKq.js +1 -0
  55. package/dist/ui/assets/useExceptions-BMGL3nir.js +1 -0
  56. package/dist/ui/assets/useLensApi-BYyiIIZR.js +1 -0
  57. package/dist/ui/assets/{useLoadMore-CJltToLI.js → useLoadMore-CksOcXOF.js} +1 -1
  58. package/dist/ui/assets/useQueries-6nYr0oG5.js +1 -0
  59. package/dist/ui/index.html +2 -2
  60. package/dist/utils/async_context.cjs +144 -0
  61. package/dist/utils/async_context.d.cts +13 -0
  62. package/dist/utils/async_context.d.ts +13 -0
  63. package/dist/utils/async_context.js +108 -0
  64. package/dist/utils/event_emitter.cjs +5 -2
  65. package/dist/utils/event_emitter.d.cts +8 -1
  66. package/dist/utils/event_emitter.d.ts +8 -1
  67. package/dist/utils/event_emitter.js +3 -1
  68. package/dist/utils/exception.cjs +130 -0
  69. package/dist/utils/exception.d.cts +3 -0
  70. package/dist/utils/exception.d.ts +3 -0
  71. package/dist/utils/exception.js +91 -0
  72. package/dist/watchers/cache_watcher.cjs +107 -0
  73. package/dist/watchers/cache_watcher.d.cts +11 -0
  74. package/dist/watchers/cache_watcher.d.ts +11 -0
  75. package/dist/watchers/cache_watcher.js +84 -0
  76. package/dist/watchers/exception_watcher.cjs +108 -0
  77. package/dist/watchers/exception_watcher.d.cts +10 -0
  78. package/dist/watchers/exception_watcher.d.ts +10 -0
  79. package/dist/watchers/exception_watcher.js +75 -0
  80. package/dist/watchers/index.cjs +81 -0
  81. package/dist/watchers/index.d.cts +2 -0
  82. package/dist/watchers/index.d.ts +2 -0
  83. package/dist/watchers/index.js +69 -0
  84. package/package.json +8 -6
  85. package/dist/ui/assets/QueriesContainer-CAAsjjW5.js +0 -2
  86. package/dist/ui/assets/QueryTable-BcrtUssT.js +0 -1
  87. package/dist/ui/assets/RequestDetails-C2DZBu5H.js +0 -1
  88. package/dist/ui/assets/RequestsContainer-DK3hQVz9.js +0 -2
  89. package/dist/ui/assets/RequetsTable-DgP8p60b.js +0 -1
  90. package/dist/ui/assets/TabbedDataViewer-cBDdPwIz.js +0 -1
  91. package/dist/ui/assets/index-DzNHqeKh.css +0 -1
  92. package/dist/ui/assets/useLensApi-DG6atd6d.js +0 -1
  93. package/dist/ui/assets/useQueries-C8mDDDc6.js +0 -1
@@ -0,0 +1,107 @@
1
+ "use strict";
2
+ var __defProp = Object.defineProperty;
3
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
+ var __getOwnPropNames = Object.getOwnPropertyNames;
5
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
6
+ var __export = (target, all) => {
7
+ for (var name in all)
8
+ __defProp(target, name, { get: all[name], enumerable: true });
9
+ };
10
+ var __copyProps = (to, from, except, desc) => {
11
+ if (from && typeof from === "object" || typeof from === "function") {
12
+ for (let key of __getOwnPropNames(from))
13
+ if (!__hasOwnProp.call(to, key) && key !== except)
14
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
15
+ }
16
+ return to;
17
+ };
18
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
19
+
20
+ // src/watchers/cache_watcher.ts
21
+ var cache_watcher_exports = {};
22
+ __export(cache_watcher_exports, {
23
+ default: () => CacheWatcher
24
+ });
25
+ module.exports = __toCommonJS(cache_watcher_exports);
26
+
27
+ // src/context/container.ts
28
+ var Container = class {
29
+ static bindings = /* @__PURE__ */ new Map();
30
+ static singletons = /* @__PURE__ */ new Map();
31
+ static instances = /* @__PURE__ */ new Map();
32
+ static bind(key, factory) {
33
+ this.bindings.set(key, factory);
34
+ }
35
+ static singleton(key, factory) {
36
+ this.singletons.set(key, factory);
37
+ }
38
+ static make(key) {
39
+ if (this.instances.has(key)) {
40
+ return this.instances.get(key);
41
+ }
42
+ if (this.singletons.has(key)) {
43
+ const instance = this.singletons.get(key)();
44
+ this.instances.set(key, instance);
45
+ return instance;
46
+ }
47
+ if (this.bindings.has(key)) {
48
+ return this.bindings.get(key)();
49
+ }
50
+ throw new Error(`Service "${key}" is not bound in the container`);
51
+ }
52
+ static has(key) {
53
+ return this.bindings.has(key) || this.singletons.has(key) || this.instances.has(key);
54
+ }
55
+ static clear() {
56
+ this.bindings.clear();
57
+ this.singletons.clear();
58
+ this.instances.clear();
59
+ }
60
+ };
61
+
62
+ // src/context/context.ts
63
+ var getStore = () => {
64
+ return Container.make("store");
65
+ };
66
+
67
+ // src/core/watcher.ts
68
+ var Watcher = class {
69
+ };
70
+
71
+ // src/watchers/cache_watcher.ts
72
+ var CacheWatcher = class extends Watcher {
73
+ name = "cache" /* CACHE */;
74
+ async log(data) {
75
+ const payload = {
76
+ action: data.action,
77
+ data: this.normalizePayload(data),
78
+ requestId: data.requestId ?? "",
79
+ createdAt: data.createdAt
80
+ };
81
+ await getStore().save({
82
+ requestId: data.requestId ?? "",
83
+ type: this.name,
84
+ data: payload,
85
+ minimal_data: {
86
+ action: data.action,
87
+ key: payload.data.key,
88
+ createdAt: payload.createdAt
89
+ }
90
+ });
91
+ }
92
+ normalizePayload(data) {
93
+ let key = "";
94
+ let value = "";
95
+ if ("data" in data && typeof data.data === "object" && data.data !== null) {
96
+ if ("key" in data.data) {
97
+ key = String(data.data.key);
98
+ }
99
+ if ("value" in data.data) {
100
+ value = data.data.value;
101
+ }
102
+ } else if (typeof data.data === "string") {
103
+ value = data.data;
104
+ }
105
+ return { key, value };
106
+ }
107
+ };
@@ -0,0 +1,11 @@
1
+ import Watcher from '../core/watcher.cjs';
2
+ import { WatcherTypeEnum, CacheEntry } from '../types/index.cjs';
3
+ import 'sql-formatter';
4
+
5
+ declare class CacheWatcher extends Watcher {
6
+ name: WatcherTypeEnum;
7
+ log(data: CacheEntry): Promise<void>;
8
+ private normalizePayload;
9
+ }
10
+
11
+ export { CacheWatcher as default };
@@ -0,0 +1,11 @@
1
+ import Watcher from '../core/watcher.js';
2
+ import { WatcherTypeEnum, CacheEntry } from '../types/index.js';
3
+ import 'sql-formatter';
4
+
5
+ declare class CacheWatcher extends Watcher {
6
+ name: WatcherTypeEnum;
7
+ log(data: CacheEntry): Promise<void>;
8
+ private normalizePayload;
9
+ }
10
+
11
+ export { CacheWatcher as default };
@@ -0,0 +1,84 @@
1
+ // src/context/container.ts
2
+ var Container = class {
3
+ static bindings = /* @__PURE__ */ new Map();
4
+ static singletons = /* @__PURE__ */ new Map();
5
+ static instances = /* @__PURE__ */ new Map();
6
+ static bind(key, factory) {
7
+ this.bindings.set(key, factory);
8
+ }
9
+ static singleton(key, factory) {
10
+ this.singletons.set(key, factory);
11
+ }
12
+ static make(key) {
13
+ if (this.instances.has(key)) {
14
+ return this.instances.get(key);
15
+ }
16
+ if (this.singletons.has(key)) {
17
+ const instance = this.singletons.get(key)();
18
+ this.instances.set(key, instance);
19
+ return instance;
20
+ }
21
+ if (this.bindings.has(key)) {
22
+ return this.bindings.get(key)();
23
+ }
24
+ throw new Error(`Service "${key}" is not bound in the container`);
25
+ }
26
+ static has(key) {
27
+ return this.bindings.has(key) || this.singletons.has(key) || this.instances.has(key);
28
+ }
29
+ static clear() {
30
+ this.bindings.clear();
31
+ this.singletons.clear();
32
+ this.instances.clear();
33
+ }
34
+ };
35
+
36
+ // src/context/context.ts
37
+ var getStore = () => {
38
+ return Container.make("store");
39
+ };
40
+
41
+ // src/core/watcher.ts
42
+ var Watcher = class {
43
+ };
44
+
45
+ // src/watchers/cache_watcher.ts
46
+ var CacheWatcher = class extends Watcher {
47
+ name = "cache" /* CACHE */;
48
+ async log(data) {
49
+ const payload = {
50
+ action: data.action,
51
+ data: this.normalizePayload(data),
52
+ requestId: data.requestId ?? "",
53
+ createdAt: data.createdAt
54
+ };
55
+ await getStore().save({
56
+ requestId: data.requestId ?? "",
57
+ type: this.name,
58
+ data: payload,
59
+ minimal_data: {
60
+ action: data.action,
61
+ key: payload.data.key,
62
+ createdAt: payload.createdAt
63
+ }
64
+ });
65
+ }
66
+ normalizePayload(data) {
67
+ let key = "";
68
+ let value = "";
69
+ if ("data" in data && typeof data.data === "object" && data.data !== null) {
70
+ if ("key" in data.data) {
71
+ key = String(data.data.key);
72
+ }
73
+ if ("value" in data.data) {
74
+ value = data.data.value;
75
+ }
76
+ } else if (typeof data.data === "string") {
77
+ value = data.data;
78
+ }
79
+ return { key, value };
80
+ }
81
+ };
82
+ export {
83
+ CacheWatcher as default
84
+ };
@@ -0,0 +1,108 @@
1
+ "use strict";
2
+ var __create = Object.create;
3
+ var __defProp = Object.defineProperty;
4
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
5
+ var __getOwnPropNames = Object.getOwnPropertyNames;
6
+ var __getProtoOf = Object.getPrototypeOf;
7
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
8
+ var __export = (target, all) => {
9
+ for (var name in all)
10
+ __defProp(target, name, { get: all[name], enumerable: true });
11
+ };
12
+ var __copyProps = (to, from, except, desc) => {
13
+ if (from && typeof from === "object" || typeof from === "function") {
14
+ for (let key of __getOwnPropNames(from))
15
+ if (!__hasOwnProp.call(to, key) && key !== except)
16
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
17
+ }
18
+ return to;
19
+ };
20
+ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
21
+ // If the importer is in node compatibility mode or this is not an ESM
22
+ // file that has been converted to a CommonJS file using a Babel-
23
+ // compatible transform (i.e. "__esModule" has not been set), then set
24
+ // "default" to the CommonJS "module.exports" for node compatibility.
25
+ isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
26
+ mod
27
+ ));
28
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
29
+
30
+ // src/watchers/exception_watcher.ts
31
+ var exception_watcher_exports = {};
32
+ __export(exception_watcher_exports, {
33
+ default: () => ExceptionWatcher
34
+ });
35
+ module.exports = __toCommonJS(exception_watcher_exports);
36
+
37
+ // src/context/container.ts
38
+ var Container = class {
39
+ static bindings = /* @__PURE__ */ new Map();
40
+ static singletons = /* @__PURE__ */ new Map();
41
+ static instances = /* @__PURE__ */ new Map();
42
+ static bind(key, factory) {
43
+ this.bindings.set(key, factory);
44
+ }
45
+ static singleton(key, factory) {
46
+ this.singletons.set(key, factory);
47
+ }
48
+ static make(key) {
49
+ if (this.instances.has(key)) {
50
+ return this.instances.get(key);
51
+ }
52
+ if (this.singletons.has(key)) {
53
+ const instance = this.singletons.get(key)();
54
+ this.instances.set(key, instance);
55
+ return instance;
56
+ }
57
+ if (this.bindings.has(key)) {
58
+ return this.bindings.get(key)();
59
+ }
60
+ throw new Error(`Service "${key}" is not bound in the container`);
61
+ }
62
+ static has(key) {
63
+ return this.bindings.has(key) || this.singletons.has(key) || this.instances.has(key);
64
+ }
65
+ static clear() {
66
+ this.bindings.clear();
67
+ this.singletons.clear();
68
+ this.instances.clear();
69
+ }
70
+ };
71
+
72
+ // src/context/context.ts
73
+ var getStore = () => {
74
+ return Container.make("store");
75
+ };
76
+
77
+ // src/core/watcher.ts
78
+ var Watcher = class {
79
+ };
80
+
81
+ // src/utils/index.ts
82
+ var import_luxon = require("luxon");
83
+ var import_sql_formatter = require("sql-formatter");
84
+ var import_crypto = require("crypto");
85
+ var import_url = require("url");
86
+ var path = __toESM(require("path"), 1);
87
+ var generateRandomUuid = () => {
88
+ return (0, import_crypto.randomUUID)();
89
+ };
90
+
91
+ // src/watchers/exception_watcher.ts
92
+ var ExceptionWatcher = class extends Watcher {
93
+ name = "exception" /* EXCEPTION */;
94
+ async log(payload) {
95
+ await getStore().save({
96
+ id: generateRandomUuid(),
97
+ type: "exception" /* EXCEPTION */,
98
+ requestId: payload.requestId,
99
+ timestamp: payload.createdAt,
100
+ data: payload,
101
+ minimal_data: {
102
+ name: payload.name,
103
+ message: payload.message,
104
+ createdAt: payload.createdAt
105
+ }
106
+ });
107
+ }
108
+ };
@@ -0,0 +1,10 @@
1
+ import Watcher from '../core/watcher.cjs';
2
+ import { WatcherTypeEnum, ExceptionEntry } from '../types/index.cjs';
3
+ import 'sql-formatter';
4
+
5
+ declare class ExceptionWatcher extends Watcher {
6
+ name: WatcherTypeEnum;
7
+ log(payload: ExceptionEntry): Promise<void>;
8
+ }
9
+
10
+ export { ExceptionWatcher as default };
@@ -0,0 +1,10 @@
1
+ import Watcher from '../core/watcher.js';
2
+ import { WatcherTypeEnum, ExceptionEntry } from '../types/index.js';
3
+ import 'sql-formatter';
4
+
5
+ declare class ExceptionWatcher extends Watcher {
6
+ name: WatcherTypeEnum;
7
+ log(payload: ExceptionEntry): Promise<void>;
8
+ }
9
+
10
+ export { ExceptionWatcher as default };
@@ -0,0 +1,75 @@
1
+ // src/context/container.ts
2
+ var Container = class {
3
+ static bindings = /* @__PURE__ */ new Map();
4
+ static singletons = /* @__PURE__ */ new Map();
5
+ static instances = /* @__PURE__ */ new Map();
6
+ static bind(key, factory) {
7
+ this.bindings.set(key, factory);
8
+ }
9
+ static singleton(key, factory) {
10
+ this.singletons.set(key, factory);
11
+ }
12
+ static make(key) {
13
+ if (this.instances.has(key)) {
14
+ return this.instances.get(key);
15
+ }
16
+ if (this.singletons.has(key)) {
17
+ const instance = this.singletons.get(key)();
18
+ this.instances.set(key, instance);
19
+ return instance;
20
+ }
21
+ if (this.bindings.has(key)) {
22
+ return this.bindings.get(key)();
23
+ }
24
+ throw new Error(`Service "${key}" is not bound in the container`);
25
+ }
26
+ static has(key) {
27
+ return this.bindings.has(key) || this.singletons.has(key) || this.instances.has(key);
28
+ }
29
+ static clear() {
30
+ this.bindings.clear();
31
+ this.singletons.clear();
32
+ this.instances.clear();
33
+ }
34
+ };
35
+
36
+ // src/context/context.ts
37
+ var getStore = () => {
38
+ return Container.make("store");
39
+ };
40
+
41
+ // src/core/watcher.ts
42
+ var Watcher = class {
43
+ };
44
+
45
+ // src/utils/index.ts
46
+ import { DateTime } from "luxon";
47
+ import { format } from "sql-formatter";
48
+ import { randomUUID } from "crypto";
49
+ import { fileURLToPath } from "url";
50
+ import * as path from "path";
51
+ var generateRandomUuid = () => {
52
+ return randomUUID();
53
+ };
54
+
55
+ // src/watchers/exception_watcher.ts
56
+ var ExceptionWatcher = class extends Watcher {
57
+ name = "exception" /* EXCEPTION */;
58
+ async log(payload) {
59
+ await getStore().save({
60
+ id: generateRandomUuid(),
61
+ type: "exception" /* EXCEPTION */,
62
+ requestId: payload.requestId,
63
+ timestamp: payload.createdAt,
64
+ data: payload,
65
+ minimal_data: {
66
+ name: payload.name,
67
+ message: payload.message,
68
+ createdAt: payload.createdAt
69
+ }
70
+ });
71
+ }
72
+ };
73
+ export {
74
+ ExceptionWatcher as default
75
+ };
@@ -1,7 +1,9 @@
1
1
  "use strict";
2
+ var __create = Object.create;
2
3
  var __defProp = Object.defineProperty;
3
4
  var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
5
  var __getOwnPropNames = Object.getOwnPropertyNames;
6
+ var __getProtoOf = Object.getPrototypeOf;
5
7
  var __hasOwnProp = Object.prototype.hasOwnProperty;
6
8
  var __export = (target, all) => {
7
9
  for (var name in all)
@@ -15,11 +17,21 @@ var __copyProps = (to, from, except, desc) => {
15
17
  }
16
18
  return to;
17
19
  };
20
+ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
21
+ // If the importer is in node compatibility mode or this is not an ESM
22
+ // file that has been converted to a CommonJS file using a Babel-
23
+ // compatible transform (i.e. "__esModule" has not been set), then set
24
+ // "default" to the CommonJS "module.exports" for node compatibility.
25
+ isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
26
+ mod
27
+ ));
18
28
  var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
19
29
 
20
30
  // src/watchers/index.ts
21
31
  var watchers_exports = {};
22
32
  __export(watchers_exports, {
33
+ CacheWatcher: () => CacheWatcher,
34
+ ExceptionWatcher: () => ExceptionWatcher,
23
35
  QueryWatcher: () => QueryWatcher,
24
36
  RequestWatcher: () => RequestWatcher
25
37
  });
@@ -104,8 +116,77 @@ var RequestWatcher = class extends Watcher {
104
116
  });
105
117
  }
106
118
  };
119
+
120
+ // src/watchers/cache_watcher.ts
121
+ var CacheWatcher = class extends Watcher {
122
+ name = "cache" /* CACHE */;
123
+ async log(data) {
124
+ const payload = {
125
+ action: data.action,
126
+ data: this.normalizePayload(data),
127
+ requestId: data.requestId ?? "",
128
+ createdAt: data.createdAt
129
+ };
130
+ await getStore().save({
131
+ requestId: data.requestId ?? "",
132
+ type: this.name,
133
+ data: payload,
134
+ minimal_data: {
135
+ action: data.action,
136
+ key: payload.data.key,
137
+ createdAt: payload.createdAt
138
+ }
139
+ });
140
+ }
141
+ normalizePayload(data) {
142
+ let key = "";
143
+ let value = "";
144
+ if ("data" in data && typeof data.data === "object" && data.data !== null) {
145
+ if ("key" in data.data) {
146
+ key = String(data.data.key);
147
+ }
148
+ if ("value" in data.data) {
149
+ value = data.data.value;
150
+ }
151
+ } else if (typeof data.data === "string") {
152
+ value = data.data;
153
+ }
154
+ return { key, value };
155
+ }
156
+ };
157
+
158
+ // src/utils/index.ts
159
+ var import_luxon = require("luxon");
160
+ var import_sql_formatter = require("sql-formatter");
161
+ var import_crypto = require("crypto");
162
+ var import_url = require("url");
163
+ var path = __toESM(require("path"), 1);
164
+ var generateRandomUuid = () => {
165
+ return (0, import_crypto.randomUUID)();
166
+ };
167
+
168
+ // src/watchers/exception_watcher.ts
169
+ var ExceptionWatcher = class extends Watcher {
170
+ name = "exception" /* EXCEPTION */;
171
+ async log(payload) {
172
+ await getStore().save({
173
+ id: generateRandomUuid(),
174
+ type: "exception" /* EXCEPTION */,
175
+ requestId: payload.requestId,
176
+ timestamp: payload.createdAt,
177
+ data: payload,
178
+ minimal_data: {
179
+ name: payload.name,
180
+ message: payload.message,
181
+ createdAt: payload.createdAt
182
+ }
183
+ });
184
+ }
185
+ };
107
186
  // Annotate the CommonJS export names for ESM import in node:
108
187
  0 && (module.exports = {
188
+ CacheWatcher,
189
+ ExceptionWatcher,
109
190
  QueryWatcher,
110
191
  RequestWatcher
111
192
  });
@@ -1,5 +1,7 @@
1
1
  export { default as QueryWatcher } from './query_watcher.cjs';
2
2
  export { default as RequestWatcher } from './request_watcher.cjs';
3
+ export { default as CacheWatcher } from './cache_watcher.cjs';
4
+ export { default as ExceptionWatcher } from './exception_watcher.cjs';
3
5
  import '../core/watcher.cjs';
4
6
  import '../types/index.cjs';
5
7
  import 'sql-formatter';
@@ -1,5 +1,7 @@
1
1
  export { default as QueryWatcher } from './query_watcher.js';
2
2
  export { default as RequestWatcher } from './request_watcher.js';
3
+ export { default as CacheWatcher } from './cache_watcher.js';
4
+ export { default as ExceptionWatcher } from './exception_watcher.js';
3
5
  import '../core/watcher.js';
4
6
  import '../types/index.js';
5
7
  import 'sql-formatter';
@@ -77,7 +77,76 @@ var RequestWatcher = class extends Watcher {
77
77
  });
78
78
  }
79
79
  };
80
+
81
+ // src/watchers/cache_watcher.ts
82
+ var CacheWatcher = class extends Watcher {
83
+ name = "cache" /* CACHE */;
84
+ async log(data) {
85
+ const payload = {
86
+ action: data.action,
87
+ data: this.normalizePayload(data),
88
+ requestId: data.requestId ?? "",
89
+ createdAt: data.createdAt
90
+ };
91
+ await getStore().save({
92
+ requestId: data.requestId ?? "",
93
+ type: this.name,
94
+ data: payload,
95
+ minimal_data: {
96
+ action: data.action,
97
+ key: payload.data.key,
98
+ createdAt: payload.createdAt
99
+ }
100
+ });
101
+ }
102
+ normalizePayload(data) {
103
+ let key = "";
104
+ let value = "";
105
+ if ("data" in data && typeof data.data === "object" && data.data !== null) {
106
+ if ("key" in data.data) {
107
+ key = String(data.data.key);
108
+ }
109
+ if ("value" in data.data) {
110
+ value = data.data.value;
111
+ }
112
+ } else if (typeof data.data === "string") {
113
+ value = data.data;
114
+ }
115
+ return { key, value };
116
+ }
117
+ };
118
+
119
+ // src/utils/index.ts
120
+ import { DateTime } from "luxon";
121
+ import { format } from "sql-formatter";
122
+ import { randomUUID } from "crypto";
123
+ import { fileURLToPath } from "url";
124
+ import * as path from "path";
125
+ var generateRandomUuid = () => {
126
+ return randomUUID();
127
+ };
128
+
129
+ // src/watchers/exception_watcher.ts
130
+ var ExceptionWatcher = class extends Watcher {
131
+ name = "exception" /* EXCEPTION */;
132
+ async log(payload) {
133
+ await getStore().save({
134
+ id: generateRandomUuid(),
135
+ type: "exception" /* EXCEPTION */,
136
+ requestId: payload.requestId,
137
+ timestamp: payload.createdAt,
138
+ data: payload,
139
+ minimal_data: {
140
+ name: payload.name,
141
+ message: payload.message,
142
+ createdAt: payload.createdAt
143
+ }
144
+ });
145
+ }
146
+ };
80
147
  export {
148
+ CacheWatcher,
149
+ ExceptionWatcher,
81
150
  QueryWatcher,
82
151
  RequestWatcher
83
152
  };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@lensjs/core",
3
- "version": "1.0.12",
3
+ "version": "2.1.0",
4
4
  "type": "module",
5
5
  "main": "./dist/index.js",
6
6
  "types": "./dist/index.d.ts",
@@ -17,18 +17,20 @@
17
17
  "access": "public"
18
18
  },
19
19
  "devDependencies": {
20
- "@tailwindcss/vite": "^4.1.12",
20
+ "@tailwindcss/vite": "^4.1.13",
21
21
  "@types/luxon": "^3.7.1",
22
+ "@types/stack-utils": "^2.0.3",
22
23
  "cross-env": "^10.0.0",
23
24
  "vitest": "^3.2.4",
24
25
  "@lensjs/typescript-config": "1.0.12"
25
26
  },
26
27
  "dependencies": {
27
28
  "emittery": "^1.2.0",
28
- "libsql": "^0.5.20",
29
- "luxon": "^3.7.1",
29
+ "libsql": "^0.5.22",
30
+ "luxon": "^3.7.2",
30
31
  "rimraf": "^6.0.1",
31
- "sql-formatter": "^15.6.6",
32
+ "sql-formatter": "^15.6.8",
33
+ "stack-utils": "^2.0.6",
32
34
  "tailwind-merge": "^3.3.1",
33
35
  "@lensjs/date": "1.0.12"
34
36
  },
@@ -38,6 +40,6 @@
38
40
  "build:ui": "npm --prefix src/ui run prod",
39
41
  "clean": "rimraf dist",
40
42
  "postbuild": "node copy-front-build.cjs",
41
- "test": "vitest"
43
+ "test": "vitest run"
42
44
  }
43
45
  }
@@ -1,2 +0,0 @@
1
- const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["./QueryTable-BcrtUssT.js","./index-BS8XxorB.js","./index-DzNHqeKh.css","./Table-DYaXk80S.js","./index-CpP2Ap5X.js"])))=>i.map(i=>d[i]);
2
- import{r as t,j as s,_ as a}from"./index-BS8XxorB.js";import{u as i}from"./useQueries-C8mDDDc6.js";import{u}from"./useLoadMore-CJltToLI.js";import"./useLensApi-DG6atd6d.js";const m=t.lazy(()=>a(()=>import("./QueryTable-BcrtUssT.js"),__vite__mapDeps([0,1,2,3,4]),import.meta.url)),l=()=>{const{loadMoreRequests:o,fetchQueries:r}=i(),e=u({paginatedPage:o});return t.useEffect(()=>{r()},[]),console.log("data",e.data),s.jsx(m,{hasMoreObject:e})};export{l as default};
@@ -1 +0,0 @@
1
- import{q as r,k as o,j as e,L as i}from"./index-BS8XxorB.js";import{C as l,T as d,L as c}from"./Table-DYaXk80S.js";import{h as x}from"./index-CpP2Ap5X.js";function m(a){return e.jsx("span",{className:"text-red-600 dark:text-red-400 font-mono",children:a})}const u=()=>{const a=r(o());return[{name:"Query",render:t=>e.jsx("div",{className:"max-w-xl",children:e.jsx("code",{className:"text-sm font-mono text-slate-800 dark:text-slate-300 leading-relaxed line-clamp-1",title:t.data.query,children:m(t.data.query)})})},{name:"Duration",render:t=>e.jsx("div",{className:"col-span-1 text-right",children:e.jsx("span",{className:"text-sm text-slate-600 dark:text-slate-400 font-mono",children:t.data.duration})})},{name:"Provider",render:t=>e.jsx("div",{className:"col-span-2 text-right",children:e.jsx("span",{className:"text-sm text-slate-600 dark:text-slate-400 font-mono",children:t.data.type})})},{name:"Happened",render:t=>{const{label:s,exact:n}=x(t.data.createdAt);return e.jsx("span",{className:"text-nowrap",title:n,children:s})},position:"end",class:"min-w-32"},{name:"Actions",render:t=>e.jsx(i,{to:`${a.QUERIES}/${t.id}`,className:"transition-colors duration-100 hover:text-white",children:e.jsx(l,{size:20})}),position:"end"}]},f=({hasMoreObject:a})=>e.jsxs("div",{className:"w-full",children:[e.jsx("div",{className:"overflow-x-auto",children:e.jsx(d,{columns:u(),data:a.data})}),e.jsx(c,{paginatedPage:a})]});export{f as default};
@@ -1 +0,0 @@
1
- import{r as l,j as t}from"./index-BS8XxorB.js";import{D as d,T as o}from"./TabbedDataViewer-cBDdPwIz.js";import{f as m}from"./index-CpP2Ap5X.js";import{M as i,S as n}from"./StatusCode-FQEjz7gK.js";const x=({request:a})=>{const e=l.useMemo(()=>m(a?.data?.createdAt),[a?.data?.createdAt]);if(!a||!a.data)return t.jsx(d,{title:"Request Details",items:[],emptyMessage:"No request data available"});const s=()=>a?.data?.headers?.host||"Unknown",r=l.useMemo(()=>[{label:"Time",value:e,className:"text-gray-900 dark:text-gray-100"},{label:"Hostname",value:s(),className:"text-gray-900 dark:text-gray-100 font-mono"},{label:"Method",value:a.data.method?t.jsx(i,{method:a.data.method}):"Unknown"},{label:"Request ID",value:a.data.id||"N/A",className:"text-gray-700 dark:text-gray-300 font-mono text-sm"},{label:"Path",value:a.data.path||"N/A",className:"text-gray-900 dark:text-gray-100 font-mono"},{label:"Status",value:a.data.status?t.jsx(n,{status:a.data.status}):"N/A"},{label:"Duration",value:a.data.duration||"N/A",className:"text-gray-900 dark:text-gray-100 font-medium"},{label:"IP Address",value:a.data.ip||"N/A",className:"text-gray-900 dark:text-gray-100 font-mono"}],[a.data,e]);return t.jsx(d,{title:"Request Details",items:r})},u=({request:a})=>{const e=[{id:"payload",label:"Payload",data:a.data.body},{id:"headers",label:"Headers",data:a.data.headers}],s=[{id:"response-body",label:"Body",data:a.data.response.json},{id:"response-headers",label:"Headers",data:a.data.response.headers}];return t.jsxs("div",{className:"flex flex-col gap-3",children:[t.jsx(x,{request:a}),a.data.user&&t.jsx(d,{title:"User",items:[{label:"ID",value:a?.data?.user?.id},{label:"Email",value:a?.data?.user?.email},{label:"Name",value:a?.data?.user?.name}]}),t.jsx(o,{tabs:e,title:"Request Data",defaultActiveTab:"payload"}),t.jsx(o,{tabs:s,title:"Response Data",defaultActiveTab:"response-body"})]})};export{u as default};