@superblocksteam/library 2.0.69-next.2 → 2.0.70-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.
- package/dist/{devtools-consolidated-CfCo1nXs.js → devtools-consolidated-zKLoNTKB.js} +2 -2
- package/dist/{devtools-consolidated-CfCo1nXs.js.map → devtools-consolidated-zKLoNTKB.js.map} +1 -1
- package/dist/{early-console-buffer-T4skeGWJ.js → early-console-buffer-D4wVuyBf.js} +5 -5
- package/dist/early-console-buffer-D4wVuyBf.js.map +1 -0
- package/dist/jsx-dev-runtime/index.js +1 -1
- package/dist/{jsx-wrapper-CuenCDCW.js → jsx-wrapper-DZ9RpgLV.js} +178 -26
- package/dist/jsx-wrapper-DZ9RpgLV.js.map +1 -0
- package/dist/lib/index.d.ts +29 -1
- package/dist/lib/index.d.ts.map +1 -1
- package/dist/lib/index.js +335 -66
- package/dist/lib/index.js.map +1 -1
- package/dist/{logs-VIMbIbT8.js → logs-hyzhDMp7.js} +2 -2
- package/dist/{logs-VIMbIbT8.js.map → logs-hyzhDMp7.js.map} +1 -1
- package/package.json +3 -2
- package/dist/early-console-buffer-T4skeGWJ.js.map +0 -1
- package/dist/jsx-wrapper-CuenCDCW.js.map +0 -1
|
@@ -204,9 +204,9 @@ const CustomDevTools = observer(() => {
|
|
|
204
204
|
});
|
|
205
205
|
function initializeCustomDevTools() {
|
|
206
206
|
keyboardShortcutManager.startListening();
|
|
207
|
-
console.log("[CustomDevTools] Initialized - Press Ctrl+Shift+D (or Cmd+Shift+D) to open");
|
|
207
|
+
console.log("[internal] [CustomDevTools] Initialized - Press Ctrl+Shift+D (or Cmd+Shift+D) to open");
|
|
208
208
|
}
|
|
209
209
|
|
|
210
210
|
//#endregion
|
|
211
211
|
export { CustomDevTools, initializeCustomDevTools, setRegisteredStores };
|
|
212
|
-
//# sourceMappingURL=devtools-consolidated-
|
|
212
|
+
//# sourceMappingURL=devtools-consolidated-zKLoNTKB.js.map
|
package/dist/{devtools-consolidated-CfCo1nXs.js.map → devtools-consolidated-zKLoNTKB.js.map}
RENAMED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"devtools-consolidated-CfCo1nXs.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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"}
|
|
1
|
+
{"version":3,"file":"devtools-consolidated-zKLoNTKB.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 \"[internal] [CustomDevTools] Initialized - Press Ctrl+Shift+D (or Cmd+Shift+D) to open\",\n );\n}\n"],"mappings":"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"}
|
|
@@ -67,7 +67,7 @@ var LibraryEarlyConsoleBuffer = class LibraryEarlyConsoleBuffer {
|
|
|
67
67
|
});
|
|
68
68
|
}
|
|
69
69
|
enableOpenTelemetry(otelLogger) {
|
|
70
|
-
console.info("[EarlyConsoleBuffer] Enabling OpenTelemetry integration");
|
|
70
|
+
console.info("[internal] [EarlyConsoleBuffer] Enabling OpenTelemetry integration");
|
|
71
71
|
this.otelLogger = otelLogger;
|
|
72
72
|
this.flushBuffer();
|
|
73
73
|
}
|
|
@@ -75,15 +75,15 @@ var LibraryEarlyConsoleBuffer = class LibraryEarlyConsoleBuffer {
|
|
|
75
75
|
if (!this.otelLogger) return;
|
|
76
76
|
const bufferCount = this.buffer.length;
|
|
77
77
|
if (bufferCount === 0) {
|
|
78
|
-
console.info("[EarlyConsoleBuffer] No buffered logs to flush");
|
|
78
|
+
console.info("[internal] [EarlyConsoleBuffer] No buffered logs to flush");
|
|
79
79
|
return;
|
|
80
80
|
}
|
|
81
|
-
console.info(`[EarlyConsoleBuffer] Flushing ${bufferCount} buffered logs to OpenTelemetry`);
|
|
81
|
+
console.info(`[internal] [EarlyConsoleBuffer] Flushing ${bufferCount} buffered logs to OpenTelemetry`);
|
|
82
82
|
this.buffer.forEach((entry) => {
|
|
83
83
|
this.sendToOpenTelemetry(entry.level, entry.args, entry.timestamp, true);
|
|
84
84
|
});
|
|
85
85
|
this.buffer = [];
|
|
86
|
-
console.info(`[EarlyConsoleBuffer] Successfully sent ${bufferCount} buffered logs to OpenTelemetry logger`);
|
|
86
|
+
console.info(`[internal] [EarlyConsoleBuffer] Successfully sent ${bufferCount} buffered logs to OpenTelemetry logger`);
|
|
87
87
|
}
|
|
88
88
|
sendToOpenTelemetry(level, args, timestamp, fromBuffer) {
|
|
89
89
|
if (!this.otelLogger) return;
|
|
@@ -133,4 +133,4 @@ var early_console_buffer_default = LibraryEarlyConsoleBuffer;
|
|
|
133
133
|
|
|
134
134
|
//#endregion
|
|
135
135
|
export { consoleLogAttributes as n, early_console_buffer_default as t };
|
|
136
|
-
//# sourceMappingURL=early-console-buffer-
|
|
136
|
+
//# sourceMappingURL=early-console-buffer-D4wVuyBf.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"early-console-buffer-D4wVuyBf.js","names":["attributes: Record<string, any>"],"sources":["../src/lib/tracing/console-logging.ts","../src/lib/tracing/early-console-buffer.ts"],"sourcesContent":["// The attributes that should be passed to OTEL logs as part of the message context.\n// To use, use consoleLogAttributes() to create an instance of this class, and pass as an argument to console.* methods.\nexport class ConsoleLogAttributes {\n constructor(public readonly attributes: Record<string, any>) {}\n\n // Optional: Add validation or transformation\n static create(attrs: Record<string, any>): ConsoleLogAttributes {\n return new ConsoleLogAttributes(attrs);\n }\n}\n\n// Convenience factory\nexport const consoleLogAttributes = (\n attrs: Record<string, any>,\n): ConsoleLogAttributes => {\n return new ConsoleLogAttributes(attrs);\n};\n","import { SeverityNumber } from \"@opentelemetry/api-logs\";\nimport { ConsoleLogAttributes } from \"./console-logging.js\";\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\nfunction mergeAllConsoleLogAttributes(\n args: any[],\n): Record<string, any> | undefined {\n if (args.length === 0) return undefined;\n\n return args.reduce((merged, arg) => {\n if (arg instanceof ConsoleLogAttributes) {\n return { ...merged, ...arg.attributes };\n }\n return merged;\n }, {});\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(\n \"[internal] [EarlyConsoleBuffer] Enabling OpenTelemetry integration\",\n );\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(\"[internal] [EarlyConsoleBuffer] No buffered logs to flush\");\n return;\n }\n\n console.info(\n `[internal] [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 `[internal] [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 ...mergeAllConsoleLogAttributes(args),\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 .filter((arg) => !(arg instanceof ConsoleLogAttributes))\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":"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"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { S as api_hmr_tracker_default, _ as root_store_default, t as makeWrappedComponent } from "../jsx-wrapper-
|
|
1
|
+
import { S as api_hmr_tracker_default, _ as root_store_default, t as makeWrappedComponent } from "../jsx-wrapper-DZ9RpgLV.js";
|
|
2
2
|
import "../utils-Clb3lSiX.js";
|
|
3
3
|
import { SOURCE_ID_ATTRIBUTE } from "@superblocksteam/library-shared";
|
|
4
4
|
import * as ReactJsxDevRuntime from "react/jsx-dev-runtime";
|
|
@@ -736,7 +736,9 @@ var DeployedParentBridge = class {
|
|
|
736
736
|
sendAiLoaderState(_shouldShowLoader) {}
|
|
737
737
|
sendRuntimeError(_data) {}
|
|
738
738
|
sendClearRuntimeError(_id) {}
|
|
739
|
+
sendConsoleLog(_data) {}
|
|
739
740
|
setInteractionMode(_mode) {}
|
|
741
|
+
sendCaptureScreenshotResponse(_callbackId, _dataUrl, _error) {}
|
|
740
742
|
};
|
|
741
743
|
|
|
742
744
|
//#endregion
|
|
@@ -1051,16 +1053,22 @@ var SuperblocksEditorBridge = class SuperblocksEditorBridge {
|
|
|
1051
1053
|
payload: { message }
|
|
1052
1054
|
});
|
|
1053
1055
|
}
|
|
1054
|
-
sendRuntimeError(data) {
|
|
1056
|
+
sendRuntimeError(data, forceSend = false) {
|
|
1055
1057
|
this.sendImmediate({
|
|
1056
1058
|
type: "runtime-error",
|
|
1057
1059
|
payload: data
|
|
1058
|
-
});
|
|
1060
|
+
}, forceSend);
|
|
1059
1061
|
}
|
|
1060
|
-
sendClearRuntimeError(id) {
|
|
1062
|
+
sendClearRuntimeError(id, forceSend = false) {
|
|
1061
1063
|
this.sendImmediate({
|
|
1062
1064
|
type: "clear-runtime-error",
|
|
1063
1065
|
payload: { id }
|
|
1066
|
+
}, forceSend);
|
|
1067
|
+
}
|
|
1068
|
+
sendConsoleLog(data) {
|
|
1069
|
+
this.sendImmediate({
|
|
1070
|
+
type: "console-log",
|
|
1071
|
+
payload: data
|
|
1064
1072
|
});
|
|
1065
1073
|
}
|
|
1066
1074
|
setInteractionMode(mode) {
|
|
@@ -1069,6 +1077,16 @@ var SuperblocksEditorBridge = class SuperblocksEditorBridge {
|
|
|
1069
1077
|
payload: { interactionMode: mode }
|
|
1070
1078
|
});
|
|
1071
1079
|
}
|
|
1080
|
+
sendCaptureScreenshotResponse(callbackId, dataUrl, error) {
|
|
1081
|
+
this.sendImmediate({
|
|
1082
|
+
type: "capture-screenshot-response",
|
|
1083
|
+
payload: {
|
|
1084
|
+
callbackId,
|
|
1085
|
+
dataUrl,
|
|
1086
|
+
error
|
|
1087
|
+
}
|
|
1088
|
+
});
|
|
1089
|
+
}
|
|
1072
1090
|
queueMessage(message, mergeOptions) {
|
|
1073
1091
|
if (!this.connectedToParent) this.messagesToSend.push({
|
|
1074
1092
|
payload: message,
|
|
@@ -1613,7 +1631,7 @@ function resolveById(id, payload) {
|
|
|
1613
1631
|
rejectorMap.delete(id);
|
|
1614
1632
|
}
|
|
1615
1633
|
} catch (e) {
|
|
1616
|
-
console.log("Error resolving promise", e);
|
|
1634
|
+
console.log("[internal] [resolveById] Error resolving promise", e);
|
|
1617
1635
|
}
|
|
1618
1636
|
}
|
|
1619
1637
|
function rejectById(id, payload) {
|
|
@@ -1628,10 +1646,124 @@ function rejectById(id, payload) {
|
|
|
1628
1646
|
rejectorMap.delete(id);
|
|
1629
1647
|
}
|
|
1630
1648
|
} catch (e) {
|
|
1631
|
-
console.log("Error rejecting promise", e);
|
|
1649
|
+
console.log("[internal] [rejectById] Error rejecting promise", e);
|
|
1632
1650
|
}
|
|
1633
1651
|
}
|
|
1634
1652
|
|
|
1653
|
+
//#endregion
|
|
1654
|
+
//#region src/lib/internal-details/lib/features/api-activity-tracker.ts
|
|
1655
|
+
/**
|
|
1656
|
+
* Tracks in-flight API requests to enable waiting for APIs to settle
|
|
1657
|
+
* before capturing screenshots. This is used by the screenshot handler
|
|
1658
|
+
* to avoid capturing loading states.
|
|
1659
|
+
*/
|
|
1660
|
+
const API_ACTIVITY_EVENT = "sb-api-activity-changed";
|
|
1661
|
+
var ApiActivityTracker = class {
|
|
1662
|
+
inFlightTokens = /* @__PURE__ */ new Set();
|
|
1663
|
+
lastActivityTime = Date.now();
|
|
1664
|
+
eventTarget = new EventTarget();
|
|
1665
|
+
/**
|
|
1666
|
+
* Call when an API request starts.
|
|
1667
|
+
* Returns a unique token that must be passed to trackEnd().
|
|
1668
|
+
*/
|
|
1669
|
+
trackStart() {
|
|
1670
|
+
const token = Symbol("api-request");
|
|
1671
|
+
this.inFlightTokens.add(token);
|
|
1672
|
+
this.lastActivityTime = Date.now();
|
|
1673
|
+
console.log(`[ApiActivityTracker] API started. In-flight count: ${this.inFlightTokens.size}`);
|
|
1674
|
+
this.emitChange();
|
|
1675
|
+
return token;
|
|
1676
|
+
}
|
|
1677
|
+
/**
|
|
1678
|
+
* Call when an API request completes (success, error, or cancellation).
|
|
1679
|
+
* The token must match the one returned by trackStart().
|
|
1680
|
+
* Calling with an unknown or already-ended token is a no-op (guards against double trackEnd).
|
|
1681
|
+
*/
|
|
1682
|
+
trackEnd(token) {
|
|
1683
|
+
if (!this.inFlightTokens.has(token)) return;
|
|
1684
|
+
this.inFlightTokens.delete(token);
|
|
1685
|
+
this.lastActivityTime = Date.now();
|
|
1686
|
+
console.log(`[ApiActivityTracker] API finished. In-flight count: ${this.inFlightTokens.size}`);
|
|
1687
|
+
this.emitChange();
|
|
1688
|
+
}
|
|
1689
|
+
/**
|
|
1690
|
+
* Get the current in-flight count.
|
|
1691
|
+
*/
|
|
1692
|
+
get inFlightCount() {
|
|
1693
|
+
return this.inFlightTokens.size;
|
|
1694
|
+
}
|
|
1695
|
+
/**
|
|
1696
|
+
* Get the current API activity state.
|
|
1697
|
+
*/
|
|
1698
|
+
getState() {
|
|
1699
|
+
return {
|
|
1700
|
+
inFlightCount: this.inFlightTokens.size,
|
|
1701
|
+
lastActivityTime: this.lastActivityTime
|
|
1702
|
+
};
|
|
1703
|
+
}
|
|
1704
|
+
/**
|
|
1705
|
+
* Check if there are any in-flight API requests.
|
|
1706
|
+
*/
|
|
1707
|
+
isIdle() {
|
|
1708
|
+
return this.inFlightTokens.size === 0;
|
|
1709
|
+
}
|
|
1710
|
+
/**
|
|
1711
|
+
* Wait for all APIs to become idle, with a timeout.
|
|
1712
|
+
* Resolves when either:
|
|
1713
|
+
* - All in-flight requests complete
|
|
1714
|
+
* - The timeout is reached
|
|
1715
|
+
*
|
|
1716
|
+
* @param timeoutMs Maximum time to wait (default: 10000ms)
|
|
1717
|
+
* @returns Promise that resolves with { timedOut: boolean }
|
|
1718
|
+
*/
|
|
1719
|
+
waitForIdle(timeoutMs = 1e4) {
|
|
1720
|
+
return new Promise((resolve) => {
|
|
1721
|
+
if (this.isIdle()) {
|
|
1722
|
+
console.log(`[ApiActivityTracker] waitForIdle: Already idle, resolving immediately`);
|
|
1723
|
+
resolve({ timedOut: false });
|
|
1724
|
+
return;
|
|
1725
|
+
}
|
|
1726
|
+
console.log(`[ApiActivityTracker] waitForIdle: Waiting for ${this.inFlightTokens.size} in-flight request(s) to complete (timeout: ${timeoutMs}ms)`);
|
|
1727
|
+
let resolved = false;
|
|
1728
|
+
const timeoutId = setTimeout(() => {
|
|
1729
|
+
if (resolved) return;
|
|
1730
|
+
if (this.isIdle()) {
|
|
1731
|
+
resolved = true;
|
|
1732
|
+
this.eventTarget.removeEventListener(API_ACTIVITY_EVENT, handleChange);
|
|
1733
|
+
console.log(`[ApiActivityTracker] waitForIdle: All APIs now idle, proceeding`);
|
|
1734
|
+
resolve({ timedOut: false });
|
|
1735
|
+
return;
|
|
1736
|
+
}
|
|
1737
|
+
console.warn(`[ApiActivityTracker] Timeout waiting for APIs to become idle after ${timeoutMs}ms. ${this.inFlightTokens.size} request(s) still in flight.`);
|
|
1738
|
+
this.eventTarget.removeEventListener(API_ACTIVITY_EVENT, handleChange);
|
|
1739
|
+
resolve({ timedOut: true });
|
|
1740
|
+
}, timeoutMs);
|
|
1741
|
+
const handleChange = () => {
|
|
1742
|
+
if (resolved) return;
|
|
1743
|
+
if (this.isIdle()) {
|
|
1744
|
+
resolved = true;
|
|
1745
|
+
clearTimeout(timeoutId);
|
|
1746
|
+
this.eventTarget.removeEventListener(API_ACTIVITY_EVENT, handleChange);
|
|
1747
|
+
console.log(`[ApiActivityTracker] waitForIdle: All APIs now idle, proceeding`);
|
|
1748
|
+
resolve({ timedOut: false });
|
|
1749
|
+
}
|
|
1750
|
+
};
|
|
1751
|
+
this.eventTarget.addEventListener(API_ACTIVITY_EVENT, handleChange);
|
|
1752
|
+
});
|
|
1753
|
+
}
|
|
1754
|
+
/**
|
|
1755
|
+
* Reset the tracker state. Useful for testing.
|
|
1756
|
+
*/
|
|
1757
|
+
reset() {
|
|
1758
|
+
this.inFlightTokens.clear();
|
|
1759
|
+
this.lastActivityTime = Date.now();
|
|
1760
|
+
}
|
|
1761
|
+
emitChange() {
|
|
1762
|
+
this.eventTarget.dispatchEvent(new Event(API_ACTIVITY_EVENT));
|
|
1763
|
+
}
|
|
1764
|
+
};
|
|
1765
|
+
const apiActivityTracker = new ApiActivityTracker();
|
|
1766
|
+
|
|
1635
1767
|
//#endregion
|
|
1636
1768
|
//#region src/lib/internal-details/lib/features/api-hmr-tracker.ts
|
|
1637
1769
|
var ApiHmrTracker = class ApiHmrTracker {
|
|
@@ -1678,6 +1810,9 @@ var ApiHmrTracker = class ApiHmrTracker {
|
|
|
1678
1810
|
incReloadCount() {
|
|
1679
1811
|
this.reloadCount++;
|
|
1680
1812
|
}
|
|
1813
|
+
dontSkipUntilNextReload() {
|
|
1814
|
+
this.propagatedReloadCount = Math.max(this.propagatedReloadCount, this.reloadCount);
|
|
1815
|
+
}
|
|
1681
1816
|
mountLikeTimer = null;
|
|
1682
1817
|
reportJSXActivity() {
|
|
1683
1818
|
const reloadCount = this.reloadCount;
|
|
@@ -1775,7 +1910,7 @@ async function executeV2Api(params) {
|
|
|
1775
1910
|
} catch (err) {
|
|
1776
1911
|
const message = `Failed to execute ${apiName || "API"}. ${err}`;
|
|
1777
1912
|
const suppressError = viewMode !== ViewMode.EDITOR && err?.code === 20;
|
|
1778
|
-
if (notifyOnSystemError && !suppressError) console.log(message);
|
|
1913
|
+
if (notifyOnSystemError && !suppressError) console.log(`[internal] [executeV2Api] ${message}`);
|
|
1779
1914
|
return {
|
|
1780
1915
|
systemError: message,
|
|
1781
1916
|
statusCode: err instanceof HttpError ? err.code : void 0
|
|
@@ -1834,7 +1969,7 @@ const stream = async ({ url, headers, body, onMessage, onComplete, onError, defa
|
|
|
1834
1969
|
done = readerDone && lastChunk === "";
|
|
1835
1970
|
}
|
|
1836
1971
|
} catch (e) {
|
|
1837
|
-
if (e.name === "AbortError") console.log("Fetch was cancelled");
|
|
1972
|
+
if (e.name === "AbortError") console.log("[internal] [stream] Fetch was cancelled");
|
|
1838
1973
|
else onError(e.message ?? defaultError, e.code);
|
|
1839
1974
|
} finally {
|
|
1840
1975
|
onComplete();
|
|
@@ -2015,9 +2150,14 @@ var ApiManager = class {
|
|
|
2015
2150
|
accessToken;
|
|
2016
2151
|
runningApiControllers = {};
|
|
2017
2152
|
waitForInitApiPromise = void 0;
|
|
2153
|
+
waitForBootstrapPromise = void 0;
|
|
2154
|
+
resolveBootstrapPromise = void 0;
|
|
2018
2155
|
callContexts = {};
|
|
2019
2156
|
constructor(rootStore) {
|
|
2020
2157
|
this.rootStore = rootStore;
|
|
2158
|
+
this.waitForBootstrapPromise = new Promise((resolve) => {
|
|
2159
|
+
this.resolveBootstrapPromise = resolve;
|
|
2160
|
+
});
|
|
2021
2161
|
}
|
|
2022
2162
|
set agentUrls(urls) {
|
|
2023
2163
|
this._agentUrls = urls;
|
|
@@ -2041,6 +2181,12 @@ var ApiManager = class {
|
|
|
2041
2181
|
async awaitInitApiIfNeeded() {
|
|
2042
2182
|
if (this.waitForInitApiPromise) await this.waitForInitApiPromise;
|
|
2043
2183
|
}
|
|
2184
|
+
async awaitBootstrapIfNeeded() {
|
|
2185
|
+
if (this.waitForBootstrapPromise) await this.waitForBootstrapPromise;
|
|
2186
|
+
}
|
|
2187
|
+
notifyBootstrapComplete() {
|
|
2188
|
+
if (this.resolveBootstrapPromise) this.resolveBootstrapPromise();
|
|
2189
|
+
}
|
|
2044
2190
|
loadApiManifest({ apis = {} }) {
|
|
2045
2191
|
const apisToSet = Object.values(apis).map(({ api, scopeId }) => {
|
|
2046
2192
|
api.apiPb.metadata.id = api.apiPb.metadata.name;
|
|
@@ -2096,6 +2242,7 @@ var ApiManager = class {
|
|
|
2096
2242
|
hasCallback: !!callback
|
|
2097
2243
|
});
|
|
2098
2244
|
await this.awaitInitApiIfNeeded();
|
|
2245
|
+
await this.awaitBootstrapIfNeeded();
|
|
2099
2246
|
const apiName = path.match(/^\/apis\/([^/]+)\/api\.yaml$/)?.[1];
|
|
2100
2247
|
if (!apiName) {
|
|
2101
2248
|
console.error("[api-store] Invalid path:", path);
|
|
@@ -2104,23 +2251,28 @@ var ApiManager = class {
|
|
|
2104
2251
|
console.debug("[api-store.runApiByPath] Extracted apiName:", apiName);
|
|
2105
2252
|
editorBridge.setApiStarted(apiName);
|
|
2106
2253
|
console.debug("[api-store.runApiByPath] Executing API internally...");
|
|
2107
|
-
const
|
|
2108
|
-
|
|
2109
|
-
|
|
2110
|
-
|
|
2111
|
-
|
|
2112
|
-
|
|
2113
|
-
|
|
2114
|
-
|
|
2115
|
-
|
|
2116
|
-
|
|
2117
|
-
|
|
2118
|
-
|
|
2119
|
-
|
|
2120
|
-
|
|
2121
|
-
|
|
2122
|
-
|
|
2123
|
-
|
|
2254
|
+
const activityToken = isEditMode() ? apiActivityTracker.trackStart() : void 0;
|
|
2255
|
+
try {
|
|
2256
|
+
const result = await this.executeApi({
|
|
2257
|
+
apiId: apiName,
|
|
2258
|
+
apiName,
|
|
2259
|
+
path,
|
|
2260
|
+
inputs,
|
|
2261
|
+
options: inputs ?? {},
|
|
2262
|
+
callId,
|
|
2263
|
+
isTestRun,
|
|
2264
|
+
callback,
|
|
2265
|
+
injectedCallerId
|
|
2266
|
+
});
|
|
2267
|
+
console.debug("[api-store.runApiByPath] Execution complete, calling setApiResponse for:", apiName);
|
|
2268
|
+
editorBridge.setApiResponse(apiName, result.parsedResult);
|
|
2269
|
+
return {
|
|
2270
|
+
data: result.data,
|
|
2271
|
+
error: result.error
|
|
2272
|
+
};
|
|
2273
|
+
} finally {
|
|
2274
|
+
if (activityToken) apiActivityTracker.trackEnd(activityToken);
|
|
2275
|
+
}
|
|
2124
2276
|
}
|
|
2125
2277
|
getHMRCallHash(params) {
|
|
2126
2278
|
return `${params.injectedCallerId ?? ""}-${params.apiId}`;
|
|
@@ -3512,5 +3664,5 @@ const useJSXContext = () => {
|
|
|
3512
3664
|
};
|
|
3513
3665
|
|
|
3514
3666
|
//#endregion
|
|
3515
|
-
export {
|
|
3516
|
-
//# sourceMappingURL=jsx-wrapper-
|
|
3667
|
+
export { useSuperblocksProfiles as A, PropsCategory as B, apiActivityTracker as C, getAppMode as D, SuperblocksContextProvider as E, iframeMessageHandler as F, createPropertiesPanelDefinition as H, isEmbeddedBySuperblocksFirstParty as I, isEditMode as L, sendNotification as M, colors as N, useSuperblocksContext as O, editorBridge as P, createManagedPropsList as R, api_hmr_tracker_default as S, resolveById as T, getEditStore as U, Section as V, root_store_default as _, FixWithClarkButton as a, createIframeSpan as b, ErrorContent as c, ErrorMessage as d, ErrorStack as f, StyledClarkIcon as g, SecondaryButton as h, getWidgetRectAnchorName as i, useSuperblocksUser as j, useSuperblocksGroups as k, ErrorDetails as l, ErrorTitle as m, useJSXContext as n, ActionsContainer as o, ErrorSummary as p, getWidgetAnchorName as r, ErrorContainer as s, makeWrappedComponent as t, ErrorIconContainer as u, startEditorSync as v, rejectById as w, getContextFromTraceHeaders as x, generateId as y, Prop as z };
|
|
3668
|
+
//# sourceMappingURL=jsx-wrapper-DZ9RpgLV.js.map
|