@turbo/codemod 1.9.5 → 1.9.6

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 CHANGED
@@ -1,6 +1,6 @@
1
1
  #!/usr/bin/env node
2
- "use strict";var Te=Object.create;var te=Object.defineProperty;var $e=Object.getOwnPropertyDescriptor;var Me=Object.getOwnPropertyNames;var Ce=Object.getPrototypeOf,je=Object.prototype.hasOwnProperty;var Ee=(r,e,t,n)=>{if(e&&typeof e=="object"||typeof e=="function")for(let o of Me(e))!je.call(r,o)&&o!==t&&te(r,o,{get:()=>e[o],enumerable:!(n=$e(e,o))||n.enumerable});return r};var i=(r,e,t)=>(t=r!=null?Te(Ce(r)):{},Ee(e||!r||!r.__esModule?te(t,"default",{value:r,enumerable:!0}):t,r));var ee=i(require("chalk")),Pe=require("commander");var f=i(require("chalk")),x=i(require("os")),ke=i(require("inquirer")),we=require("child_process");var ie=i(require("path")),ae=require("fs-extra");var oe=i(require("find-up")),ne=i(require("path")),v={};function b({directory:r}={}){let e=r||process.cwd();if(v[e])return v[e];let t=oe.default.sync(["yarn.lock","pnpm-lock.yaml","package-lock.json"],{cwd:e});if(!!t){switch(ne.default.basename(t)){case"yarn.lock":v[e]="yarn";break;case"pnpm-lock.yaml":v[e]="pnpm";break;case"package-lock.json":v[e]="npm";break}return v[e]}}var se=require("child_process");function g(r,e,t){try{return(0,se.execSync)(r,e).toString("utf8").trim()}catch{return t||void 0}}function De(r,e){let{from:t}=e;if(t)return t;let n=g("turbo --version",{cwd:r});if(n)return n;let o=b({directory:r});if(o){if(o==="yarn")return g("yarn turbo --version",{cwd:r});if(o==="pnpm")return g("pnpm turbo --version",{cwd:r});{let s=ie.default.join(r,"node_modules",".bin","turbo");if((0,ae.existsSync)(s))return g(`${s} --version`,{cwd:r})}}}var ce=De;var le=i(require("axios")),Re="https://registry.npmjs.org";async function Ae({packageName:r}){try{return(await le.default.get(`${Re}/${r}`)).data}catch{throw new Error(`Unable to fetch the latest version of ${r}`)}}async function B({to:r}){let e=await Ae({packageName:"turbo"}),{"dist-tags":t,versions:n}=e;if(r){if(t[r]||n[r])return r;throw new Error(`turbo@${r} does not exist`)}return t.latest}var A=require("semver");var R=i(require("path")),fe=i(require("fs-extra")),me=process.env.NODE_ENV==="test"?R.default.join(__dirname,"../transforms"):R.default.join(__dirname,"./transforms");function P(){return fe.default.readdirSync(me).map(e=>{let t=R.default.join(me,e);try{return require(t).default}catch{return}}).filter(Boolean)}function Oe({fromVersion:r,toVersion:e}){return P().filter(n=>(0,A.gt)(n.introducedIn,r)&&(0,A.lte)(n.introducedIn,e))}var de=Oe;var _=i(require("chalk")),pe=i(require("is-git-clean"));function T({directory:r,force:e}){let t=!1,n="Unable to determine if git directory is clean";try{t=pe.default.sync(r||process.cwd()),n="Git directory is not clean"}catch(o){o&&o.stderr&&o.stderr.indexOf("not a git repository")>=0&&(t=!0)}t||(e?console.log(`${_.default.yellow("WARNING")}: ${n}. Forcibly continuing...`):(console.log("Thank you for using @turbo/codemod!"),console.log(_.default.yellow(`
2
+ "use strict";var Pe=Object.create;var re=Object.defineProperty;var Te=Object.getOwnPropertyDescriptor;var $e=Object.getOwnPropertyNames;var Me=Object.getPrototypeOf,Ce=Object.prototype.hasOwnProperty;var je=(r,e,t,n)=>{if(e&&typeof e=="object"||typeof e=="function")for(let o of $e(e))!Ce.call(r,o)&&o!==t&&re(r,o,{get:()=>e[o],enumerable:!(n=Te(e,o))||n.enumerable});return r};var i=(r,e,t)=>(t=r!=null?Pe(Me(r)):{},je(e||!r||!r.__esModule?re(t,"default",{value:r,enumerable:!0}):t,r));var Z=i(require("chalk")),xe=require("commander");var m=i(require("chalk")),v=i(require("os")),be=i(require("inquirer")),ke=require("child_process");var se=i(require("path")),ie=require("fs-extra");var te=i(require("find-up")),oe=i(require("path")),w={};function y({directory:r}={}){let e=r||process.cwd();if(w[e])return w[e];let t=te.default.sync(["yarn.lock","pnpm-lock.yaml","package-lock.json"],{cwd:e});if(t){switch(oe.default.basename(t)){case"yarn.lock":w[e]="yarn";break;case"pnpm-lock.yaml":w[e]="pnpm";break;case"package-lock.json":w[e]="npm";break}return w[e]}}var ne=require("child_process");function u(r,e,t){try{return(0,ne.execSync)(r,e).toString("utf8").trim()}catch{return t||void 0}}function Ee(r,e){let{from:t}=e;if(t)return t;let n=u("turbo --version",{cwd:r});if(n)return n;let o=y({directory:r});if(o){if(o==="yarn")return u("yarn turbo --version",{cwd:r});if(o==="pnpm")return u("pnpm turbo --version",{cwd:r});{let s=se.default.join(r,"node_modules",".bin","turbo");if((0,ie.existsSync)(s))return u(`${s} --version`,{cwd:r})}}}var ae=Ee;var ce=i(require("axios")),De="https://registry.npmjs.org";async function Re({packageName:r}){try{return(await ce.default.get(`${De}/${r}`)).data}catch{throw new Error(`Unable to fetch the latest version of ${r}`)}}async function q({to:r}){let e=await Re({packageName:"turbo"}),{"dist-tags":t,versions:n}=e;if(r){if(t[r]||n[r])return r;throw new Error(`turbo@${r} does not exist`)}return t.latest}var R=require("semver");var D=i(require("path")),me=i(require("fs-extra")),le=process.env.NODE_ENV==="test"?D.default.join(__dirname,"../transforms"):D.default.join(__dirname,"./transforms");function x(){return me.default.readdirSync(le).map(e=>{let t=D.default.join(le,e);try{return require(t).default}catch{return}}).filter(Boolean)}function Ae({fromVersion:r,toVersion:e}){return x().filter(n=>(0,R.gt)(n.introducedIn,r)&&(0,R.lte)(n.introducedIn,e))}var fe=Ae;var B=i(require("chalk")),de=i(require("is-git-clean"));function P({directory:r,force:e}){let t=!1,n="Unable to determine if git directory is clean";try{t=de.default.sync(r||process.cwd()),n="Git directory is not clean"}catch(o){o&&o.stderr&&o.stderr.indexOf("not a git repository")>=0&&(t=!0)}t||(e?console.log(`${B.default.yellow("WARNING")}: ${n}. Forcibly continuing...`):(console.log("Thank you for using @turbo/codemod!"),console.log(B.default.yellow(`
3
3
  But before we continue, please stash or commit your git changes.`)),console.log(`
4
- You may use the --force flag to override this safety check.`),process.exit(1)))}var J=i(require("path")),ue=i(require("fs"));function k({directory:r}){let e=J.default.isAbsolute(r)?r:J.default.join(process.cwd(),r);return{exists:ue.default.existsSync(e),absolute:e}}var U=i(require("os")),Y=i(require("path")),F=i(require("fs-extra")),ge=require("semver");var O=require("child_process");function K(r,e){switch(r){case"yarn":return(0,O.execSync)("yarn --version",{cwd:e}).toString().trim();case"pnpm":return(0,O.execSync)("pnpm --version",{cwd:e}).toString().trim();case"npm":return(0,O.execSync)("npm --version",{cwd:e}).toString().trim()}}function Ue(){return{yarn:g("yarn global bin",{cwd:U.default.tmpdir()}),npm:g("npm bin --global",{cwd:U.default.tmpdir()}),pnpm:g("pnpm bin --global",{cwd:U.default.tmpdir()})}}function Fe(r,e="latest"){switch(r){case"yarn":return`yarn global add turbo@${e}`;case"npm":return`npm install turbo@${e} --global`;case"pnpm":return`pnpm install turbo@${e} --global`}}function Se({packageManager:r,packageManagerVersion:e,installType:t,isUsingWorkspaces:n,to:o="latest"}){let s=a=>a.filter(Boolean).join(" ");switch(r){case"yarn":return(0,ge.gte)(e,"2.0.0")?s(["yarn","add",`turbo@${o}`,t==="devDependencies"&&"--dev"]):s(["yarn","add",`turbo@${o}`,t==="devDependencies"&&"--dev",n&&"-W"]);case"npm":return s(["npm","install",`turbo@${o}`,t==="devDependencies"&&"--save-dev"]);case"pnpm":return s(["pnpm","install",`turbo@${o}`,t==="devDependencies"&&"--save-dev",n&&"-w"])}}function Ie({directory:r}){let e=Y.default.join(r,"package.json"),t=Y.default.join(r,"pnpm-workspace.yaml"),n=F.default.existsSync(t);if(!F.default.existsSync(e))return console.error(`Unable to find package.json at ${e}`),{installType:void 0,isUsingWorkspaces:void 0};let o=F.default.readJsonSync(e),s=o.devDependencies&&"turbo"in o.devDependencies,a=o.dependencies&&"turbo"in o.dependencies,m="workspaces"in o||n;return a||s?{installType:a?"dependencies":"devDependencies",isUsingWorkspaces:m}:{installType:void 0,isUsingWorkspaces:m}}function H({directory:r,to:e}){let t=g("turbo bin",{cwd:r,stdio:"pipe"}),n=Ue(),o=Object.keys(n).find(s=>{let a=n[s];return a&&t?t.includes(a):!1});if(t&&o)return Fe(o,e);{let s=b({directory:r}),{installType:a,isUsingWorkspaces:m}=Ie({directory:r});if(s&&a){let d=K(s,r);return Se({packageManager:s,packageManagerVersion:d,installType:a,isUsingWorkspaces:m,to:e})}}}var j=i(require("chalk"));var S=i(require("chalk")),I=require("diff"),$=i(require("fs-extra")),he=i(require("os")),z=i(require("path")),M=class{constructor(e){this.changes=[];if(this.filePath=e.filePath,this.rootPath=e.rootPath,this.after=e.after,this.error=e.error,e.before===void 0)try{z.default.extname(e.filePath)===".json"?this.before=$.default.readJsonSync(e.filePath):this.before=$.default.readFileSync(e.filePath)}catch{this.before=""}else e.before===null?this.before="":this.before=e.before;e.after?typeof this.before=="object"||typeof e.after=="object"?this.changes=(0,I.diffJson)(this.before,e.after):this.changes=(0,I.diffLines)(this.before,e.after):this.changes=[]}fileName(){return z.default.relative(this.rootPath,this.filePath)}write(){this.after&&(typeof this.after=="object"?$.default.writeJsonSync(this.filePath,this.after,{spaces:2}):$.default.writeFileSync(this.filePath,this.after))}additions(){return this.changes.filter(e=>e.added).length}deletions(){return this.changes.filter(e=>e.removed).length}hasChanges(){return this.additions()>0||this.deletions()>0}log(e){e.diff?(this.changes.forEach(t=>{t.added?process.stdout.write(S.default.green(t.value)):t.removed?process.stdout.write(S.default.red(t.value)):process.stdout.write(S.default.dim(t.value))}),console.log(he.default.EOL)):console.log(this.after)}};var p=i(require("chalk")),C=class{constructor(e){this.transform=e.transformer,this.dry=e.dry}modified(...e){console.log(p.default.green(" MODIFIED "),...e,this.dry?p.default.dim("(dry run)"):"")}unchanged(...e){console.log(p.default.gray(" UNCHANGED "),...e,this.dry?p.default.dim("(dry run)"):"")}skipped(...e){console.log(p.default.yellow(" SKIPPED "),...e,this.dry?p.default.dim("(dry run)"):"")}error(...e){console.log(p.default.red(" ERROR "),...e,this.dry?p.default.dim("(dry run)"):"")}info(...e){console.log(p.default.bold(" INFO "),...e,this.dry?p.default.dim("(dry run)"):"")}};var Q=class{constructor(e){this.modifications={};this.transform=e.transformer,this.rootPath=e.rootPath,this.dry=e.dry,this.print=e.print,this.logger=new C(e)}abortTransform(e){return this.logger.error(e.reason),{fatalError:new Error(e.reason),changes:e.changes||{}}}modifyFile(e){this.modifications[e.filePath]=new M({rootPath:this.rootPath,...e})}finish(){let e={changes:{}};return Object.keys(this.modifications).forEach(n=>{let o=this.modifications[n],s={action:"unchanged",additions:o.additions(),deletions:o.deletions()};if(o.hasChanges()){if(this.dry)s.action="skipped",this.logger.skipped(j.default.dim(o.fileName()));else try{o.write(),s.action="modified",this.logger.modified(j.default.bold(o.fileName()))}catch(a){let m="Unknown error";a instanceof Error&&(m=a.message),s.error=new Error(m),s.action="error",this.logger.error(o.fileName(),m)}this.print&&o.log({diff:!0})}else this.logger.unchanged(j.default.dim(o.fileName()));e.changes[o.fileName()]=s}),Object.keys(e.changes).some(n=>e.changes[n].action==="error")?this.abortTransform({reason:"Encountered an error while transforming files",changes:e.changes}):e}static logResults(e){let t=Object.keys(e.changes);if(console.log(),t.length>0){console.log(j.default.bold("Results:"));let n={};t.forEach(o=>{var a;let s=e.changes[o];n[o]={action:s.action,additions:s.additions,deletions:s.deletions,error:((a=s.error)==null?void 0:a.message)||"None"}}),console.table(n),console.log()}}},E=Q;var ye=i(require("path")),be=require("fs-extra"),Ne=["package.json","turbo.json",".git"];function X({directory:r}){return Ne.some(e=>(0,be.existsSync)(ye.default.join(r,e)))}function h({message:r,success:e}){return e?(console.log(f.default.bold(f.default.green("Migration completed"))),r&&console.log(r),process.exit(0)):(console.log(f.default.bold(f.default.red("Migration failed"))),r&&console.log(r),process.exit(1))}async function N(r,e){e.dry||T({directory:r,force:e.force});let t=await ke.default.prompt([{type:"input",name:"directoryInput",message:"Where is the root of the repo to migrate?",when:!r,default:".",validate:c=>{let{exists:u,absolute:w}=k({directory:c});return u?!0:`Directory ${f.default.dim(`(${w})`)} does not exist`},filter:c=>c.trim()}]),{directoryInput:n=r}=t,{exists:o,absolute:s}=k({directory:n});if(!o)return h({success:!1,message:`Directory ${f.default.dim(`(${s})`)} does not exist`});if(!X({directory:s}))return h({success:!1,message:`Directory (${f.default.dim(s)}) does not appear to be a repository`});let a=ce(n,e);if(!a)return h({success:!1,message:`Unable to infer the version of turbo being used by ${r}`});let m=e.to;try{m=await B(e)}catch(c){let u="UNKNOWN_ERROR";return c instanceof Error&&(u=c.message),h({success:!1,message:u})}if(!m)return h({success:!1,message:"Unable to fetch the latest version of turbo"});if(a===m)return h({success:!0,message:`Nothing to do, current version (${f.default.bold(a)}) is the same as the requested version (${f.default.bold(m)})`});let d=de({fromVersion:a,toVersion:m});if(d.length===0&&console.log(`No codemods required to migrate from ${a} to ${m}`,x.default.EOL),console.log(`Upgrading turbo from ${f.default.bold(a)} to ${f.default.bold(m)} (${d.length===0?"no codemods required":`${d.length} required codemod${d.length===1?"":"s"}`})`,x.default.EOL),d.map((c,u)=>{console.log(`(${u+1}/${d.length}) ${f.default.bold(`Running ${c.value}`)}`);let w=c.transformer({root:n,options:e});return E.logResults(w),w}).some(c=>c.fatalError||Object.keys(c.changes).some(u=>c.changes[u].error)))return h({success:!1,message:"Could not complete migration due to codemod errors. Please fix the errors and try again."});let y=H({directory:n,to:e.to});if(!y)return h({success:!1,message:"Unable to determine upgrade command"});e.install?e.dry?console.log(`Upgrading turbo with ${f.default.bold(y)} ${f.default.dim("(dry run)")}`,x.default.EOL):(console.log(`Upgrading turbo with ${f.default.bold(y)}`,x.default.EOL),(0,we.execSync)(y,{cwd:n})):console.log(`Upgrade turbo with ${f.default.bold(y)}`,x.default.EOL),h({success:!0})}var D=i(require("chalk")),ve=i(require("inquirer"));async function L(r,e,t){let n=P();if(t.list)return console.log(n.map(c=>`- ${D.default.cyan(c.value)}`).join(`
5
- `)),process.exit(0);t.dry||T({directory:e,force:t.force});let o=await ve.default.prompt([{type:"input",name:"directoryInput",message:"Where is the root of the repo where the transform should run?",when:!e,default:".",validate:c=>{let{exists:u,absolute:w}=k({directory:c});return u?!0:`Directory ${D.default.dim(`(${w})`)} does not exist`},filter:c=>c.trim()},{type:"list",name:"transformerInput",message:"Which transform would you like to apply?",when:!r,pageSize:n.length,choices:n}]),{directoryInput:s=e,transformerInput:a=r}=o,{exists:m,absolute:d}=k({directory:s});if(!m)return console.error(`Directory ${D.default.dim(`(${d})`)} does not exist`),process.exit(1);let re=n.map(c=>c.value),q=n.find(c=>c.value===a);if(!q)return console.error(`Invalid transform choice ${D.default.dim(`(${r})`)}, pick one of:`),console.error(re.map(c=>`- ${c}`).join(`
6
- `)),process.exit(1);let y=q.transformer({root:d,options:t});if(y.fatalError)return process.exit(1);E.logResults(y)}var Z=i(require("chalk")),xe=i(require("update-check"));var G={name:"@turbo/codemod",version:"1.9.5",description:"Provides Codemod transformations to help upgrade your Turborepo codebase when a feature is deprecated.",homepage:"https://turbo.build/repo",license:"MPL-2.0",repository:{type:"git",url:"https://github.com/vercel/turbo",directory:"packages/turbo-codemod"},bugs:{url:"https://github.com/vercel/turbo/issues"},bin:"dist/cli.js",scripts:{build:"tsup",test:"jest",lint:"eslint src/**/*.ts","check-types":"tsc --noEmit","add-transformer":"plop"},dependencies:{axios:"0.27.2",chalk:"2.4.2",commander:"^9.5.0",diff:"^5.1.0","find-up":"4.1.0","fs-extra":"^10.0.0","gradient-string":"^2.0.0",inquirer:"^8.2.4","inquirer-file-tree-selection-prompt":"^1.0.19","is-git-clean":"^1.1.0",ora:"4.1.1",semver:"^7.3.7","update-check":"^1.5.4"},devDependencies:{"@types/chalk-animation":"^1.6.0","@types/diff":"^5.0.2","@types/fs-extra":"^9.0.13","@types/gradient-string":"^1.1.2","@types/inquirer":"^8.2.0","@types/jest":"^27.4.0","@types/node":"^16.11.12","@types/semver":"^7.3.9","@types/uuid":"^9.0.0",deepmerge:"^4.2.2",eslint:"^7.23.0",jest:"^27.4.3",plop:"^3.1.1",semver:"^7.3.5","ts-jest":"^27.1.1","@turbo/tsconfig":"workspace:*",tsup:"^5.10.3","@turbo/test-utils":"workspace:*","@turbo/types":"workspace:*","@turbo/utils":"workspace:*",typescript:"^4.5.5"},files:["dist"],publishConfig:{access:"public"}};var Ge=(0,xe.default)(G).catch(()=>null);async function V(){try{let r=await Ge;if(r!=null&&r.latest){let e=b();console.log(),console.log(Z.default.yellow.bold("A new version of `@turbo/codemod` is available!")),console.log("You can update by running: "+Z.default.cyan(e==="yarn"?"yarn global add @turbo/codemod":e==="pnpm"?"pnpm i -g @turbo/codemod":"npm i -g @turbo/codemod")),console.log()}process.exit()}catch{}}var W=new Pe.Command;W.name("@turbo/codemod").description("Codemod transformations to help upgrade your Turborepo codebase when a feature is deprecated.").version(G.version,"-v, --version","output the current version");W.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 (no changes are made to files)",!1).option("--print","Print transformed files to your terminal",!1).action(N);W.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 (no changes are made to files)",!1).option("--print","Print transformed files to your terminal",!1).action(L);W.parseAsync().then(V).catch(async r=>{console.log(),r.command?console.log(` ${ee.default.cyan(r.command)} has failed.`):(console.log(ee.default.red("Unexpected error. Please report it as a bug:")),console.log(r)),console.log(),await V(),process.exit(1)});
4
+ You may use the --force flag to override this safety check.`),process.exit(1)))}var _=i(require("path")),pe=i(require("fs"));function b({directory:r}){let e=_.default.isAbsolute(r)?r:_.default.join(process.cwd(),r);return{exists:pe.default.existsSync(e),absolute:e}}var O=i(require("os")),K=i(require("path")),U=i(require("fs-extra")),ue=require("semver");var A=require("child_process");function J(r,e){switch(r){case"yarn":return(0,A.execSync)("yarn --version",{cwd:e}).toString().trim();case"pnpm":return(0,A.execSync)("pnpm --version",{cwd:e}).toString().trim();case"npm":return(0,A.execSync)("npm --version",{cwd:e}).toString().trim()}}function Oe(){return{yarn:u("yarn global bin",{cwd:O.default.tmpdir()}),npm:u("npm bin --global",{cwd:O.default.tmpdir()}),pnpm:u("pnpm bin --global",{cwd:O.default.tmpdir()})}}function Ue(r,e="latest"){switch(r){case"yarn":return`yarn global add turbo@${e}`;case"npm":return`npm install turbo@${e} --global`;case"pnpm":return`pnpm install turbo@${e} --global`}}function Fe({packageManager:r,packageManagerVersion:e,installType:t,isUsingWorkspaces:n,to:o="latest"}){let s=a=>a.filter(Boolean).join(" ");switch(r){case"yarn":return(0,ue.gte)(e,"2.0.0")?s(["yarn","add",`turbo@${o}`,t==="devDependencies"&&"--dev"]):s(["yarn","add",`turbo@${o}`,t==="devDependencies"&&"--dev",n&&"-W"]);case"npm":return s(["npm","install",`turbo@${o}`,t==="devDependencies"&&"--save-dev"]);case"pnpm":return s(["pnpm","install",`turbo@${o}`,t==="devDependencies"&&"--save-dev",n&&"-w"])}}function Se({directory:r}){let e=K.default.join(r,"package.json"),t=K.default.join(r,"pnpm-workspace.yaml"),n=U.default.existsSync(t);if(!U.default.existsSync(e))return console.error(`Unable to find package.json at ${e}`),{installType:void 0,isUsingWorkspaces:void 0};let o=U.default.readJsonSync(e),s=o.devDependencies&&"turbo"in o.devDependencies,a=o.dependencies&&"turbo"in o.dependencies,l="workspaces"in o||n;return a||s?{installType:a?"dependencies":"devDependencies",isUsingWorkspaces:l}:{installType:void 0,isUsingWorkspaces:l}}function Y({directory:r,to:e}){let t=u("turbo bin",{cwd:r,stdio:"pipe"}),n=Oe(),o=Object.keys(n).find(s=>{let a=n[s];return a&&t?t.includes(a):!1});if(t&&o)return Ue(o,e);{let s=y({directory:r}),{installType:a,isUsingWorkspaces:l}=Se({directory:r});if(s&&a){let f=J(s,r);return Fe({packageManager:s,packageManagerVersion:f,installType:a,isUsingWorkspaces:l,to:e})}}}var C=i(require("chalk"));var F=i(require("chalk")),S=require("diff"),T=i(require("fs-extra")),ge=i(require("os")),H=i(require("path")),$=class{constructor(e){this.changes=[];if(this.filePath=e.filePath,this.rootPath=e.rootPath,this.after=e.after,this.error=e.error,e.before===void 0)try{H.default.extname(e.filePath)===".json"?this.before=T.default.readJsonSync(e.filePath):this.before=T.default.readFileSync(e.filePath)}catch{this.before=""}else e.before===null?this.before="":this.before=e.before;e.after?typeof this.before=="object"||typeof e.after=="object"?this.changes=(0,S.diffJson)(this.before,e.after):this.changes=(0,S.diffLines)(this.before,e.after):this.changes=[]}fileName(){return H.default.relative(this.rootPath,this.filePath)}write(){this.after&&(typeof this.after=="object"?T.default.writeJsonSync(this.filePath,this.after,{spaces:2}):T.default.writeFileSync(this.filePath,this.after))}additions(){return this.changes.filter(e=>e.added).length}deletions(){return this.changes.filter(e=>e.removed).length}hasChanges(){return this.additions()>0||this.deletions()>0}log(e){e.diff?(this.changes.forEach(t=>{t.added?process.stdout.write(F.default.green(t.value)):t.removed?process.stdout.write(F.default.red(t.value)):process.stdout.write(F.default.dim(t.value))}),console.log(ge.default.EOL)):console.log(this.after)}};var d=i(require("chalk")),M=class{constructor(e){this.transform=e.transformer,this.dry=e.dry}modified(...e){console.log(d.default.green(" MODIFIED "),...e,this.dry?d.default.dim("(dry run)"):"")}unchanged(...e){console.log(d.default.gray(" UNCHANGED "),...e,this.dry?d.default.dim("(dry run)"):"")}skipped(...e){console.log(d.default.yellow(" SKIPPED "),...e,this.dry?d.default.dim("(dry run)"):"")}error(...e){console.log(d.default.red(" ERROR "),...e,this.dry?d.default.dim("(dry run)"):"")}info(...e){console.log(d.default.bold(" INFO "),...e,this.dry?d.default.dim("(dry run)"):"")}};var z=class{constructor(e){this.modifications={};this.transform=e.transformer,this.rootPath=e.rootPath,this.dry=e.dry,this.print=e.print,this.logger=new M(e)}abortTransform(e){return this.logger.error(e.reason),{fatalError:new Error(e.reason),changes:e.changes||{}}}modifyFile(e){this.modifications[e.filePath]=new $({rootPath:this.rootPath,...e})}finish(){let e={changes:{}};return Object.keys(this.modifications).forEach(n=>{let o=this.modifications[n],s={action:"unchanged",additions:o.additions(),deletions:o.deletions()};if(o.hasChanges()){if(this.dry)s.action="skipped",this.logger.skipped(C.default.dim(o.fileName()));else try{o.write(),s.action="modified",this.logger.modified(C.default.bold(o.fileName()))}catch(a){let l="Unknown error";a instanceof Error&&(l=a.message),s.error=new Error(l),s.action="error",this.logger.error(o.fileName(),l)}this.print&&o.log({diff:!0})}else this.logger.unchanged(C.default.dim(o.fileName()));e.changes[o.fileName()]=s}),Object.keys(e.changes).some(n=>e.changes[n].action==="error")?this.abortTransform({reason:"Encountered an error while transforming files",changes:e.changes}):e}static logResults(e){let t=Object.keys(e.changes);if(console.log(),t.length>0){console.log(C.default.bold("Results:"));let n={};t.forEach(o=>{var a;let s=e.changes[o];n[o]={action:s.action,additions:s.additions,deletions:s.deletions,error:((a=s.error)==null?void 0:a.message)||"None"}}),console.table(n),console.log()}}},j=z;var he=i(require("path")),ye=require("fs-extra"),Ie=["package.json","turbo.json",".git"];function Q({directory:r}){return Ie.some(e=>(0,ye.existsSync)(he.default.join(r,e)))}function g({message:r,success:e}){return e?(console.log(m.default.bold(m.default.green("Migration completed"))),r&&console.log(r),process.exit(0)):(console.log(m.default.bold(m.default.red("Migration failed"))),r&&console.log(r),process.exit(1))}async function I(r,e){e.dry||P({directory:r,force:e.force});let t=await be.default.prompt([{type:"input",name:"directoryInput",message:"Where is the root of the repo to migrate?",when:!r,default:".",validate:c=>{let{exists:p,absolute:k}=b({directory:c});return p?!0:`Directory ${m.default.dim(`(${k})`)} does not exist`},filter:c=>c.trim()}]),{directoryInput:n=r}=t,{exists:o,absolute:s}=b({directory:n});if(!o)return g({success:!1,message:`Directory ${m.default.dim(`(${s})`)} does not exist`});if(!Q({directory:s}))return g({success:!1,message:`Directory (${m.default.dim(s)}) does not appear to be a repository`});let a=ae(n,e);if(!a)return g({success:!1,message:`Unable to infer the version of turbo being used by ${r}`});let l=e.to;try{l=await q(e)}catch(c){let p="UNKNOWN_ERROR";return c instanceof Error&&(p=c.message),g({success:!1,message:p})}if(!l)return g({success:!1,message:"Unable to fetch the latest version of turbo"});if(a===l)return g({success:!0,message:`Nothing to do, current version (${m.default.bold(a)}) is the same as the requested version (${m.default.bold(l)})`});let f=fe({fromVersion:a,toVersion:l});if(f.length===0&&console.log(`No codemods required to migrate from ${a} to ${l}`,v.default.EOL),console.log(`Upgrading turbo from ${m.default.bold(a)} to ${m.default.bold(l)} (${f.length===0?"no codemods required":`${f.length} required codemod${f.length===1?"":"s"}`})`,v.default.EOL),f.map((c,p)=>{console.log(`(${p+1}/${f.length}) ${m.default.bold(`Running ${c.value}`)}`);let k=c.transformer({root:n,options:e});return j.logResults(k),k}).some(c=>c.fatalError||Object.keys(c.changes).some(p=>c.changes[p].error)))return g({success:!1,message:"Could not complete migration due to codemod errors. Please fix the errors and try again."});let h=Y({directory:n,to:e.to});if(!h)return g({success:!1,message:"Unable to determine upgrade command"});e.install?e.dry?console.log(`Upgrading turbo with ${m.default.bold(h)} ${m.default.dim("(dry run)")}`,v.default.EOL):(console.log(`Upgrading turbo with ${m.default.bold(h)}`,v.default.EOL),(0,ke.execSync)(h,{cwd:n})):console.log(`Upgrade turbo with ${m.default.bold(h)}`,v.default.EOL),g({success:!0})}var E=i(require("chalk")),we=i(require("inquirer"));async function N(r,e,t){let n=x();if(t.list)return console.log(n.map(c=>`- ${E.default.cyan(c.value)}`).join(`
5
+ `)),process.exit(0);t.dry||P({directory:e,force:t.force});let o=await we.default.prompt([{type:"input",name:"directoryInput",message:"Where is the root of the repo where the transform should run?",when:!e,default:".",validate:c=>{let{exists:p,absolute:k}=b({directory:c});return p?!0:`Directory ${E.default.dim(`(${k})`)} does not exist`},filter:c=>c.trim()},{type:"list",name:"transformerInput",message:"Which transform would you like to apply?",when:!r,pageSize:n.length,choices:n}]),{directoryInput:s=e,transformerInput:a=r}=o,{exists:l,absolute:f}=b({directory:s});if(!l)return console.error(`Directory ${E.default.dim(`(${f})`)} does not exist`),process.exit(1);let ee=n.map(c=>c.value),W=n.find(c=>c.value===a);if(!W)return console.error(`Invalid transform choice ${E.default.dim(`(${r})`)}, pick one of:`),console.error(ee.map(c=>`- ${c}`).join(`
6
+ `)),process.exit(1);let h=W.transformer({root:f,options:t});if(h.fatalError)return process.exit(1);j.logResults(h)}var X=i(require("chalk")),ve=i(require("update-check"));var L={name:"@turbo/codemod",version:"1.9.6",description:"Provides Codemod transformations to help upgrade your Turborepo codebase when a feature is deprecated.",homepage:"https://turbo.build/repo",license:"MPL-2.0",repository:{type:"git",url:"https://github.com/vercel/turbo",directory:"packages/turbo-codemod"},bugs:{url:"https://github.com/vercel/turbo/issues"},bin:"dist/cli.js",scripts:{build:"tsup",test:"jest",lint:"eslint src/**/*.ts","check-types":"tsc --noEmit","add-transformer":"plop"},dependencies:{axios:"0.27.2",chalk:"2.4.2",commander:"^9.5.0",diff:"^5.1.0","find-up":"4.1.0","fs-extra":"^10.0.0","gradient-string":"^2.0.0",inquirer:"^8.2.4","inquirer-file-tree-selection-prompt":"^1.0.19","is-git-clean":"^1.1.0",ora:"4.1.1",semver:"^7.3.7","update-check":"^1.5.4"},devDependencies:{"@turbo/gen":"workspace:*","@turbo/test-utils":"workspace:*","@turbo/tsconfig":"workspace:*","@turbo/types":"workspace:*","@turbo/utils":"workspace:*","@types/chalk-animation":"^1.6.0","@types/diff":"^5.0.2","@types/fs-extra":"^9.0.13","@types/gradient-string":"^1.1.2","@types/inquirer":"^8.2.0","@types/jest":"^27.4.0","@types/node":"^16.11.12","@types/semver":"^7.3.9","@types/uuid":"^9.0.0",deepmerge:"^4.2.2",eslint:"^7.23.0",jest:"^27.4.3",plop:"^3.1.1",semver:"^7.3.5","ts-jest":"^27.1.1",tsup:"^6.7.0",typescript:"^4.5.5"},files:["dist"],publishConfig:{access:"public"}};var Le=(0,ve.default)(L).catch(()=>null);async function G(){try{let r=await Le;if(r!=null&&r.latest){let e=y();console.log(),console.log(X.default.yellow.bold("A new version of `@turbo/codemod` is available!")),console.log("You can update by running: "+X.default.cyan(e==="yarn"?"yarn global add @turbo/codemod":e==="pnpm"?"pnpm i -g @turbo/codemod":"npm i -g @turbo/codemod")),console.log()}process.exit()}catch{}}var V=new xe.Command;V.name("@turbo/codemod").description("Codemod transformations to help upgrade your Turborepo codebase when a feature is deprecated.").version(L.version,"-v, --version","output the current version");V.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 (no changes are made to files)",!1).option("--print","Print transformed files to your terminal",!1).action(I);V.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 (no changes are made to files)",!1).option("--print","Print transformed files to your terminal",!1).action(N);V.parseAsync().then(G).catch(async r=>{console.log(),r.command?console.log(` ${Z.default.cyan(r.command)} has failed.`):(console.log(Z.default.red("Unexpected error. Please report it as a bug:")),console.log(r)),console.log(),await G(),process.exit(1)});
@@ -1 +1 @@
1
- "use strict";var $=Object.create;var u=Object.defineProperty;var H=Object.getOwnPropertyDescriptor;var V=Object.getOwnPropertyNames;var W=Object.getPrototypeOf,G=Object.prototype.hasOwnProperty;var K=(r,e)=>{for(var t in e)u(r,t,{get:e[t],enumerable:!0})},j=(r,e,t,n)=>{if(e&&typeof e=="object"||typeof e=="function")for(let o of V(e))!G.call(r,o)&&o!==t&&u(r,o,{get:()=>e[o],enumerable:!(n=H(e,o))||n.enumerable});return r};var a=(r,e,t)=>(t=r!=null?$(W(r)):{},j(e||!r||!r.__esModule?u(t,"default",{value:r,enumerable:!0}):t,r)),_=r=>j(u({},"__esModule",{value:!0}),r);var X={};K(X,{default:()=>Q,transformer:()=>O});module.exports=_(X);var N=a(require("path")),J=a(require("fs-extra"));var v=a(require("find-up")),S=a(require("path")),m={};function P({directory:r}={}){let e=r||process.cwd();if(m[e])return m[e];let t=v.default.sync(["yarn.lock","pnpm-lock.yaml","package-lock.json"],{cwd:e});if(!!t){switch(S.default.basename(t)){case"yarn.lock":m[e]="yarn";break;case"pnpm-lock.yaml":m[e]="pnpm";break;case"package-lock.json":m[e]="npm";break}return m[e]}}var y=require("child_process");function w(r,e){switch(r){case"yarn":return(0,y.execSync)("yarn --version",{cwd:e}).toString().trim();case"pnpm":return(0,y.execSync)("pnpm --version",{cwd:e}).toString().trim();case"npm":return(0,y.execSync)("npm --version",{cwd:e}).toString().trim()}}var p=a(require("chalk"));var k=a(require("chalk")),b=require("diff"),d=a(require("fs-extra")),x=a(require("os")),R=a(require("path")),h=class{constructor(e){this.changes=[];if(this.filePath=e.filePath,this.rootPath=e.rootPath,this.after=e.after,this.error=e.error,e.before===void 0)try{R.default.extname(e.filePath)===".json"?this.before=d.default.readJsonSync(e.filePath):this.before=d.default.readFileSync(e.filePath)}catch{this.before=""}else e.before===null?this.before="":this.before=e.before;e.after?typeof this.before=="object"||typeof e.after=="object"?this.changes=(0,b.diffJson)(this.before,e.after):this.changes=(0,b.diffLines)(this.before,e.after):this.changes=[]}fileName(){return R.default.relative(this.rootPath,this.filePath)}write(){this.after&&(typeof this.after=="object"?d.default.writeJsonSync(this.filePath,this.after,{spaces:2}):d.default.writeFileSync(this.filePath,this.after))}additions(){return this.changes.filter(e=>e.added).length}deletions(){return this.changes.filter(e=>e.removed).length}hasChanges(){return this.additions()>0||this.deletions()>0}log(e){e.diff?(this.changes.forEach(t=>{t.added?process.stdout.write(k.default.green(t.value)):t.removed?process.stdout.write(k.default.red(t.value)):process.stdout.write(k.default.dim(t.value))}),console.log(x.default.EOL)):console.log(this.after)}};var i=a(require("chalk")),l=class{constructor(e){this.transform=e.transformer,this.dry=e.dry}modified(...e){console.log(i.default.green(" MODIFIED "),...e,this.dry?i.default.dim("(dry run)"):"")}unchanged(...e){console.log(i.default.gray(" UNCHANGED "),...e,this.dry?i.default.dim("(dry run)"):"")}skipped(...e){console.log(i.default.yellow(" SKIPPED "),...e,this.dry?i.default.dim("(dry run)"):"")}error(...e){console.log(i.default.red(" ERROR "),...e,this.dry?i.default.dim("(dry run)"):"")}info(...e){console.log(i.default.bold(" INFO "),...e,this.dry?i.default.dim("(dry run)"):"")}};var T=class{constructor(e){this.modifications={};this.transform=e.transformer,this.rootPath=e.rootPath,this.dry=e.dry,this.print=e.print,this.logger=new l(e)}abortTransform(e){return this.logger.error(e.reason),{fatalError:new Error(e.reason),changes:e.changes||{}}}modifyFile(e){this.modifications[e.filePath]=new h({rootPath:this.rootPath,...e})}finish(){let e={changes:{}};return Object.keys(this.modifications).forEach(n=>{let o=this.modifications[n],s={action:"unchanged",additions:o.additions(),deletions:o.deletions()};if(o.hasChanges()){if(this.dry)s.action="skipped",this.logger.skipped(p.default.dim(o.fileName()));else try{o.write(),s.action="modified",this.logger.modified(p.default.bold(o.fileName()))}catch(f){let g="Unknown error";f instanceof Error&&(g=f.message),s.error=new Error(g),s.action="error",this.logger.error(o.fileName(),g)}this.print&&o.log({diff:!0})}else this.logger.unchanged(p.default.dim(o.fileName()));e.changes[o.fileName()]=s}),Object.keys(e.changes).some(n=>e.changes[n].action==="error")?this.abortTransform({reason:"Encountered an error while transforming files",changes:e.changes}):e}static logResults(e){let t=Object.keys(e.changes);if(console.log(),t.length>0){console.log(p.default.bold("Results:"));let n={};t.forEach(o=>{var f;let s=e.changes[o];n[o]={action:s.action,additions:s.additions,deletions:s.deletions,error:((f=s.error)==null?void 0:f.message)||"None"}}),console.table(n),console.log()}}},F=T;function A({transformer:r,rootPath:e,options:t}){let n={transformer:r,rootPath:e,...t},o=new l(n),s=new F(n);return{log:o,runner:s}}var M="add-package-manager",q="Set the `packageManager` key in root `package.json` file",z="1.1.0";function O({root:r,options:e}){let{log:t,runner:n}=A({transformer:M,rootPath:r,options:e});t.info('Set "packageManager" key in root "package.json" file...');let o=P({directory:r});if(!o)return n.abortTransform({reason:`Unable to determine package manager for ${r}`});let s=null;try{s=w(o,r)}catch{return n.abortTransform({reason:`Unable to determine package manager version for ${r}`})}let f=`${o}@${s}`,g=N.default.join(r,"package.json"),U=J.default.readJsonSync(g),I=[{name:"package.json",path:r,packageJson:{...U,packageJsonPath:g}}];for(let E of I){let{packageJsonPath:C,...D}=E.packageJson,L={...D,packageManager:f};n.modifyFile({filePath:C,after:L})}return n.finish()}var B={name:`${M}: ${q}`,value:M,introducedIn:z,transformer:O},Q=B;0&&(module.exports={transformer});
1
+ "use strict";var L=Object.create;var p=Object.defineProperty;var $=Object.getOwnPropertyDescriptor;var H=Object.getOwnPropertyNames;var V=Object.getPrototypeOf,W=Object.prototype.hasOwnProperty;var G=(r,e)=>{for(var t in e)p(r,t,{get:e[t],enumerable:!0})},E=(r,e,t,n)=>{if(e&&typeof e=="object"||typeof e=="function")for(let o of H(e))!W.call(r,o)&&o!==t&&p(r,o,{get:()=>e[o],enumerable:!(n=$(e,o))||n.enumerable});return r};var a=(r,e,t)=>(t=r!=null?L(V(r)):{},E(e||!r||!r.__esModule?p(t,"default",{value:r,enumerable:!0}):t,r)),K=r=>E(p({},"__esModule",{value:!0}),r);var Q={};G(Q,{default:()=>B,transformer:()=>J});module.exports=K(Q);var x=a(require("path")),N=a(require("fs-extra"));var j=a(require("find-up")),v=a(require("path")),g={};function b({directory:r}={}){let e=r||process.cwd();if(g[e])return g[e];let t=j.default.sync(["yarn.lock","pnpm-lock.yaml","package-lock.json"],{cwd:e});if(t){switch(v.default.basename(t)){case"yarn.lock":g[e]="yarn";break;case"pnpm-lock.yaml":g[e]="pnpm";break;case"package-lock.json":g[e]="npm";break}return g[e]}}var u=require("child_process");function P(r,e){switch(r){case"yarn":return(0,u.execSync)("yarn --version",{cwd:e}).toString().trim();case"pnpm":return(0,u.execSync)("pnpm --version",{cwd:e}).toString().trim();case"npm":return(0,u.execSync)("npm --version",{cwd:e}).toString().trim()}}var h=a(require("chalk"));var y=a(require("chalk")),k=require("diff"),m=a(require("fs-extra")),S=a(require("os")),w=a(require("path")),d=class{constructor(e){this.changes=[];if(this.filePath=e.filePath,this.rootPath=e.rootPath,this.after=e.after,this.error=e.error,e.before===void 0)try{w.default.extname(e.filePath)===".json"?this.before=m.default.readJsonSync(e.filePath):this.before=m.default.readFileSync(e.filePath)}catch{this.before=""}else e.before===null?this.before="":this.before=e.before;e.after?typeof this.before=="object"||typeof e.after=="object"?this.changes=(0,k.diffJson)(this.before,e.after):this.changes=(0,k.diffLines)(this.before,e.after):this.changes=[]}fileName(){return w.default.relative(this.rootPath,this.filePath)}write(){this.after&&(typeof this.after=="object"?m.default.writeJsonSync(this.filePath,this.after,{spaces:2}):m.default.writeFileSync(this.filePath,this.after))}additions(){return this.changes.filter(e=>e.added).length}deletions(){return this.changes.filter(e=>e.removed).length}hasChanges(){return this.additions()>0||this.deletions()>0}log(e){e.diff?(this.changes.forEach(t=>{t.added?process.stdout.write(y.default.green(t.value)):t.removed?process.stdout.write(y.default.red(t.value)):process.stdout.write(y.default.dim(t.value))}),console.log(S.default.EOL)):console.log(this.after)}};var i=a(require("chalk")),c=class{constructor(e){this.transform=e.transformer,this.dry=e.dry}modified(...e){console.log(i.default.green(" MODIFIED "),...e,this.dry?i.default.dim("(dry run)"):"")}unchanged(...e){console.log(i.default.gray(" UNCHANGED "),...e,this.dry?i.default.dim("(dry run)"):"")}skipped(...e){console.log(i.default.yellow(" SKIPPED "),...e,this.dry?i.default.dim("(dry run)"):"")}error(...e){console.log(i.default.red(" ERROR "),...e,this.dry?i.default.dim("(dry run)"):"")}info(...e){console.log(i.default.bold(" INFO "),...e,this.dry?i.default.dim("(dry run)"):"")}};var R=class{constructor(e){this.modifications={};this.transform=e.transformer,this.rootPath=e.rootPath,this.dry=e.dry,this.print=e.print,this.logger=new c(e)}abortTransform(e){return this.logger.error(e.reason),{fatalError:new Error(e.reason),changes:e.changes||{}}}modifyFile(e){this.modifications[e.filePath]=new d({rootPath:this.rootPath,...e})}finish(){let e={changes:{}};return Object.keys(this.modifications).forEach(n=>{let o=this.modifications[n],s={action:"unchanged",additions:o.additions(),deletions:o.deletions()};if(o.hasChanges()){if(this.dry)s.action="skipped",this.logger.skipped(h.default.dim(o.fileName()));else try{o.write(),s.action="modified",this.logger.modified(h.default.bold(o.fileName()))}catch(f){let l="Unknown error";f instanceof Error&&(l=f.message),s.error=new Error(l),s.action="error",this.logger.error(o.fileName(),l)}this.print&&o.log({diff:!0})}else this.logger.unchanged(h.default.dim(o.fileName()));e.changes[o.fileName()]=s}),Object.keys(e.changes).some(n=>e.changes[n].action==="error")?this.abortTransform({reason:"Encountered an error while transforming files",changes:e.changes}):e}static logResults(e){let t=Object.keys(e.changes);if(console.log(),t.length>0){console.log(h.default.bold("Results:"));let n={};t.forEach(o=>{var f;let s=e.changes[o];n[o]={action:s.action,additions:s.additions,deletions:s.deletions,error:((f=s.error)==null?void 0:f.message)||"None"}}),console.table(n),console.log()}}},T=R;function F({transformer:r,rootPath:e,options:t}){let n={transformer:r,rootPath:e,...t},o=new c(n),s=new T(n);return{log:o,runner:s}}var A="add-package-manager",_="Set the `packageManager` key in root `package.json` file",q="1.1.0";function J({root:r,options:e}){let{log:t,runner:n}=F({transformer:A,rootPath:r,options:e});t.info('Set "packageManager" key in root "package.json" file...');let o=b({directory:r});if(!o)return n.abortTransform({reason:`Unable to determine package manager for ${r}`});let s=null;try{s=P(o,r)}catch{return n.abortTransform({reason:`Unable to determine package manager version for ${r}`})}let f=`${o}@${s}`,l=x.default.join(r,"package.json"),O=N.default.readJsonSync(l),U=[{name:"package.json",path:r,packageJson:{...O,packageJsonPath:l}}];for(let M of U){let{packageJsonPath:I,...C}=M.packageJson,D={...C,packageManager:f};n.modifyFile({filePath:I,after:D})}return n.finish()}var z={name:`${A}: ${_}`,value:A,introducedIn:q,transformer:J},B=z;0&&(module.exports={transformer});
@@ -1 +1 @@
1
- "use strict";var x=Object.create;var u=Object.defineProperty;var S=Object.getOwnPropertyDescriptor;var I=Object.getOwnPropertyNames;var J=Object.getPrototypeOf,D=Object.prototype.hasOwnProperty;var U=(r,e)=>{for(var t in e)u(r,t,{get:e[t],enumerable:!0})},N=(r,e,t,s)=>{if(e&&typeof e=="object"||typeof e=="function")for(let o of I(e))!D.call(r,o)&&o!==t&&u(r,o,{get:()=>e[o],enumerable:!(s=S(e,o))||s.enumerable});return r};var l=(r,e,t)=>(t=r!=null?x(J(r)):{},N(e||!r||!r.__esModule?u(t,"default",{value:r,enumerable:!0}):t,r)),L=r=>N(u({},"__esModule",{value:!0}),r);var K={};U(K,{default:()=>G,transformer:()=>C});module.exports=L(K);var b=l(require("fs-extra")),k=l(require("path"));var g=l(require("chalk"));var y=l(require("chalk")),p=require("diff"),c=l(require("fs-extra")),O=l(require("os")),P=l(require("path")),d=class{constructor(e){this.changes=[];if(this.filePath=e.filePath,this.rootPath=e.rootPath,this.after=e.after,this.error=e.error,e.before===void 0)try{P.default.extname(e.filePath)===".json"?this.before=c.default.readJsonSync(e.filePath):this.before=c.default.readFileSync(e.filePath)}catch{this.before=""}else e.before===null?this.before="":this.before=e.before;e.after?typeof this.before=="object"||typeof e.after=="object"?this.changes=(0,p.diffJson)(this.before,e.after):this.changes=(0,p.diffLines)(this.before,e.after):this.changes=[]}fileName(){return P.default.relative(this.rootPath,this.filePath)}write(){this.after&&(typeof this.after=="object"?c.default.writeJsonSync(this.filePath,this.after,{spaces:2}):c.default.writeFileSync(this.filePath,this.after))}additions(){return this.changes.filter(e=>e.added).length}deletions(){return this.changes.filter(e=>e.removed).length}hasChanges(){return this.additions()>0||this.deletions()>0}log(e){e.diff?(this.changes.forEach(t=>{t.added?process.stdout.write(y.default.green(t.value)):t.removed?process.stdout.write(y.default.red(t.value)):process.stdout.write(y.default.dim(t.value))}),console.log(O.default.EOL)):console.log(this.after)}};var n=l(require("chalk")),h=class{constructor(e){this.transform=e.transformer,this.dry=e.dry}modified(...e){console.log(n.default.green(" MODIFIED "),...e,this.dry?n.default.dim("(dry run)"):"")}unchanged(...e){console.log(n.default.gray(" UNCHANGED "),...e,this.dry?n.default.dim("(dry run)"):"")}skipped(...e){console.log(n.default.yellow(" SKIPPED "),...e,this.dry?n.default.dim("(dry run)"):"")}error(...e){console.log(n.default.red(" ERROR "),...e,this.dry?n.default.dim("(dry run)"):"")}info(...e){console.log(n.default.bold(" INFO "),...e,this.dry?n.default.dim("(dry run)"):"")}};var T=class{constructor(e){this.modifications={};this.transform=e.transformer,this.rootPath=e.rootPath,this.dry=e.dry,this.print=e.print,this.logger=new h(e)}abortTransform(e){return this.logger.error(e.reason),{fatalError:new Error(e.reason),changes:e.changes||{}}}modifyFile(e){this.modifications[e.filePath]=new d({rootPath:this.rootPath,...e})}finish(){let e={changes:{}};return Object.keys(this.modifications).forEach(s=>{let o=this.modifications[s],i={action:"unchanged",additions:o.additions(),deletions:o.deletions()};if(o.hasChanges()){if(this.dry)i.action="skipped",this.logger.skipped(g.default.dim(o.fileName()));else try{o.write(),i.action="modified",this.logger.modified(g.default.bold(o.fileName()))}catch(a){let f="Unknown error";a instanceof Error&&(f=a.message),i.error=new Error(f),i.action="error",this.logger.error(o.fileName(),f)}this.print&&o.log({diff:!0})}else this.logger.unchanged(g.default.dim(o.fileName()));e.changes[o.fileName()]=i}),Object.keys(e.changes).some(s=>e.changes[s].action==="error")?this.abortTransform({reason:"Encountered an error while transforming files",changes:e.changes}):e}static logResults(e){let t=Object.keys(e.changes);if(console.log(),t.length>0){console.log(g.default.bold("Results:"));let s={};t.forEach(o=>{var a;let i=e.changes[o];s[o]={action:i.action,additions:i.additions,deletions:i.deletions,error:((a=i.error)==null?void 0:a.message)||"None"}}),console.table(s),console.log()}}},R=T;function F({transformer:r,rootPath:e,options:t}){let s={transformer:r,rootPath:e,...t},o=new h(s),i=new R(s);return{log:o,runner:i}}var A="create-turbo-config",M='Create the `turbo.json` file from an existing "turbo" key in `package.json`',H="1.1.0";function C({root:r,options:e}){let{log:t,runner:s}=F({transformer:A,rootPath:r,options:e});t.info('Migrating "package.json" "turbo" key to "turbo.json" file...');let o=k.default.join(r,"turbo.json"),i=k.default.join(r,"package.json");if(!b.default.existsSync(i))return s.abortTransform({reason:`No package.json found at ${r}. Is the path correct?`});let a=b.default.readJsonSync(i),f=null;try{f=b.default.readJSONSync(o)}catch{f=null}let E=a,j=f;if(!f&&a.turbo){let{turbo:w,...v}=a;j=w,E=v}return s.modifyFile({filePath:o,after:j}),s.modifyFile({filePath:i,after:E}),s.finish()}var $={name:`${A}: ${M}`,value:A,introducedIn:H,transformer:C},G=$;0&&(module.exports={transformer});
1
+ "use strict";var v=Object.create;var g=Object.defineProperty;var x=Object.getOwnPropertyDescriptor;var S=Object.getOwnPropertyNames;var I=Object.getPrototypeOf,J=Object.prototype.hasOwnProperty;var D=(r,e)=>{for(var t in e)g(r,t,{get:e[t],enumerable:!0})},w=(r,e,t,s)=>{if(e&&typeof e=="object"||typeof e=="function")for(let o of S(e))!J.call(r,o)&&o!==t&&g(r,o,{get:()=>e[o],enumerable:!(s=x(e,o))||s.enumerable});return r};var l=(r,e,t)=>(t=r!=null?v(I(r)):{},w(e||!r||!r.__esModule?g(t,"default",{value:r,enumerable:!0}):t,r)),U=r=>w(g({},"__esModule",{value:!0}),r);var G={};D(G,{default:()=>$,transformer:()=>O});module.exports=U(G);var p=l(require("fs-extra")),F=l(require("path"));var m=l(require("chalk"));var u=l(require("chalk")),y=require("diff"),c=l(require("fs-extra")),N=l(require("os")),b=l(require("path")),d=class{constructor(e){this.changes=[];if(this.filePath=e.filePath,this.rootPath=e.rootPath,this.after=e.after,this.error=e.error,e.before===void 0)try{b.default.extname(e.filePath)===".json"?this.before=c.default.readJsonSync(e.filePath):this.before=c.default.readFileSync(e.filePath)}catch{this.before=""}else e.before===null?this.before="":this.before=e.before;e.after?typeof this.before=="object"||typeof e.after=="object"?this.changes=(0,y.diffJson)(this.before,e.after):this.changes=(0,y.diffLines)(this.before,e.after):this.changes=[]}fileName(){return b.default.relative(this.rootPath,this.filePath)}write(){this.after&&(typeof this.after=="object"?c.default.writeJsonSync(this.filePath,this.after,{spaces:2}):c.default.writeFileSync(this.filePath,this.after))}additions(){return this.changes.filter(e=>e.added).length}deletions(){return this.changes.filter(e=>e.removed).length}hasChanges(){return this.additions()>0||this.deletions()>0}log(e){e.diff?(this.changes.forEach(t=>{t.added?process.stdout.write(u.default.green(t.value)):t.removed?process.stdout.write(u.default.red(t.value)):process.stdout.write(u.default.dim(t.value))}),console.log(N.default.EOL)):console.log(this.after)}};var n=l(require("chalk")),h=class{constructor(e){this.transform=e.transformer,this.dry=e.dry}modified(...e){console.log(n.default.green(" MODIFIED "),...e,this.dry?n.default.dim("(dry run)"):"")}unchanged(...e){console.log(n.default.gray(" UNCHANGED "),...e,this.dry?n.default.dim("(dry run)"):"")}skipped(...e){console.log(n.default.yellow(" SKIPPED "),...e,this.dry?n.default.dim("(dry run)"):"")}error(...e){console.log(n.default.red(" ERROR "),...e,this.dry?n.default.dim("(dry run)"):"")}info(...e){console.log(n.default.bold(" INFO "),...e,this.dry?n.default.dim("(dry run)"):"")}};var P=class{constructor(e){this.modifications={};this.transform=e.transformer,this.rootPath=e.rootPath,this.dry=e.dry,this.print=e.print,this.logger=new h(e)}abortTransform(e){return this.logger.error(e.reason),{fatalError:new Error(e.reason),changes:e.changes||{}}}modifyFile(e){this.modifications[e.filePath]=new d({rootPath:this.rootPath,...e})}finish(){let e={changes:{}};return Object.keys(this.modifications).forEach(s=>{let o=this.modifications[s],i={action:"unchanged",additions:o.additions(),deletions:o.deletions()};if(o.hasChanges()){if(this.dry)i.action="skipped",this.logger.skipped(m.default.dim(o.fileName()));else try{o.write(),i.action="modified",this.logger.modified(m.default.bold(o.fileName()))}catch(a){let f="Unknown error";a instanceof Error&&(f=a.message),i.error=new Error(f),i.action="error",this.logger.error(o.fileName(),f)}this.print&&o.log({diff:!0})}else this.logger.unchanged(m.default.dim(o.fileName()));e.changes[o.fileName()]=i}),Object.keys(e.changes).some(s=>e.changes[s].action==="error")?this.abortTransform({reason:"Encountered an error while transforming files",changes:e.changes}):e}static logResults(e){let t=Object.keys(e.changes);if(console.log(),t.length>0){console.log(m.default.bold("Results:"));let s={};t.forEach(o=>{var a;let i=e.changes[o];s[o]={action:i.action,additions:i.additions,deletions:i.deletions,error:((a=i.error)==null?void 0:a.message)||"None"}}),console.table(s),console.log()}}},T=P;function R({transformer:r,rootPath:e,options:t}){let s={transformer:r,rootPath:e,...t},o=new h(s),i=new T(s);return{log:o,runner:i}}var k="create-turbo-config",L='Create the `turbo.json` file from an existing "turbo" key in `package.json`',M="1.1.0";function O({root:r,options:e}){let{log:t,runner:s}=R({transformer:k,rootPath:r,options:e});t.info('Migrating "package.json" "turbo" key to "turbo.json" file...');let o=F.default.join(r,"turbo.json"),i=F.default.join(r,"package.json");if(!p.default.existsSync(i))return s.abortTransform({reason:`No package.json found at ${r}. Is the path correct?`});let a=p.default.readJsonSync(i),f=null;try{f=p.default.readJSONSync(o)}catch{f=null}let A=a,E=f;if(!f&&a.turbo){let{turbo:j,...C}=a;E=j,A=C}return s.modifyFile({filePath:o,after:E}),s.modifyFile({filePath:i,after:A}),s.finish()}var H={name:`${k}: ${L}`,value:k,introducedIn:M,transformer:O},$=H;0&&(module.exports={transformer});