@@ -46,38 +46,54 @@ const FS = ({
4646} ;
4747
4848const parseArgs = ( command ) => {
49- let args = [ ] ;
49+ const args = [ ] ;
5050 let nextDelimiter = 0 ;
5151 let prevDelimiter = 0 ;
52- while ( ( nextDelimiter = command . indexOf ( ' ' , prevDelimiter ) ) >= 0 ) {
53- let arg = command . substring ( prevDelimiter , nextDelimiter )
52+ while ( ( nextDelimiter = command . indexOf ( ' ' , prevDelimiter ) ) >= 0 ) {
53+ let arg = command . substring ( prevDelimiter , nextDelimiter ) ;
54+ let quoteIndex = arg . indexOf ( '\'' ) ;
55+ let doubleQuoteIndex = arg . indexOf ( '"' ) ;
5456
55- if ( arg [ 0 ] === '\'' || arg [ 0 ] === '\"' ) {
57+ if ( quoteIndex === 0 || doubleQuoteIndex === 0 ) {
58+ /* The argument has a quote at the start i.e, 'id=0,streams=0 id=1,streams=1' */
5659 const delimiter = arg [ 0 ] ;
57- const endDelimiter = command . indexOf ( delimeter , prevDelimiter + 1 ) ;
60+ const endDelimiter = command . indexOf ( delimiter , prevDelimiter + 1 ) ;
5861
59- if ( endDelimiter < 0 ) throw `Bad command espcape sequence ${ delimeter } near ${ nextDelimiter } `
60-
61- arg = command . substring ( prevDelimiter + 1 , endDelimiter ) ;
62+ if ( endDelimiter < 0 ) {
63+ throw new Error ( `Bad command escape sequence ${ delimiter } near ${ nextDelimiter } ` ) ;
64+ }
65+
66+ arg = command . substring ( prevDelimiter + 1 , endDelimiter ) ;
6267 prevDelimiter = endDelimiter + 2 ;
63- }
64- else {
65- prevDelimiter = nextDelimiter + 1 ;
68+ args . push ( arg ) ;
69+ } else if ( quoteIndex > 0 || doubleQuoteIndex > 0 ) {
70+ /* The argument has a quote in it, it must be ended correctly i,e. title='test' */
71+ if ( quoteIndex === - 1 ) quoteIndex = Infinity ;
72+ if ( doubleQuoteIndex === - 1 ) doubleQuoteIndex = Infinity ;
73+ const delimiter = ( quoteIndex < doubleQuoteIndex ) ? '\'' : '"' ;
74+ const endDelimiter = command . indexOf ( delimiter , prevDelimiter + Math . min ( quoteIndex , doubleQuoteIndex ) + 1 ) ;
6675
67- if ( arg === "" ) {
68- continue ;
76+ if ( endDelimiter < 0 ) {
77+ throw new Error ( `Bad command escape sequence ${ delimiter } near ${ nextDelimiter } ` ) ;
6978 }
70- }
7179
72- args . push ( arg )
80+ arg = command . substring ( prevDelimiter , endDelimiter + 1 ) ;
81+ prevDelimiter = endDelimiter + 2 ;
82+ args . push ( arg ) ;
83+ } else if ( arg !== '' ) {
84+ args . push ( arg ) ;
85+ prevDelimiter = nextDelimiter + 1 ;
86+ } else {
87+ prevDelimiter = nextDelimiter + 1 ;
88+ }
7389 }
7490
75- if ( prevDelimiter != command . length ) {
76- args . push ( command . substring ( prevDelimiter ) )
91+ if ( prevDelimiter !== command . length ) {
92+ args . push ( command . substring ( prevDelimiter ) ) ;
7793 }
7894
7995 return args ;
80- }
96+ } ;
8197
8298const run = ( {
8399 payload : {
0 commit comments