http

package
v0.0.0-...-2f27a15 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Jan 16, 2021 License: MIT Imports: 9 Imported by: 0

Documentation

Index

Constants

This section is empty.

Variables

View Source
var Plugin = api.Plugin{
	Name: "http",
	Setup: func(build api.PluginBuild) {

		build.OnResolve(api.OnResolveOptions{Filter: `^https?://`},
			func(args api.OnResolveArgs) (api.OnResolveResult, error) {
				return api.OnResolveResult{
					Path:      args.Path,
					Namespace: "http-url",
				}, nil
			})

		build.OnResolve(api.OnResolveOptions{Filter: ".*", Namespace: "http-url"},
			func(args api.OnResolveArgs) (api.OnResolveResult, error) {
				base, err := url.Parse(args.Importer)
				if err != nil {
					return api.OnResolveResult{}, err
				}
				relative, err := url.Parse(args.Path)
				if err != nil {
					return api.OnResolveResult{}, err
				}
				return api.OnResolveResult{
					Path:      base.ResolveReference(relative).String(),
					Namespace: "http-url",
				}, nil
			})

		build.OnLoad(api.OnLoadOptions{Filter: ".*", Namespace: "http-url"},
			func(args api.OnLoadArgs) (api.OnLoadResult, error) {
				var contents string
				sum := sha256.Sum256([]byte(args.Path))
				filePath := filepath.Join(cacheDIR, fmt.Sprintf("%x", sum))

				if _, err := os.Stat(cacheDIR); os.IsNotExist(err) {
					os.MkdirAll(cacheDIR, os.ModePerm)
				}

				if _, err := os.Stat(filePath); os.IsNotExist(err) {

					res, err := http.Get(args.Path)

					fmt.Printf("Downloading: %s\n", args.Path)

					if err != nil {
						return api.OnLoadResult{}, err
					}
					defer res.Body.Close()
					bytes, err := ioutil.ReadAll(res.Body)
					if err != nil {
						return api.OnLoadResult{}, err
					}
					contents = string(bytes)
					ioutil.WriteFile(filePath, bytes, os.ModePerm)

				} else {

					bytes, err := ioutil.ReadFile(filePath)
					if err != nil {
						return api.OnLoadResult{}, err
					}
					contents = string(bytes)
				}

				return api.OnLoadResult{Contents: &contents}, nil
			})
	},
}

Plugin provides the http.Plugin to be used with esbuild plugins

Functions

This section is empty.

Types

This section is empty.

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL