From d570bb4946668d919b7a0b7dfb02f8c114c99bc0 Mon Sep 17 00:00:00 2001 From: James Henry Date: Fri, 30 Sep 2022 01:03:15 +0400 Subject: [PATCH] feat(version): apply prettier to updated files, if applicable (#3348) --- .../version-command.test.js.snap | 30 ++++++++++-- commands/version/lib/git-add.js | 47 +++++++++++++++++-- commands/version/package.json | 1 + package-lock.json | 2 + 4 files changed, 72 insertions(+), 8 deletions(-) diff --git a/commands/version/__tests__/__snapshots__/version-command.test.js.snap b/commands/version/__tests__/__snapshots__/version-command.test.js.snap index bafde0d9a05..ca0698714a6 100644 --- a/commands/version/__tests__/__snapshots__/version-command.test.js.snap +++ b/commands/version/__tests__/__snapshots__/version-command.test.js.snap @@ -67,9 +67,13 @@ diff --git a/lerna.json b/lerna.json index SHA..SHA 100644 --- a/lerna.json +++ b/lerna.json -@@ -2 +2 @@ +@@ -2,4 +2,2 @@ - \\"version\\": \\"1.0.0\\", +- \\"packages\\": [ +- \\"packages/*\\" +- ] + \\"version\\": \\"1.0.1\\", ++ \\"packages\\": [\\"packages/*\\"] diff --git a/packages/package-1/package.json b/packages/package-1/package.json index SHA..SHA 100644 --- a/packages/package-1/package.json @@ -138,9 +142,13 @@ diff --git a/lerna.json b/lerna.json index SHA..SHA 100644 --- a/lerna.json +++ b/lerna.json -@@ -2 +2 @@ +@@ -2,4 +2,2 @@ - \\"version\\": \\"1.0.0\\", +- \\"packages\\": [ +- \\"packages/*\\" +- ] + \\"version\\": \\"1.0.1\\", ++ \\"packages\\": [\\"packages/*\\"] diff --git a/packages/package-1/package.json b/packages/package-1/package.json index SHA..SHA 100644 --- a/packages/package-1/package.json @@ -277,9 +285,13 @@ diff --git a/lerna.json b/lerna.json index SHA..SHA 100644 --- a/lerna.json +++ b/lerna.json -@@ -2 +2 @@ +@@ -2,4 +2,2 @@ - \\"version\\": \\"1.0.0\\", +- \\"packages\\": [ +- \\"packages/*\\" +- ] + \\"version\\": \\"2.0.0\\", ++ \\"packages\\": [\\"packages/*\\"] diff --git a/packages/package-1/package.json b/packages/package-1/package.json index SHA..SHA 100644 --- a/packages/package-1/package.json @@ -338,9 +350,13 @@ diff --git a/lerna.json b/lerna.json index SHA..SHA 100644 --- a/lerna.json +++ b/lerna.json -@@ -2 +2 @@ +@@ -2,4 +2,2 @@ - \\"version\\": \\"1.0.0\\", +- \\"packages\\": [ +- \\"packages/*\\" +- ] + \\"version\\": \\"1.1.0\\", ++ \\"packages\\": [\\"packages/*\\"] diff --git a/packages/package-3/package.json b/packages/package-3/package.json index SHA..SHA 100644 --- a/packages/package-3/package.json @@ -359,9 +375,13 @@ diff --git a/lerna.json b/lerna.json index SHA..SHA 100644 --- a/lerna.json +++ b/lerna.json -@@ -2 +2 @@ +@@ -2,4 +2,2 @@ - \\"version\\": \\"1.0.0\\", +- \\"packages\\": [ +- \\"packages/*\\" +- ] + \\"version\\": \\"1.0.1\\", ++ \\"packages\\": [\\"packages/*\\"] diff --git a/packages/package-1/package.json b/packages/package-1/package.json index SHA..SHA 100644 --- a/packages/package-1/package.json diff --git a/commands/version/lib/git-add.js b/commands/version/lib/git-add.js index e3942e762bf..d24f8ca3b3d 100644 --- a/commands/version/lib/git-add.js +++ b/commands/version/lib/git-add.js @@ -1,22 +1,63 @@ "use strict"; +const fs = require("fs"); const log = require("npmlog"); const path = require("path"); const slash = require("slash"); +const { workspaceRoot } = require("@nrwl/devkit"); const childProcess = require("@lerna/child-process"); module.exports.gitAdd = gitAdd; +let resolvedPrettier; +function resolvePrettier() { + if (!resolvedPrettier) { + try { + // If the workspace has prettier installed, apply it to the updated files + const prettierPath = path.join(workspaceRoot, "node_modules", "prettier"); + // eslint-disable-next-line import/no-dynamic-require, global-require + resolvedPrettier = require(prettierPath); + } catch { + return; + } + } + return resolvedPrettier; +} + +function maybeFormatFile(filePath) { + const prettier = resolvePrettier(); + if (!prettier) { + return; + } + const config = resolvedPrettier.resolveConfig.sync(filePath); + try { + const input = fs.readFileSync(filePath, "utf8"); + fs.writeFileSync(filePath, resolvedPrettier.format(input, { ...config, filepath: filePath }), "utf8"); + log.silly("version", `Successfully applied prettier to updated file: ${filePath}`); + } catch { + log.silly("version", `Failed to apply prettier to updated file: ${filePath}`); + } +} + /** * @param {string[]} changedFiles * @param {{ granularPathspec: boolean; }} gitOpts * @param {import("@lerna/child-process").ExecOpts} execOpts */ function gitAdd(changedFiles, gitOpts, execOpts) { + let files = []; + for (const file of changedFiles) { + const filePath = slash(path.relative(execOpts.cwd, path.resolve(execOpts.cwd, file))); + maybeFormatFile(filePath); + if (gitOpts.granularPathspec) { + files.push(filePath); + } + } + // granular pathspecs should be relative to the git root, but that isn't necessarily where lerna lives - const files = gitOpts.granularPathspec - ? changedFiles.map((file) => slash(path.relative(execOpts.cwd, path.resolve(execOpts.cwd, file)))) - : "."; + if (!gitOpts.granularPathspec) { + files = "."; + } log.silly("gitAdd", files); diff --git a/commands/version/package.json b/commands/version/package.json index 5d43ac43b19..419ade3bfa6 100644 --- a/commands/version/package.json +++ b/commands/version/package.json @@ -49,6 +49,7 @@ "@lerna/run-topologically": "file:../../utils/run-topologically", "@lerna/temp-write": "file:../../utils/temp-write", "@lerna/validation-error": "file:../../core/validation-error", + "@nrwl/devkit": ">=14.8.1 < 16", "chalk": "^4.1.0", "dedent": "^0.7.0", "load-json-file": "^6.2.0", diff --git a/package-lock.json b/package-lock.json index 9d40e075e41..f8d704be35d 100644 --- a/package-lock.json +++ b/package-lock.json @@ -424,6 +424,7 @@ "@lerna/run-topologically": "file:../../utils/run-topologically", "@lerna/temp-write": "file:../../utils/temp-write", "@lerna/validation-error": "file:../../core/validation-error", + "@nrwl/devkit": ">=14.8.1 < 16", "chalk": "^4.1.0", "dedent": "^0.7.0", "load-json-file": "^6.2.0", @@ -20038,6 +20039,7 @@ "@lerna/run-topologically": "file:../../utils/run-topologically", "@lerna/temp-write": "file:../../utils/temp-write", "@lerna/validation-error": "file:../../core/validation-error", + "@nrwl/devkit": ">=14.8.1 < 16", "chalk": "^4.1.0", "dedent": "^0.7.0", "load-json-file": "^6.2.0",