@@ -27,15 +27,21 @@ type asset struct {
2727 sri string
2828}
2929
30+ // debug print helper (to skip `b`)
31+ func (a asset ) String () string {
32+ return fmt .Sprintf ("asset{path:%s, hashedPath:%s, mime:%s, fileType:%s, sri:%s}" , a .path , a .hashedPath , a .mime , a .fileType , a .sri )
33+ }
34+
3035// assets is populated during init and then is only used for reading.
31- var assets = make ( map [string ]* asset )
36+ var assets map [string ]* asset
3237
3338// assetHashes maps asset filename to the corresponding hash-prefixed asset pathname.
34- var assetHashes = make ( map [string ]string )
39+ var assetHashes map [string ]string
3540var assetError error
3641
3742func init () {
38- assetError = initAssets ("assets/assets" , "assets" )
43+ // optionally, one can call InitAssets() to re-init to another directory
44+ assetError = InitAssets ("assets/assets" , "assets" )
3945}
4046
4147// As part of Subresource Integrity we need to calculate the hash of the asset, we do this when the asset is loaded into memory
@@ -320,35 +326,40 @@ func loadAsset(file, prefix string) (*asset, error) {
320326 return & a , nil
321327}
322328
323- // initAssets loads all assets below dir into global maps.
324- func initAssets (dir , prefix string ) error {
329+ // InitAssets loads all assets below dir into global maps.
330+ func InitAssets (dir , prefix string ) error {
325331 var fileList []string
326332
327- err := filepath .Walk (dir , func (path string , f os.FileInfo , err error ) error {
328- fileList = append (fileList , path )
329- return nil
330- })
331- if err != nil {
332- return err
333- }
334-
335- for _ , v := range fileList {
336- fi , err := os .Stat (v )
333+ assets = make (map [string ]* asset )
334+ assetHashes = make (map [string ]string )
335+ assetError = func () error {
336+ err := filepath .Walk (dir , func (path string , f os.FileInfo , err error ) error {
337+ fileList = append (fileList , path )
338+ return nil
339+ })
337340 if err != nil {
338341 return err
339342 }
340343
341- switch mode := fi .Mode (); {
342- case mode .IsRegular ():
343- a , err := loadAsset (v , prefix )
344+ for _ , v := range fileList {
345+ fi , err := os .Stat (v )
344346 if err != nil {
345347 return err
346348 }
347- assets [a .hashedPath ] = a
348- assets [a .path ] = a
349- assetHashes [a .path ] = a .hashedPath
349+
350+ switch mode := fi .Mode (); {
351+ case mode .IsRegular ():
352+ a , err := loadAsset (v , prefix )
353+ if err != nil {
354+ return err
355+ }
356+ assets [a .hashedPath ] = a
357+ assets [a .path ] = a
358+ assetHashes [a .path ] = a .hashedPath
359+ }
350360 }
351- }
361+ return nil
362+ }()
352363
353- return nil
364+ return assetError
354365}
0 commit comments