Skip to content

Commit e36f8a9

Browse files
authored
check all workspace package jsons when deciding if we should copy all files into install step (#160)
1 parent 54bb047 commit e36f8a9

File tree

4 files changed

+60
-6
lines changed

4 files changed

+60
-6
lines changed

core/providers/node/node.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -232,7 +232,7 @@ func (p *NodeProvider) InstallNodeDeps(ctx *generate.GenerateContext, install *g
232232
})
233233
}
234234

235-
p.packageManager.installDependencies(ctx, p.packageJson, install)
235+
p.packageManager.installDependencies(ctx, p.workspace, install)
236236
}
237237

238238
func (p *NodeProvider) InstallMisePackages(ctx *generate.GenerateContext, miseStep *generate.MiseStepBuilder) {

core/providers/node/package_manager.go

Lines changed: 14 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -44,11 +44,20 @@ func (p PackageManager) RunScriptCommand(cmd string) string {
4444
return "node " + cmd
4545
}
4646

47-
func (p PackageManager) installDependencies(ctx *generate.GenerateContext, packageJson *PackageJson, install *generate.CommandStepBuilder) {
48-
hasPreInstall := packageJson.Scripts != nil && packageJson.Scripts["preinstall"] != ""
49-
hasPostInstall := packageJson.Scripts != nil && packageJson.Scripts["postinstall"] != ""
50-
hasPrepare := packageJson.Scripts != nil && packageJson.Scripts["prepare"] != ""
51-
usesLocalFile := p.usesLocalFile(ctx)
47+
func (p PackageManager) installDependencies(ctx *generate.GenerateContext, workspace *Workspace, install *generate.CommandStepBuilder) {
48+
packageJsons := workspace.AllPackageJson()
49+
50+
hasPreInstall := false
51+
hasPostInstall := false
52+
hasPrepare := false
53+
usesLocalFile := false
54+
55+
for _, packageJson := range packageJsons {
56+
hasPreInstall = hasPreInstall || (packageJson.Scripts != nil && packageJson.Scripts["preinstall"] != "")
57+
hasPostInstall = hasPostInstall || (packageJson.Scripts != nil && packageJson.Scripts["postinstall"] != "")
58+
hasPrepare = hasPrepare || (packageJson.Scripts != nil && packageJson.Scripts["prepare"] != "")
59+
usesLocalFile = usesLocalFile || p.usesLocalFile(ctx)
60+
}
5261

5362
// If there are any pre/post install scripts, we need the entire app to be copied
5463
// This is to handle things like patch-package

core/providers/node/workspace.go

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -139,3 +139,13 @@ func (w *Workspace) HasDependency(dependency string) bool {
139139

140140
return false
141141
}
142+
143+
func (w *Workspace) AllPackageJson() []*PackageJson {
144+
packageJsons := []*PackageJson{w.PackageJson}
145+
146+
for _, pkg := range w.Packages {
147+
packageJsons = append(packageJsons, pkg.PackageJson)
148+
}
149+
150+
return packageJsons
151+
}

core/providers/node/workspace_test.go

Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -111,3 +111,38 @@ func TestConvertWorkspacePattern(t *testing.T) {
111111
})
112112
}
113113
}
114+
115+
func TestWorkspaceAllPackageJson(t *testing.T) {
116+
tests := []struct {
117+
name string
118+
path string
119+
numExpected int
120+
}{
121+
{
122+
name: "npm workspaces",
123+
path: "../../../examples/node-npm-workspaces",
124+
numExpected: 3,
125+
},
126+
{
127+
name: "pnpm workspaces",
128+
path: "../../../examples/node-pnpm-workspaces",
129+
numExpected: 3,
130+
},
131+
{
132+
name: "no workspaces",
133+
path: "../../../examples/node-npm",
134+
numExpected: 1,
135+
},
136+
}
137+
138+
for _, tt := range tests {
139+
t.Run(tt.name, func(t *testing.T) {
140+
ctx := testingUtils.CreateGenerateContext(t, tt.path)
141+
workspace, err := NewWorkspace(ctx.App)
142+
require.NoError(t, err)
143+
144+
all := workspace.AllPackageJson()
145+
require.Equal(t, tt.numExpected, len(all))
146+
})
147+
}
148+
}

0 commit comments

Comments
 (0)