11/**
2- * logline v1.0.4 (https://github.com/latel/logline#readme)
2+ * logline v1.0.5 (https://github.com/latel/logline#readme)
33 * Copyright 2017, latel <latelx64@icloud.com>
44 * MIT license
55 */
1010 ( global . Logline = factory ( ) ) ;
1111} ( this , ( function ( ) { 'use strict' ;
1212
13- // throw out Errors, with global prefix 'Logline: ' ahead of err.message
14- function throwError ( errMessage ) {
15- throw new Error ( 'Logline: ' + errMessage ) ;
16- }
13+ var _typeof = typeof Symbol === "function" && typeof Symbol . iterator === "symbol" ? function ( obj ) {
14+ return typeof obj ;
15+ } : function ( obj ) {
16+ return obj && typeof Symbol === "function" && obj . constructor === Symbol && obj !== Symbol . prototype ? "symbol" : typeof obj ;
17+ } ;
18+
19+
20+
21+
22+
23+
24+
25+
26+
27+
1728
1829var classCallCheck = function ( instance , Constructor ) {
1930 if ( ! ( instance instanceof Constructor ) ) {
@@ -104,6 +115,52 @@ var possibleConstructorReturn = function (self, call) {
104115 return call && ( typeof call === "object" || typeof call === "function" ) ? call : self ;
105116} ;
106117
118+ var HAS_CONSOLE = window . console ;
119+ var LEVEL_CONSOLE_MAP = {
120+ INFO : 'log' ,
121+ WARN : 'warn' ,
122+ ERROR : 'error' ,
123+ CRITICAL : 'error'
124+ } ;
125+ var LEVEL_STYLE_MAP = {
126+ INFO : 'color:#FFF;background:gray' ,
127+ WARN : 'color:#FFF;background:orange' ,
128+ ERROR : 'color:#FFF;background:red' ,
129+ CRITICAL : 'color:#FFF;background:black'
130+ } ;
131+
132+ // throw out Errors, with global prefix 'Logline: ' ahead of err.message
133+ function throwError ( errMessage ) {
134+ throw new Error ( 'Logline: ' + errMessage ) ;
135+ }
136+
137+ // print debug info in develper's console
138+ // if WechatFE/vConsole is detected, will not use %c feature, as it is not well supported
139+ function debug ( namespace , level , descriptor , data ) {
140+ if ( HAS_CONSOLE ) {
141+ window . console [ LEVEL_CONSOLE_MAP [ level . toUpperCase ( ) ] || LEVEL_CONSOLE_MAP . INFO ] ( '%c %s %s %c %s. ' + ( ( typeof data === 'undefined' ? 'undefined' : _typeof ( data ) ) === 'object' ? '%O' : '%s' ) , LEVEL_STYLE_MAP [ level . toUpperCase ( ) ] || LEVEL_STYLE_MAP . INFO , level , namespace , 'color:initial' , descriptor , data || '' ) ;
142+ }
143+ }
144+
145+ // filter any function in a object
146+ function filterFunction ( obj ) {
147+ var newObj = { } ,
148+ i ;
149+
150+ if ( ( typeof obj === 'undefined' ? 'undefined' : _typeof ( obj ) ) !== 'object' ) {
151+ return obj ;
152+ }
153+
154+ for ( i in obj ) {
155+ if ( obj . hasOwnProperty ( i ) ) {
156+ if ( typeof obj [ i ] !== 'function' ) {
157+ newObj [ i ] = filterFunction ( obj [ i ] ) ;
158+ }
159+ }
160+ }
161+ return newObj ;
162+ }
163+
107164/**
108165 * Logline Interface
109166 * @class Interface
@@ -118,7 +175,7 @@ var Interface = function () {
118175 function Interface ( namespace ) {
119176 classCallCheck ( this , Interface ) ;
120177
121- this . _namesapce = namespace ;
178+ this . _namespace = namespace ;
122179 }
123180
124181 /**
@@ -392,25 +449,28 @@ var IndexedDBLogger = function (_LoggerInterface) {
392449
393450 if ( IndexedDBLogger . status !== Interface . STATUS . INITED ) {
394451 IndexedDBLogger . _pool . push ( function ( ) {
395- _this2 . _record ( level , descriptor , data ) ;
452+ return _this2 . _record ( level , descriptor , data ) ;
396453 } ) ;
397454 if ( IndexedDBLogger . status !== Interface . STATUS . INITING ) {
398455 IndexedDBLogger . init ( ) ;
399456 }
400457 return ;
401458 }
402459
460+ debug ( this . _namespace , level , descriptor , data ) ;
403461 var transaction = IndexedDBLogger . db . transaction ( [ 'logs' ] , IDBTransaction . READ_WRITE || 'readwrite' ) ;
404462 transaction . onerror = function ( event ) {
405463 return throwError ( event . target . error ) ;
406464 } ;
407465
408466 var store = transaction . objectStore ( 'logs' ) ;
467+ // should not contains any function in data
468+ // otherwise 'DOMException: Failed to execute 'add' on 'IDBObjectStore': An object could not be cloned.' will be thrown
409469 var request = store . add ( {
410470 time : Date . now ( ) ,
411- namespace : this . _namesapce ,
471+ namespace : this . _namespace ,
412472 descriptor : descriptor ,
413- data : data
473+ data : filterFunction ( data )
414474 } ) ;
415475
416476 request . onerror = function ( event ) {
@@ -481,10 +541,9 @@ var IndexedDBLogger = function (_LoggerInterface) {
481541 key : 'get' ,
482542 value : function get$$1 ( from , to , readyFn ) {
483543 if ( IndexedDBLogger . status !== get ( IndexedDBLogger . __proto__ || Object . getPrototypeOf ( IndexedDBLogger ) , 'STATUS' , this ) . INITED ) {
484- IndexedDBLogger . _pool . push ( function ( ) {
485- IndexedDBLogger . get ( from , to , readyFn ) ;
544+ return IndexedDBLogger . _pool . push ( function ( ) {
545+ return IndexedDBLogger . get ( from , to , readyFn ) ;
486546 } ) ;
487- return ;
488547 }
489548
490549 from = Interface . transTimeFormat ( from ) ;
@@ -529,10 +588,9 @@ var IndexedDBLogger = function (_LoggerInterface) {
529588 key : 'keep' ,
530589 value : function keep ( daysToMaintain ) {
531590 if ( IndexedDBLogger . status !== get ( IndexedDBLogger . __proto__ || Object . getPrototypeOf ( IndexedDBLogger ) , 'STATUS' , this ) . INITED ) {
532- IndexedDBLogger . _pool . push ( function ( ) {
533- IndexedDBLogger . keep ( daysToMaintain ) ;
591+ return IndexedDBLogger . _pool . push ( function ( ) {
592+ return IndexedDBLogger . keep ( daysToMaintain ) ;
534593 } ) ;
535- return ;
536594 }
537595
538596 var store = IndexedDBLogger . _getTransactionStore ( IDBTransaction . READ_WRITE ) ;
@@ -541,18 +599,20 @@ var IndexedDBLogger = function (_LoggerInterface) {
541599 return throwError ( event . target . error ) ;
542600 } ;
543601 } else {
544- var range = IDBKeyRange . upperBound ( Date . now ( ) - ( daysToMaintain || 2 ) * 24 * 3600 * 1000 , true ) ;
545- var _request = store . openCursor ( range ) ;
546- _request . onsuccess = function ( event ) {
547- var cursor = event . target . result ;
548- if ( cursor ) {
549- store . delete ( cursor . primaryKey ) ;
550- cursor . continue ( ) ;
551- }
552- } ;
553- _request . onerror = function ( event ) {
554- return throwError ( 'unable to locate logs earlier than ' + daysToMaintain + 'd.' ) ;
555- } ;
602+ ( function ( ) {
603+ var range = Date . now ( ) - ( daysToMaintain || 2 ) * 24 * 3600 * 1000 ;
604+ var request = store . openCursor ( ) ;
605+ request . onsuccess = function ( event ) {
606+ var cursor = event . target . result ;
607+ if ( cursor && cursor . value . time < range ) {
608+ store . delete ( cursor . primaryKey ) ;
609+ cursor . continue ( ) ;
610+ }
611+ } ;
612+ request . onerror = function ( event ) {
613+ return throwError ( 'unable to locate logs earlier than ' + daysToMaintain + 'd.' ) ;
614+ } ;
615+ } ) ( ) ;
556616 }
557617 }
558618
@@ -566,10 +626,9 @@ var IndexedDBLogger = function (_LoggerInterface) {
566626 key : 'clean' ,
567627 value : function clean ( ) {
568628 if ( IndexedDBLogger . status !== get ( IndexedDBLogger . __proto__ || Object . getPrototypeOf ( IndexedDBLogger ) , 'STATUS' , this ) . INITED ) {
569- IndexedDBLogger . _pool . push ( function ( ) {
570- IndexedDBLogger . clean ( ) ;
629+ return IndexedDBLogger . _pool . push ( function ( ) {
630+ return IndexedDBLogger . clean ( ) ;
571631 } ) ;
572- return ;
573632 }
574633
575634 // database can be removed only after all connections are closed
@@ -604,7 +663,7 @@ var IndexedDBLogger = function (_LoggerInterface) {
604663 } ;
605664 return transaction . objectStore ( 'logs' ) ;
606665 } else {
607- throwError ( 'log database is not created or connections is closed, considering init it.' ) ;
666+ throwError ( 'log database is not created or connections are closed, considering init it.' ) ;
608667 }
609668 }
610669
@@ -661,8 +720,9 @@ var LocalStorageLogger = function (_LoggerInterface) {
661720 key : '_record' ,
662721 value : function _record ( level , descriptor , data ) {
663722 var logs = window . localStorage . getItem ( LocalStorageLogger . _database ) ? JSON . parse ( window . localStorage . getItem ( LocalStorageLogger . _database ) ) : [ ] ;
664- logs . push ( [ Date . now ( ) , this . _namesapce , level , descriptor , data ] ) ;
723+ logs . push ( [ Date . now ( ) , this . _namespace , level , descriptor , data ] ) ;
665724 try {
725+ debug ( this . _namespace , level , descriptor , data ) ;
666726 window . localStorage . setItem ( LocalStorageLogger . _database , JSON . stringify ( logs ) ) ;
667727 } catch ( e ) {
668728 throwError ( 'error inserting record' ) ;
@@ -809,7 +869,7 @@ var WebsqlLogger = function (_LoggerInterface) {
809869
810870 if ( WebsqlLogger . status !== Interface . STATUS . INITED ) {
811871 WebsqlLogger . _pool . push ( function ( ) {
812- _this2 . _record ( level , descriptor , data ) ;
872+ return _this2 . _record ( level , descriptor , data ) ;
813873 } ) ;
814874 if ( WebsqlLogger . status !== Interface . STATUS . INITING ) {
815875 WebsqlLogger . init ( ) ;
@@ -818,8 +878,9 @@ var WebsqlLogger = function (_LoggerInterface) {
818878 }
819879
820880 try {
881+ debug ( this . _namespace , level , descriptor , data ) ;
821882 WebsqlLogger . _db . transaction ( function ( tx ) {
822- tx . executeSql ( 'INSERT INTO logs (time, namespace, level, descriptor, data) VALUES(?, ?, ?, ? ,?)' , [ Date . now ( ) , _this2 . _namesapce , level , descriptor , data === undefined || data === '' ? '' : JSON . stringify ( data ) || '' ] , function ( ) { /* empty func */ } , function ( tx , e ) {
883+ tx . executeSql ( 'INSERT INTO logs (time, namespace, level, descriptor, data) VALUES(?, ?, ?, ? ,?)' , [ Date . now ( ) , _this2 . _namespace , level , descriptor , data === undefined || data === '' ? '' : JSON . stringify ( data ) || '' ] , function ( ) { /* empty func */ } , function ( tx , e ) {
823884 throw e . message ;
824885 } ) ;
825886 } ) ;
@@ -881,10 +942,9 @@ var WebsqlLogger = function (_LoggerInterface) {
881942 key : 'get' ,
882943 value : function get$$1 ( from , to , readyFn ) {
883944 if ( WebsqlLogger . status !== get ( WebsqlLogger . __proto__ || Object . getPrototypeOf ( WebsqlLogger ) , 'STATUS' , this ) . INITED ) {
884- WebsqlLogger . _pool . push ( function ( ) {
885- WebsqlLogger . get ( from , to , readyFn ) ;
945+ return WebsqlLogger . _pool . push ( function ( ) {
946+ return WebsqlLogger . get ( from , to , readyFn ) ;
886947 } ) ;
887- return ;
888948 }
889949
890950 from = Interface . transTimeFormat ( from ) ;
@@ -933,10 +993,9 @@ var WebsqlLogger = function (_LoggerInterface) {
933993 key : 'keep' ,
934994 value : function keep ( daysToMaintain ) {
935995 if ( WebsqlLogger . status !== get ( WebsqlLogger . __proto__ || Object . getPrototypeOf ( WebsqlLogger ) , 'STATUS' , this ) . INITED ) {
936- WebsqlLogger . _pool . push ( function ( ) {
937- WebsqlLogger . keep ( daysToMaintain ) ;
996+ return WebsqlLogger . _pool . push ( function ( ) {
997+ return WebsqlLogger . keep ( daysToMaintain ) ;
938998 } ) ;
939- return ;
940999 }
9411000
9421001 try {
@@ -967,7 +1026,7 @@ var WebsqlLogger = function (_LoggerInterface) {
9671026 value : function clean ( ) {
9681027 if ( WebsqlLogger . status !== get ( WebsqlLogger . __proto__ || Object . getPrototypeOf ( WebsqlLogger ) , 'STATUS' , this ) . INITED ) {
9691028 WebsqlLogger . _pool . push ( function ( ) {
970- WebsqlLogger . clean ( ) ;
1029+ return WebsqlLogger . clean ( ) ;
9711030 } ) ;
9721031 return ;
9731032 }
0 commit comments