@devlens/core 1.0.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.
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/network/interceptor.ts","../src/guardian/data-guardian.ts","../src/catcher/global-catcher.ts","../src/reporter/console-reporter.ts","../src/engine/detection-engine.ts"],"names":[],"mappings":"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","file":"index.mjs","sourcesContent":["import type {\n DevLensEngine,\n NetworkInterceptorConfig,\n DetectedIssue,\n Severity,\n} from '../types';\n\nfunction matchesPattern(url: string, patterns: (string | RegExp)[]): boolean {\n return patterns.some((p) =>\n typeof p === 'string' ? url.includes(p) : p.test(url),\n );\n}\n\nfunction generateIssueId(method: string, url: string, status: number): string {\n return `network:${method}:${url}:${status}`;\n}\n\nfunction severityFromStatus(status: number): Severity {\n if (status >= 500) return 'error';\n if (status >= 400) return 'warn';\n return 'info';\n}\n\nfunction buildSuggestion(\n method: string,\n url: string,\n status: number,\n): string {\n if (status >= 500)\n return `Server returned ${status} for ${method} ${url} — check server logs`;\n if (status === 404)\n return `Endpoint ${url} not found — verify the URL is correct`;\n if (status === 401 || status === 403)\n return `Authentication/authorization failed for ${url} — check credentials or permissions`;\n if (status >= 400)\n return `Client error ${status} for ${method} ${url} — check request parameters`;\n return `Request to ${url} completed with status ${status}`;\n}\n\nexport function createNetworkInterceptor(\n engine: DevLensEngine,\n config?: NetworkInterceptorConfig | boolean,\n) {\n const resolvedConfig: NetworkInterceptorConfig =\n typeof config === 'boolean' || config === undefined\n ? {}\n : config;\n\n const interceptFetch = resolvedConfig.fetch !== false;\n const interceptXhr = resolvedConfig.xhr !== false;\n const ignoreUrls = resolvedConfig.ignoreUrls ?? [];\n const logSuccess = resolvedConfig.logSuccess ?? false;\n\n let originalFetch: typeof globalThis.fetch | null = null;\n let originalXhrOpen: typeof XMLHttpRequest.prototype.open | null = null;\n let originalXhrSend: typeof XMLHttpRequest.prototype.send | null = null;\n\n function shouldIgnore(url: string): boolean {\n return ignoreUrls.length > 0 && matchesPattern(url, ignoreUrls);\n }\n\n function reportNetworkIssue(\n method: string,\n url: string,\n status: number,\n statusText: string,\n duration: number,\n error?: Error,\n ): void {\n if (!engine.isEnabled()) return;\n\n const severity = error ? 'error' : severityFromStatus(status);\n if (severity === 'info' && !logSuccess) return;\n\n const issue: DetectedIssue = {\n id: generateIssueId(method, url, status),\n timestamp: Date.now(),\n severity,\n category: 'network',\n message: error\n ? `${method} ${url} failed: ${error.message}`\n : `${method} ${url} returned ${status} ${statusText}`,\n details: {\n url,\n method,\n status,\n statusText,\n duration: `${duration}ms`,\n },\n suggestion: error\n ? `Network request to ${url} failed — check if the server is running and the URL is correct`\n : buildSuggestion(method, url, status),\n stack: error?.stack,\n source: 'NetworkInterceptor',\n };\n\n engine.report(issue);\n }\n\n function installFetchInterceptor(): void {\n if (typeof globalThis.fetch === 'undefined') return;\n originalFetch = globalThis.fetch;\n\n const savedFetch = originalFetch;\n globalThis.fetch = async function devlensFetch(\n input: RequestInfo | URL,\n init?: RequestInit,\n ): Promise<Response> {\n const url =\n typeof input === 'string'\n ? input\n : input instanceof URL\n ? input.toString()\n : input.url;\n\n const method = init?.method ?? 'GET';\n\n if (shouldIgnore(url)) {\n return savedFetch.call(globalThis, input, init);\n }\n\n const start = performance.now();\n\n try {\n const response = await savedFetch.call(globalThis, input, init);\n const duration = Math.round(performance.now() - start);\n\n if (!response.ok || logSuccess) {\n reportNetworkIssue(\n method.toUpperCase(),\n url,\n response.status,\n response.statusText,\n duration,\n );\n }\n\n return response;\n } catch (err) {\n const duration = Math.round(performance.now() - start);\n reportNetworkIssue(\n method.toUpperCase(),\n url,\n 0,\n 'Network Error',\n duration,\n err instanceof Error ? err : new Error(String(err)),\n );\n throw err;\n }\n };\n }\n\n function installXhrInterceptor(): void {\n if (typeof XMLHttpRequest === 'undefined') return;\n\n originalXhrOpen = XMLHttpRequest.prototype.open;\n originalXhrSend = XMLHttpRequest.prototype.send;\n\n const savedOpen = originalXhrOpen;\n const savedSend = originalXhrSend;\n\n XMLHttpRequest.prototype.open = function devlensXhrOpen(\n method: string,\n url: string | URL,\n ...rest: unknown[]\n ): void {\n (this as XMLHttpRequest & { _devlens_method: string })._devlens_method =\n method;\n (this as XMLHttpRequest & { _devlens_url: string })._devlens_url =\n typeof url === 'string' ? url : url.toString();\n return savedOpen.apply(\n this,\n [method, url, ...rest] as Parameters<typeof savedOpen>,\n );\n };\n\n XMLHttpRequest.prototype.send = function devlensXhrSend(\n body?: Document | XMLHttpRequestBodyInit | null,\n ): void {\n const xhr = this as XMLHttpRequest & {\n _devlens_method: string;\n _devlens_url: string;\n };\n const method = xhr._devlens_method ?? 'GET';\n const url = xhr._devlens_url ?? '';\n\n if (shouldIgnore(url)) {\n return savedSend.call(this, body);\n }\n\n const start = performance.now();\n\n const onLoadEnd = (): void => {\n const duration = Math.round(performance.now() - start);\n if (xhr.status >= 400 || logSuccess) {\n reportNetworkIssue(\n method.toUpperCase(),\n url,\n xhr.status,\n xhr.statusText,\n duration,\n );\n }\n xhr.removeEventListener('loadend', onLoadEnd);\n xhr.removeEventListener('error', onError);\n };\n\n const onError = (): void => {\n const duration = Math.round(performance.now() - start);\n reportNetworkIssue(\n method.toUpperCase(),\n url,\n 0,\n 'Network Error',\n duration,\n new Error('XMLHttpRequest network error'),\n );\n xhr.removeEventListener('loadend', onLoadEnd);\n xhr.removeEventListener('error', onError);\n };\n\n xhr.addEventListener('loadend', onLoadEnd);\n xhr.addEventListener('error', onError);\n\n return savedSend.call(this, body);\n };\n }\n\n function install(): void {\n if (typeof window === 'undefined') return;\n if (interceptFetch) installFetchInterceptor();\n if (interceptXhr) installXhrInterceptor();\n }\n\n function uninstall(): void {\n if (originalFetch) {\n globalThis.fetch = originalFetch;\n originalFetch = null;\n }\n if (originalXhrOpen) {\n XMLHttpRequest.prototype.open = originalXhrOpen;\n originalXhrOpen = null;\n }\n if (originalXhrSend) {\n XMLHttpRequest.prototype.send = originalXhrSend;\n originalXhrSend = null;\n }\n }\n\n return { install, uninstall };\n}\n","import type {\n DevLensEngine,\n DataGuardianConfig,\n DetectedIssue,\n IssueCategory,\n} from '../types';\n\nconst SKIP_PROPERTIES = new Set([\n 'constructor',\n 'prototype',\n '__proto__',\n 'toJSON',\n 'toString',\n 'valueOf',\n 'length',\n 'then',\n 'catch',\n 'finally',\n '$$typeof',\n '_owner',\n '_store',\n 'ref',\n 'key',\n '_self',\n '_source',\n 'displayName',\n 'nodeType',\n]);\n\nconst NON_PROXYABLE_TYPES = new Set([\n '[object Date]',\n '[object RegExp]',\n '[object Map]',\n '[object Set]',\n '[object WeakMap]',\n '[object WeakSet]',\n '[object Error]',\n '[object Promise]',\n '[object ArrayBuffer]',\n '[object DataView]',\n '[object Int8Array]',\n '[object Uint8Array]',\n '[object Float32Array]',\n '[object Float64Array]',\n]);\n\nfunction isProxyable(value: unknown): value is object {\n if (value === null || value === undefined) return false;\n if (typeof value !== 'object' && typeof value !== 'function') return false;\n const tag = Object.prototype.toString.call(value);\n return !NON_PROXYABLE_TYPES.has(tag);\n}\n\nexport function createDataGuardian(\n engine: DevLensEngine,\n config?: DataGuardianConfig | boolean,\n) {\n const resolvedConfig: DataGuardianConfig =\n typeof config === 'boolean' || config === undefined ? {} : config;\n\n const maxDepth = resolvedConfig.maxDepth ?? 5;\n const ignorePaths = new Set(resolvedConfig.ignorePaths ?? []);\n const verbose = resolvedConfig.verbose ?? false;\n\n const proxyCache = new WeakMap<object, object>();\n\n function shouldIgnorePath(path: string): boolean {\n if (ignorePaths.size === 0) return false;\n return ignorePaths.has(path);\n }\n\n function reportAccess(\n path: string,\n value: null | undefined,\n label: string,\n ): void {\n if (!engine.isEnabled()) return;\n if (shouldIgnorePath(path)) return;\n\n const isNull = value === null;\n const category: IssueCategory = isNull ? 'null-access' : 'undefined-data';\n const prop = path.split('.').pop() ?? path;\n\n const issue: DetectedIssue = {\n id: `${category}:${path}`,\n timestamp: Date.now(),\n severity: 'warn',\n category,\n message: `Property \"${prop}\" is ${isNull ? 'null' : 'undefined'} at path \"${path}\"`,\n path,\n foundValue: value,\n expectedType: 'non-nullish value',\n source: label,\n suggestion: `Check if \"${prop}\" is loaded/initialized before accessing. Full path: ${path}`,\n };\n\n engine.report(issue);\n }\n\n function createProxy<T extends object>(\n target: T,\n label: string,\n parentPath: string,\n depth: number,\n ): T {\n if (depth > maxDepth) return target;\n\n const cached = proxyCache.get(target);\n if (cached) return cached as T;\n\n const proxy = new Proxy(target, {\n get(obj, prop, receiver): unknown {\n if (typeof prop === 'symbol') {\n return Reflect.get(obj, prop, receiver);\n }\n\n if (SKIP_PROPERTIES.has(prop)) {\n return Reflect.get(obj, prop, receiver);\n }\n\n const currentPath = parentPath ? `${parentPath}.${prop}` : prop;\n const value = Reflect.get(obj, prop, receiver);\n\n if (value === null || value === undefined) {\n const hasOwn =\n Object.prototype.hasOwnProperty.call(obj, prop) ||\n prop in obj;\n if (hasOwn) {\n reportAccess(currentPath, value as null | undefined, label);\n } else if (verbose) {\n reportAccess(currentPath, value as null | undefined, label);\n }\n return value;\n }\n\n if (typeof value === 'function') {\n return value;\n }\n\n if (isProxyable(value)) {\n return createProxy(\n value as object,\n label,\n currentPath,\n depth + 1,\n );\n }\n\n return value;\n },\n\n has(obj, prop): boolean {\n return Reflect.has(obj, prop);\n },\n\n ownKeys(obj): (string | symbol)[] {\n return Reflect.ownKeys(obj);\n },\n\n getOwnPropertyDescriptor(\n obj,\n prop,\n ): PropertyDescriptor | undefined {\n return Reflect.getOwnPropertyDescriptor(obj, prop);\n },\n\n set(obj, prop, value, receiver): boolean {\n return Reflect.set(obj, prop, value, receiver);\n },\n\n deleteProperty(obj, prop): boolean {\n return Reflect.deleteProperty(obj, prop);\n },\n });\n\n proxyCache.set(target, proxy);\n return proxy as T;\n }\n\n function guard<T extends object>(target: T, label?: string): T {\n if (target === null || target === undefined) {\n const nullLabel = label ?? 'unknown';\n const issue: DetectedIssue = {\n id: `null-access:${nullLabel}:root`,\n timestamp: Date.now(),\n severity: 'error',\n category: target === null ? 'null-access' : 'undefined-data',\n message: `Attempted to guard a ${target === null ? 'null' : 'undefined'} value (label: \"${nullLabel}\")`,\n path: nullLabel,\n foundValue: target,\n source: nullLabel,\n suggestion: `The value passed to guard() is ${target === null ? 'null' : 'undefined'}. Ensure data is loaded before guarding.`,\n };\n engine.report(issue);\n return target;\n }\n\n if (!isProxyable(target)) return target;\n return createProxy(target, label ?? 'guarded', '', 0);\n }\n\n function guardDeep<T extends object>(target: T, label?: string): T {\n if (target === null || target === undefined) return guard(target, label);\n if (!isProxyable(target)) return target;\n\n const seen = new WeakSet<object>();\n const resolvedLabel = label ?? 'guarded';\n\n function walkAndProxy(obj: object, path: string, depth: number): void {\n if (depth > maxDepth) return;\n if (seen.has(obj)) return;\n seen.add(obj);\n\n const keys = Object.keys(obj);\n for (const key of keys) {\n const value = (obj as Record<string, unknown>)[key];\n if (value !== null && value !== undefined && isProxyable(value)) {\n const childPath = path ? `${path}.${key}` : key;\n createProxy(value as object, resolvedLabel, childPath, depth + 1);\n walkAndProxy(value as object, childPath, depth + 1);\n }\n }\n }\n\n walkAndProxy(target, '', 0);\n return createProxy(target, resolvedLabel, '', 0);\n }\n\n function unguardAll(): void {\n }\n\n return { guard, guardDeep, unguardAll };\n}\n","import type { DevLensEngine, GlobalCatcherConfig, DetectedIssue } from '../types';\n\nexport function createGlobalCatcher(\n engine: DevLensEngine,\n config?: GlobalCatcherConfig | boolean,\n) {\n const resolvedConfig: GlobalCatcherConfig =\n typeof config === 'boolean' || config === undefined ? {} : config;\n\n const catchWindowErrors = resolvedConfig.windowErrors !== false;\n const catchRejections = resolvedConfig.unhandledRejections !== false;\n const catchConsoleErrors = resolvedConfig.consoleErrors === true;\n\n let originalConsoleError: typeof console.error | null = null;\n\n function handleWindowError(event: ErrorEvent): void {\n if (!engine.isEnabled()) return;\n\n const issue: DetectedIssue = {\n id: `unhandled-error:${event.message}:${event.filename ?? ''}:${event.lineno ?? 0}`,\n timestamp: Date.now(),\n severity: 'error',\n category: 'unhandled-error',\n message: event.message || 'Unknown error',\n details: {\n filename: event.filename,\n lineno: event.lineno,\n colno: event.colno,\n },\n stack: event.error?.stack,\n source: event.filename\n ? `${event.filename}:${event.lineno}:${event.colno}`\n : 'unknown',\n suggestion: event.filename\n ? `Unhandled error at ${event.filename}:${event.lineno} — wrap in try/catch or add error boundary`\n : 'Unhandled error — add error handling to locate the source',\n };\n\n engine.report(issue);\n }\n\n function handleUnhandledRejection(event: PromiseRejectionEvent): void {\n if (!engine.isEnabled()) return;\n\n const reason = event.reason;\n const message =\n reason instanceof Error\n ? reason.message\n : typeof reason === 'string'\n ? reason\n : 'Unknown rejection reason';\n\n const issue: DetectedIssue = {\n id: `unhandled-rejection:${message}`,\n timestamp: Date.now(),\n severity: 'error',\n category: 'unhandled-rejection',\n message: `Unhandled Promise rejection: ${message}`,\n details: {\n reason:\n reason instanceof Error\n ? { name: reason.name, message: reason.message }\n : reason,\n },\n stack: reason instanceof Error ? reason.stack : undefined,\n source: 'Promise',\n suggestion:\n 'Add .catch() to the Promise or use try/catch with await',\n };\n\n engine.report(issue);\n }\n\n function installConsoleInterceptor(): void {\n if (typeof console === 'undefined') return;\n originalConsoleError = console.error;\n\n const saved = originalConsoleError;\n console.error = function devlensConsoleError(\n ...args: unknown[]\n ): void {\n saved.apply(console, args);\n\n if (!engine.isEnabled()) return;\n\n const message = args\n .map((arg) =>\n typeof arg === 'string' ? arg : JSON.stringify(arg),\n )\n .join(' ');\n\n const issue: DetectedIssue = {\n id: `unhandled-error:console:${message.slice(0, 100)}`,\n timestamp: Date.now(),\n severity: 'error',\n category: 'unhandled-error',\n message: `console.error: ${message}`,\n details: { args },\n source: 'console.error',\n suggestion:\n 'A console.error was detected — investigate the error above',\n };\n\n engine.report(issue);\n };\n }\n\n function install(): void {\n if (typeof window === 'undefined') return;\n\n if (catchWindowErrors) {\n window.addEventListener('error', handleWindowError);\n }\n if (catchRejections) {\n window.addEventListener(\n 'unhandledrejection',\n handleUnhandledRejection,\n );\n }\n if (catchConsoleErrors) {\n installConsoleInterceptor();\n }\n }\n\n function uninstall(): void {\n if (typeof window !== 'undefined') {\n window.removeEventListener('error', handleWindowError);\n window.removeEventListener(\n 'unhandledrejection',\n handleUnhandledRejection,\n );\n }\n if (originalConsoleError) {\n console.error = originalConsoleError;\n originalConsoleError = null;\n }\n }\n\n return { install, uninstall };\n}\n","import type { Reporter, DetectedIssue, Severity, IssueCategory } from '../types';\n\nconst CATEGORY_ICONS: Record<IssueCategory, string> = {\n 'network': '\\u{1F310}',\n 'null-access': '\\u{1F480}',\n 'undefined-data': '\\u{1F47B}',\n 'render-data': '\\u{1F3A8}',\n 'unhandled-error': '\\u{1F4A5}',\n 'unhandled-rejection': '\\u26A1',\n 'type-mismatch': '\\u{1F500}',\n};\n\nconst SEVERITY_COLORS: Record<Severity, string> = {\n error: '#ff4444',\n warn: '#ffaa00',\n info: '#4488ff',\n};\n\nconst SEVERITY_LABELS: Record<Severity, string> = {\n error: 'ERROR',\n warn: 'WARN',\n info: 'INFO',\n};\n\nfunction formatDetails(issue: DetectedIssue): string[] {\n const lines: string[] = [];\n\n if (issue.path) {\n lines.push(` \\u251C\\u2500 Path: ${issue.path}`);\n }\n\n if (issue.foundValue !== undefined) {\n lines.push(\n ` \\u251C\\u2500 Value: ${issue.foundValue === null ? 'null' : String(issue.foundValue)}`,\n );\n }\n\n if (issue.details) {\n const entries = Object.entries(issue.details);\n for (const [key, value] of entries) {\n lines.push(` \\u251C\\u2500 ${key}: ${typeof value === 'string' ? value : JSON.stringify(value)}`);\n }\n }\n\n if (issue.source) {\n lines.push(` \\u251C\\u2500 Source: ${issue.source}`);\n }\n\n if (issue.suggestion) {\n lines.push(` \\u251C\\u2500 Suggestion: ${issue.suggestion}`);\n }\n\n if (issue.stack) {\n const stackPreview = issue.stack.split('\\n').slice(0, 3).join('\\n');\n lines.push(` \\u2514\\u2500 Stack:\\n${stackPreview}`);\n } else if (lines.length > 0) {\n const lastIdx = lines.length - 1;\n lines[lastIdx] = lines[lastIdx].replace('\\u251C\\u2500', '\\u2514\\u2500');\n }\n\n return lines;\n}\n\nexport function createConsoleReporter(): Reporter {\n function report(issue: DetectedIssue): void {\n const icon = CATEGORY_ICONS[issue.category] ?? '\\u{1F50D}';\n const color = SEVERITY_COLORS[issue.severity];\n const label = SEVERITY_LABELS[issue.severity];\n\n const header = `${icon} DevLens [${label}] ${issue.category}: ${issue.message}`;\n const details = formatDetails(issue);\n\n const consoleFn =\n issue.severity === 'error'\n ? console.error\n : issue.severity === 'warn'\n ? console.warn\n : console.log;\n\n console.groupCollapsed(\n `%c${header}`,\n `color: ${color}; font-weight: bold;`,\n );\n\n for (const line of details) {\n consoleFn(line);\n }\n\n consoleFn(\n `%cTimestamp: ${new Date(issue.timestamp).toISOString()}`,\n 'color: #888;',\n );\n\n console.groupEnd();\n }\n\n function reportBatch(issues: DetectedIssue[]): void {\n if (issues.length === 0) return;\n\n console.groupCollapsed(\n `%c\\u{1F50D} DevLens — ${issues.length} issue(s) detected`,\n 'color: #ff4444; font-weight: bold; font-size: 12px;',\n );\n\n for (const issue of issues) {\n report(issue);\n }\n\n console.groupEnd();\n }\n\n function clear(): void {\n console.clear();\n }\n\n return { report, reportBatch, clear };\n}\n","import type {\n DevLensConfig,\n DevLensEngine,\n DetectedIssue,\n Reporter,\n Severity,\n} from '../types';\nimport { createConsoleReporter } from '../reporter/console-reporter';\n\nconst SEVERITY_RANK: Record<Severity, number> = {\n info: 0,\n warn: 1,\n error: 2,\n};\n\nfunction matchesAnyPattern(\n value: string | undefined,\n patterns: (string | RegExp)[],\n): boolean {\n if (!value || patterns.length === 0) return false;\n return patterns.some((p) =>\n typeof p === 'string' ? value.includes(p) : p.test(value),\n );\n}\n\nexport function createDetectionEngine(\n config: DevLensConfig = {},\n): DevLensEngine {\n const resolvedConfig: Required<\n Pick<DevLensConfig, 'enabled' | 'minSeverity' | 'throttleMs' | 'maxIssues'>\n > &\n DevLensConfig = {\n enabled: config.enabled ?? true,\n minSeverity: config.minSeverity ?? 'info',\n throttleMs: config.throttleMs ?? 1000,\n maxIssues: config.maxIssues ?? 100,\n ...config,\n };\n\n const reporter: Reporter =\n resolvedConfig.reporter ?? createConsoleReporter();\n const issues: DetectedIssue[] = [];\n const subscribers = new Set<(issue: DetectedIssue) => void>();\n const lastReportedAt = new Map<string, number>();\n\n function isEnabled(): boolean {\n if (!resolvedConfig.enabled) return false;\n if (typeof window === 'undefined') return false;\n try {\n if (\n typeof process !== 'undefined' &&\n process.env?.NODE_ENV === 'production'\n ) {\n return false;\n }\n } catch {\n // process may not be defined in browser\n }\n return true;\n }\n\n function meetsMinSeverity(severity: Severity): boolean {\n return (\n SEVERITY_RANK[severity] >= SEVERITY_RANK[resolvedConfig.minSeverity]\n );\n }\n\n function isThrottled(id: string, now: number): boolean {\n const lastTime = lastReportedAt.get(id);\n if (lastTime === undefined) return false;\n return now - lastTime < resolvedConfig.throttleMs;\n }\n\n function isIgnored(issue: DetectedIssue): boolean {\n const ignore = resolvedConfig.ignore;\n if (!ignore) return false;\n\n if (\n ignore.urls &&\n matchesAnyPattern(\n issue.details?.url as string | undefined,\n ignore.urls,\n )\n ) {\n return true;\n }\n\n if (ignore.paths && matchesAnyPattern(issue.path, ignore.paths)) {\n return true;\n }\n\n if (ignore.messages && matchesAnyPattern(issue.message, ignore.messages)) {\n return true;\n }\n\n return false;\n }\n\n function addToBuffer(issue: DetectedIssue): void {\n issues.push(issue);\n if (issues.length > resolvedConfig.maxIssues) {\n issues.shift();\n }\n }\n\n function report(issue: DetectedIssue): void {\n if (!isEnabled()) return;\n if (!meetsMinSeverity(issue.severity)) return;\n\n const now = Date.now();\n if (isThrottled(issue.id, now)) return;\n if (isIgnored(issue)) return;\n\n lastReportedAt.set(issue.id, now);\n addToBuffer(issue);\n\n reporter.report(issue);\n\n for (const callback of subscribers) {\n try {\n callback(issue);\n } catch {\n // subscriber errors should not break the engine\n }\n }\n }\n\n function getConfig(): Readonly<DevLensConfig> {\n return Object.freeze({ ...resolvedConfig });\n }\n\n function getIssues(): readonly DetectedIssue[] {\n return [...issues];\n }\n\n function subscribe(\n callback: (issue: DetectedIssue) => void,\n ): () => void {\n subscribers.add(callback);\n return () => {\n subscribers.delete(callback);\n };\n }\n\n return {\n report,\n getConfig,\n getIssues,\n subscribe,\n isEnabled,\n };\n}\n"]}
package/package.json ADDED
@@ -0,0 +1,63 @@
1
+ {
2
+ "name": "@devlens/core",
3
+ "version": "1.0.0",
4
+ "description": "Automatic runtime error detection and logging for JavaScript applications",
5
+ "main": "./dist/index.cjs",
6
+ "module": "./dist/index.js",
7
+ "types": "./dist/index.d.ts",
8
+ "exports": {
9
+ ".": {
10
+ "import": {
11
+ "types": "./dist/index.d.ts",
12
+ "default": "./dist/index.js"
13
+ },
14
+ "require": {
15
+ "types": "./dist/index.d.cts",
16
+ "default": "./dist/index.cjs"
17
+ }
18
+ }
19
+ },
20
+ "files": [
21
+ "dist"
22
+ ],
23
+ "sideEffects": false,
24
+ "scripts": {
25
+ "build": "tsup",
26
+ "dev": "tsup --watch",
27
+ "test": "vitest run",
28
+ "test:watch": "vitest",
29
+ "clean": "rm -rf dist",
30
+ "typecheck": "tsc --noEmit"
31
+ },
32
+ "keywords": [
33
+ "devlens",
34
+ "crashsense",
35
+ "debug",
36
+ "error-detection",
37
+ "runtime-errors",
38
+ "null-detection",
39
+ "api-errors",
40
+ "developer-tools",
41
+ "console-log",
42
+ "auto-debug"
43
+ ],
44
+ "author": "crashsense",
45
+ "repository": {
46
+ "type": "git",
47
+ "url": "git+https://github.com/crashsense/devlens.git",
48
+ "directory": "packages/core"
49
+ },
50
+ "homepage": "https://github.com/crashsense/devlens#readme",
51
+ "bugs": {
52
+ "url": "https://github.com/crashsense/devlens/issues"
53
+ },
54
+ "publishConfig": {
55
+ "access": "public"
56
+ },
57
+ "license": "MIT",
58
+ "devDependencies": {
59
+ "@types/node": "^25.3.0",
60
+ "tsup": "^8.4.0",
61
+ "vitest": "^3.0.0"
62
+ }
63
+ }