@turbo/codemod 2.8.3 → 2.8.4-canary.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/cli.js +4 -4
- package/dist/dist-TnfTwrBN.js +64 -0
- package/dist/{getTransformerHelpers-BY7lLRQT.js → getTransformerHelpers-B91xyNcJ.js} +1 -1
- package/dist/{loadTurboJson-D0V2OTCI.js → loadTurboJson-C0Jgw6-L.js} +1 -1
- package/dist/runner-BXVdw9eY.js +51 -0
- package/dist/transforms/add-package-manager.js +1 -1
- package/dist/transforms/add-package-names.js +1 -1
- package/dist/transforms/clean-globs.js +1 -1
- package/dist/transforms/create-turbo-config.js +1 -1
- package/dist/transforms/migrate-dot-env.js +1 -1
- package/dist/transforms/migrate-env-var-dependencies.js +1 -1
- package/dist/transforms/rename-output-mode.js +1 -1
- package/dist/transforms/rename-pipeline.js +1 -1
- package/dist/transforms/set-default-outputs.js +1 -1
- package/dist/transforms/stabilize-env-mode.js +1 -1
- package/dist/transforms/stabilize-ui.js +1 -1
- package/dist/transforms/transform-env-literals-to-wildcards.js +1 -1
- package/dist/transforms/update-schema-json-url.js +1 -1
- package/dist/transforms/update-versioned-schema-json.js +1 -1
- package/package.json +7 -9
- package/dist/dist-beJVDhbp.js +0 -64
- package/dist/runner-BbVjU0ci.js +0 -51
package/dist/cli.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
|
-
"use strict";const e=require(`./runner-
|
|
2
|
+
"use strict";const e=require(`./runner-BXVdw9eY.js`),t=require(`./dist-TnfTwrBN.js`),n=e.__toESM(require(`picocolors`)),r=e.__toESM(require(`fs-extra`)),i=e.__toESM(require(`node:fs`)),a=e.__toESM(require(`node:path`)),o=e.__toESM(require(`node:os`)),s=e.__toESM(require(`node:child_process`)),c=e.__toESM(require(`semver`)),l=e.__toESM(require(`commander`)),u=e.__toESM(require(`@inquirer/prompts`)),d=e.__toESM(require(`is-git-clean`));var f=`@turbo/codemod`,p=`2.8.4-canary.0`,m=`Provides Codemod transformations to help upgrade your Turborepo codebase when a feature is deprecated.`,h=`https://turborepo.dev`,g=`MIT`,_={type:`git`,url:`https://github.com/vercel/turborepo`,directory:`packages/turbo-codemod`},v={url:`https://github.com/vercel/turborepo/issues`},y=`dist/cli.js`,b={build:`tsdown`,test:`jest`,"check-types":`tsc --noEmit`,"add-transformer":`plop`,"lint:prettier":`prettier -c . --cache --ignore-path=../../.prettierignore`},x={commander:`9.5.0`,diff:`5.2.2`,"find-up":`4.1.0`,"fs-extra":`10.1.0`,"gradient-string":`2.0.1`,"@inquirer/prompts":`^7.10.1`,json5:`2.2.3`,"is-git-clean":`1.1.0`,ora:`4.1.1`,picocolors:`1.0.1`,semver:`7.5.0`,"update-check":`1.5.4`},S={"@jest/globals":`30.2.0`,"@turbo/gen":`workspace:*`,"@turbo/test-utils":`workspace:*`,"@turbo/tsconfig":`workspace:*`,"@turbo/types":`workspace:*`,"@turbo/utils":`workspace:*`,"@turbo/workspaces":`workspace:*`,"@types/diff":`5.0.2`,"@types/fs-extra":`9.0.13`,"@types/gradient-string":`1.1.2`,"@types/node":`18.17.4`,"@types/semver":`7.3.12`,"@types/uuid":`9.0.0`,deepmerge:`4.2.2`,jest:`30.2.0`,plop:`3.1.1`,semver:`7.5.0`,"ts-jest":`29.4.6`,tsdown:`0.9.3`,typescript:`5.5.4`},C=[`dist`],w={access:`public`},T={name:f,version:p,description:m,homepage:h,license:g,repository:_,bugs:v,bin:y,scripts:b,dependencies:x,devDependencies:S,files:C,publishConfig:w};function E({directory:t,force:r}){let i=!1,a=`Unable to determine if git directory is clean`;try{i=d.default.sync(t||process.cwd()),a=`Git directory is not clean`}catch(e){let t=e;t.stderr?.includes(`not a git repository`)&&(i=!0)}i||(r?e.log(`${n.default.yellow(`WARNING`)}: ${a}. Forcibly continuing...`):(e.log(`Thank you for using @turbo/codemod!`),e.log(n.default.yellow(`
|
|
3
3
|
But before we continue, please stash or commit your git changes.`)),e.log(`
|
|
4
|
-
You may use the --force flag to override this safety check.`),process.exit(1)))}function D({directory:e}){let t=a.default.isAbsolute(e)?e:a.default.join(process.cwd(),e);return{exists:i.default.existsSync(t),absolute:t}}const O=[`package.json`,`turbo.json`,`.git`];function k({directory:e}){return O.some(t=>r.default.existsSync(a.default.join(e,t)))}function A(e,t,n){try{let n=(0,s.execSync)(e,{stdio:`pipe`,...t});return n.toString(`utf8`).trim()}catch{return n||void 0}}function j(e,t){let{from:n}=t;if(n)return n;let r=A(`turbo --version`,{cwd:e.paths.root});if(r)return r;let{packageManager:i}=e;return A(i===`yarn`?`yarn turbo --version`:i===`pnpm`?`pnpm turbo --version`:`npm exec -c 'turbo --version'`,{cwd:e.paths.root})}const M=`https://registry.npmjs.org`;async function N({packageName:e}){let t=process.env.npm_config_registry?.replace(/\/$/,``)||M;try{let n=await fetch(`${t}/${e}`);if(!n.ok)throw Error(`HTTP ${n.status}`);return await n.json()}catch{throw Error(`Unable to fetch the latest version of ${e}`)}}async function P({to:e}){let t=await N({packageName:`turbo`}),{"dist-tags":n,versions:r}=t;if(e){if(n[e]||e in r)return e;throw Error(`turbo@${e} does not exist`)}return n.latest}const F=process.env.NODE_ENV===`test`?a.default.join(__dirname,`../transforms`):a.default.join(__dirname,`./transforms`);function I(){let e=r.default.readdirSync(F);return e.map(e=>{let t=a.default.join(F,e);try{let e=require(t);return e.default}catch{return}}).filter(Boolean)}function L({fromVersion:e,toVersion:t}){let n=e.split(`.`)[0],r=n!==t.split(`.`)[0],i=r?`${n}.0.0`:e,a=I().filter(n=>{let r=(0,c.gt)(n.introducedIn,e)&&(0,c.lte)(n.introducedIn,t),a=(n.idempotent??!0)&&(0,c.gt)(n.introducedIn,i)&&(0,c.lte)(n.introducedIn,t);return r||a});return a.sort((e,t)=>(0,c.gt)(e.introducedIn,t.introducedIn)?1:(0,c.eq)(e.introducedIn,t.introducedIn)?0:-1),a}function R(e,t=`latest`){switch(e){case`yarn`:return`yarn global add turbo@${t}`;case`npm`:return`npm install turbo@${t} --global`;case`pnpm`:return`pnpm add turbo@${t} --global`;case`bun`:return`bun add turbo@${t} --global`}}function z({packageManager:e,packageManagerVersion:t,installType:n,isUsingWorkspaces:r,to:i=`latest`}){let a=e=>e.filter(Boolean).join(` `);switch(e){case`yarn`:return(0,c.gte)(t,`2.0.0`)?a([`yarn`,`add`,`turbo@${i}`,n===`devDependencies`&&`--dev`]):a([`yarn`,`add`,`turbo@${i}`,n===`devDependencies`&&`--dev`,r&&`-W`]);case`npm`:return a([`npm`,`install`,`turbo@${i}`,n===`devDependencies`&&`--save-dev`]);case`pnpm`:return a([`pnpm`,`add`,`turbo@${i}`,n===`devDependencies`&&`--save-dev`,r&&`-w`]);case`bun`:return a([`bun`,`add`,`turbo@${i}`,n===`devDependencies`&&`--dev`])}}function B({root:t}){let n=a.default.join(t,`package.json`);if(!r.default.existsSync(n)){e.error(`Unable to find package.json at ${n}`);return}let i=r.default.readJsonSync(n),o=i.devDependencies&&`turbo`in i.devDependencies,s=i.dependencies&&`turbo`in i.dependencies;if(s||o)return s?`dependencies`:`devDependencies`}async function V({project:t,to:n}){let r=A(`turbo bin`,{cwd:t.paths.root,stdio:`pipe`}),i=await e.getPackageManagersBinPaths(),a=Object.keys(i).find(e=>{let t=i[e];return t&&r?r.includes(t):!1});if(r&&a)return R(a,n);let{packageManager:o}=t,s=t.workspaceData.globs.length>0,c=B({root:t.paths.root}),l=await e.getAvailablePackageManagers(),u=l[o];if(u&&c)return z({packageManager:o,packageManagerVersion:u,installType:c,isUsingWorkspaces:s,to:n})}function H({project:e}){try{let t={cwd:e.paths.root,stdio:`ignore`},n=A(`turbo bin`,t);if(n)A(`turbo daemon stop`,t);else{let n=`${e.packageManager} turbo daemon stop`;e.packageManager===`npm`&&(n=`npm exec -c 'turbo daemon stop'`),A(n,t)}}catch{}}function U({message:t,success:r}){return r?(e.bold(n.default.green(`Migration completed`)),t&&e.log(t),process.exit(0)):(e.bold(n.default.red(`Migration failed`)),t&&e.log(t),process.exit(1))}async function W(r,i){i.dryRun||E({directory:r,force:i.force});let a=await(0,u.
|
|
5
|
-
`)),process.exit(0);i.dryRun||E({directory:r,force:i.force});let o=await(0,u.
|
|
6
|
-
`)),process.exit(1);let
|
|
4
|
+
You may use the --force flag to override this safety check.`),process.exit(1)))}function D({directory:e}){let t=a.default.isAbsolute(e)?e:a.default.join(process.cwd(),e);return{exists:i.default.existsSync(t),absolute:t}}const O=[`package.json`,`turbo.json`,`.git`];function k({directory:e}){return O.some(t=>r.default.existsSync(a.default.join(e,t)))}function A(e,t,n){try{let n=(0,s.execSync)(e,{stdio:`pipe`,...t});return n.toString(`utf8`).trim()}catch{return n||void 0}}function j(e,t){let{from:n}=t;if(n)return n;let r=A(`turbo --version`,{cwd:e.paths.root});if(r)return r;let{packageManager:i}=e;return A(i===`yarn`?`yarn turbo --version`:i===`pnpm`?`pnpm turbo --version`:`npm exec -c 'turbo --version'`,{cwd:e.paths.root})}const M=`https://registry.npmjs.org`;async function N({packageName:e}){let t=process.env.npm_config_registry?.replace(/\/$/,``)||M;try{let n=await fetch(`${t}/${e}`);if(!n.ok)throw Error(`HTTP ${n.status}`);return await n.json()}catch{throw Error(`Unable to fetch the latest version of ${e}`)}}async function P({to:e}){let t=await N({packageName:`turbo`}),{"dist-tags":n,versions:r}=t;if(e){if(n[e]||e in r)return e;throw Error(`turbo@${e} does not exist`)}return n.latest}const F=process.env.NODE_ENV===`test`?a.default.join(__dirname,`../transforms`):a.default.join(__dirname,`./transforms`);function I(){let e=r.default.readdirSync(F);return e.map(e=>{let t=a.default.join(F,e);try{let e=require(t);return e.default}catch{return}}).filter(Boolean)}function L({fromVersion:e,toVersion:t}){let n=e.split(`.`)[0],r=n!==t.split(`.`)[0],i=r?`${n}.0.0`:e,a=I().filter(n=>{let r=(0,c.gt)(n.introducedIn,e)&&(0,c.lte)(n.introducedIn,t),a=(n.idempotent??!0)&&(0,c.gt)(n.introducedIn,i)&&(0,c.lte)(n.introducedIn,t);return r||a});return a.sort((e,t)=>(0,c.gt)(e.introducedIn,t.introducedIn)?1:(0,c.eq)(e.introducedIn,t.introducedIn)?0:-1),a}function R(e,t=`latest`){switch(e){case`yarn`:return`yarn global add turbo@${t}`;case`npm`:return`npm install turbo@${t} --global`;case`pnpm`:return`pnpm add turbo@${t} --global`;case`bun`:return`bun add turbo@${t} --global`}}function z({packageManager:e,packageManagerVersion:t,installType:n,isUsingWorkspaces:r,to:i=`latest`}){let a=e=>e.filter(Boolean).join(` `);switch(e){case`yarn`:return(0,c.gte)(t,`2.0.0`)?a([`yarn`,`add`,`turbo@${i}`,n===`devDependencies`&&`--dev`]):a([`yarn`,`add`,`turbo@${i}`,n===`devDependencies`&&`--dev`,r&&`-W`]);case`npm`:return a([`npm`,`install`,`turbo@${i}`,n===`devDependencies`&&`--save-dev`]);case`pnpm`:return a([`pnpm`,`add`,`turbo@${i}`,n===`devDependencies`&&`--save-dev`,r&&`-w`]);case`bun`:return a([`bun`,`add`,`turbo@${i}`,n===`devDependencies`&&`--dev`])}}function B({root:t}){let n=a.default.join(t,`package.json`);if(!r.default.existsSync(n)){e.error(`Unable to find package.json at ${n}`);return}let i=r.default.readJsonSync(n),o=i.devDependencies&&`turbo`in i.devDependencies,s=i.dependencies&&`turbo`in i.dependencies;if(s||o)return s?`dependencies`:`devDependencies`}async function V({project:t,to:n}){let r=A(`turbo bin`,{cwd:t.paths.root,stdio:`pipe`}),i=await e.getPackageManagersBinPaths(),a=Object.keys(i).find(e=>{let t=i[e];return t&&r?r.includes(t):!1});if(r&&a)return R(a,n);let{packageManager:o}=t,s=t.workspaceData.globs.length>0,c=B({root:t.paths.root}),l=await e.getAvailablePackageManagers(),u=l[o];if(u&&c)return z({packageManager:o,packageManagerVersion:u,installType:c,isUsingWorkspaces:s,to:n})}function H({project:e}){try{let t={cwd:e.paths.root,stdio:`ignore`},n=A(`turbo bin`,t);if(n)A(`turbo daemon stop`,t);else{let n=`${e.packageManager} turbo daemon stop`;e.packageManager===`npm`&&(n=`npm exec -c 'turbo daemon stop'`),A(n,t)}}catch{}}function U({message:t,success:r}){return r?(e.bold(n.default.green(`Migration completed`)),t&&e.log(t),process.exit(0)):(e.bold(n.default.red(`Migration failed`)),t&&e.log(t),process.exit(1))}async function W(r,i){i.dryRun||E({directory:r,force:i.force});let a=r;a||(a=await(0,u.input)({message:`Where is the root of the repo to migrate?`,default:`.`,validate:e=>{let{exists:t,absolute:r}=D({directory:e});return t?!0:`Directory ${n.default.dim(`(${r})`)} does not exist`},transformer:e=>e.trim()}),a=a.trim());let{exists:c,absolute:l}=D({directory:a});if(!c)return U({success:!1,message:`Directory ${n.default.dim(`(${l})`)} does not exist`});if(!k({directory:l}))return U({success:!1,message:`Directory (${n.default.dim(l)}) does not appear to be a repository`});let d;try{d=await(0,t.import_dist.getWorkspaceDetails)({root:l})}catch{return U({success:!1,message:`Unable to read determine package manager details from ${n.default.dim(l)}`})}let f=j(d,i);if(!f)return U({success:!1,message:`Unable to infer the version of turbo being used by ${d.name}`});let p=i.to;try{p=await P(i)}catch(e){let t=`UNKNOWN_ERROR`;return e instanceof Error&&(t=e.message),U({success:!1,message:t})}if(!p)return U({success:!1,message:`Unable to fetch the latest version of turbo`});if(f===p)return U({success:!0,message:`Nothing to do, current version (${n.default.bold(f)}) is the same as the requested version (${n.default.bold(p)})`});let m=L({fromVersion:f,toVersion:p});m.length===0&&e.log(`No codemods required to migrate from ${f} to ${p}`,o.default.EOL),i.dryRun||H({project:d}),e.log(`Upgrading turbo from ${n.default.bold(f)} to ${n.default.bold(p)} (${m.length===0?`no codemods required`:`${m.length} required codemod${m.length===1?``:`s`}`})`,o.default.EOL);let h=[];for(let[t,r]of m.entries()){e.log(`(${t+1}/${m.length}) ${n.default.bold(`Running ${r.name}`)}`);let a=await r.transformer({root:d.paths.root,options:{...i,toVersion:p}});e.Runner.logResults(a),h.push(a)}let g=h.some(e=>e.fatalError||Object.keys(e.changes).some(t=>e.changes[t].error));if(g)return U({success:!1,message:`Could not complete migration due to codemod errors. Please fix the errors and try again.`});let _=await V({project:d,to:i.to});if(!_)return U({success:!1,message:`Unable to determine upgrade command`});if(i.install)if(i.dryRun)e.log(`Upgrading turbo with ${n.default.bold(_)} ${n.default.dim(`(dry run)`)}`,o.default.EOL);else{e.log(`Upgrading turbo with ${n.default.bold(_)}`,o.default.EOL);try{(0,s.execSync)(_,{stdio:`pipe`,cwd:d.paths.root})}catch(e){return U({success:!1,message:`Unable to upgrade turbo: ${String(e)}`})}}else e.log(`Upgrade turbo with ${n.default.bold(_)}`,o.default.EOL);U({success:!0})}async function G(t,r,i){let a=I();if(i.list)return e.log(a.map(e=>`- ${n.default.cyan(e.name)}`).join(`
|
|
5
|
+
`)),process.exit(0);i.dryRun||E({directory:r,force:i.force});let o=r;o||(o=await(0,u.input)({message:`Where is the root of the repo where the transform should run?`,default:`.`,validate:e=>{let{exists:t,absolute:r}=D({directory:e});return t?!0:`Directory ${n.default.dim(`(${r})`)} does not exist`},transformer:e=>e.trim()}),o=o.trim());let s=t;s||=await(0,u.select)({message:`Which transform would you like to apply?`,choices:a.map(e=>({name:`${n.default.bold(e.name)} - ${n.default.gray(e.description)} ${n.default.gray(`(${e.introducedIn})`)}`,value:e.name}))});let{exists:c,absolute:l}=D({directory:o});if(!c)return e.error(`Directory ${n.default.dim(`(${l})`)} does not exist`),process.exit(1);let d=a.map(e=>e.name),f=a.find(e=>e.name===s);if(!f)return e.error(`Invalid transform choice ${n.default.dim(`(${t})`)}, pick one of:`),e.error(d.map(e=>`- ${e}`).join(`
|
|
6
|
+
`)),process.exit(1);let p=await f.transformer({root:l,options:i});if(p.fatalError)return process.exit(1);e.Runner.logResults(p)}const K=e.createNotifyUpdate({packageInfo:T,upgradeCommand:async()=>{try{let{packageManager:e}=await(0,t.import_dist.getWorkspaceDetails)({root:process.cwd()});return e===`yarn`?`yarn global add @turbo/codemod`:e===`pnpm`?`pnpm i -g @turbo/codemod`:`npm i -g @turbo/codemod`}catch{return`npm i -g @turbo/codemod`}}}),q=new l.Command;q.name(`@turbo/codemod`).description(`Codemod transformations to help upgrade your Turborepo codebase when a feature is deprecated.`).version(T.version,`-v, --version`,`output the current version`),q.command(`migrate`).aliases([`update`,`upgrade`]).description(`Migrate a project to the latest version of Turborepo`).argument(`[path]`,`Directory where the transforms should be applied`).option(`--from <version>`,`Specify the version to migrate from (default: current version)`).option(`--to <version>`,`Specify the version to migrate to (default: latest)`).option(`--install`,`Install new version of turbo after migration`,!0).option(`--force`,`Bypass Git safety checks and forcibly run codemods`,!1).option(`--dry, --dry-run, -d`,`Dry run (no changes are made to files)`,!1).option(`--print`,`Print transformed files to your terminal`,!1).action(W),q.command(`transform`,{isDefault:!0}).description(`Apply a single code transformation to a project`).argument(`[transform]`,`The transformer to run`).argument(`[path]`,`Directory where the transforms should be applied`).option(`--force`,`Bypass Git safety checks and forcibly run codemods`,!1).option(`--list`,`List all available transforms`,!1).option(`--dry, --dry-run, -d`,`Dry run (no changes are made to files)`,!1).option(`--print`,`Print transformed files to your terminal`,!1).action(G),q.parseAsync().then(()=>K()).catch(async t=>{e.log(),e.log(n.default.red(`Unexpected error. Please report it as a bug:`)),e.log(t),e.log(),await K(1)});
|