aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/cli/internal/packagemanager/pnpm6.go
diff options
context:
space:
mode:
Diffstat (limited to 'cli/internal/packagemanager/pnpm6.go')
-rw-r--r--cli/internal/packagemanager/pnpm6.go63
1 files changed, 63 insertions, 0 deletions
diff --git a/cli/internal/packagemanager/pnpm6.go b/cli/internal/packagemanager/pnpm6.go
new file mode 100644
index 0000000..6039966
--- /dev/null
+++ b/cli/internal/packagemanager/pnpm6.go
@@ -0,0 +1,63 @@
+package packagemanager
+
+import (
+ "fmt"
+
+ "github.com/Masterminds/semver"
+ "github.com/vercel/turbo/cli/internal/fs"
+ "github.com/vercel/turbo/cli/internal/lockfile"
+ "github.com/vercel/turbo/cli/internal/turbopath"
+)
+
+// Pnpm6Workspaces is a representation of workspace package globs found
+// in pnpm-workspace.yaml
+type Pnpm6Workspaces struct {
+ Packages []string `yaml:"packages,omitempty"`
+}
+
+var nodejsPnpm6 = PackageManager{
+ Name: "nodejs-pnpm6",
+ Slug: "pnpm",
+ Command: "pnpm",
+ Specfile: "package.json",
+ Lockfile: "pnpm-lock.yaml",
+ PackageDir: "node_modules",
+ ArgSeparator: []string{"--"},
+ WorkspaceConfigurationPath: "pnpm-workspace.yaml",
+
+ getWorkspaceGlobs: getPnpmWorkspaceGlobs,
+
+ getWorkspaceIgnores: getPnpmWorkspaceIgnores,
+
+ Matches: func(manager string, version string) (bool, error) {
+ if manager != "pnpm" {
+ return false, nil
+ }
+
+ v, err := semver.NewVersion(version)
+ if err != nil {
+ return false, fmt.Errorf("could not parse pnpm version: %w", err)
+ }
+ c, err := semver.NewConstraint("<7.0.0")
+ if err != nil {
+ return false, fmt.Errorf("could not create constraint: %w", err)
+ }
+
+ return c.Check(v), nil
+ },
+
+ detect: func(projectDirectory turbopath.AbsoluteSystemPath, packageManager *PackageManager) (bool, error) {
+ specfileExists := projectDirectory.UntypedJoin(packageManager.Specfile).FileExists()
+ lockfileExists := projectDirectory.UntypedJoin(packageManager.Lockfile).FileExists()
+
+ return (specfileExists && lockfileExists), nil
+ },
+
+ canPrune: func(cwd turbopath.AbsoluteSystemPath) (bool, error) {
+ return true, nil
+ },
+
+ UnmarshalLockfile: func(_rootPackageJSON *fs.PackageJSON, contents []byte) (lockfile.Lockfile, error) {
+ return lockfile.DecodePnpmLockfile(contents)
+ },
+}