@turbo/gen 1.10.16 → 1.10.17-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 +1 -1
- package/package.json +3 -3
package/dist/cli.js
CHANGED
|
@@ -86,7 +86,7 @@ Downloading files${n?"":` for example ${dt.default.cyan(a)}`}. This might take a
|
|
|
86
86
|
`+e.slice(i,h),i=h+1),u=r;return t+=`
|
|
87
87
|
`,e.length-i>a&&u>i?t+=e.slice(i,u)+`
|
|
88
88
|
`+e.slice(u+1):t+=e.slice(i),t.slice(1)}function fd(e){for(var a="",n=0,s,i=0;i<e.length;n>=65536?i+=2:i++)n=Jt(e,i),s=ze[n],!s&&tr(n)?(a+=e[i],n>=65536&&(a+=e[i+1])):a+=s||id(n);return a}function dd(e,a,n){var s="",i=e.tag,h,u,r;for(h=0,u=n.length;h<u;h+=1)r=n[h],e.replacer&&(r=e.replacer.call(n,String(h),r)),(ct(e,a,r,!1,!1)||typeof r>"u"&&ct(e,a,null,!1,!1))&&(s!==""&&(s+=","+(e.condenseFlow?"":" ")),s+=e.dump);e.tag=i,e.dump="["+s+"]"}function Es(e,a,n,s){var i="",h=e.tag,u,r,t;for(u=0,r=n.length;u<r;u+=1)t=n[u],e.replacer&&(t=e.replacer.call(n,String(u),t)),(ct(e,a+1,t,!0,!0,!1,!0)||typeof t>"u"&&ct(e,a+1,null,!0,!0,!1,!0))&&((!s||i!=="")&&(i+=Rn(e,a)),e.dump&&Qt===e.dump.charCodeAt(0)?i+="-":i+="- ",i+=e.dump);e.tag=h,e.dump=i||"[]"}function md(e,a,n){var s="",i=e.tag,h=Object.keys(n),u,r,t,p,l;for(u=0,r=h.length;u<r;u+=1)l="",s!==""&&(l+=", "),e.condenseFlow&&(l+='"'),t=h[u],p=n[t],e.replacer&&(p=e.replacer.call(n,t,p)),ct(e,a,t,!1,!1)&&(e.dump.length>1024&&(l+="? "),l+=e.dump+(e.condenseFlow?'"':"")+":"+(e.condenseFlow?"":" "),ct(e,a,p,!1,!1)&&(l+=e.dump,s+=l));e.tag=i,e.dump="{"+s+"}"}function yd(e,a,n,s){var i="",h=e.tag,u=Object.keys(n),r,t,p,l,c,o;if(e.sortKeys===!0)u.sort();else if(typeof e.sortKeys=="function")u.sort(e.sortKeys);else if(e.sortKeys)throw new Ke("sortKeys must be a boolean or a function");for(r=0,t=u.length;r<t;r+=1)o="",(!s||i!=="")&&(o+=Rn(e,a)),p=u[r],l=n[p],e.replacer&&(l=e.replacer.call(n,p,l)),ct(e,a+1,p,!0,!0,!0)&&(c=e.tag!==null&&e.tag!=="?"||e.dump&&e.dump.length>1024,c&&(e.dump&&Qt===e.dump.charCodeAt(0)?o+="?":o+="? "),o+=e.dump,c&&(o+=Rn(e,a)),ct(e,a+1,l,!0,c)&&(e.dump&&Qt===e.dump.charCodeAt(0)?o+=":":o+=": ",o+=e.dump,i+=o));e.tag=h,e.dump=i||"{}"}function Ds(e,a,n){var s,i,h,u,r,t;for(i=n?e.explicitTypes:e.implicitTypes,h=0,u=i.length;h<u;h+=1)if(r=i[h],(r.instanceOf||r.predicate)&&(!r.instanceOf||typeof a=="object"&&a instanceof r.instanceOf)&&(!r.predicate||r.predicate(a))){if(n?r.multi&&r.representName?e.tag=r.representName(a):e.tag=r.tag:e.tag="?",r.represent){if(t=e.styleMap[r.tag]||r.defaultStyle,uo.call(r.represent)==="[object Function]")s=r.represent(a,t);else if(ao.call(r.represent,t))s=r.represent[t](a,t);else throw new Ke("!<"+r.tag+'> tag resolver accepts not "'+t+'" style');e.dump=s}return!0}return!1}function ct(e,a,n,s,i,h,u){e.tag=null,e.dump=n,Ds(e,n,!1)||Ds(e,n,!0);var r=uo.call(e.dump),t=s,p;s&&(s=e.flowLevel<0||e.flowLevel>a);var l=r==="[object Object]"||r==="[object Array]",c,o;if(l&&(c=e.duplicates.indexOf(n),o=c!==-1),(e.tag!==null&&e.tag!=="?"||o||e.indent!==2&&a>0)&&(i=!1),o&&e.usedDuplicates[c])e.dump="*ref_"+c;else{if(l&&o&&!e.usedDuplicates[c]&&(e.usedDuplicates[c]=!0),r==="[object Object]")s&&Object.keys(e.dump).length!==0?(yd(e,a,e.dump,i),o&&(e.dump="&ref_"+c+e.dump)):(md(e,a,e.dump),o&&(e.dump="&ref_"+c+" "+e.dump));else if(r==="[object Array]")s&&e.dump.length!==0?(e.noArrayIndent&&!u&&a>0?Es(e,a-1,e.dump,i):Es(e,a,e.dump,i),o&&(e.dump="&ref_"+c+e.dump)):(dd(e,a,e.dump),o&&(e.dump="&ref_"+c+" "+e.dump));else if(r==="[object String]")e.tag!=="?"&&hd(e,e.dump,a,h,t);else{if(r==="[object Undefined]"||e.skipInvalid)return!1;throw new Ke("unacceptable kind of an object to dump "+r)}e.tag!==null&&e.tag!=="?"&&(p=encodeURI(e.tag[0]==="!"?e.tag.slice(1):e.tag).replace(/!/g,"%21"),e.tag[0]==="!"?p="!"+p:p.slice(0,18)==="tag:yaml.org,2002:"?p="!!"+p.slice(18):p="!<"+p+">",e.dump=p+" "+e.dump)}return!0}function gd(e,a){var n=[],s=[],i,h;for(Bn(e,n,s),i=0,h=s.length;i<h;i+=1)a.duplicates.push(n[s[i]]);a.usedDuplicates=new Array(h)}function Bn(e,a,n){var s,i,h;if(e!==null&&typeof e=="object")if(i=a.indexOf(e),i!==-1)n.indexOf(i)===-1&&n.push(i);else if(a.push(e),Array.isArray(e))for(i=0,h=e.length;i<h;i+=1)Bn(e[i],a,n);else for(s=Object.keys(e),i=0,h=s.length;i<h;i+=1)Bn(e[s[i]],a,n)}function bd(e,a){a=a||{};var n=new od(a);n.noRefs||gd(e,n);var s=e;return n.replacer&&(s=n.replacer.call({"":s},"",s)),ct(n,0,s,!0,!0)?n.dump+`
|
|
89
|
-
`:""}var vd=bd,wd={dump:vd};function zn(e,a){return function(){throw new Error("Function yaml."+e+" is removed in js-yaml 4. Use yaml."+a+" instead, which is now safe by default.")}}var _d=Ue,Ed=Bs,Dd=js,Sd=Us,Ad=Gs,Cd=Un,xd=oo.load,kd=oo.loadAll,Fd=wd.dump,Od=Ke,Rd={binary:Ks,float:Hs,map:Is,null:Ns,pairs:Js,set:Zs,timestamp:zs,bool:Ms,int:$s,merge:Vs,omap:Ys,seq:Ls,str:Ps},Td=zn("safeLoad","load"),Bd=zn("safeLoadAll","loadAll"),Pd=zn("safeDump","dump"),Ld={Type:_d,Schema:Ed,FAILSAFE_SCHEMA:Dd,JSON_SCHEMA:Sd,CORE_SCHEMA:Ad,DEFAULT_SCHEMA:Cd,load:xd,loadAll:kd,dump:Fd,YAMLException:Od,types:Rd,safeLoad:Td,safeLoadAll:Bd,safeDump:Pd},Id=Ld,jd=Re(dp()),Nd="turbo.json";var kn={};function Md(e){try{if(Zt.default.existsSync(St.default.join(e,"pnpm-workspace.yaml")))return Id.load(Zt.default.readFileSync(St.default.join(e,"pnpm-workspace.yaml"),"utf8")).packages||[];let a=JSON.parse(Zt.default.readFileSync(St.default.join(e,"package.json"),"utf8"));if(a.workspaces){if("packages"in a.workspaces)return a.workspaces.packages||[];if(Array.isArray(a.workspaces))return a.workspaces}return[]}catch{return[]}}function Vn(e,a){var n;let s=Yt(e,a),i=[],h=(n=a==null?void 0:a.cache)!=null?n:!0;if(h&&e&&e in kn)return kn[e];if(s){let u=Md(s).map(r=>`${r}/turbo.json`);(0,jd.sync)([Nd,...u],{cwd:s,onlyFiles:!0,followSymbolicLinks:!1,suppressErrors:!0}).map(r=>St.default.join(s,r)).forEach(r=>{try{let t=Zt.default.readFileSync(r,"utf8"),p=Sn.parse(t),l=St.default.dirname(r)===s;if(l){if("extends"in p)return}else if(!("extends"in p))return;i.push({config:p,turboConfigPath:r,workspacePath:St.default.dirname(r),isRootConfig:l})}catch(t){un(t)}})}return h&&e&&(kn[e]=i),i}B();var Ko=require("proxy-agent");var rr={name:"@turbo/gen",version:"1.10.16",description:"Extend a Turborepo",homepage:"https://turbo.build/repo",license:"MPL-2.0",repository:{type:"git",url:"https://github.com/vercel/turbo",directory:"packages/turbo-gen"},bugs:{url:"https://github.com/vercel/turbo/issues"},bin:"dist/cli.js",types:"dist/types.d.ts",scripts:{build:"tsup",test:"jest",lint:"eslint src/","check-types":"tsc --noEmit"},dependencies:{"@turbo/workspaces":"workspace:*",chalk:"2.4.2",commander:"^10.0.0","fs-extra":"^10.1.0",inquirer:"^8.2.4",minimatch:"^9.0.0","node-plop":"^0.26.3","proxy-agent":"^6.2.2","ts-node":"^10.9.1","update-check":"^1.5.4","validate-npm-package-name":"^5.0.0"},devDependencies:{"@turbo/eslint-config":"workspace:*","@turbo/test-utils":"workspace:*","@turbo/tsconfig":"workspace:*","@turbo/utils":"workspace:*","@types/fs-extra":"^9.0.13","@types/inquirer":"^8.2.5","@types/jest":"^27.4.0","@types/node":"^18.17.2","@types/validate-npm-package-name":"^4.0.0",jest:"^27.4.3","ts-jest":"^27.1.1",tsup:"^6.7.0",typescript:"^4.5.5"},files:["dist"],publishConfig:{access:"public"}};var vo=Be(require("chalk")),wo=Be(require("update-check"));var Hd=(0,wo.default)(rr).catch(()=>null);async function Kn(){try{let e=await Hd;e!=null&&e.latest&&(he.log(),he.log(vo.default.yellow.bold(`A new version of \`${rr.name}\` is available!`)),he.log()),process.exit()}catch{}}var _o=require("@turbo/workspaces");async function Tr({root:e}){let a=e||process.cwd(),n=Yt(a);if(!n)he.error("Unable to infer repository root - override with --root");else try{return(0,_o.getWorkspaceDetails)({root:n})}catch{he.error(`Unable to determine workspace details. Make sure "${a}" is the root, or add "packageManager" to "package.json" or ensure a lockfile is present.`)}process.exit(1)}var ht=Be(require("path")),Pr=Be(require("fs-extra")),Br=Be(require("node-plop")),Eo=require("ts-node"),Do=require("inquirer");var Ge=class extends Error{constructor(n,s){var i;super(n);this.name="GenerateError",this.type=(i=s==null?void 0:s.type)!=null?i:"unknown",Error.captureStackTrace(this,Ge)}};var So=["ts","js","cjs"],Ud=ht.default.join("turbo","generators"),Ao=So.map(e=>ht.default.join(Ud,`config.${e}`)),Gd=[...Ao,...So.map(e=>ht.default.join(`plopfile.${e}`))];function Co({project:e,configPath:a}){(0,Eo.register)({transpileOnly:!0,cwd:e.paths.root,compilerOptions:{module:"nodenext",moduleResolution:"nodenext"}});let n=Wd({project:e}),s;if(a){if(!Pr.default.existsSync(a))throw new Ge(`No config at "${a}"`,{type:"plop_no_config"});try{s=(0,Br.default)(a,{destBasePath:a,force:!1})}catch(i){he.error(i)}}else{for(let i of Gd){let h=ht.default.join(e.paths.root,i);if(Pr.default.existsSync(h))try{s=(0,Br.default)(h,{destBasePath:e.paths.root,force:!1});break}catch(u){he.error(u)}}!s&&n.length>0&&(s=(0,Br.default)(n[0].config,{destBasePath:n[0].root,force:!1}),n.shift())}return s&&n.forEach(i=>{try{s==null||s.load(i.config,{destBasePath:i.root,force:!1})}catch(h){he.error(h)}}),s}function Yn({project:e,configPath:a}){let n=Co({project:e,configPath:a});if(!n)return[];let i=n.getGeneratorList().map(r=>n.getGenerator(r.name)),h={};i.forEach(r=>{let t=r,p=e.workspaceData.workspaces.find(l=>{if(t.basePath===e.paths.root)return!1;let c=t.basePath.split(ht.default.sep);return c.pop(),c.pop(),ht.default.join("/",...c)===l.paths.root});p?(p.name in h||(h[p.name]=[]),h[p.name].push(t)):("root"in h||(h.root=[]),h.root.push(t))});let u=[];return Object.keys(h).forEach(r=>{u.push(new Do.Separator(r)),u.push(...h[r])}),u}function qd({project:e,generator:a}){let n={root:e.paths.root,workspace:a.basePath?Wt({cwd:a.basePath,target:"package.json"}):void 0},s={};try{s=Vn(a.basePath)}catch{}return{turbo:{paths:n,configs:s}}}function Wd({project:e}){let a=[];return e.workspaceData.workspaces.forEach(n=>{for(let s of Ao)Pr.default.existsSync(ht.default.join(n.paths.root,s))&&a.push({config:ht.default.join(n.paths.root,s),root:n.paths.root})}),a}async function xo({project:e,generator:a,bypassArgs:n,configPath:s}){let i=Co({project:e,configPath:s});if(!i)throw new Ge("Unable to load generators",{type:"plop_unable_to_load_config"});let h=i.getGenerator(a);if(!h)throw new Ge(`Generator ${a} not found`,{type:"plop_generator_not_found"});let u=await h.runPrompts(n),r=await h.runActions({...u,...qd({project:e,generator:h})},{onComment:t=>{he.dimmed(t)}});if(r.failures.length>0)throw r.failures.forEach(t=>{t instanceof Error?he.error(`Error - ${t.message}`):he.error(`Error - ${t.error}. Unable to ${t.type} to "${t.path}"`)}),new Ge(`Failed to run "${a}" generator`,{type:"plop_error_running_generator"});r.changes.length>0&&(he.info("Changes made:"),r.changes.forEach(t=>{t.path&&he.item(`${t.path} (${t.type})`)}))}var Ct=require("inquirer");async function ko({generators:e,generator:a}){if(a){if(e.find(s=>!(s instanceof Ct.Separator)&&s.name===a))return{selectedGenerator:a};he.warn(`Generator "${a}" not found`),he.log()}return await(0,Ct.prompt)({type:"list",name:"selectedGenerator",message:"Select generator to run",choices:e.map(s=>s instanceof Ct.Separator?s:{name:s.description?` ${s.name}: ${s.description}`:` ${s.name}`,value:s.name})})}async function Fo(){return(0,Ct.prompt)({type:"list",name:"answer",message:"Should the generator config be created with TS or JS?",default:"ts",choices:[{name:"JavaScript",value:"js"},{name:"TypeScript",value:"ts"}]})}async function Oo({message:e}){return(0,Ct.prompt)({type:"confirm",name:"answer",message:e})}var Jn=Be(require("path")),Lr=require("fs-extra");async function Ro({project:e,template:a}){let n=Jn.default.join(e.paths.root,"turbo","generators"),s=`simple-${a}`;if(await(0,Lr.pathExists)(n))throw new Ge(`Generator config directory already exists at ${n}`,{type:"config_directory_already_exists"});await(0,Lr.copy)(Jn.default.join(__dirname,"templates",s),n,{recursive:!0})}async function Zn({generator:e,project:a,opts:n}){let s=!1,i=Yn({project:a,configPath:n.config});if(!i.length){he.error("No generators found."),he.log();let{answer:u}=await Oo({message:`Would you like to add a config with a sample custom generator to ${a.name}?`});if(u){s=!0;let{answer:r}=await Fo();try{await Ro({project:a,template:r})}catch(t){throw t instanceof Ge||he.error("Failed to create generator config"),t}if(he.log(),he.info("Generator config successfully created!"),he.info("Loading generator config..."),he.log(),i=Yn({project:a,configPath:n.config}),!i.length){he.error("Error loading generator");return}}else{he.log(),he.dimmed("Learn more about custom Turborepo generators - https://turbo.build/repo/docs/core-concepts/monorepos/code-generation#custom-generators");return}}let{selectedGenerator:h}=await ko({generators:i,generator:e});try{await xo({project:a,generator:h,bypassArgs:n.args,configPath:n.config})}catch(u){if(u instanceof Ge)throw u;let r="Failed to run generator";throw u instanceof Error&&(r=u.message),new Ge(r,{type:"plop_error_running_generator"})}finally{s&&(he.log(),he.info("Congrats! You just ran your first Turborepo generator"),he.dimmed("Learn more about custom Turborepo generators - https://turbo.build/repo/docs/core-concepts/monorepos/code-generation#custom-generators"))}he.log(),he.bold(he.turboGradient(">>> Success!"))}var ti=Be(require("path")),ir=require("fs-extra"),Uo=Be(require("chalk"));var nr=Be(require("path")),Lo=require("fs-extra"),et=require("inquirer"),Io=require("minimatch"),ei=Be(require("validate-npm-package-name"));var Xn=Be(require("path"));var To=Be(require("path"));function Bo({project:e}){let n=e.workspaceData.workspaces.map(i=>To.default.relative(e.paths.root,i.paths.root)),s=new Set;return e.workspaceData.globs.forEach(i=>{if(!n.includes(i)){if(!i.startsWith("!")){let u=i.split("/")[0];s.add(u)}}}),Array.from(s)}function Qn({project:e,workspace:a}){return Xn.default.relative(e.paths.root,a.paths.root).split(Xn.default.sep)[0]}function Ir({project:e}){let a=Bo({project:e}),n=a.includes("apps"),s=a.includes("packages"),i={},h=[];return e.workspaceData.workspaces.forEach(u=>{let r=Qn({project:e,workspace:u});r!=="apps"&&h.push(u),r in i||(i[r]=[]),i[r].push(u)}),{hasRootApps:n,hasRootPackages:s,workspacesByGroup:i,nonAppWorkspaces:h}}var Po=require("inquirer");function jr({project:e,type:a,showAllDependencies:n}){let s=Ir({project:e}),i=[],h=e.workspaceData.workspaces;n||(a==="app"&&s.hasRootApps?h=s.workspacesByGroup.apps:a==="package"&&s.nonAppWorkspaces.length>0&&(h=s.nonAppWorkspaces));let u;return h.forEach(r=>{let t=Qn({project:e,workspace:r});t!==u&&i.push(new Po.Separator(t)),u=t,i.push(r)}),i}async function jo({override:e,suggestion:a,workspaceType:n}){let{validForNewPackages:s}=(0,ei.default)(e||"");return e&&s?{answer:e}:(0,et.prompt)({type:"input",name:"answer",default:a,validate:i=>{let{validForNewPackages:h}=(0,ei.default)(i);return h||`Invalid ${n} name`},message:`What is the name of the ${n}?`})}async function No({override:e,message:a}){return e?{answer:e}:(0,et.prompt)({type:"list",name:"answer",message:a!=null?a:"What type of workspace should be added?",choices:[{name:"app",value:"app"},{name:"package",value:"package"}]})}async function Mo({workspaceType:e,workspaceName:a,destination:n,project:s}){let i=a.includes("/")?a.split("/")[1]:a;if(n){let{valid:t,root:p}=fr(n);if(t)return{absolute:p,relative:nr.default.relative(s.paths.root,p)}}let h,u=Ir({project:s});e==="app"&&u.hasRootApps?h=`${s.paths.root}/apps/${i}`:e==="package"&&u.hasRootPackages&&(h=`${s.paths.root}/packages/${i}`);let{answer:r}=await(0,et.prompt)({type:"input",name:"answer",message:`Where should "${a}" be added?`,default:h?nr.default.relative(s.paths.root,h):void 0,validate:t=>{let p=nr.default.join(s.paths.root,t),{valid:l,error:c}=fr(p),o=s.workspaceData.globs.some(d=>(0,Io.minimatch)(t,d));return l&&o?!0:o?c:`${t} is not a valid workspace location`}});return{absolute:nr.default.join(s.paths.root,r),relative:r}}async function $o({override:e,workspaces:a,workspaceName:n}){if(e){let i=a.find(h=>h instanceof et.Separator?!1:h.name===e);if(i)return{answer:i};he.warn(`Workspace "${e}" not found`),he.log()}return await(0,et.prompt)({type:"list",name:"answer",loop:!1,pageSize:25,message:`Which workspace should "${n}" start from?`,choices:a.map(i=>i instanceof et.Separator?i:{name:` ${i.name}`,value:i})})}async function Ho({workspaceName:e,project:a,workspaceSource:n,showAllDependencies:s}){let i={dependencies:{},devDependencies:{},peerDependencies:{},optionalDependencies:{}},{answer:h}=await Vd({message:`Add workspace dependencies to "${e}"?`});if(!h)return i;let{answer:u}=await(0,et.prompt)({type:"checkbox",name:"answer",message:`Select all dependencies types to modify for "${e}"`,loop:!1,choices:[{name:"dependencies",value:"dependencies"},{name:"devDependencies",value:"devDependencies"},{name:"peerDependencies",value:"peerDependencies"},{name:"optionalDependencies",value:"optionalDependencies"}]}),r=jr({project:a,type:"package",showAllDependencies:s}),t=n?(0,Lo.readJsonSync)(n.paths.packageJson):void 0;for(let p of u){let{answer:l}=await(0,et.prompt)({type:"checkbox",name:"answer",default:t&&Object.keys(t[p]||{}),pageSize:15,message:`Which packages should be added as ${p} to "${e}?`,loop:!1,choices:r.map(o=>o instanceof et.Separator?o:{name:` ${o.name}`,value:o.name})}),c=(t==null?void 0:t[p])||{};if(Object.keys(c).length){let o=new Set(Object.keys(c));l.forEach(d=>{o.has(d)||(c[d]=a.packageManager==="pnpm"?"workspace:*":"*")}),i[p]=c}else i[p]=l.reduce((o,d)=>({...o,[d]:a.packageManager==="pnpm"?"workspace:*":"*"}),{})}return i}async function Vd({message:e}){return(0,et.prompt)({type:"confirm",name:"answer",message:e})}async function Nr({project:e,opts:a}){var t;let n,s=a.method==="copy"&&a.copy.type==="external"?((t=a.examplePath)==null?void 0:t.split("/").pop())||a.copy.source.split("/").pop():void 0,{answer:i}=await No({override:a.type,message:a.method==="copy"&&a.copy.source==="external"&&s?`What type of workspace should "${s}" be created as?`:void 0}),{answer:h}=await jo({override:a.name,workspaceType:i,suggestion:s});if(a.method==="copy"&&a.copy.type==="internal"){let{answer:p}=await $o({override:a.copy.source,workspaces:jr({project:e,type:i}),workspaceName:h});n=p}let u=await Mo({workspaceType:i,workspaceName:h,project:e,destination:a.destination}),r=await Ho({workspaceName:h,project:e,workspaceSource:n,showAllDependencies:a.showAllDependencies});return{type:i,name:h,location:u,source:n,dependencies:r}}async function ri({project:e,opts:a}){let{name:n,location:s,dependencies:i}=await Nr({project:e,opts:a}),h={name:n,version:"0.0.0",private:!0,scripts:{dev:"echo 'Add dev script here'",build:"echo 'Add build script here'",test:"echo 'Add test script here'",lint:"echo 'Add lint script here'"}};Object.keys(i).forEach(u=>{let r=i[u];r&&Object.keys(r).length>0&&(h[u]=r)}),(0,ir.mkdirSync)(s.absolute,{recursive:!0}),(0,ir.writeFileSync)(ti.default.join(s.absolute,"package.json"),JSON.stringify(h,null,2)),(0,ir.writeFileSync)(ti.default.join(s.absolute,"README.md"),`# \`${n}\``),he.log(),he.log(`${Uo.default.bold(he.turboGradient(">>> Success!"))} Created ${n} at "${s.relative}"`)}var ni=Be(require("path")),tt=require("fs-extra"),Go=Be(require("chalk"));async function ii({project:e,opts:a}){let{name:n,type:s,location:i,source:h,dependencies:u}=await Nr({project:e,opts:a}),r=ni.default.join(i.absolute,"package.json");if(a.copy.type==="external"){he.log(),he.warn("Some manual modifications may be required."),he.dimmed(`This ${s} may require local dependencies or a different package manager than what is available in this repo`),await cn({appPath:i.absolute,example:a.copy.source,examplePath:a.examplePath});try{if((0,tt.existsSync)(r)){if((await(0,tt.readJSON)(r)).workspaces)throw new Error("New workspace root detected - unexpected 'workspaces' field in package.json")}else throw new Error("New workspace is missing a package.json file");if((0,tt.existsSync)(ni.default.join(i.absolute,"pnpm-workspace.yaml")))throw new Error("New workspace root detected - unexpected pnpm-workspace.yaml")}catch(p){let l="UNKNOWN_ERROR";p instanceof Error&&(l=p.message),he.error(l),await(0,tt.rm)(i.absolute,{recursive:!0,force:!0});return}}else if(h){let p=async c=>Promise.resolve(!c.includes("node_modules")),l=he.turboLoader(`Creating "${n}" from "${h.name}"...`);l.start(),await(0,tt.copy)(h.paths.root,i.absolute,{filter:p}),l.stop()}let t=await(0,tt.readJSON)(r);t.name=n,Object.keys(u).forEach(p=>{let l=u[p];l&&Object.keys(l).length>0&&(t[p]=l)}),await(0,tt.writeJSON)(r,t,{spaces:2}),he.log(),he.log(`${Go.default.bold(he.turboGradient(">>> Success!"))} Created ${n} at "${i.relative}"`)}function Yd(e){let{copy:a,...n}=e,s=a===!0||typeof a=="string"?"copy":"empty",i=typeof a=="string"?a:"",h=typeof a=="string"&&a.startsWith("https://")?"external":"internal";return{method:s,copy:{type:h,source:i},...n}}async function sr(e){let a=await Tr(e),n=Yd(e);he.log();let s={project:a,opts:n};n.method==="copy"?(n.copy.type==="external"?he.info(`Copy a remote workspace from ${n.copy.source}`):he.info(`Copy an existing workspace from "${a.name}"`),he.log(),await ii(s)):(he.info(`Add an empty workspace to "${a.name}"`),he.log(),await ri(s))}async function or(e,a){let n=await Tr(a);he.log(),he.info(`Modify "${n.name}" using custom generators`),he.log(),await Zn({generator:e,project:n,opts:a})}function qo(e){try{let a=JSON.parse(e),n={};for(let s in a){let i=qr(s,{to:"camel"});n[i]=a[s]}return n}catch(a){he.error("Error parsing arguments",a),process.exit(1)}}async function si(e,a){var n;if(e==="workspace"){let s=qo(a.json);s.showAllDependencies=(n=s.showAllDependencies)!=null?n:!1;let i=!1,h=s.empty||!0;s.copy===""||s.copy===!0?(i=!0,h=!1):s.copy&&s.copy.length>0&&(i=s.copy,h=!1),s.copy=i,s.empty=h,await sr(s)}else if(e==="run"){let s=qo(a.json),{generatorName:i,...h}=s;await or(i,h)}else he.error(`Received unknown command - "${e}" (must be one of "workspace" | "run")`),process.exit(1)}var Yo=new Ko.ProxyAgent;Wo.default.globalAgent=Yo;zo.default.globalAgent=Yo;var ur=new qe.Command;ur.name(Vo.default.bold(he.turboGradient("@turbo/gen"))).description("Extend your Turborepo").version(rr.version,"-v, --version","Output the current version").helpOption("-h, --help","Display help for command").showHelpAfterError(!1);ur.command("run",{isDefault:!0}).alias("r").description("Run custom generators").addArgument(new qe.Argument("[generator-name]","The name of the generator to run")).addOption(new qe.Option("-c, --config <config>","Generator configuration file (default: turbo/generators/config.js")).addOption(new qe.Option("-r, --root <dir>","The root of your repository (default: directory with root turbo.json)")).addOption(new qe.Option("-a, --args <args...>","Arguments passed directly to generator").default([])).action(or);ur.command("workspace").aliases(["w"]).description("Add a new package or app to your project").addOption(new qe.Option("-n, --name <workspace-name>","Name for the new workspace")).addOption(new qe.Option("-b, --empty","Generate an empty workspace").conflicts("copy").default(!0)).addOption(new qe.Option("-c, --copy [source]",`Generate a workspace using an existing workspace as a template. Can be the name of a local workspace
|
|
89
|
+
`:""}var vd=bd,wd={dump:vd};function zn(e,a){return function(){throw new Error("Function yaml."+e+" is removed in js-yaml 4. Use yaml."+a+" instead, which is now safe by default.")}}var _d=Ue,Ed=Bs,Dd=js,Sd=Us,Ad=Gs,Cd=Un,xd=oo.load,kd=oo.loadAll,Fd=wd.dump,Od=Ke,Rd={binary:Ks,float:Hs,map:Is,null:Ns,pairs:Js,set:Zs,timestamp:zs,bool:Ms,int:$s,merge:Vs,omap:Ys,seq:Ls,str:Ps},Td=zn("safeLoad","load"),Bd=zn("safeLoadAll","loadAll"),Pd=zn("safeDump","dump"),Ld={Type:_d,Schema:Ed,FAILSAFE_SCHEMA:Dd,JSON_SCHEMA:Sd,CORE_SCHEMA:Ad,DEFAULT_SCHEMA:Cd,load:xd,loadAll:kd,dump:Fd,YAMLException:Od,types:Rd,safeLoad:Td,safeLoadAll:Bd,safeDump:Pd},Id=Ld,jd=Re(dp()),Nd="turbo.json";var kn={};function Md(e){try{if(Zt.default.existsSync(St.default.join(e,"pnpm-workspace.yaml")))return Id.load(Zt.default.readFileSync(St.default.join(e,"pnpm-workspace.yaml"),"utf8")).packages||[];let a=JSON.parse(Zt.default.readFileSync(St.default.join(e,"package.json"),"utf8"));if(a.workspaces){if("packages"in a.workspaces)return a.workspaces.packages||[];if(Array.isArray(a.workspaces))return a.workspaces}return[]}catch{return[]}}function Vn(e,a){var n;let s=Yt(e,a),i=[],h=(n=a==null?void 0:a.cache)!=null?n:!0;if(h&&e&&e in kn)return kn[e];if(s){let u=Md(s).map(r=>`${r}/turbo.json`);(0,jd.sync)([Nd,...u],{cwd:s,onlyFiles:!0,followSymbolicLinks:!1,suppressErrors:!0}).map(r=>St.default.join(s,r)).forEach(r=>{try{let t=Zt.default.readFileSync(r,"utf8"),p=Sn.parse(t),l=St.default.dirname(r)===s;if(l){if("extends"in p)return}else if(!("extends"in p))return;i.push({config:p,turboConfigPath:r,workspacePath:St.default.dirname(r),isRootConfig:l})}catch(t){un(t)}})}return h&&e&&(kn[e]=i),i}B();var Ko=require("proxy-agent");var rr={name:"@turbo/gen",version:"1.10.17-canary.0",description:"Extend a Turborepo",homepage:"https://turbo.build/repo",license:"MPL-2.0",repository:{type:"git",url:"https://github.com/vercel/turbo",directory:"packages/turbo-gen"},bugs:{url:"https://github.com/vercel/turbo/issues"},bin:"dist/cli.js",types:"dist/types.d.ts",scripts:{build:"tsup",test:"jest",lint:"eslint src/","check-types":"tsc --noEmit"},dependencies:{"@turbo/workspaces":"workspace:*",chalk:"2.4.2",commander:"^10.0.0","fs-extra":"^10.1.0",inquirer:"^8.2.4",minimatch:"^9.0.0","node-plop":"^0.26.3","proxy-agent":"^6.2.2","ts-node":"^10.9.1","update-check":"^1.5.4","validate-npm-package-name":"^5.0.0"},devDependencies:{"@turbo/eslint-config":"workspace:*","@turbo/test-utils":"workspace:*","@turbo/tsconfig":"workspace:*","@turbo/utils":"workspace:*","@types/fs-extra":"^9.0.13","@types/inquirer":"^8.2.5","@types/jest":"^27.4.0","@types/node":"^18.17.2","@types/validate-npm-package-name":"^4.0.0",jest:"^27.4.3","ts-jest":"^27.1.1",tsup:"^6.7.0",typescript:"^4.5.5"},files:["dist"],publishConfig:{access:"public"}};var vo=Be(require("chalk")),wo=Be(require("update-check"));var Hd=(0,wo.default)(rr).catch(()=>null);async function Kn(){try{let e=await Hd;e!=null&&e.latest&&(he.log(),he.log(vo.default.yellow.bold(`A new version of \`${rr.name}\` is available!`)),he.log()),process.exit()}catch{}}var _o=require("@turbo/workspaces");async function Tr({root:e}){let a=e||process.cwd(),n=Yt(a);if(!n)he.error("Unable to infer repository root - override with --root");else try{return(0,_o.getWorkspaceDetails)({root:n})}catch{he.error(`Unable to determine workspace details. Make sure "${a}" is the root, or add "packageManager" to "package.json" or ensure a lockfile is present.`)}process.exit(1)}var ht=Be(require("path")),Pr=Be(require("fs-extra")),Br=Be(require("node-plop")),Eo=require("ts-node"),Do=require("inquirer");var Ge=class extends Error{constructor(n,s){var i;super(n);this.name="GenerateError",this.type=(i=s==null?void 0:s.type)!=null?i:"unknown",Error.captureStackTrace(this,Ge)}};var So=["ts","js","cjs"],Ud=ht.default.join("turbo","generators"),Ao=So.map(e=>ht.default.join(Ud,`config.${e}`)),Gd=[...Ao,...So.map(e=>ht.default.join(`plopfile.${e}`))];function Co({project:e,configPath:a}){(0,Eo.register)({transpileOnly:!0,cwd:e.paths.root,compilerOptions:{module:"nodenext",moduleResolution:"nodenext"}});let n=Wd({project:e}),s;if(a){if(!Pr.default.existsSync(a))throw new Ge(`No config at "${a}"`,{type:"plop_no_config"});try{s=(0,Br.default)(a,{destBasePath:a,force:!1})}catch(i){he.error(i)}}else{for(let i of Gd){let h=ht.default.join(e.paths.root,i);if(Pr.default.existsSync(h))try{s=(0,Br.default)(h,{destBasePath:e.paths.root,force:!1});break}catch(u){he.error(u)}}!s&&n.length>0&&(s=(0,Br.default)(n[0].config,{destBasePath:n[0].root,force:!1}),n.shift())}return s&&n.forEach(i=>{try{s==null||s.load(i.config,{destBasePath:i.root,force:!1})}catch(h){he.error(h)}}),s}function Yn({project:e,configPath:a}){let n=Co({project:e,configPath:a});if(!n)return[];let i=n.getGeneratorList().map(r=>n.getGenerator(r.name)),h={};i.forEach(r=>{let t=r,p=e.workspaceData.workspaces.find(l=>{if(t.basePath===e.paths.root)return!1;let c=t.basePath.split(ht.default.sep);return c.pop(),c.pop(),ht.default.join("/",...c)===l.paths.root});p?(p.name in h||(h[p.name]=[]),h[p.name].push(t)):("root"in h||(h.root=[]),h.root.push(t))});let u=[];return Object.keys(h).forEach(r=>{u.push(new Do.Separator(r)),u.push(...h[r])}),u}function qd({project:e,generator:a}){let n={root:e.paths.root,workspace:a.basePath?Wt({cwd:a.basePath,target:"package.json"}):void 0},s={};try{s=Vn(a.basePath)}catch{}return{turbo:{paths:n,configs:s}}}function Wd({project:e}){let a=[];return e.workspaceData.workspaces.forEach(n=>{for(let s of Ao)Pr.default.existsSync(ht.default.join(n.paths.root,s))&&a.push({config:ht.default.join(n.paths.root,s),root:n.paths.root})}),a}async function xo({project:e,generator:a,bypassArgs:n,configPath:s}){let i=Co({project:e,configPath:s});if(!i)throw new Ge("Unable to load generators",{type:"plop_unable_to_load_config"});let h=i.getGenerator(a);if(!h)throw new Ge(`Generator ${a} not found`,{type:"plop_generator_not_found"});let u=await h.runPrompts(n),r=await h.runActions({...u,...qd({project:e,generator:h})},{onComment:t=>{he.dimmed(t)}});if(r.failures.length>0)throw r.failures.forEach(t=>{t instanceof Error?he.error(`Error - ${t.message}`):he.error(`Error - ${t.error}. Unable to ${t.type} to "${t.path}"`)}),new Ge(`Failed to run "${a}" generator`,{type:"plop_error_running_generator"});r.changes.length>0&&(he.info("Changes made:"),r.changes.forEach(t=>{t.path&&he.item(`${t.path} (${t.type})`)}))}var Ct=require("inquirer");async function ko({generators:e,generator:a}){if(a){if(e.find(s=>!(s instanceof Ct.Separator)&&s.name===a))return{selectedGenerator:a};he.warn(`Generator "${a}" not found`),he.log()}return await(0,Ct.prompt)({type:"list",name:"selectedGenerator",message:"Select generator to run",choices:e.map(s=>s instanceof Ct.Separator?s:{name:s.description?` ${s.name}: ${s.description}`:` ${s.name}`,value:s.name})})}async function Fo(){return(0,Ct.prompt)({type:"list",name:"answer",message:"Should the generator config be created with TS or JS?",default:"ts",choices:[{name:"JavaScript",value:"js"},{name:"TypeScript",value:"ts"}]})}async function Oo({message:e}){return(0,Ct.prompt)({type:"confirm",name:"answer",message:e})}var Jn=Be(require("path")),Lr=require("fs-extra");async function Ro({project:e,template:a}){let n=Jn.default.join(e.paths.root,"turbo","generators"),s=`simple-${a}`;if(await(0,Lr.pathExists)(n))throw new Ge(`Generator config directory already exists at ${n}`,{type:"config_directory_already_exists"});await(0,Lr.copy)(Jn.default.join(__dirname,"templates",s),n,{recursive:!0})}async function Zn({generator:e,project:a,opts:n}){let s=!1,i=Yn({project:a,configPath:n.config});if(!i.length){he.error("No generators found."),he.log();let{answer:u}=await Oo({message:`Would you like to add a config with a sample custom generator to ${a.name}?`});if(u){s=!0;let{answer:r}=await Fo();try{await Ro({project:a,template:r})}catch(t){throw t instanceof Ge||he.error("Failed to create generator config"),t}if(he.log(),he.info("Generator config successfully created!"),he.info("Loading generator config..."),he.log(),i=Yn({project:a,configPath:n.config}),!i.length){he.error("Error loading generator");return}}else{he.log(),he.dimmed("Learn more about custom Turborepo generators - https://turbo.build/repo/docs/core-concepts/monorepos/code-generation#custom-generators");return}}let{selectedGenerator:h}=await ko({generators:i,generator:e});try{await xo({project:a,generator:h,bypassArgs:n.args,configPath:n.config})}catch(u){if(u instanceof Ge)throw u;let r="Failed to run generator";throw u instanceof Error&&(r=u.message),new Ge(r,{type:"plop_error_running_generator"})}finally{s&&(he.log(),he.info("Congrats! You just ran your first Turborepo generator"),he.dimmed("Learn more about custom Turborepo generators - https://turbo.build/repo/docs/core-concepts/monorepos/code-generation#custom-generators"))}he.log(),he.bold(he.turboGradient(">>> Success!"))}var ti=Be(require("path")),ir=require("fs-extra"),Uo=Be(require("chalk"));var nr=Be(require("path")),Lo=require("fs-extra"),et=require("inquirer"),Io=require("minimatch"),ei=Be(require("validate-npm-package-name"));var Xn=Be(require("path"));var To=Be(require("path"));function Bo({project:e}){let n=e.workspaceData.workspaces.map(i=>To.default.relative(e.paths.root,i.paths.root)),s=new Set;return e.workspaceData.globs.forEach(i=>{if(!n.includes(i)){if(!i.startsWith("!")){let u=i.split("/")[0];s.add(u)}}}),Array.from(s)}function Qn({project:e,workspace:a}){return Xn.default.relative(e.paths.root,a.paths.root).split(Xn.default.sep)[0]}function Ir({project:e}){let a=Bo({project:e}),n=a.includes("apps"),s=a.includes("packages"),i={},h=[];return e.workspaceData.workspaces.forEach(u=>{let r=Qn({project:e,workspace:u});r!=="apps"&&h.push(u),r in i||(i[r]=[]),i[r].push(u)}),{hasRootApps:n,hasRootPackages:s,workspacesByGroup:i,nonAppWorkspaces:h}}var Po=require("inquirer");function jr({project:e,type:a,showAllDependencies:n}){let s=Ir({project:e}),i=[],h=e.workspaceData.workspaces;n||(a==="app"&&s.hasRootApps?h=s.workspacesByGroup.apps:a==="package"&&s.nonAppWorkspaces.length>0&&(h=s.nonAppWorkspaces));let u;return h.forEach(r=>{let t=Qn({project:e,workspace:r});t!==u&&i.push(new Po.Separator(t)),u=t,i.push(r)}),i}async function jo({override:e,suggestion:a,workspaceType:n}){let{validForNewPackages:s}=(0,ei.default)(e||"");return e&&s?{answer:e}:(0,et.prompt)({type:"input",name:"answer",default:a,validate:i=>{let{validForNewPackages:h}=(0,ei.default)(i);return h||`Invalid ${n} name`},message:`What is the name of the ${n}?`})}async function No({override:e,message:a}){return e?{answer:e}:(0,et.prompt)({type:"list",name:"answer",message:a!=null?a:"What type of workspace should be added?",choices:[{name:"app",value:"app"},{name:"package",value:"package"}]})}async function Mo({workspaceType:e,workspaceName:a,destination:n,project:s}){let i=a.includes("/")?a.split("/")[1]:a;if(n){let{valid:t,root:p}=fr(n);if(t)return{absolute:p,relative:nr.default.relative(s.paths.root,p)}}let h,u=Ir({project:s});e==="app"&&u.hasRootApps?h=`${s.paths.root}/apps/${i}`:e==="package"&&u.hasRootPackages&&(h=`${s.paths.root}/packages/${i}`);let{answer:r}=await(0,et.prompt)({type:"input",name:"answer",message:`Where should "${a}" be added?`,default:h?nr.default.relative(s.paths.root,h):void 0,validate:t=>{let p=nr.default.join(s.paths.root,t),{valid:l,error:c}=fr(p),o=s.workspaceData.globs.some(d=>(0,Io.minimatch)(t,d));return l&&o?!0:o?c:`${t} is not a valid workspace location`}});return{absolute:nr.default.join(s.paths.root,r),relative:r}}async function $o({override:e,workspaces:a,workspaceName:n}){if(e){let i=a.find(h=>h instanceof et.Separator?!1:h.name===e);if(i)return{answer:i};he.warn(`Workspace "${e}" not found`),he.log()}return await(0,et.prompt)({type:"list",name:"answer",loop:!1,pageSize:25,message:`Which workspace should "${n}" start from?`,choices:a.map(i=>i instanceof et.Separator?i:{name:` ${i.name}`,value:i})})}async function Ho({workspaceName:e,project:a,workspaceSource:n,showAllDependencies:s}){let i={dependencies:{},devDependencies:{},peerDependencies:{},optionalDependencies:{}},{answer:h}=await Vd({message:`Add workspace dependencies to "${e}"?`});if(!h)return i;let{answer:u}=await(0,et.prompt)({type:"checkbox",name:"answer",message:`Select all dependencies types to modify for "${e}"`,loop:!1,choices:[{name:"dependencies",value:"dependencies"},{name:"devDependencies",value:"devDependencies"},{name:"peerDependencies",value:"peerDependencies"},{name:"optionalDependencies",value:"optionalDependencies"}]}),r=jr({project:a,type:"package",showAllDependencies:s}),t=n?(0,Lo.readJsonSync)(n.paths.packageJson):void 0;for(let p of u){let{answer:l}=await(0,et.prompt)({type:"checkbox",name:"answer",default:t&&Object.keys(t[p]||{}),pageSize:15,message:`Which packages should be added as ${p} to "${e}?`,loop:!1,choices:r.map(o=>o instanceof et.Separator?o:{name:` ${o.name}`,value:o.name})}),c=(t==null?void 0:t[p])||{};if(Object.keys(c).length){let o=new Set(Object.keys(c));l.forEach(d=>{o.has(d)||(c[d]=a.packageManager==="pnpm"?"workspace:*":"*")}),i[p]=c}else i[p]=l.reduce((o,d)=>({...o,[d]:a.packageManager==="pnpm"?"workspace:*":"*"}),{})}return i}async function Vd({message:e}){return(0,et.prompt)({type:"confirm",name:"answer",message:e})}async function Nr({project:e,opts:a}){var t;let n,s=a.method==="copy"&&a.copy.type==="external"?((t=a.examplePath)==null?void 0:t.split("/").pop())||a.copy.source.split("/").pop():void 0,{answer:i}=await No({override:a.type,message:a.method==="copy"&&a.copy.source==="external"&&s?`What type of workspace should "${s}" be created as?`:void 0}),{answer:h}=await jo({override:a.name,workspaceType:i,suggestion:s});if(a.method==="copy"&&a.copy.type==="internal"){let{answer:p}=await $o({override:a.copy.source,workspaces:jr({project:e,type:i}),workspaceName:h});n=p}let u=await Mo({workspaceType:i,workspaceName:h,project:e,destination:a.destination}),r=await Ho({workspaceName:h,project:e,workspaceSource:n,showAllDependencies:a.showAllDependencies});return{type:i,name:h,location:u,source:n,dependencies:r}}async function ri({project:e,opts:a}){let{name:n,location:s,dependencies:i}=await Nr({project:e,opts:a}),h={name:n,version:"0.0.0",private:!0,scripts:{dev:"echo 'Add dev script here'",build:"echo 'Add build script here'",test:"echo 'Add test script here'",lint:"echo 'Add lint script here'"}};Object.keys(i).forEach(u=>{let r=i[u];r&&Object.keys(r).length>0&&(h[u]=r)}),(0,ir.mkdirSync)(s.absolute,{recursive:!0}),(0,ir.writeFileSync)(ti.default.join(s.absolute,"package.json"),JSON.stringify(h,null,2)),(0,ir.writeFileSync)(ti.default.join(s.absolute,"README.md"),`# \`${n}\``),he.log(),he.log(`${Uo.default.bold(he.turboGradient(">>> Success!"))} Created ${n} at "${s.relative}"`)}var ni=Be(require("path")),tt=require("fs-extra"),Go=Be(require("chalk"));async function ii({project:e,opts:a}){let{name:n,type:s,location:i,source:h,dependencies:u}=await Nr({project:e,opts:a}),r=ni.default.join(i.absolute,"package.json");if(a.copy.type==="external"){he.log(),he.warn("Some manual modifications may be required."),he.dimmed(`This ${s} may require local dependencies or a different package manager than what is available in this repo`),await cn({appPath:i.absolute,example:a.copy.source,examplePath:a.examplePath});try{if((0,tt.existsSync)(r)){if((await(0,tt.readJSON)(r)).workspaces)throw new Error("New workspace root detected - unexpected 'workspaces' field in package.json")}else throw new Error("New workspace is missing a package.json file");if((0,tt.existsSync)(ni.default.join(i.absolute,"pnpm-workspace.yaml")))throw new Error("New workspace root detected - unexpected pnpm-workspace.yaml")}catch(p){let l="UNKNOWN_ERROR";p instanceof Error&&(l=p.message),he.error(l),await(0,tt.rm)(i.absolute,{recursive:!0,force:!0});return}}else if(h){let p=async c=>Promise.resolve(!c.includes("node_modules")),l=he.turboLoader(`Creating "${n}" from "${h.name}"...`);l.start(),await(0,tt.copy)(h.paths.root,i.absolute,{filter:p}),l.stop()}let t=await(0,tt.readJSON)(r);t.name=n,Object.keys(u).forEach(p=>{let l=u[p];l&&Object.keys(l).length>0&&(t[p]=l)}),await(0,tt.writeJSON)(r,t,{spaces:2}),he.log(),he.log(`${Go.default.bold(he.turboGradient(">>> Success!"))} Created ${n} at "${i.relative}"`)}function Yd(e){let{copy:a,...n}=e,s=a===!0||typeof a=="string"?"copy":"empty",i=typeof a=="string"?a:"",h=typeof a=="string"&&a.startsWith("https://")?"external":"internal";return{method:s,copy:{type:h,source:i},...n}}async function sr(e){let a=await Tr(e),n=Yd(e);he.log();let s={project:a,opts:n};n.method==="copy"?(n.copy.type==="external"?he.info(`Copy a remote workspace from ${n.copy.source}`):he.info(`Copy an existing workspace from "${a.name}"`),he.log(),await ii(s)):(he.info(`Add an empty workspace to "${a.name}"`),he.log(),await ri(s))}async function or(e,a){let n=await Tr(a);he.log(),he.info(`Modify "${n.name}" using custom generators`),he.log(),await Zn({generator:e,project:n,opts:a})}function qo(e){try{let a=JSON.parse(e),n={};for(let s in a){let i=qr(s,{to:"camel"});n[i]=a[s]}return n}catch(a){he.error("Error parsing arguments",a),process.exit(1)}}async function si(e,a){var n;if(e==="workspace"){let s=qo(a.json);s.showAllDependencies=(n=s.showAllDependencies)!=null?n:!1;let i=!1,h=s.empty||!0;s.copy===""||s.copy===!0?(i=!0,h=!1):s.copy&&s.copy.length>0&&(i=s.copy,h=!1),s.copy=i,s.empty=h,await sr(s)}else if(e==="run"){let s=qo(a.json),{generatorName:i,...h}=s;await or(i,h)}else he.error(`Received unknown command - "${e}" (must be one of "workspace" | "run")`),process.exit(1)}var Yo=new Ko.ProxyAgent;Wo.default.globalAgent=Yo;zo.default.globalAgent=Yo;var ur=new qe.Command;ur.name(Vo.default.bold(he.turboGradient("@turbo/gen"))).description("Extend your Turborepo").version(rr.version,"-v, --version","Output the current version").helpOption("-h, --help","Display help for command").showHelpAfterError(!1);ur.command("run",{isDefault:!0}).alias("r").description("Run custom generators").addArgument(new qe.Argument("[generator-name]","The name of the generator to run")).addOption(new qe.Option("-c, --config <config>","Generator configuration file (default: turbo/generators/config.js")).addOption(new qe.Option("-r, --root <dir>","The root of your repository (default: directory with root turbo.json)")).addOption(new qe.Option("-a, --args <args...>","Arguments passed directly to generator").default([])).action(or);ur.command("workspace").aliases(["w"]).description("Add a new package or app to your project").addOption(new qe.Option("-n, --name <workspace-name>","Name for the new workspace")).addOption(new qe.Option("-b, --empty","Generate an empty workspace").conflicts("copy").default(!0)).addOption(new qe.Option("-c, --copy [source]",`Generate a workspace using an existing workspace as a template. Can be the name of a local workspace
|
|
90
90
|
within your monorepo, or a fully qualified GitHub URL with any branch and/or subdirectory.
|
|
91
91
|
`).conflicts("empty")).addOption(new qe.Option("-d, --destination <dir>","Where the new workspace should be created")).addOption(new qe.Option("-t, --type <type>","The type of workspace to create").choices(["app","package"])).addOption(new qe.Option("-r, --root <dir>","The root of your repository (default: directory with root turbo.json)")).addOption(new qe.Option("-p, --example-path <path-to-example>",`In a rare case, your GitHub URL might contain a branch name with
|
|
92
92
|
a slash (e.g. bug/fix-1) and the path to the example (e.g. foo/bar).
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@turbo/gen",
|
|
3
|
-
"version": "1.10.
|
|
3
|
+
"version": "1.10.17-canary.0",
|
|
4
4
|
"description": "Extend a Turborepo",
|
|
5
5
|
"homepage": "https://turbo.build/repo",
|
|
6
6
|
"license": "MPL-2.0",
|
|
@@ -25,7 +25,7 @@
|
|
|
25
25
|
"ts-node": "^10.9.1",
|
|
26
26
|
"update-check": "^1.5.4",
|
|
27
27
|
"validate-npm-package-name": "^5.0.0",
|
|
28
|
-
"@turbo/workspaces": "1.10.
|
|
28
|
+
"@turbo/workspaces": "1.10.17-canary.0"
|
|
29
29
|
},
|
|
30
30
|
"devDependencies": {
|
|
31
31
|
"@types/fs-extra": "^9.0.13",
|
|
@@ -37,9 +37,9 @@
|
|
|
37
37
|
"ts-jest": "^27.1.1",
|
|
38
38
|
"tsup": "^6.7.0",
|
|
39
39
|
"typescript": "^4.5.5",
|
|
40
|
-
"@turbo/eslint-config": "0.0.0",
|
|
41
40
|
"@turbo/test-utils": "0.0.0",
|
|
42
41
|
"@turbo/tsconfig": "0.0.0",
|
|
42
|
+
"@turbo/eslint-config": "0.0.0",
|
|
43
43
|
"@turbo/utils": "0.0.0"
|
|
44
44
|
},
|
|
45
45
|
"files": [
|