@crimsonsunset/jsg-logger 1.7.13 → 1.7.14
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/devtools/dist/__vite-browser-external-2Ng8QIWW-2Ng8QIWW-2Ng8QIWW-2Ng8QIWW-2Ng8QIWW-2Ng8QIWW-2Ng8QIWW-2Ng8QIWW-2Ng8QIWW-2Ng8QIWW-2Ng8QIWW-2Ng8QIWW-2Ng8QIWW-2Ng8QIWW-2Ng8QIWW-2Ng8QIWW-2Ng8QIWW-2Ng8QIWW.js +5 -0
- package/devtools/dist/__vite-browser-external-2Ng8QIWW-2Ng8QIWW-2Ng8QIWW-2Ng8QIWW-2Ng8QIWW-2Ng8QIWW-2Ng8QIWW-2Ng8QIWW-2Ng8QIWW-2Ng8QIWW-2Ng8QIWW-2Ng8QIWW-2Ng8QIWW-2Ng8QIWW-2Ng8QIWW-2Ng8QIWW-2Ng8QIWW-2Ng8QIWW.js.map +1 -0
- package/devtools/dist/__vite-browser-external-2Ng8QIWW-2Ng8QIWW-2Ng8QIWW-2Ng8QIWW-2Ng8QIWW-2Ng8QIWW-2Ng8QIWW-2Ng8QIWW-2Ng8QIWW-2Ng8QIWW-2Ng8QIWW-2Ng8QIWW-2Ng8QIWW-2Ng8QIWW-2Ng8QIWW-2Ng8QIWW-2Ng8QIWW.js +5 -0
- package/devtools/dist/__vite-browser-external-2Ng8QIWW-2Ng8QIWW-2Ng8QIWW-2Ng8QIWW-2Ng8QIWW-2Ng8QIWW-2Ng8QIWW-2Ng8QIWW-2Ng8QIWW-2Ng8QIWW-2Ng8QIWW-2Ng8QIWW-2Ng8QIWW-2Ng8QIWW-2Ng8QIWW-2Ng8QIWW-2Ng8QIWW.js.map +1 -0
- package/devtools/dist/__vite-browser-external-2Ng8QIWW-2Ng8QIWW-2Ng8QIWW-2Ng8QIWW-2Ng8QIWW-2Ng8QIWW-2Ng8QIWW-2Ng8QIWW-2Ng8QIWW-2Ng8QIWW-2Ng8QIWW-2Ng8QIWW-2Ng8QIWW-2Ng8QIWW-2Ng8QIWW-2Ng8QIWW.js +5 -0
- package/devtools/dist/__vite-browser-external-2Ng8QIWW-2Ng8QIWW-2Ng8QIWW-2Ng8QIWW-2Ng8QIWW-2Ng8QIWW-2Ng8QIWW-2Ng8QIWW-2Ng8QIWW-2Ng8QIWW-2Ng8QIWW-2Ng8QIWW-2Ng8QIWW-2Ng8QIWW-2Ng8QIWW-2Ng8QIWW.js.map +1 -0
- package/devtools/dist/__vite-browser-external-2Ng8QIWW-2Ng8QIWW-2Ng8QIWW-2Ng8QIWW-2Ng8QIWW-2Ng8QIWW-2Ng8QIWW-2Ng8QIWW-2Ng8QIWW-2Ng8QIWW-2Ng8QIWW-2Ng8QIWW-2Ng8QIWW-2Ng8QIWW-2Ng8QIWW.js +5 -0
- package/devtools/dist/__vite-browser-external-2Ng8QIWW-2Ng8QIWW-2Ng8QIWW-2Ng8QIWW-2Ng8QIWW-2Ng8QIWW-2Ng8QIWW-2Ng8QIWW-2Ng8QIWW-2Ng8QIWW-2Ng8QIWW-2Ng8QIWW-2Ng8QIWW-2Ng8QIWW-2Ng8QIWW.js.map +1 -0
- package/devtools/dist/__vite-browser-external-2Ng8QIWW-2Ng8QIWW-2Ng8QIWW-2Ng8QIWW-2Ng8QIWW-2Ng8QIWW-2Ng8QIWW-2Ng8QIWW-2Ng8QIWW-2Ng8QIWW-2Ng8QIWW-2Ng8QIWW-2Ng8QIWW-2Ng8QIWW.js +5 -0
- package/devtools/dist/__vite-browser-external-2Ng8QIWW-2Ng8QIWW-2Ng8QIWW-2Ng8QIWW-2Ng8QIWW-2Ng8QIWW-2Ng8QIWW-2Ng8QIWW-2Ng8QIWW-2Ng8QIWW-2Ng8QIWW-2Ng8QIWW-2Ng8QIWW-2Ng8QIWW.js.map +1 -0
- package/devtools/dist/__vite-browser-external-2Ng8QIWW-2Ng8QIWW-2Ng8QIWW-2Ng8QIWW-2Ng8QIWW-2Ng8QIWW-2Ng8QIWW-2Ng8QIWW-2Ng8QIWW-2Ng8QIWW-2Ng8QIWW-2Ng8QIWW-2Ng8QIWW.js +5 -0
- package/devtools/dist/__vite-browser-external-2Ng8QIWW-2Ng8QIWW-2Ng8QIWW-2Ng8QIWW-2Ng8QIWW-2Ng8QIWW-2Ng8QIWW-2Ng8QIWW-2Ng8QIWW-2Ng8QIWW-2Ng8QIWW-2Ng8QIWW-2Ng8QIWW.js.map +1 -0
- package/devtools/dist/__vite-browser-external-2Ng8QIWW-2Ng8QIWW-2Ng8QIWW-2Ng8QIWW-2Ng8QIWW-2Ng8QIWW-2Ng8QIWW-2Ng8QIWW-2Ng8QIWW-2Ng8QIWW-2Ng8QIWW-2Ng8QIWW.js +5 -0
- package/devtools/dist/__vite-browser-external-2Ng8QIWW-2Ng8QIWW-2Ng8QIWW-2Ng8QIWW-2Ng8QIWW-2Ng8QIWW-2Ng8QIWW-2Ng8QIWW-2Ng8QIWW-2Ng8QIWW-2Ng8QIWW-2Ng8QIWW.js.map +1 -0
- package/devtools/dist/__vite-browser-external-2Ng8QIWW-2Ng8QIWW-2Ng8QIWW-2Ng8QIWW-2Ng8QIWW-2Ng8QIWW-2Ng8QIWW-2Ng8QIWW-2Ng8QIWW-2Ng8QIWW-2Ng8QIWW.js +5 -0
- package/devtools/dist/__vite-browser-external-2Ng8QIWW-2Ng8QIWW-2Ng8QIWW-2Ng8QIWW-2Ng8QIWW-2Ng8QIWW-2Ng8QIWW-2Ng8QIWW-2Ng8QIWW-2Ng8QIWW-2Ng8QIWW.js.map +1 -0
- package/devtools/dist/__vite-browser-external-2Ng8QIWW-2Ng8QIWW-2Ng8QIWW-2Ng8QIWW-2Ng8QIWW-2Ng8QIWW-2Ng8QIWW-2Ng8QIWW-2Ng8QIWW-2Ng8QIWW.js +5 -0
- package/devtools/dist/__vite-browser-external-2Ng8QIWW-2Ng8QIWW-2Ng8QIWW-2Ng8QIWW-2Ng8QIWW-2Ng8QIWW-2Ng8QIWW-2Ng8QIWW-2Ng8QIWW-2Ng8QIWW.js.map +1 -0
- package/devtools/dist/__vite-browser-external-2Ng8QIWW-2Ng8QIWW-2Ng8QIWW-2Ng8QIWW-2Ng8QIWW-2Ng8QIWW-2Ng8QIWW-2Ng8QIWW-2Ng8QIWW.js +5 -0
- package/devtools/dist/__vite-browser-external-2Ng8QIWW-2Ng8QIWW-2Ng8QIWW-2Ng8QIWW-2Ng8QIWW-2Ng8QIWW-2Ng8QIWW-2Ng8QIWW-2Ng8QIWW.js.map +1 -0
- package/devtools/dist/__vite-browser-external-2Ng8QIWW-2Ng8QIWW-2Ng8QIWW-2Ng8QIWW-2Ng8QIWW-2Ng8QIWW-2Ng8QIWW-2Ng8QIWW.js +5 -0
- package/devtools/dist/__vite-browser-external-2Ng8QIWW-2Ng8QIWW-2Ng8QIWW-2Ng8QIWW-2Ng8QIWW-2Ng8QIWW-2Ng8QIWW-2Ng8QIWW.js.map +1 -0
- package/devtools/dist/__vite-browser-external-2Ng8QIWW-2Ng8QIWW-2Ng8QIWW-2Ng8QIWW-2Ng8QIWW-2Ng8QIWW-2Ng8QIWW.js +5 -0
- package/devtools/dist/__vite-browser-external-2Ng8QIWW-2Ng8QIWW-2Ng8QIWW-2Ng8QIWW-2Ng8QIWW-2Ng8QIWW-2Ng8QIWW.js.map +1 -0
- package/devtools/dist/__vite-browser-external-2Ng8QIWW-2Ng8QIWW-2Ng8QIWW-2Ng8QIWW-2Ng8QIWW-2Ng8QIWW.js +5 -0
- package/devtools/dist/__vite-browser-external-2Ng8QIWW-2Ng8QIWW-2Ng8QIWW-2Ng8QIWW-2Ng8QIWW-2Ng8QIWW.js.map +1 -0
- package/devtools/dist/__vite-browser-external-2Ng8QIWW-2Ng8QIWW-2Ng8QIWW-2Ng8QIWW-2Ng8QIWW.js +5 -0
- package/devtools/dist/__vite-browser-external-2Ng8QIWW-2Ng8QIWW-2Ng8QIWW-2Ng8QIWW-2Ng8QIWW.js.map +1 -0
- package/devtools/dist/__vite-browser-external-2Ng8QIWW-2Ng8QIWW-2Ng8QIWW-2Ng8QIWW.js +5 -0
- package/devtools/dist/__vite-browser-external-2Ng8QIWW-2Ng8QIWW-2Ng8QIWW-2Ng8QIWW.js.map +1 -0
- package/devtools/dist/panel-entry-Ahej53sX-y0jCvGoU-BGR5GUGQ-B-CAdAd3-DipRT8xT-CSMwqnO2-CHbiC4Qe-BRrWXqYD-CNcJekPg.js +13932 -0
- package/devtools/dist/panel-entry-Ahej53sX-y0jCvGoU-BGR5GUGQ-B-CAdAd3-DipRT8xT-CSMwqnO2-CHbiC4Qe-BRrWXqYD-CNcJekPg.js.map +1 -0
- package/devtools/dist/panel-entry-B0ZWdsQY-DQdquw3J-TpkzsLdj-BGvdXuoS-CzTJvBQl-CAQNpg2W-Bo2gswMb-CAJV5DP5-DZe7oWlk-tDqwNUld.js +13923 -0
- package/devtools/dist/panel-entry-B0ZWdsQY-DQdquw3J-TpkzsLdj-BGvdXuoS-CzTJvBQl-CAQNpg2W-Bo2gswMb-CAJV5DP5-DZe7oWlk-tDqwNUld.js.map +1 -0
- package/devtools/dist/panel-entry-B2MhZ3gp.js +13975 -0
- package/devtools/dist/panel-entry-B2MhZ3gp.js.map +1 -0
- package/devtools/dist/{panel-entry-BZ56bT66-BMyD75mc.js → panel-entry-BZ56bT66-BMyD75mc-BxfcB-io-DLFBg4X2-By57n0cz-DG9FfyPU-tsDeIORn-Brgs9eZh-C1aTwqVx-Bga5v200-D2uIBkta-DFygDOuM-CiZQ0ZWs-CK-Qy7JF-3_LfnrLj-C80pq-Ox-BAydVBl9.js} +4 -4
- package/devtools/dist/panel-entry-BZ56bT66-BMyD75mc-BxfcB-io-DLFBg4X2-By57n0cz-DG9FfyPU-tsDeIORn-Brgs9eZh-C1aTwqVx-Bga5v200-D2uIBkta-DFygDOuM-CiZQ0ZWs-CK-Qy7JF-3_LfnrLj-C80pq-Ox-BAydVBl9.js.map +1 -0
- package/devtools/dist/panel-entry-BaBkkSt6-B3YoMX06.js +13963 -0
- package/devtools/dist/panel-entry-BaBkkSt6-B3YoMX06.js.map +1 -0
- package/devtools/dist/panel-entry-CIG0rw0G-C23A9sjU-CbDuened.js +13957 -0
- package/devtools/dist/panel-entry-CIG0rw0G-C23A9sjU-CbDuened.js.map +1 -0
- package/devtools/dist/panel-entry-CLDrp2P4-BhE5Qmzo-DsrDp_aW-D77vFWhc-D0p-3Vck-juqy3fYf-Dla5eR-o-CER385zO-3kQqst6Z-mEXeTQxs-XDwY_WUW-CcUUttdq-BGVY77mY.js +13914 -0
- package/devtools/dist/panel-entry-CLDrp2P4-BhE5Qmzo-DsrDp_aW-D77vFWhc-D0p-3Vck-juqy3fYf-Dla5eR-o-CER385zO-3kQqst6Z-mEXeTQxs-XDwY_WUW-CcUUttdq-BGVY77mY.js.map +1 -0
- package/devtools/dist/panel-entry-Car1txqz-Cujk5tL9-pWwzfz1C-C_CMO2R5-BtcT6buV-DEh6fx7S-BLtwgJNF-CUuTgFqX.js +13935 -0
- package/devtools/dist/panel-entry-Car1txqz-Cujk5tL9-pWwzfz1C-C_CMO2R5-BtcT6buV-DEh6fx7S-BLtwgJNF-CUuTgFqX.js.map +1 -0
- package/devtools/dist/panel-entry-CdHyTMuR-wqllnGMv-CJFeg7x9-C7mRB5fj-DOgQaLRi-yYTqC4-t-DKUNOg6F-BtruRO_z-BDQrJIZQ-ByHq-LMj-Drlk5OTb-BAoinR4q-CD8VtN79-Cidg8klg-CA9PGoiF.js +13728 -0
- package/devtools/dist/panel-entry-CdHyTMuR-wqllnGMv-CJFeg7x9-C7mRB5fj-DOgQaLRi-yYTqC4-t-DKUNOg6F-BtruRO_z-BDQrJIZQ-ByHq-LMj-Drlk5OTb-BAoinR4q-CD8VtN79-Cidg8klg-CA9PGoiF.js.map +1 -0
- package/devtools/dist/panel-entry-D53S3yYJ-DlRCzJ0q-BnWPSxII-B57eqdYD-CRpb7P7m-CSgQ8r4U-DqjeAoTP.js +13935 -0
- package/devtools/dist/panel-entry-D53S3yYJ-DlRCzJ0q-BnWPSxII-B57eqdYD-CRpb7P7m-CSgQ8r4U-DqjeAoTP.js.map +1 -0
- package/devtools/dist/panel-entry-D6EQIVsV-51lrmGiZ-D4qVD_00-DVb1ySI7-C_RfHhv5-D78tUI3_.js +13945 -0
- package/devtools/dist/panel-entry-D6EQIVsV-51lrmGiZ-D4qVD_00-DVb1ySI7-C_RfHhv5-D78tUI3_.js.map +1 -0
- package/devtools/dist/{panel-entry-Da9n85v7.js → panel-entry-Da9n85v7-C6Gam2oq-DDT89MNj-D9ZqvcEM-Dx--LZLa-BJiXK46m-DGuagWzT-B6evq62k-Cj2QcsAJ-BnxooYWW-D4oxy7MQ-g1-2DT91-DESRmxtW-BFO1EmVx-MWoTuzW5-Cg1SKwet.js} +4 -4
- package/devtools/dist/panel-entry-Da9n85v7-C6Gam2oq-DDT89MNj-D9ZqvcEM-Dx--LZLa-BJiXK46m-DGuagWzT-B6evq62k-Cj2QcsAJ-BnxooYWW-D4oxy7MQ-g1-2DT91-DESRmxtW-BFO1EmVx-MWoTuzW5-Cg1SKwet.js.map +1 -0
- package/devtools/dist/panel-entry-DeLbn5Tk-P7ZtOAd3-DXeez3fy-BFxPfyZi-9L9N-1f8-DzO_hXuM-CWXuuiJk-CI3ufk2T-CP3JflFQ-CLoczwy1-D7ukr7PE-DbMhopxi-BHxIMhDL-CDnadrxB.js +13999 -0
- package/devtools/dist/panel-entry-DeLbn5Tk-P7ZtOAd3-DXeez3fy-BFxPfyZi-9L9N-1f8-DzO_hXuM-CWXuuiJk-CI3ufk2T-CP3JflFQ-CLoczwy1-D7ukr7PE-DbMhopxi-BHxIMhDL-CDnadrxB.js.map +1 -0
- package/devtools/dist/panel-entry-Dh3i-JKj-D7NSYIQS-C_qI61WQ-BfJ0BW16-Df40_Q6R.js +13951 -0
- package/devtools/dist/panel-entry-Dh3i-JKj-D7NSYIQS-C_qI61WQ-BfJ0BW16-Df40_Q6R.js.map +1 -0
- package/devtools/dist/panel-entry-DlWAx2yA-vZadFV4d-DTvClgVl-zRu1NJo4-rPRjTg0e-dbBSWeq3-jx9KYEq_-B3sEcSWI-DeCc9Glr-02P4pIqr-CrzX1Fsr-C1C-Fcde.js +13921 -0
- package/devtools/dist/panel-entry-DlWAx2yA-vZadFV4d-DTvClgVl-zRu1NJo4-rPRjTg0e-dbBSWeq3-jx9KYEq_-B3sEcSWI-DeCc9Glr-02P4pIqr-CrzX1Fsr-C1C-Fcde.js.map +1 -0
- package/devtools/dist/{panel-entry-DzGsV7s--DzGsV7s--DzGsV7s-.js → panel-entry-DzGsV7s--DzGsV7s--DzGsV7s--DzGsV7s--DzGsV7s--DzGsV7s--DzGsV7s--DzGsV7s--DzGsV7s--DzGsV7s--DzGsV7s--DzGsV7s--DzGsV7s--DzGsV7s--DzGsV7s--DzGsV7s--DzGsV7s--DzGsV7s-.js} +1 -1
- package/devtools/dist/panel-entry-DzGsV7s--DzGsV7s--DzGsV7s--DzGsV7s--DzGsV7s--DzGsV7s--DzGsV7s--DzGsV7s--DzGsV7s--DzGsV7s--DzGsV7s--DzGsV7s--DzGsV7s--DzGsV7s--DzGsV7s--DzGsV7s--DzGsV7s--DzGsV7s-.js.map +1 -0
- package/devtools/dist/panel-entry-F_czAD5m-haMWJ-NK-CsYx2f8v-CczoKRsz-CIS8-qZe-F0ks_Y8t-CZBpt1gj-QmZJhT5N-460P-RpL-CKLofb-z-DEXl2ipp.js +13921 -0
- package/devtools/dist/panel-entry-F_czAD5m-haMWJ-NK-CsYx2f8v-CczoKRsz-CIS8-qZe-F0ks_Y8t-CZBpt1gj-QmZJhT5N-460P-RpL-CKLofb-z-DEXl2ipp.js.map +1 -0
- package/devtools/dist/panel-entry-L66PnOAy-CSPip1Cq-DIdgAB36-D56Z9rwz.js +13957 -0
- package/devtools/dist/panel-entry-L66PnOAy-CSPip1Cq-DIdgAB36-D56Z9rwz.js.map +1 -0
- package/devtools/dist/panel-entry.js +449 -193
- package/devtools/dist/panel-entry.js.map +1 -1
- package/docs/roadmap.md +5 -0
- package/index.js +118 -7
- package/package.json +1 -1
- package/devtools/dist/panel-entry-BZ56bT66-BMyD75mc.js.map +0 -1
- package/devtools/dist/panel-entry-Da9n85v7.js.map +0 -1
- package/devtools/dist/panel-entry-DzGsV7s--DzGsV7s--DzGsV7s-.js.map +0 -1
package/docs/roadmap.md
CHANGED
|
@@ -435,6 +435,11 @@ Console filtering updates
|
|
|
435
435
|
|
|
436
436
|
### **🔮 Future Enhancements**
|
|
437
437
|
|
|
438
|
+
#### **Component Management** (Future)
|
|
439
|
+
- [ ] **Component removal notification** - Subscribe to component removal events (currently only addition events are supported)
|
|
440
|
+
- [ ] **Component lifecycle tracking** - Track when components are created and removed
|
|
441
|
+
- **Note:** Component addition notifications are implemented. Removal notifications are deferred for future enhancement (see TODO in `index.js:817`)
|
|
442
|
+
|
|
438
443
|
#### **Advanced Filtering** (Phase 6.5)
|
|
439
444
|
- [ ] **File-level controls** - Panel interface for file overrides
|
|
440
445
|
- [ ] **Search filtering** - Filter logs by message content
|
package/index.js
CHANGED
|
@@ -57,6 +57,7 @@ class JSGLogger {
|
|
|
57
57
|
this.environment = null; // Will be set after config loads
|
|
58
58
|
this.initialized = false;
|
|
59
59
|
this.components = {}; // Auto-discovery getters
|
|
60
|
+
this.componentSubscribers = []; // Subscribers for component change events
|
|
60
61
|
}
|
|
61
62
|
|
|
62
63
|
/**
|
|
@@ -75,6 +76,7 @@ class JSGLogger {
|
|
|
75
76
|
// Make runtime controls available globally in browser for debugging
|
|
76
77
|
if (isBrowser() && typeof window !== 'undefined' && JSGLogger._enhancedLoggers?.controls) {
|
|
77
78
|
window.JSG_Logger = JSGLogger._enhancedLoggers.controls;
|
|
79
|
+
window.__JSG_Logger_Enhanced__ = JSGLogger._enhancedLoggers;
|
|
78
80
|
}
|
|
79
81
|
} else if (hasOptions) {
|
|
80
82
|
// Instance exists but new options provided - reinitialize
|
|
@@ -84,6 +86,7 @@ class JSGLogger {
|
|
|
84
86
|
// (same as getInstanceSync behavior)
|
|
85
87
|
if (isBrowser() && typeof window !== 'undefined' && JSGLogger._enhancedLoggers?.controls) {
|
|
86
88
|
window.JSG_Logger = JSGLogger._enhancedLoggers.controls;
|
|
89
|
+
window.__JSG_Logger_Enhanced__ = JSGLogger._enhancedLoggers;
|
|
87
90
|
}
|
|
88
91
|
}
|
|
89
92
|
|
|
@@ -92,21 +95,62 @@ class JSGLogger {
|
|
|
92
95
|
|
|
93
96
|
/**
|
|
94
97
|
* Get singleton instance synchronously (for environments without async support)
|
|
98
|
+
* Checks window.JSG_Logger first to ensure singleton works across separate bundles
|
|
95
99
|
* @param {Object} options - Initialization options (only used on first call)
|
|
96
100
|
* @returns {Object} Enhanced logger exports with controls API
|
|
97
101
|
*/
|
|
98
102
|
static getInstanceSync(options = {}) {
|
|
99
103
|
const hasOptions = options && Object.keys(options).length > 0;
|
|
104
|
+
|
|
105
|
+
// If options are provided, we need to reinitialize even if global instance exists
|
|
106
|
+
// This ensures config changes (like devtools.enabled) are applied
|
|
107
|
+
if (hasOptions) {
|
|
108
|
+
// Reinitialize with new options - this will update the global references
|
|
109
|
+
if (!JSGLogger._instance) {
|
|
110
|
+
JSGLogger._instance = new JSGLogger();
|
|
111
|
+
}
|
|
112
|
+
JSGLogger._enhancedLoggers = JSGLogger._instance.initSync(options);
|
|
113
|
+
|
|
114
|
+
// Update global references after reinitialization
|
|
115
|
+
if (isBrowser() && typeof window !== 'undefined' && JSGLogger._enhancedLoggers?.controls) {
|
|
116
|
+
window.JSG_Logger = JSGLogger._enhancedLoggers.controls;
|
|
117
|
+
window.__JSG_Logger_Enhanced__ = JSGLogger._enhancedLoggers;
|
|
118
|
+
}
|
|
119
|
+
|
|
120
|
+
return JSGLogger._enhancedLoggers;
|
|
121
|
+
}
|
|
122
|
+
|
|
123
|
+
// No options provided - check window.JSG_Logger first to ensure singleton works across bundles
|
|
124
|
+
// This is critical when devtools bundle loads separately from main app
|
|
125
|
+
if (isBrowser() && typeof window !== 'undefined' && window.JSG_Logger) {
|
|
126
|
+
// If enhanced loggers reference exists, use it (preferred)
|
|
127
|
+
if (window.__JSG_Logger_Enhanced__) {
|
|
128
|
+
return window.__JSG_Logger_Enhanced__;
|
|
129
|
+
}
|
|
130
|
+
// Fallback: reconstruct enhanced loggers from controls object
|
|
131
|
+
// This handles cases where __JSG_Logger_Enhanced__ wasn't set
|
|
132
|
+
const globalControls = window.JSG_Logger;
|
|
133
|
+
return {
|
|
134
|
+
...globalControls,
|
|
135
|
+
controls: globalControls,
|
|
136
|
+
getComponent: globalControls.getComponent,
|
|
137
|
+
getInstanceSync: JSGLogger.getInstanceSync.bind(JSGLogger),
|
|
138
|
+
getInstance: JSGLogger.getInstance.bind(JSGLogger),
|
|
139
|
+
logPerformance: JSGLogger.logPerformance.bind(JSGLogger),
|
|
140
|
+
JSGLogger: JSGLogger
|
|
141
|
+
};
|
|
142
|
+
}
|
|
100
143
|
|
|
144
|
+
// No options and no global instance - first time initialization
|
|
101
145
|
if (!JSGLogger._instance) {
|
|
102
|
-
// First time initialization
|
|
103
146
|
JSGLogger._instance = new JSGLogger();
|
|
104
147
|
JSGLogger._enhancedLoggers = JSGLogger._instance.initSync(options);
|
|
105
|
-
|
|
106
|
-
//
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
148
|
+
|
|
149
|
+
// Make runtime controls available globally in browser for debugging
|
|
150
|
+
if (isBrowser() && typeof window !== 'undefined' && JSGLogger._enhancedLoggers?.controls) {
|
|
151
|
+
window.JSG_Logger = JSGLogger._enhancedLoggers.controls;
|
|
152
|
+
window.__JSG_Logger_Enhanced__ = JSGLogger._enhancedLoggers;
|
|
153
|
+
}
|
|
110
154
|
}
|
|
111
155
|
|
|
112
156
|
return JSGLogger._enhancedLoggers;
|
|
@@ -265,6 +309,12 @@ class JSGLogger {
|
|
|
265
309
|
|
|
266
310
|
// Create loggers for all available components using default config
|
|
267
311
|
const components = configManager.getAvailableComponents();
|
|
312
|
+
|
|
313
|
+
// Debug: Log components being created during initialization
|
|
314
|
+
// Note: Using console.log because this.loggers is empty at this point
|
|
315
|
+
if (components.length > 0) {
|
|
316
|
+
console.log(`[JSG-LOGGER] Creating ${components.length} loggers during initSync:`, components);
|
|
317
|
+
}
|
|
268
318
|
|
|
269
319
|
components.forEach(componentName => {
|
|
270
320
|
// Use original createLogger to bypass utility method caching
|
|
@@ -282,6 +332,19 @@ class JSGLogger {
|
|
|
282
332
|
|
|
283
333
|
// Create auto-discovery getters (eager)
|
|
284
334
|
this._createAutoDiscoveryGetters();
|
|
335
|
+
|
|
336
|
+
// Notify component subscribers after reinitialization (if components changed)
|
|
337
|
+
// This ensures panel sees components created during reinit, not just via getComponent()
|
|
338
|
+
if (this.componentSubscribers.length > 0) {
|
|
339
|
+
const currentComponents = Object.keys(this.loggers);
|
|
340
|
+
this.componentSubscribers.forEach(callback => {
|
|
341
|
+
try {
|
|
342
|
+
callback(currentComponents);
|
|
343
|
+
} catch (error) {
|
|
344
|
+
console.error('Component subscriber error:', error);
|
|
345
|
+
}
|
|
346
|
+
});
|
|
347
|
+
}
|
|
285
348
|
|
|
286
349
|
this.initialized = true;
|
|
287
350
|
|
|
@@ -494,7 +557,25 @@ class JSGLogger {
|
|
|
494
557
|
},
|
|
495
558
|
|
|
496
559
|
// Component controls
|
|
497
|
-
listComponents: () =>
|
|
560
|
+
listComponents: () => Object.keys(this.loggers),
|
|
561
|
+
subscribeToComponents: (callback) => {
|
|
562
|
+
this.componentSubscribers.push(callback);
|
|
563
|
+
// Immediately call callback with current component list (don't wait for changes)
|
|
564
|
+
// This ensures panel sees components created during reinitialization
|
|
565
|
+
const currentComponents = Object.keys(this.loggers);
|
|
566
|
+
try {
|
|
567
|
+
callback(currentComponents);
|
|
568
|
+
} catch (error) {
|
|
569
|
+
console.error('Component subscriber error (initial call):', error);
|
|
570
|
+
}
|
|
571
|
+
// Return unsubscribe function
|
|
572
|
+
return () => {
|
|
573
|
+
const index = this.componentSubscribers.indexOf(callback);
|
|
574
|
+
if (index > -1) {
|
|
575
|
+
this.componentSubscribers.splice(index, 1);
|
|
576
|
+
}
|
|
577
|
+
};
|
|
578
|
+
},
|
|
498
579
|
enableDebugMode: () => {
|
|
499
580
|
Object.keys(this.loggers).forEach(component => {
|
|
500
581
|
if (this.loggers[component]) {
|
|
@@ -801,6 +882,26 @@ class JSGLogger {
|
|
|
801
882
|
if (camelName !== componentName) {
|
|
802
883
|
this.components[camelName] = () => this.getComponent(componentName);
|
|
803
884
|
}
|
|
885
|
+
|
|
886
|
+
// Notify component subscribers of the change (emit on every add, not deduplicated)
|
|
887
|
+
// TODO: Add component removal notification support (future enhancement)
|
|
888
|
+
const currentComponents = Object.keys(this.loggers);
|
|
889
|
+
if (this.componentSubscribers.length > 0) {
|
|
890
|
+
if (this.loggers.core) {
|
|
891
|
+
this.loggers.core.debug(`Notifying ${this.componentSubscribers.length} subscribers of component change`, {
|
|
892
|
+
component: componentName,
|
|
893
|
+
totalComponents: currentComponents.length,
|
|
894
|
+
components: currentComponents
|
|
895
|
+
});
|
|
896
|
+
}
|
|
897
|
+
}
|
|
898
|
+
this.componentSubscribers.forEach(callback => {
|
|
899
|
+
try {
|
|
900
|
+
callback(currentComponents);
|
|
901
|
+
} catch (error) {
|
|
902
|
+
console.error('Component subscriber error:', error);
|
|
903
|
+
}
|
|
904
|
+
});
|
|
804
905
|
}
|
|
805
906
|
|
|
806
907
|
return this.loggers[componentName];
|
|
@@ -858,10 +959,18 @@ class JSGLogger {
|
|
|
858
959
|
|
|
859
960
|
/**
|
|
860
961
|
* Get singleton controls without triggering initialization
|
|
962
|
+
* Checks window.JSG_Logger first to ensure singleton works across separate bundles
|
|
861
963
|
* Returns the controls object from the current singleton instance if it exists
|
|
862
964
|
* @returns {Object|null} Controls object or null if singleton not initialized
|
|
863
965
|
*/
|
|
864
966
|
static getControls() {
|
|
967
|
+
// Check window.JSG_Logger first to ensure singleton works across bundles
|
|
968
|
+
// This is critical when devtools bundle loads separately from main app
|
|
969
|
+
if (isBrowser() && typeof window !== 'undefined' && window.JSG_Logger) {
|
|
970
|
+
return window.JSG_Logger;
|
|
971
|
+
}
|
|
972
|
+
|
|
973
|
+
// Fall back to local instance if global doesn't exist
|
|
865
974
|
return JSGLogger._enhancedLoggers?.controls || null;
|
|
866
975
|
}
|
|
867
976
|
}
|
|
@@ -871,8 +980,10 @@ class JSGLogger {
|
|
|
871
980
|
const enhancedLoggers = JSGLogger.getInstanceSync();
|
|
872
981
|
|
|
873
982
|
// Make runtime controls available globally in browser for debugging
|
|
983
|
+
// Also store enhanced loggers reference so getInstanceSync() can access it across bundles
|
|
874
984
|
if (isBrowser() && typeof window !== 'undefined') {
|
|
875
985
|
window.JSG_Logger = enhancedLoggers.controls;
|
|
986
|
+
window.__JSG_Logger_Enhanced__ = enhancedLoggers;
|
|
876
987
|
}
|
|
877
988
|
|
|
878
989
|
// Add static methods to the enhanced loggers for convenience
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@crimsonsunset/jsg-logger",
|
|
3
|
-
"version": "1.7.
|
|
3
|
+
"version": "1.7.14",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"description": "Multi-environment logger with smart detection, file-level overrides, and beautiful console formatting. Test it live: https://logger.joesangiorgio.com/",
|
|
6
6
|
"main": "index.js",
|