ts-pantry 0.8.13 → 0.8.14

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 (2) hide show
  1. package/dist/bin/cli.js +1 -1
  2. package/package.json +1 -1
package/dist/bin/cli.js CHANGED
@@ -19,7 +19,7 @@ ${H.body}`:H.body}).join(`
19
19
  `).length-1;this.output.write(S.move(-999,z*-1))}render(){let z=T6(this._render(this)??"",w6.stdout.columns,{hard:!0,trim:!1});if(z===this._prevFrame)return;if(this.state==="initial")this.output.write(S.hide);else{let $=Kz(this._prevFrame,z);if(this.restoreCursor(),$&&$?.length===1){let Q=$[0];this.output.write(S.move(0,Q)),this.output.write(p.lines(1));let Z=z.split(`
20
20
  `);this.output.write(Z[Q]),this._prevFrame=z,this.output.write(S.move(0,Z.length-Q-1));return}if($&&$?.length>1){let Q=$[0];this.output.write(S.move(0,Q)),this.output.write(p.down());let Y=z.split(`
21
21
  `).slice(Q);this.output.write(Y.join(`
22
- `)),this._prevFrame=z;return}this.output.write(p.down())}if(this.output.write(z),this.state==="initial")this.state="active";this._prevFrame=z}}function Sz(z,$){if(z===void 0)return 0;if($.length===0)return 0;let Z=$.findIndex((Y)=>Y.value===z);return Z!==-1?Z:0}function hz(z,$){return($.label??String($.value)).toLowerCase().includes(z.toLowerCase())}function fz(z,$){if(!$)return;if(z)return $;return $[0]}class gz extends Y6{filteredOptions;multiple;isNavigating=!1;selectedValues=[];focusedValue;#z=0;#Q="";#Z;#$;get cursor(){return this.#z}get userInputWithCursor(){if(!this.userInput)return r.default.inverse(r.default.hidden("_"));if(this._cursor>=this.userInput.length)return`${this.userInput}█`;let z=this.userInput.slice(0,this._cursor),[$,...Q]=this.userInput.slice(this._cursor);return`${z}${r.default.inverse($)}${Q.join("")}`}get options(){if(typeof this.#$==="function")return this.#$();return this.#$}constructor(z){super(z);this.#$=z.options;let $=this.options;this.filteredOptions=[...$],this.multiple=z.multiple===!0,this.#Z=z.filter??hz;let Q;if(z.initialValue&&Array.isArray(z.initialValue))if(this.multiple)Q=z.initialValue;else Q=z.initialValue.slice(0,1);else if(!this.multiple&&this.options.length>0)Q=[this.options[0].value];if(Q)for(let Z of Q){let Y=$.findIndex((X)=>X.value===Z);if(Y!==-1)this.toggleSelected(Z),this.#z=Y}this.focusedValue=this.options[this.#z]?.value,this.on("key",(Z,Y)=>this.#Y(Z,Y)),this.on("userInput",(Z)=>this.#X(Z))}_isActionKey(z,$){return z==="\t"||this.multiple&&this.isNavigating&&$.name==="space"&&z!==void 0&&z!==""}#Y(z,$){let Q=$.name==="up",Z=$.name==="down",Y=$.name==="return";if(Q||Z){if(this.#z=Math.max(0,Math.min(this.#z+(Q?-1:1),this.filteredOptions.length-1)),this.focusedValue=this.filteredOptions[this.#z]?.value,!this.multiple)this.selectedValues=[this.focusedValue];this.isNavigating=!0}else if(Y)this.value=fz(this.multiple,this.selectedValues);else if(this.multiple)if(this.focusedValue!==void 0&&($.name==="tab"||this.isNavigating&&$.name==="space"))this.toggleSelected(this.focusedValue);else this.isNavigating=!1;else{if(this.focusedValue)this.selectedValues=[this.focusedValue];this.isNavigating=!1}}deselectAll(){this.selectedValues=[]}toggleSelected(z){if(this.filteredOptions.length===0)return;if(this.multiple)if(this.selectedValues.includes(z))this.selectedValues=this.selectedValues.filter(($)=>$!==z);else this.selectedValues=[...this.selectedValues,z];else this.selectedValues=[z]}#X(z){if(z!==this.#Q){this.#Q=z;let $=this.options;if(z)this.filteredOptions=$.filter((Q)=>this.#Z(z,Q));else this.filteredOptions=[...$];if(this.#z=Sz(this.focusedValue,this.filteredOptions),this.focusedValue=this.filteredOptions[this.#z]?.value,!this.multiple)if(this.focusedValue!==void 0)this.toggleSelected(this.focusedValue);else this.deselectAll()}}}class _z extends Y6{options;cursor=0;#z;getGroupItems(z){return this.options.filter(($)=>$.group===z)}isGroupSelected(z){let $=this.getGroupItems(z),Q=this.value;if(Q===void 0)return!1;return $.every((Z)=>Q.includes(Z.value))}toggleValue(){let z=this.options[this.cursor];if(this.value===void 0)this.value=[];if(z.group===!0){let $=z.value,Q=this.getGroupItems($);if(this.isGroupSelected($))this.value=this.value.filter((Z)=>Q.findIndex((Y)=>Y.value===Z)===-1);else this.value=[...this.value,...Q.map((Z)=>Z.value)];this.value=Array.from(new Set(this.value))}else{let $=this.value.includes(z.value);this.value=$?this.value.filter((Q)=>Q!==z.value):[...this.value,z.value]}}constructor(z){super(z,!1);let{options:$}=z;this.#z=z.selectableGroups!==!1,this.options=Object.entries($).flatMap(([Q,Z])=>[{value:Q,group:!0,label:Q},...Z.map((Y)=>({...Y,group:Q}))]),this.value=[...z.initialValues??[]],this.cursor=Math.max(this.options.findIndex(({value:Q})=>Q===z.cursorAt),this.#z?0:1),this.on("cursor",(Q)=>{switch(Q){case"left":case"up":{this.cursor=this.cursor===0?this.options.length-1:this.cursor-1;let Z=this.options[this.cursor]?.group===!0;if(!this.#z&&Z)this.cursor=this.cursor===0?this.options.length-1:this.cursor-1;break}case"down":case"right":{this.cursor=this.cursor===this.options.length-1?0:this.cursor+1;let Z=this.options[this.cursor]?.group===!0;if(!this.#z&&Z)this.cursor=this.cursor===this.options.length-1?0:this.cursor+1;break}case"space":this.toggleValue();break}})}}var j0=I(A(),1);var V0=I(A(),1);var F0=I(A(),1),h={red:["\x1B[31m","\x1B[39m"],green:["\x1B[32m","\x1B[39m"],blue:["\x1B[34m","\x1B[39m"],yellow:["\x1B[33m","\x1B[39m"],cyan:["\x1B[36m","\x1B[39m"],magenta:["\x1B[35m","\x1B[39m"],white:["\x1B[37m","\x1B[39m"],gray:["\x1B[90m","\x1B[39m"],bgRed:["\x1B[41m","\x1B[49m"],bgGreen:["\x1B[42m","\x1B[49m"],bgBlue:["\x1B[44m","\x1B[49m"],bgYellow:["\x1B[43m","\x1B[49m"],bgCyan:["\x1B[46m","\x1B[49m"],bgMagenta:["\x1B[45m","\x1B[49m"],bold:["\x1B[1m","\x1B[22m"],italic:["\x1B[3m","\x1B[23m"],underline:["\x1B[4m","\x1B[24m"],dim:["\x1B[2m","\x1B[22m"],inverse:["\x1B[7m","\x1B[27m"],hidden:["\x1B[8m","\x1B[28m"],strikethrough:["\x1B[9m","\x1B[29m"]},f={primary:"blue",secondary:"cyan",success:"green",warning:"yellow",error:"red",info:"magenta",muted:"gray"};function uz(){return!0}function dz(){let z={};z.supportsColor=uz();function $(Z,Y=[]){let X=Z===""?[]:[...Y,Z],J=function(H){if(!z.supportsColor)return H;let G="",K="";for(let V of X)if(V in f&&f[V]in h){let U=f[V];G+=h[U][0],K=h[U][1]+K}else if(V in h)G+=h[V][0],K=h[V][1]+K;return G+H+K},q=[...Object.keys(h),...Object.keys(f)];for(let H of q)if(!(H in J))Object.defineProperty(J,H,{get(){return $(H,X)}});return J}let Q=[...Object.keys(h),...Object.keys(f)];for(let Z of Q)if(!(Z in z))Object.defineProperty(z,Z,{get(){return $(Z)}});return z}var W0=dz();var mz=Zz();var T=(z,$)=>mz?z:$,L0=T("◆","*"),M0=T("■","x"),w0=T("▲","x"),O0=T("◇","o"),B0=T("┌","T"),xz=T("│","|"),D0=T("└","—"),b0=T("●",">"),N0=T("○"," "),T0=T("◻","[•]"),I0=T("◼","[+]"),R0=T("◻","[ ]"),E0=T("▪","•"),A0=T("─","-"),C0=T("╮","+"),P0=T("├","+"),y0=T("╯","+"),v0=T("●","•"),k0=T("◆","*"),S0=T("▲","!"),h0=T("■","x");var f0=I(A(),1);var g0=I(A(),1);var _0=I(A(),1);var u0=I(A(),1);var d0=I(A(),1);var m0=I(A(),1);var x0=I(A(),1);var l0=I(A(),1);var n0=I(A(),1),c0=I(A(),1);var a0={light:T("─","-"),heavy:T("━","="),block:T("█","#")};var i0=I(A(),1);var p0=I(A(),1);var lz=I(A(),1);function nz(){return`${lz.default.gray(xz)} `}var r0=nz();var s0=I(A(),1);var t0=I(A(),1);var v6="0.8.13";az();async function iz(z="src/pantry"){if(!W.existsSync(z))throw Error(`Pantry directory not found: ${z}. Please run 'bun ./bin/cli.ts update-pantry' first.`);let $=[];function Q(Z,Y=""){let X=W.readdirSync(Z,{withFileTypes:!0}),J=R.join(Z,"package.yml");if(Y&&W.existsSync(J))$.push(Y);for(let q of X)if(q.isDirectory()&&!q.name.startsWith(".")){let H=Y?`${Y}/${q.name}`:q.name,G=R.join(Z,q.name);Q(G,H)}}return Q(z),console.log(`\uD83D\uDCE6 Found ${$.length} packages in local pantry`),$.sort()}async function pz(z=!1){async function $(J){let q=new URL("https://s3.amazonaws.com/dist.tea.xyz/");if(q.searchParams.set("list-type","2"),q.searchParams.set("prefix",""),q.searchParams.set("max-keys","1000"),J)q.searchParams.set("continuation-token",J);let H=await fetch(q.toString());if(!H.ok)throw Error(`Failed to fetch S3 listing: ${H.status}`);let G=await H.text(),K=[],V=G.match(/<Key>([^<]+)<\/Key>/g);if(V)for(let w of V){let b=w.replace(/<Key>([^<]+)<\/Key>/,"$1");K.push({Key:b})}let U=G.includes("<IsTruncated>true</IsTruncated>"),F=G.match(/<NextContinuationToken>([^<]+)<\/NextContinuationToken>/),j=F?F[1]:void 0;return{IsTruncated:U,NextContinuationToken:j,Contents:K}}console.log("Scraping packages from S3 registry...");let Q=new Set,Z;do{let J=await $(Z);for(let q of J.Contents){let H=q.Key,G=H.split("/");if(G.length===0)continue;if(G[0].startsWith(".")||G[0].includes(" ")||H.match(/\.(md|txt|yml|yaml|json)$/i))continue;let K=["darwin","linux","windows"],V=-1;for(let U=1;U<G.length;U++)if(K.includes(G[U])){V=U;break}if(V>0){let U=G.slice(0,V).join("/");if(U.includes("."))Q.add(U)}else if(G.length>=2&&G[0].includes(".")&&!G[1].startsWith("v")&&!G[1].match(/^\d/)){let U=`${G[0]}/${G[1]}`;Q.add(U)}else if(G.length>=1&&G[0].includes("."))Q.add(G[0])}Z=J.NextContinuationToken,console.log(`Found ${Q.size} packages so far...`)}while(Z);let Y=Array.from(Q).sort(),X=[];for(let J of Y){if(!J.includes(".")||J.match(/^[a-z0-9.-]+\.[a-z]{2,}(\/[\w.-]+){0,20}$/i)===null)continue;if(J.endsWith("/README.rst")||J.endsWith("/README")||J.includes("/docs/"))continue;if(J.endsWith("/.pkgroot"))continue;if(["amazon.com/aws","charm.sh","code.videolan.org","crates.io"].includes(J))continue;X.push(J)}return console.log(`\uD83D\uDCE6 Found ${X.length} valid packages in registry`),X}async function rz(z,$){let Z=`/**
22
+ `)),this._prevFrame=z;return}this.output.write(p.down())}if(this.output.write(z),this.state==="initial")this.state="active";this._prevFrame=z}}function Sz(z,$){if(z===void 0)return 0;if($.length===0)return 0;let Z=$.findIndex((Y)=>Y.value===z);return Z!==-1?Z:0}function hz(z,$){return($.label??String($.value)).toLowerCase().includes(z.toLowerCase())}function fz(z,$){if(!$)return;if(z)return $;return $[0]}class gz extends Y6{filteredOptions;multiple;isNavigating=!1;selectedValues=[];focusedValue;#z=0;#Q="";#Z;#$;get cursor(){return this.#z}get userInputWithCursor(){if(!this.userInput)return r.default.inverse(r.default.hidden("_"));if(this._cursor>=this.userInput.length)return`${this.userInput}█`;let z=this.userInput.slice(0,this._cursor),[$,...Q]=this.userInput.slice(this._cursor);return`${z}${r.default.inverse($)}${Q.join("")}`}get options(){if(typeof this.#$==="function")return this.#$();return this.#$}constructor(z){super(z);this.#$=z.options;let $=this.options;this.filteredOptions=[...$],this.multiple=z.multiple===!0,this.#Z=z.filter??hz;let Q;if(z.initialValue&&Array.isArray(z.initialValue))if(this.multiple)Q=z.initialValue;else Q=z.initialValue.slice(0,1);else if(!this.multiple&&this.options.length>0)Q=[this.options[0].value];if(Q)for(let Z of Q){let Y=$.findIndex((X)=>X.value===Z);if(Y!==-1)this.toggleSelected(Z),this.#z=Y}this.focusedValue=this.options[this.#z]?.value,this.on("key",(Z,Y)=>this.#Y(Z,Y)),this.on("userInput",(Z)=>this.#X(Z))}_isActionKey(z,$){return z==="\t"||this.multiple&&this.isNavigating&&$.name==="space"&&z!==void 0&&z!==""}#Y(z,$){let Q=$.name==="up",Z=$.name==="down",Y=$.name==="return";if(Q||Z){if(this.#z=Math.max(0,Math.min(this.#z+(Q?-1:1),this.filteredOptions.length-1)),this.focusedValue=this.filteredOptions[this.#z]?.value,!this.multiple)this.selectedValues=[this.focusedValue];this.isNavigating=!0}else if(Y)this.value=fz(this.multiple,this.selectedValues);else if(this.multiple)if(this.focusedValue!==void 0&&($.name==="tab"||this.isNavigating&&$.name==="space"))this.toggleSelected(this.focusedValue);else this.isNavigating=!1;else{if(this.focusedValue)this.selectedValues=[this.focusedValue];this.isNavigating=!1}}deselectAll(){this.selectedValues=[]}toggleSelected(z){if(this.filteredOptions.length===0)return;if(this.multiple)if(this.selectedValues.includes(z))this.selectedValues=this.selectedValues.filter(($)=>$!==z);else this.selectedValues=[...this.selectedValues,z];else this.selectedValues=[z]}#X(z){if(z!==this.#Q){this.#Q=z;let $=this.options;if(z)this.filteredOptions=$.filter((Q)=>this.#Z(z,Q));else this.filteredOptions=[...$];if(this.#z=Sz(this.focusedValue,this.filteredOptions),this.focusedValue=this.filteredOptions[this.#z]?.value,!this.multiple)if(this.focusedValue!==void 0)this.toggleSelected(this.focusedValue);else this.deselectAll()}}}class _z extends Y6{options;cursor=0;#z;getGroupItems(z){return this.options.filter(($)=>$.group===z)}isGroupSelected(z){let $=this.getGroupItems(z),Q=this.value;if(Q===void 0)return!1;return $.every((Z)=>Q.includes(Z.value))}toggleValue(){let z=this.options[this.cursor];if(this.value===void 0)this.value=[];if(z.group===!0){let $=z.value,Q=this.getGroupItems($);if(this.isGroupSelected($))this.value=this.value.filter((Z)=>Q.findIndex((Y)=>Y.value===Z)===-1);else this.value=[...this.value,...Q.map((Z)=>Z.value)];this.value=Array.from(new Set(this.value))}else{let $=this.value.includes(z.value);this.value=$?this.value.filter((Q)=>Q!==z.value):[...this.value,z.value]}}constructor(z){super(z,!1);let{options:$}=z;this.#z=z.selectableGroups!==!1,this.options=Object.entries($).flatMap(([Q,Z])=>[{value:Q,group:!0,label:Q},...Z.map((Y)=>({...Y,group:Q}))]),this.value=[...z.initialValues??[]],this.cursor=Math.max(this.options.findIndex(({value:Q})=>Q===z.cursorAt),this.#z?0:1),this.on("cursor",(Q)=>{switch(Q){case"left":case"up":{this.cursor=this.cursor===0?this.options.length-1:this.cursor-1;let Z=this.options[this.cursor]?.group===!0;if(!this.#z&&Z)this.cursor=this.cursor===0?this.options.length-1:this.cursor-1;break}case"down":case"right":{this.cursor=this.cursor===this.options.length-1?0:this.cursor+1;let Z=this.options[this.cursor]?.group===!0;if(!this.#z&&Z)this.cursor=this.cursor===this.options.length-1?0:this.cursor+1;break}case"space":this.toggleValue();break}})}}var j0=I(A(),1);var V0=I(A(),1);var F0=I(A(),1),h={red:["\x1B[31m","\x1B[39m"],green:["\x1B[32m","\x1B[39m"],blue:["\x1B[34m","\x1B[39m"],yellow:["\x1B[33m","\x1B[39m"],cyan:["\x1B[36m","\x1B[39m"],magenta:["\x1B[35m","\x1B[39m"],white:["\x1B[37m","\x1B[39m"],gray:["\x1B[90m","\x1B[39m"],bgRed:["\x1B[41m","\x1B[49m"],bgGreen:["\x1B[42m","\x1B[49m"],bgBlue:["\x1B[44m","\x1B[49m"],bgYellow:["\x1B[43m","\x1B[49m"],bgCyan:["\x1B[46m","\x1B[49m"],bgMagenta:["\x1B[45m","\x1B[49m"],bold:["\x1B[1m","\x1B[22m"],italic:["\x1B[3m","\x1B[23m"],underline:["\x1B[4m","\x1B[24m"],dim:["\x1B[2m","\x1B[22m"],inverse:["\x1B[7m","\x1B[27m"],hidden:["\x1B[8m","\x1B[28m"],strikethrough:["\x1B[9m","\x1B[29m"]},f={primary:"blue",secondary:"cyan",success:"green",warning:"yellow",error:"red",info:"magenta",muted:"gray"};function uz(){return!0}function dz(){let z={};z.supportsColor=uz();function $(Z,Y=[]){let X=Z===""?[]:[...Y,Z],J=function(H){if(!z.supportsColor)return H;let G="",K="";for(let V of X)if(V in f&&f[V]in h){let U=f[V];G+=h[U][0],K=h[U][1]+K}else if(V in h)G+=h[V][0],K=h[V][1]+K;return G+H+K},q=[...Object.keys(h),...Object.keys(f)];for(let H of q)if(!(H in J))Object.defineProperty(J,H,{get(){return $(H,X)}});return J}let Q=[...Object.keys(h),...Object.keys(f)];for(let Z of Q)if(!(Z in z))Object.defineProperty(z,Z,{get(){return $(Z)}});return z}var W0=dz();var mz=Zz();var T=(z,$)=>mz?z:$,L0=T("◆","*"),M0=T("■","x"),w0=T("▲","x"),O0=T("◇","o"),B0=T("┌","T"),xz=T("│","|"),D0=T("└","—"),b0=T("●",">"),N0=T("○"," "),T0=T("◻","[•]"),I0=T("◼","[+]"),R0=T("◻","[ ]"),E0=T("▪","•"),A0=T("─","-"),C0=T("╮","+"),P0=T("├","+"),y0=T("╯","+"),v0=T("●","•"),k0=T("◆","*"),S0=T("▲","!"),h0=T("■","x");var f0=I(A(),1);var g0=I(A(),1);var _0=I(A(),1);var u0=I(A(),1);var d0=I(A(),1);var m0=I(A(),1);var x0=I(A(),1);var l0=I(A(),1);var n0=I(A(),1),c0=I(A(),1);var a0={light:T("─","-"),heavy:T("━","="),block:T("█","#")};var i0=I(A(),1);var p0=I(A(),1);var lz=I(A(),1);function nz(){return`${lz.default.gray(xz)} `}var r0=nz();var s0=I(A(),1);var t0=I(A(),1);var v6="0.8.14";az();async function iz(z="src/pantry"){if(!W.existsSync(z))throw Error(`Pantry directory not found: ${z}. Please run 'bun ./bin/cli.ts update-pantry' first.`);let $=[];function Q(Z,Y=""){let X=W.readdirSync(Z,{withFileTypes:!0}),J=R.join(Z,"package.yml");if(Y&&W.existsSync(J))$.push(Y);for(let q of X)if(q.isDirectory()&&!q.name.startsWith(".")){let H=Y?`${Y}/${q.name}`:q.name,G=R.join(Z,q.name);Q(G,H)}}return Q(z),console.log(`\uD83D\uDCE6 Found ${$.length} packages in local pantry`),$.sort()}async function pz(z=!1){async function $(J){let q=new URL("https://s3.amazonaws.com/dist.tea.xyz/");if(q.searchParams.set("list-type","2"),q.searchParams.set("prefix",""),q.searchParams.set("max-keys","1000"),J)q.searchParams.set("continuation-token",J);let H=await fetch(q.toString());if(!H.ok)throw Error(`Failed to fetch S3 listing: ${H.status}`);let G=await H.text(),K=[],V=G.match(/<Key>([^<]+)<\/Key>/g);if(V)for(let w of V){let b=w.replace(/<Key>([^<]+)<\/Key>/,"$1");K.push({Key:b})}let U=G.includes("<IsTruncated>true</IsTruncated>"),F=G.match(/<NextContinuationToken>([^<]+)<\/NextContinuationToken>/),j=F?F[1]:void 0;return{IsTruncated:U,NextContinuationToken:j,Contents:K}}console.log("Scraping packages from S3 registry...");let Q=new Set,Z;do{let J=await $(Z);for(let q of J.Contents){let H=q.Key,G=H.split("/");if(G.length===0)continue;if(G[0].startsWith(".")||G[0].includes(" ")||H.match(/\.(md|txt|yml|yaml|json)$/i))continue;let K=["darwin","linux","windows"],V=-1;for(let U=1;U<G.length;U++)if(K.includes(G[U])){V=U;break}if(V>0){let U=G.slice(0,V).join("/");if(U.includes("."))Q.add(U)}else if(G.length>=2&&G[0].includes(".")&&!G[1].startsWith("v")&&!G[1].match(/^\d/)){let U=`${G[0]}/${G[1]}`;Q.add(U)}else if(G.length>=1&&G[0].includes("."))Q.add(G[0])}Z=J.NextContinuationToken,console.log(`Found ${Q.size} packages so far...`)}while(Z);let Y=Array.from(Q).sort(),X=[];for(let J of Y){if(!J.includes(".")||J.match(/^[a-z0-9.-]+\.[a-z]{2,}(\/[\w.-]+){0,20}$/i)===null)continue;if(J.endsWith("/README.rst")||J.endsWith("/README")||J.includes("/docs/"))continue;if(J.endsWith("/.pkgroot"))continue;if(["amazon.com/aws","charm.sh","code.videolan.org","crates.io"].includes(J))continue;X.push(J)}return console.log(`\uD83D\uDCE6 Found ${X.length} valid packages in registry`),X}async function rz(z,$){let Z=`/**
23
23
  * Constants used throughout the ts-pkgx package
24
24
  * This file is auto-generated from ${$}. Do not edit manually.
25
25
  * Generated on ${new Date().toISOString()}
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "ts-pantry",
3
3
  "type": "module",
4
- "version": "0.8.13",
4
+ "version": "0.8.14",
5
5
  "description": "A library & CLI for managing packages",
6
6
  "author": "Chris Breuer <chris@stacksjs.com>",
7
7
  "license": "MIT",