Skip to content

Commit e0a290a

Browse files
committed
1162: separate node dirs per package.json
1 parent fdbbd02 commit e0a290a

File tree

5 files changed

+45
-19
lines changed

5 files changed

+45
-19
lines changed

lib/src/main/java/com/diffplug/spotless/npm/NodeServerLayout.java

Lines changed: 34 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -18,25 +18,44 @@
1818
import java.io.File;
1919
import java.nio.file.Files;
2020
import java.nio.file.Path;
21+
import java.util.regex.Matcher;
22+
import java.util.regex.Pattern;
2123
import java.util.stream.Stream;
2224

2325
import com.diffplug.spotless.ThrowingEx;
2426

2527
class NodeServerLayout {
2628

29+
private static final Pattern PACKAGE_JSON_NAME_PATTERN = Pattern.compile("\"name\"\\s*:\\s*\"([^\"]+)\"");
30+
2731
private final File nodeModulesDir;
2832
private final File packageJsonFile;
33+
34+
private final File packageLockJsonFile;
35+
2936
private final File serveJsFile;
3037
private final File npmrcFile;
3138

32-
NodeServerLayout(File buildDir, String stepName, String stepSuffix) {
33-
this.nodeModulesDir = new File(buildDir, String.format("spotless-node-modules-%s-%s", stepName, stepSuffix));
39+
NodeServerLayout(File buildDir, String packageJsonContent) {
40+
this.nodeModulesDir = new File(buildDir, nodeModulesDirName(packageJsonContent));
3441
this.packageJsonFile = new File(nodeModulesDir, "package.json");
42+
this.packageLockJsonFile = new File(nodeModulesDir, "package-lock.json");
3543
this.serveJsFile = new File(nodeModulesDir, "serve.js");
3644
this.npmrcFile = new File(nodeModulesDir, ".npmrc");
3745
}
3846

47+
private static String nodeModulesDirName(String packageJsonContent) {
48+
String md5Hash = NpmResourceHelper.md5(packageJsonContent);
49+
Matcher matcher = PACKAGE_JSON_NAME_PATTERN.matcher(packageJsonContent);
50+
if (!matcher.find()) {
51+
throw new IllegalArgumentException("package.json must contain a name property");
52+
}
53+
String packageName = matcher.group(1);
54+
return String.format("%s-node-modules-%s", packageName, md5Hash);
55+
}
56+
3957
File nodeModulesDir() {
58+
4059
return nodeModulesDir;
4160
}
4261

@@ -52,17 +71,16 @@ public File npmrcFile() {
5271
return npmrcFile;
5372
}
5473

55-
static File getBuildDirFromNodeModulesDir(File nodeModulesDir) {
56-
return nodeModulesDir.getParentFile();
57-
}
58-
5974
public boolean isLayoutPrepared() {
6075
if (!nodeModulesDir().isDirectory()) {
6176
return false;
6277
}
6378
if (!packageJsonFile().isFile()) {
6479
return false;
6580
}
81+
if (!packageLockJsonFile.isFile()) {
82+
return false;
83+
}
6684
if (!serveJsFile().isFile()) {
6785
return false;
6886
}
@@ -82,4 +100,14 @@ public boolean isNodeModulesPrepared() {
82100
}
83101
});
84102
}
103+
104+
@Override
105+
public String toString() {
106+
return String.format(
107+
"NodeServerLayout[nodeModulesDir=%s, packageJsonFile=%s, serveJsFile=%s, npmrcFile=%s]",
108+
this.nodeModulesDir,
109+
this.packageJsonFile,
110+
this.serveJsFile,
111+
this.npmrcFile);
112+
}
85113
}

lib/src/main/java/com/diffplug/spotless/npm/NpmFormatterStepStateBase.java

Lines changed: 8 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -56,17 +56,13 @@ protected NpmFormatterStepStateBase(String stepName, NpmConfig npmConfig, NpmFor
5656
this.stepName = requireNonNull(stepName);
5757
this.npmConfig = requireNonNull(npmConfig);
5858
this.locations = locations;
59-
String stateSuffix = stateSuffix();
60-
logger.info("Creating {} with name {} and state suffix {}", this.getClass().getSimpleName(), stepName, stateSuffix);
61-
this.nodeServerLayout = new NodeServerLayout(locations.buildDir(), stepName, stateSuffix);
62-
}
63-
64-
protected String stateSuffix() {
65-
String packageJsonContent = npmConfig.getPackageJsonContent();
66-
return NpmResourceHelper.md5(packageJsonContent);
59+
this.nodeServerLayout = new NodeServerLayout(locations.buildDir(), npmConfig.getPackageJsonContent());
6760
}
6861

6962
protected void prepareNodeServerLayout() throws IOException {
63+
final long started = System.currentTimeMillis();
64+
// maybe introduce trace logger?
65+
logger.info("Preparing {} for npm step {}.", this.nodeServerLayout, getClass().getName());
7066
NpmResourceHelper.assertDirectoryExists(nodeServerLayout.nodeModulesDir());
7167
NpmResourceHelper.writeUtf8StringToFile(nodeServerLayout.packageJsonFile(),
7268
this.npmConfig.getPackageJsonContent());
@@ -77,12 +73,14 @@ protected void prepareNodeServerLayout() throws IOException {
7773
} else {
7874
NpmResourceHelper.deleteFileIfExists(nodeServerLayout.npmrcFile());
7975
}
76+
logger.info("Prepared {} for npm step {} in {} ms.", this.nodeServerLayout, getClass().getName(), System.currentTimeMillis() - started);
8077
}
8178

8279
protected void prepareNodeServer() throws IOException {
83-
FormattedPrinter.SYSOUT.print("running npm install");
80+
final long started = System.currentTimeMillis();
81+
logger.info("running npm install in {} for npm step {}", this.nodeServerLayout.nodeModulesDir(), getClass().getName());
8482
runNpmInstall(nodeServerLayout.nodeModulesDir());
85-
FormattedPrinter.SYSOUT.print("npm install finished");
83+
logger.info("npm install finished in {} ms in {} for npm step {}", System.currentTimeMillis() - started, this.nodeServerLayout.nodeModulesDir(), getClass().getName());
8684
}
8785

8886
private void runNpmInstall(File npmProjectDir) throws IOException {

lib/src/main/resources/com/diffplug/spotless/npm/eslint-package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
{
2-
"name": "spotless-eslint-formatter-step",
2+
"name": "spotless-eslint",
33
"version": "2.0.0",
44
"description": "Spotless formatter step for running eslint as a rest service.",
55
"repository": "https://github.com/diffplug/spotless",

lib/src/main/resources/com/diffplug/spotless/npm/prettier-package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
{
2-
"name": "spotless-prettier-formatter-step",
2+
"name": "spotless-prettier",
33
"version": "2.0.0",
44
"description": "Spotless formatter step for running prettier as a rest service.",
55
"repository": "https://github.com/diffplug/spotless",

lib/src/main/resources/com/diffplug/spotless/npm/tsfmt-package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
{
2-
"name": "spotless-tsfmt-formatter-step",
2+
"name": "spotless-tsfmt",
33
"version": "2.0.0",
44
"description": "Spotless formatter step for running tsfmt as a rest service.",
55
"repository": "https://github.com/diffplug/spotless",

0 commit comments

Comments
 (0)