@djangocfg/debuger 2.1.233 → 2.1.235
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/{chunk-ESIQODSI.mjs → chunk-5LBHQJ2O.mjs} +5 -4
- package/dist/chunk-5LBHQJ2O.mjs.map +1 -0
- package/dist/index.cjs +23 -27
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.ts +3 -3
- package/dist/index.mjs +24 -28
- package/dist/index.mjs.map +1 -1
- package/dist/logger/index.cjs +3 -2
- package/dist/logger/index.cjs.map +1 -1
- package/dist/logger/index.mjs +1 -1
- package/package.json +6 -6
- package/src/DebugButton.tsx +45 -47
- package/src/logger/logger.ts +1 -1
- package/dist/chunk-ESIQODSI.mjs.map +0 -1
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { __name } from './chunk-PAWJFY3S.mjs';
|
|
2
2
|
import { create } from 'zustand';
|
|
3
|
+
import { isDev } from '@djangocfg/ui-core/lib';
|
|
3
4
|
|
|
4
5
|
var MAX_LOGS = 1e3;
|
|
5
6
|
var DEFAULT_FILTER = {
|
|
@@ -75,7 +76,7 @@ function createDebugLogger(component) {
|
|
|
75
76
|
if (isBrowser) {
|
|
76
77
|
useDebugLogStore.getState().addLog({ level, component, message, data: cleanData, stack });
|
|
77
78
|
}
|
|
78
|
-
{
|
|
79
|
+
if (isDev) {
|
|
79
80
|
const method = level === "error" ? "error" : level === "warn" ? "warn" : "log";
|
|
80
81
|
const prefix = `[${component}]`;
|
|
81
82
|
if (cleanData) {
|
|
@@ -99,7 +100,7 @@ function debugLog(component, level, message, data) {
|
|
|
99
100
|
if (isBrowser) {
|
|
100
101
|
useDebugLogStore.getState().addLog({ level, component, message, data: cleanData, stack });
|
|
101
102
|
}
|
|
102
|
-
{
|
|
103
|
+
if (isDev) {
|
|
103
104
|
const method = level === "error" ? "error" : level === "warn" ? "warn" : "log";
|
|
104
105
|
if (cleanData) {
|
|
105
106
|
console[method](`[${component}]`, message, cleanData);
|
|
@@ -111,5 +112,5 @@ function debugLog(component, level, message, data) {
|
|
|
111
112
|
__name(debugLog, "debugLog");
|
|
112
113
|
|
|
113
114
|
export { createDebugLogger, debugLog, useDebugErrorCount, useDebugFilteredLogs, useDebugLogCount, useDebugLogStore };
|
|
114
|
-
//# sourceMappingURL=chunk-
|
|
115
|
-
//# sourceMappingURL=chunk-
|
|
115
|
+
//# sourceMappingURL=chunk-5LBHQJ2O.mjs.map
|
|
116
|
+
//# sourceMappingURL=chunk-5LBHQJ2O.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/logger/logStore.ts","../src/logger/logger.ts"],"names":[],"mappings":"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","file":"chunk-5LBHQJ2O.mjs","sourcesContent":["'use client';\n\nimport { create } from 'zustand';\nimport type { LogStore, LogEntry, LogFilter } from './types';\n\n// ============================================================================\n// Constants\n// ============================================================================\n\nconst MAX_LOGS = 1000;\n\nconst DEFAULT_FILTER: LogFilter = {\n levels: ['debug', 'info', 'warn', 'error', 'success'],\n};\n\n// ============================================================================\n// Helpers\n// ============================================================================\n\nlet _counter = 0;\n\nfunction generateId(): string {\n return `log-${Date.now()}-${++_counter}`;\n}\n\nfunction matchesFilter(entry: LogEntry, filter: LogFilter): boolean {\n if (!filter.levels.includes(entry.level)) return false;\n\n if (filter.component) {\n if (!entry.component.toLowerCase().includes(filter.component.toLowerCase())) return false;\n }\n\n if (filter.search) {\n const s = filter.search.toLowerCase();\n const inMsg = entry.message.toLowerCase().includes(s);\n const inData = entry.data ? JSON.stringify(entry.data).toLowerCase().includes(s) : false;\n if (!inMsg && !inData) return false;\n }\n\n return true;\n}\n\n// ============================================================================\n// Store\n// ============================================================================\n\nexport const useDebugLogStore = create<LogStore>((set, get) => ({\n logs: [],\n filter: DEFAULT_FILTER,\n\n addLog: (entry) => {\n const newEntry: LogEntry = {\n ...entry,\n id: generateId(),\n timestamp: new Date(),\n };\n set((state) => {\n const next = [...state.logs, newEntry];\n return { logs: next.length > MAX_LOGS ? next.slice(-MAX_LOGS) : next };\n });\n },\n\n clearLogs: () => set({ logs: [] }),\n\n setFilter: (filter) =>\n set((state) => ({ filter: { ...state.filter, ...filter } })),\n\n getFilteredLogs: () => {\n const { logs, filter } = get();\n return logs.filter((e) => matchesFilter(e, filter));\n },\n\n exportLogs: () => JSON.stringify(get().logs, null, 2),\n}));\n\n// ============================================================================\n// Selector hooks\n// ============================================================================\n\nexport const useDebugFilteredLogs = () => {\n const logs = useDebugLogStore((s) => s.logs);\n const filter = useDebugLogStore((s) => s.filter);\n return logs.filter((e) => matchesFilter(e, filter));\n};\n\nexport const useDebugLogCount = () => useDebugLogStore((s) => s.logs.length);\n\nexport const useDebugErrorCount = () =>\n useDebugLogStore((s) => s.logs.filter((l) => l.level === 'error').length);\n","/**\n * Debug Logger\n *\n * Standalone logger for @djangocfg/debuger — no ui-core dependency.\n * Writes to useDebugLogStore (shown in LogsPanel) and to console in dev.\n */\n\nimport { useDebugLogStore } from './logStore';\nimport type { Logger, LogLevel } from './types';\n\n// ============================================================================\n// Helpers\n// ============================================================================\n\nimport { isDev } from '@djangocfg/ui-core/lib';\nconst isBrowser = typeof window !== 'undefined';\n\nfunction extractStack(data?: Record<string, unknown>): {\n cleanData: Record<string, unknown> | undefined;\n stack: string | undefined;\n} {\n if (!data) return { cleanData: undefined, stack: undefined };\n\n const cleanData = { ...data };\n let stack: string | undefined;\n\n if (data.error instanceof Error) {\n stack = data.error.stack;\n cleanData.error = { name: data.error.name, message: data.error.message };\n } else if (typeof data.error === 'object' && data.error !== null) {\n const e = data.error as Record<string, unknown>;\n if (typeof e.stack === 'string') stack = e.stack;\n if (typeof e.message === 'string') cleanData.error = e.message;\n }\n\n return { cleanData, stack };\n}\n\n// ============================================================================\n// createLogger\n// ============================================================================\n\nexport function createDebugLogger(component: string): Logger {\n const write = (level: LogLevel, message: string, data?: Record<string, unknown>) => {\n const { cleanData, stack } = extractStack(data);\n\n if (isBrowser) {\n useDebugLogStore.getState().addLog({ level, component, message, data: cleanData, stack });\n }\n\n if (isDev) {\n const method = level === 'error' ? 'error' : level === 'warn' ? 'warn' : 'log';\n const prefix = `[${component}]`;\n if (cleanData) {\n console[method](prefix, message, cleanData);\n } else {\n console[method](prefix, message);\n }\n }\n };\n\n return {\n debug: (msg, data) => write('debug', msg, data),\n info: (msg, data) => write('info', msg, data),\n warn: (msg, data) => write('warn', msg, data),\n error: (msg, data) => write('error', msg, data),\n success: (msg, data) => write('success', msg, data),\n };\n}\n\n// ============================================================================\n// debugLog — one-shot helper (creates logger on each call, for non-hot paths)\n// ============================================================================\n\nexport function debugLog(\n component: string,\n level: LogLevel,\n message: string,\n data?: Record<string, unknown>,\n): void {\n const { cleanData, stack } = extractStack(data);\n\n if (isBrowser) {\n useDebugLogStore.getState().addLog({ level, component, message, data: cleanData, stack });\n }\n\n if (isDev) {\n const method = level === 'error' ? 'error' : level === 'warn' ? 'warn' : 'log';\n if (cleanData) {\n console[method](`[${component}]`, message, cleanData);\n } else {\n console[method](`[${component}]`, message);\n }\n }\n}\n"]}
|
package/dist/index.cjs
CHANGED
|
@@ -30,12 +30,12 @@ var useDebugStore = zustand.create((set) => ({
|
|
|
30
30
|
function useDebugShortcut() {
|
|
31
31
|
const toggle = useDebugStore((s) => s.toggle);
|
|
32
32
|
const isUnlocked = useDebugStore((s) => s.isUnlocked);
|
|
33
|
-
const
|
|
33
|
+
const isDev3 = typeof process !== "undefined" && process.env.NODE_ENV !== "production";
|
|
34
34
|
hooks.useHotkey(
|
|
35
35
|
"meta+d",
|
|
36
36
|
(e) => {
|
|
37
37
|
e.preventDefault();
|
|
38
|
-
if (!
|
|
38
|
+
if (!isDev3 && !isUnlocked) return;
|
|
39
39
|
toggle();
|
|
40
40
|
},
|
|
41
41
|
{ preventDefault: true }
|
|
@@ -116,7 +116,7 @@ function createDebugLogger(component) {
|
|
|
116
116
|
if (isBrowser) {
|
|
117
117
|
useDebugLogStore.getState().addLog({ level, component, message, data: cleanData, stack });
|
|
118
118
|
}
|
|
119
|
-
{
|
|
119
|
+
if (lib.isDev) {
|
|
120
120
|
const method = level === "error" ? "error" : level === "warn" ? "warn" : "log";
|
|
121
121
|
const prefix = `[${component}]`;
|
|
122
122
|
if (cleanData) {
|
|
@@ -140,7 +140,7 @@ function debugLog(component, level, message, data) {
|
|
|
140
140
|
if (isBrowser) {
|
|
141
141
|
useDebugLogStore.getState().addLog({ level, component, message, data: cleanData, stack });
|
|
142
142
|
}
|
|
143
|
-
{
|
|
143
|
+
if (lib.isDev) {
|
|
144
144
|
const method = level === "error" ? "error" : level === "warn" ? "warn" : "log";
|
|
145
145
|
if (cleanData) {
|
|
146
146
|
console[method](`[${component}]`, message, cleanData);
|
|
@@ -702,29 +702,19 @@ function DebugPanel({
|
|
|
702
702
|
);
|
|
703
703
|
}
|
|
704
704
|
__name(DebugPanel, "DebugPanel");
|
|
705
|
-
function
|
|
706
|
-
const clicks = react.useRef([]);
|
|
707
|
-
return react.useCallback(() => {
|
|
708
|
-
const now = Date.now();
|
|
709
|
-
clicks.current = [...clicks.current.filter((t) => now - t < 2e3), now];
|
|
710
|
-
if (clicks.current.length >= 5) {
|
|
711
|
-
clicks.current = [];
|
|
712
|
-
onTriggered();
|
|
713
|
-
}
|
|
714
|
-
}, [onTriggered]);
|
|
715
|
-
}
|
|
716
|
-
__name(useEasterEgg, "useEasterEgg");
|
|
717
|
-
function DebugButton({ className, panel = {}, defaultUnlocked = false }) {
|
|
705
|
+
function DebugButton({ className, panel = {}, enabled }) {
|
|
718
706
|
const isOpen = useDebugStore((s) => s.isOpen);
|
|
719
707
|
const isUnlocked = useDebugStore((s) => s.isUnlocked);
|
|
720
708
|
const unlock = useDebugStore((s) => s.unlock);
|
|
721
709
|
const toggle = useDebugStore((s) => s.toggle);
|
|
722
710
|
const isDebugMode = client.useDebugMode();
|
|
723
|
-
react.useEffect(() => {
|
|
724
|
-
if (defaultUnlocked || isDebugMode) unlock("1");
|
|
725
|
-
}, [defaultUnlocked, isDebugMode, unlock]);
|
|
726
711
|
const errorCount = useDebugErrorCount();
|
|
727
712
|
useDebugShortcut();
|
|
713
|
+
const shouldUnlock = lib.isDev || isDebugMode;
|
|
714
|
+
if (typeof window !== "undefined") console.info("[DebugButton]", { isDev: lib.isDev, isDebugMode, shouldUnlock, isUnlocked, enabled });
|
|
715
|
+
react.useEffect(() => {
|
|
716
|
+
if (shouldUnlock) unlock("1");
|
|
717
|
+
}, [shouldUnlock, unlock]);
|
|
728
718
|
react.useEffect(() => {
|
|
729
719
|
if (typeof document === "undefined") return;
|
|
730
720
|
const apply = /* @__PURE__ */ __name(() => {
|
|
@@ -737,22 +727,28 @@ function DebugButton({ className, panel = {}, defaultUnlocked = false }) {
|
|
|
737
727
|
observer.observe(document.body, { childList: true });
|
|
738
728
|
return () => observer.disconnect();
|
|
739
729
|
}, [isOpen]);
|
|
740
|
-
const
|
|
741
|
-
|
|
742
|
-
|
|
730
|
+
const clicks = react.useRef([]);
|
|
731
|
+
const handleEasterEgg = react.useCallback(() => {
|
|
732
|
+
const now = Date.now();
|
|
733
|
+
clicks.current = [...clicks.current.filter((t) => now - t < 2e3), now];
|
|
734
|
+
if (clicks.current.length >= 5) {
|
|
735
|
+
clicks.current = [];
|
|
736
|
+
unlock("1");
|
|
737
|
+
toggle();
|
|
738
|
+
}
|
|
743
739
|
}, [unlock, toggle]);
|
|
744
|
-
|
|
740
|
+
if (enabled === false && !isDebugMode) return null;
|
|
745
741
|
if (!isUnlocked) {
|
|
746
742
|
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
747
743
|
"div",
|
|
748
744
|
{
|
|
749
|
-
className: "fixed bottom-5 left-5 w-9 h-9 z-[99999] opacity-0",
|
|
750
|
-
onClick:
|
|
745
|
+
className: "fixed bottom-5 left-5 w-9 h-9 z-[99999] opacity-0 cursor-default",
|
|
746
|
+
onClick: handleEasterEgg
|
|
751
747
|
}
|
|
752
748
|
);
|
|
753
749
|
}
|
|
754
750
|
return /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
|
|
755
|
-
!isOpen && /* @__PURE__ */ jsxRuntime.jsx("div", { className: "fixed bottom-5
|
|
751
|
+
!isOpen && /* @__PURE__ */ jsxRuntime.jsx("div", { className: lib.cn("fixed bottom-5 z-[99999]", lib.isDev ? "left-16" : "left-5"), children: /* @__PURE__ */ jsxRuntime.jsxs(components.Tooltip, { children: [
|
|
756
752
|
/* @__PURE__ */ jsxRuntime.jsx(components.TooltipTrigger, { asChild: true, children: /* @__PURE__ */ jsxRuntime.jsxs(
|
|
757
753
|
"button",
|
|
758
754
|
{
|