Skip to content

gun-yu/pnp-go

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

10 Commits
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

pnp-go

This work is heavily inspired by yarnpkg/pnp-rs.
Thanks to the pnp-rs maintainers for the original implementation.

This crate implements the Yarn Plug'n'Play resolution algorithms for Go so that it can be easily reused within Go-based tools. It also includes utilities allowing to transparently read files from within zip archives.

Resolution

func Example() {
	manifest, err := loadPNPManifest(".pnp.cjs")
	if err != nil {
		return
	}

	manifestCopy := manifest
	host := ResolutionHost{
		FindPnPManifest: func(_ string) (*Manifest, error) {
			m := manifestCopy
			return &m, nil
		},
	}

	config := ResolutionConfig{
		Host: host,
	}

	parent := filepath.FromSlash("/path/to/index.js")
	resolution, err := resolveToUnqualified("lodash/cloneDeep", parent, config)

	if err != nil {
		return
	}

	switch resolution.Kind {
	case ResolutionResolved:
		// path  = "/path/to/lodash.zip"
		// subpath = "cloneDeep"
		_ = resolution.Path
		_ = resolution.Subpath
	case ResolutionSkipped:
		// This is returned when the PnP resolver decides that it shouldn't
		// handle the resolution for this particular specifier. In that case,
		// the specifier should be forwarded to the default resolver.
	}
}

About

No description, website, or topics provided.

Resources

License

Stars

Watchers

Forks

Packages

No packages published