@superblocksteam/library 2.0.34 → 2.0.35-next.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 (50) hide show
  1. package/README.md +1 -1
  2. package/dist/build-manifest-BNJahcH4.js +6 -0
  3. package/dist/build-manifest-BNJahcH4.js.map +1 -0
  4. package/dist/devtools-consolidated-BJ2tPWBk.js +212 -0
  5. package/dist/devtools-consolidated-BJ2tPWBk.js.map +1 -0
  6. package/dist/early-console-buffer-DWTLgla0.js +109 -0
  7. package/dist/early-console-buffer-DWTLgla0.js.map +1 -0
  8. package/dist/index.css +16 -34148
  9. package/dist/index.css.map +1 -0
  10. package/dist/index.d.ts +1388 -0
  11. package/dist/index.d.ts.map +1 -0
  12. package/dist/index.js +11414 -185
  13. package/dist/index.js.map +1 -1
  14. package/dist/logs-ivxzrJPP.js +31 -0
  15. package/dist/logs-ivxzrJPP.js.map +1 -0
  16. package/dist/root-store-OkumbU1B.js +4564 -0
  17. package/dist/root-store-OkumbU1B.js.map +1 -0
  18. package/dist/root-store-Z42RSY5l.js +4 -0
  19. package/dist/utils-BCrSLIhM.js +3 -0
  20. package/dist/utils-CCBWAYIM.js +45 -0
  21. package/dist/utils-CCBWAYIM.js.map +1 -0
  22. package/package.json +15 -28
  23. package/dist/allPaths-BiumKu08.js +0 -17
  24. package/dist/allPaths-BiumKu08.js.map +0 -1
  25. package/dist/allPaths-DVZye-qX.js +0 -17
  26. package/dist/allPaths-DVZye-qX.js.map +0 -1
  27. package/dist/allPathsLoader-BmHfoSD_.js +0 -22
  28. package/dist/allPathsLoader-BmHfoSD_.js.map +0 -1
  29. package/dist/allPathsLoader-DRmGASlD.js +0 -22
  30. package/dist/allPathsLoader-DRmGASlD.js.map +0 -1
  31. package/dist/devtools-consolidated-C22ZSOdp.js +0 -590
  32. package/dist/devtools-consolidated-C22ZSOdp.js.map +0 -1
  33. package/dist/icons-BPtVE6ue.js +0 -58
  34. package/dist/icons-BPtVE6ue.js.map +0 -1
  35. package/dist/index-BxzKdlqH.js +0 -1353
  36. package/dist/index-BxzKdlqH.js.map +0 -1
  37. package/dist/index-CdXfIz8N.js +0 -216319
  38. package/dist/index-CdXfIz8N.js.map +0 -1
  39. package/dist/index-DIJYif9G.js +0 -1341
  40. package/dist/index-DIJYif9G.js.map +0 -1
  41. package/dist/index-DIn-fanT.js +0 -1353
  42. package/dist/index-DIn-fanT.js.map +0 -1
  43. package/dist/index-LHtbj0-V.js +0 -1341
  44. package/dist/index-LHtbj0-V.js.map +0 -1
  45. package/dist/logs-BfdjooW0.js +0 -1475
  46. package/dist/logs-BfdjooW0.js.map +0 -1
  47. package/dist/splitPathsBySizeLoader-De1h8uYk.js +0 -34
  48. package/dist/splitPathsBySizeLoader-De1h8uYk.js.map +0 -1
  49. package/dist/splitPathsBySizeLoader-Df5pOIDq.js +0 -34
  50. package/dist/splitPathsBySizeLoader-Df5pOIDq.js.map +0 -1
package/README.md CHANGED
@@ -63,7 +63,7 @@ If you make changes to the library, you need to rebuild, reinstall, and rerun th
63
63
 
64
64
  ### Running a code mode app (automated)
65
65
 
66
- A shortcut to above is to run `pnpm watch-lib-template` from the root of the workspace, which compiles the library and runs the dev server for `packages/demo-apps/code-demo-app`. This will also watch for changes in the `library` package and re-build, re-install, and re-run server for you.
66
+ A shortcut to above is to run `pnpm watch-lib-template` from the root of the workspace, which compiles the library and runs the dev server for the active demo app (configured in `packages/demo-apps/config.json`). This will also watch for changes in the `library` package and re-build, re-install, and re-run server for you.
67
67
 
68
68
  ### Running a code mode app in editor
69
69
 
@@ -0,0 +1,6 @@
1
+ //#region src/lib/user-facing/build-manifest.js
2
+ var build_manifest_default = {};
3
+
4
+ //#endregion
5
+ export { build_manifest_default as default };
6
+ //# sourceMappingURL=build-manifest-BNJahcH4.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"build-manifest-BNJahcH4.js","names":[],"sources":["../src/lib/user-facing/build-manifest.js"],"sourcesContent":["// This is a placeholder file that is replaced with the actual build manifest during the build process\n// This stub will be used primarily in tests and for the dev server\nexport default {};\n"],"mappings":";AAEA,6BAAe,EAAE"}
@@ -0,0 +1,212 @@
1
+ import React, { useCallback, useEffect } from "react";
2
+ import { Fragment, jsx, jsxs } from "react/jsx-runtime";
3
+ import { makeAutoObservable, toJS } from "mobx";
4
+ import { observer } from "mobx-react-lite";
5
+ import { createPortal } from "react-dom";
6
+ import { JsonView } from "react-json-view-lite";
7
+ import "react-json-view-lite/dist/index.css";
8
+
9
+ //#region src/lib/internal-details/lib/devtools/serialize-store-data.tsx
10
+ function serializeStoreData(stores_) {
11
+ try {
12
+ const stores = toJS(stores_);
13
+ const seen = /* @__PURE__ */ new Set();
14
+ function serialize(obj) {
15
+ if (obj === null || typeof obj !== "object") return obj;
16
+ if (seen.has(obj)) return "[Already Seen]";
17
+ seen.add(obj);
18
+ if (Array.isArray(obj)) return obj.map(serialize);
19
+ const result = {};
20
+ for (const key of Object.keys(obj)) {
21
+ if (typeof obj[key] === "function") result[key] = "[Function]";
22
+ try {
23
+ const descriptor = Object.getOwnPropertyDescriptor(obj, key);
24
+ if (descriptor && descriptor.get) try {
25
+ result[key] = serialize(obj[key]);
26
+ } catch {
27
+ result[key] = "[Getter Error]";
28
+ }
29
+ else result[key] = serialize(obj[key]);
30
+ } catch {
31
+ result[key] = "[Access Error]";
32
+ }
33
+ }
34
+ if (obj.constructor && obj.constructor.name !== "Object") result.__type__ = obj.constructor.name;
35
+ return result;
36
+ }
37
+ return serialize(stores);
38
+ } catch (error) {
39
+ return { error: `Error serializing data: ${error instanceof Error ? error.message : "Unknown error"}` };
40
+ }
41
+ }
42
+
43
+ //#endregion
44
+ //#region src/lib/internal-details/lib/devtools/devtools-consolidated.tsx
45
+ var DevToolsState = class {
46
+ isVisible = false;
47
+ constructor() {
48
+ makeAutoObservable(this);
49
+ }
50
+ show() {
51
+ this.isVisible = true;
52
+ }
53
+ hide() {
54
+ this.isVisible = false;
55
+ }
56
+ toggle() {
57
+ this.isVisible = !this.isVisible;
58
+ }
59
+ };
60
+ const devToolsState = new DevToolsState();
61
+ var KeyboardShortcutManager = class {
62
+ isListening = false;
63
+ shortcutKeys = {
64
+ key: "KeyD",
65
+ ctrlKey: true,
66
+ shiftKey: true,
67
+ altKey: false
68
+ };
69
+ constructor() {
70
+ this.handleKeyDown = this.handleKeyDown.bind(this);
71
+ }
72
+ handleKeyDown(event) {
73
+ const { ctrlKey, shiftKey, altKey, metaKey } = event;
74
+ const isModifierMatch = (ctrlKey || metaKey) && shiftKey && !altKey;
75
+ const isKeyMatch = event.code === this.shortcutKeys.key;
76
+ if (isModifierMatch && isKeyMatch) {
77
+ event.preventDefault();
78
+ event.stopPropagation();
79
+ devToolsState.toggle();
80
+ }
81
+ }
82
+ handleEscapeKey = (event) => {
83
+ if (event.key === "Escape" && devToolsState.isVisible) {
84
+ event.preventDefault();
85
+ devToolsState.hide();
86
+ }
87
+ };
88
+ startListening() {
89
+ if (this.isListening) return;
90
+ this.isListening = true;
91
+ document.addEventListener("keydown", this.handleKeyDown, true);
92
+ document.addEventListener("keydown", this.handleEscapeKey, true);
93
+ }
94
+ stopListening() {
95
+ if (!this.isListening) return;
96
+ this.isListening = false;
97
+ document.removeEventListener("keydown", this.handleKeyDown, true);
98
+ document.removeEventListener("keydown", this.handleEscapeKey, true);
99
+ }
100
+ updateShortcut(options) {
101
+ this.shortcutKeys = {
102
+ ...this.shortcutKeys,
103
+ ...options
104
+ };
105
+ }
106
+ };
107
+ const keyboardShortcutManager = new KeyboardShortcutManager();
108
+ let registeredStores = {};
109
+ function setRegisteredStores(stores) {
110
+ registeredStores = stores;
111
+ }
112
+ function getRegisteredStores() {
113
+ return registeredStores;
114
+ }
115
+ const overlayStyles = {
116
+ position: "fixed",
117
+ top: 0,
118
+ left: 0,
119
+ right: 0,
120
+ bottom: 0,
121
+ backgroundColor: "rgba(0, 0, 0, 0.5)",
122
+ zIndex: 9999
123
+ };
124
+ const panelStyles = {
125
+ position: "fixed",
126
+ top: "50%",
127
+ left: "50%",
128
+ transform: "translate(-50%, -50%)",
129
+ width: "90vw",
130
+ height: "90vh",
131
+ backgroundColor: "#fff",
132
+ zIndex: 1e4,
133
+ display: "flex",
134
+ flexDirection: "column",
135
+ borderRadius: 12
136
+ };
137
+ const headerStyles = {
138
+ padding: 12,
139
+ borderBottom: "1px solid #ccc",
140
+ display: "flex",
141
+ justifyContent: "space-between",
142
+ alignItems: "center"
143
+ };
144
+ const closeButtonStyles = {
145
+ background: "none",
146
+ border: "none",
147
+ cursor: "pointer"
148
+ };
149
+ const contentStyles = {
150
+ padding: 8,
151
+ display: "flex",
152
+ flex: 1,
153
+ overflow: "auto",
154
+ flexDirection: "column"
155
+ };
156
+ const DevToolsPanelContent = observer(() => {
157
+ const stores = getRegisteredStores();
158
+ const storeNames = Object.keys(stores);
159
+ const serializedData = serializeStoreData(stores);
160
+ const onClose = useCallback(() => {
161
+ devToolsState.hide();
162
+ }, []);
163
+ return createPortal(/* @__PURE__ */ jsxs(Fragment, { children: [/* @__PURE__ */ jsx("div", {
164
+ style: overlayStyles,
165
+ onClick: onClose
166
+ }), /* @__PURE__ */ jsxs("div", {
167
+ style: panelStyles,
168
+ children: [/* @__PURE__ */ jsxs("div", {
169
+ style: headerStyles,
170
+ children: [/* @__PURE__ */ jsxs("h3", { children: [
171
+ "MobX DevTools (",
172
+ storeNames.length,
173
+ " store",
174
+ storeNames.length !== 1 ? "s" : "",
175
+ ")"
176
+ ] }), /* @__PURE__ */ jsx("button", {
177
+ style: closeButtonStyles,
178
+ onClick: onClose,
179
+ title: "Close (ESC)",
180
+ children: "×"
181
+ })]
182
+ }), storeNames.length === 0 ? /* @__PURE__ */ jsx("div", { children: "No stores registered yet." }) : /* @__PURE__ */ jsx("div", {
183
+ style: contentStyles,
184
+ children: /* @__PURE__ */ jsx(JsonView, {
185
+ data: serializedData,
186
+ clickToExpandNode: true,
187
+ shouldExpandNode: (level) => level < 2
188
+ })
189
+ })]
190
+ })] }), document.body);
191
+ });
192
+ const CustomDevTools = observer(() => {
193
+ useEffect(() => {
194
+ if (devToolsState.isVisible) {
195
+ const handleEscape = (event) => {
196
+ if (event.key === "Escape") devToolsState.hide();
197
+ };
198
+ document.addEventListener("keydown", handleEscape);
199
+ return () => document.removeEventListener("keydown", handleEscape);
200
+ }
201
+ }, []);
202
+ if (!devToolsState.isVisible) return null;
203
+ return /* @__PURE__ */ jsx(DevToolsPanelContent, {});
204
+ });
205
+ function initializeCustomDevTools() {
206
+ keyboardShortcutManager.startListening();
207
+ console.log("[CustomDevTools] Initialized - Press Ctrl+Shift+D (or Cmd+Shift+D) to open");
208
+ }
209
+
210
+ //#endregion
211
+ export { CustomDevTools, initializeCustomDevTools, setRegisteredStores };
212
+ //# sourceMappingURL=devtools-consolidated-BJ2tPWBk.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"devtools-consolidated-BJ2tPWBk.js","names":["result: any","registeredStores: Record<string, any>","overlayStyles: React.CSSProperties","panelStyles: React.CSSProperties","headerStyles: React.CSSProperties","closeButtonStyles: React.CSSProperties","contentStyles: React.CSSProperties","DevToolsPanelContent: React.FC","CustomDevTools: React.FC"],"sources":["../src/lib/internal-details/lib/devtools/serialize-store-data.tsx","../src/lib/internal-details/lib/devtools/devtools-consolidated.tsx"],"sourcesContent":["import { toJS } from \"mobx\";\n\nexport function serializeStoreData(\n stores_: Record<string, any>,\n): Record<string, any> {\n try {\n const stores = toJS(stores_);\n const seen = new Set();\n function serialize(obj: any): any {\n if (obj === null || typeof obj !== \"object\") {\n return obj;\n }\n\n if (seen.has(obj)) {\n return \"[Already Seen]\";\n }\n\n // Create new path for this branch of recursion\n seen.add(obj);\n\n if (Array.isArray(obj)) {\n return obj.map(serialize);\n }\n\n const result: any = {};\n\n for (const key of Object.keys(obj)) {\n if (typeof obj[key] === \"function\") {\n result[key] = \"[Function]\";\n }\n\n try {\n const descriptor = Object.getOwnPropertyDescriptor(obj, key);\n if (descriptor && descriptor.get) {\n try {\n result[key] = serialize(obj[key]);\n } catch {\n result[key] = \"[Getter Error]\";\n }\n } else {\n result[key] = serialize(obj[key]);\n }\n } catch {\n result[key] = \"[Access Error]\";\n }\n }\n\n // Add type information\n if (obj.constructor && obj.constructor.name !== \"Object\") {\n result.__type__ = obj.constructor.name;\n }\n\n return result;\n }\n\n return serialize(stores);\n } catch (error) {\n return {\n error: `Error serializing data: ${error instanceof Error ? error.message : \"Unknown error\"}`,\n };\n }\n}\n","import { makeAutoObservable } from \"mobx\";\nimport { observer } from \"mobx-react-lite\";\nimport React, { useCallback, useEffect } from \"react\";\nimport { createPortal } from \"react-dom\";\nimport { JsonView } from \"react-json-view-lite\";\nimport \"react-json-view-lite/dist/index.css\";\nimport { serializeStoreData } from \"./serialize-store-data.js\";\n\n// ============================================================================\n// STATE MANAGEMENT\n// ============================================================================\n\nclass DevToolsState {\n isVisible = false;\n\n constructor() {\n makeAutoObservable(this);\n }\n\n show() {\n this.isVisible = true;\n }\n\n hide() {\n this.isVisible = false;\n }\n\n toggle() {\n this.isVisible = !this.isVisible;\n }\n}\n\nconst devToolsState = new DevToolsState();\n\n// ============================================================================\n// KEYBOARD SHORTCUT MANAGER\n// ============================================================================\n\nclass KeyboardShortcutManager {\n private isListening = false;\n private shortcutKeys = {\n key: \"KeyD\",\n ctrlKey: true,\n shiftKey: true,\n altKey: false,\n };\n\n constructor() {\n this.handleKeyDown = this.handleKeyDown.bind(this);\n }\n\n private handleKeyDown(event: KeyboardEvent) {\n const { ctrlKey, shiftKey, altKey, metaKey } = event;\n const isModifierMatch = (ctrlKey || metaKey) && shiftKey && !altKey;\n const isKeyMatch = event.code === this.shortcutKeys.key;\n if (isModifierMatch && isKeyMatch) {\n event.preventDefault();\n event.stopPropagation();\n devToolsState.toggle();\n }\n }\n\n private handleEscapeKey = (event: KeyboardEvent) => {\n if (event.key === \"Escape\" && devToolsState.isVisible) {\n event.preventDefault();\n devToolsState.hide();\n }\n };\n\n startListening() {\n if (this.isListening) return;\n\n this.isListening = true;\n document.addEventListener(\"keydown\", this.handleKeyDown, true);\n document.addEventListener(\"keydown\", this.handleEscapeKey, true);\n }\n\n stopListening() {\n if (!this.isListening) return;\n\n this.isListening = false;\n document.removeEventListener(\"keydown\", this.handleKeyDown, true);\n document.removeEventListener(\"keydown\", this.handleEscapeKey, true);\n }\n\n updateShortcut(options: Partial<typeof this.shortcutKeys>) {\n this.shortcutKeys = { ...this.shortcutKeys, ...options };\n }\n}\n\nconst keyboardShortcutManager = new KeyboardShortcutManager();\n\n// ============================================================================\n// STORE ACCESS\n// ============================================================================\n\n// This will be populated by the registerStores function\nlet registeredStores: Record<string, any> = {};\n\nexport function setRegisteredStores(stores: Record<string, any>) {\n registeredStores = stores;\n}\n\nfunction getRegisteredStores() {\n return registeredStores;\n}\n\n// ============================================================================\n// DEVTOOLS PANEL COMPONENT\n// ============================================================================\n\nconst overlayStyles: React.CSSProperties = {\n position: \"fixed\",\n top: 0,\n left: 0,\n right: 0,\n bottom: 0,\n backgroundColor: \"rgba(0, 0, 0, 0.5)\",\n zIndex: 9999,\n};\n\nconst panelStyles: React.CSSProperties = {\n position: \"fixed\",\n top: \"50%\",\n left: \"50%\",\n transform: \"translate(-50%, -50%)\",\n width: \"90vw\",\n height: \"90vh\",\n backgroundColor: \"#fff\",\n zIndex: 10000,\n display: \"flex\",\n flexDirection: \"column\",\n borderRadius: 12,\n};\n\nconst headerStyles: React.CSSProperties = {\n padding: 12,\n borderBottom: \"1px solid #ccc\",\n display: \"flex\",\n justifyContent: \"space-between\",\n alignItems: \"center\",\n};\n\nconst closeButtonStyles: React.CSSProperties = {\n background: \"none\",\n border: \"none\",\n cursor: \"pointer\",\n};\n\nconst contentStyles: React.CSSProperties = {\n padding: 8,\n display: \"flex\",\n flex: 1,\n overflow: \"auto\",\n flexDirection: \"column\",\n};\n\nconst DevToolsPanelContent: React.FC = observer(() => {\n const stores = getRegisteredStores();\n const storeNames = Object.keys(stores);\n\n const serializedData = serializeStoreData(stores);\n const onClose = useCallback(() => {\n devToolsState.hide();\n }, []);\n\n return createPortal(\n <>\n <div style={overlayStyles} onClick={onClose} />\n <div style={panelStyles}>\n <div style={headerStyles}>\n <h3>\n MobX DevTools ({storeNames.length} store\n {storeNames.length !== 1 ? \"s\" : \"\"})\n </h3>\n <button\n style={closeButtonStyles}\n onClick={onClose}\n title=\"Close (ESC)\"\n >\n ×\n </button>\n </div>\n {storeNames.length === 0 ? (\n <div>No stores registered yet.</div>\n ) : (\n <div style={contentStyles}>\n <JsonView\n data={serializedData}\n clickToExpandNode={true}\n shouldExpandNode={(level) => level < 2}\n />\n </div>\n )}\n </div>\n </>,\n document.body,\n );\n});\n\n// ============================================================================\n// PROVIDER COMPONENT\n// ============================================================================\n\nexport const CustomDevTools: React.FC = observer(() => {\n useEffect(() => {\n if (devToolsState.isVisible) {\n const handleEscape = (event: KeyboardEvent) => {\n if (event.key === \"Escape\") {\n devToolsState.hide();\n }\n };\n document.addEventListener(\"keydown\", handleEscape);\n return () => document.removeEventListener(\"keydown\", handleEscape);\n }\n }, []);\n\n if (!devToolsState.isVisible) {\n return null;\n }\n\n return <DevToolsPanelContent />;\n});\n\n// ============================================================================\n// INITIALIZATION\n// ============================================================================\n\nexport function initializeCustomDevTools() {\n keyboardShortcutManager.startListening();\n console.log(\n \"[CustomDevTools] Initialized - Press Ctrl+Shift+D (or Cmd+Shift+D) to open\",\n );\n}\n"],"mappings":"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"}
@@ -0,0 +1,109 @@
1
+ import { SeverityNumber } from "@opentelemetry/api-logs";
2
+
3
+ //#region src/lib/tracing/early-console-buffer.ts
4
+ var LibraryEarlyConsoleBuffer = class LibraryEarlyConsoleBuffer {
5
+ static instance;
6
+ buffer = [];
7
+ maxBufferSize = 1e3;
8
+ originalMethods = {};
9
+ otelLogger = void 0;
10
+ isPatched = false;
11
+ static getInstance() {
12
+ if (!LibraryEarlyConsoleBuffer.instance) LibraryEarlyConsoleBuffer.instance = new LibraryEarlyConsoleBuffer();
13
+ return LibraryEarlyConsoleBuffer.instance;
14
+ }
15
+ patchEarly() {
16
+ if (this.isPatched) return;
17
+ this.originalMethods.log = console.log.bind(console);
18
+ this.originalMethods.info = console.info.bind(console);
19
+ this.originalMethods.debug = console.debug.bind(console);
20
+ this.originalMethods.warn = console.warn.bind(console);
21
+ this.originalMethods.error = console.error.bind(console);
22
+ this.patchMethod("log");
23
+ this.patchMethod("info");
24
+ this.patchMethod("debug");
25
+ this.patchMethod("warn");
26
+ this.patchMethod("error");
27
+ this.isPatched = true;
28
+ }
29
+ patchMethod(level) {
30
+ const originalMethod = this.originalMethods[level];
31
+ console[level] = (...args) => {
32
+ originalMethod(...args);
33
+ this.bufferLog(level, args);
34
+ if (this.otelLogger) this.sendToOpenTelemetry(level, args);
35
+ };
36
+ }
37
+ bufferLog(level, args) {
38
+ if (this.buffer.length >= this.maxBufferSize) this.buffer.shift();
39
+ this.buffer.push({
40
+ level,
41
+ args,
42
+ timestamp: Date.now()
43
+ });
44
+ }
45
+ enableOpenTelemetry(otelLogger) {
46
+ console.info("[EarlyConsoleBuffer] Enabling OpenTelemetry integration");
47
+ this.otelLogger = otelLogger;
48
+ this.flushBuffer();
49
+ }
50
+ flushBuffer() {
51
+ if (!this.otelLogger) return;
52
+ const bufferCount = this.buffer.length;
53
+ if (bufferCount === 0) {
54
+ console.info("[EarlyConsoleBuffer] No buffered logs to flush");
55
+ return;
56
+ }
57
+ console.info(`[EarlyConsoleBuffer] Flushing ${bufferCount} buffered logs to OpenTelemetry`);
58
+ this.buffer.forEach((entry) => {
59
+ this.sendToOpenTelemetry(entry.level, entry.args, entry.timestamp, true);
60
+ });
61
+ this.buffer = [];
62
+ console.info(`[EarlyConsoleBuffer] Successfully sent ${bufferCount} buffered logs to OpenTelemetry logger`);
63
+ }
64
+ sendToOpenTelemetry(level, args, timestamp, fromBuffer) {
65
+ if (!this.otelLogger) return;
66
+ const severityMap = {
67
+ debug: SeverityNumber.DEBUG,
68
+ log: SeverityNumber.INFO,
69
+ info: SeverityNumber.INFO,
70
+ warn: SeverityNumber.WARN,
71
+ error: SeverityNumber.ERROR
72
+ };
73
+ const attributes = { ...fromBuffer && { source: "early-console-buffer" } };
74
+ this.otelLogger.emit({
75
+ severityNumber: severityMap[level],
76
+ severityText: level,
77
+ body: this.formatConsoleArgs(args),
78
+ timestamp,
79
+ attributes
80
+ });
81
+ }
82
+ formatConsoleArgs(args) {
83
+ return args.map((arg) => {
84
+ if (typeof arg === "string") return arg;
85
+ if (arg === null) return "null";
86
+ if (arg === void 0) return "undefined";
87
+ if (typeof arg === "object") try {
88
+ return JSON.stringify(arg, null, 2);
89
+ } catch {
90
+ return "[object Object]";
91
+ }
92
+ return String(arg);
93
+ }).join(" ");
94
+ }
95
+ getBufferSize() {
96
+ return this.buffer.length;
97
+ }
98
+ isConsolePatched() {
99
+ return this.isPatched;
100
+ }
101
+ isOpenTelemetryEnabled() {
102
+ return this.otelLogger !== void 0;
103
+ }
104
+ };
105
+ var early_console_buffer_default = LibraryEarlyConsoleBuffer;
106
+
107
+ //#endregion
108
+ export { early_console_buffer_default };
109
+ //# sourceMappingURL=early-console-buffer-DWTLgla0.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"early-console-buffer-DWTLgla0.js","names":[],"sources":["../src/lib/tracing/early-console-buffer.ts"],"sourcesContent":["import { SeverityNumber } from \"@opentelemetry/api-logs\";\nimport type { Logger as OTelLogger } from \"@opentelemetry/api-logs\";\n\ninterface LogEntry {\n level: \"log\" | \"info\" | \"warn\" | \"error\" | \"debug\";\n args: any[];\n timestamp: number;\n}\n\nclass LibraryEarlyConsoleBuffer {\n private static instance: LibraryEarlyConsoleBuffer;\n private buffer: LogEntry[] = [];\n private maxBufferSize = 1000;\n private originalMethods: Record<string, (...args: any[]) => void> = {};\n private otelLogger?: OTelLogger = undefined;\n private isPatched = false;\n\n static getInstance(): LibraryEarlyConsoleBuffer {\n if (!LibraryEarlyConsoleBuffer.instance) {\n LibraryEarlyConsoleBuffer.instance = new LibraryEarlyConsoleBuffer();\n }\n return LibraryEarlyConsoleBuffer.instance;\n }\n\n // Patch console methods immediately with buffering\n patchEarly(): void {\n if (this.isPatched) return;\n\n // Store original methods\n this.originalMethods.log = console.log.bind(console);\n this.originalMethods.info = console.info.bind(console);\n this.originalMethods.debug = console.debug.bind(console);\n this.originalMethods.warn = console.warn.bind(console);\n this.originalMethods.error = console.error.bind(console);\n\n // Replace with buffering versions\n this.patchMethod(\"log\");\n this.patchMethod(\"info\");\n this.patchMethod(\"debug\");\n this.patchMethod(\"warn\");\n this.patchMethod(\"error\");\n\n this.isPatched = true;\n }\n\n private patchMethod(level: string): void {\n const originalMethod = this.originalMethods[level];\n\n (console as any)[level] = (...args: any[]) => {\n // Always call original method for dev experience\n originalMethod(...args);\n\n // Buffer for OpenTelemetry\n this.bufferLog(level as any, args);\n\n // Send to OpenTelemetry if available\n if (this.otelLogger) {\n this.sendToOpenTelemetry(level as any, args);\n }\n };\n }\n\n private bufferLog(level: LogEntry[\"level\"], args: any[]): void {\n if (this.buffer.length >= this.maxBufferSize) {\n this.buffer.shift(); // Remove oldest entry\n }\n\n this.buffer.push({\n level,\n args,\n timestamp: Date.now(),\n });\n }\n\n enableOpenTelemetry(otelLogger: OTelLogger): void {\n console.info(\"[EarlyConsoleBuffer] Enabling OpenTelemetry integration\");\n this.otelLogger = otelLogger;\n this.flushBuffer();\n }\n\n private flushBuffer(): void {\n if (!this.otelLogger) return;\n\n const bufferCount = this.buffer.length;\n if (bufferCount === 0) {\n console.info(\"[EarlyConsoleBuffer] No buffered logs to flush\");\n return;\n }\n\n console.info(\n `[EarlyConsoleBuffer] Flushing ${bufferCount} buffered logs to OpenTelemetry`,\n );\n\n this.buffer.forEach((entry) => {\n this.sendToOpenTelemetry(entry.level, entry.args, entry.timestamp, true); // true = from buffer\n });\n\n this.buffer = []; // Clear buffer\n console.info(\n `[EarlyConsoleBuffer] Successfully sent ${bufferCount} buffered logs to OpenTelemetry logger`,\n );\n }\n\n private sendToOpenTelemetry(\n level: LogEntry[\"level\"],\n args: any[],\n timestamp?: number,\n fromBuffer?: boolean,\n ): void {\n if (!this.otelLogger) return;\n\n const severityMap = {\n debug: SeverityNumber.DEBUG,\n log: SeverityNumber.INFO,\n info: SeverityNumber.INFO,\n warn: SeverityNumber.WARN,\n error: SeverityNumber.ERROR,\n };\n\n // Only add 'source' attribute if this log came from the buffer flush\n const attributes = {\n ...(fromBuffer && { source: \"early-console-buffer\" }),\n };\n\n this.otelLogger.emit({\n severityNumber: severityMap[level],\n severityText: level,\n body: this.formatConsoleArgs(args),\n timestamp: timestamp,\n attributes,\n });\n }\n\n private formatConsoleArgs(args: any[]): string {\n return args\n .map((arg) => {\n if (typeof arg === \"string\") return arg;\n if (arg === null) return \"null\";\n if (arg === undefined) return \"undefined\";\n if (typeof arg === \"object\") {\n try {\n return JSON.stringify(arg, null, 2);\n } catch {\n return \"[object Object]\";\n }\n }\n return String(arg);\n })\n .join(\" \");\n }\n\n // Method to check if we have buffered logs (for testing/debugging)\n getBufferSize(): number {\n return this.buffer.length;\n }\n\n // Method to check if console is patched (for testing/debugging)\n isConsolePatched(): boolean {\n return this.isPatched;\n }\n\n // Method to check if OpenTelemetry is enabled (for testing/debugging)\n isOpenTelemetryEnabled(): boolean {\n return this.otelLogger !== undefined;\n }\n}\n\nexport default LibraryEarlyConsoleBuffer;\n"],"mappings":";;;AASA,IAAM,4BAAN,MAAM,0BAA0B;CAC9B,OAAe;CACf,AAAQ,SAAqB,EAAE;CAC/B,AAAQ,gBAAgB;CACxB,AAAQ,kBAA4D,EAAE;CACtE,AAAQ,aAA0B;CAClC,AAAQ,YAAY;CAEpB,OAAO,cAAyC;AAC9C,MAAI,CAAC,0BAA0B,SAC7B,2BAA0B,WAAW,IAAI,2BAA2B;AAEtE,SAAO,0BAA0B;;CAInC,aAAmB;AACjB,MAAI,KAAK,UAAW;AAGpB,OAAK,gBAAgB,MAAM,QAAQ,IAAI,KAAK,QAAQ;AACpD,OAAK,gBAAgB,OAAO,QAAQ,KAAK,KAAK,QAAQ;AACtD,OAAK,gBAAgB,QAAQ,QAAQ,MAAM,KAAK,QAAQ;AACxD,OAAK,gBAAgB,OAAO,QAAQ,KAAK,KAAK,QAAQ;AACtD,OAAK,gBAAgB,QAAQ,QAAQ,MAAM,KAAK,QAAQ;AAGxD,OAAK,YAAY,MAAM;AACvB,OAAK,YAAY,OAAO;AACxB,OAAK,YAAY,QAAQ;AACzB,OAAK,YAAY,OAAO;AACxB,OAAK,YAAY,QAAQ;AAEzB,OAAK,YAAY;;CAGnB,AAAQ,YAAY,OAAqB;EACvC,MAAM,iBAAiB,KAAK,gBAAgB;AAE5C,EAAC,QAAgB,UAAU,GAAG,SAAgB;AAE5C,kBAAe,GAAG,KAAK;AAGvB,QAAK,UAAU,OAAc,KAAK;AAGlC,OAAI,KAAK,WACP,MAAK,oBAAoB,OAAc,KAAK;;;CAKlD,AAAQ,UAAU,OAA0B,MAAmB;AAC7D,MAAI,KAAK,OAAO,UAAU,KAAK,cAC7B,MAAK,OAAO,OAAO;AAGrB,OAAK,OAAO,KAAK;GACf;GACA;GACA,WAAW,KAAK,KAAK;GACtB,CAAC;;CAGJ,oBAAoB,YAA8B;AAChD,UAAQ,KAAK,0DAA0D;AACvE,OAAK,aAAa;AAClB,OAAK,aAAa;;CAGpB,AAAQ,cAAoB;AAC1B,MAAI,CAAC,KAAK,WAAY;EAEtB,MAAM,cAAc,KAAK,OAAO;AAChC,MAAI,gBAAgB,GAAG;AACrB,WAAQ,KAAK,iDAAiD;AAC9D;;AAGF,UAAQ,KACN,iCAAiC,YAAY,iCAC9C;AAED,OAAK,OAAO,SAAS,UAAU;AAC7B,QAAK,oBAAoB,MAAM,OAAO,MAAM,MAAM,MAAM,WAAW,KAAK;IACxE;AAEF,OAAK,SAAS,EAAE;AAChB,UAAQ,KACN,0CAA0C,YAAY,wCACvD;;CAGH,AAAQ,oBACN,OACA,MACA,WACA,YACM;AACN,MAAI,CAAC,KAAK,WAAY;EAEtB,MAAM,cAAc;GAClB,OAAO,eAAe;GACtB,KAAK,eAAe;GACpB,MAAM,eAAe;GACrB,MAAM,eAAe;GACrB,OAAO,eAAe;GACvB;EAGD,MAAM,aAAa,EACjB,GAAI,cAAc,EAAE,QAAQ,wBAAwB,EACrD;AAED,OAAK,WAAW,KAAK;GACnB,gBAAgB,YAAY;GAC5B,cAAc;GACd,MAAM,KAAK,kBAAkB,KAAK;GACvB;GACX;GACD,CAAC;;CAGJ,AAAQ,kBAAkB,MAAqB;AAC7C,SAAO,KACJ,KAAK,QAAQ;AACZ,OAAI,OAAO,QAAQ,SAAU,QAAO;AACpC,OAAI,QAAQ,KAAM,QAAO;AACzB,OAAI,QAAQ,OAAW,QAAO;AAC9B,OAAI,OAAO,QAAQ,SACjB,KAAI;AACF,WAAO,KAAK,UAAU,KAAK,MAAM,EAAE;WAC7B;AACN,WAAO;;AAGX,UAAO,OAAO,IAAI;IAClB,CACD,KAAK,IAAI;;CAId,gBAAwB;AACtB,SAAO,KAAK,OAAO;;CAIrB,mBAA4B;AAC1B,SAAO,KAAK;;CAId,yBAAkC;AAChC,SAAO,KAAK,eAAe;;;AAI/B,mCAAe"}