@@ -17,7 +17,6 @@ function tryStringify(arg) {
1717 }
1818}
1919
20- const formatRegExp = / % [ s d j % ] / g;
2120exports . format = function ( f ) {
2221 if ( typeof f !== 'string' ) {
2322 const objects = new Array ( arguments . length ) ;
@@ -27,30 +26,56 @@ exports.format = function(f) {
2726 return objects . join ( ' ' ) ;
2827 }
2928
30- if ( arguments . length === 1 ) return f ;
31-
32- const len = arguments . length ;
33- const args = new Array ( len ) ;
34- var i ;
35- for ( i = 0 ; i < len ; i ++ ) {
36- args [ i ] = arguments [ i ] ;
37- }
38-
39- i = 1 ;
40- var str = f . replace ( formatRegExp , function ( x ) {
41- if ( x === '%%' ) return '%' ;
42- if ( i >= len ) return x ;
43- switch ( x ) {
44- case '%s' : return String ( args [ i ++ ] ) ;
45- case '%d' : return Number ( args [ i ++ ] ) ;
46- case '%j' : return tryStringify ( args [ i ++ ] ) ;
47- // falls through
48- default :
49- return x ;
29+ var argLen = arguments . length ;
30+
31+ if ( argLen === 1 ) return f ;
32+
33+ var str = '' ;
34+ var a = 1 ;
35+ var lastPos = 0 ;
36+ for ( var i = 0 ; i < f . length ; ) {
37+ if ( f . charCodeAt ( i ) === 37 /*'%'*/ && i + 1 < f . length ) {
38+ switch ( f . charCodeAt ( i + 1 ) ) {
39+ case 100 : // 'd'
40+ if ( a >= argLen )
41+ break ;
42+ if ( lastPos < i )
43+ str += f . slice ( lastPos , i ) ;
44+ str += Number ( arguments [ a ++ ] ) ;
45+ lastPos = i = i + 2 ;
46+ continue ;
47+ case 106 : // 'j'
48+ if ( a >= argLen )
49+ break ;
50+ if ( lastPos < i )
51+ str += f . slice ( lastPos , i ) ;
52+ str += tryStringify ( arguments [ a ++ ] ) ;
53+ lastPos = i = i + 2 ;
54+ continue ;
55+ case 115 : // 's'
56+ if ( a >= argLen )
57+ break ;
58+ if ( lastPos < i )
59+ str += f . slice ( lastPos , i ) ;
60+ str += String ( arguments [ a ++ ] ) ;
61+ lastPos = i = i + 2 ;
62+ continue ;
63+ case 37 : // '%'
64+ if ( lastPos < i )
65+ str += f . slice ( lastPos , i ) ;
66+ str += '%' ;
67+ lastPos = i = i + 2 ;
68+ continue ;
69+ }
5070 }
51- } ) ;
52- while ( i < len ) {
53- const x = args [ i ++ ] ;
71+ ++ i ;
72+ }
73+ if ( lastPos === 0 )
74+ str = f ;
75+ else if ( lastPos < f . length )
76+ str += f . slice ( lastPos ) ;
77+ while ( a < argLen ) {
78+ const x = arguments [ a ++ ] ;
5479 if ( x === null || ( typeof x !== 'object' && typeof x !== 'symbol' ) ) {
5580 str += ' ' + x ;
5681 } else {
0 commit comments