@superblocksteam/library 2.0.69 → 2.0.70-next.1
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-DrDoDS8j.js} +185 -26
- package/dist/jsx-wrapper-DrDoDS8j.js.map +1 -0
- package/dist/lib/index.d.ts +30 -1
- package/dist/lib/index.d.ts.map +1 -1
- package/dist/lib/index.js +343 -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 +5 -4
- 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-DrDoDS8j.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";
|
|
@@ -703,6 +703,7 @@ var DeployedParentBridge = class {
|
|
|
703
703
|
connected() {}
|
|
704
704
|
sendReady() {}
|
|
705
705
|
sendLoadError(_error) {}
|
|
706
|
+
sendAppFrameWillReload() {}
|
|
706
707
|
sendNotification(_type, _message, _description) {}
|
|
707
708
|
selectWidgets(_sourceIds, _selectorIdHint) {}
|
|
708
709
|
editOpRequest(_type, _payload) {}
|
|
@@ -736,7 +737,9 @@ var DeployedParentBridge = class {
|
|
|
736
737
|
sendAiLoaderState(_shouldShowLoader) {}
|
|
737
738
|
sendRuntimeError(_data) {}
|
|
738
739
|
sendClearRuntimeError(_id) {}
|
|
740
|
+
sendConsoleLog(_data) {}
|
|
739
741
|
setInteractionMode(_mode) {}
|
|
742
|
+
sendCaptureScreenshotResponse(_callbackId, _dataUrl, _error) {}
|
|
740
743
|
};
|
|
741
744
|
|
|
742
745
|
//#endregion
|
|
@@ -798,6 +801,12 @@ var SuperblocksEditorBridge = class SuperblocksEditorBridge {
|
|
|
798
801
|
payload: { error }
|
|
799
802
|
}, true);
|
|
800
803
|
}
|
|
804
|
+
sendAppFrameWillReload() {
|
|
805
|
+
this.sendImmediate({
|
|
806
|
+
type: "sb-app-frame-will-reload",
|
|
807
|
+
payload: void 0
|
|
808
|
+
}, true);
|
|
809
|
+
}
|
|
801
810
|
sendNotification(type, message, description) {
|
|
802
811
|
this.queueMessage({
|
|
803
812
|
type: "codeMode/sendNotification",
|
|
@@ -1051,16 +1060,22 @@ var SuperblocksEditorBridge = class SuperblocksEditorBridge {
|
|
|
1051
1060
|
payload: { message }
|
|
1052
1061
|
});
|
|
1053
1062
|
}
|
|
1054
|
-
sendRuntimeError(data) {
|
|
1063
|
+
sendRuntimeError(data, forceSend = false) {
|
|
1055
1064
|
this.sendImmediate({
|
|
1056
1065
|
type: "runtime-error",
|
|
1057
1066
|
payload: data
|
|
1058
|
-
});
|
|
1067
|
+
}, forceSend);
|
|
1059
1068
|
}
|
|
1060
|
-
sendClearRuntimeError(id) {
|
|
1069
|
+
sendClearRuntimeError(id, forceSend = false) {
|
|
1061
1070
|
this.sendImmediate({
|
|
1062
1071
|
type: "clear-runtime-error",
|
|
1063
1072
|
payload: { id }
|
|
1073
|
+
}, forceSend);
|
|
1074
|
+
}
|
|
1075
|
+
sendConsoleLog(data) {
|
|
1076
|
+
this.sendImmediate({
|
|
1077
|
+
type: "console-log",
|
|
1078
|
+
payload: data
|
|
1064
1079
|
});
|
|
1065
1080
|
}
|
|
1066
1081
|
setInteractionMode(mode) {
|
|
@@ -1069,6 +1084,16 @@ var SuperblocksEditorBridge = class SuperblocksEditorBridge {
|
|
|
1069
1084
|
payload: { interactionMode: mode }
|
|
1070
1085
|
});
|
|
1071
1086
|
}
|
|
1087
|
+
sendCaptureScreenshotResponse(callbackId, dataUrl, error) {
|
|
1088
|
+
this.sendImmediate({
|
|
1089
|
+
type: "capture-screenshot-response",
|
|
1090
|
+
payload: {
|
|
1091
|
+
callbackId,
|
|
1092
|
+
dataUrl,
|
|
1093
|
+
error
|
|
1094
|
+
}
|
|
1095
|
+
});
|
|
1096
|
+
}
|
|
1072
1097
|
queueMessage(message, mergeOptions) {
|
|
1073
1098
|
if (!this.connectedToParent) this.messagesToSend.push({
|
|
1074
1099
|
payload: message,
|
|
@@ -1613,7 +1638,7 @@ function resolveById(id, payload) {
|
|
|
1613
1638
|
rejectorMap.delete(id);
|
|
1614
1639
|
}
|
|
1615
1640
|
} catch (e) {
|
|
1616
|
-
console.log("Error resolving promise", e);
|
|
1641
|
+
console.log("[internal] [resolveById] Error resolving promise", e);
|
|
1617
1642
|
}
|
|
1618
1643
|
}
|
|
1619
1644
|
function rejectById(id, payload) {
|
|
@@ -1628,10 +1653,124 @@ function rejectById(id, payload) {
|
|
|
1628
1653
|
rejectorMap.delete(id);
|
|
1629
1654
|
}
|
|
1630
1655
|
} catch (e) {
|
|
1631
|
-
console.log("Error rejecting promise", e);
|
|
1656
|
+
console.log("[internal] [rejectById] Error rejecting promise", e);
|
|
1632
1657
|
}
|
|
1633
1658
|
}
|
|
1634
1659
|
|
|
1660
|
+
//#endregion
|
|
1661
|
+
//#region src/lib/internal-details/lib/features/api-activity-tracker.ts
|
|
1662
|
+
/**
|
|
1663
|
+
* Tracks in-flight API requests to enable waiting for APIs to settle
|
|
1664
|
+
* before capturing screenshots. This is used by the screenshot handler
|
|
1665
|
+
* to avoid capturing loading states.
|
|
1666
|
+
*/
|
|
1667
|
+
const API_ACTIVITY_EVENT = "sb-api-activity-changed";
|
|
1668
|
+
var ApiActivityTracker = class {
|
|
1669
|
+
inFlightTokens = /* @__PURE__ */ new Set();
|
|
1670
|
+
lastActivityTime = Date.now();
|
|
1671
|
+
eventTarget = new EventTarget();
|
|
1672
|
+
/**
|
|
1673
|
+
* Call when an API request starts.
|
|
1674
|
+
* Returns a unique token that must be passed to trackEnd().
|
|
1675
|
+
*/
|
|
1676
|
+
trackStart() {
|
|
1677
|
+
const token = Symbol("api-request");
|
|
1678
|
+
this.inFlightTokens.add(token);
|
|
1679
|
+
this.lastActivityTime = Date.now();
|
|
1680
|
+
console.log(`[ApiActivityTracker] API started. In-flight count: ${this.inFlightTokens.size}`);
|
|
1681
|
+
this.emitChange();
|
|
1682
|
+
return token;
|
|
1683
|
+
}
|
|
1684
|
+
/**
|
|
1685
|
+
* Call when an API request completes (success, error, or cancellation).
|
|
1686
|
+
* The token must match the one returned by trackStart().
|
|
1687
|
+
* Calling with an unknown or already-ended token is a no-op (guards against double trackEnd).
|
|
1688
|
+
*/
|
|
1689
|
+
trackEnd(token) {
|
|
1690
|
+
if (!this.inFlightTokens.has(token)) return;
|
|
1691
|
+
this.inFlightTokens.delete(token);
|
|
1692
|
+
this.lastActivityTime = Date.now();
|
|
1693
|
+
console.log(`[ApiActivityTracker] API finished. In-flight count: ${this.inFlightTokens.size}`);
|
|
1694
|
+
this.emitChange();
|
|
1695
|
+
}
|
|
1696
|
+
/**
|
|
1697
|
+
* Get the current in-flight count.
|
|
1698
|
+
*/
|
|
1699
|
+
get inFlightCount() {
|
|
1700
|
+
return this.inFlightTokens.size;
|
|
1701
|
+
}
|
|
1702
|
+
/**
|
|
1703
|
+
* Get the current API activity state.
|
|
1704
|
+
*/
|
|
1705
|
+
getState() {
|
|
1706
|
+
return {
|
|
1707
|
+
inFlightCount: this.inFlightTokens.size,
|
|
1708
|
+
lastActivityTime: this.lastActivityTime
|
|
1709
|
+
};
|
|
1710
|
+
}
|
|
1711
|
+
/**
|
|
1712
|
+
* Check if there are any in-flight API requests.
|
|
1713
|
+
*/
|
|
1714
|
+
isIdle() {
|
|
1715
|
+
return this.inFlightTokens.size === 0;
|
|
1716
|
+
}
|
|
1717
|
+
/**
|
|
1718
|
+
* Wait for all APIs to become idle, with a timeout.
|
|
1719
|
+
* Resolves when either:
|
|
1720
|
+
* - All in-flight requests complete
|
|
1721
|
+
* - The timeout is reached
|
|
1722
|
+
*
|
|
1723
|
+
* @param timeoutMs Maximum time to wait (default: 10000ms)
|
|
1724
|
+
* @returns Promise that resolves with { timedOut: boolean }
|
|
1725
|
+
*/
|
|
1726
|
+
waitForIdle(timeoutMs = 1e4) {
|
|
1727
|
+
return new Promise((resolve) => {
|
|
1728
|
+
if (this.isIdle()) {
|
|
1729
|
+
console.log(`[ApiActivityTracker] waitForIdle: Already idle, resolving immediately`);
|
|
1730
|
+
resolve({ timedOut: false });
|
|
1731
|
+
return;
|
|
1732
|
+
}
|
|
1733
|
+
console.log(`[ApiActivityTracker] waitForIdle: Waiting for ${this.inFlightTokens.size} in-flight request(s) to complete (timeout: ${timeoutMs}ms)`);
|
|
1734
|
+
let resolved = false;
|
|
1735
|
+
const timeoutId = setTimeout(() => {
|
|
1736
|
+
if (resolved) return;
|
|
1737
|
+
if (this.isIdle()) {
|
|
1738
|
+
resolved = true;
|
|
1739
|
+
this.eventTarget.removeEventListener(API_ACTIVITY_EVENT, handleChange);
|
|
1740
|
+
console.log(`[ApiActivityTracker] waitForIdle: All APIs now idle, proceeding`);
|
|
1741
|
+
resolve({ timedOut: false });
|
|
1742
|
+
return;
|
|
1743
|
+
}
|
|
1744
|
+
console.warn(`[ApiActivityTracker] Timeout waiting for APIs to become idle after ${timeoutMs}ms. ${this.inFlightTokens.size} request(s) still in flight.`);
|
|
1745
|
+
this.eventTarget.removeEventListener(API_ACTIVITY_EVENT, handleChange);
|
|
1746
|
+
resolve({ timedOut: true });
|
|
1747
|
+
}, timeoutMs);
|
|
1748
|
+
const handleChange = () => {
|
|
1749
|
+
if (resolved) return;
|
|
1750
|
+
if (this.isIdle()) {
|
|
1751
|
+
resolved = true;
|
|
1752
|
+
clearTimeout(timeoutId);
|
|
1753
|
+
this.eventTarget.removeEventListener(API_ACTIVITY_EVENT, handleChange);
|
|
1754
|
+
console.log(`[ApiActivityTracker] waitForIdle: All APIs now idle, proceeding`);
|
|
1755
|
+
resolve({ timedOut: false });
|
|
1756
|
+
}
|
|
1757
|
+
};
|
|
1758
|
+
this.eventTarget.addEventListener(API_ACTIVITY_EVENT, handleChange);
|
|
1759
|
+
});
|
|
1760
|
+
}
|
|
1761
|
+
/**
|
|
1762
|
+
* Reset the tracker state. Useful for testing.
|
|
1763
|
+
*/
|
|
1764
|
+
reset() {
|
|
1765
|
+
this.inFlightTokens.clear();
|
|
1766
|
+
this.lastActivityTime = Date.now();
|
|
1767
|
+
}
|
|
1768
|
+
emitChange() {
|
|
1769
|
+
this.eventTarget.dispatchEvent(new Event(API_ACTIVITY_EVENT));
|
|
1770
|
+
}
|
|
1771
|
+
};
|
|
1772
|
+
const apiActivityTracker = new ApiActivityTracker();
|
|
1773
|
+
|
|
1635
1774
|
//#endregion
|
|
1636
1775
|
//#region src/lib/internal-details/lib/features/api-hmr-tracker.ts
|
|
1637
1776
|
var ApiHmrTracker = class ApiHmrTracker {
|
|
@@ -1678,6 +1817,9 @@ var ApiHmrTracker = class ApiHmrTracker {
|
|
|
1678
1817
|
incReloadCount() {
|
|
1679
1818
|
this.reloadCount++;
|
|
1680
1819
|
}
|
|
1820
|
+
dontSkipUntilNextReload() {
|
|
1821
|
+
this.propagatedReloadCount = Math.max(this.propagatedReloadCount, this.reloadCount);
|
|
1822
|
+
}
|
|
1681
1823
|
mountLikeTimer = null;
|
|
1682
1824
|
reportJSXActivity() {
|
|
1683
1825
|
const reloadCount = this.reloadCount;
|
|
@@ -1775,7 +1917,7 @@ async function executeV2Api(params) {
|
|
|
1775
1917
|
} catch (err) {
|
|
1776
1918
|
const message = `Failed to execute ${apiName || "API"}. ${err}`;
|
|
1777
1919
|
const suppressError = viewMode !== ViewMode.EDITOR && err?.code === 20;
|
|
1778
|
-
if (notifyOnSystemError && !suppressError) console.log(message);
|
|
1920
|
+
if (notifyOnSystemError && !suppressError) console.log(`[internal] [executeV2Api] ${message}`);
|
|
1779
1921
|
return {
|
|
1780
1922
|
systemError: message,
|
|
1781
1923
|
statusCode: err instanceof HttpError ? err.code : void 0
|
|
@@ -1834,7 +1976,7 @@ const stream = async ({ url, headers, body, onMessage, onComplete, onError, defa
|
|
|
1834
1976
|
done = readerDone && lastChunk === "";
|
|
1835
1977
|
}
|
|
1836
1978
|
} catch (e) {
|
|
1837
|
-
if (e.name === "AbortError") console.log("Fetch was cancelled");
|
|
1979
|
+
if (e.name === "AbortError") console.log("[internal] [stream] Fetch was cancelled");
|
|
1838
1980
|
else onError(e.message ?? defaultError, e.code);
|
|
1839
1981
|
} finally {
|
|
1840
1982
|
onComplete();
|
|
@@ -2015,9 +2157,14 @@ var ApiManager = class {
|
|
|
2015
2157
|
accessToken;
|
|
2016
2158
|
runningApiControllers = {};
|
|
2017
2159
|
waitForInitApiPromise = void 0;
|
|
2160
|
+
waitForBootstrapPromise = void 0;
|
|
2161
|
+
resolveBootstrapPromise = void 0;
|
|
2018
2162
|
callContexts = {};
|
|
2019
2163
|
constructor(rootStore) {
|
|
2020
2164
|
this.rootStore = rootStore;
|
|
2165
|
+
this.waitForBootstrapPromise = new Promise((resolve) => {
|
|
2166
|
+
this.resolveBootstrapPromise = resolve;
|
|
2167
|
+
});
|
|
2021
2168
|
}
|
|
2022
2169
|
set agentUrls(urls) {
|
|
2023
2170
|
this._agentUrls = urls;
|
|
@@ -2041,6 +2188,12 @@ var ApiManager = class {
|
|
|
2041
2188
|
async awaitInitApiIfNeeded() {
|
|
2042
2189
|
if (this.waitForInitApiPromise) await this.waitForInitApiPromise;
|
|
2043
2190
|
}
|
|
2191
|
+
async awaitBootstrapIfNeeded() {
|
|
2192
|
+
if (this.waitForBootstrapPromise) await this.waitForBootstrapPromise;
|
|
2193
|
+
}
|
|
2194
|
+
notifyBootstrapComplete() {
|
|
2195
|
+
if (this.resolveBootstrapPromise) this.resolveBootstrapPromise();
|
|
2196
|
+
}
|
|
2044
2197
|
loadApiManifest({ apis = {} }) {
|
|
2045
2198
|
const apisToSet = Object.values(apis).map(({ api, scopeId }) => {
|
|
2046
2199
|
api.apiPb.metadata.id = api.apiPb.metadata.name;
|
|
@@ -2096,6 +2249,7 @@ var ApiManager = class {
|
|
|
2096
2249
|
hasCallback: !!callback
|
|
2097
2250
|
});
|
|
2098
2251
|
await this.awaitInitApiIfNeeded();
|
|
2252
|
+
await this.awaitBootstrapIfNeeded();
|
|
2099
2253
|
const apiName = path.match(/^\/apis\/([^/]+)\/api\.yaml$/)?.[1];
|
|
2100
2254
|
if (!apiName) {
|
|
2101
2255
|
console.error("[api-store] Invalid path:", path);
|
|
@@ -2104,23 +2258,28 @@ var ApiManager = class {
|
|
|
2104
2258
|
console.debug("[api-store.runApiByPath] Extracted apiName:", apiName);
|
|
2105
2259
|
editorBridge.setApiStarted(apiName);
|
|
2106
2260
|
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
|
-
|
|
2261
|
+
const activityToken = isEditMode() ? apiActivityTracker.trackStart() : void 0;
|
|
2262
|
+
try {
|
|
2263
|
+
const result = await this.executeApi({
|
|
2264
|
+
apiId: apiName,
|
|
2265
|
+
apiName,
|
|
2266
|
+
path,
|
|
2267
|
+
inputs,
|
|
2268
|
+
options: inputs ?? {},
|
|
2269
|
+
callId,
|
|
2270
|
+
isTestRun,
|
|
2271
|
+
callback,
|
|
2272
|
+
injectedCallerId
|
|
2273
|
+
});
|
|
2274
|
+
console.debug("[api-store.runApiByPath] Execution complete, calling setApiResponse for:", apiName);
|
|
2275
|
+
editorBridge.setApiResponse(apiName, result.parsedResult);
|
|
2276
|
+
return {
|
|
2277
|
+
data: result.data,
|
|
2278
|
+
error: result.error
|
|
2279
|
+
};
|
|
2280
|
+
} finally {
|
|
2281
|
+
if (activityToken) apiActivityTracker.trackEnd(activityToken);
|
|
2282
|
+
}
|
|
2124
2283
|
}
|
|
2125
2284
|
getHMRCallHash(params) {
|
|
2126
2285
|
return `${params.injectedCallerId ?? ""}-${params.apiId}`;
|
|
@@ -3512,5 +3671,5 @@ const useJSXContext = () => {
|
|
|
3512
3671
|
};
|
|
3513
3672
|
|
|
3514
3673
|
//#endregion
|
|
3515
|
-
export {
|
|
3516
|
-
//# sourceMappingURL=jsx-wrapper-
|
|
3674
|
+
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 };
|
|
3675
|
+
//# sourceMappingURL=jsx-wrapper-DrDoDS8j.js.map
|