@syntropysoft/syntropyfront 0.2.2 → 0.2.3
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/README.md +14 -10
- package/dist/index.cjs +3 -3
- package/dist/index.cjs.map +1 -1
- package/dist/index.js +3 -3
- package/dist/index.js.map +1 -1
- package/dist/index.min.js.map +1 -1
- package/package.json +4 -4
package/README.md
CHANGED
|
@@ -7,13 +7,15 @@
|
|
|
7
7
|
<p align="center">
|
|
8
8
|
<strong>From Chaos to Clarity</strong>
|
|
9
9
|
<br />
|
|
10
|
-
The Observability
|
|
10
|
+
The Observability Library for High-Performance Teams
|
|
11
11
|
</p>
|
|
12
12
|
|
|
13
13
|
<p align="center">
|
|
14
14
|
<a href="https://www.npmjs.com/package/@syntropysoft/syntropyfront"><img src="https://img.shields.io/npm/v/@syntropysoft/syntropyfront.svg" alt="NPM Version"></a>
|
|
15
15
|
<a href="https://github.com/Syntropysoft/SyntropyLog/blob/main/LICENSE"><img src="https://img.shields.io/npm/l/@syntropysoft/syntropyfront.svg" alt="License"></a>
|
|
16
16
|
<a href="#"><img src="https://img.shields.io/badge/status-ready%20for%20production-brightgreen.svg" alt="Ready for Production"></a>
|
|
17
|
+
<a href="#"><img src="https://github.com/Syntropysoft/syntropyfront/workflows/CodeQL/badge.svg" alt="CodeQL"></a>
|
|
18
|
+
<a href="#"><img src="https://img.shields.io/badge/dependabot-enabled-brightgreen.svg" alt="Dependabot"></a>
|
|
17
19
|
</p>
|
|
18
20
|
|
|
19
21
|
---
|
|
@@ -37,14 +39,14 @@ SyntropyFront automatically captures user interactions, errors, HTTP calls, and
|
|
|
37
39
|
### Basic Usage (1 line of code!)
|
|
38
40
|
|
|
39
41
|
```javascript
|
|
40
|
-
import syntropyFront from 'syntropyfront';
|
|
42
|
+
import syntropyFront from '@syntropysoft/syntropyfront';
|
|
41
43
|
// That's it! Auto-initializes and captures everything automatically
|
|
42
44
|
```
|
|
43
45
|
|
|
44
46
|
### With Custom Configuration
|
|
45
47
|
|
|
46
48
|
```javascript
|
|
47
|
-
import syntropyFront from 'syntropyfront';
|
|
49
|
+
import syntropyFront from '@syntropysoft/syntropyfront';
|
|
48
50
|
|
|
49
51
|
// Option 1: Console only (default)
|
|
50
52
|
syntropyFront.configure({
|
|
@@ -93,7 +95,9 @@ syntropyFront.configure({
|
|
|
93
95
|
## 📦 Installation
|
|
94
96
|
|
|
95
97
|
```bash
|
|
96
|
-
npm install syntropyfront
|
|
98
|
+
npm install @syntropysoft/syntropyfront
|
|
99
|
+
```
|
|
100
|
+
|
|
97
101
|
## 🎯 How It Works
|
|
98
102
|
|
|
99
103
|
SyntropyFront automatically:
|
|
@@ -240,7 +244,7 @@ SyntropyFront captures the essentials by default, but you can extend it to captu
|
|
|
240
244
|
### Adding Custom Event Capture
|
|
241
245
|
|
|
242
246
|
```javascript
|
|
243
|
-
import syntropyFront from 'syntropyfront';
|
|
247
|
+
import syntropyFront from '@syntropysoft/syntropyfront';
|
|
244
248
|
|
|
245
249
|
// Add scroll tracking
|
|
246
250
|
window.addEventListener('scroll', () => {
|
|
@@ -317,7 +321,7 @@ SyntropyFront works with any JavaScript framework:
|
|
|
317
321
|
|
|
318
322
|
```jsx
|
|
319
323
|
import React from 'react';
|
|
320
|
-
import syntropyFront from 'syntropyfront';
|
|
324
|
+
import syntropyFront from '@syntropysoft/syntropyfront';
|
|
321
325
|
|
|
322
326
|
function App() {
|
|
323
327
|
// SyntropyFront auto-initializes on import
|
|
@@ -339,7 +343,7 @@ function App() {
|
|
|
339
343
|
</template>
|
|
340
344
|
|
|
341
345
|
<script>
|
|
342
|
-
import syntropyFront from 'syntropyfront';
|
|
346
|
+
import syntropyFront from '@syntropysoft/syntropyfront';
|
|
343
347
|
|
|
344
348
|
export default {
|
|
345
349
|
methods: {
|
|
@@ -354,7 +358,7 @@ export default {
|
|
|
354
358
|
### Manual Error Reporting
|
|
355
359
|
|
|
356
360
|
```javascript
|
|
357
|
-
import syntropyFront from 'syntropyfront';
|
|
361
|
+
import syntropyFront from '@syntropysoft/syntropyfront';
|
|
358
362
|
|
|
359
363
|
try {
|
|
360
364
|
// Your code here
|
|
@@ -370,7 +374,7 @@ syntropyFront.sendError(new Error('Something went wrong'));
|
|
|
370
374
|
### Extending with Custom Events
|
|
371
375
|
|
|
372
376
|
```javascript
|
|
373
|
-
import syntropyFront from 'syntropyfront';
|
|
377
|
+
import syntropyFront from '@syntropysoft/syntropyfront';
|
|
374
378
|
|
|
375
379
|
// Add your custom event listeners
|
|
376
380
|
window.addEventListener('scroll', () => {
|
|
@@ -417,4 +421,4 @@ Contributions are welcome! Please feel free to submit a Pull Request.
|
|
|
417
421
|
|
|
418
422
|
---
|
|
419
423
|
|
|
420
|
-
**Made with ❤️ for better web observability**
|
|
424
|
+
**Made with ❤️ for better web observability**
|
package/dist/index.cjs
CHANGED
|
@@ -271,19 +271,19 @@ class SyntropyFront {
|
|
|
271
271
|
const [url, options] = args;
|
|
272
272
|
|
|
273
273
|
this.addBreadcrumb('http', 'fetch', {
|
|
274
|
-
url
|
|
274
|
+
url,
|
|
275
275
|
method: options?.method || 'GET'
|
|
276
276
|
});
|
|
277
277
|
|
|
278
278
|
return originalFetch(...args).then(response => {
|
|
279
279
|
this.addBreadcrumb('http', 'fetch_response', {
|
|
280
|
-
url
|
|
280
|
+
url,
|
|
281
281
|
status: response.status
|
|
282
282
|
});
|
|
283
283
|
return response;
|
|
284
284
|
}).catch(error => {
|
|
285
285
|
this.addBreadcrumb('http', 'fetch_error', {
|
|
286
|
-
url
|
|
286
|
+
url,
|
|
287
287
|
error: error.message
|
|
288
288
|
});
|
|
289
289
|
throw error;
|
package/dist/index.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.cjs","sources":["../src/core/BreadcrumbManager.js","../src/core/ErrorManager.js","../src/core/Logger.js","../src/index.js"],"sourcesContent":["/**\n * BreadcrumbManager - Gestiona breadcrumbs\n * Responsabilidad única: Almacenar y gestionar breadcrumbs\n */\nexport class BreadcrumbManager {\n constructor() {\n this.breadcrumbs = [];\n }\n\n add(category, message, data = {}) {\n const breadcrumb = {\n category,\n message,\n data,\n timestamp: new Date().toISOString()\n };\n \n this.breadcrumbs.push(breadcrumb);\n return breadcrumb;\n }\n\n getAll() {\n return this.breadcrumbs;\n }\n\n clear() {\n this.breadcrumbs = [];\n }\n\n getCount() {\n return this.breadcrumbs.length;\n }\n} ","/**\n * ErrorManager - Gestiona errores\n * Responsabilidad única: Formatear y gestionar errores\n */\nexport class ErrorManager {\n constructor() {\n this.errors = [];\n }\n\n send(error, context = {}) {\n const errorData = {\n message: error.message,\n stack: error.stack,\n context,\n timestamp: new Date().toISOString()\n };\n \n this.errors.push(errorData);\n return errorData;\n }\n\n getAll() {\n return this.errors;\n }\n\n clear() {\n this.errors = [];\n }\n\n getCount() {\n return this.errors.length;\n }\n} ","/**\n * Logger - Hace logging solo en errores\n * Responsabilidad única: Mostrar mensajes solo cuando hay errores\n */\nexport class Logger {\n constructor() {\n this.isSilent = true; // Por defecto silente\n }\n\n log(message, data = null) {\n // No loggear nada en modo silente\n if (this.isSilent) return;\n \n if (data) {\n console.log(message, data);\n } else {\n console.log(message);\n }\n }\n\n error(message, data = null) {\n // SIEMPRE loggear errores\n if (data) {\n console.error(message, data);\n } else {\n console.error(message);\n }\n }\n\n warn(message, data = null) {\n // Solo warnings importantes\n if (data) {\n console.warn(message, data);\n } else {\n console.warn(message);\n }\n }\n\n // Método para activar logging (solo para debug)\n enableLogging() {\n this.isSilent = false;\n }\n\n // Método para desactivar logging\n disableLogging() {\n this.isSilent = true;\n }\n} ","/**\n * SyntropyFront - Observability library with automatic capture\n * Single responsibility: Automatically capture events and send errors with context\n */\nimport { BreadcrumbManager } from './core/BreadcrumbManager.js';\nimport { ErrorManager } from './core/ErrorManager.js';\nimport { Logger } from './core/Logger.js';\n\nclass SyntropyFront {\n constructor() {\n // Basic managers\n this.breadcrumbManager = new BreadcrumbManager();\n this.errorManager = new ErrorManager();\n this.logger = new Logger();\n \n // Default configuration\n this.maxEvents = 50;\n this.fetchConfig = null; // Complete fetch configuration\n this.onErrorCallback = null; // User-defined error handler\n this.isActive = false;\n \n // Automatic capture\n this.originalHandlers = {};\n \n // Auto-initialize\n this.init();\n }\n\n init() {\n this.isActive = true;\n \n // Configure automatic capture immediately\n this.setupAutomaticCapture();\n \n console.log('🚀 SyntropyFront: Initialized with automatic capture');\n }\n\n /**\n * Configure SyntropyFront\n * @param {Object} config - Configuration\n * @param {number} config.maxEvents - Maximum number of events to store\n * @param {Object} config.fetch - Complete fetch configuration\n * @param {string} config.fetch.url - Endpoint URL\n * @param {Object} config.fetch.options - Fetch options (headers, method, etc.)\n * @param {Function} config.onError - User-defined error handler callback\n */\n configure(config = {}) {\n this.maxEvents = config.maxEvents || this.maxEvents;\n this.fetchConfig = config.fetch;\n this.onErrorCallback = config.onError;\n \n if (this.onErrorCallback) {\n console.log(`✅ SyntropyFront: Configured - maxEvents: ${this.maxEvents}, custom error handler`);\n } else if (this.fetchConfig) {\n console.log(`✅ SyntropyFront: Configured - maxEvents: ${this.maxEvents}, endpoint: ${this.fetchConfig.url}`);\n } else {\n console.log(`✅ SyntropyFront: Configured - maxEvents: ${this.maxEvents}, console only`);\n }\n }\n\n /**\n * Configure automatic event capture\n */\n setupAutomaticCapture() {\n if (typeof window === 'undefined') return;\n\n // Capture clicks\n this.setupClickCapture();\n \n // Capture errors\n this.setupErrorCapture();\n \n // Capture HTTP calls\n this.setupHttpCapture();\n \n // Capture console logs\n this.setupConsoleCapture();\n }\n\n /**\n * Capture user clicks\n */\n setupClickCapture() {\n const clickHandler = (event) => {\n const element = event.target;\n this.addBreadcrumb('user', 'click', {\n element: element.tagName,\n id: element.id,\n className: element.className,\n x: event.clientX,\n y: event.clientY\n });\n };\n\n document.addEventListener('click', clickHandler);\n }\n\n /**\n * Automatically capture errors\n */\n setupErrorCapture() {\n // Save original handlers\n this.originalHandlers.onerror = window.onerror;\n this.originalHandlers.onunhandledrejection = window.onunhandledrejection;\n\n // Intercept errors\n window.onerror = (message, source, lineno, colno, error) => {\n const errorPayload = {\n type: 'uncaught_exception',\n error: { message, source, lineno, colno, stack: error?.stack },\n breadcrumbs: this.getBreadcrumbs(),\n timestamp: new Date().toISOString()\n };\n\n this.handleError(errorPayload);\n \n // Call original handler\n if (this.originalHandlers.onerror) {\n return this.originalHandlers.onerror(message, source, lineno, colno, error);\n }\n \n return false;\n };\n\n // Intercept rejected promises\n window.onunhandledrejection = (event) => {\n const errorPayload = {\n type: 'unhandled_rejection',\n error: {\n message: event.reason?.message || 'Promise rejection without message',\n stack: event.reason?.stack,\n },\n breadcrumbs: this.getBreadcrumbs(),\n timestamp: new Date().toISOString()\n };\n\n this.handleError(errorPayload);\n \n // Call original handler\n if (this.originalHandlers.onunhandledrejection) {\n this.originalHandlers.onunhandledrejection(event);\n }\n };\n }\n\n /**\n * Capture HTTP calls\n */\n setupHttpCapture() {\n // Intercept fetch\n const originalFetch = window.fetch;\n window.fetch = (...args) => {\n const [url, options] = args;\n \n this.addBreadcrumb('http', 'fetch', {\n url: url,\n method: options?.method || 'GET'\n });\n\n return originalFetch(...args).then(response => {\n this.addBreadcrumb('http', 'fetch_response', {\n url: url,\n status: response.status\n });\n return response;\n }).catch(error => {\n this.addBreadcrumb('http', 'fetch_error', {\n url: url,\n error: error.message\n });\n throw error;\n });\n };\n }\n\n /**\n * Capture console logs\n */\n setupConsoleCapture() {\n const originalLog = console.log;\n const originalError = console.error;\n const originalWarn = console.warn;\n\n console.log = (...args) => {\n this.addBreadcrumb('console', 'log', { message: args.join(' ') });\n originalLog.apply(console, args);\n };\n\n console.error = (...args) => {\n this.addBreadcrumb('console', 'error', { message: args.join(' ') });\n originalError.apply(console, args);\n };\n\n console.warn = (...args) => {\n this.addBreadcrumb('console', 'warn', { message: args.join(' ') });\n originalWarn.apply(console, args);\n };\n }\n\n /**\n * Handle errors - priority: onError callback > fetch > console\n */\n handleError(errorPayload) {\n // Default log\n this.logger.error('❌ Error:', errorPayload);\n \n // Priority 1: User-defined callback (maximum flexibility)\n if (this.onErrorCallback) {\n try {\n this.onErrorCallback(errorPayload);\n } catch (callbackError) {\n console.warn('SyntropyFront: Error in user callback:', callbackError);\n }\n return;\n }\n \n // Priority 2: Fetch to endpoint\n if (this.fetchConfig) {\n this.postToEndpoint(errorPayload);\n return;\n }\n \n // Priority 3: Console only (default)\n // Already logged above\n }\n\n /**\n * Post error object using fetch configuration\n */\n postToEndpoint(errorPayload) {\n const { url, options = {} } = this.fetchConfig;\n \n // Default configuration\n const defaultOptions = {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n ...options.headers\n },\n body: JSON.stringify(errorPayload),\n ...options\n };\n\n fetch(url, defaultOptions).catch(error => {\n console.warn('SyntropyFront: Error posting to endpoint:', error);\n });\n }\n\n // Public API\n addBreadcrumb(category, message, data = {}) {\n if (!this.isActive) return;\n \n const breadcrumb = this.breadcrumbManager.add(category, message, data);\n \n // Keep only the last maxEvents\n const breadcrumbs = this.breadcrumbManager.getAll();\n if (breadcrumbs.length > this.maxEvents) {\n this.breadcrumbManager.clear();\n breadcrumbs.slice(-this.maxEvents).forEach(b => this.breadcrumbManager.add(b.category, b.message, b.data));\n }\n \n return breadcrumb;\n }\n\n getBreadcrumbs() {\n return this.breadcrumbManager.getAll();\n }\n\n clearBreadcrumbs() {\n this.breadcrumbManager.clear();\n }\n\n sendError(error, context = {}) {\n if (!this.isActive) return;\n \n const errorData = this.errorManager.send(error, context);\n const errorPayload = {\n ...errorData,\n breadcrumbs: this.getBreadcrumbs(),\n timestamp: new Date().toISOString()\n };\n \n this.handleError(errorPayload);\n return errorData;\n }\n\n getErrors() {\n return this.errorManager.getAll();\n }\n\n clearErrors() {\n this.errorManager.clear();\n }\n\n // Utility methods\n getStats() {\n return {\n breadcrumbs: this.breadcrumbManager.getCount(),\n errors: this.errorManager.getCount(),\n isActive: this.isActive,\n maxEvents: this.maxEvents,\n hasFetchConfig: !!this.fetchConfig,\n hasErrorCallback: !!this.onErrorCallback,\n endpoint: this.fetchConfig?.url || 'console'\n };\n }\n}\n\n// Single instance - auto-initializes\nconst syntropyFront = new SyntropyFront();\n\n// Export the instance\nexport default syntropyFront; "],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.cjs","sources":["../src/core/BreadcrumbManager.js","../src/core/ErrorManager.js","../src/core/Logger.js","../src/index.js"],"sourcesContent":["/**\n * BreadcrumbManager - Gestiona breadcrumbs\n * Responsabilidad única: Almacenar y gestionar breadcrumbs\n */\nexport class BreadcrumbManager {\n constructor() {\n this.breadcrumbs = [];\n }\n\n add(category, message, data = {}) {\n const breadcrumb = {\n category,\n message,\n data,\n timestamp: new Date().toISOString()\n };\n \n this.breadcrumbs.push(breadcrumb);\n return breadcrumb;\n }\n\n getAll() {\n return this.breadcrumbs;\n }\n\n clear() {\n this.breadcrumbs = [];\n }\n\n getCount() {\n return this.breadcrumbs.length;\n }\n} ","/**\n * ErrorManager - Gestiona errores\n * Responsabilidad única: Formatear y gestionar errores\n */\nexport class ErrorManager {\n constructor() {\n this.errors = [];\n }\n\n send(error, context = {}) {\n const errorData = {\n message: error.message,\n stack: error.stack,\n context,\n timestamp: new Date().toISOString()\n };\n \n this.errors.push(errorData);\n return errorData;\n }\n\n getAll() {\n return this.errors;\n }\n\n clear() {\n this.errors = [];\n }\n\n getCount() {\n return this.errors.length;\n }\n} ","/**\n * Logger - Hace logging solo en errores\n * Responsabilidad única: Mostrar mensajes solo cuando hay errores\n */\nexport class Logger {\n constructor() {\n this.isSilent = true; // Por defecto silente\n }\n\n log(message, data = null) {\n // No loggear nada en modo silente\n if (this.isSilent) return;\n \n if (data) {\n console.log(message, data);\n } else {\n console.log(message);\n }\n }\n\n error(message, data = null) {\n // SIEMPRE loggear errores\n if (data) {\n console.error(message, data);\n } else {\n console.error(message);\n }\n }\n\n warn(message, data = null) {\n // Solo warnings importantes\n if (data) {\n console.warn(message, data);\n } else {\n console.warn(message);\n }\n }\n\n // Método para activar logging (solo para debug)\n enableLogging() {\n this.isSilent = false;\n }\n\n // Método para desactivar logging\n disableLogging() {\n this.isSilent = true;\n }\n} ","/**\n * SyntropyFront - Observability library with automatic capture\n * Single responsibility: Automatically capture events and send errors with context\n */\nimport { BreadcrumbManager } from './core/BreadcrumbManager.js';\nimport { ErrorManager } from './core/ErrorManager.js';\nimport { Logger } from './core/Logger.js';\n\nclass SyntropyFront {\n constructor() {\n // Basic managers\n this.breadcrumbManager = new BreadcrumbManager();\n this.errorManager = new ErrorManager();\n this.logger = new Logger();\n \n // Default configuration\n this.maxEvents = 50;\n this.fetchConfig = null; // Complete fetch configuration\n this.onErrorCallback = null; // User-defined error handler\n this.isActive = false;\n \n // Automatic capture\n this.originalHandlers = {};\n \n // Auto-initialize\n this.init();\n }\n\n init() {\n this.isActive = true;\n \n // Configure automatic capture immediately\n this.setupAutomaticCapture();\n \n console.log('🚀 SyntropyFront: Initialized with automatic capture');\n }\n\n /**\n * Configure SyntropyFront\n * @param {Object} config - Configuration\n * @param {number} config.maxEvents - Maximum number of events to store\n * @param {Object} config.fetch - Complete fetch configuration\n * @param {string} config.fetch.url - Endpoint URL\n * @param {Object} config.fetch.options - Fetch options (headers, method, etc.)\n * @param {Function} config.onError - User-defined error handler callback\n */\n configure(config = {}) {\n this.maxEvents = config.maxEvents || this.maxEvents;\n this.fetchConfig = config.fetch;\n this.onErrorCallback = config.onError;\n \n if (this.onErrorCallback) {\n console.log(`✅ SyntropyFront: Configured - maxEvents: ${this.maxEvents}, custom error handler`);\n } else if (this.fetchConfig) {\n console.log(`✅ SyntropyFront: Configured - maxEvents: ${this.maxEvents}, endpoint: ${this.fetchConfig.url}`);\n } else {\n console.log(`✅ SyntropyFront: Configured - maxEvents: ${this.maxEvents}, console only`);\n }\n }\n\n /**\n * Configure automatic event capture\n */\n setupAutomaticCapture() {\n if (typeof window === 'undefined') return;\n\n // Capture clicks\n this.setupClickCapture();\n \n // Capture errors\n this.setupErrorCapture();\n \n // Capture HTTP calls\n this.setupHttpCapture();\n \n // Capture console logs\n this.setupConsoleCapture();\n }\n\n /**\n * Capture user clicks\n */\n setupClickCapture() {\n const clickHandler = (event) => {\n const element = event.target;\n this.addBreadcrumb('user', 'click', {\n element: element.tagName,\n id: element.id,\n className: element.className,\n x: event.clientX,\n y: event.clientY\n });\n };\n\n document.addEventListener('click', clickHandler);\n }\n\n /**\n * Automatically capture errors\n */\n setupErrorCapture() {\n // Save original handlers\n this.originalHandlers.onerror = window.onerror;\n this.originalHandlers.onunhandledrejection = window.onunhandledrejection;\n\n // Intercept errors\n window.onerror = (message, source, lineno, colno, error) => {\n const errorPayload = {\n type: 'uncaught_exception',\n error: { message, source, lineno, colno, stack: error?.stack },\n breadcrumbs: this.getBreadcrumbs(),\n timestamp: new Date().toISOString()\n };\n\n this.handleError(errorPayload);\n \n // Call original handler\n if (this.originalHandlers.onerror) {\n return this.originalHandlers.onerror(message, source, lineno, colno, error);\n }\n \n return false;\n };\n\n // Intercept rejected promises\n window.onunhandledrejection = (event) => {\n const errorPayload = {\n type: 'unhandled_rejection',\n error: {\n message: event.reason?.message || 'Promise rejection without message',\n stack: event.reason?.stack,\n },\n breadcrumbs: this.getBreadcrumbs(),\n timestamp: new Date().toISOString()\n };\n\n this.handleError(errorPayload);\n \n // Call original handler\n if (this.originalHandlers.onunhandledrejection) {\n this.originalHandlers.onunhandledrejection(event);\n }\n };\n }\n\n /**\n * Capture HTTP calls\n */\n setupHttpCapture() {\n // Intercept fetch\n const originalFetch = window.fetch;\n window.fetch = (...args) => {\n const [url, options] = args;\n \n this.addBreadcrumb('http', 'fetch', {\n url,\n method: options?.method || 'GET'\n });\n\n return originalFetch(...args).then(response => {\n this.addBreadcrumb('http', 'fetch_response', {\n url,\n status: response.status\n });\n return response;\n }).catch(error => {\n this.addBreadcrumb('http', 'fetch_error', {\n url,\n error: error.message\n });\n throw error;\n });\n };\n }\n\n /**\n * Capture console logs\n */\n setupConsoleCapture() {\n const originalLog = console.log;\n const originalError = console.error;\n const originalWarn = console.warn;\n\n console.log = (...args) => {\n this.addBreadcrumb('console', 'log', { message: args.join(' ') });\n originalLog.apply(console, args);\n };\n\n console.error = (...args) => {\n this.addBreadcrumb('console', 'error', { message: args.join(' ') });\n originalError.apply(console, args);\n };\n\n console.warn = (...args) => {\n this.addBreadcrumb('console', 'warn', { message: args.join(' ') });\n originalWarn.apply(console, args);\n };\n }\n\n /**\n * Handle errors - priority: onError callback > fetch > console\n */\n handleError(errorPayload) {\n // Default log\n this.logger.error('❌ Error:', errorPayload);\n \n // Priority 1: User-defined callback (maximum flexibility)\n if (this.onErrorCallback) {\n try {\n this.onErrorCallback(errorPayload);\n } catch (callbackError) {\n console.warn('SyntropyFront: Error in user callback:', callbackError);\n }\n return;\n }\n \n // Priority 2: Fetch to endpoint\n if (this.fetchConfig) {\n this.postToEndpoint(errorPayload);\n return;\n }\n \n // Priority 3: Console only (default)\n // Already logged above\n }\n\n /**\n * Post error object using fetch configuration\n */\n postToEndpoint(errorPayload) {\n const { url, options = {} } = this.fetchConfig;\n \n // Default configuration\n const defaultOptions = {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n ...options.headers\n },\n body: JSON.stringify(errorPayload),\n ...options\n };\n\n fetch(url, defaultOptions).catch(error => {\n console.warn('SyntropyFront: Error posting to endpoint:', error);\n });\n }\n\n // Public API\n addBreadcrumb(category, message, data = {}) {\n if (!this.isActive) return;\n \n const breadcrumb = this.breadcrumbManager.add(category, message, data);\n \n // Keep only the last maxEvents\n const breadcrumbs = this.breadcrumbManager.getAll();\n if (breadcrumbs.length > this.maxEvents) {\n this.breadcrumbManager.clear();\n breadcrumbs.slice(-this.maxEvents).forEach(b => this.breadcrumbManager.add(b.category, b.message, b.data));\n }\n \n return breadcrumb;\n }\n\n getBreadcrumbs() {\n return this.breadcrumbManager.getAll();\n }\n\n clearBreadcrumbs() {\n this.breadcrumbManager.clear();\n }\n\n sendError(error, context = {}) {\n if (!this.isActive) return;\n \n const errorData = this.errorManager.send(error, context);\n const errorPayload = {\n ...errorData,\n breadcrumbs: this.getBreadcrumbs(),\n timestamp: new Date().toISOString()\n };\n \n this.handleError(errorPayload);\n return errorData;\n }\n\n getErrors() {\n return this.errorManager.getAll();\n }\n\n clearErrors() {\n this.errorManager.clear();\n }\n\n // Utility methods\n getStats() {\n return {\n breadcrumbs: this.breadcrumbManager.getCount(),\n errors: this.errorManager.getCount(),\n isActive: this.isActive,\n maxEvents: this.maxEvents,\n hasFetchConfig: !!this.fetchConfig,\n hasErrorCallback: !!this.onErrorCallback,\n endpoint: this.fetchConfig?.url || 'console'\n };\n }\n}\n\n// Single instance - auto-initializes\nconst syntropyFront = new SyntropyFront();\n\n// Export the instance\nexport default syntropyFront; "],"names":[],"mappings":"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"}
|
package/dist/index.js
CHANGED
|
@@ -267,19 +267,19 @@ class SyntropyFront {
|
|
|
267
267
|
const [url, options] = args;
|
|
268
268
|
|
|
269
269
|
this.addBreadcrumb('http', 'fetch', {
|
|
270
|
-
url
|
|
270
|
+
url,
|
|
271
271
|
method: options?.method || 'GET'
|
|
272
272
|
});
|
|
273
273
|
|
|
274
274
|
return originalFetch(...args).then(response => {
|
|
275
275
|
this.addBreadcrumb('http', 'fetch_response', {
|
|
276
|
-
url
|
|
276
|
+
url,
|
|
277
277
|
status: response.status
|
|
278
278
|
});
|
|
279
279
|
return response;
|
|
280
280
|
}).catch(error => {
|
|
281
281
|
this.addBreadcrumb('http', 'fetch_error', {
|
|
282
|
-
url
|
|
282
|
+
url,
|
|
283
283
|
error: error.message
|
|
284
284
|
});
|
|
285
285
|
throw error;
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sources":["../src/core/BreadcrumbManager.js","../src/core/ErrorManager.js","../src/core/Logger.js","../src/index.js"],"sourcesContent":["/**\n * BreadcrumbManager - Gestiona breadcrumbs\n * Responsabilidad única: Almacenar y gestionar breadcrumbs\n */\nexport class BreadcrumbManager {\n constructor() {\n this.breadcrumbs = [];\n }\n\n add(category, message, data = {}) {\n const breadcrumb = {\n category,\n message,\n data,\n timestamp: new Date().toISOString()\n };\n \n this.breadcrumbs.push(breadcrumb);\n return breadcrumb;\n }\n\n getAll() {\n return this.breadcrumbs;\n }\n\n clear() {\n this.breadcrumbs = [];\n }\n\n getCount() {\n return this.breadcrumbs.length;\n }\n} ","/**\n * ErrorManager - Gestiona errores\n * Responsabilidad única: Formatear y gestionar errores\n */\nexport class ErrorManager {\n constructor() {\n this.errors = [];\n }\n\n send(error, context = {}) {\n const errorData = {\n message: error.message,\n stack: error.stack,\n context,\n timestamp: new Date().toISOString()\n };\n \n this.errors.push(errorData);\n return errorData;\n }\n\n getAll() {\n return this.errors;\n }\n\n clear() {\n this.errors = [];\n }\n\n getCount() {\n return this.errors.length;\n }\n} ","/**\n * Logger - Hace logging solo en errores\n * Responsabilidad única: Mostrar mensajes solo cuando hay errores\n */\nexport class Logger {\n constructor() {\n this.isSilent = true; // Por defecto silente\n }\n\n log(message, data = null) {\n // No loggear nada en modo silente\n if (this.isSilent) return;\n \n if (data) {\n console.log(message, data);\n } else {\n console.log(message);\n }\n }\n\n error(message, data = null) {\n // SIEMPRE loggear errores\n if (data) {\n console.error(message, data);\n } else {\n console.error(message);\n }\n }\n\n warn(message, data = null) {\n // Solo warnings importantes\n if (data) {\n console.warn(message, data);\n } else {\n console.warn(message);\n }\n }\n\n // Método para activar logging (solo para debug)\n enableLogging() {\n this.isSilent = false;\n }\n\n // Método para desactivar logging\n disableLogging() {\n this.isSilent = true;\n }\n} ","/**\n * SyntropyFront - Observability library with automatic capture\n * Single responsibility: Automatically capture events and send errors with context\n */\nimport { BreadcrumbManager } from './core/BreadcrumbManager.js';\nimport { ErrorManager } from './core/ErrorManager.js';\nimport { Logger } from './core/Logger.js';\n\nclass SyntropyFront {\n constructor() {\n // Basic managers\n this.breadcrumbManager = new BreadcrumbManager();\n this.errorManager = new ErrorManager();\n this.logger = new Logger();\n \n // Default configuration\n this.maxEvents = 50;\n this.fetchConfig = null; // Complete fetch configuration\n this.onErrorCallback = null; // User-defined error handler\n this.isActive = false;\n \n // Automatic capture\n this.originalHandlers = {};\n \n // Auto-initialize\n this.init();\n }\n\n init() {\n this.isActive = true;\n \n // Configure automatic capture immediately\n this.setupAutomaticCapture();\n \n console.log('🚀 SyntropyFront: Initialized with automatic capture');\n }\n\n /**\n * Configure SyntropyFront\n * @param {Object} config - Configuration\n * @param {number} config.maxEvents - Maximum number of events to store\n * @param {Object} config.fetch - Complete fetch configuration\n * @param {string} config.fetch.url - Endpoint URL\n * @param {Object} config.fetch.options - Fetch options (headers, method, etc.)\n * @param {Function} config.onError - User-defined error handler callback\n */\n configure(config = {}) {\n this.maxEvents = config.maxEvents || this.maxEvents;\n this.fetchConfig = config.fetch;\n this.onErrorCallback = config.onError;\n \n if (this.onErrorCallback) {\n console.log(`✅ SyntropyFront: Configured - maxEvents: ${this.maxEvents}, custom error handler`);\n } else if (this.fetchConfig) {\n console.log(`✅ SyntropyFront: Configured - maxEvents: ${this.maxEvents}, endpoint: ${this.fetchConfig.url}`);\n } else {\n console.log(`✅ SyntropyFront: Configured - maxEvents: ${this.maxEvents}, console only`);\n }\n }\n\n /**\n * Configure automatic event capture\n */\n setupAutomaticCapture() {\n if (typeof window === 'undefined') return;\n\n // Capture clicks\n this.setupClickCapture();\n \n // Capture errors\n this.setupErrorCapture();\n \n // Capture HTTP calls\n this.setupHttpCapture();\n \n // Capture console logs\n this.setupConsoleCapture();\n }\n\n /**\n * Capture user clicks\n */\n setupClickCapture() {\n const clickHandler = (event) => {\n const element = event.target;\n this.addBreadcrumb('user', 'click', {\n element: element.tagName,\n id: element.id,\n className: element.className,\n x: event.clientX,\n y: event.clientY\n });\n };\n\n document.addEventListener('click', clickHandler);\n }\n\n /**\n * Automatically capture errors\n */\n setupErrorCapture() {\n // Save original handlers\n this.originalHandlers.onerror = window.onerror;\n this.originalHandlers.onunhandledrejection = window.onunhandledrejection;\n\n // Intercept errors\n window.onerror = (message, source, lineno, colno, error) => {\n const errorPayload = {\n type: 'uncaught_exception',\n error: { message, source, lineno, colno, stack: error?.stack },\n breadcrumbs: this.getBreadcrumbs(),\n timestamp: new Date().toISOString()\n };\n\n this.handleError(errorPayload);\n \n // Call original handler\n if (this.originalHandlers.onerror) {\n return this.originalHandlers.onerror(message, source, lineno, colno, error);\n }\n \n return false;\n };\n\n // Intercept rejected promises\n window.onunhandledrejection = (event) => {\n const errorPayload = {\n type: 'unhandled_rejection',\n error: {\n message: event.reason?.message || 'Promise rejection without message',\n stack: event.reason?.stack,\n },\n breadcrumbs: this.getBreadcrumbs(),\n timestamp: new Date().toISOString()\n };\n\n this.handleError(errorPayload);\n \n // Call original handler\n if (this.originalHandlers.onunhandledrejection) {\n this.originalHandlers.onunhandledrejection(event);\n }\n };\n }\n\n /**\n * Capture HTTP calls\n */\n setupHttpCapture() {\n // Intercept fetch\n const originalFetch = window.fetch;\n window.fetch = (...args) => {\n const [url, options] = args;\n \n this.addBreadcrumb('http', 'fetch', {\n url: url,\n method: options?.method || 'GET'\n });\n\n return originalFetch(...args).then(response => {\n this.addBreadcrumb('http', 'fetch_response', {\n url: url,\n status: response.status\n });\n return response;\n }).catch(error => {\n this.addBreadcrumb('http', 'fetch_error', {\n url: url,\n error: error.message\n });\n throw error;\n });\n };\n }\n\n /**\n * Capture console logs\n */\n setupConsoleCapture() {\n const originalLog = console.log;\n const originalError = console.error;\n const originalWarn = console.warn;\n\n console.log = (...args) => {\n this.addBreadcrumb('console', 'log', { message: args.join(' ') });\n originalLog.apply(console, args);\n };\n\n console.error = (...args) => {\n this.addBreadcrumb('console', 'error', { message: args.join(' ') });\n originalError.apply(console, args);\n };\n\n console.warn = (...args) => {\n this.addBreadcrumb('console', 'warn', { message: args.join(' ') });\n originalWarn.apply(console, args);\n };\n }\n\n /**\n * Handle errors - priority: onError callback > fetch > console\n */\n handleError(errorPayload) {\n // Default log\n this.logger.error('❌ Error:', errorPayload);\n \n // Priority 1: User-defined callback (maximum flexibility)\n if (this.onErrorCallback) {\n try {\n this.onErrorCallback(errorPayload);\n } catch (callbackError) {\n console.warn('SyntropyFront: Error in user callback:', callbackError);\n }\n return;\n }\n \n // Priority 2: Fetch to endpoint\n if (this.fetchConfig) {\n this.postToEndpoint(errorPayload);\n return;\n }\n \n // Priority 3: Console only (default)\n // Already logged above\n }\n\n /**\n * Post error object using fetch configuration\n */\n postToEndpoint(errorPayload) {\n const { url, options = {} } = this.fetchConfig;\n \n // Default configuration\n const defaultOptions = {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n ...options.headers\n },\n body: JSON.stringify(errorPayload),\n ...options\n };\n\n fetch(url, defaultOptions).catch(error => {\n console.warn('SyntropyFront: Error posting to endpoint:', error);\n });\n }\n\n // Public API\n addBreadcrumb(category, message, data = {}) {\n if (!this.isActive) return;\n \n const breadcrumb = this.breadcrumbManager.add(category, message, data);\n \n // Keep only the last maxEvents\n const breadcrumbs = this.breadcrumbManager.getAll();\n if (breadcrumbs.length > this.maxEvents) {\n this.breadcrumbManager.clear();\n breadcrumbs.slice(-this.maxEvents).forEach(b => this.breadcrumbManager.add(b.category, b.message, b.data));\n }\n \n return breadcrumb;\n }\n\n getBreadcrumbs() {\n return this.breadcrumbManager.getAll();\n }\n\n clearBreadcrumbs() {\n this.breadcrumbManager.clear();\n }\n\n sendError(error, context = {}) {\n if (!this.isActive) return;\n \n const errorData = this.errorManager.send(error, context);\n const errorPayload = {\n ...errorData,\n breadcrumbs: this.getBreadcrumbs(),\n timestamp: new Date().toISOString()\n };\n \n this.handleError(errorPayload);\n return errorData;\n }\n\n getErrors() {\n return this.errorManager.getAll();\n }\n\n clearErrors() {\n this.errorManager.clear();\n }\n\n // Utility methods\n getStats() {\n return {\n breadcrumbs: this.breadcrumbManager.getCount(),\n errors: this.errorManager.getCount(),\n isActive: this.isActive,\n maxEvents: this.maxEvents,\n hasFetchConfig: !!this.fetchConfig,\n hasErrorCallback: !!this.onErrorCallback,\n endpoint: this.fetchConfig?.url || 'console'\n };\n }\n}\n\n// Single instance - auto-initializes\nconst syntropyFront = new SyntropyFront();\n\n// Export the instance\nexport default syntropyFront; "],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../src/core/BreadcrumbManager.js","../src/core/ErrorManager.js","../src/core/Logger.js","../src/index.js"],"sourcesContent":["/**\n * BreadcrumbManager - Gestiona breadcrumbs\n * Responsabilidad única: Almacenar y gestionar breadcrumbs\n */\nexport class BreadcrumbManager {\n constructor() {\n this.breadcrumbs = [];\n }\n\n add(category, message, data = {}) {\n const breadcrumb = {\n category,\n message,\n data,\n timestamp: new Date().toISOString()\n };\n \n this.breadcrumbs.push(breadcrumb);\n return breadcrumb;\n }\n\n getAll() {\n return this.breadcrumbs;\n }\n\n clear() {\n this.breadcrumbs = [];\n }\n\n getCount() {\n return this.breadcrumbs.length;\n }\n} ","/**\n * ErrorManager - Gestiona errores\n * Responsabilidad única: Formatear y gestionar errores\n */\nexport class ErrorManager {\n constructor() {\n this.errors = [];\n }\n\n send(error, context = {}) {\n const errorData = {\n message: error.message,\n stack: error.stack,\n context,\n timestamp: new Date().toISOString()\n };\n \n this.errors.push(errorData);\n return errorData;\n }\n\n getAll() {\n return this.errors;\n }\n\n clear() {\n this.errors = [];\n }\n\n getCount() {\n return this.errors.length;\n }\n} ","/**\n * Logger - Hace logging solo en errores\n * Responsabilidad única: Mostrar mensajes solo cuando hay errores\n */\nexport class Logger {\n constructor() {\n this.isSilent = true; // Por defecto silente\n }\n\n log(message, data = null) {\n // No loggear nada en modo silente\n if (this.isSilent) return;\n \n if (data) {\n console.log(message, data);\n } else {\n console.log(message);\n }\n }\n\n error(message, data = null) {\n // SIEMPRE loggear errores\n if (data) {\n console.error(message, data);\n } else {\n console.error(message);\n }\n }\n\n warn(message, data = null) {\n // Solo warnings importantes\n if (data) {\n console.warn(message, data);\n } else {\n console.warn(message);\n }\n }\n\n // Método para activar logging (solo para debug)\n enableLogging() {\n this.isSilent = false;\n }\n\n // Método para desactivar logging\n disableLogging() {\n this.isSilent = true;\n }\n} ","/**\n * SyntropyFront - Observability library with automatic capture\n * Single responsibility: Automatically capture events and send errors with context\n */\nimport { BreadcrumbManager } from './core/BreadcrumbManager.js';\nimport { ErrorManager } from './core/ErrorManager.js';\nimport { Logger } from './core/Logger.js';\n\nclass SyntropyFront {\n constructor() {\n // Basic managers\n this.breadcrumbManager = new BreadcrumbManager();\n this.errorManager = new ErrorManager();\n this.logger = new Logger();\n \n // Default configuration\n this.maxEvents = 50;\n this.fetchConfig = null; // Complete fetch configuration\n this.onErrorCallback = null; // User-defined error handler\n this.isActive = false;\n \n // Automatic capture\n this.originalHandlers = {};\n \n // Auto-initialize\n this.init();\n }\n\n init() {\n this.isActive = true;\n \n // Configure automatic capture immediately\n this.setupAutomaticCapture();\n \n console.log('🚀 SyntropyFront: Initialized with automatic capture');\n }\n\n /**\n * Configure SyntropyFront\n * @param {Object} config - Configuration\n * @param {number} config.maxEvents - Maximum number of events to store\n * @param {Object} config.fetch - Complete fetch configuration\n * @param {string} config.fetch.url - Endpoint URL\n * @param {Object} config.fetch.options - Fetch options (headers, method, etc.)\n * @param {Function} config.onError - User-defined error handler callback\n */\n configure(config = {}) {\n this.maxEvents = config.maxEvents || this.maxEvents;\n this.fetchConfig = config.fetch;\n this.onErrorCallback = config.onError;\n \n if (this.onErrorCallback) {\n console.log(`✅ SyntropyFront: Configured - maxEvents: ${this.maxEvents}, custom error handler`);\n } else if (this.fetchConfig) {\n console.log(`✅ SyntropyFront: Configured - maxEvents: ${this.maxEvents}, endpoint: ${this.fetchConfig.url}`);\n } else {\n console.log(`✅ SyntropyFront: Configured - maxEvents: ${this.maxEvents}, console only`);\n }\n }\n\n /**\n * Configure automatic event capture\n */\n setupAutomaticCapture() {\n if (typeof window === 'undefined') return;\n\n // Capture clicks\n this.setupClickCapture();\n \n // Capture errors\n this.setupErrorCapture();\n \n // Capture HTTP calls\n this.setupHttpCapture();\n \n // Capture console logs\n this.setupConsoleCapture();\n }\n\n /**\n * Capture user clicks\n */\n setupClickCapture() {\n const clickHandler = (event) => {\n const element = event.target;\n this.addBreadcrumb('user', 'click', {\n element: element.tagName,\n id: element.id,\n className: element.className,\n x: event.clientX,\n y: event.clientY\n });\n };\n\n document.addEventListener('click', clickHandler);\n }\n\n /**\n * Automatically capture errors\n */\n setupErrorCapture() {\n // Save original handlers\n this.originalHandlers.onerror = window.onerror;\n this.originalHandlers.onunhandledrejection = window.onunhandledrejection;\n\n // Intercept errors\n window.onerror = (message, source, lineno, colno, error) => {\n const errorPayload = {\n type: 'uncaught_exception',\n error: { message, source, lineno, colno, stack: error?.stack },\n breadcrumbs: this.getBreadcrumbs(),\n timestamp: new Date().toISOString()\n };\n\n this.handleError(errorPayload);\n \n // Call original handler\n if (this.originalHandlers.onerror) {\n return this.originalHandlers.onerror(message, source, lineno, colno, error);\n }\n \n return false;\n };\n\n // Intercept rejected promises\n window.onunhandledrejection = (event) => {\n const errorPayload = {\n type: 'unhandled_rejection',\n error: {\n message: event.reason?.message || 'Promise rejection without message',\n stack: event.reason?.stack,\n },\n breadcrumbs: this.getBreadcrumbs(),\n timestamp: new Date().toISOString()\n };\n\n this.handleError(errorPayload);\n \n // Call original handler\n if (this.originalHandlers.onunhandledrejection) {\n this.originalHandlers.onunhandledrejection(event);\n }\n };\n }\n\n /**\n * Capture HTTP calls\n */\n setupHttpCapture() {\n // Intercept fetch\n const originalFetch = window.fetch;\n window.fetch = (...args) => {\n const [url, options] = args;\n \n this.addBreadcrumb('http', 'fetch', {\n url,\n method: options?.method || 'GET'\n });\n\n return originalFetch(...args).then(response => {\n this.addBreadcrumb('http', 'fetch_response', {\n url,\n status: response.status\n });\n return response;\n }).catch(error => {\n this.addBreadcrumb('http', 'fetch_error', {\n url,\n error: error.message\n });\n throw error;\n });\n };\n }\n\n /**\n * Capture console logs\n */\n setupConsoleCapture() {\n const originalLog = console.log;\n const originalError = console.error;\n const originalWarn = console.warn;\n\n console.log = (...args) => {\n this.addBreadcrumb('console', 'log', { message: args.join(' ') });\n originalLog.apply(console, args);\n };\n\n console.error = (...args) => {\n this.addBreadcrumb('console', 'error', { message: args.join(' ') });\n originalError.apply(console, args);\n };\n\n console.warn = (...args) => {\n this.addBreadcrumb('console', 'warn', { message: args.join(' ') });\n originalWarn.apply(console, args);\n };\n }\n\n /**\n * Handle errors - priority: onError callback > fetch > console\n */\n handleError(errorPayload) {\n // Default log\n this.logger.error('❌ Error:', errorPayload);\n \n // Priority 1: User-defined callback (maximum flexibility)\n if (this.onErrorCallback) {\n try {\n this.onErrorCallback(errorPayload);\n } catch (callbackError) {\n console.warn('SyntropyFront: Error in user callback:', callbackError);\n }\n return;\n }\n \n // Priority 2: Fetch to endpoint\n if (this.fetchConfig) {\n this.postToEndpoint(errorPayload);\n return;\n }\n \n // Priority 3: Console only (default)\n // Already logged above\n }\n\n /**\n * Post error object using fetch configuration\n */\n postToEndpoint(errorPayload) {\n const { url, options = {} } = this.fetchConfig;\n \n // Default configuration\n const defaultOptions = {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n ...options.headers\n },\n body: JSON.stringify(errorPayload),\n ...options\n };\n\n fetch(url, defaultOptions).catch(error => {\n console.warn('SyntropyFront: Error posting to endpoint:', error);\n });\n }\n\n // Public API\n addBreadcrumb(category, message, data = {}) {\n if (!this.isActive) return;\n \n const breadcrumb = this.breadcrumbManager.add(category, message, data);\n \n // Keep only the last maxEvents\n const breadcrumbs = this.breadcrumbManager.getAll();\n if (breadcrumbs.length > this.maxEvents) {\n this.breadcrumbManager.clear();\n breadcrumbs.slice(-this.maxEvents).forEach(b => this.breadcrumbManager.add(b.category, b.message, b.data));\n }\n \n return breadcrumb;\n }\n\n getBreadcrumbs() {\n return this.breadcrumbManager.getAll();\n }\n\n clearBreadcrumbs() {\n this.breadcrumbManager.clear();\n }\n\n sendError(error, context = {}) {\n if (!this.isActive) return;\n \n const errorData = this.errorManager.send(error, context);\n const errorPayload = {\n ...errorData,\n breadcrumbs: this.getBreadcrumbs(),\n timestamp: new Date().toISOString()\n };\n \n this.handleError(errorPayload);\n return errorData;\n }\n\n getErrors() {\n return this.errorManager.getAll();\n }\n\n clearErrors() {\n this.errorManager.clear();\n }\n\n // Utility methods\n getStats() {\n return {\n breadcrumbs: this.breadcrumbManager.getCount(),\n errors: this.errorManager.getCount(),\n isActive: this.isActive,\n maxEvents: this.maxEvents,\n hasFetchConfig: !!this.fetchConfig,\n hasErrorCallback: !!this.onErrorCallback,\n endpoint: this.fetchConfig?.url || 'console'\n };\n }\n}\n\n// Single instance - auto-initializes\nconst syntropyFront = new SyntropyFront();\n\n// Export the instance\nexport default syntropyFront; "],"names":[],"mappings":"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"}
|
package/dist/index.min.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.min.js","sources":["../src/core/BreadcrumbManager.js","../src/core/ErrorManager.js","../src/core/Logger.js","../src/index.js"],"sourcesContent":["/**\n * BreadcrumbManager - Gestiona breadcrumbs\n * Responsabilidad única: Almacenar y gestionar breadcrumbs\n */\nexport class BreadcrumbManager {\n constructor() {\n this.breadcrumbs = [];\n }\n\n add(category, message, data = {}) {\n const breadcrumb = {\n category,\n message,\n data,\n timestamp: new Date().toISOString()\n };\n \n this.breadcrumbs.push(breadcrumb);\n return breadcrumb;\n }\n\n getAll() {\n return this.breadcrumbs;\n }\n\n clear() {\n this.breadcrumbs = [];\n }\n\n getCount() {\n return this.breadcrumbs.length;\n }\n} ","/**\n * ErrorManager - Gestiona errores\n * Responsabilidad única: Formatear y gestionar errores\n */\nexport class ErrorManager {\n constructor() {\n this.errors = [];\n }\n\n send(error, context = {}) {\n const errorData = {\n message: error.message,\n stack: error.stack,\n context,\n timestamp: new Date().toISOString()\n };\n \n this.errors.push(errorData);\n return errorData;\n }\n\n getAll() {\n return this.errors;\n }\n\n clear() {\n this.errors = [];\n }\n\n getCount() {\n return this.errors.length;\n }\n} ","/**\n * Logger - Hace logging solo en errores\n * Responsabilidad única: Mostrar mensajes solo cuando hay errores\n */\nexport class Logger {\n constructor() {\n this.isSilent = true; // Por defecto silente\n }\n\n log(message, data = null) {\n // No loggear nada en modo silente\n if (this.isSilent) return;\n \n if (data) {\n console.log(message, data);\n } else {\n console.log(message);\n }\n }\n\n error(message, data = null) {\n // SIEMPRE loggear errores\n if (data) {\n console.error(message, data);\n } else {\n console.error(message);\n }\n }\n\n warn(message, data = null) {\n // Solo warnings importantes\n if (data) {\n console.warn(message, data);\n } else {\n console.warn(message);\n }\n }\n\n // Método para activar logging (solo para debug)\n enableLogging() {\n this.isSilent = false;\n }\n\n // Método para desactivar logging\n disableLogging() {\n this.isSilent = true;\n }\n} ","/**\n * SyntropyFront - Observability library with automatic capture\n * Single responsibility: Automatically capture events and send errors with context\n */\nimport { BreadcrumbManager } from './core/BreadcrumbManager.js';\nimport { ErrorManager } from './core/ErrorManager.js';\nimport { Logger } from './core/Logger.js';\n\nclass SyntropyFront {\n constructor() {\n // Basic managers\n this.breadcrumbManager = new BreadcrumbManager();\n this.errorManager = new ErrorManager();\n this.logger = new Logger();\n \n // Default configuration\n this.maxEvents = 50;\n this.fetchConfig = null; // Complete fetch configuration\n this.onErrorCallback = null; // User-defined error handler\n this.isActive = false;\n \n // Automatic capture\n this.originalHandlers = {};\n \n // Auto-initialize\n this.init();\n }\n\n init() {\n this.isActive = true;\n \n // Configure automatic capture immediately\n this.setupAutomaticCapture();\n \n console.log('🚀 SyntropyFront: Initialized with automatic capture');\n }\n\n /**\n * Configure SyntropyFront\n * @param {Object} config - Configuration\n * @param {number} config.maxEvents - Maximum number of events to store\n * @param {Object} config.fetch - Complete fetch configuration\n * @param {string} config.fetch.url - Endpoint URL\n * @param {Object} config.fetch.options - Fetch options (headers, method, etc.)\n * @param {Function} config.onError - User-defined error handler callback\n */\n configure(config = {}) {\n this.maxEvents = config.maxEvents || this.maxEvents;\n this.fetchConfig = config.fetch;\n this.onErrorCallback = config.onError;\n \n if (this.onErrorCallback) {\n console.log(`✅ SyntropyFront: Configured - maxEvents: ${this.maxEvents}, custom error handler`);\n } else if (this.fetchConfig) {\n console.log(`✅ SyntropyFront: Configured - maxEvents: ${this.maxEvents}, endpoint: ${this.fetchConfig.url}`);\n } else {\n console.log(`✅ SyntropyFront: Configured - maxEvents: ${this.maxEvents}, console only`);\n }\n }\n\n /**\n * Configure automatic event capture\n */\n setupAutomaticCapture() {\n if (typeof window === 'undefined') return;\n\n // Capture clicks\n this.setupClickCapture();\n \n // Capture errors\n this.setupErrorCapture();\n \n // Capture HTTP calls\n this.setupHttpCapture();\n \n // Capture console logs\n this.setupConsoleCapture();\n }\n\n /**\n * Capture user clicks\n */\n setupClickCapture() {\n const clickHandler = (event) => {\n const element = event.target;\n this.addBreadcrumb('user', 'click', {\n element: element.tagName,\n id: element.id,\n className: element.className,\n x: event.clientX,\n y: event.clientY\n });\n };\n\n document.addEventListener('click', clickHandler);\n }\n\n /**\n * Automatically capture errors\n */\n setupErrorCapture() {\n // Save original handlers\n this.originalHandlers.onerror = window.onerror;\n this.originalHandlers.onunhandledrejection = window.onunhandledrejection;\n\n // Intercept errors\n window.onerror = (message, source, lineno, colno, error) => {\n const errorPayload = {\n type: 'uncaught_exception',\n error: { message, source, lineno, colno, stack: error?.stack },\n breadcrumbs: this.getBreadcrumbs(),\n timestamp: new Date().toISOString()\n };\n\n this.handleError(errorPayload);\n \n // Call original handler\n if (this.originalHandlers.onerror) {\n return this.originalHandlers.onerror(message, source, lineno, colno, error);\n }\n \n return false;\n };\n\n // Intercept rejected promises\n window.onunhandledrejection = (event) => {\n const errorPayload = {\n type: 'unhandled_rejection',\n error: {\n message: event.reason?.message || 'Promise rejection without message',\n stack: event.reason?.stack,\n },\n breadcrumbs: this.getBreadcrumbs(),\n timestamp: new Date().toISOString()\n };\n\n this.handleError(errorPayload);\n \n // Call original handler\n if (this.originalHandlers.onunhandledrejection) {\n this.originalHandlers.onunhandledrejection(event);\n }\n };\n }\n\n /**\n * Capture HTTP calls\n */\n setupHttpCapture() {\n // Intercept fetch\n const originalFetch = window.fetch;\n window.fetch = (...args) => {\n const [url, options] = args;\n \n this.addBreadcrumb('http', 'fetch', {\n url: url,\n method: options?.method || 'GET'\n });\n\n return originalFetch(...args).then(response => {\n this.addBreadcrumb('http', 'fetch_response', {\n url: url,\n status: response.status\n });\n return response;\n }).catch(error => {\n this.addBreadcrumb('http', 'fetch_error', {\n url: url,\n error: error.message\n });\n throw error;\n });\n };\n }\n\n /**\n * Capture console logs\n */\n setupConsoleCapture() {\n const originalLog = console.log;\n const originalError = console.error;\n const originalWarn = console.warn;\n\n console.log = (...args) => {\n this.addBreadcrumb('console', 'log', { message: args.join(' ') });\n originalLog.apply(console, args);\n };\n\n console.error = (...args) => {\n this.addBreadcrumb('console', 'error', { message: args.join(' ') });\n originalError.apply(console, args);\n };\n\n console.warn = (...args) => {\n this.addBreadcrumb('console', 'warn', { message: args.join(' ') });\n originalWarn.apply(console, args);\n };\n }\n\n /**\n * Handle errors - priority: onError callback > fetch > console\n */\n handleError(errorPayload) {\n // Default log\n this.logger.error('❌ Error:', errorPayload);\n \n // Priority 1: User-defined callback (maximum flexibility)\n if (this.onErrorCallback) {\n try {\n this.onErrorCallback(errorPayload);\n } catch (callbackError) {\n console.warn('SyntropyFront: Error in user callback:', callbackError);\n }\n return;\n }\n \n // Priority 2: Fetch to endpoint\n if (this.fetchConfig) {\n this.postToEndpoint(errorPayload);\n return;\n }\n \n // Priority 3: Console only (default)\n // Already logged above\n }\n\n /**\n * Post error object using fetch configuration\n */\n postToEndpoint(errorPayload) {\n const { url, options = {} } = this.fetchConfig;\n \n // Default configuration\n const defaultOptions = {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n ...options.headers\n },\n body: JSON.stringify(errorPayload),\n ...options\n };\n\n fetch(url, defaultOptions).catch(error => {\n console.warn('SyntropyFront: Error posting to endpoint:', error);\n });\n }\n\n // Public API\n addBreadcrumb(category, message, data = {}) {\n if (!this.isActive) return;\n \n const breadcrumb = this.breadcrumbManager.add(category, message, data);\n \n // Keep only the last maxEvents\n const breadcrumbs = this.breadcrumbManager.getAll();\n if (breadcrumbs.length > this.maxEvents) {\n this.breadcrumbManager.clear();\n breadcrumbs.slice(-this.maxEvents).forEach(b => this.breadcrumbManager.add(b.category, b.message, b.data));\n }\n \n return breadcrumb;\n }\n\n getBreadcrumbs() {\n return this.breadcrumbManager.getAll();\n }\n\n clearBreadcrumbs() {\n this.breadcrumbManager.clear();\n }\n\n sendError(error, context = {}) {\n if (!this.isActive) return;\n \n const errorData = this.errorManager.send(error, context);\n const errorPayload = {\n ...errorData,\n breadcrumbs: this.getBreadcrumbs(),\n timestamp: new Date().toISOString()\n };\n \n this.handleError(errorPayload);\n return errorData;\n }\n\n getErrors() {\n return this.errorManager.getAll();\n }\n\n clearErrors() {\n this.errorManager.clear();\n }\n\n // Utility methods\n getStats() {\n return {\n breadcrumbs: this.breadcrumbManager.getCount(),\n errors: this.errorManager.getCount(),\n isActive: this.isActive,\n maxEvents: this.maxEvents,\n hasFetchConfig: !!this.fetchConfig,\n hasErrorCallback: !!this.onErrorCallback,\n endpoint: this.fetchConfig?.url || 'console'\n };\n }\n}\n\n// Single instance - auto-initializes\nconst syntropyFront = new SyntropyFront();\n\n// Export the instance\nexport default syntropyFront; "],"names":["BreadcrumbManager","constructor","this","breadcrumbs","add","category","message","data","breadcrumb","timestamp","Date","toISOString","push","getAll","clear","getCount","length","ErrorManager","errors","send","error","context","errorData","stack","Logger","isSilent","log","console","warn","enableLogging","disableLogging","breadcrumbManager","errorManager","logger","maxEvents","fetchConfig","onErrorCallback","isActive","originalHandlers","init","setupAutomaticCapture","configure","config","fetch","onError","url","window","setupClickCapture","setupErrorCapture","setupHttpCapture","setupConsoleCapture","document","addEventListener","event","element","target","addBreadcrumb","tagName","id","className","x","clientX","y","clientY","onerror","onunhandledrejection","source","lineno","colno","errorPayload","type","getBreadcrumbs","handleError","reason","originalFetch","args","options","method","then","response","status","catch","originalLog","originalError","originalWarn","join","apply","callbackError","postToEndpoint","defaultOptions","headers","body","JSON","stringify","slice","forEach","b","clearBreadcrumbs","sendError","getErrors","clearErrors","getStats","hasFetchConfig","hasErrorCallback","endpoint"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.min.js","sources":["../src/core/BreadcrumbManager.js","../src/core/ErrorManager.js","../src/core/Logger.js","../src/index.js"],"sourcesContent":["/**\n * BreadcrumbManager - Gestiona breadcrumbs\n * Responsabilidad única: Almacenar y gestionar breadcrumbs\n */\nexport class BreadcrumbManager {\n constructor() {\n this.breadcrumbs = [];\n }\n\n add(category, message, data = {}) {\n const breadcrumb = {\n category,\n message,\n data,\n timestamp: new Date().toISOString()\n };\n \n this.breadcrumbs.push(breadcrumb);\n return breadcrumb;\n }\n\n getAll() {\n return this.breadcrumbs;\n }\n\n clear() {\n this.breadcrumbs = [];\n }\n\n getCount() {\n return this.breadcrumbs.length;\n }\n} ","/**\n * ErrorManager - Gestiona errores\n * Responsabilidad única: Formatear y gestionar errores\n */\nexport class ErrorManager {\n constructor() {\n this.errors = [];\n }\n\n send(error, context = {}) {\n const errorData = {\n message: error.message,\n stack: error.stack,\n context,\n timestamp: new Date().toISOString()\n };\n \n this.errors.push(errorData);\n return errorData;\n }\n\n getAll() {\n return this.errors;\n }\n\n clear() {\n this.errors = [];\n }\n\n getCount() {\n return this.errors.length;\n }\n} ","/**\n * Logger - Hace logging solo en errores\n * Responsabilidad única: Mostrar mensajes solo cuando hay errores\n */\nexport class Logger {\n constructor() {\n this.isSilent = true; // Por defecto silente\n }\n\n log(message, data = null) {\n // No loggear nada en modo silente\n if (this.isSilent) return;\n \n if (data) {\n console.log(message, data);\n } else {\n console.log(message);\n }\n }\n\n error(message, data = null) {\n // SIEMPRE loggear errores\n if (data) {\n console.error(message, data);\n } else {\n console.error(message);\n }\n }\n\n warn(message, data = null) {\n // Solo warnings importantes\n if (data) {\n console.warn(message, data);\n } else {\n console.warn(message);\n }\n }\n\n // Método para activar logging (solo para debug)\n enableLogging() {\n this.isSilent = false;\n }\n\n // Método para desactivar logging\n disableLogging() {\n this.isSilent = true;\n }\n} ","/**\n * SyntropyFront - Observability library with automatic capture\n * Single responsibility: Automatically capture events and send errors with context\n */\nimport { BreadcrumbManager } from './core/BreadcrumbManager.js';\nimport { ErrorManager } from './core/ErrorManager.js';\nimport { Logger } from './core/Logger.js';\n\nclass SyntropyFront {\n constructor() {\n // Basic managers\n this.breadcrumbManager = new BreadcrumbManager();\n this.errorManager = new ErrorManager();\n this.logger = new Logger();\n \n // Default configuration\n this.maxEvents = 50;\n this.fetchConfig = null; // Complete fetch configuration\n this.onErrorCallback = null; // User-defined error handler\n this.isActive = false;\n \n // Automatic capture\n this.originalHandlers = {};\n \n // Auto-initialize\n this.init();\n }\n\n init() {\n this.isActive = true;\n \n // Configure automatic capture immediately\n this.setupAutomaticCapture();\n \n console.log('🚀 SyntropyFront: Initialized with automatic capture');\n }\n\n /**\n * Configure SyntropyFront\n * @param {Object} config - Configuration\n * @param {number} config.maxEvents - Maximum number of events to store\n * @param {Object} config.fetch - Complete fetch configuration\n * @param {string} config.fetch.url - Endpoint URL\n * @param {Object} config.fetch.options - Fetch options (headers, method, etc.)\n * @param {Function} config.onError - User-defined error handler callback\n */\n configure(config = {}) {\n this.maxEvents = config.maxEvents || this.maxEvents;\n this.fetchConfig = config.fetch;\n this.onErrorCallback = config.onError;\n \n if (this.onErrorCallback) {\n console.log(`✅ SyntropyFront: Configured - maxEvents: ${this.maxEvents}, custom error handler`);\n } else if (this.fetchConfig) {\n console.log(`✅ SyntropyFront: Configured - maxEvents: ${this.maxEvents}, endpoint: ${this.fetchConfig.url}`);\n } else {\n console.log(`✅ SyntropyFront: Configured - maxEvents: ${this.maxEvents}, console only`);\n }\n }\n\n /**\n * Configure automatic event capture\n */\n setupAutomaticCapture() {\n if (typeof window === 'undefined') return;\n\n // Capture clicks\n this.setupClickCapture();\n \n // Capture errors\n this.setupErrorCapture();\n \n // Capture HTTP calls\n this.setupHttpCapture();\n \n // Capture console logs\n this.setupConsoleCapture();\n }\n\n /**\n * Capture user clicks\n */\n setupClickCapture() {\n const clickHandler = (event) => {\n const element = event.target;\n this.addBreadcrumb('user', 'click', {\n element: element.tagName,\n id: element.id,\n className: element.className,\n x: event.clientX,\n y: event.clientY\n });\n };\n\n document.addEventListener('click', clickHandler);\n }\n\n /**\n * Automatically capture errors\n */\n setupErrorCapture() {\n // Save original handlers\n this.originalHandlers.onerror = window.onerror;\n this.originalHandlers.onunhandledrejection = window.onunhandledrejection;\n\n // Intercept errors\n window.onerror = (message, source, lineno, colno, error) => {\n const errorPayload = {\n type: 'uncaught_exception',\n error: { message, source, lineno, colno, stack: error?.stack },\n breadcrumbs: this.getBreadcrumbs(),\n timestamp: new Date().toISOString()\n };\n\n this.handleError(errorPayload);\n \n // Call original handler\n if (this.originalHandlers.onerror) {\n return this.originalHandlers.onerror(message, source, lineno, colno, error);\n }\n \n return false;\n };\n\n // Intercept rejected promises\n window.onunhandledrejection = (event) => {\n const errorPayload = {\n type: 'unhandled_rejection',\n error: {\n message: event.reason?.message || 'Promise rejection without message',\n stack: event.reason?.stack,\n },\n breadcrumbs: this.getBreadcrumbs(),\n timestamp: new Date().toISOString()\n };\n\n this.handleError(errorPayload);\n \n // Call original handler\n if (this.originalHandlers.onunhandledrejection) {\n this.originalHandlers.onunhandledrejection(event);\n }\n };\n }\n\n /**\n * Capture HTTP calls\n */\n setupHttpCapture() {\n // Intercept fetch\n const originalFetch = window.fetch;\n window.fetch = (...args) => {\n const [url, options] = args;\n \n this.addBreadcrumb('http', 'fetch', {\n url,\n method: options?.method || 'GET'\n });\n\n return originalFetch(...args).then(response => {\n this.addBreadcrumb('http', 'fetch_response', {\n url,\n status: response.status\n });\n return response;\n }).catch(error => {\n this.addBreadcrumb('http', 'fetch_error', {\n url,\n error: error.message\n });\n throw error;\n });\n };\n }\n\n /**\n * Capture console logs\n */\n setupConsoleCapture() {\n const originalLog = console.log;\n const originalError = console.error;\n const originalWarn = console.warn;\n\n console.log = (...args) => {\n this.addBreadcrumb('console', 'log', { message: args.join(' ') });\n originalLog.apply(console, args);\n };\n\n console.error = (...args) => {\n this.addBreadcrumb('console', 'error', { message: args.join(' ') });\n originalError.apply(console, args);\n };\n\n console.warn = (...args) => {\n this.addBreadcrumb('console', 'warn', { message: args.join(' ') });\n originalWarn.apply(console, args);\n };\n }\n\n /**\n * Handle errors - priority: onError callback > fetch > console\n */\n handleError(errorPayload) {\n // Default log\n this.logger.error('❌ Error:', errorPayload);\n \n // Priority 1: User-defined callback (maximum flexibility)\n if (this.onErrorCallback) {\n try {\n this.onErrorCallback(errorPayload);\n } catch (callbackError) {\n console.warn('SyntropyFront: Error in user callback:', callbackError);\n }\n return;\n }\n \n // Priority 2: Fetch to endpoint\n if (this.fetchConfig) {\n this.postToEndpoint(errorPayload);\n return;\n }\n \n // Priority 3: Console only (default)\n // Already logged above\n }\n\n /**\n * Post error object using fetch configuration\n */\n postToEndpoint(errorPayload) {\n const { url, options = {} } = this.fetchConfig;\n \n // Default configuration\n const defaultOptions = {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n ...options.headers\n },\n body: JSON.stringify(errorPayload),\n ...options\n };\n\n fetch(url, defaultOptions).catch(error => {\n console.warn('SyntropyFront: Error posting to endpoint:', error);\n });\n }\n\n // Public API\n addBreadcrumb(category, message, data = {}) {\n if (!this.isActive) return;\n \n const breadcrumb = this.breadcrumbManager.add(category, message, data);\n \n // Keep only the last maxEvents\n const breadcrumbs = this.breadcrumbManager.getAll();\n if (breadcrumbs.length > this.maxEvents) {\n this.breadcrumbManager.clear();\n breadcrumbs.slice(-this.maxEvents).forEach(b => this.breadcrumbManager.add(b.category, b.message, b.data));\n }\n \n return breadcrumb;\n }\n\n getBreadcrumbs() {\n return this.breadcrumbManager.getAll();\n }\n\n clearBreadcrumbs() {\n this.breadcrumbManager.clear();\n }\n\n sendError(error, context = {}) {\n if (!this.isActive) return;\n \n const errorData = this.errorManager.send(error, context);\n const errorPayload = {\n ...errorData,\n breadcrumbs: this.getBreadcrumbs(),\n timestamp: new Date().toISOString()\n };\n \n this.handleError(errorPayload);\n return errorData;\n }\n\n getErrors() {\n return this.errorManager.getAll();\n }\n\n clearErrors() {\n this.errorManager.clear();\n }\n\n // Utility methods\n getStats() {\n return {\n breadcrumbs: this.breadcrumbManager.getCount(),\n errors: this.errorManager.getCount(),\n isActive: this.isActive,\n maxEvents: this.maxEvents,\n hasFetchConfig: !!this.fetchConfig,\n hasErrorCallback: !!this.onErrorCallback,\n endpoint: this.fetchConfig?.url || 'console'\n };\n }\n}\n\n// Single instance - auto-initializes\nconst syntropyFront = new SyntropyFront();\n\n// Export the instance\nexport default syntropyFront; "],"names":["BreadcrumbManager","constructor","this","breadcrumbs","add","category","message","data","breadcrumb","timestamp","Date","toISOString","push","getAll","clear","getCount","length","ErrorManager","errors","send","error","context","errorData","stack","Logger","isSilent","log","console","warn","enableLogging","disableLogging","breadcrumbManager","errorManager","logger","maxEvents","fetchConfig","onErrorCallback","isActive","originalHandlers","init","setupAutomaticCapture","configure","config","fetch","onError","url","window","setupClickCapture","setupErrorCapture","setupHttpCapture","setupConsoleCapture","document","addEventListener","event","element","target","addBreadcrumb","tagName","id","className","x","clientX","y","clientY","onerror","onunhandledrejection","source","lineno","colno","errorPayload","type","getBreadcrumbs","handleError","reason","originalFetch","args","options","method","then","response","status","catch","originalLog","originalError","originalWarn","join","apply","callbackError","postToEndpoint","defaultOptions","headers","body","JSON","stringify","slice","forEach","b","clearBreadcrumbs","sendError","getErrors","clearErrors","getStats","hasFetchConfig","hasErrorCallback","endpoint"],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@syntropysoft/syntropyfront",
|
|
3
|
-
"version": "0.2.
|
|
3
|
+
"version": "0.2.3",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"description": "🚀 Observability library with automatic capture - Just 1 line of code! Automatically captures clicks, errors, HTTP calls, and console logs with flexible error handling.",
|
|
6
6
|
"main": "dist/index.js",
|
|
@@ -59,7 +59,7 @@
|
|
|
59
59
|
},
|
|
60
60
|
"homepage": "https://github.com/Syntropysoft/syntropyfront#readme",
|
|
61
61
|
"engines": {
|
|
62
|
-
"node": ">=
|
|
62
|
+
"node": ">=18.0.0"
|
|
63
63
|
},
|
|
64
64
|
"dependencies": {
|
|
65
65
|
"flatted": "^3.3.3"
|
|
@@ -68,11 +68,11 @@
|
|
|
68
68
|
"@rollup/plugin-commonjs": "^25.0.0",
|
|
69
69
|
"@rollup/plugin-node-resolve": "^15.0.0",
|
|
70
70
|
"@rollup/plugin-terser": "^0.4.0",
|
|
71
|
-
"@vitest/coverage-v8": "^
|
|
71
|
+
"@vitest/coverage-v8": "^3.2.4",
|
|
72
72
|
"eslint": "^8.0.0",
|
|
73
73
|
"jsdom": "^26.1.0",
|
|
74
74
|
"rollup": "^3.0.0",
|
|
75
|
-
"vitest": "^
|
|
75
|
+
"vitest": "^3.2.4"
|
|
76
76
|
},
|
|
77
77
|
"browserslist": [
|
|
78
78
|
"> 1%",
|