@turbo/codemod 1.4.7 → 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.
- package/dist/getWorkspaceImplementation.js +10 -4
- package/dist/git.js +13 -4
- package/dist/index.js +61 -15
- package/dist/logger.js +49 -0
- package/dist/runTransform.js +4 -1
- package/dist/transforms/add-package-manager.js +33 -19
- package/dist/transforms/create-turbo-config.js +28 -20
- package/dist/transforms/migrate-env-var-dependencies.js +194 -0
- package/package.json +6 -1
@@ -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(
|
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(
|
38
|
-
|
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(
|
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("
|
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(
|
48
|
-
|
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(
|
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
|
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(
|
93
|
-
|
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("
|
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(
|
145
|
-
|
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 <
|
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(
|
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(
|
264
|
-
|
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(
|
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
|
+
});
|
package/dist/runTransform.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(
|
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(
|
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(
|
40
|
-
|
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(
|
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,
|
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(
|
149
|
-
console.log(
|
150
|
-
console.log(
|
151
|
-
console.log(
|
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(
|
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",
|
49
|
-
skip("package.json",
|
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",
|
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",
|
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",
|
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",
|
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(
|
84
|
-
console.log(
|
85
|
-
console.log(
|
86
|
-
console.log(
|
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.
|
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
|
},
|