@@ -2992,34 +2992,80 @@ const DEFAULTS = {
29922992 hideStack : false ,
29932993 snakeSize : 4 ,
29942994} ;
2995+ const SPEEDS = {
2996+ slow : 200 ,
2997+ normal : 150 ,
2998+ fast : 100 ,
2999+ } ;
29953000const parseOutputsOption = ( lines ) => lines . map ( parseEntry ) ;
29963001const parseEntry = ( entry ) => {
29973002 const m = entry . trim ( ) . match ( / ^ ( .+ \. ( s v g | g i f ) ) ( \? ( .* ) | \s * ( { .* } ) ) ? $ / ) ;
29983003 if ( ! m )
29993004 return null ;
30003005 const [ , filename , format , _ , q1 , q2 ] = m ;
30013006 const query = q1 ?? q2 ;
3002- let sp = new URLSearchParams ( query || "" ) ;
3007+ const searchParams = parseQuery ( query ) ;
3008+ const hideStack = parseHideStack ( searchParams ) ;
3009+ const snakeSize = parseSnakeSize ( searchParams ) ;
3010+ const colors = parseColors ( searchParams ) ;
3011+ const drawOptions = {
3012+ sizeDotBorderRadius : 2 ,
3013+ sizeCell : 16 ,
3014+ sizeDot : 12 ,
3015+ hideStack,
3016+ ...colors ,
3017+ } ;
3018+ const animationOptions = {
3019+ step : 1 ,
3020+ frameDuration : parseSpeed ( searchParams ) ,
3021+ } ;
3022+ return {
3023+ filename,
3024+ format : format ,
3025+ drawOptions,
3026+ animationOptions,
3027+ snakeSize,
3028+ } ;
3029+ } ;
3030+ function parseSpeed ( searchParams ) {
3031+ if ( searchParams . has ( "speed" ) ) {
3032+ const speed = searchParams . get ( "speed" ) ;
3033+ if ( speed in SPEEDS ) {
3034+ return SPEEDS [ speed ] ;
3035+ }
3036+ console . warn ( `Speed '${ speed } ' is not a valid speed.` ) ;
3037+ console . warn ( "Using default speed..." ) ;
3038+ }
3039+ return SPEEDS . normal ;
3040+ }
3041+ function parseQuery ( query ) {
3042+ let searchParams = new URLSearchParams ( query || "" ) ;
30033043 try {
30043044 const o = JSON . parse ( query ) ;
3005- if ( Array . isArray ( o . color_dots ) )
3045+ if ( Array . isArray ( o . color_dots ) ) {
30063046 o . color_dots = o . color_dots . join ( "," ) ;
3007- if ( Array . isArray ( o . dark_color_dots ) )
3047+ }
3048+ if ( Array . isArray ( o . dark_color_dots ) ) {
30083049 o . dark_color_dots = o . dark_color_dots . join ( "," ) ;
3009- sp = new URLSearchParams ( o ) ;
3050+ }
3051+ searchParams = new URLSearchParams ( o ) ;
30103052 }
30113053 catch ( err ) {
30123054 if ( ! ( err instanceof SyntaxError ) )
30133055 throw err ;
30143056 }
3015- let hideStack = DEFAULTS . hideStack ;
3016- if ( sp . has ( "hide_stack" ) ) {
3017- hideStack = sp . get ( "hide_stack" ) === "true" ;
3057+ return searchParams ;
3058+ }
3059+ function parseHideStack ( searchParams ) {
3060+ if ( searchParams . has ( "hide_stack" ) ) {
3061+ return searchParams . get ( "hide_stack" ) === "true" ;
30183062 }
3019- let snakeSize = DEFAULTS . snakeSize ;
3020- if ( sp . has ( "snake_size" ) ) {
3063+ return DEFAULTS . hideStack ;
3064+ }
3065+ function parseSnakeSize ( searchParams ) {
3066+ if ( searchParams . has ( "snake_size" ) ) {
30213067 try {
3022- const paramsSnakeSize = Number ( sp . get ( "snake_size" ) ) ;
3068+ const paramsSnakeSize = Number ( searchParams . get ( "snake_size" ) ) ;
30233069 if ( Number . isNaN ( paramsSnakeSize ) ) {
30243070 throw new Error ( "Invalid snake_size provided, snake_size must be a number" ) ;
30253071 }
@@ -3029,68 +3075,64 @@ const parseEntry = (entry) => {
30293075 if ( paramsSnakeSize <= 0 || paramsSnakeSize > 9 ) {
30303076 throw new Error ( "Invalid snake_size provided, snake_size must be between 1 and 9" ) ;
30313077 }
3032- snakeSize = paramsSnakeSize ;
3078+ return paramsSnakeSize ;
30333079 }
30343080 catch ( error ) {
30353081 console . warn ( error ) ;
30363082 console . warn ( "Using default snake size..." ) ;
30373083 }
30383084 }
3039- const drawOptions = {
3040- sizeDotBorderRadius : 2 ,
3041- sizeCell : 16 ,
3042- sizeDot : 12 ,
3085+ return DEFAULTS . snakeSize ;
3086+ }
3087+ function parseColors ( searchParams ) {
3088+ const drawColors = {
30433089 ...palettes [ "default" ] ,
30443090 dark : palettes [ "default" ] . dark && { ...palettes [ "default" ] . dark } ,
3045- hideStack,
30463091 } ;
3047- const animationOptions = { step : 1 , frameDuration : 100 } ;
30483092 {
3049- const palette = palettes [ sp . get ( "palette" ) ] ;
3093+ const palette = palettes [ searchParams . get ( "palette" ) ] ;
30503094 if ( palette ) {
3051- Object . assign ( drawOptions , palette ) ;
3052- drawOptions . dark = palette . dark && { ...palette . dark } ;
3095+ Object . assign ( drawColors , palette ) ;
3096+ drawColors . dark = palette . dark && { ...palette . dark } ;
30533097 }
30543098 }
30553099 {
3056- const dark_palette = palettes [ sp . get ( "dark_palette" ) ] ;
3100+ const dark_palette = palettes [ searchParams . get ( "dark_palette" ) ] ;
30573101 if ( dark_palette ) {
30583102 const clone = { ...dark_palette , dark : undefined } ;
3059- drawOptions . dark = clone ;
3103+ drawColors . dark = clone ;
30603104 }
30613105 }
3062- if ( sp . has ( "color_snake" ) )
3063- drawOptions . colorSnake = sp . get ( "color_snake" ) ;
3064- if ( sp . has ( "color_dots" ) ) {
3065- const colors = sp . get ( "color_dots" ) . split ( / [ , ; ] / ) ;
3066- drawOptions . colorDots = colors ;
3067- drawOptions . colorEmpty = colors [ 0 ] ;
3068- drawOptions . dark = undefined ;
3069- }
3070- if ( sp . has ( "color_dot_border" ) )
3071- drawOptions . colorDotBorder = sp . get ( "color_dot_border" ) ;
3072- if ( sp . has ( "dark_color_dots" ) ) {
3073- const colors = sp . get ( "dark_color_dots" ) . split ( / [ , ; ] / ) ;
3074- drawOptions . dark = {
3075- colorDotBorder : drawOptions . colorDotBorder ,
3076- colorSnake : drawOptions . colorSnake ,
3077- ...drawOptions . dark ,
3106+ if ( searchParams . has ( "color_snake" ) ) {
3107+ drawColors . colorSnake = searchParams . get ( "color_snake" ) ;
3108+ }
3109+ if ( searchParams . has ( "color_dots" ) ) {
3110+ const colors = searchParams . get ( "color_dots" ) . split ( / [ , ; ] / ) ;
3111+ drawColors . colorDots = colors ;
3112+ drawColors . colorEmpty = colors [ 0 ] ;
3113+ drawColors . dark = undefined ;
3114+ }
3115+ if ( searchParams . has ( "color_dot_border" ) ) {
3116+ drawColors . colorDotBorder = searchParams . get ( "color_dot_border" ) ;
3117+ }
3118+ if ( searchParams . has ( "dark_color_dots" ) ) {
3119+ const colors = searchParams . get ( "dark_color_dots" ) . split ( / [ , ; ] / ) ;
3120+ drawColors . dark = {
3121+ colorDotBorder : drawColors . colorDotBorder ,
3122+ colorSnake : drawColors . colorSnake ,
3123+ ...drawColors . dark ,
30783124 colorDots : colors ,
30793125 colorEmpty : colors [ 0 ] ,
30803126 } ;
30813127 }
3082- if ( sp . has ( "dark_color_dot_border" ) && drawOptions . dark )
3083- drawOptions . dark . colorDotBorder = sp . get ( "color_dot_border" ) ;
3084- if ( sp . has ( "dark_color_snake" ) && drawOptions . dark )
3085- drawOptions . dark . colorSnake = sp . get ( "color_snake" ) ;
3086- return {
3087- filename,
3088- format : format ,
3089- drawOptions,
3090- animationOptions,
3091- snakeSize,
3092- } ;
3093- } ;
3128+ if ( searchParams . has ( "dark_color_dot_border" ) && drawColors . dark ) {
3129+ drawColors . dark . colorDotBorder = searchParams . get ( "color_dot_border" ) ;
3130+ }
3131+ if ( searchParams . has ( "dark_color_snake" ) && drawColors . dark ) {
3132+ drawColors . dark . colorSnake = searchParams . get ( "color_snake" ) ;
3133+ }
3134+ return drawColors ;
3135+ }
30943136
30953137; // CONCATENATED MODULE: ./index.ts
30963138
0 commit comments