@jatinmourya/ng-init 1.2.14 → 1.2.15

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.
Files changed (3) hide show
  1. package/README.md +1 -2
  2. package/dist/cli.js +53 -53
  3. package/package.json +1 -1
package/README.md CHANGED
@@ -307,8 +307,7 @@ ng-init/
307
307
  │ │ ├── prompt-handler.js # Interactive prompts
308
308
  │ │ ├── file-utils.js # File operations
309
309
  │ │ └── profile-manager.js # Profile management
310
- │ └── templates/ # Configuration templates (disabled)
311
- │ └── templates.js # Template definitions (all features disabled)
310
+ │ └── templates/ # Configuration templates (disabled/removed)
312
311
  ├── build.js # Build script for production
313
312
  ├── package.json
314
313
  └── README.md
package/dist/cli.js CHANGED
@@ -1,81 +1,81 @@
1
1
  #!/usr/bin/env node
2
- var $e=Object.defineProperty;var s=(e,t)=>$e(e,"name",{value:t,configurable:!0});var h=(e,t)=>()=>(e&&(t=e(e=0)),t);var M=(e,t)=>{for(var n in t)$e(e,n,{get:t[n],enumerable:!0})};import m from"chalk";var $t,r,y=h(()=>{$t={success:s(e=>m.hex("#28a745")(e),"success"),error:s(e=>m.hex("#dc3545")(e),"error"),warning:s(e=>m.hex("#ffc107")(e),"warning"),info:s(e=>m.hex("#17a2b8")(e),"info"),accent:s(e=>m.hex("#6f42c1")(e),"accent"),link:s(e=>m.hex("#0d6efd")(e),"link"),muted:s(e=>m.gray(e),"muted"),boldInfo:s(e=>m.bold.hex("#17a2b8")(e),"boldInfo"),boldAccent:s(e=>m.bold.hex("#6f42c1")(e),"boldAccent"),boldSuccess:s(e=>m.bold.hex("#28a745")(e),"boldSuccess"),raw:m,white:s(e=>m.white(e),"white")},r=$t});var Pe={};M(Pe,{printKeyValue:()=>g,printObjectList:()=>f,printSimpleTable:()=>xt});import xe from"cli-table3";function Ae(e,t){e&&console.log(r.boldInfo(`
2
+ var be=Object.defineProperty;var s=(e,t)=>be(e,"name",{value:t,configurable:!0});var h=(e,t)=>()=>(e&&(t=e(e=0)),t);var M=(e,t)=>{for(var n in t)be(e,n,{get:t[n],enumerable:!0})};import m from"chalk";var wt,o,y=h(()=>{wt={success:s(e=>m.hex("#28a745")(e),"success"),error:s(e=>m.hex("#dc3545")(e),"error"),warning:s(e=>m.hex("#ffc107")(e),"warning"),info:s(e=>m.hex("#17a2b8")(e),"info"),accent:s(e=>m.hex("#6f42c1")(e),"accent"),link:s(e=>m.hex("#0d6efd")(e),"link"),muted:s(e=>m.gray(e),"muted"),boldInfo:s(e=>m.bold.hex("#17a2b8")(e),"boldInfo"),boldAccent:s(e=>m.bold.hex("#6f42c1")(e),"boldAccent"),boldSuccess:s(e=>m.bold.hex("#28a745")(e),"boldSuccess"),white:s(e=>m.white(e),"white")},o=wt});var Pe={};M(Pe,{printKeyValue:()=>g,printObjectList:()=>f});import xe from"cli-table3";function Se(e,t){e&&console.log(o.boldInfo(`
3
3
  ${e}
4
4
  `)),console.log(t.toString()+`
5
- `)}function H(e){return e==null?"":String(e)}function g(e,t=[]){if(t.length===0){console.log(r.warning(`No ${e||"items"} to display.`));return}let n=new xe({head:["Field","Value"],style:Se});for(let[o,i]of t)n.push([H(o),H(i)]);Ae(e,n)}function f(e,t=[],n=[]){if(!Array.isArray(t)||t.length===0){console.log(r.warning(`No ${e||"items"} to display.`));return}let o=new xe({head:n,style:Se});for(let i of t)o.push(n.map(a=>H(i[a])));Ae(e,o)}function xt(e,t=[]){if(!Array.isArray(t)||t.length===0){console.log(r.warning(`No ${e||"items"} to display.`));return}f(e,t,Object.keys(t[0]))}var Se,v=h(()=>{y();Se={head:["cyan"]};s(Ae,"render");s(H,"toStr");s(g,"printKeyValue");s(f,"printObjectList");s(xt,"printSimpleTable")});var Ve={};M(Ve,{compareVersions:()=>At,displaySystemVersions:()=>X,getAngularCliVersion:()=>ke,getAvailableNodeVersions:()=>St,getInstalledNodeVersions:()=>Q,getNodeVersion:()=>T,getNpmVersion:()=>Ce,getNvmVersion:()=>K,installNodeVersion:()=>Z,isNvmInstalled:()=>Y,satisfiesVersion:()=>Pt,switchNodeVersion:()=>_});import{execa as q}from"execa";import Ne from"semver";async function B(e,t,n){try{let{stdout:o}=await q(e,t,n);return o.trim()||null}catch{return null}}async function F(e,t,n){let o=await B(e,t,n);if(!o)return null;let i=o.match(je);return i?i[1]:null}function Ie(e){if(!e)return[];let t=[];for(let n of e.split(`
6
- `)){let o=n.match(je);o&&t.push(o[1])}return t}function T(){return F("node",["--version"])}function Ce(){return F("npm",["--version"])}function K(){return F("nvm",["--version"],N)}async function Y(){return await K()!==null}function ke(){return F("ng",["version"],N)}async function X(){let[e,t,n,o]=await Promise.all([T(),Ce(),K(),ke()]),i=s(a=>a??"Not installed","format");return f("\u{1F50D} System Environment Check",[{Tool:"Node.js",Version:i(e)},{Tool:"npm",Version:i(t)},{Tool:"nvm",Version:i(n)},{Tool:"Angular CLI",Version:i(o)}],["Tool","Version"]),{node:e,npm:t,nvm:n,angularCli:o}}async function St(){let e=await B("nvm",["list","available"],N);return Ie(e)}async function Q(){let e=await B("nvm",["list"],N);return Ie(e)}async function _(e){try{return await q("nvm",["use",e],{...N,stdio:"inherit"}),!0}catch{return!1}}async function Z(e){try{return await q("nvm",["install",e],{...N,stdio:"inherit"}),!0}catch{return!1}}function At(e,t){return Ne.compare(e,t)}function Pt(e,t){return Ne.satisfies(e,t)}var je,N,ee=h(()=>{v();je=/(\d+\.\d+\.\d+)/;s(B,"run");s(F,"runVersion");s(Ie,"extractVersionsFromOutput");N={shell:!0};s(T,"getNodeVersion");s(Ce,"getNpmVersion");s(K,"getNvmVersion");s(Y,"isNvmInstalled");s(ke,"getAngularCliVersion");s(X,"displaySystemVersions");s(St,"getAvailableNodeVersions");s(Q,"getInstalledNodeVersions");s(_,"switchNodeVersion");s(Z,"installNodeVersion");s(At,"compareVersions");s(Pt,"satisfiesVersion")});import De from"axios";import{Agent as Nt}from"node:http";import{Agent as jt}from"node:https";function Lt(e,t){let n=e.split(".").map(Number),o=t.split(".").map(Number);for(let i=0,a=Math.max(n.length,o.length);i<a;i++){let l=(n[i]||0)-(o[i]||0);if(l!==0)return l}return 0}function re(e){return[...e].sort((t,n)=>Lt(n,t))}function Ot(e){return re(e.filter(t=>!Et.test(t)))}function Te({package:e}){return{name:e.name,version:e.version,description:e.description||"No description",author:e.publisher?.username||"Unknown",date:e.date,verified:e.publisher?.verified??!1}}function j(e){return Fe.dedupe(`abbr:${e}`,async()=>{let{data:t}=await Dt.get(`${ne}/${e}`);return t})}function Rt(e){return Fe.dedupe(`full:${e}`,async()=>{let{data:t}=await W.get(`${ne}/${e}`);return t})}async function _e(e,t=10,{signal:n}={}){if(!e?.trim())return[];try{let{data:o}=await W.get(Le,{params:{text:e,size:t},signal:n});return o.objects.map(Te)}catch(o){return o.name==="CanceledError"||n?.aborted?[]:(console.error("Error searching npm packages:",o.message),[])}}async function Mt(e){try{let t=await Rt(e);return{name:t.name,description:t.description||"No description",latestVersion:t["dist-tags"]?.latest,versions:Object.keys(t.versions||{}),homepage:t.homepage,repository:t.repository,license:t.license,keywords:t.keywords||[]}}catch(t){if(t.response?.status===404)return null;throw t}}async function Ft(e){try{let{data:t}=await W.get(`${It}/${e}`);return t.downloads}catch{return 0}}async function We(e){try{let[t,n]=await Promise.all([Mt(e),Ft(e)]);return t?{...t,weeklyDownloads:n}:null}catch(t){return console.error(`Error getting package info for ${e}:`,t.message),null}}function Ue(e){return e>=1e9?`${(e/1e9).toFixed(1)}B`:e>=1e6?`${(e/1e6).toFixed(1)}M`:e>=1e3?`${(e/1e3).toFixed(1)}K`:String(e)}function Tt(e=300){let t=null,n=null;return s(function(i,a){if(t&&clearTimeout(t),n&&n.abort(),!i||i.length<2){a([]);return}let l=n=new AbortController;t=setTimeout(async()=>{try{let{data:c}=await W.get(Le,{params:{text:i,size:10},signal:l.signal});l.signal.aborted||a(c.objects.map(Te))}catch{l.signal.aborted||a([])}},e)},"debouncedSearch")}async function oe(e){try{let t=await j(e),n=Ot(Object.keys(t.versions||{})),o=t["dist-tags"]||{};return{versions:n,latest:o.latest??null,lts:o.lts??null}}catch(t){return console.error(`Error fetching versions for ${e}:`,t.message),{versions:[],latest:null,lts:null}}}function ze(){return oe("@angular/cli")}function Je(e){return[...new Set(e.map(n=>n.split(".")[0]))].sort((n,o)=>Number(o)-Number(n))}function Ge(e,t){let n=`${t}.`,o=[...new Set(e.filter(i=>i.startsWith(n)).map(i=>i.split(".").slice(0,2).join(".")))];return re(o)}function He(e,t){return re(e.filter(n=>n.startsWith(`${t}.`)))}async function qe(e){let t=parseInt(e.split(".")[0],10);try{let o=(await j("@angular/cli")).versions?.[e]?.engines?.node;return o||Ee(t)}catch{return console.log(r.muted(`Unable to fetch Node requirements, deriving from Angular ${t}\u2026`)),Ee(t)}}function Ee(e){let t;return e>=15?t=Math.floor(e/2)*2:e>=10?t=Math.floor((e+2)/2)*2:t=Math.floor(e*1.5/2)*2,`^${t}.0.0 || ^${t+2}.0.0 || ^${t+4}.0.0`}var ne,Le,It,Ct,kt,Vt,Et,Oe,Re,Me,W,Dt,te,Fe,Jn,U=h(()=>{y();ne="https://registry.npmjs.org",Le=`${ne}/-/v1/search`,It="https://api.npmjs.org/downloads/point/last-week",Ct=5e3,kt=1e4,Vt=5*6e4,Et=/-(rc|beta|next|alpha|canary|dev|pre)/i,Oe={keepAlive:!0,maxSockets:15,maxFreeSockets:5},Re=new Nt(Oe),Me=new jt(Oe),W=De.create({timeout:Ct,httpAgent:Re,httpsAgent:Me,headers:{"Accept-Encoding":"gzip, deflate, br"}}),Dt=De.create({timeout:kt,httpAgent:Re,httpsAgent:Me,headers:{Accept:"application/vnd.npm.install-v1+json","Accept-Encoding":"gzip, deflate, br"}}),te=class{static{s(this,"TTLCache")}#e=new Map;#t=new Map;#n;constructor(t=Vt){this.#n=t}get(t){let n=this.#e.get(t);if(n){if(Date.now()>n.exp){this.#e.delete(t);return}return n.value}}set(t,n){return this.#e.set(t,{value:n,exp:Date.now()+this.#n}),this}async dedupe(t,n){let o=this.get(t);if(o!==void 0)return o;if(!this.#t.has(t)){let i=n().then(a=>(this.set(t,a),this.#t.delete(t),a)).catch(a=>{throw this.#t.delete(t),a});this.#t.set(t,i)}return this.#t.get(t)}clear(){this.#e.clear(),this.#t.clear()}},Fe=new te;s(Lt,"semverCompare");s(re,"sortDesc");s(Ot,"stableSortedDesc");s(Te,"mapSearchResult");s(j,"fetchAbbreviated");s(Rt,"fetchFull");s(_e,"searchNpmPackages");s(Mt,"getPackageDetails");s(Ft,"getPackageDownloads");s(We,"getEnhancedPackageInfo");s(Ue,"formatDownloads");s(Tt,"createDebouncedSearch");Jn=Tt();s(oe,"getPackageVersions");s(ze,"getAngularVersions");s(Je,"getMajorVersions");s(Ge,"getMinorVersionsForMajor");s(He,"getPatchVersionsForMinor");s(qe,"getNodeRequirementsForAngular");s(Ee,"deriveNodeRequirement")});import w from"semver";function se(e){for(let t of _t)if(e[t])return e[t];return null}function Be(e){return Object.keys(e.versions||{}).filter(t=>w.valid(t)&&!w.prerelease(t)).sort(w.rcompare)}function ie(e,t){try{return w.satisfies(e,t)}catch{let n=e.split(".")[0];return t.includes(`^${n}.`)||t.includes(`~${n}.`)||t.includes(`>=${n}.`)||t.includes(`${n}.x`)}}function Ut(e){return Wt.some(t=>e.startsWith(t))}function Ke(e,t){try{return{compatible:w.satisfies(e,t),current:e,required:t}}catch(n){return{compatible:!1,current:e,required:t,error:n.message}}}function Ye(e){return g("\u{1F4CB} Compatibility Check",[["Current Node.js",r.info(`v${e.current}`)],["Required Node.js",r.info(e.required)],["Status",e.compatible?r.success("\u2713 Compatible"):r.error("\u2717 Incompatible")]]),e.compatible}function Xe(e,t){return e.filter(n=>{try{return w.satisfies(n,t)}catch{return!1}}).sort(w.rcompare)}function Qe(e){try{let t=w.minVersion(e);if(t)return t.version}catch{}return console.log(r.warning("\u26A0\uFE0F Could not parse Node version range. Please install the latest LTS version.")),null}async function z(e,t,n){try{let i=(await j(e)).versions?.[t]?.peerDependencies??{},a=se(i);if(!a)return{compatible:!0,hasPeerDependency:!1,reason:"No Angular peer dependency found"};let l=ie(n,a);return{compatible:l,peerDependency:a,hasPeerDependency:!0,reason:l?`Angular ${n} satisfies ${a}`:`Angular ${n} does not satisfy ${a}`}}catch{return{compatible:!0,hasPeerDependency:!1,reason:"Could not verify compatibility"}}}async function Ze(e,t,n=10){try{let o=await j(e),i=Be(o),a=[];for(let l of i){if(a.length>=n)break;let c=o.versions[l]?.peerDependencies??{},u=se(c);(!u||ie(t,u))&&a.push({version:l,peerDependency:u??"No Angular peer dependency",reason:u?`Satisfies ${u}`:"No peer dependency constraint"})}return a}catch{return[]}}async function zt(e,t){let n;try{n=await j(e)}catch{return{version:"latest",source:"fallback",reason:"Could not fetch package data",warning:!0,matchType:"fallback"}}let o=w.major(t),i=Be(n),a=n["dist-tags"]?.latest;if(Ut(e)){let l=i.find(c=>parseInt(c.split(".")[0],10)===o);if(l)return{version:`^${l}`,source:"dynamic",reason:`Matched Angular major version ${o}`,matchType:"ecosystem"}}for(let l of i){let c=n.versions[l]?.peerDependencies??{},u=se(c);if(!u)return{version:`^${l}`,source:"dynamic",reason:"No Angular peer dependency",matchType:"no-peer"};if(ie(t,u))return{version:`^${l}`,source:"dynamic",reason:`Angular ${t} satisfies ${u}`,peerDependency:u,matchType:"peer-dependency"}}return{version:a?`^${a}`:"latest",source:"fallback",reason:"No version with compatible Angular peer dependency found",warning:!0,matchType:"fallback"}}async function et(e,t){return Promise.all(e.map(n=>Jt(n,t)))}async function Jt(e,t){let n=e.version||"latest";if(n==="latest"){let a=await zt(e.name,t);return{...e,version:a.version,originalVersion:n,adjusted:a.source==="dynamic",source:a.source,reason:a.reason,warning:a.warning||!1}}let o=n.replace(/^[\^~]/,""),i=await z(e.name,o,t);return{...e,adjusted:!1,compatible:i.compatible,reason:i.reason,warning:!i.compatible}}var _t,Wt,ae=h(()=>{y();v();U();_t=["@angular/core","@angular/common","@angular/platform-browser"],Wt=["@angular/","@ngrx/","@ngxs/","@ng-bootstrap/","@angular-eslint/"];s(se,"findAngularPeerDep");s(Be,"stableVersionsDesc");s(ie,"satisfiesSafe");s(Ut,"isEcosystemPackage");s(Ke,"checkNodeCompatibility");s(Ye,"displayCompatibilityStatus");s(Xe,"findCompatibleVersions");s(Qe,"getRecommendedNodeVersion");s(z,"isVersionCompatibleWithAngular");s(Ze,"getAllCompatibleVersions");s(zt,"findCompatibleLibraryVersion");s(et,"resolveLibraryVersionsAsync");s(Jt,"resolveLibrary")});import{execa as ce}from"execa";import I from"ora";import{platform as Gt}from"os";async function nt({args:e,cwd:t,spinner:n,successMsg:o,failMsg:i,manualHint:a=[]}){try{return await ce("npm",e,{cwd:t}),n.succeed(o),!0}catch{}n.warn("Peer dependency conflict \u2014 retrying with --legacy-peer-deps\u2026");try{return await ce("npm",[...e,"--legacy-peer-deps"],{cwd:t}),n.succeed(`${o} (with --legacy-peer-deps)`),console.log(r.warning("\u26A0\uFE0F Note: Installed with --legacy-peer-deps due to peer dependency conflicts")),!0}catch(l){if(n.fail(i),console.error(r.error(l.message)),a.length>0){console.log(r.warning(`
7
- \u{1F4A1} Tip: You can try installing manually with:`));for(let c of a)console.log(r.info(` ${c}`))}return!1}}function qt(e=[],{dev:t=!1}={}){let n=["install"];return t&&n.push("--save-dev"),e.length>0&&n.push(...e),n}async function rt(e,t,{spinner:n,successMsg:o,failMsg:i}){n.stop();try{return await ce(e,t,{stdio:"inherit"}),I().succeed(o),!0}catch(a){return I().fail(i),console.error(r.error(a.message)),!1}}async function ot(e="LTS"){let t=e==="LTS"?"OpenJS.NodeJS.LTS":"OpenJS.NodeJS",n=I("Installing Node.js with winget\u2026").start();return rt("winget",["install",t],{spinner:n,successMsg:"Node.js installed successfully",failMsg:"Failed to install Node.js"})}function Bt(){return tt[Ht]??tt.linux}function st(){let e=Bt();g("\u{1F4DA} NVM Installation Guide",[["OS",r.info(e.os)],["Download/Repo",r.link(e.download??e.repo??"-")],["Install",e.install?r.success(e.install):"-"],["Alternative",e.alternative?r.success(e.alternative):"-"]]);let t=s(n=>n.map((o,i)=>({Step:`${i+1}`,Instruction:o})),"toRows");e.steps&&f("Steps",t(e.steps),["Step","Instruction"]),e.postInstall&&f("Post-Install",t(e.postInstall),["Step","Instruction"]),f("Why use NVM?",[{Benefit:"Manage multiple Node.js versions"},{Benefit:"Switch instantly"},{Benefit:"No sudo/admin required"},{Benefit:"Per-project Node versions"}],["Benefit"])}function le(e,t,n=!1){let o=`${e.length} ${n?"dev ":""}package(s)`,i=I(`Installing ${o}\u2026`).start();return nt({args:qt(e,{dev:n}),cwd:t,spinner:i,successMsg:`${o} installed successfully`,failMsg:`Failed to install ${o}`,manualHint:[`cd ${t}`,`npm install ${e.join(" ")}${n?" --save-dev":""} --force`]})}function it(e){let t=I("Installing dependencies\u2026").start();return nt({args:["install"],cwd:e,spinner:t,successMsg:"Dependencies installed successfully",failMsg:"Failed to install dependencies",manualHint:[`cd ${e}`,"npm install --force"]})}function Kt(e,t={}){let n=["new",e],o={skipInstall:"--skip-install",routing:"--routing",style:"--style",strict:"--strict",standalone:"--standalone"};for(let[i,a]of Object.entries(o)){let l=t[i];l!==void 0&&(l===!0&&a==="--skip-install"?n.push(a):l!==void 0&&n.push(`${a}=${l}`))}return n}async function at(e,t,n={}){let o=t?`@angular/cli@${t}`:"@angular/cli",i=Kt(e,n),a=I(`Creating Angular project: ${e}\u2026`).start();return rt("npx",[o,...i],{spinner:a,successMsg:`Angular project ${e} created successfully`,failMsg:"Failed to create Angular project"})}var Ht,tt,ct=h(()=>{y();v();Ht=Gt();s(nt,"npmExecWithRetry");s(qt,"buildInstallArgs");s(rt,"execInteractive");s(ot,"installNodeWithWinget");tt={win32:{os:"Windows",download:"https://github.com/coreybutler/nvm-windows/releases",steps:["Download nvm-setup.exe","Run the installer","Restart your terminal"]},darwin:{os:"macOS",repo:"https://github.com/nvm-sh/nvm",install:"curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/master/install.sh | bash",postInstall:["Restart terminal","If using zsh: source ~/.zshrc","If using bash: source ~/.bash_profile"],steps:["Run the install command","Reload your shell configuration","Verify: nvm --version","Install Node: nvm install node"]},linux:{os:"Linux",repo:"https://github.com/nvm-sh/nvm",install:"curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/master/install.sh | bash",alternative:"wget -qO- https://raw.githubusercontent.com/nvm-sh/nvm/master/install.sh | bash",steps:["Run install command","Restart terminal or run: source ~/.bashrc","Verify: nvm --version","Install Node: nvm install node"]}};s(Bt,"getNvmInstallInstructions");s(st,"displayNvmInstallGuide");s(le,"installPackages");s(it,"runNpmInstall");s(Kt,"buildNgNewArgs");s(at,"createAngularProject")});import{search as Yt,select as b,input as ue,confirm as pe}from"@inquirer/prompts";async function fe(e,t){let{versions:n,latest:o=null,lts:i=null}=t;if(n.length===0)return console.log(r.warning(`No stable versions found for ${e}.`)),null;let a=Je(n),l=await b({message:`Select ${e} major version:`,choices:a.map(p=>({name:o?.startsWith(`${p}.`)?`${e} ${p} (latest)`:`${e} ${p}`,value:p})),pageSize:15}),c=Ge(n,l),u=await b({message:`Select ${e} ${l} minor version:`,choices:c.map(p=>({name:`v${p}.x`,value:p})),pageSize:15}),d=He(n,u);return b({message:`Select ${e} ${u} patch version:`,choices:d.map(p=>{let P=`v${p}`;return p===o&&(P+=" (latest)"),p===i&&(P+=" (LTS)"),{name:P,value:p}}),pageSize:15})}function Xt(e){let t=e.verified?" \u2713":"",n=e.description.length>50?`${e.description.substring(0,50)}\u2026`:e.description;return`${e.name}${t} - ${n} (v${e.version})`}async function Qt(e,t,n){console.log(r.info(`
5
+ `)}function G(e){return e==null?"":String(e)}function g(e,t=[]){if(t.length===0){console.log(o.warning(`No ${e||"items"} to display.`));return}let n=new xe({head:["Field","Value"],style:$e});for(let[r,i]of t)n.push([G(r),G(i)]);Se(e,n)}function f(e,t=[],n=[]){if(!Array.isArray(t)||t.length===0){console.log(o.warning(`No ${e||"items"} to display.`));return}let r=new xe({head:n,style:$e});for(let i of t)r.push(n.map(a=>G(i[a])));Se(e,r)}var $e,v=h(()=>{y();$e={head:["cyan"]};s(Se,"render");s(G,"toStr");s(g,"printKeyValue");s(f,"printObjectList")});var Ce={};M(Ce,{displaySystemVersions:()=>Y,getAngularCliVersion:()=>Ie,getAvailableNodeVersions:()=>vt,getInstalledNodeVersions:()=>X,getNodeVersion:()=>T,getNpmVersion:()=>je,getNvmVersion:()=>B,installNodeVersion:()=>Q,isNvmInstalled:()=>K,switchNodeVersion:()=>_});import{execa as q}from"execa";import"semver";async function H(e,t,n){try{let{stdout:r}=await q(e,t,n);return r.trim()||null}catch{return null}}async function F(e,t,n){let r=await H(e,t,n);if(!r)return null;let i=r.match(Ae);return i?i[1]:null}function Ne(e){if(!e)return[];let t=[];for(let n of e.split(`
6
+ `)){let r=n.match(Ae);r&&t.push(r[1])}return t}function T(){return F("node",["--version"])}function je(){return F("npm",["--version"])}function B(){return F("nvm",["--version"],A)}async function K(){return await B()!==null}function Ie(){return F("ng",["version"],A)}async function Y(){let[e,t,n,r]=await Promise.all([T(),je(),B(),Ie()]),i=s(a=>a??"Not installed","format");return f("\u{1F50D} System Environment Check",[{Tool:"Node.js",Version:i(e)},{Tool:"npm",Version:i(t)},{Tool:"nvm",Version:i(n)},{Tool:"Angular CLI",Version:i(r)}],["Tool","Version"]),{node:e,npm:t,nvm:n,angularCli:r}}async function vt(){let e=await H("nvm",["list","available"],A);return Ne(e)}async function X(){let e=await H("nvm",["list"],A);return Ne(e)}async function _(e){try{return await q("nvm",["use",e],{...A,stdio:"inherit"}),!0}catch{return!1}}async function Q(e){try{return await q("nvm",["install",e],{...A,stdio:"inherit"}),!0}catch{return!1}}var Ae,A,Z=h(()=>{v();Ae=/(\d+\.\d+\.\d+)/;s(H,"run");s(F,"runVersion");s(Ne,"extractVersionsFromOutput");A={shell:!0};s(T,"getNodeVersion");s(je,"getNpmVersion");s(B,"getNvmVersion");s(K,"isNvmInstalled");s(Ie,"getAngularCliVersion");s(Y,"displaySystemVersions");s(vt,"getAvailableNodeVersions");s(X,"getInstalledNodeVersions");s(_,"switchNodeVersion");s(Q,"installNodeVersion")});import Ve from"axios";import{Agent as bt}from"node:http";import{Agent as xt}from"node:https";function Ct(e,t){let n=e.split(".").map(Number),r=t.split(".").map(Number);for(let i=0,a=Math.max(n.length,r.length);i<a;i++){let u=(n[i]||0)-(r[i]||0);if(u!==0)return u}return 0}function oe(e){return[...e].sort((t,n)=>Ct(n,t))}function kt(e){return oe(e.filter(t=>!jt.test(t)))}function Vt({package:e}){return{name:e.name,version:e.version,description:e.description||"No description",author:e.publisher?.username||"Unknown",date:e.date,verified:e.publisher?.verified??!1}}function N(e){return Re.dedupe(`abbr:${e}`,async()=>{let{data:t}=await It.get(`${te}/${e}`);return t})}function Dt(e){return Re.dedupe(`full:${e}`,async()=>{let{data:t}=await ne.get(`${te}/${e}`);return t})}async function Oe(e,t=10,{signal:n}={}){if(!e?.trim())return[];try{let{data:r}=await ne.get($t,{params:{text:e,size:t},signal:n});return r.objects.map(Vt)}catch(r){return r.name==="CanceledError"||n?.aborted?[]:(console.error("Error searching npm packages:",r.message),[])}}async function Et(e){try{let t=await Dt(e);return{name:t.name,description:t.description||"No description",latestVersion:t["dist-tags"]?.latest,versions:Object.keys(t.versions||{}),homepage:t.homepage,repository:t.repository,license:t.license,keywords:t.keywords||[]}}catch(t){if(t.response?.status===404)return null;throw t}}async function Lt(e){try{let{data:t}=await ne.get(`${St}/${e}`);return t.downloads}catch{return 0}}async function Me(e){try{let[t,n]=await Promise.all([Et(e),Lt(e)]);return t?{...t,weeklyDownloads:n}:null}catch(t){return console.error(`Error getting package info for ${e}:`,t.message),null}}function Fe(e){return e>=1e9?`${(e/1e9).toFixed(1)}B`:e>=1e6?`${(e/1e6).toFixed(1)}M`:e>=1e3?`${(e/1e3).toFixed(1)}K`:String(e)}async function re(e){try{let t=await N(e),n=kt(Object.keys(t.versions||{})),r=t["dist-tags"]||{};return{versions:n,latest:r.latest??null,lts:r.lts??null}}catch(t){return console.error(`Error fetching versions for ${e}:`,t.message),{versions:[],latest:null,lts:null}}}function Te(){return re("@angular/cli")}function _e(e){return[...new Set(e.map(n=>n.split(".")[0]))].sort((n,r)=>Number(r)-Number(n))}function We(e,t){let n=`${t}.`,r=[...new Set(e.filter(i=>i.startsWith(n)).map(i=>i.split(".").slice(0,2).join(".")))];return oe(r)}function Ue(e,t){return oe(e.filter(n=>n.startsWith(`${t}.`)))}async function ze(e){let t=parseInt(e.split(".")[0],10);try{let r=(await N("@angular/cli")).versions?.[e]?.engines?.node;return r||ke(t)}catch{return console.log(o.muted(`Unable to fetch Node requirements, deriving from Angular ${t}\u2026`)),ke(t)}}function ke(e){let t;return e>=15?t=Math.floor(e/2)*2:e>=10?t=Math.floor((e+2)/2)*2:t=Math.floor(e*1.5/2)*2,`^${t}.0.0 || ^${t+2}.0.0 || ^${t+4}.0.0`}var te,$t,St,Pt,At,Nt,jt,De,Ee,Le,ne,It,ee,Re,W=h(()=>{y();te="https://registry.npmjs.org",$t=`${te}/-/v1/search`,St="https://api.npmjs.org/downloads/point/last-week",Pt=5e3,At=1e4,Nt=5*6e4,jt=/-(rc|beta|next|alpha|canary|dev|pre)/i,De={keepAlive:!0,maxSockets:15,maxFreeSockets:5},Ee=new bt(De),Le=new xt(De),ne=Ve.create({timeout:Pt,httpAgent:Ee,httpsAgent:Le,headers:{"Accept-Encoding":"gzip, deflate, br"}}),It=Ve.create({timeout:At,httpAgent:Ee,httpsAgent:Le,headers:{Accept:"application/vnd.npm.install-v1+json","Accept-Encoding":"gzip, deflate, br"}}),ee=class{static{s(this,"TTLCache")}#e=new Map;#t=new Map;#n;constructor(t=Nt){this.#n=t}get(t){let n=this.#e.get(t);if(n){if(Date.now()>n.exp){this.#e.delete(t);return}return n.value}}set(t,n){return this.#e.set(t,{value:n,exp:Date.now()+this.#n}),this}async dedupe(t,n){let r=this.get(t);if(r!==void 0)return r;if(!this.#t.has(t)){let i=n().then(a=>(this.set(t,a),this.#t.delete(t),a)).catch(a=>{throw this.#t.delete(t),a});this.#t.set(t,i)}return this.#t.get(t)}clear(){this.#e.clear(),this.#t.clear()}},Re=new ee;s(Ct,"semverCompare");s(oe,"sortDesc");s(kt,"stableSortedDesc");s(Vt,"mapSearchResult");s(N,"fetchAbbreviated");s(Dt,"fetchFull");s(Oe,"searchNpmPackages");s(Et,"getPackageDetails");s(Lt,"getPackageDownloads");s(Me,"getEnhancedPackageInfo");s(Fe,"formatDownloads");s(re,"getPackageVersions");s(Te,"getAngularVersions");s(_e,"getMajorVersions");s(We,"getMinorVersionsForMajor");s(Ue,"getPatchVersionsForMinor");s(ze,"getNodeRequirementsForAngular");s(ke,"deriveNodeRequirement")});import w from"semver";function se(e){for(let t of Rt)if(e[t])return e[t];return null}function Je(e){return Object.keys(e.versions||{}).filter(t=>w.valid(t)&&!w.prerelease(t)).sort(w.rcompare)}function ie(e,t){try{return w.satisfies(e,t)}catch{let n=e.split(".")[0];return t.includes(`^${n}.`)||t.includes(`~${n}.`)||t.includes(`>=${n}.`)||t.includes(`${n}.x`)}}function Mt(e){return Ot.some(t=>e.startsWith(t))}function Ge(e,t){try{return{compatible:w.satisfies(e,t),current:e,required:t}}catch(n){return{compatible:!1,current:e,required:t,error:n.message}}}function qe(e){return g("\u{1F4CB} Compatibility Check",[["Current Node.js",o.info(`v${e.current}`)],["Required Node.js",o.info(e.required)],["Status",e.compatible?o.success("\u2713 Compatible"):o.error("\u2717 Incompatible")]]),e.compatible}function He(e,t){return e.filter(n=>{try{return w.satisfies(n,t)}catch{return!1}}).sort(w.rcompare)}function Be(e){try{let t=w.minVersion(e);if(t)return t.version}catch{}return console.log(o.warning("\u26A0\uFE0F Could not parse Node version range. Please install the latest LTS version.")),null}async function U(e,t,n){try{let i=(await N(e)).versions?.[t]?.peerDependencies??{},a=se(i);if(!a)return{compatible:!0,hasPeerDependency:!1,reason:"No Angular peer dependency found"};let u=ie(n,a);return{compatible:u,peerDependency:a,hasPeerDependency:!0,reason:u?`Angular ${n} satisfies ${a}`:`Angular ${n} does not satisfy ${a}`}}catch{return{compatible:!0,hasPeerDependency:!1,reason:"Could not verify compatibility"}}}async function Ke(e,t,n=10){try{let r=await N(e),i=Je(r),a=[];for(let u of i){if(a.length>=n)break;let c=r.versions[u]?.peerDependencies??{},l=se(c);(!l||ie(t,l))&&a.push({version:u,peerDependency:l??"No Angular peer dependency",reason:l?`Satisfies ${l}`:"No peer dependency constraint"})}return a}catch{return[]}}async function Ft(e,t){let n;try{n=await N(e)}catch{return{version:"latest",source:"fallback",reason:"Could not fetch package data",warning:!0,matchType:"fallback"}}let r=w.major(t),i=Je(n),a=n["dist-tags"]?.latest;if(Mt(e)){let u=i.find(c=>parseInt(c.split(".")[0],10)===r);if(u)return{version:`^${u}`,source:"dynamic",reason:`Matched Angular major version ${r}`,matchType:"ecosystem"}}for(let u of i){let c=n.versions[u]?.peerDependencies??{},l=se(c);if(!l)return{version:`^${u}`,source:"dynamic",reason:"No Angular peer dependency",matchType:"no-peer"};if(ie(t,l))return{version:`^${u}`,source:"dynamic",reason:`Angular ${t} satisfies ${l}`,peerDependency:l,matchType:"peer-dependency"}}return{version:a?`^${a}`:"latest",source:"fallback",reason:"No version with compatible Angular peer dependency found",warning:!0,matchType:"fallback"}}async function Ye(e,t){return Promise.all(e.map(n=>Tt(n,t)))}async function Tt(e,t){let n=e.version||"latest";if(n==="latest"){let a=await Ft(e.name,t);return{...e,version:a.version,originalVersion:n,adjusted:a.source==="dynamic",source:a.source,reason:a.reason,warning:a.warning||!1}}let r=n.replace(/^[\^~]/,""),i=await U(e.name,r,t);return{...e,adjusted:!1,compatible:i.compatible,reason:i.reason,warning:!i.compatible}}var Rt,Ot,ae=h(()=>{y();v();W();Rt=["@angular/core","@angular/common","@angular/platform-browser"],Ot=["@angular/","@ngrx/","@ngxs/","@ng-bootstrap/","@angular-eslint/"];s(se,"findAngularPeerDep");s(Je,"stableVersionsDesc");s(ie,"satisfiesSafe");s(Mt,"isEcosystemPackage");s(Ge,"checkNodeCompatibility");s(qe,"displayCompatibilityStatus");s(He,"findCompatibleVersions");s(Be,"getRecommendedNodeVersion");s(U,"isVersionCompatibleWithAngular");s(Ke,"getAllCompatibleVersions");s(Ft,"findCompatibleLibraryVersion");s(Ye,"resolveLibraryVersionsAsync");s(Tt,"resolveLibrary")});import{execa as ce}from"execa";import j from"ora";import{platform as _t}from"os";async function Qe({args:e,cwd:t,spinner:n,successMsg:r,failMsg:i,manualHint:a=[]}){try{return await ce("npm",e,{cwd:t}),n.succeed(r),!0}catch{}n.warn("Peer dependency conflict \u2014 retrying with --legacy-peer-deps\u2026");try{return await ce("npm",[...e,"--legacy-peer-deps"],{cwd:t}),n.succeed(`${r} (with --legacy-peer-deps)`),console.log(o.warning("\u26A0\uFE0F Note: Installed with --legacy-peer-deps due to peer dependency conflicts")),!0}catch(u){if(n.fail(i),console.error(o.error(u.message)),a.length>0){console.log(o.warning(`
7
+ \u{1F4A1} Tip: You can try installing manually with:`));for(let c of a)console.log(o.info(` ${c}`))}return!1}}function Ut(e=[],{dev:t=!1}={}){let n=["install"];return t&&n.push("--save-dev"),e.length>0&&n.push(...e),n}async function Ze(e,t,{spinner:n,successMsg:r,failMsg:i}){n.stop();try{return await ce(e,t,{stdio:"inherit"}),j().succeed(r),!0}catch(a){return j().fail(i),console.error(o.error(a.message)),!1}}async function et(e="LTS"){let t=e==="LTS"?"OpenJS.NodeJS.LTS":"OpenJS.NodeJS",n=j("Installing Node.js with winget\u2026").start();return Ze("winget",["install",t],{spinner:n,successMsg:"Node.js installed successfully",failMsg:"Failed to install Node.js"})}function zt(){return Xe[Wt]??Xe.linux}function tt(){let e=zt();g("\u{1F4DA} NVM Installation Guide",[["OS",o.info(e.os)],["Download/Repo",o.link(e.download??e.repo??"-")],["Install",e.install?o.success(e.install):"-"],["Alternative",e.alternative?o.success(e.alternative):"-"]]);let t=s(n=>n.map((r,i)=>({Step:`${i+1}`,Instruction:r})),"toRows");e.steps&&f("Steps",t(e.steps),["Step","Instruction"]),e.postInstall&&f("Post-Install",t(e.postInstall),["Step","Instruction"]),f("Why use NVM?",[{Benefit:"Manage multiple Node.js versions"},{Benefit:"Switch instantly"},{Benefit:"No sudo/admin required"},{Benefit:"Per-project Node versions"}],["Benefit"])}function le(e,t,n=!1){let r=`${e.length} ${n?"dev ":""}package(s)`,i=j(`Installing ${r}\u2026`).start();return Qe({args:Ut(e,{dev:n}),cwd:t,spinner:i,successMsg:`${r} installed successfully`,failMsg:`Failed to install ${r}`,manualHint:[`cd ${t}`,`npm install ${e.join(" ")}${n?" --save-dev":""} --force`]})}function nt(e){let t=j("Installing dependencies\u2026").start();return Qe({args:["install"],cwd:e,spinner:t,successMsg:"Dependencies installed successfully",failMsg:"Failed to install dependencies",manualHint:[`cd ${e}`,"npm install --force"]})}function Jt(e,t={}){let n=["new",e],r={skipInstall:"--skip-install",routing:"--routing",style:"--style",strict:"--strict",standalone:"--standalone"};for(let[i,a]of Object.entries(r)){let u=t[i];u!==void 0&&(u===!0&&a==="--skip-install"?n.push(a):u!==void 0&&n.push(`${a}=${u}`))}return n}async function ot(e,t,n={}){let r=t?`@angular/cli@${t}`:"@angular/cli",i=Jt(e,n),a=j(`Creating Angular project: ${e}\u2026`).start();return Ze("npx",[r,...i],{spinner:a,successMsg:`Angular project ${e} created successfully`,failMsg:"Failed to create Angular project"})}var Wt,Xe,rt=h(()=>{y();v();Wt=_t();s(Qe,"npmExecWithRetry");s(Ut,"buildInstallArgs");s(Ze,"execInteractive");s(et,"installNodeWithWinget");Xe={win32:{os:"Windows",download:"https://github.com/coreybutler/nvm-windows/releases",steps:["Download nvm-setup.exe","Run the installer","Restart your terminal"]},darwin:{os:"macOS",repo:"https://github.com/nvm-sh/nvm",install:"curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/master/install.sh | bash",postInstall:["Restart terminal","If using zsh: source ~/.zshrc","If using bash: source ~/.bash_profile"],steps:["Run the install command","Reload your shell configuration","Verify: nvm --version","Install Node: nvm install node"]},linux:{os:"Linux",repo:"https://github.com/nvm-sh/nvm",install:"curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/master/install.sh | bash",alternative:"wget -qO- https://raw.githubusercontent.com/nvm-sh/nvm/master/install.sh | bash",steps:["Run install command","Restart terminal or run: source ~/.bashrc","Verify: nvm --version","Install Node: nvm install node"]}};s(zt,"getNvmInstallInstructions");s(tt,"displayNvmInstallGuide");s(le,"installPackages");s(nt,"runNpmInstall");s(Jt,"buildNgNewArgs");s(ot,"createAngularProject")});import{search as Gt,select as b,input as ue,confirm as pe}from"@inquirer/prompts";async function fe(e,t){let{versions:n,latest:r=null,lts:i=null}=t;if(n.length===0)return console.log(o.warning(`No stable versions found for ${e}.`)),null;let a=_e(n),u=await b({message:`Select ${e} major version:`,choices:a.map(p=>({name:r?.startsWith(`${p}.`)?`${e} ${p} (latest)`:`${e} ${p}`,value:p})),pageSize:15}),c=We(n,u),l=await b({message:`Select ${e} ${u} minor version:`,choices:c.map(p=>({name:`v${p}.x`,value:p})),pageSize:15}),d=Ue(n,l);return b({message:`Select ${e} ${l} patch version:`,choices:d.map(p=>{let P=`v${p}`;return p===r&&(P+=" (latest)"),p===i&&(P+=" (LTS)"),{name:P,value:p}}),pageSize:15})}function qt(e){let t=e.verified?" \u2713":"",n=e.description.length>50?`${e.description.substring(0,50)}\u2026`:e.description;return`${e.name}${t} - ${n} (v${e.version})`}async function Ht(e,t,n){console.log(o.info(`
8
8
  \u{1F50D} Checking compatibility with Angular ${n}\u2026
9
- `));let o=await z(e,t,n);if(o.compatible)return console.log(r.success(`\u2713 ${e}@${t} is compatible with Angular ${n}`)),o.peerDependency&&console.log(r.muted(` Peer dependency: ${o.peerDependency}
10
- `)),{version:t,skip:!1};if(console.log(r.error(`\u2717 ${e}@${t} may not be compatible with Angular ${n}`)),console.log(r.muted(` ${o.reason}
11
- `)),!await pe({message:"Would you like to see compatible versions?",default:!0}))return{version:t,skip:!1};console.log(r.info(`
9
+ `));let r=await U(e,t,n);if(r.compatible)return console.log(o.success(`\u2713 ${e}@${t} is compatible with Angular ${n}`)),r.peerDependency&&console.log(o.muted(` Peer dependency: ${r.peerDependency}
10
+ `)),{version:t,skip:!1};if(console.log(o.error(`\u2717 ${e}@${t} may not be compatible with Angular ${n}`)),console.log(o.muted(` ${r.reason}
11
+ `)),!await pe({message:"Would you like to see compatible versions?",default:!0}))return{version:t,skip:!1};console.log(o.info(`
12
12
  \u{1F50D} Searching for compatible versions\u2026
13
- `));let i=await Ze(e,n,10);return i.length>0?{version:await b({message:"Select a compatible version:",choices:[...i.map(c=>({name:`${c.version}${c.peerDependency?` (peer: ${c.peerDependency})`:""}`,value:c.version})),{name:"Keep selected version anyway",value:t}],pageSize:12}),skip:!1}:(console.log(r.warning("No compatible versions found automatically.")),await pe({message:"Continue with the selected version anyway?",default:!1})?{version:t,skip:!1}:{version:t,skip:!0})}async function de(e){let t=await b({message:"What would you like to do next?",choices:[{name:"Add another library",value:"add"},{name:"Remove a library",value:"remove",disabled:e.count===0},{name:"Finish library selection",value:"finish"}],default:"add"});if(t!=="remove")return t;let n=await b({message:"Select library to remove:",choices:e.getAll().map(o=>({name:`${o.name}@${o.version}`,value:o.name}))});return e.remove(n),console.log(r.warning(`
13
+ `));let i=await Ke(e,n,10);return i.length>0?{version:await b({message:"Select a compatible version:",choices:[...i.map(c=>({name:`${c.version}${c.peerDependency?` (peer: ${c.peerDependency})`:""}`,value:c.version})),{name:"Keep selected version anyway",value:t}],pageSize:12}),skip:!1}:(console.log(o.warning("No compatible versions found automatically.")),await pe({message:"Continue with the selected version anyway?",default:!1})?{version:t,skip:!1}:{version:t,skip:!0})}async function de(e){let t=await b({message:"What would you like to do next?",choices:[{name:"Add another library",value:"add"},{name:"Remove a library",value:"remove",disabled:e.count===0},{name:"Finish library selection",value:"finish"}],default:"add"});if(t!=="remove")return t;let n=await b({message:"Select library to remove:",choices:e.getAll().map(r=>({name:`${r.name}@${r.version}`,value:r.name}))});return e.remove(n),console.log(o.warning(`
14
14
  \u2713 Removed ${n}
15
- `)),"add"}async function lt(e=null){let t=new J;console.log(r.boldInfo(`
15
+ `)),"add"}async function st(e=null){let t=new z;console.log(o.boldInfo(`
16
16
  \u{1F4E6} Interactive Library Search
17
- `)),e&&console.log(r.muted(`Angular version: ${e} (compatibility will be checked)
18
- `)),console.log(r.muted(`Type to search npm packages. Press Enter to select.
19
- `));let n="add";for(;n==="add";)try{t.count>0&&t.display();let o=await Yt({message:"Search for a library:",source:s(async(u,{signal:d})=>{if(!u||u.length<2)return[];let p=await _e(u,15,{signal:d});if(d.aborted)return[];let P=p.filter(E=>!t.has(E.name));return P.length===0&&p.length>0?[{name:r.warning("All matching libraries have already been selected"),value:null,disabled:!0}]:P.map(E=>({name:Xt(E),value:E.name,description:E.description}))},"source"),pageSize:10});if(!o){if(!await pe({message:"Continue searching?",default:!1}))break;continue}let[i,a]=await Promise.all([We(o),oe(o)]);if(!i){console.log(r.warning(`Could not fetch info for ${o}. Skipping.
17
+ `)),e&&console.log(o.muted(`Angular version: ${e} (compatibility will be checked)
18
+ `)),console.log(o.muted(`Type to search npm packages. Press Enter to select.
19
+ `));let n="add";for(;n==="add";)try{t.count>0&&t.display();let r=await Gt({message:"Search for a library:",source:s(async(l,{signal:d})=>{if(!l||l.length<2)return[];let p=await Oe(l,15,{signal:d});if(d.aborted)return[];let P=p.filter(D=>!t.has(D.name));return P.length===0&&p.length>0?[{name:o.warning("All matching libraries have already been selected"),value:null,disabled:!0}]:P.map(D=>({name:qt(D),value:D.name,description:D.description}))},"source"),pageSize:10});if(!r){if(!await pe({message:"Continue searching?",default:!1}))break;continue}let[i,a]=await Promise.all([Me(r),re(r)]);if(!i){console.log(o.warning(`Could not fetch info for ${r}. Skipping.
20
20
  `));continue}g(`
21
- Selected Package`,[["Name",r.success(i.name)],["Description",r.muted(i.description)],["Latest version",r.info(i.latestVersion)],["Weekly downloads",r.muted(Ue(i.weeklyDownloads))]]);let l=await b({message:"How would you like to select the version?",choices:[{name:`Use latest (${i.latestVersion})`,value:"latest"},{name:"Choose specific version (major.minor.patch)",value:"specific"},{name:"Enter version manually",value:"manual"}],default:"latest"}),c=i.latestVersion;if(l==="specific")if(a.versions.length===0)console.log(r.warning("Could not fetch versions. Using latest."));else{let u=await fe(i.name,a);u&&(c=u)}else l==="manual"&&(c=await ue({message:"Enter version:",default:i.latestVersion,validate:s(u=>u?!0:"Version is required","validate")}));if(e&&c!=="latest"){let u=await Qt(i.name,c,e);if(u.skip){console.log(r.warning(`Skipping this library.
22
- `)),n=await de(t);continue}c=u.version}t.add({name:i.name,version:c,description:i.description}),console.log(r.success(`\u2713 Added ${i.name}@${c} to installation queue
23
- `)),n=await de(t)}catch(o){if(o.name==="ExitPromptError")break;console.error(r.error("Error during library search:"),o.message),n="finish"}return t.getAll()}async function ut(e=null){let t=new J;console.log(r.boldInfo(`
21
+ Selected Package`,[["Name",o.success(i.name)],["Description",o.muted(i.description)],["Latest version",o.info(i.latestVersion)],["Weekly downloads",o.muted(Fe(i.weeklyDownloads))]]);let u=await b({message:"How would you like to select the version?",choices:[{name:`Use latest (${i.latestVersion})`,value:"latest"},{name:"Choose specific version (major.minor.patch)",value:"specific"},{name:"Enter version manually",value:"manual"}],default:"latest"}),c=i.latestVersion;if(u==="specific")if(a.versions.length===0)console.log(o.warning("Could not fetch versions. Using latest."));else{let l=await fe(i.name,a);l&&(c=l)}else u==="manual"&&(c=await ue({message:"Enter version:",default:i.latestVersion,validate:s(l=>l?!0:"Version is required","validate")}));if(e&&c!=="latest"){let l=await Ht(i.name,c,e);if(l.skip){console.log(o.warning(`Skipping this library.
22
+ `)),n=await de(t);continue}c=l.version}t.add({name:i.name,version:c,description:i.description}),console.log(o.success(`\u2713 Added ${i.name}@${c} to installation queue
23
+ `)),n=await de(t)}catch(r){if(r.name==="ExitPromptError")break;console.error(o.error("Error during library search:"),r.message),n="finish"}return t.getAll()}async function it(e=null){let t=new z;console.log(o.boldInfo(`
24
24
  \u{1F4E6} Add Libraries
25
- `)),e&&console.log(r.muted(`Angular version: ${e} (compatibility will be checked)
26
- `));let n="add";for(;n==="add";){t.count>0&&t.display();let o=await ue({message:"Enter library name (or press Enter to skip):",validate:s(a=>a?/^[@a-z0-9-~][a-z0-9-._~]*$/.test(a)?t.has(a)?`${a} has already been selected`:!0:"Invalid package name format":!0,"validate")});if(!o)break;let i=await ue({message:`Enter version for ${o} (or 'latest'):`,default:"latest"});if(e&&i!=="latest"){let a=await z(o,i,e);a.compatible?(console.log(r.success(`\u2713 ${o}@${i} is compatible with Angular ${e}`)),a.peerDependency&&console.log(r.muted(` Peer dependency: ${a.peerDependency}
27
- `))):(console.log(r.error(`\u2717 ${o}@${i} may not be compatible with Angular ${e}`)),console.log(r.muted(` ${a.reason}
28
- `)),console.log(r.warning(`\u26A0\uFE0F This may cause installation issues.
29
- `)))}t.add({name:o,version:i}),console.log(r.success(`\u2713 Added ${o}@${i}
30
- `)),n=await de(t)}return t.getAll()}function pt(){return b({message:"How would you like to add libraries?",choices:[{name:"Interactive search with autocomplete (Recommended)",value:"interactive"},{name:"Manual entry",value:"manual"},{name:"Skip for now",value:"skip"}],default:"interactive"})}var J,dt=h(()=>{y();U();ae();v();s(fe,"selectVersionInteractively");J=class{static{s(this,"LibraryTracker")}#e=new Map;add(t){this.#e.set(t.name,t)}remove(t){this.#e.delete(t)}has(t){return this.#e.has(t)}getAll(){return[...this.#e.values()]}get count(){return this.#e.size}display(){if(this.#e.size===0){console.log(r.muted(` No libraries selected yet.
31
- `));return}f("\u{1F4E6} Currently Selected Libraries",this.getAll().map(t=>({Library:t.name,Version:t.version,Description:(t.description??"").substring(0,70)})),["Library","Version","Description"])}};s(Xt,"formatPackageChoice");s(Qt,"resolveCompatibleVersion");s(de,"askNextAction");s(lt,"interactiveLibrarySearch");s(ut,"simpleLibraryInput");s(pt,"askLibrarySearchPreference")});import{execa as gr}from"execa";import yr from"ora";function ft(e){return!e||e.length===0?"Directory name cannot be empty":e.length>255?"Directory name is too long":Zt.test(e)?"Directory name contains invalid characters":en.has(e.toUpperCase())?"Directory name is reserved":e.endsWith(" ")||e.endsWith(".")?"Directory name cannot end with a space or period":!0}var Zt,en,mt=h(()=>{y();Zt=/[<>:"|?*\x00-\x1f]/,en=new Set(["CON","PRN","AUX","NUL","COM1","COM2","COM3","COM4","COM5","COM6","COM7","COM8","COM9","LPT1","LPT2","LPT3","LPT4","LPT5","LPT6","LPT7","LPT8","LPT9"]);s(ft,"validateDirectoryName")});var k={};M(k,{clearCache:()=>ln,deleteProfile:()=>on,displayProfileInfo:()=>we,exportProfile:()=>an,getProfileDetails:()=>sn,importProfile:()=>cn,listProfiles:()=>he,loadProfile:()=>L,loadProfiles:()=>rn,saveProfile:()=>ye});import D from"fs/promises";import gt from"path";import{homedir as tn}from"os";function wt(){return me??=D.mkdir(ht,{recursive:!0}).catch(e=>{throw console.error(r.error("Failed to create profiles directory:"),e.message),e}),me}async function C(){if(x!==null)return x;await wt();try{let e=await D.readFile(yt,"utf-8");x=JSON.parse(e)}catch{x={}}return x}async function ge(e){await wt();try{return await D.writeFile(yt,JSON.stringify(e,null,2),"utf-8"),x=e,!0}catch(t){return console.error(r.error("Failed to save profiles:"),t.message),!1}}function rn(){return C()}async function L(e){return(await C())[e]??null}async function he(){let e=await C();return Object.keys(e)}async function ye(e,t){let n=await C(),o=new Date().toISOString();n[e]={...t,createdAt:n[e]?.createdAt??o,updatedAt:o};let i=await ge(n);return i&&console.log(r.success(`\u2713 Profile "${e}" saved successfully`)),i}async function on(e){let t=await C();if(!t[e])return console.log(r.warning(`Profile "${e}" not found`)),!1;delete t[e];let n=await ge(t);return n&&console.log(r.success(`\u2713 Profile "${e}" deleted successfully`)),n}async function sn(e){let t=await L(e);return t?{name:e,angularVersion:t.angularVersion,libraries:t.libraries?.length??0,createdAt:t.createdAt,updatedAt:t.updatedAt}:null}function we(e,t){let n=[];t.angularVersion&&n.push(["Angular Version",r.success(t.angularVersion)]),t.template&&n.push(["Template",r.muted(`${t.template} (deprecated)`)]),n.push(["Libraries",r.info(String(t.libraries?.length??0))]),t.createdAt&&n.push(["Created",r.muted(new Date(t.createdAt).toLocaleString())]),t.updatedAt&&n.push(["Updated",r.muted(new Date(t.updatedAt).toLocaleString())]),g(`\u{1F4CB} Profile: ${e}`,n);let o=t.libraries;if(o?.length>0){let i=o.slice(0,G).map(a=>({Library:a.name,Version:a.version,Description:a.description??""}));f(`Libraries (showing up to ${G})`,i,["Library","Version","Description"]),o.length>G&&console.log(r.muted(` \u2026 and ${o.length-G} more`))}t.options&&f("Options",Object.entries(t.options).map(([i,a])=>({Option:i,Value:String(a)})),["Option","Value"])}async function an(e,t){let n=await L(e);if(!n)return console.log(r.error(`Profile "${e}" not found`)),!1;try{let o={name:e,profile:n,exportedAt:new Date().toISOString(),version:nn};return await D.writeFile(t,JSON.stringify(o,null,2),"utf-8"),console.log(r.success(`\u2713 Profile exported to ${t}`)),!0}catch(o){return console.error(r.error("Failed to export profile:"),o.message),!1}}async function cn(e){let t;try{let a=await D.readFile(e,"utf-8");t=JSON.parse(a)}catch(a){return console.error(r.error("Failed to read profile file:"),a.message),!1}if(!t.name||!t.profile)return console.log(r.error("Invalid profile file format")),!1;let n=await C(),o=new Date().toISOString();n[t.name]={...t.profile,createdAt:t.profile.createdAt??o,updatedAt:o};let i=await ge(n);return i&&console.log(r.success(`\u2713 Profile "${t.name}" imported successfully`)),i}function ln(){x=null,me=null}var ht,yt,nn,G,me,x,S=h(()=>{y();v();ht=gt.join(tn(),".ng-init"),yt=gt.join(ht,"profiles.json"),nn="1.0.0",G=50,me=null;s(wt,"ensureDir");x=null;s(C,"readProfiles");s(ge,"writeProfiles");s(rn,"loadProfiles");s(L,"loadProfile");s(he,"listProfiles");s(ye,"saveProfile");s(on,"deleteProfile");s(sn,"getProfileDetails");s(we,"displayProfileInfo");s(an,"exportProfile");s(cn,"importProfile");s(ln,"clearCache")});var vt={};M(vt,{runCli:()=>mn});import{select as O,input as ve,confirm as $}from"@inquirer/prompts";import be from"path";import{readFileSync as un}from"fs";import{fileURLToPath as pn}from"url";async function mn(){try{gn(),await X();let e=ze(),t={};if(await $({message:"Would you like to use a saved profile?",default:!1})&&(t=await hn()),!t.angularVersion){console.log(r.boldInfo(`
25
+ `)),e&&console.log(o.muted(`Angular version: ${e} (compatibility will be checked)
26
+ `));let n="add";for(;n==="add";){t.count>0&&t.display();let r=await ue({message:"Enter library name (or press Enter to skip):",validate:s(a=>a?/^[@a-z0-9-~][a-z0-9-._~]*$/.test(a)?t.has(a)?`${a} has already been selected`:!0:"Invalid package name format":!0,"validate")});if(!r)break;let i=await ue({message:`Enter version for ${r} (or 'latest'):`,default:"latest"});if(e&&i!=="latest"){let a=await U(r,i,e);a.compatible?(console.log(o.success(`\u2713 ${r}@${i} is compatible with Angular ${e}`)),a.peerDependency&&console.log(o.muted(` Peer dependency: ${a.peerDependency}
27
+ `))):(console.log(o.error(`\u2717 ${r}@${i} may not be compatible with Angular ${e}`)),console.log(o.muted(` ${a.reason}
28
+ `)),console.log(o.warning(`\u26A0\uFE0F This may cause installation issues.
29
+ `)))}t.add({name:r,version:i}),console.log(o.success(`\u2713 Added ${r}@${i}
30
+ `)),n=await de(t)}return t.getAll()}function at(){return b({message:"How would you like to add libraries?",choices:[{name:"Interactive search with autocomplete (Recommended)",value:"interactive"},{name:"Manual entry",value:"manual"},{name:"Skip for now",value:"skip"}],default:"interactive"})}var z,ct=h(()=>{y();W();ae();v();s(fe,"selectVersionInteractively");z=class{static{s(this,"LibraryTracker")}#e=new Map;add(t){this.#e.set(t.name,t)}remove(t){this.#e.delete(t)}has(t){return this.#e.has(t)}getAll(){return[...this.#e.values()]}get count(){return this.#e.size}display(){if(this.#e.size===0){console.log(o.muted(` No libraries selected yet.
31
+ `));return}f("\u{1F4E6} Currently Selected Libraries",this.getAll().map(t=>({Library:t.name,Version:t.version,Description:(t.description??"").substring(0,70)})),["Library","Version","Description"])}};s(qt,"formatPackageChoice");s(Ht,"resolveCompatibleVersion");s(de,"askNextAction");s(st,"interactiveLibrarySearch");s(it,"simpleLibraryInput");s(at,"askLibrarySearchPreference")});import{execa as lo}from"execa";import po from"ora";function lt(e){return!e||e.length===0?"Directory name cannot be empty":e.length>255?"Directory name is too long":Bt.test(e)?"Directory name contains invalid characters":Kt.has(e.toUpperCase())?"Directory name is reserved":e.endsWith(" ")||e.endsWith(".")?"Directory name cannot end with a space or period":!0}var Bt,Kt,ut=h(()=>{y();Bt=/[<>:"|?*\x00-\x1f]/,Kt=new Set(["CON","PRN","AUX","NUL","COM1","COM2","COM3","COM4","COM5","COM6","COM7","COM8","COM9","LPT1","LPT2","LPT3","LPT4","LPT5","LPT6","LPT7","LPT8","LPT9"]);s(lt,"validateDirectoryName")});var k={};M(k,{deleteProfile:()=>Zt,displayProfileInfo:()=>ye,exportProfile:()=>tn,getProfileDetails:()=>en,importProfile:()=>nn,listProfiles:()=>ge,loadProfile:()=>L,loadProfiles:()=>Qt,saveProfile:()=>he});import E from"fs/promises";import dt from"path";import{homedir as Yt}from"os";function gt(){return pt??=E.mkdir(ft,{recursive:!0}).catch(e=>{throw console.error(o.error("Failed to create profiles directory:"),e.message),e}),pt}async function C(){if(I!==null)return I;await gt();try{let e=await E.readFile(mt,"utf-8");I=JSON.parse(e)}catch{I={}}return I}async function me(e){await gt();try{return await E.writeFile(mt,JSON.stringify(e,null,2),"utf-8"),I=e,!0}catch(t){return console.error(o.error("Failed to save profiles:"),t.message),!1}}function Qt(){return C()}async function L(e){return(await C())[e]??null}async function ge(){let e=await C();return Object.keys(e)}async function he(e,t){let n=await C(),r=new Date().toISOString();n[e]={...t,createdAt:n[e]?.createdAt??r,updatedAt:r};let i=await me(n);return i&&console.log(o.success(`\u2713 Profile "${e}" saved successfully`)),i}async function Zt(e){let t=await C();if(!t[e])return console.log(o.warning(`Profile "${e}" not found`)),!1;delete t[e];let n=await me(t);return n&&console.log(o.success(`\u2713 Profile "${e}" deleted successfully`)),n}async function en(e){let t=await L(e);return t?{name:e,angularVersion:t.angularVersion,libraries:t.libraries?.length??0,createdAt:t.createdAt,updatedAt:t.updatedAt}:null}function ye(e,t){let n=[];t.angularVersion&&n.push(["Angular Version",o.success(t.angularVersion)]),t.template&&n.push(["Template",o.muted(`${t.template} (deprecated)`)]),n.push(["Libraries",o.info(String(t.libraries?.length??0))]),t.createdAt&&n.push(["Created",o.muted(new Date(t.createdAt).toLocaleString())]),t.updatedAt&&n.push(["Updated",o.muted(new Date(t.updatedAt).toLocaleString())]),g(`\u{1F4CB} Profile: ${e}`,n);let r=t.libraries;if(r?.length>0){let i=r.slice(0,J).map(a=>({Library:a.name,Version:a.version,Description:a.description??""}));f(`Libraries (showing up to ${J})`,i,["Library","Version","Description"]),r.length>J&&console.log(o.muted(` \u2026 and ${r.length-J} more`))}t.options&&f("Options",Object.entries(t.options).map(([i,a])=>({Option:i,Value:String(a)})),["Option","Value"])}async function tn(e,t){let n=await L(e);if(!n)return console.log(o.error(`Profile "${e}" not found`)),!1;try{let r={name:e,profile:n,exportedAt:new Date().toISOString(),version:Xt};return await E.writeFile(t,JSON.stringify(r,null,2),"utf-8"),console.log(o.success(`\u2713 Profile exported to ${t}`)),!0}catch(r){return console.error(o.error("Failed to export profile:"),r.message),!1}}async function nn(e){let t;try{let a=await E.readFile(e,"utf-8");t=JSON.parse(a)}catch(a){return console.error(o.error("Failed to read profile file:"),a.message),!1}if(!t.name||!t.profile)return console.log(o.error("Invalid profile file format")),!1;let n=await C(),r=new Date().toISOString();n[t.name]={...t.profile,createdAt:t.profile.createdAt??r,updatedAt:r};let i=await me(n);return i&&console.log(o.success(`\u2713 Profile "${t.name}" imported successfully`)),i}var ft,mt,Xt,J,pt,I,$=h(()=>{y();v();ft=dt.join(Yt(),".ng-init"),mt=dt.join(ft,"profiles.json"),Xt="1.0.0",J=50,pt=null;s(gt,"ensureDir");I=null;s(C,"readProfiles");s(me,"writeProfiles");s(Qt,"loadProfiles");s(L,"loadProfile");s(ge,"listProfiles");s(he,"saveProfile");s(Zt,"deleteProfile");s(en,"getProfileDetails");s(ye,"displayProfileInfo");s(tn,"exportProfile");s(nn,"importProfile")});var ht={};M(ht,{runCli:()=>cn});import{select as R,input as we,confirm as x}from"@inquirer/prompts";import ve from"path";import{readFileSync as on}from"fs";import{fileURLToPath as rn}from"url";async function cn(){try{ln(),await Y();let e=Te(),t={};if(await x({message:"Would you like to use a saved profile?",default:!1})&&(t=await un()),!t.angularVersion){console.log(o.boldInfo(`
32
32
  \u{1F4E6} Fetching Angular versions\u2026
33
- `));let u=await e;u.versions.length===0&&(console.log(r.error("Failed to fetch Angular versions. Check your internet connection.")),process.exit(1));let d=await fe("Angular",u);d||(console.log(r.error("No version selected.")),process.exit(1)),t.angularVersion=d}console.log(r.success(`
33
+ `));let l=await e;l.versions.length===0&&(console.log(o.error("Failed to fetch Angular versions. Check your internet connection.")),process.exit(1));let d=await fe("Angular",l);d||(console.log(o.error("No version selected.")),process.exit(1)),t.angularVersion=d}console.log(o.success(`
34
34
  \u2713 Selected Angular version: ${t.angularVersion}
35
- `));let[n,o]=await Promise.all([qe(t.angularVersion),T()]),i=Ke(o,n);if(Ye(i),i.compatible||await wn(n),t.projectName||(t.projectName=await ve({message:"Enter project name:",validate:s(u=>{if(!u)return"Project name is required";let d=ft(u);return d===!0?!0:d},"validate")})),!t.location){let u=await O({message:"Where would you like to create the project?",choices:[{name:"Current directory",value:"current"},{name:"Specify custom directory",value:"custom"}]});t.location=u==="custom"?await ve({message:"Enter directory path:",default:process.cwd()}):process.cwd()}let a=be.join(t.location,t.projectName);if(t.options||(t.options=await yn()),!t.libraries){let u=await pt();t.libraries=u==="interactive"?await lt(t.angularVersion):u==="manual"?await ut(t.angularVersion):[]}if(t.features=[],await $({message:"Save this configuration as a profile?",default:!1})){let u=await ve({message:"Enter profile name:",validate:s(d=>d?!0:"Profile name is required","validate")});await ye(u,t)}g("\u{1F4CB} Project Configuration Summary",[["Project Name",r.success(t.projectName)],["Location",r.info(a)],["Angular Version",r.success(t.angularVersion)],["Style",r.info(t.options.style)],["Routing",r.info(t.options.routing?"Yes":"No")],["Strict Mode",r.info(t.options.strict?"Yes":"No")],["Standalone",r.info(t.options.standalone?"Yes":"No")],["Libraries",r.info(String(t.libraries.length))]]),await $({message:"Create project with this configuration?",default:!0})||(console.log(r.warning(`Project creation cancelled.
36
- `)),process.exit(0)),console.log(r.boldInfo(`
35
+ `));let[n,r]=await Promise.all([ze(t.angularVersion),T()]),i=Ge(r,n);if(qe(i),i.compatible||await dn(n),t.projectName||(t.projectName=await we({message:"Enter project name:",validate:s(l=>{if(!l)return"Project name is required";let d=lt(l);return d===!0?!0:d},"validate")})),!t.location){let l=await R({message:"Where would you like to create the project?",choices:[{name:"Current directory",value:"current"},{name:"Specify custom directory",value:"custom"}]});t.location=l==="custom"?await we({message:"Enter directory path:",default:process.cwd()}):process.cwd()}let a=ve.join(t.location,t.projectName);if(t.options||(t.options=await pn()),!t.libraries){let l=await at();t.libraries=l==="interactive"?await st(t.angularVersion):l==="manual"?await it(t.angularVersion):[]}if(t.features=[],await x({message:"Save this configuration as a profile?",default:!1})){let l=await we({message:"Enter profile name:",validate:s(d=>d?!0:"Profile name is required","validate")});await he(l,t)}g("\u{1F4CB} Project Configuration Summary",[["Project Name",o.success(t.projectName)],["Location",o.info(a)],["Angular Version",o.success(t.angularVersion)],["Style",o.info(t.options.style)],["Routing",o.info(t.options.routing?"Yes":"No")],["Strict Mode",o.info(t.options.strict?"Yes":"No")],["Standalone",o.info(t.options.standalone?"Yes":"No")],["Libraries",o.info(String(t.libraries.length))]]),await x({message:"Create project with this configuration?",default:!0})||(console.log(o.warning(`Project creation cancelled.
36
+ `)),process.exit(0)),console.log(o.boldInfo(`
37
37
  \u{1F680} Creating Angular project\u2026
38
- `));let[l,c]=await Promise.all([at(t.projectName,t.angularVersion,{...t.options,skipInstall:!0}),t.libraries.length>0?et(t.libraries,t.angularVersion):Promise.resolve([])]);l||(console.log(r.error("Failed to create Angular project.")),process.exit(1)),c.length>0&&await bn(c,a),console.log(r.boldInfo(`
38
+ `));let[u,c]=await Promise.all([ot(t.projectName,t.angularVersion,{...t.options,skipInstall:!0}),t.libraries.length>0?Ye(t.libraries,t.angularVersion):Promise.resolve([])]);u||(console.log(o.error("Failed to create Angular project.")),process.exit(1)),c.length>0&&await mn(c,a),console.log(o.boldInfo(`
39
39
  \u{1F4E5} Installing dependencies\u2026
40
- `)),await it(a),$n(t.projectName)}catch(e){e.name==="ExitPromptError"&&(console.log(r.warning(`
40
+ `)),await nt(a),gn(t.projectName)}catch(e){e.name==="ExitPromptError"&&(console.log(o.warning(`
41
41
  Exited.
42
- `)),process.exit(0)),console.error(r.error(`
43
- \u274C Error:`),e.message),process.exit(1)}}function gn(){let e=`Angular Project Initialization Automation CLI v${fn.version}`,t=60,n=t-e.length,o="\u2550".repeat(t);console.log(r.boldInfo(`
44
- \u2554${o}\u2557
42
+ `)),process.exit(0)),console.error(o.error(`
43
+ \u274C Error:`),e.message),process.exit(1)}}function ln(){let e=`Angular Project Initialization Automation CLI v${an.version}`,t=60,n=t-e.length,r="\u2550".repeat(t);console.log(o.boldInfo(`
44
+ \u2554${r}\u2557
45
45
  \u2551${" ".repeat(Math.floor(n/2))}${e}${" ".repeat(Math.ceil(n/2))}\u2551
46
- \u255A${o}\u255D
47
- `))}async function hn(){let e=await he();if(e.length===0)return console.log(r.warning(`No saved profiles found. Continuing with manual setup\u2026
48
- `)),{};let t=await O({message:"Select a profile:",choices:e.map(o=>({name:o,value:o}))}),n=await L(t);return we(t,n),await $({message:"Use this profile?",default:!0})?n:{}}async function yn(){let e=await $({message:"Enable routing?",default:!0}),t=await O({message:"Select stylesheet format:",choices:["css","scss","sass","less"].map(i=>({name:i,value:i}))}),n=await $({message:"Enable strict mode?",default:!0}),o=await $({message:"Use standalone components?",default:!1});return{routing:e,style:t,strict:n,standalone:o}}async function wn(e){if(console.log(r.warning(`\u26A0\uFE0F Node.js version incompatibility detected!
49
- `)),await Y())return vn(e);console.log(r.warning(`\u26A0\uFE0F nvm is not installed on your system
50
- `));let t=await O({message:"How would you like to proceed?",choices:[{name:"Install nvm (Recommended)",value:"nvm"},{name:"Install Node.js directly (Windows only)",value:"direct"},{name:"Exit and install manually",value:"exit"}]});t==="nvm"&&(st(),console.log(r.warning(`
46
+ \u255A${r}\u255D
47
+ `))}async function un(){let e=await ge();if(e.length===0)return console.log(o.warning(`No saved profiles found. Continuing with manual setup\u2026
48
+ `)),{};let t=await R({message:"Select a profile:",choices:e.map(r=>({name:r,value:r}))}),n=await L(t);return ye(t,n),await x({message:"Use this profile?",default:!0})?n:{}}async function pn(){let e=await x({message:"Enable routing?",default:!0}),t=await R({message:"Select stylesheet format:",choices:["css","scss","sass","less"].map(i=>({name:i,value:i}))}),n=await x({message:"Enable strict mode?",default:!0}),r=await x({message:"Use standalone components?",default:!1});return{routing:e,style:t,strict:n,standalone:r}}async function dn(e){if(console.log(o.warning(`\u26A0\uFE0F Node.js version incompatibility detected!
49
+ `)),await K())return fn(e);console.log(o.warning(`\u26A0\uFE0F nvm is not installed on your system
50
+ `));let t=await R({message:"How would you like to proceed?",choices:[{name:"Install nvm (Recommended)",value:"nvm"},{name:"Install Node.js directly (Windows only)",value:"direct"},{name:"Exit and install manually",value:"exit"}]});t==="nvm"&&(tt(),console.log(o.warning(`
51
51
  Please install nvm and run this CLI again.
52
- `)),process.exit(0)),t==="direct"&&(process.platform!=="win32"&&(console.log(r.error("Direct installation is only supported on Windows.")),process.exit(1)),await ot("LTS")||(console.log(r.error("Failed to install Node.js. Please install manually.")),process.exit(1)),console.log(r.warning(`
52
+ `)),process.exit(0)),t==="direct"&&(process.platform!=="win32"&&(console.log(o.error("Direct installation is only supported on Windows.")),process.exit(1)),await et("LTS")||(console.log(o.error("Failed to install Node.js. Please install manually.")),process.exit(1)),console.log(o.warning(`
53
53
  Please restart your terminal and run this CLI again.
54
- `)),process.exit(0)),console.log(r.warning(`Exiting. Please install a compatible Node.js version manually.
55
- `)),process.exit(0)}async function vn(e){console.log(r.info(`\u2713 nvm detected on your system
56
- `));let t=await Q(),n=Xe(t,e);if(n.length>0){console.log(r.success(`Found ${n.length} compatible Node version(s) installed:
57
- `));let i=await O({message:"Select Node version to switch to:",choices:n.map(a=>({name:`v${a}`,value:a}))});console.log(r.info(`
54
+ `)),process.exit(0)),console.log(o.warning(`Exiting. Please install a compatible Node.js version manually.
55
+ `)),process.exit(0)}async function fn(e){console.log(o.info(`\u2713 nvm detected on your system
56
+ `));let t=await X(),n=He(t,e);if(n.length>0){console.log(o.success(`Found ${n.length} compatible Node version(s) installed:
57
+ `));let i=await R({message:"Select Node version to switch to:",choices:n.map(a=>({name:`v${a}`,value:a}))});console.log(o.info(`
58
58
  Switching to Node.js v${i}\u2026
59
- `)),await _(i)||(console.log(r.error("Failed to switch Node version. Please try manually.")),process.exit(1)),console.log(r.success(`\u2713 Node version switched successfully
60
- `));return}console.log(r.warning(`No compatible Node versions installed.
61
- `));let o=Qe(e);await $({message:`Install Node.js v${o}?`,default:!0})||(console.log(r.error("Cannot proceed without compatible Node.js version.")),process.exit(1)),await Z(o)||(console.log(r.error("Failed to install Node version.")),process.exit(1)),console.log(r.success(`\u2713 Node.js installed successfully
62
- `)),await _(o)}async function bn(e,t){let n=e.filter(c=>c.adjusted);n.length>0&&(console.log(r.success(`
59
+ `)),await _(i)||(console.log(o.error("Failed to switch Node version. Please try manually.")),process.exit(1)),console.log(o.success(`\u2713 Node version switched successfully
60
+ `));return}console.log(o.warning(`No compatible Node versions installed.
61
+ `));let r=Be(e);await x({message:`Install Node.js v${r}?`,default:!0})||(console.log(o.error("Cannot proceed without compatible Node.js version.")),process.exit(1)),await Q(r)||(console.log(o.error("Failed to install Node version.")),process.exit(1)),console.log(o.success(`\u2713 Node.js installed successfully
62
+ `)),await _(r)}async function mn(e,t){let n=e.filter(c=>c.adjusted);n.length>0&&(console.log(o.success(`
63
63
  \u2713 Dynamically resolved compatible library versions:
64
- `)),f("Resolved Library Versions",n.map(({name:c,originalVersion:u,version:d,reason:p})=>({Package:c,From:u,To:d,Reason:p||""})),["Package","From","To","Reason"]));let o=e.filter(c=>c.warning);o.length>0&&(console.log(r.warning(`
64
+ `)),f("Resolved Library Versions",n.map(({name:c,originalVersion:l,version:d,reason:p})=>({Package:c,From:l,To:d,Reason:p||""})),["Package","From","To","Reason"]));let r=e.filter(c=>c.warning);r.length>0&&(console.log(o.warning(`
65
65
  \u26A0\uFE0F Potential compatibility warnings:
66
- `)),f("Compatibility Warnings",o.map(({name:c,version:u,reason:d})=>({Package:c,Version:u,Reason:d||""})),["Package","Version","Reason"]));let i=s(c=>c.version==="latest"?c.name:`${c.name}@${c.version}`,"toSpec"),a=e.filter(c=>!c.isDev);a.length>0&&(console.log(r.boldInfo(`
66
+ `)),f("Compatibility Warnings",r.map(({name:c,version:l,reason:d})=>({Package:c,Version:l,Reason:d||""})),["Package","Version","Reason"]));let i=s(c=>c.version==="latest"?c.name:`${c.name}@${c.version}`,"toSpec"),a=e.filter(c=>!c.isDev);a.length>0&&(console.log(o.boldInfo(`
67
67
  \u{1F4E6} Installing production libraries\u2026
68
- `)),await le(a.map(i),t));let l=e.filter(c=>c.isDev);l.length>0&&(console.log(r.boldInfo(`
68
+ `)),await le(a.map(i),t));let u=e.filter(c=>c.isDev);u.length>0&&(console.log(o.boldInfo(`
69
69
  \u{1F4E6} Installing dev libraries\u2026
70
- `)),await le(l.map(i),t,!0))}function $n(e){let t=r.muted("\u2501".repeat(50));console.log(r.boldSuccess(`
70
+ `)),await le(u.map(i),t,!0))}function gn(e){let t=o.muted("\u2501".repeat(50));console.log(o.boldSuccess(`
71
71
  \u2705 Project created successfully! \u{1F389}
72
- `)),console.log(r.boldInfo(`\u{1F4CA} Next Steps:
73
- `)),console.log(t),console.log(r.white("1. ")+r.info(`cd ${e}`)),console.log(r.white("2. ")+r.info("ng serve")),console.log(r.white("3. ")+r.info("Open http://localhost:4200 in your browser")),console.log(t),console.log(r.boldInfo(`
72
+ `)),console.log(o.boldInfo(`\u{1F4CA} Next Steps:
73
+ `)),console.log(t),console.log(o.white("1. ")+o.info(`cd ${e}`)),console.log(o.white("2. ")+o.info("ng serve")),console.log(o.white("3. ")+o.info("Open http://localhost:4200 in your browser")),console.log(t),console.log(o.boldInfo(`
74
74
  \u{1F4A1} Useful Commands:
75
- `));let n=[["ng generate component <name>","Create a component"],["ng generate service <name>","Create a service"],["ng build","Build for production"],["ng test","Run unit tests"],["ng help","Get more help"]];for(let[o,i]of n)console.log(`${r.muted(` ${o.padEnd(34)}`)}${r.white(i)}`);console.log(r.boldSuccess(`
75
+ `));let n=[["ng generate component <name>","Create a component"],["ng generate service <name>","Create a service"],["ng build","Build for production"],["ng test","Run unit tests"],["ng help","Get more help"]];for(let[r,i]of n)console.log(`${o.muted(` ${r.padEnd(34)}`)}${o.white(i)}`);console.log(o.boldSuccess(`
76
76
  Happy coding! \u{1F680}
77
- `))}var dn,fn,bt=h(()=>{y();ee();U();ae();ct();dt();mt();S();v();dn=be.dirname(pn(import.meta.url)),fn=JSON.parse(un(be.join(dn,"../package.json"),"utf-8"));s(mn,"runCli");s(gn,"displayBanner");s(hn,"handleProfileSelection");s(yn,"promptProjectOptions");s(wn,"handleNodeIncompatibility");s(vn,"handleNvmSwitch");s(bn,"installResolvedLibraries");s($n,"displaySuccessMessage")});y();import{Command as xn}from"commander";import{readFileSync as Sn}from"fs";import{fileURLToPath as An}from"url";import{dirname as Pn,join as Nn}from"path";var jn=Pn(An(import.meta.url)),{version:In}=JSON.parse(Sn(Nn(jn,"../package.json"),"utf-8"));function A(e){return async(...t)=>{try{await e(...t)}catch(n){console.error(r.error("Error:"),n.message),process.exitCode=1}}}s(A,"action");var V=new xn;V.name("ng-init").description("Angular project initializer with intelligent version management and automation").version(In);V.command("create",{isDefault:!0}).alias("new").description("Create a new Angular project with interactive setup").action(A(async()=>{let{runCli:e}=await Promise.resolve().then(()=>(bt(),vt));await e()}));var R=V.command("profile").description("Manage configuration profiles");R.command("list").description("List all saved profiles").action(A(async()=>{let{listProfiles:e,getProfileDetails:t}=await Promise.resolve().then(()=>(S(),k)),{printObjectList:n}=await Promise.resolve().then(()=>(v(),Pe)),o=await e();if(o.length===0){console.log(r.warning("No saved profiles found."));return}let i=await Promise.all(o.map(async a=>{let l=await t(a);return{Name:l.name,Angular:l.angularVersion||"-",Libraries:l.libraries??0,Created:l.createdAt||"-"}}));n("Saved Profiles",i,["Name","Angular","Libraries","Created"])}));R.command("show <name>").description("Show details of a profile").action(A(async e=>{let{loadProfile:t,displayProfileInfo:n}=await Promise.resolve().then(()=>(S(),k)),o=await t(e);if(!o){console.log(r.error(`Profile "${e}" not found.`));return}n(e,o)}));R.command("delete <name>").description("Delete a profile").action(A(async e=>{let{deleteProfile:t}=await Promise.resolve().then(()=>(S(),k));await t(e)}));R.command("export <name> <output>").description("Export a profile to a file").action(A(async(e,t)=>{let{exportProfile:n}=await Promise.resolve().then(()=>(S(),k));await n(e,t)}));R.command("import <file>").description("Import a profile from a file").action(A(async e=>{let{importProfile:t}=await Promise.resolve().then(()=>(S(),k));await t(e)}));V.command("check").description("Check system versions and compatibility").action(A(async()=>{let{displaySystemVersions:e}=await Promise.resolve().then(()=>(ee(),Ve));await e()}));V.command("examples").description("Show usage examples").action(()=>{let e=r.muted("\u2501".repeat(50)),t=[["Create new project (interactive)","ng-init","or ng-init create"],["Check system versions","ng-init check"],["List saved profiles","ng-init profile list"],["Show profile details","ng-init profile show my-profile"],["Delete a profile","ng-init profile delete my-profile"],["Export a profile","ng-init profile export my-profile ./profile.json"],["Import a profile","ng-init profile import ./profile.json"]];console.log(r.boldInfo(`
77
+ `))}var sn,an,yt=h(()=>{y();Z();W();ae();rt();ct();ut();$();v();sn=ve.dirname(rn(import.meta.url)),an=JSON.parse(on(ve.join(sn,"../package.json"),"utf-8"));s(cn,"runCli");s(ln,"displayBanner");s(un,"handleProfileSelection");s(pn,"promptProjectOptions");s(dn,"handleNodeIncompatibility");s(fn,"handleNvmSwitch");s(mn,"installResolvedLibraries");s(gn,"displaySuccessMessage")});y();import{Command as hn}from"commander";import{readFileSync as yn}from"fs";import{fileURLToPath as wn}from"url";import{dirname as vn,join as bn}from"path";var xn=vn(wn(import.meta.url)),{version:$n}=JSON.parse(yn(bn(xn,"../package.json"),"utf-8"));function S(e){return async(...t)=>{try{await e(...t)}catch(n){console.error(o.error("Error:"),n.message),process.exitCode=1}}}s(S,"action");var V=new hn;V.name("ng-init").description("Angular project initializer with intelligent version management and automation").version($n);V.command("create",{isDefault:!0}).alias("new").description("Create a new Angular project with interactive setup").action(S(async()=>{let{runCli:e}=await Promise.resolve().then(()=>(yt(),ht));await e()}));var O=V.command("profile").description("Manage configuration profiles");O.command("list").description("List all saved profiles").action(S(async()=>{let{listProfiles:e,getProfileDetails:t}=await Promise.resolve().then(()=>($(),k)),{printObjectList:n}=await Promise.resolve().then(()=>(v(),Pe)),r=await e();if(r.length===0){console.log(o.warning("No saved profiles found."));return}let i=await Promise.all(r.map(async a=>{let u=await t(a);return{Name:u.name,Angular:u.angularVersion||"-",Libraries:u.libraries??0,Created:u.createdAt||"-"}}));n("Saved Profiles",i,["Name","Angular","Libraries","Created"])}));O.command("show <name>").description("Show details of a profile").action(S(async e=>{let{loadProfile:t,displayProfileInfo:n}=await Promise.resolve().then(()=>($(),k)),r=await t(e);if(!r){console.log(o.error(`Profile "${e}" not found.`));return}n(e,r)}));O.command("delete <name>").description("Delete a profile").action(S(async e=>{let{deleteProfile:t}=await Promise.resolve().then(()=>($(),k));await t(e)}));O.command("export <name> <output>").description("Export a profile to a file").action(S(async(e,t)=>{let{exportProfile:n}=await Promise.resolve().then(()=>($(),k));await n(e,t)}));O.command("import <file>").description("Import a profile from a file").action(S(async e=>{let{importProfile:t}=await Promise.resolve().then(()=>($(),k));await t(e)}));V.command("check").description("Check system versions and compatibility").action(S(async()=>{let{displaySystemVersions:e}=await Promise.resolve().then(()=>(Z(),Ce));await e()}));V.command("examples").description("Show usage examples").action(()=>{let e=o.muted("\u2501".repeat(50)),t=[["Create new project (interactive)","ng-init","or ng-init create"],["Check system versions","ng-init check"],["List saved profiles","ng-init profile list"],["Show profile details","ng-init profile show my-profile"],["Delete a profile","ng-init profile delete my-profile"],["Export a profile","ng-init profile export my-profile ./profile.json"],["Import a profile","ng-init profile import ./profile.json"]];console.log(o.boldInfo(`
78
78
  \u{1F4DA} Usage Examples:
79
- `)),console.log(e);for(let[n,o,i]of t)console.log(r.white(`${n}:`)),console.log(r.success(` $ ${o}`)+(i?r.muted(` ${i}`):"")+`
79
+ `)),console.log(e);for(let[n,r,i]of t)console.log(o.white(`${n}:`)),console.log(o.success(` $ ${r}`)+(i?o.muted(` ${i}`):"")+`
80
80
  `);console.log(e+`
81
81
  `)});V.parse(process.argv);
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@jatinmourya/ng-init",
3
- "version": "1.2.14",
3
+ "version": "1.2.15",
4
4
  "description": "A comprehensive CLI tool to automate Angular project initialization with intelligent version management and prerequisite handling",
5
5
  "type": "module",
6
6
  "main": "./dist/cli.js",