@turbo/codemod 1.4.7-canary.1 → 1.5.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -17,7 +17,10 @@ var __copyProps = (to, from, except, desc) => {
17
17
  }
18
18
  return to;
19
19
  };
20
- var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target, mod));
20
+ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
21
+ isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
22
+ mod
23
+ ));
21
24
  var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
22
25
 
23
26
  // src/getWorkspaceImplementation.ts
@@ -34,9 +37,12 @@ function getWorkspaceImplementationAndLockFile(cwd) {
34
37
  if (cache[cwd]) {
35
38
  return cache[cwd];
36
39
  }
37
- const lockFile = import_find_up.default.sync(["yarn.lock", "pnpm-workspace.yaml", "package-lock.json"], {
38
- cwd
39
- });
40
+ const lockFile = import_find_up.default.sync(
41
+ ["yarn.lock", "pnpm-workspace.yaml", "package-lock.json"],
42
+ {
43
+ cwd
44
+ }
45
+ );
40
46
  if (!lockFile) {
41
47
  return;
42
48
  }
package/dist/git.js CHANGED
@@ -17,7 +17,10 @@ var __copyProps = (to, from, except, desc) => {
17
17
  }
18
18
  return to;
19
19
  };
20
- var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target, mod));
20
+ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
21
+ isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
22
+ mod
23
+ ));
21
24
  var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
22
25
 
23
26
  // src/git.ts
@@ -35,7 +38,7 @@ function checkGitStatus(force) {
35
38
  clean = import_is_git_clean.default.sync(process.cwd());
36
39
  errorMessage = "Git directory is not clean";
37
40
  } catch (err) {
38
- if (err && err.stderr && err.stderr.indexOf("Not a git repository") >= 0) {
41
+ if (err && err.stderr && err.stderr.indexOf("not a git repository") >= 0) {
39
42
  clean = true;
40
43
  }
41
44
  }
@@ -44,8 +47,14 @@ function checkGitStatus(force) {
44
47
  console.log(`WARNING: ${errorMessage}. Forcibly continuing...`);
45
48
  } else {
46
49
  console.log("Thank you for using @turbo/codemod!");
47
- console.log(import_chalk.default.yellow("\nBut before we continue, please stash or commit your git changes."));
48
- console.log("\nYou may use the --force flag to override this safety check.");
50
+ console.log(
51
+ import_chalk.default.yellow(
52
+ "\nBut before we continue, please stash or commit your git changes."
53
+ )
54
+ );
55
+ console.log(
56
+ "\nYou may use the --force flag to override this safety check."
57
+ );
49
58
  process.exit(1);
50
59
  }
51
60
  }
package/dist/index.js CHANGED
@@ -14,7 +14,10 @@ var __copyProps = (to, from, except, desc) => {
14
14
  }
15
15
  return to;
16
16
  };
17
- var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target, mod));
17
+ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
18
+ isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
19
+ mod
20
+ ));
18
21
 
19
22
  // src/index.ts
20
23
  var import_chalk2 = __toESM(require("chalk"));
@@ -26,7 +29,7 @@ var import_update_check = __toESM(require("update-check"));
26
29
  // package.json
27
30
  var package_default = {
28
31
  name: "@turbo/codemod",
29
- version: "1.4.7-canary.0",
32
+ version: "1.4.7",
30
33
  description: "Provides Codemod transformations to help upgrade your Turborepo codebase when a feature is deprecated.",
31
34
  homepage: "https://turborepo.org",
32
35
  license: "MPL-2.0",
@@ -41,6 +44,7 @@ var package_default = {
41
44
  bin: "dist/index.js",
42
45
  scripts: {
43
46
  build: "tsup",
47
+ test: "jest",
44
48
  lint: "eslint src/**/*.ts",
45
49
  "check-types": "tsc --noEmit"
46
50
  },
@@ -64,12 +68,16 @@ var package_default = {
64
68
  "@types/fs-extra": "^9.0.13",
65
69
  "@types/gradient-string": "^1.1.2",
66
70
  "@types/inquirer": "^7.3.1",
71
+ "@types/jest": "^27.4.0",
67
72
  "@types/node": "^16.11.12",
68
73
  "@types/semver": "^7.3.9",
74
+ deepmerge: "^4.2.2",
69
75
  eslint: "^7.23.0",
76
+ jest: "^27.4.3",
70
77
  semver: "^7.3.5",
71
78
  "strip-ansi": "^6.0.1",
72
79
  tsconfig: "workspace:*",
80
+ "turbo-types": "workspace:*",
73
81
  tsup: "^5.10.3",
74
82
  typescript: "^4.5.5"
75
83
  },
@@ -89,9 +97,12 @@ function getWorkspaceImplementationAndLockFile(cwd) {
89
97
  if (cache[cwd]) {
90
98
  return cache[cwd];
91
99
  }
92
- const lockFile = import_find_up.default.sync(["yarn.lock", "pnpm-workspace.yaml", "package-lock.json"], {
93
- cwd
94
- });
100
+ const lockFile = import_find_up.default.sync(
101
+ ["yarn.lock", "pnpm-workspace.yaml", "package-lock.json"],
102
+ {
103
+ cwd
104
+ }
105
+ );
95
106
  if (!lockFile) {
96
107
  return;
97
108
  }
@@ -132,7 +143,7 @@ function checkGitStatus(force) {
132
143
  clean = import_is_git_clean.default.sync(process.cwd());
133
144
  errorMessage = "Git directory is not clean";
134
145
  } catch (err) {
135
- if (err && err.stderr && err.stderr.indexOf("Not a git repository") >= 0) {
146
+ if (err && err.stderr && err.stderr.indexOf("not a git repository") >= 0) {
136
147
  clean = true;
137
148
  }
138
149
  }
@@ -141,8 +152,14 @@ function checkGitStatus(force) {
141
152
  console.log(`WARNING: ${errorMessage}. Forcibly continuing...`);
142
153
  } else {
143
154
  console.log("Thank you for using @turbo/codemod!");
144
- console.log(import_chalk.default.yellow("\nBut before we continue, please stash or commit your git changes."));
145
- console.log("\nYou may use the --force flag to override this safety check.");
155
+ console.log(
156
+ import_chalk.default.yellow(
157
+ "\nBut before we continue, please stash or commit your git changes."
158
+ )
159
+ );
160
+ console.log(
161
+ "\nYou may use the --force flag to override this safety check."
162
+ );
146
163
  process.exit(1);
147
164
  }
148
165
  }
@@ -165,23 +182,31 @@ var help = `
165
182
  Usage:
166
183
  $ npx @turbo/codemod <transform> <path> <...options>
167
184
 
168
- If <dir> is not provided up front you will be prompted for it.
185
+ If <path> is not provided up front you will be prompted for it.
169
186
 
170
187
  Options:
171
188
  --force Bypass Git safety checks and forcibly run codemods
172
189
  --dry Dry run (no changes are made to files)
173
190
  --print Print transformed files to your terminal
191
+ --list List all codemods
174
192
  --help, -h Show this help message
175
193
  --version, -v Show the version of this script
176
194
  `;
177
195
  var TRANSFORMER_INQUIRER_CHOICES = [
178
196
  {
179
197
  name: "add-package-manager: Set the `packageManager` key in root `package.json` file",
180
- value: "add-package-manager"
198
+ value: "add-package-manager",
199
+ introducedIn: "1.1.0"
181
200
  },
182
201
  {
183
202
  name: 'create-turbo-config: Create the `turbo.json` file from an existing "turbo" key in `package.json`',
184
- value: "create-turbo-config"
203
+ value: "create-turbo-config",
204
+ introducedIn: "1.1.0"
205
+ },
206
+ {
207
+ name: 'migrate-env-var-dependencies: Migrate environment variable dependencies from "dependsOn" to "env" in `turbo.json`',
208
+ value: "migrate-env-var-dependencies",
209
+ introducedIn: "1.5.0"
185
210
  }
186
211
  ];
187
212
  run().then(notifyUpdate).catch(async (reason) => {
@@ -202,6 +227,7 @@ async function run() {
202
227
  booleanDefault: void 0,
203
228
  flags: {
204
229
  help: { type: "boolean", default: false, alias: "h" },
230
+ list: { type: "boolean", default: false },
205
231
  force: { type: "boolean", default: false },
206
232
  dry: { type: "boolean", default: false },
207
233
  print: { type: "boolean", default: false },
@@ -213,12 +239,16 @@ async function run() {
213
239
  cli.showHelp();
214
240
  if (cli.flags.version)
215
241
  cli.showVersion();
242
+ if (cli.flags.list)
243
+ listTransforms();
216
244
  if (!cli.flags.dry) {
217
245
  checkGitStatus(cli.flags.force);
218
246
  }
219
247
  if (cli.input[0] && !TRANSFORMER_INQUIRER_CHOICES.find((x) => x.value === cli.input[0])) {
220
248
  console.error("Invalid transform choice, pick one of:");
221
- console.error(TRANSFORMER_INQUIRER_CHOICES.map((x) => "- " + x.value).join("\n"));
249
+ console.error(
250
+ TRANSFORMER_INQUIRER_CHOICES.map((x) => "- " + x.value).join("\n")
251
+ );
222
252
  process.exit(1);
223
253
  }
224
254
  const answers = await import_inquirer.default.prompt([
@@ -260,15 +290,31 @@ async function notifyUpdate() {
260
290
  if (res == null ? void 0 : res.latest) {
261
291
  const ws = getWorkspaceImplementation(process.cwd());
262
292
  console.log();
263
- console.log(import_chalk2.default.yellow.bold("A new version of `@turbo/codemod` is available!"));
264
- console.log("You can update by running: " + import_chalk2.default.cyan(ws === "yarn" ? "yarn global add @turbo/codemod" : ws === "pnpm" ? "pnpm i -g @turbo/codemod" : "npm i -g @turbo/codemod"));
293
+ console.log(
294
+ import_chalk2.default.yellow.bold("A new version of `@turbo/codemod` is available!")
295
+ );
296
+ console.log(
297
+ "You can update by running: " + import_chalk2.default.cyan(
298
+ ws === "yarn" ? "yarn global add @turbo/codemod" : ws === "pnpm" ? "pnpm i -g @turbo/codemod" : "npm i -g @turbo/codemod"
299
+ )
300
+ );
265
301
  console.log();
266
302
  }
267
303
  process.exit();
268
304
  } catch (_e) {
269
305
  }
270
306
  }
307
+ function listTransforms() {
308
+ console.log(
309
+ TRANSFORMER_INQUIRER_CHOICES.map((x) => `- ${import_chalk2.default.cyan(x.value)}`).join(
310
+ "\n"
311
+ )
312
+ );
313
+ process.exit(1);
314
+ }
271
315
  function expandFilePathsIfNeeded(filesBeforeExpansion) {
272
- const shouldExpandFiles = filesBeforeExpansion.some((file) => file.includes("*"));
316
+ const shouldExpandFiles = filesBeforeExpansion.some(
317
+ (file) => file.includes("*")
318
+ );
273
319
  return shouldExpandFiles ? import_globby.default.sync(filesBeforeExpansion) : filesBeforeExpansion;
274
320
  }
package/dist/logger.js ADDED
@@ -0,0 +1,49 @@
1
+ "use strict";
2
+ var __create = Object.create;
3
+ var __defProp = Object.defineProperty;
4
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
5
+ var __getOwnPropNames = Object.getOwnPropertyNames;
6
+ var __getProtoOf = Object.getPrototypeOf;
7
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
8
+ var __export = (target, all) => {
9
+ for (var name in all)
10
+ __defProp(target, name, { get: all[name], enumerable: true });
11
+ };
12
+ var __copyProps = (to, from, except, desc) => {
13
+ if (from && typeof from === "object" || typeof from === "function") {
14
+ for (let key of __getOwnPropNames(from))
15
+ if (!__hasOwnProp.call(to, key) && key !== except)
16
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
17
+ }
18
+ return to;
19
+ };
20
+ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
21
+ isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
22
+ mod
23
+ ));
24
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
25
+
26
+ // src/logger.ts
27
+ var logger_exports = {};
28
+ __export(logger_exports, {
29
+ error: () => error,
30
+ ok: () => ok,
31
+ skip: () => skip
32
+ });
33
+ module.exports = __toCommonJS(logger_exports);
34
+ var import_chalk = __toESM(require("chalk"));
35
+ function skip(...args) {
36
+ console.log(import_chalk.default.yellow.inverse(` SKIP `), ...args);
37
+ }
38
+ function error(...args) {
39
+ console.log(import_chalk.default.red.inverse(` ERROR `), ...args);
40
+ }
41
+ function ok(...args) {
42
+ console.log(import_chalk.default.green.inverse(` OK `), ...args);
43
+ }
44
+ // Annotate the CommonJS export names for ESM import in node:
45
+ 0 && (module.exports = {
46
+ error,
47
+ ok,
48
+ skip
49
+ });
@@ -17,7 +17,10 @@ var __copyProps = (to, from, except, desc) => {
17
17
  }
18
18
  return to;
19
19
  };
20
- var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target, mod));
20
+ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
21
+ isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
22
+ mod
23
+ ));
21
24
  var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
22
25
 
23
26
  // src/runTransform.ts
@@ -17,7 +17,10 @@ var __copyProps = (to, from, except, desc) => {
17
17
  }
18
18
  return to;
19
19
  };
20
- var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target, mod));
20
+ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
21
+ isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
22
+ mod
23
+ ));
21
24
  var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
22
25
 
23
26
  // src/transforms/add-package-manager.ts
@@ -36,9 +39,12 @@ function getWorkspaceImplementationAndLockFile(cwd) {
36
39
  if (cache[cwd]) {
37
40
  return cache[cwd];
38
41
  }
39
- const lockFile = import_find_up.default.sync(["yarn.lock", "pnpm-workspace.yaml", "package-lock.json"], {
40
- cwd
41
- });
42
+ const lockFile = import_find_up.default.sync(
43
+ ["yarn.lock", "pnpm-workspace.yaml", "package-lock.json"],
44
+ {
45
+ cwd
46
+ }
47
+ );
42
48
  if (!lockFile) {
43
49
  return;
44
50
  }
@@ -86,7 +92,21 @@ var getPackageManagerVersion = (ws) => {
86
92
 
87
93
  // src/transforms/add-package-manager.ts
88
94
  var import_fs_extra = __toESM(require("fs-extra"));
95
+ var import_chalk2 = __toESM(require("chalk"));
96
+
97
+ // src/logger.ts
89
98
  var import_chalk = __toESM(require("chalk"));
99
+ function skip(...args) {
100
+ console.log(import_chalk.default.yellow.inverse(` SKIP `), ...args);
101
+ }
102
+ function error(...args) {
103
+ console.log(import_chalk.default.red.inverse(` ERROR `), ...args);
104
+ }
105
+ function ok(...args) {
106
+ console.log(import_chalk.default.green.inverse(` OK `), ...args);
107
+ }
108
+
109
+ // src/transforms/add-package-manager.ts
90
110
  function addPackageManager(files, flags) {
91
111
  if (files.length === 1) {
92
112
  const dir = files[0];
@@ -121,7 +141,10 @@ function addPackageManager(files, flags) {
121
141
  const relPackageJsonPath = import_path2.default.relative(root, packageJsonPath);
122
142
  try {
123
143
  if (pkgJson.packageManager === pkgManagerString) {
124
- skip(relPackageJsonPath, import_chalk.default.dim(`(already set to ${pkgManagerString})`));
144
+ skip(
145
+ relPackageJsonPath,
146
+ import_chalk2.default.dim(`(already set to ${pkgManagerString})`)
147
+ );
125
148
  } else {
126
149
  const newJson = { ...pkgJson, packageManager: pkgManagerString };
127
150
  if (flags.print) {
@@ -135,7 +158,7 @@ function addPackageManager(files, flags) {
135
158
  modifiedCount++;
136
159
  unmodifiedCount--;
137
160
  } else {
138
- skip(relPackageJsonPath, import_chalk.default.dim(`(dry run)`));
161
+ skip(relPackageJsonPath, import_chalk2.default.dim(`(dry run)`));
139
162
  }
140
163
  }
141
164
  } catch (err) {
@@ -145,20 +168,11 @@ function addPackageManager(files, flags) {
145
168
  }
146
169
  console.log("All done.");
147
170
  console.log("Results:");
148
- console.log(import_chalk.default.red(`${errorCount} errors`));
149
- console.log(import_chalk.default.yellow(`${skippedCount} skipped`));
150
- console.log(import_chalk.default.yellow(`${unmodifiedCount} unmodified`));
151
- console.log(import_chalk.default.green(`${modifiedCount} modified`));
171
+ console.log(import_chalk2.default.red(`${errorCount} errors`));
172
+ console.log(import_chalk2.default.yellow(`${skippedCount} skipped`));
173
+ console.log(import_chalk2.default.yellow(`${unmodifiedCount} unmodified`));
174
+ console.log(import_chalk2.default.green(`${modifiedCount} modified`));
152
175
  }
153
176
  }
154
- function skip(...args) {
155
- console.log(import_chalk.default.yellow.inverse(` SKIP `), ...args);
156
- }
157
- function error(...args) {
158
- console.log(import_chalk.default.red.inverse(` ERROR `), ...args);
159
- }
160
- function ok(...args) {
161
- console.log(import_chalk.default.green.inverse(` OK `), ...args);
162
- }
163
177
  // Annotate the CommonJS export names for ESM import in node:
164
178
  0 && (module.exports = {});
@@ -17,7 +17,10 @@ var __copyProps = (to, from, except, desc) => {
17
17
  }
18
18
  return to;
19
19
  };
20
- var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target, mod));
20
+ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
21
+ isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
22
+ mod
23
+ ));
21
24
  var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
22
25
 
23
26
  // src/transforms/create-turbo-config.ts
@@ -27,8 +30,22 @@ __export(create_turbo_config_exports, {
27
30
  });
28
31
  module.exports = __toCommonJS(create_turbo_config_exports);
29
32
  var import_fs_extra = __toESM(require("fs-extra"));
33
+ var import_chalk2 = __toESM(require("chalk"));
30
34
  var import_path = __toESM(require("path"));
35
+
36
+ // src/logger.ts
31
37
  var import_chalk = __toESM(require("chalk"));
38
+ function skip(...args) {
39
+ console.log(import_chalk.default.yellow.inverse(` SKIP `), ...args);
40
+ }
41
+ function error(...args) {
42
+ console.log(import_chalk.default.red.inverse(` ERROR `), ...args);
43
+ }
44
+ function ok(...args) {
45
+ console.log(import_chalk.default.green.inverse(` OK `), ...args);
46
+ }
47
+
48
+ // src/transforms/create-turbo-config.ts
32
49
  function createTurboConfig(files, flags) {
33
50
  if (files.length === 1) {
34
51
  const dir = files[0];
@@ -45,8 +62,8 @@ function createTurboConfig(files, flags) {
45
62
  }
46
63
  const rootPackageJson = import_fs_extra.default.readJsonSync(rootPackageJsonPath);
47
64
  if (import_fs_extra.default.existsSync(turboConfigPath)) {
48
- skip("turbo.json", import_chalk.default.dim("(already exists)"));
49
- skip("package.json", import_chalk.default.dim("(skipped)"));
65
+ skip("turbo.json", import_chalk2.default.dim("(already exists)"));
66
+ skip("package.json", import_chalk2.default.dim("(skipped)"));
50
67
  skippedCount += 2;
51
68
  } else if (rootPackageJson.hasOwnProperty("turbo")) {
52
69
  const { turbo: turboConfig, ...remainingPkgJson } = rootPackageJson;
@@ -54,22 +71,22 @@ function createTurboConfig(files, flags) {
54
71
  if (flags.print) {
55
72
  console.log(JSON.stringify(turboConfig, null, 2));
56
73
  }
57
- skip("turbo.json", import_chalk.default.dim("(dry run)"));
74
+ skip("turbo.json", import_chalk2.default.dim("(dry run)"));
58
75
  if (flags.print) {
59
76
  console.log(JSON.stringify(remainingPkgJson, null, 2));
60
77
  }
61
- skip("package.json", import_chalk.default.dim("(dry run)"));
78
+ skip("package.json", import_chalk2.default.dim("(dry run)"));
62
79
  skippedCount += 2;
63
80
  } else {
64
81
  if (flags.print) {
65
82
  console.log(JSON.stringify(turboConfig, null, 2));
66
83
  }
67
- ok("turbo.json", import_chalk.default.dim("(created)"));
84
+ ok("turbo.json", import_chalk2.default.dim("(created)"));
68
85
  import_fs_extra.default.writeJsonSync(turboConfigPath, turboConfig, { spaces: 2 });
69
86
  if (flags.print) {
70
87
  console.log(JSON.stringify(remainingPkgJson, null, 2));
71
88
  }
72
- ok("package.json", import_chalk.default.dim("(remove turbo key)"));
89
+ ok("package.json", import_chalk2.default.dim("(remove turbo key)"));
73
90
  import_fs_extra.default.writeJsonSync(rootPackageJsonPath, remainingPkgJson, { spaces: 2 });
74
91
  modifiedCount += 2;
75
92
  unmodifiedCount -= 2;
@@ -80,20 +97,11 @@ function createTurboConfig(files, flags) {
80
97
  }
81
98
  console.log("All done.");
82
99
  console.log("Results:");
83
- console.log(import_chalk.default.red(`0 errors`));
84
- console.log(import_chalk.default.yellow(`${skippedCount} skipped`));
85
- console.log(import_chalk.default.yellow(`${unmodifiedCount} unmodified`));
86
- console.log(import_chalk.default.green(`${modifiedCount} modified`));
100
+ console.log(import_chalk2.default.red(`0 errors`));
101
+ console.log(import_chalk2.default.yellow(`${skippedCount} skipped`));
102
+ console.log(import_chalk2.default.yellow(`${unmodifiedCount} unmodified`));
103
+ console.log(import_chalk2.default.green(`${modifiedCount} modified`));
87
104
  }
88
105
  }
89
- function skip(...args) {
90
- console.log(import_chalk.default.yellow.inverse(` SKIP `), ...args);
91
- }
92
- function error(...args) {
93
- console.log(import_chalk.default.red.inverse(` ERROR `), ...args);
94
- }
95
- function ok(...args) {
96
- console.log(import_chalk.default.green.inverse(` OK `), ...args);
97
- }
98
106
  // Annotate the CommonJS export names for ESM import in node:
99
107
  0 && (module.exports = {});
@@ -0,0 +1,194 @@
1
+ "use strict";
2
+ var __create = Object.create;
3
+ var __defProp = Object.defineProperty;
4
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
5
+ var __getOwnPropNames = Object.getOwnPropertyNames;
6
+ var __getProtoOf = Object.getPrototypeOf;
7
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
8
+ var __export = (target, all) => {
9
+ for (var name in all)
10
+ __defProp(target, name, { get: all[name], enumerable: true });
11
+ };
12
+ var __copyProps = (to, from, except, desc) => {
13
+ if (from && typeof from === "object" || typeof from === "function") {
14
+ for (let key of __getOwnPropNames(from))
15
+ if (!__hasOwnProp.call(to, key) && key !== except)
16
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
17
+ }
18
+ return to;
19
+ };
20
+ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
21
+ isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
22
+ mod
23
+ ));
24
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
25
+
26
+ // src/transforms/migrate-env-var-dependencies.ts
27
+ var migrate_env_var_dependencies_exports = {};
28
+ __export(migrate_env_var_dependencies_exports, {
29
+ default: () => migrateEnvVarDependencies,
30
+ hasLegacyEnvVarDependencies: () => hasLegacyEnvVarDependencies,
31
+ migrateConfig: () => migrateConfig,
32
+ migrateDependencies: () => migrateDependencies,
33
+ migrateGlobal: () => migrateGlobal,
34
+ migratePipeline: () => migratePipeline
35
+ });
36
+ module.exports = __toCommonJS(migrate_env_var_dependencies_exports);
37
+ var import_fs_extra = __toESM(require("fs-extra"));
38
+ var import_path = __toESM(require("path"));
39
+ var import_chalk2 = __toESM(require("chalk"));
40
+
41
+ // src/logger.ts
42
+ var import_chalk = __toESM(require("chalk"));
43
+ function skip(...args) {
44
+ console.log(import_chalk.default.yellow.inverse(` SKIP `), ...args);
45
+ }
46
+ function error(...args) {
47
+ console.log(import_chalk.default.red.inverse(` ERROR `), ...args);
48
+ }
49
+ function ok(...args) {
50
+ console.log(import_chalk.default.green.inverse(` OK `), ...args);
51
+ }
52
+
53
+ // src/transforms/migrate-env-var-dependencies.ts
54
+ function hasLegacyEnvVarDependencies(config) {
55
+ const dependsOn = [
56
+ config.globalDependencies,
57
+ Object.values(config.pipeline).flatMap(
58
+ (pipeline) => {
59
+ var _a;
60
+ return (_a = pipeline.dependsOn) != null ? _a : [];
61
+ }
62
+ )
63
+ ].flat();
64
+ const envVars = dependsOn.filter((dep) => dep == null ? void 0 : dep.startsWith("$"));
65
+ return { hasKeys: !!envVars.length, envVars };
66
+ }
67
+ function migrateDependencies({
68
+ env,
69
+ deps
70
+ }) {
71
+ const envDeps = new Set(env);
72
+ const otherDeps = [];
73
+ deps == null ? void 0 : deps.forEach((dep) => {
74
+ if (dep == null ? void 0 : dep.startsWith("$")) {
75
+ envDeps.add(dep.slice(1));
76
+ } else {
77
+ otherDeps.push(dep);
78
+ }
79
+ });
80
+ if (envDeps.size) {
81
+ return {
82
+ deps: otherDeps,
83
+ env: Array.from(envDeps)
84
+ };
85
+ } else {
86
+ return { env, deps };
87
+ }
88
+ }
89
+ function migratePipeline(pipeline) {
90
+ const { deps: dependsOn, env } = migrateDependencies({
91
+ env: pipeline.env,
92
+ deps: pipeline.dependsOn
93
+ });
94
+ const migratedPipeline = { ...pipeline };
95
+ if (dependsOn) {
96
+ migratedPipeline.dependsOn = dependsOn;
97
+ } else {
98
+ delete migratedPipeline.dependsOn;
99
+ }
100
+ if (env && env.length) {
101
+ migratedPipeline.env = env;
102
+ } else {
103
+ delete migratedPipeline.env;
104
+ }
105
+ return migratedPipeline;
106
+ }
107
+ function migrateGlobal(config) {
108
+ const { deps: globalDependencies, env } = migrateDependencies({
109
+ env: config.globalEnv,
110
+ deps: config.globalDependencies
111
+ });
112
+ const migratedConfig = { ...config };
113
+ if (globalDependencies) {
114
+ migratedConfig.globalDependencies = globalDependencies;
115
+ } else {
116
+ delete migratedConfig.globalDependencies;
117
+ }
118
+ if (env && env.length) {
119
+ migratedConfig.globalEnv = env;
120
+ } else {
121
+ delete migratedConfig.globalEnv;
122
+ }
123
+ return migratedConfig;
124
+ }
125
+ function migrateConfig(config) {
126
+ let migratedConfig = migrateGlobal(config);
127
+ Object.keys(config.pipeline).forEach((pipelineKey) => {
128
+ var _a, _b;
129
+ if (migratedConfig.pipeline && ((_a = config.pipeline) == null ? void 0 : _a[pipelineKey])) {
130
+ const pipeline = (_b = migratedConfig.pipeline) == null ? void 0 : _b[pipelineKey];
131
+ migratedConfig.pipeline[pipelineKey] = {
132
+ ...pipeline,
133
+ ...migratePipeline(pipeline)
134
+ };
135
+ }
136
+ });
137
+ return migratedConfig;
138
+ }
139
+ function migrateEnvVarDependencies(files, flags) {
140
+ if (files.length === 1) {
141
+ const dir = files[0];
142
+ const root = import_path.default.resolve(process.cwd(), dir);
143
+ console.log(
144
+ `Migrating environment variable dependencies from "globalDependencies" and "dependsOn" to "env" in "turbo.json"...`
145
+ );
146
+ const turboConfigPath = import_path.default.join(root, "turbo.json");
147
+ let modifiedCount = 0;
148
+ let skippedCount = 0;
149
+ let unmodifiedCount = 1;
150
+ if (!import_fs_extra.default.existsSync(turboConfigPath)) {
151
+ error(`No turbo.json found at ${root}. Is the path correct?`);
152
+ process.exit(1);
153
+ }
154
+ const rootTurboJson = import_fs_extra.default.readJsonSync(turboConfigPath);
155
+ if (hasLegacyEnvVarDependencies(rootTurboJson).hasKeys) {
156
+ if (flags.dry) {
157
+ if (flags.print) {
158
+ console.log(JSON.stringify(migrateConfig(rootTurboJson), null, 2));
159
+ }
160
+ skip("turbo.json", import_chalk2.default.dim("(dry run)"));
161
+ skippedCount += 1;
162
+ } else {
163
+ if (flags.print) {
164
+ console.log(JSON.stringify(migrateConfig(rootTurboJson), null, 2));
165
+ }
166
+ ok("turbo.json");
167
+ import_fs_extra.default.writeJsonSync(turboConfigPath, migrateConfig(rootTurboJson), {
168
+ spaces: 2
169
+ });
170
+ modifiedCount += 1;
171
+ unmodifiedCount -= 1;
172
+ }
173
+ } else {
174
+ ok(
175
+ 'no unmigrated environment variable dependencies found in "turbo.json"'
176
+ );
177
+ process.exit(0);
178
+ }
179
+ console.log("All done.");
180
+ console.log("Results:");
181
+ console.log(import_chalk2.default.red(`0 errors`));
182
+ console.log(import_chalk2.default.yellow(`${skippedCount} skipped`));
183
+ console.log(import_chalk2.default.yellow(`${unmodifiedCount} unmodified`));
184
+ console.log(import_chalk2.default.green(`${modifiedCount} modified`));
185
+ }
186
+ }
187
+ // Annotate the CommonJS export names for ESM import in node:
188
+ 0 && (module.exports = {
189
+ hasLegacyEnvVarDependencies,
190
+ migrateConfig,
191
+ migrateDependencies,
192
+ migrateGlobal,
193
+ migratePipeline
194
+ });
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@turbo/codemod",
3
- "version": "1.4.7-canary.1",
3
+ "version": "1.5.0",
4
4
  "description": "Provides Codemod transformations to help upgrade your Turborepo codebase when a feature is deprecated.",
5
5
  "homepage": "https://turborepo.org",
6
6
  "license": "MPL-2.0",
@@ -15,6 +15,7 @@
15
15
  "bin": "dist/index.js",
16
16
  "scripts": {
17
17
  "build": "tsup",
18
+ "test": "jest",
18
19
  "lint": "eslint src/**/*.ts",
19
20
  "check-types": "tsc --noEmit"
20
21
  },
@@ -38,12 +39,16 @@
38
39
  "@types/fs-extra": "^9.0.13",
39
40
  "@types/gradient-string": "^1.1.2",
40
41
  "@types/inquirer": "^7.3.1",
42
+ "@types/jest": "^27.4.0",
41
43
  "@types/node": "^16.11.12",
42
44
  "@types/semver": "^7.3.9",
45
+ "deepmerge": "^4.2.2",
43
46
  "eslint": "^7.23.0",
47
+ "jest": "^27.4.3",
44
48
  "semver": "^7.3.5",
45
49
  "strip-ansi": "^6.0.1",
46
50
  "tsconfig": "workspace:*",
51
+ "turbo-types": "workspace:*",
47
52
  "tsup": "^5.10.3",
48
53
  "typescript": "^4.5.5"
49
54
  },