5
5
"context"
6
6
"encoding/json"
7
7
"fmt"
8
+ "math"
8
9
"net/http"
9
10
"net/url"
10
11
"os"
@@ -98,7 +99,7 @@ func New(conf ...StorybookConfig) *Storybook {
98
99
return sh
99
100
}
100
101
101
- func (sh * Storybook ) AddComponent (name string , componentConstructor interface {} , args ... Arg ) * Conf {
102
+ func (sh * Storybook ) AddComponent (name string , componentConstructor any , args ... Arg ) * Conf {
102
103
//TODO: Check that the component constructor is a function that returns a templ.Component.
103
104
c := NewConf (name , args ... )
104
105
sh .Config [name ] = c
@@ -313,9 +314,9 @@ func (sh *Storybook) buildStorybook() (err error) {
313
314
return cmd .Run ()
314
315
}
315
316
316
- func NewHandler (name string , f interface {} , args ... Arg ) http.Handler {
317
+ func NewHandler (name string , f any , args ... Arg ) http.Handler {
317
318
return http .HandlerFunc (func (w http.ResponseWriter , r * http.Request ) {
318
- argv := make ([]interface {} , len (args ))
319
+ argv := make ([]any , len (args ))
319
320
q := r .URL .Query ()
320
321
for i , arg := range args {
321
322
argv [i ] = arg .Get (q )
@@ -329,7 +330,7 @@ func NewHandler(name string, f interface{}, args ...Arg) http.Handler {
329
330
})
330
331
}
331
332
332
- func executeTemplate (name string , fn interface {} , values []interface {} ) (output templ.Component , err error ) {
333
+ func executeTemplate (name string , fn any , values []any ) (output templ.Component , err error ) {
333
334
v := reflect .ValueOf (fn )
334
335
t := v .Type ()
335
336
argv := make ([]reflect.Value , t .NumIn ())
@@ -357,7 +358,7 @@ func NewConf(title string, args ...Arg) *Conf {
357
358
c := & Conf {
358
359
Title : title ,
359
360
Parameters : StoryParameters {
360
- Server : map [string ]interface {} {
361
+ Server : map [string ]any {
361
362
"id" : title ,
362
363
},
363
364
},
@@ -367,7 +368,7 @@ func NewConf(title string, args ...Arg) *Conf {
367
368
}
368
369
for _ , arg := range args {
369
370
c .Args .Add (arg .Name , arg .Value )
370
- c .ArgTypes .Add (arg .Name , map [string ]interface {} {
371
+ c .ArgTypes .Add (arg .Name , map [string ]any {
371
372
"control" : arg .Control ,
372
373
})
373
374
}
@@ -390,17 +391,17 @@ func (c *Conf) AddStory(name string, args ...Arg) {
390
391
// See https://storybook.js.org/docs/react/essentials/controls
391
392
type Arg struct {
392
393
Name string
393
- Value interface {}
394
- Control interface {}
395
- Get func (q url.Values ) interface {}
394
+ Value any
395
+ Control any
396
+ Get func (q url.Values ) any
396
397
}
397
398
398
- func ObjectArg (name string , value interface {} , valuePtr interface {} ) Arg {
399
+ func ObjectArg (name string , value any , valuePtr any ) Arg {
399
400
return Arg {
400
401
Name : name ,
401
402
Value : value ,
402
403
Control : "object" ,
403
- Get : func (q url.Values ) interface {} {
404
+ Get : func (q url.Values ) any {
404
405
err := json .Unmarshal ([]byte (q .Get (name )), valuePtr )
405
406
if err != nil {
406
407
return err
@@ -415,7 +416,7 @@ func TextArg(name, value string) Arg {
415
416
Name : name ,
416
417
Value : value ,
417
418
Control : "text" ,
418
- Get : func (q url.Values ) interface {} {
419
+ Get : func (q url.Values ) any {
419
420
return q .Get (name )
420
421
},
421
422
}
@@ -426,7 +427,7 @@ func BooleanArg(name string, value bool) Arg {
426
427
Name : name ,
427
428
Value : value ,
428
429
Control : "boolean" ,
429
- Get : func (q url.Values ) interface {} {
430
+ Get : func (q url.Values ) any {
430
431
return q .Get (name ) == "true"
431
432
},
432
433
}
@@ -435,7 +436,7 @@ func BooleanArg(name string, value bool) Arg {
435
436
type IntArgConf struct { Min , Max , Step * int }
436
437
437
438
func IntArg (name string , value int , conf IntArgConf ) Arg {
438
- control := map [string ]interface {} {
439
+ control := map [string ]any {
439
440
"type" : "number" ,
440
441
}
441
442
if conf .Min != nil {
@@ -451,9 +452,12 @@ func IntArg(name string, value int, conf IntArgConf) Arg {
451
452
Name : name ,
452
453
Value : value ,
453
454
Control : control ,
454
- Get : func (q url.Values ) interface {} {
455
- i , _ := strconv .ParseInt (q .Get (name ), 10 , 64 )
456
- return int (i )
455
+ Get : func (q url.Values ) any {
456
+ i64 , err := strconv .ParseInt (q .Get (name ), 10 , 64 )
457
+ if err != nil || i64 < math .MinInt || i64 > math .MaxInt {
458
+ return 0
459
+ }
460
+ return int (i64 )
457
461
},
458
462
}
459
463
return arg
@@ -463,13 +467,13 @@ func FloatArg(name string, value float64, min, max, step float64) Arg {
463
467
return Arg {
464
468
Name : name ,
465
469
Value : value ,
466
- Control : map [string ]interface {} {
470
+ Control : map [string ]any {
467
471
"type" : "number" ,
468
472
"min" : min ,
469
473
"max" : max ,
470
474
"step" : step ,
471
475
},
472
- Get : func (q url.Values ) interface {} {
476
+ Get : func (q url.Values ) any {
473
477
i , _ := strconv .ParseFloat (q .Get (name ), 64 )
474
478
return i
475
479
},
@@ -485,24 +489,24 @@ type Conf struct {
485
489
}
486
490
487
491
type StoryParameters struct {
488
- Server map [string ]interface {} `json:"server"`
492
+ Server map [string ]any `json:"server"`
489
493
}
490
494
491
495
func NewSortedMap () * SortedMap {
492
496
return & SortedMap {
493
497
m : new (sync.Mutex ),
494
- internal : map [string ]interface {} {},
498
+ internal : map [string ]any {},
495
499
keys : []string {},
496
500
}
497
501
}
498
502
499
503
type SortedMap struct {
500
504
m * sync.Mutex
501
- internal map [string ]interface {}
505
+ internal map [string ]any
502
506
keys []string
503
507
}
504
508
505
- func (sm * SortedMap ) Add (key string , value interface {} ) {
509
+ func (sm * SortedMap ) Add (key string , value any ) {
506
510
sm .m .Lock ()
507
511
defer sm .m .Unlock ()
508
512
sm .keys = append (sm .keys , key )
0 commit comments