@@ -13,40 +13,40 @@ import (
1313 "github.com/gopherjs/gopherjs.github.io/playground/internal/common"
1414)
1515
16- type fetcher struct {}
16+ type fetcher struct {
17+ verbose bool
18+ }
1719
18- func NewFetcher () common.Fetcher {
19- return & fetcher {}
20+ func NewFetcher (verbose bool ) common.Fetcher {
21+ return & fetcher {verbose : verbose }
2022}
2123
22- func (f * fetcher ) FetchPackage (importPath string ) (srcs * sources.Sources , err error ) {
24+ // See comments in [common.Fetcher]
25+ func (f * fetcher ) FetchPackage (importPath string ) (* sources.Sources , error ) {
26+ if f .verbose {
27+ println ("Fetching package:" , importPath )
28+ }
29+
2330 data , err := f .fetchFile (importPath )
2431 if err != nil {
2532 return nil , err
2633 }
2734
28- zr , err := gzip . NewReader ( bytes . NewReader ( data ) )
35+ srcs , err := f . readPackage ( importPath , data )
2936 if err != nil {
30- return nil , fmt . Errorf ( `failed to create gzip reader for package %q: %v` , importPath , err )
37+ return nil , err
3138 }
32- defer func () {
33- if closeErr := zr .Close (); err == nil && closeErr != nil {
34- err = fmt .Errorf (`failed to close gzip reader for package %q: %w` , importPath , closeErr )
35- }
36- }()
3739
38- srcs = & sources.Sources {}
39- if err := srcs .Read (gob .NewDecoder (zr ).Decode ); err != nil {
40- return nil , fmt .Errorf (`failed to decode package %q: %v` , importPath , err )
40+ if f .verbose {
41+ println ("Package ready: " , importPath )
4142 }
42-
4343 return srcs , nil
4444}
4545
4646func (f * fetcher ) fetchFile (importPath string ) ([]byte , error ) {
4747 const (
4848 pkgBaseURL = `pkg/`
49- pkgExt = `.a.js`
49+ pkgExt = `.a.js` // TODO(grantnelson-wf): Should probably pick a better extension for precompiled packages since they aren't JS anymore, maybe .zip
5050 )
5151
5252 req := xhr .NewRequest (`GET` , pkgBaseURL + importPath + pkgExt )
@@ -60,3 +60,22 @@ func (f *fetcher) fetchFile(importPath string) ([]byte, error) {
6060 data := js .Global .Get (`Uint8Array` ).New (req .Response ).Interface ().([]byte )
6161 return data , nil
6262}
63+
64+ func (f * fetcher ) readPackage (importPath string , data []byte ) (srcs * sources.Sources , err error ) {
65+ zr , err := gzip .NewReader (bytes .NewReader (data ))
66+ if err != nil {
67+ return nil , fmt .Errorf (`failed to create gzip reader for package %q: %v` , importPath , err )
68+ }
69+ defer func () {
70+ if closeErr := zr .Close (); err == nil && closeErr != nil {
71+ err = fmt .Errorf (`failed to close gzip reader for package %q: %w` , importPath , closeErr )
72+ }
73+ }()
74+
75+ srcs = & sources.Sources {}
76+ if err := srcs .Read (gob .NewDecoder (zr ).Decode ); err != nil {
77+ return nil , fmt .Errorf (`failed to decode package %q: %v` , importPath , err )
78+ }
79+
80+ return srcs , nil
81+ }
0 commit comments