@bomb.sh/tab 0.0.5 → 0.0.7

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -6,6 +6,8 @@ Shell autocompletions are largely missing in the JavaScript CLI ecosystem. tab p
6
6
 
7
7
  Additionally, tab supports autocompletions for `pnpm`, `npm`, `yarn`, and `bun`.
8
8
 
9
+ Modern CLI libraries like [Gunshi](https://github.com/kazupon/gunshi) include tab completion natively in their core.
10
+
9
11
  As CLI tooling authors, if we can spare our users a second or two by not checking documentation or writing the `-h` flag, we're doing them a huge favor. The unconscious mind loves hitting the [TAB] key and always expects feedback. When nothing happens, it breaks the user's flow - a frustration apparent across the whole JavaScript CLI tooling ecosystem.
10
12
 
11
13
  tab solves this complexity by providing autocompletions that work consistently across `zsh`, `bash`, `fish`, and `powershell`.
package/dist/bin/cli.js CHANGED
@@ -1,4 +1,5 @@
1
1
  #!/usr/bin/env node
2
- import{RootCommand as e,script as t}from"../t-BDEAdEmc.js";import"../shared-CDiJt0Dj.js";import{tab as n}from"../cac-NlDEuVbb.js";import r from"cac";import{readFileSync as i}from"node:fs";import{promisify as a}from"node:util";import o from"node:child_process";import{readFileSync as s}from"fs";import{execSync as c}from"child_process";function l(){try{let e;try{e=i(`pnpm-workspace.yaml`,`utf8`)}catch{e=i(`pnpm-workspace.yml`,`utf8`)}let t=e.match(/packages:\s*\n((?:\s*-\s*.+\n?)*)/);return t?t[1].split(`
3
- `).map(e=>e.trim()).filter(e=>e.startsWith(`-`)).map(e=>e.substring(1).trim()).filter(e=>e&&!e.startsWith(`#`)):[]}catch{return[]}}function ee(){try{let e=JSON.parse(s(`package.json`,`utf8`));return Object.keys(e.scripts||{})}catch{return[]}}function te(){try{let e=JSON.parse(s(`package.json`,`utf8`)),t={...e.dependencies,...e.devDependencies,...e.peerDependencies,...e.optionalDependencies};return Object.keys(t)}catch{return[]}}const ne=async e=>{ee().forEach(t=>{let n=t.replace(/:/g,`\\:`);e(n,` `)})},u=async e=>{te().forEach(t=>e(t,``))},re=a(o.exec),{execSync:ie}=o,d={workspace(e){l().forEach(t=>e(t,`Workspace pattern: ${t}`))}};function f(e,t,n,r){e._lazyCommand=t,e._optionsLoaded=!1;let i=e.options;e.optionsRaw=i,Object.defineProperty(e,`options`,{get(){return this._optionsLoaded||(this._optionsLoaded=!0,r(this,this._lazyCommand)),i},configurable:!0})}function p(e,t,n){[`remove`,`rm`,`uninstall`,`un`,`update`,`up`].includes(t)&&e.argument(`package`,u),[`run`,`run-script`].includes(t)&&e.argument(`script`,ne,!0)}async function m(e,t={}){try{let{stdout:n}=await re(e,{encoding:`utf8`,timeout:500,maxBuffer:4*1024*1024,...t});return n}catch(e){return e instanceof Error&&`stdout`in e?e.stdout:``}}function h(e,t={}){try{return ie(e,{encoding:`utf8`,timeout:500,...t})}catch(e){return e?.stdout?e.stdout:``}}function g(e){return t=>e.forEach(e=>t(e,` `))}const ae=/\x1B(?:[@-Z\\-_]|\[[0-?]*[ -/]*[@-~])/g,_=/^\s+([a-z][a-z\s,-]*?)\s{2,}(\S.*)$/i,v=/^\s*(?:-(?<short>[A-Za-z]),\s*)?--(?<long>[a-z0-9-]+)(?<val>\s+(?:<[^>]+>|\[[^\]]+\]))?\s{2,}(?<desc>\S.*)$/i,oe=/^\s*(?:-[A-Za-z],\s*)?--[a-z0-9-]+/i,y=e=>e.replace(ae,``),b=e=>(e.match(/^\s*/)||[``])[0].length,x=e=>e.split(`,`).map(e=>e.trim()).filter(Boolean),se=/^\s*Options:/i,ce=/(?:levels?|options?|values?)[^:]*:\s*([^.]+)/i,le=/\r?\n/,ue=/[,\s]+/,S=/^\s*(?:-\w,?\s*)?--(\w+(?:-\w+)*)\s+(\w+(?:-\w+)*)\s+(.+)$/,C=/^\s*-\w,?\s*--\w+(?:,\s*--(\w+(?:-\w+)*)\s+(\w+(?:-\w+)*))?\s+(.+)$/,w=/^\s{20,}/,T=/^\s*[A-Z][^:]*:\s*$/;function E(e){return y(e).split(le)}function de(e){let t=1/0;for(let n of e){let e=n.match(_);if(!e)continue;let r=n.indexOf(e[2]);r>=0&&r<t&&(t=r)}return t}function fe(e,t){let n=1/0;for(let r of e){let e=r.match(v);if(!e||t&&e.groups?.val)continue;let i=r.indexOf(e.groups.desc);i>=0&&i<n&&(n=i)}return n}function D(e,t){let n=E(e),r=[];for(let e=0;e<n.length;e++){let i=n[e],a=i.match(S);if(a){let[,i,o,s]=a;if(i===t){let t=s.trim(),i=e+1;for(;i<n.length;){let e=n[i],r=w.test(e),a=S.test(e)||C.test(e),o=!e.trim()||T.test(e);if(r&&!a&&!o)t+=` `+e.trim(),i++;else break}r.push({value:o,desc:t})}}let o=i.match(C);if(o){let[,i,a,s]=o;if(i===t&&a){let t=s.trim(),i=e+1;for(;i<n.length;){let e=n[i],r=w.test(e),a=S.test(e)||C.test(e),o=!e.trim()||T.test(e);if(r&&!a&&!o)t+=` `+e.trim(),i++;else break}r.push({value:a,desc:t})}}}if(r.length)return r;for(let e=0;e<n.length;e++){let r=n[e];if(r.includes(`--${t}`)||r.includes(`${t}:`))for(let t=e;t<Math.min(e+3,n.length);t++){let e=n[t].match(ce);if(e)return e[1].split(ue).map(e=>e.trim()).filter(e=>e&&!e.includes(`(`)&&!e.includes(`)`)).map(e=>({value:e,desc:`Log level: ${e}`}))}}return[]}const O={...d,loglevel(e){let t=D(h(`pnpm install --help`),`loglevel`);t.length?t.forEach(({value:t,desc:n})=>e(t,n)):g([`debug`,`info`,`warn`,`error`,`silent`])(e)},reporter(e){let t=D(h(`pnpm install --help`),`reporter`);t.length?t.forEach(({value:t,desc:n})=>e(t,n)):g([`default`,`append-only`,`ndjson`,`silent`])(e)},filter(e){e(`.`,`Current working directory`),e(`!<selector>`,`Exclude packages matching selector`),l().forEach(t=>{e(t,`Workspace pattern: ${t}`),e(`${t}...`,`Include dependencies of ${t}`)}),e(`@*/*`,`All scoped packages`),e(`...<pattern>`,`Include dependencies of pattern`),e(`<pattern>...`,`Include dependents of pattern`)}};function pe(e){let t=E(e),n=de(t);if(!Number.isFinite(n))return{};let r=null,i=new Map,a=()=>{if(!r)return;let e=r.desc.trim();for(let t of r.names)i.set(t,e);r=null};for(let e of t){if(se.test(e))break;let t=e.match(_);if(t){a(),r={names:x(t[1]),desc:t[2].trim()};continue}r&&b(e)>=n&&e.trim()&&(r.desc+=` `+e.trim())}return a(),Object.fromEntries(i)}async function k(){let e=await m(`pnpm --help`);return e?pe(e):{}}function A(e,{flagsOnly:t=!0}={}){let n=E(e),r=fe(n,t);if(!Number.isFinite(r))return[];let i=[],a=null,o=()=>{a&&=(a.desc=a.desc.trim(),i.push(a),null)};for(let e of n){let n=e.match(v);if(n){if(t&&n.groups?.val)continue;o(),a={short:n.groups?.short||void 0,long:n.groups.long,desc:n.groups.desc.trim()};continue}if(a){let t=b(e),n=oe.test(e);t>=r&&e.trim()&&!n&&(a.desc+=` `+e.trim())}}return o(),i}function j(e,t){let n=h(`pnpm ${t} --help`);if(!n)return;let r=A(n,{flagsOnly:!1});for(let{long:t,short:n,desc:i}of r){if(e.optionsRaw?.get?.(t))continue;let r=O[t];r?e.option(t,i,r,n):e.option(t,i,n)}for(let[t,r]of Object.entries(O))e.optionsRaw?.get?.(t)||D(n,t).length>0&&e.option(t,` `,r)}async function M(e){try{let t=await k();for(let[n,r]of Object.entries(t)){let t=e.command(n,r);p(t,n,`pnpm`),f(t,n,`pnpm`,j)}}catch{}}const N=/^All commands:\s*$/i,P=/^Options:\s*$/i,F=/^(aliases|run|more)/i,I=/^[a-z][a-z0-9-]*$/,L=/(?:\[)?(?:-([a-z])\|)?--([a-z][a-z0-9-]+)(?:\s+<[^>]+>)?(?:\])?/gi,R=/<[^>]+>/,z=/^\s/;function B(e){return y(e).split(/\r?\n/)}function me(e,t){let n=e.findIndex(e=>t.test(e.trim()));if(n===-1)return``;let r=``;for(let t=n+1;t<e.length;t++){let n=e[t];if(!z.test(n)&&n.trim()&&!n.includes(`,`))break;z.test(n)&&(r+=` `+n.trim())}return r}const V=(e,t=()=>` `)=>n=>e.forEach(e=>n(e,t(e))),he={...d,loglevel:g([`silent`,`error`,`warn`,`notice`,`http`,`info`,`verbose`,`silly`]),"install-strategy":V([`hoisted`,`nested`,`shallow`,`linked`],()=>` `),omit:V([`dev`,`optional`,`peer`],()=>` `),include:V([`prod`,`dev`,`optional`,`peer`],()=>` `)};function ge(e){let t=B(e),n=me(t,N);if(!n)return{};let r={};return n.split(`,`).map(e=>e.trim()).filter(e=>e&&I.test(e)).forEach(e=>{r[e]=` `}),r.run=` `,r}async function _e(){let e=await m(`npm --help`);return e?ge(e):{}}function ve(e,{flagsOnly:t=!0}={}){let n=B(e),r=n.findIndex(e=>P.test(e.trim()));if(r===-1)return[];let i=[];for(let e of n.slice(r+1)){let n=e.trim();if(F.test(n))break;let r=e.matchAll(L);for(let e of r){let n=e[1]||void 0,r=e[2],a=R.test(e[0]);if(t&&a)continue;i.push({short:n,long:r,desc:` `})}}return i}function ye(e,t){let n=h(`npm ${t} --help`);if(!n)return;let r=ve(n,{flagsOnly:!1});for(let{long:t,short:n,desc:i}of r){if(e.optionsRaw?.get?.(t))continue;let r=he[t];r?e.option(t,i,r,n):e.option(t,i,n)}}async function be(e){try{let t=await _e();for(let[n,r]of Object.entries(t)){let t=e.command(n,r);p(t,n,`npm`),f(t,n,`npm`,ye)}}catch{}}const xe=/^\s*Options:\s*$/i,Se=/^\s*Commands:\s*$/i,H=/^(Run `yarn help|Visit https:\/\/)/i,Ce=/\r?\n/,we=/^\s*(?:-([a-zA-Z]),?\s*)?--([a-z][a-z0-9-]*)(?:\s+<[^>]+>|\s+\[[^\]]+\])?\s+(.+)$/,Te=/^\s*-\s+([a-z][a-z0-9-]*(?:\s*\/\s*[a-z][a-zA-Z]*)*)/;function U(e){return y(e).split(Ce)}function W(e,t){for(let n=0;n<e.length;n++)if(t.test(e[n].trim()))return n+1;return-1}const Ee={...d,emoji(e){e(`true`,` `),e(`false`,` `)},production(e){e(`true`,` `),e(`false`,` `)},"scripts-prepend-node-path"(e){e(`true`,` `),e(`false`,` `)}};function De(e){let t=U(e),n={},r=W(t,Se);if(r===-1)return n;for(let e=r;e<t.length;e++){let r=t[e];if(H.test(r))break;if(!r.trim())continue;let i=r.match(Te);if(i){let[,e]=i,t=e.split(/\s*\/\s*/),r=t[0].trim();if(r){n[r]=``;for(let e=1;e<t.length;e++){let r=t[e].trim();r&&(n[r]=``)}}}}return n}async function Oe(){let e=await m(`yarn --help`);return e?De(e):{}}function ke(e,{flagsOnly:t=!0}={}){let n=U(e),r=[],i=W(n,xe);if(i===-1)return r;for(let e=i;e<n.length;e++){let i=n[e];if(H.test(i.trim()))break;let a=i.match(we);if(!a)continue;let[,o,s,c]=a,l=i.includes(`<`)||i.includes(`[`);t&&l||r.push({short:o||void 0,long:s,desc:c.trim()})}return r}function Ae(e,t){let n=h(`yarn ${t} --help`);if(!n)return;let r=ke(n,{flagsOnly:!1});for(let{long:t,short:n,desc:i}of r){if(e.optionsRaw?.get?.(t))continue;let r=Ee[t];r?e.option(t,i,r,n):e.option(t,i,n)}}async function je(e){try{let t=await Oe();for(let[n,r]of Object.entries(t)){let t=e.command(n,r);p(t,n,`yarn`),f(t,n,`yarn`,Ae)}}catch{}}const Me=/^Commands:\s*$/i,G=/^Flags:\s*$/i,Ne=/^(Examples|Full documentation|Learn more)/i,K=/^[a-z][a-z0-9-]*$/,Pe=/^\s*(?:-([a-zA-Z]),?\s*)?--([a-z][a-z0-9-]*)(?:=<[^>]+>)?\s+(.+)$/,Fe=/^ ([a-z][a-z0-9-]*)\s+(.+)$/,Ie=/^\s{12,}([a-z][a-z0-9-]*)\s+(.+)$/,Le=/^\s+[a-z]/,Re=/\s{2,}/,q=/^[A-Z]/,ze=/\r?\n/;function J(e){return y(e).split(ze)}function Y(e,t){for(let n=0;n<e.length;n++)if(t.test(e[n].trim()))return n+1;return-1}const Be={...d,backend(e){e(`clonefile`,` `),e(`hardlink`,` `),e(`symlink`,` `),e(`copyfile`,` `)},linker(e){e(`isolated`,` `),e(`hoisted`,` `)},omit(e){e(`dev`,` `),e(`optional`,` `),e(`peer`,` `)},shell(e){e(`bun`,` `),e(`system`,` `)},"unhandled-rejections"(e){e(`strict`,` `),e(`throw`,` `),e(`warn`,` `),e(`none`,` `),e(`warn-with-error-code`,` `)}};function Ve(e){let t=J(e),n=Y(t,Me);if(n===-1)return{};let r={};for(let e=n;e<t.length;e++){let n=t[e];if(G.test(n.trim())||n.trim()===``&&e+1<t.length&&!t[e+1].match(Le))break;if(!n.trim())continue;let i=n.match(Fe);if(i){let[,e,t]=i;if(K.test(e)){let n=t.split(Re),i=n[n.length-1];if(i&&q.test(i))r[e]=i.trim();else if(n.length>1){for(let t of n)if(q.test(t)){r[e]=t.trim();break}}}}let a=n.match(Ie);if(a){let[,e,t]=a;K.test(e)&&(r[e]=t.trim())}}return r}async function He(){let e=await m(`bun --help`);return e?Ve(e):{}}function Ue(e,{flagsOnly:t=!0}={}){let n=J(e),r=[],i=Y(n,G);if(i===-1)return r;for(let e=i;e<n.length;e++){let i=n[e];if(Ne.test(i.trim()))break;let a=i.match(Pe);if(!a)continue;let[,o,s,c]=a,l=i.includes(`=<`);t&&l||r.push({short:o||void 0,long:s,desc:c.trim()})}return r}function We(e,t){let n=h(`bun ${t} --help`);if(!n)return;let r=Ue(n,{flagsOnly:!1});for(let{long:t,short:n,desc:i}of r){if(e.optionsRaw?.get?.(t))continue;let r=Be[t];r?e.option(t,i,r,n):e.option(t,i,n)}}async function X(e){try{let t=await He();for(let[n,r]of Object.entries(t)){let t=e.command(n,r);p(t,n,`bun`),f(t,n,`bun`,We)}}catch{}}async function Ge(e,t){switch(e){case`pnpm`:await M(t);break;case`npm`:await be(t);break;case`yarn`:await je(t);break;case`bun`:await X(t);break;default:break}}function Z(...e){process.env.DEBUG&&console.error(`[DEBUG]`,...e)}async function Ke(e,t){try{Z(`Checking if ${e} has completions via ${t}`);let n=`${t} ${e} complete --`,r=!!c(n,{encoding:`utf8`,stdio:[`pipe`,`pipe`,`ignore`],timeout:1e3}).trim();return Z(`${e} supports completions: ${r}`),r}catch(t){return Z(`Error checking completions for ${e}:`,t),!1}}async function qe(e,t,n){try{let r=n.map(e=>e.includes(` `)?`"${e}"`:e),i=`${t} ${e} complete -- ${r.join(` `)}`;Z(`Getting completions with command: ${i}`);let a=c(i,{encoding:`utf8`,stdio:[`pipe`,`pipe`,`ignore`],timeout:1e3}).trim().split(`
4
- `).filter(Boolean);return Z(`Got ${a.length} completions from ${e}`),a}catch(t){return Z(`Error getting completions from ${e}:`,t),[]}}var Je=class extends e{packageManager;constructor(e){super(),this.packageManager=e}async parse(e){if(e.length>=1&&e[0].trim()!==``){let t=e[0];if(![...this.commands.keys()].includes(t)&&await Ke(t,this.packageManager)){let n=e.slice(1),r=await qe(t,this.packageManager,n);if(r.length>0){for(let e of r){if(e.startsWith(`:`))continue;if(e.includes(` `)){let[t,n]=e.split(` `);console.log(`${t}\t${n}`)}else console.log(e)}console.log(`:4`);return}}}return super.parse(e)}};const Q=[`npm`,`pnpm`,`yarn`,`bun`],$=[`zsh`,`bash`,`fish`,`powershell`];async function Ye(){let e=r(`tab`),t=process.argv.slice(2);if(t.length>=2&&t[1]===`complete`){let e=t[0];Q.includes(e)||(console.error(`Error: Unsupported package manager "${e}"`),console.error(`Supported package managers: ${Q.join(`, `)}`),process.exit(1));let n=process.argv.indexOf(`--`);if(n!==-1){let t=new Je(e);await Ge(e,t);let r=process.argv.slice(n+1);await t.parse(r),process.exit(0)}else console.error(`Error: Expected '--' followed by command to complete`),console.error(`Example: ${e} exec @bomb.sh/tab ${e} complete -- command-to-complete`),process.exit(1)}e.command(`<packageManager> <shell>`,`Generate shell completion script for a package manager`).action(async(e,t)=>{Q.includes(e)||(console.error(`Error: Unsupported package manager "${e}"`),console.error(`Supported package managers: ${Q.join(`, `)}`),process.exit(1)),$.includes(t)||(console.error(`Error: Unsupported shell "${t}"`),console.error(`Supported shells: ${$.join(`, `)}`),process.exit(1)),Xe(e,t)}),n(e),e.parse()}function Xe(e,n){let r=e,i=`node ${process.argv[1]} ${e}`;t(n,r,i)}Ye().catch(console.error);export{};
2
+ import{RootCommand as e,script as t}from"../t-CMPXbmTJ.js";import"../shared-CDiJt0Dj.js";import{tab as n}from"../cac-BL-zAXTG.js";import r from"cac";import{readFileSync as i}from"node:fs";import{promisify as a}from"node:util";import o from"node:child_process";import{readFileSync as s}from"fs";import{execSync as c}from"child_process";function l(){try{let e;try{e=i(`pnpm-workspace.yaml`,`utf8`)}catch{e=i(`pnpm-workspace.yml`,`utf8`)}let t=e.match(/packages:\s*\n((?:\s*-\s*.+\n?)*)/);return t?t[1].split(`
3
+ `).map(e=>e.trim()).filter(e=>e.startsWith(`-`)).map(e=>e.substring(1).trim()).filter(e=>e&&!e.startsWith(`#`)):[]}catch{return[]}}function ee(){try{let e=JSON.parse(s(`package.json`,`utf8`));return Object.keys(e.scripts||{})}catch{return[]}}function te(){try{let e=JSON.parse(s(`package.json`,`utf8`)),t={...e.dependencies,...e.devDependencies,...e.peerDependencies,...e.optionalDependencies};return Object.keys(t)}catch{return[]}}const ne=async e=>{ee().forEach(t=>{e(t.replace(/:/g,`\\:`),` `)})},u=async e=>{te().forEach(t=>e(t,``))},re=a(o.exec),{execSync:ie}=o,d={workspace(e){l().forEach(t=>e(t,`Workspace pattern: ${t}`))}};function f(e,t,n,r){e._lazyCommand=t,e._optionsLoaded=!1;let i=e.options;e.optionsRaw=i,Object.defineProperty(e,`options`,{get(){return this._optionsLoaded||(this._optionsLoaded=!0,r(this,this._lazyCommand)),i},configurable:!0})}function p(e,t,n){[`remove`,`rm`,`uninstall`,`un`,`update`,`up`].includes(t)&&e.argument(`package`,u),[`run`,`run-script`].includes(t)&&e.argument(`script`,ne,!0)}async function m(e,t={}){try{let{stdout:n}=await re(e,{encoding:`utf8`,timeout:500,maxBuffer:4*1024*1024,...t});return n}catch(e){return e instanceof Error&&`stdout`in e?e.stdout:``}}function h(e,t={}){try{return ie(e,{encoding:`utf8`,timeout:500,...t})}catch(e){return e?.stdout?e.stdout:``}}function g(e){return t=>e.forEach(e=>t(e,` `))}const ae=/\x1B(?:[@-Z\\-_]|\[[0-?]*[ -/]*[@-~])/g,_=/^\s+([a-z][a-z\s,-]*?)\s{2,}(\S.*)$/i,v=/^\s*(?:-(?<short>[A-Za-z]),\s*)?--(?<long>[a-z0-9-]+)(?<val>\s+(?:<[^>]+>|\[[^\]]+\]))?\s{2,}(?<desc>\S.*)$/i,oe=/^\s*(?:-[A-Za-z],\s*)?--[a-z0-9-]+/i,y=e=>e.replace(ae,``),b=e=>(e.match(/^\s*/)||[``])[0].length,x=e=>e.split(`,`).map(e=>e.trim()).filter(Boolean),se=/^\s*Options:/i,ce=/(?:levels?|options?|values?)[^:]*:\s*([^.]+)/i,le=/\r?\n/,ue=/[,\s]+/,S=/^\s*(?:-\w,?\s*)?--(\w+(?:-\w+)*)\s+(\w+(?:-\w+)*)\s+(.+)$/,C=/^\s*-\w,?\s*--\w+(?:,\s*--(\w+(?:-\w+)*)\s+(\w+(?:-\w+)*))?\s+(.+)$/,w=/^\s{20,}/,T=/^\s*[A-Z][^:]*:\s*$/;function E(e){return y(e).split(le)}function de(e){let t=1/0;for(let n of e){let e=n.match(_);if(!e)continue;let r=n.indexOf(e[2]);r>=0&&r<t&&(t=r)}return t}function fe(e,t){let n=1/0;for(let r of e){let e=r.match(v);if(!e||t&&e.groups?.val)continue;let i=r.indexOf(e.groups.desc);i>=0&&i<n&&(n=i)}return n}function D(e,t){let n=E(e),r=[];for(let e=0;e<n.length;e++){let i=n[e],a=i.match(S);if(a){let[,i,o,s]=a;if(i===t){let t=s.trim(),i=e+1;for(;i<n.length;){let e=n[i],r=w.test(e),a=S.test(e)||C.test(e),o=!e.trim()||T.test(e);if(r&&!a&&!o)t+=` `+e.trim(),i++;else break}r.push({value:o,desc:t})}}let o=i.match(C);if(o){let[,i,a,s]=o;if(i===t&&a){let t=s.trim(),i=e+1;for(;i<n.length;){let e=n[i],r=w.test(e),a=S.test(e)||C.test(e),o=!e.trim()||T.test(e);if(r&&!a&&!o)t+=` `+e.trim(),i++;else break}r.push({value:a,desc:t})}}}if(r.length)return r;for(let e=0;e<n.length;e++){let r=n[e];if(r.includes(`--${t}`)||r.includes(`${t}:`))for(let t=e;t<Math.min(e+3,n.length);t++){let e=n[t].match(ce);if(e)return e[1].split(ue).map(e=>e.trim()).filter(e=>e&&!e.includes(`(`)&&!e.includes(`)`)).map(e=>({value:e,desc:`Log level: ${e}`}))}}return[]}const O={...d,loglevel(e){let t=D(h(`pnpm install --help`),`loglevel`);t.length?t.forEach(({value:t,desc:n})=>e(t,n)):g([`debug`,`info`,`warn`,`error`,`silent`])(e)},reporter(e){let t=D(h(`pnpm install --help`),`reporter`);t.length?t.forEach(({value:t,desc:n})=>e(t,n)):g([`default`,`append-only`,`ndjson`,`silent`])(e)},filter(e){e(`.`,`Current working directory`),e(`!<selector>`,`Exclude packages matching selector`),l().forEach(t=>{e(t,`Workspace pattern: ${t}`),e(`${t}...`,`Include dependencies of ${t}`)}),e(`@*/*`,`All scoped packages`),e(`...<pattern>`,`Include dependencies of pattern`),e(`<pattern>...`,`Include dependents of pattern`)}};function k(e){let t=E(e),n=de(t);if(!Number.isFinite(n))return{};let r=null,i=new Map,a=()=>{if(!r)return;let e=r.desc.trim();for(let t of r.names)i.set(t,e);r=null};for(let e of t){if(se.test(e))break;let t=e.match(_);if(t){a(),r={names:x(t[1]),desc:t[2].trim()};continue}r&&b(e)>=n&&e.trim()&&(r.desc+=` `+e.trim())}return a(),Object.fromEntries(i)}async function A(){let e=await m(`pnpm --help`);return e?k(e):{}}function j(e,{flagsOnly:t=!0}={}){let n=E(e),r=fe(n,t);if(!Number.isFinite(r))return[];let i=[],a=null,o=()=>{a&&=(a.desc=a.desc.trim(),i.push(a),null)};for(let e of n){let n=e.match(v);if(n){if(t&&n.groups?.val)continue;o(),a={short:n.groups?.short||void 0,long:n.groups.long,desc:n.groups.desc.trim()};continue}if(a){let t=b(e),n=oe.test(e);t>=r&&e.trim()&&!n&&(a.desc+=` `+e.trim())}}return o(),i}function M(e,t){let n=h(`pnpm ${t} --help`);if(!n)return;let r=j(n,{flagsOnly:!1});for(let{long:t,short:n,desc:i}of r){if(e.optionsRaw?.get?.(t))continue;let r=O[t];r?e.option(t,i,r,n):e.option(t,i,n)}for(let[t,r]of Object.entries(O))e.optionsRaw?.get?.(t)||D(n,t).length>0&&e.option(t,` `,r)}async function N(e){try{let t=await A();for(let[n,r]of Object.entries(t)){let t=e.command(n,r);p(t,n,`pnpm`),f(t,n,`pnpm`,M)}}catch{}}const P=/^All commands:\s*$/i,F=/^Options:\s*$/i,I=/^(aliases|run|more)/i,L=/^[a-z][a-z0-9-]*$/,R=/(?:\[)?(?:-([a-z])\|)?--([a-z][a-z0-9-]+)(?:\s+<[^>]+>)?(?:\])?/gi,z=/<[^>]+>/,B=/^\s/;function V(e){return y(e).split(/\r?\n/)}function pe(e,t){let n=e.findIndex(e=>t.test(e.trim()));if(n===-1)return``;let r=``;for(let t=n+1;t<e.length;t++){let n=e[t];if(!B.test(n)&&n.trim()&&!n.includes(`,`))break;B.test(n)&&(r+=` `+n.trim())}return r}const H=(e,t=()=>` `)=>n=>e.forEach(e=>n(e,t(e))),me={...d,loglevel:g([`silent`,`error`,`warn`,`notice`,`http`,`info`,`verbose`,`silly`]),"install-strategy":H([`hoisted`,`nested`,`shallow`,`linked`],()=>` `),omit:H([`dev`,`optional`,`peer`],()=>` `),include:H([`prod`,`dev`,`optional`,`peer`],()=>` `)};function he(e){let t=pe(V(e),P);if(!t)return{};let n={};return t.split(`,`).map(e=>e.trim()).filter(e=>e&&L.test(e)).forEach(e=>{n[e]=` `}),n.run=` `,n}async function ge(){let e=await m(`npm --help`);return e?he(e):{}}function _e(e,{flagsOnly:t=!0}={}){let n=V(e),r=n.findIndex(e=>F.test(e.trim()));if(r===-1)return[];let i=[];for(let e of n.slice(r+1)){let n=e.trim();if(I.test(n))break;let r=e.matchAll(R);for(let e of r){let n=e[1]||void 0,r=e[2],a=z.test(e[0]);t&&a||i.push({short:n,long:r,desc:` `})}}return i}function ve(e,t){let n=h(`npm ${t} --help`);if(!n)return;let r=_e(n,{flagsOnly:!1});for(let{long:t,short:n,desc:i}of r){if(e.optionsRaw?.get?.(t))continue;let r=me[t];r?e.option(t,i,r,n):e.option(t,i,n)}}async function ye(e){try{let t=await ge();for(let[n,r]of Object.entries(t)){let t=e.command(n,r);p(t,n,`npm`),f(t,n,`npm`,ve)}}catch{}}const be=/^\s*Options:\s*$/i,xe=/^\s*Commands:\s*$/i,U=/^(Run `yarn help|Visit https:\/\/)/i,Se=/\r?\n/,Ce=/^\s*(?:-([a-zA-Z]),?\s*)?--([a-z][a-z0-9-]*)(?:\s+<[^>]+>|\s+\[[^\]]+\])?\s+(.+)$/,we=/^\s*-\s+([a-z][a-z0-9-]*(?:\s*\/\s*[a-z][a-zA-Z]*)*)/;function W(e){return y(e).split(Se)}function G(e,t){for(let n=0;n<e.length;n++)if(t.test(e[n].trim()))return n+1;return-1}const Te={...d,emoji(e){e(`true`,` `),e(`false`,` `)},production(e){e(`true`,` `),e(`false`,` `)},"scripts-prepend-node-path"(e){e(`true`,` `),e(`false`,` `)}};function Ee(e){let t=W(e),n={},r=G(t,xe);if(r===-1)return n;for(let e=r;e<t.length;e++){let r=t[e];if(U.test(r))break;if(!r.trim())continue;let i=r.match(we);if(i){let[,e]=i,t=e.split(/\s*\/\s*/),r=t[0].trim();if(r){n[r]=``;for(let e=1;e<t.length;e++){let r=t[e].trim();r&&(n[r]=``)}}}}return n}async function De(){let e=await m(`yarn --help`);return e?Ee(e):{}}function Oe(e,{flagsOnly:t=!0}={}){let n=W(e),r=[],i=G(n,be);if(i===-1)return r;for(let e=i;e<n.length;e++){let i=n[e];if(U.test(i.trim()))break;let a=i.match(Ce);if(!a)continue;let[,o,s,c]=a,l=i.includes(`<`)||i.includes(`[`);t&&l||r.push({short:o||void 0,long:s,desc:c.trim()})}return r}function ke(e,t){let n=h(`yarn ${t} --help`);if(!n)return;let r=Oe(n,{flagsOnly:!1});for(let{long:t,short:n,desc:i}of r){if(e.optionsRaw?.get?.(t))continue;let r=Te[t];r?e.option(t,i,r,n):e.option(t,i,n)}}async function Ae(e){try{let t=await De();for(let[n,r]of Object.entries(t)){let t=e.command(n,r);p(t,n,`yarn`),f(t,n,`yarn`,ke)}}catch{}}const je=/^Commands:\s*$/i,K=/^Flags:\s*$/i,Me=/^(Examples|Full documentation|Learn more)/i,q=/^[a-z][a-z0-9-]*$/,Ne=/^\s*(?:-([a-zA-Z]),?\s*)?--([a-z][a-z0-9-]*)(?:=<[^>]+>)?\s+(.+)$/,Pe=/^ ([a-z][a-z0-9-]*)\s+(.+)$/,Fe=/^\s{12,}([a-z][a-z0-9-]*)\s+(.+)$/,Ie=/^\s+[a-z]/,Le=/\s{2,}/,J=/^[A-Z]/,Re=/\r?\n/;function Y(e){return y(e).split(Re)}function X(e,t){for(let n=0;n<e.length;n++)if(t.test(e[n].trim()))return n+1;return-1}const ze={...d,backend(e){e(`clonefile`,` `),e(`hardlink`,` `),e(`symlink`,` `),e(`copyfile`,` `)},linker(e){e(`isolated`,` `),e(`hoisted`,` `)},omit(e){e(`dev`,` `),e(`optional`,` `),e(`peer`,` `)},shell(e){e(`bun`,` `),e(`system`,` `)},"unhandled-rejections"(e){e(`strict`,` `),e(`throw`,` `),e(`warn`,` `),e(`none`,` `),e(`warn-with-error-code`,` `)}};function Be(e){let t=Y(e),n=X(t,je);if(n===-1)return{};let r={};for(let e=n;e<t.length;e++){let n=t[e];if(K.test(n.trim())||n.trim()===``&&e+1<t.length&&!t[e+1].match(Ie))break;if(!n.trim())continue;let i=n.match(Pe);if(i){let[,e,t]=i;if(q.test(e)){let n=t.split(Le),i=n[n.length-1];if(i&&J.test(i))r[e]=i.trim();else if(n.length>1){for(let t of n)if(J.test(t)){r[e]=t.trim();break}}}}let a=n.match(Fe);if(a){let[,e,t]=a;q.test(e)&&(r[e]=t.trim())}}return r}async function Ve(){let e=await m(`bun --help`);return e?Be(e):{}}function He(e,{flagsOnly:t=!0}={}){let n=Y(e),r=[],i=X(n,K);if(i===-1)return r;for(let e=i;e<n.length;e++){let i=n[e];if(Me.test(i.trim()))break;let a=i.match(Ne);if(!a)continue;let[,o,s,c]=a,l=i.includes(`=<`);t&&l||r.push({short:o||void 0,long:s,desc:c.trim()})}return r}function Ue(e,t){let n=h(`bun ${t} --help`);if(!n)return;let r=He(n,{flagsOnly:!1});for(let{long:t,short:n,desc:i}of r){if(e.optionsRaw?.get?.(t))continue;let r=ze[t];r?e.option(t,i,r,n):e.option(t,i,n)}}async function Z(e){try{let t=await Ve();for(let[n,r]of Object.entries(t)){let t=e.command(n,r);p(t,n,`bun`),f(t,n,`bun`,Ue)}}catch{}}async function We(e,t){switch(e){case`pnpm`:await N(t);break;case`npm`:await ye(t);break;case`yarn`:await Ae(t);break;case`bun`:await Z(t);break;default:break}}function Ge(...e){process.env.DEBUG&&console.error(`[DEBUG]`,...e)}async function Ke(e,t){try{if(c(`${e} complete --`,{encoding:`utf8`,stdio:[`pipe`,`pipe`,`ignore`],timeout:1e3}).trim())return!0}catch{}try{return!!c(`${t} ${e} complete --`,{encoding:`utf8`,stdio:[`pipe`,`pipe`,`ignore`],timeout:1e3}).trim()}catch{return!1}}async function qe(e,t,n){let r=n.map(e=>e.includes(` `)?`"${e}"`:e);try{let t=c(`${e} complete -- ${r.join(` `)}`,{encoding:`utf8`,stdio:[`pipe`,`pipe`,`ignore`],timeout:1e3});if(t.trim())return t.trim().split(`
4
+ `).filter(Boolean)}catch{}try{return c(`${t} ${e} complete -- ${r.join(` `)}`,{encoding:`utf8`,stdio:[`pipe`,`pipe`,`ignore`],timeout:1e3}).trim().split(`
5
+ `).filter(Boolean)}catch{return[]}}var Je=class extends e{packageManager;constructor(e){super(),this.packageManager=e}stripPackageManagerCommands(e){return e.length===0?e:[`exec`,`x`,`run`,`dlx`].includes(e[0])?e.slice(1):e}async parse(e){let t=this.stripPackageManagerCommands(e);if(t.length>=1&&t[0].trim()!==``){let e=t[0];if(![...this.commands.keys()].includes(e)&&await Ke(e,this.packageManager)){let n=t.slice(1),r=await qe(e,this.packageManager,n);if(r.length>0){Ge(`Returning ${r.length} completions for ${e}`);for(let e of r)if(!e.startsWith(`:`))if(e.includes(` `)){let[t,n]=e.split(` `);console.log(`${t}\t${n}`)}else console.log(e);console.log(`:4`);return}}}return super.parse(e)}};const Q=[`npm`,`pnpm`,`yarn`,`bun`],$=[`zsh`,`bash`,`fish`,`powershell`];async function Ye(){let e=r(`tab`),t=process.argv.slice(2);if(t.length>=2&&t[1]===`complete`){let e=t[0];Q.includes(e)||(console.error(`Error: Unsupported package manager "${e}"`),console.error(`Supported package managers: ${Q.join(`, `)}`),process.exit(1));let n=process.argv.indexOf(`--`);if(n!==-1){let t=new Je(e);await We(e,t);let r=process.argv.slice(n+1);await t.parse(r),process.exit(0)}else console.error(`Error: Expected '--' followed by command to complete`),console.error(`Example: ${e} exec @bomb.sh/tab ${e} complete -- command-to-complete`),process.exit(1)}e.command(`<packageManager> <shell>`,`Generate shell completion script for a package manager`).action(async(e,t)=>{Q.includes(e)||(console.error(`Error: Unsupported package manager "${e}"`),console.error(`Supported package managers: ${Q.join(`, `)}`),process.exit(1)),$.includes(t)||(console.error(`Error: Unsupported shell "${t}"`),console.error(`Supported shells: ${$.join(`, `)}`),process.exit(1)),Xe(e,t)}),n(e),e.parse()}function Xe(e,n){t(n,e,process.env.npm_config_user_agent?`npx --yes @bomb.sh/tab ${e}`:`node ${process.argv[1]} ${e}`)}Ye().catch(console.error);export{};
@@ -0,0 +1 @@
1
+ import{generate as e,generate$1 as t,generate$2 as n,generate$3 as r,t_default as i}from"./t-CMPXbmTJ.js";import{assertDoubleDashes as a}from"./shared-CDiJt0Dj.js";const o=process.execPath,s=process.argv.slice(1),c=f(o),l=s.map(f),u=`${c} ${process.execArgv.map(f).join(` `)} ${l[0]}`,d=/<[^>]+>|\[[^\]]+\]/;function f(e){return e.includes(` `)?`'${e}'`:e}async function p(c,l){for(let e of[c.globalCommand,...c.commands]){if(e.name===`complete`)continue;let t=(e.rawName.match(/\[.*?\]|<.*?>/g)||[]).map(e=>e.startsWith(`[`)),n=e.name===`@@global@@`,r=n?l:l?.subCommands?.[e.name],a=n?``:e.name,o=n?i:i.command(a,e.description||``);if(o){let n=(e.rawName.match(/<([^>]+)>|\[\.\.\.([^\]]+)\]/g)||[]).map(e=>e.startsWith(`<`)&&e.endsWith(`>`)?e.slice(1,-1):e.startsWith(`[...`)&&e.endsWith(`]`)?e.slice(4,-1):e);t.forEach((e,t)=>{let i=n[t]||`arg${t}`,a=r?.args?.[i];a?o.argument(i,a,e):o.argument(i,void 0,e)})}for(let t of[...c.globalCommand.options,...e.options]){let e=t.rawName.match(/^-([a-zA-Z]), --/)?.[1],a=t.name,s=n?i:o;if(s){let n=r?.options?.[a],i=t.required||d.test(t.rawName);n?e?s.option(a,t.description||``,n,e):s.option(a,t.description||``,n):i?e?s.option(a,t.description||``,async()=>[],e):s.option(a,t.description||``,async()=>[]):e?s.option(a,t.description||``,e):s.option(a,t.description||``)}}}return c.command(`complete [shell]`).action(async(l,d)=>{switch(l){case`zsh`:{let e=r(c.name,u);console.log(e);break}case`bash`:{let e=n(c.name,u);console.log(e);break}case`fish`:{let e=t(c.name,u);console.log(e);break}case`powershell`:{let t=e(c.name,u);console.log(t);break}default:{a(c.name);let e=d[`--`]||[];return c.showHelpOnExit=!1,c.unsetMatchedCommand(),c.parse([o,s[0],...e],{run:!1}),i.parse(e)}}}),i}export{p as tab};
package/dist/cac.js CHANGED
@@ -1 +1 @@
1
- import"./t-BDEAdEmc.js";import"./shared-CDiJt0Dj.js";import{tab as e}from"./cac-NlDEuVbb.js";export{e as default};
1
+ import"./t-CMPXbmTJ.js";import"./shared-CDiJt0Dj.js";import{tab as e}from"./cac-BL-zAXTG.js";export{e as default};
package/dist/citty.js CHANGED
@@ -1 +1 @@
1
- import{generate as e,generate$1 as t,generate$2 as n,generate$3 as r,t_default as i}from"./t-BDEAdEmc.js";import{assertDoubleDashes as a}from"./shared-CDiJt0Dj.js";import{defineCommand as o}from"citty";async function s(e){let t=[],n=[];for(let[r,i]of Object.entries(e))if(i.type===`positional`){let e=i;n.push({name:r,description:e.description,isOptional:!e.required,isVariadic:r.startsWith(`[...`)||r.startsWith(`<...`)})}else{let e={name:`--${r}`,description:i.description||``,isRequired:i.required};`alias`in i&&i.alias&&(Array.isArray(i.alias)?i.alias:[i.alias]).forEach(n=>{t.push({...e,name:`-${n}`})}),t.push(e)}return{options:t,args:n}}async function c(e,t=``){let n=await Promise.resolve(e.meta),r=await Promise.resolve(e.subCommands);if(!n||!n.name)throw Error(`Command meta or name is missing`);let i={name:t?`${t} ${n.name}`:n.name,description:n.description||``};if(e.args){let t=await Promise.resolve(e.args),{options:n,args:r}=await s(t);n.length>0&&(i.options=n),r.length>0&&(i.args=r)}return r&&(i.subcommands=await Promise.all(Object.entries(r).map(async([e,t])=>{let n=await Promise.resolve(t);return c(n,i.name)}))),i}async function l(e){let t=await c(e);return JSON.stringify(t,null,2)}function u(e){return e.includes(` `)?`'${e}'`:e}const d=process.execPath,f=process.argv.slice(1),p=u(d),m=f.map(u),h=process.execArgv.map(u),g=`${p} ${h.join(` `)} ${m[0]}`;function _(e){return e.args&&Object.values(e.args).some(e=>e.type===`positional`)}async function v(e,t,n){for(let[r,a]of Object.entries(e)){let e=await b(a),o=await b(e.meta),s=await b(e.subCommands),c=n?.[r];if(!o||typeof o?.description!=`string`)throw Error(`Invalid meta or missing description.`);let l=_(e),u=t?`${t} ${r}`:r,d=i.command(u,o.description);if(l&&e.args)for(let[t,n]of Object.entries(e.args)){let e=n;if(e.type===`positional`){let n=e.required===!1,r=c?.args?.[t];r?d.argument(t,r,n):d.argument(t,void 0,n)}}if(s&&await v(s,u,c?.subCommands),e.args)for(let[t,n]of Object.entries(e.args)){let e=n,r=typeof e==`object`&&`alias`in e?Array.isArray(e.alias)?e.alias[0]:e.alias:void 0,i=c?.options?.[t];i?r?d.option(t,e.description??``,i,r):d.option(t,e.description??``,i):r?d.option(t,e.description??``,r):d.option(t,e.description??``)}}}async function y(s,c){let u=await b(s.meta);if(!u)throw Error(`Invalid meta.`);let d=u.name;if(!d)throw Error(`Invalid meta or missing name.`);let f=await b(s.subCommands);if(!f)throw Error(`Invalid or missing subCommands.`);if(_(s)&&s.args)for(let[e,t]of Object.entries(s.args)){let n=t;if(n.type===`positional`){let t=n.required===!1,r=c?.args?.[e];r?i.argument(e,r,t):i.argument(e,void 0,t)}}if(await v(f,void 0,c?.subCommands),s.args)for(let[e,t]of Object.entries(s.args)){let n=t,r=typeof n==`object`&&`alias`in n?Array.isArray(n.alias)?n.alias[0]:n.alias:void 0,a=c?.options?.[e];a?r?i.option(e,n.description??``,a,r):i.option(e,n.description??``,a):r?i.option(e,n.description??``,r):i.option(e,n.description??``)}return f.complete=o({meta:{name:`complete`,description:`Generate shell completion scripts`},args:{shell:{type:`positional`,description:`Shell type (zsh, bash, fish, powershell, fig)`,required:!1}},async run(o){let c=o.rawArgs[0];switch(c===`--`&&(c=void 0),c){case`zsh`:{let e=r(d,g);console.log(e);break}case`bash`:{let e=n(d,g);console.log(e);break}case`fish`:{let e=t(d,g);console.log(e);break}case`powershell`:{let t=e(d,g);console.log(t);break}case`fig`:{let e=await l(s);console.log(e);break}default:{a(d);let e=o.rawArgs.slice(o.rawArgs.indexOf(`--`)+1);return i.parse(e)}}}}),i}async function b(e){return e instanceof Function?await e():await e}export{y as default};
1
+ import{generate as e,generate$1 as t,generate$2 as n,generate$3 as r,t_default as i}from"./t-CMPXbmTJ.js";import{assertDoubleDashes as a}from"./shared-CDiJt0Dj.js";import{defineCommand as o}from"citty";async function s(e){let t=[],n=[];for(let[r,i]of Object.entries(e))if(i.type===`positional`){let e=i;n.push({name:r,description:e.description,isOptional:!e.required,isVariadic:r.startsWith(`[...`)||r.startsWith(`<...`)})}else{let e={name:`--${r}`,description:i.description||``,isRequired:i.required};`alias`in i&&i.alias&&(Array.isArray(i.alias)?i.alias:[i.alias]).forEach(n=>{t.push({...e,name:`-${n}`})}),t.push(e)}return{options:t,args:n}}async function c(e,t=``){let n=await Promise.resolve(e.meta),r=await Promise.resolve(e.subCommands);if(!n||!n.name)throw Error(`Command meta or name is missing`);let i={name:t?`${t} ${n.name}`:n.name,description:n.description||``};if(e.args){let{options:t,args:n}=await s(await Promise.resolve(e.args));t.length>0&&(i.options=t),n.length>0&&(i.args=n)}return r&&(i.subcommands=await Promise.all(Object.entries(r).map(async([e,t])=>c(await Promise.resolve(t),i.name)))),i}async function l(e){let t=await c(e);return JSON.stringify(t,null,2)}function u(e){return e.includes(` `)?`'${e}'`:e}const d=process.execPath,f=process.argv.slice(1),p=u(d),m=f.map(u),h=`${p} ${process.execArgv.map(u).join(` `)} ${m[0]}`;function g(e){return e.args&&Object.values(e.args).some(e=>e.type===`positional`)}async function _(e,t,n){for(let[r,a]of Object.entries(e)){let e=await y(a),o=await y(e.meta),s=await y(e.subCommands),c=n?.[r];if(!o||typeof o?.description!=`string`)throw Error(`Invalid meta or missing description.`);let l=g(e),u=t?`${t} ${r}`:r,d=i.command(u,o.description);if(l&&e.args)for(let[t,n]of Object.entries(e.args)){let e=n;if(e.type===`positional`){let n=e.required===!1,r=c?.args?.[t];r?d.argument(t,r,n):d.argument(t,void 0,n)}}if(s&&await _(s,u,c?.subCommands),e.args)for(let[t,n]of Object.entries(e.args)){let e=n,r=typeof e==`object`&&`alias`in e?Array.isArray(e.alias)?e.alias[0]:e.alias:void 0,i=c?.options?.[t];i?r?d.option(t,e.description??``,i,r):d.option(t,e.description??``,i):r?d.option(t,e.description??``,r):d.option(t,e.description??``)}}}async function v(s,c){let u=await y(s.meta);if(!u)throw Error(`Invalid meta.`);let d=u.name;if(!d)throw Error(`Invalid meta or missing name.`);let f=await y(s.subCommands);if(g(s)&&s.args)for(let[e,t]of Object.entries(s.args)){let n=t;if(n.type===`positional`){let t=n.required===!1,r=c?.args?.[e];r?i.argument(e,r,t):i.argument(e,void 0,t)}}if(f&&await _(f,void 0,c?.subCommands),s.args)for(let[e,t]of Object.entries(s.args)){let n=t,r=typeof n==`object`&&`alias`in n?Array.isArray(n.alias)?n.alias[0]:n.alias:void 0,a=c?.options?.[e];a?r?i.option(e,n.description??``,a,r):i.option(e,n.description??``,a):r?i.option(e,n.description??``,r):i.option(e,n.description??``)}let p=o({meta:{name:`complete`,description:`Generate shell completion scripts`},args:{shell:{type:`positional`,description:`Shell type (zsh, bash, fish, powershell, fig)`,required:!1}},async run(o){let c=o.rawArgs[0];switch(c===`--`&&(c=void 0),c){case`zsh`:{let e=r(d,h);console.log(e);break}case`bash`:{let e=n(d,h);console.log(e);break}case`fish`:{let e=t(d,h);console.log(e);break}case`powershell`:{let t=e(d,h);console.log(t);break}case`fig`:{let e=await l(s);console.log(e);break}default:{a(d);let e=o.rawArgs.slice(o.rawArgs.indexOf(`--`)+1);return i.parse(e)}}}});return f?f.complete=p:s.subCommands={complete:p},i}async function y(e){return e instanceof Function?await e():await e}export{v as default};
package/dist/commander.js CHANGED
@@ -1 +1 @@
1
- import{generate as e,generate$1 as t,generate$2 as n,generate$3 as r,t_default as i}from"./t-BDEAdEmc.js";import{assertDoubleDashes as a}from"./shared-CDiJt0Dj.js";const o=process.execPath,s=process.argv.slice(1),c=f(o),l=s.map(f),u=process.execArgv.map(f),d=`${c} ${u.join(` `)} ${l[0]}`;function f(e){return e.includes(` `)?`'${e}'`:e}function p(o){let s=o.name();m(o,s),h(o,s),o.command(`complete [shell]`).description(`Generate shell completion scripts`).action(async i=>{switch(i){case`zsh`:{let e=r(s,d);console.log(e);break}case`bash`:{let e=n(s,d);console.log(e);break}case`fish`:{let e=t(s,d);console.log(e);break}case`powershell`:{let t=e(s,d);console.log(t);break}case`debug`:{let e=new Map;g(o,``,e),console.log(`Collected commands:`);for(let[t,n]of e.entries())console.log(`- ${t||`<root>`}: ${n.description()||`No description`}`);break}default:console.error(`Unknown shell: ${i}`),console.error(`Supported shells: zsh, bash, fish, powershell`),process.exit(1)}});let c=o.parse.bind(o);return o.parse=function(e,t){let n=e||process.argv,r=n.findIndex(e=>e===`complete`),l=n.findIndex(e=>e===`--`);if(r!==-1&&l!==-1&&l>r){let e=n.slice(l+1);return a(s),i.parse(e),o}return c(e,t)},i}function m(e,t){for(let t of e.options){let e=t.flags,n=e.match(/^-([a-zA-Z]), --/)?.[1],r=e.match(/--([a-zA-Z0-9-]+)/)?.[1];r&&(n?i.option(r,t.description||``,n):i.option(r,t.description||``))}}function h(e,t){let n=new Map;g(e,``,n);for(let[e,t]of n.entries()){if(e===``)continue;let n=i.command(e,t.description()||``);for(let e of t.options){let t=e.flags,r=t.match(/^-([a-zA-Z]), --/)?.[1],i=t.match(/--([a-zA-Z0-9-]+)/)?.[1];i&&(r?n.option(i,e.description||``,r):n.option(i,e.description||``))}}}function g(e,t,n){n.set(t,e);for(let r of e.commands){if(r.name()===`complete`)continue;let e=t?`${t} ${r.name()}`:r.name();g(r,e,n)}}export{p as default};
1
+ import{generate as e,generate$1 as t,generate$2 as n,generate$3 as r,t_default as i}from"./t-CMPXbmTJ.js";import{assertDoubleDashes as a}from"./shared-CDiJt0Dj.js";const o=process.execPath,s=process.argv.slice(1),c=d(o),l=s.map(d),u=`${c} ${process.execArgv.map(d).join(` `)} ${l[0]}`;function d(e){return e.includes(` `)?`'${e}'`:e}function f(o){let s=o.name();p(o,s),m(o,s),o.command(`complete [shell]`).description(`Generate shell completion scripts`).action(async i=>{switch(i){case`zsh`:{let e=r(s,u);console.log(e);break}case`bash`:{let e=n(s,u);console.log(e);break}case`fish`:{let e=t(s,u);console.log(e);break}case`powershell`:{let t=e(s,u);console.log(t);break}case`debug`:{let e=new Map;h(o,``,e),console.log(`Collected commands:`);for(let[t,n]of e.entries())console.log(`- ${t||`<root>`}: ${n.description()||`No description`}`);break}default:console.error(`Unknown shell: ${i}`),console.error(`Supported shells: zsh, bash, fish, powershell`),process.exit(1)}});let c=o.parse.bind(o);return o.parse=function(e,t){let n=e||process.argv,r=n.findIndex(e=>e===`complete`),l=n.findIndex(e=>e===`--`);if(r!==-1&&l!==-1&&l>r){let e=n.slice(l+1);return a(s),i.parse(e),o}return c(e,t)},i}function p(e,t){for(let t of e.options){let e=t.flags,n=e.match(/^-([a-zA-Z]), --/)?.[1],r=e.match(/--([a-zA-Z0-9-]+)/)?.[1];r&&(n?i.option(r,t.description||``,n):i.option(r,t.description||``))}}function m(e,t){let n=new Map;h(e,``,n);for(let[e,t]of n.entries()){if(e===``)continue;let n=i.command(e,t.description()||``);for(let e of t.options){let t=e.flags,r=t.match(/^-([a-zA-Z]), --/)?.[1],i=t.match(/--([a-zA-Z0-9-]+)/)?.[1];i&&(r?n.option(i,e.description||``,r):n.option(i,e.description||``))}}}function h(e,t,n){n.set(t,e);for(let r of e.commands)r.name()!==`complete`&&h(r,t?`${t} ${r.name()}`:r.name(),n)}export{f as default};
@@ -212,15 +212,15 @@ _${e}() {
212
212
  if [ "\${funcstack[1]}" = "_${e}" ]; then
213
213
  _${e}
214
214
  fi
215
- `}function n(e,t){let n=e.replace(/[-:]/g,`_`),r=a.ShellCompDirectiveError,i=a.ShellCompDirectiveNoSpace,o=a.ShellCompDirectiveNoFileComp,s=a.ShellCompDirectiveFilterFileExt,c=a.ShellCompDirectiveFilterDirs,l=a.ShellCompDirectiveKeepOrder;return`# bash completion for ${e}
215
+ `}function n(e,t){let n=e.replace(/[-:]/g,`_`);return`# bash completion for ${e}
216
216
 
217
217
  # Define shell completion directives
218
- readonly ShellCompDirectiveError=${r}
219
- readonly ShellCompDirectiveNoSpace=${i}
220
- readonly ShellCompDirectiveNoFileComp=${o}
221
- readonly ShellCompDirectiveFilterFileExt=${s}
222
- readonly ShellCompDirectiveFilterDirs=${c}
223
- readonly ShellCompDirectiveKeepOrder=${l}
218
+ readonly ShellCompDirectiveError=${a.ShellCompDirectiveError}
219
+ readonly ShellCompDirectiveNoSpace=${a.ShellCompDirectiveNoSpace}
220
+ readonly ShellCompDirectiveNoFileComp=${a.ShellCompDirectiveNoFileComp}
221
+ readonly ShellCompDirectiveFilterFileExt=${a.ShellCompDirectiveFilterFileExt}
222
+ readonly ShellCompDirectiveFilterDirs=${a.ShellCompDirectiveFilterDirs}
223
+ readonly ShellCompDirectiveKeepOrder=${a.ShellCompDirectiveKeepOrder}
224
224
 
225
225
  # Function to debug completion
226
226
  __${n}_debug() {
@@ -313,15 +313,15 @@ __${n}_complete() {
313
313
 
314
314
  # Register completion function
315
315
  complete -F __${n}_complete ${e}
316
- `}function r(e,t){let n=e.replace(/[-:]/g,`_`),r=a.ShellCompDirectiveError,i=a.ShellCompDirectiveNoSpace,o=a.ShellCompDirectiveNoFileComp,s=a.ShellCompDirectiveFilterFileExt,c=a.ShellCompDirectiveFilterDirs,l=a.ShellCompDirectiveKeepOrder;return`# fish completion for ${e} -*- shell-script -*-
316
+ `}function r(e,t){let n=e.replace(/[-:]/g,`_`);return`# fish completion for ${e} -*- shell-script -*-
317
317
 
318
318
  # Define shell completion directives
319
- set -l ShellCompDirectiveError ${r}
320
- set -l ShellCompDirectiveNoSpace ${i}
321
- set -l ShellCompDirectiveNoFileComp ${o}
322
- set -l ShellCompDirectiveFilterFileExt ${s}
323
- set -l ShellCompDirectiveFilterDirs ${c}
324
- set -l ShellCompDirectiveKeepOrder ${l}
319
+ set -l ShellCompDirectiveError ${a.ShellCompDirectiveError}
320
+ set -l ShellCompDirectiveNoSpace ${a.ShellCompDirectiveNoSpace}
321
+ set -l ShellCompDirectiveNoFileComp ${a.ShellCompDirectiveNoFileComp}
322
+ set -l ShellCompDirectiveFilterFileExt ${a.ShellCompDirectiveFilterFileExt}
323
+ set -l ShellCompDirectiveFilterDirs ${a.ShellCompDirectiveFilterDirs}
324
+ set -l ShellCompDirectiveKeepOrder ${a.ShellCompDirectiveKeepOrder}
325
325
 
326
326
  function __${n}_debug
327
327
  set -l file "$BASH_COMP_DEBUG_FILE"
@@ -462,7 +462,7 @@ end
462
462
 
463
463
  # Set up the completion for the ${e} command
464
464
  complete -c ${e} -f -a "(eval __${n}_perform_completion)"
465
- `}function i(e,t,n=!1){let r=e.replace(/[-:]/g,`_`),i=a.ShellCompDirectiveError,o=a.ShellCompDirectiveNoSpace,s=a.ShellCompDirectiveNoFileComp,c=a.ShellCompDirectiveFilterFileExt,l=a.ShellCompDirectiveFilterDirs,u=a.ShellCompDirectiveKeepOrder;return`# powershell completion for ${e} -*- shell-script -*-
465
+ `}function i(e,t,n=!1){let r=e.replace(/[-:]/g,`_`);return`# powershell completion for ${e} -*- shell-script -*-
466
466
 
467
467
  [Console]::OutputEncoding = [System.Text.Encoding]::UTF8
468
468
  function __${e}_debug {
@@ -500,12 +500,12 @@ complete -c ${e} -f -a "(eval __${n}_perform_completion)"
500
500
  }
501
501
  __${e}_debug "Truncated command: $Command"
502
502
 
503
- $ShellCompDirectiveError=${i}
504
- $ShellCompDirectiveNoSpace=${o}
505
- $ShellCompDirectiveNoFileComp=${s}
506
- $ShellCompDirectiveFilterFileExt=${c}
507
- $ShellCompDirectiveFilterDirs=${l}
508
- $ShellCompDirectiveKeepOrder=${u}
503
+ $ShellCompDirectiveError=${a.ShellCompDirectiveError}
504
+ $ShellCompDirectiveNoSpace=${a.ShellCompDirectiveNoSpace}
505
+ $ShellCompDirectiveNoFileComp=${a.ShellCompDirectiveNoFileComp}
506
+ $ShellCompDirectiveFilterFileExt=${a.ShellCompDirectiveFilterFileExt}
507
+ $ShellCompDirectiveFilterDirs=${a.ShellCompDirectiveFilterDirs}
508
+ $ShellCompDirectiveKeepOrder=${a.ShellCompDirectiveKeepOrder}
509
509
 
510
510
  # Prepare the command to request completions for the program.
511
511
  # Split the command at the first space to separate the program and arguments.
package/dist/t.js CHANGED
@@ -1 +1 @@
1
- import{Argument as e,Command as t,Option as n,RootCommand as r,ShellCompDirective as i,script as a,t_default as o}from"./t-BDEAdEmc.js";export{e as Argument,t as Command,n as Option,r as RootCommand,i as ShellCompDirective,o as default,a as script};
1
+ import{Argument as e,Command as t,Option as n,RootCommand as r,ShellCompDirective as i,script as a,t_default as o}from"./t-CMPXbmTJ.js";export{e as Argument,t as Command,n as Option,r as RootCommand,i as ShellCompDirective,o as default,a as script};
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@bomb.sh/tab",
3
- "version": "0.0.5",
3
+ "version": "0.0.7",
4
4
  "main": "./dist/t.js",
5
5
  "types": "./dist/t.d.ts",
6
6
  "type": "module",
@@ -43,9 +43,6 @@
43
43
  "typescript-eslint": "^8.40.0",
44
44
  "vitest": "^2.1.3"
45
45
  },
46
- "dependencies": {
47
- "mri": "^1.2.0"
48
- },
49
46
  "peerDependencies": {
50
47
  "cac": "^6.7.14",
51
48
  "citty": "^0.1.6",
@@ -1 +0,0 @@
1
- import{generate as e,generate$1 as t,generate$2 as n,generate$3 as r,t_default as i}from"./t-BDEAdEmc.js";import{assertDoubleDashes as a}from"./shared-CDiJt0Dj.js";const o=process.execPath,s=process.argv.slice(1),c=p(o),l=s.map(p),u=process.execArgv.map(p),d=`${c} ${u.join(` `)} ${l[0]}`,f=/<[^>]+>|\[[^\]]+\]/;function p(e){return e.includes(` `)?`'${e}'`:e}async function m(c,l){for(let e of[c.globalCommand,...c.commands]){if(e.name===`complete`)continue;let t=(e.rawName.match(/\[.*?\]|<.*?>/g)||[]).map(e=>e.startsWith(`[`)),n=e.name===`@@global@@`,r=n?l:l?.subCommands?.[e.name],a=n?``:e.name,o=n?i:i.command(a,e.description||``);if(o){let n=(e.rawName.match(/<([^>]+)>|\[\.\.\.([^\]]+)\]/g)||[]).map(e=>e.startsWith(`<`)&&e.endsWith(`>`)?e.slice(1,-1):e.startsWith(`[...`)&&e.endsWith(`]`)?e.slice(4,-1):e);t.forEach((e,t)=>{let i=n[t]||`arg${t}`,a=r?.args?.[i];a?o.argument(i,a,e):o.argument(i,void 0,e)})}for(let t of[...c.globalCommand.options,...e.options]){let e=t.rawName.match(/^-([a-zA-Z]), --/)?.[1],a=t.name,s=n?i:o;if(s){let n=r?.options?.[a],i=t.required||f.test(t.rawName);n?e?s.option(a,t.description||``,n,e):s.option(a,t.description||``,n):i?e?s.option(a,t.description||``,async()=>[],e):s.option(a,t.description||``,async()=>[]):e?s.option(a,t.description||``,e):s.option(a,t.description||``)}}}return c.command(`complete [shell]`).action(async(l,u)=>{switch(l){case`zsh`:{let e=r(c.name,d);console.log(e);break}case`bash`:{let e=n(c.name,d);console.log(e);break}case`fish`:{let e=t(c.name,d);console.log(e);break}case`powershell`:{let t=e(c.name,d);console.log(t);break}default:{a(c.name);let e=u[`--`]||[];return c.showHelpOnExit=!1,c.unsetMatchedCommand(),c.parse([o,s[0],...e],{run:!1}),i.parse(e)}}}),i}export{m as tab};