2019-08-02 09:10:58 +03:00
"use strict" ;
Object . defineProperty ( exports , "__esModule" , { value : true } ) ;
var _permanentCensorErrors = false ;
var _censorErrors = false ;
var LogLevels = { debug : 1 , "default" : 2 , info : 2 , warn : 3 , error : 4 , off : 5 } ;
var LogLevel = LogLevels [ "default" ] ;
var _version _1 = require ( "./_version" ) ;
var _globalLogger = null ;
function _checkNormalize ( ) {
try {
var missing _1 = [ ] ;
// Make sure all forms of normalization are supported
[ "NFD" , "NFC" , "NFKD" , "NFKC" ] . forEach ( function ( form ) {
try {
if ( "test" . normalize ( form ) !== "test" ) {
throw new Error ( "bad normalize" ) ;
}
;
}
catch ( error ) {
missing _1 . push ( form ) ;
}
} ) ;
if ( missing _1 . length ) {
throw new Error ( "missing " + missing _1 . join ( ", " ) ) ;
}
if ( String . fromCharCode ( 0xe9 ) . normalize ( "NFD" ) !== String . fromCharCode ( 0x65 , 0x0301 ) ) {
throw new Error ( "broken implementation" ) ;
}
}
catch ( error ) {
return error . message ;
}
return null ;
}
var _normalizeError = _checkNormalize ( ) ;
var Logger = /** @class */ ( function ( ) {
function Logger ( version ) {
Object . defineProperty ( this , "version" , {
enumerable : true ,
value : version ,
writable : false
} ) ;
}
Logger . prototype . setLogLevel = function ( logLevel ) {
var level = LogLevels [ logLevel ] ;
if ( level == null ) {
2019-11-20 12:57:38 +03:00
this . warn ( "invalid log level - " + logLevel ) ;
2019-08-02 09:10:58 +03:00
return ;
}
LogLevel = level ;
} ;
Logger . prototype . _log = function ( logLevel , args ) {
if ( LogLevel > LogLevels [ logLevel ] ) {
return ;
}
console . log . apply ( console , args ) ;
} ;
Logger . prototype . debug = function ( ) {
var args = [ ] ;
for ( var _i = 0 ; _i < arguments . length ; _i ++ ) {
args [ _i ] = arguments [ _i ] ;
}
this . _log ( Logger . levels . DEBUG , args ) ;
} ;
Logger . prototype . info = function ( ) {
var args = [ ] ;
for ( var _i = 0 ; _i < arguments . length ; _i ++ ) {
args [ _i ] = arguments [ _i ] ;
}
this . _log ( Logger . levels . INFO , args ) ;
} ;
Logger . prototype . warn = function ( ) {
var args = [ ] ;
for ( var _i = 0 ; _i < arguments . length ; _i ++ ) {
args [ _i ] = arguments [ _i ] ;
}
this . _log ( Logger . levels . WARNING , args ) ;
} ;
Logger . prototype . makeError = function ( message , code , params ) {
if ( _censorErrors ) {
return new Error ( "unknown error" ) ;
}
if ( ! code ) {
code = Logger . errors . UNKNOWN _ERROR ;
}
if ( ! params ) {
params = { } ;
}
var messageDetails = [ ] ;
Object . keys ( params ) . forEach ( function ( key ) {
try {
messageDetails . push ( key + "=" + JSON . stringify ( params [ key ] ) ) ;
}
catch ( error ) {
messageDetails . push ( key + "=" + JSON . stringify ( params [ key ] . toString ( ) ) ) ;
}
} ) ;
messageDetails . push ( "version=" + this . version ) ;
var reason = message ;
if ( messageDetails . length ) {
message += " (" + messageDetails . join ( ", " ) + ")" ;
}
// @TODO: Any??
var error = new Error ( message ) ;
error . reason = reason ;
error . code = code ;
Object . keys ( params ) . forEach ( function ( key ) {
error [ key ] = params [ key ] ;
} ) ;
return error ;
} ;
Logger . prototype . throwError = function ( message , code , params ) {
throw this . makeError ( message , code , params ) ;
} ;
Logger . prototype . throwArgumentError = function ( message , name , value ) {
return this . throwError ( message , Logger . errors . INVALID _ARGUMENT , {
argument : name ,
value : value
} ) ;
} ;
Logger . prototype . checkNormalize = function ( message ) {
if ( message == null ) {
message = "platform missing String.prototype.normalize" ;
}
if ( _normalizeError ) {
this . throwError ( "platform missing String.prototype.normalize" , Logger . errors . UNSUPPORTED _OPERATION , {
operation : "String.prototype.normalize" , form : _normalizeError
} ) ;
}
} ;
Logger . prototype . checkSafeUint53 = function ( value , message ) {
if ( typeof ( value ) !== "number" ) {
return ;
}
if ( message == null ) {
message = "value not safe" ;
}
if ( value < 0 || value >= 0x1fffffffffffff ) {
this . throwError ( message , Logger . errors . NUMERIC _FAULT , {
operation : "checkSafeInteger" ,
fault : "out-of-safe-range" ,
value : value
} ) ;
}
if ( value % 1 ) {
this . throwError ( message , Logger . errors . NUMERIC _FAULT , {
operation : "checkSafeInteger" ,
fault : "non-integer" ,
value : value
} ) ;
}
} ;
Logger . prototype . checkArgumentCount = function ( count , expectedCount , message ) {
if ( message ) {
message = ": " + message ;
}
else {
message = "" ;
}
if ( count < expectedCount ) {
this . throwError ( "missing argument" + message , Logger . errors . MISSING _ARGUMENT , {
count : count ,
expectedCount : expectedCount
} ) ;
}
if ( count > expectedCount ) {
this . throwError ( "too many arguments" + message , Logger . errors . UNEXPECTED _ARGUMENT , {
count : count ,
expectedCount : expectedCount
} ) ;
}
} ;
Logger . prototype . checkNew = function ( target , kind ) {
if ( target === Object || target == null ) {
this . throwError ( "missing new" , Logger . errors . MISSING _NEW , { name : kind . name } ) ;
}
} ;
Logger . prototype . checkAbstract = function ( target , kind ) {
if ( target === kind ) {
this . throwError ( "cannot instantiate abstract class " + JSON . stringify ( kind . name ) + " directly; use a sub-class" , Logger . errors . UNSUPPORTED _OPERATION , { name : target . name , operation : "new" } ) ;
}
else if ( target === Object || target == null ) {
this . throwError ( "missing new" , Logger . errors . MISSING _NEW , { name : kind . name } ) ;
}
} ;
Logger . globalLogger = function ( ) {
if ( ! _globalLogger ) {
_globalLogger = new Logger ( _version _1 . version ) ;
}
return _globalLogger ;
} ;
Logger . setCensorship = function ( censorship , permanent ) {
if ( _permanentCensorErrors ) {
if ( ! censorship ) {
return ;
}
this . globalLogger ( ) . throwError ( "error censorship permanent" , Logger . errors . UNSUPPORTED _OPERATION , {
operation : "setCensorship"
} ) ;
}
_censorErrors = ! ! censorship ;
_permanentCensorErrors = ! ! permanent ;
} ;
Logger . errors = {
///////////////////
// Generic Errors
// Unknown Error
UNKNOWN _ERROR : "UNKNOWN_ERROR" ,
// Not Implemented
NOT _IMPLEMENTED : "NOT_IMPLEMENTED" ,
// Unsupported Operation
// - operation
UNSUPPORTED _OPERATION : "UNSUPPORTED_OPERATION" ,
// Network Error (i.e. Ethereum Network, such as an invalid chain ID)
NETWORK _ERROR : "NETWORK_ERROR" ,
// Some sort of bad response from the server
SERVER _ERROR : "SERVER_ERROR" ,
// Timeout
TIMEOUT : "TIMEOUT" ,
///////////////////
// Operational Errors
// Buffer Overrun
BUFFER _OVERRUN : "BUFFER_OVERRUN" ,
// Numeric Fault
// - operation: the operation being executed
// - fault: the reason this faulted
NUMERIC _FAULT : "NUMERIC_FAULT" ,
///////////////////
// Argument Errors
// Missing new operator to an object
// - name: The name of the class
MISSING _NEW : "MISSING_NEW" ,
// Invalid argument (e.g. value is incompatible with type) to a function:
// - argument: The argument name that was invalid
// - value: The value of the argument
INVALID _ARGUMENT : "INVALID_ARGUMENT" ,
// Missing argument to a function:
// - count: The number of arguments received
// - expectedCount: The number of arguments expected
MISSING _ARGUMENT : "MISSING_ARGUMENT" ,
// Too many arguments
// - count: The number of arguments received
// - expectedCount: The number of arguments expected
UNEXPECTED _ARGUMENT : "UNEXPECTED_ARGUMENT" ,
///////////////////
// Blockchain Errors
// Call exception
// - transaction: the transaction
// - address?: the contract address
// - args?: The arguments passed into the function
// - method?: The Solidity method signature
// - errorSignature?: The EIP848 error signature
// - errorArgs?: The EIP848 error parameters
// - reason: The reason (only for EIP848 "Error(string)")
CALL _EXCEPTION : "CALL_EXCEPTION" ,
// Insufficien funds (< value + gasLimit * gasPrice)
// - transaction: the transaction attempted
INSUFFICIENT _FUNDS : "INSUFFICIENT_FUNDS" ,
// Nonce has already been used
// - transaction: the transaction attempted
NONCE _EXPIRED : "NONCE_EXPIRED" ,
// The replacement fee for the transaction is too low
// - transaction: the transaction attempted
REPLACEMENT _UNDERPRICED : "REPLACEMENT_UNDERPRICED" ,
// The gas limit could not be estimated
// - transaction: the transaction passed to estimateGas
UNPREDICTABLE _GAS _LIMIT : "UNPREDICTABLE_GAS_LIMIT" ,
} ;
Logger . levels = {
DEBUG : "DEBUG" ,
INFO : "INFO" ,
WARNING : "WARNING" ,
ERROR : "ERROR" ,
OFF : "OFF"
} ;
return Logger ;
} ( ) ) ;
exports . Logger = Logger ;